From 6285603c53616733fec062619094516d5e8fc838 Mon Sep 17 00:00:00 2001 From: kwc Date: Fri, 4 Sep 2009 23:10:08 +0000 Subject: [PATCH 001/245] migration part 1 --- CMakeLists.txt | 19 + Makefile | 1 + .../ConvexDecomposition.cpp | 1065 + .../ConvexDecomposition/ConvexDecomposition.h | 249 + .../ConvexDecomposition/bestfit.cpp | 483 + .../ConvexDecomposition/bestfit.h | 90 + .../ConvexDecomposition/bestfitobb.cpp | 368 + .../ConvexDecomposition/bestfitobb.h | 100 + .../ConvexDecomposition/cd_hull.cpp | 3650 ++++ .../ConvexDecomposition/cd_hull.h | 250 + .../ConvexDecomposition/cd_vector.h | 1209 ++ .../ConvexDecomposition/cd_wavefront.cpp | 858 + .../ConvexDecomposition/cd_wavefront.h | 82 + .../ConvexDecomposition/concavity.cpp | 821 + .../ConvexDecomposition/concavity.h | 81 + .../ConvexDecomposition/fitsphere.cpp | 378 + .../ConvexDecomposition/fitsphere.h | 70 + .../ConvexDecomposition/float_math.cpp | 463 + .../ConvexDecomposition/float_math.h | 112 + .../ConvexDecomposition/meshvolume.cpp | 251 + .../ConvexDecomposition/meshvolume.h | 70 + .../ConvexDecomposition/planetri.cpp | 314 + .../ConvexDecomposition/planetri.h | 82 + .../ConvexDecomposition/raytri.cpp | 160 + .../ConvexDecomposition/raytri.h | 69 + .../ConvexDecomposition/splitplane.cpp | 339 + .../ConvexDecomposition/splitplane.h | 76 + .../ConvexDecomposition/triangulate.cpp | 410 + .../ConvexDecomposition/triangulate.h | 85 + .../ConvexDecomposition/vlookup.cpp | 340 + .../ConvexDecomposition/vlookup.h | 143 + .../ConvexDecomposition/DecomposeSample.cpp | 668 + .../ConvexDecomposition/DecomposeSample.exe | Bin 0 -> 151552 bytes .../ConvexDecomposition/DecomposeSample.sln | 21 + .../ConvexDecomposition/DecomposeSample.suo | Bin 0 -> 8704 bytes .../DecomposeSample.vcproj | 240 + .../ConvexDecomposition/Makefile | 93 + .../ConvexDecomposition/chair.obj | 3083 +++ .../ConvexDecomposition/readme.txt | 75 + convex_decomposition/Makefile | 33 + .../convex_decomposition.patch | 429 + convex_decomposition/manifest.xml | 14 + ivcon/CMakeLists.txt | 9 + ivcon/Makefile | 1 + ivcon/manifest.xml | 14 + ivcon/src/ivcon.c | 16707 ++++++++++++++++ kdl_parser/CMakeLists.txt | 38 + kdl_parser/Makefile | 1 + kdl_parser/include/kdl_parser/dom_parser.hpp | 54 + kdl_parser/include/kdl_parser/xml_parser.hpp | 53 + kdl_parser/manifest.xml | 23 + kdl_parser/pr2.urdf | 2542 +++ kdl_parser/src/dom_parser.cpp | 173 + kdl_parser/src/xml_parser.cpp | 365 + kdl_parser/test/example_dom.cpp | 105 + kdl_parser/test/example_xml.cpp | 99 + kdl_parser/test/pr2_desc.xml | 3541 ++++ kdl_parser/test/pr2_desc_bracket.xml | 22 + kdl_parser/test/pr2_desc_bracket2.xml | 22 + kdl_parser/test/pr2_desc_vector.xml | 22 + kdl_parser/test/test_kdl_parser.cpp | 93 + kdl_parser/test/test_kdl_parser.launch | 6 + resource_retriever/CMakeLists.txt | 35 + resource_retriever/Makefile | 1 + .../include/resource_retriever/retriever.h | 85 + resource_retriever/mainpage.dox | 14 + resource_retriever/manifest.xml | 21 + resource_retriever/src/retriever.cpp | 147 + resource_retriever/test/CMakeLists.txt | 4 + resource_retriever/test/test.cpp | 140 + resource_retriever/test/test.txt | 1 + robot_state_publisher/CMakeLists.txt | 38 + robot_state_publisher/Makefile | 1 + .../joint_state_listener.h | 69 + .../robot_state_publisher.h | 76 + .../treefksolverposfull_recursive.hpp | 48 + robot_state_publisher/manifest.xml | 27 + .../src/joint_state_listener.cpp | 86 + .../src/robot_state_publisher.cpp | 106 + robot_state_publisher/src/state_publisher.cpp | 77 + .../src/treefksolverposfull_recursive.cpp | 76 + robot_state_publisher/test/pr2.urdf | 3117 +++ robot_state_publisher/test/test_publisher.cpp | 136 + .../test/test_publisher.launch | 5 + stack.xml | 15 + urdf/CMakeLists.txt | 36 + urdf/Makefile | 1 + urdf/include/urdf/color.h | 96 + urdf/include/urdf/joint.h | 204 + urdf/include/urdf/link.h | 238 + urdf/include/urdf/model.h | 111 + urdf/include/urdf/pose.h | 232 + urdf/mainpage.dox | 209 + urdf/manifest.xml | 19 + urdf/src/joint.cpp | 387 + urdf/src/link.cpp | 434 + urdf/src/model.cpp | 409 + urdf/test/parse_test.cpp | 104 + urdf/test/pr2_desc.xml | 2542 +++ urdf/test/pr2_desc_bracket.xml | 20 + urdf/test/pr2_desc_double.xml | 39 + urdf/test/pr2_desc_double_joint.xml | 38 + urdf/test/pr2_desc_loop.xml | 39 + urdf/test/pr2_desc_no_joint.xml | 12 + urdf/test/pr2_desc_no_joint2.xml | 20 + urdf/test/pr2_desc_parent_itself.xml | 20 + urdf/test/pr2_desc_two_trees.xml | 39 + urdf/test/test_robot_model_parser.cpp | 98 + urdf/test/test_robot_model_parser.launch | 3 + 109 files changed, 50909 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 Makefile create mode 100644 convex_decomposition/ConvexDecomposition/ConvexDecomposition/ConvexDecomposition.cpp create mode 100644 convex_decomposition/ConvexDecomposition/ConvexDecomposition/ConvexDecomposition.h create mode 100644 convex_decomposition/ConvexDecomposition/ConvexDecomposition/bestfit.cpp create mode 100644 convex_decomposition/ConvexDecomposition/ConvexDecomposition/bestfit.h create mode 100644 convex_decomposition/ConvexDecomposition/ConvexDecomposition/bestfitobb.cpp create mode 100644 convex_decomposition/ConvexDecomposition/ConvexDecomposition/bestfitobb.h create mode 100644 convex_decomposition/ConvexDecomposition/ConvexDecomposition/cd_hull.cpp create mode 100644 convex_decomposition/ConvexDecomposition/ConvexDecomposition/cd_hull.h create mode 100644 convex_decomposition/ConvexDecomposition/ConvexDecomposition/cd_vector.h create mode 100644 convex_decomposition/ConvexDecomposition/ConvexDecomposition/cd_wavefront.cpp create mode 100644 convex_decomposition/ConvexDecomposition/ConvexDecomposition/cd_wavefront.h create mode 100644 convex_decomposition/ConvexDecomposition/ConvexDecomposition/concavity.cpp create mode 100644 convex_decomposition/ConvexDecomposition/ConvexDecomposition/concavity.h create mode 100644 convex_decomposition/ConvexDecomposition/ConvexDecomposition/fitsphere.cpp create mode 100644 convex_decomposition/ConvexDecomposition/ConvexDecomposition/fitsphere.h create mode 100644 convex_decomposition/ConvexDecomposition/ConvexDecomposition/float_math.cpp create mode 100644 convex_decomposition/ConvexDecomposition/ConvexDecomposition/float_math.h create mode 100644 convex_decomposition/ConvexDecomposition/ConvexDecomposition/meshvolume.cpp create mode 100644 convex_decomposition/ConvexDecomposition/ConvexDecomposition/meshvolume.h create mode 100644 convex_decomposition/ConvexDecomposition/ConvexDecomposition/planetri.cpp create mode 100644 convex_decomposition/ConvexDecomposition/ConvexDecomposition/planetri.h create mode 100644 convex_decomposition/ConvexDecomposition/ConvexDecomposition/raytri.cpp create mode 100644 convex_decomposition/ConvexDecomposition/ConvexDecomposition/raytri.h create mode 100644 convex_decomposition/ConvexDecomposition/ConvexDecomposition/splitplane.cpp create mode 100644 convex_decomposition/ConvexDecomposition/ConvexDecomposition/splitplane.h create mode 100644 convex_decomposition/ConvexDecomposition/ConvexDecomposition/triangulate.cpp create mode 100644 convex_decomposition/ConvexDecomposition/ConvexDecomposition/triangulate.h create mode 100644 convex_decomposition/ConvexDecomposition/ConvexDecomposition/vlookup.cpp create mode 100644 convex_decomposition/ConvexDecomposition/ConvexDecomposition/vlookup.h create mode 100644 convex_decomposition/ConvexDecomposition/DecomposeSample.cpp create mode 100644 convex_decomposition/ConvexDecomposition/DecomposeSample.exe create mode 100644 convex_decomposition/ConvexDecomposition/DecomposeSample.sln create mode 100644 convex_decomposition/ConvexDecomposition/DecomposeSample.suo create mode 100644 convex_decomposition/ConvexDecomposition/DecomposeSample.vcproj create mode 100644 convex_decomposition/ConvexDecomposition/Makefile create mode 100644 convex_decomposition/ConvexDecomposition/chair.obj create mode 100644 convex_decomposition/ConvexDecomposition/readme.txt create mode 100644 convex_decomposition/Makefile create mode 100644 convex_decomposition/convex_decomposition.patch create mode 100644 convex_decomposition/manifest.xml create mode 100644 ivcon/CMakeLists.txt create mode 100644 ivcon/Makefile create mode 100644 ivcon/manifest.xml create mode 100644 ivcon/src/ivcon.c create mode 100644 kdl_parser/CMakeLists.txt create mode 100644 kdl_parser/Makefile create mode 100644 kdl_parser/include/kdl_parser/dom_parser.hpp create mode 100644 kdl_parser/include/kdl_parser/xml_parser.hpp create mode 100644 kdl_parser/manifest.xml create mode 100644 kdl_parser/pr2.urdf create mode 100644 kdl_parser/src/dom_parser.cpp create mode 100644 kdl_parser/src/xml_parser.cpp create mode 100644 kdl_parser/test/example_dom.cpp create mode 100644 kdl_parser/test/example_xml.cpp create mode 100644 kdl_parser/test/pr2_desc.xml create mode 100644 kdl_parser/test/pr2_desc_bracket.xml create mode 100644 kdl_parser/test/pr2_desc_bracket2.xml create mode 100644 kdl_parser/test/pr2_desc_vector.xml create mode 100644 kdl_parser/test/test_kdl_parser.cpp create mode 100644 kdl_parser/test/test_kdl_parser.launch create mode 100644 resource_retriever/CMakeLists.txt create mode 100644 resource_retriever/Makefile create mode 100644 resource_retriever/include/resource_retriever/retriever.h create mode 100644 resource_retriever/mainpage.dox create mode 100644 resource_retriever/manifest.xml create mode 100644 resource_retriever/src/retriever.cpp create mode 100644 resource_retriever/test/CMakeLists.txt create mode 100644 resource_retriever/test/test.cpp create mode 100644 resource_retriever/test/test.txt create mode 100644 robot_state_publisher/CMakeLists.txt create mode 100644 robot_state_publisher/Makefile create mode 100644 robot_state_publisher/include/robot_state_publisher/joint_state_listener.h create mode 100644 robot_state_publisher/include/robot_state_publisher/robot_state_publisher.h create mode 100644 robot_state_publisher/include/robot_state_publisher/treefksolverposfull_recursive.hpp create mode 100644 robot_state_publisher/manifest.xml create mode 100644 robot_state_publisher/src/joint_state_listener.cpp create mode 100644 robot_state_publisher/src/robot_state_publisher.cpp create mode 100644 robot_state_publisher/src/state_publisher.cpp create mode 100644 robot_state_publisher/src/treefksolverposfull_recursive.cpp create mode 100644 robot_state_publisher/test/pr2.urdf create mode 100644 robot_state_publisher/test/test_publisher.cpp create mode 100644 robot_state_publisher/test/test_publisher.launch create mode 100644 stack.xml create mode 100644 urdf/CMakeLists.txt create mode 100644 urdf/Makefile create mode 100644 urdf/include/urdf/color.h create mode 100644 urdf/include/urdf/joint.h create mode 100644 urdf/include/urdf/link.h create mode 100644 urdf/include/urdf/model.h create mode 100644 urdf/include/urdf/pose.h create mode 100644 urdf/mainpage.dox create mode 100644 urdf/manifest.xml create mode 100644 urdf/src/joint.cpp create mode 100644 urdf/src/link.cpp create mode 100644 urdf/src/model.cpp create mode 100644 urdf/test/parse_test.cpp create mode 100644 urdf/test/pr2_desc.xml create mode 100644 urdf/test/pr2_desc_bracket.xml create mode 100644 urdf/test/pr2_desc_double.xml create mode 100644 urdf/test/pr2_desc_double_joint.xml create mode 100644 urdf/test/pr2_desc_loop.xml create mode 100644 urdf/test/pr2_desc_no_joint.xml create mode 100644 urdf/test/pr2_desc_no_joint2.xml create mode 100644 urdf/test/pr2_desc_parent_itself.xml create mode 100644 urdf/test/pr2_desc_two_trees.xml create mode 100644 urdf/test/test_robot_model_parser.cpp create mode 100644 urdf/test/test_robot_model_parser.launch diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..84534d8 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,19 @@ +cmake_minimum_required(VERSION 2.4.6) +include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake) + +set(ROSPACK_MAKEDIST true) + +# Append to CPACK_SOURCE_IGNORE_FILES a semicolon-separated list of +# directories (or patterns, but directories should suffice) that should +# be excluded from the distro. This is not the place to put things that +# should be ignored everywhere, like "build" directories; that happens in +# rosbuild/rosbuild.cmake. Here should be listed packages that aren't +# ready for inclusion in a distro. +# +# This list is combined with the list in rosbuild/rosbuild.cmake. Note +# that CMake 2.6 may be required to ensure that the two lists are combined +# properly. CMake 2.4 seems to have unpredictable scoping rules for such +# variables. +#list(APPEND CPACK_SOURCE_IGNORE_FILES /core/experimental) + +rosbuild_make_distribution(0.1.0) diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..a818cca --- /dev/null +++ b/Makefile @@ -0,0 +1 @@ +include $(shell rospack find mk)/cmake_stack.mk \ No newline at end of file diff --git a/convex_decomposition/ConvexDecomposition/ConvexDecomposition/ConvexDecomposition.cpp b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/ConvexDecomposition.cpp new file mode 100644 index 0000000..4198082 --- /dev/null +++ b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/ConvexDecomposition.cpp @@ -0,0 +1,1065 @@ +#include +#include +#include +#include + +/*! +** +** Copyright (c) 2007 by John W. Ratcliff mailto:jratcliff@infiniplex.net +** +** Portions of this source has been released with the PhysXViewer application, as well as +** Rocket, CreateDynamics, ODF, and as a number of sample code snippets. +** +** If you find this code useful or you are feeling particularily generous I would +** ask that you please go to http://www.amillionpixels.us and make a donation +** to Troy DeMolay. +** +** DeMolay is a youth group for young men between the ages of 12 and 21. +** It teaches strong moral principles, as well as leadership skills and +** public speaking. The donations page uses the 'pay for pixels' paradigm +** where, in this case, a pixel is only a single penny. Donations can be +** made for as small as $4 or as high as a $100 block. Each person who donates +** will get a link to their own site as well as acknowledgement on the +** donations blog located here http://www.amillionpixels.blogspot.com/ +** +** If you wish to contact me you can use the following methods: +** +** Skype Phone: 636-486-4040 (let it ring a long time while it goes through switches) +** Skype ID: jratcliff63367 +** Yahoo: jratcliff63367 +** AOL: jratcliff1961 +** email: jratcliff@infiniplex.net +** Personal website: http://jratcliffscarab.blogspot.com +** Coding Website: http://codesuppository.blogspot.com +** FundRaising Blog: http://amillionpixels.blogspot.com +** Fundraising site: http://www.amillionpixels.us +** New Temple Site: http://newtemple.blogspot.com +** +** +** The MIT license: +** +** Permission is hereby granted, free of charge, to any person obtaining a copy +** of this software and associated documentation files (the "Software"), to deal +** in the Software without restriction, including without limitation the rights +** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +** copies of the Software, and to permit persons to whom the Software is furnished +** to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in all +** copies or substantial portions of the Software. + +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +** WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +** CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + + +#include +#include + +#include "ConvexDecomposition.h" +#include "cd_vector.h" +#include "cd_hull.h" +#include "bestfit.h" +#include "planetri.h" +#include "vlookup.h" +#include "splitplane.h" +#include "meshvolume.h" +#include "concavity.h" +#include "bestfitobb.h" +#include "fitsphere.h" +#include "triangulate.h" +#include "float_math.h" + +#define MAKE_MESH 1 +#define CLOSE_FACE 0 + +static unsigned int MAXDEPTH=8; +static double CONCAVE_PERCENT=1.0f; +static double MERGE_PERCENT=2.0f; + + +using namespace ConvexDecomposition; + +typedef std::vector< unsigned int > UintVector; + +namespace ConvexDecomposition +{ + +class Edge +{ +public: + + Edge(unsigned int i1,unsigned int i2) + { + mE1 = i1; + mE2 = i2; + mUsed = false; + } + + unsigned int mE1; + unsigned int mE2; + bool mUsed; +}; + +typedef std::vector< Edge > EdgeVector; + +class FaceTri +{ +public: + FaceTri(void) { }; + + FaceTri(const double *vertices,unsigned int i1,unsigned int i2,unsigned int i3) + { + mP1.Set( &vertices[i1*3] ); + mP2.Set( &vertices[i2*3] ); + mP3.Set( &vertices[i3*3] ); + } + + Vector3d mP1; + Vector3d mP2; + Vector3d mP3; + Vector3d mNormal; + +}; + + + +class CHull +{ +public: + CHull(const ConvexResult &result) + { + mResult = new ConvexResult(result); + mVolume = computeMeshVolume( result.mHullVertices, result.mHullTcount, result.mHullIndices ); + + mDiagonal = getBoundingRegion( result.mHullVcount, result.mHullVertices, sizeof(double)*3, mMin, mMax ); + + double dx = mMax[0] - mMin[0]; + double dy = mMax[1] - mMin[1]; + double dz = mMax[2] - mMin[2]; + + dx*=0.1f; // inflate 1/10th on each edge + dy*=0.1f; // inflate 1/10th on each edge + dz*=0.1f; // inflate 1/10th on each edge + + mMin[0]-=dx; + mMin[1]-=dy; + mMin[2]-=dz; + + mMax[0]+=dx; + mMax[1]+=dy; + mMax[2]+=dz; + + + } + + ~CHull(void) + { + delete mResult; + } + + bool overlap(const CHull &h) const + { + return overlapAABB(mMin,mMax, h.mMin, h.mMax ); + } + + double mMin[3]; + double mMax[3]; + double mVolume; + double mDiagonal; // long edge.. + ConvexResult *mResult; +}; + +// Usage: std::sort( list.begin(), list.end(), StringSortRef() ); +class CHullSort +{ + public: + + bool operator()(const CHull *a,const CHull *b) const + { + return a->mVolume < b->mVolume; + } +}; + + +typedef std::vector< CHull * > CHullVector; + + +class ConvexBuilder : public ConvexDecompInterface +{ +public: + ConvexBuilder(ConvexDecompInterface *callback) + { + mCallback = callback; + }; + + ~ConvexBuilder(void) + { + CHullVector::iterator i; + for (i=mChulls.begin(); i!=mChulls.end(); ++i) + { + CHull *cr = (*i); + delete cr; + } + } + + bool isDuplicate(unsigned int i1,unsigned int i2,unsigned int i3, + unsigned int ci1,unsigned int ci2,unsigned int ci3) + { + unsigned int dcount = 0; + + assert( i1 != i2 && i1 != i3 && i2 != i3 ); + assert( ci1 != ci2 && ci1 != ci3 && ci2 != ci3 ); + + if ( i1 == ci1 || i1 == ci2 || i1 == ci3 ) dcount++; + if ( i2 == ci1 || i2 == ci2 || i2 == ci3 ) dcount++; + if ( i3 == ci1 || i3 == ci2 || i3 == ci3 ) dcount++; + + return dcount == 3; + } + + void getMesh(const ConvexResult &cr,VertexLookup vc) + { + unsigned int *src = cr.mHullIndices; + + for (unsigned int i=0; ioverlap(*b) ) return 0; // if their AABB's (with a little slop) don't overlap, then return. + + if ( MERGE_PERCENT < 0 ) return 0; + + assert( a->mVolume > 0 ); + assert( b->mVolume > 0 ); + + CHull *ret = 0; + + // ok..we are going to combine both meshes into a single mesh + // and then we are going to compute the concavity... + + VertexLookup vc = Vl_createVertexLookup(); + + getMesh( *a->mResult, vc); + getMesh( *b->mResult, vc); + + unsigned int vcount = Vl_getVcount(vc); + const double *vertices = Vl_getVertices(vc); + + HullResult hresult; + HullLibrary hl; + HullDesc desc; + + desc.SetHullFlag(QF_TRIANGLES); + + desc.mVcount = vcount; + desc.mVertices = vertices; + desc.mVertexStride = sizeof(double)*3; + + HullError hret = hl.CreateConvexHull(desc,hresult); + + if ( hret == QE_OK ) + { + + double combineVolume = computeMeshVolume( hresult.mOutputVertices, hresult.mNumFaces, hresult.mIndices ); + double sumVolume = a->mVolume + b->mVolume; + + double percent = (sumVolume*100) / combineVolume; + + if ( percent >= (100.0f-MERGE_PERCENT) ) + { + ConvexResult cr(hresult.mNumOutputVertices, hresult.mOutputVertices, hresult.mNumFaces, hresult.mIndices); + ret = new CHull(cr); + } + } + + + Vl_releaseVertexLookup(vc); + + return ret; + } + + bool combineHulls(void) + { + + bool combine = false; + + sortChulls(mChulls); // sort the convex hulls, largest volume to least... + + CHullVector output; // the output hulls... + + + CHullVector::iterator i; + + for (i=mChulls.begin(); i!=mChulls.end() && !combine; ++i) + { + CHull *cr = (*i); + + CHullVector::iterator j; + for (j=mChulls.begin(); j!=mChulls.end(); ++j) + { + CHull *match = (*j); + + if ( cr != match ) // don't try to merge a hull with itself, that be stoopid + { + + CHull *merge = canMerge(cr,match); // if we can merge these two.... + + if ( merge ) + { + + output.push_back(merge); + + + ++i; + while ( i != mChulls.end() ) + { + CHull *cr = (*i); + if ( cr != match ) + { + output.push_back(cr); + } + i++; + } + + delete cr; + delete match; + combine = true; + break; + } + } + } + + if ( combine ) + { + break; + } + else + { + output.push_back(cr); + } + + } + + if ( combine ) + { + mChulls.clear(); + mChulls = output; + output.clear(); + } + + + return combine; + } + + unsigned int process(const DecompDesc &desc) + { + + unsigned int ret = 0; + + MAXDEPTH = desc.mDepth; + CONCAVE_PERCENT = desc.mCpercent; + MERGE_PERCENT = desc.mPpercent; + + + doConvexDecomposition(desc.mVcount, desc.mVertices, desc.mTcount, desc.mIndices,this,0,0); + + + while ( combineHulls() ); // keep combinging hulls until I can't combine any more... + + CHullVector::iterator i; + for (i=mChulls.begin(); i!=mChulls.end(); ++i) + { + CHull *cr = (*i); + + // before we hand it back to the application, we need to regenerate the hull based on the + // limits given by the user. + + const ConvexResult &c = *cr->mResult; // the high resolution hull... + + HullResult result; + HullLibrary hl; + HullDesc hdesc; + + hdesc.SetHullFlag(QF_TRIANGLES); + + hdesc.mVcount = c.mHullVcount; + hdesc.mVertices = c.mHullVertices; + hdesc.mVertexStride = sizeof(double)*3; + hdesc.mMaxVertices = desc.mMaxVertices; // maximum number of vertices allowed in the output + + if ( desc.mSkinWidth > 0 ) + { + hdesc.mSkinWidth = desc.mSkinWidth; + hdesc.SetHullFlag(QF_SKIN_WIDTH); // do skin width computation. + } + + HullError ret = hl.CreateConvexHull(hdesc,result); + + if ( ret == QE_OK ) + { + ConvexResult r(result.mNumOutputVertices, result.mOutputVertices, result.mNumFaces, result.mIndices); + + r.mHullVolume = computeMeshVolume( result.mOutputVertices, result.mNumFaces, result.mIndices ); // the volume of the hull. + + mCallback->ConvexDecompResult(r); + } + + + delete cr; + } + + ret = mChulls.size(); + + mChulls.clear(); + + return ret; + } + + + virtual void ConvexDebugTri(const double *p1,const double *p2,const double *p3,unsigned int color) + { + mCallback->ConvexDebugTri(p1,p2,p3,color); + } + + virtual void ConvexDebugOBB(const double *sides, const double *matrix,unsigned int color) + { + mCallback->ConvexDebugOBB(sides,matrix,color); + } + virtual void ConvexDebugPoint(const double *p,double dist,unsigned int color) + { + mCallback->ConvexDebugPoint(p,dist,color); + } + + virtual void ConvexDebugBound(const double *bmin,const double *bmax,unsigned int color) + { + mCallback->ConvexDebugBound(bmin,bmax,color); + } + + virtual void ConvexDecompResult(ConvexResult &result) + { + CHull *ch = new CHull(result); + mChulls.push_back(ch); + } + + void sortChulls(CHullVector &hulls) + { + std::sort( hulls.begin(), hulls.end(), CHullSort() ); + } + +#define EPSILON 0.001f + + bool isEdge(const Vector3d &p,const double *plane) + { + bool ret = false; + + double dist = fabs(fm_distToPlane(plane,p.Ptr())); + + if ( dist < EPSILON ) + { + ret = true; + } + + + return ret; + } + + void addEdge(const Vector3d &p1,const Vector3d &p2,EdgeVector &edges,VertexLookup split,const double *plane) + { + if ( isEdge(p1,plane) && isEdge(p2,plane) ) + { + unsigned int i1 = Vl_getIndex(split,p1.Ptr()); + unsigned int i2 = Vl_getIndex(split,p2.Ptr()); + + bool found = false; + + for (unsigned int i=0; i &p1, + const Vector3d &p2, + const Vector3d &p3, + EdgeVector &edges, + VertexLookup split, + const double *plane) + { + bool ret = false; + + unsigned int i1 = Vl_getIndex(vl, p1.Ptr() ); + unsigned int i2 = Vl_getIndex(vl, p2.Ptr() ); + unsigned int i3 = Vl_getIndex(vl, p3.Ptr() ); + + // do *not* process degenerate triangles! + + if ( i1 != i2 && i1 != i3 && i2 != i3 ) + { + + list.push_back(i1); + list.push_back(i2); + list.push_back(i3); +#if CLOSE_FACE + addEdge(p1,p2,edges,split,plane); + addEdge(p2,p3,edges,split,plane); + addEdge(p3,p1,edges,split,plane); +#endif + ret = true; + } + return ret; + } + + void saveEdges(VertexLookup vl,const EdgeVector &edges,bool front) + { + char scratch[512]; + if ( front ) + { + static int fcount=1; + sprintf(scratch,"CD_Front%d.obj", fcount++); + } + else + { + static int bcount=1; + sprintf(scratch,"CD_Back%d.obj", bcount++); + } + + FILE *fph = fopen(scratch,"wb"); + if (fph) + { + unsigned int vcount = Vl_getVcount(vl); + const double *vertices = Vl_getVertices(vl); + fprintf(fph,"v 10 10 0\r\n"); + for (unsigned int i=0; i= 0 ) + { + double volume; + + double c = computeConcavity( vcount, vertices, tcount, indices, callback, plane, volume ); + + if ( depth == 0 ) + { + masterVolume = volume; + } + + double percent = (c*100.0f)/masterVolume; + + if ( percent > CONCAVE_PERCENT ) // if great than 5% of the total volume is concave, go ahead and keep splitting. + { + split = true; + } + } + else + { + split = computeSplitPlane(vcount,vertices,tcount,indices,callback,plane); + } + + } + + if ( depth >= MAXDEPTH || !split ) + { + + HullResult result; + HullLibrary hl; + HullDesc desc; + + desc.SetHullFlag(QF_TRIANGLES); + + desc.mVcount = vcount; + desc.mVertices = vertices; + desc.mVertexStride = sizeof(double)*3; + + HullError ret = hl.CreateConvexHull(desc,result); + + if ( ret == QE_OK ) + { + + ConvexResult r(result.mNumOutputVertices, result.mOutputVertices, result.mNumFaces, result.mIndices); + + + callback->ConvexDecompResult(r); + } + + + return; + } + + UintVector ifront; + UintVector iback; + + EdgeVector frontEdges; + EdgeVector backEdges; + + VertexLookup vfront = Vl_createVertexLookup(); + VertexLookup vback = Vl_createVertexLookup(); + + VertexLookup splitFront = Vl_createVertexLookup(); + VertexLookup splitBack = Vl_createVertexLookup(); + + + + if ( 1 ) + { + + // ok..now we are going to 'split' all of the input triangles against this plane! + + const unsigned int *source = indices; + + for (unsigned int i=0; i front[4]; + Vector3d back[4]; + + unsigned int fcount=0; + unsigned int bcount=0; + + PlaneTriResult result; + + result = planeTriIntersection(plane,t.mP1.Ptr(),sizeof(Vector3d),0.00001f,front[0].Ptr(),fcount,back[0].Ptr(),bcount ); + + if( fcount > 4 || bcount > 4 ) + { + result = planeTriIntersection(plane,t.mP1.Ptr(),sizeof(Vector3d),0.00001f,front[0].Ptr(),fcount,back[0].Ptr(),bcount ); + } + + switch ( result ) + { + case PTR_FRONT: + + assert( fcount == 3 ); + + #if MAKE_MESH + addTri( vfront, ifront, front[0], front[1], front[2], frontEdges, splitFront, plane ); + #endif + + break; + case PTR_BACK: + assert( bcount == 3 ); + + #if MAKE_MESH + addTri( vback, iback, back[0], back[1], back[2], backEdges, splitBack, plane ); + #endif + + break; + case PTR_SPLIT: + + assert( fcount >= 3 && fcount <= 4); + assert( bcount >= 3 && bcount <= 4); + + #if MAKE_MESH + addTri( vfront, ifront, front[0], front[1], front[2], frontEdges, splitFront, plane ); + addTri( vback, iback, back[0], back[1], back[2], backEdges, splitBack, plane ); + + if ( fcount == 4 ) + { + addTri( vfront, ifront, front[0], front[2], front[3], frontEdges, splitFront, plane ); + } + + if ( bcount == 4 ) + { + addTri( vback, iback, back[0], back[2], back[3], backEdges, splitBack, plane ); + } + #endif + + break; + } + } + + +// saveEdges(vfront,frontEdges,true); +// saveEdges(vback,backEdges,false); + + // Triangulate the front surface... + if ( frontEdges.size() ) // extract polygons for the front + { + UintVector polygon; + + bool ok = extractPolygon(frontEdges,polygon,splitFront); + + while ( ok ) + { + + const double *vertices = Vl_getVertices(splitFront); + unsigned int pcount = polygon.size(); + unsigned int maxTri = pcount*3; + double *tris = new double[maxTri*9]; + + unsigned int tcount = triangulate3d(pcount,(const unsigned int *) &polygon[0], vertices, tris, maxTri, plane ); + + if ( tcount ) + { + // cool! now add these triangles to the frong.. + const double *source = tris; + for (unsigned int i=0; i= 0 ) + { + Edge &e = edges[root]; + polygon.push_back(e.mE1); + int link; + + do + { + link = findEdge(edges,e.mE2); + if ( link < 0 ) + link = findNearestEdge(edges,e.mE2,split); + + if ( link >= 0 ) + { + e = edges[link]; + polygon.push_back(e.mE1 ); + } + } while ( link >= 0 ); + + + if ( polygon.size() >= 3 ) + { + ret = true; + } + + } + + return ret; + } + +CHullVector mChulls; +ConvexDecompInterface *mCallback; + +}; + +unsigned int performConvexDecomposition(const DecompDesc &desc) +{ + unsigned int ret = 0; + + if ( desc.mCallback ) + { + ConvexBuilder cb(desc.mCallback); + + ret = cb.process(desc); + } + + return ret; +} + + + +}; diff --git a/convex_decomposition/ConvexDecomposition/ConvexDecomposition/ConvexDecomposition.h b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/ConvexDecomposition.h new file mode 100644 index 0000000..b590e2d --- /dev/null +++ b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/ConvexDecomposition.h @@ -0,0 +1,249 @@ +#ifndef CONVEX_DECOMPOSITION_H + +#define CONVEX_DECOMPOSITION_H + +namespace ConvexDecomposition +{ + + /*! + ** + ** Copyright (c) 2007 by John W. Ratcliff mailto:jratcliff@infiniplex.net + ** + ** Portions of this source has been released with the PhysXViewer application, as well as + ** Rocket, CreateDynamics, ODF, and as a number of sample code snippets. + ** + ** If you find this code useful or you are feeling particularily generous I would + ** ask that you please go to http://www.amillionpixels.us and make a donation + ** to Troy DeMolay. + ** + ** DeMolay is a youth group for young men between the ages of 12 and 21. + ** It teaches strong moral principles, as well as leadership skills and + ** public speaking. The donations page uses the 'pay for pixels' paradigm + ** where, in this case, a pixel is only a single penny. Donations can be + ** made for as small as $4 or as high as a $100 block. Each person who donates + ** will get a link to their own site as well as acknowledgement on the + ** donations blog located here http://www.amillionpixels.blogspot.com/ + ** + ** If you wish to contact me you can use the following methods: + ** + ** Skype Phone: 636-486-4040 (let it ring a long time while it goes through switches) + ** Skype ID: jratcliff63367 + ** Yahoo: jratcliff63367 + ** AOL: jratcliff1961 + ** email: jratcliff@infiniplex.net + ** Personal website: http://jratcliffscarab.blogspot.com + ** Coding Website: http://codesuppository.blogspot.com + ** FundRaising Blog: http://amillionpixels.blogspot.com + ** Fundraising site: http://www.amillionpixels.us + ** New Temple Site: http://newtemple.blogspot.com + ** + ** + ** The MIT license: + ** + ** Permission is hereby granted, free of charge, to any person obtaining a copy + ** of this software and associated documentation files (the "Software"), to deal + ** in the Software without restriction, including without limitation the rights + ** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + ** copies of the Software, and to permit persons to whom the Software is furnished + ** to do so, subject to the following conditions: + ** + ** The above copyright notice and this permission notice shall be included in all + ** copies or substantial portions of the Software. + + ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + ** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + ** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + ** WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + ** CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + */ + + + +class ConvexResult +{ +public: + ConvexResult(void) + { + mHullVcount = 0; + mHullVertices = 0; + mHullTcount = 0; + mHullIndices = 0; + } + + ConvexResult(unsigned int hvcount,const double *hvertices,unsigned int htcount,const unsigned int *hindices) + { + mHullVcount = hvcount; + if ( mHullVcount ) + { + mHullVertices = new double[mHullVcount*sizeof(double)*3]; + memcpy(mHullVertices, hvertices, sizeof(double)*3*mHullVcount ); + } + else + { + mHullVertices = 0; + } + + mHullTcount = htcount; + + if ( mHullTcount ) + { + mHullIndices = new unsigned int[sizeof(unsigned int)*mHullTcount*3]; + memcpy(mHullIndices,hindices, sizeof(unsigned int)*mHullTcount*3 ); + } + else + { + mHullIndices = 0; + } + + } + + ConvexResult(const ConvexResult &r) // copy constructor, perform a deep copy of the data. + { + mHullVcount = r.mHullVcount; + if ( mHullVcount ) + { + mHullVertices = new double[mHullVcount*sizeof(double)*3]; + memcpy(mHullVertices, r.mHullVertices, sizeof(double)*3*mHullVcount ); + } + else + { + mHullVertices = 0; + } + mHullTcount = r.mHullTcount; + if ( mHullTcount ) + { + mHullIndices = new unsigned int[sizeof(unsigned int)*mHullTcount*3]; + memcpy(mHullIndices, r.mHullIndices, sizeof(unsigned int)*mHullTcount*3 ); + } + else + { + mHullIndices = 0; + } + } + + ~ConvexResult(void) + { + delete mHullVertices; + delete mHullIndices; + } + +// the convex hull. + unsigned int mHullVcount; + double * mHullVertices; + unsigned int mHullTcount; + unsigned int *mHullIndices; + + double mHullVolume; // the volume of the convex hull. + +}; + +// convert from doubles back down to floats. +class FConvexResult +{ +public: + FConvexResult(const ConvexResult &r) + { + mHullVcount = r.mHullVcount; + mHullVertices = 0; + if ( mHullVcount ) + { + mHullVertices = new float[mHullVcount*3]; + + const double *src = r.mHullVertices; + float * dest = mHullVertices; + for (unsigned int i=0; i +#include +#include +#include +#include + +// Geometric Tools, Inc. +// http://www.geometrictools.com +// Copyright (c) 1998-2006. All Rights Reserved +// +// The Wild Magic Library (WM3) source code is supplied under the terms of +// the license agreement +// http://www.geometrictools.com/License/WildMagic3License.pdf +// and may not be copied or disclosed except in accordance with the terms +// of that agreement. + +/*! +** +** Copyright (c) 2007 by John W. Ratcliff mailto:jratcliff@infiniplex.net +** +** Portions of this source has been released with the PhysXViewer application, as well as +** Rocket, CreateDynamics, ODF, and as a number of sample code snippets. +** +** If you find this code useful or you are feeling particularily generous I would +** ask that you please go to http://www.amillionpixels.us and make a donation +** to Troy DeMolay. +** +** DeMolay is a youth group for young men between the ages of 12 and 21. +** It teaches strong moral principles, as well as leadership skills and +** public speaking. The donations page uses the 'pay for pixels' paradigm +** where, in this case, a pixel is only a single penny. Donations can be +** made for as small as $4 or as high as a $100 block. Each person who donates +** will get a link to their own site as well as acknowledgement on the +** donations blog located here http://www.amillionpixels.blogspot.com/ +** +** If you wish to contact me you can use the following methods: +** +** Skype Phone: 636-486-4040 (let it ring a long time while it goes through switches) +** Skype ID: jratcliff63367 +** Yahoo: jratcliff63367 +** AOL: jratcliff1961 +** email: jratcliff@infiniplex.net +** Personal website: http://jratcliffscarab.blogspot.com +** Coding Website: http://codesuppository.blogspot.com +** FundRaising Blog: http://amillionpixels.blogspot.com +** Fundraising site: http://www.amillionpixels.us +** New Temple Site: http://newtemple.blogspot.com +** +** +** The MIT license: +** +** Permission is hereby granted, free of charge, to any person obtaining a copy +** of this software and associated documentation files (the "Software"), to deal +** in the Software without restriction, including without limitation the rights +** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +** copies of the Software, and to permit persons to whom the Software is furnished +** to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in all +** copies or substantial portions of the Software. + +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +** WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +** CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + + +#include "bestfit.h" + +namespace ConvexDecomposition +{ + +class Vec3 +{ +public: + Vec3(void) { }; + Vec3(double _x,double _y,double _z) { x = _x; y = _y; z = _z; }; + + + double dot(const Vec3 &v) + { + return x*v.x + y*v.y + z*v.z; // the dot product + } + + double x; + double y; + double z; +}; + + +class Eigen +{ +public: + + + void DecrSortEigenStuff(void) + { + Tridiagonal(); //diagonalize the matrix. + QLAlgorithm(); // + DecreasingSort(); + GuaranteeRotation(); + } + + void Tridiagonal(void) + { + double fM00 = mElement[0][0]; + double fM01 = mElement[0][1]; + double fM02 = mElement[0][2]; + double fM11 = mElement[1][1]; + double fM12 = mElement[1][2]; + double fM22 = mElement[2][2]; + + m_afDiag[0] = fM00; + m_afSubd[2] = 0; + if (fM02 != (double)0.0) + { + double fLength = sqrt(fM01*fM01+fM02*fM02); + double fInvLength = ((double)1.0)/fLength; + fM01 *= fInvLength; + fM02 *= fInvLength; + double fQ = ((double)2.0)*fM01*fM12+fM02*(fM22-fM11); + m_afDiag[1] = fM11+fM02*fQ; + m_afDiag[2] = fM22-fM02*fQ; + m_afSubd[0] = fLength; + m_afSubd[1] = fM12-fM01*fQ; + mElement[0][0] = (double)1.0; + mElement[0][1] = (double)0.0; + mElement[0][2] = (double)0.0; + mElement[1][0] = (double)0.0; + mElement[1][1] = fM01; + mElement[1][2] = fM02; + mElement[2][0] = (double)0.0; + mElement[2][1] = fM02; + mElement[2][2] = -fM01; + m_bIsRotation = false; + } + else + { + m_afDiag[1] = fM11; + m_afDiag[2] = fM22; + m_afSubd[0] = fM01; + m_afSubd[1] = fM12; + mElement[0][0] = (double)1.0; + mElement[0][1] = (double)0.0; + mElement[0][2] = (double)0.0; + mElement[1][0] = (double)0.0; + mElement[1][1] = (double)1.0; + mElement[1][2] = (double)0.0; + mElement[2][0] = (double)0.0; + mElement[2][1] = (double)0.0; + mElement[2][2] = (double)1.0; + m_bIsRotation = true; + } + } + + bool QLAlgorithm(void) + { + const int iMaxIter = 32; + + for (int i0 = 0; i0 <3; i0++) + { + int i1; + for (i1 = 0; i1 < iMaxIter; i1++) + { + int i2; + for (i2 = i0; i2 <= (3-2); i2++) + { + double fTmp = fabs(m_afDiag[i2]) + fabs(m_afDiag[i2+1]); + if ( fabs(m_afSubd[i2]) + fTmp == fTmp ) + break; + } + if (i2 == i0) + { + break; + } + + double fG = (m_afDiag[i0+1] - m_afDiag[i0])/(((double)2.0) * m_afSubd[i0]); + double fR = sqrt(fG*fG+(double)1.0); + if (fG < (double)0.0) + { + fG = m_afDiag[i2]-m_afDiag[i0]+m_afSubd[i0]/(fG-fR); + } + else + { + fG = m_afDiag[i2]-m_afDiag[i0]+m_afSubd[i0]/(fG+fR); + } + double fSin = (double)1.0, fCos = (double)1.0, fP = (double)0.0; + for (int i3 = i2-1; i3 >= i0; i3--) + { + double fF = fSin*m_afSubd[i3]; + double fB = fCos*m_afSubd[i3]; + if (fabs(fF) >= fabs(fG)) + { + fCos = fG/fF; + fR = sqrt(fCos*fCos+(double)1.0); + m_afSubd[i3+1] = fF*fR; + fSin = ((double)1.0)/fR; + fCos *= fSin; + } + else + { + fSin = fF/fG; + fR = sqrt(fSin*fSin+(double)1.0); + m_afSubd[i3+1] = fG*fR; + fCos = ((double)1.0)/fR; + fSin *= fCos; + } + fG = m_afDiag[i3+1]-fP; + fR = (m_afDiag[i3]-fG)*fSin+((double)2.0)*fB*fCos; + fP = fSin*fR; + m_afDiag[i3+1] = fG+fP; + fG = fCos*fR-fB; + for (int i4 = 0; i4 < 3; i4++) + { + fF = mElement[i4][i3+1]; + mElement[i4][i3+1] = fSin*mElement[i4][i3]+fCos*fF; + mElement[i4][i3] = fCos*mElement[i4][i3]-fSin*fF; + } + } + m_afDiag[i0] -= fP; + m_afSubd[i0] = fG; + m_afSubd[i2] = (double)0.0; + } + if (i1 == iMaxIter) + { + return false; + } + } + return true; + } + + void DecreasingSort(void) + { + //sort eigenvalues in decreasing order, e[0] >= ... >= e[iSize-1] + for (int i0 = 0, i1; i0 <= 3-2; i0++) + { + // locate maximum eigenvalue + i1 = i0; + double fMax = m_afDiag[i1]; + int i2; + for (i2 = i0+1; i2 < 3; i2++) + { + if (m_afDiag[i2] > fMax) + { + i1 = i2; + fMax = m_afDiag[i1]; + } + } + + if (i1 != i0) + { + // swap eigenvalues + m_afDiag[i1] = m_afDiag[i0]; + m_afDiag[i0] = fMax; + // swap eigenvectors + for (i2 = 0; i2 < 3; i2++) + { + double fTmp = mElement[i2][i0]; + mElement[i2][i0] = mElement[i2][i1]; + mElement[i2][i1] = fTmp; + m_bIsRotation = !m_bIsRotation; + } + } + } + } + + + void GuaranteeRotation(void) + { + if (!m_bIsRotation) + { + // change sign on the first column + for (int iRow = 0; iRow <3; iRow++) + { + mElement[iRow][0] = -mElement[iRow][0]; + } + } + } + + double mElement[3][3]; + double m_afDiag[3]; + double m_afSubd[3]; + bool m_bIsRotation; +}; + + +bool getBestFitPlane(unsigned int vcount, + const double *points, + unsigned int vstride, + const double *weights, + unsigned int wstride, + double *plane) +{ + bool ret = false; + + Vec3 kOrigin(0,0,0); + + double wtotal = 0; + + if ( 1 ) + { + const char *source = (const char *) points; + const char *wsource = (const char *) weights; + + for (unsigned int i=0; i bmax[0] ) bmax[0] = p[0]; + if ( p[1] > bmax[1] ) bmax[1] = p[1]; + if ( p[2] > bmax[2] ) bmax[2] = p[2]; + + } + + double dx = bmax[0] - bmin[0]; + double dy = bmax[1] - bmin[1]; + double dz = bmax[2] - bmin[2]; + + return sqrt( dx*dx + dy*dy + dz*dz ); + +} + + +bool overlapAABB(const double *bmin1,const double *bmax1,const double *bmin2,const double *bmax2) // return true if the two AABB's overlap. +{ + if ( bmax2[0] < bmin1[0] ) return false; // if the maximum is less than our minimum on any axis + if ( bmax2[1] < bmin1[1] ) return false; + if ( bmax2[2] < bmin1[2] ) return false; + + if ( bmin2[0] > bmax1[0] ) return false; // if the minimum is greater than our maximum on any axis + if ( bmin2[1] > bmax1[1] ) return false; // if the minimum is greater than our maximum on any axis + if ( bmin2[2] > bmax1[2] ) return false; // if the minimum is greater than our maximum on any axis + + + return true; // the extents overlap +} + +}; // end of namespace diff --git a/convex_decomposition/ConvexDecomposition/ConvexDecomposition/bestfit.h b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/bestfit.h new file mode 100644 index 0000000..2cd05dc --- /dev/null +++ b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/bestfit.h @@ -0,0 +1,90 @@ +#ifndef BEST_FIT_H + +#define BEST_FIT_H + +// This routine was released in 'snippet' form +// by John W. Ratcliff mailto:jratcliff@infiniplex.net +// on March 22, 2006. +// +// This routine computes the 'best fit' plane equation to +// a set of input data points with an optional per vertex +// weighting component. +// +// The implementation for this was lifted directly from +// David Eberly's Magic Software implementation. + +// computes the best fit plane to a collection of data points. +// returns the plane equation as A,B,C,D format. (Ax+By+Cz+D) + +/*! +** +** Copyright (c) 2007 by John W. Ratcliff mailto:jratcliff@infiniplex.net +** +** Portions of this source has been released with the PhysXViewer application, as well as +** Rocket, CreateDynamics, ODF, and as a number of sample code snippets. +** +** If you find this code useful or you are feeling particularily generous I would +** ask that you please go to http://www.amillionpixels.us and make a donation +** to Troy DeMolay. +** +** DeMolay is a youth group for young men between the ages of 12 and 21. +** It teaches strong moral principles, as well as leadership skills and +** public speaking. The donations page uses the 'pay for pixels' paradigm +** where, in this case, a pixel is only a single penny. Donations can be +** made for as small as $4 or as high as a $100 block. Each person who donates +** will get a link to their own site as well as acknowledgement on the +** donations blog located here http://www.amillionpixels.blogspot.com/ +** +** If you wish to contact me you can use the following methods: +** +** Skype Phone: 636-486-4040 (let it ring a long time while it goes through switches) +** Skype ID: jratcliff63367 +** Yahoo: jratcliff63367 +** AOL: jratcliff1961 +** email: jratcliff@infiniplex.net +** Personal website: http://jratcliffscarab.blogspot.com +** Coding Website: http://codesuppository.blogspot.com +** FundRaising Blog: http://amillionpixels.blogspot.com +** Fundraising site: http://www.amillionpixels.us +** New Temple Site: http://newtemple.blogspot.com +** +** +** The MIT license: +** +** Permission is hereby granted, free of charge, to any person obtaining a copy +** of this software and associated documentation files (the "Software"), to deal +** in the Software without restriction, including without limitation the rights +** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +** copies of the Software, and to permit persons to whom the Software is furnished +** to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in all +** copies or substantial portions of the Software. + +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +** WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +** CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + +namespace ConvexDecomposition +{ + + +bool getBestFitPlane(unsigned int vcount, // number of input data points + const double *points, // starting address of points array. + unsigned int vstride, // stride between input points. + const double *weights, // *optional point weighting values. + unsigned int wstride, // weight stride for each vertex. + double *plane); + + +double getBoundingRegion(unsigned int vcount,const double *points,unsigned int pstride,double *bmin,double *bmax); // returns the diagonal distance +bool overlapAABB(const double *bmin1,const double *bmax1,const double *bmin2,const double *bmax2); // return true if the two AABB's overlap. + +}; + +#endif diff --git a/convex_decomposition/ConvexDecomposition/ConvexDecomposition/bestfitobb.cpp b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/bestfitobb.cpp new file mode 100644 index 0000000..d84dd6d --- /dev/null +++ b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/bestfitobb.cpp @@ -0,0 +1,368 @@ +#include +#include +#include +#include +#include + +/*! +** +** Copyright (c) 2007 by John W. Ratcliff mailto:jratcliff@infiniplex.net +** +** Portions of this source has been released with the PhysXViewer application, as well as +** Rocket, CreateDynamics, ODF, and as a number of sample code snippets. +** +** If you find this code useful or you are feeling particularily generous I would +** ask that you please go to http://www.amillionpixels.us and make a donation +** to Troy DeMolay. +** +** DeMolay is a youth group for young men between the ages of 12 and 21. +** It teaches strong moral principles, as well as leadership skills and +** public speaking. The donations page uses the 'pay for pixels' paradigm +** where, in this case, a pixel is only a single penny. Donations can be +** made for as small as $4 or as high as a $100 block. Each person who donates +** will get a link to their own site as well as acknowledgement on the +** donations blog located here http://www.amillionpixels.blogspot.com/ +** +** If you wish to contact me you can use the following methods: +** +** Skype Phone: 636-486-4040 (let it ring a long time while it goes through switches) +** Skype ID: jratcliff63367 +** Yahoo: jratcliff63367 +** AOL: jratcliff1961 +** email: jratcliff@infiniplex.net +** Personal website: http://jratcliffscarab.blogspot.com +** Coding Website: http://codesuppository.blogspot.com +** FundRaising Blog: http://amillionpixels.blogspot.com +** Fundraising site: http://www.amillionpixels.us +** New Temple Site: http://newtemple.blogspot.com +** +** +** The MIT license: +** +** Permission is hereby granted, free of charge, to any person obtaining a copy +** of this software and associated documentation files (the "Software"), to deal +** in the Software without restriction, including without limitation the rights +** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +** copies of the Software, and to permit persons to whom the Software is furnished +** to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in all +** copies or substantial portions of the Software. + +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +** WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +** CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + + +// compute the 'best fit' oriented bounding box of an input point cloud by doing an exhaustive search. +// it spins the point cloud around searching for the minimal volume. It keeps narrowing down until +// it fails to find a better fit. The only dependency is on 'double_math' +// +// The inputs are: +// +// vcount : number of input vertices in the point cloud. +// points : a pointer to the first vertex. +// pstride : The stride between each point measured in bytes. +// +// The outputs are: +// +// sides : The length of the sides of the OBB as X, Y, Z distance. +// matrix : A pointer to a 4x4 matrix. This will contain the 3x3 rotation and the translation component. +// pos : The center of the OBB +// quat : The orientation of the OBB expressed as quaternion in the form of X,Y,Z,W +// +// +// Please email bug fixes or improvements to John W. Ratcliff at mailto:jratcliff@infiniplex.net +// +// If you find this source code useful donate a couple of bucks to my kid's fund raising website at +// www.amillionpixels.us +// +// More snippets at: www.codesuppository.com +// + + +#include "bestfitobb.h" +#include "float_math.h" + +namespace ConvexDecomposition +{ + +// computes the OBB for this set of points relative to this transform matrix. +void computeOBB(unsigned int vcount,const double *points,unsigned int pstride,double *sides,double *matrix) +{ + const char *src = (const char *) points; + + double bmin[3] = { 1e9, 1e9, 1e9 }; + double bmax[3] = { -1e9, -1e9, -1e9 }; + + for (unsigned int i=0; i bmax[0] ) bmax[0] = t[0]; + if ( t[1] > bmax[1] ) bmax[1] = t[1]; + if ( t[2] > bmax[2] ) bmax[2] = t[2]; + + src+=pstride; + } + + double center[3]; + + sides[0] = bmax[0]-bmin[0]; + sides[1] = bmax[1]-bmin[1]; + sides[2] = bmax[2]-bmin[2]; + + center[0] = sides[0]*0.5f+bmin[0]; + center[1] = sides[1]*0.5f+bmin[1]; + center[2] = sides[2]*0.5f+bmin[2]; + + double ocenter[3]; + + fm_rotate(matrix,center,ocenter); + + matrix[12]+=ocenter[0]; + matrix[13]+=ocenter[1]; + matrix[14]+=ocenter[2]; + +} + +void computeBestFitOBB(unsigned int vcount,const double *points,unsigned int pstride,double *sides,double *matrix) +{ + + double bmin[3]; + double bmax[3]; + + fm_getAABB(vcount,points,pstride,bmin,bmax); + + double center[3]; + + center[0] = (bmax[0]-bmin[0])*0.5f + bmin[0]; + center[1] = (bmax[1]-bmin[1])*0.5f + bmin[1]; + center[2] = (bmax[2]-bmin[2])*0.5f + bmin[2]; + + double ax = 0; + double ay = 0; + double az = 0; + + double sweep = 45.0f; // 180 degree sweep on all three axes. + double steps = 7.0f; // 7 steps on each axis) + + double bestVolume = 1e9; + double angle[3]; + + while ( sweep >= 1 ) + { + + bool found = false; + + double stepsize = sweep / steps; + + for (double x=ax-sweep; x<=ax+sweep; x+=stepsize) + { + for (double y=ay-sweep; y<=ay+sweep; y+=stepsize) + { + for (double z=az-sweep; z<=az+sweep; z+=stepsize) + { + double pmatrix[16]; + + fm_eulerMatrix( x*FM_DEG_TO_RAD, y*FM_DEG_TO_RAD, z*FM_DEG_TO_RAD, pmatrix ); + + pmatrix[3*4+0] = center[0]; + pmatrix[3*4+1] = center[1]; + pmatrix[3*4+2] = center[2]; + + double psides[3]; + + computeOBB( vcount, points, pstride, psides, pmatrix ); + + double volume = psides[0]*psides[1]*psides[2]; // the volume of the cube + + if ( volume < bestVolume ) + { + bestVolume = volume; + + sides[0] = psides[0]; + sides[1] = psides[1]; + sides[2] = psides[2]; + + angle[0] = ax; + angle[1] = ay; + angle[2] = az; + + memcpy(matrix,pmatrix,sizeof(double)*16); + found = true; // yes, we found an improvement. + } + } + } + } + + if ( found ) + { + + ax = angle[0]; + ay = angle[1]; + az = angle[2]; + + sweep*=0.5f; // sweep 1/2 the distance as the last time. + } + else + { + break; // no improvement, so just + } + + } + +} + + +void computeBestFitOBB(unsigned int vcount,const double *points,unsigned int pstride,double *sides,double *pos,double *quat) +{ + double matrix[16]; + + computeBestFitOBB(vcount,points,pstride,sides,matrix); + fm_getTranslation(matrix,pos); + fm_matrixToQuat(matrix,quat); + +} + + +void computeBestFitABB(unsigned int vcount,const double *points,unsigned int pstride,double *sides,double *pos) +{ + double bmin[3]; + double bmax[3]; + + bmin[0] = points[0]; + bmin[1] = points[1]; + bmin[2] = points[2]; + + bmax[0] = points[0]; + bmax[1] = points[1]; + bmax[2] = points[2]; + + const char *cp = (const char *) points; + for (unsigned int i=0; i bmax[0] ) bmax[0] = p[0]; + if ( p[1] > bmax[1] ) bmax[1] = p[1]; + if ( p[2] > bmax[2] ) bmax[2] = p[2]; + + cp+=pstride; + } + + + sides[0] = bmax[0] - bmin[0]; + sides[1] = bmax[1] - bmin[1]; + sides[2] = bmax[2] - bmin[2]; + + pos[0] = bmin[0]+sides[0]*0.5f; + pos[1] = bmin[1]+sides[1]*0.5f; + pos[2] = bmin[2]+sides[2]*0.5f; + +} + + +void computeBestFitOBB(unsigned int vcount,const float *points,unsigned int pstride,float *sides,float *pos,float *quat) // the float version of the routine. +{ + double *temp = new double[vcount*3]; + const char *src = (const char *)points; + double *dest = temp; + for (unsigned int i=0; i bmax[0] ) bmax[0] = p[0]; + if ( p[1] > bmax[1] ) bmax[1] = p[1]; + if ( p[2] > bmax[2] ) bmax[2] = p[2]; + + cp+=pstride; + } + + + sides[0] = bmax[0] - bmin[0]; + sides[1] = bmax[1] - bmin[1]; + sides[2] = bmax[2] - bmin[2]; + + pos[0] = bmin[0]+sides[0]*0.5f; + pos[1] = bmin[1]+sides[1]*0.5f; + pos[2] = bmin[2]+sides[2]*0.5f; + +} + +}; diff --git a/convex_decomposition/ConvexDecomposition/ConvexDecomposition/bestfitobb.h b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/bestfitobb.h new file mode 100644 index 0000000..720c717 --- /dev/null +++ b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/bestfitobb.h @@ -0,0 +1,100 @@ +#ifndef BEST_FIT_OBB_H + +#define BEST_FIT_OBB_H + +/*! +** +** Copyright (c) 2007 by John W. Ratcliff mailto:jratcliff@infiniplex.net +** +** Portions of this source has been released with the PhysXViewer application, as well as +** Rocket, CreateDynamics, ODF, and as a number of sample code snippets. +** +** If you find this code useful or you are feeling particularily generous I would +** ask that you please go to http://www.amillionpixels.us and make a donation +** to Troy DeMolay. +** +** DeMolay is a youth group for young men between the ages of 12 and 21. +** It teaches strong moral principles, as well as leadership skills and +** public speaking. The donations page uses the 'pay for pixels' paradigm +** where, in this case, a pixel is only a single penny. Donations can be +** made for as small as $4 or as high as a $100 block. Each person who donates +** will get a link to their own site as well as acknowledgement on the +** donations blog located here http://www.amillionpixels.blogspot.com/ +** +** If you wish to contact me you can use the following methods: +** +** Skype Phone: 636-486-4040 (let it ring a long time while it goes through switches) +** Skype ID: jratcliff63367 +** Yahoo: jratcliff63367 +** AOL: jratcliff1961 +** email: jratcliff@infiniplex.net +** Personal website: http://jratcliffscarab.blogspot.com +** Coding Website: http://codesuppository.blogspot.com +** FundRaising Blog: http://amillionpixels.blogspot.com +** Fundraising site: http://www.amillionpixels.us +** New Temple Site: http://newtemple.blogspot.com +** +** +** The MIT license: +** +** Permission is hereby granted, free of charge, to any person obtaining a copy +** of this software and associated documentation files (the "Software"), to deal +** in the Software without restriction, including without limitation the rights +** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +** copies of the Software, and to permit persons to whom the Software is furnished +** to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in all +** copies or substantial portions of the Software. + +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +** WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +** CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + + +// compute the 'best fit' oriented bounding box of an input point cloud by doing an exhaustive search. +// it spins the point cloud around searching for the minimal volume. It keeps narrowing down until +// it fails to find a better fit. The only dependency is on 'double_math' +// +// The inputs are: +// +// vcount : number of input vertices in the point cloud. +// points : a pointer to the first vertex. +// pstride : The stride between each point measured in bytes. +// +// The outputs are: +// +// sides : The length of the sides of the OBB as X, Y, Z distance. +// matrix : A pointer to a 4x4 matrix. This will contain the 3x3 rotation and the translation component. +// pos : The center of the OBB +// quat : The orientation of the OBB expressed as quaternion in the form of X,Y,Z,W +// +// +// Please email bug fixes or improvements to John W. Ratcliff at mailto:jratcliff@infiniplex.net +// +// If you find this source code useful donate a couple of bucks to my kid's fund raising website at +// www.amillionpixels.us +// +// More snippets at: www.codesuppository.com +// + +namespace ConvexDecomposition +{ + +void computeBestFitOBB(unsigned int vcount,const double *points,unsigned int pstride,double *sides,double *matrix); +void computeBestFitOBB(unsigned int vcount,const double *points,unsigned int pstride,double *sides,double *pos,double *quat); +void computeBestFitABB(unsigned int vcount,const double *points,unsigned int pstride,double *sides,double *pos); + + +void computeBestFitOBB(unsigned int vcount,const float *points,unsigned int pstride,float *sides,float *pos,float *quat); // the float version of the routine. +void computeBestFitABB(unsigned int vcount,const float *points,unsigned int pstride,float *sides,float *pos); + +}; + +#endif diff --git a/convex_decomposition/ConvexDecomposition/ConvexDecomposition/cd_hull.cpp b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/cd_hull.cpp new file mode 100644 index 0000000..74cec01 --- /dev/null +++ b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/cd_hull.cpp @@ -0,0 +1,3650 @@ +/*! +** +** Copyright (c) 2007 by John W. Ratcliff mailto:jratcliff@infiniplex.net +** +** Portions of this source has been released with the PhysXViewer application, as well as +** Rocket, CreateDynamics, ODF, and as a number of sample code snippets. +** +** If you find this code useful or you are feeling particularily generous I would +** ask that you please go to http://www.amillionpixels.us and make a donation +** to Troy DeMolay. +** +** DeMolay is a youth group for young men between the ages of 12 and 21. +** It teaches strong moral principles, as well as leadership skills and +** public speaking. The donations page uses the 'pay for pixels' paradigm +** where, in this case, a pixel is only a single penny. Donations can be +** made for as small as $4 or as high as a $100 block. Each person who donates +** will get a link to their own site as well as acknowledgement on the +** donations blog located here http://www.amillionpixels.blogspot.com/ +** +** If you wish to contact me you can use the following methods: +** +** Skype Phone: 636-486-4040 (let it ring a long time while it goes through switches) +** Skype ID: jratcliff63367 +** Yahoo: jratcliff63367 +** AOL: jratcliff1961 +** email: jratcliff@infiniplex.net +** Personal website: http://jratcliffscarab.blogspot.com +** Coding Website: http://codesuppository.blogspot.com +** FundRaising Blog: http://amillionpixels.blogspot.com +** Fundraising site: http://www.amillionpixels.us +** New Temple Site: http://newtemple.blogspot.com +** +** +** The MIT license: +** +** Permission is hereby granted, free of charge, to any person obtaining a copy +** of this software and associated documentation files (the "Software"), to deal +** in the Software without restriction, including without limitation the rights +** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +** copies of the Software, and to permit persons to whom the Software is furnished +** to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in all +** copies or substantial portions of the Software. + +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +** WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +** CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + +#include +#include +#include +#include +#include +#include + + +#include +#include + +#include "cd_hull.h" + +#define STANDALONE 1 // This #define is used when tranferring this source code to other projects + +#if STANDALONE + +#undef NX_ALLOC +#undef NX_FREE + +#define NX_ALLOC(x,y) malloc(x) +#define NX_FREE(x) free(x) + +#else +#include "Allocateable.h" +#endif + +namespace ConvexDecomposition +{ + +//***************************************************** +//*** DARRAY.H +//***************************************************** + +template class ArrayRet; +template class Array +{ + public: + Array(int s=0); + Array(Array &array); + Array(ArrayRet &array); + ~Array(); + void allocate(int s); + void SetSize(int s); + void Pack(); + Type& Add(Type); + void AddUnique(Type); + int Contains(Type); + void Insert(Type,int); + int IndexOf(Type); + void Remove(Type); + void DelIndex(int i); + Type * element; + int count; + int array_size; + const Type &operator[](int i) const { assert(i>=0 && i=0 && i &operator=(Array &array); + Array &operator=(ArrayRet &array); + // operator ArrayRet &() { return *(ArrayRet *)this;} // this worked but i suspect could be dangerous +}; + +template class ArrayRet:public Array +{ +}; + +template Array::Array(int s) +{ + count=0; + array_size = 0; + element = NULL; + if(s) + { + allocate(s); + } +} + + +template Array::Array(Array &array) +{ + count=0; + array_size = 0; + element = NULL; + for(int i=0;i Array::Array(ArrayRet &array) +{ + *this = array; +} +template Array &Array::operator=(ArrayRet &array) +{ + count=array.count; + array_size = array.array_size; + element = array.element; + array.element=NULL; + array.count=0; + array.array_size=0; + return *this; +} + + +template Array &Array::operator=(Array &array) +{ + count=0; + for(int i=0;i Array::~Array() +{ + if (element != NULL) + { + NX_FREE(element); + } + count=0;array_size=0;element=NULL; +} + +template void Array::allocate(int s) +{ + assert(s>0); + assert(s>=count); + Type *old = element; + array_size =s; + element = (Type *) NX_ALLOC( sizeof(Type)*array_size, CONVEX_TEMP ); + assert(element); + for(int i=0;i void Array::SetSize(int s) +{ + if(s==0) + { + if(element) + { + NX_FREE(element); + element = NULL; + } + array_size = s; + } + else + { + allocate(s); + } + count=s; +} + +template void Array::Pack() +{ + allocate(count); +} + +template Type& Array::Add(Type t) +{ + assert(count<=array_size); + if(count==array_size) + { + allocate((array_size)?array_size *2:16); + } + element[count++] = t; + return element[count-1]; +} + +template int Array::Contains(Type t) +{ + int i; + int found=0; + for(i=0;i void Array::AddUnique(Type t) +{ + if(!Contains(t)) Add(t); +} + + +template void Array::DelIndex(int i) +{ + assert(i void Array::Remove(Type t) +{ + int i; + for(i=0;i void Array::Insert(Type t,int k) +{ + int i=count; + Add(t); // to allocate space + while(i>k) + { + element[i]=element[i-1]; + i--; + } + assert(i==k); + element[k]=t; +} + + +template int Array::IndexOf(Type t) +{ + int i; + for(i=0;i Member )))- ((char*)NULL)) + + + +int argmin(double a[],int n); +double sqr(double a); +double clampf(double a) ; +double Round(double a,double precision); +double Interpolate(const double &f0,const double &f1,double alpha) ; + +template +void Swap(T &a,T &b) +{ + T tmp = a; + a=b; + b=tmp; +} + + + +template +T Max(const T &a,const T &b) +{ + return (a>b)?a:b; +} + +template +T Min(const T &a,const T &b) +{ + return (a=0&&i<2);return ((double*)this)[i];} + const double& operator[](int i) const {assert(i>=0&&i<2);return ((double*)this)[i];} +}; +inline double2 operator-( const double2& a, const double2& b ){return double2(a.x-b.x,a.y-b.y);} +inline double2 operator+( const double2& a, const double2& b ){return double2(a.x+b.x,a.y+b.y);} + +//--------- 3D --------- + +class double3 // 3D +{ + public: + double x,y,z; + double3(){x=0;y=0;z=0;}; + double3(double _x,double _y,double _z){x=_x;y=_y;z=_z;}; + //operator double *() { return &x;}; + double& operator[](int i) {assert(i>=0&&i<3);return ((double*)this)[i];} + const double& operator[](int i) const {assert(i>=0&&i<3);return ((double*)this)[i];} +# ifdef PLUGIN_3DSMAX + double3(const Point3 &p):x(p.x),y(p.y),z(p.z){} + operator Point3(){return *((Point3*)this);} +# endif +}; + + +double3& operator+=( double3 &a, const double3& b ); +double3& operator-=( double3 &a ,const double3& b ); +double3& operator*=( double3 &v ,const double s ); +double3& operator/=( double3 &v, const double s ); + +double magnitude( const double3& v ); +double3 normalize( const double3& v ); +double3 safenormalize(const double3 &v); +double3 vabs(const double3 &v); +double3 operator+( const double3& a, const double3& b ); +double3 operator-( const double3& a, const double3& b ); +double3 operator-( const double3& v ); +double3 operator*( const double3& v, const double s ); +double3 operator*( const double s, const double3& v ); +double3 operator/( const double3& v, const double s ); +inline int operator==( const double3 &a, const double3 &b ) { return (a.x==b.x && a.y==b.y && a.z==b.z); } +inline int operator!=( const double3 &a, const double3 &b ) { return (a.x!=b.x || a.y!=b.y || a.z!=b.z); } +// due to ambiguity and inconsistent standards ther are no overloaded operators for mult such as va*vb. +double dot( const double3& a, const double3& b ); +double3 cmul( const double3 &a, const double3 &b); +double3 cross( const double3& a, const double3& b ); +double3 Interpolate(const double3 &v0,const double3 &v1,double alpha); +double3 Round(const double3& a,double precision); +double3 VectorMax(const double3 &a, const double3 &b); +double3 VectorMin(const double3 &a, const double3 &b); + + + +class double3x3 +{ + public: + double3 x,y,z; // the 3 rows of the Matrix + double3x3(){} + double3x3(double xx,double xy,double xz,double yx,double yy,double yz,double zx,double zy,double zz):x(xx,xy,xz),y(yx,yy,yz),z(zx,zy,zz){} + double3x3(double3 _x,double3 _y,double3 _z):x(_x),y(_y),z(_z){} + double3& operator[](int i) {assert(i>=0&&i<3);return (&x)[i];} + const double3& operator[](int i) const {assert(i>=0&&i<3);return (&x)[i];} + double& operator()(int r, int c) {assert(r>=0&&r<3&&c>=0&&c<3);return ((&x)[r])[c];} + const double& operator()(int r, int c) const {assert(r>=0&&r<3&&c>=0&&c<3);return ((&x)[r])[c];} +}; +double3x3 Transpose( const double3x3& m ); +double3 operator*( const double3& v , const double3x3& m ); +double3 operator*( const double3x3& m , const double3& v ); +double3x3 operator*( const double3x3& m , const double& s ); +double3x3 operator*( const double3x3& ma, const double3x3& mb ); +double3x3 operator/( const double3x3& a, const double& s ) ; +double3x3 operator+( const double3x3& a, const double3x3& b ); +double3x3 operator-( const double3x3& a, const double3x3& b ); +double3x3 &operator+=( double3x3& a, const double3x3& b ); +double3x3 &operator-=( double3x3& a, const double3x3& b ); +double3x3 &operator*=( double3x3& a, const double& s ); +double Determinant(const double3x3& m ); +double3x3 Inverse(const double3x3& a); // its just 3x3 so we simply do that cofactor method + + +//-------- 4D Math -------- + +class double4 +{ +public: + double x,y,z,w; + double4(){x=0;y=0;z=0;w=0;}; + double4(double _x,double _y,double _z,double _w){x=_x;y=_y;z=_z;w=_w;} + double4(const double3 &v,double _w){x=v.x;y=v.y;z=v.z;w=_w;} + //operator double *() { return &x;}; + double& operator[](int i) {assert(i>=0&&i<4);return ((double*)this)[i];} + const double& operator[](int i) const {assert(i>=0&&i<4);return ((double*)this)[i];} + const double3& xyz() const { return *((double3*)this);} + double3& xyz() { return *((double3*)this);} +}; + + +struct D3DXMATRIX; + +class double4x4 +{ + public: + double4 x,y,z,w; // the 4 rows + double4x4(){} + double4x4(const double4 &_x, const double4 &_y, const double4 &_z, const double4 &_w):x(_x),y(_y),z(_z),w(_w){} + double4x4(double m00, double m01, double m02, double m03, + double m10, double m11, double m12, double m13, + double m20, double m21, double m22, double m23, + double m30, double m31, double m32, double m33 ) + :x(m00,m01,m02,m03),y(m10,m11,m12,m13),z(m20,m21,m22,m23),w(m30,m31,m32,m33){} + double& operator()(int r, int c) {assert(r>=0&&r<4&&c>=0&&c<4);return ((&x)[r])[c];} + const double& operator()(int r, int c) const {assert(r>=0&&r<4&&c>=0&&c<4);return ((&x)[r])[c];} + operator double* () {return &x.x;} + operator const double* () const {return &x.x;} + operator struct D3DXMATRIX* () { return (struct D3DXMATRIX*) this;} + operator const struct D3DXMATRIX* () const { return (struct D3DXMATRIX*) this;} +}; + + +int operator==( const double4 &a, const double4 &b ); +double4 Homogenize(const double3 &v3,const double &w=1.0f); // Turns a 3D double3 4D vector4 by appending w +double4 cmul( const double4 &a, const double4 &b); +double4 operator*( const double4 &v, double s); +double4 operator*( double s, const double4 &v); +double4 operator+( const double4 &a, const double4 &b); +double4 operator-( const double4 &a, const double4 &b); +double4x4 operator*( const double4x4& a, const double4x4& b ); +double4 operator*( const double4& v, const double4x4& m ); +double4x4 Inverse(const double4x4 &m); +double4x4 MatrixRigidInverse(const double4x4 &m); +double4x4 MatrixTranspose(const double4x4 &m); +double4x4 MatrixPerspectiveFov(double fovy, double Aspect, double zn, double zf ); +double4x4 MatrixTranslation(const double3 &t); +double4x4 MatrixRotationZ(const double angle_radians); +double4x4 MatrixLookAt(const double3& eye, const double3& at, const double3& up); +int operator==( const double4x4 &a, const double4x4 &b ); + + +//-------- Quaternion ------------ + +class Quaternion :public double4 +{ + public: + Quaternion() { x = y = z = 0.0f; w = 1.0f; } + Quaternion( double3 v, double t ) { v = normalize(v); w = cos(t/2.0f); v = v*sin(t/2.0f); x = v.x; y = v.y; z = v.z; } + Quaternion(double _x, double _y, double _z, double _w){x=_x;y=_y;z=_z;w=_w;} + double angle() const { return acos(w)*2.0f; } + double3 axis() const { double3 a(x,y,z); if(fabs(angle())<0.0000001f) return double3(1,0,0); return a*(1/sin(angle()/2.0f)); } + double3 xdir() const { return double3( 1-2*(y*y+z*z), 2*(x*y+w*z), 2*(x*z-w*y) ); } + double3 ydir() const { return double3( 2*(x*y-w*z),1-2*(x*x+z*z), 2*(y*z+w*x) ); } + double3 zdir() const { return double3( 2*(x*z+w*y), 2*(y*z-w*x),1-2*(x*x+y*y) ); } + double3x3 getmatrix() const { return double3x3( xdir(), ydir(), zdir() ); } + operator double3x3() { return getmatrix(); } + void Normalize(); +}; + +Quaternion& operator*=(Quaternion& a, double s ); +Quaternion operator*( const Quaternion& a, double s ); +Quaternion operator*( const Quaternion& a, const Quaternion& b); +Quaternion operator+( const Quaternion& a, const Quaternion& b ); +Quaternion normalize( Quaternion a ); +double dot( const Quaternion &a, const Quaternion &b ); +double3 operator*( const Quaternion& q, const double3& v ); +double3 operator*( const double3& v, const Quaternion& q ); +Quaternion slerp( Quaternion a, const Quaternion& b, double interp ); +Quaternion Interpolate(const Quaternion &q0,const Quaternion &q1,double alpha); +Quaternion RotationArc(double3 v0, double3 v1 ); // returns quat q where q*v0=v1 +Quaternion Inverse(const Quaternion &q); +double4x4 MatrixFromQuatVec(const Quaternion &q, const double3 &v); + + +//------ Euler Angle ----- + +Quaternion YawPitchRoll( double yaw, double pitch, double roll ); +double Yaw( const Quaternion& q ); +double Pitch( const Quaternion& q ); +double Roll( Quaternion q ); +double Yaw( const double3& v ); +double Pitch( const double3& v ); + + +//------- Plane ---------- + +class Plane +{ + public: + double3 normal; + double dist; // distance below origin - the D from plane equasion Ax+By+Cz+D=0 + Plane(const double3 &n,double d):normal(n),dist(d){} + Plane():normal(),dist(0){} + void Transform(const double3 &position, const Quaternion &orientation); +}; + +inline Plane PlaneFlip(const Plane &plane){return Plane(-plane.normal,-plane.dist);} +inline int operator==( const Plane &a, const Plane &b ) { return (a.normal==b.normal && a.dist==b.dist); } +inline int coplanar( const Plane &a, const Plane &b ) { return (a==b || a==PlaneFlip(b)); } + + +//--------- Utility Functions ------ + +double3 PlaneLineIntersection(const Plane &plane, const double3 &p0, const double3 &p1); +double3 PlaneProject(const Plane &plane, const double3 &point); +double3 LineProject(const double3 &p0, const double3 &p1, const double3 &a); // projects a onto infinite line p0p1 +double LineProjectTime(const double3 &p0, const double3 &p1, const double3 &a); +double3 ThreePlaneIntersection(const Plane &p0,const Plane &p1, const Plane &p2); +int PolyHit(const double3 *vert,const int n,const double3 &v0, const double3 &v1, double3 *impact=NULL, double3 *normal=NULL); +int BoxInside(const double3 &p,const double3 &bmin, const double3 &bmax) ; +int BoxIntersect(const double3 &v0, const double3 &v1, const double3 &bmin, const double3 &bmax, double3 *impact); +double DistanceBetweenLines(const double3 &ustart, const double3 &udir, const double3 &vstart, const double3 &vdir, double3 *upoint=NULL, double3 *vpoint=NULL); +double3 TriNormal(const double3 &v0, const double3 &v1, const double3 &v2); +double3 NormalOf(const double3 *vert, const int n); +Quaternion VirtualTrackBall(const double3 &cop, const double3 &cor, const double3 &dir0, const double3 &dir1); + + + + +//***************************************************** +// ** VECMATH.CPP +//***************************************************** + + +double sqr(double a) {return a*a;} +double clampf(double a) {return Min(1.0,Max(0.0,a));} + + +double Round(double a,double precision) +{ + return floor(0.5f+a/precision)*precision; +} + + +double Interpolate(const double &f0,const double &f1,double alpha) +{ + return f0*(1-alpha) + f1*alpha; +} + + +int argmin(double a[],int n) +{ + int r=0; + for(int i=1;i=1.0) { + return a; + } + double theta = acos(d); + if(theta==0.0f) { return(a);} + return a*(sin(theta-interp*theta)/sin(theta)) + b*(sin(interp*theta)/sin(theta)); +} + + +Quaternion Interpolate(const Quaternion &q0,const Quaternion &q1,double alpha) { + return slerp(q0,q1,alpha); +} + + +Quaternion YawPitchRoll( double yaw, double pitch, double roll ) +{ + roll *= DEG2RAD; + yaw *= DEG2RAD; + pitch *= DEG2RAD; + return Quaternion(double3(0.0f,0.0f,1.0f),yaw)*Quaternion(double3(1.0f,0.0f,0.0f),pitch)*Quaternion(double3(0.0f,1.0f,0.0f),roll); +} + +double Yaw( const Quaternion& q ) +{ + static double3 v; + v=q.ydir(); + return (v.y==0.0&&v.x==0.0) ? 0.0: atan2(-v.x,v.y)*RAD2DEG; +} + +double Pitch( const Quaternion& q ) +{ + static double3 v; + v=q.ydir(); + return atan2(v.z,sqrt(sqr(v.x)+sqr(v.y)))*RAD2DEG; +} + +double Roll( Quaternion q ) +{ + q = Quaternion(double3(0.0f,0.0f,1.0f),-Yaw(q)*DEG2RAD) *q; + q = Quaternion(double3(1.0f,0.0f,0.0f),-Pitch(q)*DEG2RAD) *q; + return atan2(-q.xdir().z,q.xdir().x)*RAD2DEG; +} + +double Yaw( const double3& v ) +{ + return (v.y==0.0&&v.x==0.0) ? 0.0f: atan2(-v.x,v.y)*RAD2DEG; +} + +double Pitch( const double3& v ) +{ + return atan2(v.z,sqrt(sqr(v.x)+sqr(v.y)))*RAD2DEG; +} + + +//------------- Plane -------------- + + +void Plane::Transform(const double3 &position, const Quaternion &orientation) { + // Transforms the plane to the space defined by the + // given position/orientation. + static double3 newnormal; + static double3 origin; + + newnormal = Inverse(orientation)*normal; + origin = Inverse(orientation)*(-normal*dist - position); + + normal = newnormal; + dist = -dot(newnormal, origin); +} + + + + +//--------- utility functions ------------- + +// RotationArc() +// Given two vectors v0 and v1 this function +// returns quaternion q where q*v0==v1. +// Routine taken from game programming gems. +Quaternion RotationArc(double3 v0,double3 v1){ + static Quaternion q; + v0 = normalize(v0); // Comment these two lines out if you know its not needed. + v1 = normalize(v1); // If vector is already unit length then why do it again? + double3 c = cross(v0,v1); + double d = dot(v0,v1); + if(d<=-1.0f) { return Quaternion(1,0,0,0);} // 180 about x axis + double s = sqrt((1+d)*2); + q.x = c.x / s; + q.y = c.y / s; + q.z = c.z / s; + q.w = s /2.0f; + return q; +} + + +double4x4 MatrixFromQuatVec(const Quaternion &q, const double3 &v) +{ + // builds a 4x4 transformation matrix based on orientation q and translation v + double qx2 = q.x*q.x; + double qy2 = q.y*q.y; + double qz2 = q.z*q.z; + + double qxqy = q.x*q.y; + double qxqz = q.x*q.z; + double qxqw = q.x*q.w; + double qyqz = q.y*q.z; + double qyqw = q.y*q.w; + double qzqw = q.z*q.w; + + return double4x4( + 1-2*(qy2+qz2), + 2*(qxqy+qzqw), + 2*(qxqz-qyqw), + 0 , + 2*(qxqy-qzqw), + 1-2*(qx2+qz2), + 2*(qyqz+qxqw), + 0 , + 2*(qxqz+qyqw), + 2*(qyqz-qxqw), + 1-2*(qx2+qy2), + 0 , + v.x , + v.y , + v.z , + 1.0f ); +} + + +double3 PlaneLineIntersection(const Plane &plane, const double3 &p0, const double3 &p1) +{ + // returns the point where the line p0-p1 intersects the plane n&d + static double3 dif; + dif = p1-p0; + double dn= dot(plane.normal,dif); + double t = -(plane.dist+dot(plane.normal,p0) )/dn; + return p0 + (dif*t); +} + +double3 PlaneProject(const Plane &plane, const double3 &point) +{ + return point - plane.normal * (dot(point,plane.normal)+plane.dist); +} + +double3 LineProject(const double3 &p0, const double3 &p1, const double3 &a) +{ + double3 w; + w = p1-p0; + double t= dot(w,(a-p0)) / (sqr(w.x)+sqr(w.y)+sqr(w.z)); + return p0+ w*t; +} + + +double LineProjectTime(const double3 &p0, const double3 &p1, const double3 &a) +{ + double3 w; + w = p1-p0; + double t= dot(w,(a-p0)) / (sqr(w.x)+sqr(w.y)+sqr(w.z)); + return t; +} + + + +double3 TriNormal(const double3 &v0, const double3 &v1, const double3 &v2) +{ + // return the normal of the triangle + // inscribed by v0, v1, and v2 + double3 cp=cross(v1-v0,v2-v1); + double m=magnitude(cp); + if(m==0) return double3(1,0,0); + return cp*(1.0f/m); +} + + + +int BoxInside(const double3 &p, const double3 &bmin, const double3 &bmax) +{ + return (p.x >= bmin.x && p.x <=bmax.x && + p.y >= bmin.y && p.y <=bmax.y && + p.z >= bmin.z && p.z <=bmax.z ); +} + + +int BoxIntersect(const double3 &v0, const double3 &v1, const double3 &bmin, const double3 &bmax,double3 *impact) +{ + if(BoxInside(v0,bmin,bmax)) + { + *impact=v0; + return 1; + } + if(v0.x<=bmin.x && v1.x>=bmin.x) + { + double a = (bmin.x-v0.x)/(v1.x-v0.x); + //v.x = bmin.x; + double vy = (1-a) *v0.y + a*v1.y; + double vz = (1-a) *v0.z + a*v1.z; + if(vy>=bmin.y && vy<=bmax.y && vz>=bmin.z && vz<=bmax.z) + { + impact->x = bmin.x; + impact->y = vy; + impact->z = vz; + return 1; + } + } + else if(v0.x >= bmax.x && v1.x <= bmax.x) + { + double a = (bmax.x-v0.x)/(v1.x-v0.x); + //v.x = bmax.x; + double vy = (1-a) *v0.y + a*v1.y; + double vz = (1-a) *v0.z + a*v1.z; + if(vy>=bmin.y && vy<=bmax.y && vz>=bmin.z && vz<=bmax.z) + { + impact->x = bmax.x; + impact->y = vy; + impact->z = vz; + return 1; + } + } + if(v0.y<=bmin.y && v1.y>=bmin.y) + { + double a = (bmin.y-v0.y)/(v1.y-v0.y); + double vx = (1-a) *v0.x + a*v1.x; + //v.y = bmin.y; + double vz = (1-a) *v0.z + a*v1.z; + if(vx>=bmin.x && vx<=bmax.x && vz>=bmin.z && vz<=bmax.z) + { + impact->x = vx; + impact->y = bmin.y; + impact->z = vz; + return 1; + } + } + else if(v0.y >= bmax.y && v1.y <= bmax.y) + { + double a = (bmax.y-v0.y)/(v1.y-v0.y); + double vx = (1-a) *v0.x + a*v1.x; + // vy = bmax.y; + double vz = (1-a) *v0.z + a*v1.z; + if(vx>=bmin.x && vx<=bmax.x && vz>=bmin.z && vz<=bmax.z) + { + impact->x = vx; + impact->y = bmax.y; + impact->z = vz; + return 1; + } + } + if(v0.z<=bmin.z && v1.z>=bmin.z) + { + double a = (bmin.z-v0.z)/(v1.z-v0.z); + double vx = (1-a) *v0.x + a*v1.x; + double vy = (1-a) *v0.y + a*v1.y; + // v.z = bmin.z; + if(vy>=bmin.y && vy<=bmax.y && vx>=bmin.x && vx<=bmax.x) + { + impact->x = vx; + impact->y = vy; + impact->z = bmin.z; + return 1; + } + } + else if(v0.z >= bmax.z && v1.z <= bmax.z) + { + double a = (bmax.z-v0.z)/(v1.z-v0.z); + double vx = (1-a) *v0.x + a*v1.x; + double vy = (1-a) *v0.y + a*v1.y; + // v.z = bmax.z; + if(vy>=bmin.y && vy<=bmax.y && vx>=bmin.x && vx<=bmax.x) + { + impact->x = vx; + impact->y = vy; + impact->z = bmax.z; + return 1; + } + } + return 0; +} + + +double DistanceBetweenLines(const double3 &ustart, const double3 &udir, const double3 &vstart, const double3 &vdir, double3 *upoint, double3 *vpoint) +{ + static double3 cp; + cp = normalize(cross(udir,vdir)); + + double distu = -dot(cp,ustart); + double distv = -dot(cp,vstart); + double dist = (double)fabs(distu-distv); + if(upoint) + { + Plane plane; + plane.normal = normalize(cross(vdir,cp)); + plane.dist = -dot(plane.normal,vstart); + *upoint = PlaneLineIntersection(plane,ustart,ustart+udir); + } + if(vpoint) + { + Plane plane; + plane.normal = normalize(cross(udir,cp)); + plane.dist = -dot(plane.normal,ustart); + *vpoint = PlaneLineIntersection(plane,vstart,vstart+vdir); + } + return dist; +} + + +Quaternion VirtualTrackBall(const double3 &cop, const double3 &cor, const double3 &dir1, const double3 &dir2) +{ + // routine taken from game programming gems. + // Implement track ball functionality to spin stuf on the screen + // cop center of projection + // cor center of rotation + // dir1 old mouse direction + // dir2 new mouse direction + // pretend there is a sphere around cor. Then find the points + // where dir1 and dir2 intersect that sphere. Find the + // rotation that takes the first point to the second. + double m; + // compute plane + double3 nrml = cor - cop; + double fudgefactor = 1.0f/(magnitude(nrml) * 0.25f); // since trackball proportional to distance from cop + nrml = normalize(nrml); + double dist = -dot(nrml,cor); + double3 u= PlaneLineIntersection(Plane(nrml,dist),cop,cop+dir1); + u=u-cor; + u=u*fudgefactor; + m= magnitude(u); + if(m>1) + { + u/=m; + } + else + { + u=u - (nrml * sqrt(1-m*m)); + } + double3 v= PlaneLineIntersection(Plane(nrml,dist),cop,cop+dir2); + v=v-cor; + v=v*fudgefactor; + m= magnitude(v); + if(m>1) + { + v/=m; + } + else + { + v=v - (nrml * sqrt(1-m*m)); + } + return RotationArc(u,v); +} + + +int countpolyhit=0; +int PolyHit(const double3 *vert, const int n, const double3 &v0, const double3 &v1, double3 *impact, double3 *normal) +{ + countpolyhit++; + int i; + double3 nrml(0,0,0); + for(i=0;i0) + { + return 0; + } + + static double3 the_point; + // By using the cached plane distances d0 and d1 + // we can optimize the following: + // the_point = planelineintersection(nrml,dist,v0,v1); + double a = d0/(d0-d1); + the_point = v0*(1-a) + v1*a; + + + int inside=1; + for(int j=0;inside && j= 0.0); + } + if(inside) + { + if(normal){*normal=nrml;} + if(impact){*impact=the_point;} + } + return inside; +} + +//**************************************************** +// HULL.H source code goes here +//**************************************************** +class PHullResult +{ +public: + + PHullResult(void) + { + mVcount = 0; + mIndexCount = 0; + mFaceCount = 0; + mVertices = 0; + mIndices = 0; + } + + unsigned int mVcount; + unsigned int mIndexCount; + unsigned int mFaceCount; + double *mVertices; + unsigned int *mIndices; +}; + +bool ComputeHull(unsigned int vcount,const double *vertices,PHullResult &result,unsigned int maxverts,double inflate); +void ReleaseHull(PHullResult &result); + +//***************************************************** +// HULL.cpp source code goes here +//***************************************************** + + +#define REAL3 double3 +#define REAL double + +#define COPLANAR (0) +#define UNDER (1) +#define OVER (2) +#define SPLIT (OVER|UNDER) +#define PAPERWIDTH (0.001f) +#define VOLUME_EPSILON (1e-20f) + +double planetestepsilon = PAPERWIDTH; + +#if STANDALONE +class ConvexH +#else +class ConvexH : public NxFoundation::NxAllocateable +#endif +{ + public: + class HalfEdge + { + public: + short ea; // the other half of the edge (index into edges list) + unsigned char v; // the vertex at the start of this edge (index into vertices list) + unsigned char p; // the facet on which this edge lies (index into facets list) + HalfEdge(){} + HalfEdge(short _ea,unsigned char _v, unsigned char _p):ea(_ea),v(_v),p(_p){} + }; + Array vertices; + Array edges; + Array facets; + ConvexH(int vertices_size,int edges_size,int facets_size); +}; + +typedef ConvexH::HalfEdge HalfEdge; + +ConvexH::ConvexH(int vertices_size,int edges_size,int facets_size) + :vertices(vertices_size) + ,edges(edges_size) + ,facets(facets_size) +{ + vertices.count=vertices_size; + edges.count = edges_size; + facets.count = facets_size; +} + +ConvexH *ConvexHDup(ConvexH *src) +{ +#if STANDALONE + ConvexH *dst = new ConvexH(src->vertices.count,src->edges.count,src->facets.count); +#else + ConvexH *dst = NX_NEW_MEM(ConvexH(src->vertices.count,src->edges.count,src->facets.count), CONVEX_TEMP); +#endif + + memcpy(dst->vertices.element,src->vertices.element,sizeof(double3)*src->vertices.count); + memcpy(dst->edges.element,src->edges.element,sizeof(HalfEdge)*src->edges.count); + memcpy(dst->facets.element,src->facets.element,sizeof(Plane)*src->facets.count); + return dst; +} + + +int PlaneTest(const Plane &p, const REAL3 &v) { + REAL a = dot(v,p.normal)+p.dist; + int flag = (a>planetestepsilon)?OVER:((a<-planetestepsilon)?UNDER:COPLANAR); + return flag; +} + +int SplitTest(ConvexH &convex,const Plane &plane) { + int flag=0; + for(int i=0;i= convex.edges.count || convex.edges[inext].p != convex.edges[i].p) { + inext = estart; + } + assert(convex.edges[inext].p == convex.edges[i].p); + HalfEdge &edge = convex.edges[i]; + int nb = convex.edges[i].ea; + assert(nb!=255); + if(nb==255 || nb==-1) return 0; + assert(nb!=-1); + assert(i== convex.edges[nb].ea); + } + for(i=0;i= convex.edges.count || convex.edges[i1].p != convex.edges[i].p) { + i1 = estart; + } + int i2 = i1+1; + if(i2>= convex.edges.count || convex.edges[i2].p != convex.edges[i].p) { + i2 = estart; + } + if(i==i2) continue; // i sliced tangent to an edge and created 2 meaningless edges + REAL3 localnormal = TriNormal(convex.vertices[convex.edges[i ].v], + convex.vertices[convex.edges[i1].v], + convex.vertices[convex.edges[i2].v]); + //assert(dot(localnormal,convex.facets[convex.edges[i].p].normal)>0);//Commented out on Stan Melax' advice + if(dot(localnormal,convex.facets[convex.edges[i].p].normal)<=0)return 0; + } + return 1; +} + +// back to back quads +ConvexH *test_btbq() +{ + +#if STANDALONE + ConvexH *convex = new ConvexH(4,8,2); +#else + ConvexH *convex = NX_NEW_MEM(ConvexH(4,8,2), CONVEX_TEMP); +#endif + + convex->vertices[0] = REAL3(0,0,0); + convex->vertices[1] = REAL3(1,0,0); + convex->vertices[2] = REAL3(1,1,0); + convex->vertices[3] = REAL3(0,1,0); + convex->facets[0] = Plane(REAL3(0,0,1),0); + convex->facets[1] = Plane(REAL3(0,0,-1),0); + convex->edges[0] = HalfEdge(7,0,0); + convex->edges[1] = HalfEdge(6,1,0); + convex->edges[2] = HalfEdge(5,2,0); + convex->edges[3] = HalfEdge(4,3,0); + + convex->edges[4] = HalfEdge(3,0,1); + convex->edges[5] = HalfEdge(2,3,1); + convex->edges[6] = HalfEdge(1,2,1); + convex->edges[7] = HalfEdge(0,1,1); + AssertIntact(*convex); + return convex; +} + +ConvexH *test_cube() +{ +#if STANDALONE + ConvexH *convex = new ConvexH(8,24,6); +#else + ConvexH *convex = NX_NEW_MEM(ConvexH(8,24,6), CONVEX_TEMP); +#endif + convex->vertices[0] = REAL3(0,0,0); + convex->vertices[1] = REAL3(0,0,1); + convex->vertices[2] = REAL3(0,1,0); + convex->vertices[3] = REAL3(0,1,1); + convex->vertices[4] = REAL3(1,0,0); + convex->vertices[5] = REAL3(1,0,1); + convex->vertices[6] = REAL3(1,1,0); + convex->vertices[7] = REAL3(1,1,1); + + convex->facets[0] = Plane(REAL3(-1,0,0),0); + convex->facets[1] = Plane(REAL3(1,0,0),-1); + convex->facets[2] = Plane(REAL3(0,-1,0),0); + convex->facets[3] = Plane(REAL3(0,1,0),-1); + convex->facets[4] = Plane(REAL3(0,0,-1),0); + convex->facets[5] = Plane(REAL3(0,0,1),-1); + + convex->edges[0 ] = HalfEdge(11,0,0); + convex->edges[1 ] = HalfEdge(23,1,0); + convex->edges[2 ] = HalfEdge(15,3,0); + convex->edges[3 ] = HalfEdge(16,2,0); + + convex->edges[4 ] = HalfEdge(13,6,1); + convex->edges[5 ] = HalfEdge(21,7,1); + convex->edges[6 ] = HalfEdge( 9,5,1); + convex->edges[7 ] = HalfEdge(18,4,1); + + convex->edges[8 ] = HalfEdge(19,0,2); + convex->edges[9 ] = HalfEdge( 6,4,2); + convex->edges[10] = HalfEdge(20,5,2); + convex->edges[11] = HalfEdge( 0,1,2); + + convex->edges[12] = HalfEdge(22,3,3); + convex->edges[13] = HalfEdge( 4,7,3); + convex->edges[14] = HalfEdge(17,6,3); + convex->edges[15] = HalfEdge( 2,2,3); + + convex->edges[16] = HalfEdge( 3,0,4); + convex->edges[17] = HalfEdge(14,2,4); + convex->edges[18] = HalfEdge( 7,6,4); + convex->edges[19] = HalfEdge( 8,4,4); + + convex->edges[20] = HalfEdge(10,1,5); + convex->edges[21] = HalfEdge( 5,5,5); + convex->edges[22] = HalfEdge(12,7,5); + convex->edges[23] = HalfEdge( 1,3,5); + + + return convex; +} +ConvexH *ConvexHMakeCube(const REAL3 &bmin, const REAL3 &bmax) { + ConvexH *convex = test_cube(); + convex->vertices[0] = REAL3(bmin.x,bmin.y,bmin.z); + convex->vertices[1] = REAL3(bmin.x,bmin.y,bmax.z); + convex->vertices[2] = REAL3(bmin.x,bmax.y,bmin.z); + convex->vertices[3] = REAL3(bmin.x,bmax.y,bmax.z); + convex->vertices[4] = REAL3(bmax.x,bmin.y,bmin.z); + convex->vertices[5] = REAL3(bmax.x,bmin.y,bmax.z); + convex->vertices[6] = REAL3(bmax.x,bmax.y,bmin.z); + convex->vertices[7] = REAL3(bmax.x,bmax.y,bmax.z); + + convex->facets[0] = Plane(REAL3(-1,0,0), bmin.x); + convex->facets[1] = Plane(REAL3(1,0,0), -bmax.x); + convex->facets[2] = Plane(REAL3(0,-1,0), bmin.y); + convex->facets[3] = Plane(REAL3(0,1,0), -bmax.y); + convex->facets[4] = Plane(REAL3(0,0,-1), bmin.z); + convex->facets[5] = Plane(REAL3(0,0,1), -bmax.z); + return convex; +} +ConvexH *ConvexHCrop(ConvexH &convex,const Plane &slice) +{ + int i; + int vertcountunder=0; + int vertcountover =0; + int edgecountunder=0; + int edgecountover =0; + int planecountunder=0; + int planecountover =0; + static Array vertscoplanar; // existing vertex members of convex that are coplanar + vertscoplanar.count=0; + static Array edgesplit; // existing edges that members of convex that cross the splitplane + edgesplit.count=0; + + assert(convex.edges.count<480); + + EdgeFlag edgeflag[512]; + VertFlag vertflag[256]; + PlaneFlag planeflag[128]; + HalfEdge tmpunderedges[512]; + Plane tmpunderplanes[128]; + Coplanar coplanaredges[512]; + int coplanaredges_num=0; + + Array createdverts; + // do the side-of-plane tests + for(i=0;i= convex.edges.count || convex.edges[e1].p!=currentplane) { + enextface = e1; + e1=estart; + } + HalfEdge &edge0 = convex.edges[e0]; + HalfEdge &edge1 = convex.edges[e1]; + HalfEdge &edgea = convex.edges[edge0.ea]; + + + planeside |= vertflag[edge0.v].planetest; + //if((vertflag[edge0.v].planetest & vertflag[edge1.v].planetest) == COPLANAR) { + // assert(ecop==-1); + // ecop=e; + //} + + + if(vertflag[edge0.v].planetest == OVER && vertflag[edge1.v].planetest == OVER){ + // both endpoints over plane + edgeflag[e0].undermap = -1; + } + else if((vertflag[edge0.v].planetest | vertflag[edge1.v].planetest) == UNDER) { + // at least one endpoint under, the other coplanar or under + + edgeflag[e0].undermap = under_edge_count; + tmpunderedges[under_edge_count].v = vertflag[edge0.v].undermap; + tmpunderedges[under_edge_count].p = underplanescount; + if(edge0.ea < e0) { + // connect the neighbors + assert(edgeflag[edge0.ea].undermap !=-1); + tmpunderedges[under_edge_count].ea = edgeflag[edge0.ea].undermap; + tmpunderedges[edgeflag[edge0.ea].undermap].ea = under_edge_count; + } + under_edge_count++; + } + else if((vertflag[edge0.v].planetest | vertflag[edge1.v].planetest) == COPLANAR) { + // both endpoints coplanar + // must check a 3rd point to see if UNDER + int e2 = e1+1; + if(e2>=convex.edges.count || convex.edges[e2].p!=currentplane) { + e2 = estart; + } + assert(convex.edges[e2].p==currentplane); + HalfEdge &edge2 = convex.edges[e2]; + if(vertflag[edge2.v].planetest==UNDER) { + + edgeflag[e0].undermap = under_edge_count; + tmpunderedges[under_edge_count].v = vertflag[edge0.v].undermap; + tmpunderedges[under_edge_count].p = underplanescount; + tmpunderedges[under_edge_count].ea = -1; + // make sure this edge is added to the "coplanar" list + coplanaredge = under_edge_count; + vout = vertflag[edge0.v].undermap; + vin = vertflag[edge1.v].undermap; + under_edge_count++; + } + else { + edgeflag[e0].undermap = -1; + } + } + else if(vertflag[edge0.v].planetest == UNDER && vertflag[edge1.v].planetest == OVER) { + // first is under 2nd is over + + edgeflag[e0].undermap = under_edge_count; + tmpunderedges[under_edge_count].v = vertflag[edge0.v].undermap; + tmpunderedges[under_edge_count].p = underplanescount; + if(edge0.ea < e0) { + assert(edgeflag[edge0.ea].undermap !=-1); + // connect the neighbors + tmpunderedges[under_edge_count].ea = edgeflag[edge0.ea].undermap; + tmpunderedges[edgeflag[edge0.ea].undermap].ea = under_edge_count; + vout = tmpunderedges[edgeflag[edge0.ea].undermap].v; + } + else { + Plane &p0 = convex.facets[edge0.p]; + Plane &pa = convex.facets[edgea.p]; + createdverts.Add(ThreePlaneIntersection(p0,pa,slice)); + //createdverts.Add(PlaneProject(slice,PlaneLineIntersection(slice,convex.vertices[edge0.v],convex.vertices[edgea.v]))); + //createdverts.Add(PlaneLineIntersection(slice,convex.vertices[edge0.v],convex.vertices[edgea.v])); + vout = vertcountunder++; + } + under_edge_count++; + /// hmmm something to think about: i might be able to output this edge regarless of + // wheter or not we know v-in yet. ok i;ll try this now: + tmpunderedges[under_edge_count].v = vout; + tmpunderedges[under_edge_count].p = underplanescount; + tmpunderedges[under_edge_count].ea = -1; + coplanaredge = under_edge_count; + under_edge_count++; + + if(vin!=-1) { + // we previously processed an edge where we came under + // now we know about vout as well + + // ADD THIS EDGE TO THE LIST OF EDGES THAT NEED NEIGHBOR ON PARTITION PLANE!! + } + + } + else if(vertflag[edge0.v].planetest == COPLANAR && vertflag[edge1.v].planetest == OVER) { + // first is coplanar 2nd is over + + edgeflag[e0].undermap = -1; + vout = vertflag[edge0.v].undermap; + // I hate this but i have to make sure part of this face is UNDER before ouputting this vert + int k=estart; + assert(edge0.p == currentplane); + while(!(planeside&UNDER) && k= vertcountunderold); // for debugging only + } + if(vout!=-1) { + // we previously processed an edge where we went over + // now we know vin too + // ADD THIS EDGE TO THE LIST OF EDGES THAT NEED NEIGHBOR ON PARTITION PLANE!! + } + // output edge + tmpunderedges[under_edge_count].v = vin; + tmpunderedges[under_edge_count].p = underplanescount; + edgeflag[e0].undermap = under_edge_count; + if(e0>edge0.ea) { + assert(edgeflag[edge0.ea].undermap !=-1); + // connect the neighbors + tmpunderedges[under_edge_count].ea = edgeflag[edge0.ea].undermap; + tmpunderedges[edgeflag[edge0.ea].undermap].ea = under_edge_count; + } + assert(edgeflag[e0].undermap == under_edge_count); + under_edge_count++; + } + else if(vertflag[edge0.v].planetest == OVER && vertflag[edge1.v].planetest == COPLANAR) { + // first is over next is coplanar + + edgeflag[e0].undermap = -1; + vin = vertflag[edge1.v].undermap; + if (vin==-1) return NULL; + if(vout!=-1) { + // we previously processed an edge where we came under + // now we know both endpoints + // ADD THIS EDGE TO THE LIST OF EDGES THAT NEED NEIGHBOR ON PARTITION PLANE!! + } + + } + else { + assert(0); + } + + + e0=e1; + e1++; // do the modulo at the beginning of the loop + + } while(e0!=estart) ; + e0 = enextface; + if(planeside&UNDER) { + planeflag[currentplane].undermap = underplanescount; + tmpunderplanes[underplanescount] = convex.facets[currentplane]; + underplanescount++; + } + else { + planeflag[currentplane].undermap = 0; + } + if(vout>=0 && (planeside&UNDER)) { + assert(vin>=0); + assert(coplanaredge>=0); + assert(coplanaredge!=511); + coplanaredges[coplanaredges_num].ea = coplanaredge; + coplanaredges[coplanaredges_num].v0 = vin; + coplanaredges[coplanaredges_num].v1 = vout; + coplanaredges_num++; + } + } + + // add the new plane to the mix: + if(coplanaredges_num>0) { + tmpunderplanes[underplanescount++]=slice; + } + for(i=0;i=coplanaredges_num) + { + // assert(jvertices.count;j++) + { + dmax = Max(dmax,dot(convex->vertices[j],planes[i].normal)+planes[i].dist); + dmin = Min(dmin,dot(convex->vertices[j],planes[i].normal)+planes[i].dist); + } + double dr = dmax-dmin; + if(drfacets.count;j++) + { + if(planes[i]==convex->facets[j]) + { + d=0;continue; + } + if(dot(planes[i].normal,convex->facets[j].normal)>maxdot_minang) + { + for(int k=0;kedges.count;k++) + { + if(convex->edges[k].p!=j) continue; + if(dot(convex->vertices[convex->edges[k].v],planes[i].normal)+planes[i].dist<0) + { + d=0; // so this plane wont get selected. + break; + } + } + } + } + if(d>md) + { + p=i; + md=d; + } + } + return (md>epsilon)?p:-1; +} + + + +template +inline int maxdir(const T *p,int count,const T &dir) +{ + assert(count); + int m=0; + for(int i=1;idot(p[m],dir)) m=i; + } + return m; +} + + +template +int maxdirfiltered(const T *p,int count,const T &dir,Array &allow) +{ + assert(count); + int m=-1; + for(int i=0;idot(p[m],dir)) m=i; + } + assert(m!=-1); + return m; +} + +double3 orth(const double3 &v) +{ + double3 a=cross(v,double3(0,0,1)); + double3 b=cross(v,double3(0,1,0)); + return normalize((magnitude(a)>magnitude(b))?a:b); +} + + +template +int maxdirsterid(const T *p,int count,const T &dir,Array &allow) +{ + int m=-1; + while(m==-1) + { + m = maxdirfiltered(p,count,dir,allow); + if(allow[m]==3) return m; + T u = orth(dir); + T v = cross(u,dir); + int ma=-1; + for(double x = 0.0f ; x<= 360.0f ; x+= 45.0f) + { + double s = sin(DEG2RAD*(x)); + double c = cos(DEG2RAD*(x)); + int mb = maxdirfiltered(p,count,dir+(u*s+v*c)*0.025f,allow); + if(ma==m && mb==m) + { + allow[m]=3; + return m; + } + if(ma!=-1 && ma!=mb) // Yuck - this is really ugly + { + int mc = ma; + for(double xx = x-40.0f ; xx <= x ; xx+= 5.0f) + { + double s = sin(DEG2RAD*(xx)); + double c = cos(DEG2RAD*(xx)); + int md = maxdirfiltered(p,count,dir+(u*s+v*c)*0.025f,allow); + if(mc==m && md==m) + { + allow[m]=3; + return m; + } + mc=md; + } + } + ma=mb; + } + allow[m]=0; + m=-1; + } + assert(0); + return m; +} + + + + +int operator ==(const int3 &a,const int3 &b) +{ + for(int i=0;i<3;i++) + { + if(a[i]!=b[i]) return 0; + } + return 1; +} + +int3 roll3(int3 a) +{ + int tmp=a[0]; + a[0]=a[1]; + a[1]=a[2]; + a[2]=tmp; + return a; +} +int isa(const int3 &a,const int3 &b) +{ + return ( a==b || roll3(a)==b || a==roll3(b) ); +} +int b2b(const int3 &a,const int3 &b) +{ + return isa(a,int3(b[2],b[1],b[0])); +} +int above(double3* vertices,const int3& t, const double3 &p, double epsilon) +{ + double3 n=TriNormal(vertices[t[0]],vertices[t[1]],vertices[t[2]]); + return (dot(n,p-vertices[t[0]]) > epsilon); // EPSILON??? +} +int hasedge(const int3 &t, int a,int b) +{ + for(int i=0;i<3;i++) + { + int i1= (i+1)%3; + if(t[i]==a && t[i1]==b) return 1; + } + return 0; +} +int hasvert(const int3 &t, int v) +{ + return (t[0]==v || t[1]==v || t[2]==v) ; +} +int shareedge(const int3 &a,const int3 &b) +{ + int i; + for(i=0;i<3;i++) + { + int i1= (i+1)%3; + if(hasedge(a,b[i1],b[i])) return 1; + } + return 0; +} + +class Tri; + +static Array tris; // djs: For heaven's sake!!!! + +#if STANDALONE +class Tri : public int3 +#else +class Tri : public int3, public NxFoundation::NxAllocateable +#endif +{ +public: + int3 n; + int id; + int vmax; + double rise; + Tri(int a,int b,int c):int3(a,b,c),n(-1,-1,-1) + { + id = tris.count; + tris.Add(this); + vmax=-1; + rise = 0.0f; + } + ~Tri() + { + assert(tris[id]==this); + tris[id]=NULL; + } + int &neib(int a,int b); +}; + + +int &Tri::neib(int a,int b) +{ + static int er=-1; + int i; + for(i=0;i<3;i++) + { + int i1=(i+1)%3; + int i2=(i+2)%3; + if((*this)[i]==a && (*this)[i1]==b) return n[i2]; + if((*this)[i]==b && (*this)[i1]==a) return n[i2]; + } + assert(0); + return er; +} +void b2bfix(Tri* s,Tri*t) +{ + int i; + for(i=0;i<3;i++) + { + int i1=(i+1)%3; + int i2=(i+2)%3; + int a = (*s)[i1]; + int b = (*s)[i2]; + assert(tris[s->neib(a,b)]->neib(b,a) == s->id); + assert(tris[t->neib(a,b)]->neib(b,a) == t->id); + tris[s->neib(a,b)]->neib(b,a) = t->neib(b,a); + tris[t->neib(b,a)]->neib(a,b) = s->neib(a,b); + } +} + +void removeb2b(Tri* s,Tri*t) +{ + b2bfix(s,t); + delete s; + delete t; +} + +void checkit(Tri *t) +{ + int i; + assert(tris[t->id]==t); + for(i=0;i<3;i++) + { + int i1=(i+1)%3; + int i2=(i+2)%3; + int a = (*t)[i1]; + int b = (*t)[i2]; + assert(a!=b); + assert( tris[t->n[i]]->neib(b,a) == t->id); + } +} +void extrude(Tri *t0,int v) +{ + int3 t= *t0; + int n = tris.count; +#if STANDALONE + Tri* ta = new Tri(v,t[1],t[2]); +#else + Tri* ta = NX_NEW_MEM(Tri(v,t[1],t[2]), CONVEX_TEMP); +#endif + ta->n = int3(t0->n[0],n+1,n+2); + tris[t0->n[0]]->neib(t[1],t[2]) = n+0; +#if STANDALONE + Tri* tb = new Tri(v,t[2],t[0]); +#else + Tri* tb = NX_NEW_MEM(Tri(v,t[2],t[0]), CONVEX_TEMP); +#endif + tb->n = int3(t0->n[1],n+2,n+0); + tris[t0->n[1]]->neib(t[2],t[0]) = n+1; +#if STANDALONE + Tri* tc = new Tri(v,t[0],t[1]); +#else + Tri* tc = NX_NEW_MEM(Tri(v,t[0],t[1]), CONVEX_TEMP); +#endif + tc->n = int3(t0->n[2],n+0,n+1); + tris[t0->n[2]]->neib(t[0],t[1]) = n+2; + checkit(ta); + checkit(tb); + checkit(tc); + if(hasvert(*tris[ta->n[0]],v)) removeb2b(ta,tris[ta->n[0]]); + if(hasvert(*tris[tb->n[0]],v)) removeb2b(tb,tris[tb->n[0]]); + if(hasvert(*tris[tc->n[0]],v)) removeb2b(tc,tris[tc->n[0]]); + delete t0; + +} + +Tri *extrudable(double epsilon) +{ + int i; + Tri *t=NULL; + for(i=0;iriserise)) + { + t = tris[i]; + } + } + return (t->rise >epsilon)?t:NULL ; +} + +class int4 +{ +public: + int x,y,z,w; + int4(){}; + int4(int _x,int _y, int _z,int _w){x=_x;y=_y;z=_z;w=_w;} + const int& operator[](int i) const {return (&x)[i];} + int& operator[](int i) {return (&x)[i];} +}; + + + +bool hasVolume(double3 *verts, int p0, int p1, int p2, int p3) +{ + double3 result3 = cross(verts[p1]-verts[p0], verts[p2]-verts[p0]); + if (magnitude(result3) < VOLUME_EPSILON && magnitude(result3) > -VOLUME_EPSILON) // Almost collinear or otherwise very close to each other + return false; + double result = dot(normalize(result3), verts[p3]-verts[p0]); + return (result > VOLUME_EPSILON || result < -VOLUME_EPSILON); // Returns true iff volume is significantly non-zero +} + +int4 FindSimplex(double3 *verts,int verts_count,Array &allow) +{ + double3 basis[3]; + basis[0] = double3( 0.01f, 0.02f, 1.0f ); + int p0 = maxdirsterid(verts,verts_count, basis[0],allow); + int p1 = maxdirsterid(verts,verts_count,-basis[0],allow); + basis[0] = verts[p0]-verts[p1]; + if(p0==p1 || basis[0]==double3(0,0,0)) + return int4(-1,-1,-1,-1); + basis[1] = cross(double3( 1, 0.02f, 0),basis[0]); + basis[2] = cross(double3(-0.02f, 1, 0),basis[0]); + basis[1] = normalize( (magnitude(basis[1])>magnitude(basis[2])) ? basis[1]:basis[2]); + int p2 = maxdirsterid(verts,verts_count,basis[1],allow); + if(p2 == p0 || p2 == p1) + { + p2 = maxdirsterid(verts,verts_count,-basis[1],allow); + } + if(p2 == p0 || p2 == p1) + return int4(-1,-1,-1,-1); + basis[1] = verts[p2] - verts[p0]; + basis[2] = normalize(cross(basis[1],basis[0])); + int p3 = maxdirsterid(verts,verts_count,basis[2],allow); + if(p3==p0||p3==p1||p3==p2||!hasVolume(verts, p0, p1, p2, p3)) p3 = maxdirsterid(verts,verts_count,-basis[2],allow); + if(p3==p0||p3==p1||p3==p2) + return int4(-1,-1,-1,-1); + assert(!(p0==p1||p0==p2||p0==p3||p1==p2||p1==p3||p2==p3)); + if(dot(verts[p3]-verts[p0],cross(verts[p1]-verts[p0],verts[p2]-verts[p0])) <0) {Swap(p2,p3);} + return int4(p0,p1,p2,p3); +} + +int calchullgen(double3 *verts,int verts_count, int vlimit) +{ + if(verts_count <4) return 0; + if(vlimit==0) vlimit=1000000000; + int j; + double3 bmin(*verts),bmax(*verts); + Array isextreme(verts_count); + Array allow(verts_count); + for(j=0;jn=int3(2,3,1); + Tri *t1 = new Tri(p[3],p[2],p[0]); t1->n=int3(3,2,0); + Tri *t2 = new Tri(p[0],p[1],p[3]); t2->n=int3(0,1,3); + Tri *t3 = new Tri(p[1],p[0],p[2]); t3->n=int3(1,0,2); +#else + Tri *t0 = NX_NEW_MEM(Tri(p[2],p[3],p[1]); t0->n=int3(2,3,1), CONVEX_TEMP); + Tri *t1 = NX_NEW_MEM(Tri(p[3],p[2],p[0]); t1->n=int3(3,2,0), CONVEX_TEMP); + Tri *t2 = NX_NEW_MEM(Tri(p[0],p[1],p[3]); t2->n=int3(0,1,3), CONVEX_TEMP); + Tri *t3 = NX_NEW_MEM(Tri(p[1],p[0],p[2]); t3->n=int3(1,0,2), CONVEX_TEMP); +#endif + isextreme[p[0]]=isextreme[p[1]]=isextreme[p[2]]=isextreme[p[3]]=1; + checkit(t0);checkit(t1);checkit(t2);checkit(t3); + + for(j=0;jvmax<0); + double3 n=TriNormal(verts[(*t)[0]],verts[(*t)[1]],verts[(*t)[2]]); + t->vmax = maxdirsterid(verts,verts_count,n,allow); + t->rise = dot(n,verts[t->vmax]-verts[(*t)[0]]); + } + Tri *te; + vlimit-=4; + while(vlimit >0 && (te=extrudable(epsilon))) + { + int3 ti=*te; + int v=te->vmax; + assert(!isextreme[v]); // wtf we've already done this vertex + isextreme[v]=1; + //if(v==p0 || v==p1 || v==p2 || v==p3) continue; // done these already + j=tris.count; + int newstart=j; + while(j--) { + if(!tris[j]) continue; + int3 t=*tris[j]; + if(above(verts,t,verts[v],0.01f*epsilon)) + { + extrude(tris[j],v); + } + } + // now check for those degenerate cases where we have a flipped triangle or a really skinny triangle + j=tris.count; + while(j--) + { + if(!tris[j]) continue; + if(!hasvert(*tris[j],v)) break; + int3 nt=*tris[j]; + if(above(verts,nt,center,0.01f*epsilon) || magnitude(cross(verts[nt[1]]-verts[nt[0]],verts[nt[2]]-verts[nt[1]]))< epsilon*epsilon*0.1f ) + { + Tri *nb = tris[tris[j]->n[0]]; + assert(nb);assert(!hasvert(*nb,v));assert(nb->idvmax>=0) break; + double3 n=TriNormal(verts[(*t)[0]],verts[(*t)[1]],verts[(*t)[2]]); + t->vmax = maxdirsterid(verts,verts_count,n,allow); + if(isextreme[t->vmax]) + { + t->vmax=-1; // already done that vertex - algorithm needs to be able to terminate. + } + else + { + t->rise = dot(n,verts[t->vmax]-verts[(*t)[0]]); + } + } + vlimit --; + } + return 1; +} + +int calchull(double3 *verts,int verts_count, int *&tris_out, int &tris_count,int vlimit) +{ + int rc=calchullgen(verts,verts_count, vlimit) ; + if(!rc) return 0; + Array ts; + for(int i=0;i &planes,double bevangle) +{ + int i,j; + Array bplanes; + planes.count=0; + int rc = calchullgen(verts,verts_count,vlimit); + if(!rc) return 0; + extern double minadjangle; // default is 3.0f; // in degrees - result wont have two adjacent facets within this angle of each other. + double maxdot_minang = cos(DEG2RAD*minadjangle); + for(i=0;in[j]id) continue; + Tri *s = tris[t->n[j]]; + REAL3 snormal = TriNormal(verts[(*s)[0]],verts[(*s)[1]],verts[(*s)[2]]); + if(dot(snormal,p.normal)>=cos(bevangle*DEG2RAD)) continue; + REAL3 e = verts[(*t)[(j+2)%3]] - verts[(*t)[(j+1)%3]]; + REAL3 n = (e!=REAL3(0,0,0))? cross(snormal,e)+cross(e,p.normal) : snormal+p.normal; + assert(n!=REAL3(0,0,0)); + if(n==REAL3(0,0,0)) return 0; + n=normalize(n); + bplanes.Add(Plane(n,-dot(n,verts[maxdir(verts,verts_count,n)]))); + } + } + for(i=0;imaxdot_minang) + { + // somebody has to die, keep the biggest triangle + if( area2(verts[(*ti)[0]],verts[(*ti)[1]],verts[(*ti)[2]]) < area2(verts[(*tj)[0]],verts[(*tj)[1]],verts[(*tj)[2]])) + { + delete tris[i]; tris[i]=NULL; + } + else + { + delete tris[j]; tris[j]=NULL; + } + } + } + for(i=0;imaxdot_minang) break; + } + if(j==planes.count) + { + planes.Add(bplanes[i]); + } + } + for(i=0;i maxdot_minang) + { + (*((j%2)?&bmax:&bmin)) += n * (diameter*0.5f); + break; + } + } + } + ConvexH *c = ConvexHMakeCube(REAL3(bmin),REAL3(bmax)); + int k; + while(maxplanes-- && (k=candidateplane(planes,planes_count,c,epsilon))>=0) + { + ConvexH *tmp = c; + c = ConvexHCrop(*tmp,planes[k]); + if(c==NULL) {c=tmp; break;} // might want to debug this case better!!! + if(!AssertIntact(*c)) {c=tmp; break;} // might want to debug this case better too!!! + delete tmp; + } + + assert(AssertIntact(*c)); + //return c; + faces_out = (int*)NX_ALLOC(sizeof(int)*(1+c->facets.count+c->edges.count), CONVEX_TEMP); // new int[1+c->facets.count+c->edges.count]; + faces_count_out=0; + i=0; + faces_out[faces_count_out++]=-1; + k=0; + while(iedges.count) + { + j=1; + while(j+iedges.count && c->edges[i].p==c->edges[i+j].p) { j++; } + faces_out[faces_count_out++]=j; + while(j--) + { + faces_out[faces_count_out++] = c->edges[i].v; + i++; + } + k++; + } + faces_out[0]=k; // number of faces. + assert(k==c->facets.count); + assert(faces_count_out == 1+c->facets.count+c->edges.count); + verts_out = c->vertices.element; // new double3[c->vertices.count]; + verts_count_out = c->vertices.count; + for(i=0;ivertices.count;i++) + { + verts_out[i] = double3(c->vertices[i]); + } + c->vertices.count=c->vertices.array_size=0; c->vertices.element=NULL; + delete c; + return 1; +} + +static int overhullv(double3 *verts, int verts_count,int maxplanes, + double3 *&verts_out, int &verts_count_out, int *&faces_out, int &faces_count_out ,double inflate,double bevangle,int vlimit) +{ + if(!verts_count) return 0; + extern int calchullpbev(double3 *verts,int verts_count,int vlimit, Array &planes,double bevangle) ; + Array planes; + int rc=calchullpbev(verts,verts_count,vlimit,planes,bevangle) ; + if(!rc) return 0; + return overhull(planes.element,planes.count,verts,verts_count,maxplanes,verts_out,verts_count_out,faces_out,faces_count_out,inflate); +} + + +//***************************************************** +//***************************************************** + + +bool ComputeHull(unsigned int vcount,const double *vertices,PHullResult &result,unsigned int vlimit,double inflate) +{ + + int index_count; + int *faces; + double3 *verts_out; + int verts_count_out; + + if(inflate==0.0f) + { + int *tris_out; + int tris_count; + int ret = calchull( (double3 *) vertices, (int) vcount, tris_out, tris_count, vlimit ); + if(!ret) return false; + result.mIndexCount = (unsigned int) (tris_count*3); + result.mFaceCount = (unsigned int) tris_count; + result.mVertices = (double*) vertices; + result.mVcount = (unsigned int) vcount; + result.mIndices = (unsigned int *) tris_out; + return true; + } + + int ret = overhullv((double3*)vertices,vcount,35,verts_out,verts_count_out,faces,index_count,inflate,120.0f,vlimit); + if(!ret) { + tris.SetSize(0); //have to set the size to 0 in order to protect from a "pure virtual function call" problem + return false; + } + + Array tris; + int n=faces[0]; + int k=1; + for(int i=0;i bmax[0] ) bmax[0] = v[0]; + if ( v[1] > bmax[1] ) bmax[1] = v[1]; + if ( v[2] > bmax[2] ) bmax[2] = v[2]; + } + + } + } + + double skinwidth = 0; + + if ( desc.HasHullFlag(QF_SKIN_WIDTH) ) + { + skinwidth = desc.mSkinWidth; + if ( skinwidth < 0 ) // if it is a negative skinwidth we shrink the hull points relative to the center. + { + double center[3]; + + center[0] = (bmax[0] - bmin[0])*0.5f + bmin[0]; + center[1] = (bmax[1] - bmin[1])*0.5f + bmin[1]; + center[2] = (bmax[2] - bmin[2])*0.5f + bmin[2]; + + double dx = (bmax[0]-bmin[0])*0.5f; + double dy = (bmax[1]-bmin[1])*0.5f; + double dz = (bmax[2]-bmin[2])*0.5f; + double dist = sqrt(dx*dx+dy*dy+dz*dz); + + skinwidth*=-1; // make it positive... + + double scale = 1.0f - (skinwidth/dist); + if ( scale < 0.3f ) scale = 0.3f; + for (unsigned int i=0; i bmax[j] ) bmax[j] = p[j]; + } + } + } + + double dx = bmax[0] - bmin[0]; + double dy = bmax[1] - bmin[1]; + double dz = bmax[2] - bmin[2]; + + double center[3]; + + center[0] = dx*0.5f + bmin[0]; + center[1] = dy*0.5f + bmin[1]; + center[2] = dz*0.5f + bmin[2]; + + if ( dx < EPSILON || dy < EPSILON || dz < EPSILON || svcount < 3 ) + { + + double len = FLT_MAX; + + if ( dx > EPSILON && dx < len ) len = dx; + if ( dy > EPSILON && dy < len ) len = dy; + if ( dz > EPSILON && dz < len ) len = dz; + + if ( len == FLT_MAX ) + { + dx = dy = dz = 0.01f; // one centimeter + } + else + { + if ( dx < EPSILON ) dx = len * 0.05f; // 1/5th the shortest non-zero edge. + if ( dy < EPSILON ) dy = len * 0.05f; + if ( dz < EPSILON ) dz = len * 0.05f; + } + + double x1 = center[0] - dx; + double x2 = center[0] + dx; + + double y1 = center[1] - dy; + double y2 = center[1] + dy; + + double z1 = center[2] - dz; + double z2 = center[2] + dz; + + AddPoint(vcount,vertices,x1,y1,z1); + AddPoint(vcount,vertices,x2,y1,z1); + AddPoint(vcount,vertices,x2,y2,z1); + AddPoint(vcount,vertices,x1,y2,z1); + AddPoint(vcount,vertices,x1,y1,z2); + AddPoint(vcount,vertices,x2,y1,z2); + AddPoint(vcount,vertices,x2,y2,z2); + AddPoint(vcount,vertices,x1,y2,z2); + + return true; // return cube + + + } + else + { + if ( scale ) + { + scale[0] = dx; + scale[1] = dy; + scale[2] = dz; + + recip[0] = 1 / dx; + recip[1] = 1 / dy; + recip[2] = 1 / dz; + + center[0]*=recip[0]; + center[1]*=recip[1]; + center[2]*=recip[2]; + + } + + } + + + + vtx = (const char *) svertices; + + for (unsigned int i=0; i dist2 ) + { + v[0] = px; + v[1] = py; + v[2] = pz; + } + + break; + } + } + + if ( j == vcount ) + { + double *dest = &vertices[vcount*3]; + dest[0] = px; + dest[1] = py; + dest[2] = pz; + vcount++; + } + } + } + + // ok..now make sure we didn't prune so many vertices it is now invalid. + if ( 1 ) + { + double bmin[3] = { FLT_MAX, FLT_MAX, FLT_MAX }; + double bmax[3] = { -FLT_MAX, -FLT_MAX, -FLT_MAX }; + + for (unsigned int i=0; i bmax[j] ) bmax[j] = p[j]; + } + } + + double dx = bmax[0] - bmin[0]; + double dy = bmax[1] - bmin[1]; + double dz = bmax[2] - bmin[2]; + + if ( dx < EPSILON || dy < EPSILON || dz < EPSILON || vcount < 3) + { + double cx = dx*0.5f + bmin[0]; + double cy = dy*0.5f + bmin[1]; + double cz = dz*0.5f + bmin[2]; + + double len = FLT_MAX; + + if ( dx >= EPSILON && dx < len ) len = dx; + if ( dy >= EPSILON && dy < len ) len = dy; + if ( dz >= EPSILON && dz < len ) len = dz; + + if ( len == FLT_MAX ) + { + dx = dy = dz = 0.01f; // one centimeter + } + else + { + if ( dx < EPSILON ) dx = len * 0.05f; // 1/5th the shortest non-zero edge. + if ( dy < EPSILON ) dy = len * 0.05f; + if ( dz < EPSILON ) dz = len * 0.05f; + } + + double x1 = cx - dx; + double x2 = cx + dx; + + double y1 = cy - dy; + double y2 = cy + dy; + + double z1 = cz - dz; + double z2 = cz + dz; + + vcount = 0; // add box + + AddPoint(vcount,vertices,x1,y1,z1); + AddPoint(vcount,vertices,x2,y1,z1); + AddPoint(vcount,vertices,x2,y2,z1); + AddPoint(vcount,vertices,x1,y2,z1); + AddPoint(vcount,vertices,x1,y1,z2); + AddPoint(vcount,vertices,x2,y1,z2); + AddPoint(vcount,vertices,x2,y2,z2); + AddPoint(vcount,vertices,x1,y2,z2); + + return true; + } + } + + return true; +} + +void HullLibrary::BringOutYourDead(const double *verts,unsigned int vcount, double *overts,unsigned int &ocount,unsigned int *indices,unsigned indexcount) +{ + unsigned int *used = (unsigned int *)NX_ALLOC(sizeof(unsigned int)*vcount, CONVEX_TEMP ); + memset(used,0,sizeof(unsigned int)*vcount); + + ocount = 0; + + for (unsigned int i=0; i= 0 && v < vcount ); + + if ( used[v] ) // if already remapped + { + indices[i] = used[v]-1; // index to new array + } + else + { + + indices[i] = ocount; // new index mapping + + overts[ocount*3+0] = verts[v*3+0]; // copy old vert to new vert array + overts[ocount*3+1] = verts[v*3+1]; + overts[ocount*3+2] = verts[v*3+2]; + + ocount++; // increment output vert count + + assert( ocount >=0 && ocount <= vcount ); + + used[v] = ocount; // assign new index remapping + } + } + + NX_FREE(used); +} + + +//================================================================================== +HullError HullLibrary::CreateTriangleMesh(HullResult &answer,ConvexHullTriangleInterface *iface) +{ + HullError ret = QE_FAIL; + + + const double *p = answer.mOutputVertices; + const unsigned int *idx = answer.mIndices; + unsigned int fcount = answer.mNumFaces; + + if ( p && idx && fcount ) + { + ret = QE_OK; + + for (unsigned int i=0; iConvexHullTriangle(v3,v2,v1); +} + +//================================================================================== +double HullLibrary::ComputeNormal(double *n,const double *A,const double *B,const double *C) +{ + double vx,vy,vz,wx,wy,wz,vw_x,vw_y,vw_z,mag; + + vx = (B[0] - C[0]); + vy = (B[1] - C[1]); + vz = (B[2] - C[2]); + + wx = (A[0] - B[0]); + wy = (A[1] - B[1]); + wz = (A[2] - B[2]); + + vw_x = vy * wz - vz * wy; + vw_y = vz * wx - vx * wz; + vw_z = vx * wy - vy * wx; + + mag = sqrt((vw_x * vw_x) + (vw_y * vw_y) + (vw_z * vw_z)); + + if ( mag < 0.000001f ) + { + mag = 0; + } + else + { + mag = 1.0f/mag; + } + + n[0] = vw_x * mag; + n[1] = vw_y * mag; + n[2] = vw_z * mag; + + return mag; +} + + + +}; diff --git a/convex_decomposition/ConvexDecomposition/ConvexDecomposition/cd_hull.h b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/cd_hull.h new file mode 100644 index 0000000..68fb72a --- /dev/null +++ b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/cd_hull.h @@ -0,0 +1,250 @@ +#ifndef HULL_LIB_H + +#define HULL_LIB_H + + +/*! +** +** Copyright (c) 2007 by John W. Ratcliff mailto:jratcliff@infiniplex.net +** +** Portions of this source has been released with the PhysXViewer application, as well as +** Rocket, CreateDynamics, ODF, and as a number of sample code snippets. +** +** If you find this code useful or you are feeling particularily generous I would +** ask that you please go to http://www.amillionpixels.us and make a donation +** to Troy DeMolay. +** +** DeMolay is a youth group for young men between the ages of 12 and 21. +** It teaches strong moral principles, as well as leadership skills and +** public speaking. The donations page uses the 'pay for pixels' paradigm +** where, in this case, a pixel is only a single penny. Donations can be +** made for as small as $4 or as high as a $100 block. Each person who donates +** will get a link to their own site as well as acknowledgement on the +** donations blog located here http://www.amillionpixels.blogspot.com/ +** +** If you wish to contact me you can use the following methods: +** +** Skype Phone: 636-486-4040 (let it ring a long time while it goes through switches) +** Skype ID: jratcliff63367 +** Yahoo: jratcliff63367 +** AOL: jratcliff1961 +** email: jratcliff@infiniplex.net +** Personal website: http://jratcliffscarab.blogspot.com +** Coding Website: http://codesuppository.blogspot.com +** FundRaising Blog: http://amillionpixels.blogspot.com +** Fundraising site: http://www.amillionpixels.us +** New Temple Site: http://newtemple.blogspot.com +** +** +** The MIT license: +** +** Permission is hereby granted, free of charge, to any person obtaining a copy +** of this software and associated documentation files (the "Software"), to deal +** in the Software without restriction, including without limitation the rights +** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +** copies of the Software, and to permit persons to whom the Software is furnished +** to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in all +** copies or substantial portions of the Software. + +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +** WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +** CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + + +namespace ConvexDecomposition +{ + +class HullResult +{ +public: + HullResult(void) + { + mPolygons = true; + mNumOutputVertices = 0; + mOutputVertices = 0; + mNumFaces = 0; + mNumIndices = 0; + mIndices = 0; + } + bool mPolygons; // true if indices represents polygons, false indices are triangles + unsigned int mNumOutputVertices; // number of vertices in the output hull + double *mOutputVertices; // array of vertices, 3 doubles each x,y,z + unsigned int mNumFaces; // the number of faces produced + unsigned int mNumIndices; // the total number of indices + unsigned int *mIndices; // pointer to indices. + +// If triangles, then indices are array indexes into the vertex list. +// If polygons, indices are in the form (number of points in face) (p1, p2, p3, ..) etc.. +}; + +class FHullResult +{ +public: + FHullResult(const HullResult &r) + { + mPolygons = r.mPolygons; + mNumOutputVertices = r.mNumOutputVertices; + mNumFaces = r.mNumFaces; + mNumIndices = r.mNumIndices; + mIndices = 0; + mOutputVertices = 0; + if ( mNumIndices ) + { + mIndices = new unsigned int[mNumIndices]; + memcpy(mIndices,r.mIndices,sizeof(unsigned int)*mNumIndices); + } + if ( mNumOutputVertices ) + { + mOutputVertices = new float[mNumOutputVertices*3]; + const double *src = r.mOutputVertices; + float *dst = mOutputVertices; + for (unsigned int i=0; i +#include +#include + +namespace ConvexDecomposition +{ + + +const double DEG_TO_RAD = ((2.0f * 3.14152654f) / 360.0f); +const double RAD_TO_DEG = (360.0f / (2.0f * 3.141592654f)); + +template class Vector3d +{ +public: + Vector3d(void) { }; // null constructor, does not inialize point. + + Vector3d(const Vector3d &a) // constructor copies existing vector. + { + x = a.x; + y = a.y; + z = a.z; + }; + + Vector3d(Type a,Type b,Type c) // construct with initial point. + { + x = a; + y = b; + z = c; + }; + + Vector3d(const double *t) + { + x = t[0]; + y = t[1]; + z = t[2]; + }; + + Vector3d(const int *t) + { + x = t[0]; + y = t[1]; + z = t[2]; + }; + + bool operator==(const Vector3d &a) const + { + return( a.x == x && a.y == y && a.z == z ); + }; + + bool operator!=(const Vector3d &a) const + { + return( a.x != x || a.y != y || a.z != z ); + }; + +// Operators + Vector3d& operator = (const Vector3d& A) // ASSIGNMENT (=) + { x=A.x; y=A.y; z=A.z; + return(*this); }; + + Vector3d operator + (const Vector3d& A) const // ADDITION (+) + { Vector3d Sum(x+A.x, y+A.y, z+A.z); + return(Sum); }; + + Vector3d operator - (const Vector3d& A) const // SUBTRACTION (-) + { Vector3d Diff(x-A.x, y-A.y, z-A.z); + return(Diff); }; + + Vector3d operator * (const double s) const // MULTIPLY BY SCALAR (*) + { Vector3d Scaled(x*s, y*s, z*s); + return(Scaled); }; + + + Vector3d operator + (const double s) const // ADD CONSTANT TO ALL 3 COMPONENTS (*) + { Vector3d Scaled(x+s, y+s, z+s); + return(Scaled); }; + + + + + Vector3d operator / (const double s) const // DIVIDE BY SCALAR (/) + { + double r = 1.0f / s; + Vector3d Scaled(x*r, y*r, z*r); + return(Scaled); + }; + + void operator /= (Type A) // ACCUMULATED VECTOR ADDITION (/=) + { x/=A; y/=A; z/=A; }; + + void operator += (const Vector3d A) // ACCUMULATED VECTOR ADDITION (+=) + { x+=A.x; y+=A.y; z+=A.z; }; + void operator -= (const Vector3d A) // ACCUMULATED VECTOR SUBTRACTION (+=) + { x-=A.x; y-=A.y; z-=A.z; }; + void operator *= (const double s) // ACCUMULATED SCALAR MULTIPLICATION (*=) (bpc 4/24/2000) + {x*=s; y*=s; z*=s;} + + void operator += (const double A) // ACCUMULATED VECTOR ADDITION (+=) + { x+=A; y+=A; z+=A; }; + + + Vector3d operator - (void) const // NEGATION (-) + { Vector3d Negated(-x, -y, -z); + return(Negated); }; + + Type operator [] (const int i) const // ALLOWS VECTOR ACCESS AS AN ARRAY. + { return( (i==0)?x:((i==1)?y:z) ); }; + Type & operator [] (const int i) + { return( (i==0)?x:((i==1)?y:z) ); }; +// + + // accessor methods. + Type GetX(void) const { return x; }; + Type GetY(void) const { return y; }; + Type GetZ(void) const { return z; }; + + Type X(void) const { return x; }; + Type Y(void) const { return y; }; + Type Z(void) const { return z; }; + + void SetX(Type t) { x = t; }; + void SetY(Type t) { y = t; }; + void SetZ(Type t) { z = t; }; + + bool IsSame(const Vector3d &v,double epsilon) const + { + double dx = fabsf( x - v.x ); + if ( dx > epsilon ) return false; + double dy = fabsf( y - v.y ); + if ( dy > epsilon ) return false; + double dz = fabsf( z - v.z ); + if ( dz > epsilon ) return false; + return true; + } + + + double ComputeNormal(const Vector3d &A, + const Vector3d &B, + const Vector3d &C) + { + double vx,vy,vz,wx,wy,wz,vw_x,vw_y,vw_z,mag; + + vx = (B.x - C.x); + vy = (B.y - C.y); + vz = (B.z - C.z); + + wx = (A.x - B.x); + wy = (A.y - B.y); + wz = (A.z - B.z); + + vw_x = vy * wz - vz * wy; + vw_y = vz * wx - vx * wz; + vw_z = vx * wy - vy * wx; + + mag = sqrtf((vw_x * vw_x) + (vw_y * vw_y) + (vw_z * vw_z)); + + if ( mag < 0.000001f ) + { + mag = 0; + } + else + { + mag = 1.0f/mag; + } + + x = vw_x * mag; + y = vw_y * mag; + z = vw_z * mag; + + return mag; + } + + + void ScaleSumScale(double c0,double c1,const Vector3d &pos) + { + x = (x*c0) + (pos.x*c1); + y = (y*c0) + (pos.y*c1); + z = (z*c0) + (pos.z*c1); + } + + void SwapYZ(void) + { + double t = y; + y = z; + z = t; + }; + + void Get(Type *v) const + { + v[0] = x; + v[1] = y; + v[2] = z; + }; + + void Set(const int *p) + { + x = (Type) p[0]; + y = (Type) p[1]; + z = (Type) p[2]; + } + + void Set(const double *p) + { + x = (Type) p[0]; + y = (Type) p[1]; + z = (Type) p[2]; + } + + + void Set(Type a,Type b,Type c) + { + x = a; + y = b; + z = c; + }; + + void Zero(void) + { + x = y = z = 0; + }; + + const Type* Ptr() const { return &x; } + Type* Ptr() { return &x; } + + +// return -(*this). + Vector3d negative(void) const + { + Vector3d result; + result.x = -x; + result.y = -y; + result.z = -z; + return result; + } + + Type Magnitude(void) const + { + return Type(sqrt(x * x + y * y + z * z)); + }; + + Type FastMagnitude(void) const + { + return Type(sqrt(x * x + y * y + z * z)); + }; + + Type FasterMagnitude(void) const + { + return Type(sqrt(x * x + y * y + z * z)); + }; + + void Lerp(const Vector3d& from,const Vector3d& to,double slerp) + { + x = ((to.x - from.x) * slerp) + from.x; + y = ((to.y - from.y) * slerp) + from.y; + z = ((to.z - from.z) * slerp) + from.z; + }; + + // Highly specialized interpolate routine. Will compute the interpolated position + // shifted forward or backwards along the ray defined between (from) and (to). + // Reason for existance is so that when a bullet collides with a wall, for + // example, you can generate a graphic effect slightly *before* it hit the + // wall so that the effect doesn't sort into the wall itself. + void Interpolate(const Vector3d &from,const Vector3d &to,double offset) + { + x = to.x-from.x; + y = to.y-from.y; + z = to.z-from.z; + double d = sqrtf( x*x + y*y + z*z ); + double recip = 1.0f / d; + x*=recip; + y*=recip; + z*=recip; // normalize vector + d+=offset; // shift along ray + x = x*d + from.x; + y = y*d + from.y; + z = z*d + from.z; + }; + + bool BinaryEqual(const Vector3d &p) const + { + const int *source = (const int *) &x; + const int *dest = (const int *) &p.x; + + if ( source[0] == dest[0] && + source[1] == dest[1] && + source[2] == dest[2] ) return true; + + return false; + }; + + bool BinaryEqual(const Vector3d &p) const + { + if ( x == p.x && y == p.y && z == p.z ) return true; + return false; + } + + +/** Computes the reflection vector between two vectors.*/ + void Reflection(const Vector3d &a,const Vector3d &b)// compute reflection vector. + { + Vector3d c; + Vector3d d; + + double dot = a.Dot(b) * 2.0f; + + c = b * dot; + + d = c - a; + + x = -d.x; + y = -d.y; + z = -d.z; + }; + + void AngleAxis(Type angle,const Vector3d& axis) + { + x = axis.x*angle; + y = axis.y*angle; + z = axis.z*angle; + }; + + Type Length(void) const // length of vector. + { + return Type(sqrt( x*x + y*y + z*z )); + }; + + + double ComputePlane(const Vector3d &A, + const Vector3d &B, + const Vector3d &C) + { + double vx,vy,vz,wx,wy,wz,vw_x,vw_y,vw_z,mag; + + vx = (B.x - C.x); + vy = (B.y - C.y); + vz = (B.z - C.z); + + wx = (A.x - B.x); + wy = (A.y - B.y); + wz = (A.z - B.z); + + vw_x = vy * wz - vz * wy; + vw_y = vz * wx - vx * wz; + vw_z = vx * wy - vy * wx; + + mag = sqrt((vw_x * vw_x) + (vw_y * vw_y) + (vw_z * vw_z)); + + if ( mag < 0.000001f ) + { + mag = 0; + } + else + { + mag = 1.0f/mag; + } + + x = vw_x * mag; + y = vw_y * mag; + z = vw_z * mag; + + + double D = 0.0f - ((x*A.x)+(y*A.y)+(z*A.z)); + + return D; + } + + + Type FastLength(void) const // length of vector. + { + return Type(sqrt( x*x + y*y + z*z )); + }; + + + Type FasterLength(void) const // length of vector. + { + return Type(sqrt( x*x + y*y + z*z )); + }; + + Type Length2(void) const // squared distance, prior to square root. + { + Type l2 = x*x+y*y+z*z; + return l2; + }; + + Type Distance(const Vector3d &a) const // distance between two points. + { + Vector3d d(a.x-x,a.y-y,a.z-z); + return d.Length(); + } + + Type FastDistance(const Vector3d &a) const // distance between two points. + { + Vector3d d(a.x-x,a.y-y,a.z-z); + return d.FastLength(); + } + + Type FasterDistance(const Vector3d &a) const // distance between two points. + { + Vector3d d(a.x-x,a.y-y,a.z-z); + return d.FasterLength(); + } + + + Type DistanceXY(const Vector3d &a) const + { + double dx = a.x - x; + double dy = a.y - y; + double dist = dx*dx + dy*dy; + return dist; + } + + Type Distance2(const Vector3d &a) const // squared distance. + { + double dx = a.x - x; + double dy = a.y - y; + double dz = a.z - z; + return dx*dx + dy*dy + dz*dz; + }; + + Type Partial(const Vector3d &p) const + { + return (x*p.y) - (p.x*y); + } + + Type Area(const Vector3d &p1,const Vector3d &p2) const + { + Type A = Partial(p1); + A+= p1.Partial(p2); + A+= p2.Partial(*this); + return A*0.5f; + } + + inline double Normalize(void) // normalize to a unit vector, returns distance. + { + double d = sqrtf( static_cast< double >( x*x + y*y + z*z ) ); + if ( d > 0 ) + { + double r = 1.0f / d; + x *= r; + y *= r; + z *= r; + } + else + { + x = y = z = 1; + } + return d; + }; + + inline double FastNormalize(void) // normalize to a unit vector, returns distance. + { + double d = sqrt( static_cast< double >( x*x + y*y + z*z ) ); + if ( d > 0 ) + { + double r = 1.0f / d; + x *= r; + y *= r; + z *= r; + } + else + { + x = y = z = 1; + } + return d; + }; + + inline double FasterNormalize(void) // normalize to a unit vector, returns distance. + { + double d = sqrt( static_cast< double >( x*x + y*y + z*z ) ); + if ( d > 0 ) + { + double r = 1.0f / d; + x *= r; + y *= r; + z *= r; + } + else + { + x = y = z = 1; + } + return d; + }; + + + + + Type Dot(const Vector3d &a) const // computes dot product. + { + return (x * a.x + y * a.y + z * a.z ); + }; + + + Vector3d Cross( const Vector3d& other ) const + { + Vector3d result( y*other.z - z*other.y, z*other.x - x*other.z, x*other.y - y*other.x ); + + return result; + } + + void Cross(const Vector3d &a,const Vector3d &b) // cross two vectors result in this one. + { + x = a.y*b.z - a.z*b.y; + y = a.z*b.x - a.x*b.z; + z = a.x*b.y - a.y*b.x; + }; + + /******************************************/ + // Check if next edge (b to c) turns inward + // + // Edge from a to b is already in face + // Edge from b to c is being considered for addition to face + /******************************************/ + bool Concave(const Vector3d& a,const Vector3d& b) + { + double vx,vy,vz,wx,wy,wz,vw_x,vw_y,vw_z,mag,nx,ny,nz,mag_a,mag_b; + + wx = b.x - a.x; + wy = b.y - a.y; + wz = b.z - a.z; + + mag_a = (double) sqrtf((wx * wx) + (wy * wy) + (wz * wz)); + + vx = x - b.x; + vy = y - b.y; + vz = z - b.z; + + mag_b = (double) sqrtf((vx * vx) + (vy * vy) + (vz * vz)); + + vw_x = (vy * wz) - (vz * wy); + vw_y = (vz * wx) - (vx * wz); + vw_z = (vx * wy) - (vy * wx); + + mag = (double) sqrtf((vw_x * vw_x) + (vw_y * vw_y) + (vw_z * vw_z)); + + // Check magnitude of cross product, which is a sine function + // i.e., mag (a x b) = mag (a) * mag (b) * sin (theta); + // If sin (theta) small, then angle between edges is very close to + // 180, which we may want to call a concavity. Setting the + // CONCAVITY_TOLERANCE value greater than about 0.01 MAY cause + // face consolidation to get stuck on particular face. Most meshes + // convert properly with a value of 0.0 + + if (mag/(mag_a*mag_b) <= 0.0f ) return true; + + mag = 1.0f / mag; + + nx = vw_x * mag; + ny = vw_y * mag; + nz = vw_z * mag; + + // Dot product of tri normal with cross product result will + // yield positive number if edges are convex (+1.0 if two tris + // are coplanar), negative number if edges are concave (-1.0 if + // two tris are coplanar.) + + mag = ( x * nx) + ( y * ny) + ( z * nz); + + if (mag > 0.0f ) return false; + + return(true); + }; + + bool PointTestXY(const Vector3d &i,const Vector3d &j) const + { + if (((( i.y <= y ) && ( y < j.y )) || + (( j.y <= y ) && ( y < i.y ))) && + ( x < (j.x - i.x) * (y - i.y) / (j.y - i.y) + i.x)) return true; + return false; + } + + // test to see if this point is inside the triangle specified by + // these three points on the X/Y plane. + bool PointInTriXY(const Vector3d &p1, + const Vector3d &p2, + const Vector3d &p3) const + { + double ax = p3.x - p2.x; + double ay = p3.y - p2.y; + double bx = p1.x - p3.x; + double by = p1.y - p3.y; + double cx = p2.x - p1.x; + double cy = p2.y - p1.y; + double apx = x - p1.x; + double apy = y - p1.y; + double bpx = x - p2.x; + double bpy = y - p2.y; + double cpx = x - p3.x; + double cpy = y - p3.y; + + double aCROSSbp = ax*bpy - ay*bpx; + double cCROSSap = cx*apy - cy*apx; + double bCROSScp = bx*cpy - by*cpx; + + return ((aCROSSbp >= 0.0f) && (bCROSScp >= 0.0f) && (cCROSSap >= 0.0f)); + }; + + // test to see if this point is inside the triangle specified by + // these three points on the X/Y plane. + bool PointInTriYZ(const Vector3d &p1, + const Vector3d &p2, + const Vector3d &p3) const + { + double ay = p3.y - p2.y; + double az = p3.z - p2.z; + double by = p1.y - p3.y; + double bz = p1.z - p3.z; + double cy = p2.y - p1.y; + double cz = p2.z - p1.z; + double apy = y - p1.y; + double apz = z - p1.z; + double bpy = y - p2.y; + double bpz = z - p2.z; + double cpy = y - p3.y; + double cpz = z - p3.z; + + double aCROSSbp = ay*bpz - az*bpy; + double cCROSSap = cy*apz - cz*apy; + double bCROSScp = by*cpz - bz*cpy; + + return ((aCROSSbp >= 0.0f) && (bCROSScp >= 0.0f) && (cCROSSap >= 0.0f)); + }; + + + // test to see if this point is inside the triangle specified by + // these three points on the X/Y plane. + bool PointInTriXZ(const Vector3d &p1, + const Vector3d &p2, + const Vector3d &p3) const + { + double az = p3.z - p2.z; + double ax = p3.x - p2.x; + double bz = p1.z - p3.z; + double bx = p1.x - p3.x; + double cz = p2.z - p1.z; + double cx = p2.x - p1.x; + double apz = z - p1.z; + double apx = x - p1.x; + double bpz = z - p2.z; + double bpx = x - p2.x; + double cpz = z - p3.z; + double cpx = x - p3.x; + + double aCROSSbp = az*bpx - ax*bpz; + double cCROSSap = cz*apx - cx*apz; + double bCROSScp = bz*cpx - bx*cpz; + + return ((aCROSSbp >= 0.0f) && (bCROSScp >= 0.0f) && (cCROSSap >= 0.0f)); + }; + + // Given a point and a line (defined by two points), compute the closest point + // in the line. (The line is treated as infinitely long.) + void NearestPointInLine(const Vector3d &point, + const Vector3d &line0, + const Vector3d &line1) + { + Vector3d &nearestPoint = *this; + Vector3d lineDelta = line1 - line0; + + // Handle degenerate lines + if ( lineDelta == Vector3d(0, 0, 0) ) + { + nearestPoint = line0; + } + else + { + double delta = (point-line0).Dot(lineDelta) / (lineDelta).Dot(lineDelta); + nearestPoint = line0 + delta*lineDelta; + } + } + + // Given a point and a line segment (defined by two points), compute the closest point + // in the line. Cap the point at the endpoints of the line segment. + void NearestPointInLineSegment(const Vector3d &point, + const Vector3d &line0, + const Vector3d &line1) + { + Vector3d &nearestPoint = *this; + Vector3d lineDelta = line1 - line0; + + // Handle degenerate lines + if ( lineDelta == Vector3d(0, 0, 0) ) + { + nearestPoint = line0; + } + else + { + double delta = (point-line0).Dot(lineDelta) / (lineDelta).Dot(lineDelta); + + // Clamp the point to conform to the segment's endpoints + if ( delta < 0 ) + delta = 0; + else if ( delta > 1 ) + delta = 1; + + nearestPoint = line0 + delta*lineDelta; + } + } + + // Given a point and a plane (defined by three points), compute the closest point + // in the plane. (The plane is unbounded.) + void NearestPointInPlane(const Vector3d &point, + const Vector3d &triangle0, + const Vector3d &triangle1, + const Vector3d &triangle2) + { + Vector3d &nearestPoint = *this; + Vector3d lineDelta0 = triangle1 - triangle0; + Vector3d lineDelta1 = triangle2 - triangle0; + Vector3d pointDelta = point - triangle0; + Vector3d normal; + + // Get the normal of the polygon (doesn't have to be a unit vector) + normal.Cross(lineDelta0, lineDelta1); + + double delta = normal.Dot(pointDelta) / normal.Dot(normal); + nearestPoint = point - delta*normal; + } + + // Given a point and a plane (defined by a coplanar point and a normal), compute the closest point + // in the plane. (The plane is unbounded.) + void NearestPointInPlane(const Vector3d &point, + const Vector3d &planePoint, + const Vector3d &planeNormal) + { + Vector3d &nearestPoint = *this; + Vector3d pointDelta = point - planePoint; + + double delta = planeNormal.Dot(pointDelta) / planeNormal.Dot(planeNormal); + nearestPoint = point - delta*planeNormal; + } + + // Given a point and a triangle (defined by three points), compute the closest point + // in the triangle. Clamp the point so it's confined to the area of the triangle. + void NearestPointInTriangle(const Vector3d &point, + const Vector3d &triangle0, + const Vector3d &triangle1, + const Vector3d &triangle2) + { + static const Vector3d zeroVector(0, 0, 0); + + Vector3d &nearestPoint = *this; + + Vector3d lineDelta0 = triangle1 - triangle0; + Vector3d lineDelta1 = triangle2 - triangle0; + + // Handle degenerate triangles + if ( (lineDelta0 == zeroVector) || (lineDelta1 == zeroVector) ) + { + nearestPoint.NearestPointInLineSegment(point, triangle1, triangle2); + } + else if ( lineDelta0 == lineDelta1 ) + { + nearestPoint.NearestPointInLineSegment(point, triangle0, triangle1); + } + + else + { + static Vector3d axis[3]; + axis[0].NearestPointInLine(triangle0, triangle1, triangle2); + axis[1].NearestPointInLine(triangle1, triangle0, triangle2); + axis[2].NearestPointInLine(triangle2, triangle0, triangle1); + + Type axisDot[3]; + axisDot[0] = (triangle0-axis[0]).Dot(point-axis[0]); + axisDot[1] = (triangle1-axis[1]).Dot(point-axis[1]); + axisDot[2] = (triangle2-axis[2]).Dot(point-axis[2]); + + bool bForce = true; + Type bestMagnitude2 = 0; + Type closeMagnitude2; + Vector3d closePoint; + + if ( axisDot[0] < 0 ) + { + closePoint.NearestPointInLineSegment(point, triangle1, triangle2); + closeMagnitude2 = point.Distance2(closePoint); + if ( bForce || (bestMagnitude2 > closeMagnitude2) ) + { + bForce = false; + bestMagnitude2 = closeMagnitude2; + nearestPoint = closePoint; + } + } + if ( axisDot[1] < 0 ) + { + closePoint.NearestPointInLineSegment(point, triangle0, triangle2); + closeMagnitude2 = point.Distance2(closePoint); + if ( bForce || (bestMagnitude2 > closeMagnitude2) ) + { + bForce = false; + bestMagnitude2 = closeMagnitude2; + nearestPoint = closePoint; + } + } + if ( axisDot[2] < 0 ) + { + closePoint.NearestPointInLineSegment(point, triangle0, triangle1); + closeMagnitude2 = point.Distance2(closePoint); + if ( bForce || (bestMagnitude2 > closeMagnitude2) ) + { + bForce = false; + bestMagnitude2 = closeMagnitude2; + nearestPoint = closePoint; + } + } + + // If bForce is true at this point, it means the nearest point lies + // inside the triangle; use the nearest-point-on-a-plane equation + if ( bForce ) + { + Vector3d normal; + + // Get the normal of the polygon (doesn't have to be a unit vector) + normal.Cross(lineDelta0, lineDelta1); + + Vector3d pointDelta = point - triangle0; + double delta = normal.Dot(pointDelta) / normal.Dot(normal); + + nearestPoint = point - delta*normal; + } + } + } + + +//private: + + Type x; + Type y; + Type z; +}; + + +template class Vector2d +{ +public: + Vector2d(void) { }; // null constructor, does not inialize point. + + Vector2d(const Vector2d &a) // constructor copies existing vector. + { + x = a.x; + y = a.y; + }; + + Vector2d(const double *t) + { + x = t[0]; + y = t[1]; + }; + + + Vector2d(Type a,Type b) // construct with initial point. + { + x = a; + y = b; + }; + + const Type* Ptr() const { return &x; } + Type* Ptr() { return &x; } + + Vector2d & operator+=(const Vector2d &a) // += operator. + { + x+=a.x; + y+=a.y; + return *this; + }; + + Vector2d & operator-=(const Vector2d &a) + { + x-=a.x; + y-=a.y; + return *this; + }; + + Vector2d & operator*=(const Vector2d &a) + { + x*=a.x; + y*=a.y; + return *this; + }; + + Vector2d & operator/=(const Vector2d &a) + { + x/=a.x; + y/=a.y; + return *this; + }; + + bool operator==(const Vector2d &a) const + { + if ( a.x == x && a.y == y ) return true; + return false; + }; + + bool operator!=(const Vector2d &a) const + { + if ( a.x != x || a.y != y ) return true; + return false; + }; + + Vector2d operator+(Vector2d a) const + { + a.x+=x; + a.y+=y; + return a; + }; + + Vector2d operator-(Vector2d a) const + { + a.x = x-a.x; + a.y = y-a.y; + return a; + }; + + Vector2d operator - (void) const + { + return negative(); + }; + + Vector2d operator*(Vector2d a) const + { + a.x*=x; + a.y*=y; + return a; + }; + + Vector2d operator*(Type c) const + { + Vector2d a; + + a.x = x * c; + a.y = y * c; + + return a; + }; + + Vector2d operator/(Vector2d a) const + { + a.x = x/a.x; + a.y = y/a.y; + return a; + }; + + + Type Dot(const Vector2d &a) const // computes dot product. + { + return (x * a.x + y * a.y ); + }; + + Type GetX(void) const { return x; }; + Type GetY(void) const { return y; }; + + void SetX(Type t) { x = t; }; + void SetY(Type t) { y = t; }; + + void Set(Type a,Type b) + { + x = a; + y = b; + }; + + void Zero(void) + { + x = 0; + y = 0; + }; + + Vector2d negative(void) const + { + Vector2d result; + result.x = -x; + result.y = -y; + return result; + } + + Type magnitude(void) const + { + return (Type) sqrtf(x * x + y * y ); + } + + Type fastmagnitude(void) const + { + return (Type) sqrt(x * x + y * y ); + } + + Type fastermagnitude(void) const + { + return (Type) sqrt( x * x + y * y ); + } + + void Reflection(Vector2d &a,Vector2d &b); // compute reflection vector. + + Type Length(void) const // length of vector. + { + return Type(sqrtf( x*x + y*y )); + }; + + Type FastLength(void) const // length of vector. + { + return Type(sqrt( x*x + y*y )); + }; + + Type FasterLength(void) const // length of vector. + { + return Type(sqrt( x*x + y*y )); + }; + + Type Length2(void) // squared distance, prior to square root. + { + return x*x+y*y; + } + + Type Distance(const Vector2d &a) const // distance between two points. + { + Type dx = a.x - x; + Type dy = a.y - y; + Type d = dx*dx+dy*dy; + return sqrtf(d); + }; + + Type FastDistance(const Vector2d &a) const // distance between two points. + { + Type dx = a.x - x; + Type dy = a.y - y; + Type d = dx*dx+dy*dy; + return sqrt(d); + }; + + Type FasterDistance(const Vector2d &a) const // distance between two points. + { + Type dx = a.x - x; + Type dy = a.y - y; + Type d = dx*dx+dy*dy; + return sqrt(d); + }; + + Type Distance2(Vector2d &a) // squared distance. + { + Type dx = a.x - x; + Type dy = a.y - y; + return dx*dx + dy *dy; + }; + + void Lerp(const Vector2d& from,const Vector2d& to,double slerp) + { + x = ((to.x - from.x)*slerp) + from.x; + y = ((to.y - from.y)*slerp) + from.y; + }; + + + void Cross(const Vector2d &a,const Vector2d &b) // cross two vectors result in this one. + { + x = a.y*b.x - a.x*b.y; + y = a.x*b.x - a.x*b.x; + }; + + Type Normalize(void) // normalize to a unit vector, returns distance. + { + Type l = Length(); + if ( l != 0 ) + { + l = Type( 1 ) / l; + x*=l; + y*=l; + } + else + { + x = y = 0; + } + return l; + }; + + Type FastNormalize(void) // normalize to a unit vector, returns distance. + { + Type l = FastLength(); + if ( l != 0 ) + { + l = Type( 1 ) / l; + x*=l; + y*=l; + } + else + { + x = y = 0; + } + return l; + }; + + Type FasterNormalize(void) // normalize to a unit vector, returns distance. + { + Type l = FasterLength(); + if ( l != 0 ) + { + l = Type( 1 ) / l; + x*=l; + y*=l; + } + else + { + x = y = 0; + } + return l; + }; + + + Type x; + Type y; +}; + +class Line +{ +public: + Line(const Vector3d &from,const Vector3d &to) + { + mP1 = from; + mP2 = to; + }; + // JWR Test for the intersection of two lines. + + bool Intersect(const Line& src,Vector3d §); +private: + Vector3d mP1; + Vector3d mP2; + +}; + + +typedef std::vector< Vector3d > Vector3dVector; +typedef std::vector< Vector2d > Vector2dVector; + +template Vector3d operator * (Type s, const Vector3d &v ) + { Vector3d Scaled(v.x*s, v.y*s, v.z*s); + return(Scaled); }; + +template Vector2d operator * (Type s, const Vector2d &v ) + { Vector2d Scaled(v.x*s, v.y*s); + return(Scaled); }; + +}; + +#endif diff --git a/convex_decomposition/ConvexDecomposition/ConvexDecomposition/cd_wavefront.cpp b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/cd_wavefront.cpp new file mode 100644 index 0000000..04b7b8c --- /dev/null +++ b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/cd_wavefront.cpp @@ -0,0 +1,858 @@ +#include +#include +#include +#include +#include + +#pragma warning(disable:4996) + +#include "cd_wavefront.h" + + +using namespace ConvexDecomposition; + +/*! +** +** Copyright (c) 2007 by John W. Ratcliff mailto:jratcliff@infiniplex.net +** +** Portions of this source has been released with the PhysXViewer application, as well as +** Rocket, CreateDynamics, ODF, and as a number of sample code snippets. +** +** If you find this code useful or you are feeling particularily generous I would +** ask that you please go to http://www.amillionpixels.us and make a donation +** to Troy DeMolay. +** +** DeMolay is a youth group for young men between the ages of 12 and 21. +** It teaches strong moral principles, as well as leadership skills and +** public speaking. The donations page uses the 'pay for pixels' paradigm +** where, in this case, a pixel is only a single penny. Donations can be +** made for as small as $4 or as high as a $100 block. Each person who donates +** will get a link to their own site as well as acknowledgement on the +** donations blog located here http://www.amillionpixels.blogspot.com/ +** +** If you wish to contact me you can use the following methods: +** +** Skype Phone: 636-486-4040 (let it ring a long time while it goes through switches) +** Skype ID: jratcliff63367 +** Yahoo: jratcliff63367 +** AOL: jratcliff1961 +** email: jratcliff@infiniplex.net +** Personal website: http://jratcliffscarab.blogspot.com +** Coding Website: http://codesuppository.blogspot.com +** FundRaising Blog: http://amillionpixels.blogspot.com +** Fundraising site: http://www.amillionpixels.us +** New Temple Site: http://newtemple.blogspot.com +** +** +** The MIT license: +** +** Permission is hereby granted, free of charge, to any person obtaining a copy +** of this software and associated documentation files (the "Software"), to deal +** in the Software without restriction, including without limitation the rights +** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +** copies of the Software, and to permit persons to whom the Software is furnished +** to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in all +** copies or substantial portions of the Software. + +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +** WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +** CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + + +#include + +namespace ConvexDecomposition +{ + +typedef std::vector< int > IntVector; +typedef std::vector< double > FloatVector; + +#if defined(__APPLE__) || defined(__CELLOS_LV2__) +#define stricmp(a, b) strcasecmp((a), (b)) +#endif + +/*******************************************************************/ +/******************** InParser.h ********************************/ +/*******************************************************************/ +class InPlaceParserInterface +{ +public: + virtual int ParseLine(int lineno,int argc,const char **argv) =0; // return TRUE to continue parsing, return FALSE to abort parsing process +}; + +enum SeparatorType +{ + ST_DATA, // is data + ST_HARD, // is a hard separator + ST_SOFT, // is a soft separator + ST_EOS // is a comment symbol, and everything past this character should be ignored +}; + +class InPlaceParser +{ +public: + InPlaceParser(void) + { + Init(); + } + + InPlaceParser(char *data,int len) + { + Init(); + SetSourceData(data,len); + } + + InPlaceParser(const char *fname) + { + Init(); + SetFile(fname); + } + + ~InPlaceParser(void); + + void Init(void) + { + mQuoteChar = 34; + mData = 0; + mLen = 0; + mMyAlloc = false; + for (int i=0; i<256; i++) + { + mHard[i] = ST_DATA; + mHardString[i*2] = i; + mHardString[i*2+1] = 0; + } + mHard[0] = ST_EOS; + mHard[32] = ST_SOFT; + mHard[9] = ST_SOFT; + mHard[13] = ST_SOFT; + mHard[10] = ST_SOFT; + } + + void SetFile(const char *fname); // use this file as source data to parse. + + void SetSourceData(char *data,int len) + { + mData = data; + mLen = len; + mMyAlloc = false; + }; + + int Parse(InPlaceParserInterface *callback); // returns true if entire file was parsed, false if it aborted for some reason + + int ProcessLine(int lineno,char *line,InPlaceParserInterface *callback); + + const char ** GetArglist(char *source,int &count); // convert source string into an arg list, this is a destructive parse. + + void SetHardSeparator(char c) // add a hard separator + { + mHard[c] = ST_HARD; + } + + void SetHard(char c) // add a hard separator + { + mHard[c] = ST_HARD; + } + + + void SetCommentSymbol(char c) // comment character, treated as 'end of string' + { + mHard[c] = ST_EOS; + } + + void ClearHardSeparator(char c) + { + mHard[c] = ST_DATA; + } + + + void DefaultSymbols(void); // set up default symbols for hard seperator and comment symbol of the '#' character. + + bool EOS(char c) + { + if ( mHard[c] == ST_EOS ) + { + return true; + } + return false; + } + + void SetQuoteChar(char c) + { + mQuoteChar = c; + } + +private: + + + inline char * AddHard(int &argc,const char **argv,char *foo); + inline bool IsHard(char c); + inline char * SkipSpaces(char *foo); + inline bool IsWhiteSpace(char c); + inline bool IsNonSeparator(char c); // non seperator,neither hard nor soft + + bool mMyAlloc; // whether or not *I* allocated the buffer and am responsible for deleting it. + char *mData; // ascii data to parse. + int mLen; // length of data + SeparatorType mHard[256]; + char mHardString[256*2]; + char mQuoteChar; +}; + +/*******************************************************************/ +/******************** InParser.cpp ********************************/ +/*******************************************************************/ +void InPlaceParser::SetFile(const char *fname) +{ + if ( mMyAlloc ) + { + free(mData); + } + mData = 0; + mLen = 0; + mMyAlloc = false; + + + FILE *fph = fopen(fname,"rb"); + if ( fph ) + { + fseek(fph,0L,SEEK_END); + mLen = ftell(fph); + fseek(fph,0L,SEEK_SET); + if ( mLen ) + { + mData = (char *) malloc(sizeof(char)*(mLen+1)); + int ok = fread(mData, mLen, 1, fph); + if ( !ok ) + { + free(mData); + mData = 0; + } + else + { + mData[mLen] = 0; // zero byte terminate end of file marker. + mMyAlloc = true; + } + } + fclose(fph); + } +} + +InPlaceParser::~InPlaceParser(void) +{ + if ( mMyAlloc ) + { + free(mData); + } +} + +#define MAXARGS 512 + +bool InPlaceParser::IsHard(char c) +{ + return mHard[c] == ST_HARD; +} + +char * InPlaceParser::AddHard(int &argc,const char **argv,char *foo) +{ + while ( IsHard(*foo) ) + { + const char *hard = &mHardString[*foo*2]; + if ( argc < MAXARGS ) + { + argv[argc++] = hard; + } + foo++; + } + return foo; +} + +bool InPlaceParser::IsWhiteSpace(char c) +{ + return mHard[c] == ST_SOFT; +} + +char * InPlaceParser::SkipSpaces(char *foo) +{ + while ( !EOS(*foo) && IsWhiteSpace(*foo) ) foo++; + return foo; +} + +bool InPlaceParser::IsNonSeparator(char c) +{ + if ( !IsHard(c) && !IsWhiteSpace(c) && c != 0 ) return true; + return false; +} + + +int InPlaceParser::ProcessLine(int lineno,char *line,InPlaceParserInterface *callback) +{ + int ret = 0; + + const char *argv[MAXARGS]; + int argc = 0; + + char *foo = line; + + while ( !EOS(*foo) && argc < MAXARGS ) + { + + foo = SkipSpaces(foo); // skip any leading spaces + + if ( EOS(*foo) ) break; + + if ( *foo == mQuoteChar ) // if it is an open quote + { + foo++; + if ( argc < MAXARGS ) + { + argv[argc++] = foo; + } + while ( !EOS(*foo) && *foo != mQuoteChar ) foo++; + if ( !EOS(*foo) ) + { + *foo = 0; // replace close quote with zero byte EOS + foo++; + } + } + else + { + + foo = AddHard(argc,argv,foo); // add any hard separators, skip any spaces + + if ( IsNonSeparator(*foo) ) // add non-hard argument. + { + bool quote = false; + if ( *foo == mQuoteChar ) + { + foo++; + quote = true; + } + + if ( argc < MAXARGS ) + { + argv[argc++] = foo; + } + + if ( quote ) + { + while (*foo && *foo != mQuoteChar ) foo++; + if ( *foo ) *foo = 32; + } + + // continue..until we hit an eos .. + while ( !EOS(*foo) ) // until we hit EOS + { + if ( IsWhiteSpace(*foo) ) // if we hit a space, stomp a zero byte, and exit + { + *foo = 0; + foo++; + break; + } + else if ( IsHard(*foo) ) // if we hit a hard separator, stomp a zero byte and store the hard separator argument + { + const char *hard = &mHardString[*foo*2]; + *foo = 0; + if ( argc < MAXARGS ) + { + argv[argc++] = hard; + } + foo++; + break; + } + foo++; + } // end of while loop... + } + } + } + + if ( argc ) + { + ret = callback->ParseLine(lineno, argc, argv ); + } + + return ret; +} + +int InPlaceParser::Parse(InPlaceParserInterface *callback) // returns true if entire file was parsed, false if it aborted for some reason +{ + assert( callback ); + if ( !mData ) return 0; + + int ret = 0; + + int lineno = 0; + + char *foo = mData; + char *begin = foo; + + + while ( *foo ) + { + if ( *foo == 10 || *foo == 13 ) + { + lineno++; + *foo = 0; + + if ( *begin ) // if there is any data to parse at all... + { + int v = ProcessLine(lineno,begin,callback); + if ( v ) ret = v; + } + + foo++; + if ( *foo == 10 ) foo++; // skip line feed, if it is in the carraige-return line-feed format... + begin = foo; + } + else + { + foo++; + } + } + + lineno++; // lasst line. + + int v = ProcessLine(lineno,begin,callback); + if ( v ) ret = v; + return ret; +} + + +void InPlaceParser::DefaultSymbols(void) +{ + SetHardSeparator(','); + SetHardSeparator('('); + SetHardSeparator(')'); + SetHardSeparator('='); + SetHardSeparator('['); + SetHardSeparator(']'); + SetHardSeparator('{'); + SetHardSeparator('}'); + SetCommentSymbol('#'); +} + + +const char ** InPlaceParser::GetArglist(char *line,int &count) // convert source string into an arg list, this is a destructive parse. +{ + const char **ret = 0; + + static const char *argv[MAXARGS]; + int argc = 0; + + char *foo = line; + + while ( !EOS(*foo) && argc < MAXARGS ) + { + + foo = SkipSpaces(foo); // skip any leading spaces + + if ( EOS(*foo) ) break; + + if ( *foo == mQuoteChar ) // if it is an open quote + { + foo++; + if ( argc < MAXARGS ) + { + argv[argc++] = foo; + } + while ( !EOS(*foo) && *foo != mQuoteChar ) foo++; + if ( !EOS(*foo) ) + { + *foo = 0; // replace close quote with zero byte EOS + foo++; + } + } + else + { + + foo = AddHard(argc,argv,foo); // add any hard separators, skip any spaces + + if ( IsNonSeparator(*foo) ) // add non-hard argument. + { + bool quote = false; + if ( *foo == mQuoteChar ) + { + foo++; + quote = true; + } + + if ( argc < MAXARGS ) + { + argv[argc++] = foo; + } + + if ( quote ) + { + while (*foo && *foo != mQuoteChar ) foo++; + if ( *foo ) *foo = 32; + } + + // continue..until we hit an eos .. + while ( !EOS(*foo) ) // until we hit EOS + { + if ( IsWhiteSpace(*foo) ) // if we hit a space, stomp a zero byte, and exit + { + *foo = 0; + foo++; + break; + } + else if ( IsHard(*foo) ) // if we hit a hard separator, stomp a zero byte and store the hard separator argument + { + const char *hard = &mHardString[*foo*2]; + *foo = 0; + if ( argc < MAXARGS ) + { + argv[argc++] = hard; + } + foo++; + break; + } + foo++; + } // end of while loop... + } + } + } + + count = argc; + if ( argc ) + { + ret = argv; + } + + return ret; +} + +/*******************************************************************/ +/******************** Geometry.h ********************************/ +/*******************************************************************/ + +class GeometryVertex +{ +public: + double mPos[3]; + double mNormal[3]; + double mTexel[2]; +}; + + +class GeometryInterface +{ +public: + + virtual void NodeTriangle(const GeometryVertex *v1,const GeometryVertex *v2,const GeometryVertex *v3) + { + } + +}; + + +/*******************************************************************/ +/******************** Obj.h ********************************/ +/*******************************************************************/ + + +class OBJ : public InPlaceParserInterface +{ +public: + int LoadMesh(const char *fname,GeometryInterface *callback); + int ParseLine(int lineno,int argc,const char **argv); // return TRUE to continue parsing, return FALSE to abort parsing process +private: + + void GetVertex(GeometryVertex &v,const char *face) const; + + FloatVector mVerts; + FloatVector mTexels; + FloatVector mNormals; + + GeometryInterface *mCallback; + friend class WavefrontObj; +}; + + +/*******************************************************************/ +/******************** Obj.cpp ********************************/ +/*******************************************************************/ + +int OBJ::LoadMesh(const char *fname,GeometryInterface *iface) +{ + int ret = 0; + + mVerts.clear(); + mTexels.clear(); + mNormals.clear(); + + mCallback = iface; + + InPlaceParser ipp(fname); + + ipp.Parse(this); + + + return ret; +} + +static const char * GetArg(const char **argv,int i,int argc) +{ + const char * ret = 0; + if ( i < argc ) ret = argv[i]; + return ret; +} + +void OBJ::GetVertex(GeometryVertex &v,const char *face) const +{ + v.mPos[0] = 0; + v.mPos[1] = 0; + v.mPos[2] = 0; + + v.mTexel[0] = 0; + v.mTexel[1] = 0; + + v.mNormal[0] = 0; + v.mNormal[1] = 1; + v.mNormal[2] = 0; + + int index = atoi( face )-1; + + const char *texel = strstr(face,"/"); + + if ( texel ) + { + int tindex = atoi( texel+1) - 1; + + if ( tindex >=0 && tindex < (int)(mTexels.size()/2) ) + { + const double *t = &mTexels[tindex*2]; + + v.mTexel[0] = t[0]; + v.mTexel[1] = t[1]; + + } + + const char *normal = strstr(texel+1,"/"); + if ( normal ) + { + int nindex = atoi( normal+1 ) - 1; + + if (nindex >= 0 && nindex < (int)(mNormals.size()/3) ) + { + const double *n = &mNormals[nindex*3]; + + v.mNormal[0] = n[0]; + v.mNormal[1] = n[1]; + v.mNormal[2] = n[2]; + } + } + } + + if ( index >= 0 && index < (int)(mVerts.size()/3) ) + { + + const double *p = &mVerts[index*3]; + + v.mPos[0] = p[0]; + v.mPos[1] = p[1]; + v.mPos[2] = p[2]; + } + +} + +int OBJ::ParseLine(int lineno,int argc,const char **argv) // return TRUE to continue parsing, return FALSE to abort parsing process +{ + int ret = 0; + + if ( argc >= 1 ) + { + const char *foo = argv[0]; + if ( *foo != '#' ) + { + if ( strcmp(argv[0],"v") == 0 && argc == 4 ) + { + double vx = (double) atof( argv[1] ); + double vy = (double) atof( argv[2] ); + double vz = (double) atof( argv[3] ); + mVerts.push_back(vx); + mVerts.push_back(vy); + mVerts.push_back(vz); + } + else if ( strcmp(argv[0],"vt") == 0 && argc == 3 ) + { + double tx = (double) atof( argv[1] ); + double ty = (double) atof( argv[2] ); + mTexels.push_back(tx); + mTexels.push_back(ty); + } + else if ( strcmp(argv[0],"vn") == 0 && argc == 4 ) + { + double normalx = (double) atof(argv[1]); + double normaly = (double) atof(argv[2]); + double normalz = (double) atof(argv[3]); + mNormals.push_back(normalx); + mNormals.push_back(normaly); + mNormals.push_back(normalz); + } + else if ( strcmp(argv[0],"f") == 0 && argc >= 4 ) + { + GeometryVertex v[32]; + + int vcount = argc-1; + + for (int i=1; i p1( v[0].mPos ); + Vector3d p2( v[1].mPos ); + Vector3d p3( v[2].mPos ); + + Vector3d n; + n.ComputeNormal(p3,p2,p1); + + for (int i=0; iNodeTriangle(&v[0],&v[1],&v[2]); + + if ( vcount >=3 ) // do the fan + { + for (int i=2; i<(vcount-1); i++) + { + mCallback->NodeTriangle(&v[0],&v[i],&v[i+1]); + } + } + + } + } + } + + return ret; +} + + + + +class BuildMesh : public GeometryInterface +{ +public: + + int GetIndex(const double *p) + { + + int vcount = mVertices.size()/3; + + if(vcount>0) + { + //New MS STL library checks indices in debug build, so zero causes an assert if it is empty. + const double *v = &mVertices[0]; + + for (int i=0; imPos) ); + mIndices.push_back( GetIndex(v2->mPos) ); + mIndices.push_back( GetIndex(v3->mPos) ); + } + + const FloatVector& GetVertices(void) const { return mVertices; }; + const IntVector& GetIndices(void) const { return mIndices; }; + +private: + FloatVector mVertices; + IntVector mIndices; +}; + + +WavefrontObj::WavefrontObj(void) +{ + mVertexCount = 0; + mTriCount = 0; + mIndices = 0; + mVertices = 0; +} + +WavefrontObj::~WavefrontObj(void) +{ + delete mIndices; + delete mVertices; +} + +unsigned int WavefrontObj::loadObj(const char *fname) // load a wavefront obj returns number of triangles that were loaded. Data is persists until the class is destructed. +{ + + unsigned int ret = 0; + + delete mVertices; + mVertices = 0; + delete mIndices; + mIndices = 0; + mVertexCount = 0; + mTriCount = 0; + + + BuildMesh bm; + + OBJ obj; + + obj.LoadMesh(fname,&bm); + + + const FloatVector &vlist = bm.GetVertices(); + const IntVector &indices = bm.GetIndices(); + if ( vlist.size() ) + { + mVertexCount = vlist.size()/3; + mVertices = new double[mVertexCount*3]; + memcpy( mVertices, &vlist[0], sizeof(double)*mVertexCount*3 ); + mTriCount = indices.size()/3; + mIndices = new int[mTriCount*3*sizeof(int)]; + memcpy(mIndices, &indices[0], sizeof(int)*mTriCount*3); + ret = mTriCount; + } + else if( obj.mVerts.size() > 0 ) { + // take consecutive vertices + mVertexCount = obj.mVerts.size()/3; + mVertices = new double[mVertexCount*3]; + memcpy( mVertices, &obj.mVerts[0], sizeof(double)*mVertexCount*3 ); + mTriCount = mVertexCount/3; + mIndices = new int[mTriCount*3*sizeof(int)]; + for(int i = 0; i < mVertexCount; ++i) + mIndices[i] = i; + ret = mTriCount; + } + + return ret; +} + +}; diff --git a/convex_decomposition/ConvexDecomposition/ConvexDecomposition/cd_wavefront.h b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/cd_wavefront.h new file mode 100644 index 0000000..4eff55c --- /dev/null +++ b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/cd_wavefront.h @@ -0,0 +1,82 @@ +#ifndef CD_WAVEFRONT_OBJ_H + + +#define CD_WAVEFRONT_OBJ_H + +/*! +** +** Copyright (c) 2007 by John W. Ratcliff mailto:jratcliff@infiniplex.net +** +** Portions of this source has been released with the PhysXViewer application, as well as +** Rocket, CreateDynamics, ODF, and as a number of sample code snippets. +** +** If you find this code useful or you are feeling particularily generous I would +** ask that you please go to http://www.amillionpixels.us and make a donation +** to Troy DeMolay. +** +** DeMolay is a youth group for young men between the ages of 12 and 21. +** It teaches strong moral principles, as well as leadership skills and +** public speaking. The donations page uses the 'pay for pixels' paradigm +** where, in this case, a pixel is only a single penny. Donations can be +** made for as small as $4 or as high as a $100 block. Each person who donates +** will get a link to their own site as well as acknowledgement on the +** donations blog located here http://www.amillionpixels.blogspot.com/ +** +** If you wish to contact me you can use the following methods: +** +** Skype Phone: 636-486-4040 (let it ring a long time while it goes through switches) +** Skype ID: jratcliff63367 +** Yahoo: jratcliff63367 +** AOL: jratcliff1961 +** email: jratcliff@infiniplex.net +** Personal website: http://jratcliffscarab.blogspot.com +** Coding Website: http://codesuppository.blogspot.com +** FundRaising Blog: http://amillionpixels.blogspot.com +** Fundraising site: http://www.amillionpixels.us +** New Temple Site: http://newtemple.blogspot.com +** +** +** The MIT license: +** +** Permission is hereby granted, free of charge, to any person obtaining a copy +** of this software and associated documentation files (the "Software"), to deal +** in the Software without restriction, including without limitation the rights +** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +** copies of the Software, and to permit persons to whom the Software is furnished +** to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in all +** copies or substantial portions of the Software. + +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +** WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +** CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + + +namespace ConvexDecomposition +{ + +class WavefrontObj +{ +public: + + WavefrontObj(void); + ~WavefrontObj(void); + + unsigned int loadObj(const char *fname); // load a wavefront obj returns number of triangles that were loaded. Data is persists until the class is destructed. + + int mVertexCount; + int mTriCount; + int *mIndices; + double *mVertices; +}; + +}; + +#endif diff --git a/convex_decomposition/ConvexDecomposition/ConvexDecomposition/concavity.cpp b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/concavity.cpp new file mode 100644 index 0000000..77cbd7b --- /dev/null +++ b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/concavity.cpp @@ -0,0 +1,821 @@ +#include +#include +#include +#include + +/*! +** +** Copyright (c) 2007 by John W. Ratcliff mailto:jratcliff@infiniplex.net +** +** Portions of this source has been released with the PhysXViewer application, as well as +** Rocket, CreateDynamics, ODF, and as a number of sample code snippets. +** +** If you find this code useful or you are feeling particularily generous I would +** ask that you please go to http://www.amillionpixels.us and make a donation +** to Troy DeMolay. +** +** DeMolay is a youth group for young men between the ages of 12 and 21. +** It teaches strong moral principles, as well as leadership skills and +** public speaking. The donations page uses the 'pay for pixels' paradigm +** where, in this case, a pixel is only a single penny. Donations can be +** made for as small as $4 or as high as a $100 block. Each person who donates +** will get a link to their own site as well as acknowledgement on the +** donations blog located here http://www.amillionpixels.blogspot.com/ +** +** If you wish to contact me you can use the following methods: +** +** Skype Phone: 636-486-4040 (let it ring a long time while it goes through switches) +** Skype ID: jratcliff63367 +** Yahoo: jratcliff63367 +** AOL: jratcliff1961 +** email: jratcliff@infiniplex.net +** Personal website: http://jratcliffscarab.blogspot.com +** Coding Website: http://codesuppository.blogspot.com +** FundRaising Blog: http://amillionpixels.blogspot.com +** Fundraising site: http://www.amillionpixels.us +** New Temple Site: http://newtemple.blogspot.com +** +** +** The MIT license: +** +** Permission is hereby granted, free of charge, to any person obtaining a copy +** of this software and associated documentation files (the "Software"), to deal +** in the Software without restriction, including without limitation the rights +** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +** copies of the Software, and to permit persons to whom the Software is furnished +** to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in all +** copies or substantial portions of the Software. + +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +** WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +** CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + + +#include + +#include "concavity.h" +#include "raytri.h" +#include "bestfit.h" +#include "cd_hull.h" +#include "meshvolume.h" +#include "cd_vector.h" +#include "splitplane.h" +#include "ConvexDecomposition.h" + + +#define WSCALE 4 +#define CONCAVE_THRESH 0.05f + +namespace ConvexDecomposition +{ + +unsigned int getDebugColor(void) +{ + static unsigned int colors[8] = + { + 0xFF0000, + 0x00FF00, + 0x0000FF, + 0xFFFF00, + 0x00FFFF, + 0xFF00FF, + 0xFFFFFF, + 0xFF8040 + }; + + static int count = 0; + + count++; + + if ( count == 8 ) count = 0; + + assert( count >= 0 && count < 8 ); + + unsigned int color = colors[count]; + + return color; + +} + +class Wpoint +{ +public: + Wpoint(const Vector3d &p,double w) + { + mPoint = p; + mWeight = w; + } + + Vector3d mPoint; + double mWeight; +}; + +typedef std::vector< Wpoint > WpointVector; + + +static inline double DistToPt(const double *p,const double *plane) +{ + double x = p[0]; + double y = p[1]; + double z = p[2]; + double d = x*plane[0] + y*plane[1] + z*plane[2] + plane[3]; + return d; +} + + +static void intersect(const double *p1,const double *p2,double *split,const double *plane) +{ + + double dp1 = DistToPt(p1,plane); + double dp2 = DistToPt(p2,plane); + + double dir[3]; + + dir[0] = p2[0] - p1[0]; + dir[1] = p2[1] - p1[1]; + dir[2] = p2[2] - p1[2]; + + double dot1 = dir[0]*plane[0] + dir[1]*plane[1] + dir[2]*plane[2]; + double dot2 = dp1 - plane[3]; + + double t = -(plane[3] + dot2 ) / dot1; + + split[0] = (dir[0]*t)+p1[0]; + split[1] = (dir[1]*t)+p1[1]; + split[2] = (dir[2]*t)+p1[2]; + +} + + +class CTri +{ +public: + CTri(void) { }; + + CTri(const double *p1,const double *p2,const double *p3,unsigned int i1,unsigned int i2,unsigned int i3) + { + mProcessed = 0; + mI1 = i1; + mI2 = i2; + mI3 = i3; + + mP1.Set(p1); + mP2.Set(p2); + mP3.Set(p3); + + mPlaneD = mNormal.ComputePlane(mP1,mP2,mP3); + } + + double Facing(const CTri &t) + { + double d = mNormal.Dot(t.mNormal); + return d; + } + + // clip this line segment against this triangle. + bool clip(const Vector3d &start,Vector3d &end) const + { + Vector3d sect; + + bool hit = lineIntersectsTriangle(start.Ptr(), end.Ptr(), mP1.Ptr(), mP2.Ptr(), mP3.Ptr(), sect.Ptr() ); + + if ( hit ) + { + end = sect; + } + return hit; + } + + bool Concave(const Vector3d &p,double &distance,Vector3d &n) const + { + n.NearestPointInTriangle(p,mP1,mP2,mP3); + distance = p.Distance(n); + return true; + } + + void addTri(unsigned int *indices,unsigned int i1,unsigned int i2,unsigned int i3,unsigned int &tcount) const + { + indices[tcount*3+0] = i1; + indices[tcount*3+1] = i2; + indices[tcount*3+2] = i3; + tcount++; + } + + double getVolume(ConvexDecompInterface *callback) const + { + unsigned int indices[8*3]; + + + unsigned int tcount = 0; + + addTri(indices,0,1,2,tcount); + addTri(indices,3,4,5,tcount); + + addTri(indices,0,3,4,tcount); + addTri(indices,0,4,1,tcount); + + addTri(indices,1,4,5,tcount); + addTri(indices,1,5,2,tcount); + + addTri(indices,0,3,5,tcount); + addTri(indices,0,5,2,tcount); + + const double *vertices = mP1.Ptr(); + + if ( callback ) + { + unsigned int color = getDebugColor(); + +#if 0 + Vector3d d1 = mNear1; + Vector3d d2 = mNear2; + Vector3d d3 = mNear3; + + callback->ConvexDebugPoint(mP1.Ptr(),0.01f,0x00FF00); + callback->ConvexDebugPoint(mP2.Ptr(),0.01f,0x00FF00); + callback->ConvexDebugPoint(mP3.Ptr(),0.01f,0x00FF00); + callback->ConvexDebugPoint(d1.Ptr(),0.01f,0xFF0000); + callback->ConvexDebugPoint(d2.Ptr(),0.01f,0xFF0000); + callback->ConvexDebugPoint(d3.Ptr(),0.01f,0xFF0000); + + callback->ConvexDebugTri(mP1.Ptr(), d1.Ptr(), d1.Ptr(),0x00FF00); + callback->ConvexDebugTri(mP2.Ptr(), d2.Ptr(), d2.Ptr(),0x00FF00); + callback->ConvexDebugTri(mP3.Ptr(), d3.Ptr(), d3.Ptr(),0x00FF00); + +#else + for (unsigned int i=0; iConvexDebugTri(p1,p2,p3,color); + + } +#endif + } + + double v = computeMeshVolume(mP1.Ptr(), tcount, indices ); + + return v; + + } + + double raySect(const Vector3d &p,const Vector3d &dir,Vector3d §) const + { + double plane[4]; + + plane[0] = mNormal.x; + plane[1] = mNormal.y; + plane[2] = mNormal.z; + plane[3] = mPlaneD; + + Vector3d dest = p+dir*100000; + + intersect( p.Ptr(), dest.Ptr(), sect.Ptr(), plane ); + + return sect.Distance(p); // return the intersection distance. + + } + + double planeDistance(const Vector3d &p) const + { + double plane[4]; + + plane[0] = mNormal.x; + plane[1] = mNormal.y; + plane[2] = mNormal.z; + plane[3] = mPlaneD; + + return DistToPt( p.Ptr(), plane ); + + } + + bool samePlane(const CTri &t) const + { + const double THRESH = 0.001f; + double dd = fabs( t.mPlaneD - mPlaneD ); + if ( dd > THRESH ) return false; + dd = fabs( t.mNormal.x - mNormal.x ); + if ( dd > THRESH ) return false; + dd = fabs( t.mNormal.y - mNormal.y ); + if ( dd > THRESH ) return false; + dd = fabs( t.mNormal.z - mNormal.z ); + if ( dd > THRESH ) return false; + return true; + } + + bool hasIndex(unsigned int i) const + { + if ( i == mI1 || i == mI2 || i == mI3 ) return true; + return false; + } + + bool sharesEdge(const CTri &t) const + { + bool ret = false; + unsigned int count = 0; + + if ( t.hasIndex(mI1) ) count++; + if ( t.hasIndex(mI2) ) count++; + if ( t.hasIndex(mI3) ) count++; + + if ( count >= 2 ) ret = true; + + return ret; + } + + void debug(unsigned int color,ConvexDecompInterface *callback) + { + callback->ConvexDebugTri( mP1.Ptr(), mP2.Ptr(), mP3.Ptr(), color ); + callback->ConvexDebugTri( mP1.Ptr(), mP1.Ptr(), mNear1.Ptr(), 0xFF0000 ); + callback->ConvexDebugTri( mP2.Ptr(), mP2.Ptr(), mNear2.Ptr(), 0xFF0000 ); + callback->ConvexDebugTri( mP2.Ptr(), mP3.Ptr(), mNear3.Ptr(), 0xFF0000 ); + callback->ConvexDebugPoint( mNear1.Ptr(), 0.01f, 0xFF0000 ); + callback->ConvexDebugPoint( mNear2.Ptr(), 0.01f, 0xFF0000 ); + callback->ConvexDebugPoint( mNear3.Ptr(), 0.01f, 0xFF0000 ); + } + + double area(void) + { + double a = mConcavity*mP1.Area(mP2,mP3); + return a; + } + + void addWeighted(WpointVector &list,ConvexDecompInterface *callback) + { + + Wpoint p1(mP1,mC1); + Wpoint p2(mP2,mC2); + Wpoint p3(mP3,mC3); + + Vector3d d1 = mNear1 - mP1; + Vector3d d2 = mNear2 - mP2; + Vector3d d3 = mNear3 - mP3; + + d1*=WSCALE; + d2*=WSCALE; + d3*=WSCALE; + + d1 = d1 + mP1; + d2 = d2 + mP2; + d3 = d3 + mP3; + + Wpoint p4(d1,mC1); + Wpoint p5(d2,mC2); + Wpoint p6(d3,mC3); + + list.push_back(p1); + list.push_back(p2); + list.push_back(p3); + + list.push_back(p4); + list.push_back(p5); + list.push_back(p6); + +#if 0 + callback->ConvexDebugPoint(mP1.Ptr(),0.01f,0x00FF00); + callback->ConvexDebugPoint(mP2.Ptr(),0.01f,0x00FF00); + callback->ConvexDebugPoint(mP3.Ptr(),0.01f,0x00FF00); + callback->ConvexDebugPoint(d1.Ptr(),0.01f,0xFF0000); + callback->ConvexDebugPoint(d2.Ptr(),0.01f,0xFF0000); + callback->ConvexDebugPoint(d3.Ptr(),0.01f,0xFF0000); + + callback->ConvexDebugTri(mP1.Ptr(), d1.Ptr(), d1.Ptr(),0x00FF00); + callback->ConvexDebugTri(mP2.Ptr(), d2.Ptr(), d2.Ptr(),0x00FF00); + callback->ConvexDebugTri(mP3.Ptr(), d3.Ptr(), d3.Ptr(),0x00FF00); + + Vector3d np1 = mP1 + mNormal*0.05f; + Vector3d np2 = mP2 + mNormal*0.05f; + Vector3d np3 = mP3 + mNormal*0.05f; + + callback->ConvexDebugTri(mP1.Ptr(), np1.Ptr(), np1.Ptr(), 0xFF00FF ); + callback->ConvexDebugTri(mP2.Ptr(), np2.Ptr(), np2.Ptr(), 0xFF00FF ); + callback->ConvexDebugTri(mP3.Ptr(), np3.Ptr(), np3.Ptr(), 0xFF00FF ); + + callback->ConvexDebugPoint( np1.Ptr(), 0.01F, 0XFF00FF ); + callback->ConvexDebugPoint( np2.Ptr(), 0.01F, 0XFF00FF ); + callback->ConvexDebugPoint( np3.Ptr(), 0.01F, 0XFF00FF ); + +#endif + + + + } + + Vector3d mP1; + Vector3d mP2; + Vector3d mP3; + Vector3d mNear1; + Vector3d mNear2; + Vector3d mNear3; + Vector3d mNormal; + double mPlaneD; + double mConcavity; + double mC1; + double mC2; + double mC3; + unsigned int mI1; + unsigned int mI2; + unsigned int mI3; + int mProcessed; // already been added... +}; + +typedef std::vector< CTri > CTriVector; + +bool featureMatch(CTri &m,const CTriVector &tris,ConvexDecompInterface *callback,const CTriVector &input_mesh) +{ + + bool ret = false; + + double neardot = 0.707f; + + m.mConcavity = 0; + + //gLog->Display("*********** FEATURE MATCH *************\r\n"); + //gLog->Display("Plane: %0.4f,%0.4f,%0.4f %0.4f\r\n", m.mNormal.x, m.mNormal.y, m.mNormal.z, m.mPlaneD ); + //gLog->Display("*********************************************\r\n"); + + CTriVector::const_iterator i; + + CTri nearest; + + double near[3] = { 1e9, 1e9, 1e9 }; + + for (i=tris.begin(); i!=tris.end(); ++i) + { + const CTri &t = (*i); + + + //gLog->Display(" HullPlane: %0.4f,%0.4f,%0.4f %0.4f\r\n", t.mNormal.x, t.mNormal.y, t.mNormal.z, t.mPlaneD ); + + if ( t.samePlane(m) ) + { + //gLog->Display("*** PLANE MATCH!!!\r\n"); + ret = false; + break; + } + + double dot = t.mNormal.Dot(m.mNormal); + + if ( dot > neardot ) + { + + double d1 = t.planeDistance( m.mP1 ); + double d2 = t.planeDistance( m.mP2 ); + double d3 = t.planeDistance( m.mP3 ); + + if ( d1 > 0.001f || d2 > 0.001f || d3 > 0.001f ) // can't be near coplaner! + { + + neardot = dot; + + Vector3d n1,n2,n3; + + t.raySect( m.mP1, m.mNormal, m.mNear1 ); + t.raySect( m.mP2, m.mNormal, m.mNear2 ); + t.raySect( m.mP3, m.mNormal, m.mNear3 ); + + nearest = t; + + ret = true; + } + + } + } + + if ( ret ) + { + if ( 0 ) + { + CTriVector::const_iterator i; + for (i=input_mesh.begin(); i!=input_mesh.end(); ++i) + { + const CTri &c = (*i); + if ( c.mI1 != m.mI1 && c.mI2 != m.mI2 && c.mI3 != m.mI3 ) + { + c.clip( m.mP1, m.mNear1 ); + c.clip( m.mP2, m.mNear2 ); + c.clip( m.mP3, m.mNear3 ); + } + } + } + + //gLog->Display("*********************************************\r\n"); + //gLog->Display(" HullPlaneNearest: %0.4f,%0.4f,%0.4f %0.4f\r\n", nearest.mNormal.x, nearest.mNormal.y, nearest.mNormal.z, nearest.mPlaneD ); + + m.mC1 = m.mP1.Distance( m.mNear1 ); + m.mC2 = m.mP2.Distance( m.mNear2 ); + m.mC3 = m.mP3.Distance( m.mNear3 ); + + m.mConcavity = m.mC1; + + if ( m.mC2 > m.mConcavity ) m.mConcavity = m.mC2; + if ( m.mC3 > m.mConcavity ) m.mConcavity = m.mC3; + + #if 0 + callback->ConvexDebugTri( m.mP1.Ptr(), m.mP2.Ptr(), m.mP3.Ptr(), 0x00FF00 ); + callback->ConvexDebugTri( m.mNear1.Ptr(), m.mNear2.Ptr(), m.mNear3.Ptr(), 0xFF0000 ); + + callback->ConvexDebugTri( m.mP1.Ptr(), m.mP1.Ptr(), m.mNear1.Ptr(), 0xFFFF00 ); + callback->ConvexDebugTri( m.mP2.Ptr(), m.mP2.Ptr(), m.mNear2.Ptr(), 0xFFFF00 ); + callback->ConvexDebugTri( m.mP3.Ptr(), m.mP3.Ptr(), m.mNear3.Ptr(), 0xFFFF00 ); + #endif + + } + else + { + //gLog->Display("No match\r\n"); + } + + //gLog->Display("*********************************************\r\n"); + return ret; +} + +bool isFeatureTri(CTri &t,CTriVector &flist,double fc,ConvexDecompInterface *callback,unsigned int color) +{ + bool ret = false; + + if ( t.mProcessed == 0 ) // if not already processed + { + + double c = t.mConcavity / fc; // must be within 80% of the concavity of the parent. + + if ( c > 0.85f ) + { + // see if this triangle is a 'feature' triangle. Meaning it shares an + // edge with any existing feature triangle and is within roughly the same + // concavity of the parent. + if ( flist.size() ) + { + CTriVector::iterator i; + for (i=flist.begin(); i!=flist.end(); ++i) + { + CTri &ftri = (*i); + if ( ftri.sharesEdge(t) ) + { + t.mProcessed = 2; // it is now part of a feature. + flist.push_back(t); // add it to the feature list. +// callback->ConvexDebugTri( t.mP1.Ptr(), t.mP2.Ptr(),t.mP3.Ptr(), color ); + ret = true; + break; + } + } + } + else + { + t.mProcessed = 2; + flist.push_back(t); // add it to the feature list. +// callback->ConvexDebugTri( t.mP1.Ptr(), t.mP2.Ptr(),t.mP3.Ptr(), color ); + ret = true; + } + } + else + { + t.mProcessed = 1; // eliminated for this feature, but might be valid for the next one.. + } + + } + return ret; +} + +double computeConcavity(unsigned int vcount, + const double *vertices, + unsigned int tcount, + const unsigned int *indices, + ConvexDecompInterface *callback, + double *plane, // plane equation to split on + double &volume) +{ + + + double cret = 0; + volume = 1; + + HullResult result; + HullLibrary hl; + HullDesc desc; + + desc.mMaxVertices = 256; + desc.SetHullFlag(QF_TRIANGLES); + + + desc.mVcount = vcount; + desc.mVertices = vertices; + desc.mVertexStride = sizeof(double)*3; + + HullError ret = hl.CreateConvexHull(desc,result); + + if ( ret == QE_OK ) + { + + double bmin[3]; + double bmax[3]; + + double diagonal = getBoundingRegion( result.mNumOutputVertices, result.mOutputVertices, sizeof(double)*3, bmin, bmax ); + + double dx = bmax[0] - bmin[0]; + double dy = bmax[1] - bmin[1]; + double dz = bmax[2] - bmin[2]; + + Vector3d center; + + center.x = bmin[0] + dx*0.5f; + center.y = bmin[1] + dy*0.5f; + center.z = bmin[2] + dz*0.5f; + + double boundVolume = dx*dy*dz; + + volume = computeMeshVolume2( result.mOutputVertices, result.mNumFaces, result.mIndices ); + +#if 1 + // ok..now..for each triangle on the original mesh.. + // we extrude the points to the nearest point on the hull. + const unsigned int *source = result.mIndices; + + CTriVector tris; + + for (unsigned int i=0; iConvexDebugTri(p1,p2,p3,0xFFFFFF); + + CTri t(p1,p2,p3,i1,i2,i3); // + tris.push_back(t); + } + + // we have not pre-computed the plane equation for each triangle in the convex hull.. + + double totalVolume = 0; + + CTriVector ftris; // 'feature' triangles. + + const unsigned int *src = indices; + + + double maxc=0; + + + if ( 1 ) + { + CTriVector input_mesh; + if ( 1 ) + { + const unsigned int *src = indices; + for (unsigned int i=0; i CONCAVE_THRESH ) + { + + if ( t.mConcavity > maxc ) + { + maxc = t.mConcavity; + maxctri = t; + } + + double v = t.getVolume(0); + totalVolume+=v; + ftris.push_back(t); + } + + } + } + + if ( ftris.size() && 0 ) + { + + // ok..now we extract the triangles which form the maximum concavity. + CTriVector major_feature; + double maxarea = 0; + + while ( maxc > CONCAVE_THRESH ) + { + + unsigned int color = getDebugColor(); // + + CTriVector flist; + + bool found; + + double totalarea = 0; + + do + { + found = false; + CTriVector::iterator i; + for (i=ftris.begin(); i!=ftris.end(); ++i) + { + CTri &t = (*i); + if ( isFeatureTri(t,flist,maxc,callback,color) ) + { + found = true; + totalarea+=t.area(); + } + } + } while ( found ); + + + if ( totalarea > maxarea ) + { + major_feature = flist; + maxarea = totalarea; + } + + maxc = 0; + + for (unsigned int i=0; i maxc ) + { + maxc = t.mConcavity; + } + } + } + } + + unsigned int color = getDebugColor(); + + WpointVector list; + for (unsigned int i=0; i +#include +#include +#include +#include + +#include "fitsphere.h" + + +/*! +** +** Copyright (c) 2007 by John W. Ratcliff mailto:jratcliff@infiniplex.net +** +** Portions of this source has been released with the PhysXViewer application, as well as +** Rocket, CreateDynamics, ODF, and as a number of sample code snippets. +** +** If you find this code useful or you are feeling particularily generous I would +** ask that you please go to http://www.amillionpixels.us and make a donation +** to Troy DeMolay. +** +** DeMolay is a youth group for young men between the ages of 12 and 21. +** It teaches strong moral principles, as well as leadership skills and +** public speaking. The donations page uses the 'pay for pixels' paradigm +** where, in this case, a pixel is only a single penny. Donations can be +** made for as small as $4 or as high as a $100 block. Each person who donates +** will get a link to their own site as well as acknowledgement on the +** donations blog located here http://www.amillionpixels.blogspot.com/ +** +** If you wish to contact me you can use the following methods: +** +** Skype Phone: 636-486-4040 (let it ring a long time while it goes through switches) +** Skype ID: jratcliff63367 +** Yahoo: jratcliff63367 +** AOL: jratcliff1961 +** email: jratcliff@infiniplex.net +** Personal website: http://jratcliffscarab.blogspot.com +** Coding Website: http://codesuppository.blogspot.com +** FundRaising Blog: http://amillionpixels.blogspot.com +** Fundraising site: http://www.amillionpixels.us +** New Temple Site: http://newtemple.blogspot.com +** +** +** The MIT license: +** +** Permission is hereby granted, free of charge, to any person obtaining a copy +** of this software and associated documentation files (the "Software"), to deal +** in the Software without restriction, including without limitation the rights +** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +** copies of the Software, and to permit persons to whom the Software is furnished +** to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in all +** copies or substantial portions of the Software. + +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +** WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +** CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + + + +/* +An Efficient Bounding Sphere +by Jack Ritter +from "Graphics Gems", Academic Press, 1990 +*/ + +/* Routine to calculate tight bounding sphere over */ +/* a set of points in 3D */ +/* This contains the routine find_bounding_sphere(), */ +/* the struct definition, and the globals used for parameters. */ +/* The abs() of all coordinates must be < BIGNUMBER */ +/* Code written by Jack Ritter and Lyle Rains. */ + +namespace ConvexDecomposition +{ + +#define BIGNUMBER 100000000.0 /* hundred million */ + +static inline void Set(double *n,double x,double y,double z) +{ + n[0] = x; + n[1] = y; + n[2] = z; +}; + +static inline void Copy(double *dest,const double *source) +{ + dest[0] = source[0]; + dest[1] = source[1]; + dest[2] = source[2]; +} + +double computeBoundingSphere(unsigned int vcount,const double *points,double *center) +{ + + double mRadius; + double mRadius2; + + double xmin[3]; + double xmax[3]; + double ymin[3]; + double ymax[3]; + double zmin[3]; + double zmax[3]; + double dia1[3]; + double dia2[3]; + + /* FIRST PASS: find 6 minima/maxima points */ + Set(xmin,BIGNUMBER,BIGNUMBER,BIGNUMBER); + Set(xmax,-BIGNUMBER,-BIGNUMBER,-BIGNUMBER); + Set(ymin,BIGNUMBER,BIGNUMBER,BIGNUMBER); + Set(ymax,-BIGNUMBER,-BIGNUMBER,-BIGNUMBER); + Set(zmin,BIGNUMBER,BIGNUMBER,BIGNUMBER); + Set(zmax,-BIGNUMBER,-BIGNUMBER,-BIGNUMBER); + + for (unsigned i=0; ixmax[0]) + Copy(xmax,caller_p); + if (caller_p[1]ymax[1]) + Copy(ymax,caller_p); + if (caller_p[2]zmax[2]) + Copy(zmax,caller_p); + } + + /* Set xspan = distance between the 2 points xmin & xmax (squared) */ + double dx = xmax[0] - xmin[0]; + double dy = xmax[1] - xmin[1]; + double dz = xmax[2] - xmin[2]; + double xspan = dx*dx + dy*dy + dz*dz; + + /* Same for y & z spans */ + dx = ymax[0] - ymin[0]; + dy = ymax[1] - ymin[1]; + dz = ymax[2] - ymin[2]; + double yspan = dx*dx + dy*dy + dz*dz; + + dx = zmax[0] - zmin[0]; + dy = zmax[1] - zmin[1]; + dz = zmax[2] - zmin[2]; + double zspan = dx*dx + dy*dy + dz*dz; + + /* Set points dia1 & dia2 to the maximally separated pair */ + Copy(dia1,xmin); + Copy(dia2,xmax); /* assume xspan biggest */ + double maxspan = xspan; + + if (yspan>maxspan) + { + maxspan = yspan; + Copy(dia1,ymin); + Copy(dia2,ymax); + } + + if (zspan>maxspan) + { + Copy(dia1,zmin); + Copy(dia2,zmax); + } + + + /* dia1,dia2 is a diameter of initial sphere */ + /* calc initial center */ + center[0] = (dia1[0]+dia2[0])*0.5f; + center[1] = (dia1[1]+dia2[1])*0.5f; + center[2] = (dia1[2]+dia2[2])*0.5f; + + /* calculate initial radius**2 and radius */ + + dx = dia2[0]-center[0]; /* x component of radius vector */ + dy = dia2[1]-center[1]; /* y component of radius vector */ + dz = dia2[2]-center[2]; /* z component of radius vector */ + + mRadius2 = dx*dx + dy*dy + dz*dz; + mRadius = double(sqrt(mRadius2)); + + /* SECOND PASS: increment current sphere */ + if ( 1 ) + { + for (unsigned i=0; i mRadius2) /* do r**2 test first */ + { /* this point is outside of current sphere */ + double old_to_p = double(sqrt(old_to_p_sq)); + /* calc radius of new sphere */ + mRadius = (mRadius + old_to_p) * 0.5f; + mRadius2 = mRadius*mRadius; /* for next r**2 compare */ + double old_to_new = old_to_p - mRadius; + + /* calc center of new sphere */ + + double recip = 1.0f /old_to_p; + + double cx = (mRadius*center[0] + old_to_new*caller_p[0]) * recip; + double cy = (mRadius*center[1] + old_to_new*caller_p[1]) * recip; + double cz = (mRadius*center[2] + old_to_new*caller_p[2]) * recip; + + Set(center,cx,cy,cz); + } + } + } + + return mRadius; +} + +static inline void Set(float *n,float x,float y,float z) +{ + n[0] = x; + n[1] = y; + n[2] = z; +}; + +static inline void Copy(float *dest,const float *source) +{ + dest[0] = source[0]; + dest[1] = source[1]; + dest[2] = source[2]; +} + + + +float computeBoundingSphere(unsigned int vcount,const float *points,float *center) +{ + float mRadius; + float mRadius2; + + float xmin[3]; + float xmax[3]; + float ymin[3]; + float ymax[3]; + float zmin[3]; + float zmax[3]; + float dia1[3]; + float dia2[3]; + + /* FIRST PASS: find 6 minima/maxima points */ + Set(xmin,BIGNUMBER,BIGNUMBER,BIGNUMBER); + Set(xmax,-BIGNUMBER,-BIGNUMBER,-BIGNUMBER); + Set(ymin,BIGNUMBER,BIGNUMBER,BIGNUMBER); + Set(ymax,-BIGNUMBER,-BIGNUMBER,-BIGNUMBER); + Set(zmin,BIGNUMBER,BIGNUMBER,BIGNUMBER); + Set(zmax,-BIGNUMBER,-BIGNUMBER,-BIGNUMBER); + + for (unsigned i=0; ixmax[0]) + Copy(xmax,caller_p); + if (caller_p[1]ymax[1]) + Copy(ymax,caller_p); + if (caller_p[2]zmax[2]) + Copy(zmax,caller_p); + } + + /* Set xspan = distance between the 2 points xmin & xmax (squared) */ + float dx = xmax[0] - xmin[0]; + float dy = xmax[1] - xmin[1]; + float dz = xmax[2] - xmin[2]; + float xspan = dx*dx + dy*dy + dz*dz; + + /* Same for y & z spans */ + dx = ymax[0] - ymin[0]; + dy = ymax[1] - ymin[1]; + dz = ymax[2] - ymin[2]; + float yspan = dx*dx + dy*dy + dz*dz; + + dx = zmax[0] - zmin[0]; + dy = zmax[1] - zmin[1]; + dz = zmax[2] - zmin[2]; + float zspan = dx*dx + dy*dy + dz*dz; + + /* Set points dia1 & dia2 to the maximally separated pair */ + Copy(dia1,xmin); + Copy(dia2,xmax); /* assume xspan biggest */ + float maxspan = xspan; + + if (yspan>maxspan) + { + maxspan = yspan; + Copy(dia1,ymin); + Copy(dia2,ymax); + } + + if (zspan>maxspan) + { + Copy(dia1,zmin); + Copy(dia2,zmax); + } + + + /* dia1,dia2 is a diameter of initial sphere */ + /* calc initial center */ + center[0] = (dia1[0]+dia2[0])*0.5f; + center[1] = (dia1[1]+dia2[1])*0.5f; + center[2] = (dia1[2]+dia2[2])*0.5f; + + /* calculate initial radius**2 and radius */ + + dx = dia2[0]-center[0]; /* x component of radius vector */ + dy = dia2[1]-center[1]; /* y component of radius vector */ + dz = dia2[2]-center[2]; /* z component of radius vector */ + + mRadius2 = dx*dx + dy*dy + dz*dz; + mRadius = float(sqrt(mRadius2)); + + /* SECOND PASS: increment current sphere */ + if ( 1 ) + { + for (unsigned i=0; i mRadius2) /* do r**2 test first */ + { /* this point is outside of current sphere */ + float old_to_p = float(sqrt(old_to_p_sq)); + /* calc radius of new sphere */ + mRadius = (mRadius + old_to_p) * 0.5f; + mRadius2 = mRadius*mRadius; /* for next r**2 compare */ + float old_to_new = old_to_p - mRadius; + + /* calc center of new sphere */ + + float recip = 1.0f /old_to_p; + + float cx = (mRadius*center[0] + old_to_new*caller_p[0]) * recip; + float cy = (mRadius*center[1] + old_to_new*caller_p[1]) * recip; + float cz = (mRadius*center[2] + old_to_new*caller_p[2]) * recip; + + Set(center,cx,cy,cz); + } + } + } + + return mRadius; +} + + +double computeSphereVolume(double r) +{ + return (4.0f*3.141592654f*r*r*r)/3.0f; // 4/3 PI R cubed +} + +}; diff --git a/convex_decomposition/ConvexDecomposition/ConvexDecomposition/fitsphere.h b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/fitsphere.h new file mode 100644 index 0000000..200310f --- /dev/null +++ b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/fitsphere.h @@ -0,0 +1,70 @@ +#ifndef FIT_SPHERE_H + +#define FIT_SPHERE_H + +/*! +** +** Copyright (c) 2007 by John W. Ratcliff mailto:jratcliff@infiniplex.net +** +** Portions of this source has been released with the PhysXViewer application, as well as +** Rocket, CreateDynamics, ODF, and as a number of sample code snippets. +** +** If you find this code useful or you are feeling particularily generous I would +** ask that you please go to http://www.amillionpixels.us and make a donation +** to Troy DeMolay. +** +** DeMolay is a youth group for young men between the ages of 12 and 21. +** It teaches strong moral principles, as well as leadership skills and +** public speaking. The donations page uses the 'pay for pixels' paradigm +** where, in this case, a pixel is only a single penny. Donations can be +** made for as small as $4 or as high as a $100 block. Each person who donates +** will get a link to their own site as well as acknowledgement on the +** donations blog located here http://www.amillionpixels.blogspot.com/ +** +** If you wish to contact me you can use the following methods: +** +** Skype Phone: 636-486-4040 (let it ring a long time while it goes through switches) +** Skype ID: jratcliff63367 +** Yahoo: jratcliff63367 +** AOL: jratcliff1961 +** email: jratcliff@infiniplex.net +** Personal website: http://jratcliffscarab.blogspot.com +** Coding Website: http://codesuppository.blogspot.com +** FundRaising Blog: http://amillionpixels.blogspot.com +** Fundraising site: http://www.amillionpixels.us +** New Temple Site: http://newtemple.blogspot.com +** +** +** The MIT license: +** +** Permission is hereby granted, free of charge, to any person obtaining a copy +** of this software and associated documentation files (the "Software"), to deal +** in the Software without restriction, including without limitation the rights +** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +** copies of the Software, and to permit persons to whom the Software is furnished +** to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in all +** copies or substantial portions of the Software. + +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +** WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +** CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + +namespace ConvexDecomposition +{ + +double computeBoundingSphere(unsigned int vcount,const double *points,double *center); +float computeBoundingSphere(unsigned int vcount,const float *points,float *center); + +double computeSphereVolume(double r); + +}; + +#endif diff --git a/convex_decomposition/ConvexDecomposition/ConvexDecomposition/float_math.cpp b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/float_math.cpp new file mode 100644 index 0000000..8c106fe --- /dev/null +++ b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/float_math.cpp @@ -0,0 +1,463 @@ +#include +#include +#include +#include +#include + +#include "float_math.h" + +/*! +** +** Copyright (c) 2007 by John W. Ratcliff mailto:jratcliff@infiniplex.net +** +** Portions of this source has been released with the PhysXViewer application, as well as +** Rocket, CreateDynamics, ODF, and as a number of sample code snippets. +** +** If you find this code useful or you are feeling particularily generous I would +** ask that you please go to http://www.amillionpixels.us and make a donation +** to Troy DeMolay. +** +** DeMolay is a youth group for young men between the ages of 12 and 21. +** It teaches strong moral principles, as well as leadership skills and +** public speaking. The donations page uses the 'pay for pixels' paradigm +** where, in this case, a pixel is only a single penny. Donations can be +** made for as small as $4 or as high as a $100 block. Each person who donates +** will get a link to their own site as well as acknowledgement on the +** donations blog located here http://www.amillionpixels.blogspot.com/ +** +** If you wish to contact me you can use the following methods: +** +** Skype Phone: 636-486-4040 (let it ring a long time while it goes through switches) +** Skype ID: jratcliff63367 +** Yahoo: jratcliff63367 +** AOL: jratcliff1961 +** email: jratcliff@infiniplex.net +** Personal website: http://jratcliffscarab.blogspot.com +** Coding Website: http://codesuppository.blogspot.com +** FundRaising Blog: http://amillionpixels.blogspot.com +** Fundraising site: http://www.amillionpixels.us +** New Temple Site: http://newtemple.blogspot.com +** +** +** The MIT license: +** +** Permission is hereby granted, free of charge, to any person obtaining a copy +** of this software and associated documentation files (the "Software"), to deal +** in the Software without restriction, including without limitation the rights +** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +** copies of the Software, and to permit persons to whom the Software is furnished +** to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in all +** copies or substantial portions of the Software. + +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +** WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +** CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + + +// a set of routines that let you do common 3d math +// operations without any vector, matrix, or quaternion +// classes or templates. +// +// a vector (or point) is a 'double *' to 3 doubleing point numbers. +// a matrix is a 'double *' to an array of 16 doubleing point numbers representing a 4x4 transformation matrix compatible with D3D or OGL +// a quaternion is a 'double *' to 4 doubles representing a quaternion x,y,z,w +// +// +// +// Please email bug fixes or improvements to John W. Ratcliff at mailto:jratcliff@infiniplex.net +// +// If you find this source code useful donate a couple of bucks to my kid's fund raising website at +// www.amillionpixels.us +// +// More snippets at: www.codesuppository.com +// + +namespace ConvexDecomposition +{ + +void fm_inverseRT(const double *matrix,const double *pos,double *t) // inverse rotate translate the point. +{ + + double _x = pos[0] - matrix[3*4+0]; + double _y = pos[1] - matrix[3*4+1]; + double _z = pos[2] - matrix[3*4+2]; + + // Multiply inverse-translated source vector by inverted rotation transform + + t[0] = (matrix[0*4+0] * _x) + (matrix[0*4+1] * _y) + (matrix[0*4+2] * _z); + t[1] = (matrix[1*4+0] * _x) + (matrix[1*4+1] * _y) + (matrix[1*4+2] * _z); + t[2] = (matrix[2*4+0] * _x) + (matrix[2*4+1] * _y) + (matrix[2*4+2] * _z); + +} + + +void fm_identity(double *matrix) // set 4x4 matrix to identity. +{ + matrix[0*4+0] = 1; + matrix[1*4+1] = 1; + matrix[2*4+2] = 1; + matrix[3*4+3] = 1; + + matrix[1*4+0] = 0; + matrix[2*4+0] = 0; + matrix[3*4+0] = 0; + + matrix[0*4+1] = 0; + matrix[2*4+1] = 0; + matrix[3*4+1] = 0; + + matrix[0*4+2] = 0; + matrix[1*4+2] = 0; + matrix[3*4+2] = 0; + + matrix[0*4+3] = 0; + matrix[1*4+3] = 0; + matrix[2*4+3] = 0; + +} + +void fm_eulerMatrix(double ax,double ay,double az,double *matrix) // convert euler (in radians) to a dest 4x4 matrix (translation set to zero) +{ + double quat[4]; + fm_eulerToQuat(ax,ay,az,quat); + fm_quatToMatrix(quat,matrix); +} + +void fm_getAABB(unsigned int vcount,const double *points,unsigned int pstride,double *bmin,double *bmax) +{ + + const unsigned char *source = (const unsigned char *) points; + + bmin[0] = points[0]; + bmin[1] = points[1]; + bmin[2] = points[2]; + + bmax[0] = points[0]; + bmax[1] = points[1]; + bmax[2] = points[2]; + + + for (unsigned int i=1; i bmax[0] ) bmax[0] = p[0]; + if ( p[1] > bmax[1] ) bmax[1] = p[1]; + if ( p[2] > bmax[2] ) bmax[2] = p[2]; + + } +} + + +void fm_eulerToQuat(double roll,double pitch,double yaw,double *quat) // convert euler angles to quaternion. +{ + roll *= 0.5f; + pitch *= 0.5f; + yaw *= 0.5f; + + double cr = cos(roll); + double cp = cos(pitch); + double cy = cos(yaw); + + double sr = sin(roll); + double sp = sin(pitch); + double sy = sin(yaw); + + double cpcy = cp * cy; + double spsy = sp * sy; + double spcy = sp * cy; + double cpsy = cp * sy; + + quat[0] = ( sr * cpcy - cr * spsy); + quat[1] = ( cr * spcy + sr * cpsy); + quat[2] = ( cr * cpsy - sr * spcy); + quat[3] = cr * cpcy + sr * spsy; +} + +void fm_quatToMatrix(const double *quat,double *matrix) // convert quaterinion rotation to matrix, zeros out the translation component. +{ + + double xx = quat[0]*quat[0]; + double yy = quat[1]*quat[1]; + double zz = quat[2]*quat[2]; + double xy = quat[0]*quat[1]; + double xz = quat[0]*quat[2]; + double yz = quat[1]*quat[2]; + double wx = quat[3]*quat[0]; + double wy = quat[3]*quat[1]; + double wz = quat[3]*quat[2]; + + matrix[0*4+0] = 1 - 2 * ( yy + zz ); + matrix[1*4+0] = 2 * ( xy - wz ); + matrix[2*4+0] = 2 * ( xz + wy ); + + matrix[0*4+1] = 2 * ( xy + wz ); + matrix[1*4+1] = 1 - 2 * ( xx + zz ); + matrix[2*4+1] = 2 * ( yz - wx ); + + matrix[0*4+2] = 2 * ( xz - wy ); + matrix[1*4+2] = 2 * ( yz + wx ); + matrix[2*4+2] = 1 - 2 * ( xx + yy ); + + matrix[3*4+0] = 0.0f; + matrix[3*4+1] = 0.0f; + matrix[3*4+2] = 0.0f; + + matrix[0*4+3] = 0.0f; + matrix[1*4+3] = 0.0f; + matrix[2*4+3] = 0.0f; + + matrix[3*4+3] =(double) 1.0f; + +} + + +void fm_quatRotate(const double *quat,const double *v,double *r) // rotate a vector directly by a quaternion. +{ + double left[4]; + + left[0] = quat[3]*v[0] + quat[1]*v[2] - v[1]*quat[2]; + left[1] = quat[3]*v[1] + quat[2]*v[0] - v[2]*quat[0]; + left[2] = quat[3]*v[2] + quat[0]*v[1] - v[0]*quat[1]; + left[3] = - quat[0]*v[0] - quat[1]*v[1] - quat[2]*v[2]; + + r[0] = (left[3]*-quat[0]) + (quat[3]*left[0]) + (left[1]*-quat[2]) - (-quat[1]*left[2]); + r[1] = (left[3]*-quat[1]) + (quat[3]*left[1]) + (left[2]*-quat[0]) - (-quat[2]*left[0]); + r[2] = (left[3]*-quat[2]) + (quat[3]*left[2]) + (left[0]*-quat[1]) - (-quat[0]*left[1]); + +} + + +void fm_getTranslation(const double *matrix,double *t) +{ + t[0] = matrix[3*4+0]; + t[1] = matrix[3*4+1]; + t[2] = matrix[3*4+2]; +} + +void fm_matrixToQuat(const double *matrix,double *quat) // convert the 3x3 portion of a 4x4 matrix into a quaterion as x,y,z,w +{ + + double tr = matrix[0*4+0] + matrix[1*4+1] + matrix[2*4+2]; + + // check the diagonal + + if (tr > 0.0f ) + { + double s = (double) sqrt ( (double) (tr + 1.0f) ); + quat[3] = s * 0.5f; + s = 0.5f / s; + quat[0] = (matrix[1*4+2] - matrix[2*4+1]) * s; + quat[1] = (matrix[2*4+0] - matrix[0*4+2]) * s; + quat[2] = (matrix[0*4+1] - matrix[1*4+0]) * s; + + } + else + { + // diagonal is negative + int nxt[3] = {1, 2, 0}; + double qa[4]; + + int i = 0; + + if (matrix[1*4+1] > matrix[0*4+0]) i = 1; + if (matrix[2*4+2] > matrix[i*4+i]) i = 2; + + int j = nxt[i]; + int k = nxt[j]; + + double s = sqrt ( ((matrix[i*4+i] - (matrix[j*4+j] + matrix[k*4+k])) + 1.0f) ); + + qa[i] = s * 0.5f; + + if (s != 0.0f ) s = 0.5f / s; + + qa[3] = (matrix[j*4+k] - matrix[k*4+j]) * s; + qa[j] = (matrix[i*4+j] + matrix[j*4+i]) * s; + qa[k] = (matrix[i*4+k] + matrix[k*4+i]) * s; + + quat[0] = qa[0]; + quat[1] = qa[1]; + quat[2] = qa[2]; + quat[3] = qa[3]; + } + + +} + + +double fm_sphereVolume(double radius) // return's the volume of a sphere of this radius (4/3 PI * R cubed ) +{ + return (4.0f / 3.0f ) * FM_PI * radius * radius * radius; +} + + +double fm_cylinderVolume(double radius,double h) +{ + return FM_PI * radius * radius *h; +} + +double fm_capsuleVolume(double radius,double h) +{ + double volume = fm_sphereVolume(radius); // volume of the sphere portion. + double ch = h-radius*2; // this is the cylinder length + if ( ch > 0 ) + { + volume+=fm_cylinderVolume(radius,ch); + } + return volume; +} + +void fm_transform(const double *matrix,const double *v,double *t) // rotate and translate this point +{ + t[0] = (matrix[0*4+0] * v[0]) + (matrix[1*4+0] * v[1]) + (matrix[2*4+0] * v[2]) + matrix[3*4+0]; + t[1] = (matrix[0*4+1] * v[0]) + (matrix[1*4+1] * v[1]) + (matrix[2*4+1] * v[2]) + matrix[3*4+1]; + t[2] = (matrix[0*4+2] * v[0]) + (matrix[1*4+2] * v[1]) + (matrix[2*4+2] * v[2]) + matrix[3*4+2]; +} + +void fm_rotate(const double *matrix,const double *v,double *t) // rotate and translate this point +{ + t[0] = (matrix[0*4+0] * v[0]) + (matrix[1*4+0] * v[1]) + (matrix[2*4+0] * v[2]); + t[1] = (matrix[0*4+1] * v[0]) + (matrix[1*4+1] * v[1]) + (matrix[2*4+1] * v[2]); + t[2] = (matrix[0*4+2] * v[0]) + (matrix[1*4+2] * v[1]) + (matrix[2*4+2] * v[2]); +} + + +double fm_distance(const double *p1,const double *p2) +{ + double dx = p1[0] - p2[0]; + double dy = p1[1] - p2[1]; + double dz = p1[2] - p2[2]; + + return sqrt( dx*dx + dy*dy + dz *dz ); +} + +double fm_distanceSquared(const double *p1,const double *p2) +{ + double dx = p1[0] - p2[0]; + double dy = p1[1] - p2[1]; + double dz = p1[2] - p2[2]; + + return dx*dx + dy*dy + dz *dz; +} + + +double fm_computePlane(const double *A,const double *B,const double *C,double *n) // returns D +{ + double vx = (B[0] - C[0]); + double vy = (B[1] - C[1]); + double vz = (B[2] - C[2]); + + double wx = (A[0] - B[0]); + double wy = (A[1] - B[1]); + double wz = (A[2] - B[2]); + + double vw_x = vy * wz - vz * wy; + double vw_y = vz * wx - vx * wz; + double vw_z = vx * wy - vy * wx; + + double mag = sqrt((vw_x * vw_x) + (vw_y * vw_y) + (vw_z * vw_z)); + + if ( mag < 0.000001f ) + { + mag = 0; + } + else + { + mag = 1.0f/mag; + } + + double x = vw_x * mag; + double y = vw_y * mag; + double z = vw_z * mag; + + + double D = 0.0f - ((x*A[0])+(y*A[1])+(z*A[2])); + + n[0] = x; + n[1] = y; + n[2] = z; + + return D; +} + +double fm_distToPlane(const double *plane,const double *p) // computes the distance of this point from the plane. +{ + return p[0]*plane[0]+p[1]*plane[1]+p[2]*plane[2]+plane[3]; +} + +double fm_dot(const double *p1,const double *p2) +{ + return p1[0]*p2[0]+p1[1]*p2[2]+p1[2]*p2[2]; +} + +void fm_cross(double *cross,const double *a,const double *b) +{ + cross[0] = a[1]*b[2] - a[2]*b[1]; + cross[1] = a[2]*b[0] - a[0]*b[2]; + cross[2] = a[0]*b[1] - a[1]*b[0]; +} + +void fm_computeNormalVector(double *n,const double *p1,const double *p2) +{ + n[0] = p2[0] - p1[0]; + n[1] = p2[1] - p1[1]; + n[2] = p2[2] - p1[2]; + fm_normalize(n); +} + +bool fm_computeWindingOrder(const double *p1,const double *p2,const double *p3) // returns true if the triangle is clockwise. +{ + bool ret = false; + + double v1[3]; + double v2[3]; + + fm_computeNormalVector(v1,p1,p2); // p2-p1 (as vector) and then normalized + fm_computeNormalVector(v2,p1,p3); // p3-p1 (as vector) and then normalized + + double cross[3]; + + fm_cross(cross, v1, v2 ); + double ref[3] = { 1, 0, 0 }; + + double d = fm_dot( cross, ref ); + + + if ( d <= 0 ) + ret = false; + else + ret = true; + + return ret; +} + +void fm_normalize(double *n) // normalize this vector +{ + + double dist = n[0]*n[0] + n[1]*n[1] + n[2]*n[2]; + double mag = 0; + + if ( dist > 0.0000001f ) + mag = 1.0f / sqrt(dist); + + n[0]*=mag; + n[1]*=mag; + n[2]*=mag; + +} + +}; // end of namespace diff --git a/convex_decomposition/ConvexDecomposition/ConvexDecomposition/float_math.h b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/float_math.h new file mode 100644 index 0000000..b819b8d --- /dev/null +++ b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/float_math.h @@ -0,0 +1,112 @@ +#ifndef FLOAT_MATH_H + +#define FLOAT_MATH_H + +namespace ConvexDecomposition +{ + + /*! + ** + ** Copyright (c) 2007 by John W. Ratcliff mailto:jratcliff@infiniplex.net + ** + ** Portions of this source has been released with the PhysXViewer application, as well as + ** Rocket, CreateDynamics, ODF, and as a number of sample code snippets. + ** + ** If you find this code useful or you are feeling particularily generous I would + ** ask that you please go to http://www.amillionpixels.us and make a donation + ** to Troy DeMolay. + ** + ** DeMolay is a youth group for young men between the ages of 12 and 21. + ** It teaches strong moral principles, as well as leadership skills and + ** public speaking. The donations page uses the 'pay for pixels' paradigm + ** where, in this case, a pixel is only a single penny. Donations can be + ** made for as small as $4 or as high as a $100 block. Each person who donates + ** will get a link to their own site as well as acknowledgement on the + ** donations blog located here http://www.amillionpixels.blogspot.com/ + ** + ** If you wish to contact me you can use the following methods: + ** + ** Skype Phone: 636-486-4040 (let it ring a long time while it goes through switches) + ** Skype ID: jratcliff63367 + ** Yahoo: jratcliff63367 + ** AOL: jratcliff1961 + ** email: jratcliff@infiniplex.net + ** Personal website: http://jratcliffscarab.blogspot.com + ** Coding Website: http://codesuppository.blogspot.com + ** FundRaising Blog: http://amillionpixels.blogspot.com + ** Fundraising site: http://www.amillionpixels.us + ** New Temple Site: http://newtemple.blogspot.com + ** + ** + ** The MIT license: + ** + ** Permission is hereby granted, free of charge, to any person obtaining a copy + ** of this software and associated documentation files (the "Software"), to deal + ** in the Software without restriction, including without limitation the rights + ** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + ** copies of the Software, and to permit persons to whom the Software is furnished + ** to do so, subject to the following conditions: + ** + ** The above copyright notice and this permission notice shall be included in all + ** copies or substantial portions of the Software. + + ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + ** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + ** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + ** WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + ** CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + */ + + + +// a set of routines that let you do common 3d math +// operations without any vector, matrix, or quaternion +// classes or templates. +// +// a vector (or point) is a 'double *' to 3 doubleing point numbers. +// a matrix is a 'double *' to an array of 16 doubleing point numbers representing a 4x4 transformation matrix compatible with D3D or OGL +// a quaternion is a 'double *' to 4 doubles representing a quaternion x,y,z,w +// +// +// +// Please email bug fixes or improvements to John W. Ratcliff at mailto:jratcliff@infiniplex.net +// +// If you find this source code useful donate a couple of bucks to my kid's fund raising website at +// www.amillionpixels.us +// +// More snippets at: www.codesuppository.com +// + +const double FM_PI = 3.141592654f; +const double FM_DEG_TO_RAD = ((2.0f * FM_PI) / 360.0f); +const double FM_RAD_TO_DEG = (360.0f / (2.0f * FM_PI)); + +void fm_identity(double *matrix); // set 4x4 matrix to identity. +void fm_inverseRT(const double *matrix,const double *pos,double *t); // inverse rotate translate the point. +void fm_transform(const double *matrix,const double *pos,double *t); // rotate and translate this point. +void fm_rotate(const double *matrix,const double *pos,double *t); // only rotate the point by a 4x4 matrix, don't translate. +void fm_eulerMatrix(double ax,double ay,double az,double *matrix); // convert euler (in radians) to a dest 4x4 matrix (translation set to zero) +void fm_getAABB(unsigned int vcount,const double *points,unsigned int pstride,double *bmin,double *bmax); +void fm_eulerToQuat(double roll,double pitch,double yaw,double *quat); // convert euler angles to quaternion. +void fm_quatToMatrix(const double *quat,double *matrix); // convert quaterinion rotation to matrix, translation set to zero. +void fm_quatRotate(const double *quat,const double *v,double *r); // rotate a vector directly by a quaternion. +void fm_getTranslation(const double *matrix,double *t); +void fm_matrixToQuat(const double *matrix,double *quat); // convert the 3x3 portion of a 4x4 matrix into a quaterion as x,y,z,w +double fm_sphereVolume(double radius); // return's the volume of a sphere of this radius (4/3 PI * R cubed ) +double fm_cylinderVolume(double radius,double h); +double fm_capsuleVolume(double radius,double h); +double fm_distance(const double *p1,const double *p2); +double fm_distanceSquared(const double *p1,const double *p2); +double fm_computePlane(const double *p1,const double *p2,const double *p3,double *n); // return D +double fm_distToPlane(const double *plane,const double *pos); // computes the distance of this point from the plane. +double fm_dot(const double *p1,const double *p2); +void fm_cross(double *cross,const double *a,const double *b); +void fm_computeNormalVector(double *n,const double *p1,const double *p2); // as P2-P1 normalized. +bool fm_computeWindingOrder(const double *p1,const double *p2,const double *p3); // returns true if the triangle is clockwise. +void fm_normalize(double *n); // normalize this vector + +}; // end of nsamepace + +#endif diff --git a/convex_decomposition/ConvexDecomposition/ConvexDecomposition/meshvolume.cpp b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/meshvolume.cpp new file mode 100644 index 0000000..453dada --- /dev/null +++ b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/meshvolume.cpp @@ -0,0 +1,251 @@ +#include "meshvolume.h" + +/*! +** +** Copyright (c) 2007 by John W. Ratcliff mailto:jratcliff@infiniplex.net +** +** Portions of this source has been released with the PhysXViewer application, as well as +** Rocket, CreateDynamics, ODF, and as a number of sample code snippets. +** +** If you find this code useful or you are feeling particularily generous I would +** ask that you please go to http://www.amillionpixels.us and make a donation +** to Troy DeMolay. +** +** DeMolay is a youth group for young men between the ages of 12 and 21. +** It teaches strong moral principles, as well as leadership skills and +** public speaking. The donations page uses the 'pay for pixels' paradigm +** where, in this case, a pixel is only a single penny. Donations can be +** made for as small as $4 or as high as a $100 block. Each person who donates +** will get a link to their own site as well as acknowledgement on the +** donations blog located here http://www.amillionpixels.blogspot.com/ +** +** If you wish to contact me you can use the following methods: +** +** Skype Phone: 636-486-4040 (let it ring a long time while it goes through switches) +** Skype ID: jratcliff63367 +** Yahoo: jratcliff63367 +** AOL: jratcliff1961 +** email: jratcliff@infiniplex.net +** Personal website: http://jratcliffscarab.blogspot.com +** Coding Website: http://codesuppository.blogspot.com +** FundRaising Blog: http://amillionpixels.blogspot.com +** Fundraising site: http://www.amillionpixels.us +** New Temple Site: http://newtemple.blogspot.com +** +** +** The MIT license: +** +** Permission is hereby granted, free of charge, to any person obtaining a copy +** of this software and associated documentation files (the "Software"), to deal +** in the Software without restriction, including without limitation the rights +** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +** copies of the Software, and to permit persons to whom the Software is furnished +** to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in all +** copies or substantial portions of the Software. + +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +** WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +** CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + +namespace ConvexDecomposition +{ + + +inline double det(const double *p1,const double *p2,const double *p3) +{ + return p1[0]*p2[1]*p3[2] + p2[0]*p3[1]*p1[2] + p3[0]*p1[1]*p2[2] -p1[0]*p3[1]*p2[2] - p2[0]*p1[1]*p3[2] - p3[0]*p2[1]*p1[2]; +} + +double computeMeshVolume(const double *vertices,unsigned int tcount,const unsigned int *indices) +{ + double volume = 0; + + const double *p0 = vertices; + for (unsigned int i=0; i +#include +#include +#include + +/*! +** +** Copyright (c) 2007 by John W. Ratcliff mailto:jratcliff@infiniplex.net +** +** Portions of this source has been released with the PhysXViewer application, as well as +** Rocket, CreateDynamics, ODF, and as a number of sample code snippets. +** +** If you find this code useful or you are feeling particularily generous I would +** ask that you please go to http://www.amillionpixels.us and make a donation +** to Troy DeMolay. +** +** DeMolay is a youth group for young men between the ages of 12 and 21. +** It teaches strong moral principles, as well as leadership skills and +** public speaking. The donations page uses the 'pay for pixels' paradigm +** where, in this case, a pixel is only a single penny. Donations can be +** made for as small as $4 or as high as a $100 block. Each person who donates +** will get a link to their own site as well as acknowledgement on the +** donations blog located here http://www.amillionpixels.blogspot.com/ +** +** If you wish to contact me you can use the following methods: +** +** Skype Phone: 636-486-4040 (let it ring a long time while it goes through switches) +** Skype ID: jratcliff63367 +** Yahoo: jratcliff63367 +** AOL: jratcliff1961 +** email: jratcliff@infiniplex.net +** Personal website: http://jratcliffscarab.blogspot.com +** Coding Website: http://codesuppository.blogspot.com +** FundRaising Blog: http://amillionpixels.blogspot.com +** Fundraising site: http://www.amillionpixels.us +** New Temple Site: http://newtemple.blogspot.com +** +** +** The MIT license: +** +** Permission is hereby granted, free of charge, to any person obtaining a copy +** of this software and associated documentation files (the "Software"), to deal +** in the Software without restriction, including without limitation the rights +** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +** copies of the Software, and to permit persons to whom the Software is furnished +** to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in all +** copies or substantial portions of the Software. + +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +** WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +** CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + + +#include "planetri.h" + +namespace ConvexDecomposition +{ + + +static inline double DistToPt(const double *p,const double *plane) +{ + double x = p[0]; + double y = p[1]; + double z = p[2]; + double d = x*plane[0] + y*plane[1] + z*plane[2] + plane[3]; + return d; +} + + +static PlaneTriResult getSidePlane(const double *p,const double *plane,double epsilon) +{ + + double d = DistToPt(p,plane); + + if ( (d+epsilon) > 0 ) + return PTR_FRONT; // it is 'in front' within the provided epsilon value. + + return PTR_BACK; +} + +static void add(const double *p,double *dest,unsigned int tstride,unsigned int &pcount) +{ + char *d = (char *) dest; + d = d + pcount*tstride; + dest = (double *) d; + dest[0] = p[0]; + dest[1] = p[1]; + dest[2] = p[2]; + pcount++; + assert( pcount <= 4 ); +} + + +// assumes that the points are on opposite sides of the plane! +static void intersect(const double *p1,const double *p2,double *split,const double *plane) +{ + + double dp1 = DistToPt(p1,plane); + double dp2 = DistToPt(p2,plane); + + double dir[3]; + + dir[0] = p2[0] - p1[0]; + dir[1] = p2[1] - p1[1]; + dir[2] = p2[2] - p1[2]; + + double dot1 = dir[0]*plane[0] + dir[1]*plane[1] + dir[2]*plane[2]; + double dot2 = dp1 - plane[3]; + + double t = -(plane[3] + dot2 ) / dot1; + + split[0] = (dir[0]*t)+p1[0]; + split[1] = (dir[1]*t)+p1[1]; + split[2] = (dir[2]*t)+p1[2]; + +} + +#define MAXPTS 256 + +class point +{ +public: + + void set(const double *p) + { + x = p[0]; + y = p[1]; + z = p[2]; + } + + double x; + double y; + double z; +}; +class polygon +{ +public: + polygon(void) + { + mVcount = 0; + } + + polygon(const double *p1,const double *p2,const double *p3) + { + mVcount = 3; + mVertices[0].set(p1); + mVertices[1].set(p2); + mVertices[2].set(p3); + } + + + int NumVertices(void) const { return mVcount; }; + + const point& Vertex(int index) + { + if ( index < 0 ) index+=mVcount; + return mVertices[index]; + }; + + + void set(const point *pts,int count) + { + for (int i=0; iNumVertices (); + int out_c = 0, in_c = 0; + point ptA, ptB,outpts[MAXPTS],inpts[MAXPTS]; + double sideA, sideB; + ptA = poly->Vertex (count - 1); + sideA = part->Classify_Point (ptA); + for (int i = -1; ++i < count;) + { + ptB = poly->Vertex(i); + sideB = part->Classify_Point(ptB); + if (sideB > 0) + { + if (sideA < 0) + { + point v; + intersect(&ptB.x, &ptA.x, &v.x, &part->normal.x ); + outpts[out_c++] = inpts[in_c++] = v; + } + outpts[out_c++] = ptB; + } + else if (sideB < 0) + { + if (sideA > 0) + { + point v; + intersect(&ptB.x, &ptA.x, &v.x, &part->normal.x ); + outpts[out_c++] = inpts[in_c++] = v; + } + inpts[in_c++] = ptB; + } + else + outpts[out_c++] = inpts[in_c++] = ptB; + ptA = ptB; + sideA = sideB; + } + + front.set(&outpts[0], out_c); + back.set(&inpts[0], in_c); +} + +PlaneTriResult planeTriIntersection(const double *_plane, // the plane equation in Ax+By+Cz+D format + const double *triangle, // the source triangle. + unsigned int tstride, // stride in bytes of the input and output *vertices* + double epsilon, // the co-planer epsilon value. + double *front, // the triangle in front of the + unsigned int &fcount, // number of vertices in the 'front' triangle + double *back, // the triangle in back of the plane + unsigned int &bcount) // the number of vertices in the 'back' triangle. +{ + + fcount = 0; + bcount = 0; + + const char *tsource = (const char *) triangle; + + // get the three vertices of the triangle. + const double *p1 = (const double *) (tsource); + const double *p2 = (const double *) (tsource+tstride); + const double *p3 = (const double *) (tsource+tstride*2); + + + PlaneTriResult r1 = getSidePlane(p1,_plane,epsilon); // compute the side of the plane each vertex is on + PlaneTriResult r2 = getSidePlane(p2,_plane,epsilon); + PlaneTriResult r3 = getSidePlane(p3,_plane,epsilon); + + if ( r1 == r2 && r1 == r3 ) // if all three vertices are on the same side of the plane. + { + if ( r1 == PTR_FRONT ) // if all three are in front of the plane, then copy to the 'front' output triangle. + { + add(p1,front,tstride,fcount); + add(p2,front,tstride,fcount); + add(p3,front,tstride,fcount); + } + else + { + add(p1,back,tstride,bcount); // if all three are in 'back' then copy to the 'back' output triangle. + add(p2,back,tstride,bcount); + add(p3,back,tstride,bcount); + } + return r1; // if all three points are on the same side of the plane return result + } + + + polygon pi(p1,p2,p3); + polygon pfront,pback; + + plane part(_plane); + Split_Polygon(&pi,&part,pfront,pback); + + for (int i=0; i +#include +#include +#include +#include + +/*! +** +** Copyright (c) 2007 by John W. Ratcliff mailto:jratcliff@infiniplex.net +** +** Portions of this source has been released with the PhysXViewer application, as well as +** Rocket, CreateDynamics, ODF, and as a number of sample code snippets. +** +** If you find this code useful or you are feeling particularily generous I would +** ask that you please go to http://www.amillionpixels.us and make a donation +** to Troy DeMolay. +** +** DeMolay is a youth group for young men between the ages of 12 and 21. +** It teaches strong moral principles, as well as leadership skills and +** public speaking. The donations page uses the 'pay for pixels' paradigm +** where, in this case, a pixel is only a single penny. Donations can be +** made for as small as $4 or as high as a $100 block. Each person who donates +** will get a link to their own site as well as acknowledgement on the +** donations blog located here http://www.amillionpixels.blogspot.com/ +** +** If you wish to contact me you can use the following methods: +** +** Skype Phone: 636-486-4040 (let it ring a long time while it goes through switches) +** Skype ID: jratcliff63367 +** Yahoo: jratcliff63367 +** AOL: jratcliff1961 +** email: jratcliff@infiniplex.net +** Personal website: http://jratcliffscarab.blogspot.com +** Coding Website: http://codesuppository.blogspot.com +** FundRaising Blog: http://amillionpixels.blogspot.com +** Fundraising site: http://www.amillionpixels.us +** New Temple Site: http://newtemple.blogspot.com +** +** +** The MIT license: +** +** Permission is hereby granted, free of charge, to any person obtaining a copy +** of this software and associated documentation files (the "Software"), to deal +** in the Software without restriction, including without limitation the rights +** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +** copies of the Software, and to permit persons to whom the Software is furnished +** to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in all +** copies or substantial portions of the Software. + +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +** WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +** CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + + +#include "raytri.h" + +namespace ConvexDecomposition +{ + + +/* a = b - c */ +#define vector(a,b,c) \ + (a)[0] = (b)[0] - (c)[0]; \ + (a)[1] = (b)[1] - (c)[1]; \ + (a)[2] = (b)[2] - (c)[2]; + + + +#define innerProduct(v,q) \ + ((v)[0] * (q)[0] + \ + (v)[1] * (q)[1] + \ + (v)[2] * (q)[2]) + +#define crossProduct(a,b,c) \ + (a)[0] = (b)[1] * (c)[2] - (c)[1] * (b)[2]; \ + (a)[1] = (b)[2] * (c)[0] - (c)[2] * (b)[0]; \ + (a)[2] = (b)[0] * (c)[1] - (c)[0] * (b)[1]; + +bool rayIntersectsTriangle(const double *p,const double *d,const double *v0,const double *v1,const double *v2,double &t) +{ + + double e1[3],e2[3],h[3],s[3],q[3]; + double a,f,u,v; + + vector(e1,v1,v0); + vector(e2,v2,v0); + crossProduct(h,d,e2); + a = innerProduct(e1,h); + + if (a > -0.00001 && a < 0.00001) + return(false); + + f = 1/a; + vector(s,p,v0); + u = f * (innerProduct(s,h)); + + if (u < 0.0 || u > 1.0) + return(false); + + crossProduct(q,s,e1); + v = f * innerProduct(d,q); + if (v < 0.0 || u + v > 1.0) + return(false); + // at this stage we can compute t to find out where + // the intersection point is on the line + t = f * innerProduct(e2,q); + if (t > 0) // ray intersection + return(true); + else // this means that there is a line intersection + // but not a ray intersection + return (false); +} + + +bool lineIntersectsTriangle(const double *rayStart,const double *rayEnd,const double *p1,const double *p2,const double *p3,double *sect) +{ + double dir[3]; + + dir[0] = rayEnd[0] - rayStart[0]; + dir[1] = rayEnd[1] - rayStart[1]; + dir[2] = rayEnd[2] - rayStart[2]; + + double d = sqrt(dir[0]*dir[0] + dir[1]*dir[1] + dir[2]*dir[2]); + double r = 1.0f / d; + + dir[0]*=r; + dir[1]*=r; + dir[2]*=r; + + + double t; + + bool ret = rayIntersectsTriangle(rayStart, dir, p1, p2, p3, t ); + + if ( ret ) + { + if ( t > d ) + { + sect[0] = rayStart[0] + dir[0]*t; + sect[1] = rayStart[1] + dir[1]*t; + sect[2] = rayStart[2] + dir[2]*t; + } + else + { + ret = false; + } + } + + return ret; +} + +}; // end of namespace diff --git a/convex_decomposition/ConvexDecomposition/ConvexDecomposition/raytri.h b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/raytri.h new file mode 100644 index 0000000..647a658 --- /dev/null +++ b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/raytri.h @@ -0,0 +1,69 @@ +#ifndef RAY_TRI_H + +#define RAY_TRI_H + +/*! +** +** Copyright (c) 2007 by John W. Ratcliff mailto:jratcliff@infiniplex.net +** +** Portions of this source has been released with the PhysXViewer application, as well as +** Rocket, CreateDynamics, ODF, and as a number of sample code snippets. +** +** If you find this code useful or you are feeling particularily generous I would +** ask that you please go to http://www.amillionpixels.us and make a donation +** to Troy DeMolay. +** +** DeMolay is a youth group for young men between the ages of 12 and 21. +** It teaches strong moral principles, as well as leadership skills and +** public speaking. The donations page uses the 'pay for pixels' paradigm +** where, in this case, a pixel is only a single penny. Donations can be +** made for as small as $4 or as high as a $100 block. Each person who donates +** will get a link to their own site as well as acknowledgement on the +** donations blog located here http://www.amillionpixels.blogspot.com/ +** +** If you wish to contact me you can use the following methods: +** +** Skype Phone: 636-486-4040 (let it ring a long time while it goes through switches) +** Skype ID: jratcliff63367 +** Yahoo: jratcliff63367 +** AOL: jratcliff1961 +** email: jratcliff@infiniplex.net +** Personal website: http://jratcliffscarab.blogspot.com +** Coding Website: http://codesuppository.blogspot.com +** FundRaising Blog: http://amillionpixels.blogspot.com +** Fundraising site: http://www.amillionpixels.us +** New Temple Site: http://newtemple.blogspot.com +** +** +** The MIT license: +** +** Permission is hereby granted, free of charge, to any person obtaining a copy +** of this software and associated documentation files (the "Software"), to deal +** in the Software without restriction, including without limitation the rights +** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +** copies of the Software, and to permit persons to whom the Software is furnished +** to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in all +** copies or substantial portions of the Software. + +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +** WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +** CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + +namespace ConvexDecomposition +{ + +// returns true if the ray intersects the triangle. +bool lineIntersectsTriangle(const double *rayStart,const double *rayEnd,const double *p1,const double *p2,const double *p3,double *sect); +bool rayIntersectsTriangle(const double *p,const double *d,const double *v0,const double *v1,const double *v2,double &t); + +}; + +#endif diff --git a/convex_decomposition/ConvexDecomposition/ConvexDecomposition/splitplane.cpp b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/splitplane.cpp new file mode 100644 index 0000000..154cead --- /dev/null +++ b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/splitplane.cpp @@ -0,0 +1,339 @@ +#include +#include +#include +#include +#include +#include + +/*! +** +** Copyright (c) 2007 by John W. Ratcliff mailto:jratcliff@infiniplex.net +** +** Portions of this source has been released with the PhysXViewer application, as well as +** Rocket, CreateDynamics, ODF, and as a number of sample code snippets. +** +** If you find this code useful or you are feeling particularily generous I would +** ask that you please go to http://www.amillionpixels.us and make a donation +** to Troy DeMolay. +** +** DeMolay is a youth group for young men between the ages of 12 and 21. +** It teaches strong moral principles, as well as leadership skills and +** public speaking. The donations page uses the 'pay for pixels' paradigm +** where, in this case, a pixel is only a single penny. Donations can be +** made for as small as $4 or as high as a $100 block. Each person who donates +** will get a link to their own site as well as acknowledgement on the +** donations blog located here http://www.amillionpixels.blogspot.com/ +** +** If you wish to contact me you can use the following methods: +** +** Skype Phone: 636-486-4040 (let it ring a long time while it goes through switches) +** Skype ID: jratcliff63367 +** Yahoo: jratcliff63367 +** AOL: jratcliff1961 +** email: jratcliff@infiniplex.net +** Personal website: http://jratcliffscarab.blogspot.com +** Coding Website: http://codesuppository.blogspot.com +** FundRaising Blog: http://amillionpixels.blogspot.com +** Fundraising site: http://www.amillionpixels.us +** New Temple Site: http://newtemple.blogspot.com +** +** +** The MIT license: +** +** Permission is hereby granted, free of charge, to any person obtaining a copy +** of this software and associated documentation files (the "Software"), to deal +** in the Software without restriction, including without limitation the rights +** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +** copies of the Software, and to permit persons to whom the Software is furnished +** to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in all +** copies or substantial portions of the Software. + +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +** WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +** CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + + +#include "splitplane.h" +#include "ConvexDecomposition.h" +#include "cd_vector.h" +#include "cd_hull.h" +#include "cd_wavefront.h" +#include "bestfit.h" +#include "planetri.h" +#include "vlookup.h" +#include "meshvolume.h" +#include "bestfitobb.h" +#include "float_math.h" + +namespace ConvexDecomposition +{ + +static void computePlane(const double *A,const double *B,const double *C,double *plane) +{ + + double vx = (B[0] - C[0]); + double vy = (B[1] - C[1]); + double vz = (B[2] - C[2]); + + double wx = (A[0] - B[0]); + double wy = (A[1] - B[1]); + double wz = (A[2] - B[2]); + + double vw_x = vy * wz - vz * wy; + double vw_y = vz * wx - vx * wz; + double vw_z = vx * wy - vy * wx; + + double mag = sqrt((vw_x * vw_x) + (vw_y * vw_y) + (vw_z * vw_z)); + + if ( mag < 0.000001f ) + { + mag = 0; + } + else + { + mag = 1.0f/mag; + } + + double x = vw_x * mag; + double y = vw_y * mag; + double z = vw_z * mag; + + + double D = 0.0f - ((x*A[0])+(y*A[1])+(z*A[2])); + + plane[0] = x; + plane[1] = y; + plane[2] = z; + plane[3] = D; + +} + +class Rect3d +{ +public: + Rect3d(void) { }; + + Rect3d(const double *bmin,const double *bmax) + { + + mMin[0] = bmin[0]; + mMin[1] = bmin[1]; + mMin[2] = bmin[2]; + + mMax[0] = bmax[0]; + mMax[1] = bmax[1]; + mMax[2] = bmax[2]; + + } + + void SetMin(const double *bmin) + { + mMin[0] = bmin[0]; + mMin[1] = bmin[1]; + mMin[2] = bmin[2]; + } + + void SetMax(const double *bmax) + { + mMax[0] = bmax[0]; + mMax[1] = bmax[1]; + mMax[2] = bmax[2]; + } + + void SetMin(double x,double y,double z) + { + mMin[0] = x; + mMin[1] = y; + mMin[2] = z; + } + + void SetMax(double x,double y,double z) + { + mMax[0] = x; + mMax[1] = y; + mMax[2] = z; + } + + double mMin[3]; + double mMax[3]; +}; + +void splitRect(unsigned int axis, + const Rect3d &source, + Rect3d &b1, + Rect3d &b2, + const double *midpoint) +{ + switch ( axis ) + { + case 0: + b1.SetMin(source.mMin); + b1.SetMax( midpoint[0], source.mMax[1], source.mMax[2] ); + + b2.SetMin( midpoint[0], source.mMin[1], source.mMin[2] ); + b2.SetMax(source.mMax); + + break; + case 1: + b1.SetMin(source.mMin); + b1.SetMax( source.mMax[0], midpoint[1], source.mMax[2] ); + + b2.SetMin( source.mMin[0], midpoint[1], source.mMin[2] ); + b2.SetMax(source.mMax); + + break; + case 2: + b1.SetMin(source.mMin); + b1.SetMax( source.mMax[0], source.mMax[1], midpoint[2] ); + + b2.SetMin( source.mMin[0], source.mMin[1], midpoint[2] ); + b2.SetMax(source.mMax); + + break; + } +} + +bool computeSplitPlane(unsigned int vcount, + const double *vertices, + unsigned int tcount, + const unsigned int *indices, + ConvexDecompInterface *callback, + double *plane) +{ + bool cret = false; + + + double sides[3]; + double matrix[16]; + + computeBestFitOBB( vcount, vertices, sizeof(double)*3, sides, matrix ); + + double bmax[3]; + double bmin[3]; + + bmax[0] = sides[0]*0.5f; + bmax[1] = sides[1]*0.5f; + bmax[2] = sides[2]*0.5f; + + bmin[0] = -bmax[0]; + bmin[1] = -bmax[1]; + bmin[2] = -bmax[2]; + + + double dx = sides[0]; + double dy = sides[1]; + double dz = sides[2]; + + + double laxis = dx; + + unsigned int axis = 0; + + if ( dy > dx ) + { + axis = 1; + laxis = dy; + } + + if ( dz > dx && dz > dy ) + { + axis = 2; + laxis = dz; + } + + double p1[3]; + double p2[3]; + double p3[3]; + + p3[0] = p2[0] = p1[0] = bmin[0] + dx*0.5f; + p3[1] = p2[1] = p1[1] = bmin[1] + dy*0.5f; + p3[2] = p2[2] = p1[2] = bmin[2] + dz*0.5f; + + Rect3d b(bmin,bmax); + + Rect3d b1,b2; + + splitRect(axis,b,b1,b2,p1); + + +// callback->ConvexDebugBound(b1.mMin,b1.mMax,0x00FF00); +// callback->ConvexDebugBound(b2.mMin,b2.mMax,0xFFFF00); + + switch ( axis ) + { + case 0: + p2[1] = bmin[1]; + p2[2] = bmin[2]; + + if ( dz > dy ) + { + p3[1] = bmax[1]; + p3[2] = bmin[2]; + } + else + { + p3[1] = bmin[1]; + p3[2] = bmax[2]; + } + + break; + case 1: + p2[0] = bmin[0]; + p2[2] = bmin[2]; + + if ( dx > dz ) + { + p3[0] = bmax[0]; + p3[2] = bmin[2]; + } + else + { + p3[0] = bmin[0]; + p3[2] = bmax[2]; + } + + break; + case 2: + p2[0] = bmin[0]; + p2[1] = bmin[1]; + + if ( dx > dy ) + { + p3[0] = bmax[0]; + p3[1] = bmin[1]; + } + else + { + p3[0] = bmin[0]; + p3[1] = bmax[1]; + } + + break; + } + + double tp1[3]; + double tp2[3]; + double tp3[3]; + + fm_transform(matrix,p1,tp1); + fm_transform(matrix,p2,tp2); + fm_transform(matrix,p3,tp3); + +// callback->ConvexDebugTri(p1,p2,p3,0xFF0000); + + computePlane(tp1,tp2,tp3,plane); + + return true; + +} + + +}; diff --git a/convex_decomposition/ConvexDecomposition/ConvexDecomposition/splitplane.h b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/splitplane.h new file mode 100644 index 0000000..e7869dd --- /dev/null +++ b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/splitplane.h @@ -0,0 +1,76 @@ +#ifndef SPLIT_PLANE_H + +#define SPLIT_PLANE_H + +/*! +** +** Copyright (c) 2007 by John W. Ratcliff mailto:jratcliff@infiniplex.net +** +** Portions of this source has been released with the PhysXViewer application, as well as +** Rocket, CreateDynamics, ODF, and as a number of sample code snippets. +** +** If you find this code useful or you are feeling particularily generous I would +** ask that you please go to http://www.amillionpixels.us and make a donation +** to Troy DeMolay. +** +** DeMolay is a youth group for young men between the ages of 12 and 21. +** It teaches strong moral principles, as well as leadership skills and +** public speaking. The donations page uses the 'pay for pixels' paradigm +** where, in this case, a pixel is only a single penny. Donations can be +** made for as small as $4 or as high as a $100 block. Each person who donates +** will get a link to their own site as well as acknowledgement on the +** donations blog located here http://www.amillionpixels.blogspot.com/ +** +** If you wish to contact me you can use the following methods: +** +** Skype Phone: 636-486-4040 (let it ring a long time while it goes through switches) +** Skype ID: jratcliff63367 +** Yahoo: jratcliff63367 +** AOL: jratcliff1961 +** email: jratcliff@infiniplex.net +** Personal website: http://jratcliffscarab.blogspot.com +** Coding Website: http://codesuppository.blogspot.com +** FundRaising Blog: http://amillionpixels.blogspot.com +** Fundraising site: http://www.amillionpixels.us +** New Temple Site: http://newtemple.blogspot.com +** +** +** The MIT license: +** +** Permission is hereby granted, free of charge, to any person obtaining a copy +** of this software and associated documentation files (the "Software"), to deal +** in the Software without restriction, including without limitation the rights +** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +** copies of the Software, and to permit persons to whom the Software is furnished +** to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in all +** copies or substantial portions of the Software. + +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +** WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +** CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + + +namespace ConvexDecomposition +{ + +class ConvexDecompInterface; + +bool computeSplitPlane(unsigned int vcount, + const double *vertices, + unsigned int tcount, + const unsigned int *indices, + ConvexDecompInterface *callback, + double *plane); + + +}; + +#endif diff --git a/convex_decomposition/ConvexDecomposition/ConvexDecomposition/triangulate.cpp b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/triangulate.cpp new file mode 100644 index 0000000..03b517b --- /dev/null +++ b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/triangulate.cpp @@ -0,0 +1,410 @@ +#include +#include +#include +#include +#include + +/*! +** +** Copyright (c) 2007 by John W. Ratcliff mailto:jratcliff@infiniplex.net +** +** Portions of this source has been released with the PhysXViewer application, as well as +** Rocket, CreateDynamics, ODF, and as a number of sample code snippets. +** +** If you find this code useful or you are feeling particularily generous I would +** ask that you please go to http://www.amillionpixels.us and make a donation +** to Troy DeMolay. +** +** DeMolay is a youth group for young men between the ages of 12 and 21. +** It teaches strong moral principles, as well as leadership skills and +** public speaking. The donations page uses the 'pay for pixels' paradigm +** where, in this case, a pixel is only a single penny. Donations can be +** made for as small as $4 or as high as a $100 block. Each person who donates +** will get a link to their own site as well as acknowledgement on the +** donations blog located here http://www.amillionpixels.blogspot.com/ +** +** If you wish to contact me you can use the following methods: +** +** Skype Phone: 636-486-4040 (let it ring a long time while it goes through switches) +** Skype ID: jratcliff63367 +** Yahoo: jratcliff63367 +** AOL: jratcliff1961 +** email: jratcliff@infiniplex.net +** Personal website: http://jratcliffscarab.blogspot.com +** Coding Website: http://codesuppository.blogspot.com +** FundRaising Blog: http://amillionpixels.blogspot.com +** Fundraising site: http://www.amillionpixels.us +** New Temple Site: http://newtemple.blogspot.com +** +** +** The MIT license: +** +** Permission is hereby granted, free of charge, to any person obtaining a copy +** of this software and associated documentation files (the "Software"), to deal +** in the Software without restriction, including without limitation the rights +** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +** copies of the Software, and to permit persons to whom the Software is furnished +** to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in all +** copies or substantial portions of the Software. + +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +** WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +** CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + + +#include // Include STL vector class. + +#include "triangulate.h" + + +namespace ConvexDecomposition +{ + + +class Vec2d +{ +public: + Vec2d(const double *v) + { + mX = v[0]; + mY = v[1]; + } + Vec2d(double x,double y) + { + Set(x,y); + }; + double GetX(void) const { return mX; }; + double GetY(void) const { return mY; }; + + void Set(double x,double y) + { + mX = x; + mY = y; + }; + +private: + double mX; + double mY; +};// Typedef an STL vector of vertices which are used to represent +// a polygon/contour and a series of triangles. + +typedef std::vector< Vec2d > Vec2dVector; + +static bool Process(const Vec2dVector &contour,Vec2dVector &result); // compute area of a contour/polygon +static double Area(const Vec2dVector &contour); // decide if point Px/Py is inside triangle defined by (Ax,Ay) (Bx,By) (Cx,Cy) +static bool InsideTriangle(double Ax, double Ay,double Bx, double By,double Cx, double Cy,double Px, double Py); +static bool Snip(const Vec2dVector &contour,int u,int v,int w,int n,int *V); + +static const double EPSILON=0.0000000001f; + +double Area(const Vec2dVector &contour) +{ + int n = contour.size(); + double A=0.0f; + for(int p=n-1,q=0; q= 0.0f) && (bCROSScp >= 0.0f) && (cCROSSap >= 0.0f)); +}; + +bool Snip(const Vec2dVector &contour,int u,int v,int w,int n,int *V) +{ + int p; + double Ax, Ay, Bx, By, Cx, Cy, Px, Py; + Ax = contour[V[u]].GetX(); + Ay = contour[V[u]].GetY(); + Bx = contour[V[v]].GetX(); + By = contour[V[v]].GetY(); + Cx = contour[V[w]].GetX(); + Cy = contour[V[w]].GetY(); + if ( EPSILON > (((Bx-Ax)*(Cy-Ay)) - ((By-Ay)*(Cx-Ax))) ) return false; for (p=0;p2; ) + { + /* if we loop, it is probably a non-simple polygon */ + if (0 >= (count--)) + { + //** Triangulate: ERROR - probable bad polygon! + return false; + } /* three consecutive vertices in current polygon, */ + + int u = v ; + if (nv <= u) u = 0; /* previous */ + v = u+1; if (nv <= v) v = 0; /* new v */ + int w = v+1; + if (nv <= w) w = 0; /* next */ + + if ( Snip(contour,u,v,w,nv,V) ) + { + int a,b,c,s,t; /* true names of the vertices */ + + a = V[u]; + b = V[v]; + c = V[w]; /* output Triangle */ + + result.push_back( contour[a] ); + result.push_back( contour[b] ); + result.push_back( contour[c] ); + + m++; /* remove v from remaining polygon */ + for(s=v,t=v+1;t= 3 ) + { + double normal[3]; + + normal[0] = plane[0]; + normal[1] = plane[1]; + normal[2] = plane[2]; + double D = plane[3]; + + unsigned int i0 = 0; + unsigned int i1 = 1; + unsigned int i2 = 2; + unsigned int axis = 0; + + + // find the dominant axis. + double dx = fabs(normal[0]); + double dy = fabs(normal[1]); + double dz = fabs(normal[2]); + + if ( dx > dy && dx > dz ) + { + axis = 0; + i0 = 1; + i1 = 2; + i2 = 0; + } + else if ( dy > dx && dy > dz ) + { + i0 = 0; + i1 = 2; + i2 = 1; + axis = 1; + } + else if ( dz > dx && dz > dy ) + { + i0 = 0; + i1 = 1; + i2 = 2; + axis = 2; + } + + double *ptemp = new double[pcount*2]; + double *ptri = new double[maxTri*2*3]; + const double *source = vertices; + double *dest = ptemp; + + for (unsigned int i=0; i +#include +#include +#include + +#pragma warning(disable:4786) + +#include +#include +#include +/*! +** +** Copyright (c) 2007 by John W. Ratcliff mailto:jratcliff@infiniplex.net +** +** Portions of this source has been released with the PhysXViewer application, as well as +** Rocket, CreateDynamics, ODF, and as a number of sample code snippets. +** +** If you find this code useful or you are feeling particularily generous I would +** ask that you please go to http://www.amillionpixels.us and make a donation +** to Troy DeMolay. +** +** DeMolay is a youth group for young men between the ages of 12 and 21. +** It teaches strong moral principles, as well as leadership skills and +** public speaking. The donations page uses the 'pay for pixels' paradigm +** where, in this case, a pixel is only a single penny. Donations can be +** made for as small as $4 or as high as a $100 block. Each person who donates +** will get a link to their own site as well as acknowledgement on the +** donations blog located here http://www.amillionpixels.blogspot.com/ +** +** If you wish to contact me you can use the following methods: +** +** Skype Phone: 636-486-4040 (let it ring a long time while it goes through switches) +** Skype ID: jratcliff63367 +** Yahoo: jratcliff63367 +** AOL: jratcliff1961 +** email: jratcliff@infiniplex.net +** Personal website: http://jratcliffscarab.blogspot.com +** Coding Website: http://codesuppository.blogspot.com +** FundRaising Blog: http://amillionpixels.blogspot.com +** Fundraising site: http://www.amillionpixels.us +** New Temple Site: http://newtemple.blogspot.com +** +** +** The MIT license: +** +** Permission is hereby granted, free of charge, to any person obtaining a copy +** of this software and associated documentation files (the "Software"), to deal +** in the Software without restriction, including without limitation the rights +** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +** copies of the Software, and to permit persons to whom the Software is furnished +** to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in all +** copies or substantial portions of the Software. + +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +** WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +** CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + + + +// CodeSnippet provided by John W. Ratcliff +// on March 23, 2006. +// +// mailto: jratcliff@infiniplex.net +// +// Personal website: http://jratcliffscarab.blogspot.com +// Coding Website: http://codesuppository.blogspot.com +// FundRaising Blog: http://amillionpixels.blogspot.com +// Fundraising site: http://www.amillionpixels.us +// New Temple Site: http://newtemple.blogspot.com +// +// This snippet shows how to 'hide' the complexity of +// the STL by wrapping some useful piece of functionality +// around a handful of discrete API calls. +// +// This API allows you to create an indexed triangle list +// from a collection of raw input triangles. Internally +// it uses an STL set to build the lookup table very rapidly. +// +// Here is how you would use it to build an indexed triangle +// list from a raw list of triangles. +// +// (1) create a 'VertexLookup' interface by calling +// +// VertexLook vl = Vl_createVertexLookup(); +// +// (2) For each vertice in each triangle call: +// +// unsigned int i1 = Vl_getIndex(vl,p1); +// unsigned int i2 = Vl_getIndex(vl,p2); +// unsigned int i3 = Vl_getIndex(vl,p3); +// +// save the 3 indices into your triangle list array. +// +// (3) Get the vertex array by calling: +// +// const double *vertices = Vl_getVertices(vl); +// +// (4) Get the number of vertices so you can copy them into +// your own buffer. +// unsigned int vcount = Vl_getVcount(vl); +// +// (5) Release the VertexLookup interface when you are done with it. +// Vl_releaseVertexLookup(vl); +// +// Teaches the following lessons: +// +// How to wrap the complexity of STL and C++ classes around a +// simple API interface. +// +// How to use an STL set and custom comparator operator for +// a complex data type. +// +// How to create a template class. +// +// How to achieve significant performance improvements by +// taking advantage of built in STL containers in just +// a few lines of code. +// +// You could easily modify this code to support other vertex +// formats with any number of interpolants. + + + + +#include "vlookup.h" + +namespace ConvexDecomposition +{ + +class VertexPosition +{ +public: + VertexPosition(void) { }; + VertexPosition(const double *p) + { + mPos[0] = p[0]; + mPos[1] = p[1]; + mPos[2] = p[2]; + }; + + void Set(int index,const double *pos) + { + const double * p = &pos[index*3]; + + mPos[0] = p[0]; + mPos[1] = p[1]; + mPos[2] = p[2]; + + }; + + double GetX(void) const { return mPos[0]; }; + double GetY(void) const { return mPos[1]; }; + double GetZ(void) const { return mPos[2]; }; + + double mPos[3]; +}; + + +template class VertexLess +{ +public: + typedef std::vector< Type > VertexVector; + + bool operator()(int v1,int v2) const; + + static void SetSearch(const Type& match,VertexVector *list) + { + mFind = match; + mList = list; + }; + +private: + const Type& Get(int index) const + { + if ( index == -1 ) return mFind; + VertexVector &vlist = *mList; + return vlist[index]; + } + static Type mFind; // vertice to locate. + static VertexVector *mList; +}; + +template class VertexPool +{ +public: + typedef std::set > VertexSet; + typedef std::vector< Type > VertexVector; + + int GetVertex(const Type& vtx) + { + VertexLess::SetSearch(vtx,&mVtxs); + typename VertexSet::iterator found; + found = mVertSet.find( -1 ); + if ( found != mVertSet.end() ) + { + return *found; + } + int idx = (int)mVtxs.size(); + mVtxs.push_back( vtx ); + mVertSet.insert( idx ); + return idx; + }; + + const double * GetPos(int idx) const + { + return mVtxs[idx].mPos; + } + + const Type& Get(int idx) const + { + return mVtxs[idx]; + }; + + unsigned int GetSize(void) const + { + return mVtxs.size(); + }; + + void Clear(int reservesize) // clear the vertice pool. + { + mVertSet.clear(); + mVtxs.clear(); + mVtxs.reserve(reservesize); + }; + + const VertexVector& GetVertexList(void) const { return mVtxs; }; + + void Set(const Type& vtx) + { + mVtxs.push_back(vtx); + } + + unsigned int GetVertexCount(void) const + { + return mVtxs.size(); + }; + + + Type * GetBuffer(void) + { + return &mVtxs[0]; + }; + +private: + VertexSet mVertSet; // ordered list. + VertexVector mVtxs; // set of vertices. +}; + +double tmpp[3] = {0,0,0}; +template<> VertexPosition VertexLess::mFind = tmpp; +template<> std::vector *VertexLess::mList =0; + +enum RDIFF +{ + RD_EQUAL, + RD_LESS, + RD_GREATER +}; + +static RDIFF relativeDiff(const double *a,const double *b,double magnitude) +{ + RDIFF ret = RD_EQUAL; + + double m2 = magnitude*magnitude; + double dx = a[0]-b[0]; + double dy = a[1]-b[1]; + double dz = a[2]-b[2]; + double d2 = (dx*dx)+(dy*dy)+(dz*dz); + + if ( d2 > m2 ) + { + if ( a[0] < b[0] ) ret = RD_LESS; + else if ( a[0] > b[0] ) ret = RD_GREATER; + else if ( a[1] < b[1] ) ret = RD_LESS; + else if ( a[1] > b[1] ) ret = RD_GREATER; + else if ( a[2] < b[2] ) ret = RD_LESS; + else if ( a[2] > b[2] ) ret = RD_GREATER; + } + return ret; +} + + +template<> +bool VertexLess::operator()(int v1,int v2) const +{ + bool ret = false; + + const VertexPosition& a = Get(v1); + const VertexPosition& b = Get(v2); + + RDIFF d = relativeDiff(a.mPos,b.mPos,0.0001f); + if ( d == RD_LESS ) ret = true; + + return ret; + +}; + + + +VertexLookup Vl_createVertexLookup(void) +{ + VertexLookup ret = new VertexPool< VertexPosition >; + return ret; +} + +void Vl_releaseVertexLookup(VertexLookup vlook) +{ + VertexPool< VertexPosition > *vp = (VertexPool< VertexPosition > *) vlook; + delete vp; +} + +unsigned int Vl_getIndex(VertexLookup vlook,const double *pos) // get index. +{ + VertexPool< VertexPosition > *vp = (VertexPool< VertexPosition > *) vlook; + VertexPosition p(pos); + return vp->GetVertex(p); +} + +const double * Vl_getVertices(VertexLookup vlook) +{ + VertexPool< VertexPosition > *vp = (VertexPool< VertexPosition > *) vlook; + return vp->GetPos(0); +} + + +unsigned int Vl_getVcount(VertexLookup vlook) +{ + VertexPool< VertexPosition > *vp = (VertexPool< VertexPosition > *) vlook; + return vp->GetVertexCount(); +} + +}; // end of namespace diff --git a/convex_decomposition/ConvexDecomposition/ConvexDecomposition/vlookup.h b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/vlookup.h new file mode 100644 index 0000000..28d4808 --- /dev/null +++ b/convex_decomposition/ConvexDecomposition/ConvexDecomposition/vlookup.h @@ -0,0 +1,143 @@ +#ifndef VLOOKUP_H + +#define VLOOKUP_H + +/*! +** +** Copyright (c) 2007 by John W. Ratcliff mailto:jratcliff@infiniplex.net +** +** Portions of this source has been released with the PhysXViewer application, as well as +** Rocket, CreateDynamics, ODF, and as a number of sample code snippets. +** +** If you find this code useful or you are feeling particularily generous I would +** ask that you please go to http://www.amillionpixels.us and make a donation +** to Troy DeMolay. +** +** DeMolay is a youth group for young men between the ages of 12 and 21. +** It teaches strong moral principles, as well as leadership skills and +** public speaking. The donations page uses the 'pay for pixels' paradigm +** where, in this case, a pixel is only a single penny. Donations can be +** made for as small as $4 or as high as a $100 block. Each person who donates +** will get a link to their own site as well as acknowledgement on the +** donations blog located here http://www.amillionpixels.blogspot.com/ +** +** If you wish to contact me you can use the following methods: +** +** Skype Phone: 636-486-4040 (let it ring a long time while it goes through switches) +** Skype ID: jratcliff63367 +** Yahoo: jratcliff63367 +** AOL: jratcliff1961 +** email: jratcliff@infiniplex.net +** Personal website: http://jratcliffscarab.blogspot.com +** Coding Website: http://codesuppository.blogspot.com +** FundRaising Blog: http://amillionpixels.blogspot.com +** Fundraising site: http://www.amillionpixels.us +** New Temple Site: http://newtemple.blogspot.com +** +** +** The MIT license: +** +** Permission is hereby granted, free of charge, to any person obtaining a copy +** of this software and associated documentation files (the "Software"), to deal +** in the Software without restriction, including without limitation the rights +** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +** copies of the Software, and to permit persons to whom the Software is furnished +** to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in all +** copies or substantial portions of the Software. + +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +** WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +** CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + + +// CodeSnippet provided by John W. Ratcliff +// on March 23, 2006. +// +// mailto: jratcliff@infiniplex.net +// +// Personal website: http://jratcliffscarab.blogspot.com +// Coding Website: http://codesuppository.blogspot.com +// FundRaising Blog: http://amillionpixels.blogspot.com +// Fundraising site: http://www.amillionpixels.us +// New Temple Site: http://newtemple.blogspot.com +// +// This snippet shows how to 'hide' the complexity of +// the STL by wrapping some useful piece of functionality +// around a handful of discrete API calls. +// +// This API allows you to create an indexed triangle list +// from a collection of raw input triangles. Internally +// it uses an STL set to build the lookup table very rapidly. +// +// Here is how you would use it to build an indexed triangle +// list from a raw list of triangles. +// +// (1) create a 'VertexLookup' interface by calling +// +// VertexLook vl = Vl_createVertexLookup(); +// +// (2) For each vertice in each triangle call: +// +// unsigned int i1 = Vl_getIndex(vl,p1); +// unsigned int i2 = Vl_getIndex(vl,p2); +// unsigned int i3 = Vl_getIndex(vl,p3); +// +// save the 3 indices into your triangle list array. +// +// (3) Get the vertex array by calling: +// +// const double *vertices = Vl_getVertices(vl); +// +// (4) Get the number of vertices so you can copy them into +// your own buffer. +// unsigned int vcount = Vl_getVcount(vl); +// +// (5) Release the VertexLookup interface when you are done with it. +// Vl_releaseVertexLookup(vl); +// +// Teaches the following lessons: +// +// How to wrap the complexity of STL and C++ classes around a +// simple API interface. +// +// How to use an STL set and custom comparator operator for +// a complex data type. +// +// How to create a template class. +// +// How to achieve significant performance improvements by +// taking advantage of built in STL containers in just +// a few lines of code. +// +// You could easily modify this code to support other vertex +// formats with any number of interpolants. +// +// Hide C++ classes from the rest of your application by +// keeping them in the CPP and wrapping them in a namespace +// Uses an STL set to create an index table for a bunch of vertex positions +// used typically to re-index a collection of raw triangle data. + +namespace ConvexDecomposition +{ + +typedef void * VertexLookup; + +VertexLookup Vl_createVertexLookup(void); +void Vl_releaseVertexLookup(VertexLookup vlook); + +unsigned int Vl_getIndex(VertexLookup vlook,const double *pos); // get index. +const double * Vl_getVertices(VertexLookup vlook); + +unsigned int Vl_getVcount(VertexLookup vlook); + +}; + + +#endif diff --git a/convex_decomposition/ConvexDecomposition/DecomposeSample.cpp b/convex_decomposition/ConvexDecomposition/DecomposeSample.cpp new file mode 100644 index 0000000..35a1316 --- /dev/null +++ b/convex_decomposition/ConvexDecomposition/DecomposeSample.cpp @@ -0,0 +1,668 @@ +#include +#include +#include +#include +#include + +#include + +#include "./ConvexDecomposition/ConvexDecomposition.h" +#include "./ConvexDecomposition/cd_wavefront.h" + +using namespace ConvexDecomposition; + +// Test application to demonstrate how to use the ConvexDecomposition system. + +typedef std::vector< ConvexResult * > ConvexResultVector; + +static const char * fstring(float v) +{ + static char data[64*16]; + static int index=0; + + char *ret = &data[index*64]; + index++; + if (index == 16 ) index = 0; + + if ( v == FLT_MIN ) return "-INF"; // collada notation for FLT_MIN and FLT_MAX + if ( v == FLT_MAX ) return "INF"; + + if ( v == 1 ) + { + strcpy(ret,"1"); + } + else if ( v == 0 ) + { + strcpy(ret,"0"); + } + else if ( v == - 1 ) + { + strcpy(ret,"-1"); + } + else + { + sprintf(ret,"%.9f", v ); + const char *dot = strstr(ret,"."); + if ( dot ) + { + int len = (int)strlen(ret); + char *foo = &ret[len-1]; + while ( *foo == '0' ) foo--; + if ( *foo == '.' ) + *foo = 0; + else + foo[1] = 0; + } + } + + return ret; +} + +class CBuilder : public ConvexDecompInterface +{ +public: + + CBuilder(const char *fname,const DecompDesc &d) + { + + strcpy(mBaseName,fname); + char *dot = strstr(mBaseName,"."); + if ( dot ) *dot = 0; + + sprintf(mObjName,"%s_convex.obj", mBaseName ); + + mBaseCount = 0; + mHullCount = 0; + mSkinWidth = (float)d.mSkinWidth; + + mFph = fopen(mObjName,"wb"); + + + printf("########################################################################\r\n"); + printf("# Perfomring approximate convex decomposition for triangle mesh %s\r\n", fname ); + printf("# Input Mesh has %d vertices and %d triangles.\r\n", d.mVcount, d.mTcount ); + printf("# Recursion depth: %d\r\n", d.mDepth ); + printf("# Concavity Threshold Percentage: %0.2f\r\n", d.mCpercent ); + printf("# Hull Merge Volume Percentage: %0.2f\r\n", d.mPpercent ); + printf("# Maximum output vertices per hull: %d\r\n", d.mMaxVertices ); + printf("# Hull Skin Width: %0.2f\r\n", d.mSkinWidth ); + printf("########################################################################\r\n"); + + + if ( mFph ) + { + fprintf(mFph,"########################################################################\r\n"); + fprintf(mFph,"# Approximate convex decomposition for triangle mesh %s\r\n", fname ); + fprintf(mFph,"# Input Mesh has %d vertices and %d triangles.\r\n", d.mVcount, d.mTcount ); + fprintf(mFph,"# Recursion depth: %d\r\n", d.mDepth ); + fprintf(mFph,"# Concavity Threshold Percentage: %0.2f\r\n", d.mCpercent ); + fprintf(mFph,"# Hull Merge Volume Percentage: %0.2f\r\n", d.mPpercent ); + fprintf(mFph,"# Maximum output vertices per hull: %d\r\n", d.mMaxVertices ); + fprintf(mFph,"# Hull Skin Width: %0.2f\r\n", d.mSkinWidth ); + fprintf(mFph,"########################################################################\r\n"); + + printf("Opened Wavefront file %s for output.\r\n", mObjName ); + } + else + { + printf("Failed to open output file %s\r\n", mObjName ); + } + } + + ~CBuilder(void) + { + if ( mFph ) + { + fclose(mFph); + } + for (unsigned int i=0; i\r\n", mBaseName, index, mBaseName, index); + fprintf(fph," \r\n"); + fprintf(fph," \r\n", mBaseName, index); + fprintf(fph," \r\n", cr->mHullVcount*3, mBaseName, index); + fprintf(fph," "); + for (unsigned int i=0; imHullVcount; i++) + { + const double *p = &cr->mHullVertices[i*3]; + fprintf(fph,"%s %s %s ", fstring((float)p[0]), fstring((float)p[1]), fstring((float)p[2]) ); + if ( ((i+1)&3) == 0 && (i+1) < cr->mHullVcount ) + { + fprintf(fph,"\r\n"); + fprintf(fph," "); + } + } + fprintf(fph,"\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n", cr->mHullVcount, mBaseName, index ); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n", mBaseName, index); + fprintf(fph," \r\n", mBaseName, index); + fprintf(fph," \r\n"); + fprintf(fph," \r\n", cr->mHullTcount ); + fprintf(fph," \r\n", mBaseName, index); + fprintf(fph,"

\r\n"); + fprintf(fph," "); + for (unsigned int i=0; imHullTcount; i++) + { + unsigned int *tri = &cr->mHullIndices[i*3]; + fprintf(fph,"%d %d %d ", tri[0], tri[1], tri[2] ); + if ( ((i+1)&3) == 0 && (i+1) < cr->mHullTcount ) + { + fprintf(fph,"\r\n"); + fprintf(fph," "); + } + } + fprintf(fph,"\r\n"); + fprintf(fph,"

\r\n"); + fprintf(fph,"
\r\n"); + fprintf(fph,"
\r\n"); + fprintf(fph," \r\n"); + + } + + void saveCOLLADA(void) + { + char scratch[512]; + sprintf(scratch,"%s.dae", mBaseName ); + FILE *fph = fopen(scratch,"wb"); + + if ( fph ) + { + printf("Saving convex decomposition of %d hulls to COLLADA file '%s'\r\n", (int)mHulls.size(), scratch ); + + fprintf(fph,"\r\n"); + fprintf(fph,"\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," NxuStream2 converter - http://www.ageia.com\r\n"); + fprintf(fph," PhysX Rocket, PhysX Viewer, or CreateDynamics\r\n"); + fprintf(fph," questions to: jratcliff@ageia.com\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," chair_gothic_tilted\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," Y_UP\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," 0.803922 0.588235 0.92549 1\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," 0.803922 0.588235 0.92549 1\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," 0.631373 0.631373 0.631373 1\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," 1\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," 0 0 0 1\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," 1 1 1 1\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," 0\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + + for (unsigned int i=0; i\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n", mBaseName, mBaseName ); + fprintf(fph," 0 0 0\r\n"); + fprintf(fph," 1 0 0 0\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," 0.5\r\n"); + fprintf(fph," 0\r\n"); + fprintf(fph," 0.5\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n", mBaseName, mBaseName); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + + for (unsigned int i=0; i\r\n"); + fprintf(fph," 0 0 0\r\n"); + fprintf(fph," 1 0 0 0\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," 1\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," %s\r\n", fstring( mSkinWidth ) ); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n", mBaseName, i); + fprintf(fph," \r\n"); + } + + fprintf(fph," true\r\n"); + fprintf(fph," 1\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," 0\r\n"); + fprintf(fph," 0\r\n"); + fprintf(fph," 32\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," false\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n", mBaseName, mBaseName ); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," 0 -9.800000191 0\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph,"\r\n"); + + + fclose(fph); + } + else + { + printf("Failed to open file '%s' for write access.\r\n", scratch ); + } + } + + void saveXML(FILE *fph,unsigned int index,ConvexResult *cr) + { + + fprintf(fph," \r\n", mBaseName, index); + fprintf(fph," \r\n"); + fprintf(fph," "); + for (unsigned int i=0; imHullVcount; i++) + { + const double *p = &cr->mHullVertices[i*3]; + fprintf(fph,"%s %s %s ", fstring((float)p[0]), fstring((float)p[1]), fstring((float)p[2]) ); + if ( ((i+1)&3) == 0 && (i+1) < cr->mHullVcount ) + { + fprintf(fph,"\r\n"); + fprintf(fph," "); + } + } + fprintf(fph,"\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," "); + for (unsigned int i=0; imHullTcount; i++) + { + unsigned int *tri = &cr->mHullIndices[i*3]; + fprintf(fph,"%d %d %d ", tri[0], tri[1], tri[2] ); + if ( ((i+1)&3) == 0 && (i+1) < cr->mHullTcount ) + { + fprintf(fph,"\r\n"); + fprintf(fph," "); + } + } + fprintf(fph,"\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + + } + + void saveNxuStream(void) + { + char scratch[512]; + sprintf(scratch,"%s.xml", mBaseName ); + FILE *fph = fopen(scratch,"wb"); + + if ( fph ) + { + printf("Saving convex decomposition of %d hulls to NxuStream file '%s'\r\n", mHulls.size(), scratch ); + + fprintf(fph,"\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," 65536\r\n"); + fprintf(fph," 256\r\n"); + fprintf(fph," 2048\r\n"); + fprintf(fph," \r\n"); + + for (unsigned int i=0; i\r\n", mBaseName); + fprintf(fph," false\r\n"); + fprintf(fph," NX_FILTEROP_AND\r\n"); + fprintf(fph," NX_FILTEROP_AND\r\n"); + fprintf(fph," NX_FILTEROP_AND\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," 0 -9.800000191 0\r\n"); + fprintf(fph," 0.016666668\r\n"); + fprintf(fph," 8\r\n"); + fprintf(fph," NX_TIMESTEP_FIXED\r\n"); + fprintf(fph," FLT_MIN FLT_MIN FLT_MIN FLT_MAX FLT_MAX FLT_MAX\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," 0\r\n"); + fprintf(fph," 0\r\n"); + fprintf(fph," 0\r\n"); + fprintf(fph," 0\r\n"); + fprintf(fph," 0\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," NX_SIMULATION_SW\r\n"); + fprintf(fph," true\r\n"); + fprintf(fph," false\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," false\r\n"); + fprintf(fph," false\r\n"); + fprintf(fph," true\r\n"); + fprintf(fph," false\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," 0\r\n"); + fprintf(fph," 0\r\n"); + fprintf(fph," 1431655764\r\n"); + fprintf(fph," 1431655764\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," 0.5\r\n"); + fprintf(fph," 0.5\r\n"); + fprintf(fph," 0\r\n"); + fprintf(fph," 0\r\n"); + fprintf(fph," 0\r\n"); + fprintf(fph," NX_CM_AVERAGE\r\n"); + fprintf(fph," NX_CM_AVERAGE\r\n"); + fprintf(fph," 1 0 0\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," false\r\n"); + fprintf(fph," false\r\n"); + fprintf(fph," false\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n", mBaseName, mBaseName); + fprintf(fph," 1 0 0 0 1 0 0 0 1 0 0 0 \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," 1\r\n"); + fprintf(fph," 0\r\n"); + fprintf(fph," 0\r\n"); + fprintf(fph," 32\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," true\r\n"); + fprintf(fph," false\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph," Bip01 Pelvis\r\n"); + for (unsigned int i=0; i\r\n", i, mBaseName, i); + fprintf(fph," \r\n"); + fprintf(fph," 1 0 0 0 1 0 0 0 1 0 0 0 \r\n"); + fprintf(fph," 0\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + } + fprintf(fph," \r\n"); + + fprintf(fph," \r\n"); + fprintf(fph," \r\n", mBaseName); + fprintf(fph," beshon\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," 1 0 0 0 1 0 0 0 1 0 0 0\r\n"); + fprintf(fph," false\r\n"); + fprintf(fph," true\r\n"); + fprintf(fph," 0\r\n"); + fprintf(fph," \r\n"); + fprintf(fph," \r\n"); + fprintf(fph,"\r\n"); + + } + else + { + printf("Failed to open file '%s' for write access.\r\n", scratch ); + } + } + + float mSkinWidth; + unsigned int mHullCount; + FILE *mFph; + unsigned int mBaseCount; + char mObjName[512]; + char mBaseName[512]; + ConvexResultVector mHulls; + +}; + + +int main(int argc,const char **argv) +{ + if ( argc < 2 ) + { + printf("Usage: Test (options)\r\n"); + printf("\r\n"); + printf("Options:\r\n"); + printf("\r\n"); + printf(" -d : How deep to recursively split. Values of 3-7 are reasonable.\r\n"); + printf(" -c : Percentage of concavity to keep splitting. 0-20% is reasonable.\r\n"); + printf(" -p : Percentage of volume delta to collapse hulls. 0-30% is reasonable.\r\n"); + printf(" -v : Maximum number of vertices in the output hull. Default is 32.\r\n"); + printf(" -s : Skin Width inflation. Default is 0.\r\n"); + } + else + { + unsigned int depth = 5; + float cpercent = 5; + float ppercent = 5; + unsigned int maxv = 32; + float skinWidth = 0; + + // process command line switches. + for (int i=2; i 10 ) + { + depth = 5; + printf("Invalid depth value in switch, defaulting to 5.\r\n"); + } + } + + if ( strncmp(o,"-c",2) == 0 ) + { + cpercent = (float) atof( &o[2] ); + if ( cpercent < 0 || cpercent > 100 ) + { + cpercent = 5; + printf("Invalid concavity percentage in switch, defaulting to 5.\r\n"); + } + } + + if ( strncmp(o,"-p",2) == 0 ) + { + ppercent = (float) atof( &o[2] ); + if ( ppercent < 0 || ppercent > 100 ) + { + ppercent = 5; + printf("Invalid hull merge percentage in switch, defaulting to 5.\r\n"); + } + } + + if ( strncmp(o,"-v",2) == 0 ) + { + maxv = (unsigned int) atoi( &o[2] ); + if ( maxv < 8 || maxv > 256 ) + { + maxv = 32; + printf("Invalid max vertices in switch, defaulting to 32.\r\n"); + } + } + + if ( strncmp(o,"-s",2) == 0 ) + { + skinWidth = (float) atof( &o[2] ); + if ( skinWidth < 0 || skinWidth > 0.1f ) + { + skinWidth = 0; + printf("Invalid skinWidth in switch, defaulting to 0.\r\n"); + } + } + + } + + WavefrontObj wo; + + unsigned int tcount = wo.loadObj(argv[1]); + + if ( tcount ) + { + + + DecompDesc d; + + d.mVcount = wo.mVertexCount; + d.mVertices = wo.mVertices; + d.mTcount = wo.mTriCount; + d.mIndices = (unsigned int *)wo.mIndices; + d.mDepth = depth; + d.mCpercent = cpercent; + d.mPpercent = ppercent; + d.mMaxVertices = maxv; + d.mSkinWidth = skinWidth; + + + CBuilder cb(argv[1],d); // receives the answers and writes out a wavefront OBJ file. + + d.mCallback = &cb; + + unsigned int count = performConvexDecomposition(d); + + if ( count ) + { + printf("Input triangle mesh with %d triangles produced %d output hulls.\r\n", d.mTcount, count ); + + cb.saveNxuStream(); // save results in NxuStream format. + cb.saveCOLLADA(); // save results in COLLADA physics 1.4.1 format. + + } + else + { + printf("Failed to produce any convex hulls.\r\n"); + } + + } + else + { + // sorry..no + printf("Sorry unable to load file '%s'\r\n", argv[1] ); + } + + } + +} diff --git a/convex_decomposition/ConvexDecomposition/DecomposeSample.exe b/convex_decomposition/ConvexDecomposition/DecomposeSample.exe new file mode 100644 index 0000000000000000000000000000000000000000..f90888f0b4228f1870adcf649406f1cad10b0299 GIT binary patch literal 151552 zcmeEveSDPFmH#9&fdL0*)KRB8=+sWzX%lTU={7iNJAn`)2AIja1w!mnJ4I?K&QOFv z!AV>mo{Y6ywxwO#wY%)DRoB{G*W!CZFyXBVXf@Fp#MZVC4O)CD1O(>y{hs^GWCFN# zcYmMX=l6%UWX^p%_ug~QJ@?#m&%Mv=FWqgiS}YbD{$(;2%U1mIzmWX>um21pdGZyH zO}0Ed;a4BsT2S|^k2XfXcAIbMvTuBK*-c;f{q;?^-ujK0@5^8DEsNjk``WF(>bVWR zuYY6FSFWBkX`ng^b}YucdOWo zuLSG@ycfUhHDUZCJ@{Yt*V107(hx^_Nq~8oS$=arjI^A*qR0wjf=fA6CUs(}D+A9y6{bFCu_GOFsESC1Gmo2&}c9X?&aWi7s_jdCaKiU66Ajs7! zn`Otcl0Qs6@hd`N*0Dexf$KBT~h6!?$=A5!2$ z3jF^`foA9P_^Iw@}XA`9^GEOa{Sgt#I*Gd6@|}AsWVe*&q$eY^T4=k zEP6jnRi7iR)JzMVk#@<=`lL$4ZMf(Q_^bEdtl8Ix3xNggNgTGPz5Zx95}J*#pl{Jq z0be-HZhE?UVt=LgC&L9B?4iz`@#DqYHq@17)*dfSR+nbt=joXZwV7H3W5?E3Tpb_Z z4|@l}hdd9rS8{X=1zkUTgfy;0()c zQ=-+9^c^IbP3cs*N)p>$=%`ztZAlDxLK>P=8|>8(ew85o{FjB7%MaCjul%>=HV83JJ!3mVArg3j+QgAZYu51cp># zi3IjAQ>%cz0QDx2B~%~vOU%zz&V#}a|Hzzs1pEQPCj{(fp&2Mt($%xP^>Na^EThkG z=yer#y|Kb(9ndY2`f&6i$=!zBpySa#Yy9%y0{d+rF=b14@L_^c0e=P%yjUrm<|C&i(M#zn*vvyV1CM$1ICyNb%lek^)bHN| zPt}a_*ozF0%kkI%f;k>*F>0i-S-MzEy0jQqkGA4tlEtMrq9(BXHjko>hVZhrLZ22R z^Bx-ADvf@ZV6}jU2&%3e04Sq{Ze&O6C`YTY)UMZ++N}Ncx+_vIqt#+OgxqJ3R*SJ| z6k$@bxb)ffL_bDrdM4Owj#i8DO=c^VCfrQWBj7wK;Tav5ZLa*$*|TTtXzkh41lrpn zgs0x>Zn>?0>f7W*-UbDWlg;{4iB+mu<99zWr!3Zjo!oZk#&y}pPL2PR-t<9s&AuYBo?6=t= zhTd&kq)lS`=IOs9Re(v*IP_*)y%7c)AXsb}sPQLw zh^y#js!&;vSqQ{mUt`Ozr7V!R-Oquma`h$gZ_gf-H&*=4VmXR=TM(PjYz!WgdNESl zY^Y-0VGE`(C-m{;&pDf$lGT1!bjcs8EMepCP+by}Ga5xOVl1~{Svmrq?mFu1ymTDM z@Es5A*Ihf~wz8h#^Yp**B2?VlJ5tz?Z1lSzw*n|;8KFd?^x_B1n(8_O8_aa*Gs6535^0)5ey0VR|LHR78A4x=p*><>%?~v z!9f8h65JwSMko`CwoB+Ograo<{+?i|fUgkr2)LKv>%S$wX9(^P@G*kx1^hX|B?4{% zh?OB)C!y~%!7iXq@b%vi$y$Qj1&ohoSWIw>#4aS*DPSYPkbu_%Bx;|8f=sXoSW0m4 zHKP7F!G{IBl;GV0ItjK5Xd_rD;Bn0Gs7Jsz0TQ)wkVpj&5#E5RNCM<61j z4+;1NK(=y|gkELB3ISgr*ec*of))XvB6u)OeE&i40RitN*eT$T35EsyTYyAeE}>2) zcm%wi;JYazxs~7x0{%6@EdsUzL>HDy;0DHr1q=ZsM!STrm5_auc+SqBL&}UHpfj-< zQPCr>u(AST+AiQx2+Zha0fz~O1w2SFAmFbFx&+)s@b#C8;c0++3q)Js-ApDN-71my zAu_SOHo8edo0)s9fZqk!&=jqcKquoX1iW1e1g0OF4rw2COWaqOJTk;ezC8mV1W43j3H_W2r2=jt=o0XU1YduN72ZYgUI7yTF{telSkCx50dE0FjD86% zV1h%ydV(V_63tA4F9=vkP;uZj1h+`+CkQG=yNqDB#JT_y^%4mcGNE0-V{Zd25%4g< zccFPS8?O<3UBDL!z98UkfX&9N<3v?H4{FJ}?Oad#u!uOq(JjbhtdT_fXqv2R**|Li zX=u`inv?gBu0IbSj}Y7>;O_`75%6VzTz|q6+9M%*S!Q^Aa*H36Dc2;( zs?p{IN0hAEnzU_=v^49xjsL_HnK`__DOxUgI$42Tz}pGF@MkvWR)Y5k_}2uN2-r%{ zBj9X;J?}E_G=gflKL?Oa?3RR2F=2^-mlG@z@Ir!v@35qu-~$4lIs$O5fNv9Q6z~rO zy#l5Hl4o9jnQ)JPnBWs|62Zf7GEbpo z7x37h5Zf)_VS=p!zDCd`;EM!%-e9ra0ExO&LQgVbzJUKu&?n%(5*$3t?3)R$74W-~ zSHL?7h6G#%5OQE-n7MC7fU@%;3AHoVW&xWBDtS1I;8KbGBEgV=N z1n&{>LV!XN2^BG+Qos{$0`v>`CxR9MUk8}j?kmgOot<*AFOB8z8(NxLqT3I#nqRWq z0|GukFe>0r35EpxKEZ&1IzhXDYXK&SgAb@mp&8GHttE+hDA{EEdH>zhrG z1vkE($uuvv0GbO3HR^rbbSF-oUOpa?$60#12jxDhPj`n|;$M-k>y71K*XMe+x*&A0 z$^Q&i-r=jd-iRN9{Y<;Xz09dkw=HbL&csBwFge|p7fiO;rcU=D4x5Dv?D9seZ|lF( z_hIjYozE`W`6O0(1XH1I>9++exrU8)7Epseq&IjHCtS@f*h5Xn9tt>Vu?ikpR*q;@ zgB>;O&{w&w$AhPrPeC-cNn%=x6d!4BK#!im-fm&rJnWLVVfAGDe(LwxzF(#{xa-;X z``?njN7*{`dX?(+pYnRWU?F@h1q9{2g zthz1sOh;GGz_=%{cEl!xjoDZ|u#szMDSL(Xvb)rh6q~BwnOlyat9}}~YUQS`47AnQ zW%^v~Bj^4ReQR;l8#Mr0j1c}}M?HP`N&QYi(X((K(FY{nHXxB)VFm=Rf_zv6`QPXc z5S#62&zYO;2wJVh{5E3^q+D4~a*ktQ+`E}7%i@eyd_ z*0wso9os~66ARNEH;k~L*hqtIEo1ks+_ffG6x^M)a}I>-^=FL(KtrQ|Y&C^|Xy5v? z+Lt(7z4(IYUJw+ky&YyDpA(&;HIkj{hc00;z6VrEn?H;kKBR=1VoauvxZN|2<$MuD zV-22WF&03cnOyol^x*vT>Tk7xDh}fjWH0MkoXOE84C9$e77(Zfl<|QwhVP^h#laqp zrHWY@en383a~PZM1e!L0J@PbKa!32mbnI5%BDXw6eMd2p{*v|+j=J^}GL7~V4s7vW z@Y4qSdPgBm$4AAm++wUU$S3w-U(5cuhL`e&buQO|n0}KUgU}qo3QR2hK z8uow|x*7=D5)=v>w=jxrL!8;Xu+c1$F1^_iktWs~)rdhGktsdjAAsRf+8H)VB;JRE z2gJhyWS7Q93^y^f1f(K1IBXP3&Qg`r4I78FI%52h(zn?mEvz?E2sK1)?9ac-dg3E5 zP|(065B4>_E3x)$?4CV~#Oehud<0w{2Gw1r0c_pjwHV{XNa5;OwEGl_Hgg@KW!$JE zw3czQs!3c0<9v*}no!S4Kz>54gf1mC@*W@;p@#^K1C-eAFYD2}{jAF5*mc{x5$J;r z_epS{CHPFs<3;$z-0@f}_k{54=I_%!70Knr;=Jo8Fik_WL%wzTx1hXUe(&PK=mV&y z+4v#G6C>T#6aRQ}PGQ983D zFx2Sx4o>0e3=r_Br)bsrIA`$;PFadFjHrrV6fFmgmO?z-6Eddc(3T3?33+I13d2UZ zLJJgUp>>Z%`|b%rD}*rm53_Y_?GZ#b8~-l!WH+ypZvGfyeT3c2*q7PYWh@{Oy88q& z3-OGu9D=Qa;F~!F(-ZxLPzKR%bQf(nt6i?aDG#Gew!58x)xbdJU9He!Anw6H%m^CJ z?yq9?gaq^&2X0539#A9HWGg#bPr0Z)?B9%>M&xfW-2KkZr!k_C?E#V%)6IveQ4PlQ zBJ9@c{G|xj0d}Em2@K@r2+!A>Y!QgTQi=^CjX`iOK}1MHVI0uRH$DcNJWF8bwe=6!>&PvH? zlMEezxRms($FR;@zs<+suX)X5jbQjM1^lcDo;i&sGs{bh$@tKaYqmX8#?I*wli#^6` zY3VY$?+*5ZRQ}k+27QNd1!qwq1T?9Of8peJ+-M<&HXyD32c+wBm9U8z-}o&;4R+lM z0ay=BAsmUOAOPx(W+u#3*}_IGL)OH0f3Sb~Os;28WI$&}y4vLeGV8X)VGoATl@8hQ zV^3QslD7j<#F)gQ7&8|4)g*d7!6RS*$Fe8&={OVAZ*!n!4hn$fb^2sjt+6O1`fcC| zHv)i?jjn=v)a4N%S#2*sh2iMKM2=+R-+lx9SUmL`AbZ^*9OVJuvWN8x3tC*L*Sj#g zjEaSv=4hOELjS|jfTgRaSs!ZAtg+AF0JHbtxUf+QqUz@*9oP51X4Us;=w;kSTm6V= zteA&1*AI^$m=2O6=L~c~n{JPNPRhf0ek6t18|;FhkO&-l++iZXG&Z$fQ_Z!JZw97I z@2N^ku(po)qA=SM0AH2gVxU( zm$7eisirxS?q4j_Ty0~HeAIc%!E-RPU7z8i=AqkhAm7!~qK;d%*)G(SL1)%Dibr}g zg>oq3?DS!AkVded&GzEG=;z~L(k~Xj92~lBJaoHjVQxJ$hjm}@gfn3$8^5&gkJXWwh`W!n{vl;eC*!WKtoMQu5nx_{a zilRKSTlaSD)S4Wz2@&JI12T~jnRGm!w0%#Taz_&A|vc^nJxIfz((Q zi?<~g`7s8|&(oV++WEEY%v%@=>+@Q(9enXl@N{hT-56ADd}6>BJRN`c9BoS4q!t{1 z>F*RDK{Lpsy$1`!%?;WNhjAClOZptPZYw?pP6e+eZU4!Jg^LGU8jP5;1x@{jp^w&m$Um7gd36z-|HPNoSrQCF;l_n-n6a2x+8U|C4Nm7D4Y6{ zT}6yTK-H1@k}DUb>PlU%R#6sWg{d|vR27#(QgNzH3P}`O@nMBUEB`N(^af|wXQ8Cb z3;yZ0<;AB!V9)>45uF?FPLErdx)MGGsW02pHLkYQmt6~ndIon6Z5!Nupm(Tma1Z{T zNWYREOb?o_NunfxpTV%;XPe1=t7hhL-m2@sw^^QBbrmu@B(q&*u8QTcX;o~}Xy&T8 z_1d1khYI?X{;}?GC#OMCJ9G-_99*xvUQuDdo@NE=ajxY4mUK}oGU}_jt0`3hKovPC zYKYqhV@r_1@5$!{CYpT&7P|>zD zK$bwxQZ=cv2ue)^6{FEaP=UfB6*UgQ&~RaT(7M_MX7~!05|k;`XSh>~pg+|4S43d5 zUo_NHpGI%1{ndyrNrzcM9l&zb?M=73hIXbVh0*s^wcihnOLCzSgks3-&Bah}?J%DB z1^V6TCwbBBR89NBbXz;}b);&d>9(kul&V>pZd)pXJb&=P0on0c!Zoc43usHS(|-`y zu#h;=>{tZe8};Fc@x2G6B3K43sV!2UzJUA4Tzi(LH~a5FDyqa@(}GT|$fd17+Px|b z8+9UB%OBO%P6;5#Lx@Wk`LH)a*D&rT6v{#1fTbV~Qe8RTX&-i&M-#GtL)TsX)qW?C zM^)BZM3tg7E)*jpxIkO(0iu9C80x4DpmW3J&Z-aWsTw#_S94%Xcvf<$gW@$Zx@{$TxL;0{--jDKXeNPwNTMBc}M*j$Kq_B&r z&#JeQfS5{Pw5x0gl|$P#E&=6$_z4uj7-9h3Y|mzYj6a?J?TF`aB4(|MVHc9!G9(ei zb|cmt<~rDbP-F*d@AmiLC$YU0(0WER`rFyyqLp9LS97MeBPSCc_2EzYvgE_kYDC_R zFh`*vJUO23gup@UaDlUP z3oU);m_U@Adargqe(hRBHYQqx>ak0Uz;OyY&WLzrX%RO<-ej#u^7>R>zseg>c}rB@ zQkAznSz9W3D^%V}l{cjFR;#?V$h)mJYYfDE#?oU?hq(K2q;BG#D0LIIM2NMeKAQHV zTkQ}s`67TR$jmaS>m~p7_5;0XOKQS_Ugl#O@<8mTYN5o~Q}zRgDCVWW1j6=It&1_W z%x6Q)m|CbGInv{>Fkw}CzXeH6@S)zU^Xo;?wVbEM{fDKIQ^BfOUVjt>B z&2bI&rsmj(cBLk_r9DGCvprMtEOEF|;e=+4fps*fP%~ifgMOI^>Mat!I{x1!-y}9n2%dB(q{q3+ zm#STPMLOg|D3lIS9@b)yPO^n4Lt4|JQhmF|%- zVBY8S0{sQ8P_MFS)8NZy*QVLAzt*NX;Mb;K@7AWdv{`Oud|sa@J)LFKYHj)~JKH?V zq18I{SuVZajgDf8Udjf?-h)pHl%ZJIxDg^Rt8kRp8-JukpY9P8w^{>hNO#{5#^3Le zzY1;zQ$Q$FU&L>K8Y9_&Yi9ex!JTbPoM)!`naVj=?Vm5js?CHFmEfYDnI3#U`XvrS zGlE~J8)5~M#hz;C1__fj)$W4q`6${49unC_H4U-}vJA3+aMw^TDma8iZ*VtsCHU?k z02U;qG9WxeIfD>mDa>sCl*2FTuT0~doI&qaUMUSNqGUl&)ig)9Ou)qssA&l-K*~z& z_-(Zh?c@*oIku14`2l}mnIEZ1qQ!*lgRh~T0pWamY7r((BPIv56f;=?gNG1}$zoSQ z$T`r1dreS4at^*Oq+ug|1IS19e(0IOXVs9QzX9ndmq}Pg(O3^DgE+MfIB{S|4a}*7(ID2^m_G=8IbJliXw5eFL(D0DYYR)5!_ z!l0Ri*Qqe(eExsg@vX)9!fHbbIJQB{2avXHOWL-9c@^Vg5uQQ5%}@DXu{GDJLB-7E zLNYf=ieE0Q+XnlFPNb%61tTjRZOUNp;5J4*BvBl164-HV4@Xw9fj+~N*F0=cs2HC$ z^O6pKq#g;S#?`P+qfQ)r$*NB_tK|$MpW!!kQMUT3*oE1OdBkDIDUDPrqnkftvh*w+ zBMHd%7Hns|ev^Ty@@ARHo|6J->)>uq%v~Y{d_tZaiycb8oE{wNIY3b$)4^=0Oo(h7 zsGra_hKnq&uyN=m@}6y=#tufKBe{y+pN+=R5sy;y&O5X1Uj%08+K=s1{Jd+yU}7@! z!AR?eoq4uP?($Xsa1G4Y*ywfTHQ5LCPsEq*(}R zh#41N{w){=j~zJn3KsbQW`b|nhGjp1De@9FrPg@$6b0~+G0Hbc1E@Ucv)Bj zuqWn4;Z`6C;Fm-Q0H)Yx_dR++8LZIGI|ndW`rFt)jvIV!=(WL@)sXpV@L7bTu3XFo zP_q%^$;GU4>IE|s{V;AW>pQd#Sb#l*b%ymVG6}v2jUR^)yH=r4vS+0V7du7?Gsc#L z@*;WgTZ*=p%G{~|RB@n}i%f2TS?Nk&j7$OAKuK|!9}8eyy_|B#OMxkgqDf%mfW(ki zz+E62%-Pk)o!y{08w$F5&=hlS0Q%rFW1)URfBV?0WZmTa%2sf{kKB**Ui8~rmgWC( zX>VD2T(Y_{l=7Mupb09R_LhSGeTjbIe_wou%!WUC)NHsPeF&vK2>Xw+=c-~9^5yaC zs!I`(&%moDB&J%OiJ4$tq>P<96;e2BDk9gEO6hD2c?Yabi6Uil^%lf0Q4vg1{T>Gb zbAZM)ryzbIBL;`^^Y{>z*Fu%YGd2&DD5B0OS)yST?O;PF1G11W2L*<2Wc7KJSm{U? z^`HPGxtb06WEzurMuUo0I#QEZl2w_egbF2lQ;VdB6)+L7r=R<6ESFYoXjvor#pG`oL(4XvRpnre0^H&;QTEuNPp5Lm1XT(j6iQeTNK?bniu|7765m+B_ZzBaRDI_?$do zj`T~|Y^S|@fhETs80kKY^oye@y(ZtBKMg!^{%HJ8#(zo1c^k(0`CLl6-j0d`OhY}r z@R*u9nuaoF+BG$1J?sQUMgcX~%3QWx;tJA9cx9*nS-@{|0 z5OzU*ul_6!jiIoec;|loSspsy2e+#d2s}SEf2c=gZzM7{E=cg4>F(e{2M>V6z{%b} z6+%GHOqR&uCcGwm+7hf_Z6kW+kFflXo2#uE8J@0J-~`+aFj+Y-U46=u>^No71IZ;{ z$HDy}J%FpX0?$8WXTW6!TvE(4Q>)M_f26ma97TC@6y?eP1CDv|@N}KA{o^;2DYk29(ZBm%w~~O|T6OH86X)8k)-9pt|j= z#o=hnxPY6F-v8%`w_fszwcV7WLTLZ`-pm*y*WGF+HWOD^_xzp1QrY5AP8Op#m z?TE6jReug3YMY2>0!u25zEuM1B^VOR2& z0x9icX;}2Q@tNlPAa%32CwWVu6c4a?saYJhK{nzq*X~W;VnuNv3UC|Sb1Jc|Jviv> zehX|6#9Fobrlf6NvZLRgZ2Y<+Xzy>Vil&%Rq{~e78dZ%q`+Kb-*0rO=x^|RUV!+mi ztuL{@>A0&N9PHQ%$Khud%u8%P%YF==fYSgLvljgey$7vf>B$gcjq5T_!i?yj4tpRH6G+w7J>*?CL#s%LV_upvlb%=$JPR9|2 z?bOb*u_=7;`G#XnlV03=uqbT2fm$^yoQ{ZZKRRv|(Lp~?7(LXU})b*&MR3xb;S!L3BEKk=(f*(;n8&hEP@ORN3mx+T$L zm+6q38Sc@U;T@eBKA9QC{ZAX1AjxJQ62C02}BV$&0+GO^F5WqQbrA-@_~cIUX8 ze24h6=Zc4OMfQG)6(>z({5woo$JKO%CW*cuoxDx2(GQKK}H z>93wQ|1brv!-3YA`FB;`{FB*d9n8(Ydb&Q7Xj z-MZtrLTzz&{tNg&aXjPfq+d*kUO0UnPhtQ23YI*t^RC;~^l&8|UC1sz);(6(1>LOG ztkC&LZN~YCg=WghNyk3D*@H=J-A3aP*aMci(c`UD$OD5F?0{S#s+4bIx`+`&2Zwf= z>xNT5pS9ND$qK)F171YEu5PQ_aR3_~%Qmw5^_m5*zBqBe%;M zlhp%jwHpQ*q=zJ{FFDuDHXlgm=dz(1m2E1Fm$6%b$N5NIL7{#*{Q8oP-4TSw7djuQ zb`_ctkh@7o9}TeOVdKXT1SIMs)f25y3PX7Kfc@`Hz#5D5J04Nj%7TLp7Y%k(XnvOd zucC(MK`Z?jRJip8-y_jUS!XxTSH*H?9s;EY7q*r4P?I$MI}(RWl*t?>580&qv4aC4 z8&Z=DY{!~gu;cbaL}i9DfZ*0lpKA?Ua9UAU*r?H%%y zvMReBh8;zaP9)M(VcKE9l!?Zvf0E3x0Di$<+*`sq1lbFW8*tu5ZxvkMqO=|^ zVwMbSoCVoq=4-H=q1D;omFa2dgex1o5KB|K%3}td`dZ*Z4q0V#N)y&UWs9qd-=eQ_ zl^yNMtobsTI_yYnD};T?`N*^a978zb*E%05WD73ie6{tRQy^8rxRRZaMXM&)B(~Xt z$2y*X40R3j9F+EdIhn##bx=(YCARtCfQ=Bl=^0p0ae15aS-j=P&% zjPn@*@u#0Jd0d7?Mfh;|!vb&p4(S$sk}9zdPG7GwhThr}aT<(<%%C~W6QJRzSlf7>i)+8J3$x3k&)iZEfcI(qd zcn*-R@}*jRYByokXN{<&ljle}iKGklLZmqJ3l-`URT;P^pM}nr*yfrOzq>7XYPC;t z*&aVTm*er7!BZW$0PkCfV>8Esc_O;wR=pR;Wztpd&uTm^Wtrdr_h_D{Wf9lbc(pY? zZ4GY_sf5f^W`avwgUz@@AE)B~kd3!#YwX$=7LMM$Q}h%3_Ng_t_(f=*&Dt|uB${a$ z9@9tO!En^ru<-I+uoojDsxA(?F)G?D`kCNtnJ z%)KUSRQkrc!wu#zCfIB|t^>EU2XN6`zfd31ZI30kyKubc>^us-#A@hk z4jZ@rMx9r|T?D*94ySzJLd0c)C&x4km15yQeq@rUS`}dSKx(o?jkeXxvawWaxB#cxdMkPsqZsUBcT6Ooads);Eiz6awuMpxc3(auOU-87m~f zi#9N%(=mzhsZRe|CU^QJL3vyOA8a)i9DyrmD})CTPEE38VEt4+YPmpO%4UBB+qyF~ z4kcWysKyS+0|=#&yo802q*)aD&4S@IB{;c7#Xtud7d-L_X2xz7WvE*7m#GWf2m2h`TiAoRNF+d zK&26?-NWuHsxcn+J32o~Y&FU&r!#cC8YnjVdzd9ltgZQhyp+xUFq&-=>mV};u?#>! z%``=xDB%@ine)#B1HlEG>)N&{tnkvdh?NN^wv_YjS%ChDMvs+ zrIhMPUQ|7A!1gHWupF{7bm4&QF^XJ$z!cEBb-=cDOpKbVqw^X9`TYRev}6O5GN*xt^DP<_yNqrsyye;jZ1ml{bgKc9cT>uDY#U{ z^xZStRXe6#c`Z^NeA%*6BG+f}&`I>-Xp4#f=!YJoD7wrl**`^EoTNww@iiRn<2l+T z^pbe9T`R`4>%UL0QC#bKDaSq_x^pxwU38Ch$|Tvk-h0QO%XX0tVcF3w1X9I@uuN<-m$#%jdq1HZTc z99jjf)QWbXW=!P(F-x7QdnR_IWb4fio>>D@SX(8^nPW|ai2>gSuZYCWcH@Irlo$x* zRe>f`647;_WVHDvVM3&;Vmb7~>>&>EgbC4p#30?IQXbtT-K1M$pgpfTl)#9*FX>Fg zLbAM`$*{0885%VyO!SCFgV=<118c!ZXVk^+nFGY$<>AcMAe~E!JU zI1;+DNf$}d_`D={HfaKroCS{+q3P=z{gbgraA@E3=u1`8FHp&k(qO;74#^!zUgOOs zUno5zhC-F%%chKz?0G5vY>Hdz$x8_^1s*64#7!>9ODM?}xmen7Ws+6ZQz~V!2(pZH z%uFcHmN{R_2szB8ifmG$Bo*eNt3(pI=LA_N%aB?5Z~%H5G7}_nvMQ%is`FFEtIAYL zEeSkOJdXO6x-8IuCnB;==7h z^kt$IOloh_X3fv;ywsYWwZCyaH?Dwr7^@9DaJaPu|GR(>Mo>E^2==NtDU8X&>(jo; zM@u}~H|_ZGYTxAU5s}RA*S_gSd6r>O#JI4g3Wn+b0}Rtm43rW7voyb7@h%d(-C zM=w&!1wYv*+tdoyLHt-0+2Z_agxk+vNzSe%+b5*tY5~qX+-I(a?5jz<+{*4F;`DSo zdoXkm0aLZeTd$}{WL1m2-mornZ1N~}#-a!l)CZ%PESyxa&q+74uerXd74b~cO?Rmw zVwcp?NG|X~bOo^HP?zCQ_z^Be*oScC8OtJ)Dsp!ND4`Z-)Qcd|_xK*j)=k&&VUCYu zy|Ea-cnHr~IBH-O=0R}TEB6+(Xz&k+U#(xn*u<`aX!~}kF%r_QvLQ~p$}WE`_-izy zJoYU|i~99)WR3yXvI;eHVX?kEp`hRZL0ZBG5;nAgo2R)cE4??)r4= zUKL2U4rYOaS-^oj#yW}%9B~Yx%+gaU=}3wg?Y^FU|geHZaTj6;_|qfxo4?<@qXw&Du-hHjf|C#wDPVR~I( z=f7mbzR~E3yVf2rh|dn5+OW|^LgJ1X?ot4$wz-Z-*Kgc>ACRu^+uR2>W}7H3%UP<1tVj zuAB(_%tAurI`nNLn_J-Q@^N_J66$>9{0-1qlhx9yYPM=a=SDUbtzzRqBp{l9q^b*6Lft;qyG|T7rj*1o+xy7(GBB+(&E}YT4V{~ ze7Xm;1vzXahw~8-6~CU2`AM}R=mu- z2QnTN2wL_??}Xqh5?ZiG64R_-5^K4CVwGRdCW?v?hTQ zy^OQ#QyBf=pH|0m?D&^QVlzsIjq`Scg7PfP9_)4g%iB$$c%$*kA)z=8Ul5g)PM3gR zoKJ65bLWxHjSrGDkP7DZgS=xH-1)Ta!JuLG2xRBvbKdo198e@3p+hV2iyp>{JNL&w ziIJKwb7P=W<^~De>EQH$X_EMzopV44WGja*RHq-R3cd-lmpi*!aaW4;O#G%mU*ZoV zM@8&94lXqQ!1~U*dvSu4<=Cb4r|?;i=_8_Zz|{l#aSfIW2r-&FeZ%&CRf08@cJ1sa z>DnI)ppf@w)KPo0wz2cxNtk)CB&^@qc^|;_-JSR2hs5zBUj;A*a>L>cCHmFDOa*EP z;N%k*a)=F%Cm+MFOMh4C;5bff?8S@dgq^kkX`U5TQWF^+V8we2Qh{xnJ262 zd}c%U!>s(e?uQ@5PwcD7n!@0~>dDu2OVeVX3k3%{-bOu@m`vyCd+UuC|3y~avYtaf z01KHZZ-tGga`E3LYYpfRNI&)NhaUi9?E&@EEs?7qtO>r|(FyzGy?+NB2F_eyfBchr z9F3hzmRs@TfsJ{!O>VCH?os>8eX=c z*AvFix8_!kB3_TrzMs4HiH9lX3uCqV1$x|KMXGhLex3FO9TI7cOPEOE4f`Nxm_x`T`IXpHzFS^i_v zet2S*rSM+bZ0vHcvEHn!k;a=1H*1bBIDfe_S?Rf1!+MPgj67&>c!SCQjn@+1`?PE&~#SzBvB+DUSlR8qZIU;CE^f zLveoDChv6XQ63r^-x zIF7E;33Iug~m;s??hIH!5^7LS~ZwhY+rmNctM!)aXNaMo`O_j>Gl zE0@L={qwAOaR8&{#iCEQTfg!7zg75paDWM6*VIst7rNfSsRP7BV3@B^28dg^wgeKr z4y^#h@+B7*z}lbuMxpjKp5A%!IAB;B6TvC1@%0^<4C<*cUj1$syBE3SowW#n()tK$ z`5RS>OKNecTDY>(R*p@*S(ElPFr!_c-~p@S97CVu&adG90gNI1nKjDjfEt5Dj{^tGwsli0ViTvXu*Hg| zuCU9=c_3VG@cTa)G~{;uh1@RWcI0xq|3Ypza`XLA;y#NRE`XebNK%K`dG21h^U&>} zs$#+hZW!@^ifjnw_E;SrP?6ATZtq*o5Wqz$9?+5;6w6)2pz9iJ1umQ*a!8SjRL7=7 zHj~t8!5)a^MqF(yp*G>5wH)DUh}tkFc?cy+BF%srjVg8c8X7vtd-i^v9tOBJjy-2m znbk|`5z`tTI>=k(d}*)Fn1nJ(_q??2#bo7+Sn^Z;XOoU+wQfI^k;HaZPbPB1rDJK9pJs4{wY z<tSTf2)dDn74UBmeeGYQSSWGt&k0Ju{Z! z_k!6xDjMFQK2;LU3L{@5Twp5L36$s2fPe5eDAkJ8`9cYrB7liCq$b%>BT^TkTstm! zu@37hDu-_wWE$kUXMpLdM#b(=IglIKf@hn z2dGD~!FbCgQr~PGrw&iQmFfiE=o*ZT3&LqA{#R@iN+6RMFBh;w@?g;#o0Lo2;NL-8!qYer#^|T#ahlRvKizR90oykcj~L$ zw{kC4CuD_Ke@aNh{x!YzMd3kqWpT{ooV4rQaYX#cajW%K?)#JkUD+hpN1QlX0 z7*wDl6fu5eM&JpHZzpXpGJ(P^Vq9Y;7_9)5V-#ei^1m6U_vx>q+cP*mG+G7l zfudHswgQhMKx&H39KKHYD$-7P0%?3W0k0+?ZLBpt>tBNRF+b6J=Bv`{4)>rPu(Lxu z!DaM}&Dp)jZm~?A;fjwRnBlVQ`caTBu+Qq}W5jCp2#2u_Zzkd=tVcMEjXF+k@SX!W z0b@HKI@m<~dUQPJz?Bv6IdEFzK?m%F)Qb)<#*82oK#>v%MD7u)@vk!GY5{+Rj7j@I zRK!Es9RVNEa{|dU#Z=&5Y0SZF<;L&#;=Tm3;GI%tDRAEPGw?axW+>9vY1jUw?Si=J$s-uH0E1+v+{Yexz;*{PSVF-e))&9LYiH6nA+JQpSjG})npujD z4Xvzdz(#)zOKPEgI(uY}A5({|5aR&CsVhcf!*Eg?kI358!jaL~TIL;rK`;U(C^lTD;BkY z;k$MV6bLjyoMaaHYcUw52>K$aMgB&Lw9+I(2(&kcbD0;M zW*6F4~WREvmIp;~tlWgRTrqU|OgQd=BjAMIuaAe6 zhn0;|9A>tNG5Im@-fRaJm{2|VHWrRF8=oG;0L=92PLxs0E}ZpKe&MAM-qH0zshdvs zSb6egDV)17hs@Vy+U0ebg+6IfQ20AN=D?vzz_(WAS|)B*5Z}!WXIy0bVC*s5i>tF2=@W;y=z-tq(Xm zzlyftOLO2zbBnFYh-|AnUS-Cd>)6z#wpI}-p)CW8K26% z(bLWg6?k8au6o%4i{@VEP{P`Lr>7l$luAfbRg@v+qaEt09woBPSLUElD*2A^TC~Yj zI#-|^9u!;ws#D37=SOTxyG|yVqki#ov141vsh+mw?Ee?j$Lm;*gE9a%k_$ z=&w3EDJ;x!>G7rdGou6-Z&Cp8r%J4HPL_bVqxnE>h~ zJ#!8y@!s`{v#V0Ef30Hv?@XYRU{1(i{Jk@Te36QfnQhAXh57GPkM)>Vr+MfH6)hX| zqzdRsVW9WrK6L462uJFT|G;y}^ec1(`{EbyatP*yxqd(~?Q3o++g}E=B)HB84)jc& zLX!pfkZO*@dDmW0S_Df|qH>eP+4%s%WpBWc;SRp7+cxQr04G|!F<(>3J~gbr$_Zyw ztB!RY)koG`g3o$B2YoA}mlS9LTxXdT|1)g8ZrqQZ&|nlQ(+K_8WpTiAtJ!`j)hC{@ z)g(?iSaC-ezP^W-l3`dwi@hmbt*oY}hhxS=9fiIWK~&gwl+=Utz&<>pW2I*3mUt+R7HBh6{^e0X%) z?1sq4w83Sijs8YdT5r7ZAK+DUUl>yR!fLfItX2EMI_wMO*{9@87ivu1`-%fr%a)TrfQMb7f@ESiU6OOu`QdMZ1CAZ29*q^p9c zKZXz!l^DL!LeFGw;!8y+^XyNus?D0DsfY29oFfj)tjLOF%5uJfZsuLfR+vIu)w5Zg z%Llh1-$N>q*#~A!)6kKoyaLhkFhrI<#gU_SSC*b(S(!-7pipXG)Y)QXrWwqf<*21Kqf4)ln! zAJZ?U5?r?%kA>|@~tp;Z62#asG!XQ_L-kU=4T|DJec(4_RD^bkY}- z0gQ^olPuQkg5EK7Ft`K6As)mZ!B6}W=puQhZD<94qX;GfY!XCI210-DABwEUm6y%K z{(~qb2VZjf5kepQ5M*xLPO1Uv+{xzCcx8z*(%Jp>lfV;qE1>~IIDg?KBS^%T-otbH z`$h0UKSN_hCmlcay(Xmr;sPO3khy#^4|d~eGV17^m2TXz}dNy zJ+55OCHor$Wm+Wnk+E7Mtc~9^W|HV%zy)ib7@{j);}sA(cfFb~ z0(=t0oQ;PzD)gz=+&M9T4C;Xh^5-mq}O5JW%H@p$-)(%s%wVtGD3;6u2b~ZEDSDbh!mPdLI*a z`_Zj@zQe(8jcsP4*B2b=cpi2<<+QTEjjy6eJM_1cPneT_D!48_e=IG^@Hm3d0yExt z4xJhEI>P0kMbLU=lnytD=c##y`Z~_OCNvxCu&h#PLi_QBJN>+Ki5q_Z#2w;iP|!o% zbENrIdh6`s4KB4QJqqf7+GJ1LFVM~l^{^*wa;dRrl~f~HYl25QUR1MSK#usx$25BU zSy>7&)i@g#Dt*hG6lYosv-ZNo;U##n0r$~xH*xiZGV{T|K0JpvHSX%LYH{v0_Tj{} z1D%Kwp3`x!ognC4?hrKub9tZJpqJA&<7EeOLsW+{GY z;-;YEaZea9&jA7mS0LPossL63sBD+uWsew@d^TsG7*1Opm+x)eo9 z2l=ilRi+9#AE^*k1ziQIrAPs~pQxa=z^&BmTCi# zReDW(iaJ?5z3vZS!?oxl9-!n|BcN~&YQ4Q^ZsNJqGh_ClqFN*lj~glq@n%l{4~w_$ z8z}?nw(|j1%CdEshVWp=%aU1sZiPHXLu*sBMnu~QQ+{PH@=roBI6(MZNs0*rc)JRc;X?f35yB6{JqZczrl_x{Aws6MCi1JGib@d1>GOnW0{0MDV zG)%>Ay<45e;!umm`q`!dXI67qYjPQPKgInSL`z2vC?@`M;b#4`vHk@jA%>%|Pd6Jk z;#dj773ij5!Exc6N`HWM*J3=iTnXJ7z!3idzF2xppX0U8aV7D1Ee4_9uy$f7W_z`Q z0ooZY`uPKe5VRRR$ftO1GqoU8N-W#hb~*2Y`B8m;qqZP8$E8e^P|a3<2L1vY=HG!Q zGVWN9D>8{~<2T^vx=Z8E3{*WlErG$a1$TEGg6stSuod;{6EydudT=IC2V<8*4{D}I zbM7aAxRwEf{|tMcnWhm?lnt?hbhPc=47tR1sVN=VGe4u*~BLPHiHV zIC*+#KGvg)t$X#CaZ7j=CGjGC6(w<0Uqwm01h@9}d2TG7G2AZJFT=wq7ow6yS_4<7 zD4#}YgxS7<*Y9K6Dwmf3GSR;P_p|(7QVpIPGS+RwcW#Z=xKP<#N6uP6a^Fi7J4()m z;%I8t-!6M2_~+OcVS1qXf&RFh1|em=1c$p|J#9d2xiKEbt;BY?sKj}gU=KdSb?hq4 zBn%TC=Ahxhkuw;0`hcYZ&8L(pMN$dfQScy_9R^E&-K>I4SwZItKR)!)0>6^o#zn_j zgFkpmKf;%n_N`T{12II;maLZz+A!8yv}cc!0eIgVl~y;ue5i#>L-opfR8dREBvc)u zAu`NK;I79dmLI*rs$d|E+ZSHj)0Ws?+K0^5Xigmr!+i0aemgkWD_scdwN~qTs6aBM zivkede2kzPkBecZGRim(mU8Rf^;L=Y3c*u!Iq;7>{xH7X$aOV?|OZ_{*9BEN0m57JLBZ7#Q5}9OgSJ&w|SI=#|oDxVdvm3?@|p< zX2}J5+O0}!5(74_+AbtEvOV#i@{9(aXlR6WHy?^~JG*Yh6b>6s^bXm=DCbW)mh(Az z9y7}G`X$;@JB~=hE};f^2n+?gR0^6u0@_uyOKDe$NlIQ#STJv)IR;sMNPXX@tcTzB zX-11m@sFaBhmw`}7vl3-BXCrrLz*9(J}U2)+lsc@DMtAHJG>g!i6-KL3#!Dpt%&fW zdcvcSkJBB^7(!pY-e7~RQGX7dEjQNvOD5Bay}~f!)eeS&Mi+fkPg_XLn3%1wLJYT@6-%_$RS4fI(zMh@9?U6NyQ;*B3L>a zO$1A^&2ru`1tYq_s%F}~HfLuch>0qv<5mHeVrhzV!(lWQSVS+#TN$amtU!D;1-&2_ z9~RRLX@n$E5zHiz3%X1z_M=eQahiwHRCWS*w|x???Z_FVJT8w|4{S;vaRWJ?x{6*y ze1SW4Q7PuBG)leT!XQ3lHxmU`B=OpS8XJ9=IVS1Q5hzU85B_#=&tM;~VuTJ3{su6f zTRoT#8H29@#sjOkkbyp{|0$j12A|>=IvRw+&Gp7om>d$@J>(HS0*gsi4%Wxl6(fdc zHNw=xadHoaYoT!9S*!9fLt!v&sqyLqBs8wp-AmUvKAP%gU~uSdyG~(vSdz)i7Vvpmia>FM(Ald=iUNqR)XN%j@HRIP@RP1ksJJj{|x2 z*pGi7f*YCH!~(-Vris=8^BJv(Hr-{|&(*+O>wv!+Eux08bNLL_B)e&kX|fMksV*EX zEQGEx+Cn`%GCUc7a!qEMBhkmB*6Z7yg1fxv;O+?++BD4VPHIa1>cdM(NwH`tyKG3Nc&p( znco9}U+LN}SX%Jmz#4pl^Jn-zEt`oID_Q|Ij|_}?9J7C%#W){Y7(c6vqrX_k;=;xF zG_DE%-=g80vQ1(rnbAXqb?XU2}>>Fwe_{H;g8E@^k_|O); z?k@Dn*?Ee}3GQ%o@&j^-;{|N%L6Zzmxsu(@BsrRl8tTlxg%0gNA#l?t^lrb8#4bQ* z;PblC??tGkKI5Vr>ALM42>2u;faAGbaLj4ao;?w~>o=s|X5$M&$Kn&@owpnDge91q zU#|6#ntFdMxMA|z;}c`{wZ|vLtTn@*1ZQus&+Ob8yPzrD0{yXwO@f&j($BS_rl6*B zV!QzFQv*xB~)@+XlRPuOBz} z#ci%EVEUP++i)LLHqUJyVyY}N#w>yXJ`dn}EuHNI;eTQ%X&8^SH6M(j~&2H^Yx0T}b3DqjBhEvfJ z12qdG<^kZ6@0#DRBB;*{Ks`3Gl@#v)wypQyci(--UfcJ_;LEEo)8_`nYqB?K16F=9 zgiXg@x-9?|)Y0`y$91r)kD_p#h2l~A1@joYR#~|eJWmffHZhy6k=hV4x(Yr8F<>SCLcDUH}aliEQuL|k- z_D!2Z!)FOXe7ec$VkH>*yp@u(-hux11Y*t>n%1l%X#HHYj&UQ#}gdmrq+Y_@>5rbJs)N+L-4 z?`9LuM7$!Ka0X(tjW~(kbk<39;&Aoi3!;0E;S+1171byw7#P1^&aQsUe~aW5jo$j;+9fNL)h0fNszXhDz zgLzPcj|^iLLoj=IO7swxk=z`aW0yJ70N>Kg6~#lrSLLJ6pGWA-EY|0Oy-m)9Xk$C} z9m*CM#8;nt@YUzubLGG70*RGI*rgHH0ZJcCzg>PE_B-!u|CtnMd@uGt>H`6&-b3N;%(>p2Cy)4VfBX;%gr=&i<8xQTx7xXL)SoHtLtBFQl))*|AI1%g(QUJ> zec`4CCrS!U7Br(6s4p!%~70rV%)??3cuv=&XQ zl_tJ{w{oS4>PQKwoZUPx^RFR-Dl8BG0_@sChYK{rQojXMI115^Oxi<}d%G}MEv2_z%Z zfrdE3u(5uOX;3X9Nc$>_LK&f@g5|~|&0M6;!M`}nj(ybR-$L;3MJE617ifHl_YC%B zKk%ih|HIz92S!z$3*VE>B-z5i3_93Rqog%zYNCw1Ev-i3@>;9}~J+}oJ=#UvqbqqArk24$a8tGYwI1dIs z@R(Ya;njn0Wzzo!Oq&AJesHSf8_xJ>XnfX$w1eiws(dM}McZkKQG*FdrK_%%!J+Pv1-`^>?(tha_I!acF_~+$xS3FOC;kW zFt4v|UuLthd!FRZ189vcaYs(8QP-}p@$V9M-2IEV>z@Vj!Y}4>i0Y#!3EpL;S0AZS zXW1F#AgDI3rVt3oW`j+ln^6sPZunA0=`EfgmnOtrf%>rezBCiOi_G9)@vC$-tFw5w z$kW?8HcmvE5SvmZjd_=$aJ~fUXI{J)I1y>y$)Lva;3Ec3==<(JTBo>6mlDIy;=STQ zsGxWHT`+#83-Kb z1YX_zoF*}%9w_ZItleo^m4%olDA4jeCqsAydNz32F)72(sf2-tBT{M9vIBu6=7?VY zB35nuPGhXj2ia9w$Qp#u1>ge>BJU&+umJ=_3Z2U|2w8>cW~V`1D78p~I9qBl3WDyG z0~hYQ1%XrwQ$e8pNT7|65}XJ!P^Ul!H*qcFAz{mg;f4>Xf4GT3nrno)!$H;a&L+U6 z4zXhHcYtVf2iYCqllyr5JmN*Akf(^Jg!px`J@8vP&rVlP_$(grv{J>hkSEO3z;hFi zh&?xHyeo8e`Cj;lF69(Qu%NlX)1KCE%bbCkr%53>R^LOw==mjf2HJU0Q1y$|FY8G- z5v~%34GUll!n(t#sFV9|;C=PT-8bI_W(o9p;AuK|U-C4->f=!MD7d(Lap#+^8u(o5 zO9D>oJCta6*=bgvAs6Thk-y&txxux9ikGTe?K&6Q0-W<$E0Rbzf@Y3(k1y3j-JR5GFm| z;l(`-p2_7tNAZlm($C*F_8}*JrY|cY7Y!M``}z>=->84R+*2gnSC;ijCulj;B<^~I z{_cB7{vLX>?_9A-(R}PkP2#SdI!gYY9CbzFE;-fqJtTimjyflC*MmAr{+<*S&6(ao z`yb01?F5^iGmoI=3f8x8kwoD#a|fyRmBy8`!o}tW7*yJ!F2t+%O0Tq(R(jF2miuLe zosBB{K7HLR!X+9@qM<5L5l%FO6BP}KhK5AN%0$D;L`74gp(#%ZGN^t=AM ztw+DhU+W(a@He(o{#yU|vVNDp)<5>@clm3@`s97P{FO<<>JmN?*V(=+7$SDJ&df-} z?$KH0wEi`nkumDNTe8W2+}k_GqKH?@HHIhkX?zjghc#t(IB`}TGb_<(Fsl-c-uOK` z$*xv&;7I(dG*TP`*jFj(HESMOS-a#H(2I_`T{--%*R=A_g}k$lm+jMRYAr~#HRW%D z8jhf3&bg2yij7bqq@gkk2@|5al;0Wriu;gRJhr+t(pTOWl1>om4Wtomgq8fR;YI_!)5Yk0(dg}Y7A$8-!IwK54g{o!T^+H(GE$x@e zk<8mOsngB9?&|1^`uMTds8|2~8NGqqX6-9wJjVPZ1dc`g!fxiz^D0DtZQI*VNpK@w|r?P`?HcC9vvPW z@qc`g&JXJph%cyvoMP=Vw{;6FU>yD!j0}FcA)zNXSOyF-Lokh=;M$U%UNRE)92fl< zJ;TxEAYoW;d~N_8!tP4H2>uCr+0C%Z)-m(|2$yLp$W{;nD;A9;Eqb%j6+0y%e&ywm zoXA?vJ-Og*FdSI?bArb9iBJx_(Iu858Fi;L4#}K%XRzlca#m6mh+AjKSp4N?!^gHVr96#kERBOADfW+Mok~IEpndN=gd7+^C?zx|L z5aQiBY$DqUOG)E@PuoROtd2@=c}X6NS^J({j) zG+k*L78jXfM|iy#Ipy`n8@u_z@menzp4gj_HXn-E%AnU5(alwT*B5AQqhR0lh%iOw znMsRPXyjs&l=fX8$Mwy6=r&zp|z_ zK3~fgeqo2yZ(2-9snA_N&>_MoT&1e%TId;%z5-RYuqq?H4Bqv$wQzcG#}lc@AO0X6 zHovOxqQv|#=IM#~4Va?;rLj+ZeV0zYvhQZ@fp6-&xgarrUEj?`r${f-@YiKyPkg;Y z=h@VEb7|r$Exh;LT%P#KcKs4OWlnE8=eK)EglJsPB2nD3jkPAwXMQ`7H*cSg{!M>- zrw}`Wr9Mf+@X@>#bo9(A-M#yz+3Qw7cv2Xp&5< zdeYm=U2~8%n<2jjt&=B&Z?X6D9sN|5Q=AiD>UxWX-ZgfA)Dryf;a|Rl#O7oC%SAVz zl7IOv=tPbEGw1Dsj}^J?$YE-xkKA(7w%!fL<6i2liiJh8+|~BFrbp!lrQ&B!q67AK z4ot(RTC-bNo}1+uE=fC*=WuS}G+F$bojU1+k(i+xe!k$J3bTq21YXrAbJ3^NXZ*jJ z&)FU5@t7B|sIAU}Dg)&p=kT$kc9s2z1GA_01j_ZKD1Q#x@ z#i+oAP>M6cHJQWvWvmrZk=x_1sf&MAI%jb`iQKA}1tqyS_jiwu@M5WsffPqzsP~0e zFPu{`%%l@fO-wn5bqj?4-gdoBoQJ%hPf6XJz0P5g8(>FYdFsQww?-|rGwH+p50=mr zj_BB39V~t+w#2Z9;Vmbce52!lld5X3$84p5Ox5M+y~J2t2V1nJR?U`rFQU!9;%DM* z(&lh_@M)Y)2ioIbd|WuQbQKf8p@wYUF->vk8*_&k`W z#m}EKpKZ%Is1G00aVRO4eJ3aQQ|H^$oT5tWuUVT_%SQePt^NFv9;MsmIOSatD_y?S zrl7^0!*Oecy?%z0ekt$d^<#s>P;j1g{YTf9U6;V%h9Ut=kzVU|BV13pb?S2;N;mp! z{1dy~0RKSX2)hub9J**AKj9NjWX$X+-2wJ~4A!YR1q#?H8?3F|!bKyptJq>fTg+IX z#f-9_l?j8l5FH)aacvD!F|m_rMBoGbEGEG`HWsWQQAy{S!BfsNiznD^b5=$1fmcEC zyg6dF&jf^50+xvT`0?|oyw{+xx;6mM}%H23;gS<3EriiptfL4G&!Y)+3xR6ABG+h?7Cf?mj@J-~pi1D&|s zkosqD+$2+W=eYV)d06Ih%}w0*5+8ol8|}9OddDp$gF0Nxu|**%U)oS4ZOBLKZCo3! zls06z;Z#6fNE^5?-4_*p9$M9Rze)3?B|A|yyxs-B&8l~yw!|&490R=Z84DH@R%3sP zWT+rMLrV0A391__tJ|fX!BE|*_A`B}w9aPJVoH7j@L~1X`;2aDVH3mMcWwu~1apr~ z=S3R`7UR>53S32WS~`SQNY{&po||}ol0>TEU7U(J_25FLhVHp;4N8BG;@nYu^M#M$8@ZyFOJe-UKC(=_YscAP} z8bsqk9NW+8yO5=iDzR1!jQbOnMSW}VW~JX*7Kz;6-*NV?G%(CqF5E24 zGB|wqLftzP=k!$;h~fb=y|1ze<%98t?3yPeN-MHSwRNDF;iihZQ#P)YeaBZ1ewi#} zQAnehEv!w}-~k)auspZY)A3nc^xd<#R&d8PbM(*@AfTMVE8E;9c1Vd$huG-DxBiD{ zKrORn_oMm<|4e^p^byP>!auzQCT2*Zs7=P+zj?{tC&Y6U^)8}n1x)RH*#sV*Mp)Y7xT4hD4V4kt4r-7f1(WZsN@1f<45BWEXsuukoW`MJAK_3YcMS71i0K=FxvZf19Ao$3qfs;?7_z!~8r z#;a%?k}sowB)Tb_HKxZ(k=g}1qwfpTg1QO`V#|g^a3VNe>mU6|*Yp(nM+O!R!bJ_1 z0<3R&sjWJjYh}eQ<0>`Kx0Op=y*0CM#b{h^>}uRMW)ZHltT-vpDDwm?FnVtCirsqg zZmZ|u@xU8$IPx}MqUEvo3J^A*z8llf&$L|k;vOMhq0_&6a5(UW)q^b^qY!id)IMg7 z;urIXTZ+in%3^XpD=2;+itRZBL!HNwbk@U=JQ11rjbkaRyX{5mgXsI{DBXz_-|g`m z+GNWrw8R&EZH&2SYf5av%ToiB8 z_j!z}Q`b26#^-5(K0>)*D6k);QvuIxHs3;T-Xn!Y|Iy|}jSj=uc%4H2bPbb%nL1wo zONNuHq7iPOJRy=-bGT^B#^5(<&EMuZcZ&|0^es+do@Na=WY@2E9!!h1;;zZiCRC$9 z>&ww?CG~Olc{L(tL%ZW$AxsvcI}bAta;CHR?c&`_!s;~%W`C?-LK@*On0tZ@!ZLI> zfliEf@ej^;Zq|q_t)?=Y=!)6vO=VIYr?oa`4?TTj~dDKu<-Y| zkB}Wv&QP;KmaL=hlXPOcD>X*W%u#)$AJg|boi?HGRcoCcLxkp95FJ_?cQNNO?C^AZ zn01^;M1O;B>S7eWQ749G@fl`)ykdm<;Rdf(g~5LySEldt@hz?m7mIw#_5-UKJ`!+p`6hcsB&B zv#jjI+|s@VyGQRV;4@g7>EJuhv8G$ymOoZ1iyOKucDB$km`NR2|8yYg-nhWrJ7S&3 z>K+H;EWOxAK}@qMM$7?M>@4h(83|EjQ7-dsSD=^as!mxcxQ<<0GmvhmVx2!kYf}3M&uf%_LUqai>>8B z&T;2pd=ge2*MP{cgGT%*FSY7N{ADTEsYmn+B!HV%Bb9!di7VuSOxPWE92zs6f8i{^ zf%vHYH}3tctW?418neGwx-$XHUlHpVI$Sobv{B3ARM-WX_G~)6F`AyVx=(O)d0Sn4 zgDWr?Y2s>o3;%bc6X?r6lxZqmk-0=(BisdMck)u)-8{dOd0;1GknBysWgSco1YU`p zNenlg?TXgP3h7!OO4Z4@i9w;{pN7imdm6@4CR$0mZvrxuNy(b zV6kYbFT8R@{ZP)mZ@cWodwitd`s*=!8y*$m~f-RewX@xs+1@GaG(1NWoX_W`$T7=^?wO!){MB?_1u~NC;ST9fn@Q=H; zh&^DD^x9(5F0`khUENys+{szBy!??MJyunW8o9(%O{w z*^IQ}XP`lTrgZOe9#|2pb4$mgP1(r4 zWb0D;tzV0#W_IA!v@MXPsL`Cd zdpU4}v_vaXO3G+bRsk%nNf{>v)hnc_CAKEzQk_R@Qc51Z4Bghdfn%Q5&oF|u@WQZY z3?w3xVN;22r&Rja(NED6wpzkhuF{Q;eaRL3k`eoolrAz%SX+x+f#;YTe?-IUOGfcP z=by=VdzD_`GCC~e$uc(c(+a9SKrVw-<=%yLB`vgpY&D97%eoBQe{#&2VwF~7K{M|5 z*<)d8WvhCa82NW`xZm?S4M(qOKD<$JufwFj41JbmOJ#Q3MWI%MM%J#G_85x3TzX=s zb>>7C^S{A79KOz!2~`g?7e^I>e@`a@Xte1WY%TiOx52jrkSO2O7{#y9eg7?eK2b-N z^GkaD!3pd+1^y_&bVevCcYKj+`s>?ebA>Qk%<9ay7PuHTQ~&OLiJ|wDvCH7~rgL zlHh)GPl*V`3vKe|e~+e`uK5ZlrJ|Q~?r}L~)-ykoADf>D)YewPHrfwsLADiWn6{2? z242bpu`o;J{M~}3x17J3!+O<73PxPqvF5XaM2Ykcqxb}vfS$Y<7s`4y1wPnto_JNx zW<*zTr|)vWxkhW{6-0!8O3?9QSxU16uQSC*S#&G~duOxPEUkCTT7rVGuwB3a9*^nB5f;uc;ke2f;}m5@YdDqZIn1djexG)I3>y?ZfYcKEXvtnJjlKY8Du;)-&9H&3if;1~v|(}lxc@BO zJ)$E3$Uu%%(_^lNk6A92Y+cG5r-6mS8REGCLBa^_;(rOA#S`S2$78!C<(dNCBRrdU zHpAYP39e1Kt7d3?H-@=k;~KezsO1jwNNV4giX?fR-I#qRyWm>73wDSkYd8&n&jI5o7yME zJNn0KEZrq-m+m@sjW>WAkY@NjZH*i$D7rALZY|MOFRf9l@F(6_d+sj1m~jDyfw@^y-H;Us^1jrS_HxA=~@KG*TT10#m^b7g+HvOeXJJ2zg3G7 z*<3a6b=qhxxb0vJDO9OOYC#RG9fe2f%{1n>`AZ;E(2&i=7FDdYcgY;_&CJ|rz~$ki z%mKnX_>lpTPhlDtfY(-LQH~&+CZ1b(*6~EZPl6ycQ@d4rucTBFhVJ5r$S3*n^Qf#} z!rktQifg@F=(|;P`bwGK%t)EEEt2Ms|3&kv{TQ#H<{Upw2sMv%?=ZX0RWkYp| zbA_jFOEK-afsnhl#_~KYXd8ML8WKst8g|jN{me7!^ANw>9q~R2-hsK|)6(l{{Q`ZG z)UtI8(^U~7SaXAj3|6N77ok%n-5NovFu#-^l&M6H!P`yj`s<`~8Gr)0Q?ih!h^K@{ zlFlGOSh^gC0dj>xQ0NI9X%Kvq^gG%@(6H;G9w19n_CPVa5+5%GvXpNStWc=_;TMd~ z-spOIT9#-D1H&E<>J)J>{sGnE!wd~rn~0KhcQ;Gq8srT`b3FqL9;i3Km&3FX zQgK$8X&@L%h!=J9B~%rFHEJ1eGJCkvhfa|(*@FSshWYB`ASrWQMpESSf;zF3N5y7yIDosau?WlF&r40Vk@?mT)z=axqMS(_$VwgiIAf75> z5*0;uC>TY81;d4PcxgJEagcBuY-aeLrQdvvVcf<2P?!eEupradgMti^fm1gM`3bEg zv(*|#`uhP`z9wUy?q|r?`}3)+I@?p?%92dxF*|RX3qB# z*EgBBIbJ+>6K$;n5Xu<``#jbrt>-oC_!|Q@II?2Fb3GaUTVVYfZ2lP70#P6P>tM}} z((9<_->UIZ4SIMC^vK@^{Wrk^6D9V6H#$8wRe-ctlVJIQUvF4b{Far_=iR@f^YOrR z-G8H}M$3(U2cKV11)w(D)7aAV-bXM5x1KT?d{+gl0WJZPxIi{R46WGptG#_I#h4-Z zkzk($OG@yFomh|t<_x1&S%$XC66_+lYt$;MfHe;4z$%MiZIlK63ldZyw<7Ut<2CJt zY)p?PTU%7wGdxpYw>{BCge;4r?e)6)jaNZMTTz&awuA6)m~bfX;ZOY4w7HA#g~j!1 z0z@DPsK7+Dw3m)$iA81Ec~{uIl@^4jS7chgy`_?sV$?2)*C2u)wmxIM7Av-Hbzv`Q z-72P&)~#-ADXm+*u`hV7tv;}>`q_wAQ}BD;AVZ-rSVBH}e zG7By4hvgD8lzw2P^m(8IOGtzngjfvHa9Of)r@iN%%}#K_efrEqA?~t$bQgw}q2A{TGo z^I#X@A(ud`HN?GsMAxKLY&@ulJvkHiX<}YeW1hA$&=tPu#zq4jAph3Qybp(u{8QjZK(53B$2eZGKwsCYz}1 zX6uQ<7D>@1&Lt_zAfS~1Dd-7(fQqe?`>c29FrRLdRBkXf+1gRqBBAK!*?P<(FtXV~ z^b27+&mw(}PPdW)#L2k0NtOwMB8XLLy%d|yMig7`vhZ-Zo=wCZTkmEokx8`P8=Irc zBx7=&br8a5I#vA}y+ZHlT{=h^UMb_RmH=o9p)W+t?mnq{Ql6~ z)ef7>;}wp?6D&Z{h*h@}m{!oS@!zh6Rp1M+97MIV1khj+tc2!*Zcf5*Jy_SQ6&%Tf z4#CSD58*yB8N@tQF!r^A0p|GoLgTp56%j+yF^O1Zmq{Lq*Lf1I%f!5u(7%?`uXDO? zi_g0aYgpRuPRzRv$0oN)CO+lZBnq8c$N)6EHm9zI@LpxX-Uy^{IS^w%Cw)Y7=%%2IAwgj|`HB@CjS+s0E=>H5N@4gprNeg= zhS@&&+Jr$XGif0M2TqiwyEuW1D&A%0!V(J;!%qXr+3yp=a}(OK2-2UQQVs?Dlyf40 zF9Q=CHh+z}Q6x0?X$?^mXVx!nDW$-b0J87@$V*fV($`L|WbgD#H}y*=Rw%m{uZ`tJ z`^YU7Bx^BQo1}33*xR`ZKc34Oyf)?}*EMY^ed}Fxf*C-QSy;0U-lDn4%#cc@7sR-| zR9-XmK>_pYQ*xroSdwdcMF^4%!6FM|j9~eD&B!t9l%YDL4^(mr;#|jM=78fa6ywdm zZA^|ef95Q>k2i5>>y;x1>rJ0Ii03q-ueC7XNDwSs2$?;oQBxxB+s2*v?DlRu5}|jH z7}dpFwRl4$M+|PEZPw9Ufhsp1e(e*ixyOe`cbko=hg*mP`)q4(!2||Lj(V>?ot*A)x%7SwMIyjAfgFm5U=uz4vt+QBkmrI?bY!@Rr}WujrK%56X`{8*i)l52y) z)aZT*wjKG3$6uMW#554|pdGW0TFBNe%sd>-+R_(tY$Dw6X_XmY6x|mN*n5Aom`hmn5;pODfLieVR}EnuSh^d=oVI=My^k!@Ui90r)48< z9pkZMhSM>Hl1I=m_Hu(P+GxJHN8~>J#1r$F{Md!4U$gt5Lo{w8rPom+yRPq(WkZ<6 z_kC7O;`=`9{iy9I6}G4Sp+v83E1Hw&{qi!-L+J}F^7K+&-jxZdi00{qObB4pmtWlZ z+So@$_dI|C9YG;NtM&V*_X#jCxZ5k-E6h2{O7=2#C`5 z3b6nc!>snV}N|bBv$AZL*(`fuS9HZf910Dhe zTE+Ma@F#2dki=sJ)Nn<;hB_K5<&A!%%dmuhQDwB(Olf_QEA3N|Ea|U^?H^O(Gtr{| z(V6~=ystaR%4!djHIge=UE+4aTibr4^uXD4N_&I6xzV~xzekS7rY!A(W3Tf>&l7l4 z0$%BfOkm_~J1#qxCFZ%$rr}4cq4(3E&#|&?$de^M_iE{{$onV3K0EDC75HJ}qyqk! zhHQ6$Za?@D|DadW*JwT0TYo~|bvQN+E85r!F^P?>Ff2?tSGc*JAjV$0QAlOv?6>=( zFNsd%xZ!$MkC(ucbC^4F1@O!Pzp4Cz{aTOqufr9P2TlTM2@f5uP_hfWtAK}c#)W?$ zEFlD`>Hg@mqcAnR3c2Aye1u?VAd*YZ*Yoz)Yo9h|FS2OU-Wu(Yq*U8BE`OJ)+;XjC$tM$Ugh2%_DcTUzRa0b z#$z)+V&_k3?Lf|PEIN(jwivGbj$^fTMZGeh@7gP;n0s6#I1zc1mVQK^L+rtW_ShnA zq!;ZT{M)0IbuuIlnWBu++(0;`dC&ZTl7BcW4eYP9AnZ6v@xCAG5hpFnvdsy_Ey*pAJcco z-<3;nhO2$il-7OqLL5hL7LH4~b*|K1^qlipz|{IzK(ih;dFAn7iz6w zsdqHT+Gr$mk;u8ND;NRP;vSLOG610Y%ow1R)}4D)+PwumbG%^Vn{LVJdP0-psa8_^XRKl{YruxJO@aeeW-O5eY-#f1?xL`viWE9kZ+(j)lOgC~gu z@(id*KioxVepJZ4cnpRCf~GRT?vDhI7Glf0kagWJvM$Lwdgn$Jy5sFt^j}?M;o5V` zhMGEP21JezYPm$$8^I(}NBBDi+Q{JQ^*dR8|I8S>fEfLS8rEc*|+Vu%h zsq7U+W)UcRRlc0RoVu7u4ldx6XIZsI`?ZuB!T67>en}X328K)YOZFPr;9_^dY&qnb z+2D%ipe~=BIP<)yD|U6#iM6@4%w;(PP;b#Qb$X!eO``ENLywz_LjVb&0%u-lL?d>J zJdXc!jpUko^$w&r3rW5jus;_Zm;ofpDUx|ZLjh^o^{nTp0*UDZ&kYjcep&QgYup# zU%?&c|0S=vDBIu6Vka@quutFKfZFkMdn>&TwOv$TC4ydxZnV7RH+rK6+g5p_H}Vhm zFBi;tx8LXulOsrupQLjv@@}v4ZbzaPMiBTM3DhiNlAG)@ri?42RdVFoMQ~@BA!QU; zQbhDD0ckB^+jm(fP>$S)Qb~yAn7qu6_mO;D*{_KzZ*Kc&(b5bl`BRjzo!x}~2&*~F zC)OvO-`25W=|;?tSgfKmAZ#0X3y-^0<%V%AJrcMuf+D9Ym-n8k!{ zFv=xM^+LCvk5BD~b zQ+jn8vN}bRph3NI{+Ql;k*rQ+W{cS832gXMEgD2p&|Zdzb6@f5>~Qk^XYds|;`?~ zv2xjDymW62;@*{&CJ+swrQGTl@DxC{m>$v^wA@kGd`5kZeguzREP)U!cu;{6fyVSR z>WE-s8LF6Z5-dW*iwj{6O@3yCUb6qWWwWsT$B6T7+{1iy+Cos;-eaa}?=fT1AM+if z`Q=;$?Ay2^?mhrEbc?Yfn`0UufpF@rEv~jy29+4aFN`bBMkO#5ucoQRuYPP|;t{q` zfXaX}CBt=?Fw`sY=fScwyK%OU-xyJ8=cvjKtlh?FFW#akuVd2n$o$l3vk;E(XtfD} z3bi~S1c}%cJO_$^;>cJEEEiK?JH2=G0)QXbX}BREw#66Q;+NgUh6Qo;y!uuK*0xMK zjK-+qs8un?9jzGPV>&<0be$xJA`#(D&6gL@@uUJB;*L!%)FIy3q#_;StJf3)v&35y zzte3!6PsE>L~OQ9XSN7A4y4rU^o`{R%yr>AIOs<3$()rAnhzya#~=)W&l&UasLCGH zCHk7M0(C72n%R{vx`A}%GfL*3<#&Hl(!eIR2CX+f}?!v~ay(Q0XoA$K zucNOI;N{vB)JS^k)Y~xU+d3MfIqD#V)T!5}=}2 zXVZe!BM!le@#@Fae7^0&Qs}X8cjz&FRJxzd;8{EWSJL@Q()n-yNd7#@udjiy^J`+R zLGlmO)7tK=AQ=bFnkbGf-c?wcq=w)rW<~Pq)IP)>jW)$xhw%?r6R7`1#_n9nVuuS# zKH?q9nZ>lrs(VTzqL-MH^k+OY68>4K%*W736%pzZGB+LEgKFgE60ADui^e8-jaLt< zg%W#Y8Xuv-a4b5g9zSiAlCk@o!s^8niR>b17j#+&oqGc(He!V3xoa~d!Z9sti~4Xu zZ2s119yiv1nk%6Tzq)x6Dz@D}7a@*0;9BoC`<>37RAJjrcZDNW7~etkPJX@e`ygS@ z@(l8vf3Q7wdmdNtY@eUiUYQNp?enwEy-u@R1AlfDIJ~yev^rImxi{PF&Xy{Ce>Bxj zJB_(FODfo%C9&H_V}Y@O3asR5;0g0o@dSCwc}jV#dG{QS&Aaz7zlvYQ?-72F@H@!w zAiqcXJ<9Jezlgc+;iklUN79bSom?!P>5Y^$`aYfqd7cp1A!GT9eO)`H#pB=Y)~7?L z<4HY2cVyDWBbSZDH_seNk3r$s7)<)}d*2(OT)&4>QpXO_(>;@67QmlOkI8X+Op0Yp z@`)maB;HxVdzfbvPkW{F{Da%)JI%Ls@4cgY??1E7WHJb}vj)&*5Xd^kQh=A9Bn?ccn#OrJ8+NTIt62AAX z?YCvM4n>x5SuUKR_B>{O`GLqMXm<&A|U}>X8)g2Qh@8U z%9^bKFB^#kR>gE-ke&iqcOMMW`Vs0;))5ZVgCnV^FBSD_h=%%FskEkmXrWd^BO=}dWQnMLM-?@buW8J-*bdNB;aGAe#~>|Y#J2{DJzs83mrj0I2IZ-S05$$ zFwcl1w)$x7i^HoP(j61(Wka=lvpe)G1<9(4g${7GiiKW|hYrX=E>)_wQL9uq(#WVj z>oA)~9Fb3q4u-X?H|9+D7EJ97JS+6<(tY*-j_7VS0y(-DJ^@JS^d7YN;0QuS1P4Sc znhx$?6T#}w-5o5H>JXV+yEcn})H=)s`O77j{FPoqk4|1007LmdqkEqKb5o%sI*~BO zMZE|8A!kGTpKQHN(w*vGH9^FAe?-rqeCrDZseZ~z*Vt@!qvj?qK&;!{796*|3~MZE zY%VuXq##-rO{com-bHcOPvS0fW|gZsCs1W<$&px&B}R&I(isF$^D|ORwXZUE8Fo9d ztiXKt?KsESn4|IlvjP~)0Yb?#Sv2t!%T-?5W3_Cj2OtntHea#F;h-hse_UN+9aSeMZKy+0`TUrU4Q`Mu`v**!TZ7a%4Edcn_Q0Q zyUPb|z06Kr1<9r-zF$u;bG4$?OpigjITkv~<=8;6lVd9T8^bsUiMaS-k;Nk<=CKMFrv!(V)-o+*HKB_T z%ibkaOP3502h8x=6HNvHR;Bc6Pjmc;DX#D8!#e-}T$qDHf>8I-q?sP@xvQflKx*rRe8yGeljZdutXU3cR-}_!HG^~4bBpx~n zP8kF-g8oudT?a%fR!|S)veM-+R~n9P$9A%H(P~5#A|;W})Rk&Kl?#T|*XSyU>PBWv zWJ2o7u=)T*^?oi(ho`Au!~suj!`*@ilrb4Zmu-KvzEODED!3NqK^v&F2zHwL><*IIYe zBb29p{7GV}52IIL05uqyq*H_rt5=C&S~rJyOaEKGlvH8X}9>qdvruUbi+0#7)WtQejH*rZ<|6^pA-*hEV^wowHvZ1qeIm zVfDjlx&=YD6Sq9-t2C94>{@Fy^-FR0l2T?*FCS|stL@nA>sBF_;Mm3q=W;pWXyCH= z)Hek(34h4)YLx3U)qjp3)1Sc$OOL6IEQH8NW>tEAf|tsl;BY_=dhdqAb?Q?bry9c` zhdTVYQYuGOcoYy3c+Z}8F_qf1Dlq$jE16Jv>Q^|`K#iIDn_G*rfVE}vTKwXwZv&9V zz`(k`%JUOfh1oBjmAEjp*YlIfmFDqFtb>sp^LTO8CEwVe9WUKH!8|^5YmPZknsl1` zxYR2ZamQUPaaV;TNhZt>E?KcWntiOdYhVKnqY-$90=@t4A~+Ci0msTZ{`Bw14mqE( zPH@b6@B8hQsj_`n%}?E)LrDYK#|~PZOXZZ1J_4JwpI8JnB)sZ#F!EX=G@EXsC z12fimwsfrV+>leMBR)8=#`DttA2iMQ z@m!j^v+(DCBnjtIG(6qb%jRxT+ZK&zSIk$a_Lu8frITlB@ZNq(?p@>A-I+Bz#n^5B z*_77Io+k z4(&Vio;f=R`R(wu%_QH?1yX#{0dVrb6@1@b&Iq`z9;B`w$3*s#=tbM!BuPu6H{v>! zOzuAPcJe6|2YT|HA4r<$pCIWCM>Lt}ef^Tb@;UY%G+M^5Nja_z^#+x?QSeZZwyH}Y z9a#jdrUrBNW6TC;G`QBK&SP1p@y8WGUO^zt-P2eNi{;Z^a`ZD4)?r8VTo6lg0@v`w%h!gr2*c)8*6XsrT210ixFnf8I4XAjMz8VhDF?5c%e$IdXueuy*IOrzy4Ly|y37KHuEoQWlA6=OE2V>%VwJ9DUdPaYj6n)2 zK-SFmVIN)&tJ_G_rSeJDrMuu)q&e1mPRFs{#;Oc2_z~QLmB{!AQ~#vq`|hhp#r$aTmjAWcr;S=&_Ek&$fo^Q&-d~ z4;cT`&Bmvp2jB~y8fu?c=kejAI}VgA`^R|PyMUpvT0bY zrzHfvx9s(qD_pVY(Pk&gTKIRbQSV zZ}DqGozB>@;m9lthmV~f=2-dPYN?*%FyEXOckdgTXSrG;XIT5;$WLmSIU(vyg@!8v zp7rlZ&!L4B8XkCo;c4Bs>1}mZiR|!a@@e*@26pi~G~dmw;NRy>U%VJKK3P3H@O3_m zcRM>pT!rhroOphl6lm==`=`ZcbXd;L-)9fa%cb14a`AgAdQ^QmY_}ye5Q=xJBPY0YN_ z8J1Iu;WNd1$oMoT8VJ|w5vSaw0T;mC)FPubgZ>se{$*O09xX#PGf1PPR%VDoq-2N; z^`RuSIm1Yz9x>}9w?W?G4=ysnOl7gdrm~|e%>H-yzziiisZL!2yev5Hjb-qbQ!o+8 z*V@r|hhg@QkR<7QBrD>5#E7_u_PC;X-Iac6TRkh%C-e2j>p4~Kqp8eI&sRGaSe?nq zsvYWMbU18+a;LOs)hF!sxW?L(A;Yd^3IpY%Q}2u9(Cs>3x67P;1DlfUTrTFA#tN-e zpee<`rl$6@J%J3z68(mu(1})L5~=$t=^rRkf763fqZa}DtNUb@bgTbF6DYP?Sw~}6 z*QKWVLDSYEWFd#awXE%j2jv&(>C~h0veCWm_o=PWn3pR)x!E-0-uAqsB@@uuZ#Z{9 ze1xd7RDEiy7hr3)l~>=$yset$?AbOm91=E!=cg6^*%Mh3k!iCh(yfu4So7iJMdr_1 zsnX<)e=6&k`LkhOlatLmB9k}%R=ySAp09S$QxMVLEvGqbItBs<7hTw>5|G9^z^mSq znWDb5gi1A!sH;JwQ2)l-bJUL|A~n@VtsdU9oNg$(!Qps#AziCB*QQe$>Rz3_oQ~Gn zPE%VXfI@#r-I;-Xf$m6NST#xLL#`_J2!lW2)a4^IJ9YUmf7O;8J*-#^MSEv9ACBhM zsc$d>>L>h37F%#s4C^#h0dS1=1;&Vxu^549zuvM*+$@Rj=Z|c%*53H)XVr~UnGz2* zP+5?qM}{|bfZZ}8oDVs!e}o>==iW{^;6@7Dv&_ycczlbF>44}va#C@m6;(6(s#!lz zoj9?@dB7Y@mF>m>+7BFAS=%BCzn$cq4#%+Y2h1u*kpqrs?7T3;9Cd1s8@bQ33 z|6i6bY=Ui_mM;|XN}pxMWW0P~Gj(AsB=OE2yg$a%%af4_oKn6ZsezYC^H<~x8t%As ze_OtghFwAtGk9k4%;QNHva?i1u4u*ZRhV!o(FlJkdVyS{6CQ|u!7d6 z!Zu?pEJu(ucM3Of?l@1_-uXOFaaP_dRLJn^q`OjoRul;yDUa7uXsU21%o~m{|zIZS=(Yuc;BT4HiV?oOozBtUd?! zg=>Wj0KOk2#t2$%`?}&Gu0d)Yi$dXIUsqeI&KivP>eK~nR>5$c^H`m__IH9~y_&h$ z((Hv`9gLjIP7yNdJ>TwNbH4f#&wZWNFemO#^$RwM6@*w_(cHbxOX730q%K>g#H+H} zr)Z_}e}l4N%FIIFoc{Xq^%!h@xzJrU>LtPrF^g>=BBY>-uVIR$dOrE3?AzADUmLF*FLd#NY08b~$@$)VJ8Og!=N4tWF(cJE9BC zJwG_TyD!6KB(stN;$5%Z9~l$9(zLyiRR3Vx;Hyxu&{A( z*QF{*SiiQkR_&)lu`e&uC{a;y?9YC>sXZTW1w5ZQfh6zx{5*&MVNc?s{(_b z2RhB+kerdVbR#+l(kv*sEE_;5LNB3>$tfoVJqB!+z_P9;q@3`- zv7=JwG4jw8dYa)fq=T89ST>9efPNWFga-Sf!+q7meP0|*EK`Y)>N{85ili;pSgre@ zCiZnT9VWd^!9j0KZR+7OoSK>s?ZkHu6YoIRz}Kl#n(m0tNiFTlkQCU@mvyvribv%f zk`QjYacsAyMW(h-Fn4E_ABwy{7uMK;(d5M5daJARciy^*z1D)SO%?-p*wDn7tKAMcZS-WX`GH%XI6k%Qgm8c(#uN9)+PsVW#ls7@9ej~%%cOezh!>I&hwsTU z^TSl+EDJBuIhH%FPjg*znsar;UE7j5y9#H{aSR1r1(8W|qN`OuoMSIOl&7nW?MBka z@@734fIMigOQ6ndcCUbQBPVBsV#Wn>yhxsA_7u=C4w$lPhbmx*=L*w4QkYuc+BDIc zvOPNmXSE~g_B_=Ad!>`f3lj?AsPnYku2in{B{+yX$*aBXTBxOd%Cs@BP5}pOvh@!j zMUJgOjj0YrK51@+VRnw}a#^{_v)i3=wGv9jcadqX^AnEPFC~Fz z$2wwKJ}lVmYx!`~R*&bYF3(df2blF{zek+IdY)?S9OQFtUgxl@5i6|FPS00L$b(|V zudd*(vktSm17^;BvCspt&?B+Xqp{GQSm?V025Eq1s)9(sRL;mHrZOVas;VNV^Tl0d zxr|Kp9%G>2esK-FYQJO+JkLu@^`4f2r|ppJfhQ&8!;7OAnQe!uw9C>zR&WIQOXv|# z`~f?m>)5hK26pmp5%|JcQUeP#7@9u@ zrek1+&b=UVY0HOAk%E>FZ;71V^5N~CwtNY%e%cr~LucRP9hhLh6bxkX(w;Z#is&a= zwr0(UPMJTSge`XG4;98g}20>%4{;tFGldhq86QW@4t3DQj)57Z8DID*%8RV_{3b6_}dZ7EUs9nmAOE7wQ$*I zbxUfh==fO8dk{Nq`vV<;D`^=FBzUQ*qU6&k_2HUR9Uz)OjV)JS5;d3!S(OY|omzp) zX5&CFl`$1l`a#+6RgS0i$H1!cwB9E_k>!FOT05DIRfNeMyBc47k6hiM`!6C*GPGcg zS?-AB27~yFf3G<7P9N$DM)G7b#Ddy@u$4;6ER@cPtsLNda zs3ZR4ZmPg^NL6=0;^s;W?$<-RzOgvWO&XtrA!BxyBJGPU+ab`mIGxq^Z=bv<`E0yR zau)BcWSVBn4ikNnOIn|AnOPd8X3L;!0C--KR28lGAAAm=FjLu@gNE0p`>P9d^ zzh08`4RzVC#mUo#y0Rk^2`!+jfez98NOAPh;^?lSE;p({Kh`KK^hDj-0`(&V-w=kW z=%dyz)4`&~`V_%KT}ERBu&$`5zHV)4JoJQO50=zs^LHJQYt80ejxFIqPu9M6i`WU zBV+E0oLtQbnSvj5L?)%852}m*i~Oq}L`I|c+V*Me#BG~N#jSwx1C(Heo>;2BS%q%I z(=YS6uPf`a3de1qsc_uG^BT`Nr4^1sp3m{jCGMdP_;)B;uk|g*=w4W}$=tx+W=skn zmYB7u8+?Wq31WNrNrW)b^VYiRVwX#tI`gE6oV8~+Ebl6N@n?Q;N;2mmNgZ=%o1Fzh zZyvuNov6)kmF@d^5z!d+bV6lyp2)Fg{8)%C=q<~2Hys_3@pqaNQs(Z0iftckC-LTk zsL^#P*BM~!+4-;tS%CvfC|jSBb#buKKQVg~CEV^U=8mo$vjbz4tKt2^&Fv_F+%ACJ z*2&FbU-LvAJxxbL9vL4=@|PiAX)}>E#KMn5^y}y`h&qW@AremaL)YnUjI6f_SUJ!q zC#H$mRP$YWhDXTHI841tSDMgtLCB}$VlKK<&1cxZ*8{R4v^b` zGCFD?$w}5VXzp`O+;V?xxogd~Megh=s4OlGGAQ()2nZdKPia%+p~^|#$eDGj2DmM2 zCcSO0@jJ{5(c&;1jp8<;scPn^1sKhdt0ug#N4&-TqT>@9hRe+{8!bK*?M3d!F>lb; zFzT|Z2h(ckjUtMu>8hJMy|iI&X{kO(;bx(JiB|Fo8OMTJnaFm#q4jPM9HDnJ9Gg30 zZE#~sTdO7@k2LqVCU!*b6t$t|xO=08J}TdhbxY!3Kz3BNuk6LLp|Vu!z_R6>5{bEH zQdjh3q% z$gHmC3c-k%jUE^K-9CGXML#u^hjd~n*8m;DO|s;O#3%PcJdzzThH|r`PEKaR3bGvA z%Ku@*7yBa;pl)R^F&`AJzhhv+L{9YHrlxF`=yY})vB1J_FuEuUNR=arQjh>5IOWPP zUt|?syCo-ZyK8ffa*`L(R=*RI3uljY849F~GML0+-of;l8rxtrIr*$5J{8GwsYzrI zSeQMBjwtR8O$i4+4P8o(_EU25>srW-9MB;p=BR&x{sET0-mXh0JFNZ<`rh27+pxv0 zzQvbaS3^`~TBJ3r*dZAVy73&VO72C0(qV%danzuWsO~|xNf)z;Wb{#a$c>yssxxp5 zIhXKnvYdOR9h=b@b6E=vYsPfTJ=wY6*@@CpuxY21A$LfMqKO;ndTd$0xq26-D5#nC zq&E8FSSP5%ugbZMGl}{DGSLcdhB#91$ZJar?Sl?dZ}Jsew^<#M&}wgNyF^Gm(|wtW z=EHt~*Ws&I7x&5x@rnKr2?qXylp@vu4w|Ef?J>x>pj*d|{=&Oe`p{;Gce zB=4eoNrHR|knIeO9bWhaRG*fJRQtF?Lo`Wg*L+@j#R1upm&;y^EqOLj>r!(6wcDpwie{4tGzIE;(SicJmUh!NGXFdQj*TG@fK+M?}p*G=@*th4rhE z59#|k$w%xCw4hbzBh}oaj=e&!sUA)P(D1RU&FYu>^+~&Lwp}e#IeN9Zg*KL3mA=`! zg?Y1e<1UgtH~LAlx!(~vhhb1L0mdwttOgkjRGD6lHxJ@ps1KctWaGo~!5n5iZ9=lf9KwP=p zDyMic=KA?)$RDNAbN#Wr_##6+KpnUrPmVOQU@O(e(R5FzbGD3zJWfbzqmM%B)&A$C zKi%dQpUczsZ2_4l#eJ2x|+!^GFCIWNK^J5%+H23#fqIqG-J zXg%J(5A+%X53#)NClvh7YMjKRHmq0Fdhia+i{^ZhKS!N)Nhfn&y>}4&aHZzNVRh6X zqcq>u1hb7){vhFOXri)vog03np*~OPupy~u9!fb|$*j4ZHCSuGtGb%Q6l3>&x=F3$ z-P{yG44R4-rlJKI=AKB0>(n*W9o8d+#b#U_!L1pFBpV4+h9p$qc!_$T_6cjz7YGe+ zsH+WJxp@xwaO-S+`?0sP-{r)s&QWobA~Ps@0j0pyB7eML5D;bi>^4cIj|#>WM@s&b zNaaV&ZUMUfQLgk#b5fy@QFF%wM`~{1J-)?C`WUkwY!#(^|I~EooINuNpUT zi#<0SQYu3|KfUARC=X@Y3((VcnXCl1JHa*iI8hucXR;2as2uf%i$s|^dfH_Cq=ue0 z;qBR#o2V=2X*(<-Q49|H>GGqaU49`Wf(@~Bcy&K}zsG!-gs_sLhi8_0?%l>mV4Z90 zW<2V*?Zcg8tXgfk)w&Lp?~a4HPixy3TQV4{KC*?r9JI<)8}eh#ed?PK!jMO(YE>UG zLxZlFp(9&=1G$o_R%j@h&C0R$7s(au^ z#g0rB?^?m+ZDB@7CcvjwP1v!b%`55_scCv#>E;~u6(Z?mxQ%Nf)66Ywx3|gyihh1=im8figIiso4+P$1ow>#B zh=kL-L&?ldzKs{@9Z_8Qoa_0?lETG$a_8F_r5fSXL8$`^gle+=6poA18!NHU6}bNG zN=+?-xP@eS=s`$oA<8F1LPvxcog^WtfkP9RrX12|kS=w(gjv0*ske~A8bp0N=9Krt`ZiZ|H}++Fj{m0>L6L1(>leQh6(tx1hWQQidT1HdCkz3Nf%M)Rwy5oB6xSJ zP5NEE1QjTZ4RtQ43gWS@zG;MhwPh66FseRZur3$*MAIO_^{H2y4$JSuO^h2Kz4}AO znvVneLq;_9iaA>X9S_Syi55K+1j54-^3W`KlQa*N^VXdsfZm%!n51lK|3B=#dwf*o zo%lb=Ou{4?G6Mt%$R$AV23BmqCQgt583;-+7)gi{&??!O^+Mqsl$OB6N!&~hQ`xQU z+E%+#b=R(T*WFr0Yat<+1Z0tmRS?jiQBNF-K`{vuGr#xeIWr+>``z#N_4@tUymIC| z=ed5K`}2IR^BF@U#gCEplnfDVZdOE%poOL8f6o~hLDRlDg2qNi5Q5EvM~~4O9%9aA z&WXxLITLv7jGD{8KsHRx#0T%OX=7xQH*<&-DY_>NtDf4(q%k|suriV;LlS-Qc_gy! zX+UDUj*ujg0~bgB6&YO2Frw}`4lJ%fLQ`T=OzCAJ9D_XQy?y5Q-$VqrG=h#W<3u@r z%ZzZ%IaxtLYO+q-mYR9QC@(|I30scBly4+Pr};RwDvx4SzUXw6V2%NZZ4c6bK$%u# zUP~vi48qA887aPkbQh8H%8d)8rSqjX#GkH@%o2y?7iD}AX$EKbz8E));!G*E_+7LS zF$S2~F$Ng)#rz-nU8X=H8v7f$aA>K#qWmr!A_%W-=np$X8@@&<=mueMaYf4*-!M#= zYz}D^^`ntLjTZE2I3dWVL-E#djJLRJ45CK)Yfh44CUSh2_3Tom4VSknt~EGXuH>tl zD=bIL!g$-j$ExP~XsBxI(h@U)?q?vDX}N)Z;dkqg*GE;wo2M7Zf`&ZAM>xE#ENJ6O z%%ix=SQ-mxQf5@LwID(h0gYB-<`T+XsyD%KC^o^s#}n%!Wg%C0OMX3zyQ|cEkrlrT zf{^r(#pX6cMqRb&Vk~!h$KMWSWL+f`Jy;EMEmlKCoSNAPqoFaRJAZ~FPAe!j|4HDG z;TiK|)0xho5H`QC+w@XQtBuLe(XGR}BC!Op*K~v@QBJY>xukD4M-0R>hv5ul2sfm8 zCD06F2-L=NEFKeC?=+ua6R)VLaP^$e0w<9u$OtT?A_gR40?_Y_HvdU`)-nINc>TJH z-yp3$6M7t$j;FE2Y`UzJgQmxPB8PHzyS%Nsn-sN;8{A0$3D@8dp`Hcah^!)w5CVgV zLXNlKC@~+Sax%mdgqqe2IwKEGF0yN-^U8$B*TQ)q4VfnmI{h;ig9xl~oD$fTrgGqs zbv&z^JB(N1vfQB>T14Tj495$s(kr_2kb^1VZqb6cd0AQ3p?Se&eX$6fOS+o^+SNJB zocgdLWqnsDb=rgoZ8|2W+Nq~?H^pmir~=Xr1VO~}9Tzq_Y54`=hh=?kSJ_2ozEEQR zP8HIuR&%*Z!Bl~iT?hQ0NMSyEnjQdd5wqfw6K7^hra})Cu}Wjs)_2bVj8%f|%^P@Ki_&K%yu z`K{5}Y$hp(3(=(rQZ|C>L2fOp+w1!B1=+SHEC}>pwf0Ql+=#WAfpeJ;Of-)Wtu@a% z6u`k??v+HYFJB}sn$=b|*PMHefVHD)&h6#>K&ts0E4mC3qW{wR0;$Ls2%Y6Jl<&Y6 z6WA&l%nXFv;$WA=@-M(4SU4JR~aoYG@F3tNo`~Y&8y# zeky}KmRijL7jqyjEZz&kKWA;bgSDqB+kBaA3Q+-t<#nV+QzTMee&v&Hh8IXuGp~R` zC`E9aN$Cv52g4qhB$PDzan9oNqKAMZ( z%G`KJoq3xBnJOlGV)#t4F@7-%ddUt+%X-CuXavXcIBjTYyl|?q@ae&jUc&0KV-;(bn7LJ2ipUUam_uuWXdB_k7?LAviXFQ0f~|)&8w5KZ!0wn+a__j#?uao~D5x)=Dt8>^mi#<$+MhSmhgA|Hc7{$7Zve?^Xix##d z=snudoi?&nQun9A-$5=;#WIgfXEke%FGD?wQkuEbPuY;2}=lKNl?S__ z<1ITPN_Go`?H8fCfOo- zM0wtXG>JTc#AC^SRFQdh4~@Pc|Ehi(sL1@7FNs*>O?Xnk8b`$Rob7VW(g8vcWs&to z=1vu@#C%!a9L`G26j5~5Wh}W1{Q*pSckMGI$vWiS3mR=McRBAaEk5Ej=FW^cX2cwM zF~{Oay_B;}(gzpZrQQ+iGpA^}mTcrrANZUppECzOXUOM_fzLeo%!_^+d5a@{bx+)@ zjmR0MyKBy=i{g-_rp_IY%HE}(2WAT<{=Ew&;-ilx1> zjaKkBmAD@n!Q^q*ip+PQH{Jb+oG!F=RqvqR0-u2Uz21Z@PzkXelSR$u$} z1Oy46ATDTbPBsHxi^+%J7bN)Ka0d&I$36wKh5LC4+Ah&7QTU{_yE9*DsH=qRAHq9BwM%z`KhDkiS*8&T!_G;fEp-}ec03}@4$G1@A!%G zQ$;5dff^JV?1X0#IzgDRtaG`QmDHuv&(ABL;`BDTAKAf&yH=H`B#Mn#%l|-D+{y<1)8fsUq|ls5_UNbX-Qcsj+QPqYeg1PcauLa3)C{-`NurWED1Ru8>6- z>8M8XG)D>F^Xd*om_f3(snsX!Hx$Z7sEAl1GJ>@F6~vQO6f0}7A)M7%3?{V$y&m|Y#FwqCmz3b+CgpN(kEbZ`*qOQ9xOkl5S3>Ykr1zClIFI+)a?+*ZGovu zG`ZXNi9=guu2%c1R#F8c?y0Qqq6L-vfHF8sqMF^i)Yi=!JA=)|fW{4{q`T={nsFfT zsk`Q+&?b7`z2s2Op(zKs9DnMT4{j{&dSY;vltTTp8cqM@oFzHZMz0P#BBTSW(!m%s ze+K^&W(Zjtj~Kqxr4>`VHdoB<+PoAUX8JPo1|`N*22%sO-lnmEUb{Yp*u_gFyeh@) zxJfnvPgsN4x;U0oxI&^FSLXJRbXH~(m=ltq${C((zKVR6@YGW3314s7yPd*3oBzX9 z@^Gp=ddteflVNVr|4exCH?#1VO{&y!Ql%Ic#{a|A1btYA@x%(+)Bk3?|C9dT%?Udy z{xD}mMevE0cpm+&{QkiOcJJs%!Jpp4$1hL(@pfJN>dMAy~%;sZ%{64ig_FMVwuDhGxJk4oUbx5=Ijys;< zpgEe4?)giRlcJHsL!z2VU!OSIEQi>d4{R)4fxVk65Xw(HdQWCz^KWc6_;nMv z522Ntk0-Py0sbnsGkKBoO`-QCUXa)eGHz30=LiKfxPdz57X?hOcfvH>h zV2yrMUQa#AFU-(GMUcNW;c0$>!j{*(O@c!%|29dAa65`o7(3I7Ts2>bh4HmXLO^O- z`zgh$Eremp5fK&Qx~tUapSHmjXz6SE%x%1R_Z~+)%$-}}@&PPZ*kzTZe)7J_nl zhk)YHxNA`7zU-_~(idFTYb-n4y(=zQ?$WiUuN*f7zM8Y%UNz@d<3@+*d!HBhD&r4; z=U+F**n2n}S{(1_IXr2__Wb@NeF^|f8WSEDx}kj_Y==QHH6<6k%0c;oQtp0_7yz`NM)&?gB{ z*M!H0ZfsZnFIvz_kb?IIfJrV+_(5Rrw{nEJL$r1yz>dCrXQ28lOr_p;-L-y7fJG_f zI%t#;+X<&sko2fxBK;DFcZpNKy@BScFLd`e(TerB*G=_Tqk$sT*sI#~a2R-!#wfRH z-TdwON$KG$R3s10Iw)3|gYQ?RR);?g)hf7?VAbdYTbe(EgK$^GX>m4glffobf8p9N zhCa)eF>5)4veK4kvo)P`+Y4NOu=yDWOCxVv;VMZq@1!E9`ZV%9R$$=idg)SI%(uT_ zzU3_N_&3bA=}9Ot>Q_F22O+uNjiz+8ctze;UMTUpFf&BEg&O3>NHxSA{-*YLqfJGe z))rbk?9|dwK^pQ3_TO?n5)JsS$WWOS-UO-BdPm@1XPTNFY7P|j@`FW`f+(;QSsI(Zw*v~8Vitu}%>io;su>&2K;o8E?w%{;8!Ji3;SbHM ziHwxljlSsx9>sJwzY3m%45Yqgf+AeKA{y$_hl4{NC`~FJJ`h;qjKEX3$q`AAN@4yY z;8eSXOW}TZ{m=T1X-#U>2DZt-uZeH1dSTH$pxAM`wyWT zaERKsz+Jz}hiJGk_}Z^z;500l-_X|IRNF{@)i0S3_WD7G8f(nWPkRncDsmdl3OTA4 zHI$voqDC|5SSf(T=$&bpxo;WW^r_p}`;CR|tZ`Ex3QZPy&xj^YV`32gDDcWZUItiT zRj|Z>!+zBJh5HdNE>@tXbB;xUb8}E?wmz|HP8n}wmBWkn{`rA((PeI|Ov>KS;yAU= zZIyNIQdu>|geL}?Sm!PTKE73|H)yHD;3#-T);x?QY<31WfXDGn+aFhmYK%Uc`^R#} zHz4^Ix|$-6n*xzJSTgOCwRV+Jel|4je6ZZZIw|SPJ;5@xj5%asxzWk5x6G-RHY^^( zVlsloB*J1c#IbIizj}l$CT|W}CdP#Fx8@sfhBH){Cv?*{){t5SG~Ti4j)HR9yf2jh z-9AijE{^MCnOo*U#4$LpFPQ(`-p*W_4*et9yxgIyr5(#%S0DtqBrbSkUuZ=Zd|RHT ze#eqP{~R_E{G>`NyJ7Wn*D(~iYxPBgRe&%n-X!}<|G>VopWQ=CjJ0>_g?(j-+E-M_ zw;G#$h4y|xt+@|~eF|B2b$Crs=NE&=DzNZu$aO|6)}prUN2+~qk7Bx3- z!RO$@F>X1>`FR?rqBF5kTiClvhOF>_2=)jI8{Qk7`U<9*npoAB8gI(HN8fKYgOrQ- zloj>)L7slMo&{=_W5J}9@N_1X6>W>!Fs;~=#`L>Mp{EdusFQAVM2``@l;bph=m>6b zP@wTcSufnRA(=1(0~Xt*M1V`_27aAUxK>&NHidP-8nD$<{M9KmoEnkF{==Uod5sHW zw=Zd9eZCwih%)rTxJ~+zoXA42S)eXySLda}r<1n;qxK*|2c7scy-yrN34+;zfK87%Jz^tZeJ;S4Q=s;cKd zAr`BBsrfowDp04}z0L00rwNQ|$XZ-dT4eqP&MHn35L1*klk5_6J&b@t%Z9piCCs=5 zqC2DoB}pwsrJ`c5^ED)+&9!7nj%4r?T(EHEly~Si0$yTPH_}4vN1{jzM@ez)Kq2P> zE88i5A=`hFY(@F)e3f6CB9z<&usP-J`eZV;lktUIO9!%*a|+oS0xyoX#z8TS$z>w!_xoH3adgHs)Rn)Q*Yh|VH z1E~`{0Dh`6pRO7ZGagkrlTR*5!p1{GCR%Dv)bGej{PtBj%?aRmg=f~hU6n4fr74Pr z6(2beXmOyT)4BGumCf7g5xgRgAyyt`C8e);X3Vqgyquq`M(>-(nRTN%v&@kJ1_Jz` zB<)%IXS}9YzWgA%$~M0kiR`cu+i2P8;sy7_I``m$de)wavFa4bfUAbI2w0m0ETMEl z-dvC~D-+2N(Yol2j9fzvsN6l$&a*P`Z}543Es`M!-s<1WnJv1;w29k9X&9JNr98}= zAf9WJu{6-CeFPiN$;z3)vVA%~W*loyS!JGlXUq2)`p2S+$rUoE+M`bjs`7<={7(dC zv8pe?UvmQIB&0Ino`?r()ChBO7A=o6L8L7<|0DsPu2 z_#vdfnEJTu7$9q<48`Fg>Mj2PN`%ZFdL_kJ-xoNYBs})QJ*mcMCO`|bG!$2;bOU!> zjpl-W(PAzqb6CPU$agik&B5xP+_n2iEb`fMOhV=$#gba?6p6Y(TU<;EJE_DB(Kcm> zq=^g)Ji~B=2nU8@LzT%3FNn5Qcp~n_P)7HzhxF^vhJ^5DsW#d;*Az)Ga{nlTKbEqt zQ0^n)gq85ZxOrjAjK+H z^NZ?OOhVrrnK=U%ESjCkkYh0iRVA$Swx9~_-`*E&c@nK^K7%tjBkT$E-s`Ttl#+_f zU*aWr%9(LqC=P|a_BIi% zhI1C?+7^ldL)Ku+9gCbVAGt%dlzRL8h|klxh0jGfg`Rb2a`xnjVzR`5&l4YJe0jq6 z5yPqw#$bGrB4fzlDnuv!kU zwy;>iGQ|n43e9vfV+!72ml|N2dhmZ?np$3LmQP~*4rZE)Y7Z|q_d_^mGO~n+N1Od8 z20E$_XCULRF;V?i@@qEtUx>di8XqRAkDyLA2Tm0f|H1Fz5^rw!k0=pcI{5^h{FF?F z)&$}B%AiL=^%5^Ufy<_-8WyWKEqMva#!xk98Z&E}Bpk%jd&^41%1Ro`VLbz_0x_=z z5R5v>1N2{kpcGDsJ3CZ~8vm=oJ$kl-#I$*PH=<-PXSNhry<|r%uVV8myJ8oNUZY9ItGJR6~%iDVWrbfG^!w|MwJdPd=*d;x%foKkIK07VE>LSj#!fVnF-`Ai~Kio<#A_51hBVx2$E@MrKK?Mn-O= z6d9#r(xxEBy7tTj7E<^Nb&vVfvDnZ8!j;WRC!X3q(gATx3`E)RgwI+=Jo6rvE!Ct` zY=h&C{V)|?Xgd^~p|>Kx#^KNSI;M%)FOvhS75{IOBM&J5^5mFB{RSq-$#-KlFyF`d z*C)qT$*}dDom0mTpC8GeVCtbfL5^-TPzla@UQNbfVu6HVt>}`y}=55>#>r=NCMLDq3@{k6(A~r~Fnr zh>s|G(arTgt>rs1@=;ou#ms|e<;G;rPv&QD(b8q1YQNE1WPbi%P)-89xn=7o%jbuD zih>(|!1Pwx?Y)%`lBCo;1-l4@uu`*`@W@Mx0nIpKzQji;-#)G^&}c71F``-b9I202 zt{_dZSx+$tO#dUV%H_)EVVqXtV)KXM?a7FEX+74%JBm6@^qOk!#H& zN`W8s+A8SEGQ=51TX}_^(a6mR)f3r7Q;3a)v*vYK`1dr&8cZ8X&996$mOiOc+DWPA z+jcqUDp?db6)HW6=FM_CQs^(FIn6IQ_J~^ME~Dg@ZFiw5!q}UWqYVv>%L_EQLgRkn zePiusVw}wJ5Q;b*1jVC#X^*>hIIVA#In_5gc94zS<`tb0K+}T>( z!Vwuv*EQ>(h8%xnZ(#JMJu4&Bd%i3uPiY$NNAWo z|Mj!Wv@y%fj(@|BXEWl(+V_yR5@9VwxLO_dFS94;ha#$E^VxspurgkN2u^HG@B1T6gIQji%?k;Ew_c5wO2%l6zf-MjgW`lrR)8JfNMc@R zC3D!y+D6vYx^t4uY9$V9XXTC9S6K)vWosoXk~3RI4&x>sL3g#-?U+H2l$5q4%v>}t zw%%(XQdIQ4WUVlBRb?75s)hl>AhKdP(9{l#)A>$*riUzMdqu|$jD+FKsSdP zRZ}H?$aTFWAwjYvz@S#yQ=-L_@h2)hqX)L7OSffHelZ6ZWA^h5b(*l-+guf2u3r^- z$LPXHt*bRbqR1EtPq22sK<|U_8omCM_@i7vUc!x6%|viUQ*EfonP9YNsrJ_^FkpPn zdVOxpewH$di;JhV6d&wG?XT79pChM?OuCMsv8x`?}@?Cm~G4`H_)Nim!m*l|4aA&dW~M&&yBu zw3a->TxLE@IchdSgouPwsJ=Pld9|04~ji5RP^@-bF=Q*UH<^>sWydY-MO zTD{gyRtHva3oOZ6$~UA@0=^DM_)q2rl1U!VN*>o(dAw-lA+P_dJZ4EAv3V=vmPn`C zO5L@>bA=&rW=r7wX7|G^qCzyNIWK*+Zeq@+%h9fd2IqQ2kr*9ZN*0J&faOzK0rv++ zNr4>8napk7`8UM*Ej~kMeR)!gFBv|=r22Aai!X_WD2=R##jvl+E=-2bB1=SceVSSR zU5ekGL1svN>51-_P^LZ3{ZirAXh~b$m(s*p@BG}2&cOLwL-R8>#Ybrr=2Ce026J7W zK~9X0MYn~B&d}nVIGt4)Wk2sZS2eM0+TOt4$l(u!2;6h1F0BR~+l|eE+!~wS!}f3A zc$WQ1rNDNGN`u4(U<6CWUT_gWR@AmIDsM zdMY?7rzu=4B9+c0bppPmsIr$$N_%X+_h@xeDEF~xZ)7!o@f?#yT^-Wgw?UMS&=+_9Hi|X#GjFmq(_V=7)GsPN+=qTKK_!F?) zS&dgLbM?FVLAh}m2+3|7 zVhjtW1;UO%X24bu=tN&awW+{W_xE(F=6<;#IZ9?ahYmYG=mAJi1&LBjLA?8ATT{EI z<`Yq@T=Q9E4!@B&Ml#@VDd#F&q)*5?W{$O*&RzFMhHt3)>~qgO2OvrXl5qW+@3VS= z&X9Y&c?WKebM#)^LNqu4?GmT=Ty=6*qm?k6>+Ri~JFQhtg2FIN6464014QKBK^djv zM#Lr0it~cXHUpAjo%j04de_EDu?+o%J${uYmLKW`Ezj zpHQSy8fC;SaT)79hd*R9?KyhM9-75w^QRn5DL)(N&(ntrL3~*+6sq8`a5C6u9W6qx z;271el^RDQK~KqJ{!9VoYOdTe*jFh`0+XfsAngJN97eZ5a|p8wm1eo5rz3&7rD^dY^fTjQO1r_X6anN%QX5-tqA5=S)9 z;s(ZLM>e&mq_m}o3QlL!2Pt*?g-+{1?YA<5ee~c5P2q_thwXc6xHEAZej7?}(5ao2 z`SoT6q}&VB#ZuVG&<8=l8mju`3YwPt3`#jcLJq^!M@a87`kr~F;u%xy*g%RisznIj zy~Fo*Fwwo!_ZFx%G4fezc2FSX0aoAOCKpIV7BLQ~;9s1T+hwC^dxe%`4HJZ?Ii65h z_XcxPR@o8qWS84#Szm+8rc-!!L|#CQox(X_zdkgjHJp_4dYH6~+bQp8Dc(QnE;5Sa$ige$*4>IoQMt<8VN(!! zw79$raKzw(Q!UWuQSgF)?P*qgX9A+}#;XFul)WW86c|%1o_=kVcR!`=)kh2!P{R}o zP*Nx`8gIywU`OJR$iSi}rnH3PQ+7$V4%eg{006-;g)G3@eKJM3s!ISh6I*%ml?~p zM0{HshR^kXm5lJFueQZDG%w=YDyxTYYfbf5X}ygHWodtGTCdkvF~|H|osMK-fy)KUV~bqQ*1732(8I&{aD?Wj5r7wy*#-+w;0|O=71O1| ztB{{-?HqYxgn_7PSg>pE9iZ0&?Rhd?SaeIcy6jgiyO>#$vnEYgkA0qs*%8|V)9b}J zWH>9d%yn}~WXShRcb|)$=ZD1m6YgV;n|p66LH!-~(yJb~mHucfX?!y3_ri2wv&!%CM0VT@*U! z>KJ`%;Q$TQC~xAy06$={~j*T@rt^2gLGJR2Up?Y5NE4ExxEr4 z7)SK$N@A>E7Soq#Gtj5z%vKcG@d$VSij0H;yPoC?r$T?FoI4mtTmf3mJfIap%Ps-E z_rFEZ5&|~c*;$Ff23=)e6|8Re&KB)=)g?v`x8Xs8kMoqcBr?B!TZt}+Z_KlF1R`l0 zFOS8tWE~gN@ybU8B1?ZtWc7tWpQckS(@tf}rL92TQuKDvEp_h}_YVMj$x zPT{TYI;E9qZmzwlCR>b~SPTReH4mnzkU+|xcC;e!V4{sHKpLE0>F$Sz;%Urvd5^4h z8%v$`1KxMnC3erf%&$LC6<1jgJdu$vSf$rRWIr1!fTK_5;HD8+G|uNECtGuhFbz5} z&w@g_s>*$v_l?c*#?h=pb;mXi4>^7+)iP$x^BxXn8~vM32hMq_hs+JCoT_Yt3h8`; z62Jp&MzQ>l|4~XCFJ;F7IV^+jhj>R@O8bs##n75aUH3*$%+tPP!&$C`Py#*GiFr>6 zxWov@YiJlE9`J+|Jf6AU{lN3prqeMP4tI(&4^|F!{u4v!$R*3~g2>42stv%qc8j^v zi^J~vR+tmYc4Xvh7x`cHG<$(IS)`6e2h5?!@F=Zw+eIRxdHZnn>)^oAynUFsORMs@ zvh2(QTld9t|DM(ORQ_U&yIjuaQyKj1EaH)|G$BFg;j}??5L1Y^Ku*ENdHmUq;;e5D7dgrbk6X?D5fwWjAZT_Z=XciL# zy?3k~5$OHl1F5lm+Wegv;r2nf?BGDZ()|0gkx2B07L%7{h2ggH1w8`J=N4&sBF)RH^T?s;aJod9zmDSy$FF>3^Bpkk_8nB^!Dq+TNC6hp+Rzj(&Dyl|%#Al0e%G^puNzh%aFKJ&sK!-Ydccw5kikv8SOAYy%3T2AAJbd(J1rCWpZ_`vYYdc%k7i{ zq<5&0b4yCsEfcxB0ZlBTz*daD38zRPH!-4L8>OBVbG}N`Cj>eXYF?x{7wIF4tImd< z#Z_O1?Zs8yk&*l83}Xn}J=$4OviJBO2adqMz!~5OEbF+ELK!G~`ClztU4Y`W@4-EZ z9Sn=wsZY#moYodAzDSBMlH!Xl6d!OU%D5Y4j=xa+B^MRX?b$jCubc4gb1>EsxOZ`% zHn6ey?rQ@zID*rvfnWwaGJ^l(H|&N`2;US!b*r?RqcL`%o>>ElYo$}4O9%XTr;I3c z8t{F&BKbpgFEY=wKPbHh!=h>o9<3uDsITyJVFM85lUK;VZ56%0pJ4hAy{<}EPAI<~ zt!GO0FJ~X~`+$MM2qz`oze7d@hg|S^a^W1X{QzW;&m~nReI#=*Luzp9S($?!5#$^f zNmAjesG&^0kIJ`VQbV^)Ad=?}UCvN7W-8_;&H}Z&h{xI2a44SyKN}<_Py+vgclQER zMO0V~PykpV$t$WyMH*rHg+}NmnQDZQ(MEWrmbi*VXg4|05Hy@Q6=!Iri&Iwy;7j(} z1U{rLftJipon_0YK91rU3j2Hdnpu&GFvBzpwx3sJmVwcIv*~1lm^kcUwT$TH3p=Nf zY=^*IV(v0X#H8m6njdnh8U^E`%p%4x``g}K>qZN&3hW}nt|F`}Fp7{Me6r~i;pQwg zKmM95psY9s?s>7pZqvWXd`&SAGK3TnBwMY2_zqk=-GLBQ{9kx`?kzTJq>#b9J=dTR zN&M*91GEO^4_wPTz&DE&Fh*XrF=qO!6j#_0beajc{)*P5F#uF-z9tzqnQSTJ`7d_z=OtmvmY@z~kyUhgNVP%ZtS{kO7pZ9EnP`YU)Ac9jki%Gq{WdZ64K)Eb1>ENU_)mKI5$H> z{Y;)V)|{t669qD69?swl7M9K)iiL+NJQA+8c!IOU(xD2t1`I(2MKK9xyXTqb7v!UV$;4e+m^^{ z0_qQ@n7`jH?WBPD9Zn0FyUCoCL{`GyX9W)Q1Jt$d@Z-{k8$;Wn9QGWXQkagRPGPux zHcuPvFZ?_XYl)z*Snmjrm(kSg=-%zo;!}E_&A>Q}guU{rM;7Y)p}P^koJ|_&KE_gq|GWB|`fjguiFFvEm!27Oj{SQMEMAY=n0X8SE5x zm3m*qzdBM-pP%Z`r=uI|@@`*Ryfzs_G_X7W7A7DN09-SJzApU=a}@>FWCs9QzYT6W zj9L@h302!35{snH3?VNHzZ{Hw{Y9ms*~9$kZIuVJVU)kRf2?rVc9oikCUZ`OL#Yge z8;4(%!44FqKZBkb?xba%bNbmW(<%#OivG`2WFu1u^sl9;QqciK`>%1!%u#b$gta zIY@IMYtqQdTZqaW7q;i8qLGugulZ^8%K}hLLq#y+(jG>8D4Ld)u4M`nng5#V4yffw zV1Y+ankPBS$__JCKvhJH6$+y%;{OPVK(6zI^aDYCU(okLt51|eaG+{K2Q)Tfuvrr` zUb7vu7!7Wr|MQci!3mHotO`SQ`@--i7*7fGrnvuM9TN!~IPPD}#Wc+|8(seMIh%)6 z**nMLf1R=_rw^%0=$yx=Tg>20(v3V_zW43AX#xd!sH!c=Y#MRPkrMcuUmA(cfHG>*;@{79r$-?IXiSz^U?*FMiz zm80|LylA`7P5r^b#%LX7qFKG*uKf?(Vp`-Eyp?GYk;1QXc0R@{YIY@Tj{?~%U8{N^ z|0X&tQ2m;<#JFpVC>xvCIli{_9)I;G2^;PGzE76WAPgv}vio5Xk?VY&OeGI&wd8D0 zs!CdZQ|BMph@=6w7}bs8e-Bh=*tiy{5fZv70?3-Dpg_MgQ21h`YRK}=5V7T5C-3Ct zH(_4ST_-BjJB5Y}Ovbs+)s`y?d{%dOq%vFdQb?P7pr*eljU8b`te-At;gNni5l+~# zl#rnQJdGJn#H<^4vm((!-(D%@*OBLM>6#c-}7jx z!}4+Ai`DTM<@W8)DSTSD+kNRdh0p5XsmIM$#eZk^3*ks)BfOqzEHkHy%tt1Xco||n zrw#pc!`Dq7;j6L6qBbR{zT1Ter>J*XY{=W0L~v)}kRF%YEk*>6K|xLNy|60ygT!E2 zd_{0>GG;z1g2UvNe4Cm7kzC94pUt(k@m%rGn7-tBgy$2UA&25+J!AbXlEQsNe(FN1|&1BlI zTNX)!th)8lrBK}ZI$6rOFV=Nyf7j}3mqJUUu)qQlE1eY^Gkj^H6`Ivn+CX*)1Q*cv zZO-wN1=e@g_> zd-;rdW1&F3J?2lNCS!uilyFed>L=S)tz3&6Vms!z@wnndTDp z9%n94?`-pW_0Bb~#pVe0E;3Wp`xeu#-pkGNn<7BG z!u&$LZ#Tp0eV6&6dRLmq)cYRuuzIgC-%xMOY*z0F%|EF3M)P;P1%#LUbfo!=_`Xyt z&R-~};wybbIk$*!t#WP^=LY2zE>-hB<&-tiyi++J7w2;2d{Uf+%K5Z7=PBp2;`|;? zxLrY9ib65E>J}r>82WrJTx)R}%9l6d5+%)U;-Tou5e=K`kU)Pl@bhX3T<_eb(yeh4 zHmg>Jm6&f!*g*E~+P#!2+Dol6=DH-G`e;7?uJT!ckiE)iu15m5L<2)sU|K9NO#-(@ z1J_uA>9N3c34AmfSZoE3iv^C8z{jG2*II!Yu|UocsE>;Vj!}W@GouyDBy84`Dy+o( zdZVh?McPjG?c)$rlGP~88}cVo!`KXtM}J-tI`-VpIWog%!2SjHMDR!5UPGb^YKe0{ z<;Yxj8nZpSGobok$P^5Tt5g_z;d8Z>6hi~TvU^VpmjfGoQ64=7B&@rxj?eIA4T*u4 zxEM8Gn^ubf0xPEekwVt$cLYAPqh)v?8Zo{X2*>Gv7J}4mD_1r5v`WU>s8}ZMS{YE5 zul}i(iDm_otoyc=B!m+{=?;d2K>HUf$%8A7c2wa$3Z4eM}hE!r~+Y^r9fEU z9UL7_ulYc@EpVmcqCi|IA62<>KqOy5bit+Iz^!*v33uHCOp+MX7g`Jbh>+-5_-+t2 zA+URWE{&A(4vY+1_HSgJ)P^;rUgy@A(^A6qV8&_V8&VraXCKsk4NKx0O5<>O1Fi7^ zjBA_m`iFuj0*RscAf|osZ`x(Xl0Kufk651UFLhT_r>E&t4`1=wUv4LR+a-;w0!NTG z0EXShD8rq-7qyC%GA{eH{+>8S2)97QhWZn2$sfM(yqJqNQ2oK^9Glb&k| zoXYdyN#(aHaMC&8)v3G!Cmk`LrcS%^n)2oap9IV24SdXNxj)x7YeT3NlxEMfj+oPl z=H#faLoTL7NZR1yx|*me>oO8wQH&-{+RWK<`_?ATR=g!HbYfum#Tjtg!x_9G-JL{k zJk0S#xxY?%1LJU#Ng$(7GGUHPY0@&Ro4TZ)tinDNRktd|CxJZgUNAKrKWUWVWc>-8 z93t4*QH!)8i}Z1mMxl2$b;@3najc>hEjNu8Og)iTbYdd+#z ztoXL!%Iaot#~WXqNXR%iS1G1GF(j(m&20#6=fn^(!J;(BnT0evB7at0YMN}|064kV zoZC;oRwo}HDp^47DZXF|J>iEA<1mc(oY@;V=C>o><*5kzy0_cGGI-mnCr)dsE$`A2 zIg0|s!F#)E%g+in?F;|Gd(Rf=AHpf-q}^h5Juxv%w7Tw9$ntv3-vf>y4!?%oz1zn? z9Y(z}v=nRx{z3(P{25YM-7C>UWidb@jKY$+X&fA_n@5`mpAj4vCt{G|uPgT?abv;R z!8CVNC4@(@1}Lpoj2K5%d^qvhINoTu;;s~Ek3ZOMVHq;u!gamg#!l`nbZK|x1$xJC zJT3BH;APR8gj}c31Wy(Of8k390fbsKVG9Uiv&5GHAFkoc0Hd8)BK1AVw;C_WbV&Bv=19xTS^^1SV=OGOK(+px1DH%xf*WlH}@(xMr z`^5=@&;oWE``u+^e8QLh4S+ogUe7%#Eh^ z9d`DQ%9|O$?Bz%MNPohSDV%Sjke$9kpP^BhiekEie#Q*egKAE?xy__BF--euY}JZc zhiXI=t825KEL!A8bDt`2w!9*Gl6cARxRQ*v_ikoAZ>#XO;bjkxuBbUjsu4XtR|Jk! z%)~EqVn^Juyqvu?Y9Ps)dcYA=shD*1bk?Cxwo+Tx9&FmClEL>?1}H{J$SHJcw-EVN znL&dmS^_}HO)os`;A&U5FU7BcXLZFLT$lf42gO~pDL~f>gCym*>6xXp2EVs0) zVoVglX6KYbVM_GD?QgLn!ll|r(xnX?M1`WBa_p)jtYybmWV(Kdz^UdzBc0_%NBxoy z&KFwpv8y_WBtCL%pn1^!cjm+qzSxeBh9$u2(SQt1x$Ib+&(^pEYWK^c_KCwpVnJz; zqP1xST4sSZzCasQpsZ34DbTelPk2;oBBRF^uB;j!POcgjPONf-%HHkIJp` zeku)5F%P3q^-rbqg@!(DAWep(8Cto*@_1?-pWEbz8Jin9!0&iOL6)KxwXh5RIk3Bu z0Pnj037C5TR_(!e3wapo?ToF;h{t!Ym_JoDbCUkWaWe+O_Xn7Y{ZN84Mibo zn=av0#c)}aovu0ayl-$j*du&8)0*OZY1<^C!sr}ljEF82IZG&vPCpJIE4~#hZwr?1 z%PG$oK*_4QW+}x)sf*`4O4WFbcuu`@9c1yeAM~g55m{J!25FI_upyj&5ms+ic_G?ks z!*1PZKF7|d&~iQRUDDn2o~SO_o>RVC!*szyu+U}Uu~r&uU=7aJ=*lTSBJF#`94|2u zd0+j!`EU?~ow`wr?U|74yGV-fUF-1fUk4X&9s!a$cjEsKmcQJ>IpiTpW$d?iml_W`nmQ*2XM|?X zNjU>wrtwbGrxOpJOxe3CxW<8$h85dDi(Y{s0nQnpAM9-Ucw&l3dvIg=rxqt1*d- zI?PU}zCZ10I_XI{gER&@3fDP;cI}qo|agZ%+uUehcP}&U*l+@@y>dQ7bSpeA4~$E~D%2 zMo%Gd1Xg$1;K1liZ#sn~Koth-gu$`p7fSNTg@X_c&Ur=zmgH z14?nkcR;l3#I^X&+w_+V-+_V#XMz9Rtk8{)jn{{hkl@mtBFg1$TK5HyBd;Q2@3&pq zJl$SD-;RRpmi%-KF8kh!a?}Nx>3f>}*)#M6Nz%=87~}F4fhmwAWl+#daV_%`Yho1y|M!P z&Sv?#vbut^9>?I14k1V0k{y?=%5)hF+tWB|2q#Z;@ONyxoC87D9*)%L#l&u|T22qZ z=fg**lO)k)I((Y(z)5rGqvX(9cZ6Bn&M@5Z7Tpp~+u4ZQ^34$6SMaSbY_}9%)Ey^s z(b55J7bBFai;(4Q_WvVmYFX$BiDW>8?U!vb(3pbSi}h2*)H0UD2{+*&D{eo3U(UFj^`xW``6crb^e~r5`4FF5bf5wT}@K#;~ z1bIb%FO@1Wt0mHa@{1Dl`(H{ax$x)x`bFW-8>&=J>?+M!g8`RN?jpF?L%FYdTi2cr zxfX?74c?|z>k=do?J3Pw8I^6)Vdms|kP~trYk>75lK#XIc7Ms+(7ijIR04Ra#1{uyAJ<&^Ob z#5wLOgTaAN8iNI7y@lJT+H_Yr|V-My(hiJh86|#)| zMqRnLyEqY=DHYNAR$NjQhg~2lBcPN+^oKc!Wz^dotn2*@mVnyxv}0Ag#4xXyU6r$50nI{_OO58-OHani$D8#6+3k!%mBRXto#y+AOlvPPKyBIg#~ z3l&EXN5qj%S*p6M^VJfxB#bp@4&-Kj7pK7*Hj|bO4k4G{ONAwa5;CHmM$0PDV$Bxi z`-YZ*ZTfPxQi&WcZ3fYNPla(~vel~{93sF!(M=V`f@BUgugd;CWp7sRlwHV*&?HDj zZ4RZyA%5Zx2;Ch-Mr5-)@LT2l>g%2EfB3cK+&Sj~(W!7P%dzW2En|ei#LmAbM{s3GO@k|I^|?U2 zvND@?Skzs%O^fU;oKqQ?A=J!@C1PY9+p!DmemMzQa`%5Wq5U(^)VH)Ka*g?fT6yHO z$lyLzfp!s0sRZtAkB<}{(c1#PQ}Gd>87Xv0#+x6n@j2rgWh>>7uxVi+3o9s(H0hVmBB7DxUo$CR54D0dFhH{ z-|w>dA8?~jd};*D{cM|`6U?kY_2&_NdSLbE@HTcw^znh!-84Bzgb2)!K4(R%?<<=> zoLUj_eHC^_eBHu*1LuTOx@p}d6-MFb6~R>Wng*A|gP{#BNla<22rfttUsBQY{v{DH z%1F0zWU6Vk`6HV#i5A=h-b=Btr|%vZF&=Bg{Nc&#WoHY7Z_h#c+}Ed-SEuxpqtiT( z8?bnKAnH?g&`G$K$D!EgYN~dzfeZ;W-@=A?sVEVe8K|ha-sWHHQU}~;B88uG%24xj zC8rRWf?20r`fiM?7WUm{{!{Y+6fOltRU##e0DYx{Ny~6=p$Q@*O=bZI7^TQ0S;^ji zwL+Gb!anmRl|@x{7|}8U)d%AAvBKvfQ&zk)82LJ9mExvWcIJCE=!_s|!K73JANc`9m2E`mTV`vGF)RHthh z2@;5jF%#=Oae3oOgndMW|SnPw9^?JdC6Q?TFgCp#BN)QM@<$v^RK7i@`ZaAxv1ykGhHoENLwI@3h9=}J?)*`V zgKx3uuW&3k<8NmXJS&1~M?{Fl5>(S3V7m+XUStLJ$O>AxeVd@ILK`AI?@Z~RcFyQp zB5P{k<1>MlVebDtWB|*Zte8+xw&J z|JcTH5zf$%+tseQwAdWR5!G0J7qXe(164P~{4d!)js$*`2A64c1FB=4M&f^#>;vvX7YZA6pxjiG+e=b4f1JaZZ z&XB9oh;KR>?|v!Y=|JAyZ?jG1vE^{ZNAuo}BItjA#9E|9VnNjutJg`Si>S|Pv#`^$5Gck4?T!WVIAa!11u?K0YM zibapl?pvFfef)v=_>Z%DaUH?clD!-K*UPQlc;1QvNpcwsL`aFa9?Dqjb4n= z&$nl!V~WeWl*6m~!x}|rUP&afJzxB%4EV?5hYDZl++NZj*?wHY?cWX$`9b1#{=TC> z5(*s<=h(Z5J$($Z|5QXj33J@jOX!{E?M33*h-WNw-rHXg&*ug_L!o-k8l7LFeq{Sw z60~(7NTmve?xKF3e8NFqClxn_9gfq8}JVmKHj-JMc{g@ z^U03^y0EdcKz$$R%v0~zI@|EyzERRWHIPnKR^X+)Y$@+a2@iZLe0%0N{QrKyKNQ-| zR@C`XGDU{k#QCmrJ}J&Oac*BD39gGJ;4o5TIto?)JSrg>u@DP_P~nT64;J>*k6;vz zFIMpyC0;Lm8int%TY#@aJU_HNW5BEMj?U#$?DX-3H-9UfLqm~SYvo%cQJ%awN+?ty z{WVfmB3qov%DG&ektC_*8gZVz;M}tqaGsXDZn-!w0Za9tL}-%;S>K8fDm>olbOG-v z2_Nwn!s-8F(my(Z@Goe%L6yb1J$)kn#|Hdmer?Yuzg+Qe9`KK)vg&`MYS-H(%9BJ1 z6&~rFFNM^K&yNQus(f-cI<228lLV5-wzED(R7ff^x0K5I=4egm#Y_HL6Z!^R5>5UF z7-^yaY_p+DkHwJmi(}~>c*$RDf^)zn(d6%2>CJ)iU9t4121@N3a7i?k{*@Wz)cKnQ zasvI^-``r`Z!Pe*7Wi8W{H+E4)&hTPfxorD-&){rEpSl_89X=e+|ILx$Ir8s=NCNx%Jbhm zyLjH_>EN+VjkgWwxt!-Zp2a*Xc<$lZ$n!Ivf8}|N=WU*kd3t&N`d?b!cL<#Notz4Z zbJaES>)$EAyyq-hvcLv9fAdx1u>5RENx4`5-Rk@AU9GL%aQ)C^TZa0}z534k?_0n6 z!BzLJURNpJ#FLoX+Pm+#@9*wey-xXAaia;=C@0*D~&}s93jJn>~5POv;p>?)x+~nI)Y}Qu)oj;LUgLH;cIdVYF`++;R6ktMAIt z?$5Y?&FcFyD)`E{?Eh=;OTgnQu5?SX0bw@dVaEyA8<=28Ey=svQnxlspbfXYKmu}0 zeWh;P>TY_mB*y{Skc?--juV`T12$nBAi>E4!X$oJm?b7*aRxH*IV?_M67oFBb3*dP z3Gn>>zv|Y#w_Dw|lganJ`Ce4*<5SD2Q>RWXx9U{gs~M?_jNW+C7)VCarlER38CwE> z{;0gJy`{xp?^mL*jPg{E88huLVj{6rIvDFQyAt7{RHP@>B`J(d661PWfYhGS4wa+_ zpp@OtwiYI_<;K%)xXr=+cWU$C)Cs%eO~{kx0hb z42!2yMJuz$kk`#pC|OXFEle`f7YTKB$3sI#I+*O^gp4`2v<eADy5^M)uq!d8Fb|JW!hPNDJ~|Q^yBc zbyX!FA9)g7{mUgKp4pjbFj*h$PefvU)##5oF{*SYhw?$wF*7S$b_8=dd7ODUU+>d& z?%pS#cU)EEdEnXf{lQeKy24v7akiY^&=8(-k)G;wGDD?Wp==#MQQ=@hPA!@zvC~uS ziC0c7u6b6jEwb{sMx#6aX#If2rB+8`D+O$_`&fQ*a9q7TQmrmAzO(5*)vgcWQIVCld!z&q2W3^R{*$zKWc~%4p)^ZW! zITVbgq9i3D=$wcwU3l$g<0Hex!)dv{MrtjKqh;~3dnMuMUp_C~Ns_arsqz@Q0V7nHx;y&#IJU9jC2MO9W<8bF zT7O1LFUH&2>l>`TNh#ezx_hRz4zd(xbyq7=$!_b&&0>^(tQj<-_faTPKcjP#s1HZ6 zW^b?A<6eJay(6PkBWc|shqa#Rs%vj;ZEsV_mZxlL@tg#l`M=DoN&;}kNM=m#)W!`dA;YbXt2|UZC_<3j`iKSnZcqIL1 zu^KHuX0e3X!}U)7_F*}yLY}g@RTWk9s*KT|tV-u8!(D{Pla3W$Z*L~0l$Xu1#1qUOk>MOdIb$H8l2pxlIu}Ip0@y<*xo?4;Hl3{CKMynkR4%q#7XVTW>K~tVG zRdj`d>0otFI2cKG^~KX+EC|w(Xxa>65J`KRB9LXBh~AbM!onz=h9Vrl>Y?OGa~1k* zsv5Q{EEM9g6l?+ujcc%T>4{=I_=0_ABv=MA=C^3A4$l0+OgbD-Vu#X|j>n_b9o)Ja zOXEGO&Galog_cLm0W&$vfMKC7X`&tL)uJD3>YUu8_*SaT=p2i8p(5R*o! z5l*KQ3(Ly~1_sJp@+od=_{pket585%-9&PI>a|Q72KaKPhvq1oT?R|$V1G20T0GTN z3MQXuFcd6{C;Q4PJ)Sw`6&2bb66guT@M(2%;jKYtH$$+)^C=#JiWX1Jq<3q(moTKkbcW`m<6}d~}YEWciXl(ie*- z&5mdgrXaPabH~UQRea3>$yaZuV>+xFUD71u@ic7~)fFdtTa0e;xUXGI|fwHK#pqU)PQxGYBWw&7J)Y3abA$I z{vM20J66yCq*pe-05`RH)3Z~^kIuCLMH^)AKi&H)Z#3Q$jKXedZ{@I=!}9MN8O@cFth`*|R@X)no(iMGjAAv4 ze#9u*78VV3LxYr~6cw-Z$&|)u&{_d%SxMn-TiNAr?5b}L_-k7lu)=ILEJS-Amm4M740M(^D`*wznnn?yMDTS_CQybBQvy9v)hZjEI$6W=0H1S>u9damdTyK+`4?`w3Wl^=k!1qT_}=l z@AbzbsdyTbBrHsv6KK!Oj@GrzD#K+isEcEH8#8GWsYd1NTD$x>=kqUV$TBLpsWeBI zEZTJ8Cd*-#k0e)bUS;%XvtT*xww?KlcG#o0@nvIFuT2D8}LgpZkZ!Ouf zo-5tKp4ELxSg%8!VJyNzt-;jl>WbM_6?5mznKyT~w>&R_6j$reo6eup6`f6=%TgK7 zq5J#^%xss1gE2E13r3Z+cFug!S^4x6o#RL^=(FvY=%azgu7)=GxM^M1(%IbEgtb<^ zYp~`|cbB6^JLm$k)lo+<|twoVkVS%~G+s&?&l5543W}Fq5!&CJ=_uA4OBZ=+uQ<45ooSJiLvNVVJ zy(_Q+6N8nKO|RR$CDI>J<}AA(L7)A>!M5&8)k!P*o;#Q=qo%D_dm6bil1pZpB|DZm zwY)lCKw58evSmf)FAq;ou64C+Rxm%Ud>}itRxq0ubBbJ^D|N^Qj7rV8CI&4#wNopb zvbwRQv#Yha&B(1 z%cjVYA2RX4t$MyJLV8JI^GA9o7^F}HW?4_gTU3DUxFd* z+q=ZcPb3g@ZF9p^far*Ixm{yeob5Lkz)ii?cVGU*;@KhpGa&}u{Oqpa<0p#HMl z^`JLApmr*)!NKZE&ulcTJ4O~_>nc3Z0keUmoHLh%I;dq)l;FvPKxD01jVE4}O)6vD zw2(bpG}&7qrW`%w28z*}aY?1Np)kLNRxj6fh|1Zsu_zwQ*bx;T>j_OxSsQ(HtiQmH z04bC`#kujJ>H#|f3>QMII@2d10ZiCB%O}>rbP!K^JF8)dh#OJZJ=g zz>D%m6YL{K00*;%Jf~e~%?=YQapo{g$>mml17%(41LwPA#{!$pUrCAAtyRFe-x(qZaK$D$n- z52-P$jk9>H2}UC!!?v0j=p-p{=?Tw5gY*V7(KOWwQ9Ug6<(FPsT$&Q1Ii~XAapAN} z!K_u4%v-v~$wv_&F?$j^n$?90mpw=3PdNFZRI7&_b9QKdcWr5p!$bBr1NF$@%&}0d zWy!d28gibIoTo}t(&{uIuRS2V&^5fktQWTcU_~r5jC!R*Ba%`IgcQuLUFjOG64;jaUh2~9Mn($f*lI+1BV??W)ywxzqxqdpx zMwSNLM9NeqRj~JzR(WPndTeY`aoKNG@5`x2&ymY<+6#rOHqC^QN<<@R_N_9MQJJrd zta^lS^8?d^ss;7b6dynb1tTy_sySqh868r5%Z%l0))duORXWeW;pgZIv?rt?e<8=| zvXq>{IXl-k1nmyiz_;qdDJS|=%sz&N`SQ!pSlEBZ z^k)3qCF8|#qYv?0zw(uTtEs~^WCK>|e#`)CP2) zEk}H^^!tl|z~^5X@B8W68;Q66@rCWx!21p#{@>rX@RCO!e)!?WcW;;Z#qb&*;^FFj z_z(HNV&&ho6JhY##PGh>?hZvS#*+^2Y9IddRaL!KlY~9L9DzOG@QIN}e1aFk*Tev6 z0Q}NjbI1og{PaD)ARm{0uJDOHK4AcSfQf*EZ<18H;U^C5r~HzBnRL&)^Y43i-A@)H zec#XKo>vpG=fFfcjT?cZg>7D2kmuHu{Nm}e{GuC=kYJSdYW8P*eFToRDL&mVdQ$!SiWsmQzKbi2@b;sY_m9PGhRldL3}<~MY%v;oeF#E6z0bnq#Nefecev;KXr0;d0)*5@BBn|dea5j;R8l?_}M8= zc*``u*bXo+!G%|+@R93^I!H8p`0x^ca|)*_>e6~6&h0Wd=E0%|t0E9w*08j#p{1&l zS&!$xB7v_ujXPc(Up#SqLqo%HbaOnSg9OIR`5h}yC=v5Ko)sOatYPpwd7@-hcom!w ziNqjW2`KP~^h!#AO7LS)%oH(^5mEg37b_8t;pw2fc02SeQuVqRxDr79Jq7%X6|eO< zZ?U3FdHrG+fbo-S{K5dxX}a&!t2D+v4}W7c)tEF*;((c!6EOWtTz)^hDd|_k0A)t; zzzRjNnpTc{-)r!TUjgVCp48|UX90AW_}!-L@WxA3m}x8EXFmGB)|yTCL7NI2BKsGH z_S7#sK7XhQ?RTW#jbijKn|^(f^D8<==jO1X$oUl)9otXmH=viI;&J1TJN|@{6DOQ> z@+qgDHu3aH|8T~cXPte{x#yif`4gYKz?d?1+VmM0UNrOKPhB#rw5;4yQCT&6&fIzP z7c5-lU0hw`^VinZH#9D3YQFTcme#iRj?0$@I+rb9vGR&5KmD1juI^eD?C!zJu`e9C zW_7eb7EfH8Or{WpwZhqPhP zjR21TOE>(3-!)$g`0c9Ndrtw}e8mTcc3lv=zsSPtasGzcQ3yO?WuL=E9L&^0;DRC_ zA;KI?$Z-l>!Lc5V_sMV~K0rS~#v`5NvK}8S^NT+M{5apoh>!I6TkB<_{olcw>x<{? z3QxIr?`bbq``9<}Y=qo&6BQDhN0eu?PhqVK6=Dwht_=G{T|C(^7)e_b4rEXD;8@v| z!${Mec};e|e={dMJ(ivBzt%63xOxqb0y=kMYt)bIcs^pr`5ykRTZhX_oCn;S8T$D0WnM5LZQfaWJ9A=;~MyaybgkxLX_gsgU}~phSzNpL<1h zV1a#Y&+1(I!g{eX@x~5BIAy}94nzw;(v){^APoD7)iJpG$C|4@5~E!Nb;cekh+Y=U z@C_MbAUIU^x9mF}sl&W|!i=HS;@CCB(x?OUYdON)0;U_8NfBB^lFRXIuzu6*G*k8B~GGzBb#m&{up($UXz%0csUj8uV_GBX!OTI0lXn65Btdoj`F>YJO=VltqqX<>i=!W1mMLWJOE8Le;zJwtG!wY5AHDu)NI1D}`o1L|SBqRo zza1teMh9S3(2@R3UnYeO@}-%mGlbjwD$og|A$_g! zn2ZSEB%bu(!Mw~TKrcW?8i91tg(Xlr*o$R|5M9_Lz&s_oh7dng0q}_4q}nm`VxvJB zy23+=IO^Wj6YQpfqqtha9YwDS3T{(+;wgcZvPfNMf$fI(|i+Eo7Z127X-J;o99kT}@ttFUBP3wQ;Nkcz?#dgJ*yGb^T!&EUX zAmiQZ6u;4(>FuQr9D4-r9k>eYHt`yE2)DxJvUC8~y4Cp*wn51Z`j=WATC1CjQWNy0 z7QA(j6=Ioz%?XYiti_MDFG&S^X*tGP81`r!2AG4eCv(q$rDVwHM@O9i!x)NomYSim z38FSzIxW-`wg;UbpL)RA7T#7=D`9SNtd$lP^w8dsDm0-$g|NUyN5kcvqgMzl3RVb< z%h45r%-RNMOWunEOm0bBwPSnU^0;5z0ia`8;wPQ(f9&v!y#S043=@nN3>u6b3?Ysr zIhHXzF-kF5F=jDzF@iCWF`hB3F}gX(E!U(ye+A|rMlfKLoQk|1o?4rOmYES@#1~m9 z?)Z(c*CqgNSB${coH*ux6mc7YnNH{CvxjMbTwdcq_kIp9@;HRJ`4#zjO@_U;5U<%t zb35{=N8C!_eDw<>EmtPWKb*sd`ESZYOP4nidp^j*%h}25ba83HTvkAK*j4h0hd;`G8LYJ`30k*baCfP_nB? z7=X(Gs{wZc9s=wJ901IFwn(f53<5R-wgYwp4gfv|vy}q;boBr~u7Y z@S%Ie;zu1!#&?5r9r=y8%4{k?!+fO8huu66czkw{x+UBMp1M7v@H1|Us~qw@=#t?j zSDI!}8&LK&2ipyz=9M4Ybc4lDg5 zmn(Cl;3G!>wk^{lmb0%jdg0;c?D0aHg)fH~jNX-s|a*fCmw zX9x0VosATrNw{eC=b>SFd{)!3zQml1R|zFo2|h=iZ@!(5c+%hI;$M%rT$f7|J_eeb z3eb=@`Q^jza%Uc=`iYL4?Fv)(ggq#O`X^BTjN6Ae>XZ84Zlxb|$-=TnT=kueuW08w z((H55tSmtD2N%t{W1!iZhlXWyeMHA{iTR9u1ZVTC*K^3DpOZHtj&2{~rW;IEuH-`a z_ptV(-Pkt*^M51o2gOU%(Pgm#Y;MI@irP@3c`u9M@)GJ6vK7)O?>vh#Q5VI_kE-TkE$lT>?4xsqognpv zd&77OYDkpGka`~(w`;~NS0__al9UcvHJd1DmzpX#tGGE;8w{=BH_|%NN%5F)A6&MN z>(r+<)U4F%LYF3V5x@DaW%sv=IajP zF_jv`xmto|55G8-9GKq0*B5BJ*)&cHD+|bwUiB1)`64X(%Bpb%l`DP?`;ciiIHy3k zK#a4TlwY)x*XRWCn*upjh<_Z1d%9*_IGF5=xAIi2b|`I%_WXQS2ysDiGpoQuH`(my z0DY$TtZtvnGbSx)7poSb64@Z)LKUvVn`$!r2Wjo8>%gC}VoB`{t@MAy*t!lXO?-+v zbLsd!-0#Sw!qkv5hG1;83e{T}=@;ihGJU+7+ta?yQk0h1M$qr-V!O7TajgRJL^d7j z8)Zxj-{v({V~VEY7Mzq>hhX5eu(+kJHJDJ`5nkjDgTr0LQYp9$DG!M8F+SOi&<%b} z-kp)2)mFb+#BiM&pH{EL03DGs4dFG3e!dmqPqDi6iE-3XLoC$Z%P1j+bSoe;tyV&O z&&eybs_zK7@4}3J5{$)+X<$qPV;UIKz?cTcG%%)tF%A6xpn-$`!!IV{&wgoV;;#C; zbN%9k<$kdn_X2)k-F;^I#(56i+pc(>_f4Vf5M?#~<@OzZpHH~saXgI=VaaQoKHNq` zD(s@Jd{HyjmkwtW==V2fygKfbx9)FY7T5b3B|c^Mfayd1qalR<5F|b+oF>?2DupowIqJrv~?Ki*x{Z1o!3gfhPG(ajj?pjI^nCBrb9@n5Zco zTnw+9#7R*;rW3~8m;G$ z+}v%2w*gbW`v5HOK>+E#17MwA0Wkdy0MpNbQm7xgB86;h1?{j-FBD%W{V%20d^Fbi z|2tr|H{G$wMw(o@b>3Q;U;p>!Ntk;Vsko+j3g_n0v~H~BaL4_>@c(y_L)X1yn_twN ztwS~*Ieb{Z4|BLi#U89F8ISkb0Al>f3Xs6@&pBw={W_}6#_@0rl}xCWbIDsL*2=ND z9hlk90VbdSEUA@aZU->ulFh*X02~G8+%+5cT;P*|&jWt_gj#Vv@D^as32ER@0Pi`z zRty5~0ES6bJPN!Pcnk1H!1b@=j1l-IgfSnEa9q!EAvg7O%E>j7@Z z@v-+5H7*!mR6JgaejoC$+Ay?XibeduyUMfeeudZHvyZ9~zUzi1ehBo>e0}fN4V66V z|MmYzMfoiJ#4*zQE&3-x|LVQ_?>$evcklc6e!4LK>$b@pm!qLB-+T35Lv-!EW^d(a z`q$okXWyT2NAWr(nVut_J00@{UH$807cd{-0Za!>2AlyP{mFpwfR85Dii3dn0dE2J0A2#@2J8Sl1lR&N zk?n5PjD2AcbKjQcqr>%<<6NopYXxn(Q2EXPdg?eeJ{|(*_<0nV<7YeY1;Cw?)Oc$F zW(}6z;YyflIP6jrB&jIGMauD?F$HTy90#8Id z$LmIfIi5=p=Cf7+vu_`Q&iKqe2+XPJec-9U`+=tc?*pC={1)&G;Maj!&E3Gt>38!E zacY9geV0!TC6W$LthaSOEIf!vsPMtxs&nFwK&Qp?uR|U6|F!(08vP8wT4)K}ejO*a z7W-`f?&BQ)pG$1NZ_CNHzvJ1{Z2$D%PtyM3FK<3e`;8q>pR4@icfNT3Ewkz0_Uo5k zIe*t{Z9e1R-A^PgdFUI@e=XwMbJfQ)-aGG>_Hz&1;JfzAZ+xll)Z=cx__4cvf7-dV z{@3d#-MW6mzxj50fBe9!hnp`L-1V9-{=&YSel`5!lJDO6kblSLS1-G0!Oee6>|0m6 z!J;`&ef!se)(79a zYVq?|E&Af!cU*b+ss|2kGe$b^ziD3ZM<0Lj$}he-ixe zHp@KsXDiSC&X0auv*)yFH!eAU$)nFd_?sHv15ZYxj~(|v=Y8QoP1WKZwQJw|@ur>s z@ynWBAAkHx@W#^zUV3DIO?k_wf7<%o)0@8Zix+F|crLIgQ~&ZAPyfqfHShF&chiD~ zZ+!AwuWqWDKJA5{?fCAZir^R5)&!Sb@yvDK3ap#-y{?)!ep7z)@lW6J`7=MPubEzR z|F0I@f6@QC{-ICReD2Y0`*(!aHST$PS#{56kAG=e=fDkzZ(qOo_CGH?cWuv%x{8rU zy;J__NAoue|WwKJ6!! zziGbh$^{Sn_s2Kf`q=TCK6m>5(s%B8<==OYfBS(q z@pt48ALhKV2yi8U&%(O^PXJyAd;q}pQsDu#0r~+t&qAbK0T=+_SuGw1yaxCkU?S+s t0j+>2V9bqaU`zvJ8W_{SmuVfU6hE6ZHfgPW+G^E0Hhsj}ta&wkT4{EZSZHibVpAj_yV*&y?d;C7J9(6* z(E3H`ha&z33Vst25d=X*3L<_e5kL7!tRQ|=@KtNu`1{>EvyUXZJ9(8>a+fo6XYQSQ z&OP^>-#Pd0x0CCCeDC9}H)L8lDwT3~szx5ldmliZq{=#x3RL)fcWP=%zZ5}rxjaA` zxC2>NxNBI2JJ)+9s2WrQS`AtSdKmNwXbosBh-*$-E)TW_y2ZxN5kuM~iF;bkV|D$P z%~F;1`FyOHb%e{4KW)7Hb)XWBmuN&Nr@+ycvvM5V2T^O6aoynax>+g$`77Y_GXZ?5 z(kl_k$T>M7aoinw6;~57dG9l22HXMu^dI^RcjzJ0QnFHxO~*1*S;~Yz8Uo` zpvORugSLVWfY|pb+_!0t>)HA2@TZmC& z{)INRHf)Z@2TUVmC!MryDVJLtN}ta-5zFW{Q+C=>?^c8(PK2yho#{GZ^b8D}3H7)p z9FJJ`kkKBCJ9e5K)^*v@xMdoBX4L4g(+Tx?O~KQukex``Ni(U(Uegy(#_X|7uKS9Y zdb>_=ut!2xJQcMg>6pX3oC(zeXjDaHjEL1mG>(IivUT7Wkf9e z`tjbz^C(bd92jHD0G<<)!ZicLbAUg+sN3ip#dRE5MD!a)+W>0iivj%cuz(g-{tKNq zUUNHArYNKx!jGK$fX5Da593L#TA2aKpL{o>pI`orQ=5wLC+eDz;hfS@T*bsva@2u8 z^I+nqU;d00FBjp@_(#pBpoKVABw0oayO4#GFR|J$e|oGJe>9JNSDLxs7HYp9N0k%c zLEEv;3Wl&25m>7s9ngiPETSK=lD5gLAp;tOo(#lLM(+{yw(!)0cOw#0`ZFX5UAM!^ z4aA8C{F>nvr!m5Q+&PY;{3eY$wQ%*G%Rqa#Fv~$DK?V|067PAbC7SMk)N~TM>w#`Z zlq{uD0QRT+k2dAk{cSRgVY8RL?);e(`Q^U>eS6*E=#@w{6|-BUemj4p(EMh*51xKNr09dQ#`gvr1G->%p3V@g$m7l z{np{(>UWO}SF>M@tM`_`1wc^~(&8q#Knnn>N$OEMCI3piFfwknCQ#2N3t_w(fTt&1%gVR; zQ)ts!Lh(q{;M)IO?C()1;&*p}OY!&iVqr|h0nJu|;7>f^{=~2UJ%PU53$PI9EX?1F zwmM%Lgy#<_{3B;Qd)oo6~K0cji{_{5Qr(tp5 z=9m92^zHEmnM<-q;R8-D%b!ynjo)SK(H zHa;>IbYZ0}wa&~OB3KFL52@_g1b2S0!F4fRHwfq$!)oO7Jqg|p_~f`U!!GPo z7#-NRTDY!@DcfPSTVBi&g9@m0zCYo{*Jdnl5ZO?%n?fmrT8y9y+ z6D=@V>^i^MYTd4>J^A+3n>Qz~z2C0FjDd#I&Zkd8IDo$rf)=QQjLM-+*y7w!2D`sBIhP1U43riQCzmYF<8o&JO(07|svf#Wgskla9aVE%< zM`vBRJgb-#+vgGg^5#T8)CoB$r+-D8J@ATOLM-Bi%{@~#zO11o% zt^MWJR?AIQtCYWSXGE%$f3m%9Wo!RtYqzttJ8o^YOu4na_`VaeBthI~TdsC=?lV(L zJ&)7q)dr~t5H)#9VrI{eC^bEc|0Bc-#?n6JoovVP4QI{M;ha{MHI|=w&aN>iY(_aV z$#^vX;{DIz{r}N}_)84t8630XatKKLC+>R1k0kri$vc1Y)4yCFk2mk-`YuKL|A7C@ zJ!*w?-!FSq0E+(uZ7(EgcPa<qvVdDw!LE>GROlK}tHjBs-X9?jY`;@*fF( BV4(m2 literal 0 HcmV?d00001 diff --git a/convex_decomposition/ConvexDecomposition/DecomposeSample.vcproj b/convex_decomposition/ConvexDecomposition/DecomposeSample.vcproj new file mode 100644 index 0000000..72ecf9b --- /dev/null +++ b/convex_decomposition/ConvexDecomposition/DecomposeSample.vcproj @@ -0,0 +1,240 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/convex_decomposition/ConvexDecomposition/Makefile b/convex_decomposition/ConvexDecomposition/Makefile new file mode 100644 index 0000000..e92b84c --- /dev/null +++ b/convex_decomposition/ConvexDecomposition/Makefile @@ -0,0 +1,93 @@ + + +OBJS = DecomposeSample.o \ + ConvexDecomposition/bestfit.o ConvexDecomposition/float_math.o \ + ConvexDecomposition/bestfitobb.o ConvexDecomposition/meshvolume.o \ + ConvexDecomposition/cd_hull.o ConvexDecomposition/planetri.o \ + ConvexDecomposition/cd_wavefront.o ConvexDecomposition/raytri.o \ + ConvexDecomposition/concavity.o ConvexDecomposition/splitplane.o \ + ConvexDecomposition/ConvexDecomposition.o ConvexDecomposition/triangulate.o \ + ConvexDecomposition/fitsphere.o ConvexDecomposition/vlookup.o + +HEADERS = \ + ConvexDecomposition/bestfit.h \ + ConvexDecomposition/bestfitobb.h \ + ConvexDecomposition/cd_hull.h \ + ConvexDecomposition/cd_vector.h \ + ConvexDecomposition/cd_wavefront.h \ + ConvexDecomposition/concavity.h \ + ConvexDecomposition/ConvexDecomposition.h \ + ConvexDecomposition/fitsphere.h \ + ConvexDecomposition/float_math.h \ + ConvexDecomposition/meshvolume.h \ + ConvexDecomposition/planetri.h \ + ConvexDecomposition/raytri.h \ + ConvexDecomposition/splitplane.h \ + ConvexDecomposition/triangulate.h \ + ConvexDecomposition/vlookup.h + +CC = g++ + +DEBUG = -ggdb + +CFLAGS = -IConvexDecomposition -Wall -c $(DEBUG) + +LFLAGS = $(DEBUG) + +convex_decomposition: $(OBJS) + $(CC) $(LFLAGS) $(OBJS) -o convex_decomposition + +DecomposeSample.o: DecomposeSample.cpp + $(CC) $(CFLAGS) DecomposeSample.cpp -o $@ + +ConvexDecomposition/bestfit.o: ConvexDecomposition/bestfit.cpp + $(CC) $(CFLAGS) ConvexDecomposition/bestfit.cpp -o $@ + +ConvexDecomposition/bestfitobb.o: ConvexDecomposition/bestfitobb.cpp + $(CC) $(CFLAGS) ConvexDecomposition/bestfitobb.cpp -o $@ + +ConvexDecomposition/cd_hull.o: ConvexDecomposition/cd_hull.cpp + $(CC) $(CFLAGS) ConvexDecomposition/cd_hull.cpp -o $@ + +ConvexDecomposition/cd_wavefront.o: ConvexDecomposition/cd_wavefront.cpp + $(CC) $(CFLAGS) ConvexDecomposition/cd_wavefront.cpp -o $@ + +ConvexDecomposition/concavity.o: ConvexDecomposition/concavity.cpp + $(CC) $(CFLAGS) ConvexDecomposition/concavity.cpp -o $@ + +ConvexDecomposition/ConvexDecomposition.o: ConvexDecomposition/ConvexDecomposition.cpp + $(CC) $(CFLAGS) ConvexDecomposition/ConvexDecomposition.cpp -o $@ + +ConvexDecomposition/fitsphere.o: ConvexDecomposition/fitsphere.cpp + $(CC) $(CFLAGS) ConvexDecomposition/fitsphere.cpp -o $@ + +ConvexDecomposition/float_math.o: ConvexDecomposition/float_math.cpp + $(CC) $(CFLAGS) ConvexDecomposition/float_math.cpp -o $@ + +ConvexDecomposition/meshvolume.o: ConvexDecomposition/meshvolume.cpp + $(CC) $(CFLAGS) ConvexDecomposition/meshvolume.cpp -o $@ + +ConvexDecomposition/planetri.o: ConvexDecomposition/planetri.cpp + $(CC) $(CFLAGS) ConvexDecomposition/planetri.cpp -o $@ + +ConvexDecomposition/raytri.o: ConvexDecomposition/raytri.cpp + $(CC) $(CFLAGS) ConvexDecomposition/raytri.cpp -o $@ + +ConvexDecomposition/splitplane.o: ConvexDecomposition/splitplane.cpp + $(CC) $(CFLAGS) ConvexDecomposition/splitplane.cpp -o $@ + +ConvexDecomposition/triangulate.o: ConvexDecomposition/triangulate.cpp + $(CC) $(CFLAGS) ConvexDecomposition/triangulate.cpp -o $@ + +ConvexDecomposition/vlookup.o: ConvexDecomposition/vlookup.cpp ConvexDecomposition/vlookup.cpp + $(CC) $(CFLAGS) ConvexDecomposition/vlookup.cpp -o $@ + +install: + cp convex_decomposition ../../convex_decomposition/bin/ + +clean: + \rm *.o */*.o convex_decomposition + +tar: + tar cfv ConvexDecomposition.tar DecomposeSample.cpp convex_decomposition Makefile \ + ConvexDecomposition diff --git a/convex_decomposition/ConvexDecomposition/chair.obj b/convex_decomposition/ConvexDecomposition/chair.obj new file mode 100644 index 0000000..eddbcf4 --- /dev/null +++ b/convex_decomposition/ConvexDecomposition/chair.obj @@ -0,0 +1,3083 @@ +v -0.203961 0.754510 0.211019 +v -0.199603 1.785488 -0.001498 +v -0.199163 0.754510 -0.001498 +v -0.199603 1.785488 -0.001498 +v -0.203961 0.754510 0.211019 +v -0.199830 1.524172 0.214066 +v -0.214032 1.655104 0.216193 +v -0.199830 1.524172 0.214066 +v -0.214032 0.738577 0.216193 +v -0.203961 0.754510 0.211019 +v -0.214032 0.738577 0.216193 +v -0.199830 1.524172 0.214066 +v -0.214032 0.738577 0.216193 +v -0.203961 0.754510 0.211019 +v -0.209234 0.738577 -0.001498 +v -0.199163 0.754510 -0.001498 +v -0.209234 0.738577 -0.001498 +v -0.203961 0.754510 0.211019 +v 0.056176 0.210912 -0.001498 +v -0.011230 0.210913 0.215059 +v -0.012112 0.210912 -0.001498 +v 0.057057 0.210913 0.214728 +v -0.012112 0.210912 -0.001498 +v -0.011230 0.275571 0.215059 +v -0.012112 0.275571 -0.001498 +v -0.011230 0.210913 0.215059 +v -0.012112 0.275571 -0.001498 +v 0.057057 0.275571 0.214728 +v 0.056176 0.275571 -0.001498 +v -0.011230 0.275571 0.215059 +v 0.056176 0.275571 -0.001498 +v 0.057057 0.210913 0.214728 +v 0.056176 0.210912 -0.001498 +v 0.057057 0.275571 0.214728 +v 0.057057 0.210913 0.214728 +v -0.146260 0.206221 0.217801 +v -0.011230 0.210913 0.215059 +v -0.146260 0.206221 0.217801 +v 0.057057 0.210913 0.214728 +v 0.182828 0.206221 0.216341 +v -0.011230 0.275571 0.215059 +v 0.182828 0.280263 0.216341 +v 0.057057 0.275571 0.214728 +v 0.182828 0.280263 0.216341 +v -0.011230 0.275571 0.215059 +v -0.146260 0.280263 0.217801 +v -0.011230 0.210913 0.215059 +v -0.146260 0.280263 0.217801 +v -0.011230 0.275571 0.215059 +v -0.146260 0.206221 0.217801 +v 0.057057 0.275571 0.214728 +v 0.182828 0.206221 0.216341 +v 0.057057 0.210913 0.214728 +v 0.182828 0.280263 0.216341 +v -0.146260 0.206221 0.217801 +v 0.181545 0.206221 0.286352 +v -0.147543 0.206221 0.287812 +v 0.182828 0.206221 0.216341 +v -0.147543 0.206221 0.287812 +v 0.181545 0.280263 0.286352 +v -0.147543 0.280263 0.287812 +v 0.181545 0.206221 0.286352 +v -0.147543 0.280263 0.287812 +v 0.182828 0.280263 0.216341 +v -0.146260 0.280263 0.217801 +v 0.181545 0.280263 0.286352 +v -0.208590 -0.001787 0.279676 +v -0.214032 0.243242 0.216341 +v -0.207557 -0.001787 0.223301 +v -0.215315 0.243242 0.286352 +v -0.207557 -0.001787 0.223301 +v -0.146260 0.206221 0.217801 +v -0.152985 -0.001787 0.224477 +v -0.146260 0.206221 0.217801 +v -0.207557 -0.001787 0.223301 +v -0.214032 0.243242 0.216341 +v -0.152985 -0.001787 0.224477 +v -0.147543 0.206221 0.287812 +v -0.154018 -0.001787 0.280852 +v -0.146260 0.206221 0.217801 +v -0.154018 -0.001787 0.280852 +v -0.215315 0.243242 0.286352 +v -0.208590 -0.001787 0.279676 +v -0.215315 0.243242 0.286352 +v -0.154018 -0.001787 0.280852 +v -0.147543 0.206221 0.287812 +v 0.188270 -0.001787 0.279676 +v 0.182828 0.206221 0.216341 +v 0.189303 -0.001787 0.223301 +v 0.181545 0.206221 0.286352 +v 0.189303 -0.001787 0.223301 +v 0.250600 0.243242 0.217801 +v 0.243875 -0.001787 0.224477 +v 0.250600 0.243242 0.217801 +v 0.189303 -0.001787 0.223301 +v 0.182828 0.206221 0.216341 +v 0.243875 -0.001787 0.224477 +v 0.249317 0.243242 0.287812 +v 0.242842 -0.001787 0.280852 +v 0.250600 0.243242 0.217801 +v 0.242842 -0.001787 0.280852 +v 0.181545 0.206221 0.286352 +v 0.188270 -0.001787 0.279676 +v 0.181545 0.206221 0.286352 +v 0.242842 -0.001787 0.280852 +v 0.249317 0.243242 0.287812 +v -0.214032 0.243242 0.216341 +v -0.146260 0.280263 0.217801 +v -0.146260 0.206221 0.217801 +v -0.215315 0.243242 0.286352 +v -0.147543 0.206221 0.287812 +v -0.147543 0.280263 0.287812 +v 0.250600 0.243242 0.217801 +v 0.182828 0.206221 0.216341 +v 0.182828 0.280263 0.216341 +v 0.249317 0.243242 0.287812 +v 0.181545 0.280263 0.286352 +v 0.181545 0.206221 0.286352 +v -0.215315 0.243242 0.286352 +v -0.214032 0.377162 0.216341 +v -0.214032 0.243242 0.216341 +v -0.147543 0.280263 0.287812 +v -0.146260 0.280263 0.217801 +v -0.146260 0.377162 0.217801 +v 0.181545 0.280263 0.286352 +v 0.182828 0.377162 0.216341 +v 0.182828 0.280263 0.216341 +v 0.249317 0.243242 0.287812 +v 0.250600 0.243242 0.217801 +v 0.250600 0.377162 0.217801 +v 0.250600 0.377162 0.217801 +v 0.182828 0.377162 0.216341 +v -0.146260 0.377162 0.217801 +v -0.214032 0.377162 0.216341 +v -0.128461 1.675364 -0.001498 +v -0.146260 1.508024 0.217653 +v -0.132386 1.472782 0.176497 +v -0.146260 1.508024 0.217653 +v -0.128461 1.675364 -0.001498 +v -0.141462 1.768750 -0.001498 +v -0.132386 0.781150 0.176497 +v -0.141462 0.738577 -0.001498 +v -0.128461 0.781150 -0.001498 +v -0.146260 0.738577 0.217653 +v -0.132386 1.472782 0.176497 +v -0.146260 0.738577 0.217653 +v -0.132386 0.781150 0.176497 +v -0.146260 1.508024 0.217653 +v -0.160112 1.524172 0.214922 +v -0.141462 1.768750 -0.001498 +v -0.159884 1.785488 -0.001498 +v -0.141462 1.768750 -0.001498 +v -0.160112 1.524172 0.214922 +v -0.146260 1.508024 0.217653 +v -0.128461 0.781150 -0.001498 +v -0.128461 1.675364 -0.001498 +v -0.132386 0.781150 0.176497 +v -0.132386 1.472782 0.176497 +v -0.174244 1.836233 0.258962 +v -0.187331 1.836233 0.244894 +v -0.187584 1.836233 0.258675 +v -0.173991 1.836233 0.245182 +v -0.160446 1.785009 0.231735 +v -0.174244 1.836233 0.258962 +v -0.161202 1.785009 0.272981 +v -0.173991 1.836233 0.245182 +v -0.200373 1.785009 0.230875 +v -0.173991 1.836233 0.245182 +v -0.160446 1.785009 0.231735 +v -0.187331 1.836233 0.244894 +v -0.201129 1.785009 0.272121 +v -0.187331 1.836233 0.244894 +v -0.200373 1.785009 0.230875 +v -0.187584 1.836233 0.258675 +v -0.161202 1.785009 0.272981 +v -0.187584 1.836233 0.258675 +v -0.201129 1.785009 0.272121 +v -0.174244 1.836233 0.258962 +v -0.137050 1.756645 0.235571 +v -0.195826 1.756645 0.206731 +v -0.224525 1.756645 0.268286 +v -0.165749 1.756645 0.297125 +v -0.137050 1.756645 0.235571 +v -0.137050 1.715855 0.235571 +v -0.164105 1.756645 0.207415 +v -0.164105 1.715855 0.207415 +v -0.195826 1.756645 0.206731 +v -0.195826 1.715855 0.206731 +v -0.223891 1.756645 0.233700 +v -0.223891 1.715855 0.233700 +v -0.165749 1.756645 0.297125 +v -0.165749 1.715855 0.297125 +v -0.137684 1.756645 0.270157 +v -0.137684 1.715855 0.270157 +v -0.224525 1.756645 0.268286 +v -0.224525 1.715855 0.268286 +v -0.197470 1.756645 0.296441 +v -0.197470 1.715855 0.296441 +v -0.161841 1.691613 0.233120 +v -0.137684 1.715855 0.270157 +v -0.162545 1.691613 0.271537 +v -0.199030 1.691613 0.232319 +v -0.164105 1.715855 0.207415 +v -0.161841 1.691613 0.233120 +v -0.199734 1.691613 0.270736 +v -0.223891 1.715855 0.233700 +v -0.199030 1.691613 0.232319 +v -0.162545 1.691613 0.271537 +v -0.197470 1.715855 0.296441 +v -0.199734 1.691613 0.270736 +v -0.137684 1.756645 0.270157 +v -0.164105 1.756645 0.207415 +v -0.223891 1.756645 0.233700 +v -0.197470 1.756645 0.296441 +v -0.137050 1.715855 0.235571 +v -0.195826 1.715855 0.206731 +v -0.224525 1.715855 0.268286 +v -0.165749 1.715855 0.297125 +v -0.161202 1.785009 0.272981 +v -0.160446 1.785009 0.231735 +v -0.201129 1.785009 0.272121 +v -0.200373 1.785009 0.230875 +v -0.162545 1.691613 0.271537 +v -0.161841 1.691613 0.233120 +v -0.199734 1.691613 0.270736 +v -0.199030 1.691613 0.232319 +v -0.162545 1.691613 0.271537 +v -0.161841 1.668882 0.233120 +v -0.161841 1.691613 0.233120 +v -0.162545 1.668882 0.271537 +v -0.161841 1.691613 0.233120 +v -0.199030 1.668882 0.232319 +v -0.199030 1.691613 0.232319 +v -0.161841 1.668882 0.233120 +v -0.199030 1.691613 0.232319 +v -0.199734 1.668882 0.270736 +v -0.199734 1.691613 0.270736 +v -0.199030 1.668882 0.232319 +v -0.199734 1.691613 0.270736 +v -0.162545 1.668882 0.271537 +v -0.162545 1.691613 0.271537 +v -0.199734 1.668882 0.270736 +v -0.161841 1.668882 0.233120 +v -0.214032 1.655104 0.216193 +v -0.199030 1.668882 0.232319 +v -0.146260 1.655104 0.217653 +v -0.162545 1.668882 0.271537 +v -0.146260 1.655104 0.217653 +v -0.161841 1.668882 0.233120 +v -0.147543 1.655104 0.287664 +v -0.199734 1.668882 0.270736 +v -0.147543 1.655104 0.287664 +v -0.162545 1.668882 0.271537 +v -0.215315 1.655104 0.286203 +v -0.199030 1.668882 0.232319 +v -0.215315 1.655104 0.286203 +v -0.199734 1.668882 0.270736 +v -0.214032 1.655104 0.216193 +v -0.159884 1.900273 -0.001498 +v -0.160112 1.524172 0.214922 +v -0.159884 1.785488 -0.001498 +v -0.160112 1.638956 0.214922 +v -0.199603 1.785488 -0.001498 +v -0.199830 1.638956 0.214066 +v -0.199603 1.900273 -0.001498 +v -0.199830 1.524172 0.214066 +v -0.199603 1.900273 -0.001498 +v -0.160112 1.638956 0.214922 +v -0.159884 1.900273 -0.001498 +v -0.160112 1.638956 0.214922 +v -0.199603 1.900273 -0.001498 +v -0.199830 1.638956 0.214066 +v -0.160112 1.638956 0.214922 +v -0.146260 1.508024 0.217653 +v -0.160112 1.524172 0.214922 +v -0.146260 1.655104 0.217653 +v -0.199830 1.638956 0.214066 +v -0.146260 1.655104 0.217653 +v -0.160112 1.638956 0.214922 +v -0.214032 1.655104 0.216193 +v -0.199830 1.638956 0.214066 +v -0.147543 1.655104 0.287664 +v -0.146260 1.508024 0.217653 +v -0.146260 1.655104 0.217653 +v -0.141462 0.738577 -0.001498 +v -0.146260 0.683386 0.217653 +v -0.141462 0.682417 -0.001498 +v -0.146260 0.738577 0.217653 +v -0.209234 0.682417 -0.001498 +v -0.214032 0.738577 0.216193 +v -0.209234 0.738577 -0.001498 +v -0.214032 0.683393 0.216193 +v -0.141462 0.682417 -0.001498 +v -0.214032 0.683393 0.216193 +v -0.209234 0.682417 -0.001498 +v -0.146260 0.683386 0.217653 +v -0.146260 0.738577 0.217653 +v -0.147543 0.738577 0.287664 +v -0.215315 1.655104 0.286203 +v -0.147543 0.738577 0.287664 +v -0.147543 1.655104 0.287664 +v -0.215315 0.710897 0.286203 +v -0.214032 1.655104 0.216193 +v -0.215315 0.710897 0.286203 +v -0.215315 1.655104 0.286203 +v -0.214032 0.738577 0.216193 +v -0.213681 0.377162 -0.001498 +v -0.214032 0.456870 0.216341 +v -0.213680 0.456870 -0.001498 +v -0.214032 0.377162 0.216341 +v -0.213680 0.456870 -0.001498 +v -0.231718 0.471319 0.172684 +v -0.231718 0.471319 -0.001498 +v -0.214032 0.456870 0.216341 +v 0.261861 0.726253 0.301147 +v -0.147543 0.738577 0.287664 +v -0.134999 0.726253 0.301147 +v 0.245288 0.738577 0.287664 +v -0.133232 0.726253 0.204720 +v 0.246571 0.738577 0.217653 +v 0.263628 0.726253 0.204720 +v -0.146260 0.738577 0.217653 +v -0.133232 0.690088 0.204720 +v -0.146260 0.683386 0.217653 +v -0.147543 0.683217 0.287664 +v -0.134999 0.690088 0.301147 +v -0.147543 0.683217 0.287664 +v -0.214032 0.683393 0.216193 +v 0.263628 0.690088 0.204720 +v 0.261861 0.690088 0.301147 +v 0.261861 0.690088 0.301147 +v 0.249317 0.683217 0.287664 +v 0.250600 0.683217 0.217653 +v 0.263628 0.690088 0.204720 +v 0.249317 0.683217 0.287664 +v -0.147543 0.609148 0.288033 +v 0.181545 0.609148 0.286573 +v -0.147543 0.609148 0.288033 +v 0.249317 0.683217 0.287664 +v -0.147543 0.683217 0.287664 +v 0.182828 0.608985 0.216563 +v -0.146260 0.683386 0.217653 +v 0.250600 0.683217 0.217653 +v -0.146260 0.683386 0.217653 +v 0.182828 0.608985 0.216563 +v -0.146260 0.608985 0.218023 +v 0.181545 0.609148 0.286573 +v -0.146260 0.608985 0.218023 +v 0.182828 0.608985 0.216563 +v -0.147543 0.609148 0.288033 +v 0.261861 0.726253 0.301147 +v -0.215315 0.710897 0.286203 +v -0.147543 0.609148 0.288033 +v -0.147543 0.683217 0.287664 +v -0.214032 0.683393 0.216193 +v -0.146260 0.683386 0.217653 +v -0.146260 0.608985 0.218023 +v -0.214032 0.456870 0.216341 +v -0.146260 0.456870 0.217801 +v -0.147543 0.609148 0.288033 +v -0.146260 0.608985 0.218023 +v -0.215315 0.710897 0.286203 +v -0.147543 0.280263 0.287812 +v -0.147543 0.609148 0.288033 +v -0.214032 0.456870 0.216341 +v -0.146260 0.608985 0.218023 +v -0.146260 0.456870 0.217801 +v -0.146260 0.608985 0.218023 +v -0.214032 0.456870 0.216341 +v -0.214032 0.683393 0.216193 +v -0.152985 -0.001787 0.224477 +v -0.208590 -0.001787 0.279676 +v -0.207557 -0.001787 0.223301 +v -0.154018 -0.001787 0.280852 +v 0.250600 0.683217 0.217653 +v 0.249317 0.683217 0.287664 +v 0.182828 0.608985 0.216563 +v 0.182828 0.456870 0.216341 +v 0.181545 0.609148 0.286573 +v 0.250600 0.456870 0.217801 +v 0.249317 0.683217 0.287664 +v 0.250600 0.683217 0.217653 +v 0.181545 0.609148 0.286573 +v 0.181545 0.609148 0.286573 +v 0.249317 0.243242 0.287812 +v 0.249317 0.683217 0.287664 +v 0.182828 0.456870 0.216341 +v 0.250600 0.683217 0.217653 +v 0.250600 0.456870 0.217801 +v 0.250600 0.683217 0.217653 +v 0.182828 0.456870 0.216341 +v 0.182828 0.608985 0.216563 +v 0.243875 -0.001787 0.224477 +v 0.188270 -0.001787 0.279676 +v 0.189303 -0.001787 0.223301 +v 0.242842 -0.001787 0.280852 +v 0.250600 0.377162 0.217801 +v 0.247841 0.456870 -0.001498 +v 0.250600 0.456870 0.217801 +v 0.247847 0.377162 -0.001498 +v -0.146260 0.456870 0.217801 +v 0.182828 0.377162 0.216341 +v 0.182828 0.456870 0.216341 +v -0.146260 0.377162 0.217801 +v 0.247841 0.456870 -0.001498 +v 0.262209 0.471319 0.172684 +v 0.250600 0.456870 0.217801 +v 0.262209 0.471319 -0.001498 +v -0.231718 0.520293 -0.001498 +v -0.231718 0.520293 0.172684 +v -0.223747 0.491776 0.204447 +v -0.163649 0.564918 -0.001498 +v -0.163649 0.564918 0.172684 +v 0.199481 0.564918 -0.001498 +v 0.199481 0.564918 0.172684 +v 0.262209 0.520293 -0.001498 +v 0.262209 0.520293 0.172684 +v -0.163649 0.522718 0.208096 +v 0.199480 0.522718 0.208096 +v 0.261171 0.491776 0.208368 +v 0.262209 0.520293 -0.001498 +v 0.261171 0.491776 0.208368 +v 0.247847 0.377162 -0.001498 +v 0.182828 0.377162 0.216341 +v 0.182828 0.377162 -0.001498 +v 0.250600 0.377162 0.217801 +v -0.147984 0.377162 -0.001498 +v 0.182828 0.377162 0.216341 +v -0.146260 0.377162 0.217801 +v 0.182828 0.377162 -0.001498 +v -0.147984 0.377162 -0.001498 +v -0.214032 0.377162 0.216341 +v -0.213681 0.377162 -0.001498 +v -0.146260 0.377162 0.217801 +v 0.182828 0.456870 0.216341 +v 0.250600 0.456870 0.217801 +v -0.146260 0.456870 0.217801 +v -0.214032 0.456870 0.216341 +v -0.203961 0.754510 -0.214016 +v -0.199163 0.754510 -0.001498 +v -0.199603 1.785488 -0.001498 +v -0.199603 1.785488 -0.001498 +v -0.199830 1.524172 -0.217063 +v -0.203961 0.754510 -0.214016 +v -0.214032 1.655105 -0.219189 +v -0.214032 0.738577 -0.219189 +v -0.199830 1.524172 -0.217063 +v -0.203961 0.754510 -0.214016 +v -0.199830 1.524172 -0.217063 +v -0.214032 0.738577 -0.219189 +v -0.214032 0.738577 -0.219189 +v -0.209234 0.738577 -0.001498 +v -0.203961 0.754510 -0.214016 +v -0.199163 0.754510 -0.001498 +v -0.203961 0.754510 -0.214016 +v -0.209234 0.738577 -0.001498 +v -0.011230 0.210913 -0.218055 +v 0.057057 0.210913 -0.217724 +v -0.012112 0.210912 -0.001498 +v -0.012112 0.275571 -0.001498 +v -0.011230 0.275571 -0.218055 +v -0.011230 0.210913 -0.218055 +v 0.057057 0.275571 -0.217724 +v -0.011230 0.275571 -0.218055 +v 0.056176 0.275571 -0.001498 +v 0.056176 0.210912 -0.001498 +v 0.057057 0.210913 -0.217724 +v 0.057057 0.275571 -0.217724 +v 0.057057 0.210913 -0.217724 +v -0.011230 0.210913 -0.218055 +v -0.146260 0.206221 -0.220798 +v -0.146260 0.206221 -0.220798 +v 0.182828 0.206221 -0.219337 +v 0.057057 0.210913 -0.217724 +v -0.011230 0.275571 -0.218055 +v 0.057057 0.275571 -0.217724 +v 0.182828 0.280263 -0.219337 +v 0.182828 0.280263 -0.219337 +v -0.146260 0.280263 -0.220798 +v -0.011230 0.275571 -0.218055 +v -0.011230 0.210913 -0.218055 +v -0.011230 0.275571 -0.218055 +v -0.146260 0.280263 -0.220798 +v -0.146260 0.206221 -0.220798 +v 0.057057 0.275571 -0.217724 +v 0.057057 0.210913 -0.217724 +v 0.182828 0.206221 -0.219337 +v 0.182828 0.280263 -0.219337 +v -0.146260 0.206221 -0.220798 +v -0.147543 0.206221 -0.290808 +v 0.181545 0.206221 -0.289348 +v 0.182828 0.206221 -0.219337 +v -0.147543 0.206221 -0.290808 +v -0.147543 0.280263 -0.290808 +v 0.181545 0.280263 -0.289348 +v 0.181545 0.206221 -0.289348 +v -0.147543 0.280263 -0.290808 +v -0.146260 0.280263 -0.220798 +v 0.182828 0.280263 -0.219337 +v 0.181545 0.280263 -0.289348 +v -0.208590 -0.001787 -0.282672 +v -0.207557 -0.001787 -0.226297 +v -0.214032 0.243242 -0.219337 +v -0.215315 0.243242 -0.289348 +v -0.207557 -0.001787 -0.226297 +v -0.152985 -0.001787 -0.227473 +v -0.146260 0.206221 -0.220798 +v -0.146260 0.206221 -0.220798 +v -0.214032 0.243242 -0.219337 +v -0.207557 -0.001787 -0.226297 +v -0.152985 -0.001787 -0.227473 +v -0.154018 -0.001787 -0.283848 +v -0.147543 0.206221 -0.290808 +v -0.146260 0.206221 -0.220798 +v -0.154018 -0.001787 -0.283848 +v -0.208590 -0.001787 -0.282672 +v -0.215315 0.243242 -0.289348 +v -0.215315 0.243242 -0.289348 +v -0.147543 0.206221 -0.290808 +v -0.154018 -0.001787 -0.283848 +v 0.188270 -0.001787 -0.282672 +v 0.189303 -0.001787 -0.226297 +v 0.182828 0.206221 -0.219337 +v 0.181545 0.206221 -0.289348 +v 0.189303 -0.001787 -0.226297 +v 0.243875 -0.001787 -0.227473 +v 0.250600 0.243242 -0.220798 +v 0.250600 0.243242 -0.220798 +v 0.182828 0.206221 -0.219337 +v 0.189303 -0.001787 -0.226297 +v 0.243875 -0.001787 -0.227473 +v 0.242842 -0.001787 -0.283848 +v 0.249317 0.243242 -0.290808 +v 0.250600 0.243242 -0.220798 +v 0.242842 -0.001787 -0.283848 +v 0.188270 -0.001787 -0.282672 +v 0.181545 0.206221 -0.289348 +v 0.181545 0.206221 -0.289348 +v 0.249317 0.243242 -0.290808 +v 0.242842 -0.001787 -0.283848 +v -0.214032 0.243242 -0.219337 +v -0.146260 0.206221 -0.220798 +v -0.146260 0.280263 -0.220798 +v -0.215315 0.243242 -0.289348 +v -0.147543 0.280263 -0.290808 +v -0.147543 0.206221 -0.290808 +v 0.250600 0.243242 -0.220798 +v 0.182828 0.280263 -0.219337 +v 0.182828 0.206221 -0.219337 +v 0.249317 0.243242 -0.290808 +v 0.181545 0.206221 -0.289348 +v 0.181545 0.280263 -0.289348 +v -0.215315 0.243242 -0.289348 +v -0.214032 0.243242 -0.219337 +v -0.214032 0.377162 -0.219337 +v -0.147543 0.280263 -0.290808 +v -0.146260 0.377162 -0.220798 +v -0.146260 0.280263 -0.220798 +v 0.181545 0.280263 -0.289348 +v 0.182828 0.280263 -0.219337 +v 0.182828 0.377162 -0.219337 +v 0.249317 0.243242 -0.290808 +v 0.250600 0.377162 -0.220798 +v 0.250600 0.243242 -0.220798 +v 0.250600 0.377162 -0.220798 +v 0.182828 0.377162 -0.219337 +v -0.146260 0.377162 -0.220798 +v -0.214032 0.377162 -0.219337 +v -0.128461 1.675364 -0.001498 +v -0.132386 1.472782 -0.179493 +v -0.146260 1.508024 -0.220649 +v -0.146260 1.508024 -0.220649 +v -0.141462 1.768750 -0.001498 +v -0.128461 1.675364 -0.001498 +v -0.132386 0.781150 -0.179493 +v -0.128461 0.781150 -0.001498 +v -0.141462 0.738577 -0.001498 +v -0.146260 0.738577 -0.220649 +v -0.132386 1.472782 -0.179493 +v -0.132386 0.781150 -0.179493 +v -0.146260 0.738577 -0.220649 +v -0.146260 1.508024 -0.220649 +v -0.160112 1.524172 -0.217918 +v -0.159884 1.785488 -0.001498 +v -0.141462 1.768750 -0.001498 +v -0.141462 1.768750 -0.001498 +v -0.146260 1.508024 -0.220649 +v -0.160112 1.524172 -0.217918 +v -0.128461 0.781150 -0.001498 +v -0.132386 0.781150 -0.179493 +v -0.128461 1.675364 -0.001498 +v -0.132386 1.472782 -0.179493 +v -0.174244 1.836233 -0.261959 +v -0.187584 1.836233 -0.261671 +v -0.187331 1.836233 -0.247891 +v -0.173991 1.836233 -0.248178 +v -0.160446 1.785009 -0.234732 +v -0.161202 1.785009 -0.275978 +v -0.174244 1.836233 -0.261959 +v -0.173991 1.836233 -0.248178 +v -0.200373 1.785009 -0.233871 +v -0.160446 1.785009 -0.234732 +v -0.173991 1.836233 -0.248178 +v -0.187331 1.836233 -0.247891 +v -0.201129 1.785009 -0.275117 +v -0.200373 1.785009 -0.233871 +v -0.187331 1.836233 -0.247891 +v -0.187584 1.836233 -0.261671 +v -0.161202 1.785009 -0.275978 +v -0.201129 1.785009 -0.275117 +v -0.187584 1.836233 -0.261671 +v -0.174244 1.836233 -0.261959 +v -0.137050 1.756645 -0.238567 +v -0.195826 1.756645 -0.209728 +v -0.224525 1.756645 -0.271282 +v -0.165749 1.756645 -0.300121 +v -0.137050 1.756645 -0.238567 +v -0.164105 1.756645 -0.210411 +v -0.137050 1.715855 -0.238567 +v -0.164105 1.715855 -0.210411 +v -0.195826 1.756645 -0.209728 +v -0.223891 1.756645 -0.236696 +v -0.195826 1.715855 -0.209728 +v -0.223891 1.715855 -0.236696 +v -0.165749 1.756645 -0.300121 +v -0.137684 1.756645 -0.273153 +v -0.165749 1.715855 -0.300121 +v -0.137684 1.715855 -0.273153 +v -0.224525 1.756645 -0.271282 +v -0.197470 1.756645 -0.299438 +v -0.224525 1.715855 -0.271282 +v -0.197470 1.715855 -0.299438 +v -0.161841 1.691613 -0.236117 +v -0.162545 1.691613 -0.274534 +v -0.137684 1.715855 -0.273153 +v -0.199030 1.691613 -0.235315 +v -0.161841 1.691613 -0.236117 +v -0.164105 1.715855 -0.210411 +v -0.199734 1.691613 -0.273733 +v -0.199030 1.691613 -0.235315 +v -0.223891 1.715855 -0.236696 +v -0.162545 1.691613 -0.274534 +v -0.199734 1.691613 -0.273733 +v -0.197470 1.715855 -0.299438 +v -0.137684 1.756645 -0.273153 +v -0.164105 1.756645 -0.210411 +v -0.223891 1.756645 -0.236696 +v -0.197470 1.756645 -0.299438 +v -0.137050 1.715855 -0.238567 +v -0.195826 1.715855 -0.209728 +v -0.224525 1.715855 -0.271282 +v -0.165749 1.715855 -0.300121 +v -0.161202 1.785009 -0.275978 +v -0.160446 1.785009 -0.234732 +v -0.201129 1.785009 -0.275117 +v -0.200373 1.785009 -0.233871 +v -0.162545 1.691613 -0.274534 +v -0.161841 1.691613 -0.236117 +v -0.199734 1.691613 -0.273733 +v -0.199030 1.691613 -0.235315 +v -0.162545 1.691613 -0.274534 +v -0.161841 1.691613 -0.236117 +v -0.161841 1.668882 -0.236117 +v -0.162545 1.668882 -0.274534 +v -0.161841 1.691613 -0.236117 +v -0.199030 1.691613 -0.235315 +v -0.199030 1.668882 -0.235315 +v -0.161841 1.668882 -0.236117 +v -0.199030 1.691613 -0.235315 +v -0.199734 1.691613 -0.273733 +v -0.199734 1.668882 -0.273733 +v -0.199030 1.668882 -0.235315 +v -0.199734 1.691613 -0.273733 +v -0.162545 1.691613 -0.274534 +v -0.162545 1.668882 -0.274534 +v -0.199734 1.668882 -0.273733 +v -0.161841 1.668882 -0.236117 +v -0.199030 1.668882 -0.235315 +v -0.214032 1.655105 -0.219189 +v -0.146260 1.655105 -0.220649 +v -0.162545 1.668882 -0.274534 +v -0.161841 1.668882 -0.236117 +v -0.146260 1.655105 -0.220649 +v -0.147543 1.655105 -0.290660 +v -0.199734 1.668882 -0.273733 +v -0.162545 1.668882 -0.274534 +v -0.147543 1.655105 -0.290660 +v -0.215315 1.655105 -0.289200 +v -0.199030 1.668882 -0.235315 +v -0.199734 1.668882 -0.273733 +v -0.215315 1.655105 -0.289200 +v -0.214032 1.655105 -0.219189 +v -0.159884 1.900273 -0.001498 +v -0.159884 1.785488 -0.001498 +v -0.160112 1.524172 -0.217918 +v -0.160112 1.638956 -0.217918 +v -0.199603 1.785488 -0.001498 +v -0.199603 1.900273 -0.001498 +v -0.199830 1.638956 -0.217063 +v -0.199830 1.524172 -0.217063 +v -0.199603 1.900273 -0.001498 +v -0.159884 1.900273 -0.001498 +v -0.160112 1.638956 -0.217918 +v -0.160112 1.638956 -0.217918 +v -0.199830 1.638956 -0.217063 +v -0.199603 1.900273 -0.001498 +v -0.160112 1.638956 -0.217918 +v -0.160112 1.524172 -0.217918 +v -0.146260 1.508024 -0.220649 +v -0.146260 1.655105 -0.220649 +v -0.199830 1.638956 -0.217063 +v -0.160112 1.638956 -0.217918 +v -0.146260 1.655105 -0.220649 +v -0.214032 1.655105 -0.219189 +v -0.199830 1.638956 -0.217063 +v -0.147543 1.655105 -0.290660 +v -0.146260 1.655105 -0.220649 +v -0.146260 1.508024 -0.220649 +v -0.141462 0.738577 -0.001498 +v -0.141462 0.682417 -0.001498 +v -0.146260 0.683386 -0.220649 +v -0.146260 0.738577 -0.220649 +v -0.209234 0.682417 -0.001498 +v -0.209234 0.738577 -0.001498 +v -0.214032 0.738577 -0.219189 +v -0.214032 0.683393 -0.219189 +v -0.141462 0.682417 -0.001498 +v -0.209234 0.682417 -0.001498 +v -0.214032 0.683393 -0.219189 +v -0.146260 0.683386 -0.220649 +v -0.146260 0.738577 -0.220649 +v -0.147543 0.738577 -0.290660 +v -0.215315 1.655105 -0.289200 +v -0.147543 1.655105 -0.290660 +v -0.147543 0.738577 -0.290660 +v -0.215315 0.710897 -0.289200 +v -0.214032 1.655105 -0.219189 +v -0.215315 1.655105 -0.289200 +v -0.215315 0.710897 -0.289200 +v -0.214032 0.738577 -0.219189 +v -0.213681 0.377162 -0.001498 +v -0.213680 0.456870 -0.001498 +v -0.214032 0.456870 -0.219337 +v -0.214032 0.377162 -0.219337 +v -0.231718 0.471319 -0.175680 +v -0.214032 0.456870 -0.219337 +v 0.261861 0.726253 -0.304144 +v -0.134999 0.726253 -0.304144 +v -0.147543 0.738577 -0.290660 +v 0.245288 0.738577 -0.290660 +v -0.133232 0.726253 -0.207717 +v 0.263628 0.726253 -0.207717 +v 0.246571 0.738577 -0.220649 +v -0.146260 0.738577 -0.220649 +v -0.133232 0.690088 -0.207717 +v -0.146260 0.683386 -0.220649 +v -0.134999 0.690088 -0.304144 +v -0.147543 0.683217 -0.290660 +v -0.147543 0.683217 -0.290660 +v -0.214032 0.683393 -0.219189 +v 0.263628 0.690088 -0.207717 +v 0.261861 0.690088 -0.304144 +v 0.261861 0.690088 -0.304144 +v 0.249317 0.683217 -0.290660 +v 0.250600 0.683217 -0.220649 +v 0.263628 0.690088 -0.207717 +v 0.249317 0.683217 -0.290660 +v 0.181545 0.609149 -0.289570 +v -0.147543 0.609149 -0.291030 +v -0.147543 0.609149 -0.291030 +v -0.147543 0.683217 -0.290660 +v 0.249317 0.683217 -0.290660 +v 0.182828 0.608985 -0.219559 +v 0.250600 0.683217 -0.220649 +v -0.146260 0.683386 -0.220649 +v -0.146260 0.683386 -0.220649 +v -0.146260 0.608985 -0.221019 +v 0.182828 0.608985 -0.219559 +v 0.181545 0.609149 -0.289570 +v 0.182828 0.608985 -0.219559 +v -0.146260 0.608985 -0.221019 +v -0.147543 0.609149 -0.291030 +v 0.261861 0.726253 -0.304144 +v -0.215315 0.710897 -0.289200 +v -0.147543 0.683217 -0.290660 +v -0.147543 0.609149 -0.291030 +v -0.214032 0.683393 -0.219189 +v -0.146260 0.608985 -0.221019 +v -0.146260 0.683386 -0.220649 +v -0.214032 0.456870 -0.219337 +v -0.146260 0.456870 -0.220798 +v -0.147543 0.609149 -0.291030 +v -0.146260 0.608985 -0.221019 +v -0.215315 0.710897 -0.289200 +v -0.147543 0.609149 -0.291030 +v -0.147543 0.280263 -0.290808 +v -0.214032 0.456870 -0.219337 +v -0.146260 0.456870 -0.220798 +v -0.146260 0.608985 -0.221019 +v -0.146260 0.608985 -0.221019 +v -0.214032 0.683393 -0.219189 +v -0.214032 0.456870 -0.219337 +v -0.152985 -0.001787 -0.227473 +v -0.207557 -0.001787 -0.226297 +v -0.208590 -0.001787 -0.282672 +v -0.154018 -0.001787 -0.283848 +v 0.250600 0.683217 -0.220649 +v 0.249317 0.683217 -0.290660 +v 0.182828 0.456870 -0.219337 +v 0.182828 0.608985 -0.219559 +v 0.181545 0.609149 -0.289570 +v 0.250600 0.456870 -0.220798 +v 0.249317 0.683217 -0.290660 +v 0.250600 0.683217 -0.220649 +v 0.181545 0.609149 -0.289570 +v 0.181545 0.609149 -0.289570 +v 0.249317 0.683217 -0.290660 +v 0.249317 0.243242 -0.290808 +v 0.182828 0.456870 -0.219337 +v 0.250600 0.456870 -0.220798 +v 0.250600 0.683217 -0.220649 +v 0.250600 0.683217 -0.220649 +v 0.182828 0.608985 -0.219559 +v 0.182828 0.456870 -0.219337 +v 0.243875 -0.001787 -0.227473 +v 0.189303 -0.001787 -0.226297 +v 0.188270 -0.001787 -0.282672 +v 0.242842 -0.001787 -0.283848 +v 0.250600 0.377162 -0.220798 +v 0.250600 0.456870 -0.220798 +v 0.247841 0.456870 -0.001498 +v 0.247847 0.377162 -0.001498 +v -0.146260 0.456870 -0.220798 +v 0.182828 0.456870 -0.219337 +v 0.182828 0.377162 -0.219337 +v -0.146260 0.377162 -0.220798 +v 0.250600 0.456870 -0.220798 +v 0.262209 0.471319 -0.175680 +v -0.231718 0.520293 -0.175680 +v -0.223747 0.491776 -0.207443 +v -0.163649 0.564918 -0.175680 +v 0.199481 0.564918 -0.175680 +v 0.262209 0.520293 -0.175680 +v -0.163649 0.522718 -0.211092 +v 0.199480 0.522718 -0.211092 +v 0.261171 0.491776 -0.211365 +v 0.261171 0.491776 -0.211365 +v 0.182828 0.377162 -0.219337 +v 0.250600 0.377162 -0.220798 +v -0.146260 0.377162 -0.220798 +v 0.182828 0.377162 -0.219337 +v -0.214032 0.377162 -0.219337 +v -0.146260 0.377162 -0.220798 +v 0.182828 0.456870 -0.219337 +v 0.250600 0.456870 -0.220798 +v -0.146260 0.456870 -0.220798 +v -0.214032 0.456870 -0.219337 +vt 0.674120 0.126945 +vt 0.132117 0.022442 +vt 0.673842 0.014528 +vt 0.132117 0.022442 +vt 0.674120 0.126945 +vt 0.269444 0.134379 +vt 0.201464 0.137566 +vt 0.269444 0.134379 +vt 0.683074 0.130257 +vt 0.674120 0.126945 +vt 0.683074 0.130257 +vt 0.269444 0.134379 +vt 0.683074 0.130257 +vt 0.674120 0.126945 +vt 0.682797 0.015131 +vt 0.673842 0.014528 +vt 0.682797 0.015131 +vt 0.674120 0.126945 +vt 0.448731 0.911043 +vt 0.647034 0.813468 +vt 0.498266 0.960933 +vt 0.597499 0.763578 +vt 0.448555 0.914611 +vt 0.640803 0.812643 +vt 0.492025 0.958847 +vt 0.597333 0.768407 +vt 0.448058 0.911847 +vt 0.647261 0.815930 +vt 0.497076 0.962245 +vt 0.598243 0.765532 +vt 0.450490 0.915256 +vt 0.641027 0.814195 +vt 0.493574 0.959098 +vt 0.597944 0.770354 +vt 0.597499 0.763578 +vt 0.747627 0.909508 +vt 0.647034 0.813468 +vt 0.747627 0.909508 +vt 0.597499 0.763578 +vt 0.509004 0.668989 +vt 0.598243 0.765532 +vt 0.740284 0.906069 +vt 0.647261 0.815930 +vt 0.740284 0.906069 +vt 0.598243 0.765532 +vt 0.503965 0.663285 +vt 0.537299 0.923005 +vt 0.592736 0.752811 +vt 0.483584 0.868868 +vt 0.654247 0.814805 +vt 0.483852 0.865836 +vt 0.647222 0.820979 +vt 0.537044 0.920488 +vt 0.586311 0.758396 +vt 0.747627 0.909508 +vt 0.558029 0.622664 +vt 0.796653 0.863183 +vt 0.509004 0.668989 +vt 0.539725 0.992216 +vt 0.648299 0.813382 +vt 0.505456 0.956870 +vt 0.682568 0.847951 +vt 0.551186 0.615030 +vt 0.740284 0.906069 +vt 0.503965 0.663285 +vt 0.787505 0.857813 +vt 0.952233 0.985260 +vt 0.851318 0.814006 +vt 0.984205 0.954259 +vt 0.811612 0.852504 +vt 0.870723 0.945112 +vt 0.646616 0.821792 +vt 0.825025 0.990459 +vt 0.646616 0.821792 +vt 0.870723 0.945112 +vt 0.672612 0.734479 +vt 0.829209 0.987755 +vt 0.705926 0.772152 +vt 0.869365 0.948108 +vt 0.655721 0.820941 +vt 0.955599 0.990783 +vt 0.853394 0.818481 +vt 0.986451 0.960183 +vt 0.853394 0.818481 +vt 0.955599 0.990783 +vt 0.835786 0.877370 +vt 0.869526 0.947996 +vt 0.655999 0.821124 +vt 0.829184 0.987657 +vt 0.706294 0.772244 +vt 0.823909 0.991444 +vt 0.674064 0.733928 +vt 0.870047 0.946545 +vt 0.674064 0.733928 +vt 0.823909 0.991444 +vt 0.647222 0.820979 +vt 0.828978 0.987744 +vt 0.701503 0.767118 +vt 0.869469 0.947964 +vt 0.651218 0.816520 +vt 0.807277 0.916486 +vt 0.682568 0.847951 +vt 0.781732 0.941795 +vt 0.682568 0.847951 +vt 0.807277 0.916486 +vt 0.697157 0.799236 +vt 0.672612 0.734479 +vt 0.585106 0.759798 +vt 0.646616 0.821792 +vt 0.853394 0.818481 +vt 0.835786 0.877370 +vt 0.794376 0.835595 +vt 0.674064 0.733928 +vt 0.647222 0.820979 +vt 0.586311 0.758396 +vt 0.697157 0.799236 +vt 0.648299 0.813382 +vt 0.682568 0.847951 +vt 0.811612 0.852504 +vt 0.776596 0.738943 +vt 0.851318 0.814006 +vt 0.647622 0.712276 +vt 0.597460 0.761549 +vt 0.521957 0.684769 +vt 0.647484 0.712183 +vt 0.521525 0.684603 +vt 0.597115 0.761577 +vt 0.701503 0.767118 +vt 0.651218 0.816520 +vt 0.556729 0.720353 +vt 0.563894 0.620733 +vt 0.506596 0.676492 +vt 0.504606 0.678666 +vt 0.561357 0.622350 +vt 0.357521 0.145897 +vt 0.464422 0.288567 +vt 0.487473 0.261159 +vt 0.464422 0.288567 +vt 0.357521 0.145897 +vt 0.296184 0.151459 +vt 0.928266 0.260636 +vt 0.952737 0.150680 +vt 0.926583 0.149422 +vt 0.954807 0.287985 +vt 0.487473 0.261159 +vt 0.954807 0.287985 +vt 0.928266 0.260636 +vt 0.464422 0.288567 +vt 0.453053 0.288049 +vt 0.296184 0.151459 +vt 0.284111 0.152277 +vt 0.296184 0.151459 +vt 0.453053 0.288049 +vt 0.464422 0.288567 +vt 0.926583 0.149422 +vt 0.357521 0.145897 +vt 0.928266 0.260636 +vt 0.487473 0.261159 +vt 0.642208 0.530008 +vt 0.598002 0.549292 +vt 0.611213 0.517318 +vt 0.628996 0.561982 +vt 0.735118 0.642581 +vt 0.645826 0.531772 +vt 0.774475 0.549811 +vt 0.632677 0.562768 +vt 0.733689 0.642190 +vt 0.641904 0.532149 +vt 0.771938 0.551867 +vt 0.629125 0.562327 +vt 0.773312 0.549431 +vt 0.631576 0.562175 +vt 0.733919 0.642186 +vt 0.644738 0.531184 +vt 0.733634 0.640719 +vt 0.641849 0.530678 +vt 0.771883 0.550396 +vt 0.629070 0.560856 +vt 0.802708 0.662256 +vt 0.804521 0.661447 +vt 0.834417 0.584385 +vt 0.804466 0.659976 +vt 0.802708 0.662256 +vt 0.894434 0.701168 +vt 0.775667 0.724124 +vt 0.867392 0.763037 +vt 0.774455 0.723697 +vt 0.866164 0.762648 +vt 0.801384 0.662163 +vt 0.893093 0.701113 +vt 0.861268 0.522348 +vt 0.952994 0.561261 +vt 0.835711 0.584464 +vt 0.927436 0.623377 +vt 0.834417 0.584385 +vt 0.926126 0.623335 +vt 0.860137 0.521956 +vt 0.951846 0.560906 +vt 0.946451 0.728491 +vt 0.927436 0.623377 +vt 0.983109 0.642083 +vt 0.945771 0.728335 +vt 0.927034 0.628700 +vt 0.981397 0.644206 +vt 0.981915 0.641773 +vt 0.893093 0.701113 +vt 0.945223 0.728167 +vt 0.945715 0.726865 +vt 0.926978 0.627229 +vt 0.981341 0.642736 +vt 0.835711 0.584464 +vt 0.834909 0.589688 +vt 0.801384 0.662163 +vt 0.834854 0.588217 +vt 0.894434 0.701168 +vt 0.896646 0.700459 +vt 0.926126 0.623335 +vt 0.896591 0.698988 +vt 0.774475 0.549811 +vt 0.735118 0.642581 +vt 0.773312 0.549431 +vt 0.733919 0.642186 +vt 0.983109 0.642083 +vt 0.946451 0.728491 +vt 0.981915 0.641773 +vt 0.945223 0.728167 +vt 0.035491 0.007166 +vt 0.025120 0.042034 +vt 0.012310 0.028503 +vt 0.048302 0.020698 +vt 0.011935 0.028441 +vt 0.048410 0.020382 +vt 0.035503 0.007264 +vt 0.025158 0.042143 +vt 0.034402 0.008856 +vt 0.025297 0.042722 +vt 0.012614 0.029981 +vt 0.047085 0.021597 +vt 0.034122 0.009316 +vt 0.025811 0.042994 +vt 0.013098 0.030169 +vt 0.046835 0.022141 +vt 0.025158 0.042143 +vt 0.065625 0.022318 +vt 0.048410 0.020382 +vt 0.023979 0.061449 +vt 0.048302 0.020698 +vt 0.023332 0.061083 +vt 0.025120 0.042034 +vt 0.065577 0.022200 +vt 0.046835 0.022141 +vt 0.025455 0.059905 +vt 0.025811 0.042994 +vt 0.063768 0.021904 +vt 0.047085 0.021597 +vt 0.023936 0.061066 +vt 0.025297 0.042722 +vt 0.063642 0.022568 +vt 0.210956 0.152364 +vt 0.453053 0.288049 +vt 0.284111 0.152277 +vt 0.379898 0.288135 +vt 0.132117 0.022442 +vt 0.209128 0.135294 +vt 0.071801 0.023357 +vt 0.269444 0.134379 +vt 0.745407 0.896583 +vt 0.549748 0.641825 +vt 0.771751 0.870306 +vt 0.549748 0.641825 +vt 0.745407 0.896583 +vt 0.523404 0.668103 +vt 0.041541 0.064563 +vt 0.110865 0.151096 +vt 0.110099 0.133097 +vt 0.023016 0.063279 +vt 0.065675 0.039862 +vt 0.023016 0.063279 +vt 0.041541 0.064563 +vt 0.063272 0.022717 +vt 0.209128 0.135294 +vt 0.063220 0.022601 +vt 0.108250 0.147543 +vt 0.022357 0.062935 +vt 0.952737 0.150680 +vt 0.989982 0.287944 +vt 0.988528 0.150637 +vt 0.954807 0.287985 +vt 0.712307 0.014683 +vt 0.683074 0.130257 +vt 0.682797 0.015131 +vt 0.712072 0.129816 +vt 0.447563 0.912220 +vt 0.646190 0.810714 +vt 0.493544 0.959395 +vt 0.600209 0.763539 +vt 0.553707 0.594408 +vt 0.594216 0.555842 +vt 0.063768 0.021904 +vt 0.538047 0.577009 +vt 0.025455 0.059905 +vt 0.591842 0.554624 +vt 0.063642 0.022568 +vt 0.550764 0.590300 +vt 0.023936 0.061066 +vt 0.575025 0.536287 +vt 0.540759 0.506256 +vt 0.605865 0.643604 +vt 0.504416 0.543946 +vt 0.641994 0.605704 +vt 0.028768 0.315878 +vt 0.202071 0.336757 +vt 0.027449 0.336516 +vt 0.249474 0.315834 +vt 0.553561 0.459581 +vt 0.987980 0.445430 +vt 0.972465 0.459546 +vt 0.573256 0.445350 +vt 0.970799 0.356369 +vt 0.573258 0.370185 +vt 0.553497 0.356383 +vt 0.986636 0.370386 +vt 0.970984 0.316621 +vt 0.986932 0.304422 +vt 0.987672 0.509975 +vt 0.972581 0.497394 +vt 0.569009 0.608243 +vt 0.605815 0.567217 +vt 0.519492 0.356419 +vt 0.518952 0.460602 +vt 0.553930 0.496673 +vt 0.566306 0.510951 +vt 0.570654 0.299299 +vt 0.553420 0.311936 +vt 0.493513 0.593817 +vt 0.359458 0.797109 +vt 0.496085 0.659837 +vt 0.359458 0.797109 +vt 0.493513 0.593817 +vt 0.322055 0.760188 +vt 0.663829 0.821617 +vt 0.504844 0.568774 +vt 0.752741 0.817728 +vt 0.504844 0.568774 +vt 0.663829 0.821617 +vt 0.458191 0.615277 +vt 0.566935 0.630141 +vt 0.741992 0.902941 +vt 0.517733 0.676750 +vt 0.791194 0.856332 +vt 0.554153 0.460522 +vt 0.591842 0.554624 +vt 0.610443 0.650049 +vt 0.569009 0.608243 +vt 0.462484 0.526262 +vt 0.504844 0.568774 +vt 0.458191 0.615277 +vt 0.732122 0.694266 +vt 0.457561 0.619544 +vt 0.390949 0.451227 +vt 0.340691 0.500669 +vt 0.591842 0.554624 +vt 0.794376 0.835595 +vt 0.610443 0.650049 +vt 0.320432 0.667837 +vt 0.458191 0.615277 +vt 0.362798 0.710345 +vt 0.458191 0.615277 +vt 0.320432 0.667837 +vt 0.462484 0.526262 +vt 0.497830 0.296368 +vt 0.427675 0.367237 +vt 0.428364 0.295478 +vt 0.497141 0.368128 +vt 0.505434 0.370200 +vt 0.505331 0.448202 +vt 0.340703 0.500655 +vt 0.457472 0.619530 +vt 0.390797 0.451331 +vt 0.500490 0.663115 +vt 0.390966 0.451281 +vt 0.340681 0.500683 +vt 0.496085 0.659837 +vt 0.496085 0.659837 +vt 0.697157 0.799236 +vt 0.493513 0.593817 +vt 0.568435 0.916685 +vt 0.752741 0.817728 +vt 0.610801 0.959193 +vt 0.752741 0.817728 +vt 0.568435 0.916685 +vt 0.663829 0.821617 +vt 0.497249 0.296187 +vt 0.427093 0.367056 +vt 0.427782 0.295297 +vt 0.496560 0.367946 +vt 0.556729 0.720353 +vt 0.343496 0.817418 +vt 0.500490 0.663115 +vt 0.400064 0.874333 +vt 0.522617 0.686211 +vt 0.772105 0.841392 +vt 0.722776 0.889872 +vt 0.571945 0.637731 +vt 0.029620 0.984657 +vt 0.208507 0.969157 +vt 0.252569 0.985593 +vt 0.029389 0.967030 +vt 0.028206 0.385955 +vt 0.204105 0.386185 +vt 0.253155 0.395067 +vt 0.025887 0.459502 +vt 0.188981 0.459844 +vt 0.027722 0.854258 +vt 0.190816 0.854600 +vt 0.029328 0.920986 +vt 0.210660 0.923674 +vt 0.242699 0.460218 +vt 0.245338 0.854227 +vt 0.252309 0.930891 +vt 0.028451 0.921573 +vt 0.252391 0.932079 +vt 0.598787 0.669597 +vt 0.703379 0.867938 +vt 0.552840 0.714749 +vt 0.752285 0.821907 +vt 0.736422 0.012871 +vt 0.916139 0.130638 +vt 0.737358 0.131432 +vt 0.916139 0.012871 +vt 0.598503 0.669876 +vt 0.702368 0.868932 +vt 0.552077 0.715498 +vt 0.751274 0.822901 +vt 0.319760 0.835283 +vt 0.300147 0.911197 +vt 0.317475 0.479551 +vt 0.294135 0.406099 +vt 0.674120 0.126945 +vt 0.673842 0.014528 +vt 0.132117 0.022442 +vt 0.132117 0.022442 +vt 0.269444 0.134379 +vt 0.674120 0.126945 +vt 0.201464 0.137566 +vt 0.683074 0.130257 +vt 0.269444 0.134379 +vt 0.674120 0.126945 +vt 0.269444 0.134379 +vt 0.683074 0.130257 +vt 0.683074 0.130257 +vt 0.682797 0.015131 +vt 0.674120 0.126945 +vt 0.673842 0.014528 +vt 0.674120 0.126945 +vt 0.682797 0.015131 +vt 0.647034 0.813468 +vt 0.597499 0.763578 +vt 0.448555 0.914611 +vt 0.492025 0.958847 +vt 0.640803 0.812643 +vt 0.597333 0.768407 +vt 0.647261 0.815930 +vt 0.598243 0.765532 +vt 0.450490 0.915256 +vt 0.493574 0.959098 +vt 0.641027 0.814195 +vt 0.597944 0.770354 +vt 0.597499 0.763578 +vt 0.647034 0.813468 +vt 0.747627 0.909508 +vt 0.747627 0.909508 +vt 0.509004 0.668989 +vt 0.597499 0.763578 +vt 0.598243 0.765532 +vt 0.647261 0.815930 +vt 0.740284 0.906069 +vt 0.740284 0.906069 +vt 0.503965 0.663285 +vt 0.598243 0.765532 +vt 0.537299 0.923005 +vt 0.483584 0.868868 +vt 0.592736 0.752811 +vt 0.654247 0.814805 +vt 0.483852 0.865836 +vt 0.537044 0.920488 +vt 0.647222 0.820979 +vt 0.586311 0.758396 +vt 0.747627 0.909508 +vt 0.796653 0.863183 +vt 0.558029 0.622664 +vt 0.509004 0.668989 +vt 0.539725 0.992216 +vt 0.505456 0.956870 +vt 0.648299 0.813382 +vt 0.682568 0.847951 +vt 0.551186 0.615030 +vt 0.503965 0.663285 +vt 0.740284 0.906069 +vt 0.787505 0.857813 +vt 0.952233 0.985260 +vt 0.984205 0.954259 +vt 0.851318 0.814006 +vt 0.811612 0.852504 +vt 0.870723 0.945112 +vt 0.825025 0.990459 +vt 0.646616 0.821792 +vt 0.646616 0.821792 +vt 0.672612 0.734479 +vt 0.870723 0.945112 +vt 0.829209 0.987755 +vt 0.869365 0.948108 +vt 0.705926 0.772152 +vt 0.655721 0.820941 +vt 0.955599 0.990783 +vt 0.986451 0.960183 +vt 0.853394 0.818481 +vt 0.853394 0.818481 +vt 0.835786 0.877370 +vt 0.955599 0.990783 +vt 0.869526 0.947996 +vt 0.829184 0.987657 +vt 0.655999 0.821124 +vt 0.706294 0.772244 +vt 0.823909 0.991444 +vt 0.870047 0.946545 +vt 0.674064 0.733928 +vt 0.674064 0.733928 +vt 0.647222 0.820979 +vt 0.823909 0.991444 +vt 0.828978 0.987744 +vt 0.869469 0.947964 +vt 0.701503 0.767118 +vt 0.651218 0.816520 +vt 0.807277 0.916486 +vt 0.781732 0.941795 +vt 0.682568 0.847951 +vt 0.682568 0.847951 +vt 0.697157 0.799236 +vt 0.807277 0.916486 +vt 0.672612 0.734479 +vt 0.646616 0.821792 +vt 0.585106 0.759798 +vt 0.853394 0.818481 +vt 0.794376 0.835595 +vt 0.835786 0.877370 +vt 0.674064 0.733928 +vt 0.586311 0.758396 +vt 0.647222 0.820979 +vt 0.697157 0.799236 +vt 0.682568 0.847951 +vt 0.648299 0.813382 +vt 0.811612 0.852504 +vt 0.851318 0.814006 +vt 0.776596 0.738943 +vt 0.647622 0.712276 +vt 0.521957 0.684769 +vt 0.597460 0.761549 +vt 0.647484 0.712183 +vt 0.597115 0.761577 +vt 0.521525 0.684603 +vt 0.701503 0.767118 +vt 0.556729 0.720353 +vt 0.651218 0.816520 +vt 0.563894 0.620733 +vt 0.506596 0.676492 +vt 0.504606 0.678666 +vt 0.561357 0.622350 +vt 0.357521 0.145897 +vt 0.487473 0.261159 +vt 0.464422 0.288567 +vt 0.464422 0.288567 +vt 0.296184 0.151459 +vt 0.357521 0.145897 +vt 0.928266 0.260636 +vt 0.926583 0.149422 +vt 0.952737 0.150680 +vt 0.954807 0.287985 +vt 0.487473 0.261159 +vt 0.928266 0.260636 +vt 0.954807 0.287985 +vt 0.464422 0.288567 +vt 0.453053 0.288049 +vt 0.284111 0.152277 +vt 0.296184 0.151459 +vt 0.296184 0.151459 +vt 0.464422 0.288567 +vt 0.453053 0.288049 +vt 0.926583 0.149422 +vt 0.928266 0.260636 +vt 0.357521 0.145897 +vt 0.487473 0.261159 +vt 0.642208 0.530008 +vt 0.611213 0.517318 +vt 0.598002 0.549292 +vt 0.628996 0.561982 +vt 0.735118 0.642581 +vt 0.774475 0.549811 +vt 0.645826 0.531772 +vt 0.632677 0.562768 +vt 0.733689 0.642190 +vt 0.771938 0.551867 +vt 0.641904 0.532149 +vt 0.629125 0.562327 +vt 0.773312 0.549431 +vt 0.733919 0.642186 +vt 0.631576 0.562175 +vt 0.644738 0.531184 +vt 0.733634 0.640719 +vt 0.771883 0.550396 +vt 0.641849 0.530678 +vt 0.629070 0.560856 +vt 0.802708 0.662256 +vt 0.804521 0.661447 +vt 0.834417 0.584385 +vt 0.804466 0.659976 +vt 0.802708 0.662256 +vt 0.775667 0.724124 +vt 0.894434 0.701168 +vt 0.867392 0.763037 +vt 0.774455 0.723697 +vt 0.801384 0.662163 +vt 0.866164 0.762648 +vt 0.893093 0.701113 +vt 0.861268 0.522348 +vt 0.835711 0.584464 +vt 0.952994 0.561261 +vt 0.927436 0.623377 +vt 0.834417 0.584385 +vt 0.860137 0.521956 +vt 0.926126 0.623335 +vt 0.951846 0.560906 +vt 0.946451 0.728491 +vt 0.983109 0.642083 +vt 0.927436 0.623377 +vt 0.945771 0.728335 +vt 0.981397 0.644206 +vt 0.927034 0.628700 +vt 0.981915 0.641773 +vt 0.945223 0.728167 +vt 0.893093 0.701113 +vt 0.945715 0.726865 +vt 0.981341 0.642736 +vt 0.926978 0.627229 +vt 0.835711 0.584464 +vt 0.834909 0.589688 +vt 0.801384 0.662163 +vt 0.834854 0.588217 +vt 0.894434 0.701168 +vt 0.896646 0.700459 +vt 0.926126 0.623335 +vt 0.896591 0.698988 +vt 0.774475 0.549811 +vt 0.735118 0.642581 +vt 0.773312 0.549431 +vt 0.733919 0.642186 +vt 0.983109 0.642083 +vt 0.946451 0.728491 +vt 0.981915 0.641773 +vt 0.945223 0.728167 +vt 0.035491 0.007166 +vt 0.012310 0.028503 +vt 0.025120 0.042034 +vt 0.048302 0.020698 +vt 0.011935 0.028441 +vt 0.035503 0.007264 +vt 0.048410 0.020382 +vt 0.025158 0.042143 +vt 0.034402 0.008856 +vt 0.012614 0.029981 +vt 0.025297 0.042722 +vt 0.047085 0.021597 +vt 0.034122 0.009316 +vt 0.013098 0.030169 +vt 0.025811 0.042994 +vt 0.046835 0.022141 +vt 0.025158 0.042143 +vt 0.048410 0.020382 +vt 0.065625 0.022318 +vt 0.023979 0.061449 +vt 0.048302 0.020698 +vt 0.025120 0.042034 +vt 0.023332 0.061083 +vt 0.065577 0.022200 +vt 0.046835 0.022141 +vt 0.025811 0.042994 +vt 0.025455 0.059905 +vt 0.063768 0.021904 +vt 0.047085 0.021597 +vt 0.025297 0.042722 +vt 0.023936 0.061066 +vt 0.063642 0.022568 +vt 0.210956 0.152364 +vt 0.284111 0.152277 +vt 0.453053 0.288049 +vt 0.379898 0.288135 +vt 0.132117 0.022442 +vt 0.071801 0.023357 +vt 0.209128 0.135294 +vt 0.269444 0.134379 +vt 0.745407 0.896583 +vt 0.771751 0.870306 +vt 0.549748 0.641825 +vt 0.549748 0.641825 +vt 0.523404 0.668103 +vt 0.745407 0.896583 +vt 0.041541 0.064563 +vt 0.110099 0.133097 +vt 0.110865 0.151096 +vt 0.023016 0.063279 +vt 0.065675 0.039862 +vt 0.041541 0.064563 +vt 0.023016 0.063279 +vt 0.063272 0.022717 +vt 0.209128 0.135294 +vt 0.063220 0.022601 +vt 0.022357 0.062935 +vt 0.108250 0.147543 +vt 0.952737 0.150680 +vt 0.988528 0.150637 +vt 0.989982 0.287944 +vt 0.954807 0.287985 +vt 0.712307 0.014683 +vt 0.682797 0.015131 +vt 0.683074 0.130257 +vt 0.712072 0.129816 +vt 0.447563 0.912220 +vt 0.493544 0.959395 +vt 0.646190 0.810714 +vt 0.600209 0.763539 +vt 0.553707 0.594408 +vt 0.594216 0.555842 +vt 0.063768 0.021904 +vt 0.025455 0.059905 +vt 0.538047 0.577009 +vt 0.591842 0.554624 +vt 0.063642 0.022568 +vt 0.023936 0.061066 +vt 0.550764 0.590300 +vt 0.575025 0.536287 +vt 0.540759 0.506256 +vt 0.504416 0.543946 +vt 0.605865 0.643604 +vt 0.641994 0.605704 +vt 0.202071 0.336757 +vt 0.249474 0.315834 +vt 0.553561 0.459581 +vt 0.972465 0.459546 +vt 0.987980 0.445430 +vt 0.573256 0.445350 +vt 0.970799 0.356369 +vt 0.553497 0.356383 +vt 0.573258 0.370185 +vt 0.986636 0.370386 +vt 0.970984 0.316621 +vt 0.986932 0.304422 +vt 0.972581 0.497394 +vt 0.987672 0.509975 +vt 0.569009 0.608243 +vt 0.605815 0.567217 +vt 0.519492 0.356419 +vt 0.518952 0.460602 +vt 0.553930 0.496673 +vt 0.566306 0.510951 +vt 0.570654 0.299299 +vt 0.553420 0.311936 +vt 0.493513 0.593817 +vt 0.496085 0.659837 +vt 0.359458 0.797109 +vt 0.359458 0.797109 +vt 0.322055 0.760188 +vt 0.493513 0.593817 +vt 0.663829 0.821617 +vt 0.752741 0.817728 +vt 0.504844 0.568774 +vt 0.504844 0.568774 +vt 0.458191 0.615277 +vt 0.663829 0.821617 +vt 0.566935 0.630141 +vt 0.517733 0.676750 +vt 0.741992 0.902941 +vt 0.791194 0.856332 +vt 0.554153 0.460522 +vt 0.591842 0.554624 +vt 0.569009 0.608243 +vt 0.610443 0.650049 +vt 0.462484 0.526262 +vt 0.458191 0.615277 +vt 0.504844 0.568774 +vt 0.732122 0.694266 +vt 0.457561 0.619544 +vt 0.390949 0.451227 +vt 0.340691 0.500669 +vt 0.591842 0.554624 +vt 0.610443 0.650049 +vt 0.794376 0.835595 +vt 0.320432 0.667837 +vt 0.362798 0.710345 +vt 0.458191 0.615277 +vt 0.458191 0.615277 +vt 0.462484 0.526262 +vt 0.320432 0.667837 +vt 0.497830 0.296368 +vt 0.428364 0.295478 +vt 0.427675 0.367237 +vt 0.497141 0.368128 +vt 0.505434 0.370200 +vt 0.505331 0.448202 +vt 0.457472 0.619530 +vt 0.340703 0.500655 +vt 0.390797 0.451331 +vt 0.500490 0.663115 +vt 0.390966 0.451281 +vt 0.340681 0.500683 +vt 0.496085 0.659837 +vt 0.496085 0.659837 +vt 0.493513 0.593817 +vt 0.697157 0.799236 +vt 0.568435 0.916685 +vt 0.610801 0.959193 +vt 0.752741 0.817728 +vt 0.752741 0.817728 +vt 0.663829 0.821617 +vt 0.568435 0.916685 +vt 0.497249 0.296187 +vt 0.427782 0.295297 +vt 0.427093 0.367056 +vt 0.496560 0.367946 +vt 0.556729 0.720353 +vt 0.500490 0.663115 +vt 0.343496 0.817418 +vt 0.400064 0.874333 +vt 0.522617 0.686211 +vt 0.722776 0.889872 +vt 0.772105 0.841392 +vt 0.571945 0.637731 +vt 0.252569 0.985593 +vt 0.208507 0.969157 +vt 0.204105 0.386185 +vt 0.253155 0.395067 +vt 0.188981 0.459844 +vt 0.190816 0.854600 +vt 0.210660 0.923674 +vt 0.242699 0.460218 +vt 0.245338 0.854227 +vt 0.252309 0.930891 +vt 0.252391 0.932079 +vt 0.703379 0.867938 +vt 0.752285 0.821907 +vt 0.737358 0.131432 +vt 0.916139 0.130638 +vt 0.702368 0.868932 +vt 0.751274 0.822901 +vt 0.319760 0.835283 +vt 0.300147 0.911197 +vt 0.317475 0.479551 +vt 0.294135 0.406099 +vn -0.999745 -0.022571 -0.000427 +vn -0.999745 -0.022571 -0.000427 +vn -0.999745 -0.022571 -0.000427 +vn -0.999971 0.005425 0.005345 +vn -0.999971 0.005425 0.005345 +vn -0.999971 0.005425 0.005345 +vn -0.148086 -0.988975 0.000000 +vn -0.148086 -0.988975 0.000000 +vn -0.148086 -0.988975 0.000000 +vn -0.464450 -0.885579 0.005999 +vn -0.464450 -0.885579 0.005999 +vn -0.464450 -0.885579 0.005999 +vn -0.847890 -0.018688 0.529842 +vn -0.847890 -0.018688 0.529842 +vn -0.847890 -0.018688 0.529842 +vn -0.845153 -0.019081 0.534183 +vn -0.845153 -0.019081 0.534183 +vn -0.845153 -0.019081 0.534183 +vn 0.000000 -0.000001 -1.000000 +vn 0.000000 0.000001 -1.000000 +vn 0.000000 -0.000001 -1.000000 +vn 0.000000 0.000001 -1.000000 +vn -0.999992 0.004070 0.000000 +vn -0.999992 0.004070 0.000000 +vn -0.999992 0.004070 0.000000 +vn -0.999992 0.004070 0.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn -0.000000 -0.000000 1.000000 +vn 0.999992 -0.004076 -0.000000 +vn 0.999992 -0.004076 -0.000000 +vn 0.999992 -0.004076 0.000000 +vn 0.999992 -0.004076 -0.000000 +vn -0.004429 -0.913622 -0.406539 +vn -0.004429 -0.913622 -0.406539 +vn -0.004429 -0.913622 -0.406539 +vn -0.004027 -0.907532 -0.419964 +vn -0.004027 -0.907532 -0.419964 +vn -0.004027 -0.907532 -0.419964 +vn -0.004381 -0.903704 0.428136 +vn -0.004381 -0.903704 0.428136 +vn -0.004381 -0.903704 0.428136 +vn -0.004036 -0.909589 0.415489 +vn -0.004036 -0.909589 0.415489 +vn -0.004036 -0.909589 0.415489 +vn -0.020304 -0.999794 -0.000000 +vn -0.020304 -0.999794 -0.000000 +vn -0.020305 -0.999794 -0.000000 +vn -0.020304 -0.999794 -0.000000 +vn 0.012824 -0.999918 -0.000000 +vn 0.012824 -0.999918 -0.000000 +vn 0.012824 -0.999918 -0.000000 +vn 0.012824 -0.999918 -0.000000 +vn -0.000000 -0.000001 -1.000000 +vn -0.000000 -0.000001 -1.000000 +vn -0.000000 -0.000001 -1.000000 +vn -0.000000 -0.000001 -1.000000 +vn 0.004437 0.999990 -0.000000 +vn 0.004437 0.999990 -0.000000 +vn 0.004437 0.999990 0.000000 +vn 0.004437 0.999990 -0.000000 +vn -0.000000 -0.000001 1.000000 +vn -0.000000 -0.000001 1.000000 +vn -0.000000 -0.000001 1.000000 +vn -0.000000 -0.000001 1.000000 +vn -0.999469 -0.018316 -0.026931 +vn -0.999469 -0.018316 -0.026931 +vn -0.999469 -0.018316 -0.026931 +vn -0.999469 -0.018316 -0.026931 +vn 0.021530 -0.999231 -0.032765 +vn 0.021530 -0.999231 -0.032765 +vn 0.021530 -0.999231 -0.032765 +vn 0.006116 -0.999583 -0.028232 +vn 0.006116 -0.999583 -0.028232 +vn 0.006116 -0.999583 -0.028232 +vn 0.999329 0.018313 -0.031720 +vn 0.999329 0.018313 -0.031720 +vn 0.999329 0.018313 -0.031720 +vn 0.999329 0.018313 -0.031720 +vn -0.021533 0.999381 -0.027818 +vn -0.021533 0.999381 -0.027818 +vn -0.021533 0.999381 -0.027818 +vn -0.039109 0.998716 -0.032200 +vn -0.039109 0.998716 -0.032200 +vn -0.039109 0.998716 -0.032200 +vn -0.999329 -0.018313 -0.031720 +vn -0.999329 -0.018313 -0.031720 +vn -0.999329 -0.018313 -0.031720 +vn -0.999329 -0.018313 -0.031720 +vn 0.021533 -0.999381 -0.027818 +vn 0.021533 -0.999381 -0.027818 +vn 0.021533 -0.999381 -0.027818 +vn 0.039108 -0.998716 -0.032200 +vn 0.039108 -0.998716 -0.032200 +vn 0.039108 -0.998716 -0.032200 +vn 0.999469 0.018316 -0.026931 +vn 0.999469 0.018316 -0.026931 +vn 0.999469 0.018316 -0.026931 +vn 0.999469 0.018316 -0.026931 +vn -0.021530 0.999231 -0.032765 +vn -0.021530 0.999231 -0.032765 +vn -0.021530 0.999231 -0.032765 +vn -0.006116 0.999583 -0.028232 +vn -0.006116 0.999583 -0.028232 +vn -0.006116 0.999583 -0.028232 +vn 0.021541 -0.999768 -0.000000 +vn 0.021541 -0.999768 0.000000 +vn 0.021541 -0.999768 -0.000000 +vn -0.021714 0.999764 0.000317 +vn -0.021541 0.999768 0.000000 +vn -0.021714 0.999764 0.000317 +vn 0.021542 -0.999768 -0.000000 +vn 0.021542 -0.999768 -0.000000 +vn 0.021541 -0.999768 0.000000 +vn -0.021910 0.999760 -0.000674 +vn -0.021910 0.999760 -0.000674 +vn -0.021542 0.999768 -0.000000 +vn -0.999832 -0.018323 -0.000000 +vn -0.999832 -0.018323 -0.000000 +vn -0.999832 -0.018323 -0.000000 +vn 0.999832 0.018322 0.000000 +vn 0.999832 0.018322 -0.000000 +vn 0.999832 0.018322 0.000000 +vn -0.999832 -0.018322 -0.000000 +vn -0.999832 -0.018322 -0.000000 +vn -0.999832 -0.018322 0.000000 +vn 0.999832 0.018322 0.000000 +vn 0.999832 0.018322 0.000000 +vn 0.999832 0.018322 0.000000 +vn 0.021541 -0.999768 0.000000 +vn 0.021541 -0.999768 0.000000 +vn 0.021541 -0.999768 -0.000000 +vn 0.021541 -0.999768 -0.000000 +vn 0.968686 0.195526 0.153029 +vn 0.968686 0.195526 0.153029 +vn 0.968686 0.195526 0.153029 +vn 0.973794 0.182611 0.135571 +vn 0.973794 0.182611 0.135571 +vn 0.973794 0.182611 0.135571 +vn 0.956360 0.020938 -0.291439 +vn 0.956360 0.020938 -0.291439 +vn 0.956184 0.021083 -0.292008 +vn 0.956360 0.020938 -0.291439 +vn 0.947601 0.319455 -0.000000 +vn 0.947601 0.319455 -0.000000 +vn 0.947601 0.319455 -0.000000 +vn 0.947601 0.319455 -0.000000 +vn 0.501241 0.666644 0.551674 +vn 0.501241 0.666644 0.551674 +vn 0.501241 0.666644 0.551674 +vn 0.508597 0.663687 0.548496 +vn 0.508597 0.663687 0.548496 +vn 0.508597 0.663687 0.548496 +vn 0.999757 0.022044 0.000000 +vn 0.999757 0.022044 0.000000 +vn 0.999757 0.022044 0.000000 +vn 0.999757 0.022044 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.921437 0.016886 0.388160 +vn 0.967760 0.017734 0.251249 +vn 0.854236 0.015654 0.519649 +vn 0.967760 0.017734 0.251250 +vn 0.019763 -0.917212 0.397908 +vn 0.020806 -0.965657 0.258986 +vn 0.018253 -0.847154 0.531034 +vn 0.020806 -0.965657 0.258986 +vn -0.921438 -0.016886 0.388159 +vn -0.967760 -0.017734 0.251249 +vn -0.854236 -0.015654 0.519649 +vn -0.967760 -0.017734 0.251249 +vn -0.019762 0.917212 0.397908 +vn -0.020806 0.965657 0.258986 +vn -0.018253 0.847154 0.531034 +vn -0.020806 0.965657 0.258986 +vn 0.893681 0.016377 0.448404 +vn 0.019147 -0.888655 0.458176 +vn -0.893681 -0.016377 0.448404 +vn -0.019147 0.888655 0.458176 +vn 0.701700 -0.674268 0.230173 +vn 0.707594 -0.679932 -0.192362 +vn 0.712574 -0.684717 0.152974 +vn 0.690072 -0.663095 -0.290011 +vn -0.674165 -0.701592 0.230802 +vn -0.679869 -0.707528 -0.192829 +vn -0.684673 -0.712527 0.153389 +vn -0.662945 -0.689916 -0.290723 +vn 0.674165 0.701592 0.230802 +vn 0.679869 0.707528 -0.192829 +vn 0.684673 0.712527 0.153389 +vn 0.662945 0.689916 -0.290723 +vn -0.701700 0.674268 0.230174 +vn -0.707594 0.679932 -0.192362 +vn -0.712573 0.684717 0.152974 +vn -0.690071 0.663095 -0.290012 +vn 0.698442 0.012799 -0.715552 +vn 0.858479 0.015732 -0.512607 +vn 0.698442 0.012799 -0.715552 +vn 0.014796 -0.686712 -0.726779 +vn 0.018371 -0.852614 -0.522218 +vn 0.014796 -0.686712 -0.726779 +vn -0.698441 -0.012799 -0.715553 +vn -0.858479 -0.015732 -0.512607 +vn -0.698441 -0.012799 -0.715553 +vn -0.014796 0.686711 -0.726780 +vn -0.018371 0.852614 -0.522219 +vn -0.014796 0.686711 -0.726780 +vn 0.974379 0.017856 0.224202 +vn 0.020969 -0.973180 0.229088 +vn -0.974379 -0.017856 0.224202 +vn -0.020969 0.973180 0.229088 +vn 0.966434 0.017710 -0.256303 +vn 0.020794 -0.965085 -0.261109 +vn -0.966434 -0.017711 -0.256304 +vn -0.020794 0.965085 -0.261110 +vn 0.619054 0.644239 0.449141 +vn 0.644657 -0.619456 0.447987 +vn -0.644657 0.619456 0.447987 +vn -0.619055 -0.644239 0.449140 +vn 0.575750 0.599173 -0.556331 +vn 0.599769 -0.576323 -0.555094 +vn -0.599768 0.576322 -0.555095 +vn -0.575749 -0.599172 -0.556332 +vn 0.999832 0.018322 -0.000000 +vn 0.999832 0.018322 -0.000000 +vn 0.999832 0.018322 -0.000000 +vn 0.999832 0.018322 -0.000000 +vn 0.021541 -0.999768 0.000000 +vn 0.021541 -0.999768 0.000000 +vn 0.021541 -0.999768 0.000000 +vn 0.021541 -0.999768 0.000000 +vn -0.999832 -0.018322 0.000000 +vn -0.999832 -0.018322 0.000000 +vn -0.999832 -0.018322 0.000000 +vn -0.999832 -0.018322 0.000000 +vn -0.021541 0.999768 -0.000000 +vn -0.021541 0.999768 -0.000000 +vn -0.021541 0.999768 -0.000000 +vn -0.021541 0.999768 -0.000000 +vn 0.014158 -0.657083 0.753685 +vn 0.014158 -0.657083 0.753685 +vn 0.014158 -0.657083 0.753685 +vn 0.014158 -0.657083 0.753685 +vn 0.669174 0.012263 0.743005 +vn 0.669174 0.012263 0.743005 +vn 0.669174 0.012263 0.743005 +vn 0.669174 0.012263 0.743005 +vn -0.014158 0.657082 0.753686 +vn -0.014158 0.657082 0.753686 +vn -0.014158 0.657082 0.753686 +vn -0.014158 0.657082 0.753686 +vn -0.669173 -0.012263 0.743005 +vn -0.669173 -0.012263 0.743005 +vn -0.669173 -0.012263 0.743005 +vn -0.669173 -0.012263 0.743005 +vn 0.999999 0.001050 0.000000 +vn 0.999999 0.001050 0.000000 +vn 0.999999 0.001050 0.000000 +vn 0.999999 0.001050 0.000000 +vn -0.999999 -0.001055 0.000000 +vn -0.999999 -0.001055 0.000000 +vn -0.999999 -0.001055 0.000000 +vn -0.999999 -0.001055 0.000000 +vn 0.000000 0.770164 0.637845 +vn 0.000000 0.770164 0.637845 +vn 0.000000 0.770164 0.637845 +vn -0.016618 0.771290 0.636266 +vn -0.016618 0.771290 0.636266 +vn -0.016618 0.771290 0.636266 +vn 0.193431 -0.981114 0.000000 +vn 0.193431 -0.981114 0.000000 +vn 0.193431 -0.981114 0.000000 +vn 0.193431 -0.981114 0.000000 +vn 0.021301 -0.988620 0.148918 +vn 0.021301 -0.988620 0.148918 +vn 0.021301 -0.988620 0.148919 +vn 0.021301 -0.988620 0.148918 +vn -0.148086 -0.988975 0.000000 +vn 0.999832 0.018322 0.000000 +vn 0.999832 0.018322 0.000000 +vn 0.999832 0.018322 -0.000000 +vn 0.999760 0.021888 -0.000000 +vn 0.999760 0.021888 -0.000000 +vn 0.999760 0.021888 -0.000000 +vn 0.999760 0.021888 -0.000000 +vn -0.999757 -0.022035 0.000000 +vn -0.999757 -0.022035 0.000000 +vn -0.999757 -0.022035 0.000000 +vn -0.999757 -0.022035 0.000000 +vn -0.000211 0.004415 -0.999990 +vn -0.000211 0.004415 -0.999990 +vn 0.000000 0.004485 -0.999990 +vn -0.000211 0.004415 -0.999990 +vn 0.999832 0.018322 0.000000 +vn 0.999832 0.018322 0.000000 +vn -0.021542 0.999768 -0.000000 +vn -0.021542 0.999768 -0.000000 +vn -0.021542 0.999768 -0.000000 +vn -0.021714 0.999764 0.000317 +vn -0.999832 -0.018323 -0.000000 +vn -0.999832 -0.018320 -0.000006 +vn -0.999832 -0.018323 -0.000000 +vn -0.999832 -0.018322 0.000000 +vn -0.999999 -0.001611 0.000000 +vn -0.999999 -0.001611 0.000000 +vn -0.999999 -0.001614 0.000009 +vn -0.999999 -0.001611 0.000000 +vn -0.628164 -0.000000 -0.778081 +vn -0.944355 0.104600 -0.311853 +vn -0.901436 -0.000000 -0.432913 +vn -0.608806 0.773474 -0.176329 +vn 0.616344 0.570219 0.543112 +vn -0.178933 0.496218 0.849559 +vn -0.336067 0.926478 0.169402 +vn 0.326412 0.192288 0.925462 +vn -0.202222 -0.886786 0.415592 +vn 0.131097 -0.303651 0.943721 +vn 0.525411 -0.638120 0.562802 +vn -0.459420 -0.687735 0.562098 +vn -0.287476 -0.887075 -0.361187 +vn -0.432678 -0.718254 -0.544887 +vn -0.452460 0.701514 -0.550598 +vn -0.301712 0.879869 -0.367153 +vn -0.021542 0.999768 -0.000000 +vn -0.999832 -0.018320 -0.000006 +vn 0.737134 -0.424441 -0.525816 +vn 0.389168 0.588615 -0.708576 +vn 0.389168 0.588615 -0.708576 +vn 0.250198 0.244643 -0.936777 +vn 0.251011 -0.242045 -0.937234 +vn 0.737134 -0.424441 -0.525816 +vn 0.004436 0.999814 -0.018778 +vn 0.004436 0.999814 -0.018778 +vn 0.004436 0.999814 -0.018778 +vn 0.000000 0.999987 0.004994 +vn 0.000000 0.999987 0.004994 +vn 0.000000 0.999987 0.004994 +vn 0.000006 -0.999892 0.014681 +vn 0.000006 -0.999892 0.014681 +vn 0.000006 -0.999892 0.014681 +vn -0.004437 -0.999978 -0.004971 +vn -0.004437 -0.999978 -0.004971 +vn -0.004437 -0.999978 -0.004971 +vn 0.000010 0.002341 -0.999997 +vn 0.000010 0.002341 -0.999997 +vn 0.000010 0.002341 -0.999997 +vn 0.000010 0.002341 -0.999997 +vn 0.616344 0.570219 0.543112 +vn -0.019503 0.999797 0.004993 +vn -0.019503 0.999797 0.004993 +vn -0.019503 0.999797 0.004993 +vn 0.021541 -0.999756 -0.004970 +vn 0.021541 -0.999756 -0.004970 +vn 0.021541 -0.999756 -0.004970 +vn -0.999832 -0.018323 -0.000000 +vn 0.999832 0.018322 0.000000 +vn 0.999832 0.018322 -0.000027 +vn 0.999832 0.018322 -0.000027 +vn -0.028006 0.999607 -0.000674 +vn -0.028006 0.999607 -0.000674 +vn -0.028006 0.999607 -0.000674 +vn 0.021541 -0.999767 0.001458 +vn 0.021541 -0.999767 0.001458 +vn 0.021541 -0.999767 0.001458 +vn 0.026277 -0.999654 -0.000654 +vn 0.026277 -0.999654 -0.000654 +vn 0.026277 -0.999654 -0.000654 +vn 0.000000 -0.000001 -1.000000 +vn 0.000000 -0.000001 -1.000000 +vn 0.000000 -0.000001 -1.000000 +vn 0.000000 -0.000001 -1.000000 +vn 0.251011 -0.242045 -0.937234 +vn 0.250198 0.244643 -0.936777 +vn -0.999832 -0.018323 0.000012 +vn -0.999832 -0.018322 -0.000000 +vn -0.999832 -0.018323 0.000012 +vn 0.999832 0.018322 0.000000 +vn 0.999832 0.018322 0.000012 +vn 0.999832 0.018322 0.000012 +vn -0.021910 0.999760 -0.000674 +vn -0.016455 0.999865 0.000337 +vn -0.016455 0.999865 0.000337 +vn -0.016455 0.999865 0.000337 +vn 0.021541 -0.999768 -0.000654 +vn 0.021541 -0.999768 -0.000654 +vn 0.021541 -0.999768 -0.000654 +vn 0.014490 -0.999894 0.001458 +vn 0.014490 -0.999894 0.001458 +vn 0.014490 -0.999894 0.001458 +vn 0.000000 -0.000001 -1.000000 +vn 0.000000 -0.000001 -1.000000 +vn 0.000000 -0.000001 -1.000000 +vn 0.000000 -0.000001 -1.000000 +vn 0.999921 -0.012551 0.000071 +vn 0.999921 -0.012551 0.000071 +vn 0.999921 -0.012577 -0.000000 +vn 0.999921 -0.012551 0.000071 +vn 0.004437 0.999990 0.000000 +vn 0.004437 0.999990 0.000000 +vn 0.004437 0.999990 0.000000 +vn 0.004437 0.999990 0.000000 +vn 0.737493 -0.000000 -0.675355 +vn 0.929055 0.064665 -0.364246 +vn 0.909553 0.332232 -0.249671 +vn 0.967756 -0.000000 -0.251889 +vn -0.950141 0.000000 0.311822 +vn -0.754521 0.319338 0.573342 +vn -0.729449 0.645891 0.225231 +vn -0.379580 0.000000 0.925159 +vn -0.176656 0.422102 0.889169 +vn 0.201703 0.000000 0.979447 +vn 0.362436 0.382183 0.850045 +vn 0.798191 0.000000 0.602404 +vn 0.968028 0.109472 0.225694 +vn -0.171179 0.888219 0.426338 +vn 0.062881 0.915143 0.398194 +vn 0.465687 0.809125 0.358403 +vn 0.798191 0.000000 0.602404 +vn 0.465687 0.809125 0.358403 +vn -0.000000 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.000000 -0.000000 -1.000000 +vn 0.011725 0.985795 0.167542 +vn 0.909553 0.332232 -0.249671 +vn -0.005642 0.990634 0.136425 +vn -0.608806 0.773474 -0.176329 +vn -0.999745 0.022571 -0.000427 +vn -0.999745 0.022571 -0.000427 +vn -0.999745 0.022571 -0.000427 +vn -0.999971 -0.005425 0.005345 +vn -0.999971 -0.005425 0.005345 +vn -0.999971 -0.005425 0.005345 +vn -0.148086 0.988975 -0.000000 +vn -0.148086 0.988975 -0.000000 +vn -0.148086 0.988975 -0.000000 +vn -0.464450 0.885579 0.005999 +vn -0.464450 0.885579 0.005999 +vn -0.464450 0.885579 0.005999 +vn -0.847890 0.018688 0.529842 +vn -0.847890 0.018688 0.529842 +vn -0.847890 0.018688 0.529842 +vn -0.845153 0.019082 0.534183 +vn -0.845153 0.019082 0.534183 +vn -0.845153 0.019082 0.534183 +vn 0.000000 -0.000001 -1.000000 +vn 0.000000 -0.000001 -1.000000 +vn -0.999992 -0.004070 0.000000 +vn -0.999992 -0.004070 0.000000 +vn -0.999992 -0.004070 0.000000 +vn -0.999992 -0.004070 0.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 0.000000 1.000000 +vn 0.999992 0.004076 -0.000000 +vn 0.999992 0.004076 0.000000 +vn 0.999992 0.004076 -0.000000 +vn 0.999992 0.004076 -0.000000 +vn -0.004429 0.913622 -0.406539 +vn -0.004429 0.913622 -0.406539 +vn -0.004429 0.913622 -0.406539 +vn -0.004027 0.907531 -0.419964 +vn -0.004027 0.907531 -0.419964 +vn -0.004027 0.907531 -0.419964 +vn -0.004381 0.903704 0.428136 +vn -0.004381 0.903704 0.428136 +vn -0.004381 0.903704 0.428136 +vn -0.004036 0.909589 0.415488 +vn -0.004036 0.909589 0.415488 +vn -0.004036 0.909589 0.415488 +vn -0.020304 0.999794 -0.000000 +vn -0.020305 0.999794 -0.000000 +vn -0.020304 0.999794 -0.000000 +vn -0.020304 0.999794 -0.000000 +vn 0.012824 0.999918 -0.000000 +vn 0.012824 0.999918 -0.000000 +vn 0.012824 0.999918 -0.000000 +vn 0.012824 0.999918 -0.000000 +vn -0.000000 0.000001 -1.000000 +vn -0.000000 0.000001 -1.000000 +vn -0.000000 0.000001 -1.000000 +vn -0.000000 0.000001 -1.000000 +vn 0.004437 -0.999990 0.000000 +vn 0.004437 -0.999990 0.000000 +vn 0.004437 -0.999990 0.000000 +vn 0.004437 -0.999990 0.000000 +vn -0.000000 0.000001 1.000000 +vn -0.000000 0.000001 1.000000 +vn -0.000000 0.000001 1.000000 +vn -0.000000 0.000001 1.000000 +vn -0.999469 0.018316 -0.026931 +vn -0.999469 0.018316 -0.026931 +vn -0.999469 0.018316 -0.026931 +vn -0.999469 0.018316 -0.026931 +vn 0.021530 0.999231 -0.032765 +vn 0.021530 0.999231 -0.032765 +vn 0.021530 0.999231 -0.032765 +vn 0.006116 0.999583 -0.028232 +vn 0.006116 0.999583 -0.028232 +vn 0.006116 0.999583 -0.028232 +vn 0.999329 -0.018313 -0.031720 +vn 0.999329 -0.018313 -0.031720 +vn 0.999329 -0.018313 -0.031720 +vn 0.999329 -0.018313 -0.031720 +vn -0.021533 -0.999381 -0.027818 +vn -0.021533 -0.999381 -0.027818 +vn -0.021533 -0.999381 -0.027818 +vn -0.039109 -0.998716 -0.032200 +vn -0.039109 -0.998716 -0.032200 +vn -0.039109 -0.998716 -0.032200 +vn -0.999329 0.018313 -0.031720 +vn -0.999329 0.018313 -0.031720 +vn -0.999329 0.018313 -0.031720 +vn -0.999329 0.018313 -0.031720 +vn 0.021533 0.999381 -0.027818 +vn 0.021533 0.999381 -0.027818 +vn 0.021533 0.999381 -0.027818 +vn 0.039108 0.998716 -0.032200 +vn 0.039108 0.998716 -0.032200 +vn 0.039108 0.998716 -0.032200 +vn 0.999469 -0.018316 -0.026931 +vn 0.999469 -0.018316 -0.026931 +vn 0.999469 -0.018316 -0.026931 +vn 0.999469 -0.018316 -0.026931 +vn -0.021530 -0.999231 -0.032765 +vn -0.021530 -0.999231 -0.032765 +vn -0.021530 -0.999231 -0.032765 +vn -0.006116 -0.999583 -0.028231 +vn -0.006116 -0.999583 -0.028231 +vn -0.006116 -0.999583 -0.028231 +vn 0.021541 0.999768 -0.000000 +vn 0.021541 0.999768 -0.000000 +vn 0.021541 0.999768 -0.000000 +vn -0.021714 -0.999764 0.000317 +vn -0.021714 -0.999764 0.000317 +vn -0.021542 -0.999768 0.000000 +vn 0.021542 0.999768 -0.000000 +vn 0.021541 0.999768 -0.000000 +vn 0.021541 0.999768 -0.000000 +vn -0.021910 -0.999760 -0.000674 +vn -0.021542 -0.999768 0.000000 +vn -0.021910 -0.999760 -0.000674 +vn -0.999832 0.018323 -0.000000 +vn -0.999832 0.018323 -0.000000 +vn -0.999832 0.018323 -0.000000 +vn 0.999832 -0.018322 0.000000 +vn 0.999832 -0.018322 0.000000 +vn 0.999832 -0.018322 0.000000 +vn -0.999832 0.018322 -0.000000 +vn -0.999832 0.018322 -0.000000 +vn -0.999832 0.018322 -0.000000 +vn 0.999832 -0.018322 0.000000 +vn 0.999832 -0.018322 0.000000 +vn 0.999832 -0.018322 0.000000 +vn 0.021541 0.999768 -0.000000 +vn 0.021541 0.999768 -0.000000 +vn 0.021541 0.999768 -0.000000 +vn 0.021541 0.999768 -0.000000 +vn 0.968686 -0.195526 0.153029 +vn 0.968686 -0.195526 0.153029 +vn 0.968686 -0.195526 0.153029 +vn 0.973794 -0.182610 0.135571 +vn 0.973794 -0.182610 0.135571 +vn 0.973794 -0.182610 0.135571 +vn 0.956360 -0.020938 -0.291439 +vn 0.956184 -0.021083 -0.292008 +vn 0.956360 -0.020938 -0.291439 +vn 0.956360 -0.020938 -0.291439 +vn 0.947601 -0.319455 0.000000 +vn 0.947601 -0.319455 0.000000 +vn 0.947601 -0.319455 0.000000 +vn 0.947601 -0.319455 0.000000 +vn 0.501241 -0.666644 0.551674 +vn 0.501241 -0.666644 0.551674 +vn 0.501241 -0.666644 0.551674 +vn 0.508598 -0.663687 0.548496 +vn 0.508598 -0.663687 0.548496 +vn 0.508598 -0.663687 0.548496 +vn 0.999757 -0.022044 0.000000 +vn 0.999757 -0.022044 0.000000 +vn 0.999757 -0.022044 0.000000 +vn 0.999757 -0.022044 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.921437 -0.016886 0.388160 +vn 0.854236 -0.015654 0.519649 +vn 0.967760 -0.017734 0.251249 +vn 0.967760 -0.017734 0.251250 +vn 0.019763 0.917212 0.397908 +vn 0.018253 0.847154 0.531034 +vn 0.020806 0.965657 0.258986 +vn 0.020806 0.965657 0.258986 +vn -0.921438 0.016886 0.388159 +vn -0.854236 0.015654 0.519649 +vn -0.967760 0.017734 0.251249 +vn -0.967760 0.017734 0.251249 +vn -0.019762 -0.917212 0.397908 +vn -0.018253 -0.847154 0.531034 +vn -0.020806 -0.965657 0.258986 +vn -0.020806 -0.965657 0.258986 +vn 0.893681 -0.016377 0.448404 +vn 0.019147 0.888655 0.458176 +vn -0.893681 0.016377 0.448404 +vn -0.019147 -0.888655 0.458176 +vn 0.701700 0.674268 0.230173 +vn 0.712574 0.684717 0.152974 +vn 0.707594 0.679932 -0.192362 +vn 0.690072 0.663095 -0.290011 +vn -0.674165 0.701592 0.230801 +vn -0.684673 0.712527 0.153389 +vn -0.679869 0.707528 -0.192829 +vn -0.662945 0.689916 -0.290723 +vn 0.674165 -0.701592 0.230802 +vn 0.684673 -0.712527 0.153389 +vn 0.679869 -0.707528 -0.192828 +vn 0.662945 -0.689916 -0.290722 +vn -0.701699 -0.674269 0.230174 +vn -0.712573 -0.684717 0.152974 +vn -0.707594 -0.679932 -0.192362 +vn -0.690071 -0.663095 -0.290011 +vn 0.698442 -0.012799 -0.715552 +vn 0.698442 -0.012799 -0.715552 +vn 0.858479 -0.015732 -0.512607 +vn 0.014796 0.686711 -0.726780 +vn 0.014796 0.686712 -0.726779 +vn 0.018371 0.852614 -0.522219 +vn -0.698441 0.012799 -0.715553 +vn -0.698441 0.012799 -0.715553 +vn -0.858479 0.015732 -0.512607 +vn -0.014796 -0.686711 -0.726780 +vn -0.014796 -0.686711 -0.726780 +vn -0.018371 -0.852614 -0.522219 +vn 0.974379 -0.017856 0.224202 +vn 0.020969 0.973180 0.229088 +vn -0.974379 0.017856 0.224202 +vn -0.020969 -0.973180 0.229088 +vn 0.966434 -0.017711 -0.256303 +vn 0.020794 0.965085 -0.261109 +vn -0.966434 0.017710 -0.256304 +vn -0.020794 -0.965085 -0.261109 +vn 0.619054 -0.644240 0.449140 +vn 0.644657 0.619456 0.447986 +vn -0.644657 -0.619456 0.447987 +vn -0.619055 0.644239 0.449140 +vn 0.575750 -0.599173 -0.556331 +vn 0.599769 0.576323 -0.555094 +vn -0.599768 -0.576322 -0.555095 +vn -0.575749 0.599172 -0.556332 +vn 0.999832 -0.018322 0.000000 +vn 0.999832 -0.018322 0.000000 +vn 0.999832 -0.018322 0.000000 +vn 0.999832 -0.018322 0.000000 +vn 0.021541 0.999768 -0.000000 +vn 0.021541 0.999768 -0.000000 +vn 0.021541 0.999768 -0.000000 +vn 0.021541 0.999768 -0.000000 +vn -0.999832 0.018322 -0.000000 +vn -0.999832 0.018322 -0.000000 +vn -0.999832 0.018322 -0.000000 +vn -0.999832 0.018322 -0.000000 +vn -0.021541 -0.999768 0.000000 +vn -0.021541 -0.999768 0.000000 +vn -0.021541 -0.999768 0.000000 +vn -0.021541 -0.999768 0.000000 +vn 0.014158 0.657083 0.753685 +vn 0.014158 0.657082 0.753686 +vn 0.014158 0.657083 0.753685 +vn 0.014158 0.657083 0.753685 +vn 0.669174 -0.012263 0.743005 +vn 0.669174 -0.012263 0.743005 +vn 0.669174 -0.012263 0.743005 +vn 0.669174 -0.012263 0.743005 +vn -0.014158 -0.657082 0.753686 +vn -0.014158 -0.657082 0.753686 +vn -0.014158 -0.657082 0.753686 +vn -0.014158 -0.657082 0.753686 +vn -0.669173 0.012263 0.743005 +vn -0.669173 0.012263 0.743005 +vn -0.669173 0.012263 0.743005 +vn -0.669173 0.012263 0.743005 +vn 0.999999 -0.001050 0.000000 +vn 0.999999 -0.001050 0.000000 +vn 0.999999 -0.001050 0.000000 +vn 0.999999 -0.001050 0.000000 +vn -0.999999 0.001055 0.000000 +vn -0.999999 0.001055 0.000000 +vn -0.999999 0.001055 0.000000 +vn -0.999999 0.001055 0.000000 +vn 0.000000 -0.770164 0.637845 +vn 0.000000 -0.770164 0.637845 +vn 0.000000 -0.770164 0.637845 +vn -0.016619 -0.771290 0.636266 +vn -0.016619 -0.771290 0.636266 +vn -0.016619 -0.771290 0.636266 +vn 0.193431 0.981114 -0.000000 +vn 0.193431 0.981114 -0.000000 +vn 0.193431 0.981114 -0.000000 +vn 0.193431 0.981114 -0.000000 +vn 0.021301 0.988620 0.148918 +vn 0.021301 0.988620 0.148918 +vn 0.021301 0.988620 0.148918 +vn 0.021301 0.988620 0.148918 +vn -0.148086 0.988975 -0.000000 +vn 0.999832 -0.018322 0.000000 +vn 0.999832 -0.018322 0.000000 +vn 0.999832 -0.018322 0.000000 +vn 0.999760 -0.021888 -0.000000 +vn 0.999760 -0.021888 -0.000000 +vn 0.999760 -0.021888 -0.000000 +vn 0.999760 -0.021888 -0.000000 +vn -0.999757 0.022035 0.000000 +vn -0.999757 0.022035 0.000000 +vn -0.999757 0.022035 0.000000 +vn -0.999757 0.022035 0.000000 +vn -0.000211 -0.004415 -0.999990 +vn 0.000000 -0.004485 -0.999990 +vn -0.000211 -0.004415 -0.999990 +vn -0.000211 -0.004415 -0.999990 +vn 0.999832 -0.018322 0.000000 +vn 0.999832 -0.018322 0.000000 +vn -0.021541 -0.999768 0.000000 +vn -0.021541 -0.999768 0.000000 +vn -0.021541 -0.999768 0.000000 +vn -0.021714 -0.999764 0.000317 +vn -0.999832 0.018323 -0.000000 +vn -0.999832 0.018323 -0.000000 +vn -0.999832 0.018320 -0.000006 +vn -0.999832 0.018322 0.000000 +vn -0.999999 0.001611 0.000000 +vn -0.999999 0.001614 0.000009 +vn -0.999999 0.001611 0.000000 +vn -0.999999 0.001611 0.000000 +vn -0.944355 -0.104600 -0.311853 +vn -0.608807 -0.773474 -0.176329 +vn 0.616344 -0.570219 0.543112 +vn -0.336067 -0.926478 0.169402 +vn -0.178933 -0.496218 0.849559 +vn 0.326412 -0.192288 0.925462 +vn -0.202221 0.886786 0.415592 +vn 0.525411 0.638120 0.562802 +vn 0.131097 0.303651 0.943721 +vn -0.459420 0.687735 0.562098 +vn -0.287476 0.887075 -0.361187 +vn -0.432678 0.718253 -0.544887 +vn -0.301712 -0.879869 -0.367153 +vn -0.452459 -0.701514 -0.550598 +vn -0.021541 -0.999768 0.000000 +vn -0.999832 0.018320 -0.000006 +vn 0.737134 0.424441 -0.525816 +vn 0.389168 -0.588615 -0.708576 +vn 0.389168 -0.588615 -0.708576 +vn 0.250198 -0.244643 -0.936777 +vn 0.251011 0.242045 -0.937234 +vn 0.737134 0.424441 -0.525816 +vn 0.004436 -0.999814 -0.018777 +vn 0.004436 -0.999814 -0.018777 +vn 0.004436 -0.999814 -0.018777 +vn 0.000000 -0.999987 0.004994 +vn 0.000000 -0.999987 0.004994 +vn 0.000000 -0.999987 0.004994 +vn 0.000006 0.999892 0.014681 +vn 0.000006 0.999892 0.014681 +vn 0.000006 0.999892 0.014681 +vn -0.004437 0.999978 -0.004971 +vn -0.004437 0.999978 -0.004971 +vn -0.004437 0.999978 -0.004971 +vn 0.000010 -0.002341 -0.999997 +vn 0.000010 -0.002341 -0.999997 +vn 0.000010 -0.002341 -0.999997 +vn 0.000010 -0.002341 -0.999997 +vn 0.616344 -0.570219 0.543112 +vn -0.019503 -0.999797 0.004993 +vn -0.019503 -0.999797 0.004993 +vn -0.019503 -0.999797 0.004993 +vn 0.021541 0.999756 -0.004970 +vn 0.021541 0.999756 -0.004970 +vn 0.021541 0.999756 -0.004970 +vn -0.999832 0.018323 -0.000000 +vn 0.999832 -0.018322 0.000000 +vn 0.999832 -0.018322 -0.000027 +vn 0.999832 -0.018322 -0.000027 +vn -0.028006 -0.999607 -0.000674 +vn -0.028006 -0.999607 -0.000674 +vn -0.028006 -0.999607 -0.000674 +vn 0.021541 0.999767 0.001458 +vn 0.021541 0.999767 0.001458 +vn 0.021541 0.999767 0.001458 +vn 0.026277 0.999654 -0.000654 +vn 0.026277 0.999654 -0.000654 +vn 0.026277 0.999654 -0.000654 +vn 0.000000 0.000001 -1.000000 +vn 0.000000 0.000001 -1.000000 +vn 0.000000 0.000001 -1.000000 +vn 0.000000 0.000001 -1.000000 +vn 0.251011 0.242045 -0.937234 +vn 0.250198 -0.244643 -0.936777 +vn -0.999832 0.018322 -0.000000 +vn -0.999832 0.018323 0.000012 +vn -0.999832 0.018323 0.000012 +vn 0.999832 -0.018322 0.000000 +vn 0.999832 -0.018322 0.000012 +vn 0.999832 -0.018322 0.000012 +vn -0.021910 -0.999760 -0.000674 +vn -0.016454 -0.999865 0.000337 +vn -0.016454 -0.999865 0.000337 +vn -0.016454 -0.999865 0.000337 +vn 0.021541 0.999768 -0.000654 +vn 0.021541 0.999768 -0.000654 +vn 0.021541 0.999768 -0.000654 +vn 0.014490 0.999894 0.001458 +vn 0.014490 0.999894 0.001458 +vn 0.014490 0.999894 0.001458 +vn 0.000000 0.000001 -1.000000 +vn 0.000000 0.000001 -1.000000 +vn 0.000000 0.000001 -1.000000 +vn 0.000000 0.000001 -1.000000 +vn 0.999921 0.012551 0.000071 +vn 0.999921 0.012577 -0.000000 +vn 0.999921 0.012551 0.000071 +vn 0.999921 0.012551 0.000071 +vn 0.004437 -0.999990 0.000000 +vn 0.004437 -0.999990 0.000000 +vn 0.004437 -0.999990 0.000000 +vn 0.004437 -0.999990 0.000000 +vn 0.909553 -0.332232 -0.249671 +vn 0.929055 -0.064665 -0.364246 +vn -0.754521 -0.319338 0.573342 +vn -0.729449 -0.645891 0.225232 +vn -0.176656 -0.422102 0.889170 +vn 0.362436 -0.382183 0.850045 +vn 0.968028 -0.109472 0.225694 +vn -0.171179 -0.888219 0.426339 +vn 0.062881 -0.915143 0.398194 +vn 0.465687 -0.809125 0.358404 +vn 0.465687 -0.809125 0.358404 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn -0.000000 -0.000000 -1.000000 +vn 0.011725 -0.985795 0.167542 +vn 0.909553 -0.332232 -0.249671 +vn -0.005642 -0.990634 0.136425 +vn -0.608807 -0.773474 -0.176329 +f 1/1/1 2/2/2 3/3/3 +f 4/4/4 5/5/5 6/6/6 +f 7/7/7 8/8/8 9/9/9 +f 10/10/10 11/11/11 12/12/12 +f 13/13/13 14/14/14 15/15/15 +f 16/16/16 17/17/17 18/18/18 +f 19/19/19 20/20/20 21/21/21 +f 20/20/20 19/19/19 22/22/22 +f 23/23/23 24/24/24 25/25/25 +f 24/24/24 23/23/23 26/26/26 +f 27/27/27 28/28/28 29/29/29 +f 28/28/28 27/27/27 30/30/30 +f 31/31/31 32/32/32 33/33/33 +f 32/32/32 31/31/31 34/34/34 +f 35/35/35 36/36/36 37/37/37 +f 38/38/38 39/39/39 40/40/40 +f 41/41/41 42/42/42 43/43/43 +f 44/44/44 45/45/45 46/46/46 +f 47/47/47 48/48/48 49/49/49 +f 48/48/48 47/47/47 50/50/50 +f 51/51/51 52/52/52 53/53/53 +f 52/52/52 51/51/51 54/54/54 +f 55/55/55 56/56/56 57/57/57 +f 56/56/56 55/55/55 58/58/58 +f 59/59/59 60/60/60 61/61/61 +f 60/60/60 59/59/59 62/62/62 +f 63/63/63 64/64/64 65/65/65 +f 64/64/64 63/63/63 66/66/66 +f 67/67/67 68/68/68 69/69/69 +f 68/68/68 67/67/67 70/70/70 +f 71/71/71 72/72/72 73/73/73 +f 74/74/74 75/75/75 76/76/76 +f 77/77/77 78/78/78 79/79/79 +f 78/78/78 77/77/77 80/80/80 +f 81/81/81 82/82/82 83/83/83 +f 84/84/84 85/85/85 86/86/86 +f 87/87/87 88/88/88 89/89/89 +f 88/88/88 87/87/87 90/90/90 +f 91/91/91 92/92/92 93/93/93 +f 94/94/94 95/95/95 96/96/96 +f 97/97/97 98/98/98 99/99/99 +f 98/98/98 97/97/97 100/100/100 +f 101/101/101 102/102/102 103/103/103 +f 104/104/104 105/105/105 106/106/106 +f 107/107/107 108/108/108 109/109/109 +f 110/110/110 111/111/111 112/112/112 +f 113/113/113 114/114/114 115/115/115 +f 116/116/116 117/117/117 118/118/118 +f 119/119/119 120/120/120 121/121/121 +f 122/122/122 123/123/123 124/124/124 +f 125/125/125 126/126/126 127/127/127 +f 128/128/128 129/129/129 130/130/130 +f 115/115/115 131/131/131 113/113/113 +f 131/131/131 115/115/115 132/132/132 +f 107/107/107 133/133/133 108/108/108 +f 133/133/133 107/107/107 134/134/134 +f 135/135/135 136/136/136 137/137/137 +f 138/138/138 139/139/139 140/140/140 +f 141/141/141 142/142/142 143/143/143 +f 142/142/142 141/141/141 144/144/144 +f 145/145/145 146/146/146 147/147/147 +f 146/146/146 145/145/145 148/148/148 +f 149/149/149 150/150/150 151/151/151 +f 152/152/152 153/153/153 154/154/154 +f 155/155/155 156/156/156 157/157/157 +f 158/158/158 157/157/157 156/156/156 +f 159/159/159 160/160/160 161/161/161 +f 160/160/160 159/159/159 162/162/162 +f 163/163/163 164/164/164 165/165/165 +f 164/164/164 163/163/163 166/166/166 +f 167/167/167 168/168/168 169/169/169 +f 168/168/168 167/167/167 170/170/170 +f 171/171/171 172/172/172 173/173/173 +f 172/172/172 171/171/171 174/174/174 +f 175/175/175 176/176/176 177/177/177 +f 176/176/176 175/175/175 178/178/178 +f 165/165/165 179/179/179 163/163/163 +f 169/169/169 180/180/180 167/167/167 +f 173/173/173 181/181/181 171/171/171 +f 177/177/177 182/182/182 175/175/175 +f 183/183/183 184/184/184 185/185/185 +f 186/186/186 185/185/185 184/184/184 +f 187/187/187 188/188/188 189/189/189 +f 190/190/190 189/189/189 188/188/188 +f 191/191/191 192/192/192 193/193/193 +f 194/194/194 193/193/193 192/192/192 +f 195/195/195 196/196/196 197/197/197 +f 198/198/198 197/197/197 196/196/196 +f 199/199/199 200/200/200 201/201/201 +f 202/202/202 203/203/203 204/204/204 +f 205/205/205 206/206/206 207/207/207 +f 208/208/208 209/209/209 210/210/210 +f 179/179/179 165/165/165 211/211/211 +f 180/180/180 169/169/169 212/212/212 +f 181/181/181 173/173/173 213/213/213 +f 182/182/182 177/177/177 214/214/214 +f 200/200/200 199/199/199 215/215/215 +f 203/203/203 202/202/202 216/216/216 +f 206/206/206 205/205/205 217/217/217 +f 209/209/209 208/208/208 218/218/218 +f 219/219/219 191/191/191 193/193/193 +f 183/183/183 185/185/185 220/220/220 +f 195/195/195 197/197/197 221/221/221 +f 187/187/187 189/189/189 222/222/222 +f 192/192/192 223/223/223 194/194/194 +f 224/224/224 186/186/186 184/184/184 +f 225/225/225 198/198/198 196/196/196 +f 226/226/226 190/190/190 188/188/188 +f 211/211/211 215/215/215 179/179/179 +f 215/215/215 211/211/211 200/200/200 +f 212/212/212 216/216/216 180/180/180 +f 216/216/216 212/212/212 203/203/203 +f 213/213/213 217/217/217 181/181/181 +f 217/217/217 213/213/213 206/206/206 +f 214/214/214 218/218/218 182/182/182 +f 218/218/218 214/214/214 209/209/209 +f 227/227/227 228/228/228 229/229/229 +f 228/228/228 227/227/227 230/230/230 +f 231/231/231 232/232/232 233/233/233 +f 232/232/232 231/231/231 234/234/234 +f 235/235/235 236/236/236 237/237/237 +f 236/236/236 235/235/235 238/238/238 +f 239/239/239 240/240/240 241/241/241 +f 240/240/240 239/239/239 242/242/242 +f 243/243/243 244/244/244 245/245/245 +f 244/244/244 243/243/243 246/246/246 +f 247/247/247 248/248/248 249/249/249 +f 248/248/248 247/247/247 250/250/250 +f 251/251/251 252/252/252 253/253/253 +f 252/252/252 251/251/251 254/254/254 +f 255/255/255 256/256/256 257/257/257 +f 256/256/256 255/255/255 258/258/258 +f 259/259/259 260/260/260 261/261/261 +f 260/260/260 259/259/259 262/262/262 +f 263/263/263 264/264/264 265/265/265 +f 264/264/264 263/263/263 266/266/266 +f 267/267/267 268/268/268 269/269/269 +f 270/270/270 271/271/271 272/272/272 +f 273/273/273 274/274/274 275/275/275 +f 274/274/274 273/273/273 276/276/276 +f 277/277/277 278/278/278 279/279/279 +f 278/278/278 277/277/277 280/280/280 +f 8/8/8 7/7/7 281/281/281 +f 282/282/282 283/283/283 284/284/284 +f 285/285/285 286/286/286 287/287/287 +f 286/286/286 285/285/285 288/288/288 +f 289/289/289 290/290/290 291/291/291 +f 290/290/290 289/289/289 292/292/292 +f 293/293/293 294/294/294 295/295/295 +f 294/294/294 293/293/293 296/296/296 +f 282/282/282 297/297/297 283/283/283 +f 297/297/297 282/282/282 298/298/298 +f 299/299/299 300/300/300 301/301/301 +f 300/300/300 299/299/299 302/302/302 +f 303/303/303 304/304/304 305/305/305 +f 304/304/304 303/303/303 306/306/306 +f 307/307/307 308/308/308 309/309/309 +f 308/308/308 307/307/307 310/310/310 +f 311/311/311 312/312/312 313/313/313 +f 312/312/312 311/311/311 314/314/314 +f 315/315/315 316/316/316 317/317/317 +f 316/316/316 315/315/315 318/318/318 +f 319/319/319 320/320/320 321/321/321 +f 320/320/320 319/319/319 322/322/322 +f 321/321/321 318/318/318 315/315/315 +f 318/318/318 321/321/321 320/320/320 +f 320/320/320 316/316/316 318/318/318 +f 316/316/316 320/320/320 322/322/322 +f 323/323/323 322/322/322 319/319/319 +f 322/322/322 323/323/323 324/324/324 +f 317/317/317 325/325/325 326/326/326 +f 325/325/325 317/317/317 316/316/316 +f 302/302/302 327/327/327 300/300/300 +f 304/304/304 306/306/306 328/328/328 +f 315/315/315 329/329/329 321/321/321 +f 329/329/329 315/315/315 330/330/330 +f 331/331/331 325/325/325 332/332/332 +f 325/325/325 331/331/331 326/326/326 +f 333/333/333 323/323/323 334/334/334 +f 323/323/323 333/333/333 324/324/324 +f 335/335/335 336/336/336 337/337/337 +f 338/338/338 339/339/339 340/340/340 +f 341/341/341 342/342/342 343/343/343 +f 344/344/344 345/345/345 346/346/346 +f 347/347/347 348/348/348 349/349/349 +f 348/348/348 347/347/347 350/350/350 +f 321/321/321 323/323/323 319/319/319 +f 323/323/323 321/321/321 334/334/334 +f 317/317/317 331/331/331 351/351/351 +f 331/331/331 317/317/317 326/326/326 +f 352/352/352 353/353/353 354/354/354 +f 355/355/355 356/356/356 357/357/357 +f 119/119/119 328/328/328 358/358/358 +f 328/328/328 119/119/119 304/304/304 +f 359/359/359 360/360/360 122/122/122 +f 360/360/360 359/359/359 361/361/361 +f 112/112/112 302/302/302 110/110/110 +f 362/362/362 363/363/363 364/364/364 +f 365/365/365 366/366/366 367/367/367 +f 368/368/368 369/369/369 370/370/370 +f 359/359/359 122/122/122 124/124/124 +f 120/120/120 119/119/119 358/358/358 +f 371/371/371 372/372/372 373/373/373 +f 372/372/372 371/371/371 374/374/374 +f 375/375/375 330/330/330 376/376/376 +f 330/330/330 375/375/375 329/329/329 +f 125/125/125 377/377/377 378/378/378 +f 377/377/377 125/125/125 379/379/379 +f 380/380/380 381/381/381 128/128/128 +f 381/381/381 380/380/380 382/382/382 +f 116/116/116 383/383/383 117/117/117 +f 384/384/384 385/385/385 386/386/386 +f 387/387/387 388/388/388 389/389/389 +f 390/390/390 391/391/391 392/392/392 +f 380/380/380 128/128/128 130/130/130 +f 126/126/126 125/125/125 378/378/378 +f 393/393/393 394/394/394 395/395/395 +f 394/394/394 393/393/393 396/396/396 +f 397/397/397 398/398/398 399/399/399 +f 398/398/398 397/397/397 400/400/400 +f 401/401/401 402/402/402 403/403/403 +f 402/402/402 401/401/401 404/404/404 +f 405/405/405 406/406/406 407/407/407 +f 406/406/406 405/405/405 408/408/408 +f 409/409/409 312/312/312 410/410/410 +f 312/312/312 409/409/409 313/313/313 +f 411/411/411 312/312/312 314/314/314 +f 312/312/312 411/411/411 410/410/410 +f 412/412/412 410/410/410 413/413/413 +f 410/410/410 412/412/412 409/409/409 +f 414/414/414 413/413/413 415/415/415 +f 413/413/413 414/414/414 412/412/412 +f 416/416/416 415/415/415 417/417/417 +f 415/415/415 416/416/416 414/414/414 +f 418/418/418 410/410/410 411/411/411 +f 410/410/410 418/418/418 413/413/413 +f 419/419/419 413/413/413 418/418/418 +f 413/413/413 419/419/419 415/415/415 +f 420/420/420 415/415/415 419/419/419 +f 415/415/415 420/420/420 417/417/417 +f 408/408/408 417/417/417 406/406/406 +f 417/417/417 408/408/408 421/421/421 +f 407/407/407 417/417/417 422/422/422 +f 417/417/417 407/407/407 406/406/406 +f 423/423/423 424/424/424 425/425/425 +f 424/424/424 423/423/423 426/426/426 +f 427/427/427 428/428/428 429/429/429 +f 428/428/428 427/427/427 430/430/430 +f 431/431/431 432/432/432 433/433/433 +f 432/432/432 431/431/431 434/434/434 +f 435/435/435 422/422/422 419/419/419 +f 422/422/422 435/435/435 436/436/436 +f 437/437/437 419/419/419 418/418/418 +f 419/419/419 437/437/437 435/435/435 +f 438/438/438 418/418/418 411/411/411 +f 418/418/418 438/438/438 437/437/437 +f 439/439/439 440/440/440 441/441/441 +f 442/442/442 443/443/443 444/444/444 +f 445/445/445 446/446/446 447/447/447 +f 448/448/448 449/449/449 450/450/450 +f 451/451/451 452/452/452 453/453/453 +f 454/454/454 455/455/455 456/456/456 +f 19/19/19 21/21/21 457/457/457 +f 457/457/457 458/458/458 19/19/19 +f 459/459/459 460/460/460 461/461/461 +f 461/461/461 462/462/462 459/459/459 +f 27/27/27 29/29/29 463/463/463 +f 463/463/463 464/464/464 27/27/27 +f 465/465/465 466/466/466 467/467/467 +f 467/467/467 468/468/468 465/465/465 +f 469/469/469 470/470/470 471/471/471 +f 472/472/472 473/473/473 474/474/474 +f 475/475/475 476/476/476 477/477/477 +f 478/478/478 479/479/479 480/480/480 +f 481/481/481 482/482/482 483/483/483 +f 483/483/483 484/484/484 481/481/481 +f 485/485/485 486/486/486 487/487/487 +f 487/487/487 488/488/488 485/485/485 +f 489/489/489 490/490/490 491/491/491 +f 491/491/491 492/492/492 489/489/489 +f 493/493/493 494/494/494 495/495/495 +f 495/495/495 496/496/496 493/493/493 +f 497/497/497 498/498/498 499/499/499 +f 499/499/499 500/500/500 497/497/497 +f 501/501/501 502/502/502 503/503/503 +f 503/503/503 504/504/504 501/501/501 +f 505/505/505 506/506/506 507/507/507 +f 508/508/508 509/509/509 510/510/510 +f 511/511/511 512/512/512 513/513/513 +f 513/513/513 514/514/514 511/511/511 +f 515/515/515 516/516/516 517/517/517 +f 518/518/518 519/519/519 520/520/520 +f 521/521/521 522/522/522 523/523/523 +f 523/523/523 524/524/524 521/521/521 +f 525/525/525 526/526/526 527/527/527 +f 528/528/528 529/529/529 530/530/530 +f 531/531/531 532/532/532 533/533/533 +f 533/533/533 534/534/534 531/531/531 +f 535/535/535 536/536/536 537/537/537 +f 538/538/538 539/539/539 540/540/540 +f 541/541/541 542/542/542 543/543/543 +f 544/544/544 545/545/545 546/546/546 +f 547/547/547 548/548/548 549/549/549 +f 550/550/550 551/551/551 552/552/552 +f 553/553/553 554/554/554 555/555/555 +f 556/556/556 557/557/557 558/558/558 +f 559/559/559 560/560/560 561/561/561 +f 562/562/562 563/563/563 564/564/564 +f 548/548/548 547/547/547 565/565/565 +f 565/565/565 566/566/566 548/548/548 +f 541/541/541 543/543/543 567/567/567 +f 567/567/567 568/568/568 541/541/541 +f 569/569/569 570/570/570 571/571/571 +f 572/572/572 573/573/573 574/574/574 +f 575/575/575 576/576/576 577/577/577 +f 577/577/577 578/578/578 575/575/575 +f 579/579/579 580/580/580 581/581/581 +f 581/581/581 582/582/582 579/579/579 +f 583/583/583 584/584/584 585/585/585 +f 586/586/586 587/587/587 588/588/588 +f 589/589/589 590/590/590 591/591/591 +f 592/592/592 591/591/591 590/590/590 +f 593/593/593 594/594/594 595/595/595 +f 595/595/595 596/596/596 593/593/593 +f 597/597/597 598/598/598 599/599/599 +f 599/599/599 600/600/600 597/597/597 +f 601/601/601 602/602/602 603/603/603 +f 603/603/603 604/604/604 601/601/601 +f 605/605/605 606/606/606 607/607/607 +f 607/607/607 608/608/608 605/605/605 +f 609/609/609 610/610/610 611/611/611 +f 611/611/611 612/612/612 609/609/609 +f 598/598/598 597/597/597 613/613/613 +f 602/602/602 601/601/601 614/614/614 +f 606/606/606 605/605/605 615/615/615 +f 610/610/610 609/609/609 616/616/616 +f 617/617/617 618/618/618 619/619/619 +f 620/620/620 619/619/619 618/618/618 +f 621/621/621 622/622/622 623/623/623 +f 624/624/624 623/623/623 622/622/622 +f 625/625/625 626/626/626 627/627/627 +f 628/628/628 627/627/627 626/626/626 +f 629/629/629 630/630/630 631/631/631 +f 632/632/632 631/631/631 630/630/630 +f 633/633/633 634/634/634 635/635/635 +f 636/636/636 637/637/637 638/638/638 +f 639/639/639 640/640/640 641/641/641 +f 642/642/642 643/643/643 644/644/644 +f 613/613/613 645/645/645 598/598/598 +f 614/614/614 646/646/646 602/602/602 +f 615/615/615 647/647/647 606/606/606 +f 616/616/616 648/648/648 610/610/610 +f 635/635/635 649/649/649 633/633/633 +f 638/638/638 650/650/650 636/636/636 +f 641/641/641 651/651/651 639/639/639 +f 644/644/644 652/652/652 642/642/642 +f 653/653/653 626/626/626 625/625/625 +f 617/617/617 654/654/654 618/618/618 +f 629/629/629 655/655/655 630/630/630 +f 621/621/621 656/656/656 622/622/622 +f 627/627/627 628/628/628 657/657/657 +f 658/658/658 619/619/619 620/620/620 +f 659/659/659 631/631/631 632/632/632 +f 660/660/660 623/623/623 624/624/624 +f 645/645/645 613/613/613 649/649/649 +f 649/649/649 635/635/635 645/645/645 +f 646/646/646 614/614/614 650/650/650 +f 650/650/650 638/638/638 646/646/646 +f 647/647/647 615/615/615 651/651/651 +f 651/651/651 641/641/641 647/647/647 +f 648/648/648 616/616/616 652/652/652 +f 652/652/652 644/644/644 648/648/648 +f 661/661/661 662/662/662 663/663/663 +f 663/663/663 664/664/664 661/661/661 +f 665/665/665 666/666/666 667/667/667 +f 667/667/667 668/668/668 665/665/665 +f 669/669/669 670/670/670 671/671/671 +f 671/671/671 672/672/672 669/669/669 +f 673/673/673 674/674/674 675/675/675 +f 675/675/675 676/676/676 673/673/673 +f 677/677/677 678/678/678 679/679/679 +f 679/679/679 680/680/680 677/677/677 +f 681/681/681 682/682/682 683/683/683 +f 683/683/683 684/684/684 681/681/681 +f 685/685/685 686/686/686 687/687/687 +f 687/687/687 688/688/688 685/685/685 +f 689/689/689 690/690/690 691/691/691 +f 691/691/691 692/692/692 689/689/689 +f 693/693/693 694/694/694 695/695/695 +f 695/695/695 696/696/696 693/693/693 +f 697/697/697 698/698/698 699/699/699 +f 699/699/699 700/700/700 697/697/697 +f 701/701/701 702/702/702 703/703/703 +f 704/704/704 705/705/705 706/706/706 +f 707/707/707 708/708/708 709/709/709 +f 709/709/709 710/710/710 707/707/707 +f 711/711/711 712/712/712 713/713/713 +f 713/713/713 714/714/714 711/711/711 +f 447/447/447 715/715/715 445/445/445 +f 716/716/716 717/717/717 718/718/718 +f 719/719/719 720/720/720 721/721/721 +f 721/721/721 722/722/722 719/719/719 +f 723/723/723 724/724/724 725/725/725 +f 725/725/725 726/726/726 723/723/723 +f 727/727/727 728/728/728 729/729/729 +f 729/729/729 730/730/730 727/727/727 +f 716/716/716 718/718/718 731/731/731 +f 731/731/731 732/732/732 716/716/716 +f 733/733/733 734/734/734 735/735/735 +f 735/735/735 736/736/736 733/733/733 +f 737/737/737 738/738/738 739/739/739 +f 739/739/739 740/740/740 737/737/737 +f 741/741/741 742/742/742 743/743/743 +f 743/743/743 744/744/744 741/741/741 +f 311/311/311 313/313/313 745/745/745 +f 745/745/745 746/746/746 311/311/311 +f 747/747/747 748/748/748 749/749/749 +f 749/749/749 750/750/750 747/747/747 +f 751/751/751 752/752/752 753/753/753 +f 753/753/753 754/754/754 751/751/751 +f 752/752/752 747/747/747 750/750/750 +f 750/750/750 753/753/753 752/752/752 +f 753/753/753 750/750/750 749/749/749 +f 749/749/749 754/754/754 753/753/753 +f 755/755/755 751/751/751 754/754/754 +f 754/754/754 756/756/756 755/755/755 +f 748/748/748 757/757/757 758/758/758 +f 758/758/758 749/749/749 748/748/748 +f 736/736/736 735/735/735 759/759/759 +f 739/739/739 760/760/760 740/740/740 +f 747/747/747 752/752/752 761/761/761 +f 761/761/761 762/762/762 747/747/747 +f 763/763/763 764/764/764 758/758/758 +f 758/758/758 757/757/757 763/763/763 +f 765/765/765 766/766/766 755/755/755 +f 755/755/755 756/756/756 765/765/765 +f 767/767/767 768/768/768 769/769/769 +f 770/770/770 771/771/771 772/772/772 +f 773/773/773 774/774/774 775/775/775 +f 776/776/776 777/777/777 778/778/778 +f 779/779/779 780/780/780 781/781/781 +f 781/781/781 782/782/782 779/779/779 +f 752/752/752 751/751/751 755/755/755 +f 755/755/755 766/766/766 752/752/752 +f 748/748/748 783/783/783 763/763/763 +f 763/763/763 757/757/757 748/748/748 +f 784/784/784 785/785/785 786/786/786 +f 787/787/787 788/788/788 789/789/789 +f 553/553/553 790/790/790 760/760/760 +f 760/760/760 739/739/739 553/553/553 +f 791/791/791 556/556/556 792/792/792 +f 792/792/792 793/793/793 791/791/791 +f 545/545/545 544/544/544 736/736/736 +f 794/794/794 795/795/795 796/796/796 +f 797/797/797 798/798/798 799/799/799 +f 800/800/800 801/801/801 802/802/802 +f 791/791/791 557/557/557 556/556/556 +f 555/555/555 790/790/790 553/553/553 +f 803/803/803 804/804/804 805/805/805 +f 805/805/805 806/806/806 803/803/803 +f 807/807/807 808/808/808 762/762/762 +f 762/762/762 761/761/761 807/807/807 +f 559/559/559 809/809/809 810/810/810 +f 810/810/810 811/811/811 559/559/559 +f 812/812/812 562/562/562 813/813/813 +f 813/813/813 814/814/814 812/812/812 +f 550/550/550 552/552/552 815/815/815 +f 816/816/816 817/817/817 818/818/818 +f 819/819/819 820/820/820 821/821/821 +f 822/822/822 823/823/823 824/824/824 +f 812/812/812 563/563/563 562/562/562 +f 561/561/561 809/809/809 559/559/559 +f 825/825/825 826/826/826 827/827/827 +f 827/827/827 828/828/828 825/825/825 +f 829/829/829 830/830/830 831/831/831 +f 831/831/831 832/832/832 829/829/829 +f 833/833/833 834/834/834 835/835/835 +f 835/835/835 836/836/836 833/833/833 +f 405/405/405 837/837/837 838/838/838 +f 838/838/838 408/408/408 405/405/405 +f 409/409/409 839/839/839 745/745/745 +f 745/745/745 313/313/313 409/409/409 +f 840/840/840 746/746/746 745/745/745 +f 745/745/745 839/839/839 840/840/840 +f 412/412/412 841/841/841 839/839/839 +f 839/839/839 409/409/409 412/412/412 +f 414/414/414 842/842/842 841/841/841 +f 841/841/841 412/412/412 414/414/414 +f 416/416/416 843/843/843 842/842/842 +f 842/842/842 414/414/414 416/416/416 +f 844/844/844 840/840/840 839/839/839 +f 839/839/839 841/841/841 844/844/844 +f 845/845/845 844/844/844 841/841/841 +f 841/841/841 842/842/842 845/845/845 +f 846/846/846 845/845/845 842/842/842 +f 842/842/842 843/843/843 846/846/846 +f 408/408/408 838/838/838 843/843/843 +f 843/843/843 421/421/421 408/408/408 +f 837/837/837 847/847/847 843/843/843 +f 843/843/843 838/838/838 837/837/837 +f 423/423/423 425/425/425 848/848/848 +f 848/848/848 849/849/849 423/423/423 +f 427/427/427 850/850/850 851/851/851 +f 851/851/851 430/430/430 427/427/427 +f 431/431/431 433/433/433 852/852/852 +f 852/852/852 853/853/853 431/431/431 +f 854/854/854 845/845/845 847/847/847 +f 847/847/847 855/855/855 854/854/854 +f 856/856/856 844/844/844 845/845/845 +f 845/845/845 854/854/854 856/856/856 +f 857/857/857 840/840/840 844/844/844 +f 844/844/844 856/856/856 857/857/857 diff --git a/convex_decomposition/ConvexDecomposition/readme.txt b/convex_decomposition/ConvexDecomposition/readme.txt new file mode 100644 index 0000000..d687f13 --- /dev/null +++ b/convex_decomposition/ConvexDecomposition/readme.txt @@ -0,0 +1,75 @@ + +ConvexDecomposition library written by John W. Ratcliff + +Usage: Test (options) + +Options: + + -d : How deep to recursively split. Values of 3-7 are reasonable. + -c : Percentage of concavity to keep splitting. 0-20 4324640s reasonable. + -p : Percentage of volume delta to collapse hulls. 0-30 4324544s reasonable. + -v : Maximum number of vertices in the output hull. Default is 32. + -s : Skin Width inflation. Default is 0.0 + +To run the sample provided with defaults: + +DecomposeSample chair.obj + +Will produce 'chair_convex.obj' a Wavefront OBJ file useful for debug visualization. + 'chair.dae' a COLLADA physics representation of the model. + 'chair.xml' an Ageia PhysX NxuStream representation of the model. + + +/*! +** +** Copyright (c) 2007 by John W. Ratcliff mailto:jratcliff@infiniplex.net +** +** Portions of this source has been released with the PhysXViewer application, as well as +** Rocket, CreateDynamics, ODF, and as a number of sample code snippets. +** +** If you find this code useful or you are feeling particularily generous I would +** ask that you please go to http://www.amillionpixels.us and make a donation +** to Troy DeMolay. +** +** DeMolay is a youth group for young men between the ages of 12 and 21. +** It teaches strong moral principles, as well as leadership skills and +** public speaking. The donations page uses the 'pay for pixels' paradigm +** where, in this case, a pixel is only a single penny. Donations can be +** made for as small as $4 or as high as a $100 block. Each person who donates +** will get a link to their own site as well as acknowledgement on the +** donations blog located here http://www.amillionpixels.blogspot.com/ +** +** If you wish to contact me you can use the following methods: +** +** Skype Phone: 636-486-4040 (let it ring a long time while it goes through switches) +** Skype ID: jratcliff63367 +** Yahoo: jratcliff63367 +** AOL: jratcliff1961 +** email: jratcliff@infiniplex.net +** Personal website: http://jratcliffscarab.blogspot.com +** Coding Website: http://codesuppository.blogspot.com +** FundRaising Blog: http://amillionpixels.blogspot.com +** Fundraising site: http://www.amillionpixels.us +** New Temple Site: http://newtemple.blogspot.com +** +** +** The MIT license: +** +** Permission is hereby granted, free of charge, to any person obtaining a copy +** of this software and associated documentation files (the "Software"), to deal +** in the Software without restriction, including without limitation the rights +** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +** copies of the Software, and to permit persons to whom the Software is furnished +** to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in all +** copies or substantial portions of the Software. + +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +** WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +** CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ diff --git a/convex_decomposition/Makefile b/convex_decomposition/Makefile new file mode 100644 index 0000000..076c2eb --- /dev/null +++ b/convex_decomposition/Makefile @@ -0,0 +1,33 @@ +all: installed + +TARBALL = build/ConvexDecomposition.zip +TARBALL_URL = http://pr.willowgarage.com/downloads/ConvexDecomposition.zip +SOURCE_DIR = build/convex_decomposition +INITIAL_DIR = build/ConvexDecomposition +UNPACK_CMD = unzip +TARBALL_PATCH=convex_decomposition.patch + +include $(shell rospack find mk)/download_unpack_build.mk + +ROOT = $(shell rospack find convex_decomposition)/convex_decomposition + +installed: wiped $(SOURCE_DIR)/unpacked + @echo "making it" + @echo "ROOT is: $(ROOT)" + -mkdir -p $(ROOT) + -mkdir -p $(ROOT)/bin + cd $(SOURCE_DIR) ; make $(ROS_PARALLEL_JOBS); make install + touch installed + +wiped: Makefile + make wipe + touch wiped + +clean: + -cd $(SOURCE_DIR) && make clean + rm -rf $(ROOT) installed + +wipe: clean + rm -rf build + +.PHONY : clean download wipe diff --git a/convex_decomposition/convex_decomposition.patch b/convex_decomposition/convex_decomposition.patch new file mode 100644 index 0000000..db8d786 --- /dev/null +++ b/convex_decomposition/convex_decomposition.patch @@ -0,0 +1,429 @@ +Index: ConvexDecomposition/vlookup.cpp +=================================================================== +--- ConvexDecomposition/vlookup.cpp (revision 8299) ++++ ConvexDecomposition/vlookup.cpp (working copy) +@@ -164,7 +164,7 @@ + }; + + +-template class VertexLess ++template class VertexLess + { + public: + typedef std::vector< Type > VertexVector; +@@ -188,7 +188,7 @@ + static VertexVector *mList; + }; + +-template class VertexPool ++template class VertexPool + { + public: + typedef std::set > VertexSet; +@@ -197,7 +197,7 @@ + int GetVertex(const Type& vtx) + { + VertexLess::SetSearch(vtx,&mVtxs); +- VertexSet::iterator found; ++ typename VertexSet::iterator found; + found = mVertSet.find( -1 ); + if ( found != mVertSet.end() ) + { +@@ -254,10 +254,10 @@ + VertexVector mVtxs; // set of vertices. + }; + ++double tmpp[3] = {0,0,0}; ++template<> VertexPosition VertexLess::mFind = tmpp; ++template<> std::vector *VertexLess::mList =0; + +-VertexPosition VertexLess::mFind; +-std::vector *VertexLess::mList=0; +- + enum RDIFF + { + RD_EQUAL, +@@ -288,6 +288,7 @@ + } + + ++template<> + bool VertexLess::operator()(int v1,int v2) const + { + bool ret = false; +Index: ConvexDecomposition/ConvexDecomposition.cpp +=================================================================== +--- ConvexDecomposition/ConvexDecomposition.cpp (revision 8299) ++++ ConvexDecomposition/ConvexDecomposition.cpp (working copy) +@@ -66,7 +66,7 @@ + #include "cd_vector.h" + #include "cd_hull.h" + #include "bestfit.h" +-#include "PlaneTri.h" ++#include "planetri.h" + #include "vlookup.h" + #include "splitplane.h" + #include "meshvolume.h" +@@ -760,3 +760,3 @@ +- assert( fcount >= 3 && fcount <= 4); +- assert( bcount >= 3 && bcount <= 4); +- ++ if ( fcount >= 3 && fcount <= 4) ++ if ( bcount >= 3 && bcount <= 4) ++ { +@@ -777,1 +777,1 @@ +- ++ } +Index: ConvexDecomposition/splitplane.cpp +=================================================================== +--- ConvexDecomposition/splitplane.cpp (revision 8299) ++++ ConvexDecomposition/splitplane.cpp (working copy) +@@ -67,7 +67,7 @@ + #include "cd_hull.h" + #include "cd_wavefront.h" + #include "bestfit.h" +-#include "PlaneTri.h" ++#include "planetri.h" + #include "vlookup.h" + #include "meshvolume.h" + #include "bestfitobb.h" +Index: ConvexDecomposition/cd_vector.h +=================================================================== +--- ConvexDecomposition/cd_vector.h (revision 8299) ++++ ConvexDecomposition/cd_vector.h (working copy) +@@ -309,12 +309,12 @@ + + Type FastMagnitude(void) const + { +- return Type(fast_sqrt(x * x + y * y + z * z)); ++ return Type(sqrt(x * x + y * y + z * z)); + }; + + Type FasterMagnitude(void) const + { +- return Type(faster_sqrt(x * x + y * y + z * z)); ++ return Type(sqrt(x * x + y * y + z * z)); + }; + + void Lerp(const Vector3d& from,const Vector3d& to,double slerp) +@@ -436,13 +436,13 @@ + + Type FastLength(void) const // length of vector. + { +- return Type(fast_sqrt( x*x + y*y + z*z )); ++ return Type(sqrt( x*x + y*y + z*z )); + }; + + + Type FasterLength(void) const // length of vector. + { +- return Type(faster_sqrt( x*x + y*y + z*z )); ++ return Type(sqrt( x*x + y*y + z*z )); + }; + + Type Length2(void) const // squared distance, prior to square root. +@@ -518,7 +518,7 @@ + + inline double FastNormalize(void) // normalize to a unit vector, returns distance. + { +- double d = fast_sqrt( static_cast< double >( x*x + y*y + z*z ) ); ++ double d = sqrt( static_cast< double >( x*x + y*y + z*z ) ); + if ( d > 0 ) + { + double r = 1.0f / d; +@@ -535,7 +535,7 @@ + + inline double FasterNormalize(void) // normalize to a unit vector, returns distance. + { +- double d = faster_sqrt( static_cast< double >( x*x + y*y + z*z ) ); ++ double d = sqrt( static_cast< double >( x*x + y*y + z*z ) ); + if ( d > 0 ) + { + double r = 1.0f / d; +@@ -1029,7 +1029,8 @@ + + void Zero(void) + { +- x = y = z = 0; ++ x = 0; ++ y = 0; + }; + + Vector2d negative(void) const +@@ -1047,12 +1048,12 @@ + + Type fastmagnitude(void) const + { +- return (Type) fast_sqrt(x * x + y * y ); ++ return (Type) sqrt(x * x + y * y ); + } + + Type fastermagnitude(void) const + { +- return (Type) faster_sqrt( x * x + y * y ); ++ return (Type) sqrt( x * x + y * y ); + } + + void Reflection(Vector2d &a,Vector2d &b); // compute reflection vector. +@@ -1064,12 +1065,12 @@ + + Type FastLength(void) const // length of vector. + { +- return Type(fast_sqrt( x*x + y*y )); ++ return Type(sqrt( x*x + y*y )); + }; + + Type FasterLength(void) const // length of vector. + { +- return Type(faster_sqrt( x*x + y*y )); ++ return Type(sqrt( x*x + y*y )); + }; + + Type Length2(void) // squared distance, prior to square root. +@@ -1090,7 +1091,7 @@ + Type dx = a.x - x; + Type dy = a.y - y; + Type d = dx*dx+dy*dy; +- return fast_sqrt(d); ++ return sqrt(d); + }; + + Type FasterDistance(const Vector2d &a) const // distance between two points. +@@ -1098,7 +1099,7 @@ + Type dx = a.x - x; + Type dy = a.y - y; + Type d = dx*dx+dy*dy; +- return faster_sqrt(d); ++ return sqrt(d); + }; + + Type Distance2(Vector2d &a) // squared distance. +Index: ConvexDecomposition/float_math.cpp +=================================================================== +--- ConvexDecomposition/float_math.cpp (revision 8299) ++++ ConvexDecomposition/float_math.cpp (working copy) +@@ -212,8 +212,14 @@ + matrix[1*4+2] = 2 * ( yz + wx ); + matrix[2*4+2] = 1 - 2 * ( xx + yy ); + +- matrix[3*4+0] =(double) matrix[3*4+1] = matrix[3*4+2] = 0.0f; +- matrix[0*4+3] =(double) matrix[1*4+3] = matrix[2*4+3] = 0.0f; ++ matrix[3*4+0] = 0.0f; ++ matrix[3*4+1] = 0.0f; ++ matrix[3*4+2] = 0.0f; ++ ++ matrix[0*4+3] = 0.0f; ++ matrix[1*4+3] = 0.0f; ++ matrix[2*4+3] = 0.0f; ++ + matrix[3*4+3] =(double) 1.0f; + + } +Index: ConvexDecomposition/cd_wavefront.cpp +=================================================================== +--- ConvexDecomposition/cd_wavefront.cpp (revision 8299) ++++ ConvexDecomposition/cd_wavefront.cpp (working copy) +@@ -672,7 +672,7 @@ + const char *foo = argv[0]; + if ( *foo != '#' ) + { +- if ( stricmp(argv[0],"v") == 0 && argc == 4 ) ++ if ( strcmp(argv[0],"v") == 0 && argc == 4 ) + { + double vx = (double) atof( argv[1] ); + double vy = (double) atof( argv[2] ); +@@ -681,14 +681,14 @@ + mVerts.push_back(vy); + mVerts.push_back(vz); + } +- else if ( stricmp(argv[0],"vt") == 0 && argc == 3 ) ++ else if ( strcmp(argv[0],"vt") == 0 && argc == 3 ) + { + double tx = (double) atof( argv[1] ); + double ty = (double) atof( argv[2] ); + mTexels.push_back(tx); + mTexels.push_back(ty); + } +- else if ( stricmp(argv[0],"vn") == 0 && argc == 4 ) ++ else if ( strcmp(argv[0],"vn") == 0 && argc == 4 ) + { + double normalx = (double) atof(argv[1]); + double normaly = (double) atof(argv[2]); +@@ -697,7 +697,7 @@ + mNormals.push_back(normaly); + mNormals.push_back(normalz); + } +- else if ( stricmp(argv[0],"f") == 0 && argc >= 4 ) ++ else if ( strcmp(argv[0],"f") == 0 && argc >= 4 ) + { + GeometryVertex v[32]; + +Index: Makefile +=================================================================== +--- Makefile (revision 0) ++++ Makefile (revision 8581) +@@ -0,0 +1,93 @@ ++ ++ ++OBJS = DecomposeSample.o \ ++ ConvexDecomposition/bestfit.o ConvexDecomposition/float_math.o \ ++ ConvexDecomposition/bestfitobb.o ConvexDecomposition/meshvolume.o \ ++ ConvexDecomposition/cd_hull.o ConvexDecomposition/planetri.o \ ++ ConvexDecomposition/cd_wavefront.o ConvexDecomposition/raytri.o \ ++ ConvexDecomposition/concavity.o ConvexDecomposition/splitplane.o \ ++ ConvexDecomposition/ConvexDecomposition.o ConvexDecomposition/triangulate.o \ ++ ConvexDecomposition/fitsphere.o ConvexDecomposition/vlookup.o ++ ++HEADERS = \ ++ ConvexDecomposition/bestfit.h \ ++ ConvexDecomposition/bestfitobb.h \ ++ ConvexDecomposition/cd_hull.h \ ++ ConvexDecomposition/cd_vector.h \ ++ ConvexDecomposition/cd_wavefront.h \ ++ ConvexDecomposition/concavity.h \ ++ ConvexDecomposition/ConvexDecomposition.h \ ++ ConvexDecomposition/fitsphere.h \ ++ ConvexDecomposition/float_math.h \ ++ ConvexDecomposition/meshvolume.h \ ++ ConvexDecomposition/planetri.h \ ++ ConvexDecomposition/raytri.h \ ++ ConvexDecomposition/splitplane.h \ ++ ConvexDecomposition/triangulate.h \ ++ ConvexDecomposition/vlookup.h ++ ++CC = g++ ++ ++DEBUG = -ggdb ++ ++CFLAGS = -IConvexDecomposition -Wall -c $(DEBUG) ++ ++LFLAGS = $(DEBUG) ++ ++convex_decomposition: $(OBJS) ++ $(CC) $(LFLAGS) $(OBJS) -o convex_decomposition ++ ++DecomposeSample.o: DecomposeSample.cpp ++ $(CC) $(CFLAGS) DecomposeSample.cpp -o $@ ++ ++ConvexDecomposition/bestfit.o: ConvexDecomposition/bestfit.cpp ++ $(CC) $(CFLAGS) ConvexDecomposition/bestfit.cpp -o $@ ++ ++ConvexDecomposition/bestfitobb.o: ConvexDecomposition/bestfitobb.cpp ++ $(CC) $(CFLAGS) ConvexDecomposition/bestfitobb.cpp -o $@ ++ ++ConvexDecomposition/cd_hull.o: ConvexDecomposition/cd_hull.cpp ++ $(CC) $(CFLAGS) ConvexDecomposition/cd_hull.cpp -o $@ ++ ++ConvexDecomposition/cd_wavefront.o: ConvexDecomposition/cd_wavefront.cpp ++ $(CC) $(CFLAGS) ConvexDecomposition/cd_wavefront.cpp -o $@ ++ ++ConvexDecomposition/concavity.o: ConvexDecomposition/concavity.cpp ++ $(CC) $(CFLAGS) ConvexDecomposition/concavity.cpp -o $@ ++ ++ConvexDecomposition/ConvexDecomposition.o: ConvexDecomposition/ConvexDecomposition.cpp ++ $(CC) $(CFLAGS) ConvexDecomposition/ConvexDecomposition.cpp -o $@ ++ ++ConvexDecomposition/fitsphere.o: ConvexDecomposition/fitsphere.cpp ++ $(CC) $(CFLAGS) ConvexDecomposition/fitsphere.cpp -o $@ ++ ++ConvexDecomposition/float_math.o: ConvexDecomposition/float_math.cpp ++ $(CC) $(CFLAGS) ConvexDecomposition/float_math.cpp -o $@ ++ ++ConvexDecomposition/meshvolume.o: ConvexDecomposition/meshvolume.cpp ++ $(CC) $(CFLAGS) ConvexDecomposition/meshvolume.cpp -o $@ ++ ++ConvexDecomposition/planetri.o: ConvexDecomposition/planetri.cpp ++ $(CC) $(CFLAGS) ConvexDecomposition/planetri.cpp -o $@ ++ ++ConvexDecomposition/raytri.o: ConvexDecomposition/raytri.cpp ++ $(CC) $(CFLAGS) ConvexDecomposition/raytri.cpp -o $@ ++ ++ConvexDecomposition/splitplane.o: ConvexDecomposition/splitplane.cpp ++ $(CC) $(CFLAGS) ConvexDecomposition/splitplane.cpp -o $@ ++ ++ConvexDecomposition/triangulate.o: ConvexDecomposition/triangulate.cpp ++ $(CC) $(CFLAGS) ConvexDecomposition/triangulate.cpp -o $@ ++ ++ConvexDecomposition/vlookup.o: ConvexDecomposition/vlookup.cpp ConvexDecomposition/vlookup.cpp ++ $(CC) $(CFLAGS) ConvexDecomposition/vlookup.cpp -o $@ ++ ++install: ++ cp convex_decomposition ../../convex_decomposition/bin/ ++ ++clean: ++ \rm *.o */*.o convex_decomposition ++ ++tar: ++ tar cfv ConvexDecomposition.tar DecomposeSample.cpp convex_decomposition Makefile \ ++ ConvexDecomposition +Index: DecomposeSample.cpp +=================================================================== +--- DecomposeSample.cpp (revision 8299) ++++ DecomposeSample.cpp (working copy) +@@ -6,7 +6,7 @@ + + #include + +-#include "./ConvexDecomposition/convexdecomposition.h" ++#include "./ConvexDecomposition/ConvexDecomposition.h" + #include "./ConvexDecomposition/cd_wavefront.h" + + using namespace ConvexDecomposition; +@@ -227,7 +227,7 @@ + + if ( fph ) + { +- printf("Saving convex decomposition of %d hulls to COLLADA file '%s'\r\n", mHulls.size(), scratch ); ++ printf("Saving convex decomposition of %d hulls to COLLADA file '%s'\r\n", (int)mHulls.size(), scratch ); + + fprintf(fph,"\r\n"); + fprintf(fph,"\r\n"); +@@ -537,7 +537,7 @@ + }; + + +-void main(int argc,const char **argv) ++int main(int argc,const char **argv) + { + if ( argc < 2 ) + { +Index: DecomposeSample.cpp +=================================================================== +--- DecomposeSample.cpp (revision 8299) ++++ DecomposeSample.cpp (working copy) +@@ -67,3 +67,3 @@ + strcpy(mBaseName,fname); +- char *dot = strstr(mBaseName,"."); ++ char *dot = strstr(mBaseName,".obj"); + if ( dot ) *dot = 0; +Index: ConvexDecomposition/cd_wavefront.cpp +=================================================================== +--- ConvexDecomposition/cd_wavefront.cpp (revision 8299) ++++ ConvexDecomposition/cd_wavefront.cpp (working copy) +@@ -573,6 +573,7 @@ + FloatVector mNormals; + + GeometryInterface *mCallback; ++ friend class WavefrontObj; + }; + + +@@ -839,7 +840,17 @@ + memcpy(mIndices, &indices[0], sizeof(int)*mTriCount*3); + ret = mTriCount; + } +- ++ else if( obj.mVerts.size() > 0 ) { ++ // take consecutive vertices ++ mVertexCount = obj.mVerts.size()/3; ++ mVertices = new double[mVertexCount*3]; ++ memcpy( mVertices, &obj.mVerts[0], sizeof(double)*mVertexCount*3 ); ++ mTriCount = mVertexCount/3; ++ mIndices = new int[mTriCount*3*sizeof(int)]; ++ for(int i = 0; i < mVertexCount; ++i) ++ mIndices[i] = i; ++ ret = mTriCount; ++ } + + return ret; + } diff --git a/convex_decomposition/manifest.xml b/convex_decomposition/manifest.xml new file mode 100644 index 0000000..b061753 --- /dev/null +++ b/convex_decomposition/manifest.xml @@ -0,0 +1,14 @@ + + + +Convex Mesh Generation Library + + +John Ratcliff +MIT + +http://www.amillionpixels.us/ConvexDecomposition.zip + + + + diff --git a/ivcon/CMakeLists.txt b/ivcon/CMakeLists.txt new file mode 100644 index 0000000..8169c5a --- /dev/null +++ b/ivcon/CMakeLists.txt @@ -0,0 +1,9 @@ +cmake_minimum_required(VERSION 2.4.6) +include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake) +rospack(ivcon) + +#uncomment for profiling +set(ROS_LINK_FLAGS "-lm" ${ROS_LINK_FLAGS}) + +rospack_add_executable(bin/ivcon src/ivcon.c) + diff --git a/ivcon/Makefile b/ivcon/Makefile new file mode 100644 index 0000000..bbd3fc6 --- /dev/null +++ b/ivcon/Makefile @@ -0,0 +1 @@ +include $(shell rospack find mk)/cmake.mk diff --git a/ivcon/manifest.xml b/ivcon/manifest.xml new file mode 100644 index 0000000..2f770e0 --- /dev/null +++ b/ivcon/manifest.xml @@ -0,0 +1,14 @@ + + + +Mesh Conversion Utility + + +John Burkardt +GPL + +https://sourceforge.net/projects/ivcon/ + + + + diff --git a/ivcon/src/ivcon.c b/ivcon/src/ivcon.c new file mode 100644 index 0000000..5539860 --- /dev/null +++ b/ivcon/src/ivcon.c @@ -0,0 +1,16707 @@ +/* ivcon.c 24 May 2001 */ + +/* + Purpose: + + IVCON converts various 3D graphics files. + + Acknowledgements: + + Coding, comments, and advice were supplied by a number of collaborators. + + John F Flanagan made some corrections to the 3D Studio Max routines. + + Zik Saleeba (zik@zikzak.net) enhanced the DXF routines, and added the + Golgotha GMOD routines. + + Thanks to Susan M. Fisher, University of North Carolina, + Department of Computer Science, for pointing out a coding error + in FACE_NULL_DELETE that was overwriting all the data! + + Modified: + + 04 July 2000 + + Author: + + John Burkardt +*/ + +#include +#include +#include +#include +#include + +#define FALSE 0 +#define TRUE 1 + +#define ERROR 1 +#define G1_SECTION_MODEL_QUADS 18 +#define G1_SECTION_MODEL_TEXTURE_NAMES 19 +#define G1_SECTION_MODEL_VERT_ANIMATION 20 +#define GMOD_MAX_SECTIONS 32 +#define GMOD_UNUSED_VERTEX 65535 +#define PI 3.141592653589793238462643 +#define SUCCESS 0 + +#define DEG_TO_RAD ( PI / 180.0 ) +#define RAD_TO_DEG ( 180.0 / PI ) + +/******************************************************************************/ + +/* GLOBAL DATA */ + +/******************************************************************************/ + +/* + BACKGROUND_RGB[3], the background color. + + BYTE_SWAP, byte swapping option. + + COR3[3][COR3_MAX], the coordinates of nodes. + + COR3_MATERIAL[COR3_MAX], the index of the material of each node. + + COR3_MAX, the maximum number of points. + + COR3_NORMAL[3][COR3_MAX], normal vectors associated with nodes. + + COR3_NUM, the number of points. + + COR3_RGB[3][COR3_MAX], RGB colors associated with nodes. + + COR3_TEX_UV[2][COR3_MAX], texture coordinates associated with nodes. + + FACE[ORDER_MAX][FACE_MAX] contains the index of the I-th node making up face J. + + FACE_AREA(FACE_MAX), the area of each face. + + FACE_MATERIAL[FACE_MAX]; the material of each face. + + FACE_MAX, the maximum number of faces. + + FACE_NORMAL[3][FACE_MAX], the face normal vectors. + + FACE_NUM, the number of faces. + + FACE_ORDER[FACE_MAX], the number of vertices per face. + + FACE_TEX_UV[2][FACE_MAX], texture coordinates associated with faces. + + LINE_DEX[LINES_MAX], node indices, denoting polylines, each terminated by -1. + + LINE_MATERIAL[LINES_MAX], index into RGBCOLOR for line color. + + LINES_MAX, the maximum number of line definition items. + + LINE_NUM, the number of line definition items. + + LINE_PRUNE, pruning option ( 0 = no pruning, nonzero = pruning). + + MATERIAL_MAX, the maximum number of materials. + + MATERIAL_NUM, the number of materials. + + ORDER_MAX, the maximum number of vertices per face. + + TEXTURE_MAX, the maximum number of textures. + + TEXTURE_NAME[TEXTURE_MAX][LINE_MAX_LEN], ... + + TEXTURE_NUM, the number of textures. + + TRANSFORM_MATRIX[4][4], the current transformation matrix. + + VERTEX_MATERIAL[ORDER_MAX][FACE_MAX]; the material of vertices of faces. + + VERTEX_NORMAL[3][ORDER_MAX][FACE_MAX], normals at vertices of faces. + + VERTEX_RGB[3][ORDER_MAX][FACE_MAX], colors of vertices of faces. + + VERTEX_TEX_UV[2][ORDER_MAX][FACE_MAX], texture coordinates of vertices of faces. +*/ + +#define COLOR_MAX 1000 +#define COR3_MAX 200000 +#define FACE_MAX 200000 +#define LINE_MAX_LEN 256 +#define LEVEL_MAX 10 +#define LINES_MAX 100000 +#define MATERIAL_MAX 100 +#define ORDER_MAX 10 +#define TEXTURE_MAX 100 + +char anim_name[LINE_MAX_LEN]; +float background_rgb[3]; +int bad_num; +int byte_swap; +int bytes_num; +int color_num; +int comment_num; + +float cor3[3][COR3_MAX]; +int cor3_material[COR3_MAX]; +float cor3_normal[3][COR3_MAX]; +int cor3_num; +float cor3_tex_uv[3][COR3_MAX]; + +int debug; + +int dup_num; + +int face[ORDER_MAX][FACE_MAX]; +float face_area[FACE_MAX]; +int face_flags[FACE_MAX]; +int face_material[FACE_MAX]; +float face_normal[3][FACE_MAX]; +int face_num; +int face_object[FACE_MAX]; +int face_order[FACE_MAX]; +int face_smooth[FACE_MAX]; +float face_tex_uv[2][FACE_MAX]; + +char filein_name[1024]; +char fileout_name[1024]; + +int group_num; + +int i; +char input[LINE_MAX_LEN]; +int k; +char level_name[LEVEL_MAX][LINE_MAX_LEN]; + +int line_dex[LINES_MAX]; +int line_material[LINES_MAX]; +int line_num; +int line_prune; + +int list[COR3_MAX]; + +char material_binding[80]; +char material_name[MATERIAL_MAX][LINE_MAX_LEN]; +int material_num; +float material_rgba[4][MATERIAL_MAX]; + +char mat_name[81]; +int max_order2; + +char normal_binding[80]; +float normal_temp[3][ORDER_MAX*FACE_MAX]; + +char object_name[81]; +int object_num; + +float origin[3]; +float pivot[3]; +float rgbcolor[3][COLOR_MAX]; +char temp_name[81]; + +int text_num; + +char texture_binding[80]; +char texture_name[TEXTURE_MAX][LINE_MAX_LEN]; +int texture_num; +float texture_temp[2][ORDER_MAX*FACE_MAX]; + +float transform_matrix[4][4]; + +int vertex_material[ORDER_MAX][FACE_MAX]; +float vertex_normal[3][ORDER_MAX][FACE_MAX]; +float vertex_rgb[3][ORDER_MAX][FACE_MAX]; +float vertex_tex_uv[2][ORDER_MAX][FACE_MAX]; + +/******************************************************************************/ + +/* FUNCTION PROTOTYPES */ + +/******************************************************************************/ + +int main ( int argc, char **argv ); +int ase_read ( FILE *filein ); +int ase_write ( FILE *fileout ); +int byu_read ( FILE *filein ); +int byu_write ( FILE *fileout ); +int char_index_last ( char* string, char c ); +int char_pad ( int *char_index, int *null_index, char *string, + int STRING_MAX ); +char char_read ( FILE *filein ); +int char_write ( FILE *fileout, char c ); +int command_line ( char **argv ); +void cor3_normal_set ( void ); +void cor3_range ( void ); +void data_check ( void ); +void data_init ( void ); +int data_read ( void ); +void data_report ( void ); +int data_write ( void ); +int dxf_read ( FILE *filein ); +int dxf_write ( FILE *fileout ); +void edge_null_delete ( void ); +void face_area_set ( void ); +void face_normal_ave ( void ); +void face_null_delete ( void ); +int face_print ( int iface ); +void face_reverse_order ( void ); +int face_subset ( void ); +void face_to_line ( void ); +void face_to_vertex_material ( void ); +char *file_ext ( char *file_name ); +float float_read ( FILE *filein ); +float float_reverse_bytes ( float x ); +int float_write ( FILE *fileout, float float_val ); +int gmod_arch_check ( void ); +int gmod_read ( FILE *filein ); +float gmod_read_float ( FILE *filein ); +unsigned short gmod_read_w16 ( FILE *filein ); +unsigned long gmod_read_w32 ( FILE *filein ); +int gmod_write ( FILE *fileout ); +void gmod_write_float ( float Val, FILE *fileout ); +void gmod_write_w16 ( unsigned short Val, FILE *fileout ); +void gmod_write_w32 ( unsigned long Val, FILE *fileout ); +void hello ( void ); +void help ( void ); +int hrc_read ( FILE *filein ); +int hrc_write ( FILE *fileout ); +void init_program_data ( void ); +int interact ( void ); +int iv_read ( FILE *filein ); +int iv_write ( FILE *fileout ); +int ivec_max ( int n, int *a ); +int leqi ( char* string1, char* string2 ); +long int long_int_read ( FILE *filein ); +int long_int_write ( FILE *fileout, long int int_val ); +void news ( void ); +void node_to_vertex_material ( void ); +int obj_read ( FILE *filein ); +int obj_write ( FILE *fileout ); +int pov_write ( FILE *fileout ); +int rcol_find ( float a[][COR3_MAX], int m, int n, float r[] ); +float rgb_to_hue ( float r, float g, float b ); +short int short_int_read ( FILE *filein ); +int short_int_write ( FILE *fileout, short int int_val ); +int smf_read ( FILE *filein ); +int smf_write ( FILE *fileout ); +int stla_read ( FILE *filein ); +int stla_write ( FILE *fileout ); +int stlb_read ( FILE *filein ); +int stlb_write ( FILE *fileout ); +void tds_pre_process ( void ); +int tds_read ( FILE *filein ); +unsigned long int tds_read_ambient_section ( FILE *filein ); +unsigned long int tds_read_background_section ( FILE *filein ); +unsigned long int tds_read_boolean ( unsigned char *boolean, FILE *filein ); +unsigned long int tds_read_camera_section ( FILE *filein ); +unsigned long int tds_read_edit_section ( FILE *filein, int *views_read ); +unsigned long int tds_read_keyframe_section ( FILE *filein, int *views_read ); +unsigned long int tds_read_keyframe_objdes_section ( FILE *filein ); +unsigned long int tds_read_light_section ( FILE *filein ); +unsigned long int tds_read_u_long_int ( FILE *filein ); +int tds_read_long_name ( FILE *filein ); +unsigned long int tds_read_matdef_section ( FILE *filein ); +unsigned long int tds_read_material_section ( FILE *filein ); +int tds_read_name ( FILE *filein ); +unsigned long int tds_read_obj_section ( FILE *filein ); +unsigned long int tds_read_object_section ( FILE *filein ); +unsigned long int tds_read_tex_verts_section ( FILE *filein ); +unsigned long int tds_read_texmap_section ( FILE *filein ); +unsigned short int tds_read_u_short_int ( FILE *filein ); +unsigned long int tds_read_spot_section ( FILE *filein ); +unsigned long int tds_read_unknown_section ( FILE *filein ); +unsigned long int tds_read_view_section ( FILE *filein, int *views_read ); +unsigned long int tds_read_vp_section ( FILE *filein, int *views_read ); +int tds_write ( FILE *fileout ); +int tds_write_string ( FILE *fileout, char *string ); +int tds_write_u_short_int ( FILE *fileout, + unsigned short int int_val ); +int tec_write ( FILE *fileout ); +void tmat_init ( float a[4][4] ); +void tmat_mxm ( float a[4][4], float b[4][4], float c[4][4] ); +void tmat_mxp ( float a[4][4], float x[4], float y[4] ); +void tmat_mxp2 ( float a[4][4], float x[][3], float y[][3], int n ); +void tmat_mxv ( float a[4][4], float x[4], float y[4] ); +void tmat_rot_axis ( float a[4][4], float b[4][4], float angle, + char axis ); +void tmat_rot_vector ( float a[4][4], float b[4][4], float angle, + float v1, float v2, float v3 ); +void tmat_scale ( float a[4][4], float b[4][4], float sx, float sy, + float sz ); +void tmat_shear ( float a[4][4], float b[4][4], char *axis, + float s ); +void tmat_trans ( float a[4][4], float b[4][4], float x, float y, + float z ); +int tria_read ( FILE *filein ); +int tria_write ( FILE *fileout ); +int trib_read ( FILE *filein ); +int trib_write ( FILE *fileout ); +int txt_write ( FILE *fileout ); +int ucd_write ( FILE *fileout ); +void vertex_normal_set ( void ); +void vertex_to_face_material ( void ); +void vertex_to_node_material ( void ); +int vla_read ( FILE *filein ); +int vla_write ( FILE *fileout ); +int wrl_write ( FILE *filout ); +int xgl_write ( FILE *fileout ); + +/******************************************************************************/ + +int main ( int argc, char **argv ) + +/******************************************************************************/ + +/* + Purpose: + + MAIN is the main program for converting graphics files. + + Modified: + + 26 May 1999 + + Author: + + John Burkardt +*/ +{ + int result; +/* + Initialize the program data. +*/ + init_program_data ( ); +/* + If there are at least two command line arguments, call COMMAND_LINE. + Otherwise call INTERACT and get information from the user. +*/ + if ( argc >= 2 ) { + result = command_line ( argv ); + } + else { + result = interact ( ); + } + + return result; +} +/******************************************************************************/ + +int ase_read ( FILE *filein ) + +/******************************************************************************/ + +/* + Purpose: + + ASE_READ reads an AutoCAD ASE file. + + Modified: + + 22 May 1999 + + Author: + + John Burkardt +*/ +{ + float bval; + int count; + float gval; + int i; + int iface; + int ivert; + int iword; + int level; + char *next; + int nlbrack; + int nrbrack; + int cor3_num_old; + int face_num_old; + float rval; + float temp; + int width; + char word[LINE_MAX_LEN]; + char word1[LINE_MAX_LEN]; + char word2[LINE_MAX_LEN]; + char wordm1[LINE_MAX_LEN]; + float x; + float y; + float z; + + level = 0; + strcpy ( level_name[0], "Top" ); + cor3_num_old = cor3_num; + face_num_old = face_num; + nlbrack = 0; + nrbrack = 0; + + strcpy ( word, " " ); + strcpy ( wordm1, " " ); +/* + Read a line of text from the file. +*/ + + for ( ;; ) { + + if ( fgets ( input, LINE_MAX_LEN, filein ) == NULL ) { + break; + } + + text_num = text_num + 1; + next = input; + iword = 0; +/* + Read the next word from the line. +*/ + for ( ;; ) { + + strcpy ( wordm1, word ); + strcpy ( word, " " ); + + count = sscanf ( next, "%s%n", word, &width ); + next = next + width; + + if ( count <= 0 ) { + break; + } + + iword = iword + 1; + + if ( iword == 1 ) { + strcpy ( word1, word ); + } +/* + In case the new word is a bracket, update the bracket count. +*/ + if ( strcmp ( word, "{" ) == 0 ) { + + nlbrack = nlbrack + 1; + level = nlbrack - nrbrack; + strcpy ( level_name[level], wordm1 ); + } + else if ( strcmp ( word, "}" ) == 0 ) { + + nrbrack = nrbrack + 1; + + if ( nlbrack < nrbrack ) { + + printf ( "\n" ); + printf ( "ASE_READ - Fatal error!\n" ); + printf ( " Extraneous right bracket on line %d\n", text_num ); + printf ( " Currently processing field:\n" ); + printf ( "%s\n", level_name[level] ); + return ERROR; + } + + } +/* + *3DSMAX_ASCIIEXPORT 200 +*/ + if ( strcmp ( word1, "*3DSMAX_ASCIIEXPORT" ) == 0 ) { + break; + } +/* + *COMMENT +*/ + else if ( strcmp ( word1, "*COMMENT" ) == 0 ) { + break; + } +/* + *GEOMOBJECT +*/ + else if ( strcmp ( level_name[level], "*GEOMOBJECT" ) == 0 ) { + + if ( strcmp ( word, "{" ) == 0 ) { + continue; + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + continue; + } +/* + Why don't you read and save this name? +*/ + else if ( strcmp ( word, "*NODE_NAME" ) == 0 ) { + break; + } + else if ( strcmp ( word, "*NODE_TM" ) == 0 ) { + continue; + } + else if ( strcmp ( word, "*MESH" ) == 0 ) { + continue; + } + else if ( strcmp ( word, "*PROP_CASTSHADOW" ) == 0 ) { + break; + } + else if ( strcmp ( word, "*PROP_MOTIONBLUR" ) == 0 ) { + break; + } + else if ( strcmp ( word, "*PROP_RECVSHADOW" ) == 0 ) { + break; + } + else { + bad_num = bad_num + 1; + printf ( "Bad data in GEOMOBJECT, line %d\n", text_num ); + break; + } + } +/* + *MESH +*/ + else if ( strcmp ( level_name[level], "*MESH" ) == 0 ) { + + if ( strcmp ( word, "{" ) == 0 ) { + continue; + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + continue; + } + else if ( strcmp ( word, "*MESH_CFACELIST" ) == 0 ) { + continue; + } + else if ( strcmp ( word, "*MESH_CVERTLIST" ) == 0 ) { + continue; + } + else if ( strcmp ( word, "*MESH_FACE_LIST" ) == 0 ) { + continue; + } + else if ( strcmp ( word, "*MESH_NORMALS" ) == 0 ) { + continue; + } + else if ( strcmp ( word, "*MESH_NUMCVERTEX" ) == 0 ) { + break; + } + else if ( strcmp ( word, "*MESH_NUMCVFACES" ) == 0 ) { + break; + } + else if ( strcmp ( word, "*MESH_NUMFACES" ) == 0 ) { + break; + } + else if ( strcmp ( word, "*MESH_NUMTVERTEX" ) == 0 ) { + break; + } + else if ( strcmp ( word, "*MESH_NUMTVFACES" ) == 0 ) { + break; + } + else if ( strcmp ( word, "*MESH_NUMVERTEX" ) == 0 ) { + break; + } + else if ( strcmp ( word, "*MESH_TFACELIST" ) == 0 ) { + continue; + } + else if ( strcmp ( word, "*MESH_TVERTLIST" ) == 0 ) { + continue; + } + else if ( strcmp ( word, "*MESH_VERTEX_LIST" ) == 0 ) { + continue; + } + else if ( strcmp ( word, "*TIMEVALUE" ) == 0 ) { + break; + } + else { + bad_num = bad_num + 1; + printf ( "Bad data in MESH, line %d\n", text_num ); + break; + } + } +/* + *MESH_CFACELIST +*/ + else if ( strcmp ( level_name[level], "*MESH_CFACELIST" ) == 0 ) { + + if ( strcmp ( word, "{" ) == 0 ) { + continue; + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + continue; + } + else if ( strcmp ( word, "*MESH_CFACE" ) == 0 ) { + break; + } + else { + bad_num = bad_num + 1; + printf ( "Bad data in MESH_CFACE, line %d\n", text_num ); + break; + } + } +/* + *MESH_CVERTLIST + + Mesh vertex indices must be incremented by COR3_NUM_OLD before being stored + in the internal array. +*/ + else if ( strcmp ( level_name[level], "*MESH_CVERTLIST" ) == 0 ) { + + if ( strcmp ( word, "{" ) == 0 ) { + continue; + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + continue; + } + else if ( strcmp ( word, "*MESH_VERTCOL" ) == 0 ) { + + count = sscanf ( next, "%d%n", &i, &width ); + next = next + width; + + i = i + cor3_num_old; + + count = sscanf ( next, "%f%n", &rval, &width ); + next = next + width; + + count = sscanf ( next, "%f%n", &gval, &width ); + next = next + width; + + count = sscanf ( next, "%f%n", &bval, &width ); + next = next + width; + + if ( material_num < MATERIAL_MAX ) { + material_rgba[0][material_num] = rval; + material_rgba[1][material_num] = gval; + material_rgba[2][material_num] = bval; + material_rgba[3][material_num] = 1.0; + } + + material_num = material_num + 1; + cor3_material[i] = material_num; + } + else { + bad_num = bad_num + 1; + printf ( "\n" ); + printf ( "ASE_READ - Warning!\n" ); + printf ( " Bad data in MESH_CVERTLIST, line %d\n", text_num ); + break; + } + + } +/* + *MESH_FACE_LIST + This coding assumes a face is always triangular or quadrilateral. +*/ + else if ( strcmp ( level_name[level], "*MESH_FACE_LIST" ) == 0 ) { + + if ( strcmp ( word, "{" ) == 0 ) { + continue; + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + continue; + } + else if ( strcmp ( word, "*MESH_FACE" ) == 0 ) { + + if ( face_num < FACE_MAX ) { + + face_material[face_num] = 0; + face_order[face_num] = 0; + + count = sscanf ( next, "%d%n", &i, &width ); + next = next + width; + + count = sscanf ( next, "%s%n", word2, &width ); + next = next + width; + count = sscanf ( next, "%s%n", word2, &width ); + next = next + width; + + count = sscanf ( next, "%d%n", &i, &width ); + next = next + width; + face[0][face_num] = i + cor3_num_old; + face_order[face_num] = face_order[face_num] + 1; + + count = sscanf ( next, "%s%n", word2, &width ); + next = next + width; + + count = sscanf ( next, "%d%n", &i, &width ); + next = next + width; + face[1][face_num] = i + cor3_num_old; + face_order[face_num] = face_order[face_num] + 1; + + count = sscanf ( next, "%s%n", word2, &width ); + next = next + width; + + count = sscanf ( next, "%d%n", &i, &width ); + next = next + width; + face[2][face_num] = i + cor3_num_old; + face_order[face_num] = face_order[face_num] + 1; + + count = sscanf ( next, "%s%n", word2, &width ); + next = next + width; + + if ( strcmp ( word2, "D:" ) == 0 ) { + count = sscanf ( next, "%d%n", &i, &width ); + next = next + width; + face[3][face_num] = i + cor3_num_old; + face_order[face_num] = face_order[face_num] + 1; + } + } + + face_num = face_num + 1; + + break; + + } + else { + bad_num = bad_num + 1; + printf ( "Bad data in MESH_FACE_LIST, line %d\n", text_num ); + break; + } + } +/* + *MESH_NORMALS +*/ + else if ( strcmp ( level_name[level], "*MESH_NORMALS" ) == 0 ) { + + if ( strcmp ( word, "{" ) == 0 ) { + continue; + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + continue; + } + else if ( strcmp ( word, "*MESH_FACENORMAL" ) == 0 ) { + + count = sscanf ( next, "%d%n", &iface, &width ); + next = next + width; + + count = sscanf ( next, "%f%n", &x, &width ); + next = next + width; + + count = sscanf ( next, "%f%n", &y, &width ); + next = next + width; + + count = sscanf ( next, "%f%n", &z, &width ); + next = next + width; + + iface = iface + face_num_old; + ivert = 0; + + face_normal[0][iface] = x; + face_normal[1][iface] = y; + face_normal[2][iface] = z; + + break; + + } + else if ( strcmp ( word, "*MESH_VERTEXNORMAL" ) == 0 ) { + + count = sscanf ( next, "%d%n", &i, &width ); + next = next + width; + + count = sscanf ( next, "%f%n", &x, &width ); + next = next + width; + + count = sscanf ( next, "%f%n", &y, &width ); + next = next + width; + + count = sscanf ( next, "%f%n", &z, &width ); + next = next + width; + + vertex_normal[0][ivert][iface] = x; + vertex_normal[1][ivert][iface] = y; + vertex_normal[2][ivert][iface] = z; + ivert = ivert + 1; + + break; + } + else { + bad_num = bad_num + 1; + printf ( "Bad data in MESH_NORMALS, line %d\n", text_num ); + break; + } + } +/* + *MESH_TFACELIST +*/ + else if ( strcmp ( level_name[level], "*MESH_TFACELIST" ) == 0 ) { + + if ( strcmp ( word, "{" ) == 0 ) { + continue; + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + continue; + } + else if ( strcmp ( word1, "*MESH_TFACE" ) == 0 ) { + break; + } + else { + bad_num = bad_num + 1; + printf ( "Bad data in MESH_TFACE_LIST, line %d\n", text_num ); + break; + } + } +/* + *MESH_TVERTLIST +*/ + else if ( strcmp ( level_name[level], "*MESH_TVERTLIST" ) == 0 ) { + + if ( strcmp ( word, "{" ) == 0 ) { + continue; + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + continue; + } + else if ( strcmp ( word1, "*MESH_TVERT" ) == 0 ) { + break; + } + else { + bad_num = bad_num + 1; + printf ( "Bad data in MESH_TVERTLIST, line %d\n", text_num ); + break; + } + } +/* + *MESH_VERTEX_LIST +*/ + else if ( strcmp ( level_name[level], "*MESH_VERTEX_LIST" ) == 0 ) { + + if ( strcmp ( word, "{" ) == 0 ) { + cor3_num_old = cor3_num; + continue; + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + continue; + } + else if ( strcmp ( word1, "*MESH_VERTEX" ) == 0 ) { + + count = sscanf ( next, "%d%n", &i, &width ); + next = next + width; + + count = sscanf ( next, "%f%n", &x, &width ); + next = next + width; + + count = sscanf ( next, "%f%n", &y, &width ); + next = next + width; + + count = sscanf ( next, "%f%n", &z, &width ); + next = next + width; + + i = i + cor3_num_old; + if ( cor3_num < i + 1 ) { + cor3_num = i + 1; + } + + if ( i < COR3_MAX ) { + + cor3[0][i] = + transform_matrix[0][0] * x + + transform_matrix[0][1] * y + + transform_matrix[0][2] * z + + transform_matrix[0][3]; + + cor3[1][i] = + transform_matrix[1][0] * x + + transform_matrix[1][1] * y + + transform_matrix[1][2] * z + + transform_matrix[1][3]; + + cor3[2][i] = + transform_matrix[2][0] * x + + transform_matrix[2][1] * y + + transform_matrix[2][2] * z + + transform_matrix[2][3]; + } + + break; + } + else { + bad_num = bad_num + 1; + printf ( "Bad data in MESH_VERTEX_LIST, line %d\n", text_num ); + break; + } + } +/* + *NODE_TM + + Each node should start out with a default transformation matrix. +*/ + else if ( strcmp ( level_name[level], "*NODE_TM" ) == 0 ) { + + if ( strcmp ( word, "{" ) == 0 ) { + + tmat_init ( transform_matrix ); + + continue; + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + continue; + } + else if ( strcmp ( word, "*INHERIT_POS" ) == 0 ) { + break; + } + else if ( strcmp ( word, "*INHERIT_ROT" ) == 0 ) { + break; + } + else if ( strcmp ( word, "*INHERIT_SCL" ) == 0 ) { + break; + } + else if ( strcmp ( word, "*NODE_NAME" ) == 0 ) { + break; + } + else if ( strcmp ( word, "*TM_POS" ) == 0 ) { + break; + } + else if ( strcmp ( word, "*TM_ROTANGLE" ) == 0 ) { + break; + } + else if ( strcmp ( word, "*TM_ROTAXIS" ) == 0 ) { + break; + } + else if ( strcmp ( word, "*TM_ROW0" ) == 0 ) { + + count = sscanf ( next, "%f%n", &temp, &width ); + next = next + width; + transform_matrix[0][0] = temp; + + count = sscanf ( next, "%f%n", &temp, &width ); + next = next + width; + transform_matrix[1][0] = temp; + + count = sscanf ( next, "%f%n", &temp, &width ); + next = next + width; + transform_matrix[2][0] = temp; + + break; + } + else if ( strcmp ( word, "*TM_ROW1" ) == 0 ) { + + count = sscanf ( next, "%f%n", &temp, &width ); + next = next + width; + transform_matrix[0][1] = temp; + + count = sscanf ( next, "%f%n", &temp, &width ); + next = next + width; + transform_matrix[1][1] = temp; + + count = sscanf ( next, "%f%n", &temp, &width ); + next = next + width; + transform_matrix[2][1] = temp; + + break; + } + else if ( strcmp ( word, "*TM_ROW2" ) == 0 ) { + + count = sscanf ( next, "%f%n", &temp, &width ); + next = next + width; + transform_matrix[0][2] = temp; + + count = sscanf ( next, "%f%n", &temp, &width ); + next = next + width; + transform_matrix[1][2] = temp; + + count = sscanf ( next, "%f%n", &temp, &width ); + next = next + width; + transform_matrix[2][2] = temp; + + break; + } + else if ( strcmp ( word, "*TM_ROW3" ) == 0 ) { + + count = sscanf ( next, "%f%n", &temp, &width ); + next = next + width; + transform_matrix[0][3] = temp; + + count = sscanf ( next, "%f%n", &temp, &width ); + next = next + width; + transform_matrix[1][3] = temp; + + count = sscanf ( next, "%f%n", &temp, &width ); + next = next + width; + transform_matrix[2][3] = temp; + + break; + } + else if ( strcmp ( word, "*TM_SCALE" ) == 0 ) { + break; + } + else if ( strcmp ( word, "*TM_SCALEAXIS" ) == 0 ) { + break; + } + else if ( strcmp ( word, "*TM_SCALEAXISANG" ) == 0 ) { + break; + } + else { + bad_num = bad_num + 1; + printf ( "Bad data in NODE_TM, line %d\n", text_num ); + break; + } + } +/* + *SCENE +*/ + else if ( strcmp ( level_name[level], "*SCENE" ) == 0 ) { + + if ( strcmp ( word, "{" ) == 0 ) { + continue; + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + continue; + } + else if ( strcmp ( word, "*SCENE_AMBIENT_STATIC" ) == 0 ) { + break; + } + else if ( strcmp ( word, "*SCENE_BACKGROUND_STATIC" ) == 0 ) { + break; + } + else if ( strcmp ( word, "*SCENE_FILENAME" ) == 0 ) { + break; + } + else if ( strcmp ( word, "*SCENE_FIRSTFRAME" ) == 0 ) { + break; + } + else if ( strcmp ( word, "*SCENE_FRAMESPEED" ) == 0 ) { + break; + } + else if ( strcmp ( word, "*SCENE_LASTFRAME" ) == 0 ) { + break; + } + else if ( strcmp ( word, "*SCENE_TICKSPERFRAME" ) == 0 ) { + break; + } + else { + bad_num = bad_num + 1; + printf ( "Bad data in SCENE, line %d\n", text_num ); + break; + } + + } + + } +/* + End of loop reading words from the line. +*/ + } +/* + End of loop reading lines from input file. +*/ + + return SUCCESS; +} +/******************************************************************************/ + +int ase_write ( FILE *fileout ) + +/******************************************************************************/ + +/* + Purpose: + + ASE_WRITE writes graphics information to an AutoCAD ASE file. + + Modified: + + 30 September 1998 + + Author: + + John Burkardt + +*/ +{ + int i1; + int i2; + int i3; + int i4; + int iface; + int ivert; + int j; + int text_num; + + text_num = 0; +/* + Write the header. +*/ + fprintf ( fileout, "*3DSMAX_ASCIIEXPORT 200\n" ); + fprintf ( fileout, "*COMMENT \"%s, created by IVCON.\"\n", fileout_name ); + fprintf ( fileout, "*COMMENT \"Original data in %s\"\n", filein_name ); + + text_num = text_num + 3; +/* + Write the scene block. +*/ + fprintf ( fileout, "*SCENE {\n" ); + fprintf ( fileout, " *SCENE_FILENAME \"\"\n" ); + fprintf ( fileout, " *SCENE_FIRSTFRAME 0\n" ); + fprintf ( fileout, " *SCENE_LASTFRAME 100\n" ); + fprintf ( fileout, " *SCENE_FRAMESPEED 30\n" ); + fprintf ( fileout, " *SCENE_TICKSPERFRAME 160\n" ); + fprintf ( fileout, " *SCENE_BACKGROUND_STATIC 0.0000 0.0000 0.0000\n" ); + fprintf ( fileout, " *SCENE_AMBIENT_STATIC 0.0431 0.0431 0.0431\n" ); + fprintf ( fileout, "}\n" ); + + text_num = text_num + 9; +/* + Begin the big geometry block. +*/ + fprintf ( fileout, "*GEOMOBJECT {\n" ); + fprintf ( fileout, " *NODE_NAME \"%s\"\n", object_name ); + + text_num = text_num + 2; +/* + Sub block NODE_TM: +*/ + fprintf ( fileout, " *NODE_TM {\n" ); + fprintf ( fileout, " *NODE_NAME \"Object01\"\n" ); + fprintf ( fileout, " *INHERIT_POS 0 0 0\n" ); + fprintf ( fileout, " *INHERIT_ROT 0 0 0\n" ); + fprintf ( fileout, " *INHERIT_SCL 0 0 0\n" ); + fprintf ( fileout, " *TM_ROW0 1.0000 0.0000 0.0000\n" ); + fprintf ( fileout, " *TM_ROW1 0.0000 1.0000 0.0000\n" ); + fprintf ( fileout, " *TM_ROW2 0.0000 0.0000 1.0000\n" ); + fprintf ( fileout, " *TM_ROW3 0.0000 0.0000 0.0000\n" ); + fprintf ( fileout, " *TM_POS 0.0000 0.0000 0.0000\n" ); + fprintf ( fileout, " *TM_ROTAXIS 0.0000 0.0000 0.0000\n" ); + fprintf ( fileout, " *TM_ROTANGLE 0.0000\n" ); + fprintf ( fileout, " *TM_SCALE 1.0000 1.0000 1.0000\n" ); + fprintf ( fileout, " *TM_SCALEAXIS 0.0000 0.0000 0.0000\n" ); + fprintf ( fileout, " *TM_SCALEAXISANG 0.0000\n" ); + fprintf ( fileout, " }\n" ); + + text_num = text_num + 16; +/* + Sub block MESH: + Items +*/ + fprintf ( fileout, " *MESH {\n" ); + fprintf ( fileout, " *TIMEVALUE 0\n" ); + fprintf ( fileout, " *MESH_NUMVERTEX %d\n", cor3_num ); + fprintf ( fileout, " *MESH_NUMFACES %d\n", face_num ); + + text_num = text_num + 4; +/* + Sub sub block MESH_VERTEX_LIST +*/ + fprintf ( fileout, " *MESH_VERTEX_LIST {\n" ); + text_num = text_num + 1; + + for ( j = 0; j < cor3_num; j++ ) { + fprintf ( fileout, " *MESH_VERTEX %d %f %f %f\n", j, cor3[0][j], + cor3[1][j], cor3[2][j] ); + text_num = text_num + 1; + } + + fprintf ( fileout, " }\n" ); + text_num = text_num + 1; +/* + Sub sub block MESH_FACE_LIST + Items MESH_FACE +*/ + fprintf ( fileout, " *MESH_FACE_LIST {\n" ); + text_num = text_num + 1; + + for ( iface = 0; iface < face_num; iface++ ) { + + i1 = face[0][iface]; + i2 = face[1][iface]; + i3 = face[2][iface]; + + if ( face_order[iface] == 3 ) { + fprintf ( fileout, " *MESH_FACE %d: A: %d B: %d C: %d", iface, i1, i2, i3 ); + fprintf ( fileout, " AB: 1 BC: 1 CA: 1 *MESH_SMOOTHING *MESH_MTLID 1\n" ); + text_num = text_num + 1; + } + else if ( face_order[iface] == 4 ) { + i4 = face[3][iface]; + fprintf ( fileout, " *MESH_FACE %d: A: %d B: %d C: %d D: %d", iface, i1, i2, i3, i4 ); + fprintf ( fileout, " AB: 1 BC: 1 CD: 1 DA: 1 *MESH_SMOOTHING *MESH_MTLID 1\n" ); + text_num = text_num + 1; + } + } + + fprintf ( fileout, " }\n" ); + text_num = text_num + 1; +/* + Item MESH_NUMTVERTEX. +*/ + fprintf ( fileout, " *MESH_NUMTVERTEX 0\n" ); + text_num = text_num + 1; +/* + Item NUMCVERTEX. +*/ + fprintf ( fileout, " *MESH_NUMCVERTEX 0\n" ); + text_num = text_num + 1; +/* + Sub block MESH_NORMALS + Items MESH_FACENORMAL, MESH_VERTEXNORMAL (repeated) +*/ + fprintf ( fileout, " *MESH_NORMALS {\n" ); + text_num = text_num + 1; + + for ( iface = 0; iface < face_num; iface++ ) { + + fprintf ( fileout, " *MESH_FACENORMAL %d %f %f %f\n", + iface, face_normal[0][iface], face_normal[1][iface], face_normal[2][iface] ); + text_num = text_num + 1; + + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + fprintf ( fileout, " *MESH_VERTEXNORMAL %d %f %f %f\n", + face[ivert][iface], vertex_normal[0][ivert][iface], + vertex_normal[1][ivert][iface], vertex_normal[2][ivert][iface] ); + text_num = text_num + 1; + } + } + + fprintf ( fileout, " }\n" ); + text_num = text_num + 1; +/* + Close the MESH object. +*/ + fprintf ( fileout, " }\n" ); +/* + A few closing parameters. +*/ + fprintf ( fileout, " *PROP_MOTIONBLUR 0\n" ); + fprintf ( fileout, " *PROP_CASTSHADOW 1\n" ); + fprintf ( fileout, " *PROP_RECVSHADOW 1\n" ); +/* + Close the GEOM object. +*/ + fprintf ( fileout, "}\n" ); + + text_num = text_num + 5; +/* + Report. +*/ + printf ( "\n" ); + printf ( "ASE_WRITE - Wrote %d text lines;\n", text_num ); + + return SUCCESS; +} +/**********************************************************************/ + +int byu_read ( FILE *filein ) + +/**********************************************************************/ + +/* + Purpose: + + BYU_READ reads graphics data from a Movie.BYU surface geometry file. + + Discussion: + + A Movie.BYU surface geometry file contains 4 groups of data. + + The first group of data is a single line, containing 4 integers, + each one left justified in 8 columns. The integers are: + + PART_NUM, VERTEX_NUM, POLY_NUM, EDGE_NUM, + + that is, the number of parts or objects, the number of vertices or nodes, + the number of polygons or faces, and the number of edges. + + The second group of data is a single line, containing 2 integers, + each one left justified in 8 columnes. The integers are: + + POLY1, POLY2, + + the starting and ending polygon numbers. Presumably, this means + that the polygons are labeled POLY1, POLY1+1, ..., POLY2, comprising + a total of POLY_NUM polygons. + + The third group is the X, Y and Z coordinates of all the vertices. + These may be written using a FORTRAN format of 6E12.5, which + crams two sets of (X,Y,Z) data onto each line, with each real value + written in an exponential format with 5 places after the decimal. + However, it is generally possible to write the XYZ coordinate data + for each vertex on a separate line. + + The fourth group defines the polygons in terms of the vertex indices. + For each polygon, the vertices that make up the polygon are listed in + counterclockwise order. The last vertex listed is given with a negative + sign to indicate the end of the list. All the vertices for all the + polygons are listed one after the other, using a format that puts + up to 10 left-justified integers on a line, with each integer occupying + 8 spaces. + + This code will certainly read a BYU file created by BYU_WRITE, but + it will not handle more general files. In particular, an object + can have several parts, the coordinate data can be grouped so + that there are 2 sets of (x,y,z) data per line, and so on. + + Example: + + 1 8 6 24 + 1 6 + 0.00000E+00 0.00000E+00 0.00000E+00 + 1.00000E+00 0.00000E+00 0.00000E+00 + 1.00000E+00 2.00000E+00 0.00000E+00 + 0.00000E+00 2.00000E+00 0.00000E+00 + 0.00000E+00 0.00000E+00 1.00000E+00 + 1.00000E+00 0.00000E+00 1.00000E+00 + 1.00000E+00 2.00000E+00 1.00000E+00 + 0.00000E+00 2.00000E+00 1.00000E+00 + 4 3 2 -1 + 5 6 7 -8 + 1 5 8 -4 + 4 8 7 -3 + 3 7 6 -2 + 2 6 5 -1 + + Modified: + + 24 May 2001 + + Author: + + John Burkardt + +*/ +{ + int cor3_num_new; + int count; + int edge_num; + int face_num_new; + int iface; + int ival; + int ivert; + int j; + char *next; + int part_num; + int poly1; + int poly2; + int text_num; + int width; + float x; + float y; + float z; + + text_num = 0; + + if ( fgets ( input, LINE_MAX_LEN, filein ) == NULL ) { + return ERROR; + } + text_num = text_num + 1; + + sscanf ( input, "%d %d %d %d", &part_num, &cor3_num_new, &face_num_new, + &edge_num ); + + if ( fgets ( input, LINE_MAX_LEN, filein ) == NULL ) { + return ERROR; + } + text_num = text_num + 1; + + sscanf ( input, "%d %d", &poly1, &poly2 ); + + for ( j = cor3_num; j < cor3_num + cor3_num_new; j++ ) { + + if ( fgets ( input, LINE_MAX_LEN, filein ) == NULL ) { + return ERROR; + } + text_num = text_num + 1; + + sscanf ( input, "%f %f %f", &x, &y, &z ); + cor3[0][j] = x; + cor3[1][j] = y; + cor3[2][j] = z; + } + + for ( iface = face_num; iface < face_num + face_num_new; iface++ ) { + + if ( fgets ( input, LINE_MAX_LEN, filein ) == NULL ) { + return ERROR; + } + text_num = text_num + 1; + + next = input; + ivert = 0; + + for (;;) { + + count = sscanf ( next, "%d%n", &ival, &width ); + next = next + width; + + if ( count <= 0 ) { + return ERROR; + } + + if ( ival > 0 ) { + face[ivert][iface] = ival - 1 + cor3_num; + } + else { + face[ivert][iface] = - ival - 1 - cor3_num; + break; + } + + ivert = ivert + 1; + + } + face_order[iface] = ivert + 1; + } + + cor3_num = cor3_num + cor3_num_new; + face_num = face_num + face_num_new; +/* + Report. +*/ + printf ( "\n" ); + printf ( "BYU_READ - Read %d text lines.\n", text_num ); + + return SUCCESS; +} +/**********************************************************************/ + +int byu_write ( FILE *fileout ) + +/**********************************************************************/ + +/* + Purpose: + + BYU_WRITE writes out the graphics data as a Movie.BYU surface geometry file. + + Discussion: + + A Movie.BYU surface geometry file contains 4 groups of data. + + The first group of data is a single line, containing 4 integers, + each one left justified in 8 columns. The integers are: + + PART_NUM, VERTEX_NUM, POLY_NUM, EDGE_NUM, + + that is, the number of parts or objects, the number of vertices or nodes, + the number of polygons or faces, and the number of edges. + + The second group of data is a single line, containing 2 integers, + each one left justified in 8 columnes. The integers are: + + POLY1, POLY2, + + the starting and ending polygon numbers. Presumably, this means + that the polygons are labeled POLY1, POLY1+1, ..., POLY2, comprising + a total of POLY_NUM polygons. + + The third group is the X, Y and Z coordinates of all the vertices. + These may be written using a FORTRAN format of 6E12.5, which + crams two sets of (X,Y,Z) data onto each line, with each real value + written in an exponential format with 5 places after the decimal. + However, it is generally possible to write the XYZ coordinate data + for each vertex on a separate line. + + The fourth group defines the polygons in terms of the vertex indices. + For each polygon, the vertices that make up the polygon are listed in + counterclockwise order. The last vertex listed is given with a negative + sign to indicate the end of the list. All the vertices for all the + polygons are listed one after the other, using a format that puts + up to 10 left-justified integers on a line, with each integer occupying + 8 spaces. + + Example: + + 1 8 6 24 + 1 6 + 0.00000E+00 0.00000E+00 0.00000E+00 + 1.00000E+00 0.00000E+00 0.00000E+00 + 1.00000E+00 2.00000E+00 0.00000E+00 + 0.00000E+00 2.00000E+00 0.00000E+00 + 0.00000E+00 0.00000E+00 1.00000E+00 + 1.00000E+00 0.00000E+00 1.00000E+00 + 1.00000E+00 2.00000E+00 1.00000E+00 + 0.00000E+00 2.00000E+00 1.00000E+00 + 4 3 2 -1 + 5 6 7 -8 + 1 5 8 -4 + 4 8 7 -3 + 3 7 6 -2 + 2 6 5 -1 + + Modified: + + 24 May 2001 + + Author: + + John Burkardt +*/ +{ + int edge_num; + int iface; + int ivert; + int j; + int jp; + int part_num; + int text_num; + + text_num = 0; + + edge_num = 0; + for ( iface = 0; iface < face_num; iface++ ) { + edge_num = edge_num + face_order[iface]; + } + + part_num = 1; + + fprintf ( fileout, "%d %d %d %d\n", part_num, cor3_num, face_num, edge_num ); + text_num = text_num + 1; + + fprintf ( fileout, "1 %d\n", face_num ); + text_num = text_num + 1; + + for ( j = 0; j < cor3_num; j++ ) { + fprintf ( fileout, "%f %f %f\n", cor3[0][j], cor3[1][j], cor3[2][j] ); + text_num = text_num + 1; + } + + for ( iface = 0; iface < face_num; iface++ ) { + + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + + jp = face[ivert][iface] + 1; + if ( ivert == face_order[iface] - 1 ) { + jp = - jp; + } + fprintf ( fileout, "%d ", jp ); + } + fprintf ( fileout, "\n" ); + text_num = text_num + 1; + } +/* + Report. +*/ + printf ( "\n" ); + printf ( "BYU_WRITE - Wrote %d text lines.\n", text_num ); + + return SUCCESS; +} +/******************************************************************************/ + +int char_index_last ( char* string, char c ) + +/******************************************************************************/ + +/* + Purpose: + + CHAR_INDEX_LAST reports the last occurrence of a character in a string. + + Author: + + John Burkardt +*/ +{ + int i; + int j; + int nchar; + + j = -1; + + nchar = strlen ( string ); + + for ( i = 0; i < nchar; i++ ) { + if ( string[i] == c ) { + j = i; + } + } + + return j; + +} +/******************************************************************************/ + +int char_pad ( int *char_index, int *null_index, char *string, + int STRING_MAX ) + +/******************************************************************************/ + +/* + Purpose: + + CHAR_PAD "pads" a character in a string with a blank on either side. + + Modified: + + 16 October 1998 + + Author: + + John Burkardt + + Parameters: + + Input/output, int *CHAR_INDEX, the position of the character to be padded. + On output, this is increased by 1. + + Input/output, int *NULL_INDEX, the position of the terminating NULL in + the string. On output, this is increased by 2. + + Input/output, char STRING[STRING_MAX], the string to be manipulated. + + Input, int STRING_MAX, the maximum number of characters that can be stored + in the string. + + Output, int CHAR_PAD, is SUCCESS if the operation worked, and ERROR otherwise. +*/ +{ + int i; + + if ( *char_index < 0 || + *char_index >= *null_index || + *char_index > STRING_MAX-1 ) { + return ERROR; + } + + if ( (*null_index) + 2 > STRING_MAX-1 ) { + return ERROR; + } + + for ( i = *null_index + 2; i > *char_index + 2; i-- ) { + string[i] = string[i-2]; + } + string[*char_index+2] = ' '; + string[*char_index+1] = string[*char_index]; + string[*char_index] = ' '; + + *char_index = *char_index + 1; + *null_index = *null_index + 2; + + return SUCCESS; +} +/******************************************************************************/ + +char char_read ( FILE *filein ) + +/******************************************************************************/ + +/* + Purpose: + + CHAR_READ reads one character from a binary file. + + Modified: + + 24 May 1999 + + Author: + + John Burkardt +*/ +{ + char c; + + c = ( char ) fgetc ( filein ); + + return c; +} +/******************************************************************************/ + +int char_write ( FILE *fileout, char c ) + +/******************************************************************************/ + +/* + Purpose: + + CHAR_WRITE writes one character to a binary file. + + Modified: + + 24 May 1999 + + Author: + + John Burkardt +*/ +{ + fputc ( c, fileout ); + + return 1; +} +/******************************************************************************/ + +int command_line ( char **argv ) + +/******************************************************************************/ + +/* + + Purpose: + + COMMAND_LINE carries out a command-line session of file conversion. + + Discussion: + + This routine is invoked when the user command is something like + + ivcon filein_name fileout_name + + or + + ivcon -rn filein_name fileout_name + + where "-rn" signals the "reverse normals" option, or + + ivcon -rf filein_name fileout_name + + where "-rf" signals the "reverse faces" option. + + Modified: + + 28 June 1999 + + Author: + + John Burkardt +*/ +{ + int i; + int iarg; + int icor3; + int ierror; + int iface; + int ivert; + int reverse_faces; + int reverse_normals; +/* + Initialize local data. +*/ + iarg = 0; + ierror = 0; + reverse_faces = FALSE; + reverse_normals = FALSE; +/* + Initialize the graphics data. +*/ + data_init ( ); +/* + Get the -RN option, -RF option, and the input file name. +*/ + iarg = iarg + 1; + strcpy ( filein_name, argv[iarg] ); + + if ( leqi ( filein_name, "-RN" ) == TRUE ) { + reverse_normals = TRUE; + printf ( "\n" ); + printf ( "COMMAND_LINE: Reverse_Normals option requested.\n" ); + iarg = iarg + 1; + strcpy ( filein_name, argv[iarg] ); + } + + if ( leqi ( filein_name, "-RF" ) == TRUE ) { + reverse_faces = TRUE; + printf ( "\n" ); + printf ( "COMMAND_LINE: Reverse_Faces option requested.\n" ); + iarg = iarg + 1; + strcpy ( filein_name, argv[iarg] ); + } +/* + Read the input. +*/ + ierror = data_read ( ); + + if ( ierror == ERROR ) { + printf ( "\n" ); + printf ( "COMMAND_LINE - Fatal error!\n" ); + printf ( " Failure while reading input data.\n" ); + return ERROR; + } +/* + Reverse the normal vectors if requested. +*/ + if ( reverse_normals == TRUE ) { + + for ( icor3 = 0; icor3 < cor3_num; icor3++ ) { + for ( i = 0; i < 3; i++ ) { + cor3_normal[i][icor3] = - cor3_normal[i][icor3]; + } + } + + for ( iface = 0; iface < face_num; iface++ ) { + for ( i = 0; i < 3; i++ ) { + face_normal[i][iface] = - face_normal[i][iface]; + } + } + + for ( iface = 0; iface < face_num; iface++ ) { + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + for ( i = 0; i < 3; i++ ) { + vertex_normal[i][ivert][iface] = + - vertex_normal[i][ivert][iface]; + } + } + } + printf ( "\n" ); + printf ( "COMMAND_LINE - Note:\n" ); + printf ( " Reversed node, face, and vertex normals.\n" ); + } +/* + Reverse the faces if requested. +*/ + if ( reverse_faces == TRUE ) { + + face_reverse_order ( ); + + printf ( "\n" ); + printf ( "COMMAND_LINE - Note:\n" ); + printf ( " Reversed the face definitions.\n" ); + } +/* + Write the output file. +*/ + iarg = iarg + 1; + strcpy ( fileout_name, argv[iarg] ); + + ierror = data_write ( ); + + if ( ierror == ERROR ) { + printf ( "\n" ); + printf ( "COMMAND_LINE - Fatal error!\n" ); + printf ( " Failure while writing output data.\n" ); + return ERROR; + } + return SUCCESS; +} +/******************************************************************************/ + +void cor3_normal_set ( void ) + +/******************************************************************************/ + +/* + Purpose: + + COR3_NORMAL_SET computes node normal vectors. + + Modified: + + 18 November 1998 + + Author: + + John Burkardt +*/ +{ + int icor3; + int iface; + int ivert; + int j; + float norm; + float temp; + + for ( icor3 = 0; icor3 < cor3_num; icor3++ ) { + for ( j = 0; j < 3; j++ ) { + cor3_normal[j][icor3] = 0.0; + } + } +/* + Add up the normals at all the faces to which the node belongs. +*/ + for ( iface = 0; iface < face_num; iface++ ) { + + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + + icor3 = face[ivert][iface]; + + for ( j = 0; j < 3; j++ ) { + cor3_normal[j][icor3] = cor3_normal[j][icor3] + + vertex_normal[j][ivert][iface]; + } + } + } +/* + Renormalize. +*/ + for ( icor3 = 0; icor3 < cor3_num; icor3++ ) { + + norm = 0.0; + for ( j = 0; j < 3; j++ ) { + temp = cor3_normal[j][icor3]; + norm = norm + temp * temp; + } + + if ( norm == 0.0 ) { + norm = 3.0; + for ( j = 0; j < 3; j++ ) { + cor3_normal[j][icor3] = 1.0; + } + } + + norm = ( float ) sqrt ( norm ); + + for ( j = 0; j < 3; j++ ) { + cor3_normal[j][icor3] = cor3_normal[j][icor3] / norm; + } + } + + return; +} +/******************************************************************************/ + +void cor3_range ( void ) + +/******************************************************************************/ + +/* + Purpose: + + COR3_RANGE computes the coordinate minima and maxima. + + Modified: + + 31 August 1998 + + Author: + + John Burkardt +*/ +{ + int i; + float xave; + float xmax; + float xmin; + float yave; + float ymax; + float ymin; + float zave; + float zmax; + float zmin; + + xave = cor3[0][0]; + xmax = cor3[0][0]; + xmin = cor3[0][0]; + + yave = cor3[1][0]; + ymax = cor3[1][0]; + ymin = cor3[1][0]; + + zave = cor3[2][0]; + zmax = cor3[2][0]; + zmin = cor3[2][0]; + + for ( i = 1; i < cor3_num; i++ ) { + + xave = xave + cor3[0][i]; + if ( cor3[0][i] < xmin ) { + xmin = cor3[0][i]; + } + if ( cor3[0][i] > xmax ) { + xmax = cor3[0][i]; + } + + yave = yave + cor3[1][i]; + if ( cor3[1][i] < ymin ) { + ymin = cor3[1][i]; + } + if ( cor3[1][i] > ymax ) { + ymax = cor3[1][i]; + } + + zave = zave + cor3[2][i]; + if ( cor3[2][i] < zmin ) { + zmin = cor3[2][i]; + } + if ( cor3[2][i] > zmax ) { + zmax = cor3[2][i]; + } + } + + xave = xave / cor3_num; + yave = yave / cor3_num; + zave = zave / cor3_num; + + printf ( "\n" ); + printf ( "COR3_RANGE - Data range:\n" ); + printf ( "\n" ); + printf ( " Minimum Average Maximum Range\n" ); + printf ( "\n" ); + printf ( "X %f %f %f %f\n", xmin, xave, xmax, xmax-xmin ); + printf ( "Y %f %f %f %f\n", ymin, yave, ymax, ymax-ymin ); + printf ( "Z %f %f %f %f\n", zmin, zave, zmax, zmax-zmin ); + +} +/******************************************************************************/ + +void data_check ( void ) + +/******************************************************************************/ + +/* + Purpose: + + DATA_CHECK checks the input data. + + Modified: + + 18 May 1999 + + Author: + + John Burkardt +*/ +{ + int iface; + int nfix; + + if ( color_num > COLOR_MAX ) { + printf ( "\n" ); + printf ( "DATA_CHECK - Warning!\n" ); + printf ( " The input data requires %d colors.\n", color_num ); + printf ( " There was only room for %d\n", COLOR_MAX ); + color_num = COLOR_MAX; + } + + if ( cor3_num > COR3_MAX ) { + printf ( "\n" ); + printf ( "DATA_CHECK - Warning!\n" ); + printf ( " The input data requires %d points.\n", cor3_num ); + printf ( " There was only room for %d\n", COR3_MAX ); + cor3_num = COR3_MAX; + } + + if ( face_num > FACE_MAX ) { + printf ( "\n" ); + printf ( "DATA_CHECK - Warning!\n" ); + printf ( " The input data requires %d faces.\n", face_num ); + printf ( " There was only room for %d\n", FACE_MAX ); + face_num = FACE_MAX; + } + + if ( line_num > LINES_MAX ) { + printf ( "\n" ); + printf ( "DATA_CHECK - Warning!\n" ); + printf ( " The input data requires %d line items.\n", line_num ); + printf ( " There was only room for %d.\n", LINES_MAX ); + line_num = LINES_MAX; + } + + nfix = 0; + + for ( iface = 0; iface < face_num; iface++ ) { + + if ( face_order[iface] > ORDER_MAX ) { + face_order[iface] = ORDER_MAX; + nfix = nfix + 1; + } + + } + + if ( nfix > 0 ) { + printf ( "\n" ); + printf ( "DATA_CHECK - Warning!\n" ); + printf ( " Corrected %d faces using more than %d vertices per face.\n", + nfix, ORDER_MAX ); + } + + for ( i = 0; i < material_num; i++ ) { + if ( strcmp ( material_name[i], "" ) == 0 ) { + strcpy ( material_name[i], "Material_0000" ); + } + } + + for ( i = 0; i < texture_num; i++ ) { + if ( strcmp ( texture_name[i], "" ) == 0 ) { + strcpy ( texture_name[i], "Texture_0000" ); + } + } + + printf ( "\n" ); + printf ( "DATA_CHECK - Data checked.\n" ); + + return; +} +/******************************************************************************/ + +void data_init ( void ) + +/******************************************************************************/ + +/* + Purpose: + + DATA_INIT initializes the internal graphics data. + + Modified: + + 04 July 2000 + + Author: + + John Burkardt +*/ +{ + int i; + int iface; + int ivert; + int j; + int k; + + strcpy( anim_name, "" ); + + for ( i = 0; i < 3; i++ ) { + background_rgb[i] = 0.0; + } + + for ( i = 0; i < 3; i++ ) { + for ( j = 0; j < COR3_MAX; j++ ) { + cor3[i][j] = 0.0; + } + } + + for ( i = 0; i < COR3_MAX; i++ ) { + cor3_material[i] = 0; + } + + for ( i = 0; i < 3; i++ ) { + for ( j = 0; j < COR3_MAX; j++ ) { + cor3_normal[i][j] = 0.0; + } + } + + for ( j = 0; j < COR3_MAX; j++ ) { + cor3_tex_uv[0][j] = 0.0; + cor3_tex_uv[1][j] = 0.0; + } + + for ( iface = 0; iface < FACE_MAX; iface++ ) { + for ( ivert = 0; ivert < ORDER_MAX; ivert++ ) { + face[ivert][iface] = 0; + } + } + + for ( iface = 0; iface < FACE_MAX; iface++ ) { + face_flags[iface] = 6; + } + + for ( iface = 0; iface < FACE_MAX; iface++ ) { + face_material[iface] = 0; + } + + for ( iface = 0; iface < FACE_MAX; iface++ ) { + for ( i = 0; i < 3; i++ ) { + face_normal[i][iface] = 0; + } + } + + for ( iface = 0; iface < FACE_MAX; iface++ ) { + face_object[iface] = -1; + } + + for ( iface = 0; iface < FACE_MAX; iface++ ) { + face_order[iface] = 0; + } + + for ( iface = 0; iface < FACE_MAX; iface++ ) { + face_smooth[iface] = 1; + } + + for ( i = 0; i < LINES_MAX; i++ ) { + line_dex[i] = -1; + } + + for ( i = 0; i < LINES_MAX; i++ ) { + line_material[i] = 0; + } + + strcpy ( material_binding, "DEFAULT" ); + + for ( j = 0; j < MATERIAL_MAX; j++ ) { + strcpy ( material_name[j], "Material_0000" ); + } + + for ( i = 0; i < 4; i++ ) { + for ( j = 0; j < MATERIAL_MAX; j++ ) { + material_rgba[i][j] = 0.0; + } + } + + strcpy ( normal_binding, "DEFAULT" ); + + for ( j = 0; j < ORDER_MAX*FACE_MAX; j++ ) { + for ( i = 0; i < 3; i++ ) { + normal_temp[i][j] = 0; + } + } + + color_num = 0; + cor3_num = 0; + face_num = 0; + group_num = 0; + line_num = 0; + material_num = 0; + object_num = 0; + texture_num = 0; + + strcpy ( object_name, "IVCON" ); + + for ( i = 0; i < 3; i++ ) { + origin[i] = 0.0; + } + + for ( i = 0; i < 3; i++ ) { + pivot[i] = 0.0; + } + + for ( j = 0; j < COLOR_MAX; j++ ) { + rgbcolor[0][j] = 0.299; + rgbcolor[1][j] = 0.587; + rgbcolor[2][j] = 0.114; + } + + strcpy ( texture_binding, "DEFAULT" ); + + for ( j = 0; j < TEXTURE_MAX; j++ ) { + strcpy ( texture_name[j], "Texture_0000" ); + } + + tmat_init ( transform_matrix ); + + for ( iface = 0; iface < FACE_MAX; iface++ ) { + for ( ivert = 0; ivert < ORDER_MAX; ivert++ ) { + vertex_material[ivert][iface] = 0; + } + } + + for ( iface = 0; iface < FACE_MAX; iface++ ) { + for ( ivert = 0; ivert < ORDER_MAX; ivert++ ) { + for ( i = 0; i < 3; i++ ) { + vertex_normal[i][ivert][iface] = 0.0; + } + } + } + + for ( j = 0; j < 3; j++ ) { + for ( k = 0; k < FACE_MAX; k++ ) { + vertex_rgb[0][j][k] = 0.299; + vertex_rgb[1][j][k] = 0.587; + vertex_rgb[2][j][k] = 0.114; + } + } + + for ( iface = 0; iface < FACE_MAX; iface++ ) { + for ( ivert = 0; ivert < ORDER_MAX; ivert++ ) { + for ( i = 0; i < 2; i++ ) { + vertex_tex_uv[i][ivert][iface] = 0.0; + } + } + } + + if ( debug ) { + printf ( "\n" ); + printf ( "DATA_INIT: Graphics data initialized.\n" ); + } + + return; +} +/******************************************************************************/ + +int data_read ( void ) + +/******************************************************************************/ + +/* + Purpose: + + DATA_READ reads a file into internal graphics data. + + Modified: + + 26 September 1999 + + Author: + + John Burkardt +*/ +{ + FILE *filein; + char *filein_type; + int icor3; + int ierror; + int iface; + int iline; + int ivert; + int ntemp; +/* + Retrieve the input file type. +*/ + filein_type = file_ext ( filein_name ); + + if ( filein_type == NULL ) { + printf ( "\n" ); + printf ( "DATA_READ - Fatal error!\n" ); + printf ( " Could not determine the type of '%s'.\n", filein_name ); + return ERROR; + } + else if ( debug ) { + printf ( "\n" ); + printf ( "DATA_READ: Input file has type %s.\n", filein_type ); + } +/* + Initialize some data. +*/ + max_order2 = 0; + bad_num = 0; + bytes_num = 0; + comment_num = 0; + dup_num = 0; + text_num = 0; +/* + Open the file. +*/ + if ( leqi ( filein_type, "3DS" ) == TRUE || + leqi ( filein_type, "STLB" ) == TRUE || + leqi ( filein_type, "TRIB" ) == TRUE ) { + filein = fopen ( filein_name, "rb" ); + } + else { + filein = fopen ( filein_name, "r" ); + } + + if ( filein == NULL ) { + printf ( "\n" ); + printf ( "DATA_READ - Fatal error!\n" ); + printf ( " Could not open the input file '%s'!\n", filein_name ); + return ERROR; + } +/* + Read the information in the file. +*/ + if ( leqi ( filein_type, "3DS" ) == TRUE ) { + + ierror = tds_read ( filein ); +/* + Cleanup: distribute the node textures to the vertices. +*/ + if ( ierror == SUCCESS ) { + + for ( iface = 0; iface < face_num; iface++ ) { + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + icor3 = face[ivert][iface]; + vertex_tex_uv[0][ivert][iface] = cor3_tex_uv[0][icor3]; + vertex_tex_uv[1][ivert][iface] = cor3_tex_uv[1][icor3]; + } + } + + } + + } + else if ( leqi ( filein_type, "ASE" ) == TRUE ) { + + ierror = ase_read ( filein ); + + if ( ierror == SUCCESS ) { + + node_to_vertex_material ( ); + + vertex_to_face_material ( ); + + } + + } + else if ( leqi ( filein_type, "BYU" ) == TRUE ) { + + ierror = byu_read ( filein ); + + } + else if ( leqi ( filein_type, "DXF" ) == TRUE ) { + + ierror = dxf_read ( filein ); + + } + else if ( leqi ( filein_type, "GMOD" ) == TRUE ) { + + ierror = gmod_read ( filein ); + + } + else if ( leqi ( filein_type, "HRC" ) == TRUE ) { + + ierror = hrc_read ( filein ); + + } + else if ( leqi ( filein_type, "IV" ) == TRUE ) { + + ierror = iv_read ( filein ); + + } + else if ( leqi ( filein_type, "OBJ" ) == TRUE ) { + + ierror = obj_read ( filein ); + + } + else if ( leqi ( filein_type, "SMF" ) == TRUE ) { + + ierror = smf_read ( filein ); + + } + else if ( + leqi ( filein_type, "STL" ) == TRUE || + leqi ( filein_type, "STLA") == TRUE ) { + + ierror = stla_read ( filein ); + + if( ierror ) { + // might be binary + fclose(filein); + filein = fopen ( filein_name, "rb" ); + ierror = stlb_read ( filein ); + } + } + else if ( leqi ( filein_type, "STLB") == TRUE ) { + + ierror = stlb_read ( filein ); + + } + else if ( + leqi ( filein_type, "TRI" ) == TRUE || + leqi ( filein_type, "TRIA") == TRUE ) { + + ierror = tria_read ( filein ); + + } + else if ( leqi ( filein_type, "TRIB") == TRUE ) { + + ierror = trib_read ( filein ); + + } + else if ( leqi ( filein_type, "VLA" ) == TRUE ) { + + ierror = vla_read ( filein ); + + } + else { + printf ( "\n" ); + printf ( "DATA_READ - Fatal error!\n" ); + printf ( " Unacceptable input file type.\n" ); + return ERROR; + } + + fclose ( filein ); + + if ( debug ) { + printf ( "DATA_READ: Finished reading the data file.\n" ); + } +/* + Catch errors reported by the various reading routines. +*/ + if ( ierror == ERROR ) { + return ierror; + } +/* + Restore the transformation matrix. +*/ + tmat_init ( transform_matrix ); +/* + Report on what we read. +*/ + if ( face_num < FACE_MAX ) { + ntemp = face_num; + } + else { + ntemp = FACE_MAX; + } + + max_order2 = ivec_max ( ntemp, face_order ); + + data_report ( ); +/* + Warn about any errors that occurred during reading. +*/ + if ( ierror == ERROR ) { + printf ( "\n" ); + printf ( "DATA_READ - Fatal error!\n" ); + printf ( " An error occurred while reading the input file.\n" ); + return ERROR; + } +/* + Check the data. + You MUST wait until after this check before doing other computations, + since COR3_NUM and other variables could be much larger than the legal + maximums, until corrected by DATA_CHECK. +*/ + data_check ( ); +/* + MATERIALS FIXUPS: + + If there are no materials at all, define one. +*/ + if ( material_num < 1 ) { + material_num = 1; + strcpy ( material_name[0], "Material_0000" ); + material_rgba[0][0] = 0.7; + material_rgba[1][0] = 0.7; + material_rgba[2][0] = 0.7; + material_rgba[3][0] = 1.0; + } +/* + If a node has not been assigned a material, set it to material 0. +*/ + for ( icor3 = 0; icor3 < cor3_num; icor3++ ) { + if ( cor3_material[icor3] < 0 || cor3_material[icor3] > material_num - 1 ) { + cor3_material[icor3] = 0; + } + } +/* + If a vertex has not been assigned a material, set it to material 0. +*/ + for ( iface = 0; iface < face_num; iface++ ) { + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + if ( vertex_material[ivert][iface] < 0 || vertex_material[ivert][iface] > material_num - 1 ) { + vertex_material[ivert][iface] = 0; + } + } + } +/* + If a face has not been assigned a material, set it to material 0. +*/ + for ( iface = 0; iface < face_num; iface++ ) { + if ( face_material[iface] < 0 || face_material[iface] > material_num - 1 ) { + face_material[iface] = 0; + } + } +/* + If a line item has not been assigned a material, set it to material 0. +*/ + for ( iline = 0; iline < line_num; iline++ ) { + if ( line_dex[iline] == -1 ) { + line_material[iline] = -1; + } + else if ( line_material[iline] < 0 || line_material[iline] > material_num - 1 ) { + line_material[iline] = 0; + } + } +/* + Delete edges of zero length. +*/ + edge_null_delete ( ); +/* + Compute the area of each face. +*/ + face_area_set ( ); +/* + Delete faces with zero area. +*/ + face_null_delete ( ); +/* + Recompute zero face-vertex normals from vertex positions. +*/ + vertex_normal_set ( ); +/* + Compute the node normals from the vertex normals. +*/ + cor3_normal_set ( ); +/* + Recompute zero face normals by averaging face-vertex normals. +*/ + face_normal_ave ( ); +/* + Report on the nodal coordinate range. +*/ + cor3_range ( ); + + return SUCCESS; +} +/**********************************************************************/ + +void data_report ( void ) + +/**********************************************************************/ + +/* + Purpose: + + DATA_REPORT gives a summary of the contents of the data file. + + Modified: + + 24 May 1999 + + Author: + + John Burkardt +*/ +{ + printf ( "\n" ); + printf ( "DATA_REPORT - The input file contains:\n" ); + printf ( "\n" ); + printf ( " Bad data items %d\n", bad_num ); + printf ( " Text lines %d\n", text_num ); + printf ( " Text bytes (binary data) %d\n", bytes_num ); + printf ( " Colors %d\n", color_num ); + printf ( " Comments %d\n", comment_num ); + printf ( " Duplicate points %d\n", dup_num ); + printf ( " Faces %d\n", face_num ); + printf ( " Groups %d\n", group_num ); + printf ( " Vertices per face, maximum %d\n", max_order2 ); + printf ( " Line items %d\n", line_num ); + printf ( " Points %d\n", cor3_num ); + printf ( " Objects %d\n", object_num ); + + return; +} +/******************************************************************************/ + +int data_write ( void ) + +/******************************************************************************/ + +/* + Purpose: + + DATA_WRITE writes the internal graphics data to a file. + + Modified: + + 22 May 1999 + + Author: + + John Burkardt +*/ +{ + FILE *fileout; + char *fileout_type; + int line_num_save; + int result; + + result = SUCCESS; +/* + Retrieve the output file type. +*/ + fileout_type = file_ext ( fileout_name ); + + if ( fileout_type == NULL ) { + printf ( "\n" ); + printf ( "DATA_WRITE - Fatal error!\n" ); + printf ( " Could not determine the output file type.\n" ); + return ERROR; + } +/* + Open the output file. +*/ + if ( leqi ( fileout_type, "3DS" ) == TRUE || + leqi ( fileout_type, "STLB" ) == TRUE || + leqi ( fileout_type, "TRIB" ) ) { + fileout = fopen ( fileout_name, "wb" ); + } + else { + fileout = fopen ( fileout_name, "w" ); + } + + if ( fileout == NULL ) { + printf ( "\n" ); + printf ( "DATA_WRITE - Fatal error!\n" ); + printf ( " Could not open the output file!\n" ); + return ERROR; + } +/* + Write the output file. +*/ + if ( leqi ( fileout_type, "3DS" ) == TRUE ) { + + tds_pre_process(); + result = tds_write ( fileout ); + + } + else if ( leqi ( fileout_type, "ASE" ) == TRUE ) { + + result = ase_write ( fileout ); + + } + else if ( leqi ( fileout_type, "BYU" ) == TRUE ) { + + result = byu_write ( fileout ); + + } + else if ( leqi ( fileout_type, "DXF" ) == TRUE ) { + + result = dxf_write ( fileout ); + + } + else if ( leqi ( fileout_type, "GMOD" ) == TRUE ) { + + result = gmod_write ( fileout ); + + } + else if ( leqi ( fileout_type, "HRC" ) == TRUE ) { + + result = hrc_write ( fileout ); + + } + else if ( leqi ( fileout_type, "IV" ) == TRUE ) { + + result = iv_write ( fileout ); + + } + else if ( leqi ( fileout_type, "OBJ" ) == TRUE ) { + + result = obj_write ( fileout ); + + } + else if ( leqi ( fileout_type, "POV" ) == TRUE ) { + + result = pov_write ( fileout ); + + } + else if ( leqi ( fileout_type, "SMF" ) == TRUE ) { + + result = smf_write ( fileout ); + + } + else if ( + leqi ( fileout_type, "STL" ) == TRUE || + leqi ( fileout_type, "STLA" ) == TRUE ) { + + result = stla_write ( fileout ); + + } + else if ( leqi ( fileout_type, "STLB" ) == TRUE ) { + + result = stlb_write ( fileout ); + + } + else if ( leqi ( fileout_type, "TEC" ) == TRUE ) { + + result = tec_write ( fileout ); + + } + else if ( + leqi ( fileout_type, "TRI" ) == TRUE || + leqi ( fileout_type, "TRIA" ) == TRUE ) { + + result = tria_write ( fileout ); + + } + else if ( leqi ( fileout_type, "TRIB" ) == TRUE ) { + + result = trib_write ( fileout ); + + } + else if ( leqi ( fileout_type, "TXT" ) == TRUE ) { + + result = txt_write ( fileout ); + + } + else if ( leqi ( fileout_type, "UCD" ) == TRUE ) { + + result = ucd_write ( fileout ); + + } + else if ( leqi ( fileout_type, "VLA" ) == TRUE ) { + + line_num_save = line_num; + + if ( face_num > 0 ) { + + printf ( "\n" ); + printf ( "DATA_WRITE - Note:\n" ); + printf ( " Face information will temporarily be converted to\n" ); + printf ( " line information for output to a VLA file.\n" ); + + face_to_line ( ); + + if ( line_num > LINES_MAX ) { + printf ( "\n" ); + printf ( "DATA_WRITE - Warning:\n" ); + printf ( " Some face information was lost.\n" ); + printf ( " The maximum number of lines is %d.\n", LINES_MAX ); + printf ( " The number of lines needed is %d.\n", line_num ); + line_num = LINES_MAX; + } + + } + + result = vla_write ( fileout ); + + line_num = line_num_save; + + } + else if ( leqi ( fileout_type, "WRL" ) == TRUE ) { + + result = wrl_write ( fileout ); + + } + else if ( leqi ( fileout_type, "XGL" ) == TRUE ) { + + result = xgl_write ( fileout ); + + } + else { + + result = ERROR; + printf ( "\n" ); + printf ( "DATA_WRITE - Fatal error!\n" ); + printf ( " Unacceptable output file type \"%s\".\n", fileout_type ); + + } +/* + Close the output file. +*/ + fclose ( fileout ); + + if ( result == ERROR ) { + return ERROR; + } + else { + return SUCCESS; + } +} +/******************************************************************************/ + +int dxf_read ( FILE *filein ) + +/******************************************************************************/ + +/* + Purpose: + + DXF_READ reads an AutoCAD DXF file. + + Examples: + + 0 + SECTION + 2 + HEADER + 999 + diamond.dxf created by IVREAD. + 999 + Original data in diamond.obj. + 0 + ENDSEC + 0 + SECTION + 2 + TABLES + 0 + ENDSEC + 0 + SECTION + 2 + BLOCKS + 0 + ENDSEC + 0 + SECTION + 2 + ENTITIES + 0 + LINE + 8 + 0 + 10 + 0.00 (X coordinate of beginning of line.) + 20 + 0.00 (Y coordinate of beginning of line.) + 30 + 0.00 (Z coordinate of beginning of line.) + 11 + 1.32 (X coordinate of end of line.) + 21 + 1.73 (Y coordinate of end of line.) + 31 + 2.25 (Z coordinate of end of line.) + 0 + 3DFACE + 8 + Cube + 10 + -0.50 (X coordinate of vertex 1) + 20 + 0.50 (Y coordinate of vertex 1) + 30 + 1.0 (Z coordinate of vertex 1) + 11 + 0.50 (X coordinate of vertex 2) + 21 + 0.50 (Y coordinate of vertex 2) + 31 + 1.0 (Z coordinate of vertex 2) + 12 + 0.50 (X coordinate of vertex 3) + 22 + 0.50 (Y coordinate of vertex 3) + 32 + 0.00 (Z coordinate of vertex 3) + 0 + ENDSEC + 0 + EOF + + Modified: + + 23 May 1999 + + Author: + + John Burkardt +*/ +{ + int code; + int count; + float cvec[3]; + int icor3; + char input1[LINE_MAX_LEN]; + char input2[LINE_MAX_LEN]; + int ivert; + float rval; + int width; + int linemode; + int cpos; + + linemode = 0; + ivert = 0; +/* + Read the next two lines of the file into INPUT1 and INPUT2. +*/ + + for ( ;; ) { + +/* + INPUT1 should contain a single integer, which tells what INPUT2 + will contain. +*/ + if ( fgets ( input1, LINE_MAX_LEN, filein ) == NULL ) { + break; + } + + text_num = text_num + 1; + + count = sscanf ( input1, "%d%n", &code, &width ); + if ( count <= 0 ) { + break; + } +/* + Read the second line, and interpret it according to the code. +*/ + if ( fgets ( input2, LINE_MAX_LEN, filein ) == NULL ) { + break; + } + + text_num = text_num + 1; + + if ( code == 0 ) { + + if ( ivert > 0 ) { + /* finish off the face */ + face_order[face_num] = ivert; + face_num = face_num + 1; + ivert = 0; + } + + if ( strncmp( input2, "LINE", 4 ) == 0 ) { + linemode = 1; + } + else if ( strncmp( input2, "3DFACE", 6 ) == 0 ) { + linemode = 0; + ivert = 0; + } + } + else { + + for (cpos = 0; input1[cpos] == ' '; cpos++) + {}; + + if ( input1[cpos] == '1' || input1[cpos] == '2' || input1[cpos] == '3' ) { + + count = sscanf ( input2, "%e%n", &rval, &width ); + + switch ( input1[cpos] ) + { + case '1': + if ( line_num > 0 ) { + if ( linemode ) { + line_dex[line_num] = - 1; + line_material[line_num] = - 1; + line_num = line_num + 1; + } + } + cvec[0] = rval; + break; + + case '2': + cvec[1] = rval; + break; + + case '3': + cvec[2] = rval; + + if ( cor3_num < 1000 ) { + icor3 = rcol_find ( cor3, 3, cor3_num, cvec ); + } + else { + icor3 = -1; + } + + if ( icor3 == -1 ) { + icor3 = cor3_num; + if ( cor3_num < COR3_MAX ) { + cor3[0][cor3_num] = cvec[0]; + cor3[1][cor3_num] = cvec[1]; + cor3[2][cor3_num] = cvec[2]; + } + cor3_num = cor3_num + 1; + } + else { + dup_num = dup_num + 1; + } + + if ( linemode ) { + line_dex[line_num] = icor3; + line_material[line_num] = 0; + line_num = line_num + 1; + } + else { + face[ivert][face_num] = icor3; + ivert = ivert + 1; + } + break; + + default: + break; + } + } + } + } + + if ( line_num > 0 ) { + if ( linemode ) { + line_dex[line_num] = - 1; + line_material[line_num] = - 1; + line_num = line_num + 1; + } + } + return SUCCESS; +} +/******************************************************************************/ + +int dxf_write ( FILE *fileout ) + +/******************************************************************************/ + +/* + Purpose: + + DXF_WRITE writes graphics information to an AutoCAD DXF file. + + Examples: + + 0 + SECTION + 2 + HEADER + 999 + diamond.dxf created by IVREAD. + 999 + Original data in diamond.obj. + 0 + ENDSEC + 0 + SECTION + 2 + TABLES + 0 + ENDSEC + 0 + SECTION + 2 + BLOCKS + 0 + ENDSEC + 0 + SECTION + 2 + ENTITIES + 0 + LINE + 8 + 0 + 10 + 0.00 (X coordinate of beginning of line.) + 20 + 0.00 (Y coordinate of beginning of line.) + 30 + 0.00 (Z coordinate of beginning of line.) + 11 + 1.32 (X coordinate of end of line.) + 21 + 1.73 (Y coordinate of end of line.) + 31 + 2.25 (Z coordinate of end of line.) + 0 + 3DFACE + 8 + Cube + 10 + -0.50 (X coordinate of vertex 1) + 20 + 0.50 (Y coordinate of vertex 1) + 30 + 1.0 (Z coordinate of vertex 1) + 11 + 0.50 (X coordinate of vertex 2) + 21 + 0.50 (Y coordinate of vertex 2) + 31 + 1.0 (Z coordinate of vertex 2) + 12 + 0.50 (X coordinate of vertex 3) + 22 + 0.50 (Y coordinate of vertex 3) + 32 + 0.00 (Z coordinate of vertex 3) + 0 + ENDSEC + 0 + EOF + + Modified: + + 16 May 1999 + + Author: + + John Burkardt +*/ +{ + int icor3; + int iline; + int iface; + int ivert; + int jcor3; + int newline; + int text_num; + +/* + Initialize. +*/ + text_num = 0; + + fprintf ( fileout, " 0\n" ); + fprintf ( fileout, "SECTION\n" ); + fprintf ( fileout, " 2\n" ); + fprintf ( fileout, "HEADER\n" ); + fprintf ( fileout, "999\n" ); + fprintf ( fileout, "%s created by IVCON.\n", fileout_name ); + fprintf ( fileout, "999\n" ); + fprintf ( fileout, "Original data in %s.\n", filein_name ); + fprintf ( fileout, " 0\n" ); + fprintf ( fileout, "ENDSEC\n" ); + text_num = text_num + 10; + + fprintf ( fileout, " 0\n" ); + fprintf ( fileout, "SECTION\n" ); + fprintf ( fileout, " 2\n" ); + fprintf ( fileout, "TABLES\n" ); + fprintf ( fileout, " 0\n" ); + fprintf ( fileout, "ENDSEC\n" ); + text_num = text_num + 6; + + fprintf ( fileout, " 0\n" ); + fprintf ( fileout, "SECTION\n" ); + fprintf ( fileout, " 2\n" ); + fprintf ( fileout, "BLOCKS\n" ); + fprintf ( fileout, " 0\n" ); + fprintf ( fileout, "ENDSEC\n" ); + text_num = text_num + 6; + + fprintf ( fileout, " 0\n" ); + fprintf ( fileout, "SECTION\n" ); + fprintf ( fileout, " 2\n" ); + fprintf ( fileout, "ENTITIES\n" ); + text_num = text_num + 4; +/* + Handle lines. +*/ + jcor3 = 0; + newline = TRUE; + + for ( iline = 0; iline < line_num; iline++ ) { + + icor3 = line_dex[iline]; + + if ( icor3 == -1 ) { + + newline = TRUE; + } + else { + + if ( newline == FALSE ) { + + fprintf ( fileout, " 0\n" ); + fprintf ( fileout, "LINE\n" ); + fprintf ( fileout, " 8\n" ); + fprintf ( fileout, " 0\n" ); + fprintf ( fileout, " 10\n" ); + fprintf ( fileout, "%f\n", cor3[0][jcor3] ); + fprintf ( fileout, " 20\n" ); + fprintf ( fileout, "%f\n", cor3[1][jcor3] ); + fprintf ( fileout, " 30\n" ); + fprintf ( fileout, "%f\n", cor3[2][jcor3] ); + fprintf ( fileout, " 11\n" ); + fprintf ( fileout, "%f\n", cor3[0][icor3] ); + fprintf ( fileout, " 21\n" ); + fprintf ( fileout, "%f\n", cor3[1][icor3] ); + fprintf ( fileout, " 31\n" ); + fprintf ( fileout, "%f\n", cor3[2][icor3] ); + + text_num = text_num + 16; + + } + + jcor3 = icor3; + newline = FALSE; + + } + } +/* + Handle faces. + (If FACE_ORDER is greater than 10, you're sure to have problems here) +*/ + for ( iface = 0; iface < face_num; iface++ ) { + + fprintf ( fileout, " 0\n" ); + fprintf ( fileout, "3DFACE\n" ); + fprintf ( fileout, " 8\n" ); + fprintf ( fileout, " Cube\n" ); + text_num = text_num + 4; + + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + + icor3 = face[ivert][iface]; + + fprintf ( fileout, "1%d\n", ivert ); + fprintf ( fileout, "%f\n", cor3[0][icor3] ); + fprintf ( fileout, "2%d\n", ivert ); + fprintf ( fileout, "%f\n", cor3[1][icor3] ); + fprintf ( fileout, "3%d\n", ivert ); + fprintf ( fileout, "%f\n", cor3[2][icor3] ); + + text_num = text_num + 6; + } + } + + fprintf ( fileout, " 0\n" ); + fprintf ( fileout, "ENDSEC\n" ); + fprintf ( fileout, " 0\n" ); + fprintf ( fileout, "EOF\n" ); + text_num = text_num + 4; +/* + Report. +*/ + printf ( "\n" ); + printf ( "DXF_WRITE - Wrote %d text lines.\n", text_num ); + + return SUCCESS; +} +/**********************************************************************/ + +void edge_null_delete ( void ) + +/**********************************************************************/ + +/* + Purpose: + + EDGE_NULL_DELETE deletes face edges with zero length. + + Modified: + + 16 July 1999 + + Author: + + John Burkardt +*/ +{ + float distsq; + int face2[ORDER_MAX]; + int face_order2; + int iface; + int inode; + int ivert; + int j; + int jnode; + int jvert; + int edge_num; + int edge_num_del; + float vertex_normal2[3][ORDER_MAX]; + float x; + float y; + float z; + + edge_num = 0; + edge_num_del = 0; +/* + Consider each face. +*/ + for ( iface = 0; iface < face_num; iface++ ) { +/* + Consider each pair of consecutive vertices. +*/ + face_order2 = 0; + + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + + edge_num = edge_num + 1; + + jvert = ivert + 1; + if ( jvert >= face_order[iface] ) { + jvert = 0; + } + + inode = face[ivert][iface]; + jnode = face[jvert][iface]; + + + x = cor3[0][inode] - cor3[0][jnode]; + y = cor3[1][inode] - cor3[1][jnode]; + z = cor3[2][inode] - cor3[2][jnode]; + + distsq = x * x + y * y + z * z; + + if ( distsq != 0.0 ) { + face2[face_order2] = face[ivert][iface]; + vertex_normal2[0][face_order2] = vertex_normal[0][ivert][iface]; + vertex_normal2[1][face_order2] = vertex_normal[1][ivert][iface]; + vertex_normal2[2][face_order2] = vertex_normal[2][ivert][iface]; + face_order2 = face_order2 + 1; + } + else { + edge_num_del = edge_num_del + 1; + } + + } + + face_order[iface] = face_order2; + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + face[ivert][iface] = face2[ivert]; + for ( j = 0; j < 3; j++ ) { + vertex_normal[j][ivert][iface] = vertex_normal2[j][ivert]; + } + } + + } + + printf ( "\n" ); + printf ( "EDGE_NULL_DELETE:\n" ); + printf ( " There are a total of %d edges.\n", edge_num ); + printf ( " Of these, %d were of zero length, and deleted.\n", edge_num_del ); + + return; +} +/**********************************************************************/ + +void face_area_set ( void ) + +/**********************************************************************/ + +/* + Purpose: + + FACE_AREA_SET computes the area of the faces. + + Formula: + + The area is the sum of the areas of the triangles formed by + node N with consecutive pairs of nodes. + + Reference: + + Adrian Bowyer and John Woodwark, + A Programmer's Geometry, + Butterworths, 1983. + + Modified: + + 17 July 1999 + + Author: + + John Burkardt +*/ +{ + float alpha; + float area_max; + float area_min; + float area_tri; + float base; + float dot; + float height; + int i; + int i1; + int i2; + int i3; + int iface; + int face_num_del; + float tol; + float x; + float x1; + float x2; + float x3; + float y; + float y1; + float y2; + float y3; + float z; + float z1; + float z2; + float z3; + + for ( iface = 0; iface < face_num; iface++ ) { + + face_area[iface] = 0.0; + + for ( i = 0; i < face_order[iface]-2; i++ ) { + + i1 = face[i][iface]; + i2 = face[i+1][iface]; + i3 = face[i+2][iface]; + + x1 = cor3[0][i1]; + y1 = cor3[1][i1]; + z1 = cor3[2][i1]; + + x2 = cor3[0][i2]; + y2 = cor3[1][i2]; + z2 = cor3[2][i2]; + + x3 = cor3[0][i3]; + y3 = cor3[1][i3]; + z3 = cor3[2][i3]; +/* + Find the projection of (P3-P1) onto (P2-P1). +*/ + dot = + ( x2 - x1 ) * ( x3 - x1 ) + + ( y2 - y1 ) * ( y3 - y1 ) + + ( z2 - z1 ) * ( z3 - z1 ); + + base = sqrt ( + ( x2 - x1 ) * ( x2 - x1 ) + + ( y2 - y1 ) * ( y2 - y1 ) + + ( z2 - z1 ) * ( z2 - z1 ) ); +/* + The height of the triangle is the length of (P3-P1) after its + projection onto (P2-P1) has been subtracted. +*/ + if ( base == 0.0 ) { + height = 0.0; + } + else { + + alpha = dot / ( base * base ); + + x = x3 - x1 - alpha * ( x2 - x1 ); + y = y3 - y1 - alpha * ( y2 - y1 ); + z = z3 - z1 - alpha * ( z2 - z1 ); + + height = sqrt ( x * x + y * y + z * z ); + + } + + area_tri = 0.5 * base * height; + + face_area[iface] = face_area[iface] + area_tri; + + } + + } + + area_min = face_area[0]; + area_max = face_area[0]; + + for ( iface = 1; iface < face_num; iface++ ) { + if ( area_min > face_area[iface] ) { + area_min = face_area[iface]; + } + if ( area_max < face_area[iface] ) { + area_max = face_area[iface]; + } + } + + printf ( "\n" ); + printf ( "FACE_AREA_SET:\n" ); + printf ( " Minimum face area is %f\n", area_min ); + printf ( " Maximum face area is %f\n", area_max ); + + tol = area_max / 10000.0; + + if ( area_min < tol ) { + + face_num_del = 0; + + for ( iface = 0; iface < face_num; iface++ ) { + if ( face_area[iface] < tol ) { + face_order[iface] = 0; + face_num_del = face_num_del + 1; + } + } + + printf ( " Marked %d tiny faces for deletion.\n", face_num_del ); + + } + + return; +} +/******************************************************************************/ + +void face_normal_ave ( void ) + +/******************************************************************************/ + +/* + Purpose: + + FACE_NORMAL_AVE sets face normals as average of face vertex normals. + + Modified: + + 09 October 1998 + + Author: + + John Burkardt +*/ +{ + int i; + int iface; + int ivert; + int nfix; + float norm; + float x; + float y; + float z; + + if ( face_num <= 0 ) { + return; + } + + nfix = 0; + + for ( iface = 0; iface < face_num; iface++ ) { + +/* + Check the norm of the current normal vector. +*/ + x = face_normal[0][iface]; + y = face_normal[1][iface]; + z = face_normal[2][iface]; + norm = ( float ) sqrt ( x * x + y * y + z * z ); + + if ( norm == 0.0 ) { + + nfix = nfix + 1; + + for ( i = 0; i < 3; i++ ) { + face_normal[i][iface] = 0.0; + } + + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + for ( i = 0; i < 3; i++ ) { + face_normal[i][iface] = face_normal[i][iface] + + vertex_normal[i][ivert][iface]; + } + } + + x = face_normal[0][iface]; + y = face_normal[1][iface]; + z = face_normal[2][iface]; + norm = ( float ) sqrt ( x * x + y * y + z * z ); + + if ( norm == 0.0 ) { + for ( i = 0; i < 3; i++ ) { + face_normal[i][iface] = ( float ) ( 1.0 / sqrt ( 3.0 ) ); + } + } + else { + for ( i = 0; i < 3; i++ ) { + face_normal[i][iface] = face_normal[i][iface] / norm; + } + } + } + } + + if ( nfix > 0 ) { + printf ( "\n" ); + printf ( "FACE_NORMAL_AVE: Recomputed %d face normals\n", nfix ); + printf ( " by averaging face vertex normals.\n" ); + } + return; +} +/**********************************************************************/ + +void face_null_delete ( void ) + +/**********************************************************************/ + +/* + Purpose: + + FACE_NULL_DELETE deletes faces of order less than 3. + + Comments: + + Thanks to Susan M. Fisher, University of North Carolina, + Department of Computer Science, for pointing out a coding error + in FACE_NULL_DELETE that was overwriting all the data! + + Modified: + + 30 November 1999 + + Author: + + John Burkardt +*/ +{ + int iface; + int ivert; + int j; + int face_num2; +/* + FACE_NUM2 is the number of faces we'll keep. +*/ + face_num2 = 0; +/* + Check every face. +*/ + for ( iface = 0; iface < face_num; iface++ ) { +/* + Keep it only if it has order 3 or more. +*/ + if ( face_order[iface] >= 3 ) { +/* + We don't have to slide data down in the array until + NUMFACE2 and IFACE get out of synch, that is, after + we've discarded at least one face. +*/ + if ( face_num2 != iface ) { + + face_area[face_num2] = face_area[iface]; + face_material[face_num2] = face_material[iface]; + face_order[face_num2] = face_order[iface]; + for ( ivert = 0; ivert < ORDER_MAX; ivert++ ) { + face[ivert][face_num2] = face[ivert][iface]; + vertex_material[ivert][face_num2] = vertex_material[ivert][iface]; + for ( j = 0; j < 3; j++ ) { + vertex_normal[j][ivert][face_num2] = vertex_normal[j][ivert][iface]; + } + } + + } +/* + Update the count only after we've used the un-incremented value + as a pointer. +*/ + face_num2 = face_num2 + 1; + + } + + } + + printf ( "\n" ); + printf ( "FACE_NULL_DELETE\n" ); + printf ( " There are a total of %d faces.\n", face_num ); + printf ( " Of these, %d passed the order test.\n", face_num2 ); + + face_num = face_num2; + + return; +} +/******************************************************************************/ + +int face_print ( int iface ) + +/******************************************************************************/ + +/* + Purpose: + + FACE_PRINT prints out information about a face. + + Modified: + + 31 August 1998 + + Author: + + John Burkardt +*/ +{ + int ivert; + int j; + int k; + + if ( iface < 0 || iface > face_num-1 ) { + printf ( "\n" ); + printf ( "FACE_PRINT - Fatal error!\n" ); + printf ( " Face indices must be between 1 and %d\n", face_num ); + printf ( " But your requested value was %d\n", iface ); + return ERROR; + } + + printf ( "\n" ); + printf ( "FACE_PRINT\n" ); + printf ( " Information about face %d\n", iface ); + printf ( "\n" ); + printf ( " Number of vertices is %d\n", face_order[iface] ); + printf ( "\n" ); + printf ( " Vertex list:\n" ); + printf ( " Vertex #, Node #, Material #, X, Y, Z:\n" ); + printf ( "\n" ); + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + j = face[ivert][iface]; + k = vertex_material[ivert][iface]; + printf ( " %d %d %d %f %f %f\n", ivert, j, k, cor3[0][j], cor3[1][j], + cor3[2][j] ); + } + + printf ( "\n" ); + printf ( " Face normal vector:\n" ); + printf ( "\n" ); + printf ( " %f %f %f\n", face_normal[0][iface], face_normal[1][iface], + face_normal[2][iface] ); + + printf ( "\n" ); + printf ( " Vertex face normals:\n" ); + printf ( "\n" ); + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + printf ( " %d %f %f %f\n", ivert, vertex_normal[0][ivert][iface], + vertex_normal[1][ivert][iface], vertex_normal[2][ivert][iface] ); + } + + return SUCCESS; + +} +/**********************************************************************/ + +void face_reverse_order ( void ) + +/**********************************************************************/ + +/* + Purpose: + + FACE_REVERSE_ORDER reverses the order of the nodes in each face. + + Discussion: + + Reversing the order of the nodes requires that the normal vectors + be reversed as well, so this routine will automatically reverse + the normals associated with nodes, vertices and faces. + + Modified: + + 28 June 1999 + + Author: + + John Burkardt +*/ +{ + int i; + int iface; + int itemp; + int ivert; + int j; + int m; + float temp; + + for ( iface = 0; iface < face_num; iface++ ) { + + m = face_order[iface]; + + for ( ivert = 0; ivert < ( m / 2 ); ivert++ ) { + + itemp = face[ivert][iface]; + face[ivert][iface] = face[m-1-ivert][iface]; + face[m-1-ivert][iface] = itemp; + + itemp = vertex_material[ivert][iface]; + vertex_material[ivert][iface] = vertex_material[m-1-ivert][iface]; + vertex_material[m-1-ivert][iface] = itemp; + + for ( j = 0; j < 3; j++ ) { + temp = vertex_normal[j][ivert][iface]; + vertex_normal[j][ivert][iface] = vertex_normal[j][m-1-ivert][iface]; + vertex_normal[j][m-1-ivert][iface] = temp; + } + + for ( j = 0; j < 2; j++ ) { + temp = vertex_tex_uv[j][ivert][iface]; + vertex_tex_uv[j][ivert][iface] = vertex_tex_uv[j][m-1-ivert][iface]; + vertex_tex_uv[j][m-1-ivert][iface] = temp; + } + + } + + } + + for ( i = 0; i < cor3_num; i++ ) { + for ( j = 0; j < 3; j++ ) { + cor3_normal[j][i] = - cor3_normal[j][i]; + } + } + + for ( i = 0; i < face_num; i++ ) { + for ( j = 0; j < 3; j++ ) { + face_normal[j][i] = - face_normal[j][i]; + } + } + + printf ( "\n" ); + printf ( "FACE_REVERSE_ORDER\n" ); + printf ( " Each list of nodes defining a face\n" ); + printf ( " has been reversed; related information,\n" ); + printf ( " including normal vectors, was also updated.\n" ); + + return; +} + +/******************************************************************************/ + +int face_subset ( void ) + +/******************************************************************************/ + +/* + Purpose: + + FACE_SUBSET selects a subset of the current faces as the new object. + + Warning: + + The original graphic object is overwritten by the new one. + + Modified: + + 12 October 1998 + + Author: + + John Burkardt + +*/ +{ + int i; + int iface; + int iface1; + int iface2; + int inc; + int ivert; + int j; + int k; + int cor3_num2; + + line_num = 0; +/* + Get the first and last faces to save, IFACE1 and IFACE2. +*/ + printf ( "\n" ); + printf ( "Enter lowest face number to save between 0 and %d:\n", face_num-1 ); + scanf ( "%d", &iface1 ); + if ( iface1 < 0 || iface1 > face_num - 1 ) { + printf ( "Illegal choice!\n" ); + return ERROR; + } + + printf ( "\n" ); + printf ( "Enter highest face number to save between %d and %d:\n", + iface1, face_num-1 ); + scanf ( "%d", &iface2 ); + if ( iface2 < iface1 || iface2 > face_num - 1 ) { + printf ( "Illegal choice!\n" ); + return ERROR; + } + + inc = iface1; +/* + "Slide" the data for the saved faces down the face arrays. +*/ + for ( iface = 0; iface < iface2 + 1 - iface1; iface++ ) { + face_order[iface] = face_order[iface+inc]; + for ( ivert = 0; ivert < ORDER_MAX; ivert++ ) { + face[ivert][iface] = face[ivert][iface+inc]; + vertex_material[ivert][iface] = vertex_material[ivert][iface+inc]; + for ( i = 0; i < 3; i++ ) { + vertex_normal[i][ivert][iface] = + vertex_normal[i][ivert][iface+inc]; + vertex_rgb[i][ivert][iface] = vertex_rgb[i][ivert][iface+inc]; + } + } + for ( i = 0; i < 3; i++ ) { + face_normal[i][iface] = face_normal[i][iface+inc]; + } + } +/* + Now reset the number of faces. +*/ + face_num = iface2 + 1 - iface1; +/* + Now, for each point I, set LIST(I) = J if point I is the J-th + point we are going to save, and 0 otherwise. Then J will be + the new label of point I. +*/ + for ( i = 0; i < cor3_num; i++ ) { + list[i] = -1; + } + + cor3_num2 = 0; + + for ( iface = 0; iface < face_num; iface++ ){ + for ( ivert = 0; ivert < face_order[iface]; ivert++ ){ + j = face[ivert][iface]; + if ( list[j] == -1 ) { + cor3_num2 = cor3_num2 + 1; + list[j] = cor3_num2; + } + } + } +/* + Now make the nonzero list entries rise in order, so that + we can compress the COR3 data in a minute. +*/ + cor3_num2 = 0; + + for ( i = 0; i < cor3_num; i++ ) { + if ( list[i] != -1 ) { + list[i] = cor3_num2; + cor3_num2 = cor3_num2 + 1; + } + } +/* + Relabel the FACE array with the new node indices. +*/ + for ( iface = 0; iface < face_num; iface++ ){ + for ( ivert = 0; ivert < face_order[iface]; ivert++ ){ + j = face[ivert][iface]; + face[ivert][iface] = list[j]; + } + } +/* + Rebuild the COR3 array by sliding data down. +*/ + for ( i = 0; i < cor3_num; i++ ){ + k = list[i]; + if ( k != -1 ) { + for ( j = 0; j < 3; j++ ) { + cor3[j][k] = cor3[j][i]; + } + } + } + + cor3_num = cor3_num2; + + return SUCCESS; +} +/**********************************************************************/ + +void face_to_line ( void ) + +/**********************************************************************/ + +/* + Purpose: + + FACE_TO_LINE converts face information to line information. + + Discussion: + + In some cases, the graphic information represented by polygonal faces + must be converted to a representation based solely on line segments. + This is particularly true if a VLA file is being written. + + Modified: + + 26 May 1999 + + Author: + + John Burkardt +*/ +{ + int icor3; + int iface; + int ivert; + int jcor3; + int jvert; +/* + Case 0: + No line pruning. +*/ + if ( line_prune == 0 ) { + + for ( iface = 0; iface < face_num; iface++ ) { + + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + + icor3 = face[ivert][iface]; + + line_num = line_num + 1; + if ( line_num <= LINES_MAX ) { + line_dex[line_num] = icor3; + line_material[line_num] = vertex_material[ivert][iface]; + } + } + + ivert = 0; + icor3 = face[ivert][iface]; + + line_num = line_num + 1; + if ( line_num <= LINES_MAX ) { + line_dex[line_num] = icor3; + line_material[line_num] = vertex_material[ivert][iface]; + } + + line_num = line_num + 1; + if ( line_num <= LINES_MAX ) { + line_dex[line_num] = -1; + line_material[line_num] = -1; + } + } + + } +/* + Case 2: + Simple-minded line pruning. + Only draw line (I,J) if I < J. +*/ + else { + + for ( iface = 0; iface < face_num; iface++ ) { + + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + + icor3 = face[ivert][iface]; + + if ( ivert + 1 < face_order[iface] ) { + jvert = ivert + 1; + } + else { + jvert = 0; + } + + jcor3 = face[jvert][iface]; + + if ( icor3 < jcor3 ) { + + if ( line_num + 3 < LINES_MAX ) { + + line_num = line_num + 1; + line_dex[line_num] = icor3; + line_material[line_num] = vertex_material[ivert][iface]; + + line_num = line_num + 1; + line_dex[line_num] = jcor3; + line_material[line_num] = vertex_material[jvert][iface]; + + line_num = line_num + 1; + line_dex[line_num] = -1; + line_material[line_num] = -1; + + } + } + } + } + + } + + return; +} +/**********************************************************************/ + +void face_to_vertex_material ( void ) + +/**********************************************************************/ + +/* + Purpose: + + FACE_TO_VERTEX_MAT extends face material definitions to vertices. + + Discussion: + + Assuming material indices are defined for all the faces, this + routine assigns to each vertex of a face the material of that face. + + Modified: + + 22 May 1999 + + Author: + + John Burkardt +*/ +{ + int iface; + int ivert; + + for ( iface = 0; iface < face_num; iface++ ) { + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + vertex_material[ivert][iface] = face_material[iface]; + } + } + + return; +} +/******************************************************************************/ + +char *file_ext ( char *file_name ) + +/******************************************************************************/ + +/* + Purpose: + + FILE_EXT picks out the extension in a file name. + + Modified: + + 21 July 1998 + + Author: + + John Burkardt +*/ +{ + int i; + + i = char_index_last ( file_name, '.' ); + + if ( i == -1 ) { + return NULL; + } + else { + return file_name + i + 1; + } +} +/******************************************************************************/ + +float float_read ( FILE *filein ) + +/******************************************************************************/ + +/* + Purpose: + + FLOAT_READ reads 1 float from a binary file. + + Modified: + + 24 May 1999 +*/ +{ + float rval; + float temp; + + fread ( &temp, sizeof ( float ), 1, filein ); + + if ( byte_swap == TRUE ) { + rval = float_reverse_bytes ( temp ); + } + else { + rval = temp; + } + + return rval; +} +/******************************************************************************/ + +float float_reverse_bytes ( float x ) + +/******************************************************************************/ + +/* + Purpose: + + FLOAT_REVERSE_BYTES reverses the four bytes in a float. + + Modified: + + 24 May 1999 + + Author: + + John Burkardt + + Parameters: + + X, a float whose bytes are to be reversed. + + FLOAT_REVERSE_BYTES, a float with bytes in reverse order from those in X. +*/ +{ + char c; + union { + float yfloat; + char ychar[4]; + } y; + + y.yfloat = x; + + c = y.ychar[0]; + y.ychar[0] = y.ychar[3]; + y.ychar[3] = c; + + c = y.ychar[1]; + y.ychar[1] = y.ychar[2]; + y.ychar[2] = c; + + return ( y.yfloat ); +} +/******************************************************************************/ + +int float_write ( FILE *fileout, float float_val ) + +/******************************************************************************/ + +/* + Purpose: + + FLOAT_WRITE writes 1 float to a binary file. + + Modified: + + 23 September 1998 +*/ +{ + int nbyte = sizeof ( float ); + float temp; + + if ( byte_swap == TRUE ) { + temp = float_reverse_bytes ( float_val ); + } + else { + temp = float_val; + } + + fwrite ( &temp, nbyte, 1, fileout ); + + return nbyte; +} +/******************************************************************************/ + +int gmod_arch_check ( void ) + +/******************************************************************************/ + +/* + Purpose: + + GMOD_ARCH_CHECK inquires into some features of the computer architecture. + + Modified: + + 19 May 1999 + + Author: + + Zik Saleeba (zik@zikzak.net) +*/ +{ + static unsigned char one[4]; + int temp; + + temp = sizeof ( float ); + if ( temp != 4 ) { + return FALSE; + } + + *(float *)one = 1.0; + + if (one[0] == 0 && one[1] == 0 && one[2] == 128 && one[3] == 63) { + /* little endian IEEE floats */ + return TRUE; + } + + if (one[0] == 63 && one[1] == 128 && one[2] == 0 && one[3] == 0) { + /* big endian IEEE floats */ + return TRUE; + } + + return FALSE; +} +/******************************************************************************/ + +int gmod_read ( FILE *filein ) + +/******************************************************************************/ + +/* + Purpose: + + GMOD_READ reads a golgotha GMOD file. + + Modified: + + 19 May 1999 + + Author: + + Zik Saleeba (zik@zikzak.net) +*/ + +/* +golgotha GMOD file format: + + + FILE HEADER + +w32 magic number f9 fa 63 1e +w32 number of sections +[ number of sections + w32 section id + w32 section offset +] + + + TEXTURE NAME SECTION - section id = 0x13 (19) + +w16 number of faces +[ number of faces + w16 texture name length + [ texture name length + w8 texture name character + ] +] + + + + MODEL QUADS SECTION - section id = 0x12 (18) + +w16 number of faces +[ number of faces + [ four vertices + w16 vertex index + float xpos (0.0-1.0) + float ypos (0.0-1.0) + ] + float scale + w16 flags + float xnormal (normal should be normalised) + float ynormal + float znormal +] + + + VERTEX ARRAY SECTION - section id = 0x14 (20) + +w16 number of vertices +w16 number of animations +w16 length of animation name +[ length of animation name + w8 animation name character +] +w16 number of frames in animation +[ number of frames in animation + [ number of vertices + float xpos + float ypos + float zpos + float xnormal + float ynormal + float znormal + ] +] +*/ +{ + unsigned char MagicNumber[4]; + unsigned long int NumSections; + int SectionCount; + unsigned long int SectionID[GMOD_MAX_SECTIONS]; + unsigned long int SectionOffset[GMOD_MAX_SECTIONS]; + + unsigned short NumAnimations; + unsigned short NumFrames; + unsigned short FaceCount; + unsigned short TextureCount; + int VertexCount; + + float Scale; + unsigned short Flags; + unsigned short TextureNameLen; + unsigned short AnimationNameLen; + int Order; + int MaxCor = 0; + + /* + * check if we can handle this architecture + */ + + if (!gmod_arch_check()) { + printf("GMOD_READ - This architecture not supported.\n"); + return ERROR; + } + + /* + * read the file header + */ + + /* read the magic number */ + fread(MagicNumber, 1, 4, filein); + if (MagicNumber[0] != 0xf9 || + MagicNumber[1] != 0xfa || + MagicNumber[2] != 0x63 || + MagicNumber[3] != 0x1e) { + printf("GMOD_READ - Bad magic number on GMOD file.\n"); + return ERROR; + } + + NumSections = gmod_read_w32(filein); + if (NumSections >= GMOD_MAX_SECTIONS) { + printf("GMOD_READ - Too many sections (%ld) in GMOD file - please increase static limit GMOD_MAX_SECTIONS\n", NumSections); + return ERROR; + } + +/* + Read the sections. +*/ + + for ( SectionCount = 0; SectionCount < ( int ) NumSections; SectionCount++ ) { + SectionID[SectionCount] = gmod_read_w32(filein); + SectionOffset[SectionCount] = gmod_read_w32(filein); + } +/* + Read each successive section. +*/ + for ( SectionCount = 0; SectionCount < ( int ) NumSections; SectionCount++ ) { +/* + Go to the start of the section. +*/ + fseek ( filein, ( long int ) SectionOffset[SectionCount], SEEK_SET ); +/* + What type of section is it? +*/ + switch (SectionID[SectionCount]) { + +/* + Model section. +*/ + case G1_SECTION_MODEL_QUADS: +/* + Get the number of faces. +*/ + face_num = gmod_read_w16 ( filein ); + + if (face_num > FACE_MAX) { + printf("GMOD_READ - Too many faces (%d) in GMOD file - please increase static limit FACE_MAX.\n", face_num); + return ERROR; + } +/* + Get the information on each face. +*/ + for ( FaceCount = 0; FaceCount < ( unsigned short ) face_num; FaceCount++ ) { + + Order = 0; + for ( VertexCount = 0; VertexCount < 4; VertexCount++ ) { + + /* read the vertex index */ + + face[VertexCount][FaceCount] = gmod_read_w16(filein); + + if (face[VertexCount][FaceCount] != GMOD_UNUSED_VERTEX) { + Order = VertexCount+1; + if (MaxCor < face[VertexCount][FaceCount]) + MaxCor = face[VertexCount][FaceCount]; + } + + /* read the texture position */ + + vertex_tex_uv[0][VertexCount][FaceCount] = gmod_read_float(filein); + vertex_tex_uv[1][VertexCount][FaceCount] = gmod_read_float(filein); + } + + /* scale and flags */ + + fread(&Scale, sizeof(Scale), 1, filein); + Flags = gmod_read_w16(filein); + + if ( debug ) { + printf ( "Flags = %d\n", Flags ); + } + + /* normal vector */ + + face_normal[0][FaceCount] = gmod_read_float(filein); + face_normal[1][FaceCount] = gmod_read_float(filein); + face_normal[2][FaceCount] = gmod_read_float(filein); + + /* the order is the number of used vertices */ + + face_order[FaceCount] = Order; + } + break; + + +/* + Texture name section. +*/ + + case G1_SECTION_MODEL_TEXTURE_NAMES: + + /* get the number of textures */ + + texture_num = gmod_read_w16(filein); + if (texture_num > TEXTURE_MAX) { + printf ( "GMOD_READ - Too many texture maps (%d) in GMOD file.\n", texture_num ); + printf ( " Increase static limit TEXTURE_MAX.\n" ); + return ERROR; + } + face_num = texture_num; + + for (TextureCount = 0; TextureCount < ( unsigned short ) texture_num; + TextureCount++) { + + /* read the texture name */ + + TextureNameLen = gmod_read_w16(filein); + fread ( texture_name[TextureCount], sizeof(char), TextureNameLen, filein); + texture_name[TextureCount][TextureNameLen] = '\0'; + } + break; + + + /* + * vertex section + */ + + case G1_SECTION_MODEL_VERT_ANIMATION: + + /* get the number of vertices */ + + cor3_num = gmod_read_w16(filein); + if (cor3_num > COR3_MAX) { + printf("GMOD_READ - Too many vertices (%d) in GMOD file - please increase static limit COR3_MAX.\n", cor3_num); + return ERROR; + } + +/* + Get the number of animations. +*/ + + NumAnimations = gmod_read_w16(filein); + + if (NumAnimations > 1) { + printf ( "GMOD_READ - Fatal error!\n" ); + printf ( " GMOD files can only handle one animation.\n" ); + printf ( " This file contains %d.\n", NumAnimations ); + return ERROR; + } + + /* read the animation name */ + AnimationNameLen = gmod_read_w16(filein); + fread ( anim_name, sizeof(char), AnimationNameLen, filein); + anim_name[AnimationNameLen] = '\0'; + + /* get the number of frames of animation */ + NumFrames = gmod_read_w16(filein); + if (NumFrames > 1) + printf("GMOD_READ - Too many frames of animation (%d) in GMOD file - will only use 1.\n", NumFrames); + + /* go through all the vertices, reading each one */ + for (VertexCount = 0; VertexCount < cor3_num; VertexCount++) { + + /* read the vertex */ + cor3[0][VertexCount] = gmod_read_float(filein); + cor3[1][VertexCount] = gmod_read_float(filein); + cor3[2][VertexCount] = gmod_read_float(filein); + + /* read the normal */ + cor3_normal[0][VertexCount] = gmod_read_float(filein); + cor3_normal[1][VertexCount] = gmod_read_float(filein); + cor3_normal[2][VertexCount] = gmod_read_float(filein); + } + break; + + default: + continue; + } + } + +/* + Set some other stray info. +*/ + line_num = 0; + +/* + Check for sanity. +*/ + if ( MaxCor >= cor3_num ) { + printf ( "GMOD_READ - Maximum coordinate index (%d)\n", MaxCor ); + printf ( " exceeded number of coordinates (%d) in GMOD file.\n", cor3_num ); + return ERROR; + } + + return SUCCESS; +} +/******************************************************************************/ + +float gmod_read_float ( FILE *filein ) + +/******************************************************************************/ + +/* + Purpose: + + GMOD_READ_FLOAT reads a float from a Golgotha GMOD file. + + Modified: + + 19 May 1999 + + Author: + + Zik Saleeba (zik@zikzak.net) +*/ +{ + int endian = 1; + unsigned char *out_pos; + int i; + float Val; + + if (*(char *)&endian == 1) { + /* we're little-endian, which is native for GMOD floats */ + fread(&Val, sizeof(Val), 1, filein); + } + else { + /* we're big-endian, flip `em */ + out_pos = (unsigned char *)&Val; + for ( i = sizeof(Val)-1; i >= 0; i-- ) { + *(out_pos+i) = fgetc(filein); + } + } + + return Val; +} +/******************************************************************************/ + +unsigned short gmod_read_w16 ( FILE *filein ) + +/******************************************************************************/ + +/* + Purpose: + + GMOD_READ_W16 reads a 16 bit word from a Golgotha GMOD file. + + Modified: + + 19 May 1999 + + Author: + + Zik Saleeba (zik@zikzak.net) +*/ +{ + unsigned char Byte1; + unsigned char Byte2; + + Byte1 = fgetc ( filein ); + Byte2 = fgetc ( filein ); + + return Byte1 | (((unsigned short)Byte2) << 8); +} +/******************************************************************************/ + +unsigned long gmod_read_w32 ( FILE *filein ) + +/******************************************************************************/ + +/* + Purpose: + + GMOD_READ_W32 reads a 32 bit word from a Golgotha GMOD file. + + Modified: + + 19 May 1999 + + Author: + + Zik Saleeba (zik@zikzak.net) +*/ +{ + unsigned char Byte1, Byte2, Byte3, Byte4; + + Byte1 = fgetc(filein); + Byte2 = fgetc(filein); + Byte3 = fgetc(filein); + Byte4 = fgetc(filein); + + return Byte1 | + (((unsigned long)Byte2) << 8) | + (((unsigned long)Byte3) << 16) | + (((unsigned long)Byte4) << 24); +} + +/******************************************************************************/ + +int gmod_write ( FILE *fileout ) { + +/******************************************************************************/ + +/* + Purpose: + + GMOD_WRITE writes a Golgotha GMOD file. + + Modified: + + 19 May 1999 + + Author: + + Zik Saleeba (zik@zikzak.net) +*/ + static unsigned char MagicNumber[4] = { 0xf9, 0xfa, 0x63, 0x1e }; + unsigned long NumSections; + unsigned long SectionHeaderPos; + unsigned long TextureNameSectionPos; + unsigned long ModelSectionPos; + unsigned long VertexSectionPos; + + int VertexCount; + int FaceCount; + int TextureCount; + unsigned long SectionCount; + float Scale; + float Min[3]; + float Max[3]; + int CorNumber; + int DimensionCount; + float MaxWidth; +/* + Check if we can handle this architecture. +*/ + + if ( !gmod_arch_check() ) { + printf("GMOD_WRITE - This architecture not supported.\n"); + return ERROR; + } + +/* + Write the file header. +*/ + +/* + Write the magic number. +*/ + fwrite ( MagicNumber, sizeof(char), 4, fileout ); + +/* + Write the number of sections. +*/ + NumSections = 3; + gmod_write_w32 ( NumSections, fileout ); + +/* + Write a dummy section header which we'll overwrite later. +*/ + SectionHeaderPos = ftell ( fileout ); + for (SectionCount = 0; SectionCount < NumSections; SectionCount++) { + gmod_write_w32 ( 0, fileout ); + gmod_write_w32 ( 0, fileout ); + } +/* + Texture name section. +*/ + +/* + Take note of where we are in the file. +*/ + TextureNameSectionPos = ftell ( fileout ); + +/* + Write the number of textures. +*/ + + gmod_write_w16 ( ( unsigned short ) face_num, fileout ); +/* + Write the texture names. +*/ + for ( TextureCount = 0; TextureCount < face_num; TextureCount++ ) { + + gmod_write_w16 ( ( unsigned short ) strlen ( texture_name[TextureCount] ), + fileout ); + + fwrite ( texture_name[TextureCount], strlen ( texture_name[TextureCount] ), + 1, fileout ); + } + +/* + Model section. +*/ + +/* + Take note of where we are in the file. +*/ + + ModelSectionPos = ftell(fileout); + +/* + Write the number of faces. +*/ + + gmod_write_w16 ( ( unsigned short ) face_num, fileout ); + +/* + Write the information on each face. +*/ + + for ( FaceCount = 0; FaceCount < face_num; FaceCount++ ) { + + for (VertexCount = 0; VertexCount < ((face_order[FaceCount] < 4) ? face_order[FaceCount] : 4); VertexCount++) { + +/* + Write the vertex index. +*/ + gmod_write_w16 ( ( unsigned short ) face[VertexCount][FaceCount], fileout ); + +/* + Write the texture position. +*/ + + gmod_write_float ( vertex_tex_uv[0][VertexCount][FaceCount], fileout ); + gmod_write_float ( vertex_tex_uv[1][VertexCount][FaceCount], fileout ); + } + +/* + Write any extra vertices which are unused. +*/ + + for ( ; VertexCount < 4; VertexCount++ ) { + +/* + Write the vertex index. +*/ + gmod_write_w16 ( GMOD_UNUSED_VERTEX, fileout ); +/* + Write the texture position. +*/ + gmod_write_float ( vertex_tex_uv[0][VertexCount][FaceCount], fileout ); + + gmod_write_float ( vertex_tex_uv[1][VertexCount][FaceCount], fileout ); + } + +/* + Scale and flags. +*/ + +/* + Find the bounding box. +*/ + + for ( DimensionCount = 0; DimensionCount < 3; DimensionCount++ ) { + + CorNumber = face[0][FaceCount]; + Min[DimensionCount] = cor3[DimensionCount][CorNumber]; + Max[DimensionCount] = cor3[DimensionCount][CorNumber]; + + for (VertexCount = 1; VertexCount < ((face_order[FaceCount] < 4) ? face_order[FaceCount] : 4); VertexCount++) { + + CorNumber = face[VertexCount][FaceCount]; + + if (Min[DimensionCount] > cor3[DimensionCount][CorNumber]) + Min[DimensionCount] = cor3[DimensionCount][CorNumber]; + + if (Max[DimensionCount] < cor3[DimensionCount][CorNumber]) + Max[DimensionCount] = cor3[DimensionCount][CorNumber]; + } + } + +/* + The scale is the "width" of the face for mipmapping - + I just take the maximum bounding box dimension. +*/ + MaxWidth = Max[0] - Min[0]; + for ( DimensionCount = 1; DimensionCount < 3; DimensionCount++ ) { + + if ( MaxWidth < Max[DimensionCount] - Min[DimensionCount] ) + MaxWidth = Max[DimensionCount] - Min[DimensionCount]; + } + + Scale = MaxWidth; + fwrite ( &Scale, sizeof(Scale), 1, fileout ); + +/* + Flags are just nothing. +*/ + gmod_write_w16 ( 0, fileout ); +/* + Normal vector. +*/ + gmod_write_float ( face_normal[0][FaceCount], fileout ); + gmod_write_float ( face_normal[1][FaceCount], fileout ); + gmod_write_float ( face_normal[2][FaceCount], fileout ); + } + +/* + Vertex section. +*/ + +/* + Take note of where we are in the file. +*/ + + VertexSectionPos = ftell ( fileout ); + +/* + Write the number of vertices. +*/ + + gmod_write_w16 ( ( unsigned short ) cor3_num, fileout ); + +/* + Write the number of animations. +*/ + + gmod_write_w16 ( 1, fileout ); + +/* + Write the animation name. +*/ + + gmod_write_w16 ( 0, fileout ); + +/* + Write the number of frames of animation. +*/ + + gmod_write_w16 ( 1, fileout ); + +/* + Go through all the vertices, writing each one. +*/ + + for ( VertexCount = 0; VertexCount < cor3_num; VertexCount++ ) { + +/* + Write the vertex. +*/ + gmod_write_float ( cor3[0][VertexCount], fileout ); + gmod_write_float ( cor3[1][VertexCount], fileout ); + gmod_write_float ( cor3[2][VertexCount], fileout ); + +/* + Write the normal. +*/ + gmod_write_float ( cor3_normal[0][VertexCount], fileout ); + gmod_write_float ( cor3_normal[1][VertexCount], fileout ); + gmod_write_float ( cor3_normal[2][VertexCount], fileout ); + } +/* + Now rewrite the section header. +*/ + +/* + Go back to the section header. +*/ + fseek ( fileout, ( long int ) SectionHeaderPos, SEEK_SET ); + +/* + Write the texture name section header. +*/ + gmod_write_w32 ( G1_SECTION_MODEL_TEXTURE_NAMES, fileout ); + gmod_write_w32 ( TextureNameSectionPos, fileout ); + +/* + Write the model section header. +*/ + gmod_write_w32 ( G1_SECTION_MODEL_QUADS, fileout ); + gmod_write_w32 ( ModelSectionPos, fileout ); + +/* + Write the vertex section header. +*/ + gmod_write_w32 ( G1_SECTION_MODEL_VERT_ANIMATION, fileout ); + gmod_write_w32 ( VertexSectionPos, fileout ); + + return SUCCESS; +} + +/******************************************************************************/ + +void gmod_write_float ( float Val, FILE *fileout ) + +/******************************************************************************/ + +/* + Purpose: + + GMOD_WRITE_FLOAT writes a float to a Golgotha GMOD file. + + Modified: + + 19 May 1999 + + Author: + + Zik Saleeba (zik@zikzak.net) +*/ +{ + int endian = 1; + unsigned char *out_pos; + int i; + + if (*(char *)&endian == 1) { + /* we're little-endian, which is native for GMOD floats */ + fwrite ( &Val, sizeof(Val), 1, fileout ); + } + else { + /* we're big-endian, flip `em */ + out_pos = (unsigned char *)&Val; + for ( i = sizeof(Val)-1; i >= 0; i-- ) { + fputc(*(out_pos+i), fileout); + } + } +} +/******************************************************************************/ + +void gmod_write_w16 ( unsigned short Val, FILE *fileout ) + +/******************************************************************************/ + +/* + Purpose: + + GMOD_WRITE_W16 writes a 16 bit word to a Golgotha GMOD file. + + Modified: + + 13 September 2000 + + Author: + + Zik Saleeba (zik@zikzak.net) +*/ +{ + unsigned char OutByte[2]; + + OutByte[0] = (unsigned char)(Val & 0xff); + OutByte[1] = (unsigned char)(Val >> 8); + + fwrite ( OutByte, sizeof(unsigned char), 2, fileout ); +} +/******************************************************************************/ + +void gmod_write_w32 ( unsigned long Val, FILE *fileout ) + +/******************************************************************************/ + +/* + Purpose: + + GMOD_WRITE writes a 32 bit word to a Golgotha GMOD file. + + Modified: + + 19 May 1999 + + Author: + + Zik Saleeba (zik@zikzak.net) +*/ +{ + unsigned char OutByte[4]; + + OutByte[0] = (unsigned char)(Val & 0xff); + OutByte[1] = (unsigned char)((Val >> 8) & 0xff); + OutByte[2] = (unsigned char)((Val >> 16) & 0xff); + OutByte[3] = (unsigned char)((Val >> 24) & 0xff); + + fwrite ( OutByte, sizeof(unsigned char), 4, fileout ); +} + +/******************************************************************************/ + +void hello ( void ) + +/******************************************************************************/ +/* + Purpose: + + HELLO prints an explanatory header message. + + Modified: + + 04 July 2000 + + Author: + + John Burkardt +*/ +{ + printf ( "\n" ); + printf ( "Hello: This is IVCON,\n" ); + printf ( " for 3D graphics file conversion.\n" ); + printf ( "\n" ); + printf ( " \".3ds\" 3D Studio Max binary;\n" ); + printf ( " \".ase\" 3D Studio Max ASCII export;\n" ); + printf ( " \".byu\" Movie.BYU surface geometry;\n" ); + printf ( " \".dxf\" DXF;\n" ); + printf ( " \".gmod\" Golgotha model;\n" ); + printf ( " \".hrc\" SoftImage hierarchy;\n" ); + printf ( " \".iv\" SGI Open Inventor;\n" ); + printf ( " \".obj\" WaveFront Advanced Visualizer;\n" ); + printf ( " \".pov\" Persistence of Vision (output only);\n" ); + printf ( " \".smf\" Michael Garland's format;\n" ); + printf ( " \".stl\" ASCII StereoLithography;\n" ); + printf ( " \".stla\" ASCII StereoLithography;\n" ); + printf ( " \".stlb\" Binary StereoLithography;\n" ); + printf ( " \".tec\" TECPLOT (output only);\n" ); + printf ( " \".tri\" [Greg Hood ASCII triangle format];\n" ); + printf ( " \".tria\" [Greg Hood ASCII triangle format];\n" ); + printf ( " \".trib\" [Greg Hood binary triangle format];\n" ); + printf ( " \".txt\" Text (output only);\n" ); + printf ( " \".ucd\" AVS UCD file(output only);\n" ); + printf ( " \".vla\" VLA;\n" ); + printf ( " \".wrl\" VRML (Virtual Reality Modeling Language) (output only).\n" ); + printf ( " \".xgl\" XML/OpenGL format (output only);\n" ); + printf ( "\n" ); + printf ( " Current limits include:\n" ); + printf ( " %d faces;\n", FACE_MAX ); + printf ( " %d line items;\n", LINES_MAX ); + printf ( " %d points;\n", COR3_MAX ); + printf ( " %d face order;\n", ORDER_MAX ); + printf ( " %d materials;\n", MATERIAL_MAX); + printf ( " %d textures.\n", TEXTURE_MAX ); + printf ( "\n" ); + printf ( " Last modification: 04 July 2000.\n" ); + printf ( "\n" ); + printf ( " Send problem reports to burkardt@psc.edu.\n" ); + + return; +} +/******************************************************************************/ + +void help ( void ) + +/******************************************************************************/ + +/* + Purpose: + + HELP prints a list of the interactive commands. + + Modified: + + 26 May 1999 + + Author: + + John Burkardt +*/ +{ + printf ( "\n" ); + printf ( "Commands:\n" ); + printf ( "\n" ); + printf ( "< file Read data from input file;\n" ); + printf ( "<< file Append data in input file to current data;\n" ); + printf ( "> file Write output file;\n" ); + printf ( "B Switch the binary file byte-swapping mode;\n" ); + printf ( "D Switch the debugging mode;\n" ); + printf ( "F Print information about one face;\n" ); + printf ( "H Print this help list;\n" ); + printf ( "I Info, print out recent changes;\n" ); + printf ( "LINES Convert face information to lines;\n" ); + printf ( "N Recompute normal vectors;\n" ); + printf ( "P Set LINE_PRUNE option.\n" ); + printf ( "Q Quit;\n" ); + printf ( "R Reverse the normal vectors.\n" ); + printf ( "S Select face subset (NOT WORKING).\n" ); + printf ( "T Transform the data.\n" ); + printf ( "W Reverse the face node ordering.\n" ); + + return; +} +/******************************************************************************/ + +int hrc_read ( FILE *filein ) + +/******************************************************************************/ + +/* + Purpose: + + HRC_READ reads graphics information from a SoftImage HRC file. + + Examples: + + HRCH: Softimage 4D Creative Environment v3.00 + + + model + { + name "cube_10x10" + scaling 1.000 1.000 1.000 + rotation 0.000 0.000 0.000 + translation 0.000 0.000 0.000 + + mesh + { + flag ( PROCESS ) + discontinuity 60.000 + + vertices 8 + { + [0] position -5.000 -5.000 -5.000 + [1] position -5.000 -5.000 5.000 + [2] position -5.000 5.000 -5.000 + [3] position -5.000 5.000 5.000 + [4] position 5.000 -5.000 -5.000 + [5] position 5.000 -5.000 5.000 + [6] position 5.000 5.000 -5.000 + [7] position 5.000 5.000 5.000 + } + + polygons 6 + { + [0] nodes 4 + { + [0] vertex 0 + normal -1.000 0.000 0.000 + uvTexture 0.000 0.000 + vertexColor 255 178 178 178 + [1] vertex 1 + normal -1.000 0.000 0.000 + uvTexture 0.000 0.000 + vertexColor 255 178 178 178 + [2] vertex 3 + normal -1.000 0.000 0.000 + uvTexture 0.000 0.000 + vertexColor 255 178 178 178 + [3] vertex 2 + normal -1.000 0.000 0.000 + uvTexture 0.000 0.000 + vertexColor 255 178 178 178 + } + material 0 + [1] nodes 4 + { + [0] vertex 1 + normal 0.000 0.000 1.000 + uvTexture 0.000 0.000 + vertexColor 255 178 178 178 + [1] vertex 5 + + ...etc..... + + [5] nodes 4 + { + [0] vertex 2 + normal 0.000 1.000 0.000 + uvTexture 0.000 0.000 + vertexColor 255 178 178 178 + [1] vertex 3 + normal 0.000 1.000 0.000 + uvTexture 0.000 0.000 + vertexColor 255 178 178 178 + [2] vertex 7 + normal 0.000 1.000 0.000 + uvTexture 0.000 0.000 + vertexColor 255 178 178 178 + [3] vertex 6 + normal 0.000 1.000 0.000 + uvTexture 0.000 0.000 + vertexColor 255 178 178 178 + } + material 0 + } + + edges 12 + { + [1] vertices 3 2 + [2] vertices 2 0 + [3] vertices 0 1 + [4] vertices 1 3 + [5] vertices 7 3 + [6] vertices 1 5 + [7] vertices 5 7 + [8] vertices 6 7 + [9] vertices 5 4 + [10] vertices 4 6 + [11] vertices 2 6 + [12] vertices 4 0 + } + } + + material [0] + { + name "kazoo" + type PHONG + ambient 0.0 1.0 0.0 + diffuse 1.0 0.0 0.0 + specular 0.0 0.0 1.0 + exponent 50.0 + reflectivity 0.0 + transparency 0.0 + refracIndex 1.0 + glow 0 + coc 0.0 + } + + texture [0] + { + name "/usr/users/foss/HOUSE/PICTURES/mellon" + glbname "t2d1" + anim STATIC + method XY + repeat 1 1 + scaling 1.000 1.000 + offset 0.000 0.000 + pixelInterp + effect INTENSITY + blending 1.000 + ambient 0.977 + diffuse 1.000 + specular 0.966 + reflect 0.000 + transp 0.000 + roughness 0.000 + reflMap 1.000 + rotation 0.000 + txtsup_rot 0.000 0.000 0.000 + txtsup_trans 0.000 0.000 0.000 + txtsup_scal 1.000 1.000 1.000 + } + } + + Modified: + + 25 June 1999 + + Author: + + John Burkardt +*/ +{ + float b; + int count; + float g; + int i; + int icor3; + int ivert; + int iword; + int jval; + int level; + char *next; + int nlbrack; + int nrbrack; + int cor3_num_old; + float r; + float t; + float temp[3]; + int width; + char word[LINE_MAX_LEN]; + char word1[LINE_MAX_LEN]; + char word2[LINE_MAX_LEN]; + char wordm1[LINE_MAX_LEN]; + float x; + float y; + float z; + + level = 0; + strcpy ( level_name[0], "Top" ); + nlbrack = 0; + nrbrack = 0; + cor3_num_old = cor3_num; + strcpy ( word, " " ); + strcpy ( wordm1, " " ); +/* + Read a line of text from the file. +*/ + for ( ;; ) { + + if ( fgets ( input, LINE_MAX_LEN, filein ) == NULL ) { + break; + } + + text_num = text_num + 1; + next = input; + iword = 0; +/* + Read a word from the line. +*/ + for ( ;; ) { + + strcpy ( wordm1, word ); + + count = sscanf ( next, "%s%n", word2, &width ); + next = next + width; + + if ( count <= 0 ) { + break; + } + + strcpy ( word, word2 ); + + iword = iword + 1; + + if ( iword == 1 ) { + strcpy ( word1, word ); + } +/* + The first line of the file must be the header. +*/ + if ( text_num == 1 ) { + + if ( strcmp ( word1, "HRCH:" ) != 0 ) { + printf ( "\n" ); + printf ( "HRC_READ - Fatal error!\n" ); + printf ( " The input file has a bad header.\n" ); + return ERROR; + } + else { + comment_num = comment_num + 1; + } + break; + } +/* + If the word is a curly bracket, count it. +*/ + if ( strcmp ( word, "{" ) == 0 ) { + nlbrack = nlbrack + 1; + level = nlbrack - nrbrack; + strcpy ( level_name[level], wordm1 ); + if ( debug ) { + printf ( "New level: %s\n", level_name[level] ); + } + } + else if ( strcmp ( word, "}" ) == 0 ) { + nrbrack = nrbrack + 1; + + if ( nlbrack < nrbrack ) { + printf ( "\n" ); + printf ( "HRC_READ - Fatal error!\n" ); + printf ( " Extraneous right bracket on line %d.\n", text_num ); + printf ( " Currently processing field %s\n.", level_name[level] ); + return ERROR; + } + } +/* + CONTROLPOINTS +*/ + if ( strcmp ( level_name[level], "controlpoints" ) == 0 ) { + + if ( strcmp ( word, "{" ) == 0 ) { + } + else if ( strcmp ( word, "}" ) == 0 ) { + + if ( line_num < LINES_MAX ) { + line_dex[line_num] = -1; + line_material[line_num] = 0; + } + line_num = line_num + 1; + level = nlbrack - nrbrack; + } + else if ( word[0] == '[' ) { + } + else if ( strcmp ( word, "position" ) == 0 ) { + + count = sscanf ( next, "%f%n", &x, &width ); + next = next + width; + + count = sscanf ( next, "%f%n", &y, &width ); + next = next + width; + + count = sscanf ( next, "%f%n", &z, &width ); + next = next + width; + + temp[0] = x; + temp[1] = y; + temp[2] = z; + + if ( cor3_num < 1000 ) { + icor3 = rcol_find ( cor3, 3, cor3_num, temp ); + } + else { + icor3 = -1; + } + + if ( icor3 == -1 ) { + + icor3 = cor3_num; + if ( cor3_num < COR3_MAX ) { + cor3[0][cor3_num] = x; + cor3[1][cor3_num] = y; + cor3[2][cor3_num] = z; + } + cor3_num = cor3_num + 1; + + } + else { + dup_num = dup_num + 1; + } + + if ( line_num < LINES_MAX ) { + line_dex[line_num] = icor3; + line_material[line_num] = 0; + } + line_num = line_num + 1; + } + else { + bad_num = bad_num + 1; + printf ( "CONTROLPOINTS: Bad data %s\n", word ); + return ERROR; + } + + } +/* + EDGES +*/ + else if ( strcmp ( level_name[level], "edges" ) == 0 ) { + + if ( strcmp( word, "{" ) == 0 ) { + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + } + else if ( word[0] == '[' ) { + } + else if ( strcmp ( word, "vertices" ) == 0 ) { + + count = sscanf ( next, "%d%n", &jval, &width ); + next = next + width; + + if ( line_num < LINES_MAX ) { + line_dex[line_num] = jval + cor3_num_old; + line_material[line_num] = 0; + } + line_num = line_num + 1; + + count = sscanf ( next, "%d%n", &jval, &width ); + next = next + width; + + if ( line_num < LINES_MAX ) { + line_dex[line_num] = jval + cor3_num_old; + line_material[line_num] = 0; + } + line_num = line_num + 1; + + if ( line_num < LINES_MAX ) { + line_dex[line_num] = -1; + line_material[line_num] = -1; + } + line_num = line_num + 1; + + } + else { + bad_num = bad_num + 1; + printf ( "EDGES: Bad data %s\n", word ); + return ERROR; + } + + } +/* + MATERIAL +*/ + else if ( strcmp ( level_name[level], "material" ) == 0 ) { + + if ( strcmp ( word, "{" ) == 0 ) { + material_num = material_num + 1; + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + } + else if ( word[0] == '[' ) { + } + else if ( strcmp ( word, "ambient" ) == 0 ) { + } + else if ( strcmp ( word, "coc" ) == 0 ) { + } + else if ( strcmp ( word, "diffuse" ) == 0 ) { + + count = sscanf ( next, "%f%n", &r, &width ); + next = next + width; + material_rgba[0][material_num-1] = r; + + count = sscanf ( next, "%f%n", &g, &width ); + next = next + width; + material_rgba[0][material_num-1] = g; + + count = sscanf ( next, "%f%n", &b, &width ); + next = next + width; + material_rgba[0][material_num-1] = b; + + } + else if ( strcmp ( word, "exponent" ) == 0 ) { + } + else if ( strcmp ( word, "glow" ) == 0 ) { + } + else if ( strcmp ( word, "name" ) == 0 ) { + count = sscanf ( next, "%s%n", word, &width ); + next = next + width; + strcpy ( material_name[material_num-1], word ); + } + else if ( strcmp ( word, "reflectivity" ) == 0 ) { + } + else if ( strcmp ( word, "refracindex" ) == 0 ) { + } + else if ( strcmp ( word, "specular" ) == 0 ) { + } + else if ( strcmp ( word, "transparency" ) == 0 ) { + count = sscanf ( next, "%f%n", &t, &width ); + next = next + width; + material_rgba[3][material_num-1] = 1.0 - t; + } + else if ( strcmp ( word, "type" ) == 0 ) { + } + else { + bad_num = bad_num + 1; + printf ( "MATERIAL: Bad data %s\n", word ); + return ERROR; + } + } +/* + MESH +*/ + else if ( strcmp ( level_name[level], "mesh" ) == 0 ) { + + if ( strcmp ( word, "{" ) == 0 ) { + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + } + else if ( strcmp ( word, "discontinuity" ) == 0 ) { + break; + } + else if ( strcmp ( word, "edges" ) == 0 ) { + break; + } + else if ( strcmp ( word, "flag" ) == 0 ) { + break; + } + else if ( strcmp ( word, "polygons" ) == 0 ) { + break; + } + else if ( strcmp ( word, "vertices" ) == 0 ) { + break; + } + else { + bad_num = bad_num + 1; + printf ( "MESH: Bad data %s\n", word ); + return ERROR; + } + + } +/* + MODEL +*/ + else if ( strcmp ( level_name[level], "model" ) == 0 ) { + + if ( strcmp ( word, "{" ) == 0 ) { + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + } + else if ( strcmp ( word, "material" ) == 0 ) { + break; + } + else if ( strcmp ( word, "mesh" ) == 0 ) { + break; + } + else if ( strcmp ( word, "name" ) == 0 ) { + break; + } + else if ( strcmp ( word, "patch" ) == 0 ) { + break; + } + else if ( strcmp ( word, "rotation" ) == 0 ) { + break; + } + else if ( strcmp ( word, "scaling" ) == 0 ) { + break; + } + else if ( strcmp ( word, "spline" ) == 0 ) { + break; + } + else if ( strcmp ( word, "translation" ) == 0 ) { + break; + } + else { + bad_num = bad_num + 1; + printf ( "MODEL: Bad data %s\n", word ); + return ERROR; + } + + } +/* + NODES +*/ + else if ( strcmp ( level_name[level], "nodes" ) == 0 ) { + + if ( strcmp ( word, "{" ) == 0 ) { + ivert = 0; + face_order[face_num] = 0; + face_num = face_num + 1; + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + } + else if ( word[0] == '[' ) { + } + else if ( strcmp ( word, "normal" ) == 0 ) { + + count = sscanf ( next, "%f%n", &x, &width ); + next = next + width; + + count = sscanf ( next, "%f%n", &y, &width ); + next = next + width; + + count = sscanf ( next, "%f%n", &z, &width ); + next = next + width; + + if ( ivert < ORDER_MAX && face_num < FACE_MAX ) { + vertex_normal[0][ivert-1][face_num-1] = x; + vertex_normal[1][ivert-1][face_num-1] = y; + vertex_normal[2][ivert-1][face_num-1] = z; + } + + } + else if ( strcmp ( word, "uvTexture" ) == 0 ) { + + count = sscanf ( next, "%f%n", &x, &width ); + next = next + width; + + count = sscanf ( next, "%f%n", &y, &width ); + next = next + width; + + if ( ivert < ORDER_MAX && face_num < FACE_MAX ) { + vertex_tex_uv[0][ivert-1][face_num-1] = x; + vertex_tex_uv[1][ivert-1][face_num-1] = y; + } + } + else if ( strcmp ( word, "vertex" ) == 0 ) { + + count = sscanf ( next, "%d%n", &jval, &width ); + next = next + width; + + if ( ivert < ORDER_MAX && face_num < FACE_MAX ) { + face_order[face_num-1] = face_order[face_num-1] + 1; + face[ivert][face_num-1] = jval; + } + ivert = ivert + 1; + + } +/* + Right now, we don't do anything with the vertexColor information. +*/ + else if ( strcmp ( word, "vertexColor" ) == 0 ) { + + count = sscanf ( next, "%d%n", &jval, &width ); + next = next + width; + + count = sscanf ( next, "%d%n", &jval, &width ); + next = next + width; + + count = sscanf ( next, "%d%n", &jval, &width ); + next = next + width; + + count = sscanf ( next, "%d%n", &jval, &width ); + next = next + width; + } + else { + bad_num = bad_num + 1; + printf ( "NODES: Bad data %s\n", word ); + return ERROR; + } + + } +/* + PATCH + I don't know what to do with this yet. +*/ + else if ( strcmp ( level_name[level], "patch" ) == 0 ) { + + if ( strcmp ( word, "{" ) == 0 ) { + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + } + else if ( strcmp ( word, "approx_type" ) == 0 ) { + } + else if ( strcmp ( word, "controlpoints" ) == 0 ) { + } + else if ( strcmp ( word, "curv_u" ) == 0 ) { + } + else if ( strcmp ( word, "curv_v" ) == 0 ) { + } + else if ( strcmp ( word, "recmin" ) == 0 ) { + } + else if ( strcmp ( word, "recmax" ) == 0 ) { + } + else if ( strcmp ( word, "recursion" ) == 0 ) { + } + else if ( strcmp ( word, "spacial" ) == 0 ) { + } + else if ( strcmp ( word, "taggedpoints" ) == 0 ) { + } + else if ( strcmp ( word, "ucurve" ) == 0 ) { + } + else if ( strcmp ( word, "ustep" ) == 0 ) { + } + else if ( strcmp ( word, "utension" ) == 0 ) { + } + else if ( strcmp ( word, "utype" ) == 0 ) { + } + else if ( strcmp ( word, "vclose" ) == 0 ) { + } + else if ( strcmp ( word, "vcurve" ) == 0 ) { + } + else if ( strcmp ( word, "viewdep" ) == 0 ) { + } + else if ( strcmp ( word, "vpoint" ) == 0 ) { + } + else if ( strcmp ( word, "vstep" ) == 0 ) { + } + else if ( strcmp ( word, "vtension" ) == 0 ) { + } + else if ( strcmp ( word, "vtype" ) == 0 ) { + } + else { + bad_num = bad_num + 1; + printf ( "PATCH: Bad data %s\n", word ); + return ERROR; + } + } +/* + POLYGONS +*/ + else if ( strcmp ( level_name[level], "polygons" ) == 0 ) { + + if ( strcmp ( word, "{" ) == 0 ) { + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + } + else if ( word[0] == '[' ) { + } + else if ( strcmp ( word, "material" ) == 0 ) { + + count = sscanf ( next, "%d%n", &jval, &width ); + next = next + width; + + for ( ivert = 0; ivert < ORDER_MAX; ivert++ ) { + vertex_material[ivert][face_num-1] = jval; + } + + } + else if ( strcmp ( word, "nodes" ) == 0 ) { + count = sscanf ( next, "%s%n", word2, &width ); + next = next + width; + } + else { + bad_num = bad_num + 1; + printf ( "POLYGONS: Bad data %s\n", word ); + return ERROR; + } + + } +/* + SPLINE +*/ + else if ( strcmp ( level_name[level], "spline" ) == 0 ) { + + if ( strcmp ( word, "{" ) == 0 ) { + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + } + else if ( strcmp ( word, "controlpoints" ) == 0 ) { + break; + } +/* + WHY DON'T YOU READ IN THE OBJECT NAME HERE? +*/ + else if ( strcmp ( word, "name" ) == 0 ) { + break; + } + else if ( strcmp ( word, "nbKeys" ) == 0 ) { + break; + } + else if ( strcmp ( word, "step" ) == 0 ) { + break; + } + else if ( strcmp ( word, "tension" ) == 0 ) { + break; + } + else if ( strcmp ( word, "type" ) == 0 ) { + break; + } + else { + bad_num = bad_num + 1; + printf ( "SPLINE: Bad data %s\n", word ); + return ERROR; + } + + } +/* + TAGGEDPOINTS +*/ + else if ( strcmp ( level_name[level], "taggedpoints" ) == 0 ) { + + if ( strcmp ( word, "{" ) == 0 ) { + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + } + else if ( word[0] == '[' ) { + } + else if ( strcmp ( word, "tagged" ) == 0 ) { + } + else { + bad_num = bad_num + 1; + printf ( "TAGGEDPOINTS: Bad data %s\n", word ); + return ERROR; + } + + } +/* + TEXTURE +*/ + else if ( strcmp ( level_name[level], "texture" ) == 0 ) { + + if ( strcmp ( word, "{" ) == 0 ) { + texture_num = texture_num + 1; + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + } + else if ( word[0] == '[' ) { + } + else if ( strcmp ( word, "ambient" ) == 0 ) { + } + else if ( strcmp ( word, "anim" ) == 0 ) { + } + else if ( strcmp ( word, "blending" ) == 0 ) { + } + else if ( strcmp ( word, "diffuse" ) == 0 ) { + } + else if ( strcmp ( word, "effect" ) == 0 ) { + } + else if ( strcmp ( word, "glbname" ) == 0 ) { + } + else if ( strcmp ( word, "method" ) == 0 ) { + } + else if ( strcmp ( word, "name" ) == 0 ) { + count = sscanf ( next, "%s%n", word, &width ); + next = next + width; + strcpy ( texture_name[texture_num-1], word ); + } + else if ( strcmp ( word, "offset" ) == 0 ) { + } + else if ( strcmp ( word, "pixelinterp" ) == 0 ) { + } + else if ( strcmp ( word, "reflect" ) == 0 ) { + } + else if ( strcmp ( word, "reflmap" ) == 0 ) { + } + else if ( strcmp ( word, "repeat" ) == 0 ) { + } + else if ( strcmp ( word, "rotation" ) == 0 ) { + } + else if ( strcmp ( word, "roughness" ) == 0 ) { + } + else if ( strcmp ( word, "scaling" ) == 0 ) { + } + else if ( strcmp ( word, "specular" ) == 0 ) { + } + else if ( strcmp ( word, "transp" ) == 0 ) { + } + else if ( strcmp ( word, "txtsup_rot" ) == 0 ) { + } + else if ( strcmp ( word, "txtsup_scal" ) == 0 ) { + } + else if ( strcmp ( word, "txtsup_trans" ) == 0 ) { + } + else { + bad_num = bad_num + 1; + printf ( "TEXTURE: Bad data %s\n", word ); + return ERROR; + } + } +/* + VERTICES +*/ + else if ( strcmp ( level_name[level], "vertices" ) == 0 ) { + + if ( strcmp ( word, "{" ) == 0 ) { + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + } + else if ( word[0] == '[' ) { + } + else if ( strcmp ( word, "position" ) == 0 ) { + + count = sscanf ( next, "%f%n", &x, &width ); + next = next + width; + + count = sscanf ( next, "%f%n", &y, &width ); + next = next + width; + + count = sscanf ( next, "%f%n", &z, &width ); + next = next + width; + + if ( cor3_num < COR3_MAX ) { + cor3[0][cor3_num] = x; + cor3[1][cor3_num] = y; + cor3[2][cor3_num] = z; + } + cor3_num = cor3_num + 1; + } + else { + bad_num = bad_num + 1; + printf ( "VERTICES: Bad data %s\n", word ); + return ERROR; + } + } +/* + Any other word: +*/ + else { + + } + } + } + +/* + End of information in file. + + Check the "materials" defining a line. + + If COORDINDEX is -1, so should be the MATERIALINDEX. + If COORDINDEX is not -1, then the MATERIALINDEX shouldn"t be either. +*/ + for ( i = 0; i < line_num; i++ ) { + + if ( line_dex[i] == -1 ) { + line_material[i] = -1; + } + else if ( line_material[i] == -1 ) { + line_material[i] = 0; + } + + } + return SUCCESS; +} +/******************************************************************************/ + +int hrc_write ( FILE* fileout ) + +/******************************************************************************/ + +/* + Purpose: + + HRC_WRITE writes graphics data to an HRC SoftImage file. + + Examples: + + HRCH: Softimage 4D Creative Environment v3.00 + + + model + { + name "cube_10x10" + scaling 1.000 1.000 1.000 + rotation 0.000 0.000 0.000 + translation 0.000 0.000 0.000 + + mesh + { + flag ( PROCESS ) + discontinuity 60.000 + + vertices 8 + { + [0] position -5.000 -5.000 -5.000 + [1] position -5.000 -5.000 5.000 + [2] position -5.000 5.000 -5.000 + [3] position -5.000 5.000 5.000 + [4] position 5.000 -5.000 -5.000 + [5] position 5.000 -5.000 5.000 + [6] position 5.000 5.000 -5.000 + [7] position 5.000 5.000 5.000 + } + + polygons 6 + { + [0] nodes 4 + { + [0] vertex 0 + normal -1.000 0.000 0.000 + uvTexture 0.000 0.000 + vertexColor 255 178 178 178 + [1] vertex 1 + normal -1.000 0.000 0.000 + uvTexture 0.000 0.000 + vertexColor 255 178 178 178 + [2] vertex 3 + normal -1.000 0.000 0.000 + uvTexture 0.000 0.000 + vertexColor 255 178 178 178 + [3] vertex 2 + normal -1.000 0.000 0.000 + uvTexture 0.000 0.000 + vertexColor 255 178 178 178 + } + material 0 + [1] nodes 4 + { + [0] vertex 1 + normal 0.000 0.000 1.000 + uvTexture 0.000 0.000 + vertexColor 255 178 178 178 + [1] vertex 5 + + ...etc..... + + [5] nodes 4 + { + [0] vertex 2 + normal 0.000 1.000 0.000 + uvTexture 0.000 0.000 + vertexColor 255 178 178 178 + [1] vertex 3 + normal 0.000 1.000 0.000 + uvTexture 0.000 0.000 + vertexColor 255 178 178 178 + [2] vertex 7 + normal 0.000 1.000 0.000 + uvTexture 0.000 0.000 + vertexColor 255 178 178 178 + [3] vertex 6 + normal 0.000 1.000 0.000 + uvTexture 0.000 0.000 + vertexColor 255 178 178 178 + } + material 0 + } + + edges 12 + { + [1] vertices 3 2 + [2] vertices 2 0 + [3] vertices 0 1 + [4] vertices 1 3 + [5] vertices 7 3 + [6] vertices 1 5 + [7] vertices 5 7 + [8] vertices 6 7 + [9] vertices 5 4 + [10] vertices 4 6 + [11] vertices 2 6 + [12] vertices 4 0 + } + } + + material [0] + { + name "kazoo" + type PHONG + ambient 0.0 1.0 0.0 + diffuse 1.0 0.0 0.0 + specular 0.0 0.0 1.0 + exponent 50.0 + reflectivity 0.0 + transparency 0.0 + refracIndex 1.0 + glow 0 + coc 0.0 + } + + texture [0] + { + name "/usr/users/foss/HOUSE/PICTURES/mellon" + glbname "t2d1" + anim STATIC + method XY + repeat 1 1 + scaling 1.000 1.000 + offset 0.000 0.000 + pixelInterp + effect INTENSITY + blending 1.000 + ambient 0.977 + diffuse 1.000 + specular 0.966 + reflect 0.000 + transp 0.000 + roughness 0.000 + reflMap 1.000 + rotation 0.000 + txtsup_rot 0.000 0.000 0.000 + txtsup_trans 0.000 0.000 0.000 + txtsup_scal 1.000 1.000 1.000 + } + } + + Modified: + + 25 June 1998 + + Author: + + John Burkardt + +*/ +{ + int iface; + int ivert; + int j; + int jhi; + int jlo; + int jrel; + int k; + int npts; + int nseg; + int text_num; + + nseg = 0; + text_num = 0; + + fprintf ( fileout, "HRCH: Softimage 4D Creative Environment v3.00\n" ); + fprintf ( fileout, "\n" ); + fprintf ( fileout, "\n" ); + text_num = text_num + 3; + + fprintf ( fileout, "model\n" ); + fprintf ( fileout, "{\n" ); + fprintf ( fileout, " name \"%s\"\n", object_name ); + fprintf ( fileout, " scaling 1.000 1.000 1.000\n" ); + fprintf ( fileout, " rotation 0.000 0.000 0.000\n" ); + fprintf ( fileout, " translation 0.000 0.000 0.000\n" ); + text_num = text_num + 6; + + if ( face_num > 0 ) { + + fprintf ( fileout, "\n" ); + fprintf ( fileout, " mesh\n" ); + fprintf ( fileout, " {\n" ); + fprintf ( fileout, " flag ( PROCESS )\n" ); + fprintf ( fileout, " discontinuity 60.000\n" ); + text_num = text_num + 5; +/* + Point coordinates. +*/ + if ( cor3_num > 0 ) { + + fprintf ( fileout, "\n" ); + fprintf ( fileout, " vertices %d\n", cor3_num ); + fprintf ( fileout, " {\n" ); + text_num = text_num + 3; + + for ( j = 0; j < cor3_num; j++ ) { + + fprintf ( fileout, " [%d] position %f %f %f\n", j, cor3[0][j], + cor3[1][j], cor3[2][j] ); + text_num = text_num + 1; + } + fprintf ( fileout, " }\n" ); + text_num = text_num + 1; + } +/* + Faces. +*/ + fprintf ( fileout, "\n" ); + fprintf ( fileout, " polygons %d\n", face_num ); + fprintf ( fileout, " {\n" ); + text_num = text_num + 3; + + for ( iface = 0; iface < face_num; iface++ ) { + + fprintf ( fileout, " [%d] nodes %d\n", iface, face_order[iface] ); + fprintf ( fileout, " {\n" ); + text_num = text_num + 2; + + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + + fprintf ( fileout, " [%d] vertex %d\n", ivert, face[ivert][iface] ); + fprintf ( fileout, " normal %f %f %f\n", + vertex_normal[0][ivert][iface], + vertex_normal[1][ivert][iface], vertex_normal[2][ivert][iface] ); + fprintf ( fileout, " uvTexture %f %f\n", + vertex_tex_uv[0][ivert][iface], vertex_tex_uv[1][ivert][iface] ); + fprintf ( fileout, " vertexColor 255 178 178 178\n" ); + text_num = text_num + 4; + } + fprintf ( fileout, " }\n" ); + fprintf ( fileout, " material %d\n", face_material[iface] ); + text_num = text_num + 2; + } + fprintf ( fileout, " }\n" ); + fprintf ( fileout, " }\n" ); + text_num = text_num + 2; + } +/* + IndexedLineSet. +*/ + if ( line_num > 0 ) { + + nseg = 0; + + jhi = -1; + + for ( ;; ) { + + jlo = jhi + 1; +/* + Look for the next index JLO that is not -1. +*/ + while ( jlo < line_num ) { + if ( line_dex[jlo] != -1 ) { + break; + } + jlo = jlo + 1; + } + + if ( jlo >= line_num ) { + break; + } +/* + Look for the highest following index JHI that is not -1. +*/ + jhi = jlo + 1; + + while ( jhi < line_num ) { + if ( line_dex[jhi] == -1 ) { + break; + } + jhi = jhi + 1; + } + + jhi = jhi - 1; +/* + Our next line segment involves LINE_DEX indices JLO through JHI. +*/ + nseg = nseg + 1; + npts = jhi + 1 - jlo; + + fprintf ( fileout, "\n" ); + fprintf ( fileout, " spline\n" ); + fprintf ( fileout, " {\n" ); + fprintf ( fileout, " name \"spl%d\"\n", nseg ); + fprintf ( fileout, " type LINEAR\n" ); + fprintf ( fileout, " nbKeys %d\n", npts ); + fprintf ( fileout, " tension 0.000\n" ); + fprintf ( fileout, " step 1\n" ); + fprintf ( fileout, "\n" ); + text_num = text_num + 9; + + fprintf ( fileout, " controlpoints\n" ); + fprintf ( fileout, " {\n" ); + text_num = text_num + 2; + + for ( j = jlo; j <= jhi; j++ ) { + jrel = j - jlo; + k = line_dex[j]; + fprintf ( fileout, " [%d] position %f %f %f\n", jrel, + cor3[0][k], cor3[1][k], cor3[2][k] ); + text_num = text_num + 1; + } + + fprintf ( fileout, " }\n" ); + fprintf ( fileout, " }\n" ); + text_num = text_num + 2; + } + } +/* + MATERIALS +*/ + for ( i = 0; i < material_num; i++ ) { + + fprintf ( fileout, " material [%d]\n", i ); + fprintf ( fileout, " {\n" ); + fprintf ( fileout, " name \"%s\"\n", material_name[i] ); + fprintf ( fileout, " type PHONG\n" ); + fprintf ( fileout, " ambient %f %f %f\n", material_rgba[0][i], + material_rgba[1][i], material_rgba[2][i] ); + fprintf ( fileout, " diffuse %f %f %f\n", material_rgba[0][i], + material_rgba[1][i], material_rgba[2][i] ); + fprintf ( fileout, " specular %f %f %f\n", material_rgba[0][i], + material_rgba[1][i], material_rgba[2][i] ); + fprintf ( fileout, " exponent 50.0\n" ); + fprintf ( fileout, " reflectivity 0.0\n" ); + fprintf ( fileout, " transparency %f\n", 1.0 - material_rgba[3][i] ); + fprintf ( fileout, " refracIndex 1.0\n" ); + fprintf ( fileout, " glow 0\n" ); + fprintf ( fileout, " coc 0.0\n" ); + fprintf ( fileout, " }\n" ); + + text_num = text_num + 14; + + } +/* + TEXTURES +*/ + for ( i = 0; i < texture_num; i++ ) { + + fprintf ( fileout, " texture [%d]\n", i ); + fprintf ( fileout, " {\n" ); + fprintf ( fileout, " name \"%s\"\n", texture_name[i] ); + fprintf ( fileout, " glbname \"t2d1\"\n" ); + fprintf ( fileout, " anim STATIC\n" ); + fprintf ( fileout, " method XY\n" ); + fprintf ( fileout, " repeat 1 1\n" ); + fprintf ( fileout, " scaling 1.000 1.000\n" ); + fprintf ( fileout, " offset 0.000 0.000\n" ); + fprintf ( fileout, " pixelInterp\n" ); + fprintf ( fileout, " effect INTENSITY\n" ); + fprintf ( fileout, " blending 1.000\n" ); + fprintf ( fileout, " ambient 0.977\n" ); + fprintf ( fileout, " diffuse 1.000\n" ); + fprintf ( fileout, " specular 0.966\n" ); + fprintf ( fileout, " reflect 0.000\n" ); + fprintf ( fileout, " transp 0.000\n" ); + fprintf ( fileout, " roughness 0.000\n" ); + fprintf ( fileout, " reflMap 1.000\n" ); + fprintf ( fileout, " rotation 0.000\n" ); + fprintf ( fileout, " txtsup_rot 0.000 0.000 0.000\n" ); + fprintf ( fileout, " txtsup_trans 0.000 0.000 0.000\n" ); + fprintf ( fileout, " txtsup_scal 1.000 1.000 1.000\n" ); + fprintf ( fileout, " }\n" ); + + text_num = text_num + 25; + + } + fprintf ( fileout, "}\n" ); + text_num = text_num + 1; +/* + Report. +*/ + printf ( "\n" ); + printf ( "HRC_WRITE - Wrote %d text lines.\n", text_num ); + + return SUCCESS; +} +/******************************************************************************/ + +void init_program_data ( void ) + +/******************************************************************************/ + +/* + Purpose: + + INIT_PROGRAM_DATA initializes the internal program data. + + Modified: + + 26 May 1999 + + Author: + + John Burkardt +*/ +{ + byte_swap = FALSE; + debug = 0; + line_prune = 1; + color_num = 0; + cor3_num = 0; + face_num = 0; + line_num = 0; + + if ( debug ) { + printf ( "\n" ); + printf ( "INIT_PROGRAM_DATA: Program data initialized.\n" ); + } + + return; + +} +/******************************************************************************/ + +int interact ( void ) + +/******************************************************************************/ + +/* + Purpose: + + INTERACT carries on an interactive session with the user. + + Modified: + + 22 May 1999 + + Author: + + John Burkardt +*/ +{ + int i; + int icor3; + int ierror; + int iface; + int itemp; + int ivert; + int j; + int jvert; + int m; + char *next; + float temp; + float x; + float y; + float z; + + strcpy ( filein_name, "NO_IN_NAME" ); + strcpy ( fileout_name, "NO_OUT_NAME" ); + +/* + Say hello. +*/ + hello ( ); +/* + Get the next user command. +*/ + printf ( "\n" ); + printf ( "Enter command (H for help)\n" ); + + while ( fgets ( input, LINE_MAX_LEN, stdin ) != NULL ) { +/* + Advance to the first nonspace character in INPUT. +*/ + for ( next = input; *next != '\0' && isspace(*next); next++ ) { + } +/* + Skip blank lines and comments. +*/ + if ( *next == '\0' ) { + continue; + } +/* + Command: << FILENAME + Append new data to current graphics information. +*/ + if ( *next == '<' && *(next+1) == '<' ) { + + next = next + 2; + sscanf ( next, "%s", filein_name ); + + ierror = data_read ( ); + + if ( ierror == ERROR ) { + printf ( "\n" ); + printf ( "INTERACT - Fatal error!\n" ); + printf ( " DATA_READ failed to read input data.\n" ); + } + } +/* + Command: < FILENAME +*/ + else if ( *next == '<' ) { + + next = next + 1; + sscanf ( next, "%s", filein_name ); + + data_init ( ); + + ierror = data_read ( ); + + if ( ierror == ERROR ) { + printf ( "\n" ); + printf ( "INTERACT - Fatal error!\n" ); + printf ( " DATA_READ failed to read input data.\n" ); + } + } +/* + Command: > FILENAME +*/ + else if ( *next == '>' ) { + + next = next + 1; + sscanf ( next, "%s", fileout_name ); + + ierror = data_write ( ); + + if ( ierror == ERROR ) { + printf ( "\n" ); + printf ( "INTERACT - Fatal error!\n" ); + printf ( " OUTPUT_DATA failed to write output data.\n" ); + } + + } +/* + B: Switch byte swapping option. +*/ + else if ( *next == 'B' || *next == 'b' ) { + + if ( byte_swap == TRUE ) { + byte_swap = FALSE; + printf ( "Byte_swapping reset to FALSE.\n" ); + } + else { + byte_swap = TRUE; + printf ( "Byte_swapping reset to TRUE.\n" ); + } + + } +/* + D: Switch debug option. +*/ + else if ( *next == 'D' || *next == 'd' ) { + if ( debug ) { + debug = 0; + printf ( "Debug reset to FALSE.\n" ); + } + else { + debug = 1; + printf ( "Debug reset to TRUE.\n" ); + } + } +/* + F: Check a face. +*/ + else if ( *next == 'f' || *next == 'F' ) { + printf ( "\n" ); + printf ( " Enter a face index between 0 and %d:", face_num-1 ); + scanf ( "%d", &iface ); + face_print ( iface ); + } +/* + H: Help +*/ + else if ( *next == 'h' || *next == 'H' ) { + help ( ); + } +/* + I: Print change information. +*/ + else if ( *next == 'i' || *next == 'I') { + news ( ); + } +/* + LINES: + Convert face information to lines. +*/ + else if ( *next == 'l' || *next == 'L') { + + if ( face_num > 0 ) { + + printf ( "\n" ); + printf ( "INTERACT - Note:\n" ); + printf ( " Face information will be converted\n" ); + printf ( " to line information.\n" ); + + face_to_line ( ); + + if ( line_num > LINES_MAX ) { + + printf ( "\n" ); + printf ( "INTERACT - Note:\n" ); + printf ( " Some face information was lost.\n" ); + printf ( " The maximum number of lines is %d,\n", LINES_MAX ); + printf ( " but we would need at least %d.\n", line_num ); + + line_num = LINES_MAX; + + } + + face_num = 0; + } + else { + + printf ( "\n" ); + printf ( "INTERACT - Note:\n" ); + printf ( " There were no faces to convert.\n" ); + + } + + } +/* + N: Recompute normal vectors. +*/ + else if ( *next == 'n' || *next == 'N') { + + for ( iface = 0; iface < face_num; iface++ ) { + for ( i = 0; i < 3; i++ ) { + face_normal[i][iface] = 0.0; + } + } + + for ( iface = 0; iface < face_num; iface++ ) { + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + for ( i = 0; i < 3; i++ ) { + vertex_normal[i][ivert][iface] = 0.0; + } + } + } + + vertex_normal_set ( ); + + cor3_normal_set ( ); + + face_normal_ave ( ); + } +/* + P: Line pruning optiont +*/ + else if ( *next == 'p' || *next == 'P' ) { + + printf ( "\n" ); + printf ( "INTERACT - SET LINE PRUNING OPTION.\n" ); + printf ( "\n" ); + printf ( " LINE_PRUNE = 0 means no line pruning.\n" ); + printf ( " nonzero means line pruning.\n" ); + printf ( "\n" ); + printf ( " Current value is LINE_PRUNE = %d.\n", line_prune ); + printf ( "\n" ); + printf ( " Enter new value for LINE_PRUNE.\n" ); + + if ( fgets ( input, LINE_MAX_LEN, stdin ) == NULL ) { + printf ( " ??? Error trying to read input.\n" ); + } + else { + sscanf ( input, "%d", &line_prune ); + printf ( " New value is LINE_PRUNE = %d.\n", line_prune ); + } + } +/* + Q: Quit +*/ + else if ( *next == 'q' || *next == 'Q' ) { + printf ( "\n" ); + printf ( "INTERACT - Normal end of execution.\n" ); + return SUCCESS; + } +/* + R: Reverse normal vectors. +*/ + else if ( *next == 'r' || *next == 'R' ) { + + for ( icor3 = 0; icor3 < cor3_num; icor3++ ) { + for ( i = 0; i < 3; i++ ) { + cor3_normal[i][icor3] = - cor3_normal[i][icor3]; + } + } + + for ( iface = 0; iface < face_num; iface++ ) { + for ( i = 0; i < 3; i++ ) { + face_normal[i][iface] = - face_normal[i][iface]; + } + } + + for ( iface = 0; iface < face_num; iface++ ) { + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + for ( i = 0; i < 3; i++ ) { + vertex_normal[i][ivert][iface] = + - vertex_normal[i][ivert][iface]; + } + } + } + printf ( "\n" ); + printf ( "INTERACT - Note:\n" ); + printf ( " Reversed node, face and vertex normals.\n" ); + } +/* + S: Select a few faces, discard the rest. +*/ + else if ( *next == 's' || *next == 'S' ) { + face_subset ( ); + } +/* + T: Transform the data. +*/ + else if ( *next == 't' || *next == 'T' ) { + + printf ( "\n" ); + printf ( "For now, we only offer point scaling.\n" ); + printf ( "Enter X, Y, Z scale factors:\n" ); + + scanf ( "%f %f %f", &x, &y, &z ); + + for ( j = 0; j < cor3_num; j++ ) { + cor3[0][j] = x * cor3[0][j]; + cor3[1][j] = y * cor3[1][j]; + cor3[2][j] = z * cor3[2][j]; + } + + for ( iface = 0; iface < face_num; iface++ ) { + for ( i = 0; i < 3; i++ ) { + face_normal[i][iface] = 0.0; + } + } + + for ( iface = 0; iface < face_num; iface++ ) { + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + for ( i = 0; i < 3; i++ ) { + vertex_normal[i][ivert][iface] = 0.0; + } + } + } + + vertex_normal_set ( ); + + cor3_normal_set ( ); + + face_normal_ave ( ); + } +/* + U: Renumber faces, count objects: +*/ + else if ( *next == 'u' || *next == 'U' ) { + } +/* + V: Convert polygons to triangles: +*/ + else if ( *next == 'v' || *next == 'V' ) { + } +/* + W: Reverse the face node ordering. +*/ + else if ( *next == 'w' || *next == 'W' ) { + + if ( face_num > 0 ) { + + for ( iface = 0; iface < face_num; iface++ ) { + + m = face_order[iface]; + + for ( ivert = 0; ivert < m/2; ivert++ ) { + + jvert = m - ivert - 1; + + itemp = face[ivert][iface]; + face[ivert][iface] = face[jvert][iface]; + face[jvert][iface] = itemp; + + itemp = vertex_material[ivert][iface]; + vertex_material[ivert][iface] = vertex_material[jvert][iface]; + vertex_material[jvert][iface] = itemp; + + for ( i = 0; i < 3; i++ ) { + temp = vertex_normal[i][ivert][iface]; + vertex_normal[i][ivert][iface] = + vertex_normal[i][jvert][iface]; + vertex_normal[i][jvert][iface] = temp; + } + } + } + printf ( "\n" ); + printf ( "INTERACT - Note:\n" ); + printf ( " Reversed face node ordering.\n" ); + } + } +/* + Command: ??? +*/ + else { + printf ( "\n" ); + printf ( "INTERACT: Warning!\n" ); + printf ( " Your command was not recognized.\n" ); + } + + printf ( "\n" ); + printf ( "Enter command (H for help)\n" ); + + } + return SUCCESS; +} +/******************************************************************************/ + +int iv_read ( FILE *filein ) + +/******************************************************************************/ + +/* + Purpose: + + IV_READ reads graphics information from an Inventor file. + + Example: + + #Inventor V2.0 ascii + + Separator { + Info { + string "Inventor file generated by IVCON. + Original data in file cube.iv." + } + Separator { + LightModel { + model PHONG + } + MatrixTransform { matrix + 0.9 0.0 0.0 0.0 + 0.0 -0.9 0.0 0.0 + 0.0 0.0 -1.5 0.0 + 0.0 0.0 0.0 1.0 + } + Material { + ambientColor 0.2 0.2 0.2 + diffuseColor [ + 0.8 0.8 0.8, + 0.7 0.1 0.1, + 0.1 0.8 0.2, + ] + emissiveColor 0.0 0.0 0.0 + specularColor 0.0 0.0 0.0 + shininess 0.2 + transparency [ + 0.0, 0.5, 1.0, + ] + } + Texture2 { + filename "fred.rgb" + wrapS REPEAT + wrapT REPEAT + model MODULATE + blendColor 0.0 0.0 0.0 + } + + MaterialBinding { + value PER_VERTEX_INDEXED + } + NormalBinding { + value PER_VERTEX_INDEXED + } + TextureCoordinateBinding { + value PER_VERTEX_INDEXED + } + + ShapeHints { + vertexOrdering COUNTERCLOCKWISE + shapeType UNKNOWN_SHAPE_TYPE + faceType CONVEX + creaseAngle 6.28319 + } + + Coordinate3 { + point [ + 8.59816 5.55317 -3.05561, + 8.59816 2.49756 0.000000E+00, + ...etc... + 2.48695 2.49756 -3.05561, + ] + } + + Normal { + vector [ + 0.71 0.71 0.0, + ...etc... + 0.32 0.32 0.41, + ] + } + + TextureCoordinate2 { + point [ + 0.0 1.0, + 0.1, 0.8, + ...etc... + 0.4 0.7, + ] + } + + IndexedLineSet { + coordIndex [ + 0, 1, 2, -1, + 3, 4, 5, -1, + 7, 8, 9, -1, + ...etc... + 189, 190, 191, -1, + ] + materialIndex [ + 0, 0, 0, -1, + 1, 1, 1, -1, + 2, 2, 2, -1, + ...etc... + 64, 64, 64, -1, + ] + } + + IndexedFaceSet { + coordIndex [ + 0, 1, 2, -1, + 3, 4, 5, -1, + 7, 8, 9, -1, + ...etc... + 189, 190, 191, -1, + ] + materialIndex [ + 0, 0, 0, -1, + 1, 1, 1, -1, + 2, 2, 2, -1, + ...etc... + 64, 64, 64, -1, + ] + normalIndex [ + 0, 0, 0, -1, + 1, 1, 1, -1, + 2, 2, 2, -1, + ...etc... + 64, 64, 64, -1, + ] + textureCoordIndex [ + 0, 0, 0, -1, + 1, 1, 1, -1, + 2, 2, 2, -1, + ...etc... + 64, 64, 64, -1, + ] + } + + IndexedTriangleStripSet { + vertexProperty VertexProperty { + vertex [ x y z, + ... + x y z ] + normal [ x y z, + ... + x y z ] + materialBinding OVERALL + normalBinding PER_VERTEX_INDEXED + } + coordIndex [ + i, j, k, l, m, -1, + n, o, p, q, r, s, t, u, -1, + v, w, x, -1 + ..., -1 ] + normalIndex -1 + } + + } + } + + Modified: + + 01 July 1999 + + Author: + + John Burkardt +*/ +{ + char c; + int count; + int i; + int icol; + int icolor; + int icface; + int inormface; + int iface_num; + int irow; + int iuv; + int ivert; + int iword; + int ix; + int ixyz; + int iy; + int iz; + int j; + int jval; + int level; + char *next; + int nlbrack; + int nrbrack; + int nu; + int null_index; + int cor3_num_old; + int line_num2; + int face_num2; + int normal_num_temp; + int text_numure_temp; + int nv; + int result; + float rval; + int width; + char word[LINE_MAX_LEN]; + char word1[LINE_MAX_LEN]; + char wordm1[LINE_MAX_LEN]; + float xvec[3]; + + icface = 0; + icol = -1; + inormface = 0; + iface_num = face_num; + irow = 0; + ix = 0; + ixyz = 0; + iy = 0; + iz = 0; + jval = 0; + level = 0; + strcpy ( level_name[0], "Top" ); + nlbrack = 0; + nrbrack = 0; + nu = 0; + cor3_num_old = cor3_num; + face_num2 = face_num; + line_num2 = line_num; + normal_num_temp = 0; + text_numure_temp = 0; + nv = 0; + rval = 0.0; + strcpy ( word, " " ); + strcpy ( wordm1, " " ); +/* + Read the next line of text from the input file. +*/ + for ( ;; ) { + + if ( fgets ( input, LINE_MAX_LEN, filein ) == NULL ) { + break; + } + + text_num = text_num + 1; + next = input; + iword = 0; +/* + Remove all commas from the line, so we can use SSCANF to read + numeric items. +*/ + i = 0; + while ( input[i] != '\0' ) { + if ( input[i] == ',' ) { + input[i] = ' '; + } + i++; + } +/* + Force brackets and braces to be buffered by spaces. +*/ + i = 0; + while ( input[i] != '\0' ) { + i++; + } + null_index = i; + + i = 0; + while ( input[i] != '\0' && i < LINE_MAX_LEN ) { + + if ( input[i] == '[' || input[i] == ']' || + input[i] == '{' || input[i] == '}' ) { + + result = char_pad ( &i, &null_index, input, LINE_MAX_LEN ); + if ( result == ERROR ) { + break; + } + } + else { + i++; + } + } +/* + Read a word from the line. +*/ + for ( ;; ) { + + strcpy ( wordm1, word ); + strcpy ( word, " " ); + + count = sscanf ( next, "%s%n", word, &width ); + next = next + width; + + if ( count <= 0 ) { + break; + } + + iword = iword + 1; + + if ( iword == 1 ) { + strcpy ( word1, word ); + } +/* + The first line of the file must be the header. +*/ + if ( text_num == 1 ) { + + if ( leqi ( word1, "#Inventor" ) != TRUE ) { + printf ( "\n" ); + printf ( "IV_READ - Fatal error!\n" ); + printf ( " The input file has a bad header.\n" ); + return ERROR; + } + else { + comment_num = comment_num + 1; + } + break; + } +/* + A comment begins anywhere with '#'. + Skip the rest of the line. +*/ + if ( word[1] == '#' ) { + comment_num = comment_num + 1; + break; + } +/* + If the word is a curly or square bracket, count it. + If the word is a left bracket, the previous word is the name of a node. +*/ + if ( strcmp ( word, "{" ) == 0 || strcmp ( word, "[" ) == 0 ) { + nlbrack = nlbrack + 1; + level = nlbrack - nrbrack; + strcpy ( level_name[level], wordm1 ); + if ( debug ) { + printf ( "Begin level: %s\n", wordm1 ); + } + } + else if ( strcmp ( word, "}" ) == 0 || strcmp ( word, "]" ) == 0 ) { + nrbrack = nrbrack + 1; + + if ( nlbrack < nrbrack ) { + printf ( "\n" ); + printf ( "IV_READ - Fatal error!\n" ); + printf ( " Extraneous right bracket on line %d.\n", text_num ); + printf ( " Currently processing field %s\n.", level_name[level] ); + return ERROR; + } + } +/* + BASECOLOR +*/ + if ( leqi ( level_name[level], "BASECOLOR" ) == TRUE ) { + + if ( strcmp ( word, "{" ) == 0 ) { + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + } + else if ( leqi ( word, "RGB" ) == TRUE ) { + } + else { + bad_num = bad_num + 1; + printf ( "Bad data %s\n", word ); + } + } +/* + COORDINATE3 +*/ + else if ( leqi ( level_name[level], "COORDINATE3" ) == TRUE ) { + + if ( strcmp ( word, "{" ) == 0 ) { + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + } + else if ( leqi ( word, "POINT" ) == TRUE ) { + } + else { + bad_num = bad_num + 1; + printf ( "COORDINATE3: Bad data %s\n", word ); + } + } +/* + COORDINATE4 +*/ + else if ( leqi ( level_name[level], "COORDINATE4" ) == TRUE ) { + + if ( strcmp ( word, "{" ) == 0 ) { + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + } + else if ( leqi ( word, "POINT" ) == TRUE ) { + } + else { + bad_num = bad_num + 1; + printf ( "COORDINATE4: Bad data %s\n", word ); + } + } +/* + COORDINDEX +*/ + else if ( leqi ( level_name[level], "COORDINDEX" ) == TRUE ) { + + if ( strcmp ( word, "[" ) == 0 ) { + ivert = 0; + } + else if ( strcmp ( word, "]" ) == 0 ) { + level = nlbrack - nrbrack; + } +/* + (indexedlineset) COORDINDEX +*/ + else if ( leqi ( level_name[level-1], "INDEXEDLINESET" ) == TRUE ) { + + count = sscanf ( word, "%d%n", &jval, &width ); + + if ( count > 0 ) { + + if ( jval < -1 ) { + bad_num = bad_num + 1; + } + else { + if ( line_num < LINES_MAX ) { + if ( jval != -1 ) { + jval = jval + cor3_num_old; + } + line_dex[line_num] = jval; + } + line_num = line_num + 1; + } + } + else { + bad_num = bad_num + 1; + } + } +/* + (indexedfaceset) COORDINDEX + Warning: If the list of indices is not terminated with a final -1, then + the last face won't get counted. +*/ + else if ( leqi ( level_name[level-1], "INDEXEDFACESET" ) == TRUE ) { + + count = sscanf ( word, "%d%n", &jval, &width ); + + if ( count > 0 ) { + if ( jval == -1 ) { + ivert = 0; + face_num = face_num + 1; + } + else { + if ( ivert == 0 ) { + if ( face_num < FACE_MAX ) { + face_order[face_num] = 0; + } + } + if ( face_num < FACE_MAX ) { + face_order[face_num] = face_order[face_num] + 1; + face[ivert][face_num] = jval + cor3_num_old; + ivert = ivert + 1; + } + } + } + } +/* + (indexednurbssurface) COORDINDEX +*/ + else if ( leqi ( level_name[level-1], "INDEXEDNURBSSURFACE" ) == TRUE ) { + } +/* + (indexedtrianglestripset) COORDINDEX + + First three coordinate indices I1, I2, I3 define a triangle. + Next triangle is defined by I2, I3, I4 (actually, I4, I3, I2 + to stay with same counterclockwise sense). + Next triangle is defined by I3, I4, I5 ( do not need to reverse + odd numbered triangles) and so on. + List is terminated with -1. +*/ + else if ( leqi ( level_name[level-1], "INDEXEDTRIANGLESTRIPSET" ) == TRUE ) { + + count = sscanf ( word, "%d%n", &jval, &width ); + + if ( count > 0 ) { + + if ( jval == -1 ) { + ivert = 0; + } + else { + + ix = iy; + iy = iz; + iz = jval + cor3_num_old; + + if ( ivert == 0 ) { + if ( face_num < FACE_MAX ) { + face[ivert][face_num] = jval + cor3_num_old; + face_order[face_num] = 3; + } + } + else if ( ivert == 1 ) { + if ( face_num < FACE_MAX ) { + face[ivert][face_num] = jval + cor3_num_old; + } + } + else if ( ivert == 2 ) { + if ( face_num < FACE_MAX ) { + face[ivert][face_num] = jval + cor3_num_old; + } + face_num = face_num + 1; + } + else { + + if ( face_num < FACE_MAX ) { + face_order[face_num] = 3; + if ( ( ivert % 2 ) == 0 ) { + face[0][face_num] = ix; + face[1][face_num] = iy; + face[2][face_num] = iz; + } + else { + face[0][face_num] = iz; + face[1][face_num] = iy; + face[2][face_num] = ix; + } + } + face_num = face_num + 1; + } + ivert = ivert + 1; +/* + Very very tentative guess as to how indices into the normal + vector array are set up... +*/ + if ( face_num < FACE_MAX && ivert > 2 ) { + for ( i = 0; i < 3; i++ ) { + face_normal[i][face_num] = normal_temp[i][ix]; + } + } + } + } + } + } +/* + INDEXEDFACESET +*/ + else if ( leqi ( level_name[level], "INDEXEDFACESET" ) == TRUE ) { + + if ( strcmp ( word, "{" ) == 0 ) { + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + } + else if ( leqi ( word, "COORDINDEX" ) == TRUE ) { + ivert = 0; + } + else if ( leqi ( word, "MATERIALINDEX" ) == TRUE ) { + } + else if ( leqi ( word, "NORMALINDEX" ) == TRUE ) { + } + else if ( leqi ( word, "TEXTURECOORDINDEX" ) == TRUE ) { + if ( texture_num <= 0 ) { + texture_num = 1; + strcpy ( texture_name[0], "Texture_0000" ); + } + } + else { + bad_num = bad_num + 1; + printf ( "Bad data %s\n", word ); + } + } +/* + INDEXEDLINESET +*/ + else if ( leqi ( level_name[level], "INDEXEDLINESET" ) == TRUE ) { + + if ( strcmp ( word, "{" ) == 0 ) { + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + } + else if ( leqi ( word, "COORDINDEX" ) == TRUE ) { + } + else if ( leqi ( word, "MATERIALINDEX" ) == TRUE ) { + } + else { + bad_num = bad_num + 1; + printf ( "Bad data %s\n", word ); + } + } +/* + INDEXEDNURBSSURFACE +*/ + else if ( leqi ( level_name[level], "INDEXEDNURBSSURFACE" ) == TRUE ) { + + if ( strcmp ( word, "{" ) == 0 ) { + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + } + else if ( leqi ( word, "NUMUCONTROLPOINTS") == TRUE ) { + + count = sscanf ( word, "%d%n", &jval, &width ); + + if ( count > 0 ) { + nu = jval; + if ( debug ) { + printf ( "NU = %d\n", nu ); + } + } + else { + nu = 0; + bad_num = bad_num + 1; + printf ( "Bad data %s\n", word ); + } + } + else if ( leqi ( word, "NUMVCONTROLPOINTS" ) == TRUE ) { + + count = sscanf ( word, "%d%n", &jval, &width ); + + if ( count > 0 ) { + nv = jval; + if ( debug ) { + printf ( "NV = %d\n", nv ); + } + } + else { + nv = 0; + bad_num = bad_num + 1; + } + } + else if ( leqi ( word, "COORDINDEX" ) == TRUE ) { + } + else if ( leqi ( word, "UKNOTVECTOR" ) == TRUE ) { + } + else if ( leqi ( word, "VKNOTVECTOR" ) == TRUE ) { + } + else { + bad_num = bad_num + 1; + printf ( "Bad data %s\n", word ); + } + } +/* + INDEXEDTRIANGLESTRIPSET +*/ + else if ( leqi ( level_name[level], "INDEXEDTRIANGLESTRIPSET" ) == TRUE ) { + + if ( strcmp ( word, "{" ) == 0 ) { + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + } + else if ( leqi ( word, "VERTEXPROPERTY" ) == TRUE ) { + count = sscanf ( next, "%s%n", word, &width ); + next = next + width; + } + else if ( leqi ( word, "COORDINDEX" ) == TRUE ) { + ivert = 0; + } + else if ( leqi ( word, "NORMALINDEX" ) == TRUE ) { + count = sscanf ( next, "%s%n", word, &width ); + next = next + width; + } + else { + bad_num = bad_num + 1; + printf ( "Bad data %s\n", word ); + } + } +/* + INFO +*/ + else if ( leqi ( level_name[level], "INFO" ) == TRUE ) { + + if ( strcmp ( word, "{" ) == 0 ) { + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + } + else if ( leqi ( word, "STRING" ) == TRUE ) { + } + else if ( strcmp ( word, "\"" ) == 0 ) { + } + else { + } + } +/* + LIGHTMODEL + Read, but ignore. +*/ + else if ( leqi ( level_name[level], "LIGHTMODEL" ) == TRUE ) { + + if ( strcmp ( word, "{" ) == 0 ) { + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + } + else if ( leqi ( word, "model" ) == TRUE ) { + } + else { + } + } +/* + MATERIAL + Read, but ignore. +*/ + else if ( leqi ( level_name[level],"MATERIAL" ) == TRUE ) { + + if ( strcmp ( word, "{" ) == 0 ) { + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + } + else if ( leqi ( word, "AMBIENTCOLOR" ) == TRUE ) { + } + else if ( leqi ( word, "EMISSIVECOLOR" ) == TRUE ) { + } + else if ( leqi ( word, "DIFFUSECOLOR" ) == TRUE ) { + } + else if ( leqi ( word, "SHININESS" ) == TRUE ) { + } + else if ( leqi ( word, "SPECULARCOLOR" ) == TRUE ) { + } + else if ( leqi ( word, "TRANSPARENCY" ) == TRUE ) { + } + else { + } + } +/* + MATERIALBINDING + Read, but ignore +*/ + else if ( leqi ( level_name[level], "MATERIALBINDING" ) == TRUE ) { + + if ( strcmp ( word, "{" ) == 0 ) { + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + } + else if ( leqi ( word, "VALUE" ) == TRUE ) { + count = sscanf ( next, "%s%n", material_binding, &width ); + next = next + width; + } + else { + count = sscanf ( next, "%f%n", &rval, &width ); + next = next + width; + + if ( count > 0 ) { + } + else { + bad_num = bad_num + 1; + printf ( "Bad data %s\n", word ); + } + } + } +/* + MATERIALINDEX +*/ + else if ( leqi ( level_name[level], "MATERIALINDEX" ) == TRUE ) { + + if ( strcmp ( word, "[" ) == 0 ) { + ivert = 0; + } + else if ( strcmp ( word, "]" ) == 0 ) { + level = nlbrack - nrbrack; + } +/* + (indexedfaceset) MATERIALINDEX +*/ + else if ( leqi ( level_name[level-1], "INDEXEDFACESET" ) == TRUE ) { + + count = sscanf ( word, "%d%n", &jval, &width ); + + if ( count > 0 ) { + + if ( jval == -1 ) { + ivert = 0; + face_num2 = face_num2 + 1; + } + else { + + if ( face_num2 < FACE_MAX ) { + if ( jval != -1 ) { + jval = jval + cor3_num_old; + } + vertex_material[ivert][face_num2] = jval; + ivert = ivert + 1; + } + } + } + else { + bad_num = bad_num + 1; + printf ( "Bad data %s\n", word ); + } + } +/* + (indexedlineset) MATERIALINDEX +*/ + else if ( leqi ( level_name[level-1], "INDEXEDLINESET" ) == TRUE ) { + + count = sscanf ( word, "%d%n", &jval, &width ); + + if ( count > 0 ) { + + if ( line_num2 < LINES_MAX ) { + if ( jval != -1 ) { + jval = jval + cor3_num_old; + } + line_material[line_num2] = jval; + line_num2 = line_num2 + 1; + } + } + else { + bad_num = bad_num + 1; + printf ( "Bad data %s\n", word ); + } + } + else { + count = sscanf ( word, "%d%n", &jval, &width ); + + if ( count > 0 ) { + } + else { + bad_num = bad_num + 1; + printf ( "Bad data %s\n", word ); + } + } + } +/* + MATRIXTRANSFORM. +*/ + else if ( leqi ( level_name[level], "MATRIXTRANSFORM" ) == TRUE ) { + + if ( strcmp ( word, "{" ) == 0 ) { + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + } + else if ( leqi ( word, "MATRIX" ) == TRUE ) { + icol = -1; + irow = 0; + } + else { + + count = sscanf ( word, "%f%n", &rval, &width ); + + if ( count > 0 ) { + + icol = icol + 1; + if ( icol > 3 ) { + icol = 0; + irow = irow + 1; + if ( irow > 3 ) { + irow = 0; + } + } + + transform_matrix[irow][icol] = rval; + } + + } + } +/* + NORMAL + The field "VECTOR" may be followed by three numbers, + (handled here), or by a square bracket, and sets of three numbers. +*/ + else if ( leqi ( level_name[level], "NORMAL" ) == TRUE ) { +/* + (vertexproperty) NORMAL +*/ + if ( leqi ( level_name[level-1], "VERTEXPROPERTY" ) == TRUE ) { + + if ( strcmp ( word, "[" ) == 0 ) { + ixyz = 0; + } + else if ( strcmp ( word, "]" ) == 0 ) { + level = nlbrack - nrbrack; + } + else { + + count = sscanf ( word, "%f%n", &rval, &width ); + + if ( count > 0 ) { + + if ( inormface < FACE_MAX ) { + face_normal[ixyz][inormface] = rval; + } + + ixyz = ixyz + 1; + if ( ixyz > 2 ) { + ixyz = 0; + inormface = inormface + 1; + } + } + } + } +/* + (anythingelse) NORMAL +*/ + else { + + if ( strcmp ( word, "{" ) == 0 ) { + ixyz = 0; + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + } + else if ( leqi ( word, "VECTOR" ) == TRUE ) { + } + else { + + count = sscanf ( word, "%f%n", &rval, &width ); + + if ( count > 0 ) { + +/* COMMENTED OUT + + if ( nfnorm < FACE_MAX ) { + normal[ixyz][nfnorm] = rval; + } + +*/ + ixyz = ixyz + 1; + if ( ixyz > 2 ) { + ixyz = 0; + } + } + else { + bad_num = bad_num + 1; + printf ( "Bad data %s\n", word ); + } + } + } + } +/* + NORMALBINDING + Read, but ignore +*/ + else if ( leqi ( level_name[level], "NORMALBINDING" ) == TRUE ) { + + if ( strcmp ( word, "{" ) == 0 ) { + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + } + else if ( leqi ( word, "VALUE" ) == TRUE ) { + count = sscanf ( next, "%s%n", normal_binding, &width ); + next = next + width; + } + else { + count = sscanf ( word, "%f%n", &rval, &width ); + + if ( count > 0 ) { + } + else { + bad_num = bad_num + 1; + printf ( "Bad data %s\n", word ); + } + } + } +/* + NORMALINDEX +*/ + else if ( leqi ( level_name[level], "NORMALINDEX" ) == TRUE ) { +/* + (indexedtrianglestripset) NORMALINDEX +*/ + if ( leqi ( level_name[level-1], "INDEXEDTRIANGLESTRIPSET" ) == TRUE ) { + count = sscanf ( word, "%d%n", &jval, &width ); + + if ( count > 0 ) { + } + else if ( strcmp ( word, "[" ) == 0 ) { + } + else if ( strcmp ( word, "]" ) == 0 ) { + } + } +/* + (anythingelse) NORMALINDEX +*/ + else { + + if ( strcmp ( word, "[" ) == 0 ) { + ivert = 0; + } + else if ( strcmp ( word, "]" ) == 0 ) { + level = nlbrack - nrbrack; + } + else { + + count = sscanf ( word, "%d%n", &jval, &width ); + + if ( count > 0 ) { + if ( jval == -1 ) { + ivert = 0; + iface_num = iface_num + 1; + } + else { + if ( iface_num < FACE_MAX ) { + for ( i = 0; i < 3; i++ ){ + vertex_normal[i][ivert][iface_num] = normal_temp[i][jval]; + } + ivert = ivert + 1; + } + } + } + else { + bad_num = bad_num + 1; + printf ( "Bad data %s\n", word ); + } + } + } + } +/* + (coordinate3) POINT +*/ + else if ( leqi ( level_name[level], "POINT" ) == TRUE ) { + + if ( leqi ( level_name[level-1], "COORDINATE3" ) == TRUE ) { + + if ( strcmp ( word, "[" ) == 0 ) { + ixyz = 0; + cor3_num_old = cor3_num; + } + else if ( strcmp ( word, "]" ) == 0 ) { + level = nlbrack - nrbrack; + } + else { + + count = sscanf ( word, "%f%n", &rval, &width ); + + if ( count > 0 ) { + + if ( cor3_num < COR3_MAX ) { + xvec[ixyz] = rval; + } + + ixyz = ixyz + 1; + + if ( ixyz == 3 ) { + + ixyz = 0; + + tmat_mxp ( transform_matrix, xvec, xvec ); + + cor3[0][cor3_num] = xvec[0]; + cor3[1][cor3_num] = xvec[1]; + cor3[2][cor3_num] = xvec[2]; + + cor3_num = cor3_num + 1; + + continue; + } + } + else { + bad_num = bad_num + 1; + break; + } + } + } +/* + (texturecoodinate2) POINT +*/ + else if ( leqi ( level_name[level-1], "TEXTURECOORDINATE2" ) == TRUE ) { + + if ( strcmp ( word, "[" ) == 0 ) { + iuv = 0; + text_numure_temp = 0; + } + else if ( strcmp ( word, "]" ) == 0 ) { + level = nlbrack - nrbrack; + } + else { + + count = sscanf ( word, "%f%n", &rval, &width ); + + if ( count > 0 ) { + + texture_temp[iuv][text_numure_temp] = rval; + + iuv = iuv + 1; + if ( iuv == 2 ) { + iuv = 0; + text_numure_temp = text_numure_temp + 1; + } + } + else { + printf ( "TextureCoordinate2 { Point [: Bad data\n" ); + bad_num = bad_num + 1; + break; + } + } + } + } +/* + RGB +*/ + else if ( leqi ( level_name[level],"RGB" ) == TRUE ) { +/* + (basecolor) RGB +*/ + if ( leqi ( level_name[level-1], "BASECOLOR" ) == TRUE ) { + + if ( strcmp ( word, "[" ) == 0 ) { + icolor = 0; + } + else if ( strcmp ( word, "]" ) == 0 ) { + level = nlbrack - nrbrack; + } + else { + + count = sscanf ( word, "%f%n", &rval, &width ); + + if ( count > 0 ) { + + rgbcolor[icolor][color_num] = rval; + icolor = icolor + 1; + + if ( icolor == 3 ) { + icolor = 0; + color_num = color_num + 1; + } + } + else { + bad_num = bad_num + 1; + printf ( "Bad data %s\n", word ); + } + } + } +/* + (anythingelse RGB) +*/ + else { + + printf ( "HALSBAND DES TODES!\n" ); + + if ( strcmp ( word, "[" ) == 0 ) { + icolor = 0; + ivert = 0; + } + else if ( strcmp ( word, "]" ) == 0 ) { + level = nlbrack - nrbrack; + } + else { + + count = sscanf ( word, "%f%n", &rval, &width ); + + if ( count > 0 ) { + + if ( icface < FACE_MAX ) { + + vertex_rgb[icolor][ivert][icface] = rval; + + icolor = icolor + 1; + if ( icolor == 3 ) { + icolor = 0; + color_num = color_num + 1; + ivert = ivert + 1; + if ( ivert == face_order[icface] ) { + ivert = 0; + icface = icface + 1; + } + } + } + } + else { + bad_num = bad_num + 1; + printf ( "Bad data %s\n", word ); + } + } + } + + } +/* + SEPARATOR +*/ + else if ( leqi ( level_name[level], "SEPARATOR" ) == TRUE ) { + + if ( strcmp ( word, "{" ) == 0 ) { + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + } + else { + } + } +/* + SHAPEHINTS + Read, but ignore. +*/ + else if ( leqi ( level_name[level], "SHAPEHINTS" ) == TRUE ) { + + if ( strcmp ( word, "{" ) == 0 ) { + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + } + else if ( leqi ( word, "CREASEANGLE" ) == TRUE ) { + + count = sscanf ( next, "%f%n", &rval, &width ); + next = next + width; + + if ( count <= 0 ) { + bad_num = bad_num + 1; + printf ( "Bad data %s\n", word ); + } + } + else if ( leqi ( word, "FACETYPE" ) == TRUE ) { + count = sscanf ( next, "%s%n", word, &width ); + next = next + width; + } + else if ( leqi ( word, "SHAPETYPE" ) == TRUE ) { + count = sscanf ( next, "%s%n", word, &width ); + next = next + width; + } + else if ( leqi ( word, "VERTEXORDERING" ) == TRUE ) { + count = sscanf ( next, "%s%n", word, &width ); + next = next + width; + } + else { + bad_num = bad_num + 1; + printf ( "Bad data %s\n", word ); + } + } +/* + TEXTURE2 +*/ + else if ( leqi ( level_name[level], "TEXTURE2" ) == TRUE ) { + + if ( strcmp ( word, "{" ) == 0 ) { + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + texture_num = texture_num + 1; + } + else if ( leqi ( word, "BLENDCOLOR" ) == TRUE ) { + } +/* + NEED TO REMOVE QUOTES SURROUNDING TEXTURE NAME. +*/ + else if ( leqi ( word, "FILENAME" ) == TRUE ) { + + count = sscanf ( next, "%s%n", word, &width ); + next = next + width; + + strcpy ( texture_name[texture_num], word ); + + i = 0; + j = 0; + do { + c = texture_name[texture_num][i]; + i = i + 1; + if ( c != '"' ) { + texture_name[texture_num][j] = c; + j = j + 1; + } + } while ( c != '\0' ); + + } + else if ( leqi ( word, "IMAGE" ) == TRUE ) { + } + else if ( leqi ( word, "MODEL" ) == TRUE ) { + count = sscanf ( next, "%s%n", word, &width ); + next = next + width; + } + else if ( leqi ( word, "WRAPS" ) == TRUE ) { + count = sscanf ( next, "%s%n", word, &width ); + next = next + width; + } + else if ( leqi ( word, "WRAPT" ) == TRUE ) { + count = sscanf ( next, "%s%n", word, &width ); + next = next + width; + } + else { + } + } +/* + TEXTURECOORDINATE2 +*/ + else if ( leqi ( level_name[level], "TEXTURECOORDINATE2" ) == TRUE ) { + + if ( strcmp ( word, "{" ) == 0 ) { + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + } + else if ( leqi ( word, "POINT" ) == TRUE ) { + } + else { + bad_num = bad_num + 1; + printf ( "TEXTURECOORDINATE2: Bad data %s\n", word ); + } + } +/* + TEXTURECOORDINATEBINDING +*/ + else if ( leqi ( level_name[level], "TEXTURECOORDINATEBINDING" ) == TRUE ) { + + if ( strcmp ( word, "{" ) == 0 ) { + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + } + else if ( leqi ( word, "VALUE" ) == TRUE ) { + count = sscanf ( next, "%s%n", texture_binding, &width ); + next = next + width; + } + else { + bad_num = bad_num + 1; + printf ( "Bad data %s\n", word ); + } + } +/* + TEXTURECOORDINDEX +*/ + else if ( leqi ( level_name[level], "TEXTURECOORDINDEX" ) == TRUE ) { + + if ( strcmp ( word, "[" ) == 0 ) { + ivert = 0; + iface_num = 0; + } + else if ( strcmp ( word, "]" ) == 0 ) { + level = nlbrack - nrbrack; + } + else { + + count = sscanf ( word, "%d%n", &jval, &width ); + + if ( count > 0 ) { + + if ( jval == - 1 ) { + ivert = 0; + } + else { + + if ( iface_num < FACE_MAX ) { + vertex_tex_uv[0][ivert][iface_num] = texture_temp[0][jval]; + vertex_tex_uv[1][ivert][iface_num] = texture_temp[1][jval]; + } + + ivert = ivert + 1; + + if ( ivert == face_order[iface_num] ) { + ivert = 0; + iface_num = iface_num + 1; + } + } + + } + else { + bad_num = bad_num + 1; + printf ( "Bad data %s\n", word ); + } + + } + } +/* + UKNOTVECTOR +*/ + else if ( leqi ( level_name[level], "UKNOTVECTOR" ) == TRUE ) { + + if ( strcmp ( word, "[" ) == 0 ) { + continue; + } + else if ( strcmp ( word, "]" ) == 0 ) { + level = nlbrack - nrbrack; + continue; + } + else { + count = sscanf ( word, "%d%n", &jval, &width ); + } + } +/* + VECTOR +*/ + else if ( leqi ( level_name[level], "VECTOR" ) == TRUE ) { + if ( strcmp ( word, "[" ) == 0 ) { + } + else if ( strcmp ( word, "]" ) == 0 ) { + level = nlbrack - nrbrack; + } +/* + (normal) VECTOR +*/ + else if ( leqi ( level_name[level-1], "NORMAL" ) == TRUE ) { + + count = sscanf ( word, "%f%n", &rval, &width ); + + if ( count > 0 ) { + + if ( normal_num_temp < ORDER_MAX * FACE_MAX ) { + normal_temp[ixyz][normal_num_temp] = rval; + ixyz = ixyz + 1; + if ( ixyz == 3 ) { + ixyz = 0; + normal_num_temp = normal_num_temp + 1; + } + } + } + else { + bad_num = bad_num + 1; + printf ( "NORMAL VECTOR: bad data %s\n", word ); + } + } + } +/* + (vertexproperty) VERTEX +*/ + else if ( leqi ( level_name[level], "VERTEX" ) == TRUE ) { + + if ( leqi ( level_name[level-1], "VERTEXPROPERTY" ) == TRUE ) { + + if ( strcmp ( word, "[" ) == 0 ) { + ixyz = 0; + cor3_num_old = cor3_num; + } + else if ( strcmp ( word, "]" ) == 0 ) { + level = nlbrack - nrbrack; + } + else { + count = sscanf ( word, "%f%n", &rval, &width ); + + if ( count > 0 ) { + + if ( cor3_num < COR3_MAX ) { + cor3[ixyz][cor3_num] = rval; + } + ixyz = ixyz + 1; + if ( ixyz == 3 ) { + ixyz = 0; + cor3_num = cor3_num + 1; + } + + } + else { + bad_num = bad_num + 1; + printf ( "Bad data %s\n", word ); + } + } + } + } +/* + (indexedtrianglestripset) VERTEXPROPERTY +*/ + else if ( leqi ( level_name[level], "VERTEXPROPERTY" ) == TRUE ) { + + if ( strcmp ( word, "{" ) == 0 ) { + } + else if ( strcmp ( word, "}" ) == 0 ) { + level = nlbrack - nrbrack; + } + else if ( leqi ( word, "VERTEX" ) == TRUE ) { + } + else if ( leqi ( word, "NORMAL" ) == TRUE ) { + ixyz = 0; + } + else if ( leqi ( word, "MATERIALBINDING" ) == TRUE ) { + count = sscanf ( next, "%s%n", word, &width ); + next = next + width; + } + else if ( leqi ( word, "NORMALBINDING" ) == TRUE ) { + count = sscanf ( next, "%s%n", word, &width ); + next = next + width; + } + else { + bad_num = bad_num + 1; + printf ( "Bad data %s\n", word ); + } + } +/* + VKNOTVECTOR +*/ + else if ( leqi ( level_name[level], "VKNOTVECTOR" ) == TRUE ) { + + if ( strcmp ( word, "[" ) == 0 ) { + continue; + } + else if ( strcmp ( word, "]" ) == 0 ) { + level = nlbrack - nrbrack; + continue; + } + else { + count = sscanf ( word, "%d%n", &jval, &width ); + } + } +/* + Any other word: +*/ + else { + } + } + } +/* + Reset the transformation matrix to the identity, + because, presumably, we've applied it by now. +*/ + tmat_init ( transform_matrix ); + + return SUCCESS; +} +/******************************************************************************/ + +int iv_write ( FILE *fileout ) + +/******************************************************************************/ + +/* + Purpose: + + IV_WRITE writes graphics information to an Inventor file. + + Modified: + + 29 June 1999 + + Author: + + John Burkardt +*/ +{ + int icor3; + int iface; + int itemp; + int ivert; + int j; + int length; + int text_num; + + text_num = 0; + + fprintf ( fileout, "#Inventor V2.0 ascii\n" ); + fprintf ( fileout, "\n" ); + fprintf ( fileout, "Separator {\n" ); + fprintf ( fileout, " Info {\n" ); + fprintf ( fileout, " string \"%s generated by IVCON.\"\n", fileout_name ); + fprintf ( fileout, " string \"Original data in file %s.\"\n", filein_name ); + fprintf ( fileout, " }\n" ); + fprintf ( fileout, " Separator {\n" ); + text_num = text_num + 8; +/* + LightModel: + + BASE_COLOR ignores light sources, and uses only diffuse color + and transparency. Even without normal vector information, + the object will show up. However, you won't get shadow + and lighting effects. + + PHONG uses the Phong lighting model, accounting for light sources + and surface orientation. This is the default. I believe + you need accurate normal vector information in order for this + option to produce nice pictures. + + DEPTH ignores light sources, and calculates lighting based on + the location of the object within the near and far planes + of the current camera's view volume. +*/ + fprintf ( fileout, " LightModel {\n" ); + fprintf ( fileout, " model PHONG\n" ); + fprintf ( fileout, " }\n" ); + text_num = text_num + 3; +/* + Transformation matrix. +*/ + fprintf ( fileout, " MatrixTransform { matrix\n" ); + fprintf ( fileout, " %f %f %f %f\n", transform_matrix[0][0], + transform_matrix[0][1], transform_matrix[0][2], transform_matrix[0][3] ); + fprintf ( fileout, " %f %f %f %f\n", transform_matrix[1][0], + transform_matrix[1][1], transform_matrix[1][2], transform_matrix[1][3] ); + fprintf ( fileout, " %f %f %f %f\n", transform_matrix[2][0], + transform_matrix[2][1], transform_matrix[2][2], transform_matrix[2][3] ); + fprintf ( fileout, " %f %f %f %f\n", transform_matrix[3][0], + transform_matrix[3][1], transform_matrix[3][2], transform_matrix[3][3] ); + fprintf ( fileout, " }\n" ); + text_num = text_num + 6; +/* + Material. +*/ + fprintf ( fileout, " Material {\n" ); + fprintf ( fileout, " ambientColor 0.2 0.2 0.2\n" ); + fprintf ( fileout, " diffuseColor 0.8 0.8 0.8\n" ); + fprintf ( fileout, " emissiveColor 0.0 0.0 0.0\n" ); + fprintf ( fileout, " specularColor 0.0 0.0 0.0\n" ); + fprintf ( fileout, " shininess 0.2\n" ); + fprintf ( fileout, " transparency 0.0\n" ); + fprintf ( fileout, " }\n" ); + text_num = text_num + 8; +/* + MaterialBinding +*/ + fprintf ( fileout, " MaterialBinding {\n" ); + fprintf ( fileout, " value PER_VERTEX_INDEXED\n" ); + fprintf ( fileout, " }\n" ); + text_num = text_num + 3; +/* + NormalBinding + + PER_VERTEX promises that we will write a list of normal vectors + in a particular order, namely, the normal vectors for the vertices + of the first face, then the second face, and so on. + + PER_VERTEX_INDEXED promises that we will write a list of normal vectors, + and then, as part of the IndexedFaceSet, we will give a list of + indices referencing this normal vector list. +*/ + fprintf ( fileout, " NormalBinding {\n" ); + fprintf ( fileout, " value PER_VERTEX_INDEXED\n" ); + fprintf ( fileout, " }\n" ); + text_num = text_num + 3; +/* + Texture2. + + FLAW: We can only handle on texture right now. +*/ + if ( texture_num > 0 ) { + fprintf ( fileout, " Texture2 {\n" ); + fprintf ( fileout, " filename \"%s\"\n", texture_name[0] ); + fprintf ( fileout, " wrapS REPEAT\n" ); + fprintf ( fileout, " wrapT REPEAT\n" ); + fprintf ( fileout, " model MODULATE\n" ); + fprintf ( fileout, " blendColor 0.0 0.0 0.0\n" ); + fprintf ( fileout, " }\n" ); + text_num = text_num + 7; + } +/* + TextureCoordinateBinding +*/ + fprintf ( fileout, " TextureCoordinateBinding {\n" ); + fprintf ( fileout, " value PER_VERTEX_INDEXED\n" ); + fprintf ( fileout, " }\n" ); + text_num = text_num + 3; +/* + ShapeHints +*/ + fprintf ( fileout, " ShapeHints {\n" ); + fprintf ( fileout, " vertexOrdering COUNTERCLOCKWISE\n" ); + fprintf ( fileout, " shapeType UNKNOWN_SHAPE_TYPE\n" ); + fprintf ( fileout, " faceType CONVEX\n" ); + fprintf ( fileout, " creaseAngle 6.28319\n" ); + fprintf ( fileout, " }\n" ); + text_num = text_num + 6; +/* + Point coordinates. +*/ + fprintf ( fileout, " Coordinate3 {\n" ); + fprintf ( fileout, " point [\n" ); + text_num = text_num + 2; + + for ( j = 0; j < cor3_num; j++ ) { + fprintf ( fileout, " %f %f %f,\n", cor3[0][j], cor3[1][j], cor3[2][j] ); + text_num = text_num + 1; + } + fprintf ( fileout, " ]\n" ); + fprintf ( fileout, " }\n" ); + text_num = text_num + 2; +/* + Texture coordinates. +*/ + fprintf ( fileout, " TextureCoordinate2 {\n" ); + fprintf ( fileout, " point [\n" ); + text_num = text_num + 2; + + for ( iface = 0; iface < face_num; iface++ ) { + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + fprintf ( fileout, " %f %f,\n", vertex_tex_uv[0][ivert][iface], + vertex_tex_uv[1][ivert][iface] ); + text_num = text_num + 1; + } + } + fprintf ( fileout, " ]\n" ); + fprintf ( fileout, " }\n" ); + text_num = text_num + 2; +/* + BaseColor. +*/ + if ( color_num > 0 ) { + + fprintf ( fileout, " BaseColor {\n" ); + fprintf ( fileout, " rgb [\n" ); + text_num = text_num + 2; + + for ( j = 0; j < color_num; j++ ) { + fprintf ( fileout, " %f %f %f,\n", rgbcolor[0][j], rgbcolor[1][j], + rgbcolor[2][j] ); + text_num = text_num + 1; + } + + fprintf ( fileout, " ]\n" ); + fprintf ( fileout, " }\n" ); + text_num = text_num + 2; + } +/* + Normal vectors. + Use the normal vectors associated with nodes. +*/ + if ( face_num > 0 ) { + + fprintf ( fileout, " Normal { \n" ); + fprintf ( fileout, " vector [\n" ); + text_num = text_num + 2; + + for ( icor3 = 0; icor3 < cor3_num; icor3++ ) { + fprintf ( fileout, " %f %f %f,\n", + cor3_normal[0][icor3], + cor3_normal[1][icor3], + cor3_normal[2][icor3] ); + text_num = text_num + 1; + } + + fprintf ( fileout, " ]\n" ); + fprintf ( fileout, " }\n" ); + text_num = text_num + 2; + } +/* + IndexedLineSet +*/ + if ( line_num > 0 ) { + + fprintf ( fileout, " IndexedLineSet {\n" ); +/* + IndexedLineSet coordIndex +*/ + fprintf ( fileout, " coordIndex [\n" ); + text_num = text_num + 2; + + length = 0; + + for ( j = 0; j < line_num; j++ ) { + + if ( length == 0 ) { + fprintf ( fileout, " " ); + } + + fprintf ( fileout, " %d,", line_dex[j] ); + length = length + 1; + + if ( line_dex[j] == -1 || length >= 10 || j == line_num-1 ) { + fprintf ( fileout, "\n" ); + text_num = text_num + 1; + length = 0; + } + } + + fprintf ( fileout, " ]\n" ); + text_num = text_num + 1; +/* + IndexedLineSet materialIndex. +*/ + fprintf ( fileout, " materialIndex [\n" ); + text_num = text_num + 1; + + length = 0; + + for ( j = 0; j < line_num; j++ ) { + + if ( length == 0 ) { + fprintf ( fileout, " " ); + } + + fprintf ( fileout, " %d,", line_material[j] ); + length = length + 1; + + if ( line_material[j] == -1 || length >= 10 || j == line_num-1 ) { + fprintf ( fileout, "\n" ); + text_num = text_num + 1; + length = 0; + } + } + + fprintf ( fileout, " ]\n" ); + fprintf ( fileout, " }\n" ); + text_num = text_num + 2; + } +/* + IndexedFaceSet. +*/ + if ( face_num > 0 ) { + + fprintf ( fileout, " IndexedFaceSet {\n" ); + fprintf ( fileout, " coordIndex [\n" ); + text_num = text_num + 2; + + for ( iface = 0; iface < face_num; iface++ ) { + + fprintf ( fileout, " " ); + + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + fprintf ( fileout, " %d,", face[ivert][iface] ); + } + fprintf ( fileout, " -1,\n" ); + text_num = text_num + 1; + } + + fprintf ( fileout, " ]\n" ); + text_num = text_num + 1; +/* + IndexedFaceSet normalIndex +*/ + fprintf ( fileout, " normalIndex [\n" ); + text_num = text_num + 1; + + for ( iface = 0; iface < face_num; iface++ ) { + + fprintf ( fileout, " " ); + + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + fprintf ( fileout, " %d,", face[ivert][iface] ); + } + fprintf ( fileout, " -1,\n" ); + text_num = text_num + 1; + } + fprintf ( fileout, " ]\n" ); + text_num = text_num + 1; +/* + IndexedFaceSet materialIndex +*/ + fprintf ( fileout, " materialIndex [\n" ); + text_num = text_num + 1; + + for ( iface = 0; iface < face_num; iface++ ) { + + fprintf ( fileout, " " ); + + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + fprintf ( fileout, " %d,", vertex_material[ivert][iface] ); + } + fprintf ( fileout, " -1,\n" ); + text_num = text_num + 1; + } + + fprintf ( fileout, " ]\n" ); + text_num = text_num + 1; +/* + IndexedFaceSet textureCoordIndex +*/ + fprintf ( fileout, " textureCoordIndex [\n" ); + text_num = text_num + 1; + + itemp = 0; + + for ( iface = 0; iface < face_num; iface++ ) { + + fprintf ( fileout, " " ); + + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + fprintf ( fileout, " %d,", itemp ); + itemp = itemp + 1; + } + fprintf ( fileout, " -1,\n" ); + text_num = text_num + 1; + } + + fprintf ( fileout, " ]\n" ); + + fprintf ( fileout, " }\n" ); + text_num = text_num + 2; + } +/* + Close up the Separator nodes. +*/ + fprintf ( fileout, " }\n" ); + fprintf ( fileout, "}\n" ); + text_num = text_num + 2; +/* + Report. +*/ + printf ( "\n" ); + printf ( "IV_WRITE - Wrote %d text lines;\n", text_num ); + + return SUCCESS; +} +/******************************************************************************/ + +int ivec_max ( int n, int *a ) + +/******************************************************************************/ + +/* + Purpose: + + IVEC_MAX returns the maximum element in an integer array. + + Modified: + + 09 October 1998 + + Author: + + John Burkardt +*/ +{ + int i; + int *ia; + int imax; + + if ( n <= 0 ) { + imax = 0; + } + else { + ia = a; + imax = *ia; + for ( i = 1; i < n; i++ ) { + ia = ia + 1; + if ( imax < *ia ) { + imax = *ia; + } + } + } + return imax; +} +/******************************************************************************/ + +int leqi ( char* string1, char* string2 ) + +/******************************************************************************/ + +/* + Purpose: + + LEQI compares two strings for equality, disregarding case. + + Modified: + + 15 September 1998 + + Author: + + John Burkardt +*/ +{ + int i; + int nchar; + int nchar1; + int nchar2; + + nchar1 = strlen ( string1 ); + nchar2 = strlen ( string2 ); + + if ( nchar1 < nchar2 ) { + nchar = nchar1; + } + else { + nchar = nchar2; + } +/* + The strings are not equal if they differ over their common length. +*/ + for ( i = 0; i < nchar; i++ ) { + + if ( toupper ( string1[i] ) != toupper ( string2[i] ) ) { + return FALSE; + } + } +/* + The strings are not equal if the longer one includes nonblanks + in the tail. +*/ + if ( nchar1 > nchar ) { + for ( i = nchar; i < nchar1; i++ ) { + if ( string1[i] != ' ' ) { + return FALSE; + } + } + } + else if ( nchar2 > nchar ) { + for ( i = nchar; i < nchar2; i++ ) { + if ( string2[i] != ' ' ) { + return FALSE; + } + } + } + return TRUE; +} +/******************************************************************************/ + +long int long_int_read ( FILE *filein ) + +/******************************************************************************/ + +/* + Purpose: + + LONG_INT_READ reads a long int from a binary file. + + Modified: + + 24 May 1999 + + Author: + + John Burkardt +*/ +{ + union { + long int yint; + char ychar[4]; + } y; + + if ( byte_swap == TRUE ) { + y.ychar[3] = fgetc ( filein ); + y.ychar[2] = fgetc ( filein ); + y.ychar[1] = fgetc ( filein ); + y.ychar[0] = fgetc ( filein ); + } + else { + y.ychar[0] = fgetc ( filein ); + y.ychar[1] = fgetc ( filein ); + y.ychar[2] = fgetc ( filein ); + y.ychar[3] = fgetc ( filein ); + } + + return y.yint; +} +/******************************************************************************/ + +int long_int_write ( FILE *fileout, long int int_val ) + +/******************************************************************************/ + +/* + Purpose: + + LONG_INT_WRITE writes a long int to a binary file. + + Modified: + + 14 October 1998 + + Author: + + John Burkardt +*/ +{ + union { + long int yint; + char ychar[4]; + } y; + + y.yint = int_val; + + if ( byte_swap == TRUE ) { + fputc ( y.ychar[3], fileout ); + fputc ( y.ychar[2], fileout ); + fputc ( y.ychar[1], fileout ); + fputc ( y.ychar[0], fileout ); + } + else { + fputc ( y.ychar[0], fileout ); + fputc ( y.ychar[1], fileout ); + fputc ( y.ychar[2], fileout ); + fputc ( y.ychar[3], fileout ); + } + + return 4; +} +/******************************************************************************/ + +void news ( void ) + +/******************************************************************************/ + +/* + Purpose: + + NEWS reports the program change history. + + Modified: + + 26 September 1999 + + Author: + + John Burkardt +*/ +{ + printf ( "\n" ); + printf ( "Recent changes:\n" ); + printf ( "\n" ); + printf ( " 04 July 2000\n" ); + printf ( " Added preliminary XGL_WRITE.\n" ); + printf ( " 26 September 1999\n" ); + printf ( " After ASE_READ, call NODE_TO_VERTEX_MAT and VERTEX_TO_FACE_MATERIAL.\n" ); + printf ( " 27 July 1999\n" ); + printf ( " Corrected TMAT_ROT_VECTOR.\n" ); + printf ( " 17 July 1999\n" ); + printf ( " Added null edge and face deletion.\n" ); + printf ( " Corrected a string problem in SMF_READ.\n" ); + printf ( " 03 July 1999\n" ); + printf ( " Fixed a problem with BINDING variables in SMF_READ.\n" ); + printf ( " 02 July 1999\n" ); + printf ( " Added limited texture support in 3DS/IV.\n" ); + printf ( " 26 June 1999\n" ); + printf ( " BYU_READ added.\n" ); + printf ( " 25 June 1999\n" ); + printf ( " BYU_WRITE added.\n" ); + printf ( " 22 June 1999\n" ); + printf ( " TRIB_READ added.\n" ); + printf ( " 16 June 1999\n" ); + printf ( " TRIB_WRITE Greg Hood binary triangle output routine added.\n" ); + printf ( " 10 June 1999\n" ); + printf ( " TRIA_WRITE Greg Hood ASCII triangle output routine added.\n" ); + printf ( " 09 June 1999\n" ); + printf ( " TEC_WRITE TECPLOT output routine added.\n" ); + printf ( " IV_READ and IV_WRITE use TRANSFORM_MATRIX now.\n" ); + printf ( " 26 May 1999\n" ); + printf ( " LINE_PRUNE option added for VLA_WRITE.\n" ); + printf ( " 24 May 1999\n" ); + printf ( " Added << command to append new graphics data to old.\n" ); + printf ( " Stuck in first draft STLB_READ/STLB_WRITE routines.\n" ); + printf ( " STLA_WRITE and STLB_WRITE automatically decompose \n" ); + printf ( " non-triangular faces before writing.\n" ); + printf ( " 23 May 1999\n" ); + printf ( " Stuck in first draft WRL_WRITE routine.\n" ); + printf ( " 22 May 1999\n" ); + printf ( " Faces converted to lines before calling VLA_WRITE.\n" ); + printf ( " Added UCD_WRITE.\n" ); + printf ( " Added MATERIAL/PATCH/TAGGEDPOINTS fields in HRC_READ.\n" ); + printf ( " 17 May 1999\n" ); + printf ( " Updated SMF_WRITE, SMF_READ to match code in IVREAD.\n" ); + printf ( " Added transformation matrix routines.\n" ); + printf ( " 16 May 1999\n" ); + printf ( " Zik Saleeba improved DXF support to handle polygons.\n" ); + printf ( " 15 April 1999\n" ); + printf ( " Zik Saleeba added Golgotha GMOD file format support.\n" ); + printf ( " 03 December 1998\n" ); + printf ( " Set up simple hooks in TDS_READ_MATERIAL_SECTION.\n" ); + printf ( " 02 December 1998\n" ); + printf ( " Set up simple hooks for texture map names.\n" ); + printf ( " 19 November 1998\n" ); + printf ( " IV_WRITE uses PER_VERTEX normal binding.\n" ); + printf ( " 18 November 1998\n" ); + printf ( " Added node normals.\n" ); + printf ( " Finally added the -RN option.\n" ); + printf ( " 17 November 1998\n" ); + printf ( " Added face node ordering reversal option.\n" ); + printf ( " 20 October 1998\n" ); + printf ( " Added DATA_REPORT.\n" ); + printf ( " 19 October 1998\n" ); + printf ( " SMF_READ and SMF_WRITE added.\n" ); + printf ( " 16 October 1998\n" ); + printf ( " Fixing a bug in IV_READ that chokes on ]} and other\n" ); + printf ( " cases where brackets aren't properly spaced.\n" ); + printf ( " 11 October 1998\n" ); + printf ( " Added face subset selection option S.\n" ); + printf ( " 09 October 1998\n" ); + printf ( " Reworking normal vector treatments.\n" ); + printf ( " Synchronizing IVREAD and IVCON.\n" ); + printf ( " POV_WRITE added.\n" ); + printf ( " 02 October 1998\n" ); + printf ( " IVCON reproduces BOX.3DS and CONE.3DS exactly.\n" ); + printf ( " 30 September 1998\n" ); + printf ( " IVCON compiled on the PC.\n" ); + printf ( " Interactive BYTE_SWAP option added for binary files.\n" ); + printf ( " 25 September 1998\n" ); + printf ( " OBJECT_NAME made available to store object name.\n" ); + printf ( " 23 September 1998\n" ); + printf ( " 3DS binary files can be written.\n" ); + printf ( " 15 September 1998\n" ); + printf ( " 3DS binary files can be read.\n" ); + printf ( " 01 September 1998\n" ); + printf ( " COR3_RANGE, FACE_NORMAL_AVE added.\n" ); + printf ( " Major modifications to normal vectors.\n" ); + printf ( " 24 August 1998\n" ); + printf ( " HRC_READ added.\n" ); + printf ( " 21 August 1998\n" ); + printf ( " TXT_WRITE improved.\n" ); + printf ( " 20 August 1998\n" ); + printf ( " HRC_WRITE can output lines as linear splines.\n" ); + printf ( " 19 August 1998\n" ); + printf ( " Automatic normal computation for OBJ files.\n" ); + printf ( " Added normal vector computation.\n" ); + printf ( " HRC_WRITE is working.\n" ); + printf ( " 18 August 1998\n" ); + printf ( " IV_READ/IV_WRITE handle BASECOLOR RGB properly now.\n" ); + printf ( " Improved treatment of face materials and normals.\n" ); + printf ( " 17 August 1998\n" ); + printf ( " ORDER_MAX increased to 35.\n" ); + printf ( " FACE_PRINT routine added.\n" ); + printf ( " INIT_DATA routine added.\n" ); + printf ( " 14 August 1998\n" ); + printf ( " IV_READ is working.\n" ); + printf ( " 13 August 1998\n" ); + printf ( " ASE_WRITE is working.\n" ); + printf ( " IV_WRITE is working.\n" ); + printf ( " 12 August 1998\n" ); + printf ( " ASE_READ is working.\n" ); + printf ( " 10 August 1998\n" ); + printf ( " DXF_WRITE is working.\n" ); + printf ( " DXF_READ is working.\n" ); + printf ( " 27 July 1998\n" ); + printf ( " Interactive mode is working.\n" ); + printf ( " OBJ_READ is working.\n" ); + printf ( " 25 July 1998\n" ); + printf ( " OBJ_WRITE is working.\n" ); + printf ( " 24 July 1998\n" ); + printf ( " DATA_CHECK checks the input data.\n" ); + printf ( " VLA_READ is working.\n" ); + printf ( " VLA_WRITE is working.\n" ); + printf ( " 23 July 1998\n" ); + printf ( " STL_WRITE is working.\n" ); + printf ( " 22 July 1998\n" ); + printf ( " STL_READ is working.\n" ); + printf ( " TXT_WRITE is working.\n" ); +} +/**********************************************************************/ + +void node_to_vertex_material ( void ) + +/**********************************************************************/ + +/* + Purpose: + + NODE_TO_VERTEX_MAT extends node material definitions to vertices. + + Discussion: + + A NODE is a point in space. + A VERTEX is a node as used in a particular face. + One node may be used as a vertex in several faces, or none. + + Modified: + + 22 May 1999 + + Author: + + John Burkardt +*/ +{ + int iface; + int ivert; + int node; + + for ( iface = 0; iface < face_num; iface++ ) { + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + node = face[ivert][iface]; + vertex_material[ivert][iface] = cor3_material[node]; + } + } + + return; +} +/******************************************************************************/ + +int obj_read ( FILE *filein ) + +/******************************************************************************/ + +/* + Purpose: + + OBJ_READ reads a Wavefront OBJ file. + + Example: + + # magnolia.obj + + mtllib ./vp.mtl + + g + v -3.269770 -39.572201 0.876128 + v -3.263720 -39.507999 2.160890 + ... + v 0.000000 -9.988540 0.000000 + g stem + s 1 + usemtl brownskn + f 8 9 11 10 + f 12 13 15 14 + ... + f 788 806 774 + + Modified: + + 20 October 1998 + + Author: + + John Burkardt +*/ +{ + int count; + int i; + int ivert; + char *next; + char *next2; + char *next3; + int node; + int vertex_normal_num; + float r1; + float r2; + float r3; + char token[LINE_MAX_LEN]; + char token2[LINE_MAX_LEN]; + int width; +/* + Initialize. +*/ + vertex_normal_num = 0; +/* + Read the next line of the file into INPUT. +*/ + while ( fgets ( input, LINE_MAX_LEN, filein ) != NULL ) { + + text_num = text_num + 1; +/* + Advance to the first nonspace character in INPUT. +*/ + for ( next = input; *next != '\0' && isspace(*next); next++ ) { + } +/* + Skip blank lines and comments. +*/ + + if ( *next == '\0' ) { + continue; + } + + if ( *next == '#' || *next == '$' ) { + comment_num = comment_num + 1; + continue; + } +/* + Extract the first word in this line. +*/ + sscanf ( next, "%s%n", token, &width ); +/* + Set NEXT to point to just after this token. +*/ + + next = next + width; +/* + BEVEL + Bevel interpolation. +*/ + if ( leqi ( token, "BEVEL" ) == TRUE ) { + continue; + } +/* + BMAT + Basis matrix. +*/ + else if ( leqi ( token, "BMAT" ) == TRUE ) { + continue; + } +/* + C_INTERP + Color interpolation. +*/ + else if ( leqi ( token, "C_INTERP" ) == TRUE ) { + continue; + } +/* + CON + Connectivity between free form surfaces. +*/ + else if ( leqi ( token, "CON" ) == TRUE ) { + continue; + } +/* + CSTYPE + Curve or surface type. +*/ + else if ( leqi ( token, "CSTYPE" ) == TRUE ) { + continue; + } +/* + CTECH + Curve approximation technique. +*/ + else if ( leqi ( token, "CTECH" ) == TRUE ) { + continue; + } +/* + CURV + Curve. +*/ + else if ( leqi ( token, "CURV" ) == TRUE ) { + continue; + } +/* + CURV2 + 2D curve. +*/ + else if ( leqi ( token, "CURV2" ) == TRUE ) { + continue; + } +/* + D_INTERP + Dissolve interpolation. +*/ + else if ( leqi ( token, "D_INTERP" ) == TRUE ) { + continue; + } +/* + DEG + Degree. +*/ + else if ( leqi ( token, "DEG" ) == TRUE ) { + continue; + } +/* + END + End statement. +*/ + else if ( leqi ( token, "END" ) == TRUE ) { + continue; + } +/* + F V1 V2 V3 + or + F V1/VT1/VN1 V2/VT2/VN2 ... + or + F V1//VN1 V2//VN2 ... + + Face. + A face is defined by the vertices. + Optionally, slashes may be used to include the texture vertex + and vertex normal indices. + + OBJ line node indices are 1 based rather than 0 based. + So we have to decrement them before loading them into FACE. +*/ + + else if ( leqi ( token, "F" ) == TRUE ) { + + ivert = 0; + face_order[face_num] = 0; +/* + Read each item in the F definition as a token, and then + take it apart. +*/ + for ( ;; ) { + + count = sscanf ( next, "%s%n", token2, &width ); + next = next + width; + + if ( count != 1 ) { + break; + } + + count = sscanf ( token2, "%d%n", &node, &width ); + next2 = token2 + width; + + if ( count != 1 ) { + break; + } + + if ( ivert < ORDER_MAX && face_num < FACE_MAX ) { + face[ivert][face_num] = node-1; + vertex_material[ivert][face_num] = 0; + face_order[face_num] = face_order[face_num] + 1; + } +/* + If there's a slash, skip to the next slash, and extract the + index of the normal vector. +*/ + if ( *next2 == '/' ) { + + for ( next3 = next2 + 1; next3 < token2 + LINE_MAX_LEN; next3++ ) { + + if ( *next3 == '/' ) { + next3 = next3 + 1; + count = sscanf ( next3, "%d%n", &node, &width ); + + node = node - 1; + if ( 0 <= node && node < vertex_normal_num ) { + for ( i = 0; i < 3; i++ ) { + vertex_normal[i][ivert][face_num] = normal_temp[i][node]; + } + } + break; + } + } + } + ivert = ivert + 1; + } + face_num = face_num + 1; + } + +/* + G + Group name. +*/ + + else if ( leqi ( token, "G" ) == TRUE ) { + continue; + } +/* + HOLE + Inner trimming hole. +*/ + else if ( leqi ( token, "HOLE" ) == TRUE ) { + continue; + } +/* + L + I believe OBJ line node indices are 1 based rather than 0 based. + So we have to decrement them before loading them into LINE_DEX. +*/ + + else if ( leqi ( token, "L" ) == TRUE ) { + + for ( ;; ) { + + count = sscanf ( next, "%d%n", &node, &width ); + next = next + width; + + if ( count != 1 ) { + break; + } + + if ( line_num < LINES_MAX ) { + line_dex[line_num] = node-1; + line_material[line_num] = 0; + } + line_num = line_num + 1; + + } + + if ( line_num < LINES_MAX ) { + line_dex[line_num] = -1; + line_material[line_num] = -1; + } + line_num = line_num + 1; + + } + +/* + LOD + Level of detail. +*/ + else if ( leqi ( token, "LOD" ) == TRUE ) { + continue; + } +/* + MG + Merging group. +*/ + else if ( leqi ( token, "MG" ) == TRUE ) { + continue; + } +/* + MTLLIB + Material library. +*/ + + else if ( leqi ( token, "MTLLIB" ) == TRUE ) { + continue; + } +/* + O + Object name. +*/ + else if ( leqi ( token, "O" ) == TRUE ) { + continue; + } +/* + P + Point. +*/ + else if ( leqi ( token, "P" ) == TRUE ) { + continue; + } +/* + PARM + Parameter values. +*/ + else if ( leqi ( token, "PARM" ) == TRUE ) { + continue; + } +/* + S + Smoothing group +*/ + else if ( leqi ( token, "S" ) == TRUE ) { + continue; + } +/* + SCRV + Special curve. +*/ + else if ( leqi ( token, "SCRV" ) == TRUE ) { + continue; + } +/* + SHADOW_OBJ + Shadow casting. +*/ + else if ( leqi ( token, "SHADOW_OBJ" ) == TRUE ) { + continue; + } +/* + SP + Special point. +*/ + else if ( leqi ( token, "SP" ) == TRUE ) { + continue; + } +/* + STECH + Surface approximation technique. +*/ + else if ( leqi ( token, "STECH" ) == TRUE ) { + continue; + } +/* + STEP + Stepsize. +*/ + else if ( leqi ( token, "CURV" ) == TRUE ) { + continue; + } +/* + SURF + Surface. +*/ + else if ( leqi ( token, "SURF" ) == TRUE ) { + continue; + } +/* + TRACE_OBJ + Ray tracing. +*/ + else if ( leqi ( token, "TRACE_OBJ" ) == TRUE ) { + continue; + } +/* + TRIM + Outer trimming loop. +*/ + else if ( leqi ( token, "TRIM" ) == TRUE ) { + continue; + } +/* + USEMTL + Material name. +*/ + else if ( leqi ( token, "USEMTL" ) == TRUE ) { + continue; + } + +/* + V X Y Z W + Geometric vertex. + W is optional, a weight for rational curves and surfaces. + The default for W is 1. +*/ + + else if ( leqi ( token, "V" ) == TRUE ) { + + sscanf ( next, "%e %e %e", &r1, &r2, &r3 ); + + if ( cor3_num < COR3_MAX ) { + cor3[0][cor3_num] = r1; + cor3[1][cor3_num] = r2; + cor3[2][cor3_num] = r3; + } + + cor3_num = cor3_num + 1; + + } +/* + VN + Vertex normals. +*/ + + else if ( leqi ( token, "VN" ) == TRUE ) { + + sscanf ( next, "%e %e %e", &r1, &r2, &r3 ); + + if ( vertex_normal_num < ORDER_MAX * FACE_MAX ) { + normal_temp[0][vertex_normal_num] = r1; + normal_temp[1][vertex_normal_num] = r2; + normal_temp[2][vertex_normal_num] = r3; + } + + vertex_normal_num = vertex_normal_num + 1; + + } +/* + VT + Vertex texture. +*/ + else if ( leqi ( token, "VT" ) == TRUE ) { + continue; + } +/* + VP + Parameter space vertices. +*/ + else if ( leqi ( token, "VP" ) == TRUE ) { + continue; + } +/* + Unrecognized +*/ + else { + bad_num = bad_num + 1; + } + + } + return SUCCESS; +} +/******************************************************************************/ + +int obj_write ( FILE *fileout ) + +/******************************************************************************/ + +/* + Purpose: + + OBJ_WRITE writes a Wavefront OBJ file. + + Example: + + # magnolia.obj + + mtllib ./vp.mtl + + g + v -3.269770 -39.572201 0.876128 + v -3.263720 -39.507999 2.160890 + ... + v 0.000000 -9.988540 0.000000 + g stem + s 1 + usemtl brownskn + f 8 9 11 10 + f 12 13 15 14 + ... + f 788 806 774 + + Modified: + + 01 September 1998 + + Author: + + John Burkardt +*/ +{ + int i; + int iface; + int indexvn; + int ivert; + int k; + int new; + int text_num; + float w; +/* + Initialize. +*/ + text_num = 0; + w = 1.0; + + fprintf ( fileout, "# %s created by IVCON.\n", fileout_name ); + fprintf ( fileout, "# Original data in %s.\n", filein_name ); + fprintf ( fileout, "\n" ); + fprintf ( fileout, "g %s\n", object_name ); + fprintf ( fileout, "\n" ); + + text_num = text_num + 5; +/* + V: vertex coordinates. +*/ + for ( i = 0; i < cor3_num; i++ ) { + fprintf ( fileout, "v %f %f %f\n", + cor3[0][i], cor3[1][i], cor3[2][i]); + text_num = text_num + 1; + } + +/* + VN: Vertex face normal vectors. +*/ + if ( face_num > 0 ) { + fprintf ( fileout, "\n" ); + text_num = text_num + 1; + } + + for ( iface = 0; iface < face_num; iface++ ) { + + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + + fprintf ( fileout, "vn %f %f %f\n", vertex_normal[0][ivert][iface], + vertex_normal[1][ivert][iface], vertex_normal[2][ivert][iface] ); + text_num = text_num + 1; + } + } +/* + F: faces. +*/ + if ( face_num > 0 ) { + fprintf ( fileout, "\n" ); + text_num = text_num + 1; + } + + indexvn = 0; + + for ( iface = 0; iface < face_num; iface++ ) { + + fprintf ( fileout, "f" ); + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + indexvn = indexvn + 1; + fprintf ( fileout, " %d//%d", face[ivert][iface]+1, indexvn ); + } + fprintf ( fileout, "\n" ); + text_num = text_num + 1; + } +/* + L: lines. +*/ + if ( line_num > 0 ) { + fprintf ( fileout, "\n" ); + text_num = text_num + 1; + } + + new = TRUE; + + for ( i = 0; i < line_num; i++ ) { + + k = line_dex[i]; + + if ( k == -1 ) { + fprintf ( fileout, "\n" ); + text_num = text_num + 1; + new = TRUE; + } + else { + if ( new == TRUE ) { + fprintf ( fileout, "l" ); + new = FALSE; + } + fprintf ( fileout, " %d", k+1 ); + } + + } + + fprintf ( fileout, "\n" ); + text_num = text_num + 1; +/* + Report. +*/ + printf ( "\n" ); + printf ( "OBJ_WRITE - Wrote %d text lines.\n", text_num ); + + return SUCCESS; +} +/******************************************************************************/ + +int pov_write ( FILE *fileout ) + +/******************************************************************************/ + +/* + Purpose: + + POV_WRITE writes graphics information to a POV file. + + Example: + + // cone.pov created by IVCON. + // Original data in cone.iv + + #version 3.0 + #include "colors.inc" + #include "shapes.inc" + global_settings { assumed_gamma 2.2 } + + camera { + right < 4/3, 0, 0> + up < 0, 1, 0 > + sky < 0, 1, 0 > + angle 20 + location < 0, 0, -300 > + look_at < 0, 0, 0> + } + + light_source { < 20, 50, -100 > color White } + + background { color SkyBlue } + + #declare RedText = texture { + pigment { color rgb < 0.8, 0.2, 0.2> } + finish { ambient 0.2 diffuse 0.5 } + } + + #declare BlueText = texture { + pigment { color rgb < 0.2, 0.2, 0.8> } + finish { ambient 0.2 diffuse 0.5 } + } + mesh { + smooth_triangle { + < 0.29, -0.29, 0.0>, < 0.0, 0.0, -1.0 >, + < 38.85, 10.03, 0.0>, < 0.0, 0.0, -1.0 >, + < 40.21, -0.29, 0.0>, < 0.0, 0.0, -1.0 > + texture { RedText } } + ... + smooth_triangle { + < 0.29, -0.29, 70.4142 >, < 0.0, 0.0, 1.0 >, + < 8.56, -2.51, 70.4142 >, < 0.0, 0.0, 1.0 >, + < 8.85, -0.29, 70.4142 >, < 0.0, 0.0, 1.0 > + texture { BlueText } } + } + + Modified: + + 08 October 1998 + + Author: + + John Burkardt +*/ +{ + int i; + int j; + int jj; + int jlo; + int k; + int text_num; + + text_num = 0; + fprintf ( fileout, "// %s created by IVCON.\n", fileout_name ); + fprintf ( fileout, "// Original data in %s.\n", filein_name ); + text_num = text_num + 2; +/* + Initial declarations. +*/ + fprintf ( fileout, "\n" ); + fprintf ( fileout, "#version 3.0\n" ); + fprintf ( fileout, "#include \"colors.inc\"\n" ); + fprintf ( fileout, "#include \"shapes.inc\"\n" ); + fprintf ( fileout, "global_settings { assumed_gamma 2.2 }\n" ); + fprintf ( fileout, "\n" ); + fprintf ( fileout, "camera {\n" ); + fprintf ( fileout, " right < 4/3, 0, 0>\n" ); + fprintf ( fileout, " up < 0, 1, 0 >\n" ); + fprintf ( fileout, " sky < 0, 1, 0 >\n" ); + fprintf ( fileout, " angle 20\n" ); + fprintf ( fileout, " location < 0, 0, -300 >\n" ); + fprintf ( fileout, " look_at < 0, 0, 0>\n" ); + fprintf ( fileout, "}\n" ); + fprintf ( fileout, "\n" ); + fprintf ( fileout, "light_source { < 20, 50, -100 > color White }\n" ); + fprintf ( fileout, "\n" ); + fprintf ( fileout, "background { color SkyBlue }\n" ); + + text_num = text_num + 15; +/* + Declare RGB textures. +*/ + fprintf ( fileout, "\n" ); + fprintf ( fileout, "#declare RedText = texture {\n" ); + fprintf ( fileout, " pigment { color rgb < 0.8, 0.2, 0.2> }\n" ); + fprintf ( fileout, " finish { ambient 0.2 diffuse 0.5 }\n" ); + fprintf ( fileout, "}\n" ); + fprintf ( fileout, "\n" ); + fprintf ( fileout, "#declare GreenText = texture {\n" ); + fprintf ( fileout, " pigment { color rgb < 0.2, 0.8, 0.2> }\n" ); + fprintf ( fileout, " finish { ambient 0.2 diffuse 0.5 }\n" ); + fprintf ( fileout, "}\n" ); + fprintf ( fileout, "\n" ); + fprintf ( fileout, "#declare BlueText = texture {\n" ); + fprintf ( fileout, " pigment { color rgb < 0.2, 0.2, 0.8> }\n" ); + fprintf ( fileout, " finish { ambient 0.2 diffuse 0.5 }\n" ); + fprintf ( fileout, "}\n" ); +/* + Write one big object. +*/ + fprintf ( fileout, "mesh {\n" ); + text_num = text_num + 1; +/* + Do the next face. +*/ + for ( i = 0; i < face_num; i++ ) { +/* + Break the face up into triangles, anchored at node 1. +*/ + for ( jlo = 0; jlo < face_order[i] - 2; jlo++ ) { + fprintf ( fileout, " smooth_triangle {\n" ); + text_num = text_num + 1; + + for ( j = jlo; j < jlo + 3; j++ ) { + + if ( j == jlo ) { + jj = 0; + } + else { + jj = j; + } + + k = face[jj][i]; + + fprintf ( fileout, "<%f, %f, %f>, <%f, %f, %f>", + cor3[0][k], cor3[1][k], cor3[2][k], + vertex_normal[0][jj][i], + vertex_normal[1][jj][i], + vertex_normal[2][jj][i] ); + + if ( j < jlo + 2 ) { + fprintf ( fileout, ",\n" ); + } + else { + fprintf ( fileout, "\n" ); + } + text_num = text_num + 1; + + } + + if (i%6 == 1 ) { + fprintf ( fileout, "texture { RedText } }\n" ); + } + else if ( i%2 == 0 ) { + fprintf ( fileout, "texture { BlueText } }\n" ); + } + else { + fprintf ( fileout, "texture { GreenText } }\n" ); + } + text_num = text_num + 1; + + } + + } + + fprintf ( fileout, "}\n" ); + text_num = text_num + 1; +/* + Report. +*/ + printf ( "\n" ); + printf ( "POV_WRITE - Wrote %d text lines.\n", text_num ); + + return SUCCESS; +} +/******************************************************************************/ + +int rcol_find ( float a[][COR3_MAX], int m, int n, float r[] ) + +/******************************************************************************/ + +/* + Purpose: + + RCOL_FIND finds if a vector occurs in a table. + + Comment: + + Explicitly forcing the second dimension to be COR3_MAX is a kludge. + I have to figure out how to do this as pointer references. + + Also, since the array is not sorted, this routine should not be carelessly + called repeatedly for really big values of N, because you'll waste a + lot of time. + + Modified: + + 27 April 1999 + + Author: + + John Burkardt +*/ +{ + int i; + int icol; + int j; + + icol = -1; + + for ( j = 0; j < n; j++ ) { + for ( i = 0; i < m; i++ ) { + if ( a[i][j] != r[i] ) { + break; + } + if ( i == m-1 ) { + return j; + } + } + } + + return icol; +} +/**********************************************************************/ + +float rgb_to_hue ( float r, float g, float b ) + +/**********************************************************************/ + +/* + Purpose: + + RGB_TO_HUE converts (R,G,B) colors to a hue value between 0 and 1. + + Discussion: + + The hue computed here should be the same as the H value computed + for HLS and HSV, except that it ranges from 0 to 1 instead of + 0 to 360. + + A monochromatic color ( white, black, or a shade of gray) does not + have a hue. This routine will return a special value of H = -1 + for such cases. + + Examples: + + Color R G B H + + red 1.0 0.0 0.0 0.00 + yellow 1.0 1.0 0.0 0.16 + green 0.0 1.0 0.0 0.33 + cyan 0.0 1.0 1.0 0.50 + blue 0.0 0.0 1.0 0.67 + magenta 1.0 0.0 1.0 0.83 + + black 0.0 0.0 0.0 -1.00 + gray 0.5 0.5 0.5 -1.00 + white 1.0 1.0 1.0 -1.00 + + Modified: + + 22 May 1999 + + Author: + + John Burkardt + + Parameters: + + Input, float R, G, B, the red, green and blue values of the color. + These values should be between 0 and 1. + + Output, float RGB_TO_HUE, the corresponding hue of the color, or -1.0 if + the color is monochromatic. +*/ +{ + float h; + float rgbmax; + float rgbmin; +/* + Make sure the colors are between 0 and 1. +*/ + if ( r < 0.0 ) { + r = 0.0; + } + else if ( r > 1.0 ) { + r = 1.0; + } + + if ( g < 0.0 ) { + g = 0.0; + } + else if ( g > 1.0 ) { + g = 1.0; + } + + if ( b < 0.0 ) { + b = 0.0; + } + else if ( b > 1.0 ) { + b = 1.0; + } +/* + Compute the minimum and maximum of R, G and B. +*/ + rgbmax = r; + if ( g > rgbmax ) { + rgbmax = g; + } + if ( b > rgbmax ) { + rgbmax = b; + } + + rgbmin = r; + if ( g < rgbmin ) { + rgbmin = g; + } + if ( b < rgbmin ) { + rgbmin = b; + } +/* + If RGBMAX = RGBMIN, { the color has no hue. +*/ + if ( rgbmax == rgbmin ) { + h = - 1.0; + } +/* + Otherwise, we need to determine the dominant color. +*/ + else { + + if ( r == rgbmax ) { + h = ( g - b ) / ( rgbmax - rgbmin ); + } + else if ( g == rgbmax ) { + h = 2.0 + ( b - r ) / ( rgbmax - rgbmin ); + } + else if ( b == rgbmax ) { + h = 4.0 + ( r - g ) / ( rgbmax - rgbmin ); + } + + h = h / 6.0; +/* + Make sure H lies between 0 and 1.0. +*/ + if ( h < 0.0 ) { + h = h + 1.0; + } + else if ( h > 1.0 ) { + h = h - 1.0; + } + + } + + return h; +} +/******************************************************************************/ + +short int short_int_read ( FILE *filein ) + +/******************************************************************************/ +/* + Purpose: + + SHORT_INT_READ reads a short int from a binary file. + + Modified: + + 14 October 1998 + + Author: + + John Burkardt +*/ +{ + unsigned char c1; + unsigned char c2; + short int ival; + + c1 = fgetc ( filein ); + c2 = fgetc ( filein ); + + ival = c1 | ( c2 << 8 ); + + return ival; +} +/******************************************************************************/ + +int short_int_write ( FILE *fileout, short int short_int_val ) + +/******************************************************************************/ + +/* + Purpose: + + SHORT_INT_WRITE writes a short int to a binary file. + + Modified: + + 14 October 1998 + + Author: + + John Burkardt +*/ +{ + union { + short int yint; + char ychar[2]; + } y; + + y.yint = short_int_val; + + if ( byte_swap == TRUE ) { + fputc ( y.ychar[1], fileout ); + fputc ( y.ychar[0], fileout ); + } + else { + fputc ( y.ychar[0], fileout ); + fputc ( y.ychar[1], fileout ); + } + + return 2; +} +/******************************************************************************/ + +int smf_read ( FILE *filein ) + +/******************************************************************************/ + +/* + Purpose: + + SMF_READ reads an SMF file. + + Example: + + #SMF2.0 + # cube_face.smf + # This example demonstrates how an RGB color can be assigned to + # each face of an object. + # + # First, define the geometry of the cube. + # + v 0.0 0.0 0.0 + v 1.0 0.0 0.0 + v 0.0 1.0 0.0 + v 1.0 1.0 0.0 + v 0.0 0.0 1.0 + v 1.0 0.0 1.0 + v 0.0 1.0 1.0 + v 1.0 1.0 1.0 + f 1 4 2 + f 1 3 4 + f 5 6 8 + f 5 8 7 + f 1 2 6 + f 1 6 5 + f 2 4 8 + f 2 8 6 + f 4 3 7 + f 4 7 8 + f 3 1 5 + f 3 5 7 + # + # Colors will be bound 1 per face. + # + bind c face + c 1.0 0.0 0.0 + c 1.0 0.0 0.0 + c 0.0 1.0 0.0 + c 0.0 1.0 0.0 + c 0.0 0.0 1.0 + c 0.0 0.0 1.0 + c 1.0 1.0 0.0 + c 1.0 1.0 0.0 + c 0.0 1.0 1.0 + c 0.0 1.0 1.0 + c 1.0 0.0 1.0 + c 1.0 0.0 1.0 + # + # Normal vectors will be bound 1 per face. + # + bind n face + n 0.0 0.0 -1.0 + n 0.0 0.0 -1.0 + n 0.0 0.0 1.0 + n 0.0 0.0 1.0 + n 0.0 -1.0 0.0 + n 0.0 -1.0 0.0 + n 1.0 0.0 0.0 + n 1.0 0.0 0.0 + n 0.0 1.0 0.0 + n 0.0 1.0 0.0 + n -1.0 0.0 0.0 + n -1.0 0.0 0.0 + # + # Texture coordinate pairs will be bound 1 per face. + # + bind r face + r 0.0 0.0 + r 0.0 0.1 + r 0.0 0.2 + r 0.0 0.3 + r 0.1 0.0 + r 0.1 0.1 + r 0.1 0.2 + r 0.1 0.3 + r 0.2 0.0 + r 0.2 0.1 + r 0.2 0.2 + r 0.2 0.3 + + Modified: + + 03 July 1999 + + Author: + + John Burkardt +*/ +{ + float angle; + char axis; + float b; + char cnr[LINE_MAX_LEN]; + int count; + float dx; + float dy; + int face_count; + float g; + int icor3_normal; + int icor3_tex_uv; + int iface_normal; + int iface_tex_uv; + int imat; + int ivert; + int level; + char *next; + int node; + int node_count; + float r; + float r1; + float r2; + float r3; + float rgba[4]; + char *string; + float sx; + float sy; + float sz; + char token[LINE_MAX_LEN]; + char token2[LINE_MAX_LEN]; + char type[LINE_MAX_LEN]; + float u; + float v; + int vertex_base; + int vertex_correction; + int width; + float x; + float xvec[3]; + float y; + float z; + + face_count = 0; + icor3_normal = 0; + icor3_tex_uv = 0; + iface_normal = 0; + iface_tex_uv = 0; + level = 0; + node_count = 0; + vertex_base = 0; + vertex_correction = 0; +/* + Read the next line of the file into INPUT. +*/ + while ( fgets ( input, LINE_MAX_LEN, filein ) != NULL ) { + + text_num = text_num + 1; + + if ( debug ) { + printf ( "SMF_READ: DEBUG: Reading line #%d\n", text_num ); + } +/* + Advance to the first nonspace character in INPUT. +*/ + for ( next = input; *next != '\0' && isspace(*next); next++ ) { + } +/* + Skip blank lines. +*/ + + if ( *next == '\0' ) { + continue; + } +/* + Skip comment lines. +*/ + if ( *next == '#' || *next == '$' ) { + comment_num = comment_num + 1; + continue; + } +/* + Extract the first word in this line. +*/ + sscanf ( next, "%s%n", token, &width ); +/* + Set NEXT to point to just after this token. +*/ + next = next + width; +/* + BEGIN + Reset the transformation matrix to identity. + Node numbering starts at zero again. (Really, this is level based) + (Really should define a new transformation matrix, and concatenate.) + (Also, might need to keep track of level.) +*/ + if ( leqi ( token, "BEGIN" ) == TRUE ) { + + level = level + 1; + + vertex_base = cor3_num; + group_num = group_num + 1; + tmat_init ( transform_matrix ); + + } +/* + BIND [c|n|r] [vertex|face] + Specify the binding for RGB color, Normal, or Texture. + Options are "vertex" or "face" +*/ + else if ( leqi ( token, "BIND" ) == TRUE ) { + + sscanf ( next, "%s%n", cnr, &width ); + next = next + width; + + if ( debug ) { + printf ( "CNR = %s\n", cnr ); + } + + sscanf ( next, "%s%n", type, &width ); + next = next + width; + + if ( debug ) { + printf ( "TYPE = %s\n", type ); + } + + if ( leqi ( cnr, "C" ) == TRUE ) { + + if ( leqi ( type, "VERTEX" ) == TRUE ) { + strcpy ( material_binding, "PER_VERTEX" ); + } + else if ( leqi ( type, "FACE" ) == TRUE ) { + strcpy ( material_binding, "PER_FACE" ); + } + + } + else if ( leqi ( cnr, "N" ) == TRUE ) { + + if ( leqi ( type, "VERTEX" ) == TRUE ) { + strcpy ( normal_binding, "PER_VERTEX" ); + } + else if ( leqi ( type, "FACE" ) == TRUE ) { + strcpy ( normal_binding, "PER_FACE" ); + } + + } + else if ( leqi ( cnr, "R" ) == TRUE ) { + + if ( leqi ( type, "VERTEX" ) == TRUE ) { + strcpy ( texture_binding, "PER_VERTEX" ); + } + else if ( leqi ( type, "FACE" ) == TRUE ) { + strcpy ( texture_binding, "PER_FACE" ); + } + + } + + } +/* + C + Specify an RGB color, with R, G, B between 0.0 and 1.0. +*/ + else if ( leqi ( token, "C" ) == TRUE ) { + + sscanf ( next, "%f%n", &r, &width ); + next = next + width; + + sscanf ( next, "%f%n", &g, &width ); + next = next + width; + + sscanf ( next, "%f%n", &b, &width ); + next = next + width; +/* + Set up a temporary material (R,G,B,1.0). + Add the material to the material database, or find the index of + a matching material already in. + Assign the material of the node or face to this index. +*/ + rgba[0] = r; + rgba[1] = g; + rgba[2] = b; + rgba[3] = 1.0; + + if ( material_num < MATERIAL_MAX ) { + + for ( k = 0; k < 4; k++ ) { + material_rgba[k][material_num] = rgba[k]; + } + + imat = material_num; + material_num = material_num + 1; + + } + else { + + imat = 0; + + } + + if ( leqi ( material_binding, "PER_FACE" ) == TRUE ) { + + face_count = face_count + 1; + face_material[face_count] = imat; + + } + else if ( leqi ( material_binding, "PER_VERTEX" ) == TRUE ) { + + node_count = node_count + 1; + cor3_material[node_count] = imat; + + } + else { + + printf ( "\n" ); + printf ( "SMF_READ - Fatal error!\n" ); + printf ( " Material binding undefined!\n" ); + return ERROR; + + } + + } +/* + END + Drop down a level. +*/ + else if ( leqi ( token, "END" ) == TRUE ) { + + level = level - 1; + + if ( level < 0 ) { + printf ( "\n" ); + printf ( "SMF_READ - Fatal error!\n" ); + printf ( " More END statements than BEGINs!\n" ); + return ERROR; + } + } +/* + F V1 V2 V3 + + Face. + A face is defined by the vertices. + Node indices are 1 based rather than 0 based. + So we have to decrement them before loading them into FACE. + Note that vertex indices start back at 0 each time a BEGIN is entered. + The strategy here won't handle nested BEGIN's, just one at a time. +*/ + + else if ( leqi ( token, "F" ) == TRUE ) { + + ivert = 0; + face_order[face_num] = 0; +/* + Read each item in the F definition as a token, and then + take it apart. +*/ + for ( ;; ) { + + count = sscanf ( next, "%s%n", token2, &width ); + next = next + width; + + if ( count != 1 ) { + break; + } + + count = sscanf ( token2, "%d%n", &node, &width ); + + if ( count != 1 ) { + break; + } + + if ( ivert < ORDER_MAX && face_num < FACE_MAX ) { + face[ivert][face_num] = node - 1 + vertex_base; + vertex_material[ivert][face_num] = 0; + face_order[face_num] = face_order[face_num] + 1; + } + ivert = ivert + 1; + } + face_num = face_num + 1; + } +/* + N + Specify a normal vector. +*/ + else if ( leqi ( token, "N" ) == TRUE ) { + + sscanf ( next, "%f%n", &x, &width ); + next = next + width; + + sscanf ( next, "%f%n", &y, &width ); + next = next + width; + + sscanf ( next, "%f%n", &z, &width ); + next = next + width; + + if ( leqi ( normal_binding, "PER_FACE" ) == TRUE ) { + + face_normal[0][iface_normal] = x; + face_normal[1][iface_normal] = y; + face_normal[2][iface_normal] = z; + + iface_normal = iface_normal + 1; + + } + else if ( leqi ( normal_binding, "PER_VERTEX" ) == TRUE ) { + + cor3_normal[0][icor3_normal] = x; + cor3_normal[1][icor3_normal] = y; + cor3_normal[2][icor3_normal] = z; + + icor3_normal = icor3_normal + 1; + + } + else { + + printf ( "\n" ); + printf ( "SMF_READ - Fatal error!\n" ); + printf ( " Normal binding undefined!\n" ); + return ERROR; + + } + } +/* + R + Specify a texture coordinate. +*/ + else if ( leqi ( token, "R" ) == TRUE ) { + + sscanf ( next, "%f%n", &u, &width ); + next = next + width; + + sscanf ( next, "%f%n", &v, &width ); + next = next + width; + + if ( leqi ( texture_binding, "PER_FACE" ) == TRUE ) { + + face_tex_uv[0][iface_tex_uv] = u; + face_tex_uv[1][iface_tex_uv] = v; + + icor3_tex_uv = icor3_tex_uv + 1; + + } + else if ( leqi ( texture_binding, "PER_VERTEX" ) == TRUE ) { + + cor3_tex_uv[0][icor3_tex_uv] = u; + cor3_tex_uv[1][icor3_tex_uv] = v; + + icor3_tex_uv = icor3_tex_uv + 1; + } + else { + printf ( "\n" ); + printf ( "SMF_READ - Fatal error!\n" ); + printf ( " Texture binding undefined!\n" ); + return ERROR; + } + + } +/* + ROT [x|y|z] +*/ + else if ( leqi ( token, "ROT" ) == TRUE ) { + + sscanf ( next, "%c%n", &axis, &width ); + next = next + width; + + sscanf ( next, "%f%n", &angle, &width ); + next = next + width; + + tmat_rot_axis ( transform_matrix, transform_matrix, angle, axis ); + + } +/* + SCALE +*/ + else if ( leqi ( token, "SCALE" ) == TRUE ) { + + sscanf ( next, "%f%n", &sx, &width ); + next = next + width; + + sscanf ( next, "%f%n", &sy, &width ); + next = next + width; + + sscanf ( next, "%f%n", &sz, &width ); + next = next + width; + + tmat_scale ( transform_matrix, transform_matrix, sx, sy, sz ); + } +/* + SET VERTEX_CORRECTION + Specify increment to add to vertex indices in file. +*/ + else if ( leqi ( token, "SET" ) == TRUE ) { + + sscanf ( next, "%s%n", cnr, &width ); + next = next + width; + + sscanf ( next, "%d%n", &vertex_correction, &width ); + next = next + width; + + } +/* + T_SCALE + Specify a scaling to texture coordinates. +*/ + else if ( leqi ( token, "T_SCALE" ) == TRUE ) { + + sscanf ( next, "%f%n", &dx, &width ); + next = next + width; + + sscanf ( next, "%f%n", &dy, &width ); + next = next + width; + + } +/* + T_TRANS + Specify a translation to texture coordinates. +*/ + else if ( leqi ( token, "T_TRANS" ) == TRUE ) { + + sscanf ( next, "%f%n", &dx, &width ); + next = next + width; + + sscanf ( next, "%f%n", &dy, &width ); + next = next + width; + + } +/* + TEX + Specify a filename containing the texture. + (ANY CHANCE THIS IS RIGHT?) +*/ + else if ( leqi ( token, "TEX" ) == TRUE ) { + + sscanf ( next, "%s%n", string, &width ); + + for ( i = 0; i < LINE_MAX_LEN; i++ ) { + texture_name[texture_num][i] = string[i]; + if ( string[i] == '\0' ) { + break; + } + } + + texture_num = texture_num + 1; + + } +/* + TRANS +*/ + else if ( leqi ( token, "TRANS" ) == TRUE ) { + + sscanf ( next, "%f%n", &x, &width ); + next = next + width; + + sscanf ( next, "%f%n", &y, &width ); + next = next + width; + + sscanf ( next, "%f%n", &z, &width ); + next = next + width; + + tmat_trans ( transform_matrix, transform_matrix, x, y, z ); + } +/* + V X Y Z + Geometric vertex. +*/ + else if ( leqi ( token, "V" ) == TRUE ) { + + sscanf ( next, "%e %e %e", &r1, &r2, &r3 ); + + xvec[0] = r1; + xvec[1] = r2; + xvec[2] = r3; +/* + Apply current transformation matrix. + Right now, we can only handle one matrix, not a stack of + matrices representing nested BEGIN/END's. +*/ + tmat_mxp ( transform_matrix, xvec, xvec ); + + if ( cor3_num < COR3_MAX ) { + for ( i = 0; i < 3; i++ ) { + cor3[i][cor3_num] = xvec[i]; + } + } + + cor3_num = cor3_num + 1; + + } +/* + Unrecognized keyword. +*/ + else { + + bad_num = bad_num + 1; + + if ( bad_num <= 10 ) { + printf ( "\n" ); + printf ( "SMF_READ: Bad data on line %d.\n", text_num ); + } + } + + } +/* + Extend the material definition + * from the face to the vertices and nodes, or + * from the vertices to the faces and nodes. +*/ + if ( strcmp ( material_binding, "PER_FACE" ) == 0 ) { + + face_to_vertex_material ( ); + + vertex_to_node_material ( ); + + } + else if ( strcmp ( material_binding, "PER_VERTEX" ) == 0 ) { + + node_to_vertex_material ( ); + + vertex_to_face_material ( ); + + } + + return SUCCESS; +} +/******************************************************************************/ + +int smf_write ( FILE *fileout ) + +/******************************************************************************/ + +/* + Purpose: + + SMF_WRITE writes graphics information to an SMF file. + + Example: + + #SMF2.0 + # cube_face.smf + # This example demonstrates how an RGB color can be assigned to + # each face of an object. + # + # First, define the geometry of the cube. + # + v 0.0 0.0 0.0 + v 1.0 0.0 0.0 + v 0.0 1.0 0.0 + v 1.0 1.0 0.0 + v 0.0 0.0 1.0 + v 1.0 0.0 1.0 + v 0.0 1.0 1.0 + v 1.0 1.0 1.0 + f 1 4 2 + f 1 3 4 + f 5 6 8 + f 5 8 7 + f 1 2 6 + f 1 6 5 + f 2 4 8 + f 2 8 6 + f 4 3 7 + f 4 7 8 + f 3 1 5 + f 3 5 7 + # + # Colors will be bound 1 per face. + # + bind c face + c 1.0 0.0 0.0 + c 1.0 0.0 0.0 + c 0.0 1.0 0.0 + c 0.0 1.0 0.0 + c 0.0 0.0 1.0 + c 0.0 0.0 1.0 + c 1.0 1.0 0.0 + c 1.0 1.0 0.0 + c 0.0 1.0 1.0 + c 0.0 1.0 1.0 + c 1.0 0.0 1.0 + c 1.0 0.0 1.0 + # + # Normal vectors will be bound 1 per face. + # + bind n face + n 0.0 0.0 -1.0 + n 0.0 0.0 -1.0 + n 0.0 0.0 1.0 + n 0.0 0.0 1.0 + n 0.0 -1.0 0.0 + n 0.0 -1.0 0.0 + n 1.0 0.0 0.0 + n 1.0 0.0 0.0 + n 0.0 1.0 0.0 + n 0.0 1.0 0.0 + n -1.0 0.0 0.0 + n -1.0 0.0 0.0 + # + # Texture coordinate pairs will be bound 1 per face. + # + bind r face + r 0.0 0.0 + r 0.0 0.1 + r 0.0 0.2 + r 0.0 0.3 + r 0.1 0.0 + r 0.1 0.1 + r 0.1 0.2 + r 0.1 0.3 + r 0.2 0.0 + r 0.2 0.1 + r 0.2 0.2 + r 0.2 0.3 + + Modified: + + 05 July 1999 + + Author: + + John Burkardt +*/ +{ + int i; + int icor3; + int iface; + int imat; + int ivert; + int text_num; +/* + Initialize. +*/ + text_num = 0; + + fprintf ( fileout, "#$SMF 2.0\n" ); + fprintf ( fileout, "#$vertices %d\n", cor3_num ); + fprintf ( fileout, "#$faces %d\n", face_num ); + fprintf ( fileout, "#\n" ); + fprintf ( fileout, "# %s created by IVCON.\n", fileout_name ); + fprintf ( fileout, "# Original data in %s.\n", filein_name ); + fprintf ( fileout, "#\n" ); + + text_num = text_num + 7; +/* + V: vertex coordinates. +*/ + for ( i = 0; i < cor3_num; i++ ) { + fprintf ( fileout, "v %f %f %f\n", + cor3[0][i], cor3[1][i], cor3[2][i] ); + text_num = text_num + 1; + } +/* + F: faces. +*/ + if ( face_num > 0 ) { + fprintf ( fileout, "\n" ); + text_num = text_num + 1; + } + + for ( iface = 0; iface < face_num; iface++ ) { + + fprintf ( fileout, "f" ); + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + fprintf ( fileout, " %d", face[ivert][iface]+1 ); + } + fprintf ( fileout, "\n" ); + text_num = text_num + 1; + } +/* + Material binding. +*/ + fprintf ( fileout, "bind c vertex\n" ); + text_num = text_num + 1; +/* + Material RGB values at each node. +*/ + for ( icor3 = 0; icor3 < cor3_num; icor3++ ) { + + imat = cor3_material[icor3]; + + fprintf ( fileout, "c %f %f %f\n", material_rgba[0][imat], + material_rgba[1][imat], material_rgba[2][imat] ); + + text_num = text_num + 1; + } +/* + Normal binding. +*/ + fprintf ( fileout, "bind n vertex\n" ); + text_num = text_num + 1; +/* + Normal vector at each node. +*/ + for ( icor3 = 0; icor3 < cor3_num; icor3++ ) { + + fprintf ( fileout, "n %f %f %f\n", cor3_normal[0][icor3], + cor3_normal[1][icor3], cor3_normal[2][icor3] ); + + text_num = text_num + 1; + } + + if ( texture_num > 0 ) { +/* + Texture filename. +*/ + fprintf ( fileout, "tex %s\n", texture_name[0] ); + text_num = text_num + 1; +/* + Texture binding. +*/ + fprintf ( fileout, "bind r vertex\n" ); + text_num = text_num + 1; +/* + Texture coordinates at each node. +*/ + for ( icor3 = 0; icor3 < cor3_num; icor3++ ) { + fprintf ( fileout, "r %f %f\n", cor3_tex_uv[0][icor3], + cor3_tex_uv[1][icor3] ); + text_num = text_num + 1; + } + + } +/* + Report. +*/ + printf ( "\n" ); + printf ( "SMF_WRITE - Wrote %d text lines.\n", text_num ); + + return SUCCESS; +} +/******************************************************************************/ + +int stla_read ( FILE *filein ) + +/******************************************************************************/ + +/* + Purpose: + + STLA_READ reads an ASCII STL (stereolithography) file. + + Examples: + + solid MYSOLID + facet normal 0.4 0.4 0.2 + outerloop + vertex 1.0 2.1 3.2 + vertex 2.1 3.7 4.5 + vertex 3.1 4.5 6.7 + endloop + endfacet + ... + facet normal 0.2 0.2 0.4 + outerloop + vertex 2.0 2.3 3.4 + vertex 3.1 3.2 6.5 + vertex 4.1 5.5 9.0 + endloop + endfacet + endsolid MYSOLID + + Modified: + + 20 October 1998 + + Author: + + John Burkardt +*/ +{ + int count; + int i; + int icor3; + int ivert; + char *next; + float r1; + float r2; + float r3; + float r4; + float temp[3]; + char token[LINE_MAX_LEN]; + int width; +/* + Read the next line of the file into INPUT. +*/ + while ( fgets ( input, LINE_MAX_LEN, filein ) != NULL ) { + + text_num = text_num + 1; +/* + Advance to the first nonspace character in INPUT. +*/ + for ( next = input; *next != '\0' && isspace(*next); next++ ) { + } +/* + Skip blank lines and comments. +*/ + if ( *next == '\0' || *next == '#' || *next == '!' || *next == '$' ) { + continue; + } +/* + Extract the first word in this line. +*/ + sscanf ( next, "%s%n", token, &width ); +/* + Set NEXT to point to just after this token. +*/ + next = next + width; +/* + FACET +*/ + if ( leqi ( token, "facet" ) == TRUE ) { +/* + Get the XYZ coordinates of the normal vector to the face. +*/ + sscanf ( next, "%*s %e %e %e", &r1, &r2, &r3 ); + + if ( face_num < FACE_MAX ) { + face_normal[0][face_num] = r1; + face_normal[1][face_num] = r2; + face_normal[2][face_num] = r3; + } + + fgets ( input, LINE_MAX_LEN, filein ); + text_num = text_num + 1; + + ivert = 0; + + for ( ;; ) { + + fgets ( input, LINE_MAX_LEN, filein ); + text_num = text_num + 1; + + count = sscanf ( input, "%*s %e %e %e", &r1, &r2, &r3 ); + + if ( count != 3 ) { + break; + } + + temp[0] = r1; + temp[1] = r2; + temp[2] = r3; + + if ( cor3_num < 1000 ) { + icor3 = rcol_find ( cor3, 3, cor3_num, temp ); + } + else { + icor3 = -1; + } + + if ( icor3 == -1 ) { + + icor3 = cor3_num; + + if ( cor3_num < COR3_MAX ) { + for ( i = 0; i < 3; i++ ) { + cor3[i][cor3_num] = temp[i]; + } + } + cor3_num = cor3_num + 1; + } + else { + dup_num = dup_num + 1; + } + + if ( ivert < ORDER_MAX && face_num < FACE_MAX ) { + face[ivert][face_num] = icor3; + vertex_material[ivert][face_num] = 0; + for ( i = 0; i < 3; i++ ) { + vertex_normal[i][ivert][face_num] = face_normal[i][face_num]; + } + } + + ivert = ivert + 1; + } + + fgets ( input, LINE_MAX_LEN, filein ); + text_num = text_num + 1; + + if ( face_num < FACE_MAX ) { + face_order[face_num] = ivert; + } + + face_num = face_num + 1; + + } +/* + COLOR +*/ + + else if ( leqi ( token, "color" ) == TRUE ) { + sscanf ( next, "%*s %f %f %f %f", &r1, &r2, &r3, &r4 ); + } +/* + SOLID +*/ + else if ( leqi ( token, "solid" ) == TRUE ) { + object_num = object_num + 1; + } +/* + ENDSOLID +*/ + else if ( leqi ( token, "endsolid" ) == TRUE ) { + } +/* + Unexpected or unrecognized. +*/ + else { + printf ( "\n" ); + printf ( "STLA_READ - Fatal error!\n" ); + printf ( " Unrecognized first word on line.\n" ); + return ERROR; + } + + } + return SUCCESS; +} +/******************************************************************************/ + +int stla_write ( FILE *fileout ) + +/******************************************************************************/ + +/* + Purpose: + + STLA_WRITE writes an ASCII STL (stereolithography) file. + + Examples: + + solid MYSOLID + facet normal 0.4 0.4 0.2 + outerloop + vertex 1.0 2.1 3.2 + vertex 2.1 3.7 4.5 + vertex 3.1 4.5 6.7 + endloop + endfacet + ... + facet normal 0.2 0.2 0.4 + outerloop + vertex 2.0 2.3 3.4 + vertex 3.1 3.2 6.5 + vertex 4.1 5.5 9.0 + endloop + endfacet + endsolid + + Discussion: + + The polygons in an STL file should only be triangular. This routine + will try to automatically decompose higher-order polygonal faces into + suitable triangles, without actually modifying the internal graphics + data. + + Modified: + + 01 September 1998 + + Author: + + John Burkardt +*/ +{ + int icor3; + int iface; + int jvert; + int face_num2; + int text_num; +/* + Initialize. +*/ + text_num = 0; + face_num2 = 0; + + fprintf ( fileout, "solid MYSOLID created by IVCON, original data in %s\n", + filein_name ); + + text_num = text_num + 1; + + for ( iface = 0; iface < face_num; iface++ ) { + + for ( jvert = 2; jvert < face_order[iface]; jvert++ ) { + + face_num2 = face_num2 + 1; + + fprintf ( fileout, " facet normal %f %f %f\n", + face_normal[0][iface], face_normal[1][iface], face_normal[2][iface] ); + + fprintf ( fileout, " outer loop\n" ); + + icor3 = face[0][iface]; + fprintf ( fileout, " vertex %f %f %f\n", + cor3[0][icor3], cor3[1][icor3], cor3[2][icor3] ); + + icor3 = face[jvert-1][iface]; + fprintf ( fileout, " vertex %f %f %f\n", + cor3[0][icor3], cor3[1][icor3], cor3[2][icor3] ); + + icor3 = face[jvert][iface]; + fprintf ( fileout, " vertex %f %f %f\n", + cor3[0][icor3], cor3[1][icor3], cor3[2][icor3] ); + + fprintf ( fileout, " endloop\n" ); + fprintf ( fileout, " endfacet\n" ); + text_num = text_num + 7; + } + } + + fprintf ( fileout, "endsolid MYSOLID\n" ); + text_num = text_num + 1; +/* + Report. +*/ + printf ( "\n" ); + printf ( "STLA_WRITE - Wrote %d text lines.\n", text_num ); + + if ( face_num != face_num2 ) { + printf ( " Number of faces in original data was %d.\n", face_num ); + printf ( " Number of triangular faces in decomposed data is %d.\n", + face_num2 ); + } + + return SUCCESS; +} +/******************************************************************************/ + +int stlb_read ( FILE *filein ) + +/******************************************************************************/ + +/* + Purpose: + + STLB_READ reads a binary STL (stereolithography) file. + + Example: + + 80 byte string = header containing nothing in particular + + 4 byte int = number of faces + + For each face: + + 3 4-byte floats = components of normal vector to face; + 3 4-byte floats = coordinates of first node; + 3 4-byte floats = coordinates of second node; + 3 4-byte floats = coordinates of third and final node; + 2-byte int = attribute, whose value is 0. + + Modified: + + 24 May 1999 + + Author: + + John Burkardt +*/ +{ + short int attribute = 0; + char c; + float cvec[3]; + int icor3; + int i; + int iface; + int ivert; +/* + 80 byte Header. +*/ + for ( i = 0; i < 80; i++ ) { + c = char_read ( filein ); + if ( debug ) { + printf ( "%d\n", c ); + } + bytes_num = bytes_num + 1; + } +/* + Number of faces. +*/ + face_num = long_int_read ( filein ); + bytes_num = bytes_num + 4; +/* + For each (triangular) face, + components of normal vector, + coordinates of three vertices, + 2 byte "attribute". +*/ + for ( iface = 0; iface < face_num; iface++ ) { + + face_order[iface] = 3; + face_material[iface] = 0; + + for ( i = 0; i < 3; i++ ) { + face_normal[i][iface] = float_read ( filein ); + bytes_num = bytes_num + 4; + } + + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + + for ( i = 0; i < 3; i++ ) { + cvec[i] = float_read ( filein ); + bytes_num = bytes_num + 4; + } + + if ( cor3_num < 1000 ) { + icor3 = rcol_find ( cor3, 3, cor3_num, cvec ); + } + else { + icor3 = -1; + } + + if ( icor3 == -1 ) { + icor3 = cor3_num; + if ( cor3_num < COR3_MAX ) { + cor3[0][cor3_num] = cvec[0]; + cor3[1][cor3_num] = cvec[1]; + cor3[2][cor3_num] = cvec[2]; + } + cor3_num = cor3_num + 1; + } + else { + dup_num = dup_num + 1; + } + + face[ivert][iface] = icor3; + + } + attribute = short_int_read ( filein ); + if ( debug ) { + printf ( "ATTRIBUTE = %d\n", attribute ); + } + bytes_num = bytes_num + 2; + } + + return SUCCESS; +} +/******************************************************************************/ + +int stlb_write ( FILE *fileout ) + +/******************************************************************************/ + +/* + Purpose: + + STLB_WRITE writes a binary STL (stereolithography) file. + + Example: + + 80 byte string = header containing nothing in particular + + 4 byte int = number of faces + + For each face: + + 3 4-byte floats = components of normal vector to face; + 3 4-byte floats = coordinates of first node; + 3 4-byte floats = coordinates of second node; + 3 4-byte floats = coordinates of third and final node; + 2-byte int = attribute, whose value is 0. + + Discussion: + + The polygons in an STL file should only be triangular. This routine + will try to automatically decompose higher-order polygonal faces into + suitable triangles, without actually modifying the internal graphics + data. + + Modified: + + 24 May 1999 + + Author: + + John Burkardt +*/ +{ + short int attribute = 0; + char c; + int i; + int icor3; + int iface; + int jvert; + int face_num2; +/* + 80 byte Header. +*/ + for ( i = 0; i < 80; i++ ) { + c = ' '; + bytes_num = bytes_num + char_write ( fileout, c ); + } +/* + Number of faces. +*/ + face_num2 = 0; + for ( iface = 0; iface < face_num; iface++ ) { + face_num2 = face_num2 + face_order[iface] - 2; + } + + bytes_num = bytes_num + long_int_write ( fileout, face_num2 ); +/* + For each (triangular) face, + components of normal vector, + coordinates of three vertices, + 2 byte "attribute". +*/ + for ( iface = 0; iface < face_num; iface++ ) { + + for ( jvert = 2; jvert < face_order[iface]; jvert++ ) { + + for ( i = 0; i < 3; i++ ) { + bytes_num = bytes_num + float_write ( fileout, face_normal[i][iface] ); + } + + icor3 = face[0][iface]; + for ( i = 0; i < 3; i++ ) { + bytes_num = bytes_num + float_write ( fileout, cor3[i][icor3] ); + } + + icor3 = face[jvert-1][iface]; + for ( i = 0; i < 3; i++ ) { + bytes_num = bytes_num + float_write ( fileout, cor3[i][icor3] ); + } + + icor3 = face[jvert][iface]; + for ( i = 0; i < 3; i++ ) { + bytes_num = bytes_num + float_write ( fileout, cor3[i][icor3] ); + } + + bytes_num = bytes_num + short_int_write ( fileout, attribute ); + + } + + } +/* + Report. +*/ + printf ( "\n" ); + printf ( "STLB_WRITE - Wrote %d bytes.\n", bytes_num ); + + if ( face_num != face_num2 ) { + printf ( " Number of faces in original data was %d.\n", face_num ); + printf ( " Number of triangular faces in decomposed data is %d.\n", + face_num2 ); + } + + return SUCCESS; +} +/******************************************************************************/ + +void tds_pre_process ( void ) + +/******************************************************************************/ + +/* + Purpose: + + TDS_PRE_PROCESS divides the monolithic object into acceptably small pieces. + + Note: + + The 3DS binary format allows an unsigned short int for the number of + points, and number of faces in an object. This limits such quantities + to 65535. We have at least one interesting object with more faces + than that. So we need to tag faces and nodes somehow. + + Modified: + + 14 October 1998 + + Author: + + John Burkardt +*/ +{ +/* static unsigned short int BIG = 60000; */ + + return; +} +/******************************************************************************/ + +int tds_read ( FILE *filein ) + +/******************************************************************************/ + +/* + Purpose: + + TDS_READ reads a 3D Studio MAX binary 3DS file. + + Modified: + + 20 October 1998 + + Author: + + John Burkardt +*/ +{ + unsigned long int chunk_begin; + unsigned long int chunk_end; + unsigned long int chunk_length; + unsigned long int chunk_length2; + unsigned long int position; + unsigned short int temp_int; + int version; + int views_read; +/* + Initialize. +*/ + views_read = 0; + + temp_int = tds_read_u_short_int ( filein ); + + if ( temp_int == 0x4d4d ) { + + if ( debug ) { + printf ( "TDS_READ: DEBUG: Read magic number %0X.\n", temp_int ); + } +/* + Move to 28 bytes from the beginning of the file. +*/ + position = 28; + fseek ( filein, ( long ) position, SEEK_SET ); + version = fgetc ( filein ); + + if ( version < 3 ) { + printf ( "\n" ); + printf ( "TDS_READ - Fatal error!\n" ); + printf ( " This routine can only read 3DS version 3 or later.\n" ); + printf ( " The input file is version %d.\n" ,version ); + return ERROR; + } + + if ( debug ) { + printf ( "TDS_READ: DEBUG: Version number is %d.\n", version ); + } +/* + Move to 2 bytes from the beginning of the file. + Set CURRENT_POINTER to the first byte of the chunk. + Set CHUNK_LENGTH to the number of bytes in the chunk. +*/ + chunk_begin = 0; + position = 2; + fseek ( filein, ( long ) position, SEEK_SET ); + + chunk_length = tds_read_u_long_int ( filein ); + position = 6; + + chunk_end = chunk_begin + chunk_length; + + if ( debug ) { + printf ( "TDS_READ:\n" ); + printf ( " Chunk begin = %lu.\n", chunk_begin ); + printf ( " Chunk length = %lu.\n", chunk_length ); + printf ( " Chunk end = %lu.\n", chunk_end ); + } + + while ( position + 2 < chunk_end ) { + + temp_int = tds_read_u_short_int ( filein ); + position = position + 2; + + if ( debug ) { + printf ( "TDS_READ: Short int = %0X, position = %lu.\n", temp_int, position ); + } + + if ( temp_int == 0x0002 ) { + if ( debug ) { + printf ( "TDS_READ: Read_Initial_Section:\n" ); + } + chunk_length2 = tds_read_u_long_int ( filein ); + position = position + 4; + position = position - 6 + chunk_length2; + fseek ( filein, ( long ) position, SEEK_SET ); + } + else if ( temp_int == 0x3d3d ) { + if ( debug ) { + printf ( "TDS_READ: Read_Edit_Section:\n" ); + } + position = position - 2; + position = position + tds_read_edit_section ( filein, &views_read ); + } + else if ( temp_int == 0xb000 ) { + if ( debug ) { + printf ( "TDS_READ: Read_Keyframe_Section:\n" ); + } + + position = position - 2; + position = position + tds_read_keyframe_section ( filein, &views_read ); + } + else { + printf ( "\n" ); + printf ( "TDS_READ - Fatal error!\n" ); + printf ( " Unexpected input, position = %lu.\n", position ); + printf ( " TEMP_INT = %hux\n", temp_int ); + return ERROR; + } + } + position = chunk_begin + chunk_length; + fseek ( filein, ( long ) position, SEEK_SET ); + } + else { + printf ( "\n" ); + printf ( "TDS_READ - Fatal error!\n" ); + printf ( " Could not find the main section tag.\n" ); + return ERROR; + } + + return SUCCESS; +} +/******************************************************************************/ + +unsigned long tds_read_ambient_section ( FILE *filein ) + +/******************************************************************************/ + +{ + unsigned long int current_pointer; + unsigned char end_found = FALSE; + int i; + long int pointer; + float rgb_val[3]; + unsigned short int temp_int; + unsigned long int temp_pointer; + unsigned long int teller; + unsigned char true_c_val[3]; + + current_pointer = ftell ( filein ) - 2; + temp_pointer = tds_read_u_long_int ( filein ); + teller = 6; + + while ( end_found == FALSE ) { + + temp_int = tds_read_u_short_int ( filein ); + teller = teller + 2; + + switch ( temp_int ) { + case 0x0010: + if ( debug ) { + printf ( " COLOR_F color definition section tag of %0X\n", + temp_int ); + } + for ( i = 0; i < 3; i++ ) { + rgb_val[i] = float_read ( filein ); + } + if ( debug ) { + printf ( "RGB_VAL = %f %f %f\n", rgb_val[0], rgb_val[1], rgb_val[2] ); + } + teller = teller + 3 * sizeof ( float ); + break; + case 0x0011: + if ( debug ) { + printf ( " COLOR_24 24 bit color definition section tag of %0X\n", + temp_int ); + } + + for ( i = 0; i < 3; i++ ) { + true_c_val[i] = fgetc ( filein ); + } + if ( debug ) { + printf ( "TRUE_C_VAL = %d %d %d\n", true_c_val[0], true_c_val[1], + true_c_val[2] ); + } + teller = teller + 3; + break; + default: + break; + } + + if ( teller >= temp_pointer ) { + end_found = TRUE; + } + + } + + pointer = ( long ) ( current_pointer + temp_pointer ); + fseek ( filein, pointer, SEEK_SET ); + + return ( temp_pointer ); +} +/******************************************************************************/ + +unsigned long tds_read_background_section ( FILE *filein ) + +/******************************************************************************/ + +{ + unsigned long int current_pointer; + unsigned char end_found = FALSE; + int i; + long int pointer; + float rgb_val[3]; + unsigned short int temp_int; + unsigned long int temp_pointer; + unsigned long int teller; + unsigned char true_c_val[3]; + + current_pointer = ftell ( filein ) - 2; + temp_pointer = tds_read_u_long_int ( filein ); + teller = 6; + + while ( end_found == FALSE ) { + + temp_int = tds_read_u_short_int ( filein ); + teller = teller + 2; + + switch ( temp_int ) { + case 0x0010: + if ( debug ) { + printf ( " COLOR_F RGB color definition section tag of %0X\n", + temp_int ); + } + for ( i = 0; i < 3; i++ ) { + rgb_val[i] = float_read ( filein ); + } + if ( debug ) { + printf ( "RGB_VAL = %f %f %f\n", rgb_val[0], rgb_val[1], rgb_val[2] ); + } + teller = teller + 3 * sizeof ( float ); + break; + case 0x0011: + if ( debug ) { + printf ( " COLOR_24 24 bit color definition section tag of %0X\n", + temp_int ); + } + + for ( i = 0; i < 3; i++ ) { + true_c_val[i] = fgetc ( filein ); + } + if ( debug ) { + printf ( "TRUE_C_VAL = %d %d %d\n", true_c_val[0], true_c_val[1], + true_c_val[2] ); + } + teller = teller + 3; + break; + default: + break; + } + + if ( teller >= temp_pointer ) { + end_found = TRUE; + } + + } + + pointer = ( long ) ( current_pointer + temp_pointer ); + fseek ( filein, pointer, SEEK_SET ); + + return ( temp_pointer ); +} +/******************************************************************************/ + +unsigned long tds_read_boolean ( unsigned char *boolean, FILE *filein ) + +/******************************************************************************/ + +{ + unsigned long current_pointer; + long int pointer; + unsigned long temp_pointer; + + current_pointer = ftell ( filein ) - 2; + temp_pointer = tds_read_u_long_int ( filein ); + + *boolean = fgetc ( filein ); + + pointer = ( long ) ( current_pointer + temp_pointer ); + fseek ( filein, pointer, SEEK_SET ); + + return ( temp_pointer ); +} +/******************************************************************************/ + +unsigned long tds_read_camera_section ( FILE *filein ) + +/******************************************************************************/ +{ + float camera_eye[3]; + float camera_focus[3]; + unsigned long int current_pointer; + float lens; + long int pointer; + float rotation; + unsigned long int temp_pointer; + unsigned short int u_short_int_val; + + current_pointer = ftell ( filein ) - 2; + temp_pointer = tds_read_u_long_int ( filein ); + + camera_eye[0] = float_read ( filein ); + camera_eye[1] = float_read ( filein ); + camera_eye[2] = float_read ( filein ); + + camera_focus[0] = float_read ( filein ); + camera_focus[1] = float_read ( filein ); + camera_focus[2] = float_read ( filein ); + + rotation = float_read ( filein ); + lens = float_read ( filein ); + + if ( debug ) { + printf ( " Found camera viewpoint at XYZ = %f %f %f.\n", + camera_eye[0], camera_eye[1], camera_eye[2] ); + printf ( " Found camera focus coordinates at XYZ = %f %f %f.\n", + camera_focus[0], camera_focus[1], camera_focus[2] ); + printf ( " Rotation of camera is: %f.\n", rotation ); + printf ( " Lens in used camera is: %f mm.\n", lens ); + } + + if ( ( temp_pointer-38 ) > 0 ) { + + if ( debug ) { + printf ( " Found extra camera sections.\n" ); + } + + u_short_int_val = tds_read_u_short_int ( filein ); + + if ( u_short_int_val == 0x4710 ) { + if ( debug ) { + printf ( " CAM_SEE_CONE.\n" ); + } + tds_read_unknown_section ( filein ); + } + + u_short_int_val = tds_read_u_short_int ( filein ); + + if ( u_short_int_val == 0x4720 ) { + if ( debug ) { + printf ( " CAM_RANGES.\n" ); + } + tds_read_unknown_section ( filein ); + } + + } + + pointer = ( long ) ( current_pointer + temp_pointer ); + fseek ( filein, pointer, SEEK_SET ); + + return ( temp_pointer ); +} +/******************************************************************************/ + +unsigned long tds_read_edit_section ( FILE *filein, int *views_read ) + +/******************************************************************************/ + +/* + Modified: + + 18 September 1998 +*/ +{ + unsigned long int chunk_length; + unsigned long int current_pointer; + unsigned char end_found = FALSE; + long int pointer; + unsigned long int teller; + unsigned short int temp_int; + + current_pointer = ftell ( filein ) - 2; + chunk_length = tds_read_u_long_int ( filein ); + teller = 6; + + while ( end_found == FALSE ) { + + temp_int = tds_read_u_short_int ( filein ); + teller = teller + 2; + + if ( debug ) { + printf ( " TDS_READ_EDIT_SECTION processing tag %0X\n", temp_int ); + } + + switch ( temp_int ) { + case 0x1100: + if ( debug ) { + printf ( " BIT_MAP section tag of %0X\n", temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0x1201: + if ( debug ) { + printf ( " USE_SOLID_BGND section tag of %0X\n", temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0x1300: + if ( debug ) { + printf ( " V_GRADIENT section tag of %0X\n", temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0x1400: + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0x1420: + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0x1450: + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0x1500: + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0x2200: + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0x2201: + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0x2210: + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0x2300: + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0x2302: + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0x3000: + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0x2100: + if ( debug ) { + printf ( " AMBIENT_LIGHT section tag of %0X\n", temp_int ); + } + teller = teller + tds_read_ambient_section ( filein ); + break; + case 0x1200: + if ( debug ) { + printf ( " SOLID_BGND section tag of %0X\n", temp_int ); + } + teller = teller + tds_read_background_section ( filein ); + break; + case 0x0100: + if ( debug ) { + printf ( " MASTER_SCALE section tag of %0X\n", temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0x3d3e: + if ( debug ) { + printf ( " MESH_VERSION section tag of %0X\n", temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xafff: + if ( debug ) { + printf ( " MAT_ENTRY section tag of %0X\n", temp_int ); + } + teller = teller + tds_read_material_section ( filein ); + break; + case 0x4000: + if ( debug ) { + printf ( " NAMED_OBJECT section tag of %0X\n", temp_int ); + } + teller = teller + tds_read_object_section ( filein ); + break; + case 0x7001: + if ( debug ) { + printf ( " VIEWPORT_LAYOUT section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_view_section ( filein, views_read ); + break; + case 0x7012: + if ( debug ) { + printf ( " VIEWPORT_DATA_3 section tag of %0X\n", temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0x7011: + if ( debug ) { + printf ( " VIEWPORT_DATA section tag of %0X\n", temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0x7020: + if ( debug ) { + printf ( " VIEWPORT_SIZE section tag of %0X\n", temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + default: + if ( debug ) { + printf ( " Junk.\n" ); + } + break; + } + + if ( teller >= chunk_length ) { + end_found = TRUE; + } + + } + + pointer = ( long ) ( current_pointer + chunk_length ); + + fseek ( filein, pointer, SEEK_SET ); + + return ( chunk_length ); +} +/******************************************************************************/ + +unsigned long tds_read_keyframe_section ( FILE *filein, int *views_read ) + +/******************************************************************************/ +{ + unsigned long int current_pointer; + unsigned char end_found = FALSE; + long int pointer; + unsigned short int temp_int; + unsigned long int temp_pointer; + unsigned long int teller; + + current_pointer = ftell ( filein ) - 2; + temp_pointer = tds_read_u_long_int ( filein ); + teller = 6; + + while ( end_found == FALSE ) { + + temp_int = tds_read_u_short_int ( filein ); + teller = teller + 2; + + switch ( temp_int ) { + case 0x7001: + if ( debug ) { + printf ( " VIEWPORT_LAYOUT main definition section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_view_section ( filein, views_read ); + break; + case 0xb008: + if ( debug ) { + printf ( " KFSEG frames section tag of %0X\n", temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xb002: + if ( debug ) { + printf ( " OBJECT_NODE_TAG object description section tag of %0X\n", + temp_int); + } + teller = teller + tds_read_keyframe_objdes_section ( filein ); + break; + case 0xb009: + if ( debug ) { + printf ( " KFCURTIME section tag of %0X\n", temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xb00a: + if ( debug ) { + printf ( " KFHDR section tag of %0X\n", temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + default: + break; + } + + if ( teller >= temp_pointer ) { + end_found = TRUE; + } + + } + + pointer = ( long ) ( current_pointer + temp_pointer ); + fseek ( filein, pointer, SEEK_SET ); + + return ( temp_pointer ); +} +/******************************************************************************/ + +unsigned long tds_read_keyframe_objdes_section ( FILE *filein ) + +/******************************************************************************/ + +/* + Modified: + + 21 September 1998 +*/ +{ + unsigned long int chunk_size; + unsigned long int current_pointer; + unsigned char end_found = FALSE; + long int pointer; + unsigned short int temp_int; + unsigned long int temp_pointer; + unsigned long int teller; + unsigned long int u_long_int_val; + unsigned short int u_short_int_val; + + current_pointer = ftell ( filein ) - 2; + temp_pointer = tds_read_u_long_int ( filein ); + teller = 6; + + while ( end_found == FALSE ) { + + temp_int = tds_read_u_short_int ( filein ); + teller = teller + 2; + + switch ( temp_int ) { + case 0xb011: + if ( debug ) { + printf ( " INSTANCE_NAME section tag of %0X\n", temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xb010: + if ( debug ) { + printf ( " NODE_HDR section tag of %0X\n", temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xb020: + if ( debug ) { + printf ( " POS_TRACK_TAG section tag of %0X\n", temp_int ); + } + chunk_size = tds_read_u_long_int ( filein ); + if ( debug ) { + printf ( " chunk_size = %d\n", chunk_size ); + } + u_short_int_val = tds_read_u_short_int ( filein ); + u_short_int_val = tds_read_u_short_int ( filein ); + u_short_int_val = tds_read_u_short_int ( filein ); + u_short_int_val = tds_read_u_short_int ( filein ); + u_short_int_val = tds_read_u_short_int ( filein ); + u_short_int_val = tds_read_u_short_int ( filein ); + u_short_int_val = tds_read_u_short_int ( filein ); + u_short_int_val = tds_read_u_short_int ( filein ); + u_long_int_val = tds_read_u_long_int ( filein ); + if ( debug ) { + printf ( "u_short_int_val = %d\n", u_short_int_val ); + printf ( "u_long_int_val = %d\n", u_long_int_val ); + } + origin[0] = float_read ( filein ); + origin[1] = float_read ( filein ); + origin[2] = float_read ( filein ); + teller = teller + 32; + break; + case 0xb013: + if ( debug ) { + printf ( " PIVOT section tag of %0X\n", temp_int ); + } + chunk_size = tds_read_u_long_int ( filein ); + pivot[0] = float_read ( filein ); + pivot[1] = float_read ( filein ); + pivot[2] = float_read ( filein ); + teller = teller + 12; + break; + case 0xb014: + if ( debug ) { + printf ( " BOUNDBOX section tag of %0X\n", temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xb015: + if ( debug ) { + printf ( " MORPH_SMOOTH section tag of %0X\n", temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xb021: + if ( debug ) { + printf ( " ROT_TRACK_TAG section tag of %0X\n", temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xb022: + if ( debug ) { + printf ( " SCL_TRACK_TAG section tag of %0X\n", temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xb030: + if ( debug ) { + printf ( " NODE_ID section tag of %0X\n", temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + default: + break; + } + + if ( teller >= temp_pointer ) { + end_found = TRUE; + } + + } + + pointer = ( long ) ( current_pointer+temp_pointer ); + fseek ( filein, pointer, SEEK_SET ); + + return ( temp_pointer ); +} +/******************************************************************************/ + +unsigned long tds_read_light_section ( FILE *filein ) + +/******************************************************************************/ +{ + unsigned char boolean; + unsigned long int current_pointer; + unsigned char end_found = FALSE; + int i; + float light_coors[3]; + long int pointer; + float rgb_val[3]; + unsigned long int teller; + unsigned short int temp_int; + unsigned long int temp_pointer; + unsigned char true_c_val[3]; + + current_pointer = ftell ( filein ) - 2; + temp_pointer = tds_read_u_long_int ( filein ); + teller = 6; + + light_coors[0] = float_read ( filein ); + light_coors[1] = float_read ( filein ); + light_coors[2] = float_read ( filein ); + + teller = teller + 3 * 4; + + if ( debug ) { + printf ( " Found light at coordinates XYZ = %f %f %f.\n", + light_coors[0], light_coors[1], light_coors[2] ); + } + + while ( end_found == FALSE ) { + + temp_int = tds_read_u_short_int ( filein ); + teller = teller + 2; + + switch ( temp_int ) { + case 0x0010: + if ( debug ) { + printf ( " COLOR_F RGB color definition section tag of %0X\n", + temp_int ); + } + for ( i = 0; i < 3; i++ ) { + rgb_val[i] = float_read ( filein ); + } + if ( debug ) { + printf ( " RGB_VAL value set to %f %f %f\n", rgb_val[0], + rgb_val[1], rgb_val[2] ); + } + teller = teller + 3 * sizeof ( float ); + break; + case 0x0011: + if ( debug ) { + printf ( " COLOR_24 24 bit color definition section tag of %0X\n", + temp_int ); + } + + for ( i = 0; i < 3; i++ ) { + true_c_val[i] = fgetc ( filein ); + } + if ( debug ) { + printf ( " TRUE_C_VAL value set to %d %d %d\n", true_c_val[0], + true_c_val[1], true_c_val[2] ); + } + teller = teller + 3; + break; + case 0x4620: + if ( debug ) { + printf ( " DL_OFF section: %0X\n", temp_int ); + } + teller = teller + tds_read_boolean ( &boolean, filein ); + if ( debug ) { + if ( boolean == TRUE ) { + printf ( " Light is on\n" ); + } + else { + printf ( " Light is off\n" ); + } + } + break; + case 0x4610: + if ( debug ) { + printf ( " DL_SPOTLIGHT section tag of %0X\n", temp_int ); + } + teller = teller + tds_read_spot_section ( filein ); + break; + case 0x465a: + if ( debug ) { + printf ( " DL_OUTER_RANGE section tag of %0X\n", temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + default: + break; + } + + if ( teller >= temp_pointer ) { + end_found = TRUE; + } + + } + + pointer = ( long ) ( current_pointer + temp_pointer ); + fseek ( filein, pointer, SEEK_SET ); + + return ( temp_pointer ); +} +/******************************************************************************/ + +unsigned long int tds_read_u_long_int ( FILE *filein ) + +/******************************************************************************/ + +/* + Modified: + + 01 October 1998 + + Author: + + John Burkardt +*/ +{ + union { + unsigned long int yint; + char ychar[4]; + } y; + + if ( byte_swap == TRUE ) { + y.ychar[3] = fgetc ( filein ); + y.ychar[2] = fgetc ( filein ); + y.ychar[1] = fgetc ( filein ); + y.ychar[0] = fgetc ( filein ); + } + else { + y.ychar[0] = fgetc ( filein ); + y.ychar[1] = fgetc ( filein ); + y.ychar[2] = fgetc ( filein ); + y.ychar[3] = fgetc ( filein ); + } + + return y.yint; +} +/******************************************************************************/ + +int tds_read_long_name ( FILE *filein ) + +/******************************************************************************/ +{ + unsigned char letter; + unsigned int teller; + + teller = 0; + letter = fgetc ( filein ); +/* + Could be a dummy object. +*/ + if ( letter == 0 ) { + strcpy ( temp_name, "Default_name" ); + return -1; + } + + temp_name[teller] = letter; + teller = teller + 1; + + do { + letter = fgetc ( filein ); + temp_name[teller] = letter; + teller = teller + 1; + } while ( letter != 0 ); + + temp_name[teller-1] = 0; + + if ( debug ) { + printf ( " tds_read_long_name found name: %s.\n", temp_name ); + } + + return teller; +} +/******************************************************************************/ + +unsigned long tds_read_matdef_section ( FILE *filein ) + +/******************************************************************************/ +{ + unsigned long int current_pointer; + long int pointer; + int teller; + unsigned long int temp_pointer; + + current_pointer = ftell ( filein ) - 2; + temp_pointer = tds_read_u_long_int ( filein ); + + teller = tds_read_long_name ( filein ); + + if ( teller == -1 ) { + if ( debug ) { + printf ( " No material name found.\n" ); + } + } + else { + strcpy ( mat_name, temp_name ); + if ( debug ) { + printf ( " Material name %s.\n", mat_name ); + } + } + + pointer = ( long ) ( current_pointer + temp_pointer ); + fseek ( filein, pointer, SEEK_SET ); + + return ( temp_pointer ); +} +/******************************************************************************/ + +unsigned long tds_read_material_section ( FILE *filein ) + +/******************************************************************************/ +{ + unsigned long int current_pointer; + unsigned char end_found = FALSE; + long int pointer; + unsigned short int temp_int; + unsigned long int temp_pointer; + unsigned long int teller; + + current_pointer = ftell ( filein ) - 2; + + temp_pointer = tds_read_u_long_int ( filein ); + teller = 6; + + while ( end_found == FALSE ) { + + temp_int = tds_read_u_short_int ( filein ); + teller = teller + 2; + + switch ( temp_int ) { + + case 0xa000: + if ( debug ) { + printf ( " MAT_NAME definition section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_matdef_section ( filein ); + break; + case 0xa010: + if ( debug ) { + printf ( " MAT_AMBIENT definition section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xa020: + if ( debug ) { + printf ( " MAT_DIFFUSE definition section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xa030: + if ( debug ) { + printf ( " MAT_SPECULAR definition section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xa040: + if ( debug ) { + printf ( " MAT_SHININESS definition section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xa041: + if ( debug ) { + printf ( " MAT_SHIN2PCT definition section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xa042: + if ( debug ) { + printf ( " MAT_SHIN3PCT definition section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xa050: + if ( debug ) { + printf ( " MAT_TRANSPARENCY definition section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xa052: + if ( debug ) { + printf ( " MAT_XPFALL definition section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xa053: + if ( debug ) { + printf ( " MAT_REFBLUR definition section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xa080: + if ( debug ) { + printf ( " MAT_SELF_ILLUM definition section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xa081: + if ( debug ) { + printf ( " MAT_TWO_SIDE definition section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xa082: + if ( debug ) { + printf ( " MAT_DECAL definition section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xa083: + if ( debug ) { + printf ( " MAT_ADDITIVE definition section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xa084: + if ( debug ) { + printf ( " MAT_SELF_ILPCT definition section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xa085: + if ( debug ) { + printf ( " MAT_WIRE definition section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xa086: + if ( debug ) { + printf ( " MAT_SUPERSMP definition section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xa087: + if ( debug ) { + printf ( " MAT_WIRESIZE definition section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xa088: + if ( debug ) { + printf ( " MAT_FACEMAP definition section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xa08a: + if ( debug ) { + printf ( " MAT_XPFALLIN definition section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xa08c: + if ( debug ) { + printf ( " MAT_PHONGSOFT definition section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xa08e: + if ( debug ) { + printf ( " MAT_WIREABS definition section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xa100: + if ( debug ) { + printf ( " MAT_SHADING definition section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xa200: + if ( debug ) { + printf ( " MAT_TEXMAP definition section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_texmap_section ( filein ); +/* + teller = teller + tds_read_unknown_section ( filein ); +*/ + break; + case 0xa204: + if ( debug ) { + printf ( " MAT_SPECMAP definition section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xa210: + if ( debug ) { + printf ( " MAT_OPACMAP definition section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xa220: + if ( debug ) { + printf ( " MAT_REFLMAP definition section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xa230: + if ( debug ) { + printf ( " MAT_BUMPMAP definition section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0xa353: + if ( debug ) { + printf ( " MAT_MAP_TEXBLUR definition section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + default: + if ( debug ) { + printf ( " Junk section tag of %0X\n", temp_int ); + } + break; + } + + if ( teller >= temp_pointer ) { + end_found = TRUE; + } + + } + pointer = ( long ) ( current_pointer + temp_pointer ); + + fseek ( filein, pointer, SEEK_SET ); + + return ( temp_pointer ); +} +/******************************************************************************/ + +int tds_read_name ( FILE *filein ) + +/******************************************************************************/ +{ + unsigned char letter; + unsigned int teller; + + teller = 0; + letter = fgetc ( filein ); +/* + Could be a dummy object. +*/ + + if ( letter == 0 ) { + strcpy ( temp_name, "Default name" ); + return (-1); + } + + temp_name[teller] = letter; + teller = teller + 1; + + do { + letter = fgetc ( filein ); + temp_name[teller] = letter; + teller = teller + 1; + } while ( ( letter != 0 ) && ( teller < 12 ) ); + + temp_name[teller-1] = 0; + + if ( debug ) { + printf ( " tds_read_name found name: %s.\n", temp_name ); + } + + return 0; +} +/******************************************************************************/ + +unsigned long tds_read_obj_section ( FILE *filein ) + +/******************************************************************************/ + +/* + Comments: + + Thanks to John F Flanagan for some suggested corrections. + + Modified: + + 30 June 2001 +*/ +{ + unsigned short int b; + unsigned long int chunk_size; + unsigned short int color_index; + unsigned long int current_pointer; + unsigned char end_found = FALSE; + unsigned short int g; + int i; + int j; + int cor3_num_base; + int cor3_num_inc; + int face_num_inc; + long int pointer; + unsigned short int r; + unsigned short int temp_int; + unsigned long int temp_pointer; + unsigned long int temp_pointer2; + unsigned long int teller; + + current_pointer = ftell ( filein ) - 2; + temp_pointer = tds_read_u_long_int ( filein ); + teller = 6; + cor3_num_base = cor3_num; + + while ( end_found == FALSE ) { + + temp_int = tds_read_u_short_int ( filein ); + teller = teller + 2; + + switch ( temp_int ) { + + case 0x4000: + if ( debug ) { + printf ( " NAMED_OBJECT section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + + case 0x4100: + if ( debug ) { + printf ( " N_TRI_OBJECT section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + + case 0x4110: + + if ( debug ) { + printf ( " POINT_ARRAY section tag of %0X\n", temp_int ); + } + + current_pointer = ftell ( filein ) - 2; + temp_pointer2 = tds_read_u_long_int ( filein ); + cor3_num_inc = ( int ) tds_read_u_short_int ( filein ); + + for ( i = cor3_num; i < cor3_num + cor3_num_inc; i++ ) { + cor3[0][i] = float_read ( filein ); + cor3[1][i] = float_read ( filein ); + cor3[2][i] = float_read ( filein ); + } + + cor3_num = cor3_num + cor3_num_inc; + teller = teller + temp_pointer2; + break; + + case 0x4111: + if ( debug ) { + printf ( " POINT_FLAG_ARRAY faces (2) section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + + case 0x4120: + + if ( debug ) { + printf ( " FACE_ARRAY section tag of %0X\n", + temp_int ); + } + + temp_pointer2 = tds_read_u_long_int ( filein ); + face_num_inc = ( int ) tds_read_u_short_int ( filein ); + + for ( i = face_num; i < face_num + face_num_inc; i++ ) { + face[0][i] = tds_read_u_short_int ( filein ) + cor3_num_base; + face[1][i] = tds_read_u_short_int ( filein ) + cor3_num_base; + face[2][i] = tds_read_u_short_int ( filein ) + cor3_num_base; + face_order[i] = 3; + face_flags[i] = tds_read_u_short_int ( filein ); +/* + Color is given per face, and as 24 bit RGB data packed in one word. + Extract RGB from the word, and assign R / 255 to each vertex. + + Just a guess, JVB, 30 June 2001. +*/ + temp_int = face_flags[i] & 0x000F; + r = ( temp_int & 0x0004 ) >> 2; + g = ( temp_int & 0x0002 ) >> 1; + b = ( temp_int & 0x0001 ); + + for ( j = 0; j < 3; j++ ) { + vertex_rgb[0][j][i] = ( float ) r / 255.0; + vertex_rgb[1][j][i] = ( float ) g / 255.0; + vertex_rgb[2][j][i] = ( float ) b / 255.0; + } + + } + + temp_int = tds_read_u_short_int ( filein ); + if ( temp_int == 0x4150 ) { + for ( i = face_num; i < face_num + face_num_inc; i++ ) { + face_smooth[i] = ( int ) tds_read_u_long_int ( filein ) + + cor3_num_base; + } + } + face_num = face_num + face_num_inc; + teller = ftell ( filein ); + break; + + case 0x4130: + if ( debug ) { + printf ( " MSH_MAT_GROUP section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + + case 0x4140: + if ( debug ) { + printf ( " TEX_VERTS section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_tex_verts_section ( filein ); + break; + + case 0x4150: + if ( debug ) { + printf ( " SMOOTH_GROUP section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + + case 0x4160: + + if ( debug ) { + printf ( " MESH_MATRIX section tag of %0X\n", + temp_int ); + } + + tds_read_u_long_int ( filein ); + + for ( j = 0; j < 4; j++ ) { + for ( i = 0; i < 3; i++ ) { + transform_matrix[j][i] = float_read ( filein ); + } + } + transform_matrix[0][3] = 0.0; + transform_matrix[1][3] = 0.0; + transform_matrix[2][3] = 0.0; + transform_matrix[3][3] = 0.0; + + teller = teller + 12 * sizeof ( float ); + break; + + case 0x4165: + + if ( debug ) { + printf ( " MESH_COLOR section tag of %0X\n", temp_int ); + } + + chunk_size = tds_read_u_long_int ( filein ); + + if ( chunk_size == 7 ) { + color_index = fgetc ( filein ); + teller = teller + 5; + } + else { + color_index = tds_read_u_short_int ( filein ); + teller = teller + 6; + } + if ( debug ) { + printf ( " Color index set to %d\n", color_index ); + } + break; + + case 0x4170: + if ( debug ) { + printf ( " MESH_TEXTURE_INFO section tag of %0X\n", + temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + + default: + if ( debug ) { + printf ( " JUNK section tag of %0X\n", temp_int ); + } + break; + } + + if ( teller >= temp_pointer ) { + end_found = TRUE; + } + + } + + pointer = ( long int ) ( current_pointer + temp_pointer ); + fseek ( filein, pointer, SEEK_SET ); + + return ( temp_pointer ); +} +/******************************************************************************/ + +unsigned long tds_read_object_section ( FILE *filein ) + +/******************************************************************************/ +{ + unsigned char end_found = FALSE; + unsigned long int current_pointer; + int int_val; + long int pointer; + unsigned short int temp_int; + unsigned long int temp_pointer; + unsigned long int teller; + + current_pointer = ftell ( filein ) - 2; + temp_pointer = tds_read_u_long_int ( filein ); + teller = 6; +/* + Why don't you read and save the name here? +*/ + int_val = tds_read_name ( filein ); + + if ( int_val == -1 ) { + if ( debug ) { + printf ( " Dummy Object found\n" ); + } + } + else { + strcpy ( object_name, temp_name ); + } + + while ( end_found == FALSE ) { + + temp_int = tds_read_u_short_int ( filein ); + teller = teller + 2; + + switch ( temp_int ) { + case 0x4700: + if ( debug ) { + printf ( " N_CAMERA section tag of %0X\n", temp_int ); + } + teller = teller + tds_read_camera_section ( filein ); + break; + case 0x4600: + if ( debug ) { + printf ( " N_DIRECT_LIGHT section tag of %0X\n", temp_int ); + } + teller = teller + tds_read_light_section ( filein ); + break; + case 0x4100: + if ( debug ) { + printf ( " OBJ_TRIMESH section tag of %0X\n", temp_int ); + } + teller = teller + tds_read_obj_section ( filein ); + break; + case 0x4010: + if ( debug ) { + printf ( " OBJ_HIDDEN section tag of %0X\n", temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0x4012: + if ( debug ) { + printf ( " OBJ_DOESNT_CAST section tag of %0X\n", temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + default: + break; + } + + if ( teller >= temp_pointer ) { + end_found = TRUE; + } + + } + + pointer = ( long ) ( current_pointer + temp_pointer ); + + fseek ( filein, pointer, SEEK_SET ); + + return ( temp_pointer ); +} +/******************************************************************************/ + +unsigned long int tds_read_tex_verts_section ( FILE *filein ) + +/******************************************************************************/ + +/* + Purpose: + + TDS_READ_TEX_VERTS_SECTION reads the texture vertex data. + + Discussion: + + The texture vertex data seems to be associated with nodes. This routine + distributes that data to vertices (nodes as they make up a particular + face). + + Modified: + + 02 July 1999 + + Author: + + John Burkardt +*/ +{ + unsigned long int current_pointer; + int icor3; + long int pointer; + unsigned long int temp_pointer; + unsigned short int n2; + + current_pointer = ftell ( filein ) - 2; + temp_pointer = tds_read_u_long_int ( filein ); + + pointer = ( long int ) ( current_pointer + temp_pointer ); + + n2 = tds_read_u_short_int ( filein ); + + for ( icor3 = 0; icor3 < n2; icor3++ ) { + cor3_tex_uv[0][icor3] = float_read ( filein ); + cor3_tex_uv[1][icor3] = float_read ( filein ); + } + + fseek ( filein, pointer, SEEK_SET ); + + return ( temp_pointer ); +} +/******************************************************************************/ + +unsigned long tds_read_texmap_section ( FILE *filein ) + +/******************************************************************************/ + +/* + Purpose: + + TDS_READ_TEXMAP_SECTION tries to get the TEXMAP name from the TEXMAP section. + + Warning: + + The code has room for lots of textures. In this routine, we behave as + though there were only one, and we stick its name in the first name slot. + + Modified: + + 30 June 1999 + + Author: + + John Burkardt +*/ +{ + unsigned long int current_pointer; + long int pointer; + int teller; + unsigned long int temp_pointer; + + texture_num = texture_num + 1; + + current_pointer = ftell ( filein ) - 2; + temp_pointer = tds_read_u_long_int ( filein ); + + tds_read_u_short_int ( filein ); + tds_read_u_short_int ( filein ); + tds_read_u_short_int ( filein ); + tds_read_u_short_int ( filein ); + +/* + This next short int should equal A300. +*/ + tds_read_u_short_int ( filein ); + tds_read_u_long_int ( filein ); +/* + Now read the TEXMAP file name. +*/ + teller = tds_read_long_name ( filein ); + + if ( teller == -1 ) { + if ( debug ) { + printf ( " No TEXMAP name found.\n" ); + } + } + else { + strcpy ( texture_name[0], temp_name ); + if ( debug ) { + printf ( " TEXMAP name %s.\n", texture_name[0] ); + } + } + + pointer = ( long ) ( current_pointer + temp_pointer ); + fseek ( filein, pointer, SEEK_SET ); + + return ( temp_pointer ); +} +/******************************************************************************/ + +unsigned short int tds_read_u_short_int ( FILE *filein ) + +/******************************************************************************/ +{ + unsigned char c1; + unsigned char c2; + short int ival; + + c1 = fgetc ( filein ); + c2 = fgetc ( filein ); + + ival = c1 | ( c2 << 8 ); + + return ival; +} +/******************************************************************************/ + +unsigned long tds_read_spot_section ( FILE *filein ) + +/******************************************************************************/ +{ + unsigned long int current_pointer; + float falloff; + float hotspot; + long int pointer; + float target[4]; + unsigned long int temp_pointer; + + current_pointer = ftell ( filein ) - 2; + temp_pointer = tds_read_u_long_int ( filein ); + + target[0] = float_read ( filein ); + target[1] = float_read ( filein ); + target[2] = float_read ( filein ); + hotspot = float_read ( filein ); + falloff = float_read ( filein ); + + if ( debug ) { + printf ( " The target of the spot is XYZ = %f %f %f.\n", + target[0], target[1], target[2] ); + printf ( " The hotspot of this light is %f.\n", hotspot ); + printf ( " The falloff of this light is %f.\n", falloff ); + } + + pointer = ( long ) ( current_pointer + temp_pointer ); + + fseek ( filein, pointer, SEEK_SET ); + + return ( temp_pointer ); +} +/******************************************************************************/ + +unsigned long int tds_read_unknown_section ( FILE *filein ) + +/******************************************************************************/ +{ + unsigned long int current_pointer; + long int pointer; + unsigned long int temp_pointer; + + current_pointer = ftell ( filein ) - 2; + temp_pointer = tds_read_u_long_int ( filein ); + + pointer = ( long int ) ( current_pointer + temp_pointer ); + + fseek ( filein, pointer, SEEK_SET ); + + return ( temp_pointer ); +} +/******************************************************************************/ + +unsigned long tds_read_view_section ( FILE *filein, int *views_read ) + +/******************************************************************************/ +{ + unsigned long int current_pointer; + unsigned char end_found = FALSE; + long int pointer; + unsigned short int temp_int; + unsigned long int temp_pointer; + unsigned long int teller; + + current_pointer = ftell ( filein ) - 2; + temp_pointer = tds_read_u_long_int ( filein ); + teller = 6; + + while ( end_found == FALSE ) { + + temp_int = tds_read_u_short_int ( filein ); + teller = teller + 2; + + switch ( temp_int ) { + case 0x7012: + if ( debug ) { + printf ( " VIEWPORT_DATA_3 section tag of %0X\n", temp_int ); + } + teller = teller + tds_read_vp_section ( filein, views_read ); + break; + case 0x7011: + if ( debug ) { + printf ( " VIEWPORT_DATA section tag of %0X\n", temp_int ); + } + teller = teller + tds_read_unknown_section ( filein ); + break; + case 0x7020: + if ( debug ) { + printf ( " VIEWPORT_SIZE section tag of %0X\n", temp_int ); + } + teller = teller + tds_read_vp_section ( filein, views_read ); + break; + default: + break; + } + + if ( teller >= temp_pointer ) { + end_found = TRUE; + } + + if ( *views_read > 3 ) { + end_found = TRUE; + } + } + + pointer = ( long int ) ( current_pointer + temp_pointer ); + + fseek ( filein, pointer, SEEK_SET ); + + return ( temp_pointer ); +} +/******************************************************************************/ + +unsigned long tds_read_vp_section ( FILE *filein, int *views_read ) + +/******************************************************************************/ +{ + unsigned int attribs; + unsigned long int current_pointer; + int i; + int int_val; + long int pointer; + unsigned int port; + unsigned long int temp_pointer; + char *viewports[11] = { + "Bogus", + "Top", + "Bottom", + "Left", + "Right", + "Front", + "Back", + "User", + "Camera", + "Light", + "Disabled" + }; + + *views_read = *views_read + 1; + + current_pointer = ftell ( filein ) - 2; + temp_pointer = tds_read_u_long_int ( filein ); + + attribs = tds_read_u_short_int ( filein ); + + if ( attribs == 3 ) { + if ( debug ) { + printf ( " active in viewport.\n" ); + } + } + + if ( attribs == 5 ) { + if ( debug ) { + printf ( " active in viewport.\n" ); + } + } +/* + Read 5 INTS to get to the viewport information. +*/ + for ( i = 1; i < 6; i++ ) { + tds_read_u_short_int ( filein ); + } + + port = tds_read_u_short_int ( filein ); +/* + Find camera section. +*/ + if ( ( port == 0xffff ) || ( port == 0 ) ) { + + for ( i = 0; i < 12; i++ ) { + tds_read_u_short_int ( filein ); + } + + int_val = tds_read_name (filein ); + + if ( int_val == -1 ) { + if ( debug ) { + printf ( " No Camera name found\n" ); + } + } + + port = 0x0008; + } + + if ( debug ) { + printf ( "Reading [%s] information with tag:%d\n", viewports[port], port ); + } + + pointer = ( long int ) ( current_pointer + temp_pointer ); + + fseek ( filein, pointer, SEEK_SET ); + + return ( temp_pointer ); +} +/******************************************************************************/ + +int tds_write ( FILE *fileout ) + +/******************************************************************************/ + +/* + Purpose: + + TDS_WRITE writes graphics information to a 3D Studio Max 3DS file. + + Modified: + + 14 October 1998 + + Author: + + John Burkardt + +*/ +{ + float float_val; + int i; + int icor3; + int iface; + int j; + long int l0002; + long int l0100; + long int l3d3d; + long int l3d3e; + long int l4000; + long int l4100; + long int l4110; + long int l4120; + long int l4150; + long int l4160; + long int l4d4d; + long int lb000; + long int lb002; + long int lb00a; + long int lb008; + long int lb009; + long int lb010; + long int lb013; + long int lb020; + long int lb021; + long int lb022; + long int lb030; + long int long_int_val; + int name_length; + short int short_int_val; + unsigned short int u_short_int_val; + + bytes_num = 0; + name_length = strlen ( object_name ); + + l0002 = 10; + + l4150 = 2 + 4 + face_num * 4; + l4120 = 2 + 4 + 2 + 4 * face_num * 2 + l4150; + l4160 = 2 + 4 + 4 * 12; + l4110 = 2 + 4 + 2 + cor3_num * 3 * 4; + l4100 = 2 + 4 + l4110 + l4160 + l4120; + l4000 = 2 + 4 + ( name_length + 1 ) + l4100; + l0100 = 2 + 4 + 4; + l3d3e = 2 + 4 + 4; + l3d3d = 2 + 4 + l3d3e + l0100 + l4000; + + lb022 = 2 + 4 + 32; + lb021 = 2 + 4 + 9 * 4; + lb020 = 2 + 4 + 8 * 4; + lb013 = 2 + 4 + 6 * 2; + lb010 = 2 + 4 + ( name_length + 1 ) + 3 * 2; + lb030 = 2 + 4 + 2; + lb002 = 2 + 4 + lb030 + lb010 + lb013 + lb020 + lb021 + lb022; + lb009 = 2 + 4 + 4; + lb008 = 2 + 4 + 2 * 4; + lb00a = 2 + 4 + 2 + 9 + 2 * 2; + lb000 = 2 + 4 + lb00a + lb008 + lb009 + lb002; + + l4d4d = 2 + 4 + l0002 + l3d3d + lb000; +/* + M3DMAGIC begin. + tag, size. +*/ + short_int_val = ( short ) 0x4d4d; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + bytes_num = bytes_num + long_int_write ( fileout, l4d4d ); +/* + M3D_VERSION begin. + tag, size, version. +*/ + short_int_val = ( short ) 0x0002; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + bytes_num = bytes_num + long_int_write ( fileout, l0002 ); + long_int_val = 3; + bytes_num = bytes_num + long_int_write ( fileout, long_int_val ); +/* + M3D_VERSION end. + MDATA begin. + tag, size. +*/ + short_int_val = ( short ) 0x3d3d; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + bytes_num = bytes_num + long_int_write ( fileout, l3d3d ); +/* + MESH_VERSION begin. + tag, size, version. +*/ + short_int_val = ( short ) 0x3d3e; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + bytes_num = bytes_num + long_int_write ( fileout, l3d3e ); + long_int_val = 3; + bytes_num = bytes_num + long_int_write ( fileout, long_int_val ); +/* + MESH_VERSION end. + MASTER_SCALE begin. + tag, size, scale. +*/ + short_int_val = ( short ) 0x0100; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + bytes_num = bytes_num + long_int_write ( fileout, l0100 ); + float_val = 1.0; + bytes_num = bytes_num + float_write ( fileout, float_val ); +/* + MASTER_SCALE end. + NAMED_OBJECT begin. + tag, size, name. +*/ + short_int_val = ( short ) 0x4000; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + bytes_num = bytes_num + long_int_write ( fileout, l4000 ); + bytes_num = bytes_num + tds_write_string ( fileout, object_name ); +/* + N_TRI_OBJECT begin. + tag, size. +*/ + short_int_val = ( short ) 0x4100; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + bytes_num = bytes_num + long_int_write ( fileout, l4100 ); +/* + POINT_ARRAY begin. + tag, size, number of points, coordinates of points. + Warning! number of points could exceed a short! +*/ + short_int_val = ( short ) 0x4110; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + bytes_num = bytes_num + long_int_write ( fileout, l4110 ); + + u_short_int_val = ( unsigned short ) cor3_num; + bytes_num = bytes_num + tds_write_u_short_int ( fileout, u_short_int_val ); + + for ( icor3 = 0; icor3 < cor3_num; icor3++ ) { + for ( j = 0; j < 3; j++ ) { + bytes_num = bytes_num + float_write ( fileout, cor3[j][icor3] ); + } + } +/* + POINT_ARRAY end. + MESH_MATRIX begin. + tag, size, 4 by 3 matrix. +*/ + short_int_val = ( short ) 0x4160; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + bytes_num = bytes_num + long_int_write ( fileout, l4160 ); + + for ( i = 0; i < 4; i++ ) { + for ( j = 0; j < 3; j++ ) { + float_val = transform_matrix[i][j]; + bytes_num = bytes_num + float_write ( fileout, float_val ); + } + } +/* + MESH_MATRIX end. + FACE_ARRAY begin. + tag, size, number of faces, nodes per face. + Warning: number of faces could exceed a short! +*/ + short_int_val = ( short ) 0x4120; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + bytes_num = bytes_num + long_int_write ( fileout, l4120 ); + + u_short_int_val = ( unsigned short ) face_num; + bytes_num = bytes_num + tds_write_u_short_int ( fileout, u_short_int_val ); + + for ( iface = 0; iface < face_num; iface++ ) { + for ( j = 0; j < 3; j++ ) { + short_int_val = face[j][iface]; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + } + short_int_val = face_flags[iface]; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + } +/* + SMOOTH_GROUP begin. + tag, size, group for each face. +*/ + short_int_val = ( short ) 0x4150; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + bytes_num = bytes_num + long_int_write ( fileout, l4150 ); + + for ( iface = 0; iface < face_num; iface++ ) { + long_int_val = face_smooth[iface]; + bytes_num = bytes_num + long_int_write ( fileout, long_int_val ); + } +/* + SMOOTH_GROUP end. + FACE_ARRAY end. + N_TRI_OBJECT end. + NAMED_OBJECT end. + MDATA end. + KFDATA begin. +*/ + short_int_val = ( short ) 0xb000; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + bytes_num = bytes_num + long_int_write ( fileout, lb000 ); +/* + KFHDR begin. + tag, size, revision, filename, animlen. +*/ + short_int_val = ( short ) 0xb00a; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + bytes_num = bytes_num + long_int_write ( fileout, lb00a ); + short_int_val = 5; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + bytes_num = bytes_num + tds_write_string ( fileout, "MAXSCENE" ); + short_int_val = 100; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + short_int_val = 0; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); +/* + KFHDR end. + KFSEG begin. + tag, size, start, end. +*/ + short_int_val = ( short ) 0xb008; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + bytes_num = bytes_num + long_int_write ( fileout, lb008 ); + long_int_val = 0; + bytes_num = bytes_num + long_int_write ( fileout, long_int_val ); + long_int_val = 100; + bytes_num = bytes_num + long_int_write ( fileout, long_int_val ); +/* + KFSEG end. + KFCURTIME begin. + tag, size, current_frame. +*/ + short_int_val = ( short ) 0xb009; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + bytes_num = bytes_num + long_int_write ( fileout, lb009 ); + long_int_val = 0; + bytes_num = bytes_num + long_int_write ( fileout, long_int_val ); +/* + KFCURTIME end. + OBJECT_NODE_TAG begin. + tag, size. +*/ + short_int_val = ( short ) 0xb002; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + bytes_num = bytes_num + long_int_write ( fileout, lb002 ); +/* + NODE_ID begin. + tag, size, id. +*/ + short_int_val = ( short ) 0xb030; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + bytes_num = bytes_num + long_int_write ( fileout, lb030 ); + short_int_val = 0; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); +/* + NODE_ID end. + NODE_HDR begin. + tag, size, object_name, flag1, flag2, hierarchy. +*/ + short_int_val = ( short ) 0xb010; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + bytes_num = bytes_num + long_int_write ( fileout, lb010 ); + bytes_num = bytes_num + tds_write_string ( fileout, object_name ); + short_int_val = 16384; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + short_int_val = 0; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + short_int_val = -1; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); +/* + NODE_HDR end. + PIVOT begin. + tag, size, pivot_x, pivot_y, pivot_z. +*/ + short_int_val = ( short ) 0xb013; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + bytes_num = bytes_num + long_int_write ( fileout, lb013 ); + for ( i = 0; i < 3; i++ ) { + float_val = pivot[i]; + bytes_num = bytes_num + float_write ( fileout, float_val ); + } +/* + PIVOT end. + POS_TRACK_TAG begin. + tag, size, flag, i1, i2, i3, i4, i5, i6, frame, l1, pos_x, pos_y, pos_z. +*/ + short_int_val = ( short ) 0xb020; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + bytes_num = bytes_num + long_int_write ( fileout, lb020 ); + short_int_val = 0; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + short_int_val = 0; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + short_int_val = 0; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + short_int_val = 0; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + short_int_val = 0; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + short_int_val = 1; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + short_int_val = 0; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + short_int_val = 0; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + long_int_val = 0; + bytes_num = bytes_num + long_int_write ( fileout, long_int_val ); + for ( i = 0; i < 3; i++ ) { + float_val = origin[i]; + bytes_num = bytes_num + float_write ( fileout, float_val ); + } +/* + POS_TRACK_TAG end. + ROT_TRACK_TAG begin. + tag, size, i1, i2, i3, i4, i5, i6, i7, i8, l1, rad, axis_x, axis_y, axis_z. +*/ + short_int_val = ( short ) 0xb021; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + bytes_num = bytes_num + long_int_write ( fileout, lb021 ); + short_int_val = 0; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + short_int_val = 0; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + short_int_val = 0; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + short_int_val = 0; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + short_int_val = 0; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + short_int_val = 1; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + short_int_val = 0; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + short_int_val = 0; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + long_int_val = 0; + bytes_num = bytes_num + long_int_write ( fileout, long_int_val ); + float_val = 0.0; + bytes_num = bytes_num + float_write ( fileout, float_val ); + bytes_num = bytes_num + float_write ( fileout, float_val ); + bytes_num = bytes_num + float_write ( fileout, float_val ); + bytes_num = bytes_num + float_write ( fileout, float_val ); +/* + ROT_TRACK_TAG end. + SCL_TRACK_TAG begin. + tag, size, i1, i2, i3, i4, i5, i6, i7, i8, l1, scale_x, scale_y, scale_z. +*/ + short_int_val = ( short ) 0xb022; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + bytes_num = bytes_num + long_int_write ( fileout, lb022 ); + short_int_val = 0; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + short_int_val = 0; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + short_int_val = 0; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + short_int_val = 0; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + short_int_val = 0; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + short_int_val = 1; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + short_int_val = 0; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + short_int_val = 0; + bytes_num = bytes_num + short_int_write ( fileout, short_int_val ); + long_int_val = 0; + bytes_num = bytes_num + long_int_write ( fileout, long_int_val ); + float_val = 1.0; + bytes_num = bytes_num + float_write ( fileout, float_val ); + bytes_num = bytes_num + float_write ( fileout, float_val ); + bytes_num = bytes_num + float_write ( fileout, float_val ); +/* + SCL_TRACK_TAG end. + OBJECT_NODE_TAG end. + KFDATA end. + M3DMAGIC end. +*/ + +/* + Report. +*/ + printf ( "TDS_WRITE wrote %d bytes.\n", bytes_num ); + + return SUCCESS; +} +/******************************************************************************/ + +int tds_write_string ( FILE *fileout, char *string ) + +/******************************************************************************/ + +/* + Modified: + + 23 September 1998 + + Author: + + John Burkardt +*/ +{ + char *c; + int nchar; + + nchar = 0; + + for ( c = string; nchar < 12; c++ ) { + + fputc ( *c, fileout ); + nchar = nchar + 1; + + if ( *c == 0 ) { + return nchar; + } + + } + + return nchar; +} +/******************************************************************************/ + +int tds_write_u_short_int ( FILE *fileout, unsigned short int short_int_val ) + +/******************************************************************************/ + +/* + Modified: + + 14 October 1998 + + Author: + + John Burkardt +*/ +{ + union { + unsigned short int yint; + char ychar[2]; + } y; + + y.yint = short_int_val; + + if ( byte_swap == TRUE ) { + fputc ( y.ychar[1], fileout ); + fputc ( y.ychar[0], fileout ); + } + else { + fputc ( y.ychar[0], fileout ); + fputc ( y.ychar[1], fileout ); + } + + return 2; +} +/**********************************************************************/ + +int tec_write ( FILE *fileout ) + +/**********************************************************************/ + +/* + Purpose: + + TEC_WRITE writes graphics information to a TECPLOT file. + + Discussion: + + The file format used is appropriate for 3D finite element surface + zone data. Polygons are decomposed into triangles where necessary. + + Example: + + TITLE = "cube.tec created by IVCON." + VARIABLES = "X", "Y", "Z", "R", "G", "B" + ZONE T="TRIANGLES", N=8, E=12, F=FEPOINT, ET=TRIANGLE + 0.0 0.0 0.0 0.0 0.0 0.0 + 1.0 0.0 0.0 1.0 0.0 0.0 + 1.0 1.0 0.0 1.0 1.0 0.0 + 0.0 1.0 0.0 0.0 1.0 0.0 + 0.0 0.0 1.0 0.0 0.0 1.0 + 1.0 0.0 1.0 1.0 0.0 1.0 + 1.0 1.0 1.0 1.0 1.0 1.0 + 0.0 1.0 1.0 0.0 1.0 1.0 + 1 4 2 + 2 4 3 + 1 5 8 + 1 2 5 + 2 6 5 + 2 3 6 + 3 7 6 + 3 4 7 + 4 8 7 + 4 1 8 + 5 6 8 + 6 7 8 + + Modified: + + 09 June 1999 + + Author: + + John Burkardt +*/ +{ + float b; + int face2[3]; + float g; + int icor3; + int iface; + int imat; + int j; + int face_num2; + int text_num; + float r; +/* + Determine the number of triangular faces. +*/ + face_num2 = 0; + for ( iface = 0; iface < face_num; iface++ ) { + for ( j = 0; j < face_order[iface] - 2; j++ ) { + face_num2 = face_num2 + 1; + } + } + + text_num = 0; + + fprintf ( fileout, "\"%s created by IVCON.\"\n", fileout_name ); + fprintf ( fileout, "VARIABLES = \"X\", \"Y\", \"Z\", \"R\", \"G\", \"B\"\n" ); + fprintf ( fileout, + "ZONE T=\"TRIANGLES\", N=%d, E=%d, F=FEPOINT, ET=TRIANGLE\n", + cor3_num, face_num2 ); + + text_num = text_num + 3; +/* + Write out X, Y, Z, R, G, B per node. +*/ + for ( icor3 = 0; icor3 < cor3_num; icor3++ ) { + imat = cor3_material[icor3]; + r = material_rgba[0][imat]; + g = material_rgba[1][imat]; + b = material_rgba[2][imat]; + fprintf ( fileout, "%f %f %f %f %f %f\n", cor3[0][icor3], cor3[1][icor3], + cor3[2][icor3], r, g, b ); + text_num = text_num + 1; + } +/* + Do the next face. +*/ + for ( iface = 0; iface < face_num; iface++ ) { +/* + Break the face up into triangles, anchored at node 1. +*/ + for ( j = 0; j < face_order[iface] - 2; j++ ) { + + face2[0] = face[ 0][iface] + 1; + face2[1] = face[j+1][iface] + 1; + face2[2] = face[j+2][iface] + 1; + + fprintf ( fileout, "%d %d %d\n", face2[0], face2[1], face2[2] ); + text_num = text_num + 1; + + } + + } +/* + Report. +*/ + printf ( "\n" ); + printf ( "TEC_WRITE - Wrote %d text lines.\n", text_num ); + + return SUCCESS; +} + +/*********************************************************************/ + +void tmat_init ( float a[4][4] ) + +/*********************************************************************/ + +/* + Purpose: + + TMAT_INIT initializes the geometric transformation matrix. + + Definition: + + The geometric transformation matrix can be thought of as a 4 by 4 + matrix "A" having components: + + r11 r12 r13 t1 + r21 r22 r23 t2 + r31 r32 r33 t3 + 0 0 0 1 + + This matrix encodes the rotations, scalings and translations that + are applied to graphical objects. + + A point P = (x,y,z) is rewritten in "homogeneous coordinates" as + PH = (x,y,z,1). Then to apply the transformations encoded in A to + the point P, we simply compute A * PH. + + Individual transformations, such as a scaling, can be represented + by simple versions of the transformation matrix. If the matrix + A represents the current set of transformations, and we wish to + apply a new transformation B, { the original points are + transformed twice: B * ( A * PH ). The new transformation B can + be combined with the original one A, to give a single matrix C that + encodes both transformations: C = B * A. + + Modified: + + 19 October 1998 + + Author: + + John Burkardt + + Reference: + + Foley, van Dam, Feiner, Hughes, + Computer Graphics, Principles and Practice, + Addison Wesley, Second Edition, 1990. + + Parameters: + + Input, float A[4][4], the geometric transformation matrix. +*/ +{ + int i; + int j; + + for ( i = 0; i < 4; i++ ) { + for ( j = 0; j < 4; j++ ) { + if ( i == j ) { + a[i][j] = 1.0; + } + else { + a[i][j] = 0.0; + } + } + } + return; +} +/*********************************************************************/ + +void tmat_mxm ( float a[4][4], float b[4][4], float c[4][4] ) + +/*********************************************************************/ + +/* + Purpose: + + TMAT_MXM multiplies two geometric transformation matrices. + + Note: + + The product is accumulated in a temporary array, and { assigned + to the result. Therefore, it is legal for any two, or all three, + of the arguments to share memory. + + Modified: + + 19 October 1998 + + Author: + + John Burkardt + + Reference: + + Foley, van Dam, Feiner, Hughes, + Computer Graphics, Principles and Practice, + Addison Wesley, Second Edition, 1990. + + Parameters: + + Input, float A[4][4], the first geometric transformation matrix. + + Input, float B[4][4], the second geometric transformation matrix. + + Output, float C[4][4], the product A * B. +*/ +{ + float d[4][4]; + int i; + int j; + int k; + + for ( i = 0; i < 4; i++ ) { + for ( k = 0; k < 4; k++ ) { + d[i][k] = 0.0; + for ( j = 0; j < 4; j++ ) { + d[i][k] = d[i][k] + a[i][j] * b[j][k]; + } + } + } + + for ( i = 0; i < 4; i++ ) { + for ( j = 0; j < 4; j++ ) { + c[i][j] = d[i][j]; + } + } + return; +} +/*********************************************************************/ + +void tmat_mxp ( float a[4][4], float x[4], float y[4] ) + +/*********************************************************************/ + +/* + Purpose: + + TMAT_MXP multiplies a geometric transformation matrix times a point. + + Modified: + + 19 October 1998 + + Author: + + John Burkardt + + Reference: + + Foley, van Dam, Feiner, Hughes, + Computer Graphics, Principles and Practice, + Addison Wesley, Second Edition, 1990. + + Parameters: + + Input, float A[4][4], the geometric transformation matrix. + + Input, float X[4], the point to be multiplied. The fourth component + of X is implicitly assigned the value of 1. + + Output, float Y[4], the result of A*X. The product is accumulated in + a temporary vector, and { assigned to the result. Therefore, it + is legal for X and Y to share memory. +*/ +{ + int i; + int j; + float z[4]; + + for ( i = 0; i < 3; i++ ) { + z[i] = a[i][3]; + for ( j = 0; j < 3; j++ ) { + z[i] = z[i] + a[i][j] * x[j]; + } + } + + for ( i = 0; i < 3; i++ ) { + y[i] = z[i]; + } + return; +} +/*********************************************************************/ + +void tmat_mxp2 ( float a[4][4], float x[][3], float y[][3], int n ) + +/*********************************************************************/ + +/* + Purpose: + + TMAT_MXP2 multiplies a geometric transformation matrix times N points. + + Modified: + + 20 October 1998 + + Author: + + John Burkardt + + Reference: + + Foley, van Dam, Feiner, Hughes, + Computer Graphics, Principles and Practice, + Addison Wesley, Second Edition, 1990. + + Parameters: + + Input, float A[4][4], the geometric transformation matrix. + + Input, float X[N][3], the points to be multiplied. + + Output, float Y[N][3], the transformed points. Each product is + accumulated in a temporary vector, and { assigned to the + result. Therefore, it is legal for X and Y to share memory. + +*/ +{ + int i; + int j; + int k; + float z[4]; + + for ( k = 0; k < n; k++ ) { + + for ( i = 0; i < 3; i++ ) { + z[i] = a[i][3]; + for ( j = 0; j < 3; j++ ) { + z[i] = z[i] + a[i][j] * x[k][j]; + } + } + + for ( i = 0; i < 3; i++ ) { + y[k][i] = z[i]; + } + + } + return; +} +/*********************************************************************/ + +void tmat_mxv ( float a[4][4], float x[4], float y[4] ) + +/*********************************************************************/ + +/* + Purpose: + + TMAT_MXV multiplies a geometric transformation matrix times a vector. + + Modified: + + 12 August 1999 + + Author: + + John Burkardt + + Reference: + + Foley, van Dam, Feiner, Hughes, + Computer Graphics, Principles and Practice, + Addison Wesley, Second Edition, 1990. + + Parameters: + + Input, float A[4][4], the geometric transformation matrix. + + Input, float X[3], the vector to be multiplied. The fourth component + of X is implicitly assigned the value of 1. + + Output, float Y[3], the result of A*X. The product is accumulated in + a temporary vector, and assigned to the result. Therefore, it + is legal for X and Y to share memory. +*/ +{ + int i; + int j; + float z[4]; + + for ( i = 0; i < 3; i++ ) { + z[i] = 0.0; + for ( j = 0; j < 3; j++ ) { + z[i] = z[i] + a[i][j] * x[j]; + } + z[i] = z[i] + a[i][3]; + } + + for ( i = 0; i < 3; i++ ) { + y[i] = z[i]; + } + return; +} +/*********************************************************************/ + +void tmat_rot_axis ( float a[4][4], float b[4][4], float angle, + char axis ) + +/*********************************************************************/ + +/* + Purpose: + + TMAT_ROT_AXIS applies an axis rotation to the geometric transformation matrix. + + Modified: + + 19 April 1999 + + Author: + + John Burkardt + + Reference: + + Foley, van Dam, Feiner, Hughes, + Computer Graphics, Principles and Practice, + Addison Wesley, Second Edition, 1990. + + Parameters: + + Input, float A[4][4], the current geometric transformation matrix. + + Output, float B[4][4], the modified geometric transformation matrix. + A and B may share the same memory. + + Input, float ANGLE, the angle, in degrees, of the rotation. + + Input, character AXIS, is 'X', 'Y' or 'Z', specifying the coordinate + axis about which the rotation occurs. +*/ +{ + float c[4][4]; + float d[4][4]; + int i; + int j; + float theta; + + theta = angle * DEG_TO_RAD; + + tmat_init ( c ); + + if ( axis == 'X' || axis == 'x' ) { + c[1][1] = cos ( theta ); + c[1][2] = - sin ( theta ); + c[2][1] = sin ( theta ); + c[2][2] = cos ( theta ); + } + else if ( axis == 'Y' || axis == 'y' ) { + c[0][0] = cos ( theta ); + c[0][2] = sin ( theta ); + c[2][0] = - sin ( theta ); + c[2][2] = cos ( theta ); + } + else if ( axis == 'Z' || axis == 'z' ) { + c[0][0] = cos ( theta ); + c[0][1] = - sin ( theta ); + c[1][0] = sin ( theta ); + c[1][1] = cos ( theta ); + } + else { + printf ( "\n" ); + printf ( "TMAT_ROT_AXIS - Fatal error!\n" ); + printf ( " Illegal rotation axis: %c.\n", axis ); + printf ( " Legal choices are 'X', 'Y', or 'Z'.\n" ); + return; + } + + tmat_mxm ( c, a, d ); + + for ( i = 0; i < 4; i++ ) { + for ( j = 0; j < 4; j++ ) { + b[i][j] = d[i][j]; + } + } + return; +} +/*********************************************************************/ + +void tmat_rot_vector ( float a[4][4], float b[4][4], float angle, + float v1, float v2, float v3 ) + +/*********************************************************************/ + +/* + Purpose: + + TMAT_ROT_VECTOR applies a rotation about a vector to the geometric transformation matrix. + + Modified: + + 27 July 1999 + + Author: + + John Burkardt + + Reference: + + Foley, van Dam, Feiner, Hughes, + Computer Graphics, Principles and Practice, + Addison Wesley, Second Edition, 1990. + + Parameters: + + Input, float A[4][4], the current geometric transformation matrix. + + Output, float B[4][4], the modified geometric transformation matrix. + A and B may share the same memory. + + Input, float ANGLE, the angle, in degrees, of the rotation. + + Input, float V1, V2, V3, the X, Y and Z coordinates of a (nonzero) + point defining a vector from the origin. The rotation will occur + about this axis. +*/ +{ + float c[4][4]; + float ca; + float d[4][4]; + int i; + int j; + float sa; + float theta; + + if ( v1 * v1 + v2 * v2 + v3 * v3 == 0.0 ) { + return; + } + + theta = angle * DEG_TO_RAD; + + tmat_init ( c ); + + ca = cos ( theta ); + sa = sin ( theta ); + + c[0][0] = v1 * v1 + ca * ( 1.0 - v1 * v1 ); + c[0][1] = ( 1.0 - ca ) * v1 * v2 - sa * v3; + c[0][2] = ( 1.0 - ca ) * v1 * v3 + sa * v2; + + c[1][0] = ( 1.0 - ca ) * v2 * v1 + sa * v3; + c[1][1] = v2 * v2 + ca * ( 1.0 - v2 * v2 ); + c[1][2] = ( 1.0 - ca ) * v2 * v3 - sa * v1; + + c[2][0] = ( 1.0 - ca ) * v3 * v1 - sa * v2; + c[2][1] = ( 1.0 - ca ) * v3 * v2 + sa * v1; + c[2][2] = v3 * v3 + ca * ( 1.0 - v3 * v3 ); + + tmat_mxm ( c, a, d ); + + for ( i = 0; i < 4; i++ ) { + for ( j = 0; j < 4; j++ ) { + b[i][j] = d[i][j]; + } + } + return; +} +/*********************************************************************/ + +void tmat_scale ( float a[4][4], float b[4][4], float sx, float sy, + float sz ) + +/*********************************************************************/ + +/* + Purpose: + + TMAT_SCALE applies a scaling to the geometric transformation matrix. + + Modified: + + 19 October 1998 + + Author: + + John Burkardt + + Reference: + + Foley, van Dam, Feiner, Hughes, + Computer Graphics, Principles and Practice, + Addison Wesley, Second Edition, 1990. + + Parameters: + + Input, float A[4][4], the current geometric transformation matrix. + + Output, float B[4][4], the modified geometric transformation matrix. + A and B may share the same memory. + + Input, float SX, SY, SZ, the scalings to be applied to the X, Y and + Z coordinates. +*/ +{ + float c[4][4]; + float d[4][4]; + int i; + int j; + + tmat_init ( c ); + + c[0][0] = sx; + c[1][1] = sy; + c[2][2] = sz; + + tmat_mxm ( c, a, d ); + + for ( i = 0; i < 4; i++ ) { + for ( j = 0; j < 4; j++ ) { + b[i][j] = d[i][j]; + } + } + return; +} +/*********************************************************************/ + +void tmat_shear ( float a[4][4], float b[4][4], char *axis, float s ) + +/*********************************************************************/ + +/* + Purpose: + + TMAT_SHEAR applies a shear to the geometric transformation matrix. + + Modified: + + 19 October 1998 + + Author: + + John Burkardt + + Reference: + + Foley, van Dam, Feiner, Hughes, + Computer Graphics, Principles and Practice, + Addison Wesley, Second Edition, 1990. + + Parameters: + + Input, float A[4][4], the current geometric transformation matrix. + + Output, float B[4][4], the modified geometric transformation matrix. + A and B may share the same memory. + + Input, character*3 AXIS, is 'XY', 'XZ', 'YX', 'YZ', 'ZX' or 'ZY', + specifying the shear equation: + + XY: x' = x + s * y; + XZ: x' = x + s * z; + YX: y' = y + s * x; + YZ: y' = y + s * z; + ZX: z' = z + s * x; + ZY: z' = z + s * y. + + Input, float S, the shear coefficient. +*/ +{ + float c[4][4]; + float d[4][4]; + int i; + int j; + + tmat_init ( c ); + + if ( strcmp ( axis, "XY" ) == 0 || strcmp ( axis, "xy" ) == 0 ) { + c[0][1] = s; + } + else if ( strcmp ( axis, "XZ" ) == 0 || strcmp ( axis, "xz" ) == 0 ) { + c[0][2] = s; + } + else if ( strcmp ( axis, "YX" ) == 0 || strcmp ( axis, "yx" ) == 0 ) { + c[1][0] = s; + } + else if ( strcmp ( axis, "YZ" ) == 0 || strcmp ( axis, "yz" ) == 0 ) { + c[1][2] = s; + } + else if ( strcmp ( axis, "ZX" ) == 0 || strcmp ( axis, "zx" ) == 0 ) { + c[2][0] = s; + } + else if ( strcmp ( axis, "ZY" ) == 0 || strcmp ( axis, "zy" ) == 0 ) { + c[2][1] = s; + } + else { + printf ( "\n" ); + printf ( "TMAT_SHEAR - Fatal error!\n" ); + printf ( " Illegal shear axis: %s.\n", axis ); + printf ( " Legal choices are XY, XZ, YX, YZ, ZX, or ZY.\n" ); + return; + } + + tmat_mxm ( c, a, d ); + + for ( i = 0; i < 4; i++ ) { + for ( j = 0; j < 4; j++ ) { + b[i][j] = d[i][j]; + } + } + return; +} +/*********************************************************************/ + +void tmat_trans ( float a[4][4], float b[4][4], float x, float y, + float z ) + +/*********************************************************************/ + +/* + Purpose: + + TMAT_TRANS applies a translation to the geometric transformation matrix. + + Modified: + + 19 October 1998 + + Author: + + John Burkardt + + Reference: + + Foley, van Dam, Feiner, Hughes, + Computer Graphics, Principles and Practice, + Addison Wesley, Second Edition, 1990. + + Parameters: + + Input, float A[4][4], the current geometric transformation matrix. + + Output, float B[4][4], the modified transformation matrix. + A and B may share the same memory. + + Input, float X, Y, Z, the translation. This may be thought of as the + point that the origin moves to under the translation. +*/ +{ + int i; + int j; + + for ( i = 0; i < 4; i++ ) { + for ( j = 0; j < 4; j++ ) { + b[i][j] = a[i][j]; + } + } + b[0][3] = b[0][3] + x; + b[1][3] = b[1][3] + y; + b[2][3] = b[2][3] + z; + + return; +} +/******************************************************************************/ + +int tria_read ( FILE *filein ) + +/******************************************************************************/ + +/* + Purpose: + + TRIA_READ reads an ASCII triangle file. + + Example: + + 12 <-- Number of triangles + + (x,y,z) and (nx,ny,nz) of normal vector at: + + 0.0 0.0 0.0 0.3 0.3 0.3 node 1 of triangle 1. + 1.0 0.0 0.0 0.3 0.1 0.3 node 2 of triangle 1, + 0.0 1.0 0.0 0.3 0.1 0.3 node 3 of triangle 1, + 1.0 0.5 0.0 0.3 0.1 0.3 node 1 of triangle 2, + ... + 0.0 0.5 0.5 0.3 0.1 0.3 node 3 of triangle 12. + + Modified: + + 22 June 1999 + + Author: + + John Burkardt +*/ +{ + float cvec[3]; + int icor3; + int iface; + int iface_hi; + int iface_lo; + int ivert; + int face_num2; + float r1; + float r2; + float r3; + float r4; + float r5; + float r6; +/* + Get the number of triangles. +*/ + fgets ( input, LINE_MAX_LEN, filein ); + text_num = text_num + 1; + sscanf ( input, "%d", &face_num2 ); +/* + For each triangle: +*/ + iface_lo = face_num; + iface_hi = face_num + face_num2; + + for ( iface = iface_lo; iface < iface_hi; iface++ ) { + + if ( iface < FACE_MAX ) { + face_order[iface] = 3; + face_material[iface] = 0; + } +/* + For each face: +*/ + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + + fgets ( input, LINE_MAX_LEN, filein ); + text_num = text_num + 1; + sscanf ( input, "%e %e %e %e %e %e", &r1, &r2, &r3, &r4, &r5, &r6 ); + + cvec[0] = r1; + cvec[1] = r2; + cvec[2] = r3; + + if ( cor3_num < 1000 ) { + icor3 = rcol_find ( cor3, 3, cor3_num, cvec ); + } + else { + icor3 = -1; + } + + if ( icor3 == -1 ) { + icor3 = cor3_num; + if ( cor3_num < COR3_MAX ) { + cor3[0][cor3_num] = cvec[0]; + cor3[1][cor3_num] = cvec[1]; + cor3[2][cor3_num] = cvec[2]; + } + cor3_num = cor3_num + 1; + } + else { + dup_num = dup_num + 1; + } + + if ( iface < FACE_MAX ) { + + face[ivert][iface] = icor3; + vertex_material[ivert][iface] = 0; + vertex_normal[0][ivert][iface] = r4; + vertex_normal[1][ivert][iface] = r5; + vertex_normal[2][ivert][iface] = r6; + } + + } + } + face_num = face_num + face_num2; + + return SUCCESS; +} +/**********************************************************************/ + +int tria_write ( FILE *fileout ) + +/**********************************************************************/ + +/* + Purpose: + + TRIA_WRITE writes the graphics data to an ASCII "triangle" file. + + Discussion: + + This is just a private format that Greg Hood requested from me. + + Example: + + 12 <-- Number of triangles + + (x,y,z) and (nx,ny,nz) of normal vector at: + + 0.0 0.0 0.0 0.3 0.3 0.3 node 1 of triangle 1. + 1.0 0.0 0.0 0.3 0.1 0.3 node 2 of triangle 1, + 0.0 1.0 0.0 0.3 0.1 0.3 node 3 of triangle 1, + 1.0 0.5 0.0 0.3 0.1 0.3 node 1 of triangle 2, + ... + 0.0 0.5 0.5 0.3 0.1 0.3 node 3 of triangle 12. + + Modified: + + 10 June 1999 + + Author: + + John Burkardt +*/ +{ + int face2[3]; + int icor3; + int iface; + int jlo; + int k; + int face_num2; + int text_num; + float nx; + float ny; + float nz; + float x; + float y; + float z; + + text_num = 0; +/* + Determine the number of triangular faces. +*/ + face_num2 = 0; + for ( iface = 0; iface < face_num; iface++ ) { + for ( jlo = 0; jlo < face_order[iface] - 2; jlo ++ ) { + face_num2 = face_num2 + 1; + } + } + + fprintf ( fileout, "%d\n", face_num2 ); + text_num = text_num + 1; +/* + Do the next face. +*/ + for ( iface = 0; iface < face_num; iface++ ) { +/* + Break the face up into triangles, anchored at node 1. +*/ + for ( jlo = 0; jlo < face_order[iface] - 2; jlo ++ ) { + + face2[0] = face[ 0][iface]; + face2[1] = face[jlo+1][iface]; + face2[2] = face[jlo+2][iface]; + + for ( k = 0; k < 3; k++ ) { + + icor3 = face2[k]; + + x = cor3[0][icor3]; + y = cor3[1][icor3]; + z = cor3[2][icor3]; + + nx = cor3_normal[0][icor3]; + ny = cor3_normal[1][icor3]; + nz = cor3_normal[2][icor3]; + + fprintf ( fileout, "%f %f %f %f %f %f\n", x, y, z, nx, ny, nz ); + + text_num = text_num + 1; + + } + + } + + } +/* + Report. +*/ + printf ( "\n" ); + printf ( "TRIA_WRITE - Wrote %d text lines.\n", text_num ); + + return SUCCESS; +} +/******************************************************************************/ + +int trib_read ( FILE *filein ) + +/******************************************************************************/ + +/* + Purpose: + + TRIB_READ reads a binary triangle file. + + Example: + + 4 byte int = number of triangles + + For each triangular face: + + 3 4-byte floats = coordinates of first node; + 3 4-byte floats = components of normal vector at first node; + 3 4-byte floats = coordinates of second node; + 3 4-byte floats = components of normal vector at second node; + 3 4-byte floats = coordinates of third node; + 3 4-byte floats = components of normal vector at third node. + + Modified: + + 22 June 1999 + + Author: + + John Burkardt +*/ +{ + float cvec[3]; + int icor3; + int i; + int iface; + int iface_hi; + int iface_lo; + int ivert; + int face_num2; +/* + Read the number of triangles in the file. +*/ + face_num2 = long_int_read ( filein ); + bytes_num = bytes_num + 4; +/* + For each (triangular) face, + read the coordinates and normal vectors of three vertices, +*/ + iface_lo = face_num; + iface_hi = face_num + face_num2; + + for ( iface = iface_lo; iface < iface_hi; iface++ ) { + + if ( iface < FACE_MAX ) { + face_order[iface] = 3; + face_material[iface] = 0; + } + + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + + for ( i = 0; i < 3; i++ ) { + cvec[i] = float_read ( filein ); + bytes_num = bytes_num + 4; + } + + if ( cor3_num < 1000 ) { + icor3 = rcol_find ( cor3, 3, cor3_num, cvec ); + } + else { + icor3 = -1; + } + + if ( icor3 == -1 ) { + icor3 = cor3_num; + if ( cor3_num < COR3_MAX ) { + cor3[0][cor3_num] = cvec[0]; + cor3[1][cor3_num] = cvec[1]; + cor3[2][cor3_num] = cvec[2]; + } + cor3_num = cor3_num + 1; + } + else { + dup_num = dup_num + 1; + } + + if ( iface < FACE_MAX ) { + + face[ivert][iface] = icor3; + vertex_material[ivert][iface] = 0; + + for ( i = 0; i < 3; i++ ) { + vertex_normal[i][ivert][iface] = float_read ( filein ); + bytes_num = bytes_num + 4; + } + + } + + } + } + + face_num = face_num + face_num2; + + return SUCCESS; +} +/**********************************************************************/ + +int trib_write ( FILE *fileout ) + +/**********************************************************************/ + +/* + Purpose: + + TRIB_WRITE writes the graphics data to a binary "triangle" file. + + Discussion: + + This is just a private format that Greg Hood requested from me. + + Example: + + 12 Number of triangles + 0.0 x at node 1, triangle 1, + 0.0 y at node 1, triangle 1, + 0.0 z at node 1, triangle 1, + 0.3 nx at node 1, triangle 1, + 0.3 ny at node 1, triangle 1, + 0.3 nz at node 1, triangle 1. + 1.0 x at node 2, triangle 1, + ... + 0.7 nz at node 3, triangle 1. + 1.2 x at node 1, triangle 2, + ... + 0.3 nz at node 3, triangle 2. + 9.3 x at node 1, triangle 3, + ... + 0.3 nz at node 3, triangle 12. + + Modified: + + 16 June 1999 + + Author: + + John Burkardt +*/ +{ + int face2[3]; + int icor3; + int iface; + int jlo; + int k; + int face_num2; + float nx; + float ny; + float nz; + float x; + float y; + float z; + + bytes_num = 0; +/* + Determine the number of triangular faces. +*/ + face_num2 = 0; + for ( iface = 0; iface < face_num; iface++ ) { + for ( jlo = 0; jlo < face_order[iface] - 2; jlo ++ ) { + face_num2 = face_num2 + 1; + } + } + + bytes_num = bytes_num + long_int_write ( fileout, face_num2 ); +/* + Do the next face. +*/ + for ( iface = 0; iface < face_num; iface++ ) { +/* + Break the face up into triangles, anchored at node 1. +*/ + for ( jlo = 0; jlo < face_order[iface] - 2; jlo ++ ) { + + face2[0] = face[ 0][iface]; + face2[1] = face[jlo+1][iface]; + face2[2] = face[jlo+2][iface]; + + for ( k = 0; k < 3; k++ ) { + + icor3 = face2[k]; + + x = cor3[0][icor3]; + y = cor3[1][icor3]; + z = cor3[2][icor3]; + + nx = cor3_normal[0][icor3]; + ny = cor3_normal[1][icor3]; + nz = cor3_normal[2][icor3]; + + bytes_num = bytes_num + float_write ( fileout, x ); + bytes_num = bytes_num + float_write ( fileout, y ); + bytes_num = bytes_num + float_write ( fileout, z ); + bytes_num = bytes_num + float_write ( fileout, nx ); + bytes_num = bytes_num + float_write ( fileout, ny ); + bytes_num = bytes_num + float_write ( fileout, nz ); + + } + + } + + } +/* + Report. +*/ + printf ( "\n" ); + printf ( "TRIB_WRITE - Wrote %d bytes.\n", bytes_num ); + + return SUCCESS; +} +/******************************************************************************/ + +int txt_write ( FILE *fileout ) + +/******************************************************************************/ + +/* + Purpose: + + TXT_WRITE writes the graphics data to a text file. + + Modified: + + 25 June 1998 + + Author: + + John Burkardt +*/ +{ + int i; + int iface; + int iline; + int imat; + int ivert; + int nitem; + int text_num; + + text_num = 0; + + fprintf ( fileout, "%s created by IVCON.\n", fileout_name ); + fprintf ( fileout, "Original data in %s.\n", filein_name ); + fprintf ( fileout, "Object name is %s.\n", object_name ); + fprintf ( fileout, "Object origin at %f %f %f.\n", origin[0], origin[1], + origin[2] ); + fprintf ( fileout, "Object pivot at %f %f %f.\n", pivot[0], pivot[1], + pivot[2] ); + text_num = text_num + 5; +/* + TRANSFORMATION MATRIX. +*/ + fprintf ( fileout, "\n" ); + fprintf ( fileout, "Transformation matrix:\n" ); + fprintf ( fileout, "\n" ); + text_num = text_num + 3; + + for ( i = 0; i < 4; i++ ) { + fprintf ( fileout, " %f %f %f %f\n", transform_matrix[i][0], + transform_matrix[i][1], transform_matrix[i][2], transform_matrix[i][3] ); + text_num = text_num + 1; + } +/* + NODES. +*/ + fprintf ( fileout, "\n" ); + fprintf ( fileout, " %d nodes.\n", cor3_num ); + text_num = text_num + 2; + + if ( cor3_num > 0 ) { + + fprintf ( fileout, "\n" ); + fprintf ( fileout, " Node coordinate data:\n" ); + fprintf ( fileout, "\n" ); + text_num = text_num + 3; + + for ( i = 0; i < cor3_num; i++ ) { + fprintf ( fileout, " %d %f %f %f\n ", i, cor3[0][i], cor3[1][i], + cor3[2][i] ); + text_num = text_num + 1; + } + + fprintf ( fileout, "\n" ); + fprintf ( fileout, " Node normal vectors:\n" ); + fprintf ( fileout, "\n" ); + text_num = text_num + 3; + + for ( i = 0; i < cor3_num; i++ ) { + fprintf ( fileout, " %d %f %f %f\n ", i, cor3_normal[0][i], + cor3_normal[1][i], cor3_normal[2][i] ); + text_num = text_num + 1; + } + + fprintf ( fileout, "\n" ); + fprintf ( fileout, " Node materials:\n" ); + fprintf ( fileout, "\n" ); + text_num = text_num + 3; + + for ( i = 0; i < cor3_num; i++ ) { + fprintf ( fileout, " %d %d\n ", i, cor3_material[i] ); + text_num = text_num + 1; + } + + if ( texture_num > 0 ) { + fprintf ( fileout, "\n" ); + fprintf ( fileout, " Node texture coordinates:\n" ); + fprintf ( fileout, "\n" ); + text_num = text_num + 3; + + for ( i = 0; i < cor3_num; i++ ) { + fprintf ( fileout, " %d %f %f\n ", i, cor3_tex_uv[0][i], + cor3_tex_uv[1][i] ); + text_num = text_num + 1; + } + } + } +/* + LINES. +*/ + fprintf ( fileout, "\n" ); + fprintf ( fileout, " %d line data items.\n", line_num ); + text_num = text_num + 2; + + if ( line_num > 0 ) { + + fprintf ( fileout, "\n" ); + fprintf ( fileout, " Line index data:\n" ); + fprintf ( fileout, "\n" ); + text_num = text_num + 3; + + nitem = 0; + + for ( iline = 0; iline < line_num; iline++ ) { + + fprintf ( fileout, " %d", line_dex[iline] ); + nitem = nitem + 1; + + if ( iline == line_num - 1 || line_dex[iline] == -1 || nitem >= 10 ) { + nitem = 0; + fprintf ( fileout, "\n" ); + text_num = text_num + 1; + } + + } + + fprintf ( fileout, "\n" ); + fprintf ( fileout, " Line materials:\n" ); + fprintf ( fileout, "\n" ); + text_num = text_num + 3; + + nitem = 0; + + for ( iline = 0; iline < line_num; iline++ ) { + + fprintf ( fileout, " %d", line_material[iline] ); + nitem = nitem + 1; + + if ( iline == line_num - 1 || line_material[iline] == -1 || nitem >= 10 ) { + nitem = 0; + fprintf ( fileout, "\n" ); + text_num = text_num + 1; + } + } + + } +/* + COLOR DATA +*/ + fprintf ( fileout, "\n" ); + fprintf ( fileout, " %d colors.\n", color_num ); + text_num = text_num + 2; +/* + FACES. +*/ + fprintf ( fileout, "\n" ); + fprintf ( fileout, " %d faces.\n", face_num ); + text_num = text_num + 2; + + if ( face_num > 0 ) { + + fprintf ( fileout, "\n" ); + fprintf ( fileout, " Face, Material, Number of vertices, Smoothing, Flags:\n" ); + fprintf ( fileout, "\n" ); + text_num = text_num + 3; + + for ( iface = 0; iface < face_num; iface++ ) { + fprintf ( fileout, " %d %d %d %d %d\n", iface, face_material[iface], + face_order[iface], face_smooth[iface], face_flags[iface] ); + text_num = text_num + 1; + } + + fprintf ( fileout, "\n" ); + fprintf ( fileout, " Face, Vertices\n" ); + fprintf ( fileout, "\n" ); + text_num = text_num + 3; + + for ( iface = 0; iface < face_num; iface++ ) { + + fprintf ( fileout, "%d ", iface ); + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + fprintf ( fileout, " %d", face[ivert][iface] ); + } + + fprintf ( fileout, "\n" ); + text_num = text_num + 1; + } + + fprintf ( fileout, "\n" ); + fprintf ( fileout, " Face normal vectors:\n" ); + fprintf ( fileout, "\n" ); + text_num = text_num + 3; + + for ( iface = 0; iface < face_num; iface++ ) { + fprintf ( fileout, " %d %f %f %f\n", iface, face_normal[0][iface], + face_normal[1][iface], face_normal[2][iface] ); + text_num = text_num + 1; + } + + if ( texture_num > 0 ) { + + fprintf ( fileout, "\n" ); + fprintf ( fileout, " Face texture coordinates:\n" ); + fprintf ( fileout, "\n" ); + text_num = text_num + 3; + + for ( iface = 0; iface < face_num; iface++ ) { + fprintf ( fileout, " %d %f %f\n", iface, face_tex_uv[0][iface], + face_tex_uv[1][iface] ); + text_num = text_num + 1; + } + } + } +/* + VERTICES. +*/ + if ( face_num > 0 ) { + + fprintf ( fileout, "\n" ); + fprintf ( fileout, "Vertex normal vectors:\n" ); + text_num = text_num + 2; + + for ( iface = 0; iface < face_num; iface++ ) { + fprintf ( fileout, "\n" ); + text_num = text_num + 1; + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + fprintf ( fileout, " %d %d %f %f %f\n", iface, ivert, + vertex_normal[0][ivert][iface], vertex_normal[1][ivert][iface], + vertex_normal[2][ivert][iface] ); + text_num = text_num + 1; + } + } + + fprintf ( fileout, "\n" ); + fprintf ( fileout, "Vertex materials:\n" ); + fprintf ( fileout, "\n" ); + text_num = text_num + 3; + + for ( iface = 0; iface < face_num; iface++ ) { + fprintf ( fileout, "%d", iface ); + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + fprintf ( fileout, " %d", vertex_material[ivert][iface] ); + } + fprintf ( fileout, "\n" ); + text_num = text_num + 1; + } + + if ( texture_num > 0 ) { + + fprintf ( fileout, "\n" ); + fprintf ( fileout, "Vertex UV texture coordinates:\n" ); + fprintf ( fileout, "\n" ); + text_num = text_num + 3; + + for ( iface = 0; iface < face_num; iface++ ) { + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + fprintf ( fileout, "%d %d %f %f\n", iface, ivert, + vertex_tex_uv[0][ivert][iface], vertex_tex_uv[1][ivert][iface] ); + text_num = text_num + 1; + } + } + } + } +/* + MATERIALS. +*/ + fprintf ( fileout, "\n" ); + fprintf ( fileout, "%d materials.\n", material_num ); + fprintf ( fileout, "\n" ); + fprintf ( fileout, "Index Name R G B A\n" ); + fprintf ( fileout, "\n" ); + + text_num = text_num + 5; + + for ( imat = 0; imat < material_num; imat++ ) { + fprintf ( fileout, "%d %s %f %f %f %f\n", imat, material_name[imat], + material_rgba[0][imat], material_rgba[1][imat], material_rgba[2][imat], + material_rgba[3][imat] ); + text_num = text_num + 1; + } +/* + TEXTURES. +*/ + fprintf ( fileout, "\n" ); + fprintf ( fileout, "%d textures.\n", texture_num ); + text_num = text_num + 2; + + if ( texture_num > 0 ) { + fprintf ( fileout, "\n" ); + fprintf ( fileout, "Index Name\n" ); + fprintf ( fileout, "\n" ); + for ( i = 0; i < texture_num; i++ ) { + fprintf ( fileout, "%d %s\n", i, texture_name[i] ); + } + text_num = text_num + 3; + } +/* + Report. +*/ + printf ( "\n" ); + printf ( "TXT_WRITE - Wrote %d text lines.\n", text_num ); + + return SUCCESS; +} +/**********************************************************************/ + +int ucd_write ( FILE *fileout ) + +/**********************************************************************/ + +/* + Purpose: + + UCD_WRITE writes graphics data to an AVS UCD file. + + Examples: + + # cube.ucd created by IVREAD. + # + # Material RGB to hue map: + # + # material R G B Alpha Hue + # + # 0 0.94 0.70 0.15 1.000 0.116 + # 1 0.24 0.70 0.85 1.000 0.541 + # 2 0.24 0.00 0.85 1.000 0.666 + # + # The node data is + # node # / material # / RGBA / Hue + # + 8 6 6 0 0 + 0 0.0 0.0 0.0 + 1 1.0 0.0 0.0 + 2 1.0 1.0 0.0 + 3 0.0 1.0 0.0 + 4 0.0 0.0 1.0 + 5 1.0 0.0 1.0 + 6 1.0 1.0 1.0 + 7 0.0 1.0 1.0 + 0 0 quad 0 1 2 3 + 1 0 quad 0 4 5 1 + 2 0 quad 1 5 6 2 + 3 0 quad 2 6 7 3 + 4 0 quad 3 7 4 0 + 5 0 quad 4 7 6 5 + 3 1 4 1 + material, 0...2 + RGBA, 0-1/0-1/0-1/0-1 + Hue, 0-1 + 0 0 0.94 0.70 0.15 1.0 0.116 + 1 0 0.94 0.70 0.15 1.0 0.116 + 2 0 0.94 0.70 0.15 1.0 0.116 + 3 0 0.94 0.70 0.15 1.0 0.116 + 4 1 0.24 0.70 0.85 1.0 0.541 + 5 1 0.24 0.70 0.85 1.0 0.541 + 6 2 0.24 0.24 0.85 0.0 0.666 + 7 2 0.24 0.24 0.85 0.0 0.666 + + Modified: + + 22 May 1999 + + Author: + + John Burkardt + +*/ +{ + float a; + float b; + float g; + float h; + int i; + int imat; + int j; + int text_num; + float r; + + text_num = 0; + + fprintf ( fileout, "# %s created by IVREAD.\n", fileout_name ); + fprintf ( fileout, "#\n" ); + fprintf ( fileout, "# Material RGB to Hue map:\n" ); + fprintf ( fileout, "#\n" ); + fprintf ( fileout, "# material R G B Alpha Hue\n" ); + fprintf ( fileout, "#\n" ); + + text_num = text_num + 6; + + for ( j = 0; j < material_num; j++ ) { + r = material_rgba[0][j]; + g = material_rgba[1][j]; + b = material_rgba[2][j]; + a = material_rgba[3][j]; + h = rgb_to_hue ( r, g, b ); + fprintf ( fileout, "# %d %f %f %f %f %f\n", j, r, g, b, a, h ); + text_num = text_num + 1; + } + + fprintf ( fileout, "#\n" ); + fprintf ( fileout, "# The node data is\n" ); + fprintf ( fileout, "# node # / material # / RGBA / Hue\n" ); + fprintf ( fileout, "#\n" ); + text_num = text_num + 4; + + fprintf ( fileout, "%d %d 6 0 0\n", cor3_num, face_num ); + text_num = text_num + 1; + + for ( j = 0; j < cor3_num; j++ ) { + fprintf ( fileout, "%d %f %f %f\n", j, cor3[0][j], cor3[1][j], + cor3[2][j] ); + text_num = text_num + 1; + } +/* + NOTE: + UCD only accepts triangles and quadrilaterals, not higher order + polygons. We would need to break polygons up to proceed. +*/ + for ( j = 0; j < face_num; j++ ) { + + fprintf ( fileout, "%d %d", j, face_material[j] ); + + if ( face_order[j] == 3 ) { + fprintf ( fileout, " tri" ); + } + else if ( face_order[j] == 4 ) { + fprintf ( fileout, " quad" ); + } + else { + fprintf ( fileout, " ???" ); + } + + for ( i = 0; i < face_order[j]; i++ ) { + fprintf ( fileout, "%d", face[i][j] ); + } + fprintf ( fileout, "\n" ); + text_num = text_num + 1; + + } + + fprintf ( fileout, "3 1 4 1\n" ); + fprintf ( fileout, "material, 0...%d\n", material_num - 1 ); + fprintf ( fileout, "RGBA, 0-1/0-1/0-1/0-1\n" ); + fprintf ( fileout, "Hue, 0-1\n" ); + text_num = text_num + 4; + + for ( j = 0; j < cor3_num; j++ ) { + imat = cor3_material[j]; + r = material_rgba[0][imat]; + g = material_rgba[1][imat]; + b = material_rgba[2][imat]; + a = material_rgba[3][imat]; + h = rgb_to_hue ( r, g, b ); + + fprintf ( fileout, "%d %d %f %f %f %f %f\n", j, imat, r, g, b, a, h ); + text_num = text_num + 1; + } +/* + Report. +*/ + printf ( "\n" ); + printf ( "UCD_WRITE - Wrote %d text lines.\n", text_num ); + + return SUCCESS; +} +/******************************************************************************/ + +void vertex_normal_set ( void ) + +/******************************************************************************/ + +/* + Purpose: + + VERTEX_NORMAL_SET recomputes the face vertex normal vectors. + + Modified: + + 12 October 1998 + + Author: + + John Burkardt +*/ +{ + int i; + int i0; + int i1; + int i2; + int iface; + int ivert; + int jp1; + int jp2; + int nfix; + float norm; + float temp; + float x0; + float x1; + float x2; + float xc; + float y0; + float y1; + float y2; + float yc; + float z0; + float z1; + float z2; + float zc; + + if ( face_num <= 0 ) { + return; + } + + nfix = 0; +/* + Consider each face. +*/ + for ( iface = 0; iface < face_num; iface++ ) { + + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + + norm = 0.0; + for ( i = 0; i < 3; i++ ) { + temp = vertex_normal[i][ivert][iface]; + norm = norm + temp * temp; + } + norm = ( float ) sqrt ( norm ); + + if ( norm == 0.0 ) { + + nfix = nfix + 1; + + i0 = face[ivert][iface]; + x0 = cor3[0][i0]; + y0 = cor3[1][i0]; + z0 = cor3[2][i0]; + + jp1 = ivert + 1; + if ( jp1 >= face_order[iface] ) { + jp1 = jp1 - face_order[iface]; + } + i1 = face[jp1][iface]; + x1 = cor3[0][i1]; + y1 = cor3[1][i1]; + z1 = cor3[2][i1]; + + jp2 = ivert + 2; + if ( jp2 >= face_order[iface] ) { + jp2 = jp2 - face_order[iface]; + } + i2 = face[jp2][iface]; + x2 = cor3[0][i2]; + y2 = cor3[1][i2]; + z2 = cor3[2][i2]; + + xc = ( y1 - y0 ) * ( z2 - z0 ) - ( z1 - z0 ) * ( y2 - y0 ); + yc = ( z1 - z0 ) * ( x2 - x0 ) - ( x1 - x0 ) * ( z2 - z0 ); + zc = ( x1 - x0 ) * ( y2 - y0 ) - ( y1 - y0 ) * ( x2 - x0 ); + + norm = ( float ) sqrt ( xc * xc + yc * yc + zc * zc ); + + if ( norm == 0.0 ) { + xc = ( float ) 1.0 / sqrt ( 3.0 ); + yc = ( float ) 1.0 / sqrt ( 3.0 ); + zc = ( float ) 1.0 / sqrt ( 3.0 ); + } + else { + xc = xc / norm; + yc = yc / norm; + zc = zc / norm; + } + + vertex_normal[0][ivert][iface] = xc; + vertex_normal[1][ivert][iface] = yc; + vertex_normal[2][ivert][iface] = zc; + + } + } + } + + if ( nfix > 0 ) { + printf ( "\n" ); + printf ( "VERTEX_NORMAL_SET: Recomputed %d face vertex normals.\n", nfix ); + } + + return; +} +/**********************************************************************/ + +void vertex_to_face_material ( void ) + +/**********************************************************************/ + +/* + Purpose: + + VERTEX_TO_FACE_MATERIAL extends vertex material definitions to faces. + + Discussion: + + Assuming material indices are defined for all the vertices, this + routine assigns to each face the material associated with its + first vertex. + + Modified: + + 22 May 1999 + + Author: + + John Burkardt +*/ +{ + int iface; + int ivert; + + ivert = 0; + for ( iface = 0; iface < face_num; iface++ ) { + face_material[iface] = vertex_material[ivert][iface]; + } + + return; +} +/**********************************************************************/ + +void vertex_to_node_material ( void ) + +/**********************************************************************/ + +/* + Purpose: + + VERTEX_TO_NODE_MATERIAL extends vertex material definitions to nodes. + + Discussion: + + A NODE is a point in space. + A VERTEX is a node as used in a particular face. + One node may be used as a vertex in several faces, or none. + This routine simply runs through all the vertices, and assigns + the material of the vertex to the corresponding node. If a + node appears as a vertex several times, then the node will + end up having the material of the vertex that occurs "last". + + Modified: + + 22 May 1999 + + Author: + + John Burkardt +*/ +{ + int iface; + int ivert; + int node; + + for ( iface = 0; iface < face_num; iface++ ) { + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + node = face[ivert][iface]; + cor3_material[node] = vertex_material[ivert][iface]; + } + } + + return; +} + +/******************************************************************************/ + +int vla_read ( FILE *filein ) + +/******************************************************************************/ + +/* + Purpose: + + VLA_READ reads a VLA file. + + Examples: + + set comment cube.vla created by IVREAD + set comment Original data in cube.iv. + set comment + set intensity EXPLICIT + set parametric NON_PARAMETRIC + set filecontent LINES + set filetype NEW + set depthcue 0 + set defaultdraw stellar + set coordsys RIGHT + set author IVREAD + set site Buhl Planetarium + set library_id UNKNOWN + P 8.59816 5.55317 -3.05561 1.00000 + L 8.59816 2.49756 0.000000E+00 1.00000 + L 8.59816 2.49756 -3.05561 1.00000 + L 8.59816 5.55317 -3.05561 1.00000 + P 8.59816 5.55317 0.000000E+00 1.00000 + ...etc... + L 2.48695 2.49756 -3.05561 1.00000 + + Modified: + + 23 May 1999 + + Author: + + John Burkardt +*/ +{ + int i; + int icor3; + int dup_num; + char *next; + int text_num; + float r1; + float r2; + float r3; + float temp[3]; + char token[LINE_MAX_LEN]; + int width; +/* + Initialize. +*/ + dup_num = 0; + text_num = 0; +/* + Read the next line of the file into INPUT. +*/ + while ( fgets ( input, LINE_MAX_LEN, filein ) != NULL ) { + + text_num = text_num + 1; +/* + Advance to the first nonspace character in INPUT. +*/ + for ( next = input; *next != '\0' && isspace(*next); next++ ) { + } +/* + Skip blank lines and comments. +*/ + if ( *next == '\0' || *next == ';' ) { + continue; + } +/* + Extract the first word in this line. +*/ + sscanf ( next, "%s%n", token, &width ); +/* + Set NEXT to point to just after this token. +*/ + next = next + width; +/* + SET (ignore) +*/ + if ( leqi ( token, "set" ) == TRUE ) { + } +/* + P (begin a line) + L (continue a line) +*/ + else if ( leqi ( token, "P" ) == TRUE || leqi ( token, "L") == TRUE ) { + + if ( leqi ( token, "P" ) == TRUE ) { + if ( line_num > 0 ) { + if ( line_num < LINES_MAX ) { + line_dex[line_num] = -1; + line_material[line_num] = -1; + line_num = line_num + 1; + } + } + } + + sscanf ( next, "%e %e %e", &r1, &r2, &r3 ); + + temp[0] = r1; + temp[1] = r2; + temp[2] = r3; + + if ( cor3_num < 1000 ) { + icor3 = rcol_find ( cor3, 3, cor3_num, temp ); + } + else { + icor3 = -1; + } + + if ( icor3 == -1 ) { + + icor3 = cor3_num; + + if ( cor3_num < COR3_MAX ) { + for ( i = 0; i < 3; i++ ) { + cor3[i][cor3_num] = temp[i]; + } + } + cor3_num = cor3_num + 1; + } + else { + dup_num = dup_num + 1; + } + + if ( line_num < LINES_MAX ) { + line_dex[line_num] = icor3; + line_material[line_num] = 0; + line_num = line_num + 1; + } + } +/* + Unexpected or unrecognized. +*/ + else { + printf ( "\n" ); + printf ( "VLA_READ - Fatal error!\n" ); + printf ( " Unrecognized first word on line.\n" ); + return ERROR; + } + + } + + if ( line_num > 0 ) { + if ( line_num < LINES_MAX ) { + line_dex[line_num] = -1; + line_material[line_num] = -1; + line_num = line_num + 1; + } + } + + return SUCCESS; +} +/******************************************************************************/ + +int vla_write ( FILE *fileout ) + +/******************************************************************************/ + +/* + Purpose: + + VLA_WRITE writes internal graphics information to a VLA file. + + Discussion: + + Comments begin with a semicolon in column 1. + The X, Y, Z coordinates of points begin with a "P" to + denote the beginning of a line, and "L" to denote the + continuation of a line. The fourth entry is intensity, which + should be between 0.0 and 1.0. + + Examples: + + set comment cube.vla created by IVREAD + set comment Original data in cube.iv. + set comment + set intensity EXPLICIT + set parametric NON_PARAMETRIC + set filecontent LINES + set filetype NEW + set depthcue 0 + set defaultdraw stellar + set coordsys RIGHT + set author IVREAD + set site Buhl Planetarium + set library_id UNKNOWN + P 8.59816 5.55317 -3.05561 1.00000 + L 8.59816 2.49756 0.000000E+00 1.00000 + L 8.59816 2.49756 -3.05561 1.00000 + L 8.59816 5.55317 -3.05561 1.00000 + P 8.59816 5.55317 0.000000E+00 1.00000 + ...etc... + L 2.48695 2.49756 -3.05561 1.00000 + + Modified: + + 22 May 1999 + + Author: + + John Burkardt +*/ +{ + char c; + int iline; + float intense = 1.0; + int k; + int text_num; +/* + Initialize. +*/ + text_num = 0; + + fprintf ( fileout, "set comment %s created by IVCON.\n", fileout_name ); + fprintf ( fileout, "set comment Original data in %s.\n", filein_name ); + fprintf ( fileout, "set comment\n" ); + fprintf ( fileout, "set intensity EXPLICIT\n" ); + fprintf ( fileout, "set parametric NON_PARAMETRIC\n" ); + fprintf ( fileout, "set filecontent LINES\n" ); + fprintf ( fileout, "set filetype NEW\n" ); + fprintf ( fileout, "set depthcue 0\n" ); + fprintf ( fileout, "set defaultdraw stellar\n" ); + fprintf ( fileout, "set coordsys RIGHT\n" ); + fprintf ( fileout, "set author IVCON\n" ); + fprintf ( fileout, "set site Buhl Planetarium\n" ); + fprintf ( fileout, "set library_id UNKNOWN\n" ); + + text_num = text_num + 13; + + c = 'P'; + + for ( iline = 0; iline < line_num; iline++ ) { + + k = line_dex[iline]; + + if ( k == -1 ) { + + c = 'P'; + } + else { + + fprintf ( fileout, "%c %f %f %f %f\n", + c, cor3[0][k], cor3[1][k], cor3[2][k], intense ); + + text_num = text_num + 1; + + c = 'L'; + } + } +/* + Report. +*/ + printf ( "\n" ); + printf ( "VLA_WRITE - Wrote %d text lines.\n", text_num ); + + + return SUCCESS; +} + +/**********************************************************************/ + +int wrl_write ( FILE *fileout ) + +/**********************************************************************/ + +/* + Purpose: + + WRL_WRITE writes graphics data to a WRL file. + + Example: + + #VRML V2.0 utf8 + + WorldInfo { + title "cube.iv." + string "WRL file generated by IVREAD. + } + + Group { + children [ + + Shape { + + appearance Appearance { + material Material { + diffuseColor 0.0 0.0 0.0 + emissiveColor 0.0 0.0 0.0 + shininess 1.0 + } + } #end of appearance + + geometry IndexedLineSet { + + coord Coordinate { + point [ + 8.59816 5.55317 -3.05561 + 8.59816 2.49756 0.000000E+00 + ...etc... + 2.48695 2.49756 -3.05561 + ] + } + + coordIndex [ + 0 1 2 -1 3 4 5 6 7 8 - + 9 10 -1 11 12 -1 13 14 15 -1 1 + ...etc... + 191 -1 + ] + + colorPerVertex TRUE + + colorIndex [ + 0 0 0 -1 2 3 1 1 4 7 - + 10 9 -1 7 7 -1 3 2 2 -1 1 + ...etc... + 180 -1 + ] + + } #end of geometry + + } #end of Shape + + ] #end of children + + } #end of Group + + Modified: + + 23 May 1999 + + Author: + + John Burkardt +*/ +{ + int icor3; + int iface; + int itemp; + int ivert; + int j; + int length; + int ndx; + + text_num = 0; + + fprintf ( fileout, "#VRML V2.0 utf8\n" ); + fprintf ( fileout, "\n" ); + fprintf ( fileout, " WorldInfo {\n" ); + fprintf ( fileout, " title \"%s\"\n", fileout_name ); + fprintf ( fileout, " info \"WRL file generated by IVREAD.\"\n" ); + fprintf ( fileout, " info \"Original data in %s\"\n", filein_name ); + fprintf ( fileout, " }\n" ); + fprintf ( fileout, "\n" ); + fprintf ( fileout, " Group {\n" ); + fprintf ( fileout, " children [\n" ); + fprintf ( fileout, " Shape {\n" ); + fprintf ( fileout, " appearance Appearance {\n" ); + fprintf ( fileout, " material Material {\n" ); + fprintf ( fileout, " diffuseColor 0.0 0.0 0.0\n" ); + fprintf ( fileout, " emissiveColor 0.0 0.0 0.0\n" ); + fprintf ( fileout, " shininess 1.0\n" ); + fprintf ( fileout, " }\n" ); + fprintf ( fileout, " }\n" ); + + text_num = text_num + 18; +/* + IndexedLineSet +*/ + if ( line_num > 0 ) { + + fprintf ( fileout, " geometry IndexedLineSet {\n" ); +/* + IndexedLineSet coord +*/ + fprintf ( fileout, " coord Coordinate {\n" ); + fprintf ( fileout, " point [\n" ); + + text_num = text_num + 3; + + for ( icor3 = 0; icor3 < cor3_num; icor3++ ) { + fprintf ( fileout, " %f %f %f\n", cor3[0][icor3], + cor3[1][icor3], cor3[2][icor3] ); + text_num = text_num + 1; + } + + fprintf ( fileout, " ]\n" ); + fprintf ( fileout, " }\n" ); + text_num = text_num + 2; +/* + IndexedLineSet coordIndex. +*/ + fprintf ( fileout, " coordIndex [\n" ); + + text_num = text_num + 1; + + length = 0; + for ( j = 0; j < line_num; j++ ) { + fprintf ( fileout, "%d ", line_dex[j] ); + length = length + 1; + if ( line_dex[j] == -1 || length >= 10 || j == line_num - 1 ) { + fprintf ( fileout, "\n" ); + text_num = text_num + 1; + length = 0; + } + } + + fprintf ( fileout, " ]\n" ); + text_num = text_num + 1; +/* + Colors. (materials) +*/ + fprintf ( fileout, " color Color {\n" ); + fprintf ( fileout, " color [\n" ); + text_num = text_num + 2; + + for ( j = 0; j < material_num; j++ ) { + fprintf ( fileout, " %f %f %f\n", material_rgba[0][j], + material_rgba[1][j], material_rgba[2][j] ); + text_num = text_num + 1; + } + + fprintf ( fileout, " ]\n" ); + fprintf ( fileout, " }\n" ); + fprintf ( fileout, " colorPerVertex TRUE\n" ); +/* + IndexedLineset colorIndex +*/ + fprintf ( fileout, " colorIndex [\n" ); + + text_num = text_num + 4; + + length = 0; + for ( j = 0; j < line_num; j++ ) { + fprintf ( fileout, "%d ", line_material[j] ); + length = length + 1; + if ( line_dex[j] == -1 || length >= 10 || j == line_num - 1 ) { + fprintf ( fileout, "\n" ); + text_num = text_num + 1; + length = 0; + } + } + + fprintf ( fileout, " ]\n" ); + fprintf ( fileout, " }\n" ); + text_num = text_num + 2; + + } +/* + End of IndexedLineSet + + IndexedFaceSet +*/ + if ( face_num > 0 ) { + + fprintf ( fileout, " geometry IndexedFaceSet {\n" ); +/* + IndexedFaceSet coord +*/ + fprintf ( fileout, " coord Coordinate {\n" ); + fprintf ( fileout, " point [\n" ); + + text_num = text_num + 3; + + for ( icor3 = 0; icor3 < cor3_num; icor3++ ) { + fprintf ( fileout, " %f %f %f\n", cor3[0][icor3], + cor3[1][icor3], cor3[2][icor3] ); + + text_num = text_num + 1; + } + + fprintf ( fileout, " ]\n" ); + fprintf ( fileout, " }\n" ); +/* + IndexedFaceSet coordIndex. +*/ + fprintf ( fileout, " coordIndex [\n" ); + + text_num = text_num + 3; + + length = 0; + + for ( iface = 0; iface < face_num; iface++ ) { + + for ( ivert = 0; ivert <= face_order[iface]; ivert++ ) { + + if ( ivert <= face_order[iface] ) { + itemp = face[ivert][iface]; + } + else { + itemp = 0; + } + + fprintf ( fileout, "%d ", itemp ); + length = length + 1; + + if ( itemp == -1 || length >= 10 || + ( iface == face_num - 1 && ivert == face_order[iface] ) ) { + fprintf ( fileout, "\n" ); + text_num = text_num + 1; + length = 0; + } + + } + + } + + fprintf ( fileout, " ]\n" ); + text_num = text_num + 1; +/* + IndexedFaceset colorIndex +*/ + fprintf ( fileout, " colorIndex [\n" ); + text_num = text_num + 1; + + length = 0; + ndx = 0; + + for ( iface = 0; iface < face_num; iface++ ) { + + for ( ivert = 0; ivert <= face_order[iface]; ivert++ ) { + + if ( ivert <= face_order[iface] ) { + itemp = vertex_material[ivert][iface]; + ndx = ndx + 1; + } + else { + itemp = 0; + } + + fprintf ( fileout, "%d ", itemp ); + length = length + 1; + + if ( itemp == -1 || length >= 10 || + ( iface == face_num - 1 && ivert == face_order[iface] ) ) { + + fprintf ( fileout, "\n" ); + text_num = text_num + 1; + length = 0; + + } + + } + + } + + fprintf ( fileout, " ]\n" ); + fprintf ( fileout, " }\n" ); + text_num = text_num + 2; + + } +/* + End of IndexedFaceSet + + End of: + Shape + children + Group +*/ + fprintf ( fileout, " }\n" ); + fprintf ( fileout, " ]\n" ); + fprintf ( fileout, " }\n" ); + + text_num = text_num + 3; +/* + Report. +*/ + printf ( "\n" ); + printf ( "WRL_WRITE - Wrote %d text lines.\n", text_num ); + + return SUCCESS; +} +/******************************************************************************/ + +int xgl_write ( FILE *fileout ) + +/******************************************************************************/ + +/* + Purpose: + + XGL_WRITE writes an XGL file. + + Discussion: + + Two corrections to the routine were pointed out by + Mike Phillips, msphil@widowmaker.com, on 17 September 2001, + and are gratefully acknowledged. + + Example: + + + + + 0.1, 0.1, 0.1 + + + + 0.2, 0.1, 0.1 + + 0.1, 0.2, 0.1 + 0, 0, 100 + 0.1, 0.1, 0.2 + + + + + +

-0.5, -0.5, 1

+

0.5, -0.5, 1

+

0.5, 0.5, 1

+

-0.5, 0.5, 1

+

0.5, -0.5, 0

+

-0.5, -0.5, 0

+

-0.5, 0.5, 0

+

0.5, 0.5, 0

+ + -0.408248, -0.408248, 0.816497 + 0.666667, -0.666667, 0.333333 + 0.408248, 0.408248, 0.816497 + -0.666667, 0.666667, 0.333333 + 0.408248, -0.408248, -0.816497 + -0.666667, -0.666667, -0.333333 + -0.408248, 0.408248, -0.816497 + 0.666667, 0.666667, -0.333333 + + + 0.9 + 0.1, 0.1, 0.1 + 0.2, 0.1, 0.1 + 0.1, 0.2, 0.1 + 0.8 + 0.1, 0.1, 0.2 + + + + 0 + 0 0 + 1 1 + 2 2 + + + 0 + 0 0 + 2 2 + 3 3 + + + 0 + 4 4 + 5 5 + 6 6 + + + 0 + 4 4 + 6 6 + 7 7 + + + 0 + 5 5 + 0 0 + 3 3 + + + 0 + 5 5 + 3 3 + 6 6 + + + 0 + 1 1 + 4 4 + 7 7 + + + 0 + 1 1 + 7 7 + 2 2 + + + 0 + 5 5 + 4 4 + 1 1 + + + 0 + 5 5 + 1 1 + 0 0 + + + 0 + 3 3 + 2 2 + 7 7 + + + 0 + 3 3 + 7 7 + 6 6 + +
+ + + + 0, 0, 0 + 0, 0, 0 + 1, 1, 1 + 1, 1, 1 + + 0 + + +
+ + Reference: + + XGL specification at http://www.xglspec.org/ + + Modified: + + 17 September 2001 + + Author: + + John Burkardt +*/ +{ + int iface; + int ivert; + int j; + float light_ambient_rgb[3]; + float light_diffuse_rgb[3]; + float light_direction[3]; + float light_specular_rgb[3]; + int material; + float material_alpha; + float material_amb_rgb[3]; + float material_diff_rgb[3]; + float material_emiss_rgb[3]; + float material_shine; + float material_spec_rgb[3]; + int mesh; + int mesh_num = 1; + int object; + float transform_forward[3]; + float transform_position[3]; + float transform_scale[3]; + float transform_up[3]; +/* + Make up some placeholder values for now. +*/ + light_ambient_rgb[0] = 0.2; + light_ambient_rgb[1] = 0.1; + light_ambient_rgb[2] = 0.1; + + light_diffuse_rgb[0] = 0.1; + light_diffuse_rgb[1] = 0.2; + light_diffuse_rgb[2] = 0.1; + + light_direction[0] = 0.0; + light_direction[1] = 0.0; + light_direction[2] = 100.0; + + light_specular_rgb[0] = 0.1; + light_specular_rgb[1] = 0.1; + light_specular_rgb[2] = 0.2; + + material_alpha = 0.9; + + material_amb_rgb[0] = 0.1; + material_amb_rgb[1] = 0.1; + material_amb_rgb[2] = 0.1; + + material_diff_rgb[0] = 0.2; + material_diff_rgb[1] = 0.1; + material_diff_rgb[2] = 0.1; + + material_emiss_rgb[0] = 0.1; + material_emiss_rgb[1] = 0.2; + material_emiss_rgb[2] = 0.1; + + material_shine = 0.8; + + material_spec_rgb[0] = 0.1; + material_spec_rgb[1] = 0.1; + material_spec_rgb[2] = 0.2; + + transform_forward[0] = 0.0; + transform_forward[1] = 0.0; + transform_forward[2] = 0.0; + + transform_position[0] = 0.0; + transform_position[1] = 0.0; + transform_position[2] = 0.0; + + transform_scale[0] = 1.0; + transform_scale[1] = 1.0; + transform_scale[2] = 1.0; + + transform_up[0] = 1.0; + transform_up[1] = 1.0; + transform_up[2] = 1.0; + + object_num = 1; + + text_num = 0; + + fprintf ( fileout, "\n" ); + fprintf ( fileout, "\n" ); + + text_num = text_num + 2; + + fprintf ( fileout, " \n" ); + fprintf ( fileout, " %f, %f, %f \n", + background_rgb[0], background_rgb[1], background_rgb[2] ); + fprintf ( fileout, " \n" ); + fprintf ( fileout, "\n" ); + fprintf ( fileout, " \n" ); + fprintf ( fileout, " %f, %f, %f \n", + light_ambient_rgb[0], light_ambient_rgb[1], light_ambient_rgb[2] ); + fprintf ( fileout, " \n" ); + fprintf ( fileout, " %f, %f, %f \n", + light_diffuse_rgb[0], light_diffuse_rgb[1], light_diffuse_rgb[2] ); + fprintf ( fileout, " %f, %f, %f \n", + light_direction[0], light_direction[1], light_direction[2] ); + fprintf ( fileout, " %f, %f, %f \n", + light_specular_rgb[0], light_specular_rgb[1], light_specular_rgb[2] ); + fprintf ( fileout, " \n" ); + fprintf ( fileout, " \n" ); + + text_num = text_num + 12; + + for ( mesh = 0; mesh < mesh_num; mesh++ ) { + + fprintf ( fileout, "\n" ); + fprintf ( fileout, " \n", mesh ); + fprintf ( fileout, "\n" ); + text_num = text_num + 3; + + for ( j = 0; j < cor3_num; j++ ) { + fprintf ( fileout, "

%f, %f, %f

\n", j, + cor3[0][j], cor3[1][j], cor3[2][j] ); + text_num = text_num + 1; + } + + fprintf ( fileout, "\n" ); + text_num = text_num + 1; + for ( j = 0; j < cor3_num; j++ ) { + fprintf ( fileout, " %f, %f, %f \n", j, + cor3_normal[0][j], cor3_normal[1][j], cor3_normal[2][j] ); + text_num = text_num + 1; + } + + for ( material = 0; material < material_num; material++ ) { + fprintf ( fileout, "\n" ); + fprintf ( fileout, " \n", material ); + fprintf ( fileout, " %f \n", material_alpha ); + fprintf ( fileout, " %f, %f, %f \n", + material_amb_rgb[0], material_amb_rgb[1], material_amb_rgb[2] ); + fprintf ( fileout, " %f, %f, %f \n", + material_diff_rgb[0], material_diff_rgb[1], material_diff_rgb[2] ); + fprintf ( fileout, " %f, %f, %f \n", + material_emiss_rgb[0], material_emiss_rgb[1], material_emiss_rgb[2] ); + fprintf ( fileout, " %f \n", material_shine ); + fprintf ( fileout, " %f, %f, %f \n", + material_spec_rgb[0], material_spec_rgb[1], material_spec_rgb[2] ); + fprintf ( fileout, " \n" ); + text_num = text_num + 9; + } + + fprintf ( fileout, "\n" ); + text_num = text_num + 1; + + for ( iface = 0; iface < face_num; iface++ ) { + fprintf ( fileout, " \n" ); + fprintf ( fileout, " %d \n", face_material[iface] ); + text_num = text_num + 2; + for ( ivert = 0; ivert < face_order[iface]; ivert++ ) { + fprintf ( fileout, + " %d %d \n", + ivert+1, face[ivert][iface], face[ivert][iface], ivert+1 ); + text_num = text_num + 1; + } + fprintf ( fileout, " \n" ); + text_num = text_num + 1; + } + + fprintf ( fileout, "
\n" ); + text_num = text_num + 1; + + } + + fprintf ( fileout, "\n" ); + text_num = text_num + 1; + + for ( object = 0; object < object_num; object++ ) { + + fprintf ( fileout, " \n" ); + fprintf ( fileout, " \n" ); + fprintf ( fileout, " %f, %f, %f \n", + transform_forward[0], transform_forward[1], transform_forward[2] ); + fprintf ( fileout, " %f, %f, %f \n", + transform_position[0], transform_position[1], transform_position[2] ); + fprintf ( fileout, "' %f, %f, %f \n", + transform_scale[0], transform_scale[1], transform_scale[2] ); + fprintf ( fileout, " %f, %f, %f \n", + transform_up[0], transform_up[1], transform_up[2] ); + fprintf ( fileout, " \n" ); + mesh = 0; + fprintf ( fileout, " %d \n", mesh ); + fprintf ( fileout, " \n" ); + text_num = text_num + 9; + + } + + fprintf ( fileout, "\n" ); + fprintf ( fileout, "
\n" ); + text_num = text_num + 2; + +/* + Report. +*/ + printf ( "\n" ); + printf ( "XGL_WRITE - Wrote %d text lines.\n", text_num ); + + return SUCCESS; +} diff --git a/kdl_parser/CMakeLists.txt b/kdl_parser/CMakeLists.txt new file mode 100644 index 0000000..2bd8fce --- /dev/null +++ b/kdl_parser/CMakeLists.txt @@ -0,0 +1,38 @@ +cmake_minimum_required(VERSION 2.4.6) +include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake) + +# Set the build type. Options are: +# Coverage : w/ debug symbols, w/o optimization, w/ code-coverage +# Debug : w/ debug symbols, w/o optimization +# Release : w/o debug symbols, w/ optimization +# RelWithDebInfo : w/ debug symbols, w/ optimization +# MinSizeRel : w/o debug symbols, w/ optimization, stripped binaries +#set(ROS_BUILD_TYPE RelWithDebInfo) + +rosbuild_init() + +rosbuild_add_boost_directories() + +#set the default path for built executables to the "bin" directory +set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) +#set the default path for built libraries to the "lib" directory +set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) + +#uncomment if you have defined messages +#genmsg() +#uncomment if you have defined services +#gensrv() + +rosbuild_add_library(${PROJECT_NAME} src/xml_parser.cpp src/dom_parser.cpp) + +rosbuild_add_executable(example_xml test/example_xml.cpp ) +target_link_libraries(example_xml ${PROJECT_NAME}) + +rosbuild_add_executable(example_dom test/example_dom.cpp ) +target_link_libraries(example_dom ${PROJECT_NAME}) + +rosbuild_add_executable(test_parser test/test_kdl_parser.cpp ) +target_link_libraries(test_parser ${PROJECT_NAME}) + +rosbuild_add_gtest_build_flags(test_parser) +rosbuild_add_rostest(${PROJECT_SOURCE_DIR}/test/test_kdl_parser.launch) diff --git a/kdl_parser/Makefile b/kdl_parser/Makefile new file mode 100644 index 0000000..b75b928 --- /dev/null +++ b/kdl_parser/Makefile @@ -0,0 +1 @@ +include $(shell rospack find mk)/cmake.mk \ No newline at end of file diff --git a/kdl_parser/include/kdl_parser/dom_parser.hpp b/kdl_parser/include/kdl_parser/dom_parser.hpp new file mode 100644 index 0000000..2e91c47 --- /dev/null +++ b/kdl_parser/include/kdl_parser/dom_parser.hpp @@ -0,0 +1,54 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Wim Meeussen */ + +#ifndef DOM_PARSER_H +#define DOM_PARSER_H + +#include +#include +#include + +using namespace std; + +namespace kdl_parser{ + +bool treeFromFile(const string& file, KDL::Tree& tree); +bool treeFromString(const string& xml, KDL::Tree& tree); +bool treeFromXml(TiXmlDocument *xml_doc, KDL::Tree& tree); +bool treeFromRobotModel(urdf::Model& robot_model, KDL::Tree& tree); +} + +#endif diff --git a/kdl_parser/include/kdl_parser/xml_parser.hpp b/kdl_parser/include/kdl_parser/xml_parser.hpp new file mode 100644 index 0000000..89e77e9 --- /dev/null +++ b/kdl_parser/include/kdl_parser/xml_parser.hpp @@ -0,0 +1,53 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Wim Meeussen */ + +#ifndef XML_PARSER_H +#define XML_PARSER_H + +#include +#include +#include + +using namespace std; + +namespace KDL{ + +bool treeFromFile(const string& file, Tree& tree); +bool treeFromString(const string& xml, Tree& tree); +bool treeFromXml(TiXmlElement *root, Tree& tree); +} + +#endif diff --git a/kdl_parser/manifest.xml b/kdl_parser/manifest.xml new file mode 100644 index 0000000..571b60e --- /dev/null +++ b/kdl_parser/manifest.xml @@ -0,0 +1,23 @@ + + + + The Kinematics and Dynamics Library (KDL) defines a tree structure to represent the kinematic and dynamic parameters of a robot mechanism. This package provides tools to construct a KDL tree from the robot representation in the urdf package. + + + Wim Meeussen meeussen@willowgarage.com + BSD + + http://pr.willowgarage.com/wiki/ + + + + + + + + + + + + + diff --git a/kdl_parser/pr2.urdf b/kdl_parser/pr2.urdf new file mode 100644 index 0000000..45e35f9c --- /dev/null +++ b/kdl_parser/pr2.urdf @@ -0,0 +1,2542 @@ + + + + + + + + + + + + + + + + + + + true + 1000.0 + + + + + + true + 1.0 + 5 + -10.0 + 1.0 + 10.0 + 1200000.0 + diagnostic + battery_state + self_test + + + + + true + 1000.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + fl_caster_l_wheel_collision + 100.0 + + true + 100.0 + fl_caster_l_wheel_bumper + + + + + + + + + + + + + + 75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + fl_caster_r_wheel_collision + 100.0 + + true + 100.0 + fl_caster_r_wheel_bumper + + + + + + + + + + + + + + -75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + fr_caster_l_wheel_collision + 100.0 + + true + 100.0 + fr_caster_l_wheel_bumper + + + + + + + + + + + + + + 75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + fr_caster_r_wheel_collision + 100.0 + + true + 100.0 + fr_caster_r_wheel_bumper + + + + + + + + + + + + + + -75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bl_caster_l_wheel_collision + 100.0 + + true + 100.0 + bl_caster_l_wheel_bumper + + + + + + + + + + + + + + 75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bl_caster_r_wheel_collision + 100.0 + + true + 100.0 + bl_caster_r_wheel_bumper + + + + + + + + + + + + + + -75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + br_caster_l_wheel_collision + 100.0 + + true + 100.0 + br_caster_l_wheel_bumper + + + + + + + + + + + + + + 75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + br_caster_r_wheel_collision + 100.0 + + true + 100.0 + br_caster_r_wheel_bumper + + + + + + + + + + + + + + -75.05 + + + base_collision + 100.0 + + true + 100.0 + base_bumper + + + + + + + + + + true + 100.0 + base_link + base_pose_ground_truth + 0.01 + map + 25.7 25.7 0 + 0 0 0 + + + + + 640 + 640 + 1 + 0.0 0.0 0.0 + false + + -100 + 100 + + 0.05 + 10.0 + 0.01 + 20.0 + + 0.005 + true + 20.0 + base_scan + base_laser + + + + + + + + true + 100.0 + plug_magnet + plug_magnet_pose_ground_truth + 0.01 + map + 0 0 0 + 0 0 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -52143.33 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + r_shoulder_pan_collision + 100.0 + + true + 100.0 + r_shoulder_pan_bumper + + + + + true + + + + + r_shoulder_lift_collision_geom + 100.0 + + true + 100.0 + r_r_shoulder_lift_bumper + + + + true + + + + + + true + + + + + + r_upper_arm_collision_geom + 100.0 + + true + 100.0 + r_upper_arm_bumper + + + + true + + + + r_elbow_flex_collision_geom + 100.0 + + true + 100.0 + r_elbow_flex_bumper + + + + + + + true + + + + true + + true + + r_forearm_collision + 100.0 + + true + 100.0 + r_forearm_bumper + + + + + + true + + r_wrist_flex_collision + 100.0 + + true + 100.0 + r_wrist_flex_bumper + + + + + + + + true + + r_wrist_roll_collision + 100.0 + + true + 100.0 + r_wrist_roll_bumper + + + + + + + + + 63.16 + + + + 61.89 + + + + 32.65 + + + + -36.17 + + + + 90.5142857143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + r_gripper_l_finger_collision + 100.0 + + true + 100.0 + r_gripper_l_finger_bumper + + + + + + + + + + + + + + + true + + r_gripper_r_finger_collision + 100.0 + + true + 100.0 + r_gripper_r_finger_bumper + + + + + + + + + + + + + + + + + + true + + + r_gripper_l_finger_tip_collision + 100.0 + + true + 100.0 + r_gripper_l_finger_tip_bumper + + + + + + + + + + + + + + + + + true + + + r_gripper_r_finger_tip_collision + 100.0 + + true + 100.0 + r_gripper_r_finger_tip_bumper + + + + + + + + + + + + + + + + + true + 100.0 + r_gripper_l_finger_link + r_gripper_l_finger_pose_ground_truth + 0.0 + map + + + + true + 100.0 + r_gripper_l_finger_link + r_gripper_l_finger_force_ground_truth + r_gripper_l_finger_link + + + + + + + + + + + + + + + + true + + r_gripper_palm_collision + 100.0 + + true + 100.0 + r_gripper_palm_bumper + + + + + + true + + + r_gripper_l_finger_tip_link + r_gripper_float_link + r_gripper_l_finger_tip_link + 0 1 0 + 0 0 0 + + + r_gripper_r_finger_tip_link + r_gripper_float_link + r_gripper_r_finger_tip_link + 0 1 0 + 0 0 0 + + + + + true + 100.0 + r_gripper_palm_link + r_gripper_palm_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + map + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + l_shoulder_pan_collision + 100.0 + + true + 100.0 + l_shoulder_pan_bumper + + + + + true + + + + + l_shoulder_lift_collision_geom + 100.0 + + true + 100.0 + l_r_shoulder_lift_bumper + + + + true + + + + + + true + + + + + + l_upper_arm_collision_geom + 100.0 + + true + 100.0 + l_upper_arm_bumper + + + + true + + + + l_elbow_flex_collision_geom + 100.0 + + true + 100.0 + l_elbow_flex_bumper + + + + + + + true + + + + true + + true + + l_forearm_collision + 100.0 + + true + 100.0 + l_forearm_bumper + + + + + + true + + l_wrist_flex_collision + 100.0 + + true + 100.0 + l_wrist_flex_bumper + + + + + + + + true + + l_wrist_roll_collision + 100.0 + + true + 100.0 + l_wrist_roll_bumper + + + + + + + + + 63.16 + + + + 61.89 + + + + 32.65 + + + + -36.17 + + + + 90.5142857143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + l_gripper_l_finger_collision + 100.0 + + true + 100.0 + l_gripper_l_finger_bumper + + + + + + + + + + + + + + + true + + l_gripper_r_finger_collision + 100.0 + + true + 100.0 + l_gripper_r_finger_bumper + + + + + + + + + + + + + + + + + + true + + + l_gripper_l_finger_tip_collision + 100.0 + + true + 100.0 + l_gripper_l_finger_tip_bumper + + + + + + + + + + + + + + + + + true + + + l_gripper_r_finger_tip_collision + 100.0 + + true + 100.0 + l_gripper_r_finger_tip_bumper + + + + + + + + + + + + + + + + + true + 100.0 + l_gripper_l_finger_link + l_gripper_l_finger_pose_ground_truth + 0.0 + map + + + + true + 100.0 + l_gripper_l_finger_link + l_gripper_l_finger_force_ground_truth + l_gripper_l_finger_link + + + + + + + + + + + + + + + + true + + l_gripper_palm_collision + 100.0 + + true + 100.0 + l_gripper_palm_bumper + + + + + + true + + + l_gripper_l_finger_tip_link + l_gripper_float_link + l_gripper_l_finger_tip_link + 0 1 0 + 0 0 0 + + + l_gripper_r_finger_tip_link + l_gripper_float_link + l_gripper_r_finger_tip_link + 0 1 0 + 0 0 0 + + + + + true + 100.0 + l_gripper_palm_link + l_gripper_palm_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + map + + + + true + + + + + + + + + + + + + + + + + + + + + diff --git a/kdl_parser/src/dom_parser.cpp b/kdl_parser/src/dom_parser.cpp new file mode 100644 index 0000000..a9b75dd --- /dev/null +++ b/kdl_parser/src/dom_parser.cpp @@ -0,0 +1,173 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Wim Meeussen */ + +#include "kdl_parser/dom_parser.hpp" +#include + + +using namespace std; +using namespace KDL; + +namespace kdl_parser{ + + +// construct vector +Vector toKdl(urdf::Vector3 v) +{ + return Vector(v.x, v.y, v.z); +} + +// construct rotation +Rotation toKdl(urdf::Rotation r) +{ + double roll, pitch, yaw; + r.getRPY(roll, pitch, yaw); + return Rotation::RPY(roll, pitch, yaw); +} + +// construct pose +Frame toKdl(urdf::Pose p) +{ + return Frame(toKdl(p.rotation), toKdl(p.position)); +} + +// construct joint +Joint toKdl(boost::shared_ptr jnt) +{ + Frame F_parent_jnt = toKdl(jnt->parent_to_joint_origin_transform); + + switch (jnt->type){ + case urdf::Joint::FIXED:{ + return Joint(jnt->name, Joint::None); + } + case urdf::Joint::REVOLUTE:{ + Vector axis = toKdl(jnt->axis); + return Joint(jnt->name, F_parent_jnt.p, F_parent_jnt.M * axis, Joint::RotAxis); + } + case urdf::Joint::CONTINUOUS:{ + Vector axis = toKdl(jnt->axis); + return Joint(jnt->name, F_parent_jnt.p, F_parent_jnt.M * axis, Joint::RotAxis); + } + case urdf::Joint::PRISMATIC:{ + Vector axis = toKdl(jnt->axis); + return Joint(jnt->name, F_parent_jnt.p, F_parent_jnt.M * axis, Joint::TransAxis); + } + default:{ + return Joint(jnt->name, Joint::None); + } + } + return Joint(); +} + +// construct inertia +RigidBodyInertia toKdl(boost::shared_ptr i) +{ + Frame origin = toKdl(i->origin); + return origin.M * RigidBodyInertia(i->mass, origin.p, RotationalInertia(i->ixx, i->iyy, i->izz, i->ixy, i->ixz, i->iyz)); +} + + +// recursive function to walk through tree +bool addChildrenToTree(boost::shared_ptr root, Tree& tree) +{ + std::vector > children = root->child_links; + ROS_DEBUG("Link %s had %i children", root->name.c_str(), children.size()); + + // constructs the optional inertia + RigidBodyInertia inert(0); + if (root->inertial) + inert = toKdl(root->inertial); + + // constructs the kdl joint + Joint jnt = toKdl(root->parent_joint); + + // construct the kdl segment + Segment sgm(root->name, jnt, toKdl(root->parent_joint->parent_to_joint_origin_transform)); + + // add segment to tree + tree.addSegment(sgm, root->parent_joint->parent_link_name); + + // recurslively add all children + for (size_t i=0; iname); + + // add all children + for (size_t i=0; ichild_links.size(); i++) + if (!addChildrenToTree(robot_model.getRoot()->child_links[i], tree)) + return false; + + return true; +} + + + +} + diff --git a/kdl_parser/src/xml_parser.cpp b/kdl_parser/src/xml_parser.cpp new file mode 100644 index 0000000..785577a --- /dev/null +++ b/kdl_parser/src/xml_parser.cpp @@ -0,0 +1,365 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Wim Meeussen */ + +#include +#include "kdl_parser/xml_parser.hpp" + +using namespace std; + +namespace KDL{ + + +bool isNumber(const char& c) +{ + return (c=='1' || c=='2' ||c=='3' ||c=='4' ||c=='5' ||c=='6' ||c=='7' ||c=='8' ||c=='9' ||c=='0' ||c=='.' ||c=='-' ||c==' '); +} + +bool isNumber(const std::string& s) +{ + for (unsigned int i=0; iAttribute(name.c_str()); + if (!attr_char){ + cerr << "No " << name << " found in xml" << endl; + return false; + } + attr = string(attr_char); + return true; +} + + +bool getVector(TiXmlElement *vector_xml, const string& field, Vector& vector) +{ + if (!vector_xml) return false; + string vector_str; + if (!getAtribute(vector_xml, field, vector_str)) + return false; + + std::vector pieces; + boost::split( pieces, vector_str, boost::is_any_of(" ")); + unsigned int pos=0; + for (unsigned int i = 0; i < pieces.size(); ++i){ + if (pieces[i] != ""){ + if (pos < 3){ + if (!isNumber(pieces[i])) + {cerr << "This is not a valid number: '" << pieces[i] << "'" << endl; return false;} + vector(pos) = atof(pieces[i].c_str()); + } + pos++; + } + } + + if (pos != 3) { + cerr << "Vector did not contain 3 pieces:" << endl; + pos = 1; + for (unsigned int i = 0; i < pieces.size(); ++i){ + if (pieces[i] != ""){ + cerr << " " << pos << ": '" << pieces[i] << "'" << endl; + pos++; + } + } + return false; + } + + return true; +} + +bool getValue(TiXmlElement *value_xml, const string& field, double& value) +{ + if (!value_xml) return false; + string value_str; + if (!getAtribute(value_xml, field, value_str)) return false; + + if (!isNumber(value_str)) + {cerr << "This is not a valid number: '" << value_str << "'" << endl; return false;} + value = atof(value_str.c_str()); + + return true; +} + + +bool getFrame(TiXmlElement *frame_xml, Frame& frame) +{ + if (!frame_xml) return false; + + Vector origin, rpy; + if (!getVector(frame_xml, "xyz", origin)) + {cerr << "Frame does not have xyz" << endl; return false;} + if (!getVector(frame_xml, "rpy", rpy)) + {cerr << "Frame does not have rpy" << endl; return false;} + + frame = Frame(Rotation::RPY(rpy(0), rpy(1), rpy(2)), origin); + return true; +} + + +bool getRotInertia(TiXmlElement *rot_inertia_xml, RotationalInertia& rot_inertia) +{ + if (!rot_inertia_xml) return false; + double Ixx=0, Iyy=0, Izz=0, Ixy=0, Ixz=0, Iyz=0; + if (!getValue(rot_inertia_xml, "ixx", Ixx)) return false; + if (!getValue(rot_inertia_xml, "iyy", Iyy)) return false; + if (!getValue(rot_inertia_xml, "izz", Izz)) return false; + if (!getValue(rot_inertia_xml, "ixy", Ixy)) return false; + if (!getValue(rot_inertia_xml, "ixz", Ixz)) return false; + if (!getValue(rot_inertia_xml, "iyz", Iyz)) return false; + + rot_inertia = RotationalInertia(Ixx, Iyy, Izz, Ixy, Ixz, Iyz); + return true; +} + + +bool getInertia(TiXmlElement *inertia_xml, RigidBodyInertia& inertia) +{ + if (!inertia_xml) return false; + Vector cog; + if (!getVector(inertia_xml->FirstChildElement("com"), "xyz", cog)) + {cerr << "Inertia does not specify center of gravity" << endl; return false;} + double mass = 0.0; + if (!getValue(inertia_xml->FirstChildElement("mass"), "value", mass)) + {cerr << "Inertia does not specify mass" << endl; return false;} + RotationalInertia rot_inertia; + if (!getRotInertia(inertia_xml->FirstChildElement("inertia"), rot_inertia)) + {cerr << "Inertia does not specify rotational inertia" << endl; return false;} + inertia = RigidBodyInertia(mass, cog, rot_inertia); + return true; +} + + + +bool getJoint(TiXmlElement *joint_xml, Joint& joint) +{ + if (!joint_xml) return false; + // get joint name + string joint_name; + if (!getAtribute(joint_xml, "name", joint_name)) + {cerr << "Joint does not have name" << endl; return false;} + + // get joint type + string joint_type; + if (!getAtribute(joint_xml, "type", joint_type)) + {cerr << "Joint does not have type" << endl; return false;} + + if (joint_type == "revolute"){ + Vector axis, origin; + // mandatory axis + if (!getVector(joint_xml->FirstChildElement("axis"), "xyz", axis)) + {cerr << "Revolute joint does not spacify axis" << endl; return false;} + // optional origin + if (!getVector(joint_xml->FirstChildElement("anchor"), "xyz", origin)) + origin = Vector::Zero(); + joint = Joint(joint_name, origin, axis, Joint::RotAxis); + } + else if (joint_type == "prismatic"){ + Vector axis, origin; + // mandatory axis + if (!getVector(joint_xml->FirstChildElement("axis"), "xyz", axis)) + {cerr << "Prismatic joint does not spacify axis" << endl; return false;}; + // optional origin + if (!getVector(joint_xml->FirstChildElement("anchor"), "xyz", origin)) + origin = Vector::Zero(); + joint = Joint(joint_name, origin, axis, Joint::TransAxis); + } + else if (joint_type == "fixed"){ + joint = Joint(joint_name, Joint::None); + } + else{ + cerr << "Unknown joint type '" << joint_type << "'. Using fixed joint instead" << endl; + joint = Joint(joint_name, Joint::None); + } + + return true; +} + + +bool getSegment(TiXmlElement *segment_xml, map& joints, Segment& segment) +{ + if (!segment_xml) return false; + // get segment name + string segment_name; + if (!getAtribute(segment_xml, "name", segment_name)) + {cerr << "Segment does not have name" << endl; return false;} + + // get mandetory frame + Frame frame; + if (!getFrame(segment_xml->FirstChildElement("origin"), frame)) + {cerr << "Segment does not have origin" << endl; return false;} + + // get mandetory joint + string joint_name; + if (!getAtribute(segment_xml->FirstChildElement("joint"), "name", joint_name)) + {cerr << "Segment does not specify joint name" << endl; return false;} + + Joint joint; + map::iterator it = joints.find(joint_name); + if (it != joints.end()) + joint = it->second; + else if (getJoint(segment_xml->FirstChildElement("joint"), joint)); + else {cerr << "Could not find joint " << joint_name << " in segment" << endl; return false;} + + if (joint.getType() != Joint::None) + joint = Joint(joint_name, frame*(joint.JointOrigin()), joint.JointAxis(), joint.getType()); + + // get optional inertia + RigidBodyInertia inertia(0.0); + getInertia(segment_xml->FirstChildElement("inertial"), inertia); + + segment = Segment(segment_name, joint, frame, inertia); + return true; +} + + +void addChildrenToTree(const string& root, const map& segments, const map& parents, Tree& tree) +{ + // add root segments + if (tree.addSegment(segments.find(root)->second, parents.find(root)->second)){ + cout << "Added segment " << root << " to " << parents.find(root)->second << endl; + + // find children + for (map::const_iterator p=parents.begin(); p!=parents.end(); p++) + if (p->second == root) addChildrenToTree(p->first, segments, parents, tree); + } + else {cerr << "Failed to add segment to tree" << endl;} +} + + +bool getTree(TiXmlElement *robot_xml, Tree& tree) +{ + cout << "Parsing robot xml" << endl; + + if (!robot_xml) return false; + + // Constructs the joints + TiXmlElement *joint_xml = NULL; + Joint joint; + map joints; + for (joint_xml = robot_xml->FirstChildElement("joint"); joint_xml; joint_xml = joint_xml->NextSiblingElement("joint")){ + // get joint name + string joint_name; + if (!getAtribute(joint_xml, "name", joint_name)) + {cerr << "Joint does not have name" << endl; return false;} + + // build joint + if (!getJoint(joint_xml, joint)) + {cerr << "Constructing joint " << joint_name << " failed" << endl; return false;} + joints[joint.getName()] = joint; + } + + // Constructs the segments + TiXmlElement *segment_xml = NULL; + Segment segment; + map segments; + map parents; + for (segment_xml = robot_xml->FirstChildElement("link"); segment_xml; segment_xml = segment_xml->NextSiblingElement("link")){ + + // get segment name + string segment_name; + if (!getAtribute(segment_xml, "name", segment_name)) + {cerr << "Segment does not have name" << endl; return false;} + + // get segment parent + string segment_parent; + if (!getAtribute(segment_xml->FirstChildElement("parent"), "name", segment_parent)) + {cerr << "Segment " << segment_name << " does not have parent" << endl; return false;} + + // build segment + if (!getSegment(segment_xml, joints, segment)) + {cerr << "Constructing segment " << segment_name << " failed" << endl; return false;} + segments[segment.getName()] = segment; + parents[segment.getName()] = segment_parent; + } + + // fail if no segments were found + if (segments.empty()){ + cerr << "Did not find any segments" << endl; + return false; + } + + // find the root segment: the parent segment that does not exist + string root; + for (map::const_iterator p=parents.begin(); p!=parents.end(); p++) + if (segments.find(p->second) == segments.end()) + root = p->first; + cout << parents[root] << " is root segment " << endl; + tree = Tree(parents[root]); + + // add all segments to tree + addChildrenToTree(root, segments, parents, tree); + + return true; +} + + +bool treeFromFile(const string& file, Tree& tree) +{ + TiXmlDocument urdf_xml; + urdf_xml.LoadFile(file); + TiXmlElement *root = urdf_xml.FirstChildElement("robot"); + if (!root){ + cerr << "Could not parse the xml" << endl; + return false; + } + return getTree(root, tree); +} + + +bool treeFromString(const string& xml, Tree& tree) +{ + TiXmlDocument urdf_xml; + urdf_xml.Parse(xml.c_str()); + TiXmlElement *root = urdf_xml.FirstChildElement("robot"); + if (!root){ + cerr << "Could not parse the xml" << endl; + return false; + } + return getTree(root, tree); +} + + +bool treeFromXml(TiXmlElement *root, Tree& tree) +{ + return getTree(root, tree); +} + +} + diff --git a/kdl_parser/test/example_dom.cpp b/kdl_parser/test/example_dom.cpp new file mode 100644 index 0000000..f19f718 --- /dev/null +++ b/kdl_parser/test/example_dom.cpp @@ -0,0 +1,105 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Wim Meeussen */ + +#include +#include +#include "kdl_parser/dom_parser.hpp" +#include + +using namespace KDL; +using namespace std; +using namespace urdf; + +int main() +{ + Model robot_model; + if (!robot_model.initFile("pr2.urdf")) + {cerr << "Could not generate robot model" << endl; return false;} + + Tree my_tree; + if (!kdl_parser::treeFromRobotModel(robot_model, my_tree)) + {cerr << "Could not extract kdl tree" << endl; return false;} + + // walk through tree + cout << " ======================================" << endl; + SegmentMap::const_iterator root = my_tree.getRootSegment(); + cout << "Found root segment '" << root->second.segment.getName() << "' with " << root->second.children.size() << " children" << endl; + for (unsigned int i=0; isecond.children.size(); i++){ + SegmentMap::const_iterator child = root->second.children[i]; + cout << " - child " << i+1 << ": " << child->second.segment.getName() << " has joint " << child->second.segment.getJoint().getName() + << " and " << child->second.children.size() << " children" << endl; + + for (unsigned int j=0; jsecond.children.size(); j++){ + SegmentMap::const_iterator grandchild = child->second.children[j]; + cout << " - grandchild " << j+1 << ": " << grandchild->second.segment.getName() << " has joint " << grandchild->second.segment.getJoint().getName() + << " and " << grandchild->second.children.size() << " children" << endl; + + } + } + + // extract chains from tree + Chain chain1, chain2; + my_tree.getChain("l_gripper_palm_link", "r_gripper_palm_link", chain1); + my_tree.getChain("r_gripper_palm_link", "l_gripper_palm_link", chain2); + cout << "Got chain1 with " << chain1.getNrOfJoints() << " joints and " << chain1.getNrOfSegments() << " segments" << endl; + cout << "Got chain2 with " << chain2.getNrOfJoints() << " joints and " << chain2.getNrOfSegments() << " segments" << endl; + + JntArray jnt1(chain1.getNrOfJoints()); + JntArray jnt2(chain1.getNrOfJoints()); + for (int i=0; i<(int)chain1.getNrOfJoints(); i++){ + jnt1(i) = (i+1)*2; + jnt2((int)chain1.getNrOfJoints()-i-1) = -jnt1(i); + } + for (int i=0; i<(int)chain1.getNrOfJoints(); i++) + cout << "jnt 1 -- jnt 2 " << jnt1(i) << " -- " << jnt2(i) << endl; + + ChainFkSolverPos_recursive solver1(chain1); + ChainFkSolverPos_recursive solver2(chain2); + Frame f1, f2; + solver1.JntToCart(jnt1, f1); + solver2.JntToCart(jnt2, f2); + cout << "frame 1 " << f1 << endl; + cout << "frame 2 " << f2.Inverse() << endl; + + // copy tree + Tree copy = my_tree; + copy.getChain("l_gripper_palm_link", "r_gripper_palm_link", chain1); + copy.getChain("r_gripper_palm_link", "l_gripper_palm_link", chain2); + cout << "Got chain1 with " << chain1.getNrOfJoints() << " joints and " << chain1.getNrOfSegments() << " segments" << endl; + cout << "Got chain2 with " << chain2.getNrOfJoints() << " joints and " << chain2.getNrOfSegments() << " segments" << endl; + +} + diff --git a/kdl_parser/test/example_xml.cpp b/kdl_parser/test/example_xml.cpp new file mode 100644 index 0000000..75a4228 --- /dev/null +++ b/kdl_parser/test/example_xml.cpp @@ -0,0 +1,99 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Wim Meeussen */ + +#include +#include +#include "kdl_parser/xml_parser.hpp" +#include + +using namespace KDL; +using namespace std; + + +int main() +{ + Tree my_tree; + if (!treeFromFile("pr2_desc.xml", my_tree)) return -1; + + // walk through tree + SegmentMap::const_iterator root = my_tree.getRootSegment(); + cout << "Found root " << root->second.segment.getName() << " with " << root->second.children.size() << " children" << endl; + for (unsigned int i=0; isecond.children.size(); i++){ + SegmentMap::const_iterator child = root->second.children[i]; + cout << " - child " << i+1 << ": " << child->second.segment.getName() << " has joint " << child->second.segment.getJoint().getName() + << " and " << child->second.children.size() << " children" << endl; + + for (unsigned int j=0; jsecond.children.size(); j++){ + SegmentMap::const_iterator grandchild = child->second.children[j]; + cout << " - grandchild " << j+1 << ": " << grandchild->second.segment.getName() << " has joint " << grandchild->second.segment.getJoint().getName() + << " and " << grandchild->second.children.size() << " children" << endl; + + } + } + + // extract chains from tree + Chain chain1, chain2; + my_tree.getChain("l_gripper_palm_link", "r_gripper_palm_link", chain1); + my_tree.getChain("r_gripper_palm_link", "l_gripper_palm_link", chain2); + cout << "Got chain1 with " << chain1.getNrOfJoints() << " joints and " << chain1.getNrOfSegments() << " segments" << endl; + cout << "Got chain2 with " << chain2.getNrOfJoints() << " joints and " << chain2.getNrOfSegments() << " segments" << endl; + + JntArray jnt1(chain1.getNrOfJoints()); + JntArray jnt2(chain1.getNrOfJoints()); + for (int i=0; i<(int)chain1.getNrOfJoints(); i++){ + jnt1(i) = (i+1)*2; + jnt2((int)chain1.getNrOfJoints()-i-1) = -jnt1(i); + } + for (int i=0; i<(int)chain1.getNrOfJoints(); i++) + cout << "jnt 1 -- jnt 2 " << jnt1(i) << " -- " << jnt2(i) << endl; + + ChainFkSolverPos_recursive solver1(chain1); + ChainFkSolverPos_recursive solver2(chain2); + Frame f1, f2; + solver1.JntToCart(jnt1, f1); + solver2.JntToCart(jnt2, f2); + cout << "frame 1 " << f1 << endl; + cout << "frame 2 " << f2.Inverse() << endl; + + // copy tree + Tree copy = my_tree; + copy.getChain("l_gripper_palm_link", "r_gripper_palm_link", chain1); + copy.getChain("r_gripper_palm_link", "l_gripper_palm_link", chain2); + cout << "Got chain1 with " << chain1.getNrOfJoints() << " joints and " << chain1.getNrOfSegments() << " segments" << endl; + cout << "Got chain2 with " << chain2.getNrOfJoints() << " joints and " << chain2.getNrOfSegments() << " segments" << endl; + +} + diff --git a/kdl_parser/test/pr2_desc.xml b/kdl_parser/test/pr2_desc.xml new file mode 100644 index 0000000..59c6e66 --- /dev/null +++ b/kdl_parser/test/pr2_desc.xml @@ -0,0 +1,3541 @@ + + + + + + + + + + + + + + + + + + + + true + 1000.0 + + + + + + true + 1.0 + 5 + -10.0 + 1.0 + 10.0 + 1200000.0 + diagnostic + battery_state + self_test + + + + + true + 1000.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + base_collision + 100.0 + + true + 100.0 + base_bumper + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 + 640 + 1 + 0.0 0.0 0.0 + false + + -100 + 100 + + 0.05 + 10.0 + 0.01 + 20.0 + + 0.005 + true + 20.0 + base_scan + base_laser + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + fl_caster_l_wheel_collision + 100.0 + + true + 100.0 + fl_caster_l_wheel_bumper + + + + + + + + + 75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + fl_caster_r_wheel_collision + 100.0 + + true + 100.0 + fl_caster_r_wheel_bumper + + + + + + + + + -75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + fr_caster_l_wheel_collision + 100.0 + + true + 100.0 + fr_caster_l_wheel_bumper + + + + + + + + + 75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + fr_caster_r_wheel_collision + 100.0 + + true + 100.0 + fr_caster_r_wheel_bumper + + + + + + + + + -75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bl_caster_l_wheel_collision + 100.0 + + true + 100.0 + bl_caster_l_wheel_bumper + + + + + + + + + 75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bl_caster_r_wheel_collision + 100.0 + + true + 100.0 + bl_caster_r_wheel_bumper + + + + + + + + + -75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + br_caster_l_wheel_collision + 100.0 + + true + 100.0 + br_caster_l_wheel_bumper + + + + + + + + + 75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + br_caster_r_wheel_collision + 100.0 + + true + 100.0 + br_caster_r_wheel_bumper + + + + + + + + + -75.05 + + + + true + 100.0 + base_link + base_pose_ground_truth + 0.01 + map + 25.7 25.7 0 + 0 0 0 + + + + + + + + + + + + + + -52143.33 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + torso_lift_collision + 100.0 + + true + 100.0 + torso_lift_bumper + + + + + + + + + + + + + + + + 6.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1024 800 + 60 + 0.1 + 100 + 20.0 + + true + 20.0 + /prosilica/cam_info + /prosilica/image + /prosilica/image_rect + /prosilica/image_rect + high_def_link + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 90 + 0.1 + 100 + 20.0 + + true + 20.0 + stereo/left_image + stereo_l_stereo_camera_frame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 90 + 0.1 + 100 + 20.0 + + true + 20.0 + stereo/right_image + stereo_r_stereo_camera_frame + + + + + + + + + true + 20.0 + stereo_l_sensor + stereo_r_sensor + stereo/raw_stereo + stereo_optical_frame + 320 + 320 + 240 + 320 + 0 + 0 + 0 + 0 + 0 + -0.09 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 + 640 + 1 + + 0.0 0.0 0.0 + false + + -80 + 80 + + 0.05 + 10.0 + 0.01 + 20.0 + + 0.005 + true + 20.0 + tilt_scan + laser_tilt_link + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + r_shoulder_pan_collision + 100.0 + + true + 100.0 + r_shoulder_pan_bumper + + + + + + + true + + + + + 63.16 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + r_shoulder_lift_collision + 100.0 + + true + 100.0 + r_r_shoulder_lift_bumper + + + + + + + true + + + + + 61.89 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + 32.65 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + r_upper_arm_collision + 100.0 + + true + 100.0 + r_upper_arm_bumper + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + r_elbow_flex_collision + 100.0 + + true + 100.0 + r_elbow_flex_bumper + + + + + + + true + + + + + -36.17 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + 90.5142857143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + r_forearm_collision + 100.0 + + true + 100.0 + r_forearm_bumper + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + r_wrist_flex_collision + 100.0 + + true + 100.0 + r_wrist_flex_bumper + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + r_wrist_roll_collision + 100.0 + + true + 100.0 + r_wrist_roll_bumper + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + r_gripper_palm_collision + 100.0 + + true + 100.0 + r_gripper_palm_bumper + + + + + + + true + + + + + true + 100.0 + r_gripper_palm_link + r_gripper_palm_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + map + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + true + 100.0 + r_gripper_tool_frame + r_gripper_tool_frame_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + map + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + r_gripper_l_finger_collision + 100.0 + + true + 100.0 + r_gripper_l_finger_bumper + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + r_gripper_r_finger_collision + 100.0 + + true + 100.0 + r_gripper_r_finger_bumper + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + r_gripper_l_finger_tip_collision + 100.0 + + true + 100.0 + r_gripper_l_finger_tip_bumper + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + r_gripper_r_finger_tip_collision + 100.0 + + true + 100.0 + r_gripper_r_finger_tip_bumper + + + + + + + true + + + + + + + + + + true + 100.0 + r_gripper_l_finger_link + r_gripper_l_finger_pose_ground_truth + 0.0 + map + + + + true + 100.0 + r_gripper_l_finger_link + r_gripper_l_finger_force_ground_truth + r_gripper_l_finger_link + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + l_shoulder_pan_collision + 100.0 + + true + 100.0 + l_shoulder_pan_bumper + + + + + + + true + + + + + 63.16 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + l_shoulder_lift_collision + 100.0 + + true + 100.0 + l_r_shoulder_lift_bumper + + + + + + + true + + + + + 61.89 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + 32.65 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + l_upper_arm_collision + 100.0 + + true + 100.0 + l_upper_arm_bumper + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + l_elbow_flex_collision + 100.0 + + true + 100.0 + l_elbow_flex_bumper + + + + + + + true + + + + + -36.17 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + 90.5142857143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + l_forearm_collision + 100.0 + + true + 100.0 + l_forearm_bumper + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + l_wrist_flex_collision + 100.0 + + true + 100.0 + l_wrist_flex_bumper + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + l_wrist_roll_collision + 100.0 + + true + 100.0 + l_wrist_roll_bumper + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + l_gripper_palm_collision + 100.0 + + true + 100.0 + l_gripper_palm_bumper + + + + + + + true + + + + + true + 100.0 + l_gripper_palm_link + l_gripper_palm_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + map + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + true + 100.0 + l_gripper_tool_frame + l_gripper_tool_frame_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + map + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + l_gripper_l_finger_collision + 100.0 + + true + 100.0 + l_gripper_l_finger_bumper + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + l_gripper_r_finger_collision + 100.0 + + true + 100.0 + l_gripper_r_finger_bumper + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + l_gripper_l_finger_tip_collision + 100.0 + + true + 100.0 + l_gripper_l_finger_tip_bumper + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + l_gripper_r_finger_tip_collision + 100.0 + + true + 100.0 + l_gripper_r_finger_tip_bumper + + + + + + + true + + + + + + + + + + true + 100.0 + l_gripper_l_finger_link + l_gripper_l_finger_pose_ground_truth + 0.0 + map + + + + true + 100.0 + l_gripper_l_finger_link + l_gripper_l_finger_force_ground_truth + l_gripper_l_finger_link + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + l_upper_arm_roll_link + r_upper_arm_roll_link + l_elbow_flex_link + r_elbow_flex_link + l_forearm_roll_link + r_forearm_roll_link + l_wrist_flex_link + r_wrist_flex_link + l_wrist_roll_link + r_wrist_roll_link + l_gripper_l_finger_link + l_gripper_r_finger_link + r_gripper_l_finger_link + r_gripper_r_finger_link + r_shoulder_pan_link + r_shoulder_lift_link + l_shoulder_pan_link + l_shoulder_lift_link + torso_lift_link + base_link + + base_link + torso_lift_link + head_pan_link + head_tilt_link + r_shoulder_pan_link + r_shoulder_lift_link + r_upper_arm_roll_link + r_upper_arm_link + r_elbow_flex_link + r_forearm_roll_link + r_forearm_link + r_wrist_flex_link + r_wrist_roll_link + r_gripper_palm_link + r_gripper_l_finger_link + r_gripper_r_finger_link + r_gripper_l_finger_tip_link + r_gripper_r_finger_tip_link + + r_forearm_link + base_link + + r_gripper_palm_link + base_link + + r_gripper_l_finger_link + base_link + + r_gripper_r_finger_link + base_link + + r_gripper_l_finger_tip_link + base_link + + r_gripper_r_finger_tip_link + base_link + + base_link + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + l_shoulder_pan_link + l_shoulder_lift_link + l_upper_arm_roll_link + l_upper_arm_link + l_elbow_flex_link + l_forearm_roll_link + l_forearm_link + l_wrist_flex_link + l_wrist_roll_link + + + + + + + + + + + + + + + + r_shoulder_pan_link + r_shoulder_lift_link + r_upper_arm_roll_link + r_upper_arm_link + r_elbow_flex_link + r_forearm_roll_link + r_forearm_link + r_wrist_flex_link + r_wrist_roll_link + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + base_link + torso_lift_link + l_shoulder_pan_link + l_shoulder_lift_link + l_upper_arm_roll_link + l_upper_arm_link + l_elbow_flex_link + l_forearm_roll_link + l_forearm_link + l_wrist_flex_link + l_wrist_roll_link + + base_link + torso_lift_link + r_shoulder_pan_link + r_shoulder_lift_link + r_upper_arm_roll_link + r_upper_arm_link + r_elbow_flex_link + r_forearm_roll_link + r_forearm_link + r_wrist_flex_link + r_wrist_roll_link + + + + + + + + + + + + + + + + l_shoulder_pan_link + l_shoulder_lift_link + l_upper_arm_roll_link + l_upper_arm_link + l_elbow_flex_link + l_forearm_roll_link + l_forearm_link + l_wrist_flex_link + l_wrist_roll_link + r_shoulder_pan_link + r_shoulder_lift_link + r_upper_arm_roll_link + r_upper_arm_link + r_elbow_flex_link + r_forearm_roll_link + r_forearm_link + r_wrist_flex_link + r_wrist_roll_link + + base_link + torso_lift_link + l_shoulder_pan_link + l_shoulder_lift_link + l_upper_arm_roll_link + l_upper_arm_link + l_elbow_flex_link + l_forearm_roll_link + l_forearm_link + l_wrist_flex_link + l_wrist_roll_link + r_shoulder_pan_link + r_shoulder_lift_link + r_upper_arm_roll_link + r_upper_arm_link + r_elbow_flex_link + r_forearm_roll_link + r_forearm_link + r_wrist_flex_link + r_wrist_roll_link + + + + + + + diff --git a/kdl_parser/test/pr2_desc_bracket.xml b/kdl_parser/test/pr2_desc_bracket.xml new file mode 100644 index 0000000..f512410 --- /dev/null +++ b/kdl_parser/test/pr2_desc_bracket.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/kdl_parser/test/pr2_desc_bracket2.xml b/kdl_parser/test/pr2_desc_bracket2.xml new file mode 100644 index 0000000..f3f2e00 --- /dev/null +++ b/kdl_parser/test/pr2_desc_bracket2.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/kdl_parser/test/pr2_desc_vector.xml b/kdl_parser/test/pr2_desc_vector.xml new file mode 100644 index 0000000..a6a37f3 --- /dev/null +++ b/kdl_parser/test/pr2_desc_vector.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/kdl_parser/test/test_kdl_parser.cpp b/kdl_parser/test/test_kdl_parser.cpp new file mode 100644 index 0000000..51b6f1f --- /dev/null +++ b/kdl_parser/test/test_kdl_parser.cpp @@ -0,0 +1,93 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Wim Meeussen */ + +#include +#include +#include +#include "kdl_parser/xml_parser.hpp" + +using namespace KDL; + +int g_argc; +char** g_argv; + +class TestParser : public testing::Test +{ +public: + Tree my_tree; + +protected: + /// constructor + TestParser() + { + } + + + /// Destructor + ~TestParser() + { + } +}; + + + + +TEST_F(TestParser, test) +{ + for (int i=1; isecond.children.size() == 1); + ASSERT_TRUE(my_tree.getSegment("base_link")->second.parent == my_tree.getRootSegment()); + SUCCEED(); +} + + + + +int main(int argc, char** argv) +{ + testing::InitGoogleTest(&argc, argv); + ros::init(argc, argv, "test_kdl_parser"); + g_argc = argc; + g_argv = argv; + return RUN_ALL_TESTS(); +} diff --git a/kdl_parser/test/test_kdl_parser.launch b/kdl_parser/test/test_kdl_parser.launch new file mode 100644 index 0000000..b97a9ba --- /dev/null +++ b/kdl_parser/test/test_kdl_parser.launch @@ -0,0 +1,6 @@ + + + diff --git a/resource_retriever/CMakeLists.txt b/resource_retriever/CMakeLists.txt new file mode 100644 index 0000000..86b5735 --- /dev/null +++ b/resource_retriever/CMakeLists.txt @@ -0,0 +1,35 @@ +cmake_minimum_required(VERSION 2.4.6) +include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake) + +# Set the build type. Options are: +# Coverage : w/ debug symbols, w/o optimization, w/ code-coverage +# Debug : w/ debug symbols, w/o optimization +# Release : w/o debug symbols, w/ optimization +# RelWithDebInfo : w/ debug symbols, w/ optimization +# MinSizeRel : w/o debug symbols, w/ optimization, stripped binaries +#set(ROS_BUILD_TYPE RelWithDebInfo) + +rosbuild_init() + +#set the default path for built executables to the "bin" directory +set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) +#set the default path for built libraries to the "lib" directory +set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) + +#uncomment if you have defined messages +#rosbuild_genmsg() +#uncomment if you have defined services +#rosbuild_gensrv() + +include(FindCURL) + +if(NOT CURL_FOUND) +message("CURL not found! Aborting...") +fail() +endif(NOT CURL_FOUND) + +include_directories(${CURL_INCLUDE_DIRS}) +rosbuild_add_library(${PROJECT_NAME} src/retriever.cpp) +target_link_libraries(${PROJECT_NAME} ${CURL_LIBRARIES}) + +add_subdirectory(test EXCLUDE_FROM_ALL) diff --git a/resource_retriever/Makefile b/resource_retriever/Makefile new file mode 100644 index 0000000..b75b928 --- /dev/null +++ b/resource_retriever/Makefile @@ -0,0 +1 @@ +include $(shell rospack find mk)/cmake.mk \ No newline at end of file diff --git a/resource_retriever/include/resource_retriever/retriever.h b/resource_retriever/include/resource_retriever/retriever.h new file mode 100644 index 0000000..a328057 --- /dev/null +++ b/resource_retriever/include/resource_retriever/retriever.h @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2009, Willow Garage, Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the names of Stanford University or Willow Garage, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef RESOURCE_RETRIEVER_RETRIEVER_H +#define RESOURCE_RETRIEVER_RETRIEVER_H + +#include +#include +#include + +typedef void CURL; + +namespace resource_retriever +{ + +class Exception : public std::runtime_error +{ +public: + Exception(const std::string& file, const std::string& error_msg) + : std::runtime_error("Error retrieving file [" + file + "]: " + error_msg) + {} +}; + +/** + * \brief A combination of a pointer to data in memory along with the data's size. + */ +struct MemoryResource +{ + MemoryResource() + : size(0) + {} + + boost::shared_array data; + uint32_t size; +}; + +/** + * \brief Retrieves files from from a url. Caches a CURL handle so multiple accesses to a single url + * will keep connections open. + */ +class Retriever +{ +public: + Retriever(); + ~Retriever(); + + /** + * \brief Get a file and store it in memory + * \param url The url to retrieve. package://package/file will be turned into the correct file:// invocation + * \return The file, loaded into memory + * \throws resource_retriever::Exception if anything goes wrong. + */ + MemoryResource get(const std::string& url); + +private: + CURL* curl_handle_; +}; + +} // namespace resource_retriever + +#endif // RESOURCE_RETRIEVER_RETRIEVER_H diff --git a/resource_retriever/mainpage.dox b/resource_retriever/mainpage.dox new file mode 100644 index 0000000..a06a758 --- /dev/null +++ b/resource_retriever/mainpage.dox @@ -0,0 +1,14 @@ +/** +\mainpage +\htmlinclude manifest.html + +\b resource_retriever is a package used for downloading files from a url. It also provides special handling of the package:// prefix, allowing things to be referenced +by path relative to a package. + + +\section codeapi Code API + + - resource_retriever::Retriever -- Use this class to download files. + + +*/ \ No newline at end of file diff --git a/resource_retriever/manifest.xml b/resource_retriever/manifest.xml new file mode 100644 index 0000000..80058d9 --- /dev/null +++ b/resource_retriever/manifest.xml @@ -0,0 +1,21 @@ + + + + A package for retrieving resources used in a urdf. Uses libcurl to support url-format files, such as http://, ftp://, etc. Translates package:// to a local file:// + + + Josh Faust (jfaust@willowgarage.com) + BSD + + http://pr.willowgarage.com/wiki/resource_retriever + + + + + + + + + + + diff --git a/resource_retriever/src/retriever.cpp b/resource_retriever/src/retriever.cpp new file mode 100644 index 0000000..b09a981 --- /dev/null +++ b/resource_retriever/src/retriever.cpp @@ -0,0 +1,147 @@ +/* + * Copyright (C) 2009, Willow Garage, Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the names of Stanford University or Willow Garage, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "resource_retriever/retriever.h" + +#include + +#include +#include + +#include + +namespace resource_retriever +{ + +class CURLStaticInit +{ +public: + CURLStaticInit() + : initialized_(false) + { + CURLcode ret = curl_global_init(CURL_GLOBAL_ALL); + if (ret != 0) + { + ROS_ERROR("Error initializing libcurl! retcode = %d", ret); + } + else + { + initialized_ = true; + } + } + + ~CURLStaticInit() + { + if (initialized_) + { + curl_global_cleanup(); + } + } + + bool initialized_; +}; +static CURLStaticInit g_curl_init; + +Retriever::Retriever() +{ + curl_handle_ = curl_easy_init(); +} + +Retriever::~Retriever() +{ + if (curl_handle_) + { + curl_easy_cleanup(curl_handle_); + } +} + +struct MemoryBuffer +{ + std::vector v; +}; + +size_t curlWriteFunc(void* buffer, size_t size, size_t nmemb, void* userp) +{ + MemoryBuffer* membuf = (MemoryBuffer*)userp; + + size_t prev_size = membuf->v.size(); + membuf->v.resize(prev_size + size * nmemb); + memcpy(&membuf->v[prev_size], buffer, size * nmemb); + + return size * nmemb; +} + +MemoryResource Retriever::get(const std::string& url) +{ + std::string mod_url = url; + if (url.find("package://") == 0) + { + mod_url.erase(0, strlen("package://")); + size_t pos = mod_url.find("/"); + if (pos == std::string::npos) + { + throw Exception(url, "Could not parse package:// format into file:// format"); + } + + std::string package = mod_url.substr(0, pos); + mod_url.erase(0, pos); + std::string package_path = ros::package::getPath(package); + + if (package_path.empty()) + { + throw Exception(url, "Package [" + package + "] does not exist"); + } + + mod_url = "file://" + package_path + mod_url; + } + + curl_easy_setopt(curl_handle_, CURLOPT_URL, mod_url.c_str()); + curl_easy_setopt(curl_handle_, CURLOPT_WRITEFUNCTION, curlWriteFunc); + + char error_buffer[CURL_ERROR_SIZE]; + curl_easy_setopt(curl_handle_, CURLOPT_ERRORBUFFER , error_buffer); + + MemoryResource res; + MemoryBuffer buf; + curl_easy_setopt(curl_handle_, CURLOPT_WRITEDATA, &buf); + + CURLcode ret = curl_easy_perform(curl_handle_); + if (ret != 0) + { + throw Exception(mod_url, error_buffer); + } + else if (!buf.v.empty()) + { + res.size = buf.v.size(); + res.data.reset(new uint8_t[res.size]); + memcpy(res.data.get(), &buf.v[0], res.size); + } + + return res; +} + +} diff --git a/resource_retriever/test/CMakeLists.txt b/resource_retriever/test/CMakeLists.txt new file mode 100644 index 0000000..7624c4c --- /dev/null +++ b/resource_retriever/test/CMakeLists.txt @@ -0,0 +1,4 @@ +set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}) + +rospack_add_gtest(test/utest test.cpp) +target_link_libraries(test/utest ${PROJECT_NAME}) diff --git a/resource_retriever/test/test.cpp b/resource_retriever/test/test.cpp new file mode 100644 index 0000000..b29f40e --- /dev/null +++ b/resource_retriever/test/test.cpp @@ -0,0 +1,140 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +#include + +#include +#include +#include + +using namespace resource_retriever; + +TEST(Retriever, getByPackage) +{ + try + { + Retriever r; + MemoryResource res = r.get("package://"ROS_PACKAGE_NAME"/test/test.txt"); + + ASSERT_EQ(res.size, 1); + ASSERT_EQ(res.data[0], 'A'); + } + catch (Exception& e) + { + FAIL(); + } +} + +TEST(Retriever, largeFile) +{ + try + { + std::string path = ros::package::getPath(ROS_PACKAGE_NAME) + "/test/large_file.dat"; + + FILE* f = fopen(path.c_str(), "w"); + + ASSERT_TRUE(f); + + for (int i = 0; i < 1024*1024*50; ++i) + { + fprintf(f, "A"); + } + fclose(f); + + Retriever r; + MemoryResource res = r.get("package://"ROS_PACKAGE_NAME"/test/large_file.dat"); + + ASSERT_EQ(res.size, 1024*1024*50); + } + catch (Exception& e) + { + FAIL(); + } +} + +TEST(Retriever, http) +{ + try + { + Retriever r; + MemoryResource res = r.get("http://pr.willowgarage.com/downloads/svnmerge.py"); + + ASSERT_GT(res.size, 0); + } + catch (Exception& e) + { + FAIL(); + } +} + +TEST(Retriever, invalidFiles) +{ + Retriever r; + + try + { + r.get("file://fail"); + FAIL(); + } + catch (Exception& e) + { + ROS_INFO("%s", e.what()); + } + + try + { + r.get("package://roscpp"); + FAIL(); + } + catch (Exception& e) + { + ROS_INFO("%s", e.what()); + } + + try + { + r.get("package://invalid_package_blah/test.xml"); + FAIL(); + } + catch (Exception& e) + { + ROS_INFO("%s", e.what()); + } +} + +int main(int argc, char **argv){ + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} + diff --git a/resource_retriever/test/test.txt b/resource_retriever/test/test.txt new file mode 100644 index 0000000..8c7e5a6 --- /dev/null +++ b/resource_retriever/test/test.txt @@ -0,0 +1 @@ +A \ No newline at end of file diff --git a/robot_state_publisher/CMakeLists.txt b/robot_state_publisher/CMakeLists.txt new file mode 100644 index 0000000..71711b7 --- /dev/null +++ b/robot_state_publisher/CMakeLists.txt @@ -0,0 +1,38 @@ +cmake_minimum_required(VERSION 2.4.6) +include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake) + +# Set the build type. Options are: +# Coverage : w/ debug symbols, w/o optimization, w/ code-coverage +# Debug : w/ debug symbols, w/o optimization +# Release : w/o debug symbols, w/ optimization +# RelWithDebInfo : w/ debug symbols, w/ optimization +# MinSizeRel : w/o debug symbols, w/ optimization, stripped binaries +#set(ROS_BUILD_TYPE RelWithDebInfo) + +rosbuild_init() +rosbuild_add_boost_directories() + +#set the default path for built executables to the "bin" directory +set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) +#set the default path for built libraries to the "lib" directory +set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) + +#uncomment if you have defined messages +#genmsg() +#uncomment if you have defined services +#gensrv() + +rosbuild_add_library(${PROJECT_NAME} src/joint_state_listener.cpp src/robot_state_publisher.cpp src/treefksolverposfull_recursive.cpp) + +rosbuild_add_executable(state_publisher src/state_publisher.cpp ) +target_link_libraries(state_publisher ${PROJECT_NAME}) + +rosbuild_add_executable(test_publisher test/test_publisher.cpp ) +target_link_libraries(test_publisher ${PROJECT_NAME}) +rosbuild_add_gtest_build_flags(test_publisher) +rosbuild_declare_test(test_publisher) + +rosbuild_add_rostest(${CMAKE_CURRENT_SOURCE_DIR}/test/test_publisher.launch) + +# Download needed data file +rosbuild_download_test_data(http://pr.willowgarage.com/data/robot_state_publisher/joint_states.bag test/joint_states.bag) diff --git a/robot_state_publisher/Makefile b/robot_state_publisher/Makefile new file mode 100644 index 0000000..b75b928 --- /dev/null +++ b/robot_state_publisher/Makefile @@ -0,0 +1 @@ +include $(shell rospack find mk)/cmake.mk \ No newline at end of file diff --git a/robot_state_publisher/include/robot_state_publisher/joint_state_listener.h b/robot_state_publisher/include/robot_state_publisher/joint_state_listener.h new file mode 100644 index 0000000..ef2f4fe --- /dev/null +++ b/robot_state_publisher/include/robot_state_publisher/joint_state_listener.h @@ -0,0 +1,69 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Wim Meeussen */ + +#ifndef JOINT_STATE_LISTENER_H +#define JOINT_STATE_LISTENER_H + +#include +#include +#include +#include "robot_state_publisher/robot_state_publisher.h" + +using namespace std; +using namespace ros; +using namespace KDL; + +typedef boost::shared_ptr JointStateConstPtr; + +namespace robot_state_publisher{ + +class JointStateListener{ +public: + JointStateListener(const KDL::Tree& tree); + ~JointStateListener(); + +private: + void callbackJointState(const JointStateConstPtr& state); + + NodeHandle n_; + Rate publish_rate_; + robot_state_publisher::RobotStatePublisher state_publisher_; + Subscriber joint_state_sub_; +}; +} + + +#endif diff --git a/robot_state_publisher/include/robot_state_publisher/robot_state_publisher.h b/robot_state_publisher/include/robot_state_publisher/robot_state_publisher.h new file mode 100644 index 0000000..781082c --- /dev/null +++ b/robot_state_publisher/include/robot_state_publisher/robot_state_publisher.h @@ -0,0 +1,76 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Wim Meeussen */ + +#ifndef ROBOT_STATE_PUBLISHER_H +#define ROBOT_STATE_PUBLISHER_H + +#include +#include +#include +#include +#include "robot_state_publisher/treefksolverposfull_recursive.hpp" + +namespace robot_state_publisher{ + +class RobotStatePublisher +{ +public: + RobotStatePublisher(const KDL::Tree& tree); + ~RobotStatePublisher(){}; + + bool publishTransforms(const std::map& joint_positions, const ros::Time& time); + +private: + ros::NodeHandle n_; + ros::Publisher tf_publisher_; + KDL::Tree tree_; + boost::scoped_ptr solver_; + std::string root_; + std::string tf_prefix_; + tf::tfMessage tf_msg_; + + class empty_tree_exception: public std::exception{ + virtual const char* what() const throw(){ + return "Tree is empty";} + } empty_tree_ex; + +}; + + + +} + +#endif diff --git a/robot_state_publisher/include/robot_state_publisher/treefksolverposfull_recursive.hpp b/robot_state_publisher/include/robot_state_publisher/treefksolverposfull_recursive.hpp new file mode 100644 index 0000000..4c3e9ea --- /dev/null +++ b/robot_state_publisher/include/robot_state_publisher/treefksolverposfull_recursive.hpp @@ -0,0 +1,48 @@ +// Copyright (C) 2009 Willow Garage Inc + +// Version: 1.0 +// Author: Wim Meeussen +// Maintainer: Ruben Smits +// URL: http://www.orocos.org/kdl + +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +#ifndef KDLTREEFKSOLVERPOSFULL_RECURSIVE_HPP +#define KDLTREEFKSOLVERPOSFULL_RECURSIVE_HPP + +#include + +namespace KDL { + +class TreeFkSolverPosFull_recursive + +{ +public: + TreeFkSolverPosFull_recursive(const Tree& _tree); + ~TreeFkSolverPosFull_recursive(); + + int JntToCart(const std::map& q_in, std::map& p_out); + +private: + void addFrameToMap(const std::map& q_in, std::map& p_out, + const Frame& previous_frame, const SegmentMap::const_iterator this_segment); + + Tree tree; + +}; +} + +#endif diff --git a/robot_state_publisher/manifest.xml b/robot_state_publisher/manifest.xml new file mode 100644 index 0000000..8da7560 --- /dev/null +++ b/robot_state_publisher/manifest.xml @@ -0,0 +1,27 @@ + + + + This package allows you to publish the state of a robot to the transform library topic. Once the state + gets published, it is available to all components in the system using the transform library. + The package takes the joint angles of the robot as input and publishes the 3D poses + of the robot links, using a kinematic tree model of the robot. The package can both be used + as a library and as a ROS node. + + + Wim Meeussen meeussen@willowgarage.com + BSD + + http://pr.willowgarage.com/wiki/robot_state_publisher + + + + + + + + + + + + + diff --git a/robot_state_publisher/src/joint_state_listener.cpp b/robot_state_publisher/src/joint_state_listener.cpp new file mode 100644 index 0000000..3ef26a1 --- /dev/null +++ b/robot_state_publisher/src/joint_state_listener.cpp @@ -0,0 +1,86 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Wim Meeussen */ + +#include +#include +#include "robot_state_publisher/robot_state_publisher.h" +#include "robot_state_publisher/joint_state_listener.h" + +using namespace std; +using namespace ros; +using namespace KDL; +using namespace robot_state_publisher; + + +JointStateListener::JointStateListener(const KDL::Tree& tree) + : publish_rate_(0.0), state_publisher_(tree) +{ + // set publish frequency + double publish_freq; + n_.param("~publish_frequency", publish_freq, 50.0); + publish_rate_ = Rate(publish_freq); + + // subscribe to mechanism state + string joint_state_topic; + n_.param("~joint_state_topic", joint_state_topic, string("joint_states")); + joint_state_sub_ = n_.subscribe(joint_state_topic, 1, &JointStateListener::callbackJointState, this);; +}; + + +JointStateListener::~JointStateListener() +{}; + + +void JointStateListener::callbackJointState(const JointStateConstPtr& state) +{ + if (state->get_name_size() == 0){ + ROS_ERROR("Robot state publisher received an empty joint state vector"); + return; + } + + if (state->get_name_size() != state->get_position_size()){ + ROS_ERROR("Robot state publisher received an invalid joint state vector"); + return; + } + + // get joint positions from state message + map joint_positions; + for (unsigned int i=0; iname.size(); i++) + joint_positions.insert(make_pair(state->name[i], state->position[i])); + state_publisher_.publishTransforms(joint_positions, state->header.stamp); + publish_rate_.sleep(); +} + diff --git a/robot_state_publisher/src/robot_state_publisher.cpp b/robot_state_publisher/src/robot_state_publisher.cpp new file mode 100644 index 0000000..bc996a1 --- /dev/null +++ b/robot_state_publisher/src/robot_state_publisher.cpp @@ -0,0 +1,106 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Wim Meeussen */ + +#include "robot_state_publisher/robot_state_publisher.h" +#include +#include + +using namespace std; +using namespace ros; +using namespace KDL; + + + +namespace robot_state_publisher{ + +RobotStatePublisher::RobotStatePublisher(const Tree& tree) + :tree_(tree) +{ + // get tf prefix + n_.param("~tf_prefix", tf_prefix_, string()); + + // build tree solver + solver_.reset(new TreeFkSolverPosFull_recursive(tree_)); + + // advertise tf message + tf_publisher_ = n_.advertise("/tf_message", 5); + tf_msg_.transforms.resize(tree.getNrOfSegments()-1); + + // get the 'real' root segment of the tree, which is the first child of "root" + SegmentMap::const_iterator root = tree.getRootSegment(); + if (root->second.children.empty()) + throw empty_tree_ex; + + root_ = (*root->second.children.begin())->first; +} + + + +bool RobotStatePublisher::publishTransforms(const map& joint_positions, const Time& time) +{ + // calculate transforms form root to every segment in tree + map link_poses; + solver_->JntToCart(joint_positions, link_poses); + + // publish the transforms to tf, converting the transforms from "root" to the 'real' root + geometry_msgs::TransformStamped trans; + map::const_iterator root = link_poses.find(root_); + if (root == link_poses.end()){ + ROS_ERROR("Did not find root of tree"); + return false; + } + + // remove root from published poses + Frame offset = root->second.Inverse(); + unsigned int i = 0; + // send transforms to tf + for (map::const_iterator f=link_poses.begin(); f!=link_poses.end(); f++){ + if (f != root){ + Frame frame = offset * f->second; + tf::Transform tf_frame; + tf::TransformKDLToTF(frame, tf_frame); + trans.header.stamp = time; + trans.header.frame_id = tf::remap(tf_prefix_, root->first); + trans.child_frame_id = tf::remap(tf_prefix_, f->first); + tf::transformTFToMsg(tf_frame, trans.transform); + tf_msg_.transforms[i++] = trans; + } + } + tf_publisher_.publish(tf_msg_); + + return true; +} +} diff --git a/robot_state_publisher/src/state_publisher.cpp b/robot_state_publisher/src/state_publisher.cpp new file mode 100644 index 0000000..6fb4143 --- /dev/null +++ b/robot_state_publisher/src/state_publisher.cpp @@ -0,0 +1,77 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Wim Meeussen */ + +#include +#include +#include +#include +#include "robot_state_publisher/joint_state_listener.h" + +using namespace std; +using namespace ros; +using namespace KDL; +using namespace robot_state_publisher; + + + +// ---------------------------------- +// ----- MAIN ----------------------- +// ---------------------------------- +int main(int argc, char** argv) +{ + // Initialize ros + ros::init(argc, argv, "robot_state_publisher"); + NodeHandle node; + + // gets the location of the robot description on the parameter server + string param_name, full_param_name; + node.param("~/robot_desc_param", param_name, string("robot_description")); + node.searchParam(param_name,full_param_name); + string robot_desc; + + // constructs a kdl tree from the robot model + node.param(full_param_name, robot_desc, string()); + Tree tree; + if (!kdl_parser::treeFromString(robot_desc, tree)){ + ROS_ERROR("Failed to extract kdl tree from xml robot description"); + return -1; + } + + JointStateListener state_publisher(tree); + + ros::spin(); + return 0; +} diff --git a/robot_state_publisher/src/treefksolverposfull_recursive.cpp b/robot_state_publisher/src/treefksolverposfull_recursive.cpp new file mode 100644 index 0000000..3381a56 --- /dev/null +++ b/robot_state_publisher/src/treefksolverposfull_recursive.cpp @@ -0,0 +1,76 @@ +// Copyright (C) 2009 Willow Garage Inc + +// Version: 1.0 +// Author: Wim Meeussen +// Maintainer: Ruben Smits +// URL: http://www.orocos.org/kdl + +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. + +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +#include "robot_state_publisher/treefksolverposfull_recursive.hpp" +#include + +using namespace std; + +namespace KDL { + +TreeFkSolverPosFull_recursive::TreeFkSolverPosFull_recursive(const Tree& _tree): + tree(_tree) +{ +} + +TreeFkSolverPosFull_recursive::~TreeFkSolverPosFull_recursive() +{ +} + +int TreeFkSolverPosFull_recursive::JntToCart(const map& q_in, map& p_out) +{ + // clear output + p_out.clear(); + + addFrameToMap(q_in, p_out, Frame::Identity(), tree.getRootSegment()); + + return 0; +} + + + +void TreeFkSolverPosFull_recursive::addFrameToMap(const map& q_in, map& p_out, + const Frame& previous_frame, const SegmentMap::const_iterator this_segment) +{ + // get pose of this segment + Frame this_frame = previous_frame; + double jnt_p = 0; + if (this_segment->second.segment.getJoint().getType() != Joint::None){ + map::const_iterator jnt_pos = q_in.find(this_segment->second.segment.getJoint().getName()); + if (jnt_pos == q_in.end()){ + printf("Could not find value for joint %s\n", this_segment->first.c_str()); + return; + } + jnt_p = jnt_pos->second; + } + this_frame = this_frame * this_segment->second.segment.pose(jnt_p); + if (this_segment->first != tree.getRootSegment()->first) + p_out.insert(make_pair(this_segment->first, this_frame)); + + // get poses of child segments + for (vector::const_iterator child=this_segment->second.children.begin(); child !=this_segment->second.children.end(); child++) + addFrameToMap(q_in, p_out, this_frame, *child); + +} + + +} diff --git a/robot_state_publisher/test/pr2.urdf b/robot_state_publisher/test/pr2.urdf new file mode 100644 index 0000000..c19ab6c --- /dev/null +++ b/robot_state_publisher/test/pr2.urdf @@ -0,0 +1,3117 @@ + + + + + + + + + + + + + + + + + + + true + 1000.0 + + + + + + true + 1.0 + 5 + -10.0 + 1.0 + 10.0 + 1200000.0 + diagnostic + battery_state + self_test + + + + + true + 1000.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + fl_caster_l_wheel_link_geom + 100.0 + + true + 100.0 + fl_caster_l_wheel_bumper + + + + + + + + + + + + 75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + fl_caster_r_wheel_link_geom + 100.0 + + true + 100.0 + fl_caster_r_wheel_bumper + + + + + + + + + + + + -75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + fr_caster_l_wheel_link_geom + 100.0 + + true + 100.0 + fr_caster_l_wheel_bumper + + + + + + + + + + + + 75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + fr_caster_r_wheel_link_geom + 100.0 + + true + 100.0 + fr_caster_r_wheel_bumper + + + + + + + + + + + + -75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bl_caster_l_wheel_link_geom + 100.0 + + true + 100.0 + bl_caster_l_wheel_bumper + + + + + + + + + + + + 75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bl_caster_r_wheel_link_geom + 100.0 + + true + 100.0 + bl_caster_r_wheel_bumper + + + + + + + + + + + + -75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + br_caster_l_wheel_link_geom + 100.0 + + true + 100.0 + br_caster_l_wheel_bumper + + + + + + + + + + + + 75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + br_caster_r_wheel_link_geom + 100.0 + + true + 100.0 + br_caster_r_wheel_bumper + + + + + + + + + + + + -75.05 + + + base_link_geom + 100.0 + + true + 100.0 + base_bumper + + + + + + + + + + + true + 100.0 + base_link + base_pose_ground_truth + 0.01 + map + 25.7 25.7 0 + 0 0 0 + + + + true + 100.0 + plug_magnet + plug_magnet_pose_ground_truth + 0.01 + map + 0 0 0 + 0 0 0 + + + + + 640 + 640 + 1 + 0.0 0.0 0.0 + false + + -100 + 100 + + 0.05 + 10.0 + 0.01 + 20.0 + + 0.005 + true + 20.0 + base_scan + base_laser + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -52143.33 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + B8G8R8 + 2448 2050 + 45 + 0.1 + 100 + 20.0 + + true + 20.0 + /prosilica/cam_info + /prosilica/image + /prosilica/image_rect + /prosilica/cam_info_service + /prosilica/poll + hight_def_optical_frame + 1224.5 + 1224.5 + 1025.5 + 2955 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 90 + 0.1 + 100 + 20.0 + + true + 20.0 + wide_stereo/left_image + wide_stereo_l_stereo_camera_frame + + + + + + + 640 480 + L8 + 90 + 0.1 + 100 + 20.0 + + true + 20.0 + wide_stereo/right_image + wide_stereo_r_stereo_camera_frame + + + + + + + true + 20.0 + wide_stereo_l_sensor + wide_stereo_r_sensor + wide_stereo/raw_stereo + wide_stereo_optical_frame + 320 + 320 + 240 + 320 + 0 + 0 + 0 + 0 + 0 + -0.09 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 90 + 0.1 + 100 + 20.0 + + true + 20.0 + narrow_stereo/left_image + narrow_stereo_l_stereo_camera_frame + + + + + + + 640 480 + L8 + 90 + 0.1 + 100 + 20.0 + + true + 20.0 + narrow_stereo/right_image + narrow_stereo_r_stereo_camera_frame + + + + + + + true + 20.0 + narrow_stereo_l_sensor + narrow_stereo_r_sensor + narrow_stereo/raw_stereo + narrow_stereo_optical_frame + 320 + 320 + 240 + 320 + 0 + 0 + 0 + 0 + 0 + -0.09 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 + 640 + 1 + + 0.0 0.0 0.0 + false + + -80 + 80 + + 0.05 + 10.0 + 0.01 + 20.0 + + 0.005 + true + 20.0 + tilt_scan + laser_tilt_link + + + + + + + 6.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + r_shoulder_pan_link_geom + 100.0 + + true + 100.0 + r_shoulder_pan_bumper + + + + + true + + + + + + r_shoulder_lift_link_geom + 100.0 + + true + 100.0 + r_r_shoulder_lift_bumper + + + + true + + + + + + + true + + + + + + + r_upper_arm_link_geom + 100.0 + + true + 100.0 + r_upper_arm_bumper + + + + true + + + + r_elbow_flex_link_geom + 100.0 + + true + 100.0 + r_elbow_flex_bumper + + + + + true + + + + + + true + + + + true + + r_forearm_link_geom + 100.0 + + true + 100.0 + r_forearm_bumper + + + + + + true + + r_wrist_flex_link_geom + 100.0 + + true + 100.0 + r_wrist_flex_bumper + + + + + + + + + true + + r_wrist_roll_link_geom + 100.0 + + true + 100.0 + r_wrist_roll_bumper + + + + + + + + + + 63.16 + + + + 61.89 + + + + 32.65 + + + + -36.17 + + + + 90.5142857143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + r_gripper_l_finger_link_geom + 100.0 + + true + 100.0 + r_gripper_l_finger_bumper + + + + + + + + + + + + + + + + true + + r_gripper_r_finger_link_geom + 100.0 + + true + 100.0 + r_gripper_r_finger_bumper + + + + + + + + + + + + + + + true + + + r_gripper_l_finger_tip_link_geom + 100.0 + + true + 100.0 + r_gripper_l_finger_tip_bumper + + + + + + + + + + + + + + + true + + + r_gripper_r_finger_tip_link_geom + 100.0 + + true + 100.0 + r_gripper_r_finger_tip_bumper + + + + + + + + + + + true + 100.0 + r_gripper_l_finger_link + r_gripper_l_finger_pose_ground_truth + 0.0 + map + + + + true + 100.0 + r_gripper_l_finger_link + r_gripper_l_finger_force_ground_truth + r_gripper_l_finger_link + + + + + + + + + + + + + true + + r_gripper_palm_link_geom + 100.0 + + true + 100.0 + r_gripper_palm_bumper + + + + + + true + + + + r_gripper_l_finger_tip_link + r_gripper_float_link + r_gripper_l_finger_tip_link + 0 1 0 + 0 0 0 + + + r_gripper_r_finger_tip_link + r_gripper_float_link + r_gripper_r_finger_tip_link + 0 1 0 + 0 0 0 + + + + + true + 100.0 + r_gripper_palm_link + r_gripper_palm_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + map + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + l_shoulder_pan_link_geom + 100.0 + + true + 100.0 + l_shoulder_pan_bumper + + + + + true + + + + + + l_shoulder_lift_link_geom + 100.0 + + true + 100.0 + l_r_shoulder_lift_bumper + + + + true + + + + + + + true + + + + + + + l_upper_arm_link_geom + 100.0 + + true + 100.0 + l_upper_arm_bumper + + + + true + + + + l_elbow_flex_link_geom + 100.0 + + true + 100.0 + l_elbow_flex_bumper + + + + + true + + + + + + true + + + + true + + l_forearm_link_geom + 100.0 + + true + 100.0 + l_forearm_bumper + + + + + + true + + l_wrist_flex_link_geom + 100.0 + + true + 100.0 + l_wrist_flex_bumper + + + + + + + + + true + + l_wrist_roll_link_geom + 100.0 + + true + 100.0 + l_wrist_roll_bumper + + + + + + + + + + 63.16 + + + + 61.89 + + + + 32.65 + + + + -36.17 + + + + 90.5142857143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + l_gripper_l_finger_link_geom + 100.0 + + true + 100.0 + l_gripper_l_finger_bumper + + + + + + + + + + + + + + + + true + + l_gripper_r_finger_link_geom + 100.0 + + true + 100.0 + l_gripper_r_finger_bumper + + + + + + + + + + + + + + + true + + + l_gripper_l_finger_tip_link_geom + 100.0 + + true + 100.0 + l_gripper_l_finger_tip_bumper + + + + + + + + + + + + + + + true + + + l_gripper_r_finger_tip_link_geom + 100.0 + + true + 100.0 + l_gripper_r_finger_tip_bumper + + + + + + + + + + + true + 100.0 + l_gripper_l_finger_link + l_gripper_l_finger_pose_ground_truth + 0.0 + map + + + + true + 100.0 + l_gripper_l_finger_link + l_gripper_l_finger_force_ground_truth + l_gripper_l_finger_link + + + + + + + + + + + + + true + + l_gripper_palm_link_geom + 100.0 + + true + 100.0 + l_gripper_palm_bumper + + + + + + true + + + + l_gripper_l_finger_tip_link + l_gripper_float_link + l_gripper_l_finger_tip_link + 0 1 0 + 0 0 0 + + + l_gripper_r_finger_tip_link + l_gripper_float_link + l_gripper_r_finger_tip_link + 0 1 0 + 0 0 0 + + + + + true + 100.0 + l_gripper_palm_link + l_gripper_palm_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + map + + + + true + + + + + + + + + + + + + + + diff --git a/robot_state_publisher/test/test_publisher.cpp b/robot_state_publisher/test/test_publisher.cpp new file mode 100644 index 0000000..0a2d122 --- /dev/null +++ b/robot_state_publisher/test/test_publisher.cpp @@ -0,0 +1,136 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Wim Meeussen */ + +#include +#include +#include +#include +#include +#include +#include +#include "robot_state_publisher/joint_state_listener.h" + + +using namespace ros; +using namespace tf; +using namespace robot_state_publisher; + + +int g_argc; +char** g_argv; + +#define EPS 0.01 + +class TestPublisher : public testing::Test +{ +public: + JointStateListener* publisher; + +protected: + /// constructor + TestPublisher() + { + // constructs a robot model from the xml file + urdf::Model robot_model; + if (g_argc == 2){ + if (!robot_model.initFile(g_argv[1])) + ROS_ERROR("Failed to construct robot model from xml string"); + } + else + ROS_ERROR("No robot model as argument given"); + + // constructs a kdl tree from the robot model + Tree tree; + if (!kdl_parser::treeFromRobotModel(robot_model, tree)) + ROS_ERROR("Failed to extract kdl tree from robot model"); + + publisher = new JointStateListener(tree); + } + + /// Destructor + ~TestPublisher() + { + delete publisher; + } +}; + + + + + +TEST_F(TestPublisher, test) +{ + ROS_INFO("Creating tf listener"); + TransformListener tf; + + ROS_INFO("Waiting for bag to complete"); + Duration(15.0).sleep(); + + ASSERT_TRUE(tf.canTransform("base_link", "torso_lift_link", Time())); + ASSERT_TRUE(tf.canTransform("base_link", "r_gripper_palm_link", Time())); + ASSERT_TRUE(tf.canTransform("base_link", "r_gripper_palm_link", Time())); + ASSERT_TRUE(tf.canTransform("l_gripper_palm_link", "r_gripper_palm_link", Time())); + ASSERT_TRUE(tf.canTransform("l_gripper_palm_link", "fl_caster_r_wheel_link", Time())); + ASSERT_FALSE(tf.canTransform("base_link", "wim_link", Time())); + + tf::Stamped t; + tf.lookupTransform("base_link", "r_gripper_palm_link",Time(), t ); + EXPECT_NEAR(t.getOrigin().x(), 0.769198, EPS); + EXPECT_NEAR(t.getOrigin().y(), -0.188800, EPS); + EXPECT_NEAR(t.getOrigin().z(), 0.764914, EPS); + + tf.lookupTransform("l_gripper_palm_link", "r_gripper_palm_link",Time(), t ); + EXPECT_NEAR(t.getOrigin().x(), 0.000384222, EPS); + EXPECT_NEAR(t.getOrigin().y(), -0.376021, EPS); + EXPECT_NEAR(t.getOrigin().z(), -1.0858e-05, EPS); + + SUCCEED(); +} + + + + +int main(int argc, char** argv) +{ + testing::InitGoogleTest(&argc, argv); + ros::init(argc, argv, "test_robot_state_publisher"); + ros::NodeHandle node; + boost::thread ros_thread(boost::bind(&ros::spin)); + + g_argc = argc; + g_argv = argv; + return RUN_ALL_TESTS(); +} diff --git a/robot_state_publisher/test/test_publisher.launch b/robot_state_publisher/test/test_publisher.launch new file mode 100644 index 0000000..2041edc --- /dev/null +++ b/robot_state_publisher/test/test_publisher.launch @@ -0,0 +1,5 @@ + + + + + diff --git a/stack.xml b/stack.xml new file mode 100644 index 0000000..8aa3a36 --- /dev/null +++ b/stack.xml @@ -0,0 +1,15 @@ + + + These are robot_model-related packages. + + John Hsu johnhsu@willowgarage.com + BSD + + http://ros.org/wiki/robot_model + + + + + + + diff --git a/urdf/CMakeLists.txt b/urdf/CMakeLists.txt new file mode 100644 index 0000000..fa9ab91 --- /dev/null +++ b/urdf/CMakeLists.txt @@ -0,0 +1,36 @@ +cmake_minimum_required(VERSION 2.4.6) +include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake) + +# Set the build type. Options are: +# Coverage : w/ debug symbols, w/o optimization, w/ code-coverage +# Debug : w/ debug symbols, w/o optimization +# Release : w/o debug symbols, w/ optimization +# RelWithDebInfo : w/ debug symbols, w/ optimization +# MinSizeRel : w/o debug symbols, w/ optimization, stripped binaries +set(ROS_BUILD_TYPE Debug) + +rosbuild_init() + +#set the default path for built executables to the "bin" directory +set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) +#set the default path for built libraries to the "lib" directory +set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) + +#uncomment if you have defined messages +#genmsg() + +rosbuild_gensrv() + +#common commands for building c++ executables and libraries +rosbuild_add_library(${PROJECT_NAME} src/link.cpp src/joint.cpp src/model.cpp) +#target_link_libraries(${PROJECT_NAME} another_library) +rosbuild_add_boost_directories() +#rosbuild_link_boost(${PROJECT_NAME} thread) + +rosbuild_add_executable(parse_test test/parse_test.cpp) +target_link_libraries(parse_test ${PROJECT_NAME}) + +rosbuild_add_executable(test_parser EXCLUDE_FROM_ALL test/test_robot_model_parser.cpp) +rosbuild_add_gtest_build_flags(test_parser) +target_link_libraries(test_parser ${PROJECT_NAME}) +rosbuild_add_rostest(${PROJECT_SOURCE_DIR}/test/test_robot_model_parser.launch) diff --git a/urdf/Makefile b/urdf/Makefile new file mode 100644 index 0000000..b75b928 --- /dev/null +++ b/urdf/Makefile @@ -0,0 +1 @@ +include $(shell rospack find mk)/cmake.mk \ No newline at end of file diff --git a/urdf/include/urdf/color.h b/urdf/include/urdf/color.h new file mode 100644 index 0000000..e3a7b3e --- /dev/null +++ b/urdf/include/urdf/color.h @@ -0,0 +1,96 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Josh Faust */ + +#ifndef URDF_COLOR_H +#define URDF_COLOR_H + +#include +#include +#include +#include +#include + +namespace urdf +{ + +class Color +{ +public: + Color() {this->clear();}; + float r; + float g; + float b; + float a; + + void clear() + { + r = g = b = 0.0f; + a = 1.0f; + } + bool init(const std::string &vector_str) + { + this->clear(); + std::vector pieces; + std::vector rgba; + boost::split( pieces, vector_str, boost::is_any_of(" ")); + for (unsigned int i = 0; i < pieces.size(); ++i) + { + if (!pieces[i].empty()) + { + ///@todo: do better atof check if string is a number + rgba.push_back(atof(pieces[i].c_str())); + } + } + + if (rgba.size() != 4) + { + ROS_ERROR("Color contains %i elements instead of 4 elements", (int)rgba.size()); + return false; + } + + this->r = rgba[0]; + this->g = rgba[1]; + this->b = rgba[2]; + this->a = rgba[3]; + + return true; + }; +}; + +} + +#endif + diff --git a/urdf/include/urdf/joint.h b/urdf/include/urdf/joint.h new file mode 100644 index 0000000..3e08308 --- /dev/null +++ b/urdf/include/urdf/joint.h @@ -0,0 +1,204 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Wim Meeussen */ + +#ifndef URDF_JOINT_H +#define URDF_JOINT_H + +#include +#include +#include +#include + +#include "pose.h" + +namespace urdf{ + +class Link; + +class JointDynamics +{ +public: + JointDynamics() { this->clear(); }; + double damping; + double friction; + + void clear() + { + damping = 0; + friction = 0; + }; + bool initXml(TiXmlElement* config); +}; + +class JointLimits +{ +public: + JointLimits() { this->clear(); }; + double lower; + double upper; + double effort; + double velocity; + + void clear() + { + lower = 0; + upper = 0; + effort = 0; + velocity = 0; + }; + bool initXml(TiXmlElement* config); +}; + +class JointSafety +{ +public: + JointSafety() { this->clear(); }; + double soft_upper_limit; + double soft_lower_limit; + double k_position; + double k_velocity; + + void clear() + { + soft_upper_limit = 0; + soft_lower_limit = 0; + k_position = 0; + k_velocity = 0; + }; + bool initXml(TiXmlElement* config); +}; + + +class JointCalibration +{ +public: + JointCalibration() { this->clear(); }; + double reference_position; + + void clear() + { + reference_position = 0; + }; + bool initXml(TiXmlElement* config); +}; + +class JointMimic +{ +public: + JointMimic() { this->clear(); }; + double offset; + double multiplier; + std::string joint_name; + + void clear() + { + offset = 0; + multiplier = 0; + joint_name.clear(); + }; + bool initXml(TiXmlElement* config); +}; + + +class Joint +{ +public: + + Joint() { this->clear(); }; + + std::string name; + enum + { + UNKNOWN, REVOLUTE, CONTINUOUS, PRISMATIC, FLOATING, PLANAR, FIXED + } type; + + /// \brief type_ meaning of axis_ + /// ------------------------------------------------------ + /// UNKNOWN unknown type + /// REVOLUTE rotation axis + /// PRISMATIC translation axis + /// FLOATING N/A + /// PLANAR plane normal axis + /// FIXED N/A + Vector3 axis; + + /// child Link element + /// child link frame is the same as the Joint frame + std::string child_link_name; + + /// parent Link element + /// origin specifies the transform from Parent Link to Joint Frame + std::string parent_link_name; + /// transform from Parent Link frame to Joint frame + Pose parent_to_joint_origin_transform; + + /// @todo: should use weak pointer here + //boost::shared_ptr link; + //boost::shared_ptr parent_link; + + /// Joint Dynamics + boost::shared_ptr dynamics; + + /// Joint Limits + boost::shared_ptr limits; + + /// Unsupported Hidden Feature + boost::shared_ptr safety; + + /// Unsupported Hidden Feature + boost::shared_ptr calibration; + + /// Option to Mimic another Joint + boost::shared_ptr mimic; + + bool initXml(TiXmlElement* xml); + void clear() + { + this->axis.clear(); + this->child_link_name.clear(); + this->parent_link_name.clear(); + this->parent_to_joint_origin_transform.clear(); + this->dynamics.reset(); + this->limits.reset(); + this->safety.reset(); + this->calibration.reset(); + this->type = UNKNOWN; + }; +}; + +} + +#endif diff --git a/urdf/include/urdf/link.h b/urdf/include/urdf/link.h new file mode 100644 index 0000000..b5722fa --- /dev/null +++ b/urdf/include/urdf/link.h @@ -0,0 +1,238 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Wim Meeussen */ + +#ifndef URDF_LINK_H +#define URDF_LINK_H + +#include +#include +#include +#include + +#include "joint.h" +#include "color.h" + +namespace urdf{ + +class Geometry +{ +public: + enum {SPHERE, BOX, CYLINDER, MESH} type; + + virtual bool initXml(TiXmlElement *) = 0; + +}; + +class Sphere : public Geometry +{ +public: + Sphere() { this->clear(); }; + double radius; + + void clear() + { + radius = 0; + }; + bool initXml(TiXmlElement *); +}; + +class Box : public Geometry +{ +public: + Box() { this->clear(); }; + Vector3 dim; + + void clear() + { + dim.clear(); + }; + bool initXml(TiXmlElement *); +}; + +class Cylinder : public Geometry +{ +public: + Cylinder() { this->clear(); }; + double length; + double radius; + + void clear() + { + length = 0; + radius = 0; + }; + bool initXml(TiXmlElement *); +}; + +class Mesh : public Geometry +{ +public: + Mesh() { this->clear(); }; + std::string filename; + Vector3 scale; + + void clear() + { + filename.clear(); + // default scale + scale.x = 1; + scale.y = 1; + scale.z = 1; + }; + bool initXml(TiXmlElement *); +}; + +class Material +{ +public: + Material() { this->clear(); }; + std::string name; + std::string texture_filename; + Color color; + + void clear() + { + color.clear(); + texture_filename.clear(); + name.clear(); + }; + bool initXml(TiXmlElement* config); +}; + +class Inertial +{ +public: + Inertial() { this->clear(); }; + Pose origin; + double mass; + double ixx,ixy,ixz,iyy,iyz,izz; + + void clear() + { + origin.clear(); + mass = 0; + ixx = ixy = ixz = iyy = iyz = izz = 0; + }; + bool initXml(TiXmlElement* config); +}; + +class Visual +{ +public: + Visual() { this->clear(); }; + Pose origin; + boost::shared_ptr geometry; + + std::string material_name; + boost::shared_ptr material; + + void clear() + { + origin.clear(); + material_name.clear(); + material.reset(); + geometry.reset(); + }; + bool initXml(TiXmlElement* config); +}; + +class Collision +{ +public: + Collision() { this->clear(); }; + Pose origin; + boost::shared_ptr geometry; + + void clear() + { + origin.clear(); + geometry.reset(); + }; + bool initXml(TiXmlElement* config); +}; + + +class Link +{ +public: + Link() { this->clear(); }; + + std::string name; + + /// inertial element + boost::shared_ptr inertial; + + /// visual element + boost::shared_ptr visual; + + /// collision element + boost::shared_ptr collision; + + /// Parent Joint element + /// explicitly stating "parent" because we want directional-ness for tree structure + /// every link can have one parent + boost::shared_ptr parent_joint; + /// Get Parent Link throught the Parent Joint + boost::shared_ptr parent_link; + + std::vector > child_joints; + std::vector > child_links; + + bool initXml(TiXmlElement* config); + void setParent(boost::shared_ptr parent); + + void clear() + { + this->name.clear(); + this->inertial.reset(); + this->visual.reset(); + this->collision.reset(); + this->parent_joint.reset(); + this->parent_link.reset(); + this->child_joints.clear(); + this->child_links.clear(); + }; + void setParentJoint(boost::shared_ptr child); + void addChild(boost::shared_ptr child); + void addChildJoint(boost::shared_ptr child); +}; + + + + +} + +#endif diff --git a/urdf/include/urdf/model.h b/urdf/include/urdf/model.h new file mode 100644 index 0000000..8a3fe37 --- /dev/null +++ b/urdf/include/urdf/model.h @@ -0,0 +1,111 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Wim Meeussen */ + +#ifndef ROBOT_MODEL_PARSER_H +#define ROBOT_MODEL_PARSER_H + +#include +#include +#include +#include +#include "link.h" + + +namespace urdf{ + + +class Model +{ +public: + Model(); + + bool initXml(TiXmlElement *xml); + bool initXml(TiXmlDocument *xml); + bool initFile(const std::string& filename); + bool initString(const std::string& xmlstring); + + boost::shared_ptr getRoot(void) const{return this->root_link_;}; + boost::shared_ptr getLink(const std::string& name) const; + boost::shared_ptr getJoint(const std::string& name) const; + const std::string& getName() const {return name_;}; + + void getLinks(std::vector >& links) const; + + /// Some accessor functions + boost::shared_ptr getParentLink(const std::string& name) const; + boost::shared_ptr getParentJoint(const std::string& name) const; + boost::shared_ptr getChildLink(const std::string& name) const; + boost::shared_ptr getChildJoint(const std::string& name) const; + + /// Every Robot Description File can be described as a + /// list of Links and Joints + /// The connection between links(nodes) and joints(edges) + /// should define a tree (i.e. 1 parent link, 0+ children links) + std::map > links_; + std::map > joints_; + std::map > materials_; + +private: + void clear(); + + std::string name_; + + /// non-const getLink() + void getLink(const std::string& name,boost::shared_ptr &link) const; + + /// non-const getMaterial() + boost::shared_ptr getMaterial(const std::string& name) const; + + /// in initXml(), onece all links are loaded, + /// it's time to build a tree + bool initTree(std::map &parent_link_tree); + + /// in initXml(), onece tree is built, + /// it's time to find the root Link + bool initRoot(std::map &parent_link_tree); + + + /// Model is restricted to a tree for now, which means there exists one root link + /// typically, root link is the world(inertial). Where world is a special link + /// or is the root_link_ the link attached to the world by PLANAR/FLOATING joint? + /// hmm... + boost::shared_ptr root_link_; + +}; + +} + +#endif diff --git a/urdf/include/urdf/pose.h b/urdf/include/urdf/pose.h new file mode 100644 index 0000000..0b76258 --- /dev/null +++ b/urdf/include/urdf/pose.h @@ -0,0 +1,232 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Wim Meeussen */ + +#ifndef URDF_POSE_H +#define URDF_POSE_H + +#include +#include +#include +#include +#include + +namespace urdf{ + +class Vector3 +{ +public: + Vector3(double _x,double _y, double _z) {this->x=_x;this->y=_y;this->z=_z;}; + Vector3() {this->clear();}; + double x; + double y; + double z; + + void clear() {this->x=this->y=this->z=0.0;}; + bool init(const std::string &vector_str) + { + this->clear(); + std::vector pieces; + std::vector xyz; + boost::split( pieces, vector_str, boost::is_any_of(" ")); + for (unsigned int i = 0; i < pieces.size(); ++i){ + if (pieces[i] != ""){ + ///@todo: do better atof check if string is a number + xyz.push_back(atof(pieces[i].c_str())); + } + } + + if (xyz.size() != 3) { + ROS_ERROR("Vector contains %i elements instead of 3 elements", (int)xyz.size()); + return false; + } + + this->x = xyz[0]; + this->y = xyz[1]; + this->z = xyz[2]; + + return true; + }; +}; + +class Rotation +{ +public: + Rotation(double _x,double _y, double _z, double _w) {this->x=_x;this->y=_y;this->z=_z;this->w=_w;}; + Rotation() {this->clear();}; + void getQuaternion(double &quat_x,double &quat_y,double &quat_z, double &quat_w) + { + quat_x = this->x; + quat_y = this->y; + quat_z = this->z; + quat_w = this->w; + }; + void getRPY(double &roll,double &pitch,double &yaw) + { + double sqw; + double sqx; + double sqy; + double sqz; + + sqx = this->x * this->x; + sqy = this->y * this->y; + sqz = this->z * this->z; + sqw = this->w * this->w; + + roll = atan2(2 * (this->y*this->z + this->w*this->x), sqw - sqx - sqy + sqz); + pitch = asin(-2 * (this->x*this->z - this->w*this->y)); + yaw = atan2(2 * (this->x*this->y + this->w*this->z), sqw + sqx - sqy - sqz); + + }; + void setFromQuaternion(double quat_x,double quat_y,double quat_z,double quat_w) + { + this->x = quat_x; + this->y = quat_y; + this->z = quat_z; + this->w = quat_w; + this->normalize(); + }; + void setFromRPY(double roll, double pitch, double yaw) + { + double phi, the, psi; + + phi = roll / 2.0; + the = pitch / 2.0; + psi = yaw / 2.0; + + this->x = sin(phi) * cos(the) * cos(psi) - cos(phi) * sin(the) * sin(psi); + this->y = cos(phi) * sin(the) * cos(psi) + sin(phi) * cos(the) * sin(psi); + this->z = cos(phi) * cos(the) * sin(psi) - sin(phi) * sin(the) * cos(psi); + this->w = cos(phi) * cos(the) * cos(psi) + sin(phi) * sin(the) * sin(psi); + + this->normalize(); + }; + + double x,y,z,w; + + bool init(const std::string &rotation_str) + { + this->clear(); + + Vector3 rpy; + + if (!rpy.init(rotation_str)) + return false; + else + { + this->setFromRPY(rpy.x,rpy.y,rpy.z); + return true; + } + + }; + + void clear() { this->x=this->y=this->z=0.0;this->w=1.0; } + + void normalize() + { + double s = sqrt(this->x * this->x + + this->y * this->y + + this->z * this->z + + this->w * this->w); + this->x /= s; + this->y /= s; + this->z /= s; + this->w /= s; + }; +}; + +class Pose +{ +public: + Pose() { this->clear(); }; + + Vector3 position; + Rotation rotation; + + void clear() + { + this->position.clear(); + this->rotation.clear(); + }; + bool initXml(TiXmlElement* xml) + { + this->clear(); + if (!xml) + { + ROS_DEBUG("parsing pose: xml empty"); + return false; + } + else + { + const char* xyz_str = xml->Attribute("xyz"); + if (xyz_str == NULL) + { + ROS_DEBUG("parsing pose: no xyz, using default values."); + return true; + } + else + { + if (!this->position.init(xyz_str)) + { + ROS_ERROR("malformed xyz"); + this->position.clear(); + return false; + } + } + + const char* rpy_str = xml->Attribute("rpy"); + if (rpy_str == NULL) + { + ROS_DEBUG("parsing pose: no rpy, using default values."); + return true; + } + else + { + if (!this->rotation.init(rpy_str)) + { + ROS_ERROR("malformed rpy"); + return false; + this->rotation.clear(); + } + } + + return true; + } + }; +}; + +} + +#endif diff --git a/urdf/mainpage.dox b/urdf/mainpage.dox new file mode 100644 index 0000000..6b3d3b1 --- /dev/null +++ b/urdf/mainpage.dox @@ -0,0 +1,209 @@ +/** +\mainpage +\htmlinclude manifest.html + +\b robot_model is ... + + + +\li RobotModel is a class containing robot model data structure. + +\li Below is an example Robot Description Describing a Parent Link "P", a Child Link "C", and a Joint "J" + +\li OLD URDF: + @verbatim + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @endverbatim +\li NEW URDF XML that corresponds to the current RobotModel data structure: + @verbatim + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @endverbatim + + + +\section codeapi Code API + + + +\section rosapi ROS API + + + + + + + + +*/ diff --git a/urdf/manifest.xml b/urdf/manifest.xml new file mode 100644 index 0000000..09294b4 --- /dev/null +++ b/urdf/manifest.xml @@ -0,0 +1,19 @@ + + + This package containt a parser for the Xml Robot Description Format (URDF). + + Wim Meeussen, John Hsu + BSD + + http://pr.willowgarage.com/wiki/urdf + + + + + + + + + + + diff --git a/urdf/src/joint.cpp b/urdf/src/joint.cpp new file mode 100644 index 0000000..3f1cfce --- /dev/null +++ b/urdf/src/joint.cpp @@ -0,0 +1,387 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: John Hsu */ + +#include +#include + +namespace urdf{ + +bool JointDynamics::initXml(TiXmlElement* config) +{ + this->clear(); + + // Get joint damping + const char* damping_str = config->Attribute("damping"); + if (damping_str == NULL) + ROS_DEBUG("joint dynamics: no damping"); + else + this->damping = atof(damping_str); + + // Get joint friction + const char* friction_str = config->Attribute("friction"); + if (friction_str == NULL) + ROS_DEBUG("joint dynamics: no friction"); + else + this->friction = atof(friction_str); + + if (damping_str == NULL && friction_str == NULL) + { + ROS_ERROR("joint dynamics element specified with no damping and no friction"); + return false; + } + else{ + ROS_DEBUG("joint dynamics: damping %f and friction %f", damping, friction); + return true; + } +} + +bool JointLimits::initXml(TiXmlElement* config) +{ + this->clear(); + + // Get lower joint limit + const char* lower_str = config->Attribute("lower"); + if (lower_str == NULL) + ROS_DEBUG("joint limit: no lower"); + else + this->lower = atof(lower_str); + + // Get upper joint limit + const char* upper_str = config->Attribute("upper"); + if (upper_str == NULL) + ROS_DEBUG("joint limit: no upper"); + else + this->upper = atof(upper_str); + + // Get joint effort limit + const char* effort_str = config->Attribute("effort"); + if (effort_str == NULL) + ROS_DEBUG("joint limit: no effort"); + else + this->effort = atof(effort_str); + + // Get joint velocity limit + const char* velocity_str = config->Attribute("velocity"); + if (velocity_str == NULL) + ROS_DEBUG("joint limit: no velocity"); + else + this->velocity = atof(velocity_str); + + if (lower_str == NULL && upper_str == NULL && effort_str == NULL && velocity_str == NULL) + { + ROS_ERROR("joint limit element specified with no readable attributes"); + return false; + } + else + return true; +} + +bool JointSafety::initXml(TiXmlElement* config) +{ + this->clear(); + + // Get soft_lower_limit joint limit + const char* soft_lower_limit_str = config->Attribute("soft_lower_limit"); + if (soft_lower_limit_str == NULL) + { + ROS_DEBUG("joint safety: no soft_lower_limit, using default value"); + this->soft_lower_limit = 0; + } + else + this->soft_lower_limit = atof(soft_lower_limit_str); + + // Get soft_upper_limit joint limit + const char* soft_upper_limit_str = config->Attribute("soft_upper_limit"); + if (soft_upper_limit_str == NULL) + { + ROS_DEBUG("joint safety: no soft_upper_limit, using default value"); + this->soft_upper_limit = 0; + } + else + this->soft_upper_limit = atof(soft_upper_limit_str); + + // Get k_position_ safety "position" gain - not exactly position gain + const char* k_position_str = config->Attribute("k_position"); + if (k_position_str == NULL) + { + ROS_DEBUG("joint safety: no k_position, using default value"); + this->k_position = 0; + } + else + this->k_position = atof(k_position_str); + // Get k_velocity_ safety velocity gain + const char* k_velocity_str = config->Attribute("k_velocity"); + if (k_velocity_str == NULL) + { + ROS_DEBUG("joint safety: no k_velocity, using default value"); + this->k_velocity = 0; + } + else + this->k_velocity = atof(k_velocity_str); + + return true; +} + +bool JointCalibration::initXml(TiXmlElement* config) +{ + this->clear(); + + // Get reference_position + const char* reference_position_str = config->Attribute("reference_position"); + if (reference_position_str == NULL) + { + ROS_DEBUG("joint calibration: no reference_position, using default value"); + this->reference_position = 0; + } + else + this->reference_position = atof(reference_position_str); + + return true; +} + +bool JointMimic::initXml(TiXmlElement* config) +{ + this->clear(); + + // Get name of joint to mimic + const char* joint_name_str = config->Attribute("joint"); + if (joint_name_str == NULL) + { + ROS_WARN("joint mimic: no mimic joint specified"); + return false; + } + else + this->joint_name = joint_name_str; + + // Get mimic multiplier + const char* multiplier_str = config->Attribute("multiplier"); + if (multiplier_str == NULL) + { + ROS_DEBUG("joint mimic: no multiplier, using default value of 1"); + this->multiplier = 1; + } + else + this->multiplier = atof(multiplier_str); + + // Get mimic offset + const char* offset_str = config->Attribute("offset"); + if (offset_str == NULL) + { + ROS_DEBUG("joint mimic: no offset, using default value of 0"); + this->offset = 0; + } + else + this->offset = atof(offset_str); + + return true; +} + +bool Joint::initXml(TiXmlElement* config) +{ + this->clear(); + + // Get Joint Name + const char *name = config->Attribute("name"); + if (!name) + { + ROS_ERROR("unnamed joint found"); + return false; + } + this->name = name; + + // Get transform from Parent Link to Joint Frame + TiXmlElement *origin_xml = config->FirstChildElement("origin"); + if (!origin_xml) + { + ROS_DEBUG("Joint '%s' missing origin tag under parent describing transform from Parent Link to Joint Frame, (using Identity transform).", this->name.c_str()); + this->parent_to_joint_origin_transform.clear(); + } + else + { + if (!this->parent_to_joint_origin_transform.initXml(origin_xml)) + { + ROS_ERROR("Malformed parent origin element for joint '%s'", this->name.c_str()); + this->parent_to_joint_origin_transform.clear(); + return false; + } + } + + // Get Parent Link + TiXmlElement *parent_xml = config->FirstChildElement("parent"); + if (parent_xml) + { + const char *pname = parent_xml->Attribute("link"); + if (!pname) + ROS_INFO("no parent link name specified for Joint link '%s'. this might be the root?", this->name.c_str()); + else + { + this->parent_link_name = std::string(pname); + + } + } + + // Get Child Link + TiXmlElement *child_xml = config->FirstChildElement("child"); + if (child_xml) + { + const char *pname = child_xml->Attribute("link"); + if (!pname) + ROS_INFO("no child link name specified for Joint link '%s'.", this->name.c_str()); + else + { + this->child_link_name = std::string(pname); + + } + } + + // Get Joint type + const char* type_char = config->Attribute("type"); + if (!type_char) + { + ROS_ERROR("joint '%s' has no type, check to see if it's a reference.", this->name.c_str()); + return false; + } + std::string type_str = type_char; + if (type_str == "planar") + type = PLANAR; + else if (type_str == "floating") + type = FLOATING; + else if (type_str == "revolute") + type = REVOLUTE; + else if (type_str == "continuous") + type = CONTINUOUS; + else if (type_str == "prismatic") + type = PRISMATIC; + else if (type_str == "fixed") + type = FIXED; + else + { + ROS_ERROR("Joint '%s' has no known type '%s'", this->name.c_str(), type_str.c_str()); + return false; + } + + // Get Joint Axis + if (this->type != FLOATING) + { + // axis + TiXmlElement *axis_xml = config->FirstChildElement("axis"); + if (axis_xml) + { + if (!axis_xml->Attribute("xyz")) + ROS_INFO("no xyz attribute for axis element for Joint link '%s', using default values", this->name.c_str()); + else + { + if (!this->axis.init(axis_xml->Attribute("xyz"))) + { + if (this->type == PLANAR) + ROS_DEBUG("PLANAR Joint '%s' will require an axis tag in the future which indicates the surface normal of the plane.", this->name.c_str()); + else + { + ROS_ERROR("Malformed axis element for joint '%s'", this->name.c_str()); + this->axis.clear(); + return false; + } + } + } + } + } + + // Get limit + TiXmlElement *limit_xml = config->FirstChildElement("limit"); + if (limit_xml) + { + limits.reset(new JointLimits); + if (!limits->initXml(limit_xml)) + { + ROS_ERROR("Could not parse limit element for joint '%s'", this->name.c_str()); + limits.reset(); + } + } + + // Get safety + TiXmlElement *safety_xml = config->FirstChildElement("safety_controller"); + if (safety_xml) + { + safety.reset(new JointSafety); + if (!safety->initXml(safety_xml)) + { + ROS_ERROR("Could not parse safety element for joint '%s'", this->name.c_str()); + safety.reset(); + } + } + + // Get calibration + TiXmlElement *calibration_xml = config->FirstChildElement("calibration"); + if (calibration_xml) + { + calibration.reset(new JointCalibration); + if (!calibration->initXml(calibration_xml)) + { + ROS_ERROR("Could not parse calibration element for joint '%s'", this->name.c_str()); + calibration.reset(); + } + } + + // Get Joint Mimic + TiXmlElement *mimic_xml = config->FirstChildElement("mimic"); + if (mimic_xml) + { + mimic.reset(new JointMimic); + if (!mimic->initXml(mimic_xml)) + { + ROS_WARN("Could not parse mimic element for joint '%s'", this->name.c_str()); + mimic.reset(); + } + } + + // Get Dynamics + TiXmlElement *prop_xml = config->FirstChildElement("dynamics"); + if (prop_xml) + { + dynamics.reset(new JointDynamics); + if (!dynamics->initXml(prop_xml)) + { + ROS_ERROR("Could not parse joint_dynamics element for joint '%s'", this->name.c_str()); + dynamics.reset(); + } + } + + return true; +} + + + +} diff --git a/urdf/src/link.cpp b/urdf/src/link.cpp new file mode 100644 index 0000000..a979a67 --- /dev/null +++ b/urdf/src/link.cpp @@ -0,0 +1,434 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Wim Meeussen */ + + +#include "urdf/link.h" +#include + +namespace urdf{ + +boost::shared_ptr parseGeometry(TiXmlElement *g) +{ + boost::shared_ptr geom; + if (!g) return geom; + + TiXmlElement *shape = g->FirstChildElement(); + if (!shape) + { + ROS_ERROR("Geometry tag contains no child element."); + return geom; + } + + std::string type_name = shape->ValueStr(); + if (type_name == "sphere") + geom.reset(new Sphere); + else if (type_name == "box") + geom.reset(new Box); + else if (type_name == "cylinder") + geom.reset(new Cylinder); + else if (type_name == "mesh") + geom.reset(new Mesh); + else + { + ROS_ERROR("Unknown geometry type '%s'", type_name.c_str()); + return geom; + } + + if (!geom->initXml(shape)) + return geom; + + return geom; +} + +bool Material::initXml(TiXmlElement *config) +{ + bool has_rgb = false; + bool has_filename = false; + + this->clear(); + + if (!config->Attribute("name")) + { + ROS_ERROR("Material must contain a name attribute"); + return false; + } + + this->name = config->Attribute("name"); + + // texture + TiXmlElement *t = config->FirstChildElement("texture"); + if (t) + { + if (t->Attribute("filename")) + { + this->texture_filename = t->Attribute("filename"); + has_filename = true; + } + else + { + ROS_ERROR("texture has no filename for Material %s",this->name.c_str()); + } + } + + // color + TiXmlElement *c = config->FirstChildElement("color"); + if (c) + { + if (c->Attribute("rgba")) + { + if (!this->color.init(c->Attribute("rgba"))) + { + ROS_ERROR("Material %s has malformed color rgba values.",this->name.c_str()); + this->color.clear(); + return false; + } + else + has_rgb = true; + } + else + { + ROS_ERROR("Material %s color has no rgba",this->name.c_str()); + } + } + + return (has_rgb || has_filename); +} + +bool Inertial::initXml(TiXmlElement *config) +{ + this->clear(); + + // Origin + TiXmlElement *o = config->FirstChildElement("origin"); + if (!o) + { + ROS_INFO("Origin tag not present for inertial element, using default (Identity)"); + this->origin.clear(); + } + else + { + if (!this->origin.initXml(o)) + { + ROS_ERROR("Inertial has a malformed origin tag"); + this->origin.clear(); + return false; + } + } + + TiXmlElement *mass_xml = config->FirstChildElement("mass"); + if (!mass_xml) + { + ROS_ERROR("Inertial element must have mass element"); + return false; + } + if (!mass_xml->Attribute("value")) + { + ROS_ERROR("Inertial: mass element must have value attributes"); + return false; + } + mass = atof(mass_xml->Attribute("value")); + + TiXmlElement *inertia_xml = config->FirstChildElement("inertia"); + if (!inertia_xml) + { + ROS_ERROR("Inertial element must have inertia element"); + return false; + } + if (!(inertia_xml->Attribute("ixx") && inertia_xml->Attribute("ixy") && inertia_xml->Attribute("ixz") && + inertia_xml->Attribute("iyy") && inertia_xml->Attribute("iyz") && + inertia_xml->Attribute("izz"))) + { + ROS_ERROR("Inertial: inertia element must have ixx,ixy,ixz,iyy,iyz,izz attributes"); + return false; + } + ixx = atof(inertia_xml->Attribute("ixx")); + ixy = atof(inertia_xml->Attribute("ixy")); + ixz = atof(inertia_xml->Attribute("ixz")); + iyy = atof(inertia_xml->Attribute("iyy")); + iyz = atof(inertia_xml->Attribute("iyz")); + izz = atof(inertia_xml->Attribute("izz")); + + return true; +} + +bool Visual::initXml(TiXmlElement *config) +{ + this->clear(); + + // Origin + TiXmlElement *o = config->FirstChildElement("origin"); + if (!o) + { + ROS_DEBUG("Origin tag not present for visual element, using default (Identity)"); + this->origin.clear(); + } + else if (!this->origin.initXml(o)) + { + ROS_ERROR("Visual has a malformed origin tag"); + this->origin.clear(); + return false; + } + + // Geometry + TiXmlElement *geom = config->FirstChildElement("geometry"); + geometry = parseGeometry(geom); + if (!geometry) + { + ROS_ERROR("Malformed geometry for Visual element"); + return false; + } + + // Material + TiXmlElement *mat = config->FirstChildElement("material"); + if (!mat) + { + ROS_DEBUG("visual element has no material tag."); + } + else + { + // get material name + if (!mat->Attribute("name")) + { + ROS_ERROR("Visual material must contain a name attribute"); + return false; + } + this->material_name = mat->Attribute("name"); + + // try to parse material element in place + this->material.reset(new Material); + if (!this->material->initXml(mat)) + { + ROS_DEBUG("Could not parse material element in Visual block, maybe defined outside."); + this->material.reset(); + } + else + { + ROS_DEBUG("Parsed material element in Visual block."); + } + } + + return true; +} + +bool Collision::initXml(TiXmlElement* config) +{ + this->clear(); + + // Origin + TiXmlElement *o = config->FirstChildElement("origin"); + if (!o) + { + ROS_INFO("Origin tag not present for collision element, using default (Identity)"); + this->origin.clear(); + } + else if (!this->origin.initXml(o)) + { + ROS_ERROR("Collision has a malformed origin tag"); + this->origin.clear(); + return false; + } + + // Geometry + TiXmlElement *geom = config->FirstChildElement("geometry"); + geometry = parseGeometry(geom); + if (!geometry) + { + ROS_ERROR("Malformed geometry for Collision element"); + return false; + } + + return true; +} + +bool Sphere::initXml(TiXmlElement *c) +{ + this->clear(); + + this->type = SPHERE; + if (!c->Attribute("radius")) + { + ROS_ERROR("Sphere shape must have a radius attribute"); + return false; + } + + radius = atof(c->Attribute("radius")); + return false; +} + +bool Box::initXml(TiXmlElement *c) +{ + this->clear(); + + this->type = BOX; + if (!c->Attribute("size")) + { + ROS_ERROR("Box shape has no size attribute"); + return false; + } + if (!dim.init(c->Attribute("size"))) + { + ROS_ERROR("Box shape has malformed size attribute"); + dim.clear(); + return false; + } + return true; +} + +bool Cylinder::initXml(TiXmlElement *c) +{ + this->clear(); + + this->type = CYLINDER; + if (!c->Attribute("length") || + !c->Attribute("radius")) + { + ROS_ERROR("Cylinder shape must have both length and radius attributes"); + return false; + } + + length = atof(c->Attribute("length")); + radius = atof(c->Attribute("radius")); + return true; +} + +bool Mesh::initXml(TiXmlElement *c) +{ + this->clear(); + + this->type = MESH; + if (!c->Attribute("filename")) + { + ROS_ERROR("Mesh must contain a filename attribute"); + return false; + } + + filename = c->Attribute("filename"); + + if (c->Attribute("scale")) + { + if (!this->scale.init(c->Attribute("scale"))) + { + ROS_ERROR("Mesh scale was specified, but could not be parsed"); + this->scale.clear(); + return false; + } + } + else + ROS_DEBUG("Mesh scale was not specified, default to (1,1,1)"); + + return true; +} + + +bool Link::initXml(TiXmlElement* config) +{ + this->clear(); + + const char *name_char = config->Attribute("name"); + if (!name_char) + { + ROS_ERROR("No name given for the link."); + return false; + } + name = std::string(name_char); + + // Inertial + TiXmlElement *i = config->FirstChildElement("inertial"); + if (i) + { + inertial.reset(new Inertial); + if (!inertial->initXml(i)) + { + ROS_ERROR("Could not parse inertial element for Link '%s'", this->name.c_str()); + inertial.reset(); + } + } + + // Visual + TiXmlElement *v = config->FirstChildElement("visual"); + if (v) + { + visual.reset(new Visual); + if (!visual->initXml(v)) + { + ROS_ERROR("Could not parse visual element for Link '%s'", this->name.c_str()); + visual.reset(); + } + } + + // Collision + TiXmlElement *col = config->FirstChildElement("collision"); + if (col) + { + collision.reset(new Collision); + if (!collision->initXml(col)) + { + ROS_ERROR("Could not parse collision element for Link '%s'", this->name.c_str()); + collision.reset(); + } + } + + return true; +} + +void Link::setParent(boost::shared_ptr parent) +{ + this->parent_link = parent; + ROS_DEBUG("set parent Link '%s' for Link '%s'", parent->name.c_str(), this->name.c_str()); +} + +void Link::setParentJoint(boost::shared_ptr parent) +{ + this->parent_joint = parent; + ROS_DEBUG("set parent joint '%s' to Link '%s'", parent->name.c_str(), this->name.c_str()); +} + +void Link::addChild(boost::shared_ptr child) +{ + this->child_links.push_back(child); + ROS_DEBUG("added child Link '%s' to Link '%s'", child->name.c_str(), this->name.c_str()); +} + +void Link::addChildJoint(boost::shared_ptr child) +{ + this->child_joints.push_back(child); + ROS_DEBUG("added child Joint '%s' to Link '%s'", child->name.c_str(), this->name.c_str()); +} + + + +} + diff --git a/urdf/src/model.cpp b/urdf/src/model.cpp new file mode 100644 index 0000000..106e3d5 --- /dev/null +++ b/urdf/src/model.cpp @@ -0,0 +1,409 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Wim Meeussen */ + +#include +#include +#include +#include "urdf/model.h" + +namespace urdf{ + + +Model::Model() +{ + this->clear(); +} + +void Model::clear() +{ + name_.clear(); + this->links_.clear(); + this->joints_.clear(); + this->materials_.clear(); + this->root_link_.reset(); +} + + +bool Model::initFile(const std::string& filename) +{ + TiXmlDocument xml_doc; + xml_doc.LoadFile(filename); + + return initXml(&xml_doc); +} + + +bool Model::initString(const std::string& xml_string) +{ + TiXmlDocument xml_doc; + xml_doc.Parse(xml_string.c_str()); + + return initXml(&xml_doc); +} + + +bool Model::initXml(TiXmlDocument *xml_doc) +{ + if (!xml_doc) + { + ROS_ERROR("Could not parse the xml"); + return false; + } + + TiXmlElement *robot_xml = xml_doc->FirstChildElement("robot"); + if (!robot_xml) + { + ROS_ERROR("Could not find the 'robot' element in the xml file"); + return false; + } + return initXml(robot_xml); +} + +bool Model::initXml(TiXmlElement *robot_xml) +{ + this->clear(); + + ROS_DEBUG("Parsing robot xml"); + if (!robot_xml) return false; + + // Get robot name + const char *name = robot_xml->Attribute("name"); + if (!name) + { + ROS_ERROR("No name given for the robot."); + return false; + } + this->name_ = std::string(name); + + // Get all Material elements + for (TiXmlElement* material_xml = robot_xml->FirstChildElement("material"); material_xml; material_xml = material_xml->NextSiblingElement("material")) + { + boost::shared_ptr material; + material.reset(new Material); + + if (material->initXml(material_xml)) + { + if (this->getMaterial(material->name)) + { + ROS_ERROR("material '%s' is not unique.", material->name.c_str()); + material.reset(); + return false; + } + else + { + this->materials_.insert(make_pair(material->name,material)); + ROS_DEBUG("successfully added a new material '%s'", material->name.c_str()); + } + } + else + { + ROS_ERROR("material xml is not initialized correctly"); + material.reset(); + } + } + + // Get all Link elements + for (TiXmlElement* link_xml = robot_xml->FirstChildElement("link"); link_xml; link_xml = link_xml->NextSiblingElement("link")) + { + boost::shared_ptr link; + link.reset(new Link); + + if (link->initXml(link_xml)) + { + if (this->getLink(link->name)) + { + ROS_ERROR("link '%s' is not unique.", link->name.c_str()); + link.reset(); + return false; + } + else + { + // set link visual material + ROS_DEBUG("setting link '%s' material", link->name.c_str()); + if (link->visual) + { + if (!link->visual->material_name.empty()) + { + if (this->getMaterial(link->visual->material_name)) + { + ROS_DEBUG("setting link '%s' material to '%s'", link->name.c_str(),link->visual->material_name.c_str()); + link->visual->material = this->getMaterial( link->visual->material_name.c_str() ); + } + else + { + if (link->visual->material) + { + ROS_DEBUG("link '%s' material '%s' defined in Visual.", link->name.c_str(),link->visual->material_name.c_str()); + this->materials_.insert(make_pair(link->visual->material->name,link->visual->material)); + } + else + { + ROS_ERROR("link '%s' material '%s' undefined.", link->name.c_str(),link->visual->material_name.c_str()); + link.reset(); + return false; + } + } + } + } + + this->links_.insert(make_pair(link->name,link)); + ROS_DEBUG("successfully added a new link '%s'", link->name.c_str()); + } + } + else + { + ROS_ERROR("link xml is not initialized correctly"); + link.reset(); + } + } + // Get all Joint elements + for (TiXmlElement* joint_xml = robot_xml->FirstChildElement("joint"); joint_xml; joint_xml = joint_xml->NextSiblingElement("joint")) + { + boost::shared_ptr joint; + joint.reset(new Joint); + + if (joint->initXml(joint_xml)) + { + if (this->getJoint(joint->name)) + { + ROS_ERROR("joint '%s' is not unique.", joint->name.c_str()); + joint.reset(); + return false; + } + else + { + this->joints_.insert(make_pair(joint->name,joint)); + ROS_DEBUG("successfully added a new joint '%s'", joint->name.c_str()); + } + } + else + { + ROS_ERROR("joint xml is not initialized correctly"); + joint.reset(); + } + } + + + // every link has children links and joints, but no parents, so we create a + // local convenience data structure for keeping child->parent relations + std::map parent_link_tree; + parent_link_tree.clear(); + + // building tree: name mapping + if (!this->initTree(parent_link_tree)) + { + ROS_ERROR("failed to build tree"); + return false; + } + + // find the root link + if (!this->initRoot(parent_link_tree)) + { + ROS_ERROR("failed to find root link"); + return false; + } + + return true; +} + +bool Model::initTree(std::map &parent_link_tree) +{ + // loop through all joints, for every link, assign children links and children joints + for (std::map >::iterator joint = this->joints_.begin();joint != this->joints_.end(); joint++) + { + std::string parent_link_name = joint->second->parent_link_name; + std::string child_link_name = joint->second->child_link_name; + + ROS_DEBUG("build tree: joint: '%s' has parent link '%s' and child link '%s'", joint->first.c_str(), parent_link_name.c_str(),child_link_name.c_str()); + + /// add an empty "world" link + if (parent_link_name == "world") + { + if (this->getLink(parent_link_name)) + { + ROS_DEBUG(" parent link '%s' already exists.", parent_link_name.c_str()); + } + else + { + ROS_DEBUG(" parent link '%s' is a special case, adding fake link.", parent_link_name.c_str()); + boost::shared_ptr link; + link.reset(new Link); + link->name = "world"; + this->links_.insert(make_pair(link->name,link)); + ROS_DEBUG(" successfully added new link '%s'", link->name.c_str()); + } + } + + if (parent_link_name.empty()) + { + ROS_DEBUG(" Joint %s: does not have parent link name specified. Joint is an abstract joint.",(joint->second)->name.c_str()); + } + else if (child_link_name.empty()) + { + ROS_DEBUG(" Joint %s: does not have child link name specified. Joint is an abstract joint.",(joint->second)->name.c_str()); + } + else + { + // find parent link + boost::shared_ptr parent_link; + this->getLink(parent_link_name, parent_link); + + if (!parent_link) + { + ROS_ERROR(" parent link '%s' is not found", parent_link_name.c_str()); + return false; + } + else + { + // find child link + boost::shared_ptr child_link; + this->getLink(child_link_name, child_link); + + if (!child_link) + { + ROS_ERROR(" for joint: %s child link '%s' is not found",joint->first.c_str(),child_link_name.c_str()); + return false; + } + else + { + //set parent link for child link + child_link->setParent(parent_link); + + //set parent joint for child link + child_link->setParentJoint(joint->second); + + //set child joint for parent link + parent_link->addChildJoint(joint->second); + + //set child link for parent link + parent_link->addChild(child_link); + + // fill in child/parent string map + parent_link_tree[child_link->name] = parent_link_name; + + ROS_DEBUG(" now Link '%s' has %i children ", parent_link->name.c_str(), (int)parent_link->child_links.size()); + } + } + } + } + + return true; +} + + + +bool Model::initRoot(std::map &parent_link_tree) +{ + + this->root_link_.reset(); + + for (std::map::iterator p=parent_link_tree.begin(); p!=parent_link_tree.end(); p++) + { + if (parent_link_tree.find(p->second) == parent_link_tree.end()) + { + if (this->root_link_) + { + ROS_DEBUG("child '%s', parent '%s', root '%s'", p->first.c_str(), p->second.c_str(), this->root_link_->name.c_str()); + if (this->root_link_->name != p->second) + { + ROS_ERROR("Two root links found: '%s' and '%s'", this->root_link_->name.c_str(), p->second.c_str()); + return false; + } + } + else + getLink(p->second,this->root_link_); + } + } + if (!this->root_link_) + { + ROS_ERROR("No root link found. The robot xml is empty or not a tree."); + return false; + } + ROS_DEBUG("Link '%s' is the root link", this->root_link_->name.c_str()); + + return true; +} + +boost::shared_ptr Model::getMaterial(const std::string& name) const +{ + boost::shared_ptr ptr; + if (this->materials_.find(name) == this->materials_.end()) + ptr.reset(); + else + ptr = this->materials_.find(name)->second; + return ptr; +} + +boost::shared_ptr Model::getLink(const std::string& name) const +{ + boost::shared_ptr ptr; + if (this->links_.find(name) == this->links_.end()) + ptr.reset(); + else + ptr = this->links_.find(name)->second; + return ptr; +} + +void Model::getLinks(std::vector >& links) const +{ + for (std::map >::const_iterator link = this->links_.begin();link != this->links_.end(); link++) + { + links.push_back(link->second); + } +} + +void Model::getLink(const std::string& name,boost::shared_ptr &link) const +{ + boost::shared_ptr ptr; + if (this->links_.find(name) == this->links_.end()) + ptr.reset(); + else + ptr = this->links_.find(name)->second; + link = ptr; +} + +boost::shared_ptr Model::getJoint(const std::string& name) const +{ + boost::shared_ptr ptr; + if (this->joints_.find(name) == this->joints_.end()) + ptr.reset(); + else + ptr = this->joints_.find(name)->second; + return ptr; +} + +} + diff --git a/urdf/test/parse_test.cpp b/urdf/test/parse_test.cpp new file mode 100644 index 0000000..93f6b6f --- /dev/null +++ b/urdf/test/parse_test.cpp @@ -0,0 +1,104 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Wim Meeussen */ + +#include "urdf/model.h" +#include + +using namespace urdf; + +void printTree(boost::shared_ptr link,int level = 0) +{ + level+=2; + int count = 0; + for (std::vector >::const_iterator child = link->child_links.begin(); child != link->child_links.end(); child++) + { + if (*child) + { + for(int j=0;jname + << " with mass: " << (*child)->inertial->mass + << std::endl; + // first grandchild + printTree(*child,level); + } + else + { + for(int j=0;jname << " has a null child!" << *child << std::endl; + } + } + +} + + +int main(int argc, char** argv) +{ + if (argc < 2){ + std::cerr << "Expect xml file to parse" << std::endl; + return -1; + } + TiXmlDocument robot_model_xml; + robot_model_xml.LoadFile(argv[1]); + TiXmlElement *robot_xml = robot_model_xml.FirstChildElement("robot"); + if (!robot_xml){ + std::cerr << "ERROR: Could not load the xml into TiXmlElement" << std::endl; + return -1; + } + + Model robot; + if (!robot.initXml(robot_xml)){ + std::cerr << "ERROR: Model Parsing the xml failed" << std::endl; + return -1; + } + + std::cout << "robot name is: " << robot.getName() << std::endl; + + // get info from parser + std::cout << "---------- Finished Loading from Model XML, Now Checking Model structure ------------" << std::endl; + // get root link + boost::shared_ptr root_link=robot.getRoot(); + if (!root_link) return -1; + + std::cout << "root Link: " << root_link->name << std::endl; + if (!root_link->child_links.empty()) + std::cout << "root Link: " << root_link->name << " has " << root_link->child_links.size() << " children" << std::endl; + + + // print entire tree + printTree(root_link); + return 0; +} + diff --git a/urdf/test/pr2_desc.xml b/urdf/test/pr2_desc.xml new file mode 100644 index 0000000..46efbc9 --- /dev/null +++ b/urdf/test/pr2_desc.xml @@ -0,0 +1,2542 @@ + + + + + + + + + + + + + + + + + + + true + 1000.0 + + + + + + true + 1.0 + 5 + -10.0 + 1.0 + 10.0 + 1200000.0 + diagnostic + battery_state + self_test + + + + + true + 1000.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + fl_caster_l_wheel_collision + 100.0 + + true + 100.0 + fl_caster_l_wheel_bumper + + + + + + + + + + + + + + 75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + fl_caster_r_wheel_collision + 100.0 + + true + 100.0 + fl_caster_r_wheel_bumper + + + + + + + + + + + + + + -75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + fr_caster_l_wheel_collision + 100.0 + + true + 100.0 + fr_caster_l_wheel_bumper + + + + + + + + + + + + + + 75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + fr_caster_r_wheel_collision + 100.0 + + true + 100.0 + fr_caster_r_wheel_bumper + + + + + + + + + + + + + + -75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bl_caster_l_wheel_collision + 100.0 + + true + 100.0 + bl_caster_l_wheel_bumper + + + + + + + + + + + + + + 75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bl_caster_r_wheel_collision + 100.0 + + true + 100.0 + bl_caster_r_wheel_bumper + + + + + + + + + + + + + + -75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + br_caster_l_wheel_collision + 100.0 + + true + 100.0 + br_caster_l_wheel_bumper + + + + + + + + + + + + + + 75.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + br_caster_r_wheel_collision + 100.0 + + true + 100.0 + br_caster_r_wheel_bumper + + + + + + + + + + + + + + -75.05 + + + base_collision + 100.0 + + true + 100.0 + base_bumper + + + + + + + + + + true + 100.0 + base_link + base_pose_ground_truth + 0.01 + map + 25.7 25.7 0 + 0 0 0 + + + + + 640 + 640 + 1 + 0.0 0.0 0.0 + false + + -100 + 100 + + 0.05 + 10.0 + 0.01 + 20.0 + + 0.005 + true + 20.0 + base_scan + base_laser + + + + + + + + true + 100.0 + plug_magnet + plug_magnet_pose_ground_truth + 0.01 + map + 0 0 0 + 0 0 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -52143.33 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + r_shoulder_pan_collision + 100.0 + + true + 100.0 + r_shoulder_pan_bumper + + + + + true + + + + + r_shoulder_lift_collision_geom + 100.0 + + true + 100.0 + r_r_shoulder_lift_bumper + + + + true + + + + + + true + + + + + + r_upper_arm_collision_geom + 100.0 + + true + 100.0 + r_upper_arm_bumper + + + + true + + + + r_elbow_flex_collision_geom + 100.0 + + true + 100.0 + r_elbow_flex_bumper + + + + + + + true + + + + true + + true + + r_forearm_collision + 100.0 + + true + 100.0 + r_forearm_bumper + + + + + + true + + r_wrist_flex_collision + 100.0 + + true + 100.0 + r_wrist_flex_bumper + + + + + + + + true + + r_wrist_roll_collision + 100.0 + + true + 100.0 + r_wrist_roll_bumper + + + + + + + + + 63.16 + + + + 61.89 + + + + 32.65 + + + + -36.17 + + + + 90.5142857143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + r_gripper_l_finger_collision + 100.0 + + true + 100.0 + r_gripper_l_finger_bumper + + + + + + + + + + + + + + + true + + r_gripper_r_finger_collision + 100.0 + + true + 100.0 + r_gripper_r_finger_bumper + + + + + + + + + + + + + + + + + + true + + + r_gripper_l_finger_tip_collision + 100.0 + + true + 100.0 + r_gripper_l_finger_tip_bumper + + + + + + + + + + + + + + + + + true + + + r_gripper_r_finger_tip_collision + 100.0 + + true + 100.0 + r_gripper_r_finger_tip_bumper + + + + + + + + + + + + + + + + + true + 100.0 + r_gripper_l_finger_link + r_gripper_l_finger_pose_ground_truth + 0.0 + map + + + + true + 100.0 + r_gripper_l_finger_link + r_gripper_l_finger_force_ground_truth + r_gripper_l_finger_link + + + + + + + + + + + + + + + + true + + r_gripper_palm_collision + 100.0 + + true + 100.0 + r_gripper_palm_bumper + + + + + + true + + + r_gripper_l_finger_tip_link + r_gripper_float_link + r_gripper_l_finger_tip_link + 0 1 0 + 0 0 0 + + + r_gripper_r_finger_tip_link + r_gripper_float_link + r_gripper_r_finger_tip_link + 0 1 0 + 0 0 0 + + + + + true + 100.0 + r_gripper_palm_link + r_gripper_palm_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + map + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + l_shoulder_pan_collision + 100.0 + + true + 100.0 + l_shoulder_pan_bumper + + + + + true + + + + + l_shoulder_lift_collision_geom + 100.0 + + true + 100.0 + l_r_shoulder_lift_bumper + + + + true + + + + + + true + + + + + + l_upper_arm_collision_geom + 100.0 + + true + 100.0 + l_upper_arm_bumper + + + + true + + + + l_elbow_flex_collision_geom + 100.0 + + true + 100.0 + l_elbow_flex_bumper + + + + + + + true + + + + true + + true + + l_forearm_collision + 100.0 + + true + 100.0 + l_forearm_bumper + + + + + + true + + l_wrist_flex_collision + 100.0 + + true + 100.0 + l_wrist_flex_bumper + + + + + + + + true + + l_wrist_roll_collision + 100.0 + + true + 100.0 + l_wrist_roll_bumper + + + + + + + + + 63.16 + + + + 61.89 + + + + 32.65 + + + + -36.17 + + + + 90.5142857143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + l_gripper_l_finger_collision + 100.0 + + true + 100.0 + l_gripper_l_finger_bumper + + + + + + + + + + + + + + + true + + l_gripper_r_finger_collision + 100.0 + + true + 100.0 + l_gripper_r_finger_bumper + + + + + + + + + + + + + + + + + + true + + + l_gripper_l_finger_tip_collision + 100.0 + + true + 100.0 + l_gripper_l_finger_tip_bumper + + + + + + + + + + + + + + + + + true + + + l_gripper_r_finger_tip_collision + 100.0 + + true + 100.0 + l_gripper_r_finger_tip_bumper + + + + + + + + + + + + + + + + + true + 100.0 + l_gripper_l_finger_link + l_gripper_l_finger_pose_ground_truth + 0.0 + map + + + + true + 100.0 + l_gripper_l_finger_link + l_gripper_l_finger_force_ground_truth + l_gripper_l_finger_link + + + + + + + + + + + + + + + + true + + l_gripper_palm_collision + 100.0 + + true + 100.0 + l_gripper_palm_bumper + + + + + + true + + + l_gripper_l_finger_tip_link + l_gripper_float_link + l_gripper_l_finger_tip_link + 0 1 0 + 0 0 0 + + + l_gripper_r_finger_tip_link + l_gripper_float_link + l_gripper_r_finger_tip_link + 0 1 0 + 0 0 0 + + + + + true + 100.0 + l_gripper_palm_link + l_gripper_palm_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + map + + + + true + + + + + + + + + + + + + + + + + + + + + diff --git a/urdf/test/pr2_desc_bracket.xml b/urdf/test/pr2_desc_bracket.xml new file mode 100644 index 0000000..d0caaa8 --- /dev/null +++ b/urdf/test/pr2_desc_bracket.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/urdf/test/pr2_desc_double.xml b/urdf/test/pr2_desc_double.xml new file mode 100644 index 0000000..10bbd4c --- /dev/null +++ b/urdf/test/pr2_desc_double.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/urdf/test/pr2_desc_double_joint.xml b/urdf/test/pr2_desc_double_joint.xml new file mode 100644 index 0000000..2974a7a --- /dev/null +++ b/urdf/test/pr2_desc_double_joint.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/urdf/test/pr2_desc_loop.xml b/urdf/test/pr2_desc_loop.xml new file mode 100644 index 0000000..ab21024 --- /dev/null +++ b/urdf/test/pr2_desc_loop.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/urdf/test/pr2_desc_no_joint.xml b/urdf/test/pr2_desc_no_joint.xml new file mode 100644 index 0000000..0f17fe0 --- /dev/null +++ b/urdf/test/pr2_desc_no_joint.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/urdf/test/pr2_desc_no_joint2.xml b/urdf/test/pr2_desc_no_joint2.xml new file mode 100644 index 0000000..7b37fbe --- /dev/null +++ b/urdf/test/pr2_desc_no_joint2.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/urdf/test/pr2_desc_parent_itself.xml b/urdf/test/pr2_desc_parent_itself.xml new file mode 100644 index 0000000..5eda24d --- /dev/null +++ b/urdf/test/pr2_desc_parent_itself.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/urdf/test/pr2_desc_two_trees.xml b/urdf/test/pr2_desc_two_trees.xml new file mode 100644 index 0000000..415e74c --- /dev/null +++ b/urdf/test/pr2_desc_two_trees.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/urdf/test/test_robot_model_parser.cpp b/urdf/test/test_robot_model_parser.cpp new file mode 100644 index 0000000..efef0fb --- /dev/null +++ b/urdf/test/test_robot_model_parser.cpp @@ -0,0 +1,98 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Wim Meeussen */ + +#include +#include +#include "urdf/model.h" + +// Including ros, just to be able to call ros::init(), to remove unwanted +// args from command-line. +#include + +using namespace urdf; + +int g_argc; +char** g_argv; + +class TestParser : public testing::Test +{ +public: + Model robot; + +protected: + /// constructor + TestParser() + { + } + + + /// Destructor + ~TestParser() + { + } +}; + + + + +TEST_F(TestParser, test) +{ + for (int i=1; i + + From c30e3247121f976bcdccd31d38285c756f387361 Mon Sep 17 00:00:00 2001 From: meeussen Date: Wed, 9 Sep 2009 00:28:23 +0000 Subject: [PATCH 002/245] tf publishes on new topic: \tf. See ticket #2381 --- robot_state_publisher/src/robot_state_publisher.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robot_state_publisher/src/robot_state_publisher.cpp b/robot_state_publisher/src/robot_state_publisher.cpp index bc996a1..d214eaa 100644 --- a/robot_state_publisher/src/robot_state_publisher.cpp +++ b/robot_state_publisher/src/robot_state_publisher.cpp @@ -56,7 +56,7 @@ RobotStatePublisher::RobotStatePublisher(const Tree& tree) solver_.reset(new TreeFkSolverPosFull_recursive(tree_)); // advertise tf message - tf_publisher_ = n_.advertise("/tf_message", 5); + tf_publisher_ = n_.advertise("/tf", 5); tf_msg_.transforms.resize(tree.getNrOfSegments()-1); // get the 'real' root segment of the tree, which is the first child of "root" From 4e72237dee5248dda44cfc1b920e95cf76285ae2 Mon Sep 17 00:00:00 2001 From: meeussen Date: Wed, 9 Sep 2009 16:45:42 +0000 Subject: [PATCH 003/245] make robot state publisher compabible with ros 0.8 --- robot_state_publisher/src/joint_state_listener.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/robot_state_publisher/src/joint_state_listener.cpp b/robot_state_publisher/src/joint_state_listener.cpp index 3ef26a1..89ba292 100644 --- a/robot_state_publisher/src/joint_state_listener.cpp +++ b/robot_state_publisher/src/joint_state_listener.cpp @@ -46,16 +46,16 @@ using namespace robot_state_publisher; JointStateListener::JointStateListener(const KDL::Tree& tree) - : publish_rate_(0.0), state_publisher_(tree) + : n_("~"), publish_rate_(0.0), state_publisher_(tree) { // set publish frequency double publish_freq; - n_.param("~publish_frequency", publish_freq, 50.0); + n_.param("publish_frequency", publish_freq, 50.0); publish_rate_ = Rate(publish_freq); // subscribe to mechanism state string joint_state_topic; - n_.param("~joint_state_topic", joint_state_topic, string("joint_states")); + n_.param("joint_state_topic", joint_state_topic, string("/joint_states")); joint_state_sub_ = n_.subscribe(joint_state_topic, 1, &JointStateListener::callbackJointState, this);; }; From 9d943ae2222a4ee6a84245fc5118179126df8f88 Mon Sep 17 00:00:00 2001 From: meeussen Date: Thu, 10 Sep 2009 01:04:59 +0000 Subject: [PATCH 004/245] updating to release 0.2 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 84534d8..cd2f50e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,4 +16,4 @@ set(ROSPACK_MAKEDIST true) # variables. #list(APPEND CPACK_SOURCE_IGNORE_FILES /core/experimental) -rosbuild_make_distribution(0.1.0) +rosbuild_make_distribution(0.2.0) From 0bef72740924f185fd81371a01dfbb1a007fbf03 Mon Sep 17 00:00:00 2001 From: jfaust Date: Fri, 18 Sep 2009 01:16:00 +0000 Subject: [PATCH 005/245] Remove ros/node.h inclusion --- robot_state_publisher/test/test_publisher.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robot_state_publisher/test/test_publisher.cpp b/robot_state_publisher/test/test_publisher.cpp index 0a2d122..3255e3a 100644 --- a/robot_state_publisher/test/test_publisher.cpp +++ b/robot_state_publisher/test/test_publisher.cpp @@ -36,7 +36,7 @@ #include #include -#include +#include #include #include #include From 0e2f7794aa2f99850e2fab9050e4647b50afa3c4 Mon Sep 17 00:00:00 2001 From: meeussen Date: Tue, 22 Sep 2009 18:59:19 +0000 Subject: [PATCH 006/245] remove pr2 urdf file --- kdl_parser/pr2.urdf | 2542 ------------------------------------------- 1 file changed, 2542 deletions(-) delete mode 100644 kdl_parser/pr2.urdf diff --git a/kdl_parser/pr2.urdf b/kdl_parser/pr2.urdf deleted file mode 100644 index 45e35f9c..0000000 --- a/kdl_parser/pr2.urdf +++ /dev/null @@ -1,2542 +0,0 @@ - - - - - - - - - - - - - - - - - - - true - 1000.0 - - - - - - true - 1.0 - 5 - -10.0 - 1.0 - 10.0 - 1200000.0 - diagnostic - battery_state - self_test - - - - - true - 1000.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -75.05 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - fl_caster_l_wheel_collision - 100.0 - - true - 100.0 - fl_caster_l_wheel_bumper - - - - - - - - - - - - - - 75.05 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - fl_caster_r_wheel_collision - 100.0 - - true - 100.0 - fl_caster_r_wheel_bumper - - - - - - - - - - - - - - -75.05 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -75.05 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - fr_caster_l_wheel_collision - 100.0 - - true - 100.0 - fr_caster_l_wheel_bumper - - - - - - - - - - - - - - 75.05 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - fr_caster_r_wheel_collision - 100.0 - - true - 100.0 - fr_caster_r_wheel_bumper - - - - - - - - - - - - - - -75.05 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -75.05 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bl_caster_l_wheel_collision - 100.0 - - true - 100.0 - bl_caster_l_wheel_bumper - - - - - - - - - - - - - - 75.05 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bl_caster_r_wheel_collision - 100.0 - - true - 100.0 - bl_caster_r_wheel_bumper - - - - - - - - - - - - - - -75.05 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -75.05 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - br_caster_l_wheel_collision - 100.0 - - true - 100.0 - br_caster_l_wheel_bumper - - - - - - - - - - - - - - 75.05 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - br_caster_r_wheel_collision - 100.0 - - true - 100.0 - br_caster_r_wheel_bumper - - - - - - - - - - - - - - -75.05 - - - base_collision - 100.0 - - true - 100.0 - base_bumper - - - - - - - - - - true - 100.0 - base_link - base_pose_ground_truth - 0.01 - map - 25.7 25.7 0 - 0 0 0 - - - - - 640 - 640 - 1 - 0.0 0.0 0.0 - false - - -100 - 100 - - 0.05 - 10.0 - 0.01 - 20.0 - - 0.005 - true - 20.0 - base_scan - base_laser - - - - - - - - true - 100.0 - plug_magnet - plug_magnet_pose_ground_truth - 0.01 - map - 0 0 0 - 0 0 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -52143.33 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - r_shoulder_pan_collision - 100.0 - - true - 100.0 - r_shoulder_pan_bumper - - - - - true - - - - - r_shoulder_lift_collision_geom - 100.0 - - true - 100.0 - r_r_shoulder_lift_bumper - - - - true - - - - - - true - - - - - - r_upper_arm_collision_geom - 100.0 - - true - 100.0 - r_upper_arm_bumper - - - - true - - - - r_elbow_flex_collision_geom - 100.0 - - true - 100.0 - r_elbow_flex_bumper - - - - - - - true - - - - true - - true - - r_forearm_collision - 100.0 - - true - 100.0 - r_forearm_bumper - - - - - - true - - r_wrist_flex_collision - 100.0 - - true - 100.0 - r_wrist_flex_bumper - - - - - - - - true - - r_wrist_roll_collision - 100.0 - - true - 100.0 - r_wrist_roll_bumper - - - - - - - - - 63.16 - - - - 61.89 - - - - 32.65 - - - - -36.17 - - - - 90.5142857143 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - r_gripper_l_finger_collision - 100.0 - - true - 100.0 - r_gripper_l_finger_bumper - - - - - - - - - - - - - - - true - - r_gripper_r_finger_collision - 100.0 - - true - 100.0 - r_gripper_r_finger_bumper - - - - - - - - - - - - - - - - - - true - - - r_gripper_l_finger_tip_collision - 100.0 - - true - 100.0 - r_gripper_l_finger_tip_bumper - - - - - - - - - - - - - - - - - true - - - r_gripper_r_finger_tip_collision - 100.0 - - true - 100.0 - r_gripper_r_finger_tip_bumper - - - - - - - - - - - - - - - - - true - 100.0 - r_gripper_l_finger_link - r_gripper_l_finger_pose_ground_truth - 0.0 - map - - - - true - 100.0 - r_gripper_l_finger_link - r_gripper_l_finger_force_ground_truth - r_gripper_l_finger_link - - - - - - - - - - - - - - - - true - - r_gripper_palm_collision - 100.0 - - true - 100.0 - r_gripper_palm_bumper - - - - - - true - - - r_gripper_l_finger_tip_link - r_gripper_float_link - r_gripper_l_finger_tip_link - 0 1 0 - 0 0 0 - - - r_gripper_r_finger_tip_link - r_gripper_float_link - r_gripper_r_finger_tip_link - 0 1 0 - 0 0 0 - - - - - true - 100.0 - r_gripper_palm_link - r_gripper_palm_pose_ground_truth - 0 0 0 - 0 0 0 - 0.0 - map - - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - l_shoulder_pan_collision - 100.0 - - true - 100.0 - l_shoulder_pan_bumper - - - - - true - - - - - l_shoulder_lift_collision_geom - 100.0 - - true - 100.0 - l_r_shoulder_lift_bumper - - - - true - - - - - - true - - - - - - l_upper_arm_collision_geom - 100.0 - - true - 100.0 - l_upper_arm_bumper - - - - true - - - - l_elbow_flex_collision_geom - 100.0 - - true - 100.0 - l_elbow_flex_bumper - - - - - - - true - - - - true - - true - - l_forearm_collision - 100.0 - - true - 100.0 - l_forearm_bumper - - - - - - true - - l_wrist_flex_collision - 100.0 - - true - 100.0 - l_wrist_flex_bumper - - - - - - - - true - - l_wrist_roll_collision - 100.0 - - true - 100.0 - l_wrist_roll_bumper - - - - - - - - - 63.16 - - - - 61.89 - - - - 32.65 - - - - -36.17 - - - - 90.5142857143 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - l_gripper_l_finger_collision - 100.0 - - true - 100.0 - l_gripper_l_finger_bumper - - - - - - - - - - - - - - - true - - l_gripper_r_finger_collision - 100.0 - - true - 100.0 - l_gripper_r_finger_bumper - - - - - - - - - - - - - - - - - - true - - - l_gripper_l_finger_tip_collision - 100.0 - - true - 100.0 - l_gripper_l_finger_tip_bumper - - - - - - - - - - - - - - - - - true - - - l_gripper_r_finger_tip_collision - 100.0 - - true - 100.0 - l_gripper_r_finger_tip_bumper - - - - - - - - - - - - - - - - - true - 100.0 - l_gripper_l_finger_link - l_gripper_l_finger_pose_ground_truth - 0.0 - map - - - - true - 100.0 - l_gripper_l_finger_link - l_gripper_l_finger_force_ground_truth - l_gripper_l_finger_link - - - - - - - - - - - - - - - - true - - l_gripper_palm_collision - 100.0 - - true - 100.0 - l_gripper_palm_bumper - - - - - - true - - - l_gripper_l_finger_tip_link - l_gripper_float_link - l_gripper_l_finger_tip_link - 0 1 0 - 0 0 0 - - - l_gripper_r_finger_tip_link - l_gripper_float_link - l_gripper_r_finger_tip_link - 0 1 0 - 0 0 0 - - - - - true - 100.0 - l_gripper_palm_link - l_gripper_palm_pose_ground_truth - 0 0 0 - 0 0 0 - 0.0 - map - - - - true - - - - - - - - - - - - - - - - - - - - - From ab45fcb1f79cbbf0fc2417d045b916385a9c9715 Mon Sep 17 00:00:00 2001 From: hsu Date: Tue, 22 Sep 2009 22:33:00 +0000 Subject: [PATCH 007/245] update urdf api review status --- urdf/manifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/urdf/manifest.xml b/urdf/manifest.xml index 09294b4..7a41c5a 100644 --- a/urdf/manifest.xml +++ b/urdf/manifest.xml @@ -4,7 +4,7 @@ Wim Meeussen, John Hsu BSD - + http://pr.willowgarage.com/wiki/urdf From 3b4cca5502d12aa878a323f73a10779300e39513 Mon Sep 17 00:00:00 2001 From: hsu Date: Tue, 22 Sep 2009 22:47:49 +0000 Subject: [PATCH 008/245] update comment. --- convex_decomposition/manifest.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/convex_decomposition/manifest.xml b/convex_decomposition/manifest.xml index b061753..4966ea7 100644 --- a/convex_decomposition/manifest.xml +++ b/convex_decomposition/manifest.xml @@ -3,6 +3,10 @@ Convex Mesh Generation Library +This package is used to auto generate convex decomposed meshes for collision and visualization of robot links. +We are using the latest and the only version available. We plan on deprecating this package once we find a better +alternative. + John Ratcliff MIT From 29b6edeafb27695e063bc357d3835334d11f6d05 Mon Sep 17 00:00:00 2001 From: hsu Date: Tue, 22 Sep 2009 22:58:47 +0000 Subject: [PATCH 009/245] udpate manifest comments. --- convex_decomposition/manifest.xml | 6 ++++-- ivcon/manifest.xml | 4 ++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/convex_decomposition/manifest.xml b/convex_decomposition/manifest.xml index 4966ea7..b74c13a 100644 --- a/convex_decomposition/manifest.xml +++ b/convex_decomposition/manifest.xml @@ -4,8 +4,10 @@ Convex Mesh Generation Library This package is used to auto generate convex decomposed meshes for collision and visualization of robot links. -We are using the latest and the only version available. We plan on deprecating this package once we find a better -alternative. +We are using the latest and the only version available. We plan on deprecating this package once we find a better alternative. +This package is not provided by any of the major OS package managers, so it is downloaded as a zipped archive. +There are local patches needed for this package to compile. No plans for submitting the patches back to the author since there appears to be no revision control for the package. +There are no local modifications to this package. John Ratcliff diff --git a/ivcon/manifest.xml b/ivcon/manifest.xml index 2f770e0..6cb1109 100644 --- a/ivcon/manifest.xml +++ b/ivcon/manifest.xml @@ -3,6 +3,10 @@ Mesh Conversion Utility +Used to generate '.iv' files from '.stl' files. This package has not been changed since 2001 and appears to be very stable. We plan on keeping this package in this revision for mesh conversions. +This package is only available as a single source file for download. +There are no local modifications to this package. + John Burkardt GPL From 50df33fc7b61664b0a4045c4f64d01ff58d44ab6 Mon Sep 17 00:00:00 2001 From: meeussen Date: Tue, 22 Sep 2009 23:18:03 +0000 Subject: [PATCH 010/245] update api doc --- .../include/robot_state_publisher/joint_state_listener.h | 5 +++++ .../robot_state_publisher/robot_state_publisher.h | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/robot_state_publisher/include/robot_state_publisher/joint_state_listener.h b/robot_state_publisher/include/robot_state_publisher/joint_state_listener.h index ef2f4fe..d07d1ac 100644 --- a/robot_state_publisher/include/robot_state_publisher/joint_state_listener.h +++ b/robot_state_publisher/include/robot_state_publisher/joint_state_listener.h @@ -52,7 +52,12 @@ namespace robot_state_publisher{ class JointStateListener{ public: + /** Constructor + * \param tree The kinematic model of a robot, represented by a KDL Tree + */ JointStateListener(const KDL::Tree& tree); + + /// Destructor ~JointStateListener(); private: diff --git a/robot_state_publisher/include/robot_state_publisher/robot_state_publisher.h b/robot_state_publisher/include/robot_state_publisher/robot_state_publisher.h index 781082c..755c288 100644 --- a/robot_state_publisher/include/robot_state_publisher/robot_state_publisher.h +++ b/robot_state_publisher/include/robot_state_publisher/robot_state_publisher.h @@ -48,9 +48,18 @@ namespace robot_state_publisher{ class RobotStatePublisher { public: + /** Constructor + * \param tree The kinematic model of a robot, represented by a KDL Tree + */ RobotStatePublisher(const KDL::Tree& tree); + + /// Destructor ~RobotStatePublisher(){}; + /** Publish transforms to tf + * \param joint_positions A map of joint names and joint positions. + * \param time The time at which the joint positions were recorded + */ bool publishTransforms(const std::map& joint_positions, const ros::Time& time); private: From f3e3ecec0b137d984cc16722f4b36f8c0033e3b2 Mon Sep 17 00:00:00 2001 From: meeussen Date: Tue, 22 Sep 2009 23:20:11 +0000 Subject: [PATCH 011/245] add mainpage --- robot_state_publisher/doc.dox | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 robot_state_publisher/doc.dox diff --git a/robot_state_publisher/doc.dox b/robot_state_publisher/doc.dox new file mode 100644 index 0000000..ed23c6a --- /dev/null +++ b/robot_state_publisher/doc.dox @@ -0,0 +1,10 @@ +/** +@mainpage + +@htmlinclude manifest.html + +This package contains the robot state publisher, which can be used as a library or as a ROS node. + \li LIbrary use: robot_state_publisher::RobotStatePublisher + \li Node use: robot_state_publisher::JointStateListener + +**/ From 3105a9f3863eaac8af020719641c43b7ac35bcd9 Mon Sep 17 00:00:00 2001 From: meeussen Date: Tue, 22 Sep 2009 23:37:53 +0000 Subject: [PATCH 012/245] add deprecate warning at compile and at run time. Update regression tests to dom parser --- kdl_parser/include/kdl_parser/dom_parser.hpp | 7 + kdl_parser/include/kdl_parser/xml_parser.hpp | 2 + kdl_parser/src/xml_parser.cpp | 4 +- kdl_parser/test/pr2_desc.xml | 4499 +++++++----------- kdl_parser/test/test_kdl_parser.cpp | 12 +- 5 files changed, 1768 insertions(+), 2756 deletions(-) diff --git a/kdl_parser/include/kdl_parser/dom_parser.hpp b/kdl_parser/include/kdl_parser/dom_parser.hpp index 2e91c47..31d6af4 100644 --- a/kdl_parser/include/kdl_parser/dom_parser.hpp +++ b/kdl_parser/include/kdl_parser/dom_parser.hpp @@ -45,9 +45,16 @@ using namespace std; namespace kdl_parser{ +/// Constructs a KDL tree from a file, given the file name bool treeFromFile(const string& file, KDL::Tree& tree); + +/// Constructs a KDL tree from a string containing xml bool treeFromString(const string& xml, KDL::Tree& tree); + +/// Constructs a KDL tree from a TiXmlDocument bool treeFromXml(TiXmlDocument *xml_doc, KDL::Tree& tree); + +/// Constructs a KDL tree from a URDF robot model bool treeFromRobotModel(urdf::Model& robot_model, KDL::Tree& tree); } diff --git a/kdl_parser/include/kdl_parser/xml_parser.hpp b/kdl_parser/include/kdl_parser/xml_parser.hpp index 89e77e9..4ab0eb1 100644 --- a/kdl_parser/include/kdl_parser/xml_parser.hpp +++ b/kdl_parser/include/kdl_parser/xml_parser.hpp @@ -37,6 +37,8 @@ #ifndef XML_PARSER_H #define XML_PARSER_H +#warning ____YOU ARE INCLUDING THE DEPRECATED KDL PARSER. PLEASE SWITCH TO THE NEW KDL PARSER. SEE www.ros.org/wiki/kdl_parser FOR DETAILS____ + #include #include #include diff --git a/kdl_parser/src/xml_parser.cpp b/kdl_parser/src/xml_parser.cpp index 785577a..b5336ca 100644 --- a/kdl_parser/src/xml_parser.cpp +++ b/kdl_parser/src/xml_parser.cpp @@ -36,7 +36,7 @@ #include #include "kdl_parser/xml_parser.hpp" - +#include using namespace std; namespace KDL{ @@ -265,6 +265,8 @@ void addChildrenToTree(const string& root, const map& segments, bool getTree(TiXmlElement *robot_xml, Tree& tree) { + ROS_ERROR("You are using the deprecated kdl parser. Please update to the new kdl parser. See www.ros.org/wiki/kdl_parser for more details"); + cout << "Parsing robot xml" << endl; if (!robot_xml) return false; diff --git a/kdl_parser/test/pr2_desc.xml b/kdl_parser/test/pr2_desc.xml index 59c6e66..46efbc9 100644 --- a/kdl_parser/test/pr2_desc.xml +++ b/kdl_parser/test/pr2_desc.xml @@ -4,17 +4,16 @@ - - - - - - - - - - - + + + + + + + + + + true @@ -42,140 +41,116 @@ 1000.0 + - - - - - - + - + + + - - + + - - - - - - - + + + + - - - + + + - - - - base_collision - 100.0 - - true - 100.0 - base_bumper - - - - - - - - - - - + + + + + - + - - - - - - - + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - 640 - 640 - 1 - 0.0 0.0 0.0 - false - - -100 - 100 - - 0.05 - 10.0 - 0.01 - 20.0 - - 0.005 - true - 20.0 - base_scan - base_laser - - - - - - + - - - - - - + + + + - + + + - + - + - - - - - + + - + - + @@ -183,148 +158,133 @@ -75.05 - + + + - - - - - - - + + + + + + - + - + - - - - - - + + - + - + - - - - - - - - - - fl_caster_l_wheel_collision - 100.0 - - true - 100.0 - fl_caster_l_wheel_bumper - - - - - - + + + fl_caster_l_wheel_collision + 100.0 + + true + 100.0 + fl_caster_l_wheel_bumper + + + + + + + + + + + 75.05 - + - - - - - - - + + + + + + - + - + - - - - - - + + - + - + - - - - - - - - - - fl_caster_r_wheel_collision - 100.0 - - true - 100.0 - fl_caster_r_wheel_bumper - - - - - - + + + fl_caster_r_wheel_collision + 100.0 + + true + 100.0 + fl_caster_r_wheel_bumper + + + + + + + + + + + -75.05 - + - - - - - - + + + + - + + + - + - + - - - - - + + - + - + @@ -332,148 +292,133 @@ -75.05 - + + + - - - - - - - + + + + + + - + - + - - - - - - + + - + - + - - - - - - - - - - fr_caster_l_wheel_collision - 100.0 - - true - 100.0 - fr_caster_l_wheel_bumper - - - - - - + + + fr_caster_l_wheel_collision + 100.0 + + true + 100.0 + fr_caster_l_wheel_bumper + + + + + + + + + + + 75.05 - + - - - - - - - + + + + + + - + - + - - - - - - + + - + - + - - - - - - - - - - fr_caster_r_wheel_collision - 100.0 - - true - 100.0 - fr_caster_r_wheel_bumper - - - - - - + + + fr_caster_r_wheel_collision + 100.0 + + true + 100.0 + fr_caster_r_wheel_bumper + + + + + + + + + + + -75.05 - + - - - - - - + + + + - + + + - + - + - - - - - + + - + - + @@ -481,148 +426,133 @@ -75.05 - + + + - - - - - - - + + + + + + - + - + - - - - - - + + - + - + - - - - - - - - - - bl_caster_l_wheel_collision - 100.0 - - true - 100.0 - bl_caster_l_wheel_bumper - - - - - - + + + bl_caster_l_wheel_collision + 100.0 + + true + 100.0 + bl_caster_l_wheel_bumper + + + + + + + + + + + 75.05 - + - - - - - - - + + + + + + - + - + - - - - - - + + - + - + - - - - - - - - - - bl_caster_r_wheel_collision - 100.0 - - true - 100.0 - bl_caster_r_wheel_bumper - - - - - - + + + bl_caster_r_wheel_collision + 100.0 + + true + 100.0 + bl_caster_r_wheel_bumper + + + + + + + + + + + -75.05 - + - - - - - - + + + + - + + + - + - + - - - - - + + - + - + @@ -630,2909 +560,1980 @@ -75.05 - + + + - - - - - - - + + + + + + - + - + - - - - - - + + - + - + - - - - - - - - - - br_caster_l_wheel_collision - 100.0 - - true - 100.0 - br_caster_l_wheel_bumper - - - - - - + + + br_caster_l_wheel_collision + 100.0 + + true + 100.0 + br_caster_l_wheel_bumper + + + + + + + + + + + 75.05 - + - - - - - - - + + + + + + - + - + - - - - - - + + - + - + - - - - - - - - - - br_caster_r_wheel_collision - 100.0 - - true - 100.0 - br_caster_r_wheel_bumper - - - - - - + + + br_caster_r_wheel_collision + 100.0 + + true + 100.0 + br_caster_r_wheel_bumper + + + + + + + + + + + -75.05 - - - + + + base_collision + 100.0 + true 100.0 - base_link - base_pose_ground_truth - 0.01 - map - 25.7 25.7 0 - 0 0 0 - - - - + base_bumper + + + + + + + + + + true + 100.0 + base_link + base_pose_ground_truth + 0.01 + map + 25.7 25.7 0 + 0 0 0 + + + + + 640 + 640 + 1 + 0.0 0.0 0.0 + false + + -100 + 100 + + 0.05 + 10.0 + 0.01 + 20.0 + + 0.005 + true + 20.0 + base_scan + base_laser + + + + + + + + true + 100.0 + plug_magnet + plug_magnet_pose_ground_truth + 0.01 + map + 0 0 0 + 0 0 0 + + + + + + + - - - - - - - -52143.33 - - + + + + + + - + + + - + - + - - - - - + + - + - + - - - - torso_lift_collision - 100.0 - - true - 100.0 - torso_lift_bumper - - - - - - + + + + -52143.33 + + + - - - - - - - 6.0 - - + + + + - + + + + - + - + - - - - - + + - + - + - - - - - - - - + + + + + 6.0 - - + + + + + + + + - + + + + - + - + - - - - - + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1024 800 - 60 - 0.1 - 100 - 20.0 - - true - 20.0 - /prosilica/cam_info - /prosilica/image - /prosilica/image_rect - /prosilica/image_rect - high_def_link - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 480 - L8 - 90 - 0.1 - 100 - 20.0 - - true - 20.0 - stereo/left_image - stereo_l_stereo_camera_frame - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 480 - L8 - 90 - 0.1 - 100 - 20.0 - - true - 20.0 - stereo/right_image - stereo_r_stereo_camera_frame - - - - - - - - - true - 20.0 - stereo_l_sensor - stereo_r_sensor - stereo/raw_stereo - stereo_optical_frame - 320 - 320 - 240 - 320 - 0 - 0 - 0 - 0 - 0 - -0.09 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + 6.0 - - - - - - - + + + + + + - - - + + + - + - - + + - + - - + + + + + + + - - - - 640 - 640 - 1 - - 0.0 0.0 0.0 - false - - -80 - 80 - - 0.05 - 10.0 - 0.01 - 20.0 - - 0.005 - true - 20.0 - tilt_scan - laser_tilt_link - - - - - - - + + + + + + + + + + + + + - - + + + + + + - - - - - - - - + + - + - + + - - - - - + + + - - - - + + + + + - - - - r_shoulder_pan_collision - 100.0 - - true - 100.0 - r_shoulder_pan_bumper - - - - - - - true - - - - - 63.16 - + - - - - - - - - - - - + + + + + - + + + + - + - + + - - - - - + + + - - - - + + + + + - - - - r_shoulder_lift_collision - 100.0 - - true - 100.0 - r_r_shoulder_lift_bumper - - - - - - - true - - - - - 61.89 - + - - - - - - - - - - - - - - + + + + + + + + + - + - + + - - - - - + + - + + - + - - true - - - - - 32.65 - - + - + + + - + - + - - - - - + + - - - - + + + + - - - - r_upper_arm_collision - 100.0 - - true - 100.0 - r_upper_arm_bumper - - - - - - - - true - - - - - - - - - - - - - + + + + - + + + + - + - + + - - - - - + + - - - - + + + + + - - - - r_elbow_flex_collision - 100.0 - - true - 100.0 - r_elbow_flex_bumper - - - - - - - true - - - - - -36.17 - - - - - + - - - + + + - - - - - - - + + + + + - + - + - - - - - + + - + - + - - true - - - - - 90.5142857143 - - + - + + + + - + - + + - - - - - + + - - - - + + + + + - - - - r_forearm_collision - 100.0 - - true - 100.0 - r_forearm_bumper - - - - - - - true - - - - - - - - - - - - - + + + + - + + + + - + - + + - - - - - + + - - - - + + + + + - - - - r_wrist_flex_collision - 100.0 - - true - 100.0 - r_wrist_flex_bumper - - - - - - - true - - + - + - - - - - - - + + + - + - + - - - - - + + - + - + - - - - r_wrist_roll_collision - 100.0 - - true - 100.0 - r_wrist_roll_bumper - - - - - - - true - - + + + r_shoulder_pan_collision + 100.0 + + true + 100.0 + r_shoulder_pan_bumper + + + + + true + + + + + r_shoulder_lift_collision_geom + 100.0 + + true + 100.0 + r_r_shoulder_lift_bumper + + + + true + + + + + + true + + + + + + r_upper_arm_collision_geom + 100.0 + + true + 100.0 + r_upper_arm_bumper + + + + true + + + + r_elbow_flex_collision_geom + 100.0 + + true + 100.0 + r_elbow_flex_bumper + + + + + + + true + + + + true + + true + + r_forearm_collision + 100.0 + + true + 100.0 + r_forearm_bumper + + + + + + true + + r_wrist_flex_collision + 100.0 + + true + 100.0 + r_wrist_flex_bumper + + + + + + + + true + + r_wrist_roll_collision + 100.0 + + true + 100.0 + r_wrist_roll_bumper + + + + + + + + + 63.16 + + + + 61.89 + + + + 32.65 + + + + -36.17 + + + + 90.5142857143 + - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - + - + - - - - - + + - - - - - + + + + - - - - - - - r_gripper_palm_collision - 100.0 - - true - 100.0 - r_gripper_palm_bumper - - - - - - - true - - - - - true - 100.0 - r_gripper_palm_link - r_gripper_palm_pose_ground_truth - 0 0 0 - 0 0 0 - 0.0 - map - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - - - - + + - + - + - - true - - - - - true - 100.0 - r_gripper_tool_frame - r_gripper_tool_frame_pose_ground_truth - 0 0 0 - 0 0 0 - 0.0 - map - - - - + - - - - - - - - - - - - - - - - - + + + + + + + + + - + - + - - - - - + + - - - - + + + + - - - - - - - r_gripper_l_finger_collision - 100.0 - - true - 100.0 - r_gripper_l_finger_bumper - - - - - - - true - - - - - - - - - + + + - - - - - - - - - - - - - - - - + + + + - - + - + - - - - - + + - - - - + + + + - - - - - - - r_gripper_r_finger_collision - 100.0 - - true - 100.0 - r_gripper_r_finger_bumper - - - - - - - true - - - - - - - - - + + + - - - - - - - - - - - - - - - - + + + + - - + - + - - - - - + + - - - - + + + + - - - - - - - r_gripper_l_finger_tip_collision - 100.0 - - true - 100.0 - r_gripper_l_finger_tip_bumper - - - - - - - true - - - - - - - - - - + + + - - - - - - - - - - - - - - - - + + + + - - + - + - - - - - + + - - - - + + + + - - - - - - - r_gripper_r_finger_tip_collision - 100.0 - - true - 100.0 - r_gripper_r_finger_tip_bumper - - - - - - - true - - - - - - - - - + + true + + r_gripper_l_finger_collision + 100.0 + true 100.0 - r_gripper_l_finger_link - r_gripper_l_finger_pose_ground_truth - 0.0 - map - - - + r_gripper_l_finger_bumper + + + + + + + + + + + + + + + true + + r_gripper_r_finger_collision + 100.0 + true 100.0 - r_gripper_l_finger_link - r_gripper_l_finger_force_ground_truth - r_gripper_l_finger_link - - - - - - + + + + + true + + + r_gripper_l_finger_tip_collision + 100.0 + true 100.0 - ${prefix}_l_finger_tip_link - ${prefix}_l_finger_tip_pose_ground_truth - 0.0 - map - - - + r_gripper_l_finger_tip_bumper + + + + + + + + + + + + + + + + + true + + + r_gripper_r_finger_tip_collision + 100.0 + true 100.0 - ${prefix}_l_finger_tip_link - ${prefix}_l_finger_tip_force_ground_truth - map - - - --> - - - - - - - - - - - - - - - - - - - - - - - - - + r_gripper_r_finger_tip_bumper + + + + + + + + + + + + + + + + + true + 100.0 + r_gripper_l_finger_link + r_gripper_l_finger_pose_ground_truth + 0.0 + map + + + + true + 100.0 + r_gripper_l_finger_link + r_gripper_l_finger_force_ground_truth + r_gripper_l_finger_link + + + + + + + + + + + - - + + + + true + + r_gripper_palm_collision + 100.0 + + true + 100.0 + r_gripper_palm_bumper + + + + + + true + + + r_gripper_l_finger_tip_link + r_gripper_float_link + r_gripper_l_finger_tip_link + 0 1 0 + 0 0 0 + + + r_gripper_r_finger_tip_link + r_gripper_float_link + r_gripper_r_finger_tip_link + 0 1 0 + 0 0 0 + + + + + true + 100.0 + r_gripper_palm_link + r_gripper_palm_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + map + + + + true + + + + + + + + + + + + + + + + + + + - - + + + + + + - - - - - - - - + + - + - + + - - - - - + + + - - - - + + + + + - - - - l_shoulder_pan_collision - 100.0 - - true - 100.0 - l_shoulder_pan_bumper - - - - - - - true - - - - - 63.16 - + - - - - - - - - - - - + + + + + - + + + + - + - + + - - - - - + + + - - - - + + + + + - - - - l_shoulder_lift_collision - 100.0 - - true - 100.0 - l_r_shoulder_lift_bumper - - - - - - - true - - - - - 61.89 - + - - - - - - - - - - - - - - + + + + + + + + + - + - + + - - - - - + + - + + - + - - true - - - - - 32.65 - - + - + + + - + - + - - - - - + + - - - - + + + + - - - - l_upper_arm_collision - 100.0 - - true - 100.0 - l_upper_arm_bumper - - - - - - - - true - - - - - - - - - - - - - + + + + - + + + + - + - + + - - - - - + + - - - - + + + + + - - - - l_elbow_flex_collision - 100.0 - - true - 100.0 - l_elbow_flex_bumper - - - - - - - true - - - - - -36.17 - - - - - + - - - + + + - - - - - - - + + + + + - + - + - - - - - + + - + - + - - true - - - - - 90.5142857143 - - + - + + + + - + - + + - - - - - + + - - - - + + + + + - - - - l_forearm_collision - 100.0 - - true - 100.0 - l_forearm_bumper - - - - - - - true - - - - - - - - - - - - - + + + + - + + + + - + - + + - - - - - + + - - - - + + + + + - - - - l_wrist_flex_collision - 100.0 - - true - 100.0 - l_wrist_flex_bumper - - - - - - - true - - + - + - - - - - - - + + + - + - + - - - - - + + - + - + - - - - l_wrist_roll_collision - 100.0 - - true - 100.0 - l_wrist_roll_bumper - - - - - - - true - - + + + l_shoulder_pan_collision + 100.0 + + true + 100.0 + l_shoulder_pan_bumper + + + + + true + + + + + l_shoulder_lift_collision_geom + 100.0 + + true + 100.0 + l_r_shoulder_lift_bumper + + + + true + + + + + + true + + + + + + l_upper_arm_collision_geom + 100.0 + + true + 100.0 + l_upper_arm_bumper + + + + true + + + + l_elbow_flex_collision_geom + 100.0 + + true + 100.0 + l_elbow_flex_bumper + + + + + + + true + + + + true + + true + + l_forearm_collision + 100.0 + + true + 100.0 + l_forearm_bumper + + + + + + true + + l_wrist_flex_collision + 100.0 + + true + 100.0 + l_wrist_flex_bumper + + + + + + + + true + + l_wrist_roll_collision + 100.0 + + true + 100.0 + l_wrist_roll_bumper + + + + + + + + + 63.16 + + + + 61.89 + + + + 32.65 + + + + -36.17 + + + + 90.5142857143 + - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - + - + - - - - - + + - - - - - + + + + - - - - - - - l_gripper_palm_collision - 100.0 - - true - 100.0 - l_gripper_palm_bumper - - - - - - - true - - - - - true - 100.0 - l_gripper_palm_link - l_gripper_palm_pose_ground_truth - 0 0 0 - 0 0 0 - 0.0 - map - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - - - - + + - + - + - - true - - - - - true - 100.0 - l_gripper_tool_frame - l_gripper_tool_frame_pose_ground_truth - 0 0 0 - 0 0 0 - 0.0 - map - - - - + - - - - - - - - - - - - - - - - - + + + + + + + + + - + - + - - - - - + + - - - - + + + + - - - - - - - l_gripper_l_finger_collision - 100.0 - - true - 100.0 - l_gripper_l_finger_bumper - - - - - - - true - - - - - - - - - + + + - - - - - - - - - - - - - - - - + + + + - - + - + - - - - - + + - - - - + + + + - - - - - - - l_gripper_r_finger_collision - 100.0 - - true - 100.0 - l_gripper_r_finger_bumper - - - - - - - true - - - - - - - - - + + + - - - - - - - - - - - - - - - - + + + + - - + - + - - - - - + + - - - - + + + + - - - - - - - l_gripper_l_finger_tip_collision - 100.0 - - true - 100.0 - l_gripper_l_finger_tip_bumper - - - - - - - true - - - - - - - - - - + + + - - - - - - - - - - - - - - - - + + + + - - + - + - - - - - + + - - - - + + + + - - - - - - - l_gripper_r_finger_tip_collision - 100.0 - - true - 100.0 - l_gripper_r_finger_tip_bumper - - - - - - - true - - - - - - - - - + + true + + l_gripper_l_finger_collision + 100.0 + true 100.0 - l_gripper_l_finger_link - l_gripper_l_finger_pose_ground_truth - 0.0 - map - - - + l_gripper_l_finger_bumper + + + + + + + + + + + + + + + true + + l_gripper_r_finger_collision + 100.0 + true 100.0 - l_gripper_l_finger_link - l_gripper_l_finger_force_ground_truth - l_gripper_l_finger_link - - - - - - + + + + + true + + + l_gripper_l_finger_tip_collision + 100.0 + true 100.0 - ${prefix}_l_finger_tip_link - ${prefix}_l_finger_tip_pose_ground_truth - 0.0 - map - - - + l_gripper_l_finger_tip_bumper + + + + + + + + + + + + + + + + + true + + + l_gripper_r_finger_tip_collision + 100.0 + true 100.0 - ${prefix}_l_finger_tip_link - ${prefix}_l_finger_tip_force_ground_truth - map - - - --> - - - - - - - - - - - - - - - - - - - - - - - - - + l_gripper_r_finger_tip_bumper + + + + + + + + + + + + + + + + + true + 100.0 + l_gripper_l_finger_link + l_gripper_l_finger_pose_ground_truth + 0.0 + map + + + + true + 100.0 + l_gripper_l_finger_link + l_gripper_l_finger_force_ground_truth + l_gripper_l_finger_link + + + + + + + + + + + - - - - - - - - l_upper_arm_roll_link - r_upper_arm_roll_link - l_elbow_flex_link - r_elbow_flex_link - l_forearm_roll_link - r_forearm_roll_link - l_wrist_flex_link - r_wrist_flex_link - l_wrist_roll_link - r_wrist_roll_link - l_gripper_l_finger_link - l_gripper_r_finger_link - r_gripper_l_finger_link - r_gripper_r_finger_link - r_shoulder_pan_link - r_shoulder_lift_link - l_shoulder_pan_link - l_shoulder_lift_link - torso_lift_link - base_link - - base_link - torso_lift_link - head_pan_link - head_tilt_link - r_shoulder_pan_link - r_shoulder_lift_link - r_upper_arm_roll_link - r_upper_arm_link - r_elbow_flex_link - r_forearm_roll_link - r_forearm_link - r_wrist_flex_link - r_wrist_roll_link - r_gripper_palm_link - r_gripper_l_finger_link - r_gripper_r_finger_link - r_gripper_l_finger_tip_link - r_gripper_r_finger_tip_link - - r_forearm_link - base_link - - r_gripper_palm_link - base_link - - r_gripper_l_finger_link - base_link - - r_gripper_r_finger_link - base_link - - r_gripper_l_finger_tip_link - base_link - - r_gripper_r_finger_tip_link - base_link - - base_link - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - l_shoulder_pan_link - l_shoulder_lift_link - l_upper_arm_roll_link - l_upper_arm_link - l_elbow_flex_link - l_forearm_roll_link - l_forearm_link - l_wrist_flex_link - l_wrist_roll_link - - - - - - - - - - - - - - - - r_shoulder_pan_link - r_shoulder_lift_link - r_upper_arm_roll_link - r_upper_arm_link - r_elbow_flex_link - r_forearm_roll_link - r_forearm_link - r_wrist_flex_link - r_wrist_roll_link - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - base_link - torso_lift_link - l_shoulder_pan_link - l_shoulder_lift_link - l_upper_arm_roll_link - l_upper_arm_link - l_elbow_flex_link - l_forearm_roll_link - l_forearm_link - l_wrist_flex_link - l_wrist_roll_link - - base_link - torso_lift_link - r_shoulder_pan_link - r_shoulder_lift_link - r_upper_arm_roll_link - r_upper_arm_link - r_elbow_flex_link - r_forearm_roll_link - r_forearm_link - r_wrist_flex_link - r_wrist_roll_link - - - - - - - - - - - - - - - - l_shoulder_pan_link - l_shoulder_lift_link - l_upper_arm_roll_link - l_upper_arm_link - l_elbow_flex_link - l_forearm_roll_link - l_forearm_link - l_wrist_flex_link - l_wrist_roll_link - r_shoulder_pan_link - r_shoulder_lift_link - r_upper_arm_roll_link - r_upper_arm_link - r_elbow_flex_link - r_forearm_roll_link - r_forearm_link - r_wrist_flex_link - r_wrist_roll_link - - base_link - torso_lift_link - l_shoulder_pan_link - l_shoulder_lift_link - l_upper_arm_roll_link - l_upper_arm_link - l_elbow_flex_link - l_forearm_roll_link - l_forearm_link - l_wrist_flex_link - l_wrist_roll_link - r_shoulder_pan_link - r_shoulder_lift_link - r_upper_arm_roll_link - r_upper_arm_link - r_elbow_flex_link - r_forearm_roll_link - r_forearm_link - r_wrist_flex_link - r_wrist_roll_link - + + + + true + + l_gripper_palm_collision + 100.0 + + true + 100.0 + l_gripper_palm_bumper + + + + + + true + + + l_gripper_l_finger_tip_link + l_gripper_float_link + l_gripper_l_finger_tip_link + 0 1 0 + 0 0 0 + + + l_gripper_r_finger_tip_link + l_gripper_float_link + l_gripper_r_finger_tip_link + 0 1 0 + 0 0 0 + + + + + true + 100.0 + l_gripper_palm_link + l_gripper_palm_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + map + + + + true + + + + + + + + + + + + + + + diff --git a/kdl_parser/test/test_kdl_parser.cpp b/kdl_parser/test/test_kdl_parser.cpp index 51b6f1f..7a09bfd 100644 --- a/kdl_parser/test/test_kdl_parser.cpp +++ b/kdl_parser/test/test_kdl_parser.cpp @@ -37,9 +37,9 @@ #include #include #include -#include "kdl_parser/xml_parser.hpp" +#include "kdl_parser/dom_parser.hpp" -using namespace KDL; +using namespace kdl_parser; int g_argc; char** g_argv; @@ -47,7 +47,7 @@ char** g_argv; class TestParser : public testing::Test { public: - Tree my_tree; + KDL::Tree my_tree; protected: /// constructor @@ -72,10 +72,10 @@ TEST_F(TestParser, test) } ASSERT_TRUE(treeFromFile(g_argv[g_argc-1], my_tree)); - ASSERT_TRUE(my_tree.getNrOfJoints() == 38); - ASSERT_TRUE(my_tree.getNrOfSegments() == 51); + ASSERT_EQ(my_tree.getNrOfJoints(), (unsigned int)39); + ASSERT_EQ(my_tree.getNrOfSegments(), (unsigned int)51); ASSERT_TRUE(my_tree.getSegment("world") == my_tree.getRootSegment()); - ASSERT_TRUE(my_tree.getRootSegment()->second.children.size() == 1); + ASSERT_EQ(my_tree.getRootSegment()->second.children.size(), (unsigned int)1); ASSERT_TRUE(my_tree.getSegment("base_link")->second.parent == my_tree.getRootSegment()); SUCCEED(); } From 75d02234ffc4aa6a049a9e586036c0b689386418 Mon Sep 17 00:00:00 2001 From: meeussen Date: Tue, 22 Sep 2009 23:45:05 +0000 Subject: [PATCH 013/245] doc review passed --- convex_decomposition/manifest.xml | 16 ++++++++++------ ivcon/manifest.xml | 10 ++++++---- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/convex_decomposition/manifest.xml b/convex_decomposition/manifest.xml index b74c13a..e9d8413 100644 --- a/convex_decomposition/manifest.xml +++ b/convex_decomposition/manifest.xml @@ -3,16 +3,20 @@ Convex Mesh Generation Library -This package is used to auto generate convex decomposed meshes for collision and visualization of robot links. -We are using the latest and the only version available. We plan on deprecating this package once we find a better alternative. -This package is not provided by any of the major OS package managers, so it is downloaded as a zipped archive. -There are local patches needed for this package to compile. No plans for submitting the patches back to the author since there appears to be no revision control for the package. -There are no local modifications to this package. +This package is used to auto generate convex decomposed meshes for +collision and visualization of robot links. We are using the latest +and the only version available. We plan on deprecating this package +once we find a better alternative. This package is not provided by +any of the major OS package managers, so it is downloaded as a zipped +archive. There are local patches needed for this package to compile. +No plans for submitting the patches back to the author since there +appears to be no revision control for the package. There are no local +modifications to this package. John Ratcliff MIT - + http://www.amillionpixels.us/ConvexDecomposition.zip diff --git a/ivcon/manifest.xml b/ivcon/manifest.xml index 6cb1109..c9cf53c 100644 --- a/ivcon/manifest.xml +++ b/ivcon/manifest.xml @@ -3,14 +3,16 @@ Mesh Conversion Utility -Used to generate '.iv' files from '.stl' files. This package has not been changed since 2001 and appears to be very stable. We plan on keeping this package in this revision for mesh conversions. -This package is only available as a single source file for download. -There are no local modifications to this package. +Used to generate '.iv' files from '.stl' files. This package has not +been changed since 2001 and appears to be very stable. We plan on +keeping this package in this revision for mesh conversions. This +package is only available as a single source file for download. There +are no local modifications to this package. John Burkardt GPL - + https://sourceforge.net/projects/ivcon/ From a173462840da6fe0b0464f706fb20b97bf6710c3 Mon Sep 17 00:00:00 2001 From: meeussen Date: Wed, 23 Sep 2009 16:29:50 +0000 Subject: [PATCH 014/245] updating to release 0.3.0 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cd2f50e..0f82be8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,4 +16,4 @@ set(ROSPACK_MAKEDIST true) # variables. #list(APPEND CPACK_SOURCE_IGNORE_FILES /core/experimental) -rosbuild_make_distribution(0.2.0) +rosbuild_make_distribution(0.3.0) From 45a08f37e33c48b9c25c0899a06dafcb18e05533 Mon Sep 17 00:00:00 2001 From: meeussen Date: Wed, 23 Sep 2009 23:48:19 +0000 Subject: [PATCH 015/245] vijay comments on api review --- robot_state_publisher/CMakeLists.txt | 2 +- robot_state_publisher/doc.dox | 7 ++++--- .../include/robot_state_publisher/robot_state_publisher.h | 1 + robot_state_publisher/src/joint_state_listener.cpp | 4 +--- ...{state_publisher.cpp => robot_state_publisher_node.cpp} | 5 ++--- 5 files changed, 9 insertions(+), 10 deletions(-) rename robot_state_publisher/src/{state_publisher.cpp => robot_state_publisher_node.cpp} (94%) diff --git a/robot_state_publisher/CMakeLists.txt b/robot_state_publisher/CMakeLists.txt index 71711b7..3cffa58 100644 --- a/robot_state_publisher/CMakeLists.txt +++ b/robot_state_publisher/CMakeLists.txt @@ -24,7 +24,7 @@ set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) rosbuild_add_library(${PROJECT_NAME} src/joint_state_listener.cpp src/robot_state_publisher.cpp src/treefksolverposfull_recursive.cpp) -rosbuild_add_executable(state_publisher src/state_publisher.cpp ) +rosbuild_add_executable(state_publisher src/robot_state_publisher_node.cpp ) target_link_libraries(state_publisher ${PROJECT_NAME}) rosbuild_add_executable(test_publisher test/test_publisher.cpp ) diff --git a/robot_state_publisher/doc.dox b/robot_state_publisher/doc.dox index ed23c6a..9267270 100644 --- a/robot_state_publisher/doc.dox +++ b/robot_state_publisher/doc.dox @@ -3,8 +3,9 @@ @htmlinclude manifest.html -This package contains the robot state publisher, which can be used as a library or as a ROS node. - \li LIbrary use: robot_state_publisher::RobotStatePublisher - \li Node use: robot_state_publisher::JointStateListener +This package contains the robot state publisher, which can be used as +a library or as a ROS node. The API documentation for the library can +be found here: robot_state_publisher::RobotStatePublisher + **/ diff --git a/robot_state_publisher/include/robot_state_publisher/robot_state_publisher.h b/robot_state_publisher/include/robot_state_publisher/robot_state_publisher.h index 755c288..e889420 100644 --- a/robot_state_publisher/include/robot_state_publisher/robot_state_publisher.h +++ b/robot_state_publisher/include/robot_state_publisher/robot_state_publisher.h @@ -59,6 +59,7 @@ public: /** Publish transforms to tf * \param joint_positions A map of joint names and joint positions. * \param time The time at which the joint positions were recorded + * returns true on success; return false when the joint positions don't match the kinematic robot model */ bool publishTransforms(const std::map& joint_positions, const ros::Time& time); diff --git a/robot_state_publisher/src/joint_state_listener.cpp b/robot_state_publisher/src/joint_state_listener.cpp index 89ba292..2505130 100644 --- a/robot_state_publisher/src/joint_state_listener.cpp +++ b/robot_state_publisher/src/joint_state_listener.cpp @@ -54,9 +54,7 @@ JointStateListener::JointStateListener(const KDL::Tree& tree) publish_rate_ = Rate(publish_freq); // subscribe to mechanism state - string joint_state_topic; - n_.param("joint_state_topic", joint_state_topic, string("/joint_states")); - joint_state_sub_ = n_.subscribe(joint_state_topic, 1, &JointStateListener::callbackJointState, this);; + joint_state_sub_ = n_.subscribe("/joint_states", 1, &JointStateListener::callbackJointState, this);; }; diff --git a/robot_state_publisher/src/state_publisher.cpp b/robot_state_publisher/src/robot_state_publisher_node.cpp similarity index 94% rename from robot_state_publisher/src/state_publisher.cpp rename to robot_state_publisher/src/robot_state_publisher_node.cpp index 6fb4143..137cafc 100644 --- a/robot_state_publisher/src/state_publisher.cpp +++ b/robot_state_publisher/src/robot_state_publisher_node.cpp @@ -57,9 +57,8 @@ int main(int argc, char** argv) NodeHandle node; // gets the location of the robot description on the parameter server - string param_name, full_param_name; - node.param("~/robot_desc_param", param_name, string("robot_description")); - node.searchParam(param_name,full_param_name); + string full_param_name; + node.searchParam("robot_description",full_param_name); string robot_desc; // constructs a kdl tree from the robot model From f1aa1653845be88145ce017c49d5026856d69e14 Mon Sep 17 00:00:00 2001 From: meeussen Date: Thu, 24 Sep 2009 00:52:51 +0000 Subject: [PATCH 016/245] update doc. more detailled explanation in the wiki --- .../include/robot_state_publisher/robot_state_publisher.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robot_state_publisher/include/robot_state_publisher/robot_state_publisher.h b/robot_state_publisher/include/robot_state_publisher/robot_state_publisher.h index e889420..e2c5248 100644 --- a/robot_state_publisher/include/robot_state_publisher/robot_state_publisher.h +++ b/robot_state_publisher/include/robot_state_publisher/robot_state_publisher.h @@ -59,7 +59,7 @@ public: /** Publish transforms to tf * \param joint_positions A map of joint names and joint positions. * \param time The time at which the joint positions were recorded - * returns true on success; return false when the joint positions don't match the kinematic robot model + * returns true on success; return false when the robot model is empty or not all the joints in the robot model are specified in the joint map. */ bool publishTransforms(const std::map& joint_positions, const ros::Time& time); From 52e16fec86514258357f2e7102c29bc922cf19de Mon Sep 17 00:00:00 2001 From: meeussen Date: Thu, 24 Sep 2009 00:54:56 +0000 Subject: [PATCH 017/245] api review finished --- robot_state_publisher/manifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robot_state_publisher/manifest.xml b/robot_state_publisher/manifest.xml index 8da7560..083d62c 100644 --- a/robot_state_publisher/manifest.xml +++ b/robot_state_publisher/manifest.xml @@ -10,7 +10,7 @@ Wim Meeussen meeussen@willowgarage.com BSD - + http://pr.willowgarage.com/wiki/robot_state_publisher From 64b62bae13fe9a3d3ab133f411c269d645622e07 Mon Sep 17 00:00:00 2001 From: hsu Date: Thu, 24 Sep 2009 18:55:18 +0000 Subject: [PATCH 018/245] update error messages. --- urdf/src/model.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/urdf/src/model.cpp b/urdf/src/model.cpp index 106e3d5..9b301a4 100644 --- a/urdf/src/model.cpp +++ b/urdf/src/model.cpp @@ -283,7 +283,7 @@ bool Model::initTree(std::map &parent_link_tree) if (!parent_link) { - ROS_ERROR(" parent link '%s' is not found", parent_link_name.c_str()); + ROS_ERROR(" parent link '%s' of joint '%s' not found", parent_link_name.c_str(), joint->first.c_str() ); return false; } else @@ -294,7 +294,7 @@ bool Model::initTree(std::map &parent_link_tree) if (!child_link) { - ROS_ERROR(" for joint: %s child link '%s' is not found",joint->first.c_str(),child_link_name.c_str()); + ROS_ERROR(" child link '%s' of joint: %s not found",child_link_name.c_str(),joint->first.c_str()); return false; } else From 98cc89c86fea5ff7d2ba4ca307c324daf9d172f4 Mon Sep 17 00:00:00 2001 From: meeussen Date: Thu, 24 Sep 2009 20:24:19 +0000 Subject: [PATCH 019/245] api review kdl_parser --- kdl_parser/CMakeLists.txt | 6 +- kdl_parser/include/kdl_parser/dom_parser.hpp | 61 +------------ kdl_parser/include/kdl_parser/kdl_parser.hpp | 86 +++++++++++++++++++ kdl_parser/manifest.xml | 2 +- .../src/{dom_parser.cpp => kdl_parser.cpp} | 11 ++- .../test/{example_dom.cpp => example.cpp} | 4 +- kdl_parser/test/test_kdl_parser.cpp | 2 +- 7 files changed, 103 insertions(+), 69 deletions(-) create mode 100644 kdl_parser/include/kdl_parser/kdl_parser.hpp rename kdl_parser/src/{dom_parser.cpp => kdl_parser.cpp} (93%) rename kdl_parser/test/{example_dom.cpp => example.cpp} (97%) diff --git a/kdl_parser/CMakeLists.txt b/kdl_parser/CMakeLists.txt index 2bd8fce..bc12b36 100644 --- a/kdl_parser/CMakeLists.txt +++ b/kdl_parser/CMakeLists.txt @@ -23,13 +23,13 @@ set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) #uncomment if you have defined services #gensrv() -rosbuild_add_library(${PROJECT_NAME} src/xml_parser.cpp src/dom_parser.cpp) +rosbuild_add_library(${PROJECT_NAME} src/xml_parser.cpp src/kdl_parser.cpp) rosbuild_add_executable(example_xml test/example_xml.cpp ) target_link_libraries(example_xml ${PROJECT_NAME}) -rosbuild_add_executable(example_dom test/example_dom.cpp ) -target_link_libraries(example_dom ${PROJECT_NAME}) +rosbuild_add_executable(example test/example.cpp ) +target_link_libraries(example ${PROJECT_NAME}) rosbuild_add_executable(test_parser test/test_kdl_parser.cpp ) target_link_libraries(test_parser ${PROJECT_NAME}) diff --git a/kdl_parser/include/kdl_parser/dom_parser.hpp b/kdl_parser/include/kdl_parser/dom_parser.hpp index 31d6af4..c29d67c 100644 --- a/kdl_parser/include/kdl_parser/dom_parser.hpp +++ b/kdl_parser/include/kdl_parser/dom_parser.hpp @@ -1,61 +1,4 @@ -/********************************************************************* -* Software License Agreement (BSD License) -* -* Copyright (c) 2008, Willow Garage, Inc. -* All rights reserved. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions -* are met: -* -* * Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* * Redistributions in binary form must reproduce the above -* copyright notice, this list of conditions and the following -* disclaimer in the documentation and/or other materials provided -* with the distribution. -* * Neither the name of the Willow Garage nor the names of its -* contributors may be used to endorse or promote products derived -* from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -* POSSIBILITY OF SUCH DAMAGE. -*********************************************************************/ -/* Author: Wim Meeussen */ +#warning ____YOU ARE INCLUDING THE DEPRECATED KDL PARSER. PLEASE SWITCH TO THE NEW KDL PARSER. SEE www.ros.org/wiki/kdl_parser FOR DETAILS____ -#ifndef DOM_PARSER_H -#define DOM_PARSER_H - -#include -#include -#include - -using namespace std; - -namespace kdl_parser{ - -/// Constructs a KDL tree from a file, given the file name -bool treeFromFile(const string& file, KDL::Tree& tree); - -/// Constructs a KDL tree from a string containing xml -bool treeFromString(const string& xml, KDL::Tree& tree); - -/// Constructs a KDL tree from a TiXmlDocument -bool treeFromXml(TiXmlDocument *xml_doc, KDL::Tree& tree); - -/// Constructs a KDL tree from a URDF robot model -bool treeFromRobotModel(urdf::Model& robot_model, KDL::Tree& tree); -} - -#endif +#include diff --git a/kdl_parser/include/kdl_parser/kdl_parser.hpp b/kdl_parser/include/kdl_parser/kdl_parser.hpp new file mode 100644 index 0000000..de84705 --- /dev/null +++ b/kdl_parser/include/kdl_parser/kdl_parser.hpp @@ -0,0 +1,86 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Wim Meeussen */ + +#ifndef KDL_PARSER_H +#define KDL_PARSER_H + +#include +#include +#include + +using namespace std; + +namespace kdl_parser{ + +/** Constructs a KDL tree from a file, given the file name + * \param file The filename from where to read the xml + * \param tree The resulting KDL Tree + * returns true on success, false on failure + */ +bool treeFromFile(const string& file, KDL::Tree& tree); + +/** Constructs a KDL tree from a string containing xml + * \param xml A string containting the xml description of the robot + * \param tree The resulting KDL Tree + * returns true on success, false on failure + */ +bool treeFromString(const string& xml, KDL::Tree& tree); + +/** Constructs a KDL tree from a TiXmlDocument + * \param xml_doc The TiXmlDocument containting the xml description of the robot + * \param tree The resulting KDL Tree + * returns true on success, false on failure + */ +bool treeFromXml(TiXmlDocument *xml_doc, KDL::Tree& tree); + + +/** Constructs a KDL tree from a URDF robot model + * \param robot_model The URDF robot model + * \param tree The resulting KDL Tree + * returns true on success, false on failure + */ +bool treeFromRobotModel(const urdf::Model& robot_model, KDL::Tree& tree); + + +/** Constructs a KDL tree from a URDF robot model + * \param robot_model The URDF robot model + * \param tree The resulting KDL Tree + * returns true on success, false on failure + */ +bool treeFromUrdfModel(const urdf::Model& robot_model, KDL::Tree& tree); +} + +#endif diff --git a/kdl_parser/manifest.xml b/kdl_parser/manifest.xml index 571b60e..76f390a 100644 --- a/kdl_parser/manifest.xml +++ b/kdl_parser/manifest.xml @@ -6,7 +6,7 @@ Wim Meeussen meeussen@willowgarage.com BSD - + http://pr.willowgarage.com/wiki/ diff --git a/kdl_parser/src/dom_parser.cpp b/kdl_parser/src/kdl_parser.cpp similarity index 93% rename from kdl_parser/src/dom_parser.cpp rename to kdl_parser/src/kdl_parser.cpp index a9b75dd..a6d5858 100644 --- a/kdl_parser/src/dom_parser.cpp +++ b/kdl_parser/src/kdl_parser.cpp @@ -34,7 +34,7 @@ /* Author: Wim Meeussen */ -#include "kdl_parser/dom_parser.hpp" +#include "kdl_parser/kdl_parser.hpp" #include @@ -151,11 +151,11 @@ bool treeFromXml(TiXmlDocument *xml_doc, Tree& tree) ROS_ERROR("Could not generate robot model"); return false; } - return treeFromRobotModel(robot_model, tree); + return treeFromUrdfModel(robot_model, tree); } -bool treeFromRobotModel(urdf::Model& robot_model, Tree& tree) +bool treeFromUrdfModel(const urdf::Model& robot_model, Tree& tree) { tree = Tree(robot_model.getRoot()->name); @@ -167,6 +167,11 @@ bool treeFromRobotModel(urdf::Model& robot_model, Tree& tree) return true; } +bool treeFromRobotModel(const urdf::Model& robot_model, Tree& tree) +{ + ROS_ERROR("treeFromRobotModel function is deprecated and replaces by treeFromUrdfModel"); + return treeFromUrdfModel(robot_model, tree); +} } diff --git a/kdl_parser/test/example_dom.cpp b/kdl_parser/test/example.cpp similarity index 97% rename from kdl_parser/test/example_dom.cpp rename to kdl_parser/test/example.cpp index f19f718..edb3a76 100644 --- a/kdl_parser/test/example_dom.cpp +++ b/kdl_parser/test/example.cpp @@ -36,7 +36,7 @@ #include #include -#include "kdl_parser/dom_parser.hpp" +#include "kdl_parser/kdl_parser.hpp" #include using namespace KDL; @@ -50,7 +50,7 @@ int main() {cerr << "Could not generate robot model" << endl; return false;} Tree my_tree; - if (!kdl_parser::treeFromRobotModel(robot_model, my_tree)) + if (!kdl_parser::treeFromUrdfModel(robot_model, my_tree)) {cerr << "Could not extract kdl tree" << endl; return false;} // walk through tree diff --git a/kdl_parser/test/test_kdl_parser.cpp b/kdl_parser/test/test_kdl_parser.cpp index 7a09bfd..d301058 100644 --- a/kdl_parser/test/test_kdl_parser.cpp +++ b/kdl_parser/test/test_kdl_parser.cpp @@ -37,7 +37,7 @@ #include #include #include -#include "kdl_parser/dom_parser.hpp" +#include "kdl_parser/kdl_parser.hpp" using namespace kdl_parser; From 1252dd756626fb78f47c2619f453e875388f1240 Mon Sep 17 00:00:00 2001 From: meeussen Date: Thu, 24 Sep 2009 21:00:56 +0000 Subject: [PATCH 020/245] function deprectation warning at compile time --- kdl_parser/include/kdl_parser/kdl_parser.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kdl_parser/include/kdl_parser/kdl_parser.hpp b/kdl_parser/include/kdl_parser/kdl_parser.hpp index de84705..99aa30f 100644 --- a/kdl_parser/include/kdl_parser/kdl_parser.hpp +++ b/kdl_parser/include/kdl_parser/kdl_parser.hpp @@ -72,7 +72,7 @@ bool treeFromXml(TiXmlDocument *xml_doc, KDL::Tree& tree); * \param tree The resulting KDL Tree * returns true on success, false on failure */ -bool treeFromRobotModel(const urdf::Model& robot_model, KDL::Tree& tree); +bool treeFromRobotModel(const urdf::Model& robot_model, KDL::Tree& tree) __attribute__((deprecated));; /** Constructs a KDL tree from a URDF robot model From 8fbaa701b0eed8c4d027bfb4cdbefedc1a4c5627 Mon Sep 17 00:00:00 2001 From: meeussen Date: Thu, 24 Sep 2009 21:04:08 +0000 Subject: [PATCH 021/245] move away from deprecated functions, and do not use root namespace for subscription --- .../robot_state_publisher/joint_state_listener.h | 2 +- robot_state_publisher/manifest.xml | 12 +++++++----- robot_state_publisher/src/joint_state_listener.cpp | 6 +++--- .../src/robot_state_publisher_node.cpp | 2 +- robot_state_publisher/test/test_publisher.cpp | 6 +++--- 5 files changed, 15 insertions(+), 13 deletions(-) diff --git a/robot_state_publisher/include/robot_state_publisher/joint_state_listener.h b/robot_state_publisher/include/robot_state_publisher/joint_state_listener.h index d07d1ac..2990c4c 100644 --- a/robot_state_publisher/include/robot_state_publisher/joint_state_listener.h +++ b/robot_state_publisher/include/robot_state_publisher/joint_state_listener.h @@ -63,7 +63,7 @@ public: private: void callbackJointState(const JointStateConstPtr& state); - NodeHandle n_; + NodeHandle n_, n_tilde_; Rate publish_rate_; robot_state_publisher::RobotStatePublisher state_publisher_; Subscriber joint_state_sub_; diff --git a/robot_state_publisher/manifest.xml b/robot_state_publisher/manifest.xml index 083d62c..2999a6a 100644 --- a/robot_state_publisher/manifest.xml +++ b/robot_state_publisher/manifest.xml @@ -1,11 +1,13 @@ - This package allows you to publish the state of a robot to the transform library topic. Once the state - gets published, it is available to all components in the system using the transform library. - The package takes the joint angles of the robot as input and publishes the 3D poses - of the robot links, using a kinematic tree model of the robot. The package can both be used - as a library and as a ROS node. + This package allows you to publish the state of a robot to the + transform library topic. Once the state gets published, it is + available to all components in the system using the transform + library. The package takes the joint angles of the robot as input + and publishes the 3D poses of the robot links, using a kinematic + tree model of the robot. The package can both be used as a library + and as a ROS node. Wim Meeussen meeussen@willowgarage.com diff --git a/robot_state_publisher/src/joint_state_listener.cpp b/robot_state_publisher/src/joint_state_listener.cpp index 2505130..4bb67b4 100644 --- a/robot_state_publisher/src/joint_state_listener.cpp +++ b/robot_state_publisher/src/joint_state_listener.cpp @@ -46,15 +46,15 @@ using namespace robot_state_publisher; JointStateListener::JointStateListener(const KDL::Tree& tree) - : n_("~"), publish_rate_(0.0), state_publisher_(tree) + : n_tilde_("~"), publish_rate_(0.0), state_publisher_(tree) { // set publish frequency double publish_freq; - n_.param("publish_frequency", publish_freq, 50.0); + n_tilde_.param("publish_frequency", publish_freq, 50.0); publish_rate_ = Rate(publish_freq); // subscribe to mechanism state - joint_state_sub_ = n_.subscribe("/joint_states", 1, &JointStateListener::callbackJointState, this);; + joint_state_sub_ = n_.subscribe("joint_states", 1, &JointStateListener::callbackJointState, this);; }; diff --git a/robot_state_publisher/src/robot_state_publisher_node.cpp b/robot_state_publisher/src/robot_state_publisher_node.cpp index 137cafc..ec7be7c 100644 --- a/robot_state_publisher/src/robot_state_publisher_node.cpp +++ b/robot_state_publisher/src/robot_state_publisher_node.cpp @@ -36,7 +36,7 @@ #include #include -#include +#include #include #include "robot_state_publisher/joint_state_listener.h" diff --git a/robot_state_publisher/test/test_publisher.cpp b/robot_state_publisher/test/test_publisher.cpp index 3255e3a..ae321fd 100644 --- a/robot_state_publisher/test/test_publisher.cpp +++ b/robot_state_publisher/test/test_publisher.cpp @@ -40,7 +40,7 @@ #include #include #include -#include +#include #include "robot_state_publisher/joint_state_listener.h" @@ -74,7 +74,7 @@ protected: // constructs a kdl tree from the robot model Tree tree; - if (!kdl_parser::treeFromRobotModel(robot_model, tree)) + if (!kdl_parser::treeFromUrdfModel(robot_model, tree)) ROS_ERROR("Failed to extract kdl tree from robot model"); publisher = new JointStateListener(tree); @@ -106,7 +106,7 @@ TEST_F(TestPublisher, test) ASSERT_TRUE(tf.canTransform("l_gripper_palm_link", "fl_caster_r_wheel_link", Time())); ASSERT_FALSE(tf.canTransform("base_link", "wim_link", Time())); - tf::Stamped t; + tf::StampedTransform t; tf.lookupTransform("base_link", "r_gripper_palm_link",Time(), t ); EXPECT_NEAR(t.getOrigin().x(), 0.769198, EPS); EXPECT_NEAR(t.getOrigin().y(), -0.188800, EPS); From bb95b34b880b94230d5e06a33e5a2ca7d14882bf Mon Sep 17 00:00:00 2001 From: meeussen Date: Thu, 24 Sep 2009 21:09:01 +0000 Subject: [PATCH 022/245] add line about stability --- robot_state_publisher/manifest.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/robot_state_publisher/manifest.xml b/robot_state_publisher/manifest.xml index 2999a6a..6f93254 100644 --- a/robot_state_publisher/manifest.xml +++ b/robot_state_publisher/manifest.xml @@ -7,7 +7,8 @@ library. The package takes the joint angles of the robot as input and publishes the 3D poses of the robot links, using a kinematic tree model of the robot. The package can both be used as a library - and as a ROS node. + and as a ROS node. This package has been well tested and the code + is stable. No major changes are planned in the near future Wim Meeussen meeussen@willowgarage.com From e93e556ca1a41adf2cea5d6572ffd0717df345dc Mon Sep 17 00:00:00 2001 From: meeussen Date: Thu, 24 Sep 2009 21:38:08 +0000 Subject: [PATCH 023/245] kdl parser is doc reviewed --- kdl_parser/manifest.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kdl_parser/manifest.xml b/kdl_parser/manifest.xml index 76f390a..f98b019 100644 --- a/kdl_parser/manifest.xml +++ b/kdl_parser/manifest.xml @@ -6,8 +6,8 @@ Wim Meeussen meeussen@willowgarage.com BSD - - http://pr.willowgarage.com/wiki/ + + http://ros.org/wiki/kdl_parser From 14f9aef082a0f4c8684ae3d28b40b20c3ef3ad6f Mon Sep 17 00:00:00 2001 From: kwc Date: Tue, 29 Sep 2009 20:44:09 +0000 Subject: [PATCH 024/245] updated stack description and removed old stack properties --- stack.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stack.xml b/stack.xml index 8aa3a36..9b6193a 100644 --- a/stack.xml +++ b/stack.xml @@ -1,6 +1,6 @@ - + - These are robot_model-related packages. + robot_model contains packages for modeling various aspects of robot information. John Hsu johnhsu@willowgarage.com BSD From 6028e8a3f2c2db5abf27aeb9e48c12f6c05f369a Mon Sep 17 00:00:00 2001 From: kwc Date: Tue, 29 Sep 2009 20:48:56 +0000 Subject: [PATCH 025/245] updated description --- convex_decomposition/manifest.xml | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/convex_decomposition/manifest.xml b/convex_decomposition/manifest.xml index e9d8413..a2e0ac2 100644 --- a/convex_decomposition/manifest.xml +++ b/convex_decomposition/manifest.xml @@ -1,17 +1,21 @@ -Convex Mesh Generation Library - -This package is used to auto generate convex decomposed meshes for -collision and visualization of robot links. We are using the latest -and the only version available. We plan on deprecating this package -once we find a better alternative. This package is not provided by -any of the major OS package managers, so it is downloaded as a zipped -archive. There are local patches needed for this package to compile. -No plans for submitting the patches back to the author since there -appears to be no revision control for the package. There are no local -modifications to this package. +

+convex_decomposition contains the Convex Mesh Generation Library, by John Ratcliff. This library is used to auto-generate convex decomposed meshes for +collision and visualization of robot links. +

+

+We are using the latest and the only version available. We plan on deprecating this package +once we find a better alternative. +

+

+The Convex Mesh Generation Library is not provided by +any of the major OS package managers, and this version provided +here contains patches required for compilation. +These patches have not been submitted back as there +appears to be no available revision control. +

John Ratcliff From 083ba9b828d48f35e7c589dc3df9965c95a4bd03 Mon Sep 17 00:00:00 2001 From: kwc Date: Tue, 29 Sep 2009 20:50:19 +0000 Subject: [PATCH 026/245] updated description --- kdl_parser/manifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kdl_parser/manifest.xml b/kdl_parser/manifest.xml index f98b019..6c6c552 100644 --- a/kdl_parser/manifest.xml +++ b/kdl_parser/manifest.xml @@ -1,7 +1,7 @@ - The Kinematics and Dynamics Library (KDL) defines a tree structure to represent the kinematic and dynamic parameters of a robot mechanism. This package provides tools to construct a KDL tree from the robot representation in the urdf package. + The Kinematics and Dynamics Library (KDL) defines a tree structure to represent the kinematic and dynamic parameters of a robot mechanism. kdl_parser provides tools to construct a KDL tree from the robot representation in the urdf package. Wim Meeussen meeussen@willowgarage.com From 834777c9a72a1075fc55236f9b6c7720503b5142 Mon Sep 17 00:00:00 2001 From: hsu Date: Wed, 30 Sep 2009 01:52:56 +0000 Subject: [PATCH 027/245] update doxygen. --- urdf/include/urdf/model.h | 16 +++++--- urdf/mainpage.dox | 78 ++++++++------------------------------- 2 files changed, 26 insertions(+), 68 deletions(-) diff --git a/urdf/include/urdf/model.h b/urdf/include/urdf/model.h index 8a3fe37..c54ba52 100644 --- a/urdf/include/urdf/model.h +++ b/urdf/include/urdf/model.h @@ -52,9 +52,13 @@ class Model public: Model(); + /// \brief Load Model from TiXMLElement bool initXml(TiXmlElement *xml); + /// \brief Load Model from TiXMLDocument bool initXml(TiXmlDocument *xml); + /// \brief Load Model given a filename bool initFile(const std::string& filename); + /// \brief Load Model from a XML-string bool initString(const std::string& xmlstring); boost::shared_ptr getRoot(void) const{return this->root_link_;}; @@ -64,18 +68,20 @@ public: void getLinks(std::vector >& links) const; - /// Some accessor functions + /// \brief get parent Link of a Link given name boost::shared_ptr getParentLink(const std::string& name) const; + /// \brief get parent Joint of a Link given name boost::shared_ptr getParentJoint(const std::string& name) const; + /// \brief get child Link of a Link given name boost::shared_ptr getChildLink(const std::string& name) const; + /// \brief get child Joint of a Link given name boost::shared_ptr getChildJoint(const std::string& name) const; - /// Every Robot Description File can be described as a - /// list of Links and Joints - /// The connection between links(nodes) and joints(edges) - /// should define a tree (i.e. 1 parent link, 0+ children links) + /// \brief complete list of Links std::map > links_; + /// \brief complete list of Joints std::map > joints_; + /// \brief complete list of Materials std::map > materials_; private: diff --git a/urdf/mainpage.dox b/urdf/mainpage.dox index 6b3d3b1..05db9ca 100644 --- a/urdf/mainpage.dox +++ b/urdf/mainpage.dox @@ -2,58 +2,11 @@ \mainpage \htmlinclude manifest.html -\b robot_model is ... - - - -\li RobotModel is a class containing robot model data structure. - -\li Below is an example Robot Description Describing a Parent Link "P", a Child Link "C", and a Joint "J" - -\li OLD URDF: - @verbatim - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @endverbatim -\li NEW URDF XML that corresponds to the current RobotModel data structure: +URDF is a class containing robot model data structure. +Every Robot Description File can be described as a list of Links and Joints. +The connection between links(nodes) and joints(edges) should define a tree (i.e. 1 parent link, 0+ children links). +Below is an example Robot Description Describing a Parent Link 'P', a Child Link 'C', and a Joint 'J' +\li NEW URDF XML that corresponds to the current URDF data structure: @verbatim @@ -105,20 +58,19 @@ You can then link to this documentation page from the Wiki. \section codeapi Code API +The URDF parser API contains the following methods: + \li Parse from XML: urdf::Model::initXml + \li Parse from File: urdf::Model::initFile + \li Parse from String: urdf::Model::initString + \li Get Root Link: urdf::Model::getRoot + \li Get Link by name urdf::Model::getLink + \li Get all Link's urdf::Model::getLinks + \li Get Joint by name urdf::Model::getJoint + \li etc. + - \section rosapi ROS API - - - - + + + + @@ -14,6 +16,13 @@ + + + true + 1000.0 + + + true @@ -42,6 +51,7 @@ + @@ -62,6 +72,15 @@ + + + @@ -74,23 +93,24 @@
- - - + + + - - - - - + + + + + - + @@ -101,44 +121,22 @@ - - - + + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - @@ -156,25 +154,25 @@ - + - + - + - + - -75.05 + -75.0676691729 @@ -189,17 +187,17 @@ - + - + - + - + @@ -222,7 +220,7 @@ - 75.05 + 75.0676691729 @@ -237,17 +235,17 @@ - + - + - + - + @@ -270,7 +268,7 @@ - -75.05 + -75.0676691729 @@ -288,25 +286,25 @@ - + - + - + - + - -75.05 + -75.0676691729 @@ -321,17 +319,17 @@ - + - + - + - + @@ -354,7 +352,7 @@ - 75.05 + 75.0676691729 @@ -369,17 +367,17 @@ - + - + - + - + @@ -402,7 +400,7 @@ - -75.05 + -75.0676691729 @@ -420,25 +418,25 @@ - + - + - + - + - -75.05 + -75.0676691729 @@ -453,17 +451,17 @@ - + - + - + - + @@ -486,7 +484,7 @@ - 75.05 + 75.0676691729 @@ -501,17 +499,17 @@ - + - + - + - + @@ -534,7 +532,7 @@ - -75.05 + -75.0676691729 @@ -552,25 +550,25 @@ - + - + - + - + - -75.05 + -75.0676691729 @@ -585,17 +583,17 @@ - + - + - + - + @@ -618,7 +616,7 @@ - 75.05 + 75.0676691729 @@ -633,17 +631,17 @@ - + - + - + - + @@ -666,8 +664,9 @@ - -75.05 + -75.0676691729 + base_link_geom 100.0 @@ -678,12 +677,13 @@ - - - + + + + base_link true 100.0 @@ -695,16 +695,16 @@ 0 0 0 - + true 100.0 - plug_magnet - plug_magnet_pose_ground_truth + plug_holder + plug_holder_pose_ground_truth 0.01 map 0 0 0 0 0 0 - + @@ -714,8 +714,8 @@ 0.0 0.0 0.0 false - -100 - 100 + -135 + 135 0.05 10.0 @@ -731,9 +731,37 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -749,6 +777,7 @@ + @@ -759,22 +788,48 @@ - - + - + + - + + + torso_lift_link_geom + 100.0 + + true + 100.0 + torso_lift_bumper + + + + + + + true + 100.0 + torso_lift_link + imu_data + 0.01 + map + 0 0 0 + 0 0 0 + + + -52143.33 + @@ -820,7 +875,7 @@ - + @@ -927,18 +982,18 @@ - + - + - + - + @@ -956,24 +1011,24 @@ - + - + - + - + - B8G8R8 + R8G8B8 2448 2050 45 0.1 @@ -982,11 +1037,11 @@ true 20.0 - /prosilica/cam_info - /prosilica/image - /prosilica/image_rect - /prosilica/cam_info_service - /prosilica/poll + prosilica/cam_info + prosilica/image + prosilica/image_rect + prosilica/cam_info_service + prosilica/poll hight_def_optical_frame 1224.5 1224.5 @@ -1144,65 +1199,7 @@ - - - - - - - 640 480 - L8 - 90 - 0.1 - 100 - 20.0 - - true - 20.0 - wide_stereo/left_image - wide_stereo_l_stereo_camera_frame - - - - - - - 640 480 - L8 - 90 - 0.1 - 100 - 20.0 - - true - 20.0 - wide_stereo/right_image - wide_stereo_r_stereo_camera_frame - - - - - - - true - 20.0 - wide_stereo_l_sensor - wide_stereo_r_sensor - wide_stereo/raw_stereo - wide_stereo_optical_frame - 320 - 320 - 240 - 320 - 0 - 0 - 0 - 0 - 0 - -0.09 - - - + @@ -1314,7 +1311,67 @@ - + + + + + + + + + 640 480 + L8 + 90 + 0.1 + 100 + 20.0 + + true + 20.0 + wide_stereo/left_image + wide_stereo_l_stereo_camera_frame + + + + + + + 640 480 + L8 + 90 + 0.1 + 100 + 20.0 + + true + 20.0 + wide_stereo/right_image + wide_stereo_r_stereo_camera_frame + + + + + + + true + 20.0 + wide_stereo_l_sensor + wide_stereo_r_sensor + wide_stereo/raw_stereo + wide_stereo_optical_frame + 320 + 320 + 240 + 320 + 0 + 0 + 0 + 0 + 0 + -0.09 + + + @@ -1322,7 +1379,7 @@ 640 480 L8 - 90 + 45 0.1 100 20.0 @@ -1339,7 +1396,7 @@ 640 480 L8 - 90 + 45 0.1 100 20.0 @@ -1363,7 +1420,7 @@ 320 320 240 - 320 + 772.55 0 0 0 @@ -1372,15 +1429,13 @@ -0.09 - - - + - + @@ -1438,7 +1493,6 @@ - @@ -1456,11 +1510,11 @@ 0.05 10.0 0.01 - 20.0 + 40.0 0.005 true - 20.0 + 40.0 tilt_scan laser_tilt_link @@ -1794,7 +1848,6 @@ - true @@ -1931,9 +1984,31 @@
+ + + + + + + + + + + + + + + + + + + + + + - + @@ -1966,22 +2041,20 @@ - - + - + - + - - + @@ -2077,7 +2150,7 @@ - + @@ -2108,7 +2181,7 @@ - + @@ -2132,7 +2205,7 @@ - + @@ -2154,7 +2227,7 @@ - + @@ -2172,12 +2245,12 @@ - + - + - + @@ -2195,9 +2268,9 @@ - + - + true @@ -2218,13 +2291,13 @@ - + - + true @@ -2279,7 +2352,18 @@ map - + + true + 100.0 + r_gripper_tool_frame + r_gripper_tool_frame_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + /map + + + true @@ -2613,7 +2697,6 @@ - true @@ -2750,9 +2833,31 @@ + + + + + + + + + + + + + + + + + + + + + + - + @@ -2785,22 +2890,20 @@ - - + - + - + - - + @@ -2896,7 +2999,7 @@ - + @@ -2927,7 +3030,7 @@ - + @@ -2951,7 +3054,7 @@ - + @@ -2973,7 +3076,7 @@ - + @@ -2991,12 +3094,12 @@ - + - + - + @@ -3014,9 +3117,9 @@ - + - + true @@ -3037,13 +3140,13 @@ - + - + true @@ -3098,7 +3201,18 @@ map - + + true + 100.0 + l_gripper_tool_frame + l_gripper_tool_frame_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + /map + + + true @@ -3110,7 +3224,153 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 90 + 0.1 + 100 + 20.0 + + true + 20.0 + l_forearm_cam/image + l_forearm_cam_frame + + + + true + PR2/Blue + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 90 + 0.1 + 100 + 20.0 + + true + 20.0 + r_forearm_cam/image + r_forearm_cam_frame + + + + true + PR2/Blue + + true + + + From 969b5e6d7a5a6ecba007979183a6e18ca6b24e0a Mon Sep 17 00:00:00 2001 From: meeussen Date: Mon, 26 Oct 2009 19:51:25 +0000 Subject: [PATCH 053/245] fix optional-required field checking --- urdf/src/joint.cpp | 71 +- urdf/src/model.cpp | 3 + urdf/test/pr2_desc.xml | 1773 +++++++++++++++++++++++++++++----------- 3 files changed, 1353 insertions(+), 494 deletions(-) diff --git a/urdf/src/joint.cpp b/urdf/src/joint.cpp index 3f1cfce..345ad49 100644 --- a/urdf/src/joint.cpp +++ b/urdf/src/joint.cpp @@ -1,5 +1,5 @@ /********************************************************************* -* Software License Agreement (BSD License) +* Software Ligcense Agreement (BSD License) * * Copyright (c) 2008, Willow Garage, Inc. * All rights reserved. @@ -45,15 +45,19 @@ bool JointDynamics::initXml(TiXmlElement* config) // Get joint damping const char* damping_str = config->Attribute("damping"); - if (damping_str == NULL) - ROS_DEBUG("joint dynamics: no damping"); + if (damping_str == NULL){ + ROS_DEBUG("joint dynamics: no damping, defaults to 0"); + this->damping = 0; + } else this->damping = atof(damping_str); // Get joint friction const char* friction_str = config->Attribute("friction"); - if (friction_str == NULL) - ROS_DEBUG("joint dynamics: no friction"); + if (friction_str == NULL){ + ROS_DEBUG("joint dynamics: no friction, defaults to 0"); + this->friction = 0; + } else this->friction = atof(friction_str); @@ -74,39 +78,41 @@ bool JointLimits::initXml(TiXmlElement* config) // Get lower joint limit const char* lower_str = config->Attribute("lower"); - if (lower_str == NULL) - ROS_DEBUG("joint limit: no lower"); + if (lower_str == NULL){ + ROS_DEBUG("joint limit: no lower, defaults to 0"); + this->lower = 0; + } else this->lower = atof(lower_str); // Get upper joint limit const char* upper_str = config->Attribute("upper"); - if (upper_str == NULL) - ROS_DEBUG("joint limit: no upper"); + if (upper_str == NULL){ + ROS_DEBUG("joint limit: no upper, , defaults to 0"); + this->upper = 0; + } else this->upper = atof(upper_str); // Get joint effort limit const char* effort_str = config->Attribute("effort"); - if (effort_str == NULL) - ROS_DEBUG("joint limit: no effort"); + if (effort_str == NULL){ + ROS_ERROR("joint limit: no effort"); + return false; + } else this->effort = atof(effort_str); // Get joint velocity limit const char* velocity_str = config->Attribute("velocity"); - if (velocity_str == NULL) - ROS_DEBUG("joint limit: no velocity"); - else - this->velocity = atof(velocity_str); - - if (lower_str == NULL && upper_str == NULL && effort_str == NULL && velocity_str == NULL) - { - ROS_ERROR("joint limit element specified with no readable attributes"); + if (velocity_str == NULL){ + ROS_ERROR("joint limit: no velocity"); return false; } else - return true; + this->velocity = atof(velocity_str); + + return true; } bool JointSafety::initXml(TiXmlElement* config) @@ -146,8 +152,8 @@ bool JointSafety::initXml(TiXmlElement* config) const char* k_velocity_str = config->Attribute("k_velocity"); if (k_velocity_str == NULL) { - ROS_DEBUG("joint safety: no k_velocity, using default value"); - this->k_velocity = 0; + ROS_ERROR("joint safety: no k_velocity"); + return false; } else this->k_velocity = atof(k_velocity_str); @@ -180,8 +186,8 @@ bool JointMimic::initXml(TiXmlElement* config) const char* joint_name_str = config->Attribute("joint"); if (joint_name_str == NULL) { - ROS_WARN("joint mimic: no mimic joint specified"); - return false; + ROS_ERROR("joint mimic: no mimic joint specified"); + //return false; } else this->joint_name = joint_name_str; @@ -328,8 +334,19 @@ bool Joint::initXml(TiXmlElement* config) { ROS_ERROR("Could not parse limit element for joint '%s'", this->name.c_str()); limits.reset(); + return false; } } + else if (this->type == REVOLUTE) + { + ROS_ERROR("Joint '%s' is of type REVOLUTE but it does not specify limits", this->name.c_str()); + return false; + } + else if (this->type == REVOLUTE || this->type == PRISMATIC) + { + ROS_ERROR("Joint '%s' is of type REVOLUTE but it does not specify limits", this->name.c_str()); + limits.reset(); + } // Get safety TiXmlElement *safety_xml = config->FirstChildElement("safety_controller"); @@ -340,6 +357,7 @@ bool Joint::initXml(TiXmlElement* config) { ROS_ERROR("Could not parse safety element for joint '%s'", this->name.c_str()); safety.reset(); + return false; } } @@ -352,6 +370,7 @@ bool Joint::initXml(TiXmlElement* config) { ROS_ERROR("Could not parse calibration element for joint '%s'", this->name.c_str()); calibration.reset(); + return false; } } @@ -362,8 +381,9 @@ bool Joint::initXml(TiXmlElement* config) mimic.reset(new JointMimic); if (!mimic->initXml(mimic_xml)) { - ROS_WARN("Could not parse mimic element for joint '%s'", this->name.c_str()); + ROS_ERROR("Could not parse mimic element for joint '%s'", this->name.c_str()); mimic.reset(); + return false; } } @@ -376,6 +396,7 @@ bool Joint::initXml(TiXmlElement* config) { ROS_ERROR("Could not parse joint_dynamics element for joint '%s'", this->name.c_str()); dynamics.reset(); + return false; } } diff --git a/urdf/src/model.cpp b/urdf/src/model.cpp index 9b301a4..ee3fa9c 100644 --- a/urdf/src/model.cpp +++ b/urdf/src/model.cpp @@ -132,6 +132,7 @@ bool Model::initXml(TiXmlElement *robot_xml) { ROS_ERROR("material xml is not initialized correctly"); material.reset(); + return false; } } @@ -187,6 +188,7 @@ bool Model::initXml(TiXmlElement *robot_xml) { ROS_ERROR("link xml is not initialized correctly"); link.reset(); + return false; } } // Get all Joint elements @@ -213,6 +215,7 @@ bool Model::initXml(TiXmlElement *robot_xml) { ROS_ERROR("joint xml is not initialized correctly"); joint.reset(); + return false; } } diff --git a/urdf/test/pr2_desc.xml b/urdf/test/pr2_desc.xml index 46efbc9..de8f6ed 100644 --- a/urdf/test/pr2_desc.xml +++ b/urdf/test/pr2_desc.xml @@ -1,19 +1,28 @@ - + - - - - - - - - - + + + + + + + + + + + + + true + 1000.0 + + + true @@ -42,7 +51,36 @@ + + + + + + + + + + + + + + + + + + + + + + + @@ -55,22 +93,24 @@ - - - - + + + + + - - - - + + + + + - - + @@ -81,46 +121,19 @@ - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + @@ -141,26 +154,26 @@ - + - - + + + + - + - + - -75.05 - - - + -75.0676691729 + @@ -174,22 +187,23 @@ - + - - + + + - + - + - fl_caster_l_wheel_collision + fl_caster_l_wheel_link_geom 100.0 true @@ -198,17 +212,15 @@ + - - - - + - 75.05 + 75.0676691729 @@ -223,22 +235,23 @@ - + - - + + + - + - + - fl_caster_r_wheel_collision + fl_caster_r_wheel_link_geom 100.0 true @@ -247,17 +260,15 @@ + - - - - + - -75.05 + -75.0676691729 @@ -275,26 +286,26 @@ - + - - + + + + - + - + - -75.05 - - - + -75.0676691729 + @@ -308,22 +319,23 @@ - + - - + + + - + - + - fr_caster_l_wheel_collision + fr_caster_l_wheel_link_geom 100.0 true @@ -332,17 +344,15 @@ + - - - - + - 75.05 + 75.0676691729 @@ -357,22 +367,23 @@ - + - - + + + - + - + - fr_caster_r_wheel_collision + fr_caster_r_wheel_link_geom 100.0 true @@ -381,17 +392,15 @@ + - - - - + - -75.05 + -75.0676691729 @@ -409,26 +418,26 @@ - + - - + + + + - + - + - -75.05 - - - + -75.0676691729 + @@ -442,22 +451,23 @@ - + - - + + + - + - + - bl_caster_l_wheel_collision + bl_caster_l_wheel_link_geom 100.0 true @@ -466,17 +476,15 @@ + - - - - + - 75.05 + 75.0676691729 @@ -491,22 +499,23 @@ - + - - + + + - + - + - bl_caster_r_wheel_collision + bl_caster_r_wheel_link_geom 100.0 true @@ -515,17 +524,15 @@ + - - - - + - -75.05 + -75.0676691729 @@ -543,26 +550,26 @@ - + - - + + + + - + - + - -75.05 - - - + -75.0676691729 + @@ -576,22 +583,23 @@ - + - - + + + - + - + - br_caster_l_wheel_collision + br_caster_l_wheel_link_geom 100.0 true @@ -600,17 +608,15 @@ + - - - - + - 75.05 + 75.0676691729 @@ -625,22 +631,23 @@ - + - - + + + - + - + - br_caster_r_wheel_collision + br_caster_r_wheel_link_geom 100.0 true @@ -649,20 +656,19 @@ + - - - - + - -75.05 + -75.0676691729 + - base_collision + base_link_geom 100.0 true @@ -671,11 +677,13 @@ - - - + + + + + base_link true 100.0 @@ -687,6 +695,17 @@ 0 0 0 + + true + 100.0 + plug_holder + plug_holder_pose_ground_truth + 0.01 + map + 0 0 0 + 0 0 0 + + 640 @@ -695,8 +714,8 @@ 0.0 0.0 0.0 false - -100 - 100 + -135 + 135 0.05 10.0 @@ -712,24 +731,37 @@ - + - - true - 100.0 - plug_magnet - plug_magnet_pose_ground_truth - 0.01 - map - 0 0 0 - 0 0 0 - - - - - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -745,6 +777,7 @@ + @@ -753,24 +786,50 @@ - + + - + - + + - + + + torso_lift_link_geom + 100.0 + + true + 100.0 + torso_lift_bumper + + + + + + + true + 100.0 + torso_lift_link + imu_data + 0.01 + map + 0 0 0 + 0 0 0 + + + -52143.33 - - - + + @@ -792,8 +851,10 @@ - + + + @@ -809,14 +870,12 @@ 6.0 - - - + - + @@ -832,8 +891,10 @@ - + + + @@ -844,9 +905,7 @@ - - - + 6.0 @@ -867,6 +926,8 @@ + + @@ -877,19 +938,593 @@ - - - + - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + R8G8B8 + 2448 2050 + 45 + 0.1 + 100 + 20.0 + + true + 20.0 + prosilica/cam_info + prosilica/image + prosilica/image_rect + prosilica/cam_info_service + prosilica/poll + hight_def_optical_frame + 1224.5 + 1224.5 + 1025.5 + 2955 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 90 + 0.1 + 100 + 20.0 + + true + 20.0 + wide_stereo/left_image + wide_stereo_l_stereo_camera_frame + + + + + + + 640 480 + L8 + 90 + 0.1 + 100 + 20.0 + + true + 20.0 + wide_stereo/right_image + wide_stereo_r_stereo_camera_frame + + + + + + + true + 20.0 + wide_stereo_l_sensor + wide_stereo_r_sensor + wide_stereo/raw_stereo + wide_stereo_optical_frame + 320 + 320 + 240 + 320 + 0 + 0 + 0 + 0 + 0 + -0.09 + + + + + + + + + 640 480 + L8 + 45 + 0.1 + 100 + 20.0 + + true + 20.0 + narrow_stereo/left_image + narrow_stereo_l_stereo_camera_frame + + + + + + + 640 480 + L8 + 45 + 0.1 + 100 + 20.0 + + true + 20.0 + narrow_stereo/right_image + narrow_stereo_r_stereo_camera_frame + + + + + + + true + 20.0 + narrow_stereo_l_sensor + narrow_stereo_r_sensor + narrow_stereo/raw_stereo + narrow_stereo_optical_frame + 320 + 320 + 240 + 772.55 + 0 + 0 + 0 + 0 + 0 + -0.09 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 + 640 + 1 + + 0.0 0.0 0.0 + false + + -80 + 80 + + 0.05 + 10.0 + 0.01 + 40.0 + + 0.005 + true + 40.0 + tilt_scan + laser_tilt_link + + + + + + + 6.0 + @@ -917,15 +1552,15 @@ - + - + - + @@ -934,7 +1569,7 @@ - + @@ -951,15 +1586,15 @@ - + - + - + @@ -984,8 +1619,10 @@ - + + + @@ -1010,14 +1647,16 @@ - + + + - + @@ -1042,14 +1681,16 @@ - + + + - + @@ -1074,8 +1715,10 @@ - + + + @@ -1098,14 +1741,16 @@ - + + + - + @@ -1128,19 +1773,22 @@ - + + + - + - + + @@ -1156,8 +1804,10 @@ - + + + @@ -1168,7 +1818,7 @@ - r_shoulder_pan_collision + r_shoulder_pan_link_geom 100.0 true @@ -1179,11 +1829,12 @@ true + - r_shoulder_lift_collision_geom + r_shoulder_lift_link_geom 100.0 true @@ -1193,18 +1844,19 @@ true + - true + - r_upper_arm_collision_geom + r_upper_arm_link_geom 100.0 true @@ -1217,7 +1869,7 @@ - r_elbow_flex_collision_geom + r_elbow_flex_link_geom 100.0 true @@ -1227,17 +1879,19 @@ + true + - true - true + + true - r_forearm_collision + r_forearm_link_geom 100.0 true @@ -1250,7 +1904,7 @@ true - r_wrist_flex_collision + r_wrist_flex_link_geom 100.0 true @@ -1260,12 +1914,13 @@ + true - r_wrist_roll_collision + r_wrist_roll_link_geom 100.0 true @@ -1275,6 +1930,7 @@ + @@ -1301,25 +1957,7 @@ - - - - - - - - - - - - - - - - - - - + @@ -1334,19 +1972,43 @@ - + + + - + + + + + + + + + + + + + + + + + + + + + + + - - + + @@ -1364,6 +2026,8 @@ + + @@ -1377,20 +2041,20 @@ - - + - + - + + - + @@ -1416,23 +2080,24 @@ - + + + - + - + - - + @@ -1446,23 +2111,24 @@ - + + + - + - + - - + @@ -1476,23 +2142,24 @@ - + + + - + - + - - + @@ -1506,20 +2173,22 @@ - + + + - + true - r_gripper_l_finger_collision + r_gripper_l_finger_link_geom 100.0 true @@ -1534,14 +2203,15 @@ + - + true - r_gripper_r_finger_collision + r_gripper_r_finger_link_geom 100.0 true @@ -1555,19 +2225,16 @@ + - + - - - - true - r_gripper_l_finger_tip_collision + r_gripper_l_finger_tip_link_geom 100.0 true @@ -1578,21 +2245,19 @@ - + - + + - + - - - true - r_gripper_r_finger_tip_collision + r_gripper_r_finger_tip_link_geom 100.0 true @@ -1603,16 +2268,10 @@ - + - - - - - - - - + + true 100.0 @@ -1630,22 +2289,19 @@ r_gripper_l_finger_link - - - - - - - - - + + + + + + - + true - r_gripper_palm_collision + r_gripper_palm_link_geom 100.0 true @@ -1658,6 +2314,7 @@ true + r_gripper_l_finger_tip_link r_gripper_float_link @@ -1683,7 +2340,7 @@ 0.08 --> - + true 100.0 @@ -1695,16 +2352,21 @@ map - + + true + 100.0 + r_gripper_tool_frame + r_gripper_tool_frame_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + /map + + + true - - - - - - - + @@ -1739,15 +2401,15 @@ - + - + - + @@ -1756,7 +2418,7 @@ - + @@ -1773,15 +2435,15 @@ - + - + - + @@ -1806,8 +2468,10 @@ - + + + @@ -1832,14 +2496,16 @@ - + + + - + @@ -1864,14 +2530,16 @@ - + + + - + @@ -1896,8 +2564,10 @@ - + + + @@ -1920,14 +2590,16 @@ - + + + - + @@ -1950,19 +2622,22 @@ - + + + - + - + + @@ -1978,8 +2653,10 @@ - + + + @@ -1990,7 +2667,7 @@ - l_shoulder_pan_collision + l_shoulder_pan_link_geom 100.0 true @@ -2001,11 +2678,12 @@ true + - l_shoulder_lift_collision_geom + l_shoulder_lift_link_geom 100.0 true @@ -2015,18 +2693,19 @@ true + - true + - l_upper_arm_collision_geom + l_upper_arm_link_geom 100.0 true @@ -2039,7 +2718,7 @@ - l_elbow_flex_collision_geom + l_elbow_flex_link_geom 100.0 true @@ -2049,17 +2728,19 @@ + true + - true - true + + true - l_forearm_collision + l_forearm_link_geom 100.0 true @@ -2072,7 +2753,7 @@ true - l_wrist_flex_collision + l_wrist_flex_link_geom 100.0 true @@ -2082,12 +2763,13 @@ + true - l_wrist_roll_collision + l_wrist_roll_link_geom 100.0 true @@ -2097,6 +2779,7 @@ + @@ -2123,25 +2806,7 @@ - - - - - - - - - - - - - - - - - - - + @@ -2156,19 +2821,43 @@ - + + + - + + + + + + + + + + + + + + + + + + + + + + + - - + + @@ -2186,6 +2875,8 @@ + + @@ -2199,20 +2890,20 @@ - - + - + - + + - + @@ -2238,23 +2929,24 @@ - + + + - + - + - - + @@ -2268,23 +2960,24 @@ - + + + - + - + - - + @@ -2298,23 +2991,24 @@ - + + + - + - + - - + @@ -2328,20 +3022,22 @@ - + + + - + true - l_gripper_l_finger_collision + l_gripper_l_finger_link_geom 100.0 true @@ -2356,14 +3052,15 @@ + - + true - l_gripper_r_finger_collision + l_gripper_r_finger_link_geom 100.0 true @@ -2377,19 +3074,16 @@ + - + - - - - true - l_gripper_l_finger_tip_collision + l_gripper_l_finger_tip_link_geom 100.0 true @@ -2400,21 +3094,19 @@ - + - + + - + - - - true - l_gripper_r_finger_tip_collision + l_gripper_r_finger_tip_link_geom 100.0 true @@ -2425,16 +3117,10 @@ - + - - - - - - - - + + true 100.0 @@ -2452,22 +3138,19 @@ l_gripper_l_finger_link - - - - - - - - - + + + + + + - + true - l_gripper_palm_collision + l_gripper_palm_link_geom 100.0 true @@ -2480,6 +3163,7 @@ true + l_gripper_l_finger_tip_link l_gripper_float_link @@ -2505,7 +3189,7 @@ 0.08 --> - + true 100.0 @@ -2517,16 +3201,21 @@ map - + + true + 100.0 + l_gripper_tool_frame + l_gripper_tool_frame_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + /map + + + true - - - - - - - + @@ -2535,7 +3224,153 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 90 + 0.1 + 100 + 20.0 + + true + 20.0 + l_forearm_cam/image + l_forearm_cam_frame + + + + true + PR2/Blue + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 90 + 0.1 + 100 + 20.0 + + true + 20.0 + r_forearm_cam/image + r_forearm_cam_frame + + + + true + PR2/Blue + + true + + + From a5b5ad1665725db920d4b273aeb445f3949c890f Mon Sep 17 00:00:00 2001 From: meeussen Date: Mon, 26 Oct 2009 20:55:28 +0000 Subject: [PATCH 054/245] update expected test results to new xml file --- kdl_parser/test/pr2_desc.xml | 1773 ++++++++++++++++++++------- kdl_parser/test/test_kdl_parser.cpp | 4 +- 2 files changed, 1306 insertions(+), 471 deletions(-) diff --git a/kdl_parser/test/pr2_desc.xml b/kdl_parser/test/pr2_desc.xml index 46efbc9..de8f6ed 100644 --- a/kdl_parser/test/pr2_desc.xml +++ b/kdl_parser/test/pr2_desc.xml @@ -1,19 +1,28 @@ - + - - - - - - - - - + + + + + + + + + + + + + true + 1000.0 + + + true @@ -42,7 +51,36 @@ + + + + + + + + + + + + + + + + + + + + + + + @@ -55,22 +93,24 @@ - - - - + + + + + - - - - + + + + + - - + @@ -81,46 +121,19 @@ - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + @@ -141,26 +154,26 @@ - + - - + + + + - + - + - -75.05 - - - + -75.0676691729 + @@ -174,22 +187,23 @@ - + - - + + + - + - + - fl_caster_l_wheel_collision + fl_caster_l_wheel_link_geom 100.0 true @@ -198,17 +212,15 @@ + - - - - + - 75.05 + 75.0676691729 @@ -223,22 +235,23 @@ - + - - + + + - + - + - fl_caster_r_wheel_collision + fl_caster_r_wheel_link_geom 100.0 true @@ -247,17 +260,15 @@ + - - - - + - -75.05 + -75.0676691729 @@ -275,26 +286,26 @@ - + - - + + + + - + - + - -75.05 - - - + -75.0676691729 + @@ -308,22 +319,23 @@ - + - - + + + - + - + - fr_caster_l_wheel_collision + fr_caster_l_wheel_link_geom 100.0 true @@ -332,17 +344,15 @@ + - - - - + - 75.05 + 75.0676691729 @@ -357,22 +367,23 @@ - + - - + + + - + - + - fr_caster_r_wheel_collision + fr_caster_r_wheel_link_geom 100.0 true @@ -381,17 +392,15 @@ + - - - - + - -75.05 + -75.0676691729 @@ -409,26 +418,26 @@ - + - - + + + + - + - + - -75.05 - - - + -75.0676691729 + @@ -442,22 +451,23 @@ - + - - + + + - + - + - bl_caster_l_wheel_collision + bl_caster_l_wheel_link_geom 100.0 true @@ -466,17 +476,15 @@ + - - - - + - 75.05 + 75.0676691729 @@ -491,22 +499,23 @@ - + - - + + + - + - + - bl_caster_r_wheel_collision + bl_caster_r_wheel_link_geom 100.0 true @@ -515,17 +524,15 @@ + - - - - + - -75.05 + -75.0676691729 @@ -543,26 +550,26 @@ - + - - + + + + - + - + - -75.05 - - - + -75.0676691729 + @@ -576,22 +583,23 @@ - + - - + + + - + - + - br_caster_l_wheel_collision + br_caster_l_wheel_link_geom 100.0 true @@ -600,17 +608,15 @@ + - - - - + - 75.05 + 75.0676691729 @@ -625,22 +631,23 @@ - + - - + + + - + - + - br_caster_r_wheel_collision + br_caster_r_wheel_link_geom 100.0 true @@ -649,20 +656,19 @@ + - - - - + - -75.05 + -75.0676691729 + - base_collision + base_link_geom 100.0 true @@ -671,11 +677,13 @@ - - - + + + + + base_link true 100.0 @@ -687,6 +695,17 @@ 0 0 0 + + true + 100.0 + plug_holder + plug_holder_pose_ground_truth + 0.01 + map + 0 0 0 + 0 0 0 + + 640 @@ -695,8 +714,8 @@ 0.0 0.0 0.0 false - -100 - 100 + -135 + 135 0.05 10.0 @@ -712,24 +731,37 @@ - + - - true - 100.0 - plug_magnet - plug_magnet_pose_ground_truth - 0.01 - map - 0 0 0 - 0 0 0 - - - - - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -745,6 +777,7 @@ + @@ -753,24 +786,50 @@ - + + - + - + + - + + + torso_lift_link_geom + 100.0 + + true + 100.0 + torso_lift_bumper + + + + + + + true + 100.0 + torso_lift_link + imu_data + 0.01 + map + 0 0 0 + 0 0 0 + + + -52143.33 - - - + + @@ -792,8 +851,10 @@ - + + + @@ -809,14 +870,12 @@ 6.0 - - - + - + @@ -832,8 +891,10 @@ - + + + @@ -844,9 +905,7 @@ - - - + 6.0 @@ -867,6 +926,8 @@ + + @@ -877,19 +938,593 @@ - - - + - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + R8G8B8 + 2448 2050 + 45 + 0.1 + 100 + 20.0 + + true + 20.0 + prosilica/cam_info + prosilica/image + prosilica/image_rect + prosilica/cam_info_service + prosilica/poll + hight_def_optical_frame + 1224.5 + 1224.5 + 1025.5 + 2955 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 90 + 0.1 + 100 + 20.0 + + true + 20.0 + wide_stereo/left_image + wide_stereo_l_stereo_camera_frame + + + + + + + 640 480 + L8 + 90 + 0.1 + 100 + 20.0 + + true + 20.0 + wide_stereo/right_image + wide_stereo_r_stereo_camera_frame + + + + + + + true + 20.0 + wide_stereo_l_sensor + wide_stereo_r_sensor + wide_stereo/raw_stereo + wide_stereo_optical_frame + 320 + 320 + 240 + 320 + 0 + 0 + 0 + 0 + 0 + -0.09 + + + + + + + + + 640 480 + L8 + 45 + 0.1 + 100 + 20.0 + + true + 20.0 + narrow_stereo/left_image + narrow_stereo_l_stereo_camera_frame + + + + + + + 640 480 + L8 + 45 + 0.1 + 100 + 20.0 + + true + 20.0 + narrow_stereo/right_image + narrow_stereo_r_stereo_camera_frame + + + + + + + true + 20.0 + narrow_stereo_l_sensor + narrow_stereo_r_sensor + narrow_stereo/raw_stereo + narrow_stereo_optical_frame + 320 + 320 + 240 + 772.55 + 0 + 0 + 0 + 0 + 0 + -0.09 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 + 640 + 1 + + 0.0 0.0 0.0 + false + + -80 + 80 + + 0.05 + 10.0 + 0.01 + 40.0 + + 0.005 + true + 40.0 + tilt_scan + laser_tilt_link + + + + + + + 6.0 + @@ -917,15 +1552,15 @@ - + - + - + @@ -934,7 +1569,7 @@ - + @@ -951,15 +1586,15 @@ - + - + - + @@ -984,8 +1619,10 @@ - + + + @@ -1010,14 +1647,16 @@ - + + + - + @@ -1042,14 +1681,16 @@ - + + + - + @@ -1074,8 +1715,10 @@ - + + + @@ -1098,14 +1741,16 @@ - + + + - + @@ -1128,19 +1773,22 @@ - + + + - + - + + @@ -1156,8 +1804,10 @@ - + + + @@ -1168,7 +1818,7 @@ - r_shoulder_pan_collision + r_shoulder_pan_link_geom 100.0 true @@ -1179,11 +1829,12 @@ true + - r_shoulder_lift_collision_geom + r_shoulder_lift_link_geom 100.0 true @@ -1193,18 +1844,19 @@ true + - true + - r_upper_arm_collision_geom + r_upper_arm_link_geom 100.0 true @@ -1217,7 +1869,7 @@ - r_elbow_flex_collision_geom + r_elbow_flex_link_geom 100.0 true @@ -1227,17 +1879,19 @@ + true + - true - true + + true - r_forearm_collision + r_forearm_link_geom 100.0 true @@ -1250,7 +1904,7 @@ true - r_wrist_flex_collision + r_wrist_flex_link_geom 100.0 true @@ -1260,12 +1914,13 @@ + true - r_wrist_roll_collision + r_wrist_roll_link_geom 100.0 true @@ -1275,6 +1930,7 @@ + @@ -1301,25 +1957,7 @@ - - - - - - - - - - - - - - - - - - - + @@ -1334,19 +1972,43 @@ - + + + - + + + + + + + + + + + + + + + + + + + + + + + - - + + @@ -1364,6 +2026,8 @@ + + @@ -1377,20 +2041,20 @@ - - + - + - + + - + @@ -1416,23 +2080,24 @@ - + + + - + - + - - + @@ -1446,23 +2111,24 @@ - + + + - + - + - - + @@ -1476,23 +2142,24 @@ - + + + - + - + - - + @@ -1506,20 +2173,22 @@ - + + + - + true - r_gripper_l_finger_collision + r_gripper_l_finger_link_geom 100.0 true @@ -1534,14 +2203,15 @@ + - + true - r_gripper_r_finger_collision + r_gripper_r_finger_link_geom 100.0 true @@ -1555,19 +2225,16 @@ + - + - - - - true - r_gripper_l_finger_tip_collision + r_gripper_l_finger_tip_link_geom 100.0 true @@ -1578,21 +2245,19 @@ - + - + + - + - - - true - r_gripper_r_finger_tip_collision + r_gripper_r_finger_tip_link_geom 100.0 true @@ -1603,16 +2268,10 @@ - + - - - - - - - - + + true 100.0 @@ -1630,22 +2289,19 @@ r_gripper_l_finger_link - - - - - - - - - + + + + + + - + true - r_gripper_palm_collision + r_gripper_palm_link_geom 100.0 true @@ -1658,6 +2314,7 @@ true + r_gripper_l_finger_tip_link r_gripper_float_link @@ -1683,7 +2340,7 @@ 0.08 --> - + true 100.0 @@ -1695,16 +2352,21 @@ map - + + true + 100.0 + r_gripper_tool_frame + r_gripper_tool_frame_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + /map + + + true - - - - - - - + @@ -1739,15 +2401,15 @@ - + - + - + @@ -1756,7 +2418,7 @@ - + @@ -1773,15 +2435,15 @@ - + - + - + @@ -1806,8 +2468,10 @@ - + + + @@ -1832,14 +2496,16 @@ - + + + - + @@ -1864,14 +2530,16 @@ - + + + - + @@ -1896,8 +2564,10 @@ - + + + @@ -1920,14 +2590,16 @@ - + + + - + @@ -1950,19 +2622,22 @@ - + + + - + - + + @@ -1978,8 +2653,10 @@ - + + + @@ -1990,7 +2667,7 @@ - l_shoulder_pan_collision + l_shoulder_pan_link_geom 100.0 true @@ -2001,11 +2678,12 @@ true + - l_shoulder_lift_collision_geom + l_shoulder_lift_link_geom 100.0 true @@ -2015,18 +2693,19 @@ true + - true + - l_upper_arm_collision_geom + l_upper_arm_link_geom 100.0 true @@ -2039,7 +2718,7 @@ - l_elbow_flex_collision_geom + l_elbow_flex_link_geom 100.0 true @@ -2049,17 +2728,19 @@ + true + - true - true + + true - l_forearm_collision + l_forearm_link_geom 100.0 true @@ -2072,7 +2753,7 @@ true - l_wrist_flex_collision + l_wrist_flex_link_geom 100.0 true @@ -2082,12 +2763,13 @@ + true - l_wrist_roll_collision + l_wrist_roll_link_geom 100.0 true @@ -2097,6 +2779,7 @@ + @@ -2123,25 +2806,7 @@ - - - - - - - - - - - - - - - - - - - + @@ -2156,19 +2821,43 @@ - + + + - + + + + + + + + + + + + + + + + + + + + + + + - - + + @@ -2186,6 +2875,8 @@ + + @@ -2199,20 +2890,20 @@ - - + - + - + + - + @@ -2238,23 +2929,24 @@ - + + + - + - + - - + @@ -2268,23 +2960,24 @@ - + + + - + - + - - + @@ -2298,23 +2991,24 @@ - + + + - + - + - - + @@ -2328,20 +3022,22 @@ - + + + - + true - l_gripper_l_finger_collision + l_gripper_l_finger_link_geom 100.0 true @@ -2356,14 +3052,15 @@ + - + true - l_gripper_r_finger_collision + l_gripper_r_finger_link_geom 100.0 true @@ -2377,19 +3074,16 @@ + - + - - - - true - l_gripper_l_finger_tip_collision + l_gripper_l_finger_tip_link_geom 100.0 true @@ -2400,21 +3094,19 @@ - + - + + - + - - - true - l_gripper_r_finger_tip_collision + l_gripper_r_finger_tip_link_geom 100.0 true @@ -2425,16 +3117,10 @@ - + - - - - - - - - + + true 100.0 @@ -2452,22 +3138,19 @@ l_gripper_l_finger_link - - - - - - - - - + + + + + + - + true - l_gripper_palm_collision + l_gripper_palm_link_geom 100.0 true @@ -2480,6 +3163,7 @@ true + l_gripper_l_finger_tip_link l_gripper_float_link @@ -2505,7 +3189,7 @@ 0.08 --> - + true 100.0 @@ -2517,16 +3201,21 @@ map - + + true + 100.0 + l_gripper_tool_frame + l_gripper_tool_frame_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + /map + + + true - - - - - - - + @@ -2535,7 +3224,153 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 90 + 0.1 + 100 + 20.0 + + true + 20.0 + l_forearm_cam/image + l_forearm_cam_frame + + + + true + PR2/Blue + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 90 + 0.1 + 100 + 20.0 + + true + 20.0 + r_forearm_cam/image + r_forearm_cam_frame + + + + true + PR2/Blue + + true + + + diff --git a/kdl_parser/test/test_kdl_parser.cpp b/kdl_parser/test/test_kdl_parser.cpp index d301058..1a51da7 100644 --- a/kdl_parser/test/test_kdl_parser.cpp +++ b/kdl_parser/test/test_kdl_parser.cpp @@ -72,8 +72,8 @@ TEST_F(TestParser, test) } ASSERT_TRUE(treeFromFile(g_argv[g_argc-1], my_tree)); - ASSERT_EQ(my_tree.getNrOfJoints(), (unsigned int)39); - ASSERT_EQ(my_tree.getNrOfSegments(), (unsigned int)51); + ASSERT_EQ(my_tree.getNrOfJoints(), (unsigned int)40); + ASSERT_EQ(my_tree.getNrOfSegments(), (unsigned int)71); ASSERT_TRUE(my_tree.getSegment("world") == my_tree.getRootSegment()); ASSERT_EQ(my_tree.getRootSegment()->second.children.size(), (unsigned int)1); ASSERT_TRUE(my_tree.getSegment("base_link")->second.parent == my_tree.getRootSegment()); From db7c417438d358cf7a24d4e742ea89ac98816a1e Mon Sep 17 00:00:00 2001 From: meeussen Date: Mon, 26 Oct 2009 20:55:50 +0000 Subject: [PATCH 055/245] preparing bugfix release --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7a86d00..dbd9db3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,4 +16,4 @@ set(ROSPACK_MAKEDIST true) # variables. #list(APPEND CPACK_SOURCE_IGNORE_FILES /core/experimental) -rosbuild_make_distribution(0.6.0) +rosbuild_make_distribution(0.6.1) From 32b088274deb1786bc2196df6df138704125607f Mon Sep 17 00:00:00 2001 From: meeussen Date: Mon, 26 Oct 2009 22:03:38 +0000 Subject: [PATCH 056/245] joint state listener should not keep buffer --- robot_state_publisher/src/joint_state_listener.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robot_state_publisher/src/joint_state_listener.cpp b/robot_state_publisher/src/joint_state_listener.cpp index e240b67..4bb67b4 100644 --- a/robot_state_publisher/src/joint_state_listener.cpp +++ b/robot_state_publisher/src/joint_state_listener.cpp @@ -54,7 +54,7 @@ JointStateListener::JointStateListener(const KDL::Tree& tree) publish_rate_ = Rate(publish_freq); // subscribe to mechanism state - joint_state_sub_ = n_.subscribe("joint_states", 500, &JointStateListener::callbackJointState, this);; + joint_state_sub_ = n_.subscribe("joint_states", 1, &JointStateListener::callbackJointState, this);; }; From 1711b830daf8b030bbfdb2c72a1f50ece338d986 Mon Sep 17 00:00:00 2001 From: meeussen Date: Mon, 26 Oct 2009 22:11:05 +0000 Subject: [PATCH 057/245] bugfix release for robot model --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index dbd9db3..9042359 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,4 +16,4 @@ set(ROSPACK_MAKEDIST true) # variables. #list(APPEND CPACK_SOURCE_IGNORE_FILES /core/experimental) -rosbuild_make_distribution(0.6.1) +rosbuild_make_distribution(0.6.2) From 848abcdd207ad49e8194f4d97ada229b1c1738ea Mon Sep 17 00:00:00 2001 From: rphilippsen Date: Fri, 30 Oct 2009 18:51:30 +0000 Subject: [PATCH 058/245] Bugfix: URDF inertia was not added to KDL::Segment, which ended up always having zero mass and inertia. (Yet another case of default ctor args standing in the way of development). --- kdl_parser/src/kdl_parser.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kdl_parser/src/kdl_parser.cpp b/kdl_parser/src/kdl_parser.cpp index 2478250..717661f 100644 --- a/kdl_parser/src/kdl_parser.cpp +++ b/kdl_parser/src/kdl_parser.cpp @@ -115,7 +115,7 @@ bool addChildrenToTree(boost::shared_ptr root, Tree& tree) Joint jnt = toKdl(root->parent_joint); // construct the kdl segment - Segment sgm(root->name, jnt, toKdl(root->parent_joint->parent_to_joint_origin_transform)); + Segment sgm(root->name, jnt, toKdl(root->parent_joint->parent_to_joint_origin_transform), inert); // add segment to tree tree.addSegment(sgm, root->parent_joint->parent_link_name); From b5c98fddfdf291f11e07332cb665ec9b2886fa3b Mon Sep 17 00:00:00 2001 From: wim Date: Mon, 16 Nov 2009 19:49:30 +0000 Subject: [PATCH 059/245] make get methods const. Ticket #3273 --- urdf/include/urdf/pose.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/urdf/include/urdf/pose.h b/urdf/include/urdf/pose.h index 0b76258..3a46a9d 100644 --- a/urdf/include/urdf/pose.h +++ b/urdf/include/urdf/pose.h @@ -86,14 +86,14 @@ class Rotation public: Rotation(double _x,double _y, double _z, double _w) {this->x=_x;this->y=_y;this->z=_z;this->w=_w;}; Rotation() {this->clear();}; - void getQuaternion(double &quat_x,double &quat_y,double &quat_z, double &quat_w) + void getQuaternion(double &quat_x,double &quat_y,double &quat_z, double &quat_w) const { quat_x = this->x; quat_y = this->y; quat_z = this->z; quat_w = this->w; }; - void getRPY(double &roll,double &pitch,double &yaw) + void getRPY(double &roll,double &pitch,double &yaw) const { double sqw; double sqx; From b5936c14af79e129571ac25e04c10203624d5b59 Mon Sep 17 00:00:00 2001 From: wim Date: Thu, 19 Nov 2009 00:43:50 +0000 Subject: [PATCH 060/245] when visual, inertial or collision is specified but fails to parse, the parser should fail --- urdf/src/link.cpp | 19 +- urdf/test/pr2_desc_no_filename_in_mesh.xml | 3377 ++++++++++++++++++++ urdf/test/test_robot_model_parser.launch | 2 +- 3 files changed, 3389 insertions(+), 9 deletions(-) create mode 100644 urdf/test/pr2_desc_no_filename_in_mesh.xml diff --git a/urdf/src/link.cpp b/urdf/src/link.cpp index 11aa9ea..f0adc1d 100644 --- a/urdf/src/link.cpp +++ b/urdf/src/link.cpp @@ -67,8 +67,11 @@ boost::shared_ptr parseGeometry(TiXmlElement *g) return geom; } - if (!geom->initXml(shape)) - return geom; + // clear geom object when fails to initialize + if (!geom->initXml(shape)){ + ROS_ERROR("Geometry failed to parse"); + geom.reset(); + } return geom; } @@ -365,7 +368,7 @@ bool Link::initXml(TiXmlElement* config) } name = std::string(name_char); - // Inertial + // Inertial (optional) TiXmlElement *i = config->FirstChildElement("inertial"); if (i) { @@ -373,11 +376,11 @@ bool Link::initXml(TiXmlElement* config) if (!inertial->initXml(i)) { ROS_ERROR("Could not parse inertial element for Link '%s'", this->name.c_str()); - inertial.reset(); + return false; } } - // Visual + // Visual (optional) TiXmlElement *v = config->FirstChildElement("visual"); if (v) { @@ -385,11 +388,11 @@ bool Link::initXml(TiXmlElement* config) if (!visual->initXml(v)) { ROS_ERROR("Could not parse visual element for Link '%s'", this->name.c_str()); - visual.reset(); + return false; } } - // Collision + // Collision (optional) TiXmlElement *col = config->FirstChildElement("collision"); if (col) { @@ -397,7 +400,7 @@ bool Link::initXml(TiXmlElement* config) if (!collision->initXml(col)) { ROS_ERROR("Could not parse collision element for Link '%s'", this->name.c_str()); - collision.reset(); + return false; } } diff --git a/urdf/test/pr2_desc_no_filename_in_mesh.xml b/urdf/test/pr2_desc_no_filename_in_mesh.xml new file mode 100644 index 0000000..21c98b8 --- /dev/null +++ b/urdf/test/pr2_desc_no_filename_in_mesh.xml @@ -0,0 +1,3377 @@ + + + + + + + + + + + + + + + + + + + + true + 1000.0 + + + + + + true + 1000.0 + + + + + + true + 1.0 + 5 + -10.0 + 1.0 + 10.0 + 1200000.0 + diagnostic + battery_state + self_test + + + + + true + 1000.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -75.0676691729 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + fl_caster_l_wheel_link_geom + 100.0 + + true + 100.0 + fl_caster_l_wheel_bumper + + + + + + + + + + + + 75.0676691729 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + fl_caster_r_wheel_link_geom + 100.0 + + true + 100.0 + fl_caster_r_wheel_bumper + + + + + + + + + + + + -75.0676691729 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -75.0676691729 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + fr_caster_l_wheel_link_geom + 100.0 + + true + 100.0 + fr_caster_l_wheel_bumper + + + + + + + + + + + + 75.0676691729 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + fr_caster_r_wheel_link_geom + 100.0 + + true + 100.0 + fr_caster_r_wheel_bumper + + + + + + + + + + + + -75.0676691729 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -75.0676691729 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bl_caster_l_wheel_link_geom + 100.0 + + true + 100.0 + bl_caster_l_wheel_bumper + + + + + + + + + + + + 75.0676691729 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bl_caster_r_wheel_link_geom + 100.0 + + true + 100.0 + bl_caster_r_wheel_bumper + + + + + + + + + + + + -75.0676691729 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -75.0676691729 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + br_caster_l_wheel_link_geom + 100.0 + + true + 100.0 + br_caster_l_wheel_bumper + + + + + + + + + + + + 75.0676691729 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + br_caster_r_wheel_link_geom + 100.0 + + true + 100.0 + br_caster_r_wheel_bumper + + + + + + + + + + + + -75.0676691729 + + + + base_link_geom + 100.0 + + true + 100.0 + base_bumper + + + + + + + + + + base_link + + true + 100.0 + base_link + base_pose_ground_truth + 0.01 + map + 25.7 25.7 0 + 0 0 0 + + + + true + 100.0 + plug_holder + plug_holder_pose_ground_truth + 0.01 + map + 0 0 0 + 0 0 0 + + + + + 640 + 640 + 1 + 0.0 0.0 0.0 + false + + -135 + 135 + + 0.05 + 10.0 + 0.01 + 20.0 + + 0.005 + true + 20.0 + base_scan + base_laser + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + torso_lift_link_geom + 100.0 + + true + 100.0 + torso_lift_bumper + + + + + + + true + 100.0 + torso_lift_link + imu_data + 0.01 + map + 0 0 0 + 0 0 0 + + + + + + -52143.33 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + R8G8B8 + 2448 2050 + 45 + 0.1 + 100 + 20.0 + + true + 20.0 + prosilica/cam_info + prosilica/image + prosilica/image_rect + prosilica/cam_info_service + prosilica/poll + hight_def_optical_frame + 1224.5 + 1224.5 + 1025.5 + 2955 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 90 + 0.1 + 100 + 20.0 + + true + 20.0 + wide_stereo/left_image + wide_stereo_l_stereo_camera_frame + + + + + + + 640 480 + L8 + 90 + 0.1 + 100 + 20.0 + + true + 20.0 + wide_stereo/right_image + wide_stereo_r_stereo_camera_frame + + + + + + + true + 20.0 + wide_stereo_l_sensor + wide_stereo_r_sensor + wide_stereo/raw_stereo + wide_stereo_optical_frame + 320 + 320 + 240 + 320 + 0 + 0 + 0 + 0 + 0 + -0.09 + + + + + + + + + 640 480 + L8 + 45 + 0.1 + 100 + 20.0 + + true + 20.0 + narrow_stereo/left_image + narrow_stereo_l_stereo_camera_frame + + + + + + + 640 480 + L8 + 45 + 0.1 + 100 + 20.0 + + true + 20.0 + narrow_stereo/right_image + narrow_stereo_r_stereo_camera_frame + + + + + + + true + 20.0 + narrow_stereo_l_sensor + narrow_stereo_r_sensor + narrow_stereo/raw_stereo + narrow_stereo_optical_frame + 320 + 320 + 240 + 772.55 + 0 + 0 + 0 + 0 + 0 + -0.09 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 + 640 + 1 + + 0.0 0.0 0.0 + false + + -80 + 80 + + 0.05 + 10.0 + 0.01 + 40.0 + + 0.005 + true + 40.0 + tilt_scan + laser_tilt_link + + + + + + + 6.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + r_shoulder_pan_link_geom + 100.0 + + true + 100.0 + r_shoulder_pan_bumper + + + + + true + + + + + + r_shoulder_lift_link_geom + 100.0 + + true + 100.0 + r_r_shoulder_lift_bumper + + + + true + + + + + + true + + + + + + + r_upper_arm_link_geom + 100.0 + + true + 100.0 + r_upper_arm_bumper + + + + true + + + + r_elbow_flex_link_geom + 100.0 + + true + 100.0 + r_elbow_flex_bumper + + + + + true + + + + + + true + + + + true + + r_forearm_link_geom + 100.0 + + true + 100.0 + r_forearm_bumper + + + + + + true + + r_wrist_flex_link_geom + 100.0 + + true + 100.0 + r_wrist_flex_bumper + + + + + + + + + true + + r_wrist_roll_link_geom + 100.0 + + true + 100.0 + r_wrist_roll_bumper + + + + + + + + + + 63.16 + + + + 61.89 + + + + 32.65 + + + + -36.17 + + + + 90.5142857143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + r_gripper_l_finger_link_geom + 100.0 + + true + 100.0 + r_gripper_l_finger_bumper + + + + + + + + + + + + + + + + true + + r_gripper_r_finger_link_geom + 100.0 + + true + 100.0 + r_gripper_r_finger_bumper + + + + + + + + + + + + + + + true + + + r_gripper_l_finger_tip_link_geom + 100.0 + + true + 100.0 + r_gripper_l_finger_tip_bumper + + + + + + + + + + + + + + + true + + + r_gripper_r_finger_tip_link_geom + 100.0 + + true + 100.0 + r_gripper_r_finger_tip_bumper + + + + + + + + + + + true + 100.0 + r_gripper_l_finger_link + r_gripper_l_finger_pose_ground_truth + 0.0 + map + + + + true + 100.0 + r_gripper_l_finger_link + r_gripper_l_finger_force_ground_truth + r_gripper_l_finger_link + + + + + + + + + + + + + true + + r_gripper_palm_link_geom + 100.0 + + true + 100.0 + r_gripper_palm_bumper + + + + + + true + + + + r_gripper_l_finger_tip_link + r_gripper_float_link + r_gripper_l_finger_tip_link + 0 1 0 + 0 0 0 + + + r_gripper_r_finger_tip_link + r_gripper_float_link + r_gripper_r_finger_tip_link + 0 1 0 + 0 0 0 + + + + + true + 100.0 + r_gripper_palm_link + r_gripper_palm_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + map + + + + true + 100.0 + r_gripper_tool_frame + r_gripper_tool_frame_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + /map + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + l_shoulder_pan_link_geom + 100.0 + + true + 100.0 + l_shoulder_pan_bumper + + + + + true + + + + + + l_shoulder_lift_link_geom + 100.0 + + true + 100.0 + l_r_shoulder_lift_bumper + + + + true + + + + + + true + + + + + + + l_upper_arm_link_geom + 100.0 + + true + 100.0 + l_upper_arm_bumper + + + + true + + + + l_elbow_flex_link_geom + 100.0 + + true + 100.0 + l_elbow_flex_bumper + + + + + true + + + + + + true + + + + true + + l_forearm_link_geom + 100.0 + + true + 100.0 + l_forearm_bumper + + + + + + true + + l_wrist_flex_link_geom + 100.0 + + true + 100.0 + l_wrist_flex_bumper + + + + + + + + + true + + l_wrist_roll_link_geom + 100.0 + + true + 100.0 + l_wrist_roll_bumper + + + + + + + + + + 63.16 + + + + 61.89 + + + + 32.65 + + + + -36.17 + + + + 90.5142857143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + l_gripper_l_finger_link_geom + 100.0 + + true + 100.0 + l_gripper_l_finger_bumper + + + + + + + + + + + + + + + + true + + l_gripper_r_finger_link_geom + 100.0 + + true + 100.0 + l_gripper_r_finger_bumper + + + + + + + + + + + + + + + true + + + l_gripper_l_finger_tip_link_geom + 100.0 + + true + 100.0 + l_gripper_l_finger_tip_bumper + + + + + + + + + + + + + + + true + + + l_gripper_r_finger_tip_link_geom + 100.0 + + true + 100.0 + l_gripper_r_finger_tip_bumper + + + + + + + + + + + true + 100.0 + l_gripper_l_finger_link + l_gripper_l_finger_pose_ground_truth + 0.0 + map + + + + true + 100.0 + l_gripper_l_finger_link + l_gripper_l_finger_force_ground_truth + l_gripper_l_finger_link + + + + + + + + + + + + + true + + l_gripper_palm_link_geom + 100.0 + + true + 100.0 + l_gripper_palm_bumper + + + + + + true + + + + l_gripper_l_finger_tip_link + l_gripper_float_link + l_gripper_l_finger_tip_link + 0 1 0 + 0 0 0 + + + l_gripper_r_finger_tip_link + l_gripper_float_link + l_gripper_r_finger_tip_link + 0 1 0 + 0 0 0 + + + + + true + 100.0 + l_gripper_palm_link + l_gripper_palm_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + map + + + + true + 100.0 + l_gripper_tool_frame + l_gripper_tool_frame_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + /map + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 90 + 0.1 + 100 + 20.0 + + true + 20.0 + l_forearm_cam/image + l_forearm_cam_frame + + + + true + PR2/Blue + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 90 + 0.1 + 100 + 20.0 + + true + 20.0 + r_forearm_cam/image + r_forearm_cam_frame + + + + true + PR2/Blue + + true + + + + + + + diff --git a/urdf/test/test_robot_model_parser.launch b/urdf/test/test_robot_model_parser.launch index fc0662e..66d8df1 100644 --- a/urdf/test/test_robot_model_parser.launch +++ b/urdf/test/test_robot_model_parser.launch @@ -1,3 +1,3 @@ - + From c1ff68a28eb564d78f390188d411a932e2f6a571 Mon Sep 17 00:00:00 2001 From: wim Date: Thu, 19 Nov 2009 18:12:08 +0000 Subject: [PATCH 061/245] Give better error message when no links were found --- urdf/src/model.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/urdf/src/model.cpp b/urdf/src/model.cpp index ee3fa9c..708e074 100644 --- a/urdf/src/model.cpp +++ b/urdf/src/model.cpp @@ -232,6 +232,12 @@ bool Model::initXml(TiXmlElement *robot_xml) return false; } + // make sure tree is not empty + if (parent_link_tree.empty()){ + ROS_ERROR("The robot xml does not contain any valid links. Are you parsing an empty file, or an un-processed xacro file?"); + return false; + } + // find the root link if (!this->initRoot(parent_link_tree)) { @@ -352,7 +358,7 @@ bool Model::initRoot(std::map &parent_link_tree) } if (!this->root_link_) { - ROS_ERROR("No root link found. The robot xml is empty or not a tree."); + ROS_ERROR("No root link found. The robot xml is not a valid tree."); return false; } ROS_DEBUG("Link '%s' is the root link", this->root_link_->name.c_str()); From d4fa8bc8e3537001b4edef6b4046903b0a522934 Mon Sep 17 00:00:00 2001 From: wim Date: Thu, 19 Nov 2009 19:15:05 +0000 Subject: [PATCH 062/245] add regression test for parsing the inertia --- kdl_parser/src/kdl_parser.cpp | 1 + kdl_parser/test/test_kdl_parser.cpp | 2 ++ 2 files changed, 3 insertions(+) diff --git a/kdl_parser/src/kdl_parser.cpp b/kdl_parser/src/kdl_parser.cpp index 717661f..e2d768e 100644 --- a/kdl_parser/src/kdl_parser.cpp +++ b/kdl_parser/src/kdl_parser.cpp @@ -96,6 +96,7 @@ Joint toKdl(boost::shared_ptr jnt) RigidBodyInertia toKdl(boost::shared_ptr i) { Frame origin = toKdl(i->origin); + // kdl specifies the inertia in the reference frame of the link, the urdf specifies the inertia in the inertia reference frame return origin.M * RigidBodyInertia(i->mass, origin.p, RotationalInertia(i->ixx, i->iyy, i->izz, i->ixy, i->ixz, i->iyz)); } diff --git a/kdl_parser/test/test_kdl_parser.cpp b/kdl_parser/test/test_kdl_parser.cpp index 1a51da7..7d6c99e 100644 --- a/kdl_parser/test/test_kdl_parser.cpp +++ b/kdl_parser/test/test_kdl_parser.cpp @@ -77,6 +77,8 @@ TEST_F(TestParser, test) ASSERT_TRUE(my_tree.getSegment("world") == my_tree.getRootSegment()); ASSERT_EQ(my_tree.getRootSegment()->second.children.size(), (unsigned int)1); ASSERT_TRUE(my_tree.getSegment("base_link")->second.parent == my_tree.getRootSegment()); + ASSERT_EQ(my_tree.getSegment("base_link")->second.segment.getInertia().getMass(), 116.0); + ASSERT_NEAR(my_tree.getSegment("base_link")->second.segment.getInertia().getRotationalInertia().data[0], 15.6107, 0.001); SUCCEED(); } From f36a1a4ac5b6a187c25ea4d6f84c1eaec18a5c0a Mon Sep 17 00:00:00 2001 From: wim Date: Thu, 19 Nov 2009 19:22:29 +0000 Subject: [PATCH 063/245] preparing for 0.6.3 bugfix release of robot model stack --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9042359..8be5573 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,4 +16,4 @@ set(ROSPACK_MAKEDIST true) # variables. #list(APPEND CPACK_SOURCE_IGNORE_FILES /core/experimental) -rosbuild_make_distribution(0.6.2) +rosbuild_make_distribution(0.6.3) From 630eb4fdb10a6a340431f8e311c62e57ad6b351d Mon Sep 17 00:00:00 2001 From: wim Date: Thu, 19 Nov 2009 21:31:52 +0000 Subject: [PATCH 064/245] use most recent robot description --- urdf/test/pr2_desc.xml | 1987 +++++++++++++++++++++------------------- 1 file changed, 1029 insertions(+), 958 deletions(-) diff --git a/urdf/test/pr2_desc.xml b/urdf/test/pr2_desc.xml index de8f6ed..a1e15b8 100644 --- a/urdf/test/pr2_desc.xml +++ b/urdf/test/pr2_desc.xml @@ -1,57 +1,49 @@ - + - + + - - - - - - + + + + + + + + + + + + + - - + true 1000.0 - - + + - - - true - 1000.0 - - - - - + true 1.0 5 - -10.0 - 1.0 - 10.0 - 1200000.0 - diagnostic - battery_state - self_test - - - - true - 1000.0 - - + power_state + 10.0 + 87.78 + -474 + 525 + 15.52 + 16.41 + - + @@ -64,9 +56,11 @@ - + + + - + @@ -74,7 +68,7 @@ - - + + - + - - + + - + - + - - fl_caster_l_wheel_link_geom - 100.0 - - true - 100.0 - fl_caster_l_wheel_bumper - - - - + - 75.0676691729 + 79.2380952381 @@ -231,45 +237,37 @@ - - + + - + - - + + - + - + - - fl_caster_r_wheel_link_geom - 100.0 - - true - 100.0 - fl_caster_r_wheel_bumper - - - - + - -75.0676691729 - + -79.2380952381 + + + @@ -289,7 +287,7 @@ - + @@ -304,7 +302,7 @@ - -75.0676691729 + -79.2380952381 @@ -315,44 +313,34 @@ - - + + - + - - + + - + - + - - fr_caster_l_wheel_link_geom - 100.0 - - true - 100.0 - fr_caster_l_wheel_bumper - - - - + - 75.0676691729 + 79.2380952381 @@ -363,45 +351,37 @@ - - + + - + - - + + - + - + - - fr_caster_r_wheel_link_geom - 100.0 - - true - 100.0 - fr_caster_r_wheel_bumper - - - - + - -75.0676691729 - + -79.2380952381 + + + @@ -421,7 +401,7 @@ - + @@ -436,7 +416,7 @@ - -75.0676691729 + -79.2380952381 @@ -447,44 +427,34 @@ - - + + - + - - + + - + - + - - bl_caster_l_wheel_link_geom - 100.0 - - true - 100.0 - bl_caster_l_wheel_bumper - - - - + - 75.0676691729 + 79.2380952381 @@ -495,45 +465,37 @@ - - + + - + - - + + - + - + - - bl_caster_r_wheel_link_geom - 100.0 - - true - 100.0 - bl_caster_r_wheel_bumper - - - - + - -75.0676691729 - + -79.2380952381 + + + @@ -553,7 +515,7 @@ - + @@ -568,7 +530,7 @@ - -75.0676691729 + -79.2380952381 @@ -579,44 +541,34 @@ - - + + - + - - + + - + - + - - br_caster_l_wheel_link_geom - 100.0 - - true - 100.0 - br_caster_l_wheel_bumper - - - - + - 75.0676691729 + 79.2380952381 @@ -627,64 +579,51 @@ - - + + - + - - + + - + - + - - br_caster_r_wheel_link_geom - 100.0 - - true - 100.0 - br_caster_r_wheel_bumper - - - - + - -75.0676691729 - - + -79.2380952381 + + + + true base_link_geom 100.0 - + true 100.0 base_bumper - + - - - - - base_link - + true 100.0 base_link @@ -694,74 +633,8 @@ 25.7 25.7 0 0 0 0 - - - true - 100.0 - plug_holder - plug_holder_pose_ground_truth - 0.01 - map - 0 0 0 - 0 0 0 - - - - - 640 - 640 - 1 - 0.0 0.0 0.0 - false - - -135 - 135 - - 0.05 - 10.0 - 0.01 - 20.0 - - 0.005 - true - 20.0 - base_scan - base_laser - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -777,7 +650,6 @@ - @@ -786,8 +658,9 @@ - + + @@ -802,26 +675,14 @@ torso_lift_link_geom 100.0 - + true 100.0 torso_lift_bumper - - + + - - - true - 100.0 - torso_lift_link - imu_data - 0.01 - map - 0 0 0 - 0 0 0 - - @@ -829,12 +690,12 @@ + numerical values that were specified in common.xacro which was included above --> - - - + + + @@ -851,7 +712,7 @@ - + @@ -872,9 +733,9 @@ 6.0 - - - + + + @@ -891,7 +752,7 @@ - + @@ -983,11 +844,11 @@ - + + - + - @@ -1012,11 +873,11 @@ - + + - + - @@ -1034,14 +895,14 @@ 0.1 100 20.0 - + true 20.0 - prosilica/cam_info - prosilica/image - prosilica/image_rect - prosilica/cam_info_service - prosilica/poll + /prosilica/cam_info + /prosilica/image + /prosilica/image_rect + /prosilica/cam_info_service + /prosilica/poll hight_def_optical_frame 1224.5 1224.5 @@ -1053,7 +914,7 @@ 0 0 - + @@ -1072,18 +933,17 @@ - + - + - - + - + @@ -1099,18 +959,18 @@ - + - + - + - + @@ -1127,19 +987,19 @@ - + - - + + - + - - + + @@ -1148,58 +1008,198 @@ - + - - + + - + - + - - - + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + B8G8R8 + 90.0 + 0.1 + 100 + 25.0 + + true + 25.0 + wide_stereo/left/image_raw + wide_stereo/left/camera_info + wide_stereo_optical_frame + 0.0 + 320.5 + 320.5 + 240.5 + + + 320.0 + 0 + 0 + 0 + 0 + 0 + + + + true + PR2/Blue + + true + - + - - + + - + - + - - - + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + B8G8R8 + 90.0 + 0.1 + 100 + 25.0 + + true + 25.0 + wide_stereo/right/image_raw + wide_stereo/right/camera_info + wide_stereo_optical_frame + 0.09 + 320.5 + 320.5 + 240.5 + + + 320.0 + 0 + 0 + 0 + 0 + 0 + + + + true + PR2/Blue + + true + + + + + + + true + 20.0 + wide_stereo_l_stereo_camera_sensor + wide_stereo_r_stereo_camera_sensor + wide_stereo/raw_stereo + wide_stereo_optical_frame + 320.5 + 320.5 + 240.5 + + + 320.0 + 0 + 0 + 0 + 0 + 0 + -0.09 + + + @@ -1211,18 +1211,18 @@ - + - + - + - + @@ -1239,19 +1239,19 @@ - + - - + + - + - - + + @@ -1260,167 +1260,189 @@ - + - - + + - + - + - - - + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 45.0 + 0.1 + 100 + 25.0 + + true + 25.0 + narrow_stereo/left/image_raw + narrow_stereo/left/camera_info + narrow_stereo_optical_frame + 0.0 + 320.5 + 320.5 + 240.5 + + + 772.55 + 0 + 0 + 0 + 0 + 0 + + + + true + PR2/Blue + + true + - + - - + + - + - + - - - + - + - - - - - - - - - - 640 480 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 L8 - 90 + 45.0 0.1 100 - 20.0 - + 25.0 + true - 20.0 - wide_stereo/left_image - wide_stereo_l_stereo_camera_frame - - + 25.0 + narrow_stereo/right/image_raw + narrow_stereo/right/camera_info + narrow_stereo_optical_frame + 0.09 + 320.5 + 320.5 + 240.5 + + + 772.55 + 0 + 0 + 0 + 0 + 0 + + - - - - 640 480 - L8 - 90 - 0.1 - 100 - 20.0 - - true - 20.0 - wide_stereo/right_image - wide_stereo_r_stereo_camera_frame - - - - - - - true - 20.0 - wide_stereo_l_sensor - wide_stereo_r_sensor - wide_stereo/raw_stereo - wide_stereo_optical_frame - 320 - 320 - 240 - 320 - 0 - 0 - 0 - 0 - 0 - -0.09 - - + true + PR2/Blue + + true - - - 640 480 - L8 - 45 - 0.1 - 100 - 20.0 - - true - 20.0 - narrow_stereo/left_image - narrow_stereo_l_stereo_camera_frame - - - - - - - 640 480 - L8 - 45 - 0.1 - 100 - 20.0 - - true - 20.0 - narrow_stereo/right_image - narrow_stereo_r_stereo_camera_frame - - - - - - + + true 20.0 - narrow_stereo_l_sensor - narrow_stereo_r_sensor + narrow_stereo_l_stereo_camera_sensor + narrow_stereo_r_stereo_camera_sensor narrow_stereo/raw_stereo narrow_stereo_optical_frame - 320 - 320 - 240 - 772.55 + 320.5 + 320.5 + 240.5 + + + 772.55 0 0 0 @@ -1428,15 +1450,17 @@ 0 -0.09 - + + + - - + + @@ -1453,7 +1477,7 @@ - + @@ -1471,31 +1495,25 @@ - - - + - + - - - + - + - - - + 640 640 @@ -1511,24 +1529,27 @@ 10.0 0.01 40.0 - + 0.005 true 40.0 tilt_scan laser_tilt_link - - + + + + - 6.0 + -6.05 + - + @@ -1552,7 +1573,7 @@ - + @@ -1560,7 +1581,7 @@ - + @@ -1568,7 +1589,7 @@ - + @@ -1586,7 +1607,7 @@ - + @@ -1594,7 +1615,7 @@ - + @@ -1619,9 +1640,9 @@ - + - + @@ -1631,7 +1652,58 @@ - + + + r_shoulder_pan_link_geom + 100.0 + + true + 100.0 + r_shoulder_pan_bumper + + + + + true + + + + + + r_shoulder_lift_link_geom + 100.0 + + true + 100.0 + r_r_shoulder_lift_bumper + + + + true + + + + + + true + + + + + + + + 63.16 + + + + 61.89 + + + + 32.65 + + @@ -1647,23 +1719,24 @@ - + - + - + - - + + + @@ -1681,52 +1754,96 @@ - + - + - + - - - - + - + - + - + + + - + + + r_upper_arm_link_geom + 100.0 + + true + 100.0 + r_upper_arm_bumper + + + + true + + + -1.0 + + + r_elbow_flex_link_geom + 100.0 + + true + 100.0 + r_elbow_flex_bumper + + + + + true + + + + + + true + + + + + + -36.17 + + + + 90.5142857143 + + @@ -1741,24 +1858,24 @@ - + - + - + - - + + - + @@ -1773,16 +1890,16 @@ - + - + - + @@ -1790,7 +1907,7 @@ - + @@ -1804,9 +1921,9 @@ - + - + @@ -1816,89 +1933,17 @@ - - - r_shoulder_pan_link_geom - 100.0 - - true - 100.0 - r_shoulder_pan_bumper - - - - - true - - - - - - r_shoulder_lift_link_geom - 100.0 - - true - 100.0 - r_r_shoulder_lift_bumper - - - - true - - - - - - true - - - - - - - r_upper_arm_link_geom - 100.0 - - true - 100.0 - r_upper_arm_bumper - - - - true - - - - r_elbow_flex_link_geom - 100.0 - - true - 100.0 - r_elbow_flex_bumper - - - - - true - - - - - - true - - - + true r_forearm_link_geom 100.0 - + true 100.0 r_forearm_bumper - - + + @@ -1906,12 +1951,12 @@ r_wrist_flex_link_geom 100.0 - + true 100.0 r_wrist_flex_bumper - - + + @@ -1922,42 +1967,23 @@ r_wrist_roll_link_geom 100.0 - + true 100.0 r_wrist_roll_bumper - - + + - - - - 63.16 - - - - 61.89 - - - - 32.65 - - - - -36.17 - - - - 90.5142857143 - + + @@ -2006,36 +2032,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -2190,12 +2186,12 @@ r_gripper_l_finger_link_geom 100.0 - + true 100.0 r_gripper_l_finger_bumper - - + + @@ -2205,7 +2201,7 @@ - + @@ -2213,12 +2209,12 @@ r_gripper_r_finger_link_geom 100.0 - + true 100.0 r_gripper_r_finger_bumper - - + + @@ -2227,52 +2223,52 @@ - + true - + false r_gripper_l_finger_tip_link_geom 100.0 - + true 100.0 r_gripper_l_finger_tip_bumper - - + + - + - + true - + false r_gripper_r_finger_tip_link_geom 100.0 - + true 100.0 r_gripper_r_finger_tip_bumper - - + + - + - + true 100.0 r_gripper_l_finger_link @@ -2280,41 +2276,79 @@ 0.0 map - - + + true 100.0 r_gripper_l_finger_link r_gripper_l_finger_force_ground_truth r_gripper_l_finger_link - + - + - + true r_gripper_palm_link_geom 100.0 - + true 100.0 r_gripper_palm_bumper - - + + true + + + true + 0.01 + 0.0001 + 0 + 0 + 0.0001 + 0 + 0.0001 + 0 + 0 + 0 + 0.82025 0.188 0.790675 + 0 -0 0 + + 0 0 0 + 0 -0 0 + 0.0 0.0 0.0 + + 0 0 0 + 0 -0 0 + 0.0 0.0 0.0 + unit_box + PR2/White + + + true + false + + + r_gripper_float_link + r_gripper_palm_link + r_gripper_float_link + 1 0 0 + -0.05 + 0.001 + r_gripper_l_finger_tip_link r_gripper_float_link @@ -2341,7 +2375,7 @@ --> - + true 100.0 r_gripper_palm_link @@ -2351,8 +2385,8 @@ 0.0 map - - + + true 100.0 r_gripper_tool_frame @@ -2362,13 +2396,13 @@ 0.0 /map - + true - + @@ -2401,7 +2435,7 @@ - + @@ -2409,7 +2443,7 @@ - + @@ -2417,7 +2451,7 @@ - + @@ -2435,7 +2469,7 @@ - + @@ -2443,7 +2477,7 @@ - + @@ -2468,9 +2502,9 @@ - + - + @@ -2480,7 +2514,58 @@
- + + + l_shoulder_pan_link_geom + 100.0 + + true + 100.0 + l_shoulder_pan_bumper + + + + + true + + + + + + l_shoulder_lift_link_geom + 100.0 + + true + 100.0 + l_r_shoulder_lift_bumper + + + + true + + + + + + true + + + + + + + + 63.16 + + + + 61.89 + + + + 32.65 + + @@ -2496,23 +2581,24 @@ - + - + - + - - + + + @@ -2530,52 +2616,96 @@ - + - + - + - - - - + - + - + - + + + - + + + l_upper_arm_link_geom + 100.0 + + true + 100.0 + l_upper_arm_bumper + + + + true + + + -1.0 + + + l_elbow_flex_link_geom + 100.0 + + true + 100.0 + l_elbow_flex_bumper + + + + + true + + + + + + true + + + + + + -36.17 + + + + 90.5142857143 + + @@ -2590,24 +2720,24 @@ - + - + - + - - + + - + @@ -2622,16 +2752,16 @@ - + - + - + @@ -2639,7 +2769,7 @@ - + @@ -2653,9 +2783,9 @@ - + - + @@ -2665,89 +2795,17 @@ - - - l_shoulder_pan_link_geom - 100.0 - - true - 100.0 - l_shoulder_pan_bumper - - - - - true - - - - - - l_shoulder_lift_link_geom - 100.0 - - true - 100.0 - l_r_shoulder_lift_bumper - - - - true - - - - - - true - - - - - - - l_upper_arm_link_geom - 100.0 - - true - 100.0 - l_upper_arm_bumper - - - - true - - - - l_elbow_flex_link_geom - 100.0 - - true - 100.0 - l_elbow_flex_bumper - - - - - true - - - - - - true - - - + true l_forearm_link_geom 100.0 - + true 100.0 l_forearm_bumper - - + + @@ -2755,12 +2813,12 @@ l_wrist_flex_link_geom 100.0 - + true 100.0 l_wrist_flex_bumper - - + + @@ -2771,42 +2829,23 @@ l_wrist_roll_link_geom 100.0 - + true 100.0 l_wrist_roll_bumper - - + + - - - - 63.16 - - - - 61.89 - - - - 32.65 - - - - -36.17 - - - - 90.5142857143 - + + @@ -2855,36 +2894,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -3039,12 +3048,12 @@ l_gripper_l_finger_link_geom 100.0 - + true 100.0 l_gripper_l_finger_bumper - - + + @@ -3054,7 +3063,7 @@ - + @@ -3062,12 +3071,12 @@ l_gripper_r_finger_link_geom 100.0 - + true 100.0 l_gripper_r_finger_bumper - - + + @@ -3076,52 +3085,52 @@ - + true - + false l_gripper_l_finger_tip_link_geom 100.0 - + true 100.0 l_gripper_l_finger_tip_bumper - - + + - + - + true - + false l_gripper_r_finger_tip_link_geom 100.0 - + true 100.0 l_gripper_r_finger_tip_bumper - - + + - + - + true 100.0 l_gripper_l_finger_link @@ -3129,41 +3138,79 @@ 0.0 map - - + + true 100.0 l_gripper_l_finger_link l_gripper_l_finger_force_ground_truth l_gripper_l_finger_link - + - + - + true l_gripper_palm_link_geom 100.0 - + true 100.0 l_gripper_palm_bumper - - + + true + + + true + 0.01 + 0.0001 + 0 + 0 + 0.0001 + 0 + 0.0001 + 0 + 0 + 0 + 0.82025 0.188 0.790675 + 0 -0 0 + + 0 0 0 + 0 -0 0 + 0.0 0.0 0.0 + + 0 0 0 + 0 -0 0 + 0.0 0.0 0.0 + unit_box + PR2/White + + + true + false + + + l_gripper_float_link + l_gripper_palm_link + l_gripper_float_link + 1 0 0 + -0.05 + 0.001 + l_gripper_l_finger_tip_link l_gripper_float_link @@ -3190,7 +3237,7 @@ --> - + true 100.0 l_gripper_palm_link @@ -3200,8 +3247,8 @@ 0.0 map - - + + true 100.0 l_gripper_tool_frame @@ -3211,13 +3258,13 @@ 0.0 /map - + true - + @@ -3237,16 +3284,16 @@ - + - + - + - + @@ -3263,34 +3310,48 @@ - + - + - + - + - 640 480 + + 640 480 L8 - 90 + 90.0 0.1 100 - 20.0 - + 25.0 + true - 20.0 - l_forearm_cam/image + 25.0 + l_forearm_cam/image_raw + l_forearm_cam/camera_info l_forearm_cam_frame + 0.0 + 320.5 + 320.5 + 240.5 + + + 320.0 + 0 + 0 + 0 + 0 + 0 - + true PR2/Blue @@ -3309,16 +3370,16 @@ - + - + - + - + @@ -3335,34 +3396,48 @@ - + - + - + - + - 640 480 + + 640 480 L8 - 90 + 90.0 0.1 100 - 20.0 - + 25.0 + true - 20.0 - r_forearm_cam/image + 25.0 + r_forearm_cam/image_raw + r_forearm_cam/camera_info r_forearm_cam_frame + 0.0 + 320.5 + 320.5 + 240.5 + + + 320.0 + 0 + 0 + 0 + 0 + 0 - + true PR2/Blue @@ -3370,8 +3445,4 @@ true - - - - From bde86260445c75651a57c68dc03f59ab49738e05 Mon Sep 17 00:00:00 2001 From: wim Date: Thu, 19 Nov 2009 21:33:45 +0000 Subject: [PATCH 065/245] update test to latest robot description --- kdl_parser/test/pr2_desc.xml | 1987 ++++++++++++++------------- kdl_parser/test/test_kdl_parser.cpp | 4 +- 2 files changed, 1031 insertions(+), 960 deletions(-) diff --git a/kdl_parser/test/pr2_desc.xml b/kdl_parser/test/pr2_desc.xml index de8f6ed..a1e15b8 100644 --- a/kdl_parser/test/pr2_desc.xml +++ b/kdl_parser/test/pr2_desc.xml @@ -1,57 +1,49 @@ - + - + + - - - - - - + + + + + + + + + + + + + - - + true 1000.0 - - + + - - - true - 1000.0 - - - - - + true 1.0 5 - -10.0 - 1.0 - 10.0 - 1200000.0 - diagnostic - battery_state - self_test - - - - true - 1000.0 - - + power_state + 10.0 + 87.78 + -474 + 525 + 15.52 + 16.41 + - + @@ -64,9 +56,11 @@ - + + + - + @@ -74,7 +68,7 @@ - - + + - + - - + + - + - + - - fl_caster_l_wheel_link_geom - 100.0 - - true - 100.0 - fl_caster_l_wheel_bumper - - - - + - 75.0676691729 + 79.2380952381 @@ -231,45 +237,37 @@ - - + + - + - - + + - + - + - - fl_caster_r_wheel_link_geom - 100.0 - - true - 100.0 - fl_caster_r_wheel_bumper - - - - + - -75.0676691729 - + -79.2380952381 + + + @@ -289,7 +287,7 @@ - + @@ -304,7 +302,7 @@ - -75.0676691729 + -79.2380952381 @@ -315,44 +313,34 @@ - - + + - + - - + + - + - + - - fr_caster_l_wheel_link_geom - 100.0 - - true - 100.0 - fr_caster_l_wheel_bumper - - - - + - 75.0676691729 + 79.2380952381 @@ -363,45 +351,37 @@ - - + + - + - - + + - + - + - - fr_caster_r_wheel_link_geom - 100.0 - - true - 100.0 - fr_caster_r_wheel_bumper - - - - + - -75.0676691729 - + -79.2380952381 + + + @@ -421,7 +401,7 @@ - + @@ -436,7 +416,7 @@ - -75.0676691729 + -79.2380952381 @@ -447,44 +427,34 @@ - - + + - + - - + + - + - + - - bl_caster_l_wheel_link_geom - 100.0 - - true - 100.0 - bl_caster_l_wheel_bumper - - - - + - 75.0676691729 + 79.2380952381 @@ -495,45 +465,37 @@ - - + + - + - - + + - + - + - - bl_caster_r_wheel_link_geom - 100.0 - - true - 100.0 - bl_caster_r_wheel_bumper - - - - + - -75.0676691729 - + -79.2380952381 + + + @@ -553,7 +515,7 @@ - + @@ -568,7 +530,7 @@ - -75.0676691729 + -79.2380952381 @@ -579,44 +541,34 @@ - - + + - + - - + + - + - + - - br_caster_l_wheel_link_geom - 100.0 - - true - 100.0 - br_caster_l_wheel_bumper - - - - + - 75.0676691729 + 79.2380952381 @@ -627,64 +579,51 @@ - - + + - + - - + + - + - + - - br_caster_r_wheel_link_geom - 100.0 - - true - 100.0 - br_caster_r_wheel_bumper - - - - + - -75.0676691729 - - + -79.2380952381 + + + + true base_link_geom 100.0 - + true 100.0 base_bumper - + - - - - - base_link - + true 100.0 base_link @@ -694,74 +633,8 @@ 25.7 25.7 0 0 0 0 - - - true - 100.0 - plug_holder - plug_holder_pose_ground_truth - 0.01 - map - 0 0 0 - 0 0 0 - - - - - 640 - 640 - 1 - 0.0 0.0 0.0 - false - - -135 - 135 - - 0.05 - 10.0 - 0.01 - 20.0 - - 0.005 - true - 20.0 - base_scan - base_laser - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -777,7 +650,6 @@ - @@ -786,8 +658,9 @@ - + + @@ -802,26 +675,14 @@ torso_lift_link_geom 100.0 - + true 100.0 torso_lift_bumper - - + + - - - true - 100.0 - torso_lift_link - imu_data - 0.01 - map - 0 0 0 - 0 0 0 - - @@ -829,12 +690,12 @@ + numerical values that were specified in common.xacro which was included above --> - - - + + + @@ -851,7 +712,7 @@ - + @@ -872,9 +733,9 @@ 6.0 - - - + + + @@ -891,7 +752,7 @@ - + @@ -983,11 +844,11 @@ - + + - + - @@ -1012,11 +873,11 @@ - + + - + - @@ -1034,14 +895,14 @@ 0.1 100 20.0 - + true 20.0 - prosilica/cam_info - prosilica/image - prosilica/image_rect - prosilica/cam_info_service - prosilica/poll + /prosilica/cam_info + /prosilica/image + /prosilica/image_rect + /prosilica/cam_info_service + /prosilica/poll hight_def_optical_frame 1224.5 1224.5 @@ -1053,7 +914,7 @@ 0 0 - + @@ -1072,18 +933,17 @@ - + - + - - + - + @@ -1099,18 +959,18 @@ - + - + - + - + @@ -1127,19 +987,19 @@ - + - - + + - + - - + + @@ -1148,58 +1008,198 @@ - + - - + + - + - + - - - + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + B8G8R8 + 90.0 + 0.1 + 100 + 25.0 + + true + 25.0 + wide_stereo/left/image_raw + wide_stereo/left/camera_info + wide_stereo_optical_frame + 0.0 + 320.5 + 320.5 + 240.5 + + + 320.0 + 0 + 0 + 0 + 0 + 0 + + + + true + PR2/Blue + + true + - + - - + + - + - + - - - + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + B8G8R8 + 90.0 + 0.1 + 100 + 25.0 + + true + 25.0 + wide_stereo/right/image_raw + wide_stereo/right/camera_info + wide_stereo_optical_frame + 0.09 + 320.5 + 320.5 + 240.5 + + + 320.0 + 0 + 0 + 0 + 0 + 0 + + + + true + PR2/Blue + + true + + + + + + + true + 20.0 + wide_stereo_l_stereo_camera_sensor + wide_stereo_r_stereo_camera_sensor + wide_stereo/raw_stereo + wide_stereo_optical_frame + 320.5 + 320.5 + 240.5 + + + 320.0 + 0 + 0 + 0 + 0 + 0 + -0.09 + + + @@ -1211,18 +1211,18 @@ - + - + - + - + @@ -1239,19 +1239,19 @@ - + - - + + - + - - + + @@ -1260,167 +1260,189 @@ - + - - + + - + - + - - - + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 45.0 + 0.1 + 100 + 25.0 + + true + 25.0 + narrow_stereo/left/image_raw + narrow_stereo/left/camera_info + narrow_stereo_optical_frame + 0.0 + 320.5 + 320.5 + 240.5 + + + 772.55 + 0 + 0 + 0 + 0 + 0 + + + + true + PR2/Blue + + true + - + - - + + - + - + - - - + - + - - - - - - - - - - 640 480 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 L8 - 90 + 45.0 0.1 100 - 20.0 - + 25.0 + true - 20.0 - wide_stereo/left_image - wide_stereo_l_stereo_camera_frame - - + 25.0 + narrow_stereo/right/image_raw + narrow_stereo/right/camera_info + narrow_stereo_optical_frame + 0.09 + 320.5 + 320.5 + 240.5 + + + 772.55 + 0 + 0 + 0 + 0 + 0 + + - - - - 640 480 - L8 - 90 - 0.1 - 100 - 20.0 - - true - 20.0 - wide_stereo/right_image - wide_stereo_r_stereo_camera_frame - - - - - - - true - 20.0 - wide_stereo_l_sensor - wide_stereo_r_sensor - wide_stereo/raw_stereo - wide_stereo_optical_frame - 320 - 320 - 240 - 320 - 0 - 0 - 0 - 0 - 0 - -0.09 - - + true + PR2/Blue + + true - - - 640 480 - L8 - 45 - 0.1 - 100 - 20.0 - - true - 20.0 - narrow_stereo/left_image - narrow_stereo_l_stereo_camera_frame - - - - - - - 640 480 - L8 - 45 - 0.1 - 100 - 20.0 - - true - 20.0 - narrow_stereo/right_image - narrow_stereo_r_stereo_camera_frame - - - - - - + + true 20.0 - narrow_stereo_l_sensor - narrow_stereo_r_sensor + narrow_stereo_l_stereo_camera_sensor + narrow_stereo_r_stereo_camera_sensor narrow_stereo/raw_stereo narrow_stereo_optical_frame - 320 - 320 - 240 - 772.55 + 320.5 + 320.5 + 240.5 + + + 772.55 0 0 0 @@ -1428,15 +1450,17 @@ 0 -0.09 - + + + - - + + @@ -1453,7 +1477,7 @@ - + @@ -1471,31 +1495,25 @@ - - - + - + - - - + - + - - - + 640 640 @@ -1511,24 +1529,27 @@ 10.0 0.01 40.0 - + 0.005 true 40.0 tilt_scan laser_tilt_link - - + + + + - 6.0 + -6.05 + - + @@ -1552,7 +1573,7 @@ - + @@ -1560,7 +1581,7 @@ - + @@ -1568,7 +1589,7 @@ - + @@ -1586,7 +1607,7 @@ - + @@ -1594,7 +1615,7 @@ - + @@ -1619,9 +1640,9 @@ - + - + @@ -1631,7 +1652,58 @@ - + + + r_shoulder_pan_link_geom + 100.0 + + true + 100.0 + r_shoulder_pan_bumper + + + + + true + + + + + + r_shoulder_lift_link_geom + 100.0 + + true + 100.0 + r_r_shoulder_lift_bumper + + + + true + + + + + + true + + + + + + + + 63.16 + + + + 61.89 + + + + 32.65 + + @@ -1647,23 +1719,24 @@ - + - + - + - - + + + @@ -1681,52 +1754,96 @@ - + - + - + - - - - + - + - + - + + + - + + + r_upper_arm_link_geom + 100.0 + + true + 100.0 + r_upper_arm_bumper + + + + true + + + -1.0 + + + r_elbow_flex_link_geom + 100.0 + + true + 100.0 + r_elbow_flex_bumper + + + + + true + + + + + + true + + + + + + -36.17 + + + + 90.5142857143 + + @@ -1741,24 +1858,24 @@ - + - + - + - - + + - + @@ -1773,16 +1890,16 @@ - + - + - + @@ -1790,7 +1907,7 @@ - + @@ -1804,9 +1921,9 @@ - + - + @@ -1816,89 +1933,17 @@ - - - r_shoulder_pan_link_geom - 100.0 - - true - 100.0 - r_shoulder_pan_bumper - - - - - true - - - - - - r_shoulder_lift_link_geom - 100.0 - - true - 100.0 - r_r_shoulder_lift_bumper - - - - true - - - - - - true - - - - - - - r_upper_arm_link_geom - 100.0 - - true - 100.0 - r_upper_arm_bumper - - - - true - - - - r_elbow_flex_link_geom - 100.0 - - true - 100.0 - r_elbow_flex_bumper - - - - - true - - - - - - true - - - + true r_forearm_link_geom 100.0 - + true 100.0 r_forearm_bumper - - + + @@ -1906,12 +1951,12 @@ r_wrist_flex_link_geom 100.0 - + true 100.0 r_wrist_flex_bumper - - + + @@ -1922,42 +1967,23 @@ r_wrist_roll_link_geom 100.0 - + true 100.0 r_wrist_roll_bumper - - + + - - - - 63.16 - - - - 61.89 - - - - 32.65 - - - - -36.17 - - - - 90.5142857143 - + + @@ -2006,36 +2032,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -2190,12 +2186,12 @@ r_gripper_l_finger_link_geom 100.0 - + true 100.0 r_gripper_l_finger_bumper - - + + @@ -2205,7 +2201,7 @@ - + @@ -2213,12 +2209,12 @@ r_gripper_r_finger_link_geom 100.0 - + true 100.0 r_gripper_r_finger_bumper - - + + @@ -2227,52 +2223,52 @@ - + true - + false r_gripper_l_finger_tip_link_geom 100.0 - + true 100.0 r_gripper_l_finger_tip_bumper - - + + - + - + true - + false r_gripper_r_finger_tip_link_geom 100.0 - + true 100.0 r_gripper_r_finger_tip_bumper - - + + - + - + true 100.0 r_gripper_l_finger_link @@ -2280,41 +2276,79 @@ 0.0 map - - + + true 100.0 r_gripper_l_finger_link r_gripper_l_finger_force_ground_truth r_gripper_l_finger_link - + - + - + true r_gripper_palm_link_geom 100.0 - + true 100.0 r_gripper_palm_bumper - - + + true + + + true + 0.01 + 0.0001 + 0 + 0 + 0.0001 + 0 + 0.0001 + 0 + 0 + 0 + 0.82025 0.188 0.790675 + 0 -0 0 + + 0 0 0 + 0 -0 0 + 0.0 0.0 0.0 + + 0 0 0 + 0 -0 0 + 0.0 0.0 0.0 + unit_box + PR2/White + + + true + false + + + r_gripper_float_link + r_gripper_palm_link + r_gripper_float_link + 1 0 0 + -0.05 + 0.001 + r_gripper_l_finger_tip_link r_gripper_float_link @@ -2341,7 +2375,7 @@ --> - + true 100.0 r_gripper_palm_link @@ -2351,8 +2385,8 @@ 0.0 map - - + + true 100.0 r_gripper_tool_frame @@ -2362,13 +2396,13 @@ 0.0 /map - + true - + @@ -2401,7 +2435,7 @@ - + @@ -2409,7 +2443,7 @@ - + @@ -2417,7 +2451,7 @@ - + @@ -2435,7 +2469,7 @@ - + @@ -2443,7 +2477,7 @@ - + @@ -2468,9 +2502,9 @@ - + - + @@ -2480,7 +2514,58 @@ - + + + l_shoulder_pan_link_geom + 100.0 + + true + 100.0 + l_shoulder_pan_bumper + + + + + true + + + + + + l_shoulder_lift_link_geom + 100.0 + + true + 100.0 + l_r_shoulder_lift_bumper + + + + true + + + + + + true + + + + + + + + 63.16 + + + + 61.89 + + + + 32.65 + + @@ -2496,23 +2581,24 @@ - + - + - + - - + + + @@ -2530,52 +2616,96 @@ - + - + - + - - - - + - + - + - + + + - + + + l_upper_arm_link_geom + 100.0 + + true + 100.0 + l_upper_arm_bumper + + + + true + + + -1.0 + + + l_elbow_flex_link_geom + 100.0 + + true + 100.0 + l_elbow_flex_bumper + + + + + true + + + + + + true + + + + + + -36.17 + + + + 90.5142857143 + + @@ -2590,24 +2720,24 @@ - + - + - + - - + + - + @@ -2622,16 +2752,16 @@ - + - + - + @@ -2639,7 +2769,7 @@ - + @@ -2653,9 +2783,9 @@ - + - + @@ -2665,89 +2795,17 @@ - - - l_shoulder_pan_link_geom - 100.0 - - true - 100.0 - l_shoulder_pan_bumper - - - - - true - - - - - - l_shoulder_lift_link_geom - 100.0 - - true - 100.0 - l_r_shoulder_lift_bumper - - - - true - - - - - - true - - - - - - - l_upper_arm_link_geom - 100.0 - - true - 100.0 - l_upper_arm_bumper - - - - true - - - - l_elbow_flex_link_geom - 100.0 - - true - 100.0 - l_elbow_flex_bumper - - - - - true - - - - - - true - - - + true l_forearm_link_geom 100.0 - + true 100.0 l_forearm_bumper - - + + @@ -2755,12 +2813,12 @@ l_wrist_flex_link_geom 100.0 - + true 100.0 l_wrist_flex_bumper - - + + @@ -2771,42 +2829,23 @@ l_wrist_roll_link_geom 100.0 - + true 100.0 l_wrist_roll_bumper - - + + - - - - 63.16 - - - - 61.89 - - - - 32.65 - - - - -36.17 - - - - 90.5142857143 - + + @@ -2855,36 +2894,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -3039,12 +3048,12 @@ l_gripper_l_finger_link_geom 100.0 - + true 100.0 l_gripper_l_finger_bumper - - + + @@ -3054,7 +3063,7 @@ - + @@ -3062,12 +3071,12 @@ l_gripper_r_finger_link_geom 100.0 - + true 100.0 l_gripper_r_finger_bumper - - + + @@ -3076,52 +3085,52 @@ - + true - + false l_gripper_l_finger_tip_link_geom 100.0 - + true 100.0 l_gripper_l_finger_tip_bumper - - + + - + - + true - + false l_gripper_r_finger_tip_link_geom 100.0 - + true 100.0 l_gripper_r_finger_tip_bumper - - + + - + - + true 100.0 l_gripper_l_finger_link @@ -3129,41 +3138,79 @@ 0.0 map - - + + true 100.0 l_gripper_l_finger_link l_gripper_l_finger_force_ground_truth l_gripper_l_finger_link - + - + - + true l_gripper_palm_link_geom 100.0 - + true 100.0 l_gripper_palm_bumper - - + + true + + + true + 0.01 + 0.0001 + 0 + 0 + 0.0001 + 0 + 0.0001 + 0 + 0 + 0 + 0.82025 0.188 0.790675 + 0 -0 0 + + 0 0 0 + 0 -0 0 + 0.0 0.0 0.0 + + 0 0 0 + 0 -0 0 + 0.0 0.0 0.0 + unit_box + PR2/White + + + true + false + + + l_gripper_float_link + l_gripper_palm_link + l_gripper_float_link + 1 0 0 + -0.05 + 0.001 + l_gripper_l_finger_tip_link l_gripper_float_link @@ -3190,7 +3237,7 @@ --> - + true 100.0 l_gripper_palm_link @@ -3200,8 +3247,8 @@ 0.0 map - - + + true 100.0 l_gripper_tool_frame @@ -3211,13 +3258,13 @@ 0.0 /map - + true - + @@ -3237,16 +3284,16 @@ - + - + - + - + @@ -3263,34 +3310,48 @@ - + - + - + - + - 640 480 + + 640 480 L8 - 90 + 90.0 0.1 100 - 20.0 - + 25.0 + true - 20.0 - l_forearm_cam/image + 25.0 + l_forearm_cam/image_raw + l_forearm_cam/camera_info l_forearm_cam_frame + 0.0 + 320.5 + 320.5 + 240.5 + + + 320.0 + 0 + 0 + 0 + 0 + 0 - + true PR2/Blue @@ -3309,16 +3370,16 @@ - + - + - + - + @@ -3335,34 +3396,48 @@ - + - + - + - + - 640 480 + + 640 480 L8 - 90 + 90.0 0.1 100 - 20.0 - + 25.0 + true - 20.0 - r_forearm_cam/image + 25.0 + r_forearm_cam/image_raw + r_forearm_cam/camera_info r_forearm_cam_frame + 0.0 + 320.5 + 320.5 + 240.5 + + + 320.0 + 0 + 0 + 0 + 0 + 0 - + true PR2/Blue @@ -3370,8 +3445,4 @@ true - - - - diff --git a/kdl_parser/test/test_kdl_parser.cpp b/kdl_parser/test/test_kdl_parser.cpp index 7d6c99e..52ea5ff 100644 --- a/kdl_parser/test/test_kdl_parser.cpp +++ b/kdl_parser/test/test_kdl_parser.cpp @@ -72,8 +72,8 @@ TEST_F(TestParser, test) } ASSERT_TRUE(treeFromFile(g_argv[g_argc-1], my_tree)); - ASSERT_EQ(my_tree.getNrOfJoints(), (unsigned int)40); - ASSERT_EQ(my_tree.getNrOfSegments(), (unsigned int)71); + ASSERT_EQ(my_tree.getNrOfJoints(), (unsigned int)38); + ASSERT_EQ(my_tree.getNrOfSegments(), (unsigned int)72); ASSERT_TRUE(my_tree.getSegment("world") == my_tree.getRootSegment()); ASSERT_EQ(my_tree.getRootSegment()->second.children.size(), (unsigned int)1); ASSERT_TRUE(my_tree.getSegment("base_link")->second.parent == my_tree.getRootSegment()); From a0ffa1a8b841284c16f5f991b40f37560fa7fe31 Mon Sep 17 00:00:00 2001 From: wim Date: Fri, 20 Nov 2009 23:30:56 +0000 Subject: [PATCH 066/245] depend on unzip. Ticket #3301 --- convex_decomposition/manifest.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/convex_decomposition/manifest.xml b/convex_decomposition/manifest.xml index a2e0ac2..568adb9 100644 --- a/convex_decomposition/manifest.xml +++ b/convex_decomposition/manifest.xml @@ -22,6 +22,7 @@ appears to be no available revision control. MIT http://www.amillionpixels.us/ConvexDecomposition.zip + From ac0782a7fabdb8d78ccb56c7960d70b696b1bb70 Mon Sep 17 00:00:00 2001 From: wim Date: Sat, 21 Nov 2009 01:18:39 +0000 Subject: [PATCH 067/245] deprecate 'bug' where you are allowed to not specify the root link if you call it 'world' --- urdf/src/model.cpp | 26 +++++++++----------------- urdf/src/urdf_check.cpp | 2 +- 2 files changed, 10 insertions(+), 18 deletions(-) diff --git a/urdf/src/model.cpp b/urdf/src/model.cpp index 708e074..af4b30e 100644 --- a/urdf/src/model.cpp +++ b/urdf/src/model.cpp @@ -257,23 +257,15 @@ bool Model::initTree(std::map &parent_link_tree) std::string child_link_name = joint->second->child_link_name; ROS_DEBUG("build tree: joint: '%s' has parent link '%s' and child link '%s'", joint->first.c_str(), parent_link_name.c_str(),child_link_name.c_str()); - - /// add an empty "world" link - if (parent_link_name == "world") - { - if (this->getLink(parent_link_name)) - { - ROS_DEBUG(" parent link '%s' already exists.", parent_link_name.c_str()); - } - else - { - ROS_DEBUG(" parent link '%s' is a special case, adding fake link.", parent_link_name.c_str()); - boost::shared_ptr link; - link.reset(new Link); - link->name = "world"; - this->links_.insert(make_pair(link->name,link)); - ROS_DEBUG(" successfully added new link '%s'", link->name.c_str()); - } + + /// deal with deprecated case + if (parent_link_name == "world" && !this->getLink(parent_link_name)){ + ROS_WARN("Joint %s specifies the world link as its parent, but there in no link called world. This used to be allowed, but this behavior has been deprecated. You need to explicitly specify each link in your tree.", joint->first.c_str()); + boost::shared_ptr link; + link.reset(new Link); + link->name = "world"; + this->links_.insert(make_pair(link->name,link)); + ROS_DEBUG(" successfully added new link '%s'", link->name.c_str()); } if (parent_link_name.empty()) diff --git a/urdf/src/urdf_check.cpp b/urdf/src/urdf_check.cpp index 748537e..7712060 100644 --- a/urdf/src/urdf_check.cpp +++ b/urdf/src/urdf_check.cpp @@ -91,7 +91,7 @@ int main(int argc, char** argv) if (!root_link) return -1; if (!root_link->child_links.empty()) - std::cout << "root Link: " << root_link->name << " has " << root_link->child_links.size() << " children" << std::endl; + std::cout << "root Link: " << root_link->name << " has " << root_link->child_links.size() << " child(ren)" << std::endl; // print entire tree From c2ed97c01ce367452d485051c00baf3b43ce77c7 Mon Sep 17 00:00:00 2001 From: wim Date: Sat, 21 Nov 2009 01:22:45 +0000 Subject: [PATCH 068/245] kdl parser should warn when converting unknown joint type into fixed joint --- kdl_parser/src/kdl_parser.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/kdl_parser/src/kdl_parser.cpp b/kdl_parser/src/kdl_parser.cpp index e2d768e..d1b88ca 100644 --- a/kdl_parser/src/kdl_parser.cpp +++ b/kdl_parser/src/kdl_parser.cpp @@ -86,6 +86,7 @@ Joint toKdl(boost::shared_ptr jnt) return Joint(jnt->name, F_parent_jnt.p, F_parent_jnt.M * axis, Joint::TransAxis); } default:{ + ROS_WARN("Converting unknown joint type of joint '%s' into a fixed joint", jnt->name.c_str()); return Joint(jnt->name, Joint::None); } } From efb5225fc3efd420c6ca42512ef243a1be116252 Mon Sep 17 00:00:00 2001 From: wim Date: Mon, 23 Nov 2009 23:28:33 +0000 Subject: [PATCH 069/245] rename example to check_kdl_parser to match urdf --- kdl_parser/CMakeLists.txt | 4 ++-- kdl_parser/{test/example.cpp => src/check_kdl_parser.cpp} | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) rename kdl_parser/{test/example.cpp => src/check_kdl_parser.cpp} (96%) diff --git a/kdl_parser/CMakeLists.txt b/kdl_parser/CMakeLists.txt index 15ea318..1f81968 100644 --- a/kdl_parser/CMakeLists.txt +++ b/kdl_parser/CMakeLists.txt @@ -25,8 +25,8 @@ set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) rosbuild_add_library(${PROJECT_NAME} src/kdl_parser.cpp) -rosbuild_add_executable(example test/example.cpp ) -target_link_libraries(example ${PROJECT_NAME}) +rosbuild_add_executable(check_kdl_parser src/check_kdl_parser.cpp ) +target_link_libraries(check_kdl_parser ${PROJECT_NAME}) rosbuild_add_executable(test_parser test/test_kdl_parser.cpp ) target_link_libraries(test_parser ${PROJECT_NAME}) diff --git a/kdl_parser/test/example.cpp b/kdl_parser/src/check_kdl_parser.cpp similarity index 96% rename from kdl_parser/test/example.cpp rename to kdl_parser/src/check_kdl_parser.cpp index edb3a76..904d6bd 100644 --- a/kdl_parser/test/example.cpp +++ b/kdl_parser/src/check_kdl_parser.cpp @@ -43,10 +43,14 @@ using namespace KDL; using namespace std; using namespace urdf; -int main() +int main(int argc, char** argv) { + if (argc < 2){ + std::cerr << "Expect xml file to parse" << std::endl; + return -1; + } Model robot_model; - if (!robot_model.initFile("pr2.urdf")) + if (!robot_model.initFile(argv[1])) {cerr << "Could not generate robot model" << endl; return false;} Tree my_tree; From e72682fe0b35aad683dde4ed37c9aac562fc5282 Mon Sep 17 00:00:00 2001 From: wim Date: Tue, 24 Nov 2009 17:41:11 +0000 Subject: [PATCH 070/245] make joint to root mandatory (as in documentation), add visualization tool, and add regression test --- urdf/CMakeLists.txt | 7 +- urdf/include/urdf/model.h | 5 - urdf/src/{urdf_check.cpp => check_urdf.cpp} | 0 urdf/src/model.cpp | 142 +- urdf/src/urdf_to_graphiz.cpp | 117 + urdf/test/pr2_desc_explicit_world.xml | 3448 +++++++++++++++++++ urdf/test/test_robot_model_parser.launch | 2 +- 7 files changed, 3626 insertions(+), 95 deletions(-) rename urdf/src/{urdf_check.cpp => check_urdf.cpp} (100%) create mode 100644 urdf/src/urdf_to_graphiz.cpp create mode 100644 urdf/test/pr2_desc_explicit_world.xml diff --git a/urdf/CMakeLists.txt b/urdf/CMakeLists.txt index 76c8c7f..232de10 100644 --- a/urdf/CMakeLists.txt +++ b/urdf/CMakeLists.txt @@ -27,8 +27,11 @@ rosbuild_add_library(${PROJECT_NAME} src/link.cpp src/joint.cpp src/model.cpp) rosbuild_add_boost_directories() #rosbuild_link_boost(${PROJECT_NAME} thread) -rosbuild_add_executable(urdf_check src/urdf_check.cpp) -target_link_libraries(urdf_check ${PROJECT_NAME}) +rosbuild_add_executable(check_urdf src/check_urdf.cpp) +target_link_libraries(check_urdf ${PROJECT_NAME}) + +rosbuild_add_executable(urdf_to_graphiz src/urdf_to_graphiz.cpp) +target_link_libraries(urdf_to_graphiz ${PROJECT_NAME}) rosbuild_add_executable(mem_test test/memtest.cpp) target_link_libraries(mem_test ${PROJECT_NAME}) diff --git a/urdf/include/urdf/model.h b/urdf/include/urdf/model.h index c54ba52..cf7160b 100644 --- a/urdf/include/urdf/model.h +++ b/urdf/include/urdf/model.h @@ -99,11 +99,6 @@ private: /// it's time to build a tree bool initTree(std::map &parent_link_tree); - /// in initXml(), onece tree is built, - /// it's time to find the root Link - bool initRoot(std::map &parent_link_tree); - - /// Model is restricted to a tree for now, which means there exists one root link /// typically, root link is the world(inertial). Where world is a special link /// or is the root_link_ the link attached to the world by PLANAR/FLOATING joint? diff --git a/urdf/src/urdf_check.cpp b/urdf/src/check_urdf.cpp similarity index 100% rename from urdf/src/urdf_check.cpp rename to urdf/src/check_urdf.cpp diff --git a/urdf/src/model.cpp b/urdf/src/model.cpp index af4b30e..d22305b 100644 --- a/urdf/src/model.cpp +++ b/urdf/src/model.cpp @@ -238,126 +238,94 @@ bool Model::initXml(TiXmlElement *robot_xml) return false; } - // find the root link - if (!this->initRoot(parent_link_tree)) - { - ROS_ERROR("failed to find root link"); - return false; - } - return true; } bool Model::initTree(std::map &parent_link_tree) { + this->root_link_.reset(); + // loop through all joints, for every link, assign children links and children joints for (std::map >::iterator joint = this->joints_.begin();joint != this->joints_.end(); joint++) { std::string parent_link_name = joint->second->parent_link_name; std::string child_link_name = joint->second->child_link_name; - ROS_DEBUG("build tree: joint: '%s' has parent link '%s' and child link '%s'", joint->first.c_str(), parent_link_name.c_str(),child_link_name.c_str()); + ROS_DEBUG(" Build tree: joint: '%s' has parent link '%s' and child link '%s'", joint->first.c_str(), parent_link_name.c_str(),child_link_name.c_str()); - /// deal with deprecated case - if (parent_link_name == "world" && !this->getLink(parent_link_name)){ - ROS_WARN("Joint %s specifies the world link as its parent, but there in no link called world. This used to be allowed, but this behavior has been deprecated. You need to explicitly specify each link in your tree.", joint->first.c_str()); - boost::shared_ptr link; - link.reset(new Link); - link->name = "world"; - this->links_.insert(make_pair(link->name,link)); - ROS_DEBUG(" successfully added new link '%s'", link->name.c_str()); + // case where joint is not connected to any link + if (parent_link_name.empty() && !child_link_name.empty()) + { + ROS_ERROR(" Joint %s specifies only parent link but not child link",(joint->second)->name.c_str()); + return false; + } + else if (!parent_link_name.empty() && child_link_name.empty()) + { + ROS_ERROR(" Joint %s specifies only child link but not parent link",(joint->second)->name.c_str()); + return false; + } + else if (parent_link_name.empty() && child_link_name.empty()) + { + ROS_DEBUG(" Joint %s has not parent or child link, it is an abstract joint.",(joint->second)->name.c_str()); } - if (parent_link_name.empty()) - { - ROS_DEBUG(" Joint %s: does not have parent link name specified. Joint is an abstract joint.",(joint->second)->name.c_str()); - } - else if (child_link_name.empty()) - { - ROS_DEBUG(" Joint %s: does not have child link name specified. Joint is an abstract joint.",(joint->second)->name.c_str()); - } + // normal joint case else { - // find parent link - boost::shared_ptr parent_link; + // find child and parent link of joint + boost::shared_ptr child_link, parent_link; + this->getLink(child_link_name, child_link); this->getLink(parent_link_name, parent_link); - - if (!parent_link) + if (!child_link) { - ROS_ERROR(" parent link '%s' of joint '%s' not found", parent_link_name.c_str(), joint->first.c_str() ); + ROS_ERROR(" Child link '%s' of joint: %s not found",child_link_name.c_str(),joint->first.c_str()); return false; } - else + if (!parent_link) { - // find child link - boost::shared_ptr child_link; - this->getLink(child_link_name, child_link); - - if (!child_link) + if (root_link_) { - ROS_ERROR(" child link '%s' of joint: %s not found",child_link_name.c_str(),joint->first.c_str()); - return false; - } - else - { - //set parent link for child link - child_link->setParent(parent_link); - - //set parent joint for child link - child_link->setParentJoint(joint->second); - - //set child joint for parent link - parent_link->addChildJoint(joint->second); - - //set child link for parent link - parent_link->addChild(child_link); - - // fill in child/parent string map - parent_link_tree[child_link->name] = parent_link_name; - - ROS_DEBUG(" now Link '%s' has %i children ", parent_link->name.c_str(), (int)parent_link->child_links.size()); + ROS_ERROR("This tree contains two root links"); + return false; } + ROS_DEBUG(" Parent link '%s' of joint '%s' not found. This should be the root link.", parent_link_name.c_str(), joint->first.c_str() ); + parent_link.reset(new Link); + parent_link->name = parent_link_name; + root_link_ = parent_link; + this->links_.insert(make_pair(parent_link_name, parent_link)); } + + //set parent link for child link + child_link->setParent(parent_link); + + //set parent joint for child link + child_link->setParentJoint(joint->second); + + //set child joint for parent link + parent_link->addChildJoint(joint->second); + + //set child link for parent link + parent_link->addChild(child_link); + + // fill in child/parent string map + parent_link_tree[child_link->name] = parent_link_name; + + ROS_DEBUG(" now Link '%s' has %i children ", parent_link->name.c_str(), (int)parent_link->child_links.size()); } } - return true; -} - - - -bool Model::initRoot(std::map &parent_link_tree) -{ - - this->root_link_.reset(); - - for (std::map::iterator p=parent_link_tree.begin(); p!=parent_link_tree.end(); p++) - { - if (parent_link_tree.find(p->second) == parent_link_tree.end()) - { - if (this->root_link_) - { - ROS_DEBUG("child '%s', parent '%s', root '%s'", p->first.c_str(), p->second.c_str(), this->root_link_->name.c_str()); - if (this->root_link_->name != p->second) - { - ROS_ERROR("Two root links found: '%s' and '%s'", this->root_link_->name.c_str(), p->second.c_str()); - return false; - } - } - else - getLink(p->second,this->root_link_); - } - } - if (!this->root_link_) - { - ROS_ERROR("No root link found. The robot xml is not a valid tree."); + // we should have found root + if (!root_link_){ + ROS_ERROR("The tree does not contain a root link"); return false; } - ROS_DEBUG("Link '%s' is the root link", this->root_link_->name.c_str()); return true; } + + + boost::shared_ptr Model::getMaterial(const std::string& name) const { boost::shared_ptr ptr; diff --git a/urdf/src/urdf_to_graphiz.cpp b/urdf/src/urdf_to_graphiz.cpp new file mode 100644 index 0000000..3541128 --- /dev/null +++ b/urdf/src/urdf_to_graphiz.cpp @@ -0,0 +1,117 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redstributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Wim Meeussen */ + +#include "urdf/model.h" +#include +#include + +using namespace urdf; +using namespace std; + +void addChildLinkNames(boost::shared_ptr link, ofstream& os) +{ + os << "\"" << link->name << "\" [label=\"" << link->name << "\"];" << endl; + for (std::vector >::const_iterator child = link->child_links.begin(); child != link->child_links.end(); child++) + addChildLinkNames(*child, os); +} + +void addChildJointNames(boost::shared_ptr link, ofstream& os) +{ + double r, p, y; + for (std::vector >::const_iterator child = link->child_links.begin(); child != link->child_links.end(); child++){ + (*child)->parent_joint->parent_to_joint_origin_transform.rotation.getRPY(r,p,y); + os << "\"" << link->name << "\" -> \"" << (*child)->parent_joint->name + << "\" [label=\"xyz: " + << (*child)->parent_joint->parent_to_joint_origin_transform.position.x << " " + << (*child)->parent_joint->parent_to_joint_origin_transform.position.y << " " + << (*child)->parent_joint->parent_to_joint_origin_transform.position.z << " " + << "\\nrpy: " << r << " " << p << " " << y << "\"]" << endl; + os << "\"" << (*child)->parent_joint->name << "\" -> \"" << (*child)->name << "\"" << endl; + addChildJointNames(*child, os); + } +} + + +void printTree(boost::shared_ptr link, string file) +{ + std::ofstream os; + os.open(file.c_str()); + os << "digraph G {" << endl; + + os << "node [shape=box];" << endl; + addChildLinkNames(link, os); + + os << "node [shape=ellipse, color=blue, fontcolor=blue];" << endl; + addChildJointNames(link, os); + + os << "}" << endl; + os.close(); +} + + + +int main(int argc, char** argv) +{ + if (argc != 2){ + std::cerr << "Usage: urdf_to_graphiz input.xml" << std::endl; + return -1; + } + + TiXmlDocument robot_model_xml; + robot_model_xml.LoadFile(argv[1]); + TiXmlElement *robot_xml = robot_model_xml.FirstChildElement("robot"); + if (!robot_xml){ + std::cerr << "ERROR: Could not load the xml into TiXmlElement" << std::endl; + return -1; + } + + Model robot; + if (!robot.initXml(robot_xml)){ + std::cerr << "ERROR: Model Parsing the xml failed" << std::endl; + return -1; + } + string output = robot.getName(); + + // print entire tree to file + printTree(robot.getRoot(), output+".gv"); + cout << "Created file " << output << ".gv" << endl; + + string command = "dot -Tpdf "+output+".gv -o "+output+".pdf"; + system(command.c_str()); + cout << "Created file " << output << ".pdf" << endl; + return 0; +} + diff --git a/urdf/test/pr2_desc_explicit_world.xml b/urdf/test/pr2_desc_explicit_world.xml new file mode 100644 index 0000000..ff3db28 --- /dev/null +++ b/urdf/test/pr2_desc_explicit_world.xml @@ -0,0 +1,3448 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + true + 1000.0 + + + + + true + 1.0 + 5 + + power_state + 10.0 + 87.78 + -474 + 525 + 15.52 + 16.41 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 + 640 + 1 + + 0.0 0.0 0.0 + false + + -80 + 80 + + 0.05 + 10.0 + 0.01 + 20.0 + + 0.005 + true + 20.0 + base_scan + base_laser_link + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + true + + base_link_geom + 100.0 + + true + 100.0 + base_bumper + + + + + + + true + 100.0 + base_link + base_pose_ground_truth + 0.01 + map + 25.7 25.7 0 + 0 0 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + torso_lift_link_geom + 100.0 + + true + 100.0 + torso_lift_bumper + + + + + + + + -52143.33 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + R8G8B8 + 2448 2050 + 45 + 0.1 + 100 + 20.0 + + true + 20.0 + /prosilica/cam_info + /prosilica/image + /prosilica/image_rect + /prosilica/cam_info_service + /prosilica/poll + hight_def_optical_frame + 1224.5 + 1224.5 + 1025.5 + 2955 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + B8G8R8 + 90.0 + 0.1 + 100 + 25.0 + + true + 25.0 + wide_stereo/left/image_raw + wide_stereo/left/camera_info + wide_stereo_optical_frame + 0.0 + 320.5 + 320.5 + 240.5 + + + 320.0 + 0 + 0 + 0 + 0 + 0 + + + + true + PR2/Blue + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + B8G8R8 + 90.0 + 0.1 + 100 + 25.0 + + true + 25.0 + wide_stereo/right/image_raw + wide_stereo/right/camera_info + wide_stereo_optical_frame + 0.09 + 320.5 + 320.5 + 240.5 + + + 320.0 + 0 + 0 + 0 + 0 + 0 + + + + true + PR2/Blue + + true + + + + + + + true + 20.0 + wide_stereo_l_stereo_camera_sensor + wide_stereo_r_stereo_camera_sensor + wide_stereo/raw_stereo + wide_stereo_optical_frame + 320.5 + 320.5 + 240.5 + + + 320.0 + 0 + 0 + 0 + 0 + 0 + -0.09 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 45.0 + 0.1 + 100 + 25.0 + + true + 25.0 + narrow_stereo/left/image_raw + narrow_stereo/left/camera_info + narrow_stereo_optical_frame + 0.0 + 320.5 + 320.5 + 240.5 + + + 772.55 + 0 + 0 + 0 + 0 + 0 + + + + true + PR2/Blue + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 45.0 + 0.1 + 100 + 25.0 + + true + 25.0 + narrow_stereo/right/image_raw + narrow_stereo/right/camera_info + narrow_stereo_optical_frame + 0.09 + 320.5 + 320.5 + 240.5 + + + 772.55 + 0 + 0 + 0 + 0 + 0 + + + + true + PR2/Blue + + true + + + + + + + true + 20.0 + narrow_stereo_l_stereo_camera_sensor + narrow_stereo_r_stereo_camera_sensor + narrow_stereo/raw_stereo + narrow_stereo_optical_frame + 320.5 + 320.5 + 240.5 + + + 772.55 + 0 + 0 + 0 + 0 + 0 + -0.09 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 + 640 + 1 + + 0.0 0.0 0.0 + false + + -80 + 80 + + 0.05 + 10.0 + 0.01 + 40.0 + + 0.005 + true + 40.0 + tilt_scan + laser_tilt_link + + + + + + + + + -6.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + r_shoulder_pan_link_geom + 100.0 + + true + 100.0 + r_shoulder_pan_bumper + + + + + true + + + + + + r_shoulder_lift_link_geom + 100.0 + + true + 100.0 + r_r_shoulder_lift_bumper + + + + true + + + + + + true + + + + + + + + 63.16 + + + + 61.89 + + + + 32.65 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + r_upper_arm_link_geom + 100.0 + + true + 100.0 + r_upper_arm_bumper + + + + true + + + -1.0 + + + r_elbow_flex_link_geom + 100.0 + + true + 100.0 + r_elbow_flex_bumper + + + + + true + + + + + + true + + + + + + -36.17 + + + + 90.5142857143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + r_forearm_link_geom + 100.0 + + true + 100.0 + r_forearm_bumper + + + + + + true + + r_wrist_flex_link_geom + 100.0 + + true + 100.0 + r_wrist_flex_bumper + + + + + + + + + true + + r_wrist_roll_link_geom + 100.0 + + true + 100.0 + r_wrist_roll_bumper + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + r_gripper_l_finger_link_geom + 100.0 + + true + 100.0 + r_gripper_l_finger_bumper + + + + + + + + + + + + + + + + true + + r_gripper_r_finger_link_geom + 100.0 + + true + 100.0 + r_gripper_r_finger_bumper + + + + + + + + + + + + + + + true + false + + r_gripper_l_finger_tip_link_geom + 100.0 + + true + 100.0 + r_gripper_l_finger_tip_bumper + + + + + + + + + + + + + + + true + false + + r_gripper_r_finger_tip_link_geom + 100.0 + + true + 100.0 + r_gripper_r_finger_tip_bumper + + + + + + + + + + + true + 100.0 + r_gripper_l_finger_link + r_gripper_l_finger_pose_ground_truth + 0.0 + map + + + + true + 100.0 + r_gripper_l_finger_link + r_gripper_l_finger_force_ground_truth + r_gripper_l_finger_link + + + + + + + + + + + + + true + + r_gripper_palm_link_geom + 100.0 + + true + 100.0 + r_gripper_palm_bumper + + + + + + true + + + + + true + 0.01 + 0.0001 + 0 + 0 + 0.0001 + 0 + 0.0001 + 0 + 0 + 0 + 0.82025 0.188 0.790675 + 0 -0 0 + + 0 0 0 + 0 -0 0 + 0.0 0.0 0.0 + + 0 0 0 + 0 -0 0 + 0.0 0.0 0.0 + unit_box + PR2/White + + + true + false + + + r_gripper_float_link + r_gripper_palm_link + r_gripper_float_link + 1 0 0 + -0.05 + 0.001 + + + r_gripper_l_finger_tip_link + r_gripper_float_link + r_gripper_l_finger_tip_link + 0 1 0 + 0 0 0 + + + r_gripper_r_finger_tip_link + r_gripper_float_link + r_gripper_r_finger_tip_link + 0 1 0 + 0 0 0 + + + + + true + 100.0 + r_gripper_palm_link + r_gripper_palm_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + map + + + + true + 100.0 + r_gripper_tool_frame + r_gripper_tool_frame_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + /map + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + l_shoulder_pan_link_geom + 100.0 + + true + 100.0 + l_shoulder_pan_bumper + + + + + true + + + + + + l_shoulder_lift_link_geom + 100.0 + + true + 100.0 + l_r_shoulder_lift_bumper + + + + true + + + + + + true + + + + + + + + 63.16 + + + + 61.89 + + + + 32.65 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + l_upper_arm_link_geom + 100.0 + + true + 100.0 + l_upper_arm_bumper + + + + true + + + -1.0 + + + l_elbow_flex_link_geom + 100.0 + + true + 100.0 + l_elbow_flex_bumper + + + + + true + + + + + + true + + + + + + -36.17 + + + + 90.5142857143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + l_forearm_link_geom + 100.0 + + true + 100.0 + l_forearm_bumper + + + + + + true + + l_wrist_flex_link_geom + 100.0 + + true + 100.0 + l_wrist_flex_bumper + + + + + + + + + true + + l_wrist_roll_link_geom + 100.0 + + true + 100.0 + l_wrist_roll_bumper + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + l_gripper_l_finger_link_geom + 100.0 + + true + 100.0 + l_gripper_l_finger_bumper + + + + + + + + + + + + + + + + true + + l_gripper_r_finger_link_geom + 100.0 + + true + 100.0 + l_gripper_r_finger_bumper + + + + + + + + + + + + + + + true + false + + l_gripper_l_finger_tip_link_geom + 100.0 + + true + 100.0 + l_gripper_l_finger_tip_bumper + + + + + + + + + + + + + + + true + false + + l_gripper_r_finger_tip_link_geom + 100.0 + + true + 100.0 + l_gripper_r_finger_tip_bumper + + + + + + + + + + + true + 100.0 + l_gripper_l_finger_link + l_gripper_l_finger_pose_ground_truth + 0.0 + map + + + + true + 100.0 + l_gripper_l_finger_link + l_gripper_l_finger_force_ground_truth + l_gripper_l_finger_link + + + + + + + + + + + + + true + + l_gripper_palm_link_geom + 100.0 + + true + 100.0 + l_gripper_palm_bumper + + + + + + true + + + + + true + 0.01 + 0.0001 + 0 + 0 + 0.0001 + 0 + 0.0001 + 0 + 0 + 0 + 0.82025 0.188 0.790675 + 0 -0 0 + + 0 0 0 + 0 -0 0 + 0.0 0.0 0.0 + + 0 0 0 + 0 -0 0 + 0.0 0.0 0.0 + unit_box + PR2/White + + + true + false + + + l_gripper_float_link + l_gripper_palm_link + l_gripper_float_link + 1 0 0 + -0.05 + 0.001 + + + l_gripper_l_finger_tip_link + l_gripper_float_link + l_gripper_l_finger_tip_link + 0 1 0 + 0 0 0 + + + l_gripper_r_finger_tip_link + l_gripper_float_link + l_gripper_r_finger_tip_link + 0 1 0 + 0 0 0 + + + + + true + 100.0 + l_gripper_palm_link + l_gripper_palm_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + map + + + + true + 100.0 + l_gripper_tool_frame + l_gripper_tool_frame_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + /map + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 90.0 + 0.1 + 100 + 25.0 + + true + 25.0 + l_forearm_cam/image_raw + l_forearm_cam/camera_info + l_forearm_cam_frame + 0.0 + 320.5 + 320.5 + 240.5 + + + 320.0 + 0 + 0 + 0 + 0 + 0 + + + + true + PR2/Blue + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 90.0 + 0.1 + 100 + 25.0 + + true + 25.0 + r_forearm_cam/image_raw + r_forearm_cam/camera_info + r_forearm_cam_frame + 0.0 + 320.5 + 320.5 + 240.5 + + + 320.0 + 0 + 0 + 0 + 0 + 0 + + + + true + PR2/Blue + + true + + + diff --git a/urdf/test/test_robot_model_parser.launch b/urdf/test/test_robot_model_parser.launch index 66d8df1..582529a 100644 --- a/urdf/test/test_robot_model_parser.launch +++ b/urdf/test/test_robot_model_parser.launch @@ -1,3 +1,3 @@ - + From f641312f0a212258b8d40da9cbf9ada250ee21ab Mon Sep 17 00:00:00 2001 From: wim Date: Tue, 24 Nov 2009 21:04:39 +0000 Subject: [PATCH 071/245] update to latests design with optional root link --- urdf/include/urdf/model.h | 5 ++ urdf/src/model.cpp | 86 +++++++++++++++++---------- urdf/test/test_robot_model_parser.cpp | 2 +- 3 files changed, 61 insertions(+), 32 deletions(-) diff --git a/urdf/include/urdf/model.h b/urdf/include/urdf/model.h index cf7160b..c54ba52 100644 --- a/urdf/include/urdf/model.h +++ b/urdf/include/urdf/model.h @@ -99,6 +99,11 @@ private: /// it's time to build a tree bool initTree(std::map &parent_link_tree); + /// in initXml(), onece tree is built, + /// it's time to find the root Link + bool initRoot(std::map &parent_link_tree); + + /// Model is restricted to a tree for now, which means there exists one root link /// typically, root link is the world(inertial). Where world is a special link /// or is the root_link_ the link attached to the world by PLANAR/FLOATING joint? diff --git a/urdf/src/model.cpp b/urdf/src/model.cpp index d22305b..648c33c 100644 --- a/urdf/src/model.cpp +++ b/urdf/src/model.cpp @@ -238,63 +238,62 @@ bool Model::initXml(TiXmlElement *robot_xml) return false; } + // find the root link + if (!this->initRoot(parent_link_tree)) + { + ROS_ERROR("failed to find root link"); + return false; + } + return true; } bool Model::initTree(std::map &parent_link_tree) { - this->root_link_.reset(); - // loop through all joints, for every link, assign children links and children joints for (std::map >::iterator joint = this->joints_.begin();joint != this->joints_.end(); joint++) { std::string parent_link_name = joint->second->parent_link_name; std::string child_link_name = joint->second->child_link_name; - ROS_DEBUG(" Build tree: joint: '%s' has parent link '%s' and child link '%s'", joint->first.c_str(), parent_link_name.c_str(),child_link_name.c_str()); + ROS_DEBUG("build tree: joint: '%s' has parent link '%s' and child link '%s'", joint->first.c_str(), parent_link_name.c_str(),child_link_name.c_str()); - // case where joint is not connected to any link if (parent_link_name.empty() && !child_link_name.empty()) { - ROS_ERROR(" Joint %s specifies only parent link but not child link",(joint->second)->name.c_str()); + ROS_ERROR(" Joint %s specifies child link but not parent link.",(joint->second)->name.c_str()); return false; } - else if (!parent_link_name.empty() && child_link_name.empty()) + else if (!parent_link_name.empty() && child_link_name.empty()) { - ROS_ERROR(" Joint %s specifies only child link but not parent link",(joint->second)->name.c_str()); + ROS_ERROR(" Joint %s specifies parent link but not child link.",(joint->second)->name.c_str()); return false; } else if (parent_link_name.empty() && child_link_name.empty()) { - ROS_DEBUG(" Joint %s has not parent or child link, it is an abstract joint.",(joint->second)->name.c_str()); + ROS_DEBUG(" Joint %s specifies no parent link and no child link. This is an abstract joint.",(joint->second)->name.c_str()); } - - // normal joint case else { - // find child and parent link of joint + // find child and parent links boost::shared_ptr child_link, parent_link; this->getLink(child_link_name, child_link); - this->getLink(parent_link_name, parent_link); if (!child_link) { - ROS_ERROR(" Child link '%s' of joint: %s not found",child_link_name.c_str(),joint->first.c_str()); + ROS_ERROR(" child link '%s' of joint '%s' not found", child_link_name.c_str(), joint->first.c_str() ); return false; } + this->getLink(parent_link_name, parent_link); if (!parent_link) { - if (root_link_) - { - ROS_ERROR("This tree contains two root links"); - return false; - } - ROS_DEBUG(" Parent link '%s' of joint '%s' not found. This should be the root link.", parent_link_name.c_str(), joint->first.c_str() ); + ROS_DEBUG(" parent link '%s' of joint '%s' not found. Automatically adding it. This must be the root link", + parent_link_name.c_str(), joint->first.c_str() ); + parent_link.reset(new Link); parent_link->name = parent_link_name; - root_link_ = parent_link; - this->links_.insert(make_pair(parent_link_name, parent_link)); + this->links_.insert(make_pair(parent_link->name, parent_link)); + ROS_DEBUG(" successfully added new link '%s'", parent_link->name.c_str()); } - + //set parent link for child link child_link->setParent(parent_link); @@ -303,28 +302,53 @@ bool Model::initTree(std::map &parent_link_tree) //set child joint for parent link parent_link->addChildJoint(joint->second); - + //set child link for parent link parent_link->addChild(child_link); - + // fill in child/parent string map parent_link_tree[child_link->name] = parent_link_name; - + ROS_DEBUG(" now Link '%s' has %i children ", parent_link->name.c_str(), (int)parent_link->child_links.size()); } } - // we should have found root - if (!root_link_){ - ROS_ERROR("The tree does not contain a root link"); - return false; - } - return true; } +bool Model::initRoot(std::map &parent_link_tree) +{ + + this->root_link_.reset(); + + for (std::map::iterator p=parent_link_tree.begin(); p!=parent_link_tree.end(); p++) + { + if (parent_link_tree.find(p->second) == parent_link_tree.end()) + { + if (this->root_link_) + { + ROS_DEBUG("child '%s', parent '%s', root '%s'", p->first.c_str(), p->second.c_str(), this->root_link_->name.c_str()); + if (this->root_link_->name != p->second) + { + ROS_ERROR("Two root links found: '%s' and '%s'", this->root_link_->name.c_str(), p->second.c_str()); + return false; + } + } + else + getLink(p->second,this->root_link_); + } + } + if (!this->root_link_) + { + ROS_ERROR("No root link found. The robot xml is not a valid tree."); + return false; + } + ROS_DEBUG("Link '%s' is the root link", this->root_link_->name.c_str()); + + return true; +} boost::shared_ptr Model::getMaterial(const std::string& name) const { diff --git a/urdf/test/test_robot_model_parser.cpp b/urdf/test/test_robot_model_parser.cpp index efef0fb..ef46eb1 100644 --- a/urdf/test/test_robot_model_parser.cpp +++ b/urdf/test/test_robot_model_parser.cpp @@ -76,7 +76,7 @@ TEST_F(TestParser, test) robot_model_xml.LoadFile(g_argv[i]); TiXmlElement *robot_xml = robot_model_xml.FirstChildElement("robot"); ASSERT_TRUE(robot_xml != NULL); - if (i == g_argc-1) + if (i >= g_argc-2) ASSERT_TRUE(robot.initXml(robot_xml)); else ASSERT_FALSE(robot.initXml(robot_xml)); From 3117f697bc6ffb7c8b6c6fa781f0ae6966bfcae8 Mon Sep 17 00:00:00 2001 From: wim Date: Tue, 24 Nov 2009 21:44:17 +0000 Subject: [PATCH 072/245] publish tf from root of robot --- .../src/robot_state_publisher.cpp | 39 ++++++------------- .../src/robot_state_publisher_node.cpp | 7 +++- 2 files changed, 18 insertions(+), 28 deletions(-) diff --git a/robot_state_publisher/src/robot_state_publisher.cpp b/robot_state_publisher/src/robot_state_publisher.cpp index a59b1c5..7e3c29b 100644 --- a/robot_state_publisher/src/robot_state_publisher.cpp +++ b/robot_state_publisher/src/robot_state_publisher.cpp @@ -60,12 +60,9 @@ RobotStatePublisher::RobotStatePublisher(const Tree& tree) NodeHandle n; tf_publisher_ = n.advertise("/tf", 5); - // get the 'real' root segment of the tree, which is the first child of "root" + // get the root segment of the tree SegmentMap::const_iterator root = tree.getRootSegment(); - if (root->second.children.empty()) - throw empty_tree_ex; - - root_ = (*root->second.children.begin())->first; + root_ = root->first; } @@ -79,31 +76,19 @@ bool RobotStatePublisher::publishTransforms(const map& joint_pos ROS_ERROR("Could not compute link poses. The tree or the state is invalid."); return false; } - tf_msg_.transforms.resize(link_poses.size()-1); + tf_msg_.transforms.resize(link_poses.size()); - // publish the transforms to tf, converting the transforms from "root" to the 'real' root - geometry_msgs::TransformStamped trans; - map::const_iterator root = link_poses.find(root_); - if (root == link_poses.end()){ - ROS_ERROR("Did not find root of tree"); - return false; - } - - // remove root from published poses - Frame offset = root->second.Inverse(); - unsigned int i = 0; // send transforms to tf + geometry_msgs::TransformStamped trans; + tf::Transform tf_frame; + unsigned int i = 0; for (map::const_iterator f=link_poses.begin(); f!=link_poses.end(); f++){ - if (f != root){ - Frame frame = offset * f->second; - tf::Transform tf_frame; - tf::TransformKDLToTF(frame, tf_frame); - trans.header.stamp = time; - trans.header.frame_id = tf::remap(tf_prefix_, root->first); - trans.child_frame_id = tf::remap(tf_prefix_, f->first); - tf::transformTFToMsg(tf_frame, trans.transform); - tf_msg_.transforms[i++] = trans; - } + tf::TransformKDLToTF(f->second, tf_frame); + trans.header.stamp = time; + trans.header.frame_id = tf::remap(tf_prefix_, root_); + trans.child_frame_id = tf::remap(tf_prefix_, f->first); + tf::transformTFToMsg(tf_frame, trans.transform); + tf_msg_.transforms[i++] = trans; } tf_publisher_.publish(tf_msg_); diff --git a/robot_state_publisher/src/robot_state_publisher_node.cpp b/robot_state_publisher/src/robot_state_publisher_node.cpp index ec7be7c..c60b253 100644 --- a/robot_state_publisher/src/robot_state_publisher_node.cpp +++ b/robot_state_publisher/src/robot_state_publisher_node.cpp @@ -69,7 +69,12 @@ int main(int argc, char** argv) return -1; } - JointStateListener state_publisher(tree); + if (tree.getNrOfSegments() == 0) + ROS_WARN("Robot state publisher got an empty tree and cannot publish any state to tf"); + else if (tree.getNrOfSegments() == 1) + ROS_WARN("Robot state publisher got a tree with only one segment and cannot publish any state to tf"); + else + JointStateListener state_publisher(tree); ros::spin(); return 0; From b83664adcf749505a6f657e3bbb533e6d18624da Mon Sep 17 00:00:00 2001 From: wim Date: Tue, 24 Nov 2009 21:57:49 +0000 Subject: [PATCH 073/245] fix scope problem --- .../src/robot_state_publisher_node.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/robot_state_publisher/src/robot_state_publisher_node.cpp b/robot_state_publisher/src/robot_state_publisher_node.cpp index c60b253..ccff5ed 100644 --- a/robot_state_publisher/src/robot_state_publisher_node.cpp +++ b/robot_state_publisher/src/robot_state_publisher_node.cpp @@ -69,13 +69,17 @@ int main(int argc, char** argv) return -1; } - if (tree.getNrOfSegments() == 0) + if (tree.getNrOfSegments() == 0){ ROS_WARN("Robot state publisher got an empty tree and cannot publish any state to tf"); - else if (tree.getNrOfSegments() == 1) + ros::spin(); + } + else if (tree.getNrOfSegments() == 1){ ROS_WARN("Robot state publisher got a tree with only one segment and cannot publish any state to tf"); - else + ros::spin(); + } + else{ JointStateListener state_publisher(tree); - - ros::spin(); + ros::spin(); + } return 0; } From d300f6e8fa3790b7cb8e23cbab9b916f9b61ea55 Mon Sep 17 00:00:00 2001 From: hsu Date: Wed, 25 Nov 2009 05:07:28 +0000 Subject: [PATCH 074/245] minor change: rename base_laser to base_laser_link in test xml. --- urdf/test/pr2_desc_no_filename_in_mesh.xml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/urdf/test/pr2_desc_no_filename_in_mesh.xml b/urdf/test/pr2_desc_no_filename_in_mesh.xml index 21c98b8..88d75b3 100644 --- a/urdf/test/pr2_desc_no_filename_in_mesh.xml +++ b/urdf/test/pr2_desc_no_filename_in_mesh.xml @@ -112,8 +112,8 @@ - - + + @@ -706,8 +706,8 @@ 0 0 0 - - + + 640 640 1 @@ -721,13 +721,13 @@ 10.0 0.01 20.0 - + 0.005 true 20.0 base_scan - base_laser - + base_laser_link + From db0983460a19dc58546108c935def14ca46c0e29 Mon Sep 17 00:00:00 2001 From: hsu Date: Wed, 25 Nov 2009 05:07:50 +0000 Subject: [PATCH 075/245] bug fix, sphere initXml always fails. --- urdf/src/link.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/urdf/src/link.cpp b/urdf/src/link.cpp index f0adc1d..74ab9c9 100644 --- a/urdf/src/link.cpp +++ b/urdf/src/link.cpp @@ -288,7 +288,7 @@ bool Sphere::initXml(TiXmlElement *c) } radius = atof(c->Attribute("radius")); - return false; + return true; } bool Box::initXml(TiXmlElement *c) From 713b6d6f5256756267b3c61b235ecf745ac19a95 Mon Sep 17 00:00:00 2001 From: wim Date: Wed, 25 Nov 2009 17:56:05 +0000 Subject: [PATCH 076/245] preparing for the 0.6.4 release of robot_model --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8be5573..0b6790c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,4 +16,4 @@ set(ROSPACK_MAKEDIST true) # variables. #list(APPEND CPACK_SOURCE_IGNORE_FILES /core/experimental) -rosbuild_make_distribution(0.6.3) +rosbuild_make_distribution(0.6.4) From 379fbc84eb1e8903956e72b328bb04aa36510a31 Mon Sep 17 00:00:00 2001 From: hsu Date: Wed, 25 Nov 2009 17:58:49 +0000 Subject: [PATCH 077/245] minor change, base_laser --> base_laser_link link name update in test xmls. --- kdl_parser/test/pr2_desc.xml | 6 +++--- robot_state_publisher/test/pr2.urdf | 14 +++++++------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/kdl_parser/test/pr2_desc.xml b/kdl_parser/test/pr2_desc.xml index a1e15b8..df794c6 100644 --- a/kdl_parser/test/pr2_desc.xml +++ b/kdl_parser/test/pr2_desc.xml @@ -129,7 +129,7 @@ - + 640 640 1 @@ -144,13 +144,13 @@ 10.0 0.01 20.0 - + 0.005 true 20.0 base_scan base_laser_link - + diff --git a/robot_state_publisher/test/pr2.urdf b/robot_state_publisher/test/pr2.urdf index de8f6ed..81f8d79 100644 --- a/robot_state_publisher/test/pr2.urdf +++ b/robot_state_publisher/test/pr2.urdf @@ -112,8 +112,8 @@ - - + + @@ -706,8 +706,8 @@ 0 0 0 - - + + 640 640 1 @@ -721,13 +721,13 @@ 10.0 0.01 20.0 - + 0.005 true 20.0 base_scan - base_laser - + base_laser_link + From 9eed0abfa00abc5a28ed1aeeb1d4c18465c4fa08 Mon Sep 17 00:00:00 2001 From: wheeler Date: Tue, 1 Dec 2009 01:23:38 +0000 Subject: [PATCH 078/245] Remove use of deprecated rosbuild macros --- ivcon/CMakeLists.txt | 4 ++-- kdl_parser/CMakeLists.txt | 4 ++-- resource_retriever/test/CMakeLists.txt | 2 +- robot_state_publisher/CMakeLists.txt | 4 ++-- urdf/CMakeLists.txt | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/ivcon/CMakeLists.txt b/ivcon/CMakeLists.txt index 8169c5a..fa1a311 100644 --- a/ivcon/CMakeLists.txt +++ b/ivcon/CMakeLists.txt @@ -1,9 +1,9 @@ cmake_minimum_required(VERSION 2.4.6) include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake) -rospack(ivcon) +rosbuild_init() #uncomment for profiling set(ROS_LINK_FLAGS "-lm" ${ROS_LINK_FLAGS}) -rospack_add_executable(bin/ivcon src/ivcon.c) +rosbuild_add_executable(bin/ivcon src/ivcon.c) diff --git a/kdl_parser/CMakeLists.txt b/kdl_parser/CMakeLists.txt index 1f81968..6625169 100644 --- a/kdl_parser/CMakeLists.txt +++ b/kdl_parser/CMakeLists.txt @@ -19,9 +19,9 @@ set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) #uncomment if you have defined messages -#genmsg() +#rosbuild_genmsg() #uncomment if you have defined services -#gensrv() +#rosbuild_gensrv() rosbuild_add_library(${PROJECT_NAME} src/kdl_parser.cpp) diff --git a/resource_retriever/test/CMakeLists.txt b/resource_retriever/test/CMakeLists.txt index 7624c4c..f1c0fa6 100644 --- a/resource_retriever/test/CMakeLists.txt +++ b/resource_retriever/test/CMakeLists.txt @@ -1,4 +1,4 @@ set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}) -rospack_add_gtest(test/utest test.cpp) +rosbuild_add_gtest(test/utest test.cpp) target_link_libraries(test/utest ${PROJECT_NAME}) diff --git a/robot_state_publisher/CMakeLists.txt b/robot_state_publisher/CMakeLists.txt index 9f9e7f5..56f67f7 100644 --- a/robot_state_publisher/CMakeLists.txt +++ b/robot_state_publisher/CMakeLists.txt @@ -18,9 +18,9 @@ set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) #uncomment if you have defined messages -#genmsg() +#rosbuild_genmsg() #uncomment if you have defined services -#gensrv() +#rosbuild_gensrv() rosbuild_add_library(${PROJECT_NAME} src/joint_state_listener.cpp src/robot_state_publisher.cpp src/treefksolverposfull_recursive.cpp) diff --git a/urdf/CMakeLists.txt b/urdf/CMakeLists.txt index 232de10..4dceb93 100644 --- a/urdf/CMakeLists.txt +++ b/urdf/CMakeLists.txt @@ -17,7 +17,7 @@ set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) #uncomment if you have defined messages -#genmsg() +#rosbuild_genmsg() rosbuild_gensrv() From d5285c6385462ad807e47d24fb26f396d7ecb1c6 Mon Sep 17 00:00:00 2001 From: wim Date: Wed, 2 Dec 2009 00:24:24 +0000 Subject: [PATCH 079/245] allow empty joint vector for publishing of tree with all fixed joints --- robot_state_publisher/src/joint_state_listener.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/robot_state_publisher/src/joint_state_listener.cpp b/robot_state_publisher/src/joint_state_listener.cpp index 4bb67b4..268117b 100644 --- a/robot_state_publisher/src/joint_state_listener.cpp +++ b/robot_state_publisher/src/joint_state_listener.cpp @@ -64,11 +64,6 @@ JointStateListener::~JointStateListener() void JointStateListener::callbackJointState(const JointStateConstPtr& state) { - if (state->get_name_size() == 0){ - ROS_ERROR("Robot state publisher received an empty joint state vector"); - return; - } - if (state->get_name_size() != state->get_position_size()){ ROS_ERROR("Robot state publisher received an invalid joint state vector"); return; From 16e54bbb3a4062a33d9b284463a1b98eaa6489f9 Mon Sep 17 00:00:00 2001 From: hsu Date: Thu, 3 Dec 2009 00:20:55 +0000 Subject: [PATCH 080/245] adding test with no visual --- urdf/test/no_visual.urdf | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 urdf/test/no_visual.urdf diff --git a/urdf/test/no_visual.urdf b/urdf/test/no_visual.urdf new file mode 100644 index 0000000..0554bac --- /dev/null +++ b/urdf/test/no_visual.urdf @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + From cd316a83f34624172c09c84b9ad3d1329d6e1865 Mon Sep 17 00:00:00 2001 From: hsu Date: Thu, 3 Dec 2009 00:21:35 +0000 Subject: [PATCH 081/245] adding test cases --- urdf/test/one_link.urdf | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 urdf/test/one_link.urdf diff --git a/urdf/test/one_link.urdf b/urdf/test/one_link.urdf new file mode 100644 index 0000000..15e64d5 --- /dev/null +++ b/urdf/test/one_link.urdf @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + From 55b415368187f3abd4c652435093c63ddadb5efd Mon Sep 17 00:00:00 2001 From: hsu Date: Thu, 3 Dec 2009 00:28:02 +0000 Subject: [PATCH 082/245] adding test. --- urdf/test/two_links_one_joint.urdf | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 urdf/test/two_links_one_joint.urdf diff --git a/urdf/test/two_links_one_joint.urdf b/urdf/test/two_links_one_joint.urdf new file mode 100644 index 0000000..e1e0062 --- /dev/null +++ b/urdf/test/two_links_one_joint.urdf @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + From 47864e32e0a66de823af2c2a13d852e26a0c838d Mon Sep 17 00:00:00 2001 From: wim Date: Fri, 11 Dec 2009 17:16:24 +0000 Subject: [PATCH 083/245] add optional rising and falling attributes to the calibration element. Ticket #3141 --- urdf/include/urdf/joint.h | 2 +- urdf/src/joint.cpp | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/urdf/include/urdf/joint.h b/urdf/include/urdf/joint.h index cbe9f67..6151527 100644 --- a/urdf/include/urdf/joint.h +++ b/urdf/include/urdf/joint.h @@ -106,7 +106,7 @@ class JointCalibration { public: JointCalibration() { this->clear(); }; - double reference_position; + double reference_position, rising, falling; void clear() { diff --git a/urdf/src/joint.cpp b/urdf/src/joint.cpp index 345ad49..0f2fecc 100644 --- a/urdf/src/joint.cpp +++ b/urdf/src/joint.cpp @@ -175,6 +175,26 @@ bool JointCalibration::initXml(TiXmlElement* config) else this->reference_position = atof(reference_position_str); + // Get rising edge position + const char* rising_position_str = config->Attribute("rising"); + if (rising_position_str == NULL) + { + ROS_DEBUG("joint calibration: no rising, using default value"); + this->rising = 0; + } + else + this->rising = atof(rising_position_str); + + // Get falling edge position + const char* falling_position_str = config->Attribute("falling"); + if (falling_position_str == NULL) + { + ROS_DEBUG("joint calibration: no falling, using default value"); + this->falling = 0; + } + else + this->falling = atof(falling_position_str); + return true; } From d207c62dea5af099e4ce7f5b0a86a7b9e3167a70 Mon Sep 17 00:00:00 2001 From: gerkey Date: Mon, 21 Dec 2009 01:36:46 +0000 Subject: [PATCH 084/245] Added missing name attributes in launch files --- robot_state_publisher/test/test_publisher.launch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robot_state_publisher/test/test_publisher.launch b/robot_state_publisher/test/test_publisher.launch index 2041edc..43d8fae 100644 --- a/robot_state_publisher/test/test_publisher.launch +++ b/robot_state_publisher/test/test_publisher.launch @@ -1,5 +1,5 @@ - + From 9a5537a01601bdd2f4d9d36aeb3b26a8fe8dc547 Mon Sep 17 00:00:00 2001 From: hsu Date: Mon, 28 Dec 2009 22:11:40 +0000 Subject: [PATCH 085/245] adding some comments on JointSafety for safety controllers #3442 --- urdf/include/urdf/joint.h | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/urdf/include/urdf/joint.h b/urdf/include/urdf/joint.h index 6151527..bd1279d 100644 --- a/urdf/include/urdf/joint.h +++ b/urdf/include/urdf/joint.h @@ -82,10 +82,42 @@ public: bool initXml(TiXmlElement* config); }; +/// \brief Parameters for Joint Safety Controllers class JointSafety { public: + /// clear variables on construction JointSafety() { this->clear(); }; + + /// + /// IMPORTANT: The safety controller support is very much PR2 specific, not intended for generic usage. + /// + /// Basic safety controller operation is as follows + /// + /// current safety controllers will take effect on joints outside the ranges below: + /// position range: [JointSafety::soft_lower_limit + JointLimits::velocity / JointSafety::k_position, + /// JointSafety::soft_uppper_limit - JointLimits::velocity / JointSafety::k_position] + /// if (joint position is outside of the position range above) + /// velocity_limit_min = -JointLimits::velocity + JointSafety::k_position * (joint_position - JointSafety::soft_lower_limit) + /// velocity_limit_max = JointLimits::velocity - JointSafety::k_position * (joint_position - JointSafety::soft_upper_limit) + /// else + /// velocity_limit_min = -JointLimits::velocity + /// velocity_limit_max = JointLimits::velocity + /// + /// velocity range: [velocity_limit_min + JointLimits::effort / JointSafety::k_velocity, + /// velocity_limit_max - JointLimits::effort / JointSafety::k_velocity] + /// + /// if (joint velocity is outside of the velocity range above) + /// effort_limit_min = -JointLimits::effort + JointSafety::k_velocity * (joint_velocity - velocity_limit_min) + /// effort_limit_max = JointLimits::effort - JointSafety::k_velocity * (joint_velocity - velocity_limit_max) + /// else + /// effort_limit_min = -JointLimits::effort + /// effort_limit_max = JointLimits::effort + /// + /// Final effort command sent to the joint is saturated by [effort_limit_min,effort_limit_max] + /// + /// Please see wiki for more details: http://www.ros.org/wiki/pr2_controller_manager/safety_limits + /// double soft_upper_limit; double soft_lower_limit; double k_position; From da22ba17d128a6275a16d6db0cbe16bb0eee1e40 Mon Sep 17 00:00:00 2001 From: hsu Date: Mon, 28 Dec 2009 22:13:36 +0000 Subject: [PATCH 086/245] minor comment fixes --- urdf/include/urdf/joint.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/urdf/include/urdf/joint.h b/urdf/include/urdf/joint.h index bd1279d..edd8c6f 100644 --- a/urdf/include/urdf/joint.h +++ b/urdf/include/urdf/joint.h @@ -94,10 +94,12 @@ public: /// /// Basic safety controller operation is as follows /// - /// current safety controllers will take effect on joints outside the ranges below: - /// position range: [JointSafety::soft_lower_limit + JointLimits::velocity / JointSafety::k_position, + /// current safety controllers will take effect on joints outside the position range below: + /// + /// position range: [JointSafety::soft_lower_limit + JointLimits::velocity / JointSafety::k_position, /// JointSafety::soft_uppper_limit - JointLimits::velocity / JointSafety::k_position] - /// if (joint position is outside of the position range above) + /// + /// if (joint_position is outside of the position range above) /// velocity_limit_min = -JointLimits::velocity + JointSafety::k_position * (joint_position - JointSafety::soft_lower_limit) /// velocity_limit_max = JointLimits::velocity - JointSafety::k_position * (joint_position - JointSafety::soft_upper_limit) /// else @@ -107,7 +109,7 @@ public: /// velocity range: [velocity_limit_min + JointLimits::effort / JointSafety::k_velocity, /// velocity_limit_max - JointLimits::effort / JointSafety::k_velocity] /// - /// if (joint velocity is outside of the velocity range above) + /// if (joint_velocity is outside of the velocity range above) /// effort_limit_min = -JointLimits::effort + JointSafety::k_velocity * (joint_velocity - velocity_limit_min) /// effort_limit_max = JointLimits::effort - JointSafety::k_velocity * (joint_velocity - velocity_limit_max) /// else From 8327d2110c3de9d4e18fc3bd02959d02db0a6a9f Mon Sep 17 00:00:00 2001 From: wim Date: Tue, 29 Dec 2009 00:05:58 +0000 Subject: [PATCH 087/245] update stack xml file --- stack.xml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/stack.xml b/stack.xml index 9e526ac..34114b5 100644 --- a/stack.xml +++ b/stack.xml @@ -1,4 +1,4 @@ - + robot_model contains packages for modeling various aspects of robot information, specified in the Xml Robot @@ -8,12 +8,11 @@ John Hsu johnhsu@willowgarage.com, Wim Meeussen BSD - + http://ros.org/wiki/robot_model - - + + - - + From 685b28779779b7375216f97f8587fd463f1484fb Mon Sep 17 00:00:00 2001 From: hsu Date: Wed, 30 Dec 2009 00:01:07 +0000 Subject: [PATCH 088/245] typo in comments explaining safety controller stuff --- urdf/include/urdf/joint.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/urdf/include/urdf/joint.h b/urdf/include/urdf/joint.h index edd8c6f..54064e6 100644 --- a/urdf/include/urdf/joint.h +++ b/urdf/include/urdf/joint.h @@ -101,7 +101,7 @@ public: /// /// if (joint_position is outside of the position range above) /// velocity_limit_min = -JointLimits::velocity + JointSafety::k_position * (joint_position - JointSafety::soft_lower_limit) - /// velocity_limit_max = JointLimits::velocity - JointSafety::k_position * (joint_position - JointSafety::soft_upper_limit) + /// velocity_limit_max = JointLimits::velocity + JointSafety::k_position * (joint_position - JointSafety::soft_upper_limit) /// else /// velocity_limit_min = -JointLimits::velocity /// velocity_limit_max = JointLimits::velocity @@ -111,7 +111,7 @@ public: /// /// if (joint_velocity is outside of the velocity range above) /// effort_limit_min = -JointLimits::effort + JointSafety::k_velocity * (joint_velocity - velocity_limit_min) - /// effort_limit_max = JointLimits::effort - JointSafety::k_velocity * (joint_velocity - velocity_limit_max) + /// effort_limit_max = JointLimits::effort + JointSafety::k_velocity * (joint_velocity - velocity_limit_max) /// else /// effort_limit_min = -JointLimits::effort /// effort_limit_max = JointLimits::effort From 6d2c516a7152f2eef553545914f46db85ea15139 Mon Sep 17 00:00:00 2001 From: hsu Date: Wed, 6 Jan 2010 01:07:47 +0000 Subject: [PATCH 089/245] removing exports, #3482 --- convex_decomposition/manifest.xml | 3 --- 1 file changed, 3 deletions(-) diff --git a/convex_decomposition/manifest.xml b/convex_decomposition/manifest.xml index 568adb9..97580c9 100644 --- a/convex_decomposition/manifest.xml +++ b/convex_decomposition/manifest.xml @@ -23,7 +23,4 @@ appears to be no available revision control. http://www.amillionpixels.us/ConvexDecomposition.zip - - - From 155a36f88c5294619326b795d6ffaf3830f99d48 Mon Sep 17 00:00:00 2001 From: wim Date: Wed, 6 Jan 2010 20:07:25 +0000 Subject: [PATCH 090/245] remove using namespace in header --- kdl_parser/include/kdl_parser/kdl_parser.hpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/kdl_parser/include/kdl_parser/kdl_parser.hpp b/kdl_parser/include/kdl_parser/kdl_parser.hpp index d882e90..65720e3 100644 --- a/kdl_parser/include/kdl_parser/kdl_parser.hpp +++ b/kdl_parser/include/kdl_parser/kdl_parser.hpp @@ -41,7 +41,6 @@ #include #include -using namespace std; namespace kdl_parser{ @@ -50,14 +49,14 @@ namespace kdl_parser{ * \param tree The resulting KDL Tree * returns true on success, false on failure */ -bool treeFromFile(const string& file, KDL::Tree& tree); +bool treeFromFile(const std::string& file, KDL::Tree& tree); /** Constructs a KDL tree from a string containing xml * \param xml A string containting the xml description of the robot * \param tree The resulting KDL Tree * returns true on success, false on failure */ -bool treeFromString(const string& xml, KDL::Tree& tree); +bool treeFromString(const std::string& xml, KDL::Tree& tree); /** Constructs a KDL tree from a TiXmlDocument * \param xml_doc The TiXmlDocument containting the xml description of the robot From 16eae8784cd90a5a03c0711e8e0607b3875c710e Mon Sep 17 00:00:00 2001 From: wim Date: Wed, 6 Jan 2010 20:10:13 +0000 Subject: [PATCH 091/245] getting ready for bugfix release 0.6.5 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0b6790c..dd4d044 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,4 +16,4 @@ set(ROSPACK_MAKEDIST true) # variables. #list(APPEND CPACK_SOURCE_IGNORE_FILES /core/experimental) -rosbuild_make_distribution(0.6.4) +rosbuild_make_distribution(0.6.5) From 3cb8a7a40f725030a1b1f6c429e164a49fda21d4 Mon Sep 17 00:00:00 2001 From: wim Date: Thu, 7 Jan 2010 22:23:43 +0000 Subject: [PATCH 092/245] fix for rising and falling fields in calibration element --- urdf/include/urdf/joint.h | 3 ++- urdf/src/joint.cpp | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/urdf/include/urdf/joint.h b/urdf/include/urdf/joint.h index 54064e6..551e2c6 100644 --- a/urdf/include/urdf/joint.h +++ b/urdf/include/urdf/joint.h @@ -140,7 +140,8 @@ class JointCalibration { public: JointCalibration() { this->clear(); }; - double reference_position, rising, falling; + double reference_position; + boost::shared_ptr rising, falling; void clear() { diff --git a/urdf/src/joint.cpp b/urdf/src/joint.cpp index 0f2fecc..5a1adab 100644 --- a/urdf/src/joint.cpp +++ b/urdf/src/joint.cpp @@ -180,20 +180,20 @@ bool JointCalibration::initXml(TiXmlElement* config) if (rising_position_str == NULL) { ROS_DEBUG("joint calibration: no rising, using default value"); - this->rising = 0; + this->rising.reset(); } else - this->rising = atof(rising_position_str); + this->rising.reset(new double(atof(rising_position_str))); // Get falling edge position const char* falling_position_str = config->Attribute("falling"); if (falling_position_str == NULL) { ROS_DEBUG("joint calibration: no falling, using default value"); - this->falling = 0; + this->falling.reset(); } else - this->falling = atof(falling_position_str); + this->falling.reset(new double(atof(falling_position_str))); return true; } From 0b54062a1b2a6f1396de2dddfcac0ee631bfbfea Mon Sep 17 00:00:00 2001 From: wim Date: Thu, 7 Jan 2010 22:25:10 +0000 Subject: [PATCH 093/245] getting ready for 0.6.6 release --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index dd4d044..fa87c02 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,4 +16,4 @@ set(ROSPACK_MAKEDIST true) # variables. #list(APPEND CPACK_SOURCE_IGNORE_FILES /core/experimental) -rosbuild_make_distribution(0.6.5) +rosbuild_make_distribution(0.6.6) From 0882e2635ad24a50ad3771475edd33d480723463 Mon Sep 17 00:00:00 2001 From: wim Date: Wed, 13 Jan 2010 22:45:33 +0000 Subject: [PATCH 094/245] robot_model: preparing 1.0.0 release. Minor updates to descriptions --- CMakeLists.txt | 2 +- robot_state_publisher/manifest.xml | 8 ++++---- stack.xml | 16 ++++++++-------- urdf/manifest.xml | 10 ++++------ 4 files changed, 17 insertions(+), 19 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fa87c02..3a471d2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,4 +16,4 @@ set(ROSPACK_MAKEDIST true) # variables. #list(APPEND CPACK_SOURCE_IGNORE_FILES /core/experimental) -rosbuild_make_distribution(0.6.6) +rosbuild_make_distribution(1.0.0) diff --git a/robot_state_publisher/manifest.xml b/robot_state_publisher/manifest.xml index 9b0e7bc..20eda96 100644 --- a/robot_state_publisher/manifest.xml +++ b/robot_state_publisher/manifest.xml @@ -1,10 +1,10 @@ - This package allows you to publish the state of a robot to the - transform library topic. Once the state gets published, it is - available to all components in the system using the transform - library. The package takes the joint angles of the robot as input + This package allows you to publish the state of a robot to + tf. Once the state gets published, it is + available to all components in the system that also use tf. + The package takes the joint angles of the robot as input and publishes the 3D poses of the robot links, using a kinematic tree model of the robot. The package can both be used as a library and as a ROS node. This package has been well tested and the code diff --git a/stack.xml b/stack.xml index 34114b5..e907ec8 100644 --- a/stack.xml +++ b/stack.xml @@ -1,18 +1,18 @@ - - + + robot_model contains packages for modeling various aspects of robot information, specified in the Xml Robot Description Format (URDF). The core package of this stack - is urdf, which parses URDF files, and constructs an + is urdf, which parses URDF files, and constructs an object model (C++) of the robot. John Hsu johnhsu@willowgarage.com, Wim Meeussen - BSD + BSD,GPL,MIT http://ros.org/wiki/robot_model - - - - + + + + diff --git a/urdf/manifest.xml b/urdf/manifest.xml index f19eba7..87ecdd8 100644 --- a/urdf/manifest.xml +++ b/urdf/manifest.xml @@ -1,11 +1,9 @@ - This package contains a C++ parser for the Xml Robot Description - Format (URDF). It replaces the previous - wg_description_parser. This package is relatively new (July 2009) - so it might still have some minor issues. The code API of the - parser has been through our review process and will remain - backwards compatible in the coming releases. + This package contains a C++ parser for the Unified Robot Description + Format (URDF), which is an XML format for representing a robot model. + The code API of the parser has been through our review process and will remain + backwards compatible in future releases. Wim Meeussen, John Hsu BSD From 3f0382697aae4bc43896b13c0ada168bbf6eeacc Mon Sep 17 00:00:00 2001 From: rusu Date: Thu, 28 Jan 2010 03:29:09 +0000 Subject: [PATCH 095/245] added the correct lflags to manifest --- robot_state_publisher/manifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robot_state_publisher/manifest.xml b/robot_state_publisher/manifest.xml index 20eda96..83f1e2d 100644 --- a/robot_state_publisher/manifest.xml +++ b/robot_state_publisher/manifest.xml @@ -24,7 +24,7 @@ - + From 2d630925c4dccee6a9a04965e547720439cf4313 Mon Sep 17 00:00:00 2001 From: wim Date: Thu, 28 Jan 2010 20:50:52 +0000 Subject: [PATCH 096/245] remove usage of deprecated remap tf functionality --- robot_state_publisher/src/robot_state_publisher.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/robot_state_publisher/src/robot_state_publisher.cpp b/robot_state_publisher/src/robot_state_publisher.cpp index 7e3c29b..b299e40 100644 --- a/robot_state_publisher/src/robot_state_publisher.cpp +++ b/robot_state_publisher/src/robot_state_publisher.cpp @@ -85,8 +85,8 @@ bool RobotStatePublisher::publishTransforms(const map& joint_pos for (map::const_iterator f=link_poses.begin(); f!=link_poses.end(); f++){ tf::TransformKDLToTF(f->second, tf_frame); trans.header.stamp = time; - trans.header.frame_id = tf::remap(tf_prefix_, root_); - trans.child_frame_id = tf::remap(tf_prefix_, f->first); + trans.header.frame_id = tf::resolve(tf_prefix_, root_); + trans.child_frame_id = tf::resolve(tf_prefix_, f->first); tf::transformTFToMsg(tf_frame, trans.transform); tf_msg_.transforms[i++] = trans; } From 9efcb7c56f997cf41341d47c861b99448927f4fd Mon Sep 17 00:00:00 2001 From: wim Date: Thu, 28 Jan 2010 20:54:00 +0000 Subject: [PATCH 097/245] fix warning --- kdl_parser/src/kdl_parser.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kdl_parser/src/kdl_parser.cpp b/kdl_parser/src/kdl_parser.cpp index d1b88ca..ae23ac4 100644 --- a/kdl_parser/src/kdl_parser.cpp +++ b/kdl_parser/src/kdl_parser.cpp @@ -106,7 +106,7 @@ RigidBodyInertia toKdl(boost::shared_ptr i) bool addChildrenToTree(boost::shared_ptr root, Tree& tree) { std::vector > children = root->child_links; - ROS_DEBUG("Link %s had %i children", root->name.c_str(), children.size()); + ROS_DEBUG("Link %s had %u children", root->name.c_str(), children.size()); // constructs the optional inertia RigidBodyInertia inert(0); From a57bd32cd2ceb6d25c83b6a7228b44fb6600ab03 Mon Sep 17 00:00:00 2001 From: hsu Date: Fri, 26 Feb 2010 19:09:02 +0000 Subject: [PATCH 098/245] replacing atof with boost::lexical_casts #3391 --- urdf/include/urdf/color.h | 12 ++- urdf/include/urdf/pose.h | 12 ++- urdf/src/joint.cpp | 181 ++++++++++++++++++++++++++++++++++---- urdf/src/link.cpp | 71 ++++++++++++--- 4 files changed, 247 insertions(+), 29 deletions(-) diff --git a/urdf/include/urdf/color.h b/urdf/include/urdf/color.h index e3a7b3e..c132da4 100644 --- a/urdf/include/urdf/color.h +++ b/urdf/include/urdf/color.h @@ -42,6 +42,7 @@ #include #include #include +#include namespace urdf { @@ -70,8 +71,15 @@ public: { if (!pieces[i].empty()) { - ///@todo: do better atof check if string is a number - rgba.push_back(atof(pieces[i].c_str())); + try + { + rgba.push_back(boost::lexical_cast(pieces[i].c_str())); + } + catch (boost::bad_lexical_cast &e) + { + ROS_ERROR("color rgba element (%s) is not a valid float",pieces[i].c_str()); + return false; + } } } diff --git a/urdf/include/urdf/pose.h b/urdf/include/urdf/pose.h index 3a46a9d..48e57ab 100644 --- a/urdf/include/urdf/pose.h +++ b/urdf/include/urdf/pose.h @@ -42,6 +42,7 @@ #include #include #include +#include namespace urdf{ @@ -63,8 +64,15 @@ public: boost::split( pieces, vector_str, boost::is_any_of(" ")); for (unsigned int i = 0; i < pieces.size(); ++i){ if (pieces[i] != ""){ - ///@todo: do better atof check if string is a number - xyz.push_back(atof(pieces[i].c_str())); + try + { + xyz.push_back(boost::lexical_cast(pieces[i].c_str())); + } + catch (boost::bad_lexical_cast &e) + { + ROS_ERROR("Vector3 xyz element (%s) is not a valid float",pieces[i].c_str()); + return false; + } } } diff --git a/urdf/src/joint.cpp b/urdf/src/joint.cpp index 5a1adab..09bc94e 100644 --- a/urdf/src/joint.cpp +++ b/urdf/src/joint.cpp @@ -36,6 +36,7 @@ #include #include +#include namespace urdf{ @@ -50,7 +51,17 @@ bool JointDynamics::initXml(TiXmlElement* config) this->damping = 0; } else - this->damping = atof(damping_str); + { + try + { + this->damping = boost::lexical_cast(damping_str); + } + catch (boost::bad_lexical_cast &e) + { + ROS_ERROR("damping value (%s) is not a float",damping_str); + return false; + } + } // Get joint friction const char* friction_str = config->Attribute("friction"); @@ -59,7 +70,17 @@ bool JointDynamics::initXml(TiXmlElement* config) this->friction = 0; } else - this->friction = atof(friction_str); + { + try + { + this->friction = boost::lexical_cast(friction_str); + } + catch (boost::bad_lexical_cast &e) + { + ROS_ERROR("friction value (%s) is not a float",friction_str); + return false; + } + } if (damping_str == NULL && friction_str == NULL) { @@ -83,7 +104,17 @@ bool JointLimits::initXml(TiXmlElement* config) this->lower = 0; } else - this->lower = atof(lower_str); + { + try + { + this->lower = boost::lexical_cast(lower_str); + } + catch (boost::bad_lexical_cast &e) + { + ROS_ERROR("lower value (%s) is not a float",lower_str); + return false; + } + } // Get upper joint limit const char* upper_str = config->Attribute("upper"); @@ -92,7 +123,17 @@ bool JointLimits::initXml(TiXmlElement* config) this->upper = 0; } else - this->upper = atof(upper_str); + { + try + { + this->upper = boost::lexical_cast(upper_str); + } + catch (boost::bad_lexical_cast &e) + { + ROS_ERROR("upper value (%s) is not a float",upper_str); + return false; + } + } // Get joint effort limit const char* effort_str = config->Attribute("effort"); @@ -101,7 +142,17 @@ bool JointLimits::initXml(TiXmlElement* config) return false; } else - this->effort = atof(effort_str); + { + try + { + this->effort = boost::lexical_cast(effort_str); + } + catch (boost::bad_lexical_cast &e) + { + ROS_ERROR("effort value (%s) is not a float",effort_str); + return false; + } + } // Get joint velocity limit const char* velocity_str = config->Attribute("velocity"); @@ -110,7 +161,17 @@ bool JointLimits::initXml(TiXmlElement* config) return false; } else - this->velocity = atof(velocity_str); + { + try + { + this->velocity = boost::lexical_cast(velocity_str); + } + catch (boost::bad_lexical_cast &e) + { + ROS_ERROR("velocity value (%s) is not a float",velocity_str); + return false; + } + } return true; } @@ -127,7 +188,17 @@ bool JointSafety::initXml(TiXmlElement* config) this->soft_lower_limit = 0; } else - this->soft_lower_limit = atof(soft_lower_limit_str); + { + try + { + this->soft_lower_limit = boost::lexical_cast(soft_lower_limit_str); + } + catch (boost::bad_lexical_cast &e) + { + ROS_ERROR("soft_lower_limit value (%s) is not a float",soft_lower_limit_str); + return false; + } + } // Get soft_upper_limit joint limit const char* soft_upper_limit_str = config->Attribute("soft_upper_limit"); @@ -137,7 +208,17 @@ bool JointSafety::initXml(TiXmlElement* config) this->soft_upper_limit = 0; } else - this->soft_upper_limit = atof(soft_upper_limit_str); + { + try + { + this->soft_upper_limit = boost::lexical_cast(soft_upper_limit_str); + } + catch (boost::bad_lexical_cast &e) + { + ROS_ERROR("soft_upper_limit value (%s) is not a float",soft_upper_limit_str); + return false; + } + } // Get k_position_ safety "position" gain - not exactly position gain const char* k_position_str = config->Attribute("k_position"); @@ -147,7 +228,17 @@ bool JointSafety::initXml(TiXmlElement* config) this->k_position = 0; } else - this->k_position = atof(k_position_str); + { + try + { + this->k_position = boost::lexical_cast(k_position_str); + } + catch (boost::bad_lexical_cast &e) + { + ROS_ERROR("k_position value (%s) is not a float",k_position_str); + return false; + } + } // Get k_velocity_ safety velocity gain const char* k_velocity_str = config->Attribute("k_velocity"); if (k_velocity_str == NULL) @@ -156,7 +247,17 @@ bool JointSafety::initXml(TiXmlElement* config) return false; } else - this->k_velocity = atof(k_velocity_str); + { + try + { + this->k_velocity = boost::lexical_cast(k_velocity_str); + } + catch (boost::bad_lexical_cast &e) + { + ROS_ERROR("k_velocity value (%s) is not a float",k_velocity_str); + return false; + } + } return true; } @@ -173,7 +274,17 @@ bool JointCalibration::initXml(TiXmlElement* config) this->reference_position = 0; } else - this->reference_position = atof(reference_position_str); + { + try + { + this->reference_position = boost::lexical_cast(reference_position_str); + } + catch (boost::bad_lexical_cast &e) + { + ROS_ERROR("reference_position value (%s) is not a float",reference_position_str); + return false; + } + } // Get rising edge position const char* rising_position_str = config->Attribute("rising"); @@ -183,7 +294,17 @@ bool JointCalibration::initXml(TiXmlElement* config) this->rising.reset(); } else - this->rising.reset(new double(atof(rising_position_str))); + { + try + { + this->rising.reset(new double(boost::lexical_cast(rising_position_str))); + } + catch (boost::bad_lexical_cast &e) + { + ROS_ERROR("risingvalue (%s) is not a float",rising_position_str); + return false; + } + } // Get falling edge position const char* falling_position_str = config->Attribute("falling"); @@ -193,7 +314,17 @@ bool JointCalibration::initXml(TiXmlElement* config) this->falling.reset(); } else - this->falling.reset(new double(atof(falling_position_str))); + { + try + { + this->falling.reset(new double(boost::lexical_cast(falling_position_str))); + } + catch (boost::bad_lexical_cast &e) + { + ROS_ERROR("fallingvalue (%s) is not a float",falling_position_str); + return false; + } + } return true; } @@ -220,7 +351,17 @@ bool JointMimic::initXml(TiXmlElement* config) this->multiplier = 1; } else - this->multiplier = atof(multiplier_str); + { + try + { + this->multiplier = boost::lexical_cast(multiplier_str); + } + catch (boost::bad_lexical_cast &e) + { + ROS_ERROR("multiplier value (%s) is not a float",multiplier_str); + return false; + } + } // Get mimic offset const char* offset_str = config->Attribute("offset"); @@ -230,7 +371,17 @@ bool JointMimic::initXml(TiXmlElement* config) this->offset = 0; } else - this->offset = atof(offset_str); + { + try + { + this->offset = boost::lexical_cast(offset_str); + } + catch (boost::bad_lexical_cast &e) + { + ROS_ERROR("offset value (%s) is not a float",offset_str); + return false; + } + } return true; } diff --git a/urdf/src/link.cpp b/urdf/src/link.cpp index 74ab9c9..ef057cc 100644 --- a/urdf/src/link.cpp +++ b/urdf/src/link.cpp @@ -37,6 +37,7 @@ #include "urdf/link.h" #include +#include namespace urdf{ @@ -162,7 +163,16 @@ bool Inertial::initXml(TiXmlElement *config) ROS_ERROR("Inertial: mass element must have value attributes"); return false; } - mass = atof(mass_xml->Attribute("value")); + + try + { + mass = boost::lexical_cast(mass_xml->Attribute("value")); + } + catch (boost::bad_lexical_cast &e) + { + ROS_ERROR("mass (%s) is not a float",mass_xml->Attribute("value")); + return false; + } TiXmlElement *inertia_xml = config->FirstChildElement("inertia"); if (!inertia_xml) @@ -177,12 +187,26 @@ bool Inertial::initXml(TiXmlElement *config) ROS_ERROR("Inertial: inertia element must have ixx,ixy,ixz,iyy,iyz,izz attributes"); return false; } - ixx = atof(inertia_xml->Attribute("ixx")); - ixy = atof(inertia_xml->Attribute("ixy")); - ixz = atof(inertia_xml->Attribute("ixz")); - iyy = atof(inertia_xml->Attribute("iyy")); - iyz = atof(inertia_xml->Attribute("iyz")); - izz = atof(inertia_xml->Attribute("izz")); + try + { + ixx = boost::lexical_cast(inertia_xml->Attribute("ixx")); + ixy = boost::lexical_cast(inertia_xml->Attribute("ixy")); + ixz = boost::lexical_cast(inertia_xml->Attribute("ixz")); + iyy = boost::lexical_cast(inertia_xml->Attribute("iyy")); + iyz = boost::lexical_cast(inertia_xml->Attribute("iyz")); + izz = boost::lexical_cast(inertia_xml->Attribute("izz")); + } + catch (boost::bad_lexical_cast &e) + { + ROS_ERROR("one of the inertia elements: ixx (%s) ixy (%s) ixz (%s) iyy (%s) iyz (%s) izz (%s) is not a valid double", + inertia_xml->Attribute("ixx"), + inertia_xml->Attribute("ixy"), + inertia_xml->Attribute("ixz"), + inertia_xml->Attribute("iyy"), + inertia_xml->Attribute("iyz"), + inertia_xml->Attribute("izz")); + return false; + } return true; } @@ -287,7 +311,16 @@ bool Sphere::initXml(TiXmlElement *c) return false; } - radius = atof(c->Attribute("radius")); + try + { + radius = boost::lexical_cast(c->Attribute("radius")); + } + catch (boost::bad_lexical_cast &e) + { + ROS_ERROR("radius (%s) is not a valid float",c->Attribute("radius")); + return false; + } + return true; } @@ -322,8 +355,26 @@ bool Cylinder::initXml(TiXmlElement *c) return false; } - length = atof(c->Attribute("length")); - radius = atof(c->Attribute("radius")); + try + { + length = boost::lexical_cast(c->Attribute("length")); + } + catch (boost::bad_lexical_cast &e) + { + ROS_ERROR("length (%s) is not a valid float",c->Attribute("length")); + return false; + } + + try + { + radius = boost::lexical_cast(c->Attribute("radius")); + } + catch (boost::bad_lexical_cast &e) + { + ROS_ERROR("radius (%s) is not a valid float",c->Attribute("radius")); + return false; + } + return true; } From e2e0c38a212386ee110f56f7fbf7b3b343e8b71f Mon Sep 17 00:00:00 2001 From: hsu Date: Fri, 26 Feb 2010 19:17:04 +0000 Subject: [PATCH 099/245] adding assimp #3857 --- assimp/Makefile | 50 +++++++++++++++++++++++++++++++++++++ assimp/assimp.patch | 61 +++++++++++++++++++++++++++++++++++++++++++++ assimp/manifest.xml | 22 ++++++++++++++++ 3 files changed, 133 insertions(+) create mode 100644 assimp/Makefile create mode 100644 assimp/assimp.patch create mode 100644 assimp/manifest.xml diff --git a/assimp/Makefile b/assimp/Makefile new file mode 100644 index 0000000..c635316 --- /dev/null +++ b/assimp/Makefile @@ -0,0 +1,50 @@ +all: installed + +REVISION=258 +PACKAGE_NAME=`rospack find assimp` +# Regular download +TARBALL_NAME = assimp-r$(REVISION) +TARBALL = build/$(TARBALL_NAME).tar.gz +TARBALL_URL = http://pr.willowgarage.com/downloads/$(TARBALL_NAME).tar.gz +TARBALL_PATCH = assimp.patch +UNPACK_CMD = tar xzf +SOURCE_DIR = build/assimp_svn +include $(shell rospack find mk)/download_unpack_build.mk + +# SVN checkout (only for package maintainers) +SVN_DIR = $(SOURCE_DIR) +#build/assimp_svn +SVN_REVISION = -r $(REVISION) +SVN_URL = https://assimp.svn.sourceforge.net/svnroot/assimp/trunk +include $(shell rospack find mk)/svn_checkout.mk + +ASSIMP_DIR = $(shell rospack find assimp) +BOOST_INCLUDE_DIRS = $(shell rosboost-cfg --include_dirs) +BOOST_LIBRARY_DIRS = $(shell rosboost-cfg --lib_dirs signals,thread) +BOOST_LIBRARIES = $(shell rosboost-cfg --lflags signals,thread) +CMAKE_ARGS = -D CMAKE_INSTALL_PREFIX=$(PACKAGE_NAME) \ + -D CMAKE_BUILD_TYPE=RelWithDebInfo \ + -D boost_include_dirs=$(BOOST_INCLUDE_DIRS) \ + -D boost_library_dirs=$(BOOST_LIBRARY_DIRS) \ + -D boost_libraries="$(BOOST_LIBRARIES)" + +# Build tarball (only for package maintainers) +build_tarball: $(SVN_DIR) + -cd $(SVN_DIR)/build && make clean + -cd $(SVN_DIR) && rm -rf build + cd build && tar --exclude="test" --exclude="workspaces" --exclude="tools" --exclude="scripts" --exclude="samples" --exclude="port" --exclude="obj" --exclude="bin" --exclude=".svn" -czf ../$(TARBALL) assimp_svn + +installed: $(SOURCE_DIR)/unpacked + cd $(SOURCE_DIR) && mkdir -p build && cd build && cmake $(CMAKE_ARGS) .. && export PARALLEL_JOBS=ROS_PARALLEL_JOBS && make $(ROS_PARALLEL_JOBS) && make install + mkdir -p $(PACKAGE_NAME)/include/assimp + cp -r $(SOURCE_DIR)/include/* $(PACKAGE_NAME)/include/assimp/ + #touch installed + +clean: + -cd $(SVN_DIR)/build && make clean + -rm -f installed + -rm -rf include lib + +wipe: clean + rm -rf build + diff --git a/assimp/assimp.patch b/assimp/assimp.patch new file mode 100644 index 0000000..346edd7 --- /dev/null +++ b/assimp/assimp.patch @@ -0,0 +1,61 @@ +Index: code/CMakeLists.txt +=================================================================== +--- code/CMakeLists.txt (revision 526) ++++ code/CMakeLists.txt (working copy) +@@ -1,6 +1,16 @@ + + SET( HEADER_PATH ../include/ ) + ++message(status " debug: ${boost_include_dirs}" ) ++INCLUDE_DIRECTORIES( ++ include ++ ${boost_include_dirs} ++) ++ ++LINK_DIRECTORIES( ++ ${boost_library_dirs} ++) ++ + SOURCE_GROUP( Logging FILES + ${HEADER_PATH}/DefaultLogger.h + ${HEADER_PATH}/IOStream.h +@@ -583,6 +593,10 @@ + ) + ADD_DEFINITIONS(-DASSIMP_BUILD_DLL_EXPORT) + ++TARGET_LINK_LIBRARIES( assimp ${boost_libraries}) ++ ++INSTALL (TARGETS assimp DESTINATION ${CMAKE_INSTALL_PREFIX}/lib) ++ + if (WIN32) + if ( MSVC80 ) + ADD_DEFINITIONS( -D_SCL_SECURE_NO_WARNINGS ) +Index: CMakeLists.txt +=================================================================== +--- CMakeLists.txt (revision 526) ++++ CMakeLists.txt (working copy) +@@ -1,13 +1,24 @@ + cmake_minimum_required( VERSION 2.6 ) + PROJECT( AssetImporter ) + ++SET (boost_include_dirs "" CACHE STRING "Boost include paths. Use this to override automatic detection.") ++SET (boost_library_dirs "" CACHE STRING "Boost library paths. Use this to override automatic detection.") ++SET (boost_libraries "" CACHE STRING "Boost libraries. Use this to override automatic detection.") ++ ++message(status " debug: ${boost_include_dirs}" ) ++ + SET( CMAKE_CURRENT_SOURCE_DIR ${CMAKE_HOME_DIRECTORY}/code ) + SET( CMAKE_CURRENT_BINARY_DIR ${CMAKE_HOME_DIRECTORY}/bin ) + + INCLUDE_DIRECTORIES( + include ++ ${boost_include_dirs} + ) + ++LINK_DIRECTORIES( ++ ${boost_library_dirs} ++) ++ + SET( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_HOME_DIRECTORY}/lib ) + SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_HOME_DIRECTORY}/bin ) + diff --git a/assimp/manifest.xml b/assimp/manifest.xml new file mode 100644 index 0000000..31154bf --- /dev/null +++ b/assimp/manifest.xml @@ -0,0 +1,22 @@ + + + + Open Asset Import Library (Short name: Assimp) is a free library to import various well-known 3D model formats + into applications. The library has been designed for maximum stability and efficiency. Written in C++, it is + licensed under the BSD license. The API is provided for both C and C++. Wrappers for Python and D are available, + more bindings are in development. + + The library loads models in a straightforward in-memory format that can be easily read and processed by applications. + Various post processing steps can be executed on the imported data to optimize it for a particular purpose. + + + + ASSIMP Development Team + BSD + + http://assimp.sourceforge.net/ + + + + + From b610e3f23c6c6a7851682617769093fa3296ea89 Mon Sep 17 00:00:00 2001 From: wim Date: Sat, 27 Feb 2010 23:33:56 +0000 Subject: [PATCH 100/245] prepare for 1.0.1 release --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3a471d2..417a3e3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,4 +16,4 @@ set(ROSPACK_MAKEDIST true) # variables. #list(APPEND CPACK_SOURCE_IGNORE_FILES /core/experimental) -rosbuild_make_distribution(1.0.0) +rosbuild_make_distribution(1.0.1) From 8b3bd76735c39de4d8f87b231862716cc88442e6 Mon Sep 17 00:00:00 2001 From: hsu Date: Wed, 3 Mar 2010 23:11:04 +0000 Subject: [PATCH 101/245] adding collada document object model --- colladadom/Makefile | 34 +++++++++++++++++++++++++++ colladadom/collada-dom-2.2.zip.md5sum | 1 + colladadom/mainpage.dox | 26 ++++++++++++++++++++ colladadom/manifest.xml | 14 +++++++++++ colladadom/use_1_5.patch | 22 +++++++++++++++++ 5 files changed, 97 insertions(+) create mode 100644 colladadom/Makefile create mode 100644 colladadom/collada-dom-2.2.zip.md5sum create mode 100644 colladadom/mainpage.dox create mode 100644 colladadom/manifest.xml create mode 100644 colladadom/use_1_5.patch diff --git a/colladadom/Makefile b/colladadom/Makefile new file mode 100644 index 0000000..af611a8 --- /dev/null +++ b/colladadom/Makefile @@ -0,0 +1,34 @@ +all: installed +TARBALL = build/collada-dom-2.2.zip +TARBALL_URL = http://sourceforge.net/projects/collada-dom/files/Collada%20DOM/Collada%20DOM%202.2/collada-dom-2.2.zip/download +SOURCE_DIR = build/colladadom +INITIAL_DIR = build/collada-dom/dom +UNPACK_CMD = unzip +TARBALL_PATCH=use_1_5.patch +MD5SUM_FILE = collada-dom-2.2.zip.md5sum + +include $(shell rospack find mk)/download_unpack_build.mk + +ROOT = $(shell rospack find colladadom)/colladadom + +installed: wiped $(SOURCE_DIR)/unpacked + @echo "making it" + cd $(SOURCE_DIR) && make install + @echo "ROOT is: $(ROOT)" + -mkdir -p $(ROOT) + #cd $(SOURCE_DIR) ; make $(ROS_PARALLEL_JOBS); + #mv $(SOURCE_DIR)/boost $(ROOT)/ + touch installed + +wiped: Makefile + make wipe + touch wiped + +clean: + -cd $(SOURCE_DIR) && make clean + rm -rf $(ROOT) installed + +wipe: clean + rm -rf build + +.PHONY : clean download wipe diff --git a/colladadom/collada-dom-2.2.zip.md5sum b/colladadom/collada-dom-2.2.zip.md5sum new file mode 100644 index 0000000..2ba20f4 --- /dev/null +++ b/colladadom/collada-dom-2.2.zip.md5sum @@ -0,0 +1 @@ +bbb76ef2a8037c945c5cdf26829dcb7d build/collada-dom-2.2.zip diff --git a/colladadom/mainpage.dox b/colladadom/mainpage.dox new file mode 100644 index 0000000..386e4a1 --- /dev/null +++ b/colladadom/mainpage.dox @@ -0,0 +1,26 @@ +/** +\mainpage +\htmlinclude manifest.html + +\b colladadom is ... + + + + +\section codeapi Code API + + + + +*/ diff --git a/colladadom/manifest.xml b/colladadom/manifest.xml new file mode 100644 index 0000000..bbc7dc3 --- /dev/null +++ b/colladadom/manifest.xml @@ -0,0 +1,14 @@ + + + + collada-dom + + + John Hsu + BSD + + http://ros.org/wiki/colladadom + + + + diff --git a/colladadom/use_1_5.patch b/colladadom/use_1_5.patch new file mode 100644 index 0000000..94d7f8d --- /dev/null +++ b/colladadom/use_1_5.patch @@ -0,0 +1,22 @@ +Index: Makefile +=================================================================== +--- Makefile 2008-10-02 17:48:30.000000000 -0700 ++++ Makefile 2010-03-03 14:44:09.162398249 -0800 +@@ -55,7 +55,7 @@ + conf := release + + # Collada version: '1.4', '1.5', or 'all' +-colladaVersion := 1.4 ++colladaVersion := 1.5 + + # parser: 'libxml', 'tinyxml', or 'all'. + parser := libxml +@@ -188,7 +188,7 @@ + ifneq ($(filter install uninstall installTest,$(MAKECMDGOALS)),) + # You can only install on Mac or Linux. Check for that. + ifeq ($(oss),linux) +-prefix := /usr/local ++prefix := ../../colladadom + else ifeq ($(oss),mac) + prefix := /Library/Frameworks + else From 8931941e9de17e10d56c17c9a28bf6e2be40aff3 Mon Sep 17 00:00:00 2001 From: hsu Date: Wed, 3 Mar 2010 23:15:19 +0000 Subject: [PATCH 102/245] update install, still need to update exports from manifest --- colladadom/Makefile | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/colladadom/Makefile b/colladadom/Makefile index af611a8..16ee9e9 100644 --- a/colladadom/Makefile +++ b/colladadom/Makefile @@ -12,10 +12,13 @@ include $(shell rospack find mk)/download_unpack_build.mk ROOT = $(shell rospack find colladadom)/colladadom installed: wiped $(SOURCE_DIR)/unpacked - @echo "making it" - cd $(SOURCE_DIR) && make install @echo "ROOT is: $(ROOT)" -mkdir -p $(ROOT) + -mkdir -p $(ROOT)/include + -mkdir -p $(ROOT)/include/colladadom + -mkdir -p $(ROOT)/lib + @echo "making it" + cd $(SOURCE_DIR) && make && make install #cd $(SOURCE_DIR) ; make $(ROS_PARALLEL_JOBS); #mv $(SOURCE_DIR)/boost $(ROOT)/ touch installed From d35626c3302140f7ac60ebe8895137ff1423ac86 Mon Sep 17 00:00:00 2001 From: hsu Date: Thu, 4 Mar 2010 00:04:59 +0000 Subject: [PATCH 103/245] update colladadom import, install and export --- colladadom/Makefile | 14 +++++++------- colladadom/manifest.xml | 4 ++++ colladadom/use_1_5.patch | 8 ++++---- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/colladadom/Makefile b/colladadom/Makefile index 16ee9e9..5b094cc 100644 --- a/colladadom/Makefile +++ b/colladadom/Makefile @@ -2,25 +2,25 @@ all: installed TARBALL = build/collada-dom-2.2.zip TARBALL_URL = http://sourceforge.net/projects/collada-dom/files/Collada%20DOM/Collada%20DOM%202.2/collada-dom-2.2.zip/download SOURCE_DIR = build/colladadom -INITIAL_DIR = build/collada-dom/dom +INITIAL_DIR = build/collada-dom UNPACK_CMD = unzip TARBALL_PATCH=use_1_5.patch MD5SUM_FILE = collada-dom-2.2.zip.md5sum include $(shell rospack find mk)/download_unpack_build.mk -ROOT = $(shell rospack find colladadom)/colladadom +ROOT = $(shell rospack find colladadom) installed: wiped $(SOURCE_DIR)/unpacked @echo "ROOT is: $(ROOT)" - -mkdir -p $(ROOT) -mkdir -p $(ROOT)/include -mkdir -p $(ROOT)/include/colladadom -mkdir -p $(ROOT)/lib @echo "making it" - cd $(SOURCE_DIR) && make && make install - #cd $(SOURCE_DIR) ; make $(ROS_PARALLEL_JOBS); - #mv $(SOURCE_DIR)/boost $(ROOT)/ + cd $(SOURCE_DIR)/dom && make $(ROS_PARALLEL_JOBS) + cp -rf $(SOURCE_DIR)/dom/include/* $(ROOT)/include/colladadom/ + mv $(ROOT)/include/1.5/dom $(ROOT)/include/dom + cp -f $(SOURCE_DIR)/dom/build/linux-1.5/*.* $(ROOT)/lib/ touch installed wiped: Makefile @@ -29,7 +29,7 @@ wiped: Makefile clean: -cd $(SOURCE_DIR) && make clean - rm -rf $(ROOT) installed + rm -rf $(ROOT)/include $(ROOT)/lib installed wipe: clean rm -rf build diff --git a/colladadom/manifest.xml b/colladadom/manifest.xml index bbc7dc3..6bd76f3 100644 --- a/colladadom/manifest.xml +++ b/colladadom/manifest.xml @@ -9,6 +9,10 @@ http://ros.org/wiki/colladadom + + + + diff --git a/colladadom/use_1_5.patch b/colladadom/use_1_5.patch index 94d7f8d..e8a739c 100644 --- a/colladadom/use_1_5.patch +++ b/colladadom/use_1_5.patch @@ -1,7 +1,7 @@ -Index: Makefile +Index: dom/Makefile =================================================================== ---- Makefile 2008-10-02 17:48:30.000000000 -0700 -+++ Makefile 2010-03-03 14:44:09.162398249 -0800 +--- dom/Makefile 2008-10-02 17:48:30.000000000 -0700 ++++ dom/Makefile 2010-03-03 14:44:09.162398249 -0800 @@ -55,7 +55,7 @@ conf := release @@ -16,7 +16,7 @@ Index: Makefile # You can only install on Mac or Linux. Check for that. ifeq ($(oss),linux) -prefix := /usr/local -+prefix := ../../colladadom ++prefix := ../../../ else ifeq ($(oss),mac) prefix := /Library/Frameworks else From db7760d310e3d709ed7bc0a0b0d7853ac5c3e622 Mon Sep 17 00:00:00 2001 From: hsu Date: Thu, 4 Mar 2010 00:07:49 +0000 Subject: [PATCH 104/245] update exports --- colladadom/manifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/colladadom/manifest.xml b/colladadom/manifest.xml index 6bd76f3..09e3af5 100644 --- a/colladadom/manifest.xml +++ b/colladadom/manifest.xml @@ -10,7 +10,7 @@ http://ros.org/wiki/colladadom - + From 4421d1881f186c8698007ac29d54cf54507f72a3 Mon Sep 17 00:00:00 2001 From: hsu Date: Thu, 4 Mar 2010 00:31:02 +0000 Subject: [PATCH 105/245] fix install --- colladadom/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/colladadom/Makefile b/colladadom/Makefile index 5b094cc..76a3bcf 100644 --- a/colladadom/Makefile +++ b/colladadom/Makefile @@ -19,7 +19,7 @@ installed: wiped $(SOURCE_DIR)/unpacked @echo "making it" cd $(SOURCE_DIR)/dom && make $(ROS_PARALLEL_JOBS) cp -rf $(SOURCE_DIR)/dom/include/* $(ROOT)/include/colladadom/ - mv $(ROOT)/include/1.5/dom $(ROOT)/include/dom + mv $(ROOT)/include/colladadom/1.5/dom $(ROOT)/include/colladadom/dom cp -f $(SOURCE_DIR)/dom/build/linux-1.5/*.* $(ROOT)/lib/ touch installed From 3751d10997fe854df48cce96afe39f6e1fb5ed78 Mon Sep 17 00:00:00 2001 From: hsu Date: Thu, 4 Mar 2010 00:44:43 +0000 Subject: [PATCH 106/245] moving tar ball to pr.willowgarage.com --- colladadom/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/colladadom/Makefile b/colladadom/Makefile index 76a3bcf..5cb0a2a 100644 --- a/colladadom/Makefile +++ b/colladadom/Makefile @@ -1,6 +1,6 @@ all: installed TARBALL = build/collada-dom-2.2.zip -TARBALL_URL = http://sourceforge.net/projects/collada-dom/files/Collada%20DOM/Collada%20DOM%202.2/collada-dom-2.2.zip/download +TARBALL_URL = http://pr.willowgarage.com/downloads/collada-dom-2.2.zip SOURCE_DIR = build/colladadom INITIAL_DIR = build/collada-dom UNPACK_CMD = unzip From 1b302c0596d51969b8f35acb29dec8296bb13af0 Mon Sep 17 00:00:00 2001 From: tfield Date: Thu, 4 Mar 2010 01:26:48 +0000 Subject: [PATCH 107/245] colladom: changing exported include dir --- colladadom/manifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/colladadom/manifest.xml b/colladadom/manifest.xml index 09e3af5..59b7739 100644 --- a/colladadom/manifest.xml +++ b/colladadom/manifest.xml @@ -10,7 +10,7 @@ http://ros.org/wiki/colladadom - + From 7f64944a6c174e9feea4465037baeae49275298e Mon Sep 17 00:00:00 2001 From: hsu Date: Thu, 4 Mar 2010 01:32:28 +0000 Subject: [PATCH 108/245] removing a layer from header install directory --- colladadom/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/colladadom/Makefile b/colladadom/Makefile index 5cb0a2a..5c7e513 100644 --- a/colladadom/Makefile +++ b/colladadom/Makefile @@ -14,12 +14,12 @@ ROOT = $(shell rospack find colladadom) installed: wiped $(SOURCE_DIR)/unpacked @echo "ROOT is: $(ROOT)" -mkdir -p $(ROOT)/include - -mkdir -p $(ROOT)/include/colladadom + -mkdir -p $(ROOT)/include -mkdir -p $(ROOT)/lib @echo "making it" cd $(SOURCE_DIR)/dom && make $(ROS_PARALLEL_JOBS) - cp -rf $(SOURCE_DIR)/dom/include/* $(ROOT)/include/colladadom/ - mv $(ROOT)/include/colladadom/1.5/dom $(ROOT)/include/colladadom/dom + cp -rf $(SOURCE_DIR)/dom/include/* $(ROOT)/include/ + mv $(ROOT)/include/1.5/dom $(ROOT)/include/dom cp -f $(SOURCE_DIR)/dom/build/linux-1.5/*.* $(ROOT)/lib/ touch installed From 661cc1cea7665cbf9f296e3c9c3e480ad84fe6f5 Mon Sep 17 00:00:00 2001 From: tfield Date: Thu, 4 Mar 2010 01:46:18 +0000 Subject: [PATCH 109/245] collada_urdf: initial commit of package to convert URDF to COLLADA --- collada_urdf/CMakeLists.txt | 6 + collada_urdf/Makefile | 1 + collada_urdf/ROS_BUILD_BLACKLIST | 1 + collada_urdf/manifest.xml | 15 + collada_urdf/src/urdf_to_collada.cpp | 570 ++ collada_urdf/test/base.dae | 63 + collada_urdf/test/ir663.dae | 5517 ++++++++++ collada_urdf/test/kr150.dae | 13484 +++++++++++++++++++++++++ collada_urdf/test/ped_welder.dae | 2206 ++++ collada_urdf/test/pr2.urdf | 3399 +++++++ collada_urdf/test/simple.dae | 392 + 11 files changed, 25654 insertions(+) create mode 100644 collada_urdf/CMakeLists.txt create mode 100644 collada_urdf/Makefile create mode 100644 collada_urdf/ROS_BUILD_BLACKLIST create mode 100644 collada_urdf/manifest.xml create mode 100644 collada_urdf/src/urdf_to_collada.cpp create mode 100644 collada_urdf/test/base.dae create mode 100644 collada_urdf/test/ir663.dae create mode 100644 collada_urdf/test/kr150.dae create mode 100644 collada_urdf/test/ped_welder.dae create mode 100644 collada_urdf/test/pr2.urdf create mode 100644 collada_urdf/test/simple.dae diff --git a/collada_urdf/CMakeLists.txt b/collada_urdf/CMakeLists.txt new file mode 100644 index 0000000..037d9e2 --- /dev/null +++ b/collada_urdf/CMakeLists.txt @@ -0,0 +1,6 @@ +cmake_minimum_required(VERSION 2.4.6) +include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake) +set(ROS_BUILD_TYPE Debug) +rosbuild_init() +set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) +rosbuild_add_executable(urdf_to_collada src/urdf_to_collada.cpp) diff --git a/collada_urdf/Makefile b/collada_urdf/Makefile new file mode 100644 index 0000000..b75b928 --- /dev/null +++ b/collada_urdf/Makefile @@ -0,0 +1 @@ +include $(shell rospack find mk)/cmake.mk \ No newline at end of file diff --git a/collada_urdf/ROS_BUILD_BLACKLIST b/collada_urdf/ROS_BUILD_BLACKLIST new file mode 100644 index 0000000..22710e9 --- /dev/null +++ b/collada_urdf/ROS_BUILD_BLACKLIST @@ -0,0 +1 @@ +Experimental code. diff --git a/collada_urdf/manifest.xml b/collada_urdf/manifest.xml new file mode 100644 index 0000000..cf11812 --- /dev/null +++ b/collada_urdf/manifest.xml @@ -0,0 +1,15 @@ + + + This package contains a tool to convert Unified Robot Description Format (URDF) documents into COLLAborative Design Activity (COLLADA) documents. + + Tim Field + BSD + + http://ros.org/wiki/collada_urdf + + + + + + + diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp new file mode 100644 index 0000000..647baf0 --- /dev/null +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -0,0 +1,570 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redstributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Tim Field */ + +#include "dae.h" +#include "dae/daeErrorHandler.h" +#include "dom/domCOLLADA.h" + +#include "dae/domAny.h" +#include "dom/domConstants.h" +#include "dom/domTriangles.h" +#include "dae/daeDocument.h" +#include "dom/domTypes.h" +#include "dom/domElements.h" + +#include "assimp/assimp.hpp" +#include "assimp/aiScene.h" +#include "assimp/aiPostProcess.h" + +#include "urdf/model.h" +#include "urdf/pose.h" + +using namespace std; + +class ColladaWriter : public daeErrorHandler +{ +public: + struct SCENE + { + domVisual_sceneRef vscene; + domKinematics_sceneRef kscene; + domPhysics_sceneRef pscene; + domInstance_with_extraRef viscene; + domInstance_kinematics_sceneRef kiscene; + domInstance_with_extraRef piscene; + }; + + struct LINKOUTPUT + { + list listusedlinks; + daeElementRef plink; + domNodeRef pnode; + }; + + urdf::Model* robot_; + + Assimp::Importer importer_; + + boost::shared_ptr collada_; + domCOLLADA* dom_; + domCOLLADA::domSceneRef scene_; + domLibrary_jointsRef jointsLib_; + + domLibrary_visual_scenesRef visualScenesLib_; + domLibrary_kinematics_scenesRef kinematicsScenesLib_; + domLibrary_kinematics_modelsRef kinematicsModelsLib_; + domLibrary_articulated_systemsRef articulatedSystemsLib_; + domLibrary_physics_scenesRef physicsScenesLib_; + domLibrary_materialsRef materialsLib_; + domLibrary_effectsRef effectsLib_; + domLibrary_geometriesRef geometriesLib_; + +public: + ColladaWriter(urdf::Model* robot) : robot_(robot) { + daeErrorHandler::setErrorHandler(this); + + collada_.reset(new DAE()); + collada_->setIOPlugin(NULL); + collada_->setDatabase(NULL); + + string documentName("mycollada.dae"); + daeDocument* doc = NULL; + daeInt error = collada_->getDatabase()->insertDocument(documentName.c_str(), &doc); // also creates a collada root + if (error != DAE_OK || doc == NULL) + { + cerr << "Failed to create new document\n"; + throw; + } + + dom_ = daeSafeCast(doc->getDomRoot()); + dom_->setAttribute("xmlns:math","http://www.w3.org/1998/Math/MathML"); + + // Create the required asset tag + domAssetRef asset = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_ASSET)); + { + domAsset::domCreatedRef created = daeSafeCast(asset->createAndPlace(COLLADA_ELEMENT_CREATED)); + created->setValue("2009-04-06T17:01:00.891550"); // @todo: replace with current date + domAsset::domModifiedRef modified = daeSafeCast(asset->createAndPlace(COLLADA_ELEMENT_MODIFIED)); + modified->setValue("2009-04-06T17:01:00.891550"); // @todo: replace with current date + + domAsset::domContributorRef contrib = daeSafeCast(asset->createAndPlace(COLLADA_TYPE_CONTRIBUTOR)); + domAsset::domContributor::domAuthoring_toolRef authoringtool = daeSafeCast(contrib->createAndPlace(COLLADA_ELEMENT_AUTHORING_TOOL)); + authoringtool->setValue("URDF Collada Writer"); + + domAsset::domUnitRef units = daeSafeCast(asset->createAndPlace(COLLADA_ELEMENT_UNIT)); + units->setMeter(1); + units->setName("meter"); + + domAsset::domUp_axisRef zup = daeSafeCast(asset->createAndPlace(COLLADA_ELEMENT_UP_AXIS)); + zup->setValue(UP_AXIS_Z_UP); + } + + scene_ = dom_->getScene(); + if (!scene_) + scene_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_SCENE)); + + visualScenesLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_VISUAL_SCENES)); + visualScenesLib_->setId("visual_scenes"); + geometriesLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_GEOMETRIES)); + geometriesLib_->setId("geometries"); + effectsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_EFFECTS)); + effectsLib_->setId("effects"); + materialsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_MATERIALS)); + materialsLib_->setId("materials"); + kinematicsModelsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_KINEMATICS_MODELS)); + kinematicsModelsLib_->setId("kinematics_models"); + articulatedSystemsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_ARTICULATED_SYSTEMS)); + articulatedSystemsLib_->setId("articulated_systems"); + kinematicsScenesLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_KINEMATICS_SCENES)); + kinematicsScenesLib_->setId("kinematics_scenes"); + physicsScenesLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_PHYSICS_SCENES)); + physicsScenesLib_->setId("physics_scenes"); + jointsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_JOINTS)); + jointsLib_->setId("joints"); + } + + virtual ~ColladaWriter() { + collada_.reset(); + DAE::cleanup(); + } + + SCENE createScene() { + SCENE s; + + // Create visual scene + s.vscene = daeSafeCast(visualScenesLib_->createAndPlace(COLLADA_ELEMENT_VISUAL_SCENE)); + s.vscene->setId("visual_scene"); + s.vscene->setName("URDF Visual Scene"); + + // Create kinematics scene + s.kscene = daeSafeCast(kinematicsScenesLib_->createAndPlace(COLLADA_ELEMENT_KINEMATICS_SCENE)); + s.kscene->setId("kinematics_scene"); + s.kscene->setName("URDF Kinematics Scene"); + + // Create physic scene + s.pscene = daeSafeCast(physicsScenesLib_->createAndPlace(COLLADA_ELEMENT_PHYSICS_SCENE)); + s.pscene->setId("physics_scene"); + s.pscene->setName("URDF Physics Scene"); + + // Create instance visual scene + s.viscene = daeSafeCast(scene_->createAndPlace(COLLADA_ELEMENT_INSTANCE_VISUAL_SCENE)); + s.viscene->setUrl((string("#") + string(s.vscene->getID())).c_str()); + + // Create instance kinematics scene + s.kiscene = daeSafeCast(scene_->createAndPlace(COLLADA_ELEMENT_INSTANCE_KINEMATICS_SCENE)); + s.kiscene->setUrl((string("#") + string(s.kscene->getID())).c_str()); + + // Create instance physics scene + s.piscene = daeSafeCast(scene_->createAndPlace(COLLADA_ELEMENT_INSTANCE_PHYSICS_SCENE)); + s.piscene->setUrl((string("#") + string(s.pscene->getID())).c_str()); + + return s; + } + + virtual void handleError(daeString msg) { + cerr << "COLLADA error: " << msg << "\n"; + } + + virtual void handleWarning(daeString msg) { + cerr << "COLLADA warning: " << msg << "\n"; + } + + bool write() { + SCENE scene = createScene(); + + domPhysics_scene::domTechnique_commonRef common = daeSafeCast(scene.pscene->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); + + // Create gravity + domTargetable_float3Ref g = daeSafeCast(common->createAndPlace (COLLADA_ELEMENT_GRAVITY)); + g->getValue().set3(0.0, 0.0, 1.0); + + addJoints(); + addKinematics(); + addGeometries(); + + collada_->writeAll(); + + return true; + } + + void addGeometries() { + for (map >::const_iterator i = robot_->links_.begin(); i != robot_->links_.end(); i++) { + boost::shared_ptr urdf_link = i->second; + + switch (urdf_link->visual->geometry->type) { + case urdf::Geometry::MESH: { + urdf::Mesh* mesh = (urdf::Mesh*) urdf_link->visual->geometry.get(); + + string filename = mesh->filename; + urdf::Vector3 scale = mesh->scale; + + domGeometryRef geometry = daeSafeCast(geometriesLib_->createAndPlace(COLLADA_ELEMENT_GEOMETRY)); + loadMesh(filename, geometry); + + break; + } + case urdf::Geometry::SPHERE: { + cerr << "Geometry type SPHERE of link " << urdf_link->name << " is unsupported" << endl; + break; + } + case urdf::Geometry::BOX: { + cerr << "Geometry type BOX of link " << urdf_link->name << " is unsupported" << endl; + break; + } + case urdf::Geometry::CYLINDER: { + cerr << "Geometry type CYLINDER of link " << urdf_link->name << " is unsupported" << endl; + break; + } + default: { + cerr << "Geometry type " << urdf_link->visual->geometry->type << " of link " << urdf_link->name << " is supported" << endl; + break; + } + } + } + } + + void loadMesh(const string& filename, domGeometryRef mesh) { + const aiScene* scene = importer_.ReadFile(filename.c_str(), aiProcess_SortByPType /* aiProcess_CalcTangentSpace | aiProcess_Triangulate | aiProcess_JoinIdenticalVertices */); + if (!scene) + cerr << "Unable to import mesh " << filename << ": " << importer_.GetErrorString() << endl; + else + buildMesh(scene->mRootNode, mesh); + } + + void buildMesh(aiNode* node, daeElementRef parent) { + if (node == NULL) + return; + + const aiScene* scene = importer_.GetScene(); + + aiMatrix4x4 transform = node->mTransformation; + + aiNode* pnode = node->mParent; + while (pnode) { + // Don't convert to y-up orientation, which is what the root node in Assimp does + if (pnode->mParent != NULL) + transform = pnode->mTransformation * transform; + pnode = pnode->mParent; + } + + string parentid("mesh"); + + for (unsigned int i = 0; i < node->mNumMeshes; i++) { + aiMesh* aMesh = scene->mMeshes[i]; + + domMeshRef mesh = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_MESH)); + { + // Add in the indices for each face + for (unsigned int j = 0; j < aMesh->mNumFaces; j++) { + aiFace* aFace = &(aMesh->mFaces[j]); + for (unsigned int k = 0; k < aFace->mNumIndices; k++) { + int index = aFace->mIndices[k]; + // @todo add index + //subMesh->AddIndex(aFace->mIndices[k]); + } + } + + domSourceRef positions_source = daeSafeCast(mesh->createAndPlace(COLLADA_ELEMENT_SOURCE)); + { + positions_source->setId((parentid + string(".positions")).c_str()); + + domFloat_arrayRef positions_array = daeSafeCast(positions_source->createAndPlace(COLLADA_ELEMENT_FLOAT_ARRAY)); + positions_array->setId((parentid + string(".positions-array")).c_str()); + positions_array->setCount(aMesh->mNumVertices); + positions_array->setDigits(6); // 6 decimal places + positions_array->getValue().setCount(3 * aMesh->mNumVertices); + + for (unsigned int j = 0; j < aMesh->mNumVertices; j++) { + aiVector3D p; + p.x = aMesh->mVertices[j].x; + p.y = aMesh->mVertices[j].y; + p.z = aMesh->mVertices[j].z; + + p *= transform; + + positions_array->getValue()[j] = p.x; + positions_array->getValue()[j] = p.y; + positions_array->getValue()[j] = p.z; + + /* + if (aMesh->HasNormals()) { + p.x = aMesh->mNormals[j].x; + p.y = aMesh->mNormals[j].y; + p.z = aMesh->mNormals[j].z; + } + + // @todo add normal + //subMesh->AddNormal(p.x, p.y, p.z); + + // @todo add tex coord + //if (aMesh->mNumUVComponents[0]) + // subMesh->AddTexCoord(aMesh->mTextureCoords[0][j].x, 1.0 -aMesh->mTextureCoords[0][j].y); + //else + // subMesh->AddTexCoord(0,0); + */ + } + + /* + domSource::domTechnique_commonRef psourcetec = daeSafeCast(pvertsource->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); + domAccessorRef pacc = daeSafeCast(psourcetec->createAndPlace(COLLADA_ELEMENT_ACCESSOR)); + pacc->setCount(aMesh->mNumVertices); + pacc->setSource(xsAnyURI(*positions_array, string("#") + parentid + string(".positions-array"))); + pacc->setStride(3); + + domParamRef px = daeSafeCast(pacc->createAndPlace(COLLADA_ELEMENT_PARAM)); px->setName("X"); px->setType("float"); + domParamRef py = daeSafeCast(pacc->createAndPlace(COLLADA_ELEMENT_PARAM)); py->setName("Y"); py->setType("float"); + domParamRef pz = daeSafeCast(pacc->createAndPlace(COLLADA_ELEMENT_PARAM)); pz->setName("Z"); pz->setType("float"); + */ + } + + domTrianglesRef triangles = daeSafeCast(mesh->createAndPlace(COLLADA_ELEMENT_TRIANGLES)); + { + triangles->setCount(aMesh->mNumFaces / 3); + //triangles->setMaterial("mat0"); + + /* + domInput_local_offsetRef pvertoffset = daeSafeCast(ptris->createAndPlace(COLLADA_ELEMENT_INPUT)); + pvertoffset->setSemantic("VERTEX"); + pvertoffset->setOffset(0); + pvertoffset->setSource(domUrifragment(*pverts, string("#") + parentid + string("/vertices"))); + domPRef pindices = daeSafeCast(ptris->createAndPlace(COLLADA_ELEMENT_P)); + pindices->getValue().setCount(mesh.indices.size()); + for (size_t ind = 0; ind < mesh.indices.size(); ++ind) + pindices->getValue()[ind] = mesh.indices[ind]; + */ + } + } + + for (unsigned int i = 0; i < node->mNumChildren; i++) + buildMesh(node->mChildren[i], mesh); + } + } + + /* + domGeometryRef writeGeometry(const string& parentid) { + domVerticesRef pverts = daeSafeCast(pdommesh->createAndPlace(COLLADA_ELEMENT_VERTICES)); + { + pverts->setId("vertices"); + domInput_localRef pvertinput = daeSafeCast(pverts->createAndPlace(COLLADA_ELEMENT_INPUT)); + pvertinput->setSemantic("POSITION"); + pvertinput->setSource(domUrifragment(*pvertsource, string("#")+parentid+string(".positions"))); + } + } + */ + + void addJoints() { + for (map >::const_iterator i = robot_->joints_.begin(); i != robot_->joints_.end(); i++) { + boost::shared_ptr urdf_joint = i->second; + + // Create COLLADA joint + domJointRef joint = daeSafeCast(jointsLib_->createAndPlace(COLLADA_ELEMENT_JOINT)); + + joint->setId(urdf_joint->name.c_str()); + joint->setName(urdf_joint->name.c_str()); + + switch (urdf_joint->type) + { + case urdf::Joint::REVOLUTE: { + // joint.axis + vector axes(1); + axes[0] = daeSafeCast(joint->createAndPlace(COLLADA_ELEMENT_REVOLUTE)); + axes[0]->setSid("axis0"); + domAxisRef axis = daeSafeCast(axes[0]->createAndPlace(COLLADA_ELEMENT_AXIS)); + axis->getValue().setCount(3); + axis->getValue()[0] = urdf_joint->axis.x; + axis->getValue()[1] = urdf_joint->axis.y; + axis->getValue()[2] = urdf_joint->axis.z; + + // joint.limits + domJoint_limitsRef limits = daeSafeCast(axes[0]->createAndPlace(COLLADA_TYPE_LIMITS)); + daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MIN))->getValue() = urdf_joint->limits->lower; + daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MAX))->getValue() = urdf_joint->limits->upper; + break; + } + case urdf::Joint::CONTINUOUS: { + // Model as a REVOLUTE joint without limits + + // joint.axis + vector axes(1); + axes[0] = daeSafeCast(joint->createAndPlace(COLLADA_ELEMENT_REVOLUTE)); + axes[0]->setSid("axis0"); + domAxisRef axis = daeSafeCast(axes[0]->createAndPlace(COLLADA_ELEMENT_AXIS)); + axis->getValue().setCount(3); + axis->getValue()[0] = urdf_joint->axis.x; + axis->getValue()[1] = urdf_joint->axis.y; + axis->getValue()[2] = urdf_joint->axis.z; + break; + } + case urdf::Joint::PRISMATIC: { + // joint.axis + vector axes(1); + axes[0] = daeSafeCast(joint->createAndPlace(COLLADA_ELEMENT_PRISMATIC)); + axes[0]->setSid("axis0"); + domAxisRef axis = daeSafeCast(axes[0]->createAndPlace(COLLADA_ELEMENT_AXIS)); + axis->getValue().setCount(3); + axis->getValue()[0] = urdf_joint->axis.x; + axis->getValue()[1] = urdf_joint->axis.y; + axis->getValue()[2] = urdf_joint->axis.z; + + // joint.limits + domJoint_limitsRef limits = daeSafeCast(axes[0]->createAndPlace(COLLADA_TYPE_LIMITS)); + daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MIN))->getValue() = urdf_joint->limits->lower; + daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MAX))->getValue() = urdf_joint->limits->upper; + break; + } + case urdf::Joint::FIXED: { + // Model as a PRISMATIC joint with no limits + + // joint.axis + vector axes(1); + axes[0] = daeSafeCast(joint->createAndPlace(COLLADA_ELEMENT_PRISMATIC)); + axes[0]->setSid("axis0"); + domAxisRef axis = daeSafeCast(axes[0]->createAndPlace(COLLADA_ELEMENT_AXIS)); + axis->getValue().setCount(3); + axis->getValue()[0] = urdf_joint->axis.x; + axis->getValue()[1] = urdf_joint->axis.y; + axis->getValue()[2] = urdf_joint->axis.z; + + // joint.limits + domJoint_limitsRef limits = daeSafeCast(axes[0]->createAndPlace(COLLADA_TYPE_LIMITS)); + daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MIN))->getValue() = 0.0; + daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MAX))->getValue() = 0.0; + break; + } + case urdf::Joint::UNKNOWN: { + cerr << "Joint type UNKNOWN of joint " << urdf_joint->name << " is unsupported" << endl; + break; + } + case urdf::Joint::FLOATING: { + cerr << "Joint type FLOATING of joint " << urdf_joint->name << " is unsupported" << endl; + break; + } + case urdf::Joint::PLANAR: { + cerr << "Joint type PLANAR of joint " << urdf_joint->name << " is unsupported" << endl; + break; + } + default: { + cerr << "Joint type " << urdf_joint->type << " of joint " << urdf_joint->name << " is unsupported" << endl; + break; + } + } + } + } + + void addKinematics() + { + // Create kinematics model + domKinematics_modelRef model = daeSafeCast(kinematicsModelsLib_->createAndPlace(COLLADA_ELEMENT_KINEMATICS_MODEL)); + model->setId("kinematics_model"); + + // Create kinematics model technique common + domKinematics_model_techniqueRef technique = daeSafeCast(model->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); + + // Create the instance_joints + for (map >::const_iterator i = robot_->links_.begin(); i != robot_->links_.end(); i++) { + boost::shared_ptr urdf_link = i->second; + + domInstance_jointRef instance_joint = daeSafeCast(technique->createAndPlace(COLLADA_ELEMENT_INSTANCE_JOINT)); + instance_joint->setUrl("#joint_1"); + } + + addLink(technique, robot_->getRoot()); + } + + void addLink(daeElementRef parent, boost::shared_ptr urdf_link) { + // Create link + domLinkRef link = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_LINK)); + link->setName(urdf_link->name.c_str()); + + for (vector >::const_iterator i = urdf_link->child_joints.begin(); i != urdf_link->child_joints.end(); i++) { + boost::shared_ptr urdf_joint = *i; + + // Create attachment full + domLink::domAttachment_fullRef attachment_full = daeSafeCast(link->createAndPlace(COLLADA_TYPE_ATTACHMENT_FULL)); + attachment_full->setJoint(urdf_joint->name.c_str()); + + // Create translation, rotation + addTransformation(attachment_full, urdf_joint->parent_to_joint_origin_transform); + + // Create child links + addLink(attachment_full, robot_->getLink(urdf_joint->child_link_name)); + } + } + + void addTransformation(daeElementRef parent, const urdf::Pose& pose) + { + domTranslateRef trans = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_TRANSLATE)); + trans->getValue().setCount(3); + trans->getValue()[0] = pose.position.x; + trans->getValue()[1] = pose.position.y; + trans->getValue()[2] = pose.position.z; + + domRotateRef rot = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_ROTATE)); + rot->getValue().setCount(4); + rot->getValue()[0] = pose.rotation.x; + rot->getValue()[1] = pose.rotation.y; + rot->getValue()[2] = pose.rotation.z; + rot->getValue()[3] = pose.rotation.w; + } +}; + +int main(int argc, char** argv) +{ + if (argc != 2) { + std::cerr << "Usage: urdf_to_collada input.urdf" << std::endl; + return -1; + } + + TiXmlDocument robot_model_xml; + robot_model_xml.LoadFile(argv[1]); + TiXmlElement* robot_xml = robot_model_xml.FirstChildElement("robot"); + if (!robot_xml) { + std::cerr << "ERROR: Could not load the xml into TiXmlElement" << std::endl; + return -1; + } + + urdf::Model robot; + if (!robot.initXml(robot_xml)) { + std::cerr << "ERROR: Model Parsing the xml failed" << std::endl; + return -1; + } + + ColladaWriter* writer = new ColladaWriter(&robot); + writer->write(); + delete writer; + + return 0; +} diff --git a/collada_urdf/test/base.dae b/collada_urdf/test/base.dae new file mode 100644 index 0000000..b1e4d14 --- /dev/null +++ b/collada_urdf/test/base.dae @@ -0,0 +1,63 @@ + + + + + VCGLab + VCGLib | MeshLab + + Y_UP + Sat Dec 26 05:44:16 2009 + Sat Dec 26 05:44:16 2009 + + + + + + + + + 0.245 0.03 0.182 0.305 0.03 0.182 0.245 -0.03 0.2201 0.245 0.00235022 0.2201 0.305 -0.03 0.2201 0.245 -0.03 0.182 0.305 -0.03 0.182 0.305 -0.03 0.2688 0.305 0.03 0.2688 0.305 0.03 0.2509 0.305 -0.03 0.2509 0.245 -0.03 0.2688 0.245 0.00235022 0.2509 0.245 -0.00235022 0.2509 0.245 0.03 0.2688 0.305 0.03 0.2201 0.296177 0.013287 0.2201 0.259464 0.0195866 0.2201 0.245 0.03 0.2201 0.2975 1.78638e-18 0.2509 0.245 0.03 0.2509 0.272648 0.0223767 0.2509 0.245 -0.03 0.2509 0.284864 -0.0202227 0.2509 0.247559 -0.00726508 0.2509 0.253052 -0.00798837 0.2509 0.261147 -0.01773 0.2509 0.253857 -0.00769545 0.2509 0.272648 -0.0223767 0.2509 0.246912 -0.00674251 0.2201 0.245 -0.00235022 0.2201 0.259464 -0.0195866 0.2201 0.27225 -0.0248482 0.2201 0.246912 0.00674251 0.2201 0.253857 0.00769545 0.2509 0.253052 0.00798837 0.2509 0.247559 0.00726508 0.2509 0.253052 0.00798837 0.241308 0.252209 0.00822719 0.231517 0.253052 -0.00798837 0.241308 0.252209 -0.00822719 0.231517 0.25143 -0.00833477 0.2201 0.25143 -0.00833477 0.2229 0.261147 0.01773 0.2509 0.294081 0.0119235 0.2509 0.285877 0.0225099 0.2229 0.284864 0.0202227 0.2509 0.3 -6.85789e-09 0.2229 0.294081 -0.0119235 0.2509 0.259464 -0.0195868 0.2229 0.27225 -0.0248483 0.2229 0.259464 0.0195869 0.2229 0.25143 0.00833477 0.2229 0.25143 0.00833477 0.2201 0.27225 0.0248483 0.2229 0.27225 0.0248482 0.2201 0.296177 0.0132868 0.2229 0.285876 0.02251 0.2201 0.296177 -0.013287 0.2201 0.3 -6.84691e-09 0.2201 0.296177 -0.0132868 0.2229 0.285877 -0.0225099 0.2229 0.285876 -0.02251 0.2201 0.318955 -0.220906 0.219841 0.318686 2.40068e-16 0.225177 0.310453 -0.261757 0.218225 0.25447 -0.315409 0.218013 0.275611 -0.311096 0.0772584 0.286334 -0.295544 0.217612 0.217444 -0.322342 0.21928 0.0642492 -0.322267 0.223602 0.0650111 -0.107523 0.233639 0.224364 -0.324741 0.0818477 0.0650111 0.107523 0.233639 0.0134436 -0.32226 0.223998 0.318955 0.220906 0.219841 0.0642492 0.322267 0.223602 -0.146581 0.324161 0.115067 0.217444 0.322342 0.21928 0.25447 0.315409 0.218013 0.286334 0.295544 0.217612 0.275611 0.311096 0.0772584 0.310453 0.261757 0.218225 0.326363 0.223474 0.0727134 -0.184988 -0.322319 0.220588 -0.146581 -0.321161 0.115067 0.0134436 0.32226 0.223998 -0.189051 -2.02495e-16 0.231751 -0.184988 0.322319 0.220588 -0.183981 0.319367 0.217823 0.310209 -0.272456 0.07416 0.326363 -0.223474 0.0727134 0.312825 -0.273958 0.0739258 0.310209 0.272456 0.07416 0.323346 0.223467 0.0729836 -0.146581 0.321161 0.115067 0.224364 0.324741 0.0818477 0.316094 0.220953 0.217011 0.323346 -0.223467 0.0729836 0.316094 -0.220953 0.217011 0.302998 -0.270186 0.215183 0.224361 -0.32174 0.0818479 0.27409 -0.308501 0.0773946 -0.146581 -0.324161 0.115067 0.217582 -0.319391 0.21647 0.312825 0.273958 0.0739258 0.0641175 0.319315 0.220803 0.224361 0.32174 0.0818479 0.27409 0.308501 0.0773946 -0.183981 -0.319367 0.217823 -0.187973 2.25607e-16 0.22879 0.0641175 -0.106536 0.230673 0.0641175 0.106536 0.230673 0.0168136 -0.319308 0.221187 0.0641175 -0.319315 0.220803 0.267012 -0.306187 0.214973 0.0168136 0.319308 0.221187 0.315825 2.39999e-16 0.222352 0.302998 0.270186 0.215183 0.217582 0.319391 0.21647 0.267012 0.306187 0.214973 0.327 0.143998 0.117 0.327 -0.159361 0.0940276 0.327 -0.163022 0.0892562 0.327 -0.2225 0 0.327 0.153395 0.11042 0.327 0.159361 0.0940276 0.327 0.149734 0.115192 0.327 -0.2225 0.0874478 0.313 -0.274748 0 0.27483 -0.312954 0.0922537 0.313062 -0.274641 0.0887319 0.276248 -0.315599 0 0.274748 -0.313 0 0.2225 -0.33 0 0.2225 -0.327 0 0.2225 -0.327 0.0970746 -0.165173 -0.33 0.131792 -0.117205 -0.33 0 -0.117205 -0.327 0 0.315599 -0.276248 0 0.2225 -0.33 0.0970746 0.315659 -0.276143 0.0887321 0.276327 -0.315553 0.0922542 0.33 -0.2225 0 0.33 0.168758 0.0874478 0.33 0.2225 0.0874478 0.33 0.163022 0.0892562 0.33 -0.2225 0.0874478 0.33 0.2225 0 0.276327 0.315553 0.0922542 0.315599 0.276248 0 0.315659 0.276143 0.0887321 0.2225 0.327 0 0.276248 0.315599 0 0.2225 0.33 0 -0.165173 0.327 0.131792 -0.165173 0.33 0.131792 0.2225 0.33 0.0970746 -0.117205 0.33 0 -0.117205 0.327 0 0.2225 0.327 0.0970746 0.274748 0.313 0 0.327 0.2225 0 0.313 0.274748 0 0.327 0.168758 0.0874478 0.327 0.2225 0.0874478 0.27483 0.312954 0.0922537 0.313062 0.274641 0.0887319 0.33 0.159361 0.0940276 0.33 0.153395 0.11042 0.33 -0.143998 0.117 0.327 0.163022 0.0892562 0.33 -0.163022 0.0892562 0.33 -0.168758 0.0874478 0.33 -0.159361 0.0940276 0.327 -0.168758 0.0874478 0.33 -0.153395 0.11042 0.327 -0.153395 0.11042 0.33 -0.149734 0.115192 0.327 -0.149734 0.115192 0.33 0.143998 0.117 0.33 0.149734 0.115192 0.327 -0.143998 0.117 -0.165173 -0.327 0.131792 -0.327 -0.2225 0 -0.33 -0.2225 0 -0.33 -0.148592 0.134628 -0.33 -0.151799 0.141128 -0.276248 -0.315599 0 -0.315599 -0.276248 0 -0.315658 -0.276146 0.145268 -0.2225 -0.33 0 -0.2225 -0.33 0.136925 -0.117737 -0.33 0 -0.117737 -0.327 0 -0.2225 -0.327 0.136925 -0.2225 -0.327 0 -0.274748 -0.313 0 -0.274828 -0.312955 0.141746 -0.313 -0.274748 0 -0.313061 -0.274644 0.145268 -0.327 0.2225 0 -0.313 0.274748 0 -0.327 -0.141837 0.132 -0.327 0.141837 0.132 -0.327 -0.2225 0.146552 -0.313061 0.274644 0.145268 -0.274748 0.313 0 -0.315599 0.276248 0 -0.276248 0.315599 0 -0.2225 0.327 0 -0.2225 0.327 0.136925 -0.2225 0.33 0 -0.117737 0.33 0 -0.165723 0.327 0.131841 -0.117737 0.327 0 -0.315658 0.276146 0.145268 -0.276325 0.315555 0.141746 -0.33 0.2225 0 -0.33 0.2225 0.146552 -0.33 0.152273 0.146552 -0.327 0.152273 0.146552 -0.327 0.2225 0.146552 -0.33 0.151799 0.141128 -0.33 0.148592 0.134628 -0.327 0.148592 0.134628 -0.327 0.151799 0.141128 -0.33 0.141837 0.132 -0.33 -0.141837 0.132 -0.327 -0.148592 0.134628 -0.327 -0.151799 0.141128 -0.33 -0.152273 0.146552 -0.33 -0.2225 0.146552 -0.327 -0.152273 0.146552 -0.165723 0.33 0.131841 -0.2225 0.33 0.136925 -0.274828 0.312955 0.141746 -0.165723 -0.327 0.131841 -0.165723 -0.33 0.131841 -0.276325 -0.315555 0.141746 -0.325972 0.174959 0.51394 -0.305 0.190571 0.503654 -0.305 0.192256 0.452 -0.254916 0.195694 0.406996 -0.305 0.18778 0.602553 -0.305 0.186508 0.649774 -0.255 0.191001 0.451887 -0.254949 0.19234 0.415669 -0.255 0.194001 0.452 -0.255 0.187526 0.676239 -0.305 0.181695 0.803651 -0.305 0.183551 0.750618 -0.255 0.184526 0.676123 -0.255 0.190997 0.452 -0.255 0.179 0.90325 -0.305 0.179608 0.854532 -0.305 0.177254 0.90325 -0.323192 0.169941 0.85506 -0.327255 0.172677 0.74443 -0.328383 0.17422 0.656504 -0.32801 0.173473 0.704113 -0.305 0.185233 0.695482 -0.327529 0.174829 0.567928 -0.328241 0.174594 0.615164 -0.305 0.189109 0.553839 -0.297877 0.209371 0.256092 -0.274367 0.209905 0.257332 -0.304059 0.200969 0.302768 -0.251783 0.20443 0.28843 -0.248527 0.210502 0.258596 -0.249023 0.206506 0.261922 -0.251881 0.201205 0.289753 -0.304888 0.198147 0.3327 -0.25376 0.197109 0.32815 -0.253833 0.19993 0.330533 -0.305102 0.195885 0.36724 -0.254576 0.197602 0.366393 -0.254754 0.193783 0.382353 -0.312527 0.185038 0.412667 -0.310681 0.184879 0.373338 -0.305058 0.193977 0.406854 -0.30845 0.184721 0.334099 -0.289891 0.212785 0.243015 -0.271818 0.205994 0.260764 -0.303743 0.191257 0.401296 -0.303241 0.193357 0.359948 -0.323582 -0.118243 0.452121 -0.322459 -0.148934 0.452138 -0.304121 0.189287 0.451895 -0.237915 0.248522 0.222942 -0.244236 0.218922 0.238534 -0.238138 0.240854 0.22334 -0.242125 0.228982 0.232125 -0.285693 0.22725 0.230449 -0.255679 0.255701 0.22167 -0.237682 0.256115 0.222535 -0.239795 -4.96529e-05 0.226575 -0.2411 0.000348644 0.229516 -0.304569 0.182366 0.691265 -0.255 0.175994 0.90325 -0.304398 0.186217 0.55063 -0.304527 0.183832 0.638319 -0.286334 0.196921 0.222908 -0.301987 0.159291 0.223448 -0.305548 0.220864 0.22068 -0.306249 0.162409 0.256757 -0.298881 0.187738 0.256891 -0.284545 0.2045 0.222679 -0.31309 0.168203 0.319199 -0.305265 0.185185 0.295075 -0.318821 0.173026 0.385273 -0.32124 0.174508 0.41979 -0.313661 0.185352 0.452 -0.314117 0.184907 0.452 -0.323158 0.175 0.452 -0.314575 0.169515 0.334771 -0.315813 0.170594 0.348479 -0.318405 0.127329 0.342524 -0.309921 0.165431 0.288623 -0.278769 0.235542 0.221515 -0.279606 0.231048 0.221697 -0.292612 0.216024 0.241985 -0.272642 0.255321 0.220795 -0.278181 0.242962 0.222729 -0.313401 0.173632 0.90325 -0.320552 0.168 0.90325 -0.326282 0.114492 0.804542 -0.326299 0.171926 0.778874 -0.328246 0.116797 0.507437 -0.325 1e-20 0.90325 -0.324194 -0.0501721 0.90325 -0.321998 1e-20 0.90325 -0.325372 1e-20 0.890679 -0.325672 1e-20 0.878709 -0.325951 1e-20 0.86653 -0.326772 1e-20 0.825969 -0.326307 1e-20 0.84981 -0.327584 0.0576309 0.761329 -0.326474 -0.0572035 0.818566 -0.327348 1e-20 0.793093 -0.328026 1e-20 0.74811 -0.328777 1e-20 0.683817 -0.329074 0.0582101 0.632797 -0.329291 1e-20 0.601615 -0.328758 0.0583677 0.50648 -0.329198 1e-20 0.538023 -0.328758 -0.0583677 0.50648 -0.328725 1e-20 0.493803 -0.327719 1e-20 0.452 -0.327654 0.0339559 0.452 -0.326848 0.106839 0.452 -0.327461 0.0641029 0.452 -0.320992 0.0424801 0.358419 -0.326563 0.118888 0.452 -0.329032 0.116696 0.5663 -0.329212 0.0583159 0.567789 -0.329134 0.116487 0.62702 -0.32849 0.0579925 0.698359 -0.328657 0.116056 0.688018 -0.326474 0.0572035 0.818566 -0.327682 0.115339 0.747717 -0.324194 0.0501721 0.90325 -0.324519 0.113487 0.856916 -0.325272 0.0566966 0.866923 -0.324053 0.0557668 0.90325 -0.325414 0.149809 0.452 -0.322741 0.101969 0.90325 -0.322468 0.110672 0.90325 -0.320542 0.0747267 0.90325 -0.306649 -0.0440814 0.225717 -0.321698 3.04167e-18 0.365415 -0.319981 0.0849322 0.350475 -0.321021 -1.41505e-17 0.358711 -0.306786 9.95304e-13 0.225921 -0.306266 0.0786846 0.225278 -0.306649 0.0440814 0.225717 -0.305671 0.1061 0.224763 -0.304453 0.135477 0.224064 -0.148781 0.324158 0.115264 -0.224777 0.324039 0.122069 -0.214171 0.317755 0.219741 -0.273735 0.308222 0.208534 -0.221539 0.32242 0.214781 -0.148781 0.321157 0.115264 -0.186004 0.322372 0.217532 -0.187197 0.317983 0.220809 -0.186617 0.320208 0.219217 -0.197169 0.317996 0.220424 -0.197781 0.322386 0.216753 -0.208082 0.320313 0.218038 -0.209292 0.322401 0.21587 -0.21517 0.32241 0.215368 -0.323607 -0.135184 0.19852 -0.323528 1e-20 0.2008 -0.318306 1.82333e-17 0.213451 -0.310936 0.125138 0.223958 -0.323607 0.135184 0.19852 -0.312 2.00221e-13 0.225598 -0.31521 -0.221084 0.208086 -0.323741 -0.221318 0.194688 -0.325961 0.222427 0.13113 -0.325961 -0.222427 0.13113 -0.309825 -0.271665 0.129685 -0.322968 -0.22243 0.130862 -0.323741 0.221318 0.194688 -0.31521 0.221084 0.208086 -0.312426 -0.273145 0.129918 -0.275399 -0.310355 0.126603 -0.224775 -0.321038 0.122069 -0.273892 -0.307764 0.126468 -0.148781 -0.324158 0.115264 -0.148781 -0.321157 0.115264 -0.224777 -0.324039 0.122069 -0.208625 -0.319421 0.214695 -0.221431 -0.319442 0.213519 -0.272583 -0.305472 0.207018 -0.322968 0.22243 0.130862 -0.320769 0.221331 0.193828 -0.320631 -0.139151 0.197785 -0.320546 6.30092e-15 0.20022 -0.325152 -0.11512 0.722596 -0.273892 0.307764 0.126468 -0.309165 0.267356 0.197968 -0.309825 0.271665 0.129685 -0.224775 0.321038 0.122069 -0.221582 0.319442 0.213502 -0.275399 0.310355 0.126603 -0.312426 0.273145 0.129918 -0.221375 0.317028 0.219478 -0.221453 0.319826 0.217248 -0.304426 0.280405 0.201639 -0.317801 0.255294 0.19666 -0.299715 0.249966 0.219539 -0.24864 0.30876 0.218759 -0.280911 0.28269 0.218731 -0.207 0.318 0.220027 -0.185804 0.318235 0.216983 -0.207 -0.318 0.220027 -0.214171 -0.317755 0.219741 -0.19115 1.25767e-15 0.231672 -0.186617 -0.320208 0.219217 -0.187197 -0.317983 0.220809 -0.197169 -0.317996 0.220424 -0.21517 -0.32241 0.215368 -0.209292 -0.322401 0.21587 -0.208082 -0.320313 0.218038 -0.24864 -0.30876 0.218759 -0.221375 -0.317028 0.219478 -0.273735 -0.308222 0.208534 -0.280911 -0.28269 0.218731 -0.221539 -0.32242 0.214781 -0.221453 -0.319826 0.217248 -0.304426 -0.280405 0.201639 -0.255006 -0.255716 0.221704 -0.272642 -0.255321 0.220795 -0.299715 -0.249966 0.219539 -0.317801 -0.255294 0.19666 -0.301987 -0.159291 0.223448 -0.284612 -0.204193 0.222689 -0.305548 -0.220864 0.22068 -0.310936 -0.125138 0.223958 -0.304453 -0.135477 0.224064 -0.305671 -0.1061 0.224763 -0.237915 -0.248522 0.222942 -0.319981 -0.0849325 0.350475 -0.306266 -0.0786846 0.225278 -0.306973 -0.162984 0.262788 -0.29888 -0.187738 0.256888 -0.286341 -0.196896 0.222909 -0.27961 -0.231026 0.221698 -0.292592 -0.21605 0.241947 -0.279142 -0.240706 0.22344 -0.278797 -0.235396 0.221521 -0.237682 -0.256115 0.222535 -0.238138 -0.240854 0.22334 -0.282592 -0.224003 0.23067 -0.273336 -0.242254 0.220755 -0.304622 0.174261 0.90325 -0.311677 0.183097 0.452023 -0.304282 0.187623 0.502688 -0.310542 0.182633 0.412026 -0.323063 0.173494 0.511837 -0.32034 0.173693 0.452127 -0.324596 0.173279 0.564425 -0.304473 0.184977 0.595777 -0.304591 0.180895 0.740214 -0.304608 0.179371 0.785523 -0.304635 0.176065 0.866676 -0.323492 0.170418 0.774572 -0.304623 0.177766 0.827554 -0.295757 0.205468 0.259454 -0.302126 0.183727 0.292501 -0.300294 0.200042 0.287323 -0.30248 0.19574 0.326128 -0.308248 0.182837 0.372007 -0.283088 0.223173 0.231357 -0.276806 0.219821 0.219397 -0.272025 0.241784 0.218554 -0.266838 0.258148 0.217941 -0.273397 0.242111 0.220802 -0.300184 0.243053 0.216873 -0.274479 0.230879 0.218982 -0.282912 0.194523 0.220198 -0.283734 0.191759 0.220268 -0.295238 0.186296 0.254202 -0.308778 0.16588 0.304917 -0.305644 0.183036 0.332093 -0.311579 0.168257 0.333242 -0.315148 0.171122 0.374313 -0.31252 0.182266 0.452036 -0.317814 0.17287 0.410497 -0.25101 0.258505 0.218741 -0.236505 0.250108 0.220605 -0.298755 0.157867 0.220685 -0.308804 0.143477 0.220547 -0.305479 0.163082 0.274689 -0.302248 0.160417 0.247573 -0.312494 0.169019 0.343155 -0.322459 0.148934 0.452138 -0.311447 0.171306 0.90325 -0.321794 0.113042 0.849929 -0.317592 0.16662 0.90325 -0.319589 0.106669 0.90325 -0.323582 0.118243 0.452121 -0.325414 0.11619 0.515753 -0.325318 0.173006 0.610776 -0.326128 0.116086 0.583633 -0.325486 0.172631 0.651692 -0.325994 0.115787 0.653377 -0.325152 0.11512 0.722596 -0.325152 0.171918 0.699161 -0.324427 0.171143 0.739755 -0.320357 0.168503 0.852728 -0.325911 -6.48498e-12 0.506772 -0.324721 1e-20 0.452103 -0.324656 -0.033776 0.452103 -0.324096 1.41188e-18 0.436435 -0.326316 -2.11219e-13 0.573478 -0.325848 -1.66285e-12 0.676207 -0.324858 4.31599e-14 0.76006 -0.325001 -0.0575123 0.735054 -0.32587 -0.0578545 0.661162 -0.323803 0.0570312 0.803185 -0.324019 1.97312e-18 0.812307 -0.323803 -0.0570312 0.803185 -0.322894 9.00636e-15 0.869073 -0.323368 4.73828e-14 0.846747 -0.322539 1.69697e-14 0.884136 -0.321055 0.0555624 0.90325 -0.322256 -3.57213e-16 0.894869 -0.322445 0.0564522 0.860836 -0.323719 0.114177 0.788907 -0.325001 0.0575123 0.735054 -0.32587 0.0578545 0.661162 -0.326226 0.0580113 0.586225 -0.325867 0.0580715 0.514967 -0.324656 0.033776 0.452103 -0.324466 0.063758 0.452106 -0.323862 0.106217 0.452117 -0.317931 0.0423167 0.357964 -0.306287 7.67491e-18 0.249557 -0.303472 -6.25928e-13 0.223117 -0.317931 -0.0423167 0.357964 -0.309224 2.06897e-18 0.276839 -0.311947 8.2829e-19 0.30195 -0.314273 7.59987e-18 0.323421 -0.316233 4.7478e-18 0.341715 -0.317929 8.36838e-18 0.357969 -0.318713 1.78081e-18 0.365721 -0.320942 3.72454e-18 0.389408 -0.322217 -2.14247e-19 0.405145 -0.315358 0.126761 0.342038 -0.302884 0.0812988 0.222433 -0.316922 0.0845847 0.350006 -0.301034 0.135814 0.221254 -0.30226 0.10781 0.221924 -0.303311 0.0463185 0.222893 -0.319492 -4.10244e-20 0.37365 -0.32327 1.87057e-18 0.420801 -0.221431 0.319442 0.213519 -0.221281 0.319442 0.213535 -0.214755 0.31943 0.214191 -0.221171 0.317746 0.215098 -0.208625 0.319421 0.214695 -0.207901 0.318188 0.215923 -0.185483 0.319397 0.216101 -0.19746 0.319409 0.215425 -0.186142 0.316947 0.217911 -0.272583 0.305472 0.207018 -0.276745 0.285793 0.21576 -0.258589 0.30181 0.215707 -0.310195 5.04572e-12 0.222705 -0.320631 0.139151 0.197785 -0.301034 -0.135814 0.221254 -0.30226 -0.10781 0.221924 -0.312915 0.220846 0.20615 -0.320769 0.221219 0.193835 -0.30409 0.220522 0.217777 -0.286945 0.27271 0.215982 -0.294959 0.258739 0.216326 -0.221078 0.315958 0.216555 -0.235745 0.258857 0.219465 -0.214489 0.316598 0.216798 -0.207224 0.316871 0.217086 -0.196836 0.316917 0.217503 -0.186004 -0.322372 0.217532 -0.197781 -0.322386 0.216753 -0.190073 -2.73549e-16 0.228711 -0.185804 -0.318235 0.216983 -0.221078 -0.315958 0.216555 -0.286945 -0.27271 0.215982 -0.186142 -0.316947 0.217911 -0.235745 -0.258857 0.219465 -0.185483 -0.319397 0.216101 -0.19746 -0.319409 0.215425 -0.207901 -0.318188 0.215923 -0.221281 -0.319442 0.213535 -0.214755 -0.31943 0.214191 -0.214489 -0.316598 0.216798 -0.221171 -0.317746 0.215098 -0.258589 -0.30181 0.215707 -0.221582 -0.319442 0.213502 -0.323719 -0.114177 0.788907 -0.300184 -0.243053 0.216873 -0.320769 -0.221331 0.193828 -0.320769 -0.221219 0.193835 -0.276745 -0.285793 0.21576 -0.309165 -0.267356 0.197968 -0.312915 -0.220846 0.20615 -0.273501 -0.235378 0.218806 -0.30409 -0.220522 0.217777 -0.282759 -0.19505 0.220184 -0.298755 -0.157867 0.220685 -0.308804 -0.143477 0.220547 -0.294959 -0.258739 0.216326 -0.266838 -0.258148 0.217941 -0.196836 -0.316917 0.217503 -0.207224 -0.316871 0.217086 -0.251168 -0.258501 0.218733 -0.236505 -0.250108 0.220605 -0.280814 -0.202296 0.21998 -0.274451 -0.231008 0.218977 -0.295224 -0.186303 0.254149 -0.302248 -0.160417 0.247573 -0.302884 -0.0812988 0.222433 -0.303311 -0.0463185 0.222893 -0.325272 -0.0566966 0.866923 -0.321055 -0.0555624 0.90325 -0.324053 -0.0557668 0.90325 -0.326282 -0.114492 0.804542 -0.327682 -0.115339 0.747717 -0.32849 -0.0579925 0.698359 -0.327584 -0.0576309 0.761329 -0.329212 -0.0583159 0.567789 -0.329074 -0.0582101 0.632797 -0.329134 -0.116487 0.62702 -0.327654 -0.0339559 0.452 -0.328246 -0.116797 0.507437 -0.320992 -0.0424803 0.358419 -0.327461 -0.0641029 0.452 -0.326848 -0.106839 0.452 -0.320552 -0.168 0.90325 -0.311447 -0.171306 0.90325 -0.323192 -0.169941 0.85506 -0.324519 -0.113487 0.856916 -0.313401 -0.173632 0.90325 -0.305 -0.179608 0.854532 -0.326299 -0.171926 0.778874 -0.328657 -0.116056 0.688018 -0.328383 -0.17422 0.656504 -0.305 -0.185233 0.695482 -0.327668 -0.173071 0.72504 -0.305 -0.186508 0.649774 -0.328241 -0.174594 0.615164 -0.329032 -0.116696 0.5663 -0.327529 -0.174829 0.567928 -0.305 -0.18778 0.602553 -0.325414 -0.149809 0.452 -0.323158 -0.175 0.452 -0.326563 -0.118888 0.452 -0.305 -0.189109 0.553839 -0.325972 -0.174959 0.51394 -0.318405 -0.127329 0.342524 -0.314662 -0.169591 0.335704 -0.319589 -0.106669 0.90325 -0.322468 -0.110672 0.90325 -0.322741 -0.101969 0.90325 -0.32124 -0.174508 0.41979 -0.314117 -0.184907 0.452 -0.315813 -0.170594 0.348479 -0.318821 -0.173026 0.385273 -0.310681 -0.184879 0.373337 -0.311155 -0.166498 0.300141 -0.30845 -0.184721 0.334098 -0.320542 -0.0747267 0.90325 -0.322445 -0.0564522 0.860836 -0.317592 -0.16662 0.90325 -0.305 -0.177254 0.90325 -0.255 -0.175994 0.90325 -0.304635 -0.176065 0.866676 -0.304622 -0.174261 0.90325 -0.305 -0.183551 0.750618 -0.305 -0.181695 0.803651 -0.255 -0.179 0.90325 -0.313661 -0.185352 0.452 -0.305 -0.190571 0.503654 -0.312527 -0.185038 0.412666 -0.305 -0.192256 0.452 -0.255 -0.187526 0.676239 -0.305265 -0.185185 0.295073 -0.304059 -0.200969 0.302768 -0.297877 -0.209371 0.256092 -0.272907 -0.209938 0.257406 -0.248527 -0.210502 0.258596 -0.305084 -0.194585 0.393052 -0.30503 -0.19339 0.421265 -0.254576 -0.197602 0.366393 -0.305102 -0.195885 0.36724 -0.304888 -0.198147 0.3327 -0.253833 -0.19993 0.330533 -0.287381 -0.224275 0.232815 -0.255 -0.194001 0.452 -0.249023 -0.206506 0.261922 -0.244337 -0.218612 0.238885 -0.242122 -0.228992 0.232117 -0.326128 -0.116086 0.583633 -0.326226 -0.0580113 0.586225 -0.255 -0.191001 0.451887 -0.254916 -0.195694 0.406996 -0.25376 -0.197109 0.32815 -0.251881 -0.201205 0.289753 -0.251783 -0.20443 0.28843 -0.255 -0.184526 0.676123 -0.304473 -0.184977 0.595777 -0.304282 -0.187623 0.502688 -0.255 -0.190997 0.452 -0.304121 -0.189287 0.451895 -0.254949 -0.19234 0.415669 -0.254754 -0.193783 0.382353 -0.303241 -0.193357 0.359948 -0.304623 -0.177766 0.827554 -0.304608 -0.179371 0.785523 -0.304591 -0.180895 0.740214 -0.320357 -0.168503 0.852728 -0.323492 -0.170418 0.774572 -0.304569 -0.182366 0.691265 -0.325152 -0.171918 0.699161 -0.325486 -0.172631 0.651692 -0.304527 -0.183832 0.638319 -0.304398 -0.186217 0.55063 -0.323063 -0.173494 0.511837 -0.303743 -0.191257 0.401296 -0.311677 -0.183097 0.452023 -0.30248 -0.19574 0.326128 -0.272127 -0.205987 0.260748 -0.300294 -0.200042 0.287323 -0.295757 -0.205468 0.259454 -0.289786 -0.212935 0.242789 -0.302121 -0.183729 0.292455 -0.305479 -0.163082 0.274689 -0.311579 -0.168257 0.333242 -0.308778 -0.16588 0.304917 -0.305642 -0.183036 0.332058 -0.310541 -0.182633 0.412015 -0.308246 -0.182837 0.371983 -0.31252 -0.182266 0.452036 -0.315358 -0.126761 0.342038 -0.317814 -0.17287 0.410497 -0.32034 -0.173693 0.452127 -0.315148 -0.171122 0.374313 -0.312494 -0.169019 0.343155 -0.324427 -0.171143 0.739755 -0.321794 -0.113042 0.849929 -0.325994 -0.115787 0.653377 -0.324596 -0.173279 0.564425 -0.325318 -0.173006 0.610776 -0.324466 -0.063758 0.452106 -0.316922 -0.0845847 0.350006 -0.323862 -0.106217 0.452117 -0.325414 -0.11619 0.515753 -0.325867 -0.0580715 0.514967 + + + + + + + + + + 0 0 -1 0 1 0 0 0 -1 1 0 0 0 1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -1 0 0 -1 0 1 0 0 0 0 1 1 0 0 0 1 0 1 0 0 0 0 1 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -1 0 0 -0.887006 0.461757 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -1 0 0 -0.916858 -0.399215 0 -0.886955 -0.461731 0.0107719 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 -0.916786 0.399184 0.0124589 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0.342014 0.939695 0 0.27247 0.962164 0 0 0 -1 0 0 -1 -0.130511 0.991249 0.0198226 0.0034973 0.99992 0.0121677 -0.806057 0.585628 0.085514 -0.806714 0.584466 0.0872483 -0.809698 0.580817 0.08391 0.342014 -0.939695 0 -0.130537 -0.991443 0 -0.808188 -0.58267 0.0856025 -0.07716 -0.996538 0.0309536 -0.809697 -0.580818 0.0839099 -0.805934 -0.585538 0.0872722 -0.111761 -0.99348 0.0225006 -0.266309 -0.963888 0 -0.332388 -0.943099 -0.00902848 -0.327331 0.944865 -0.00916454 -0.373193 0.92368 0.0868427 -0.379207 0.9215 0.0839036 0.173007 0.981123 0.086403 0.16853 0.982086 0.0842926 0.666654 0.740395 0.0859545 0.664688 0.742306 0.0846869 0.957775 0.274644 0.0850706 0.957739 -0.274634 0.0855154 0.95749 0.275507 0.0854931 0.666654 -0.740395 0.0859549 0.957523 -0.275516 0.0850942 0.173007 -0.981123 0.086403 0.664687 -0.742307 0.0846865 -0.373193 -0.92368 0.0868426 0.16853 -0.982086 0.0842926 -0.379208 -0.9215 0.0839032 -0.811196 -0.579204 0.0805202 -0.813839 -0.581091 4.23261e-05 -0.813844 -0.581084 0 -0.811197 0.579203 0.0805202 -0.813839 0.58109 0 -0.332402 0.943138 0 -0.380549 0.924761 -4.3775e-05 -0.813843 0.581085 3.36648e-05 0.169132 0.985593 -6.33855e-05 -0.380565 0.924754 3.81016e-05 0.667084 0.744982 -6.68567e-05 0.169114 0.985596 2.54519e-05 0.961009 0.276519 -5.34817e-05 0.667074 0.744991 -8.85217e-07 0.961008 -0.276519 -3.06871e-05 0.961007 0.276523 -3.06849e-05 0.667083 -0.744983 -8.86373e-07 0.961007 -0.276523 -5.34813e-05 0.169132 -0.985593 2.54489e-05 0.667073 -0.744992 -6.68544e-05 -0.38055 -0.92476 4.21492e-05 0.169114 -0.985597 -6.51822e-05 -0.380565 -0.924754 -3.97221e-05 0.033201 -0.0463826 0.998372 0.97724 -0.205461 0.0527951 0.0333599 -0.0467828 0.998348 0.0435219 -0.0240733 0.998762 0.998735 -3.00068e-08 0.050291 0.998735 0 0.0502911 0.0318531 -0.0408727 0.998657 0.811771 -0.580628 0.0624363 0.965412 -0.257991 0.0376813 0.0303857 -0.0285713 0.99913 0.528776 -0.847076 0.0534649 0.707267 -0.70653 0.0242553 0.0282032 0.0319412 0.999092 0.183953 -0.982932 -0.00249042 8.16625e-08 -0.999848 0.0174524 0.259673 -0.965233 0.029924 0.00778832 -0.0467169 0.998878 -4.68791e-07 -0.999848 0.0174517 0.0333409 0 0.999444 -0.00743067 0 0.999972 -0.0221877 -0.0348831 0.999145 -0.0171548 -0.0407335 0.999023 0.0310212 0.046778 0.998424 0.00778832 0.0467169 0.998878 0.0378499 0.0405574 0.99846 0.0354201 0.0434149 0.998429 0.0335106 0.0464465 0.998359 0.0435219 0.0240733 0.998762 -0.0239683 0.0390939 0.998948 0.0282032 -0.0319412 0.999092 7.38344e-08 0.999848 0.0174521 -4.60056e-07 0.999848 0.0174532 0.184846 0.982411 0.0264559 1.0321e-08 0.999848 0.0174524 0.528776 0.847076 0.0534649 0.258042 0.966091 0.00915375 0.811771 0.580628 0.0624363 0.707267 0.70653 0.0242553 0.978214 0.204896 0.0334023 0.998735 3.22096e-08 0.0502911 0.964829 0.257465 0.0530778 -0.939692 3.79082e-08 -0.342021 -1.72637e-08 -0.999848 0.0174525 -0.939693 0 -0.34202 -0.939693 1.4858e-06 -0.34202 -0.0171604 0.0348233 0.999246 -0.939692 -4.6557e-08 -0.342022 -0.939692 4.78909e-08 -0.342022 -1.72637e-08 0.999848 0.0174525 -0.939693 0 -0.34202 -0.939693 -1.4858e-06 -0.34202 -0.939692 -4.0137e-08 -0.342021 2.02064e-08 -0.999848 0.0174525 -0.0891939 0 -0.996014 -0.0891939 -3.55204e-07 -0.996014 -0.0891939 0 -0.996014 -0.0891937 -4.11635e-07 -0.996014 -0.0891937 4.11635e-07 -0.996014 -0.0891939 3.61328e-07 -0.996014 -0.0891953 -2.95316e-07 -0.996014 -0.0891953 0 -0.996014 -0.0891953 -2.95274e-07 -0.996014 -0.964832 0.257453 -0.0530778 -0.998735 0 -0.0502911 -0.998735 4.99151e-08 -0.0502911 -0.998735 -4.65367e-08 -0.050291 -0.0891942 -1.26835e-06 -0.996014 -0.707719 0.704893 -0.0475337 -0.964519 0.258539 -0.0534824 -0.0891951 -6.74014e-07 -0.996014 -0.259626 0.965256 -0.0295921 -0.0891949 -5.68179e-07 -0.996014 -0.706294 0.706275 -0.0482167 -0.0891953 0 -0.996014 6.73165e-09 0.999848 -0.0174523 -0.0891953 2.95316e-07 -0.996014 -0.0891953 2.82712e-07 -0.996014 -0.258794 0.96547 -0.0298838 4.64343e-09 0.999848 -0.0174522 -3.95015e-07 0.999848 -0.0174516 5.2631e-08 0.999848 -0.0174525 -0.0891949 5.17871e-07 -0.996014 -0.0891942 1.26225e-06 -0.996014 -0.0891951 6.7705e-07 -0.996014 1.62414e-08 -0.999848 -0.0174522 4.64343e-09 -0.999848 -0.0174522 -0.259651 -0.965239 -0.0299229 -4.05231e-07 -0.999848 -0.0174528 5.7346e-08 -0.999848 -0.0174523 -0.707719 -0.704893 -0.0475337 -0.706294 -0.706275 -0.0482167 -0.258787 -0.965482 -0.0295528 -0.964814 -0.257438 -0.0534797 -0.964544 -0.258531 -0.0530821 0.0167291 0.0345233 -0.999264 0.0220794 -0.0345866 -0.999158 0.0240254 0.0391952 -0.998943 0.00746892 0 -0.999972 0.0167233 -0.0408223 -0.999026 -0.00809249 0.0463335 -0.998893 -0.0316865 0.0463117 -0.998424 -0.0282251 -0.00769526 -0.999572 -0.0330379 0 -0.999454 -0.0360528 0.0418782 -0.998472 -0.0332859 0.0459094 -0.998391 -0.043213 0.0240933 -0.998775 -0.0080925 -0.0463335 -0.998893 -0.0331035 -0.0463096 -0.998379 -0.043213 -0.0240933 -0.998775 -0.0329088 -0.0458097 -0.998408 -0.0310906 -0.0369203 -0.998834 -0.0282251 0.00769526 -0.999572 0 0 -1 -0.965927 0.258815 0 0 0 -1 0 0 -1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0 -1 -0.707107 0.707107 0.000269089 -0.966079 0.258248 0.000363159 -0.707859 0.706354 -0.00035363 0 0 -1 -0.258815 0.965927 -0.000261286 0 0 -1 0 0 -1 0 1 0 0 0 -1 -0.259245 0.965812 0 0 0 -1 -0.939693 0 -0.34202 -0.939693 0 -0.34202 0 1 0 0 -1 0 0.258816 -0.965927 0 0 -1 0 0.707107 -0.707107 -0.000260408 0.25924 -0.965813 0.000252162 0.965927 -0.258816 -0.000355932 0.70782 -0.706393 0.000347315 0 0 -1 1 0 0 0.966074 -0.258266 0 0 0 -1 0.965927 0.258816 0 0 0 -1 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 -1 0.707107 0.707107 -0.000260408 0 0 -1 0.966072 0.258274 -0.000356669 0.70782 0.706393 0.000347319 0 0 -1 0.258816 0.965927 0.000252583 0 0 -1 0 0 -1 0 1 0 0.259219 0.965818 0 0 0 -1 -0.939693 0 -0.34202 0 1 0 -0.939693 0 -0.34202 0 -1 0 -0.258815 -0.965927 0 0 -1 0 -0.707107 -0.707107 0.000269089 -0.259268 -0.965806 -0.000260822 -0.965927 -0.258815 0.000362374 -0.707859 -0.706354 -0.00035363 -0.966081 -0.25824 0 0.0891953 0 0.996014 0.0772156 -0.0446435 0.996014 0.091737 0 0.995783 0.0891953 0 0.996014 0 -0.023936 0.999714 0 0 1 0 0 1 0.0565489 -0.0327408 0.997863 0.0122447 -0.021347 0.999697 0.0335681 -0.058219 0.997739 1 0 0 0 0.939693 0.34202 0 0.793354 0.608761 0 0.793354 0.608761 0 0.793354 0.608761 1 0 0 1 0 0 0 0.939693 0.34202 0 0.300705 0.953717 0 0.793354 0.608761 0 0.300705 0.953717 0 0 1 0 0.0246201 0.999697 0.0119019 0.0207542 0.999714 0 -0.300705 0.953717 0 0 1 0 -0.793354 0.608761 0 -0.300705 0.953717 0 -0.939693 0.34202 0 -0.793354 0.608761 0 -0.793354 0.608761 0 -0.939693 0.34202 0 -0.300705 0.953717 0 -0.793354 0.608761 0 0 1 0 -0.300705 0.953717 0 0.300705 0.953717 0 0 1 0 0.300705 0.953717 -1 0 0 -1 0 0 -1 0 0 0.0891976 0 0.996014 0.0891953 0 0.996014 0.0891953 0 0.996014 0.0565489 0.0327408 0.997863 0.0794139 0.0459096 0.995784 0.0335682 0.058219 0.997739 0 0 -1 -0.965927 -0.258816 0 0 0 -1 0 0 -1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0 -1 -0.707107 -0.707107 -0.000163984 0 0 -1 -0.966071 -0.258275 -0.00021252 -0.707775 -0.706438 0.000206564 0 0 -1 -0.258816 -0.965927 0.000158823 0 0 -1 0 0 -1 0 -1 0 0 -1 0 -0.259206 -0.965822 0 0 0 -1 0.939693 0 0.34202 0.939693 0 0.34202 0 1 0 0 1 0 0.258815 0.965927 0 0.707107 0.707107 0.000170822 0.25922 0.965818 -0.000165423 0.965927 0.258815 0.000217134 0.707816 0.706397 -0.000211716 0 0 -1 1 0 0 0.966078 0.258251 0 0 0 -1 0.965927 -0.258815 0 0 0 -1 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 -1 0.707107 -0.707107 0.000170822 0.966079 -0.258246 0.000217606 0.707816 -0.706397 -0.000211709 0 0 -1 0.258815 -0.965927 -0.000165686 0 0 -1 0 0 -1 0 -1 0 0 0 -1 0 -1 0 0.259234 -0.965815 0 0 0 -1 0.939693 0 0.34202 0.939693 0 0.34202 0 1 0 0 1 0 -0.258816 0.965927 0 -0.707107 0.707107 -0.000163984 -0.259192 0.965826 0.000158588 -0.965927 0.258816 -0.000212082 -0.707775 0.706438 0.000206559 -0.96607 0.25828 0 -1 0 0 0 -0.996195 0.0871569 0 0 1 0 0 1 -1 0 0 0 -0.896846 0.442343 0 -0.996195 0.0871569 -1 0 0 0 -0.362495 0.931986 0 -0.896846 0.442343 0 0 1 0 -0.362495 0.931986 0 0.362495 0.931986 0 0 1 0 0.896846 0.442343 0 0.362495 0.931986 0 0.996195 0.0871569 0 0.896846 0.442343 0 0 1 0 0.996195 0.0871569 0 0 1 0 -0.0239373 0.999713 0.0119004 0.0207557 0.999714 0 0.0246212 0.999697 0.0891975 0 0.996014 0.0891953 0 0.996014 0.0891953 0 0.996014 0.0565497 0.032742 0.997863 0.0794157 0.0459046 0.995784 0.0335748 0.058215 0.997739 1 0 0 1 0 0 1 0 0 0.0122433 -0.0213483 0.999697 0.0891953 0 0.996014 0.0772174 -0.0446392 0.996014 0.091737 0 0.995783 0.0891953 0 0.996014 0.0565497 -0.032742 0.997863 0.0335748 -0.058215 0.997739 -0.0348546 0.998861 0.0325812 -0.0348486 0.998689 0.0375083 -0.588583 0.808007 0.0263558 -0.034307 0.998684 0.0381107 -0.623079 0.781561 0.030589 -0.623354 0.781906 0.00729422 -0.0355894 0.99895 0.028846 1 0 0 -0.0433141 0.9987 0.0268836 -0.0422121 0.998737 0.0272512 -0.0384422 0.998837 0.0291068 0.999983 -0.0055131 0.00165799 0.999999 -5.31721e-05 0.00140841 0.997084 0.0232442 0.0726847 1 0 0 -0.034875 0.998688 0.0375064 1 0 0 0.0139656 0.998737 0.0482659 -0.012111 0.999087 0.0409686 -0.027406 0.999013 0.0349631 -0.0340783 0.998954 0.0304747 -0.0350789 0.998996 0.0278798 1 0 0 0 0 1 1 0 0 -0.395536 0.91738 0.0443342 0 0 1 0 0 1 -0.468112 0.882927 0.0362054 -0.618699 0.78556 -0.0103217 -0.466976 0.882155 0.0611271 -0.446524 0.894224 0.0312957 -0.456247 0.888873 0.0417632 -0.444941 0.895143 0.0273078 -0.445905 0.894512 0.0318814 -0.459461 0.887852 0.024778 -0.447161 0.894075 0.0260247 -0.449782 0.892966 0.0175264 -0.483622 0.87496 0.0235527 -0.463743 0.885946 0.00642148 -0.524796 0.850911 0.0232177 -0.494736 0.869038 -0.00312075 -0.589524 0.807408 0.0235285 -0.541343 0.840692 -0.0136005 -0.0314639 0.984413 0.173034 -0.0424351 0.909668 0.413164 -0.985953 0.127764 -0.107582 -0.985958 0.0397437 -0.162193 -0.941149 0.0312242 -0.336548 -0.0312136 0.984393 0.173194 -0.0411744 0.910292 0.411914 -0.0104868 0.980081 0.19832 0.994145 -0.0400285 0.10037 0.96736 0.0799393 0.240468 0.980778 -0.0984484 0.16847 -0.104445 0.827148 0.552193 -0.0371539 0.99384 0.104411 0.998814 -0.01083 0.0474729 0.99444 0.012706 0.104532 -0.0321078 0.997428 0.0640819 0.999743 0.00797779 0.0212348 -0.0308033 0.995192 0.092974 0.998778 -0.0141237 0.0473682 -0.0343186 0.998322 0.0466322 0.999866 -0.0144486 0.00768518 -0.0331204 0.998292 0.0481245 -0.032803 0.997338 0.0651185 0.998967 0.0403975 0.0207999 0.999964 0.00597805 0.00610183 -0.886478 0.462185 0.0232557 -0.779129 0.625642 -0.039125 -0.776297 0.629688 -0.0292634 -0.698068 0.716021 0.00377779 -0.88609 0.462849 0.0248087 -0.966612 0.256231 -0.00259883 -0.966465 0.250633 -0.05594 -0.990252 0.114391 -0.0794704 0.0328182 -0.982421 -0.183773 0.0745104 -0.887047 -0.455626 0.0315559 -0.982002 -0.186214 0.0406275 -0.918687 -0.392892 0.0322592 -0.994006 -0.10446 0.0293108 -0.993663 -0.10851 0.0367391 -0.99749 -0.0605296 0.0308985 -0.997098 -0.069572 0.0348464 -0.998465 -0.0430468 0.0320242 -0.99822 -0.0503123 0.0330347 -0.998774 -0.0368728 0.996763 0.0364918 0.0716357 0.0348463 -0.998646 -0.0386176 0.0348518 -0.998786 -0.0348261 0.0387308 -0.998833 -0.0288402 0.0348497 -0.99886 -0.0326155 0.914017 -0.00631438 0.405626 -0.108227 0.346972 0.93161 0.913354 -0.00546455 0.40713 0.594618 0.339558 0.728787 -0.055207 0.731916 0.679155 -0.0523751 0.460458 0.886135 -0.0325834 0.0544357 0.997986 -0.0509881 0.0597766 0.996909 -0.0304013 0.986583 0.160405 -0.0512453 0.172286 0.983713 -0.0470287 0.0661873 0.996698 -0.0302436 0.0527324 0.998151 0.085391 -0.583309 -0.80775 0.0110107 0.0255331 0.999613 -0.91391 0.000833223 -0.405917 0.0441835 -0.503534 -0.862845 0.0583075 -0.292365 -0.954528 -0.857049 -0.00102582 -0.515235 0.0377027 -0.756916 -0.652424 0.0320586 -0.998782 -0.037518 0.0348572 -0.998179 -0.0492334 -7.10564e-05 -0.999549 -0.0300281 0.0117359 -0.999366 -0.033614 0.0225259 -0.999018 -0.0381507 0.0305672 -0.99859 -0.0434122 0.0399781 -0.998774 -0.0291936 0.0353268 -0.999001 -0.0273657 0.0344778 -0.999045 -0.0268432 0.0350857 -0.999002 -0.0276404 -0.913317 0.37774 -0.152202 -0.0644073 0.0410988 0.997077 -0.98588 0.0985871 -0.135354 -0.0686166 0.0328721 0.997101 -0.0933702 0.039324 0.994855 -0.92461 0.270386 -0.268304 -0.934027 0.211853 -0.287597 -0.0602825 0.0444198 0.997193 -0.952302 0.270557 -0.141135 -0.951096 0.27739 -0.135912 -0.935895 0.162528 -0.312547 -0.778938 -0.148446 -0.609278 -0.926305 0.369983 -0.0712097 -0.954001 0.277137 -0.114356 -0.95618 0.265607 -0.12318 -0.906706 0.418392 -0.0532174 -0.92342 0.367007 -0.112257 -0.842721 0.53673 -0.0417499 -0.865349 0.490438 -0.103155 -0.738347 0.673856 -0.0275828 -0.787618 0.613588 -0.0562811 -0.794294 0.60204 -0.0815161 -0.738224 0.673744 -0.0330865 -0.697953 0.715902 -0.0186075 -0.997462 0.0383327 -0.059999 -0.998 0.0440925 -0.0453045 -0.996013 0.0891787 0.00221368 -0.992678 0.0888801 -0.0818022 -0.883824 -0.465937 -0.0419162 -0.993774 0.0750893 -0.0823078 -0.827897 -0.560041 -0.0306733 -0.995186 0.0176128 -0.0964063 -0.991284 0.0694113 -0.111975 -0.992928 0.0504113 -0.107484 -0.989178 0.0818652 -0.12176 -0.0577841 0.0476264 0.997192 -0.878304 0.145201 -0.455519 -0.0592443 0.0513732 0.996921 -0.168053 -0.654183 -0.737429 -0.645419 0.172824 -0.74402 -0.056901 0.0539451 0.996921 -0.844298 0.150973 -0.514167 -0.058993 0.0509124 0.996959 -0.0546993 0.178283 0.982458 -0.0576413 0.0577482 0.996666 0 0 1 0 0 1 -0.997872 0.0333609 0.056023 0 0 1 0 0 1 -0.998835 0.0248373 0.0413771 -0.998642 0.0249755 0.0457213 -0.999533 0.0122165 0.0280061 -0.999314 0.0148572 0.0339147 -0.999785 0.00853288 0.0188951 -0.999654 0.00886856 0.0247674 -0.999927 0.009029 0.00797131 -0.999843 0.00666422 0.0164041 -0.999887 0.0146977 -0.00330754 -0.999929 0.00898226 0.00788502 -0.999812 0.0123113 -0.0149979 -0.999232 0.0266266 -0.0287607 -0.999664 0.0258771 -0.00160004 -0.999089 0.0405516 -0.0132576 -0.999463 0.0141545 0.0295625 -0.999434 -0.0160598 0.0295617 -0.999342 0.0160584 0.0325329 0 0 1 0 0 1 0 0 1 -0.999611 0.0122585 0.0250367 -0.999525 -0.017986 0.0250345 -0.999665 -0.0250708 -0.00637899 -0.999667 0.0118231 0.0229404 -0.999667 -0.0118231 0.0229404 -0.999327 -0.0140926 0.0338688 -0.999736 0.00868172 0.0212624 -0.999704 -0.0118351 0.0212617 -0.999618 0.0118083 0.02499 -0.99978 0.00771942 0.0195009 -0.99978 -0.00771942 0.0195009 -0.999631 -0.0107119 0.0249788 -0.999831 0.00555598 0.0175134 -0.999819 -0.00746238 0.0175132 -0.999781 0.00771076 0.0194339 -0.999877 0.00421972 0.0150892 -0.999877 -0.00421972 0.0150892 -0.999789 -0.0066102 0.0194258 -0.99993 0.00203518 0.01168 -0.99993 -0.00203518 0.01168 -0.999887 0.00437602 0.0144081 -0.999887 -0.00437601 0.0144081 -0.99998 0.000369832 0.00624149 -0.99998 -0.000369832 0.00624149 -0.999956 0.0027252 0.00892865 -0.999956 -0.0027252 0.00892865 -0.999999 0.000500967 -0.00145704 -0.999999 -0.000500967 -0.00145704 -0.999994 0.00257678 0.00212173 -0.999994 -0.00257678 0.00212173 -0.999941 0.00176131 -0.010691 -0.999941 -0.00176131 -0.010691 -0.999966 0.00353717 -0.00740534 -0.999966 -0.00353717 -0.00740534 -0.999709 0.00192769 -0.0240499 -0.9997 -0.00466272 -0.0240497 -0.999771 0.00640348 -0.0204159 -0.999718 0.00450532 -0.023325 -0.997588 0.0019236 -0.06938 -0.997577 -0.00513327 -0.0693792 -0.999775 -0.00192782 -0.021121 -0.997487 -0.0019234 -0.0708298 -0.997497 0.0063889 -0.0704238 -0.997496 0.0049382 -0.0705559 -0.999649 0.0143397 -0.022288 -0.997406 0.0143076 -0.070544 -0.997398 0.0104031 -0.0713445 -0.999933 0.00887419 -0.00740059 -0.999623 0.0236116 -0.0140379 -0.999507 0.00924058 -0.0299977 -0.999993 0.00314562 0.00212266 -0.999907 0.00275112 -0.0133334 -0.99996 -0.000141652 0.00891917 -0.999998 -0.00119378 -0.001694 -0.999897 -0.000322687 0.0143813 -0.999968 -0.00149293 0.00781126 -0.999808 0.00286758 0.0193983 -0.999864 0.00214852 0.0163502 -0.999643 0.00947072 0.0249661 -0.999649 0.00942409 0.0247755 -0.999103 0.0250567 0.034142 -0.999237 0.0192242 0.0339972 -0.999237 0.019224 0.0339959 0 0 1 -0.998567 0.0283631 0.0453752 0 0 1 0 0 1 -0.997089 0.0235517 -0.0725172 -0.998892 0.03713 -0.0289273 -0.996758 0.0370506 -0.0714206 -0.997093 0.0234762 -0.0724922 -0.998447 0.03128 0.0460957 0 0 1 0 0 1 0 0 1 -0.994941 -2.998e-05 -0.100465 -0.994715 -0.021276 -0.100442 -0.994207 0.00119735 -0.107479 -0.994207 0.00357586 -0.107422 -0.994303 -7.24356e-05 -0.106589 -0.994209 0.00259456 -0.107434 -0.993755 0.0162443 -0.110392 -0.993955 0.00959812 -0.109367 -0.993758 0.0195223 -0.10984 -0.992706 0.038415 -0.114275 -0.9943 -0.00259874 -0.106588 -0.0617223 0.00479382 0.998082 -0.0617173 -0.0136023 0.998001 -0.29189 -0.00531714 0.956437 -0.138207 0.0140999 0.990303 -0.276721 0.024073 0.960649 -0.0579001 0.0261445 0.99798 -0.10168 0.0138992 0.99472 1.4153e-09 0.999848 0.0174525 -0.258699 0.965611 0.0258888 5.22486e-08 0.999848 0.0174525 -0.0666234 0.675529 0.734317 -0.265751 0.96356 0.0304769 -0.263741 0.660098 0.703357 -0.0526162 0.687239 0.724524 -0.0891953 0 -0.996014 -0.0891953 5.0852e-07 -0.996014 -0.0891954 3.81636e-07 -0.996014 -9.63174e-07 0.999848 0.0174521 0.939693 0 0.34202 3.33445e-07 0.999848 0.0174527 8.53472e-07 0.999848 0.017453 -0.0509558 0.622492 0.780965 0.939693 7.65275e-07 0.34202 -0.0581561 0.635721 0.769725 -0.0620758 0.591474 0.803931 -0.0288235 0.638955 0.768704 -0.0595089 0.702172 0.709517 0.00141102 0.720641 0.693307 -0.11058 0.617607 0.778674 -0.0523077 0.677759 0.733422 -0.999391 -1.63201e-08 0.0348993 -0.924353 -0.00588872 0.381493 -0.999391 1.41489e-08 0.0348992 -0.893964 0.00702952 0.448083 -0.924137 0.0224058 0.381404 -0.999391 -2.20666e-07 0.0348995 -0.891971 -0.0187125 0.451705 -0.88741 -0.0160857 0.4607 -0.892879 -0.0134918 0.450095 -0.965257 -0.258491 0.0382195 -0.984209 -0.173958 -0.032734 -0.842015 -0.0513243 0.537008 -0.836997 -0.115269 0.534929 -0.999391 0 0.0348995 -0.0891959 0 -0.996014 -0.999391 1.68867e-07 0.0348983 -0.0891953 7.30113e-08 -0.996014 -0.0891959 -1.09161e-07 -0.996014 -0.984739 0.169982 0.0373549 -0.0891959 0 -0.996014 -0.0891958 7.16415e-08 -0.996014 -0.966206 0.257618 -0.00890734 -0.843138 0.0225934 0.537222 -0.769496 0.097886 0.631105 -0.818889 0.230986 0.52542 -0.793288 0.00975286 0.608768 -0.882584 0.0656155 0.465553 -0.0891951 2.14541e-07 -0.996014 -0.708478 -0.705692 0.00759864 -0.0891953 -1.23161e-08 -0.996014 -0.885658 -0.461407 0.0520875 -0.0891953 -3.69116e-07 -0.996014 -0.258291 -0.965589 0.0303782 -0.0891952 2.89126e-07 -0.996014 -0.675251 -0.736855 0.0328912 -0.0891953 0 -0.996014 -1.93516e-09 -0.999848 0.0174524 -0.0891953 -3.69142e-07 -0.996014 -5.38309e-08 -0.999848 0.0174525 -0.265295 -0.963814 0.0260878 0.939693 0 0.34202 4.1749e-08 0.999848 -0.0174524 0.939693 -7.65275e-07 0.34202 0.939693 -6.02963e-06 0.34202 -6.90194e-07 0.999848 -0.0174527 1.18202e-06 0.999848 -0.0174518 -3.08861e-06 0.999848 -0.0174544 4.90541e-07 0.999848 -0.017452 9.8922e-05 0.999849 -0.0173794 -5.71242e-05 0.999847 -0.0174948 0.258649 0.965625 -0.0258873 0.706971 0.706537 -0.0315933 0.267813 0.962947 -0.0317544 0.965696 0.258406 -0.0256327 0.726496 0.68533 -0.0502674 0.999391 0 -0.0348995 0.96976 0.241073 -0.0380727 -0.0891953 -4.29751e-08 -0.996014 0.965233 -0.258583 -0.0382203 0.997081 0.0233122 0.0727069 0.999391 -5.45781e-08 -0.0348997 0.999391 4.87796e-08 -0.0348993 0.999391 7.86901e-08 -0.0348995 0.99959 0.0160661 -0.0237138 0.999391 -1.78443e-05 -0.0348998 0.999764 0.00206289 -0.0216403 0.999926 -0.000505807 -0.0121521 0.999394 1.24191e-05 -0.0348121 0.999391 -5.87084e-08 -0.0348999 -0.0891953 1.84741e-08 -0.996014 0.706971 -0.706537 -0.0315933 0.969885 -0.242311 -0.0246574 0.726496 -0.68533 -0.0502674 -0.0891952 -2.86051e-07 -0.996014 0.258122 -0.965593 -0.0316722 -0.089195 -1.90703e-07 -0.996014 3.53281e-08 -0.999848 -0.0174525 -1.27329e-07 -0.999848 -0.0174524 0.267193 -0.963288 -0.0261449 0.939693 6.10794e-06 0.34202 -0.706997 0.706459 0.0327446 -0.671556 0.740953 -8.87232e-05 -0.885658 0.461407 0.0520875 -0.555947 0.438323 0.706255 -0.259098 0.597505 0.758851 -0.251184 0.778212 0.57558 -0.348477 0.430474 0.83262 -0.590577 0.157644 0.791434 -0.670946 0.400939 0.623762 -0.887443 0.0135848 0.460717 -0.778976 0.179699 0.600754 -0.0910148 0.61907 0.780044 -0.040157 0.0457085 0.998147 -0.0397986 0.0321245 0.998691 -0.0406851 0.0492688 0.997957 -0.0307047 0.643252 0.765039 -0.0404246 0.0199835 0.998983 -0.0384402 -0.105183 0.99371 0.939692 -2.59764e-07 0.342022 -0.0428493 0.0346423 0.998481 0.939692 1.09946e-07 0.342022 0.939693 -6.21832e-06 0.34202 0.939692 5.16756e-06 0.342021 -0.0169424 0.912146 0.409515 -0.0288235 -0.638955 0.768704 -0.0394794 0.00795302 0.999189 -0.0398163 -0.0346089 0.998607 0.939692 -5.71824e-08 0.342021 -0.0620758 -0.591474 0.803931 0.939692 -9.56009e-08 0.342022 0.939692 -5.16756e-06 0.342021 0.939693 1.29035e-06 0.34202 -0.0308586 -0.638748 0.768797 -0.0523353 -0.636773 0.769273 -0.0337015 -0.642375 0.765649 -0.0400442 -0.0345921 0.998599 -0.0946032 -0.670753 0.735623 -0.061639 -0.676322 0.734023 -0.090158 -0.6917 0.716535 -0.0451067 -0.062124 0.997049 -0.204212 -0.606592 0.768338 0.0322756 -0.0414876 0.998618 -0.0220892 -0.622679 0.782165 -0.0502016 -0.0610508 0.996871 -0.348477 -0.430474 0.83262 -0.272962 -0.725483 0.631796 -0.231824 -0.666284 0.708748 -0.0576413 -0.0577482 0.996666 -0.573148 -0.347667 0.742044 -0.0527052 -0.0592534 0.996851 -0.0492847 -0.0625357 0.996825 -0.555947 -0.438323 0.706255 -0.059071 -0.0509279 0.996954 -0.751976 -0.175644 0.63536 -0.0587538 -0.0512648 0.996955 -0.0568972 -0.0539255 0.996923 -0.726754 -0.261129 0.635327 -0.0775495 -0.0384812 0.996246 -0.791161 -0.0653519 0.608106 -0.11753 -0.0378142 0.992349 -0.0644126 -0.0410985 0.997077 -0.0603166 -0.0443916 0.997192 -0.0577719 -0.0475878 0.997195 -0.784126 -0.142361 0.604053 -0.13944 -0.0141114 0.99013 -0.0783292 -0.0204414 0.996718 -0.0579001 -0.0261445 0.99798 0.0837566 -0.0507187 0.995195 0.0770732 -0.0494822 0.995797 -0.0432837 -0.0261033 0.998722 0.939692 4.27994e-08 0.342021 -0.994175 -0.0096262 -0.107345 -0.993758 -0.0195223 -0.10984 -0.99403 -0.00326516 -0.109059 -0.992706 -0.038415 -0.114275 -0.993755 -0.016245 -0.110392 -0.98603 -0.0986316 -0.134229 -0.991426 -0.0670597 -0.112154 -0.91342 -0.377877 -0.151237 0.131838 0.0611061 -0.989386 -0.880192 -0.157713 -0.447647 -0.930348 -0.237622 -0.279265 -0.940342 -0.0300052 -0.338906 -0.840463 -0.135077 -0.524763 -0.686331 0.300553 -0.662283 -0.848469 -0.133205 -0.512208 -0.71457 -0.196258 -0.671471 -0.0560055 -0.338947 0.939137 -0.14896 -0.239869 0.959309 -0.0528935 -0.340324 0.938819 0.913994 0.00631168 0.405679 0.913329 0.00546002 0.407187 -0.913994 -0.000836682 -0.405728 -0.857048 0.00102626 -0.515236 0.540529 -0.375519 0.75287 0.089987 0.587254 -0.804385 0.0441389 0.494101 -0.868283 0.0584923 0.292391 -0.954508 0.464313 -0.884588 -0.0437855 0.397242 -0.917514 -0.0191431 0.633333 -0.773528 -0.023338 0.773585 -0.633411 -0.0188746 0.633784 -0.773041 0.026943 0.594109 -0.80408 -0.022145 0.700639 -0.71247 -0.0386159 0.737686 -0.67338 -0.0487752 0.608763 -0.792954 0.025116 0.528317 -0.848751 -0.0224138 0.545342 -0.838121 0.0124833 0.485456 -0.873961 -0.0229057 0.499469 -0.866328 0.00266012 0.459161 -0.888023 -0.0242343 0.468292 -0.883552 -0.00617961 0.444306 -0.895477 -0.0266995 0.447506 -0.894127 -0.0165724 0.442375 -0.896329 -0.0299909 0.441519 -0.896904 -0.0249916 0.441555 -0.896714 -0.0305596 0.444217 -0.895273 -0.0340316 0.460607 -0.886772 -0.0384237 0.458466 -0.887805 -0.0401417 0.0317422 -0.982033 -0.186022 0.986894 -0.063772 0.148232 0.041714 -0.918238 -0.393826 0.948272 -0.0597466 0.311786 0.984235 -0.0214534 0.175559 0.994228 -0.0972833 0.0452299 0.970885 -0.239493 0.0049608 0.97545 -0.203928 0.0831295 0.897716 -0.440426 -0.0114769 0.925767 -0.373539 0.0585197 0.810117 -0.584655 0.0434588 0.885338 -0.191189 0.42382 0.69203 0.289101 0.661449 0.94281 -0.0512176 0.329371 -0.186269 0.0759834 0.979556 0.0579304 -0.0496321 -0.997086 0.0196262 -0.043624 -0.998855 0.724755 -0.177655 0.665709 0.0571481 -0.0519954 -0.997011 0.854521 -0.162232 0.493431 0.0580745 -0.0500473 -0.997057 0.0580451 -0.0455951 -0.997272 0.914591 -0.31323 0.255755 0.911514 -0.262943 0.316233 0.0608661 -0.043291 -0.997207 0.946758 -0.284237 0.151193 0.945777 -0.292399 0.141455 0.95087 -0.299267 0.0792811 0.955213 -0.266371 0.128894 0.914169 -0.401216 0.0576249 0.924313 -0.361694 0.121753 0.925025 -0.362643 0.113223 0.798028 -0.601107 0.042682 0.86578 -0.488909 0.106744 0.865789 -0.492683 0.0875998 0.701416 -0.712196 0.0281562 0.79895 -0.600435 0.0340028 0.737883 -0.672426 0.0580708 0.0569848 -0.0553883 -0.996837 0.0359118 -0.189711 -0.981183 0.0561389 -0.0535091 -0.996988 0.0533841 -0.155578 -0.98638 0.05297 -0.128379 -0.99031 0.903853 -0.398697 0.155213 0.0643806 -0.0407939 -0.997091 0.1555 0.985119 -0.0732197 0.990776 -0.0650333 0.118883 0.988972 -0.0993394 0.109843 0.0593771 -0.0318985 -0.997726 0.0712355 -0.0401897 -0.99665 0.496966 0.867379 -0.026045 0.603813 0.797094 -0.00718115 0.798996 0.600706 0.0275319 0.995931 -0.0197878 0.0879214 0.994141 -0.0737981 0.0789796 0.995252 -0.0604761 0.0762575 0.994442 -0.0850724 0.0620286 0.995347 -0.0851574 0.0450937 0.605201 -0.7936 -0.0626926 0.998193 -0.0230638 -0.0554831 0.998421 -0.0332462 -0.0452696 0.998818 -0.039015 0.0289745 0.998856 -0.0391166 0.02751 0.999016 -0.0365486 0.0251326 0.999648 -0.0215861 0.0154269 0.999675 -0.0232514 0.0104705 0.999953 -0.00881416 0.00402701 0.99991 -0.0132879 -0.00198251 0.999932 -0.00914594 -0.00717611 0.999811 -0.00742615 -0.0179805 0.999913 -0.00504334 -0.0122055 0.999626 -0.00467432 -0.0269573 0.99908 -0.0143335 -0.040424 0.999718 -0.00957533 -0.0217462 0.999194 -0.0242765 -0.0319664 0.999756 -0.00381378 0.0217528 0.999762 0.00191691 0.0217529 0.999798 -0.00191698 0.0200014 0.997469 -0.00191257 0.0710837 0.996651 -0.0714568 0.0397638 0.999203 0.00191586 0.0398656 0.99998 -0.00160083 0.00607063 0.99998 0.00160083 0.00607063 0.999799 0.00636206 0.0190075 0.999752 0.0038411 0.0219464 0.999989 -0.000806299 -0.0045543 0.99999 0.000536852 -0.0045543 0.999989 -0.000491162 -0.00476223 0.999984 -0.00264401 0.00503531 0.999984 0.00264401 0.00503531 0.999927 -0.00263913 -0.0118056 0.999927 0.00263913 -0.0118056 0.999927 -0.00268138 -0.0117644 0.999988 0.000860573 -0.004763 0.999927 0.00268138 -0.0117644 0.999851 -0.00635348 -0.0160489 0.999861 0.00448429 -0.0160491 0.999831 -0.00516656 -0.0176181 0.999798 -0.00680804 -0.018892 0.999798 0.00680804 -0.018892 0.999823 0.00660597 -0.0176281 0.999713 -0.0110504 -0.0212581 0.999737 0.00861619 -0.0212586 0.999665 -0.0104504 -0.0236592 0.999658 -0.0113855 -0.0235578 0.999658 0.0113855 -0.0235578 0.999655 0.0114016 -0.0236685 0.999499 -0.0176558 -0.0262759 0.999576 0.0125081 -0.0262779 0.999336 -0.0153128 -0.0330743 0.999381 -0.0169701 -0.0308055 0.999381 0.0169701 -0.0308055 0.999314 0.0166224 -0.0331011 0 0 1 0.999088 -0.0267233 -0.0333056 0.99959 -0.0160661 -0.0237138 0.999044 -0.0298225 -0.0319683 0.998847 -0.0199084 -0.0436931 0.999827 -0.0058823 -0.0176231 0.999453 -0.00939823 -0.0316977 0.999931 7.60955e-05 -0.0117516 0.999764 -0.00206289 -0.0216403 0.999988 0.00149957 -0.00475806 0.999926 0.000505806 -0.0121521 0.999986 -0.00147224 0.00503632 0.999997 -0.00178338 -0.0019335 0.999744 -0.00636195 0.0217182 0.999735 -0.00808351 0.0215623 0.999913 -0.00793541 0.0104967 0.997479 -0.00635187 0.0706817 0.999545 -0.0142085 0.0266053 0.99739 -0.0141893 0.0707953 0.997381 -0.010332 0.0715814 0.999334 -0.0233469 0.0280324 0.997083 -0.0233122 0.0726793 0.996763 -0.0364918 0.0716357 0.997084 -0.0232427 0.0726924 0.994378 -0.00294356 0.10585 0.994379 -0.00246702 0.10585 0.306383 -0.00566925 -0.951891 0.0612416 -0.0156053 -0.998001 0.0612483 0.00504095 -0.99811 0.994198 0.00293481 0.107526 0.994253 -0.00225408 0.107034 0.994255 0.000599994 0.107034 0.994171 -0.00134405 0.107806 0.99417 0.00209754 0.107806 0.994179 -0.00146951 0.107734 0.994178 0.0020003 0.107734 0.994304 -0.00418058 0.106498 0.994312 0.000980974 0.106499 0.994535 -0.0111575 0.103804 0.994597 -6.29777e-05 0.10381 0.994714 -0.0205258 0.100611 0.994924 -6.26319e-05 0.100632 0.994188 0.0013632 0.107652 0.995217 -0.0004819 0.0976908 0.99245 0.074519 0.0974192 0.997478 0.00545987 0.0707626 0.994198 -0.00349172 0.10751 0.995788 -0.00274428 0.0916446 0.996675 -0.0109009 0.0807524 0.997402 -0.0261821 0.0671128 0.997475 -0.0476134 0.0526864 0.993708 -0.0159051 0.110871 0.993715 -0.0212868 0.109896 0.993913 -0.0106837 0.109644 0.992569 -0.0407261 0.114662 0.0645049 -0.026684 -0.997561 0.0933958 -0.0213 -0.995401 0.15776 -0.0149284 -0.987365 0.993969 0.0604849 0.0914771 0.995926 0.0402498 0.0806918 0.997518 0.0212671 0.0671206 0.998577 0.00790047 0.0527446 0.000117372 -0.999818 -0.0190843 0.102263 -0.33187 -0.937766 0.268866 -0.652844 -0.70817 -0.000209977 -0.999894 -0.0145275 0.101073 -0.329483 -0.938736 -2.42347e-06 -0.999848 -0.017423 0.072747 -0.673403 -0.735688 0.262881 -0.644665 -0.717844 1.00208e-05 -0.999845 -0.0176137 0.0596836 -0.672931 -0.737293 0.0554455 -0.628916 -0.775494 0.0921733 -0.669596 -0.736984 -1.28518e-05 -0.999851 -0.0172372 0.0463793 -0.690819 -0.721539 0.0683839 -0.683288 -0.726939 0.0439598 -0.611553 -0.789981 0.0397808 -0.649728 -0.759125 0.0337925 -0.634979 -0.77179 0.0478085 -0.59232 -0.804283 0.0312463 -0.63541 -0.771542 0.803637 -0.150835 -0.575688 0.807079 -0.162691 -0.567587 0.998951 0.0365476 0.0275956 0.625534 -0.44884 -0.638161 0.702142 -0.257055 -0.664017 0.635898 -0.381237 -0.671038 0.541404 -0.43432 -0.719894 0.387076 -0.441478 -0.809487 0.90826 -0.0150929 -0.418135 0.90826 0.0150929 -0.418135 0.887913 -0.00750357 -0.45995 0.887913 0.00750357 -0.45995 0.0752641 0.0157268 -0.99704 0.487813 0.0422175 -0.871927 0.23207 0.0241235 -0.9724 0.125364 0.0145942 -0.992004 0.793622 -0.0702815 -0.604338 0.841074 -0.0554295 -0.538073 0.88876 -0.0205475 -0.457912 0.0207668 -0.998835 -0.0435558 0.819602 -0.0335731 -0.571949 0.999453 0.00939822 -0.0316977 0.0529719 -0.0548939 -0.997086 0.0516808 -0.256428 -0.965181 0.0522274 -0.0576167 -0.996972 0.050364 -0.0604433 -0.9969 0.245181 -0.604632 -0.75783 0.046178 -0.0626752 -0.996965 0.0402131 -0.0344731 -0.998596 -0.0351463 -0.0418648 -0.998505 0.054442 -0.644964 -0.762272 0.0408694 -0.0344216 -0.998571 0.0402478 -0.0344561 -0.998595 0.0381961 -0.0345027 -0.998674 -6.25536e-07 -0.999848 0.0174599 -0.0656709 -0.686477 0.72418 -6.57928e-06 -0.999846 0.0175401 -9.44175e-06 -0.999846 0.0175802 -0.0533334 -0.704186 0.70801 -0.0509558 -0.622492 0.780965 0.0428444 0.0345538 -0.998484 0.0429155 -0.0280979 -0.998684 0.0478085 0.59232 -0.804283 0.0312463 0.63541 -0.771542 0.0400609 0.0463876 -0.99812 0.0395578 0.027628 -0.998835 0.0407056 0.049499 -0.997944 0.0403097 0.0483424 -0.998017 0.0399083 0.0474251 -0.998077 0.0529485 0.0718597 -0.996008 0.0390486 -0.014636 -0.99913 0.021191 -0.788643 -0.614487 0.00085866 0.0274765 -0.999622 0.939692 4.08813e-06 0.342023 0.0439598 0.611553 -0.789981 0.0498253 0.632162 -0.773232 0.058619 0.68668 -0.724593 0.0218171 0.69875 -0.715033 0.0729082 0.671661 -0.737263 0.0783775 0.636833 -0.767008 0.0545192 0.673395 -0.73727 0.0784547 0.672909 -0.735553 0.0713887 0.673517 -0.735717 0.0816284 0.650062 -0.755484 0.676605 0.44357 -0.587751 0.268866 0.652844 -0.70817 0.249729 0.617401 -0.745957 0.999827 0.0058823 -0.0176231 0.753027 0.131874 -0.64464 0.833644 0.293996 -0.46755 0.999931 -7.60955e-05 -0.0117516 0.762878 0.0382354 -0.645411 0.842544 0.0244837 -0.538072 0.820528 0.214583 -0.5298 0.796286 0.0132852 -0.604774 0.890568 0.07064 -0.449331 0.609299 0.425983 -0.668799 0.387076 0.441478 -0.809487 0.616871 0.49138 -0.614831 0.635898 0.381237 -0.671038 0.784124 0.159996 -0.599625 0.0632886 0.0397234 -0.997204 0.0578502 0.050009 -0.997072 0.0586068 0.0515754 -0.996948 0.0571844 0.0475225 -0.997232 0.089013 0.0519404 -0.994675 0.0855171 0.0501778 -0.995072 0.0593771 0.0318985 -0.997726 0.0893556 0.626296 -0.774448 0.0561389 0.0535091 -0.996988 0.0523684 0.188377 -0.9807 0.0565618 0.0544486 -0.996913 0.0333 0.651782 -0.757675 0.0500096 -0.13338 -0.989802 -0.822298 -0.00276706 -0.569051 -0.822293 0.00276839 -0.569058 0.0307101 0.985253 -0.168326 0.050907 0.19139 -0.980193 0.023986 0.131283 -0.991055 0.0539359 0.195403 -0.979239 0.752442 0.196283 0.628732 0.882875 0.174868 0.435835 -0.206259 -0.780418 0.590259 0.852031 0.161617 0.497919 0.933015 0.196221 0.301631 0.807467 -0.0841706 0.583877 0.929431 0.241659 0.278851 0.90828 0.388657 0.154836 0.914834 0.313048 0.255108 0.987634 0.0988961 0.121651 0.155499 -0.985119 -0.0732195 0.992569 0.0407261 0.114662 0.991418 0.0664236 0.1126 0.993516 0.0212477 0.111693 0.993913 0.0106837 0.109644 0.993826 0.0161166 0.109775 0.994198 0.00349172 0.10751 0 0 1 -0.999011 -0.0283757 0.0342238 0 0 1 0 0 1 -0.99953 -0.0176513 0.025049 -0.998739 -0.0212443 0.0454989 -0.999042 -0.0312986 0.0305834 -0.999778 -0.0081177 0.0194369 -0.999359 -0.0116455 0.0338546 -0.999895 -0.00168676 0.0143928 -0.999687 -0.00411775 0.0246974 -0.999959 0.00129628 0.00891533 -0.999867 -2.3502e-05 0.0163248 -0.999997 0.00081607 0.00211621 -0.999969 0.000250617 0.00782005 -0.999968 -0.0029025 -0.00740589 -0.999994 -0.00304864 -0.00167936 -0.999712 -0.0064031 -0.0231251 -0.999698 -0.00912498 -0.0228382 -0.999871 -0.00897064 -0.0133222 -0.997497 -0.00638892 -0.0704238 -0.999511 -0.0143378 -0.0277905 -0.997406 -0.0143076 -0.070544 -0.997398 -0.010403 -0.0713444 -0.998127 -0.0252918 0.0557119 -0.617407 -0.78392 0.0654125 -0.998374 -0.0333777 0.0462199 0 0 1 0 0 1 0 0 1 -0.998986 -0.0181169 0.0412081 -0.46787 -0.882795 0.0420789 -0.999116 -0.0246046 0.0340951 -0.395905 -0.918236 0.0101227 -0.467846 -0.88278 0.0426621 -0.999618 -0.0103201 0.0256329 -0.447498 -0.893769 0.0303749 -0.999634 -0.0107816 0.0247954 -0.451426 -0.89156 0.0365593 -0.446524 -0.894224 0.0312957 -0.999889 -0.0104585 0.01061 -0.452655 -0.891469 0.0196734 -0.999843 -0.00669514 0.0164045 -0.444725 -0.895251 0.027311 -0.999887 -0.0146977 -0.00330754 -0.463743 -0.885946 0.00642148 -0.999929 -0.00898226 0.00788502 -0.459461 -0.887852 0.024778 -0.999544 -0.0262472 -0.0149244 -0.494736 -0.869038 -0.00312077 -0.999886 -0.0150383 -0.00163781 -0.483622 -0.87496 0.0235527 -0.999232 -0.0266266 -0.0287607 -0.541343 -0.840692 -0.0136005 -0.524796 -0.850911 0.0232177 -0.995 -0.0890881 -0.0451384 -0.605402 -0.795463 -0.0269724 -0.99902 -0.0371347 -0.0240794 -0.998693 -0.042266 -0.0287276 -0.999089 -0.0405516 -0.0132576 -0.589524 -0.807408 0.0235285 -0.994186 -0.0890152 -0.0605776 -0.737542 -0.673122 -0.0542071 -0.737455 -0.673042 0.0563536 -0.996758 -0.0370506 -0.0714207 -0.994754 -0.0619061 -0.0814393 -0.99402 -0.075283 -0.079096 -0.999288 -0.0236036 -0.0294494 -0.997091 -0.0235518 -0.0724864 0 0 1 0 0 1 0 0 1 -0.997092 -0.0234751 -0.0725008 -0.884386 0.464863 -0.0420017 -0.794295 -0.602039 -0.0815161 -0.779823 -0.625309 -0.0294206 -0.828798 0.558698 -0.0308357 -0.865351 -0.490434 -0.103155 -0.842721 -0.53673 -0.0417501 -0.923373 -0.367188 -0.112049 -0.906706 -0.418393 -0.0532179 -0.992033 -0.0710872 -0.104007 -0.955823 -0.269358 -0.117679 -0.925363 -0.372354 -0.0711056 -0.991531 -0.057572 -0.116412 -0.950988 -0.279292 -0.132734 -0.954468 -0.262318 -0.142057 0.999088 0.0267233 -0.0333056 0.999044 0.0298225 -0.0319683 0.997886 0.0332284 -0.0558451 0.998746 0.0236507 -0.0441362 0.998847 0.0199084 -0.0436931 0.606367 0.795128 0.00949287 0.474513 0.878289 -0.0586971 0 0 1 0.396906 0.916738 -0.0453467 0 0 1 0.034875 0.998687 -0.0375145 0 0 1 -0.0187905 0.99861 -0.0492356 0 0 1 1 0 0 1 0 0 -0.034859 -0.998227 0.0482413 -0.0277536 -0.998775 0.0409558 -0.0158073 -0.999263 0.0349718 -0.00210844 -0.999533 0.0304923 -0.0313634 -0.998804 0.0375108 -0.0350789 -0.998996 0.0278798 -0.0345574 -0.999041 0.0268928 -0.0350967 -0.999012 0.0272587 -0.0396247 -0.998791 0.0291055 -0.623168 -0.781672 0.0254969 -0.0515802 -0.998138 0.0325576 -0.697376 -0.715314 0.0446446 -0.623188 -0.781698 -0.0241805 -0.756511 -0.653508 0.0248565 -0.0348494 -0.998712 0.0368861 -0.0348586 -0.998976 0.0288468 -0.697842 -0.715787 -0.0258066 -0.941024 -0.0312171 -0.336897 -0.0424178 -0.909469 0.413601 -0.985957 -0.0397316 -0.162204 -0.985952 -0.127766 -0.107581 -0.0171906 -0.984431 0.174928 -0.0325736 -0.980027 0.196181 -0.136407 -0.773566 0.61886 -0.0411515 -0.910139 0.412254 -0.990252 -0.114389 -0.0794721 -0.902255 -0.427933 -0.0530032 -0.966213 -0.257518 0.0108623 -0.966614 -0.256223 -0.00259962 -0.827164 -0.560454 -0.041116 -0.886316 -0.462463 0.0239212 -0.758509 -0.651016 0.0290188 -0.0338405 -0.998529 0.0423648 -0.0352304 -0.998675 0.0375071 -0.0360314 -0.998085 0.050283 -0.032803 -0.997338 0.0651184 -0.0331476 -0.998361 0.0466438 -0.0308033 -0.995192 0.0929741 -0.0321078 -0.997428 0.0640819 -0.0371539 -0.99384 0.104411 -0.0399276 -0.510232 0.859109 -0.0774952 -0.826116 0.558146 1 0 0 0.999998 0 0.00186544 1 0 0 -0.0322179 -0.980085 0.195949 0.994145 0.0400285 0.10037 0.980808 0.100297 0.167204 0.968239 -0.0775266 0.237702 0.999866 0.0144486 0.00768518 0.999997 0.00178338 -0.0019335 0.99964 0.0268329 -0.000935621 0.999976 0.00680373 0.00115884 0.999964 -0.00597805 0.00610183 0.998202 -0.054825 0.0242439 0.998791 0.0139309 0.0471403 0.999771 -0.0099135 0.0189442 0.998803 0.0107233 0.0477321 0.99444 -0.0127061 0.104532 0.999988 -0.00149957 -0.00475806 0.0360028 0.998935 -0.0288431 0.0435704 0.99869 -0.0268221 0.0420502 0.998741 -0.0273473 0.0383617 0.998837 -0.0291993 0.0348518 0.998786 -0.0348261 0.0348497 0.99886 -0.0326155 0.0348489 0.998712 -0.036868 0.0348464 0.998465 -0.0430468 0.0335501 0.99869 -0.038629 0.0367391 0.99749 -0.0605296 0.0320242 0.99822 -0.0503123 0.0322592 0.994006 -0.10446 0.0308985 0.997098 -0.069572 0.0328182 0.982421 -0.183773 0.0293108 0.993663 -0.10851 0.0432438 0.887985 -0.457834 0.0315569 0.982003 -0.186212 0.0762777 0.902372 -0.424153 0.0366518 0.748664 -0.661936 0.0035335 0.99905 -0.0434402 0.0196688 0.999078 -0.038154 0.0297143 0.998994 -0.0335949 0.0343646 0.998959 -0.0299948 0.0350857 0.999002 -0.0276404 0.460607 0.886772 -0.0384237 0.466611 0.883825 -0.033586 0.442375 0.896329 -0.0299909 0.446841 0.893727 -0.0398205 0.441532 0.896847 -0.026742 0.441555 0.896714 -0.0305596 0.459161 0.888023 -0.0242343 0.444841 0.89526 -0.0250195 0.447506 0.894127 -0.0165724 0.485456 0.873961 -0.0229057 0.468292 0.883552 -0.00617961 0.528317 0.848751 -0.0224138 0.499469 0.866328 0.00266012 0.594109 0.80408 -0.022145 0.545342 0.838121 0.0124833 0.633333 0.773528 -0.023338 0.596315 0.802604 -0.0153377 0.633281 0.773506 -0.0253777 0.897775 0.440305 -0.01147 0.810116 0.584656 0.0434618 0.802561 0.595831 0.0296789 0.970927 0.239325 0.00497358 0.925766 0.373539 0.0585266 0.973116 0.228419 0.0295029 0.0317436 0.982033 -0.186021 0.986891 0.0638838 0.148208 0.992691 0.0838514 0.0867997 0.041821 0.91728 -0.39604 0.984201 0.0212534 0.175772 0.947941 0.0601705 0.312711 0.946726 0.284256 0.151354 0.945725 0.292561 0.141465 0.927332 0.366432 0.0760491 0.954517 0.274074 0.117388 0.955231 0.26631 0.12889 0.865012 0.498844 0.0539369 0.923482 0.369389 0.103595 0.925064 0.362543 0.113219 0.79803 0.601104 0.0426852 0.86582 0.492627 0.0875994 0.738643 0.673413 0.0303534 0.701416 0.712195 0.0281574 0.79599 0.602308 0.0602108 0.738624 0.673385 0.0314339 0.701494 0.712418 0.0191623 0.997403 0.0378517 0.0612748 0.998252 0.0378705 0.0453833 0.996356 0.0852631 0.00240062 0.993075 0.0849467 0.0811561 0.995271 0.0601917 0.076245 0.993558 0.0697132 0.0893433 0.992832 0.0698656 0.0969696 0.603812 -0.797095 -0.0071812 0.496966 -0.867379 -0.0260448 0.998889 0.0238304 -0.0406491 0.999573 0.0109359 -0.0270865 0.999422 0.0121233 -0.0317475 0.999811 0.00742615 -0.0179805 0.999745 0.00628609 -0.0217 0.999971 0.00292983 -0.00708307 0.999953 0.00881416 0.00402701 0.999882 0.00929571 -0.0122461 0.999648 0.0215861 0.0154269 0.99991 0.0132879 -0.00198251 0.998818 0.039015 0.0289745 0.999675 0.0232514 0.0104705 0.997479 0.00635187 0.0706817 0.999678 0.014209 0.0210069 0.99739 0.0141893 0.0707953 0.997381 0.010332 0.0715814 0.999986 0.00147224 0.00503632 0.999629 0.0233482 0.0140046 0.99956 0.00817625 0.0285282 0.999913 0.00793541 0.0104967 + + + + + + + + + + + + + + +

5 0 0 0 1 0 18 1 1 1 0 1 6 2 5 2 1 2 15 3 6 3 1 3 18 4 15 4 1 4 2 5 0 5 5 5 3 6 18 6 0 6 2 7 30 7 0 7 3 8 0 8 30 8 4 9 5 9 6 9 4 10 2 10 5 10 4 11 6 11 15 11 14 12 7 12 8 12 10 13 8 13 7 13 9 14 14 14 8 14 10 15 9 15 8 15 14 16 11 16 7 16 22 17 7 17 11 17 10 18 7 18 22 18 20 19 11 19 14 19 12 20 11 20 20 20 13 21 11 21 12 21 13 22 22 22 11 22 20 23 14 23 9 23 57 24 15 24 18 24 59 25 4 25 15 25 16 26 15 26 57 26 59 27 15 27 16 27 33 28 18 28 3 28 17 29 18 29 53 29 33 30 53 30 18 30 55 31 18 31 17 31 57 32 18 32 55 32 21 33 20 33 9 33 19 34 9 34 10 34 46 35 21 35 9 35 44 36 46 36 9 36 19 37 44 37 9 37 36 38 12 38 20 38 43 39 36 39 20 39 21 40 43 40 20 40 3 41 13 41 12 41 36 42 3 42 12 42 24 43 22 43 13 43 23 44 10 44 22 44 27 45 22 45 25 45 24 46 25 46 22 46 26 47 22 47 27 47 28 48 23 48 22 48 26 49 28 49 22 49 3 50 30 50 13 50 29 51 13 51 30 51 29 52 24 52 13 52 29 53 30 53 2 53 32 54 2 54 4 54 31 55 2 55 32 55 41 56 2 56 31 56 29 57 2 57 41 57 33 58 3 58 36 58 58 59 4 59 59 59 62 60 4 60 58 60 32 61 4 61 62 61 48 62 19 62 10 62 23 63 48 63 10 63 34 64 37 64 35 64 38 65 35 65 37 65 43 66 34 66 35 66 43 67 35 67 36 67 52 68 36 68 35 68 52 69 35 69 38 69 43 70 37 70 34 70 51 71 37 71 43 71 51 72 38 72 37 72 27 73 25 73 39 73 24 74 39 74 25 74 49 75 27 75 39 75 40 76 39 76 24 76 49 77 39 77 40 77 49 78 26 78 27 78 40 79 24 79 42 79 41 80 42 80 24 80 29 81 41 81 24 81 33 82 36 82 52 82 54 83 43 83 21 83 54 84 51 84 43 84 45 85 21 85 46 85 45 86 54 86 21 86 56 87 46 87 44 87 56 88 45 88 46 88 56 89 44 89 19 89 47 90 19 90 48 90 47 91 56 91 19 91 60 92 48 92 23 92 60 93 47 93 48 93 61 94 23 94 28 94 61 95 60 95 23 95 50 96 28 96 26 96 50 97 61 97 28 97 49 98 50 98 26 98 49 99 40 99 42 99 31 100 49 100 42 100 41 101 31 101 42 101 51 102 52 102 38 102 53 103 52 103 51 103 33 104 52 104 53 104 17 105 51 105 54 105 17 106 53 106 51 106 55 107 54 107 45 107 55 108 17 108 54 108 57 109 45 109 56 109 57 110 55 110 45 110 16 111 56 111 47 111 16 112 57 112 56 112 59 113 47 113 60 113 59 114 16 114 47 114 58 115 60 115 61 115 58 116 59 116 60 116 62 117 61 117 50 117 62 118 58 118 61 118 32 119 50 119 49 119 32 120 62 120 50 120 31 121 32 121 49 121 70 122 65 122 63 122 91 123 63 123 65 123 71 124 70 124 63 124 64 125 71 125 63 125 83 126 64 126 63 126 83 127 63 127 91 127 70 128 68 128 65 128 92 129 65 129 68 129 92 130 91 130 65 130 70 131 66 131 68 131 67 132 68 132 66 132 92 133 68 133 67 133 70 134 69 134 66 134 67 135 66 135 69 135 72 136 69 136 70 136 67 137 69 137 72 137 74 138 70 138 71 138 72 139 70 139 74 139 64 140 73 140 71 140 87 141 71 141 73 141 87 142 84 142 71 142 74 143 71 143 84 143 79 144 76 144 73 144 86 145 73 145 76 145 80 146 79 146 73 146 82 147 80 147 73 147 75 148 82 148 73 148 64 149 75 149 73 149 86 150 87 150 73 150 79 151 78 151 76 151 77 152 76 152 78 152 77 153 86 153 76 153 96 154 78 154 79 154 96 155 77 155 78 155 81 156 79 156 80 156 81 157 96 157 79 157 105 158 80 158 82 158 81 159 80 159 105 159 105 160 82 160 75 160 83 161 75 161 64 161 105 162 75 162 83 162 109 163 84 163 87 163 103 164 74 164 84 164 103 165 84 165 85 165 109 166 85 166 84 166 86 167 88 167 87 167 110 168 87 168 88 168 110 169 109 169 87 169 77 170 88 170 86 170 95 171 88 171 77 171 89 172 88 172 95 172 89 173 110 173 88 173 72 174 74 174 103 174 94 175 83 175 91 175 90 176 98 176 91 176 94 177 91 177 98 177 92 178 90 178 91 178 93 179 105 179 83 179 94 180 93 180 83 180 107 181 77 181 96 181 107 182 95 182 77 182 107 183 96 183 81 183 99 184 98 184 90 184 97 185 94 185 98 185 117 186 98 186 99 186 97 187 98 187 117 187 92 188 102 188 90 188 100 189 90 189 102 189 99 190 90 190 100 190 67 191 101 191 102 191 115 192 102 192 101 192 92 193 67 193 102 193 100 194 102 194 115 194 103 195 85 195 101 195 104 196 101 196 85 196 72 197 103 197 101 197 67 198 72 198 101 198 115 199 101 199 104 199 113 200 85 200 109 200 114 201 85 201 113 201 104 202 85 202 114 202 108 203 81 203 105 203 93 204 108 204 105 204 108 205 107 205 81 205 116 206 95 206 107 206 116 207 89 207 95 207 119 208 107 208 108 208 116 209 107 209 106 209 119 210 106 210 107 210 118 211 108 211 93 211 120 212 108 212 118 212 119 213 108 213 120 213 118 214 93 214 94 214 118 215 94 215 97 215 113 216 109 216 110 216 112 217 110 217 89 217 111 218 113 218 110 218 112 219 111 219 110 219 116 220 112 220 89 220 111 221 114 221 113 221 115 222 114 222 111 222 115 223 104 223 114 223 117 224 111 224 112 224 100 225 115 225 111 225 99 226 100 226 111 226 117 227 99 227 111 227 116 228 106 228 112 228 97 229 112 229 106 229 97 230 117 230 112 230 118 231 97 231 106 231 120 232 118 232 106 232 119 233 120 233 106 233 140 234 129 234 124 234 128 235 124 235 129 235 144 236 140 236 124 236 163 237 144 237 124 237 166 238 163 238 124 238 122 239 121 239 124 239 127 240 124 240 121 240 123 241 122 241 124 241 176 242 123 242 124 242 128 243 176 243 124 243 165 244 166 244 124 244 172 245 165 245 124 245 126 246 172 246 124 246 125 247 126 247 124 247 127 248 125 248 124 248 140 249 133 249 129 249 130 250 129 250 133 250 131 251 128 251 129 251 130 252 131 252 129 252 132 253 135 253 133 253 130 254 133 254 135 254 140 255 132 255 133 255 134 256 139 256 135 256 136 257 135 257 139 257 132 258 134 258 135 258 130 259 135 259 136 259 134 260 138 260 139 260 137 261 139 261 138 261 184 262 139 262 137 262 184 263 136 263 139 263 137 264 138 264 134 264 141 265 134 265 132 265 137 266 134 266 141 266 143 267 132 267 140 267 143 268 141 268 132 268 142 269 140 269 144 269 142 270 143 270 140 270 163 271 149 271 144 271 148 272 144 272 149 272 142 273 144 273 148 273 164 274 151 274 149 274 146 275 149 275 151 275 163 276 164 276 149 276 145 277 149 277 146 277 147 278 169 278 149 278 171 279 149 279 169 279 145 280 147 280 149 280 174 281 148 281 149 281 173 282 174 282 149 282 175 283 173 283 149 283 177 284 175 284 149 284 179 285 177 285 149 285 171 286 179 286 149 286 162 287 154 287 151 287 150 288 151 288 154 288 164 289 162 289 151 289 152 290 146 290 151 290 150 291 152 291 151 291 153 292 155 292 154 292 150 293 154 293 155 293 162 294 153 294 154 294 153 295 159 295 155 295 158 296 155 296 159 296 150 297 155 297 158 297 153 298 160 298 159 298 156 299 159 299 160 299 157 300 158 300 159 300 156 301 157 301 159 301 156 302 160 302 153 302 161 303 153 303 162 303 156 304 153 304 161 304 167 305 162 305 164 305 167 306 161 306 162 306 168 307 164 307 163 307 168 308 167 308 164 308 168 309 163 309 166 309 161 310 158 310 157 310 167 311 150 311 158 311 167 312 158 312 161 312 156 313 161 313 157 313 166 314 146 314 152 314 165 315 145 315 146 315 165 316 146 316 166 316 167 317 152 317 150 317 168 318 166 318 152 318 168 319 152 319 167 319 182 320 169 320 170 320 125 321 170 321 169 321 127 322 182 322 170 322 127 323 170 323 125 323 126 324 169 324 147 324 181 325 171 325 169 325 182 326 181 326 169 326 125 327 169 327 126 327 172 328 147 328 145 328 126 329 147 329 172 329 172 330 145 330 165 330 128 331 148 331 174 331 131 332 148 332 128 332 131 333 142 333 148 333 176 334 174 334 173 334 128 335 174 335 176 335 123 336 173 336 175 336 176 337 173 337 123 337 122 338 175 338 177 338 123 339 175 339 122 339 178 340 177 340 179 340 122 341 177 341 178 341 180 342 179 342 171 342 178 343 179 343 180 343 183 344 171 344 181 344 180 345 171 345 183 345 121 346 181 346 182 346 183 347 181 347 121 347 127 348 121 348 182 348 122 349 183 349 121 349 122 350 180 350 183 350 122 351 178 351 180 351 136 352 141 352 143 352 184 353 137 353 141 353 184 354 141 354 136 354 130 355 143 355 142 355 130 356 136 356 143 356 130 357 142 357 131 357 200 358 190 358 186 358 233 359 186 359 190 359 185 360 200 360 186 360 219 361 185 361 186 361 220 362 219 362 186 362 229 363 228 363 186 363 220 364 186 364 228 364 187 365 229 365 186 365 188 366 187 366 186 366 232 367 188 367 186 367 233 368 232 368 186 368 198 369 189 369 190 369 240 370 190 370 189 370 200 371 198 371 190 371 191 372 233 372 190 372 240 373 191 373 190 373 197 374 192 374 189 374 240 375 189 375 192 375 198 376 197 376 189 376 197 377 194 377 192 377 239 378 192 378 194 378 239 379 193 379 192 379 240 380 192 380 193 380 197 381 195 381 194 381 238 382 194 382 195 382 238 383 239 383 194 383 196 384 195 384 197 384 238 385 195 385 196 385 196 386 197 386 198 386 199 387 198 387 200 387 199 388 196 388 198 388 201 389 200 389 185 389 201 390 199 390 200 390 219 391 202 391 185 391 206 392 185 392 202 392 201 393 185 393 206 393 209 394 203 394 202 394 223 395 202 395 203 395 219 396 209 396 202 396 222 397 202 397 223 397 226 398 205 398 202 398 204 399 202 399 205 399 227 400 226 400 202 400 222 401 227 401 202 401 204 402 206 402 202 402 209 403 208 403 203 403 237 404 203 404 208 404 207 405 223 405 203 405 237 406 207 406 203 406 210 407 211 407 208 407 237 408 208 408 211 408 209 409 210 409 208 409 213 410 216 410 211 410 215 411 211 411 216 411 210 412 213 412 211 412 215 413 212 413 211 413 237 414 211 414 212 414 213 415 214 415 216 415 235 416 216 416 214 416 215 417 216 417 235 417 236 418 214 418 213 418 235 419 214 419 236 419 236 420 213 420 210 420 218 421 210 421 209 421 218 422 236 422 210 422 217 423 209 423 219 423 217 424 218 424 209 424 217 425 219 425 220 425 220 426 224 426 221 426 222 427 221 427 224 427 223 428 220 428 221 428 222 429 223 429 221 429 220 430 225 430 224 430 227 431 224 431 225 431 222 432 224 432 227 432 220 433 228 433 225 433 226 434 225 434 228 434 227 435 225 435 226 435 205 436 228 436 229 436 226 437 228 437 205 437 204 438 229 438 187 438 204 439 205 439 229 439 230 440 187 440 188 440 204 441 187 441 230 441 231 442 188 442 232 442 230 443 188 443 231 443 234 444 232 444 233 444 231 445 232 445 234 445 234 446 233 446 206 446 191 447 206 447 233 447 207 448 217 448 220 448 207 449 220 449 223 449 212 450 236 450 218 450 215 451 235 451 236 451 215 452 236 452 212 452 237 453 218 453 217 453 237 454 212 454 218 454 237 455 217 455 207 455 231 456 234 456 206 456 230 457 231 457 206 457 204 458 230 458 206 458 201 459 206 459 191 459 196 460 193 460 239 460 199 461 240 461 193 461 199 462 193 462 196 462 238 463 196 463 239 463 199 464 191 464 240 464 201 465 191 465 199 465 242 466 249 466 243 466 244 467 243 467 249 467 241 468 242 468 243 468 281 469 243 469 244 469 313 470 243 470 281 470 241 471 243 471 313 471 246 472 250 472 249 472 254 473 249 473 250 473 245 474 246 474 249 474 265 475 245 475 249 475 242 476 265 476 249 476 248 477 244 477 249 477 247 478 248 478 249 478 778 479 287 479 767 479 254 480 247 480 249 480 257 481 255 481 250 481 253 482 250 482 255 482 256 483 257 483 250 483 251 484 256 484 250 484 252 485 251 485 250 485 262 486 252 486 250 486 246 487 262 487 250 487 253 488 254 488 250 488 300 489 255 489 257 489 253 490 255 490 300 490 325 491 257 491 256 491 478 492 300 492 257 492 478 493 257 493 325 493 258 494 256 494 251 494 326 495 325 495 256 495 258 496 326 496 256 496 328 497 251 497 252 497 328 498 258 498 251 498 259 499 252 499 262 499 259 500 328 500 252 500 260 501 262 501 246 501 261 502 259 502 262 502 260 503 261 503 262 503 264 504 246 504 245 504 264 505 260 505 246 505 263 506 245 506 265 506 263 507 264 507 245 507 241 508 265 508 242 508 241 509 263 509 265 509 268 510 267 510 266 510 322 511 266 511 267 511 310 512 268 512 266 512 310 513 266 513 307 513 322 514 307 514 266 514 268 515 270 515 267 515 322 516 267 516 270 516 268 517 269 517 270 517 271 518 270 518 269 518 291 519 270 519 271 519 291 520 293 520 270 520 322 521 270 521 293 521 268 522 275 522 269 522 272 523 269 523 275 523 272 524 271 524 269 524 273 525 277 525 275 525 274 526 275 526 277 526 268 527 273 527 275 527 274 528 272 528 275 528 281 529 244 529 277 529 278 530 277 530 244 530 276 531 281 531 277 531 273 532 276 532 277 532 278 533 274 533 277 533 248 534 278 534 244 534 280 535 281 535 276 535 279 536 281 536 280 536 314 537 281 537 279 537 313 538 281 538 314 538 280 539 276 539 273 539 282 540 273 540 268 540 280 541 273 541 282 541 282 542 268 542 310 542 493 543 271 543 272 543 283 544 291 544 271 544 284 545 271 545 493 545 283 546 271 546 284 546 494 547 272 547 274 547 494 548 493 548 272 548 286 549 274 549 278 549 286 550 494 550 274 550 285 551 278 551 248 551 285 552 286 552 278 552 285 553 248 553 247 553 767 554 287 554 288 554 285 555 247 555 289 555 289 556 247 556 254 556 480 557 254 557 253 557 480 558 289 558 254 558 290 559 296 559 293 559 324 560 293 560 296 560 292 561 290 561 293 561 291 562 292 562 293 562 294 563 322 563 293 563 294 564 293 564 324 564 386 565 296 565 290 565 435 566 323 566 296 566 295 567 296 567 323 567 295 568 324 568 296 568 386 569 435 569 296 569 386 570 290 570 292 570 496 571 292 571 291 571 298 572 386 572 292 572 297 573 298 573 292 573 500 574 292 574 496 574 513 575 292 575 500 575 513 576 297 576 292 576 496 577 291 577 283 577 299 578 253 578 300 578 488 579 300 579 478 579 486 580 299 580 300 580 487 581 486 581 300 581 490 582 487 582 300 582 488 583 490 583 300 583 301 584 480 584 253 584 485 585 301 585 253 585 302 586 485 586 253 586 299 587 302 587 253 587 306 588 303 588 304 588 305 589 304 589 303 589 378 590 306 590 304 590 396 591 378 591 304 591 396 592 304 592 305 592 306 593 307 593 303 593 308 594 303 594 307 594 305 595 303 595 308 595 319 596 310 596 307 596 306 597 319 597 307 597 321 598 308 598 307 598 322 599 321 599 307 599 316 600 282 600 310 600 309 601 316 601 310 601 319 602 309 602 310 602 317 603 280 603 282 603 316 604 317 604 282 604 311 605 279 605 280 605 317 606 311 606 280 606 315 607 314 607 279 607 312 608 315 608 279 608 311 609 312 609 279 609 241 610 314 610 315 610 241 611 313 611 314 611 318 612 315 612 312 612 329 613 241 613 315 613 366 614 329 614 315 614 318 615 366 615 315 615 316 616 312 616 311 616 318 617 312 617 316 617 316 618 311 618 317 618 378 619 316 619 309 619 378 620 318 620 316 620 378 621 309 621 319 621 378 622 319 622 306 622 305 623 308 623 321 623 320 624 321 624 322 624 305 625 321 625 320 625 294 626 320 626 322 626 324 627 323 627 320 627 433 628 320 628 323 628 294 629 324 629 320 629 433 630 305 630 320 630 295 631 323 631 324 631 433 632 323 632 435 632 520 633 325 633 326 633 520 634 478 634 325 634 368 635 326 635 258 635 522 636 326 636 368 636 520 637 326 637 522 637 363 638 258 638 328 638 368 639 258 639 363 639 327 640 328 640 259 640 363 641 328 641 327 641 361 642 259 642 261 642 327 643 259 643 361 643 359 644 261 644 260 644 361 645 261 645 359 645 357 646 260 646 264 646 359 647 260 647 357 647 357 648 264 648 263 648 355 649 263 649 241 649 357 650 263 650 355 650 355 651 241 651 329 651 364 652 333 652 330 652 331 653 330 653 333 653 362 654 364 654 330 654 549 655 362 655 330 655 549 656 330 656 332 656 331 657 332 657 330 657 364 658 334 658 333 658 649 659 333 659 334 659 649 660 331 660 333 660 364 661 335 661 334 661 647 662 334 662 335 662 647 663 649 663 334 663 360 664 337 664 335 664 647 665 335 665 337 665 364 666 360 666 335 666 360 667 336 667 337 667 339 668 337 668 336 668 339 669 647 669 337 669 338 670 340 670 336 670 339 671 336 671 340 671 360 672 338 672 336 672 338 673 341 673 340 673 653 674 340 674 341 674 653 675 339 675 340 675 358 676 342 676 341 676 652 677 341 677 342 677 338 678 358 678 341 678 652 679 653 679 341 679 343 680 344 680 342 680 655 681 342 681 344 681 358 682 343 682 342 682 655 683 652 683 342 683 356 684 346 684 344 684 654 685 344 685 346 685 343 686 356 686 344 686 654 687 655 687 344 687 345 688 348 688 346 688 347 689 346 689 348 689 356 690 345 690 346 690 347 691 654 691 346 691 350 692 349 692 348 692 347 693 348 693 349 693 352 694 350 694 348 694 345 695 352 695 348 695 371 696 349 696 350 696 659 697 349 697 371 697 657 698 347 698 349 698 659 699 657 699 349 699 353 700 350 700 352 700 353 701 371 701 350 701 351 702 352 702 345 702 372 703 352 703 351 703 372 704 353 704 352 704 329 705 345 705 356 705 354 706 351 706 345 706 329 707 354 707 345 707 355 708 356 708 343 708 355 709 329 709 356 709 357 710 343 710 358 710 357 711 355 711 343 711 359 712 358 712 338 712 359 713 357 713 358 713 361 714 338 714 360 714 361 715 359 715 338 715 327 716 360 716 364 716 327 717 361 717 360 717 362 718 365 718 364 718 363 719 364 719 365 719 363 720 327 720 364 720 549 721 365 721 362 721 367 722 363 722 365 722 369 723 367 723 365 723 369 724 365 724 549 724 372 725 351 725 354 725 366 726 354 726 329 726 318 727 354 727 366 727 318 728 372 728 354 728 367 729 368 729 363 729 523 730 368 730 367 730 523 731 522 731 368 731 523 732 367 732 369 732 373 733 371 733 353 733 370 734 371 734 373 734 659 735 371 735 370 735 376 736 353 736 372 736 374 737 373 737 353 737 376 738 374 738 353 738 377 739 372 739 318 739 375 740 376 740 372 740 377 741 375 741 372 741 378 742 377 742 318 742 370 743 373 743 374 743 398 744 374 744 376 744 461 745 374 745 398 745 370 746 374 746 461 746 398 747 376 747 375 747 398 748 375 748 377 748 396 749 377 749 378 749 396 750 398 750 377 750 379 751 380 751 383 751 427 752 383 752 380 752 392 753 379 753 383 753 381 754 392 754 383 754 382 755 383 755 427 755 430 756 383 756 382 756 381 757 383 757 430 757 384 758 380 758 379 758 384 759 425 759 380 759 427 760 380 760 425 760 389 761 385 761 379 761 384 762 379 762 385 762 391 763 389 763 379 763 392 764 391 764 379 764 387 765 385 765 389 765 387 766 384 766 385 766 388 767 389 767 391 767 386 768 387 768 389 768 388 769 386 769 389 769 390 770 391 770 392 770 388 771 391 771 390 771 436 772 390 772 392 772 381 773 436 773 392 773 402 774 393 774 394 774 395 775 394 775 393 775 397 776 402 776 394 776 396 777 397 777 394 777 396 778 394 778 395 778 402 779 400 779 393 779 461 780 393 780 400 780 395 781 393 781 398 781 461 782 398 782 393 782 407 783 400 783 402 783 457 784 400 784 407 784 399 785 461 785 400 785 399 786 400 786 457 786 405 787 401 787 402 787 404 788 402 788 401 788 397 789 405 789 402 789 403 790 407 790 402 790 404 791 403 791 402 791 432 792 401 792 405 792 417 793 404 793 401 793 428 794 417 794 401 794 432 795 428 795 401 795 406 796 405 796 397 796 433 797 432 797 405 797 433 798 405 798 406 798 305 799 406 799 397 799 396 800 305 800 397 800 410 801 408 801 407 801 453 802 407 802 408 802 403 803 410 803 407 803 453 804 457 804 407 804 409 805 413 805 408 805 449 806 408 806 413 806 410 807 409 807 408 807 449 808 453 808 408 808 412 809 411 809 413 809 606 810 413 810 411 810 409 811 412 811 413 811 606 812 451 812 413 812 449 813 413 813 451 813 606 814 411 814 412 814 622 815 412 815 409 815 441 816 606 816 412 816 441 817 412 817 614 817 615 818 614 818 412 818 414 819 615 819 412 819 618 820 414 820 412 820 617 821 618 821 412 821 415 822 617 822 412 822 622 823 415 823 412 823 622 824 409 824 410 824 416 825 410 825 403 825 416 826 622 826 410 826 628 827 403 827 404 827 628 828 416 828 403 828 625 829 404 829 417 829 628 830 404 830 625 830 428 831 424 831 417 831 418 832 417 832 424 832 778 833 779 833 287 833 593 834 420 834 417 834 419 835 417 835 420 835 593 836 417 836 597 836 773 837 545 837 696 837 597 838 417 838 418 838 623 839 421 839 541 839 421 840 774 840 542 840 626 841 625 841 417 841 419 842 626 842 417 842 428 843 422 843 424 843 589 844 424 844 422 844 423 845 418 845 424 845 589 846 423 846 424 846 427 847 425 847 422 847 589 848 422 848 425 848 428 849 427 849 422 849 586 850 425 850 384 850 586 851 426 851 425 851 589 852 425 852 426 852 586 853 384 853 387 853 382 854 427 854 428 854 431 855 382 855 428 855 432 856 431 856 428 856 435 857 382 857 431 857 429 858 430 858 382 858 434 859 429 859 382 859 435 860 434 860 382 860 435 861 431 861 432 861 433 862 435 862 432 862 396 863 395 863 398 863 433 864 406 864 305 864 381 865 430 865 429 865 386 866 429 866 434 866 386 867 381 867 429 867 386 868 434 868 435 868 388 869 390 869 436 869 388 870 436 870 381 870 388 871 381 871 386 871 586 872 387 872 386 872 298 873 440 873 386 873 588 874 386 874 440 874 437 875 586 875 386 875 437 876 386 876 588 876 438 877 443 877 442 877 607 878 442 878 443 878 439 879 438 879 442 879 440 880 439 880 442 880 608 881 440 881 442 881 441 882 442 882 607 882 612 883 608 883 442 883 609 884 612 884 442 884 441 885 609 885 442 885 607 886 443 886 438 886 446 887 438 887 439 887 446 888 607 888 438 888 440 889 448 889 439 889 444 890 439 890 448 890 445 891 439 891 444 891 446 892 439 892 445 892 474 893 447 893 448 893 452 894 448 894 447 894 474 895 448 895 440 895 452 896 444 896 448 896 474 897 450 897 447 897 449 898 447 898 450 898 449 899 451 899 447 899 452 900 447 900 451 900 455 901 456 901 450 901 453 902 450 902 456 902 454 903 455 903 450 903 474 904 454 904 450 904 449 905 450 905 453 905 470 906 460 906 456 906 457 907 456 907 460 907 473 908 470 908 456 908 455 909 473 909 456 909 453 910 456 910 457 910 462 911 461 911 460 911 399 912 460 912 461 912 458 913 462 913 460 913 469 914 458 914 460 914 459 915 469 915 460 915 470 916 459 916 460 916 399 917 457 917 460 917 466 918 370 918 461 918 463 919 466 919 461 919 462 920 463 920 461 920 464 921 474 921 440 921 475 922 464 922 440 922 298 923 475 923 440 923 608 924 588 924 440 924 659 925 370 925 466 925 465 926 466 926 463 926 659 927 466 927 465 927 683 928 463 928 462 928 465 929 463 929 683 929 467 930 462 930 458 930 467 931 683 931 462 931 467 932 458 932 469 932 470 933 469 933 459 933 471 934 469 934 470 934 468 935 467 935 469 935 468 936 469 936 471 936 472 937 470 937 473 937 721 938 471 938 470 938 472 939 721 939 470 939 472 940 473 940 455 940 725 941 455 941 454 941 725 942 472 942 455 942 725 943 454 943 474 943 725 944 474 944 464 944 725 945 464 945 475 945 297 946 475 946 298 946 640 947 475 947 297 947 724 948 725 948 475 948 476 949 724 949 475 949 476 950 475 950 477 950 640 951 477 951 475 951 533 952 488 952 478 952 533 953 478 953 520 953 479 954 289 954 480 954 481 955 285 955 289 955 479 956 481 956 289 956 482 957 480 957 301 957 479 958 480 958 510 958 483 959 510 959 480 959 482 960 483 960 480 960 484 961 301 961 485 961 484 962 482 962 301 962 526 963 485 963 302 963 526 964 484 964 485 964 528 965 302 965 299 965 528 966 526 966 302 966 531 967 299 967 486 967 531 968 528 968 299 968 489 969 486 969 487 969 532 970 531 970 486 970 489 971 532 971 486 971 489 972 487 972 490 972 533 973 490 973 488 973 533 974 489 974 490 974 284 975 493 975 491 975 492 976 491 976 493 976 283 977 284 977 491 977 505 978 283 978 491 978 492 979 505 979 491 979 492 980 493 980 494 980 507 981 494 981 286 981 507 982 492 982 494 982 495 983 286 983 285 983 495 984 507 984 286 984 481 985 495 985 285 985 503 986 502 986 283 986 496 987 283 987 502 987 505 988 503 988 283 988 503 989 497 989 502 989 598 990 502 990 497 990 498 991 499 991 502 991 500 992 502 992 499 992 501 993 498 993 502 993 500 994 496 994 502 994 501 995 502 995 598 995 598 996 497 996 503 996 517 997 503 997 505 997 517 998 504 998 503 998 598 999 503 999 504 999 516 1000 505 1000 492 1000 516 1001 517 1001 505 1001 506 1002 492 1002 507 1002 506 1003 516 1003 492 1003 518 1004 507 1004 495 1004 508 1005 506 1005 507 1005 518 1006 508 1006 507 1006 511 1007 495 1007 481 1007 509 1008 518 1008 495 1008 511 1009 509 1009 495 1009 479 1010 510 1010 481 1010 511 1011 481 1011 510 1011 483 1012 511 1012 510 1012 501 1013 499 1013 498 1013 513 1014 500 1014 499 1014 600 1015 499 1015 501 1015 512 1016 499 1016 600 1016 513 1017 499 1017 512 1017 517 1018 514 1018 504 1018 598 1019 504 1019 514 1019 508 1020 514 1020 517 1020 572 1021 514 1021 508 1021 575 1022 514 1022 572 1022 515 1023 514 1023 575 1023 598 1024 514 1024 515 1024 506 1025 517 1025 516 1025 508 1026 517 1026 506 1026 509 1027 508 1027 518 1027 519 1028 508 1028 509 1028 572 1029 508 1029 519 1029 519 1030 509 1030 511 1030 519 1031 511 1031 483 1031 519 1032 483 1032 482 1032 533 1033 520 1033 522 1033 521 1034 533 1034 522 1034 521 1035 522 1035 523 1035 525 1036 482 1036 484 1036 524 1037 482 1037 525 1037 519 1038 482 1038 524 1038 527 1039 484 1039 526 1039 525 1040 484 1040 527 1040 529 1041 526 1041 528 1041 527 1042 526 1042 529 1042 529 1043 528 1043 531 1043 530 1044 531 1044 532 1044 529 1045 531 1045 530 1045 530 1046 532 1046 489 1046 552 1047 489 1047 533 1047 530 1048 489 1048 552 1048 552 1049 533 1049 521 1049 556 1050 534 1050 535 1050 536 1051 535 1051 534 1051 557 1052 556 1052 535 1052 560 1053 557 1053 535 1053 537 1054 560 1054 535 1054 536 1055 537 1055 535 1055 556 1056 538 1056 534 1056 781 1057 534 1057 538 1057 777 1058 536 1058 534 1058 781 1059 777 1059 534 1059 554 1060 539 1060 538 1060 727 1061 538 1061 539 1061 555 1062 554 1062 538 1062 556 1063 555 1063 538 1063 727 1064 781 1064 538 1064 553 1065 540 1065 539 1065 541 1066 539 1066 540 1066 554 1067 553 1067 539 1067 542 1068 727 1068 539 1068 541 1069 542 1069 539 1069 543 1070 544 1070 540 1070 541 1071 540 1071 544 1071 553 1072 543 1072 540 1072 543 1073 547 1073 544 1073 545 1074 544 1074 547 1074 545 1075 541 1075 544 1075 551 1076 546 1076 547 1076 545 1077 547 1077 546 1077 543 1078 551 1078 547 1078 551 1079 548 1079 546 1079 696 1080 546 1080 548 1080 696 1081 545 1081 546 1081 549 1082 550 1082 548 1082 696 1083 548 1083 550 1083 551 1084 549 1084 548 1084 549 1085 332 1085 550 1085 648 1086 550 1086 332 1086 696 1087 550 1087 648 1087 648 1088 332 1088 331 1088 369 1089 549 1089 551 1089 521 1090 551 1090 543 1090 523 1091 369 1091 551 1091 521 1092 523 1092 551 1092 552 1093 543 1093 553 1093 552 1094 521 1094 543 1094 530 1095 553 1095 554 1095 530 1096 552 1096 553 1096 529 1097 554 1097 555 1097 529 1098 530 1098 554 1098 527 1099 555 1099 556 1099 527 1100 529 1100 555 1100 557 1101 558 1101 556 1101 525 1102 556 1102 558 1102 525 1103 527 1103 556 1103 560 1104 558 1104 557 1104 559 1105 525 1105 558 1105 574 1106 559 1106 558 1106 574 1107 558 1107 560 1107 559 1108 524 1108 525 1108 572 1109 524 1109 559 1109 572 1110 519 1110 524 1110 572 1111 559 1111 574 1111 577 1112 561 1112 562 1112 563 1113 562 1113 561 1113 515 1114 577 1114 562 1114 515 1115 562 1115 592 1115 646 1116 592 1116 562 1116 563 1117 646 1117 562 1117 577 1118 564 1118 561 1118 563 1119 561 1119 564 1119 577 1120 565 1120 564 1120 563 1121 564 1121 565 1121 577 1122 566 1122 565 1122 563 1123 565 1123 566 1123 577 1124 567 1124 566 1124 563 1125 566 1125 567 1125 577 1126 568 1126 567 1126 563 1127 567 1127 568 1127 577 1128 569 1128 568 1128 563 1129 568 1129 569 1129 577 1130 560 1130 569 1130 578 1131 569 1131 560 1131 536 1132 569 1132 578 1132 563 1133 569 1133 536 1133 577 1134 574 1134 560 1134 570 1135 578 1135 560 1135 571 1136 570 1136 560 1136 579 1137 571 1137 560 1137 537 1138 579 1138 560 1138 576 1139 572 1139 574 1139 573 1140 576 1140 574 1140 577 1141 573 1141 574 1141 576 1142 575 1142 572 1142 515 1143 575 1143 576 1143 515 1144 576 1144 573 1144 515 1145 573 1145 577 1145 536 1146 578 1146 570 1146 536 1147 570 1147 571 1147 536 1148 571 1148 579 1148 536 1149 579 1149 537 1149 586 1150 580 1150 426 1150 591 1151 426 1151 580 1151 591 1152 589 1152 426 1152 586 1153 581 1153 580 1153 591 1154 580 1154 581 1154 586 1155 582 1155 581 1155 583 1156 581 1156 582 1156 583 1157 591 1157 581 1157 586 1158 584 1158 582 1158 603 1159 582 1159 584 1159 583 1160 582 1160 601 1160 603 1161 601 1161 582 1161 586 1162 587 1162 584 1162 585 1163 584 1163 587 1163 585 1164 603 1164 584 1164 437 1165 587 1165 586 1165 585 1166 587 1166 604 1166 605 1167 604 1167 587 1167 437 1168 588 1168 587 1168 605 1169 587 1169 588 1169 501 1170 418 1170 423 1170 501 1171 598 1171 418 1171 288 1172 287 1172 780 1172 599 1173 423 1173 589 1173 600 1174 501 1174 423 1174 599 1175 600 1175 423 1175 590 1176 599 1176 589 1176 591 1177 590 1177 589 1177 515 1178 592 1178 420 1178 634 1179 420 1179 592 1179 593 1180 515 1180 420 1180 634 1181 419 1181 420 1181 594 1182 634 1182 592 1182 595 1183 594 1183 592 1183 645 1184 595 1184 592 1184 646 1185 645 1185 592 1185 596 1186 598 1186 515 1186 597 1187 596 1187 515 1187 593 1188 597 1188 515 1188 597 1189 598 1189 596 1189 597 1190 418 1190 598 1190 773 1191 623 1191 545 1191 602 1192 600 1192 599 1192 602 1193 512 1193 600 1193 602 1194 599 1194 590 1194 602 1195 590 1195 591 1195 583 1196 601 1196 591 1196 602 1197 591 1197 601 1197 608 1198 601 1198 603 1198 602 1199 601 1199 608 1199 585 1200 604 1200 603 1200 608 1201 603 1201 604 1201 608 1202 604 1202 605 1202 608 1203 605 1203 588 1203 606 1204 444 1204 451 1204 452 1205 451 1205 444 1205 606 1206 445 1206 444 1206 606 1207 607 1207 445 1207 446 1208 445 1208 607 1208 441 1209 607 1209 606 1209 297 1210 608 1210 612 1210 297 1211 602 1211 608 1211 615 1212 612 1212 609 1212 637 1213 612 1213 615 1213 621 1214 612 1214 610 1214 619 1215 610 1215 612 1215 627 1216 612 1216 621 1216 611 1217 612 1217 627 1217 635 1218 612 1218 611 1218 613 1219 612 1219 635 1219 619 1220 612 1220 638 1220 637 1221 638 1221 612 1221 613 1222 297 1222 612 1222 441 1223 614 1223 609 1223 615 1224 609 1224 614 1224 637 1225 615 1225 414 1225 616 1226 414 1226 618 1226 637 1227 414 1227 616 1227 619 1228 618 1228 617 1228 638 1229 616 1229 618 1229 619 1230 638 1230 618 1230 620 1231 617 1231 415 1231 619 1232 617 1232 620 1232 610 1233 415 1233 622 1233 610 1234 620 1234 415 1234 621 1235 622 1235 416 1235 621 1236 610 1236 622 1236 623 1237 541 1237 545 1237 635 1238 628 1238 625 1238 624 1239 635 1239 625 1239 421 1240 542 1240 541 1240 624 1241 625 1241 626 1241 629 1242 626 1242 419 1242 624 1243 626 1243 629 1243 631 1244 629 1244 419 1244 634 1245 631 1245 419 1245 627 1246 416 1246 628 1246 627 1247 621 1247 416 1247 611 1248 627 1248 628 1248 635 1249 611 1249 628 1249 624 1250 629 1250 631 1250 641 1251 631 1251 634 1251 630 1252 624 1252 631 1252 642 1253 630 1253 631 1253 641 1254 642 1254 631 1254 632 1255 641 1255 634 1255 633 1256 632 1256 634 1256 594 1257 633 1257 634 1257 619 1258 620 1258 610 1258 636 1259 635 1259 624 1259 636 1260 613 1260 635 1260 630 1261 636 1261 624 1261 637 1262 616 1262 638 1262 513 1263 512 1263 602 1263 513 1264 602 1264 297 1264 640 1265 297 1265 613 1265 636 1266 639 1266 613 1266 477 1267 613 1267 639 1267 640 1268 613 1268 477 1268 477 1269 639 1269 636 1269 477 1270 636 1270 630 1270 758 1271 630 1271 642 1271 476 1272 630 1272 758 1272 476 1273 477 1273 630 1273 643 1274 642 1274 641 1274 758 1275 642 1275 643 1275 643 1276 641 1276 632 1276 644 1277 632 1277 633 1277 644 1278 643 1278 632 1278 761 1279 633 1279 594 1279 644 1280 633 1280 761 1280 767 1281 594 1281 595 1281 767 1282 761 1282 594 1282 767 1283 595 1283 645 1283 778 1284 645 1284 646 1284 778 1285 767 1285 645 1285 563 1286 778 1286 646 1286 648 1287 331 1287 649 1287 687 1288 649 1288 647 1288 695 1289 649 1289 687 1289 695 1290 648 1290 649 1290 665 1291 647 1291 339 1291 686 1292 647 1292 665 1292 687 1293 647 1293 686 1293 650 1294 339 1294 653 1294 665 1295 339 1295 650 1295 651 1296 653 1296 652 1296 650 1297 653 1297 651 1297 669 1298 652 1298 655 1298 651 1299 652 1299 669 1299 656 1300 655 1300 654 1300 669 1301 655 1301 656 1301 675 1302 654 1302 347 1302 656 1303 654 1303 675 1303 657 1304 660 1304 347 1304 658 1305 347 1305 660 1305 675 1306 347 1306 658 1306 659 1307 660 1307 657 1307 661 1308 658 1308 660 1308 465 1309 661 1309 660 1309 659 1310 465 1310 660 1310 665 1311 664 1311 662 1311 666 1312 662 1312 664 1312 686 1313 665 1313 662 1313 697 1314 686 1314 662 1314 663 1315 697 1315 662 1315 666 1316 663 1316 662 1316 650 1317 668 1317 664 1317 667 1318 664 1318 668 1318 665 1319 650 1319 664 1319 666 1320 664 1320 698 1320 667 1321 698 1321 664 1321 651 1322 672 1322 668 1322 702 1323 668 1323 672 1323 650 1324 651 1324 668 1324 703 1325 667 1325 668 1325 702 1326 703 1326 668 1326 669 1327 670 1327 672 1327 671 1328 672 1328 670 1328 651 1329 669 1329 672 1329 671 1330 702 1330 672 1330 656 1331 674 1331 670 1331 673 1332 670 1332 674 1332 669 1333 656 1333 670 1333 673 1334 671 1334 670 1334 675 1335 676 1335 674 1335 677 1336 674 1336 676 1336 656 1337 675 1337 674 1337 677 1338 673 1338 674 1338 675 1339 682 1339 676 1339 681 1340 676 1340 682 1340 681 1341 677 1341 676 1341 678 1342 679 1342 682 1342 706 1343 682 1343 679 1343 680 1344 678 1344 682 1344 658 1345 680 1345 682 1345 675 1346 658 1346 682 1346 706 1347 681 1347 682 1347 688 1348 679 1348 678 1348 689 1349 679 1349 688 1349 689 1350 706 1350 679 1350 683 1351 678 1351 680 1351 684 1352 688 1352 678 1352 683 1353 684 1353 678 1353 661 1354 680 1354 658 1354 683 1355 680 1355 661 1355 685 1356 687 1356 686 1356 697 1357 685 1357 686 1357 685 1358 695 1358 687 1358 465 1359 683 1359 661 1359 684 1360 691 1360 688 1360 707 1361 688 1361 691 1361 707 1362 689 1362 688 1362 684 1363 690 1363 691 1363 692 1364 691 1364 690 1364 707 1365 691 1365 692 1365 694 1366 690 1366 684 1366 692 1367 690 1367 694 1367 693 1368 684 1368 683 1368 710 1369 684 1369 693 1369 694 1370 684 1370 710 1370 467 1371 693 1371 683 1371 468 1372 693 1372 467 1372 710 1373 693 1373 468 1373 696 1374 648 1374 695 1374 696 1375 695 1375 685 1375 744 1376 685 1376 697 1376 773 1377 685 1377 744 1377 773 1378 696 1378 685 1378 700 1379 697 1379 663 1379 744 1380 697 1380 700 1380 666 1381 701 1381 663 1381 700 1382 663 1382 701 1382 698 1383 699 1383 701 1383 733 1384 701 1384 699 1384 666 1385 698 1385 701 1385 700 1386 701 1386 733 1386 698 1387 704 1387 699 1387 709 1388 699 1388 704 1388 733 1389 699 1389 709 1389 667 1390 704 1390 698 1390 703 1391 704 1391 667 1391 702 1392 704 1392 703 1392 671 1393 704 1393 702 1393 709 1394 704 1394 671 1394 709 1395 671 1395 673 1395 709 1396 673 1396 677 1396 709 1397 677 1397 681 1397 709 1398 681 1398 706 1398 705 1399 708 1399 706 1399 709 1400 706 1400 708 1400 689 1401 705 1401 706 1401 707 1402 708 1402 705 1402 716 1403 708 1403 707 1403 722 1404 708 1404 716 1404 722 1405 709 1405 708 1405 707 1406 705 1406 689 1406 468 1407 471 1407 712 1407 713 1408 712 1408 471 1408 710 1409 468 1409 712 1409 711 1410 710 1410 712 1410 732 1411 711 1411 712 1411 732 1412 712 1412 713 1412 714 1413 471 1413 721 1413 713 1414 471 1414 714 1414 711 1415 694 1415 710 1415 718 1416 692 1416 694 1416 719 1417 718 1417 694 1417 711 1418 719 1418 694 1418 715 1419 707 1419 692 1419 718 1420 715 1420 692 1420 715 1421 716 1421 707 1421 729 1422 716 1422 715 1422 729 1423 722 1423 716 1423 729 1424 715 1424 718 1424 717 1425 718 1425 719 1425 717 1426 729 1426 718 1426 720 1427 719 1427 711 1427 720 1428 717 1428 719 1428 732 1429 720 1429 711 1429 725 1430 721 1430 472 1430 725 1431 714 1431 721 1431 733 1432 709 1432 722 1432 736 1433 722 1433 729 1433 733 1434 722 1434 736 1434 732 1435 713 1435 714 1435 723 1436 732 1436 714 1436 724 1437 714 1437 725 1437 724 1438 723 1438 714 1438 739 1439 729 1439 717 1439 774 1440 726 1440 727 1440 728 1441 736 1441 729 1441 738 1442 728 1442 729 1442 739 1443 738 1443 729 1443 739 1444 717 1444 720 1444 730 1445 720 1445 732 1445 730 1446 739 1446 720 1446 731 1447 730 1447 732 1447 723 1448 731 1448 732 1448 774 1449 727 1449 542 1449 749 1450 733 1450 736 1450 734 1451 749 1451 736 1451 750 1452 734 1452 736 1452 735 1453 750 1453 736 1453 737 1454 736 1454 728 1454 737 1455 735 1455 736 1455 737 1456 728 1456 738 1456 752 1457 738 1457 739 1457 752 1458 737 1458 738 1458 740 1459 739 1459 730 1459 740 1460 752 1460 739 1460 754 1461 730 1461 731 1461 754 1462 740 1462 730 1462 756 1463 731 1463 723 1463 756 1464 754 1464 731 1464 755 1465 723 1465 724 1465 755 1466 756 1466 723 1466 758 1467 755 1467 724 1467 476 1468 758 1468 724 1468 741 1469 700 1469 733 1469 742 1470 741 1470 733 1470 743 1471 742 1471 733 1471 746 1472 743 1472 733 1472 749 1473 746 1473 733 1473 744 1474 700 1474 741 1474 744 1475 741 1475 742 1475 745 1476 742 1476 743 1476 745 1477 744 1477 742 1477 772 1478 743 1478 746 1478 772 1479 745 1479 743 1479 748 1480 746 1480 749 1480 747 1481 772 1481 746 1481 748 1482 747 1482 746 1482 776 1483 749 1483 734 1483 776 1484 748 1484 749 1484 775 1485 734 1485 750 1485 775 1486 776 1486 734 1486 751 1487 750 1487 735 1487 751 1488 775 1488 750 1488 753 1489 735 1489 737 1489 751 1490 735 1490 753 1490 753 1491 737 1491 752 1491 765 1492 752 1492 740 1492 764 1493 752 1493 765 1493 753 1494 752 1494 764 1494 763 1495 740 1495 754 1495 765 1496 740 1496 763 1496 763 1497 754 1497 756 1497 755 1498 757 1498 756 1498 759 1499 756 1499 757 1499 763 1500 756 1500 759 1500 758 1501 757 1501 755 1501 759 1502 757 1502 643 1502 758 1503 643 1503 757 1503 760 1504 759 1504 643 1504 644 1505 760 1505 643 1505 761 1506 763 1506 759 1506 762 1507 761 1507 759 1507 760 1508 762 1508 759 1508 770 1509 765 1509 763 1509 771 1510 770 1510 763 1510 761 1511 771 1511 763 1511 768 1512 764 1512 765 1512 770 1513 768 1513 765 1513 769 1514 766 1514 764 1514 753 1515 764 1515 766 1515 768 1516 769 1516 764 1516 751 1517 766 1517 769 1517 751 1518 753 1518 766 1518 767 1519 769 1519 768 1519 780 1520 751 1520 769 1520 288 1521 780 1521 769 1521 767 1522 288 1522 769 1522 767 1523 768 1523 770 1523 767 1524 770 1524 771 1524 767 1525 771 1525 761 1525 644 1526 761 1526 762 1526 644 1527 762 1527 760 1527 773 1528 744 1528 745 1528 623 1529 745 1529 772 1529 773 1530 745 1530 623 1530 421 1531 772 1531 747 1531 623 1532 772 1532 421 1532 421 1533 747 1533 748 1533 774 1534 748 1534 776 1534 421 1535 748 1535 774 1535 726 1536 776 1536 775 1536 774 1537 776 1537 726 1537 780 1538 775 1538 751 1538 726 1539 775 1539 780 1539 563 1540 536 1540 777 1540 779 1541 777 1541 781 1541 778 1542 777 1542 779 1542 563 1543 777 1543 778 1543 726 1544 781 1544 727 1544 287 1545 779 1545 781 1545 780 1546 287 1546 781 1546 726 1547 780 1547 781 1547

+
+
+
+
+ + + + + + + + + + + + + + +
diff --git a/collada_urdf/test/ir663.dae b/collada_urdf/test/ir663.dae new file mode 100644 index 0000000..08a4be1 --- /dev/null +++ b/collada_urdf/test/ir663.dae @@ -0,0 +1,5517 @@ + + + + + CPFCatiaPlugin + + 2009-02-17T14:09:46Z + 2009-02-17T14:09:46Z + + Z_UP + + + + + + + + + + + + + + + + + + + + + + + + 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 + 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 + 0 0 1 0 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 + 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 0 0 -444.046 0 1 0 -223.999 0 0 1 602.712 0 0 0 1 + 1 -0 0 444.046 -0 1 -0 223.999 0 -0 1 -602.712 -0 0 -0 1 + 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 + 0 0 1 0 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 + 1 0 0 -444.046 0 1 0 -223.999 0 0 1 602.712 0 0 0 1 + 1 0 0 + 1 -0 0 444.046 -0 1 -0 223.999 0 -0 1 -602.712 -0 0 -0 1 + 1 0 0 -444.046 0 1 0 -223.999 0 0 1 602.712 0 0 0 1 + + + + + + + + + + + + + + 1 0 0 -444.046 0 1 0 223.999 0 0 1 602.712 0 0 0 1 + 1 -0 0 444.046 -0 1 -0 -223.999 0 -0 1 -602.712 -0 0 -0 1 + 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 + 0 0 1 0 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 + 1 0 0 -444.046 0 1 0 223.999 0 0 1 602.712 0 0 0 1 + 1 0 0 + 1 -0 0 444.046 -0 1 -0 -223.999 0 -0 1 -602.712 -0 0 -0 1 + 1 0 0 -444.046 0 1 0 223.999 0 0 1 602.712 0 0 0 1 + + + + + + + + + + + + + + 1 0 1.3062e-006 0 0 1 0 0 -1.3062e-006 0 1 892 0 0 0 1 + 1 -0 -1.3062e-006 0.00116513 -0 1 -0 0 1.3062e-006 -0 1 -892 -0 0 -0 1 + 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 + 0 0 1 0 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 + 1 0 1.3062e-006 0 0 1 0 0 -1.3062e-006 0 1 892 0 0 0 1 + 0 1 0 0 + 0 1 0 -62.6141 + 1 -0 -1.3062e-006 0.00116513 -0 1 -0 0 1.3062e-006 -0 1 -892 -0 0 -0 1 + 1 0 1.3062e-006 0 0 1 0 0 -1.3062e-006 0 1 892 0 0 0 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0.944562 0 0.328333 0 0 1 0 0 -0.328333 0 0.944562 892 0 0 0 1 + 0.944562 -0 -0.328333 292.873 -0 1 -0 0 0.328333 -0 0.944562 -842.549 -0 0 -0 1 + 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 + 0 0 1 0 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 + 1 0 1.3062e-006 0 0 1 0 0 -1.3062e-006 0 1 892 0 0 0 1 + 0 1 0 0 + 0 1 0 -62.6141 + 1 -0 -1.3062e-006 0.00116513 -0 1 -0 0 1.3062e-006 -0 1 -892 -0 0 -0 1 + 0.944562 0 0.328333 0 0 1 0 0 -0.328333 0 0.944562 892 0 0 0 1 + 0 1 0 0 + 0 1 0 12.9465 + 0.944562 -0 -0.328333 292.873 -0 1 -0 0 0.328333 -0 0.944562 -842.549 -0 0 -0 1 + 0.944562 0 0.328333 0 0 1 0 0 -0.328333 0 0.944562 892 0 0 0 1 + + + + + + + + + + + + + + + + 1 0 -2.87231e-007 0.00137151 0 1 0 0 2.87231e-007 0 1 1942 0 0 0 1 + 1 -0 2.87231e-007 -0.00192931 -0 1 -0 0 -2.87231e-007 -0 1 -1942 -0 0 -0 1 + 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 + 0 0 1 0 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 + 1 0 1.3062e-006 0 0 1 0 0 -1.3062e-006 0 1 892 0 0 0 1 + 0 1 0 0 + 0 1 0 -62.6141 + 1 -0 -1.3062e-006 0.00116513 -0 1 -0 0 1.3062e-006 -0 1 -892 -0 0 -0 1 + 1 0 -2.87231e-007 0.00137151 0 1 0 0 2.87231e-007 0 1 1942 0 0 0 1 + 0 1 0 0 + 0 1 0 90.0001 + 1 -0 2.87231e-007 -0.00192931 -0 1 -0 0 -2.87231e-007 -0 1 -1942 -0 0 -0 1 + 1 0 -2.87231e-007 0.00137151 0 1 0 0 2.87231e-007 0 1 1942 0 0 0 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 0 -2.87231e-007 1760 0 1 0 0 2.87231e-007 0 1 1942 0 0 0 1 + 1 -0 2.87231e-007 -1760 -0 1 -0 0 -2.87231e-007 -0 1 -1942 -0 0 -0 1 + 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 + 0 0 1 0 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 + 1 0 1.3062e-006 0 0 1 0 0 -1.3062e-006 0 1 892 0 0 0 1 + 0 1 0 0 + 0 1 0 -62.6141 + 1 -0 -1.3062e-006 0.00116513 -0 1 -0 0 1.3062e-006 -0 1 -892 -0 0 -0 1 + 1 0 -2.87231e-007 0.00137151 0 1 0 0 2.87231e-007 0 1 1942 0 0 0 1 + 0 1 0 0 + 0 1 0 90.0001 + 1 -0 2.87231e-007 -0.00192931 -0 1 -0 0 -2.87231e-007 -0 1 -1942 -0 0 -0 1 + 1 0 -2.87231e-007 1760 0 1 0 0 2.87231e-007 0 1 1942 0 0 0 1 + -1 0 0 0 + 1 -0 2.87231e-007 -1760 -0 1 -0 0 -2.87231e-007 -0 1 -1942 -0 0 -0 1 + 1 0 -2.87231e-007 1760 0 1 0 0 2.87231e-007 0 1 1942 0 0 0 1 + + + + + + + + + + + + + + + + 0.866025 0 0.5 1760 0 1 0 0 -0.5 0 0.866025 1942 0 0 0 1 + 0.866025 -0 -0.5 -553.206 -0 1 -0 0 0.5 -0 0.866025 -2561.82 -0 0 -0 1 + 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 + 0 0 1 0 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 + 1 0 1.3062e-006 0 0 1 0 0 -1.3062e-006 0 1 892 0 0 0 1 + 0 1 0 0 + 0 1 0 -62.6141 + 1 -0 -1.3062e-006 0.00116513 -0 1 -0 0 1.3062e-006 -0 1 -892 -0 0 -0 1 + 1 0 -2.87231e-007 0.00137151 0 1 0 0 2.87231e-007 0 1 1942 0 0 0 1 + 0 1 0 0 + 0 1 0 90.0001 + 1 -0 2.87231e-007 -0.00192931 -0 1 -0 0 -2.87231e-007 -0 1 -1942 -0 0 -0 1 + 1 0 -2.87231e-007 1760 0 1 0 0 2.87231e-007 0 1 1942 0 0 0 1 + -1 0 0 0 + 1 -0 2.87231e-007 -1760 -0 1 -0 0 -2.87231e-007 -0 1 -1942 -0 0 -0 1 + 0.866025 0 0.5 1760 0 1 0 0 -0.5 0 0.866025 1942 0 0 0 1 + 1 0 0 0 + 0.866025 -0 -0.5 -553.206 -0 1 -0 0 0.5 -0 0.866025 -2561.82 -0 0 -0 1 + 0.866025 0 0.5 1760 0 1 0 0 -0.5 0 0.866025 1942 0 0 0 1 + + + + + + + + + + + + + + + + + + 0.866025 0 -0.5 1760 0 1 0 0 0.5 0 0.866025 1942 0 0 0 1 + 0.866025 -0 0.5 -2495.21 -0 1 -0 0 -0.5 -0 0.866025 -801.821 -0 0 -0 1 + 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 + 0 0 1 0 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 + 1 0 1.3062e-006 0 0 1 0 0 -1.3062e-006 0 1 892 0 0 0 1 + 0 1 0 0 + 0 1 0 -62.6141 + 1 -0 -1.3062e-006 0.00116513 -0 1 -0 0 1.3062e-006 -0 1 -892 -0 0 -0 1 + 1 0 -2.87231e-007 0.00137151 0 1 0 0 2.87231e-007 0 1 1942 0 0 0 1 + 0 1 0 0 + 0 1 0 90.0001 + 1 -0 2.87231e-007 -0.00192931 -0 1 -0 0 -2.87231e-007 -0 1 -1942 -0 0 -0 1 + 1 0 -2.87231e-007 1760 0 1 0 0 2.87231e-007 0 1 1942 0 0 0 1 + -1 0 0 0 + 1 -0 2.87231e-007 -1760 -0 1 -0 0 -2.87231e-007 -0 1 -1942 -0 0 -0 1 + 0.866025 0 0.5 1760 0 1 0 0 -0.5 0 0.866025 1942 0 0 0 1 + 1 0 0 0 + 0.866025 -0 -0.5 -553.206 -0 1 -0 0 0.5 -0 0.866025 -2561.82 -0 0 -0 1 + 0.866025 0 -0.5 1760 0 1 0 0 0.5 0 0.866025 1942 0 0 0 1 + -1 0 0 0 + 0.866025 -0 0.5 -2495.21 -0 1 -0 0 -0.5 -0 0.866025 -801.821 -0 0 -0 1 + 0.866025 0 -0.5 1760 0 1 0 0 0.5 0 0.866025 1942 0 0 0 1 + + + + + + + + + + + + + + + + + + 1 0 2.74734e-007 1760 0 1 0 0 -2.74734e-007 0 1 1942 0 0 0 1 + 1 -0 -2.74734e-007 -1760 -0 1 -0 0 2.74734e-007 -0 1 -1942 -0 0 -0 1 + 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 + 0 0 1 0 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 + 1 0 1.3062e-006 0 0 1 0 0 -1.3062e-006 0 1 892 0 0 0 1 + 0 1 0 0 + 0 1 0 -62.6141 + 1 -0 -1.3062e-006 0.00116513 -0 1 -0 0 1.3062e-006 -0 1 -892 -0 0 -0 1 + 1 0 -2.87231e-007 0.00137151 0 1 0 0 2.87231e-007 0 1 1942 0 0 0 1 + 0 1 0 0 + 0 1 0 90.0001 + 1 -0 2.87231e-007 -0.00192931 -0 1 -0 0 -2.87231e-007 -0 1 -1942 -0 0 -0 1 + 1 0 -2.87231e-007 1760 0 1 0 0 2.87231e-007 0 1 1942 0 0 0 1 + -1 0 0 0 + 1 -0 2.87231e-007 -1760 -0 1 -0 0 -2.87231e-007 -0 1 -1942 -0 0 -0 1 + 0.866025 0 0.5 1760 0 1 0 0 -0.5 0 0.866025 1942 0 0 0 1 + 1 0 0 0 + 0.866025 -0 -0.5 -553.206 -0 1 -0 0 0.5 -0 0.866025 -2561.82 -0 0 -0 1 + 0.866025 0 -0.5 1760 0 1 0 0 0.5 0 0.866025 1942 0 0 0 1 + -1 0 0 0 + 0.866025 -0 0.5 -2495.21 -0 1 -0 0 -0.5 -0 0.866025 -801.821 -0 0 -0 1 + 1 0 2.74734e-007 1760 0 1 0 0 -2.74734e-007 0 1 1942 0 0 0 1 + 1 0 0 0 + 1 -0 -2.74734e-007 -1760 -0 1 -0 0 2.74734e-007 -0 1 -1942 -0 0 -0 1 + 1 0 2.74734e-007 1760 0 1 0 0 -2.74734e-007 0 1 1942 0 0 0 1 + + + + + + + + + + 0.99932 0 -0.0368738 400.001 0 1 0 0 0.0368738 0 0.99932 1942 0 0 0 1 + 0.99932 -0 0.0368738 -471.338 -0 1 -0 0 -0.0368738 -0 0.99932 -1925.93 -0 0 -0 1 + 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 + 0 0 1 0 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 + 1 0 1.3062e-006 0 0 1 0 0 -1.3062e-006 0 1 892 0 0 0 1 + 0 1 0 0 + 0 1 0 -62.6141 + 1 -0 -1.3062e-006 0.00116513 -0 1 -0 0 1.3062e-006 -0 1 -892 -0 0 -0 1 + 1 0 -2.87231e-007 0.00137151 0 1 0 0 2.87231e-007 0 1 1942 0 0 0 1 + 0 1 0 0 + 0 1 0 90.0001 + 1 -0 2.87231e-007 -0.00192931 -0 1 -0 0 -2.87231e-007 -0 1 -1942 -0 0 -0 1 + 0.99932 0 -0.0368738 400.001 0 1 0 0 0.0368738 0 0.99932 1942 0 0 0 1 + 0 1 0 0 + 0 1 0 92.1132 + 0.99932 -0 0.0368738 -471.338 -0 1 -0 0 -0.0368738 -0 0.99932 -1925.93 -0 0 -0 1 + 0.99932 0 -0.0368738 400.001 0 1 0 0 0.0368738 0 0.99932 1942 0 0 0 1 + + + + + + + + + + + + + + + + + + + 1 0 2.00674e-006 0.000751066 0 1 0 0 -2.00674e-006 0 1 1467 0 0 0 1 + 1 -0 -2.00674e-006 0.00219282 -0 1 -0 0 2.00674e-006 -0 1 -1467 -0 0 -0 1 + 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 + 0 0 1 0 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 + 1 0 1.3062e-006 0 0 1 0 0 -1.3062e-006 0 1 892 0 0 0 1 + 0 1 0 0 + 0 1 0 -62.6141 + 1 -0 -1.3062e-006 0.00116513 -0 1 -0 0 1.3062e-006 -0 1 -892 -0 0 -0 1 + 1 0 2.00674e-006 0.000751066 0 1 0 0 -2.00674e-006 0 1 1467 0 0 0 1 + 0 1 0 0 + 0 1 0 -4.33092e-005 + 1 -0 -2.00674e-006 0.00219282 -0 1 -0 0 2.00674e-006 -0 1 -1467 -0 0 -0 1 + 1 0 2.00674e-006 0.000751066 0 1 0 0 -2.00674e-006 0 1 1467 0 0 0 1 + + + + + + + + + + + + + + + + + 1 0 2.00674e-006 -6.16639e-005 0 1 0 0 -2.00674e-006 0 1 1062 0 0 0 1 + 1 -0 -2.00674e-006 0.00219282 -0 1 -0 0 2.00674e-006 -0 1 -1062 -0 0 -0 1 + 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 + 0 0 1 0 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 + 1 0 1.3062e-006 0 0 1 0 0 -1.3062e-006 0 1 892 0 0 0 1 + 0 1 0 0 + 0 1 0 -62.6141 + 1 -0 -1.3062e-006 0.00116513 -0 1 -0 0 1.3062e-006 -0 1 -892 -0 0 -0 1 + 1 0 2.00674e-006 0.000751066 0 1 0 0 -2.00674e-006 0 1 1467 0 0 0 1 + 0 1 0 0 + 0 1 0 -4.33092e-005 + 1 -0 -2.00674e-006 0.00219282 -0 1 -0 0 2.00674e-006 -0 1 -1467 -0 0 -0 1 + 1 0 2.00674e-006 -6.16639e-005 0 1 0 0 -2.00674e-006 0 1 1062 0 0 0 1 + 0 0 1 + 0 0 405 + 1 -0 -2.00674e-006 0.00219282 -0 1 -0 0 2.00674e-006 -0 1 -1062 -0 0 -0 1 + 1 0 2.00674e-006 -6.16639e-005 0 1 0 0 -2.00674e-006 0 1 1062 0 0 0 1 + + + + + + + + + + + + + + + 0.998284 0 -0.058559 -606.997 0 1 0 -60 0.058559 0 0.998284 1239 0 0 0 1 + 0.998284 -0 0.058559 533.401 -0 1 -0 60 -0.058559 -0 0.998284 -1272.42 -0 0 -0 1 + 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 + 0 0 1 0 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 + 0.998284 0 -0.058559 -606.997 0 1 0 -60 0.058559 0 0.998284 1239 0 0 0 1 + 0 1 0 0 + 0 1 0 33.1121 + 0.998284 -0 0.058559 533.401 -0 1 -0 60 -0.058559 -0 0.998284 -1272.42 -0 0 -0 1 + 0.998284 0 -0.058559 -606.997 0 1 0 -60 0.058559 0 0.998284 1239 0 0 0 1 + + + + + + + + + + + + + + + + + + + + 0.998284 0 -0.058559 -70.6719 0 1 0 -60 0.058559 0 0.998284 1270.46 0 0 0 1 + 0.998284 -0 0.058559 -3.84619 -0 1 -0 60 -0.058559 -0 0.998284 -1272.42 -0 0 -0 1 + 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 + 0 0 1 0 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 + 0.998284 0 -0.058559 -606.997 0 1 0 -60 0.058559 0 0.998284 1239 0 0 0 1 + 0 1 0 0 + 0 1 0 33.1121 + 0.998284 -0 0.058559 533.401 -0 1 -0 60 -0.058559 -0 0.998284 -1272.42 -0 0 -0 1 + 0.998284 0 -0.058559 -70.6719 0 1 0 -60 0.058559 0 0.998284 1270.46 0 0 0 1 + 1 0 0 + -537.247 -0 -0 + 0.998284 -0 0.058559 -3.84619 -0 1 -0 60 -0.058559 -0 0.998284 -1272.42 -0 0 -0 1 + 0.998284 0 -0.058559 -70.6719 0 1 0 -60 0.058559 0 0.998284 1270.46 0 0 0 1 + + + + + + + + + + 0.888604 0 -0.458675 -674.503 0 1 0 130 0.458675 0 0.888604 926.004 0 0 0 1 + 0.888604 -0 0.458675 174.631 -0 1 -0 -130 -0.458675 -0 0.888604 -1132.23 -0 0 -0 1 + 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 + 0 0 1 0 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 + 0.888604 0 -0.458675 -674.503 0 1 0 130 0.458675 0 0.888604 926.004 0 0 0 1 + 0 1 0 0 + 0 1 0 30.1876 + 0.888604 -0 0.458675 174.631 -0 1 -0 -130 -0.458675 -0 0.888604 -1132.23 -0 0 -0 1 + 0.888604 0 -0.458675 -674.503 0 1 0 130 0.458675 0 0.888604 926.004 0 0 0 1 + + + + + + + + + + + + + + + + + + + + 0.888604 0 -0.458675 -140.995 0 1 0 130 0.458675 0 0.888604 1201.39 0 0 0 1 + 0.888604 -0 0.458675 -425.758 -0 1 -0 -130 -0.458675 -0 0.888604 -1132.23 -0 0 -0 1 + 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 + 0 0 1 0 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 + 0.888604 0 -0.458675 -674.503 0 1 0 130 0.458675 0 0.888604 926.004 0 0 0 1 + 0 1 0 0 + 0 1 0 30.1876 + 0.888604 -0 0.458675 174.631 -0 1 -0 -130 -0.458675 -0 0.888604 -1132.23 -0 0 -0 1 + 0.888604 0 -0.458675 -140.995 0 1 0 130 0.458675 0 0.888604 1201.39 0 0 0 1 + 1 0 0 + -600.389 -0 -0 + 0.888604 -0 0.458675 -425.758 -0 1 -0 -130 -0.458675 -0 0.888604 -1132.23 -0 0 -0 1 + 0.888604 0 -0.458675 -140.995 0 1 0 130 0.458675 0 0.888604 1201.39 0 0 0 1 + + + + + + + + + + + + + + + + -705.027 -492.794 -85.0031 -492.908 -704.947 -85.0043 -492.908 -704.947 -35.0045 -705.027 -492.794 -35.0034 -841.474 -176.705 -85.0021 -705.027 -492.794 -85.0031 -705.027 -492.794 -35.0034 -841.474 -176.706 -35.0014 -841.474 -176.706 -35.0014 -705.027 -492.794 -35.0034 -492.908 -704.947 -35.0045 -176.847 -841.442 -35.0045 -53.0922 -717.709 -35.0042 -717.721 -52.9723 -35.0013 -841.474 -176.706 -35.0014 -717.721 -52.9723 -35.0013 -717.721 -52.9721 -85.0011 -841.474 -176.705 -85.0021 -53.0921 -717.708 -85.0038 -717.721 -52.9721 -85.0011 -717.721 -52.9723 -35.0013 -53.0922 -717.709 -35.0042 -717.721 -52.9721 -85.0011 -53.0921 -717.708 -85.0038 -176.847 -841.442 -85.0043 -492.908 -704.947 -85.0043 -705.027 -492.794 -85.0031 -841.474 -176.705 -85.0021 -492.908 -704.947 -85.0043 -176.847 -841.442 -85.0043 -176.847 -841.442 -35.0045 -492.908 -704.947 -35.0045 -176.847 -841.442 -35.0045 -176.847 -841.442 -85.0043 -53.0921 -717.708 -85.0038 -53.0922 -717.709 -35.0042 395 684.16 0 684.16 395 0 684.16 395 -35 395 684.16 -35 0 790 0 395 684.16 0 395 684.16 -35 0 790 -35 -395 684.16 0 0 790 0 0 790 -35 -395 684.16 -35 -684.16 395 0 -395 684.16 0 -395 684.16 -35 -684.16 395 -35 -790 0 0 -684.16 395 0 -684.16 395 -35 -790 0 -35 -790 0 -35 -684.16 -395 -35 -684.16 -395 0 -790 0 0 -395 -684.16 -35 0 -790 -35 0 -790 0 -395 -684.16 0 0 -790 -35 395 -684.16 -35 395 -684.16 0 0 -790 0 684.16 -395 -35 790 0 -35 790 0 0 684.16 -395 0 395 -684.16 -35 684.16 -395 -35 684.16 -395 0 395 -684.16 0 684.16 -395 -35 395 -684.16 -35 0 -790 -35 -395 -684.16 -35 -684.16 -395 -35 -790 0 -35 -684.16 395 -35 -395 684.16 -35 0 790 -35 395 684.16 -35 684.16 395 -35 790 0 -35 -684.16 -395 -35 -395 -684.16 -35 -395 -684.16 0 -684.16 -395 0 -684.16 -395 0 -395 -684.16 0 0 -790 0 395 -684.16 0 684.16 -395 0 790 0 0 684.16 395 0 395 684.16 0 0 790 0 -395 684.16 0 -684.16 395 0 -790 0 0 684.16 395 0 790 0 0 790 0 -35 684.16 395 -35 -841.474 176.705 -85.0021 -717.721 52.9721 -85.0011 -717.721 52.9723 -35.0013 -841.474 176.706 -35.0014 -705.027 492.794 -35.0034 -492.908 704.947 -35.0045 -492.908 704.947 -85.0043 -705.027 492.794 -85.0031 -841.474 176.706 -35.0014 -705.027 492.794 -35.0034 -705.027 492.794 -85.0031 -841.474 176.705 -85.0021 -841.474 176.705 -85.0021 -705.027 492.794 -85.0031 -492.908 704.947 -85.0043 -176.847 841.442 -85.0043 -53.0921 717.708 -85.0038 -717.721 52.9721 -85.0011 -492.908 704.947 -35.0045 -176.847 841.442 -35.0045 -176.847 841.442 -85.0043 -492.908 704.947 -85.0043 -717.721 52.9723 -35.0013 -53.0922 717.709 -35.0042 -176.847 841.442 -35.0045 -492.908 704.947 -35.0045 -705.027 492.794 -35.0034 -841.474 176.706 -35.0014 -53.0922 717.709 -35.0042 -717.721 52.9723 -35.0013 -717.721 52.9721 -85.0011 -53.0921 717.708 -85.0038 -53.0922 717.709 -35.0042 -53.0921 717.708 -85.0038 -176.847 841.442 -85.0043 -176.847 841.442 -35.0045 717.708 -53.0914 -35 52.9732 -717.718 -35.004 52.9732 -717.718 -85.0037 717.708 -53.0911 -84.9998 492.794 -705.025 -85.0035 176.707 -841.47 -85.0044 52.9732 -717.718 -85.0037 717.708 -53.0911 -84.9998 841.442 -176.845 -84.9998 704.944 -492.91 -85.0018 176.707 -841.471 -35.0037 176.707 -841.47 -85.0044 492.794 -705.025 -85.0035 492.794 -705.025 -35.0037 492.794 -705.025 -35.0037 492.794 -705.025 -85.0035 704.944 -492.91 -85.0018 704.944 -492.911 -35.002 704.944 -492.911 -35.002 704.944 -492.91 -85.0018 841.442 -176.845 -84.9998 841.442 -176.846 -35 841.442 -176.846 -35 841.442 -176.845 -84.9998 717.708 -53.0911 -84.9998 717.708 -53.0914 -35 841.442 -176.846 -35 717.708 -53.0914 -35 52.9732 -717.718 -35.004 176.707 -841.471 -35.0037 492.794 -705.025 -35.0037 704.944 -492.911 -35.002 176.707 -841.471 -35.0037 52.9732 -717.718 -35.004 52.9732 -717.718 -85.0037 176.707 -841.47 -85.0044 -622.009 -119.951 234.999 -622.008 119.951 234.999 -498.012 -119.959 234.998 -498.012 -119.959 234.998 -498.012 119.959 234.998 -498.012 119.959 234.998 -498.012 -119.959 299.998 -498.012 119.959 299.998 -622.009 -119.951 234.999 -622.008 -119.951 299.998 -622.008 -119.951 299.998 -622.008 119.951 234.999 -622.008 119.951 299.999 -622.008 119.951 299.999 -613.702 -119.951 330.999 -613.702 -119.951 330.999 -613.702 119.951 330.999 -613.702 119.951 330.999 -591.008 -119.951 353.692 -591.008 -119.951 353.692 -591.008 119.951 353.692 -591.008 119.951 353.692 -560.008 -119.951 361.999 -560.008 -119.951 361.999 -560.008 119.951 361.999 -560.008 119.951 361.999 -529.008 -119.951 353.692 -529.008 -119.951 353.692 -529.008 119.951 353.692 -529.008 119.951 353.692 -506.314 -119.951 330.999 -506.314 -119.951 330.999 -506.314 119.951 330.999 -506.314 119.951 330.999 -498.008 -119.951 234.999 -498.008 -119.951 234.999 -498.008 -119.951 234.999 -498.008 119.951 234.999 -498.008 119.951 234.999 -498.008 119.951 234.999 -498.008 119.951 299.999 -498.008 119.951 299.999 -498.008 -119.951 299.999 -498.008 -119.951 299.999 704.944 492.911 -35.002 492.794 705.025 -35.0037 176.707 841.471 -35.0037 52.9732 717.718 -35.004 717.708 53.0914 -35 841.442 176.846 -35 704.944 492.91 -85.0018 841.442 176.845 -84.9998 717.708 53.0911 -84.9998 52.9732 717.718 -85.0037 176.707 841.47 -85.0044 492.794 705.025 -85.0035 717.708 53.0911 -84.9998 52.9732 717.718 -85.0037 52.9732 717.718 -35.004 717.708 53.0914 -35 717.708 53.0914 -35 717.708 53.0911 -84.9998 841.442 176.845 -84.9998 841.442 176.846 -35 841.442 176.846 -35 841.442 176.845 -84.9998 704.944 492.91 -85.0018 704.944 492.911 -35.002 704.944 492.911 -35.002 704.944 492.91 -85.0018 492.794 705.025 -85.0035 492.794 705.025 -35.0037 492.794 705.025 -35.0037 492.794 705.025 -85.0035 176.707 841.47 -85.0044 176.707 841.471 -35.0037 176.707 841.471 -35.0037 176.707 841.47 -85.0044 52.9732 717.718 -85.0037 52.9732 717.718 -35.004 -690 0 0 -626.12 -289.952 234.997 -626.12 -289.952 234.997 -626.12 -289.952 234.997 -626.12 -289.951 -0.001953 -626.12 -289.951 -0.001953 -626.12 289.951 -0.001953 -626.12 289.951 -0.001953 -620.36 -289.951 0 -620.36 -289.951 0 -620.36 289.951 0 -620.36 289.951 0 -597.558 -345 0 -597.558 345 0 -539.873 289.955 235 -539.873 289.955 235 -539.873 289.955 235 -487.904 -487.904 0 -487.904 487.904 0 -345 -597.558 0 -345 597.558 0 -178.585 -666.489 0 -178.585 666.489 0 -159.174 594.044 235 -159.174 594.044 235 0 -690 0 0 -615 235 0 -615 235 0 690 0 178.585 -666.489 0 178.585 666.489 0 345 -597.558 0 345 597.558 0 434.871 434.871 235 434.871 434.871 235 487.904 -487.904 0 487.904 487.904 0 532.606 -307.5 235 532.606 -307.5 235 594.044 159.174 235 594.044 159.174 235 597.557 -345 0 597.557 345 0 666.489 -178.585 0 666.489 178.585 0 690 0 0 -690.004 -0.057995 234.999 -626.12 289.952 234.997 -626.12 289.952 234.997 -539.873 -289.955 235 -539.873 -289.955 235 -532.606 -307.5 235 -532.606 307.5 235 -434.871 -434.871 235 -434.871 434.871 235 -307.5 -532.606 235 -307.5 532.606 235 -159.174 -594.044 235 0 615 235 159.174 -594.044 235 159.174 594.044 235 307.5 -532.606 235 307.5 532.606 235 434.871 -434.871 235 532.606 307.5 235 594.044 -159.174 235 615 0 235 + + + + + + + + + + -0.827366 -0.561663 0 -0.561785 -0.827283 0 -0.561785 -0.827283 0 -0.827366 -0.561663 0 -0.918115 -0.396313 0 -0.827366 -0.561663 0 -0.827366 -0.561663 0 -0.918115 -0.396313 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 -0.707022 0.707191 0 -0.707022 0.707191 0 -0.707022 0.707191 0 -0.707022 0.707191 0 0.707191 0.707022 0 0.707191 0.707022 0 0.707191 0.707022 0 0.707191 0.707022 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.561785 -0.827283 0 -0.396466 -0.918049 0 -0.396466 -0.918049 0 -0.561785 -0.827283 0 0.707022 -0.707191 0 0.707022 -0.707191 0 0.707022 -0.707191 0 0.707022 -0.707191 0 0.499985 0.866034 0 0.866034 0.499985 0 0.866034 0.499985 0 0.499985 0.866034 0 0 1 0 0.499985 0.866034 0 0.499985 0.866034 0 0 1 0 -0.499985 0.866034 0 0 1 0 0 1 0 -0.499985 0.866034 0 -0.866034 0.499985 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.866034 0.499985 0 -1 0 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -1 0 0 -1 0 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -1 0 0 -0.499985 -0.866034 0 0 -1 0 0 -1 0 -0.499985 -0.866034 0 0 -1 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0 -1 0 0.866034 -0.499985 0 1 0 0 1 0 0 0.866034 -0.499985 0 0.499985 -0.866034 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.499985 -0.866034 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.866034 -0.499985 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.866034 -0.499985 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0.866034 0.499985 0 1 0 0 1 0 0 0.866034 0.499985 0 -0.707022 -0.707191 0 -0.707022 -0.707191 0 -0.707022 -0.707191 0 -0.707022 -0.707191 0 -0.827366 0.561663 0 -0.561785 0.827283 0 -0.561785 0.827283 0 -0.827366 0.561663 0 -0.918115 0.396313 0 -0.827366 0.561663 0 -0.827366 0.561663 0 -0.918115 0.396313 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.561785 0.827283 0 -0.396466 0.918049 0 -0.396466 0.918049 0 -0.561785 0.827283 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0.707191 -0.707022 0 0.707191 -0.707022 0 0.707191 -0.707022 0 0.707191 -0.707022 0 0.707022 0.707191 0 0.707022 0.707191 0 0.707022 0.707191 0 0.707022 0.707191 0 0.707022 -0.707191 0 0.707022 -0.707191 0 0.707022 -0.707191 0 0.707022 -0.707191 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0.396313 -0.918115 0 0.396313 -0.918115 0 0.561663 -0.827366 0 0.561663 -0.827366 0 0.561663 -0.827366 0 0.561663 -0.827366 0 0.827283 -0.561785 0 0.827283 -0.561785 0 0.827283 -0.561785 0 0.827283 -0.561785 0 0.918049 -0.396466 0 0.918049 -0.396466 0 0.707191 0.707022 0 0.707191 0.707022 0 0.707191 0.707022 0 0.707191 0.707022 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 -0.707191 -0.707022 0 -0.707191 -0.707022 0 -0.707191 -0.707022 0 -0.707191 -0.707022 0 0 0 -1 0 0 -1 0 0 -1 1 0 0 0 0 -1 1 0 0 1 0 0 1 0 0 0 -1 0 -0.996216 0 0.0869167 0 -1 0 0 1 0 -0.996216 0 0.0869167 0 1 0 -0.866034 0 0.499985 0 -1 0 -0.866034 0 0.499985 0 1 0 -0.499985 0 0.866034 0 -1 0 -0.499985 0 0.866034 0 1 0 0 0 1 0 -1 0 0 0 1 0 1 0 0 -1 0 0.499985 0 0.866034 0 1 0 0.499985 0 0.866034 0 -1 0 0.866034 0 0.499985 0 1 0 0.866034 0 0.499985 0 0 -1 0 -1 0 1 0 0 0 0 -1 0 1 0 1 0 0 0 1 0 0.991449 0 0.130497 0 -1 0 0.991449 0 0.130497 -1 1.27208e-007 4.69506e-007 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0.707022 0.707191 0 0.707022 0.707191 0 0.707022 0.707191 0 0.707022 0.707191 0 0.707191 -0.707022 0 0.707191 -0.707022 0 0.707191 -0.707022 0 0.707191 -0.707022 0 0.918049 0.396466 0 0.918049 0.396466 0 0.827283 0.561785 0 0.827283 0.561785 0 0.827283 0.561785 0 0.827283 0.561785 0 0.561663 0.827366 0 0.561663 0.827366 0 0.561663 0.827366 0 0.561663 0.827366 0 0.396313 0.918115 0 0.396313 0.918115 0 -0.707191 0.707022 0 -0.707191 0.707022 0 -0.707191 0.707022 0 -0.707191 0.707022 0 -1 0 0 -0.97658 -0.215155 -3.05185e-005 -3.05185e-005 -1 0 0 0 1 -0.97658 -0.215155 -3.05185e-005 -3.05185e-005 -1 0 -0.976587 0.215125 0 -3.05185e-005 1 0 -0.880839 -0.364849 0.301675 -3.05185e-005 -1 0 -0.880839 0.364849 0.301675 -3.05185e-005 1 0 -0.825048 -0.476302 0.304025 -0.825048 0.476302 0.304025 -0.880839 0.364849 0.301675 -3.05185e-005 1 0 0 0 1 -0.673605 -0.673666 0.304025 -0.673605 0.673666 0.304025 -0.476302 -0.825048 0.304025 -0.476302 0.825048 0.304025 -0.246559 -0.920205 0.304025 -0.246559 0.920205 0.304025 -0.246559 0.920205 0.304025 0 0 1 0 -0.952664 0.304025 0 0 1 0 -0.952664 0.304025 0 0.952664 0.304025 0.246559 -0.920205 0.304025 0.246559 0.920205 0.304025 0.476302 -0.825048 0.304025 0.476302 0.825048 0.304025 0 0 1 0.673605 0.673666 0.304025 0.673605 -0.673666 0.304025 0.673605 0.673666 0.304025 0 0 1 0.825048 -0.476302 0.304025 0 0 1 0.920205 0.246559 0.304025 0.825048 -0.476302 0.304025 0.825048 0.476302 0.304025 0.920205 -0.246559 0.304025 0.920205 0.246559 0.304025 0.952664 0 0.304025 -1 0 0 -0.976587 0.215125 0 -3.05185e-005 1 0 -0.880839 -0.364849 0.301675 -3.05185e-005 -1 0 -0.825048 -0.476302 0.304025 -0.825048 0.476302 0.304025 -0.673605 -0.673666 0.304025 -0.673605 0.673666 0.304025 -0.476302 -0.825048 0.304025 -0.476302 0.825048 0.304025 -0.246559 -0.920205 0.304025 0 0.952664 0.304025 0.246559 -0.920205 0.304025 0.246559 0.920205 0.304025 0.476302 -0.825048 0.304025 0.476302 0.825048 0.304025 0.673605 -0.673666 0.304025 0.825048 0.476302 0.304025 0.920205 -0.246559 0.304025 0.952664 0 0.304025 -1.37012e-005 -5.721e-010 1 + + + + + + + + + + + + + + +

0 0 1 1 2 2 3 3

+

4 4 5 5 6 6 7 7

+

8 8 9 9 10 10 11 11 12 12 13 13

+

14 14 15 15 16 16 17 17

+

18 18 19 19 20 20 21 21

+

22 22 23 23 24 24 25 25 26 26 27 27

+

28 28 29 29 30 30 31 31

+

32 32 33 33 34 34 35 35

+
+ + + +

36 36 37 37 38 38 39 39

+

40 40 41 41 42 42 43 43

+

44 44 45 45 46 46 47 47

+

48 48 49 49 50 50 51 51

+

52 52 53 53 54 54 55 55

+

56 56 57 57 58 58 59 59

+

60 60 61 61 62 62 63 63

+

64 64 65 65 66 66 67 67

+

68 68 69 69 70 70 71 71

+

72 72 73 73 74 74 75 75

+

76 76 77 77 78 78 79 79 80 80 81 81 82 82 83 83 84 84 85 85 86 86 87 87

+

88 88 89 89 90 90 91 91

+

92 92 93 93 94 94 95 95 96 96 97 97 98 98 99 99 100 100 101 101 102 102 103 103

+

104 104 105 105 106 106 107 107

+
+ + + +

108 108 109 109 110 110 111 111

+

112 112 113 113 114 114 115 115

+

116 116 117 117 118 118 119 119

+

120 120 121 121 122 122 123 123 124 124 125 125

+

126 126 127 127 128 128 129 129

+

130 130 131 131 132 132 133 133 134 134 135 135

+

136 136 137 137 138 138 139 139

+

140 140 141 141 142 142 143 143

+
+ + + +

144 144 145 145 146 146 147 147

+

148 148 149 149 150 150 151 151 152 152 153 153

+

154 154 155 155 156 156 157 157

+

158 158 159 159 160 160 161 161

+

162 162 163 163 164 164 165 165

+

166 166 167 167 168 168 169 169

+

170 170 171 171 172 172 173 173 174 174 175 175

+

176 176 177 177 178 178 179 179

+
+ + + +

188 224 190 224 193 224 191 224

+

188 224 190 224 193 224 191 224

+
+ + + +

202 202 207 207 209 209 204 204

+

198 198 202 202 204 204 200 200

+

194 194 198 198 200 200 196 196

+

189 189 194 194 196 196 192 192

+

214 214 180 180 181 181 217 217

+

218 218 191 191 193 193 197 197 201 201 205 205 208 208 212 212 220 220

+

211 211 223 223 221 221 213 213

+

207 207 211 211 213 213 209 209

+

210 210 206 206 203 203 199 199 195 195 190 190 188 188 215 215 222 222

+

223 223 216 216 219 219 221 221

+
+ + + +

202 202 207 207 209 209 204 204

+

198 198 202 202 204 204 200 200

+

194 194 198 198 200 200 196 196

+

189 189 194 194 196 196 192 192

+

214 214 180 180 181 181 217 217

+

218 218 191 191 193 193 197 197 201 201 205 205 208 208 212 212 220 220

+

211 211 223 223 221 221 213 213

+

207 207 211 211 213 213 209 209

+

210 210 206 206 203 203 199 199 195 195 190 190 188 188 215 215 222 222

+

223 223 216 216 219 219 221 221

+

186 186 183 183 185 185 187 187

+

182 182 180 180 181 181 184 184

+
+ + + +

224 225 225 226 226 227 227 228 228 229 229 230

+

230 231 231 232 232 233 233 234 234 235 235 236

+

236 237 237 238 238 239 239 240

+

240 241 241 242 242 243 243 244

+

244 245 245 246 246 247 247 248

+

248 249 249 250 250 251 251 252

+

252 253 253 254 254 255 255 256

+

256 257 257 258 258 259 259 260

+
+ + + +

276 328 308 328 306 328 263 328 310 328

+

310 328 311 328 313 328 315 328 317 328 287 328 319 328 321 328 323 328 298 328 325 328 326 328 300 328 324 328 294 328 322 328 320 328 318 328 284 328 316 328 314 328 312 328 276 328

+
+ + + +

260 261 264 265 261 262 306 307

+

310 311 262 263 265 266 269 270

+

268 269 272 273 311 312 309 310

+

272 273 277 278 313 314 311 312

+

277 278 279 280 315 316 313 314

+

279 280 281 282 317 318 315 316

+

281 282 285 286 287 288 317 318

+

285 286 289 290 319 320 287 288

+

289 290 291 292 321 322 319 320

+

291 292 295 296 323 324 321 322

+

295 296 301 302 298 299 323 324

+

301 302 303 304 325 326 298 299

+

303 304 305 306 326 327 325 326

+

300 301 326 327 305 306 304 305

+

324 325 300 301 304 305 302 303

+

294 295 324 325 302 303 296 297

+

322 323 294 295 296 297 292 293

+

320 321 322 323 292 293 290 291

+

318 319 320 321 290 291 288 289

+

283 284 318 319 288 289 282 283

+

316 317 283 284 282 283 280 281

+

314 315 316 317 280 281 278 279

+

312 313 314 315 278 279 273 274

+

274 275 312 313 273 274 270 271

+

271 272 267 268 308 309 275 276

+

307 308 266 267 260 261 306 307

+
+
+ + + CAT3DBagRep + + +
+ + + + 210 289.999 64.3515 210.001 289.999 -108.001 310 290 57.9996 310 289.999 115.304 310 379.999 115.304 310 289.999 115.304 310 290 57.9996 309.999 380 57.9992 309.999 380 57.9992 310 290 57.9996 210.001 289.999 -108.001 210 379.999 -108.001 210 379.999 -108.001 210.001 289.999 -108.001 210 289.999 64.3515 210 379.999 64.3511 210 379.999 64.3511 210 289.999 64.3515 310 289.999 115.304 310 379.999 115.304 210 379.999 64.3511 310 379.999 115.304 309.999 380 57.9992 210 379.999 -108.001 -652.003 -5 -4.96759 -635.532 -5 11.5036 -629.503 -5 34.0036 -635.532 -5 56.5036 -652.003 -5 72.9747 -674.503 -5 79.0036 -697.003 -5 72.9747 -713.474 -5 56.5036 -719.503 -5 34.0036 -713.474 -5 11.5036 -697.003 -5 -4.96758 -674.503 -5 -10.9964 -713.474 0 11.5036 -697.003 0 -4.96758 -697.003 -5 -4.96758 -713.474 -5 11.5036 -719.503 0 34.0036 -713.474 0 11.5036 -713.474 -5 11.5036 -719.503 -5 34.0036 -713.474 0 56.5036 -719.503 0 34.0036 -719.503 -5 34.0036 -713.474 -5 56.5036 -697.003 0 72.9747 -713.474 0 56.5036 -713.474 -5 56.5036 -697.003 -5 72.9747 -674.503 0 79.0036 -697.003 0 72.9747 -697.003 -5 72.9747 -674.503 -5 79.0036 -652.003 0 72.9747 -674.503 0 79.0036 -674.503 -5 79.0036 -652.003 -5 72.9747 -635.532 0 56.5036 -652.003 0 72.9747 -652.003 -5 72.9747 -635.532 -5 56.5036 -629.503 0 34.0036 -635.532 0 56.5036 -635.532 -5 56.5036 -629.503 -5 34.0036 -635.532 0 11.5036 -629.503 0 34.0036 -629.503 -5 34.0036 -635.532 -5 11.5036 -652.003 0 -4.96759 -635.532 0 11.5036 -635.532 -5 11.5036 -652.003 -5 -4.96759 -674.503 0 -10.9964 -652.003 0 -4.96759 -652.003 -5 -4.96759 -674.503 -5 -10.9964 -697.003 0 -4.96758 -674.503 0 -10.9964 -674.503 -5 -10.9964 -697.003 -5 -4.96758 -479.999 -136.499 -240.003 -479.999 -136.499 -240.003 -479.999 -116.499 -240.003 -479.999 -116.499 -240.003 -479.998 -136.5 -330.003 -479.998 -136.5 -330.003 -479.998 -116.499 -330.003 -479.998 -116.499 -330.003 -429.999 -116.499 -240.003 -429.999 -116.499 -240.003 -429.999 -136.499 -240.003 -429.999 -136.499 -240.003 -389.999 -116.5 -330.002 -389.999 -116.5 -330.002 -389.998 -136.5 -330.002 -389.998 -136.5 -330.002 -336.012 -116.499 -80.6659 -336.012 -136.499 -80.6658 -234.076 -116.5 -154.727 -234.076 -136.499 -154.727 -234.076 -116.499 -154.727 -479.999 116.499 -240.003 -479.999 116.499 -240.003 -479.999 136.5 -240.003 -479.999 136.5 -240.003 -479.998 116.499 -330.003 -479.998 116.499 -330.003 -479.998 136.499 -330.003 -479.998 136.499 -330.003 -429.999 136.499 -240.003 -429.999 136.499 -240.003 -429.999 116.499 -240.003 -429.999 116.499 -240.003 -389.999 136.498 -330.002 -389.999 136.498 -330.002 -389.998 116.498 -330.002 -389.998 116.498 -330.002 -336.012 136.499 -80.6659 -336.012 116.499 -80.6658 -234.076 136.498 -154.727 -234.076 116.499 -154.727 -234.076 136.499 -154.727 -479.999 -334 -240.003 -479.999 -334 -240.003 -479.999 -314 -240.003 -479.999 -314 -240.003 -479.998 -334.001 -330.003 -479.998 -334.001 -330.003 -479.998 -314 -330.003 -479.998 -314 -330.003 -429.999 -334 -240.002 -429.999 -334 -240.002 -429.999 -314 -240.003 -429.999 -314 -240.003 -389.999 -334.001 -330.002 -389.999 -334.001 -330.002 -389.999 -314.001 -330.002 -389.999 -314.001 -330.002 -336.012 -314 -80.6659 -336.012 -334 -80.6658 -234.076 -314.001 -154.727 -234.076 -334 -154.727 -234.076 -314 -154.727 -179 122.502 -456.001 -379 122.502 -456.001 -379 122.502 -341.001 -179 122.502 -341.001 -156.5 100.002 -456.001 -179 122.502 -456.001 -179 122.502 -341.001 -156.5 100.002 -341.001 -156.5 -99.9978 -456.001 -156.5 100.002 -456.001 -156.5 100.002 -341.001 -156.5 -99.9978 -341.001 -179 -122.498 -456.001 -156.5 -99.9978 -456.001 -156.5 -99.9978 -341.001 -179 -122.498 -341.001 -379 -122.498 -456.001 -179 -122.498 -456.001 -179 -122.498 -341.001 -379 -122.498 -341.001 -401.5 -99.9978 -456.001 -379 -122.498 -456.001 -379 -122.498 -341.001 -401.5 -99.9978 -341.001 -401.5 100.002 -341.001 -401.5 -99.9978 -341.001 -379 -122.498 -341.001 -179 -122.498 -341.001 -156.5 -99.9978 -341.001 -156.5 100.002 -341.001 -179 122.502 -341.001 -379 122.502 -341.001 -379 122.502 -456.001 -401.5 100.002 -456.001 -401.5 100.002 -341.001 -379 122.502 -341.001 -401.5 100.002 -456.001 -379 122.502 -456.001 -179 122.502 -456.001 -156.5 100.002 -456.001 -156.5 -99.9978 -456.001 -179 -122.498 -456.001 -379 -122.498 -456.001 -401.5 -99.9978 -456.001 -401.5 100.002 -456.001 -401.5 -99.9978 -456.001 -401.5 -99.9978 -341.001 -401.5 100.002 -341.001 -189.323 89.6784 -276.001 -246.176 122.502 -276.001 -311.823 122.502 -276.001 -368.676 89.6784 -276.001 -401.5 32.826 -276.001 -401.5 -32.8216 -276.001 -368.676 -89.674 -276.001 -311.823 -122.498 -276.001 -246.176 -122.498 -276.001 -189.323 -89.674 -276.001 -156.5 -32.8216 -276.001 -156.5 32.826 -276.001 -189.323 -89.674 -341.001 -156.5 -32.8216 -341.001 -156.5 -32.8216 -276.001 -189.323 -89.674 -276.001 -246.176 -122.498 -341.001 -189.323 -89.674 -341.001 -189.323 -89.674 -276.001 -246.176 -122.498 -276.001 -311.823 -122.498 -341.001 -246.176 -122.498 -341.001 -246.176 -122.498 -276.001 -311.823 -122.498 -276.001 -368.676 -89.674 -341.001 -311.823 -122.498 -341.001 -311.823 -122.498 -276.001 -368.676 -89.674 -276.001 -401.5 -32.8216 -341.001 -368.676 -89.674 -341.001 -368.676 -89.674 -276.001 -401.5 -32.8216 -276.001 -401.5 32.826 -341.001 -401.5 -32.8216 -341.001 -401.5 -32.8216 -276.001 -401.5 32.826 -276.001 -368.676 89.6784 -341.001 -401.5 32.826 -341.001 -401.5 32.826 -276.001 -368.676 89.6784 -276.001 -311.823 122.502 -341.001 -368.676 89.6784 -341.001 -368.676 89.6784 -276.001 -311.823 122.502 -276.001 -246.176 122.502 -341.001 -311.823 122.502 -341.001 -311.823 122.502 -276.001 -246.176 122.502 -276.001 -189.323 89.6784 -341.001 -246.176 122.502 -341.001 -246.176 122.502 -276.001 -189.323 89.6784 -276.001 -156.5 32.826 -341.001 -189.323 89.6784 -341.001 -189.323 89.6784 -276.001 -156.5 32.826 -276.001 -156.5 -32.8216 -341.001 -156.5 32.826 -341.001 -156.5 32.826 -276.001 -156.5 -32.8216 -276.001 -479.999 314 -240.003 -479.999 314 -240.003 -479.999 334 -240.003 -479.999 334 -240.003 -479.998 313.999 -330.003 -479.998 313.999 -330.003 -479.998 333.999 -330.003 -479.998 333.999 -330.003 -429.999 334 -240.003 -429.999 334 -240.003 -429.999 314 -240.003 -429.999 314 -240.003 -389.999 333.999 -330.002 -389.999 333.999 -330.002 -389.998 313.999 -330.002 -389.998 313.999 -330.002 -336.012 334 -80.6659 -336.012 314 -80.6658 -234.076 333.999 -154.727 -234.076 314 -154.727 -234.076 334 -154.727 -336.012 290 -80.6659 -234.076 290 -154.726 -234.074 -290 -154.723 -336.01 -290 -80.6626 -315.367 290 -45.6655 -336.012 290 -80.6659 -336.01 -290 -80.6626 -315.365 -290 -45.6623 -209.999 290 -122.219 -315.367 290 -45.6655 -315.365 -290 -45.6623 -209.997 -290 -122.216 -209.999 290 -127.661 -209.999 290 -122.219 -209.997 -290 -122.216 -209.997 -290 -127.658 -234.076 290 -154.726 -209.999 290 -127.661 -209.997 -290 -127.658 -234.074 -290 -154.723 -668.409 30 -21.1373 -638.421 30 -12.6998 -638.421 0 -12.6998 -668.409 0 -21.1373 -699.089 30 -15.7276 -668.409 30 -21.1373 -668.409 0 -21.1373 -699.089 0 -15.7276 -724.383 30 2.45771 -699.089 30 -15.7276 -699.089 0 -15.7276 -724.383 0 2.45771 -739.282 30 29.8169 -724.383 30 2.45771 -724.383 0 2.45771 -739.282 0 29.8169 -740.835 30 60.931 -739.282 30 29.8169 -739.282 0 29.8169 -740.835 0 60.931 -740.835 0 60.931 -739.282 0 29.8169 -724.383 0 2.45771 -699.089 0 -15.7276 -668.409 0 -21.1373 -638.421 0 -12.6998 -615.063 0 7.91362 -602.962 0 36.6203 -638.421 30 -12.6998 -615.063 30 7.91362 -615.063 0 7.91362 -638.421 0 -12.6998 -602.962 30 36.6203 -615.063 30 7.91362 -638.421 30 -12.6998 -668.409 30 -21.1373 -699.089 30 -15.7276 -724.383 30 2.45771 -739.282 30 29.8169 -740.835 30 60.931 -615.063 30 7.91362 -602.962 30 36.6203 -602.962 0 36.6203 -615.063 0 7.91362 -580.388 0 164.645 -718.261 0 188.956 -740.835 0 60.931 -602.962 0 36.6203 -718.261 30 188.956 -580.388 30 164.645 -602.962 30 36.6203 -740.835 30 60.931 -718.261 0 188.956 -718.261 30 188.956 -740.835 30 60.931 -740.835 0 60.931 -718.261 30 188.956 -718.261 0 188.956 -580.388 0 164.645 -580.388 30 164.645 -580.388 30 164.645 -580.388 0 164.645 -602.962 0 36.6203 -602.962 30 36.6203 -668.409 260 -21.1373 -638.421 260 -12.6998 -638.421 230 -12.6998 -668.409 230 -21.1373 -699.089 260 -15.7276 -668.409 260 -21.1373 -668.409 230 -21.1373 -699.089 230 -15.7276 -724.383 260 2.45771 -699.089 260 -15.7276 -699.089 230 -15.7276 -724.383 230 2.45771 -739.282 260 29.8169 -724.383 260 2.45771 -724.383 230 2.45771 -739.282 230 29.8169 -740.835 260 60.931 -739.282 260 29.8169 -739.282 230 29.8169 -740.835 230 60.931 -740.835 230 60.931 -739.282 230 29.8169 -724.383 230 2.45771 -699.089 230 -15.7276 -668.409 230 -21.1373 -638.421 230 -12.6998 -615.063 230 7.91362 -602.962 230 36.6203 -638.421 260 -12.6998 -615.063 260 7.91362 -615.063 230 7.91362 -638.421 230 -12.6998 -602.962 260 36.6203 -615.063 260 7.91362 -638.421 260 -12.6998 -668.409 260 -21.1373 -699.089 260 -15.7276 -724.383 260 2.45771 -739.282 260 29.8169 -740.835 260 60.931 -615.063 260 7.91362 -602.962 260 36.6203 -602.962 230 36.6203 -615.063 230 7.91362 -580.388 230 164.645 -718.261 230 188.956 -740.835 230 60.931 -602.962 230 36.6203 -718.261 260 188.956 -580.388 260 164.645 -602.962 260 36.6203 -740.835 260 60.931 -718.261 230 188.956 -718.261 260 188.956 -740.835 260 60.931 -740.835 230 60.931 -718.261 260 188.956 -718.261 230 188.956 -580.388 230 164.645 -580.388 260 164.645 -580.388 260 164.645 -580.388 230 164.645 -602.962 230 36.6203 -602.962 260 36.6203 -610.486 -160 416.91 -640.475 -160 408.473 -640.475 -190 408.473 -610.486 -190 416.91 -579.806 -160 411.501 -610.486 -160 416.91 -610.486 -190 416.91 -579.806 -190 411.501 -554.512 -160 393.315 -579.806 -160 411.501 -579.806 -190 411.501 -554.512 -190 393.315 -539.613 -160 365.956 -554.512 -160 393.315 -554.512 -190 393.315 -539.613 -190 365.956 -538.06 -160 334.842 -539.613 -160 365.956 -539.613 -190 365.956 -538.06 -190 334.842 -538.06 -190 334.842 -539.613 -190 365.956 -554.512 -190 393.315 -579.806 -190 411.501 -610.486 -190 416.91 -640.475 -190 408.473 -663.833 -190 387.859 -675.933 -190 359.153 -640.475 -160 408.473 -663.833 -160 387.859 -663.833 -190 387.859 -640.475 -190 408.473 -675.933 -160 359.153 -663.833 -160 387.859 -640.475 -160 408.473 -610.486 -160 416.91 -579.806 -160 411.501 -554.512 -160 393.315 -539.613 -160 365.956 -538.06 -160 334.842 -663.833 -160 387.859 -675.933 -160 359.153 -675.933 -190 359.153 -663.833 -190 387.859 -698.508 -190 231.128 -560.635 -190 206.817 -538.06 -190 334.842 -675.933 -190 359.153 -560.635 -160 206.817 -698.508 -160 231.128 -675.933 -160 359.153 -538.06 -160 334.842 -560.635 -190 206.817 -560.635 -160 206.817 -538.06 -160 334.842 -538.06 -190 334.842 -560.635 -160 206.817 -560.635 -190 206.817 -698.508 -190 231.128 -698.508 -160 231.128 -698.508 -160 231.128 -698.508 -190 231.128 -675.933 -190 359.153 -675.933 -160 359.153 -610.486 70 416.91 -640.475 70 408.473 -640.475 40 408.473 -610.486 40 416.91 -579.806 70 411.501 -610.486 70 416.91 -610.486 40 416.91 -579.806 40 411.501 -554.512 70 393.315 -579.806 70 411.501 -579.806 40 411.501 -554.512 40 393.315 -539.613 70 365.956 -554.512 70 393.315 -554.512 40 393.315 -539.613 40 365.956 -538.06 70 334.842 -539.613 70 365.956 -539.613 40 365.956 -538.06 40 334.842 -538.06 40 334.842 -539.613 40 365.956 -554.512 40 393.315 -579.806 40 411.501 -610.486 40 416.91 -640.475 40 408.473 -663.833 40 387.859 -675.933 40 359.153 -640.475 70 408.473 -663.833 70 387.859 -663.833 40 387.859 -640.475 40 408.473 -675.933 70 359.153 -663.833 70 387.859 -640.475 70 408.473 -610.486 70 416.91 -579.806 70 411.501 -554.512 70 393.315 -539.613 70 365.956 -538.06 70 334.842 -663.833 70 387.859 -675.933 70 359.153 -675.933 40 359.153 -663.833 40 387.859 -698.508 40 231.128 -560.635 40 206.817 -538.06 40 334.842 -675.933 40 359.153 -560.635 70 206.817 -698.508 70 231.128 -675.933 70 359.153 -538.06 70 334.842 -560.635 40 206.817 -560.635 70 206.817 -538.06 70 334.842 -538.06 40 334.842 -560.635 70 206.817 -560.635 40 206.817 -698.508 40 231.128 -698.508 70 231.128 -698.508 70 231.128 -698.508 40 231.128 -675.933 40 359.153 -675.933 70 359.153 -449.115 -380.001 280.854 -210.001 -380.001 107.134 -210 -290.001 107.134 -449.114 -290.001 280.854 -650.793 -380.001 297.593 -449.115 -380.001 280.854 -449.114 -290.001 280.854 -650.793 -290.001 297.594 -721.918 -380 199.708 -650.793 -380.001 297.593 -650.793 -290.001 297.594 -721.917 -290 199.709 -209.999 -290 -172.219 -721.917 -290 199.709 -650.793 -290.001 297.594 -449.114 -290.001 280.854 -210 -290.001 107.134 -210.001 -380.001 107.134 -210 -380 -172.22 -209.999 -290 -172.219 -210 -290.001 107.134 -210 -380 -172.22 -210.001 -380.001 107.134 -449.115 -380.001 280.854 -650.793 -380.001 297.593 -721.918 -380 199.708 -210 -380 -172.22 -721.918 -380 199.708 -721.917 -290 199.709 -209.999 -290 -172.219 -209.998 -429.997 -550.002 -210 -429.999 127.994 -209.999 -289.999 127.994 -209.997 -289.997 -550.002 209.999 -290 128.001 210.002 -289.997 -550.001 -209.997 -289.997 -550.002 -209.999 -289.999 127.994 -210 -429.999 127.994 209.999 -430 128 209.999 -290 128.001 -209.999 -289.999 127.994 209.999 -430 128 -210 -429.999 127.994 -209.998 -429.997 -550.002 210.002 -429.997 -550.001 209.999 -430 128 210.002 -429.997 -550.001 210.002 -289.997 -550.001 209.999 -290 128.001 210 -289.999 64.3515 310 -289.999 115.304 310 -290 57.9996 210.001 -289.999 -108.001 309.999 -380 57.9992 210 -379.999 -108.001 210.001 -289.999 -108.001 310 -290 57.9996 310 -379.999 115.304 309.999 -380 57.9992 310 -290 57.9996 310 -289.999 115.304 210 -379.999 64.3511 310 -379.999 115.304 310 -289.999 115.304 210 -289.999 64.3515 210 -379.999 -108.001 210 -379.999 64.3511 210 -289.999 64.3515 210.001 -289.999 -108.001 210 -379.999 64.3511 210 -379.999 -108.001 309.999 -380 57.9992 310 -379.999 115.304 229.253 -344.278 132.522 239.689 -355.991 137.84 253.945 -360.278 145.104 268.201 -355.99 152.367 278.637 -344.277 157.685 282.457 -328.277 159.631 278.637 -312.277 157.685 268.201 -300.565 152.367 253.945 -296.278 145.104 239.689 -300.565 137.84 229.252 -312.278 132.522 225.433 -328.278 130.576 263.296 -300.565 91.5074 252.86 -312.278 86.1899 229.252 -312.278 132.522 239.689 -300.565 137.84 277.552 -296.277 98.7713 263.296 -300.565 91.5074 239.689 -300.565 137.84 253.945 -296.278 145.104 291.808 -300.565 106.035 277.552 -296.277 98.7713 253.945 -296.278 145.104 268.201 -300.565 152.367 302.245 -312.277 111.353 291.808 -300.565 106.035 268.201 -300.565 152.367 278.637 -312.277 157.685 306.065 -328.277 113.299 302.245 -312.277 111.353 278.637 -312.277 157.685 282.457 -328.277 159.631 302.245 -344.277 111.353 306.065 -328.277 113.299 282.457 -328.277 159.631 278.637 -344.277 157.685 291.809 -355.99 106.035 302.245 -344.277 111.353 278.637 -344.277 157.685 268.201 -355.99 152.367 277.553 -360.277 98.7713 291.809 -355.99 106.035 268.201 -355.99 152.367 253.945 -360.278 145.104 263.297 -355.99 91.5074 277.553 -360.277 98.7713 253.945 -360.278 145.104 239.689 -355.991 137.84 252.86 -344.278 86.1899 263.297 -355.99 91.5074 239.689 -355.991 137.84 229.253 -344.278 132.522 249.04 -328.278 84.2435 252.86 -344.278 86.1899 229.253 -344.278 132.522 225.433 -328.278 130.576 252.86 -312.278 86.1899 249.04 -328.278 84.2435 225.433 -328.278 130.576 229.252 -312.278 132.522 225.433 328.278 130.576 229.253 344.278 132.522 252.86 344.278 86.1899 249.04 328.278 84.2435 229.253 344.278 132.522 239.689 355.991 137.84 263.297 355.99 91.5074 252.86 344.278 86.1899 239.689 355.991 137.84 253.945 360.278 145.104 277.553 360.277 98.7713 263.297 355.99 91.5074 253.945 360.278 145.104 268.201 355.99 152.367 291.809 355.99 106.035 277.553 360.277 98.7713 268.201 355.99 152.367 278.637 344.277 157.685 302.245 344.277 111.353 291.809 355.99 106.035 278.637 344.277 157.685 282.457 328.277 159.631 306.065 328.277 113.299 302.245 344.277 111.353 282.457 328.277 159.631 278.637 312.277 157.685 302.245 312.277 111.353 306.065 328.277 113.299 278.637 312.277 157.685 268.201 300.565 152.367 291.808 300.565 106.035 302.245 312.277 111.353 268.201 300.565 152.367 253.945 296.278 145.104 277.552 296.277 98.7713 291.808 300.565 106.035 253.945 296.278 145.104 239.689 300.565 137.84 263.296 300.565 91.5074 277.552 296.277 98.7713 239.689 300.565 137.84 229.252 312.278 132.522 252.86 312.278 86.1899 263.296 300.565 91.5074 225.433 328.278 130.576 229.252 312.278 132.522 239.689 300.565 137.84 253.945 296.278 145.104 268.201 300.565 152.367 278.637 312.277 157.685 282.457 328.277 159.631 278.637 344.277 157.685 268.201 355.99 152.367 253.945 360.278 145.104 239.689 355.991 137.84 229.253 344.278 132.522 229.252 312.278 132.522 225.433 328.278 130.576 249.04 328.278 84.2435 252.86 312.278 86.1899 210.002 429.997 -550.001 -209.998 429.997 -550.002 -210 429.999 127.994 209.999 430 128 -209.999 289.999 127.994 209.999 290 128.001 209.999 430 128 -210 429.999 127.994 -209.997 289.997 -550.002 -209.999 289.999 127.994 -210 429.999 127.994 -209.998 429.997 -550.002 -209.999 289.999 127.994 -209.997 289.997 -550.002 210.002 289.997 -550.001 209.999 290 128.001 209.999 290 128.001 210.002 289.997 -550.001 210.002 429.997 -550.001 209.999 430 128 -650.793 290.001 297.594 -449.114 290.001 280.854 -449.115 380.001 280.854 -650.793 380.001 297.593 -721.917 290 199.709 -650.793 290.001 297.594 -650.793 380.001 297.593 -721.918 380 199.708 -721.918 380 199.708 -650.793 380.001 297.593 -449.115 380.001 280.854 -210.001 380.001 107.134 -210 380 -172.22 -210 290.001 107.134 -209.999 290 -172.219 -210 380 -172.22 -210.001 380.001 107.134 -449.114 290.001 280.854 -210 290.001 107.134 -210.001 380.001 107.134 -449.115 380.001 280.854 -210 290.001 107.134 -449.114 290.001 280.854 -650.793 290.001 297.594 -721.917 290 199.709 -209.999 290 -172.219 -209.999 290 -172.219 -721.917 290 199.709 -721.918 380 199.708 -210 380 -172.22 -690.262 -290 206.616 -690.262 -290 206.616 -690.262 290 206.616 -690.262 290 206.616 -683.095 -290 179.866 -683.095 -290 233.366 -683.095 290 179.866 -683.095 290 233.366 -663.512 -290 160.284 -663.512 -290 160.284 -663.512 -290 252.949 -663.512 -290 252.949 -663.512 290 160.284 -663.512 290 160.284 -663.512 290 252.949 -663.512 290 252.949 -636.762 -290 153.116 -636.762 -290 153.116 -636.762 -290 260.116 -636.762 290 153.116 -636.762 290 153.116 -636.762 290 260.116 -610.012 -290 160.284 -610.012 -290 160.284 -610.012 -290 252.949 -610.012 -290 252.949 -610.012 290 160.284 -610.012 290 160.284 -610.012 290 252.949 -610.012 290 252.949 -590.43 -290 179.866 -590.43 -290 233.366 -590.43 290 179.866 -590.43 290 233.366 -583.262 -290.001 206.616 -583.262 -290.001 206.616 -583.262 290.001 206.616 -583.262 290.001 206.616 -690.261 0 206.616 -683.093 0 179.866 -683.093 0 233.366 -663.511 0 160.284 -663.511 0 252.949 -636.761 0 153.116 -636.761 0 260.116 -610.011 0 160.284 -610.011 0 252.949 -590.428 0 179.866 -590.428 0 233.366 -583.261 0 206.616 479.099 128.374 -550 429.549 248 -550 350.725 350.725 -550 248 429.549 -550 128.374 479.099 -550 0 496 -550 -128.374 479.099 -550 -248 429.549 -550 -350.725 350.725 -550 -429.549 248 -550 -479.099 128.374 -550 -496 0 -550 -479.099 -128.374 -550 -429.549 -248 -550 -350.725 -350.725 -550 -248 -429.549 -550 -128.374 -479.099 -550 0 -496 -550 128.374 -479.099 -550 248 -429.549 -550 350.725 -350.725 -550 429.549 -248 -550 479.099 -128.374 -550 496 0 -550 429.549 -248 -657 479.099 -128.374 -657 479.099 -128.374 -550 429.549 -248 -550 350.725 -350.725 -657 429.549 -248 -657 429.549 -248 -550 350.725 -350.725 -550 248 -429.549 -657 350.725 -350.725 -657 350.725 -350.725 -550 248 -429.549 -550 128.374 -479.099 -657 248 -429.549 -657 248 -429.549 -550 128.374 -479.099 -550 0 -496 -657 128.374 -479.099 -657 128.374 -479.099 -550 0 -496 -550 -128.374 -479.099 -657 0 -496 -657 0 -496 -550 -128.374 -479.099 -550 -248 -429.549 -657 -128.374 -479.099 -657 -128.374 -479.099 -550 -248 -429.549 -550 -350.725 -350.725 -657 -248 -429.549 -657 -248 -429.549 -550 -350.725 -350.725 -550 -429.549 -248 -657 -350.725 -350.725 -657 -350.725 -350.725 -550 -429.549 -248 -550 -479.099 -128.374 -657 -429.549 -248 -657 -429.549 -248 -550 -479.099 -128.374 -550 -496 0 -657 -479.099 -128.374 -657 -479.099 -128.374 -550 -496 0 -550 -479.099 128.374 -657 -496 0 -657 -496 0 -550 -479.099 128.374 -550 -429.549 248 -657 -479.099 128.374 -657 -479.099 128.374 -550 -429.549 248 -550 -350.725 350.725 -657 -429.549 248 -657 -429.549 248 -550 -350.725 350.725 -550 -248 429.549 -657 -350.725 350.725 -657 -350.725 350.725 -550 -248 429.549 -550 -128.374 479.099 -657 -248 429.549 -657 -248 429.549 -550 -128.374 479.099 -550 0 496 -657 -128.374 479.099 -657 -128.374 479.099 -550 0 496 -550 128.374 479.099 -657 0 496 -657 0 496 -550 128.374 479.099 -550 248 429.549 -657 128.374 479.099 -657 128.374 479.099 -550 248 429.549 -550 350.725 350.725 -657 248 429.549 -657 248 429.549 -550 350.725 350.725 -550 429.549 248 -657 350.725 350.725 -657 350.725 350.725 -550 429.549 248 -550 479.099 128.374 -657 429.549 248 -657 429.549 248 -550 479.099 128.374 -550 496 0 -657 479.099 128.374 -657 479.099 128.374 -550 496 0 -550 479.099 -128.374 -657 496 0 -657 496 0 -550 479.099 -128.374 -550 -429 150.002 -456.001 -128.999 150.002 -456 -128.999 150.002 -549.999 -429 150.003 -550 -128.999 150.002 -456 -128.999 -149.998 -456.001 -128.998 -149.998 -550 -128.999 150.002 -549.999 -128.999 -149.998 -456.001 -429 -149.998 -456.002 -429 -149.997 -550.001 -128.998 -149.998 -550 -429 -149.998 -456.002 -128.999 -149.998 -456.001 -128.999 150.002 -456 -429 150.002 -456.001 -429 -149.998 -456.002 -429 150.002 -456.001 -429 150.003 -550 -429 -149.997 -550.001 60.6218 -440 35 35 -440 60.6218 0 -440 70 -35 -440 60.6218 -60.6218 -440 35 -70 -440 0 -60.6218 -440 -35 -35 -440 -60.6218 0 -440 -70 35 -440 -60.6218 60.6218 -440 -35 70 -440 0 60.6218 -429.999 -35 60.6218 -440 -35 35 -440 -60.6218 35 -429.999 -60.6218 35 -429.999 -60.6218 35 -440 -60.6218 0 -440 -70 0 -429.999 -70 0 -429.999 -70 0 -440 -70 -35 -440 -60.6218 -35 -429.999 -60.6218 -35 -429.999 -60.6218 -35 -440 -60.6218 -60.6218 -440 -35 -60.6218 -429.999 -35 -60.6218 -429.999 -35 -60.6218 -440 -35 -70 -440 0 -70 -429.999 0 -70 -429.999 0 -70 -440 0 -60.6218 -440 35 -60.6218 -429.999 35 -60.6218 -429.999 35 -60.6218 -440 35 -35 -440 60.6218 -35 -429.999 60.6218 -35 -429.999 60.6218 -35 -440 60.6218 0 -440 70 0 -429.999 70 0 -429.999 70 0 -440 70 35 -440 60.6218 35 -429.999 60.6218 35 -429.999 60.6218 35 -440 60.6218 60.6218 -440 35 60.6218 -429.999 35 60.6218 -429.999 35 60.6218 -440 35 70 -440 0 70 -429.999 0 70 -429.999 0 70 -440 0 60.6218 -440 -35 60.6218 -429.999 -35 70 440 0 60.6218 440 -35 35 440 -60.6218 0 440 -70 -35 440 -60.6218 -60.6218 440 -35 -70 440 0 -60.6218 440 35 -35 440 60.6218 0 440 70 35 440 60.6218 60.6218 440 35 70 429.999 0 70 440 0 60.6218 440 35 60.6218 429.999 35 60.6218 429.999 35 60.6218 440 35 35 440 60.6218 35 429.999 60.6218 35 429.999 60.6218 35 440 60.6218 0 440 70 0 429.999 70 0 429.999 70 0 440 70 -35 440 60.6218 -35 429.999 60.6218 -35 429.999 60.6218 -35 440 60.6218 -60.6218 440 35 -60.6218 429.999 35 -60.6218 429.999 35 -60.6218 440 35 -70 440 0 -70 429.999 0 -70 429.999 0 -70 440 0 -60.6218 440 -35 -60.6218 429.999 -35 -60.6218 429.999 -35 -60.6218 440 -35 -35 440 -60.6218 -35 429.999 -60.6218 -35 429.999 -60.6218 -35 440 -60.6218 0 440 -70 0 429.999 -70 0 429.999 -70 0 440 -70 35 440 -60.6218 35 429.999 -60.6218 35 429.999 -60.6218 35 440 -60.6218 60.6218 440 -35 60.6218 429.999 -35 60.6218 429.999 -35 60.6218 440 -35 70 440 0 70 429.999 0 -584.497 -195 308.026 -568.026 -195 324.497 -561.997 -195 346.997 -568.026 -195 369.497 -584.497 -195 385.968 -606.997 -195 391.997 -629.497 -195 385.968 -645.968 -195 369.497 -651.997 -195 346.997 -645.968 -195 324.497 -629.497 -195 308.026 -606.997 -195 301.997 -645.968 -190 324.497 -629.497 -190 308.026 -629.497 -195 308.026 -645.968 -195 324.497 -651.997 -190 346.997 -645.968 -190 324.497 -645.968 -195 324.497 -651.997 -195 346.997 -645.968 -190 369.497 -651.997 -190 346.997 -651.997 -195 346.997 -645.968 -195 369.497 -629.497 -190 385.968 -645.968 -190 369.497 -645.968 -195 369.497 -629.497 -195 385.968 -606.997 -190 391.997 -629.497 -190 385.968 -629.497 -195 385.968 -606.997 -195 391.997 -584.497 -190 385.968 -606.997 -190 391.997 -606.997 -195 391.997 -584.497 -195 385.968 -568.026 -190 369.497 -584.497 -190 385.968 -584.497 -195 385.968 -568.026 -195 369.497 -561.997 -190 346.997 -568.026 -190 369.497 -568.026 -195 369.497 -561.997 -195 346.997 -568.026 -190 324.497 -561.997 -190 346.997 -561.997 -195 346.997 -568.026 -195 324.497 -584.497 -190 308.026 -568.026 -190 324.497 -568.026 -195 324.497 -584.497 -195 308.026 -606.997 -190 301.997 -584.497 -190 308.026 -584.497 -195 308.026 -606.997 -195 301.997 -629.497 -190 308.026 -606.997 -190 301.997 -606.997 -195 301.997 -629.497 -195 308.026 -629.497 75 308.026 -645.968 75 324.497 -651.997 75 346.997 -645.968 75 369.497 -629.497 75 385.968 -606.997 75 391.997 -584.497 75 385.968 -568.026 75 369.497 -561.997 75 346.997 -568.026 75 324.497 -584.497 75 308.026 -606.997 75 301.997 -568.026 70 324.497 -584.497 70 308.026 -584.497 75 308.026 -568.026 75 324.497 -561.997 70 346.997 -568.026 70 324.497 -568.026 75 324.497 -561.997 75 346.997 -568.026 70 369.497 -561.997 70 346.997 -561.997 75 346.997 -568.026 75 369.497 -584.497 70 385.968 -568.026 70 369.497 -568.026 75 369.497 -584.497 75 385.968 -606.997 70 391.997 -584.497 70 385.968 -584.497 75 385.968 -606.997 75 391.997 -629.497 70 385.968 -606.997 70 391.997 -606.997 75 391.997 -629.497 75 385.968 -645.968 70 369.497 -629.497 70 385.968 -629.497 75 385.968 -645.968 75 369.497 -651.997 70 346.997 -645.968 70 369.497 -645.968 75 369.497 -651.997 75 346.997 -645.968 70 324.497 -651.997 70 346.997 -651.997 75 346.997 -645.968 75 324.497 -629.497 70 308.026 -645.968 70 324.497 -645.968 75 324.497 -629.497 75 308.026 -606.997 70 301.997 -629.497 70 308.026 -629.497 75 308.026 -606.997 75 301.997 -584.497 70 308.026 -606.997 70 301.997 -606.997 75 301.997 -584.497 75 308.026 -697.003 265 -4.96759 -713.474 265 11.5036 -719.503 265 34.0036 -713.474 265 56.5036 -697.003 265 72.9747 -674.503 265 79.0036 -652.003 265 72.9747 -635.532 265 56.5036 -629.503 265 34.0036 -635.532 265 11.5036 -652.003 265 -4.96758 -674.503 265 -10.9964 -635.532 260 11.5036 -652.003 260 -4.96758 -652.003 265 -4.96758 -635.532 265 11.5036 -629.503 260 34.0036 -635.532 260 11.5036 -635.532 265 11.5036 -629.503 265 34.0036 -635.532 260 56.5036 -629.503 260 34.0036 -629.503 265 34.0036 -635.532 265 56.5036 -652.003 260 72.9747 -635.532 260 56.5036 -635.532 265 56.5036 -652.003 265 72.9747 -674.503 260 79.0036 -652.003 260 72.9747 -652.003 265 72.9747 -674.503 265 79.0036 -697.003 260 72.9747 -674.503 260 79.0036 -674.503 265 79.0036 -697.003 265 72.9747 -713.474 260 56.5036 -697.003 260 72.9747 -697.003 265 72.9747 -713.474 265 56.5036 -719.503 260 34.0036 -713.474 260 56.5036 -713.474 265 56.5036 -719.503 265 34.0036 -713.474 260 11.5036 -719.503 260 34.0036 -719.503 265 34.0036 -713.474 265 11.5036 -697.003 260 -4.96759 -713.474 260 11.5036 -713.474 265 11.5036 -697.003 265 -4.96759 -674.503 260 -10.9964 -697.003 260 -4.96759 -697.003 265 -4.96759 -674.503 265 -10.9964 -652.003 260 -4.96758 -674.503 260 -10.9964 -674.503 265 -10.9964 -652.003 265 -4.96758 + + + + + + + + + + 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 0.963483 0 -0.267769 0.963483 0 -0.267769 0.963483 0 -0.267769 0.963483 0 -0.267769 0.856584 0 -0.516007 0.856584 0 -0.516007 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.866034 0 -0.499985 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -1 0 0 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -1 0 0 -0.866034 0 0.499985 -1 0 0 -1 0 0 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.499985 0 0.866034 0 0 1 -0.499985 0 0.866034 -0.499985 0 0.866034 0 0 1 0.499985 0 0.866034 0 0 1 0 0 1 0.499985 0 0.866034 0.866034 0 0.499985 0.499985 0 0.866034 0.499985 0 0.866034 0.866034 0 0.499985 1 0 0 0.866034 0 0.499985 0.866034 0 0.499985 1 0 0 0.866034 0 -0.499985 1 0 0 1 0 0 0.866034 0 -0.499985 0.499985 0 -0.866034 0.866034 0 -0.499985 0.866034 0 -0.499985 0.499985 0 -0.866034 0 0 -1 0.499985 0 -0.866034 0.499985 0 -0.866034 0 0 -1 -0.499985 0 -0.866034 0 0 -1 0 0 -1 -0.499985 0 -0.866034 -1 0 0 0 0 1 -1 0 0 0 0 1 -1 0 0 0 0 -1 -1 0 0 0 0 -1 -0.861333 0 0.508042 0 0 1 -0.861333 0 0.508042 0 0 1 0 0 -1 0.747171 0 -0.664632 0 0 -1 0.747171 0 -0.664632 -0.861333 0 0.508042 -0.861333 0 0.508042 0.747171 0 -0.664632 0.747171 0 -0.664632 4.42697e-006 1 -5.60915e-006 -1.29224e-006 -1 4.93852e-006 -1 0 0 0 0 1 -1 0 0 0 0 1 -1 0 0 0 0 -1 -1 0 0 0 0 -1 -0.861333 0 0.508042 0 0 1 -0.861333 0 0.508042 0 0 1 0 0 -1 0.747171 0 -0.664632 0 0 -1 0.747171 0 -0.664632 -0.861333 0 0.508042 -0.861333 0 0.508042 0.747171 0 -0.664632 0.747171 0 -0.664632 4.42697e-006 1 -5.60915e-006 -1.29224e-006 -1 4.93852e-006 -1 0 0 0 0 1 -1 0 0 0 0 1 -1 0 0 0 0 -1 -1 0 0 0 0 -1 -0.861333 0 0.508042 0 0 1 -0.861333 0 0.508042 0 0 1 0 0 -1 0.747171 0 -0.664632 0 0 -1 0.747171 0 -0.664632 -0.861333 0 0.508042 -0.861333 0 0.508042 0.747171 0 -0.664632 0.747171 0 -0.664632 7.56172e-006 1 -6.27977e-006 -3.05188e-006 -1 8.4771e-006 0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 0.382672 0.923884 0 0.923884 0.382672 0 0.382672 0.923884 0 0.382672 0.923884 0 0.923884 0.382672 0 0.923884 -0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 -0.382672 0 0.382672 -0.923884 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.382672 -0.923884 0 -0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.923884 -0.382672 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.923884 -0.382672 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 -0.382672 0.923884 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.382672 0.923884 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.923884 0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 0.382672 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0.707083 -0.70713 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.707083 -0.70713 0 0.258797 -0.965932 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.258797 -0.965932 0 -0.258797 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.707083 -0.70713 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.707083 -0.70713 0 -0.965932 -0.258797 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.965932 -0.258797 0 -0.965932 0.258797 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.965932 0.258797 0 -0.70713 0.707083 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.70713 0.707083 0 -0.258797 0.965932 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.258797 0.965932 0 0.258797 0.965932 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0.258797 0.965932 0 0.707083 0.70713 0 0.258797 0.965932 0 0.258797 0.965932 0 0.707083 0.70713 0 0.965932 0.258797 0 0.707083 0.70713 0 0.707083 0.70713 0 0.965932 0.258797 0 0.965932 -0.258797 0 0.965932 0.258797 0 0.965932 0.258797 0 0.965932 -0.258797 0 -1 0 0 0 0 1 -1 0 0 0 0 1 -1 0 0 0 0 -1 -1 0 0 0 0 -1 -0.861333 0 0.508042 0 0 1 -0.861333 0 0.508042 0 0 1 0 0 -1 0.747171 0 -0.664632 0 0 -1 0.747171 0 -0.664632 -0.861333 0 0.508042 -0.861333 0 0.508042 0.747171 0 -0.664632 0.747171 0 -0.664632 4.42697e-006 1 -5.60915e-006 -1.29224e-006 -1 4.93852e-006 -0.587756 0 -0.809038 -0.587756 0 -0.809038 -0.587756 0 -0.809038 -0.587756 0 -0.809038 -0.861333 0 0.508042 -0.861333 0 0.508042 -0.861333 0 0.508042 -0.861333 0 0.508042 0.587756 0 0.809038 0.587756 0 0.809038 0.587756 0 0.809038 0.587756 0 0.809038 0.934661 0 -0.355541 1 0 0 1 0 0 0.934661 0 -0.355541 0.747171 0 -0.664632 0.934661 0 -0.355541 0.934661 0 -0.355541 0.747171 0 -0.664632 0.0498367 0 -0.998757 0.478225 0 -0.878237 0.478225 0 -0.878237 0.0498367 0 -0.998757 -0.388409 0 -0.921487 0.0498367 0 -0.998757 0.0498367 0 -0.998757 -0.388409 0 -0.921487 -0.749794 0 -0.661672 -0.388409 0 -0.921487 -0.388409 0 -0.921487 -0.749794 0 -0.661672 -0.96263 0 -0.270821 -0.749794 0 -0.661672 -0.749794 0 -0.661672 -0.96263 0 -0.270821 -0.998757 0 -0.0498367 -0.96263 0 -0.270821 -0.96263 0 -0.270821 -0.998757 0 -0.0498367 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.478225 0 -0.878237 0.81195 0 -0.583728 0.81195 0 -0.583728 0.478225 0 -0.878237 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.81195 0 -0.583728 0.921487 0 -0.388409 0.921487 0 -0.388409 0.81195 0 -0.583728 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.984813 0 0.17362 -0.984813 0 0.17362 -0.984813 0 0.17362 -0.984813 0 0.17362 0.17362 0 0.984813 0.17362 0 0.984813 0.17362 0 0.984813 0.17362 0 0.984813 0.984813 0 -0.17362 0.984813 0 -0.17362 0.984813 0 -0.17362 0.984813 0 -0.17362 0.0498367 0 -0.998757 0.478225 0 -0.878237 0.478225 0 -0.878237 0.0498367 0 -0.998757 -0.388409 0 -0.921487 0.0498367 0 -0.998757 0.0498367 0 -0.998757 -0.388409 0 -0.921487 -0.749794 0 -0.661672 -0.388409 0 -0.921487 -0.388409 0 -0.921487 -0.749794 0 -0.661672 -0.96263 0 -0.270821 -0.749794 0 -0.661672 -0.749794 0 -0.661672 -0.96263 0 -0.270821 -0.998757 0 -0.0498367 -0.96263 0 -0.270821 -0.96263 0 -0.270821 -0.998757 0 -0.0498367 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.478225 0 -0.878237 0.81195 0 -0.583728 0.81195 0 -0.583728 0.478225 0 -0.878237 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.81195 0 -0.583728 0.921487 0 -0.388409 0.921487 0 -0.388409 0.81195 0 -0.583728 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.984813 0 0.17362 -0.984813 0 0.17362 -0.984813 0 0.17362 -0.984813 0 0.17362 0.17362 0 0.984813 0.17362 0 0.984813 0.17362 0 0.984813 0.17362 0 0.984813 0.984813 0 -0.17362 0.984813 0 -0.17362 0.984813 0 -0.17362 0.984813 0 -0.17362 -0.0498367 0 0.998757 -0.478225 0 0.878237 -0.478225 0 0.878237 -0.0498367 0 0.998757 0.388409 0 0.921487 -0.0498367 0 0.998757 -0.0498367 0 0.998757 0.388409 0 0.921487 0.749794 0 0.661672 0.388409 0 0.921487 0.388409 0 0.921487 0.749794 0 0.661672 0.96263 0 0.270821 0.749794 0 0.661672 0.749794 0 0.661672 0.96263 0 0.270821 0.998757 0 0.0498367 0.96263 0 0.270821 0.96263 0 0.270821 0.998757 0 0.0498367 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.478225 0 0.878237 -0.81195 0 0.583728 -0.81195 0 0.583728 -0.478225 0 0.878237 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.81195 0 0.583728 -0.921487 0 0.388409 -0.921487 0 0.388409 -0.81195 0 0.583728 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.984813 0 -0.17362 0.984813 0 -0.17362 0.984813 0 -0.17362 0.984813 0 -0.17362 -0.17362 0 -0.984813 -0.17362 0 -0.984813 -0.17362 0 -0.984813 -0.17362 0 -0.984813 -0.984813 0 0.17362 -0.984813 0 0.17362 -0.984813 0 0.17362 -0.984813 0 0.17362 -0.0498367 0 0.998757 -0.478225 0 0.878237 -0.478225 0 0.878237 -0.0498367 0 0.998757 0.388409 0 0.921487 -0.0498367 0 0.998757 -0.0498367 0 0.998757 0.388409 0 0.921487 0.749794 0 0.661672 0.388409 0 0.921487 0.388409 0 0.921487 0.749794 0 0.661672 0.96263 0 0.270821 0.749794 0 0.661672 0.749794 0 0.661672 0.96263 0 0.270821 0.998757 0 0.0498367 0.96263 0 0.270821 0.96263 0 0.270821 0.998757 0 0.0498367 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.478225 0 0.878237 -0.81195 0 0.583728 -0.81195 0 0.583728 -0.478225 0 0.878237 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.81195 0 0.583728 -0.921487 0 0.388409 -0.921487 0 0.388409 -0.81195 0 0.583728 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.984813 0 -0.17362 0.984813 0 -0.17362 0.984813 0 -0.17362 0.984813 0 -0.17362 -0.17362 0 -0.984813 -0.17362 0 -0.984813 -0.17362 0 -0.984813 -0.17362 0 -0.984813 -0.984813 0 0.17362 -0.984813 0 0.17362 -0.984813 0 0.17362 -0.984813 0 0.17362 0.348094 0 0.93746 0.587756 0 0.809038 0.587756 0 0.809038 0.348094 0 0.93746 0.0827052 0 0.996574 0.348094 0 0.93746 0.348094 0 0.93746 0.0827052 0 0.996574 -0.808994 0 0.587817 -0.808994 0 0.587817 -0.808994 0 0.587817 -0.808994 0 0.587817 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.587756 0 -0.809038 -0.587756 0 -0.809038 -0.587756 0 -0.809038 -0.587756 0 -0.809038 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0.963483 0 -0.267769 0.856584 0 -0.516007 0.856584 0 -0.516007 0.963483 0 -0.267769 1 0 0 0.963483 0 -0.267769 0.963483 0 -0.267769 1 0 0 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.445479 0.866046 -0.226966 -0.771658 0.499985 -0.393139 -0.771658 0.499985 -0.393139 -0.445479 0.866046 -0.226966 0 1 0 -0.445479 0.866046 -0.226966 -0.445479 0.866046 -0.226966 0 1 0 0.445479 0.866046 0.226966 0 1 0 0 1 0 0.445479 0.866046 0.226966 0.771658 0.499985 0.393139 0.445479 0.866046 0.226966 0.445479 0.866046 0.226966 0.771658 0.499985 0.393139 0.891021 0 0.453963 0.771658 0.499985 0.393139 0.771658 0.499985 0.393139 0.891021 0 0.453963 0.771658 -0.499985 0.393139 0.891021 0 0.453963 0.891021 0 0.453963 0.771658 -0.499985 0.393139 0.445479 -0.866046 0.226966 0.771658 -0.499985 0.393139 0.771658 -0.499985 0.393139 0.445479 -0.866046 0.226966 0 -1 0 0.445479 -0.866046 0.226966 0.445479 -0.866046 0.226966 0 -1 0 -0.445479 -0.866046 -0.226966 0 -1 0 0 -1 0 -0.445479 -0.866046 -0.226966 -0.771658 -0.499985 -0.393139 -0.445479 -0.866046 -0.226966 -0.445479 -0.866046 -0.226966 -0.771658 -0.499985 -0.393139 -0.891021 0 -0.453963 -0.771658 -0.499985 -0.393139 -0.771658 -0.499985 -0.393139 -0.891021 0 -0.453963 -0.771658 0.499985 -0.393139 -0.891021 0 -0.453963 -0.891021 0 -0.453963 -0.771658 0.499985 -0.393139 -0.891021 0 -0.453963 -0.771658 0.499985 -0.393139 -0.771658 0.499985 -0.393139 -0.891021 0 -0.453963 -0.771658 0.499985 -0.393139 -0.445479 0.866046 -0.226966 -0.445479 0.866046 -0.226966 -0.771658 0.499985 -0.393139 -0.445479 0.866046 -0.226966 0 1 0 0 1 0 -0.445479 0.866046 -0.226966 0 1 0 0.445479 0.866046 0.226966 0.445479 0.866046 0.226966 0 1 0 0.445479 0.866046 0.226966 0.771658 0.499985 0.393139 0.771658 0.499985 0.393139 0.445479 0.866046 0.226966 0.771658 0.499985 0.393139 0.891021 0 0.453963 0.891021 0 0.453963 0.771658 0.499985 0.393139 0.891021 0 0.453963 0.771658 -0.499985 0.393139 0.771658 -0.499985 0.393139 0.891021 0 0.453963 0.771658 -0.499985 0.393139 0.445479 -0.866046 0.226966 0.445479 -0.866046 0.226966 0.771658 -0.499985 0.393139 0.445479 -0.866046 0.226966 0 -1 0 0 -1 0 0.445479 -0.866046 0.226966 0 -1 0 -0.445479 -0.866046 -0.226966 -0.445479 -0.866046 -0.226966 0 -1 0 -0.445479 -0.866046 -0.226966 -0.771658 -0.499985 -0.393139 -0.771658 -0.499985 -0.393139 -0.445479 -0.866046 -0.226966 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.771658 -0.499985 -0.393139 -0.891021 0 -0.453963 -0.891021 0 -0.453963 -0.771658 -0.499985 -0.393139 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 0.0827052 0 0.996574 0.348094 0 0.93746 0.348094 0 0.93746 0.0827052 0 0.996574 -0.808994 0 0.587817 -0.808994 0 0.587817 -0.808994 0 0.587817 -0.808994 0 0.587817 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0.348094 0 0.93746 0.587756 0 0.809038 0.587756 0 0.809038 0.348094 0 0.93746 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.587756 0 -0.809038 -0.587756 0 -0.809038 -0.587756 0 -0.809038 -0.587756 0 -0.809038 -1 0 0 -0.866034 0 -0.499985 -1 0 0 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 0.499985 -0.866034 0 -0.499985 -0.866034 0 0.499985 -0.499985 0 -0.866034 0 0 -1 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.499985 0 -0.866034 0 0 -1 -0.866034 0 0.499985 -0.499985 0 0.866034 0 0 -1 0.499985 0 -0.866034 0 0 1 0 0 -1 0.499985 0 -0.866034 0 0 1 0.499985 0 -0.866034 0.866034 0 -0.499985 0 0 1 0.499985 0 0.866034 0.499985 0 -0.866034 0.866034 0 -0.499985 0 0 1 0.499985 0 0.866034 0.866034 0 -0.499985 0.866034 0 0.499985 0.866034 0 -0.499985 0.866034 0 0.499985 0.866034 0 0.499985 1 0 0 0.866034 0 0.499985 1 0 0 0.5 0 -0.866025 0.866025 1.17697e-013 -0.5 1 1.17697e-013 0 0.866026 -1.17697e-013 0.5 0.5 0 0.866026 0 -5.88486e-014 1 -0.5 -5.88486e-014 0.866025 -0.866025 2.35394e-013 0.5 -1 -1.17697e-013 0 -0.866025 -1.17697e-013 -0.5 -0.5 0 -0.866025 2.62256e-007 2.94243e-014 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0.866034 -0.499985 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0 -1 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0 -1 0 -0.258797 -0.965932 0 0 -1 0 0 -1 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.707083 -0.70713 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -1 0 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -1 0 0 -0.965932 0.258797 0 -1 0 0 -1 0 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.70713 0.707083 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.70713 0.707083 0 -0.499985 0.866034 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.499985 0.866034 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.258797 0.965932 0 0 1 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0 1 0 0.258797 0.965932 0 0 1 0 0 1 0 0.258797 0.965932 0 0.499985 0.866034 0 0.258797 0.965932 0 0.258797 0.965932 0 0.499985 0.866034 0 0.70713 0.707083 0 0.499985 0.866034 0 0.499985 0.866034 0 0.70713 0.707083 0 0.866034 0.499985 0 0.70713 0.707083 0 0.70713 0.707083 0 0.866034 0.499985 0 0.965932 0.258797 0 0.866034 0.499985 0 0.866034 0.499985 0 0.965932 0.258797 0 1 0 0 0.965932 0.258797 0 0.965932 0.258797 0 1 0 0 0.965932 -0.258797 0 1 0 0 1 0 0 0.965932 -0.258797 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.866034 0 -0.499985 0.866034 0 -0.499985 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 0 0 1 0 0 1 0 0 1 0 0 1 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 1 0 0 1 0 0 1 0 0 1 0 0 0.866034 0 -0.499985 0.866034 0 -0.499985 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0 0 1 0 0 1 0 0 1 0 0 1 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.866034 0 -0.499985 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -1 0 0 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -1 0 0 -0.866034 0 0.499985 -1 0 0 -1 0 0 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.499985 0 0.866034 0 0 1 -0.499985 0 0.866034 -0.499985 0 0.866034 0 0 1 0.499985 0 0.866034 0 0 1 0 0 1 0.499985 0 0.866034 0.866034 0 0.499985 0.499985 0 0.866034 0.499985 0 0.866034 0.866034 0 0.499985 1 0 0 0.866034 0 0.499985 0.866034 0 0.499985 1 0 0 0.866034 0 -0.499985 1 0 0 1 0 0 0.866034 0 -0.499985 0.499985 0 -0.866034 0.866034 0 -0.499985 0.866034 0 -0.499985 0.499985 0 -0.866034 0 0 -1 0.499985 0 -0.866034 0.499985 0 -0.866034 0 0 -1 -0.499985 0 -0.866034 0 0 -1 0 0 -1 -0.499985 0 -0.866034 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.866034 0 -0.499985 0.499985 0 -0.866034 0.499985 0 -0.866034 0.866034 0 -0.499985 1 0 0 0.866034 0 -0.499985 0.866034 0 -0.499985 1 0 0 0.866034 0 0.499985 1 0 0 1 0 0 0.866034 0 0.499985 0.499985 0 0.866034 0.866034 0 0.499985 0.866034 0 0.499985 0.499985 0 0.866034 0 0 1 0.499985 0 0.866034 0.499985 0 0.866034 0 0 1 -0.499985 0 0.866034 0 0 1 0 0 1 -0.499985 0 0.866034 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.866034 0 0.499985 -1 0 0 -0.866034 0 0.499985 -0.866034 0 0.499985 -1 0 0 -0.866034 0 -0.499985 -1 0 0 -1 0 0 -0.866034 0 -0.499985 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.499985 0 -0.866034 0 0 -1 -0.499985 0 -0.866034 -0.499985 0 -0.866034 0 0 -1 0.499985 0 -0.866034 0 0 -1 0 0 -1 0.499985 0 -0.866034 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.866034 0 -0.499985 0.499985 0 -0.866034 0.499985 0 -0.866034 0.866034 0 -0.499985 1 0 0 0.866034 0 -0.499985 0.866034 0 -0.499985 1 0 0 0.866034 0 0.499985 1 0 0 1 0 0 0.866034 0 0.499985 0.499985 0 0.866034 0.866034 0 0.499985 0.866034 0 0.499985 0.499985 0 0.866034 0 0 1 0.499985 0 0.866034 0.499985 0 0.866034 0 0 1 -0.499985 0 0.866034 0 0 1 0 0 1 -0.499985 0 0.866034 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.866034 0 0.499985 -1 0 0 -0.866034 0 0.499985 -0.866034 0 0.499985 -1 0 0 -0.866034 0 -0.499985 -1 0 0 -1 0 0 -0.866034 0 -0.499985 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.499985 0 -0.866034 0 0 -1 -0.499985 0 -0.866034 -0.499985 0 -0.866034 0 0 -1 0.499985 0 -0.866034 0 0 -1 0 0 -1 0.499985 0 -0.866034 + + + + + + + + + + + + + + +

0 0 1 1 2 2 3 3

+

4 4 5 5 6 6 7 7

+

8 8 9 9 10 10 11 11

+

12 12 13 13 14 14 15 15

+

16 16 17 17 18 18 19 19

+

20 20 21 21 22 22 23 23

+
+ + + +

24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35

+

36 36 37 37 38 38 39 39

+

40 40 41 41 42 42 43 43

+

44 44 45 45 46 46 47 47

+

48 48 49 49 50 50 51 51

+

52 52 53 53 54 54 55 55

+

56 56 57 57 58 58 59 59

+

60 60 61 61 62 62 63 63

+

64 64 65 65 66 66 67 67

+

68 68 69 69 70 70 71 71

+

72 72 73 73 74 74 75 75

+

76 76 77 77 78 78 79 79

+

80 80 81 81 82 82 83 83

+
+ + + +

97 104 93 104 100 104 104 104

+

87 104 93 104 97 104 91 104

+
+ + + +

101 105 95 105 99 105 103 105

+

85 105 89 105 99 105 95 105

+
+ + + +

92 92 94 94 101 101 100 100

+

87 87 85 85 95 95 93 93

+

90 90 88 88 84 84 86 86

+

102 102 103 103 99 99 97 97

+

96 96 98 98 89 89 91 91

+
+ + + +

118 126 114 126 121 126 125 126

+

108 126 114 126 118 126 112 126

+
+ + + +

122 127 116 127 120 127 124 127

+

106 127 110 127 120 127 116 127

+
+ + + +

113 114 115 116 122 123 121 122

+

108 109 106 107 116 117 114 115

+

111 112 109 110 105 106 107 108

+

123 124 124 125 120 121 118 119

+

117 118 119 120 110 111 112 113

+
+ + + +

129 148 137 148 141 148 133 148

+

141 148 137 148 142 148 146 148

+
+ + + +

127 149 131 149 139 149 135 149

+

143 149 135 149 139 149 145 149

+
+ + + +

136 138 134 136 143 145 142 144

+

129 131 127 129 135 137 137 139

+

132 134 130 132 126 128 128 130

+

140 142 138 140 131 133 133 135

+

144 146 145 147 139 141 141 143

+
+ + + +

147 150 148 151 149 152 150 153

+

151 154 152 155 153 156 154 157

+

155 158 156 159 157 160 158 161

+

159 162 160 163 161 164 162 165

+

163 166 164 167 165 168 166 169

+

167 170 168 171 169 172 170 173

+

171 174 172 175 173 176 174 177 175 178 176 179 177 180 178 181

+

179 182 180 183 181 184 182 185

+

183 186 184 187 185 188 186 189 187 190 188 191 189 192 190 193

+

191 194 192 195 193 196 194 197

+
+ + + +

195 198 196 199 197 200 198 201 199 202 200 203 201 204 202 205 203 206 204 207 205 208 206 209

+

207 210 208 211 209 212 210 213

+

211 214 212 215 213 216 214 217

+

215 218 216 219 217 220 218 221

+

219 222 220 223 221 224 222 225

+

223 226 224 227 225 228 226 229

+

227 230 228 231 229 232 230 233

+

231 234 232 235 233 236 234 237

+

235 238 236 239 237 240 238 241

+

239 242 240 243 241 244 242 245

+

243 246 244 247 245 248 246 249

+

247 250 248 251 249 252 250 253

+

251 254 252 255 253 256 254 257

+
+ + + +

268 278 264 278 271 278 275 278

+

258 278 264 278 268 278 262 278

+
+ + + +

272 279 266 279 270 279 274 279

+

256 279 260 279 270 279 266 279

+
+ + + +

263 266 265 268 272 275 271 274

+

258 261 256 259 266 269 264 267

+

261 264 259 262 255 258 257 260

+

273 276 274 277 270 273 268 271

+

267 270 269 272 260 263 262 265

+
+ + + +

276 280 277 281 278 282 279 283

+

280 284 281 285 282 286 283 287

+

284 288 285 289 286 290 287 291

+

288 292 289 293 290 294 291 295

+

292 296 293 297 294 298 295 299

+
+ + + +

296 300 297 301 298 302 299 303

+

300 304 301 305 302 306 303 307

+

304 308 305 309 306 310 307 311

+

308 312 309 313 310 314 311 315

+

312 316 313 317 314 318 315 319

+

316 320 317 321 318 322 319 323 320 324 321 325 322 326 323 327

+

324 328 325 329 326 330 327 331

+

328 332 329 333 330 334 331 335 332 336 333 337 334 338 335 339

+

336 340 337 341 338 342 339 343

+
+ + + +

340 344 341 345 342 346 343 347

+

344 348 345 349 346 350 347 351

+

348 352 349 353 350 354 351 355

+

352 356 353 357 354 358 355 359

+

356 360 357 361 358 362 359 363

+
+ + + +

360 364 361 365 362 366 363 367

+

364 368 365 369 366 370 367 371

+

368 372 369 373 370 374 371 375

+

372 376 373 377 374 378 375 379

+

376 380 377 381 378 382 379 383

+

380 384 381 385 382 386 383 387 384 388 385 389 386 390 387 391

+

388 392 389 393 390 394 391 395

+

392 396 393 397 394 398 395 399 396 400 397 401 398 402 399 403

+

400 404 401 405 402 406 403 407

+
+ + + +

404 408 405 409 406 410 407 411

+

408 412 409 413 410 414 411 415

+

412 416 413 417 414 418 415 419

+

416 420 417 421 418 422 419 423

+

420 424 421 425 422 426 423 427

+
+ + + +

424 428 425 429 426 430 427 431

+

428 432 429 433 430 434 431 435

+

432 436 433 437 434 438 435 439

+

436 440 437 441 438 442 439 443

+

440 444 441 445 442 446 443 447

+

444 448 445 449 446 450 447 451 448 452 449 453 450 454 451 455

+

452 456 453 457 454 458 455 459

+

456 460 457 461 458 462 459 463 460 464 461 465 462 466 463 467

+

464 468 465 469 466 470 467 471

+
+ + + +

468 472 469 473 470 474 471 475

+

472 476 473 477 474 478 475 479

+

476 480 477 481 478 482 479 483

+

480 484 481 485 482 486 483 487

+

484 488 485 489 486 490 487 491

+
+ + + +

488 492 489 493 490 494 491 495

+

492 496 493 497 494 498 495 499

+

496 500 497 501 498 502 499 503

+

500 504 501 505 502 506 503 507

+

504 508 505 509 506 510 507 511

+

508 512 509 513 510 514 511 515 512 516 513 517 514 518 515 519

+

516 520 517 521 518 522 519 523

+

520 524 521 525 522 526 523 527 524 528 525 529 526 530 527 531

+

528 532 529 533 530 534 531 535

+
+ + + +

532 536 533 537 534 538 535 539

+

536 540 537 541 538 542 539 543

+

540 544 541 545 542 546 543 547

+

544 548 545 549 546 550 547 551

+

548 552 549 553 550 554 551 555

+
+ + + +

552 556 553 557 554 558 555 559

+

556 560 557 561 558 562 559 563

+

560 564 561 565 562 566 563 567

+

564 568 565 569 566 570 567 571 568 572

+

569 573 570 574 571 575 572 576

+

573 577 574 578 575 579 576 580 577 581

+

578 582 579 583 580 584 581 585

+
+ + + +

582 586 583 587 584 588 585 589

+

586 590 587 591 588 592 589 593

+

590 594 591 595 592 596 593 597

+

594 598 595 599 596 600 597 601

+

598 602 599 603 600 604 601 605

+
+ + + +

602 606 603 607 604 608 605 609

+

606 610 607 611 608 612 609 613

+

610 614 611 615 612 616 613 617

+

614 618 615 619 616 620 617 621

+

618 622 619 623 620 624 621 625

+

622 626 623 627 624 628 625 629

+
+ + + +

626 630 627 631 628 632 629 633 630 634 631 635 632 636 633 637 634 638 635 639 636 640 637 641

+

638 642 639 643 640 644 641 645

+

642 646 643 647 644 648 645 649

+

646 650 647 651 648 652 649 653

+

650 654 651 655 652 656 653 657

+

654 658 655 659 656 660 657 661

+

658 662 659 663 660 664 661 665

+

662 666 663 667 664 668 665 669

+

666 670 667 671 668 672 669 673

+

670 674 671 675 672 676 673 677

+

674 678 675 679 676 680 677 681

+

678 682 679 683 680 684 681 685

+

682 686 683 687 684 688 685 689

+
+ + + +

686 690 687 691 688 692 689 693

+

690 694 691 695 692 696 693 697

+

694 698 695 699 696 700 697 701

+

698 702 699 703 700 704 701 705

+

702 706 703 707 704 708 705 709

+

706 710 707 711 708 712 709 713

+

710 714 711 715 712 716 713 717

+

714 718 715 719 716 720 717 721

+

718 722 719 723 720 724 721 725

+

722 726 723 727 724 728 725 729

+

726 730 727 731 728 732 729 733

+

730 734 731 735 732 736 733 737 734 738 735 739 736 740 737 741 738 742 739 743 740 744 741 745

+

742 746 743 747 744 748 745 749

+
+ + + +

746 750 747 751 748 752 749 753

+

750 754 751 755 752 756 753 757

+

754 758 755 759 756 760 757 761

+

758 762 759 763 760 764 761 765

+

762 766 763 767 764 768 765 769

+
+ + + +

766 770 767 771 768 772 769 773

+

770 774 771 775 772 776 773 777

+

774 778 775 779 776 780 777 781 778 782

+

779 783 780 784 781 785 782 786

+

783 787 784 788 785 789 786 790

+

787 791 788 792 789 793 790 794 791 795

+

792 796 793 797 794 798 795 799

+
+ + + +

841 838 819 838 813 838 839 838

+

839 838 816 838 823 838 841 838

+
+ + + +

843 839 826 839 819 839 841 839

+

841 839 823 839 828 839 843 839

+
+ + + +

845 840 831 840 826 840 843 840

+

843 840 828 840 833 840 845 840

+
+ + + +

844 841 827 841 831 841 845 841

+

845 841 833 841 829 841 844 841

+
+ + + +

842 842 821 842 827 842 844 842

+

844 842 829 842 825 842 842 842

+
+ + + +

840 843 814 843 821 843 842 843

+

842 843 825 843 817 843 840 843

+
+ + + +

838 844 807 844 814 844 840 844

+

840 844 817 844 811 844 838 844

+
+ + + +

836 845 801 845 807 845 838 845

+

838 845 811 845 803 845 836 845

+
+ + + +

834 846 797 846 801 846 836 846

+

836 846 803 846 799 846 834 846

+
+ + + +

835 847 800 847 797 847 834 847

+

834 847 799 847 802 847 835 847

+
+ + + +

837 848 805 848 800 848 835 848

+

835 848 802 848 809 848 837 848

+
+ + + +

839 849 813 849 805 849 837 849

+

837 849 809 849 816 849 839 849

+
+ + + +

846 850 847 851 848 852 849 853 850 854 851 855 852 856 853 857 854 858 855 859 856 860 857 861 858 862 859 863 860 864 861 865 862 866 863 867 864 868 865 869 866 870 867 871 868 872 869 873

+

870 874 871 875 872 876 873 877

+

874 878 875 879 876 880 877 881

+

878 882 879 883 880 884 881 885

+

882 886 883 887 884 888 885 889

+

886 890 887 891 888 892 889 893

+

890 894 891 895 892 896 893 897

+

894 898 895 899 896 900 897 901

+

898 902 899 903 900 904 901 905

+

902 906 903 907 904 908 905 909

+

906 910 907 911 908 912 909 913

+

910 914 911 915 912 916 913 917

+

914 918 915 919 916 920 917 921

+

918 922 919 923 920 924 921 925

+

922 926 923 927 924 928 925 929

+

926 930 927 931 928 932 929 933

+

930 934 931 935 932 936 933 937

+

934 938 935 939 936 940 937 941

+

938 942 939 943 940 944 941 945

+

942 946 943 947 944 948 945 949

+

946 950 947 951 948 952 949 953

+

950 954 951 955 952 956 953 957

+

954 958 955 959 956 960 957 961

+

958 962 959 963 960 964 961 965

+

962 966 963 967 964 968 965 969

+
+ + + +

966 970 967 971 968 972 969 973

+

970 974 971 975 972 976 973 977

+

974 978 975 979 976 980 977 981

+

978 982 979 983 980 984 981 985

+

982 986 983 987 984 988 985 989

+
+ + + +

986 990 987 991 988 992 989 993 990 994 991 995 992 996 993 997 994 998 995 999 996 1000 997 1001

+

998 1002 999 1003 1000 1004 1001 1005

+

1002 1006 1003 1007 1004 1008 1005 1009

+

1006 1010 1007 1011 1008 1012 1009 1013

+

1010 1014 1011 1015 1012 1016 1013 1017

+

1014 1018 1015 1019 1016 1020 1017 1021

+

1018 1022 1019 1023 1020 1024 1021 1025

+

1022 1026 1023 1027 1024 1028 1025 1029

+

1026 1030 1027 1031 1028 1032 1029 1033

+

1030 1034 1031 1035 1032 1036 1033 1037

+

1034 1038 1035 1039 1036 1040 1037 1041

+

1038 1042 1039 1043 1040 1044 1041 1045

+

1042 1046 1043 1047 1044 1048 1045 1049

+
+ + + +

1046 1050 1047 1051 1048 1052 1049 1053 1050 1054 1051 1055 1052 1056 1053 1057 1054 1058 1055 1059 1056 1060 1057 1061

+

1058 1062 1059 1063 1060 1064 1061 1065

+

1062 1066 1063 1067 1064 1068 1065 1069

+

1066 1070 1067 1071 1068 1072 1069 1073

+

1070 1074 1071 1075 1072 1076 1073 1077

+

1074 1078 1075 1079 1076 1080 1077 1081

+

1078 1082 1079 1083 1080 1084 1081 1085

+

1082 1086 1083 1087 1084 1088 1085 1089

+

1086 1090 1087 1091 1088 1092 1089 1093

+

1090 1094 1091 1095 1092 1096 1093 1097

+

1094 1098 1095 1099 1096 1100 1097 1101

+

1098 1102 1099 1103 1100 1104 1101 1105

+

1102 1106 1103 1107 1104 1108 1105 1109

+
+ + + +

1106 1110 1107 1111 1108 1112 1109 1113 1110 1114 1111 1115 1112 1116 1113 1117 1114 1118 1115 1119 1116 1120 1117 1121

+

1118 1122 1119 1123 1120 1124 1121 1125

+

1122 1126 1123 1127 1124 1128 1125 1129

+

1126 1130 1127 1131 1128 1132 1129 1133

+

1130 1134 1131 1135 1132 1136 1133 1137

+

1134 1138 1135 1139 1136 1140 1137 1141

+

1138 1142 1139 1143 1140 1144 1141 1145

+

1142 1146 1143 1147 1144 1148 1145 1149

+

1146 1150 1147 1151 1148 1152 1149 1153

+

1150 1154 1151 1155 1152 1156 1153 1157

+

1154 1158 1155 1159 1156 1160 1157 1161

+

1158 1162 1159 1163 1160 1164 1161 1165

+

1162 1166 1163 1167 1164 1168 1165 1169

+
+ + + +

1166 1170 1167 1171 1168 1172 1169 1173 1170 1174 1171 1175 1172 1176 1173 1177 1174 1178 1175 1179 1176 1180 1177 1181

+

1178 1182 1179 1183 1180 1184 1181 1185

+

1182 1186 1183 1187 1184 1188 1185 1189

+

1186 1190 1187 1191 1188 1192 1189 1193

+

1190 1194 1191 1195 1192 1196 1193 1197

+

1194 1198 1195 1199 1196 1200 1197 1201

+

1198 1202 1199 1203 1200 1204 1201 1205

+

1202 1206 1203 1207 1204 1208 1205 1209

+

1206 1210 1207 1211 1208 1212 1209 1213

+

1210 1214 1211 1215 1212 1216 1213 1217

+

1214 1218 1215 1219 1216 1220 1217 1221

+

1218 1222 1219 1223 1220 1224 1221 1225

+

1222 1226 1223 1227 1224 1228 1225 1229

+
+ + + +

1226 1230 1227 1231 1228 1232 1229 1233 1230 1234 1231 1235 1232 1236 1233 1237 1234 1238 1235 1239 1236 1240 1237 1241

+

1238 1242 1239 1243 1240 1244 1241 1245

+

1242 1246 1243 1247 1244 1248 1245 1249

+

1246 1250 1247 1251 1248 1252 1249 1253

+

1250 1254 1251 1255 1252 1256 1253 1257

+

1254 1258 1255 1259 1256 1260 1257 1261

+

1258 1262 1259 1263 1260 1264 1261 1265

+

1262 1266 1263 1267 1264 1268 1265 1269

+

1266 1270 1267 1271 1268 1272 1269 1273

+

1270 1274 1271 1275 1272 1276 1273 1277

+

1274 1278 1275 1279 1276 1280 1277 1281

+

1278 1282 1279 1283 1280 1284 1281 1285

+

1282 1286 1283 1287 1284 1288 1285 1289

+
+
+ + + CAT3DBagRep + + +
+ + + + -356.547 -82.4997 20.9036 -391.015 -82.4997 14.8259 -362.363 -82.4997 -147.667 -327.895 -82.4997 -141.59 -327.895 -82.4997 -141.59 -362.363 -82.4997 -147.667 -362.363 82.5003 -147.667 -327.895 82.5003 -141.59 -391.015 82.5003 14.8259 -356.547 82.5003 20.9036 -327.895 82.5003 -141.59 -362.363 82.5003 -147.667 -391.015 -82.4997 14.8259 -391.015 82.5003 14.8259 -362.363 82.5003 -147.667 -362.363 -82.4997 -147.667 -391.015 82.5003 14.8259 -391.015 -82.4997 14.8259 -356.547 -82.4997 20.9036 -356.547 82.5003 20.9036 -356.547 82.5003 20.9036 -356.547 -82.4997 20.9036 -327.895 -82.4997 -141.59 -327.895 82.5003 -141.59 2.90823 -82.4997 84.2851 -31.5601 -82.4997 78.2075 -2.90811 -82.4997 -84.2858 31.5602 -82.4997 -78.2081 31.5602 -82.4997 -78.2081 -2.90811 -82.4997 -84.2858 -2.90811 82.5003 -84.2858 31.5602 82.5003 -78.2081 -31.5601 82.5003 78.2075 2.90823 82.5003 84.2851 31.5602 82.5003 -78.2081 -2.90811 82.5003 -84.2858 -31.5601 -82.4997 78.2075 -31.5601 82.5003 78.2075 -2.90811 82.5003 -84.2858 -2.90811 -82.4997 -84.2858 -31.5601 82.5003 78.2075 -31.5601 -82.4997 78.2075 2.90823 -82.4997 84.2851 2.90823 82.5003 84.2851 2.90823 82.5003 84.2851 2.90823 -82.4997 84.2851 31.5602 -82.4997 -78.2081 31.5602 82.5003 -78.2081 2.90823 0.000162 84.2851 4.82755 -41.2498 73.4001 54.0679 -41.2499 82.0826 52.1486 0 92.9676 4.82755 41.2502 73.4001 2.90823 0.000162 84.2851 52.1486 0 92.9676 54.0679 41.2501 82.0826 10.0712 71.4473 43.6618 4.82755 41.2502 73.4001 54.0679 41.2501 82.0826 59.3116 71.4471 52.3442 17.2342 82.5002 3.03851 10.0712 71.4473 43.6618 59.3116 71.4471 52.3442 66.4746 82.5001 11.7209 24.3972 71.4473 -37.5848 17.2342 82.5002 3.03851 66.4746 82.5001 11.7209 73.6376 71.4471 -28.9024 29.6408 41.2502 -67.3232 24.3972 71.4473 -37.5848 73.6376 71.4471 -28.9024 78.8812 41.2501 -58.6407 31.5602 0.000162 -78.2081 29.6408 41.2502 -67.3232 78.8812 41.2501 -58.6407 80.8006 0 -69.5257 29.6408 -41.2498 -67.3232 31.5602 0.000162 -78.2081 80.8006 0 -69.5257 78.8812 -41.2499 -58.6407 24.3972 -71.4469 -37.5849 29.6408 -41.2498 -67.3232 78.8812 -41.2499 -58.6407 73.6376 -71.447 -28.9024 17.2342 -82.4998 3.03851 24.3972 -71.4469 -37.5849 73.6376 -71.447 -28.9024 66.4746 -82.4999 11.7209 10.0712 -71.4469 43.6618 17.2342 -82.4998 3.03851 66.4746 -82.4999 11.7209 59.3116 -71.447 52.3442 4.82755 -41.2498 73.4001 10.0712 -71.4469 43.6618 59.3116 -71.447 52.3442 54.0679 -41.2499 82.0826 -354.627 -41.2497 10.0186 -349.384 -71.4468 -19.7198 -24.3971 -71.4468 37.5841 -29.6407 -41.2497 67.3224 -356.547 0.000275 20.9036 -354.627 -41.2497 10.0186 -29.6407 -41.2497 67.3224 -31.5601 0.000275 78.2075 -354.627 41.2503 10.0186 -356.547 0.000275 20.9036 -31.5601 0.000275 78.2075 -29.6407 41.2503 67.3224 -349.384 71.4474 -19.7198 -354.627 41.2503 10.0186 -29.6407 41.2503 67.3224 -24.3971 71.4474 37.5841 -342.221 82.5003 -60.3431 -349.384 71.4474 -19.7198 -24.3971 71.4474 37.5841 -17.2341 82.5003 -3.03919 -335.058 71.4474 -100.966 -342.221 82.5003 -60.3431 -17.2341 82.5003 -3.03919 -10.0711 71.4474 -43.6625 -329.814 41.2503 -130.705 -335.058 71.4474 -100.966 -10.0711 71.4474 -43.6625 -4.82742 41.2503 -73.4008 -327.895 0.000275 -141.59 -329.814 41.2503 -130.705 -4.82742 41.2503 -73.4008 -2.90811 0.000275 -84.2858 -329.814 -41.2497 -130.705 -327.895 0.000275 -141.59 -2.90811 0.000275 -84.2858 -4.82742 -41.2497 -73.4008 -335.058 -71.4468 -100.966 -329.814 -41.2497 -130.705 -4.82742 -41.2497 -73.4008 -10.0711 -71.4468 -43.6625 -342.221 -82.4997 -60.3431 -335.058 -71.4468 -100.966 -10.0711 -71.4468 -43.6625 -17.2341 -82.4997 -3.03919 -349.384 -71.4468 -19.7198 -342.221 -82.4997 -60.3431 -17.2341 -82.4997 -3.03919 -24.3971 -71.4468 37.5841 52.1486 -82.4996 92.9675 52.1486 82.5004 92.9675 80.8006 82.5004 -69.5258 80.8006 -82.4996 -69.5258 110.345 -82.4996 -64.3163 80.8006 -82.4996 -69.5258 80.8006 82.5004 -69.5258 110.345 82.5004 -64.3163 52.1486 82.5004 92.9675 81.6928 82.5004 98.1769 110.345 82.5004 -64.3163 80.8006 82.5004 -69.5258 81.6928 82.5004 98.1769 52.1486 82.5004 92.9675 52.1486 -82.4996 92.9675 81.6928 -82.4996 98.1769 81.6928 -82.4996 98.1769 52.1486 -82.4996 92.9675 80.8006 -82.4996 -69.5258 110.345 -82.4996 -64.3163 81.6928 -82.4996 98.1769 110.345 -82.4996 -64.3163 110.345 82.5004 -64.3163 81.6928 82.5004 98.1769 + + + + + + + + + + 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.17362 0 -0.984813 0.17362 0 -0.984813 0.17362 0 -0.984813 0.17362 0 -0.984813 0 1 0 0 1 0 0 1 0 0 1 0 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.17362 0 0.984813 0.984813 0 0.17362 0.984813 0 0.17362 0.984813 0 0.17362 0.984813 0 0.17362 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.17362 0 -0.984813 0.17362 0 -0.984813 0.17362 0 -0.984813 0.17362 0 -0.984813 0 1 0 0 1 0 0 1 0 0 1 0 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.17362 0 0.984813 0.984813 0 0.17362 0.984813 0 0.17362 0.984813 0 0.17362 0.984813 0 0.17362 -0.17362 0 0.984813 -0.150365 -0.499985 0.852881 -0.150365 -0.499985 0.852881 -0.17362 0 0.984813 -0.150365 0.499985 0.852881 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.150365 0.499985 0.852881 -0.0867946 0.866039 0.492386 -0.150365 0.499985 0.852881 -0.150365 0.499985 0.852881 -0.0867946 0.866039 0.492386 0 1 0 -0.0867946 0.866039 0.492386 -0.0867946 0.866039 0.492386 0 1 0 0.0868252 0.866036 -0.492386 0 1 0 0 1 0 0.0868252 0.866036 -0.492386 0.150365 0.499985 -0.852881 0.0868252 0.866036 -0.492386 0.0868252 0.866036 -0.492386 0.150365 0.499985 -0.852881 0.17362 0 -0.984813 0.150365 0.499985 -0.852881 0.150365 0.499985 -0.852881 0.17362 0 -0.984813 0.150365 -0.499985 -0.852881 0.17362 0 -0.984813 0.17362 0 -0.984813 0.150365 -0.499985 -0.852881 0.0867946 -0.866039 -0.492386 0.150365 -0.499985 -0.852881 0.150365 -0.499985 -0.852881 0.0867946 -0.866039 -0.492386 0 -1 0 0.0867946 -0.866039 -0.492386 0.0867946 -0.866039 -0.492386 0 -1 0 -0.0868252 -0.866036 0.492386 0 -1 0 0 -1 0 -0.0868252 -0.866036 0.492386 -0.150365 -0.499985 0.852881 -0.0868252 -0.866036 0.492386 -0.0868252 -0.866036 0.492386 -0.150365 -0.499985 0.852881 -0.150365 -0.499985 0.852881 -0.0867946 -0.866039 0.492386 -0.0867946 -0.866039 0.492386 -0.150365 -0.499985 0.852881 -0.17362 0 0.984813 -0.150365 -0.499985 0.852881 -0.150365 -0.499985 0.852881 -0.17362 0 0.984813 -0.150365 0.499985 0.852881 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.150365 0.499985 0.852881 -0.0867946 0.866039 0.492386 -0.150365 0.499985 0.852881 -0.150365 0.499985 0.852881 -0.0867946 0.866039 0.492386 0 1 0 -0.0867946 0.866039 0.492386 -0.0867946 0.866039 0.492386 0 1 0 0.0867946 0.866039 -0.492386 0 1 0 0 1 0 0.0867946 0.866039 -0.492386 0.150365 0.499985 -0.852881 0.0867946 0.866039 -0.492386 0.0867946 0.866039 -0.492386 0.150365 0.499985 -0.852881 0.17362 0 -0.984813 0.150365 0.499985 -0.852881 0.150365 0.499985 -0.852881 0.17362 0 -0.984813 0.150365 -0.499985 -0.852881 0.17362 0 -0.984813 0.17362 0 -0.984813 0.150365 -0.499985 -0.852881 0.0867946 -0.866039 -0.492386 0.150365 -0.499985 -0.852881 0.150365 -0.499985 -0.852881 0.0867946 -0.866039 -0.492386 0 -1 0 0.0867946 -0.866039 -0.492386 0.0867946 -0.866039 -0.492386 0 -1 0 -0.0867946 -0.866039 0.492386 0 -1 0 0 -1 0 -0.0867946 -0.866039 0.492386 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.984813 0 -0.17362 0.17362 0 -0.984813 0.17362 0 -0.984813 0.17362 0 -0.984813 0.17362 0 -0.984813 0 1 0 0 1 0 0 1 0 0 1 0 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.17362 0 0.984813 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.984813 0 0.17362 0.984813 0 0.17362 0.984813 0 0.17362 0.984813 0 0.17362 + + + + + + + + + + + + + + +

0 0 1 1 2 2 3 3

+

4 4 5 5 6 6 7 7

+

8 8 9 9 10 10 11 11

+

12 12 13 13 14 14 15 15

+

16 16 17 17 18 18 19 19

+

20 20 21 21 22 22 23 23

+
+ + + +

24 24 25 25 26 26 27 27

+

28 28 29 29 30 30 31 31

+

32 32 33 33 34 34 35 35

+

36 36 37 37 38 38 39 39

+

40 40 41 41 42 42 43 43

+

44 44 45 45 46 46 47 47

+
+ + + +

48 48 49 49 50 50 51 51

+

52 52 53 53 54 54 55 55

+

56 56 57 57 58 58 59 59

+

60 60 61 61 62 62 63 63

+

64 64 65 65 66 66 67 67

+

68 68 69 69 70 70 71 71

+

72 72 73 73 74 74 75 75

+

76 76 77 77 78 78 79 79

+

80 80 81 81 82 82 83 83

+

84 84 85 85 86 86 87 87

+

88 88 89 89 90 90 91 91

+

92 92 93 93 94 94 95 95

+
+ + + +

96 96 97 97 98 98 99 99

+

100 100 101 101 102 102 103 103

+

104 104 105 105 106 106 107 107

+

108 108 109 109 110 110 111 111

+

112 112 113 113 114 114 115 115

+

116 116 117 117 118 118 119 119

+

120 120 121 121 122 122 123 123

+

124 124 125 125 126 126 127 127

+

128 128 129 129 130 130 131 131

+

132 132 133 133 134 134 135 135

+

136 136 137 137 138 138 139 139

+

140 140 141 141 142 142 143 143

+
+ + + +

144 144 145 145 146 146 147 147

+

148 148 149 149 150 150 151 151

+

152 152 153 153 154 154 155 155

+

156 156 157 157 158 158 159 159

+

160 160 161 161 162 162 163 163

+

164 164 165 165 166 166 167 167

+
+
+ + + CAT3DBagRep + + +
+ + + + -356.547 -82.4997 20.9036 -391.015 -82.4997 14.8259 -362.363 -82.4997 -147.667 -327.895 -82.4997 -141.59 -327.895 -82.4997 -141.59 -362.363 -82.4997 -147.667 -362.363 82.5003 -147.667 -327.895 82.5003 -141.59 -391.015 82.5003 14.8259 -356.547 82.5003 20.9036 -327.895 82.5003 -141.59 -362.363 82.5003 -147.667 -391.015 -82.4997 14.8259 -391.015 82.5003 14.8259 -362.363 82.5003 -147.667 -362.363 -82.4997 -147.667 -391.015 82.5003 14.8259 -391.015 -82.4997 14.8259 -356.547 -82.4997 20.9036 -356.547 82.5003 20.9036 -356.547 82.5003 20.9036 -356.547 -82.4997 20.9036 -327.895 -82.4997 -141.59 -327.895 82.5003 -141.59 2.90823 -82.4997 84.2851 -31.5601 -82.4997 78.2075 -2.90811 -82.4997 -84.2858 31.5602 -82.4997 -78.2081 31.5602 -82.4997 -78.2081 -2.90811 -82.4997 -84.2858 -2.90811 82.5003 -84.2858 31.5602 82.5003 -78.2081 -31.5601 82.5003 78.2075 2.90823 82.5003 84.2851 31.5602 82.5003 -78.2081 -2.90811 82.5003 -84.2858 -31.5601 -82.4997 78.2075 -31.5601 82.5003 78.2075 -2.90811 82.5003 -84.2858 -2.90811 -82.4997 -84.2858 -31.5601 82.5003 78.2075 -31.5601 -82.4997 78.2075 2.90823 -82.4997 84.2851 2.90823 82.5003 84.2851 2.90823 82.5003 84.2851 2.90823 -82.4997 84.2851 31.5602 -82.4997 -78.2081 31.5602 82.5003 -78.2081 2.90823 0.000162 84.2851 4.82755 -41.2498 73.4001 54.0679 -41.2499 82.0826 52.1486 0 92.9676 4.82755 41.2502 73.4001 2.90823 0.000162 84.2851 52.1486 0 92.9676 54.0679 41.2501 82.0826 10.0712 71.4473 43.6618 4.82755 41.2502 73.4001 54.0679 41.2501 82.0826 59.3116 71.4471 52.3442 17.2342 82.5002 3.03851 10.0712 71.4473 43.6618 59.3116 71.4471 52.3442 66.4746 82.5001 11.7209 24.3972 71.4473 -37.5848 17.2342 82.5002 3.03851 66.4746 82.5001 11.7209 73.6376 71.4471 -28.9024 29.6408 41.2502 -67.3232 24.3972 71.4473 -37.5848 73.6376 71.4471 -28.9024 78.8812 41.2501 -58.6407 31.5602 0.000162 -78.2081 29.6408 41.2502 -67.3232 78.8812 41.2501 -58.6407 80.8006 0 -69.5257 29.6408 -41.2498 -67.3232 31.5602 0.000162 -78.2081 80.8006 0 -69.5257 78.8812 -41.2499 -58.6407 24.3972 -71.4469 -37.5849 29.6408 -41.2498 -67.3232 78.8812 -41.2499 -58.6407 73.6376 -71.447 -28.9024 17.2342 -82.4998 3.03851 24.3972 -71.4469 -37.5849 73.6376 -71.447 -28.9024 66.4746 -82.4999 11.7209 10.0712 -71.4469 43.6618 17.2342 -82.4998 3.03851 66.4746 -82.4999 11.7209 59.3116 -71.447 52.3442 4.82755 -41.2498 73.4001 10.0712 -71.4469 43.6618 59.3116 -71.447 52.3442 54.0679 -41.2499 82.0826 -354.627 -41.2497 10.0186 -349.384 -71.4468 -19.7198 -24.3971 -71.4468 37.5841 -29.6407 -41.2497 67.3224 -356.547 0.000275 20.9036 -354.627 -41.2497 10.0186 -29.6407 -41.2497 67.3224 -31.5601 0.000275 78.2075 -354.627 41.2503 10.0186 -356.547 0.000275 20.9036 -31.5601 0.000275 78.2075 -29.6407 41.2503 67.3224 -349.384 71.4474 -19.7198 -354.627 41.2503 10.0186 -29.6407 41.2503 67.3224 -24.3971 71.4474 37.5841 -342.221 82.5003 -60.3431 -349.384 71.4474 -19.7198 -24.3971 71.4474 37.5841 -17.2341 82.5003 -3.03919 -335.058 71.4474 -100.966 -342.221 82.5003 -60.3431 -17.2341 82.5003 -3.03919 -10.0711 71.4474 -43.6625 -329.814 41.2503 -130.705 -335.058 71.4474 -100.966 -10.0711 71.4474 -43.6625 -4.82742 41.2503 -73.4008 -327.895 0.000275 -141.59 -329.814 41.2503 -130.705 -4.82742 41.2503 -73.4008 -2.90811 0.000275 -84.2858 -329.814 -41.2497 -130.705 -327.895 0.000275 -141.59 -2.90811 0.000275 -84.2858 -4.82742 -41.2497 -73.4008 -335.058 -71.4468 -100.966 -329.814 -41.2497 -130.705 -4.82742 -41.2497 -73.4008 -10.0711 -71.4468 -43.6625 -342.221 -82.4997 -60.3431 -335.058 -71.4468 -100.966 -10.0711 -71.4468 -43.6625 -17.2341 -82.4997 -3.03919 -349.384 -71.4468 -19.7198 -342.221 -82.4997 -60.3431 -17.2341 -82.4997 -3.03919 -24.3971 -71.4468 37.5841 52.1486 -82.4996 92.9675 52.1486 82.5004 92.9675 80.8006 82.5004 -69.5258 80.8006 -82.4996 -69.5258 110.345 -82.4996 -64.3163 80.8006 -82.4996 -69.5258 80.8006 82.5004 -69.5258 110.345 82.5004 -64.3163 52.1486 82.5004 92.9675 81.6928 82.5004 98.1769 110.345 82.5004 -64.3163 80.8006 82.5004 -69.5258 81.6928 82.5004 98.1769 52.1486 82.5004 92.9675 52.1486 -82.4996 92.9675 81.6928 -82.4996 98.1769 81.6928 -82.4996 98.1769 52.1486 -82.4996 92.9675 80.8006 -82.4996 -69.5258 110.345 -82.4996 -64.3163 81.6928 -82.4996 98.1769 110.345 -82.4996 -64.3163 110.345 82.5004 -64.3163 81.6928 82.5004 98.1769 + + + + + + + + + + 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.17362 0 -0.984813 0.17362 0 -0.984813 0.17362 0 -0.984813 0.17362 0 -0.984813 0 1 0 0 1 0 0 1 0 0 1 0 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.17362 0 0.984813 0.984813 0 0.17362 0.984813 0 0.17362 0.984813 0 0.17362 0.984813 0 0.17362 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.17362 0 -0.984813 0.17362 0 -0.984813 0.17362 0 -0.984813 0.17362 0 -0.984813 0 1 0 0 1 0 0 1 0 0 1 0 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.17362 0 0.984813 0.984813 0 0.17362 0.984813 0 0.17362 0.984813 0 0.17362 0.984813 0 0.17362 -0.17362 0 0.984813 -0.150365 -0.499985 0.852881 -0.150365 -0.499985 0.852881 -0.17362 0 0.984813 -0.150365 0.499985 0.852881 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.150365 0.499985 0.852881 -0.0867946 0.866039 0.492386 -0.150365 0.499985 0.852881 -0.150365 0.499985 0.852881 -0.0867946 0.866039 0.492386 0 1 0 -0.0867946 0.866039 0.492386 -0.0867946 0.866039 0.492386 0 1 0 0.0868252 0.866036 -0.492386 0 1 0 0 1 0 0.0868252 0.866036 -0.492386 0.150365 0.499985 -0.852881 0.0868252 0.866036 -0.492386 0.0868252 0.866036 -0.492386 0.150365 0.499985 -0.852881 0.17362 0 -0.984813 0.150365 0.499985 -0.852881 0.150365 0.499985 -0.852881 0.17362 0 -0.984813 0.150365 -0.499985 -0.852881 0.17362 0 -0.984813 0.17362 0 -0.984813 0.150365 -0.499985 -0.852881 0.0867946 -0.866039 -0.492386 0.150365 -0.499985 -0.852881 0.150365 -0.499985 -0.852881 0.0867946 -0.866039 -0.492386 0 -1 0 0.0867946 -0.866039 -0.492386 0.0867946 -0.866039 -0.492386 0 -1 0 -0.0868252 -0.866036 0.492386 0 -1 0 0 -1 0 -0.0868252 -0.866036 0.492386 -0.150365 -0.499985 0.852881 -0.0868252 -0.866036 0.492386 -0.0868252 -0.866036 0.492386 -0.150365 -0.499985 0.852881 -0.150365 -0.499985 0.852881 -0.0867946 -0.866039 0.492386 -0.0867946 -0.866039 0.492386 -0.150365 -0.499985 0.852881 -0.17362 0 0.984813 -0.150365 -0.499985 0.852881 -0.150365 -0.499985 0.852881 -0.17362 0 0.984813 -0.150365 0.499985 0.852881 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.150365 0.499985 0.852881 -0.0867946 0.866039 0.492386 -0.150365 0.499985 0.852881 -0.150365 0.499985 0.852881 -0.0867946 0.866039 0.492386 0 1 0 -0.0867946 0.866039 0.492386 -0.0867946 0.866039 0.492386 0 1 0 0.0867946 0.866039 -0.492386 0 1 0 0 1 0 0.0867946 0.866039 -0.492386 0.150365 0.499985 -0.852881 0.0867946 0.866039 -0.492386 0.0867946 0.866039 -0.492386 0.150365 0.499985 -0.852881 0.17362 0 -0.984813 0.150365 0.499985 -0.852881 0.150365 0.499985 -0.852881 0.17362 0 -0.984813 0.150365 -0.499985 -0.852881 0.17362 0 -0.984813 0.17362 0 -0.984813 0.150365 -0.499985 -0.852881 0.0867946 -0.866039 -0.492386 0.150365 -0.499985 -0.852881 0.150365 -0.499985 -0.852881 0.0867946 -0.866039 -0.492386 0 -1 0 0.0867946 -0.866039 -0.492386 0.0867946 -0.866039 -0.492386 0 -1 0 -0.0867946 -0.866039 0.492386 0 -1 0 0 -1 0 -0.0867946 -0.866039 0.492386 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.984813 0 -0.17362 0.17362 0 -0.984813 0.17362 0 -0.984813 0.17362 0 -0.984813 0.17362 0 -0.984813 0 1 0 0 1 0 0 1 0 0 1 0 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.17362 0 0.984813 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.984813 0 0.17362 0.984813 0 0.17362 0.984813 0 0.17362 0.984813 0 0.17362 + + + + + + + + + + + + + + +

0 0 1 1 2 2 3 3

+

4 4 5 5 6 6 7 7

+

8 8 9 9 10 10 11 11

+

12 12 13 13 14 14 15 15

+

16 16 17 17 18 18 19 19

+

20 20 21 21 22 22 23 23

+
+ + + +

24 24 25 25 26 26 27 27

+

28 28 29 29 30 30 31 31

+

32 32 33 33 34 34 35 35

+

36 36 37 37 38 38 39 39

+

40 40 41 41 42 42 43 43

+

44 44 45 45 46 46 47 47

+
+ + + +

48 48 49 49 50 50 51 51

+

52 52 53 53 54 54 55 55

+

56 56 57 57 58 58 59 59

+

60 60 61 61 62 62 63 63

+

64 64 65 65 66 66 67 67

+

68 68 69 69 70 70 71 71

+

72 72 73 73 74 74 75 75

+

76 76 77 77 78 78 79 79

+

80 80 81 81 82 82 83 83

+

84 84 85 85 86 86 87 87

+

88 88 89 89 90 90 91 91

+

92 92 93 93 94 94 95 95

+
+ + + +

96 96 97 97 98 98 99 99

+

100 100 101 101 102 102 103 103

+

104 104 105 105 106 106 107 107

+

108 108 109 109 110 110 111 111

+

112 112 113 113 114 114 115 115

+

116 116 117 117 118 118 119 119

+

120 120 121 121 122 122 123 123

+

124 124 125 125 126 126 127 127

+

128 128 129 129 130 130 131 131

+

132 132 133 133 134 134 135 135

+

136 136 137 137 138 138 139 139

+

140 140 141 141 142 142 143 143

+
+ + + +

144 144 145 145 146 146 147 147

+

148 148 149 149 150 150 151 151

+

152 152 153 153 154 154 155 155

+

156 156 157 157 158 158 159 159

+

160 160 161 161 162 162 163 163

+

164 164 165 165 166 166 167 167

+
+
+ + + CAT3DBagRep + + +
+ + + + -30 290 670 30 290 670 30 290 570 -30 290 570 -30 280 570 -30 290 570 30 290 570 30 280 570 30 280 570 30 290 570 30 290 670 30 280 670 30 280 670 30 290 670 -30 290 670 -30 280 670 -30 280 670 -30 290 670 -30 290 570 -30 280 570 -10 290 670 -10 290 670 -8.66025 367.5 570 -8.66025 397.5 570 -8.66025 397.5 570 -5 367.5 566.34 -5 367.5 566.34 -5 397.5 566.34 -5 397.5 566.34 0 367.5 565 0 367.5 565 0 397.5 565 0 397.5 565 5 367.5 566.34 5 367.5 566.34 5 397.5 566.34 5 397.5 566.34 8.66025 367.5 570 8.66025 367.5 570 8.66025 397.5 570 8.66025 397.5 570 10 290 670 10 290 670 -10 290 575.714 -10 367.5 575 -10 367.5 575 -10 367.5 620 -10 367.5 620 -10 397.5 575 -10 397.5 575 -10 397.5 670 -10 397.5 670 -8.66025 367.5 570 10 290 575.714 10 367.5 575 10 367.5 575 10 367.5 620 10 367.5 620 10 397.5 575 10 397.5 575 10 397.5 670 10 397.5 670 -30 -290 670 -30 -290 570 30 -290 570 30 -290 670 30 -280 670 -30 -280 670 -30 -290 670 30 -290 670 30 -280 570 30 -280 670 30 -290 670 30 -290 570 -30 -280 570 30 -280 570 30 -290 570 -30 -290 570 -30 -280 670 -30 -280 570 -30 -290 570 -30 -290 670 -10 -290 670 -10 -290 670 -8.66025 -397.5 570 -8.66025 -397.5 570 -8.66025 -367.5 570 -5 -397.5 566.34 -5 -397.5 566.34 -5 -367.5 566.34 -5 -367.5 566.34 0 -397.5 565 0 -397.5 565 0 -367.5 565 0 -367.5 565 5 -397.5 566.34 5 -397.5 566.34 5 -367.5 566.34 5 -367.5 566.34 8.66025 -397.5 570 8.66025 -397.5 570 8.66025 -367.5 570 8.66025 -367.5 570 10 -290 670 10 -290 670 -10 -397.5 575 -10 -397.5 575 -10 -397.5 670 -10 -397.5 670 -10 -367.5 575 -10 -367.5 575 -10 -367.5 620 -10 -367.5 620 -10 -290 575.714 -8.66025 -367.5 570 10 -397.5 575 10 -397.5 575 10 -397.5 670 10 -397.5 670 10 -367.5 575 10 -367.5 575 10 -367.5 620 10 -367.5 620 10 -290 575.714 30 352.5 240 30 280 240 -30 280 240 -30 352.5 240 -30 352.5 190 30 352.5 190 30 280 190 -30 280 190 30 352.5 190 30 352.5 240 30 280 240 30 280 190 -30 352.5 240 30 352.5 240 30 352.5 190 -30 352.5 190 -30 280 190 -30 280 240 -30 352.5 240 -30 352.5 190 -30 352.5 240 -30 280 240 30 280 240 30 352.5 240 30 -352.5 240 -30 -352.5 240 -30 -280 240 30 -280 240 30 -352.5 190 30 -280 190 30 -280 240 30 -352.5 240 -30 -352.5 190 -30 -280 190 30 -280 190 30 -352.5 190 -30 -280 190 -30 -352.5 190 -30 -352.5 240 -30 -280 240 -30 -352.5 240 -30 -352.5 190 30 -352.5 190 30 -352.5 240 -30 -352.5 240 30 -352.5 240 30 -280 240 -30 -280 240 -195.724 212 266.067 -171.368 212 246.643 -171.368 187 246.643 -195.724 187 266.067 -209.241 212 294.135 -195.724 212 266.067 -195.724 187 266.067 -209.241 187 294.135 -209.241 212 325.288 -209.241 212 294.135 -209.241 187 294.135 -209.241 187 325.288 -195.724 212 353.355 -209.241 212 325.288 -209.241 187 325.288 -195.724 187 353.355 -171.367 212 372.779 -195.724 212 353.355 -195.724 187 353.355 -171.367 187 372.779 -140.996 212 379.711 -171.367 212 372.779 -171.367 187 372.779 -140.996 187 379.711 -10.9957 212 379.711 -140.996 212 379.711 -140.996 187 379.711 -10.9957 187 379.711 -10.9957 212 239.711 -10.9957 212 379.711 -10.9957 187 379.711 -10.9957 187 239.711 -140.996 187 239.711 -10.9957 187 239.711 -10.9957 187 379.711 -140.996 187 379.711 -171.367 187 372.779 -195.724 187 353.355 -209.241 187 325.288 -209.241 187 294.135 -195.724 187 266.067 -171.368 187 246.643 -171.368 212 246.643 -140.996 212 239.711 -140.996 187 239.711 -171.368 187 246.643 -140.996 212 239.711 -171.368 212 246.643 -195.724 212 266.067 -209.241 212 294.135 -209.241 212 325.288 -195.724 212 353.355 -171.367 212 372.779 -140.996 212 379.711 -10.9957 212 379.711 -10.9957 212 239.711 -140.996 212 239.711 -10.9957 212 239.711 -10.9957 187 239.711 -140.996 187 239.711 162.402 48 691.592 -78.4585 48 575.368 -78.4584 48 379.711 33.8747 48 239.711 -78.4587 73 575.368 -78.4585 73 379.711 -78.4584 48 379.711 -78.4585 48 575.368 162.402 73 691.592 33.8747 73 239.711 -78.4585 73 379.711 -78.4587 73 575.368 33.8747 73 239.711 162.402 73 691.592 162.402 48 691.592 33.8747 48 239.711 -140.996 73 379.711 -171.368 73 372.779 -171.368 48 372.779 -140.996 48 379.711 -171.368 73 372.779 -195.724 73 353.355 -195.724 48 353.355 -171.368 48 372.779 -195.724 73 353.355 -209.241 73 325.288 -209.241 48 325.288 -195.724 48 353.355 -209.241 73 325.288 -209.241 73 294.135 -209.241 48 294.135 -209.241 48 325.288 -209.241 73 294.135 -195.724 73 266.067 -195.724 48 266.067 -209.241 48 294.135 -195.724 73 266.067 -171.368 73 246.643 -171.368 48 246.643 -195.724 48 266.067 -171.368 73 246.643 -140.996 73 239.711 -140.996 48 239.711 -171.368 48 246.643 -78.4585 73 379.711 33.8747 73 239.711 -140.996 73 239.711 -171.368 73 246.643 -195.724 73 266.067 -209.241 73 294.135 -209.241 73 325.288 -195.724 73 353.355 -171.368 73 372.779 -140.996 73 379.711 -78.4584 48 379.711 -78.4585 73 379.711 -140.996 73 379.711 -140.996 48 379.711 33.8747 48 239.711 -78.4584 48 379.711 -140.996 48 379.711 -171.368 48 372.779 -195.724 48 353.355 -209.241 48 325.288 -209.241 48 294.135 -195.724 48 266.067 -171.368 48 246.643 -140.996 48 239.711 33.8747 73 239.711 33.8747 48 239.711 -140.996 48 239.711 -140.996 73 239.711 -163.496 217 270.74 -179.967 217 287.211 -185.996 217 309.711 -179.967 217 332.211 -163.496 217 348.682 -140.996 217 354.711 -118.496 217 348.682 -102.025 217 332.211 -95.9957 217 309.711 -102.025 217 287.211 -118.496 217 270.74 -140.996 217 264.711 -102.025 212 287.211 -118.496 212 270.74 -118.496 217 270.74 -102.025 217 287.211 -95.9957 212 309.711 -102.025 212 287.211 -102.025 217 287.211 -95.9957 217 309.711 -102.025 212 332.211 -95.9957 212 309.711 -95.9957 217 309.711 -102.025 217 332.211 -118.496 212 348.682 -102.025 212 332.211 -102.025 217 332.211 -118.496 217 348.682 -140.996 212 354.711 -118.496 212 348.682 -118.496 217 348.682 -140.996 217 354.711 -163.496 212 348.682 -140.996 212 354.711 -140.996 217 354.711 -163.496 217 348.682 -179.967 212 332.211 -163.496 212 348.682 -163.496 217 348.682 -179.967 217 332.211 -185.996 212 309.711 -179.967 212 332.211 -179.967 217 332.211 -185.996 217 309.711 -179.967 212 287.211 -185.996 212 309.711 -185.996 217 309.711 -179.967 217 287.211 -163.496 212 270.74 -179.967 212 287.211 -179.967 217 287.211 -163.496 217 270.74 -140.996 212 264.711 -163.496 212 270.74 -163.496 217 270.74 -140.996 217 264.711 -118.496 212 270.74 -140.996 212 264.711 -140.996 217 264.711 -118.496 217 270.74 -118.496 43 348.358 -140.996 43 354.387 -163.496 43 348.358 -179.967 43 331.887 -185.996 43 309.387 -179.967 43 286.887 -163.496 43 270.416 -140.996 43 264.387 -118.496 43 270.416 -102.025 43 286.887 -95.9957 43 309.387 -102.025 43 331.887 -95.9957 48 309.387 -102.025 48 331.887 -102.025 43 331.887 -95.9957 43 309.387 -102.025 48 286.887 -95.9957 48 309.387 -95.9957 43 309.387 -102.025 43 286.887 -118.496 43 270.416 -118.496 48 270.416 -102.025 48 286.887 -102.025 43 286.887 -140.996 48 264.387 -118.496 48 270.416 -118.496 43 270.416 -140.996 43 264.387 -163.496 48 270.416 -140.996 48 264.387 -140.996 43 264.387 -163.496 43 270.416 -179.967 48 286.887 -163.496 48 270.416 -163.496 43 270.416 -179.967 43 286.887 -185.996 48 309.387 -179.967 48 286.887 -179.967 43 286.887 -185.996 43 309.387 -179.967 48 331.887 -185.996 48 309.387 -185.996 43 309.387 -179.967 43 331.887 -163.496 48 348.358 -179.967 48 331.887 -179.967 43 331.887 -163.496 43 348.358 -140.996 48 354.387 -163.496 48 348.358 -163.496 43 348.358 -140.996 43 354.387 -118.496 48 348.358 -140.996 48 354.387 -140.996 43 354.387 -118.496 43 348.358 -118.496 48 348.358 -118.496 43 348.358 -102.025 43 331.887 -102.025 48 331.887 130.381 220 1061.19 130.381 275 1061.19 152.824 220 802.164 152.824 275 802.164 194.005 220 906.107 194.005 220 906.107 194.005 275 906.107 194.005 275 906.107 214.596 220 958.078 214.596 220 958.078 214.596 275 958.078 214.596 275 958.078 218.912 220 908.265 218.912 220 908.265 218.912 275 908.265 218.912 275 908.265 264.877 219.999 1072.85 264.877 219.999 1072.85 264.877 274.999 1072.85 264.877 274.999 1072.85 274.372 219.999 963.257 274.372 219.999 963.257 274.372 274.999 963.257 274.372 274.999 963.257 130.379 -275 1061.19 130.379 -220 1061.19 152.822 -275 802.164 152.823 -220 802.164 194.004 -275 906.107 194.004 -275 906.107 194.004 -220 906.107 194.004 -220 906.107 214.594 -275 958.078 214.594 -275 958.078 214.595 -220 958.078 214.595 -220 958.078 218.91 -275 908.265 218.91 -275 908.265 218.911 -220 908.265 218.911 -220 908.265 264.875 -275.001 1072.85 264.875 -275.001 1072.85 264.875 -220.001 1072.85 264.875 -220.001 1072.85 274.371 -275.001 963.257 274.371 -275.001 963.257 274.371 -220.001 963.257 274.371 -220.001 963.257 64.7656 290 1049.19 58.4192 290 1074.28 58.4192 280.001 1074.28 64.7656 280.001 1049.19 58.4192 290 1074.28 40.3771 290 1092.84 40.3771 280.001 1092.84 58.4192 280.001 1074.28 40.3771 290 1092.84 15.4739 290 1099.89 15.4739 280.001 1099.89 40.3771 280.001 1092.84 15.4739 290 1099.89 -9.61791 290 1093.54 -9.61791 280.001 1093.54 15.4739 280.001 1099.89 -9.61791 290 1093.54 -28.1748 290 1075.5 -28.1748 280.001 1075.5 -9.61791 280.001 1093.54 -28.1748 290 1075.5 -35.2245 290 1050.6 -35.2245 280.001 1050.6 -28.1748 280.001 1075.5 -35.2245 290 1050.6 -28.8782 290 1025.5 -28.8782 280.001 1025.5 -35.2245 280.001 1050.6 -28.8782 290 1025.5 -10.8361 290 1006.95 -10.8361 280.001 1006.95 -28.8782 280.001 1025.5 -10.8361 290 1006.95 14.0672 290 999.898 14.0672 280.001 999.898 -10.8361 280.001 1006.95 14.0672 290 999.898 39.1589 290 1006.24 39.1589 280.001 1006.24 14.0672 280.001 999.898 39.1589 290 1006.24 57.7158 290 1024.29 57.7158 280.001 1024.29 39.1589 280.001 1006.24 64.7656 290 1049.19 57.7158 290 1024.29 39.1589 290 1006.24 14.0672 290 999.898 -10.8361 290 1006.95 -28.8782 290 1025.5 -35.2245 290 1050.6 -28.1748 290 1075.5 -9.61791 290 1093.54 15.4739 290 1099.89 40.3771 290 1092.84 58.4192 290 1074.28 57.7158 290 1024.29 64.7656 290 1049.19 64.7656 280.001 1049.19 57.7158 280.001 1024.29 58.4192 -290 1074.28 40.3771 -290 1092.84 15.4739 -290 1099.89 -9.61791 -290 1093.54 -28.1748 -290 1075.5 -35.2245 -290 1050.6 -28.8782 -290 1025.5 -10.8361 -290 1006.95 14.0672 -290 999.898 39.1589 -290 1006.24 57.7158 -290 1024.29 64.7656 -290 1049.19 39.1589 -280.001 1006.24 57.7158 -280.001 1024.29 57.7158 -290 1024.29 39.1589 -290 1006.24 14.0672 -280.001 999.898 39.1589 -280.001 1006.24 39.1589 -290 1006.24 14.0672 -290 999.898 -10.8361 -280.001 1006.95 14.0672 -280.001 999.898 14.0672 -290 999.898 -10.8361 -290 1006.95 -28.8782 -280.001 1025.5 -10.8361 -280.001 1006.95 -10.8361 -290 1006.95 -28.8782 -290 1025.5 -35.2245 -280.001 1050.6 -28.8782 -280.001 1025.5 -28.8782 -290 1025.5 -35.2245 -290 1050.6 -28.1748 -280.001 1075.5 -35.2245 -280.001 1050.6 -35.2245 -290 1050.6 -28.1748 -290 1075.5 -9.61791 -280.001 1093.54 -28.1748 -280.001 1075.5 -28.1748 -290 1075.5 -9.61791 -290 1093.54 15.4739 -280.001 1099.89 -9.61791 -280.001 1093.54 -9.61791 -290 1093.54 15.4739 -290 1099.89 40.3771 -280.001 1092.84 15.4739 -280.001 1099.89 15.4739 -290 1099.89 40.3771 -290 1092.84 58.4192 -280.001 1074.28 40.3771 -280.001 1092.84 40.3771 -290 1092.84 58.4192 -290 1074.28 64.7656 -280.001 1049.19 58.4192 -280.001 1074.28 58.4192 -290 1074.28 64.7656 -290 1049.19 57.7158 -280.001 1024.29 64.7656 -280.001 1049.19 64.7656 -290 1049.19 57.7158 -290 1024.29 100.686 280 -61.5329 -65.1897 280 -75.9048 -77.2741 280 63.5694 -39.4167 280 66.8501 -77.2741 175 63.5694 -39.4167 175 66.8501 -39.4167 280 66.8501 -77.2741 280 63.5694 -65.1897 175 -75.9049 -77.2741 175 63.5694 -77.2741 280 63.5694 -65.1897 280 -75.9048 -77.2741 175 63.5694 -65.1897 175 -75.9049 100.686 175 -61.5329 -39.4167 175 66.8501 100.686 175 -61.5329 -65.1897 175 -75.9049 -65.1897 280 -75.9048 100.686 280 -61.5329 32.2069 175.002 1118.11 130.379 175.001 1061.19 130.379 280.001 1061.19 32.2066 280.002 1118.11 18.4227 175.003 1122.89 32.2069 175.002 1118.11 32.2066 280.002 1118.11 18.4224 280.003 1122.89 3.9732 175.002 1124.91 18.4227 175.003 1122.89 18.4224 280.003 1122.89 3.9729 280.002 1124.91 -24.7251 175.002 1120.47 3.9732 175.002 1124.91 3.9729 280.002 1124.91 -24.7254 280.002 1120.47 -127.475 175.002 1083.17 -24.7251 175.002 1120.47 -24.7254 280.002 1120.47 -127.475 280.002 1083.17 -39.4167 280 66.8501 -127.475 280.002 1083.17 -24.7254 280.002 1120.47 3.9729 280.002 1124.91 18.4224 280.003 1122.89 32.2066 280.002 1118.11 130.379 280.001 1061.19 195.204 280 313.017 100.686 280 -61.5329 195.204 175 313.017 100.686 175 -61.5328 100.686 280 -61.5329 195.204 280 313.017 130.379 175.001 1061.19 195.204 175 313.017 195.204 280 313.017 130.379 280.001 1061.19 195.204 175 313.017 130.379 175.001 1061.19 32.2069 175.002 1118.11 18.4227 175.003 1122.89 3.9732 175.002 1124.91 -24.7251 175.002 1120.47 -127.475 175.002 1083.17 -39.4164 175 66.8502 100.686 175 -61.5328 -39.4164 175 66.8502 -127.475 175.002 1083.17 -127.475 280.002 1083.17 -39.4167 280 66.8501 -95.3781 174.998 770.633 -78.4591 174.998 575.368 -78.4575 -175.002 575.369 -95.3765 -175.002 770.634 -28.6552 174.998 834.63 -95.3781 174.998 770.633 -95.3765 -175.002 770.634 -28.6536 -175.002 834.631 162.401 174.999 691.591 -28.6552 174.998 834.63 -28.6536 -175.002 834.631 162.403 -175.001 691.592 -78.4591 174.998 575.368 162.401 174.999 691.591 162.403 -175.001 691.592 -78.4575 -175.002 575.369 130.379 -280.001 1061.19 195.204 -280 313.017 195.204 -175 313.017 130.379 -175.001 1061.19 32.2066 -280.002 1118.11 130.379 -280.001 1061.19 130.379 -175.001 1061.19 32.2069 -175.002 1118.11 18.4224 -280.003 1122.89 32.2066 -280.002 1118.11 32.2069 -175.002 1118.11 18.4227 -175.003 1122.89 3.9729 -280.002 1124.91 18.4224 -280.003 1122.89 18.4227 -175.003 1122.89 3.9732 -175.002 1124.91 -24.7254 -280.002 1120.47 3.9729 -280.002 1124.91 3.9732 -175.002 1124.91 -24.7251 -175.002 1120.47 -127.475 -280.002 1083.17 -24.7254 -280.002 1120.47 -24.7251 -175.002 1120.47 -127.475 -175.002 1083.17 100.686 -175 -61.5328 -39.4164 -175 66.8502 -127.475 -175.002 1083.17 -24.7251 -175.002 1120.47 3.9732 -175.002 1124.91 18.4227 -175.003 1122.89 32.2069 -175.002 1118.11 130.379 -175.001 1061.19 195.204 -175 313.017 195.204 -280 313.017 100.686 -280 -61.5329 100.686 -175 -61.5328 195.204 -175 313.017 100.686 -280 -61.5329 195.204 -280 313.017 130.379 -280.001 1061.19 32.2066 -280.002 1118.11 18.4224 -280.003 1122.89 3.9729 -280.002 1124.91 -24.7254 -280.002 1120.47 -127.475 -280.002 1083.17 -39.4167 -280 66.8501 -39.4167 -280 66.8501 -127.475 -280.002 1083.17 -127.475 -175.002 1083.17 -39.4164 -175 66.8502 -65.1897 -280 -75.9048 -77.2741 -280 63.5694 -77.2741 -175 63.5694 -65.1897 -175 -75.9049 -39.4167 -175 66.8501 100.686 -175 -61.5329 -65.1897 -175 -75.9049 -77.2741 -175 63.5694 -77.2741 -280 63.5694 -39.4167 -280 66.8501 -39.4167 -175 66.8501 -77.2741 -175 63.5694 -39.4167 -280 66.8501 -77.2741 -280 63.5694 -65.1897 -280 -75.9048 100.686 -280 -61.5329 100.686 -280 -61.5329 -65.1897 -280 -75.9048 -65.1897 -175 -75.9049 100.686 -175 -61.5329 + + + + + + + + + + 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 1 0 0 1 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 1 0 0 1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0 1 -0.866034 0 -0.499985 -0.866034 0 -0.499985 0 1 0 -0.499985 0 -0.866034 0 -1 0 -0.499985 0 -0.866034 0 1 0 0 -1 0 0 0 -1 0 0 -1 0 1 0 0 -1 0 0.499985 0 -0.866034 0 1 0 0.499985 0 -0.866034 0 -1 0 0.866034 0 -0.499985 0 1 0 0.866034 0 -0.499985 0 0 1 0.991449 0 -0.130497 0 0.496109 -0.86826 -0.991449 0 -0.130497 0 -1 0 0 -1 0 0 0.496109 -0.86826 -0.991449 0 -0.130497 0 1 0 0 0 1 0 1 0 0 -1 0 0 0.496109 -0.86826 0 -1 0 0.991449 0 -0.130497 0 -1 0 0 0.496109 -0.86826 0 1 0 0.991449 0 -0.130497 0 0 1 0 1 0 -1 6.68644e-009 -7.29741e-009 0.991445 0 -0.130526 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 1 0 0 1 0 0 1 0 0 1 0 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0 1 -0.866034 0 -0.499985 0 -1 0 -0.866034 0 -0.499985 -0.499985 0 -0.866034 0 -1 0 -0.499985 0 -0.866034 0 1 0 0 -1 0 0 0 -1 0 0 -1 0 1 0 0 -1 0 0.499985 0 -0.866034 0 1 0 0.499985 0 -0.866034 0 -1 0 0.866034 0 -0.499985 0 1 0 0.866034 0 -0.499985 0 0 1 0.991449 0 -0.130497 -0.991449 0 -0.130497 0 -1 0 0 -1 0 0 0 1 -0.991449 0 -0.130497 0 1 0 0 -0.496109 -0.86826 0 1 0 0 -0.496109 -0.86826 0 1 0 0 -1 0 0.991449 0 -0.130497 0 -1 0 0 0 1 0 1 0 0.991449 0 -0.130497 0 -0.496109 -0.86826 0 1 0 0 -0.496109 -0.86826 -1 -6.68644e-009 -7.29741e-009 0.991445 0 -0.130526 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 1 0 0 1 0 0 1 0 0 1 0 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 -0.781853 0 -0.623463 -0.433882 0 -0.90097 -0.433882 0 -0.90097 -0.781853 0 -0.623463 -0.97493 0 -0.22251 -0.781853 0 -0.623463 -0.781853 0 -0.623463 -0.97493 0 -0.22251 -0.97493 0 0.22251 -0.97493 0 -0.22251 -0.97493 0 -0.22251 -0.97493 0 0.22251 -0.781853 0 0.623463 -0.97493 0 0.22251 -0.97493 0 0.22251 -0.781853 0 0.623463 -0.433882 0 0.90097 -0.781853 0 0.623463 -0.781853 0 0.623463 -0.433882 0 0.90097 -0.111942 0 0.993715 -0.433882 0 0.90097 -0.433882 0 0.90097 -0.111942 0 0.993715 0 0 1 -0.111942 0 0.993715 -0.111942 0 0.993715 0 0 1 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.433882 0 -0.90097 -0.111942 0 -0.993715 -0.111942 0 -0.993715 -0.433882 0 -0.90097 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.111942 0 -0.993715 0 0 -1 0 0 -1 -0.111942 0 -0.993715 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0.961853 0 -0.273568 0.961853 0 -0.273568 0.961853 0 -0.273568 0.961853 0 -0.273568 -0.111942 0 0.993715 -0.433882 0 0.90097 -0.433882 0 0.90097 -0.111942 0 0.993715 -0.433882 0 0.90097 -0.781853 0 0.623463 -0.781853 0 0.623463 -0.433882 0 0.90097 -0.781853 0 0.623463 -0.97493 0 0.22251 -0.97493 0 0.22251 -0.781853 0 0.623463 -0.97493 0 0.22251 -0.97493 0 -0.22251 -0.97493 0 -0.22251 -0.97493 0 0.22251 -0.97493 0 -0.22251 -0.781853 0 -0.623463 -0.781853 0 -0.623463 -0.97493 0 -0.22251 -0.781853 0 -0.623463 -0.433882 0 -0.90097 -0.433882 0 -0.90097 -0.781853 0 -0.623463 -0.433882 0 -0.90097 -0.111942 0 -0.993715 -0.111942 0 -0.993715 -0.433882 0 -0.90097 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 -0.111942 0 0.993715 -0.111942 0 0.993715 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -1 0 0 -1 -0.111942 0 -0.993715 -0.111942 0 -0.993715 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.866034 0 -0.499985 0.499985 0 -0.866034 0.499985 0 -0.866034 0.866034 0 -0.499985 1 0 0 0.866034 0 -0.499985 0.866034 0 -0.499985 1 0 0 0.866034 0 0.499985 1 0 0 1 0 0 0.866034 0 0.499985 0.499985 0 0.866034 0.866034 0 0.499985 0.866034 0 0.499985 0.499985 0 0.866034 0 0 1 0.499985 0 0.866034 0.499985 0 0.866034 0 0 1 -0.499985 0 0.866034 0 0 1 0 0 1 -0.499985 0 0.866034 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.866034 0 0.499985 -1 0 0 -0.866034 0 0.499985 -0.866034 0 0.499985 -1 0 0 -0.866034 0 -0.499985 -1 0 0 -1 0 0 -0.866034 0 -0.499985 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.499985 0 -0.866034 0 0 -1 -0.499985 0 -0.866034 -0.499985 0 -0.866034 0 0 -1 0.499985 0 -0.866034 0 0 -1 0 0 -1 0.499985 0 -0.866034 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 0.866034 0 0.499985 0.866034 0 0.499985 1 0 0 0.866034 0 -0.499985 1 0 0 1 0 0 0.866034 0 -0.499985 0.499985 0 -0.866034 0.499985 0 -0.866034 0.866034 0 -0.499985 0.866034 0 -0.499985 0 0 -1 0.499985 0 -0.866034 0.499985 0 -0.866034 0 0 -1 -0.499985 0 -0.866034 0 0 -1 0 0 -1 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -1 0 0 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -1 0 0 -0.866034 0 0.499985 -1 0 0 -1 0 0 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.499985 0 0.866034 0 0 1 -0.499985 0 0.866034 -0.499985 0 0.866034 0 0 1 0.499985 0 0.866034 0 0 1 0 0 1 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.866034 0 0.499985 0.866034 0 0.499985 -0.0863063 0 0.996269 -0.0863063 0 0.996269 0.929696 0 -0.368328 0.929696 0 -0.368328 0.0863063 0 -0.996269 0.929696 0 -0.368328 0.0863063 0 -0.996269 0.929696 0 -0.368328 0.0863063 0 -0.996269 0.996269 0 0.0863063 0.0863063 0 -0.996269 0.996269 0 0.0863063 0.0863063 0 -0.996269 0.996269 0 0.0863063 0.0863063 0 -0.996269 0.996269 0 0.0863063 -0.0863063 0 0.996269 0.996269 0 0.0863063 -0.0863063 0 0.996269 0.996269 0 0.0863063 0.0863063 0 -0.996269 0.996269 0 0.0863063 0.0863063 0 -0.996269 0.996269 0 0.0863063 -2.93446e-006 -1 -1.26534e-008 2.83039e-006 1 5.14806e-008 -0.0863063 0 0.996269 -0.0863063 0 0.996269 0.929696 0 -0.368328 0.929696 0 -0.368328 0.0863063 0 -0.996269 0.929696 0 -0.368328 0.0863063 0 -0.996269 0.929696 0 -0.368328 0.0863063 0 -0.996269 0.996269 0 0.0863063 0.0863063 0 -0.996269 0.996269 0 0.0863063 0.0863063 0 -0.996269 0.996269 0 0.0863063 0.0863063 0 -0.996269 0.996269 0 0.0863063 -0.0863063 0 0.996269 0.996269 0 0.0863063 -0.0863063 0 0.996269 0.996269 0 0.0863063 0.0863063 0 -0.996269 0.996269 0 0.0863063 0.0863063 0 -0.996269 0.996269 0 0.0863063 2.93446e-006 1 1.26531e-008 -2.83039e-006 -1 -5.14806e-008 0.999901 0 -0.0140385 0.872985 0 0.487747 0.872985 0 0.487747 0.999901 0 -0.0140385 0.872985 0 0.487747 0.512131 0 0.858907 0.512131 0 0.858907 0.872985 0 0.487747 0.512131 0 0.858907 0.0140385 0 0.999901 0.0140385 0 0.999901 0.512131 0 0.858907 0.0140385 0 0.999901 -0.487747 0 0.872985 -0.487747 0 0.872985 0.0140385 0 0.999901 -0.487747 0 0.872985 -0.858907 0 0.512131 -0.858907 0 0.512131 -0.487747 0 0.872985 -0.858907 0 0.512131 -0.999901 0 0.0140385 -0.999901 0 0.0140385 -0.858907 0 0.512131 -0.999901 0 0.0140385 -0.872985 0 -0.487747 -0.872985 0 -0.487747 -0.999901 0 0.0140385 -0.872985 0 -0.487747 -0.512131 0 -0.858907 -0.512131 0 -0.858907 -0.872985 0 -0.487747 -0.512131 0 -0.858907 -0.0140385 0 -0.999901 -0.0140385 0 -0.999901 -0.512131 0 -0.858907 -0.0140385 0 -0.999901 0.487747 0 -0.872985 0.487747 0 -0.872985 -0.0140385 0 -0.999901 0.487747 0 -0.872985 0.858907 0 -0.512131 0.858907 0 -0.512131 0.487747 0 -0.872985 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.858907 0 -0.512131 0.999901 0 -0.0140385 0.999901 0 -0.0140385 0.858907 0 -0.512131 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.487747 0 -0.872985 0.858907 0 -0.512131 0.858907 0 -0.512131 0.487747 0 -0.872985 -0.0140385 0 -0.999901 0.487747 0 -0.872985 0.487747 0 -0.872985 -0.0140385 0 -0.999901 -0.512131 0 -0.858907 -0.0140385 0 -0.999901 -0.0140385 0 -0.999901 -0.512131 0 -0.858907 -0.872985 0 -0.487747 -0.512131 0 -0.858907 -0.512131 0 -0.858907 -0.872985 0 -0.487747 -0.999901 0 0.0140385 -0.872985 0 -0.487747 -0.872985 0 -0.487747 -0.999901 0 0.0140385 -0.858907 0 0.512131 -0.999901 0 0.0140385 -0.999901 0 0.0140385 -0.858907 0 0.512131 -0.487747 0 0.872985 -0.858907 0 0.512131 -0.858907 0 0.512131 -0.487747 0 0.872985 0.0140385 0 0.999901 -0.487747 0 0.872985 -0.487747 0 0.872985 0.0140385 0 0.999901 0.512131 0 0.858907 0.0140385 0 0.999901 0.0140385 0 0.999901 0.512131 0 0.858907 0.872985 0 0.487747 0.512131 0 0.858907 0.512131 0 0.858907 0.872985 0 0.487747 0.999901 0 -0.0140385 0.872985 0 0.487747 0.872985 0 0.487747 0.999901 0 -0.0140385 0.858907 0 -0.512131 0.999901 0 -0.0140385 0.999901 0 -0.0140385 0.858907 0 -0.512131 0 1 0 0 1 0 0 1 0 0 1 0 -0.0863063 0 0.996269 -0.0863063 0 0.996269 -0.0863063 0 0.996269 -0.0863063 0 0.996269 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.0863063 0 -0.996269 0.0863063 0 -0.996269 0.0863063 0 -0.996269 0.0863063 0 -0.996269 0.416486 0 0.909142 0.501541 0 0.865134 0.501541 0 0.865134 0.416486 0 0.909142 0.234138 0 0.972203 0.416486 0 0.909142 0.416486 0 0.909142 0.234138 0 0.972203 -0.00726341 0 0.999974 0.234138 0 0.972203 0.234138 0 0.972203 -0.00726341 0 0.999974 -0.248238 0 0.968699 -0.00726341 0 0.999974 -0.00726341 0 0.999974 -0.248238 0 0.968699 -0.341227 0 0.939981 -0.248238 0 0.968699 -0.248238 0 0.968699 -0.341227 0 0.939981 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.996771 0 -0.0802942 0.969607 0 -0.244667 0.969607 0 -0.244667 0.996771 0 -0.0802942 0.996269 0 0.0863063 0.996771 0 -0.0802942 0.996771 0 -0.0802942 0.996269 0 0.0863063 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 -0.69219 0 0.721715 -0.69219 0 0.721715 -0.69219 0 0.721715 -0.69219 0 0.721715 0.599292 0 0.80053 0.599292 0 0.80053 0.599292 0 0.80053 0.599292 0 0.80053 0.434584 0 -0.900632 0.434584 0 -0.900632 0.434584 0 -0.900632 0.434584 0 -0.900632 0.996269 0 0.0863063 0.996771 0 -0.0802942 0.996771 0 -0.0802942 0.996269 0 0.0863063 0.416486 0 0.909142 0.501541 0 0.865134 0.501541 0 0.865134 0.416486 0 0.909142 0.234138 0 0.972203 0.416486 0 0.909142 0.416486 0 0.909142 0.234138 0 0.972203 -0.00726341 0 0.999974 0.234138 0 0.972203 0.234138 0 0.972203 -0.00726341 0 0.999974 -0.248238 0 0.968699 -0.00726341 0 0.999974 -0.00726341 0 0.999974 -0.248238 0 0.968699 -0.341227 0 0.939981 -0.248238 0 0.968699 -0.248238 0 0.968699 -0.341227 0 0.939981 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.996771 0 -0.0802942 0.969607 0 -0.244667 0.969607 0 -0.244667 0.996771 0 -0.0802942 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 0 1 0 0 1 0 0 1 0 0 1 0 -0.0863063 0 0.996269 -0.0863063 0 0.996269 -0.0863063 0 0.996269 -0.0863063 0 0.996269 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.0863063 0 -0.996269 0.0863063 0 -0.996269 0.0863063 0 -0.996269 0.0863063 0 -0.996269 + + + + + + + + + + + + + + +

0 0 1 1 2 2 3 3

+

4 4 5 5 6 6 7 7

+

8 8 9 9 10 10 11 11

+

12 12 13 13 14 14 15 15

+

16 16 17 17 18 18 19 19

+
+ + + +

21 62 51 62 47 62 43 62

+

51 62 49 62 45 62 47 62

+
+ + + +

59 63 61 63 57 63 55 63

+

61 63 42 63 53 63 57 63

+
+ + + +

53 53 43 43 47 47 57 57

+

40 40 38 38 34 34 36 36

+

36 36 34 34 30 30 31 31

+

31 31 30 30 25 25 27 27

+

27 27 25 25 22 22 23 23

+

23 23 22 22 44 44 48 48

+

46 46 45 45 52 52 26 26 29 29 33 33 37 37 54 54 56 56

+

59 59 55 55 38 38 40 40

+

61 61 58 58 39 39 35 35 32 32 28 28 24 24 49 49 51 51

+

41 41 60 60 50 50 21 21

+
+ + + +

62 64 63 65 64 66 65 67

+

66 68 67 69 68 70 69 71

+

70 72 71 73 72 74 73 75

+

74 76 75 77 76 78 77 79

+

78 80 79 81 80 82 81 83

+
+ + + +

83 126 113 126 112 126 108 126

+

108 126 112 126 110 126 106 126

+
+ + + +

116 127 120 127 122 127 118 127

+

118 127 122 127 123 127 104 127

+
+ + + +

87 89 84 86 86 88 89 91

+

92 94 87 89 89 91 93 95

+

96 98 92 94 93 95 98 100

+

100 102 96 98 98 100 102 104

+

116 118 100 102 102 104 120 122

+

123 125 121 123 111 113 113 115

+

112 114 122 124 119 121 101 103 97 99 94 96 90 92 114 116 110 112

+

84 86 105 107 109 111 86 88

+

117 119 107 109 106 108 85 87 88 90 91 93 95 97 99 101 115 117

+

103 105 83 85 108 110 118 120

+
+ + + +

124 128 125 129 126 130 127 131

+

128 132 129 133 130 134 131 135

+

132 136 133 137 134 138 135 139

+

136 140 137 141 138 142 139 143

+

140 144 141 145 142 146 143 147

+

144 148 145 149 146 150 147 151

+
+ + + +

148 152 149 153 150 154 151 155

+

152 156 153 157 154 158 155 159

+

156 160 157 161 158 162 159 163

+

160 164 161 165 162 166 163 167

+

164 168 165 169 166 170 167 171

+

168 172 169 173 170 174 171 175

+
+ + + +

172 176 173 177 174 178 175 179

+

176 180 177 181 178 182 179 183

+

180 184 181 185 182 186 183 187

+

184 188 185 189 186 190 187 191

+

188 192 189 193 190 194 191 195

+

192 196 193 197 194 198 195 199

+

196 200 197 201 198 202 199 203

+

200 204 201 205 202 206 203 207

+

204 208 205 209 206 210 207 211 208 212 209 213 210 214 211 215 212 216 213 217

+

214 218 215 219 216 220 217 221

+

218 222 219 223 220 224 221 225 222 226 223 227 224 228 225 229 226 230 227 231

+

228 232 229 233 230 234 231 235

+
+ + + +

232 236 233 237 234 238 235 239

+

236 240 237 241 238 242 239 243

+

240 244 241 245 242 246 243 247

+

244 248 245 249 246 250 247 251

+
+ + + +

248 252 249 253 250 254 251 255

+

252 256 253 257 254 258 255 259

+

256 260 257 261 258 262 259 263

+

260 264 261 265 262 266 263 267

+

264 268 265 269 266 270 267 271

+

268 272 269 273 270 274 271 275

+

272 276 273 277 274 278 275 279

+

276 280 277 281 278 282 279 283 280 284 281 285 282 286 283 287 284 288 285 289

+

286 290 287 291 288 292 289 293

+

290 294 291 295 292 296 293 297 294 298 295 299 296 300 297 301 298 302 299 303

+

300 304 301 305 302 306 303 307

+
+ + + +

304 308 305 309 306 310 307 311 308 312 309 313 310 314 311 315 312 316 313 317 314 318 315 319

+

316 320 317 321 318 322 319 323

+

320 324 321 325 322 326 323 327

+

324 328 325 329 326 330 327 331

+

328 332 329 333 330 334 331 335

+

332 336 333 337 334 338 335 339

+

336 340 337 341 338 342 339 343

+

340 344 341 345 342 346 343 347

+

344 348 345 349 346 350 347 351

+

348 352 349 353 350 354 351 355

+

352 356 353 357 354 358 355 359

+

356 360 357 361 358 362 359 363

+

360 364 361 365 362 366 363 367

+
+ + + +

364 368 365 369 366 370 367 371 368 372 369 373 370 374 371 375 372 376 373 377 374 378 375 379

+

376 380 377 381 378 382 379 383

+

380 384 381 385 382 386 383 387

+

384 388 385 389 386 390 387 391

+

388 392 389 393 390 394 391 395

+

392 396 393 397 394 398 395 399

+

396 400 397 401 398 402 399 403

+

400 404 401 405 402 406 403 407

+

404 408 405 409 406 410 407 411

+

408 412 409 413 410 414 411 415

+

412 416 413 417 414 418 415 419

+

416 420 417 421 418 422 419 423

+

420 424 421 425 422 426 423 427

+
+ + + +

424 452 426 452 429 452

+
+ + + +

441 452 424 452 433 452 445 452

+

424 452 429 452 437 452 433 452

+
+ + + +

425 453 431 453 427 453

+
+ + + +

435 453 425 453 443 453 447 453

+

431 453 425 453 435 453 439 453

+
+ + + +

425 429 424 428 440 444 442 446

+

441 445 445 449 447 451 443 447

+

431 435 429 433 426 430 427 431

+

436 440 428 432 430 434 438 442

+

433 437 437 441 439 443 435 439

+

432 436 434 438 446 450 444 448

+
+ + + +

449 478 455 478 451 478

+
+ + + +

467 478 471 478 459 478 449 478

+

449 478 459 478 463 478 455 478

+
+ + + +

448 479 450 479 453 479

+
+ + + +

457 479 469 479 465 479 448 479

+

453 479 461 479 457 479 448 479

+
+ + + +

453 459 450 456 451 457 455 461

+

462 468 460 466 452 458 454 460

+

459 465 457 463 461 467 463 469

+

448 454 464 470 466 472 449 455

+

467 473 465 471 469 475 471 477

+

458 464 470 476 468 474 456 462

+
+ + + +

472 480 473 481 474 482 475 483

+

476 484 477 485 478 486 479 487

+

480 488 481 489 482 490 483 491

+

484 492 485 493 486 494 487 495

+

488 496 489 497 490 498 491 499

+

492 500 493 501 494 502 495 503

+

496 504 497 505 498 506 499 507

+

500 508 501 509 502 510 503 511

+

504 512 505 513 506 514 507 515

+

508 516 509 517 510 518 511 519

+

512 520 513 521 514 522 515 523

+

516 524 517 525 518 526 519 527 520 528 521 529 522 530 523 531 524 532 525 533 526 534 527 535

+

528 536 529 537 530 538 531 539

+
+ + + +

532 540 533 541 534 542 535 543 536 544 537 545 538 546 539 547 540 548 541 549 542 550 543 551

+

544 552 545 553 546 554 547 555

+

548 556 549 557 550 558 551 559

+

552 560 553 561 554 562 555 563

+

556 564 557 565 558 566 559 567

+

560 568 561 569 562 570 563 571

+

564 572 565 573 566 574 567 575

+

568 576 569 577 570 578 571 579

+

572 580 573 581 574 582 575 583

+

576 584 577 585 578 586 579 587

+

580 588 581 589 582 590 583 591

+

584 592 585 593 586 594 587 595

+

588 596 589 597 590 598 591 599

+
+ + + +

592 600 593 601 594 602 595 603

+

596 604 597 605 598 606 599 607

+

600 608 601 609 602 610 603 611

+

604 612 605 613 606 614 607 615

+

608 616 609 617 610 618 611 619

+
+ + + +

612 620 613 621 614 622 615 623

+

616 624 617 625 618 626 619 627

+

620 628 621 629 622 630 623 631

+

624 632 625 633 626 634 627 635

+

628 636 629 637 630 638 631 639

+

632 640 633 641 634 642 635 643 636 644 637 645 638 646 639 647 640 648

+

641 649 642 650 643 651 644 652

+

645 653 646 654 647 655 648 656

+

649 657 650 658 651 659 652 660 653 661 654 662 655 663 656 664 657 665

+

658 666 659 667 660 668 661 669

+
+ + + +

662 670 663 671 664 672 665 673

+

666 674 667 675 668 676 669 677

+

670 678 671 679 672 680 673 681

+

674 682 675 683 676 684 677 685

+
+ + + +

678 686 679 687 680 688 681 689

+

682 690 683 691 684 692 685 693

+

686 694 687 695 688 696 689 697

+

690 698 691 699 692 700 693 701

+

694 702 695 703 696 704 697 705

+

698 706 699 707 700 708 701 709

+

702 710 703 711 704 712 705 713 706 714 707 715 708 716 709 717 710 718

+

711 719 712 720 713 721 714 722

+

715 723 716 724 717 725 718 726 719 727 720 728 721 729 722 730 723 731

+

724 732 725 733 726 734 727 735

+
+ + + +

728 736 729 737 730 738 731 739

+

732 740 733 741 734 742 735 743

+

736 744 737 745 738 746 739 747

+

740 748 741 749 742 750 743 751

+

744 752 745 753 746 754 747 755

+
+
+ + + CAT3DBagRep + + +
+ + + + 0 142 65 0 -142 65 473 -142 65 473 142 65 473 142 -65 0 142 -65 0 142 65 473 142 65 0 142 -65 473 142 -65 473 -142 -65 0 -142 -65 0 -142 -65 473 -142 -65 473 -142 65 0 -142 65 548 160 0 537.952 160 37.5 537.952 -160 37.5 548 -160 0 537.952 160 -37.5 548 160 0 548 -160 0 537.952 -160 -37.5 510.5 160 -64.9519 537.952 160 -37.5 537.952 -160 -37.5 510.5 -160 -64.9519 473 160 -75 510.5 160 -64.9519 510.5 -160 -64.9519 473 -160 -75 435.5 160 -64.9519 473 160 -75 473 -160 -75 435.5 -160 -64.9519 408.048 160 -37.5 435.5 160 -64.9519 435.5 -160 -64.9519 408.048 -160 -37.5 398 160 0 408.048 160 -37.5 408.048 -160 -37.5 398 -160 0 408.048 160 37.5 398 160 0 398 -160 0 408.048 -160 37.5 435.5 160 64.9519 408.048 160 37.5 408.048 -160 37.5 435.5 -160 64.9519 473 160 75 435.5 160 64.9519 435.5 -160 64.9519 473 -160 75 473 -160 75 435.5 -160 64.9519 408.048 -160 37.5 398 -160 0 408.048 -160 -37.5 435.5 -160 -64.9519 473 -160 -75 510.5 -160 -64.9519 537.952 -160 -37.5 548 -160 0 537.952 -160 37.5 510.5 -160 64.9519 537.952 160 37.5 510.5 160 64.9519 510.5 -160 64.9519 537.952 -160 37.5 473 160 75 510.5 160 64.9519 537.952 160 37.5 548 160 0 537.952 160 -37.5 510.5 160 -64.9519 473 160 -75 435.5 160 -64.9519 408.048 160 -37.5 398 160 0 408.048 160 37.5 435.5 160 64.9519 510.5 160 64.9519 473 160 75 473 -160 75 510.5 -160 64.9519 64.6222 -3 38.0653 -130.78 -3 369.793 -158.47 -3 397.004 -196.057 -3 406.724 -233.468 -3 396.349 -260.679 -3 368.659 -270.399 -3 331.073 -260.024 -3 293.662 -64.6222 -3 -38.0654 -130.78 -3 369.793 64.6222 -3 38.0653 64.6222 22 38.0653 -130.78 22 369.793 -64.6222 22 -38.0654 -260.024 22 293.662 -270.399 22 331.073 -260.679 22 368.659 -233.468 22 396.349 -196.057 22 406.724 -158.47 22 397.004 -130.78 22 369.793 64.6222 22 38.0653 -260.024 22 293.662 -64.6222 22 -38.0654 -64.6222 -3 -38.0654 -260.024 -3 293.662 -260.024 22 293.662 -260.024 -3 293.662 -270.399 -3 331.073 -270.399 22 331.073 -270.399 22 331.073 -270.399 -3 331.073 -260.679 -3 368.659 -260.679 22 368.659 -260.679 22 368.659 -260.679 -3 368.659 -233.468 -3 396.349 -233.468 22 396.349 -233.468 22 396.349 -233.468 -3 396.349 -196.057 -3 406.724 -196.057 22 406.724 -196.057 22 406.724 -196.057 -3 406.724 -158.47 -3 397.004 -158.47 22 397.004 -158.47 22 397.004 -158.47 -3 397.004 -130.78 -3 369.793 -130.78 22 369.793 -195.402 27 376.727 -172.902 27 370.698 -156.431 27 354.227 -150.402 27 331.727 -156.431 27 309.227 -172.902 27 292.756 -195.402 27 286.727 -217.902 27 292.756 -234.373 27 309.227 -240.402 27 331.727 -234.373 27 354.227 -217.902 27 370.698 -195.402 27 376.727 -195.402 22 376.727 -172.902 22 370.698 -172.902 27 370.698 -172.902 27 370.698 -172.902 22 370.698 -156.431 22 354.227 -156.431 27 354.227 -156.431 27 354.227 -156.431 22 354.227 -150.402 22 331.727 -150.402 27 331.727 -150.402 27 331.727 -150.402 22 331.727 -156.431 22 309.227 -156.431 27 309.227 -156.431 27 309.227 -156.431 22 309.227 -172.902 22 292.756 -172.902 27 292.756 -172.902 27 292.756 -172.902 22 292.756 -195.402 22 286.727 -195.402 27 286.727 -195.402 27 286.727 -195.402 22 286.727 -217.902 22 292.756 -217.902 27 292.756 -217.902 27 292.756 -217.902 22 292.756 -234.373 22 309.227 -234.373 27 309.227 -234.373 27 309.227 -234.373 22 309.227 -240.402 22 331.727 -240.402 27 331.727 -240.402 27 331.727 -240.402 22 331.727 -234.373 22 354.227 -234.373 27 354.227 -234.373 27 354.227 -234.373 22 354.227 -217.902 22 370.698 -217.902 27 370.698 -217.902 27 370.698 -217.902 22 370.698 -195.402 22 376.727 -195.402 27 376.727 -195.402 -147 376.727 -172.902 -147 370.698 -172.902 -142 370.698 -195.402 -142 376.727 -172.902 -147 370.698 -156.431 -147 354.227 -156.431 -142 354.227 -172.902 -142 370.698 -156.431 -147 354.227 -150.402 -147 331.727 -150.402 -142 331.727 -156.431 -142 354.227 -150.402 -147 331.727 -156.431 -147 309.227 -156.431 -142 309.227 -150.402 -142 331.727 -156.431 -147 309.227 -172.902 -147 292.756 -172.902 -142 292.756 -156.431 -142 309.227 -172.902 -147 292.756 -195.402 -147 286.727 -195.402 -142 286.727 -172.902 -142 292.756 -195.402 -147 286.727 -217.902 -147 292.756 -217.902 -142 292.756 -195.402 -142 286.727 -217.902 -147 292.756 -234.373 -147 309.227 -234.373 -142 309.227 -217.902 -142 292.756 -234.373 -147 309.227 -240.402 -147 331.727 -240.402 -142 331.727 -234.373 -142 309.227 -240.402 -147 331.727 -234.373 -147 354.227 -234.373 -142 354.227 -240.402 -142 331.727 -234.373 -147 354.227 -217.902 -147 370.698 -217.902 -142 370.698 -234.373 -142 354.227 -195.402 -147 376.727 -217.902 -147 370.698 -234.373 -147 354.227 -240.402 -147 331.727 -234.373 -147 309.227 -217.902 -147 292.756 -195.402 -147 286.727 -172.902 -147 292.756 -156.431 -147 309.227 -150.402 -147 331.727 -156.431 -147 354.227 -172.902 -147 370.698 -217.902 -147 370.698 -195.402 -147 376.727 -195.402 -142 376.727 -217.902 -142 370.698 -196.057 -142 406.724 -158.471 -142 397.004 -158.471 -117 397.004 -196.057 -117 406.724 -233.468 -142 396.349 -196.057 -142 406.724 -196.057 -117 406.724 -233.468 -117 396.349 -260.679 -142 368.659 -233.468 -142 396.349 -233.468 -117 396.349 -260.679 -117 368.659 -270.399 -142 331.073 -260.679 -142 368.659 -260.679 -117 368.659 -270.399 -117 331.073 -260.024 -142 293.662 -270.399 -142 331.073 -270.399 -117 331.073 -260.024 -117 293.662 -64.6222 -142 -38.0654 -260.024 -142 293.662 -260.024 -117 293.662 -64.6222 -117 -38.0654 64.6222 -117 38.0653 -64.6222 -117 -38.0654 -260.024 -117 293.662 -270.399 -117 331.073 -260.679 -117 368.659 -233.468 -117 396.349 -196.057 -117 406.724 -158.471 -117 397.004 -130.78 -117 369.793 64.6222 -117 38.0653 -130.78 -117 369.793 -130.78 -142 369.793 64.6222 -142 38.0653 -64.6222 -142 -38.0654 64.6222 -142 38.0653 -130.78 -142 369.793 -158.471 -142 397.004 -196.057 -142 406.724 -233.468 -142 396.349 -260.679 -142 368.659 -270.399 -142 331.073 -260.024 -142 293.662 -158.471 -142 397.004 -130.78 -142 369.793 -130.78 -117 369.793 -158.471 -117 397.004 -65.2767 -175 36.9318 -38.0654 -175 64.6222 -38.0654 175 64.6222 -65.2767 175 36.9318 -74.9971 -175 -0.65449 -65.2767 -175 36.9318 -65.2767 175 36.9318 -74.9971 175 -0.65449 -64.6222 -175 -38.0654 -74.9971 -175 -0.65449 -74.9971 175 -0.65449 -64.6222 175 -38.0654 -36.9318 -175 -65.2767 -64.6222 -175 -38.0654 -64.6222 175 -38.0654 -36.9318 175 -65.2767 0.65449 -175 -74.9971 -36.9318 -175 -65.2767 -36.9318 175 -65.2767 0.65449 175 -74.9971 38.0654 -175 -64.6222 0.65449 -175 -74.9971 0.65449 175 -74.9971 38.0654 175 -64.6222 65.2767 -175 -36.9318 38.0654 -175 -64.6222 38.0654 175 -64.6222 65.2767 175 -36.9318 74.9971 -175 0.65449 65.2767 -175 -36.9318 65.2767 175 -36.9318 74.9971 175 0.65449 64.6222 -175 38.0654 74.9971 -175 0.65449 74.9971 175 0.65449 64.6222 175 38.0654 36.9318 -175 65.2767 64.6222 -175 38.0654 64.6222 175 38.0654 36.9318 175 65.2767 -0.65449 -175 74.9971 36.9318 -175 65.2767 36.9318 175 65.2767 -0.65449 175 74.9971 -38.0654 -175 64.6222 -0.65449 -175 74.9971 -0.65449 175 74.9971 -38.0654 175 64.6222 + + + + + + + + + + 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 0.866034 0 0.499985 0.866034 0 0.499985 1 0 0 0.866034 0 -0.499985 1 0 0 1 0 0 0.866034 0 -0.499985 0.499985 0 -0.866034 0.866034 0 -0.499985 0.866034 0 -0.499985 0.499985 0 -0.866034 0 0 -1 0.499985 0 -0.866034 0.499985 0 -0.866034 0 0 -1 -0.499985 0 -0.866034 0 0 -1 0 0 -1 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -1 0 0 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -1 0 0 -0.866034 0 0.499985 -1 0 0 -1 0 0 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.499985 0 0.866034 0 0 1 -0.499985 0 0.866034 -0.499985 0 0.866034 0 0 1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.866034 0 0.499985 0.499985 0 0.866034 0.499985 0 0.866034 0.866034 0 0.499985 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.499985 0 0.866034 0 0 1 0 0 1 0.499985 0 0.866034 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.78802 0 0.61565 0.861638 0 0.507523 0.861638 0 0.507523 0.78802 0 0.61565 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.920506 0 -0.390728 -0.861638 0 -0.507523 -0.861638 0 -0.507523 -0.920506 0 -0.390728 -0.920506 0 -0.390728 -0.920506 0 -0.390728 -0.999962 0 -0.00869778 -0.999962 0 -0.00869778 -0.999962 0 -0.00869778 -0.999962 0 -0.00869778 -0.87036 0 0.492416 -0.87036 0 0.492416 -0.87036 0 0.492416 -0.87036 0 0.492416 -0.507523 0 0.861638 -0.507523 0 0.861638 -0.507523 0 0.861638 -0.507523 0 0.861638 -0.00869778 0 0.999962 -0.00869778 0 0.999962 -0.00869778 0 0.999962 -0.00869778 0 0.999962 0.492416 0 0.87036 0.492416 0 0.87036 0.492416 0 0.87036 0.492416 0 0.87036 0.78802 0 0.61565 0.78802 0 0.61565 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 1 0 0 1 0 0 1 0 0 1 0 0 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 0 0 1 0 0 1 0 0 1 0.499985 0 0.866034 0.499985 0 0.866034 0 0 1 0.499985 0 0.866034 0.866034 0 0.499985 0.866034 0 0.499985 0.499985 0 0.866034 0.866034 0 0.499985 1 0 0 1 0 0 0.866034 0 0.499985 1 0 0 0.866034 0 -0.499985 0.866034 0 -0.499985 1 0 0 0.866034 0 -0.499985 0.499985 0 -0.866034 0.499985 0 -0.866034 0.866034 0 -0.499985 0.499985 0 -0.866034 0 0 -1 0 0 -1 0.499985 0 -0.866034 0 0 -1 -0.499985 0 -0.866034 -0.499985 0 -0.866034 0 0 -1 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -1 0 0 -1 0 0 -0.866034 0 -0.499985 -1 0 0 -0.866034 0 0.499985 -0.866034 0 0.499985 -1 0 0 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.866034 0 0.499985 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.499985 0 0.866034 0 0 1 0 0 1 -0.499985 0 0.866034 -0.00869778 0 0.999962 0.492416 0 0.87036 0.492416 0 0.87036 -0.00869778 0 0.999962 -0.507523 0 0.861638 -0.00869778 0 0.999962 -0.00869778 0 0.999962 -0.507523 0 0.861638 -0.87036 0 0.492416 -0.507523 0 0.861638 -0.507523 0 0.861638 -0.87036 0 0.492416 -0.999962 0 -0.00869778 -0.87036 0 0.492416 -0.87036 0 0.492416 -0.999962 0 -0.00869778 -0.920506 0 -0.390728 -0.999962 0 -0.00869778 -0.999962 0 -0.00869778 -0.920506 0 -0.390728 -0.861638 0 -0.507523 -0.920506 0 -0.390728 -0.920506 0 -0.390728 -0.861638 0 -0.507523 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.861638 0 0.507523 0.78802 0 0.61565 0.78802 0 0.61565 0.861638 0 0.507523 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.492416 0 0.87036 0.78802 0 0.61565 0.78802 0 0.61565 0.492416 0 0.87036 -0.87036 0 0.492416 -0.507523 0 0.861638 -0.507523 0 0.861638 -0.87036 0 0.492416 -0.999962 0 -0.00869778 -0.87036 0 0.492416 -0.87036 0 0.492416 -0.999962 0 -0.00869778 -0.861638 0 -0.507523 -0.999962 0 -0.00869778 -0.999962 0 -0.00869778 -0.861638 0 -0.507523 -0.492416 0 -0.87036 -0.861638 0 -0.507523 -0.861638 0 -0.507523 -0.492416 0 -0.87036 0.00869778 0 -0.999962 -0.492416 0 -0.87036 -0.492416 0 -0.87036 0.00869778 0 -0.999962 0.507523 0 -0.861638 0.00869778 0 -0.999962 0.00869778 0 -0.999962 0.507523 0 -0.861638 0.87036 0 -0.492416 0.507523 0 -0.861638 0.507523 0 -0.861638 0.87036 0 -0.492416 0.999962 0 0.00869778 0.87036 0 -0.492416 0.87036 0 -0.492416 0.999962 0 0.00869778 0.861638 0 0.507523 0.999962 0 0.00869778 0.999962 0 0.00869778 0.861638 0 0.507523 0.492416 0 0.87036 0.861638 0 0.507523 0.861638 0 0.507523 0.492416 0 0.87036 -0.00869778 0 0.999962 0.492416 0 0.87036 0.492416 0 0.87036 -0.00869778 0 0.999962 -0.507523 0 0.861638 -0.00869778 0 0.999962 -0.00869778 0 0.999962 -0.507523 0 0.861638 + + + + + + + + + + + + + + +

0 0 1 1 2 2 3 3

+

4 4 5 5 6 6 7 7

+

8 8 9 9 10 10 11 11

+

12 12 13 13 14 14 15 15

+
+ + + +

16 16 17 17 18 18 19 19

+

20 20 21 21 22 22 23 23

+

24 24 25 25 26 26 27 27

+

28 28 29 29 30 30 31 31

+

32 32 33 33 34 34 35 35

+

36 36 37 37 38 38 39 39

+

40 40 41 41 42 42 43 43

+

44 44 45 45 46 46 47 47

+

48 48 49 49 50 50 51 51

+

52 52 53 53 54 54 55 55

+

56 56 57 57 58 58 59 59 60 60 61 61 62 62 63 63 64 64 65 65 66 66 67 67

+

68 68 69 69 70 70 71 71

+

72 72 73 73 74 74 75 75 76 76 77 77 78 78 79 79 80 80 81 81 82 82 83 83

+

84 84 85 85 86 86 87 87

+
+ + + +

88 88 89 89 90 90 91 91 92 92 93 93 94 94 95 95 96 96

+

97 97 98 98 99 99 100 100

+

101 101 102 102 103 103 104 104 105 105 106 106 107 107 108 108 109 109

+

110 110 111 111 112 112 113 113

+

114 114 115 115 116 116 117 117

+

118 118 119 119 120 120 121 121

+

122 122 123 123 124 124 125 125

+

126 126 127 127 128 128 129 129

+

130 130 131 131 132 132 133 133

+

134 134 135 135 136 136 137 137

+
+ + + +

138 138 139 139 140 140 141 141 142 142 143 143 144 144 145 145 146 146 147 147 148 148 149 149

+

150 150 151 151 152 152 153 153

+

154 154 155 155 156 156 157 157

+

158 158 159 159 160 160 161 161

+

162 162 163 163 164 164 165 165

+

166 166 167 167 168 168 169 169

+

170 170 171 171 172 172 173 173

+

174 174 175 175 176 176 177 177

+

178 178 179 179 180 180 181 181

+

182 182 183 183 184 184 185 185

+

186 186 187 187 188 188 189 189

+

190 190 191 191 192 192 193 193

+

194 194 195 195 196 196 197 197

+
+ + + +

198 198 199 199 200 200 201 201

+

202 202 203 203 204 204 205 205

+

206 206 207 207 208 208 209 209

+

210 210 211 211 212 212 213 213

+

214 214 215 215 216 216 217 217

+

218 218 219 219 220 220 221 221

+

222 222 223 223 224 224 225 225

+

226 226 227 227 228 228 229 229

+

230 230 231 231 232 232 233 233

+

234 234 235 235 236 236 237 237

+

238 238 239 239 240 240 241 241

+

242 242 243 243 244 244 245 245 246 246 247 247 248 248 249 249 250 250 251 251 252 252 253 253

+

254 254 255 255 256 256 257 257

+
+ + + +

258 258 259 259 260 260 261 261

+

262 262 263 263 264 264 265 265

+

266 266 267 267 268 268 269 269

+

270 270 271 271 272 272 273 273

+

274 274 275 275 276 276 277 277

+

278 278 279 279 280 280 281 281

+

282 282 283 283 284 284 285 285 286 286 287 287 288 288 289 289 290 290

+

291 291 292 292 293 293 294 294

+

295 295 296 296 297 297 298 298 299 299 300 300 301 301 302 302 303 303

+

304 304 305 305 306 306 307 307

+
+ + + +

308 308 309 309 310 310 311 311

+

312 312 313 313 314 314 315 315

+

316 316 317 317 318 318 319 319

+

320 320 321 321 322 322 323 323

+

324 324 325 325 326 326 327 327

+

328 328 329 329 330 330 331 331

+

332 332 333 333 334 334 335 335

+

336 336 337 337 338 338 339 339

+

340 340 341 341 342 342 343 343

+

344 344 345 345 346 346 347 347

+

348 348 349 349 350 350 351 351

+

352 352 353 353 354 354 355 355

+
+
+ + + CAT3DBagRep + + +
+ + + + -361.69 -275.743 168.88 -361.004 -338.333 323.922 -469.289 -340.122 323.679 -469.975 -277.532 168.638 -361.921 -260.906 162.577 -361.69 -275.743 168.88 -469.975 -277.532 168.638 -470.206 -262.695 162.334 -364.622 -105.888 225.17 -361.921 -260.906 162.577 -470.206 -262.695 162.334 -472.907 -107.676 224.927 -364.759 -99.586 240.008 -364.622 -105.888 225.17 -472.907 -107.676 224.927 -473.044 -101.374 239.766 -364.073 -162.176 395.05 -364.759 -99.586 240.008 -473.044 -101.374 239.766 -472.358 -163.965 394.807 -363.842 -177.013 401.353 -364.073 -162.176 395.05 -472.358 -163.965 394.807 -472.127 -178.802 401.11 -469.426 -333.82 338.518 -472.127 -178.802 401.11 -472.358 -163.965 394.807 -473.044 -101.374 239.766 -472.907 -107.676 224.927 -470.206 -262.695 162.334 -469.975 -277.532 168.638 -469.289 -340.122 323.679 -361.004 -338.333 323.922 -361.142 -332.031 338.76 -469.426 -333.82 338.518 -469.289 -340.122 323.679 -361.142 -332.031 338.76 -361.004 -338.333 323.922 -361.69 -275.743 168.88 -361.921 -260.906 162.577 -364.622 -105.888 225.17 -364.759 -99.586 240.008 -364.073 -162.176 395.05 -363.842 -177.013 401.353 -361.142 -332.031 338.76 -363.842 -177.013 401.353 -472.127 -178.802 401.11 -469.426 -333.82 338.518 -327.86 88.3389 239.954 -329.24 150.918 394.995 -437.525 149.129 394.753 -436.145 86.5504 239.712 -327.931 94.6419 225.115 -327.86 88.3389 239.954 -436.145 86.5504 239.712 -436.216 92.8534 224.873 -330.352 249.665 162.522 -327.931 94.6419 225.115 -436.216 92.8534 224.873 -438.637 247.876 162.28 -330.611 264.501 168.826 -330.352 249.665 162.522 -438.637 247.876 162.28 -438.896 262.713 168.584 -331.991 327.08 323.867 -330.611 264.501 168.826 -438.896 262.713 168.584 -440.276 325.292 323.625 -331.92 320.777 338.706 -331.991 327.08 323.867 -440.276 325.292 323.625 -440.205 318.989 338.464 -437.784 163.966 401.057 -440.205 318.989 338.464 -440.276 325.292 323.625 -438.896 262.713 168.584 -438.637 247.876 162.28 -436.216 92.8534 224.873 -436.145 86.5504 239.712 -437.525 149.129 394.753 -329.24 150.918 394.995 -329.499 165.754 401.298 -437.784 163.966 401.057 -437.525 149.129 394.753 -329.499 165.754 401.298 -329.24 150.918 394.995 -327.86 88.3389 239.954 -327.931 94.6419 225.115 -330.352 249.665 162.522 -330.611 264.501 168.826 -331.991 327.08 323.867 -331.92 320.777 338.706 -329.499 165.754 401.298 -331.92 320.777 338.706 -440.205 318.989 338.464 -437.784 163.966 401.057 -486.26 114.592 243.105 -486.256 107.493 293.518 -486.676 126.547 340.726 -487.408 166.65 372.08 -488.257 217.056 379.179 -488.994 264.259 360.12 -489.422 295.61 320.01 -489.427 302.71 269.598 -489.006 283.655 222.389 -488.274 243.552 191.035 -487.426 193.146 183.936 -486.689 145.944 202.995 -438.643 244.372 191.146 -437.795 193.966 184.047 -487.426 193.146 183.936 -488.274 243.552 191.035 -439.376 284.475 222.5 -438.643 244.372 191.146 -488.274 243.552 191.035 -489.006 283.655 222.389 -439.796 303.529 269.708 -439.376 284.475 222.5 -489.006 283.655 222.389 -489.427 302.71 269.598 -439.791 296.43 320.121 -439.796 303.529 269.708 -489.427 302.71 269.598 -489.422 295.61 320.01 -439.363 265.078 360.231 -439.791 296.43 320.121 -489.422 295.61 320.01 -488.994 264.259 360.12 -438.626 217.876 379.289 -439.363 265.078 360.231 -488.994 264.259 360.12 -488.257 217.056 379.179 -437.778 167.47 372.191 -438.626 217.876 379.289 -488.257 217.056 379.179 -487.408 166.65 372.08 -437.045 127.367 340.837 -437.778 167.47 372.191 -487.408 166.65 372.08 -486.676 126.547 340.726 -436.625 108.313 293.628 -437.045 127.367 340.837 -486.676 126.547 340.726 -486.256 107.493 293.518 -436.63 115.412 243.216 -436.625 108.313 293.628 -486.256 107.493 293.518 -486.26 114.592 243.105 -437.058 146.764 203.106 -436.63 115.412 243.216 -486.26 114.592 243.105 -486.689 145.944 202.995 -437.795 193.966 184.047 -437.058 146.764 203.106 -486.689 145.944 202.995 -487.426 193.146 183.936 -463.67 -76.9259 293.455 -463.249 -102.378 337.545 -463.249 -102.378 388.455 -463.67 -76.9259 432.545 -464.399 -32.8423 458 -465.241 18.0611 458 -465.97 62.1448 432.545 -466.391 87.5965 388.455 -466.391 87.5965 337.545 -465.97 62.1448 293.455 -465.241 18.0611 268 -464.399 -32.8423 268 -416.34 62.9658 293.455 -415.61 18.8821 268 -465.241 18.0611 268 -465.97 62.1448 293.455 -416.761 88.4174 337.545 -416.34 62.9658 293.455 -465.97 62.1448 293.455 -466.391 87.5965 337.545 -416.761 88.4175 388.455 -416.761 88.4174 337.545 -466.391 87.5965 337.545 -466.391 87.5965 388.455 -416.34 62.9658 432.545 -416.761 88.4175 388.455 -466.391 87.5965 388.455 -465.97 62.1448 432.545 -415.61 18.8821 458 -416.34 62.9658 432.545 -465.97 62.1448 432.545 -465.241 18.0611 458 -414.768 -32.0213 458 -415.61 18.8821 458 -465.241 18.0611 458 -464.399 -32.8423 458 -414.039 -76.1049 432.545 -414.768 -32.0213 458 -464.399 -32.8423 458 -463.67 -76.9259 432.545 -413.618 -101.557 388.455 -414.039 -76.1049 432.545 -463.67 -76.9259 432.545 -463.249 -102.378 388.455 -413.618 -101.557 337.545 -413.618 -101.557 388.455 -463.249 -102.378 388.455 -463.249 -102.378 337.545 -414.039 -76.1049 293.455 -413.618 -101.557 337.545 -463.249 -102.378 337.545 -463.67 -76.9259 293.455 -414.768 -32.0213 268 -414.039 -76.1049 293.455 -463.67 -76.9259 293.455 -464.399 -32.8423 268 -415.61 18.8821 268 -414.768 -32.0213 268 -464.399 -32.8423 268 -465.241 18.0611 268 -305.333 -99.7653 279.4 -305.333 -99.7653 446.6 -413.618 -101.557 446.6 -413.618 -101.557 279.4 -305.521 -88.3668 268 -305.333 -99.7653 279.4 -413.618 -101.557 279.4 -413.807 -90.1581 268 -308.287 78.8103 268 -305.521 -88.3668 268 -413.807 -90.1581 268 -416.572 77.019 268 -308.476 90.2087 279.4 -308.287 78.8103 268 -416.572 77.019 268 -416.761 88.4174 279.4 -308.476 90.2087 446.6 -308.476 90.2087 279.4 -416.761 88.4174 279.4 -416.761 88.4174 446.6 -308.287 78.8103 458 -308.476 90.2087 446.6 -416.761 88.4174 446.6 -416.572 77.019 458 -413.807 -90.1581 458 -416.572 77.019 458 -416.761 88.4174 446.6 -416.761 88.4174 279.4 -416.572 77.019 268 -413.807 -90.1581 268 -413.618 -101.557 279.4 -413.618 -101.557 446.6 -305.333 -99.7653 446.6 -305.521 -88.3668 458 -413.807 -90.1581 458 -413.618 -101.557 446.6 -305.521 -88.3668 458 -305.333 -99.7653 446.6 -305.333 -99.7653 279.4 -305.521 -88.3668 268 -308.287 78.8103 268 -308.476 90.2087 279.4 -308.476 90.2087 446.6 -308.287 78.8103 458 -305.521 -88.3668 458 -308.287 78.8103 458 -416.572 77.019 458 -413.807 -90.1581 458 -269.238 -99.1682 410.5 -270.023 -51.6747 458 -306.119 -52.2718 458 -305.333 -99.7653 410.5 -269.238 -99.1682 315.5 -269.238 -99.1682 410.5 -305.333 -99.7653 410.5 -305.333 -99.7653 315.5 -270.023 -51.6747 268 -269.238 -99.1682 315.5 -305.333 -99.7653 315.5 -306.119 -52.2718 268 -271.595 43.3123 268 -270.023 -51.6747 268 -306.119 -52.2718 268 -307.69 42.7152 268 -272.38 90.8058 315.5 -271.595 43.3123 268 -307.69 42.7152 268 -308.476 90.2087 315.5 -272.38 90.8058 410.5 -272.38 90.8058 315.5 -308.476 90.2087 315.5 -308.476 90.2087 410.5 -271.595 43.3123 458 -272.38 90.8058 410.5 -308.476 90.2087 410.5 -307.69 42.7152 458 -270.023 -51.6747 458 -271.595 43.3123 458 -307.69 42.7152 458 -306.119 -52.2718 458 -327.522 -218.334 175.13 -327.987 -190.668 178.783 -310.99 -190.387 178.822 -310.525 -218.053 175.168 -326.344 -293.937 206.415 -326.671 -271.79 189.433 -309.674 -271.509 189.471 -309.346 -293.656 206.453 -326.113 -310.935 228.551 -326.344 -293.937 206.415 -309.346 -293.656 206.453 -309.115 -310.654 228.589 -325.994 -321.625 254.332 -326.113 -310.935 228.551 -309.115 -310.654 228.589 -308.996 -321.345 254.37 -325.996 -325.28 282.002 -325.994 -321.625 254.332 -308.996 -321.345 254.37 -308.998 -324.999 282.04 -326.118 -321.649 309.675 -325.996 -325.28 282.002 -308.998 -324.999 282.04 -309.12 -321.368 309.713 -326.352 -310.981 335.465 -326.118 -321.649 309.675 -309.12 -321.368 309.713 -309.355 -310.7 335.503 -326.682 -294.002 357.614 -326.352 -310.981 335.465 -309.355 -310.7 335.503 -309.685 -293.721 357.653 -327.086 -271.869 374.614 -326.682 -294.002 357.614 -309.685 -293.721 357.653 -310.089 -271.588 374.652 -327.536 -246.091 385.304 -327.086 -271.869 374.614 -310.089 -271.588 374.652 -310.538 -245.811 385.343 -328.001 -218.425 388.958 -327.536 -246.091 385.304 -310.538 -245.811 385.343 -311.003 -218.144 388.996 -328.45 -190.756 385.326 -328.001 -218.425 388.958 -311.003 -218.144 388.996 -311.452 -190.475 385.364 -328.852 -164.969 374.655 -328.45 -190.756 385.326 -311.452 -190.475 385.364 -311.854 -164.688 374.693 -329.18 -142.822 357.673 -328.852 -164.969 374.655 -311.854 -164.688 374.693 -312.182 -142.541 357.711 -329.411 -125.824 335.537 -329.18 -142.822 357.673 -312.182 -142.541 357.711 -312.413 -125.544 335.575 -329.529 -115.134 309.756 -329.411 -125.824 335.537 -312.413 -125.544 335.575 -312.532 -114.853 309.794 -329.527 -111.48 282.086 -329.529 -115.134 309.756 -312.532 -114.853 309.794 -312.53 -111.199 282.124 -329.405 -115.11 254.413 -329.527 -111.48 282.086 -312.53 -111.199 282.124 -312.408 -114.83 254.451 -329.171 -125.779 228.623 -329.405 -115.11 254.413 -312.408 -114.83 254.451 -312.173 -125.498 228.661 -328.841 -142.758 206.474 -329.171 -125.779 228.623 -312.173 -125.498 228.661 -311.843 -142.477 206.512 -328.437 -164.89 189.474 -328.841 -142.758 206.474 -311.843 -142.477 206.512 -311.439 -164.609 189.512 -327.987 -190.668 178.783 -328.437 -164.89 189.474 -311.439 -164.609 189.512 -310.99 -190.387 178.822 -310.99 -190.387 178.822 -311.439 -164.609 189.512 -311.843 -142.477 206.512 -312.173 -125.498 228.661 -312.408 -114.83 254.451 -312.53 -111.199 282.124 -312.532 -114.853 309.794 -312.413 -125.544 335.575 -312.182 -142.541 357.711 -311.854 -164.688 374.693 -311.452 -190.475 385.364 -311.003 -218.144 388.996 -310.538 -245.811 385.343 -310.089 -271.588 374.652 -309.685 -293.721 357.653 -309.355 -310.7 335.503 -309.12 -321.368 309.713 -308.998 -324.999 282.04 -308.996 -321.345 254.37 -309.115 -310.654 228.589 -309.346 -293.656 206.453 -309.674 -271.509 189.471 -310.076 -245.723 178.8 -310.525 -218.053 175.168 -326.671 -271.79 189.433 -327.073 -246.003 178.762 -310.076 -245.723 178.8 -309.674 -271.509 189.471 -327.522 -218.334 175.13 -327.073 -246.003 178.762 -326.671 -271.79 189.433 -326.344 -293.937 206.415 -326.113 -310.935 228.551 -325.994 -321.625 254.332 -325.996 -325.28 282.002 -326.118 -321.649 309.675 -326.352 -310.981 335.465 -326.682 -294.002 357.614 -327.086 -271.869 374.614 -327.536 -246.091 385.304 -328.001 -218.425 388.958 -328.45 -190.756 385.326 -328.852 -164.969 374.655 -329.18 -142.822 357.673 -329.411 -125.824 335.537 -329.529 -115.134 309.756 -329.527 -111.48 282.086 -329.405 -115.11 254.413 -329.171 -125.779 228.623 -328.841 -142.758 206.474 -328.437 -164.89 189.474 -327.987 -190.668 178.783 -327.073 -246.003 178.762 -327.522 -218.334 175.13 -310.525 -218.053 175.168 -310.076 -245.723 178.8 1535 97.2272 -97.2272 1535 132.815 -35.5876 1535 132.815 35.5876 1535 97.2272 97.2272 1535 35.5876 132.815 1535 -35.5876 132.815 1535 -97.2272 97.2272 1535 -132.815 35.5876 1535 -132.815 -35.5876 1535 -97.2272 -97.2272 1535 -35.5876 -132.815 1535 35.5876 -132.815 360 110 29.4744 0 110 29.4744 0 80.5256 80.5256 360 80.5256 80.5256 360 80.5256 80.5256 0 80.5256 80.5256 0 29.4744 110 360 29.4744 110 360 29.4744 110 0 29.4744 110 0 -29.4744 110 360 -29.4744 110 360 -29.4744 110 0 -29.4744 110 0 -80.5256 80.5256 360 -80.5256 80.5256 360 -80.5256 80.5256 0 -80.5256 80.5256 0 -110 29.4744 360 -110 29.4744 360 -110 29.4744 0 -110 29.4744 0 -110 -29.4744 360 -110 -29.4744 360 -110 -29.4744 0 -110 -29.4744 0 -80.5256 -80.5256 360 -80.5256 -80.5256 360 -80.5256 -80.5256 0 -80.5256 -80.5256 0 -29.4744 -110 360 -29.4744 -110 360 -29.4744 -110 0 -29.4744 -110 0 29.4744 -110 360 29.4744 -110 360 29.4744 -110 0 29.4744 -110 0 80.5256 -80.5256 360 80.5256 -80.5256 360 80.5256 -80.5256 0 80.5256 -80.5256 0 110 -29.4744 360 110 -29.4744 360 110 -29.4744 0 110 -29.4744 0 110 29.4744 360 110 29.4744 455 80.5256 80.5256 455 29.4744 110 455 -29.4744 110 455 -80.5256 80.5256 455 -110 29.4744 455 -110 -29.4744 455 -80.5256 -80.5256 455 -29.4744 -110 455 29.4744 -110 455 80.5256 -80.5256 455 110 -29.4744 455 110 29.4744 440 80.5256 -80.5256 440 110 -29.4744 455 110 -29.4744 455 80.5256 -80.5256 440 29.4744 -110 440 80.5256 -80.5256 455 80.5256 -80.5256 455 29.4744 -110 440 -29.4744 -110 440 29.4744 -110 455 29.4744 -110 455 -29.4744 -110 440 -80.5256 -80.5256 440 -29.4744 -110 455 -29.4744 -110 455 -80.5256 -80.5256 440 -110 -29.4744 440 -80.5256 -80.5256 455 -80.5256 -80.5256 455 -110 -29.4744 440 -110 29.4744 440 -110 -29.4744 455 -110 -29.4744 455 -110 29.4744 440 -80.5256 80.5256 440 -110 29.4744 455 -110 29.4744 455 -80.5256 80.5256 440 -29.4744 110 440 -80.5256 80.5256 455 -80.5256 80.5256 455 -29.4744 110 440 29.4744 110 440 -29.4744 110 455 -29.4744 110 455 29.4744 110 440 80.5256 80.5256 440 29.4744 110 455 29.4744 110 455 80.5256 80.5256 440 110 29.4744 440 80.5256 80.5256 455 80.5256 80.5256 455 110 29.4744 440 110 -29.4744 440 110 29.4744 455 110 29.4744 455 110 -29.4744 1310 62.2243 62.2243 1310 22.7757 85 1310 -22.7757 85 1310 -62.2243 62.2243 1310 -85 22.7757 1310 -85 -22.7757 1310 -62.2243 -62.2243 1310 -22.7757 -85 1310 22.7757 -85 1310 62.2243 -62.2243 1310 85 -22.7757 1310 85 22.7757 455 62.2243 -62.2243 455 85 -22.7757 1310 85 -22.7757 1310 62.2243 -62.2243 455 22.7757 -85 455 62.2243 -62.2243 1310 62.2243 -62.2243 1310 22.7757 -85 455 -22.7757 -85 455 22.7757 -85 1310 22.7757 -85 1310 -22.7757 -85 455 -62.2243 -62.2243 455 -22.7757 -85 1310 -22.7757 -85 1310 -62.2243 -62.2243 455 -85 -22.7757 455 -62.2243 -62.2243 1310 -62.2243 -62.2243 1310 -85 -22.7757 455 -85 22.7757 455 -85 -22.7757 1310 -85 -22.7757 1310 -85 22.7757 455 -62.2243 62.2243 455 -85 22.7757 1310 -85 22.7757 1310 -62.2243 62.2243 455 -22.7757 85 455 -62.2243 62.2243 1310 -62.2243 62.2243 1310 -22.7757 85 455 22.7757 85 455 -22.7757 85 1310 -22.7757 85 1310 22.7757 85 455 62.2243 62.2243 455 22.7757 85 1310 22.7757 85 1310 62.2243 62.2243 455 85 22.7757 455 62.2243 62.2243 1310 62.2243 62.2243 1310 85 22.7757 455 85 -22.7757 455 85 22.7757 1310 85 22.7757 1310 85 -22.7757 -48.3154 183 -48.3154 -66 183 -17.6847 -66 183 17.6846 -48.3154 183 48.3154 -17.6847 183 66 17.6846 183 66 48.3153 183 48.3154 66 183 17.6846 66 183 -17.6846 48.3154 183 -48.3153 17.6846 183 -66 -17.6847 183 -66 80.5256 83 -80.5256 29.4744 83 -110 17.6846 183 -66 48.3154 183 -48.3153 110 83 -29.4744 80.5256 83 -80.5256 48.3154 183 -48.3153 66 183 -17.6846 110 83 29.4744 110 83 -29.4744 66 183 -17.6846 66 183 17.6846 80.5256 83 80.5256 110 83 29.4744 66 183 17.6846 48.3153 183 48.3154 29.4744 83 110 80.5256 83 80.5256 48.3153 183 48.3154 17.6846 183 66 -29.4744 83 110 29.4744 83 110 17.6846 183 66 -17.6847 183 66 -80.5256 83 80.5256 -29.4744 83 110 -17.6847 183 66 -48.3154 183 48.3154 -110 83 29.4744 -80.5256 83 80.5256 -48.3154 183 48.3154 -66 183 17.6846 -110 83 -29.4744 -110 83 29.4744 -66 183 17.6846 -66 183 -17.6847 -80.5256 83 -80.5256 -110 83 -29.4744 -66 183 -17.6847 -48.3154 183 -48.3154 -29.4744 83 -110 -80.5256 83 -80.5256 -48.3154 183 -48.3154 -17.6847 183 -66 29.4744 83 -110 -29.4744 83 -110 -17.6847 183 -66 17.6846 183 -66 48.3154 -183 -48.3154 66 -183 -17.6846 66 -183 17.6846 48.3154 -183 48.3154 17.6847 -183 66 -17.6846 -183 66 -48.3153 -183 48.3154 -66 -183 17.6846 -66 -183 -17.6846 -48.3154 -183 -48.3153 -17.6846 -183 -66 17.6847 -183 -66 -80.5256 -83 -80.5256 -29.4744 -83 -110 -17.6846 -183 -66 -48.3154 -183 -48.3153 -110 -83 -29.4744 -80.5256 -83 -80.5256 -48.3154 -183 -48.3153 -66 -183 -17.6846 -110 -83 29.4744 -110 -83 -29.4744 -66 -183 -17.6846 -66 -183 17.6846 -80.5256 -83 80.5256 -110 -83 29.4744 -66 -183 17.6846 -48.3153 -183 48.3154 -29.4744 -83 110 -80.5256 -83 80.5256 -48.3153 -183 48.3154 -17.6846 -183 66 29.4744 -83 110 -29.4744 -83 110 -17.6846 -183 66 17.6847 -183 66 80.5256 -83 80.5256 29.4744 -83 110 17.6847 -183 66 48.3154 -183 48.3154 110 -83 29.4744 80.5256 -83 80.5256 48.3154 -183 48.3154 66 -183 17.6846 110 -83 -29.4744 110 -83 29.4744 66 -183 17.6846 66 -183 -17.6846 80.5256 -83 -80.5256 110 -83 -29.4744 66 -183 -17.6846 48.3154 -183 -48.3154 29.4744 -83 -110 80.5256 -83 -80.5256 48.3154 -183 -48.3154 17.6847 -183 -66 -29.4744 -83 -110 29.4744 -83 -110 17.6847 -183 -66 -17.6846 -183 -66 -110 -83 29.4744 -80.5256 -83 80.5256 -80.5256 83 80.5256 -110 83 29.4744 -110 -83 -29.4744 -110 -83 29.4744 -110 83 29.4744 -110 83 -29.4744 -80.5256 -83 -80.5256 -110 -83 -29.4744 -110 83 -29.4744 -80.5256 83 -80.5256 -29.4744 -83 -110 -80.5256 -83 -80.5256 -80.5256 83 -80.5256 -29.4744 83 -110 29.4744 -83 -110 -29.4744 -83 -110 -29.4744 83 -110 29.4744 83 -110 80.5256 -83 -80.5256 29.4744 -83 -110 29.4744 83 -110 80.5256 83 -80.5256 110 -83 -29.4744 80.5256 -83 -80.5256 80.5256 83 -80.5256 110 83 -29.4744 29.4744 -83 110 80.5256 -83 80.5256 80.5256 83 80.5256 29.4744 83 110 80.5256 -83 80.5256 110 -83 29.4744 110 83 29.4744 80.5256 83 80.5256 80.5256 83 80.5256 110 83 29.4744 110 83 -29.4744 80.5256 83 -80.5256 29.4744 83 -110 -29.4744 83 -110 -80.5256 83 -80.5256 -110 83 -29.4744 -110 83 29.4744 -80.5256 83 80.5256 -29.4744 83 110 29.4744 83 110 -80.5256 -83 80.5256 -29.4744 -83 110 -29.4744 83 110 -80.5256 83 80.5256 29.4744 -83 110 -29.4744 -83 110 -80.5256 -83 80.5256 -110 -83 29.4744 -110 -83 -29.4744 -80.5256 -83 -80.5256 -29.4744 -83 -110 29.4744 -83 -110 80.5256 -83 -80.5256 110 -83 -29.4744 110 -83 29.4744 80.5256 -83 80.5256 -29.4744 -83 110 29.4744 -83 110 29.4744 83 110 -29.4744 83 110 440 -29.4744 110 360 -29.4744 110 360 -190 40 440 -190 40 440 -29.4744 110 440 29.4744 110 360 29.4744 110 360 -29.4744 110 360 190 40 360 29.4744 110 440 29.4744 110 440 190 40 360 190 40 440 190 40 440 190 -40 360 190 -40 360 29.4744 -110 360 190 -40 440 190 -40 440 29.4744 -110 440 29.4744 -110 440 190 -40 440 190 40 440 29.4744 110 440 -29.4744 110 440 -190 40 440 -190 -40 440 -29.4744 -110 360 -29.4744 -110 440 -29.4744 -110 440 -190 -40 360 -190 -40 360 -190 -40 440 -190 -40 440 -190 40 360 -190 40 360 -190 -40 360 -190 40 360 -29.4744 110 360 29.4744 110 360 190 40 360 190 -40 360 29.4744 -110 360 -29.4744 -110 360 -29.4744 -110 360 29.4744 -110 440 29.4744 -110 440 -29.4744 -110 -294.568 208.335 175.074 -295.033 236.001 178.728 -278.035 236.282 178.766 -277.57 208.616 175.112 -293.389 132.732 206.359 -293.717 154.879 189.377 -276.719 155.16 189.415 -276.391 133.013 206.397 -293.157 115.734 228.495 -293.389 132.732 206.359 -276.391 133.013 206.397 -276.16 116.015 228.533 -293.038 105.044 254.277 -293.157 115.734 228.495 -276.16 116.015 228.533 -276.041 105.325 254.315 -293.04 101.389 281.947 -293.038 105.044 254.277 -276.041 105.325 254.315 -276.042 101.67 281.985 -293.162 105.02 309.62 -293.04 101.389 281.947 -276.042 101.67 281.985 -276.164 105.301 309.658 -293.395 115.689 335.41 -293.162 105.02 309.62 -276.164 105.301 309.658 -276.398 115.969 335.448 -293.725 132.668 357.559 -293.395 115.689 335.41 -276.398 115.969 335.448 -276.728 132.948 357.597 -294.129 154.8 374.558 -293.725 132.668 357.559 -276.728 132.948 357.597 -277.131 155.081 374.596 -294.578 180.578 385.249 -294.129 154.8 374.558 -277.131 155.081 374.596 -277.581 180.858 385.287 -295.043 208.244 388.903 -294.578 180.578 385.249 -277.581 180.858 385.287 -278.046 208.525 388.941 -295.492 235.913 385.271 -295.043 208.244 388.903 -278.046 208.525 388.941 -278.495 236.194 385.309 -295.894 261.7 374.6 -295.492 235.913 385.271 -278.495 236.194 385.309 -278.897 261.981 374.638 -296.222 283.847 357.618 -295.894 261.7 374.6 -278.897 261.981 374.638 -279.225 284.128 357.656 -296.454 300.845 335.482 -296.222 283.847 357.618 -279.225 284.128 357.656 -279.456 301.126 335.52 -296.573 311.535 309.7 -296.454 300.845 335.482 -279.456 301.126 335.52 -279.575 311.816 309.738 -296.571 315.19 282.03 -296.573 311.535 309.7 -279.575 311.816 309.738 -279.573 315.47 282.068 -296.449 311.559 254.357 -296.571 315.19 282.03 -279.573 315.47 282.068 -279.452 311.84 254.395 -296.216 300.89 228.568 -296.449 311.559 254.357 -279.452 311.84 254.395 -279.218 301.171 228.606 -295.886 283.911 206.418 -296.216 300.89 228.568 -279.218 301.171 228.606 -278.888 284.192 206.456 -295.482 261.779 189.419 -295.886 283.911 206.418 -278.888 284.192 206.456 -278.485 262.06 189.457 -295.033 236.001 178.728 -295.482 261.779 189.419 -278.485 262.06 189.457 -278.035 236.282 178.766 -278.035 236.282 178.766 -278.485 262.06 189.457 -278.888 284.192 206.456 -279.218 301.171 228.606 -279.452 311.84 254.395 -279.573 315.47 282.068 -279.575 311.816 309.738 -279.456 301.126 335.52 -279.225 284.128 357.656 -278.897 261.981 374.638 -278.495 236.194 385.309 -278.046 208.525 388.941 -277.581 180.858 385.287 -277.131 155.081 374.596 -276.728 132.948 357.597 -276.398 115.969 335.448 -276.164 105.301 309.658 -276.042 101.67 281.985 -276.041 105.325 254.315 -276.16 116.015 228.533 -276.391 133.013 206.397 -276.719 155.16 189.415 -277.121 180.947 178.745 -277.57 208.616 175.112 -293.717 154.879 189.377 -294.119 180.666 178.707 -277.121 180.947 178.745 -276.719 155.16 189.415 -294.568 208.335 175.074 -294.119 180.666 178.707 -293.717 154.879 189.377 -293.389 132.732 206.359 -293.157 115.734 228.495 -293.038 105.044 254.277 -293.04 101.389 281.947 -293.162 105.02 309.62 -293.395 115.689 335.41 -293.725 132.668 357.559 -294.129 154.8 374.558 -294.578 180.578 385.249 -295.043 208.244 388.903 -295.492 235.913 385.271 -295.894 261.7 374.6 -296.222 283.847 357.618 -296.454 300.845 335.482 -296.573 311.535 309.7 -296.571 315.19 282.03 -296.449 311.559 254.357 -296.216 300.89 228.568 -295.886 283.911 206.418 -295.482 261.779 189.419 -295.033 236.001 178.728 -294.119 180.666 178.707 -294.568 208.335 175.074 -277.57 208.616 175.112 -277.121 180.947 178.745 -185.563 81.9729 84.5581 -182.756 -87.9983 84.6163 -252.746 -89.1543 84.4597 -255.553 80.8169 84.4014 -185.907 82.0192 237.554 -185.563 81.9729 84.5581 -255.553 80.8169 84.4014 -255.897 80.8632 237.397 -185.641 48.3518 366.926 -185.907 82.0192 237.554 -255.897 80.8632 237.397 -255.631 47.1958 366.77 -185.558 41.8521 379.461 -185.641 48.3518 366.926 -255.631 47.1958 366.77 -255.548 40.6962 379.305 -185.446 33.6281 390.172 -185.558 41.8521 379.461 -255.548 40.6962 379.305 -255.436 32.4721 390.015 -185.288 22.9128 398.388 -185.446 33.6281 390.172 -255.436 32.4721 390.015 -255.278 21.7568 398.231 -185.094 10.4365 403.551 -185.288 22.9128 398.388 -255.278 21.7568 398.231 -255.084 9.28048 403.394 -184.877 -2.95073 405.308 -185.094 10.4365 403.551 -255.084 9.28048 403.394 -254.867 -4.1067 405.151 -184.652 -16.3364 403.54 -184.877 -2.95073 405.308 -254.867 -4.1067 405.151 -254.642 -17.4924 403.384 -184.435 -28.8083 398.368 -184.652 -16.3364 403.54 -254.642 -17.4924 403.384 -254.425 -29.9643 398.211 -184.24 -39.5166 390.143 -184.435 -28.8083 398.368 -254.425 -29.9643 398.211 -254.23 -40.6726 389.986 -184.08 -47.7315 379.427 -184.24 -39.5166 390.143 -254.23 -40.6726 389.986 -254.071 -48.8875 379.27 -183.945 -54.2055 366.962 -184.08 -47.7315 379.427 -254.071 -48.8875 379.27 -253.936 -55.3615 366.805 -253.089 -89.1077 237.455 -253.936 -55.3615 366.805 -254.071 -48.8875 379.27 -254.23 -40.6726 389.986 -254.425 -29.9643 398.211 -254.642 -17.4924 403.384 -254.867 -4.1067 405.151 -255.084 9.28048 403.394 -255.278 21.7568 398.231 -255.436 32.4721 390.015 -255.548 40.6962 379.305 -255.631 47.1958 366.77 -255.897 80.8632 237.397 -255.553 80.8169 84.4014 -252.746 -89.1543 84.4597 -182.756 -87.9983 84.6163 -183.099 -87.9518 237.611 -253.089 -89.1077 237.455 -252.746 -89.1543 84.4597 -183.099 -87.9518 237.611 -182.756 -87.9983 84.6163 -185.563 81.9729 84.5581 -185.907 82.0192 237.554 -185.641 48.3518 366.926 -185.558 41.8521 379.461 -185.446 33.6281 390.172 -185.288 22.9128 398.388 -185.094 10.4365 403.551 -184.877 -2.95073 405.308 -184.652 -16.3364 403.54 -184.435 -28.8083 398.368 -184.24 -39.5166 390.143 -184.08 -47.7315 379.427 -183.945 -54.2055 366.962 -183.099 -87.9518 237.611 -183.945 -54.2055 366.962 -253.936 -55.3615 366.805 -253.089 -89.1077 237.455 -271.785 -4.15165 256.086 -272.243 23.5145 259.74 -255.245 23.7957 259.74 -254.787 -3.87046 256.085 -270.534 -79.7547 287.368 -270.901 -57.6078 270.387 -253.903 -57.3266 270.387 -253.537 -79.4735 287.368 -270.253 -96.7526 309.503 -270.534 -79.7547 287.368 -253.537 -79.4735 287.368 -253.255 -96.4714 309.503 -270.076 -107.443 335.284 -270.253 -96.7526 309.503 -253.255 -96.4714 309.503 -253.078 -107.162 335.284 -270.016 -111.097 362.954 -270.076 -107.443 335.284 -253.078 -107.162 335.284 -253.018 -110.816 362.954 -270.076 -107.467 390.627 -270.016 -111.097 362.954 -253.018 -110.816 362.954 -253.078 -107.185 390.627 -270.252 -96.7982 416.418 -270.076 -107.467 390.627 -253.078 -107.185 390.627 -253.254 -96.5171 416.418 -270.533 -79.8193 438.568 -270.252 -96.7982 416.418 -253.254 -96.5171 416.418 -253.535 -79.5381 438.568 -270.899 -57.6868 455.568 -270.533 -79.8193 438.568 -253.535 -79.5381 438.568 -253.901 -57.4056 455.568 -271.325 -31.9092 466.26 -270.899 -57.6868 455.568 -253.901 -57.4056 455.568 -254.328 -31.628 466.26 -271.783 -4.24296 469.915 -271.325 -31.9092 466.26 -254.328 -31.628 466.26 -254.785 -3.96177 469.915 -272.241 23.4264 466.283 -271.783 -4.24296 469.915 -254.785 -3.96177 469.915 -255.243 23.7076 466.283 -272.667 49.2132 455.614 -272.241 23.4264 466.283 -255.243 23.7076 466.283 -255.67 49.4944 455.614 -273.034 71.3601 438.632 -272.667 49.2132 455.614 -255.67 49.4944 455.614 -256.036 71.6413 438.632 -273.315 88.358 416.497 -273.034 71.3601 438.632 -256.036 71.6413 438.632 -256.317 88.6392 416.497 -273.492 99.0483 390.716 -273.315 88.358 416.497 -256.317 88.6392 416.497 -256.494 99.3295 390.716 -273.552 102.703 363.046 -273.492 99.0483 390.716 -256.494 99.3295 390.716 -256.555 102.984 363.046 -273.492 99.072 335.373 -273.552 102.703 363.046 -256.555 102.984 363.046 -256.495 99.3532 335.373 -273.316 88.4036 309.582 -273.492 99.072 335.373 -256.495 99.3532 335.373 -256.318 88.6848 309.582 -273.035 71.4247 287.432 -273.316 88.4036 309.582 -256.318 88.6848 309.582 -256.038 71.7059 287.432 -272.669 49.2922 270.432 -273.035 71.4247 287.432 -256.038 71.7059 287.432 -255.671 49.5734 270.432 -272.243 23.5145 259.74 -272.669 49.2922 270.432 -255.671 49.5734 270.432 -255.245 23.7957 259.74 -255.245 23.7957 259.74 -255.671 49.5734 270.432 -256.038 71.7059 287.432 -256.318 88.6848 309.582 -256.495 99.3532 335.373 -256.555 102.984 363.046 -256.494 99.3295 390.716 -256.317 88.6392 416.497 -256.036 71.6413 438.632 -255.67 49.4944 455.614 -255.243 23.7076 466.283 -254.785 -3.96177 469.915 -254.328 -31.628 466.26 -253.901 -57.4056 455.568 -253.535 -79.5381 438.568 -253.254 -96.5171 416.418 -253.078 -107.185 390.627 -253.018 -110.816 362.954 -253.078 -107.162 335.284 -253.255 -96.4714 309.503 -253.537 -79.4735 287.368 -253.903 -57.3266 270.387 -254.33 -31.5397 259.717 -254.787 -3.87046 256.085 -270.901 -57.6078 270.387 -271.327 -31.8209 259.717 -254.33 -31.5397 259.717 -253.903 -57.3266 270.387 -271.785 -4.15165 256.086 -271.327 -31.8209 259.717 -270.901 -57.6078 270.387 -270.534 -79.7547 287.368 -270.253 -96.7526 309.503 -270.076 -107.443 335.284 -270.016 -111.097 362.954 -270.076 -107.467 390.627 -270.252 -96.7982 416.418 -270.533 -79.8193 438.568 -270.899 -57.6868 455.568 -271.325 -31.9092 466.26 -271.783 -4.24296 469.915 -272.241 23.4264 466.283 -272.667 49.2132 455.614 -273.034 71.3601 438.632 -273.315 88.358 416.497 -273.492 99.0483 390.716 -273.552 102.703 363.046 -273.492 99.072 335.373 -273.316 88.4036 309.582 -273.035 71.4247 287.432 -272.669 49.2922 270.432 -272.243 23.5145 259.74 -271.327 -31.8209 259.717 -271.785 -4.15165 256.086 -254.787 -3.87046 256.085 -254.33 -31.5397 259.717 1310 28.4701 -106.252 1310 77.7817 -77.7817 1420 77.7817 -77.7817 1420 28.4701 -106.252 1310 -106.252 -28.4701 1310 -77.7818 -77.7817 1420 -77.7818 -77.7817 1420 -106.252 -28.4701 1310 -106.252 28.4701 1310 -106.252 -28.4701 1420 -106.252 -28.4701 1420 -106.252 28.4701 1310 -77.7817 77.7818 1310 -106.252 28.4701 1420 -106.252 28.4701 1420 -77.7817 77.7818 1310 -28.4701 106.252 1310 -77.7817 77.7818 1420 -77.7817 77.7818 1420 -28.4701 106.252 1310 28.4701 106.252 1310 -28.4701 106.252 1420 -28.4701 106.252 1420 28.4701 106.252 1310 77.7817 77.7817 1310 28.4701 106.252 1420 28.4701 106.252 1420 77.7817 77.7817 1310 106.252 28.4701 1310 77.7817 77.7817 1420 77.7817 77.7817 1420 106.252 28.4701 1310 106.252 -28.4701 1310 106.252 28.4701 1420 106.252 28.4701 1420 106.252 -28.4701 1310 77.7817 -77.7817 1310 106.252 -28.4701 1420 106.252 -28.4701 1420 77.7817 -77.7817 1420 77.7817 -77.7817 1420 106.252 -28.4701 1420 106.252 28.4701 1420 77.7817 77.7817 1420 28.4701 106.252 1420 -28.4701 106.252 1420 -77.7817 77.7818 1420 -106.252 28.4701 1420 -106.252 -28.4701 1420 -77.7818 -77.7817 1420 -28.4701 -106.252 1420 28.4701 -106.252 1310 -77.7818 -77.7817 1310 -28.4701 -106.252 1420 -28.4701 -106.252 1420 -77.7818 -77.7817 1310 28.4701 -106.252 1310 -28.4701 -106.252 1310 -77.7818 -77.7817 1310 -106.252 -28.4701 1310 -106.252 28.4701 1310 -77.7817 77.7818 1310 -28.4701 106.252 1310 28.4701 106.252 1310 77.7817 77.7817 1310 106.252 28.4701 1310 106.252 -28.4701 1310 77.7817 -77.7817 1310 -28.4701 -106.252 1310 28.4701 -106.252 1420 28.4701 -106.252 1420 -28.4701 -106.252 1435 97.2272 -97.2272 1435 132.815 -35.5876 1435 132.815 35.5876 1435 97.2272 97.2272 1435 35.5876 132.815 1435 -35.5876 132.815 1435 -97.2272 97.2272 1435 -132.815 35.5876 1435 -132.815 -35.5876 1435 -97.2272 -97.2272 1435 -35.5876 -132.815 1435 35.5876 -132.815 1420 -77.7818 -77.7817 1420 -28.4701 -106.252 1435 -35.5876 -132.815 1435 -97.2272 -97.2272 1420 -106.252 -28.4701 1420 -77.7818 -77.7817 1435 -97.2272 -97.2272 1435 -132.815 -35.5876 1420 -106.252 28.4701 1420 -106.252 -28.4701 1435 -132.815 -35.5876 1435 -132.815 35.5876 1420 -77.7817 77.7818 1420 -106.252 28.4701 1435 -132.815 35.5876 1435 -97.2272 97.2272 1420 -28.4701 106.252 1420 -77.7817 77.7818 1435 -97.2272 97.2272 1435 -35.5876 132.815 1420 28.4701 106.252 1420 -28.4701 106.252 1435 -35.5876 132.815 1435 35.5876 132.815 1420 77.7817 77.7817 1420 28.4701 106.252 1435 35.5876 132.815 1435 97.2272 97.2272 1420 106.252 28.4701 1420 77.7817 77.7817 1435 97.2272 97.2272 1435 132.815 35.5876 1420 106.252 -28.4701 1420 106.252 28.4701 1435 132.815 35.5876 1435 132.815 -35.5876 1420 77.7817 -77.7817 1420 106.252 -28.4701 1435 132.815 -35.5876 1435 97.2272 -97.2272 1420 28.4701 -106.252 1420 77.7817 -77.7817 1435 97.2272 -97.2272 1435 35.5876 -132.815 1420 -28.4701 -106.252 1420 28.4701 -106.252 1435 35.5876 -132.815 1435 -35.5876 -132.815 1435 -97.2272 -97.2272 1435 -35.5876 -132.815 1535 -35.5876 -132.815 1535 -97.2272 -97.2272 1435 -132.815 -35.5876 1435 -97.2272 -97.2272 1535 -97.2272 -97.2272 1535 -132.815 -35.5876 1435 -132.815 35.5876 1435 -132.815 -35.5876 1535 -132.815 -35.5876 1535 -132.815 35.5876 1435 -97.2272 97.2272 1435 -132.815 35.5876 1535 -132.815 35.5876 1535 -97.2272 97.2272 1435 -35.5876 132.815 1435 -97.2272 97.2272 1535 -97.2272 97.2272 1535 -35.5876 132.815 1435 35.5876 132.815 1435 -35.5876 132.815 1535 -35.5876 132.815 1535 35.5876 132.815 1435 97.2272 97.2272 1435 35.5876 132.815 1535 35.5876 132.815 1535 97.2272 97.2272 1435 132.815 35.5876 1435 97.2272 97.2272 1535 97.2272 97.2272 1535 132.815 35.5876 1435 132.815 -35.5876 1435 132.815 35.5876 1535 132.815 35.5876 1535 132.815 -35.5876 1435 97.2272 -97.2272 1435 132.815 -35.5876 1535 132.815 -35.5876 1535 97.2272 -97.2272 1435 35.5876 -132.815 1435 97.2272 -97.2272 1535 97.2272 -97.2272 1535 35.5876 -132.815 1435 -35.5876 -132.815 1435 35.5876 -132.815 1535 35.5876 -132.815 1535 -35.5876 -132.815 -310.432 -244.348 327.548 -240.442 -243.192 327.705 -240.892 -216.946 334.739 -310.882 -218.102 334.582 -244.677 65 -53.4127 -244.918 65 53.9512 -241.338 -188.887 327.22 -240.892 -216.946 334.739 -240.442 -243.192 327.705 -240.082 -262.405 308.489 -239.907 -269.436 282.241 -239.964 -262.402 255.989 -242.433 -70.8991 -53.4127 -310.072 -263.561 308.332 -240.082 -262.405 308.489 -240.442 -243.192 327.705 -310.432 -244.348 327.548 -314.687 65 -53.4127 -312.422 -72.1525 -53.4128 -309.954 -263.559 255.832 -309.897 -270.592 282.083 -310.072 -263.561 308.332 -310.432 -244.348 327.548 -310.882 -218.102 334.582 -311.328 -190.043 327.063 -314.925 65 52.5498 -314.925 65 52.5498 -311.328 -190.043 327.063 -241.338 -188.887 327.22 -244.918 65 53.9512 -312.422 -72.1525 -53.4128 -242.433 -70.8991 -53.4127 -239.964 -262.402 255.989 -309.954 -263.559 255.832 -309.954 -263.559 255.832 -239.964 -262.402 255.989 -239.907 -269.436 282.241 -309.897 -270.592 282.083 -309.897 -270.592 282.083 -239.907 -269.436 282.241 -240.082 -262.405 308.489 -310.072 -263.561 308.332 -278.675 261.062 282.029 -278.675 261.062 282.029 -278.617 254.028 308.278 -278.617 254.028 308.278 -278.5 254.03 255.778 -278.5 254.03 255.778 -278.343 234.814 327.494 -277.926 208.567 334.528 -277.476 182.321 327.494 -277.428 205.46 135.415 -274.654 63.0984 -53.4127 -272.961 -65 134.821 -272.539 -65 -53.4127 -208.684 262.217 282.186 -208.684 262.217 282.186 -208.627 255.184 308.435 -208.627 255.184 308.435 -208.509 255.185 255.935 -208.509 255.185 255.935 -208.353 235.97 327.651 -207.935 209.723 334.685 -207.486 183.477 327.651 -207.464 207.811 138.533 -204.645 63.0985 -53.4127 -202.95 -65 134.078 -202.529 -65 -53.4127 -204.645 63.0985 -53.4127 -274.654 63.0984 -53.4127 -277.428 205.46 135.415 -207.464 207.811 138.533 -278.5 254.03 255.778 -208.509 255.185 255.935 -207.464 207.811 138.533 -277.428 205.46 135.415 -202.95 -65 134.078 -207.486 183.477 327.651 -277.476 182.321 327.494 -272.961 -65 134.821 -277.926 208.567 334.528 -277.476 182.321 327.494 -207.486 183.477 327.651 -207.935 209.723 334.685 -208.627 255.184 308.435 -278.617 254.028 308.278 -278.343 234.814 327.494 -208.353 235.97 327.651 -350 -85 -85 0 -85 -85 0 -85 85 -350 -85 85 -350 85 85 -350 -85 85 0 -85 85 0 85 85 0 85 -85 -350 85 -85 -350 85 85 0 85 85 -350 85 -85 0 85 -85 0 -85 -85 -350 -85 -85 -350 85 -85 -350 -85 -85 -350 -85 85 -350 85 85 1471.7 -27.5 132.815 1471.7 27.5 132.815 1471.7 27.5 150.815 1471.7 -27.5 150.815 1446.7 -27.5 132.815 1471.7 -27.5 132.815 1471.7 -27.5 150.815 1446.7 -27.5 150.815 1446.7 27.5 150.815 1446.7 -27.5 150.815 1471.7 -27.5 150.815 1471.7 27.5 150.815 1471.7 27.5 132.815 1446.7 27.5 132.815 1446.7 27.5 150.815 1471.7 27.5 150.815 1446.7 27.5 132.815 1471.7 27.5 132.815 1471.7 -27.5 132.815 1446.7 -27.5 132.815 1446.7 27.5 132.815 1446.7 -27.5 132.815 1446.7 -27.5 150.815 1446.7 27.5 150.815 -241.338 -188.887 327.22 -311.328 -190.043 327.063 -310.882 -218.102 334.582 -240.892 -216.946 334.739 -529.615 -228.073 236.436 -529.277 -249.795 245.665 -529.084 -263.995 264.52 -529.09 -266.866 287.949 -529.291 -257.639 309.674 -529.634 -238.787 323.875 -530.027 -215.361 326.745 -530.365 -193.638 317.516 -530.558 -179.439 298.662 -530.552 -176.568 275.232 -530.351 -185.795 253.507 -530.008 -204.647 239.307 -521.529 -176.419 275.253 -521.328 -185.646 253.527 -530.351 -185.795 253.507 -530.552 -176.568 275.232 -521.534 -179.29 298.682 -521.529 -176.419 275.253 -530.552 -176.568 275.232 -530.558 -179.439 298.662 -521.342 -193.489 317.537 -521.534 -179.29 298.682 -530.558 -179.439 298.662 -530.365 -193.638 317.516 -521.003 -215.212 326.765 -521.342 -193.489 317.537 -530.365 -193.638 317.516 -530.027 -215.361 326.745 -520.61 -238.638 323.895 -521.003 -215.212 326.765 -530.027 -215.361 326.745 -529.634 -238.787 323.875 -520.267 -257.49 309.695 -520.61 -238.638 323.895 -529.634 -238.787 323.875 -529.291 -257.639 309.674 -520.066 -266.716 287.969 -520.267 -257.49 309.695 -529.291 -257.639 309.674 -529.09 -266.866 287.949 -520.061 -263.846 264.54 -520.066 -266.716 287.969 -529.09 -266.866 287.949 -529.084 -263.995 264.52 -520.253 -249.646 245.685 -520.061 -263.846 264.54 -529.084 -263.995 264.52 -529.277 -249.795 245.665 -520.591 -227.924 236.457 -520.253 -249.646 245.685 -529.277 -249.795 245.665 -529.615 -228.073 236.436 -520.984 -204.498 239.327 -520.591 -227.924 236.457 -529.615 -228.073 236.436 -530.008 -204.647 239.307 -521.328 -185.646 253.527 -520.984 -204.498 239.327 -530.008 -204.647 239.307 -530.351 -185.795 253.507 -519.959 -260.012 191.089 -519.367 -300.118 222.443 -519.158 -319.175 269.651 -519.389 -312.079 320.064 -519.996 -280.731 360.173 -520.819 -233.53 379.232 -521.635 -183.123 372.133 -522.227 -143.018 340.779 -522.436 -123.96 293.571 -522.206 -131.056 243.158 -521.598 -162.405 203.049 -520.776 -209.606 183.99 -472.575 -130.237 243.269 -471.968 -161.585 203.16 -521.598 -162.405 203.049 -522.206 -131.056 243.158 -472.806 -123.141 293.682 -472.575 -130.237 243.269 -522.206 -131.056 243.158 -522.436 -123.96 293.571 -472.597 -142.198 340.89 -472.806 -123.141 293.682 -522.436 -123.96 293.571 -522.227 -143.018 340.779 -472.005 -182.304 372.245 -472.597 -142.198 340.89 -522.227 -143.018 340.779 -521.635 -183.123 372.133 -471.188 -232.71 379.343 -472.005 -182.304 372.245 -521.635 -183.123 372.133 -520.819 -233.53 379.232 -470.366 -279.911 360.285 -471.188 -232.71 379.343 -520.819 -233.53 379.232 -519.996 -280.731 360.173 -469.758 -311.26 320.175 -470.366 -279.911 360.285 -519.996 -280.731 360.173 -519.389 -312.079 320.064 -469.528 -318.356 269.762 -469.758 -311.26 320.175 -519.389 -312.079 320.064 -519.158 -319.175 269.651 -469.737 -299.298 222.554 -469.528 -318.356 269.762 -519.158 -319.175 269.651 -519.367 -300.118 222.443 -470.329 -259.193 191.2 -469.737 -299.298 222.554 -519.367 -300.118 222.443 -519.959 -260.012 191.089 -471.145 -208.786 184.101 -470.329 -259.193 191.2 -519.959 -260.012 191.089 -520.776 -209.606 183.99 -471.968 -161.585 203.16 -471.145 -208.786 184.101 -520.776 -209.606 183.99 -521.598 -162.405 203.049 -325.057 -324.223 290.528 -325.63 -297.965 352.356 -361.725 -298.562 352.275 -361.152 -324.82 290.447 -325.447 -288.661 202.436 -325.057 -324.223 290.528 -361.152 -324.82 290.447 -361.542 -289.257 202.355 -326.409 -226.84 176.172 -325.447 -288.661 202.436 -361.542 -289.257 202.355 -362.504 -227.436 176.091 -327.944 -138.762 211.736 -326.409 -226.84 176.172 -362.504 -227.436 176.091 -364.039 -139.358 211.655 -328.516 -112.504 273.564 -327.944 -138.762 211.736 -364.039 -139.358 211.655 -364.611 -113.1 273.483 -328.126 -148.066 361.656 -328.516 -112.504 273.564 -364.611 -113.1 273.483 -364.221 -148.662 361.575 -327.164 -209.887 387.92 -328.126 -148.066 361.656 -364.221 -148.662 361.575 -363.259 -210.483 387.839 -325.63 -297.965 352.356 -327.164 -209.887 387.92 -363.259 -210.483 387.839 -361.725 -298.562 352.275 -473.467 -30.3367 323.509 -473.191 -47.0252 340.2 -473.09 -53.1336 363 -473.191 -47.0252 385.8 -473.467 -30.3367 402.491 -473.844 -7.53983 408.6 -474.221 15.2571 402.491 -474.497 31.9455 385.8 -474.598 38.0539 363 -474.497 31.9455 340.2 -474.221 15.2571 323.509 -473.844 -7.53983 317.4 -465.473 32.0948 340.2 -465.197 15.4063 323.509 -474.221 15.2571 323.509 -474.497 31.9455 340.2 -465.574 38.2032 363 -465.473 32.0948 340.2 -474.497 31.9455 340.2 -474.598 38.0539 363 -465.473 32.0948 385.8 -465.574 38.2032 363 -474.598 38.0539 363 -474.497 31.9455 385.8 -465.197 15.4063 402.491 -465.473 32.0948 385.8 -474.497 31.9455 385.8 -474.221 15.2571 402.491 -464.82 -7.39055 408.6 -465.197 15.4063 402.491 -474.221 15.2571 402.491 -473.844 -7.53983 408.6 -464.443 -30.1874 402.491 -464.82 -7.39055 408.6 -473.844 -7.53983 408.6 -473.467 -30.3367 402.491 -464.167 -46.8759 385.8 -464.443 -30.1874 402.491 -473.467 -30.3367 402.491 -473.191 -47.0252 385.8 -464.066 -52.9843 363 -464.167 -46.8759 385.8 -473.191 -47.0252 385.8 -473.09 -53.1336 363 -464.167 -46.8759 340.2 -464.066 -52.9843 363 -473.09 -53.1336 363 -473.191 -47.0252 340.2 -464.443 -30.1874 323.509 -464.167 -46.8759 340.2 -473.191 -47.0252 340.2 -473.467 -30.3367 323.509 -464.82 -7.39055 317.4 -464.443 -30.1874 323.509 -473.467 -30.3367 323.509 -473.844 -7.53983 317.4 -465.197 15.4063 323.509 -464.82 -7.39055 317.4 -473.844 -7.53983 317.4 -474.221 15.2571 323.509 -496.209 169.032 253.454 -496.105 159.804 275.179 -496.205 162.673 298.608 -496.481 176.871 317.463 -496.861 198.593 326.692 -497.241 222.019 323.821 -497.521 240.872 309.621 -497.625 250.1 287.896 -497.525 247.231 264.467 -497.249 233.033 245.612 -496.869 211.311 236.383 -496.489 187.885 239.253 -488.225 233.183 245.632 -487.845 211.46 236.403 -496.869 211.311 236.383 -497.249 233.033 245.612 -488.501 247.38 264.487 -488.225 233.183 245.632 -497.249 233.033 245.612 -497.525 247.231 264.467 -488.601 250.249 287.916 -488.501 247.38 264.487 -497.525 247.231 264.467 -497.625 250.1 287.896 -488.497 241.021 309.641 -488.601 250.249 287.916 -497.625 250.1 287.896 -497.521 240.872 309.621 -488.218 222.168 323.842 -488.497 241.021 309.641 -497.521 240.872 309.621 -497.241 222.019 323.821 -487.837 198.742 326.712 -488.218 222.168 323.842 -497.241 222.019 323.821 -496.861 198.593 326.692 -487.458 177.02 317.483 -487.837 198.742 326.712 -496.861 198.593 326.692 -496.481 176.871 317.463 -487.181 162.822 298.628 -487.458 177.02 317.483 -496.481 176.871 317.463 -496.205 162.673 298.608 -487.081 159.953 275.199 -487.181 162.822 298.628 -496.205 162.673 298.608 -496.105 159.804 275.179 -487.185 169.181 253.474 -487.081 159.953 275.199 -496.105 159.804 275.179 -496.209 169.032 253.454 -487.465 188.034 239.274 -487.185 169.181 253.474 -496.209 169.032 253.454 -496.489 187.885 239.253 -487.845 211.46 236.403 -487.465 188.034 239.274 -496.489 187.885 239.253 -496.869 211.311 236.383 -292.847 138.002 361.601 -293.927 199.821 387.865 -330.022 199.225 387.784 -328.942 137.406 361.52 -292.063 102.446 273.509 -292.847 138.002 361.601 -328.942 137.406 361.52 -328.158 101.85 273.428 -292.359 128.709 211.681 -292.063 102.446 273.509 -328.158 101.85 273.428 -328.454 128.113 211.601 -293.734 216.79 176.117 -292.359 128.709 211.681 -328.454 128.113 211.601 -329.829 216.194 176.037 -294.814 278.609 202.381 -293.734 216.79 176.117 -329.829 216.194 176.037 -330.909 278.013 202.3 -295.598 314.165 290.473 -294.814 278.609 202.381 -330.909 278.013 202.3 -331.693 313.569 290.392 -295.302 287.902 352.301 -295.598 314.165 290.473 -331.693 313.569 290.392 -331.397 287.306 352.22 -293.927 199.821 387.865 -295.302 287.902 352.301 -331.397 287.306 352.22 -330.022 199.225 387.784 + + + + + + + + + + 0.0133366 -0.713326 -0.700705 0.01648 -0.999824 0.00897244 0.01648 -0.999824 0.00897244 0.0133366 -0.713326 -0.700705 0.00238044 -0.00894192 -0.999957 0.0133366 -0.713326 -0.700705 0.0133366 -0.713326 -0.700705 0.00238044 -0.00894192 -0.999957 -0.00994903 0.700644 -0.713442 0.00238044 -0.00894192 -0.999957 0.00238044 -0.00894192 -0.999957 -0.00994903 0.700644 -0.713442 -0.01648 0.999824 -0.00897244 -0.00994903 0.700644 -0.713442 -0.00994903 0.700644 -0.713442 -0.01648 0.999824 -0.00897244 -0.0133366 0.713326 0.700705 -0.01648 0.999824 -0.00897244 -0.01648 0.999824 -0.00897244 -0.0133366 0.713326 0.700705 -0.00238044 0.00894192 0.999957 -0.0133366 0.713326 0.700705 -0.0133366 0.713326 0.700705 -0.00238044 0.00894192 0.999957 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 0.01648 -0.999824 0.00897244 0.00994903 -0.700644 0.713442 0.00994903 -0.700644 0.713442 0.01648 -0.999824 0.00897244 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.00994903 -0.700644 0.713442 -0.00238044 0.00894192 0.999957 -0.00238044 0.00894192 0.999957 0.00994903 -0.700644 0.713442 0.0165105 -0.999823 -0.00897244 0.0101932 -0.713378 0.700705 0.0101932 -0.713378 0.700705 0.0165105 -0.999823 -0.00897244 0.0131535 -0.700583 -0.71345 0.0165105 -0.999823 -0.00897244 0.0165105 -0.999823 -0.00897244 0.0131535 -0.700583 -0.71345 0.00207526 0.00900296 -0.999957 0.0131535 -0.700583 -0.71345 0.0131535 -0.700583 -0.71345 0.00207526 0.00900296 -0.999957 -0.0101932 0.713378 -0.700705 0.00207526 0.00900296 -0.999957 0.00207526 0.00900296 -0.999957 -0.0101932 0.713378 -0.700705 -0.0165105 0.999823 0.00897244 -0.0101932 0.713378 -0.700705 -0.0101932 0.713378 -0.700705 -0.0165105 0.999823 0.00897244 -0.0131535 0.700583 0.71345 -0.0165105 0.999823 0.00897244 -0.0165105 0.999823 0.00897244 -0.0131535 0.700583 0.71345 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 0.0101932 -0.713378 0.700705 -0.00207526 -0.00900296 0.999957 -0.00207526 -0.00900296 0.999957 0.0101932 -0.713378 0.700705 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 -0.00207526 -0.00900296 0.999957 -0.0131535 0.700583 0.71345 -0.0131535 0.700583 0.71345 -0.00207526 -0.00900296 0.999957 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.00439467 0.390942 -0.920405 0.00421155 -0.121525 -0.992579 0.00421155 -0.121525 -0.992579 -0.00439467 0.390942 -0.920405 -0.0118412 0.798724 -0.601581 -0.00439467 0.390942 -0.920405 -0.00439467 0.390942 -0.920405 -0.0118412 0.798724 -0.601581 -0.0161138 0.99245 -0.121586 -0.0118412 0.798724 -0.601581 -0.0118412 0.798724 -0.601581 -0.0161138 0.99245 -0.121586 -0.0160527 0.920262 0.390973 -0.0161138 0.99245 -0.121586 -0.0161138 0.99245 -0.121586 -0.0160527 0.920262 0.390973 -0.0116886 0.601489 0.798795 -0.0160527 0.920262 0.390973 -0.0160527 0.920262 0.390973 -0.0116886 0.601489 0.798795 -0.00421155 0.121525 0.992579 -0.0116886 0.601489 0.798795 -0.0116886 0.601489 0.798795 -0.00421155 0.121525 0.992579 0.00439467 -0.390942 0.920405 -0.00421155 0.121525 0.992579 -0.00421155 0.121525 0.992579 0.00439467 -0.390942 0.920405 0.0118412 -0.798724 0.601581 0.00439467 -0.390942 0.920405 0.00439467 -0.390942 0.920405 0.0118412 -0.798724 0.601581 0.0161138 -0.99245 0.121586 0.0118412 -0.798724 0.601581 0.0118412 -0.798724 0.601581 0.0161138 -0.99245 0.121586 0.0160527 -0.920262 -0.390973 0.0161138 -0.99245 0.121586 0.0161138 -0.99245 0.121586 0.0160527 -0.920262 -0.390973 0.0116886 -0.601489 -0.798795 0.0160527 -0.920262 -0.390973 0.0160527 -0.920262 -0.390973 0.0116886 -0.601489 -0.798795 0.00421155 -0.121525 -0.992579 0.0116886 -0.601489 -0.798795 0.0116886 -0.601489 -0.798795 0.00421155 -0.121525 -0.992579 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.0116886 0.706992 -0.707125 -0.00427259 0.258766 -0.96593 -0.00427259 0.258766 -0.96593 -0.0116886 0.706992 -0.707125 -0.0159612 0.9658 -0.258797 -0.0116886 0.706992 -0.707125 -0.0116886 0.706992 -0.707125 -0.0159612 0.9658 -0.258797 -0.0159612 0.9658 0.258797 -0.0159612 0.9658 -0.258797 -0.0159612 0.9658 -0.258797 -0.0159612 0.9658 0.258797 -0.0116886 0.706992 0.707125 -0.0159612 0.9658 0.258797 -0.0159612 0.9658 0.258797 -0.0116886 0.706992 0.707125 -0.00427259 0.258766 0.96593 -0.0116886 0.706992 0.707125 -0.0116886 0.706992 0.707125 -0.00427259 0.258766 0.96593 0.00427259 -0.258766 0.96593 -0.00427259 0.258766 0.96593 -0.00427259 0.258766 0.96593 0.00427259 -0.258766 0.96593 0.0116886 -0.706992 0.707125 0.00427259 -0.258766 0.96593 0.00427259 -0.258766 0.96593 0.0116886 -0.706992 0.707125 0.0159612 -0.9658 0.258797 0.0116886 -0.706992 0.707125 0.0116886 -0.706992 0.707125 0.0159612 -0.9658 0.258797 0.0159612 -0.9658 -0.258797 0.0159612 -0.9658 0.258797 0.0159612 -0.9658 0.258797 0.0159612 -0.9658 -0.258797 0.0116886 -0.706992 -0.707125 0.0159612 -0.9658 -0.258797 0.0159612 -0.9658 -0.258797 0.0116886 -0.706992 -0.707125 0.00427259 -0.258766 -0.96593 0.0116886 -0.706992 -0.707125 0.0116886 -0.706992 -0.707125 0.00427259 -0.258766 -0.96593 -0.00427259 0.258766 -0.96593 0.00427259 -0.258766 -0.96593 0.00427259 -0.258766 -0.96593 -0.00427259 0.258766 -0.96593 0.0152593 -0.923758 -0.382672 0.0152593 -0.923758 0.382672 0.0152593 -0.923758 0.382672 0.0152593 -0.923758 -0.382672 0.00631733 -0.382611 -0.923888 0.0152593 -0.923758 -0.382672 0.0152593 -0.923758 -0.382672 0.00631733 -0.382611 -0.923888 -0.00631733 0.382611 -0.923888 0.00631733 -0.382611 -0.923888 0.00631733 -0.382611 -0.923888 -0.00631733 0.382611 -0.923888 -0.0152593 0.923758 -0.382672 -0.00631733 0.382611 -0.923888 -0.00631733 0.382611 -0.923888 -0.0152593 0.923758 -0.382672 -0.0152593 0.923758 0.382672 -0.0152593 0.923758 -0.382672 -0.0152593 0.923758 -0.382672 -0.0152593 0.923758 0.382672 -0.00631733 0.382611 0.923888 -0.0152593 0.923758 0.382672 -0.0152593 0.923758 0.382672 -0.00631733 0.382611 0.923888 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 0.0152593 -0.923758 0.382672 0.00631733 -0.382611 0.923888 0.00631733 -0.382611 0.923888 0.0152593 -0.923758 0.382672 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.00631733 -0.382611 0.923888 -0.00631733 0.382611 0.923888 -0.00631733 0.382611 0.923888 0.00631733 -0.382611 0.923888 0.0152593 -0.923758 0.382672 0.00631733 -0.382611 0.923888 0.00631733 -0.382611 0.923888 0.0152593 -0.923758 0.382672 0.0152593 -0.923758 -0.382672 0.0152593 -0.923758 0.382672 0.0152593 -0.923758 0.382672 0.0152593 -0.923758 -0.382672 0.00631733 -0.382611 -0.923888 0.0152593 -0.923758 -0.382672 0.0152593 -0.923758 -0.382672 0.00631733 -0.382611 -0.923888 -0.00631733 0.382611 -0.923888 0.00631733 -0.382611 -0.923888 0.00631733 -0.382611 -0.923888 -0.00631733 0.382611 -0.923888 -0.0152593 0.923758 -0.382672 -0.00631733 0.382611 -0.923888 -0.00631733 0.382611 -0.923888 -0.0152593 0.923758 -0.382672 -0.0152593 0.923758 0.382672 -0.0152593 0.923758 -0.382672 -0.0152593 0.923758 -0.382672 -0.0152593 0.923758 0.382672 -0.00631733 0.382611 0.923888 -0.0152593 0.923758 0.382672 -0.0152593 0.923758 0.382672 -0.00631733 0.382611 0.923888 0.00631733 -0.382611 0.923888 -0.00631733 0.382611 0.923888 -0.00631733 0.382611 0.923888 0.00631733 -0.382611 0.923888 0.00222785 0.000396741 -0.999997 -0.00210578 0.259194 -0.965823 -0.00210578 0.259194 -0.965823 0.00222785 0.000396741 -0.999997 0.013245 -0.706687 -0.707403 0.0101932 -0.499557 -0.866221 0.0101932 -0.499557 -0.866221 0.013245 -0.706687 -0.707403 0.0154118 -0.865703 -0.50032 0.013245 -0.706687 -0.707403 0.013245 -0.706687 -0.707403 0.0154118 -0.865703 -0.50032 0.0165105 -0.965684 -0.259194 0.0154118 -0.865703 -0.50032 0.0154118 -0.865703 -0.50032 0.0165105 -0.965684 -0.259194 0.0165105 -0.999864 -0.000366222 0.0165105 -0.965684 -0.259194 0.0165105 -0.965684 -0.259194 0.0165105 -0.999864 -0.000366222 0.0153508 -0.965908 0.258431 0.0165105 -0.999864 -0.000366222 0.0165105 -0.999864 -0.000366222 0.0153508 -0.965908 0.258431 0.0131535 -0.866128 0.499649 0.0153508 -0.965908 0.258431 0.0153508 -0.965908 0.258431 0.0131535 -0.866128 0.499649 0.0100711 -0.707333 0.706809 0.0131535 -0.866128 0.499649 0.0131535 -0.866128 0.499649 0.0100711 -0.707333 0.706809 0.00628681 -0.50029 0.865835 0.0100711 -0.707333 0.706809 0.0100711 -0.707333 0.706809 0.00628681 -0.50029 0.865835 0.00210578 -0.259194 0.965823 0.00628681 -0.50029 0.865835 0.00628681 -0.50029 0.865835 0.00210578 -0.259194 0.965823 -0.00222785 -0.000396741 0.999997 0.00210578 -0.259194 0.965823 0.00210578 -0.259194 0.965823 -0.00222785 -0.000396741 0.999997 -0.00640889 0.25837 0.966025 -0.00222785 -0.000396741 0.999997 -0.00222785 -0.000396741 0.999997 -0.00640889 0.25837 0.966025 -0.0101932 0.499557 0.866221 -0.00640889 0.25837 0.966025 -0.00640889 0.25837 0.966025 -0.0101932 0.499557 0.866221 -0.013245 0.706687 0.707403 -0.0101932 0.499557 0.866221 -0.0101932 0.499557 0.866221 -0.013245 0.706687 0.707403 -0.0154118 0.865703 0.50032 -0.013245 0.706687 0.707403 -0.013245 0.706687 0.707403 -0.0154118 0.865703 0.50032 -0.0165105 0.965684 0.259194 -0.0154118 0.865703 0.50032 -0.0154118 0.865703 0.50032 -0.0165105 0.965684 0.259194 -0.0165105 0.999864 0.000366222 -0.0165105 0.965684 0.259194 -0.0165105 0.965684 0.259194 -0.0165105 0.999864 0.000366222 -0.0153508 0.965908 -0.258431 -0.0165105 0.999864 0.000366222 -0.0165105 0.999864 0.000366222 -0.0153508 0.965908 -0.258431 -0.0131535 0.866128 -0.499649 -0.0153508 0.965908 -0.258431 -0.0153508 0.965908 -0.258431 -0.0131535 0.866128 -0.499649 -0.0100711 0.707333 -0.706809 -0.0131535 0.866128 -0.499649 -0.0131535 0.866128 -0.499649 -0.0100711 0.707333 -0.706809 -0.00631733 0.50029 -0.865835 -0.0100711 0.707333 -0.706809 -0.0100711 0.707333 -0.706809 -0.00631733 0.50029 -0.865835 -0.00210578 0.259194 -0.965823 -0.00631733 0.50029 -0.865835 -0.00631733 0.50029 -0.865835 -0.00210578 0.259194 -0.965823 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.0101932 -0.499557 -0.866221 0.00640889 -0.25837 -0.966025 0.00640889 -0.25837 -0.966025 0.0101932 -0.499557 -0.866221 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 0.00640889 -0.25837 -0.966025 0.00222785 0.000396741 -0.999997 0.00222785 0.000396741 -0.999997 0.00640889 -0.25837 -0.966025 1 0 0 0 0.965932 0.258797 0 0.965932 0.258797 0 0.707083 0.70713 0 0.707083 0.70713 0 0.707083 0.70713 0 0.707083 0.70713 0 0.258797 0.965932 0 0.258797 0.965932 0 0.258797 0.965932 0 0.258797 0.965932 0 -0.258797 0.965932 0 -0.258797 0.965932 0 -0.258797 0.965932 0 -0.258797 0.965932 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.965932 0.258797 0 0.965932 0.258797 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.707083 -0.70713 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.707083 -0.70713 0 0.258797 -0.965932 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.258797 -0.965932 0 -0.258797 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.707083 -0.70713 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.707083 -0.70713 0 -0.965932 -0.258797 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.965932 -0.258797 0 -0.965932 0.258797 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.965932 0.258797 0 -0.707083 0.70713 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.707083 0.70713 0 -0.258797 0.965932 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.258797 0.965932 0 0.258797 0.965932 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0.258797 0.965932 0 0.707083 0.70713 0 0.258797 0.965932 0 0.258797 0.965932 0 0.707083 0.70713 0 0.965932 0.258797 0 0.707083 0.70713 0 0.707083 0.70713 0 0.965932 0.258797 0 0.965932 -0.258797 0 0.965932 0.258797 0 0.965932 0.258797 0 0.965932 -0.258797 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.707083 -0.70713 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.707083 -0.70713 0 0.258797 -0.965932 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.258797 -0.965932 0 -0.258797 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.707083 -0.70713 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.707083 -0.70713 0 -0.965932 -0.258797 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.965932 -0.258797 0 -0.965932 0.258797 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.965932 0.258797 0 -0.707083 0.70713 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.707083 0.70713 0 -0.258797 0.965932 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.258797 0.965932 0 0.258797 0.965932 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0.258797 0.965932 0 0.707083 0.70713 0 0.258797 0.965932 0 0.258797 0.965932 0 0.707083 0.70713 0 0.965932 0.258797 0 0.707083 0.70713 0 0.707083 0.70713 0 0.965932 0.258797 0 0.965932 -0.258797 0 0.965932 0.258797 0 0.965932 0.258797 0 0.965932 -0.258797 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.643483 0.414533 -0.6435 0.235511 0.414533 -0.879032 0.235511 0.414533 -0.879032 0.643483 0.414533 -0.6435 0.879032 0.414533 -0.235511 0.643483 0.414533 -0.6435 0.643483 0.414533 -0.6435 0.879032 0.414533 -0.235511 0.879032 0.414533 0.235511 0.879032 0.414533 -0.235511 0.879032 0.414533 -0.235511 0.879032 0.414533 0.235511 0.643483 0.414533 0.6435 0.879032 0.414533 0.235511 0.879032 0.414533 0.235511 0.643483 0.414533 0.6435 0.235511 0.414533 0.879032 0.643483 0.414533 0.6435 0.643483 0.414533 0.6435 0.235511 0.414533 0.879032 -0.235511 0.414533 0.879032 0.235511 0.414533 0.879032 0.235511 0.414533 0.879032 -0.235511 0.414533 0.879032 -0.6435 0.414533 0.643483 -0.235511 0.414533 0.879032 -0.235511 0.414533 0.879032 -0.6435 0.414533 0.643483 -0.879032 0.414533 0.235511 -0.6435 0.414533 0.643483 -0.6435 0.414533 0.643483 -0.879032 0.414533 0.235511 -0.879032 0.414533 -0.235511 -0.879032 0.414533 0.235511 -0.879032 0.414533 0.235511 -0.879032 0.414533 -0.235511 -0.6435 0.414533 -0.643483 -0.879032 0.414533 -0.235511 -0.879032 0.414533 -0.235511 -0.6435 0.414533 -0.643483 -0.235511 0.414533 -0.879032 -0.6435 0.414533 -0.643483 -0.6435 0.414533 -0.643483 -0.235511 0.414533 -0.879032 0.235511 0.414533 -0.879032 -0.235511 0.414533 -0.879032 -0.235511 0.414533 -0.879032 0.235511 0.414533 -0.879032 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.6435 -0.414533 -0.643483 -0.235511 -0.414533 -0.879032 -0.235511 -0.414533 -0.879032 -0.6435 -0.414533 -0.643483 -0.879032 -0.414533 -0.235511 -0.6435 -0.414533 -0.643483 -0.6435 -0.414533 -0.643483 -0.879032 -0.414533 -0.235511 -0.879032 -0.414533 0.235511 -0.879032 -0.414533 -0.235511 -0.879032 -0.414533 -0.235511 -0.879032 -0.414533 0.235511 -0.643483 -0.414533 0.6435 -0.879032 -0.414533 0.235511 -0.879032 -0.414533 0.235511 -0.643483 -0.414533 0.6435 -0.235511 -0.414533 0.879032 -0.643483 -0.414533 0.6435 -0.643483 -0.414533 0.6435 -0.235511 -0.414533 0.879032 0.235511 -0.414533 0.879032 -0.235511 -0.414533 0.879032 -0.235511 -0.414533 0.879032 0.235511 -0.414533 0.879032 0.6435 -0.414533 0.643483 0.235511 -0.414533 0.879032 0.235511 -0.414533 0.879032 0.6435 -0.414533 0.643483 0.879032 -0.414533 0.235511 0.6435 -0.414533 0.643483 0.6435 -0.414533 0.643483 0.879032 -0.414533 0.235511 0.879032 -0.414533 -0.235511 0.879032 -0.414533 0.235511 0.879032 -0.414533 0.235511 0.879032 -0.414533 -0.235511 0.6435 -0.414533 -0.643483 0.879032 -0.414533 -0.235511 0.879032 -0.414533 -0.235511 0.6435 -0.414533 -0.643483 0.235511 -0.414533 -0.879032 0.6435 -0.414533 -0.643483 0.6435 -0.414533 -0.643483 0.235511 -0.414533 -0.879032 -0.235511 -0.414533 -0.879032 0.235511 -0.414533 -0.879032 0.235511 -0.414533 -0.879032 -0.235511 -0.414533 -0.879032 -0.965932 0 0.258797 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.965932 0 0.258797 -0.965932 0 -0.258797 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.965932 0 -0.258797 -0.707083 0 -0.70713 -0.965932 0 -0.258797 -0.965932 0 -0.258797 -0.707083 0 -0.70713 -0.258797 0 -0.965932 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.258797 0 -0.965932 0.258797 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.965932 0.258797 0 -0.965932 0.707083 0 -0.70713 0.258797 0 -0.965932 0.258797 0 -0.965932 0.707083 0 -0.70713 0.866034 0 -0.499985 0.707083 0 -0.70713 0.707083 0 -0.70713 0.866034 0 -0.499985 0.258797 0 0.965932 0.707083 0 0.70713 0.707083 0 0.70713 0.258797 0 0.965932 0.707083 0 0.70713 0.866034 0 0.499985 0.866034 0 0.499985 0.707083 0 0.70713 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.70713 0 0.707083 -0.258797 0 0.965932 -0.258797 0 0.965932 -0.70713 0 0.707083 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.258797 0 0.965932 0.258797 0 0.965932 0.258797 0 0.965932 -0.258797 0 0.965932 0 -0.204138 0.978942 0 -0.204138 0.978942 0 -0.399701 0.916646 0 -0.399701 0.916646 0 -0.204138 0.978942 0 0.204138 0.978942 0 0.204138 0.978942 0 -0.204138 0.978942 0 0.399701 0.916646 0 0.204138 0.978942 0 0.204138 0.978942 0 0.399701 0.916646 0 1 0 0 1 0 0 1 0 0 1 0 0 0.204138 -0.978942 0 0.399701 -0.916646 0 0.399701 -0.916646 0 0.204138 -0.978942 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -0.204138 -0.978942 0 -0.204138 -0.978942 0 -0.399701 -0.916646 0 -0.399701 -0.916646 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -0.204138 -0.978942 0 0.204138 -0.978942 0 0.204138 -0.978942 0 -0.204138 -0.978942 0.00219733 0.000396741 -0.999997 -0.00210578 0.259194 -0.965823 -0.00210578 0.259194 -0.965823 0.00219733 0.000396741 -0.999997 0.013245 -0.706687 -0.707403 0.0101627 -0.499557 -0.866221 0.0101627 -0.499557 -0.866221 0.013245 -0.706687 -0.707403 0.0154118 -0.865703 -0.50032 0.013245 -0.706687 -0.707403 0.013245 -0.706687 -0.707403 0.0154118 -0.865703 -0.50032 0.0165105 -0.965684 -0.259194 0.0154118 -0.865703 -0.50032 0.0154118 -0.865703 -0.50032 0.0165105 -0.965684 -0.259194 0.0165105 -0.999864 -0.000366222 0.0165105 -0.965684 -0.259194 0.0165105 -0.965684 -0.259194 0.0165105 -0.999864 -0.000366222 0.0153508 -0.965908 0.258431 0.0165105 -0.999864 -0.000366222 0.0165105 -0.999864 -0.000366222 0.0153508 -0.965908 0.258431 0.013184 -0.866128 0.499649 0.0153508 -0.965908 0.258431 0.0153508 -0.965908 0.258431 0.013184 -0.866128 0.499649 0.0101016 -0.707333 0.706809 0.013184 -0.866128 0.499649 0.013184 -0.866128 0.499649 0.0101016 -0.707333 0.706809 0.00631733 -0.50029 0.865835 0.0101016 -0.707333 0.706809 0.0101016 -0.707333 0.706809 0.00631733 -0.50029 0.865835 0.00210578 -0.259194 0.965823 0.00631733 -0.50029 0.865835 0.00631733 -0.50029 0.865835 0.00210578 -0.259194 0.965823 -0.00219733 -0.000396741 0.999997 0.00210578 -0.259194 0.965823 0.00210578 -0.259194 0.965823 -0.00219733 -0.000396741 0.999997 -0.00640889 0.25837 0.966025 -0.00219733 -0.000396741 0.999997 -0.00219733 -0.000396741 0.999997 -0.00640889 0.25837 0.966025 -0.0101627 0.499557 0.866221 -0.00640889 0.25837 0.966025 -0.00640889 0.25837 0.966025 -0.0101627 0.499557 0.866221 -0.013245 0.706687 0.707403 -0.0101627 0.499557 0.866221 -0.0101627 0.499557 0.866221 -0.013245 0.706687 0.707403 -0.0154118 0.865703 0.50032 -0.013245 0.706687 0.707403 -0.013245 0.706687 0.707403 -0.0154118 0.865703 0.50032 -0.0165105 0.965684 0.259194 -0.0154118 0.865703 0.50032 -0.0154118 0.865703 0.50032 -0.0165105 0.965684 0.259194 -0.0165105 0.999864 0.000366222 -0.0165105 0.965684 0.259194 -0.0165105 0.965684 0.259194 -0.0165105 0.999864 0.000366222 -0.0153508 0.965908 -0.258431 -0.0165105 0.999864 0.000366222 -0.0165105 0.999864 0.000366222 -0.0153508 0.965908 -0.258431 -0.013184 0.866128 -0.499649 -0.0153508 0.965908 -0.258431 -0.0153508 0.965908 -0.258431 -0.013184 0.866128 -0.499649 -0.0101016 0.707333 -0.706809 -0.013184 0.866128 -0.499649 -0.013184 0.866128 -0.499649 -0.0101016 0.707333 -0.706809 -0.00631733 0.50029 -0.865835 -0.0101016 0.707333 -0.706809 -0.0101016 0.707333 -0.706809 -0.00631733 0.50029 -0.865835 -0.00210578 0.259194 -0.965823 -0.00631733 0.50029 -0.865835 -0.00631733 0.50029 -0.865835 -0.00210578 0.259194 -0.965823 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.0101627 -0.499557 -0.866221 0.00640889 -0.25837 -0.966025 0.00640889 -0.25837 -0.966025 0.0101627 -0.499557 -0.866221 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 0.00640889 -0.25837 -0.966025 0.00219733 0.000396741 -0.999997 0.00219733 0.000396741 -0.999997 0.00640889 -0.25837 -0.966025 0.00222785 -0.000305185 -0.999997 0.00222785 -0.000305185 -0.999997 0.00222785 -0.000305185 -0.999997 0.00222785 -0.000305185 -0.999997 -0.0166631 0.991792 0.126774 -0.0165105 0.999864 -0.000335704 -0.0165105 0.999864 -0.000335704 -0.0166631 0.991792 0.126774 -0.0162053 0.933459 0.358318 -0.0166631 0.991792 0.126774 -0.0166631 0.991792 0.126774 -0.0162053 0.933459 0.358318 -0.0151067 0.843581 0.53679 -0.0162053 0.933459 0.358318 -0.0162053 0.933459 0.358318 -0.0151067 0.843581 0.53679 -0.013245 0.706687 0.707403 -0.0151067 0.843581 0.53679 -0.0151067 0.843581 0.53679 -0.013245 0.706687 0.707403 -0.0101627 0.499557 0.866221 -0.013245 0.706687 0.707403 -0.013245 0.706687 0.707403 -0.0101627 0.499557 0.866221 -0.00640889 0.25837 0.966025 -0.0101627 0.499557 0.866221 -0.0101627 0.499557 0.866221 -0.00640889 0.25837 0.966025 -0.00222785 -0.000396741 0.999997 -0.00640889 0.25837 0.966025 -0.00640889 0.25837 0.966025 -0.00222785 -0.000396741 0.999997 0.00210578 -0.259194 0.965823 -0.00222785 -0.000396741 0.999997 -0.00222785 -0.000396741 0.999997 0.00210578 -0.259194 0.965823 0.00631733 -0.50029 0.865835 0.00210578 -0.259194 0.965823 0.00210578 -0.259194 0.965823 0.00631733 -0.50029 0.865835 0.0100711 -0.707333 0.706809 0.00631733 -0.50029 0.865835 0.00631733 -0.50029 0.865835 0.0100711 -0.707333 0.706809 0.0127262 -0.843639 0.53676 0.0100711 -0.707333 0.706809 0.0100711 -0.707333 0.706809 0.0127262 -0.843639 0.53676 0.0145878 -0.933228 0.358989 0.0127262 -0.843639 0.53676 0.0127262 -0.843639 0.53676 0.0145878 -0.933228 0.358989 -0.999862 -0.01648 -0.00219733 -0.999862 -0.01648 -0.00219733 -0.999862 -0.01648 -0.00219733 -0.999862 -0.01648 -0.00219733 -0.999862 -0.01648 -0.00219733 -0.999862 -0.01648 -0.00219733 -0.999862 -0.01648 -0.00219733 -0.999862 -0.01648 -0.00219733 -0.999862 -0.01648 -0.00219733 -0.999862 -0.01648 -0.00219733 -0.999862 -0.01648 -0.00219733 -0.999862 -0.01648 -0.00219733 -0.999862 -0.01648 -0.00219733 -0.999862 -0.01648 -0.00219733 -0.999862 -0.01648 -0.00219733 0.0165105 -0.999864 0.000335704 0.0160833 -0.991715 0.127445 0.0160833 -0.991715 0.127445 0.0165105 -0.999864 0.000335704 0.999862 0.01648 0.00219733 0.999862 0.01648 0.00219733 0.999862 0.01648 0.00219733 0.999862 0.01648 0.00219733 0.999862 0.01648 0.00219733 0.999862 0.01648 0.00219733 0.999862 0.01648 0.00219733 0.999862 0.01648 0.00219733 0.999862 0.01648 0.00219733 0.999862 0.01648 0.00219733 0.999862 0.01648 0.00219733 0.999862 0.01648 0.00219733 0.999862 0.01648 0.00219733 0.999862 0.01648 0.00219733 0.999862 0.01648 0.00219733 0.0160833 -0.991715 0.127445 0.0145878 -0.933228 0.358989 0.0145878 -0.933228 0.358989 0.0160833 -0.991715 0.127445 0 0.000396741 -1 -0.00427259 0.259194 -0.965816 -0.00427259 0.259194 -0.965816 0 0.000396741 -1 0.0116886 -0.706687 -0.70743 0.00824 -0.499557 -0.866242 0.00824 -0.499557 -0.866242 0.0116886 -0.706687 -0.70743 0.0143132 -0.865704 -0.500351 0.0116886 -0.706687 -0.70743 0.0116886 -0.706687 -0.70743 0.0143132 -0.865704 -0.500351 0.0159612 -0.965685 -0.259224 0.0143132 -0.865704 -0.500351 0.0143132 -0.865704 -0.500351 0.0159612 -0.965685 -0.259224 0.0165105 -0.999864 -0.000396741 0.0159612 -0.965685 -0.259224 0.0159612 -0.965685 -0.259224 0.0165105 -0.999864 -0.000396741 0.0159612 -0.965906 0.2584 0.0165105 -0.999864 -0.000396741 0.0165105 -0.999864 -0.000396741 0.0159612 -0.965906 0.2584 0.0143132 -0.866127 0.499619 0.0159612 -0.965906 0.2584 0.0159612 -0.965906 0.2584 0.0143132 -0.866127 0.499619 0.0116886 -0.707339 0.706778 0.0143132 -0.866127 0.499619 0.0143132 -0.866127 0.499619 0.0116886 -0.707339 0.706778 0.00827052 -0.50029 0.865818 0.0116886 -0.707339 0.706778 0.0116886 -0.707339 0.706778 0.00827052 -0.50029 0.865818 0.00427259 -0.259194 0.965816 0.00827052 -0.50029 0.865818 0.00827052 -0.50029 0.865818 0.00427259 -0.259194 0.965816 0 -0.000396741 1 0.00427259 -0.259194 0.965816 0.00427259 -0.259194 0.965816 0 -0.000396741 1 -0.00427259 0.25837 0.966037 0 -0.000396741 1 0 -0.000396741 1 -0.00427259 0.25837 0.966037 -0.00824 0.499557 0.866242 -0.00427259 0.25837 0.966037 -0.00427259 0.25837 0.966037 -0.00824 0.499557 0.866242 -0.0116886 0.706687 0.70743 -0.00824 0.499557 0.866242 -0.00824 0.499557 0.866242 -0.0116886 0.706687 0.70743 -0.0143132 0.865704 0.500351 -0.0116886 0.706687 0.70743 -0.0116886 0.706687 0.70743 -0.0143132 0.865704 0.500351 -0.0159612 0.965685 0.259224 -0.0143132 0.865704 0.500351 -0.0143132 0.865704 0.500351 -0.0159612 0.965685 0.259224 -0.0165105 0.999864 0.000396741 -0.0159612 0.965685 0.259224 -0.0159612 0.965685 0.259224 -0.0165105 0.999864 0.000396741 -0.0159612 0.965906 -0.2584 -0.0165105 0.999864 0.000396741 -0.0165105 0.999864 0.000396741 -0.0159612 0.965906 -0.2584 -0.0143132 0.866127 -0.499619 -0.0159612 0.965906 -0.2584 -0.0159612 0.965906 -0.2584 -0.0143132 0.866127 -0.499619 -0.0116886 0.707339 -0.706778 -0.0143132 0.866127 -0.499619 -0.0143132 0.866127 -0.499619 -0.0116886 0.707339 -0.706778 -0.00827052 0.50029 -0.865818 -0.0116886 0.707339 -0.706778 -0.0116886 0.707339 -0.706778 -0.00827052 0.50029 -0.865818 -0.00427259 0.259194 -0.965816 -0.00827052 0.50029 -0.865818 -0.00827052 0.50029 -0.865818 -0.00427259 0.259194 -0.965816 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.00824 -0.499557 -0.866242 0.00427259 -0.25837 -0.966037 0.00427259 -0.25837 -0.966037 0.00824 -0.499557 -0.866242 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 0.00427259 -0.25837 -0.966037 0 0.000396741 -1 0 0.000396741 -1 0.00427259 -0.25837 -0.966037 0 0.258797 -0.965932 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.258797 -0.965932 0 -0.965932 -0.258797 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.965932 -0.258797 0 -0.965932 0.258797 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.965932 0.258797 0 -0.707083 0.70713 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.707083 0.70713 0 -0.258797 0.965932 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.258797 0.965932 0 0.258797 0.965932 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0.258797 0.965932 0 0.70713 0.707083 0 0.258797 0.965932 0 0.258797 0.965932 0 0.70713 0.707083 0 0.965932 0.258797 0 0.70713 0.707083 0 0.70713 0.707083 0 0.965932 0.258797 0 0.965932 -0.258797 0 0.965932 0.258797 0 0.965932 0.258797 0 0.965932 -0.258797 0 0.70713 -0.707083 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.70713 -0.707083 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -0.70713 -0.707083 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.70713 -0.707083 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -0.258797 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.965932 0 -0.258797 -0.965932 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -0.877917 -0.338572 -0.338572 -0.87791 -0.123936 -0.462508 -0.87791 -0.123936 -0.462508 -0.877917 -0.338572 -0.338572 -0.87791 -0.462508 -0.123936 -0.877917 -0.338572 -0.338572 -0.877917 -0.338572 -0.338572 -0.87791 -0.462508 -0.123936 -0.87791 -0.462508 0.123936 -0.87791 -0.462508 -0.123936 -0.87791 -0.462508 -0.123936 -0.87791 -0.462508 0.123936 -0.877917 -0.338572 0.338572 -0.87791 -0.462508 0.123936 -0.87791 -0.462508 0.123936 -0.877917 -0.338572 0.338572 -0.87791 -0.123936 0.462508 -0.877917 -0.338572 0.338572 -0.877917 -0.338572 0.338572 -0.87791 -0.123936 0.462508 -0.87791 0.123936 0.462508 -0.87791 -0.123936 0.462508 -0.87791 -0.123936 0.462508 -0.87791 0.123936 0.462508 -0.877917 0.338572 0.338572 -0.87791 0.123936 0.462508 -0.87791 0.123936 0.462508 -0.877917 0.338572 0.338572 -0.87791 0.462508 0.123936 -0.877917 0.338572 0.338572 -0.877917 0.338572 0.338572 -0.87791 0.462508 0.123936 -0.87791 0.462508 -0.123936 -0.87791 0.462508 0.123936 -0.87791 0.462508 0.123936 -0.87791 0.462508 -0.123936 -0.877917 0.338572 -0.338572 -0.87791 0.462508 -0.123936 -0.87791 0.462508 -0.123936 -0.877917 0.338572 -0.338572 -0.87791 0.123936 -0.462508 -0.877917 0.338572 -0.338572 -0.877917 0.338572 -0.338572 -0.87791 0.123936 -0.462508 -0.87791 -0.123936 -0.462508 -0.87791 0.123936 -0.462508 -0.87791 0.123936 -0.462508 -0.87791 -0.123936 -0.462508 0 -0.707083 -0.70713 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.707083 -0.70713 0 -0.965932 -0.258797 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.965932 -0.258797 0 -0.965932 0.258797 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.965932 0.258797 0 -0.707083 0.70713 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.707083 0.70713 0 -0.258797 0.965932 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.258797 0.965932 0 0.258797 0.965932 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0.258797 0.965932 0 0.70713 0.707083 0 0.258797 0.965932 0 0.258797 0.965932 0 0.70713 0.707083 0 0.965932 0.258797 0 0.70713 0.707083 0 0.70713 0.707083 0 0.965932 0.258797 0 0.965932 -0.258797 0 0.965932 0.258797 0 0.965932 0.258797 0 0.965932 -0.258797 0 0.70713 -0.707083 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.70713 -0.707083 0 0.258797 -0.965932 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.258797 -0.965932 0 -0.258797 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.965932 0 -0.258797 -0.965932 0.00628681 -0.499954 0.866029 0.00628681 -0.499954 0.866029 0.00210578 -0.258797 0.965929 0.00210578 -0.258797 0.965929 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.0100711 -0.707022 0.70712 0.0100711 -0.707022 0.70712 0.00628681 -0.499954 0.866029 0.00628681 -0.499954 0.866029 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.0136113 0.732478 0.680654 -0.0136113 0.732478 0.680654 -0.0136113 0.732478 0.680654 -0.0136113 0.732478 0.680654 0.0152252 -0.850151 -0.526319 0.016534 -0.965785 -0.258818 0.0153722 -0.965804 0.258818 -0.999862 -0.01648 -0.00222785 -0.01648 0.999864 0 -0.999862 -0.01648 -0.00222785 -0.0165105 0.965791 0.258797 -0.999862 -0.01648 -0.00222785 -0.0153508 0.96581 -0.258797 -0.999862 -0.01648 -0.00222785 -0.999862 -0.01648 -0.00222785 -0.999862 -0.01648 -0.00222785 -0.999862 -0.01648 -0.00222785 -0.999862 -0.01648 -0.00222785 -0.999862 -0.01648 -0.00222785 -0.999862 -0.01648 -0.00222785 -0.01648 0.999864 0 0.999862 0.01648 0.00222785 -0.0165105 0.965791 0.258797 0.999862 0.01648 0.00222785 -0.0153508 0.96581 -0.258797 0.999862 0.01648 0.00222785 0.999862 0.01648 0.00222785 0.999862 0.01648 0.00222785 0.999862 0.01648 0.00222785 0.999862 0.01648 0.00222785 0.999862 0.01648 0.00222785 0.999862 0.01648 0.00222785 0.999862 0.01648 0.00222785 -0.00643711 0.258748 0.965923 -3.24573e-007 0.798493 -0.602004 -0.0144708 0.927204 -0.374277 0.0083771 -0.614444 0.788916 0.00210865 -0.258819 0.965923 -0.0132581 0.706985 0.707104 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.00644253 0.258748 0.965923 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.0160222 0.990105 -0.139409 -0.0116276 0.787767 -0.615864 -0.0116276 0.787767 -0.615864 -0.0160222 0.990105 -0.139409 -0.0161443 0.927151 0.37434 -0.0160222 0.990105 -0.139409 -0.0160222 0.990105 -0.139409 -0.0161443 0.927151 0.37434 -0.0119327 0.615741 0.787858 -0.0161443 0.927151 0.37434 -0.0161443 0.927151 0.37434 -0.0119327 0.615741 0.787858 -0.00451674 0.139378 0.990229 -0.0119327 0.615741 0.787858 -0.0119327 0.615741 0.787858 -0.00451674 0.139378 0.990229 0.00408948 -0.37434 0.927282 -0.00451674 0.139378 0.990229 -0.00451674 0.139378 0.990229 0.00408948 -0.37434 0.927282 0.0116276 -0.787767 0.615864 0.00408948 -0.37434 0.927282 0.00408948 -0.37434 0.927282 0.0116276 -0.787767 0.615864 0.0160222 -0.990105 0.139409 0.0116276 -0.787767 0.615864 0.0116276 -0.787767 0.615864 0.0160222 -0.990105 0.139409 0.0161443 -0.927151 -0.37434 0.0160222 -0.990105 0.139409 0.0160222 -0.990105 0.139409 0.0161443 -0.927151 -0.37434 0.0119327 -0.615741 -0.787858 0.0161443 -0.927151 -0.37434 0.0161443 -0.927151 -0.37434 0.0119327 -0.615741 -0.787858 0.00451674 -0.139378 -0.990229 0.0119327 -0.615741 -0.787858 0.0119327 -0.615741 -0.787858 0.00451674 -0.139378 -0.990229 -0.00408948 0.37434 -0.927282 0.00451674 -0.139378 -0.990229 0.00451674 -0.139378 -0.990229 -0.00408948 0.37434 -0.927282 -0.0116276 0.787767 -0.615864 -0.00408948 0.37434 -0.927282 -0.00408948 0.37434 -0.927282 -0.0116276 0.787767 -0.615864 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.0143132 0.920291 -0.390973 -0.00811792 0.60152 -0.798817 -0.00811792 0.60152 -0.798817 -0.0143132 0.920291 -0.390973 -0.0166631 0.992441 0.121586 -0.0143132 0.920291 -0.390973 -0.0143132 0.920291 -0.390973 -0.0166631 0.992441 0.121586 -0.0145268 0.79868 0.601581 -0.0166631 0.992441 0.121586 -0.0166631 0.992441 0.121586 -0.0145268 0.79868 0.601581 -0.00851466 0.390881 0.920402 -0.0145268 0.79868 0.601581 -0.0145268 0.79868 0.601581 -0.00851466 0.390881 0.920402 -0.00021363 -0.121616 0.992577 -0.00851466 0.390881 0.920402 -0.00851466 0.390881 0.920402 -0.00021363 -0.121616 0.992577 0.00811792 -0.60152 0.798817 -0.00021363 -0.121616 0.992577 -0.00021363 -0.121616 0.992577 0.00811792 -0.60152 0.798817 0.0143132 -0.920291 0.390973 0.00811792 -0.60152 0.798817 0.00811792 -0.60152 0.798817 0.0143132 -0.920291 0.390973 0.0166631 -0.992441 -0.121586 0.0143132 -0.920291 0.390973 0.0143132 -0.920291 0.390973 0.0166631 -0.992441 -0.121586 0.0145268 -0.79868 -0.601581 0.0166631 -0.992441 -0.121586 0.0166631 -0.992441 -0.121586 0.0145268 -0.79868 -0.601581 0.00851466 -0.390881 -0.920402 0.0145268 -0.79868 -0.601581 0.0145268 -0.79868 -0.601581 0.00851466 -0.390881 -0.920402 0.00021363 0.121616 -0.992577 0.00851466 -0.390881 -0.920402 0.00851466 -0.390881 -0.920402 0.00021363 0.121616 -0.992577 -0.00811792 0.60152 -0.798817 0.00021363 0.121616 -0.992577 0.00021363 0.121616 -0.992577 -0.00811792 0.60152 -0.798817 0.01648 -0.999824 0.00897244 0.00994903 -0.700644 0.713442 0.00994903 -0.700644 0.713442 0.01648 -0.999824 0.00897244 0.0133366 -0.713326 -0.700705 0.01648 -0.999824 0.00897244 0.01648 -0.999824 0.00897244 0.0133366 -0.713326 -0.700705 0.00238044 -0.00894192 -0.999957 0.0133366 -0.713326 -0.700705 0.0133366 -0.713326 -0.700705 0.00238044 -0.00894192 -0.999957 -0.00994903 0.700644 -0.713442 0.00238044 -0.00894192 -0.999957 0.00238044 -0.00894192 -0.999957 -0.00994903 0.700644 -0.713442 -0.01648 0.999824 -0.00897244 -0.00994903 0.700644 -0.713442 -0.00994903 0.700644 -0.713442 -0.01648 0.999824 -0.00897244 -0.0133366 0.713326 0.700705 -0.01648 0.999824 -0.00897244 -0.01648 0.999824 -0.00897244 -0.0133366 0.713326 0.700705 -0.00238044 0.00894192 0.999957 -0.0133366 0.713326 0.700705 -0.0133366 0.713326 0.700705 -0.00238044 0.00894192 0.999957 0.00994903 -0.700644 0.713442 -0.00238044 0.00894192 0.999957 -0.00238044 0.00894192 0.999957 0.00994903 -0.700644 0.713442 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.0143132 0.865916 -0.499985 -0.00824 0.499924 -0.86603 -0.00824 0.499924 -0.86603 -0.0143132 0.865916 -0.499985 -0.0165105 0.999864 0 -0.0143132 0.865916 -0.499985 -0.0143132 0.865916 -0.499985 -0.0165105 0.999864 0 -0.0143132 0.865916 0.499985 -0.0165105 0.999864 0 -0.0165105 0.999864 0 -0.0143132 0.865916 0.499985 -0.00824 0.499924 0.86603 -0.0143132 0.865916 0.499985 -0.0143132 0.865916 0.499985 -0.00824 0.499924 0.86603 0 0 1 -0.00824 0.499924 0.86603 -0.00824 0.499924 0.86603 0 0 1 0.00824 -0.499924 0.86603 0 0 1 0 0 1 0.00824 -0.499924 0.86603 0.0143132 -0.865916 0.499985 0.00824 -0.499924 0.86603 0.00824 -0.499924 0.86603 0.0143132 -0.865916 0.499985 0.0165105 -0.999864 0 0.0143132 -0.865916 0.499985 0.0143132 -0.865916 0.499985 0.0165105 -0.999864 0 0.0143132 -0.865916 -0.499985 0.0165105 -0.999864 0 0.0165105 -0.999864 0 0.0143132 -0.865916 -0.499985 0.00824 -0.499924 -0.86603 0.0143132 -0.865916 -0.499985 0.0143132 -0.865916 -0.499985 0.00824 -0.499924 -0.86603 0 0 -1 0.00824 -0.499924 -0.86603 0.00824 -0.499924 -0.86603 0 0 -1 -0.00824 0.499924 -0.86603 0 0 -1 0 0 -1 -0.00824 0.499924 -0.86603 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.00839259 0.615802 -0.787856 -6.1037e-005 0.139439 -0.990231 -6.1037e-005 0.139439 -0.990231 -0.00839259 0.615802 -0.787856 -0.0144658 0.927179 -0.37434 -0.00839259 0.615802 -0.787856 -0.00839259 0.615802 -0.787856 -0.0144658 0.927179 -0.37434 -0.0166631 0.990095 0.139409 -0.0144658 0.927179 -0.37434 -0.0144658 0.927179 -0.37434 -0.0166631 0.990095 0.139409 -0.0143742 0.787722 0.615864 -0.0166631 0.990095 0.139409 -0.0166631 0.990095 0.139409 -0.0143742 0.787722 0.615864 -0.00824 0.374248 0.927292 -0.0143742 0.787722 0.615864 -0.0143742 0.787722 0.615864 -0.00824 0.374248 0.927292 9.15555e-005 -0.139439 0.990231 -0.00824 0.374248 0.927292 -0.00824 0.374248 0.927292 9.15555e-005 -0.139439 0.990231 0.00839259 -0.615802 0.787856 9.15555e-005 -0.139439 0.990231 9.15555e-005 -0.139439 0.990231 0.00839259 -0.615802 0.787856 0.0144658 -0.927179 0.37434 0.00839259 -0.615802 0.787856 0.00839259 -0.615802 0.787856 0.0144658 -0.927179 0.37434 0.0166631 -0.990095 -0.139409 0.0144658 -0.927179 0.37434 0.0144658 -0.927179 0.37434 0.0166631 -0.990095 -0.139409 0.0143742 -0.787722 -0.615864 0.0166631 -0.990095 -0.139409 0.0166631 -0.990095 -0.139409 0.0143742 -0.787722 -0.615864 0.00824 -0.374248 -0.927292 0.0143742 -0.787722 -0.615864 0.0143742 -0.787722 -0.615864 0.00824 -0.374248 -0.927292 -6.1037e-005 0.139439 -0.990231 0.00824 -0.374248 -0.927292 0.00824 -0.374248 -0.927292 -6.1037e-005 0.139439 -0.990231 0.0101932 -0.713378 0.700705 -0.00207526 -0.00900296 0.999957 -0.00207526 -0.00900296 0.999957 0.0101932 -0.713378 0.700705 0.0165105 -0.999823 -0.00897244 0.0101932 -0.713378 0.700705 0.0101932 -0.713378 0.700705 0.0165105 -0.999823 -0.00897244 0.0131535 -0.700583 -0.71345 0.0165105 -0.999823 -0.00897244 0.0165105 -0.999823 -0.00897244 0.0131535 -0.700583 -0.71345 0.00207526 0.00900296 -0.999957 0.0131535 -0.700583 -0.71345 0.0131535 -0.700583 -0.71345 0.00207526 0.00900296 -0.999957 -0.0101932 0.713378 -0.700705 0.00207526 0.00900296 -0.999957 0.00207526 0.00900296 -0.999957 -0.0101932 0.713378 -0.700705 -0.0165105 0.999823 0.00897244 -0.0101932 0.713378 -0.700705 -0.0101932 0.713378 -0.700705 -0.0165105 0.999823 0.00897244 -0.0131535 0.700583 0.71345 -0.0165105 0.999823 0.00897244 -0.0165105 0.999823 0.00897244 -0.0131535 0.700583 0.71345 -0.00207526 -0.00900296 0.999957 -0.0131535 0.700583 0.71345 -0.0131535 0.700583 0.71345 -0.00207526 -0.00900296 0.999957 + + + + + + + + + + + + + + +

0 0 1 1 2 2 3 3

+

4 4 5 5 6 6 7 7

+

8 8 9 9 10 10 11 11

+

12 12 13 13 14 14 15 15

+

16 16 17 17 18 18 19 19

+

20 20 21 21 22 22 23 23

+

24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31

+

32 32 33 33 34 34 35 35

+

36 36 37 37 38 38 39 39 40 40 41 41 42 42 43 43

+

44 44 45 45 46 46 47 47

+
+ + + +

48 48 49 49 50 50 51 51

+

52 52 53 53 54 54 55 55

+

56 56 57 57 58 58 59 59

+

60 60 61 61 62 62 63 63

+

64 64 65 65 66 66 67 67

+

68 68 69 69 70 70 71 71

+

72 72 73 73 74 74 75 75 76 76 77 77 78 78 79 79

+

80 80 81 81 82 82 83 83

+

84 84 85 85 86 86 87 87 88 88 89 89 90 90 91 91

+

92 92 93 93 94 94 95 95

+
+ + + +

96 96 97 97 98 98 99 99 100 100 101 101 102 102 103 103 104 104 105 105 106 106 107 107

+

108 108 109 109 110 110 111 111

+

112 112 113 113 114 114 115 115

+

116 116 117 117 118 118 119 119

+

120 120 121 121 122 122 123 123

+

124 124 125 125 126 126 127 127

+

128 128 129 129 130 130 131 131

+

132 132 133 133 134 134 135 135

+

136 136 137 137 138 138 139 139

+

140 140 141 141 142 142 143 143

+

144 144 145 145 146 146 147 147

+

148 148 149 149 150 150 151 151

+

152 152 153 153 154 154 155 155

+
+ + + +

156 156 157 157 158 158 159 159 160 160 161 161 162 162 163 163 164 164 165 165 166 166 167 167

+

168 168 169 169 170 170 171 171

+

172 172 173 173 174 174 175 175

+

176 176 177 177 178 178 179 179

+

180 180 181 181 182 182 183 183

+

184 184 185 185 186 186 187 187

+

188 188 189 189 190 190 191 191

+

192 192 193 193 194 194 195 195

+

196 196 197 197 198 198 199 199

+

200 200 201 201 202 202 203 203

+

204 204 205 205 206 206 207 207

+

208 208 209 209 210 210 211 211

+

212 212 213 213 214 214 215 215

+
+ + + +

216 216 217 217 218 218 219 219

+

220 220 221 221 222 222 223 223

+

224 224 225 225 226 226 227 227

+

228 228 229 229 230 230 231 231

+

232 232 233 233 234 234 235 235

+

236 236 237 237 238 238 239 239

+

240 240 241 241 242 242 243 243 244 244 245 245 246 246 247 247

+

248 248 249 249 250 250 251 251

+

252 252 253 253 254 254 255 255 256 256 257 257 258 258 259 259

+

260 260 261 261 262 262 263 263

+
+ + + +

264 264 265 265 266 266 267 267

+

268 268 269 269 270 270 271 271

+

272 272 273 273 274 274 275 275

+

276 276 277 277 278 278 279 279

+

280 280 281 281 282 282 283 283

+

284 284 285 285 286 286 287 287

+

288 288 289 289 290 290 291 291

+

292 292 293 293 294 294 295 295

+
+ + + +

296 296 297 297 298 298 299 299

+

300 300 301 301 302 302 303 303

+

304 304 305 305 306 306 307 307

+

308 308 309 309 310 310 311 311

+

312 312 313 313 314 314 315 315

+

316 316 317 317 318 318 319 319

+

320 320 321 321 322 322 323 323

+

324 324 325 325 326 326 327 327

+

328 328 329 329 330 330 331 331

+

332 332 333 333 334 334 335 335

+

336 336 337 337 338 338 339 339

+

340 340 341 341 342 342 343 343

+

344 344 345 345 346 346 347 347

+

348 348 349 349 350 350 351 351

+

352 352 353 353 354 354 355 355

+

356 356 357 357 358 358 359 359

+

360 360 361 361 362 362 363 363

+

364 364 365 365 366 366 367 367

+

368 368 369 369 370 370 371 371

+

372 372 373 373 374 374 375 375

+

376 376 377 377 378 378 379 379

+

380 380 381 381 382 382 383 383

+

384 384 385 385 386 386 387 387 388 388 389 389 390 390 391 391 392 392 393 393 394 394 395 395 396 396 397 397 398 398 399 399 400 400 401 401 402 402 403 403 404 404 405 405 406 406 407 407

+

408 408 409 409 410 410 411 411

+

412 412 413 413 414 414 415 415 416 416 417 417 418 418 419 419 420 420 421 421 422 422 423 423 424 424 425 425 426 426 427 427 428 428 429 429 430 430 431 431 432 432 433 433 434 434 435 435

+

436 436 437 437 438 438 439 439

+
+ + + +

440 440 441 440 442 440 443 440 444 440 445 440 446 440 447 440 448 440 449 440 450 440 451 440

+
+ + + +

452 441 453 442 454 443 455 444

+

456 445 457 446 458 447 459 448

+

460 449 461 450 462 451 463 452

+

464 453 465 454 466 455 467 456

+

468 457 469 458 470 459 471 460

+

472 461 473 462 474 463 475 464

+

476 465 477 466 478 467 479 468

+

480 469 481 470 482 471 483 472

+

484 473 485 474 486 475 487 476

+

488 477 489 478 490 479 491 480

+

492 481 493 482 494 483 495 484

+

496 485 497 486 498 487 499 488

+
+ + + +

500 489 501 490 502 491 503 492 504 493 505 494 506 495 507 496 508 497 509 498 510 499 511 500

+

512 501 513 502 514 503 515 504

+

516 505 517 506 518 507 519 508

+

520 509 521 510 522 511 523 512

+

524 513 525 514 526 515 527 516

+

528 517 529 518 530 519 531 520

+

532 521 533 522 534 523 535 524

+

536 525 537 526 538 527 539 528

+

540 529 541 530 542 531 543 532

+

544 533 545 534 546 535 547 536

+

548 537 549 538 550 539 551 540

+

552 541 553 542 554 543 555 544

+

556 545 557 546 558 547 559 548

+
+ + + +

560 549 561 550 562 551 563 552 564 553 565 554 566 555 567 556 568 557 569 558 570 559 571 560

+

572 561 573 562 574 563 575 564

+

576 565 577 566 578 567 579 568

+

580 569 581 570 582 571 583 572

+

584 573 585 574 586 575 587 576

+

588 577 589 578 590 579 591 580

+

592 581 593 582 594 583 595 584

+

596 585 597 586 598 587 599 588

+

600 589 601 590 602 591 603 592

+

604 593 605 594 606 595 607 596

+

608 597 609 598 610 599 611 600

+

612 601 613 602 614 603 615 604

+

616 605 617 606 618 607 619 608

+
+ + + +

620 609 621 610 622 611 623 612 624 613 625 614 626 615 627 616 628 617 629 618 630 619 631 620

+

632 621 633 622 634 623 635 624

+

636 625 637 626 638 627 639 628

+

640 629 641 630 642 631 643 632

+

644 633 645 634 646 635 647 636

+

648 637 649 638 650 639 651 640

+

652 641 653 642 654 643 655 644

+

656 645 657 646 658 647 659 648

+

660 649 661 650 662 651 663 652

+

664 653 665 654 666 655 667 656

+

668 657 669 658 670 659 671 660

+

672 661 673 662 674 663 675 664

+

676 665 677 666 678 667 679 668

+
+ + + +

680 669 681 670 682 671 683 672 684 673 685 674 686 675 687 676 688 677 689 678 690 679 691 680

+

692 681 693 682 694 683 695 684

+

696 685 697 686 698 687 699 688

+

700 689 701 690 702 691 703 692

+

704 693 705 694 706 695 707 696

+

708 697 709 698 710 699 711 700

+

712 701 713 702 714 703 715 704

+

716 705 717 706 718 707 719 708

+

720 709 721 710 722 711 723 712

+

724 713 725 714 726 715 727 716

+

728 717 729 718 730 719 731 720

+

732 721 733 722 734 723 735 724

+

736 725 737 726 738 727 739 728

+
+ + + +

740 729 741 730 742 731 743 732

+

744 733 745 734 746 735 747 736

+

748 737 749 738 750 739 751 740

+

752 741 753 742 754 743 755 744

+

756 745 757 746 758 747 759 748

+

760 749 761 750 762 751 763 752

+

764 753 765 754 766 755 767 756

+

768 757 769 758 770 759 771 760

+

772 761 773 762 774 763 775 764

+

776 765 777 766 778 767 779 768 780 769 781 770 782 771 783 772 784 773 785 774 786 775 787 776

+

788 777 789 778 790 779 791 780

+

792 781 793 782 794 783 795 784 796 785 797 786 798 787 799 788 800 789 801 790 802 791 803 792

+

804 793 805 794 806 795 807 796

+
+ + + +

808 797 809 798 810 799 811 800

+

812 801 813 802 814 803 815 804

+

816 805 817 806 818 807 819 808

+

820 809 821 810 822 811 823 812

+

824 813 825 814 826 815 827 816

+

828 817 829 818 830 819 831 820 832 821 833 822 834 823 835 824

+

836 825 837 826 838 827 839 828

+

840 829 841 830 842 831 843 832

+

844 833 845 834 846 835 847 836 848 837 849 838 850 839 851 840

+

852 841 853 842 854 843 855 844

+
+ + + +

856 845 857 846 858 847 859 848

+

860 849 861 850 862 851 863 852

+

864 853 865 854 866 855 867 856

+

868 857 869 858 870 859 871 860

+

872 861 873 862 874 863 875 864

+

876 865 877 866 878 867 879 868

+

880 869 881 870 882 871 883 872

+

884 873 885 874 886 875 887 876

+

888 877 889 878 890 879 891 880

+

892 881 893 882 894 883 895 884

+

896 885 897 886 898 887 899 888

+

900 889 901 890 902 891 903 892

+

904 893 905 894 906 895 907 896

+

908 897 909 898 910 899 911 900

+

912 901 913 902 914 903 915 904

+

916 905 917 906 918 907 919 908

+

920 909 921 910 922 911 923 912

+

924 913 925 914 926 915 927 916

+

928 917 929 918 930 919 931 920

+

932 921 933 922 934 923 935 924

+

936 925 937 926 938 927 939 928

+

940 929 941 930 942 931 943 932

+

944 933 945 934 946 935 947 936 948 937 949 938 950 939 951 940 952 941 953 942 954 943 955 944 956 945 957 946 958 947 959 948 960 949 961 950 962 951 963 952 964 953 965 954 966 955 967 956

+

968 957 969 958 970 959 971 960

+

972 961 973 962 974 963 975 964 976 965 977 966 978 967 979 968 980 969 981 970 982 971 983 972 984 973 985 974 986 975 987 976 988 977 989 978 990 979 991 980 992 981 993 982 994 983 995 984

+

996 985 997 986 998 987 999 988

+
+ + + +

1000 989 1001 990 1002 991 1003 992

+

1004 993 1005 994 1006 995 1007 996

+

1008 997 1009 998 1010 999 1011 1000

+

1012 1001 1013 1002 1014 1003 1015 1004

+

1016 1005 1017 1006 1018 1007 1019 1008

+

1020 1009 1021 1010 1022 1011 1023 1012

+

1024 1013 1025 1014 1026 1015 1027 1016

+

1028 1017 1029 1018 1030 1019 1031 1020

+

1032 1021 1033 1022 1034 1023 1035 1024

+

1036 1025 1037 1026 1038 1027 1039 1028

+

1040 1029 1041 1030 1042 1031 1043 1032

+

1044 1033 1045 1034 1046 1035 1047 1036

+

1048 1037 1049 1038 1050 1039 1051 1040

+

1052 1041 1053 1042 1054 1043 1055 1044 1056 1045 1057 1046 1058 1047 1059 1048 1060 1049 1061 1050 1062 1051 1063 1052 1064 1053 1065 1054 1066 1055

+

1067 1056 1068 1057 1069 1058 1070 1059

+

1071 1060 1072 1061 1073 1062 1074 1063 1075 1064 1076 1065 1077 1066 1078 1067 1079 1068 1080 1069 1081 1070 1082 1071 1083 1072 1084 1073 1085 1074

+

1086 1075 1087 1076 1088 1077 1089 1078

+
+ + + +

1090 1079 1091 1080 1092 1081 1093 1082

+

1094 1083 1095 1084 1096 1085 1097 1086

+

1098 1087 1099 1088 1100 1089 1101 1090

+

1102 1091 1103 1092 1104 1093 1105 1094

+

1106 1095 1107 1096 1108 1097 1109 1098

+

1110 1099 1111 1100 1112 1101 1113 1102

+

1114 1103 1115 1104 1116 1105 1117 1106

+

1118 1107 1119 1108 1120 1109 1121 1110

+

1122 1111 1123 1112 1124 1113 1125 1114

+

1126 1115 1127 1116 1128 1117 1129 1118

+

1130 1119 1131 1120 1132 1121 1133 1122

+

1134 1123 1135 1124 1136 1125 1137 1126

+

1138 1127 1139 1128 1140 1129 1141 1130

+

1142 1131 1143 1132 1144 1133 1145 1134

+

1146 1135 1147 1136 1148 1137 1149 1138

+

1150 1139 1151 1140 1152 1141 1153 1142

+

1154 1143 1155 1144 1156 1145 1157 1146

+

1158 1147 1159 1148 1160 1149 1161 1150

+

1162 1151 1163 1152 1164 1153 1165 1154

+

1166 1155 1167 1156 1168 1157 1169 1158

+

1170 1159 1171 1160 1172 1161 1173 1162

+

1174 1163 1175 1164 1176 1165 1177 1166

+

1178 1167 1179 1168 1180 1169 1181 1170 1182 1171 1183 1172 1184 1173 1185 1174 1186 1175 1187 1176 1188 1177 1189 1178 1190 1179 1191 1180 1192 1181 1193 1182 1194 1183 1195 1184 1196 1185 1197 1186 1198 1187 1199 1188 1200 1189 1201 1190

+

1202 1191 1203 1192 1204 1193 1205 1194

+

1206 1195 1207 1196 1208 1197 1209 1198 1210 1199 1211 1200 1212 1201 1213 1202 1214 1203 1215 1204 1216 1205 1217 1206 1218 1207 1219 1208 1220 1209 1221 1210 1222 1211 1223 1212 1224 1213 1225 1214 1226 1215 1227 1216 1228 1217 1229 1218

+

1230 1219 1231 1220 1232 1221 1233 1222

+
+ + + +

1234 1223 1235 1224 1236 1225 1237 1226

+

1238 1227 1239 1228 1240 1229 1241 1230

+

1242 1231 1243 1232 1244 1233 1245 1234

+

1246 1235 1247 1236 1248 1237 1249 1238

+

1250 1239 1251 1240 1252 1241 1253 1242

+

1254 1243 1255 1244 1256 1245 1257 1246

+

1258 1247 1259 1248 1260 1249 1261 1250

+

1262 1251 1263 1252 1264 1253 1265 1254

+

1266 1255 1267 1256 1268 1257 1269 1258

+

1270 1259 1271 1260 1272 1261 1273 1262

+

1274 1263 1275 1264 1276 1265 1277 1266 1278 1267 1279 1268 1280 1269 1281 1270 1282 1271 1283 1272 1284 1273 1285 1274

+

1286 1275 1287 1276 1288 1277 1289 1278

+

1290 1279 1291 1280 1292 1281 1293 1282 1294 1283 1295 1284 1296 1285 1297 1286 1298 1287 1299 1288 1300 1289 1301 1290

+

1302 1291 1303 1292 1304 1293 1305 1294

+
+ + + +

1306 1295 1307 1296 1308 1297 1309 1298 1310 1299 1311 1300 1312 1301 1313 1302 1314 1303 1315 1304 1316 1305 1317 1306

+

1318 1307 1319 1308 1320 1309 1321 1310

+

1322 1311 1323 1312 1324 1313 1325 1314

+

1326 1315 1327 1316 1328 1317 1329 1318

+

1330 1319 1331 1320 1332 1321 1333 1322

+

1334 1323 1335 1324 1336 1325 1337 1326

+

1338 1327 1339 1328 1340 1329 1341 1330

+

1342 1331 1343 1332 1344 1333 1345 1334

+

1346 1335 1347 1336 1348 1337 1349 1338

+

1350 1339 1351 1340 1352 1341 1353 1342

+

1354 1343 1355 1344 1356 1345 1357 1346

+

1358 1347 1359 1348 1360 1349 1361 1350

+

1362 1351 1363 1352 1364 1353 1365 1354

+
+ + + +

1366 1355 1367 1356 1368 1357 1369 1358

+

1370 1359 1371 1360 1372 1361 1373 1362

+

1374 1363 1375 1364 1376 1365 1377 1366

+

1378 1367 1379 1368 1380 1369 1381 1370

+

1382 1371 1383 1372 1384 1373 1385 1374

+

1386 1375 1387 1376 1388 1377 1389 1378

+

1390 1379 1391 1380 1392 1381 1393 1382

+

1394 1383 1395 1384 1396 1385 1397 1386

+

1398 1387 1399 1388 1400 1389 1401 1390

+

1402 1391 1403 1392 1404 1393 1405 1394

+

1406 1395 1407 1396 1408 1397 1409 1398

+

1410 1399 1411 1400 1412 1401 1413 1402

+
+ + + +

1414 1403 1415 1404 1416 1405 1417 1406

+

1418 1407 1419 1408 1420 1409 1421 1410 1422 1411 1423 1412 1424 1413 1425 1414 1426 1415

+

1427 1416 1428 1417 1429 1418 1430 1419

+

1431 1420 1432 1421 1433 1422 1434 1423 1435 1424 1436 1425 1437 1426 1438 1427 1439 1428

+

1440 1429 1441 1430 1442 1431 1443 1432

+
+ + + +

1444 1433 1445 1433 1446 1433 1447 1433

+
+ + + +

1448 1434 1449 1434 1450 1434 1451 1434

+
+ + + +

1452 1435 1453 1435 1454 1435 1455 1435

+
+ + + +

1463 1462 1476 1462 1475 1462 1463 1462 1475 1462 1462 1462

+
+ + + +

1468 1448 1467 1447 1464 1444 1463 1443 1462 1442 1458 1438 1456 1436 1460 1440 1465 1445 1466 1446

+

1481 1461 1479 1459 1478 1458 1474 1454 1470 1450 1472 1452 1475 1455 1476 1456 1477 1457 1480 1460

+

1459 1439 1471 1451 1469 1449 1457 1437

+

1457 1437 1469 1449 1473 1453 1461 1441

+
+ + + +

1482 1463 1483 1463 1484 1463 1485 1463

+
+ + + +

1486 1464 1487 1464 1488 1464 1489 1464

+
+ + + +

1490 1465 1491 1465 1492 1465 1493 1465

+
+ + + +

1494 1466 1495 1466 1496 1466 1497 1466

+
+ + + +

1498 1467 1499 1467 1500 1467 1501 1467

+
+ + + +

1502 1468 1503 1469 1504 1470 1505 1471

+

1506 1472 1507 1473 1508 1474 1509 1475

+

1510 1476 1511 1477 1512 1478 1513 1479

+

1514 1480 1515 1481 1516 1482 1517 1483

+

1518 1484 1519 1485 1520 1486 1521 1487

+
+ + + +

1522 1488 1523 1489 1524 1490 1525 1491

+

1526 1492 1527 1493 1528 1494 1529 1495

+

1530 1496 1531 1497 1532 1498 1533 1499

+

1534 1500 1535 1501 1536 1502 1537 1503

+

1538 1504 1539 1505 1540 1506 1541 1507

+

1542 1508 1543 1509 1544 1510 1545 1511

+
+ + + +

1546 1512 1547 1512 1548 1512 1549 1512

+
+ + + +

1550 1513 1551 1514 1552 1515 1553 1516 1554 1517 1555 1518 1556 1519 1557 1520 1558 1521 1559 1522 1560 1523 1561 1524

+

1562 1525 1563 1526 1564 1527 1565 1528

+

1566 1529 1567 1530 1568 1531 1569 1532

+

1570 1533 1571 1534 1572 1535 1573 1536

+

1574 1537 1575 1538 1576 1539 1577 1540

+

1578 1541 1579 1542 1580 1543 1581 1544

+

1582 1545 1583 1546 1584 1547 1585 1548

+

1586 1549 1587 1550 1588 1551 1589 1552

+

1590 1553 1591 1554 1592 1555 1593 1556

+

1594 1557 1595 1558 1596 1559 1597 1560

+

1598 1561 1599 1562 1600 1563 1601 1564

+

1602 1565 1603 1566 1604 1567 1605 1568

+

1606 1569 1607 1570 1608 1571 1609 1572

+
+ + + +

1610 1573 1611 1574 1612 1575 1613 1576 1614 1577 1615 1578 1616 1579 1617 1580 1618 1581 1619 1582 1620 1583 1621 1584

+

1622 1585 1623 1586 1624 1587 1625 1588

+

1626 1589 1627 1590 1628 1591 1629 1592

+

1630 1593 1631 1594 1632 1595 1633 1596

+

1634 1597 1635 1598 1636 1599 1637 1600

+

1638 1601 1639 1602 1640 1603 1641 1604

+

1642 1605 1643 1606 1644 1607 1645 1608

+

1646 1609 1647 1610 1648 1611 1649 1612

+

1650 1613 1651 1614 1652 1615 1653 1616

+

1654 1617 1655 1618 1656 1619 1657 1620

+

1658 1621 1659 1622 1660 1623 1661 1624

+

1662 1625 1663 1626 1664 1627 1665 1628

+

1666 1629 1667 1630 1668 1631 1669 1632

+
+ + + +

1670 1633 1671 1634 1672 1635 1673 1636

+

1674 1637 1675 1638 1676 1639 1677 1640

+

1678 1641 1679 1642 1680 1643 1681 1644

+

1682 1645 1683 1646 1684 1647 1685 1648

+

1686 1649 1687 1650 1688 1651 1689 1652

+

1690 1653 1691 1654 1692 1655 1693 1656

+

1694 1657 1695 1658 1696 1659 1697 1660

+

1698 1661 1699 1662 1700 1663 1701 1664

+
+ + + +

1702 1665 1703 1666 1704 1667 1705 1668 1706 1669 1707 1670 1708 1671 1709 1672 1710 1673 1711 1674 1712 1675 1713 1676

+

1714 1677 1715 1678 1716 1679 1717 1680

+

1718 1681 1719 1682 1720 1683 1721 1684

+

1722 1685 1723 1686 1724 1687 1725 1688

+

1726 1689 1727 1690 1728 1691 1729 1692

+

1730 1693 1731 1694 1732 1695 1733 1696

+

1734 1697 1735 1698 1736 1699 1737 1700

+

1738 1701 1739 1702 1740 1703 1741 1704

+

1742 1705 1743 1706 1744 1707 1745 1708

+

1746 1709 1747 1710 1748 1711 1749 1712

+

1750 1713 1751 1714 1752 1715 1753 1716

+

1754 1717 1755 1718 1756 1719 1757 1720

+

1758 1721 1759 1722 1760 1723 1761 1724

+
+ + + +

1762 1725 1763 1726 1764 1727 1765 1728 1766 1729 1767 1730 1768 1731 1769 1732 1770 1733 1771 1734 1772 1735 1773 1736

+

1774 1737 1775 1738 1776 1739 1777 1740

+

1778 1741 1779 1742 1780 1743 1781 1744

+

1782 1745 1783 1746 1784 1747 1785 1748

+

1786 1749 1787 1750 1788 1751 1789 1752

+

1790 1753 1791 1754 1792 1755 1793 1756

+

1794 1757 1795 1758 1796 1759 1797 1760

+

1798 1761 1799 1762 1800 1763 1801 1764

+

1802 1765 1803 1766 1804 1767 1805 1768

+

1806 1769 1807 1770 1808 1771 1809 1772

+

1810 1773 1811 1774 1812 1775 1813 1776

+

1814 1777 1815 1778 1816 1779 1817 1780

+

1818 1781 1819 1782 1820 1783 1821 1784

+
+ + + +

1822 1785 1823 1786 1824 1787 1825 1788

+

1826 1789 1827 1790 1828 1791 1829 1792

+

1830 1793 1831 1794 1832 1795 1833 1796

+

1834 1797 1835 1798 1836 1799 1837 1800

+

1838 1801 1839 1802 1840 1803 1841 1804

+

1842 1805 1843 1806 1844 1807 1845 1808

+

1846 1809 1847 1810 1848 1811 1849 1812

+

1850 1813 1851 1814 1852 1815 1853 1816

+
+
+ + + CAT3DBagRep + + +
+ + + + -145.997 53.5834 -22.8751 -142.894 55 -27.5 -150.263 0 -40.2628 -153.176 0 -35.3095 -153.176 0 -35.3095 -150.263 0 -40.2628 -142.894 -55 -27.4999 -145.997 -53.5834 -22.8753 -145.997 -53.5834 -22.8753 -142.894 -55 -27.4999 -122.763 -95.2628 7.36872 -126.385 -92.809 11.0956 -203.832 38.96 117.682 -95.2628 110 54.9999 -122.763 95.2628 7.36854 -216.673 31.6392 104.004 -216.673 -31.6392 104.004 -122.763 -95.2628 7.36872 -95.2628 -110 55.0001 -203.832 -38.96 117.682 -203.832 -38.96 117.682 -95.2628 -110 55.0001 -67.7627 -95.2628 102.632 -189.164 -36.1403 133.307 -189.164 -36.1403 133.307 -67.7627 -95.2628 102.632 -47.6313 -55 137.5 -177.03 -22.0118 146.232 -177.03 -22.0118 146.232 -47.6313 -55 137.5 -40.2628 0 150.263 -172.249 0 151.325 -172.249 0 151.325 -40.2628 0 150.263 -47.6314 55 137.5 -177.03 22.0118 146.232 -177.03 22.0118 146.232 -47.6314 55 137.5 -67.7628 95.2628 102.631 -189.164 36.1403 133.307 -189.164 36.1403 133.307 -67.7628 95.2628 102.631 -95.2628 110 54.9999 -203.832 38.96 117.682 -95.2628 110 54.9999 -67.7628 95.2628 102.631 -47.6314 55 137.5 -40.2628 0 150.263 -47.6313 -55 137.5 -67.7627 -95.2628 102.632 -95.2628 -110 55.0001 -122.763 -95.2628 7.36872 -142.894 -55 -27.4999 -150.263 0 -40.2628 -142.894 55 -27.5 -122.763 95.2628 7.36854 -126.385 92.8088 11.0959 -122.763 95.2628 7.36854 -142.894 55 -27.5 -145.997 53.5834 -22.8751 -221.61 23.3428 98.7449 -216.673 31.6392 104.004 -207.844 37.6206 94.9187 -221.609 -23.3431 98.7452 -207.846 -37.6196 94.9202 -216.673 -31.6392 104.004 -225.001 90.9303 -52.5026 -225.001 104.999 -0.003009 -225.001 52.4966 -90.9343 -225.001 90.933 52.4974 -225 -0.003741 -105 -225 52.5013 90.931 -225 -52.5034 -90.9315 -225 -90.935 -52.4979 -225 -52.4986 90.9338 -225 -105.001 0.00251 -225 -90.9323 52.5022 -184.356 -52.4986 90.9338 -184.352 52.5014 90.931 -125.99 -90.9321 52.502 -125.989 90.9332 52.4972 -117.168 97.7482 27.0609 -117.168 97.7482 27.0609 -117.166 -97.7492 27.063 -117.166 -97.7492 27.063 -193.411 -0.003678 -105 -185.29 52.4967 -90.9343 -185.288 -52.5033 -90.9316 -163.102 90.9304 -52.5027 -163.099 -90.9349 -52.4979 -132.793 104.999 -0.003118 -132.789 -105.001 0.002402 -225 52.4992 90.6082 -225 -0.00075 104.676 -125 -0.00075 104.676 -125 52.4992 90.6082 -225 -0.00075 104.676 -225 -52.5008 90.6084 -125 -52.5008 90.6084 -125 -0.00075 104.676 -225 -105.001 -0.324099 -225 -90.9335 52.1759 -225 -52.5008 90.6084 -225 -0.00075 104.676 -225 52.4992 90.6082 -225 90.9318 52.1754 -225 104.999 -0.324632 -225 90.9315 -52.8246 -225 52.4988 -91.2572 -225 -0.001283 -105.324 -225 -52.5012 -91.2569 -225 -90.9338 -52.8241 -225 90.9318 52.1754 -225 52.4992 90.6082 -125 52.4992 90.6082 -125 90.9318 52.1754 -216.673 -31.6392 104.004 -203.832 -38.96 117.682 -189.164 -36.1403 133.307 -177.03 -22.0118 146.232 -172.249 0 151.325 -177.03 22.0118 146.232 -189.164 36.1403 133.307 -203.832 38.96 117.682 -216.673 31.6392 104.004 -221.61 23.3428 98.7449 -221.609 -23.3431 98.7452 + + + + + + + + + + -0.80372 0.43498 -0.405988 -0.80372 0.43498 -0.405988 -0.86198 0 -0.506943 -0.86198 0 -0.506943 -0.86198 0 -0.506943 -0.86198 0 -0.506943 -0.803704 -0.435011 -0.405988 -0.803704 -0.435011 -0.405988 -0.803704 -0.435011 -0.405988 -0.803704 -0.435011 -0.405988 -0.644459 -0.753468 -0.130222 -0.725956 -0.620258 -0.297098 -0.426954 0.870028 0.246498 -0.426954 0.870028 0.246498 -0.644459 0.753468 -0.130222 -0.529313 0.847314 0.0434278 -0.529313 -0.847314 0.0434278 -0.644459 -0.753468 -0.130222 -0.426954 -0.870028 0.246498 -0.426954 -0.870028 0.246498 -0.426954 -0.870028 0.246498 -0.426954 -0.870028 0.246498 -0.209449 -0.753479 0.623218 -0.209449 -0.753479 0.623218 -0.209449 -0.753479 0.623218 -0.209449 -0.753479 0.623218 -0.0502029 -0.43498 0.899039 -0.0502029 -0.43498 0.899039 -0.0502029 -0.43498 0.899039 -0.0502029 -0.43498 0.899039 0.00802637 0 0.999968 0.00802637 0 0.999968 0.00802637 0 0.999968 0.00802637 0 0.999968 -0.0502029 0.435011 0.899025 -0.0502029 0.435011 0.899025 -0.0502029 0.435011 0.899025 -0.0502029 0.435011 0.899025 -0.209449 0.753479 0.623218 -0.209449 0.753479 0.623218 -0.209449 0.753479 0.623218 -0.209449 0.753479 0.623218 -0.426954 0.870028 0.246498 -0.426954 0.870028 0.246498 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 -0.725956 0.620258 -0.297098 -0.644459 0.753468 -0.130222 -0.80372 0.43498 -0.405988 -0.80372 0.43498 -0.405988 -0.725946 0.62027 -0.297098 -0.725947 -0.620269 -0.297099 0 0.866017 -0.500015 0 1 0 0 0.499954 -0.866052 0 0.866052 0.499954 0 0 -1 0 0.70713 0.707083 0 -0.500015 -0.866017 0 -0.866052 -0.499954 0 -0.707083 0.70713 0 -1 0 0 -0.866017 0.500015 0 -0.707083 0.70713 0 0.70713 0.707083 0 -0.866017 0.500015 0 0.866052 0.499954 0 0.96594 0.258766 0.866034 0 -0.499985 0 -0.965924 0.258827 0.866034 0 -0.499985 0 0 -1 0 0.499954 -0.866052 0 -0.500015 -0.866017 0 0.866017 -0.500015 0 -0.866052 -0.499954 0 1 0 0 -1 0 0.866033 2.73738e-006 -0.499988 0 0.499985 0.866034 0 0 1 0 0 1 0 0.499985 0.866034 0 0 1 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0 1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.70713 0.707083 0 0.499985 0.866034 0 0.499985 0.866034 0 0.70713 0.707083 -0.729078 1.2147e-007 0.684431 + + + + + + + + + + + + + + +

0 0 1 1 2 2 3 3

+

4 4 5 5 6 6 7 7

+

8 8 9 9 10 10 11 11

+

12 12 13 13 14 14 15 15

+

16 16 17 17 18 18 19 19

+

20 20 21 21 22 22 23 23

+

24 24 25 25 26 26 27 27

+

28 28 29 29 30 30 31 31

+

32 32 33 33 34 34 35 35

+

36 36 37 37 38 38 39 39

+

40 40 41 41 42 42 43 43

+

44 44 45 45 46 46 47 47 48 48 49 49 50 50 51 51 52 52 53 53 54 54 55 55

+

56 56 57 57 58 58 59 59

+
+ + + +

60 60 61 60 62 60

+
+ + + +

63 61 64 61 65 61

+
+ + + +

86 88 88 88 89 88 87 88 85 88

+

90 88 91 88 89 88 88 88

+

82 88 84 88 91 88 90 88

+
+ + + +

77 73 74 70 76 72 79 75

+

83 79 79 75 76 72 75 71 91 87

+

91 87 75 71 73 69 89 85

+

89 85 73 69 72 68 87 83

+

87 83 72 68 70 66 85 81

+

85 81 70 66 68 64 86 82

+

86 82 68 64 66 62 88 84

+

88 84 66 62 67 63 90 86

+

81 77 90 86 67 63 69 65 80 76

+

80 76 69 65 71 67 78 74

+
+ + + +

92 89 93 90 94 91 95 92

+

96 93 97 94 98 95 99 96

+

100 97 101 98 102 99 103 100 104 101 105 102 106 103 107 104 108 105 109 106 110 107 111 108

+

112 109 113 110 114 111 115 112

+
+ + + +

116 113 117 113 118 113 119 113 120 113 121 113 122 113 123 113 124 113 125 113 126 113

+
+
+ + + CAT3DBagRep + + +
+ + + + -37.0345 -27.5 -120.092 -37.0345 27.5 -120.092 -43.0345 27.5 -109.699 -43.0345 -27.5 -109.699 -58.6851 -27.5 -132.592 -37.0345 -27.5 -120.092 -43.0345 -27.5 -109.699 -64.6851 -27.5 -122.199 -64.6851 27.5 -122.199 -64.6851 -27.5 -122.199 -43.0345 -27.5 -109.699 -43.0345 27.5 -109.699 -37.0345 27.5 -120.092 -58.6851 27.5 -132.592 -64.6851 27.5 -122.199 -43.0345 27.5 -109.699 -58.6851 27.5 -132.592 -37.0345 27.5 -120.092 -37.0345 -27.5 -120.092 -58.6851 -27.5 -132.592 -58.6851 27.5 -132.592 -58.6851 -27.5 -132.592 -64.6851 -27.5 -122.199 -64.6851 27.5 -122.199 -38.9714 -116.913 67.5 -14.4953 -128.273 25.1061 39.3145 -133.55 78.9159 -14.4567 -116.913 109.961 -67.5003 -67.5 116.913 -38.9714 -116.913 67.5 -14.4567 -116.913 109.961 -57.25 -67.5 134.667 -77.9426 0 135 -67.5003 -67.5 116.913 -57.25 -67.5 134.667 -72.9134 0 143.711 -14.4567 116.913 109.961 39.3145 133.55 78.9159 -14.4953 128.273 25.1061 -38.9714 116.913 67.5 -57.25 67.5 134.667 -14.4567 116.913 109.961 -38.9714 116.913 67.5 -67.5003 67.5 116.913 -72.9134 0 143.711 -57.25 67.5 134.667 -67.5003 67.5 116.913 -77.9426 0 135 139.682 -67.5 8.1104 145.25 -67.5 17.754 109.259 -109.058 38.5332 139.682 -67.5 8.1104 152.923 0 -5.12989 160.913 0 8.71074 145.25 -67.5 17.754 145.25 67.5 17.754 160.913 0 8.71074 152.923 0 -5.12989 139.682 67.5 8.1104 109.259 109.058 38.5332 145.25 67.5 17.754 139.682 67.5 8.1104 -77.9426 0 135 -110 0 135 -110 -67.5 116.913 -67.5003 -67.5 116.913 -67.5003 -67.5 116.913 -110 -67.5 116.913 -110 -116.913 67.5 -38.9715 -116.913 67.5 -14.4953 -128.273 25.1061 -38.9715 -116.913 67.5 -110 -116.913 67.5 -110 -135 0 -108.192 -135 0 -108.192 -135 0 -110 -135 0 -110 -116.913 -67.5 -90.1057 -116.913 -67.5 -90.1057 -116.913 -67.5 -110 -116.913 -67.5 -110 -67.5 -116.913 -76.8654 -67.5 -116.913 -76.8654 -67.5 -116.913 -110 -67.5 -116.913 -110 0 -135 -72.0191 0 -135 -72.0191 0 -135 -110 0 -135 -110 67.5 -116.913 -76.8654 67.5 -116.913 -76.8654 67.5 -116.913 -110 67.5 -116.913 -110 116.913 -67.5 -90.1057 116.913 -67.5 -90.1057 116.913 -67.5 -110 116.913 -67.5 -110 135 0 -108.192 135 0 -108.192 135 0 -110 135 0 -110 116.913 67.5 -38.9715 116.913 67.5 -14.4953 128.273 25.1061 -38.9715 116.913 67.5 -110 116.913 67.5 -110 67.5 116.913 -67.5003 67.5 116.913 -67.5003 67.5 116.913 -110 67.5 116.913 -110 0 135 -77.9426 0 135 -90.1056 -116.913 -67.4999 -90.1056 116.913 -67.4999 -76.8654 -67.5 -116.913 -76.8654 67.5 -116.913 -72.0191 0 -135 101.404 -116.913 43.0684 101.404 116.913 43.0684 109.26 -109.058 38.5331 109.26 109.058 38.5331 139.682 -67.5 8.11042 139.682 67.5 8.11042 152.923 0 -5.12985 -108.192 -135 0 -108.192 135 0 -93.6972 -120.505 -54.0959 -93.6972 120.505 -54.0959 -14.4953 -128.273 25.106 -14.4953 128.273 25.106 39.3146 -133.55 78.9159 39.3146 133.55 78.9159 85.9153 -121.064 52.0109 85.9153 121.064 52.0109 160.913 0 8.71074 145.25 67.5 17.754 109.259 109.058 38.5332 101.404 116.913 43.0683 39.3145 133.55 78.9159 -14.4567 116.913 109.961 -57.25 67.5 134.667 -72.9134 0 143.711 -72.9134 0 143.711 -57.25 -67.5 134.667 -14.4567 -116.913 109.961 39.3145 -133.55 78.9159 101.404 -116.913 43.0683 109.259 -109.058 38.5332 145.25 -67.5 17.754 160.913 0 8.71074 -110 0 135 -110 67.5 116.913 -110 116.913 67.5 -110 135 0 -110 116.913 -67.5 -110 67.5 -116.913 -110 0 -135 -110 0 -135 -110 -67.5 -116.913 -110 -116.913 -67.5 -110 -135 0 -110 -116.913 67.5 -110 -67.5 116.913 -110 0 135 + + + + + + + + + + 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 0 1 0 0 1 0 0 1 0 0 1 0 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.432997 -0.86604 0.249977 -0.224128 -0.965931 0.129398 -0.224128 -0.965931 0.129398 -0.432997 -0.86604 0.249977 -0.750019 -0.499985 0.432997 -0.432997 -0.86604 0.249977 -0.432997 -0.86604 0.249977 -0.750019 -0.499985 0.432997 -0.866034 0 0.499985 -0.750019 -0.499985 0.432997 -0.750019 -0.499985 0.432997 -0.866034 0 0.499985 -0.432997 0.86604 0.249977 -0.224128 0.965931 0.129398 -0.224128 0.965931 0.129398 -0.432997 0.86604 0.249977 -0.750019 0.499985 0.432997 -0.432997 0.86604 0.249977 -0.432997 0.86604 0.249977 -0.750019 0.499985 0.432997 -0.866034 0 0.499985 -0.750019 0.499985 0.432997 -0.750019 0.499985 0.432997 -0.866034 0 0.499985 0.750019 -0.499985 -0.432997 0.750019 -0.499985 -0.432997 0.612354 -0.707136 -0.353526 0.750019 -0.499985 -0.432997 0.866034 0 -0.499985 0.866034 0 -0.499985 0.750019 -0.499985 -0.432997 0.750019 0.499985 -0.432997 0.866034 0 -0.499985 0.866034 0 -0.499985 0.750019 0.499985 -0.432997 0.612354 0.707136 -0.353526 0.750019 0.499985 -0.432997 0.750019 0.499985 -0.432997 0 0 1 0 0 1 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 1 0 0 1 0 0 1 0 0 1 0 0 0.866034 0.499985 0 0.866034 0.499985 0 0.965932 0.258797 0 0.866034 0.499985 0 0.866034 0.499985 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0 1 0 0 1 0.249977 -0.86604 -0.432997 0.249977 0.86604 -0.432997 0.432997 -0.499985 -0.750019 0.432997 0.499985 -0.750019 0.499985 0 -0.866034 0.249977 -0.86604 -0.432997 0.249977 0.86604 -0.432997 0.353526 -0.707136 -0.612354 0.353526 0.707136 -0.612354 0.432997 -0.499985 -0.750019 0.432997 0.499985 -0.750019 0.499985 0 -0.866034 0.129409 0.965926 -0.224144 0.12941 -0.965926 -0.224144 0.5 -4.44089e-016 0.866025 -1 0 0 + + + + + + + + + + + + + + +

0 0 1 1 2 2 3 3

+

4 4 5 5 6 6 7 7

+

8 8 9 9 10 10 11 11

+

12 12 13 13 14 14 15 15

+

16 16 17 17 18 18 19 19

+

20 20 21 21 22 22 23 23

+
+ + + +

24 24 25 25 26 26 27 27

+

28 28 29 29 30 30 31 31

+

32 32 33 33 34 34 35 35

+

36 36 37 37 38 38 39 39

+

40 40 41 41 42 42 43 43

+

44 44 45 45 46 46 47 47

+
+ + + +

48 48 49 49 50 50 59 59 60 60 61 61

+
+ + + +

51 51 52 52 53 53 54 54

+

55 55 56 56 57 57 58 58

+
+ + + +

62 62 63 63 64 64 65 65

+

66 66 67 67 68 68 69 69

+

70 70 71 71 72 72 73 73 74 74

+

75 75 76 76 77 77 78 78

+

79 79 80 80 81 81 82 82

+

83 83 84 84 85 85 86 86

+

87 87 88 88 89 89 90 90

+

91 91 92 92 93 93 94 94

+

95 95 96 96 97 97 98 98

+

99 99 100 100 101 101 102 102 103 103

+

104 104 105 105 106 106 107 107

+

108 108 109 109 110 110 111 111

+
+ + + +

133 124 129 124 131 124 127 124 125 124 129 124

+
+ + + +

118 124 113 124 127 124 129 124 133 124

+
+ + + +

130 125 128 125 132 125 128 125 124 125 126 125

+
+ + + +

132 125 128 125 126 125 112 125 117 125

+
+ + + +

122 122 115 115 113 113 118 118 120 120

+

119 119 117 117 112 112 114 114 121 121

+

121 121 114 114 116 116 123 123

+

123 123 116 116 115 115 122 122

+
+ + + +

134 126 135 126 136 126 137 126 138 126 139 126 140 126 141 126

+

142 126 143 126 144 126 145 126 146 126 147 126 148 126 149 126

+
+ + + +

150 127 151 127 152 127 153 127 154 127 155 127 156 127

+

157 127 158 127 159 127 160 127 161 127 162 127 163 127

+
+
+ + + CAT3DBagRep + + +
+ + + + 65.5736 0 -176.423 65.5736 0 -176.423 73.6121 -60 -162.5 73.6121 -60 -162.5 73.6121 60 -162.5 73.6121 60 -162.5 93 98.7757 -128.919 93 103.923 -122.976 93 -98.7757 -128.919 93 120 -53.6936 93 -120 -53.6936 93 -103.923 -122.976 93 -103.923 15.5885 93 99.1666 21.0807 93 99.1666 21.0807 93 103.923 15.5884 93 -99.1666 21.0807 93 -99.1666 21.0807 112.583 60 55 112.583 60 55 112.583 -60 55 112.583 -60 55 120.622 0 68.923 120.622 0 68.923 139.186 0 -218.923 139.186 0 -218.923 147.224 -60 -205 147.224 -60 -205 147.224 60 -205 147.224 60 -205 169.186 103.923 -166.961 169.186 103.923 -166.961 169.186 -103.923 -166.961 169.186 -103.923 -166.961 199.186 -120 -115 199.186 -120 -115 199.186 120 -115 199.186 120 -115 229.186 -103.923 -63.0385 229.186 -103.923 -63.0385 229.186 103.923 -63.0385 229.186 103.923 -63.0385 251.147 -60 -25.0001 251.147 -60 -25.0001 251.147 60 -25 251.147 60 -25 259.185 0 -11.077 259.185 0 -11.077 207.418 27.5 30.7281 207.418 -27.5 30.7281 229.068 -27.5 18.2281 229.068 27.5 18.2281 220.068 27.5 2.63969 198.418 27.5 15.1397 207.418 27.5 30.7281 229.068 27.5 18.2281 220.068 -27.5 2.63969 220.068 27.5 2.63969 229.068 27.5 18.2281 229.068 -27.5 18.2281 198.418 -27.5 15.1397 220.068 -27.5 2.63969 229.068 -27.5 18.2281 207.418 -27.5 30.7281 198.418 27.5 15.1397 198.418 -27.5 15.1397 207.418 -27.5 30.7281 207.418 27.5 30.7281 93 -98.7757 -128.919 95.5737 -103.923 -124.462 125.574 -120 -72.5 155.574 -103.923 -20.5385 177.535 -60 17.5 185.574 0 31.423 177.535 60 17.5 155.574 103.923 -20.5385 125.574 120 -72.5 95.5737 103.923 -124.462 93 98.7757 -128.919 93 -98.7758 -128.919 93 -103.923 -122.976 93 -120 -53.6936 93 -103.923 15.5884 93 -99.1659 21.0815 93 99.1659 21.0815 93 103.923 15.5885 93 120 -53.6936 93 103.923 -122.976 93 98.7758 -128.919 196.832 0.001502 24.9218 196.35 47.8163 0 189.932 44.6 25.7498 187.228 26.526 45.9443 189.67 0.00183 51.6495 196.35 -47.8165 0 196.832 0.001502 24.9218 189.67 0.00183 51.6495 187.227 -26.5261 45.9446 189.932 -44.6002 25.7499 196.35 47.8163 0 88 110 0 88 95.2628 55 189.932 44.6 25.7498 189.932 44.6 25.7498 88 95.2628 55 88 55 95.2628 187.228 26.526 45.9443 189.67 0.00183 51.6495 187.228 26.526 45.9443 88 55 95.2628 88 0 110 189.67 0 51.6503 189.67 0 51.6503 88 0 110 88 -55 95.2628 187.227 -26.5261 45.9446 187.227 -26.5261 45.9446 88 -55 95.2628 88 -95.2628 55 189.932 -44.6002 25.7499 189.932 -44.6002 25.7499 88 -95.2628 55 88 -110 0 196.35 -47.8165 0 88 110 0 88 95.2628 -55 88 55 -95.2628 88 0 -110 88 -55 -95.2628 88 -95.2628 -55 88 -110 0 88 -95.2628 55 88 -55 95.2628 88 0 110 88 55 95.2628 88 95.2628 55 182.443 -55.7981 0 88 -110 0 88 -95.2628 -55 163.137 -57.9181 -33.439 163.137 -57.9181 -33.439 88 -95.2628 -55 88 -55 -95.2628 143.316 -39.1267 -67.7695 143.316 -39.1267 -67.7695 88 -55 -95.2628 88 0 -110 134.264 0 -83.4487 134.264 0 -83.4487 88 0 -110 88 55 -95.2628 143.316 39.1267 -67.7695 143.316 39.1267 -67.7695 88 55 -95.2628 88 95.2628 -55 163.137 57.9181 -33.4391 163.137 57.9181 -33.4391 88 95.2628 -55 88 110 0 182.443 55.7981 0 + + + + + + + + + + -0.866034 0 0.499985 -0.499985 0 -0.866034 -0.866034 0 0.499985 -0.432997 -0.499985 -0.750019 -0.866034 0 0.499985 -0.432997 0.499985 -0.750019 -0.866034 0 0.499985 -0.249977 0.86604 -0.432997 -0.866034 0 0.499985 0 1 0 0 -1 0 -0.249977 -0.86604 -0.432997 0.249977 -0.86604 0.432997 -0.866034 0 0.499985 0.353526 0.707136 0.612354 0.249977 0.86604 0.432997 -0.866034 0 0.499985 0.353526 -0.707136 0.612354 -0.866034 0 0.499985 0.432997 0.499985 0.750019 -0.866034 0 0.499985 0.432997 -0.499985 0.750019 -0.866034 0 0.499985 0.499985 0 0.866034 -0.499985 0 -0.866034 0.866034 0 -0.499985 -0.40904 -0.57506 -0.708514 0.866034 0 -0.499985 -0.40904 0.57506 -0.708514 0.866034 0 -0.499985 -0.249977 0.86604 -0.432997 0.866034 0 -0.499985 -0.249977 -0.86604 -0.432997 0.866034 0 -0.499985 0 -1 0 0.866034 0 -0.499985 0 1 0 0.866034 0 -0.499985 0.249977 -0.86604 0.432997 0.866034 0 -0.499985 0.249977 0.86604 0.432997 0.866034 0 -0.499985 0.432997 -0.499985 0.750019 0.866034 0 -0.499985 0.432997 0.499985 0.750019 0.866034 0 -0.499985 0.499985 0 0.866034 0.866034 0 -0.499985 -0.409054 0.575061 -0.708505 -0.25 -0.866025 -0.433013 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0 1 0 0 1 0 0 1 0 0 1 0 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866025 -7.14243e-008 0.5 -1 1.88179e-007 -1.13747e-007 0.955981 0.143138 0.256149 0.95598 -0.143137 0.256152 0.484817 0.844817 0.226356 0.497757 0.867317 0 0.497757 0.75113 0.433637 0.497757 0.75113 0.433637 0.497757 0.75113 0.433637 0.497757 0.75113 0.433637 0.497909 0.433851 0.750906 0.497909 0.433851 0.750906 0.485183 0.226814 0.844484 0.497909 0.433851 0.750906 0.497909 0.433851 0.750906 0.497971 0.00021363 0.867194 0.497971 0.00021363 0.867194 0.497971 0.00021363 0.867194 0.497971 0.00021363 0.867194 0.497757 -0.433637 0.75113 0.497757 -0.433637 0.75113 0.497757 -0.433637 0.75113 0.497757 -0.433637 0.75113 0.497757 -0.75113 0.433637 0.497757 -0.75113 0.433637 0.497757 -0.75113 0.433637 0.497757 -0.75113 0.433637 0.497757 -0.867317 0 0.484817 -0.844817 0.226356 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0.484817 -0.844817 -0.226356 0.497757 -0.867317 0 0.497757 -0.75113 -0.433637 0.497757 -0.75113 -0.433637 0.497757 -0.75113 -0.433637 0.497757 -0.75113 -0.433637 0.497757 -0.433637 -0.75113 0.497757 -0.433637 -0.75113 0.497757 -0.433637 -0.75113 0.497757 -0.433637 -0.75113 0.497757 0 -0.867317 0.497757 0 -0.867317 0.497757 0 -0.867317 0.497757 0 -0.867317 0.497757 0.433637 -0.75113 0.497757 0.433637 -0.75113 0.497757 0.433637 -0.75113 0.497757 0.433637 -0.75113 0.497757 0.75113 -0.433637 0.497757 0.75113 -0.433637 0.497757 0.75113 -0.433637 0.497757 0.75113 -0.433637 0.497757 0.867317 0 0.484817 0.844817 -0.226356 + + + + + + + + + + + + + + +

6 48 29 48 5 48

+
+ + + +

29 48 6 48 7 48 31 48

+
+ + + +

8 49 3 49 27 49

+
+ + + +

33 49 11 49 8 49 27 49

+
+ + + +

1 1 5 5 28 28 24 24

+

2 2 8 8 6 6 4 4 0 0

+

3 3 1 1 24 24 26 26

+

32 32 34 34 10 10 11 11

+

34 34 38 38 12 12 10 10

+

38 38 42 42 21 21 17 17 12 12

+

16 16 20 20 22 22 18 18 13 13

+

40 40 36 36 9 9 15 15

+

44 44 40 40 15 15 14 14 19 19

+

46 46 44 44 19 19 23 23

+

42 42 46 46 23 23 21 21

+

47 47 43 43 39 39 35 35 33 33 27 27 25 25 29 29 31 31 37 37 41 41 45 45

+

36 36 30 30 7 7 9 9

+
+ + + +

48 50 49 51 50 52 51 53

+

52 54 53 55 54 56 55 57

+

56 58 57 59 58 60 59 61

+

60 62 61 63 62 64 63 65

+

64 66 65 67 66 68 67 69

+
+ + + +

68 70 69 70 70 70 71 70 72 70 73 70 74 70 75 70 76 70 77 70 78 70

+
+ + + +

79 71 80 71 81 71 82 71 83 71 84 71 85 71 86 71 87 71 88 71

+
+ + + +

89 72 90 72 91 72 92 72 93 72

+
+ + + +

94 73 95 73 96 73 97 73 98 73

+
+ + + +

99 74 100 75 101 76 102 77

+

103 78 104 79 105 80 106 81

+

107 82 108 83 109 84 110 85 111 86

+

112 87 113 88 114 89 115 90

+

116 91 117 92 118 93 119 94

+

120 95 121 96 122 97 123 98

+

124 99 125 100 126 101 127 102 128 103 129 104 130 105 131 106 132 107 133 108 134 109 135 110

+

136 111 137 112 138 113 139 114

+

140 115 141 116 142 117 143 118

+

144 119 145 120 146 121 147 122

+

148 123 149 124 150 125 151 126

+

152 127 153 128 154 129 155 130

+

156 131 157 132 158 133 159 134

+
+
+ + + CAT3DBagRep + + +
+ + + + 230 120 0 230 103.923 60 240 103.923 60 240 120 0 240 103.923 60 240 60 103.923 240 0 120 240 -60 103.923 240 -103.923 60 240 -120 0 240 -103.923 -60 240 -60 -103.923 240 0 -120 240 60 -103.923 240 103.923 -60 240 120 0 230 60 -103.923 230 103.923 -60 240 103.923 -60 240 60 -103.923 230 0 -120 230 60 -103.923 240 60 -103.923 240 0 -120 230 -60 -103.923 230 0 -120 240 0 -120 240 -60 -103.923 230 -103.923 -60 230 -60 -103.923 240 -60 -103.923 240 -103.923 -60 230 -120 0 230 -103.923 -60 240 -103.923 -60 240 -120 0 230 -103.923 60 230 -120 0 240 -120 0 240 -103.923 60 230 -60 103.923 230 -103.923 60 240 -103.923 60 240 -60 103.923 230 0 120 230 -60 103.923 240 -60 103.923 240 0 120 230 60 103.923 230 0 120 240 0 120 240 60 103.923 230 103.923 60 230 60 103.923 240 60 103.923 240 103.923 60 230 60 103.923 230 103.923 60 230 120 0 230 103.923 -60 230 60 -103.923 230 0 -120 230 -60 -103.923 230 -103.923 -60 230 -120 0 230 -103.923 60 230 -60 103.923 230 0 120 230 103.923 -60 230 120 0 240 120 0 240 103.923 -60 + + + + + + + + + + 0 1 0 0 0.866034 0.499985 0 0.866034 0.499985 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.499985 -0.866034 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.499985 -0.866034 0 0 -1 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0 -1 0 -0.499985 -0.866034 0 0 -1 0 0 -1 0 -0.499985 -0.866034 0 -0.866034 -0.499985 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.866034 -0.499985 0 -1 0 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -1 0 0 -0.866034 0.499985 0 -1 0 0 -1 0 0 -0.866034 0.499985 0 -0.499985 0.866034 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.499985 0.866034 0 0 1 0 -0.499985 0.866034 0 -0.499985 0.866034 0 0 1 0 0.499985 0.866034 0 0 1 0 0 1 0 0.499985 0.866034 0 0.866034 0.499985 0 0.499985 0.866034 0 0.499985 0.866034 0 0.866034 0.499985 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.866034 -0.499985 0 1 0 0 1 0 0 0.866034 -0.499985 + + + + + + + + + + + + + + +

0 0 1 1 2 2 3 3

+

4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15

+

16 16 17 17 18 18 19 19

+

20 20 21 21 22 22 23 23

+

24 24 25 25 26 26 27 27

+

28 28 29 29 30 30 31 31

+

32 32 33 33 34 34 35 35

+

36 36 37 37 38 38 39 39

+

40 40 41 41 42 42 43 43

+

44 44 45 45 46 46 47 47

+

48 48 49 49 50 50 51 51

+

52 52 53 53 54 54 55 55

+

56 56 57 57 58 58 59 59 60 60 61 61 62 62 63 63 64 64 65 65 66 66 67 67

+

68 68 69 69 70 70 71 71

+
+
+ + + CAT3DBagRep + + +
+ + + + 37.5 280 0 32.476 280 18.75 32.476 275.984 18.75 37.5 275.984 0 32.476 280 18.75 18.75 280 32.476 18.75 275.984 32.476 32.476 275.984 18.75 18.75 280 32.476 0 280 37.5 0 275.984 37.5 18.75 275.984 32.476 0 280 37.5 -18.75 280 32.476 -18.75 275.984 32.476 0 275.984 37.5 -18.75 280 32.476 -32.476 280 18.75 -32.476 275.984 18.75 -18.75 275.984 32.476 -32.476 280 18.75 -37.5 280 0 -37.5 275.984 0 -32.476 275.984 18.75 -37.5 280 0 -32.476 280 -18.75 -32.476 275.984 -18.75 -37.5 275.984 0 -32.476 280 -18.75 -18.75 280 -32.476 -18.75 275.985 -32.476 -32.476 275.984 -18.75 -18.75 280 -32.476 0 280 -37.5 0 275.985 -37.5 -18.75 275.985 -32.476 0 280 -37.5 18.75 280 -32.476 18.75 275.985 -32.476 0 275.985 -37.5 18.75 280 -32.476 32.476 280 -18.75 32.476 275.985 -18.75 18.75 275.985 -32.476 37.5 280 0 32.476 280 -18.75 18.75 280 -32.476 0 280 -37.5 -18.75 280 -32.476 -32.476 280 -18.75 -37.5 280 0 -32.476 280 18.75 -18.75 280 32.476 0 280 37.5 18.75 280 32.476 32.476 280 18.75 32.476 280 -18.75 37.5 280 0 37.5 275.984 0 32.476 275.985 -18.75 46.0055 -275.984 47.9985 128.681 -275.986 -32.8739 128.682 -191.986 -32.875 46.0061 -191.984 47.9974 18.7305 -275.985 64.3004 46.0055 -275.984 47.9985 46.0061 -191.984 47.9974 18.7311 -191.985 64.2993 -16.4394 -275.985 65.7443 18.7305 -275.985 64.3004 18.7311 -191.985 64.2993 -16.4388 -191.985 65.743 -47.6182 -275.984 49.408 -16.4394 -275.985 65.7443 -16.4388 -191.985 65.743 -47.6176 -191.984 49.4069 -66.4504 -275.983 19.6667 -47.6182 -275.984 49.408 -47.6176 -191.984 49.4069 -66.4497 -191.983 19.6656 -69.4125 -275.985 -4.88123 -66.4504 -275.983 19.6667 -66.4497 -191.983 19.6656 -69.4119 -191.985 -4.88232 -64.2752 -275.986 -86.4246 -69.4125 -275.985 -4.88123 -69.4119 -191.985 -4.88232 -64.2746 -191.986 -86.4258 237.235 -191.993 -516.528 53.1085 -191.993 -609.415 -64.2746 -191.986 -86.4258 -69.4119 -191.985 -4.88232 -66.4497 -191.983 19.6656 -47.6176 -191.984 49.4069 -16.4388 -191.985 65.743 18.7311 -191.985 64.2993 46.0061 -191.984 47.9974 128.682 -191.986 -32.875 128.681 -275.986 -32.8739 237.234 -275.993 -516.527 237.235 -191.993 -516.528 128.682 -191.986 -32.875 237.234 -275.993 -516.527 128.681 -275.986 -32.8739 46.0055 -275.984 47.9985 18.7305 -275.985 64.3004 -16.4394 -275.985 65.7443 -47.6182 -275.984 49.408 -66.4504 -275.983 19.6667 -69.4125 -275.985 -4.88123 -64.2752 -275.986 -86.4246 53.1078 -275.993 -609.413 53.1078 -275.993 -609.413 -64.2752 -275.986 -86.4246 -64.2746 -191.986 -86.4258 53.1085 -191.993 -609.415 -16.4032 -276.001 -1264.49 -40.4539 -276 -1249.26 -40.4522 -192 -1249.26 -16.4015 -192.001 -1264.49 12.0427 -276.001 -1265.66 -16.4032 -276.001 -1264.49 -16.4015 -192.001 -1264.49 12.0444 -192.001 -1265.66 37.2618 -276.001 -1252.45 12.0427 -276.001 -1265.66 12.0444 -192.001 -1265.66 37.2635 -192.001 -1252.45 -48.9309 -192 -1237.11 52.1788 -192.001 -1229.38 37.2635 -192.001 -1252.45 12.0444 -192.001 -1265.66 -16.4015 -192.001 -1264.49 -40.4522 -192 -1249.26 -40.4539 -276 -1249.26 -48.9327 -276 -1237.11 -48.9309 -192 -1237.11 -40.4522 -192 -1249.26 -48.9327 -276 -1237.11 -40.4539 -276 -1249.26 -16.4032 -276.001 -1264.49 12.0427 -276.001 -1265.66 37.2618 -276.001 -1252.45 52.1771 -276.001 -1229.38 52.1771 -276.001 -1229.38 37.2618 -276.001 -1252.45 37.2635 -192.001 -1252.45 52.1788 -192.001 -1229.38 136.686 -275.998 -975.766 52.1771 -276.001 -1229.38 52.1774 -192.001 -1229.38 136.686 -191.998 -975.762 237.234 -275.993 -516.527 136.686 -275.998 -975.766 136.686 -191.998 -975.762 237.235 -191.993 -516.523 -82.7051 -192 -1229.71 53.1082 -191.993 -609.41 237.235 -191.993 -516.523 136.686 -191.998 -975.762 52.1774 -192.001 -1229.38 -48.9323 -192 -1237.11 -48.9327 -276 -1237.11 -82.7054 -276 -1229.72 -82.7051 -192 -1229.71 -48.9323 -192 -1237.11 -82.7054 -276 -1229.72 -48.9327 -276 -1237.11 52.1771 -276.001 -1229.38 136.686 -275.998 -975.766 237.234 -275.993 -516.527 53.1078 -275.993 -609.413 -82.7054 -276 -1229.72 53.1078 -275.993 -609.413 53.1082 -191.993 -609.41 -82.7051 -192 -1229.71 12.0444 192.001 -1265.66 -16.4015 192.001 -1264.49 -16.4032 276.001 -1264.49 12.0427 276.001 -1265.66 37.2635 192.001 -1252.45 12.0444 192.001 -1265.66 12.0427 276.001 -1265.66 37.2618 276.001 -1252.45 52.1771 276.001 -1229.38 37.2618 276.001 -1252.45 12.0427 276.001 -1265.66 -16.4032 276.001 -1264.49 -40.4539 276 -1249.26 -48.9327 276 -1237.11 -40.4522 192 -1249.26 -48.9309 192 -1237.11 -48.9327 276 -1237.11 -40.4539 276 -1249.26 -16.4015 192.001 -1264.49 -40.4522 192 -1249.26 -40.4539 276 -1249.26 -16.4032 276.001 -1264.49 -40.4522 192 -1249.26 -16.4015 192.001 -1264.49 12.0444 192.001 -1265.66 37.2635 192.001 -1252.45 52.1788 192.001 -1229.38 -48.9309 192 -1237.11 52.1788 192.001 -1229.38 37.2635 192.001 -1252.45 37.2618 276.001 -1252.45 52.1771 276.001 -1229.38 -48.9323 192 -1237.11 -82.7051 192 -1229.71 -82.7054 276 -1229.72 -48.9327 276 -1237.11 237.235 191.993 -516.523 136.686 191.998 -975.762 136.686 275.998 -975.766 237.234 275.993 -516.527 53.1078 275.993 -609.413 237.234 275.993 -516.527 136.686 275.998 -975.766 52.1771 276.001 -1229.38 -48.9327 276 -1237.11 -82.7054 276 -1229.72 136.686 191.998 -975.762 52.1774 192.001 -1229.38 52.1771 276.001 -1229.38 136.686 275.998 -975.766 -48.9323 192 -1237.11 52.1774 192.001 -1229.38 136.686 191.998 -975.762 237.235 191.993 -516.523 53.1082 191.993 -609.41 -82.7051 192 -1229.71 -82.7051 192 -1229.71 53.1082 191.993 -609.41 53.1078 275.993 -609.413 -82.7054 276 -1229.72 18.7311 191.985 64.2993 46.0061 191.984 47.9974 46.0055 275.984 47.9985 18.7305 275.985 64.3004 -16.4388 191.985 65.743 18.7311 191.985 64.2993 18.7305 275.985 64.3004 -16.4394 275.985 65.7443 -47.6176 191.984 49.4069 -16.4388 191.985 65.743 -16.4394 275.985 65.7443 -47.6182 275.984 49.408 -66.4497 191.983 19.6656 -47.6176 191.984 49.4069 -47.6182 275.984 49.408 -66.4504 275.983 19.6667 -69.4119 191.985 -4.88232 -66.4497 191.983 19.6656 -66.4504 275.983 19.6667 -69.4125 275.985 -4.88123 -64.2746 191.986 -86.4258 -69.4119 191.985 -4.88232 -69.4125 275.985 -4.88123 -64.2752 275.986 -86.4246 53.1078 275.993 -609.413 -64.2752 275.986 -86.4246 -69.4125 275.985 -4.88123 -66.4504 275.983 19.6667 -47.6182 275.984 49.408 -16.4394 275.985 65.7443 18.7305 275.985 64.3004 46.0055 275.984 47.9985 128.681 275.986 -32.8739 237.234 275.993 -516.527 128.682 191.986 -32.875 237.235 191.993 -516.528 237.234 275.993 -516.527 128.681 275.986 -32.8739 46.0061 191.984 47.9974 128.682 191.986 -32.875 128.681 275.986 -32.8739 46.0055 275.984 47.9985 128.682 191.986 -32.875 46.0061 191.984 47.9974 18.7311 191.985 64.2993 -16.4388 191.985 65.743 -47.6176 191.984 49.4069 -66.4497 191.983 19.6656 -69.4119 191.985 -4.88232 -64.2746 191.986 -86.4258 53.1085 191.993 -609.415 237.235 191.993 -516.528 53.1085 191.993 -609.415 -64.2746 191.986 -86.4258 -64.2752 275.986 -86.4246 53.1078 275.993 -609.413 17.576 -280 -1245.13 31.7842 -280 -1231.9 37.476 -280 -1213.34 33.1261 -280 -1194.42 19.9001 -280 -1180.22 1.34193 -280 -1174.52 -17.5758 -280 -1178.87 -31.784 -280 -1192.1 -37.4757 -280 -1210.66 -33.1258 -280 -1229.58 -19.8999 -280 -1243.78 -1.34171 -280 -1249.48 -33.1258 -160 -1229.58 -19.8999 -160 -1243.78 -19.8999 -280 -1243.78 -33.1258 -280 -1229.58 -37.4757 -160 -1210.66 -33.1258 -160 -1229.58 -33.1258 -280 -1229.58 -37.4757 -280 -1210.66 -31.784 -160 -1192.1 -37.4757 -160 -1210.66 -37.4757 -280 -1210.66 -31.784 -280 -1192.1 -17.5758 -160 -1178.87 -31.784 -160 -1192.1 -31.784 -280 -1192.1 -17.5758 -280 -1178.87 1.34193 -160 -1174.52 -17.5758 -160 -1178.87 -17.5758 -280 -1178.87 1.34193 -280 -1174.52 19.9001 -160 -1180.22 1.34193 -160 -1174.52 1.34193 -280 -1174.52 19.9001 -280 -1180.22 33.1261 -160 -1194.42 19.9001 -160 -1180.22 19.9001 -280 -1180.22 33.1261 -280 -1194.42 37.476 -160 -1213.34 33.1261 -160 -1194.42 33.1261 -280 -1194.42 37.476 -280 -1213.34 31.7842 -160 -1231.9 37.476 -160 -1213.34 37.476 -280 -1213.34 31.7842 -280 -1231.9 17.576 -160 -1245.13 31.7842 -160 -1231.9 31.7842 -280 -1231.9 17.576 -280 -1245.13 -1.34171 -160 -1249.48 17.576 -160 -1245.13 17.576 -280 -1245.13 -1.34171 -280 -1249.48 -19.8999 -160 -1243.78 -1.34171 -160 -1249.48 -1.34171 -280 -1249.48 -19.8999 -280 -1243.78 -19.8999 280 -1243.78 -33.1258 280 -1229.58 -37.4757 280 -1210.66 -31.784 280 -1192.1 -17.5758 280 -1178.87 1.34193 280 -1174.52 19.9001 280 -1180.22 33.1261 280 -1194.42 37.476 280 -1213.34 31.7842 280 -1231.9 17.576 280 -1245.13 -1.34171 280 -1249.48 31.7842 160 -1231.9 17.576 160 -1245.13 17.576 280 -1245.13 31.7842 280 -1231.9 37.476 160 -1213.34 31.7842 160 -1231.9 31.7842 280 -1231.9 37.476 280 -1213.34 33.1261 160 -1194.42 37.476 160 -1213.34 37.476 280 -1213.34 33.1261 280 -1194.42 19.9001 160 -1180.22 33.1261 160 -1194.42 33.1261 280 -1194.42 19.9001 280 -1180.22 1.34193 160 -1174.52 19.9001 160 -1180.22 19.9001 280 -1180.22 1.34193 280 -1174.52 -17.5758 160 -1178.87 1.34193 160 -1174.52 1.34193 280 -1174.52 -17.5758 280 -1178.87 -31.784 160 -1192.1 -17.5758 160 -1178.87 -17.5758 280 -1178.87 -31.784 280 -1192.1 -37.4757 160 -1210.66 -31.784 160 -1192.1 -31.784 280 -1192.1 -37.4757 280 -1210.66 -33.1258 160 -1229.58 -37.4757 160 -1210.66 -37.4757 280 -1210.66 -33.1258 280 -1229.58 -19.8999 160 -1243.78 -33.1258 160 -1229.58 -33.1258 280 -1229.58 -19.8999 280 -1243.78 -1.34171 160 -1249.48 -19.8999 160 -1243.78 -19.8999 280 -1243.78 -1.34171 280 -1249.48 17.576 160 -1245.13 -1.34171 160 -1249.48 -1.34171 280 -1249.48 17.576 280 -1245.13 32.476 -280 18.75 18.75 -280 32.476 0 -280 37.5 -18.75 -280 32.476 -32.476 -280 18.75 -37.5 -280 0 -32.476 -280 -18.75 -18.75 -280 -32.476 0 -280 -37.5 18.75 -280 -32.476 32.476 -280 -18.75 37.5 -280 0 18.75 -275.985 -32.476 32.476 -275.985 -18.75 32.476 -280 -18.75 18.75 -280 -32.476 0 -275.985 -37.5 18.75 -275.985 -32.476 18.75 -280 -32.476 0 -280 -37.5 -18.75 -275.985 -32.476 0 -275.985 -37.5 0 -280 -37.5 -18.75 -280 -32.476 -32.476 -275.984 -18.75 -18.75 -275.985 -32.476 -18.75 -280 -32.476 -32.476 -280 -18.75 -37.5 -275.984 0 -32.476 -275.984 -18.75 -32.476 -280 -18.75 -37.5 -280 0 -32.476 -275.984 18.75 -37.5 -275.984 0 -37.5 -280 0 -32.476 -280 18.75 -18.75 -275.984 32.476 -32.476 -275.984 18.75 -32.476 -280 18.75 -18.75 -280 32.476 0 -275.984 37.5 -18.75 -275.984 32.476 -18.75 -280 32.476 0 -280 37.5 18.75 -275.984 32.476 0 -275.984 37.5 0 -280 37.5 18.75 -280 32.476 32.476 -275.984 18.75 18.75 -275.984 32.476 18.75 -280 32.476 32.476 -280 18.75 37.5 -275.984 0 32.476 -275.984 18.75 32.476 -280 18.75 37.5 -280 0 32.476 -275.985 -18.75 37.5 -275.984 0 37.5 -280 0 32.476 -280 -18.75 + + + + + + + + + + 1 0 0 0.866034 0 0.499985 0.866034 0 0.499985 1 0 0 0.866034 0 0.499985 0.499985 0 0.866034 0.499985 0 0.866034 0.866034 0 0.499985 0.499985 0 0.866034 0 0 1 0 0 1 0.499985 0 0.866034 0 0 1 -0.499985 0 0.866034 -0.499985 0 0.866034 0 0 1 -0.499985 0 0.866034 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.866034 0 0.499985 -1 0 0 -1 0 0 -0.866034 0 0.499985 -1 0 0 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -1 0 0 -0.866034 0 -0.499985 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.499985 0 -0.866034 0 0 -1 0 0 -1 -0.499985 0 -0.866034 0 0 -1 0.499985 0 -0.866034 0.499985 0 -0.866034 0 0 -1 0.499985 0 -0.866034 0.866034 0 -0.499985 0.866034 0 -0.499985 0.499985 0 -0.866034 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.866034 0 -0.499985 1 0 0 1 0 0 0.866034 0 -0.499985 0.61037 0 0.792116 0.873428 0 0.486953 0.873428 0 0.486953 0.61037 0 0.792116 0.285806 0 0.958288 0.61037 0 0.792116 0.61037 0 0.792116 0.285806 0 0.958288 -0.219001 0 0.975725 0.285806 0 0.958288 0.285806 0 0.958288 -0.219001 0 0.975725 -0.677572 0 0.735456 -0.219001 0 0.975725 -0.219001 0 0.975725 -0.677572 0 0.735456 -0.942 0 0.335612 -0.677572 0 0.735456 -0.677572 0 0.735456 -0.942 0 0.335612 -0.999592 0 0.0285653 -0.942 0 0.335612 -0.942 0 0.335612 -0.999592 0 0.0285653 -0.989958 0 -0.141362 -0.999592 0 0.0285653 -0.999592 0 0.0285653 -0.989958 0 -0.141362 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.873428 0 0.486953 0.975731 0 0.21897 0.975731 0 0.21897 0.873428 0 0.486953 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.975731 0 -0.21897 -0.989958 0 -0.141362 -0.989958 0 -0.141362 -0.975731 0 -0.21897 -0.298196 0 -0.954505 -0.691092 0 -0.722767 -0.691092 0 -0.722767 -0.298196 0 -0.954505 0.21897 0 -0.975731 -0.298196 0 -0.954505 -0.298196 0 -0.954505 0.21897 0 -0.975731 0.674032 0 -0.738702 0.21897 0 -0.975731 0.21897 0 -0.975731 0.674032 0 -0.738702 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.691092 0 -0.722767 -0.820014 0 -0.572344 -0.820014 0 -0.572344 -0.691092 0 -0.722767 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.839742 0 -0.542985 0.674032 0 -0.738702 0.674032 0 -0.738702 0.839742 0 -0.542985 0.96415 0 -0.265358 0.948722 0 -0.316111 0.948722 0 -0.316111 0.96415 0 -0.265358 0.976861 0 -0.213874 0.96415 0 -0.265358 0.96415 0 -0.265358 0.976861 0 -0.213874 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.213874 3.05185e-005 -0.976861 -0.213874 3.05185e-005 -0.976861 -0.213874 3.05185e-005 -0.976861 -0.213874 3.05185e-005 -0.976861 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.976861 0 0.213874 -0.976861 0 0.213874 -0.976861 0 0.213874 -0.976861 0 0.213874 0.21897 0 -0.975731 -0.298196 0 -0.954505 -0.298196 0 -0.954505 0.21897 0 -0.975731 0.674032 0 -0.738702 0.21897 0 -0.975731 0.21897 0 -0.975731 0.674032 0 -0.738702 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.691092 0 -0.722767 -0.820014 0 -0.572344 -0.820014 0 -0.572344 -0.691092 0 -0.722767 -0.298196 0 -0.954505 -0.691092 0 -0.722767 -0.691092 0 -0.722767 -0.298196 0 -0.954505 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.839742 0 -0.542985 0.674032 0 -0.738702 0.674032 0 -0.738702 0.839742 0 -0.542985 -0.213874 -3.05185e-005 -0.976861 -0.213874 -3.05185e-005 -0.976861 -0.213874 -3.05185e-005 -0.976861 -0.213874 -3.05185e-005 -0.976861 0.976861 0 -0.213874 0.96415 0 -0.265358 0.96415 0 -0.265358 0.976861 0 -0.213874 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.96415 0 -0.265358 0.948722 0 -0.316111 0.948722 0 -0.316111 0.96415 0 -0.265358 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.976861 0 0.213874 -0.976861 0 0.213874 -0.976861 0 0.213874 -0.976861 0 0.213874 0.285806 0 0.958288 0.61037 0 0.792116 0.61037 0 0.792116 0.285806 0 0.958288 -0.219001 0 0.975725 0.285806 0 0.958288 0.285806 0 0.958288 -0.219001 0 0.975725 -0.677572 0 0.735456 -0.219001 0 0.975725 -0.219001 0 0.975725 -0.677572 0 0.735456 -0.942 0 0.335612 -0.677572 0 0.735456 -0.677572 0 0.735456 -0.942 0 0.335612 -0.999592 0 0.0285653 -0.942 0 0.335612 -0.942 0 0.335612 -0.999592 0 0.0285653 -0.989958 0 -0.141362 -0.999592 0 0.0285653 -0.999592 0 0.0285653 -0.989958 0 -0.141362 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.873428 0 0.486953 0.975731 0 0.21897 0.975731 0 0.21897 0.873428 0 0.486953 0.61037 0 0.792116 0.873428 0 0.486953 0.873428 0 0.486953 0.61037 0 0.792116 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.975731 0 -0.21897 -0.989958 0 -0.141362 -0.989958 0 -0.141362 -0.975731 0 -0.21897 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.883372 0 -0.468673 -0.530656 0 -0.847587 -0.530656 0 -0.847587 -0.883372 0 -0.468673 -0.99936 0 0.0357677 -0.883372 0 -0.468673 -0.883372 0 -0.468673 -0.99936 0 0.0357677 -0.847587 0 0.530656 -0.99936 0 0.0357677 -0.99936 0 0.0357677 -0.847587 0 0.530656 -0.468673 0 0.883372 -0.847587 0 0.530656 -0.847587 0 0.530656 -0.468673 0 0.883372 0.0357677 0 0.99936 -0.468673 0 0.883372 -0.468673 0 0.883372 0.0357677 0 0.99936 0.530656 0 0.847587 0.0357677 0 0.99936 0.0357677 0 0.99936 0.530656 0 0.847587 0.883372 0 0.468673 0.530656 0 0.847587 0.530656 0 0.847587 0.883372 0 0.468673 0.99936 0 -0.0357677 0.883372 0 0.468673 0.883372 0 0.468673 0.99936 0 -0.0357677 0.847587 0 -0.530656 0.99936 0 -0.0357677 0.99936 0 -0.0357677 0.847587 0 -0.530656 0.468673 0 -0.883372 0.847587 0 -0.530656 0.847587 0 -0.530656 0.468673 0 -0.883372 -0.0357677 0 -0.99936 0.468673 0 -0.883372 0.468673 0 -0.883372 -0.0357677 0 -0.99936 -0.530656 0 -0.847587 -0.0357677 0 -0.99936 -0.0357677 0 -0.99936 -0.530656 0 -0.847587 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.847587 0 -0.530656 0.468673 0 -0.883372 0.468673 0 -0.883372 0.847587 0 -0.530656 0.99936 0 -0.0357677 0.847587 0 -0.530656 0.847587 0 -0.530656 0.99936 0 -0.0357677 0.883372 0 0.468673 0.99936 0 -0.0357677 0.99936 0 -0.0357677 0.883372 0 0.468673 0.530656 0 0.847587 0.883372 0 0.468673 0.883372 0 0.468673 0.530656 0 0.847587 0.0357677 0 0.99936 0.530656 0 0.847587 0.530656 0 0.847587 0.0357677 0 0.99936 -0.468673 0 0.883372 0.0357677 0 0.99936 0.0357677 0 0.99936 -0.468673 0 0.883372 -0.847587 0 0.530656 -0.468673 0 0.883372 -0.468673 0 0.883372 -0.847587 0 0.530656 -0.99936 0 0.0357677 -0.847587 0 0.530656 -0.847587 0 0.530656 -0.99936 0 0.0357677 -0.883372 0 -0.468673 -0.99936 0 0.0357677 -0.99936 0 0.0357677 -0.883372 0 -0.468673 -0.530656 0 -0.847587 -0.883372 0 -0.468673 -0.883372 0 -0.468673 -0.530656 0 -0.847587 -0.0357677 0 -0.99936 -0.530656 0 -0.847587 -0.530656 0 -0.847587 -0.0357677 0 -0.99936 0.468673 0 -0.883372 -0.0357677 0 -0.99936 -0.0357677 0 -0.99936 0.468673 0 -0.883372 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.499985 0 -0.866034 0.866034 0 -0.499985 0.866034 0 -0.499985 0.499985 0 -0.866034 0 0 -1 0.499985 0 -0.866034 0.499985 0 -0.866034 0 0 -1 -0.499985 0 -0.866034 0 0 -1 0 0 -1 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -1 0 0 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -1 0 0 -0.866034 0 0.499985 -1 0 0 -1 0 0 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.499985 0 0.866034 0 0 1 -0.499985 0 0.866034 -0.499985 0 0.866034 0 0 1 0.499985 0 0.866034 0 0 1 0 0 1 0.499985 0 0.866034 0.866034 0 0.499985 0.499985 0 0.866034 0.499985 0 0.866034 0.866034 0 0.499985 1 0 0 0.866034 0 0.499985 0.866034 0 0.499985 1 0 0 0.866034 0 -0.499985 1 0 0 1 0 0 0.866034 0 -0.499985 + + + + + + + + + + + + + + +

0 0 1 1 2 2 3 3

+

4 4 5 5 6 6 7 7

+

8 8 9 9 10 10 11 11

+

12 12 13 13 14 14 15 15

+

16 16 17 17 18 18 19 19

+

20 20 21 21 22 22 23 23

+

24 24 25 25 26 26 27 27

+

28 28 29 29 30 30 31 31

+

32 32 33 33 34 34 35 35

+

36 36 37 37 38 38 39 39

+

40 40 41 41 42 42 43 43

+

44 44 45 45 46 46 47 47 48 48 49 49 50 50 51 51 52 52 53 53 54 54 55 55

+

56 56 57 57 58 58 59 59

+
+ + + +

60 60 61 61 62 62 63 63

+

64 64 65 65 66 66 67 67

+

68 68 69 69 70 70 71 71

+

72 72 73 73 74 74 75 75

+

76 76 77 77 78 78 79 79

+

80 80 81 81 82 82 83 83

+

84 84 85 85 86 86 87 87

+

88 88 89 89 90 90 91 91 92 92 93 93 94 94 95 95 96 96 97 97

+

98 98 99 99 100 100 101 101

+

102 102 103 103 104 104 105 105 106 106 107 107 108 108 109 109 110 110 111 111

+

112 112 113 113 114 114 115 115

+
+ + + +

116 116 117 117 118 118 119 119

+

120 120 121 121 122 122 123 123

+

124 124 125 125 126 126 127 127

+

128 128 129 129 130 130 131 131 132 132 133 133

+

134 134 135 135 136 136 137 137

+

138 138 139 139 140 140 141 141 142 142 143 143

+

144 144 145 145 146 146 147 147

+
+ + + +

148 148 149 149 150 150 151 151

+

152 152 153 153 154 154 155 155

+

156 156 157 157 158 158 159 159 160 160 161 161

+

162 162 163 163 164 164 165 165

+

166 166 167 167 168 168 169 169 170 170 171 171

+

172 172 173 173 174 174 175 175

+
+ + + +

176 176 177 177 178 178 179 179

+

180 180 181 181 182 182 183 183

+

184 184 185 185 186 186 187 187 188 188 189 189

+

190 190 191 191 192 192 193 193

+

194 194 195 195 196 196 197 197

+

198 198 199 199 200 200 201 201 202 202 203 203

+

204 204 205 205 206 206 207 207

+
+ + + +

208 208 209 209 210 210 211 211

+

212 212 213 213 214 214 215 215

+

216 216 217 217 218 218 219 219 220 220 221 221

+

222 222 223 223 224 224 225 225

+

226 226 227 227 228 228 229 229 230 230 231 231

+

232 232 233 233 234 234 235 235

+
+ + + +

236 236 237 237 238 238 239 239

+

240 240 241 241 242 242 243 243

+

244 244 245 245 246 246 247 247

+

248 248 249 249 250 250 251 251

+

252 252 253 253 254 254 255 255

+

256 256 257 257 258 258 259 259

+

260 260 261 261 262 262 263 263 264 264 265 265 266 266 267 267 268 268 269 269

+

270 270 271 271 272 272 273 273

+

274 274 275 275 276 276 277 277

+

278 278 279 279 280 280 281 281 282 282 283 283 284 284 285 285 286 286 287 287

+

288 288 289 289 290 290 291 291

+
+ + + +

292 292 293 293 294 294 295 295 296 296 297 297 298 298 299 299 300 300 301 301 302 302 303 303

+

304 304 305 305 306 306 307 307

+

308 308 309 309 310 310 311 311

+

312 312 313 313 314 314 315 315

+

316 316 317 317 318 318 319 319

+

320 320 321 321 322 322 323 323

+

324 324 325 325 326 326 327 327

+

328 328 329 329 330 330 331 331

+

332 332 333 333 334 334 335 335

+

336 336 337 337 338 338 339 339

+

340 340 341 341 342 342 343 343

+

344 344 345 345 346 346 347 347

+

348 348 349 349 350 350 351 351

+
+ + + +

352 352 353 353 354 354 355 355 356 356 357 357 358 358 359 359 360 360 361 361 362 362 363 363

+

364 364 365 365 366 366 367 367

+

368 368 369 369 370 370 371 371

+

372 372 373 373 374 374 375 375

+

376 376 377 377 378 378 379 379

+

380 380 381 381 382 382 383 383

+

384 384 385 385 386 386 387 387

+

388 388 389 389 390 390 391 391

+

392 392 393 393 394 394 395 395

+

396 396 397 397 398 398 399 399

+

400 400 401 401 402 402 403 403

+

404 404 405 405 406 406 407 407

+

408 408 409 409 410 410 411 411

+
+ + + +

412 412 413 413 414 414 415 415 416 416 417 417 418 418 419 419 420 420 421 421 422 422 423 423

+

424 424 425 425 426 426 427 427

+

428 428 429 429 430 430 431 431

+

432 432 433 433 434 434 435 435

+

436 436 437 437 438 438 439 439

+

440 440 441 441 442 442 443 443

+

444 444 445 445 446 446 447 447

+

448 448 449 449 450 450 451 451

+

452 452 453 453 454 454 455 455

+

456 456 457 457 458 458 459 459

+

460 460 461 461 462 462 463 463

+

464 464 465 465 466 466 467 467

+

468 468 469 469 470 470 471 471

+
+
+ + + CAT3DBagRep + + +
+ + + + -12.9904 382.5 7.5 -12.9904 372.5 7.5 -7.5 372.5 12.9904 -7.5 382.5 12.9904 -7.5 382.5 12.9904 -7.5 372.5 12.9904 0 372.5 15 0 382.5 15 0 382.5 15 0 372.5 15 7.5 372.5 12.9904 7.5 382.5 12.9904 7.5 382.5 12.9904 7.5 372.5 12.9904 12.9904 372.5 7.5 12.9904 382.5 7.5 12.9904 382.5 7.5 12.9904 372.5 7.5 15 372.5 0 15 382.5 0 12.9904 382.5 7.5 15 382.5 0 18 382.5 -15 -18 382.5 -15 -15 382.5 0 -12.9904 382.5 7.5 -7.5 382.5 12.9904 0 382.5 15 7.5 382.5 12.9904 18 382.5 -15 15 382.5 0 15 372.5 0 18 372.5 -15 -12.9904 372.5 7.5 -15 372.5 0 -18 372.5 -15 18 372.5 -15 15 372.5 0 12.9904 372.5 7.5 7.5 372.5 12.9904 0 372.5 15 -7.5 372.5 12.9904 -15 382.5 0 -15 372.5 0 -12.9904 372.5 7.5 -12.9904 382.5 7.5 -15 372.5 0 -15 382.5 0 -18 382.5 -15 -18 372.5 -15 -15 -382.5 0 -12.9904 -382.5 7.5 -12.9904 -372.5 7.5 -15 -372.5 0 -7.5 -382.5 12.9904 0 -382.5 15 0 -372.5 15 -7.5 -372.5 12.9904 0 -382.5 15 7.5 -382.5 12.9904 7.5 -372.5 12.9904 0 -372.5 15 18 -382.5 -15 18 -372.5 -15 15 -372.5 0 15 -382.5 0 12.9904 -382.5 7.5 15 -382.5 0 15 -372.5 0 12.9904 -372.5 7.5 7.5 -382.5 12.9904 12.9904 -382.5 7.5 12.9904 -372.5 7.5 7.5 -372.5 12.9904 12.9904 -382.5 7.5 7.5 -382.5 12.9904 0 -382.5 15 -7.5 -382.5 12.9904 -12.9904 -382.5 7.5 -15 -382.5 0 -18 -382.5 -15 18 -382.5 -15 15 -382.5 0 -12.9904 -382.5 7.5 -7.5 -382.5 12.9904 -7.5 -372.5 12.9904 -12.9904 -372.5 7.5 -12.9904 -372.5 7.5 -7.5 -372.5 12.9904 0 -372.5 15 7.5 -372.5 12.9904 12.9904 -372.5 7.5 15 -372.5 0 18 -372.5 -15 -18 -372.5 -15 -15 -372.5 0 -15 -372.5 0 -18 -372.5 -15 -18 -382.5 -15 -15 -382.5 0 -82.5 465 -15 -82.5 300 -15 82.5 300 -15 82.5 465 -15 -82.5 465 -65 82.5 465 -65 82.5 300 -65 -82.5 300 -65 -82.5 300 -15 -82.5 300 -65 82.5 300 -65 82.5 300 -15 82.5 300 -15 82.5 300 -65 82.5 465 -65 82.5 465 -15 82.5 465 -15 82.5 465 -65 -82.5 465 -65 -82.5 465 -15 -82.5 465 -15 -82.5 465 -65 -82.5 300 -65 -82.5 300 -15 75 382.5 -225 75 382.5 -65.0001 64.9519 345 -65.0001 64.9519 345 -225 64.9519 345 -225 64.9519 345 -65.0001 37.5 317.548 -65.0001 37.5 317.548 -225 37.5 317.548 -225 37.5 317.548 -65.0001 0 307.5 -65.0001 0 307.5 -225 0 307.5 -225 0 307.5 -65.0001 -37.5 317.548 -65.0001 -37.5 317.548 -225 -37.5 317.548 -225 -37.5 317.548 -65.0001 -64.9519 345 -65.0001 -64.9519 345 -225 -64.9519 345 -225 -64.9519 345 -65.0001 -75 382.5 -65.0001 -75 382.5 -225 -75 382.5 -225 -75 382.5 -65.0001 -64.9519 420 -65.0001 -64.9519 420 -225 -64.9519 420 -225 -64.9519 420 -65.0001 -37.5 447.452 -65.0001 -37.5 447.452 -225 -37.5 447.452 -225 -37.5 447.452 -65.0001 0 457.5 -65.0001 0 457.5 -225 0 457.5 -225 0 457.5 -65.0001 37.5 447.452 -65.0001 37.5 447.452 -225 37.5 447.452 -225 37.5 447.452 -65.0001 64.9519 420 -65.0001 64.9519 420 -225 64.9519 420 -225 64.9519 420 -65.0001 75 382.5 -65.0001 75 382.5 -225 -82.5 300 -275 -82.5 465 -275 82.5 465 -275 82.5 300 -275 -82.5 300 -225 82.5 300 -225 82.5 465 -225 -82.5 465 -225 -82.5 465 -275 -82.5 465 -225 82.5 465 -225 82.5 465 -275 82.5 465 -275 82.5 465 -225 82.5 300 -225 82.5 300 -275 82.5 300 -275 82.5 300 -225 -82.5 300 -225 -82.5 300 -275 -82.5 300 -275 -82.5 300 -225 -82.5 465 -225 -82.5 465 -275 82.5 -465 -275 82.5 -300 -275 82.5 -300 -225 82.5 -465 -225 -82.5 -465 -275 82.5 -465 -275 82.5 -465 -225 -82.5 -465 -225 -82.5 -300 -225 -82.5 -465 -225 82.5 -465 -225 82.5 -300 -225 82.5 -300 -275 -82.5 -300 -275 -82.5 -300 -225 82.5 -300 -225 -82.5 -300 -275 82.5 -300 -275 82.5 -465 -275 -82.5 -465 -275 -82.5 -300 -275 -82.5 -465 -275 -82.5 -465 -225 -82.5 -300 -225 37.5 -447.452 -225 64.9519 -420 -225 64.9519 -420 -65.0001 37.5 -447.452 -65.0001 0 -457.5 -225 37.5 -447.452 -225 37.5 -447.452 -65.0001 0 -457.5 -65.0001 -37.5 -447.452 -225 0 -457.5 -225 0 -457.5 -65.0001 -37.5 -447.452 -65.0001 -64.9519 -420 -225 -37.5 -447.452 -225 -37.5 -447.452 -65.0001 -64.9519 -420 -65.0001 -75 -382.5 -225 -64.9519 -420 -225 -64.9519 -420 -65.0001 -75 -382.5 -65.0001 -64.9519 -345 -225 -75 -382.5 -225 -75 -382.5 -65.0001 -64.9519 -345 -65.0001 -37.5 -317.548 -225 -64.9519 -345 -225 -64.9519 -345 -65.0001 -37.5 -317.548 -65.0001 0 -307.5 -225 -37.5 -317.548 -225 -37.5 -317.548 -65.0001 0 -307.5 -65.0001 37.5 -317.548 -225 0 -307.5 -225 0 -307.5 -65.0001 37.5 -317.548 -65.0001 64.9519 -345 -225 37.5 -317.548 -225 37.5 -317.548 -65.0001 64.9519 -345 -65.0001 75 -382.5 -225 64.9519 -345 -225 64.9519 -345 -65.0001 75 -382.5 -65.0001 64.9519 -420 -225 75 -382.5 -225 75 -382.5 -65.0001 64.9519 -420 -65.0001 82.5 -300 -15 82.5 -465 -15 82.5 -465 -65 82.5 -300 -65 -82.5 -300 -15 82.5 -300 -15 82.5 -300 -65 -82.5 -300 -65 -82.5 -465 -65 -82.5 -300 -65 82.5 -300 -65 82.5 -465 -65 82.5 -465 -15 -82.5 -465 -15 -82.5 -465 -65 82.5 -465 -65 -82.5 -465 -15 82.5 -465 -15 82.5 -300 -15 -82.5 -300 -15 -82.5 -465 -15 -82.5 -300 -15 -82.5 -300 -65 -82.5 -465 -65 + + + + + + + + + + -0.866034 0 0.499985 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 0 0 1 0 0 1 0 0 1 0 0 1 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.97376 0 0.227577 0.97376 0 0.227577 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.980582 0 0.196112 0.97376 0 0.227577 0.97376 0 0.227577 0.980582 0 0.196112 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.97376 0 0.227577 -0.97376 0 0.227577 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.97376 0 0.227577 -0.97376 0 0.227577 -0.980582 0 0.196112 -0.980582 0 0.196112 -0.97376 0 0.227577 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.97376 0 0.227577 -0.499985 0 0.866034 0 0 1 0 0 1 -0.499985 0 0.866034 0 0 1 0.499985 0 0.866034 0.499985 0 0.866034 0 0 1 0.980582 0 0.196112 0.980582 0 0.196112 0.97376 0 0.227577 0.97376 0 0.227577 0.866034 0 0.499985 0.97376 0 0.227577 0.97376 0 0.227577 0.866034 0 0.499985 0.499985 0 0.866034 0.866034 0 0.499985 0.866034 0 0.499985 0.499985 0 0.866034 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.866034 0 0.499985 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.97376 0 0.227577 -0.980582 0 0.196112 -0.980582 0 0.196112 -0.97376 0 0.227577 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 0 1 0 0 1 0 0 1 0 0 1 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 1 0 0 1 0 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0.499985 -0.866034 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.499985 -0.866034 0 0 -1 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0 -1 0 -0.499985 -0.866034 0 0 -1 0 0 -1 0 -0.499985 -0.866034 0 -0.866034 -0.499985 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.866034 -0.499985 0 -1 0 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -1 0 0 -0.866034 0.499985 0 -1 0 0 -1 0 0 -0.866034 0.499985 0 -0.499985 0.866034 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.499985 0.866034 0 0 1 0 -0.499985 0.866034 0 -0.499985 0.866034 0 0 1 0 0.499985 0.866034 0 0 1 0 0 1 0 0.499985 0.866034 0 0.866034 0.499985 0 0.499985 0.866034 0 0.499985 0.866034 0 0.866034 0.499985 0 1 0 0 0.866034 0.499985 0 0.866034 0.499985 0 1 0 0 0.866034 -0.499985 0 1 0 0 1 0 0 0.866034 -0.499985 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 + + + + + + + + + + + + + + +

0 0 1 1 2 2 3 3

+

4 4 5 5 6 6 7 7

+

8 8 9 9 10 10 11 11

+

12 12 13 13 14 14 15 15

+

16 16 17 17 18 18 19 19

+

20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28

+

29 29 30 30 31 31 32 32

+

33 33 34 34 35 35 36 36 37 37 38 38 39 39 40 40 41 41

+

42 42 43 43 44 44 45 45

+

46 46 47 47 48 48 49 49

+
+ + + +

50 50 51 51 52 52 53 53

+

54 54 55 55 56 56 57 57

+

58 58 59 59 60 60 61 61

+

62 62 63 63 64 64 65 65

+

66 66 67 67 68 68 69 69

+

70 70 71 71 72 72 73 73

+

74 74 75 75 76 76 77 77 78 78 79 79 80 80 81 81 82 82

+

83 83 84 84 85 85 86 86

+

87 87 88 88 89 89 90 90 91 91 92 92 93 93 94 94 95 95

+

96 96 97 97 98 98 99 99

+
+ + + +

100 100 101 101 102 102 103 103

+

104 104 105 105 106 106 107 107

+

108 108 109 109 110 110 111 111

+

112 112 113 113 114 114 115 115

+

116 116 117 117 118 118 119 119

+

120 120 121 121 122 122 123 123

+
+ + + +

124 124 125 125 126 126 127 127

+

128 128 129 129 130 130 131 131

+

132 132 133 133 134 134 135 135

+

136 136 137 137 138 138 139 139

+

140 140 141 141 142 142 143 143

+

144 144 145 145 146 146 147 147

+

148 148 149 149 150 150 151 151

+

152 152 153 153 154 154 155 155

+

156 156 157 157 158 158 159 159

+

160 160 161 161 162 162 163 163

+

164 164 165 165 166 166 167 167

+

168 168 169 169 170 170 171 171

+
+ + + +

172 172 173 173 174 174 175 175

+

176 176 177 177 178 178 179 179

+

180 180 181 181 182 182 183 183

+

184 184 185 185 186 186 187 187

+

188 188 189 189 190 190 191 191

+

192 192 193 193 194 194 195 195

+
+ + + +

196 196 197 197 198 198 199 199

+

200 200 201 201 202 202 203 203

+

204 204 205 205 206 206 207 207

+

208 208 209 209 210 210 211 211

+

212 212 213 213 214 214 215 215

+

216 216 217 217 218 218 219 219

+
+ + + +

220 220 221 221 222 222 223 223

+

224 224 225 225 226 226 227 227

+

228 228 229 229 230 230 231 231

+

232 232 233 233 234 234 235 235

+

236 236 237 237 238 238 239 239

+

240 240 241 241 242 242 243 243

+

244 244 245 245 246 246 247 247

+

248 248 249 249 250 250 251 251

+

252 252 253 253 254 254 255 255

+

256 256 257 257 258 258 259 259

+

260 260 261 261 262 262 263 263

+

264 264 265 265 266 266 267 267

+
+ + + +

268 268 269 269 270 270 271 271

+

272 272 273 273 274 274 275 275

+

276 276 277 277 278 278 279 279

+

280 280 281 281 282 282 283 283

+

284 284 285 285 286 286 287 287

+

288 288 289 289 290 290 291 291

+
+
+ + + CAT3DBagRep + + +
+ + + + 0 387.5 15 7.5 387.5 12.9904 12.9904 387.5 7.5 15 387.5 0 12.9904 387.5 -7.5 7.5 387.5 -12.9904 0 387.5 -15 -7.5 387.5 -12.9904 -12.9904 387.5 -7.5 -15 387.5 0 -12.9904 387.5 7.5 -7.5 387.5 12.9904 0 377.5 15 -7.5 377.5 12.9904 -12.9904 377.5 7.5 -15 377.5 0 -12.9904 377.5 -7.5 -7.5 377.5 -12.9904 0 377.5 -15 7.5 377.5 -12.9904 12.9904 377.5 -7.5 15 377.5 0 12.9904 377.5 7.5 7.5 377.5 12.9904 0 387.5 15 0 377.5 15 7.5 377.5 12.9904 7.5 387.5 12.9904 7.5 387.5 12.9904 7.5 377.5 12.9904 12.9904 377.5 7.5 12.9904 387.5 7.5 12.9904 387.5 7.5 12.9904 377.5 7.5 15 377.5 0 15 387.5 0 15 387.5 0 15 377.5 0 12.9904 377.5 -7.5 12.9904 387.5 -7.5 12.9904 387.5 -7.5 12.9904 377.5 -7.5 7.5 377.5 -12.9904 7.5 387.5 -12.9904 7.5 387.5 -12.9904 7.5 377.5 -12.9904 0 377.5 -15 0 387.5 -15 0 387.5 -15 0 377.5 -15 -7.5 377.5 -12.9904 -7.5 387.5 -12.9904 -7.5 387.5 -12.9904 -7.5 377.5 -12.9904 -12.9904 377.5 -7.5 -12.9904 387.5 -7.5 -12.9904 387.5 -7.5 -12.9904 377.5 -7.5 -15 377.5 0 -15 387.5 0 -15 387.5 0 -15 377.5 0 -12.9904 377.5 7.5 -12.9904 387.5 7.5 -12.9904 387.5 7.5 -12.9904 377.5 7.5 -7.5 377.5 12.9904 -7.5 387.5 12.9904 -7.5 387.5 12.9904 -7.5 377.5 12.9904 0 377.5 15 0 387.5 15 5 382.5 10 5 382.5 40 4.33013 380 40 4.33013 380 10 4.33013 380 10 4.33013 380 40 2.5 378.17 40 2.5 378.17 10 2.5 378.17 10 2.5 378.17 40 0 377.5 40 0 377.5 10 0 377.5 10 0 377.5 40 -2.5 378.17 40 -2.5 378.17 10 -2.5 378.17 10 -2.5 378.17 40 -4.33013 380 40 -4.33013 380 10 -4.33013 380 10 -4.33013 380 40 -5 382.5 40 -5 382.5 10 -5 382.5 10 -5 382.5 40 -4.33013 385 40 -4.33013 385 10 -4.33013 385 10 -4.33013 385 40 -2.5 386.83 40 -2.5 386.83 10 -2.5 386.83 10 -2.5 386.83 40 0 387.5 40 0 387.5 10 0 387.5 10 0 387.5 40 2.5 386.83 40 2.5 386.83 10 2.5 386.83 10 2.5 386.83 40 4.33013 385 40 4.33013 385 10 4.33013 385 10 4.33013 385 40 5 382.5 40 5 382.5 10 20 382.5 40 17.3205 372.5 40 10 365.18 40 0 362.5 40 -10 365.18 40 -17.3205 372.5 40 -20 382.5 40 -17.3205 392.5 40 -10 399.82 40 0 402.5 40 10 399.82 40 17.3205 392.5 40 20 382.5 40 20 382.5 290 17.3205 372.5 290 17.3205 372.5 40 17.3205 372.5 40 17.3205 372.5 290 10 365.18 290 10 365.18 40 10 365.18 40 10 365.18 290 0 362.5 290 0 362.5 40 0 362.5 40 0 362.5 290 -10 365.18 290 -10 365.18 40 -10 365.18 40 -10 365.18 290 -17.3205 372.5 290 -17.3205 372.5 40 -17.3205 372.5 40 -17.3205 372.5 290 -20 382.5 290 -20 382.5 40 -20 382.5 40 -20 382.5 290 -17.3205 392.5 290 -17.3205 392.5 40 -17.3205 392.5 40 -17.3205 392.5 290 -10 399.82 290 -10 399.82 40 -10 399.82 40 -10 399.82 290 0 402.5 290 0 402.5 40 0 402.5 40 0 402.5 290 10 399.82 290 10 399.82 40 10 399.82 40 10 399.82 290 17.3205 392.5 290 17.3205 392.5 40 17.3205 392.5 40 17.3205 392.5 290 20 382.5 290 20 382.5 40 20 -382.5 40 17.3205 -372.5 40 17.3205 -372.5 290 20 -382.5 290 17.3205 -372.5 40 10 -365.18 40 10 -365.18 290 17.3205 -372.5 290 10 -365.18 40 0 -362.5 40 0 -362.5 290 10 -365.18 290 0 -362.5 40 -10 -365.18 40 -10 -365.18 290 0 -362.5 290 -10 -365.18 40 -17.3205 -372.5 40 -17.3205 -372.5 290 -10 -365.18 290 -17.3205 -372.5 40 -20 -382.5 40 -20 -382.5 290 -17.3205 -372.5 290 -20 -382.5 40 -17.3205 -392.5 40 -17.3205 -392.5 290 -20 -382.5 290 -17.3205 -392.5 40 -10 -399.82 40 -10 -399.82 290 -17.3205 -392.5 290 -10 -399.82 40 0 -402.5 40 0 -402.5 290 -10 -399.82 290 0 -402.5 40 10 -399.82 40 10 -399.82 290 0 -402.5 290 10 -399.82 40 17.3205 -392.5 40 17.3205 -392.5 290 10 -399.82 290 20 -382.5 40 17.3205 -392.5 40 10 -399.82 40 0 -402.5 40 -10 -399.82 40 -17.3205 -392.5 40 -20 -382.5 40 -17.3205 -372.5 40 -10 -365.18 40 0 -362.5 40 10 -365.18 40 17.3205 -372.5 40 17.3205 -392.5 40 20 -382.5 40 20 -382.5 290 17.3205 -392.5 290 2.5 -386.83 10 4.33013 -385 10 4.33013 -385 40 2.5 -386.83 40 0 -387.5 10 2.5 -386.83 10 2.5 -386.83 40 0 -387.5 40 -2.5 -386.83 10 0 -387.5 10 0 -387.5 40 -2.5 -386.83 40 -4.33013 -385 10 -2.5 -386.83 10 -2.5 -386.83 40 -4.33013 -385 40 -5 -382.5 10 -4.33013 -385 10 -4.33013 -385 40 -5 -382.5 40 -4.33013 -380 10 -5 -382.5 10 -5 -382.5 40 -4.33013 -380 40 -2.5 -378.17 10 -4.33013 -380 10 -4.33013 -380 40 -2.5 -378.17 40 0 -377.5 10 -2.5 -378.17 10 -2.5 -378.17 40 0 -377.5 40 2.5 -378.17 10 0 -377.5 10 0 -377.5 40 2.5 -378.17 40 4.33013 -380 10 2.5 -378.17 10 2.5 -378.17 40 4.33013 -380 40 5 -382.5 10 4.33013 -380 10 4.33013 -380 40 5 -382.5 40 4.33013 -385 10 5 -382.5 10 5 -382.5 40 4.33013 -385 40 -15 -387.5 0 -12.9904 -387.5 7.5 -12.9904 -377.5 7.5 -15 -377.5 0 -12.9904 -387.5 -7.5 -15 -387.5 0 -15 -377.5 0 -12.9904 -377.5 -7.5 -7.5 -387.5 -12.9904 -12.9904 -387.5 -7.5 -12.9904 -377.5 -7.5 -7.5 -377.5 -12.9904 0 -387.5 -15 -7.5 -387.5 -12.9904 -7.5 -377.5 -12.9904 0 -377.5 -15 7.5 -387.5 -12.9904 0 -387.5 -15 0 -377.5 -15 7.5 -377.5 -12.9904 12.9904 -387.5 -7.5 7.5 -387.5 -12.9904 7.5 -377.5 -12.9904 12.9904 -377.5 -7.5 15 -387.5 0 12.9904 -387.5 -7.5 12.9904 -377.5 -7.5 15 -377.5 0 12.9904 -387.5 7.5 15 -387.5 0 15 -377.5 0 12.9904 -377.5 7.5 7.5 -387.5 12.9904 12.9904 -387.5 7.5 12.9904 -377.5 7.5 7.5 -377.5 12.9904 0 -387.5 15 7.5 -387.5 12.9904 7.5 -377.5 12.9904 0 -377.5 15 0 -377.5 15 7.5 -377.5 12.9904 12.9904 -377.5 7.5 15 -377.5 0 12.9904 -377.5 -7.5 7.5 -377.5 -12.9904 0 -377.5 -15 -7.5 -377.5 -12.9904 -12.9904 -377.5 -7.5 -15 -377.5 0 -12.9904 -377.5 7.5 -7.5 -377.5 12.9904 -12.9904 -387.5 7.5 -7.5 -387.5 12.9904 -7.5 -377.5 12.9904 -12.9904 -377.5 7.5 0 -387.5 15 -7.5 -387.5 12.9904 -12.9904 -387.5 7.5 -15 -387.5 0 -12.9904 -387.5 -7.5 -7.5 -387.5 -12.9904 0 -387.5 -15 7.5 -387.5 -12.9904 12.9904 -387.5 -7.5 15 -387.5 0 12.9904 -387.5 7.5 7.5 -387.5 12.9904 -7.5 -387.5 12.9904 0 -387.5 15 0 -377.5 15 -7.5 -377.5 12.9904 + + + + + + + + + + 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 1 0 0 1 0 0 1 0 0 1 0 0 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 0 0 1 0 0 1 1 0 0 1 0 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 0 1 0 0 1 0 0 1 0 0 1 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 1 0 0 1 0 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 1 0 0 1 0 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 0 1 0 0 1 0 0 1 0 0 1 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 1 0 0 1 0 0 1 0 0 0.866034 0.499985 0 0.866034 0.499985 0 1 0 0 0.866034 0.499985 0 0.499985 0.866034 0 0.499985 0.866034 0 0.866034 0.499985 0 0.499985 0.866034 0 0 1 0 0 1 0 0.499985 0.866034 0 0 1 0 -0.499985 0.866034 0 -0.499985 0.866034 0 0 1 0 -0.499985 0.866034 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.499985 0.866034 0 -0.866034 0.499985 0 -1 0 0 -1 0 0 -0.866034 0.499985 0 -1 0 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -1 0 0 -0.866034 -0.499985 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.866034 -0.499985 0 -0.499985 -0.866034 0 0 -1 0 0 -1 0 -0.499985 -0.866034 0 0 -1 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0 -1 0 0.499985 -0.866034 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.499985 -0.866034 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0.866034 -0.499985 0 1 0 0 1 0 0 0.866034 -0.499985 0 0.499985 -0.866034 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.499985 -0.866034 0 0 -1 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0 -1 0 -0.499985 -0.866034 0 0 -1 0 0 -1 0 -0.499985 -0.866034 0 -0.866034 -0.499985 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.866034 -0.499985 0 -1 0 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -1 0 0 -0.866034 0.499985 0 -1 0 0 -1 0 0 -0.866034 0.499985 0 -0.499985 0.866034 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.499985 0.866034 0 0 1 0 -0.499985 0.866034 0 -0.499985 0.866034 0 0 1 0 0.499985 0.866034 0 0 1 0 0 1 0 0.499985 0.866034 0 0.866034 0.499985 0 0.499985 0.866034 0 0.499985 0.866034 0 0.866034 0.499985 0 1 0 0 0.866034 0.499985 0 0.866034 0.499985 0 1 0 0 0.866034 -0.499985 0 1 0 0 1 0 0 0.866034 -0.499985 0 -1 0 0 -0.866034 0 0.499985 -0.866034 0 0.499985 -1 0 0 -0.866034 0 -0.499985 -1 0 0 -1 0 0 -0.866034 0 -0.499985 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.499985 0 -0.866034 0 0 -1 -0.499985 0 -0.866034 -0.499985 0 -0.866034 0 0 -1 0.499985 0 -0.866034 0 0 -1 0 0 -1 0.499985 0 -0.866034 0.866034 0 -0.499985 0.499985 0 -0.866034 0.499985 0 -0.866034 0.866034 0 -0.499985 1 0 0 0.866034 0 -0.499985 0.866034 0 -0.499985 1 0 0 0.866034 0 0.499985 1 0 0 1 0 0 0.866034 0 0.499985 0.499985 0 0.866034 0.866034 0 0.499985 0.866034 0 0.499985 0.499985 0 0.866034 0 0 1 0.499985 0 0.866034 0.499985 0 0.866034 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.866034 0 0.499985 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.499985 0 0.866034 0 0 1 0 0 1 -0.499985 0 0.866034 + + + + + + + + + + + + + + +

0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11

+

12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23

+

24 24 25 25 26 26 27 27

+

28 28 29 29 30 30 31 31

+

32 32 33 33 34 34 35 35

+

36 36 37 37 38 38 39 39

+

40 40 41 41 42 42 43 43

+

44 44 45 45 46 46 47 47

+

48 48 49 49 50 50 51 51

+

52 52 53 53 54 54 55 55

+

56 56 57 57 58 58 59 59

+

60 60 61 61 62 62 63 63

+

64 64 65 65 66 66 67 67

+

68 68 69 69 70 70 71 71

+
+ + + +

72 72 73 73 74 74 75 75

+

76 76 77 77 78 78 79 79

+

80 80 81 81 82 82 83 83

+

84 84 85 85 86 86 87 87

+

88 88 89 89 90 90 91 91

+

92 92 93 93 94 94 95 95

+

96 96 97 97 98 98 99 99

+

100 100 101 101 102 102 103 103

+

104 104 105 105 106 106 107 107

+

108 108 109 109 110 110 111 111

+

112 112 113 113 114 114 115 115

+

116 116 117 117 118 118 119 119

+
+ + + +

120 120 121 121 122 122 123 123 124 124 125 125 126 126 127 127 128 128 129 129 130 130 131 131

+

132 132 133 133 134 134 135 135

+

136 136 137 137 138 138 139 139

+

140 140 141 141 142 142 143 143

+

144 144 145 145 146 146 147 147

+

148 148 149 149 150 150 151 151

+

152 152 153 153 154 154 155 155

+

156 156 157 157 158 158 159 159

+

160 160 161 161 162 162 163 163

+

164 164 165 165 166 166 167 167

+

168 168 169 169 170 170 171 171

+

172 172 173 173 174 174 175 175

+

176 176 177 177 178 178 179 179

+
+ + + +

180 180 181 181 182 182 183 183

+

184 184 185 185 186 186 187 187

+

188 188 189 189 190 190 191 191

+

192 192 193 193 194 194 195 195

+

196 196 197 197 198 198 199 199

+

200 200 201 201 202 202 203 203

+

204 204 205 205 206 206 207 207

+

208 208 209 209 210 210 211 211

+

212 212 213 213 214 214 215 215

+

216 216 217 217 218 218 219 219

+

220 220 221 221 222 222 223 223

+

224 224 225 225 226 226 227 227 228 228 229 229 230 230 231 231 232 232 233 233 234 234 235 235

+

236 236 237 237 238 238 239 239

+
+ + + +

240 240 241 241 242 242 243 243

+

244 244 245 245 246 246 247 247

+

248 248 249 249 250 250 251 251

+

252 252 253 253 254 254 255 255

+

256 256 257 257 258 258 259 259

+

260 260 261 261 262 262 263 263

+

264 264 265 265 266 266 267 267

+

268 268 269 269 270 270 271 271

+

272 272 273 273 274 274 275 275

+

276 276 277 277 278 278 279 279

+

280 280 281 281 282 282 283 283

+

284 284 285 285 286 286 287 287

+
+ + + +

288 288 289 289 290 290 291 291

+

292 292 293 293 294 294 295 295

+

296 296 297 297 298 298 299 299

+

300 300 301 301 302 302 303 303

+

304 304 305 305 306 306 307 307

+

308 308 309 309 310 310 311 311

+

312 312 313 313 314 314 315 315

+

316 316 317 317 318 318 319 319

+

320 320 321 321 322 322 323 323

+

324 324 325 325 326 326 327 327

+

328 328 329 329 330 330 331 331 332 332 333 333 334 334 335 335 336 336 337 337 338 338 339 339

+

340 340 341 341 342 342 343 343

+

344 344 345 345 346 346 347 347 348 348 349 349 350 350 351 351 352 352 353 353 354 354 355 355

+

356 356 357 357 358 358 359 359

+
+
+ + + CAT3DBagRep + + +
+ + + + -125 62.5 125 -125 125 62.5 -135 125 62.5 -135 62.5 125 -125 125 62.5 -125 125 -62.5 -135 125 -62.5 -135 125 62.5 -125 125 -62.5 -125 62.5 -125 -135 62.5 -125 -135 125 -62.5 -125 62.5 -125 -125 -62.5 -125 -135 -62.5 -125 -135 62.5 -125 -125 -62.5 -125 -125 -125 -62.5 -135 -125 -62.5 -135 -62.5 -125 -125 -125 -62.5 -125 -125 62.5 -135 -125 62.5 -135 -125 -62.5 -125 -125 62.5 -125 -62.5 125 -135 -62.5 125 -135 -125 62.5 -125 -62.5 125 -125 -125 62.5 -125 -125 -62.5 -125 -62.5 -125 -125 62.5 -125 -125 125 -62.5 -125 125 62.5 -125 62.5 125 -125 -62.5 125 -125 62.5 125 -135 62.5 125 -135 -62.5 125 -135 -125 62.5 -135 -62.5 125 -175 -62.5 125 -175 -125 62.5 -135 -125 -62.5 -135 -125 62.5 -175 -125 62.5 -175 -125 -62.5 -135 -62.5 -125 -135 -125 -62.5 -175 -125 -62.5 -175 -62.5 -125 -135 62.5 -125 -135 -62.5 -125 -175 -62.5 -125 -175 62.5 -125 -135 125 -62.5 -135 62.5 -125 -175 62.5 -125 -175 125 -62.5 -135 125 62.5 -135 125 -62.5 -175 125 -62.5 -175 125 62.5 -135 62.5 125 -135 125 62.5 -175 125 62.5 -175 62.5 125 -135 -62.5 125 -135 62.5 125 -175 62.5 125 -175 -62.5 125 -175 -125 -110 -175 -125 110 -295 -125 110 -295 -125 -110 -175 -110 -125 -175 -125 -110 -295 -125 -110 -295 -110 -125 -175 110 -125 -175 -110 -125 -295 -110 -125 -295 110 -125 -175 125 -110 -175 110 -125 -295 110 -125 -295 125 -110 -175 125 110 -175 125 -110 -295 125 -110 -295 125 110 -175 110 125 -175 125 110 -295 125 110 -295 110 125 -295 -110 125 -295 110 125 -295 125 110 -295 125 -110 -295 110 -125 -295 -110 -125 -295 -125 -110 -295 -125 110 -175 -125 110 -175 -110 125 -295 -110 125 -295 -125 110 -175 -110 125 -175 -125 110 -175 -125 -110 -175 -110 -125 -175 110 -125 -175 125 -110 -175 125 110 -175 110 125 -175 -110 125 -175 110 125 -295 110 125 -295 -110 125 -350 -91.5064 -91.5063 -350 -125 -33.4937 -350 -125 33.4936 -350 -91.5064 91.5064 -350 -33.4937 125 -350 33.4937 125 -350 91.5063 91.5064 -350 125 33.4936 -350 125 -33.4936 -350 91.5064 -91.5063 -350 33.4936 -125 -350 -33.4937 -125 -295 91.5064 -91.5063 -295 33.4936 -125 -350 33.4936 -125 -350 91.5064 -91.5063 -295 125 -33.4936 -295 91.5064 -91.5063 -350 91.5064 -91.5063 -350 125 -33.4936 -295 125 33.4936 -295 125 -33.4936 -350 125 -33.4936 -350 125 33.4936 -295 91.5063 91.5064 -295 125 33.4936 -350 125 33.4936 -350 91.5063 91.5064 -295 33.4937 125 -295 91.5063 91.5064 -350 91.5063 91.5064 -350 33.4937 125 -295 -33.4937 125 -295 33.4937 125 -350 33.4937 125 -350 -33.4937 125 -295 -91.5064 91.5064 -295 -33.4937 125 -350 -33.4937 125 -350 -91.5064 91.5064 -295 -125 33.4936 -295 -91.5064 91.5064 -350 -91.5064 91.5064 -350 -125 33.4936 -295 -125 -33.4937 -295 -125 33.4936 -350 -125 33.4936 -350 -125 -33.4937 -295 -91.5064 -91.5063 -295 -125 -33.4937 -350 -125 -33.4937 -350 -91.5064 -91.5063 -295 -33.4937 -125 -295 -91.5064 -91.5063 -350 -91.5064 -91.5063 -350 -33.4937 -125 -295 33.4936 -125 -295 -33.4937 -125 -350 -33.4937 -125 -350 33.4936 -125 -360 -30 -51.9615 -360 -51.9615 -30 -360 -60 0 -360 -51.9615 30 -360 -30 51.9615 -360 0 60 -360 30 51.9615 -360 51.9615 30 -360 60 0 -360 51.9615 -30 -360 30 -51.9615 -360 0 -60 -350 51.9615 -30 -350 30 -51.9615 -360 30 -51.9615 -360 51.9615 -30 -350 60 0 -350 51.9615 -30 -360 51.9615 -30 -360 60 0 -350 51.9615 30 -350 60 0 -360 60 0 -360 51.9615 30 -350 30 51.9615 -350 51.9615 30 -360 51.9615 30 -360 30 51.9615 -350 0 60 -350 30 51.9615 -360 30 51.9615 -360 0 60 -350 -30 51.9615 -350 0 60 -360 0 60 -360 -30 51.9615 -350 -51.9615 30 -350 -30 51.9615 -360 -30 51.9615 -360 -51.9615 30 -350 -60 0 -350 -51.9615 30 -360 -51.9615 30 -360 -60 0 -350 -51.9615 -30 -350 -60 0 -360 -60 0 -360 -51.9615 -30 -350 -30 -51.9615 -350 -51.9615 -30 -360 -51.9615 -30 -360 -30 -51.9615 -350 0 -60 -350 -30 -51.9615 -360 -30 -51.9615 -360 0 -60 -350 30 -51.9615 -350 0 -60 -360 0 -60 -360 30 -51.9615 145 -70 -80 145 70 -80 145 70 60 145 -70 60 145 70 60 75 70 60 75 -70 60 145 -70 60 145 70 -80 75 70 -80 75 70 60 145 70 60 75 70 -80 145 70 -80 145 -70 -80 75 -70 -80 75 -70 -80 145 -70 -80 145 -70 60 75 -70 60 75 -100 -80 75 100 -80 75 100 80 75 -100 80 -125 100 80 -125 -100 80 75 -100 80 75 100 80 75 100 -80 -125 100 -80 -125 100 80 75 100 80 -125 100 -80 75 100 -80 75 -100 -80 -125 -100 -80 -125 -100 -80 75 -100 -80 75 -100 80 -125 -100 80 145 30 50 145 -30 50 945 -30 50 945 30 50 945 30 -30 145 30 -30 145 30 50 945 30 50 145 30 -30 945 30 -30 945 -30 -30 145 -30 -30 145 -30 -30 945 -30 -30 945 -30 50 145 -30 50 945 -30 50 945 -30 -30 945 30 -30 945 30 50 145 -25 -80 145 25 -80 945 -25 -30 945 -25 70 945 -25 70 945 25 -30 945 25 70 945 25 70 975 -25 -80 975 -25 -80 975 -25 70 975 -25 70 975 25 -80 975 25 -80 975 25 70 975 25 70 145 -25 -30 145 25 -30 + + + + + + + + + + 0 0.382672 0.923884 0 0.923884 0.382672 0 0.923884 0.382672 0 0.382672 0.923884 0 0.923884 0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 0.382672 0 0.923884 -0.382672 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.923884 -0.382672 0 0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.382672 -0.923884 0 -0.923884 -0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 -0.382672 0 -0.923884 0.382672 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.923884 0.382672 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 -0.382672 0.923884 0 -0.923884 0.382672 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.923884 0.382672 0 -0.923884 -0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 -0.382672 0 -0.382672 -0.923884 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.382672 -0.923884 0 0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 0.382672 -0.923884 0 0.923884 -0.382672 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.923884 -0.382672 0 0.923884 0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 0.382672 0 0.382672 0.923884 0 0.923884 0.382672 0 0.923884 0.382672 0 0.382672 0.923884 0 -0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 -0.382672 0.923884 0 -0.923884 -0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 -0.382672 0 -0.382672 -0.923884 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.382672 -0.923884 0 0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 0.382672 -0.923884 0 0.923884 -0.382672 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.923884 -0.382672 0 0.923884 0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 0.382672 0 0.382672 0.923884 0 0.923884 0.382672 0 0.923884 0.382672 0 0.382672 0.923884 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -0.923884 0.382672 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.923884 0.382672 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 -0.382672 0.923884 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.70713 -0.707083 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0.70713 -0.707083 0 0.965932 -0.258797 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.965932 -0.258797 0 0.965932 0.258797 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.965932 0.258797 0 0.707083 0.70713 0 0.965932 0.258797 0 0.965932 0.258797 0 0.707083 0.70713 0 0.258797 0.965932 0 0.707083 0.70713 0 0.707083 0.70713 0 0.258797 0.965932 0 -0.258797 0.965932 0 0.258797 0.965932 0 0.258797 0.965932 0 -0.258797 0.965932 0 -0.70713 0.707083 0 -0.258797 0.965932 0 -0.258797 0.965932 0 -0.70713 0.707083 0 -0.965932 0.258797 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.965932 0.258797 0 -0.965932 -0.258797 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.965932 -0.258797 0 -0.707083 -0.70713 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.707083 -0.70713 0 -0.258797 -0.965932 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.258797 -0.965932 0 0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 0.258797 -0.965932 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.866034 -0.499985 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.866034 -0.499985 0 1 0 0 0.866034 -0.499985 0 0.866034 -0.499985 0 1 0 0 0.866034 0.499985 0 1 0 0 1 0 0 0.866034 0.499985 0 0.499985 0.866034 0 0.866034 0.499985 0 0.866034 0.499985 0 0.499985 0.866034 0 0 1 0 0.499985 0.866034 0 0.499985 0.866034 0 0 1 0 -0.499985 0.866034 0 0 1 0 0 1 0 -0.499985 0.866034 0 -0.866034 0.499985 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.866034 0.499985 0 -1 0 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -1 0 0 -0.866034 -0.499985 0 -1 0 0 -1 0 0 -0.866034 -0.499985 0 -0.499985 -0.866034 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.499985 -0.866034 0 0 -1 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 0 -1 0 0.499985 -0.866034 0 0 -1 0 0 -1 0 0.499985 -0.866034 1 0 0 1 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 -1 0 0 -1 -1 0 0 -1 0 0 0 0 1 -1 0 0 -1 0 0 0 0 1 0 0 -1 1 0 0 0 0 1 1 0 0 0 0 -1 1 0 0 0 0 1 1 0 0 0 1 0 0 -1 0 + + + + + + + + + + + + + + +

0 0 1 1 2 2 3 3

+

4 4 5 5 6 6 7 7

+

8 8 9 9 10 10 11 11

+

12 12 13 13 14 14 15 15

+

16 16 17 17 18 18 19 19

+

20 20 21 21 22 22 23 23

+

24 24 25 25 26 26 27 27

+

28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35

+

36 36 37 37 38 38 39 39

+
+ + + +

40 40 41 41 42 42 43 43

+

44 44 45 45 46 46 47 47

+

48 48 49 49 50 50 51 51

+

52 52 53 53 54 54 55 55

+

56 56 57 57 58 58 59 59

+

60 60 61 61 62 62 63 63

+

64 64 65 65 66 66 67 67

+

68 68 69 69 70 70 71 71

+
+ + + +

72 72 73 73 74 74 75 75

+

76 76 77 77 78 78 79 79

+

80 80 81 81 82 82 83 83

+

84 84 85 85 86 86 87 87

+

88 88 89 89 90 90 91 91

+

92 92 93 93 94 94 95 95

+

96 96 97 97 98 98 99 99 100 100 101 101 102 102 103 103

+

104 104 105 105 106 106 107 107

+

108 108 109 109 110 110 111 111 112 112 113 113 114 114 115 115

+

116 116 117 117 118 118 119 119

+
+ + + +

120 120 121 121 122 122 123 123 124 124 125 125 126 126 127 127 128 128 129 129 130 130 131 131

+

132 132 133 133 134 134 135 135

+

136 136 137 137 138 138 139 139

+

140 140 141 141 142 142 143 143

+

144 144 145 145 146 146 147 147

+

148 148 149 149 150 150 151 151

+

152 152 153 153 154 154 155 155

+

156 156 157 157 158 158 159 159

+

160 160 161 161 162 162 163 163

+

164 164 165 165 166 166 167 167

+

168 168 169 169 170 170 171 171

+

172 172 173 173 174 174 175 175

+

176 176 177 177 178 178 179 179

+
+ + + +

180 180 181 181 182 182 183 183 184 184 185 185 186 186 187 187 188 188 189 189 190 190 191 191

+

192 192 193 193 194 194 195 195

+

196 196 197 197 198 198 199 199

+

200 200 201 201 202 202 203 203

+

204 204 205 205 206 206 207 207

+

208 208 209 209 210 210 211 211

+

212 212 213 213 214 214 215 215

+

216 216 217 217 218 218 219 219

+

220 220 221 221 222 222 223 223

+

224 224 225 225 226 226 227 227

+

228 228 229 229 230 230 231 231

+

232 232 233 233 234 234 235 235

+

236 236 237 237 238 238 239 239

+
+ + + +

240 240 241 241 242 242 243 243

+

244 244 245 245 246 246 247 247

+

248 248 249 249 250 250 251 251

+

252 252 253 253 254 254 255 255

+

256 256 257 257 258 258 259 259

+
+ + + +

260 260 261 261 262 262 263 263

+

264 264 265 265 266 266 267 267

+

268 268 269 269 270 270 271 271

+

272 272 273 273 274 274 275 275

+

276 276 277 277 278 278 279 279

+
+ + + +

280 280 281 281 282 282 283 283

+

284 284 285 285 286 286 287 287

+

288 288 289 289 290 290 291 291

+

292 292 293 293 294 294 295 295

+

296 296 297 297 298 298 299 299

+
+ + + +

305 316 307 316 315 316 313 316

+

317 316 305 316 313 316 301 316

+
+ + + +

316 317 300 317 309 317 302 317

+

302 317 309 317 311 317 304 317

+
+ + + +

312 312 308 308 300 300 301 301

+

315 315 311 311 309 309 313 313

+

307 307 304 304 310 310 314 314

+

305 305 302 302 303 303 306 306

+
+
+ + + CAT3DBagRep + + +
+ + + + 75 -50 -28.75 75 50 -28.75 75 50 61.25 75 -50 61.25 -75 -50 -28.75 75 -50 -28.75 75 -50 61.25 -75 -50 61.25 -75 50 61.25 -75 -50 61.25 75 -50 61.25 75 50 61.25 75 50 -28.75 -75 50 -28.75 -75 50 61.25 75 50 61.25 -75 50 -28.75 75 50 -28.75 75 -50 -28.75 -75 -50 -28.75 -75 50 -28.75 -75 -50 -28.75 -75 -50 61.25 -75 50 61.25 + + + + + + + + + + 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 + + + + + + + + + + + + + + +

0 0 1 1 2 2 3 3

+

4 4 5 5 6 6 7 7

+

8 8 9 9 10 10 11 11

+

12 12 13 13 14 14 15 15

+

16 16 17 17 18 18 19 19

+

20 20 21 21 22 22 23 23

+
+
+ + + CAT3DBagRep + + +
+ + + + -125 62.5 125 -125 125 62.5 -135 125 62.5 -135 62.5 125 -125 125 62.5 -125 125 -62.5 -135 125 -62.5 -135 125 62.5 -125 125 -62.5 -125 62.5 -125 -135 62.5 -125 -135 125 -62.5 -125 62.5 -125 -125 -62.5 -125 -135 -62.5 -125 -135 62.5 -125 -125 -62.5 -125 -125 -125 -62.5 -135 -125 -62.5 -135 -62.5 -125 -125 -125 -62.5 -125 -125 62.5 -135 -125 62.5 -135 -125 -62.5 -125 -125 62.5 -125 -62.5 125 -135 -62.5 125 -135 -125 62.5 -125 -62.5 125 -125 -125 62.5 -125 -125 -62.5 -125 -62.5 -125 -125 62.5 -125 -125 125 -62.5 -125 125 62.5 -125 62.5 125 -125 -62.5 125 -125 62.5 125 -135 62.5 125 -135 -62.5 125 -135 -125 62.5 -135 -62.5 125 -175 -62.5 125 -175 -125 62.5 -135 -125 -62.5 -135 -125 62.5 -175 -125 62.5 -175 -125 -62.5 -135 -62.5 -125 -135 -125 -62.5 -175 -125 -62.5 -175 -62.5 -125 -135 62.5 -125 -135 -62.5 -125 -175 -62.5 -125 -175 62.5 -125 -135 125 -62.5 -135 62.5 -125 -175 62.5 -125 -175 125 -62.5 -135 125 62.5 -135 125 -62.5 -175 125 -62.5 -175 125 62.5 -135 62.5 125 -135 125 62.5 -175 125 62.5 -175 62.5 125 -135 -62.5 125 -135 62.5 125 -175 62.5 125 -175 -62.5 125 -175 -125 -110 -175 -125 110 -295 -125 110 -295 -125 -110 -175 -110 -125 -175 -125 -110 -295 -125 -110 -295 -110 -125 -175 110 -125 -175 -110 -125 -295 -110 -125 -295 110 -125 -175 125 -110 -175 110 -125 -295 110 -125 -295 125 -110 -175 125 110 -175 125 -110 -295 125 -110 -295 125 110 -175 110 125 -175 125 110 -295 125 110 -295 110 125 -295 -110 125 -295 110 125 -295 125 110 -295 125 -110 -295 110 -125 -295 -110 -125 -295 -125 -110 -295 -125 110 -175 -125 110 -175 -110 125 -295 -110 125 -295 -125 110 -175 -110 125 -175 -125 110 -175 -125 -110 -175 -110 -125 -175 110 -125 -175 125 -110 -175 125 110 -175 110 125 -175 -110 125 -175 110 125 -295 110 125 -295 -110 125 -350 -91.5064 -91.5063 -350 -125 -33.4937 -350 -125 33.4936 -350 -91.5064 91.5064 -350 -33.4937 125 -350 33.4937 125 -350 91.5063 91.5064 -350 125 33.4936 -350 125 -33.4936 -350 91.5064 -91.5063 -350 33.4936 -125 -350 -33.4937 -125 -295 91.5064 -91.5063 -295 33.4936 -125 -350 33.4936 -125 -350 91.5064 -91.5063 -295 125 -33.4936 -295 91.5064 -91.5063 -350 91.5064 -91.5063 -350 125 -33.4936 -295 125 33.4936 -295 125 -33.4936 -350 125 -33.4936 -350 125 33.4936 -295 91.5063 91.5064 -295 125 33.4936 -350 125 33.4936 -350 91.5063 91.5064 -295 33.4937 125 -295 91.5063 91.5064 -350 91.5063 91.5064 -350 33.4937 125 -295 -33.4937 125 -295 33.4937 125 -350 33.4937 125 -350 -33.4937 125 -295 -91.5064 91.5064 -295 -33.4937 125 -350 -33.4937 125 -350 -91.5064 91.5064 -295 -125 33.4936 -295 -91.5064 91.5064 -350 -91.5064 91.5064 -350 -125 33.4936 -295 -125 -33.4937 -295 -125 33.4936 -350 -125 33.4936 -350 -125 -33.4937 -295 -91.5064 -91.5063 -295 -125 -33.4937 -350 -125 -33.4937 -350 -91.5064 -91.5063 -295 -33.4937 -125 -295 -91.5064 -91.5063 -350 -91.5064 -91.5063 -350 -33.4937 -125 -295 33.4936 -125 -295 -33.4937 -125 -350 -33.4937 -125 -350 33.4936 -125 -360 -30 -51.9615 -360 -51.9615 -30 -360 -60 0 -360 -51.9615 30 -360 -30 51.9615 -360 0 60 -360 30 51.9615 -360 51.9615 30 -360 60 0 -360 51.9615 -30 -360 30 -51.9615 -360 0 -60 -350 51.9615 -30 -350 30 -51.9615 -360 30 -51.9615 -360 51.9615 -30 -350 60 0 -350 51.9615 -30 -360 51.9615 -30 -360 60 0 -350 51.9615 30 -350 60 0 -360 60 0 -360 51.9615 30 -350 30 51.9615 -350 51.9615 30 -360 51.9615 30 -360 30 51.9615 -350 0 60 -350 30 51.9615 -360 30 51.9615 -360 0 60 -350 -30 51.9615 -350 0 60 -360 0 60 -360 -30 51.9615 -350 -51.9615 30 -350 -30 51.9615 -360 -30 51.9615 -360 -51.9615 30 -350 -60 0 -350 -51.9615 30 -360 -51.9615 30 -360 -60 0 -350 -51.9615 -30 -350 -60 0 -360 -60 0 -360 -51.9615 -30 -350 -30 -51.9615 -350 -51.9615 -30 -360 -51.9615 -30 -360 -30 -51.9615 -350 0 -60 -350 -30 -51.9615 -360 -30 -51.9615 -360 0 -60 -350 30 -51.9615 -350 0 -60 -360 0 -60 -360 30 -51.9615 145 -70 -80 145 70 -80 145 70 60 145 -70 60 145 70 60 75 70 60 75 -70 60 145 -70 60 145 70 -80 75 70 -80 75 70 60 145 70 60 75 70 -80 145 70 -80 145 -70 -80 75 -70 -80 75 -70 -80 145 -70 -80 145 -70 60 75 -70 60 75 -100 -80 75 100 -80 75 100 80 75 -100 80 -125 100 80 -125 -100 80 75 -100 80 75 100 80 75 100 -80 -125 100 -80 -125 100 80 75 100 80 -125 100 -80 75 100 -80 75 -100 -80 -125 -100 -80 -125 -100 -80 75 -100 -80 75 -100 80 -125 -100 80 145 30 50 145 -30 50 945 -30 50 945 30 50 945 30 -30 145 30 -30 145 30 50 945 30 50 145 30 -30 945 30 -30 945 -30 -30 145 -30 -30 145 -30 -30 945 -30 -30 945 -30 50 145 -30 50 945 -30 50 945 -30 -30 945 30 -30 945 30 50 145 -25 -80 145 25 -80 945 -25 -30 945 -25 70 945 -25 70 945 25 -30 945 25 70 945 25 70 975 -25 -80 975 -25 -80 975 -25 70 975 -25 70 975 25 -80 975 25 -80 975 25 70 975 25 70 145 -25 -30 145 25 -30 + + + + + + + + + + 0 0.382672 0.923884 0 0.923884 0.382672 0 0.923884 0.382672 0 0.382672 0.923884 0 0.923884 0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 0.382672 0 0.923884 -0.382672 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.923884 -0.382672 0 0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.382672 -0.923884 0 -0.923884 -0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 -0.382672 0 -0.923884 0.382672 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.923884 0.382672 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 -0.382672 0.923884 0 -0.923884 0.382672 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.923884 0.382672 0 -0.923884 -0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 -0.382672 0 -0.382672 -0.923884 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.382672 -0.923884 0 0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 0.382672 -0.923884 0 0.923884 -0.382672 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.923884 -0.382672 0 0.923884 0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 0.382672 0 0.382672 0.923884 0 0.923884 0.382672 0 0.923884 0.382672 0 0.382672 0.923884 0 -0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 -0.382672 0.923884 0 -0.923884 -0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 -0.382672 0 -0.382672 -0.923884 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.382672 -0.923884 0 0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 0.382672 -0.923884 0 0.923884 -0.382672 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.923884 -0.382672 0 0.923884 0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 0.382672 0 0.382672 0.923884 0 0.923884 0.382672 0 0.923884 0.382672 0 0.382672 0.923884 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -0.923884 0.382672 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.923884 0.382672 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 -0.382672 0.923884 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.70713 -0.707083 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0.70713 -0.707083 0 0.965932 -0.258797 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.965932 -0.258797 0 0.965932 0.258797 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.965932 0.258797 0 0.707083 0.70713 0 0.965932 0.258797 0 0.965932 0.258797 0 0.707083 0.70713 0 0.258797 0.965932 0 0.707083 0.70713 0 0.707083 0.70713 0 0.258797 0.965932 0 -0.258797 0.965932 0 0.258797 0.965932 0 0.258797 0.965932 0 -0.258797 0.965932 0 -0.70713 0.707083 0 -0.258797 0.965932 0 -0.258797 0.965932 0 -0.70713 0.707083 0 -0.965932 0.258797 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.965932 0.258797 0 -0.965932 -0.258797 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.965932 -0.258797 0 -0.707083 -0.70713 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.707083 -0.70713 0 -0.258797 -0.965932 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.258797 -0.965932 0 0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 0.258797 -0.965932 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.866034 -0.499985 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.866034 -0.499985 0 1 0 0 0.866034 -0.499985 0 0.866034 -0.499985 0 1 0 0 0.866034 0.499985 0 1 0 0 1 0 0 0.866034 0.499985 0 0.499985 0.866034 0 0.866034 0.499985 0 0.866034 0.499985 0 0.499985 0.866034 0 0 1 0 0.499985 0.866034 0 0.499985 0.866034 0 0 1 0 -0.499985 0.866034 0 0 1 0 0 1 0 -0.499985 0.866034 0 -0.866034 0.499985 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.866034 0.499985 0 -1 0 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -1 0 0 -0.866034 -0.499985 0 -1 0 0 -1 0 0 -0.866034 -0.499985 0 -0.499985 -0.866034 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.499985 -0.866034 0 0 -1 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 0 -1 0 0.499985 -0.866034 0 0 -1 0 0 -1 0 0.499985 -0.866034 1 0 0 1 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 -1 0 0 -1 -1 0 0 -1 0 0 0 0 1 -1 0 0 -1 0 0 0 0 1 0 0 -1 1 0 0 0 0 1 1 0 0 0 0 -1 1 0 0 0 0 1 1 0 0 0 1 0 0 -1 0 + + + + + + + + + + + + + + +

0 0 1 1 2 2 3 3

+

4 4 5 5 6 6 7 7

+

8 8 9 9 10 10 11 11

+

12 12 13 13 14 14 15 15

+

16 16 17 17 18 18 19 19

+

20 20 21 21 22 22 23 23

+

24 24 25 25 26 26 27 27

+

28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35

+

36 36 37 37 38 38 39 39

+
+ + + +

40 40 41 41 42 42 43 43

+

44 44 45 45 46 46 47 47

+

48 48 49 49 50 50 51 51

+

52 52 53 53 54 54 55 55

+

56 56 57 57 58 58 59 59

+

60 60 61 61 62 62 63 63

+

64 64 65 65 66 66 67 67

+

68 68 69 69 70 70 71 71

+
+ + + +

72 72 73 73 74 74 75 75

+

76 76 77 77 78 78 79 79

+

80 80 81 81 82 82 83 83

+

84 84 85 85 86 86 87 87

+

88 88 89 89 90 90 91 91

+

92 92 93 93 94 94 95 95

+

96 96 97 97 98 98 99 99 100 100 101 101 102 102 103 103

+

104 104 105 105 106 106 107 107

+

108 108 109 109 110 110 111 111 112 112 113 113 114 114 115 115

+

116 116 117 117 118 118 119 119

+
+ + + +

120 120 121 121 122 122 123 123 124 124 125 125 126 126 127 127 128 128 129 129 130 130 131 131

+

132 132 133 133 134 134 135 135

+

136 136 137 137 138 138 139 139

+

140 140 141 141 142 142 143 143

+

144 144 145 145 146 146 147 147

+

148 148 149 149 150 150 151 151

+

152 152 153 153 154 154 155 155

+

156 156 157 157 158 158 159 159

+

160 160 161 161 162 162 163 163

+

164 164 165 165 166 166 167 167

+

168 168 169 169 170 170 171 171

+

172 172 173 173 174 174 175 175

+

176 176 177 177 178 178 179 179

+
+ + + +

180 180 181 181 182 182 183 183 184 184 185 185 186 186 187 187 188 188 189 189 190 190 191 191

+

192 192 193 193 194 194 195 195

+

196 196 197 197 198 198 199 199

+

200 200 201 201 202 202 203 203

+

204 204 205 205 206 206 207 207

+

208 208 209 209 210 210 211 211

+

212 212 213 213 214 214 215 215

+

216 216 217 217 218 218 219 219

+

220 220 221 221 222 222 223 223

+

224 224 225 225 226 226 227 227

+

228 228 229 229 230 230 231 231

+

232 232 233 233 234 234 235 235

+

236 236 237 237 238 238 239 239

+
+ + + +

240 240 241 241 242 242 243 243

+

244 244 245 245 246 246 247 247

+

248 248 249 249 250 250 251 251

+

252 252 253 253 254 254 255 255

+

256 256 257 257 258 258 259 259

+
+ + + +

260 260 261 261 262 262 263 263

+

264 264 265 265 266 266 267 267

+

268 268 269 269 270 270 271 271

+

272 272 273 273 274 274 275 275

+

276 276 277 277 278 278 279 279

+
+ + + +

280 280 281 281 282 282 283 283

+

284 284 285 285 286 286 287 287

+

288 288 289 289 290 290 291 291

+

292 292 293 293 294 294 295 295

+

296 296 297 297 298 298 299 299

+
+ + + +

305 316 307 316 315 316 313 316

+

317 316 305 316 313 316 301 316

+
+ + + +

316 317 300 317 309 317 302 317

+

302 317 309 317 311 317 304 317

+
+ + + +

312 312 308 308 300 300 301 301

+

315 315 311 311 309 309 313 313

+

307 307 304 304 310 310 314 314

+

305 305 302 302 303 303 306 306

+
+
+ + + CAT3DBagRep + + +
+ + + + 75 -50 -28.75 75 50 -28.75 75 50 61.25 75 -50 61.25 -75 -50 -28.75 75 -50 -28.75 75 -50 61.25 -75 -50 61.25 -75 50 61.25 -75 -50 61.25 75 -50 61.25 75 50 61.25 75 50 -28.75 -75 50 -28.75 -75 50 61.25 75 50 61.25 -75 50 -28.75 75 50 -28.75 75 -50 -28.75 -75 -50 -28.75 -75 50 -28.75 -75 -50 -28.75 -75 -50 61.25 -75 50 61.25 + + + + + + + + + + 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 + + + + + + + + + + + + + + +

0 0 1 1 2 2 3 3

+

4 4 5 5 6 6 7 7

+

8 8 9 9 10 10 11 11

+

12 12 13 13 14 14 15 15

+

16 16 17 17 18 18 19 19

+

20 20 21 21 22 22 23 23

+
+
+ + + CAT3DBagRep + + +
+
+ + + + + + + 0.498039 0.498039 0.498039 1 + + + 0.498039 0.498039 0.498039 1 + + + + + + + + + + + 1 0.376471 0 1 + + + 1 0.376471 0 1 + + + + + + + + + + + 0.298039 0.298039 0.298039 1 + + + 0.298039 0.298039 0.298039 1 + + + + + + + + + + + 1 1 1 1 + + + 1 1 1 1 + + + + + + + + + + + + + + + + + + + + + + + + 0 0 1 + + + + + 1 0 0 + + 0 + 0 + + + + + + 1 0 0 + + 0 + 0 + + + + + + 0 1 0 + + + + + 0 1 0 + + + + + 0 1 0 + + + + + -1 0 0 + + -350 + 350 + + + + + + 1 0 0 + + -172 + 172 + + + + + + -1 0 0 + + -172 + 172 + + + + + + 1 0 0 + + + + + 0 1 0 + + + + + 0 1 0 + + + + + 0 0 1 + + + + + 0 1 0 + + + + + 1 0 0 + + + + + 0 1 0 + + + + + 1 0 0 + + + + + -1 0 0 + + + + + -1 0 0 + + + + + -1 0 0 + + + + + -1 0 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 0 892 + + + -444.046 -223.999 -289.288 + + + + -444.046 223.999 -289.288 + + + + 0 -1 0 62.614 + + + 0 1 0 32.114 + + + + 1.04075e-010 0 1050 + 0 1 0 90 + + + 1760 0 0.000104825 + + + 0 1 0 30 + + + 0 -1 0 60 + + + 0 1 0 30 + + + + + + + + + + 400 0 7.17802e-006 + 0 1 0 90 + + + + + + -5.24977e-011 0 575 + 0 1 0 4.01364e-005 + + + + + + + + + + -606.997 -60 346.998 + 0 1 0 29.755 + + + + + + + + -674.503 130 34.0037 + 0 1 0 2.886 + + + + + + + + + + + + kinmodel.0/joint_0 + + + + kinmodel.0/pseudojoint_1 + + + + =$B1=340;$B2=675.36;$L2=600.389;$C1=1050;$C2=473;$C3=1212;$C4=400;$C5=699.18;$C6=385;$L3=537.247;DOF(18) + + + + + kinmodel.0/joint_10 + + + + + + + SSSA + + SASS + 1050 + + + + + + SSSA + + + kinmodel.0/pseudojoint_3 + 537.247 + + 699.18 + 385 + + + SSSA + + + kinmodel.0/pseudojoint_2 + 600.389 + + 340 + 675.36 + + + 2.14447 + + 473 + + 400 + 1212 + + + + + + =DOF(20);-SSSA($C7,$C4,$C3) + + + + + kinmodel.0/joint_11 + + + + + SASA + 170 + + + + SSSA + + + kinmodel.0/pseudojoint_2 + 600.389 + + 340 + 675.36 + + 1.09282 + + 575 + + + + + =SASA(170,$T2-1.09282,575) + + + + + kinmodel.0/joint_12 + + + + + + + SASS + 575 + + + + SSSA + + + kinmodel.0/pseudojoint_2 + 600.389 + + 340 + 675.36 + + 1.09282 + + 170 + + + + + + =-SASS(575,$T2-1.09282,170) + + + + + kinmodel.0/joint_13 + + + + + + + SSSA + 385 + + + kinmodel.0/pseudojoint_3 + 537.247 + + 699.18 + + + + + + =-SSSA($C6,DOF(20)+$L3,$C5) + + + + + kinmodel.0/joint_14 + + + + + + kinmodel.0/pseudojoint_3 + 537.247 + + + + + =DOF(20)+$L3 + + + + + kinmodel.0/joint_15 + + + + + + + SSSA + 340 + + + 600.389 + kinmodel.0/pseudojoint_2 + + 675.36 + + + + + + =-SSSA($B1,$L2+DOF(19),$B2) + + + + + kinmodel.0/joint_16 + + + + + + kinmodel.0/pseudojoint_2 + 600.389 + + + + + =DOF(19)+$L2 + + + + + kinmodel.0/joint_3 + + + + + SSSA + + + kinmodel.0/pseudojoint_2 + 600.389 + + 340 + 675.36 + + + + + =$T2=SSSA(DOF(19)+$L2,$B1,$B2) + + + + + kinmodel.0/joint_4 + + + + + + + SSSA + + + kinmodel.0/pseudojoint_3 + 537.247 + + 699.18 + 385 + + + SSSA + + + kinmodel.0/pseudojoint_2 + 600.389 + + 340 + 675.36 + + + + + + =SSSA(DOF(20)+$L3,$C5,$C6)-$T2 + + + + + kinmodel.0/joint_5 + + + + + + + + + + + + + INRANGE + + + + + + SSSA + + + kinmodel.0/pseudojoint_3 + 537.247 + + 699.18 + 385 + + + SSSA + + + kinmodel.0/pseudojoint_2 + 600.389 + + 340 + 675.36 + + + 2.14447 + + + + + + + + + INRANGE + + + + + + SSSA + + + kinmodel.0/pseudojoint_3 + 537.247 + + 699.18 + 385 + + + SSSA + + + kinmodel.0/pseudojoint_2 + 600.389 + + 340 + 675.36 + + + 2.14447 + + + 9 + + + + + SSSA + 473 + 1050 + + SASS + 1050 + + + + + + SSSA + + + kinmodel.0/pseudojoint_3 + 537.247 + + 699.18 + 385 + + + SSSA + + + kinmodel.0/pseudojoint_2 + 600.389 + + 340 + 675.36 + + + 2.14447 + + 473 + + + + + SSSA + 1212 + 400 + + SASS + 1050 + + + + + + SSSA + + + kinmodel.0/pseudojoint_3 + 537.247 + + 699.18 + 385 + + + SSSA + + + kinmodel.0/pseudojoint_2 + 600.389 + + 340 + 675.36 + + + 2.14447 + + 473 + + + + + + + =$A0=SSSA(DOF(20)+$L3,$C5,$C6)-SSSA(DOF(19)+$L2,$B1,$B2)+2.14447;$C7=SASS($C1,$A0,$C2);$SIGN=INRANGE($A0,-PI,PI)-INRANGE($A0,PI,9);-$SIGN*SSSA($C2,$C1,$C7)-SSSA($C3,$C4,$C7) + + + + + kinmodel.0/joint_8 + + + + + + 1 + kinmodel.0/joint_7 + + + + + 1 * DOF(8) + + + + + kinmodel.0/joint_9 + + + + + + kinmodel.0/pseudojoint_6 + + + + + =$B1=340;$B2=675.36;$L2=600.389;$C1=1050;$C2=473;$C3=1212;$C4=400;$C5=699.18;$C6=385;$L3=537.247;-DOF(21) + + + + + + + + + + + + + + atan2 + + + 2 + + + + + a + 2 + + + + + + + + + + + + a + 2 + + + + b + 2 + + + + + c + 2 + + + + + 2 + b + + + 2 + + + + + + b + + + + + + + + + a + 2 + + + + b + 2 + + + + + c + 2 + + + + + 2 + b + + + + + + + + + + + + + + + + + + + + + y + 0 + + + + x + 0 + + + + + + + + + y + + + + x + + + + + + + + + + + y + 0 + + + + x + 0 + + + + + + + + + + + + y + + + + x + + + + + + + + + + + + y + 0 + + + + x + 0 + + + + + + + + + + + y + + + + x + + + + + + + + + + + + + y + 0 + + + + x + 0 + + + + + + + + + + + y + + + + x + + + + + + + + + + + + + + + + + + 2 + + + + + + + a + 2 + + + + b + 2 + + + + + + + + + 2 + a + + b + + + + gamma + + + + + + + + + + + + + + + atan2 + + + a + + + gamma + + + + + b + + + a + + + gamma + + + + + + + + + + + + + + + + + + a + b + + + + a + c + + + + + + + + + + + libkinscenes.kinScene/inst_kinmodel.0 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_0/axis0 + + + 0 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_1/axis0 + + + 0 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_2/axis0 + + + 0 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_3/axis0 + + + 62.6141 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_4/axis0 + + + -12.9465 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_5/axis0 + + + -90.0001 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_6/axis0 + + + 0 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_7/axis0 + + + 0 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_8/axis0 + + + 0 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_9/axis0 + + + -0 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_10/axis0 + + + -92.1132 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_11/axis0 + + + 4.33092e-005 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_12/axis0 + + + -405 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_13/axis0 + + + -33.1121 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_14/axis0 + + + 537.247 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_15/axis0 + + + -30.1876 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_16/axis0 + + + 600.389 + + + libkinscenes.kinScene/inst_kinmodel.0/pseudojoint_1/axis0 + + + 0 + + + libkinscenes.kinScene/inst_kinmodel.0/pseudojoint_2/axis0 + + + 0 + + + libkinscenes.kinScene/inst_kinmodel.0/pseudojoint_3/axis0 + + + 0 + + + libkinscenes.kinScene/inst_kinmodel.0/pseudojoint_6/axis0 + + + 0 + + + + + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0 + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_4_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_4_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_5_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_5_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_5_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_5_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_5_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_5_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_5_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_5_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_5_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_5_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_5_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_5_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_6_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_6_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_6_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_6_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_6_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_6_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_6_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_6_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_7_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_7_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_7_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_7_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_7_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_7_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_8_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_8_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_8_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_8_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_9_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_9_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_10_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_10_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_11_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_11_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_11_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_11_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_12_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_12_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_13_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_13_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_13_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_13_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_14_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_14_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_15_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_15_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_15_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_15_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_16_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_16_axis0_value + + + + +
diff --git a/collada_urdf/test/kr150.dae b/collada_urdf/test/kr150.dae new file mode 100644 index 0000000..0f5bfd0 --- /dev/null +++ b/collada_urdf/test/kr150.dae @@ -0,0 +1,13484 @@ + + + + + CPFCatiaPlugin + + 2009-02-17T14:20:33Z + 2009-02-17T14:20:33Z + + Z_UP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 0 0 0 0 1 0 0 0 0 1 865 0 0 0 1 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -865 -0 0 -0 1 + 1 0 0 0 0 1 0 0 0 0 1 865 0 0 0 1 + 0 0 -1 0 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -865 -0 0 -0 1 + 1 0 0 0 0 1 0 0 0 0 1 865 0 0 0 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 0 -4.37114e-008 410 0 1 0 0 4.37114e-008 0 1 865 0 0 0 1 + 1 -0 4.37114e-008 -410 -0 1 -0 0 -4.37114e-008 -0 1 -865 -0 0 -0 1 + 1 0 0 0 0 1 0 0 0 0 1 865 0 0 0 1 + 0 0 -1 0 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -865 -0 0 -0 1 + 1 0 -4.37114e-008 410 0 1 0 0 4.37114e-008 0 1 865 0 0 0 1 + 0 1 0 0 + 0 1 0 90 + 1 -0 4.37114e-008 -410 -0 1 -0 0 -4.37114e-008 -0 1 -865 -0 0 -0 1 + 1 0 -4.37114e-008 410 0 1 0 0 4.37114e-008 0 1 865 0 0 0 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 0 -6.21725e-015 410 0 1 0 0 6.21725e-015 0 1 1865 0 0 0 1 + 1 -0 6.21725e-015 -410 -0 1 -0 0 -6.21725e-015 -0 1 -1865 -0 0 -0 1 + 1 0 0 0 0 1 0 0 0 0 1 865 0 0 0 1 + 0 0 -1 0 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -865 -0 0 -0 1 + 1 0 -4.37114e-008 410 0 1 0 0 4.37114e-008 0 1 865 0 0 0 1 + 0 1 0 0 + 0 1 0 90 + 1 -0 4.37114e-008 -410 -0 1 -0 0 -4.37114e-008 -0 1 -865 -0 0 -0 1 + 1 0 -4.37114e-008 410 0 1 0 0 4.37114e-008 0 1 1865 0 0 0 1 + 0 1 0 0 + 0 1 0 -90 + 1 -0 4.37114e-008 -410 -0 1 -0 0 -4.37114e-008 -0 1 -1865 -0 0 -0 1 + 1 0 -6.21725e-015 410 0 1 0 0 6.21725e-015 0 1 1865 0 0 0 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 0 -6.21725e-015 1084.5 0 1 0 0 6.21725e-015 0 1 1910 0 0 0 1 + 1 -0 6.21725e-015 -1084.5 -0 1 -0 0 -6.21725e-015 -0 1 -1910 -0 0 -0 1 + 1 0 0 0 0 1 0 0 0 0 1 865 0 0 0 1 + 0 0 -1 0 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -865 -0 0 -0 1 + 1 0 -4.37114e-008 410 0 1 0 0 4.37114e-008 0 1 865 0 0 0 1 + 0 1 0 0 + 0 1 0 90 + 1 -0 4.37114e-008 -410 -0 1 -0 0 -4.37114e-008 -0 1 -865 -0 0 -0 1 + 1 0 -4.37114e-008 410 0 1 0 0 4.37114e-008 0 1 1865 0 0 0 1 + 0 1 0 0 + 0 1 0 -90 + 1 -0 4.37114e-008 -410 -0 1 -0 0 -4.37114e-008 -0 1 -1865 -0 0 -0 1 + 1 0 -3.55271e-015 1084.5 0 1 0 0 3.55271e-015 0 1 1910 0 0 0 1 + -1 0 0 0 + 1 -0 3.55271e-015 -1084.5 -0 1 -0 0 -3.55271e-015 -0 1 -1910 -0 0 -0 1 + 1 0 -6.21725e-015 1084.5 0 1 0 0 6.21725e-015 0 1 1910 0 0 0 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 0 -6.21725e-015 1410 0 1 0 0 6.21725e-015 0 1 1910 0 0 0 1 + 1 -0 6.21725e-015 -1410 -0 1 -0 0 -6.21725e-015 -0 1 -1910 -0 0 -0 1 + 1 0 0 0 0 1 0 0 0 0 1 865 0 0 0 1 + 0 0 -1 0 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -865 -0 0 -0 1 + 1 0 -4.37114e-008 410 0 1 0 0 4.37114e-008 0 1 865 0 0 0 1 + 0 1 0 0 + 0 1 0 90 + 1 -0 4.37114e-008 -410 -0 1 -0 0 -4.37114e-008 -0 1 -865 -0 0 -0 1 + 1 0 -4.37114e-008 410 0 1 0 0 4.37114e-008 0 1 1865 0 0 0 1 + 0 1 0 0 + 0 1 0 -90 + 1 -0 4.37114e-008 -410 -0 1 -0 0 -4.37114e-008 -0 1 -1865 -0 0 -0 1 + 1 0 -3.55271e-015 1084.5 0 1 0 0 3.55271e-015 0 1 1910 0 0 0 1 + -1 0 0 0 + 1 -0 3.55271e-015 -1084.5 -0 1 -0 0 -3.55271e-015 -0 1 -1910 -0 0 -0 1 + 1 0 -3.55271e-015 1410 0 1 0 0 3.55271e-015 0 1 1910 0 0 0 1 + 0 1 0 0 + 1 -0 3.55271e-015 -1410 -0 1 -0 0 -3.55271e-015 -0 1 -1910 -0 0 -0 1 + 1 0 -6.21725e-015 1410 0 1 0 0 6.21725e-015 0 1 1910 0 0 0 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 0 -6.21725e-015 1410 0 1 0 0 6.21725e-015 0 1 1910 0 0 0 1 + 1 -0 6.21725e-015 -1410 -0 1 -0 0 -6.21725e-015 -0 1 -1910 -0 0 -0 1 + 1 0 0 0 0 1 0 0 0 0 1 865 0 0 0 1 + 0 0 -1 0 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -865 -0 0 -0 1 + 1 0 -4.37114e-008 410 0 1 0 0 4.37114e-008 0 1 865 0 0 0 1 + 0 1 0 0 + 0 1 0 90 + 1 -0 4.37114e-008 -410 -0 1 -0 0 -4.37114e-008 -0 1 -865 -0 0 -0 1 + 1 0 -4.37114e-008 410 0 1 0 0 4.37114e-008 0 1 1865 0 0 0 1 + 0 1 0 0 + 0 1 0 -90 + 1 -0 4.37114e-008 -410 -0 1 -0 0 -4.37114e-008 -0 1 -1865 -0 0 -0 1 + 1 0 -3.55271e-015 1084.5 0 1 0 0 3.55271e-015 0 1 1910 0 0 0 1 + -1 0 0 0 + 1 -0 3.55271e-015 -1084.5 -0 1 -0 0 -3.55271e-015 -0 1 -1910 -0 0 -0 1 + 1 0 -3.55271e-015 1410 0 1 0 0 3.55271e-015 0 1 1910 0 0 0 1 + 0 1 0 0 + 1 -0 3.55271e-015 -1410 -0 1 -0 0 -3.55271e-015 -0 1 -1910 -0 0 -0 1 + 1 0 -3.55271e-015 1410 0 1 0 0 3.55271e-015 0 1 1910 0 0 0 1 + -1 0 0 0 + 1 -0 3.55271e-015 -1410 -0 1 -0 0 -3.55271e-015 -0 1 -1910 -0 0 -0 1 + 1 0 -6.21725e-015 1410 0 1 0 0 6.21725e-015 0 1 1910 0 0 0 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 0 -6.21725e-015 410 0 1 0 0 6.21725e-015 0 1 1865 0 0 0 1 + 1 -0 6.21725e-015 -410 -0 1 -0 0 -6.21725e-015 -0 1 -1865 -0 0 -0 1 + 1 0 0 0 0 1 0 0 0 0 1 865 0 0 0 1 + 0 0 -1 0 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -865 -0 0 -0 1 + 1 0 -4.37114e-008 410 0 1 0 0 4.37114e-008 0 1 865 0 0 0 1 + 0 1 0 0 + 0 1 0 90 + 1 -0 4.37114e-008 -410 -0 1 -0 0 -4.37114e-008 -0 1 -865 -0 0 -0 1 + 1 0 -4.37114e-008 410 0 1 0 0 4.37114e-008 0 1 1865 0 0 0 1 + 0 1 0 0 + 0 1 0 -90 + 1 -0 4.37114e-008 -410 -0 1 -0 0 -4.37114e-008 -0 1 -1865 -0 0 -0 1 + 1 0 -3.55271e-015 410 0 1 0 0 3.55271e-015 0 1 1865 0 0 0 1 + 1 0 0 + 1 -0 3.55271e-015 -410 -0 1 -0 0 -3.55271e-015 -0 1 -1865 -0 0 -0 1 + 1 0 -6.21725e-015 410 0 1 0 0 6.21725e-015 0 1 1865 0 0 0 1 + + + + + + + + + + 0.975042 0 0.222022 -420 0 1 0 -225 -0.222022 0 0.975042 769 0 0 0 1 + 0.975042 -0 -0.222022 580.253 -0 1 -0 225 0.222022 -0 0.975042 -656.558 -0 0 -0 1 + 1 0 0 0 0 1 0 0 0 0 1 865 0 0 0 1 + 0 0 -1 0 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -865 -0 0 -0 1 + 0.975042 0 0.222022 -420 0 1 0 -225 -0.222022 0 0.975042 769 0 0 0 1 + 0 1 0 0 + 0 1 0 0.0072643 + 0.975042 -0 -0.222022 580.253 -0 1 -0 225 0.222022 -0 0.975042 -656.558 -0 0 -0 1 + 0.975042 0 0.222022 -420 0 1 0 -225 -0.222022 0 0.975042 769 0 0 0 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -0.105001 0 -0.994472 -232.57 0 1 0 -225 0.994472 0 -0.105001 781.396 0 0 0 1 + -0.105001 -0 0.994472 -801.496 0 1 -0 225 -0.994472 0 -0.105001 -149.237 -0 -0 0 1 + 1 0 0 0 0 1 0 0 0 0 1 865 0 0 0 1 + 0 0 -1 0 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -865 -0 0 -0 1 + 0.975042 0 0.222022 -420 0 1 0 -225 -0.222022 0 0.975042 769 0 0 0 1 + 0 1 0 0 + 0 1 0 0.0072643 + 0.975042 -0 -0.222022 580.253 -0 1 -0 225 0.222022 -0 0.975042 -656.558 -0 0 -0 1 + -0.105001 0 -0.994472 -232.57 0 1 0 -225 0.994472 0 -0.105001 781.396 0 0 0 1 + 0 0 1 + -0 -0 -205.91 + -0.105001 -0 0.994472 -801.496 0 1 -0 225 -0.994472 0 -0.105001 -149.237 -0 -0 0 1 + -0.105001 0 -0.994472 -232.57 0 1 0 -225 0.994472 0 -0.105001 781.396 0 0 0 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -577.276 45.7443 292.607 -587.035 38.4789 294.792 -599.097 38.4789 297.492 -608.855 45.7443 299.677 -612.583 57.5 300.512 -608.855 69.2557 299.677 -599.097 76.5211 297.492 -587.035 76.5211 294.792 -577.276 69.2557 292.607 -573.549 57.5 291.773 -568.087 57.5 316.169 -571.815 69.2557 317.003 -581.573 76.5211 319.188 -593.635 76.5211 321.888 -603.394 69.2557 324.073 -607.121 57.5 324.908 -603.394 45.7443 324.073 -593.635 38.4789 321.888 -581.573 38.4789 319.188 -571.815 45.7443 317.003 -573.549 57.5 291.773 -568.087 57.5 316.169 -571.815 45.7443 317.003 -577.276 45.7443 292.607 -577.276 45.7443 292.607 -571.815 45.7443 317.003 -581.573 38.4789 319.188 -587.035 38.4789 294.792 -587.035 38.4789 294.792 -581.573 38.4789 319.188 -593.635 38.4789 321.888 -599.097 38.4789 297.492 -599.097 38.4789 297.492 -593.635 38.4789 321.888 -603.394 45.7443 324.073 -608.855 45.7443 299.677 -608.855 45.7443 299.677 -603.394 45.7443 324.073 -607.121 57.5 324.908 -612.583 57.5 300.512 -612.583 57.5 300.512 -607.121 57.5 324.908 -603.394 69.2557 324.073 -608.855 69.2557 299.677 -608.855 69.2557 299.677 -603.394 69.2557 324.073 -593.635 76.5211 321.888 -599.097 76.5211 297.492 -599.097 76.5211 297.492 -593.635 76.5211 321.888 -581.573 76.5211 319.188 -587.035 76.5211 294.792 -587.035 76.5211 294.792 -581.573 76.5211 319.188 -571.815 69.2557 317.003 -577.276 69.2557 292.607 -577.276 69.2557 292.607 -571.815 69.2557 317.003 -568.087 57.5 316.169 -573.549 57.5 291.773 -557.571 -69.7557 281.925 -567.123 -77.0211 284.887 -578.929 -77.0211 288.548 -588.48 -69.7557 291.51 -592.129 -58 292.641 -588.48 -46.2443 291.51 -578.929 -38.9789 288.548 -567.123 -38.9789 284.887 -557.571 -46.2443 281.925 -553.923 -58 280.794 -546.519 -58 304.673 -550.167 -46.2443 305.804 -559.719 -38.9789 308.765 -571.525 -38.9789 312.426 -581.076 -46.2443 315.388 -584.724 -58 316.519 -581.076 -69.7557 315.388 -571.525 -77.0211 312.426 -559.719 -77.0211 308.765 -550.167 -69.7557 305.804 -553.923 -58 280.794 -546.519 -58 304.673 -550.167 -69.7557 305.804 -557.571 -69.7557 281.925 -557.571 -69.7557 281.925 -550.167 -69.7557 305.804 -559.719 -77.0211 308.765 -567.123 -77.0211 284.887 -567.123 -77.0211 284.887 -559.719 -77.0211 308.765 -571.525 -77.0211 312.426 -578.929 -77.0211 288.548 -578.929 -77.0211 288.548 -571.525 -77.0211 312.426 -581.076 -69.7557 315.388 -588.48 -69.7557 291.51 -588.48 -69.7557 291.51 -581.076 -69.7557 315.388 -584.724 -58 316.519 -592.129 -58 292.641 -592.129 -58 292.641 -584.724 -58 316.519 -581.076 -46.2443 315.388 -588.48 -46.2443 291.51 -588.48 -46.2443 291.51 -581.076 -46.2443 315.388 -571.525 -38.9789 312.426 -578.929 -38.9789 288.548 -578.929 -38.9789 288.548 -571.525 -38.9789 312.426 -559.719 -38.9789 308.765 -567.123 -38.9789 284.887 -567.123 -38.9789 284.887 -559.719 -38.9789 308.765 -550.167 -46.2443 305.804 -557.571 -46.2443 281.925 -557.571 -46.2443 281.925 -550.167 -46.2443 305.804 -546.519 -58 304.673 -553.923 -58 280.794 -612 99.5 326 -612 99.5 390 -545 99.5 405 -485 99.5 405 -485 99.5 311 -545 99.5 311 -545 15.5 311 -485 15.5 311 -485 15.5 405 -545 15.5 405 -612 15.5 390 -612 15.5 326 -545 99.5 311 -545 15.5 311 -612 15.5 326 -612 99.5 326 -612 99.5 326 -612 15.5 326 -612 15.5 390 -612 99.5 390 -612 99.5 390 -612 15.5 390 -545 15.5 405 -545 99.5 405 -545 99.5 405 -545 15.5 405 -485 15.5 405 -485 99.5 405 -485 99.5 405 -485 15.5 405 -485 15.5 311 -485 99.5 311 -485 99.5 311 -485 15.5 311 -545 15.5 311 -545 99.5 311 -589.5 -36.5 318 -589.5 -36.5 398 -525 -36.5 418 -485 -36.5 418 -485 -36.5 298 -525 -36.5 298 -525 -79.5 298 -485 -79.5 298 -485 -79.5 418 -525 -79.5 418 -589.5 -79.5 398 -589.5 -79.5 318 -525 -36.5 298 -525 -79.5 298 -589.5 -79.5 318 -589.5 -36.5 318 -589.5 -36.5 318 -589.5 -79.5 318 -589.5 -79.5 398 -589.5 -36.5 398 -589.5 -36.5 398 -589.5 -79.5 398 -525 -79.5 418 -525 -36.5 418 -525 -36.5 418 -525 -79.5 418 -485 -79.5 418 -485 -36.5 418 -485 -36.5 418 -485 -79.5 418 -485 -79.5 298 -485 -36.5 298 -485 -36.5 298 -485 -79.5 298 -525 -79.5 298 -525 -36.5 298 -395 -130 438 -395 -130 278 -395 130 278 -395 130 438 -485 130 278 -395 130 278 -395 -130 278 -485 -130 278 -485 -130 278 -395 -130 278 -395 -130 438 -485 -130 438 -485 -130 438 -395 -130 438 -395 130 438 -485 130 438 -485 130 438 -395 130 438 -395 130 278 -485 130 278 -485 130 438 -485 130 278 -485 -130 278 -485 -130 438 -265.797 334.714 104 -265.797 334.714 104 -265.797 334.714 104 -165.996 396.498 99 -165.996 396.498 99 -165.996 396.498 99 -118.049 348.552 104 -118.049 348.552 104 -118.049 348.552 104 -118.049 348.552 30 -118.049 348.552 30 -118.049 348.552 30 118.049 348.552 30 118.049 348.552 30 118.049 348.552 30 118.049 348.552 104 118.049 348.552 104 118.049 348.552 104 165.996 396.498 99 165.996 396.498 99 165.996 396.498 99 262.3 333.765 104 262.3 333.765 104 262.3 333.765 104 -265.797 334.714 30 -265.797 334.714 30 -265.797 334.714 30 -165.996 396.498 30 -165.996 396.498 30 -165.996 396.498 30 -39.8106 365.84 104 -39.8106 365.84 104 39.8106 365.84 30 39.8106 365.84 30 165.996 396.498 30 165.996 396.498 30 165.996 396.498 30 262.3 333.765 30 262.3 333.765 30 262.3 333.765 30 -230 325 30 -230 325 104 -212.03 368 104 -212.03 368 104 -137.498 368 104 -137.498 368 104 -39.8106 365.84 30 39.8106 365.84 104 137.497 368 104 137.497 368 104 212.029 368 104 212.029 368 104 223.446 360.932 30 223.446 360.932 104 230 325 30 230 325 104 -172.624 325 493 -172.624 325 493 -172.624 -325 104 -172.624 -325 104 39.8106 -365.84 493 39.8106 -365.84 493 39.8106 365.84 104 39.8106 365.84 104 239.851 -279.098 104 239.851 -279.098 104 239.851 279.098 493 239.851 279.098 493 358.714 -82.1484 493 358.714 -82.1484 493 358.714 82.1484 104 358.714 82.1484 104 -395 -150 104 -395 -150 104 -395 -150 104 -395 150 493 -395 150 493 -395 150 493 -370.047 -150 493 -370.047 -150 493 -370.047 150 104 -370.047 150 104 -118.049 -348.552 493 -118.049 -348.552 493 336.042 -150 104 336.042 -150 104 336.042 150 493 336.042 150 493 -260.669 -259.761 493 -260.669 -259.761 493 -260.669 259.761 104 -260.669 259.761 104 -118.049 348.552 104 -118.049 348.552 104 -39.8106 -365.84 104 -39.8106 -365.84 104 -39.8106 365.84 493 -39.8106 365.84 493 118.049 -348.552 104 118.049 -348.552 104 118.049 348.552 493 118.049 348.552 493 172.624 -325 493 172.624 -325 493 172.624 325 104 172.624 325 104 294.843 -220.208 493 294.843 -220.208 493 294.843 220.208 104 294.843 220.208 104 368 0 104 368 0 104 368 0 493 368 0 493 -395 -150 493 -395 -150 493 -395 150 104 -395 150 104 -370.047 -150 104 -370.047 150 493 -260.669 -259.761 104 -260.669 259.761 493 -172.624 325 104 -172.624 -325 493 -118.049 -348.552 104 -118.049 348.552 493 -39.8106 -365.84 493 -39.8106 365.84 104 39.8106 -365.84 104 39.8106 365.84 493 118.049 -348.552 493 118.049 348.552 104 172.624 -325 104 172.624 325 493 239.851 -279.098 493 239.851 279.098 104 294.843 -220.208 104 294.843 220.208 493 336.042 -150 493 336.042 150 104 358.714 -82.1484 104 358.714 82.1484 493 -265.797 -334.714 104 -265.797 -334.714 104 -265.797 -334.714 104 -165.996 -396.498 99 -165.996 -396.498 99 -165.996 -396.498 99 -118.049 -348.552 104 -118.049 -348.552 104 -118.049 -348.552 104 -118.049 -348.552 30 -118.049 -348.552 30 -118.049 -348.552 30 118.049 -348.552 30 118.049 -348.552 30 118.049 -348.552 30 118.049 -348.552 104 118.049 -348.552 104 118.049 -348.552 104 165.996 -396.498 99 165.996 -396.498 99 165.996 -396.498 99 262.3 -333.765 104 262.3 -333.765 104 262.3 -333.765 104 -265.797 -334.714 30 -265.797 -334.714 30 -265.797 -334.714 30 -165.996 -396.498 30 -165.996 -396.498 30 -165.996 -396.498 30 -39.8106 -365.84 30 -39.8106 -365.84 30 39.8106 -365.84 104 39.8106 -365.84 104 165.996 -396.498 30 165.996 -396.498 30 165.996 -396.498 30 262.3 -333.765 30 262.3 -333.765 30 262.3 -333.765 30 -230 -325 30 -230 -325 104 -212.029 -368 104 -212.029 -368 104 -137.497 -368 104 -137.497 -368 104 -39.8106 -365.84 104 39.8106 -365.84 30 137.497 -368 104 137.497 -368 104 212.029 -368 104 212.029 -368 104 223.446 -360.932 30 223.446 -360.932 104 230 -325 30 230 -325 104 -405 83.1436 30 -405 83.1436 59.3429 -405 -120.841 30 -405 -120.841 30 -405 -120.841 30 -405 -120.841 59.3429 -405 -120.841 59.3429 -405 -120.841 59.3429 -405 -83.1435 30 -405 -83.1435 59.3429 -405 120.841 30 -405 120.841 30 -405 120.841 30 -405 120.841 59.3429 -405 120.841 59.3429 358.714 82.1484 30 358.714 82.1484 30 358.714 82.1484 30 358.714 82.1484 30 -475 -64.3871 30 -475 -64.3871 30 -475 64.3871 30 -475 64.3871 30 -475 64.3871 47 -475 64.3871 47 -475 -64.3871 47 -475 -64.3871 47 -421.042 -150 30 -421.042 -150 56.5143 -421.042 150 30 -421.042 150 56.5143 -405 83.1436 30 -405 83.1436 59.3429 -405 -83.1435 30 -405 -83.1435 59.3429 347.378 -116.074 30 347.378 -116.074 30 347.378 -116.074 104 347.378 -116.074 104 347.378 116.074 30 347.378 116.074 30 347.378 116.074 104 347.378 116.074 104 358.714 -82.1484 30 358.714 -82.1484 30 358.714 -82.1484 104 358.714 -82.1484 104 358.714 82.1484 30 358.714 82.1484 30 358.714 82.1484 104 358.714 82.1484 104 366.042 -150 30 366.042 -150 104 366.042 150 30 366.042 150 104 368 -79.6602 104 368 -79.6602 104 368 79.6602 104 368 79.6602 104 425 -64.3871 30 425 -64.3871 30 425 -64.3871 94 425 -64.3871 94 425 -64.3871 94 425 64.3871 30 425 64.3871 30 425 64.3871 94 425 64.3871 94 425 64.3871 94 -395 -150 104 -395 -150 61.1061 -395 150 61.1061 -395 150 104 283.953 -313.457 0 283.953 -233.219 0 345.969 -233.219 0 345.969 -243.449 0 316.273 -283.146 0 -336.203 -233.219 0 -367.211 -233.219 0 -367.211 -174.648 0 -345.485 -174.648 0 -336.203 -183.963 0 316.273 283.146 0 345.969 243.449 0 345.969 235.344 0 283.953 235.344 0 283.953 313.457 0 -271.938 -328.542 30 -265.797 -334.714 30 -240.93 -350.109 30 -240.93 -291.789 30 -271.938 -291.789 30 224.188 -291.789 30 224.188 -350.359 30 238.567 -350.359 30 262.3 -333.765 30 307.057 -291.789 30 -367.211 -232.783 0 -398.219 -201.618 0 -398.219 -174.648 0 -367.211 -174.648 0 407.956 147.488 0 345.969 147.488 0 345.969 243.449 0 360.933 223.445 0 -336.203 183.963 0 -336.203 264.629 0 -274.188 264.629 0 -274.188 246.195 0 -274.188 -326.28 0 -336.203 -263.949 0 -336.203 -183.963 0 -274.188 -246.195 0 -395.969 203.879 30 -395.969 176.773 30 -364.961 176.773 30 -364.961 235.045 30 -285.001 235.344 30 -364.961 235.344 30 -364.961 176.773 30 -343.367 176.773 30 100.156 352.484 30 100.156 425 30 -119.957 425 30 -237.092 352.484 30 -333.953 -266.21 30 -271.938 -328.542 30 -271.938 -248.453 30 -333.953 -186.22 30 -364.663 235.344 30 -285.001 235.344 30 -271.938 248.453 30 -271.938 328.542 30 -336.203 -233.219 0 -336.203 -263.949 0 -366.778 -233.219 0 -274.188 326.28 0 -274.188 264.629 0 -335.527 264.629 0 -260.669 -259.761 30 -271.938 -248.453 30 -271.938 -291.789 30 -271.938 -291.789 30 -217.444 -291.789 30 -260.669 -259.761 30 353.622 -233.219 30 282.693 -233.219 30 239.851 -279.098 30 286.203 -291.789 30 307.057 -291.789 30 316.273 -283.146 30 239.851 -279.098 30 224.188 -289.793 30 224.188 -291.789 30 239.851 -279.098 30 224.188 -291.789 30 286.203 -291.789 30 -333.953 -266.21 30 -333.953 -203.934 30 -395.915 -203.934 30 -475 124.445 0 -475 124.445 0 -475 124.445 30 -475 124.445 30 -475 -124.445 0 -475 -124.445 0 -475 -124.445 30 -475 -124.445 30 -398.219 -201.618 0 -398.219 201.618 0 -395.969 -203.879 30 -395.969 203.879 30 -395 150 0 -395 150 0 -395 150 30 -395 150 30 -395 -150 0 -395 -150 0 -395 -150 30 -395 -150 30 -370.047 150 0 -370.047 150 30 -370.047 -150 0 -370.047 -150 30 -265.797 334.714 0 -265.797 334.714 30 -265.797 -334.714 0 -265.797 -334.714 30 -260.669 259.761 0 -260.669 259.761 30 -260.669 -259.761 0 -260.669 -259.761 30 -240.525 -350.359 0 -240.525 -350.359 30 -237.092 352.484 0 -172.624 325 0 -172.624 325 30 -172.624 -325 0 -172.624 -325 30 -119.957 425 0 -119.957 425 0 -119.957 425 30 -119.957 -425 0 -119.957 -425 0 -119.957 -425 30 -119.957 -425 30 119.957 -425 0 119.957 -425 0 119.957 -425 30 119.957 -425 30 119.957 425 0 119.957 425 0 119.957 425 30 172.624 325 0 172.624 325 30 172.624 -325 0 172.624 -325 30 221.938 -361.866 0 221.938 -350.359 0 221.938 352.484 0 221.938 361.866 0 223.445 360.933 0 223.445 360.933 30 223.446 -360.932 0 223.446 -360.932 30 223.446 -360.932 30 238.567 -350.359 30 239.851 279.098 0 239.851 279.098 30 239.851 -279.098 0 239.851 -279.098 30 262.3 -333.765 0 262.3 -333.765 30 262.3 333.765 0 262.3 333.765 30 294.843 -220.208 0 294.843 -220.208 30 294.843 220.208 0 294.843 220.208 30 316.273 -283.146 0 316.273 -283.146 30 316.273 283.146 0 316.273 283.146 30 336.042 -150 0 336.042 -150 30 336.042 150 0 336.042 150 30 358.714 -82.1484 0 358.714 -82.1484 30 358.714 82.1485 0 358.714 82.1485 30 360.933 223.445 0 360.933 223.445 30 360.933 -223.445 0 360.933 -223.445 30 368 0 0 368 0 30 407.984 -147.442 0 407.984 147.443 0 425 -119.957 0 425 -119.957 0 425 -119.957 30 425 119.957 0 425 119.957 0 425 119.957 30 -398.219 -174.648 0 -398.219 176.773 0 -395.969 -203.934 30 -395.969 -174.648 30 -395.969 176.773 30 -345.485 -174.648 0 -343.367 176.773 30 -336.203 183.963 0 -336.203 263.949 0 -333.953 -203.934 30 -333.953 -186.22 30 -274.188 -326.28 0 -274.188 -291.789 0 -274.188 -246.195 0 -274.188 246.195 0 -274.188 293.914 0 -274.188 326.28 0 -271.938 248.453 30 -271.938 293.914 30 -271.938 328.542 30 -240.93 -350.359 30 -240.93 -291.789 30 -237.092 352.484 30 -217.444 -291.789 30 -150.156 -350.359 0 -150.156 352.484 0 -147.906 -350.359 30 -147.906 352.484 30 100.156 325 30 100.156 352.484 30 100.156 425 30 221.938 -291.329 0 221.938 291.329 0 224.188 -350.359 30 224.188 -289.793 30 224.188 352.484 30 224.188 360.414 30 235.528 352.484 30 280.709 235.344 0 282.693 -233.219 0 282.693 -233.219 30 283.953 -313.457 0 283.953 -291.789 0 283.953 -233.219 0 283.953 235.344 0 283.953 293.914 0 283.953 313.457 0 286.203 293.914 30 286.203 311.347 30 304.792 293.914 30 345.969 -243.449 0 345.969 -233.219 0 345.969 -120.291 0 345.969 120.291 0 345.969 147.488 0 345.969 235.344 0 347.376 -116.078 0 347.376 -116.078 30 347.378 -116.074 0 347.378 -116.074 30 348.219 -233.219 30 348.219 -116.078 30 348.219 118.203 30 348.219 235.344 30 348.219 240.441 30 352.032 235.344 30 353.622 -233.219 30 361.499 -57.5078 0 361.499 -57.5078 30 407.984 -57.5078 0 407.984 1.0625 0 407.984 59.6328 0 407.984 147.488 0 410.234 -57.5078 30 410.234 1.0625 30 410.234 59.6328 30 410.234 118.203 30 425 -116.078 30 425 -57.5078 30 425 1.0625 30 425 118.203 30 + + + + + + + + + + -0.218451 0 -0.975848 -0.218451 0 -0.975848 -0.218451 0 -0.975848 -0.218451 0 -0.975848 -0.218451 0 -0.975848 -0.218451 0 -0.975848 -0.218451 0 -0.975848 -0.218451 0 -0.975848 -0.218451 0 -0.975848 -0.218451 0 -0.975848 0.218451 0 0.975848 0.218451 0 0.975848 0.218451 0 0.975848 0.218451 0 0.975848 0.218451 0 0.975848 0.218451 0 0.975848 0.218451 0 0.975848 0.218451 0 0.975848 0.218451 0 0.975848 0.218451 0 0.975848 0.975848 0 -0.218451 0.975848 0 -0.218451 0.789499 -0.587756 -0.176733 0.789499 -0.587756 -0.176733 0.789499 -0.587756 -0.176733 0.789499 -0.587756 -0.176733 0.301523 -0.951066 -0.0675069 0.301523 -0.951066 -0.0675069 0.301523 -0.951066 -0.0675069 0.301523 -0.951066 -0.0675069 -0.301523 -0.951066 0.0675069 -0.301523 -0.951066 0.0675069 -0.301523 -0.951066 0.0675069 -0.301523 -0.951066 0.0675069 -0.789499 -0.587756 0.176733 -0.789499 -0.587756 0.176733 -0.789499 -0.587756 0.176733 -0.789499 -0.587756 0.176733 -0.975848 0 0.218451 -0.975848 0 0.218451 -0.975848 0 0.218451 -0.975848 0 0.218451 -0.789499 0.587756 0.176733 -0.789499 0.587756 0.176733 -0.789499 0.587756 0.176733 -0.789499 0.587756 0.176733 -0.301523 0.951066 0.0675069 -0.301523 0.951066 0.0675069 -0.301523 0.951066 0.0675069 -0.301523 0.951066 0.0675069 0.301523 0.951066 -0.0675069 0.301523 0.951066 -0.0675069 0.301523 0.951066 -0.0675069 0.301523 0.951066 -0.0675069 0.789499 0.587756 -0.176733 0.789499 0.587756 -0.176733 0.789499 0.587756 -0.176733 0.789499 0.587756 -0.176733 0.975848 0 -0.218451 0.975848 0 -0.218451 -0.296152 0 -0.955141 -0.296152 0 -0.955141 -0.296152 0 -0.955141 -0.296152 0 -0.955141 -0.296152 0 -0.955141 -0.296152 0 -0.955141 -0.296152 0 -0.955141 -0.296152 0 -0.955141 -0.296152 0 -0.955141 -0.296152 0 -0.955141 0.296152 0 0.955141 0.296152 0 0.955141 0.296152 0 0.955141 0.296152 0 0.955141 0.296152 0 0.955141 0.296152 0 0.955141 0.296152 0 0.955141 0.296152 0 0.955141 0.296152 0 0.955141 0.296152 0 0.955141 0.955141 0 -0.296152 0.955141 0 -0.296152 0.772745 -0.587756 -0.239601 0.772745 -0.587756 -0.239601 0.772745 -0.587756 -0.239601 0.772745 -0.587756 -0.239601 0.295144 -0.951062 -0.0914945 0.295144 -0.951062 -0.0914945 0.295144 -0.951062 -0.0914945 0.295144 -0.951062 -0.0914945 -0.295144 -0.951062 0.0914945 -0.295144 -0.951062 0.0914945 -0.295144 -0.951062 0.0914945 -0.295144 -0.951062 0.0914945 -0.772745 -0.587756 0.239601 -0.772745 -0.587756 0.239601 -0.772745 -0.587756 0.239601 -0.772745 -0.587756 0.239601 -0.955141 0 0.296152 -0.955141 0 0.296152 -0.955141 0 0.296152 -0.955141 0 0.296152 -0.772745 0.587756 0.239601 -0.772745 0.587756 0.239601 -0.772745 0.587756 0.239601 -0.772745 0.587756 0.239601 -0.295144 0.951062 0.0914945 -0.295144 0.951062 0.0914945 -0.295144 0.951062 0.0914945 -0.295144 0.951062 0.0914945 0.295144 0.951062 -0.0914945 0.295144 0.951062 -0.0914945 0.295144 0.951062 -0.0914945 0.295144 0.951062 -0.0914945 0.772745 0.587756 -0.239601 0.772745 0.587756 -0.239601 0.772745 0.587756 -0.239601 0.772745 0.587756 -0.239601 0.955141 0 -0.296152 0.955141 0 -0.296152 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.109897 0 -0.993943 -0.109897 0 -0.993943 -0.218451 0 -0.975848 -0.218451 0 -0.975848 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.218451 0 0.975848 -0.218451 0 0.975848 -0.109897 0 0.993943 -0.109897 0 0.993943 -0.109897 0 0.993943 -0.109897 0 0.993943 0 0 1 0 0 1 1 0 0 1 0 0 1 0 0 1 0 0 0 0 -1 0 0 -1 -0.109897 0 -0.993943 -0.109897 0 -0.993943 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.149754 0 -0.988723 -0.149754 0 -0.988723 -0.296152 0 -0.955141 -0.296152 0 -0.955141 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.296152 0 0.955141 -0.296152 0 0.955141 -0.149754 0 0.988723 -0.149754 0 0.988723 -0.149754 0 0.988723 -0.149754 0 0.988723 0 0 1 0 0 1 1 0 0 1 0 0 1 0 0 1 0 0 0 0 -1 0 0 -1 -0.149754 0 -0.988723 -0.149754 0 -0.988723 1 0 0 1 0 0 1 0 0 1 0 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.526353 0.850266 0 -0.261879 -0.965101 0 0 0.0577715 0.99833 -0.526353 0.850266 0 0 0.172796 0.984958 0.707083 0.70713 0 -0.215766 0.976445 0 0 0.0577715 0.99833 0.707083 0.70713 0 -0.215766 0.976445 0 0 0 -1 0.707083 0.70713 0 -0.70713 0.707083 0 0 0 -1 0.215766 0.976445 0 -0.70713 0.707083 0 0 0.0577715 0.99833 0.215766 0.976445 0 -0.70713 0.707083 0 0 0.172796 0.984958 0.526353 0.850266 0 0 0.0577715 0.99833 0.261879 -0.965101 0 0.573016 0.819544 0 -0.526353 0.850266 0 -0.261879 -0.965101 0 0 0 -1 -0.526353 0.850266 0 0 0 -1 0.707083 0.70713 0 -0.108524 0.994094 0 0 0.0577715 0.99833 0 0 -1 0.108524 0.994094 0 -0.70713 0.707083 0 0 0 -1 0.526353 0.850266 0 0 0 -1 0.261879 -0.965101 0 0.573016 0.819544 0 -0.132084 -0.991239 0 -0.132084 -0.991239 0 -0.526353 0.850266 0 0 0.0577715 0.99833 0 0.0867031 0.996234 0.707083 0.70713 0 -0.108524 0.994094 0 0.108524 0.994094 0 -0.70713 0.707083 0 0 0.0867031 0.996234 0 0.0577715 0.99833 0.526353 0.850266 0 0.549913 0.835222 0 0.549913 0.835222 0 0.132084 -0.991239 0 0.132084 -0.991239 0 -1.66535e-010 0.0577966 0.998328 0 0 -1 -0.499069 0.866562 0 0 0 1 -0.499069 -0.866562 0 0 0 -1 0 0 1 0.108524 -0.994094 0 0 0 -1 0.108524 0.994094 0 0 0 -1 0.651326 -0.758798 0 0 0 1 0.651326 0.758798 0 0 0 1 0.976438 -0.215796 0 0 0 -1 0.976438 0.215796 0 -1 0 0 0 -1 0 0 0 -1 -1 0 0 0 0 1 0 1 0 -0.383465 -0.923555 0 0 0 1 -0.383465 0.923555 0 0 0 -1 -0.307382 -0.951586 0 0 0 1 0 0 -1 0.910395 -0.413739 0 0 0 1 0.910395 0.413739 0 -0.653645 -0.756801 0 0 0 1 -0.653645 0.756801 0 0 0 -1 -0.307382 0.951586 0 0 0 -1 -0.108524 -0.994094 0 0 0 -1 -0.108524 0.994094 0 0 0 1 0 0 -1 0.307382 -0.951586 0 0 0 1 0.307382 0.951586 0 0 0 1 0.482253 -0.876032 0 0 0 -1 0.482253 0.876032 0 0 0 1 0.801557 -0.597919 0 0 0 -1 0.801557 0.597919 0 0 0 -1 1 0 0 0 0 1 1 0 0 -1 0 0 0 -1 0 -1 0 0 0 1 0 -0.383465 -0.923555 0 -0.383465 0.923555 0 -0.653645 -0.756801 0 -0.653645 0.756801 0 -0.499069 0.866562 0 -0.499069 -0.866562 0 -0.307382 -0.951586 0 -0.307382 0.951586 0 -0.108524 -0.994094 0 -0.108524 0.994094 0 0.108524 -0.994094 0 0.108524 0.994094 0 0.307382 -0.951586 0 0.307382 0.951586 0 0.482253 -0.876032 0 0.482253 0.876032 0 0.651326 -0.758798 0 0.651326 0.758798 0 0.801557 -0.597919 0 0.801557 0.597919 0 0.910395 -0.413739 0 0.910395 0.413739 0 0.976438 -0.215796 0 0.976438 0.215796 0 0 0 1 0 0 -1 -0.526353 -0.850266 0 -0.261879 0.965101 0 0 -0.0577715 0.99833 -0.526353 -0.850266 0 0 -0.172796 0.984958 0.707083 -0.70713 0 -0.215766 -0.976445 0 0 -0.0577715 0.99833 0.707083 -0.70713 0 -0.215766 -0.976445 0 0 0 -1 0.707083 -0.70713 0 -0.707083 -0.70713 0 0 0 -1 0.215735 -0.976452 0 -0.707083 -0.70713 0 0 -0.0577715 0.99833 0.215735 -0.976452 0 -0.707083 -0.70713 0 0 -0.172796 0.984958 0.526353 -0.850266 0 0 -0.0577715 0.99833 0.261879 0.965101 0 0.573016 -0.819544 0 -0.526353 -0.850266 0 -0.261879 0.965101 0 0 0 -1 -0.526353 -0.850266 0 0 0 -1 0.707083 -0.70713 0 -0.108524 -0.994094 0 0 0 -1 0 -0.0577715 0.99833 0.108524 -0.994094 0 -0.707083 -0.70713 0 0 0 -1 0.526353 -0.850266 0 0 0 -1 0.261879 0.965101 0 0.573016 -0.819544 0 -0.132084 0.991239 0 -0.132084 0.991239 0 -0.526353 -0.850266 0 0 -0.0577715 0.99833 0 -0.0867031 0.996234 0.707083 -0.70713 0 -0.108524 -0.994094 0 0.108524 -0.994094 0 -0.707083 -0.70713 0 0 -0.0867031 0.996234 0 -0.0577715 0.99833 0.526353 -0.850266 0 0.549913 -0.835222 0 0.549913 -0.835222 0 0.132084 0.991239 0 0.132084 0.991239 0 -9.87448e-010 -0.0577967 0.998328 0 0 -1 -1 0 0 -1 0 0 -0.96855 0.248817 0 0 -1 0 0 0 -1 -0.96855 0.248817 0 -0.96855 -0.248817 0 -0.17362 0 0.984813 -1 0 0 -1 0 0 -0.96855 -0.248817 0 0 0 -1 0 1 0 -0.96855 -0.248817 0 -0.17362 0 0.984813 0 -1 0 0 0 -1 0 0 1 0 1 0 -1 0 0 -0.258797 -0.965932 0 -1 0 0 -0.258797 0.965932 0 -1 0 0 -0.258797 0.965932 0 -1 0 0 -0.258797 -0.965932 0 -0.876166 0.482009 0 -0.876166 0.482009 0 -0.876166 -0.482009 0 -0.876166 -0.482009 0 -0.258797 0.965932 0 -0.258797 0.965932 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 0.876166 0.482009 0 0.948458 -0.316904 0 0.876166 0.482009 0 0.948458 -0.316904 0 0.876166 -0.482009 0 0.948458 0.316904 0 0.876166 -0.482009 0 0.948458 0.316904 0 0.258797 -0.965932 0 0.948458 -0.316904 0 0.258797 -0.965932 0 0.948458 -0.316904 0 0.258797 0.965932 0 0.948458 0.316904 0 0.258797 0.965932 0 0.948458 0.316904 0 0.876166 0.482009 0 0.876166 0.482009 0 0.876166 -0.482009 0 0.876166 -0.482009 0 0.0867031 0 0.996234 0.258797 -0.965932 0 0.0433058 0 0.999062 0.258797 0.965932 0 0.258797 -0.965932 0 1 0 0 0.172796 0 0.984958 0.258797 -0.965932 0 1 0 0 0.258797 0.965932 0 1 0 0 0.172796 0 0.984958 0.258797 0.965932 0 1 0 0 0 0 -1 0 0 -1 0 0 1 0 -1 0 0 1 0 -0.173648 -2.72113e-010 0.984808 -0.173648 -5.06036e-009 0.984808 -0.968546 -0.248834 0 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 -0.924377 0.381481 0 0 0 -1 -0.924377 0.381481 0 0 0 1 -0.924377 -0.381481 0 0 0 -1 -0.924377 -0.381481 0 0 0 1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 -1 0 1 0 0 0 -1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0.383465 -0.923555 0 0.383465 -0.923555 0 0.383465 0.923555 0 0.383465 0.923555 0 -0.621845 0.78314 0 -0.621845 0.78314 0 -0.621845 -0.78314 0 -0.621845 -0.78314 0 0.653645 -0.756801 0 0.653645 -0.756801 0 0.653645 0.756801 0 0.653645 0.756801 0 0 0 -1 0 0 1 0 0 -1 0.313456 -0.949603 0 0.313456 -0.949603 0 0.313456 0.949603 0 0.313456 0.949603 0 -0.273629 0.961835 0 0 0 -1 -0.273629 0.961835 0 -0.273629 -0.961835 0 0 0 -1 -0.273629 -0.961835 0 0 0 1 0 0 -1 0.273629 -0.961835 0 0 0 1 0.273629 -0.961835 0 0 0 -1 0.273629 0.961835 0 0.273629 0.961835 0 -0.295053 -0.955481 0 -0.295053 -0.955481 0 -0.295053 0.955481 0 -0.295053 0.955481 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0.549913 0.835222 0 0.549913 0.835222 0 0.549913 -0.835222 0 0 0 1 0.549913 -0.835222 0 0 0 1 -0.651326 -0.758798 0 -0.651326 -0.758798 0 -0.651326 0.758798 0 -0.651326 0.758798 0 0.630146 -0.776477 0 0.630146 -0.776477 0 0.630146 0.776477 0 0.630146 0.776477 0 -0.801557 0.597919 0 -0.801557 0.597919 0 -0.801557 -0.597919 0 -0.801557 -0.597919 0 0.745292 -0.666738 0 0.745292 -0.666738 0 0.745292 0.666738 0 0.745292 0.666738 0 -0.910395 0.413739 0 -0.910395 0.413739 0 -0.910395 -0.413739 0 -0.910395 -0.413739 0 -0.976438 0.215796 0 -0.976438 0.215796 0 -0.976438 -0.215796 0 -0.976438 -0.215796 0 0.826308 0.563219 0 0.826308 0.563219 0 0.826308 -0.563219 0 0.826308 -0.563219 0 -1 0 0 -1 0 0 0 0 -1 0 0 -1 0 0 -1 0.961835 -0.273629 0 0.961835 -0.273629 0 0 0 -1 0.961835 0.273629 0 0.961835 0.273629 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 -1 0 0 -1 0 0 -1 + + + + + + + + + + + + + + +

0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9

+

10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19

+

20 20 21 21 22 22 23 23

+

24 24 25 25 26 26 27 27

+

28 28 29 29 30 30 31 31

+

32 32 33 33 34 34 35 35

+

36 36 37 37 38 38 39 39

+

40 40 41 41 42 42 43 43

+

44 44 45 45 46 46 47 47

+

48 48 49 49 50 50 51 51

+

52 52 53 53 54 54 55 55

+

56 56 57 57 58 58 59 59

+
+ + + +

60 60 61 61 62 62 63 63 64 64 65 65 66 66 67 67 68 68 69 69

+

70 70 71 71 72 72 73 73 74 74 75 75 76 76 77 77 78 78 79 79

+

80 80 81 81 82 82 83 83

+

84 84 85 85 86 86 87 87

+

88 88 89 89 90 90 91 91

+

92 92 93 93 94 94 95 95

+

96 96 97 97 98 98 99 99

+

100 100 101 101 102 102 103 103

+

104 104 105 105 106 106 107 107

+

108 108 109 109 110 110 111 111

+

112 112 113 113 114 114 115 115

+

116 116 117 117 118 118 119 119

+
+ + + +

120 120 121 121 122 122 123 123 124 124 125 125

+

126 126 127 127 128 128 129 129 130 130 131 131

+

132 132 133 133 134 134 135 135

+

136 136 137 137 138 138 139 139

+

140 140 141 141 142 142 143 143

+

144 144 145 145 146 146 147 147

+

148 148 149 149 150 150 151 151

+

152 152 153 153 154 154 155 155

+
+ + + +

156 156 157 157 158 158 159 159 160 160 161 161

+

162 162 163 163 164 164 165 165 166 166 167 167

+

168 168 169 169 170 170 171 171

+

172 172 173 173 174 174 175 175

+

176 176 177 177 178 178 179 179

+

180 180 181 181 182 182 183 183

+

184 184 185 185 186 186 187 187

+

188 188 189 189 190 190 191 191

+
+ + + +

192 192 193 193 194 194 195 195

+

196 196 197 197 198 198 199 199

+

200 200 201 201 202 202 203 203

+

204 204 205 205 206 206 207 207

+

208 208 209 209 210 210 211 211

+

212 212 213 213 214 214 215 215

+
+ + + +

267 272 265 272 233 272 269 272 267 272 233 272 224 272 261 272 259 272

+
+ + + +

271 272 239 272 269 272 233 272

+

257 272 271 272 233 272 263 272 247 272 224 272

+

224 272 259 272 218 272 257 272

+
+ + + +

230 273 252 273 268 273

+
+ + + +

256 273 242 273 245 273 227 273

+

270 273 256 273 227 273 262 273 249 273 230 273

+

230 273 268 273 255 273 270 273

+
+ + + +

260 260 220 220 259 259 266 266 235 235 265 265

+
+ + + +

234 234 250 250 228 228 231 231 264 264

+

233 233 230 230 249 249 263 263

+

263 263 249 249 262 262 246 246

+

246 246 262 262 225 225 222 222

+

224 224 227 227 245 245 221 221 261 261

+

219 219 243 243 240 240 216 216 258 258

+

217 217 241 241 256 256 257 257

+

257 257 256 256 270 270 271 271

+

271 271 270 270 254 254 238 238

+

239 239 255 255 268 268 269 269

+

269 269 268 268 252 252 236 236 267 267

+
+ + + +

273 360 337 360 335 360

+
+ + + +

335 360 293 360 331 360 295 360

+

295 360 305 360 339 360 299 360 342 360 277 360 346 360 319 360 350 360 323 360 354 360 285 360 329 360 357 360 303 360 353 360 283 360 349 360 317 360 345 360 313 360 341 360 273 360 335 360

+
+ + + +

275 361 336 361 334 361

+
+ + + +

334 361 290 361 333 361 297 361

+

297 361 307 361 338 361 309 361 343 361 279 361 347 361 321 361 351 361 325 361 355 361 287 361 327 361 356 361 301 361 352 361 281 361 348 361 315 361 344 361 311 361 340 361 275 361 334 361

+
+ + + +

337 339 306 308 296 298 335 337

+

335 337 296 298 333 335 293 295

+

291 293 332 334 288 290 330 332

+

331 333 289 291 334 336 294 296

+

294 296 334 336 336 338 304 306

+

304 306 336 338 274 276 339 341

+

339 341 274 276 340 342 298 300

+

298 300 340 342 310 312 342 344

+

342 344 310 312 344 346 277 279

+

277 279 344 346 315 317 346 348

+

346 348 315 317 348 350 319 321

+

319 321 348 350 281 283 350 352

+

350 352 281 283 352 354 323 325

+

323 325 352 354 301 303 354 356

+

354 356 301 303 356 358 285 287

+

285 287 356 358 327 329 329 331

+

329 331 327 329 287 289 357 359

+

357 359 287 289 355 357 303 305

+

303 305 355 357 325 327 353 355

+

353 355 325 327 351 353 283 285

+

283 285 351 353 321 323 349 351

+

349 351 321 323 347 349 317 319

+

317 319 347 349 279 281 345 347

+

345 347 279 281 343 345 312 314

+

312 314 343 345 308 310 341 343

+

341 343 308 310 338 340 272 274

+

272 274 338 340 306 308 337 339

+
+ + + +

401 418 403 418 366 418 375 418 407 418 409 418 375 418 409 418 411 418

+
+ + + +

399 418 360 418 401 418 366 418

+

413 418 399 418 366 418 404 418 391 418 375 418

+

375 418 411 418 381 418 413 418

+
+ + + +

410 419 394 419 372 419

+
+ + + +

369 419 387 419 384 419 398 419

+

398 419 412 419 372 419 405 419 389 419 369 419

+

412 419 397 419 410 419 372 419

+
+ + + +

401 405 362 366 402 406 407 411 377 381 408 412

+
+ + + +

409 413 378 382 394 398 410 414 411 415

+

411 415 410 414 397 401 381 385

+

380 384 396 400 412 416 413 417

+

398 402 399 403 413 417 412 416

+

399 403 398 402 383 387 359 363

+

400 404 358 362 382 386 385 389 361 365

+

403 407 363 367 387 391 369 373 366 370

+

364 368 367 371 388 392 404 408

+

404 408 388 392 405 409 391 395

+

391 395 405 409 372 376 375 379

+

406 410 373 377 370 374 392 396 376 380

+
+ + + +

462 489 479 489 474 489 462 489 474 489 458 489 462 489 458 489 450 489 454 489 462 489 450 489

+
+ + + +

450 489 465 489 441 489 418 489

+

426 489 443 489 467 489 454 489

+

418 489 426 489 454 489 450 489

+
+ + + +

447 490 434 490 436 490 447 490 436 490 445 490

+
+ + + +

460 491 470 491 472 491 483 491 466 491 452 491 456 491 468 491 486 491 452 491 472 491 464 491 472 491 452 491 460 491

+
+ + + +

464 491 456 491 486 491 483 491 452 491

+
+ + + +

484 492 442 492 441 492 484 492 441 492 465 492

+
+ + + +

465 492 466 492 483 492 484 492

+
+ + + +

443 493 444 493 485 493 467 493 443 493 485 493

+
+ + + +

485 493 486 493 468 493 467 493

+
+ + + +

485 494 444 494 428 494 421 494 442 494 484 494

+
+ + + +

421 494 484 494 485 494 428 494

+
+ + + +

446 495 438 495 440 495 446 495 440 495 448 495

+
+ + + +

424 430 427 433 444 450 443 449

+

414 420 415 421 427 433 424 430

+

436 442 438 444 446 452 445 451

+

433 439 439 445 437 443 435 441

+

447 453 448 454 440 446 434 440

+

416 422 419 425 423 429 422 428

+

441 447 442 448 419 425 416 422

+
+ + + +

424 430 427 433 444 450 443 449

+

414 420 415 421 427 433 424 430

+

436 442 438 444 446 452 445 451

+

433 439 439 445 437 443 435 441

+

447 453 448 454 440 446 434 440

+

416 422 419 425 423 429 422 428

+

441 447 442 448 419 425 416 422

+

480 486 471 477 469 475 475 481

+

467 473 468 474 455 461 453 459

+

454 460 456 462 464 470 462 468

+

461 467 463 469 472 478 481 487 478 484

+

479 485 482 488 477 483 474 480

+

473 479 476 482 470 476 459 465 457 463

+

458 464 460 466 452 458 450 456

+

449 455 451 457 466 472 465 471

+
+ + + +

426 496 428 496 444 496 443 496

+

445 496 446 496 428 496 426 496

+

436 496 438 496 446 496 445 496

+

434 496 440 496 438 496 436 496

+

447 496 448 496 440 496 434 496

+

418 496 421 496 448 496 447 496

+

441 496 442 496 421 496 418 496

+

482 496 472 496 470 496 477 496

+

467 496 468 496 456 496 454 496

+

454 496 456 496 464 496 462 496

+

462 496 464 496 472 496 482 496 479 496

+

479 496 482 496 477 496 474 496

+

474 496 477 496 470 496 460 496 458 496

+

458 496 460 496 452 496 450 496

+

450 496 452 496 466 496 465 496

+

484 496 483 496 486 496 485 496

+
+ + + +

487 497 488 497 489 497 490 497 491 497

+
+ + + +

492 498 493 498 494 498 495 498 496 498

+
+ + + +

497 499 498 499 499 499 500 499 501 499

+
+ + + +

502 500 503 500 504 500 505 500 506 500

+
+ + + +

507 501 508 501 509 501 510 501 511 501

+
+ + + +

512 502 513 502 514 502 515 502

+
+ + + +

516 503 517 503 518 503 519 503

+
+ + + +

520 504 521 504 522 504 523 504

+
+ + + +

524 505 525 505 526 505 527 505

+
+ + + +

528 506 529 506 530 506 531 506

+
+ + + +

532 507 533 507 534 507 535 507

+
+ + + +

536 508 537 508 538 508 539 508

+
+ + + +

540 509 541 509 542 509 543 509

+
+ + + +

544 510 545 510 546 510 547 510

+
+ + + +

548 511 549 511 550 511

+
+ + + +

551 512 552 512 553 512

+
+ + + +

554 513 555 513 556 513 557 513 558 513 559 513

+
+ + + +

566 514 567 514 568 514 569 514 570 514 571 514

+
+ + + +

560 514 561 514 562 514 563 514 564 514 565 514

+
+ + + +

572 515 573 515 574 515

+
+ + + +

715 621 717 621 716 621 727 621 729 621 728 621 743 621 745 621 744 621 743 621 653 621 661 621 665 621 742 621 661 621

+
+ + + +

708 621 629 621 715 621 716 621 637 621 627 621 710 621

+

715 621 629 621 643 621 727 621 728 621 649 621 717 621

+

653 621 743 621 744 621 657 621 729 621 727 621 643 621

+

743 621 661 621 742 621 760 621 679 621 667 621 745 621

+

754 621 759 621 760 621 756 621

+

754 621 671 621 748 621 758 621 759 621

+

665 621 671 621 754 621 755 621

+

755 621 756 621 742 621 665 621

+
+ + + +

698 622 697 622 604 622

+
+ + + +

708 622 709 622 707 622 611 622

+

611 622 707 622 702 622 600 622 699 622 698 622 604 622

+
+ + + +

651 623 720 623 740 623 740 623 659 623 651 623 753 623 748 623 663 623

+
+ + + +

659 623 740 623 746 623 669 623 676 623 757 623 741 623

+

663 623 739 623 737 623 659 623 741 623

+

663 623 741 623 757 623 758 623 753 623

+
+ + + +

713 624 714 624 631 624

+
+ + + +

706 624 613 624 703 624 701 624 700 624

+

713 624 631 624 613 624 706 624

+
+ + + +

634 625 712 625 628 625 603 625 694 625 695 625

+
+ + + +

610 625 705 625 634 625 628 625

+

705 625 610 625 603 625 695 625 696 625 599 625 609 625

+
+ + + +

652 626 718 626 735 626 735 626 733 626 660 626 735 626 660 626 652 626

+
+ + + +

630 627 711 627 633 627 692 627 693 627 605 627

+
+ + + +

612 627 630 627 633 627 704 627

+

612 627 704 627 607 627 601 627 691 627 692 627 605 627

+
+ + + +

662 628 747 628 749 628

+
+ + + +

672 628 668 628 730 628 732 628 736 628 738 628 662 628 749 628

+

751 628 664 628 733 628 734 628 752 628

+

664 628 751 628 750 628 670 628

+

750 628 749 628 747 628 670 628

+
+ + + +

658 629 732 629 731 629 731 629 719 629 650 629 731 629 650 629 658 629

+
+ + + +

598 630 594 630 683 630 682 630 689 630 690 630

+

590 630 596 630 686 630 684 630

+

590 630 684 630 683 630 594 630

+
+ + + +

592 631 597 631 685 631 680 631

+

687 631 595 631 588 631 681 631 584 631 688 631

+

681 631 588 631 592 631 680 631

+
+ + + +

635 632 636 632 648 632 726 632 725 632 642 632 712 632

+

725 632 724 632 718 632 642 632

+
+ + + +

711 633 644 633 722 633 721 633 646 633 638 633 632 633

+

644 633 719 633 723 633 722 633

+
+ + + +

576 517 584 525 583 524 580 521

+

641 582 608 549 620 561 623 564 639 580

+

673 614 677 618 674 615 672 613

+

600 541 599 540 575 516 577 518

+

616 557 614 555 599 540 600 541

+

609 550 615 556 625 566 635 576 634 575

+

627 568 626 567 614 555 616 557

+

637 578 636 577 626 567 627 568

+

649 590 648 589 636 577 637 578

+

657 598 656 597 648 589 649 590

+

667 608 666 607 656 597 657 598

+

679 620 678 619 666 607 667 608

+

678 619 679 620 676 617 675 616

+

669 610 668 609 675 616 676 617

+

655 596 654 595 668 609 669 610

+

647 588 646 587 654 595 655 596

+

640 581 638 579 646 587 647 588

+

624 565 622 563 638 579 640 581

+

607 548 633 574 632 573 621 562 618 559

+

619 560 617 558 622 563 624 565

+

602 543 601 542 617 558 619 560

+

581 522 579 520 601 542 602 543

+

579 520 581 522 577 518 575 516

+

586 527 578 519 582 523 585 526

+
+ + + +

576 517 584 525 583 524 580 521

+

641 582 608 549 620 561 623 564 639 580

+

673 614 677 618 674 615 672 613

+

600 541 599 540 575 516 577 518

+

616 557 614 555 599 540 600 541

+

609 550 615 556 625 566 635 576 634 575

+

627 568 626 567 614 555 616 557

+

637 578 636 577 626 567 627 568

+

649 590 648 589 636 577 637 578

+

657 598 656 597 648 589 649 590

+

667 608 666 607 656 597 657 598

+

679 620 678 619 666 607 667 608

+

678 619 679 620 676 617 675 616

+

669 610 668 609 675 616 676 617

+

655 596 654 595 668 609 669 610

+

647 588 646 587 654 595 655 596

+

640 581 638 579 646 587 647 588

+

624 565 622 563 638 579 640 581

+

607 548 633 574 632 573 621 562 618 559

+

619 560 617 558 622 563 624 565

+

602 543 601 542 617 558 619 560

+

581 522 579 520 601 542 602 543

+

579 520 581 522 577 518 575 516

+

586 527 578 519 582 523 585 526

+

587 528 595 536 596 537 589 530

+

592 533 588 529 590 531 594 535

+

597 538 591 532 593 534 598 539

+

605 546 597 538 598 539 606 547

+

612 553 605 546 606 547 613 554

+

630 571 612 553 613 554 631 572

+

644 585 630 571 631 572 645 586

+

650 591 644 585 645 586 651 592

+

658 599 650 591 651 592 659 600

+

658 599 659 600 663 604 662 603

+

670 611 662 603 663 604 671 612

+

664 605 670 611 671 612 665 606

+

664 605 665 606 661 602 660 601

+

652 593 660 601 661 602 653 594

+

642 583 652 593 653 594 643 584

+

628 569 642 583 643 584 629 570

+

610 551 628 569 629 570 611 552

+

603 544 610 551 611 552 604 545

+

595 536 603 544 604 545 596 537

+
+
+ + + CAT3DBagRep + + +
+ + + + -100 -150 -186 -440 -150 -186 -440 -170 -186 -100 -170 -186 -405 -150 -346 -100 -150 -346 -100 -170 -346 -405 -170 -346 -440 -150 -186 -405 -150 -346 -405 -170 -346 -440 -170 -186 -405 -150 -346 -440 -150 -186 -100 -150 -186 -100 -150 -346 -100 -150 -346 -100 -150 -186 -100 -170 -186 -100 -170 -346 -100 -170 -346 -100 -170 -186 -440 -170 -186 -405 -170 -346 314 122 103 314 122 -89 314 109 -89 314 109 103 506 122 103 314 122 103 314 109 103 506 109 103 506 122 -89 506 122 103 506 109 103 506 109 -89 314 122 -89 506 122 -89 506 109 -89 314 109 -89 314 109 -89 506 109 -89 506 109 103 314 109 103 314 284 33.22 330.38 284 33.22 330.38 284 -19.7 314 284 -19.7 332.5 284 -19.7 330.38 284 -19.7 330.38 284 33.22 332.5 284 42.1165 332.5 284 42.1165 330.38 284 33.22 314 284 33.22 314 284 59.68 330.38 284 59.68 330.38 284 59.68 356.84 284 59.68 356.84 284 56.1693 332.5 284 42.1165 314 122 -89 314 122 -59 314 122 -59 314 122 -59 314 122 73 314 122 73 314 122 73 314 122 103 314 284 -59 314 284 -59 314 284 73 314 284 73 344 122 -89 344 122 -89 344 122 -89 344 122 -59 344 122 -59 344 122 -59 344 122 73 344 122 73 344 122 73 344 122 103 344 122 103 344 122 103 344 284 -89 344 284 -89 344 284 -59 344 284 -59 344 284 73 344 284 73 344 284 103 344 284 103 476 122 -89 476 122 -89 476 122 -89 476 122 -59 476 122 -59 476 122 -59 476 122 73 476 122 73 476 122 73 476 122 103 476 122 103 476 122 103 476 284 -89 476 284 -89 476 284 -59 476 284 -59 476 284 73 476 284 73 476 284 103 476 284 103 506 122 -89 506 122 -59 506 122 -59 506 122 -59 506 122 73 506 122 73 506 122 73 506 122 103 506 284 -59 506 284 -59 506 284 73 506 284 73 314 284 -46.16 314 284 59.68 356.84 284 -89 356.84 284 -46.16 356.84 284 59.68 356.84 284 103 462.68 284 -89 462.68 284 -46.16 462.68 284 59.68 462.68 284 103 506 284 -46.16 506 284 59.68 332.5 284 -28.1165 332.5 284 -28.1165 332.5 284 42.1165 332.5 284 42.1165 332.5 327 -28.1165 332.5 327 -28.1165 332.5 327 42.1165 332.5 327 42.1165 359.37 284 -43.6299 359.37 284 57.6299 359.37 327 -43.6299 359.37 327 57.6299 374.883 284 -70.5 374.883 284 -70.5 374.883 284 84.5 374.883 284 84.5 374.883 327 -70.5 374.883 327 -70.5 374.883 327 84.5 374.883 327 84.5 445.117 284 -70.5 445.117 284 -70.5 445.117 284 84.5 445.117 284 84.5 445.117 327 -70.5 445.117 327 -70.5 445.117 327 84.5 445.117 327 84.5 460.63 284 -43.6299 460.63 284 57.6299 460.63 327 -43.6299 460.63 327 57.6299 487.5 284 -28.1165 487.5 284 -28.1165 487.5 284 42.1165 487.5 284 42.1165 487.5 327 -28.1165 487.5 327 -28.1165 487.5 327 42.1165 487.5 327 42.1165 314 284 -46.16 314 284 -19.7 330.38 284 -46.16 332.5 284 -19.7 345.337 327 49.5281 346.009 327 -35.9156 356.84 284 -89 356.84 284 -72.62 356.84 284 -46.16 356.84 284 56.1693 356.84 284 86.14 356.84 284 103 360.831 284 -46.16 367.084 327 -35.9156 367.084 327 49.5281 436.22 284 -89 436.22 284 -72.62 452.528 327 -35.9156 452.528 327 49.5281 459.169 284 -46.16 459.446 284 59.68 462.68 284 -89 462.68 284 -72.62 462.68 284 -46.16 462.68 284 59.68 462.68 284 86.14 462.68 284 103 489.14 284 -46.16 489.14 284 59.68 506 284 -46.16 506 284 59.68 392.5 327 7 392.5 344 7 392.5 344 7 394.845 327 -1.75 394.845 327 15.75 394.845 344 -1.75 394.845 344 -1.75 394.845 344 15.75 394.845 344 15.75 401.25 327 -8.15546 401.25 327 22.1555 401.25 344 -8.15546 401.25 344 -8.15546 401.25 344 22.1555 401.25 344 22.1555 410 327 -10.5 410 327 24.5 410 344 -10.5 410 344 -10.5 410 344 24.5 410 344 24.5 418.75 327 -8.15546 418.75 327 22.1555 418.75 344 -8.15546 418.75 344 -8.15546 418.75 344 22.1555 418.75 344 22.1555 425.155 327 -1.75 425.155 327 15.75 425.155 344 -1.75 425.155 344 -1.75 425.155 344 15.75 425.155 344 15.75 427.5 327 7 427.5 344 7 427.5 344 7 332.5 327 -28.1165 332.5 327 6.80627 332.5 327 42.1165 345.337 327 49.5281 346.009 327 -35.9156 367.084 327 6.80627 409.806 327 -35.9156 409.806 327 49.5281 452.528 327 -35.9156 452.528 327 6.80627 452.528 327 49.5281 -143 -96 -173 -143 96 -173 -143 96 -186 -143 -96 -186 49 -96 -173 -143 -96 -173 -143 -96 -186 49 -96 -186 49 96 -173 49 -96 -173 49 -96 -186 49 96 -186 -143 96 -173 49 96 -173 49 96 -186 -143 96 -186 -143 96 -186 49 96 -186 49 -96 -186 -143 -96 -186 -73.22 96 -11 -73.22 79.62 -11 -20.3 79.62 -11 -20.3 96 -11 -20.3 77.5 -11 -20.3 79.62 -11 -73.22 79.62 -11 -82.1165 77.5 -11 -82.1165 77.5 -11 -73.22 79.62 -11 -73.22 96 -11 -99.68 96 -11 -99.68 79.62 -11 -99.68 79.62 -11 -99.68 53.16 -11 -96.1692 53.16 -11 -82.1165 77.5 -11 -143 -96 -173 -143 -66 -173 -143 -66 -173 -143 -66 -173 -143 -66 -11 -143 -66 -11 -143 66 -173 -143 66 -173 -143 66 -173 -143 66 -11 -143 66 -11 -143 96 -173 -113 -96 -173 -113 -96 -173 -113 -96 -173 -113 -96 -11 -113 -96 -11 -113 -66 -173 -113 -66 -173 -113 -66 -173 -113 -66 -11 -113 -66 -11 -113 66 -173 -113 66 -173 -113 66 -173 -113 66 -11 -113 66 -11 -113 96 -173 -113 96 -173 -113 96 -173 -113 96 -11 -113 96 -11 19 -96 -173 19 -96 -173 19 -96 -173 19 -96 -11 19 -96 -11 19 -66 -173 19 -66 -173 19 -66 -173 19 -66 -11 19 -66 -11 19 66 -173 19 66 -173 19 66 -173 19 66 -11 19 66 -11 19 96 -173 19 96 -173 19 96 -173 19 96 -11 19 96 -11 49 -96 -173 49 -66 -173 49 -66 -173 49 -66 -173 49 -66 -11 49 -66 -11 49 66 -173 49 66 -173 49 66 -173 49 66 -11 49 66 -11 49 96 -173 -143 -52.68 -11 -143 53.16 -11 -99.68 -96 -11 -99.68 -52.68 -11 -99.68 53.16 -11 -99.68 96 -11 6.16 -96 -11 6.16 -52.68 -11 6.16 53.16 -11 6.16 96 -11 49 -52.68 -11 49 53.16 -11 -124.5 -35.1165 -11 -124.5 -35.1165 -11 -124.5 -35.1165 32 -124.5 -35.1165 32 -124.5 35.1165 -11 -124.5 35.1165 -11 -124.5 35.1165 32 -124.5 35.1165 32 -97.6299 -50.6299 -11 -97.6299 -50.6299 32 -97.6299 50.6299 -11 -97.6299 50.6299 32 -82.1165 -77.5 -11 -82.1165 -77.5 -11 -82.1165 -77.5 32 -82.1165 -77.5 32 -82.1165 77.5 -11 -82.1165 77.5 -11 -82.1165 77.5 32 -82.1165 77.5 32 -11.8835 -77.5 -11 -11.8835 -77.5 -11 -11.8835 -77.5 32 -11.8835 -77.5 32 -11.8835 77.5 -11 -11.8835 77.5 -11 -11.8835 77.5 32 -11.8835 77.5 32 3.62994 -50.6299 -11 3.62994 -50.6299 32 3.62994 50.6299 -11 3.62994 50.6299 32 30.5 -35.1165 -11 30.5 -35.1165 -11 30.5 -35.1165 32 30.5 -35.1165 32 30.5 35.1165 -11 30.5 35.1165 -11 30.5 35.1165 32 30.5 35.1165 32 -143 -52.68 -11 -143 53.16 -11 -126.14 -52.68 -11 -126.14 53.16 -11 -99.68 -96 -11 -99.68 -79.14 -11 -99.68 -52.68 -11 -99.68 -49.4463 -11 -96.1692 53.16 -11 -89.5281 -42.5281 32 -89.5281 42.9156 32 -89.5281 64.6627 32 -20.3 77.5 -11 -20.3 96 -11 -4.08437 -42.5281 32 -4.08437 42.9156 32 -4.08437 63.9915 32 6.16 -96 -11 6.16 -79.14 -11 6.16 -52.68 -11 6.16 -49.1692 -11 6.16 49.1692 -11 6.16 53.16 -11 6.16 79.62 -11 6.16 96 -11 32.62 -52.68 -11 32.62 -26.22 -11 32.62 53.16 -11 49 -52.68 -11 49 -26.22 -11 49 53.16 -11 -89.5281 -42.5281 32 -89.5281 0.193748 32 -82.1165 77.5 32 -64.5 0 49 -64.5 0 49 -62.1554 -8.75 49 -62.1554 -8.75 49 -62.1554 8.75 49 -62.1554 8.75 49 -55.75 -15.1554 49 -55.75 -15.1554 49 -55.75 15.1554 49 -55.75 15.1554 49 -47 -17.5 49 -47 -17.5 49 -47 17.5 49 -47 17.5 49 -46.8063 -42.5281 32 -46.8063 42.9156 32 -46.8063 77.5 32 -38.25 -15.1554 49 -38.25 -15.1554 49 -38.25 15.1554 49 -38.25 15.1554 49 -31.8446 -8.75 49 -31.8446 -8.75 49 -31.8446 8.75 32 -31.8446 8.75 32 -31.8446 8.75 49 -31.8446 8.75 49 -29.5 0 49 -29.5 0 49 -11.8835 77.5 32 -4.08437 -42.5281 32 -4.08437 0.193748 32 -64.5 0 32 -62.1554 -8.75 32 -62.1554 8.75 32 -55.75 -15.1554 32 -55.75 15.1554 32 -47 -17.5 32 -47 17.5 32 -38.25 -15.1554 32 -38.25 15.1554 32 -31.8446 -8.75 32 -29.5 0 32 -89.5281 64.6627 32 -4.08437 63.9915 32 565.488 -155 -217.084 569.097 -155 -217.084 585.902 -155 -204.189 585.902 -155 -194.862 565.488 -155 -194.862 548.5 -155 246.889 545.074 -155 248.308 545.074 -155 225.149 585.902 -155 193.821 585.902 -155 218.189 198.036 -155 150.135 218.45 -155 176.739 218.45 -155 205.139 217.09 -155 205.139 214.131 -155 202.869 198.036 -155 181.893 657.351 -155 -83.7508 648.741 -155 -83.7508 647.144 -155 -87.6068 647.144 -155 -94.8619 657.351 -155 -94.8619 259.278 -155 -223.511 259.278 -155 -199.142 239.22 -155 -183.751 238.864 -155 -183.751 238.864 -155 -207.847 463.418 -155 271.805 463.418 -155 260.694 504.246 -155 260.694 504.246 -155 265.22 488.346 -155 271.805 278.004 -155 249.583 271.5 -155 246.889 260.531 -155 238.472 300.106 -155 238.472 300.106 -155 249.583 200.23 103 -146.389 219.283 103 -146.389 219.283 103 -184.563 210.828 103 -184.563 200.23 103 -170.752 214.131 103 -188.869 210.828 103 -184.563 257.388 103 -184.563 257.388 103 -203.65 233.395 103 -203.65 659.534 103 -108.215 657.492 103 -108.215 657.492 103 -31.8666 676.545 103 -31.8666 676.545 103 -67.1472 447.914 103 254.439 447.914 103 273.526 484.193 103 273.526 524.124 103 256.986 524.124 103 254.439 676.545 103 44.4816 657.492 103 44.4816 657.492 103 120.83 660.108 103 120.83 676.545 103 81.1472 181.178 103 120.83 159.892 103 120.83 170.111 103 145.5 180.473 103 159.004 181.178 103 159.004 638.44 103 -108.215 659.534 103 -108.215 649.889 103 -131.5 638.464 103 -146.389 638.44 103 -146.389 638.44 103 159.004 639.527 103 159.004 649.889 103 145.5 660.108 103 120.83 638.44 103 120.83 573.949 102 227.361 563.389 102 227.361 563.389 102 205.139 601.563 102 205.139 601.563 102 206.172 143.474 102 49.5828 162.561 102 49.5828 162.561 102 116.25 157.995 102 116.25 143.474 102 81.1928 219.822 102 207.235 214.131 102 202.869 181.77 102 160.694 219.26 102 160.694 219.822 102 161.426 592.08 -155 189.08 626.73 -155 143.923 626.73 -155 175.681 612.652 -155 194.028 606.316 -155 194.028 585.902 -155 193.821 592.08 -155 189.08 606.316 -155 194.028 585.902 -155 194.028 657.492 103 -108.215 638.44 103 -108.215 638.44 103 -81.418 648.584 103 -56.9283 657.492 103 -50.9536 648.584 103 -56.9283 651.883 103 -31.8666 657.492 103 -31.8666 657.492 103 -50.9536 198.036 -155 181.893 177.622 -155 155.289 177.622 -155 149.583 198.036 -155 149.583 95.9662 -155 -305.973 177.622 -155 -305.973 177.622 -155 -128.195 95.9662 -155 -128.195 612.652 -155 194.028 605.869 -155 202.869 585.902 -155 218.189 585.902 -155 194.028 565.488 -155 -195.485 538.75 -155 -216.002 545.074 -155 -217.084 565.488 -155 -217.084 545.074 -155 -217.084 538.75 -155 -216.002 482.486 -155 -239.307 533.007 -155 -239.307 545.074 -155 -234.308 545.074 -155 -217.084 545.074 -155 -234.308 548.5 -155 -232.889 569.097 -155 -217.084 657.351 -155 -94.8619 665.065 -155 -94.8619 667.366 -155 -89.3064 657.351 -155 -89.3064 657.351 -155 -83.7508 657.351 -155 -89.3064 667.558 -155 -89.3064 667.558 -155 -83.7508 95.9662 -155 -305.973 95.9662 -155 -360 196 -155 -360 196 -155 -305.973 177.622 -155 -305.973 196 -155 -305.973 196 -155 -165.239 177.622 -155 -161.529 198.036 -155 -150.418 177.622 -155 -150.418 177.622 -155 -161.529 196 -155 -165.239 198.036 -155 -161.529 198.036 -155 -161.529 196 -155 -165.239 201.679 -155 -172.64 226.048 -155 -172.64 217.522 -155 -161.529 198.036 -155 -161.529 217.522 -155 -161.529 208.996 -155 -150.418 198.036 -155 -150.418 177.622 -155 -150.418 208.996 -155 -150.418 191.944 -155 -128.195 177.622 -155 -128.195 504.246 -155 244.293 504.246 -155 260.694 483.832 -155 260.694 476.646 -155 255.726 483.832 -155 260.694 463.418 -155 260.694 463.418 -155 257.467 476.646 -155 255.726 217.09 -155 205.139 248.848 -155 205.139 281.25 -155 230.002 279.692 -155 238.472 260.531 -155 238.472 281.25 -155 230.002 300.106 -155 237.812 300.106 -155 238.472 279.692 -155 238.472 600.335 103 -184.563 600.335 103 -193.115 562.229 103 -222.354 562.229 103 -184.563 152.599 103 73.1121 152.599 103 63.5686 141.447 103 63.5686 142.704 103 73.1121 143.332 103 77.8838 147.836 103 77.8838 147.836 103 73.1121 142.704 103 73.1121 144.263 103 80.2697 145.454 103 80.2697 145.454 103 77.8838 144.263 103 77.8838 145.454 103 82.6556 147.836 103 82.6556 147.836 103 77.8838 145.454 103 77.8838 147.836 103 82.6556 152.599 103 82.6556 152.599 103 73.1121 147.836 103 73.1121 152.599 103 82.6556 162.125 103 82.6556 162.125 103 63.5686 152.599 103 63.5686 162.125 103 63.5686 162.125 103 44.4816 138.935 103 44.4816 141.447 103 63.5686 171.416 103 70.9283 162.125 103 63.5686 162.125 103 120.83 181.178 103 120.83 181.178 103 94.4946 162.125 103 63.5686 171.416 103 70.9283 167.935 103 44.4816 162.125 103 44.4816 159.892 103 120.83 162.125 103 120.83 162.125 103 82.6556 144.08 103 82.6556 209.765 103 197.178 219.283 103 197.178 219.283 103 178.091 195.119 103 178.091 473.928 103 245.584 466.966 103 254.439 524.124 103 254.439 524.124 103 235.352 498.63 103 235.352 466.966 103 254.439 473.928 103 245.584 447.914 103 249.009 447.914 103 254.439 657.492 103 63.5686 648.584 103 70.9283 638.44 103 95.418 638.44 103 120.83 657.492 103 120.83 648.584 103 70.9283 657.492 103 63.5686 657.492 103 44.4816 652.065 103 44.4816 581.282 103 221.735 605.869 103 202.869 610.235 103 197.178 581.282 103 197.178 563.536 103 235.352 524.124 103 235.352 524.124 103 256.986 548.5 103 246.889 143.073 103 78.6953 143.073 103 80.2697 144.263 103 80.2697 144.263 103 79.0767 143.439 103 78.6929 144.263 103 79.0767 144.263 103 77.8838 143.332 103 77.8838 143.439 103 78.6929 145.454 103 80.2697 143.092 103 80.2697 144.08 103 82.6556 145.454 103 82.6556 410 103 -240 409.809 103 -260.911 352.651 103 -260.911 352.651 103 -232.45 410 103 -240 447.914 103 -235.009 447.914 103 -260.911 409.809 103 -260.911 409.809 103 273.526 410 103 254 352.651 103 246.45 352.651 103 273.526 409.809 103 273.526 447.914 103 273.526 447.914 103 249.009 410 103 254 657 103 7 676.545 103 6.3075 676.545 103 -31.8666 651.883 103 -31.8666 657 103 7 652.065 103 44.4816 676.545 103 44.4816 676.545 103 6.3075 -463.9 -200 -52.5964 -463.9 -200 -29.7105 -476.569 -200 -39.4315 -486.67 -200 -52.5964 492.682 102 -305.973 257.996 102 -305.973 257.996 102 -361 439.496 102 -361 157.995 102 116.25 181.648 102 116.25 181.648 102 160.536 170.111 102 145.5 639.737 102 -128.195 651.258 102 -128.195 669.667 102 -83.7508 639.737 102 -83.7508 582.476 102 205.139 582.476 102 182.916 601.563 102 182.916 601.563 102 205.139 563.389 102 205.139 563.389 102 197.974 582.476 102 183.328 582.476 102 205.139 257.996 102 -217.084 133 102 -217.084 133 102 -361 257.996 102 -361 171.416 102 70.9283 181.648 102 95.6301 181.648 102 116.25 162.561 102 116.25 162.561 102 71.8051 162.561 102 71.8051 162.561 102 49.5828 168.606 102 49.5828 171.416 102 70.9283 345.655 -155 -261.529 410 -155 -270 474.345 -155 -261.529 633.002 -155 135.75 647.144 -155 138.472 647.144 -155 149.583 626.73 -155 149.583 626.73 -155 143.923 647.144 -155 101.607 647.144 -155 138.472 633.002 -155 135.75 626.73 -155 175.681 626.73 -155 149.583 646.756 -155 149.583 504.246 -155 265.22 504.246 -155 244.293 538.75 -155 230.002 545.074 -155 227.361 545.074 -155 248.308 545.074 -155 227.361 538.75 -155 230.002 545.074 -155 225.149 227.92 -155 189.08 248.848 -155 205.139 218.45 -155 205.139 218.45 -155 182.916 227.92 -155 189.08 218.45 -155 182.916 218.45 -155 176.739 504.246 -155 -239.307 504.246 -155 -251.22 533.007 -155 -239.307 585.902 -155 -194.862 585.902 -155 -179.82 566.299 -155 -194.862 201.679 -155 -172.64 214.131 -155 -188.869 238.864 -155 -207.847 238.864 -155 -183.478 227.92 -155 -175.08 218.45 -155 -172.64 227.92 -155 -175.08 226.048 -155 -172.64 218.45 -155 -172.64 152.5 -155 7 152.5 -63 7 152.5 -63 7 161.274 -155 -59.6459 161.274 -155 73.6459 161.274 -63 -59.6459 161.274 -63 -59.6459 161.274 -63 73.6459 161.274 -63 73.6459 186.998 -155 -121.75 186.998 -155 135.75 186.998 -63 -121.75 186.998 -63 -121.75 186.998 -63 135.75 186.998 -63 135.75 227.92 -155 -175.08 227.92 -155 189.08 227.92 -63 -175.08 227.92 -63 -175.08 227.92 -63 189.08 227.92 -63 189.08 281.25 -155 -216.002 281.25 -155 230.002 281.25 -63 -216.002 281.25 -63 -216.002 281.25 -63 230.002 281.25 -63 230.002 343.354 -155 -241.726 343.354 -155 255.726 343.354 -63 -241.726 343.354 -63 -241.726 343.354 -63 255.726 343.354 -63 255.726 410 -155 -250.5 410 -155 264.5 410 -63 -250.5 410 -63 -250.5 410 -63 264.5 410 -63 264.5 476.646 -155 -241.726 476.646 -155 255.726 476.646 -63 -241.726 476.646 -63 -241.726 476.646 -63 255.726 476.646 -63 255.726 538.75 -155 -216.002 538.75 -155 230.002 538.75 -63 -216.002 538.75 -63 -216.002 538.75 -63 230.002 538.75 -63 230.002 592.08 -155 -175.08 592.08 -155 189.08 592.08 -63 -175.08 592.08 -63 -175.08 592.08 -63 189.08 592.08 -63 189.08 633.002 -155 -121.75 633.002 -155 135.75 633.002 -63 -121.75 633.002 -63 -121.75 633.002 -63 135.75 633.002 -63 135.75 658.726 -155 -59.6459 658.726 -155 73.6459 658.726 -63 -59.6459 658.726 -63 -59.6459 658.726 -63 73.6459 658.726 -63 73.6459 667.5 -155 7 667.5 -63 7 667.5 -63 7 95.9662 -155 -128.195 95.9662 -155 -39.3063 95.9662 -155 5.13825 152.745 -155 5.13825 191.944 -155 -128.195 278.004 -155 249.583 328.525 -155 249.583 331.654 -155 271.805 340.934 -155 -260.907 340.934 -155 -250.418 340.934 -155 -240.724 340.934 -155 271.805 345.655 -155 -261.529 422.59 -155 -261.529 422.59 -155 271.805 463.418 -155 257.467 463.418 -155 271.805 474.345 -155 -261.529 481.693 -155 -260.561 482.486 -155 -239.307 483.832 -155 -259.675 483.832 -155 -250.418 504.246 -155 -251.22 504.246 -155 -250.418 504.246 -155 -239.307 585.902 -155 -204.189 585.902 -155 -183.751 585.902 -155 -179.82 605.869 -155 -188.869 647.144 -155 -117.084 647.144 -155 -94.8619 647.144 -155 -87.6068 647.144 -155 101.607 647.144 -155 149.077 648.741 -155 -83.7508 649.889 -155 -131.5 649.889 -155 145.5 655.86 -155 -117.084 665.065 -155 -94.8619 667.558 -155 -83.7508 667.558 -155 -39.3063 667.558 -155 5.13825 667.558 -155 49.5828 667.558 -155 94.0273 667.558 -155 102.843 136.794 -155 5.13825 152.5 -155 7 161.032 -155 71.8051 136.794 -155 71.8051 136.794 -155 5.13825 152.745 -155 5.13825 152.5 -155 7 186.998 -155 135.75 197.613 -155 149.583 177.622 -155 149.583 177.622 -155 138.472 177.622 -155 138.472 177.622 -155 113.114 186.998 -155 135.75 157.208 -155 71.8051 161.274 -155 73.6459 177.622 -155 113.114 177.622 -155 155.289 170.111 -155 145.5 157.208 -155 114.35 157.208 -155 71.8051 161.032 -155 71.8051 161.274 -155 73.6459 142.441 -155 78.6993 157.208 -155 82.9162 157.208 -155 114.35 142.441 -155 78.6993 136.794 -155 71.8051 157.208 -155 71.8051 157.208 -155 82.9162 142.441 -155 78.6993 136.794 -155 78.7359 136.794 -155 71.8051 300.106 -155 249.583 300.106 -155 237.812 328.525 -155 249.583 143.073 103 6.3075 163 103 7 170.63 103 -50.9536 143.073 103 -50.9536 167.935 103 44.4816 163 103 7 143.073 103 6.3075 134.091 103 6.3075 134 103 7 138.935 103 44.4816 134.091 103 6.3075 143.073 103 6.3075 143.073 103 -61.9136 200.23 103 -121.894 219.026 103 -146.389 200.23 103 -146.389 282.254 103 -203.65 257.388 103 -203.65 257.388 103 -184.57 340.962 103 -260.911 479.038 103 -260.911 410 103 -270 562.229 103 -184.863 562.229 103 -203.65 537.746 103 -203.65 219.283 103 -184.563 219.283 103 -146.723 235.345 103 -167.655 235.345 103 -167.655 257.379 103 -184.563 219.283 103 -184.563 143.073 103 78.6953 142.441 103 78.6993 143.073 103 80.2238 181.178 103 159.004 217.963 103 159.004 196.092 103 130.5 196.092 103 130.5 181.178 103 94.4946 181.178 103 159.004 219.283 103 197.178 255.574 103 197.178 235.345 103 181.655 235.345 103 181.655 219.283 103 160.723 219.283 103 197.178 257.388 103 235.352 286.5 103 220.908 255.574 103 197.178 209.765 103 197.178 214.131 103 202.869 256.464 103 235.352 257.388 103 235.352 321.37 103 235.352 286.5 103 220.908 256.464 103 235.352 271.5 103 246.889 335.807 103 273.526 352.651 103 273.526 352.651 103 254.439 346.072 103 245.584 321.37 103 235.352 352.651 103 254.439 352.651 103 246.45 346.072 103 245.584 562.229 103 -203.65 562.229 103 -222.737 495.286 103 -222.737 533.5 103 -206.908 543.177 103 -203.65 533.5 103 -206.908 537.746 103 -203.65 543.177 103 -203.65 600.335 103 -184.563 562.621 103 -184.563 584.655 103 -167.655 584.655 103 -167.655 600.335 103 -147.222 600.335 103 -184.563 638.44 103 -146.389 600.974 103 -146.389 623.908 103 -116.5 623.908 103 -116.5 638.44 103 -81.418 638.44 103 -146.389 562.229 103 235.352 562.229 103 198.863 533.5 103 220.908 533.5 103 220.908 498.63 103 235.352 562.229 103 235.352 638.44 103 159.004 638.44 103 95.418 623.908 103 130.5 623.908 103 130.5 602.037 103 159.004 638.44 103 159.004 584.655 103 181.655 600.335 103 197.178 610.235 103 197.178 639.527 103 159.004 602.037 103 159.004 584.655 103 181.655 564.426 103 197.178 600.335 103 197.178 -500 10 -96 -500 10 -96 -500 10 -96 -500 10 -96 -486.359 -200 -142.009 -486.359 -200 -142.009 -486.359 -200 -142.009 -486.094 10 -163.428 -486.094 10 -93.615 -485.95 -200 -142.009 -485.95 -200 -97.3027 -485.95 -200 -52.5964 -485.95 -200 -52.5964 -485.95 -200 -52.5964 -481.768 10 -46.2075 -481.768 10 -46.2075 -480.938 10 -188.43 -476.569 -200 -154.769 -476.569 -200 -154.769 -463.9 -200 -142.009 -463.9 -200 -52.5964 -463.9 -200 -30.2432 -463.9 -200 -30.2432 -463.631 10 -188.43 -463.631 10 -46.2075 -445.554 10 -360 -445.554 10 -360 -445.554 10 -360 -443.75 -200 -137.136 -443.75 -200 -137.136 -441.167 10 -46.2075 -425.564 -200 -142.009 -424.072 -155 -360 -424.072 -155 -360 -424.072 -155 -360 -424.072 -155 -360 -420 -200 -178.2 -420 -200 -178.2 -420 -200 -143.5 -420 -200 -143.5 -419.8 -200 -178.174 -419.8 -200 -164.362 -419.8 -200 -30.2432 -418.704 10 -188.43 -418.704 10 -46.2075 -399.294 -200 -175.474 -399.294 -200 -175.474 -396.24 10 -46.2075 -380 -200 -167.482 -380 -200 -167.482 -380 -200 -167.482 -378.864 -200 -72.25 -378.864 -200 -72.25 -378.864 -200 -72.25 -378.864 -200 -72.25 -378.864 10 -119.75 -378.864 10 -119.75 -378.864 10 -119.75 -378.864 10 -119.75 -375.934 -200 -164.362 -375.7 -200 -164.183 -375.7 -200 -142.009 -375.7 -200 -84.0574 -375.7 -200 -74.9496 -375.7 -200 -52.5964 -375.7 -200 -30.2432 -375.7 -200 -30.2432 -373.777 10 -188.43 -373.777 10 -46.2075 -372.5 -200 -96 -372.5 -200 -96 -363.431 -200 -154.769 -363.431 -200 -154.769 -358.232 10 -46.2075 -358.232 10 -46.2075 -353.65 -200 -142.009 -353.65 -200 -97.3027 -353.65 -200 -74.9496 -353.641 -200 -142.009 -351.313 10 -188.43 -351.313 10 -93.615 -350.718 -200 -138.2 -350.718 -200 -138.2 -350.718 -200 -138.2 -350.718 10 -56 -350.718 10 -56 -342.869 -200 -74.9496 -342.869 -200 -74.9496 -342.726 -200 -75.2944 -342.726 -200 -75.2944 -341.317 -200 -88.2 -341.317 -200 -88.2 -341.317 -200 -88.2 -341.317 -155 -86 -341.317 -155 -86 -341.317 -155 -86 -341.317 10 -86 -341.317 10 -86 -341.317 10 -86 -340.118 -200 -97.3027 -340 -200 -98.2 -340 -200 -98.2 -337 10 -188.43 -337 10 -86 -337 10 -86 -337 10 -86 -47.0104 -155 -86 -47.0104 -155 -86 -47.0104 -155 -86 95.9662 -155 -360 95.9662 -155 5.13825 95.9662 -155 27.3605 95.9662 -155 33.9717 96 -155 34 96 -155 34 96 -155 34 96 -155 79 96 -155 79 96 -155 79 96 155 34 96 155 34 96 155 34 96 155 34 96 155 34 136.794 -155 5.13825 136.794 -155 78.7359 142.441 -155 78.6993 142.441 -155 78.6993 142.441 -155 78.6993 142.441 103 78.6993 142.441 103 78.6993 142.441 103 78.6993 143.073 103 -50.9536 143.439 103 -64.6929 143.439 103 -64.6929 143.439 103 78.6929 143.439 103 78.6929 162.125 103 -50.9536 170.111 -155 145.5 170.111 -155 145.5 170.111 103 145.5 170.111 103 145.5 170.63 103 -50.9536 171.416 103 -56.9283 180.473 103 159.004 189.893 103 171.281 189.893 103 171.281 190.662 -155 172.283 191.431 103 173.285 191.431 103 173.285 195.119 103 178.091 196 -155 -360 196 -155 -360 196 -155 -165.239 196 -155 -165.239 196 103 -165.239 196 103 -165.239 196 103 -165.239 196 103 -165.239 196.092 103 -116.5 200.23 103 -170.752 200.23 103 -165.476 200.23 103 -127.302 200.23 103 -121.894 200.23 103 159.004 200.23 103 178.091 214.131 -155 -188.869 214.131 -155 202.869 214.131 103 -188.869 214.131 103 202.869 214.131 103 202.869 217.963 103 159.004 219.283 103 160.723 219.283 103 178.091 227.5 -394.042 -380 227.5 -394.042 -380 227.5 -394.042 -380 233.395 103 -203.65 259.278 -155 -223.511 259.278 -155 -217.084 259.278 -155 -199.142 271.5 -155 -232.889 271.5 -155 -232.889 271.5 103 -232.889 271.5 103 -232.889 276.441 103 -203.65 281.25 -155 -216.002 282.254 103 -203.65 286.5 103 -206.908 338.307 -155 -260.561 338.307 -155 -260.561 338.307 103 -260.561 338.307 103 -260.561 340.934 -155 -260.907 340.934 -155 -240.724 346.072 103 -231.584 352.651 103 -260.911 352.651 103 -241.824 352.651 103 -232.45 394.042 227.5 -380 394.042 227.5 -380 394.042 227.5 -380 410 -155 -270 410 103 -270 447.914 103 -260.911 447.914 103 -241.824 447.914 103 -235.009 466.966 103 -260.911 466.966 103 -241.824 473.928 103 -231.584 481.693 -155 -260.561 481.693 103 -260.561 481.693 103 -260.561 548.5 -155 -232.889 548.5 -155 246.889 548.5 -155 246.889 548.5 103 -232.889 548.5 103 -232.889 548.5 103 246.889 548.5 103 246.889 561.73 103 -222.737 562.229 103 198.863 562.229 103 216.265 562.229 103 235.352 563.536 103 235.352 564.426 103 197.178 574.281 103 227.107 574.281 103 227.107 575.283 -155 226.338 575.283 -155 226.338 576.285 103 225.569 576.285 103 225.569 581.282 103 197.178 581.282 103 216.265 581.282 103 221.735 600.335 103 -193.115 600.335 103 -165.476 600.335 103 -147.222 600.974 103 -146.389 605.869 -155 -188.869 605.869 -155 -188.869 605.869 -155 202.869 605.869 -155 202.869 605.869 103 -188.869 605.869 103 -188.869 605.869 103 202.869 619.387 103 -171.251 619.387 103 -165.476 619.387 103 -146.389 628.569 103 -159.285 628.569 103 -159.285 629.338 -155 -158.283 629.338 -155 -158.283 630.107 103 -157.281 630.107 103 -157.281 638.44 103 -146.421 638.44 103 -146.389 649.889 -155 -131.5 649.889 103 -131.5 649.889 103 -131.5 -500 -200 -96 -500 -200 -96 -498.03 -200 -105.552 -498.03 -200 -105.552 -498.03 -155 -105.552 -497.274 -200 -75.2944 -497.274 -200 -75.2944 -497.274 10 -75.2944 -497.274 10 -75.2944 -489.282 -200 -138.2 -489.282 -200 -138.2 -489.282 -200 -56 -489.282 -200 -56 -489.282 -155 -138.2 -489.282 10 -56 -489.282 10 -56 -486.67 -200 -52.5964 -486.094 10 -51.8453 -476.569 -200 -154.769 -476.569 -155 -154.769 -476.569 -200 -39.4315 -476.569 10 -39.4315 -476.569 10 -39.4315 -467.5 -200 -96 -467.5 10 -96 -463.9 -200 -29.7105 -461.136 -200 -119.75 -461.136 -200 -72.25 -461.136 10 -119.75 -461.136 10 -72.25 -460 -200 -167.482 -460 -200 -26.718 -460 -200 -26.718 -460 -155 -167.482 -460 10 -26.718 -460 10 -26.718 -455 0 -380 -455 0 -380 -455 0 -360 -443.75 -200 -54.8638 -443.75 10 -137.136 -443.75 10 -54.8638 -440.706 -200 -175.474 -440.706 -200 -18.726 -440.706 -200 -18.726 -440.706 -155 -175.474 -440.706 10 -18.726 -440.706 10 -18.726 -439.496 -117.763 -380 -439.496 117.763 -380 -439.496 117.763 -380 -439.496 117.763 -360 -420 -200 -178.2 -420 -200 -48.5 -420 -200 -16 -420 -200 -16 -420 -155 -178.2 -420 10 -143.5 -420 10 -48.5 -420 10 -16 -420 10 -16 -399.294 -200 -175.474 -399.294 -155 -175.474 -399.294 -200 -18.726 -399.294 -200 -18.726 -399.294 10 -18.726 -399.294 10 -18.726 -396.25 -200 -137.136 -396.25 -200 -54.8638 -396.25 10 -137.136 -396.25 10 -54.8638 -394.042 -227.5 -380 -394.042 -227.5 -380 -394.042 -227.5 -360 -394.042 227.5 -380 -394.042 227.5 -380 -394.042 227.5 -360 -380 -200 -26.718 -380 -200 -26.718 -380 -155 -167.482 -380 10 -26.718 -380 10 -26.718 -378.864 -200 -119.75 -378.864 10 -72.25 -375.7 -200 -30.0175 -372.5 10 -96 -363.431 -200 -154.769 -363.431 -200 -39.4315 -363.431 -200 -39.4315 -363.431 -155 -154.769 -363.431 10 -39.4315 -363.431 10 -39.4315 -350.718 -200 -56 -350.718 -200 -56 -350.718 -155 -138.2 -342.726 -200 -118.906 -342.726 -155 -118.906 -342.726 10 -75.2944 -341.317 -200 -86 -341.317 -155 -88.2 -340 -155 -98.2 -337 10 -360 -321.734 -321.734 -380 -321.734 -321.734 -380 -321.734 -321.734 -360 -321.734 321.734 -380 -321.734 321.734 -380 -321.734 321.734 -360 -227.5 -394.042 -380 -227.5 -394.042 -380 -227.5 -394.042 -360 -227.5 394.042 -380 -227.5 394.042 -380 -227.5 394.042 -360 -192 155 -360 -192 155 -86 -117.763 -439.496 -380 -117.763 -439.496 -380 -117.763 -439.496 -360 -117.763 439.496 -380 -117.763 439.496 -380 -117.763 439.496 -360 -47.0104 -155 -86 -47.0104 155 -86 0 -455 -380 0 -455 -380 0 -455 -360 0 455 -380 0 455 -380 0 455 -360 96 155 79 117.763 -439.496 -380 117.763 -439.496 -380 117.763 -439.496 -360 117.763 439.496 -380 117.763 439.496 -380 117.763 439.496 -360 134 103 7 134 155 7 137.204 -25 185.02 137.204 -25 185.02 138.977 -90 187.374 138.977 -90 187.374 138.977 40 187.374 138.977 40 187.374 143.439 155 -64.6929 143.439 155 78.6929 143.824 -137.583 193.805 143.824 -137.583 193.805 143.824 87.5833 193.805 143.824 87.5833 193.805 150.443 -155 202.59 150.443 -155 202.59 150.443 -155 202.59 150.443 105 202.59 157.063 -137.583 211.375 157.063 -137.583 211.375 157.063 87.5833 211.375 157.063 87.5833 211.375 161.91 -90 217.806 161.91 -90 217.806 161.91 40 217.806 161.91 40 217.806 163 103 7 163 155 7 163 155 7 163 155 7 163.683 -25 220.16 163.683 -25 220.16 166.95 155 37 166.95 155 37 171.111 103 -131.5 171.111 155 -131.5 171.416 103 -56.9283 171.416 103 70.9283 171.416 147.857 70.9283 171.416 147.857 70.9283 171.416 155 -56.9283 171.416 155 -56.9283 177.269 -25 154.828 179.063 -90 157.167 179.063 40 157.167 183.966 -137.583 163.556 183.966 87.5833 163.556 190.662 -155 172.283 190.662 -155 172.283 196 103 -163.936 196 155 -163.936 196.092 103 -116.5 196.092 103 130.5 196.092 135.316 130.5 196.092 135.316 130.5 196.092 155 -116.5 196.092 155 -116.5 197.359 -137.583 181.01 197.359 87.5833 181.01 197.601 103 165.472 198.362 105 166.481 199.122 103 167.49 202.261 -90 187.399 202.261 40 187.399 204.055 -25 189.737 214.131 -155 202.869 227.5 -394.042 -380 227.5 -394.042 -360 227.5 394.042 -380 227.5 394.042 -380 227.5 394.042 -360 235.345 103 -167.655 235.345 103 181.655 235.345 124.546 181.655 235.345 124.546 181.655 235.345 155 -167.655 235.345 155 -167.655 271.5 -155 246.889 271.5 103 246.889 286.5 103 -206.908 286.5 103 220.908 286.5 116.282 220.908 286.5 116.282 220.908 286.5 155 -206.908 286.5 155 -206.908 309 109 -94 309 109 -94 309 109 108 309 109 108 321.734 -321.734 -380 321.734 -321.734 -380 321.734 -321.734 -360 321.734 321.734 -380 321.734 321.734 -380 321.734 321.734 -360 331.654 -155 271.805 335.807 103 273.526 338.307 -155 274.561 338.307 -155 274.561 338.307 103 274.561 338.307 103 274.561 346.072 103 -231.584 346.072 103 245.584 346.072 111.088 245.584 346.072 111.088 245.584 346.072 155 -231.584 346.072 155 -231.584 394.042 -227.5 -380 394.042 -227.5 -380 394.042 -227.5 -360 394.042 227.5 -380 394.042 227.5 -360 410 -155 284 410 -155 284 410 103 -240 410 103 254 410 103 284 410 103 284 410 109.316 254 410 109.316 254 410 155 -240 410 155 -240 439.496 -117.763 -380 439.496 -117.763 -380 439.496 -117.763 -360 439.496 117.763 -380 439.496 117.763 -380 439.496 117.763 -360 455 0 -380 455 0 -380 455 0 -360 473.928 103 -231.584 473.928 103 245.584 473.928 111.088 245.584 473.928 111.088 245.584 473.928 155 -231.584 473.928 155 -231.584 481.693 -155 274.561 481.693 -155 274.561 481.693 103 274.561 481.693 103 274.561 484.193 103 273.526 488.346 -155 271.805 511 109 -94 511 109 -94 511 109 -94 511 109 108 511 109 108 511 109 108 533.5 103 -206.908 533.5 103 220.908 533.5 116.282 220.908 533.5 116.282 220.908 533.5 155 -206.908 533.5 155 -206.908 557.828 -25 239.731 560.167 -90 237.937 560.167 40 237.937 566.556 -137.583 233.034 566.556 87.5833 233.034 568.472 103 219.399 569.481 105 218.638 570.49 103 217.878 575.283 -155 226.338 575.283 -155 226.338 584.01 -137.583 219.641 584.01 87.5833 219.641 584.655 103 -167.655 584.655 103 181.655 584.655 124.546 181.655 584.655 124.546 181.655 584.655 155 -167.655 584.655 155 -167.655 588.02 -25 279.797 588.02 -25 279.797 590.374 -90 278.023 590.374 -90 278.023 590.374 40 278.023 590.374 40 278.023 590.399 -90 214.739 590.399 40 214.739 592.737 -25 212.945 596.805 -137.583 273.177 596.805 -137.583 273.177 596.805 87.5833 273.177 596.805 87.5833 273.177 605.59 -155 266.557 605.59 -155 266.557 605.59 -155 266.557 605.59 105 266.557 614.375 -137.583 259.937 614.375 -137.583 259.937 614.375 87.5833 259.937 614.375 87.5833 259.937 615.945 -25 -175.737 617.739 -90 -173.399 617.739 40 -173.399 620.806 -90 255.09 620.806 -90 255.09 620.806 40 255.09 620.806 40 255.09 620.878 103 -153.49 621.638 105 -152.481 622.399 103 -151.472 622.641 -137.583 -167.01 622.641 87.5833 -167.01 623.16 -25 253.317 623.16 -25 253.317 623.908 103 -116.5 623.908 103 130.5 623.908 135.316 130.5 623.908 135.316 130.5 623.908 155 -116.5 623.908 155 -116.5 629.338 -155 -158.283 629.338 -155 -158.283 636.034 -137.583 -149.556 636.034 87.5833 -149.556 640.937 -90 -143.167 640.937 40 -143.167 642.731 -25 -140.828 648.584 103 -56.9283 648.584 103 70.9283 648.584 147.857 70.9283 648.584 147.857 70.9283 648.584 155 -56.9283 648.584 155 -56.9283 649.889 -155 145.5 649.889 103 145.5 653.05 155 37 653.05 155 37 656.317 -25 -206.16 656.317 -25 -206.16 657 103 7 657 155 7 657 155 7 657 155 7 658.09 -90 -203.806 658.09 -90 -203.806 658.09 40 -203.806 658.09 40 -203.806 662.937 -137.583 -197.375 662.937 -137.583 -197.375 662.937 87.5833 -197.375 662.937 87.5833 -197.375 667.558 -155 -88.8431 667.558 -155 102.843 669.557 -155 -188.59 669.557 -155 -188.59 669.557 -155 -188.59 669.557 105 -188.59 676.177 -137.583 -179.805 676.177 -137.583 -179.805 676.177 87.5833 -179.805 676.177 87.5833 -179.805 676.545 103 -67.1472 676.545 103 81.1472 677.561 -155 -64.6929 677.561 -155 -64.6929 677.561 -155 78.6929 677.561 -155 78.6929 677.561 103 -64.6929 677.561 103 -64.6929 677.561 103 78.6929 677.561 103 78.6929 681.023 -90 -173.374 681.023 -90 -173.374 681.023 40 -173.374 681.023 40 -173.374 682.796 -25 -171.02 682.796 -25 -171.02 687 -155 7 687 -155 7 687 103 7 687 103 7 -445.554 -71.7501 -360 -445.348 -155 -361 -445.348 -73.3166 -361 -439.496 -117.763 -361 -424.072 -155 -361 143.073 103 -61.9136 196 155 -360 340.962 103 -260.911 479.038 103 -260.911 495.286 103 -222.737 677.911 102 -62.0378 687 102 7 677.911 102 76.0378 614.934 102 -128.195 584.655 102 -167.655 601.563 102 -172.64 618.321 102 -172.64 649.889 102 -131.5 651.258 102 -128.195 584.655 102 -167.655 578.16 102 -172.64 601.563 102 -172.64 639.737 102 -128.195 639.737 102 -78.2862 623.908 102 -116.5 623.908 102 -116.5 614.934 102 -128.195 639.737 102 -128.195 578.16 102 -172.64 533.5 102 -206.908 563.389 102 -217.084 578.597 102 -217.084 605.869 102 -188.869 618.321 102 -172.64 533.5 102 -206.908 508.933 102 -217.084 563.389 102 -217.084 639.737 102 138.472 623.908 102 130.5 648.221 102 71.8051 677.911 102 71.8051 677.911 102 76.0378 677.561 102 78.6929 652.8 102 138.472 639.737 102 138.472 617.791 102 138.472 623.908 102 130.5 601.563 102 182.916 621.178 102 182.916 605.869 102 202.869 601.563 102 206.172 601.563 102 182.916 584.655 102 181.655 617.791 102 138.472 652.8 102 138.472 649.889 102 145.5 621.178 102 182.916 601.563 102 182.916 583.012 102 182.916 584.655 102 181.655 563.389 102 227.361 517.922 102 227.361 533.5 102 220.908 533.5 102 220.908 563.389 102 197.974 563.389 102 227.361 181.648 102 138.472 196.092 102 130.5 219.26 102 160.694 181.648 102 160.694 181.648 102 138.472 181.648 102 95.6301 196.092 102 130.5 133 102 -217.084 133 102 -128.195 133 154 -361 133 154 -361 136.95 154 37 136.95 154 37 136.95 154 37 143.474 102 -128.195 143.474 102 -39.3063 143.474 102 5.13825 143.474 102 49.5828 163 102 7 163 102 7 168.606 102 49.5828 170.111 131.158 145.5 170.111 131.158 145.5 171.416 102 70.9283 181.648 102 -217.084 181.648 102 -128.195 196.092 102 130.5 219.822 102 161.426 219.822 102 182.916 219.822 102 207.235 235.345 102 -167.655 235.345 102 -167.655 235.345 102 181.655 235.345 102 181.655 235.345 123.546 181.655 235.345 123.546 181.655 246.051 102 227.361 257.996 102 -305.973 257.996 102 -217.084 257.996 102 227.361 286.5 102 220.908 286.5 102 220.908 302.078 102 227.361 331.654 102 271.805 331.654 102 271.805 334.344 102 -305.973 334.344 102 271.805 346.072 102 245.584 346.072 102 245.584 346.072 154 -231.584 346.072 154 -231.584 410 108.316 254 410 108.316 254 410.693 102 -305.973 410.693 102 271.805 439.496 154 -361 473.928 102 -231.584 473.928 102 -231.584 473.928 102 245.584 473.928 102 245.584 487.041 102 -305.973 487.041 102 271.805 488.346 102 271.805 488.346 102 271.805 492.682 102 -305.973 533.5 102 -206.908 533.5 102 220.908 533.5 154 -206.908 533.5 154 -206.908 573.949 102 227.361 578.597 102 -217.084 584.655 102 -167.655 584.655 102 181.655 584.655 123.546 181.655 584.655 123.546 181.655 623.908 102 -116.5 623.908 102 130.5 639.737 102 -83.7508 648.221 102 71.8051 648.584 102 -56.9283 648.584 102 -56.9283 648.584 102 70.9283 648.584 102 70.9283 649.889 131.158 145.5 649.889 154 -131.5 649.889 154 -131.5 658.824 102 -83.7508 658.824 102 -61.5286 658.824 102 71.8051 669.667 102 -83.7508 677.561 102 -64.6929 677.561 102 -64.6929 677.911 102 -61.5286 677.911 102 5.13825 677.911 102 71.8051 687 154 7 687 154 7 687 154 7 133 102 -361 133 102 -361 133 102 7 133 102 7 133 154 -361 133 154 7 142.439 102 78.6929 142.439 102 78.6929 142.439 145.223 78.6929 143.474 102 81.1928 163 154 7 166.95 154 37 170.111 102 145.5 171.416 102 -56.9283 171.416 146.857 70.9283 171.416 154 -56.9283 196.092 102 -116.5 196.092 134.316 130.5 196.092 154 -116.5 214.131 102 202.869 214.131 119.08 202.869 235.345 154 -167.655 271.5 102 246.889 271.5 109.813 246.889 286.5 102 -206.908 286.5 115.282 220.908 286.5 154 -206.908 338.307 102 274.561 338.307 102 274.561 338.307 103.987 274.561 346.072 102 -231.584 346.072 110.088 245.584 410 102 -240 410 102 254 410 102 284 410 102 284 410 154 -240 439.496 102 -361 439.496 102 -361 439.496 154 -361 439.496 154 -361 473.928 110.088 245.584 473.928 154 -231.584 481.693 102 274.561 481.693 102 274.561 481.693 103.987 274.561 533.5 115.282 220.908 548.5 102 246.889 548.5 109.813 246.889 584.655 154 -167.655 605.869 102 -188.869 605.869 102 202.869 605.869 119.08 202.869 605.869 154 -188.869 623.908 134.316 130.5 623.908 154 -116.5 648.584 146.857 70.9283 648.584 154 -56.9283 649.889 102 -131.5 649.889 102 145.5 649.889 131.158 145.5 653.05 154 37 657 102 7 657 154 7 677.561 102 78.6929 677.561 145.223 78.6929 677.561 154 -64.6929 683.05 154 37 687 102 7 508.933 102 -217.084 517.922 102 227.361 639.737 102 -78.2862 677.911 102 -62.0378 -37.8302 -94.3988 -175.5 37.8302 -94.3988 -175.5 94.3987 -37.8302 -175.5 94.3987 37.8302 -175.5 37.8302 94.3988 -175.5 -37.8302 94.3988 -175.5 -94.3988 37.8302 -175.5 -94.3988 -37.8302 -175.5 -94.3988 -37.8302 -210.5 -94.3988 37.8302 -210.5 -37.8302 94.3988 -210.5 37.8302 94.3988 -210.5 94.3987 37.8302 -210.5 94.3987 -37.8302 -210.5 37.8302 -94.3988 -210.5 -37.8302 -94.3988 -210.5 -37.8302 -94.3988 -175.5 -37.8302 -94.3988 -210.5 37.8302 -94.3988 -210.5 37.8302 -94.3988 -175.5 37.8302 -94.3988 -175.5 37.8302 -94.3988 -210.5 94.3987 -37.8302 -210.5 94.3987 -37.8302 -175.5 94.3987 -37.8302 -175.5 94.3987 -37.8302 -210.5 94.3987 37.8302 -210.5 94.3987 37.8302 -175.5 94.3987 37.8302 -175.5 94.3987 37.8302 -210.5 37.8302 94.3988 -210.5 37.8302 94.3988 -175.5 37.8302 94.3988 -175.5 37.8302 94.3988 -210.5 -37.8302 94.3988 -210.5 -37.8302 94.3988 -175.5 -37.8302 94.3988 -175.5 -37.8302 94.3988 -210.5 -94.3988 37.8302 -210.5 -94.3988 37.8302 -175.5 -94.3988 37.8302 -175.5 -94.3988 37.8302 -210.5 -94.3988 -37.8302 -210.5 -94.3988 -37.8302 -175.5 -94.3988 -37.8302 -175.5 -94.3988 -37.8302 -210.5 -37.8302 -94.3988 -210.5 -37.8302 -94.3988 -175.5 97 75.534 -210.5 75.534 97 -210.5 -75.5341 97 -210.5 -97 75.534 -210.5 -97 -75.534 -210.5 -75.5341 -97 -210.5 75.534 -97 -210.5 97 -75.5341 -210.5 97 -75.5341 -221.5 75.534 -97 -221.5 -75.5341 -97 -221.5 -97 -75.534 -221.5 -97 75.534 -221.5 -75.5341 97 -221.5 75.534 97 -221.5 97 75.534 -221.5 97 75.534 -210.5 97 75.534 -221.5 75.534 97 -221.5 75.534 97 -210.5 75.534 97 -210.5 75.534 97 -221.5 -75.5341 97 -221.5 -75.5341 97 -210.5 -75.5341 97 -210.5 -75.5341 97 -221.5 -97 75.534 -221.5 -97 75.534 -210.5 -97 75.534 -210.5 -97 75.534 -221.5 -97 -75.534 -221.5 -97 -75.534 -210.5 -97 -75.534 -210.5 -97 -75.534 -221.5 -75.5341 -97 -221.5 -75.5341 -97 -210.5 -75.5341 -97 -210.5 -75.5341 -97 -221.5 75.534 -97 -221.5 75.534 -97 -210.5 75.534 -97 -210.5 75.534 -97 -221.5 97 -75.5341 -221.5 97 -75.5341 -210.5 97 -75.5341 -210.5 97 -75.5341 -221.5 97 75.534 -221.5 97 75.534 -210.5 307.461 -282.678 -267.08 307.461 -275 -267.08 262.87 -275 -245.331 262.87 -282.678 -245.331 307.461 -365 -267.08 307.461 -357.097 -267.08 262.87 -357.097 -245.331 262.87 -365 -245.331 294.31 -357.322 -294.044 294.31 -365 -294.044 249.718 -365 -272.295 249.718 -357.322 -272.295 262.87 -275 -245.331 244.618 -275 -236.43 244.618 -365 -236.43 262.87 -365 -245.331 325.51 -275 -275.883 307.461 -275 -267.08 307.461 -365 -267.08 325.51 -365 -275.883 312.359 -365 -302.847 294.31 -365 -294.044 294.31 -275 -294.044 312.359 -275 -302.847 244.618 -365 -236.43 231.467 -365 -263.393 312.359 -365 -302.847 325.51 -365 -275.883 325.51 -365 -275.883 312.359 -365 -302.847 312.359 -275 -302.847 325.51 -275 -275.883 325.51 -275 -275.883 312.359 -275 -302.847 231.467 -275 -263.393 244.618 -275 -236.43 244.618 -275 -236.43 231.467 -275 -263.393 231.467 -365 -263.393 244.618 -365 -236.43 249.718 -365 -272.295 231.467 -365 -263.393 231.467 -275 -263.393 249.718 -275 -272.295 294.31 -275 -294.044 294.31 -282.903 -294.044 249.718 -282.903 -272.295 249.718 -275 -272.295 249.718 -357.322 -272.295 249.718 -344.919 -272.295 249.718 -295.306 -272.295 249.718 -282.903 -272.295 250.543 -327.725 -272.697 250.543 -327.725 -272.697 262.87 -357.097 -245.331 262.87 -344.694 -245.331 262.87 -295.081 -245.331 262.87 -282.678 -245.331 263.694 -312.275 -245.733 263.694 -312.275 -245.733 272.014 -357.322 -283.169 272.014 -282.903 -283.169 285.165 -357.097 -256.206 285.165 -282.678 -256.206 293.283 -312.275 -293.543 293.283 -312.275 -293.543 294.31 -357.322 -294.044 294.31 -344.919 -294.044 294.31 -295.306 -294.044 294.31 -282.903 -294.044 298.272 -340.225 -262.598 298.272 -340.225 -262.598 298.272 -299.775 -262.598 298.272 -299.775 -262.598 307.461 -357.097 -267.08 307.461 -344.694 -267.08 307.461 -295.081 -267.08 307.461 -282.678 -267.08 250.543 -312.275 -272.697 258.706 -340.225 -276.678 258.706 -299.775 -276.678 263.694 -327.725 -245.733 271.857 -340.225 -249.715 271.857 -299.775 -249.715 271.913 -345 -283.12 271.913 -295 -283.12 285.064 -345 -256.156 285.064 -295 -256.156 285.121 -340.225 -289.562 285.121 -299.775 -289.562 293.283 -327.725 -293.543 306.434 -327.725 -266.579 306.434 -312.275 -266.579 334.892 -155 -274.896 317.357 -155 -310.848 222.085 -155 -264.38 239.62 -155 -228.429 239.62 -285 -228.429 222.085 -285 -264.38 317.357 -285 -310.848 334.892 -285 -274.896 222.085 -155 -264.38 222.085 -285 -264.38 239.62 -285 -228.429 239.62 -155 -228.429 239.62 -155 -228.429 239.62 -285 -228.429 334.892 -285 -274.896 334.892 -155 -274.896 334.892 -155 -274.896 334.892 -285 -274.896 317.357 -285 -310.848 317.357 -155 -310.848 317.357 -155 -310.848 317.357 -285 -310.848 222.085 -285 -264.38 222.085 -155 -264.38 355.204 -345 -112.349 370.504 -340.225 -114.5 384.146 -327.725 -107.246 390.92 -312.275 -93.3586 388.237 -299.775 -78.1425 377.122 -295 -67.4095 361.822 -299.775 -65.2592 348.179 -312.275 -72.5129 341.406 -327.725 -86.4 344.089 -340.225 -101.616 245.611 -345 -337.048 232.403 -340.225 -330.606 224.241 -327.725 -326.625 224.241 -312.275 -326.625 232.403 -299.775 -330.606 245.611 -295 -337.048 258.818 -299.775 -343.489 266.981 -312.275 -347.471 266.981 -327.725 -347.471 258.818 -340.225 -343.489 370.504 -340.225 -114.5 258.818 -340.225 -343.489 266.981 -327.725 -347.471 384.146 -327.725 -107.246 384.146 -327.725 -107.246 266.981 -327.725 -347.471 266.981 -312.275 -347.471 390.92 -312.275 -93.3586 390.92 -312.275 -93.3586 266.981 -312.275 -347.471 258.818 -299.775 -343.489 388.237 -299.775 -78.1425 388.237 -299.775 -78.1425 258.818 -299.775 -343.489 245.611 -295 -337.048 377.122 -295 -67.4095 377.122 -295 -67.4095 245.611 -295 -337.048 232.403 -299.775 -330.606 361.822 -299.775 -65.2592 361.822 -299.775 -65.2592 232.403 -299.775 -330.606 224.241 -312.275 -326.625 348.179 -312.275 -72.5129 348.179 -312.275 -72.5129 224.241 -312.275 -326.625 224.241 -327.725 -326.625 341.406 -327.725 -86.4 341.406 -327.725 -86.4 224.241 -327.725 -326.625 232.403 -340.225 -330.606 344.089 -340.225 -101.616 344.089 -340.225 -101.616 232.403 -340.225 -330.606 245.611 -345 -337.048 355.204 -345 -112.349 355.204 -345 -112.349 245.611 -345 -337.048 258.818 -340.225 -343.489 370.504 -340.225 -114.5 10 -155 -305 10 -155 -305 10 -155 -337 10 -155 -337 10.0001 -381 -305 10.0001 -381 -305 10.0001 -381 -337 10.0001 -381 -337 200.018 -155 -337 200.018 -155 -337 200.018 -381 -337 200.018 -381 -337 202.274 -155 -305 202.274 -155 -305 202.274 -381 -305 202.274 -381 -305 222.085 -155 -264.38 222.085 -155 -264.38 222.085 -381 -264.38 222.085 -381 -264.38 232.871 -155 -269.641 232.871 -155 -269.641 232.871 -381 -269.641 232.871 -381 -269.641 162 -155 -337 162 -155 -337 162 -155 -337 162 -56.9999 -337 162 -56.9999 -337 162 -56.9999 -337 170.45 -155 -64.1873 170.45 -155 -64.1873 170.45 -56.9999 -64.1872 170.45 -56.9999 -64.1872 195.225 -155 -124 195.225 -155 -124 286 -56.9999 -214.774 286 -56.9999 -214.774 345.813 -155 -239.55 345.813 -155 -239.55 361.22 -155 -337 361.22 -155 -337 361.22 -56.9999 -337 361.22 -56.9999 -337 410 -56.9999 -248 410 -56.9999 -248 474.187 -155 -239.55 474.187 -155 -239.55 474.187 -56.9999 -239.55 474.187 -56.9999 -239.55 162 -155 7.49988 162 -155 7.49988 162 -56.9999 7.49988 162 -56.9999 7.49988 195.226 -56.9999 -124 234.637 -155 -175.362 234.637 -56.9999 -175.362 286 -155 -214.774 345.813 -56.9999 -239.55 410 -155 -248 552.312 -155 -203.104 552.312 -155 -203.104 552.313 -56.9999 -203.104 552.313 -56.9999 -203.104 -403 -155 -350 -403 -155 -350 -403 -155 -350 -403 10 -350 -403 10 -350 -342.564 -155 -337 -342.564 -155 -337 -64.7048 241.481 -337 -64.7048 241.481 -337 10.0001 -375.125 -337 10.0001 -375.125 -337 10.0001 -375.125 -350 10.0001 -375.125 -350 416.851 180.802 -350 416.851 180.802 -350 416.851 180.802 -350 418.869 176.057 -337 418.869 176.057 -337 418.869 176.057 -337 427.785 -155 -350 427.785 -155 -350 427.785 -155 -350 -403 10 -350 -403 10 -337 -403 10 -337 -403 10 -337 0 250 -350 0 250 -350 150 200 -337 150 200 -337 200.018 -285 -337 200.018 -285 -337 200.018 -381 -350 200.018 -381 -350 200.018 -381 -350 250 -285 -350 250 -285 -350 250 -285 -350 250 -285 -337 250 -285 -337 250 -285 -337 342.566 -155 -337 342.566 -155 -337 -403 -155 -337 -403 -155 -337 -403 -155 -337 -342.564 -155 -350 -342.564 -155 -350 -342.564 -155 -350 -342.564 -155 -337 -288.033 -241.688 -350 -288.033 -241.688 -350 -241.688 -288.033 -337 -241.688 -288.033 -337 -188 -325.626 -350 -188 -325.626 -350 -128.6 -353.324 -337 -128.6 -353.324 -337 -125 216.506 -350 -125 216.506 -350 -125 216.506 -337 -125 216.506 -337 64.7048 241.481 -337 64.7048 241.481 -337 150 200 -350 150 200 -350 200.018 -381 -337 200.018 -381 -337 200.018 -381 -337 200.018 -285 -337 200.018 -285 -350 200.018 -285 -350 200.018 -285 -350 342.566 -155 -350 342.566 -155 -350 342.566 -155 -350 342.566 -155 -337 427.785 -155 -337 427.785 -155 -337 427.785 -155 -337 455 0 -350 455 0 -350 455 0 -337 455 0 -337 -369.56 9.99998 -350 -369.56 9.99998 -337 -288.033 -241.688 -337 -241.688 -288.033 -350 -188 -325.626 -337 -164.015 188.677 -350 -164.015 188.677 -337 -128.6 -353.324 -350 -65.2917 -370.288 -350 -65.2917 -370.288 -337 -64.7048 241.481 -350 0 -376 -350 0 -376 -337 0 250 -337 10.0001 -381 -337 10.0001 -381 -337 10.0001 -375.125 -337 10.0001 -381 -350 10.0001 -381 -350 10.0001 -375.125 -350 64.7048 241.481 -350 125 216.506 -350 125 216.506 -337 288.033 -241.688 -350 288.033 -241.688 -337 325.626 -188 -350 325.626 -188 -337 362.75 200 -337 371.853 200 -350 427.56 155.619 -337 427.56 155.619 -350 448.088 -79.0099 -350 448.088 -79.0099 -337 448.088 79.0099 -350 448.088 79.0099 -337 -427.56 -155.619 -350 -427.56 -155.619 -350 -427.56 155.619 -370 -427.56 155.619 -370 -348.55 292.468 -350 -348.55 292.468 -350 -292.468 348.55 -370 -292.468 348.55 -370 0 455 -350 0 455 -350 200 -408.687 -370 200 -408.687 -370 200 -408.687 -350 200 -408.687 -350 227.5 394.042 -370 227.5 394.042 -370 292.468 348.55 -350 292.468 348.55 -350 448.088 -79.0099 -350 448.088 -79.0099 -350 455 0 -370 455 0 -370 -448.087 79.0099 -350 -448.087 79.0099 -350 -427.56 -155.619 -370 -427.56 -155.619 -370 -227.5 -394.042 -370 -227.5 -394.042 -370 -155.619 -427.56 -350 -155.619 -427.56 -350 -79.0099 -448.088 -370 -79.0099 -448.088 -370 200 -408.687 -370 200 -408.687 -350 200 -285 -370 200 -285 -370 200 -285 -370 200 -285 -350 200 -285 -350 200 -285 -350 250 -380.164 -370 250 -380.164 -370 250 -380.164 -370 250 -380.164 -350 250 -380.164 -350 250 -380.164 -350 408.688 200 -370 408.688 200 -370 -455 0 -370 -455 0 -370 -394.042 -227.5 -350 -394.042 -227.5 -350 -394.042 227.5 -350 -394.042 227.5 -350 -348.55 -292.468 -370 -348.55 -292.468 -370 -292.468 -348.55 -350 -292.468 -348.55 -350 -227.5 394.042 -370 -227.5 394.042 -370 -227.5 394.042 -350 -227.5 394.042 -350 -79.0099 448.088 -370 -79.0099 448.088 -370 79.0099 -448.088 -370 79.0099 -448.088 -370 79.0099 -448.088 -350 79.0099 -448.088 -350 79.01 448.088 -370 79.01 448.088 -370 155.619 427.56 -350 155.619 427.56 -350 250 -285 -370 250 -285 -370 250 -285 -370 250 -285 -350 250 -285 -350 250 -285 -350 348.55 -292.468 -370 348.55 -292.468 -370 348.55 292.468 -370 348.55 292.468 -370 394.042 -227.5 -350 394.042 -227.5 -350 394.042 227.5 -350 394.042 227.5 -350 427.785 -155 -370 427.785 -155 -370 448.088 79.0099 -350 448.088 79.0099 -350 -455 0 -350 -448.088 -79.0099 -370 -448.088 -79.0099 -350 -448.087 79.0099 -370 -427.56 155.619 -350 -394.042 -227.5 -370 -394.042 227.5 -370 -348.55 -292.468 -350 -348.55 292.468 -370 -292.468 348.55 -350 -292.468 -348.55 -370 -227.5 -394.042 -350 -155.619 -427.56 -370 -155.619 427.56 -370 -155.619 427.56 -350 -79.0099 -448.088 -350 -79.0099 448.088 -350 0 -455 -370 0 -455 -350 0 455 -370 79.01 448.088 -350 155.619 -427.56 -370 155.619 -427.56 -350 155.619 427.56 -370 227.5 394.042 -350 292.468 348.55 -370 292.468 -348.55 -370 292.468 -348.55 -350 348.55 -292.468 -350 348.55 292.468 -350 394.042 -227.5 -370 394.042 227.5 -370 408.688 200 -350 427.56 155.619 -370 427.56 155.619 -350 427.785 -155 -350 448.088 -79.0099 -370 448.088 79.0099 -370 455 0 -350 646.652 -57.0002 -63.4106 622.176 -57.0002 -122.5 583.241 -57.0002 -173.241 532.5 -57.0002 -212.176 473.411 -57.0002 -236.652 410 -57.0002 -245 346.589 -57.0002 -236.652 287.5 -57.0002 -212.176 236.759 -57.0002 -173.241 197.824 -57.0002 -122.5 173.348 -57.0002 -63.4106 165 -57.0002 0 173.348 -57.0002 63.4106 197.824 -57.0002 122.5 236.759 -57.0002 173.241 287.5 -57.0002 212.176 346.589 -57.0002 236.652 410 -57.0002 245 473.411 -57.0002 236.652 532.5 -57.0002 212.176 583.241 -57.0002 173.241 622.176 -57.0002 122.5 646.652 -57.0002 63.4106 655 -57.0002 0 655 -119 0 646.652 -119 63.4106 622.176 -119 122.5 583.241 -119 173.241 532.5 -119 212.176 473.411 -119 236.652 410 -119 245 346.589 -119 236.652 287.5 -119 212.176 236.759 -119 173.241 197.824 -119 122.5 173.348 -119 63.4106 165 -119 0 173.348 -119 -63.4106 197.824 -119 -122.5 236.759 -119 -173.241 287.5 -119 -212.176 346.589 -119 -236.652 410 -119 -245 473.411 -119 -236.652 532.5 -119 -212.176 583.241 -119 -173.241 622.176 -119 -122.5 646.652 -119 -63.4106 646.652 -57.0002 -63.4106 646.652 -119 -63.4106 622.176 -119 -122.5 622.176 -57.0002 -122.5 622.176 -57.0002 -122.5 622.176 -119 -122.5 583.241 -119 -173.241 583.241 -57.0002 -173.241 583.241 -57.0002 -173.241 583.241 -119 -173.241 532.5 -119 -212.176 532.5 -57.0002 -212.176 532.5 -57.0002 -212.176 532.5 -119 -212.176 473.411 -119 -236.652 473.411 -57.0002 -236.652 473.411 -57.0002 -236.652 473.411 -119 -236.652 410 -119 -245 410 -57.0002 -245 410 -57.0002 -245 410 -119 -245 346.589 -119 -236.652 346.589 -57.0002 -236.652 346.589 -57.0002 -236.652 346.589 -119 -236.652 287.5 -119 -212.176 287.5 -57.0002 -212.176 287.5 -57.0002 -212.176 287.5 -119 -212.176 236.759 -119 -173.241 236.759 -57.0002 -173.241 236.759 -57.0002 -173.241 236.759 -119 -173.241 197.824 -119 -122.5 197.824 -57.0002 -122.5 197.824 -57.0002 -122.5 197.824 -119 -122.5 173.348 -119 -63.4106 173.348 -57.0002 -63.4106 173.348 -57.0002 -63.4106 173.348 -119 -63.4106 165 -119 0 165 -57.0002 0 165 -57.0002 0 165 -119 0 173.348 -119 63.4106 173.348 -57.0002 63.4106 173.348 -57.0002 63.4106 173.348 -119 63.4106 197.824 -119 122.5 197.824 -57.0002 122.5 197.824 -57.0002 122.5 197.824 -119 122.5 236.759 -119 173.241 236.759 -57.0002 173.241 236.759 -57.0002 173.241 236.759 -119 173.241 287.5 -119 212.176 287.5 -57.0002 212.176 287.5 -57.0002 212.176 287.5 -119 212.176 346.589 -119 236.652 346.589 -57.0002 236.652 346.589 -57.0002 236.652 346.589 -119 236.652 410 -119 245 410 -57.0002 245 410 -57.0002 245 410 -119 245 473.411 -119 236.652 473.411 -57.0002 236.652 473.411 -57.0002 236.652 473.411 -119 236.652 532.5 -119 212.176 532.5 -57.0002 212.176 532.5 -57.0002 212.176 532.5 -119 212.176 583.241 -119 173.241 583.241 -57.0002 173.241 583.241 -57.0002 173.241 583.241 -119 173.241 622.176 -119 122.5 622.176 -57.0002 122.5 622.176 -57.0002 122.5 622.176 -119 122.5 646.652 -119 63.4106 646.652 -57.0002 63.4106 646.652 -57.0002 63.4106 646.652 -119 63.4106 655 -119 0 655 -57.0002 0 655 -57.0002 0 655 -119 0 646.652 -119 -63.4106 646.652 -57.0002 -63.4106 -405.842 22.9997 -106.286 -414.592 22.9997 -112.643 -425.408 22.9997 -112.643 -434.158 22.9997 -106.286 -437.5 22.9997 -96 -434.158 22.9997 -85.7137 -425.408 22.9997 -79.3565 -414.592 22.9997 -79.3565 -405.842 22.9997 -85.7137 -402.5 22.9997 -96 -402.5 9.99969 -96 -405.842 9.99969 -85.7137 -414.592 9.99969 -79.3565 -425.408 9.99969 -79.3565 -434.158 9.99969 -85.7137 -437.5 9.99969 -96 -434.158 9.99969 -106.286 -425.408 9.99969 -112.643 -414.592 9.99969 -112.643 -405.842 9.99969 -106.286 -405.842 22.9997 -106.286 -405.842 9.99969 -106.286 -414.592 9.99969 -112.643 -414.592 22.9997 -112.643 -414.592 22.9997 -112.643 -414.592 9.99969 -112.643 -425.408 9.99969 -112.643 -425.408 22.9997 -112.643 -425.408 22.9997 -112.643 -425.408 9.99969 -112.643 -434.158 9.99969 -106.286 -434.158 22.9997 -106.286 -434.158 22.9997 -106.286 -434.158 9.99969 -106.286 -437.5 9.99969 -96 -437.5 22.9997 -96 -437.5 22.9997 -96 -437.5 9.99969 -96 -434.158 9.99969 -85.7137 -434.158 22.9997 -85.7137 -434.158 22.9997 -85.7137 -434.158 9.99969 -85.7137 -425.408 9.99969 -79.3565 -425.408 22.9997 -79.3565 -425.408 22.9997 -79.3565 -425.408 9.99969 -79.3565 -414.592 9.99969 -79.3565 -414.592 22.9997 -79.3565 -414.592 22.9997 -79.3565 -414.592 9.99969 -79.3565 -405.842 9.99969 -85.7137 -405.842 22.9997 -85.7137 -405.842 22.9997 -85.7137 -405.842 9.99969 -85.7137 -402.5 9.99969 -96 -402.5 22.9997 -96 -402.5 22.9997 -96 -402.5 9.99969 -96 -405.842 9.99969 -106.286 -405.842 22.9997 -106.286 + + + + + + + + + + 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.976901 0 -0.213691 -0.976901 0 -0.213691 -0.976901 0 -0.213691 -0.976901 0 -0.213691 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0 1 0 0 1 0 0 1 0 0 1 1 0 0 1 0 0 1 0 0 1 0 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 -1 0 0 0 0 -1 0 1 0 -1 0 0 0 0 1 0 1 0 0 1 0 -1 0 0 0 0 -1 -1 0 0 0 0 1 -1 0 0 0 0 -1 0 1 0 -1 0 0 0 0 -1 0 1 0 -1 0 0 0 0 1 0 1 0 -1 0 0 0 0 1 0 1 0 -1 0 0 0 0 -1 -1 0 0 0 0 -1 -1 0 0 0 0 1 -1 0 0 0 0 1 0 0 -1 0 1 0 1 0 0 0 0 -1 0 1 0 1 0 0 0 0 1 0 1 0 1 0 0 0 0 1 0 1 0 1 0 0 0 0 -1 1 0 0 0 0 -1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 1 0 0 0 -1 0 1 0 1 0 0 0 0 1 0 1 0 1 0 0 0 1 0 0 0 -1 1 0 0 0 0 1 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 -1 0 0 -0.499985 0 -0.866034 -1 0 0 -0.499985 0 0.866034 -1 0 0 -0.499985 0 -0.866034 -1 0 0 -0.499985 0 0.866034 -0.707083 0 -0.70713 -0.707083 0 0.70713 -0.707083 0 -0.70713 -0.707083 0 0.70713 -0.866034 0 -0.499985 0 0 -1 -0.866034 0 0.499985 0 0 1 -0.866034 0 -0.499985 0 0 -1 -0.866034 0 0.499985 0 0 1 0 0 -1 0.866034 0 -0.499985 0 0 1 0.866034 0 0.499985 0 0 -1 0.866034 0 -0.499985 0 0 1 0.866034 0 0.499985 0.707083 0 -0.70713 0.707083 0 0.70713 0.707083 0 -0.70713 0.707083 0 0.70713 0.499985 0 -0.866034 1 0 0 0.499985 0 0.866034 1 0 0 0.499985 0 -0.866034 1 0 0 0.499985 0 0.866034 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -1 0 0 -1 0 0 0 1 0 -0.866034 0 -0.499985 -0.866034 0 0.499985 -0.866034 0 -0.499985 0 1 0 -0.866034 0 0.499985 0 1 0 -0.499985 0 -0.866034 -0.499985 0 0.866034 -0.499985 0 -0.866034 0 1 0 -0.499985 0 0.866034 0 1 0 0 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0 1 0 0.499985 0 -0.866034 0.499985 0 0.866034 0 1 0 0.499985 0 -0.866034 0 1 0 0.499985 0 0.866034 0.866034 0 -0.499985 0.866034 0 0.499985 0 1 0 0.866034 0 -0.499985 0 1 0 0.866034 0 0.499985 1 0 0 0 1 0 1 0 0 0 1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 -1 0 0 0 -1 0 0 0 1 -1 0 0 0 -1 0 -1 0 0 0 0 1 0 1 0 -1 0 0 0 1 0 0 0 1 -1 0 0 0 -1 0 0 0 1 -1 0 0 0 -1 0 -1 0 0 0 -1 0 0 0 1 -1 0 0 0 -1 0 -1 0 0 0 0 1 0 1 0 -1 0 0 0 1 0 -1 0 0 0 0 1 0 1 0 -1 0 0 0 1 0 0 -1 0 0 0 1 1 0 0 0 -1 0 1 0 0 0 -1 0 0 0 1 1 0 0 0 -1 0 1 0 0 0 0 1 0 1 0 1 0 0 0 1 0 1 0 0 0 0 1 0 1 0 1 0 0 0 1 0 1 0 0 0 0 1 0 -1 0 0 0 1 1 0 0 0 -1 0 1 0 0 0 0 1 0 1 0 1 0 0 0 1 0 1 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 -1 0 0 -0.499985 -0.866034 0 -1 0 0 -0.499985 -0.866034 0 -1 0 0 -0.499985 0.866034 0 -1 0 0 -0.499985 0.866034 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.866034 -0.499985 0 0 -1 0 -0.866034 -0.499985 0 0 -1 0 -0.866034 0.499985 0 0 1 0 -0.866034 0.499985 0 0 1 0 0 -1 0 0.866034 -0.499985 0 0 -1 0 0.866034 -0.499985 0 0 1 0 0.866034 0.499985 0 0 1 0 0.866034 0.499985 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.707083 0.70713 0 0.707083 0.70713 0 0.499985 -0.866034 0 1 0 0 0.499985 -0.866034 0 1 0 0 0.499985 0.866034 0 1 0 0 0.499985 0.866034 0 1 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 -1 0 0 0 0 1 -0.866034 -0.499985 0 0 0 1 -0.866034 0.499985 0 0 0 1 -0.499985 -0.866034 0 0 0 1 -0.499985 0.866034 0 0 0 1 0 -1 0 0 0 1 0 0 1 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0.499985 -0.866034 0 0 0 1 0.499985 0.866034 0 0 0 1 0.866034 -0.499985 0 0 0 1 0.866034 0.499985 0 0 0 1 0.866034 0.499985 0 0 0 1 1 0 0 0 0 1 0 0 1 0 0 1 -1 0 0 -0.866034 -0.499985 0 -0.866034 0.499985 0 -0.499985 -0.866034 0 -0.499985 0.866034 0 0 -1 0 0 1 0 0.499985 -0.866034 0 0.499985 0.866034 0 0.866034 -0.499985 0 1 0 0 0 0 1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 0 -1 0 1 0 0 0.965932 0 0.258797 0.965932 0 -0.258797 0 -1 0 0.965932 0 0.258797 0 -1 0 0.965932 0 -0.258797 0.866034 0 0.499985 0.866034 0 -0.499985 0 -1 0 0.866034 0 0.499985 0 -1 0 0.866034 0 -0.499985 0.707083 0 0.70713 0.70713 0 -0.707083 0 -1 0 0.707083 0 0.70713 0 -1 0 0.70713 0 -0.707083 0.499985 0 0.866034 0.499985 0 -0.866034 0 -1 0 0.499985 0 0.866034 0 -1 0 0.499985 0 -0.866034 0.258797 0 0.965932 0.258797 0 -0.965932 0 -1 0 0.258797 0 0.965932 0 -1 0 0.258797 0 -0.965932 0 0 1 0 0 -1 0 -1 0 0 0 1 0 -1 0 0 0 -1 -0.258797 0 0.965932 -0.258797 0 -0.965932 -0.258797 0 0.965932 0 -1 0 -0.258797 0 -0.965932 0 -1 0 -0.499985 0 0.866034 -0.499985 0 -0.866034 -0.499985 0 0.866034 0 -1 0 -0.499985 0 -0.866034 0 -1 0 -0.707083 0 0.70713 -0.70713 0 -0.707083 -0.707083 0 0.70713 0 -1 0 -0.70713 0 -0.707083 0 -1 0 -0.866034 0 0.499985 -0.866034 0 -0.499985 -0.866034 0 0.499985 0 -1 0 -0.866034 0 -0.499985 0 -1 0 -0.965932 0 0.258797 -0.965932 0 -0.258797 -0.965932 0 0.258797 0 -1 0 -0.965932 0 -0.258797 0 -1 0 -1 0 0 -1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.992763 0 -0.12009 -0.973078 0 -0.230476 -0.798651 0 0.601794 0 1 0 -0.973078 0 -0.230476 -0.798651 0 0.601794 0 -1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 -0.973078 0 -0.230476 -0.798651 0 0.601794 0 -1 0 -0.798651 0 0.601794 0 1 0 0 1 0 -0.798651 0 0.601794 0 -1 0 0 -1 0 0 -1 0 -0.798651 0 0.601794 0 -1 0 0 1 0 0 1 0 -0.973078 0 -0.230476 0 0 -1 0 1 0 0 -1 0 0.499985 0 0.866034 0 1 0 0 -1 0 -0.973078 0 -0.230476 0 -1 0 0 0 -1 0 0 1 -0.798651 0 0.601794 0 -1 0 0 -1 0 0 0 1 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 -0.798651 0 0.601794 0 -1 0 0 1 0 -0.798651 0 0.601794 0 -1 0 0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.798651 0 0.601794 0 -1 0 0 1 0 -0.866034 0 0.499985 -0.798651 0 0.601794 0 -1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.798651 0 0.601794 0 -1 0 0 1 0 0 1 0 -1 0 0 0 -1 0 -0.798651 0 0.601794 0 -1 0 -0.798651 0 0.601794 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 -0.798651 0 0.601794 0 -1 0 0.866034 0 -0.499985 0 1 0 0.866034 0 0.499985 -0.798651 0 0.601794 0 -1 0 0 -1 0 0.965932 0 0.258797 -0.798651 0 0.601794 0 -1 0 0.997859 0 0.0654012 0 -1 0 0 0 1 1 0 0 0 0 1 0 1 0 0.991449 0 0.130497 0 -1 0 0 -1 0 1 0 0 0 1 0 -0.382672 0.923884 0 0 0 1 0 1 0 -0.798651 0 0.601794 0 -1 0 0 0 1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -0.642781 0 0.76605 0 -1 0 -1 0 0 0 -1 0 0.00646992 0 0.999979 -1 0 0 -0.642781 0 0.76605 0 0 1 0 1 0 0.00646992 0 0.999979 0 -1 0 0 -1 0 -0.923884 0 0.382672 -0.798651 0 0.601794 0.00646992 0 0.999979 -0.923884 0 0.382672 -0.798651 0 0.601794 0.00646992 0 0.999979 0 1 0 0 1 0 0.965932 0 0.258797 0.00646992 0 0.999979 0.991449 0 -0.130497 0 1 0 -0.823967 0 0.566637 -0.798651 0 0.601794 -0.831314 0 0.555803 -0.798651 0 0.601794 0 1 0 0 1 0 0 1 0 -0.798651 0 0.601794 0 1 0 -0.798651 0 0.601794 -0.798651 0 0.601794 0 1 0 0 1 0 0 0 1 0.946936 0 0.321421 -0.79336 0 -0.608753 0.946936 0 0.321421 -0.798651 0 0.601794 -0.79336 0 -0.608753 0 1 0 0.946936 0 0.321421 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.707083 0 -0.70713 -0.798651 0 0.601794 -0.707083 0 -0.70713 -0.798651 0 0.601794 -0.7606 0 0.64922 0 1 0 0 1 0 0 1 0 -0.798651 0 0.601794 0 0 -1 0 0 1 0 1 0 0 -1 0 0 -1 0 0 -1 0 -0.499985 0 -0.866034 0 -1 0 -0.499985 0 -0.866034 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 -0.258797 0 -0.965932 0 -1 0 -0.258797 0 -0.965932 0 1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.798651 0 0.601794 0 0 -1 0 0 1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.258797 0 -0.965932 0 1 0 0.258797 0 -0.965932 0.499985 0 -0.866034 0.566637 0 0.823967 0.566637 0 0.823967 0 1 0 0.499985 0 -0.866034 0.555803 0 0.831314 0.566637 0 0.823967 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.566637 0 0.823967 0.566637 0 0.823967 0.64922 0 0.7606 0 1 0 0.64922 0 0.7606 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.752048 0 -0.659108 0.7606 0 -0.64922 0.64922 0 0.7606 0.659108 0 0.752048 0 1 0 0.7606 0 -0.64922 0.64922 0 0.7606 0 1 0 0 1 0 0 1 0 0 1 0 0.7606 0 -0.64922 0.7606 0 -0.64922 0.823967 0 -0.566637 0 1 0 0.798651 0 -0.601794 0 1 0 0 1 0 0.823967 0 -0.566637 0.823967 0 -0.566637 0.831314 0 -0.555803 -0.999344 0 -0.0362255 0 -1 0 -0.973078 0 -0.230476 0 -1 0 -0.975277 0 -0.220985 -0.965932 0 0.258797 0 -1 0 -0.965932 0 0.258797 0 1 0 -0.89688 0 -0.442274 0 -1 0 -0.866034 0 0.499985 0 -1 0 -0.89688 0 -0.442274 -0.866034 0 0.499985 0 1 0 0 -1 0 0 1 0 -0.70713 0 -0.707083 -0.70713 0 -0.707083 -0.707083 0 0.70713 -0.707083 0 0.70713 0 1 0 1 0 0 1 0 0 0 -1 0 0.866034 0 0.499985 0.866034 0 -0.499985 0.866034 0 0.499985 0.866034 0 -0.499985 -0.499985 0 -0.866034 -0.499985 0 0.866034 0 -1 0 -0.499985 0 -0.866034 -0.499985 0 0.866034 0 1 0 -1 0 0 0 0 -1 -0.999039 -0.0438246 0 0.499985 0 -0.866034 0.499985 0 0.866034 0.499985 0 -0.866034 -0.258797 0 -0.965932 -0.258797 0 0.965932 0 -1 0 -0.258797 0 -0.965932 -0.258797 0 0.965932 0 1 0 0 0 -1 -0.965932 0.258797 0 0 0 -1 -0.965932 0.258797 0 0 0 -1 0 0 -1 0 -1 0 0 0 1 0 0 -1 0 0 1 0 0 -1 0 0 1 0 1 0 0.258797 0 -0.965932 0.258797 0 -0.965932 0 -1 0 0.258797 0 0.965932 0 1 0 0.258797 0 0.965932 -0.499985 0 0.866034 -0.499985 0 -0.866034 -0.499985 0 0.866034 -0.499985 0 -0.866034 -0.866034 -0.499985 0 0 0 -1 -0.887124 -0.461531 0 -0.866034 0.499985 0 0 0 -1 -0.866034 0.499985 0 0 -1 0 0.499985 0 0.866034 0.499985 0 -0.866034 0 1 0 0.499985 0 0.866034 -0.866034 0 0.499985 -0.866034 0 -0.499985 0 -1 0 -1 0 0 0.707083 0 -0.70713 0 -1 0 0.707083 0 0.70713 0.707083 0 -0.70713 0 1 0 0.707083 0 0.70713 0 -1 0 0.866034 0 0.499985 0.866034 0 -0.499985 0.965932 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0.258797 0.997859 0 0.0654012 0.997859 0 0.0654012 1 0 0 -0.382672 0.923884 0 -0.707083 -0.70713 0 0 0 -1 -0.707083 -0.70713 0 -0.707083 0.70713 0 0 0 -1 -0.707083 0.70713 0 -0.499985 -0.866034 0 0 0 -1 -0.499985 -0.866034 0 -0.499985 0.866034 0 0 0 -1 -0.499985 0.866034 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.258797 -0.965932 0 0 0 -1 -0.258797 -0.965932 0 -0.258797 0.965932 0 0 0 -1 -0.258797 0.965932 0 -0.34199 0 0.939703 -0.34199 0 0.939703 0 -1 0 0 0 -1 0 -1 0 0 0 -1 0 1 0 0 1 0 -1 0 0 0 0 -1 0.258797 -0.965932 0 0.258797 -0.965932 0 0 0 -1 0.258797 0.965932 0 0.258797 0.965932 0 1 0 0 1 0 0 -0.798651 0 0.601794 -0.601794 0 -0.798651 -0.798651 0 0.601794 -0.598376 -0.106265 -0.794137 -0.798651 0 0.601794 -0.598376 0.106265 -0.794137 0.965932 0 0.258797 0.991449 0 -0.130497 -0.798651 0 0.601794 -0.562059 -0.357372 -0.745905 -0.798651 0 0.601794 -0.562059 0.357372 -0.745905 -0.798651 0 0.601794 -0.508805 -0.533982 -0.675263 0.508805 -0.533982 0.675263 -0.798651 0 0.601794 -0.798651 0 0.601794 0.562059 -0.357372 0.745905 -0.798651 0 0.601794 0.562059 0.357372 0.745905 -0.798651 0 0.601794 0.598376 -0.106265 0.794137 -0.798651 0 0.601794 0.598376 0.106265 0.794137 -1 0 0 -1 0 0 0.318522 0.947916 0 0.318522 0.947916 0 -0.798651 0 0.601794 0.601794 0 0.798651 -0.991449 0 0.130497 0.27781 0.958428 0.065096 0.866034 0 0.499985 0.866034 0 0.499985 -0.965932 0 -0.258797 -0.965932 0 0.258797 -0.965932 0 0.258797 0.23484 0.962327 0.137028 -0.965932 0 -0.258797 0.338328 0.936337 0.0938444 -0.601794 0 -0.798651 -0.598376 -0.106265 -0.794137 -0.598376 0.106265 -0.794137 -0.562059 -0.357372 -0.745905 -0.562059 0.357372 -0.745905 -0.508805 -0.533982 -0.675263 0.508805 -0.533982 0.675263 0.946936 0 0.321421 0.946936 0 0.321421 -0.866034 0 -0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 0.238624 0.968991 0.0641499 -0.866034 0 -0.499985 0.336131 0.921132 0.196295 0.562059 -0.357372 0.745905 0.562059 0.357372 0.745905 0.798651 0 -0.601794 0.798651 0 -0.601794 0.798651 0 -0.601794 0.598376 -0.106265 0.794137 0.598376 0.106265 0.794137 0.601794 0 0.798651 -0.752048 0 0.659108 0.499985 -0.866034 0 0.499985 -0.866034 0 0 0 -1 0.499985 0.866034 0 0.499985 0.866034 0 -0.707083 0 -0.70713 -0.707083 0 0.70713 -0.707083 0 0.70713 0.206091 0.978533 -0.000396741 -0.707083 0 -0.70713 0.285623 0.914789 0.285623 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 -0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 0.142369 0.98918 -0.0354015 -0.499985 0 -0.866034 0.196295 0.921132 0.336131 0.19657 0.960596 0.196509 0.19657 0.960596 0.196509 0.18424 0.982712 0.0182195 0.18424 0.982712 0.0182195 0 0 -1 0.707083 -0.70713 0 0.707083 -0.70713 0 0 0 -1 0.707083 0.70713 0 0.707083 0.70713 0 0 -1 0 0 1 0 -0.258797 0 0.965932 0 -1 0 -0.258797 0 0.965932 0 1 0 -0.258797 0 -0.965932 -0.258797 0 0.965932 -0.258797 0 0.965932 0.0676901 0.997149 -0.0333567 -0.258797 0 -0.965932 0.0938444 0.936337 0.338328 0 0 -1 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0 -1 0 0 0 1 0 0 -1 0 0 1 0 0 1 0 1 0 0 0 1 0 0.999875 -0.0158086 0 0 -1 0 0.947916 0.318522 0 0 -1 0.965932 -0.258797 0 0.965932 -0.258797 0 0 0 -1 0.965932 0.258797 0 0.965932 0.258797 0 0 0 -1 1 0 0 1 0 0 0.258797 0 -0.965932 0.258797 0 0.965932 -0.0676901 0.997149 -0.0333567 0.258797 0 0.965932 -0.0938444 0.936337 0.338328 0.258797 0 -0.965932 0 -1 0 0.258797 0 0.965932 0 1 0 0.258797 0 0.965932 0 1 0 0 -1 0 -0.19657 0.960596 0.196509 -0.19657 0.960596 0.196509 -0.19657 0.960596 0.196509 -0.18424 0.982712 0.0182195 -0.18424 0.982712 0.0182195 -0.18424 0.982712 0.0182195 0.499985 0 -0.866034 0.499985 0 0.866034 -0.142369 0.98918 -0.0354015 0.499985 0 0.866034 -0.196295 0.921132 0.336131 0.499985 0 -0.866034 -0.798651 0 0.601794 -0.794114 -0.106265 0.598407 -0.794114 0.106265 0.598407 -0.745905 -0.357372 0.562059 -0.745905 0.357372 0.562059 -0.601794 3.05185e-005 -0.798651 -0.601794 3.05185e-005 -0.798651 -0.601794 3.05185e-005 -0.798651 -0.675263 -0.533982 0.508805 0.675263 -0.533982 -0.508805 0.745905 -0.357372 -0.562059 0.745905 0.357372 -0.562059 0.707083 0 -0.70713 0.707083 0 0.70713 -0.206091 0.978533 -0.000396741 0.707083 0 0.70713 -0.285623 0.914789 0.285623 0.707083 0 -0.70713 -0.798651 0 0.601794 0.601794 0 0.798651 -0.794114 -0.106265 0.598407 0.601794 0 0.798651 -0.794114 0.106265 0.598407 0.601794 0 0.798651 0.794137 -0.106265 -0.598376 0.794137 0.106265 -0.598376 0.798651 0 -0.601794 -0.745905 -0.357372 0.562059 0.601794 0 0.798651 -0.745905 0.357372 0.562059 0.601794 0 0.798651 -0.675263 -0.533982 0.508805 0.601794 0 0.798651 0.675263 -0.533982 -0.508805 0.601794 0 0.798651 0.601794 0 0.798651 0.745905 -0.357372 -0.562059 0.601794 0 0.798651 0.745905 0.357372 -0.562059 -0.601794 0 -0.798651 -0.598376 -0.106265 -0.794137 -0.598376 0.106265 -0.794137 0.601794 0 0.798651 0.794137 -0.106265 -0.598376 0.601794 0 0.798651 0.794137 0.106265 -0.598376 -0.798651 0 0.601794 -0.798651 0 0.601794 -0.798651 0 0.601794 -0.562059 -0.357372 -0.745905 -0.562059 0.357372 -0.745905 0.601794 0 0.798651 0.798651 0 -0.601794 0.866034 0 -0.499985 0.866034 0 0.499985 -0.238624 0.968991 0.0641499 0.866034 0 0.499985 -0.336131 0.921132 0.196295 0.866034 0 -0.499985 -0.508805 -0.533982 -0.675263 0.508805 -0.533982 0.675263 0.562059 -0.357372 0.745905 0.562059 0.357372 0.745905 0.598376 -0.106265 0.794137 0.598376 0.106265 0.794137 0.601794 0 0.798651 0.965932 0 -0.258797 0.965932 0 0.258797 -0.23484 0.962327 0.137028 0.965932 0 0.258797 -0.338328 0.936337 0.0938444 0.965932 0 -0.258797 0.866034 0 0.499985 0.866034 0 0.499985 -0.27781 0.958428 0.065096 0.991449 0 0.130497 -0.601794 0 -0.798651 0.798651 0 -0.601794 1 0 0 -0.318522 0.947916 0 -0.318522 0.947916 0 1 0 0 -0.598376 -0.106265 -0.794137 0.798651 0 -0.601794 -0.598376 0.106265 -0.794137 0.798651 0 -0.601794 -0.562059 -0.357372 -0.745905 0.798651 0 -0.601794 -0.562059 0.357372 -0.745905 0.798651 0 -0.601794 0 -1 0 0 -1 0 -0.508805 -0.533982 -0.675263 0.508805 -0.533982 0.675263 0.798651 0 -0.601794 0.798651 0 -0.601794 0.562059 -0.357372 0.745905 0.798651 0 -0.601794 0.562059 0.357372 0.745905 0.798651 0 -0.601794 0 1 0 0 1 0 0 -1 0 0.965932 0 -0.258797 0 -1 0 0.965932 0 0.258797 0 1 0 0.965932 0 -0.258797 0 1 0 0.965932 0 0.258797 0.598376 -0.106265 0.794137 0.798651 0 -0.601794 0.598376 0.106265 0.794137 0.798651 0 -0.601794 0.601794 0 0.798651 0.798651 0 -0.601794 0 -1 0 1 0 0 0 1 0 1 0 0 -0.887114 -0.461551 -7.27849e-008 -0.965926 -0.258819 -5.56364e-008 0 0 1 0 1 0 0 1 0 0 0 -1 0 0 1 -0.973072 0 -0.2305 0 -1 0 0 -1 0 0.649229 -6.59579e-007 0.760593 0.566642 4.97567e-007 0.823964 -0.760593 3.19461e-007 0.649229 -0.823963 3.76467e-007 0.566643 0.760593 -1.55781e-008 -0.649229 0.823963 2.67267e-007 -0.566643 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0.00647717 1.27356e-006 0.999979 -0.562067 0.357397 -0.745888 0.50883 0.53399 0.675239 -0.745887 0.357397 0.562067 0.675236 0.533997 -0.508826 0.562067 0.357397 0.745888 -0.508829 0.533992 -0.675238 0.94693 0 0.321439 0 1 0 -0.798638 9.19503e-006 0.601811 -0.798638 9.19503e-006 0.601811 -0.798638 9.19503e-006 0.601811 -0.798638 9.19503e-006 0.601811 -0.798638 9.19503e-006 0.601811 -0.798638 9.19503e-006 0.601811 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 0 1 0 -0.991449 0 0.130497 0 0.978552 0.206 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 0 -1 0 -0.866034 0 0.499985 0 0.978552 0.206 0.965932 0 -0.258797 0 -1 0 0 -1 0 0.866034 0 -0.499985 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.707083 0 0.70713 0 -1 0 0.707083 0 -0.70713 0 0.978552 0.206 0.707083 0 -0.70713 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.499985 0 -0.866034 0 -1 0 0 0.978552 0.206 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.258797 0 -0.965932 0 1 0 0.258797 0 0.965932 0 0.978552 0.206 0 0 -1 0 -1 0 0 -1 0 0 1 0 -0.258797 0 0.965932 0 -1 0 -0.258797 0 -0.965932 0 -1 0 0 -1 0 0 -1 0 0 0.978552 0.206 0 -1 0 0 -1 0 -0.499985 0 0.866034 -0.499985 0 -0.866034 -0.499985 0 0.866034 0 1 0 0 -1 0 0 -1 0 -0.707083 0 0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.70713 0 0.978552 0.206 -0.866034 0 0.499985 -0.866034 0 -0.499985 0 -1 0 0 -1 0 -0.965932 0 0.258797 0 -1 0 -0.965932 0 -0.258797 0 -1 0 0 0.978552 0.206 0 1 0 0.866034 0 -0.499985 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.965932 0 -0.258797 0 -1 0 0 -1 0 0 -1 0 0 0.978552 0.206 0 1 0 1 0 0 -1 0 0 0 0 -1 -0.997859 0 0.0654012 0 -1 0 0 0 -1 -0.997859 0 0.0654012 -0.965932 0 0.258797 0 -1 0 -0.965932 0 0.258797 0 -1 0 1 0 0 0.991449 0 -0.130497 -0.866034 0 0.499985 0.965932 0 0.258797 0.965932 0 -0.258797 0.965932 0 0.258797 0.866034 0 0.499985 0.866034 0 -0.499985 0.866034 0 0.499985 -0.707083 0 0.70713 -0.707083 0 0.70713 0.707083 0 0.70713 -0.499985 0 0.866034 -0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 -0.866034 0.499985 0 0.866034 -0.258797 0 0.965932 0 -1 0 -0.258797 0 0.965932 0.258797 0 0.965932 0.258797 0 -0.965932 0 0 1 0 0 -1 0 -1 0 0 0 1 0 0 1 0 0 -1 0.719041 0 -0.694968 0 0 -1 0.719041 0 -0.694968 -0.258797 0 -0.965932 -0.258797 0 0.965932 0 -1 0 0.258797 0 0.965932 0.258797 0 0.965932 -0.499985 0 -0.866034 0.499985 0 0.866034 0.499985 0 0.866034 -0.707083 0 0.70713 0.757433 0 -0.652913 0.70713 0 0.707083 0.70713 0 0.707083 0.757433 0 -0.652913 -0.866034 0 -0.499985 -0.866034 0 0.499985 -0.965932 0 -0.258797 -0.965932 0 0.258797 0.866034 0 -0.499985 0.866034 0 0.499985 0.866034 0 0.499985 -0.991449 0 -0.130497 -1 0 0 -1 0 0 0.965932 0 0.258797 0.965932 0 0.258797 0.965932 0 -0.258797 0.991449 0 0.130497 1 0 0 -5.07307e-008 0.97855 0.20601 0 -1 0 0 -1 0 0 1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.382672 -0.923884 0 -0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0.923884 0.382672 0 0.923884 0.382672 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.438372 0 0.898794 0.438372 0 0.898794 -0.438371 0 -0.898794 0.438368 0 0.898796 0.438368 0 0.898796 0.438368 0 0.898796 0.438368 0 0.898796 0.438368 0 0.898796 0.438368 0 0.898796 0.438368 0 0.898796 0.438368 0 0.898796 -0.438368 0 -0.898796 -0.438368 0 -0.898796 -0.438368 0 -0.898796 -0.438368 0 -0.898796 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.898796 0 -0.438368 0.898796 0 -0.438368 0.898796 0 -0.438368 0.898796 0 -0.438368 0 1 0 0 1 0 0 1 0 0 1 0 -0.898796 0 0.438368 -0.898796 0 0.438368 -0.898796 0 0.438368 -0.898796 0 0.438368 -0.438368 0 -0.898796 -0.438368 0 -0.898796 -0.438368 0 -0.898796 -0.438368 0 -0.898796 -0.438371 0 -0.898794 -0.438337 0 -0.898811 -0.438337 0 -0.898811 -0.438337 0 -0.898811 -0.438337 0 -0.898811 -0.438337 0 -0.898811 0.854811 0.309 -0.416913 0.438368 0 0.898796 0.438368 0 0.898796 0.438368 0 0.898796 0.438368 0 0.898796 0.438368 0 0.898796 0.854811 -0.309 -0.416913 -0.438337 0 -0.898811 -0.438337 0 -0.898811 0.438368 0 0.898796 0.438368 0 0.898796 -0.854811 -0.309 0.416913 -0.438337 0 -0.898811 -0.438337 0 -0.898811 -0.438337 0 -0.898811 -0.438337 0 -0.898811 -0.438337 0 -0.898811 -0.528275 0.809032 0.257668 0.438368 0 0.898796 -0.528275 -0.809032 0.257668 0.438368 0 0.898796 0.438368 0 0.898796 0.438368 0 0.898796 0.438368 0 0.898796 0.438368 0 0.898796 0.854811 -0.309 -0.416913 0.528275 0.809032 -0.257668 0.528275 -0.809032 -0.257668 0.854811 0.309 -0.416913 0.528275 0.809032 -0.257668 0.528275 -0.809032 -0.257668 0 1 0 0 -1 0 0 1 0 0 -1 0 -0.528275 0.809032 0.257668 -0.528275 -0.809032 0.257668 -0.854811 0.309 0.416913 -0.854811 0.309 0.416913 -0.854811 -0.309 0.416913 -0.438363 5.83947e-007 -0.898798 0.438381 -6.86109e-007 0.898789 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.898796 0 0.438368 -0.898796 0 0.438368 -0.898796 0 0.438368 -0.898796 0 0.438368 0.438368 0 0.898796 0.438368 0 0.898796 0.438368 0 0.898796 0.438368 0 0.898796 0.898796 0 -0.438368 0.898796 0 -0.438368 0.898796 0 -0.438368 0.898796 0 -0.438368 -0.438368 0 -0.898796 -0.438368 0 -0.898796 -0.438368 0 -0.898796 -0.438368 0 -0.898796 0.309946 -0.707143 0.635517 0.309946 -0.707143 0.635517 0.309946 -0.707143 0.635517 0.309946 -0.707143 0.635517 0.309946 -0.707143 0.635517 0.309946 -0.707143 0.635517 0.309946 -0.707143 0.635517 0.309946 -0.707143 0.635517 0.309946 -0.707143 0.635517 0.309946 -0.707143 0.635517 -0.438368 0 -0.898796 -0.438368 0 -0.898796 -0.438368 0 -0.898796 -0.438368 0 -0.898796 -0.438368 0 -0.898796 -0.438368 0 -0.898796 -0.438368 0 -0.898796 -0.438368 0 -0.898796 -0.438368 0 -0.898796 -0.438368 0 -0.898796 0.528275 -0.809032 -0.257668 0.528275 -0.809032 -0.257668 0.854811 -0.309 -0.416913 0.854811 -0.309 -0.416913 0.854811 -0.309 -0.416913 0.854811 -0.309 -0.416913 0.854811 0.309 -0.416913 0.854811 0.309 -0.416913 0.854811 0.309 -0.416913 0.854811 0.309 -0.416913 0.528275 0.809032 -0.257668 0.528275 0.809032 -0.257668 0.528275 0.809032 -0.257668 0.528275 0.809032 -0.257668 0 1 0 0 1 0 0 1 0 0 1 0 -0.528275 0.809042 0.257637 -0.528275 0.809042 0.257637 -0.528275 0.809042 0.257637 -0.528275 0.809042 0.257637 -0.854811 0.309 0.416913 -0.854811 0.309 0.416913 -0.854811 0.309 0.416913 -0.854811 0.309 0.416913 -0.854811 -0.309 0.416913 -0.854811 -0.309 0.416913 -0.854811 -0.309 0.416913 -0.854811 -0.309 0.416913 -0.528275 -0.809032 0.257668 -0.528275 -0.809032 0.257668 -0.528275 -0.809032 0.257668 -0.528275 -0.809032 0.257668 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.528275 -0.809032 -0.257668 0.528275 -0.809032 -0.257668 -1 0 0 0 0 1 -1 0 0 0 0 -1 -1 0 0 0 0 1 -1 0 0 0 0 -1 0 0 -1 0.898796 0 -0.438368 0 0 -1 0.898796 0 -0.438368 -0.898796 0 0.438368 0 0 1 -0.898796 0 0.438368 0 0 1 -0.898796 0 0.438368 0.438368 0 0.898796 -0.898796 0 0.438368 0.438368 0 0.898796 0.438368 0 0.898796 0.898796 0 -0.438368 0.438368 0 0.898796 0.898796 0 -0.438368 0 -1 0 0 1 0 -1 0 0 0 -1 0 0 0 -1 -1 0 0 0 0 -1 0 1 0 0 -1 0 0.967666 0 0.252235 0 1 0 0.967666 0 0.252235 0 -1 0 0.866034 0 0.499985 0 1 0 0.499985 0 0.866034 0 -1 0 0.258797 0 0.965932 0 -1 0 0.300851 0 -0.953671 0 1 0 0.300851 0 -0.953671 0 1 0 0 0 1 -0.279885 0 0.960033 0 -1 0 -0.279885 0 0.960033 0 1 0 -1 0 0 0.993127 0 0.117038 -1 0 0 0.993127 0 0.117038 0.866034 0 0.499985 0.70713 0 0.707083 0.70713 0 0.707083 0.499985 0 0.866034 0.258797 0 0.965932 0 0 1 -0.422742 0 0.90625 0.57384 0 -0.818968 -0.422742 0 0.90625 0.57384 0 -0.818968 0 1 0 0 -1 0 -1 0 0 0 0 -1 0 -1 0 -1 0 0 0 0 -1 -0.846457 -0.532456 0 0 0 1 -0.258797 0.965932 0 0 0 1 0 0 1 0.0871303 -0.996197 0 0 0 -1 0.0871303 -0.996197 0 0 0 -1 0.378368 0.886932 0.264931 0.92026 0.391308 0 0 0 1 0.378368 0.886932 0.264931 0.92026 0.391308 0 0 -1 0 0 0 -1 0.96612 -0.258095 0 0 1 0 -1 0 0 0 0 1 0 1 0 0 0 -1 0 1 0 0 0 1 0.287637 0.95774 0 0 -1 0 0 0 1 0 0 -1 0 -1 0 1 0 0 0 -1 0 0 0 -1 0.751432 -0.65981 0 0 -1 0 0 0 1 0.751432 -0.65981 0 0 0 1 0.889647 -0.456648 0 -1 0 0 0 0 1 0 -1 0 -0.846457 -0.532456 0 0 0 -1 0 -1 0 0 -1 0 -0.781683 -0.623676 0 0 0 -1 -0.642781 -0.76605 0 0 0 1 -0.499985 -0.866034 0 0 0 -1 -0.34199 -0.939703 0 0 0 1 -0.484787 0.874633 0 0 0 -1 -0.484787 0.874633 0 0 0 1 0 0 1 0.258797 0.965932 0 0 0 -1 0.287637 0.95774 0 0 0 1 0 -1 0 1 0 0 1 0 0 0 -1 0 0 0 -1 1 0 0 0 -1 0 0 0 -1 0.889647 -0.456648 0 0 -1 0 0 -1 0 0 0 1 0.96612 -0.258095 0 0 0 -1 1 0 0 0 0 1 1 0 0 -0.3502 0.936675 0 -0.3502 0.936675 0 -0.781683 -0.623676 0 -0.642781 -0.76605 0 -0.499985 -0.866034 0 -0.619068 0.785337 0 -0.619068 0.785337 0 -0.34199 -0.939703 0 -0.17362 -0.984813 0 -0.17362 -0.984813 0 -0.258797 0.965932 0 0 -1 0 0 -1 0 0 1 0 -1 0 0 0 -1 0 -1 0 0 -1 0 0 0 -1 0 -1 0 0 0.258797 0.965932 0 0.468947 0.883226 0 0.468947 0.883226 0 0.78649 -0.617603 0 0.78649 -0.617603 0 0.8564 -0.516312 0 0.8564 -0.516312 0 0.194769 0.971321 0.136387 0.194769 0.971321 0.136387 0.945423 0.325846 0 0.945423 0.325846 0 0.984872 -0.173284 0 0.984872 -0.173284 0 0.984813 0.17362 0 0.984813 0.17362 0 0 0 1 0 0 -1 -0.939703 -0.34199 0 0 0 1 -0.939703 0.34199 0 0 0 -1 -0.76605 0.642781 0 0 0 1 -0.642781 0.76605 0 0 0 -1 0 0 1 0 1 0 0 0 -1 0.391339 -0.920247 0 0 0 1 0.391339 -0.920247 0 0 0 -1 0.499985 0.866034 0 0 0 1 0.642781 0.76605 0 0 0 1 0.984872 -0.173284 0 0 0 -1 1 0 0 -0.984813 0.17362 0 0 0 1 -0.939703 -0.34199 0 0 0 -1 -0.499985 -0.866034 0 0 0 -1 -0.34199 -0.939703 0 0 0 1 -0.17362 -0.984813 0 0 0 -1 1 0 0 1 0 0 0 -1 0 0 0 -1 1 0 0 0 -1 0 0 0 1 1 0 0 -1 0 0 0 0 -1 0.597125 -0.802148 0 -1 0 0 0 0 1 0.597125 -0.802148 0 0 0 -1 0.902302 0.431104 0 -1 0 0 0 0 -1 -0.866034 -0.499985 0 0 0 1 -0.866034 0.499985 0 0 0 1 -0.76605 -0.642781 0 0 0 -1 -0.642781 -0.76605 0 0 0 1 -0.499985 0.866034 0 0 0 -1 -0.499985 0.866034 0 0 0 1 -0.17362 0.984813 0 0 0 -1 0 0 -1 0.17362 -0.984813 0 0 0 1 0.17362 -0.984813 0 0 0 -1 0.17362 0.984813 0 0 0 1 0.34199 0.939703 0 -1 0 0 0 -1 0 0 0 -1 -1 0 0 0 -1 0 0 0 1 0 0 -1 0.76605 -0.642781 0 0 0 -1 0.76605 0.642781 0 0 0 1 0.86621 -0.49968 0 0 0 1 0.852466 0.522782 0 0 0 -1 0.939948 -0.341319 0 0 0 1 0.984813 0.17362 0 -1 0 0 -0.984813 -0.17362 0 -0.984813 -0.17362 0 -0.984813 0.17362 0 -0.939703 0.34199 0 -0.866034 -0.499985 0 -0.866034 0.499985 0 -0.76605 -0.642781 0 -0.76605 0.642781 0 -0.642781 0.76605 0 -0.642781 -0.76605 0 -0.499985 -0.866034 0 -0.34199 -0.939703 0 -0.34199 0.939703 0 -0.34199 0.939703 0 -0.17362 -0.984813 0 -0.17362 0.984813 0 0 -1 0 0 -1 0 0 1 0 0.17362 0.984813 0 0.325877 -0.945412 0 0.325877 -0.945412 0 0.34199 0.939703 0 0.499985 0.866034 0 0.642781 0.76605 0 0.653829 -0.756643 0 0.653829 -0.756643 0 0.76605 -0.642781 0 0.76605 0.642781 0 0.86621 -0.49968 0 0.852466 0.522782 0 0.902302 0.431104 0 0.945423 0.325846 0 0.945423 0.325846 0 0.939948 -0.341319 0 0.984872 -0.173284 0 0.984813 0.17362 0 1 0 0 0 0 -1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.965932 0 -0.258797 0.965932 0 -0.258797 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.258797 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.965932 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.258797 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.965932 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.965932 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.258797 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.258797 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.965932 0 0 1 0 0 1 0 0 1 0 0 1 0.258797 0 0.965932 0.258797 0 0.965932 0.258797 0 0.965932 0.258797 0 0.965932 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.70713 0 0.707083 0.70713 0 0.707083 0.70713 0 0.707083 0.70713 0 0.707083 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.965932 0 0.258797 0.965932 0 0.258797 0.965932 0 0.258797 0.965932 0 0.258797 1 0 0 1 0 0 1 0 0 1 0 0 0.965932 0 -0.258797 0.965932 0 -0.258797 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.809038 0 -0.587756 0.809038 0 -0.587756 0.309 0 -0.951062 0.309 0 -0.951062 0.309 0 -0.951062 0.309 0 -0.951062 -0.309 0 -0.951062 -0.309 0 -0.951062 -0.309 0 -0.951062 -0.309 0 -0.951062 -0.809038 0 -0.587756 -0.809038 0 -0.587756 -0.809038 0 -0.587756 -0.809038 0 -0.587756 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.809038 0 0.587756 -0.809038 0 0.587756 -0.809038 0 0.587756 -0.809038 0 0.587756 -0.309 0 0.951062 -0.309 0 0.951062 -0.309 0 0.951062 -0.309 0 0.951062 0.309 0 0.951062 0.309 0 0.951062 0.309 0 0.951062 0.309 0 0.951062 0.809038 0 0.587756 0.809038 0 0.587756 0.809038 0 0.587756 0.809038 0 0.587756 1 0 0 1 0 0 1 0 0 1 0 0 0.809038 0 -0.587756 0.809038 0 -0.587756 + + + + + + + + + + + + + + +

0 0 1 1 2 2 3 3

+

4 4 5 5 6 6 7 7

+

8 8 9 9 10 10 11 11

+

12 12 13 13 14 14 15 15

+

16 16 17 17 18 18 19 19

+

20 20 21 21 22 22 23 23

+
+ + + +

24 24 25 25 26 26 27 27

+

28 28 29 29 30 30 31 31

+

32 32 33 33 34 34 35 35

+

36 36 37 37 38 38 39 39

+

40 40 41 41 42 42 43 43

+
+ + + +

44 44 45 44 46 44 47 44

+

48 44 49 44 50 44 51 44

+

52 44 53 44 54 44 55 44 56 44

+

57 44 58 44 59 44 60 44

+
+ + + +

133 109 134 109 112 109 110 109

+

110 109 124 109 136 109 133 109

+
+ + + +

132 110 135 110 122 110 108 110

+

108 110 106 110 131 110 132 110

+
+ + + +

129 111 126 111 72 111 90 111

+

90 111 92 111 130 111 129 111

+
+ + + +

128 112 127 112 86 112 88 112

+

88 112 70 112 125 112 128 112

+
+ + + +

113 97 94 78 97 81 115 99

+

103 87 120 104 118 102 100 84

+

67 51 68 52 84 68 81 65

+

75 59 61 45 64 48 78 62

+

70 54 88 72 77 61 63 47

+

65 49 71 55 69 53 62 46

+

90 74 72 56 66 50 80 64

+

91 75 89 73 79 63 82 66

+

102 86 111 95 92 76 83 67

+

110 94 112 96 104 88 101 85

+

123 107 109 93 99 83 117 101

+

116 100 122 106 124 108 119 103

+

107 91 121 105 114 98 96 80

+

106 90 108 92 98 82 95 79

+

74 58 86 70 105 89 93 77

+

87 71 85 69 73 57 76 60

+
+ + + +

147 153 182 153 190 153 191 153 181 153 148 153

+
+ + + +

147 153 190 153 194 153 167 153 162 153 154 153

+

167 153 194 153 195 153 168 153 176 153 174 153

+

148 153 156 153 164 153 168 153 195 153 191 153

+
+ + + +

187 154 152 154 146 154 186 154

+

188 154 203 154 202 154 160 154 152 154 187 154

+

202 154 201 154 197 154 160 154

+
+ + + +

184 155 185 155 189 155 150 155

+

184 155 150 155 158 155 193 155

+

183 155 184 155 193 155 192 155

+

158 155 199 155 198 155 192 155 193 155

+

158 155 196 155 200 155 199 155

+
+ + + +

170 156 204 156 196 156 165 156

+

207 156 206 156 204 156 170 156 172 156 205 156

+

205 156 172 156 166 156 197 156

+
+ + + +

180 157 138 157 179 157 177 157 178 157

+

145 157 189 157 179 157 138 157

+
+ + + +

171 147 175 151 168 144 166 142

+

170 146 174 150 176 152 172 148

+

173 149 169 145 165 141 167 143

+

158 134 162 138 167 143 165 141

+

150 126 154 130 161 137 157 133

+

153 129 149 125 145 121 147 123

+

138 114 142 118 147 123 145 121

+

139 115 143 119 141 117 137 113

+

144 120 140 116 146 122 148 124

+

151 127 155 131 148 124 146 122

+

159 135 163 139 156 132 152 128

+

164 140 160 136 166 142 168 144

+
+ + + +

208 194 211 194 249 194 249 194 212 194 208 194 251 194 230 194 224 194 224 194 218 194 251 194 223 194 250 194 217 194 250 194 223 194 229 194 241 194 253 194 235 194 253 194 241 194 236 194

+
+ + + +

251 194 254 194 253 194 236 194 230 194

+

251 194 218 194 212 194 249 194 245 194 246 194 247 194

+

211 194 217 194 250 194 248 194 244 194 245 194 249 194

+

253 194 252 194 250 194 229 194 235 194

+
+ + + +

237 187 231 181 226 176 220 170 214 164 210 160 216 166 222 172 228 178 233 183 239 189 242 192

+

236 186 240 190 234 184 230 180

+

230 180 234 184 227 177 224 174

+

224 174 227 177 221 171 218 168

+

218 168 221 171 215 165 212 162

+

212 162 215 165 209 159 208 158

+

208 158 209 159 213 163 211 161

+

211 161 213 163 219 169 217 167

+

217 167 219 169 225 175 223 173

+

223 173 225 175 232 182 229 179

+

229 179 232 182 238 188 235 185

+

235 185 238 188 243 193 241 191

+

241 191 243 193 240 190 236 186

+
+ + + +

255 195 256 196 257 197 258 198

+

259 199 260 200 261 201 262 202

+

263 203 264 204 265 205 266 206

+

267 207 268 208 269 209 270 210

+

271 211 272 212 273 213 274 214

+
+ + + +

275 215 276 215 277 215 278 215

+

279 215 280 215 281 215 282 215

+

283 215 284 215 285 215 286 215 287 215

+

288 215 289 215 290 215 291 215

+
+ + + +

359 280 356 280 297 280 313 280

+

313 280 308 280 358 280 359 280

+
+ + + +

363 281 362 281 328 281 333 281

+

333 281 349 281 366 281 363 281

+
+ + + +

360 282 361 282 323 282 318 282

+

318 282 302 282 357 282 360 282

+
+ + + +

364 283 367 283 354 283 338 283

+

338 283 343 283 365 283 364 283

+
+ + + +

355 279 339 263 334 258 350 274

+

325 249 344 268 346 270 330 254

+

295 219 292 216 306 230 311 235

+

320 244 303 227 299 223 315 239

+

302 226 318 242 316 240 300 224

+

293 217 296 220 301 225 298 222

+

313 237 297 221 294 218 310 234

+

307 231 312 236 309 233 304 228

+

324 248 327 251 308 232 305 229

+

333 257 328 252 326 250 331 255

+

348 272 332 256 329 253 345 269

+

352 276 354 278 349 273 347 271

+

337 261 353 277 351 275 335 259

+

343 267 338 262 336 260 341 265

+

321 245 323 247 342 266 340 264

+

317 241 322 246 319 243 314 238

+
+ + + +

399 324 424 324 423 324 418 324 419 324 379 324

+
+ + + +

399 324 423 324 422 324 397 324 403 324 407 324

+

397 324 422 324 417 324 377 324 383 324 391 324

+

379 324 375 324 371 324 377 324 417 324 418 324

+
+ + + +

411 325 373 325 378 325 416 325

+

409 325 408 325 410 325 369 325 373 325 411 325

+

410 325 414 325 415 325 369 325

+
+ + + +

435 326 430 326 429 326 405 326

+

435 326 405 326 401 326 434 326

+

438 326 435 326 434 326 437 326

+

401 326 433 326 436 326 437 326 434 326

+

401 326 428 326 427 326 433 326

+
+ + + +

389 327 426 327 428 327 396 327

+

412 327 425 327 426 327 389 327 381 327 413 327

+

413 327 381 327 376 327 415 327

+
+ + + +

420 328 393 328 431 328 432 328 421 328

+

398 328 429 328 431 328 393 328

+
+ + + +

400 316 402 318 397 313 396 312

+

405 321 407 323 403 319 401 317

+

406 322 404 320 398 314 399 315

+

393 309 395 311 399 315 398 314

+

385 301 387 303 394 310 392 308

+

386 302 384 300 378 294 379 295

+

373 289 375 291 379 295 378 294

+

368 284 370 286 374 290 372 288

+

371 287 369 285 376 292 377 293

+

380 296 382 298 377 293 376 292

+

388 304 390 306 383 299 381 297

+

391 307 389 305 396 312 397 313

+
+ + + +

480 375 482 375 457 375 457 375 478 375 480 375 440 375 475 375 474 375 474 375 476 375 440 375 484 375 473 375 466 375 473 375 484 375 483 375 479 375 456 375 481 375 456 375 479 375 477 375

+
+ + + +

440 375 439 375 456 375 477 375 475 375

+

440 375 476 375 478 375 457 375 458 375 441 375 485 375

+

482 375 466 375 473 375 486 375 471 375 458 375 457 375

+

456 375 472 375 473 375 483 375 481 375

+
+ + + +

467 357 461 351 454 344 451 341 447 337 443 333 445 335 449 339 453 343 459 349 463 353 469 359

+

483 373 464 354 460 350 481 371

+

481 371 460 350 452 342 479 369

+

479 369 452 342 448 338 477 367

+

477 367 448 338 444 334 475 365

+

475 365 444 334 442 332 474 364

+

474 364 442 332 446 336 476 366

+

476 366 446 336 450 340 478 368

+

478 368 450 340 455 345 480 370

+

480 370 455 345 462 352 482 372

+

482 372 462 352 468 358 466 356

+

466 356 468 358 470 360 484 374

+

484 374 470 360 464 354 483 373

+
+ + + +

487 376 488 376 489 376 490 376 491 376

+
+ + + +

492 377 493 377 494 377 495 377 496 377

+
+ + + +

497 378 498 378 499 378 500 378 501 378 502 378

+
+ + + +

503 379 504 379 505 379 506 379 507 379

+
+ + + +

508 380 509 380 510 380 511 380 512 380

+
+ + + +

513 381 514 381 515 381 516 381 517 381

+
+ + + +

518 382 519 382 520 382 521 382 522 382

+
+ + + +

523 383 524 383 525 383 526 383 527 383

+
+ + + +

528 384 529 384 530 384 531 384 532 384

+
+ + + +

533 385 534 385 535 385 536 385 537 385

+
+ + + +

538 386 539 386 540 386 541 386 542 386

+
+ + + +

543 387 544 387 545 387 546 387 547 387

+
+ + + +

548 388 549 388 550 388 551 388 552 388

+
+ + + +

553 389 554 389 555 389 556 389 557 389

+
+ + + +

558 390 559 390 560 390 561 390 562 390

+
+ + + +

563 391 564 391 565 391 566 391 567 391

+
+ + + +

568 392 569 392 570 392 571 392 572 392

+
+ + + +

573 393 574 393 575 393 576 393 577 393

+
+ + + +

578 394 579 394 580 394 581 394 582 394

+

583 394 584 394 585 394 586 394

+
+ + + +

587 395 588 395 589 395 590 395 591 395

+

592 395 593 395 594 395 595 395

+
+ + + +

596 396 597 396 598 396 599 396

+
+ + + +

600 397 601 397 602 397 603 397

+
+ + + +

604 398 605 398 606 398 607 398

+
+ + + +

608 399 609 399 610 399 611 399

+

612 399 613 399 614 399 615 399 616 399

+

617 399 618 399 619 399 620 399

+
+ + + +

621 400 622 400 623 400 624 400

+
+ + + +

625 401 626 401 627 401 628 401

+
+ + + +

629 402 630 402 631 402 632 402

+
+ + + +

633 403 634 403 635 403 636 403

+

637 403 638 403 639 403 640 403 641 403

+

642 403 643 403 644 403 645 403 646 403

+

647 403 648 403 649 403 650 403

+
+ + + +

651 404 652 404 653 404 654 404

+
+ + + +

655 405 656 405 657 405 658 405

+

659 405 660 405 661 405 662 405

+
+ + + +

663 406 664 406 665 406 666 406 667 406

+

668 406 669 406 670 406 671 406

+
+ + + +

672 407 673 407 674 407 675 407

+
+ + + +

676 408 677 408 678 408 679 408

+
+ + + +

680 409 681 409 682 409 683 409

+
+ + + +

684 410 685 410 686 410 687 410

+
+ + + +

688 411 689 411 690 411 691 411

+
+ + + +

692 412 693 412 694 412 695 412

+
+ + + +

696 413 697 413 698 413 699 413

+
+ + + +

700 414 701 414 702 414 703 414

+

704 414 705 414 706 414 707 414 708 414

+

709 414 710 414 711 414 712 414

+
+ + + +

713 415 714 415 715 415 716 415

+
+ + + +

717 416 718 416 719 416 720 416

+
+ + + +

721 417 722 417 723 417 724 417 725 417

+

726 417 727 417 728 417 729 417

+
+ + + +

730 418 731 418 732 418 733 418 734 418

+

735 418 736 418 737 418 738 418

+
+ + + +

739 419 740 419 741 419 742 419

+
+ + + +

743 420 744 420 745 420 746 420

+
+ + + +

747 421 748 421 749 421 750 421 751 421

+

752 421 753 421 754 421 755 421

+
+ + + +

756 422 757 422 758 422 759 422

+
+ + + +

760 423 761 423 762 423 763 423

+

764 423 765 423 766 423 767 423

+
+ + + +

768 424 769 424 770 424 771 424

+

772 424 773 424 774 424 775 424

+
+ + + +

776 425 777 425 778 425 779 425

+

780 425 781 425 782 425 783 425

+
+ + + +

784 426 785 426 786 426 787 426

+
+ + + +

788 427 789 427 790 427 791 427

+
+ + + +

792 428 793 428 794 428 795 428

+
+ + + +

796 429 797 429 798 429 799 429

+
+ + + +

800 430 801 430 802 430 803 430

+
+ + + +

804 431 805 431 806 431 807 431

+
+ + + +

808 432 809 432 810 432 811 432

+
+ + + +

812 433 813 433 814 433 815 433 816 433

+

817 433 818 433 819 433 820 433

+
+ + + +

821 434 822 434 823 434

+
+ + + +

829 435 830 435 831 435

+
+ + + +

824 435 825 435 826 435 827 435 828 435

+
+ + + +

832 436 833 436 834 436

+
+ + + +

840 437 841 437 842 437

+
+ + + +

835 437 836 437 837 437 838 437 839 437

+
+ + + +

847 438 848 438 849 438

+
+ + + +

843 438 844 438 845 438 846 438

+
+ + + +

850 439 851 439 852 439

+
+ + + +

853 440 854 440 855 440

+
+ + + +

862 441 863 441 864 441

+
+ + + +

856 441 857 441 858 441 859 441 860 441 861 441

+
+ + + +

934 514 978 514 979 514

+
+ + + +

973 514 970 514 969 514 929 514 980 514 981 514

+

979 514 980 514 929 514 934 514

+

928 514 971 514 976 514 977 514

+

928 514 977 514 978 514 934 514

+
+ + + +

937 515 941 515 874 515

+
+ + + +

940 515 939 515 938 515 868 515

+

938 515 937 515 874 515 868 515

+
+ + + +

892 516 947 516 946 516

+
+ + + +

956 516 904 516 958 516 960 516 961 516

+

958 516 957 516 959 516 960 516

+

898 516 950 516 954 516 955 516 957 516 958 516 904 516

+

950 516 898 516 892 516 946 516 945 516 949 516

+
+ + + +

922 517 966 517 968 517 916 517 964 517 963 517

+
+ + + +

975 517 967 517 966 517 974 517

+

972 517 974 517 966 517 922 517 916 517 963 517 962 517 965 517

+
+ + + +

899 518 952 518 953 518 951 518

+

893 518 948 518 944 518 942 518 943 518

+

951 518 948 518 893 518 899 518

+
+ + + +

936 513 933 510 927 504 921 498 915 492 909 486 902 479 896 473 890 467 884 461 878 455 872 449 866 443 870 447 876 453 882 459 888 465 894 471 900 477 907 484 913 490 919 496 925 502 931 508

+

932 509 929 506 923 500 926 503

+

926 503 923 500 917 494 920 497

+

920 497 917 494 911 488 914 491

+

914 491 911 488 905 482 908 485

+

908 485 905 482 899 476 903 480

+

903 480 899 476 893 470 897 474

+

897 474 893 470 887 464 891 468

+

891 468 887 464 881 458 885 462

+

885 462 881 458 875 452 879 456

+

879 456 875 452 869 446 873 450

+

873 450 869 446 865 442 867 444

+

867 444 865 442 868 445 871 448

+

871 448 868 445 874 451 877 454

+

877 454 874 451 880 457 883 460

+

883 460 880 457 886 463 889 466

+

889 466 886 463 892 469 895 472

+

895 472 892 469 898 475 901 478

+

901 478 898 475 904 481 906 483

+

906 483 904 481 910 487 912 489

+

912 489 910 487 916 493 918 495

+

918 495 916 493 922 499 924 501

+

924 501 922 499 928 505 930 507

+

930 507 928 505 934 511 935 512

+

935 512 934 511 929 506 932 509

+
+ + + +

986 519 987 519 988 519

+
+ + + +

982 519 983 519 984 519 985 519

+
+ + + +

993 520 994 520 995 520

+
+ + + +

989 520 990 520 991 520 992 520

+
+ + + +

1002 521 1003 521 1004 521

+
+ + + +

996 521 997 521 998 521 999 521 1000 521 1001 521

+
+ + + +

1005 522 1006 522 1007 522 1012 522 1013 522 1014 522

+
+ + + +

1008 522 1009 522 1010 522 1011 522

+
+ + + +

1015 523 1016 523 1017 523

+
+ + + +

1028 524 1029 524 1030 524

+
+ + + +

1018 524 1019 524 1020 524 1021 524

+

1022 524 1023 524 1024 524 1025 524 1026 524 1027 524

+
+ + + +

1031 525 1032 525 1033 525

+
+ + + +

1034 526 1035 526 1036 526

+
+ + + +

1037 527 1038 527 1039 527

+
+ + + +

1040 528 1041 528 1042 528

+
+ + + +

1043 529 1044 529 1045 529 1046 529 1047 529 1048 529

+
+ + + +

1049 530 1050 530 1051 530

+
+ + + +

1052 531 1053 531 1054 531 1055 531 1056 531 1057 531

+
+ + + +

1058 532 1059 532 1060 532 1061 532 1062 532 1063 532

+
+ + + +

1070 533 1071 533 1072 533

+
+ + + +

1064 533 1065 533 1066 533 1067 533 1068 533 1069 533

+
+ + + +

1080 534 1081 534 1082 534

+
+ + + +

1073 534 1074 534 1075 534 1076 534 1077 534 1078 534 1079 534

+
+ + + +

1088 535 1089 535 1090 535

+
+ + + +

1083 535 1084 535 1085 535 1086 535 1087 535

+
+ + + +

1091 536 1092 536 1093 536 1094 536 1095 536 1096 536

+
+ + + +

1097 537 1098 537 1099 537 1100 537 1101 537 1102 537

+
+ + + +

1103 538 1104 538 1105 538 1106 538 1107 538 1108 538

+
+ + + +

1109 539 1110 539 1111 539 1112 539 1113 539 1114 539

+
+ + + +

1120 540 1121 540 1122 540

+
+ + + +

1115 540 1116 540 1117 540 1118 540 1119 540

+
+ + + +

1456 1213 1158 1213 1799 1213 1799 1213 1798 1213 1431 1213

+
+ + + +

1455 1213 1456 1213 1799 1213 1431 1213

+
+ + + +

1431 1214 1798 1214 1797 1214 1797 1214 1795 1214 1421 1214

+
+ + + +

1421 1214 1420 1214 1431 1214 1797 1214

+
+ + + +

1434 1215 1421 1215 1150 1215 1421 1215 1795 1215 1150 1215

+
+ + + +

1275 1215 1158 1215 1456 1215 1487 1215 1493 1215 1501 1215 1509 1215 1516 1215 1587 1215 1611 1215

+

1611 1215 1629 1215 1644 1215 1650 1215 1647 1215 1631 1215 1614 1215 1801 1215 1275 1215

+

1614 1215 1590 1215 1519 1215 1512 1215 1504 1215 1496 1215 1490 1215 1497 1215 1801 1215

+

1490 1215 1459 1215 1434 1215 1150 1215 1484 1215 1497 1215

+
+ + + +

1146 1216 1411 1216 1423 1216 1190 1216 1452 1216 1181 1216

+
+ + + +

1225 1216 1202 1216 1203 1216 1221 1216 1228 1216

+

1181 1216 1468 1216 1203 1216 1202 1216 1190 1216

+

1203 1216 1468 1216 1466 1216 1191 1216 1197 1216 1208 1216 1480 1216 1221 1216

+

1453 1216 1170 1216 1191 1216 1466 1216

+

1441 1216 1167 1216 1170 1216 1453 1216

+

1424 1216 1153 1216 1167 1216 1441 1216

+

1147 1216 1153 1216 1424 1216 1412 1216

+

1407 1216 1131 1216 1400 1216 1138 1216 1147 1216 1412 1216

+

1411 1216 1146 1216 1139 1216 1130 1216 1131 1216 1407 1216

+

1166 1216 1146 1216 1423 1216 1440 1216

+

1440 1216 1452 1216 1190 1216 1166 1216

+
+ + + +

1506 1217 1528 1217 1555 1217

+
+ + + +

1555 1217 1570 1217 1801 1217 1497 1217 1498 1217 1506 1217

+

1246 1217 1513 1217 1529 1217 1521 1217

+

1521 1217 1528 1217 1506 1217 1246 1217

+
+ + + +

1796 1218 1797 1218 1798 1218 1798 1218 1799 1218 1796 1218

+
+ + + +

1228 1219 1221 1219 1218 1219

+
+ + + +

1218 1219 1231 1219 1506 1219 1498 1219 1228 1219

+
+ + + +

1126 1220 1150 1220 1795 1220

+
+ + + +

1386 1220 1384 1220 1126 1220 1387 1220

+

1126 1220 1795 1220 1797 1220 1796 1220 1387 1220

+
+ + + +

1177 1221 1185 1221 1187 1221 1187 1221 1451 1221 1177 1221 1142 1221 1154 1221 1152 1221 1142 1221 1152 1221 1409 1221 1143 1221 1410 1221 1422 1221

+
+ + + +

1451 1221 1187 1221 1189 1221 1165 1221 1436 1221

+

1422 1221 1436 1221 1165 1221 1145 1221 1143 1221

+

1409 1221 1406 1221 1133 1221 1132 1221 1142 1221

+

1410 1221 1143 1221 1136 1221 1133 1221 1406 1221

+
+ + + +

1184 1222 1465 1222 1450 1222

+
+ + + +

1184 1222 1183 1222 1469 1222 1201 1222

+

1164 1222 1163 1222 1444 1222 1173 1222 1182 1222

+

1129 1222 1141 1222 1413 1222 1425 1222 1435 1222 1163 1222 1164 1222 1162 1222 1154 1222

+

1450 1222 1162 1222 1164 1222 1182 1222 1183 1222 1184 1222

+

1481 1222 1212 1222 1210 1222 1215 1222

+

1199 1222 1200 1222 1186 1222 1185 1222 1193 1222

+

1210 1222 1200 1222 1199 1222 1222 1222 1215 1222

+

1478 1222 1224 1222 1222 1222 1199 1222 1198 1222 1201 1222 1206 1222

+

1465 1222 1184 1222 1198 1222 1199 1222 1193 1222

+
+ + + +

1368 1223 1354 1223 1686 1223 1368 1223 1686 1223 1700 1223 1368 1223 1700 1223 1701 1223 1699 1223 1685 1223 1365 1223 1685 1223 1684 1223 1365 1223

+
+ + + +

1365 1223 1368 1223 1701 1223 1699 1223

+
+ + + +

1338 1224 1684 1224 1678 1224 1338 1224 1678 1224 1676 1224 1338 1224 1676 1224 1675 1224 1677 1224 1679 1224 1342 1224 1679 1224 1350 1224 1342 1224

+
+ + + +

1677 1224 1342 1224 1338 1224 1675 1224

+
+ + + +

1293 1225 1272 1225 1578 1225 1293 1225 1578 1225 1583 1225 1293 1225 1583 1225 1584 1225 1582 1225 1577 1225 1585 1225 1577 1225 1568 1225 1585 1225

+
+ + + +

1585 1225 1293 1225 1584 1225 1582 1225

+
+ + + +

1262 1226 1568 1226 1565 1226 1262 1226 1565 1226 1563 1226 1262 1226 1563 1226 1562 1226 1564 1226 1566 1226 1264 1226 1566 1226 1269 1226 1264 1226

+
+ + + +

1564 1226 1264 1226 1262 1226 1562 1226

+
+ + + +

1367 1227 1373 1227 1725 1227 1367 1227 1725 1227 1716 1227 1367 1227 1716 1227 1714 1227 1715 1227 1724 1227 1363 1227 1724 1227 1375 1227 1363 1227

+
+ + + +

1363 1227 1367 1227 1714 1227 1715 1227

+
+ + + +

1380 1228 1375 1228 1736 1228 1380 1228 1736 1228 1738 1228 1380 1228 1738 1228 1740 1228 1739 1228 1737 1228 1382 1228 1737 1228 1377 1228 1382 1228

+
+ + + +

1739 1228 1382 1228 1380 1228 1740 1228

+
+ + + +

1345 1229 1680 1229 1682 1229

+
+ + + +

1682 1229 1354 1229 1357 1229 1356 1229

+

1345 1229 1682 1229 1356 1229 1355 1229 1348 1229 1344 1229

+

1345 1229 1346 1229 1347 1229 1350 1229 1680 1229

+
+ + + +

1371 1230 1723 1230 1721 1230

+
+ + + +

1359 1230 1370 1230 1369 1230 1367 1230 1358 1230

+

1370 1230 1721 1230 1373 1230 1369 1230

+

1371 1230 1721 1230 1370 1230 1359 1230 1360 1230 1361 1230

+

1371 1230 1379 1230 1378 1230 1377 1230 1723 1230

+
+ + + +

1287 1231 1579 1231 1581 1231

+
+ + + +

1581 1231 1272 1231 1273 1231 1288 1231

+

1581 1231 1288 1231 1296 1231 1295 1231 1294 1231 1287 1231

+

1269 1231 1579 1231 1287 1231 1267 1231

+
+ + + +

1308 1232 1310 1232 1311 1232 1318 1232 1321 1232 1320 1232

+
+ + + +

1300 1232 1308 1232 1311 1232 1318 1232 1320 1232 1319 1232 1802 1232 1315 1232 1307 1232

+
+ + + +

1260 1233 1265 1233 1266 1233 1282 1233 1286 1233 1285 1233

+
+ + + +

1281 1233 1569 1233 1284 1233 1283 1233

+

1282 1233 1285 1233 1284 1233 1569 1233 1554 1233 1257 1233 1800 1233 1255 1233 1260 1233 1266 1233

+
+ + + +

1235 1234 1231 1234 1232 1234 1396 1234 1387 1234 1796 1234 1796 1234 1402 1234 1396 1234 1796 1234 1416 1234 1402 1234 1158 1234 1439 1234 1428 1234 1158 1234 1445 1234 1439 1234 1158 1234 1462 1234 1445 1234 1158 1234 1472 1234 1462 1234 1158 1234 1477 1234 1472 1234 1231 1234 1483 1234 1479 1234

+
+ + + +

1796 1234 1799 1234 1158 1234 1428 1234 1416 1234

+

1477 1234 1158 1234 1232 1234 1231 1234 1479 1234

+

1231 1234 1218 1234 1482 1234 1483 1234

+
+ + + +

1238 1235 1235 1235 1234 1235

+
+ + + +

1248 1235 1241 1235 1238 1235 1234 1235 1233 1235 1247 1235

+
+ + + +

1309 1236 1303 1236 1302 1236

+
+ + + +

1309 1236 1302 1236 1301 1236 1305 1236 1313 1236 1316 1236 1317 1236

+
+ + + +

1513 1237 1241 1237 1251 1237 1254 1237

+

1259 1237 1529 1237 1513 1237 1254 1237

+
+ + + +

1533 1238 1537 1238 1269 1238 1566 1238

+

1537 1238 1580 1238 1579 1238 1269 1238

+
+ + + +

1537 1239 1541 1239 1578 1239 1272 1239

+

1581 1239 1580 1239 1537 1239 1272 1239

+
+ + + +

1705 1240 1709 1240 1350 1240 1679 1240

+

1709 1240 1681 1240 1680 1240 1350 1240

+
+ + + +

1709 1241 1713 1241 1686 1241 1354 1241

+

1682 1241 1681 1241 1709 1241 1354 1241

+
+ + + +

1774 1242 1770 1242 1377 1242 1737 1242

+

1770 1242 1722 1242 1723 1242 1377 1242

+
+ + + +

1770 1243 1764 1243 1725 1243 1373 1243

+

1721 1243 1722 1243 1770 1243 1373 1243

+
+ + + +

1569 1244 1281 1244 1801 1244 1570 1244

+

1281 1244 1277 1244 1275 1244 1801 1244

+
+ + + +

1651 1245 1331 1245 1328 1245 1329 1245

+

1335 1245 1803 1245 1330 1245 1331 1245 1651 1245 1804 1245 1343 1245 1340 1245

+

1331 1245 1330 1245 1327 1245 1328 1245

+
+ + + +

1721 1246 1723 1246 1722 1246

+
+ + + +

1721 1247 1723 1247 1722 1247 1682 1247 1680 1247 1681 1247

+
+ + + +

1721 1248 1723 1248 1722 1248 1682 1248 1680 1248 1681 1248 1581 1248 1579 1248 1580 1248

+
+ + + +

1721 1139 1723 1141 1722 1140 1682 1100 1680 1098 1681 1099 1581 999 1579 997 1580 998 1553 971 1559 977 1608 1026 1559 977 1574 992 1608 1026 1574 992 1594 1012 1608 1026 1594 1012 1602 1020 1608 1026 1602 1020 1624 1042 1607 1025 1624 1042 1639 1057 1607 1025 1576 994 1561 979 1605 1023 1596 1014 1576 994 1605 1023 1604 1022 1596 1014 1605 1023 1626 1044 1604 1022 1605 1023 1641 1059 1626 1044 1606 1024 1732 1150 1691 1109 1665 1083 1691 1109 1673 1091 1665 1083 1673 1091 1655 1073 1665 1083 1655 1073 1641 1059 1665 1083 1665 1083 1641 1059 1605 1023 1755 1173 1665 1083 1668 1086 1749 1167 1754 1172 1666 1084 1743 1161 1749 1167 1667 1085 1730 1148 1743 1161 1668 1086 1689 1107 1730 1148 1668 1086 1671 1089 1689 1107 1666 1084 1653 1071 1671 1089 1668 1086 1639 1057 1653 1071 1666 1084 1605 1023 1548 966 1607 1025 1561 979 1548 966 1605 1023 1745 1163 1732 1150 1663 1081 1755 1173 1745 1163 1664 1082 1549 967 1553 971 1608 1026

+
+ + + +

1639 1057 1668 1086 1665 1083 1605 1023 1607 1025

+

1560 978 1556 974 1546 964 1547 965

+

1575 993 1571 989 1556 974 1560 978

+

1595 1013 1591 1009 1571 989 1575 993

+

1603 1021 1599 1017 1591 1009 1595 1013

+

1621 1039 1599 1017 1603 1021 1625 1043

+

1634 1052 1621 1039 1625 1043 1640 1058

+

1651 1069 1634 1052 1640 1058 1656 1074

+

1669 1087 1651 1069 1656 1074 1674 1092

+

1687 1105 1669 1087 1674 1092 1692 1110

+

1687 1105 1692 1110 1733 1151 1728 1146

+

1733 1151 1746 1164 1741 1159 1728 1146

+

1746 1164 1756 1174 1753 1171 1741 1159

+

1744 1162 1742 1160 1753 1171 1756 1174 1750 1168

+

1731 1149 1729 1147 1742 1160 1744 1162

+

1690 1108 1688 1106 1729 1147 1731 1149

+

1672 1090 1670 1088 1688 1106 1690 1108

+

1654 1072 1652 1070 1670 1088 1672 1090

+

1638 1056 1635 1053 1652 1070 1654 1072

+

1623 1041 1622 1040 1635 1053 1638 1056

+

1601 1019 1600 1018 1622 1040 1623 1041

+

1593 1011 1592 1010 1600 1018 1601 1019

+

1573 991 1572 990 1592 1010 1593 1011

+

1558 976 1557 975 1572 990 1573 991

+

1546 964 1557 975 1558 976 1552 970 1547 965

+
+ + + +

1721 1139 1723 1141 1722 1140 1682 1100 1680 1098 1681 1099 1581 999 1579 997 1580 998 1553 971 1559 977 1608 1026 1559 977 1574 992 1608 1026 1574 992 1594 1012 1608 1026 1594 1012 1602 1020 1608 1026 1602 1020 1624 1042 1607 1025 1624 1042 1639 1057 1607 1025 1576 994 1561 979 1605 1023 1596 1014 1576 994 1605 1023 1604 1022 1596 1014 1605 1023 1626 1044 1604 1022 1605 1023 1641 1059 1626 1044 1606 1024 1732 1150 1691 1109 1665 1083 1691 1109 1673 1091 1665 1083 1673 1091 1655 1073 1665 1083 1655 1073 1641 1059 1665 1083 1665 1083 1641 1059 1605 1023 1755 1173 1665 1083 1668 1086 1749 1167 1754 1172 1666 1084 1743 1161 1749 1167 1667 1085 1730 1148 1743 1161 1668 1086 1689 1107 1730 1148 1668 1086 1671 1089 1689 1107 1666 1084 1653 1071 1671 1089 1668 1086 1639 1057 1653 1071 1666 1084 1605 1023 1548 966 1607 1025 1561 979 1548 966 1605 1023 1745 1163 1732 1150 1663 1081 1755 1173 1745 1163 1664 1082 1549 967 1553 971 1608 1026

+
+ + + +

1639 1057 1668 1086 1665 1083 1605 1023 1607 1025

+

1560 978 1556 974 1546 964 1547 965

+

1575 993 1571 989 1556 974 1560 978

+

1595 1013 1591 1009 1571 989 1575 993

+

1603 1021 1599 1017 1591 1009 1595 1013

+

1621 1039 1599 1017 1603 1021 1625 1043

+

1634 1052 1621 1039 1625 1043 1640 1058

+

1651 1069 1634 1052 1640 1058 1656 1074

+

1669 1087 1651 1069 1656 1074 1674 1092

+

1687 1105 1669 1087 1674 1092 1692 1110

+

1687 1105 1692 1110 1733 1151 1728 1146

+

1733 1151 1746 1164 1741 1159 1728 1146

+

1746 1164 1756 1174 1753 1171 1741 1159

+

1744 1162 1742 1160 1753 1171 1756 1174 1750 1168

+

1731 1149 1729 1147 1742 1160 1744 1162

+

1690 1108 1688 1106 1729 1147 1731 1149

+

1672 1090 1670 1088 1688 1106 1690 1108

+

1654 1072 1652 1070 1670 1088 1672 1090

+

1638 1056 1635 1053 1652 1070 1654 1072

+

1623 1041 1622 1040 1635 1053 1638 1056

+

1601 1019 1600 1018 1622 1040 1623 1041

+

1593 1011 1592 1010 1600 1018 1601 1019

+

1573 991 1572 990 1592 1010 1593 1011

+

1558 976 1557 975 1572 990 1573 991

+

1546 964 1557 975 1558 976 1552 970 1547 965

+

1578 996 1541 959 1545 963 1583 1001

+

1551 969 1584 1002 1583 1001 1545 963

+

1543 961 1582 1000 1584 1002 1551 969

+

1582 1000 1543 961 1539 957 1577 995

+

1523 941 1562 980 1563 981 1525 943

+

1527 945 1564 982 1562 980 1523 941

+

1564 982 1527 945 1533 951 1566 984

+

1537 955 1532 950 1526 944 1522 940 1524 942 1530 948 1534 952 1538 956 1542 960 1550 968 1544 962 1540 958

+

1565 983 1531 949 1525 943 1563 981

+

1531 949 1565 983 1567 985 1535 953

+

1536 954 1568 986 1577 995 1539 957

+
+ + + +

1721 1139 1723 1141 1722 1140 1682 1100 1680 1098 1681 1099 1581 999 1579 997 1580 998 1553 971 1559 977 1608 1026 1559 977 1574 992 1608 1026 1574 992 1594 1012 1608 1026 1594 1012 1602 1020 1608 1026 1602 1020 1624 1042 1607 1025 1624 1042 1639 1057 1607 1025 1576 994 1561 979 1605 1023 1596 1014 1576 994 1605 1023 1604 1022 1596 1014 1605 1023 1626 1044 1604 1022 1605 1023 1641 1059 1626 1044 1606 1024 1732 1150 1691 1109 1665 1083 1691 1109 1673 1091 1665 1083 1673 1091 1655 1073 1665 1083 1655 1073 1641 1059 1665 1083 1665 1083 1641 1059 1605 1023 1755 1173 1665 1083 1668 1086 1749 1167 1754 1172 1666 1084 1743 1161 1749 1167 1667 1085 1730 1148 1743 1161 1668 1086 1689 1107 1730 1148 1668 1086 1671 1089 1689 1107 1666 1084 1653 1071 1671 1089 1668 1086 1639 1057 1653 1071 1666 1084 1605 1023 1548 966 1607 1025 1561 979 1548 966 1605 1023 1745 1163 1732 1150 1663 1081 1755 1173 1745 1163 1664 1082 1549 967 1553 971 1608 1026

+
+ + + +

1639 1057 1668 1086 1665 1083 1605 1023 1607 1025

+

1560 978 1556 974 1546 964 1547 965

+

1575 993 1571 989 1556 974 1560 978

+

1595 1013 1591 1009 1571 989 1575 993

+

1603 1021 1599 1017 1591 1009 1595 1013

+

1621 1039 1599 1017 1603 1021 1625 1043

+

1634 1052 1621 1039 1625 1043 1640 1058

+

1651 1069 1634 1052 1640 1058 1656 1074

+

1669 1087 1651 1069 1656 1074 1674 1092

+

1687 1105 1669 1087 1674 1092 1692 1110

+

1687 1105 1692 1110 1733 1151 1728 1146

+

1733 1151 1746 1164 1741 1159 1728 1146

+

1746 1164 1756 1174 1753 1171 1741 1159

+

1744 1162 1742 1160 1753 1171 1756 1174 1750 1168

+

1731 1149 1729 1147 1742 1160 1744 1162

+

1690 1108 1688 1106 1729 1147 1731 1149

+

1672 1090 1670 1088 1688 1106 1690 1108

+

1654 1072 1652 1070 1670 1088 1672 1090

+

1638 1056 1635 1053 1652 1070 1654 1072

+

1623 1041 1622 1040 1635 1053 1638 1056

+

1601 1019 1600 1018 1622 1040 1623 1041

+

1593 1011 1592 1010 1600 1018 1601 1019

+

1573 991 1572 990 1592 1010 1593 1011

+

1558 976 1557 975 1572 990 1573 991

+

1546 964 1557 975 1558 976 1552 970 1547 965

+

1578 996 1541 959 1545 963 1583 1001

+

1551 969 1584 1002 1583 1001 1545 963

+

1543 961 1582 1000 1584 1002 1551 969

+

1582 1000 1543 961 1539 957 1577 995

+

1523 941 1562 980 1563 981 1525 943

+

1527 945 1564 982 1562 980 1523 941

+

1564 982 1527 945 1533 951 1566 984

+

1537 955 1532 950 1526 944 1522 940 1524 942 1530 948 1534 952 1538 956 1542 960 1550 968 1544 962 1540 958

+

1565 983 1531 949 1525 943 1563 981

+

1531 949 1565 983 1567 985 1535 953

+

1536 954 1568 986 1577 995 1539 957

+

1720 1138 1700 1118 1686 1104 1713 1131

+

1727 1145 1701 1119 1700 1118 1720 1138

+

1718 1136 1699 1117 1701 1119 1727 1145

+

1709 1127 1705 1123 1698 1116 1694 1112 1696 1114 1703 1121 1707 1125 1710 1128 1717 1135 1726 1144 1719 1137 1712 1130

+

1704 1122 1679 1097 1677 1095 1697 1115

+

1697 1115 1677 1095 1675 1093 1693 1111

+

1693 1111 1675 1093 1676 1094 1695 1113

+

1695 1113 1676 1094 1678 1096 1702 1120

+

1702 1120 1678 1096 1683 1101 1706 1124

+

1708 1126 1684 1102 1685 1103 1711 1129

+

1711 1129 1685 1103 1699 1117 1718 1136

+
+ + + +

1721 1139 1723 1141 1722 1140 1682 1100 1680 1098 1681 1099 1581 999 1579 997 1580 998 1553 971 1559 977 1608 1026 1559 977 1574 992 1608 1026 1574 992 1594 1012 1608 1026 1594 1012 1602 1020 1608 1026 1602 1020 1624 1042 1607 1025 1624 1042 1639 1057 1607 1025 1576 994 1561 979 1605 1023 1596 1014 1576 994 1605 1023 1604 1022 1596 1014 1605 1023 1626 1044 1604 1022 1605 1023 1641 1059 1626 1044 1606 1024 1732 1150 1691 1109 1665 1083 1691 1109 1673 1091 1665 1083 1673 1091 1655 1073 1665 1083 1655 1073 1641 1059 1665 1083 1665 1083 1641 1059 1605 1023 1755 1173 1665 1083 1668 1086 1749 1167 1754 1172 1666 1084 1743 1161 1749 1167 1667 1085 1730 1148 1743 1161 1668 1086 1689 1107 1730 1148 1668 1086 1671 1089 1689 1107 1666 1084 1653 1071 1671 1089 1668 1086 1639 1057 1653 1071 1666 1084 1605 1023 1548 966 1607 1025 1561 979 1548 966 1605 1023 1745 1163 1732 1150 1663 1081 1755 1173 1745 1163 1664 1082 1549 967 1553 971 1608 1026

+
+ + + +

1639 1057 1668 1086 1665 1083 1605 1023 1607 1025

+

1560 978 1556 974 1546 964 1547 965

+

1575 993 1571 989 1556 974 1560 978

+

1595 1013 1591 1009 1571 989 1575 993

+

1603 1021 1599 1017 1591 1009 1595 1013

+

1621 1039 1599 1017 1603 1021 1625 1043

+

1634 1052 1621 1039 1625 1043 1640 1058

+

1651 1069 1634 1052 1640 1058 1656 1074

+

1669 1087 1651 1069 1656 1074 1674 1092

+

1687 1105 1669 1087 1674 1092 1692 1110

+

1687 1105 1692 1110 1733 1151 1728 1146

+

1733 1151 1746 1164 1741 1159 1728 1146

+

1746 1164 1756 1174 1753 1171 1741 1159

+

1744 1162 1742 1160 1753 1171 1756 1174 1750 1168

+

1731 1149 1729 1147 1742 1160 1744 1162

+

1690 1108 1688 1106 1729 1147 1731 1149

+

1672 1090 1670 1088 1688 1106 1690 1108

+

1654 1072 1652 1070 1670 1088 1672 1090

+

1638 1056 1635 1053 1652 1070 1654 1072

+

1623 1041 1622 1040 1635 1053 1638 1056

+

1601 1019 1600 1018 1622 1040 1623 1041

+

1593 1011 1592 1010 1600 1018 1601 1019

+

1573 991 1572 990 1592 1010 1593 1011

+

1558 976 1557 975 1572 990 1573 991

+

1546 964 1557 975 1558 976 1552 970 1547 965

+

1578 996 1541 959 1545 963 1583 1001

+

1551 969 1584 1002 1583 1001 1545 963

+

1543 961 1582 1000 1584 1002 1551 969

+

1582 1000 1543 961 1539 957 1577 995

+

1523 941 1562 980 1563 981 1525 943

+

1527 945 1564 982 1562 980 1523 941

+

1564 982 1527 945 1533 951 1566 984

+

1537 955 1532 950 1526 944 1522 940 1524 942 1530 948 1534 952 1538 956 1542 960 1550 968 1544 962 1540 958

+

1565 983 1531 949 1525 943 1563 981

+

1531 949 1565 983 1567 985 1535 953

+

1536 954 1568 986 1577 995 1539 957

+

1720 1138 1700 1118 1686 1104 1713 1131

+

1727 1145 1701 1119 1700 1118 1720 1138

+

1718 1136 1699 1117 1701 1119 1727 1145

+

1709 1127 1705 1123 1698 1116 1694 1112 1696 1114 1703 1121 1707 1125 1710 1128 1717 1135 1726 1144 1719 1137 1712 1130

+

1704 1122 1679 1097 1677 1095 1697 1115

+

1697 1115 1677 1095 1675 1093 1693 1111

+

1693 1111 1675 1093 1676 1094 1695 1113

+

1695 1113 1676 1094 1678 1096 1702 1120

+

1702 1120 1678 1096 1683 1101 1706 1124

+

1708 1126 1684 1102 1685 1103 1711 1129

+

1711 1129 1685 1103 1699 1117 1718 1136

+

1759 1177 1716 1134 1725 1143 1763 1181

+

1751 1169 1714 1132 1716 1134 1759 1177

+

1757 1175 1715 1133 1714 1132 1751 1169

+

1770 1188 1774 1192 1788 1206 1790 1208 1786 1204 1772 1190 1769 1187 1762 1180 1758 1176 1752 1170 1760 1178 1764 1182

+

1773 1191 1737 1155 1739 1157 1787 1205

+

1787 1205 1739 1157 1740 1158 1789 1207

+

1789 1207 1740 1158 1738 1156 1785 1203

+

1785 1203 1738 1156 1736 1154 1771 1189

+

1771 1189 1736 1154 1735 1153 1768 1186

+

1767 1185 1734 1152 1724 1142 1761 1179

+

1761 1179 1724 1142 1715 1133 1757 1175

+
+ + + +

1721 1139 1723 1141 1722 1140 1682 1100 1680 1098 1681 1099 1581 999 1579 997 1580 998 1553 971 1559 977 1608 1026 1559 977 1574 992 1608 1026 1574 992 1594 1012 1608 1026 1594 1012 1602 1020 1608 1026 1602 1020 1624 1042 1607 1025 1624 1042 1639 1057 1607 1025 1576 994 1561 979 1605 1023 1596 1014 1576 994 1605 1023 1604 1022 1596 1014 1605 1023 1626 1044 1604 1022 1605 1023 1641 1059 1626 1044 1606 1024 1732 1150 1691 1109 1665 1083 1691 1109 1673 1091 1665 1083 1673 1091 1655 1073 1665 1083 1655 1073 1641 1059 1665 1083 1665 1083 1641 1059 1605 1023 1755 1173 1665 1083 1668 1086 1749 1167 1754 1172 1666 1084 1743 1161 1749 1167 1667 1085 1730 1148 1743 1161 1668 1086 1689 1107 1730 1148 1668 1086 1671 1089 1689 1107 1666 1084 1653 1071 1671 1089 1668 1086 1639 1057 1653 1071 1666 1084 1605 1023 1548 966 1607 1025 1561 979 1548 966 1605 1023 1745 1163 1732 1150 1663 1081 1755 1173 1745 1163 1664 1082 1549 967 1553 971 1608 1026

+
+ + + +

1639 1057 1668 1086 1665 1083 1605 1023 1607 1025

+

1560 978 1556 974 1546 964 1547 965

+

1575 993 1571 989 1556 974 1560 978

+

1595 1013 1591 1009 1571 989 1575 993

+

1603 1021 1599 1017 1591 1009 1595 1013

+

1621 1039 1599 1017 1603 1021 1625 1043

+

1634 1052 1621 1039 1625 1043 1640 1058

+

1651 1069 1634 1052 1640 1058 1656 1074

+

1669 1087 1651 1069 1656 1074 1674 1092

+

1687 1105 1669 1087 1674 1092 1692 1110

+

1687 1105 1692 1110 1733 1151 1728 1146

+

1733 1151 1746 1164 1741 1159 1728 1146

+

1746 1164 1756 1174 1753 1171 1741 1159

+

1744 1162 1742 1160 1753 1171 1756 1174 1750 1168

+

1731 1149 1729 1147 1742 1160 1744 1162

+

1690 1108 1688 1106 1729 1147 1731 1149

+

1672 1090 1670 1088 1688 1106 1690 1108

+

1654 1072 1652 1070 1670 1088 1672 1090

+

1638 1056 1635 1053 1652 1070 1654 1072

+

1623 1041 1622 1040 1635 1053 1638 1056

+

1601 1019 1600 1018 1622 1040 1623 1041

+

1593 1011 1592 1010 1600 1018 1601 1019

+

1573 991 1572 990 1592 1010 1593 1011

+

1558 976 1557 975 1572 990 1573 991

+

1546 964 1557 975 1558 976 1552 970 1547 965

+

1578 996 1541 959 1545 963 1583 1001

+

1551 969 1584 1002 1583 1001 1545 963

+

1543 961 1582 1000 1584 1002 1551 969

+

1582 1000 1543 961 1539 957 1577 995

+

1523 941 1562 980 1563 981 1525 943

+

1527 945 1564 982 1562 980 1523 941

+

1564 982 1527 945 1533 951 1566 984

+

1537 955 1532 950 1526 944 1522 940 1524 942 1530 948 1534 952 1538 956 1542 960 1550 968 1544 962 1540 958

+

1565 983 1531 949 1525 943 1563 981

+

1531 949 1565 983 1567 985 1535 953

+

1536 954 1568 986 1577 995 1539 957

+

1720 1138 1700 1118 1686 1104 1713 1131

+

1727 1145 1701 1119 1700 1118 1720 1138

+

1718 1136 1699 1117 1701 1119 1727 1145

+

1709 1127 1705 1123 1698 1116 1694 1112 1696 1114 1703 1121 1707 1125 1710 1128 1717 1135 1726 1144 1719 1137 1712 1130

+

1704 1122 1679 1097 1677 1095 1697 1115

+

1697 1115 1677 1095 1675 1093 1693 1111

+

1693 1111 1675 1093 1676 1094 1695 1113

+

1695 1113 1676 1094 1678 1096 1702 1120

+

1702 1120 1678 1096 1683 1101 1706 1124

+

1708 1126 1684 1102 1685 1103 1711 1129

+

1711 1129 1685 1103 1699 1117 1718 1136

+

1759 1177 1716 1134 1725 1143 1763 1181

+

1751 1169 1714 1132 1716 1134 1759 1177

+

1757 1175 1715 1133 1714 1132 1751 1169

+

1770 1188 1774 1192 1788 1206 1790 1208 1786 1204 1772 1190 1769 1187 1762 1180 1758 1176 1752 1170 1760 1178 1764 1182

+

1773 1191 1737 1155 1739 1157 1787 1205

+

1787 1205 1739 1157 1740 1158 1789 1207

+

1789 1207 1740 1158 1738 1156 1785 1203

+

1785 1203 1738 1156 1736 1154 1771 1189

+

1771 1189 1736 1154 1735 1153 1768 1186

+

1767 1185 1734 1152 1724 1142 1761 1179

+

1761 1179 1724 1142 1715 1133 1757 1175

+

1466 884 1174 592 1451 869 1453 871

+

1453 871 1451 869 1436 854 1441 859

+

1441 859 1436 854 1422 840 1424 842

+

1424 842 1422 840 1410 828 1412 830

+

1412 830 1410 828 1406 824 1407 825

+

1407 825 1406 824 1409 827 1411 829

+

1411 829 1409 827 1152 570 1423 841

+

1423 841 1152 570 1162 580 1440 858

+

1440 858 1162 580 1450 868 1452 870

+

1452 870 1450 868 1465 883 1178 596

+

1178 596 1465 883 1192 610 1468 886

+

1468 886 1192 610 1174 592 1466 884

+
+ + + +

1721 1139 1723 1141 1722 1140 1682 1100 1680 1098 1681 1099 1581 999 1579 997 1580 998 1553 971 1559 977 1608 1026 1559 977 1574 992 1608 1026 1574 992 1594 1012 1608 1026 1594 1012 1602 1020 1608 1026 1602 1020 1624 1042 1607 1025 1624 1042 1639 1057 1607 1025 1576 994 1561 979 1605 1023 1596 1014 1576 994 1605 1023 1604 1022 1596 1014 1605 1023 1626 1044 1604 1022 1605 1023 1641 1059 1626 1044 1606 1024 1732 1150 1691 1109 1665 1083 1691 1109 1673 1091 1665 1083 1673 1091 1655 1073 1665 1083 1655 1073 1641 1059 1665 1083 1665 1083 1641 1059 1605 1023 1755 1173 1665 1083 1668 1086 1749 1167 1754 1172 1666 1084 1743 1161 1749 1167 1667 1085 1730 1148 1743 1161 1668 1086 1689 1107 1730 1148 1668 1086 1671 1089 1689 1107 1666 1084 1653 1071 1671 1089 1668 1086 1639 1057 1653 1071 1666 1084 1605 1023 1548 966 1607 1025 1561 979 1548 966 1605 1023 1745 1163 1732 1150 1663 1081 1755 1173 1745 1163 1664 1082 1549 967 1553 971 1608 1026

+
+ + + +

1639 1057 1668 1086 1665 1083 1605 1023 1607 1025

+

1560 978 1556 974 1546 964 1547 965

+

1575 993 1571 989 1556 974 1560 978

+

1595 1013 1591 1009 1571 989 1575 993

+

1603 1021 1599 1017 1591 1009 1595 1013

+

1621 1039 1599 1017 1603 1021 1625 1043

+

1634 1052 1621 1039 1625 1043 1640 1058

+

1651 1069 1634 1052 1640 1058 1656 1074

+

1669 1087 1651 1069 1656 1074 1674 1092

+

1687 1105 1669 1087 1674 1092 1692 1110

+

1687 1105 1692 1110 1733 1151 1728 1146

+

1733 1151 1746 1164 1741 1159 1728 1146

+

1746 1164 1756 1174 1753 1171 1741 1159

+

1744 1162 1742 1160 1753 1171 1756 1174 1750 1168

+

1731 1149 1729 1147 1742 1160 1744 1162

+

1690 1108 1688 1106 1729 1147 1731 1149

+

1672 1090 1670 1088 1688 1106 1690 1108

+

1654 1072 1652 1070 1670 1088 1672 1090

+

1638 1056 1635 1053 1652 1070 1654 1072

+

1623 1041 1622 1040 1635 1053 1638 1056

+

1601 1019 1600 1018 1622 1040 1623 1041

+

1593 1011 1592 1010 1600 1018 1601 1019

+

1573 991 1572 990 1592 1010 1593 1011

+

1558 976 1557 975 1572 990 1573 991

+

1546 964 1557 975 1558 976 1552 970 1547 965

+

1578 996 1541 959 1545 963 1583 1001

+

1551 969 1584 1002 1583 1001 1545 963

+

1543 961 1582 1000 1584 1002 1551 969

+

1582 1000 1543 961 1539 957 1577 995

+

1523 941 1562 980 1563 981 1525 943

+

1527 945 1564 982 1562 980 1523 941

+

1564 982 1527 945 1533 951 1566 984

+

1537 955 1532 950 1526 944 1522 940 1524 942 1530 948 1534 952 1538 956 1542 960 1550 968 1544 962 1540 958

+

1565 983 1531 949 1525 943 1563 981

+

1531 949 1565 983 1567 985 1535 953

+

1536 954 1568 986 1577 995 1539 957

+

1720 1138 1700 1118 1686 1104 1713 1131

+

1727 1145 1701 1119 1700 1118 1720 1138

+

1718 1136 1699 1117 1701 1119 1727 1145

+

1709 1127 1705 1123 1698 1116 1694 1112 1696 1114 1703 1121 1707 1125 1710 1128 1717 1135 1726 1144 1719 1137 1712 1130

+

1704 1122 1679 1097 1677 1095 1697 1115

+

1697 1115 1677 1095 1675 1093 1693 1111

+

1693 1111 1675 1093 1676 1094 1695 1113

+

1695 1113 1676 1094 1678 1096 1702 1120

+

1702 1120 1678 1096 1683 1101 1706 1124

+

1708 1126 1684 1102 1685 1103 1711 1129

+

1711 1129 1685 1103 1699 1117 1718 1136

+

1759 1177 1716 1134 1725 1143 1763 1181

+

1751 1169 1714 1132 1716 1134 1759 1177

+

1757 1175 1715 1133 1714 1132 1751 1169

+

1770 1188 1774 1192 1788 1206 1790 1208 1786 1204 1772 1190 1769 1187 1762 1180 1758 1176 1752 1170 1760 1178 1764 1182

+

1773 1191 1737 1155 1739 1157 1787 1205

+

1787 1205 1739 1157 1740 1158 1789 1207

+

1789 1207 1740 1158 1738 1156 1785 1203

+

1785 1203 1738 1156 1736 1154 1771 1189

+

1771 1189 1736 1154 1735 1153 1768 1186

+

1767 1185 1734 1152 1724 1142 1761 1179

+

1761 1179 1724 1142 1715 1133 1757 1175

+

1466 884 1174 592 1451 869 1453 871

+

1453 871 1451 869 1436 854 1441 859

+

1441 859 1436 854 1422 840 1424 842

+

1424 842 1422 840 1410 828 1412 830

+

1412 830 1410 828 1406 824 1407 825

+

1407 825 1406 824 1409 827 1411 829

+

1411 829 1409 827 1152 570 1423 841

+

1423 841 1152 570 1162 580 1440 858

+

1440 858 1162 580 1450 868 1452 870

+

1452 870 1450 868 1465 883 1178 596

+

1178 596 1465 883 1192 610 1468 886

+

1468 886 1192 610 1174 592 1466 884

+

1647 1065 1650 1068 1649 1067 1646 1064

+

1631 1049 1647 1065 1646 1064 1630 1048

+

1614 1032 1631 1049 1630 1048 1613 1031

+

1590 1008 1614 1032 1613 1031 1589 1007

+

1519 937 1590 1008 1589 1007 1518 936

+

1512 930 1519 937 1518 936 1511 929

+

1504 922 1512 930 1511 929 1502 920

+

1496 914 1504 922 1502 920 1494 912

+

1490 908 1496 914 1494 912 1488 906

+

1459 877 1490 908 1488 906 1457 875

+

1434 852 1459 877 1457 875 1432 850

+

1421 839 1434 852 1432 850 1419 837

+

1642 1060 1627 1045 1609 1027 1298 716 1514 932 1508 926 1500 918 1492 910 1486 904 1455 873 1431 849 1420 838 1433 851 1458 876 1489 907 1495 913 1503 921 1510 928 1517 935 1588 1006 1612 1030 1323 741 1645 1063 1648 1066

+

1487 905 1456 874 1454 872 1485 903

+

1493 911 1487 905 1485 903 1491 909

+

1501 919 1493 911 1491 909 1499 917

+

1509 927 1501 919 1499 917 1507 925

+

1516 934 1509 927 1507 925 1515 933

+

1587 1005 1516 934 1515 933 1586 1004

+

1611 1029 1587 1005 1586 1004 1610 1028

+

1629 1047 1611 1029 1610 1028 1628 1046

+

1644 1062 1629 1047 1628 1046 1643 1061

+

1650 1068 1644 1062 1643 1061 1649 1067

+
+ + + +

1721 1139 1723 1141 1722 1140 1682 1100 1680 1098 1681 1099 1581 999 1579 997 1580 998 1553 971 1559 977 1608 1026 1559 977 1574 992 1608 1026 1574 992 1594 1012 1608 1026 1594 1012 1602 1020 1608 1026 1602 1020 1624 1042 1607 1025 1624 1042 1639 1057 1607 1025 1576 994 1561 979 1605 1023 1596 1014 1576 994 1605 1023 1604 1022 1596 1014 1605 1023 1626 1044 1604 1022 1605 1023 1641 1059 1626 1044 1606 1024 1732 1150 1691 1109 1665 1083 1691 1109 1673 1091 1665 1083 1673 1091 1655 1073 1665 1083 1655 1073 1641 1059 1665 1083 1665 1083 1641 1059 1605 1023 1755 1173 1665 1083 1668 1086 1749 1167 1754 1172 1666 1084 1743 1161 1749 1167 1667 1085 1730 1148 1743 1161 1668 1086 1689 1107 1730 1148 1668 1086 1671 1089 1689 1107 1666 1084 1653 1071 1671 1089 1668 1086 1639 1057 1653 1071 1666 1084 1605 1023 1548 966 1607 1025 1561 979 1548 966 1605 1023 1745 1163 1732 1150 1663 1081 1755 1173 1745 1163 1664 1082 1549 967 1553 971 1608 1026

+
+ + + +

1639 1057 1668 1086 1665 1083 1605 1023 1607 1025

+

1560 978 1556 974 1546 964 1547 965

+

1575 993 1571 989 1556 974 1560 978

+

1595 1013 1591 1009 1571 989 1575 993

+

1603 1021 1599 1017 1591 1009 1595 1013

+

1621 1039 1599 1017 1603 1021 1625 1043

+

1634 1052 1621 1039 1625 1043 1640 1058

+

1651 1069 1634 1052 1640 1058 1656 1074

+

1669 1087 1651 1069 1656 1074 1674 1092

+

1687 1105 1669 1087 1674 1092 1692 1110

+

1687 1105 1692 1110 1733 1151 1728 1146

+

1733 1151 1746 1164 1741 1159 1728 1146

+

1746 1164 1756 1174 1753 1171 1741 1159

+

1744 1162 1742 1160 1753 1171 1756 1174 1750 1168

+

1731 1149 1729 1147 1742 1160 1744 1162

+

1690 1108 1688 1106 1729 1147 1731 1149

+

1672 1090 1670 1088 1688 1106 1690 1108

+

1654 1072 1652 1070 1670 1088 1672 1090

+

1638 1056 1635 1053 1652 1070 1654 1072

+

1623 1041 1622 1040 1635 1053 1638 1056

+

1601 1019 1600 1018 1622 1040 1623 1041

+

1593 1011 1592 1010 1600 1018 1601 1019

+

1573 991 1572 990 1592 1010 1593 1011

+

1558 976 1557 975 1572 990 1573 991

+

1546 964 1557 975 1558 976 1552 970 1547 965

+

1578 996 1541 959 1545 963 1583 1001

+

1551 969 1584 1002 1583 1001 1545 963

+

1543 961 1582 1000 1584 1002 1551 969

+

1582 1000 1543 961 1539 957 1577 995

+

1523 941 1562 980 1563 981 1525 943

+

1527 945 1564 982 1562 980 1523 941

+

1564 982 1527 945 1533 951 1566 984

+

1537 955 1532 950 1526 944 1522 940 1524 942 1530 948 1534 952 1538 956 1542 960 1550 968 1544 962 1540 958

+

1565 983 1531 949 1525 943 1563 981

+

1531 949 1565 983 1567 985 1535 953

+

1536 954 1568 986 1577 995 1539 957

+

1720 1138 1700 1118 1686 1104 1713 1131

+

1727 1145 1701 1119 1700 1118 1720 1138

+

1718 1136 1699 1117 1701 1119 1727 1145

+

1709 1127 1705 1123 1698 1116 1694 1112 1696 1114 1703 1121 1707 1125 1710 1128 1717 1135 1726 1144 1719 1137 1712 1130

+

1704 1122 1679 1097 1677 1095 1697 1115

+

1697 1115 1677 1095 1675 1093 1693 1111

+

1693 1111 1675 1093 1676 1094 1695 1113

+

1695 1113 1676 1094 1678 1096 1702 1120

+

1702 1120 1678 1096 1683 1101 1706 1124

+

1708 1126 1684 1102 1685 1103 1711 1129

+

1711 1129 1685 1103 1699 1117 1718 1136

+

1759 1177 1716 1134 1725 1143 1763 1181

+

1751 1169 1714 1132 1716 1134 1759 1177

+

1757 1175 1715 1133 1714 1132 1751 1169

+

1770 1188 1774 1192 1788 1206 1790 1208 1786 1204 1772 1190 1769 1187 1762 1180 1758 1176 1752 1170 1760 1178 1764 1182

+

1773 1191 1737 1155 1739 1157 1787 1205

+

1787 1205 1739 1157 1740 1158 1789 1207

+

1789 1207 1740 1158 1738 1156 1785 1203

+

1785 1203 1738 1156 1736 1154 1771 1189

+

1771 1189 1736 1154 1735 1153 1768 1186

+

1767 1185 1734 1152 1724 1142 1761 1179

+

1761 1179 1724 1142 1715 1133 1757 1175

+

1466 884 1174 592 1451 869 1453 871

+

1453 871 1451 869 1436 854 1441 859

+

1441 859 1436 854 1422 840 1424 842

+

1424 842 1422 840 1410 828 1412 830

+

1412 830 1410 828 1406 824 1407 825

+

1407 825 1406 824 1409 827 1411 829

+

1411 829 1409 827 1152 570 1423 841

+

1423 841 1152 570 1162 580 1440 858

+

1440 858 1162 580 1450 868 1452 870

+

1452 870 1450 868 1465 883 1178 596

+

1178 596 1465 883 1192 610 1468 886

+

1468 886 1192 610 1174 592 1466 884

+

1647 1065 1650 1068 1649 1067 1646 1064

+

1631 1049 1647 1065 1646 1064 1630 1048

+

1614 1032 1631 1049 1630 1048 1613 1031

+

1590 1008 1614 1032 1613 1031 1589 1007

+

1519 937 1590 1008 1589 1007 1518 936

+

1512 930 1519 937 1518 936 1511 929

+

1504 922 1512 930 1511 929 1502 920

+

1496 914 1504 922 1502 920 1494 912

+

1490 908 1496 914 1494 912 1488 906

+

1459 877 1490 908 1488 906 1457 875

+

1434 852 1459 877 1457 875 1432 850

+

1421 839 1434 852 1432 850 1419 837

+

1642 1060 1627 1045 1609 1027 1298 716 1514 932 1508 926 1500 918 1492 910 1486 904 1455 873 1431 849 1420 838 1433 851 1458 876 1489 907 1495 913 1503 921 1510 928 1517 935 1588 1006 1612 1030 1323 741 1645 1063 1648 1066

+

1487 905 1456 874 1454 872 1485 903

+

1493 911 1487 905 1485 903 1491 909

+

1501 919 1493 911 1491 909 1499 917

+

1509 927 1501 919 1499 917 1507 925

+

1516 934 1509 927 1507 925 1515 933

+

1587 1005 1516 934 1515 933 1586 1004

+

1611 1029 1587 1005 1586 1004 1610 1028

+

1629 1047 1611 1029 1610 1028 1628 1046

+

1644 1062 1629 1047 1628 1046 1643 1061

+

1650 1068 1644 1062 1643 1061 1649 1067

+

1481 899 1215 633 1482 900 1218 636

+

1480 898 1212 630 1481 899 1221 639

+

1208 626 1476 894 1212 630 1480 898

+

1470 888 1467 885 1186 604 1210 628 1475 893

+

1474 892 1471 889 1476 894 1208 626

+

1464 882 1461 879 1471 889 1474 892

+

1138 556 1405 823 1418 836 1430 848 1443 861 1448 866 1463 881 1473 891 1197 615

+

1429 847 1426 844 1438 856 1442 860

+

1442 860 1438 856 1447 865 1449 867

+

1449 867 1447 865 1461 879 1464 882

+

1189 607 1467 885 1460 878 1446 864 1437 855 1427 845 1415 833 1408 826 1145 563

+

1417 835 1414 832 1426 844 1429 847

+

1404 822 1403 821 1414 832 1417 835

+

1397 815 1394 812 1403 821 1404 822

+

1130 548 1126 544 1391 809 1398 816 1400 818

+

1123 541 1383 801 1388 806 1390 808

+

1390 808 1388 806 1394 812 1397 815

+

1393 811 1129 547 1132 550 1136 554 1399 817 1395 813 1389 807 1384 802 1386 804

+

1392 810 1385 803 1387 805 1396 814

+

1401 819 1392 810 1396 814 1402 820

+

1413 831 1401 819 1402 820 1416 834

+

1425 843 1413 831 1416 834 1428 846

+

1435 853 1425 843 1428 846 1439 857

+

1444 862 1435 853 1439 857 1445 863

+

1173 591 1444 862 1445 863 1462 880

+

1469 887 1173 591 1462 880 1472 890

+

1206 624 1469 887 1472 890 1477 895

+

1478 896 1206 624 1477 895 1479 897

+

1224 642 1478 896 1479 897 1483 901

+

1215 633 1224 642 1483 901 1482 900

+
+ + + +

1721 1249 1723 1249 1722 1249 1682 1249 1680 1249 1681 1249 1581 1249 1579 1249 1580 1249 1553 1249 1559 1249 1608 1249 1559 1249 1574 1249 1608 1249 1574 1249 1594 1249 1608 1249 1594 1249 1602 1249 1608 1249 1602 1249 1624 1249 1608 1249 1624 1249 1639 1249 1608 1249 1576 1249 1561 1249 1606 1249 1596 1249 1576 1249 1606 1249 1604 1249 1596 1249 1606 1249 1626 1249 1604 1249 1606 1249 1641 1249 1626 1249 1606 1249 1733 1249 1692 1249 1665 1249 1692 1249 1674 1249 1665 1249 1674 1249 1656 1249 1665 1249 1656 1249 1641 1249 1665 1249 1665 1249 1641 1249 1606 1249 1756 1249 1665 1249 1668 1249 1750 1249 1756 1249 1668 1249 1744 1249 1750 1249 1668 1249 1731 1249 1744 1249 1668 1249 1690 1249 1731 1249 1668 1249 1672 1249 1690 1249 1668 1249 1654 1249 1672 1249 1668 1249 1639 1249 1654 1249 1668 1249 1606 1249 1549 1249 1608 1249 1561 1249 1549 1249 1606 1249 1746 1249 1733 1249 1665 1249 1756 1249 1746 1249 1665 1249 1549 1249 1553 1249 1608 1249

+
+ + + +

1639 1249 1668 1249 1665 1249 1606 1249 1608 1249

+

1561 1249 1266 1249 1546 1249 1549 1249

+

1576 1249 1282 1249 1266 1249 1561 1249

+

1596 1249 1591 1249 1282 1249 1576 1249

+

1604 1249 1311 1249 1591 1249 1596 1249

+

1318 1249 1311 1249 1604 1249 1626 1249

+

1634 1249 1318 1249 1626 1249 1641 1249

+

1651 1249 1634 1249 1641 1249 1656 1249

+

1669 1249 1651 1249 1656 1249 1674 1249

+

1687 1249 1669 1249 1674 1249 1692 1249

+

1687 1249 1692 1249 1733 1249 1728 1249

+

1733 1249 1746 1249 1741 1249 1728 1249

+

1746 1249 1756 1249 1753 1249 1741 1249

+

1744 1249 1742 1249 1753 1249 1756 1249 1750 1249

+

1731 1249 1729 1249 1742 1249 1744 1249

+

1690 1249 1688 1249 1729 1249 1731 1249

+

1672 1249 1670 1249 1688 1249 1690 1249

+

1654 1249 1652 1249 1670 1249 1672 1249

+

1639 1249 1635 1249 1652 1249 1654 1249

+

1624 1249 1622 1249 1635 1249 1639 1249

+

1602 1249 1600 1249 1622 1249 1624 1249

+

1594 1249 1592 1249 1600 1249 1602 1249

+

1574 1249 1572 1249 1592 1249 1594 1249

+

1559 1249 1557 1249 1572 1249 1574 1249

+

1546 1249 1557 1249 1559 1249 1553 1249 1549 1249

+

1578 1249 1541 1249 1545 1249 1583 1249

+

1551 1249 1584 1249 1583 1249 1545 1249

+

1543 1249 1582 1249 1584 1249 1551 1249

+

1582 1249 1543 1249 1539 1249 1577 1249

+

1523 1249 1562 1249 1563 1249 1525 1249

+

1527 1249 1564 1249 1562 1249 1523 1249

+

1564 1249 1527 1249 1533 1249 1566 1249

+

1537 1249 1533 1249 1527 1249 1523 1249 1525 1249 1531 1249 1536 1249 1539 1249 1543 1249 1551 1249 1545 1249 1541 1249

+

1565 1249 1531 1249 1525 1249 1563 1249

+

1531 1249 1565 1249 1568 1249 1536 1249

+

1536 1249 1568 1249 1577 1249 1539 1249

+

1720 1249 1700 1249 1686 1249 1713 1249

+

1727 1249 1701 1249 1700 1249 1720 1249

+

1718 1249 1699 1249 1701 1249 1727 1249

+

1709 1249 1705 1249 1698 1249 1694 1249 1696 1249 1703 1249 1708 1249 1711 1249 1718 1249 1727 1249 1720 1249 1713 1249

+

1705 1249 1679 1249 1677 1249 1698 1249

+

1698 1249 1677 1249 1675 1249 1694 1249

+

1694 1249 1675 1249 1676 1249 1696 1249

+

1696 1249 1676 1249 1678 1249 1703 1249

+

1703 1249 1678 1249 1684 1249 1708 1249

+

1708 1249 1684 1249 1685 1249 1711 1249

+

1711 1249 1685 1249 1699 1249 1718 1249

+

1760 1249 1716 1249 1725 1249 1764 1249

+

1752 1249 1714 1249 1716 1249 1760 1249

+

1758 1249 1715 1249 1714 1249 1752 1249

+

1770 1249 1774 1249 1788 1249 1790 1249 1786 1249 1772 1249 1769 1249 1762 1249 1758 1249 1752 1249 1760 1249 1764 1249

+

1774 1249 1737 1249 1739 1249 1788 1249

+

1788 1249 1739 1249 1740 1249 1790 1249

+

1790 1249 1740 1249 1738 1249 1786 1249

+

1786 1249 1738 1249 1736 1249 1772 1249

+

1772 1249 1736 1249 1375 1249 1769 1249

+

1769 1249 1375 1249 1724 1249 1762 1249

+

1762 1249 1724 1249 1715 1249 1758 1249

+

1466 1249 1177 1249 1451 1249 1453 1249

+

1453 1249 1451 1249 1436 1249 1441 1249

+

1441 1249 1436 1249 1422 1249 1424 1249

+

1424 1249 1422 1249 1410 1249 1412 1249

+

1412 1249 1410 1249 1406 1249 1407 1249

+

1407 1249 1406 1249 1409 1249 1411 1249

+

1411 1249 1409 1249 1152 1249 1423 1249

+

1423 1249 1152 1249 1162 1249 1440 1249

+

1440 1249 1162 1249 1450 1249 1452 1249

+

1452 1249 1450 1249 1465 1249 1181 1249

+

1181 1249 1465 1249 1193 1249 1468 1249

+

1468 1249 1193 1249 1177 1249 1466 1249

+

1647 1249 1650 1249 1649 1249 1646 1249

+

1631 1249 1647 1249 1646 1249 1630 1249

+

1614 1249 1631 1249 1630 1249 1613 1249

+

1590 1249 1614 1249 1613 1249 1589 1249

+

1519 1249 1590 1249 1589 1249 1518 1249

+

1512 1249 1519 1249 1518 1249 1511 1249

+

1504 1249 1512 1249 1511 1249 1503 1249

+

1496 1249 1504 1249 1503 1249 1495 1249

+

1490 1249 1496 1249 1495 1249 1489 1249

+

1459 1249 1490 1249 1489 1249 1458 1249

+

1434 1249 1459 1249 1458 1249 1433 1249

+

1421 1249 1434 1249 1433 1249 1420 1249

+

1643 1249 1628 1249 1610 1249 1586 1249 1515 1249 1508 1249 1500 1249 1492 1249 1486 1249 1455 1249 1431 1249 1420 1249 1433 1249 1458 1249 1489 1249 1495 1249 1503 1249 1511 1249 1518 1249 1589 1249 1613 1249 1630 1249 1646 1249 1649 1249

+

1487 1249 1456 1249 1455 1249 1486 1249

+

1493 1249 1487 1249 1486 1249 1492 1249

+

1501 1249 1493 1249 1492 1249 1500 1249

+

1509 1249 1501 1249 1500 1249 1508 1249

+

1516 1249 1509 1249 1508 1249 1515 1249

+

1587 1249 1516 1249 1515 1249 1586 1249

+

1611 1249 1587 1249 1586 1249 1610 1249

+

1629 1249 1611 1249 1610 1249 1628 1249

+

1644 1249 1629 1249 1628 1249 1643 1249

+

1650 1249 1644 1249 1643 1249 1649 1249

+

1481 1249 1215 1249 1482 1249 1218 1249

+

1480 1249 1212 1249 1481 1249 1221 1249

+

1208 1249 1476 1249 1212 1249 1480 1249

+

1471 1249 1467 1249 1186 1249 1210 1249 1476 1249

+

1474 1249 1471 1249 1476 1249 1208 1249

+

1464 1249 1461 1249 1471 1249 1474 1249

+

1138 1249 1405 1249 1418 1249 1430 1249 1443 1249 1449 1249 1464 1249 1474 1249 1197 1249

+

1430 1249 1427 1249 1438 1249 1443 1249

+

1443 1249 1438 1249 1447 1249 1449 1249

+

1449 1249 1447 1249 1461 1249 1464 1249

+

1189 1249 1467 1249 1461 1249 1447 1249 1438 1249 1427 1249 1415 1249 1408 1249 1145 1249

+

1418 1249 1415 1249 1427 1249 1430 1249

+

1405 1249 1403 1249 1415 1249 1418 1249

+

1398 1249 1395 1249 1403 1249 1405 1249

+

1130 1249 1126 1249 1391 1249 1398 1249 1400 1249

+

1126 1249 1384 1249 1389 1249 1391 1249

+

1391 1249 1389 1249 1395 1249 1398 1249

+

1393 1249 1129 1249 1132 1249 1136 1249 1399 1249 1395 1249 1389 1249 1384 1249 1386 1249

+

1393 1249 1386 1249 1387 1249 1396 1249

+

1141 1249 1393 1249 1396 1249 1402 1249

+

1413 1249 1141 1249 1402 1249 1416 1249

+

1425 1249 1413 1249 1416 1249 1428 1249

+

1435 1249 1425 1249 1428 1249 1439 1249

+

1444 1249 1435 1249 1439 1249 1445 1249

+

1173 1249 1444 1249 1445 1249 1462 1249

+

1469 1249 1173 1249 1462 1249 1472 1249

+

1206 1249 1469 1249 1472 1249 1477 1249

+

1478 1249 1206 1249 1477 1249 1479 1249

+

1224 1249 1478 1249 1479 1249 1483 1249

+

1215 1249 1224 1249 1483 1249 1482 1249

+

1498 1249 1497 1249 1484 1249 1228 1249

+
+ + + +

1721 1250 1723 1250 1722 1250 1682 1250 1680 1250 1681 1250 1581 1250 1579 1250 1580 1250 1553 1250 1559 1250 1608 1250 1559 1250 1574 1250 1608 1250 1574 1250 1594 1250 1608 1250 1594 1250 1602 1250 1608 1250 1602 1250 1624 1250 1608 1250 1624 1250 1639 1250 1608 1250 1576 1250 1561 1250 1606 1250 1596 1250 1576 1250 1606 1250 1604 1250 1596 1250 1606 1250 1626 1250 1604 1250 1606 1250 1641 1250 1626 1250 1606 1250 1733 1250 1692 1250 1665 1250 1692 1250 1674 1250 1665 1250 1674 1250 1656 1250 1665 1250 1656 1250 1641 1250 1665 1250 1665 1250 1641 1250 1606 1250 1756 1250 1665 1250 1668 1250 1750 1250 1756 1250 1668 1250 1744 1250 1750 1250 1668 1250 1731 1250 1744 1250 1668 1250 1690 1250 1731 1250 1668 1250 1672 1250 1690 1250 1668 1250 1654 1250 1672 1250 1668 1250 1639 1250 1654 1250 1668 1250 1606 1250 1549 1250 1608 1250 1561 1250 1549 1250 1606 1250 1746 1250 1733 1250 1665 1250 1756 1250 1746 1250 1665 1250 1549 1250 1553 1250 1608 1250

+
+ + + +

1639 1250 1668 1250 1665 1250 1606 1250 1608 1250

+

1561 1250 1266 1250 1546 1250 1549 1250

+

1576 1250 1282 1250 1266 1250 1561 1250

+

1596 1250 1591 1250 1282 1250 1576 1250

+

1604 1250 1311 1250 1591 1250 1596 1250

+

1318 1250 1311 1250 1604 1250 1626 1250

+

1634 1250 1318 1250 1626 1250 1641 1250

+

1651 1250 1634 1250 1641 1250 1656 1250

+

1669 1250 1651 1250 1656 1250 1674 1250

+

1687 1250 1669 1250 1674 1250 1692 1250

+

1687 1250 1692 1250 1733 1250 1728 1250

+

1733 1250 1746 1250 1741 1250 1728 1250

+

1746 1250 1756 1250 1753 1250 1741 1250

+

1744 1250 1742 1250 1753 1250 1756 1250 1750 1250

+

1731 1250 1729 1250 1742 1250 1744 1250

+

1690 1250 1688 1250 1729 1250 1731 1250

+

1672 1250 1670 1250 1688 1250 1690 1250

+

1654 1250 1652 1250 1670 1250 1672 1250

+

1639 1250 1635 1250 1652 1250 1654 1250

+

1624 1250 1622 1250 1635 1250 1639 1250

+

1602 1250 1600 1250 1622 1250 1624 1250

+

1594 1250 1592 1250 1600 1250 1602 1250

+

1574 1250 1572 1250 1592 1250 1594 1250

+

1559 1250 1557 1250 1572 1250 1574 1250

+

1546 1250 1557 1250 1559 1250 1553 1250 1549 1250

+

1578 1250 1541 1250 1545 1250 1583 1250

+

1551 1250 1584 1250 1583 1250 1545 1250

+

1543 1250 1582 1250 1584 1250 1551 1250

+

1582 1250 1543 1250 1539 1250 1577 1250

+

1523 1250 1562 1250 1563 1250 1525 1250

+

1527 1250 1564 1250 1562 1250 1523 1250

+

1564 1250 1527 1250 1533 1250 1566 1250

+

1537 1250 1533 1250 1527 1250 1523 1250 1525 1250 1531 1250 1536 1250 1539 1250 1543 1250 1551 1250 1545 1250 1541 1250

+

1565 1250 1531 1250 1525 1250 1563 1250

+

1531 1250 1565 1250 1568 1250 1536 1250

+

1536 1250 1568 1250 1577 1250 1539 1250

+

1720 1250 1700 1250 1686 1250 1713 1250

+

1727 1250 1701 1250 1700 1250 1720 1250

+

1718 1250 1699 1250 1701 1250 1727 1250

+

1709 1250 1705 1250 1698 1250 1694 1250 1696 1250 1703 1250 1708 1250 1711 1250 1718 1250 1727 1250 1720 1250 1713 1250

+

1705 1250 1679 1250 1677 1250 1698 1250

+

1698 1250 1677 1250 1675 1250 1694 1250

+

1694 1250 1675 1250 1676 1250 1696 1250

+

1696 1250 1676 1250 1678 1250 1703 1250

+

1703 1250 1678 1250 1684 1250 1708 1250

+

1708 1250 1684 1250 1685 1250 1711 1250

+

1711 1250 1685 1250 1699 1250 1718 1250

+

1760 1250 1716 1250 1725 1250 1764 1250

+

1752 1250 1714 1250 1716 1250 1760 1250

+

1758 1250 1715 1250 1714 1250 1752 1250

+

1770 1250 1774 1250 1788 1250 1790 1250 1786 1250 1772 1250 1769 1250 1762 1250 1758 1250 1752 1250 1760 1250 1764 1250

+

1774 1250 1737 1250 1739 1250 1788 1250

+

1788 1250 1739 1250 1740 1250 1790 1250

+

1790 1250 1740 1250 1738 1250 1786 1250

+

1786 1250 1738 1250 1736 1250 1772 1250

+

1772 1250 1736 1250 1375 1250 1769 1250

+

1769 1250 1375 1250 1724 1250 1762 1250

+

1762 1250 1724 1250 1715 1250 1758 1250

+

1466 1250 1177 1250 1451 1250 1453 1250

+

1453 1250 1451 1250 1436 1250 1441 1250

+

1441 1250 1436 1250 1422 1250 1424 1250

+

1424 1250 1422 1250 1410 1250 1412 1250

+

1412 1250 1410 1250 1406 1250 1407 1250

+

1407 1250 1406 1250 1409 1250 1411 1250

+

1411 1250 1409 1250 1152 1250 1423 1250

+

1423 1250 1152 1250 1162 1250 1440 1250

+

1440 1250 1162 1250 1450 1250 1452 1250

+

1452 1250 1450 1250 1465 1250 1181 1250

+

1181 1250 1465 1250 1193 1250 1468 1250

+

1468 1250 1193 1250 1177 1250 1466 1250

+

1647 1250 1650 1250 1649 1250 1646 1250

+

1631 1250 1647 1250 1646 1250 1630 1250

+

1614 1250 1631 1250 1630 1250 1613 1250

+

1590 1250 1614 1250 1613 1250 1589 1250

+

1519 1250 1590 1250 1589 1250 1518 1250

+

1512 1250 1519 1250 1518 1250 1511 1250

+

1504 1250 1512 1250 1511 1250 1503 1250

+

1496 1250 1504 1250 1503 1250 1495 1250

+

1490 1250 1496 1250 1495 1250 1489 1250

+

1459 1250 1490 1250 1489 1250 1458 1250

+

1434 1250 1459 1250 1458 1250 1433 1250

+

1421 1250 1434 1250 1433 1250 1420 1250

+

1643 1250 1628 1250 1610 1250 1586 1250 1515 1250 1508 1250 1500 1250 1492 1250 1486 1250 1455 1250 1431 1250 1420 1250 1433 1250 1458 1250 1489 1250 1495 1250 1503 1250 1511 1250 1518 1250 1589 1250 1613 1250 1630 1250 1646 1250 1649 1250

+

1487 1250 1456 1250 1455 1250 1486 1250

+

1493 1250 1487 1250 1486 1250 1492 1250

+

1501 1250 1493 1250 1492 1250 1500 1250

+

1509 1250 1501 1250 1500 1250 1508 1250

+

1516 1250 1509 1250 1508 1250 1515 1250

+

1587 1250 1516 1250 1515 1250 1586 1250

+

1611 1250 1587 1250 1586 1250 1610 1250

+

1629 1250 1611 1250 1610 1250 1628 1250

+

1644 1250 1629 1250 1628 1250 1643 1250

+

1650 1250 1644 1250 1643 1250 1649 1250

+

1481 1250 1215 1250 1482 1250 1218 1250

+

1480 1250 1212 1250 1481 1250 1221 1250

+

1208 1250 1476 1250 1212 1250 1480 1250

+

1471 1250 1467 1250 1186 1250 1210 1250 1476 1250

+

1474 1250 1471 1250 1476 1250 1208 1250

+

1464 1250 1461 1250 1471 1250 1474 1250

+

1138 1250 1405 1250 1418 1250 1430 1250 1443 1250 1449 1250 1464 1250 1474 1250 1197 1250

+

1430 1250 1427 1250 1438 1250 1443 1250

+

1443 1250 1438 1250 1447 1250 1449 1250

+

1449 1250 1447 1250 1461 1250 1464 1250

+

1189 1250 1467 1250 1461 1250 1447 1250 1438 1250 1427 1250 1415 1250 1408 1250 1145 1250

+

1418 1250 1415 1250 1427 1250 1430 1250

+

1405 1250 1403 1250 1415 1250 1418 1250

+

1398 1250 1395 1250 1403 1250 1405 1250

+

1130 1250 1126 1250 1391 1250 1398 1250 1400 1250

+

1126 1250 1384 1250 1389 1250 1391 1250

+

1391 1250 1389 1250 1395 1250 1398 1250

+

1393 1250 1129 1250 1132 1250 1136 1250 1399 1250 1395 1250 1389 1250 1384 1250 1386 1250

+

1393 1250 1386 1250 1387 1250 1396 1250

+

1141 1250 1393 1250 1396 1250 1402 1250

+

1413 1250 1141 1250 1402 1250 1416 1250

+

1425 1250 1413 1250 1416 1250 1428 1250

+

1435 1250 1425 1250 1428 1250 1439 1250

+

1444 1250 1435 1250 1439 1250 1445 1250

+

1173 1250 1444 1250 1445 1250 1462 1250

+

1469 1250 1173 1250 1462 1250 1472 1250

+

1206 1250 1469 1250 1472 1250 1477 1250

+

1478 1250 1206 1250 1477 1250 1479 1250

+

1224 1250 1478 1250 1479 1250 1483 1250

+

1215 1250 1224 1250 1483 1250 1482 1250

+

1498 1250 1497 1250 1484 1250 1228 1250

+

1225 1250 1484 1250 1150 1250 1139 1250

+
+ + + +

1721 1139 1723 1141 1722 1140 1682 1100 1680 1098 1681 1099 1581 999 1579 997 1580 998 1553 971 1559 977 1608 1026 1559 977 1574 992 1608 1026 1574 992 1594 1012 1608 1026 1594 1012 1602 1020 1608 1026 1602 1020 1624 1042 1607 1025 1624 1042 1639 1057 1607 1025 1576 994 1561 979 1605 1023 1596 1014 1576 994 1605 1023 1604 1022 1596 1014 1605 1023 1626 1044 1604 1022 1605 1023 1641 1059 1626 1044 1606 1024 1732 1150 1691 1109 1665 1083 1691 1109 1673 1091 1665 1083 1673 1091 1655 1073 1665 1083 1655 1073 1641 1059 1665 1083 1665 1083 1641 1059 1605 1023 1755 1173 1665 1083 1668 1086 1749 1167 1754 1172 1666 1084 1743 1161 1749 1167 1667 1085 1730 1148 1743 1161 1668 1086 1689 1107 1730 1148 1668 1086 1671 1089 1689 1107 1666 1084 1653 1071 1671 1089 1668 1086 1639 1057 1653 1071 1666 1084 1605 1023 1548 966 1607 1025 1561 979 1548 966 1605 1023 1745 1163 1732 1150 1663 1081 1755 1173 1745 1163 1664 1082 1549 967 1553 971 1608 1026

+
+ + + +

1639 1057 1668 1086 1665 1083 1605 1023 1607 1025

+

1560 978 1556 974 1546 964 1547 965

+

1575 993 1571 989 1556 974 1560 978

+

1595 1013 1591 1009 1571 989 1575 993

+

1603 1021 1599 1017 1591 1009 1595 1013

+

1621 1039 1599 1017 1603 1021 1625 1043

+

1634 1052 1621 1039 1625 1043 1640 1058

+

1651 1069 1634 1052 1640 1058 1656 1074

+

1669 1087 1651 1069 1656 1074 1674 1092

+

1687 1105 1669 1087 1674 1092 1692 1110

+

1687 1105 1692 1110 1733 1151 1728 1146

+

1733 1151 1746 1164 1741 1159 1728 1146

+

1746 1164 1756 1174 1753 1171 1741 1159

+

1744 1162 1742 1160 1753 1171 1756 1174 1750 1168

+

1731 1149 1729 1147 1742 1160 1744 1162

+

1690 1108 1688 1106 1729 1147 1731 1149

+

1672 1090 1670 1088 1688 1106 1690 1108

+

1654 1072 1652 1070 1670 1088 1672 1090

+

1638 1056 1635 1053 1652 1070 1654 1072

+

1623 1041 1622 1040 1635 1053 1638 1056

+

1601 1019 1600 1018 1622 1040 1623 1041

+

1593 1011 1592 1010 1600 1018 1601 1019

+

1573 991 1572 990 1592 1010 1593 1011

+

1558 976 1557 975 1572 990 1573 991

+

1546 964 1557 975 1558 976 1552 970 1547 965

+

1578 996 1541 959 1545 963 1583 1001

+

1551 969 1584 1002 1583 1001 1545 963

+

1543 961 1582 1000 1584 1002 1551 969

+

1582 1000 1543 961 1539 957 1577 995

+

1523 941 1562 980 1563 981 1525 943

+

1527 945 1564 982 1562 980 1523 941

+

1564 982 1527 945 1533 951 1566 984

+

1537 955 1532 950 1526 944 1522 940 1524 942 1530 948 1534 952 1538 956 1542 960 1550 968 1544 962 1540 958

+

1565 983 1531 949 1525 943 1563 981

+

1531 949 1565 983 1567 985 1535 953

+

1536 954 1568 986 1577 995 1539 957

+

1720 1138 1700 1118 1686 1104 1713 1131

+

1727 1145 1701 1119 1700 1118 1720 1138

+

1718 1136 1699 1117 1701 1119 1727 1145

+

1709 1127 1705 1123 1698 1116 1694 1112 1696 1114 1703 1121 1707 1125 1710 1128 1717 1135 1726 1144 1719 1137 1712 1130

+

1704 1122 1679 1097 1677 1095 1697 1115

+

1697 1115 1677 1095 1675 1093 1693 1111

+

1693 1111 1675 1093 1676 1094 1695 1113

+

1695 1113 1676 1094 1678 1096 1702 1120

+

1702 1120 1678 1096 1683 1101 1706 1124

+

1708 1126 1684 1102 1685 1103 1711 1129

+

1711 1129 1685 1103 1699 1117 1718 1136

+

1759 1177 1716 1134 1725 1143 1763 1181

+

1751 1169 1714 1132 1716 1134 1759 1177

+

1757 1175 1715 1133 1714 1132 1751 1169

+

1770 1188 1774 1192 1788 1206 1790 1208 1786 1204 1772 1190 1769 1187 1762 1180 1758 1176 1752 1170 1760 1178 1764 1182

+

1773 1191 1737 1155 1739 1157 1787 1205

+

1787 1205 1739 1157 1740 1158 1789 1207

+

1789 1207 1740 1158 1738 1156 1785 1203

+

1785 1203 1738 1156 1736 1154 1771 1189

+

1771 1189 1736 1154 1735 1153 1768 1186

+

1767 1185 1734 1152 1724 1142 1761 1179

+

1761 1179 1724 1142 1715 1133 1757 1175

+

1466 884 1174 592 1451 869 1453 871

+

1453 871 1451 869 1436 854 1441 859

+

1441 859 1436 854 1422 840 1424 842

+

1424 842 1422 840 1410 828 1412 830

+

1412 830 1410 828 1406 824 1407 825

+

1407 825 1406 824 1409 827 1411 829

+

1411 829 1409 827 1152 570 1423 841

+

1423 841 1152 570 1162 580 1440 858

+

1440 858 1162 580 1450 868 1452 870

+

1452 870 1450 868 1465 883 1178 596

+

1178 596 1465 883 1192 610 1468 886

+

1468 886 1192 610 1174 592 1466 884

+

1647 1065 1650 1068 1649 1067 1646 1064

+

1631 1049 1647 1065 1646 1064 1630 1048

+

1614 1032 1631 1049 1630 1048 1613 1031

+

1590 1008 1614 1032 1613 1031 1589 1007

+

1519 937 1590 1008 1589 1007 1518 936

+

1512 930 1519 937 1518 936 1511 929

+

1504 922 1512 930 1511 929 1502 920

+

1496 914 1504 922 1502 920 1494 912

+

1490 908 1496 914 1494 912 1488 906

+

1459 877 1490 908 1488 906 1457 875

+

1434 852 1459 877 1457 875 1432 850

+

1421 839 1434 852 1432 850 1419 837

+

1642 1060 1627 1045 1609 1027 1298 716 1514 932 1508 926 1500 918 1492 910 1486 904 1455 873 1431 849 1420 838 1433 851 1458 876 1489 907 1495 913 1503 921 1510 928 1517 935 1588 1006 1612 1030 1323 741 1645 1063 1648 1066

+

1487 905 1456 874 1454 872 1485 903

+

1493 911 1487 905 1485 903 1491 909

+

1501 919 1493 911 1491 909 1499 917

+

1509 927 1501 919 1499 917 1507 925

+

1516 934 1509 927 1507 925 1515 933

+

1587 1005 1516 934 1515 933 1586 1004

+

1611 1029 1587 1005 1586 1004 1610 1028

+

1629 1047 1611 1029 1610 1028 1628 1046

+

1644 1062 1629 1047 1628 1046 1643 1061

+

1650 1068 1644 1062 1643 1061 1649 1067

+

1481 899 1215 633 1482 900 1218 636

+

1480 898 1212 630 1481 899 1221 639

+

1208 626 1476 894 1212 630 1480 898

+

1470 888 1467 885 1186 604 1210 628 1475 893

+

1474 892 1471 889 1476 894 1208 626

+

1464 882 1461 879 1471 889 1474 892

+

1138 556 1405 823 1418 836 1430 848 1443 861 1448 866 1463 881 1473 891 1197 615

+

1429 847 1426 844 1438 856 1442 860

+

1442 860 1438 856 1447 865 1449 867

+

1449 867 1447 865 1461 879 1464 882

+

1189 607 1467 885 1460 878 1446 864 1437 855 1427 845 1415 833 1408 826 1145 563

+

1417 835 1414 832 1426 844 1429 847

+

1404 822 1403 821 1414 832 1417 835

+

1397 815 1394 812 1403 821 1404 822

+

1130 548 1126 544 1391 809 1398 816 1400 818

+

1123 541 1383 801 1388 806 1390 808

+

1390 808 1388 806 1394 812 1397 815

+

1393 811 1129 547 1132 550 1136 554 1399 817 1395 813 1389 807 1384 802 1386 804

+

1392 810 1385 803 1387 805 1396 814

+

1401 819 1392 810 1396 814 1402 820

+

1413 831 1401 819 1402 820 1416 834

+

1425 843 1413 831 1416 834 1428 846

+

1435 853 1425 843 1428 846 1439 857

+

1444 862 1435 853 1439 857 1445 863

+

1173 591 1444 862 1445 863 1462 880

+

1469 887 1173 591 1462 880 1472 890

+

1206 624 1469 887 1472 890 1477 895

+

1478 896 1206 624 1477 895 1479 897

+

1224 642 1478 896 1479 897 1483 901

+

1215 633 1224 642 1483 901 1482 900

+

1498 916 1497 915 1484 902 1226 644

+

1225 643 1484 902 1150 568 1139 557

+

1259 677 1520 938 1521 939 1529 947

+

1520 938 1257 675 1528 946 1521 939

+

1257 675 1554 972 1555 973 1528 946

+

1554 972 1569 987 1570 988 1555 973

+
+ + + +

1721 1139 1723 1141 1722 1140 1682 1100 1680 1098 1681 1099 1581 999 1579 997 1580 998 1553 971 1559 977 1608 1026 1559 977 1574 992 1608 1026 1574 992 1594 1012 1608 1026 1594 1012 1602 1020 1608 1026 1602 1020 1624 1042 1607 1025 1624 1042 1639 1057 1607 1025 1576 994 1561 979 1605 1023 1596 1014 1576 994 1605 1023 1604 1022 1596 1014 1605 1023 1626 1044 1604 1022 1605 1023 1641 1059 1626 1044 1606 1024 1732 1150 1691 1109 1665 1083 1691 1109 1673 1091 1665 1083 1673 1091 1655 1073 1665 1083 1655 1073 1641 1059 1665 1083 1665 1083 1641 1059 1605 1023 1755 1173 1665 1083 1668 1086 1749 1167 1754 1172 1666 1084 1743 1161 1749 1167 1667 1085 1730 1148 1743 1161 1668 1086 1689 1107 1730 1148 1668 1086 1671 1089 1689 1107 1666 1084 1653 1071 1671 1089 1668 1086 1639 1057 1653 1071 1666 1084 1605 1023 1548 966 1607 1025 1561 979 1548 966 1605 1023 1745 1163 1732 1150 1663 1081 1755 1173 1745 1163 1664 1082 1549 967 1553 971 1608 1026

+
+ + + +

1639 1057 1668 1086 1665 1083 1605 1023 1607 1025

+

1560 978 1556 974 1546 964 1547 965

+

1575 993 1571 989 1556 974 1560 978

+

1595 1013 1591 1009 1571 989 1575 993

+

1603 1021 1599 1017 1591 1009 1595 1013

+

1621 1039 1599 1017 1603 1021 1625 1043

+

1634 1052 1621 1039 1625 1043 1640 1058

+

1651 1069 1634 1052 1640 1058 1656 1074

+

1669 1087 1651 1069 1656 1074 1674 1092

+

1687 1105 1669 1087 1674 1092 1692 1110

+

1687 1105 1692 1110 1733 1151 1728 1146

+

1733 1151 1746 1164 1741 1159 1728 1146

+

1746 1164 1756 1174 1753 1171 1741 1159

+

1744 1162 1742 1160 1753 1171 1756 1174 1750 1168

+

1731 1149 1729 1147 1742 1160 1744 1162

+

1690 1108 1688 1106 1729 1147 1731 1149

+

1672 1090 1670 1088 1688 1106 1690 1108

+

1654 1072 1652 1070 1670 1088 1672 1090

+

1638 1056 1635 1053 1652 1070 1654 1072

+

1623 1041 1622 1040 1635 1053 1638 1056

+

1601 1019 1600 1018 1622 1040 1623 1041

+

1593 1011 1592 1010 1600 1018 1601 1019

+

1573 991 1572 990 1592 1010 1593 1011

+

1558 976 1557 975 1572 990 1573 991

+

1546 964 1557 975 1558 976 1552 970 1547 965

+

1578 996 1541 959 1545 963 1583 1001

+

1551 969 1584 1002 1583 1001 1545 963

+

1543 961 1582 1000 1584 1002 1551 969

+

1582 1000 1543 961 1539 957 1577 995

+

1523 941 1562 980 1563 981 1525 943

+

1527 945 1564 982 1562 980 1523 941

+

1564 982 1527 945 1533 951 1566 984

+

1537 955 1532 950 1526 944 1522 940 1524 942 1530 948 1534 952 1538 956 1542 960 1550 968 1544 962 1540 958

+

1565 983 1531 949 1525 943 1563 981

+

1531 949 1565 983 1567 985 1535 953

+

1536 954 1568 986 1577 995 1539 957

+

1720 1138 1700 1118 1686 1104 1713 1131

+

1727 1145 1701 1119 1700 1118 1720 1138

+

1718 1136 1699 1117 1701 1119 1727 1145

+

1709 1127 1705 1123 1698 1116 1694 1112 1696 1114 1703 1121 1707 1125 1710 1128 1717 1135 1726 1144 1719 1137 1712 1130

+

1704 1122 1679 1097 1677 1095 1697 1115

+

1697 1115 1677 1095 1675 1093 1693 1111

+

1693 1111 1675 1093 1676 1094 1695 1113

+

1695 1113 1676 1094 1678 1096 1702 1120

+

1702 1120 1678 1096 1683 1101 1706 1124

+

1708 1126 1684 1102 1685 1103 1711 1129

+

1711 1129 1685 1103 1699 1117 1718 1136

+

1759 1177 1716 1134 1725 1143 1763 1181

+

1751 1169 1714 1132 1716 1134 1759 1177

+

1757 1175 1715 1133 1714 1132 1751 1169

+

1770 1188 1774 1192 1788 1206 1790 1208 1786 1204 1772 1190 1769 1187 1762 1180 1758 1176 1752 1170 1760 1178 1764 1182

+

1773 1191 1737 1155 1739 1157 1787 1205

+

1787 1205 1739 1157 1740 1158 1789 1207

+

1789 1207 1740 1158 1738 1156 1785 1203

+

1785 1203 1738 1156 1736 1154 1771 1189

+

1771 1189 1736 1154 1735 1153 1768 1186

+

1767 1185 1734 1152 1724 1142 1761 1179

+

1761 1179 1724 1142 1715 1133 1757 1175

+

1466 884 1174 592 1451 869 1453 871

+

1453 871 1451 869 1436 854 1441 859

+

1441 859 1436 854 1422 840 1424 842

+

1424 842 1422 840 1410 828 1412 830

+

1412 830 1410 828 1406 824 1407 825

+

1407 825 1406 824 1409 827 1411 829

+

1411 829 1409 827 1152 570 1423 841

+

1423 841 1152 570 1162 580 1440 858

+

1440 858 1162 580 1450 868 1452 870

+

1452 870 1450 868 1465 883 1178 596

+

1178 596 1465 883 1192 610 1468 886

+

1468 886 1192 610 1174 592 1466 884

+

1647 1065 1650 1068 1649 1067 1646 1064

+

1631 1049 1647 1065 1646 1064 1630 1048

+

1614 1032 1631 1049 1630 1048 1613 1031

+

1590 1008 1614 1032 1613 1031 1589 1007

+

1519 937 1590 1008 1589 1007 1518 936

+

1512 930 1519 937 1518 936 1511 929

+

1504 922 1512 930 1511 929 1502 920

+

1496 914 1504 922 1502 920 1494 912

+

1490 908 1496 914 1494 912 1488 906

+

1459 877 1490 908 1488 906 1457 875

+

1434 852 1459 877 1457 875 1432 850

+

1421 839 1434 852 1432 850 1419 837

+

1642 1060 1627 1045 1609 1027 1298 716 1514 932 1508 926 1500 918 1492 910 1486 904 1455 873 1431 849 1420 838 1433 851 1458 876 1489 907 1495 913 1503 921 1510 928 1517 935 1588 1006 1612 1030 1323 741 1645 1063 1648 1066

+

1487 905 1456 874 1454 872 1485 903

+

1493 911 1487 905 1485 903 1491 909

+

1501 919 1493 911 1491 909 1499 917

+

1509 927 1501 919 1499 917 1507 925

+

1516 934 1509 927 1507 925 1515 933

+

1587 1005 1516 934 1515 933 1586 1004

+

1611 1029 1587 1005 1586 1004 1610 1028

+

1629 1047 1611 1029 1610 1028 1628 1046

+

1644 1062 1629 1047 1628 1046 1643 1061

+

1650 1068 1644 1062 1643 1061 1649 1067

+

1481 899 1215 633 1482 900 1218 636

+

1480 898 1212 630 1481 899 1221 639

+

1208 626 1476 894 1212 630 1480 898

+

1470 888 1467 885 1186 604 1210 628 1475 893

+

1474 892 1471 889 1476 894 1208 626

+

1464 882 1461 879 1471 889 1474 892

+

1138 556 1405 823 1418 836 1430 848 1443 861 1448 866 1463 881 1473 891 1197 615

+

1429 847 1426 844 1438 856 1442 860

+

1442 860 1438 856 1447 865 1449 867

+

1449 867 1447 865 1461 879 1464 882

+

1189 607 1467 885 1460 878 1446 864 1437 855 1427 845 1415 833 1408 826 1145 563

+

1417 835 1414 832 1426 844 1429 847

+

1404 822 1403 821 1414 832 1417 835

+

1397 815 1394 812 1403 821 1404 822

+

1130 548 1126 544 1391 809 1398 816 1400 818

+

1123 541 1383 801 1388 806 1390 808

+

1390 808 1388 806 1394 812 1397 815

+

1393 811 1129 547 1132 550 1136 554 1399 817 1395 813 1389 807 1384 802 1386 804

+

1392 810 1385 803 1387 805 1396 814

+

1401 819 1392 810 1396 814 1402 820

+

1413 831 1401 819 1402 820 1416 834

+

1425 843 1413 831 1416 834 1428 846

+

1435 853 1425 843 1428 846 1439 857

+

1444 862 1435 853 1439 857 1445 863

+

1173 591 1444 862 1445 863 1462 880

+

1469 887 1173 591 1462 880 1472 890

+

1206 624 1469 887 1472 890 1477 895

+

1478 896 1206 624 1477 895 1479 897

+

1224 642 1478 896 1479 897 1483 901

+

1215 633 1224 642 1483 901 1482 900

+

1498 916 1497 915 1484 902 1226 644

+

1225 643 1484 902 1150 568 1139 557

+

1259 677 1520 938 1521 939 1529 947

+

1520 938 1257 675 1528 946 1521 939

+

1257 675 1554 972 1555 973 1528 946

+

1554 972 1569 987 1570 988 1555 973

+

1505 923 1237 655 1243 661 1506 924

+

1236 654 1239 657 1513 931 1242 660

+
+ + + +

1721 1139 1723 1141 1722 1140 1682 1100 1680 1098 1681 1099 1581 999 1579 997 1580 998 1553 971 1559 977 1608 1026 1559 977 1574 992 1608 1026 1574 992 1594 1012 1608 1026 1594 1012 1602 1020 1608 1026 1602 1020 1624 1042 1607 1025 1624 1042 1639 1057 1607 1025 1576 994 1561 979 1605 1023 1596 1014 1576 994 1605 1023 1604 1022 1596 1014 1605 1023 1626 1044 1604 1022 1605 1023 1641 1059 1626 1044 1606 1024 1732 1150 1691 1109 1665 1083 1691 1109 1673 1091 1665 1083 1673 1091 1655 1073 1665 1083 1655 1073 1641 1059 1665 1083 1665 1083 1641 1059 1605 1023 1755 1173 1665 1083 1668 1086 1749 1167 1754 1172 1666 1084 1743 1161 1749 1167 1667 1085 1730 1148 1743 1161 1668 1086 1689 1107 1730 1148 1668 1086 1671 1089 1689 1107 1666 1084 1653 1071 1671 1089 1668 1086 1639 1057 1653 1071 1666 1084 1605 1023 1548 966 1607 1025 1561 979 1548 966 1605 1023 1745 1163 1732 1150 1663 1081 1755 1173 1745 1163 1664 1082 1549 967 1553 971 1608 1026

+
+ + + +

1639 1057 1668 1086 1665 1083 1605 1023 1607 1025

+

1560 978 1556 974 1546 964 1547 965

+

1575 993 1571 989 1556 974 1560 978

+

1595 1013 1591 1009 1571 989 1575 993

+

1603 1021 1599 1017 1591 1009 1595 1013

+

1621 1039 1599 1017 1603 1021 1625 1043

+

1634 1052 1621 1039 1625 1043 1640 1058

+

1651 1069 1634 1052 1640 1058 1656 1074

+

1669 1087 1651 1069 1656 1074 1674 1092

+

1687 1105 1669 1087 1674 1092 1692 1110

+

1687 1105 1692 1110 1733 1151 1728 1146

+

1733 1151 1746 1164 1741 1159 1728 1146

+

1746 1164 1756 1174 1753 1171 1741 1159

+

1744 1162 1742 1160 1753 1171 1756 1174 1750 1168

+

1731 1149 1729 1147 1742 1160 1744 1162

+

1690 1108 1688 1106 1729 1147 1731 1149

+

1672 1090 1670 1088 1688 1106 1690 1108

+

1654 1072 1652 1070 1670 1088 1672 1090

+

1638 1056 1635 1053 1652 1070 1654 1072

+

1623 1041 1622 1040 1635 1053 1638 1056

+

1601 1019 1600 1018 1622 1040 1623 1041

+

1593 1011 1592 1010 1600 1018 1601 1019

+

1573 991 1572 990 1592 1010 1593 1011

+

1558 976 1557 975 1572 990 1573 991

+

1546 964 1557 975 1558 976 1552 970 1547 965

+

1578 996 1541 959 1545 963 1583 1001

+

1551 969 1584 1002 1583 1001 1545 963

+

1543 961 1582 1000 1584 1002 1551 969

+

1582 1000 1543 961 1539 957 1577 995

+

1523 941 1562 980 1563 981 1525 943

+

1527 945 1564 982 1562 980 1523 941

+

1564 982 1527 945 1533 951 1566 984

+

1537 955 1532 950 1526 944 1522 940 1524 942 1530 948 1534 952 1538 956 1542 960 1550 968 1544 962 1540 958

+

1565 983 1531 949 1525 943 1563 981

+

1531 949 1565 983 1567 985 1535 953

+

1536 954 1568 986 1577 995 1539 957

+

1720 1138 1700 1118 1686 1104 1713 1131

+

1727 1145 1701 1119 1700 1118 1720 1138

+

1718 1136 1699 1117 1701 1119 1727 1145

+

1709 1127 1705 1123 1698 1116 1694 1112 1696 1114 1703 1121 1707 1125 1710 1128 1717 1135 1726 1144 1719 1137 1712 1130

+

1704 1122 1679 1097 1677 1095 1697 1115

+

1697 1115 1677 1095 1675 1093 1693 1111

+

1693 1111 1675 1093 1676 1094 1695 1113

+

1695 1113 1676 1094 1678 1096 1702 1120

+

1702 1120 1678 1096 1683 1101 1706 1124

+

1708 1126 1684 1102 1685 1103 1711 1129

+

1711 1129 1685 1103 1699 1117 1718 1136

+

1759 1177 1716 1134 1725 1143 1763 1181

+

1751 1169 1714 1132 1716 1134 1759 1177

+

1757 1175 1715 1133 1714 1132 1751 1169

+

1770 1188 1774 1192 1788 1206 1790 1208 1786 1204 1772 1190 1769 1187 1762 1180 1758 1176 1752 1170 1760 1178 1764 1182

+

1773 1191 1737 1155 1739 1157 1787 1205

+

1787 1205 1739 1157 1740 1158 1789 1207

+

1789 1207 1740 1158 1738 1156 1785 1203

+

1785 1203 1738 1156 1736 1154 1771 1189

+

1771 1189 1736 1154 1735 1153 1768 1186

+

1767 1185 1734 1152 1724 1142 1761 1179

+

1761 1179 1724 1142 1715 1133 1757 1175

+

1466 884 1174 592 1451 869 1453 871

+

1453 871 1451 869 1436 854 1441 859

+

1441 859 1436 854 1422 840 1424 842

+

1424 842 1422 840 1410 828 1412 830

+

1412 830 1410 828 1406 824 1407 825

+

1407 825 1406 824 1409 827 1411 829

+

1411 829 1409 827 1152 570 1423 841

+

1423 841 1152 570 1162 580 1440 858

+

1440 858 1162 580 1450 868 1452 870

+

1452 870 1450 868 1465 883 1178 596

+

1178 596 1465 883 1192 610 1468 886

+

1468 886 1192 610 1174 592 1466 884

+

1647 1065 1650 1068 1649 1067 1646 1064

+

1631 1049 1647 1065 1646 1064 1630 1048

+

1614 1032 1631 1049 1630 1048 1613 1031

+

1590 1008 1614 1032 1613 1031 1589 1007

+

1519 937 1590 1008 1589 1007 1518 936

+

1512 930 1519 937 1518 936 1511 929

+

1504 922 1512 930 1511 929 1502 920

+

1496 914 1504 922 1502 920 1494 912

+

1490 908 1496 914 1494 912 1488 906

+

1459 877 1490 908 1488 906 1457 875

+

1434 852 1459 877 1457 875 1432 850

+

1421 839 1434 852 1432 850 1419 837

+

1642 1060 1627 1045 1609 1027 1298 716 1514 932 1508 926 1500 918 1492 910 1486 904 1455 873 1431 849 1420 838 1433 851 1458 876 1489 907 1495 913 1503 921 1510 928 1517 935 1588 1006 1612 1030 1323 741 1645 1063 1648 1066

+

1487 905 1456 874 1454 872 1485 903

+

1493 911 1487 905 1485 903 1491 909

+

1501 919 1493 911 1491 909 1499 917

+

1509 927 1501 919 1499 917 1507 925

+

1516 934 1509 927 1507 925 1515 933

+

1587 1005 1516 934 1515 933 1586 1004

+

1611 1029 1587 1005 1586 1004 1610 1028

+

1629 1047 1611 1029 1610 1028 1628 1046

+

1644 1062 1629 1047 1628 1046 1643 1061

+

1650 1068 1644 1062 1643 1061 1649 1067

+

1481 899 1215 633 1482 900 1218 636

+

1480 898 1212 630 1481 899 1221 639

+

1208 626 1476 894 1212 630 1480 898

+

1470 888 1467 885 1186 604 1210 628 1475 893

+

1474 892 1471 889 1476 894 1208 626

+

1464 882 1461 879 1471 889 1474 892

+

1138 556 1405 823 1418 836 1430 848 1443 861 1448 866 1463 881 1473 891 1197 615

+

1429 847 1426 844 1438 856 1442 860

+

1442 860 1438 856 1447 865 1449 867

+

1449 867 1447 865 1461 879 1464 882

+

1189 607 1467 885 1460 878 1446 864 1437 855 1427 845 1415 833 1408 826 1145 563

+

1417 835 1414 832 1426 844 1429 847

+

1404 822 1403 821 1414 832 1417 835

+

1397 815 1394 812 1403 821 1404 822

+

1130 548 1126 544 1391 809 1398 816 1400 818

+

1123 541 1383 801 1388 806 1390 808

+

1390 808 1388 806 1394 812 1397 815

+

1393 811 1129 547 1132 550 1136 554 1399 817 1395 813 1389 807 1384 802 1386 804

+

1392 810 1385 803 1387 805 1396 814

+

1401 819 1392 810 1396 814 1402 820

+

1413 831 1401 819 1402 820 1416 834

+

1425 843 1413 831 1416 834 1428 846

+

1435 853 1425 843 1428 846 1439 857

+

1444 862 1435 853 1439 857 1445 863

+

1173 591 1444 862 1445 863 1462 880

+

1469 887 1173 591 1462 880 1472 890

+

1206 624 1469 887 1472 890 1477 895

+

1478 896 1206 624 1477 895 1479 897

+

1224 642 1478 896 1479 897 1483 901

+

1215 633 1224 642 1483 901 1482 900

+

1498 916 1497 915 1484 902 1226 644

+

1225 643 1484 902 1150 568 1139 557

+

1259 677 1520 938 1521 939 1529 947

+

1520 938 1257 675 1528 946 1521 939

+

1257 675 1554 972 1555 973 1528 946

+

1554 972 1569 987 1570 988 1555 973

+

1505 923 1237 655 1243 661 1506 924

+

1236 654 1239 657 1513 931 1242 660

+

1748 1166 1368 786 1365 783 1747 1165

+

1784 1202 1748 1166 1747 1165 1780 1198

+

1382 800 1782 1200 1778 1196 1380 798

+

1765 1183 1777 1195 1791 1209 1779 1197 1766 1184

+

1782 1200 1794 1212 1792 1210 1778 1196

+

1781 1199 1775 1193 1776 1194 1783 1201 1793 1211

+

1794 1212 1784 1202 1780 1198 1792 1210

+
+ + + +

1721 1139 1723 1141 1722 1140 1682 1100 1680 1098 1681 1099 1581 999 1579 997 1580 998 1553 971 1559 977 1608 1026 1559 977 1574 992 1608 1026 1574 992 1594 1012 1608 1026 1594 1012 1602 1020 1608 1026 1602 1020 1624 1042 1607 1025 1624 1042 1639 1057 1607 1025 1576 994 1561 979 1605 1023 1596 1014 1576 994 1605 1023 1604 1022 1596 1014 1605 1023 1626 1044 1604 1022 1605 1023 1641 1059 1626 1044 1606 1024 1732 1150 1691 1109 1665 1083 1691 1109 1673 1091 1665 1083 1673 1091 1655 1073 1665 1083 1655 1073 1641 1059 1665 1083 1665 1083 1641 1059 1605 1023 1755 1173 1665 1083 1668 1086 1749 1167 1754 1172 1666 1084 1743 1161 1749 1167 1667 1085 1730 1148 1743 1161 1668 1086 1689 1107 1730 1148 1668 1086 1671 1089 1689 1107 1666 1084 1653 1071 1671 1089 1668 1086 1639 1057 1653 1071 1666 1084 1605 1023 1548 966 1607 1025 1561 979 1548 966 1605 1023 1745 1163 1732 1150 1663 1081 1755 1173 1745 1163 1664 1082 1549 967 1553 971 1608 1026

+
+ + + +

1639 1057 1668 1086 1665 1083 1605 1023 1607 1025

+

1560 978 1556 974 1546 964 1547 965

+

1575 993 1571 989 1556 974 1560 978

+

1595 1013 1591 1009 1571 989 1575 993

+

1603 1021 1599 1017 1591 1009 1595 1013

+

1621 1039 1599 1017 1603 1021 1625 1043

+

1634 1052 1621 1039 1625 1043 1640 1058

+

1651 1069 1634 1052 1640 1058 1656 1074

+

1669 1087 1651 1069 1656 1074 1674 1092

+

1687 1105 1669 1087 1674 1092 1692 1110

+

1687 1105 1692 1110 1733 1151 1728 1146

+

1733 1151 1746 1164 1741 1159 1728 1146

+

1746 1164 1756 1174 1753 1171 1741 1159

+

1744 1162 1742 1160 1753 1171 1756 1174 1750 1168

+

1731 1149 1729 1147 1742 1160 1744 1162

+

1690 1108 1688 1106 1729 1147 1731 1149

+

1672 1090 1670 1088 1688 1106 1690 1108

+

1654 1072 1652 1070 1670 1088 1672 1090

+

1638 1056 1635 1053 1652 1070 1654 1072

+

1623 1041 1622 1040 1635 1053 1638 1056

+

1601 1019 1600 1018 1622 1040 1623 1041

+

1593 1011 1592 1010 1600 1018 1601 1019

+

1573 991 1572 990 1592 1010 1593 1011

+

1558 976 1557 975 1572 990 1573 991

+

1546 964 1557 975 1558 976 1552 970 1547 965

+

1578 996 1541 959 1545 963 1583 1001

+

1551 969 1584 1002 1583 1001 1545 963

+

1543 961 1582 1000 1584 1002 1551 969

+

1582 1000 1543 961 1539 957 1577 995

+

1523 941 1562 980 1563 981 1525 943

+

1527 945 1564 982 1562 980 1523 941

+

1564 982 1527 945 1533 951 1566 984

+

1537 955 1532 950 1526 944 1522 940 1524 942 1530 948 1534 952 1538 956 1542 960 1550 968 1544 962 1540 958

+

1565 983 1531 949 1525 943 1563 981

+

1531 949 1565 983 1567 985 1535 953

+

1536 954 1568 986 1577 995 1539 957

+

1720 1138 1700 1118 1686 1104 1713 1131

+

1727 1145 1701 1119 1700 1118 1720 1138

+

1718 1136 1699 1117 1701 1119 1727 1145

+

1709 1127 1705 1123 1698 1116 1694 1112 1696 1114 1703 1121 1707 1125 1710 1128 1717 1135 1726 1144 1719 1137 1712 1130

+

1704 1122 1679 1097 1677 1095 1697 1115

+

1697 1115 1677 1095 1675 1093 1693 1111

+

1693 1111 1675 1093 1676 1094 1695 1113

+

1695 1113 1676 1094 1678 1096 1702 1120

+

1702 1120 1678 1096 1683 1101 1706 1124

+

1708 1126 1684 1102 1685 1103 1711 1129

+

1711 1129 1685 1103 1699 1117 1718 1136

+

1759 1177 1716 1134 1725 1143 1763 1181

+

1751 1169 1714 1132 1716 1134 1759 1177

+

1757 1175 1715 1133 1714 1132 1751 1169

+

1770 1188 1774 1192 1788 1206 1790 1208 1786 1204 1772 1190 1769 1187 1762 1180 1758 1176 1752 1170 1760 1178 1764 1182

+

1773 1191 1737 1155 1739 1157 1787 1205

+

1787 1205 1739 1157 1740 1158 1789 1207

+

1789 1207 1740 1158 1738 1156 1785 1203

+

1785 1203 1738 1156 1736 1154 1771 1189

+

1771 1189 1736 1154 1735 1153 1768 1186

+

1767 1185 1734 1152 1724 1142 1761 1179

+

1761 1179 1724 1142 1715 1133 1757 1175

+

1466 884 1174 592 1451 869 1453 871

+

1453 871 1451 869 1436 854 1441 859

+

1441 859 1436 854 1422 840 1424 842

+

1424 842 1422 840 1410 828 1412 830

+

1412 830 1410 828 1406 824 1407 825

+

1407 825 1406 824 1409 827 1411 829

+

1411 829 1409 827 1152 570 1423 841

+

1423 841 1152 570 1162 580 1440 858

+

1440 858 1162 580 1450 868 1452 870

+

1452 870 1450 868 1465 883 1178 596

+

1178 596 1465 883 1192 610 1468 886

+

1468 886 1192 610 1174 592 1466 884

+

1647 1065 1650 1068 1649 1067 1646 1064

+

1631 1049 1647 1065 1646 1064 1630 1048

+

1614 1032 1631 1049 1630 1048 1613 1031

+

1590 1008 1614 1032 1613 1031 1589 1007

+

1519 937 1590 1008 1589 1007 1518 936

+

1512 930 1519 937 1518 936 1511 929

+

1504 922 1512 930 1511 929 1502 920

+

1496 914 1504 922 1502 920 1494 912

+

1490 908 1496 914 1494 912 1488 906

+

1459 877 1490 908 1488 906 1457 875

+

1434 852 1459 877 1457 875 1432 850

+

1421 839 1434 852 1432 850 1419 837

+

1642 1060 1627 1045 1609 1027 1298 716 1514 932 1508 926 1500 918 1492 910 1486 904 1455 873 1431 849 1420 838 1433 851 1458 876 1489 907 1495 913 1503 921 1510 928 1517 935 1588 1006 1612 1030 1323 741 1645 1063 1648 1066

+

1487 905 1456 874 1454 872 1485 903

+

1493 911 1487 905 1485 903 1491 909

+

1501 919 1493 911 1491 909 1499 917

+

1509 927 1501 919 1499 917 1507 925

+

1516 934 1509 927 1507 925 1515 933

+

1587 1005 1516 934 1515 933 1586 1004

+

1611 1029 1587 1005 1586 1004 1610 1028

+

1629 1047 1611 1029 1610 1028 1628 1046

+

1644 1062 1629 1047 1628 1046 1643 1061

+

1650 1068 1644 1062 1643 1061 1649 1067

+

1481 899 1215 633 1482 900 1218 636

+

1480 898 1212 630 1481 899 1221 639

+

1208 626 1476 894 1212 630 1480 898

+

1470 888 1467 885 1186 604 1210 628 1475 893

+

1474 892 1471 889 1476 894 1208 626

+

1464 882 1461 879 1471 889 1474 892

+

1138 556 1405 823 1418 836 1430 848 1443 861 1448 866 1463 881 1473 891 1197 615

+

1429 847 1426 844 1438 856 1442 860

+

1442 860 1438 856 1447 865 1449 867

+

1449 867 1447 865 1461 879 1464 882

+

1189 607 1467 885 1460 878 1446 864 1437 855 1427 845 1415 833 1408 826 1145 563

+

1417 835 1414 832 1426 844 1429 847

+

1404 822 1403 821 1414 832 1417 835

+

1397 815 1394 812 1403 821 1404 822

+

1130 548 1126 544 1391 809 1398 816 1400 818

+

1123 541 1383 801 1388 806 1390 808

+

1390 808 1388 806 1394 812 1397 815

+

1393 811 1129 547 1132 550 1136 554 1399 817 1395 813 1389 807 1384 802 1386 804

+

1392 810 1385 803 1387 805 1396 814

+

1401 819 1392 810 1396 814 1402 820

+

1413 831 1401 819 1402 820 1416 834

+

1425 843 1413 831 1416 834 1428 846

+

1435 853 1425 843 1428 846 1439 857

+

1444 862 1435 853 1439 857 1445 863

+

1173 591 1444 862 1445 863 1462 880

+

1469 887 1173 591 1462 880 1472 890

+

1206 624 1469 887 1472 890 1477 895

+

1478 896 1206 624 1477 895 1479 897

+

1224 642 1478 896 1479 897 1483 901

+

1215 633 1224 642 1483 901 1482 900

+

1498 916 1497 915 1484 902 1226 644

+

1225 643 1484 902 1150 568 1139 557

+

1259 677 1520 938 1521 939 1529 947

+

1520 938 1257 675 1528 946 1521 939

+

1257 675 1554 972 1555 973 1528 946

+

1554 972 1569 987 1570 988 1555 973

+

1505 923 1237 655 1243 661 1506 924

+

1236 654 1239 657 1513 931 1242 660

+

1748 1166 1368 786 1365 783 1747 1165

+

1784 1202 1748 1166 1747 1165 1780 1198

+

1382 800 1782 1200 1778 1196 1380 798

+

1765 1183 1777 1195 1791 1209 1779 1197 1766 1184

+

1782 1200 1794 1212 1792 1210 1778 1196

+

1781 1199 1775 1193 1776 1194 1783 1201 1793 1211

+

1794 1212 1784 1202 1780 1198 1792 1210

+

1662 1080 1657 1075 1632 1050 1618 1036 1615 1033

+

1598 1016 1293 711 1585 1003 1597 1015

+

1619 1037 1598 1016 1597 1015 1617 1035

+

1636 1054 1619 1037 1617 1035 1633 1051

+

1616 1034 1620 1038 1637 1055 1659 1077 1661 1079

+

1660 1078 1636 1054 1633 1051 1658 1076

+

1341 759 1660 1078 1658 1076 1338 756

+
+ + + +

1721 1251 1723 1251 1722 1251 1682 1251 1680 1251 1681 1251 1581 1251 1579 1251 1580 1251 1553 1251 1559 1251 1608 1251 1559 1251 1574 1251 1608 1251 1574 1251 1594 1251 1608 1251 1594 1251 1602 1251 1608 1251 1602 1251 1624 1251 1608 1251 1624 1251 1639 1251 1608 1251 1576 1251 1561 1251 1606 1251 1596 1251 1576 1251 1606 1251 1604 1251 1596 1251 1606 1251 1626 1251 1604 1251 1606 1251 1641 1251 1626 1251 1606 1251 1733 1251 1692 1251 1665 1251 1692 1251 1674 1251 1665 1251 1674 1251 1656 1251 1665 1251 1656 1251 1641 1251 1665 1251 1665 1251 1641 1251 1606 1251 1756 1251 1665 1251 1668 1251 1750 1251 1756 1251 1668 1251 1744 1251 1750 1251 1668 1251 1731 1251 1744 1251 1668 1251 1690 1251 1731 1251 1668 1251 1672 1251 1690 1251 1668 1251 1654 1251 1672 1251 1668 1251 1639 1251 1654 1251 1668 1251 1606 1251 1549 1251 1608 1251 1561 1251 1549 1251 1606 1251 1746 1251 1733 1251 1665 1251 1756 1251 1746 1251 1665 1251 1549 1251 1553 1251 1608 1251

+
+ + + +

1639 1251 1668 1251 1665 1251 1606 1251 1608 1251

+

1561 1251 1266 1251 1546 1251 1549 1251

+

1576 1251 1282 1251 1266 1251 1561 1251

+

1596 1251 1591 1251 1282 1251 1576 1251

+

1604 1251 1311 1251 1591 1251 1596 1251

+

1318 1251 1311 1251 1604 1251 1626 1251

+

1634 1251 1318 1251 1626 1251 1641 1251

+

1651 1251 1634 1251 1641 1251 1656 1251

+

1669 1251 1651 1251 1656 1251 1674 1251

+

1687 1251 1669 1251 1674 1251 1692 1251

+

1687 1251 1692 1251 1733 1251 1728 1251

+

1733 1251 1746 1251 1741 1251 1728 1251

+

1746 1251 1756 1251 1753 1251 1741 1251

+

1744 1251 1742 1251 1753 1251 1756 1251 1750 1251

+

1731 1251 1729 1251 1742 1251 1744 1251

+

1690 1251 1688 1251 1729 1251 1731 1251

+

1672 1251 1670 1251 1688 1251 1690 1251

+

1654 1251 1652 1251 1670 1251 1672 1251

+

1639 1251 1635 1251 1652 1251 1654 1251

+

1624 1251 1622 1251 1635 1251 1639 1251

+

1602 1251 1600 1251 1622 1251 1624 1251

+

1594 1251 1592 1251 1600 1251 1602 1251

+

1574 1251 1572 1251 1592 1251 1594 1251

+

1559 1251 1557 1251 1572 1251 1574 1251

+

1546 1251 1557 1251 1559 1251 1553 1251 1549 1251

+

1578 1251 1541 1251 1545 1251 1583 1251

+

1551 1251 1584 1251 1583 1251 1545 1251

+

1543 1251 1582 1251 1584 1251 1551 1251

+

1582 1251 1543 1251 1539 1251 1577 1251

+

1523 1251 1562 1251 1563 1251 1525 1251

+

1527 1251 1564 1251 1562 1251 1523 1251

+

1564 1251 1527 1251 1533 1251 1566 1251

+

1537 1251 1533 1251 1527 1251 1523 1251 1525 1251 1531 1251 1536 1251 1539 1251 1543 1251 1551 1251 1545 1251 1541 1251

+

1565 1251 1531 1251 1525 1251 1563 1251

+

1531 1251 1565 1251 1568 1251 1536 1251

+

1536 1251 1568 1251 1577 1251 1539 1251

+

1720 1251 1700 1251 1686 1251 1713 1251

+

1727 1251 1701 1251 1700 1251 1720 1251

+

1718 1251 1699 1251 1701 1251 1727 1251

+

1709 1251 1705 1251 1698 1251 1694 1251 1696 1251 1703 1251 1708 1251 1711 1251 1718 1251 1727 1251 1720 1251 1713 1251

+

1705 1251 1679 1251 1677 1251 1698 1251

+

1698 1251 1677 1251 1675 1251 1694 1251

+

1694 1251 1675 1251 1676 1251 1696 1251

+

1696 1251 1676 1251 1678 1251 1703 1251

+

1703 1251 1678 1251 1684 1251 1708 1251

+

1708 1251 1684 1251 1685 1251 1711 1251

+

1711 1251 1685 1251 1699 1251 1718 1251

+

1760 1251 1716 1251 1725 1251 1764 1251

+

1752 1251 1714 1251 1716 1251 1760 1251

+

1758 1251 1715 1251 1714 1251 1752 1251

+

1770 1251 1774 1251 1788 1251 1790 1251 1786 1251 1772 1251 1769 1251 1762 1251 1758 1251 1752 1251 1760 1251 1764 1251

+

1774 1251 1737 1251 1739 1251 1788 1251

+

1788 1251 1739 1251 1740 1251 1790 1251

+

1790 1251 1740 1251 1738 1251 1786 1251

+

1786 1251 1738 1251 1736 1251 1772 1251

+

1772 1251 1736 1251 1375 1251 1769 1251

+

1769 1251 1375 1251 1724 1251 1762 1251

+

1762 1251 1724 1251 1715 1251 1758 1251

+

1466 1251 1177 1251 1451 1251 1453 1251

+

1453 1251 1451 1251 1436 1251 1441 1251

+

1441 1251 1436 1251 1422 1251 1424 1251

+

1424 1251 1422 1251 1410 1251 1412 1251

+

1412 1251 1410 1251 1406 1251 1407 1251

+

1407 1251 1406 1251 1409 1251 1411 1251

+

1411 1251 1409 1251 1152 1251 1423 1251

+

1423 1251 1152 1251 1162 1251 1440 1251

+

1440 1251 1162 1251 1450 1251 1452 1251

+

1452 1251 1450 1251 1465 1251 1181 1251

+

1181 1251 1465 1251 1193 1251 1468 1251

+

1468 1251 1193 1251 1177 1251 1466 1251

+

1647 1251 1650 1251 1649 1251 1646 1251

+

1631 1251 1647 1251 1646 1251 1630 1251

+

1614 1251 1631 1251 1630 1251 1613 1251

+

1590 1251 1614 1251 1613 1251 1589 1251

+

1519 1251 1590 1251 1589 1251 1518 1251

+

1512 1251 1519 1251 1518 1251 1511 1251

+

1504 1251 1512 1251 1511 1251 1503 1251

+

1496 1251 1504 1251 1503 1251 1495 1251

+

1490 1251 1496 1251 1495 1251 1489 1251

+

1459 1251 1490 1251 1489 1251 1458 1251

+

1434 1251 1459 1251 1458 1251 1433 1251

+

1421 1251 1434 1251 1433 1251 1420 1251

+

1643 1251 1628 1251 1610 1251 1586 1251 1515 1251 1508 1251 1500 1251 1492 1251 1486 1251 1455 1251 1431 1251 1420 1251 1433 1251 1458 1251 1489 1251 1495 1251 1503 1251 1511 1251 1518 1251 1589 1251 1613 1251 1630 1251 1646 1251 1649 1251

+

1487 1251 1456 1251 1455 1251 1486 1251

+

1493 1251 1487 1251 1486 1251 1492 1251

+

1501 1251 1493 1251 1492 1251 1500 1251

+

1509 1251 1501 1251 1500 1251 1508 1251

+

1516 1251 1509 1251 1508 1251 1515 1251

+

1587 1251 1516 1251 1515 1251 1586 1251

+

1611 1251 1587 1251 1586 1251 1610 1251

+

1629 1251 1611 1251 1610 1251 1628 1251

+

1644 1251 1629 1251 1628 1251 1643 1251

+

1650 1251 1644 1251 1643 1251 1649 1251

+

1481 1251 1215 1251 1482 1251 1218 1251

+

1480 1251 1212 1251 1481 1251 1221 1251

+

1208 1251 1476 1251 1212 1251 1480 1251

+

1471 1251 1467 1251 1186 1251 1210 1251 1476 1251

+

1474 1251 1471 1251 1476 1251 1208 1251

+

1464 1251 1461 1251 1471 1251 1474 1251

+

1138 1251 1405 1251 1418 1251 1430 1251 1443 1251 1449 1251 1464 1251 1474 1251 1197 1251

+

1430 1251 1427 1251 1438 1251 1443 1251

+

1443 1251 1438 1251 1447 1251 1449 1251

+

1449 1251 1447 1251 1461 1251 1464 1251

+

1189 1251 1467 1251 1461 1251 1447 1251 1438 1251 1427 1251 1415 1251 1408 1251 1145 1251

+

1418 1251 1415 1251 1427 1251 1430 1251

+

1405 1251 1403 1251 1415 1251 1418 1251

+

1398 1251 1395 1251 1403 1251 1405 1251

+

1130 1251 1126 1251 1391 1251 1398 1251 1400 1251

+

1126 1251 1384 1251 1389 1251 1391 1251

+

1391 1251 1389 1251 1395 1251 1398 1251

+

1393 1251 1129 1251 1132 1251 1136 1251 1399 1251 1395 1251 1389 1251 1384 1251 1386 1251

+

1393 1251 1386 1251 1387 1251 1396 1251

+

1141 1251 1393 1251 1396 1251 1402 1251

+

1413 1251 1141 1251 1402 1251 1416 1251

+

1425 1251 1413 1251 1416 1251 1428 1251

+

1435 1251 1425 1251 1428 1251 1439 1251

+

1444 1251 1435 1251 1439 1251 1445 1251

+

1173 1251 1444 1251 1445 1251 1462 1251

+

1469 1251 1173 1251 1462 1251 1472 1251

+

1206 1251 1469 1251 1472 1251 1477 1251

+

1478 1251 1206 1251 1477 1251 1479 1251

+

1224 1251 1478 1251 1479 1251 1483 1251

+

1215 1251 1224 1251 1483 1251 1482 1251

+

1498 1251 1497 1251 1484 1251 1228 1251

+

1225 1251 1484 1251 1150 1251 1139 1251

+

1259 1251 1520 1251 1521 1251 1529 1251

+

1520 1251 1257 1251 1528 1251 1521 1251

+

1257 1251 1554 1251 1555 1251 1528 1251

+

1554 1251 1569 1251 1570 1251 1555 1251

+

1231 1251 1238 1251 1246 1251 1506 1251

+

1238 1251 1241 1251 1513 1251 1246 1251

+

1748 1251 1368 1251 1365 1251 1747 1251

+

1784 1251 1748 1251 1747 1251 1780 1251

+

1382 1251 1782 1251 1778 1251 1380 1251

+

1765 1251 1778 1251 1792 1251 1780 1251 1766 1251

+

1782 1251 1794 1251 1792 1251 1778 1251

+

1782 1251 1775 1251 1776 1251 1784 1251 1794 1251

+

1794 1251 1784 1251 1780 1251 1792 1251

+

1662 1251 1658 1251 1633 1251 1618 1251 1615 1251

+

1598 1251 1293 1251 1585 1251 1597 1251

+

1620 1251 1598 1251 1597 1251 1618 1251

+

1637 1251 1620 1251 1618 1251 1633 1251

+

1616 1251 1620 1251 1637 1251 1660 1251 1661 1251

+

1660 1251 1637 1251 1633 1251 1658 1251

+

1342 1251 1660 1251 1658 1251 1338 1251

+

1264 1251 1254 1251 1251 1251 1262 1251

+
+ + + +

1721 1139 1723 1141 1722 1140 1682 1100 1680 1098 1681 1099 1581 999 1579 997 1580 998 1553 971 1559 977 1608 1026 1559 977 1574 992 1608 1026 1574 992 1594 1012 1608 1026 1594 1012 1602 1020 1608 1026 1602 1020 1624 1042 1607 1025 1624 1042 1639 1057 1607 1025 1576 994 1561 979 1605 1023 1596 1014 1576 994 1605 1023 1604 1022 1596 1014 1605 1023 1626 1044 1604 1022 1605 1023 1641 1059 1626 1044 1606 1024 1732 1150 1691 1109 1665 1083 1691 1109 1673 1091 1665 1083 1673 1091 1655 1073 1665 1083 1655 1073 1641 1059 1665 1083 1665 1083 1641 1059 1605 1023 1755 1173 1665 1083 1668 1086 1749 1167 1754 1172 1666 1084 1743 1161 1749 1167 1667 1085 1730 1148 1743 1161 1668 1086 1689 1107 1730 1148 1668 1086 1671 1089 1689 1107 1666 1084 1653 1071 1671 1089 1668 1086 1639 1057 1653 1071 1666 1084 1605 1023 1548 966 1607 1025 1561 979 1548 966 1605 1023 1745 1163 1732 1150 1663 1081 1755 1173 1745 1163 1664 1082 1549 967 1553 971 1608 1026

+
+ + + +

1639 1057 1668 1086 1665 1083 1605 1023 1607 1025

+

1560 978 1556 974 1546 964 1547 965

+

1575 993 1571 989 1556 974 1560 978

+

1595 1013 1591 1009 1571 989 1575 993

+

1603 1021 1599 1017 1591 1009 1595 1013

+

1621 1039 1599 1017 1603 1021 1625 1043

+

1634 1052 1621 1039 1625 1043 1640 1058

+

1651 1069 1634 1052 1640 1058 1656 1074

+

1669 1087 1651 1069 1656 1074 1674 1092

+

1687 1105 1669 1087 1674 1092 1692 1110

+

1687 1105 1692 1110 1733 1151 1728 1146

+

1733 1151 1746 1164 1741 1159 1728 1146

+

1746 1164 1756 1174 1753 1171 1741 1159

+

1744 1162 1742 1160 1753 1171 1756 1174 1750 1168

+

1731 1149 1729 1147 1742 1160 1744 1162

+

1690 1108 1688 1106 1729 1147 1731 1149

+

1672 1090 1670 1088 1688 1106 1690 1108

+

1654 1072 1652 1070 1670 1088 1672 1090

+

1638 1056 1635 1053 1652 1070 1654 1072

+

1623 1041 1622 1040 1635 1053 1638 1056

+

1601 1019 1600 1018 1622 1040 1623 1041

+

1593 1011 1592 1010 1600 1018 1601 1019

+

1573 991 1572 990 1592 1010 1593 1011

+

1558 976 1557 975 1572 990 1573 991

+

1546 964 1557 975 1558 976 1552 970 1547 965

+

1578 996 1541 959 1545 963 1583 1001

+

1551 969 1584 1002 1583 1001 1545 963

+

1543 961 1582 1000 1584 1002 1551 969

+

1582 1000 1543 961 1539 957 1577 995

+

1523 941 1562 980 1563 981 1525 943

+

1527 945 1564 982 1562 980 1523 941

+

1564 982 1527 945 1533 951 1566 984

+

1537 955 1532 950 1526 944 1522 940 1524 942 1530 948 1534 952 1538 956 1542 960 1550 968 1544 962 1540 958

+

1565 983 1531 949 1525 943 1563 981

+

1531 949 1565 983 1567 985 1535 953

+

1536 954 1568 986 1577 995 1539 957

+

1720 1138 1700 1118 1686 1104 1713 1131

+

1727 1145 1701 1119 1700 1118 1720 1138

+

1718 1136 1699 1117 1701 1119 1727 1145

+

1709 1127 1705 1123 1698 1116 1694 1112 1696 1114 1703 1121 1707 1125 1710 1128 1717 1135 1726 1144 1719 1137 1712 1130

+

1704 1122 1679 1097 1677 1095 1697 1115

+

1697 1115 1677 1095 1675 1093 1693 1111

+

1693 1111 1675 1093 1676 1094 1695 1113

+

1695 1113 1676 1094 1678 1096 1702 1120

+

1702 1120 1678 1096 1683 1101 1706 1124

+

1708 1126 1684 1102 1685 1103 1711 1129

+

1711 1129 1685 1103 1699 1117 1718 1136

+

1759 1177 1716 1134 1725 1143 1763 1181

+

1751 1169 1714 1132 1716 1134 1759 1177

+

1757 1175 1715 1133 1714 1132 1751 1169

+

1770 1188 1774 1192 1788 1206 1790 1208 1786 1204 1772 1190 1769 1187 1762 1180 1758 1176 1752 1170 1760 1178 1764 1182

+

1773 1191 1737 1155 1739 1157 1787 1205

+

1787 1205 1739 1157 1740 1158 1789 1207

+

1789 1207 1740 1158 1738 1156 1785 1203

+

1785 1203 1738 1156 1736 1154 1771 1189

+

1771 1189 1736 1154 1735 1153 1768 1186

+

1767 1185 1734 1152 1724 1142 1761 1179

+

1761 1179 1724 1142 1715 1133 1757 1175

+

1466 884 1174 592 1451 869 1453 871

+

1453 871 1451 869 1436 854 1441 859

+

1441 859 1436 854 1422 840 1424 842

+

1424 842 1422 840 1410 828 1412 830

+

1412 830 1410 828 1406 824 1407 825

+

1407 825 1406 824 1409 827 1411 829

+

1411 829 1409 827 1152 570 1423 841

+

1423 841 1152 570 1162 580 1440 858

+

1440 858 1162 580 1450 868 1452 870

+

1452 870 1450 868 1465 883 1178 596

+

1178 596 1465 883 1192 610 1468 886

+

1468 886 1192 610 1174 592 1466 884

+

1647 1065 1650 1068 1649 1067 1646 1064

+

1631 1049 1647 1065 1646 1064 1630 1048

+

1614 1032 1631 1049 1630 1048 1613 1031

+

1590 1008 1614 1032 1613 1031 1589 1007

+

1519 937 1590 1008 1589 1007 1518 936

+

1512 930 1519 937 1518 936 1511 929

+

1504 922 1512 930 1511 929 1502 920

+

1496 914 1504 922 1502 920 1494 912

+

1490 908 1496 914 1494 912 1488 906

+

1459 877 1490 908 1488 906 1457 875

+

1434 852 1459 877 1457 875 1432 850

+

1421 839 1434 852 1432 850 1419 837

+

1642 1060 1627 1045 1609 1027 1298 716 1514 932 1508 926 1500 918 1492 910 1486 904 1455 873 1431 849 1420 838 1433 851 1458 876 1489 907 1495 913 1503 921 1510 928 1517 935 1588 1006 1612 1030 1323 741 1645 1063 1648 1066

+

1487 905 1456 874 1454 872 1485 903

+

1493 911 1487 905 1485 903 1491 909

+

1501 919 1493 911 1491 909 1499 917

+

1509 927 1501 919 1499 917 1507 925

+

1516 934 1509 927 1507 925 1515 933

+

1587 1005 1516 934 1515 933 1586 1004

+

1611 1029 1587 1005 1586 1004 1610 1028

+

1629 1047 1611 1029 1610 1028 1628 1046

+

1644 1062 1629 1047 1628 1046 1643 1061

+

1650 1068 1644 1062 1643 1061 1649 1067

+

1481 899 1215 633 1482 900 1218 636

+

1480 898 1212 630 1481 899 1221 639

+

1208 626 1476 894 1212 630 1480 898

+

1470 888 1467 885 1186 604 1210 628 1475 893

+

1474 892 1471 889 1476 894 1208 626

+

1464 882 1461 879 1471 889 1474 892

+

1138 556 1405 823 1418 836 1430 848 1443 861 1448 866 1463 881 1473 891 1197 615

+

1429 847 1426 844 1438 856 1442 860

+

1442 860 1438 856 1447 865 1449 867

+

1449 867 1447 865 1461 879 1464 882

+

1189 607 1467 885 1460 878 1446 864 1437 855 1427 845 1415 833 1408 826 1145 563

+

1417 835 1414 832 1426 844 1429 847

+

1404 822 1403 821 1414 832 1417 835

+

1397 815 1394 812 1403 821 1404 822

+

1130 548 1126 544 1391 809 1398 816 1400 818

+

1123 541 1383 801 1388 806 1390 808

+

1390 808 1388 806 1394 812 1397 815

+

1393 811 1129 547 1132 550 1136 554 1399 817 1395 813 1389 807 1384 802 1386 804

+

1392 810 1385 803 1387 805 1396 814

+

1401 819 1392 810 1396 814 1402 820

+

1413 831 1401 819 1402 820 1416 834

+

1425 843 1413 831 1416 834 1428 846

+

1435 853 1425 843 1428 846 1439 857

+

1444 862 1435 853 1439 857 1445 863

+

1173 591 1444 862 1445 863 1462 880

+

1469 887 1173 591 1462 880 1472 890

+

1206 624 1469 887 1472 890 1477 895

+

1478 896 1206 624 1477 895 1479 897

+

1224 642 1478 896 1479 897 1483 901

+

1215 633 1224 642 1483 901 1482 900

+

1498 916 1497 915 1484 902 1226 644

+

1225 643 1484 902 1150 568 1139 557

+

1259 677 1520 938 1521 939 1529 947

+

1520 938 1257 675 1528 946 1521 939

+

1257 675 1554 972 1555 973 1528 946

+

1554 972 1569 987 1570 988 1555 973

+

1505 923 1237 655 1243 661 1506 924

+

1236 654 1239 657 1513 931 1242 660

+

1748 1166 1368 786 1365 783 1747 1165

+

1784 1202 1748 1166 1747 1165 1780 1198

+

1382 800 1782 1200 1778 1196 1380 798

+

1765 1183 1777 1195 1791 1209 1779 1197 1766 1184

+

1782 1200 1794 1212 1792 1210 1778 1196

+

1781 1199 1775 1193 1776 1194 1783 1201 1793 1211

+

1794 1212 1784 1202 1780 1198 1792 1210

+

1662 1080 1657 1075 1632 1050 1618 1036 1615 1033

+

1598 1016 1293 711 1585 1003 1597 1015

+

1619 1037 1598 1016 1597 1015 1617 1035

+

1636 1054 1619 1037 1617 1035 1633 1051

+

1616 1034 1620 1038 1637 1055 1659 1077 1661 1079

+

1660 1078 1636 1054 1633 1051 1658 1076

+

1341 759 1660 1078 1658 1076 1338 756

+

1263 681 1252 670 1249 667 1261 679

+

1340 758 1367 785 1362 780 1336 754

+

1335 753 1340 758 1336 754 1333 751

+

1326 744 1335 753 1333 751 1325 743

+

1314 732 1326 744 1325 743 1312 730

+

1306 724 1314 732 1312 730 1304 722

+

1291 709 1306 724 1304 722 1289 707

+

1279 697 1291 709 1289 707 1276 694

+
+ + + +

1805 1252 1806 1252 1807 1252

+
+ + + +

1814 1253 1815 1253 1816 1253

+
+ + + +

1808 1253 1809 1253 1810 1253 1811 1253 1812 1253 1813 1253

+
+ + + +

1817 1254 1818 1254 1819 1254 1820 1254 1821 1254 1822 1254

+
+ + + +

1829 1255 1830 1255 1831 1255

+
+ + + +

1823 1255 1824 1255 1825 1255 1826 1255 1827 1255 1828 1255

+
+ + + +

1839 1256 1840 1256 1841 1256

+
+ + + +

1832 1256 1833 1256 1834 1256 1835 1256 1836 1256 1837 1256 1838 1256

+
+ + + +

1852 1257 1853 1257 1854 1257

+
+ + + +

1842 1257 1843 1257 1844 1257 1845 1257

+

1846 1257 1847 1257 1848 1257 1849 1257 1850 1257 1851 1257

+
+ + + +

1855 1258 1856 1258 1857 1258 1858 1258 1859 1258 1860 1258

+
+ + + +

1865 1259 1866 1259 1867 1259

+
+ + + +

1861 1259 1862 1259 1863 1259 1864 1259

+
+ + + +

2024 1420 2015 1420 2013 1420 1896 1420 1976 1420 1979 1420

+
+ + + +

2024 1420 2026 1420 2020 1420 2015 1420

+

1935 1420 2019 1420 2024 1420 2013 1420

+

2005 1420 2007 1420 2011 1420 2019 1420 1935 1420

+

2004 1420 2007 1420 2005 1420 2000 1420

+

1994 1420 2004 1420 2000 1420 1913 1420

+

1913 1420 1990 1420 1988 1420 1994 1420

+

1990 1420 1984 1420 1982 1420 1988 1420

+

1984 1420 1896 1420 1979 1420 1982 1420

+

1970 1420 1874 1420 1967 1420 1883 1420 1973 1420

+

1973 1420 1883 1420 1979 1420 1976 1420

+
+ + + +

1902 1421 1903 1421 1900 1421 1889 1421 1888 1421 1894 1421

+
+ + + +

1902 1421 1900 1421 1897 1421 1890 1421 1889 1421 1894 1421

+
+ + + +

1949 1422 1939 1422 1943 1422

+
+ + + +

1947 1422 1950 1422 1952 1422 2031 1422 1953 1422 1948 1422

+

1948 1422 1941 1422 2030 1422 1938 1422 1947 1422

+

1954 1422 2021 1422 1941 1422 1948 1422 1953 1422

+

2021 1422 1954 1422 1955 1422 1949 1422 1943 1422

+
+ + + +

2012 1423 1929 1423 2008 1423 1999 1423 1995 1423 2001 1423 1999 1423 1911 1423 1995 1423 1999 1423 1985 1423 1911 1423 1871 1423 1977 1423 1980 1423 1964 1423 1969 1423 1974 1423

+
+ + + +

2022 1423 2020 1423 2026 1423 1958 1423

+

1958 1423 2025 1423 2016 1423 2022 1423

+

2025 1423 1946 1423 2014 1423 2016 1423

+

1946 1423 2012 1423 2008 1423 2014 1423

+

2012 1423 1999 1423 2001 1423 1929 1423

+

1999 1423 1871 1423 1980 1423 1985 1423

+

1974 1423 1977 1423 1871 1423 1964 1423

+

1964 1423 1874 1423 1970 1423 1969 1423

+
+ + + +

1892 1424 1899 1424 1983 1424

+
+ + + +

2028 1424 1918 1424 1921 1424 1925 1424 1931 1424

+

1991 1424 1914 1424 1921 1424 1918 1424

+

1906 1424 1914 1424 1991 1424 1989 1424

+

1989 1424 1983 1424 1899 1424 1898 1424 1906 1424

+

1886 1424 1869 1424 1868 1424 1885 1424

+

1880 1424 1881 1424 1878 1424 1877 1424

+

1972 1424 1880 1424 1877 1424 1876 1424

+

1886 1424 1975 1424 1972 1424 1876 1424 1875 1424

+

1975 1424 1886 1424 1885 1424 1899 1424 1892 1424

+
+ + + +

1981 1425 1897 1425 1903 1425 1909 1425 1907 1425 1905 1425

+

1907 1425 1909 1425 1992 1425 1915 1425

+

1930 1425 2006 1425 1924 1425 1922 1425 1920 1425 2029 1425

+

1920 1425 1922 1425 1915 1425 1992 1425

+
+ + + +

1994 1386 1988 1380 1986 1378 1994 1386 2003 1395 2004 1396

+
+ + + +

2004 1396 2003 1395 2006 1398 2007 1399

+

2007 1399 2006 1398 2010 1402 2011 1403

+

2011 1403 2010 1402 2018 1410 2019 1411

+

2019 1411 2018 1410 2023 1415 2024 1416

+

2024 1416 2023 1415 2027 1419 1958 1350 2026 1418

+

1958 1350 2027 1419 1952 1344 2025 1417

+

2025 1417 1952 1344 2017 1409 1946 1338

+

1946 1338 2017 1409 2009 1401 2012 1404

+

2012 1404 2009 1401 1997 1389 1999 1391

+

1998 1390 1996 1388 1960 1352 1963 1355

+

1870 1262 1959 1351 1961 1353 1964 1356

+

1869 1261 1875 1267 1968 1360 1966 1358 1962 1354

+

1961 1353 1965 1357 1967 1359 1872 1264 1964 1356

+

1967 1359 1965 1357 1971 1363 1882 1274

+

1882 1274 1971 1363 1978 1370 1979 1371

+

1979 1371 1978 1370 1981 1373 1982 1374

+

1982 1374 1981 1373 1986 1378 1988 1380

+

1924 1316 2002 1394 1993 1385 1987 1379 1905 1297

+
+ + + +

1994 1386 1988 1380 1986 1378 1994 1386 2003 1395 2004 1396

+
+ + + +

2004 1396 2003 1395 2006 1398 2007 1399

+

2007 1399 2006 1398 2010 1402 2011 1403

+

2011 1403 2010 1402 2018 1410 2019 1411

+

2019 1411 2018 1410 2023 1415 2024 1416

+

2024 1416 2023 1415 2027 1419 1958 1350 2026 1418

+

1958 1350 2027 1419 1952 1344 2025 1417

+

2025 1417 1952 1344 2017 1409 1946 1338

+

1946 1338 2017 1409 2009 1401 2012 1404

+

2012 1404 2009 1401 1997 1389 1999 1391

+

1998 1390 1996 1388 1960 1352 1963 1355

+

1870 1262 1959 1351 1961 1353 1964 1356

+

1869 1261 1875 1267 1968 1360 1966 1358 1962 1354

+

1961 1353 1965 1357 1967 1359 1872 1264 1964 1356

+

1967 1359 1965 1357 1971 1363 1882 1274

+

1882 1274 1971 1363 1978 1370 1979 1371

+

1979 1371 1978 1370 1981 1373 1982 1374

+

1982 1374 1981 1373 1986 1378 1988 1380

+

1924 1316 2002 1394 1993 1385 1987 1379 1905 1297

+

2021 1413 1942 1334 2015 1407 2020 1412 2022 1414

+

2015 1407 1942 1334 1937 1329 2013 1405

+

2013 1405 1937 1329 1933 1325 1934 1326

+

1934 1326 1933 1325 1927 1319 2005 1397

+

2005 1397 1927 1319 1919 1311 2000 1392

+

2000 1392 1919 1311 1992 1384 1913 1305

+

1913 1305 1992 1384 1909 1301 1990 1382

+

1990 1382 1909 1301 1902 1294 1984 1376

+

1984 1376 1902 1294 1894 1286 1896 1288

+

1896 1288 1894 1286 1887 1279 1976 1368

+

1976 1368 1887 1279 1884 1276 1973 1365

+

1880 1272 1969 1361 1970 1362 1973 1365 1884 1276

+

1969 1361 1880 1272 1972 1364 1974 1366

+

1974 1366 1972 1364 1975 1367 1977 1369

+

1977 1369 1975 1367 1892 1284 1980 1372

+

1980 1372 1892 1284 1983 1375 1985 1377

+

1985 1377 1983 1375 1989 1381 1911 1303

+

1911 1303 1989 1381 1991 1383 1995 1387

+

1995 1387 1991 1383 1917 1309 2001 1393

+

2001 1393 1917 1309 1926 1318 1928 1320

+

1928 1320 1926 1318 1932 1324 2008 1400

+

2008 1400 1932 1324 1936 1328 2014 1406

+

2014 1406 1936 1328 1940 1332 2016 1408

+

2016 1408 1940 1332 2021 1413 2022 1414

+
+ + + +

2032 1426 2033 1427 2034 1428 2035 1429 2036 1430 2037 1431 2038 1432 2039 1433

+

2040 1434 2041 1435 2042 1436 2043 1437 2044 1438 2045 1439 2046 1440 2047 1441

+

2048 1442 2049 1443 2050 1444 2051 1445

+

2052 1446 2053 1447 2054 1448 2055 1449

+

2056 1450 2057 1451 2058 1452 2059 1453

+

2060 1454 2061 1455 2062 1456 2063 1457

+

2064 1458 2065 1459 2066 1460 2067 1461

+

2068 1462 2069 1463 2070 1464 2071 1465

+

2072 1466 2073 1467 2074 1468 2075 1469

+

2076 1470 2077 1471 2078 1472 2079 1473

+
+ + + +

2080 1474 2081 1475 2082 1476 2083 1477 2084 1478 2085 1479 2086 1480 2087 1481

+

2088 1482 2089 1483 2090 1484 2091 1485 2092 1486 2093 1487 2094 1488 2095 1489

+

2096 1490 2097 1491 2098 1492 2099 1493

+

2100 1494 2101 1495 2102 1496 2103 1497

+

2104 1498 2105 1499 2106 1500 2107 1501

+

2108 1502 2109 1503 2110 1504 2111 1505

+

2112 1506 2113 1507 2114 1508 2115 1509

+

2116 1510 2117 1511 2118 1512 2119 1513

+

2120 1514 2121 1515 2122 1516 2123 1517

+

2124 1518 2125 1519 2126 1520 2127 1521

+
+ + + +

2128 1522 2129 1522 2130 1522 2131 1522

+
+ + + +

2132 1523 2133 1523 2134 1523 2135 1523

+
+ + + +

2136 1524 2137 1524 2138 1524 2139 1524

+
+ + + +

2140 1525 2141 1526 2142 1527 2143 1528

+

2144 1529 2145 1530 2146 1531 2147 1532

+

2148 1533 2149 1534 2150 1535 2151 1536

+

2152 1537 2153 1538 2154 1539 2155 1540

+

2156 1541 2157 1542 2158 1543 2159 1544

+

2160 1545 2161 1546 2162 1547 2163 1548

+

2164 1549 2165 1550 2166 1551 2167 1552

+

2168 1553 2169 1554 2170 1555 2171 1556

+
+ + + +

2172 1557 2173 1557 2174 1557 2175 1557

+
+ + + +

2177 1603 2181 1603 2207 1603 2195 1603 2216 1603 2218 1603 2196 1603 2193 1603 2217 1603 2178 1603 2208 1603 2206 1603

+
+ + + +

2177 1603 2178 1603 2206 1603 2181 1603

+

2177 1603 2207 1603 2212 1603 2188 1603 2176 1603

+

2216 1603 2195 1603 2194 1603 2188 1603 2212 1603

+

2195 1603 2218 1603 2193 1603 2196 1603

+

2196 1603 2217 1603 2213 1603 2189 1603 2197 1603

+

2208 1603 2178 1603 2179 1603 2189 1603 2213 1603

+
+ + + +

2184 1604 2187 1604 2211 1604 2204 1604 2201 1604 2220 1604 2203 1604 2219 1604 2199 1604 2183 1604 2210 1604 2209 1604

+
+ + + +

2184 1604 2183 1604 2209 1604 2187 1604

+

2184 1604 2211 1604 2215 1604 2191 1604 2185 1604

+

2201 1604 2204 1604 2205 1604 2191 1604 2215 1604

+

2204 1604 2220 1604 2219 1604 2203 1604

+

2203 1604 2199 1604 2214 1604 2190 1604 2202 1604

+

2210 1604 2183 1604 2182 1604 2190 1604 2214 1604

+
+ + + +

2218 1600 2216 1598 2198 1580 2219 1601

+

2192 1574 2218 1600 2219 1601 2220 1602

+

2217 1599 2192 1574 2220 1602 2200 1582

+

2213 1595 2217 1599 2200 1582 2215 1597

+

2208 1590 2213 1595 2215 1597 2211 1593

+

2206 1588 2208 1590 2211 1593 2187 1569

+

2181 1563 2206 1588 2187 1569 2209 1591

+

2207 1589 2181 1563 2209 1591 2210 1592

+

2212 1594 2207 1589 2210 1592 2214 1596

+

2216 1598 2212 1594 2214 1596 2198 1580

+
+ + + +

2221 1605 2222 1606 2223 1607 2224 1608

+

2225 1609 2226 1610 2227 1611 2228 1612

+

2229 1613 2230 1614 2231 1615 2232 1616

+

2233 1617 2234 1618 2235 1619 2236 1620

+

2237 1621 2238 1622 2239 1623 2240 1624

+

2241 1625 2242 1626 2243 1627 2244 1628

+
+ + + +

2245 1629 2246 1630 2247 1631 2248 1632 2249 1633 2250 1634 2251 1635 2252 1636 2253 1637 2254 1638

+

2255 1639 2256 1640 2257 1641 2258 1642 2259 1643 2260 1644 2261 1645 2262 1646 2263 1647 2264 1648

+

2265 1649 2266 1650 2267 1651 2268 1652

+

2269 1653 2270 1654 2271 1655 2272 1656

+

2273 1657 2274 1658 2275 1659 2276 1660

+

2277 1661 2278 1662 2279 1663 2280 1664

+

2281 1665 2282 1666 2283 1667 2284 1668

+

2285 1669 2286 1670 2287 1671 2288 1672

+

2289 1673 2290 1674 2291 1675 2292 1676

+

2293 1677 2294 1678 2295 1679 2296 1680

+

2297 1681 2298 1682 2299 1683 2300 1684

+

2301 1685 2302 1686 2303 1687 2304 1688

+
+ + + +

2316 1713 2328 1713 2324 1713 2320 1713

+

2320 1713 2310 1713 2312 1713 2316 1713

+
+ + + +

2314 1714 2308 1714 2306 1714 2318 1714

+

2318 1714 2322 1714 2326 1714 2314 1714

+
+ + + +

2307 1691 2311 1695 2309 1693 2305 1689

+

2306 1690 2310 1694 2320 1704 2318 1702

+

2317 1701 2319 1703 2323 1707 2321 1705

+

2322 1706 2324 1708 2327 1711 2325 1709

+

2326 1710 2328 1712 2316 1700 2314 1698

+

2313 1697 2315 1699 2312 1696 2308 1692

+
+ + + +

2354 1755 2368 1755 2348 1755 2348 1755 2350 1755 2354 1755 2348 1755 2363 1755 2350 1755 2348 1755 2342 1755 2363 1755 2334 1755 2359 1755 2361 1755 2334 1755 2338 1755 2359 1755 2334 1755 2358 1755 2338 1755

+
+ + + +

2348 1755 2334 1755 2361 1755 2342 1755

+
+ + + +

2336 1756 2356 1756 2331 1756 2331 1756 2340 1756 2336 1756 2331 1756 2360 1756 2340 1756 2346 1756 2344 1756 2362 1756 2346 1756 2364 1756 2344 1756 2346 1756 2352 1756 2364 1756 2346 1756 2366 1756 2352 1756

+
+ + + +

2331 1756 2346 1756 2362 1756 2360 1756

+
+ + + +

2346 1732 2348 1734 2368 1754 2366 1752

+

2365 1751 2367 1753 2353 1739 2351 1737

+

2351 1737 2353 1739 2350 1736 2364 1750

+

2364 1750 2350 1736 2363 1749 2344 1730

+

2344 1730 2363 1749 2342 1728 2362 1748

+

2362 1748 2342 1728 2361 1747 2360 1746

+

2360 1746 2361 1747 2359 1745 2340 1726

+

2340 1726 2359 1745 2338 1724 2336 1722

+

2336 1722 2338 1724 2358 1744 2356 1742

+

2355 1741 2357 1743 2332 1718 2329 1715

+

2331 1717 2333 1719 2348 1734 2346 1732

+
+ + + +

2387 1876 2480 1876 2398 1876

+
+ + + +

2468 1876 2437 1876 2438 1876 2379 1876

+

2454 1876 2394 1876 2414 1876 2418 1876

+

2430 1876 2398 1876 2475 1876 2432 1876 2466 1876 2377 1876

+

2448 1876 2485 1876 2452 1876 2411 1876

+

2409 1876 2477 1876 2479 1876 2411 1876 2438 1876

+

2438 1876 2411 1876 2452 1876 2487 1876 2482 1876 2387 1876 2398 1876 2430 1876 2459 1876 2454 1876 2418 1876 2455 1876 2422 1876 2457 1876 2426 1876 2462 1876 2465 1876 2379 1876

+
+ + + +

2434 1877 2481 1877 2384 1877

+
+ + + +

2390 1877 2444 1877 2450 1877 2484 1877

+

2474 1877 2434 1877 2428 1877 2463 1877 2396 1877 2473 1877

+

2417 1877 2371 1877 2391 1877 2453 1877

+

2441 1877 2403 1877 2471 1877 2381 1877

+

2406 1877 2441 1877 2444 1877 2478 1877 2476 1877

+

2444 1877 2441 1877 2381 1877 2464 1877 2461 1877 2460 1877 2424 1877 2456 1877 2420 1877 2417 1877 2453 1877 2458 1877 2428 1877 2434 1877 2384 1877 2483 1877 2486 1877 2450 1877

+
+ + + +

2481 1869 2434 1822 2398 1786 2480 1868

+

2474 1862 2475 1863 2398 1786 2434 1822

+

2473 1861 2432 1820 2475 1863 2474 1862

+

2396 1784 2466 1854 2432 1820 2473 1861

+

2463 1851 2376 1764 2466 1854 2396 1784

+

2427 1815 2429 1817 2376 1764 2463 1851

+

2458 1846 2459 1847 2429 1817 2427 1815

+

2453 1841 2454 1842 2459 1847 2458 1846

+

2391 1779 2394 1782 2454 1842 2453 1841

+

2369 1757 2412 1800 2392 1780 2372 1760

+

2417 1805 2418 1806 2414 1802 2371 1759

+

2419 1807 2455 1843 2374 1762 2415 1803

+

2456 1844 2421 1809 2455 1843 2419 1807

+

2423 1811 2457 1845 2421 1809 2456 1844

+

2460 1848 2425 1813 2457 1845 2423 1811

+

2461 1849 2462 1850 2425 1813 2460 1848

+

2464 1852 2465 1853 2462 1850 2461 1849

+

2381 1769 2379 1767 2465 1853 2464 1852

+

2469 1857 2472 1860 2470 1858 2467 1855

+

2468 1856 2471 1859 2402 1790 2436 1824

+

2441 1829 2438 1826 2437 1825 2403 1791

+

2399 1787 2439 1827 2404 1792 2407 1795

+

2476 1864 2477 1865 2409 1797 2406 1794

+

2478 1866 2479 1867 2477 1865 2476 1864

+

2444 1832 2411 1799 2479 1867 2478 1866

+

2388 1776 2446 1834 2445 1833 2442 1830

+

2484 1872 2485 1873 2448 1836 2390 1778

+

2450 1838 2452 1840 2485 1873 2484 1872

+

2486 1874 2487 1875 2452 1840 2450 1838

+

2483 1871 2482 1870 2487 1875 2486 1874

+

2384 1772 2387 1775 2482 1870 2483 1871

+

2480 1868 2386 1774 2383 1771 2481 1869

+
+ + + +

2595 2007 2524 2007 2520 2007 2599 2007 2553 2007

+

2524 2007 2595 2007 2519 2007 2590 2007 2515 2007 2588 2007 2543 2007 2583 2007 2513 2007 2579 2007 2537 2007 2581 2007 2491 2007 2584 2007 2586 2007 2495 2007 2547 2007 2591 2007 2551 2007 2597 2007 2557 2007 2601 2007 2503 2007 2603 2007 2569 2007 2609 2007 2535 2007 2611 2007 2615 2007 2509 2007 2614 2007

+

2608 2007 2567 2007 2604 2007 2530 2007 2562 2007

+

2614 2007 2575 2007 2608 2007 2562 2007 2524 2007

+
+ + + +

2596 2008 2555 2008 2600 2008 2521 2008 2527 2008

+

2507 2008 2616 2008 2577 2008 2612 2008 2610 2008 2573 2008 2607 2008 2505 2008 2602 2008 2559 2008 2598 2008 2497 2008 2594 2008 2592 2008 2549 2008 2587 2008 2493 2008 2541 2008 2582 2008 2511 2008 2578 2008 2580 2008 2489 2008 2539 2008 2585 2008 2545 2008 2589 2008 2517 2008 2593 2008 2596 2008 2527 2008

+

2571 2008 2565 2008 2533 2008 2605 2008 2606 2008

+

2565 2008 2571 2008 2613 2008 2507 2008 2527 2008

+
+ + + +

2514 1904 2589 1979 2544 1934 2588 1978

+

2588 1978 2544 1934 2585 1975 2542 1932

+

2542 1932 2585 1975 2538 1928 2583 1973

+

2583 1973 2538 1928 2488 1878 2512 1902

+

2512 1902 2488 1878 2580 1970 2579 1969

+

2579 1969 2580 1970 2578 1968 2536 1926

+

2536 1926 2578 1968 2510 1900 2581 1971

+

2581 1971 2510 1900 2582 1972 2490 1880

+

2490 1880 2582 1972 2540 1930 2584 1974

+

2584 1974 2540 1930 2492 1882 2586 1976

+

2586 1976 2492 1882 2587 1977 2494 1884

+

2494 1884 2587 1977 2548 1938 2546 1936

+

2546 1936 2548 1938 2592 1982 2591 1981

+

2591 1981 2592 1982 2594 1984 2550 1940

+

2550 1940 2594 1984 2497 1887 2597 1987

+

2597 1987 2497 1887 2598 1988 2557 1947

+

2557 1947 2598 1988 2559 1949 2601 1991

+

2601 1991 2559 1949 2602 1992 2503 1893

+

2503 1893 2602 1992 2505 1895 2603 1993

+

2603 1993 2505 1895 2607 1997 2569 1959

+

2569 1959 2607 1997 2573 1963 2609 1999

+

2609 1999 2573 1963 2610 2000 2535 1925

+

2535 1925 2610 2000 2612 2002 2611 2001

+

2611 2001 2612 2002 2577 1967 2615 2005

+

2615 2005 2577 1967 2616 2006 2509 1899

+

2509 1899 2616 2006 2507 1897 2614 2004

+

2614 2004 2507 1897 2613 2003 2575 1965

+

2575 1965 2613 2003 2571 1961 2608 1998

+

2608 1998 2571 1961 2606 1996 2567 1957

+

2567 1957 2606 1996 2605 1995 2604 1994

+

2604 1994 2605 1995 2533 1923 2530 1920

+

2528 1918 2531 1921 2563 1953 2560 1950

+

2561 1951 2564 1954 2525 1915 2522 1912

+

2524 1914 2527 1917 2521 1911 2520 1910

+

2499 1889 2501 1891 2600 1990 2599 1989

+

2599 1989 2600 1990 2555 1945 2553 1943

+

2553 1943 2555 1945 2596 1986 2595 1985

+

2595 1985 2596 1986 2593 1983 2518 1908

+

2518 1908 2593 1983 2516 1906 2590 1980

+

2590 1980 2516 1906 2589 1979 2514 1904

+
+ + + +

2617 2009 2618 2010 2619 2011 2620 2012 2621 2013 2622 2014 2623 2015 2624 2016 2625 2017 2626 2018 2627 2019 2628 2020 2629 2021 2630 2022 2631 2023 2632 2024 2633 2025 2634 2026 2635 2027 2636 2028 2637 2029 2638 2030 2639 2031 2640 2032

+

2641 2033 2642 2034 2643 2035 2644 2036 2645 2037 2646 2038 2647 2039 2648 2040 2649 2041 2650 2042 2651 2043 2652 2044 2653 2045 2654 2046 2655 2047 2656 2048 2657 2049 2658 2050 2659 2051 2660 2052 2661 2053 2662 2054 2663 2055 2664 2056

+

2665 2057 2666 2058 2667 2059 2668 2060

+

2669 2061 2670 2062 2671 2063 2672 2064

+

2673 2065 2674 2066 2675 2067 2676 2068

+

2677 2069 2678 2070 2679 2071 2680 2072

+

2681 2073 2682 2074 2683 2075 2684 2076

+

2685 2077 2686 2078 2687 2079 2688 2080

+

2689 2081 2690 2082 2691 2083 2692 2084

+

2693 2085 2694 2086 2695 2087 2696 2088

+

2697 2089 2698 2090 2699 2091 2700 2092

+

2701 2093 2702 2094 2703 2095 2704 2096

+

2705 2097 2706 2098 2707 2099 2708 2100

+

2709 2101 2710 2102 2711 2103 2712 2104

+

2713 2105 2714 2106 2715 2107 2716 2108

+

2717 2109 2718 2110 2719 2111 2720 2112

+

2721 2113 2722 2114 2723 2115 2724 2116

+

2725 2117 2726 2118 2727 2119 2728 2120

+

2729 2121 2730 2122 2731 2123 2732 2124

+

2733 2125 2734 2126 2735 2127 2736 2128

+

2737 2129 2738 2130 2739 2131 2740 2132

+

2741 2133 2742 2134 2743 2135 2744 2136

+

2745 2137 2746 2138 2747 2139 2748 2140

+

2749 2141 2750 2142 2751 2143 2752 2144

+

2753 2145 2754 2146 2755 2147 2756 2148

+

2757 2149 2758 2150 2759 2151 2760 2152

+
+ + + +

2761 2153 2762 2154 2763 2155 2764 2156 2765 2157 2766 2158 2767 2159 2768 2160 2769 2161 2770 2162

+

2771 2163 2772 2164 2773 2165 2774 2166 2775 2167 2776 2168 2777 2169 2778 2170 2779 2171 2780 2172

+

2781 2173 2782 2174 2783 2175 2784 2176

+

2785 2177 2786 2178 2787 2179 2788 2180

+

2789 2181 2790 2182 2791 2183 2792 2184

+

2793 2185 2794 2186 2795 2187 2796 2188

+

2797 2189 2798 2190 2799 2191 2800 2192

+

2801 2193 2802 2194 2803 2195 2804 2196

+

2805 2197 2806 2198 2807 2199 2808 2200

+

2809 2201 2810 2202 2811 2203 2812 2204

+

2813 2205 2814 2206 2815 2207 2816 2208

+

2817 2209 2818 2210 2819 2211 2820 2212

+
+
+ + + CAT3DBagRep + + +
+ + + + -162.483 -170 240.206 -173.845 -170 100.369 -251.147 -170 145 -205.061 -170 205.06 -251.147 -192 145 -251.147 -170 145 -173.845 -170 100.369 -173.845 -192 100.369 -173.845 -192 100.369 -173.845 -170 100.369 -162.483 -170 240.206 -162.483 -192 240.206 -162.483 -192 240.206 -162.483 -170 240.206 -205.061 -170 205.06 -205.061 -192 205.06 -205.061 -192 205.06 -205.061 -170 205.06 -251.147 -170 145 -251.147 -192 145 -205.061 -192 205.06 -251.147 -192 145 -173.845 -192 100.369 -162.483 -192 240.206 -177.794 -294 24.0367 -179.587 -294 24.0367 -179.587 -294 13.4156 -155.245 -294 13.4156 -161.5 -294 19.6708 -229.64 -294 -66.9112 -229.64 -294 24.0367 -239.891 -294 24.0367 -270.614 -294 7.00677 -179.587 -294 13.4156 -179.587 -294 12.7463 -161.835 -294 4.46844 -160.817 -294 8.1051 -160.817 -294 13.4156 -154.56 -294 8.1051 -154.56 -294 12.7312 -155.245 -294 13.4156 -160.817 -294 13.4156 -160.817 -294 8.1051 -154.56 -294 -8.6554 -154.56 -294 8.1051 -160.817 -294 8.1051 -161.835 -294 4.46844 -145.029 -294 3.19977 -154.56 -294 12.7312 -154.56 -294 -7.82642 -142.074 -294 -7.82642 -148.304 -294 -13.137 -148.304 -294 -18.4475 -142.047 -294 -18.4475 -142.047 -294 -13.137 -154.56 -294 -7.82642 -154.56 -294 -8.6554 -152.097 -294 -13.0992 -148.304 -294 -13.137 -142.047 -294 -13.137 -142.047 -294 -7.82642 -148.304 -294 -13.137 -152.097 -294 -13.0992 -152.754 -294 -18.4475 -148.304 -294 -18.4475 -270.614 -260 7.00677 -270.614 -260 7.00677 -270.614 -260 7.00677 -256.505 -260 -18.4457 -239.891 -294 24.0367 -239.886 -260 24.0396 -232.955 -260 -60.9309 -230.642 -260 -65.1039 -230.642 -260 -60.9309 -230.642 -260 -18.4457 -230.642 -260 24.0396 -229.64 -294 -60.9318 -229.64 -294 -18.4475 -229.64 -294 24.0367 -213.891 -294 -95.3238 -213.891 -294 -95.3238 -213.891 -294 -95.3238 -213.891 -260 -95.3238 -213.891 -260 -95.3238 -213.891 -260 -95.3238 -192.1 -294 24.0367 -187.961 -260 -51.5583 -187.961 -260 -51.5583 -181.266 -260 -93.1872 -181.266 -260 -60.9309 -181.266 -260 -50.2569 -181.266 -260 24.0396 -181.266 -260 56.5331 -180.039 -294 12.9572 -180.039 -294 12.9572 -179.938 -294 24.6113 -179.938 -294 24.6113 -179.938 -294 24.6113 -179.938 -294 24.6113 -179.587 -294 -93.0773 -179.587 -294 -60.9318 -179.587 -294 12.7463 -179.587 -294 24.0367 -177.794 -294 24.0367 -177.151 -294 58.8141 -177.151 -294 58.8141 -177.151 -294 58.8141 -177.144 -260 58.8177 -177.144 -260 58.8177 -177.144 -260 58.8177 -177.144 -260 58.8177 -168.244 -294 -47.7257 -168.244 -294 -47.7257 -168.244 -260 -47.7257 -168.244 -260 -47.7257 -161.835 -294 4.46844 -160.75 -294 -39.6896 -155.416 -294 -91.4943 -155.416 -294 -91.4943 -154.56 -294 -39.6896 -154.545 -294 -33.0356 -154.545 -294 -33.0356 -154.058 -294 -29.0686 -152.754 -294 -18.4475 -152.097 -294 -13.0992 -146.459 -260 45.6271 -146.459 -260 45.6271 -142.047 -294 -39.6896 -142.047 -294 -29.0686 -142.047 -294 -18.4475 -142.047 -294 -7.92828 -139 -294 -19.3003 -139 -294 -19.3003 -139 -294 -19.3003 -131.889 -260 -78.4531 -131.889 -260 -78.4531 -131.889 -260 -60.9309 -131.889 -260 -18.4457 -131.889 -260 24.0396 -118.404 -275.001 17.06 -118.404 -275.001 17.06 -108 -275 -1.70935 -108 -275 -1.70935 -108 -275 -1.70935 -108 -275 -9.11298 -108 -275 -9.11298 -104.507 -294 -39.6896 -104.507 -294 -18.4475 -100.911 -294 26.7564 -100.911 -294 26.7564 -98.0045 -294 -59.6707 -98.0045 -294 -59.6707 -98.0045 -294 -59.6707 -93.3644 -294 -39.6896 -89.6406 -294 -18.4475 -89.0146 -294 -20.9585 -89.0146 -294 -20.9585 -89.0146 -294 -20.9585 -270.614 -294 7.00677 -270.614 -294 7.00677 -215.903 -294 -25.5018 -215.903 -260 -25.5018 -213.455 -294 -5.56543 -213.455 -260 -5.56543 -206.165 -294 -43.0695 -206.165 -260 -43.0695 -199.756 -294 9.12457 -199.756 -260 9.12457 -187.961 -294 -51.5583 -180.039 -260 12.9572 -179.926 -275.002 24.6079 -179.926 -275.002 24.6079 -177.415 -275.002 55.4093 -177.415 -275.002 55.4093 -177.397 -260 55.4036 -177.397 -260 55.4036 -177.184 -275 58.7958 -177.184 -275 58.7958 -161.835 -260 4.46844 -161.5 -294 19.6708 -161.5 -275.001 19.6708 -155.416 -260 -91.4943 -154.545 -260 -33.0356 -152.097 -260 -13.0992 -146.459 -275.002 45.627 -145.029 -294 3.19977 -145.029 -275.001 3.19977 -143.433 -275 -35.8434 -143.433 -275 -35.8434 -141.973 -294 -30.3952 -141.973 -294 -30.3952 -139 -275 -19.3003 -131.889 -260 30.7913 -123.433 -274.999 -35.8435 -123.433 -274.999 -35.8435 -120.287 -294 -30.3951 -120.287 -294 -30.3951 -118.404 -260 17.0601 -118.404 -260 17.0601 -108 -294 -9.11292 -108 -294 34.097 -108 -294 34.097 -108 -274.999 34.097 -108 -274.999 34.097 -108 -274.999 34.097 -100.911 -275 26.7565 -100.911 -275 26.7565 -98.0045 -260 -59.6707 -98.0045 -260 -59.6707 -91.4697 -275.002 -31.5308 -91.4697 -275.002 -31.5308 -91.4697 -260 -31.5307 -91.4697 -260 -31.5307 -89.0146 -275.002 -20.9585 -89.0146 -275.002 -20.9585 -229.64 -294 -66.9112 -175.424 -170.001 80.4701 -175.424 -170.001 80.4701 -175.424 -170.001 80.4701 -175.424 -170.001 80.4701 -175.424 -170.001 80.4701 -175.424 -119.002 80.4709 -175.424 -119.002 80.4709 -1.97028 -183.001 -192.991 -1.97028 -183.001 -192.991 -1.97028 -183.001 -192.991 -1.97021 -162.001 -192.991 -1.97021 -162.001 -192.991 -1.97021 -162.001 -192.991 175.47 -170.001 80.3698 175.47 -170.001 80.3698 175.47 -170.001 80.3698 175.47 -119.001 80.3698 175.47 -119.001 80.3698 -250 -119.002 -0.000427 -250 -192.001 -0.000671 -241.482 -119.002 -64.705 -241.482 -192.001 -64.7056 -238.88 -119.002 41.4995 -238.88 -192.001 41.4993 -224.698 -192.001 -109.593 -224.698 -192.001 -109.593 -224.698 -119.002 -109.593 -224.698 -119.002 -109.593 -216.506 -170.001 125 -216.506 -170.001 125 -216.506 -119.002 125 -216.506 -119.002 125 -208.501 -192.001 71.8782 -208.5 -119.002 71.8798 -177.415 -192.001 55.4098 -177.415 -192.001 55.4098 -177.415 -275.003 55.4094 -177.415 -275.003 55.4094 -175.424 -170.001 80.4701 -175.424 -119.002 80.4709 -175.423 -192.001 80.4698 -175.423 -192.001 80.4698 -175.423 -275.003 80.4688 -175.423 -275.003 80.4688 -173.845 -119.002 100.369 -173.845 -119.002 100.369 -173.845 -170.001 100.369 -173.845 -170.001 100.369 -173.467 -119.002 -84.6063 -173.467 -119.002 -84.6063 -173.467 -192.001 -84.6063 -173.467 -192.001 -84.6063 -166.84 -170.001 186.183 -166.84 -119.002 186.183 -158.383 -119.002 -110.29 -158.383 -162.001 -110.29 -158.383 -162.001 -110.29 -158.383 -162.001 -110.29 -158.383 -192.001 -110.29 -158.383 -192.001 -110.29 -146.459 -275.002 45.6271 -146.458 -192.001 45.6273 -124.058 -119.002 -147.847 -124.057 -162.001 -147.848 -124.057 -162.001 -147.848 -118.404 -275.002 17.0598 -118.404 -192.001 17.0606 -85.505 -170.001 234.923 -85.505 -119.002 234.923 -73.8009 -192.001 -63.4051 -73.8008 -162.001 -63.4048 -73.8008 -162.001 -63.4048 -66.0096 -119.002 -181.361 -66.0096 -162.001 -181.361 -66.0096 -162.001 -181.361 -32.4524 -275.001 -138.001 -18.7873 -183.001 -162.652 -1.97028 -183.001 -192.991 -1.97021 -162.001 -192.991 -1.97021 -162.001 -192.991 -1.97009 -119.002 -192.991 0 -170.001 249.999 0 -119.001 249.999 12.0737 -275.001 -138.001 14.2307 -183.001 -162.652 47.9268 -275.001 -131.679 56.4886 -183.001 -155.201 66.0099 -183.001 -181.362 66.01 -119.002 -181.361 85.505 -170.001 234.923 85.505 -119.001 234.923 90.0731 -275.001 -107.345 105.115 -170.001 161.863 105.115 -170.001 161.863 105.115 -119.001 161.863 105.115 -119.001 161.863 106.164 -183.001 -126.521 119.764 -275.001 -71.9616 124.058 -119.001 -147.847 124.058 -183.001 -147.847 127.951 -275.001 -51.6965 127.951 -275.001 -51.6965 136.16 -170.001 209.667 136.16 -170.001 209.667 136.16 -119.001 209.667 136.16 -119.001 209.667 141.158 -183.001 -84.8163 147.846 -170.001 124.057 147.847 -119.001 124.057 150.808 -183.001 -60.9311 150.808 -183.001 -60.9311 167.143 -119.001 -96.5007 167.143 -183.001 -96.5005 175.47 -170.001 80.3698 175.47 -275.002 80.3685 175.47 -275.002 80.3685 178.947 -275.001 -72.3 178.947 -275.001 -72.3 178.947 -183.001 -72.2998 178.947 -183.001 -72.2998 178.947 -119.001 -72.2988 190.068 -275.002 33.5131 190.068 -119.001 33.5136 190.068 -275.001 -33.5156 190.068 -119.001 -33.515 68 -418 613 -68 -418 613 -68 -418 477 68 -418 477 -68 -415 477 -68 -418 477 -68 -418 613 -68 -415 613 -68 -415 613 -68 -418 613 68 -418 613 68 -415 613 68 -415 613 68 -418 613 68 -418 477 68 -415 477 68 -415 477 68 -418 477 -68 -418 477 -68 -415 477 68 -415 477 -68 -415 477 -68 -415 613 68 -415 613 -180.039 -260 12.9572 -161.835 -260 4.46844 -152.097 -260 -13.0992 -154.545 -260 -33.0356 -168.244 -260 -47.7257 -187.961 -260 -51.5583 -206.165 -260 -43.0695 -215.903 -260 -25.5018 -213.455 -260 -5.56543 -199.756 -260 9.12463 -199.756 -294 9.12463 -213.455 -294 -5.56543 -215.903 -294 -25.5018 -206.165 -294 -43.0695 -187.961 -294 -51.5583 -168.244 -294 -47.7257 -154.545 -294 -33.0356 -152.097 -294 -13.0992 -161.835 -294 4.46844 -180.039 -294 12.9572 -199.756 -260 9.12463 -199.756 -294 9.12463 -180.039 -294 12.9572 -180.039 -260 12.9572 -180.039 -260 12.9572 -180.039 -294 12.9572 -161.835 -294 4.46844 -161.835 -260 4.46844 -161.835 -260 4.46844 -161.835 -294 4.46844 -152.097 -294 -13.0992 -152.097 -260 -13.0992 -152.097 -260 -13.0992 -152.097 -294 -13.0992 -154.545 -294 -33.0356 -154.545 -260 -33.0356 -154.545 -260 -33.0356 -154.545 -294 -33.0356 -168.244 -294 -47.7257 -168.244 -260 -47.7257 -168.244 -260 -47.7257 -168.244 -294 -47.7257 -187.961 -294 -51.5583 -187.961 -260 -51.5583 -187.961 -260 -51.5583 -187.961 -294 -51.5583 -206.165 -294 -43.0695 -206.165 -260 -43.0695 -206.165 -260 -43.0695 -206.165 -294 -43.0695 -215.903 -294 -25.5018 -215.903 -260 -25.5018 -215.903 -260 -25.5018 -215.903 -294 -25.5018 -213.455 -294 -5.56543 -213.455 -260 -5.56543 -213.455 -260 -5.56543 -213.455 -294 -5.56543 -199.756 -294 9.12463 -199.756 -260 9.12463 -68.6325 -285.982 1069.69 -68.6325 -285.982 1104.79 -81.6341 -285.982 1097.29 -104.79 -285.982 1069.69 68.6325 -274.982 1069.69 68.6325 -274.982 1104.79 81.634 -274.982 1097.29 104.79 -274.982 1069.69 -125.071 -274.982 977.946 -125.071 -274.982 977.946 -125.071 -274.982 1022.05 -125.071 -274.982 1022.05 -125.071 -274.982 999.682 -109.985 -274.982 936.5 -109.985 -274.982 936.5 -109.985 -274.982 1063.5 -109.985 -274.982 1063.5 -104.79 -274.982 1069.69 -104.257 -285.982 929.673 -104.257 -285.982 929.673 -104.257 -274.982 929.673 -104.257 -274.982 929.673 -103.73 -274.982 999.682 -103.105 -285.982 929.673 -103.105 -285.982 999.682 -103.105 -285.982 1069.69 -103.105 -285.982 1069.69 -69.2579 -274.982 929.673 -69.2579 -274.982 1069.69 -68.8031 -274.982 1104.7 -68.6325 -285.982 929.673 -68.6325 -285.982 1069.69 -68.6325 -285.982 1104.7 -68.6325 -285.982 1104.7 -67.7032 -285.982 894.669 -67.7032 -274.982 894.669 -67.7032 -274.982 894.669 -53.3514 -285.982 936.418 -53.3514 -285.982 936.418 -53.3514 -274.982 936.418 -53.3514 -274.982 936.418 -53.3514 -274.982 1063.58 -53.3514 -274.982 1063.58 -42.7695 -274.982 1069.69 -42.7695 -274.982 1069.69 -41.6696 -285.982 929.673 -41.6696 -285.982 929.673 -41.6696 -274.982 929.673 -34.7853 -274.982 894.669 -34.7853 -274.982 1104.7 -34.1599 -285.982 894.669 -34.1599 -285.982 1104.7 -28.3877 -285.982 922.005 -28.3877 -285.982 922.005 -28.3877 -274.982 922.005 -28.3877 -274.982 922.005 -28.3877 -274.982 1077.99 -28.3877 -274.982 1077.99 -0.312683 -274.982 894.669 -0.312683 -274.982 1104.7 0.312622 -285.982 894.669 0.312622 -285.982 1104.7 28.3876 -285.982 922.005 28.3876 -285.982 922.005 28.3876 -285.982 1077.99 28.3876 -285.982 1077.99 28.3876 -274.982 922.005 28.3876 -274.982 922.005 34.1599 -274.982 894.669 34.1599 -274.982 1104.7 34.7852 -285.982 894.669 34.7852 -285.982 1104.7 41.6696 -285.982 929.673 41.6696 -285.982 929.673 41.6696 -274.982 929.673 41.6696 -274.982 929.673 42.7694 -285.982 1069.69 53.3513 -285.982 936.418 53.3513 -285.982 936.418 53.3513 -285.982 1063.58 53.3513 -274.982 936.418 53.3513 -274.982 936.418 67.7032 -285.982 894.669 67.7032 -285.982 894.669 67.7032 -274.982 894.669 68.6325 -274.982 929.673 68.6325 -274.982 1069.69 68.6325 -274.982 1104.7 68.6325 -274.982 1104.7 68.803 -285.982 1104.7 69.2578 -285.982 929.673 69.2578 -285.982 1069.69 103.105 -274.982 929.673 103.105 -274.982 929.673 103.105 -274.982 999.682 103.105 -274.982 1069.69 103.105 -274.982 1069.69 103.73 -285.982 999.682 104.257 -285.982 929.673 104.257 -285.982 929.673 104.257 -274.982 929.673 104.257 -274.982 929.673 104.79 -285.982 1069.69 104.79 -285.982 1069.69 109.985 -285.982 936.5 109.985 -285.982 936.5 109.985 -285.982 1063.5 109.985 -285.982 1063.5 125.071 -285.982 977.946 125.071 -285.982 977.946 125.071 -285.982 1022.05 125.071 -285.982 1022.05 125.071 -285.982 999.682 -125.071 -285.982 977.946 -125.071 -285.982 977.946 -125.071 -285.982 1022.05 -125.071 -285.982 1022.05 -109.985 -285.982 936.5 -109.985 -285.982 936.5 -109.985 -285.982 1063.5 -109.985 -285.982 1063.5 -104.79 -285.982 1069.69 -103.105 -285.982 929.673 -81.7391 -285.982 985.587 -81.7391 -285.982 1014.41 -81.7391 -274.982 985.587 -81.7391 -274.982 1014.41 -81.6341 -285.982 902.712 -81.6341 -285.982 1097.29 -81.6341 -274.982 902.712 -81.6341 -274.982 1097.29 -71.8801 -285.982 958.5 -71.8801 -285.982 1041.5 -71.8801 -274.982 958.5 -71.8801 -274.982 1041.5 -68.8031 -274.982 1104.7 -68.6325 -285.982 1104.79 -67.7032 -285.982 894.669 -53.3514 -285.982 1063.58 -43.4366 -285.982 880.659 -43.4366 -285.982 880.659 -43.4366 -285.982 1119.34 -43.4366 -285.982 1119.34 -43.4366 -274.982 880.659 -43.4366 -274.982 880.659 -43.4366 -274.982 1119.34 -43.4366 -274.982 1119.34 -28.3877 -285.982 1077.99 0 -285.982 873 0 -285.982 873 0 -285.982 917 0 -285.982 1083 0 -285.982 1127 0 -285.982 1127 0 -274.982 873 0 -274.982 873 0 -274.982 917 0 -274.982 1083 0 -274.982 1127 0 -274.982 1127 28.3876 -274.982 1077.99 43.4365 -285.982 880.659 43.4365 -285.982 880.659 43.4365 -285.982 1119.34 43.4365 -285.982 1119.34 43.4365 -274.982 880.659 43.4365 -274.982 880.659 43.4365 -274.982 1119.34 43.4365 -274.982 1119.34 53.3513 -285.982 1063.58 53.3513 -274.982 1063.58 68.6325 -274.982 1104.79 71.8801 -285.982 958.5 71.8801 -285.982 1041.5 71.8801 -274.982 958.5 71.8801 -274.982 1041.5 81.634 -285.982 902.712 81.634 -285.982 1097.29 81.634 -274.982 902.712 81.634 -274.982 1097.29 81.739 -285.982 985.587 81.739 -285.982 1014.41 81.739 -274.982 985.587 81.739 -274.982 1014.41 104.79 -274.982 1069.69 109.985 -274.982 936.5 109.985 -274.982 936.5 109.985 -274.982 1063.5 109.985 -274.982 1063.5 125.071 -274.982 977.946 125.071 -274.982 977.946 125.071 -274.982 1022.05 125.071 -274.982 1022.05 -175.424 -170 80.4702 -117 -170 800 117 -170 800 175.47 -170 80.3699 117 -275 800 117 -170 800 -117 -170 800 -117 -275 800 -117 -275 800 -117 -170 800 -175.424 -170 80.4702 -175.424 -275 80.4702 -175.424 -275 80.4702 -175.424 -170 80.4702 175.47 -170 80.3699 175.47 -275 80.3699 175.47 -275 80.3699 175.47 -170 80.3699 117 -170 800 117 -275 800 175.47 -275 80.3699 117 -275 800 -117 -275 800 -175.424 -275 80.4702 -143.584 -392.361 -2.19061 -143.584 -392.361 -2.19061 -143.584 -392.361 -2.19061 -116.935 -333.1 800 -116.935 -333.1 800 -113.814 -333.1 -19.1836 -113.814 -333.1 -19.1836 -113.814 -333.1 -19.1836 -113.814 -333.1 -19.1836 -108 -389 -3.15442 -108 -389 -3.15442 -108 -389 -3.15442 -108 -333.1 80.451 -108 -333.1 80.451 103.207 -389 80.3962 103.207 -389 80.3962 103.207 -389 80.3962 116.938 -333.1 800 116.938 -333.1 800 128.704 -415 -0.000122 128.704 -415 -0.000122 128.704 -415 -0.000122 147.596 -333.1 -19.1836 147.596 -333.1 -19.1836 147.596 -333.1 -19.1836 147.596 -333.1 -19.1836 -179.895 -333.1 24.5999 -161.5 -362.042 19.6708 -161.5 -333.1 19.6708 -145.029 -333.1 3.19977 -145.029 -389.463 3.19977 -145.029 -389.463 3.19977 -139.031 -333.1 -19.1836 -138.446 -400 -0.000305 -128.704 -415 -0.000122 -128.704 -415 -0.000122 -116.935 -333.1 800 -108 -333.1 -9.11298 -108 -368.221 -9.11285 -108 -333.1 80.451 -108 -389 21.3704 -108 -389 21.3704 -108 -381.613 80.451 -108 -381.613 80.451 -103.203 -389 80.4498 -103.203 -389 80.4498 -103.203 -389 80.4498 -63.7458 -415 800 -63.7458 -415 800 63.7496 -415 800 63.7496 -415 800 103.207 -389 80.3962 109.991 -389 -3.15448 109.991 -389 -3.15448 116.938 -333.1 800 128.704 -415 -0.000122 138.445 -400 -0.000305 139.511 -333.1 80.3868 139.511 -333.1 80.3868 183.45 -333.1 -19.1837 -138.933 -333.1 -19.2158 -138.933 -333.1 -19.2158 -138.933 -333.1 -19.2158 -123.33 -275 -35.8721 -123.33 -275 -35.8721 -117.095 -333.1 799.972 -117.095 -333.1 799.972 -117.095 -333.1 799.972 -117.095 -275 799.972 -117.095 -275 799.972 -117.095 -275 799.972 116.905 -333.1 800.027 116.905 -333.1 800.027 116.905 -333.1 800.027 116.905 -275 800.027 116.905 -275 800.027 116.905 -275 800.027 183.617 -333.1 -19.1396 183.617 -333.1 -19.1396 183.617 -333.1 -19.1396 184.974 -275 -35.7994 184.974 -275 -35.7994 184.974 -275 -35.7994 -179.871 -333.1 24.5748 -179.871 -333.1 24.5748 -179.871 -333.1 24.5748 -179.871 -275 24.5748 -179.871 -275 24.5748 -179.871 -275 24.5748 -123.33 -275 -35.8721 -107.925 -333.1 80.426 -107.925 -333.1 80.426 -107.925 -333.1 80.426 -107.925 -275 80.4259 -107.925 -275 80.4259 -107.925 -275 80.4259 139.586 -333.1 80.4259 139.586 -333.1 80.4259 139.586 -333.1 80.4259 139.586 -275 80.4259 139.586 -275 80.4259 139.586 -275 80.4259 -161.411 -333.1 19.6331 -161.411 -275 19.633 -144.936 -333.1 3.16596 -144.936 -275 3.16589 -143.33 -275 -35.8769 -138.901 -332.692 -19.3327 -138.901 -275 -19.3327 -113.716 -333.1 -19.2098 -107.904 -333.1 -9.13794 -107.904 -275 -9.13818 147.7 -333.1 -19.1481 147.7 -333.1 -19.1481 149.058 -275 -35.8079 149.058 -275 -35.8079 -147.713 -319.984 973.915 -147.713 -319.984 973.915 -143.095 -319.984 947.773 -139.539 -319.983 927.625 -139.539 -319.983 927.625 -129.903 -311.538 1075 -129.903 -311.538 1075 -129.903 -311.538 1075 -51.3022 -259.976 1140.96 -51.3022 -259.976 1140.96 0.000702 -259.977 1138 0.000702 -259.977 1138 0.000702 -259.977 1138 51.3036 -259.976 1140.96 51.3036 -259.976 1140.96 51.3036 -259.976 1140.96 51.3036 -259.976 1140.96 129.905 -259.977 1075 129.905 -259.977 1075 -149.428 -259.978 1013.08 -149.428 -319.191 1013.08 -148.855 -319.984 999.999 -147.713 -259.979 973.913 -147.713 -319.984 973.915 -143.097 -274.977 947.772 -143.096 -259.979 947.769 -137.786 -316.954 1050 -137.475 -274.976 1012.03 -137.474 -259.978 1012.03 -131.497 -274.977 1011.51 -131.496 -319.287 1011.51 -130.994 -319.984 999.999 -129.994 -274.977 977.082 -129.993 -319.984 977.083 -129.903 -259.977 1075 -129.903 -311.538 1075 -119.511 -274.976 1069 -119.511 -259.978 1069 -119.359 -316.955 1050 -117 -333.085 800.003 -117 -333.085 800.003 -117 -274.979 800.004 -116.939 -319.984 941.217 -116.937 -274.978 941.208 -114.538 -319.984 927.623 -114.315 -274.976 1066 -114.314 -313.488 1066 -108.927 -306.122 1100 -96.4171 -259.977 1114.91 -96.4168 -300.235 1114.91 -91.9997 -333.085 800.003 -91.9997 -333.085 800.003 -91.9992 -274.979 800.004 -88.7043 -274.976 1105.72 -88.7039 -259.977 1105.72 -85.7867 -306.123 1100 -84.8473 -274.976 1101.12 -84.8468 -305.68 1101.12 -51.3019 -289.951 1140.96 -47.1984 -274.976 1129.68 -47.1981 -259.977 1129.68 -45.1458 -274.977 1124.04 -45.1456 -296.63 1124.04 0.000397 -274.977 1138 0.000488 -259.976 1150 0.000916 -274.977 1132 0.001038 -293.487 1132 0.001251 -286.379 1150 45.1474 -274.978 1124.04 45.1477 -296.631 1124.04 47.1991 -274.978 1129.68 47.1994 -259.977 1129.68 51.3036 -259.976 1140.96 51.3041 -289.952 1140.96 84.8486 -274.979 1101.12 84.8492 -305.683 1101.12 85.7888 -306.125 1100 88.705 -274.979 1105.72 88.7053 -259.977 1105.72 92.0004 -274.982 800.004 92.0009 -333.088 800.003 92.0009 -333.088 800.003 96.4188 -259.977 1114.91 96.4192 -300.238 1114.91 108.929 -306.125 1100 114.316 -274.979 1066 114.317 -313.491 1066 114.54 -319.987 927.625 116.94 -274.981 941.213 116.94 -319.987 941.214 116.999 -274.982 800.004 117 -333.088 800.003 117 -333.088 800.003 119.362 -316.958 1050 119.512 -274.979 1069 119.512 -259.978 1069 129.905 -259.977 1075 129.905 -311.541 1075 129.995 -274.981 977.082 129.996 -319.988 977.083 130.997 -319.988 999.998 131.499 -274.98 1011.51 131.499 -319.29 1011.51 137.475 -274.98 1012.03 137.476 -259.978 1012.03 137.789 -316.958 1050 139.539 -319.987 927.623 143.097 -274.981 947.773 143.098 -259.979 947.774 147.715 -259.979 973.919 147.716 -319.988 973.92 148.858 -319.988 999.999 149.43 -259.978 1013.08 149.431 -319.195 1013.08 -143.097 -170 947.768 -137.475 -170 1012.03 -119.512 -170 1069 -88.7047 -170 1105.71 -47.1988 -170 1129.68 0 -170 1138 47.1986 -170 1129.68 88.7045 -170 1105.71 119.511 -170 1069 137.475 -170 1012.03 143.097 -170 947.768 117 -170 800 -117 -170 800 -117 -275 800 117 -275 800 143.097 -275 947.768 137.475 -275 1012.03 119.511 -275 1069 88.7045 -275 1105.71 47.1986 -275 1129.68 0 -275 1138 -47.1988 -275 1129.68 -88.7047 -275 1105.71 -119.512 -275 1069 -137.475 -275 1012.03 -143.097 -275 947.768 -137.475 -170 1012.03 -137.475 -275 1012.03 -119.512 -275 1069 -119.512 -170 1069 -119.512 -170 1069 -119.512 -275 1069 -88.7047 -275 1105.71 -88.7047 -170 1105.71 -88.7047 -170 1105.71 -88.7047 -275 1105.71 -47.1988 -275 1129.68 -47.1988 -170 1129.68 -47.1988 -170 1129.68 -47.1988 -275 1129.68 0 -275 1138 0 -170 1138 0 -170 1138 0 -275 1138 47.1986 -275 1129.68 47.1986 -170 1129.68 47.1986 -170 1129.68 47.1986 -275 1129.68 88.7045 -275 1105.71 88.7045 -170 1105.71 88.7045 -170 1105.71 88.7045 -275 1105.71 119.511 -275 1069 119.511 -170 1069 119.511 -170 1069 119.511 -275 1069 137.475 -275 1012.03 137.475 -170 1012.03 137.475 -170 1012.03 137.475 -275 1012.03 143.097 -275 947.768 143.097 -170 947.768 143.097 -170 947.768 143.097 -275 947.768 117 -275 800 117 -170 800 117 -170 800 117 -275 800 -117 -275 800 -117 -170 800 -117 -170 800 -117 -275 800 -143.097 -275 947.768 -143.097 -170 947.768 -143.097 -170 947.768 -143.097 -275 947.768 -137.475 -275 1012.03 -137.475 -170 1012.03 -48.4602 -400 800 -91.9073 -333.1 800 -114.513 -319.985 927.629 -116.935 -333.1 800 -91.9073 -333.1 800 -48.4602 -400 800 -73.4875 -400 800 -73.4875 -400 800 -48.4602 -400 800 -114.513 -319.985 927.629 -139.541 -319.985 927.629 -139.541 -319.985 927.629 -114.513 -319.985 927.629 -91.9073 -333.1 800 -116.935 -333.1 800 -139.541 -319.985 927.629 -116.935 -333.1 800 -73.4875 -400 800 114.513 -319.985 927.629 91.9071 -333.1 800 48.4604 -400 800 116.934 -333.1 800 91.9071 -333.1 800 114.513 -319.985 927.629 139.54 -319.985 927.629 139.54 -319.985 927.629 114.513 -319.985 927.629 48.4604 -400 800 73.4876 -400 800 73.4876 -400 800 48.4604 -400 800 91.9071 -333.1 800 116.934 -333.1 800 73.4876 -400 800 116.934 -333.1 800 139.54 -319.985 927.629 0 -375 925 14.6947 -370.225 929.775 23.7765 -357.725 942.275 23.7765 -342.275 957.725 14.6947 -329.775 970.225 0 -325 975 -14.6946 -329.775 970.225 -23.7764 -342.275 957.725 -23.7764 -357.725 942.275 -14.6946 -370.225 929.775 0 -375 800 -14.6946 -370.225 800 -23.7764 -357.725 800 -23.7764 -342.275 800 -14.6946 -329.775 800 0 -325 800 14.6947 -329.775 800 23.7765 -342.275 800 23.7765 -357.725 800 14.6947 -370.225 800 0 -375 925 0 -375 800 14.6947 -370.225 800 14.6947 -370.225 929.775 14.6947 -370.225 929.775 14.6947 -370.225 800 23.7765 -357.725 800 23.7765 -357.725 942.275 23.7765 -357.725 942.275 23.7765 -357.725 800 23.7765 -342.275 800 23.7765 -342.275 957.725 23.7765 -342.275 957.725 23.7765 -342.275 800 14.6947 -329.775 800 14.6947 -329.775 970.225 14.6947 -329.775 970.225 14.6947 -329.775 800 0 -325 800 0 -325 975 0 -325 975 0 -325 800 -14.6946 -329.775 800 -14.6946 -329.775 970.225 -14.6946 -329.775 970.225 -14.6946 -329.775 800 -23.7764 -342.275 800 -23.7764 -342.275 957.725 -23.7764 -342.275 957.725 -23.7764 -342.275 800 -23.7764 -357.725 800 -23.7764 -357.725 942.275 -23.7764 -357.725 942.275 -23.7764 -357.725 800 -14.6946 -370.225 800 -14.6946 -370.225 929.775 -14.6946 -370.225 929.775 -14.6946 -370.225 800 0 -375 800 0 -375 925 50.6817 -415.5 120.229 49.6527 -415.5 119.953 48.6237 -415.5 118.171 48.6237 -415.5 103.351 52.7404 -415.5 103.351 52.7404 -415.5 118.171 52.4647 -415.5 119.2 -2.24253 -415.5 78.9974 -2.24253 -415.5 83.5636 -29.6082 -415.5 83.5636 -29.6082 -415.5 78.9974 -29.6082 -415.5 130.997 -32.2425 -415.5 130.997 -32.2425 -415.5 78.9974 -29.6082 -415.5 78.9974 -2.24253 -415.5 130.997 -4.8019 -415.5 130.997 -4.8019 -415.5 90.7299 -2.24253 -415.5 90.7299 59.5124 -415.5 119.395 66.2061 -415.5 119.395 66.2061 -415.5 130.997 59.5124 -415.5 130.997 66.2061 -415.5 78.9974 66.2061 -415.5 83.5636 38.8405 -415.5 83.5636 38.8405 -415.5 78.9974 38.8405 -415.5 130.997 36.2061 -415.5 130.997 36.2061 -415.5 78.9974 38.8405 -415.5 78.9974 32.2438 -415.5 78.9974 32.2438 -415.5 83.5636 4.87819 -415.5 83.5636 4.87819 -415.5 78.9974 32.2438 -415.5 105.062 29.6844 -415.5 105.062 29.6844 -415.5 83.5636 32.2438 -415.5 83.5636 4.87819 -415.5 130.997 2.24381 -415.5 130.997 2.24381 -415.5 78.9974 4.87819 -415.5 78.9974 -36.2048 -415.5 78.9974 -36.2048 -415.5 83.5636 -63.5704 -415.5 83.5636 -63.5704 -415.5 78.9974 -36.2048 -415.5 105.062 -38.7641 -415.5 105.062 -38.7641 -415.5 83.5636 -36.2048 -415.5 83.5636 -63.5704 -415.5 130.997 -66.2048 -415.5 130.997 -66.2048 -415.5 78.9974 -63.5704 -415.5 78.9974 -21.3394 -415.5 126.561 -21.3394 -415.5 130.997 -29.6082 -415.5 130.997 -29.6082 -415.5 126.561 -19.3008 -415.5 126.404 -19.3008 -415.5 92.6471 -19.0252 -415.5 91.6181 -17.243 -415.5 90.5891 -16.2131 -415.5 90.8649 -15.1842 -415.5 92.6471 -15.1842 -415.5 126.404 -17.205 -415.5 126.561 -21.3394 -415.5 126.561 -19.3008 -415.5 126.404 -17.205 -415.5 126.561 -17.205 -415.5 130.997 -21.3394 -415.5 130.997 -4.8019 -415.5 130.997 -17.205 -415.5 130.997 -17.205 -415.5 126.561 -15.1842 -415.5 126.404 -8.18591 -415.5 126.404 -4.8019 -415.5 126.561 -4.8019 -415.5 126.561 -8.18591 -415.5 126.404 -8.18591 -415.5 92.6475 -4.8019 -415.5 90.7299 -8.18591 -415.5 92.6475 -8.69973 -415.5 90.7299 -4.8019 -415.5 90.7299 -25.4738 -415.5 126.561 -29.6082 -415.5 126.561 -29.6082 -415.5 90.7299 -26.2991 -415.5 92.6475 -26.2991 -415.5 92.6475 -29.6082 -415.5 90.7299 -29.6082 -415.5 83.5636 -25.4738 -415.5 83.5636 -25.0858 -415.5 88.1192 -25.4738 -415.5 83.5636 -21.3394 -415.5 83.5636 -21.7708 -415.5 84.8042 -25.0858 -415.5 88.1192 -17.205 -415.5 83.5636 -21.7708 -415.5 84.8042 -21.3394 -415.5 83.5636 -2.24253 -415.5 83.5636 -2.24253 -415.5 90.7299 -8.69973 -415.5 90.7299 -9.39926 -415.5 88.1192 -8.93628 -415.5 83.5636 -13.0707 -415.5 83.5636 -8.93628 -415.5 83.5636 -9.39926 -415.5 88.1192 -12.7142 -415.5 84.8042 -12.7142 -415.5 84.8042 -17.205 -415.5 83.5636 -13.0707 -415.5 83.5636 47.1092 -415.5 126.561 45.9479 -415.5 125.246 51.2436 -415.5 126.561 42.7836 -415.5 122.081 45.9479 -415.5 125.246 47.1092 -415.5 126.561 47.1092 -415.5 130.997 42.9749 -415.5 130.997 55.378 -415.5 126.561 55.378 -415.5 130.997 47.1092 -415.5 130.997 47.1092 -415.5 126.561 38.8405 -415.5 119.395 41.6255 -415.5 117.759 42.7836 -415.5 122.081 42.9749 -415.5 126.561 42.9749 -415.5 130.997 38.8405 -415.5 130.997 41.6255 -415.5 117.759 38.8405 -415.5 119.395 38.8405 -415.5 83.5636 41.6255 -415.5 83.5909 51.2436 -415.5 83.5636 48.6237 -415.5 83.5909 41.6255 -415.5 83.5909 38.8405 -415.5 83.5636 48.6237 -415.5 96.3524 48.6237 -415.5 83.5909 51.2436 -415.5 83.5636 52.7404 -415.5 83.5909 52.7404 -415.5 96.3524 63.6467 -415.5 83.5636 59.7386 -415.5 83.5909 52.7404 -415.5 83.5909 51.2436 -415.5 83.5636 59.7386 -415.5 117.759 59.7386 -415.5 83.5909 63.6467 -415.5 83.5636 66.2061 -415.5 83.5636 66.2061 -415.5 119.395 63.6467 -415.5 119.395 63.6467 -415.5 119.395 59.5124 -415.5 119.395 59.7386 -415.5 117.759 59.7386 -415.5 117.759 59.5124 -415.5 119.395 58.5805 -415.5 122.081 58.5805 -415.5 122.081 59.5124 -415.5 119.395 59.5124 -415.5 126.561 55.378 -415.5 126.561 55.4162 -415.5 125.246 58.5805 -415.5 122.081 59.5124 -415.5 126.561 59.5124 -415.5 130.997 55.378 -415.5 130.997 55.4162 -415.5 125.246 55.378 -415.5 126.561 51.2436 -415.5 126.561 32.2438 -415.5 126.561 32.2438 -415.5 130.997 17.2813 -415.5 130.997 17.2813 -415.5 126.561 29.6844 -415.5 126.561 17.2813 -415.5 126.561 18.7781 -415.5 126.404 25.7763 -415.5 126.404 25.5501 -415.5 105.062 32.2438 -415.5 105.062 32.2438 -415.5 126.561 29.6844 -415.5 126.561 25.7763 -415.5 126.404 25.5501 -415.5 125.091 25.5501 -415.5 125.091 21.7392 -415.5 102.987 23.9239 -415.5 102.031 25.5501 -415.5 105.062 25.5501 -415.5 105.062 23.9239 -415.5 102.031 25.28 -415.5 100.675 25.28 -415.5 100.675 25.5501 -415.5 99.6669 29.6844 -415.5 97.8961 29.6844 -415.5 105.062 25.5501 -415.5 105.062 25.5501 -415.5 99.6669 25.7763 -415.5 83.5909 29.6844 -415.5 83.5636 29.6844 -415.5 97.8961 29.6844 -415.5 83.5636 25.7763 -415.5 83.5909 18.7781 -415.5 83.5909 17.2813 -415.5 83.5636 17.2678 -415.5 96.2056 15.1041 -415.5 96.3524 14.6614 -415.5 83.5909 17.2813 -415.5 83.5636 18.7781 -415.5 83.5909 18.7781 -415.5 94.2941 18.5023 -415.5 95.3233 17.2813 -415.5 83.5636 14.6614 -415.5 83.5909 7.66316 -415.5 83.5909 4.87819 -415.5 83.5636 7.66316 -415.5 125.88 4.87819 -415.5 126.561 4.87819 -415.5 83.5636 7.66316 -415.5 83.5909 9.01257 -415.5 126.561 9.01257 -415.5 130.997 4.87819 -415.5 130.997 4.87819 -415.5 126.561 7.66316 -415.5 125.88 9.01257 -415.5 130.997 9.01257 -415.5 126.561 10.4977 -415.5 126.404 14.6614 -415.5 126.404 17.2813 -415.5 126.561 17.2813 -415.5 130.997 17.2813 -415.5 126.561 14.6614 -415.5 126.404 14.6614 -415.5 102.527 17.2813 -415.5 119.395 17.2813 -415.5 126.561 17.2813 -415.5 119.395 18.7781 -415.5 126.404 -59.436 -415.5 126.561 -63.5704 -415.5 126.561 -63.5704 -415.5 83.5636 -60.2614 -415.5 83.5909 -51.1673 -415.5 83.5636 -53.2631 -415.5 83.5909 -60.2614 -415.5 83.5909 -63.5704 -415.5 83.5636 -51.2048 -415.5 96.3524 -53.2631 -415.5 96.3524 -53.2631 -415.5 83.5909 -51.1673 -415.5 83.5636 -49.1465 -415.5 83.5909 -49.1465 -415.5 94.2941 -49.4223 -415.5 95.3233 -38.7641 -415.5 83.5636 -42.1481 -415.5 83.5909 -49.1465 -415.5 83.5909 -51.1673 -415.5 83.5636 -42.1481 -415.5 98.8224 -42.1481 -415.5 83.5909 -38.7641 -415.5 83.5636 -38.7641 -415.5 97.8961 -38.7641 -415.5 97.8961 -38.7641 -415.5 105.062 -42.8985 -415.5 105.062 -42.8985 -415.5 100.929 -42.1481 -415.5 98.8224 -44.0007 -415.5 102.031 -42.8985 -415.5 100.929 -42.8985 -415.5 105.062 -42.8985 -415.5 122.052 -46.2649 -415.5 102.527 -44.0007 -415.5 102.031 -42.8985 -415.5 105.062 -42.8985 -415.5 105.062 -36.2048 -415.5 105.062 -36.2048 -415.5 126.561 -38.7641 -415.5 126.561 -42.1481 -415.5 126.404 -42.8985 -415.5 122.052 -38.7641 -415.5 126.561 -51.1673 -415.5 126.561 -49.1465 -415.5 126.404 -42.1481 -415.5 126.404 -55.3016 -415.5 126.561 -55.3016 -415.5 130.997 -63.5704 -415.5 130.997 -63.5704 -415.5 126.561 -36.2048 -415.5 126.561 -36.2048 -415.5 130.997 -51.1673 -415.5 130.997 -51.1673 -415.5 126.561 -55.3016 -415.5 126.561 -53.2631 -415.5 126.404 -51.1673 -415.5 126.561 -51.1673 -415.5 130.997 -55.3016 -415.5 130.997 -51.1673 -415.5 126.561 -53.2631 -415.5 126.404 -53.2631 -415.5 102.527 -51.1673 -415.5 119.395 -51.1673 -415.5 126.561 -51.1673 -415.5 119.395 -49.1465 -415.5 126.404 + + + + + + + + + + 0 1 0 0 1 0 0 1 0 0 1 0 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 0.996717 0 -0.0809656 0.996717 0 -0.0809656 0.996717 0 -0.0809656 0.996717 0 -0.0809656 -0.636586 0 0.771206 -0.636586 0 0.771206 -0.719572 0 0.694418 -0.719572 0 0.694418 -0.719572 0 0.694418 -0.719572 0 0.694418 -0.79336 0 0.608753 -0.79336 0 0.608753 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.874633 0 -0.484787 -0.484787 0 0.874633 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 -0.874633 0 -0.484787 0 -1 0 0.0653401 0 -0.997863 -0.874633 0 -0.484787 0 1 0 0.0653401 0 -0.997863 0 -1 0 0 1 0 0.12186 0 0.992547 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.12186 0 -0.992547 0 -1 0 0 -1 0 0 -1 0 0.258797 0 0.965932 0.996697 -0.000671407 -0.0812098 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.484787 0 0.874633 0 -1 0 0.997205 0.000488296 -0.0747093 -0.484787 0 0.874633 0 1 0 0 -1 0 0.997478 -0.00186163 -0.0709555 -0.484787 0 0.874633 0 -1 0 -0.484787 0 0.874633 0 1 0 -0.681997 0 -0.731355 0 -1 0 0 -1 0 0.281869 0 -0.959453 0 -1 0 -0.906321 0 0.42259 0 -1 0 0 -1 0 0 -1 0 -0.981629 0 -0.190802 0 1 0 0.522904 0 0.852391 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 0 1 0 0.9987 0 -0.0509659 0 1 0 0 1 0 0 1 0 0 -1 0 0.801352 0 0.598193 0 -1 0 6.1037e-005 1 0 0.9987 0 -0.0509659 -0.965932 0 0.258797 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.874633 0 0.484787 0 -1 0 0.484787 0 -0.874633 0.9987 0 -0.0509659 0 -1 0 0 -1 0 0 -1 0 0.99741 0 -0.0719321 0.9987 0 -0.0509659 -0.874633 0 -0.484787 -0.484787 0 0.874633 0.981629 0 0.190802 0.981629 0 0.190802 0.906321 0 -0.42259 0.906321 0 -0.42259 0.681997 0 0.731355 0.681997 0 0.731355 0.484787 0 -0.874633 0.484787 0 -0.874633 0.12186 0 0.992547 -0.12186 0 -0.992547 0.258797 0 0.965932 0.996697 -0.000671407 -0.0812098 0.301309 0 0.953526 0.997298 -0.000274667 -0.0734581 0.301309 0 0.953526 0.997478 -0.00186163 -0.0709555 -0.484787 0 0.874633 0.997576 -9.15555e-005 -0.0695822 -0.681997 0 -0.731355 0.499985 0 0.866034 0.499985 0 0.866034 0.281869 0 -0.959453 -0.906321 0 0.42259 -0.981629 0 -0.190802 0.522904 0 0.852391 0.866034 0 0.499985 0.866034 0 0.499985 0 0.275613 0.961269 0.965932 0 -0.258797 0 0.275613 0.961269 0.965932 0 -0.258797 1 0 0 0 1 0 -0.866034 0 0.499985 0 0.275613 0.961269 -0.866034 0 0.499985 0 0.275613 0.961269 0 1 0 0.801352 0 0.598193 -0.965932 0 0.258797 -1 0 0 0.719365 0 0.694632 -1 0 0 6.1037e-005 1 0 0.719365 0 0.694632 6.1037e-005 1 0 0.874633 0 0.484787 0 1 0 0.484787 0 -0.874633 6.1037e-005 1 0 0.9987 0 -0.0509659 0 1 0 0.990359 0 0.138524 6.1037e-005 1 0 0.999968 0 0.00805689 0 -1 0 0 -1 0 0 1 0 0 -1 0 0 1 0 0.9987 -1.35347e-006 -0.0509778 1.56418e-005 -1 -2.34426e-005 -0.874633 0 -0.484787 0 1 0 0 -1 0 0.000274667 0 1 0.484787 0 -0.874633 -0.251381 0 0.967888 0.838674 0 -0.544633 -0.874633 0 -0.484787 0 -1 0 0.838674 0 -0.544633 -0.874633 0 -0.484787 0 1 0 0.838674 0 -0.544633 0 -1 0 0.000274667 0 1 0.838674 0 -0.544633 0 1 0 0.907752 0 0.419507 -0.997859 0 0.0654012 -0.997859 0 0.0654012 -0.970296 0 -0.24192 -0.970296 0 -0.24192 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.936675 0 -0.3502 0.438368 0 -0.898796 -0.936675 0 -0.3502 0.438368 0 -0.898796 -0.776402 0 0.630238 -0.499985 0 -0.866034 -0.776402 0 0.630238 -0.499985 0 -0.866034 -0.496658 0 0.867946 -0.496658 0 0.867946 -0.996857 0 0.079226 -0.301309 0 -0.953526 -0.996857 0 0.079226 -0.301309 0 -0.953526 -0.996869 0 0.0790735 -0.996869 0 0.0790735 -0.996857 0 0.079226 -0.251381 0 0.967888 -0.996857 0 0.079226 0.000274667 0 1 -0.996869 0 0.0790735 -0.499985 0 -0.866034 -0.996869 0 0.0790735 -0.499985 0 -0.866034 -0.862285 0 -0.506424 0.438368 0 -0.898796 -0.862285 0 -0.506424 0.438368 0 -0.898796 -0.655141 0 0.755507 -0.655141 0 0.755507 -0.804636 0 -0.593768 -0.738173 0 -0.674612 0 -1 0 0.484787 0 -0.874633 -0.862285 0 -0.506424 0.484787 0 -0.874633 -0.522904 0 -0.852391 -0.522904 0 -0.852391 -0.626423 0 -0.779483 -0.626423 0 -0.779483 0 -1 0 -0.801352 0 -0.598193 -0.801352 0 -0.598193 -0.34962 0 0.936892 -0.34962 0 0.936892 0.484787 0 -0.874633 0 -1 0 0.484787 0 -0.874633 -0.344401 0 -0.938823 -0.344401 0 -0.938823 0 -1 0 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0.168615 0 -0.985682 -0.178655 0 -0.983912 0 -1 0 -0.00509659 0 -0.999987 0 0 1 0 0 1 0.0841395 -0.259743 -0.962005 0.0841395 -0.259743 -0.962005 0.329997 -0.26252 -0.906744 0.329997 -0.26252 -0.906744 0.33961 0 -0.940566 0.33961 0 -0.940566 0.31315 0 0.949704 0.31315 0 0.949704 0.620228 -0.26252 -0.739189 0.662618 0 0.748958 0.838674 0 -0.544633 0.662618 0 0.748958 0.838674 0 -0.544633 0.620228 -0.26252 -0.739189 0.827277 -0.261818 -0.497055 0.642781 0 -0.76605 0.642781 0 -0.76605 -0.374584 0 -0.927193 0.895603 -0.258797 -0.361827 0.446181 0 0.894943 0.838674 0 -0.544633 0.446181 0 0.894943 0.838674 0 -0.544633 0.827277 -0.261818 -0.497055 0.761511 0 0.648152 0.761511 0 0.648152 -0.374584 0 -0.927193 0.895603 -0.258797 -0.361827 0.838674 0 -0.544633 0.838674 0 -0.544633 0.845226 0 0.53441 0.000274667 0 1 0.954743 0 0.297433 -0.374584 0 -0.927193 0.961269 0 -0.275613 -0.374584 0 -0.927193 0.898796 0 -0.438368 0.933588 0 -0.358348 0.988621 0 0.150426 0.988621 0 0.150426 0.990269 0 -0.139164 0.990269 0 -0.139164 1.95001e-006 -1 -5.15363e-006 0 -1 0 -0.87462 4.51139e-006 -0.48481 0 -1 0 0 -1 0 -1.97104e-006 1 -7.261e-007 0.838672 3.52842e-006 -0.544636 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0 1 0 0 1 0 0 1 0 0 1 1 0 0 1 0 0 1 0 0 1 0 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.484787 0 0.874633 -0.484787 0 0.874633 0.12186 0 0.992547 0.12186 0 0.992547 0.12186 0 0.992547 0.12186 0 0.992547 0.681997 0 0.731355 0.681997 0 0.731355 0.681997 0 0.731355 0.681997 0 0.731355 0.981629 0 0.190802 0.981629 0 0.190802 0.981629 0 0.190802 0.981629 0 0.190802 0.906321 0 -0.42259 0.906321 0 -0.42259 0.906321 0 -0.42259 0.906321 0 -0.42259 0.484787 0 -0.874633 0.484787 0 -0.874633 0.484787 0 -0.874633 0.484787 0 -0.874633 -0.12186 0 -0.992547 -0.12186 0 -0.992547 -0.12186 0 -0.992547 -0.12186 0 -0.992547 -0.681997 0 -0.731355 -0.681997 0 -0.731355 -0.681997 0 -0.731355 -0.681997 0 -0.731355 -0.981629 0 -0.190802 -0.981629 0 -0.190802 -0.981629 0 -0.190802 -0.981629 0 -0.190802 -0.906321 0 0.42259 -0.906321 0 0.42259 -0.906321 0 0.42259 -0.906321 0 0.42259 -0.484787 0 0.874633 -0.484787 0 0.874633 1.34949e-006 -1 -9.70852e-007 1.34949e-006 1 9.70854e-007 -0.984813 0 -0.17362 0 1 0 -0.984813 0 0.17362 0 1 0 0 1 0 -0.866034 0 -0.499985 0 1 0 -0.866034 0 0.499985 0 1 0 0 1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 -1 0 0.642781 0 0.76605 0 1 0 0.642781 0 0.76605 0 1 0 0.642781 0 -0.76605 0 1 0 0 1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0.34199 0 0.939703 0 1 0 0.34199 0 0.939703 0 1 0 0.34199 0 -0.939703 0 1 0 0 1 0 0 -1 0 0 -1 0 -0.34199 0 0.939703 0 -1 0 -0.34199 0 -0.939703 0 -1 0 -0.34199 0 0.939703 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 -1 0 -0.642781 0 0.76605 0 -1 0 0 -1 0 -0.642781 0 0.76605 0 1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0.866034 0 -0.499985 0 -1 0 0.866034 0 0.499985 0 -1 0 0.984813 0 -0.17362 0 -1 0 0.984813 0 0.17362 0 -1 0 -0.984813 0 -0.17362 0 -1 0 -0.984813 0 0.17362 0 -1 0 -0.866034 0 -0.499985 0 -1 0 -0.866034 0 0.499985 0 -1 0 0 -1 0 0 -1 0 0.984813 0 0.17362 0.984813 0 -0.17362 0.984813 0 0.17362 0.984813 0 -0.17362 -0.642781 0 -0.76605 -0.642781 0 0.76605 -0.642781 0 -0.76605 -0.642781 0 0.76605 0.866034 0 0.499985 0.866034 0 -0.499985 0.866034 0 0.499985 0.866034 0 -0.499985 0 1 0 0 -1 0 0 -1 0 0.642781 0 -0.76605 -0.34199 0 -0.939703 0 -1 0 -0.34199 0 0.939703 0 -1 0 -0.34199 0 -0.939703 0 1 0 -0.34199 0 0.939703 0 1 0 0.34199 0 -0.939703 0 -1 0 0 0 -1 0 0 1 0 0 -1 0 -1 0 0 0 1 0 1 0 0 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 -0.34199 0 -0.939703 0 -1 0 0.34199 0 -0.939703 0 -1 0 0.34199 0 0.939703 0 1 0 0.34199 0 -0.939703 0 1 0 0.34199 0 0.939703 -0.642781 0 -0.76605 -0.642781 0 -0.76605 0 1 0 -0.866034 0 0.499985 -0.866034 0 -0.499985 -0.866034 0 0.499985 -0.866034 0 -0.499985 0.642781 0 -0.76605 0.642781 0 0.76605 0.642781 0 -0.76605 0.642781 0 0.76605 -0.984813 0 0.17362 -0.984813 0 -0.17362 -0.984813 0 0.17362 -0.984813 0 -0.17362 0 1 0 0 1 0 0.866034 0 -0.499985 0 1 0 0.866034 0 0.499985 0 1 0 0.984813 0 -0.17362 0 1 0 0.984813 0 0.17362 4.11789e-007 1 -1.38427e-007 -7.86508e-007 1 2.08165e-006 4.11791e-007 -1 1.38427e-007 -7.86508e-007 -1 -2.08165e-006 7.35529e-008 1 2.09463e-006 7.35531e-008 -1 -2.09463e-006 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 -0.996722 0 0.0809046 -0.996722 0 0.0809046 -0.996722 0 0.0809046 -0.996722 0 0.0809046 -0.000274667 0 -1 -0.000274667 0 -1 -0.000274667 0 -1 -0.000274667 0 -1 0.996717 0 0.0809656 0.996717 0 0.0809656 0.996717 0 0.0809656 0.996717 0 0.0809656 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.95257 -0.287118 -0.100864 -0.836732 -0.543382 0.0679342 0 -0.275613 -0.961269 -0.836732 -0.543382 0.0679342 0 1 0 -0.965932 0 -0.258797 0 -0.275613 -0.961269 0 1 0 0.866052 0 -0.499954 0 -0.275613 -0.961269 0 1 0 1 0 0 0 1 0 1 0 0 -0.836732 0.543382 -0.0679342 0 1 0 0 1 0 0 1 0 0.836732 -0.543382 0.0679342 0 -0.275613 -0.961269 0 -1 0 0.836732 -0.543382 0.0679342 -0.836732 0.543382 -0.0679342 0 -0.275613 -0.961269 0 1 0 0.836732 -0.543382 0.0679342 -0.258797 0 -0.965932 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.925702 -0.300607 -0.229591 -0.866034 0 -0.499985 -0.965932 0 -0.258797 0 -0.185339 -0.982675 0 0 -1 0 -1 0 0 0 1 0.965932 0 -0.258797 0.965932 0 -0.258797 -0.000244148 0 -1 0 1 0 0.958321 0.283486 -0.035432 -0.000244148 0 -1 0.958321 0.283486 -0.035432 -0.000244148 0 -1 0 1 0 0.836732 0.543382 -0.0679342 0 -1 0 0 0 1 0 -1 0 0 0 1 -0.000244148 0 -1 -0.836732 0.543382 -0.0679342 0 1 0 0 0 1 0 0 -1 0 -0.185339 -0.982675 -0.836732 0.543382 -0.0679342 -0.000244148 0 -1 0.836722 -0.543397 0.0679355 -0.836722 -0.543397 0.0679398 -4.52844e-008 1 -4.09305e-008 -4.97948e-007 -0.275638 -0.961262 -0.965866 0 -0.259041 0 -1 0 0.00021363 -0.275643 -0.96126 0 1 0 0.00021363 -0.275643 -0.96126 -0.996739 0 0.0806909 -0.00021363 0 1 0 -1 0 -0.996739 0 0.0806909 -0.00021363 0 1 0 1 0 -0.00021363 0 1 0 -1 0 0.996702 0 0.0811487 -0.00021363 0 1 0 1 0 0.996702 0 0.0811487 0 -1 0 0.00021363 -0.275613 -0.961269 0.996702 0 0.0811487 0 1 0 0.00021363 -0.275613 -0.961269 0.996702 0 0.0811487 -0.996739 0 0.0806909 -0.258583 0 -0.965989 0 -1 0 -0.996739 0 0.0806909 -0.258583 0 -0.965989 0 1 0 0.866158 0 -0.499771 0 -1 0 0 0 -1 1 0 0.00021363 0 0 -1 0 1 0 1 0 0.00021363 -0.996697 0 -0.0812098 0 -1 0 0 0 -1 -0.996697 0 -0.0812098 0 0 -1 0 1 0 -0.499771 0 -0.866158 -0.499771 0 -0.866158 -0.865911 0 -0.500198 -0.865911 0 -0.500198 -0.965989 0 0.258583 -1 0 -0.00021363 -1 0 -0.00021363 0.866158 0 -0.499771 0.965989 0 -0.258583 0.965989 0 -0.258583 -0.996697 0 -0.0812098 0.00021363 -0.275613 -0.961269 -0.996697 0 -0.0812098 0.00021363 -0.275613 -0.961269 0 1 0 -7.36454e-007 -1 3.31419e-008 0.000229157 -0.275663 -0.961254 -0.984764 0 -0.173894 0 -0.998171 0.0604572 0 -1 0 0 -0.998693 0.0511185 0 1 0 0 -0.998171 0.0604572 0 -0.930118 0.36726 0 1 0 -0.34199 0 0.939703 0 1 0 0 0 -1 0 1 0 0 1 0 0 -0.998171 0.0604572 0 -0.930118 0.36726 0 1 0 0 1 0 0 -0.998693 0.0511185 0 1 0 -0.991457 0 0.130436 -0.991457 0 0.130436 -0.999043 0 -0.043733 -0.991417 0 -0.130741 -0.994037 0 -0.109043 0.996197 0 -0.0871303 0.996197 0 -0.0871303 -0.953719 0 0.300699 0.980788 0 -0.195074 0.980788 0 -0.195074 0.991445 0 -0.130528 0.991445 0 -0.130528 0.999049 0 0.0436109 0.980788 0 0.195074 0.980788 0 0.195074 -0.876736 0 0.480972 -0.876736 0 0.480972 0.876736 0 -0.480972 0.876736 0 -0.480972 0.953719 0 -0.300699 0 -0.994773 0.102115 0 0 -1 0 0 -1 0.965891 0 0.25895 0.97302 0 0.23072 0 -0.998693 0.0511185 0.876736 0 -0.480972 0.876736 0 -0.480972 -0.76605 0 0.642781 -0.642781 0 0.76605 -0.642781 0 0.76605 0 -0.994773 0.102115 0 0 -1 0 0 -1 0.642781 0 -0.76605 0.642781 0 -0.76605 0.76605 0 -0.642781 0.642781 0 -0.76605 0.642781 0 -0.76605 -0.34199 0 0.939703 0.342021 0 -0.939692 0.342021 0 -0.939692 0.34199 0 -0.939703 0.34199 0 -0.939703 0 0 -1 0 0 1 0 0 -1 0 0 -1 0 0 1 -0.342021 0 -0.939692 -0.342021 0 -0.939692 -0.342021 0 -0.939692 -0.342021 0 -0.939692 0.34199 0 0.939703 0.34199 0 0.939703 -0.642781 0 -0.76605 -0.642781 0 -0.76605 -0.76605 0 -0.642781 -0.642781 0 -0.76605 -0.642781 0 -0.76605 0 0 -1 0 -0.994773 0.102115 0 0 -1 0.642781 0 0.76605 0.642781 0 0.76605 0.76605 0 0.642781 -0.876736 0 -0.480972 -0.876736 0 -0.480972 0 -0.998693 0.0511185 -0.97302 0 0.23072 -0.965891 0 0.25895 0 0 -1 0 -0.994773 0.102115 0 0 -1 -0.953719 0 -0.300699 -0.876736 0 -0.480972 -0.876736 0 -0.480972 0.876736 0 0.480972 0.876736 0 0.480972 -0.980788 0 0.195074 -0.980788 0 0.195074 -0.999049 0 0.0436109 -0.991449 0 -0.130497 -0.991449 0 -0.130497 -0.980788 0 -0.195074 -0.980788 0 -0.195074 0.953719 0 0.300699 0 -0.998693 0.0511185 -0.996197 0 -0.0871303 -0.996197 0 -0.0871303 0.994037 0 -0.109043 0.991412 0 -0.130772 0.999043 0 -0.043733 0.991457 0 0.130436 0.991457 0 0.130436 -0.984762 -6.54726e-006 -0.173906 0.98476 -1.13783e-005 0.173917 -0.973017 -8.92166e-006 0.230733 0.98476 1.088e-005 -0.173918 1.34962e-006 1 -1.5568e-005 1.4048e-005 1 -1.06865e-005 -1.19427e-005 -0.930111 0.367279 -1.39923e-005 -0.977327 0.211738 -1.42785e-005 -0.977327 0.211737 -1.38461e-005 -0.998169 0.0604802 -1.36424e-005 -0.998169 0.0604811 -8.86043e-006 -0.998692 0.0511222 -7.72303e-006 -1 -1.15183e-005 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.980788 0 0.195074 -0.980788 0 0.195074 -0.876736 0 0.480972 -0.876736 0 0.480972 -0.876736 0 0.480972 -0.876736 0 0.480972 -0.642781 0 0.76605 -0.642781 0 0.76605 -0.642781 0 0.76605 -0.642781 0 0.76605 -0.34199 0 0.939703 -0.34199 0 0.939703 -0.34199 0 0.939703 -0.34199 0 0.939703 0 0 1 0 0 1 0 0 1 0 0 1 0.34199 0 0.939703 0.34199 0 0.939703 0.34199 0 0.939703 0.34199 0 0.939703 0.642781 0 0.76605 0.642781 0 0.76605 0.642781 0 0.76605 0.642781 0 0.76605 0.876736 0 0.480972 0.876736 0 0.480972 0.876736 0 0.480972 0.876736 0 0.480972 0.980788 0 0.195074 0.980788 0 0.195074 0.980788 0 0.195074 0.980788 0 0.195074 0.999043 0 -0.043733 0.999043 0 -0.043733 0.999043 0 -0.043733 0.999043 0 -0.043733 0.984764 0 -0.173894 0.984764 0 -0.173894 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.984764 0 -0.173894 -0.984764 0 -0.173894 -0.999043 0 -0.043733 -0.999043 0 -0.043733 -0.999043 0 -0.043733 -0.999043 0 -0.043733 -0.980788 0 0.195074 -0.980788 0 0.195074 0.835105 0.542314 0.0921659 0.835105 0.542314 0.0921659 0.835105 0.542314 0.0921659 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.847262 0.531175 0 -0.847262 0.531175 0 -0.847262 0.531175 0 -0.847262 0.531175 0 0.994763 -0.102206 0 0.994763 -0.102206 0 0.994763 -0.102206 0 0.994763 -0.102206 -0.835105 -0.542314 -0.0921659 -0.835105 -0.542314 -0.0921659 -0.835105 -0.542314 -0.0921659 -0.835105 0.542314 0.0921659 -0.835105 0.542314 0.0921659 -0.835105 0.542314 0.0921659 0 0.994763 -0.102206 0 0.994763 -0.102206 0 0.994763 -0.102206 0 0.994763 -0.102206 0 -0.847262 0.531175 0 -0.847262 0.531175 0 -0.847262 0.531175 0 -0.847262 0.531175 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0.835105 -0.542314 -0.0921659 0.835105 -0.542314 -0.0921659 0.835105 -0.542314 -0.0921659 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0.587756 -0.809038 0 0.587756 -0.809038 0 0.587756 -0.809038 0 0.587756 -0.809038 0 0.951062 -0.309 0 0.951062 -0.309 0 0.951062 -0.309 0 0.951062 -0.309 0 0.951062 0.309 0 0.951062 0.309 0 0.951062 0.309 0 0.951062 0.309 0 0.587756 0.809038 0 0.587756 0.809038 0 0.587756 0.809038 0 0.587756 0.809038 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.587786 0.809016 0 -0.587786 0.809016 0 -0.587786 0.809016 0 -0.587786 0.809016 0 -0.951062 0.309 0 -0.951062 0.309 0 -0.951062 0.309 0 -0.951062 0.309 0 -0.951062 -0.309 0 -0.951062 -0.309 0 -0.951062 -0.309 0 -0.951062 -0.309 0 -0.587756 -0.809038 0 -0.587756 -0.809038 0 -0.587756 -0.809038 0 -0.587756 -0.809038 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 + + + + + + + + + + + + + + +

0 0 1 1 2 2 3 3

+

4 4 5 5 6 6 7 7

+

8 8 9 9 10 10 11 11

+

12 12 13 13 14 14 15 15

+

16 16 17 17 18 18 19 19

+

20 20 21 21 22 22 23 23

+
+ + + +

24 24 25 24 26 24 27 24 28 24

+
+ + + +

29 25 30 25 31 25 32 25

+
+ + + +

33 26 34 26 35 26 36 26 37 26

+

38 26 39 26 40 26 41 26 42 26

+

43 26 44 26 45 26 46 26

+
+ + + +

47 27 48 27 49 27 50 27

+
+ + + +

51 28 52 28 53 28 54 28

+

55 28 56 28 57 28 58 28 59 28 60 28

+

61 28 62 28 63 28 64 28

+
+ + + +

116 179 119 179 121 179

+
+ + + +

190 179 133 179 130 179 128 179

+

146 179 153 179 157 179 154 179 147 179

+

149 179 201 179 199 179 147 179 154 179

+

147 179 199 179 196 179 146 179

+

146 179 196 179 190 179 127 179

+

129 179 123 179 122 179 128 179

+

128 179 122 179 121 179 119 179 127 179 190 179

+
+ + + +

168 180 100 180 112 180 94 180 101 180 102 180 162 180 77 180 160 180

+
+ + + +

99 180 118 180 152 180 153 180 116 180 112 180 100 180

+

168 180 164 180 76 180 215 180 81 180 99 180 100 180

+

77 180 76 180 164 180 160 180

+

78 180 166 180 94 180 102 180

+

78 180 77 180 162 180 166 180

+
+ + + +

183 181 137 181 182 181 73 181 72 181 71 181 87 181 90 181 89 181 163 181 161 181 74 181

+
+ + + +

90 181 114 181 136 181 135 181 181 181 88 181

+

137 181 136 181 114 181 182 181

+

138 181 137 181 183 181 178 181

+

138 181 178 181 169 181 91 181

+

75 181 91 181 169 181 167 181

+

75 181 167 181 163 181 74 181 68 181 67 181 70 181

+

73 181 165 181 87 181 89 181 88 181 84 181 72 181

+

161 181 165 181 73 181 71 181 68 181 74 181

+
+ + + +

85 182 103 182 98 182

+
+ + + +

106 182 69 182 85 182 98 182

+
+ + + +

92 183 110 183 175 183

+
+ + + +

70 183 92 183 175 183 126 183 192 183 138 183

+
+ + + +

210 184 214 184 157 184 208 184 212 184 210 184

+
+ + + +

210 184 157 184 152 184 208 184

+
+ + + +

191 185 188 185 194 185

+
+ + + +

184 185 173 185 171 185 180 185

+

140 185 184 185 180 185 186 185

+

194 185 145 185 143 185 140 185 186 185 191 185

+
+ + + +

173 137 177 141 106 70

+
+ + + +

142 106 203 167 205 169 213 177 209 173

+

156 120 214 178 206 170 149 113

+

204 168 201 165 149 113 206 170

+

199 163 200 164 202 166 144 108

+

144 108 193 157 195 159 199 163

+

189 153 196 160 194 158 187 151

+

133 97 190 154 188 152 191 155

+

185 149 133 97 191 155 186 150

+

179 143 185 149 186 150 180 144

+

97 61 179 143 180 144 170 134

+

106 70 98 62 171 135 173 137

+

134 98 192 156 197 161 211 175 207 171

+

140 104 210 174 212 176 198 162

+

184 148 140 104 198 162 126 90

+

172 136 184 148 126 90 174 138

+

118 82 181 145 208 172 151 115

+

81 45 84 48 181 145 118 82

+

158 122 65 29 82 46 79 43

+

107 71 66 30 159 123 104 68 176 140

+

110 74 177 141 173 137 175 139

+
+ + + +

173 137 177 141 106 70

+
+ + + +

142 106 203 167 205 169 213 177 209 173

+

156 120 214 178 206 170 149 113

+

204 168 201 165 149 113 206 170

+

199 163 200 164 202 166 144 108

+

144 108 193 157 195 159 199 163

+

189 153 196 160 194 158 187 151

+

133 97 190 154 188 152 191 155

+

185 149 133 97 191 155 186 150

+

179 143 185 149 186 150 180 144

+

97 61 179 143 180 144 170 134

+

106 70 98 62 171 135 173 137

+

134 98 192 156 197 161 211 175 207 171

+

140 104 210 174 212 176 198 162

+

184 148 140 104 198 162 126 90

+

172 136 184 148 126 90 174 138

+

118 82 181 145 208 172 151 115

+

81 45 84 48 181 145 118 82

+

158 122 65 29 82 46 79 43

+

107 71 66 30 159 123 104 68 176 140

+

110 74 177 141 173 137 175 139

+

93 57 166 130 167 131 169 133

+

115 79 93 57 169 133 178 142

+

124 88 115 79 178 142 183 147

+

120 84 124 88 183 147 182 146

+

111 75 120 84 182 146 113 77

+

168 132 111 75 113 77 87 51

+

164 128 168 132 87 51 165 129

+

160 124 164 128 165 129 161 125

+

162 126 160 124 161 125 163 127

+

166 130 162 126 163 127 167 131

+
+ + + +

259 311 253 311 276 311

+
+ + + +

333 311 339 311 337 311 317 311

+

313 311 317 311 301 311 307 311

+

291 311 299 311 301 311 281 311

+

276 311 281 311 301 311 317 311 337 311 331 311 259 311

+
+ + + +

237 312 241 312 267 312 267 312 275 312 285 312

+
+ + + +

257 312 248 312 239 312 251 312

+

239 312 235 312 237 312 267 312 285 312 282 312 277 312 251 312

+
+ + + +

228 313 225 313 292 313 285 313 292 313 291 313

+
+ + + +

291 313 281 313 282 313 285 313

+

285 313 287 313 228 313 292 313

+
+ + + +

300 314 292 314 225 314

+
+ + + +

328 314 335 314 326 314 322 314

+

315 314 328 314 322 314 312 314

+

303 314 315 314 312 314 302 314

+

225 314 303 314 302 314 300 314

+
+ + + +

268 315 245 315 263 315

+
+ + + +

319 315 305 315 297 315 309 315

+

323 315 309 315 297 315 283 315 268 315 263 315 220 315 329 315

+
+ + + +

261 316 247 316 269 316

+
+ + + +

321 316 311 316 298 316 306 316

+

238 316 249 316 222 316 265 316 243 316 236 316 234 316

+

324 316 233 316 338 316 340 316 336 316 327 316 314 316 304 316 296 316 288 316 278 316 270 316 265 316 222 316 261 316 269 316 284 316 298 316 311 316

+
+ + + +

328 298 327 297 336 306 335 305

+

293 263 296 266 304 274 303 273

+

303 273 304 274 314 284 315 285

+

315 285 314 284 327 297 328 298

+
+ + + +

328 298 327 297 336 306 335 305

+

293 263 296 266 304 274 303 273

+

303 273 304 274 314 284 315 285

+

315 285 314 284 327 297 328 298

+

285 255 275 245 273 243 287 257

+

286 256 272 242 280 250 290 260 295 265

+

271 241 270 240 278 248 279 249

+

279 249 278 248 288 258 289 259

+

289 259 288 258 296 266 294 264

+
+ + + +

328 298 327 297 336 306 335 305

+

293 263 296 266 304 274 303 273

+

303 273 304 274 314 284 315 285

+

315 285 314 284 327 297 328 298

+

285 255 275 245 273 243 287 257

+

286 256 272 242 280 250 290 260 295 265

+

271 241 270 240 278 248 279 249

+

279 249 278 248 288 258 289 259

+

289 259 288 258 296 266 294 264

+

257 227 221 191 249 219 248 218

+

248 218 249 219 238 208 239 209

+

239 209 238 208 234 204 235 205

+

235 205 234 204 236 206 237 207

+

237 207 236 206 242 212 240 210

+

241 211 243 213 265 235 267 237

+

266 236 264 234 270 240 274 244

+
+ + + +

328 317 327 317 336 317 335 317

+

225 317 296 317 304 317 303 317

+

303 317 304 317 314 317 315 317

+

315 317 314 317 327 317 328 317

+

285 317 275 317 273 317 287 317

+

287 317 273 317 280 317 290 317 228 317

+

273 317 270 317 278 317 280 317

+

280 317 278 317 288 317 290 317

+

290 317 288 317 296 317 228 317

+

257 317 222 317 249 317 248 317

+

248 317 249 317 238 317 239 317

+

239 317 238 317 234 317 235 317

+

235 317 234 317 236 317 237 317

+

237 317 236 317 243 317 241 317

+

241 317 243 317 265 317 267 317

+

267 317 265 317 270 317 275 317

+

331 317 329 317 220 317 259 317

+
+ + + +

328 298 327 297 336 306 335 305

+

293 263 296 266 304 274 303 273

+

303 273 304 274 314 284 315 285

+

315 285 314 284 327 297 328 298

+

285 255 275 245 273 243 287 257

+

286 256 272 242 280 250 290 260 295 265

+

271 241 270 240 278 248 279 249

+

279 249 278 248 288 258 289 259

+

289 259 288 258 296 266 294 264

+

257 227 221 191 249 219 248 218

+

248 218 249 219 238 208 239 209

+

239 209 238 208 234 204 235 205

+

235 205 234 204 236 206 237 207

+

237 207 236 206 242 212 240 210

+

241 211 243 213 265 235 267 237

+

266 236 264 234 270 240 274 244

+

330 300 230 200 219 189 259 229

+

333 303 336 306 340 310 339 309

+

339 309 340 310 338 308 337 307

+

337 307 338 308 233 203 331 301

+
+ + + +

328 298 327 297 336 306 335 305

+

293 263 296 266 304 274 303 273

+

303 273 304 274 314 284 315 285

+

315 285 314 284 327 297 328 298

+

285 255 275 245 273 243 287 257

+

286 256 272 242 280 250 290 260 295 265

+

271 241 270 240 278 248 279 249

+

279 249 278 248 288 258 289 259

+

289 259 288 258 296 266 294 264

+

257 227 221 191 249 219 248 218

+

248 218 249 219 238 208 239 209

+

239 209 238 208 234 204 235 205

+

235 205 234 204 236 206 237 207

+

237 207 236 206 242 212 240 210

+

241 211 243 213 265 235 267 237

+

266 236 264 234 270 240 274 244

+

330 300 230 200 219 189 259 229

+

333 303 336 306 340 310 339 309

+

339 309 340 310 338 308 337 307

+

337 307 338 308 233 203 331 301

+

252 222 258 228 256 226 250 220

+

276 246 253 223 251 221 277 247

+

281 251 276 246 277 247 282 252

+
+ + + +

328 298 327 297 336 306 335 305

+

293 263 296 266 304 274 303 273

+

303 273 304 274 314 284 315 285

+

315 285 314 284 327 297 328 298

+

285 255 275 245 273 243 287 257

+

286 256 272 242 280 250 290 260 295 265

+

271 241 270 240 278 248 279 249

+

279 249 278 248 288 258 289 259

+

289 259 288 258 296 266 294 264

+

257 227 221 191 249 219 248 218

+

248 218 249 219 238 208 239 209

+

239 209 238 208 234 204 235 205

+

235 205 234 204 236 206 237 207

+

237 207 236 206 242 212 240 210

+

241 211 243 213 265 235 267 237

+

266 236 264 234 270 240 274 244

+

330 300 230 200 219 189 259 229

+

333 303 336 306 340 310 339 309

+

339 309 340 310 338 308 337 307

+

337 307 338 308 233 203 331 301

+

252 222 258 228 256 226 250 220

+

276 246 253 223 251 221 277 247

+

281 251 276 246 277 247 282 252

+

291 261 292 262 300 270 299 269

+

299 269 300 270 302 272 301 271

+

301 271 302 272 312 282 307 277

+

307 277 312 282 322 292 313 283

+

313 283 322 292 326 296 317 287

+

316 286 325 295 334 304 332 302

+
+ + + +

328 298 327 297 336 306 335 305

+

293 263 296 266 304 274 303 273

+

303 273 304 274 314 284 315 285

+

315 285 314 284 327 297 328 298

+

285 255 275 245 273 243 287 257

+

286 256 272 242 280 250 290 260 295 265

+

271 241 270 240 278 248 279 249

+

279 249 278 248 288 258 289 259

+

289 259 288 258 296 266 294 264

+

257 227 221 191 249 219 248 218

+

248 218 249 219 238 208 239 209

+

239 209 238 208 234 204 235 205

+

235 205 234 204 236 206 237 207

+

237 207 236 206 242 212 240 210

+

241 211 243 213 265 235 267 237

+

266 236 264 234 270 240 274 244

+

330 300 230 200 219 189 259 229

+

333 303 336 306 340 310 339 309

+

339 309 340 310 338 308 337 307

+

337 307 338 308 233 203 331 301

+

252 222 258 228 256 226 250 220

+

276 246 253 223 251 221 277 247

+

281 251 276 246 277 247 282 252

+

291 261 292 262 300 270 299 269

+

299 269 300 270 302 272 301 271

+

301 271 302 272 312 282 307 277

+

307 277 312 282 322 292 313 283

+

313 283 322 292 326 296 317 287

+

316 286 325 295 334 304 332 302

+

262 232 260 230 255 225 254 224

+

329 299 233 203 324 294 323 293

+

323 293 324 294 310 280 308 278

+

309 279 311 281 321 291 319 289

+

318 288 320 290 306 276 305 275

+

305 275 306 276 298 268 297 267

+

297 267 298 268 284 254 283 253

+

283 253 284 254 269 239 268 238

+

268 238 269 239 246 216 244 214

+

245 215 247 217 261 231 263 233

+
+ + + +

341 318 342 319 343 320 344 321

+

345 322 346 323 347 324 348 325

+

349 326 350 327 351 328 352 329

+

353 330 354 331 355 332 356 333

+

357 334 358 335 359 336 360 337

+

361 338 362 339 363 340 364 341

+
+ + + +

365 342 366 343 367 344 368 345 369 346 370 347 371 348 372 349 373 350 374 351

+

375 352 376 353 377 354 378 355 379 356 380 357 381 358 382 359 383 360 384 361

+

385 362 386 363 387 364 388 365

+

389 366 390 367 391 368 392 369

+

393 370 394 371 395 372 396 373

+

397 374 398 375 399 376 400 377

+

401 378 402 379 403 380 404 381

+

405 382 406 383 407 384 408 385

+

409 386 410 387 411 388 412 389

+

413 390 414 391 415 392 416 393

+

417 394 418 395 419 396 420 397

+

421 398 422 399 423 400 424 401

+
+ + + +

425 402 426 402 427 402 428 402

+
+ + + +

429 403 430 403 431 403 432 403

+
+ + + +

551 589 550 589 447 589 453 589 469 589 467 589 467 589 559 589 453 589 465 589 472 589 452 589 465 589 452 589 558 589

+
+ + + +

441 589 442 589 453 589 559 589 551 589 447 589 437 589 436 589

+

434 589 437 589 447 589 550 589 558 589 452 589 446 589 439 589

+
+ + + +

510 590 500 590 506 590 600 590 595 590 511 590 608 590 519 590 607 590 599 590 510 590 506 590

+
+ + + +

474 590 482 590 469 590 442 590 555 590 560 590

+

582 590 482 590 474 590 484 590

+

484 590 494 590 585 590 582 590

+

595 590 585 590 494 590 513 590 511 590

+

519 590 608 590 600 590 511 590 521 590

+

607 590 519 590 518 590 510 590 599 590

+
+ + + +

606 591 605 591 522 591 516 591 501 591 504 591 504 591 598 591 516 591 503 591 498 591 515 591 503 591 515 591 597 591

+
+ + + +

532 591 528 591 516 591 598 591 606 591 522 591 537 591 536 591

+

534 591 537 591 522 591 605 591 597 591 515 591 524 591 530 591

+
+ + + +

455 592 471 592 463 592 557 592 563 592 456 592 549 592 449 592 548 592 556 592 455 592 463 592

+
+ + + +

496 592 490 592 501 592 528 592 602 592 514 592

+

576 592 490 592 496 592 486 592

+

486 592 476 592 572 592 576 592

+

563 592 572 592 476 592 458 592 456 592

+

449 592 549 592 557 592 456 592 451 592

+

548 592 449 592 547 592 455 592 556 592

+
+ + + +

472 593 480 593 473 593 461 593 554 593 446 593

+

526 593 603 593 509 593 493 593 492 593 500 593

+

493 593 483 593 581 593 492 593

+

581 593 483 593 473 593 480 593

+
+ + + +

498 594 488 594 495 594 508 594 601 594 524 594

+

444 594 552 594 459 594 475 594 478 594 471 594

+

475 594 485 594 575 594 478 594

+

575 594 485 594 495 594 488 594

+
+ + + +

543 514 444 415 547 518 451 422 546 517 545 516 541 512 539 510

+

569 540 461 432 509 480 590 561 579 550

+

586 557 507 478 562 533 565 536 573 544

+

610 581 526 497 518 489 521 492 609 580 612 583 616 587 614 585

+

560 531 571 542 583 554 592 563 596 567 513 484

+

514 485 588 559 577 548 567 538 561 532 458 429

+

584 555 578 549 589 560 593 564

+

593 564 589 560 602 573 604 575

+

604 575 602 573 532 503 613 584

+

613 584 532 503 536 507 617 588

+

617 588 536 507 534 505 615 586

+

615 586 534 505 530 501 611 582

+

611 582 530 501 601 572 603 574

+

603 574 601 572 587 558 591 562

+

591 562 587 558 574 545 580 551

+

580 551 574 545 564 535 568 539

+

568 539 564 535 552 523 554 525

+

554 525 552 523 542 513 438 409

+

438 409 542 513 538 509 433 404

+

433 404 538 509 540 511 435 406

+

435 406 540 511 544 515 440 411

+

440 411 544 515 553 524 555 526

+

555 526 553 524 566 537 570 541

+

570 541 566 537 578 549 584 555

+
+ + + +

543 514 444 415 547 518 451 422 546 517 545 516 541 512 539 510

+

569 540 461 432 509 480 590 561 579 550

+

586 557 507 478 562 533 565 536 573 544

+

610 581 526 497 518 489 521 492 609 580 612 583 616 587 614 585

+

560 531 571 542 583 554 592 563 596 567 513 484

+

514 485 588 559 577 548 567 538 561 532 458 429

+

584 555 578 549 589 560 593 564

+

593 564 589 560 602 573 604 575

+

604 575 602 573 532 503 613 584

+

613 584 532 503 536 507 617 588

+

617 588 536 507 534 505 615 586

+

615 586 534 505 530 501 611 582

+

611 582 530 501 601 572 603 574

+

603 574 601 572 587 558 591 562

+

591 562 587 558 574 545 580 551

+

580 551 574 545 564 535 568 539

+

568 539 564 535 552 523 554 525

+

554 525 552 523 542 513 438 409

+

438 409 542 513 538 509 433 404

+

433 404 538 509 540 511 435 406

+

435 406 540 511 544 515 440 411

+

440 411 544 515 553 524 555 526

+

555 526 553 524 566 537 570 541

+

570 541 566 537 578 549 584 555

+

482 453 572 543 563 534 467 438

+

467 438 563 534 557 528 559 530

+

559 530 557 528 549 520 551 522

+

551 522 549 520 548 519 550 521

+

550 521 548 519 556 527 558 529

+

558 529 556 527 463 434 465 436

+

465 436 463 434 478 449 480 451

+

480 451 478 449 575 546 581 552

+

581 552 575 546 487 458 491 462

+

491 462 487 458 502 473 505 476

+

505 476 502 473 597 568 599 570

+

599 570 597 568 605 576 607 578

+

607 578 605 576 606 577 608 579

+

608 579 606 577 598 569 600 571

+

600 571 598 569 594 565 595 566

+

595 566 594 565 489 460 585 556

+

585 556 489 460 576 547 582 553

+

582 553 576 547 572 543 482 453

+
+ + + +

618 595 619 596 620 597 621 598

+

622 599 623 600 624 601 625 602

+

626 603 627 604 628 605 629 606

+

630 607 631 608 632 609 633 610

+

634 611 635 612 636 613 637 614

+

638 615 639 616 640 617 641 618

+
+ + + +

698 678 701 678 660 678

+
+ + + +

660 678 692 678 663 678 698 678

+
+ + + +

678 679 668 679 669 679 673 679 644 679 675 679

+
+ + + +

690 679 678 679 669 679 673 679 675 679 677 679

+
+ + + +

650 680 674 680 671 680

+
+ + + +

667 680 700 680 660 680 701 680

+

678 680 660 680 700 680 655 680

+

670 680 668 680 678 680 655 680

+

671 680 670 680 655 680 679 680 650 680

+
+ + + +

695 681 667 681 701 681 698 681

+

675 681 644 681 674 681 650 681 680 681 653 681

+

698 681 675 681 653 681 695 681

+
+ + + +

670 647 669 646 668 645

+
+ + + +

674 651 642 619 672 649 671 648

+

671 648 673 650 669 646 670 647

+
+ + + +

670 647 669 646 668 645 685 662 688 665 683 660 679 656 680 657 650 627

+
+ + + +

674 651 642 619 672 649 671 648

+

671 648 673 650 669 646 670 647

+

699 676 664 641 694 671 656 633

+

658 635 695 672 652 629 682 659 687 664

+

693 670 686 663 684 661 681 658 700 677

+

655 632 685 662 683 660 653 630 680 657 679 656

+
+ + + +

670 647 669 646 668 645 685 662 688 665 683 660 679 656 680 657 650 627

+
+ + + +

674 651 642 619 672 649 671 648

+

671 648 673 650 669 646 670 647

+

699 676 664 641 694 671 656 633

+

658 635 695 672 652 629 682 659 687 664

+

693 670 686 663 684 661 681 658 700 677

+

655 632 685 662 683 660 653 630 680 657 679 656

+

698 675 697 674 676 653 675 652

+

677 654 662 639 691 668 689 666

+

678 655 690 667 692 669 696 673

+
+ + + +

731 738 748 738 750 738

+
+ + + +

757 738 743 738 718 738 724 738

+

712 738 718 738 743 738 737 738

+

745 738 730 738 712 738 737 738

+

747 738 745 738 737 738 753 738

+

753 738 731 738 750 738 747 738

+
+ + + +

746 739 704 739 751 739

+
+ + + +

755 739 721 739 715 739 740 739

+

715 739 709 739 734 739 740 739

+

744 739 734 739 709 739 727 739

+

734 739 744 739 746 739 751 739 752 739

+
+ + + +

751 740 704 740 749 740

+
+ + + +

749 740 748 740 731 740 751 740

+
+ + + +

748 728 749 729 750 730

+
+ + + +

731 711 753 733 752 732 751 731

+

737 717 734 714 752 732 753 733

+

742 722 740 720 733 713 735 715

+

756 736 754 734 738 718 741 721

+

723 703 720 700 755 735 757 737

+

724 704 718 698 715 695 721 701

+

711 691 708 688 713 693 716 696

+

728 708 725 705 707 687 710 690

+

745 725 744 724 726 706 729 709

+

747 727 746 726 744 724 745 725

+

750 730 749 729 702 682 746 726 747 727

+
+ + + +

780 855 783 855 782 855

+
+ + + +

782 855 799 855 798 855 762 855

+

759 855 780 855 782 855 762 855

+
+ + + +

801 856 800 856 802 856

+
+ + + +

802 856 809 856 810 856 801 856

+
+ + + +

845 857 847 857 846 857

+
+ + + +

846 857 837 857 839 857 845 857

+
+ + + +

864 858 865 858 868 858

+
+ + + +

865 858 866 858 867 858 868 858

+

864 858 850 858 848 858 865 858

+
+ + + +

786 859 783 859 780 859 777 859

+

870 859 867 859 866 859 862 859

+

854 859 870 859 862 859 853 859

+

840 859 854 859 853 859 836 859

+

830 859 840 859 836 859 829 859

+

822 859 830 859 829 859 770 859

+

767 859 822 859 770 859 818 859

+

806 859 767 859 818 859 812 859

+

792 859 806 859 812 859 795 859

+

777 859 792 859 795 859 786 859

+
+ + + +

790 860 801 860 810 860 799 860 782 860

+

865 860 848 860 837 860 846 860 856 860

+

861 860 865 860 856 860 859 860

+

852 860 861 860 859 860 843 860

+

835 860 852 860 843 860 832 860

+

828 860 835 860 832 860 826 860

+

821 860 828 860 826 860 823 860

+

817 860 821 860 823 860 819 860

+

811 860 817 860 819 860 814 860

+

794 860 811 860 814 860 803 860

+

785 860 794 860 803 860 787 860

+

782 860 785 860 787 860 790 860

+
+ + + +

833 861 834 861 842 861 841 861

+

807 861 805 861 813 861 815 861

+

816 861 807 861 815 861 820 861

+

825 861 816 861 820 861 824 861

+

831 861 825 861 824 861 827 861

+

841 861 831 861 827 861 833 861

+
+ + + +

804 862 813 862 805 862 765 862

+

765 862 784 862 796 862 804 862

+
+ + + +

844 863 851 863 863 863 855 863

+

855 863 842 863 834 863 844 863

+
+ + + +

788 864 796 864 784 864 778 864

+

778 864 779 864 789 864 788 864

+
+ + + +

860 865 858 865 869 865 871 865

+

871 865 863 865 851 865 860 865

+
+ + + +

864 866 868 866 857 866 847 866 845 866

+

868 866 869 866 858 866 857 866

+
+ + + +

791 867 760 867 762 867 802 867 800 867

+

789 867 779 867 759 867 760 867 791 867

+
+ + + +

779 762 778 761 777 760 780 763 781 764

+

784 767 793 776 792 775 777 760 778 761

+

805 788 807 790 806 789 792 775 793 776

+

869 852 868 851 867 850 870 853 871 854

+

863 846 871 854 870 853 854 837 855 838

+

842 825 855 838 854 837 840 823 841 824

+

841 824 840 823 830 813 831 814

+

831 814 830 813 822 805 825 808

+

825 808 822 805 766 749 816 799

+

816 799 766 749 806 789 807 790

+
+ + + +

779 762 778 761 777 760 780 763 781 764

+

784 767 793 776 792 775 777 760 778 761

+

805 788 807 790 806 789 792 775 793 776

+

869 852 868 851 867 850 870 853 871 854

+

863 846 871 854 870 853 854 837 855 838

+

842 825 855 838 854 837 840 823 841 824

+

841 824 840 823 830 813 831 814

+

831 814 830 813 822 805 825 808

+

825 808 822 805 766 749 816 799

+

816 799 766 749 806 789 807 790

+

800 783 801 784 790 773 791 774

+

789 772 791 774 790 773 787 770 788 771

+

796 779 788 771 787 770 803 786 804 787

+

813 796 804 787 803 786 814 797 815 798

+

815 798 814 797 819 802 820 803

+

820 803 819 802 823 806 824 807

+

824 807 823 806 826 809 827 810

+

827 810 826 809 832 815 833 816

+

834 817 833 816 832 815 843 826 844 827

+

851 834 844 827 843 826 859 842 860 843

+

858 841 860 843 859 842 856 839 857 840

+

857 840 856 839 846 829 847 830

+
+ + + +

779 762 778 761 777 760 780 763 781 764

+

784 767 793 776 792 775 777 760 778 761

+

805 788 807 790 806 789 792 775 793 776

+

869 852 868 851 867 850 870 853 871 854

+

863 846 871 854 870 853 854 837 855 838

+

842 825 855 838 854 837 840 823 841 824

+

841 824 840 823 830 813 831 814

+

831 814 830 813 822 805 825 808

+

825 808 822 805 766 749 816 799

+

816 799 766 749 806 789 807 790

+

800 783 801 784 790 773 791 774

+

789 772 791 774 790 773 787 770 788 771

+

796 779 788 771 787 770 803 786 804 787

+

813 796 804 787 803 786 814 797 815 798

+

815 798 814 797 819 802 820 803

+

820 803 819 802 823 806 824 807

+

824 807 823 806 826 809 827 810

+

827 810 826 809 832 815 833 816

+

834 817 833 816 832 815 843 826 844 827

+

851 834 844 827 843 826 859 842 860 843

+

858 841 860 843 859 842 856 839 857 840

+

857 840 856 839 846 829 847 830

+

785 768 782 765 783 766 786 769

+

794 777 785 768 786 769 795 778

+

811 794 794 777 795 778 812 795

+

817 800 811 794 812 795 818 801

+

821 804 817 800 818 801 768 751

+

828 811 821 804 768 751 829 812

+

835 818 828 811 829 812 836 819

+

852 835 835 818 836 819 853 836

+

861 844 852 835 853 836 862 845

+

865 848 861 844 862 845 866 849

+
+ + + +

779 762 778 761 777 760 780 763 781 764

+

784 767 793 776 792 775 777 760 778 761

+

805 788 807 790 806 789 792 775 793 776

+

869 852 868 851 867 850 870 853 871 854

+

863 846 871 854 870 853 854 837 855 838

+

842 825 855 838 854 837 840 823 841 824

+

841 824 840 823 830 813 831 814

+

831 814 830 813 822 805 825 808

+

825 808 822 805 766 749 816 799

+

816 799 766 749 806 789 807 790

+

800 783 801 784 790 773 791 774

+

789 772 791 774 790 773 787 770 788 771

+

796 779 788 771 787 770 803 786 804 787

+

813 796 804 787 803 786 814 797 815 798

+

815 798 814 797 819 802 820 803

+

820 803 819 802 823 806 824 807

+

824 807 823 806 826 809 827 810

+

827 810 826 809 832 815 833 816

+

834 817 833 816 832 815 843 826 844 827

+

851 834 844 827 843 826 859 842 860 843

+

858 841 860 843 859 842 856 839 857 840

+

857 840 856 839 846 829 847 830

+

785 768 782 765 783 766 786 769

+

794 777 785 768 786 769 795 778

+

811 794 794 777 795 778 812 795

+

817 800 811 794 812 795 818 801

+

821 804 817 800 818 801 768 751

+

828 811 821 804 768 751 829 812

+

835 818 828 811 829 812 836 819

+

852 835 835 818 836 819 853 836

+

861 844 852 835 853 836 862 845

+

865 848 861 844 862 845 866 849

+

798 781 799 782 810 793 809 792

+

797 780 808 791 802 785 761 744

+
+ + + +

779 762 778 761 777 760 780 763 781 764

+

784 767 793 776 792 775 777 760 778 761

+

805 788 807 790 806 789 792 775 793 776

+

869 852 868 851 867 850 870 853 871 854

+

863 846 871 854 870 853 854 837 855 838

+

842 825 855 838 854 837 840 823 841 824

+

841 824 840 823 830 813 831 814

+

831 814 830 813 822 805 825 808

+

825 808 822 805 766 749 816 799

+

816 799 766 749 806 789 807 790

+

800 783 801 784 790 773 791 774

+

789 772 791 774 790 773 787 770 788 771

+

796 779 788 771 787 770 803 786 804 787

+

813 796 804 787 803 786 814 797 815 798

+

815 798 814 797 819 802 820 803

+

820 803 819 802 823 806 824 807

+

824 807 823 806 826 809 827 810

+

827 810 826 809 832 815 833 816

+

834 817 833 816 832 815 843 826 844 827

+

851 834 844 827 843 826 859 842 860 843

+

858 841 860 843 859 842 856 839 857 840

+

857 840 856 839 846 829 847 830

+

785 768 782 765 783 766 786 769

+

794 777 785 768 786 769 795 778

+

811 794 794 777 795 778 812 795

+

817 800 811 794 812 795 818 801

+

821 804 817 800 818 801 768 751

+

828 811 821 804 768 751 829 812

+

835 818 828 811 829 812 836 819

+

852 835 835 818 836 819 853 836

+

861 844 852 835 853 836 862 845

+

865 848 861 844 862 845 866 849

+

798 781 799 782 810 793 809 792

+

797 780 808 791 802 785 761 744

+

839 822 837 820 848 831 850 833

+

838 821 849 832 864 847 845 828

+
+ + + +

872 868 873 869 874 870 875 871 876 872 877 873 878 874 879 875 880 876 881 877 882 878 883 879 884 880

+

885 881 886 882 887 883 888 884 889 885 890 886 891 887 892 888 893 889 894 890 895 891 896 892 897 893

+

898 894 899 895 900 896 901 897

+

902 898 903 899 904 900 905 901

+

906 902 907 903 908 904 909 905

+

910 906 911 907 912 908 913 909

+

914 910 915 911 916 912 917 913

+

918 914 919 915 920 916 921 917

+

922 918 923 919 924 920 925 921

+

926 922 927 923 928 924 929 925

+

930 926 931 927 932 928 933 929

+

934 930 935 931 936 932 937 933

+

938 934 939 935 940 936 941 937

+

942 938 943 939 944 940 945 941

+

946 942 947 943 948 944 949 945

+
+ + + +

950 946 951 947 952 948 965 961 966 962 967 963

+
+ + + +

953 949 954 950 955 951 956 952

+

957 953 958 954 959 955 960 956

+

961 957 962 958 963 959 964 960

+
+ + + +

968 964 969 965 970 966 983 979 984 980 985 981

+
+ + + +

971 967 972 968 973 969 974 970

+

975 971 976 972 977 973 978 974

+

979 975 980 976 981 977 982 978

+
+ + + +

986 982 987 983 988 984 989 985 990 986 991 987 992 988 993 989 994 990 995 991

+

996 992 997 993 998 994 999 995 1000 996 1001 997 1002 998 1003 999 1004 1000 1005 1001

+

1006 1002 1007 1003 1008 1004 1009 1005

+

1010 1006 1011 1007 1012 1008 1013 1009

+

1014 1010 1015 1011 1016 1012 1017 1013

+

1018 1014 1019 1015 1020 1016 1021 1017

+

1022 1018 1023 1019 1024 1020 1025 1021

+

1026 1022 1027 1023 1028 1024 1029 1025

+

1030 1026 1031 1027 1032 1028 1033 1029

+

1034 1030 1035 1031 1036 1032 1037 1033

+

1038 1034 1039 1035 1040 1036 1041 1037

+

1042 1038 1043 1039 1044 1040 1045 1041

+
+ + + +

1046 1042 1047 1042 1048 1042 1049 1042 1050 1042 1051 1042 1052 1042

+
+ + + +

1053 1043 1054 1043 1055 1043 1056 1043

+
+ + + +

1057 1044 1058 1044 1059 1044 1060 1044

+
+ + + +

1061 1045 1062 1045 1063 1045 1064 1045

+
+ + + +

1065 1046 1066 1046 1067 1046 1068 1046

+
+ + + +

1069 1047 1070 1047 1071 1047 1072 1047

+
+ + + +

1073 1048 1074 1048 1075 1048 1076 1048

+
+ + + +

1077 1049 1078 1049 1079 1049 1080 1049

+
+ + + +

1081 1050 1082 1050 1083 1050 1084 1050

+
+ + + +

1085 1051 1086 1051 1087 1051 1088 1051

+
+ + + +

1089 1052 1090 1052 1091 1052 1092 1052

+
+ + + +

1093 1053 1094 1053 1095 1053 1096 1053

+
+ + + +

1097 1054 1098 1054 1099 1054 1100 1054

+
+ + + +

1128 1055 1129 1055 1130 1055

+
+ + + +

1101 1055 1102 1055 1103 1055 1104 1055

+

1105 1055 1106 1055 1107 1055 1108 1055 1109 1055 1110 1055 1111 1055 1112 1055

+

1113 1055 1114 1055 1115 1055 1116 1055 1117 1055

+

1118 1055 1119 1055 1120 1055 1121 1055 1122 1055 1123 1055

+

1124 1055 1125 1055 1126 1055 1127 1055

+
+ + + +

1144 1056 1145 1056 1146 1056

+
+ + + +

1131 1056 1132 1056 1133 1056 1134 1056

+

1135 1056 1136 1056 1137 1056 1138 1056 1139 1056

+

1140 1056 1141 1056 1142 1056 1143 1056

+
+ + + +

1156 1057 1157 1057 1158 1057

+
+ + + +

1147 1057 1148 1057 1149 1057 1150 1057 1151 1057

+

1152 1057 1153 1057 1154 1057 1155 1057

+
+ + + +

1159 1058 1160 1058 1161 1058 1200 1058 1201 1058 1202 1058 1203 1058 1204 1058 1205 1058 1206 1058 1207 1058 1208 1058 1215 1058 1216 1058 1217 1058

+
+ + + +

1162 1058 1163 1058 1164 1058 1165 1058 1166 1058

+

1167 1058 1168 1058 1169 1058 1170 1058

+

1171 1058 1172 1058 1173 1058 1174 1058 1175 1058 1176 1058

+

1177 1058 1178 1058 1179 1058 1180 1058

+

1181 1058 1182 1058 1183 1058 1184 1058

+

1185 1058 1186 1058 1187 1058 1188 1058 1189 1058

+

1190 1058 1191 1058 1192 1058 1193 1058

+

1194 1058 1195 1058 1196 1058 1197 1058 1198 1058 1199 1058

+

1209 1058 1210 1058 1211 1058 1212 1058 1213 1058 1214 1058

+
+ + + +

1236 1059 1237 1059 1238 1059 1282 1059 1283 1059 1284 1059

+
+ + + +

1218 1059 1219 1059 1220 1059 1221 1059

+

1222 1059 1223 1059 1224 1059 1225 1059

+

1226 1059 1227 1059 1228 1059 1229 1059 1230 1059 1231 1059

+

1232 1059 1233 1059 1234 1059 1235 1059

+

1239 1059 1240 1059 1241 1059 1242 1059 1243 1059

+

1244 1059 1245 1059 1246 1059 1247 1059

+

1248 1059 1249 1059 1250 1059 1251 1059

+

1252 1059 1253 1059 1254 1059 1255 1059 1256 1059 1257 1059 1258 1059

+

1259 1059 1260 1059 1261 1059 1262 1059

+

1263 1059 1264 1059 1265 1059 1266 1059

+

1267 1059 1268 1059 1269 1059 1270 1059 1271 1059

+

1272 1059 1273 1059 1274 1059 1275 1059 1276 1059 1277 1059

+

1278 1059 1279 1059 1280 1059 1281 1059

+
+ + + +

1313 1060 1314 1060 1315 1060 1347 1060 1348 1060 1349 1060

+
+ + + +

1285 1060 1286 1060 1287 1060 1288 1060

+

1289 1060 1290 1060 1291 1060 1292 1060

+

1293 1060 1294 1060 1295 1060 1296 1060 1297 1060 1298 1060 1299 1060

+

1300 1060 1301 1060 1302 1060 1303 1060

+

1304 1060 1305 1060 1306 1060 1307 1060

+

1308 1060 1309 1060 1310 1060 1311 1060 1312 1060

+

1316 1060 1317 1060 1318 1060 1319 1060

+

1320 1060 1321 1060 1322 1060 1323 1060 1324 1060 1325 1060

+

1326 1060 1327 1060 1328 1060 1329 1060

+

1330 1060 1331 1060 1332 1060 1333 1060

+

1334 1060 1335 1060 1336 1060 1337 1060

+

1338 1060 1339 1060 1340 1060 1341 1060 1342 1060

+

1343 1060 1344 1060 1345 1060 1346 1060

+
+
+ + + CAT3DBagRep + + +
+ + + + 48.2248 -131.5 132.496 90.633 -131.5 108.012 122.11 -131.5 70.4995 138.858 -131.5 24.4839 138.858 -131.5 -24.4849 122.11 -131.5 -70.5005 90.633 -131.5 -108.013 48.2248 -131.5 -132.497 0 -131.5 -141 -48.2249 -131.5 -132.497 -90.6331 -131.5 -108.013 -122.11 -131.5 -70.5005 -138.858 -131.5 -24.4849 -138.858 -131.5 24.4839 -122.11 -131.5 70.4995 -90.6331 -131.5 108.012 -48.2249 -131.5 132.496 0 -131.5 141 0 -170 141 -48.2249 -170 132.496 -90.6331 -170 108.012 -122.11 -170 70.4995 -138.858 -170 24.4839 -138.858 -170 -24.4849 -122.11 -170 -70.5005 -90.6331 -170 -108.013 -48.2249 -170 -132.497 0 -170 -141 48.2248 -170 -132.497 90.633 -170 -108.013 122.11 -170 -70.5005 138.858 -170 -24.4849 138.858 -170 24.4839 122.11 -170 70.4995 90.633 -170 108.012 48.2248 -170 132.496 48.2248 -131.5 132.496 48.2248 -170 132.496 90.633 -170 108.012 90.633 -131.5 108.012 90.633 -131.5 108.012 90.633 -170 108.012 122.11 -170 70.4995 122.11 -131.5 70.4995 122.11 -131.5 70.4995 122.11 -170 70.4995 138.858 -170 24.4839 138.858 -131.5 24.4839 138.858 -131.5 24.4839 138.858 -170 24.4839 138.858 -170 -24.4849 138.858 -131.5 -24.4849 138.858 -131.5 -24.4849 138.858 -170 -24.4849 122.11 -170 -70.5005 122.11 -131.5 -70.5005 122.11 -131.5 -70.5005 122.11 -170 -70.5005 90.633 -170 -108.013 90.633 -131.5 -108.013 90.633 -131.5 -108.013 90.633 -170 -108.013 48.2248 -170 -132.497 48.2248 -131.5 -132.497 48.2248 -131.5 -132.497 48.2248 -170 -132.497 0 -170 -141 0 -131.5 -141 0 -131.5 -141 0 -170 -141 -48.2249 -170 -132.497 -48.2249 -131.5 -132.497 -48.2249 -131.5 -132.497 -48.2249 -170 -132.497 -90.6331 -170 -108.013 -90.6331 -131.5 -108.013 -90.6331 -131.5 -108.013 -90.6331 -170 -108.013 -122.11 -170 -70.5005 -122.11 -131.5 -70.5005 -122.11 -131.5 -70.5005 -122.11 -170 -70.5005 -138.858 -170 -24.4849 -138.858 -131.5 -24.4849 -138.858 -131.5 -24.4849 -138.858 -170 -24.4849 -138.858 -170 24.4839 -138.858 -131.5 24.4839 -138.858 -131.5 24.4839 -138.858 -170 24.4839 -122.11 -170 70.4995 -122.11 -131.5 70.4995 -122.11 -131.5 70.4995 -122.11 -170 70.4995 -90.6331 -170 108.012 -90.6331 -131.5 108.012 -90.6331 -131.5 108.012 -90.6331 -170 108.012 -48.2249 -170 132.496 -48.2249 -131.5 132.496 -48.2249 -131.5 132.496 -48.2249 -170 132.496 0 -170 141 0 -131.5 141 0 -131.5 141 0 -170 141 48.2248 -170 132.496 48.2248 -131.5 132.496 46.4339 63 127.578 -127.577 63 46.4349 -127.577 50 46.4349 46.4339 50 127.578 127.577 63 -46.4335 46.4339 63 127.578 46.4339 50 127.578 127.577 50 -46.4335 -46.4345 63 -127.576 127.577 63 -46.4335 127.577 50 -46.4335 -46.4345 50 -127.576 -127.577 63 46.4349 -46.4345 63 -127.576 -46.4345 50 -127.576 -127.577 50 46.4349 -127.577 50 46.4349 -46.4345 50 -127.576 127.577 50 -46.4335 46.4339 50 127.578 -59.1131 225 -100.387 -63.6253 225 -90.7103 -63.6253 225 -79.4585 -31.9565 225 -79.4585 -31.9238 225 -87.7084 -31.9565 225 -87.7236 -28.3871 225 -95.293 -31.9238 225 -87.7084 -31.9565 225 -79.4585 -7.10065 225 -79.4585 0.926239 225 -85.079 -0.287598 225 -95.293 90.7109 225 -63.6241 -0.287598 225 -106.057 -0.287598 225 -95.293 0.926239 225 -85.079 46.9362 225 -63.6241 -0.287598 225 -95.293 -0.287598 225 -106.057 -19.2453 225 -114.898 -28.3871 225 -95.293 -114.899 225 19.2457 -95.2942 225 28.3875 -95.2942 225 -22.7963 19.2446 225 114.899 28.6542 225 94.7202 -24.0293 225 94.7202 94.719 225 24.0299 114.898 225 -19.2441 94.719 225 -28.6538 -63.6253 225 -63.6241 -63.6253 225 -90.7103 -76.2558 225 -63.6241 -127.577 63 46.4349 -114.899 63 19.2457 -114.899 63 19.2457 -114.899 63 19.2457 -114.899 225 19.2457 -114.899 225 19.2457 -100.388 63 59.1135 -100.388 63 59.1135 -100.388 63 59.1135 -100.388 225 59.1135 -100.388 225 59.1135 -100.388 225 59.1135 -95.2942 225 -0.286377 -95.2942 225 28.3875 -91.9435 225 63.0513 -87.7094 63 31.9243 -87.7094 63 31.9243 -87.7094 63 31.9243 -87.7094 225 31.9243 -87.7094 225 31.9243 -87.7094 225 31.9243 -85.08 225 -0.925781 -85.08 225 -0.925781 -85.08 225 -0.925781 -85.08 268 -0.925781 -85.08 268 -0.925781 -85.08 268 -0.925781 -79.4597 225 7.10095 -79.4597 225 31.3824 -79.4597 225 63.0513 -76.2558 225 -63.6241 -67.2838 225 24.49 -67.2838 225 24.49 -67.2838 268 24.49 -67.2838 268 24.49 -65.3417 268 46.6882 -64.5796 225 55.3988 -64.5796 225 55.3988 -64.5796 225 55.3988 -64.5796 268 55.3988 -64.5796 268 55.3988 -64.5796 268 55.3988 -63.6253 225 -79.4585 -63.6253 225 -63.6241 -63.543 268 -47.1121 -59.1131 63 -100.387 -59.1131 63 -100.387 -59.1131 63 -100.387 -59.1131 225 -100.387 -59.1131 225 -100.387 -55.8433 225 -63.6241 -55.3983 225 -64.5785 -55.3983 225 -64.5785 -55.3983 225 -64.5785 -55.3983 268 -64.5785 -55.3983 268 -64.5785 -55.3983 268 -64.5785 -48.1688 225 63.0513 -47.7909 225 -79.4585 -47.1132 268 -47.1121 -47.1132 268 -0.211914 -47.1132 268 46.6882 -46.4345 63 -127.576 -31.9238 63 -87.7084 -31.9238 63 -87.7084 -31.9238 63 -87.7084 -31.9238 225 -87.7084 -31.9238 225 -87.7084 -24.4895 225 -67.2827 -24.4895 225 -67.2827 -24.4895 268 -67.2827 -24.4895 268 -67.2827 -19.2453 63 -114.898 -19.2453 63 -114.898 -19.2453 63 -114.898 -19.2453 225 -114.898 -19.2453 225 -114.898 -14.3355 285 10.0383 -14.3355 285 10.0383 -7.10065 225 -79.4585 -0.92688 225 85.0804 -0.92688 225 85.0804 -0.92688 225 85.0804 -0.287598 225 94.7202 -0.213013 268 -84.2813 -0.213013 268 -47.1121 -0.213013 268 46.6882 0.926239 268 -85.079 0.926239 268 -85.079 0.926239 268 -85.079 7.92007 225 78.8857 19.2446 63 114.899 19.2446 63 114.899 19.2446 63 114.899 19.2446 225 114.899 19.2446 225 114.899 24.4889 225 67.2842 24.4889 225 67.2842 24.4889 268 67.2842 24.4889 268 67.2842 28.6542 225 94.7202 31.3813 225 66.6812 31.3813 225 78.8857 31.9232 63 87.7098 31.9232 63 87.7098 31.9232 63 87.7098 31.9232 225 87.7098 31.9232 225 87.7098 31.9232 225 87.7098 46.4339 63 127.578 46.6872 268 -63.7402 46.6872 268 -47.1121 46.6872 268 -0.211914 46.6872 268 46.6882 46.6872 268 65.3422 46.9362 225 -63.6241 55.3976 225 64.5801 55.3976 225 64.5801 55.3976 225 64.5801 55.3976 268 64.5801 55.3976 268 64.5801 55.3976 268 64.5801 59.1124 63 100.388 59.1124 63 100.388 59.1124 63 100.388 59.1124 225 100.388 59.1124 225 100.388 59.1124 225 100.388 63.0501 225 -63.6241 63.0501 225 48.1693 63.0501 225 78.8857 63.0501 225 91.9441 64.5789 225 -55.3972 64.5789 225 -55.3972 64.5789 225 -55.3972 64.5789 268 -55.3972 64.5789 268 -55.3972 64.5789 268 -55.3972 66.6299 225 -31.9553 67.2831 225 -24.4884 67.2831 225 -24.4884 67.2831 268 -24.4884 67.2831 268 -24.4884 78.8845 225 -63.6241 78.8845 225 -47.7898 78.8845 225 -31.9553 84.2817 268 -0.211914 85.0794 225 0.927368 85.0794 225 0.927368 85.0794 225 0.927368 85.0794 268 0.927368 85.0794 268 0.927368 85.0794 268 0.927368 87.7088 63 -31.9227 87.7088 63 -31.9227 87.7088 63 -31.9227 87.7088 225 -31.9227 87.7088 225 -31.9227 87.7088 225 -31.9227 94.719 225 -28.6538 94.719 225 -0.286377 100.387 63 -59.1119 100.387 63 -59.1119 100.387 63 -59.1119 100.387 225 -59.1119 100.387 225 -59.1119 100.387 225 -59.1119 114.898 63 -19.2441 114.898 63 -19.2441 114.898 63 -19.2441 114.898 225 -19.2441 114.898 225 -19.2441 127.577 63 -46.4335 -17.4337 268 1.526 -17.4337 285 1.526 -17.4337 285 1.526 -15.8607 268 -7.39502 -15.8607 285 -7.39502 -15.8607 285 -7.39502 -14.3355 268 10.0383 -10.0379 268 -14.3344 -10.0379 285 -14.3344 -10.0379 285 -14.3344 -7.39615 268 15.8612 -7.39615 285 15.8612 -7.39615 285 15.8612 -1.52554 268 -17.4326 -1.52554 285 -17.4326 -1.52554 285 -17.4326 -0.92688 268 85.0804 -0.92688 268 85.0804 0.926239 225 -85.079 0.926239 225 -85.079 1.5249 268 17.4342 1.5249 285 17.4342 1.5249 285 17.4342 7.39551 268 -15.8596 7.39551 285 -15.8596 7.39551 285 -15.8596 10.0373 268 14.3359 10.0373 285 14.3359 10.0373 285 14.3359 14.3348 268 -10.0369 14.3348 285 -10.0369 14.3348 285 -10.0369 15.8601 268 7.39661 15.8601 285 7.39661 15.8601 285 7.39661 17.4331 268 -1.52441 17.4331 285 -1.52441 17.4331 285 -1.52441 -95.2942 225 -22.7963 -24.0293 225 94.7202 90.7109 225 -63.6241 94.719 225 24.0299 -405 -38.7625 143.57 -405 -38.7625 151.996 -405 38.4125 151.996 -405 38.4125 143.538 -405 0 140.053 -405 -38.7625 267.759 -405 -38.7625 276.535 -405 -0.000122 280.053 -405 38.4125 276.567 -405 38.4125 267.759 -405 66.4826 171.29 -405 57.7062 171.29 -405 57.7062 248.465 -405 66.5144 248.465 -405 70 210.053 -195 -70 280.053 -195 -70 140.053 -195 70 140.053 -195 70 280.053 -215 -70 140.053 -195 -70 140.053 -195 -70 280.053 -215 -70 280.053 -215 -70 280.053 -195 -70 280.053 -195 70 280.053 -215 70 280.053 -215 70 140.053 -215 70 280.053 -195 70 280.053 -195 70 140.053 -215 -70 140.053 -215 70 140.053 -195 70 140.053 -195 -70 140.053 -405 -46.8659 209.878 -405 -45.2911 197.917 -405 -58.0562 190.584 -405 -68.2334 190.584 -405 -69.9841 209.878 -405 -45.2911 197.917 -405 -42.2536 190.584 -405 -58.0562 190.584 -420.665 -31.4094 210.053 -420.665 -31.4094 210.053 -420.665 -31.3991 209.974 -420.665 -30.3392 201.923 -420.665 -30.3392 201.923 -420.665 -27.2014 225.757 -420.665 -27.2014 225.757 -420.665 -26.0264 227.289 -420.665 -17.393 209.974 -420.665 -8.12927 179.714 -420.665 -8.12927 179.714 -420.665 -0.623596 207.725 -420.665 -0.623596 207.725 -420.665 -0.623596 212.38 -420.665 -0.623596 212.38 -420.665 -0.078524 178.654 -420.665 -0.078524 192.66 -420.665 -0.078524 212.452 -420.665 -0.078524 227.289 -420.665 0 178.643 -420.665 0 178.643 -420.665 0 207.643 -420.665 0 207.643 -420.665 0 212.462 -420.665 0 212.462 -420.665 15.7047 182.851 -420.665 15.7047 182.851 -420.665 17.2359 209.974 -420.665 17.2359 227.289 -405 -70 210.052 -405 -70 210.052 -405 -69.9841 209.878 -405 -68.2651 229.171 -405 -68.2334 190.584 -405 -66.5144 248.465 -405 -66.4827 171.29 -405 -65.1 156.053 -405 -65.1 156.053 -405 -65.1 264.053 -405 -65.1 264.053 -405 -58.0562 209.878 -405 -58.0562 229.171 -405 -54 144.953 -405 -54 144.953 -405 -54 275.153 -405 -54 275.153 -405 -46.8889 210.053 -405 -46.8889 210.053 -405 -46.8659 209.878 -405 -45.2911 222.188 -405 -45.2911 222.188 -405 -42.3986 229.171 -405 -42.2536 190.584 -405 -40.6069 186.608 -405 -40.6069 186.608 -405 -40.6069 233.497 -405 -40.6069 233.497 -405 -38.7625 143.57 -405 -38.7625 151.996 -405 -38.7625 171.29 -405 -38.7625 248.465 -405 -38.7625 267.759 -405 -38.7625 276.535 -405 -19.4687 151.996 -405 -19.4687 267.759 -405 -2.40942 210.053 -405 -2.40942 210.053 -405 -2.32727 209.429 -405 -2.32727 209.429 -405 -2.32727 210.676 -405 -2.32727 210.676 -405 -2.08661 208.848 -405 -2.08661 208.848 -405 -2.08661 211.257 -405 -2.08661 211.257 -405 -1.70367 208.349 -405 -1.70367 208.349 -405 -1.70367 211.756 -405 -1.70367 211.756 -405 -1.20471 207.966 -405 -1.20471 207.966 -405 -1.20471 212.139 -405 -1.20471 212.139 -405 -0.623596 207.725 -405 -0.623596 207.725 -405 -0.623596 212.38 -405 -0.623596 212.38 -405 -0.174999 151.996 -405 -0.174999 267.759 -405 0 207.643 -405 0 207.643 -405 0 212.462 -405 0 212.462 -405 0.623596 207.725 -405 0.623596 207.725 -405 0.623596 212.38 -405 0.623596 212.38 -405 1.20471 207.966 -405 1.20471 207.966 -405 1.20471 212.139 -405 1.20471 212.139 -405 1.70367 208.349 -405 1.70367 208.349 -405 1.70367 211.756 -405 1.70367 211.756 -405 2.08661 208.848 -405 2.08661 208.848 -405 2.08661 211.257 -405 2.08661 211.257 -405 2.32727 209.429 -405 2.32727 209.429 -405 2.32727 210.676 -405 2.32727 210.676 -405 2.40942 210.053 -405 2.40942 210.053 -405 12.1357 164.762 -405 12.1357 164.762 -405 19.1187 151.996 -405 19.1187 267.759 -405 38.4125 143.538 -405 38.4125 151.996 -405 38.4125 171.29 -405 38.4125 248.465 -405 38.4125 267.759 -405 38.4125 276.567 -405 54 144.953 -405 54 144.953 -405 54 275.153 -405 54 275.153 -405 57.7062 171.29 -405 57.7062 190.584 -405 57.7062 209.878 -405 57.7062 229.171 -405 57.7062 248.465 -405 65.1 156.053 -405 65.1 156.053 -405 65.1 264.053 -405 65.1 264.053 -405 66.4826 171.29 -405 66.5144 248.465 -215 -70 140.053 -215 -70 210.053 -215 -70 210.053 -215 -70 280.053 -215 0 140.053 -215 0 140.053 -215 0 280.053 -215 0 280.053 -215 70 140.053 -215 70 210.053 -215 70 210.053 -215 70 280.053 -420.665 -30.3392 218.182 -420.665 -27.2014 194.348 -420.665 -22.2098 187.843 -420.665 -22.2098 232.262 -420.665 -22.2098 232.262 -420.665 -15.7047 182.851 -420.665 -15.7047 237.254 -420.665 -15.7047 237.254 -420.665 -8.12927 240.392 -420.665 -8.12927 240.392 -420.665 -2.40942 210.053 -420.665 -2.32727 209.429 -420.665 -2.32727 210.676 -420.665 -2.08661 208.848 -420.665 -2.08661 211.257 -420.665 -1.70367 208.349 -420.665 -1.70367 211.756 -420.665 -1.20471 207.966 -420.665 -1.20471 212.139 -420.665 -0.078524 241.452 -420.665 0 241.462 -420.665 0 241.462 -420.665 0.623596 207.725 -420.665 0.623596 212.38 -420.665 1.20471 207.966 -420.665 1.20471 212.139 -420.665 1.70367 208.349 -420.665 1.70367 211.756 -420.665 2.08661 208.848 -420.665 2.08661 211.257 -420.665 2.32727 209.429 -420.665 2.32727 210.676 -420.665 2.40942 210.053 -420.665 8.12927 179.714 -420.665 8.12927 240.392 -420.665 8.12927 240.392 -420.665 15.7047 237.254 -420.665 15.7047 237.254 -420.665 17.2359 184.026 -420.665 22.2098 187.843 -420.665 22.2098 187.843 -420.665 22.2098 232.262 -420.665 22.2098 232.262 -420.665 26.0264 227.289 -420.665 27.2014 194.348 -420.665 27.2014 194.348 -420.665 27.2014 225.757 -420.665 27.2014 225.757 -420.665 30.3392 201.923 -420.665 30.3392 201.923 -420.665 30.3392 218.182 -420.665 30.3392 218.182 -420.665 31.4094 210.053 -420.665 31.4094 210.053 -405 -65.1 156.053 -405 -65.1 264.053 -405 -60 156.053 -405 -60 264.053 -405 -58.4471 155.848 -405 -58.4471 264.257 -405 -57 155.249 -405 -57 264.856 -405 -55.7574 154.295 -405 -55.7574 265.81 -405 -54.8038 153.053 -405 -54.8038 267.053 -405 -54.2045 151.606 -405 -54.2045 268.5 -405 -54 144.953 -405 -54 150.053 -405 -54 270.053 -405 -54 275.153 -405 -45.2911 197.917 -405 -33.1554 176.897 -405 -33.1554 243.208 -405 -23.4444 169.446 -405 -23.4444 250.66 -405 -12.1357 164.762 -405 -12.1357 255.344 -405 -0.000122 280.053 -405 0 140.053 -405 0 163.164 -405 0 256.942 -405 12.1357 255.344 -405 23.4444 169.446 -405 23.4444 250.66 -405 33.1554 176.897 -405 33.1554 243.208 -405 40.6069 186.608 -405 40.6069 233.497 -405 45.2911 197.917 -405 45.2911 222.188 -405 46.8889 210.053 -405 54 144.953 -405 54 150.053 -405 54 270.053 -405 54 275.153 -405 54.2045 151.606 -405 54.2045 268.5 -405 54.8038 153.053 -405 54.8038 267.053 -405 55.7574 154.295 -405 55.7574 265.81 -405 57 155.249 -405 57 264.856 -405 58.4471 155.848 -405 58.4471 264.257 -405 60 156.053 -405 60 264.053 -405 65.1 156.053 -405 65.1 264.053 -405 70 210.053 -215 -65.1 156.053 -215 -65.1 156.053 -215 -65.1 264.053 -215 -65.1 264.053 -215 -60 156.053 -215 -60 264.053 -215 -58.4471 155.848 -215 -58.4471 264.257 -215 -57 155.249 -215 -57 264.856 -215 -55.7574 154.295 -215 -55.7574 265.81 -215 -54.8038 153.053 -215 -54.8038 267.053 -215 -54.2045 151.606 -215 -54.2045 268.5 -215 -54 144.953 -215 -54 144.953 -215 -54 150.053 -215 -54 270.053 -215 -54 275.153 -215 -54 275.153 -215 54 144.953 -215 54 144.953 -215 54 150.053 -215 54 270.053 -215 54 275.153 -215 54 275.153 -215 54.2045 151.606 -215 54.2045 268.5 -215 54.8038 153.053 -215 54.8038 267.053 -215 55.7574 154.295 -215 55.7574 265.81 -215 57 155.249 -215 57 264.856 -215 58.4471 155.848 -215 58.4471 264.257 -215 60 156.053 -215 60 264.053 -215 65.1 156.053 -215 65.1 156.053 -215 65.1 264.053 -215 65.1 264.053 -420.665 -0.078524 207.654 -405 -38.7625 -22.667 -405 -38.7625 -14.2405 -405 38.4125 -14.2405 -405 38.4125 -22.6987 -405 0 -26.1843 -405 -38.7625 101.522 -405 -38.7625 110.298 -405 -0.000122 113.816 -405 38.4125 110.33 -405 38.4125 101.522 -405 66.4827 5.05322 -405 57.7062 5.05322 -405 57.7062 82.2281 -405 66.5144 82.2281 -405 70 43.8157 -195 -70 113.816 -195 -70 -26.1843 -195 70 -26.1843 -195 70 113.816 -215 -70 -26.1843 -195 -70 -26.1843 -195 -70 113.816 -215 -70 113.816 -215 -70 113.816 -195 -70 113.816 -195 70 113.816 -215 70 113.816 -215 70 -26.1843 -215 70 113.816 -195 70 113.816 -195 70 -26.1843 -215 -70 -26.1843 -215 70 -26.1843 -195 70 -26.1843 -195 -70 -26.1843 -405 -46.8659 43.6406 -405 -45.2911 31.6799 -405 -58.0562 24.3469 -405 -68.2334 24.3469 -405 -69.9841 43.6406 -405 -45.2911 31.6799 -405 -42.2536 24.3469 -405 -58.0562 24.3469 -420.665 -31.4094 43.8157 -420.665 -31.4094 43.8157 -420.665 -31.3991 43.7372 -420.665 -30.3392 35.6863 -420.665 -30.3392 35.6863 -420.665 -27.2014 59.5204 -420.665 -27.2014 59.5204 -420.665 -26.0264 61.0516 -420.665 -17.393 43.7372 -420.665 -8.12927 13.4764 -420.665 -8.12927 13.4764 -420.665 -2.40942 43.8157 -420.665 -2.40942 43.8157 -420.665 -1.20471 41.7291 -420.665 -1.20471 41.7291 -420.665 -0.078524 12.4166 -420.665 -0.078524 26.4227 -420.665 -0.078524 61.0516 -420.665 0 12.4063 -420.665 0 12.4063 -420.665 2.08661 42.611 -420.665 2.08661 42.611 -420.665 15.7047 16.6143 -420.665 15.7047 16.6143 -420.665 17.2359 43.7372 -420.665 17.2359 61.0516 -405 -70 43.8156 -405 -70 43.8156 -405 -69.9841 43.6406 -405 -68.2651 62.9343 -405 -68.2334 24.3469 -405 -66.5144 82.2281 -405 -66.4827 5.05322 -405 -65.1 -10.1843 -405 -65.1 -10.1843 -405 -65.1 97.8157 -405 -65.1 97.8157 -405 -58.0562 43.6406 -405 -58.0562 62.9343 -405 -54 -21.2843 -405 -54 -21.2843 -405 -54 108.916 -405 -54 108.916 -405 -46.8889 43.8157 -405 -46.8889 43.8157 -405 -46.8659 43.6406 -405 -45.2911 55.9514 -405 -45.2911 55.9514 -405 -42.3986 62.9343 -405 -42.2536 24.3469 -405 -40.6069 20.3713 -405 -40.6069 20.3713 -405 -40.6069 67.26 -405 -40.6069 67.26 -405 -38.7625 -22.667 -405 -38.7625 -14.2405 -405 -38.7625 5.05322 -405 -38.7625 82.2281 -405 -38.7625 101.522 -405 -38.7625 110.298 -405 -19.4687 -14.2405 -405 -19.4687 101.522 -405 -12.1357 -1.47546 -405 -12.1357 -1.47546 -405 -2.40942 43.8157 -405 -2.40942 43.8157 -405 -2.32727 43.1921 -405 -2.32727 43.1921 -405 -2.32727 44.4392 -405 -2.32727 44.4392 -405 -2.08661 42.611 -405 -2.08661 42.611 -405 -2.08661 45.0204 -405 -2.08661 45.0204 -405 -1.70367 42.1119 -405 -1.70367 42.1119 -405 -1.70367 45.5194 -405 -1.70367 45.5194 -405 -1.20471 41.7291 -405 -1.20471 41.7291 -405 -1.20471 45.9022 -405 -1.20471 45.9022 -405 -0.623596 41.4884 -405 -0.623596 41.4884 -405 -0.623596 46.1429 -405 -0.623596 46.1429 -405 -0.174999 -14.2405 -405 -0.174999 101.522 -405 0 41.4063 -405 0 41.4063 -405 0 46.2251 -405 0 46.2251 -405 0.623596 41.4884 -405 0.623596 41.4884 -405 0.623596 46.1429 -405 0.623596 46.1429 -405 1.20471 41.7291 -405 1.20471 41.7291 -405 1.20471 45.9022 -405 1.20471 45.9022 -405 1.70367 42.1119 -405 1.70367 42.1119 -405 1.70367 45.5194 -405 1.70367 45.5194 -405 2.08661 42.611 -405 2.08661 42.611 -405 2.08661 45.0204 -405 2.08661 45.0204 -405 2.32727 43.1921 -405 2.32727 43.1921 -405 2.32727 44.4392 -405 2.32727 44.4392 -405 2.40942 43.8157 -405 2.40942 43.8157 -405 19.1187 -14.2405 -405 19.1187 101.522 -405 38.4125 -22.6987 -405 38.4125 -14.2405 -405 38.4125 5.05322 -405 38.4125 82.2281 -405 38.4125 101.522 -405 38.4125 110.33 -405 54 -21.2843 -405 54 -21.2843 -405 54 108.916 -405 54 108.916 -405 57.7062 5.05322 -405 57.7062 24.3469 -405 57.7062 43.6406 -405 57.7062 62.9343 -405 57.7062 82.2281 -405 65.1 -10.1843 -405 65.1 -10.1843 -405 65.1 97.8157 -405 65.1 97.8157 -405 66.4827 5.05322 -405 66.5144 82.2281 -215 -70 -26.1843 -215 -70 43.8157 -215 -70 43.8157 -215 -70 113.816 -215 0 -26.1843 -215 0 -26.1843 -215 0 113.816 -215 0 113.816 -215 70 -26.1843 -215 70 43.8157 -215 70 43.8157 -215 70 113.816 -420.665 -30.3392 51.9451 -420.665 -27.2014 28.111 -420.665 -22.2098 21.6058 -420.665 -22.2098 66.0255 -420.665 -22.2098 66.0255 -420.665 -15.7047 16.6143 -420.665 -15.7047 71.0171 -420.665 -15.7047 71.0171 -420.665 -8.12927 74.1549 -420.665 -8.12927 74.1549 -420.665 -2.32727 43.1921 -420.665 -2.32727 44.4392 -420.665 -2.08661 42.611 -420.665 -2.08661 45.0204 -420.665 -1.70367 42.1119 -420.665 -1.70367 45.5194 -420.665 -1.20471 45.9022 -420.665 -0.623596 41.4884 -420.665 -0.623596 46.1429 -420.665 0 41.4063 -420.665 0 46.2251 -420.665 0 75.2251 -420.665 0 75.2251 -420.665 0.623596 41.4884 -420.665 0.623596 46.1429 -420.665 1.20471 41.7291 -420.665 1.20471 45.9022 -420.665 1.70367 42.1119 -420.665 1.70367 45.5194 -420.665 2.08661 45.0204 -420.665 2.32727 43.1921 -420.665 2.32727 44.4392 -420.665 2.40942 43.8157 -420.665 8.12927 13.4764 -420.665 8.12927 74.1549 -420.665 8.12927 74.1549 -420.665 15.7047 71.0171 -420.665 15.7047 71.0171 -420.665 17.2359 17.7892 -420.665 22.2098 21.6058 -420.665 22.2098 21.6058 -420.665 22.2098 66.0255 -420.665 22.2098 66.0255 -420.665 26.0264 61.0516 -420.665 27.2014 28.111 -420.665 27.2014 28.111 -420.665 27.2014 59.5204 -420.665 27.2014 59.5204 -420.665 30.3392 35.6863 -420.665 30.3392 35.6863 -420.665 30.3392 51.9451 -420.665 30.3392 51.9451 -420.665 31.4094 43.8157 -420.665 31.4094 43.8157 -405 -65.1 -10.1843 -405 -65.1 97.8157 -405 -60 -10.1843 -405 -60 97.8157 -405 -58.4471 -10.3887 -405 -58.4471 98.0201 -405 -57 -10.9882 -405 -57 98.6195 -405 -55.7574 -11.9417 -405 -55.7574 99.5731 -405 -54.8038 -13.1843 -405 -54.8038 100.816 -405 -54.2045 -14.6315 -405 -54.2045 102.263 -405 -54 -21.2843 -405 -54 -16.1843 -405 -54 103.816 -405 -54 108.916 -405 -45.2911 31.6799 -405 -33.1554 10.6603 -405 -33.1554 76.9711 -405 -23.4444 3.20874 -405 -23.4444 84.4226 -405 -12.1357 89.1068 -405 -0.000122 113.816 -405 0 -26.1843 -405 0 -3.07324 -405 0 90.7046 -405 12.1357 -1.47546 -405 12.1357 89.1068 -405 23.4444 3.20874 -405 23.4444 84.4226 -405 33.1554 10.6603 -405 33.1554 76.9711 -405 40.6069 20.3713 -405 40.6069 67.26 -405 45.2911 31.6799 -405 45.2911 55.9514 -405 46.8889 43.8157 -405 54 -21.2843 -405 54 -16.1843 -405 54 103.816 -405 54 108.916 -405 54.2045 -14.6315 -405 54.2045 102.263 -405 54.8038 -13.1843 -405 54.8038 100.816 -405 55.7574 -11.9417 -405 55.7574 99.5731 -405 57 -10.9882 -405 57 98.6195 -405 58.4471 -10.3887 -405 58.4471 98.0201 -405 60 -10.1843 -405 60 97.8157 -405 65.1 -10.1843 -405 65.1 97.8157 -405 70 43.8157 -215 -65.1 -10.1843 -215 -65.1 -10.1843 -215 -65.1 97.8157 -215 -65.1 97.8157 -215 -60 -10.1843 -215 -60 97.8157 -215 -58.4471 -10.3887 -215 -58.4471 98.0201 -215 -57 -10.9882 -215 -57 98.6195 -215 -55.7574 -11.9417 -215 -55.7574 99.5731 -215 -54.8038 -13.1843 -215 -54.8038 100.816 -215 -54.2045 -14.6315 -215 -54.2045 102.263 -215 -54 -21.2843 -215 -54 -21.2843 -215 -54 -16.1843 -215 -54 103.816 -215 -54 108.916 -215 -54 108.916 -215 54 -21.2843 -215 54 -21.2843 -215 54 -16.1843 -215 54 103.816 -215 54 108.916 -215 54 108.916 -215 54.2045 -14.6315 -215 54.2045 102.263 -215 54.8038 -13.1843 -215 54.8038 100.816 -215 55.7574 -11.9417 -215 55.7574 99.5731 -215 57 -10.9882 -215 57 98.6195 -215 58.4471 -10.3887 -215 58.4471 98.0201 -215 60 -10.1843 -215 60 97.8157 -215 65.1 -10.1843 -215 65.1 -10.1843 -215 65.1 97.8157 -215 65.1 97.8157 -405 -38.7625 -188.904 -405 -38.7625 -180.478 -405 38.4125 -180.478 -405 38.4125 -188.936 -405 0 -192.421 -405 -38.7625 -64.7151 -405 -38.7625 -55.9386 -405 -0.000122 -52.4214 -405 38.4125 -55.9069 -405 38.4125 -64.7151 -405 66.4827 -161.184 -405 57.7062 -161.184 -405 57.7062 -84.0089 -405 66.5144 -84.0089 -405 70 -122.421 -195 -70 -52.4214 -195 -70 -192.421 -195 70 -192.421 -195 70 -52.4214 -215 -70 -192.421 -195 -70 -192.421 -195 -70 -52.4214 -215 -70 -52.4214 -215 -70 -52.4214 -195 -70 -52.4214 -195 70 -52.4214 -215 70 -52.4214 -215 70 -192.421 -215 70 -52.4214 -195 70 -52.4214 -195 70 -192.421 -215 -70 -192.421 -215 70 -192.421 -195 70 -192.421 -195 -70 -192.421 -405 -46.8659 -122.596 -405 -45.2911 -134.557 -405 -58.0562 -141.89 -405 -68.2334 -141.89 -405 -69.9841 -122.596 -405 -45.2911 -134.557 -405 -42.2536 -141.89 -405 -58.0562 -141.89 -420.665 -31.4094 -122.421 -420.665 -31.4094 -122.421 -420.665 -31.3991 -122.5 -420.665 -30.3392 -130.551 -420.665 -30.3392 -130.551 -420.665 -27.2014 -106.717 -420.665 -27.2014 -106.717 -420.665 -26.0264 -105.185 -420.665 -17.393 -122.5 -420.665 -8.12927 -152.76 -420.665 -8.12927 -152.76 -420.665 -1.70367 -124.125 -420.665 -1.70367 -124.125 -420.665 -0.078524 -153.82 -420.665 -0.078524 -139.814 -420.665 -0.078524 -105.185 -420.665 0 -153.831 -420.665 0 -153.831 -420.665 1.20471 -124.508 -420.665 1.20471 -124.508 -420.665 15.7047 -149.623 -420.665 15.7047 -149.623 -420.665 17.2359 -122.5 -420.665 17.2359 -105.185 -405 -70 -122.421 -405 -70 -122.421 -405 -69.9841 -122.596 -405 -68.2652 -103.303 -405 -68.2334 -141.89 -405 -66.5144 -84.0089 -405 -66.4827 -161.184 -405 -65.1 -176.421 -405 -65.1 -176.421 -405 -65.1 -68.4214 -405 -65.1 -68.4214 -405 -58.0562 -122.596 -405 -58.0562 -103.303 -405 -54 -187.521 -405 -54 -187.521 -405 -54 -57.3213 -405 -54 -57.3213 -405 -46.8889 -122.421 -405 -46.8889 -122.421 -405 -46.8659 -122.596 -405 -45.2911 -110.286 -405 -45.2911 -110.286 -405 -42.3987 -103.303 -405 -42.2536 -141.89 -405 -40.6069 -145.866 -405 -40.6069 -145.866 -405 -40.6069 -98.9769 -405 -40.6069 -98.9769 -405 -38.7625 -188.904 -405 -38.7625 -180.478 -405 -38.7625 -161.184 -405 -38.7625 -84.0089 -405 -38.7625 -64.7151 -405 -38.7625 -55.9386 -405 -19.4687 -180.478 -405 -19.4687 -64.7151 -405 -2.40942 -122.421 -405 -2.40942 -122.421 -405 -2.32727 -123.045 -405 -2.32727 -123.045 -405 -2.32727 -121.798 -405 -2.32727 -121.798 -405 -2.08661 -123.626 -405 -2.08661 -123.626 -405 -2.08661 -121.217 -405 -2.08661 -121.217 -405 -1.70367 -124.125 -405 -1.70367 -124.125 -405 -1.70367 -120.718 -405 -1.70367 -120.718 -405 -1.20471 -124.508 -405 -1.20471 -124.508 -405 -1.20471 -120.335 -405 -1.20471 -120.335 -405 -0.623596 -124.749 -405 -0.623596 -124.749 -405 -0.623596 -120.094 -405 -0.623596 -120.094 -405 -0.174999 -180.478 -405 -0.174999 -64.7151 -405 0 -169.31 -405 0 -169.31 -405 0 -124.831 -405 0 -124.831 -405 0 -120.012 -405 0 -120.012 -405 0.623596 -124.749 -405 0.623596 -124.749 -405 0.623596 -120.094 -405 0.623596 -120.094 -405 1.20471 -124.508 -405 1.20471 -124.508 -405 1.20471 -120.335 -405 1.20471 -120.335 -405 1.70367 -124.125 -405 1.70367 -124.125 -405 1.70367 -120.718 -405 1.70367 -120.718 -405 2.08661 -123.626 -405 2.08661 -123.626 -405 2.08661 -121.217 -405 2.08661 -121.217 -405 2.32727 -123.045 -405 2.32727 -123.045 -405 2.32727 -121.798 -405 2.32727 -121.798 -405 2.40942 -122.421 -405 2.40942 -122.421 -405 19.1187 -180.478 -405 19.1187 -64.7151 -405 38.4125 -188.936 -405 38.4125 -180.478 -405 38.4125 -161.184 -405 38.4125 -84.0089 -405 38.4125 -64.7151 -405 38.4125 -55.9069 -405 54 -187.521 -405 54 -187.521 -405 54 -57.3213 -405 54 -57.3213 -405 57.7062 -161.184 -405 57.7062 -141.89 -405 57.7062 -122.596 -405 57.7062 -103.303 -405 57.7062 -84.0089 -405 65.1 -176.421 -405 65.1 -176.421 -405 65.1 -68.4214 -405 65.1 -68.4214 -405 66.4827 -161.184 -405 66.5144 -84.0089 -215 -70 -192.421 -215 -70 -122.421 -215 -70 -122.421 -215 -70 -52.4214 -215 0 -192.421 -215 0 -192.421 -215 0 -52.4214 -215 0 -52.4214 -215 70 -192.421 -215 70 -122.421 -215 70 -122.421 -215 70 -52.4214 -420.665 -30.3392 -114.292 -420.665 -27.2014 -138.126 -420.665 -22.2098 -144.631 -420.665 -22.2098 -100.212 -420.665 -22.2098 -100.212 -420.665 -15.7047 -149.623 -420.665 -15.7047 -95.22 -420.665 -15.7047 -95.22 -420.665 -8.12927 -92.0822 -420.665 -8.12927 -92.0822 -420.665 -2.40942 -122.421 -420.665 -2.32727 -123.045 -420.665 -2.32727 -121.798 -420.665 -2.08661 -123.626 -420.665 -2.08661 -121.217 -420.665 -1.70367 -120.718 -420.665 -1.20471 -124.508 -420.665 -1.20471 -120.335 -420.665 -0.623596 -124.749 -420.665 -0.623596 -120.094 -420.665 0 -124.831 -420.665 0 -120.012 -420.665 0 -91.012 -420.665 0 -91.012 -420.665 0.623596 -124.749 -420.665 0.623596 -120.094 -420.665 1.20471 -120.335 -420.665 1.70367 -124.125 -420.665 1.70367 -120.718 -420.665 2.08661 -123.626 -420.665 2.08661 -121.217 -420.665 2.32727 -123.045 -420.665 2.32727 -121.798 -420.665 2.40942 -122.421 -420.665 8.12927 -152.76 -420.665 8.12927 -92.0822 -420.665 8.12927 -92.0822 -420.665 15.7047 -95.22 -420.665 15.7047 -95.22 -420.665 17.2359 -148.448 -420.665 22.2098 -144.631 -420.665 22.2098 -144.631 -420.665 22.2098 -100.212 -420.665 22.2098 -100.212 -420.665 26.0264 -105.185 -420.665 27.2014 -138.126 -420.665 27.2014 -138.126 -420.665 27.2014 -106.717 -420.665 27.2014 -106.717 -420.665 30.3392 -130.551 -420.665 30.3392 -130.551 -420.665 30.3392 -114.292 -420.665 30.3392 -114.292 -420.665 31.4094 -122.421 -420.665 31.4094 -122.421 -405 -65.1 -176.421 -405 -65.1 -68.4214 -405 -60 -176.421 -405 -60 -68.4214 -405 -58.4471 -176.626 -405 -58.4471 -68.2168 -405 -57 -177.225 -405 -57 -67.6176 -405 -55.7574 -178.179 -405 -55.7574 -66.6639 -405 -54.8038 -179.421 -405 -54.8038 -65.4214 -405 -54.2045 -180.868 -405 -54.2045 -63.9742 -405 -54 -187.521 -405 -54 -182.421 -405 -54 -62.4214 -405 -54 -57.3213 -405 -45.2911 -134.557 -405 -33.1554 -155.577 -405 -33.1554 -89.2659 -405 -23.4444 -163.028 -405 -23.4444 -81.8145 -405 -12.1357 -167.712 -405 -12.1357 -77.1301 -405 -0.000122 -52.4214 -405 0 -192.421 -405 0 -75.5325 -405 12.1357 -167.712 -405 12.1357 -77.1301 -405 23.4444 -163.028 -405 23.4444 -81.8145 -405 33.1554 -155.577 -405 33.1554 -89.2659 -405 40.6069 -145.866 -405 40.6069 -98.9769 -405 45.2911 -134.557 -405 45.2911 -110.286 -405 46.8889 -122.421 -405 54 -187.521 -405 54 -182.421 -405 54 -62.4214 -405 54 -57.3213 -405 54.2045 -180.868 -405 54.2045 -63.9742 -405 54.8038 -179.421 -405 54.8038 -65.4214 -405 55.7574 -178.179 -405 55.7574 -66.6639 -405 57 -177.225 -405 57 -67.6176 -405 58.4471 -176.626 -405 58.4471 -68.2168 -405 60 -176.421 -405 60 -68.4214 -405 65.1 -176.421 -405 65.1 -68.4214 -405 70 -122.421 -215 -65.1 -176.421 -215 -65.1 -176.421 -215 -65.1 -68.4214 -215 -65.1 -68.4214 -215 -60 -176.421 -215 -60 -68.4214 -215 -58.4471 -176.626 -215 -58.4471 -68.2168 -215 -57 -177.225 -215 -57 -67.6176 -215 -55.7574 -178.179 -215 -55.7574 -66.6639 -215 -54.8038 -179.421 -215 -54.8038 -65.4214 -215 -54.2045 -180.868 -215 -54.2045 -63.9742 -215 -54 -187.521 -215 -54 -187.521 -215 -54 -182.421 -215 -54 -62.4214 -215 -54 -57.3213 -215 -54 -57.3213 -215 54 -187.521 -215 54 -187.521 -215 54 -182.421 -215 54 -62.4214 -215 54 -57.3213 -215 54 -57.3213 -215 54.2045 -180.868 -215 54.2045 -63.9742 -215 54.8038 -179.421 -215 54.8038 -65.4214 -215 55.7574 -178.179 -215 55.7574 -66.6639 -215 57 -177.225 -215 57 -67.6176 -215 58.4471 -176.626 -215 58.4471 -68.2168 -215 60 -176.421 -215 60 -68.4214 -215 65.1 -176.421 -215 65.1 -176.421 -215 65.1 -68.4214 -215 65.1 -68.4214 72.7724 -325 18.1438 71.6947 -329.774 2.73035 61.763 -342.274 -9.10571 46.7711 -357.725 -12.8436 32.4454 -370.225 -7.05554 24.2574 -375 6.04773 25.3355 -370.225 21.4607 35.2671 -357.725 33.2966 50.2589 -342.275 37.0345 64.5847 -329.775 31.2466 93.4748 -329.775 38.4497 91.2777 -342.275 47.2617 91.2777 -357.725 47.2617 93.4748 -370.225 38.4497 97.0297 -375 24.1919 100.585 -370.225 9.93347 102.782 -357.725 1.12146 102.782 -342.274 1.12146 100.585 -329.774 9.93347 97.0297 -325 24.1919 72.7724 -325 18.1438 97.0297 -325 24.1919 100.585 -329.774 9.93347 71.6947 -329.774 2.73035 71.6947 -329.774 2.73035 100.585 -329.774 9.93347 102.782 -342.274 1.12146 61.763 -342.274 -9.10571 61.763 -342.274 -9.10571 102.782 -342.274 1.12146 102.782 -357.725 1.12146 46.7711 -357.725 -12.8436 46.7711 -357.725 -12.8436 102.782 -357.725 1.12146 100.585 -370.225 9.93347 32.4454 -370.225 -7.05554 32.4454 -370.225 -7.05554 100.585 -370.225 9.93347 97.0297 -375 24.1919 24.2574 -375 6.04773 24.2574 -375 6.04773 97.0297 -375 24.1919 93.4748 -370.225 38.4497 25.3355 -370.225 21.4607 25.3355 -370.225 21.4607 93.4748 -370.225 38.4497 91.2777 -357.725 47.2617 35.2671 -357.725 33.2966 35.2671 -357.725 33.2966 91.2777 -357.725 47.2617 91.2777 -342.275 47.2617 50.2589 -342.275 37.0345 50.2589 -342.275 37.0345 91.2777 -342.275 47.2617 93.4748 -329.775 38.4497 64.5847 -329.775 31.2466 64.5847 -329.775 31.2466 93.4748 -329.775 38.4497 97.0297 -325 24.1919 72.7724 -325 18.1438 91.2777 -342.275 47.262 91.2777 -342.275 47.262 91.2777 -357.725 47.262 91.2777 -357.725 47.262 93.4748 -329.775 38.45 93.4748 -329.775 38.45 93.4748 -370.225 38.45 93.4748 -370.225 38.45 97.0297 -325 24.1919 97.0297 -325 24.1919 97.0298 -375 24.1918 97.0298 -375 24.1918 100.585 -370.225 9.93372 100.585 -370.225 9.93372 100.585 -329.775 9.93372 100.585 -329.775 9.93372 102.782 -357.725 1.1217 102.782 -357.725 1.1217 102.782 -342.275 1.1217 102.782 -342.275 1.1217 118.04 -327.281 44.575 118.21 -339.541 53.9769 118.21 -339.541 53.9769 120.692 -322.598 30.0914 120.692 -322.598 30.0914 120.692 -322.598 30.0914 121.134 -354.695 54.7061 125.15 -327.281 16.0586 125.698 -366.955 46.484 125.698 -366.955 46.484 125.698 -366.955 46.484 129.714 -339.541 7.83655 129.714 -339.541 7.83655 130.156 -371.638 32.4512 130.156 -371.638 32.4512 132.638 -354.695 8.5658 132.638 -354.695 8.5658 132.807 -366.955 17.9678 132.807 -366.955 17.9678 141.662 -319.896 50.4645 141.662 -319.896 50.4645 141.662 -319.896 50.4645 143.444 -315.485 35.7643 143.444 -315.485 35.7643 143.444 -315.485 35.7643 144.107 -331.445 60.4337 144.107 -331.445 60.4337 148.772 -319.896 21.9481 148.772 -319.896 21.9481 149.844 -345.719 61.8641 149.844 -345.719 61.8641 155.611 -331.445 14.2935 156.682 -357.268 54.2094 161.348 -345.719 15.7238 161.348 -345.719 15.7238 162.01 -361.679 40.3932 162.01 -361.679 40.3932 163.432 -307.904 55.8923 163.432 -307.904 55.8923 163.792 -357.268 25.6931 163.792 -357.268 25.6931 164.413 -303.934 40.9924 164.413 -303.934 40.9924 164.413 -303.934 40.9924 167.973 -318.297 66.3844 167.973 -318.297 66.3844 170.542 -307.904 27.376 170.542 -307.904 27.376 176.302 -331.144 68.4609 176.302 -331.144 68.4609 179.477 -318.297 20.244 182.513 -291.765 60.6498 182.792 -288.388 45.575 182.792 -288.388 45.575 182.792 -288.388 45.575 185.238 -341.537 61.3291 187.806 -331.144 22.3207 187.806 -331.144 22.3207 188.893 -300.603 71.6001 189.623 -291.764 32.1335 189.623 -291.764 32.1335 191.367 -345.507 47.7126 192.348 -341.537 32.8129 192.348 -341.537 32.8129 197.876 -269.446 49.3357 198.173 -272.099 64.5542 199.493 -311.529 74.2432 199.493 -311.529 74.2432 200.397 -300.603 25.4598 205.283 -272.099 36.038 205.283 -272.099 36.038 206.061 -279.044 75.8806 206.061 -279.044 75.8806 209.084 -247.835 52.1301 209.084 -247.835 52.1301 209.084 -247.835 52.1301 209.809 -249.663 67.4554 209.809 -249.663 67.4554 210.267 -320.368 67.5695 210.267 -320.368 67.5695 210.267 -320.368 67.5695 210.997 -311.529 28.1029 210.997 -311.529 28.1029 215.986 -224.386 53.851 215.986 -224.386 53.851 215.986 -224.386 53.851 216.919 -249.663 38.9392 216.919 -249.663 38.9392 216.919 -249.663 38.9392 216.975 -225.318 69.2421 216.975 -225.318 69.2421 216.975 -225.318 69.2421 217.098 -323.744 54.1282 217.377 -320.368 39.0532 217.377 -320.368 39.0532 217.565 -279.044 29.7404 217.565 -279.044 29.7404 218.317 -200 54.4321 218.317 -200 54.4321 218.526 -287.628 78.9885 218.526 -287.628 78.9885 218.818 -254.446 79.0613 218.818 -254.446 79.0613 219.394 -200 69.8453 219.394 -200 69.8453 224.085 -225.318 40.7257 224.085 -225.318 40.7257 224.085 -225.318 40.7257 226.504 -200 41.329 226.504 -200 41.329 226.673 -227.756 81.02 229.326 -200 81.6813 229.326 -200 81.6813 230.03 -287.628 32.8483 230.322 -254.446 32.921 230.322 -254.446 32.921 230.808 -294.572 72.6909 230.808 -294.572 72.6909 232.668 -260.359 82.5146 232.668 -260.359 82.5146 237.918 -294.572 44.1747 237.918 -294.572 44.1747 238.177 -227.756 34.8796 238.177 -227.756 34.8796 238.215 -297.225 59.3932 238.215 -297.225 59.3932 240.83 -200 35.541 240.83 -200 35.541 241.377 -230.771 84.686 241.377 -230.771 84.686 244.172 -260.359 36.3744 244.172 -260.359 36.3744 244.318 -200 85.4192 244.318 -200 85.4192 246.071 -265.143 76.4965 246.071 -265.143 76.4965 252.881 -230.771 38.5457 253.181 -265.142 47.9802 253.906 -266.97 63.3055 253.906 -266.97 63.3055 255.47 -233.209 78.84 255.822 -200 39.2789 255.822 -200 39.2789 258.644 -200 79.6312 258.644 -200 79.6312 262.58 -233.209 50.3237 262.58 -233.209 50.3237 263.569 -234.141 65.7147 263.569 -234.141 65.7147 265.753 -200 51.115 265.753 -200 51.115 266.831 -200 66.5282 266.831 -200 66.5282 258.644 -200 79.6313 244.318 -200 85.4193 229.326 -200 81.6814 219.394 -200 69.8453 218.317 -200 54.4321 226.504 -200 41.3291 240.83 -200 35.5411 255.822 -200 39.2791 265.754 -200 51.1151 266.831 -200 66.5283 266.831 -117 66.5283 265.754 -117 51.1151 255.822 -117 39.2791 240.83 -117 35.5411 226.504 -117 41.3291 218.317 -117 54.4321 219.394 -117 69.8453 229.326 -117 81.6814 244.318 -117 85.4193 258.644 -117 79.6313 258.644 -200 79.6313 258.644 -117 79.6313 244.318 -117 85.4193 244.318 -200 85.4193 244.318 -200 85.4193 244.318 -117 85.4193 229.326 -117 81.6814 229.326 -200 81.6814 229.326 -200 81.6814 229.326 -117 81.6814 219.394 -117 69.8453 219.394 -200 69.8453 219.394 -200 69.8453 219.394 -117 69.8453 218.317 -117 54.4321 218.317 -200 54.4321 218.317 -200 54.4321 218.317 -117 54.4321 226.504 -117 41.3291 226.504 -200 41.3291 226.504 -200 41.3291 226.504 -117 41.3291 240.83 -117 35.5411 240.83 -200 35.5411 240.83 -200 35.5411 240.83 -117 35.5411 255.822 -117 39.2791 255.822 -200 39.2791 255.822 -200 39.2791 255.822 -117 39.2791 265.754 -117 51.1151 265.754 -200 51.1151 265.754 -200 51.1151 265.754 -117 51.1151 266.831 -117 66.5283 266.831 -200 66.5283 266.831 -200 66.5283 266.831 -117 66.5283 258.644 -117 79.6313 258.644 -200 79.6313 209.797 -147 5.93042 212.64 -147 6.63916 212.64 -147 90.4143 188.733 -147 90.4143 281.488 -147 90.4143 275.351 -147 115.03 188.024 -147 93.2571 188.733 -147 90.4143 188.024 -147 93.2571 188.024 -117 93.2571 209.797 -117 5.93042 209.797 -147 5.93042 209.797 -147 5.93042 209.797 -117 5.93042 297.124 -117 27.7034 297.124 -147 27.7034 297.124 -147 27.7034 297.124 -117 27.7034 275.351 -117 115.03 275.351 -147 115.03 275.351 -147 115.03 275.351 -117 115.03 188.024 -117 93.2571 188.024 -147 93.2571 188.733 -117 90.4143 188.024 -117 93.2571 275.351 -117 115.03 281.488 -117 90.4143 297.124 -117 27.7034 272.508 -117 21.566 272.508 -117 90.4143 281.488 -117 90.4143 218.317 -147 54.4321 218.317 -117 54.4321 219.394 -147 69.8455 219.394 -117 69.8455 226.504 -147 41.3291 226.504 -117 41.3291 229.326 -147 81.6814 229.326 -117 81.6814 240.83 -147 35.5411 240.83 -117 35.5411 244.318 -147 85.4193 244.318 -117 85.4193 255.822 -147 39.2791 255.822 -117 39.2791 258.644 -147 79.6313 258.644 -117 79.6313 265.753 -147 51.1151 265.753 -117 51.1151 266.831 -147 66.5283 266.831 -117 66.5283 188.733 -117 90.4143 196.23 -117 60.3438 203.728 -117 30.2732 209.797 -117 5.93042 212.367 -117 6.57117 212.367 -117 30.2732 212.367 -117 60.3438 212.367 -117 90.4143 212.64 -147 6.63916 212.64 -147 30.2732 212.64 -147 60.3438 212.64 -147 90.4143 218.73 -117 60.3438 242.438 -117 14.0686 242.438 -117 30.2732 242.438 -117 35.942 242.438 -117 90.4143 242.71 -147 14.1366 242.71 -147 30.2732 242.71 -147 36.01 242.71 -147 90.4143 266.399 -147 60.3438 272.508 -117 21.566 272.508 -117 30.2732 272.508 -117 60.3438 272.508 -117 90.4143 272.781 -147 21.634 272.781 -147 30.2732 272.781 -147 60.3438 272.781 -147 90.4143 281.488 -147 90.4143 288.986 -147 60.3438 296.483 -147 30.2732 297.124 -147 27.7034 420.899 88.9999 18.4998 401.5 88.9999 -0.899536 375 88.9999 -8.00024 348.5 88.9999 -0.899536 329.101 88.9999 18.4998 322 88.9999 44.9998 329.101 88.9999 71.4998 348.5 88.9999 90.899 375 88.9999 97.9998 401.5 88.9999 90.899 420.899 88.9999 71.4998 428 88.9999 44.9998 428 84.9999 44.9998 420.899 84.9999 71.4998 401.5 84.9999 90.899 375 84.9999 97.9998 348.5 84.9999 90.899 329.101 84.9999 71.4998 322 84.9999 44.9998 329.101 84.9999 18.4998 348.5 84.9999 -0.899536 375 84.9999 -8.00024 401.5 84.9999 -0.899536 420.899 84.9999 18.4998 420.899 88.9999 18.4998 420.899 84.9999 18.4998 401.5 84.9999 -0.899536 401.5 88.9999 -0.899536 401.5 88.9999 -0.899536 401.5 84.9999 -0.899536 375 84.9999 -8.00024 375 88.9999 -8.00024 375 88.9999 -8.00024 375 84.9999 -8.00024 348.5 84.9999 -0.899536 348.5 88.9999 -0.899536 348.5 88.9999 -0.899536 348.5 84.9999 -0.899536 329.101 84.9999 18.4998 329.101 88.9999 18.4998 329.101 88.9999 18.4998 329.101 84.9999 18.4998 322 84.9999 44.9998 322 88.9999 44.9998 322 88.9999 44.9998 322 84.9999 44.9998 329.101 84.9999 71.4998 329.101 88.9999 71.4998 329.101 88.9999 71.4998 329.101 84.9999 71.4998 348.5 84.9999 90.899 348.5 88.9999 90.899 348.5 88.9999 90.899 348.5 84.9999 90.899 375 84.9999 97.9998 375 88.9999 97.9998 375 88.9999 97.9998 375 84.9999 97.9998 401.5 84.9999 90.899 401.5 88.9999 90.899 401.5 88.9999 90.899 401.5 84.9999 90.899 420.899 84.9999 71.4998 420.899 88.9999 71.4998 420.899 88.9999 71.4998 420.899 84.9999 71.4998 428 84.9999 44.9998 428 88.9999 44.9998 428 88.9999 44.9998 428 84.9999 44.9998 420.899 84.9999 18.4998 420.899 88.9999 18.4998 152.7 -69.9997 -55.5785 124.482 -69.9997 -104.453 81.25 -69.9997 -140.729 28.2178 -69.9997 -160.031 -28.2178 -69.9997 -160.031 -81.25 -69.9997 -140.729 -124.482 -69.9997 -104.453 -152.7 -69.9997 -55.5785 -162.5 -69.9997 -0.000244 -152.7 -69.9997 55.578 -124.482 -69.9997 104.453 -81.25 -69.9997 140.729 -28.2178 -69.9997 160.031 28.2178 -69.9997 160.031 81.25 -69.9997 140.729 124.482 -69.9997 104.453 152.7 -69.9997 55.578 162.5 -69.9997 -0.000244 162.5 -131.5 -0.000244 152.7 -131.5 55.578 124.482 -131.5 104.453 81.25 -131.5 140.729 28.2178 -131.5 160.031 -28.2178 -131.5 160.031 -81.25 -131.5 140.729 -124.482 -131.5 104.453 -152.7 -131.5 55.578 -162.5 -131.5 -0.000244 -152.7 -131.5 -55.5785 -124.482 -131.5 -104.453 -81.25 -131.5 -140.729 -28.2178 -131.5 -160.031 28.2178 -131.5 -160.031 81.25 -131.5 -140.729 124.482 -131.5 -104.453 152.7 -131.5 -55.5785 152.7 -69.9997 -55.5785 152.7 -131.5 -55.5785 124.482 -131.5 -104.453 124.482 -69.9997 -104.453 124.482 -69.9997 -104.453 124.482 -131.5 -104.453 81.25 -131.5 -140.729 81.25 -69.9997 -140.729 81.25 -69.9997 -140.729 81.25 -131.5 -140.729 28.2178 -131.5 -160.031 28.2178 -69.9997 -160.031 28.2178 -69.9997 -160.031 28.2178 -131.5 -160.031 -28.2178 -131.5 -160.031 -28.2178 -69.9997 -160.031 -28.2178 -69.9997 -160.031 -28.2178 -131.5 -160.031 -81.25 -131.5 -140.729 -81.25 -69.9997 -140.729 -81.25 -69.9997 -140.729 -81.25 -131.5 -140.729 -124.482 -131.5 -104.453 -124.482 -69.9997 -104.453 -124.482 -69.9997 -104.453 -124.482 -131.5 -104.453 -152.7 -131.5 -55.5785 -152.7 -69.9997 -55.5785 -152.7 -69.9997 -55.5785 -152.7 -131.5 -55.5785 -162.5 -131.5 -0.000244 -162.5 -69.9997 -0.000244 -162.5 -69.9997 -0.000244 -162.5 -131.5 -0.000244 -152.7 -131.5 55.578 -152.7 -69.9997 55.578 -152.7 -69.9997 55.578 -152.7 -131.5 55.578 -124.482 -131.5 104.453 -124.482 -69.9997 104.453 -124.482 -69.9997 104.453 -124.482 -131.5 104.453 -81.25 -131.5 140.729 -81.25 -69.9997 140.729 -81.25 -69.9997 140.729 -81.25 -131.5 140.729 -28.2178 -131.5 160.031 -28.2178 -69.9997 160.031 -28.2178 -69.9997 160.031 -28.2178 -131.5 160.031 28.2178 -131.5 160.031 28.2178 -69.9997 160.031 28.2178 -69.9997 160.031 28.2178 -131.5 160.031 81.25 -131.5 140.729 81.25 -69.9997 140.729 81.25 -69.9997 140.729 81.25 -131.5 140.729 124.482 -131.5 104.453 124.482 -69.9997 104.453 124.482 -69.9997 104.453 124.482 -131.5 104.453 152.7 -131.5 55.578 152.7 -69.9997 55.578 152.7 -69.9997 55.578 152.7 -131.5 55.578 162.5 -131.5 -0.000244 162.5 -69.9997 -0.000244 162.5 -69.9997 -0.000244 162.5 -131.5 -0.000244 152.7 -131.5 -55.5785 152.7 -69.9997 -55.5785 176.109 85.0005 -78.8334 176.109 66.0006 -98.2223 105.001 66.0006 -112.69 105.001 66.0006 202.689 105.001 66.0006 -112.69 176.109 66.0006 -98.2223 176.109 66.0006 188.222 176.109 66.0006 188.222 176.109 66.0006 -98.2223 176.109 85.0005 -78.8334 176.109 85.0005 168.833 176.109 85.0005 168.833 176.109 85.0005 -78.8334 105.001 66.0006 -112.69 105.001 66.0006 202.689 176.109 85.0005 168.833 105.001 66.0006 202.689 176.109 66.0006 188.222 -54.636 -69.9988 -172.133 -54.636 -69.9988 -172.133 -54.636 -69.9988 -172.133 -54.636 -69.9988 -172.133 -26.9996 -82.0001 -220.001 -26.9996 -82.0001 -220.001 0.000336 -82.0001 -183.001 0.000336 -82.0001 -183.001 0.000336 -69.9988 -183.001 0.000336 -69.9988 -183.001 27.0003 -82.0001 -220.001 27.0003 -82.0001 -220.001 27.0003 -82.0001 -220.001 54.6369 -69.9988 -172.133 54.6369 -69.9988 -172.133 54.6369 -69.9988 -172.133 76.1397 -50.0001 -134.889 76.1397 -50.0001 -134.889 89.4905 -69.9988 -111.765 89.4905 -69.9988 -111.765 89.4905 -69.9988 -111.765 -70.6758 -69.9988 -144.351 -70.6758 -69.9988 -144.351 -60.1318 -50.0001 -162.614 -54.636 -82.0001 -172.133 -26.9996 -50.0001 -220.001 -26.9996 -50.0001 -220.001 27.0003 -50.0001 -220.001 27.0003 -50.0001 -220.001 54.6369 -82.0001 -172.133 54.6369 -69.9988 -172.133 494 -81.3172 126.317 494 -82.896 123.954 494 -65.6006 123.954 494 -50.0703 139.803 494 -61.1344 139.803 494 49.2751 147.727 494 44.0086 151.246 494 21.861 155.651 494 16.1358 155.651 494 16.1358 147.727 494 -15.5611 147.727 494 -15.5611 155.651 494 -21.861 155.651 494 -44.0085 151.246 494 -49.275 147.727 494 -55.1821 143.78 494 -55.1821 143.765 494 -47.2579 143.765 494 -47.2579 147.727 494 -49.275 147.727 494 -94.8032 92.2576 494 -86.879 92.2576 494 -86.879 116.03 494 -88.1908 116.03 494 -94.8032 106.134 494 49.2751 147.727 494 47.8327 147.727 494 47.8327 143.765 494 55.2049 143.765 494 47.8327 139.874 494 47.8327 147.727 494 16.1358 147.727 494 16.1358 139.874 494 -86.879 -27.9937 494 -86.879 -2.83301 494 -94.8032 -2.83301 494 -94.8032 -16.1342 494 -94.8032 -2.83301 494 -85.0001 -2.83301 494 -85.0001 92.2576 494 -94.8032 92.2576 494 -15.5611 155.651 494 -15.5611 139.874 494 16.1358 139.874 494 16.1358 155.651 494 -15.5611 139.874 494 -15.5611 147.727 494 -47.2579 147.727 494 -47.2579 139.874 494 -85.0001 104.157 494 -78.9548 110.327 494 -78.9548 116.03 494 -86.879 116.03 494 -86.879 108.106 494 -85.0001 104.157 494 -86.879 108.106 494 -86.879 92.2576 494 -85.0001 92.2576 494 -88.1908 116.03 494 -78.9548 116.03 494 -78.9548 123.954 494 -82.896 123.954 494 81.3173 126.317 494 61.1345 139.803 494 50.07 139.803 494 81.1303 108.106 494 93.4856 108.106 494 61.1345 139.803 494 55.2049 143.765 494 51.7948 143.765 494 49.9999 139.874 494 50.07 139.803 494 51.7948 143.765 494 47.8327 143.765 494 47.8327 139.874 494 49.9999 139.874 494 -50.0703 139.803 494 -50.0002 139.874 494 -51.22 143.765 494 -55.1821 143.765 494 -55.1821 139.803 494 -50.0002 139.874 494 -47.2579 139.874 494 -47.2579 143.765 494 -51.22 143.765 494 21.861 155.651 494 -0.000113 160 494 -21.861 155.651 438.071 -85.0001 44.9998 438.071 -85.0001 44.9998 438.073 84.9999 44.9998 438.073 84.9999 44.9998 456.184 -0.000108 147.568 456.184 -0.000108 147.568 456.184 -0.000281 -57.5688 456.184 -0.000281 -57.5688 462.965 -85.0001 110.471 462.965 -85.0001 110.471 462.965 -85.0001 110.471 462.965 -85.0001 -20.4718 462.965 -85.0001 -20.4718 462.965 -85.0001 -20.4718 462.965 84.9999 110.472 462.965 84.9999 110.472 462.965 84.9999 110.472 462.965 84.9999 -20.4718 462.965 84.9999 -20.4718 462.965 84.9999 -20.4718 469 -115 44.9998 469 -115 44.9998 469 -115 44.9998 469 -115 44.9998 469 -0.000114 -70.0002 469 -0.000114 -70.0002 469 -0.000114 -70.0002 469 -0.000114 -70.0002 469 -0.000114 160 469 -0.000114 160 469 -0.000114 160 469 -0.000114 160 469 115 44.9998 469 115 44.9998 469 115 44.9998 494 -94.8032 -16.1342 494 -94.8032 106.134 494 -86.879 -18.6814 494 -86.879 -2.83301 494 -85.0001 -2.83301 494 -60.2737 -50.3783 494 -60.2737 -50.3783 494 -55.1821 -50.3783 494 55.7569 -50.3783 494 60.2738 -50.3783 494 60.2738 -50.3783 494 81.1303 108.106 494 87.4538 -27.1335 494 87.4538 -18.6814 494 87.4538 108.106 494 93.1014 -18.6814 494 93.4856 108.106 494 -115 44.9998 494 -115 44.9998 494 -106.246 0.991211 494 -106.246 0.991211 494 -106.246 89.0084 494 -106.246 89.0084 494 -85.0001 -14.1578 494 -85.0001 -14.1578 494 -85.0001 104.157 494 -81.3172 -36.3174 494 -81.3172 -36.3174 494 -81.3172 126.317 494 -50.0002 139.874 494 -44.0085 -61.2463 494 -44.0085 -61.2463 494 -44.0085 151.246 494 -0.000113 -70.0002 494 -0.000113 -70.0002 494 -0.000113 160 494 44.0086 -61.2463 494 44.0086 -61.2463 494 44.0086 151.246 494 49.9999 139.874 494 81.3173 -36.3174 494 81.3173 -36.3174 494 81.3173 126.317 494 84.9999 104.157 494 84.9999 104.157 494 106.246 0.991211 494 106.246 0.991211 494 106.246 89.0084 494 106.246 89.0084 445.292 -85.0001 9.79114 445.292 -85.0001 9.79114 445.292 -85.0001 80.2086 445.292 -85.0001 80.2086 445.292 84.9999 9.79224 445.292 84.9999 9.79224 445.292 84.9999 80.2075 445.292 84.9999 80.2075 460.622 -75.5709 120.571 460.622 -75.5709 -30.5708 460.622 75.5705 120.571 460.622 75.5708 -30.5712 463.284 41.8867 146.124 463.284 41.8867 146.124 463.284 -41.8872 -56.1239 463.284 -41.8872 -56.1239 463.284 -41.8871 146.124 463.284 -41.8871 146.124 463.285 41.887 -56.1246 463.285 41.887 -56.1246 467.307 -50 -55.3054 467.307 -49.9999 145.305 467.307 50 145.305 467.307 50.0002 -55.3063 469 -106.246 0.991211 469 -106.246 0.991211 469 -106.246 0.991211 469 -106.246 89.0084 469 -106.246 89.0084 469 -106.246 89.0084 469 -81.3172 -36.3174 469 -81.3172 -36.3174 469 -81.3172 126.317 469 -81.3172 126.317 469 -44.0085 -61.2463 469 -44.0085 -61.2463 469 -44.0085 -61.2463 469 -44.0085 151.246 469 -44.0085 151.246 469 -44.0085 151.246 469 44.0086 -61.2463 469 44.0086 -61.2463 469 44.0086 -61.2463 469 44.0086 151.246 469 44.0086 151.246 469 44.0086 151.246 469 81.3173 -36.3174 469 81.3173 -36.3174 469 81.3173 126.317 469 81.3173 126.317 469 106.246 0.991211 469 106.246 0.991211 469 106.246 0.991211 469 106.246 89.0084 469 106.246 89.0084 469 106.246 89.0084 469 115 44.9998 494 -50.0001 -49.8746 494 49.9998 -49.8756 494 84.9999 -14.1572 494 115 44.9998 494 -86.879 -27.9937 494 -55.1821 139.803 494 -55.1821 143.78 494 -61.1344 139.803 494 -78.9548 123.954 494 -78.9548 110.327 494 -65.6006 123.954 179.539 -116.994 98.3558 179.539 -116.994 98.3558 179.539 -116.994 98.3558 204.699 -116.994 -2.55505 204.699 -116.994 -2.55505 204.699 -116.994 -2.55505 211.776 -69.9942 106.395 211.776 -69.9942 106.395 211.777 -116.994 106.394 211.777 -116.994 106.394 211.777 -116.994 106.394 211.777 -156.994 106.394 211.777 -156.994 106.394 211.777 -156.994 106.394 236.937 -156.994 5.48279 236.937 -156.994 5.48279 236.937 -156.994 5.48279 236.937 -116.994 5.48303 236.937 -116.994 5.48303 236.937 -116.994 5.48303 236.937 -69.9941 5.48169 236.937 -69.9941 5.48169 140.936 -69.9944 95.0626 140.936 -69.9944 95.0626 140.936 -156.994 95.0625 140.936 -156.994 95.0625 164.95 -69.9943 41.1265 164.951 -156.994 41.1263 169.069 -69.9943 -17.77 169.069 -69.9943 -17.77 169.069 -156.994 -17.7701 169.069 -156.994 -17.7701 179.539 -156.994 98.3557 179.539 -156.994 98.3557 196.482 -156.995 132.529 196.482 -156.995 132.529 196.482 -69.9942 132.529 196.482 -69.9942 132.529 204.699 -156.994 -2.55518 204.699 -156.994 -2.55518 235.702 -156.994 -24.7736 235.702 -156.994 -24.7736 235.702 -69.9941 -24.7736 235.702 -69.9941 -24.7736 -195 -66.0001 263.725 -195 -66.0001 263.725 -195 -82.0002 267.421 -195 -82.0002 267.421 -195 -65.9999 -193.422 -195 -65.9999 -193.422 -195 -65.9999 -193.422 -195 -69.9992 -169.644 -195 -69.9992 -169.644 -195 -82.0001 -177.422 -195 -82.0001 -177.422 -172 -82.0001 -177.422 -172 -82.0001 -177.422 -172 -82.0001 -177.422 -159.999 -69.9992 -162.523 -159.999 -69.9992 -162.523 -156 -66.0001 283.421 -156 -66.0001 283.421 -156 -66.0001 283.421 -156 -66.0001 255.79 -156 -66.0001 255.79 -195 -66.0001 283.421 -195 -66.0001 283.421 -195 -69.9992 259.644 -195 -65.9999 -173.726 -172 -82.0002 267.421 -172 -82.0002 267.421 -159.999 -69.9992 252.523 -156 -65.9999 -165.791 -156 -65.9999 -193.422 -156 -65.9999 -193.422 -156 66 -193.422 -195 66 -193.422 -195 82.0002 -177.422 -172 82.0002 -177.422 -172 82.0002 -177.422 -172 82.0002 267.421 -156 66.0001 283.421 -156 66 -193.422 -156 66 -193.422 -156 66.0001 283.421 -195 66.0001 283.421 -195 66 -193.422 -195 66 -193.422 -195 66.0001 283.421 -195 82.0002 267.421 -195 82.0002 -177.422 -195 82.0002 -177.422 -195 82.0002 267.421 -172 82.0002 267.421 -172 82.0002 -177.422 -172 82.0002 267.421 -195 82.0002 267.421 -195 66.0001 283.421 -156 66.0001 283.421 -147 49.9999 -232.578 -147 49.9999 -232.578 -147 49.9999 -180.288 -147 49.9999 -180.288 -147 65.9999 -163.96 -147 65.9999 -163.96 -147 65.9999 -216.25 -147 65.9999 -216.25 -141.004 49.9999 -205.531 -141.003 65.9999 -189.203 -121.069 49.9999 -181.131 -121.068 65.9999 -164.803 -95.7594 49.9999 -169.863 -95.7594 49.9999 -169.863 -95.7593 65.9999 -153.535 -95.7593 65.9999 -153.535 -147 -50.0001 -232.578 -147 -50.0001 -232.578 -147 -50.0001 -180.288 -147 -50.0001 -180.288 -147 49.9999 -232.578 -147 49.9999 -232.578 -147 49.9999 -180.288 -147 49.9999 -180.288 -141.004 -50.0001 -205.531 -141.004 49.9999 -205.531 -121.069 -50.0001 -181.131 -121.069 49.9999 -181.131 -95.7595 -50.0001 -169.863 -95.7595 -50.0001 -169.863 -95.7594 49.9999 -169.863 -95.7594 49.9999 -169.863 -147 -50.0001 -232.578 -147 -50.0001 -232.578 -147 -50.0001 -180.288 -147 -50.0001 -180.288 -147 -66.0001 -216.25 -147 -66.0001 -216.25 -147 -66.0001 -163.96 -147 -66.0001 -163.96 -141.004 -50.0001 -205.531 -141.003 -66.0001 -189.203 -121.069 -50.0001 -181.131 -121.068 -66.0001 -164.803 -95.7594 -50.0001 -169.863 -95.7594 -50.0001 -169.863 -95.7593 -66.0001 -153.535 -95.7593 -66.0001 -153.535 -195 -66.0001 -260 -195 -66.0001 -260 -195 -66.0001 -173.725 -195 -66.0001 -173.725 -195 -50 -190.053 -195 49.9999 -190.053 -195 65.9999 -260 -195 65.9999 -260 -195 65.9999 -173.725 -195 65.9999 -173.725 -147 -66.0001 -259.999 -147 -66.0001 -259.999 -147 -66.0001 -163.959 -147 -66.0001 -163.959 -147 -50.0001 -180.287 -147 50 -180.287 -147 65.9999 -259.999 -147 65.9999 -259.999 -147 65.9999 -163.959 -147 65.9999 -163.959 285 -66.0001 182.396 285 -66.0001 182.396 285 -66.0001 258.343 285 -66.0001 258.343 285 49.9999 182.396 285 65.9999 166.068 285 65.9999 166.068 285 65.9999 258.343 285 65.9999 258.343 330 -66.0001 173.24 330 -66.0001 173.24 330 -66.0001 249.186 330 -66.0001 249.186 330 49.9999 173.24 330 65.9999 156.912 330 65.9999 156.912 330 65.9999 249.187 330 65.9999 249.187 -147 -50.0001 270.287 -147 -50.0001 270.287 -147 -50.0001 322.577 -147 -50.0001 322.577 -147 -66.0001 253.959 -147 -66.0001 253.959 -147 -66.0001 306.25 -147 -66.0001 306.25 -141.004 -50.0001 295.53 -141.004 -66.0001 279.202 -121.069 -50.0001 271.131 -121.069 -66.0001 254.803 -95.7596 -50.0001 259.862 -95.7596 -50.0001 259.862 -95.7595 -66.0001 243.534 -95.7595 -66.0001 243.534 -195 -66.0001 263.725 -195 -66.0001 263.725 -195 -66.0001 356 -195 -66.0001 356 -195 -50.0001 280.053 -195 49.9999 280.053 -195 65.9999 263.725 -195 65.9999 263.725 -195 65.9999 356 -195 65.9999 356 -147 -66.0001 253.958 -147 -66.0001 253.958 -147 -66.0001 346.233 -147 -66.0001 346.233 -147 -50.0001 270.286 -147 49.9999 270.286 -147 65.9999 253.958 -147 65.9999 253.958 -147 65.9999 346.233 -147 65.9999 346.233 -147 -50.0001 270.287 -147 -50.0001 270.287 -147 -50.0001 322.577 -147 -50.0001 322.577 -147 49.9999 270.287 -147 49.9999 270.287 -147 49.9999 322.577 -147 49.9999 322.577 -141.004 -50.0001 295.53 -141.004 49.9999 295.53 -121.069 -50.0001 271.131 -121.069 49.9999 271.131 -95.7596 -50.0001 259.862 -95.7596 -50.0001 259.862 -95.7596 49.9999 259.862 -95.7596 49.9999 259.862 -147 49.9999 270.287 -147 49.9999 270.287 -147 49.9999 322.577 -147 49.9999 322.577 -147 65.9999 253.959 -147 65.9999 253.959 -147 65.9999 306.25 -147 65.9999 306.25 -141.004 49.9999 295.53 -141.004 65.9999 279.202 -121.069 49.9999 271.131 -121.069 65.9999 254.803 -95.7596 49.9999 259.862 -95.7596 49.9999 259.862 -95.7595 65.9999 243.534 -95.7595 65.9999 243.534 -89.0001 -69.9996 238.078 -89.0001 -69.9996 238.078 -89.0001 -69.9996 238.078 235.702 -84.999 -24.7734 235.702 -84.999 -24.7734 250.547 -69.9997 168.995 330 -69.9997 152.831 330 -49.9996 173.241 494 -50.0001 139.875 494 -50.0001 139.875 494 -50.0001 139.875 -195 -69.9996 259.644 -195 -69.9996 259.644 -195 -49.9999 280.053 -195 -49.9999 280.053 -195 50 280.053 -195 50 280.053 -195 -69.9991 -169.644 -195 65.9999 263.725 -195 65.9999 263.725 -195 -50 -190.053 -195 -50 -190.053 -195 49.9998 -190.053 -195 49.9998 -190.053 -195 65.9999 -173.725 -195 65.9999 -173.725 -89.0001 -69.9996 238.078 -89 -69.9996 258.487 -89 -69.9996 258.487 -89 -69.9996 258.487 -89 -50.0003 258.487 -89 -50.0003 258.487 133.572 -69.9993 -102.795 147.226 -69.9993 -85.0011 147.226 -69.9993 -85.0011 161.601 -73.7154 -93.3005 164.209 -69.9994 -44.0012 167.681 -69.9994 -17.6241 167.681 -69.9994 -17.6241 176.109 84.9999 -78.833 176.109 84.9999 -78.833 176.109 84.9999 168.833 176.109 84.9999 168.833 176.109 65.9999 188.222 176.109 65.9999 188.222 176.109 65.9999 -98.2227 176.109 65.9999 -98.2227 202.904 -84.9989 121.555 204.832 -84.8914 118.26 205.248 -84.9989 118.5 205.248 -84.9989 118.5 206.596 -84.9989 115.247 214.066 -84.9989 97.2122 223.38 -83.7138 59.8544 225.872 -84.9989 -68.7098 228.925 -84.999 61.3398 228.925 -84.9989 -61.3395 233.766 -84.9989 -24.5699 233.766 -84.9989 -24.5699 235.542 -84.999 11.0773 235.702 -84.999 -24.7734 235.702 -69.9994 -24.7734 236.584 -84.999 -3.16309 236.713 -84.9345 0 236.781 -84.999 1.66724 237 -84.999 -0.000122 330 -69.9997 152.831 330 -69.9997 173.241 330 -69.9997 173.241 330 -69.9997 173.241 330 -49.9996 173.241 330 -49.9996 173.241 494 -50.0001 139.875 494 -50.0001 139.875 494 -85.0001 104.157 494 49.9998 139.875 494 49.9998 139.875 494.001 84.9999 104.157 494.001 84.9999 104.157 494.001 -85.0001 -14.1575 494.001 -50 -49.8748 494.001 -50 -49.8748 494.001 84.9999 -14.1573 494.001 84.9999 -14.1573 494.001 50 -49.8751 494.001 50 -49.8751 196.482 -84.9989 132.528 196.482 -69.9996 132.528 211.777 -84.9989 106.394 211.777 -69.9996 106.393 233.112 -84.9991 157.236 236.937 -84.999 5.48254 236.937 -69.9995 5.48267 643.501 83.1492 10.5582 643.501 63.6396 -18.6399 643.501 34.4415 -38.1494 643.501 0 -45.0002 643.501 -34.4415 -38.1494 643.501 -63.6396 -18.6399 643.501 -83.1492 10.5582 643.501 -90 44.9998 643.501 -83.1492 79.4413 643.501 -63.6396 108.639 643.501 -34.4415 128.149 643.501 0 135 643.501 34.4415 128.149 643.501 63.6396 108.639 643.501 83.1492 79.4413 643.501 90 44.9998 674.501 90 44.9998 674.501 83.1492 79.4413 674.501 63.6396 108.639 674.501 34.4415 128.149 674.501 0 135 674.501 -34.4415 128.149 674.501 -63.6396 108.639 674.501 -83.1492 79.4413 674.501 -90 44.9998 674.501 -83.1492 10.5582 674.501 -63.6396 -18.6399 674.501 -34.4415 -38.1494 674.501 0 -45.0002 674.501 34.4415 -38.1494 674.501 63.6396 -18.6399 674.501 83.1492 10.5582 643.501 90 44.9998 674.501 90 44.9998 674.501 83.1492 10.5582 643.501 83.1492 10.5582 643.501 83.1492 10.5582 674.501 83.1492 10.5582 674.501 63.6396 -18.6399 643.501 63.6396 -18.6399 643.501 63.6396 -18.6399 674.501 63.6396 -18.6399 674.501 34.4415 -38.1494 643.501 34.4415 -38.1494 643.501 34.4415 -38.1494 674.501 34.4415 -38.1494 674.501 0 -45.0002 643.501 0 -45.0002 643.501 0 -45.0002 674.501 0 -45.0002 674.501 -34.4415 -38.1494 643.501 -34.4415 -38.1494 643.501 -34.4415 -38.1494 674.501 -34.4415 -38.1494 674.501 -63.6396 -18.6399 643.501 -63.6396 -18.6399 643.501 -63.6396 -18.6399 674.501 -63.6396 -18.6399 674.501 -83.1492 10.5582 643.501 -83.1492 10.5582 643.501 -83.1492 10.5582 674.501 -83.1492 10.5582 674.501 -90 44.9998 643.501 -90 44.9998 643.501 -90 44.9998 674.501 -90 44.9998 674.501 -83.1492 79.4413 643.501 -83.1492 79.4413 643.501 -83.1492 79.4413 674.501 -83.1492 79.4413 674.501 -63.6396 108.639 643.501 -63.6396 108.639 643.501 -63.6396 108.639 674.501 -63.6396 108.639 674.501 -34.4415 128.149 643.501 -34.4415 128.149 643.501 -34.4415 128.149 674.501 -34.4415 128.149 674.501 0 135 643.501 0 135 643.501 0 135 674.501 0 135 674.501 34.4415 128.149 643.501 34.4415 128.149 643.501 34.4415 128.149 674.501 34.4415 128.149 674.501 63.6396 108.639 643.501 63.6396 108.639 643.501 63.6396 108.639 674.501 63.6396 108.639 674.501 83.1492 79.4413 643.501 83.1492 79.4413 643.501 83.1492 79.4413 674.501 83.1492 79.4413 674.501 90 44.9998 643.501 90 44.9998 666.613 -7.34732 151 660.363 -11.8882 151 652.638 -11.8882 151 646.388 -7.34732 151 644.001 0 151 646.388 7.34732 151 652.638 11.8882 151 660.363 11.8882 151 666.613 7.34732 151 669.001 0 151 669.001 0 162.5 666.613 7.34731 162.5 660.363 11.8882 162.5 652.638 11.8882 162.5 646.388 7.34731 162.5 644.001 0 162.5 646.388 -7.34732 162.5 652.638 -11.8882 162.5 660.363 -11.8882 162.5 666.613 -7.34732 162.5 669.001 0 151 669.001 0 162.5 666.613 -7.34732 162.5 666.613 -7.34732 151 666.613 -7.34732 151 666.613 -7.34732 162.5 660.363 -11.8882 162.5 660.363 -11.8882 151 660.363 -11.8882 151 660.363 -11.8882 162.5 652.638 -11.8882 162.5 652.638 -11.8882 151 652.638 -11.8882 151 652.638 -11.8882 162.5 646.388 -7.34732 162.5 646.388 -7.34732 151 646.388 -7.34732 151 646.388 -7.34732 162.5 644.001 0 162.5 644.001 0 151 644.001 0 151 644.001 0 162.5 646.388 7.34731 162.5 646.388 7.34732 151 646.388 7.34732 151 646.388 7.34731 162.5 652.638 11.8882 162.5 652.638 11.8882 151 652.638 11.8882 151 652.638 11.8882 162.5 660.363 11.8882 162.5 660.363 11.8882 151 660.363 11.8882 151 660.363 11.8882 162.5 666.613 7.34731 162.5 666.613 7.34732 151 666.613 7.34732 151 666.613 7.34731 162.5 669.001 0 162.5 669.001 0 151 504.501 -105.322 1.37378 504.501 -80.6102 -35.6105 504.501 -43.6259 -60.3225 504.501 0 -69.0002 504.501 43.6259 -60.3225 504.501 80.6102 -35.6105 504.501 105.322 1.37378 504.501 114 44.9998 504.501 105.322 88.6256 504.501 80.6102 125.61 504.501 43.6259 150.322 504.501 0 159 504.501 -43.6259 150.322 504.501 -80.6102 125.61 504.501 -105.322 88.6256 504.501 -114 44.9998 494.001 -114 44.9998 494.001 -105.322 88.6256 494.001 -80.6102 125.61 494.001 -43.6259 150.322 494.001 0 159 494.001 43.6259 150.322 494.001 80.6102 125.61 494.001 105.322 88.6256 494.001 114 44.9998 494.001 105.322 1.37378 494.001 80.6102 -35.6105 494.001 43.6259 -60.3225 494.001 0 -69.0002 494.001 -43.6259 -60.3225 494.001 -80.6102 -35.6105 494.001 -105.322 1.37378 504.501 -114 44.9998 494.001 -114 44.9998 494.001 -105.322 1.37378 504.501 -105.322 1.37378 504.501 -105.322 1.37378 494.001 -105.322 1.37378 494.001 -80.6102 -35.6105 504.501 -80.6102 -35.6105 504.501 -80.6102 -35.6105 494.001 -80.6102 -35.6105 494.001 -43.6259 -60.3225 504.501 -43.6259 -60.3225 504.501 -43.6259 -60.3225 494.001 -43.6259 -60.3225 494.001 0 -69.0002 504.501 0 -69.0002 504.501 0 -69.0002 494.001 0 -69.0002 494.001 43.6259 -60.3225 504.501 43.6259 -60.3225 504.501 43.6259 -60.3225 494.001 43.6259 -60.3225 494.001 80.6102 -35.6105 504.501 80.6102 -35.6105 504.501 80.6102 -35.6105 494.001 80.6102 -35.6105 494.001 105.322 1.37378 504.501 105.322 1.37378 504.501 105.322 1.37378 494.001 105.322 1.37378 494.001 114 44.9998 504.501 114 44.9998 504.501 114 44.9998 494.001 114 44.9998 494.001 105.322 88.6256 504.501 105.322 88.6256 504.501 105.322 88.6256 494.001 105.322 88.6256 494.001 80.6102 125.61 504.501 80.6102 125.61 504.501 80.6102 125.61 494.001 80.6102 125.61 494.001 43.6259 150.322 504.501 43.6259 150.322 504.501 43.6259 150.322 494.001 43.6259 150.322 494.001 0 159 504.501 0 159 504.501 0 159 494.001 0 159 494.001 -43.6259 150.322 504.501 -43.6259 150.322 504.501 -43.6259 150.322 494.001 -43.6259 150.322 494.001 -80.6102 125.61 504.501 -80.6102 125.61 504.501 -80.6102 125.61 494.001 -80.6102 125.61 494.001 -105.322 88.6256 504.501 -105.322 88.6256 504.501 -105.322 88.6256 494.001 -105.322 88.6256 494.001 -114 44.9998 504.501 -114 44.9998 504.501 -114 44.9998 504.501 -105.322 88.6256 504.501 -80.6102 125.61 504.501 -43.6259 150.322 504.501 0 159 504.501 43.6259 150.322 504.501 80.6102 125.61 504.501 105.322 88.6256 504.501 114 44.9998 504.501 105.322 1.37378 504.501 80.6102 -35.6105 504.501 43.6259 -60.3225 504.501 0 -69.0002 504.501 -43.6259 -60.3225 504.501 -80.6102 -35.6105 504.501 -105.322 1.37378 608.501 -105.322 1.37378 608.501 -80.6102 -35.6105 608.501 -43.6259 -60.3225 608.501 0 -69.0002 608.501 43.6259 -60.3225 608.501 80.6102 -35.6105 608.501 105.322 1.37378 608.501 114 44.9998 608.501 105.322 88.6256 608.501 80.6102 125.61 608.501 43.6259 150.322 608.501 0 159 608.501 -43.6259 150.322 608.501 -80.6102 125.61 608.501 -105.322 88.6256 608.501 -114 44.9998 504.501 -114 44.9998 608.501 -114 44.9998 608.501 -105.322 88.6256 504.501 -105.322 88.6256 504.501 -105.322 88.6256 608.501 -105.322 88.6256 608.501 -80.6102 125.61 504.501 -80.6102 125.61 504.501 -80.6102 125.61 608.501 -80.6102 125.61 608.501 -43.6259 150.322 504.501 -43.6259 150.322 504.501 -43.6259 150.322 608.501 -43.6259 150.322 608.501 0 159 504.501 0 159 504.501 0 159 608.501 0 159 608.501 43.6259 150.322 504.501 43.6259 150.322 504.501 43.6259 150.322 608.501 43.6259 150.322 608.501 80.6102 125.61 504.501 80.6102 125.61 504.501 80.6102 125.61 608.501 80.6102 125.61 608.501 105.322 88.6256 504.501 105.322 88.6256 504.501 105.322 88.6256 608.501 105.322 88.6256 608.501 114 44.9998 504.501 114 44.9998 504.501 114 44.9998 608.501 114 44.9998 608.501 105.322 1.37378 504.501 105.322 1.37378 504.501 105.322 1.37378 608.501 105.322 1.37378 608.501 80.6102 -35.6105 504.501 80.6102 -35.6105 504.501 80.6102 -35.6105 608.501 80.6102 -35.6105 608.501 43.6259 -60.3225 504.501 43.6259 -60.3225 504.501 43.6259 -60.3225 608.501 43.6259 -60.3225 608.501 0 -69.0002 504.501 0 -69.0002 504.501 0 -69.0002 608.501 0 -69.0002 608.501 -43.6259 -60.3225 504.501 -43.6259 -60.3225 504.501 -43.6259 -60.3225 608.501 -43.6259 -60.3225 608.501 -80.6102 -35.6105 504.501 -80.6102 -35.6105 504.501 -80.6102 -35.6105 608.501 -80.6102 -35.6105 608.501 -105.322 1.37378 504.501 -105.322 1.37378 504.501 -105.322 1.37378 608.501 -105.322 1.37378 608.501 -114 44.9998 504.501 -114 44.9998 608.501 102.551 2.52185 608.501 78.4889 -33.4891 608.501 42.4779 -57.5509 608.501 0 -66.0002 608.501 -42.4779 -57.5509 608.501 -78.4889 -33.4891 608.501 -102.551 2.52185 608.501 -111 44.9998 608.501 -102.551 87.4777 608.501 -78.4889 123.489 608.501 -42.4779 147.55 608.501 0 156 608.501 42.4779 147.55 608.501 78.4889 123.489 608.501 102.551 87.4777 608.501 111 44.9998 643.501 111 44.9998 643.501 102.551 87.4777 643.501 78.4889 123.489 643.501 42.4779 147.55 643.501 0 156 643.501 -42.4779 147.55 643.501 -78.4889 123.489 643.501 -102.551 87.4777 643.501 -111 44.9998 643.501 -102.551 2.52185 643.501 -78.4889 -33.4891 643.501 -42.4779 -57.5509 643.501 0 -66.0002 643.501 42.4779 -57.5509 643.501 78.4889 -33.4891 643.501 102.551 2.52185 608.501 111 44.9998 643.501 111 44.9998 643.501 102.551 2.52185 608.501 102.551 2.52185 608.501 102.551 2.52185 643.501 102.551 2.52185 643.501 78.4889 -33.4891 608.501 78.4889 -33.4891 608.501 78.4889 -33.4891 643.501 78.4889 -33.4891 643.501 42.4779 -57.5509 608.501 42.4779 -57.5509 608.501 42.4779 -57.5509 643.501 42.4779 -57.5509 643.501 0 -66.0002 608.501 0 -66.0002 608.501 0 -66.0002 643.501 0 -66.0002 643.501 -42.4779 -57.5509 608.501 -42.4779 -57.5509 608.501 -42.4779 -57.5509 643.501 -42.4779 -57.5509 643.501 -78.4889 -33.4891 608.501 -78.4889 -33.4891 608.501 -78.4889 -33.4891 643.501 -78.4889 -33.4891 643.501 -102.551 2.52185 608.501 -102.551 2.52185 608.501 -102.551 2.52185 643.501 -102.551 2.52185 643.501 -111 44.9998 608.501 -111 44.9998 608.501 -111 44.9998 643.501 -111 44.9998 643.501 -102.551 87.4777 608.501 -102.551 87.4777 608.501 -102.551 87.4777 643.501 -102.551 87.4777 643.501 -78.4889 123.489 608.501 -78.4889 123.489 608.501 -78.4889 123.489 643.501 -78.4889 123.489 643.501 -42.4779 147.55 608.501 -42.4779 147.55 608.501 -42.4779 147.55 643.501 -42.4779 147.55 643.501 0 156 608.501 0 156 608.501 0 156 643.501 0 156 643.501 42.4779 147.55 608.501 42.4779 147.55 608.501 42.4779 147.55 643.501 42.4779 147.55 643.501 78.4889 123.489 608.501 78.4889 123.489 608.501 78.4889 123.489 643.501 78.4889 123.489 643.501 102.551 87.4777 608.501 102.551 87.4777 608.501 102.551 87.4777 643.501 102.551 87.4777 643.501 111 44.9998 608.501 111 44.9998 643.501 -26 129.828 643.501 -26 129.828 643.501 -26 151 643.501 -26 151 643.501 0 135 643.501 26 129.828 643.501 26 129.828 643.501 26 151 643.501 26 151 669.501 -26 129.828 669.501 -26 129.828 669.501 -26 151 669.501 -26 151 669.501 0 135 669.501 26 129.828 669.501 26 129.828 669.501 26 151 669.501 26 151 -594.344 136.011 4.54187 -594.344 169.542 4.54187 -594.344 169.542 4.54187 -590.77 136.011 -69.9271 -590.77 195.271 -69.9271 -586.805 136.011 78.7144 -586.805 223.825 78.7144 -584.973 237.009 85.8696 -584.84 237.968 -99.6084 -584.84 237.968 -99.6084 -584.75 238.618 50.0476 -584.75 238.618 50.0476 -584.736 238.72 -82.2629 -584.736 238.72 -82.2629 -584.61 239.625 5.94849 -584.61 239.625 5.94849 -584.605 239.659 -38.1622 -584.605 239.659 -38.1622 -582.863 236.639 94.1139 -582.863 236.639 94.1139 -579.501 236.809 -126.332 -579.501 236.809 -126.332 -576.163 136.011 -143.037 -576.163 235.9 -143.037 -571.6 233.688 138.126 -571.6 233.688 138.126 -568.32 136.011 150.941 -568.32 232.687 150.941 -555.239 -57.9892 -201 -555.239 116.011 -201 -554.181 -65.0602 -203.929 -551.628 -67.9892 -211 -550.848 -67.9892 -213.162 -550.848 -67.9892 -213.162 -550.848 232.084 -213.162 -539.301 136.011 219.617 -539.301 227.322 219.617 -537.485 -67.9892 -243 -537.485 -67.9892 -243 -536.39 230.327 -245.445 -536.39 230.327 -245.445 -529.772 -64.5638 -260.221 -529.772 -64.5638 -260.221 -529.02 226.231 -261.901 -529.02 226.231 -261.901 -526.334 -59.4338 -267.898 -526.334 -59.4338 -267.898 -526.334 221.922 -267.898 -526.334 221.922 -267.898 -523.136 -54.809 -274.82 -523.136 -54.809 -274.82 -522.742 216.336 -275.673 -522.742 216.336 -275.673 -522.714 -53.4429 -275.732 -522.714 -53.4429 -275.732 -522.714 216.243 -275.732 -522.714 216.243 -275.732 -516.647 -44.2585 -281.869 -516.647 -44.2585 -281.869 -516.647 -44.2585 -281.869 -516.647 206.64 -281.869 -516.647 206.64 -281.869 -516.647 206.64 -281.869 -510.961 -40.2099 -284.574 -510.477 202.047 -284.805 -508.854 -35.1685 -285.577 -508.854 -35.1685 -285.577 -508.854 198.02 -285.577 -508.854 198.02 -285.577 -500.264 -30.9594 -286.414 -500.264 -30.9594 -286.414 -500.264 193.657 -286.414 -500.264 193.657 -286.414 -496.481 -57.9892 303 -496.481 116.011 303 -494.977 -65.0602 305.929 -491.345 -67.9892 313 -479.208 202.047 -284.805 -479.208 202.047 -284.805 -476.196 -40.2099 -284.574 -474.912 -67.9892 345 -473.112 217.253 348.505 -466.069 -64.5638 362.221 -464.836 212.886 364.621 -460.106 -56.8057 373.832 -460.106 -56.8057 373.832 -460.106 206.061 373.832 -460.106 206.061 373.832 -458.426 -54.809 376.82 -458.426 -54.809 376.82 -457.742 202.945 378.036 -457.742 202.945 378.036 -456.414 -49.4558 380.397 -456.414 -49.4558 380.397 -456.414 199.177 380.397 -456.414 199.177 380.397 -450.935 -41.7218 385.565 -450.935 -41.7218 385.565 -450.935 -41.7218 385.565 -450.935 190.931 385.565 -450.935 190.931 385.565 -450.935 190.931 385.565 -448.863 -40.2099 386.575 -448.863 -40.2099 386.575 -448.19 188.796 386.903 -444.164 -28.6935 388.865 -444.164 -28.6935 388.865 -444.164 178.399 388.865 -436.718 -22.9892 390 -436.718 172.389 390 -391.931 238.618 50.0476 -389.777 236.639 94.1139 -388.7 239.625 5.94849 -387.506 233.688 138.126 -385.467 239.659 -38.1622 -382.236 238.72 -82.2629 -379.007 236.809 -126.332 -379.001 -22.9892 390 -379.001 172.389 390 -367.421 123.176 301.575 -367.421 220.919 301.575 -363.646 123.03 -199.604 -363.646 232.821 -199.604 -362.627 188.796 386.903 -362.627 188.796 386.903 -360.895 -40.2099 386.575 -359.763 216.336 -275.673 -359.763 216.336 -275.673 -359.763 216.336 -275.673 -356.305 116.011 -201 -356.305 232.745 -201 -348.604 -54.809 -274.82 -348.604 -54.809 -274.82 -348.604 -54.809 -274.82 -338.756 232.745 -201 -338.756 232.745 -201 -335.859 230.327 -245.445 -335.859 230.327 -245.445 -334.3 229.026 -250.673 -334.3 229.026 -250.673 -334.3 229.026 -250.673 -334.3 229.026 -201 -334.3 229.026 -201 -331.559 226.231 -261.901 -331.559 226.231 -261.901 -326.322 220.893 301.913 -323.79 218.312 -272.923 -323.79 218.312 -272.923 -323.79 218.312 -272.923 -322.751 217.253 348.505 -318.467 212.886 364.621 -315.761 202.945 378.036 -315.761 202.945 378.036 -315.761 202.945 378.036 -309.567 203.813 376.864 -309.567 203.813 376.864 -309.334 -54.809 376.82 -309.334 -54.809 376.82 -309.334 -54.809 376.82 -232.168 -64.5638 362.221 -232.168 -64.5638 362.221 -224.675 117.278 302.748 -223.431 116.011 -201 -223.431 116.011 303 -199.724 91.8446 -263.437 -199.724 91.8446 -263.437 -199.724 91.8446 -201 -199.724 91.8446 -201 -199.724 91.8446 303 -199.724 91.8446 303 -199.724 91.8446 356.083 -199.724 91.8446 356.083 -195.487 85.4036 -263.113 -195.487 85.4036 -263.113 -195.487 85.4036 -201 -195.487 85.4036 -201 -195.487 85.4036 303 -195.487 85.4036 303 -195.487 85.4036 355.281 -195.487 85.4036 355.281 -194.001 -67.9892 -243 -194.001 -67.9892 -243 -194.001 -67.9892 -211 -194.001 -67.9892 -211 -194.001 -67.9892 313 -194.001 -67.9892 313 -194.001 -67.9892 345 -194.001 -67.9892 345 -194.001 -66.0001 355 -194.001 -66.0001 355 -194.001 -66.0001 355 -194.001 -65.0602 -203.929 -194.001 -65.0602 -203.929 -194.001 -65.0602 305.929 -194.001 -65.0602 305.929 -194.001 -64.5638 -260.221 -194.001 -64.5638 -260.221 -194.001 -62.7067 -263 -194.001 -62.7067 -263 -194.001 -62.7067 -263 -194.001 -57.9892 -201 -194.001 -57.9892 -201 -194.001 -57.9892 303 -194.001 -57.9892 303 -194.001 77.8386 -263 -194.001 77.8386 -263 -194.001 77.8386 -201 -194.001 77.8386 -201 -194.001 77.8386 303 -194.001 77.8386 303 -194.001 77.8386 355 -194.001 77.8386 355 -562.459 136.011 -181 -559.696 134.488 -188.653 -557.353 130.153 -195.142 -555.788 123.664 -199.477 -506.751 136.011 283 -502.821 134.488 290.654 -499.489 130.153 297.142 -497.263 123.664 301.478 -392.001 136.011 51.0001 -392.001 238.575 51.0001 -380.033 136.011 283 -379.979 135.806 284.031 -379.979 222.29 284.031 -378.349 134.488 290.654 -378.174 134.015 291.362 -378.174 221.717 291.362 -375.001 136.011 -181 -374.44 134.488 -188.653 -374.372 133.871 -189.577 -374.372 233.367 -189.577 -374.037 130.153 297.142 -373.779 129.615 297.502 -373.779 221.237 297.502 -370.305 130.153 -195.142 -369.963 129.452 -195.61 -369.963 233.039 -195.61 -367.573 123.664 301.478 -363.846 123.664 -199.477 + + + + + + + + + + 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.34199 0 0.939703 0.34199 0 0.939703 0.642781 0 0.76605 0.642781 0 0.76605 0.642781 0 0.76605 0.642781 0 0.76605 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.984813 0 0.17362 0.984813 0 0.17362 0.984813 0 0.17362 0.984813 0 0.17362 0.984813 0 -0.17362 0.984813 0 -0.17362 0.984813 0 -0.17362 0.984813 0 -0.17362 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.642781 0 -0.76605 0.642781 0 -0.76605 0.642781 0 -0.76605 0.642781 0 -0.76605 0.34199 0 -0.939703 0.34199 0 -0.939703 0.34199 0 -0.939703 0.34199 0 -0.939703 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.34199 0 -0.939703 -0.34199 0 -0.939703 -0.34199 0 -0.939703 -0.34199 0 -0.939703 -0.642781 0 -0.76605 -0.642781 0 -0.76605 -0.642781 0 -0.76605 -0.642781 0 -0.76605 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.984813 0 0.17362 -0.984813 0 0.17362 -0.984813 0 0.17362 -0.984813 0 0.17362 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.642781 0 0.76605 -0.642781 0 0.76605 -0.642781 0 0.76605 -0.642781 0 0.76605 -0.34199 0 0.939703 -0.34199 0 0.939703 -0.34199 0 0.939703 -0.34199 0 0.939703 0 0 1 0 0 1 0 0 1 0 0 1 0.34199 0 0.939703 0.34199 0 0.939703 -0.42259 0 0.906321 -0.42259 0 0.906321 -0.42259 0 0.906321 -0.42259 0 0.906321 0.906321 0 0.42259 0.906321 0 0.42259 0.906321 0 0.42259 0.906321 0 0.42259 0.42259 0 -0.906321 0.42259 0 -0.906321 0.42259 0 -0.906321 0.42259 0 -0.906321 -0.906321 0 -0.42259 -0.906321 0 -0.42259 -0.906321 0 -0.42259 -0.906321 0 -0.42259 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.906321 0 -0.42259 -0.42259 0 0.906321 0 1 0 -0.906321 0 -0.42259 -0.42259 0 0.906321 -0.906321 0 -0.42259 -0.42259 0 0.906321 0 1 0 -0.906321 0 -0.42259 -0.42259 0 0.906321 0 1 0 0 1 0 0 1 0 0 1 0 -0.906321 0 -0.42259 -0.42259 0 0.906321 0 1 0 -0.906321 0 -0.42259 -0.42259 0 0.906321 0 1 0 -0.906321 0 -0.42259 -0.81916 0 0.573565 0 1 0 -0.906321 0 -0.42259 -0.81916 0 0.573565 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.939703 0 0.34199 0 1 0 -0.939703 0 0.34199 0 1 0 0 1 0 -0.996197 0 0.0871303 -0.42259 0 0.906321 0 1 0 -0.996197 0 0.0871303 -0.42259 0 0.906321 0 1 0 0 1 0 0 1 0 0 1 0 -0.906321 0 -0.42259 0 1 0 0.42259 0 -0.906321 -0.906321 0 -0.42259 0.42259 0 -0.906321 0 1 0 -0.906321 0 -0.42259 -0.0871303 0 -0.996197 0 1 0 -0.906321 0 -0.42259 -0.0871303 0 -0.996197 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.906321 0 -0.42259 0 1 0 0.42259 0 -0.906321 -0.906321 0 -0.42259 0.42259 0 -0.906321 -0.34199 0 -0.939703 0 1 0 -0.34199 0 -0.939703 0 1 0 -0.906321 0 -0.42259 0 1 0 0.42259 0 -0.906321 -0.906321 0 -0.42259 0.42259 0 -0.906321 -0.81916 0 0.573565 0 1 0 0 1 0 -0.42259 0 0.906321 0 1 0 0.573565 0 0.81916 0 1 0 0 1 0 0 1 0 0 1 0 -0.573565 0 -0.81916 0 1 0 0.42259 0 -0.906321 0 1 0 -0.42259 0 0.906321 0 1 0 0.906321 0 0.42259 -0.42259 0 0.906321 0.906321 0 0.42259 0 1 0 0.34199 0 0.939703 0 1 0 0.34199 0 0.939703 0 1 0 0 1 0 0 1 0 -0.42259 0 0.906321 0 1 0 0.906321 0 0.42259 -0.42259 0 0.906321 0 1 0 0.906321 0 0.42259 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.0871303 0 0.996197 0.906321 0 0.42259 0 1 0 0.0871303 0 0.996197 0.906321 0 0.42259 -0.42259 0 0.906321 0 1 0 0.906321 0 0.42259 -0.42259 0 0.906321 0 1 0 0.906321 0 0.42259 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.42259 0 -0.906321 0.996197 0 -0.0871303 0 1 0 0.42259 0 -0.906321 0.996197 0 -0.0871303 0 1 0 0 1 0 0.939703 0 -0.34199 0 1 0 0.939703 0 -0.34199 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.81916 0 -0.573565 0.906321 0 0.42259 0 1 0 0.81916 0 -0.573565 0.906321 0 0.42259 0 1 0 0.42259 0 -0.906321 0.906321 0 0.42259 0 1 0 0.42259 0 -0.906321 0.906321 0 0.42259 0 1 0 0 1 0 0 1 0 0.42259 0 -0.906321 0.906321 0 0.42259 0 1 0 0.42259 0 -0.906321 0.906321 0 0.42259 0 1 0 0.42259 0 -0.906321 0.906321 0 0.42259 0.42259 0 -0.906321 0.906321 0 0.42259 0 1 0 -0.996197 0 0.0871303 -0.996197 0 0.0871303 0 1 0 -0.906321 0 -0.42259 -0.906321 0 -0.42259 0 1 0 -0.81916 0 0.573565 -0.573565 0 -0.81916 -0.573565 0 -0.81916 0 1 0 -0.42262 0 0.906307 -0.42262 0 0.906307 0 1 0 -0.0871303 0 -0.996197 -0.0871303 0 -0.996197 0 1 0 -0.42259 0 0.906321 0.573565 0 0.81916 -0.573565 0 -0.81916 0.42259 0 -0.906321 0.0871303 0 0.996197 0 1 0 0.0871303 0 0.996197 0.42259 0 -0.906321 0 1 0 0.42259 0 -0.906321 0.573565 0 0.81916 0 1 0 0.573565 0 0.81916 0.81916 0 -0.573565 0 1 0 0.81916 0 -0.573565 0.906321 0 0.42259 0 1 0 0.906321 0 0.42259 0.996197 0 -0.0871303 0 1 0 0.996197 0 -0.0871303 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -1 0 0 -1 0 0 -0.702872 -0.711317 0 -1 0 0 -1 0 0 -0.702891 -0.687063 -0.184088 -1 0 0 -0.702914 -0.615986 0.355632 -1 0 0 -1 0 0 -1 0 0 -0.702891 -0.184088 -0.687063 -1 0 0 0 0.258766 0.96594 -1 0 0 0 0.25895 -0.965891 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.702872 0 -0.711317 -1 0 0 0 0 1 -1 0 0 0 0 -1 -1 0 0 -0.702887 0.355632 -0.616016 -1 0 0 -1 0 0 -1 0 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -0.995909 -0.0903653 -1 0 0 0 -0.995909 0.0903653 -1 0 0 -1 0 0 -1 0 0 0 -0.0903653 -0.995909 -1 0 0 0 -0.0903653 0.995909 -1 0 0 -0.702872 -0.711317 0 -1 0 0 -1 0 0 -0.702891 -0.687063 0.184088 -1 0 0 -1 0 0 -1 0 0 -0.702887 -0.616016 -0.355632 -1 0 0 -0.702914 -0.615986 0.355632 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 -1 0 0 0 0.96594 0.258766 -1 0 0 0 0.965924 -0.258827 -1 0 0 0 0.866069 0.499924 -1 0 0 0 0.866034 -0.499985 -1 0 0 0 0.707053 0.707161 -1 0 0 0 0.707053 -0.707161 -1 0 0 0 0.499954 0.866052 -1 0 0 0 0.499954 -0.866052 -1 0 0 0 0.258766 0.96594 -1 0 0 0 0.25895 -0.965891 -1 0 0 -1 0 0 -1 0 0 0 0 1 -1 0 0 0 0 -1 -1 0 0 0 -0.258766 0.96594 -1 0 0 0 -0.25895 -0.965891 -1 0 0 0 -0.499954 0.866052 -1 0 0 0 -0.499954 -0.866052 -1 0 0 0 -0.707053 0.707161 -1 0 0 0 -0.707053 -0.707161 -1 0 0 0 -0.866069 0.499924 -1 0 0 0 -0.866034 -0.499985 -1 0 0 0 -0.96594 0.258766 -1 0 0 0 -0.965924 -0.258827 -1 0 0 0 -1 0 -1 0 0 -0.702891 0.184088 -0.687063 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.0903653 -0.995909 -1 0 0 0 0.0903653 0.995909 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.995909 -0.0903653 -1 0 0 0 0.995909 0.0903653 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -1 0 -1 0 0 -1 0 0 0 0 -1 -1 0 0 0 0 1 -1 0 0 -1 0 0 0 1 0 -1 0 0 -0.702891 -0.687063 0.184088 -0.702887 -0.616016 -0.355632 -0.702895 -0.502945 -0.502976 -1 0 0 -0.702895 -0.502976 0.502945 -0.702887 -0.355632 -0.616016 -1 0 0 -0.702914 -0.355632 0.615986 -1 0 0 -0.702891 -0.184088 0.687063 0 1 0 0 0.96594 0.258766 0 0.965924 -0.258827 0 0.866069 0.499924 0 0.866034 -0.499985 0 0.707053 0.707161 0 0.707053 -0.707161 0 0.499954 0.866052 0 0.499954 -0.866052 -1 0 0 -1 0 0 -0.702872 0 0.711317 0 -0.258766 0.96594 0 -0.25895 -0.965891 0 -0.499954 0.866052 0 -0.499954 -0.866052 0 -0.707053 0.707161 0 -0.707053 -0.707161 0 -0.866069 0.499924 0 -0.866034 -0.499985 0 -0.96594 0.258766 0 -0.965924 -0.258827 0 -1 0 -0.702891 0.184088 -0.687063 -1 0 0 -0.702891 0.184088 0.687063 -1 0 0 -0.702914 0.355632 0.615986 -1 0 0 -1 0 0 -0.702895 0.502945 -0.502976 -1 0 0 -0.702895 0.502976 0.502945 -1 0 0 -1 0 0 -0.702887 0.616016 -0.355632 -1 0 0 -0.702914 0.615986 0.355632 -1 0 0 -0.702891 0.687063 -0.184088 -1 0 0 -0.702891 0.687063 0.184088 -1 0 0 -0.702872 0.711317 0 0 0 -1 0 0 1 0 -0.0653706 -0.997861 0 -0.0653706 0.997861 0 -0.258766 -0.96594 0 -0.258766 0.96594 0 -0.500015 -0.866017 0 -0.500015 0.866017 0 -0.70713 -0.707083 0 -0.70713 0.707083 0 -0.866052 -0.499954 0 -0.866052 0.499954 0 -0.965932 -0.258797 0 -0.965932 0.258797 0 -1 0 0 -0.997859 -0.0654012 0 -0.997859 0.0654012 0 -1 0 -0.702891 -0.687063 -0.184088 -0.702895 -0.502945 -0.502976 -0.702895 -0.502976 0.502945 -0.702887 -0.355632 -0.616016 -0.702914 -0.355632 0.615986 -0.702891 -0.184088 -0.687063 -0.702891 -0.184088 0.687063 0 0 1 0 0 -1 -0.702872 0 -0.711317 -0.702872 0 0.711317 -0.702891 0.184088 0.687063 -0.702887 0.355632 -0.616016 -0.702914 0.355632 0.615986 -0.702895 0.502945 -0.502976 -0.702895 0.502976 0.502945 -0.702887 0.616016 -0.355632 -0.702914 0.615986 0.355632 -0.702891 0.687063 -0.184088 -0.702891 0.687063 0.184088 -0.702872 0.711317 0 0 1 0 0 0.997859 -0.0654012 0 0.997859 0.0654012 0 1 0 0 0.965932 -0.258797 0 0.965932 0.258797 0 0.866052 -0.499954 0 0.866052 0.499954 0 0.70713 -0.707083 0 0.70713 0.707083 0 0.500015 -0.866017 0 0.500015 0.866017 0 0.258766 -0.96594 0 0.258766 0.96594 0 0.0653706 -0.997861 0 0.0653706 0.997861 0 0 -1 0 0 1 0 1 0 0 0 -1 0 -0.995909 -0.0903653 0 -0.995909 0.0903653 0 0 1 0 -0.0653706 -0.997861 0 -0.0653706 0.997861 0 -0.258766 -0.96594 0 -0.258766 0.96594 0 -0.500015 -0.866017 0 -0.500015 0.866017 0 -0.70713 -0.707083 0 -0.70713 0.707083 0 -0.866052 -0.499954 0 -0.866052 0.499954 0 -0.965932 -0.258797 0 -0.965932 0.258797 0 -1 0 0 -0.0903653 -0.995909 0 -0.997859 -0.0654012 0 -0.997859 0.0654012 0 -1 0 0 -0.0903653 0.995909 0 0.0903653 -0.995909 0 1 0 0 0.997859 -0.0654012 0 0.997859 0.0654012 0 0.0903653 0.995909 0 1 0 0 0.965932 -0.258797 0 0.965932 0.258797 0 0.866052 -0.499954 0 0.866052 0.499954 0 0.70713 -0.707083 0 0.70713 0.707083 0 0.500015 -0.866017 0 0.500015 0.866017 0 0.258766 -0.96594 0 0.258766 0.96594 0 0.0653706 -0.997861 0 0.0653706 0.997861 0 0 -1 0 0.995909 -0.0903653 0 0 1 0 0.995909 0.0903653 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -1 0 0 -1 0 0 -0.702872 -0.711317 0 -1 0 0 -1 0 0 -0.702891 -0.687063 -0.184088 -1 0 0 -0.702914 -0.615986 0.355632 -1 0 0 -1 0 0 -1 0 0 -0.702891 -0.184088 -0.687063 -1 0 0 0 1 0 -1 0 0 0 0.499954 0.866052 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.702872 0 -0.711317 -1 0 0 0 -0.866052 0.499954 -1 0 0 -0.702914 0.355632 -0.615986 -1 0 0 -1 0 0 -1 0 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -0.995909 -0.0903653 -1 0 0 0 -0.995909 0.0903653 -1 0 0 -1 0 0 -1 0 0 0 -0.0903653 -0.995909 -1 0 0 0 -0.0903653 0.995909 -1 0 0 -0.702872 -0.711317 0 -1 0 0 -1 0 0 -0.702891 -0.687063 0.184088 -1 0 0 -1 0 0 -1 0 0 -0.702914 -0.615986 -0.355632 -1 0 0 -0.702914 -0.615986 0.355632 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.702891 -0.184088 -0.687063 -1 0 0 0 1 0 -1 0 0 0 0.965932 0.258797 -1 0 0 0 0.965932 -0.258797 -1 0 0 0 0.866052 0.499954 -1 0 0 0 0.866052 -0.499954 -1 0 0 0 0.707053 0.707161 -1 0 0 0 0.707053 -0.707161 -1 0 0 0 0.499954 0.866052 -1 0 0 0 0.499954 -0.866052 -1 0 0 0 0.258858 0.965915 -1 0 0 0 0.258858 -0.965915 -1 0 0 -1 0 0 -1 0 0 0 0 1 -1 0 0 0 0 -1 -1 0 0 0 -0.258858 0.965915 -1 0 0 0 -0.258858 -0.965915 -1 0 0 0 -0.499954 0.866052 -1 0 0 0 -0.499954 -0.866052 -1 0 0 0 -0.707053 0.707161 -1 0 0 0 -0.707053 -0.707161 -1 0 0 0 -0.866052 0.499954 -1 0 0 0 -0.866052 -0.499954 -1 0 0 0 -0.965932 0.258797 -1 0 0 0 -0.965932 -0.258797 -1 0 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.0903653 -0.995909 -1 0 0 0 0.0903653 0.995909 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.995909 -0.0903653 -1 0 0 0 0.995909 0.0903653 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -1 0 -1 0 0 -1 0 0 0 0 -1 -1 0 0 0 0 1 -1 0 0 -1 0 0 0 1 0 -1 0 0 -0.702891 -0.687063 0.184088 -0.702914 -0.615986 -0.355632 -0.702917 -0.502945 -0.502945 -1 0 0 -0.702917 -0.502945 0.502945 -0.702914 -0.355632 -0.615986 -1 0 0 -0.702914 -0.355632 0.615986 -1 0 0 -0.702891 -0.184088 0.687063 0 0.965932 0.258797 0 0.965932 -0.258797 0 0.866052 0.499954 0 0.866052 -0.499954 0 0.707053 0.707161 0 0.707053 -0.707161 0 0.499954 -0.866052 0 0.258858 0.965915 0 0.258858 -0.965915 0 0 1 0 0 -1 -1 0 0 -0.702872 0 0.711317 0 -0.258858 0.965915 0 -0.258858 -0.965915 0 -0.499954 0.866052 0 -0.499954 -0.866052 0 -0.707053 0.707161 0 -0.707053 -0.707161 0 -0.866052 -0.499954 0 -0.965932 0.258797 0 -0.965932 -0.258797 0 -1 0 -0.702891 0.184088 -0.687063 -1 0 0 -0.702891 0.184088 0.687063 -1 0 0 -0.702914 0.355632 0.615986 -1 0 0 -1 0 0 -0.702917 0.502945 -0.502945 -1 0 0 -0.702917 0.502945 0.502945 -1 0 0 -1 0 0 -0.702914 0.615986 -0.355632 -1 0 0 -0.702914 0.615986 0.355632 -1 0 0 -0.702891 0.687063 -0.184088 -1 0 0 -0.702891 0.687063 0.184088 -1 0 0 -0.702872 0.711317 0 0 0 -1 0 0 1 0 -0.0653706 -0.997861 0 -0.0654012 0.997859 0 -0.258797 -0.965932 0 -0.258797 0.965932 0 -0.500015 -0.866017 0 -0.500015 0.866017 0 -0.707083 -0.70713 0 -0.707083 0.70713 0 -0.866052 -0.499954 0 -0.866034 0.499985 0 -0.96594 -0.258766 0 -0.96594 0.258766 0 -1 0 0 -0.997857 -0.0654317 0 -0.997857 0.0654317 0 -1 0 -0.702891 -0.687063 -0.184088 -0.702917 -0.502945 -0.502945 -0.702917 -0.502945 0.502945 -0.702914 -0.355632 -0.615986 -0.702914 -0.355632 0.615986 -0.702891 -0.184088 0.687063 0 0 1 0 0 -1 -0.702872 0 -0.711317 -0.702872 0 0.711317 -0.702891 0.184088 -0.687063 -0.702891 0.184088 0.687063 -0.702914 0.355632 -0.615986 -0.702914 0.355632 0.615986 -0.702917 0.502945 -0.502945 -0.702917 0.502945 0.502945 -0.702914 0.615986 -0.355632 -0.702914 0.615986 0.355632 -0.702891 0.687063 -0.184088 -0.702891 0.687063 0.184088 -0.702872 0.711317 0 0 1 0 0 0.997857 -0.0654317 0 0.997857 0.0654317 0 1 0 0 0.96594 -0.258766 0 0.96594 0.258766 0 0.866052 -0.499954 0 0.866034 0.499985 0 0.707083 -0.70713 0 0.707083 0.70713 0 0.500015 -0.866017 0 0.500015 0.866017 0 0.258797 -0.965932 0 0.258797 0.965932 0 0.0653706 -0.997861 0 0.0654012 0.997859 0 0 -1 0 0 1 0 1 0 0 0 -1 0 -0.995909 -0.0903653 0 -0.995909 0.0903653 0 0 1 0 -0.0653706 -0.997861 0 -0.0654012 0.997859 0 -0.258797 -0.965932 0 -0.258797 0.965932 0 -0.500015 -0.866017 0 -0.500015 0.866017 0 -0.707083 -0.70713 0 -0.707083 0.70713 0 -0.866052 -0.499954 0 -0.866034 0.499985 0 -0.96594 -0.258766 0 -0.96594 0.258766 0 -1 0 0 -0.0903653 -0.995909 0 -0.997857 -0.0654317 0 -0.997857 0.0654317 0 -1 0 0 -0.0903653 0.995909 0 0.0903653 -0.995909 0 1 0 0 0.997857 -0.0654317 0 0.997857 0.0654317 0 0.0903653 0.995909 0 1 0 0 0.96594 -0.258766 0 0.96594 0.258766 0 0.866052 -0.499954 0 0.866034 0.499985 0 0.707083 -0.70713 0 0.707083 0.70713 0 0.500015 -0.866017 0 0.500015 0.866017 0 0.258797 -0.965932 0 0.258797 0.965932 0 0.0653706 -0.997861 0 0.0654012 0.997859 0 0 -1 0 0.995909 -0.0903653 0 0 1 0 0.995909 0.0903653 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -1 0 0 -1 0 0 -0.702872 -0.711317 0 -1 0 0 -1 0 0 -0.702891 -0.687063 -0.184088 -1 0 0 -0.702914 -0.615986 0.355632 -1 0 0 -1 0 0 -1 0 0 -0.702891 -0.184088 -0.687063 -1 0 0 0 0.707083 0.70713 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.702872 0 -0.711317 -1 0 0 0 -0.500046 0.865999 -1 0 0 -0.702914 0.355632 -0.615986 -1 0 0 -1 0 0 -1 0 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -0.995909 -0.0903653 -1 0 0 0 -0.995909 0.0903653 -1 0 0 -1 0 0 -1 0 0 0 -0.0903653 -0.995909 -1 0 0 0 -0.0903653 0.995909 -1 0 0 -0.702872 -0.711317 0 -1 0 0 -1 0 0 -0.702891 -0.687063 0.184088 -1 0 0 -1 0 0 -1 0 0 -0.702914 -0.615986 -0.355632 -1 0 0 -0.702914 -0.615986 0.355632 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 -1 0 0 0 0.965932 0.258797 -1 0 0 0 0.965932 -0.258797 -1 0 0 0 0.866017 0.500015 -1 0 0 0 0.866017 -0.500015 -1 0 0 0 0.707083 0.70713 -1 0 0 0 0.707083 -0.70713 -1 0 0 0 0.500046 0.865999 -1 0 0 0 0.500046 -0.865999 -1 0 0 0 0.258766 0.96594 -1 0 0 0 0.258766 -0.96594 -1 0 0 -1 0 0 -1 0 0 -0.702872 0 -0.711317 -1 0 0 0 0 1 -1 0 0 0 0 -1 -1 0 0 0 -0.258766 0.96594 -1 0 0 0 -0.258766 -0.96594 -1 0 0 0 -0.500046 0.865999 -1 0 0 0 -0.500046 -0.865999 -1 0 0 0 -0.707083 0.70713 -1 0 0 0 -0.707083 -0.70713 -1 0 0 0 -0.866017 0.500015 -1 0 0 0 -0.866017 -0.500015 -1 0 0 0 -0.965932 0.258797 -1 0 0 0 -0.965932 -0.258797 -1 0 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.0903653 -0.995909 -1 0 0 0 0.0903653 0.995909 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.995909 -0.0903653 -1 0 0 0 0.995909 0.0903653 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -1 0 -1 0 0 -1 0 0 0 0 -1 -1 0 0 0 0 1 -1 0 0 -1 0 0 0 1 0 -1 0 0 -0.702891 -0.687063 0.184088 -0.702914 -0.615986 -0.355632 -0.702895 -0.502945 -0.502976 -1 0 0 -0.702917 -0.502945 0.502945 -0.702914 -0.355632 -0.615986 -1 0 0 -0.702914 -0.355632 0.615986 -1 0 0 -0.702891 -0.184088 0.687063 0 1 0 0 0.965932 0.258797 0 0.965932 -0.258797 0 0.866017 0.500015 0 0.866017 -0.500015 0 0.707083 -0.70713 0 0.500046 0.865999 0 0.500046 -0.865999 0 0.258766 0.96594 0 0.258766 -0.96594 0 0 1 0 0 -1 -1 0 0 -0.702872 0 0.711317 0 -0.258766 0.96594 0 -0.258766 -0.96594 0 -0.500046 -0.865999 0 -0.707083 0.70713 0 -0.707083 -0.70713 0 -0.866017 0.500015 0 -0.866017 -0.500015 0 -0.965932 0.258797 0 -0.965932 -0.258797 0 -1 0 -0.702891 0.184088 -0.687063 -1 0 0 -0.702891 0.184088 0.687063 -1 0 0 -0.702914 0.355632 0.615986 -1 0 0 -1 0 0 -0.702895 0.502945 -0.502976 -1 0 0 -0.702917 0.502945 0.502945 -1 0 0 -1 0 0 -0.702914 0.615986 -0.355632 -1 0 0 -0.702914 0.615986 0.355632 -1 0 0 -0.702891 0.687063 -0.184088 -1 0 0 -0.702891 0.687063 0.184088 -1 0 0 -0.702872 0.711317 0 0 0 -1 0 0 1 0 -0.0653706 -0.997861 0 -0.0654317 0.997857 0 -0.258766 -0.96594 0 -0.258797 0.965932 0 -0.500015 -0.866017 0 -0.499985 0.866034 0 -0.70713 -0.707083 0 -0.707083 0.70713 0 -0.866052 -0.499954 0 -0.866034 0.499985 0 -0.965932 -0.258797 0 -0.96594 0.258766 0 -1 0 0 -0.997859 -0.0654012 0 -0.997857 0.0654317 0 -1 0 -0.702891 -0.687063 -0.184088 -0.702895 -0.502945 -0.502976 -0.702917 -0.502945 0.502945 -0.702914 -0.355632 -0.615986 -0.702914 -0.355632 0.615986 -0.702891 -0.184088 -0.687063 -0.702891 -0.184088 0.687063 0 0 1 0 0 -1 -0.702872 0 0.711317 -0.702891 0.184088 -0.687063 -0.702891 0.184088 0.687063 -0.702914 0.355632 -0.615986 -0.702914 0.355632 0.615986 -0.702895 0.502945 -0.502976 -0.702917 0.502945 0.502945 -0.702914 0.615986 -0.355632 -0.702914 0.615986 0.355632 -0.702891 0.687063 -0.184088 -0.702891 0.687063 0.184088 -0.702872 0.711317 0 0 1 0 0 0.997859 -0.0654012 0 0.997857 0.0654317 0 1 0 0 0.965932 -0.258797 0 0.96594 0.258766 0 0.866052 -0.499954 0 0.866034 0.499985 0 0.70713 -0.707083 0 0.707083 0.70713 0 0.500015 -0.866017 0 0.499985 0.866034 0 0.258766 -0.96594 0 0.258797 0.965932 0 0.0653706 -0.997861 0 0.0654317 0.997857 0 0 -1 0 0 1 0 1 0 0 -0.995909 -0.0903653 0 0 -1 0 -0.995909 0.0903653 0 0 1 0 -0.0653706 -0.997861 0 -0.0654317 0.997857 0 -0.258766 -0.96594 0 -0.258797 0.965932 0 -0.500015 -0.866017 0 -0.499985 0.866034 0 -0.70713 -0.707083 0 -0.707083 0.70713 0 -0.866052 -0.499954 0 -0.866034 0.499985 0 -0.965932 -0.258797 0 -0.96594 0.258766 0 -1 0 0 -0.0903653 -0.995909 0 -0.997859 -0.0654012 0 -0.997857 0.0654317 0 -1 0 0 -0.0903653 0.995909 0 0.0903653 -0.995909 0 1 0 0 0.997859 -0.0654012 0 0.997857 0.0654317 0 0.0903653 0.995909 0 1 0 0 0.965932 -0.258797 0 0.96594 0.258766 0 0.866052 -0.499954 0 0.866034 0.499985 0 0.70713 -0.707083 0 0.707083 0.70713 0 0.500015 -0.866017 0 0.499985 0.866034 0 0.258766 -0.96594 0 0.258797 0.965932 0 0.0653706 -0.997861 0 0.0654317 0.997857 0 0 -1 0 0.995909 -0.0903653 0 0 1 0 0.995909 0.0903653 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.686087 0.707124 -0.171056 -0.686087 0.707124 -0.171056 -0.686087 0.707124 -0.171056 -0.686087 0.707124 -0.171056 -0.686087 0.707124 -0.171056 -0.686087 0.707124 -0.171056 -0.686087 0.707124 -0.171056 -0.686087 0.707124 -0.171056 -0.686087 0.707124 -0.171056 -0.686087 0.707124 -0.171056 0.970296 0 0.24192 0.970296 0 0.24192 0.970296 0 0.24192 0.970296 0 0.24192 0.970296 0 0.24192 0.970296 0 0.24192 0.970296 0 0.24192 0.970296 0 0.24192 0.970296 0 0.24192 0.970296 0 0.24192 0 1 0 0 1 0 0.142186 0.809038 -0.570299 0.142186 0.809038 -0.570299 0.142186 0.809038 -0.570299 0.142186 0.809038 -0.570299 0.230079 0.309 -0.922812 0.230079 0.309 -0.922812 0.230079 0.309 -0.922812 0.230079 0.309 -0.922812 0.230079 -0.309 -0.922812 0.230079 -0.309 -0.922812 0.230079 -0.309 -0.922812 0.230079 -0.309 -0.922812 0.142186 -0.809038 -0.570299 0.142186 -0.809038 -0.570299 0.142186 -0.809038 -0.570299 0.142186 -0.809038 -0.570299 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.142186 -0.809016 0.57033 -0.142186 -0.809016 0.57033 -0.142186 -0.809016 0.57033 -0.142186 -0.809016 0.57033 -0.230079 -0.309 0.922812 -0.230079 -0.309 0.922812 -0.230079 -0.309 0.922812 -0.230079 -0.309 0.922812 -0.230079 0.309 0.922812 -0.230079 0.309 0.922812 -0.230079 0.309 0.922812 -0.230079 0.309 0.922812 -0.142186 0.809038 0.570299 -0.142186 0.809038 0.570299 -0.142186 0.809038 0.570299 -0.142186 0.809038 0.570299 0 1 0 0 1 0 -0.970296 0 -0.24192 -0.259468 0.308603 0.915118 -0.970296 0 -0.24192 -0.200476 -0.308603 0.929824 -0.970296 0 -0.24192 -0.218879 0.806219 0.549638 -0.970296 0 -0.24192 -0.0647603 -0.80622 0.588061 -0.970296 0 -0.24192 -0.0950957 0.995186 -0.0236824 -0.970296 0 -0.24192 0.0950957 -0.995186 0.0236824 -0.970296 0 -0.24192 0.218879 -0.806219 -0.549638 -0.970296 0 -0.24192 0.0647603 0.80622 -0.588061 -0.970296 0 -0.24192 0.256294 -0.204535 -0.944711 -0.970296 0 -0.24192 0.200476 0.308603 -0.929824 -0.295358 0.793235 0.532487 -0.288522 0.302805 0.908331 -0.288522 0.302805 0.908331 -0.189276 0.98079 -0.0471816 -0.189276 0.98079 -0.0471816 -0.189276 0.98079 -0.0471816 -0.171636 -0.302805 0.93747 -0.0108036 0.79324 -0.608814 0.0108036 -0.79324 0.608814 0.0108036 -0.79324 0.608814 0.0108036 -0.79324 0.608814 0.171636 0.302805 -0.93747 0.171636 0.302805 -0.93747 0.189276 -0.98079 0.0471816 0.189276 -0.98079 0.0471816 0.298196 -0.401532 -0.865939 0.298196 -0.401532 -0.865939 0.295358 -0.793235 -0.532487 0.295358 -0.793235 -0.532487 -0.442579 0.747216 0.495773 -0.442579 0.747216 0.495773 -0.442579 0.747216 0.495773 -0.371288 0.923892 -0.0925626 -0.371288 0.923892 -0.0925626 -0.371288 0.923892 -0.0925626 -0.344737 0.285226 0.894317 -0.344737 0.285226 0.894317 -0.157994 0.747216 -0.645527 -0.157994 0.747216 -0.645527 -0.115452 -0.285257 0.951472 -0.115452 -0.285226 0.951482 0.115452 0.285226 -0.951482 0.157994 -0.747216 0.645527 0.344737 -0.285226 -0.894317 0.344737 -0.285226 -0.894317 0.371288 -0.923892 0.0925626 0.371288 -0.923892 0.0925626 -0.578234 0.672487 0.461959 -0.578234 0.672487 0.461959 0.442579 -0.747216 -0.495773 0.442579 -0.747216 -0.495773 -0.539048 0.831487 -0.134373 -0.539048 0.831487 -0.134373 -0.539048 0.831487 -0.134373 -0.396527 0.256722 0.881397 -0.396527 0.256722 0.881397 -0.29368 0.672445 -0.67939 -0.29368 0.672445 -0.67939 -0.0636311 -0.256722 0.964388 -0.0636311 -0.256722 0.964388 0.0636311 0.256722 -0.964388 -0.69721 0.571856 0.432295 -0.686087 0.707124 -0.171056 -0.686087 0.707124 -0.171056 -0.686087 0.707124 -0.171056 0.29368 -0.672445 0.67939 0.396527 -0.256722 -0.881397 0.396527 -0.256722 -0.881397 -0.441939 0.218299 0.870078 -0.41258 0.571856 -0.709055 -0.41258 0.571856 -0.709055 0.539048 -0.831487 0.134373 0.578234 -0.672487 -0.461959 0.578234 -0.672487 -0.461959 -0.80678 0.555559 -0.201147 -0.794792 0.449293 0.407971 -0.0182501 -0.218299 0.975711 -0.0182501 -0.218299 0.975711 0.0182501 0.218299 -0.975711 -0.510178 0.449293 -0.733385 -0.510178 0.449293 -0.733385 -0.479171 0.171514 0.860801 -0.479171 0.171514 0.860801 -0.896446 0.382672 -0.223487 -0.896446 0.382672 -0.223487 -0.896446 0.382672 -0.223487 -0.86729 0.309488 0.389904 -0.86729 0.309488 0.389904 0.41258 -0.571856 0.709055 0.41258 -0.571856 0.709055 0.41258 -0.571856 0.709055 0.441939 -0.218299 -0.870078 0.441939 -0.218299 -0.870078 -0.951661 0.195074 -0.237251 -0.951661 0.195074 -0.237251 -0.951661 0.195074 -0.237251 -0.58269 0.309488 -0.751458 -0.58269 0.309488 -0.751458 -0.58269 0.309488 -0.751458 -0.911944 0.157781 0.378765 -0.911944 0.157781 0.378765 -0.911944 0.157781 0.378765 0.686087 -0.707124 0.171056 0.69721 -0.571856 -0.432295 0.69721 -0.571856 -0.432295 -0.0189825 0.171514 -0.984999 -0.0189825 0.171514 -0.984999 -0.965632 0.0979949 -0.24073 0 1 0 0.0189825 -0.171514 0.984999 0.0189825 -0.171514 0.984999 -0.506882 0.118137 0.853882 -0.506882 0.118137 0.853882 -0.924098 0.0793786 0.373821 0 1 0 -0.627369 0.157781 -0.76257 -0.627369 0.157781 -0.76257 -0.627369 0.157781 -0.76257 -0.6404 0.0793786 -0.763928 0 1 0 -0.523911 0.060213 0.849642 -0.529435 0.0303964 0.847806 0 1 0 0.479171 -0.171514 -0.860801 -0.0466628 0.118137 -0.9919 -0.0466628 0.118137 -0.9919 0.510178 -0.449293 0.733385 0.510178 -0.449293 0.733385 0.0466628 -0.118137 0.9919 0.0466628 -0.118137 0.9919 0.794792 -0.449293 -0.407971 0.794792 -0.449293 -0.407971 -0.0637226 0.060213 -0.996149 -0.0637226 0.060213 -0.996149 0.80678 -0.555559 0.201147 0.80678 -0.555559 0.201147 -0.0694296 0.0303964 -0.997124 0 1 0 0.0637226 -0.060213 0.996149 0.0637226 -0.060213 0.996149 0.506882 -0.118137 -0.853882 0.506882 -0.118137 -0.853882 0 1 0 0.0694296 -0.0303659 0.997125 0.58269 -0.309488 0.751458 0.58269 -0.309488 0.751458 0.523911 -0.060213 -0.849642 0.86729 -0.309488 -0.389904 0.896446 -0.382672 0.223487 0.896446 -0.382672 0.223487 0.627369 -0.157781 0.76257 0 1 0 0.529435 -0.0303659 -0.847807 0 1 0 0.6404 -0.0793786 0.763928 0.911949 -0.15775 -0.378765 0.911949 -0.15775 -0.378765 0.951661 -0.195074 0.237251 0.951661 -0.195074 0.237251 0 1 0 0.924098 -0.0793786 -0.373821 0 1 0 0.965632 -0.0979949 0.24073 -0.0637289 0.0602355 -0.996148 0.0637289 -0.0602359 0.996148 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.642781 0 0.76605 0.642781 0 0.76605 0.0697348 0 0.997566 0.0697348 0 0.997566 0.0697348 0 0.997566 0.0697348 0 0.997566 -0.529893 0 0.848065 -0.529893 0 0.848065 -0.529893 0 0.848065 -0.529893 0 0.848065 -0.927193 0 0.374584 -0.927193 0 0.374584 -0.927193 0 0.374584 -0.927193 0 0.374584 -0.970296 0 -0.24192 -0.970296 0 -0.24192 -0.970296 0 -0.24192 -0.970296 0 -0.24192 -0.642781 0 -0.76605 -0.642781 0 -0.76605 -0.642781 0 -0.76605 -0.642781 0 -0.76605 -0.0697348 0 -0.997566 -0.0697348 0 -0.997566 -0.0697348 0 -0.997566 -0.0697348 0 -0.997566 0.529893 0 -0.848065 0.529893 0 -0.848065 0.529893 0 -0.848065 0.529893 0 -0.848065 0.927193 0 -0.374584 0.927193 0 -0.374584 0.927193 0 -0.374584 0.927193 0 -0.374584 0.970296 0 0.24192 0.970296 0 0.24192 0.970296 0 0.24192 0.970296 0 0.24192 0.642781 0 0.76605 0.642781 0 0.76605 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.970296 0 -0.24192 -0.970296 0 -0.24192 -0.970296 0 -0.24192 -0.970296 0 -0.24192 0.24192 0 -0.970296 0.24192 0 -0.970296 0.24192 0 -0.970296 0.24192 0 -0.970296 0.970296 0 0.24192 0.970296 0 0.24192 0.970296 0 0.24192 0.970296 0 0.24192 -0.24192 0 0.970296 -0.24192 0 0.970296 -0.24192 0 0.970296 -0.24192 0 0.970296 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.970296 0 0.24192 0.970296 0 0.24192 0.927193 0 -0.374584 0.927193 0 -0.374584 0.642781 0 0.76605 0.642781 0 0.76605 0.529893 0 -0.848065 0.529893 0 -0.848065 0.0697348 0 0.997566 0.0697348 0 0.997566 -0.0697348 0 -0.997566 -0.0697348 0 -0.997566 -0.529893 0 0.848065 -0.529893 0 0.848065 -0.642781 0 -0.76605 -0.642781 0 -0.76605 -0.927193 0 0.374584 -0.927193 0 0.374584 -0.970296 0 -0.24192 -0.970296 0 -0.24192 0 1 0 0 1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.866034 0 -0.499985 0.866034 0 -0.499985 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 0 0 1 0 0 1 0 0 1 0 0 1 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 1 0 0 1 0 0 1 0 0 1 0 0 0.866034 0 -0.499985 0.866034 0 -0.499985 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.939703 0 -0.34199 0.939703 0 -0.34199 0.76605 0 -0.642781 0.76605 0 -0.642781 0.76605 0 -0.642781 0.76605 0 -0.642781 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.17362 0 -0.984813 0.17362 0 -0.984813 0.17362 0 -0.984813 0.17362 0 -0.984813 -0.17362 0 -0.984813 -0.17362 0 -0.984813 -0.17362 0 -0.984813 -0.17362 0 -0.984813 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.76605 0 -0.642781 -0.76605 0 -0.642781 -0.76605 0 -0.642781 -0.76605 0 -0.642781 -0.939703 0 -0.34199 -0.939703 0 -0.34199 -0.939703 0 -0.34199 -0.939703 0 -0.34199 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.939703 0 0.34199 -0.939703 0 0.34199 -0.939703 0 0.34199 -0.939703 0 0.34199 -0.76605 0 0.642781 -0.76605 0 0.642781 -0.76605 0 0.642781 -0.76605 0 0.642781 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.17362 0 0.984813 0.17362 0 0.984813 0.17362 0 0.984813 0.17362 0 0.984813 0.17362 0 0.984813 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.76605 0 0.642781 0.76605 0 0.642781 0.76605 0 0.642781 0.76605 0 0.642781 0.939703 0 0.34199 0.939703 0 0.34199 0.939703 0 0.34199 0.939703 0 0.34199 1 0 0 1 0 0 1 0 0 1 0 0 0.939703 0 -0.34199 0.939703 0 -0.34199 0.140965 0.707127 -0.692892 0.140965 0.707127 -0.692892 0.140965 0.707127 -0.692892 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 -0.258126 0.966111 0 -0.258126 0.966111 0 -0.258126 0.966111 0 -0.258126 0.966111 0 0.140965 0.707127 0.692892 0.140965 0.707127 0.692892 0.140965 0.707127 0.692892 -0.866034 0 -0.499985 0 -1 0 0 -1 0 0.195074 0 0.980788 0 0 -1 0 -1 0 0 -1 0 0 0 1 0 -1 0 0 0 1 0 0 -1 0 -1 0 0.866034 0 -0.499985 -0.195074 0 0.980788 0 -1 0 0.866034 0 -0.499985 -0.0762658 0.92389 0.374981 0.866034 0 -0.499985 -0.140965 0.707127 0.692892 0 -1 0 0.866034 0 -0.499985 -0.140965 0.707127 0.692892 0 -1 0 -0.0762658 0.92389 0.374981 0.195074 0 0.980788 0 0 -1 0 1 0 0 0 -1 0 1 0 -0.195074 0 0.980788 0 -1 0 0.866025 2.50635e-007 -0.5 -0.866027 1.57718e-007 -0.499998 0 -1 0 1 8.76956e-006 -2.39006e-005 1 -2.15843e-006 -1.18927e-005 1 2.15845e-006 -1.18926e-005 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 -1.39588e-005 5.82992e-007 1 0 0 1 -2.27558e-006 -2.49279e-006 1 -0.000260305 -0.000336834 1 6.30119e-014 -2.80725e-005 -0.696219 -0.71783 0 0 1 0 -0.696249 0.7178 0 0 -1 0 -0.696249 0 0.7178 -0.199347 0 -0.979929 -0.696249 0 -0.7178 -0.199347 0 0.979929 -0.696261 -0.507553 0.507553 -0.689272 -0.402509 0.602405 -0.0762658 0.92389 -0.374981 -0.696261 -0.507553 -0.507553 -0.551103 -0.400311 -0.732145 -0.0762658 0.92389 0.374981 -0.696305 0.507523 0.507523 -0.551103 0.400311 0.732145 -0.0762963 -0.923888 -0.374981 -0.696305 0.507523 -0.507523 -0.689298 0.402509 -0.602374 -0.0762963 -0.923888 0.374981 -0.496506 -0.865186 -0.0702536 -0.496506 -0.865186 0.0702536 -0.249428 -0.967042 -0.051149 -0.249428 -0.967042 0.051149 -0.496536 -0.0702536 -0.865168 -0.496536 0.0702536 -0.865168 -0.249428 0.051149 -0.967042 -0.249428 -0.051149 -0.967042 -0.496506 0.0702536 0.865186 -0.496506 -0.0702536 0.865186 -0.249428 -0.051149 0.967042 -0.249428 0.051149 0.967042 -0.496536 0.865168 -0.0702536 -0.496536 0.865168 0.0702536 -0.249428 0.967042 0.051149 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 1 0 0 0 -0.923884 -0.382672 1 0 0 0 -0.923884 0.382672 1 0 0 -0.0762658 0.92389 0.374981 1 0 0 -0.0762658 0.92389 -0.374981 0 -0.70713 -0.707083 1 0 0 0 -0.707083 0.70713 -0.184179 0.382672 -0.90534 0 -0.382672 -0.923884 1 0 0 0 -0.382672 0.923884 0 0 -1 1 0 0 0 0 1 0 0.382672 -0.923884 1 0 0 0 0.382672 0.923884 -0.184179 -0.382672 -0.90534 0 0.70713 -0.707083 1 0 0 0 0.707083 0.70713 -0.0762963 -0.923888 -0.374981 1 0 0 0 0.923884 -0.382672 1 0 0 0 0.923884 0.382672 1 0 0 -0.696282 -0.663137 -0.274667 0 1 0 -0.696282 -0.663137 0.274667 0 1 0 -0.696282 0.663137 -0.274667 0 -1 0 -0.696282 0.663137 0.274667 0 -1 0 -0.140965 0.707127 -0.692892 -0.140965 0.707127 0.692892 -0.140965 -0.707127 -0.692892 -0.140965 -0.707127 0.692892 -0.696282 0.274667 0.663137 -0.199347 0 -0.979929 -0.696282 -0.274667 -0.663137 -0.199347 0 0.979929 -0.696282 -0.274667 0.663137 -0.199347 0 -0.979929 -0.696282 0.274667 -0.663137 -0.199347 0 0.979929 -0.184179 0.382672 0.90534 -0.184179 0.382672 -0.90534 -0.184179 -0.382672 -0.90534 -0.184179 -0.382672 0.90534 -0.55327 -0.774987 -0.305429 -0.376232 -0.823505 -0.424604 -0.249428 -0.913011 -0.322794 -0.55327 -0.774987 0.305429 -0.376232 -0.823505 0.424604 -0.249428 -0.913011 0.322794 -0.249428 -0.647603 -0.719997 -0.249428 -0.719997 -0.647603 -0.249428 -0.647603 0.719997 -0.249428 -0.719997 0.647603 -0.55327 -0.305429 -0.774987 -0.376232 -0.424604 -0.823505 -0.249428 -0.322794 -0.913011 -0.55327 -0.305429 0.774987 -0.376232 -0.424604 0.823505 -0.249428 -0.322794 0.913011 -0.553301 0.305429 -0.774965 -0.376263 0.424604 -0.823491 -0.249428 0.322794 -0.913011 -0.553301 0.305429 0.774965 -0.376232 0.424604 0.823505 -0.249428 0.322794 0.913011 -0.249428 0.719997 -0.647603 -0.249428 0.647603 -0.719997 -0.249428 0.719997 0.647603 -0.249428 0.647603 0.719997 -0.553301 0.774978 -0.305399 -0.376263 0.823491 -0.424604 -0.249428 0.913011 -0.322794 -0.553301 0.774978 0.305399 -0.376263 0.823491 0.424604 -0.249428 0.913011 0.322794 -0.249428 0.967042 -0.051149 -0.184179 0.382672 0.90534 -0.184179 -0.382672 0.90534 -0.0762963 -0.923888 0.374981 0 1 0 1 -1.90914e-005 -4.01669e-006 -0.696268 0.507548 -0.507548 -0.689277 0.402511 -0.602397 -0.551128 -0.400317 -0.732123 -0.696248 -0.507563 -0.507563 -0.696244 -0.507565 0.507565 -0.689254 -0.402521 0.602416 -0.55113 0.400312 0.732124 -0.696263 0.507551 0.507553 1 0 0 1 0 0 0 -1 0 0.24189 0 -0.970304 0.970296 0 0.24192 -0.24192 0 0.970296 0 -1 0 0.970296 0 0.24192 0 -1 0 0.926078 0 0.377331 0 -1 0 0.24189 0 -0.970304 0.970296 0 0.24192 0 -1 0 0.24189 0 -0.970304 0.86309 0 0.505051 -0.24192 0 0.970296 0 -1 0 0.999168 0 -0.0407727 -0.24192 0 0.970296 0 -1 0 0.970296 0 0.24192 0 1 0 0.994826 0 0.101596 -0.913553 0 -0.40672 -0.559191 0 0.829039 -0.913553 0 -0.40672 -0.559191 0 0.829039 -0.970296 0 -0.24192 -0.970296 0 -0.24192 -0.997566 0 -0.0697348 -0.104526 0 -0.994522 -0.997566 0 -0.0697348 -0.104526 0 -0.994522 0.24189 0 -0.970304 0.970296 0 0.24192 -0.559191 0 0.829039 0.86309 0 0.505051 -0.559191 0 0.829039 0.86309 0 0.505051 -0.24192 0 0.970296 0.970296 0 0.24192 -0.104526 0 -0.994522 0.999168 0 -0.0407727 -0.104526 0 -0.994522 0.999168 0 -0.0407727 -4.66115e-008 -1 -2.17427e-006 -3.63048e-006 1 1.6235e-008 -1 0 0 -0.0762658 0.92389 -0.374981 -1 0 0 0 -0.923884 0.382672 -1 0 0 0 1 0 0 -0.707083 -0.70713 -1 0 0 -0.0762658 0.92389 0.374981 -1 0 0 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0.404157 -0.892092 -0.202063 0.70713 -0.707083 0 -0.0762658 0.92389 0.374981 0.70713 -0.707083 0 0 1 0 0 -0.70713 0.707083 0.70713 -0.707083 0 -0.0762658 0.92389 -0.374981 0.70713 -0.707083 0 0 1 0 0 -0.70713 0.707083 -0.0762658 0.92389 -0.374981 -0.0762658 0.92389 0.374981 0 -0.923884 0.382672 0.404157 -0.892092 0.202063 -0.0762658 0.92389 -0.374981 -0.0762658 0.92389 0.374981 0 1 0 0 -0.707083 -0.70713 -1 -3.8146e-006 -6.97418e-008 0.70711 -0.707103 -2.70547e-007 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.923884 -0.382672 0 0.923884 -0.382672 0.382672 0.923884 0 0.382672 0.923884 0 0.70713 0.707083 0 0.70713 0.707083 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.923884 -0.382672 0 0.923884 0.382672 0.270577 0.923892 0.270577 0.270577 0.923892 -0.270577 0 0.923884 0.382672 0 0.923884 0.382672 0 0.70713 0.707083 0 0.70713 0.707083 -1 0 0 0.953327 0.215644 -0.211341 -1 0 0 -0.0373241 -0.982292 0.183599 -1 0 0 -0.140965 -0.707127 0.692892 -1 0 0 0.953327 0.215644 -0.211341 0.833946 0.394147 -0.386242 0.833946 0.394147 -0.386242 0.483963 0.625053 -0.612445 0.483963 0.625053 -0.612445 -0.0762658 -0.92389 0.374981 0.297494 0.681911 -0.668203 -0.140965 -0.707127 0.692892 0.297494 0.681911 -0.668203 -0.0373545 -0.98229 0.183604 0 1 0 -1 0 0 0.976297 0 -0.216437 -1 0 0 -0.199347 0 0.979929 -1 0 0 0.976297 0 -0.216437 -1 0 0 -0.199347 0 0.979929 0.89976 0 -0.436384 0.89976 0 -0.436384 0.607013 0 -0.794692 0.607013 0 -0.794692 -0.199347 0 0.979929 0.40672 0 -0.913553 -0.199347 0 0.979929 0.40672 0 -0.913553 0 -1 0 0 1 0 -1 0 0 0.953327 -0.215644 -0.211341 -1 0 0 -0.0373241 0.982292 0.183599 -1 0 0 0.953327 -0.215644 -0.211341 -1 0 0 -0.140965 0.707127 0.692892 0.833946 -0.394147 -0.386242 0.833946 -0.394147 -0.386242 0.483963 -0.625053 -0.612445 0.483963 -0.625053 -0.612445 -0.0762658 0.92389 0.374981 0.297494 -0.681911 -0.668203 -0.140965 0.707127 0.692892 0.297494 -0.681911 -0.668203 -0.0373545 0.98229 0.183604 0 -1 0 0 -1 0 0 0 -1 -0.140965 0.707127 0.692892 0 -1 0 -0.184179 0.382672 0.90534 -0.184179 -0.382672 0.90534 0 1 0 0 0 -1 -0.140965 -0.707127 0.692892 0 1 0 0 -1 0 0 0 -1 -0.140965 0.707127 0.692892 0 -1 0 -0.184179 0.382672 0.90534 -0.184179 -0.382672 0.90534 0 1 0 0 0 -1 -0.140965 -0.707127 0.692892 0 1 0 -1 0 0 1 0 0 -0.199377 0 -0.979923 0 -1 0 0 -1 0 0.199377 0 0.979923 -0.184179 -0.382672 -0.90534 -0.140965 -0.707127 -0.692892 0 1 0 0 1 0 0.199377 0 0.979923 -0.199377 0 -0.979923 0 -1 0 0 -1 0 0.199377 0 0.979923 -0.184179 -0.382672 -0.90534 -0.140965 -0.707127 -0.692892 0 1 0 0 1 0 0.199377 0 0.979923 -1 0 0 1 0 0 -1 0 0 -0.0373241 0.982292 -0.183599 -1 0 0 0.953327 -0.215644 0.211341 -1 0 0 -0.140965 0.707127 -0.692892 -1 0 0 0.953327 -0.215644 0.211341 0.833946 -0.394147 0.386242 0.833946 -0.394147 0.386242 0.483963 -0.625053 0.612445 0.483963 -0.625053 0.612445 -0.0762658 0.92389 -0.374981 0.297494 -0.681911 0.668203 -0.140965 0.707127 -0.692892 0.297494 -0.681911 0.668203 -0.0373545 0.98229 -0.183604 0 -1 0 -0.140965 0.707127 -0.692892 0 -1 0 0 -1 0 0.199377 0 0.979923 -0.184179 0.382672 -0.90534 -0.184179 -0.382672 -0.90534 -0.140965 -0.707127 -0.692892 0 1 0 0 1 0 0.199377 0 0.979923 -0.140965 0.707127 -0.692892 0 -1 0 0 -1 0 0.199377 0 0.979923 -0.184179 0.382672 -0.90534 -0.184179 -0.382672 -0.90534 -0.140965 -0.707127 -0.692892 0 1 0 0 1 0 0.199377 0 0.979923 -1 0 0 1 0 0 -1 0 0 -0.199347 0 -0.979929 -1 0 0 0.976297 0 0.216437 -1 0 0 -0.199347 0 -0.979929 -1 0 0 0.976297 0 0.216437 0.89976 0 0.436384 0.89976 0 0.436384 0.607013 0 0.794692 0.607013 0 0.794692 -0.199347 0 -0.979929 0.40672 0 0.913553 -0.199347 0 -0.979929 0.40672 0 0.913553 0 -1 0 0 1 0 -1 0 0 -0.0373241 -0.982292 -0.183599 -1 0 0 0.953327 0.215644 0.211341 -1 0 0 -0.140965 -0.707127 -0.692892 -1 0 0 0.953327 0.215644 0.211341 0.833946 0.394147 0.386242 0.833946 0.394147 0.386242 0.483963 0.625053 0.612445 0.483963 0.625053 0.612445 -0.0762658 -0.92389 -0.374981 0.297494 0.681911 0.668203 -0.140965 -0.707127 -0.692892 0.297494 0.681911 0.668203 -0.0373545 -0.98229 -0.183604 0 1 0 0.0373241 -0.982292 0.183599 0.0373241 -0.982292 0.183599 0.100742 0.86287 0.495285 0.0373241 -0.982292 0.183599 0.100742 0.86287 0.495285 0.0373241 -0.982292 0.183599 0.112033 -0.827085 0.550798 0.172002 -0.505448 0.84554 -0.084872 -0.996132 0.0227363 0.100742 0.86287 0.495285 0.172002 -0.505448 0.84554 -1 0 0 0.0762658 -0.92389 0.374981 -1 0 0 0.184179 -0.382672 0.90534 -1 0 0 0.184179 0.382672 0.90534 -1 0 0 -1 0 0 0.0762658 0.92389 0.374981 -1 0 0 0.184179 -0.382672 -0.90534 -1 0 0 0.184179 0.382672 -0.90534 -1 0 0 0.0762658 0.92389 -0.374981 -1 0 0 -1 0 0 0 -1 0 0.199347 0 0.979929 -1 0 0 0.184179 -0.382672 0.90534 -0.0878933 -0.993844 0.0674459 -0.0951567 -0.993945 0.0549333 -0.0951567 -0.993945 0.0549333 -0.189184 -0.975848 0.109226 -0.141423 -0.989225 0.0378735 -0.0548418 -0.998469 0.00720237 0.104526 0 0.994522 -1 0 0 0.0762658 0.92389 -0.374981 -1 0 0 0.0762658 0.92389 0.374981 -1 0 0 0.100742 0.86287 0.495285 -1 0 0 0.100742 0.86287 -0.495285 -0.0878933 -0.993844 -0.0674459 -0.189184 -0.975848 -0.109226 -0.0951567 -0.993945 -0.0549333 -0.0951567 -0.993945 -0.0549333 -0.102359 -0.993844 -0.0423902 -0.102359 -0.993844 -0.0423902 -0.211035 -0.975843 -0.0565203 -0.102359 -0.993844 0.0423902 -0.106143 -0.993945 -0.0284127 -0.084872 -0.996132 0.0227363 -0.109867 -0.993842 0.0144353 0.104526 0 0.994522 -0.109867 -0.993842 -0.0144353 0.104526 0 0.994522 0.104526 0 0.994522 -0.109928 -0.993834 0.0144658 -0.218635 -0.975807 0 -0.109958 -0.993831 -0.0144658 -0.0879238 -0.996127 0 1 0 0 0 -1 0 0.199347 0 0.979929 1 0 0 0.184179 -0.382672 0.90534 1 0 0 0.172002 -0.505448 0.84554 1 0 0 1 0 0 0.172002 0.505448 0.84554 1 0 0 0.0762658 0.92389 0.374981 1 0 0 1 0 0 0.164861 -0.56209 -0.810479 1 0 0 0.0762658 0.92389 -0.374981 1 0 0 0.172002 0.505448 -0.84554 1 0 0 0.0373535 -0.98229 0.183603 -0.863073 -7.20931e-005 -0.505079 0.0762936 -0.923881 -0.374999 0.172024 -0.505452 0.845533 -0.0848858 -0.996131 0.0227432 0.172025 0.505452 0.845533 0.172025 0.505455 -0.845531 -0.998544 1.36142e-006 -0.0539366 -0.943054 -9.12253e-007 -0.332638 0.10077 0.862858 0.4953 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 0 1 0 0 1 0 0 1 0 0 1 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.707083 0.70713 0 0.707083 0.70713 0 0.707083 0.70713 0 0.707083 0.70713 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 1 0 0 1 0 0 0.809016 -0.587786 0 0.809016 -0.587786 0 0.809016 -0.587786 0 0.809016 -0.587786 0 0.309 -0.951062 0 0.309 -0.951062 0 0.309 -0.951062 0 0.309 -0.951062 0 -0.309 -0.951062 0 -0.309 -0.951062 0 -0.309 -0.951062 0 -0.309 -0.951062 0 -0.809016 -0.587786 0 -0.809016 -0.587786 0 -0.809016 -0.587786 0 -0.809016 -0.587786 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.809016 0.587786 0 -0.809016 0.587786 0 -0.809016 0.587786 0 -0.809016 0.587786 0 -0.309 0.951062 0 -0.309 0.951062 0 -0.309 0.951062 0 -0.309 0.951062 0 0.309 0.951062 0 0.309 0.951062 0 0.309 0.951062 0 0.309 0.951062 0 0.809016 0.587786 0 0.809016 0.587786 0 0.809016 0.587786 0 0.809016 0.587786 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -1 0 0 -1 0 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 1 0 0 1 0 0 1 0 0 1 0 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.70713 0.707083 0 0.70713 0.707083 0 0.70713 0.707083 0 0.70713 0.707083 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 0 1 0 0 1 0 0 1 0 0 1 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.70713 0.707083 0 0.70713 0.707083 0 0.70713 0.707083 0 0.70713 0.707083 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 1 0 0 1 0 0 1 0 0 1 0 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 0 1 0 0 1 0 0 1 0 0 1 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.707083 0.70713 0 0.707083 0.70713 0 0.707083 0.70713 0 0.707083 0.70713 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 1 0 0 1 0 0 -1 0 0 0.195074 -0.980788 0 -1 0 0 0 1 0 0 -1 0 -0.195074 -0.980788 0 1 0 0 0 1 0 1 0 0 -1 0 0 0.195074 -0.980788 0 -1 0 0 0 1 0 0 -1 0 -0.195074 -0.980788 0 1 0 0 0 1 0 1 0 1 0 0 -1 0 0 -0.999645 0 0.0266427 -0.998782 0.0460219 0.0177923 -0.998782 0.0460219 0.0177923 -0.992498 0 -0.122257 -0.995587 0.0461135 -0.0817286 -0.98457 0 0.174993 -0.992035 0.0461745 0.117191 -0.989695 0.0694601 0.125217 -0.992706 0.069277 -0.0986663 0 0.999062 -0.0433058 -0.990495 0.137547 0 0 0.999427 0.033845 -0.990495 0.137547 0 0 0.999479 -0.0322886 -0.990495 0.137547 0 0 0.999931 0.0117801 -0.990495 0.137547 0 0 0.999947 -0.0102542 -0.968777 0 0.247932 0 0.998637 0.0521867 -0.980624 0 -0.195898 0 0.998716 -0.0506607 -0.963288 0 -0.268471 -0.963288 0 -0.268471 -0.968777 0 0.247932 0 0.997379 0.0723594 -0.947597 0 0.319468 -0.947597 0 0.319468 0 -0.195074 0.980788 0 -0.130589 0.991437 0 -0.707083 0.70713 0 -0.980788 0.195074 -0.927267 0 -0.374401 0 -1 0 -0.936926 0 -0.349528 -0.905993 0 0.423292 -0.900646 0 0.434553 -0.912653 0 -0.408734 0 -0.995187 -0.0979949 -0.912653 0 -0.408734 0 0.988903 -0.148564 -0.912653 0 -0.408734 0 -0.923884 -0.382672 -0.912653 0 -0.408734 0 0.907526 -0.419996 -0.910243 0 -0.414075 0 -0.831477 -0.555559 -0.910243 0 -0.414075 0 0.812125 -0.583483 -0.907794 0 -0.419416 0 -0.70713 -0.707083 -0.907794 0 -0.419416 0 0.687643 -0.726049 -0.821776 0 -0.569811 0 -0.555559 -0.831477 -0.821776 0 -0.569811 3.05185e-005 0.53853 -0.842607 -0.579058 0 -0.815286 -0.415082 -0.202155 -0.88704 -0.229591 -0.296884 -0.926902 -0.579058 0 -0.815286 -0.414106 0.195502 -0.888986 -0.228919 0.286966 -0.930186 -0.150761 -0.263405 -0.952832 -0.150426 0.254585 -0.955279 -0.17954 -0.0664998 -0.9815 -0.17954 -0.0664998 -0.9815 -0.179479 0.0642109 -0.981664 -0.179479 0.0642109 -0.981664 -0.00695822 -0.0654622 -0.997831 -0.00695822 -0.0654622 -0.997831 -0.00695822 0.0632038 -0.997976 -0.00695822 0.0632038 -0.997976 0 -0.195074 -0.980788 0 -0.0980255 -0.995184 0 -0.70713 -0.707083 0 -0.980788 -0.195074 0.0261544 0.249367 -0.968056 0.0261544 0.249367 -0.968056 0.0261849 -0.258034 -0.965781 0 -0.995187 0.0979949 0 0.99226 0.12418 0 -0.923884 0.382672 0 0.899938 0.436018 -0.880764 0 0.473556 0 -0.831477 0.555559 -0.880764 0 0.473556 0 0.803417 0.595416 -0.871634 0 0.490158 0 -0.707083 0.70713 -0.871634 0 0.490158 0 0.679006 0.734132 -0.787853 0 0.615864 0 -0.555559 0.831477 -0.787853 0 0.615864 0 0.531022 0.847358 -0.568621 0 0.8226 -0.407422 -0.201331 0.890771 -0.234382 -0.297159 0.925614 -0.568621 0 0.8226 -0.406049 0.191778 0.893502 -0.233436 0.282907 0.930307 -0.153905 -0.263649 0.952262 -0.153905 -0.263649 0.952262 -0.153447 0.250954 0.95576 -0.200659 -0.0664693 0.977404 -0.200659 -0.0664693 0.977404 -0.200568 0.0631733 0.977641 -0.0505387 -0.0654622 0.996574 -0.0505387 0.0622272 0.996782 0 0.999427 0.033845 0 0.998438 0.0558794 0 0.999931 0.0117801 0 0.997379 0.0723594 0 0.999947 -0.0102542 0 0.999479 -0.0322886 0 0.998807 -0.0488296 0.0624409 -0.0655538 0.995893 0.0624409 0.0623188 0.996101 0.14185 -0.101047 -0.984717 0.3755 0 -0.926822 0.18598 -0.10062 0.977388 0.425123 0 0.905136 0.0639058 0.246376 0.967065 0.0639058 0.246376 0.967065 0.0640889 -0.258858 0.963787 0 0.687643 -0.726049 0.0274667 0.486679 -0.873149 0.0397351 0.280709 -0.95897 0.0627766 -0.0655538 0.995872 0.0938139 0 0.99559 0 -0.70713 -0.707083 0.0276193 -0.50267 -0.864037 0.0398572 -0.290475 -0.956052 0 0 1 0.340922 0.939647 -0.028901 0.110752 0.99068 -0.0792871 0.110752 0.99068 -0.0792871 0.343028 0.930387 -0.129276 0.48384 0.870896 -0.0862453 0.678182 0.734894 0 0 0 1 0.678182 0.734894 0 0 0.907526 -0.419996 0.71387 0.700278 0 0.00820948 0 -0.999966 0 0.812125 -0.583483 0.0762047 0 -0.997092 0.71387 0.700278 0 0 0.990205 0.139622 0 0.899938 0.436018 0 0.679006 0.734132 0.0669881 0.480972 0.874173 0.0970794 0.277352 0.955851 0 0.803417 0.595416 0.185888 0 0.982571 0 -0.707083 0.70713 0.0675375 -0.503983 0.861069 0.0975066 -0.291421 0.951612 0 -0.923884 0.382672 0.185888 0 0.982571 0.00412 -0.0980255 -0.995175 0 0 1 0 -0.0980255 -0.995184 0.0762047 0 -0.997092 0.778304 0.627888 0 0 0 1 0.778304 0.627888 0 0 0 -1 0.778304 0.627888 0 0.185888 0 0.982571 0.778304 0.627888 0 0.0762047 0 -0.997092 0.925705 0.378246 0 0 0 1 0.925705 0.378246 0 0 0 -1 0.925705 0.378246 0 0.185888 0 0.982571 0.925705 0.378246 0 0 -0.995187 -0.0979949 1 0 0 0 -0.980788 0.195074 1 0 0 0 -0.980788 -0.195074 1 0 0 0 -0.995187 0.0979949 1 0 0 0 -0.980788 0.195074 0.185888 0 0.982571 1 0 0 0 -0.707083 0.70713 1 0 0 0 -0.70713 -0.707083 1 0 0 0 -0.923884 -0.382672 1 0 0 0 -0.831477 -0.555559 0.0762047 0 -0.997092 1 0 0 0 -0.195074 0.980788 1 0 0 0 -0.195074 -0.980788 1 0 0 0.0762047 0 -0.997092 0.995303 0.0968047 0 0 0 1 0.995303 0.0968047 0 0 0 -1 0.995303 0.0968047 0 0.185888 0 0.982571 0.995303 0.0968047 0 7.85328e-007 0.998992 0.044878 -6.93687e-007 0.990204 0.139629 -3.42118e-007 -0.320786 -0.947152 0.191915 -0.267134 -0.944356 1.52841e-007 -0.707056 -0.707158 -4.3601e-008 -0.923896 -0.382643 9.92703e-008 -0.831474 0.555564 -1.26916e-007 -0.752337 0.658779 0.185996 -0.100637 0.977383 4.68372e-009 0.998715 -0.0506706 -0.940585 2.53562e-008 -0.339558 0.425143 -5.62101e-008 0.905126 0.682894 -2.15587e-007 0.730518 0.999942 5.69935e-007 0.0108014 0.998672 -1.40775e-008 -0.0515188 0.970998 7.46891e-008 -0.239087 0.93328 -2.68556e-008 -0.359149 0.733585 4.81426e-008 -0.679598 -0.880753 1.96754e-006 0.473576 0.713851 0.700297 -2.96407e-007 0 -1 0 0.425143 -5.62101e-008 0.905126 0.425143 -5.62101e-008 0.905126 + + + + + + + + + + + + + + +

0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17

+

18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35

+

36 36 37 37 38 38 39 39

+

40 40 41 41 42 42 43 43

+

44 44 45 45 46 46 47 47

+

48 48 49 49 50 50 51 51

+

52 52 53 53 54 54 55 55

+

56 56 57 57 58 58 59 59

+

60 60 61 61 62 62 63 63

+

64 64 65 65 66 66 67 67

+

68 68 69 69 70 70 71 71

+

72 72 73 73 74 74 75 75

+

76 76 77 77 78 78 79 79

+

80 80 81 81 82 82 83 83

+

84 84 85 85 86 86 87 87

+

88 88 89 89 90 90 91 91

+

92 92 93 93 94 94 95 95

+

96 96 97 97 98 98 99 99

+

100 100 101 101 102 102 103 103

+

104 104 105 105 106 106 107 107

+
+ + + +

108 108 109 109 110 110 111 111

+

112 112 113 113 114 114 115 115

+

116 116 117 117 118 118 119 119

+

120 120 121 121 122 122 123 123

+

124 124 125 125 126 126 127 127

+
+ + + +

128 128 129 128 130 128 131 128 132 128 133 128

+

134 128 135 128 136 128 137 128 138 128 139 128

+

140 128 141 128 142 128 143 128 144 128

+

145 128 146 128 147 128 148 128

+
+ + + +

149 129 150 129 151 129

+
+ + + +

152 130 153 130 154 130

+
+ + + +

155 131 156 131 157 131

+
+ + + +

158 132 159 132 160 132

+
+ + + +

260 344 275 344 274 344

+
+ + + +

196 344 202 344 351 344 260 344 274 344

+
+ + + +

357 345 246 345 347 345 246 345 341 345 347 345 354 345 344 345 247 345 221 345 340 345 334 345 334 345 337 345 221 345 195 345 196 345 222 345 273 345 363 345 369 345 366 345 273 345 369 345 247 345 360 345 354 345

+
+ + + +

221 345 222 345 247 345 344 345 340 345

+

195 345 222 345 220 345 205 345 187 345

+

220 345 232 345 217 345 205 345

+

245 345 232 345 220 345 221 345 337 345 341 345 246 345

+

272 345 271 345 250 345 245 345 246 345

+

272 345 303 345 298 345 271 345

+

275 345 282 345 313 345 307 345 273 345

+

273 345 307 345 303 345 272 345 246 345 357 345 363 345

+

247 345 274 345 273 345 366 345 360 345

+
+ + + +

204 346 211 346 214 346

+
+ + + +

214 346 230 346 240 346 219 346

+

219 346 203 346 204 346 214 346

+
+ + + +

291 347 290 347 279 347

+
+ + + +

244 347 243 347 218 347 175 347 373 347

+

243 347 244 347 261 347 269 347 263 347 251 347

+

263 347 262 347 258 347 251 347

+

288 347 292 347 291 347 279 347 262 347 263 347 269 347

+
+ + + +

295 348 289 348 276 348

+
+ + + +

327 348 374 348 304 348 306 348 319 348

+

321 348 310 348 290 348 292 348 375 348

+

310 348 321 348 320 348 319 348 306 348 299 348 301 348

+

299 348 306 348 305 348 295 348

+

305 348 304 348 289 348 295 348

+
+ + + +

190 349 218 349 199 349

+
+ + + +

188 349 190 349 199 349 193 349

+
+ + + +

189 350 181 350 172 350 175 350 190 350

+

211 350 191 350 372 350 173 350 184 350

+

184 350 173 350 174 350 181 350 189 350 188 350

+
+ + + +

349 321 343 315 339 311 336 308 239 211 346 318 355 327 361 333 367 339 370 342 364 336 358 330

+

363 335 365 337 371 343 369 341

+

369 341 371 343 368 340 366 338

+

366 338 368 340 362 334 360 332

+

360 332 362 334 356 328 354 326

+

354 326 356 328 345 317 344 316

+

344 316 345 317 238 210 340 312

+

340 312 238 210 335 307 334 306

+

334 306 335 307 338 310 337 309

+

337 309 338 310 342 314 341 313

+

341 313 342 314 348 320 347 319

+

347 319 348 320 359 331 357 329

+

357 329 359 331 365 337 363 335

+
+ + + +

349 321 343 315 339 311 336 308 239 211 346 318 355 327 361 333 367 339 370 342 364 336 358 330

+

363 335 365 337 371 343 369 341

+

369 341 371 343 368 340 366 338

+

366 338 368 340 362 334 360 332

+

360 332 362 334 356 328 354 326

+

354 326 356 328 345 317 344 316

+

344 316 345 317 238 210 340 312

+

340 312 238 210 335 307 334 306

+

334 306 335 307 338 310 337 309

+

337 309 338 310 342 314 341 313

+

341 313 342 314 348 320 347 319

+

347 319 348 320 359 331 357 329

+

357 329 359 331 365 337 363 335

+

295 267 298 270 303 275 301 273

+

353 325 250 222 297 269 294 266

+

248 220 352 324 229 201 231 203

+

213 185 216 188 231 203 229 201

+

182 154 185 157 215 187 212 184

+

186 158 183 155 192 164 194 166

+

197 169 200 172 194 166 192 164

+

241 213 350 322 201 173 198 170

+

351 323 243 215 258 230 260 232

+

278 250 281 253 260 232 258 230

+

310 282 313 285 282 254 279 251

+

312 284 309 281 301 273 303 275

+
+ + + +

349 321 343 315 339 311 336 308 239 211 346 318 355 327 361 333 367 339 370 342 364 336 358 330

+

363 335 365 337 371 343 369 341

+

369 341 371 343 368 340 366 338

+

366 338 368 340 362 334 360 332

+

360 332 362 334 356 328 354 326

+

354 326 356 328 345 317 344 316

+

344 316 345 317 238 210 340 312

+

340 312 238 210 335 307 334 306

+

334 306 335 307 338 310 337 309

+

337 309 338 310 342 314 341 313

+

341 313 342 314 348 320 347 319

+

347 319 348 320 359 331 357 329

+

357 329 359 331 365 337 363 335

+

295 267 298 270 303 275 301 273

+

353 325 250 222 297 269 294 266

+

248 220 352 324 229 201 231 203

+

213 185 216 188 231 203 229 201

+

182 154 185 157 215 187 212 184

+

186 158 183 155 192 164 194 166

+

197 169 200 172 194 166 192 164

+

241 213 350 322 201 173 198 170

+

351 323 243 215 258 230 260 232

+

278 250 281 253 260 232 258 230

+

310 282 313 285 282 254 279 251

+

312 284 309 281 301 273 303 275

+

223 195 207 179 225 197 234 206

+

328 300 333 305 322 294 314 286

+

253 225 270 242 284 256 265 237

+

164 136 161 133 169 141 178 150

+

170 142 179 151 176 148 167 139

+

252 224 255 227 171 143 168 140

+

269 241 256 228 254 226 266 238

+

286 258 267 239 264 236 283 255

+

330 302 332 304 288 260 285 257

+

318 290 331 303 329 301 315 287

+

327 299 319 291 316 288 324 296

+

235 207 237 209 326 298 323 295

+

227 199 236 208 233 205 224 196

+

210 182 228 200 226 198 208 180

+

162 134 165 137 209 181 206 178

+

180 152 166 138 163 135 177 149

+
+ + + +

376 351 377 351 378 351 379 351 380 351

+
+ + + +

381 352 382 352 383 352 384 352 385 352

+
+ + + +

386 353 387 353 388 353 389 353 390 353

+
+ + + +

391 354 392 355 393 356 394 357

+

395 358 396 359 397 360 398 361

+

399 362 400 363 401 364 402 365

+

403 366 404 367 405 368 406 369

+

407 370 408 371 409 372 410 373

+
+ + + +

416 374 417 374 418 374

+
+ + + +

411 374 412 374 413 374 414 374 415 374

+
+ + + +

427 683 584 683 586 683 427 683 582 683 584 683 581 683 582 683 427 683 427 683 583 683 581 683 427 683 585 683 583 683 446 683 602 683 600 683 446 683 600 683 598 683 437 683 596 683 594 683 437 683 594 683 443 683 443 683 436 683 437 683 437 683 436 683 433 683 437 683 433 683 589 683 437 683 589 683 587 683 435 683 593 683 595 683 435 683 441 683 593 683 435 683 588 683 431 683 446 683 597 683 599 683 446 683 599 683 601 683 603 683 446 683 601 683 446 683 603 683 602 683

+
+ + + +

437 683 447 683 446 683 598 683 596 683

+

437 683 587 683 585 683 427 683 421 683 420 683 571 683 425 683 426 683

+

441 683 435 683 431 683 727 683

+

586 683 588 683 435 683 434 683 429 683 576 683 573 683 572 683 423 683 421 683 427 683

+

595 683 597 683 446 683 609 683 445 683 604 683 439 683 434 683 435 683

+
+ + + +

679 684 556 684 558 684 558 684 677 684 679 684 558 684 675 684 677 684 543 684 671 684 673 684 543 684 669 684 671 684 543 684 666 684 669 684 543 684 667 684 666 684

+
+ + + +

558 684 541 684 543 684 673 684 675 684

+
+ + + +

665 685 664 685 538 685 538 685 668 685 665 685 538 685 670 685 668 685 557 685 674 685 672 685 557 685 676 685 674 685 557 685 678 685 676 685 557 685 554 685 678 685

+
+ + + +

538 685 540 685 557 685 672 685 670 685

+
+ + + +

627 686 456 686 454 686 454 686 629 686 627 686 454 686 631 686 629 686 476 686 462 686 640 686 476 686 640 686 637 686 476 686 637 686 635 686 476 686 635 686 633 686 644 686 478 686 473 686 644 686 646 686 478 686 657 686 540 686 655 686 659 686 540 686 657 686 660 686 658 686 541 686 656 686 541 686 658 686 647 686 645 686 479 686 645 686 475 686 479 686 641 686 464 686 481 686 481 686 638 686 641 686 481 686 636 686 638 686 481 686 634 686 636 686 453 686 630 686 632 686 453 686 628 686 630 686 453 686 626 686 628 686

+
+ + + +

478 686 476 686 633 686 631 686 454 686 452 686 471 686 473 686

+

648 686 482 686 477 686 478 686 646 686

+

652 686 506 686 482 686 648 686

+

536 686 506 686 652 686 535 686

+

655 686 540 686 539 686 536 686 535 686

+

661 686 549 686 548 686 540 686 659 686

+

663 686 550 686 549 686 661 686

+

551 686 550 686 663 686 662 686

+

660 686 541 686 552 686 551 686 662 686

+

654 686 537 686 542 686 541 686 656 686

+

507 686 537 686 654 686 653 686

+

653 686 649 686 483 686 507 686

+

649 686 647 686 479 686 480 686 483 686

+

632 686 634 686 481 686 479 686 475 686 470 686 451 686 453 686

+
+ + + +

466 687 467 687 459 687 460 687 470 687 469 687

+
+ + + +

469 687 466 687 459 687 450 687 449 687 451 687 460 687

+
+ + + +

559 688 561 688 684 688 700 688 564 688 559 688

+
+ + + +

559 688 684 688 687 688 689 688 691 688 693 688 695 688 697 688 701 688 700 688

+
+ + + +

567 689 564 689 706 689 724 689 569 689 567 689

+
+ + + +

567 689 706 689 707 689 711 689 713 689 715 689 717 689 719 689 721 689 724 689

+
+ + + +

562 690 566 690 704 690 686 690 561 690 562 690

+
+ + + +

562 690 704 690 702 690 698 690 696 690 694 690 692 690 690 690 688 690 686 690

+
+ + + +

570 691 569 691 726 691 710 691 566 691 570 691

+
+ + + +

570 691 726 691 722 691 720 691 718 691 716 691 714 691 712 691 708 691 710 691

+
+ + + +

688 644 628 584 626 582 686 642

+

628 584 688 644 690 646 630 586

+

630 586 690 646 692 648 632 588

+

632 588 692 648 694 650 634 590

+

634 590 694 650 696 652 636 592

+

636 592 696 652 698 654 638 594

+

638 594 698 654 702 658 641 597

+

641 597 702 658 703 659 642 598

+

704 660 566 522 650 606 464 420

+

650 606 566 522 709 665 547 503

+

708 664 666 622 667 623 710 666

+

666 622 708 664 712 668 669 625

+

669 625 712 668 714 670 671 627

+

671 627 714 670 716 672 673 629

+

673 629 716 672 718 674 675 631

+

675 631 718 674 720 676 677 633

+

677 633 720 676 722 678 679 635

+

679 635 722 678 725 681 681 637

+

556 512 726 682 569 525 682 638

+

569 525 724 680 554 510 682 638

+

721 677 678 634 680 636 723 679

+

678 634 721 677 719 675 676 632

+

676 632 719 675 717 673 674 630

+

674 630 717 673 715 671 672 628

+

672 628 715 671 713 669 670 626

+

670 626 713 669 711 667 668 624

+

668 624 711 667 707 663 665 621

+

665 621 707 663 706 662 664 620

+

545 501 705 661 564 520 651 607

+

651 607 564 520 700 656 462 418

+

639 595 699 655 701 657 640 596

+

640 596 701 657 697 653 637 593

+

637 593 697 653 695 651 635 591

+

695 651 693 649 633 589 635 591

+

631 587 633 589 693 649 691 647

+

629 585 631 587 691 647 689 645

+

627 583 629 585 689 645 687 643

+

625 581 627 583 687 643 683 639

+

684 640 561 517 449 405 456 412

+

449 405 561 517 685 641 458 414

+
+ + + +

688 644 628 584 626 582 686 642

+

628 584 688 644 690 646 630 586

+

630 586 690 646 692 648 632 588

+

632 588 692 648 694 650 634 590

+

634 590 694 650 696 652 636 592

+

636 592 696 652 698 654 638 594

+

638 594 698 654 702 658 641 597

+

641 597 702 658 703 659 642 598

+

704 660 566 522 650 606 464 420

+

650 606 566 522 709 665 547 503

+

708 664 666 622 667 623 710 666

+

666 622 708 664 712 668 669 625

+

669 625 712 668 714 670 671 627

+

671 627 714 670 716 672 673 629

+

673 629 716 672 718 674 675 631

+

675 631 718 674 720 676 677 633

+

677 633 720 676 722 678 679 635

+

679 635 722 678 725 681 681 637

+

556 512 726 682 569 525 682 638

+

569 525 724 680 554 510 682 638

+

721 677 678 634 680 636 723 679

+

678 634 721 677 719 675 676 632

+

676 632 719 675 717 673 674 630

+

674 630 717 673 715 671 672 628

+

672 628 715 671 713 669 670 626

+

670 626 713 669 711 667 668 624

+

668 624 711 667 707 663 665 621

+

665 621 707 663 706 662 664 620

+

545 501 705 661 564 520 651 607

+

651 607 564 520 700 656 462 418

+

639 595 699 655 701 657 640 596

+

640 596 701 657 697 653 637 593

+

637 593 697 653 695 651 635 591

+

695 651 693 649 633 589 635 591

+

631 587 633 589 693 649 691 647

+

629 585 631 587 691 647 689 645

+

627 583 629 585 689 645 687 643

+

625 581 627 583 687 643 683 639

+

684 640 561 517 449 405 456 412

+

449 405 561 517 685 641 458 414

+

610 566 609 565 447 403 614 570 617 573 621 577 623 579 619 575 615 571

+

426 382 574 530 577 533 579 535 590 546 591 547 605 561 607 563 612 568 614 570

+

649 605 653 609 592 548 580 536

+

647 603 649 605 580 536 578 534

+

645 601 647 603 578 534 575 531

+

475 431 645 601 575 531 425 381

+

469 425 475 431 425 381 571 527

+

466 422 469 425 571 527 420 376

+

643 599 466 422 420 376 423 379

+

473 429 643 599 423 379 572 528

+

644 600 473 429 572 528 573 529

+

646 602 644 600 573 529 576 532

+

648 604 646 602 576 532 429 385

+

652 608 648 604 429 385 439 395

+

535 491 652 608 439 395 604 560

+

445 401 655 611 535 491 604 560

+

611 567 657 613 655 611 445 401

+

616 572 659 615 657 613 611 567

+

620 576 661 617 659 615 616 572

+

624 580 663 619 661 617 620 576

+

662 618 663 619 624 580 622 578

+

660 616 662 618 622 578 618 574

+

658 614 660 616 618 574 613 569

+

656 612 658 614 613 569 608 564

+

654 610 656 612 608 564 606 562

+

653 609 654 610 606 562 592 548

+
+ + + +

688 644 628 584 626 582 686 642

+

628 584 688 644 690 646 630 586

+

630 586 690 646 692 648 632 588

+

632 588 692 648 694 650 634 590

+

634 590 694 650 696 652 636 592

+

636 592 696 652 698 654 638 594

+

638 594 698 654 702 658 641 597

+

641 597 702 658 703 659 642 598

+

704 660 566 522 650 606 464 420

+

650 606 566 522 709 665 547 503

+

708 664 666 622 667 623 710 666

+

666 622 708 664 712 668 669 625

+

669 625 712 668 714 670 671 627

+

671 627 714 670 716 672 673 629

+

673 629 716 672 718 674 675 631

+

675 631 718 674 720 676 677 633

+

677 633 720 676 722 678 679 635

+

679 635 722 678 725 681 681 637

+

556 512 726 682 569 525 682 638

+

569 525 724 680 554 510 682 638

+

721 677 678 634 680 636 723 679

+

678 634 721 677 719 675 676 632

+

676 632 719 675 717 673 674 630

+

674 630 717 673 715 671 672 628

+

672 628 715 671 713 669 670 626

+

670 626 713 669 711 667 668 624

+

668 624 711 667 707 663 665 621

+

665 621 707 663 706 662 664 620

+

545 501 705 661 564 520 651 607

+

651 607 564 520 700 656 462 418

+

639 595 699 655 701 657 640 596

+

640 596 701 657 697 653 637 593

+

637 593 697 653 695 651 635 591

+

695 651 693 649 633 589 635 591

+

631 587 633 589 693 649 691 647

+

629 585 631 587 691 647 689 645

+

627 583 629 585 689 645 687 643

+

625 581 627 583 687 643 683 639

+

684 640 561 517 449 405 456 412

+

449 405 561 517 685 641 458 414

+

610 566 609 565 447 403 614 570 617 573 621 577 623 579 619 575 615 571

+

426 382 574 530 577 533 579 535 590 546 591 547 605 561 607 563 612 568 614 570

+

649 605 653 609 592 548 580 536

+

647 603 649 605 580 536 578 534

+

645 601 647 603 578 534 575 531

+

475 431 645 601 575 531 425 381

+

469 425 475 431 425 381 571 527

+

466 422 469 425 571 527 420 376

+

643 599 466 422 420 376 423 379

+

473 429 643 599 423 379 572 528

+

644 600 473 429 572 528 573 529

+

646 602 644 600 573 529 576 532

+

648 604 646 602 576 532 429 385

+

652 608 648 604 429 385 439 395

+

535 491 652 608 439 395 604 560

+

445 401 655 611 535 491 604 560

+

611 567 657 613 655 611 445 401

+

616 572 659 615 657 613 611 567

+

620 576 661 617 659 615 616 572

+

624 580 663 619 661 617 620 576

+

662 618 663 619 624 580 622 578

+

660 616 662 618 622 578 618 574

+

658 614 660 616 618 574 613 569

+

656 612 658 614 613 569 608 564

+

654 610 656 612 608 564 606 562

+

653 609 654 610 606 562 592 548

+

516 472 512 468 508 464 502 458 498 454 494 450 490 446 486 442 484 440 488 444 492 448 496 452 500 456 504 460 510 466 514 470 518 474 522 478 526 482 530 486 532 488 528 484 524 480 520 476

+

443 399 511 467 505 461 433 389

+

433 389 505 461 501 457 589 545

+

589 545 501 457 497 453 587 543

+

587 543 497 453 493 449 585 541

+

585 541 493 449 489 445 583 539

+

583 539 489 445 485 441 581 537

+

581 537 485 441 487 443 582 538

+

582 538 487 443 491 447 584 540

+

584 540 491 447 495 451 586 542

+

586 542 495 451 499 455 588 544

+

588 544 499 455 503 459 431 387

+

431 387 503 459 509 465 441 397

+

441 397 509 465 513 469 593 549

+

593 549 513 469 517 473 595 551

+

595 551 517 473 521 477 597 553

+

599 555 597 553 521 477 525 481

+

529 485 601 557 599 555 525 481

+

603 559 601 557 529 485 533 489

+

602 558 603 559 533 489 531 487

+

600 556 602 558 531 487 527 483

+

598 554 600 556 527 483 523 479

+

596 552 598 554 523 479 519 475

+

594 550 596 552 519 475 515 471

+

594 550 515 471 511 467 443 399

+
+ + + +

728 692 729 692 730 692 731 692 732 692

+
+ + + +

733 693 734 693 735 693 736 693 737 693

+
+ + + +

738 694 739 694 740 694 741 694 742 694

+
+ + + +

743 695 744 696 745 697 746 698

+

747 699 748 700 749 701 750 702

+

751 703 752 704 753 705 754 706

+

755 707 756 708 757 709 758 710

+

759 711 760 712 761 713 762 714

+
+ + + +

768 715 769 715 770 715

+
+ + + +

763 715 764 715 765 715 766 715 767 715

+
+ + + +

779 1021 932 1021 934 1021 779 1021 930 1021 932 1021 783 1021 930 1021 779 1021 779 1021 931 1021 783 1021 779 1021 933 1021 931 1021 795 1021 951 1021 949 1021 795 1021 949 1021 948 1021 788 1021 946 1021 944 1021 788 1021 944 1021 940 1021 940 1021 938 1021 788 1021 788 1021 938 1021 936 1021 788 1021 936 1021 935 1021 787 1021 943 1021 945 1021 787 1021 939 1021 943 1021 939 1021 787 1021 937 1021 787 1021 785 1021 937 1021 795 1021 947 1021 792 1021 795 1021 792 1021 950 1021 952 1021 795 1021 950 1021 795 1021 952 1021 951 1021

+
+ + + +

788 1021 796 1021 795 1021 948 1021 946 1021

+

788 1021 935 1021 933 1021 779 1021 773 1021 772 1021 920 1021 777 1021 778 1021

+

934 1021 785 1021 787 1021 786 1021 781 1021 925 1021 922 1021 921 1021 775 1021 773 1021 779 1021

+

945 1021 947 1021 795 1021 958 1021 794 1021 953 1021 790 1021 786 1021 787 1021

+
+ + + +

1028 1022 905 1022 907 1022 907 1022 1026 1022 1028 1022 907 1022 1024 1022 1026 1022 892 1022 1020 1022 1022 1022 892 1022 1018 1022 1020 1022 892 1022 1015 1022 1018 1022 892 1022 1016 1022 1015 1022

+
+ + + +

907 1022 890 1022 892 1022 1022 1022 1024 1022

+
+ + + +

1014 1023 1013 1023 887 1023 887 1023 1017 1023 1014 1023 887 1023 1019 1023 1017 1023 906 1023 1023 1023 1021 1023 906 1023 1025 1023 1023 1023 906 1023 1027 1023 1025 1023 906 1023 903 1023 1027 1023

+
+ + + +

887 1023 889 1023 906 1023 1021 1023 1019 1023

+
+ + + +

976 1024 805 1024 803 1024 803 1024 978 1024 976 1024 803 1024 980 1024 978 1024 825 1024 811 1024 989 1024 825 1024 989 1024 986 1024 825 1024 986 1024 984 1024 825 1024 984 1024 982 1024 993 1024 827 1024 822 1024 993 1024 995 1024 827 1024 1006 1024 889 1024 1004 1024 1008 1024 889 1024 1006 1024 1009 1024 1007 1024 890 1024 1005 1024 890 1024 1007 1024 996 1024 994 1024 828 1024 994 1024 824 1024 828 1024 990 1024 813 1024 830 1024 830 1024 987 1024 990 1024 830 1024 985 1024 987 1024 830 1024 983 1024 985 1024 802 1024 979 1024 981 1024 802 1024 977 1024 979 1024 802 1024 975 1024 977 1024

+
+ + + +

827 1024 825 1024 982 1024 980 1024 803 1024 801 1024 820 1024 822 1024

+

834 1024 831 1024 826 1024 827 1024 995 1024

+

1000 1024 857 1024 831 1024 834 1024

+

885 1024 857 1024 1000 1024 1002 1024

+

1004 1024 889 1024 888 1024 885 1024 1002 1024

+

1010 1024 898 1024 897 1024 889 1024 1008 1024

+

1012 1024 899 1024 898 1024 1010 1024

+

900 1024 899 1024 1012 1024 1011 1024

+

1009 1024 890 1024 901 1024 900 1024 1011 1024

+

1003 1024 886 1024 891 1024 890 1024 1005 1024

+

858 1024 886 1024 1003 1024 1001 1024

+

1001 1024 997 1024 832 1024 858 1024

+

997 1024 996 1024 828 1024 829 1024 832 1024

+

981 1024 983 1024 830 1024 828 1024 824 1024 819 1024 800 1024 802 1024

+
+ + + +

815 1025 816 1025 808 1025 809 1025 819 1025 818 1025

+
+ + + +

818 1025 815 1025 808 1025 799 1025 798 1025 800 1025 809 1025

+
+ + + +

908 1026 910 1026 1033 1026 1049 1026 913 1026 908 1026

+
+ + + +

908 1026 1033 1026 1036 1026 1038 1026 1040 1026 1042 1026 1044 1026 1046 1026 1050 1026 1049 1026

+
+ + + +

916 1027 913 1027 1055 1027 1073 1027 918 1027 916 1027

+
+ + + +

916 1027 1055 1027 1056 1027 1060 1027 1062 1027 1064 1027 1066 1027 1068 1027 1070 1027 1073 1027

+
+ + + +

911 1028 915 1028 1053 1028 1035 1028 910 1028 911 1028

+
+ + + +

911 1028 1053 1028 1051 1028 1047 1028 1045 1028 1043 1028 1041 1028 1039 1028 1037 1028 1035 1028

+
+ + + +

919 1029 918 1029 1075 1029 1059 1029 915 1029 919 1029

+
+ + + +

919 1029 1075 1029 1071 1029 1069 1029 1067 1029 1065 1029 1063 1029 1061 1029 1057 1029 1059 1029

+
+ + + +

1037 982 977 922 975 920 1035 980

+

977 922 1037 982 1039 984 979 924

+

979 924 1039 984 1041 986 981 926

+

981 926 1041 986 1043 988 983 928

+

983 928 1043 988 1045 990 985 930

+

985 930 1045 990 1047 992 987 932

+

987 932 1047 992 1051 996 990 935

+

990 935 1051 996 1052 997 991 936

+

1053 998 915 860 998 943 813 758

+

998 943 915 860 1058 1003 896 841

+

1057 1002 1015 960 1016 961 1059 1004

+

1015 960 1057 1002 1061 1006 1018 963

+

1018 963 1061 1006 1063 1008 1020 965

+

1020 965 1063 1008 1065 1010 1022 967

+

1022 967 1065 1010 1067 1012 1024 969

+

1024 969 1067 1012 1069 1014 1026 971

+

1026 971 1069 1014 1071 1016 1028 973

+

1028 973 1071 1016 1074 1019 1030 975

+

905 850 1075 1020 918 863 1031 976

+

918 863 1073 1018 903 848 1031 976

+

1070 1015 1027 972 1029 974 1072 1017

+

1027 972 1070 1015 1068 1013 1025 970

+

1025 970 1068 1013 1066 1011 1023 968

+

1023 968 1066 1011 1064 1009 1021 966

+

1021 966 1064 1009 1062 1007 1019 964

+

1019 964 1062 1007 1060 1005 1017 962

+

1017 962 1060 1005 1056 1001 1014 959

+

1014 959 1056 1001 1055 1000 1013 958

+

894 839 1054 999 913 858 999 944

+

999 944 913 858 1049 994 811 756

+

988 933 1048 993 1050 995 989 934

+

989 934 1050 995 1046 991 986 931

+

986 931 1046 991 1044 989 984 929

+

1044 989 1042 987 982 927 984 929

+

980 925 982 927 1042 987 1040 985

+

978 923 980 925 1040 985 1038 983

+

976 921 978 923 1038 983 1036 981

+

974 919 976 921 1036 981 1032 977

+

1033 978 910 855 798 743 805 750

+

798 743 910 855 1034 979 807 752

+
+ + + +

1037 982 977 922 975 920 1035 980

+

977 922 1037 982 1039 984 979 924

+

979 924 1039 984 1041 986 981 926

+

981 926 1041 986 1043 988 983 928

+

983 928 1043 988 1045 990 985 930

+

985 930 1045 990 1047 992 987 932

+

987 932 1047 992 1051 996 990 935

+

990 935 1051 996 1052 997 991 936

+

1053 998 915 860 998 943 813 758

+

998 943 915 860 1058 1003 896 841

+

1057 1002 1015 960 1016 961 1059 1004

+

1015 960 1057 1002 1061 1006 1018 963

+

1018 963 1061 1006 1063 1008 1020 965

+

1020 965 1063 1008 1065 1010 1022 967

+

1022 967 1065 1010 1067 1012 1024 969

+

1024 969 1067 1012 1069 1014 1026 971

+

1026 971 1069 1014 1071 1016 1028 973

+

1028 973 1071 1016 1074 1019 1030 975

+

905 850 1075 1020 918 863 1031 976

+

918 863 1073 1018 903 848 1031 976

+

1070 1015 1027 972 1029 974 1072 1017

+

1027 972 1070 1015 1068 1013 1025 970

+

1025 970 1068 1013 1066 1011 1023 968

+

1023 968 1066 1011 1064 1009 1021 966

+

1021 966 1064 1009 1062 1007 1019 964

+

1019 964 1062 1007 1060 1005 1017 962

+

1017 962 1060 1005 1056 1001 1014 959

+

1014 959 1056 1001 1055 1000 1013 958

+

894 839 1054 999 913 858 999 944

+

999 944 913 858 1049 994 811 756

+

988 933 1048 993 1050 995 989 934

+

989 934 1050 995 1046 991 986 931

+

986 931 1046 991 1044 989 984 929

+

1044 989 1042 987 982 927 984 929

+

980 925 982 927 1042 987 1040 985

+

978 923 980 925 1040 985 1038 983

+

976 921 978 923 1038 983 1036 981

+

974 919 976 921 1036 981 1032 977

+

1033 978 910 855 798 743 805 750

+

798 743 910 855 1034 979 807 752

+

959 904 958 903 796 741 963 908 966 911 970 915 972 917 968 913 964 909

+

778 723 923 868 926 871 928 873 941 886 954 899 956 901 961 906 963 908

+

997 942 1001 946 942 887 929 874

+

996 941 997 942 929 874 927 872

+

994 939 996 941 927 872 924 869

+

824 769 994 939 924 869 777 722

+

818 763 824 769 777 722 920 865

+

815 760 818 763 920 865 772 717

+

992 937 815 760 772 717 775 720

+

822 767 992 937 775 720 921 866

+

993 938 822 767 921 866 922 867

+

995 940 993 938 922 867 925 870

+

834 779 995 940 925 870 781 726

+

1000 945 834 779 781 726 790 735

+

1002 947 1000 945 790 735 953 898

+

794 739 1004 949 1002 947 953 898

+

960 905 1006 951 1004 949 794 739

+

965 910 1008 953 1006 951 960 905

+

969 914 1010 955 1008 953 965 910

+

973 918 1012 957 1010 955 969 914

+

1011 956 1012 957 973 918 971 916

+

1009 954 1011 956 971 916 967 912

+

1007 952 1009 954 967 912 962 907

+

1005 950 1007 952 962 907 957 902

+

1003 948 1005 950 957 902 955 900

+

1001 946 1003 948 955 900 942 887

+
+ + + +

1037 982 977 922 975 920 1035 980

+

977 922 1037 982 1039 984 979 924

+

979 924 1039 984 1041 986 981 926

+

981 926 1041 986 1043 988 983 928

+

983 928 1043 988 1045 990 985 930

+

985 930 1045 990 1047 992 987 932

+

987 932 1047 992 1051 996 990 935

+

990 935 1051 996 1052 997 991 936

+

1053 998 915 860 998 943 813 758

+

998 943 915 860 1058 1003 896 841

+

1057 1002 1015 960 1016 961 1059 1004

+

1015 960 1057 1002 1061 1006 1018 963

+

1018 963 1061 1006 1063 1008 1020 965

+

1020 965 1063 1008 1065 1010 1022 967

+

1022 967 1065 1010 1067 1012 1024 969

+

1024 969 1067 1012 1069 1014 1026 971

+

1026 971 1069 1014 1071 1016 1028 973

+

1028 973 1071 1016 1074 1019 1030 975

+

905 850 1075 1020 918 863 1031 976

+

918 863 1073 1018 903 848 1031 976

+

1070 1015 1027 972 1029 974 1072 1017

+

1027 972 1070 1015 1068 1013 1025 970

+

1025 970 1068 1013 1066 1011 1023 968

+

1023 968 1066 1011 1064 1009 1021 966

+

1021 966 1064 1009 1062 1007 1019 964

+

1019 964 1062 1007 1060 1005 1017 962

+

1017 962 1060 1005 1056 1001 1014 959

+

1014 959 1056 1001 1055 1000 1013 958

+

894 839 1054 999 913 858 999 944

+

999 944 913 858 1049 994 811 756

+

988 933 1048 993 1050 995 989 934

+

989 934 1050 995 1046 991 986 931

+

986 931 1046 991 1044 989 984 929

+

1044 989 1042 987 982 927 984 929

+

980 925 982 927 1042 987 1040 985

+

978 923 980 925 1040 985 1038 983

+

976 921 978 923 1038 983 1036 981

+

974 919 976 921 1036 981 1032 977

+

1033 978 910 855 798 743 805 750

+

798 743 910 855 1034 979 807 752

+

959 904 958 903 796 741 963 908 966 911 970 915 972 917 968 913 964 909

+

778 723 923 868 926 871 928 873 941 886 954 899 956 901 961 906 963 908

+

997 942 1001 946 942 887 929 874

+

996 941 997 942 929 874 927 872

+

994 939 996 941 927 872 924 869

+

824 769 994 939 924 869 777 722

+

818 763 824 769 777 722 920 865

+

815 760 818 763 920 865 772 717

+

992 937 815 760 772 717 775 720

+

822 767 992 937 775 720 921 866

+

993 938 822 767 921 866 922 867

+

995 940 993 938 922 867 925 870

+

834 779 995 940 925 870 781 726

+

1000 945 834 779 781 726 790 735

+

1002 947 1000 945 790 735 953 898

+

794 739 1004 949 1002 947 953 898

+

960 905 1006 951 1004 949 794 739

+

965 910 1008 953 1006 951 960 905

+

969 914 1010 955 1008 953 965 910

+

973 918 1012 957 1010 955 969 914

+

1011 956 1012 957 973 918 971 916

+

1009 954 1011 956 971 916 967 912

+

1007 952 1009 954 967 912 962 907

+

1005 950 1007 952 962 907 957 902

+

1003 948 1005 950 957 902 955 900

+

1001 946 1003 948 955 900 942 887

+

867 812 863 808 859 804 853 798 849 794 845 790 841 786 837 782 835 780 839 784 843 788 847 792 851 796 855 800 861 806 865 810 869 814 873 818 877 822 881 826 883 828 879 824 875 820 871 816

+

940 885 862 807 856 801 938 883

+

938 883 856 801 852 797 936 881

+

936 881 852 797 848 793 935 880

+

935 880 848 793 844 789 933 878

+

933 878 844 789 840 785 931 876

+

931 876 840 785 836 781 783 728

+

783 728 836 781 838 783 930 875

+

930 875 838 783 842 787 932 877

+

932 877 842 787 846 791 934 879

+

934 879 846 791 850 795 785 730

+

785 730 850 795 854 799 937 882

+

937 882 854 799 860 805 939 884

+

939 884 860 805 864 809 943 888

+

943 888 864 809 868 813 945 890

+

945 890 868 813 872 817 947 892

+

792 737 947 892 872 817 876 821

+

880 825 950 895 792 737 876 821

+

952 897 950 895 880 825 884 829

+

951 896 952 897 884 829 882 827

+

949 894 951 896 882 827 878 823

+

948 893 949 894 878 823 874 819

+

946 891 948 893 874 819 870 815

+

944 889 946 891 870 815 866 811

+

944 889 866 811 862 807 940 885

+
+ + + +

1076 1030 1077 1030 1078 1030 1079 1030 1080 1030

+
+ + + +

1081 1031 1082 1031 1083 1031 1084 1031 1085 1031

+
+ + + +

1086 1032 1087 1032 1088 1032 1089 1032 1090 1032

+
+ + + +

1091 1033 1092 1034 1093 1035 1094 1036

+

1095 1037 1096 1038 1097 1039 1098 1040

+

1099 1041 1100 1042 1101 1043 1102 1044

+

1103 1045 1104 1046 1105 1047 1106 1048

+

1107 1049 1108 1050 1109 1051 1110 1052

+
+ + + +

1116 1053 1117 1053 1118 1053

+
+ + + +

1111 1053 1112 1053 1113 1053 1114 1053 1115 1053

+
+ + + +

1127 1358 1279 1358 1131 1358 1127 1358 1277 1358 1279 1358 1276 1358 1277 1358 1127 1358 1127 1358 1278 1358 1276 1358 1127 1358 1280 1358 1278 1358 1141 1358 1298 1358 1296 1358 1141 1358 1296 1358 1294 1358 1134 1358 1292 1358 1291 1358 1134 1358 1291 1358 1287 1358 1287 1358 1285 1358 1134 1358 1134 1358 1285 1358 1283 1358 1134 1358 1283 1358 1281 1358 1133 1358 1290 1358 1138 1358 1133 1358 1286 1358 1290 1358 1286 1358 1133 1358 1284 1358 1133 1358 1282 1358 1284 1358 1141 1358 1293 1358 1295 1358 1141 1358 1295 1358 1297 1358 1299 1358 1141 1358 1297 1358 1141 1358 1299 1358 1298 1358

+
+ + + +

1134 1358 1142 1358 1141 1358 1294 1358 1292 1358

+

1134 1358 1281 1358 1280 1358 1127 1358 1121 1358 1120 1358 1266 1358 1125 1358 1126 1358

+

1131 1358 1282 1358 1133 1358 1132 1358 1129 1358 1271 1358 1268 1358 1267 1358 1123 1358 1121 1358 1127 1358

+

1138 1358 1293 1358 1141 1358 1305 1358 1140 1358 1300 1358 1136 1358 1132 1358 1133 1358

+
+ + + +

1375 1359 1251 1359 1253 1359 1253 1359 1373 1359 1375 1359 1253 1359 1371 1359 1373 1359 1238 1359 1367 1359 1369 1359 1238 1359 1365 1359 1367 1359 1238 1359 1362 1359 1365 1359 1238 1359 1363 1359 1362 1359

+
+ + + +

1253 1359 1236 1359 1238 1359 1369 1359 1371 1359

+
+ + + +

1361 1360 1360 1360 1233 1360 1233 1360 1364 1360 1361 1360 1233 1360 1366 1360 1364 1360 1252 1360 1370 1360 1368 1360 1252 1360 1372 1360 1370 1360 1252 1360 1374 1360 1372 1360 1252 1360 1249 1360 1374 1360

+
+ + + +

1233 1360 1235 1360 1252 1360 1368 1360 1366 1360

+
+ + + +

1323 1361 1321 1361 1149 1361 1149 1361 1325 1361 1323 1361 1149 1361 1327 1361 1325 1361 1171 1361 1157 1361 1336 1361 1171 1361 1336 1361 1333 1361 1171 1361 1333 1361 1331 1361 1171 1361 1331 1361 1329 1361 1340 1361 1173 1361 1168 1361 1340 1361 1342 1361 1173 1361 1353 1361 1235 1361 1351 1361 1355 1361 1235 1361 1353 1361 1356 1361 1354 1361 1236 1361 1352 1361 1236 1361 1354 1361 1343 1361 1341 1361 1174 1361 1341 1361 1170 1361 1174 1361 1337 1361 1159 1361 1176 1361 1176 1361 1334 1361 1337 1361 1176 1361 1332 1361 1334 1361 1176 1361 1330 1361 1332 1361 1148 1361 1326 1361 1328 1361 1148 1361 1324 1361 1326 1361 1148 1361 1322 1361 1324 1361

+
+ + + +

1173 1361 1171 1361 1329 1361 1327 1361 1149 1361 1147 1361 1166 1361 1168 1361

+

1344 1361 1177 1361 1172 1361 1173 1361 1342 1361

+

1204 1361 1201 1361 1177 1361 1344 1361

+

1231 1361 1201 1361 1204 1361 1349 1361

+

1351 1361 1235 1361 1234 1361 1231 1361 1349 1361

+

1357 1361 1244 1361 1243 1361 1235 1361 1355 1361

+

1359 1361 1245 1361 1244 1361 1357 1361

+

1246 1361 1245 1361 1359 1361 1358 1361

+

1356 1361 1236 1361 1247 1361 1246 1361 1358 1361

+

1350 1361 1232 1361 1237 1361 1236 1361 1352 1361

+

1202 1361 1232 1361 1350 1361 1348 1361

+

1348 1361 1345 1361 1178 1361 1202 1361

+

1345 1361 1343 1361 1174 1361 1175 1361 1178 1361

+

1328 1361 1330 1361 1176 1361 1174 1361 1170 1361 1165 1361 1146 1361 1148 1361

+
+ + + +

1161 1362 1162 1362 1154 1362 1155 1362 1165 1362 1164 1362

+
+ + + +

1164 1362 1161 1362 1154 1362 1145 1362 1144 1362 1146 1362 1155 1362

+
+ + + +

1254 1363 1256 1363 1380 1363 1396 1363 1259 1363 1254 1363

+
+ + + +

1254 1363 1380 1363 1383 1363 1385 1363 1387 1363 1389 1363 1391 1363 1393 1363 1397 1363 1396 1363

+
+ + + +

1262 1364 1259 1364 1402 1364 1420 1364 1264 1364 1262 1364

+
+ + + +

1262 1364 1402 1364 1403 1364 1407 1364 1409 1364 1411 1364 1413 1364 1415 1364 1417 1364 1420 1364

+
+ + + +

1257 1365 1261 1365 1400 1365 1382 1365 1256 1365 1257 1365

+
+ + + +

1257 1365 1400 1365 1398 1365 1394 1365 1392 1365 1390 1365 1388 1365 1386 1365 1384 1365 1382 1365

+
+ + + +

1265 1366 1264 1366 1422 1366 1406 1366 1261 1366 1265 1366

+
+ + + +

1265 1366 1422 1366 1418 1366 1416 1366 1414 1366 1412 1366 1410 1366 1408 1366 1404 1366 1406 1366

+
+ + + +

1384 1319 1324 1259 1322 1257 1382 1317

+

1324 1259 1384 1319 1386 1321 1326 1261

+

1326 1261 1386 1321 1388 1323 1328 1263

+

1328 1263 1388 1323 1390 1325 1330 1265

+

1330 1265 1390 1325 1392 1327 1332 1267

+

1332 1267 1392 1327 1394 1329 1334 1269

+

1334 1269 1394 1329 1398 1333 1337 1272

+

1337 1272 1398 1333 1399 1334 1338 1273

+

1400 1335 1261 1196 1346 1281 1159 1094

+

1346 1281 1261 1196 1405 1340 1242 1177

+

1404 1339 1362 1297 1363 1298 1406 1341

+

1362 1297 1404 1339 1408 1343 1365 1300

+

1365 1300 1408 1343 1410 1345 1367 1302

+

1367 1302 1410 1345 1412 1347 1369 1304

+

1369 1304 1412 1347 1414 1349 1371 1306

+

1371 1306 1414 1349 1416 1351 1373 1308

+

1373 1308 1416 1351 1418 1353 1375 1310

+

1375 1310 1418 1353 1421 1356 1377 1312

+

1251 1186 1422 1357 1264 1199 1378 1313

+

1264 1199 1420 1355 1249 1184 1378 1313

+

1417 1352 1374 1309 1376 1311 1419 1354

+

1374 1309 1417 1352 1415 1350 1372 1307

+

1372 1307 1415 1350 1413 1348 1370 1305

+

1370 1305 1413 1348 1411 1346 1368 1303

+

1368 1303 1411 1346 1409 1344 1366 1301

+

1366 1301 1409 1344 1407 1342 1364 1299

+

1364 1299 1407 1342 1403 1338 1361 1296

+

1361 1296 1403 1338 1402 1337 1360 1295

+

1240 1175 1401 1336 1259 1194 1347 1282

+

1347 1282 1259 1194 1396 1331 1157 1092

+

1335 1270 1395 1330 1397 1332 1336 1271

+

1336 1271 1397 1332 1393 1328 1333 1268

+

1333 1268 1393 1328 1391 1326 1331 1266

+

1391 1326 1389 1324 1329 1264 1331 1266

+

1327 1262 1329 1264 1389 1324 1387 1322

+

1325 1260 1327 1262 1387 1322 1385 1320

+

1323 1258 1325 1260 1385 1320 1383 1318

+

1321 1256 1323 1258 1383 1318 1380 1315

+

1379 1314 1256 1191 1144 1079 1151 1086

+

1144 1079 1256 1191 1381 1316 1153 1088

+
+ + + +

1384 1319 1324 1259 1322 1257 1382 1317

+

1324 1259 1384 1319 1386 1321 1326 1261

+

1326 1261 1386 1321 1388 1323 1328 1263

+

1328 1263 1388 1323 1390 1325 1330 1265

+

1330 1265 1390 1325 1392 1327 1332 1267

+

1332 1267 1392 1327 1394 1329 1334 1269

+

1334 1269 1394 1329 1398 1333 1337 1272

+

1337 1272 1398 1333 1399 1334 1338 1273

+

1400 1335 1261 1196 1346 1281 1159 1094

+

1346 1281 1261 1196 1405 1340 1242 1177

+

1404 1339 1362 1297 1363 1298 1406 1341

+

1362 1297 1404 1339 1408 1343 1365 1300

+

1365 1300 1408 1343 1410 1345 1367 1302

+

1367 1302 1410 1345 1412 1347 1369 1304

+

1369 1304 1412 1347 1414 1349 1371 1306

+

1371 1306 1414 1349 1416 1351 1373 1308

+

1373 1308 1416 1351 1418 1353 1375 1310

+

1375 1310 1418 1353 1421 1356 1377 1312

+

1251 1186 1422 1357 1264 1199 1378 1313

+

1264 1199 1420 1355 1249 1184 1378 1313

+

1417 1352 1374 1309 1376 1311 1419 1354

+

1374 1309 1417 1352 1415 1350 1372 1307

+

1372 1307 1415 1350 1413 1348 1370 1305

+

1370 1305 1413 1348 1411 1346 1368 1303

+

1368 1303 1411 1346 1409 1344 1366 1301

+

1366 1301 1409 1344 1407 1342 1364 1299

+

1364 1299 1407 1342 1403 1338 1361 1296

+

1361 1296 1403 1338 1402 1337 1360 1295

+

1240 1175 1401 1336 1259 1194 1347 1282

+

1347 1282 1259 1194 1396 1331 1157 1092

+

1335 1270 1395 1330 1397 1332 1336 1271

+

1336 1271 1397 1332 1393 1328 1333 1268

+

1333 1268 1393 1328 1391 1326 1331 1266

+

1391 1326 1389 1324 1329 1264 1331 1266

+

1327 1262 1329 1264 1389 1324 1387 1322

+

1325 1260 1327 1262 1387 1322 1385 1320

+

1323 1258 1325 1260 1385 1320 1383 1318

+

1321 1256 1323 1258 1383 1318 1380 1315

+

1379 1314 1256 1191 1144 1079 1151 1086

+

1144 1079 1256 1191 1381 1316 1153 1088

+

1306 1241 1305 1240 1142 1077 1310 1245 1313 1248 1317 1252 1319 1254 1315 1250 1311 1246

+

1126 1061 1269 1204 1272 1207 1274 1209 1288 1223 1301 1236 1303 1238 1308 1243 1310 1245

+

1345 1280 1348 1283 1289 1224 1275 1210

+

1343 1278 1345 1280 1275 1210 1273 1208

+

1341 1276 1343 1278 1273 1208 1270 1205

+

1170 1105 1341 1276 1270 1205 1125 1060

+

1164 1099 1170 1105 1125 1060 1266 1201

+

1161 1096 1164 1099 1266 1201 1120 1055

+

1339 1274 1161 1096 1120 1055 1123 1058

+

1168 1103 1339 1274 1123 1058 1267 1202

+

1340 1275 1168 1103 1267 1202 1268 1203

+

1342 1277 1340 1275 1268 1203 1271 1206

+

1344 1279 1342 1277 1271 1206 1129 1064

+

1204 1139 1344 1279 1129 1064 1136 1071

+

1349 1284 1204 1139 1136 1071 1300 1235

+

1140 1075 1351 1286 1349 1284 1300 1235

+

1307 1242 1353 1288 1351 1286 1140 1075

+

1312 1247 1355 1290 1353 1288 1307 1242

+

1316 1251 1357 1292 1355 1290 1312 1247

+

1320 1255 1359 1294 1357 1292 1316 1251

+

1358 1293 1359 1294 1320 1255 1318 1253

+

1356 1291 1358 1293 1318 1253 1314 1249

+

1354 1289 1356 1291 1314 1249 1309 1244

+

1352 1287 1354 1289 1309 1244 1304 1239

+

1350 1285 1352 1287 1304 1239 1302 1237

+

1348 1283 1350 1285 1302 1237 1289 1224

+
+ + + +

1384 1319 1324 1259 1322 1257 1382 1317

+

1324 1259 1384 1319 1386 1321 1326 1261

+

1326 1261 1386 1321 1388 1323 1328 1263

+

1328 1263 1388 1323 1390 1325 1330 1265

+

1330 1265 1390 1325 1392 1327 1332 1267

+

1332 1267 1392 1327 1394 1329 1334 1269

+

1334 1269 1394 1329 1398 1333 1337 1272

+

1337 1272 1398 1333 1399 1334 1338 1273

+

1400 1335 1261 1196 1346 1281 1159 1094

+

1346 1281 1261 1196 1405 1340 1242 1177

+

1404 1339 1362 1297 1363 1298 1406 1341

+

1362 1297 1404 1339 1408 1343 1365 1300

+

1365 1300 1408 1343 1410 1345 1367 1302

+

1367 1302 1410 1345 1412 1347 1369 1304

+

1369 1304 1412 1347 1414 1349 1371 1306

+

1371 1306 1414 1349 1416 1351 1373 1308

+

1373 1308 1416 1351 1418 1353 1375 1310

+

1375 1310 1418 1353 1421 1356 1377 1312

+

1251 1186 1422 1357 1264 1199 1378 1313

+

1264 1199 1420 1355 1249 1184 1378 1313

+

1417 1352 1374 1309 1376 1311 1419 1354

+

1374 1309 1417 1352 1415 1350 1372 1307

+

1372 1307 1415 1350 1413 1348 1370 1305

+

1370 1305 1413 1348 1411 1346 1368 1303

+

1368 1303 1411 1346 1409 1344 1366 1301

+

1366 1301 1409 1344 1407 1342 1364 1299

+

1364 1299 1407 1342 1403 1338 1361 1296

+

1361 1296 1403 1338 1402 1337 1360 1295

+

1240 1175 1401 1336 1259 1194 1347 1282

+

1347 1282 1259 1194 1396 1331 1157 1092

+

1335 1270 1395 1330 1397 1332 1336 1271

+

1336 1271 1397 1332 1393 1328 1333 1268

+

1333 1268 1393 1328 1391 1326 1331 1266

+

1391 1326 1389 1324 1329 1264 1331 1266

+

1327 1262 1329 1264 1389 1324 1387 1322

+

1325 1260 1327 1262 1387 1322 1385 1320

+

1323 1258 1325 1260 1385 1320 1383 1318

+

1321 1256 1323 1258 1383 1318 1380 1315

+

1379 1314 1256 1191 1144 1079 1151 1086

+

1144 1079 1256 1191 1381 1316 1153 1088

+

1306 1241 1305 1240 1142 1077 1310 1245 1313 1248 1317 1252 1319 1254 1315 1250 1311 1246

+

1126 1061 1269 1204 1272 1207 1274 1209 1288 1223 1301 1236 1303 1238 1308 1243 1310 1245

+

1345 1280 1348 1283 1289 1224 1275 1210

+

1343 1278 1345 1280 1275 1210 1273 1208

+

1341 1276 1343 1278 1273 1208 1270 1205

+

1170 1105 1341 1276 1270 1205 1125 1060

+

1164 1099 1170 1105 1125 1060 1266 1201

+

1161 1096 1164 1099 1266 1201 1120 1055

+

1339 1274 1161 1096 1120 1055 1123 1058

+

1168 1103 1339 1274 1123 1058 1267 1202

+

1340 1275 1168 1103 1267 1202 1268 1203

+

1342 1277 1340 1275 1268 1203 1271 1206

+

1344 1279 1342 1277 1271 1206 1129 1064

+

1204 1139 1344 1279 1129 1064 1136 1071

+

1349 1284 1204 1139 1136 1071 1300 1235

+

1140 1075 1351 1286 1349 1284 1300 1235

+

1307 1242 1353 1288 1351 1286 1140 1075

+

1312 1247 1355 1290 1353 1288 1307 1242

+

1316 1251 1357 1292 1355 1290 1312 1247

+

1320 1255 1359 1294 1357 1292 1316 1251

+

1358 1293 1359 1294 1320 1255 1318 1253

+

1356 1291 1358 1293 1318 1253 1314 1249

+

1354 1289 1356 1291 1314 1249 1309 1244

+

1352 1287 1354 1289 1309 1244 1304 1239

+

1350 1285 1352 1287 1304 1239 1302 1237

+

1348 1283 1350 1285 1302 1237 1289 1224

+

1213 1148 1209 1144 1205 1140 1197 1132 1193 1128 1189 1124 1185 1120 1181 1116 1179 1114 1183 1118 1187 1122 1191 1126 1195 1130 1199 1134 1207 1142 1211 1146 1215 1150 1219 1154 1223 1158 1227 1162 1229 1164 1225 1160 1221 1156 1217 1152

+

1287 1222 1208 1143 1200 1135 1285 1220

+

1285 1220 1200 1135 1196 1131 1283 1218

+

1283 1218 1196 1131 1192 1127 1281 1216

+

1281 1216 1192 1127 1188 1123 1280 1215

+

1280 1215 1188 1123 1184 1119 1278 1213

+

1278 1213 1184 1119 1180 1115 1276 1211

+

1276 1211 1180 1115 1182 1117 1277 1212

+

1277 1212 1182 1117 1186 1121 1279 1214

+

1279 1214 1186 1121 1190 1125 1131 1066

+

1131 1066 1190 1125 1194 1129 1282 1217

+

1282 1217 1194 1129 1198 1133 1284 1219

+

1284 1219 1198 1133 1206 1141 1286 1221

+

1286 1221 1206 1141 1210 1145 1290 1225

+

1290 1225 1210 1145 1214 1149 1138 1073

+

1138 1073 1214 1149 1218 1153 1293 1228

+

1295 1230 1293 1228 1218 1153 1222 1157

+

1226 1161 1297 1232 1295 1230 1222 1157

+

1299 1234 1297 1232 1226 1161 1230 1165

+

1298 1233 1299 1234 1230 1165 1228 1163

+

1296 1231 1298 1233 1228 1163 1224 1159

+

1294 1229 1296 1231 1224 1159 1220 1155

+

1292 1227 1294 1229 1220 1155 1216 1151

+

1291 1226 1292 1227 1216 1151 1212 1147

+

1291 1226 1212 1147 1208 1143 1287 1222

+
+ + + +

1423 1367 1424 1368 1425 1369 1426 1370 1427 1371 1428 1372 1429 1373 1430 1374 1431 1375 1432 1376

+

1433 1377 1434 1378 1435 1379 1436 1380 1437 1381 1438 1382 1439 1383 1440 1384 1441 1385 1442 1386

+

1443 1387 1444 1388 1445 1389 1446 1390

+

1447 1391 1448 1392 1449 1393 1450 1394

+

1451 1395 1452 1396 1453 1397 1454 1398

+

1455 1399 1456 1400 1457 1401 1458 1402

+

1459 1403 1460 1404 1461 1405 1462 1406

+

1463 1407 1464 1408 1465 1409 1466 1410

+

1467 1411 1468 1412 1469 1413 1470 1414

+

1471 1415 1472 1416 1473 1417 1474 1418

+

1475 1419 1476 1420 1477 1421 1478 1422

+

1479 1423 1480 1424 1481 1425 1482 1426

+
+ + + +

1502 1600 1515 1600 1500 1600

+
+ + + +

1626 1600 1630 1600 1645 1600 1639 1600

+

1618 1600 1626 1600 1639 1600 1634 1600

+

1599 1600 1618 1600 1634 1600 1616 1600

+

1571 1600 1599 1600 1616 1600 1585 1600

+

1553 1600 1571 1600 1585 1600 1560 1600

+

1534 1600 1553 1600 1560 1600 1537 1600

+

1534 1600 1537 1600 1519 1600 1500 1600 1515 1600

+
+ + + +

1632 1601 1636 1601 1615 1601 1613 1601

+

1486 1601 1509 1601 1505 1601 1484 1601

+

1509 1601 1533 1601 1529 1601 1505 1601

+

1533 1601 1552 1601 1548 1601 1529 1601

+

1552 1601 1570 1601 1561 1601 1548 1601

+

1570 1601 1603 1601 1575 1601 1561 1601

+

1603 1601 1622 1601 1605 1601 1575 1601

+

1613 1601 1605 1601 1622 1601 1632 1601

+
+ + + +

1655 1599 1650 1594 1649 1593 1653 1597

+

1647 1591 1643 1587 1651 1595 1655 1599

+

1643 1587 1647 1591 1636 1580 1631 1575

+

1522 1466 1540 1484 1546 1490 1527 1471

+

1549 1493 1530 1474 1525 1469 1544 1488

+

1562 1506 1549 1493 1545 1489 1556 1500

+

1555 1499 1546 1490 1540 1484 1554 1498

+

1567 1511 1557 1501 1554 1498 1568 1512

+

1557 1501 1567 1511 1573 1517 1562 1506

+

1590 1534 1573 1517 1567 1511 1576 1520

+

1578 1522 1588 1532 1609 1553 1589 1533

+

1605 1549 1613 1557 1594 1538 1579 1523

+

1579 1523 1594 1538 1588 1532 1577 1521

+

1568 1512 1579 1523 1578 1522 1567 1511

+

1580 1524 1568 1512 1575 1519 1604 1548

+

1561 1505 1574 1518 1568 1512 1554 1498

+

1547 1491 1561 1505 1554 1498 1541 1485

+

1528 1472 1548 1492 1540 1484 1523 1467

+

1504 1448 1529 1473 1523 1467 1503 1447

+

1526 1470 1508 1452 1503 1447 1524 1468

+

1508 1452 1527 1471 1530 1474 1510 1454

+

1534 1478 1515 1459 1510 1454 1531 1475

+

1553 1497 1534 1478 1531 1475 1550 1494

+

1571 1515 1553 1497 1549 1493 1563 1507

+

1598 1542 1571 1515 1562 1506 1572 1516

+

1618 1562 1599 1543 1573 1517 1591 1535

+

1625 1569 1617 1561 1589 1533 1608 1552

+

1629 1573 1626 1570 1610 1554 1611 1555

+

1611 1555 1609 1553 1587 1531 1600 1544

+

1592 1536 1606 1550 1600 1544 1586 1530

+

1613 1557 1614 1558 1606 1550 1593 1537

+

1607 1551 1615 1559 1635 1579 1646 1590 1654 1598 1652 1596 1644 1588 1630 1574 1612 1556 1601 1545

+

1639 1583 1645 1589 1653 1597 1648 1592

+

1633 1577 1639 1583 1648 1592 1640 1584

+

1650 1594 1641 1585 1640 1584 1648 1592

+

1641 1585 1650 1594 1643 1587 1638 1582

+

1632 1576 1621 1565 1638 1582 1643 1587

+

1627 1571 1595 1539 1596 1540 1624 1568

+

1620 1564 1581 1525 1595 1539 1628 1572

+

1581 1525 1620 1564 1603 1547 1570 1514

+

1622 1566 1602 1546 1619 1563 1637 1581

+

1638 1582 1620 1564 1627 1571 1642 1586

+

1641 1585 1627 1571 1624 1568 1640 1584

+

1640 1584 1623 1567 1616 1560 1634 1578

+

1585 1529 1616 1560 1623 1567 1597 1541

+

1597 1541 1565 1509 1560 1504 1584 1528

+

1565 1509 1597 1541 1595 1539 1564 1508

+

1583 1527 1558 1502 1564 1508 1595 1539

+

1569 1513 1551 1495 1558 1502 1582 1526

+

1539 1483 1517 1461 1521 1465 1543 1487

+

1535 1479 1513 1457 1517 1461 1538 1482

+

1512 1456 1535 1479 1532 1476 1509 1453

+

1552 1496 1533 1477 1535 1479 1558 1502

+

1558 1502 1535 1479 1539 1483 1564 1508

+

1564 1508 1539 1483 1543 1487 1565 1509

+

1566 1510 1542 1486 1536 1480 1559 1503

+

1518 1462 1537 1481 1542 1486 1521 1465

+

1520 1464 1496 1440 1500 1444 1519 1463

+

1516 1460 1494 1438 1496 1440 1521 1465

+

1511 1455 1490 1434 1494 1438 1517 1461

+

1490 1434 1512 1456 1509 1453 1486 1430

+

1489 1433 1485 1429 1483 1427 1487 1431 1491 1435 1497 1441 1501 1445 1499 1443 1495 1439 1493 1437

+

1514 1458 1502 1446 1498 1442 1510 1454

+

1510 1454 1498 1442 1492 1436 1507 1451

+

1506 1450 1492 1436 1488 1432 1503 1447

+

1503 1447 1488 1432 1484 1428 1505 1449

+
+ + + +

1656 1602 1657 1603 1658 1604 1659 1605 1660 1606 1661 1607 1662 1608 1663 1609 1664 1610 1665 1611

+

1666 1612 1667 1613 1668 1614 1669 1615 1670 1616 1671 1617 1672 1618 1673 1619 1674 1620 1675 1621

+

1676 1622 1677 1623 1678 1624 1679 1625

+

1680 1626 1681 1627 1682 1628 1683 1629

+

1684 1630 1685 1631 1686 1632 1687 1633

+

1688 1634 1689 1635 1690 1636 1691 1637

+

1692 1638 1693 1639 1694 1640 1695 1641

+

1696 1642 1697 1643 1698 1644 1699 1645

+

1700 1646 1701 1647 1702 1648 1703 1649

+

1704 1650 1705 1651 1706 1652 1707 1653

+

1708 1654 1709 1655 1710 1656 1711 1657

+

1712 1658 1713 1659 1714 1660 1715 1661

+
+ + + +

1716 1662 1717 1662 1718 1662 1719 1662

+
+ + + +

1720 1663 1721 1664 1722 1665 1723 1666

+

1724 1667 1725 1668 1726 1669 1727 1670

+

1728 1671 1729 1672 1730 1673 1731 1674

+

1732 1675 1733 1676 1734 1677 1735 1678

+

1736 1679 1737 1680 1738 1681 1739 1682

+

1740 1683 1741 1684 1742 1685 1743 1686

+
+ + + +

1744 1687 1745 1687 1746 1687 1747 1687

+
+ + + +

1775 1708 1755 1708 1751 1708 1791 1708 1761 1708 1765 1708

+
+ + + +

1780 1708 1769 1708 1768 1708 1775 1708 1751 1708

+

1775 1708 1784 1708 1759 1708 1755 1708

+

1784 1708 1793 1708 1763 1708 1759 1708

+

1793 1708 1792 1708 1767 1708 1763 1708

+

1791 1708 1765 1708 1767 1708 1792 1708

+

1783 1708 1761 1708 1791 1708 1790 1708 1781 1708

+
+ + + +

1757 1709 1783 1709 1782 1709 1774 1709 1780 1709 1749 1709

+
+ + + +

1773 1709 1772 1709 1771 1709 1770 1709

+

1773 1709 1753 1709 1757 1709 1782 1709 1781 1709 1772 1709

+

1749 1709 1753 1709 1773 1709 1770 1709 1769 1709 1774 1709

+
+ + + +

1766 1710 1789 1710 1796 1710 1786 1710 1787 1710 1756 1710 1779 1710 1750 1710 1754 1710

+
+ + + +

1797 1710 1762 1710 1766 1710 1796 1710 1799 1710 1798 1710

+

1797 1710 1788 1710 1758 1710 1762 1710

+

1779 1710 1754 1710 1758 1710 1788 1710

+

1756 1710 1752 1710 1777 1710 1776 1710 1785 1710 1786 1710

+

1778 1710 1777 1710 1752 1710 1748 1710

+

1779 1710 1778 1710 1748 1710 1750 1710

+
+ + + +

1795 1711 1764 1711 1760 1711

+
+ + + +

1787 1711 1785 1711 1794 1711 1795 1711 1760 1711

+

1795 1711 1794 1711 1801 1711 1800 1711

+

1789 1711 1764 1711 1795 1711 1800 1711 1799 1711

+
+ + + +

1759 1699 1763 1703 1762 1702 1758 1698

+

1755 1695 1759 1699 1758 1698 1754 1694

+

1751 1691 1755 1695 1754 1694 1750 1690

+

1749 1689 1751 1691 1750 1690 1748 1688

+

1753 1693 1749 1689 1748 1688 1752 1692

+

1757 1697 1753 1693 1752 1692 1756 1696

+

1761 1701 1757 1697 1756 1696 1760 1700

+

1765 1705 1761 1701 1760 1700 1764 1704

+

1767 1707 1765 1705 1764 1704 1766 1706

+

1763 1703 1767 1707 1766 1706 1762 1702

+
+ + + +

1802 1712 1803 1713 1804 1714 1805 1715 1806 1716 1807 1717 1808 1718 1809 1719 1810 1720 1811 1721 1812 1722 1813 1723

+

1814 1724 1815 1725 1816 1726 1817 1727 1818 1728 1819 1729 1820 1730 1821 1731 1822 1732 1823 1733 1824 1734 1825 1735

+

1826 1736 1827 1737 1828 1738 1829 1739

+

1830 1740 1831 1741 1832 1742 1833 1743

+

1834 1744 1835 1745 1836 1746 1837 1747

+

1838 1748 1839 1749 1840 1750 1841 1751

+

1842 1752 1843 1753 1844 1754 1845 1755

+

1846 1756 1847 1757 1848 1758 1849 1759

+

1850 1760 1851 1761 1852 1762 1853 1763

+

1854 1764 1855 1765 1856 1766 1857 1767

+

1858 1768 1859 1769 1860 1770 1861 1771

+

1862 1772 1863 1773 1864 1774 1865 1775

+

1866 1776 1867 1777 1868 1778 1869 1779

+

1870 1780 1871 1781 1872 1782 1873 1783

+
+ + + +

1874 1784 1875 1785 1876 1786 1877 1787 1878 1788 1879 1789 1880 1790 1881 1791 1882 1792 1883 1793 1884 1794 1885 1795 1886 1796 1887 1797 1888 1798 1889 1799 1890 1800 1891 1801

+

1892 1802 1893 1803 1894 1804 1895 1805 1896 1806 1897 1807 1898 1808 1899 1809 1900 1810 1901 1811 1902 1812 1903 1813 1904 1814 1905 1815 1906 1816 1907 1817 1908 1818 1909 1819

+

1910 1820 1911 1821 1912 1822 1913 1823

+

1914 1824 1915 1825 1916 1826 1917 1827

+

1918 1828 1919 1829 1920 1830 1921 1831

+

1922 1832 1923 1833 1924 1834 1925 1835

+

1926 1836 1927 1837 1928 1838 1929 1839

+

1930 1840 1931 1841 1932 1842 1933 1843

+

1934 1844 1935 1845 1936 1846 1937 1847

+

1938 1848 1939 1849 1940 1850 1941 1851

+

1942 1852 1943 1853 1944 1854 1945 1855

+

1946 1856 1947 1857 1948 1858 1949 1859

+

1950 1860 1951 1861 1952 1862 1953 1863

+

1954 1864 1955 1865 1956 1866 1957 1867

+

1958 1868 1959 1869 1960 1870 1961 1871

+

1962 1872 1963 1873 1964 1874 1965 1875

+

1966 1876 1967 1877 1968 1878 1969 1879

+

1970 1880 1971 1881 1972 1882 1973 1883

+

1974 1884 1975 1885 1976 1886 1977 1887

+

1978 1888 1979 1889 1980 1890 1981 1891

+
+ + + +

1982 1892 1983 1893 1984 1894 1997 1907 1998 1908 1999 1909

+
+ + + +

1985 1895 1986 1896 1987 1897 1988 1898

+

1989 1899 1990 1900 1991 1901 1992 1902

+

1993 1903 1994 1904 1995 1905 1996 1906

+
+ + + +

2015 1941 2029 1941 2012 1941 2017 1941 2020 1941 2015 1941

+
+ + + +

2012 1941 2028 1941 2017 1941 2015 1941

+
+ + + +

2005 1942 2024 1942 2003 1942 2003 1942 2022 1942 2023 1942

+
+ + + +

2003 1942 2023 1942 2026 1942 2005 1942

+
+ + + +

2012 1943 2029 1943 2007 1943

+
+ + + +

2007 1943 2024 1943 2005 1943 2012 1943

+
+ + + +

2027 1937 2010 1920 2004 1914 2025 1935

+

2016 1926 2028 1938 2026 1936 2023 1933

+

2009 1919 2003 1913 2024 1934 2007 1917

+

2007 1917 2029 1939 2013 1923 2009 1919

+

2008 1918 2030 1940 2019 1929 2022 1932 2001 1911

+

2023 1933 2021 1931 2018 1928 2016 1926

+
+ + + +

2031 1944 2032 1944 2033 1944 2034 1944 2035 1944

+
+ + + +

2036 1945 2037 1945 2038 1945 2039 1945 2040 1945

+
+ + + +

2041 1946 2042 1946 2043 1946 2044 1946 2045 1946

+
+ + + +

2046 1947 2047 1947 2048 1947 2049 1947 2050 1947

+
+ + + +

2051 1948 2052 1948 2053 1948 2054 1948 2055 1948

+
+ + + +

2056 1949 2057 1949 2058 1949 2059 1949

+
+ + + +

2060 1950 2061 1950 2062 1950 2063 1950

+
+ + + +

2064 1951 2065 1951 2066 1951 2067 1951

+
+ + + +

2068 1952 2069 1952 2070 1952 2071 1952

+
+ + + +

2072 1953 2073 1953 2074 1953 2075 1953

+
+ + + +

2076 1954 2077 1954 2078 1954 2079 1954

+
+ + + +

2080 1955 2081 1955 2082 1955 2083 1955 2084 1955

+

2085 1955 2086 1955 2087 1955 2088 1955

+
+ + + +

2089 1956 2090 1956 2091 1956 2092 1956

+
+ + + +

2093 1957 2094 1957 2095 1957 2096 1957 2097 1957

+

2098 1957 2099 1957 2100 1957 2101 1957 2102 1957

+

2103 1957 2104 1957 2105 1957 2106 1957

+
+ + + +

2107 1958 2108 1958 2109 1958 2110 1958 2111 1958

+

2112 1958 2113 1958 2114 1958 2115 1958

+
+ + + +

2116 1959 2117 1959 2118 1959

+
+ + + +

2169 2105 2167 2105 2166 2105 2168 2105 2165 2105 2198 2105

+
+ + + +

2156 2105 2178 2105 2158 2105 2157 2105

+

2178 2105 2156 2105 2264 2105 2181 2105 2160 2105 2161 2105 2260 2105

+

2162 2105 2261 2105 2260 2105 2161 2105

+

2195 2105 2166 2105 2167 2105 2262 2105 2261 2105 2162 2105 2164 2105

+

2200 2105 2263 2105 2202 2105 2170 2105 2168 2105 2198 2105 2262 2105 2167 2105 2169 2105

+
+ + + +

2138 2106 2208 2106 2255 2106

+
+ + + +

2214 2106 2138 2106 2255 2106 2250 2106

+
+ + + +

2245 2107 2222 2107 2226 2107

+
+ + + +

2226 2107 2214 2107 2250 2107 2245 2107

+
+ + + +

2223 2108 2218 2108 2239 2108

+
+ + + +

2239 2108 2234 2108 2212 2108 2223 2108

+
+ + + +

2229 2109 2204 2109 2132 2109

+
+ + + +

2212 2109 2234 2109 2229 2109 2132 2109

+
+ + + +

2129 2110 2206 2110 2232 2110

+
+ + + +

2211 2110 2129 2110 2232 2110 2236 2110

+
+ + + +

2242 2111 2220 2111 2224 2111

+
+ + + +

2224 2111 2211 2111 2236 2111 2242 2111

+
+ + + +

2225 2112 2216 2112 2248 2112

+
+ + + +

2248 2112 2252 2112 2213 2112 2225 2112

+
+ + + +

2258 2113 2210 2113 2135 2113

+
+ + + +

2213 2113 2252 2113 2258 2113 2135 2113

+
+ + + +

2174 2015 2154 1995 2155 1996 2176 2017 2172 2013

+

2121 1962 2151 1992 2253 2094 2207 2048

+

2209 2050 2256 2097 2152 1993 2121 1962

+

2123 1964 2147 1988 2246 2087 2215 2056

+

2219 2060 2240 2081 2148 1989 2123 1964

+

2119 1960 2140 1981 2230 2071 2205 2046

+

2203 2044 2227 2068 2139 1980 2119 1960

+

2260 2101 2223 2064 2212 2053 2132 1973 2177 2018

+

2177 2018 2132 1973 2204 2045 2120 1961 2206 2047 2129 1970 2179 2020

+

2183 2024 2179 2020 2129 1970 2211 2052 2224 2065

+

2193 2034 2183 2024 2224 2065 2220 2061 2124 1965 2216 2057 2225 2066

+

2193 2034 2225 2066 2213 2054 2135 1976 2197 2038

+

2197 2038 2135 1976 2210 2051 2122 1963 2208 2049 2138 1979 2262 2103

+

2261 2102 2262 2103 2138 1979 2214 2055 2226 2067

+

2261 2102 2226 2067 2222 2063 2126 1967 2218 2059 2223 2064 2260 2101

+

2125 1966 2143 1984 2237 2078 2217 2058

+

2221 2062 2243 2084 2144 1985 2125 1966

+

2191 2032 2164 2005 2160 2001 2185 2026 2188 2029

+

2254 2095 2199 2040 2194 2035 2249 2090

+

2250 2091 2194 2035 2190 2031 2244 2085

+

2245 2086 2190 2031 2187 2028 2145 1986

+

2146 1987 2187 2028 2184 2025 2239 2080

+

2238 2079 2184 2025 2180 2021 2233 2074

+

2234 2075 2180 2021 2173 2014 2228 2069

+

2229 2070 2173 2014 2171 2012 2141 1982

+

2142 1983 2171 2012 2175 2016 2232 2073

+

2231 2072 2175 2016 2182 2023 2236 2077

+

2235 2076 2182 2023 2186 2027 2241 2082

+

2242 2083 2186 2027 2189 2030 2149 1990

+

2150 1991 2189 2030 2192 2033 2248 2089

+

2247 2088 2192 2033 2196 2037 2252 2093

+

2251 2092 2196 2037 2201 2042 2257 2098

+

2258 2099 2201 2042 2263 2104 2153 1994

+

2259 2100 2263 2104 2199 2040 2255 2096

+
+ + + +

2265 2114 2266 2114 2267 2114

+
+ + + +

2268 2115 2269 2115 2270 2115

+
+ + + +

2296 2160 2298 2160 2304 2160

+
+ + + +

2284 2160 2306 2160 2296 2160 2304 2160

+

2287 2160 2310 2160 2302 2160 2312 2160

+

2298 2160 2302 2160 2310 2160 2304 2160

+
+ + + +

2297 2161 2294 2161 2308 2161 2278 2161 2292 2161

+

2292 2161 2314 2161 2300 2161 2297 2161

+
+ + + +

2287 2132 2312 2157 2314 2159 2292 2137

+

2302 2147 2300 2145 2313 2158 2311 2156

+

2298 2143 2297 2142 2299 2144 2301 2146

+

2295 2140 2293 2138 2297 2142 2298 2143

+

2284 2129 2278 2123 2308 2153 2306 2151

+

2305 2150 2307 2152 2294 2139 2296 2141

+
+ + + +

2287 2132 2312 2157 2314 2159 2292 2137

+

2302 2147 2300 2145 2313 2158 2311 2156

+

2298 2143 2297 2142 2299 2144 2301 2146

+

2295 2140 2293 2138 2297 2142 2298 2143

+

2284 2129 2278 2123 2308 2153 2306 2151

+

2305 2150 2307 2152 2294 2139 2296 2141

+

2290 2135 2292 2137 2278 2123 2281 2126

+

2271 2116 2275 2120 2289 2134 2279 2124

+

2274 2119 2309 2154 2285 2130 2288 2133

+

2273 2118 2304 2149 2310 2155 2276 2121

+

2280 2125 2283 2128 2303 2148 2272 2117

+
+ + + +

2323 2193 2339 2193 2321 2193 2325 2193

+

2325 2193 2318 2193 2338 2193 2323 2193

+

2318 2193 2337 2193 2316 2193 2338 2193

+
+ + + +

2342 2194 2335 2194 2333 2194 2341 2194

+

2341 2194 2328 2194 2330 2194 2342 2194

+

2328 2194 2345 2194 2343 2194 2330 2194

+
+ + + +

2320 2167 2339 2186 2343 2190 2344 2191

+

2326 2173 2325 2172 2321 2168 2345 2192

+

2327 2174 2341 2188 2318 2165 2325 2172

+

2332 2179 2337 2184 2318 2165 2340 2187

+

2316 2163 2336 2183 2331 2178 2334 2181

+

2338 2185 2316 2163 2334 2181 2342 2189

+

2338 2185 2342 2189 2329 2176 2323 2170

+

2323 2170 2329 2176 2343 2190 2339 2186

+
+ + + +

2346 2195 2347 2196 2348 2197 2349 2198

+

2350 2199 2351 2200 2352 2201 2353 2202

+

2354 2203 2355 2204 2356 2205 2357 2206

+

2358 2207 2359 2208 2360 2209 2361 2210

+

2362 2211 2363 2212 2364 2213 2365 2214

+

2366 2215 2367 2216 2368 2217 2369 2218

+
+ + + +

2373 2235 2371 2235 2378 2235 2378 2235 2380 2235 2373 2235 2380 2235 2383 2235 2373 2235

+
+ + + +

2375 2236 2385 2236 2381 2236 2381 2236 2379 2236 2375 2236 2379 2236 2377 2236 2375 2236

+
+ + + +

2379 2228 2378 2227 2371 2220 2377 2226

+

2376 2225 2370 2219 2372 2221 2374 2223

+

2375 2224 2373 2222 2382 2231 2384 2233

+

2385 2234 2383 2232 2380 2229 2381 2230

+

2381 2230 2380 2229 2378 2227 2379 2228

+
+ + + +

2389 2253 2387 2253 2394 2253 2394 2253 2396 2253 2389 2253 2396 2253 2399 2253 2389 2253

+
+ + + +

2393 2254 2401 2254 2397 2254 2397 2254 2395 2254 2393 2254 2395 2254 2391 2254 2393 2254

+
+ + + +

2395 2246 2394 2245 2387 2238 2391 2242

+

2390 2241 2386 2237 2388 2239 2392 2243

+

2393 2244 2389 2240 2398 2249 2400 2251

+

2401 2252 2399 2250 2396 2247 2397 2248

+

2397 2248 2396 2247 2394 2245 2395 2246

+
+ + + +

2405 2271 2415 2271 2412 2271 2412 2271 2410 2271 2405 2271 2410 2271 2403 2271 2405 2271

+
+ + + +

2409 2272 2407 2272 2411 2272 2411 2272 2413 2272 2409 2272 2413 2272 2417 2272 2409 2272

+
+ + + +

2413 2266 2412 2265 2415 2268 2417 2270

+

2416 2269 2414 2267 2405 2258 2409 2262

+

2408 2261 2404 2257 2402 2255 2406 2259

+

2407 2260 2403 2256 2410 2263 2411 2264

+

2411 2264 2410 2263 2412 2265 2413 2266

+
+ + + +

2419 2293 2421 2293 2422 2293 2423 2293 2427 2293 2425 2293

+
+ + + +

2422 2293 2423 2293 2425 2293 2419 2293

+
+ + + +

2435 2294 2437 2294 2433 2294 2432 2294 2431 2294 2429 2294

+
+ + + +

2433 2294 2432 2294 2429 2294 2435 2294

+
+ + + +

2434 2289 2424 2279 2427 2282 2437 2292

+

2436 2291 2426 2281 2423 2278 2433 2288

+

2433 2288 2423 2278 2422 2277 2432 2287

+

2432 2287 2422 2277 2420 2275 2430 2285

+

2428 2283 2431 2286 2421 2276 2418 2273

+

2429 2284 2419 2274 2425 2280 2435 2290

+
+ + + +

2446 2313 2444 2313 2442 2313

+
+ + + +

2442 2313 2439 2313 2441 2313 2446 2313

+
+ + + +

2451 2314 2453 2314 2455 2314

+
+ + + +

2455 2314 2450 2314 2448 2314 2451 2314

+
+ + + +

2451 2308 2442 2299 2443 2300 2452 2309

+

2453 2310 2444 2301 2445 2302 2454 2311

+

2455 2312 2446 2303 2441 2298 2450 2307

+

2448 2305 2449 2306 2440 2297 2439 2296

+

2447 2304 2438 2295 2442 2299 2451 2308

+
+ + + +

2457 2331 2459 2331 2464 2331 2464 2331 2466 2331 2457 2331 2466 2331 2469 2331 2457 2331

+
+ + + +

2461 2332 2471 2332 2467 2332 2467 2332 2465 2332 2461 2332 2465 2332 2463 2332 2461 2332

+
+ + + +

2465 2324 2464 2323 2459 2318 2463 2322

+

2462 2321 2458 2317 2456 2315 2460 2319

+

2461 2320 2457 2316 2468 2327 2470 2329

+

2471 2330 2469 2328 2466 2325 2467 2326

+

2467 2326 2466 2325 2464 2323 2465 2324

+
+ + + +

2481 2353 2479 2353 2477 2353 2476 2353 2473 2353 2475 2353

+
+ + + +

2477 2353 2476 2353 2475 2353 2481 2353

+
+ + + +

2485 2354 2483 2354 2486 2354 2487 2354 2489 2354 2491 2354

+
+ + + +

2486 2354 2487 2354 2491 2354 2485 2354

+
+ + + +

2487 2348 2477 2338 2478 2339 2488 2349

+

2489 2350 2479 2340 2480 2341 2490 2351

+

2491 2352 2481 2342 2475 2336 2485 2346

+

2484 2345 2474 2335 2473 2334 2483 2344

+

2482 2343 2472 2333 2476 2337 2486 2347

+

2486 2347 2476 2337 2477 2338 2487 2348

+
+ + + +

2493 2371 2505 2371 2502 2371 2502 2371 2500 2371 2493 2371 2500 2371 2495 2371 2493 2371

+
+ + + +

2497 2372 2499 2372 2501 2372 2501 2372 2503 2372 2497 2372 2503 2372 2507 2372 2497 2372

+
+ + + +

2503 2366 2502 2365 2505 2368 2507 2370

+

2506 2369 2504 2367 2493 2356 2497 2360

+

2496 2359 2492 2355 2494 2357 2498 2361

+

2499 2362 2495 2358 2500 2363 2501 2364

+

2501 2364 2500 2363 2502 2365 2503 2366

+
+ + + +

2509 2389 2521 2389 2518 2389 2518 2389 2516 2389 2509 2389 2516 2389 2511 2389 2509 2389

+
+ + + +

2513 2390 2515 2390 2517 2390 2517 2390 2519 2390 2513 2390 2519 2390 2523 2390 2513 2390

+
+ + + +

2519 2384 2518 2383 2521 2386 2523 2388

+

2522 2387 2520 2385 2509 2374 2513 2378

+

2512 2377 2508 2373 2510 2375 2514 2379

+

2515 2380 2511 2376 2516 2381 2517 2382

+

2517 2382 2516 2381 2518 2383 2519 2384

+
+ + + +

2526 2477 2611 2477 2529 2477 2558 2477 2560 2477 2562 2477

+
+ + + +

2613 2477 2611 2477 2562 2477 2585 2477 2616 2477

+

2526 2477 2536 2477 2541 2477 2556 2477 2558 2477 2562 2477 2611 2477

+
+ + + +

2572 2478 2571 2478 2610 2478 2612 2478 2575 2478 2572 2478

+
+ + + +

2610 2478 2611 2478 2613 2478 2612 2478 2572 2478

+
+ + + +

2605 2479 2559 2479 2556 2479

+
+ + + +

2541 2479 2545 2479 2605 2479 2556 2479

+

2605 2479 2603 2479 2578 2479 2559 2479

+
+ + + +

2597 2480 2595 2480 2590 2480 2590 2480 2529 2480 2614 2480

+
+ + + +

2590 2480 2614 2480 2598 2480 2597 2480

+
+ + + +

2580 2481 2578 2481 2603 2481 2584 2481 2582 2481 2580 2481 2584 2481 2580 2481 2603 2481 2615 2481 2588 2481 2589 2481

+
+ + + +

2586 2481 2584 2481 2603 2481 2589 2481

+

2571 2481 2574 2481 2614 2481 2610 2481

+

2575 2481 2612 2481 2614 2481 2574 2481

+

2576 2481 2579 2481 2614 2481 2612 2481

+

2583 2481 2615 2481 2614 2481 2579 2481

+

2603 2481 2598 2481 2614 2481 2615 2481 2589 2481

+
+ + + +

2600 2482 2602 2482 2566 2482 2568 2482

+

2568 2482 2543 2482 2540 2482 2600 2482

+
+ + + +

2609 2483 2547 2483 2549 2483 2570 2483

+

2570 2483 2564 2483 2607 2483 2609 2483

+
+ + + +

2616 2484 2585 2484 2584 2484 2586 2484 2587 2484

+

2588 2484 2615 2484 2616 2484 2587 2484

+
+ + + +

2613 2485 2616 2485 2615 2485 2583 2485 2577 2485

+

2576 2485 2612 2485 2613 2485 2577 2485

+
+ + + +

2590 2457 2595 2462 2593 2460 2550 2417 2551 2418 2554 2421

+
+ + + +

2568 2435 2570 2437 2549 2416 2543 2410

+

2567 2434 2565 2432 2563 2430 2569 2436

+

2564 2431 2566 2433 2601 2468 2606 2473

+

2545 2412 2547 2414 2608 2475 2604 2471

+

2598 2465 2603 2470 2605 2472 2609 2476 2607 2474 2602 2469 2600 2467 2597 2464

+

2538 2405 2596 2463 2599 2466 2540 2407

+

2541 2408 2535 2402 2537 2404 2539 2406 2542 2409 2548 2415 2546 2413 2544 2411

+

2555 2422 2538 2405 2536 2403 2524 2391

+

2555 2422 2553 2420 2592 2459 2594 2461

+

2530 2397 2591 2458 2552 2419 2525 2392

+
+ + + +

2590 2457 2595 2462 2593 2460 2550 2417 2551 2418 2554 2421 2587 2454 2589 2456 2588 2455 2586 2453 2589 2456 2587 2454

+
+ + + +

2568 2435 2570 2437 2549 2416 2543 2410

+

2567 2434 2565 2432 2563 2430 2569 2436

+

2564 2431 2566 2433 2601 2468 2606 2473

+

2545 2412 2547 2414 2608 2475 2604 2471

+

2598 2465 2603 2470 2605 2472 2609 2476 2607 2474 2602 2469 2600 2467 2597 2464

+

2538 2405 2596 2463 2599 2466 2540 2407

+

2541 2408 2535 2402 2537 2404 2539 2406 2542 2409 2548 2415 2546 2413 2544 2411

+

2555 2422 2538 2405 2536 2403 2524 2391

+

2555 2422 2553 2420 2592 2459 2594 2461

+

2530 2397 2591 2458 2552 2419 2525 2392

+
+ + + +

2590 2457 2595 2462 2593 2460 2550 2417 2551 2418 2554 2421 2587 2454 2589 2456 2588 2455 2586 2453 2589 2456 2587 2454 2559 2426 2557 2424 2556 2423

+
+ + + +

2568 2435 2570 2437 2549 2416 2543 2410

+

2567 2434 2565 2432 2563 2430 2569 2436

+

2564 2431 2566 2433 2601 2468 2606 2473

+

2545 2412 2547 2414 2608 2475 2604 2471

+

2598 2465 2603 2470 2605 2472 2609 2476 2607 2474 2602 2469 2600 2467 2597 2464

+

2538 2405 2596 2463 2599 2466 2540 2407

+

2541 2408 2535 2402 2537 2404 2539 2406 2542 2409 2548 2415 2546 2413 2544 2411

+

2555 2422 2538 2405 2536 2403 2524 2391

+

2555 2422 2553 2420 2592 2459 2594 2461

+

2530 2397 2591 2458 2552 2419 2525 2392

+

2585 2452 2562 2429 2582 2449 2584 2451

+

2580 2447 2581 2448 2561 2428 2560 2427

+

2559 2426 2578 2445 2580 2447 2560 2427 2558 2425

+
+ + + +

2590 2457 2595 2462 2593 2460 2550 2417 2551 2418 2554 2421 2587 2454 2589 2456 2588 2455 2586 2453 2589 2456 2587 2454 2559 2426 2557 2424 2556 2423 2575 2442 2573 2440 2572 2439 2572 2439 2574 2441 2571 2438

+
+ + + +

2568 2435 2570 2437 2549 2416 2543 2410

+

2567 2434 2565 2432 2563 2430 2569 2436

+

2564 2431 2566 2433 2601 2468 2606 2473

+

2545 2412 2547 2414 2608 2475 2604 2471

+

2598 2465 2603 2470 2605 2472 2609 2476 2607 2474 2602 2469 2600 2467 2597 2464

+

2538 2405 2596 2463 2599 2466 2540 2407

+

2541 2408 2535 2402 2537 2404 2539 2406 2542 2409 2548 2415 2546 2413 2544 2411

+

2555 2422 2538 2405 2536 2403 2524 2391

+

2555 2422 2553 2420 2592 2459 2594 2461

+

2530 2397 2591 2458 2552 2419 2525 2392

+

2585 2452 2562 2429 2582 2449 2584 2451

+

2580 2447 2581 2448 2561 2428 2560 2427

+

2559 2426 2578 2445 2580 2447 2560 2427 2558 2425

+
+ + + +

2590 2457 2595 2462 2593 2460 2550 2417 2551 2418 2554 2421 2587 2454 2589 2456 2588 2455 2586 2453 2589 2456 2587 2454 2559 2426 2557 2424 2556 2423 2575 2442 2573 2440 2572 2439 2572 2439 2574 2441 2571 2438 2583 2450 2579 2446 2577 2444 2577 2444 2579 2446 2576 2443

+
+ + + +

2568 2435 2570 2437 2549 2416 2543 2410

+

2567 2434 2565 2432 2563 2430 2569 2436

+

2564 2431 2566 2433 2601 2468 2606 2473

+

2545 2412 2547 2414 2608 2475 2604 2471

+

2598 2465 2603 2470 2605 2472 2609 2476 2607 2474 2602 2469 2600 2467 2597 2464

+

2538 2405 2596 2463 2599 2466 2540 2407

+

2541 2408 2535 2402 2537 2404 2539 2406 2542 2409 2548 2415 2546 2413 2544 2411

+

2555 2422 2538 2405 2536 2403 2524 2391

+

2555 2422 2553 2420 2592 2459 2594 2461

+

2530 2397 2591 2458 2552 2419 2525 2392

+

2585 2452 2562 2429 2582 2449 2584 2451

+

2580 2447 2581 2448 2561 2428 2560 2427

+

2559 2426 2578 2445 2580 2447 2560 2427 2558 2425

+
+ + + +

2590 2486 2595 2486 2593 2486 2526 2486 2553 2486 2555 2486 2587 2486 2589 2486 2588 2486 2586 2486 2589 2486 2587 2486 2559 2486 2558 2486 2556 2486 2575 2486 2574 2486 2572 2486 2572 2486 2574 2486 2571 2486 2583 2486 2579 2486 2577 2486 2577 2486 2579 2486 2576 2486

+
+ + + +

2568 2486 2570 2486 2549 2486 2543 2486

+

2568 2486 2566 2486 2564 2486 2570 2486

+

2564 2486 2566 2486 2602 2486 2607 2486

+

2545 2486 2547 2486 2609 2486 2605 2486

+

2598 2486 2603 2486 2605 2486 2609 2486 2607 2486 2602 2486 2600 2486 2597 2486

+

2538 2486 2597 2486 2600 2486 2540 2486

+

2541 2486 2536 2486 2538 2486 2540 2486 2543 2486 2549 2486 2547 2486 2545 2486

+

2555 2486 2538 2486 2536 2486 2526 2486

+

2555 2486 2553 2486 2593 2486 2595 2486

+

2590 2486 2593 2486 2553 2486 2526 2486

+

2585 2486 2562 2486 2582 2486 2584 2486

+

2580 2486 2582 2486 2562 2486 2560 2486

+

2559 2486 2578 2486 2580 2486 2560 2486 2558 2486

+

2611 2486 2610 2486 2614 2486 2529 2486

+
+ + + +

2617 2487 2618 2488 2619 2489 2620 2490 2621 2491 2622 2492 2623 2493 2624 2494 2625 2495 2626 2496 2627 2497 2628 2498 2629 2499 2630 2500 2631 2501 2632 2502

+

2633 2503 2634 2504 2635 2505 2636 2506 2637 2507 2638 2508 2639 2509 2640 2510 2641 2511 2642 2512 2643 2513 2644 2514 2645 2515 2646 2516 2647 2517 2648 2518

+

2649 2519 2650 2520 2651 2521 2652 2522

+

2653 2523 2654 2524 2655 2525 2656 2526

+

2657 2527 2658 2528 2659 2529 2660 2530

+

2661 2531 2662 2532 2663 2533 2664 2534

+

2665 2535 2666 2536 2667 2537 2668 2538

+

2669 2539 2670 2540 2671 2541 2672 2542

+

2673 2543 2674 2544 2675 2545 2676 2546

+

2677 2547 2678 2548 2679 2549 2680 2550

+

2681 2551 2682 2552 2683 2553 2684 2554

+

2685 2555 2686 2556 2687 2557 2688 2558

+

2689 2559 2690 2560 2691 2561 2692 2562

+

2693 2563 2694 2564 2695 2565 2696 2566

+

2697 2567 2698 2568 2699 2569 2700 2570

+

2701 2571 2702 2572 2703 2573 2704 2574

+

2705 2575 2706 2576 2707 2577 2708 2578

+

2709 2579 2710 2580 2711 2581 2712 2582

+
+ + + +

2713 2583 2714 2584 2715 2585 2716 2586 2717 2587 2718 2588 2719 2589 2720 2590 2721 2591 2722 2592

+

2723 2593 2724 2594 2725 2595 2726 2596 2727 2597 2728 2598 2729 2599 2730 2600 2731 2601 2732 2602

+

2733 2603 2734 2604 2735 2605 2736 2606

+

2737 2607 2738 2608 2739 2609 2740 2610

+

2741 2611 2742 2612 2743 2613 2744 2614

+

2745 2615 2746 2616 2747 2617 2748 2618

+

2749 2619 2750 2620 2751 2621 2752 2622

+

2753 2623 2754 2624 2755 2625 2756 2626

+

2757 2627 2758 2628 2759 2629 2760 2630

+

2761 2631 2762 2632 2763 2633 2764 2634

+

2765 2635 2766 2636 2767 2637 2768 2638

+

2769 2639 2770 2640 2771 2641 2772 2642

+
+ + + +

2773 2643 2774 2644 2775 2645 2776 2646 2777 2647 2778 2648 2779 2649 2780 2650 2781 2651 2782 2652 2783 2653 2784 2654 2785 2655 2786 2656 2787 2657 2788 2658

+

2789 2659 2790 2660 2791 2661 2792 2662 2793 2663 2794 2664 2795 2665 2796 2666 2797 2667 2798 2668 2799 2669 2800 2670 2801 2671 2802 2672 2803 2673 2804 2674

+

2805 2675 2806 2676 2807 2677 2808 2678

+

2809 2679 2810 2680 2811 2681 2812 2682

+

2813 2683 2814 2684 2815 2685 2816 2686

+

2817 2687 2818 2688 2819 2689 2820 2690

+

2821 2691 2822 2692 2823 2693 2824 2694

+

2825 2695 2826 2696 2827 2697 2828 2698

+

2829 2699 2830 2700 2831 2701 2832 2702

+

2833 2703 2834 2704 2835 2705 2836 2706

+

2837 2707 2838 2708 2839 2709 2840 2710

+

2841 2711 2842 2712 2843 2713 2844 2714

+

2845 2715 2846 2716 2847 2717 2848 2718

+

2849 2719 2850 2720 2851 2721 2852 2722

+

2853 2723 2854 2724 2855 2725 2856 2726

+

2857 2727 2858 2728 2859 2729 2860 2730

+

2861 2731 2862 2732 2863 2733 2864 2734

+

2865 2735 2866 2736 2867 2737 2868 2738

+
+ + + +

2869 2739 2870 2740 2871 2741 2872 2742 2873 2743 2874 2744 2875 2745 2876 2746 2877 2747 2878 2748 2879 2749 2880 2750 2881 2751 2882 2752 2883 2753 2884 2754

+

2885 2755 2886 2756 2887 2757 2888 2758 2889 2759 2890 2760 2891 2761 2892 2762 2893 2763 2894 2764 2895 2765 2896 2766 2897 2767 2898 2768 2899 2769 2900 2770

+

2901 2771 2902 2772 2903 2773 2904 2774

+

2905 2775 2906 2776 2907 2777 2908 2778

+

2909 2779 2910 2780 2911 2781 2912 2782

+

2913 2783 2914 2784 2915 2785 2916 2786

+

2917 2787 2918 2788 2919 2789 2920 2790

+

2921 2791 2922 2792 2923 2793 2924 2794

+

2925 2795 2926 2796 2927 2797 2928 2798

+

2929 2799 2930 2800 2931 2801 2932 2802

+

2933 2803 2934 2804 2935 2805 2936 2806

+

2937 2807 2938 2808 2939 2809 2940 2810

+

2941 2811 2942 2812 2943 2813 2944 2814

+

2945 2815 2946 2816 2947 2817 2948 2818

+

2949 2819 2950 2820 2951 2821 2952 2822

+

2953 2823 2954 2824 2955 2825 2956 2826

+

2957 2827 2958 2828 2959 2829 2960 2830

+

2961 2831 2962 2832 2963 2833 2964 2834

+
+ + + +

2965 2835 2966 2836 2967 2837 2968 2838 2969 2839 2970 2840 2971 2841 2972 2842 2973 2843 2974 2844 2975 2845 2976 2846 2977 2847 2978 2848 2979 2849 2980 2850

+

2981 2851 2982 2852 2983 2853 2984 2854 2985 2855 2986 2856 2987 2857 2988 2858 2989 2859 2990 2860 2991 2861 2992 2862 2993 2863 2994 2864 2995 2865 2996 2866

+

2997 2867 2998 2868 2999 2869 3000 2870

+

3001 2871 3002 2872 3003 2873 3004 2874

+

3005 2875 3006 2876 3007 2877 3008 2878

+

3009 2879 3010 2880 3011 2881 3012 2882

+

3013 2883 3014 2884 3015 2885 3016 2886

+

3017 2887 3018 2888 3019 2889 3020 2890

+

3021 2891 3022 2892 3023 2893 3024 2894

+

3025 2895 3026 2896 3027 2897 3028 2898

+

3029 2899 3030 2900 3031 2901 3032 2902

+

3033 2903 3034 2904 3035 2905 3036 2906

+

3037 2907 3038 2908 3039 2909 3040 2910

+

3041 2911 3042 2912 3043 2913 3044 2914

+

3045 2915 3046 2916 3047 2917 3048 2918

+

3049 2919 3050 2920 3051 2921 3052 2922

+

3053 2923 3054 2924 3055 2925 3056 2926

+

3057 2927 3058 2928 3059 2929 3060 2930

+
+ + + +

3073 2949 3071 2949 3074 2949

+
+ + + +

3074 2949 3076 2949 3078 2949 3073 2949

+
+ + + +

3069 2950 3067 2950 3065 2950

+
+ + + +

3065 2950 3062 2950 3064 2950 3069 2950

+
+ + + +

3065 2935 3066 2936 3075 2945 3074 2944

+

3074 2944 3071 2941 3062 2932 3065 2935

+

3070 2940 3072 2942 3063 2933 3061 2931

+

3073 2943 3077 2947 3068 2938 3064 2934

+

3067 2937 3069 2939 3078 2948 3076 2946

+
+ + + +

3098 3163 3190 3163 3300 3163

+
+ + + +

3086 3163 3098 3163 3300 3163 3189 3163 3090 3163

+
+ + + +

3228 3164 3224 3164 3199 3164 3313 3164 3306 3164 3160 3164

+
+ + + +

3160 3164 3228 3164 3199 3164 3313 3164

+

3106 3164 3115 3164 3303 3164 3192 3164 3104 3164

+

3115 3164 3160 3164 3306 3164 3303 3164

+
+ + + +

3298 3165 3317 3165 3198 3165

+
+ + + +

3298 3165 3198 3165 3240 3165 3242 3165 3153 3165

+
+ + + +

3297 3166 3311 3166 3312 3166

+
+ + + +

3317 3166 3298 3166 3297 3166 3312 3166

+
+ + + +

3296 3167 3304 3167 3305 3167

+
+ + + +

3311 3167 3297 3167 3296 3167 3305 3167

+
+ + + +

3295 3168 3301 3168 3302 3168

+
+ + + +

3304 3168 3296 3168 3295 3168 3302 3168

+
+ + + +

3293 3169 3314 3169 3309 3169

+
+ + + +

3309 3169 3308 3169 3292 3169 3293 3169

+
+ + + +

3294 3170 3318 3170 3315 3170

+
+ + + +

3293 3170 3294 3170 3315 3170 3314 3170

+
+ + + +

3108 3171 3208 3171 3200 3171

+
+ + + +

3200 3171 3318 3171 3294 3171 3108 3171

+
+ + + +

3100 3172 3195 3172 3310 3172 3316 3172 3201 3172 3216 3172 3201 3172 3209 3172 3216 3172 3209 3172 3214 3172 3216 3172

+
+ + + +

3100 3172 3310 3172 3316 3172 3216 3172 3119 3172 3113 3172 3102 3172

+
+ + + +

3108 3173 3294 3173 3113 3173 3294 3173 3293 3173 3113 3173 3293 3173 3292 3173 3113 3173 3113 3173 3292 3173 3291 3173

+
+ + + +

3291 3173 3101 3173 3102 3173 3113 3173

+

3109 3173 3107 3173 3108 3173 3113 3173 3112 3173 3110 3173

+
+ + + +

3318 3174 3200 3174 3201 3174

+
+ + + +

3201 3174 3316 3174 3315 3174 3318 3174

+
+ + + +

3310 3175 3309 3175 3314 3175

+
+ + + +

3315 3175 3316 3175 3310 3175 3314 3175

+
+ + + +

3308 3176 3309 3176 3310 3176

+
+ + + +

3300 3176 3299 3176 3307 3176 3193 3176 3191 3176 3189 3176

+

3193 3176 3307 3176 3308 3176 3310 3176 3195 3176 3194 3176

+
+ + + +

3303 3177 3302 3177 3301 3177

+
+ + + +

3190 3177 3192 3177 3303 3177 3301 3177 3299 3177 3300 3177

+
+ + + +

3306 3178 3305 3178 3304 3178

+
+ + + +

3304 3178 3302 3178 3303 3178 3306 3178

+
+ + + +

3313 3179 3312 3179 3311 3179

+
+ + + +

3306 3179 3313 3179 3311 3179 3305 3179

+
+ + + +

3199 3180 3198 3180 3317 3180

+
+ + + +

3313 3180 3199 3180 3317 3180 3312 3180

+
+ + + +

3115 3181 3114 3181 3295 3181 3296 3181 3297 3181 3160 3181 3160 3181 3297 3181 3298 3181 3160 3181 3298 3181 3153 3181

+
+ + + +

3166 3181 3162 3181 3160 3181 3153 3181 3152 3181 3154 3181 3155 3181 3159 3181 3161 3181 3164 3181

+

3296 3181 3160 3181 3115 3181 3295 3181

+
+ + + +

3229 3182 3234 3182 3250 3182 3248 3182 3242 3182

+

3229 3182 3242 3182 3240 3182 3224 3182 3228 3182

+
+ + + +

3084 3183 3079 3183 3082 3183 3101 3183 3291 3183 3307 3183 3299 3183

+

3299 3183 3301 3183 3295 3183 3114 3183 3105 3183 3084 3183

+
+ + + +

3201 3073 3200 3072 3208 3080 3209 3081

+

3241 3113 3220 3092 3213 3085 3209 3081 3208 3080

+

3121 2993 3274 3146 3259 3131 3117 2989

+

3125 2997 3129 3001 3210 3082 3276 3148 3274 3146 3121 2993

+

3275 3147 3278 3150 3284 3156 3286 3158 3280 3152 3271 3143 3262 3134 3260 3132

+

3252 3124 3254 3126 3286 3158 3284 3156

+

3150 3022 3149 3021 3145 3017 3147 3019

+

3144 3016 3148 3020 3158 3030 3142 3014

+

3158 3030 3149 3021 3150 3022 3157 3029 3207 3079 3226 3098 3243 3115 3251 3123 3283 3155 3277 3149 3212 3084

+

3222 3094 3123 2995 3119 2991 3216 3088 3217 3089

+

3127 2999 3123 2995 3222 3094 3225 3097 3205 3077 3131 3003

+

3135 3007 3131 3003 3206 3078 3157 3029 3143 3015 3141 3013

+

3143 3015 3156 3028 3151 3023 3146 3018

+

3143 3015 3147 3019 3145 3017 3142 3014 3137 3009 3140 3012

+

3139 3011 3136 3008 3132 3004 3134 3006

+

3133 3005 3138 3010 3142 3014 3158 3030 3211 3083 3129 3001

+

3132 3004 3128 3000 3124 2996 3126 2998 3130 3002 3134 3006

+

3126 2998 3124 2996 3120 2992 3116 2988 3111 2983 3113 2985 3118 2990 3122 2994

+

3110 2982 3112 2984 3117 2989 3259 3131 3261 3133

+

3110 2982 3261 3133 3270 3142 3109 2981

+

3109 2981 3270 3142 3279 3151 3107 2979

+

3108 2980 3107 2979 3279 3151 3285 3157 3253 3125 3245 3117 3241 3113

+

3244 3116 3246 3118 3254 3126 3252 3124

+

3219 3091 3221 3093 3246 3118 3244 3116 3227 3099 3223 3095

+

3221 3093 3218 3090 3215 3087 3214 3086

+
+ + + +

3201 3184 3200 3184 3208 3184 3209 3184

+

3241 3184 3221 3184 3214 3184 3209 3184 3208 3184

+

3121 3184 3275 3184 3260 3184 3117 3184

+

3125 3184 3129 3184 3212 3184 3278 3184 3275 3184 3121 3184

+

3275 3184 3278 3184 3284 3184 3286 3184 3280 3184 3271 3184 3262 3184 3260 3184

+

3252 3184 3254 3184 3286 3184 3284 3184

+

3151 3184 3149 3184 3145 3184 3147 3184

+

3145 3184 3149 3184 3158 3184 3142 3184

+

3158 3184 3149 3184 3151 3184 3157 3184 3207 3184 3227 3184 3244 3184 3252 3184 3284 3184 3278 3184 3212 3184

+

3223 3184 3123 3184 3119 3184 3216 3184 3219 3184

+

3127 3184 3123 3184 3223 3184 3227 3184 3207 3184 3131 3184

+

3135 3184 3131 3184 3207 3184 3157 3184 3143 3184 3141 3184

+

3143 3184 3157 3184 3151 3184 3147 3184

+

3143 3184 3147 3184 3145 3184 3142 3184 3138 3184 3141 3184

+

3141 3184 3138 3184 3133 3184 3135 3184

+

3133 3184 3138 3184 3142 3184 3158 3184 3212 3184 3129 3184

+

3133 3184 3129 3184 3125 3184 3127 3184 3131 3184 3135 3184

+

3127 3184 3125 3184 3121 3184 3117 3184 3112 3184 3113 3184 3119 3184 3123 3184

+

3110 3184 3112 3184 3117 3184 3260 3184 3262 3184

+

3110 3184 3262 3184 3271 3184 3109 3184

+

3109 3184 3271 3184 3280 3184 3107 3184

+

3108 3184 3107 3184 3280 3184 3286 3184 3254 3184 3246 3184 3241 3184

+

3244 3184 3246 3184 3254 3184 3252 3184

+

3219 3184 3221 3184 3246 3184 3244 3184 3227 3184 3223 3184

+

3221 3184 3219 3184 3216 3184 3214 3184

+

3198 3184 3199 3184 3224 3184 3240 3184

+
+ + + +

3201 3073 3200 3072 3208 3080 3209 3081

+

3241 3113 3220 3092 3213 3085 3209 3081 3208 3080

+

3121 2993 3274 3146 3259 3131 3117 2989

+

3125 2997 3129 3001 3210 3082 3276 3148 3274 3146 3121 2993

+

3275 3147 3278 3150 3284 3156 3286 3158 3280 3152 3271 3143 3262 3134 3260 3132

+

3252 3124 3254 3126 3286 3158 3284 3156

+

3150 3022 3149 3021 3145 3017 3147 3019

+

3144 3016 3148 3020 3158 3030 3142 3014

+

3158 3030 3149 3021 3150 3022 3157 3029 3207 3079 3226 3098 3243 3115 3251 3123 3283 3155 3277 3149 3212 3084

+

3222 3094 3123 2995 3119 2991 3216 3088 3217 3089

+

3127 2999 3123 2995 3222 3094 3225 3097 3205 3077 3131 3003

+

3135 3007 3131 3003 3206 3078 3157 3029 3143 3015 3141 3013

+

3143 3015 3156 3028 3151 3023 3146 3018

+

3143 3015 3147 3019 3145 3017 3142 3014 3137 3009 3140 3012

+

3139 3011 3136 3008 3132 3004 3134 3006

+

3133 3005 3138 3010 3142 3014 3158 3030 3211 3083 3129 3001

+

3132 3004 3128 3000 3124 2996 3126 2998 3130 3002 3134 3006

+

3126 2998 3124 2996 3120 2992 3116 2988 3111 2983 3113 2985 3118 2990 3122 2994

+

3110 2982 3112 2984 3117 2989 3259 3131 3261 3133

+

3110 2982 3261 3133 3270 3142 3109 2981

+

3109 2981 3270 3142 3279 3151 3107 2979

+

3108 2980 3107 2979 3279 3151 3285 3157 3253 3125 3245 3117 3241 3113

+

3244 3116 3246 3118 3254 3126 3252 3124

+

3219 3091 3221 3093 3246 3118 3244 3116 3227 3099 3223 3095

+

3221 3093 3218 3090 3215 3087 3214 3086

+

3198 3070 3199 3071 3224 3096 3240 3112

+

3104 2976 3192 3064 3190 3062 3098 2970

+

3106 2978 3105 2977 3114 2986 3115 2987

+

3084 2956 3105 2977 3106 2978 3103 2975 3097 2969 3086 2958 3085 2957

+

3081 2953 3079 2951 3084 2956 3085 2957

+

3083 2955 3082 2954 3079 2951 3080 2952

+

3087 2959 3099 2971 3102 2974 3101 2973 3082 2954 3083 2955

+

3088 2960 3092 2964 3194 3066 3195 3067 3100 2972

+

3086 2958 3089 2961 3093 2965 3095 2967 3091 2963 3087 2959 3083 2955 3080 2952 3085 2957

+

3090 2962 3189 3061 3191 3063 3094 2966

+

3094 2966 3191 3063 3193 3065 3096 2968

+

3096 2968 3193 3065 3194 3066 3092 2964

+
+ + + +

3201 3073 3200 3072 3208 3080 3209 3081

+

3241 3113 3220 3092 3213 3085 3209 3081 3208 3080

+

3121 2993 3274 3146 3259 3131 3117 2989

+

3125 2997 3129 3001 3210 3082 3276 3148 3274 3146 3121 2993

+

3275 3147 3278 3150 3284 3156 3286 3158 3280 3152 3271 3143 3262 3134 3260 3132

+

3252 3124 3254 3126 3286 3158 3284 3156

+

3150 3022 3149 3021 3145 3017 3147 3019

+

3144 3016 3148 3020 3158 3030 3142 3014

+

3158 3030 3149 3021 3150 3022 3157 3029 3207 3079 3226 3098 3243 3115 3251 3123 3283 3155 3277 3149 3212 3084

+

3222 3094 3123 2995 3119 2991 3216 3088 3217 3089

+

3127 2999 3123 2995 3222 3094 3225 3097 3205 3077 3131 3003

+

3135 3007 3131 3003 3206 3078 3157 3029 3143 3015 3141 3013

+

3143 3015 3156 3028 3151 3023 3146 3018

+

3143 3015 3147 3019 3145 3017 3142 3014 3137 3009 3140 3012

+

3139 3011 3136 3008 3132 3004 3134 3006

+

3133 3005 3138 3010 3142 3014 3158 3030 3211 3083 3129 3001

+

3132 3004 3128 3000 3124 2996 3126 2998 3130 3002 3134 3006

+

3126 2998 3124 2996 3120 2992 3116 2988 3111 2983 3113 2985 3118 2990 3122 2994

+

3110 2982 3112 2984 3117 2989 3259 3131 3261 3133

+

3110 2982 3261 3133 3270 3142 3109 2981

+

3109 2981 3270 3142 3279 3151 3107 2979

+

3108 2980 3107 2979 3279 3151 3285 3157 3253 3125 3245 3117 3241 3113

+

3244 3116 3246 3118 3254 3126 3252 3124

+

3219 3091 3221 3093 3246 3118 3244 3116 3227 3099 3223 3095

+

3221 3093 3218 3090 3215 3087 3214 3086

+

3198 3070 3199 3071 3224 3096 3240 3112

+

3104 2976 3192 3064 3190 3062 3098 2970

+

3106 2978 3105 2977 3114 2986 3115 2987

+

3084 2956 3105 2977 3106 2978 3103 2975 3097 2969 3086 2958 3085 2957

+

3081 2953 3079 2951 3084 2956 3085 2957

+

3083 2955 3082 2954 3079 2951 3080 2952

+

3087 2959 3099 2971 3102 2974 3101 2973 3082 2954 3083 2955

+

3088 2960 3092 2964 3194 3066 3195 3067 3100 2972

+

3086 2958 3089 2961 3093 2965 3095 2967 3091 2963 3087 2959 3083 2955 3080 2952 3085 2957

+

3090 2962 3189 3061 3191 3063 3094 2966

+

3094 2966 3191 3063 3193 3065 3096 2968

+

3096 2968 3193 3065 3194 3066 3092 2964

+

3154 3026 3272 3144 3263 3135 3155 3027

+

3256 3128 3258 3130 3290 3162 3288 3160

+

3248 3120 3250 3122 3258 3130 3256 3128

+

3153 3025 3242 3114 3247 3119 3255 3127 3287 3159 3281 3153 3152 3024

+

3152 3024 3281 3153 3272 3144 3154 3026

+

3273 3145 3282 3154 3288 3160 3290 3162 3269 3141 3266 3138 3264 3136

+

3263 3135 3265 3137 3159 3031 3155 3027

+

3159 3031 3265 3137 3267 3139 3238 3110 3161 3033

+

3238 3110 3235 3107 3168 3040 3164 3036 3161 3033

+

3203 3075 3231 3103 3170 3042 3174 3046 3180 3052 3183 3055

+

3186 3058 3188 3060 3197 3069 3203 3075 3183 3055

+

3176 3048 3182 3054 3185 3057 3186 3058 3183 3055 3179 3051

+

3186 3058 3184 3056 3187 3059 3188 3060

+

3188 3060 3187 3059 3196 3068 3197 3069

+

3204 3076 3196 3068 3187 3059 3185 3057 3181 3053

+

3196 3068 3204 3076 3237 3109 3239 3111 3268 3140 3289 3161 3257 3129 3249 3121 3234 3106 3232 3104 3202 3074 3197 3069

+

3236 3108 3204 3076 3181 3053 3177 3049 3172 3044 3168 3040

+

3173 3045 3171 3043 3175 3047 3178 3050

+

3171 3043 3173 3045 3169 3041 3165 3037 3163 3035 3167 3039

+

3166 3038 3170 3042 3230 3102 3233 3105 3229 3101 3162 3034

+

3162 3034 3229 3101 3228 3100 3160 3032

+
+ + + +

3201 3185 3200 3185 3208 3185 3209 3185

+

3241 3185 3221 3185 3214 3185 3209 3185 3208 3185

+

3121 3185 3275 3185 3260 3185 3117 3185

+

3125 3185 3129 3185 3212 3185 3278 3185 3275 3185 3121 3185

+

3275 3185 3278 3185 3284 3185 3286 3185 3280 3185 3271 3185 3262 3185 3260 3185

+

3252 3185 3254 3185 3286 3185 3284 3185

+

3151 3185 3149 3185 3145 3185 3147 3185

+

3145 3185 3149 3185 3158 3185 3142 3185

+

3158 3185 3149 3185 3151 3185 3157 3185 3207 3185 3227 3185 3244 3185 3252 3185 3284 3185 3278 3185 3212 3185

+

3223 3185 3123 3185 3119 3185 3216 3185 3219 3185

+

3127 3185 3123 3185 3223 3185 3227 3185 3207 3185 3131 3185

+

3135 3185 3131 3185 3207 3185 3157 3185 3143 3185 3141 3185

+

3143 3185 3157 3185 3151 3185 3147 3185

+

3143 3185 3147 3185 3145 3185 3142 3185 3138 3185 3141 3185

+

3141 3185 3138 3185 3133 3185 3135 3185

+

3133 3185 3138 3185 3142 3185 3158 3185 3212 3185 3129 3185

+

3133 3185 3129 3185 3125 3185 3127 3185 3131 3185 3135 3185

+

3127 3185 3125 3185 3121 3185 3117 3185 3112 3185 3113 3185 3119 3185 3123 3185

+

3110 3185 3112 3185 3117 3185 3260 3185 3262 3185

+

3110 3185 3262 3185 3271 3185 3109 3185

+

3109 3185 3271 3185 3280 3185 3107 3185

+

3108 3185 3107 3185 3280 3185 3286 3185 3254 3185 3246 3185 3241 3185

+

3244 3185 3246 3185 3254 3185 3252 3185

+

3219 3185 3221 3185 3246 3185 3244 3185 3227 3185 3223 3185

+

3221 3185 3219 3185 3216 3185 3214 3185

+

3198 3185 3199 3185 3224 3185 3240 3185

+

3104 3185 3192 3185 3190 3185 3098 3185

+

3106 3185 3105 3185 3114 3185 3115 3185

+

3084 3185 3105 3185 3106 3185 3104 3185 3098 3185 3086 3185 3085 3185

+

3081 3185 3079 3185 3084 3185 3085 3185

+

3083 3185 3082 3185 3079 3185 3081 3185

+

3088 3185 3100 3185 3102 3185 3101 3185 3082 3185 3083 3185

+

3088 3185 3092 3185 3194 3185 3195 3185 3100 3185

+

3086 3185 3090 3185 3094 3185 3096 3185 3092 3185 3088 3185 3083 3185 3081 3185 3085 3185

+

3090 3185 3189 3185 3191 3185 3094 3185

+

3094 3185 3191 3185 3193 3185 3096 3185

+

3096 3185 3193 3185 3194 3185 3092 3185

+

3154 3185 3273 3185 3264 3185 3155 3185

+

3256 3185 3258 3185 3290 3185 3288 3185

+

3248 3185 3250 3185 3258 3185 3256 3185

+

3153 3185 3242 3185 3248 3185 3256 3185 3288 3185 3282 3185 3152 3185

+

3152 3185 3282 3185 3273 3185 3154 3185

+

3273 3185 3282 3185 3288 3185 3290 3185 3269 3185 3266 3185 3264 3185

+

3264 3185 3266 3185 3159 3185 3155 3185

+

3159 3185 3266 3185 3269 3185 3239 3185 3161 3185

+

3239 3185 3237 3185 3168 3185 3164 3185 3161 3185

+

3203 3185 3232 3185 3170 3185 3174 3185 3180 3185 3183 3185

+

3186 3185 3188 3185 3197 3185 3203 3185 3183 3185

+

3177 3185 3182 3185 3185 3185 3186 3185 3183 3185 3180 3185

+

3186 3185 3185 3185 3187 3185 3188 3185

+

3188 3185 3187 3185 3196 3185 3197 3185

+

3204 3185 3196 3185 3187 3185 3185 3185 3182 3185

+

3196 3185 3204 3185 3237 3185 3239 3185 3269 3185 3290 3185 3258 3185 3250 3185 3234 3185 3232 3185 3203 3185 3197 3185

+

3237 3185 3204 3185 3182 3185 3177 3185 3172 3185 3168 3185

+

3174 3185 3172 3185 3177 3185 3180 3185

+

3172 3185 3174 3185 3170 3185 3166 3185 3164 3185 3168 3185

+

3166 3185 3170 3185 3232 3185 3234 3185 3229 3185 3162 3185

+

3162 3185 3229 3185 3228 3185 3160 3185

+

3292 3185 3308 3185 3307 3185 3291 3185

+
+
+ + + CAT3DBagRep + + +
+ + + + 337.036 -166.5 15.2313 336.007 -166.5 14.9556 334.978 -166.5 13.1734 334.978 -166.5 -1.64688 339.094 -166.5 -1.64688 339.094 -166.5 13.1734 338.819 -166.5 14.2024 222.784 -166.5 25.9998 220.149 -166.5 25.9998 220.149 -166.5 -26.0002 222.784 -166.5 -26.0002 250.149 -166.5 0.06476 247.59 -166.5 0.06476 247.59 -166.5 -21.434 250.149 -166.5 -21.434 250.149 -166.5 -26.0002 250.149 -166.5 -21.434 222.784 -166.5 -21.434 222.784 -166.5 -26.0002 291.232 -166.5 25.9998 288.598 -166.5 25.9998 288.598 -166.5 -26.0002 291.232 -166.5 -26.0002 318.598 -166.5 0.06476 316.038 -166.5 0.06476 316.038 -166.5 -21.434 318.598 -166.5 -21.434 318.598 -166.5 -26.0002 318.598 -166.5 -21.434 291.232 -166.5 -21.434 291.232 -166.5 -26.0002 325.195 -166.5 25.9998 322.56 -166.5 25.9998 322.56 -166.5 -26.0002 325.195 -166.5 -26.0002 352.56 -166.5 -26.0002 352.56 -166.5 -21.434 325.195 -166.5 -21.434 325.195 -166.5 -26.0002 345.866 -166.5 14.3973 352.56 -166.5 14.3973 352.56 -166.5 25.9998 345.866 -166.5 25.9998 284.112 -166.5 25.9998 281.552 -166.5 25.9998 281.552 -166.5 -14.2677 284.112 -166.5 -14.2677 256.746 -166.5 25.9998 254.112 -166.5 25.9998 254.112 -166.5 -26.0002 256.746 -166.5 -26.0002 284.112 -166.5 -26.0002 284.112 -166.5 -21.434 256.746 -166.5 -21.434 256.746 -166.5 -26.0002 231.052 -166.5 21.5635 231.052 -166.5 25.9998 222.784 -166.5 25.9998 222.784 -166.5 21.5635 250.149 -166.5 21.5635 250.149 -166.5 25.9998 235.187 -166.5 25.9998 235.187 -166.5 21.5635 231.052 -166.5 21.5635 233.091 -166.5 21.4063 235.187 -166.5 21.5635 235.187 -166.5 25.9998 231.052 -166.5 25.9998 235.187 -166.5 21.5635 233.091 -166.5 21.4063 233.091 -166.5 -2.47022 235.187 -166.5 14.3973 235.187 -166.5 21.5635 235.187 -166.5 14.3973 237.208 -166.5 21.4063 247.59 -166.5 21.5635 235.187 -166.5 21.5635 237.208 -166.5 21.4063 244.206 -166.5 21.4063 243.456 -166.5 0.06476 250.149 -166.5 0.06476 250.149 -166.5 21.5635 247.59 -166.5 21.5635 244.206 -166.5 21.4063 243.456 -166.5 17.0542 243.456 -166.5 17.0542 240.089 -166.5 -2.47022 242.353 -166.5 -2.96658 243.456 -166.5 0.06476 226.918 -166.5 21.5635 222.784 -166.5 21.5635 222.784 -166.5 -21.434 226.093 -166.5 -21.4068 235.187 -166.5 -21.434 233.091 -166.5 -21.4068 226.093 -166.5 -21.4068 222.784 -166.5 -21.434 235.149 -166.5 -8.64517 233.091 -166.5 -8.64517 233.091 -166.5 -21.4068 235.187 -166.5 -21.434 237.208 -166.5 -21.4068 237.208 -166.5 -10.7035 236.932 -166.5 -9.67431 247.59 -166.5 -21.434 244.206 -166.5 -21.4068 237.208 -166.5 -21.4068 235.187 -166.5 -21.434 244.206 -166.5 -6.17521 244.206 -166.5 -21.4068 247.59 -166.5 -21.434 247.59 -166.5 -7.10149 247.59 -166.5 -7.10149 247.59 -166.5 0.06476 243.456 -166.5 0.06476 243.456 -166.5 -4.06875 244.206 -166.5 -6.17521 242.353 -166.5 -2.96658 243.456 -166.5 -4.06875 243.456 -166.5 0.06476 318.598 -166.5 21.5635 318.598 -166.5 25.9998 303.635 -166.5 25.9998 303.635 -166.5 21.5635 311.634 -166.5 -4.32271 311.904 -166.5 -5.3307 316.038 -166.5 -7.10149 316.038 -166.5 0.06476 311.904 -166.5 0.06476 311.904 -166.5 -5.3307 312.13 -166.5 -21.4068 316.038 -166.5 -21.434 316.038 -166.5 -7.10149 316.038 -166.5 -21.434 312.13 -166.5 -21.4068 305.132 -166.5 -21.4068 303.635 -166.5 -21.434 303.622 -166.5 -8.792 301.458 -166.5 -8.64517 301.016 -166.5 -21.4068 303.635 -166.5 -21.434 305.132 -166.5 -21.4068 305.132 -166.5 -10.7035 304.856 -166.5 -9.67431 303.635 -166.5 -21.434 301.016 -166.5 -21.4068 294.017 -166.5 -21.4068 291.232 -166.5 -21.434 294.017 -166.5 20.8824 291.232 -166.5 21.5635 291.232 -166.5 -21.434 294.017 -166.5 -21.4068 295.367 -166.5 21.5635 295.367 -166.5 25.9998 291.232 -166.5 25.9998 291.232 -166.5 21.5635 294.017 -166.5 20.8824 295.367 -166.5 25.9998 295.367 -166.5 21.5635 296.852 -166.5 21.4063 301.016 -166.5 21.4063 303.635 -166.5 21.5635 303.635 -166.5 25.9998 303.635 -166.5 21.5635 301.016 -166.5 21.4063 301.016 -166.5 -2.47022 303.635 -166.5 14.3973 303.635 -166.5 21.5635 303.635 -166.5 14.3973 305.132 -166.5 21.4063 316.038 -166.5 21.5635 303.635 -166.5 21.5635 305.132 -166.5 21.4063 312.13 -166.5 21.4063 311.904 -166.5 0.06476 318.598 -166.5 0.06476 318.598 -166.5 21.5635 316.038 -166.5 21.5635 312.13 -166.5 21.4063 311.904 -166.5 20.0938 311.904 -166.5 20.0938 308.093 -166.5 -2.01018 310.278 -166.5 -2.96658 311.904 -166.5 0.06476 311.904 -166.5 0.06476 310.278 -166.5 -2.96658 311.634 -166.5 -4.32271 325.195 -166.5 14.3973 327.98 -166.5 12.7614 329.138 -166.5 17.0838 329.329 -166.5 21.5635 329.329 -166.5 25.9998 325.195 -166.5 25.9998 327.98 -166.5 12.7614 325.195 -166.5 14.3973 325.195 -166.5 -21.434 327.98 -166.5 -21.4068 337.598 -166.5 -21.434 334.978 -166.5 -21.4068 327.98 -166.5 -21.4068 325.195 -166.5 -21.434 334.978 -166.5 -8.64517 334.978 -166.5 -21.4068 337.598 -166.5 -21.434 339.094 -166.5 -21.4068 339.094 -166.5 -8.64517 350.001 -166.5 -21.434 346.093 -166.5 -21.4068 339.094 -166.5 -21.4068 337.598 -166.5 -21.434 346.093 -166.5 12.7614 346.093 -166.5 -21.4068 350.001 -166.5 -21.434 352.56 -166.5 -21.434 352.56 -166.5 14.3973 350.001 -166.5 14.3973 333.463 -166.5 21.5635 332.302 -166.5 20.2481 337.598 -166.5 21.5635 329.138 -166.5 17.0838 332.302 -166.5 20.2481 333.463 -166.5 21.5635 333.463 -166.5 25.9998 329.329 -166.5 25.9998 341.732 -166.5 21.5635 341.732 -166.5 25.9998 333.463 -166.5 25.9998 333.463 -166.5 21.5635 341.77 -166.5 20.2481 341.732 -166.5 21.5635 337.598 -166.5 21.5635 341.732 -166.5 21.5635 341.77 -166.5 20.2481 344.935 -166.5 17.0838 345.866 -166.5 21.5635 345.866 -166.5 25.9998 341.732 -166.5 25.9998 344.935 -166.5 17.0838 345.866 -166.5 14.3973 345.866 -166.5 21.5635 346.093 -166.5 12.7614 345.866 -166.5 14.3973 344.935 -166.5 17.0838 350.001 -166.5 14.3973 345.866 -166.5 14.3973 346.093 -166.5 12.7614 284.112 -166.5 -21.434 284.112 -166.5 -14.2677 277.654 -166.5 -14.2677 276.955 -166.5 -16.8784 277.418 -166.5 -21.434 273.283 -166.5 -21.434 277.418 -166.5 -21.434 276.955 -166.5 -16.8784 273.64 -166.5 -20.1934 273.64 -166.5 -20.1934 269.149 -166.5 -21.434 273.283 -166.5 -21.434 260.88 -166.5 21.5635 256.746 -166.5 21.5635 256.746 -166.5 -14.2677 260.055 -166.5 -12.3501 260.055 -166.5 -12.3501 256.746 -166.5 -14.2677 256.746 -166.5 -21.434 260.88 -166.5 -21.434 261.268 -166.5 -16.8784 260.88 -166.5 -21.434 265.015 -166.5 -21.434 264.583 -166.5 -20.1934 261.268 -166.5 -16.8784 269.149 -166.5 -21.434 264.583 -166.5 -20.1934 265.015 -166.5 -21.434 265.015 -166.5 21.5635 265.015 -166.5 25.9998 256.746 -166.5 25.9998 256.746 -166.5 21.5635 267.053 -166.5 21.4063 267.053 -166.5 -12.3505 267.329 -166.5 -13.3795 269.111 -166.5 -14.4085 270.141 -166.5 -14.1328 271.17 -166.5 -12.3505 271.17 -166.5 21.4063 269.149 -166.5 21.5635 265.015 -166.5 21.5635 267.053 -166.5 21.4063 269.149 -166.5 21.5635 269.149 -166.5 25.9998 265.015 -166.5 25.9998 281.552 -166.5 25.9998 269.149 -166.5 25.9998 269.149 -166.5 21.5635 271.17 -166.5 21.4063 278.168 -166.5 21.4063 281.552 -166.5 21.5635 281.552 -166.5 21.5635 278.168 -166.5 21.4063 278.168 -166.5 -12.3501 281.552 -166.5 -14.2677 278.168 -166.5 -12.3501 277.654 -166.5 -14.2677 281.552 -166.5 -14.2677 10.6324 93 -0.000244 10.6324 93 -0.000244 11.25 93.9955 -0.000244 11.25 93.9955 -0.000244 14.3579 87.8732 -25.7744 14.3579 87.8732 -25.7744 14.3579 87.8732 -25.7744 14.3579 87.8732 -25.7744 14.3579 87.8732 25.7739 14.3579 87.8732 25.7739 14.3579 87.8732 25.7739 29.3539 75.391 -51.3488 29.3539 75.391 -51.3488 29.3539 75.391 -51.3488 35.125 93.9955 -41.353 35.125 93.9955 -41.353 35.125 93.9955 -41.353 35.125 93.9955 41.3524 35.125 93.9955 41.3524 35.125 93.9955 41.3524 59 66.325 -64.9169 59 66.325 -64.9169 59 66.3252 64.9161 59 66.3252 64.9161 82.875 93.9955 -41.353 82.875 93.9955 -41.353 82.875 93.9955 41.3524 82.875 93.9955 41.3524 88.6461 75.3908 -51.3488 88.6461 75.3908 -51.3488 88.6461 75.3908 -51.3488 88.6461 75.3909 51.3483 88.6461 75.3909 51.3483 88.6461 75.3909 51.3483 94.7159 85.9207 -35.5897 94.7159 85.9207 -35.5897 94.7159 85.9208 35.5891 94.7159 85.9208 35.5891 94.7159 85.9208 35.5891 96.6128 92.9999 -0.000244 100.932 92.9182 -24.2095 100.932 92.9182 -24.2095 100.932 92.9182 -24.2095 100.932 92.9182 24.2089 100.932 92.9182 24.2089 100.932 92.9182 24.2089 17.6473 93.9955 -23.8752 17.6473 93.9955 23.8748 22.5187 85.9207 -35.5898 22.5188 85.9208 35.5894 29.354 75.3911 51.3481 29.354 75.3911 51.3481 59 93.9955 -47.7502 59 93.9955 47.7498 94.1779 83.9125 38.5946 94.1779 83.9125 38.5946 94.1779 83.9126 -38.5951 94.1779 83.9126 -38.5951 94.7159 85.9207 -35.5897 94.7159 85.9207 -35.5897 94.7159 85.9208 35.5891 95.0088 86.1213 -35.8922 95.0089 86.1214 35.8916 96.6128 92.9999 -0.000244 98.3372 93.9955 -2.98682 98.3372 93.9955 2.98645 100.353 93.9955 -23.8752 100.353 93.9955 23.8748 100.932 92.9182 -24.2095 100.932 92.9182 24.2089 101.42 93.9955 -19.8909 101.42 93.9955 -19.8909 101.42 93.9955 19.8906 101.42 93.9955 19.8906 100.353 97 -23.8752 82.875 97 -41.3529 59 97 -47.7502 35.125 97 -41.3529 17.6473 97 -23.8752 11.25 97 -0.000244 17.6473 97 23.8748 35.125 97 41.3524 59 97 47.7498 82.875 97 41.3524 100.353 97 23.8748 106.75 97 -0.000244 106.75 94 -0.000244 100.353 94 23.8748 82.875 94 41.3524 59 94 47.7498 35.125 94 41.3524 17.6473 94 23.8748 11.25 94 -0.000244 17.6473 94 -23.8752 35.125 94 -41.3529 59 94 -47.7502 82.875 94 -41.3529 100.353 94 -23.8752 106.75 97 -0.000244 106.75 94 -0.000244 100.353 94 -23.8752 100.353 97 -23.8752 100.353 97 -23.8752 100.353 94 -23.8752 82.875 94 -41.3529 82.875 97 -41.3529 82.875 97 -41.3529 82.875 94 -41.3529 59 94 -47.7502 59 97 -47.7502 59 97 -47.7502 59 94 -47.7502 35.125 94 -41.3529 35.125 97 -41.3529 35.125 97 -41.3529 35.125 94 -41.3529 17.6473 94 -23.8752 17.6473 97 -23.8752 17.6473 97 -23.8752 17.6473 94 -23.8752 11.25 94 -0.000244 11.25 97 -0.000244 11.25 97 -0.000244 11.25 94 -0.000244 17.6473 94 23.8748 17.6473 97 23.8748 17.6473 97 23.8748 17.6473 94 23.8748 35.125 94 41.3524 35.125 97 41.3524 35.125 97 41.3524 35.125 94 41.3524 59 94 47.7498 59 97 47.7498 59 97 47.7498 59 94 47.7498 82.875 94 41.3524 82.875 97 41.3524 82.875 97 41.3524 82.875 94 41.3524 100.353 94 23.8748 100.353 97 23.8748 100.353 97 23.8748 100.353 94 23.8748 106.75 94 -0.000244 106.75 97 -0.000244 172.153 -64.3467 -82.0002 152.427 -34.8242 -82.0002 149.509 -26.9643 -82.0002 179.864 -69.4986 -82.0002 179.864 -69.4986 81.9998 172.153 -64.3467 81.9998 172.153 -64.3467 -82.0002 179.864 -69.4986 -82.0002 180.614 -70 -81.46 180.614 -70 81.4595 225.945 -70 -19.0674 196.5 -19 -9.50024 196.5 -19 9.49976 225.945 -70 19.0669 225.945 -70 -19.0674 225.945 -70 19.0669 180.614 -70 81.4595 180.614 -70 -81.46 225.945 -70 -19.0674 180.614 -70 -81.46 179.864 -69.4986 -82.0002 149.509 -26.9643 -82.0002 146.553 -19 -78.2465 196.5 -19 -9.50024 149.509 -26.9643 81.9998 146.553 -19 78.246 146.553 -19 -78.2465 149.509 -26.9643 -82.0002 152.427 -34.8242 -82.0002 152.427 -34.8242 81.9998 152.427 -34.8242 81.9998 152.427 -34.8242 -82.0002 172.153 -64.3467 -82.0002 172.153 -64.3467 81.9998 152.427 -34.8242 81.9998 172.153 -64.3467 81.9998 179.864 -69.4986 81.9998 149.509 -26.9643 81.9998 149.509 -26.9643 81.9998 179.864 -69.4986 81.9998 180.614 -70 81.4595 225.945 -70 19.0669 196.5 -19 9.49976 146.553 -19 78.246 146.553 -19 78.246 196.5 -19 9.49976 196.5 -19 -9.50024 146.553 -19 -78.2465 147.396 0 -80.1135 148.799 -7.3473 -78.1823 152.473 -11.8882 -73.1259 157.013 -11.8882 -66.8759 160.687 -7.34731 -61.8195 162.09 0 -59.8881 160.687 7.34732 -61.8195 157.014 11.8882 -66.8759 152.473 11.8882 -73.1259 148.799 7.34733 -78.1823 162.552 7.34733 -88.1746 166.226 11.8882 -83.1182 170.767 11.8882 -76.8682 174.44 7.34732 -71.8118 175.844 0 -69.8805 174.44 -7.34731 -71.8118 170.767 -11.8882 -76.8682 166.226 -11.8882 -83.1182 162.552 -7.3473 -88.1746 161.149 0 -90.106 148.799 -7.3473 -78.1823 162.552 -7.3473 -88.1746 166.226 -11.8882 -83.1182 152.473 -11.8882 -73.1259 152.473 -11.8882 -73.1259 166.226 -11.8882 -83.1182 170.767 -11.8882 -76.8682 157.013 -11.8882 -66.8759 157.013 -11.8882 -66.8759 170.767 -11.8882 -76.8682 174.44 -7.34731 -71.8118 160.687 -7.34731 -61.8195 160.687 -7.34731 -61.8195 174.44 -7.34731 -71.8118 175.844 0 -69.8805 162.09 0 -59.8881 162.09 0 -59.8881 175.844 0 -69.8805 174.44 7.34732 -71.8118 160.687 7.34732 -61.8195 160.687 7.34732 -61.8195 174.44 7.34732 -71.8118 170.767 11.8882 -76.8682 157.014 11.8882 -66.8759 157.014 11.8882 -66.8759 170.767 11.8882 -76.8682 166.226 11.8882 -83.1182 152.473 11.8882 -73.1259 152.473 11.8882 -73.1259 166.226 11.8882 -83.1182 162.552 7.34733 -88.1746 148.799 7.34733 -78.1823 148.799 7.34733 -78.1823 162.552 7.34733 -88.1746 161.149 0 -90.106 147.396 0 -80.1135 147.396 0 -80.1135 161.149 0 -90.106 162.552 -7.3473 -88.1746 148.799 -7.3473 -78.1823 148.799 7.34732 78.1816 152.473 11.8882 73.1254 157.014 11.8882 66.8754 160.687 7.34732 61.819 162.09 0 59.8876 160.687 -7.34732 61.819 157.014 -11.8882 66.8754 152.473 -11.8882 73.1254 148.799 -7.34732 78.1816 147.396 0 80.113 161.149 0 90.1053 162.552 -7.34732 88.1741 166.226 -11.8882 83.1177 170.767 -11.8882 76.8677 174.44 -7.34732 71.8113 175.844 0 69.88 174.44 7.34732 71.8113 170.767 11.8882 76.8677 166.226 11.8882 83.1177 162.552 7.34732 88.1741 147.396 0 80.113 161.149 0 90.1053 162.552 7.34732 88.1741 148.799 7.34732 78.1816 148.799 7.34732 78.1816 162.552 7.34732 88.1741 166.226 11.8882 83.1177 152.473 11.8882 73.1254 152.473 11.8882 73.1254 166.226 11.8882 83.1177 170.767 11.8882 76.8677 157.014 11.8882 66.8754 157.014 11.8882 66.8754 170.767 11.8882 76.8677 174.44 7.34732 71.8113 160.687 7.34732 61.819 160.687 7.34732 61.819 174.44 7.34732 71.8113 175.844 0 69.88 162.09 0 59.8876 162.09 0 59.8876 175.844 0 69.88 174.44 -7.34732 71.8113 160.687 -7.34732 61.819 160.687 -7.34732 61.819 174.44 -7.34732 71.8113 170.767 -11.8882 76.8677 157.014 -11.8882 66.8754 157.014 -11.8882 66.8754 170.767 -11.8882 76.8677 166.226 -11.8882 83.1177 152.473 -11.8882 73.1254 152.473 -11.8882 73.1254 166.226 -11.8882 83.1177 162.552 -7.34732 88.1741 148.799 -7.34732 78.1816 148.799 -7.34732 78.1816 162.552 -7.34732 88.1741 161.149 0 90.1053 147.396 0 80.113 402.182 147 -31.7629 384.19 147 -58.6901 357.263 147 -76.6823 325.5 147 -83.0002 293.737 147 -76.6823 266.81 147 -58.6901 248.818 147 -31.7629 242.5 147 -0.000244 248.818 147 31.7625 266.81 147 58.6896 293.737 147 76.6818 325.5 147 82.9998 357.263 147 76.6818 384.19 147 58.6896 402.182 147 31.7625 408.5 147 -0.000244 408.5 144 -0.000244 402.182 144 31.7625 384.19 144 58.6896 357.263 144 76.6818 325.5 144 82.9998 293.737 144 76.6818 266.81 144 58.6896 248.818 144 31.7625 242.5 144 -0.000244 248.818 144 -31.7629 266.81 144 -58.6901 293.737 144 -76.6823 325.5 144 -83.0002 357.263 144 -76.6823 384.19 144 -58.6901 402.182 144 -31.7629 408.5 147 -0.000244 408.5 144 -0.000244 402.182 144 -31.7629 402.182 147 -31.7629 402.182 147 -31.7629 402.182 144 -31.7629 384.19 144 -58.6901 384.19 147 -58.6901 384.19 147 -58.6901 384.19 144 -58.6901 357.263 144 -76.6823 357.263 147 -76.6823 357.263 147 -76.6823 357.263 144 -76.6823 325.5 144 -83.0002 325.5 147 -83.0002 325.5 147 -83.0002 325.5 144 -83.0002 293.737 144 -76.6823 293.737 147 -76.6823 293.737 147 -76.6823 293.737 144 -76.6823 266.81 144 -58.6901 266.81 147 -58.6901 266.81 147 -58.6901 266.81 144 -58.6901 248.818 144 -31.7629 248.818 147 -31.7629 248.818 147 -31.7629 248.818 144 -31.7629 242.5 144 -0.000244 242.5 147 -0.000244 242.5 147 -0.000244 242.5 144 -0.000244 248.818 144 31.7625 248.818 147 31.7625 248.818 147 31.7625 248.818 144 31.7625 266.81 144 58.6896 266.81 147 58.6896 266.81 147 58.6896 266.81 144 58.6896 293.737 144 76.6818 293.737 147 76.6818 293.737 147 76.6818 293.737 144 76.6818 325.5 144 82.9998 325.5 147 82.9998 325.5 147 82.9998 325.5 144 82.9998 357.263 144 76.6818 357.263 147 76.6818 357.263 147 76.6818 357.263 144 76.6818 384.19 144 58.6896 384.19 147 58.6896 384.19 147 58.6896 384.19 144 58.6896 402.182 144 31.7625 402.182 147 31.7625 402.182 147 31.7625 402.182 144 31.7625 408.5 144 -0.000244 408.5 147 -0.000244 30.859 -148.516 61.9996 30.859 -120 61.9996 25.5 -120 41.9996 25.5 -148 41.9996 25.5 -148 41.9996 25.5 -120 41.9996 25.5 -120 -42.0004 25.5 -148 -42.0004 25.5 -148 -42.0004 25.5 -120 -42.0004 30.859 -120 -62.0004 30.859 -148.516 -62.0004 37.3344 -120 68.4751 212.437 -120 45.3362 212.437 -120 -45.3368 37.3344 -120 -68.4757 30.859 -120 -62.0004 25.5 -120 -42.0004 25.5 -120 41.9996 30.859 -120 61.9996 37.3344 -149.14 68.4751 37.3344 -120 68.4751 30.859 -120 61.9996 30.859 -148.516 61.9996 37.3344 -120 68.4751 37.3344 -149.14 68.4751 212.437 -166 45.3362 212.437 -120 45.3362 212.437 -120 45.3362 212.437 -166 45.3362 212.437 -166 -45.3368 212.437 -120 -45.3368 212.437 -120 -45.3368 212.437 -166 -45.3368 37.3344 -149.14 -68.4757 37.3344 -120 -68.4757 30.859 -148.516 -62.0004 37.3344 -149.14 -68.4757 212.437 -166 -45.3368 212.437 -166 45.3362 37.3344 -149.14 68.4751 30.859 -148.516 61.9996 25.5 -148 41.9996 25.5 -148 -42.0004 37.3344 -149.14 -68.4757 30.859 -148.516 -62.0004 30.859 -120 -62.0004 37.3344 -120 -68.4757 37.3344 -149.14 68.4751 37.3344 -149.14 68.4751 37.3344 -149.14 68.4751 37.3344 -149.14 -68.4757 37.3344 -149.14 -68.4757 37.3344 -149.14 -68.4757 45.5 -142.96 76.6407 45.5 -142.96 76.6407 45.5 -142.959 -76.6414 45.5 -142.959 -76.6414 45.5 -120 -76.6414 45.5 -120 -76.6414 45.5 -120 76.6407 45.5 -120 76.6407 65.5 -138.856 81.9996 65.5 -138.856 81.9996 65.5 -138.855 -82.0002 65.5 -138.855 -82.0002 212.437 -166 -45.3368 212.437 -166 -45.3368 212.437 -166 45.3362 212.437 -166 45.3362 325.498 -166 44.8429 325.498 -166 44.8429 325.498 -166 -44.8434 325.498 -166 -44.8434 325.5 -138 -82.0002 325.5 -138 -82.0002 325.5 -138 81.9998 325.5 -138 81.9998 342.661 -166 -41.4296 342.661 -166 -41.4296 342.661 -166 41.4291 342.661 -166 41.4291 356.88 -138 75.7579 356.88 -138 75.7579 356.88 -138 -75.7583 356.88 -138 -75.7583 356.88 -120 -75.7583 356.88 -120 -75.7583 357.209 -166 -31.7089 357.209 -166 -31.7089 357.209 -166 31.7084 357.209 -166 31.7084 357.209 -120 -31.7089 357.209 -120 -31.7089 366.929 -166 -17.1608 366.929 -166 -17.1608 366.929 -166 17.1603 366.929 -166 17.1603 370.343 -166 -0.000244 370.343 -166 -0.000244 383.483 -138 -57.9829 383.483 -138 -57.9829 383.483 -138 57.9825 383.483 -138 57.9825 401.258 -138 31.3799 401.258 -138 31.3799 401.258 -120 31.3799 401.258 -120 31.3799 401.258 -138 -31.3802 401.258 -138 -31.3802 407.5 -138 -0.000244 407.5 -138 -0.000244 37.3344 -120 -68.4757 37.3344 -120 -68.4757 37.3344 -120 68.4751 37.3344 -120 68.4751 65.5 -120 -82.0004 65.5 -120 81.9996 212.437 -120 -45.3368 212.437 -120 45.3362 325.498 -120 44.8429 325.498 -120 -44.8434 325.5 -120 -82.0002 325.5 -120 81.9998 342.661 -120 -41.4296 342.661 -120 41.4291 356.88 -120 75.7579 357.209 -120 31.7084 366.929 -120 -17.1608 366.929 -120 17.1603 370.343 -120 -0.000244 383.483 -120 -57.983 383.483 -120 57.9825 401.258 -120 -31.3802 407.5 -120 -0.000244 180.612 -120 -82.0002 180.612 -120 -82.0002 180.612 -70 -82.0002 180.612 -70 -82.0002 201.675 -84.0743 -82.0002 207.505 -120 -55.6136 207.505 -120 -55.6136 207.505 -70 -55.6136 207.505 -70 -55.6136 236.5 -120 -45.6238 236.5 -120 -45.6238 236.5 -91.0013 -82.0002 236.5 -70 -45.6238 236.5 -70 -45.6238 265.495 -120 -55.6136 265.495 -120 -55.6136 265.495 -70 -55.6136 265.495 -70 -55.6136 271.325 -84.0743 -82.0002 292.388 -120 -82.0002 292.388 -120 -82.0002 292.388 -70 -82.0002 292.388 -70 -82.0002 342.661 -166 -41.4296 357.208 -166 -31.7089 366.929 -166 -17.1608 370.343 -166 -0.000244 366.929 -166 17.1603 357.209 -166 31.7084 342.661 -166 41.4291 325.498 -166 44.8429 212.437 -166 45.3363 212.437 -166 -45.3368 325.498 -166 -44.8434 212.437 -120 45.3362 325.498 -120 44.8429 342.661 -120 41.429 357.209 -120 31.7084 366.929 -120 17.1603 370.343 -120 -0.000244 366.929 -120 -17.1608 357.208 -120 -31.7089 342.661 -120 -41.4296 325.498 -120 -44.8434 212.437 -120 -45.3368 325.498 -166 -44.8434 325.498 -120 -44.8434 342.661 -120 -41.4296 342.661 -166 -41.4296 342.661 -166 -41.4296 342.661 -120 -41.4296 357.208 -120 -31.7089 357.208 -166 -31.7089 357.208 -166 -31.7089 357.208 -120 -31.7089 366.929 -120 -17.1608 366.929 -166 -17.1608 366.929 -166 -17.1608 366.929 -120 -17.1608 370.343 -120 -0.000244 370.343 -166 -0.000244 370.343 -166 -0.000244 370.343 -120 -0.000244 366.929 -120 17.1603 366.929 -166 17.1603 366.929 -166 17.1603 366.929 -120 17.1603 357.209 -120 31.7084 357.209 -166 31.7084 357.209 -166 31.7084 357.209 -120 31.7084 342.661 -120 41.429 342.661 -166 41.4291 342.661 -166 41.4291 342.661 -120 41.429 325.498 -120 44.8429 325.498 -166 44.8429 325.498 -166 44.8429 325.498 -120 44.8429 212.437 -120 45.3362 212.437 -166 45.3363 212.437 -166 45.3363 212.437 -120 45.3362 212.437 -120 -45.3368 212.437 -166 -45.3368 212.437 -166 -45.3368 212.437 -120 -45.3368 325.498 -120 -44.8434 325.498 -166 -44.8434 25.5 0 -42.0002 25.5 0 -42.0002 25.5 0 41.9998 25.5 0 41.9998 30.859 0 -62.0002 30.859 0 -62.0002 30.859 0 61.9998 30.859 0 61.9998 45.5 0 -76.6412 45.5 0 -76.6412 45.5 0 76.6407 45.5 0 76.6407 356.88 -120 -75.7584 356.88 -120 -75.7584 45.5 -120 -76.6414 45.5 -120 -76.6414 45.5 -120 -76.6414 45.5 -120 76.6407 45.5 -120 76.6407 45.5 -120 76.6407 139.5 0 -82.0002 139.5 0 -82.0002 139.5 0 -82.0002 139.5 0 81.9998 139.5 0 81.9998 139.5 0 81.9998 180.612 -120 -82.0002 180.612 -120 -82.0002 180.612 -120 -82.0002 180.612 -120 -82.0002 180.612 -70 81.9998 180.612 -70 81.9998 180.612 -70 81.9998 180.612 -70 81.9998 236.5 -120 -45.6238 236.5 -120 -45.6238 236.5 -120 45.6233 236.5 -120 45.6233 236.5 -70 -45.6238 236.5 -70 -45.6238 236.5 -70 45.6233 236.5 -70 45.6233 356.88 -120 -75.7584 356.88 -120 75.7578 356.88 -120 75.7578 356.88 -70 -75.7584 356.88 -70 -75.7584 356.88 -70 75.7578 356.88 -70 75.7578 401.258 -120 31.3798 401.258 -120 31.3798 401.258 -70 -31.3802 401.258 -70 -31.3802 25.5 -120 -42.0002 25.5 -120 41.9998 30.859 -120 -62.0002 30.859 -120 61.9998 65.5 -120 -82.0002 65.5 -120 81.9998 65.5 0 -82.0002 65.5 0 -82.0002 65.5 0 81.9998 65.5 0 81.9998 152.427 -34.8242 -82.0002 152.427 -34.8242 81.9998 172.153 -64.3467 81.9998 172.153 -64.3467 -82.0002 180.612 -120 81.9998 180.612 -70 -82.0002 180.612 -70 -82.0002 207.505 -120 -55.6136 207.505 -120 55.6132 207.505 -70 -55.6136 207.505 -70 55.6132 265.495 -120 -55.6136 265.495 -120 55.6132 265.495 -70 -55.6136 265.495 -70 55.6132 292.388 -120 -82.0002 292.388 -120 81.9998 292.388 -70 -82.0002 292.388 -70 81.9998 325.5 -120 -82.0002 325.5 -120 81.9998 325.5 -70 -82.0002 325.5 -70 81.9998 383.483 -120 -57.983 383.483 -120 57.9824 383.483 -70 -57.983 383.483 -70 57.9824 401.258 -120 -31.3802 401.258 -70 31.3798 407.5 -120 -0.000244 407.5 -70 -0.000244 12.2246 -49.4778 76.6407 12.2246 -49.4778 76.6407 12.2246 -49.4778 76.6407 15.6788 -82.9739 39.9998 15.6788 -82.9739 39.9998 25.5 -97 39.9998 25.5 -97 39.9998 25.5 -97 39.9998 30.859 -97 61.9998 30.859 -97 61.9998 30.859 -97 61.9998 30.859 -68.2739 61.9998 30.859 -68.2739 61.9998 30.859 -68.2739 61.9998 45.5 -49.4777 76.6409 45.5 -49.4777 76.6409 65.5 -97 81.9998 65.5 -97 81.9998 10.7448 -68.2739 61.9998 14.743 -81.6375 41.9999 15.6788 -82.9739 39.9998 25.5 -97 41.9999 25.5 -97 41.9999 25.5 -97 39.9998 25.5 -82.9739 39.9998 25.5 -82.9739 39.9998 25.5 -81.6374 41.9999 26.6088 -41.4575 81.9998 45.5 -97 76.6407 45.5 -97 76.6407 45.5 -49.4777 76.6409 65.5 -41.4574 81.9999 65.5 -41.4574 81.9999 12.7462 -65.7608 65.7609 34.62 -65.7608 65.7609 180.612 -120 81.9998 180.612 -120 81.9998 180.612 -70 81.9998 180.612 -70 81.9998 201.675 -84.0743 81.9998 207.505 -120 55.6132 207.505 -120 55.6132 207.505 -70 55.6132 207.505 -70 55.6132 236.5 -120 45.6233 236.5 -120 45.6233 236.5 -91.0013 81.9998 236.5 -70 45.6233 236.5 -70 45.6233 265.495 -120 55.6132 265.495 -120 55.6132 265.495 -70 55.6132 265.495 -70 55.6132 271.325 -84.0743 81.9998 292.388 -120 81.9998 292.388 -120 81.9998 292.388 -70 81.9998 292.388 -70 81.9998 2 -97 -40.0002 2 -97 -40.0002 2 -97 -40.0002 2 -97 39.9998 2 -97 39.9998 2 -97 39.9998 2 -82.9739 39.9998 2 -82.9739 39.9998 2 -82.9739 39.9998 2 -82.9738 -40.0002 2 -82.9738 -40.0002 2 -82.9738 -40.0002 25.5 -97 -40.0002 25.5 -97 -40.0002 25.5 -97 -40.0002 25.5 -97 39.9998 25.5 -97 39.9998 25.5 -97 39.9998 25.5 -82.9739 39.9998 25.5 -82.9739 39.9998 25.5 -82.9739 39.9998 25.5 -82.9738 -40.0002 25.5 -82.9738 -40.0002 25.5 -82.9738 -40.0002 2 -93 -0.000244 2 -85.9208 -35.5897 2 -85.9208 35.5894 25.5 -93 -0.000244 25.5 -85.9208 -35.5897 25.5 -85.9208 35.5894 10.7448 -68.2739 -62.0002 10.7448 -68.2739 -62.0002 10.7448 -68.2739 -62.0002 10.7448 -68.2739 -62.0002 12.2246 -49.4778 -76.6412 12.2246 -49.4778 -76.6412 12.2246 -49.4778 -76.6412 25.5 -97 -40.0002 25.5 -97 -40.0002 25.5 -82.9739 -40.0002 25.5 -82.9739 -40.0002 25.5 -82.9739 -40.0002 45.5 -97 -76.6412 45.5 -97 -76.6412 45.5 -97 -76.6412 45.5 -97 -76.6412 45.5 -49.4777 -76.6414 45.5 -49.4777 -76.6414 45.5 -49.4777 -76.6414 45.5 -49.4777 -76.6414 65.5 -96.9999 -82.0002 65.5 -96.9999 -82.0002 14.743 -81.6375 -42.0004 15.6788 -82.9739 -40.0002 15.6788 -82.9739 -40.0002 25.5 -97 -42.0004 25.5 -97 -42.0004 25.5 -97 -40.0002 25.5 -81.6375 -42.0004 26.6088 -41.4575 -82.0002 30.859 -97 -62.0002 30.859 -97 -62.0002 30.859 -68.2739 -62.0002 65.5 -41.4574 -82.0004 65.5 -41.4574 -82.0004 12.7462 -65.7609 -65.7614 34.62 -65.7609 -65.7614 376.313 155 -21.0479 364.391 155 -38.8911 346.548 155 -50.8136 325.5 155 -55.0002 304.452 155 -50.8136 286.609 155 -38.8911 274.687 155 -21.0479 270.5 155 -0.000244 274.687 155 21.0474 286.609 155 38.8906 304.452 155 50.8131 325.5 155 54.9998 346.548 155 50.8131 364.391 155 38.8906 376.313 155 21.0474 380.5 155 -0.000244 376.313 147 21.0474 364.391 147 38.8906 346.548 147 50.8131 325.5 147 54.9998 304.452 147 50.8131 286.609 147 38.8906 274.687 147 21.0474 270.5 147 -0.000244 274.687 147 -21.0479 286.609 147 -38.8911 304.452 147 -50.8136 325.5 147 -55.0002 346.548 147 -50.8136 364.391 147 -38.8911 376.313 147 -21.0479 380.5 147 -0.000244 380.5 155 -0.000244 380.5 147 -0.000244 376.313 147 -21.0479 376.313 155 -21.0479 376.313 155 -21.0479 376.313 147 -21.0479 364.391 147 -38.8911 364.391 155 -38.8911 364.391 155 -38.8911 364.391 147 -38.8911 346.548 147 -50.8136 346.548 155 -50.8136 346.548 155 -50.8136 346.548 147 -50.8136 325.5 147 -55.0002 325.5 155 -55.0002 325.5 155 -55.0002 325.5 147 -55.0002 304.452 147 -50.8136 304.452 155 -50.8136 304.452 155 -50.8136 304.452 147 -50.8136 286.609 147 -38.8911 286.609 155 -38.8911 286.609 155 -38.8911 286.609 147 -38.8911 274.687 147 -21.0479 274.687 155 -21.0479 274.687 155 -21.0479 274.687 147 -21.0479 270.5 147 -0.000244 270.5 155 -0.000244 270.5 155 -0.000244 270.5 147 -0.000244 274.687 147 21.0474 274.687 155 21.0474 274.687 155 21.0474 274.687 147 21.0474 286.609 147 38.8906 286.609 155 38.8906 286.609 155 38.8906 286.609 147 38.8906 304.452 147 50.8131 304.452 155 50.8131 304.452 155 50.8131 304.452 147 50.8131 325.5 147 54.9998 325.5 155 54.9998 325.5 155 54.9998 325.5 147 54.9998 346.548 147 50.8131 346.548 155 50.8131 346.548 155 50.8131 346.548 147 50.8131 364.391 147 38.8906 364.391 155 38.8906 364.391 155 38.8906 364.391 147 38.8906 376.313 147 21.0474 376.313 155 21.0474 376.313 155 21.0474 376.313 147 21.0474 380.5 147 -0.000244 380.5 155 -0.000244 71.6935 -0.000153 92.9998 71.6935 -0.000153 92.9998 71.6935 -0.000153 92.9998 71.6935 -0.000137 -93.0002 71.6935 -0.000137 -93.0002 71.6935 -0.000137 -93.0002 81.2297 35.5894 -85.9211 81.2297 35.5894 -85.9211 81.2297 35.5894 -85.9211 81.2297 35.5895 85.9205 81.2297 35.5895 85.9205 81.2297 35.5895 85.9205 89.3141 65.7608 65.7606 89.3141 65.7608 -65.7611 94.7158 85.9206 -35.5897 94.7158 85.9207 35.5891 96.6128 92.9999 -0.000244 96.6128 92.9999 -0.000244 98.345 93.9999 -3.00024 98.345 93.9999 2.99976 98.345 93.9999 2.99976 101.423 93.9999 19.8787 101.423 93.9999 19.8787 101.423 93.9999 -19.879 101.423 93.9999 -19.879 103.536 96.9973 11.9923 103.537 96.9974 -11.9926 106.75 93.9999 -0.000244 106.75 93.9999 -0.000244 106.75 98.8526 -0.000244 139.5 -0.000153 92.9998 139.5 -0.000153 92.9998 139.5 -0.000137 -93.0002 139.5 -0.000137 -93.0002 149.091 48.218 92.9998 149.091 48.218 -93.0002 150.306 124 92.9998 150.306 124 92.9998 150.306 124 92.9998 150.306 124 -93.0002 150.306 124 -93.0002 150.306 124 -93.0002 176.404 89.0953 92.9998 176.404 89.0953 -93.0002 205.5 108.536 -0.000244 205.5 123 -0.000244 214.634 114.64 45.9218 214.634 114.64 -45.9222 214.634 123 -45.9222 214.634 123 45.9218 240.647 121.056 84.8525 240.647 121.056 -84.853 240.647 123 -84.853 240.647 123 84.8525 242.5 144 -0.000244 242.5 144 -0.000244 242.5 155 -0.000244 248.818 144 -31.7629 248.818 144 -31.7629 248.818 144 31.7625 248.818 144 31.7625 248.818 155 -31.7629 248.818 155 31.7625 250.418 123 -91.3817 250.418 123 91.3813 266.81 144 -58.6902 266.81 144 -58.6902 266.81 144 58.6896 266.81 144 58.6896 266.81 155 -58.6902 266.81 155 58.6896 293.737 144 -76.6823 293.737 144 -76.6823 293.737 144 76.6818 293.737 144 76.6818 293.737 155 76.6818 293.737 155 -76.6823 306.84 155 92.9998 306.84 155 79.2881 306.84 155 79.2881 306.84 155 -93.0002 306.84 155 -79.2886 306.84 155 -79.2886 325.5 123 92.9998 325.5 123 -93.0002 325.5 144 -83.0002 325.5 144 -83.0002 325.5 144 82.9998 325.5 144 82.9998 325.5 150 92.9998 325.5 150 92.9998 325.5 150 -93.0002 325.5 150 -93.0002 325.5 150 -83.0002 325.5 150 -83.0002 325.5 150 82.9998 325.5 150 82.9998 357.263 144 -76.6823 357.263 144 -76.6823 357.263 144 76.6818 357.263 144 76.6818 357.263 150 -76.6823 357.263 150 76.6818 361.089 123 85.9205 361.089 123 -85.9211 361.089 150 -85.9211 361.089 150 85.9205 384.19 144 -58.6902 384.19 144 -58.6902 384.19 144 58.6896 384.19 144 58.6896 384.19 150 -58.6902 384.19 150 58.6896 391.261 123 65.7606 391.261 123 -65.7612 391.261 150 -65.7612 391.261 150 65.7606 402.182 144 -31.7629 402.182 144 -31.7629 402.182 144 31.7625 402.182 144 31.7625 402.182 150 -31.7629 402.182 150 31.7625 408.5 144 -0.000244 408.5 144 -0.000244 408.5 150 -0.000244 411.421 123 -35.5898 411.421 123 35.5894 411.421 150 -35.5898 411.421 150 35.5894 418.5 150 -0.000244 418.5 123 -0.000244 204 155 92.9998 204 155 -93.0002 217.282 116.409 49.8838 217.282 116.409 92.9998 217.282 116.409 -93.0002 217.282 116.409 -49.8844 250.418 123 92.9998 250.418 123 -93.0002 146.553 -19 -78.2465 146.553 -19 78.246 139.5 0 87.9535 139.5 0 -87.954 176.404 89.0955 37.1588 149.091 48.2181 74.7523 139.5 0 87.9535 146.553 -19 78.246 196.5 -19 9.49976 196.5 102.523 9.49976 196.5 102.523 9.49976 196.5 -19 9.49976 196.5 -19 -9.50024 196.5 102.523 -9.50024 196.5 102.523 9.49976 196.5 102.523 -9.50024 176.404 89.0955 -37.1593 176.404 89.0955 37.1588 176.404 89.0955 37.1588 176.404 89.0955 -37.1593 149.091 48.2181 -74.7529 149.091 48.2181 74.7523 149.091 48.2181 74.7523 149.091 48.2181 -74.7529 139.5 0 -87.954 139.5 0 87.9535 139.5 0 -87.954 149.091 48.2181 -74.7529 176.404 89.0955 -37.1593 196.5 102.523 -9.50024 196.5 -19 -9.50024 146.553 -19 -78.2465 146.553 -19 -78.2465 196.5 -19 -9.50024 196.5 -19 9.49976 146.553 -19 78.246 0 0.000144 92.9999 0 0.000144 92.9999 65.5 0 -82.0002 65.5 0 -82.0002 71.6936 0 -93.0002 71.6936 0 -93.0002 71.6936 0 -82.0002 71.6936 0 -82.0002 139.5 0 -82.0002 139.5 0 -82.0002 0 -93 -0.000244 0 -93 -0.000244 0 -85.9208 -35.5897 0 -85.9208 -35.5897 0 -85.9208 35.5894 0 -85.9208 35.5894 0 -65.761 -65.761 0 -65.7608 65.7609 0 -35.5897 -85.9209 0 -35.5894 85.9207 0 -0.000101 -93.0001 0 -0.000101 -93.0001 0 0.000144 92.9999 0 0.000144 92.9999 0 35.5895 -85.921 0 35.5895 -85.921 0 35.5897 85.9207 0 35.5897 85.9207 0 65.7609 -65.7611 0 65.7609 -65.7611 0 65.7611 65.7606 0 65.7611 65.7606 0 85.9208 -35.5898 0 85.9208 -35.5898 0 85.9209 35.5892 0 85.9209 35.5892 0 93 -0.000244 0 93 -0.000244 25.5 -93 -0.000244 25.5 -93 -0.000244 25.5 -85.9208 -35.5897 25.5 -85.9208 -35.5897 25.5 -85.9208 35.5894 25.5 -85.9208 35.5894 25.5 -81.6375 -42.0002 25.5 -81.6374 41.9999 25.5 0 -42.0002 25.5 0 -42.0002 25.5 0 41.9998 25.5 0 41.9998 30.859 -68.2739 -62.0002 30.859 -68.2739 61.9998 30.859 0 -62.0002 30.859 0 -62.0002 30.859 0 61.9998 30.859 0 61.9998 34.6198 -65.761 -65.7611 34.62 -65.7609 65.7609 45.5 -49.4777 76.6409 45.5 -49.4777 -76.6412 45.5 0 -76.6412 45.5 0 -76.6412 45.5 0 76.6407 45.5 0 76.6407 65.5 -41.4575 -82.0001 65.5 -41.4574 81.9998 65.5 0 81.9998 65.5 0 81.9998 71.6936 0 -93.0002 71.6936 0 81.9998 71.6936 0 81.9998 71.6936 0 92.9998 71.6936 0 92.9998 71.6936 0 92.9998 81.2297 35.5894 -85.921 81.2297 35.5894 -85.921 81.2299 35.5897 85.9205 81.2299 35.5897 85.9205 89.3142 65.7608 -65.7612 89.3142 65.7608 -65.7612 89.3142 65.761 65.7606 89.3142 65.761 65.7606 94.7159 85.9207 -35.5898 94.7159 85.9207 -35.5898 94.7161 85.9208 35.5892 94.7161 85.9208 35.5892 96.6128 93 -0.000244 96.6128 93 -0.000244 139.5 -0.000133 -93.0002 139.5 -0.000133 -93.0002 139.5 0 -82.0002 139.5 0 81.9998 139.5 0 81.9998 139.5 0 92.9998 139.5 0 92.9998 152.427 -34.8243 -86.0732 152.427 -34.8243 -82.0002 152.427 -34.8242 81.9998 152.427 -34.8242 86.0729 152.938 -35.5898 -85.921 152.938 -35.5895 85.9207 156.859 -41.4576 -82.0002 156.859 -41.4574 81.9998 + + + + + + + + + + 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.849775 0.527146 0 0 -1 0 -0.849775 0.527146 0 0 1 0 -0.735927 0.527177 -0.424848 -0.695983 0.525651 -0.489181 0 -0.980788 0.195074 0 1 0 -0.735927 0.527177 0.424848 0 -0.980788 -0.195074 0 1 0 -0.695983 0.525651 -0.489181 -0.424848 0.527177 -0.735927 0 -0.831477 0.555559 -0.695983 0.525651 -0.489181 -0.424848 0.527177 -0.735927 0 1 0 -0.606525 0.514023 0.606554 -0.424848 0.527177 0.735927 0 1 0 0 -0.831477 0.555559 0 0.527177 -0.849756 0 -0.831477 -0.555559 0 0.527177 0.849756 0 1 0 0.489181 0.525651 -0.695983 0 1 0 0.489181 0.525651 0.695983 0 -0.831477 0.555559 0.424848 0.527177 -0.735927 0.489181 0.525651 -0.695983 0 -0.831477 -0.555559 0.424848 0.527177 0.735927 0.489181 0.525651 0.695983 0 -0.923884 0.382672 0.687735 -0.696804 0.203681 0 -0.923884 -0.382672 0.229713 -0.922196 -0.311106 0.687643 -0.696876 -0.203742 0.379223 -0.925305 0 0 1 0 0.489181 0.525651 -0.695983 0.640553 -0.75898 0.116794 0 1 0 0.489181 0.525651 0.695983 0.640522 -0.759001 -0.116825 -0.695983 0.525651 -0.489181 -0.695983 0.525651 0.489181 0 -0.923884 0.382672 0 -0.923884 -0.382672 -0.424848 0.527177 0.735927 0 -0.831477 -0.555559 0 0.527177 -0.849756 0 0.527177 0.849756 0 -0.831477 -0.555559 0.725441 -0.625202 -0.287851 0 -0.831477 0.555559 0.725556 -0.625111 0.287759 0.229743 -0.922188 0.311106 0.48854 -0.845777 0.214454 0.488479 -0.845804 -0.214484 0.687735 -0.696804 0.203681 0.687643 -0.696876 -0.203742 0.379223 -0.925305 0 0.573504 -0.817096 0.0587176 0.573473 -0.817115 -0.0587481 0.735905 0.527207 -0.424848 0.73591 0.527177 0.424879 0.735905 0.527207 -0.424848 0.73591 0.527177 0.424879 0.640553 -0.75898 0.116794 0.828534 0.514054 -0.221992 0.640522 -0.759001 -0.116825 0.828534 0.514054 0.221992 -0.606534 0.51403 0.606539 -0.695958 0.52567 -0.489197 0.489197 0.525672 0.695957 0.489193 0.525678 -0.695955 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 0 0 1 0 0 1 0 0 1 0 0 1 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 1 0 0 1 0 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.555559 -0.831477 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.555559 -0.831477 0 -0.290262 -0.956947 0 -0.290262 -0.956947 0 0.812999 0.518906 -0.264138 0.812999 0.518906 -0.264138 0.812999 0.518906 0.264138 0.812999 0.518906 0.264138 0 -1 0 0 -1 0 -0.290262 -0.956947 0 -0.290262 -0.956947 0 0.812999 0.518906 -0.264138 0.700654 0.499985 -0.509018 0.700654 0.499985 -0.509018 0.700654 0.499985 -0.509018 0.700654 0.499985 -0.509018 0.812999 0.518906 -0.264138 -0.937494 -0.348003 0 -0.937494 -0.348003 0 -0.937494 -0.348003 0 -0.937494 -0.348003 0 -0.890554 -0.454878 0 -0.890554 -0.454878 0 -0.890554 -0.454878 0 -0.890554 -0.454878 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 0 0 1 0 0 1 0 0 1 0 0 1 0.700654 0.499985 0.509018 0.700654 0.499985 0.509018 0.700654 0.499985 0.509018 0.812999 0.518906 0.264138 0.812999 0.518906 0.264138 0.700654 0.499985 0.509018 0 1 0 0 1 0 0 1 0 0 1 0 -0.809038 0 0.587756 -0.809038 0 0.587756 -0.809038 0 0.587756 -0.809038 0 0.587756 -0.809038 0 0.587756 -0.809038 0 0.587756 -0.809038 0 0.587756 -0.809038 0 0.587756 -0.809038 0 0.587756 -0.809038 0 0.587756 0.809038 0 -0.587756 0.809038 0 -0.587756 0.809038 0 -0.587756 0.809038 0 -0.587756 0.809038 0 -0.587756 0.809038 0 -0.587756 0.809038 0 -0.587756 0.809038 0 -0.587756 0.809038 0 -0.587756 0.809038 0 -0.587756 -0.475509 -0.587756 -0.654549 -0.475509 -0.587756 -0.654549 -0.181616 -0.951066 -0.249977 -0.181616 -0.951066 -0.249977 -0.181616 -0.951066 -0.249977 -0.181616 -0.951066 -0.249977 0.181616 -0.951066 0.249977 0.181616 -0.951066 0.249977 0.181616 -0.951066 0.249977 0.181616 -0.951066 0.249977 0.475509 -0.587756 0.654549 0.475509 -0.587756 0.654549 0.475509 -0.587756 0.654549 0.475509 -0.587756 0.654549 0.587756 0 0.809038 0.587756 0 0.809038 0.587756 0 0.809038 0.587756 0 0.809038 0.475509 0.587756 0.654549 0.475509 0.587756 0.654549 0.475509 0.587756 0.654549 0.475509 0.587756 0.654549 0.181616 0.951066 0.249977 0.181616 0.951066 0.249977 0.181616 0.951066 0.249977 0.181616 0.951066 0.249977 -0.181616 0.951066 -0.249977 -0.181616 0.951066 -0.249977 -0.181616 0.951066 -0.249977 -0.181616 0.951066 -0.249977 -0.475509 0.587756 -0.654549 -0.475509 0.587756 -0.654549 -0.475509 0.587756 -0.654549 -0.475509 0.587756 -0.654549 -0.587756 0 -0.809038 -0.587756 0 -0.809038 -0.587756 0 -0.809038 -0.587756 0 -0.809038 -0.475509 -0.587756 -0.654549 -0.475509 -0.587756 -0.654549 -0.809038 0 -0.587756 -0.809038 0 -0.587756 -0.809038 0 -0.587756 -0.809038 0 -0.587756 -0.809038 0 -0.587756 -0.809038 0 -0.587756 -0.809038 0 -0.587756 -0.809038 0 -0.587756 -0.809038 0 -0.587756 -0.809038 0 -0.587756 0.809038 0 0.587756 0.809038 0 0.587756 0.809038 0 0.587756 0.809038 0 0.587756 0.809038 0 0.587756 0.809038 0 0.587756 0.809038 0 0.587756 0.809038 0 0.587756 0.809038 0 0.587756 0.809038 0 0.587756 -0.587756 0 0.809038 -0.587756 0 0.809038 -0.475509 0.587756 0.654549 -0.475509 0.587756 0.654549 -0.475509 0.587756 0.654549 -0.475509 0.587756 0.654549 -0.181616 0.951066 0.249977 -0.181616 0.951066 0.249977 -0.181616 0.951066 0.249977 -0.181616 0.951066 0.249977 0.181616 0.951066 -0.249977 0.181616 0.951066 -0.249977 0.181616 0.951066 -0.249977 0.181616 0.951066 -0.249977 0.475509 0.587756 -0.654549 0.475509 0.587756 -0.654549 0.475509 0.587756 -0.654549 0.475509 0.587756 -0.654549 0.587756 0 -0.809038 0.587756 0 -0.809038 0.587756 0 -0.809038 0.587756 0 -0.809038 0.475509 -0.587756 -0.654549 0.475509 -0.587756 -0.654549 0.475509 -0.587756 -0.654549 0.475509 -0.587756 -0.654549 0.181616 -0.951066 -0.249977 0.181616 -0.951066 -0.249977 0.181616 -0.951066 -0.249977 0.181616 -0.951066 -0.249977 -0.181616 -0.951066 0.249977 -0.181616 -0.951066 0.249977 -0.181616 -0.951066 0.249977 -0.181616 -0.951066 0.249977 -0.475509 -0.587756 0.654549 -0.475509 -0.587756 0.654549 -0.475509 -0.587756 0.654549 -0.475509 -0.587756 0.654549 -0.587756 0 0.809038 -0.587756 0 0.809038 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 0 0 1 0 0 1 0 0 1 0 0 1 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.707083 0 0.70713 0.707083 0 0.70713 0.707083 0 0.70713 0.707083 0 0.70713 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 1 0 0 1 0 0 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.991449 0 0.130497 -0.991449 0 0.130497 -0.991449 0 0.130497 -0.991449 0 0.130497 -0.991449 0 -0.130497 -0.991449 0 -0.130497 -0.991449 0 -0.130497 -0.991449 0 -0.130497 -0.866034 0 -0.499985 -0.866034 0 -0.499985 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.866034 0 0.499985 -0.866034 0 0.499985 0.130985 0 0.991384 0.130985 0 0.991384 0.130985 0 0.991384 0.130985 0 0.991384 1 0 0 1 0 0 1 0 0 1 0 0 0.130985 0 -0.991384 0.130985 0 -0.991384 0.130985 0 -0.991384 0.130985 0 -0.991384 -0.0958281 -0.995398 0 -0.0958281 -0.995398 0 -0.0958281 -0.995398 0 -0.0958281 -0.995398 0 -0.0958281 -0.995398 0 -0.0958281 -0.995398 0 -0.0958281 -0.995398 0 -0.0958281 -0.995398 0 -0.707083 0 -0.70713 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.707083 0 -0.70713 -0.707083 0 0.70713 -0.130985 0 -0.991384 0.00262459 -0.798647 0.601794 -0.707083 0 -0.70713 -0.130985 0 0.991384 0.00262459 -0.798647 -0.601794 -0.499985 0 0.866034 0.00262459 -0.798647 0.601794 -0.499985 0 -0.866034 0.00262459 -0.798647 -0.601794 -0.499985 0 -0.866034 0 1 0 -0.499985 0 0.866034 0 1 0 -0.130497 0 0.991449 0.00262459 -0.798647 0.601794 -0.130497 0 -0.991449 0.00262459 -0.798647 -0.601794 -0.0678121 0 0.997698 0.00262459 -0.798647 -0.601794 -0.0678121 0 -0.997698 0.00262459 -0.798647 0.601794 -0.100162 0 -0.994971 0.0608234 -0.797161 0.600696 -0.100162 0 0.994971 0.0608234 -0.797161 -0.600696 0.0608234 -0.797161 -0.600696 0.0979949 0 -0.995187 0.0608234 -0.797161 0.600696 0.0979949 0 0.995187 -0.382672 0 0.923884 0.230293 -0.798652 -0.555986 -0.382672 0 -0.923884 0.230293 -0.798652 0.555986 0.230293 -0.798652 0.555986 0.382672 0 0.923884 0.230293 -0.798652 -0.555986 0.382672 0 -0.923884 0 1 0 0.382672 0 -0.923884 -0.70713 0 0.707083 0.42552 -0.798665 -0.42552 -0.70713 0 -0.707083 0.42552 -0.798665 0.42552 -0.70713 0 0.707083 0 1 0 -0.923884 0 0.382672 0.555986 -0.798652 -0.230293 -0.923884 0 -0.382672 0.555986 -0.798652 0.230293 -1 0 0 0.601794 -0.798651 0 0.42552 -0.798665 -0.42552 0.707083 0 -0.70713 0.42552 -0.798665 0.42552 0.70713 0 0.707083 0.555986 -0.798652 0.230293 0.923884 0 0.382672 0 1 0 0.923884 0 0.382672 0.555986 -0.798652 -0.230293 0.923884 0 -0.382672 0.601794 -0.798651 0 1 0 0 -0.707083 0 -0.70713 -0.130985 0 0.991384 -0.707083 0 0.70713 -0.130985 0 -0.991384 -0.130497 0 -0.991449 -0.130497 0 0.991449 -0.0678121 0 0.997698 -0.0678121 0 -0.997698 -0.100162 0 -0.994971 -0.100162 0 0.994971 0.0979949 0 -0.995187 0.0979949 0 0.995187 -0.382672 0 0.923884 -0.382672 0 -0.923884 0.382672 0 0.923884 -0.70713 0 -0.707083 -0.923884 0 0.382672 -0.923884 0 -0.382672 -1 0 0 0.707083 0 -0.70713 0.70713 0 0.707083 0.923884 0 -0.382672 1 0 0 0 1 0 -0.700339 0 0.713811 0 -1 0 -0.700339 0 0.713811 0.483444 0.723538 -0.492721 0.3314 0.800118 -0.499985 -0.525956 0 0.850512 0 -1 0 -0.525956 0 0.850512 0.3314 0.800118 -0.499985 0 -1 0 0 0 1 0 0.866034 -0.499985 0 0 1 0 0.866034 -0.499985 0 -1 0 0.525956 0 0.850512 -0.3314 0.800118 -0.499985 0.525956 0 0.850512 -0.3314 0.800118 -0.499985 0 -1 0 0.700339 0 0.713811 -0.483444 0.723538 -0.492721 0.700339 0 0.713811 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.100162 0 -0.994971 0.100162 0 -0.994971 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.70713 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.707083 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 1 0 0 1 0 0 1 0 0 1 0 0 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.70713 0 0.707083 0.70713 0 0.707083 0.70713 0 0.707083 0.70713 0 0.707083 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.100162 0 0.994971 0.100162 0 0.994971 0.100162 0 0.994971 0.100162 0 0.994971 0.00433363 0 0.999991 0.00433363 0 0.999991 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0.00433363 0 -0.999991 0.00433363 0 -0.999991 0.100162 0 -0.994971 0.100162 0 -0.994971 -0.991449 0 -0.130497 0 1 0 -0.991449 0 0.130497 0 1 0 -0.866034 0 -0.499985 0 1 0 -0.866034 0 0.499985 0 1 0 -0.499985 0 -0.866034 0 1 0 -0.499985 0 0.866034 0 1 0 0 -1 0 0 1 0 -0.499985 0 -0.866034 0 -1 0 0 0 -1 -0.499985 0 0.866034 0 -1 0 0 0 1 0 0 -1 0 1 0 0.937494 0.348003 0 0 0 1 0 1 0 0.937494 0.348003 0 0 -1 0 0 0 -1 0 1 0 0.185308 0 -0.98268 0 0 1 0 1 0 0.290323 0.956929 0 0.378277 0 0.925692 0 -1 0 0 0 -1 0 -1 0 0 0 1 0 0 -1 0 1 0 0 0 1 0 1 0 0.382672 0 -0.923884 0 -1 0 0.382672 0 0.923884 0 1 0 0.382672 0 -0.923884 0 1 0 0.382672 0 0.923884 0 -1 0 0.923884 0 0.382672 0 1 0 0.923884 0 -0.382672 -0.991449 0 -0.130497 -0.991449 0 0.130497 -0.866034 0 -0.499985 -0.866034 0 0.499985 -0.130497 0 -0.991449 -0.130497 0 0.991449 -0.130497 0 -0.991449 0 1 0 -0.130497 0 0.991449 0 1 0 0.890554 0.454878 0 0.890554 0.454878 0 0.707161 0.707053 0 0.707161 0.707053 0 0.185308 0 0.98268 0.290323 0.956929 0 0.378277 0 -0.925692 0.525956 0 -0.850512 0.525956 0 0.850512 0.525956 0 -0.850512 0.525956 0 0.850512 -0.525956 0 -0.850512 -0.525956 0 0.850512 -0.525956 0 -0.850512 -0.525956 0 0.850512 -0.378277 0 -0.925692 -0.378277 0 0.925692 -0.378277 0 -0.925692 -0.378277 0 0.925692 0.0979949 0 -0.995187 0.0979949 0 0.995187 0.0979949 0 -0.995187 0.0979949 0 0.995187 0.707083 0 -0.70713 0.707083 0 0.70713 0.707083 0 -0.70713 0.707083 0 0.70713 0.923884 0 -0.382672 0.923884 0 0.382672 1 0 0 1 0 0 0 0 -1 0 0 1 0 1 0 0 -1 0 -0.737203 -0.51616 0.436018 -0.462722 -0.323985 0.82518 0 0.752342 -0.658773 -0.81916 -0.573565 0 0 0.752342 -0.658773 -0.81916 -0.573565 0 0 0.752342 -0.658773 1 0 0 -0.706432 -0.494613 0.506272 0.70713 0 -0.707083 0.818133 0 -0.57503 0 0.752342 -0.658773 0.70713 0 -0.707083 0.866034 0 -0.499985 0.0903043 0.387707 -0.917349 0.70713 0 -0.707083 -0.128941 -0.0902738 0.987535 0.258797 0 -0.965932 -0.737203 -0.51616 0.436018 -0.814398 -0.570208 0.107791 0 0 -1 -0.814398 -0.570208 0.107791 0.991449 0 -0.130497 0 0 -1 0 0 -1 1 0 0 0.991449 0 -0.130497 -0.128941 -0.0902738 0.987535 -0.462722 -0.323985 0.82518 0.499985 0 -0.866034 0.26487 0.304697 -0.914879 0 0 1 0.136265 0.29255 -0.946491 -0.706409 -0.494633 0.506285 0.0903155 0.387729 -0.917338 1.01337e-007 0.75234 -0.658775 0.707112 1.18656e-006 -0.707101 -0.700339 0 -0.713811 0 -1 0 -0.700339 0 -0.713811 0.483444 0.723538 0.492721 0.3314 0.800118 0.499985 -0.525956 0 -0.850512 0 -1 0 -0.525956 0 -0.850512 0.3314 0.800118 0.499985 0 -1 0 0 0 -1 0 0.866034 0.499985 0 0 -1 0 0.866034 0.499985 0 -1 0 0.525956 0 -0.850512 -0.3314 0.800118 0.499985 0.525956 0 -0.850512 -0.3314 0.800118 0.499985 0 -1 0 0.700339 0 -0.713811 -0.483444 0.723538 0.492721 0.700339 0 -0.713811 0 0 1 -1 0 0 0 -1 0 0 0 -1 -1 0 0 0 -1 0 0 0 1 -1 0 0 0 0 1 0 0.831477 -0.555559 -1 0 0 0 0 -1 0 0.831477 0.555559 0 -1 0 0 0 -1 1 0 0 0 -1 0 0 0 1 1 0 0 0 0 1 0 0.831477 -0.555559 1 0 0 0 0 -1 0 0.831477 0.555559 1 0 0 0 1 0 0 0.923884 0.382672 0 0.923884 -0.382672 0 1 0 0 0.923884 0.382672 0 0.923884 -0.382672 1 0 0 -1 0 0 -0.737203 -0.51616 -0.436018 -0.633656 -0.443709 -0.633722 0 0.831477 0.555559 0 0.555559 0.831477 -0.633656 -0.443709 -0.633722 -0.462722 -0.323985 -0.82518 0 0.555559 0.831477 -0.81916 -0.573565 0 1 0 0 0 0.831477 0.555559 0 0 1 1 0 0 -0.633656 -0.443709 -0.633722 -0.462722 -0.323985 -0.82518 0.499985 0 0.866034 0.818133 0 0.57503 0 0.831477 0.555559 0 0.555559 0.831477 0.26487 0.304697 0.914879 0.866034 0 0.499985 -0.128941 -0.0902738 -0.987535 0.258797 0 0.965932 -0.814398 -0.570208 -0.107791 -0.81916 -0.573565 0 0 0 1 -0.814398 -0.570208 -0.107791 0.991449 0 0.130497 0 0 1 0.991449 0 0.130497 -0.128941 -0.0902738 -0.987535 -0.706432 -0.494613 -0.506272 0.818133 0 0.57503 0.866034 0 0.499985 0 0 -1 0.136265 0.29255 0.946491 -0.633686 -0.443712 -0.633689 1.19018e-006 0.555567 0.831472 -7.84074e-007 0.831473 0.555565 0.818113 8.15696e-007 0.575058 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 0 0 1 0 0 1 0 0 1 0 0 1 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.707083 0 0.70713 0.707083 0 0.70713 0.707083 0 0.70713 0.707083 0 0.70713 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 1 0 0 1 0 0 -0.965932 0.258797 0 -0.238166 0.150975 0.959418 0 -1 0 -0.965932 0.258797 0 -0.238166 0.150975 -0.959418 0 -1 0 -0.877966 0.405377 -0.254646 -0.781771 0.389843 -0.486679 -0.600421 0.41435 -0.683965 -0.877966 0.405377 0.254646 -0.781771 0.389843 0.486679 -0.600421 0.41435 0.683965 -0.832354 0.485 0.268258 -0.832354 0.485 -0.268258 -0.770668 0.62273 -0.135197 -0.770668 0.62273 0.135197 -0.72066 0.693289 0 -0.72066 0.693289 0 -0.398144 0.916416 -0.0407727 -0.398144 0.916416 0.0407727 -0.398144 0.916416 0.0407727 -0.965932 0 -0.258797 -0.503708 0.858976 0.0918607 -0.965932 0 0.258797 -0.503708 0.858976 -0.0918607 -0.965932 0 -0.258797 -0.965932 0 0.258797 -1 0 0 0 1 0 -1 0 0 0 -1 0 0.980788 -0.195074 0 0 -1 0 0.980788 -0.195074 0 0.923884 -0.382672 0 0.923884 -0.382672 0 -0.654805 0.680143 0.3296 -0.654805 0.680143 0.3296 -0.36436 0.27543 0.889595 -0.638264 0.716009 -0.282754 -0.638264 0.716009 -0.282754 -0.36436 0.27543 -0.889595 0.70713 -0.707083 0 0.658773 -0.752342 0 1 0 0 1 0 0 0.923884 0 -0.382672 0.923884 0 0.382672 0.896548 0 0.442946 0.896548 0 -0.442946 0.70713 0 -0.707083 0.707083 0 0.70713 0.707083 0 0.70713 0.70713 0 -0.707083 0 1 0 1 0 0 1 0 0 0 1 0 0.923884 0 0.382672 0 1 0 0.923884 0 -0.382672 0.923884 0 0.382672 0.923884 0 -0.382672 0.555559 0 0.831477 0.555559 0 -0.831477 0 1 0 0.707083 0 0.70713 0 1 0 0.707083 0 -0.70713 0.707083 0 0.70713 0.707083 0 -0.70713 0 1 0 0.382672 0 0.923884 0 1 0 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 0.923884 0.0869167 0.996216 0 0.130497 0.991449 0 0.195074 0 -0.980788 0.0869167 0.996216 0 0.130497 0.991449 0 0.195074 0 0.980788 0.0979949 0 0.995187 0.0979949 0 -0.995187 0 0 1 0 1 0 0 1 0 0 0 -1 0.0979949 0 0.995187 0.130497 0.991449 0 0.0979949 0 -0.995187 0.130497 0.991449 0 0 0 1 0.130497 0.991449 0 0 0 -1 0.130497 0.991449 0 -0.382672 0 0.923884 0 1 0 -0.382672 0 -0.923884 0 1 0 -0.382672 0 0.923884 -0.382672 0 -0.923884 0.382672 0 0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 0.923884 -0.707083 0 0.70713 0 1 0 -0.70713 0 -0.707083 0 1 0 -0.707083 0 0.70713 -0.70713 0 -0.707083 0.70713 0 0.707083 0.70713 0 -0.707083 0.70713 0 -0.707083 0.70713 0 0.707083 -0.923884 0 0.382672 0 1 0 -0.923884 0 -0.382672 0 1 0 -0.923884 0 0.382672 -0.923884 0 -0.382672 -1 0 0 0 1 0 -1 0 0 0.923884 0 -0.382672 0.923884 0 0.382672 0.923884 0 -0.382672 0.923884 0 0.382672 1 0 0 1 0 0 0 0 -1 0 0 1 0.555573 -0.831468 2.7006e-008 0.382685 -0.923879 -1.2851e-006 0.382685 -0.923879 -1.04899e-007 -6.30538e-007 1 -4.84219e-007 -0.636282 0.751926 -0.17249 -0.503713 0.858972 -0.0918718 -0.720643 0.693307 -8.46325e-007 0.896538 -1.30469e-007 -0.442968 0.831474 -2.58735e-006 0.555564 0.0653084 -0.997865 -4.80529e-006 0.130527 0.991445 -7.22848e-007 -0.965926 1.9605e-006 -0.258818 -0.965926 1.9605e-006 -0.258818 -0.937494 -0.348003 0 -0.937494 -0.348003 0 -0.99684 -0.0794397 0 -0.99684 -0.0794397 0 0.809038 0 0.587756 0.809038 0 0.587756 0.809038 0 0.587756 0.809038 0 0.587756 0.951062 0 0.309 0.951062 0 0.309 0.951062 0 0.309 0.951062 0 0.309 0.951062 0 -0.309 0.951062 0 -0.309 -0.555559 0.831477 0 -0.555559 0.831477 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.99684 -0.0794397 0 -0.99684 -0.0794397 0 0.809038 0 -0.587756 0.809038 0 -0.587756 0.809038 0 -0.587756 0.951062 0 -0.309 0.951062 0 -0.309 0.809038 0 -0.587756 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.923884 -0.382672 0.130497 0 -0.991449 0 -1 0 0.130497 0 0.991449 0 1 0 0.965932 -0.258797 0 0 -1 0 0 1 0 0 -0.472213 -0.881485 0 1 0 -1 0 0 0 -1 0 -1 0 0 0 -0.923884 -0.382672 -1 0 0 0 -0.896548 0.442946 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0 -1 -1 0 0 0 0 1 -1 0 0 0 0.382672 -0.923884 -1 0 0 0 0.382672 0.923884 -1 0 0 0 0.707083 -0.70713 -1 0 0 0 0.70713 0.707083 -1 0 0 0 0.923884 -0.382672 -1 0 0 0 0.923884 0.382672 -1 0 0 0 1 0 0 -1 0 1 0 0 0 -0.923884 -0.382672 1 0 0 0 -0.923884 0.382672 1 0 0 0.991449 0 0.130497 0.991449 0 -0.130497 0 -1 0 0.991449 0 0.130497 0 -1 0 0.991449 0 -0.130497 0.866034 0 0.499985 0.866034 0 -0.499985 0 -1 0 0.866034 0 0.499985 0 -1 0 0.866034 0 -0.499985 0.70713 0 0.707083 0.70713 0 -0.707083 0.499985 0 -0.866034 0.499985 0 0.866034 0 -1 0 0.499985 0 0.866034 0 -1 0 0.499985 0 -0.866034 0.0869167 0 0.996216 0.130497 0 -0.991449 0 -1 0 0.130497 0 -0.991449 0 -0.0661336 -0.997811 0 -1 0 0 1 0 0 1 0 0 0.195074 0.980788 0.965932 -0.258797 0 0 0.382672 -0.923884 0.965932 -0.258797 0 0 0.382672 0.923884 0.965932 -0.258797 0 0 0.707083 -0.70713 0.965932 -0.258797 0 0 0.70713 0.707083 0.965932 -0.258797 0 0 0.923884 -0.382672 0.965932 -0.258797 0 0 0.923884 0.382672 0.965932 -0.258797 0 0 1 0 0.965932 -0.258797 0 0 1 0 0.937505 0.347972 0 0.937505 0.347972 0 0 1 0 0.937494 0.348003 0 0 1 0 0.937494 0.348003 0 0.890554 0.454878 0 0.890554 0.454878 0 0.890554 0.454878 0 0.890554 0.454878 0 0.831477 0.555559 0 0.831498 0.555528 0 0.831477 0.555559 0 0.831498 0.555528 0 0.130526 1.54146e-006 0.991445 0.130526 -6.00919e-007 -0.991445 2.95047e-007 -0.19509 0.980785 -2.4373e-007 -0.555572 0.831469 -1.07673e-006 -0.831472 0.555567 -1.05099e-006 -0.92388 -0.382682 -9.84978e-008 -0.472236 -0.881472 9.96224e-007 -0.195084 -0.980787 + + + + + + + + + + + + + + +

0 0 1 0 2 0 3 0 4 0 5 0 6 0

+
+ + + +

7 1 8 1 9 1 10 1

+
+ + + +

11 2 12 2 13 2 14 2

+
+ + + +

15 3 16 3 17 3 18 3

+
+ + + +

19 4 20 4 21 4 22 4

+
+ + + +

23 5 24 5 25 5 26 5

+
+ + + +

27 6 28 6 29 6 30 6

+
+ + + +

31 7 32 7 33 7 34 7

+
+ + + +

35 8 36 8 37 8 38 8

+
+ + + +

39 9 40 9 41 9 42 9

+
+ + + +

43 10 44 10 45 10 46 10

+
+ + + +

47 11 48 11 49 11 50 11

+
+ + + +

51 12 52 12 53 12 54 12

+
+ + + +

72 13 73 13 74 13 117 13 118 13 119 13

+
+ + + +

55 13 56 13 57 13 58 13

+

59 13 60 13 61 13 62 13

+

63 13 64 13 65 13 66 13 67 13

+

68 13 69 13 70 13 71 13

+

75 13 76 13 77 13 78 13

+

79 13 80 13 81 13 82 13 83 13 84 13

+

85 13 86 13 87 13 88 13

+

89 13 90 13 91 13 92 13

+

93 13 94 13 95 13 96 13

+

97 13 98 13 99 13 100 13 101 13 102 13 103 13

+

104 13 105 13 106 13 107 13

+

108 13 109 13 110 13 111 13

+

112 13 113 13 114 13 115 13 116 13

+
+ + + +

167 14 168 14 169 14 184 14 185 14 186 14

+
+ + + +

120 14 121 14 122 14 123 14

+

124 14 125 14 126 14 127 14 128 14

+

129 14 130 14 131 14 132 14

+

133 14 134 14 135 14 136 14

+

137 14 138 14 139 14 140 14 141 14 142 14 143 14

+

144 14 145 14 146 14 147 14

+

148 14 149 14 150 14 151 14

+

152 14 153 14 154 14 155 14 156 14

+

157 14 158 14 159 14 160 14 161 14 162 14

+

163 14 164 14 165 14 166 14

+

170 14 171 14 172 14 173 14

+

174 14 175 14 176 14 177 14 178 14 179 14

+

180 14 181 14 182 14 183 14

+
+ + + +

216 15 217 15 218 15 228 15 229 15 230 15 237 15 238 15 239 15 240 15 241 15 242 15 243 15 244 15 245 15

+
+ + + +

187 15 188 15 189 15 190 15 191 15 192 15

+

193 15 194 15 195 15 196 15

+

197 15 198 15 199 15 200 15

+

201 15 202 15 203 15 204 15 205 15

+

206 15 207 15 208 15 209 15

+

210 15 211 15 212 15 213 15 214 15 215 15

+

219 15 220 15 221 15 222 15 223 15

+

224 15 225 15 226 15 227 15

+

231 15 232 15 233 15 234 15 235 15 236 15

+
+ + + +

255 16 256 16 257 16

+
+ + + +

246 16 247 16 248 16 249 16 250 16

+

251 16 252 16 253 16 254 16

+
+ + + +

271 17 272 17 273 17

+
+ + + +

258 17 259 17 260 17 261 17

+

262 17 263 17 264 17 265 17 266 17

+

267 17 268 17 269 17 270 17

+
+ + + +

301 18 302 18 303 18

+
+ + + +

274 18 275 18 276 18 277 18

+

278 18 279 18 280 18 281 18 282 18 283 18 284 18 285 18

+

286 18 287 18 288 18 289 18 290 18

+

291 18 292 18 293 18 294 18 295 18 296 18

+

297 18 298 18 299 18 300 18

+
+ + + +

351 93 314 93 353 93

+
+ + + +

353 93 355 93 323 93 351 93

+
+ + + +

352 94 311 94 350 94

+
+ + + +

350 94 320 94 317 94 352 94

+
+ + + +

331 95 366 95 373 95 371 95

+

331 95 337 95 359 95 366 95

+
+ + + +

329 96 370 96 372 96 365 96

+

365 96 361 96 334 96 329 96

+
+ + + +

331 97 371 97 377 97 369 97

+

329 97 356 97 320 97 350 97 307 97 351 97 323 97 357 97 331 97 369 97 368 97

+

329 97 368 97 375 97 370 97

+
+ + + +

367 82 368 83 369 84 375 90 372 87 370 85 361 76 365 80 339 54 342 57 366 81 359 74 377 92 371 86 373 88

+
+ + + +

329 44 333 48 325 40 356 71

+

356 71 325 40 316 31 319 34

+

338 53 352 67 317 32 324 39 332 47 360 75

+

363 78 365 80 346 61 374 89 368 83 343 58

+

362 77 343 58 305 20 310 25 352 67

+

350 65 308 23 304 19 306 21

+

306 21 304 19 312 27 351 66

+

322 37 354 69 327 42 357 72

+

357 72 327 42 336 51 331 46

+

340 55 358 73 335 50 326 41 355 70 353 68

+

343 58 341 56 353 68 313 28 305 20

+

364 79 343 58 369 84 376 91 349 64 366 81

+
+ + + +

378 98 379 99 380 100 381 101 382 102 383 103 384 104 385 105 386 106 387 107 388 108 389 109

+

390 110 391 111 392 112 393 113 394 114 395 115 396 116 397 117 398 118 399 119 400 120 401 121

+

402 122 403 123 404 124 405 125

+

406 126 407 127 408 128 409 129

+

410 130 411 131 412 132 413 133

+

414 134 415 135 416 136 417 137

+

418 138 419 139 420 140 421 141

+

422 142 423 143 424 144 425 145

+

426 146 427 147 428 148 429 149

+

430 150 431 151 432 152 433 153

+

434 154 435 155 436 156 437 157

+

438 158 439 159 440 160 441 161

+

442 162 443 163 444 164 445 165

+

446 166 447 167 448 168 449 169

+
+ + + +

450 170 451 171 452 172 453 173

+

454 174 455 175 456 176 457 177 458 178 459 179

+

460 180 461 181 462 182 463 183

+

464 184 465 185 466 186 467 187

+

468 188 469 189 470 190 471 191 472 192 473 193

+

474 194 475 195 476 196 477 197 478 198 479 199

+

480 200 481 201 482 202 483 203

+

484 204 485 205 486 206 487 207

+

488 208 489 209 490 210 491 211 492 212 493 213

+

494 214 495 215 496 216 497 217

+
+ + + +

498 218 499 219 500 220 501 221 502 222 503 223 504 224 505 225 506 226 507 227

+

508 228 509 229 510 230 511 231 512 232 513 233 514 234 515 235 516 236 517 237

+

518 238 519 239 520 240 521 241

+

522 242 523 243 524 244 525 245

+

526 246 527 247 528 248 529 249

+

530 250 531 251 532 252 533 253

+

534 254 535 255 536 256 537 257

+

538 258 539 259 540 260 541 261

+

542 262 543 263 544 264 545 265

+

546 266 547 267 548 268 549 269

+

550 270 551 271 552 272 553 273

+

554 274 555 275 556 276 557 277

+
+ + + +

558 278 559 279 560 280 561 281 562 282 563 283 564 284 565 285 566 286 567 287

+

568 288 569 289 570 290 571 291 572 292 573 293 574 294 575 295 576 296 577 297

+

578 298 579 299 580 300 581 301

+

582 302 583 303 584 304 585 305

+

586 306 587 307 588 308 589 309

+

590 310 591 311 592 312 593 313

+

594 314 595 315 596 316 597 317

+

598 318 599 319 600 320 601 321

+

602 322 603 323 604 324 605 325

+

606 326 607 327 608 328 609 329

+

610 330 611 331 612 332 613 333

+

614 334 615 335 616 336 617 337

+
+ + + +

618 338 619 339 620 340 621 341 622 342 623 343 624 344 625 345 626 346 627 347 628 348 629 349 630 350 631 351 632 352 633 353

+

634 354 635 355 636 356 637 357 638 358 639 359 640 360 641 361 642 362 643 363 644 364 645 365 646 366 647 367 648 368 649 369

+

650 370 651 371 652 372 653 373

+

654 374 655 375 656 376 657 377

+

658 378 659 379 660 380 661 381

+

662 382 663 383 664 384 665 385

+

666 386 667 387 668 388 669 389

+

670 390 671 391 672 392 673 393

+

674 394 675 395 676 396 677 397

+

678 398 679 399 680 400 681 401

+

682 402 683 403 684 404 685 405

+

686 406 687 407 688 408 689 409

+

690 410 691 411 692 412 693 413

+

694 414 695 415 696 416 697 417

+

698 418 699 419 700 420 701 421

+

702 422 703 423 704 424 705 425

+

706 426 707 427 708 428 709 429

+

710 430 711 431 712 432 713 433

+
+ + + +

714 434 715 435 716 436 717 437

+

718 438 719 439 720 440 721 441

+

722 442 723 443 724 444 725 445

+

726 446 727 447 728 448 729 449 730 450 731 451 732 452 733 453

+

734 454 735 455 736 456 737 457

+

738 458 739 459 740 460 741 461

+

742 462 743 463 744 464 745 465

+

746 466 747 467 748 468 749 469

+

750 470 751 471 752 472 753 473 754 474 755 475 756 476 757 477

+

758 478 759 479 760 480 761 481

+
+ + + +

834 569 833 569 829 569 775 569 831 569 837 569

+

836 569 830 569 773 569 827 569 832 569 835 569

+

801 569 836 569 835 569 838 569

+

845 569 801 569 838 569 807 569

+

847 569 845 569 807 569 842 569

+

848 569 847 569 842 569 844 569

+

821 569 848 569 844 569 843 569

+

846 569 821 569 843 569 841 569

+

840 569 846 569 841 569 839 569

+

837 569 840 569 839 569 834 569

+
+ + + +

837 557 791 511 797 517 840 560

+

840 560 797 517 817 537 846 566

+

819 539 821 541 846 566 817 537

+

812 532 810 530 843 563 844 564

+

844 564 842 562 808 528 812 532

+

824 544 813 533 809 529 822 542

+

809 529 803 523 814 534 822 542

+

842 562 806 526 802 522 808 528

+

806 526 838 558 792 512 802 522

+

803 523 793 513 798 518 814 534

+

788 508 798 518 793 513 787 507

+

838 558 835 555 786 506 792 512

+

835 555 832 552 780 500 786 506

+

832 552 827 547 766 486 780 500

+

772 492 770 490 765 485 826 546

+

830 550 778 498 770 490 772 492

+

771 491 779 499 788 508 787 507 781 501 767 487

+

836 556 789 509 778 498 830 550

+

789 509 836 556 801 521 799 519

+

799 519 801 521 845 565 815 535

+

815 535 845 565 847 567 823 543

+

823 543 847 567 848 568 825 545

+

825 545 848 568 821 541 819 539

+

824 544 818 538 811 531 813 533

+

805 525 811 531 818 538 816 536

+

810 530 804 524 841 561 843 563

+

839 559 841 561 804 524 794 514

+

795 515 805 525 816 536 796 516

+

790 510 785 505 795 515 796 516

+

794 514 784 504 834 554 839 559

+

833 553 834 554 784 504 782 502

+

829 549 833 553 782 502 763 483

+

774 494 828 548 762 482 768 488

+

769 489 764 484 783 503 785 505 790 510 777 497

+

831 551 776 496 791 511 837 557

+

776 496 831 551 774 494 768 488

+
+ + + +

867 593 871 593 869 593 850 593 852 593 853 593 850 593 853 593 860 593

+
+ + + +

860 593 867 593 869 593 850 593

+
+ + + +

865 586 870 591 867 588 853 574 852 573 857 578

+
+ + + +

866 587 864 585 869 590 871 592

+

867 588 860 581 862 583 865 586

+

860 581 853 574 857 578 862 583

+

856 577 854 575 859 580 861 582

+

861 582 859 580 864 585 866 587

+

863 584 858 579 855 576 850 571 868 589

+

851 572 849 570 854 575 856 577

+
+ + + +

872 594 873 595 874 596 875 597 876 598 877 599 878 600 879 601 880 602 881 603 882 604

+

883 605 884 606 885 607 886 608 887 609 888 610 889 611 890 612 891 613 892 614 893 615

+

894 616 895 617 896 618 897 619

+

898 620 899 621 900 622 901 623

+

902 624 903 625 904 626 905 627

+

906 628 907 629 908 630 909 631

+

910 632 911 633 912 634 913 635

+

914 636 915 637 916 638 917 639

+

918 640 919 641 920 642 921 643

+

922 644 923 645 924 646 925 647

+

926 648 927 649 928 650 929 651

+

930 652 931 653 932 654 933 655

+

934 656 935 657 936 658 937 659

+
+ + + +

1004 754 1007 754 967 754 967 754 1001 754 1004 754

+
+ + + +

967 754 995 754 998 754 960 754 1001 754

+
+ + + +

1005 755 971 755 1003 755 1005 755 1003 755 1002 755

+
+ + + +

1002 755 963 755 1000 755 996 755 1005 755

+
+ + + +

986 756 1015 756 1019 756 1023 756

+

984 756 1022 756 1018 756 1014 756

+

986 756 1027 756 1029 756 1031 756 990 756 1026 756 984 756 1014 756 977 756 979 756 1015 756

+

979 756 977 756 1010 756 1011 756

+

1010 756 1007 756 971 756 1011 756

+
+ + + +

1009 757 1005 757 996 757 957 757 994 757 992 757 991 757 993 757 954 757 995 757 967 757 1008 757

+

973 757 975 757 1009 757 1008 757

+

982 757 1021 757 1017 757 1013 757

+

980 757 1024 757 1028 757 1030 757 988 757 1025 757 982 757 1013 757 975 757 973 757 1012 757

+

980 757 1012 757 1016 757 1020 757

+
+ + + +

1005 727 1009 731 1011 733 971 693

+

1009 731 975 697 978 700 1011 733

+

975 697 1013 735 1015 737 978 700

+

1013 735 1017 739 1019 741 1015 737

+

1017 739 1021 743 1023 745 1019 741

+

982 704 986 708 1023 745 1021 743

+

1025 747 1027 749 986 708 982 704

+

988 710 1029 751 1027 749 1025 747

+

1030 752 1031 753 1029 751 988 710

+

1028 750 990 712 1031 753 1030 752

+

1008 730 967 689 1007 729 1010 732

+

973 695 1008 730 1010 732 976 698

+

1012 734 973 695 976 698 1014 736

+

1016 738 1012 734 1014 736 1018 740

+

1018 740 1022 744 1020 742 1016 738

+

1020 742 1022 744 984 706 980 702

+

980 702 984 706 1026 748 1024 746

+

1024 746 1026 748 990 712 1028 750

+
+ + + +

1005 727 1009 731 1011 733 971 693

+

1009 731 975 697 978 700 1011 733

+

975 697 1013 735 1015 737 978 700

+

1013 735 1017 739 1019 741 1015 737

+

1017 739 1021 743 1023 745 1019 741

+

982 704 986 708 1023 745 1021 743

+

1025 747 1027 749 986 708 982 704

+

988 710 1029 751 1027 749 1025 747

+

1030 752 1031 753 1029 751 988 710

+

1028 750 990 712 1031 753 1030 752

+

1008 730 967 689 1007 729 1010 732

+

973 695 1008 730 1010 732 976 698

+

1012 734 973 695 976 698 1014 736

+

1016 738 1012 734 1014 736 1018 740

+

1018 740 1022 744 1020 742 1016 738

+

1020 742 1022 744 984 706 980 702

+

980 702 984 706 1026 748 1024 746

+

1024 746 1026 748 990 712 1028 750

+

952 674 946 668 997 719 995 717

+

993 715 942 664 946 668 952 674

+

991 713 938 660 942 664 993 715

+

938 660 991 713 992 714 940 662

+

994 716 944 666 940 662 992 714

+

996 718 999 721 948 670 955 677

+

955 677 948 670 944 666 994 716

+

945 667 949 671 1000 722 962 684 959 681 998 720 947 669 943 665 939 661 941 663

+

970 692 1006 728 1004 726 1003 725

+

1003 725 1004 726 1001 723 1002 724

+

1002 724 1001 723 960 682 963 685

+
+ + + +

1065 791 1050 791 1042 791

+
+ + + +

1042 791 1061 791 1034 791 1065 791

+
+ + + +

1059 792 1064 792 1047 792

+
+ + + +

1047 792 1066 792 1065 792 1034 792 1059 792

+
+ + + +

1065 793 1066 793 1045 793 1058 793 1057 793 1036 793

+
+ + + +

1036 793 1051 793 1050 793 1065 793 1045 793 1058 793

+
+ + + +

1042 794 1045 794 1066 794

+
+ + + +

1066 794 1047 794 1061 794 1042 794

+
+ + + +

1055 781 1052 778 1056 782

+
+ + + +

1054 780 1039 765 1057 783 1058 784

+

1058 784 1045 771 1042 768 1054 780

+

1040 766 1050 776 1051 777 1053 779

+

1053 779 1051 777 1035 761 1037 763

+
+ + + +

1055 781 1052 778 1056 782 1063 789 1059 785 1048 774

+
+ + + +

1054 780 1039 765 1057 783 1058 784

+

1058 784 1045 771 1042 768 1054 780

+

1040 766 1050 776 1051 777 1053 779

+

1053 779 1051 777 1035 761 1037 763

+

1062 788 1064 790 1049 775 1061 787

+

1048 774 1059 785 1033 759 1060 786

+
+ + + +

1087 818 1089 818 1085 818 1087 818 1085 818 1078 818 1071 818 1070 818 1068 818

+
+ + + +

1068 818 1087 818 1078 818 1071 818

+
+ + + +

1085 813 1088 816 1083 811 1075 803 1070 798 1071 799

+
+ + + +

1071 799 1078 806 1080 808 1075 803

+

1078 806 1085 813 1083 811 1080 808

+

1073 801 1076 804 1081 809 1086 814 1068 796

+

1089 817 1087 815 1082 810 1084 812

+

1084 812 1082 810 1077 805 1079 807

+

1079 807 1077 805 1072 800 1074 802

+

1074 802 1072 800 1067 795 1069 797

+
+ + + +

1119 849 1110 849 1107 849 1104 849 1113 849 1118 849 1104 849 1118 849 1117 849 1107 849 1104 849 1117 849 1107 849 1117 849 1119 849

+
+ + + +

1115 850 1101 850 1092 850 1095 850 1098 850 1116 850 1095 850 1116 850 1114 850 1092 850 1095 850 1114 850 1092 850 1114 850 1115 850

+
+ + + +

1117 846 1114 843 1116 845 1119 848

+

1119 848 1116 845 1098 827 1109 838

+

1108 837 1097 826 1095 824 1106 835

+

1105 834 1094 823 1091 820 1102 831

+

1103 832 1092 821 1100 829 1111 840

+

1112 841 1101 830 1115 844 1118 847

+

1118 847 1115 844 1114 843 1117 846

+
+ + + +

1151 886 1123 886 1155 886

+
+ + + +

1155 886 1126 886 1135 886 1151 886

+
+ + + +

1139 887 1154 887 1149 887

+
+ + + +

1149 887 1126 887 1155 887 1156 887 1139 887

+
+ + + +

1144 888 1131 888 1148 888 1152 888 1156 888 1155 888

+
+ + + +

1155 888 1123 888 1142 888 1144 888 1148 888 1152 888

+
+ + + +

1156 889 1152 889 1151 889

+
+ + + +

1151 889 1135 889 1139 889 1156 889

+
+ + + +

1130 861 1144 875 1147 878

+
+ + + +

1148 879 1131 862 1128 859 1146 877

+

1146 877 1151 882 1152 883 1148 879

+

1145 876 1142 873 1120 851 1150 881

+

1127 858 1143 874 1142 873 1145 876

+
+ + + +

1130 861 1144 875 1147 878 1140 871 1149 880 1153 884

+
+ + + +

1148 879 1131 862 1128 859 1146 877

+

1146 877 1151 882 1152 883 1148 879

+

1145 876 1142 873 1120 851 1150 881

+

1127 858 1143 874 1142 873 1145 876

+

1134 865 1141 872 1154 885 1138 869

+

1133 864 1125 856 1149 880 1140 871

+
+ + + +

1157 890 1158 891 1159 892 1160 893 1161 894 1162 895 1163 896 1164 897 1165 898 1166 899 1167 900 1168 901 1169 902 1170 903 1171 904 1172 905

+

1173 906 1174 907 1175 908 1176 909 1177 910 1178 911 1179 912 1180 913 1181 914 1182 915 1183 916 1184 917 1185 918 1186 919 1187 920 1188 921

+

1189 922 1190 923 1191 924 1192 925

+

1193 926 1194 927 1195 928 1196 929

+

1197 930 1198 931 1199 932 1200 933

+

1201 934 1202 935 1203 936 1204 937

+

1205 938 1206 939 1207 940 1208 941

+

1209 942 1210 943 1211 944 1212 945

+

1213 946 1214 947 1215 948 1216 949

+

1217 950 1218 951 1219 952 1220 953

+

1221 954 1222 955 1223 956 1224 957

+

1225 958 1226 959 1227 960 1228 961

+

1229 962 1230 963 1231 964 1232 965

+

1233 966 1234 967 1235 968 1236 969

+

1237 970 1238 971 1239 972 1240 973

+

1241 974 1242 975 1243 976 1244 977

+

1245 978 1246 979 1247 980 1248 981

+

1249 982 1250 983 1251 984 1252 985

+
+ + + +

1386 1118 1392 1118 1389 1118 1294 1118 1296 1118 1288 1118

+
+ + + +

1288 1118 1286 1118 1258 1118 1294 1118

+

1386 1118 1333 1118 1345 1118 1337 1118 1392 1118

+

1294 1118 1386 1118 1389 1118 1296 1118

+
+ + + +

1291 1119 1287 1119 1295 1119 1385 1119 1388 1119 1391 1119

+
+ + + +

1391 1119 1336 1119 1343 1119 1330 1119 1385 1119

+

1291 1119 1255 1119 1284 1119 1287 1119

+

1385 1119 1291 1119 1295 1119 1388 1119

+
+ + + +

1299 1120 1387 1120 1388 1120 1389 1120 1390 1120 1300 1120

+
+ + + +

1295 1120 1296 1120 1297 1120 1299 1120 1388 1120

+

1296 1120 1389 1120 1300 1120 1297 1120

+
+ + + +

1304 1121 1390 1121 1389 1121

+
+ + + +

1389 1121 1392 1121 1316 1121 1304 1121

+
+ + + +

1388 1122 1387 1122 1303 1122

+
+ + + +

1388 1122 1303 1122 1317 1122 1391 1122

+
+ + + +

1329 1123 1335 1123 1333 1123 1314 1123 1322 1123 1386 1123 1385 1123 1315 1123 1309 1123 1385 1123 1323 1123 1315 1123 1330 1123 1332 1123 1328 1123

+
+ + + +

1329 1123 1333 1123 1386 1123 1322 1123

+

1309 1123 1314 1123 1386 1123 1385 1123

+

1385 1123 1330 1123 1328 1123 1323 1123

+
+ + + +

1294 1124 1279 1124 1282 1124

+
+ + + +

1294 1124 1282 1124 1278 1124 1291 1124 1385 1124 1386 1124

+
+ + + +

1277 1125 1279 1125 1294 1125 1294 1125 1267 1125 1277 1125

+
+ + + +

1271 1125 1277 1125 1267 1125 1270 1125

+
+ + + +

1275 1126 1268 1126 1291 1126 1291 1126 1278 1126 1275 1126

+
+ + + +

1270 1126 1268 1126 1275 1126 1273 1126

+
+ + + +

1387 1127 1299 1127 1302 1127

+
+ + + +

1302 1127 1306 1127 1303 1127 1387 1127

+
+ + + +

1301 1128 1300 1128 1390 1128

+
+ + + +

1390 1128 1304 1128 1305 1128 1301 1128

+
+ + + +

1316 1129 1392 1129 1337 1129 1336 1129 1391 1129 1317 1129

+
+ + + +

1384 1129 1380 1129 1366 1129 1356 1129 1336 1129 1317 1129 1306 1129 1302 1129 1298 1129 1301 1129 1305 1129 1316 1129 1337 1129 1357 1129 1367 1129 1379 1129

+
+ + + +

1347 1130 1354 1130 1358 1130 1345 1130

+

1368 1130 1358 1130 1354 1130 1364 1130

+

1343 1130 1359 1130 1355 1130 1349 1130

+

1365 1130 1355 1130 1359 1130 1369 1130

+

1369 1130 1382 1130 1375 1130 1365 1130

+

1382 1130 1383 1130 1378 1130 1375 1130

+

1374 1130 1378 1130 1383 1130 1381 1130

+

1364 1130 1374 1130 1381 1130 1368 1130

+
+ + + +

1271 1004 1270 1003 1272 1005

+
+ + + +

1278 1011 1282 1015 1280 1013 1274 1007

+

1279 1012 1276 1009 1280 1013 1282 1015

+

1281 1014 1277 1010 1271 1004 1273 1006 1275 1008

+
+ + + +

1271 1004 1270 1003 1272 1005 1268 1001 1265 998 1290 1023 1265 998 1263 996 1289 1022 1291 1024 1264 997 1254 987 1292 1025 1260 993 1266 999 1293 1026 1266 999 1267 1000 1294 1027 1257 990 1261 994

+
+ + + +

1278 1011 1282 1015 1280 1013 1274 1007

+

1279 1012 1276 1009 1280 1013 1282 1015

+

1281 1014 1277 1010 1271 1004 1273 1006 1275 1008

+

1287 1020 1288 1021 1296 1029 1295 1028

+

1288 1021 1287 1020 1284 1017 1286 1019

+

1285 1018 1283 1016 1255 988 1258 991

+

1267 1000 1266 999 1259 992 1256 989 1253 986 1262 995 1265 998 1268 1001 1269 1002

+
+ + + +

1271 1131 1270 1131 1273 1131 1268 1131 1265 1131 1291 1131 1265 1131 1264 1131 1291 1131 1291 1131 1264 1131 1255 1131 1294 1131 1261 1131 1266 1131 1294 1131 1266 1131 1267 1131 1294 1131 1258 1131 1261 1131 1306 1131 1317 1131 1303 1131

+
+ + + +

1278 1131 1282 1131 1281 1131 1275 1131

+

1279 1131 1277 1131 1281 1131 1282 1131

+

1281 1131 1277 1131 1271 1131 1273 1131 1275 1131

+

1287 1131 1288 1131 1296 1131 1295 1131

+

1288 1131 1287 1131 1284 1131 1286 1131

+

1286 1131 1284 1131 1255 1131 1258 1131

+

1267 1131 1266 1131 1261 1131 1258 1131 1255 1131 1264 1131 1265 1131 1268 1131 1270 1131

+
+ + + +

1271 1132 1270 1132 1273 1132 1268 1132 1265 1132 1291 1132 1265 1132 1264 1132 1291 1132 1291 1132 1264 1132 1255 1132 1294 1132 1261 1132 1266 1132 1294 1132 1266 1132 1267 1132 1294 1132 1258 1132 1261 1132 1306 1132 1317 1132 1303 1132 1304 1132 1316 1132 1305 1132

+
+ + + +

1278 1132 1282 1132 1281 1132 1275 1132

+

1279 1132 1277 1132 1281 1132 1282 1132

+

1281 1132 1277 1132 1271 1132 1273 1132 1275 1132

+

1287 1132 1288 1132 1296 1132 1295 1132

+

1288 1132 1287 1132 1284 1132 1286 1132

+

1286 1132 1284 1132 1255 1132 1258 1132

+

1267 1132 1266 1132 1261 1132 1258 1132 1255 1132 1264 1132 1265 1132 1268 1132 1270 1132

+
+ + + +

1271 1004 1270 1003 1272 1005 1268 1001 1265 998 1290 1023 1265 998 1263 996 1289 1022 1291 1024 1264 997 1254 987 1292 1025 1260 993 1266 999 1293 1026 1266 999 1267 1000 1294 1027 1257 990 1261 994 1306 1039 1317 1050 1303 1036 1304 1037 1316 1049 1305 1038

+
+ + + +

1278 1011 1282 1015 1280 1013 1274 1007

+

1279 1012 1276 1009 1280 1013 1282 1015

+

1281 1014 1277 1010 1271 1004 1273 1006 1275 1008

+

1287 1020 1288 1021 1296 1029 1295 1028

+

1288 1021 1287 1020 1284 1017 1286 1019

+

1285 1018 1283 1016 1255 988 1258 991

+

1267 1000 1266 999 1259 992 1256 989 1253 986 1262 995 1265 998 1268 1001 1269 1002

+

1337 1070 1344 1077 1358 1091 1357 1090

+

1357 1090 1358 1091 1368 1101 1367 1100

+

1367 1100 1368 1101 1381 1114 1379 1112

+

1383 1116 1384 1117 1379 1112 1381 1114

+

1382 1115 1380 1113 1384 1117 1383 1116

+

1380 1113 1382 1115 1369 1102 1366 1099

+

1366 1099 1369 1102 1359 1092 1356 1089

+

1356 1089 1359 1092 1342 1075 1336 1069

+
+ + + +

1271 1004 1270 1003 1272 1005 1268 1001 1265 998 1290 1023 1265 998 1263 996 1289 1022 1291 1024 1264 997 1254 987 1292 1025 1260 993 1266 999 1293 1026 1266 999 1267 1000 1294 1027 1257 990 1261 994 1306 1039 1317 1050 1303 1036 1304 1037 1316 1049 1305 1038

+
+ + + +

1278 1011 1282 1015 1280 1013 1274 1007

+

1279 1012 1276 1009 1280 1013 1282 1015

+

1281 1014 1277 1010 1271 1004 1273 1006 1275 1008

+

1287 1020 1288 1021 1296 1029 1295 1028

+

1288 1021 1287 1020 1284 1017 1286 1019

+

1285 1018 1283 1016 1255 988 1258 991

+

1267 1000 1266 999 1259 992 1256 989 1253 986 1262 995 1265 998 1268 1001 1269 1002

+

1337 1070 1344 1077 1358 1091 1357 1090

+

1357 1090 1358 1091 1368 1101 1367 1100

+

1367 1100 1368 1101 1381 1114 1379 1112

+

1383 1116 1384 1117 1379 1112 1381 1114

+

1382 1115 1380 1113 1384 1117 1383 1116

+

1380 1113 1382 1115 1369 1102 1366 1099

+

1366 1099 1369 1102 1359 1092 1356 1089

+

1356 1089 1359 1092 1342 1075 1336 1069

+

1330 1063 1343 1076 1349 1082 1331 1064

+

1375 1108 1372 1105 1362 1095 1365 1098

+

1365 1098 1362 1095 1352 1085 1355 1088

+

1355 1088 1352 1085 1341 1074 1348 1081

+

1348 1081 1341 1074 1327 1060 1328 1061 1332 1065

+

1327 1060 1321 1054 1323 1056 1328 1061

+

1321 1054 1313 1046 1315 1048 1323 1056

+

1313 1046 1308 1041 1309 1042 1315 1048

+

1308 1041 1311 1044 1314 1047 1309 1042

+

1311 1044 1319 1052 1322 1055 1314 1047

+

1361 1094 1351 1084 1339 1072 1324 1057 1318 1051 1310 1043 1307 1040 1312 1045 1320 1053 1326 1059 1340 1073 1353 1086 1363 1096 1373 1106 1377 1110 1371 1104

+

1319 1052 1325 1058 1329 1062 1322 1055

+

1334 1067 1347 1080 1345 1078 1333 1066

+

1346 1079 1335 1068 1329 1062 1325 1058 1338 1071

+

1346 1079 1338 1071 1350 1083 1354 1087

+

1354 1087 1350 1083 1360 1093 1364 1097

+

1364 1097 1360 1093 1370 1103 1374 1107

+

1374 1107 1370 1103 1376 1109 1378 1111

+

1378 1111 1376 1109 1372 1105 1375 1108

+
+ + + +

1271 1004 1270 1003 1272 1005 1268 1001 1265 998 1290 1023 1265 998 1263 996 1289 1022 1291 1024 1264 997 1254 987 1292 1025 1260 993 1266 999 1293 1026 1266 999 1267 1000 1294 1027 1257 990 1261 994 1306 1039 1317 1050 1303 1036 1304 1037 1316 1049 1305 1038

+
+ + + +

1278 1011 1282 1015 1280 1013 1274 1007

+

1279 1012 1276 1009 1280 1013 1282 1015

+

1281 1014 1277 1010 1271 1004 1273 1006 1275 1008

+

1287 1020 1288 1021 1296 1029 1295 1028

+

1288 1021 1287 1020 1284 1017 1286 1019

+

1285 1018 1283 1016 1255 988 1258 991

+

1267 1000 1266 999 1259 992 1256 989 1253 986 1262 995 1265 998 1268 1001 1269 1002

+

1337 1070 1344 1077 1358 1091 1357 1090

+

1357 1090 1358 1091 1368 1101 1367 1100

+

1367 1100 1368 1101 1381 1114 1379 1112

+

1383 1116 1384 1117 1379 1112 1381 1114

+

1382 1115 1380 1113 1384 1117 1383 1116

+

1380 1113 1382 1115 1369 1102 1366 1099

+

1366 1099 1369 1102 1359 1092 1356 1089

+

1356 1089 1359 1092 1342 1075 1336 1069

+

1330 1063 1343 1076 1349 1082 1331 1064

+

1375 1108 1372 1105 1362 1095 1365 1098

+

1365 1098 1362 1095 1352 1085 1355 1088

+

1355 1088 1352 1085 1341 1074 1348 1081

+

1348 1081 1341 1074 1327 1060 1328 1061 1332 1065

+

1327 1060 1321 1054 1323 1056 1328 1061

+

1321 1054 1313 1046 1315 1048 1323 1056

+

1313 1046 1308 1041 1309 1042 1315 1048

+

1308 1041 1311 1044 1314 1047 1309 1042

+

1311 1044 1319 1052 1322 1055 1314 1047

+

1361 1094 1351 1084 1339 1072 1324 1057 1318 1051 1310 1043 1307 1040 1312 1045 1320 1053 1326 1059 1340 1073 1353 1086 1363 1096 1373 1106 1377 1110 1371 1104

+

1319 1052 1325 1058 1329 1062 1322 1055

+

1334 1067 1347 1080 1345 1078 1333 1066

+

1346 1079 1335 1068 1329 1062 1325 1058 1338 1071

+

1346 1079 1338 1071 1350 1083 1354 1087

+

1354 1087 1350 1083 1360 1093 1364 1097

+

1364 1097 1360 1093 1370 1103 1374 1107

+

1374 1107 1370 1103 1376 1109 1378 1111

+

1378 1111 1376 1109 1372 1105 1375 1108

+

1297 1030 1300 1033 1301 1034 1298 1031

+

1299 1032 1297 1030 1298 1031 1302 1035

+
+ + + +

1393 1133 1394 1134 1395 1135 1396 1136

+

1397 1137 1398 1138 1399 1139 1400 1140 1401 1141 1402 1142

+

1403 1143 1404 1144 1405 1145 1406 1146

+

1407 1147 1408 1148 1409 1149 1410 1150

+

1411 1151 1412 1152 1413 1153 1414 1154

+

1415 1155 1416 1156 1417 1157 1418 1158

+

1419 1159 1420 1160 1421 1161 1422 1162 1423 1163 1424 1164

+

1425 1165 1426 1166 1427 1167 1428 1168

+
+ + + +

1493 1272 1530 1272 1525 1272

+
+ + + +

1432 1272 1493 1272 1525 1272 1519 1272

+
+ + + +

1499 1273 1521 1273 1526 1273

+
+ + + +

1496 1273 1499 1273 1526 1273 1531 1273 1494 1273

+
+ + + +

1448 1274 1529 1274 1527 1274

+
+ + + +

1523 1274 1430 1274 1448 1274 1527 1274

+
+ + + +

1446 1275 1486 1275 1487 1275

+
+ + + +

1494 1275 1531 1275 1529 1275 1448 1275

+

1494 1275 1448 1275 1446 1275 1487 1275

+
+ + + +

1480 1276 1486 1276 1446 1276 1444 1276 1472 1276 1474 1276

+
+ + + +

1446 1276 1444 1276 1474 1276 1480 1276

+
+ + + +

1479 1277 1473 1277 1445 1277 1445 1277 1485 1277 1479 1277

+
+ + + +

1470 1277 1442 1277 1445 1277 1473 1277

+
+ + + +

1493 1278 1488 1278 1447 1278

+
+ + + +

1447 1278 1528 1278 1530 1278 1493 1278

+

1445 1278 1447 1278 1488 1278 1485 1278

+
+ + + +

1434 1279 1518 1279 1524 1279

+
+ + + +

1524 1279 1528 1279 1447 1279 1450 1279 1434 1279

+
+ + + +

1480 1220 1474 1214 1478 1218 1484 1224

+

1486 1226 1480 1220 1484 1224 1492 1232 1487 1227

+

1494 1234 1487 1227 1492 1232 1496 1236

+

1498 1238 1495 1235 1491 1231 1483 1223 1477 1217 1475 1215 1481 1221 1489 1229 1431 1171 1435 1175

+

1488 1228 1493 1233 1432 1172 1490 1230

+

1485 1225 1488 1228 1490 1230 1482 1222 1479 1219

+

1473 1213 1479 1219 1482 1222 1476 1216

+

1474 1214 1472 1212 1468 1208 1470 1210 1473 1213 1476 1216 1478 1218

+

1471 1211 1444 1184 1440 1180 1467 1207

+

1467 1207 1440 1180 1442 1182 1469 1209

+

1505 1245 1456 1196 1452 1192 1501 1241

+

1509 1249 1460 1200 1456 1196 1505 1245

+

1513 1253 1464 1204 1460 1200 1509 1249

+

1516 1256 1514 1254 1510 1250 1506 1246 1502 1242 1434 1174 1504 1244 1508 1248 1512 1252

+

1497 1237 1450 1190 1454 1194 1503 1243

+

1503 1243 1454 1194 1458 1198 1507 1247

+

1507 1247 1458 1198 1462 1202 1511 1251

+

1465 1205 1461 1201 1457 1197 1453 1193 1449 1189 1447 1187 1445 1185 1441 1181 1439 1179 1443 1183 1446 1186 1448 1188 1451 1191 1455 1195 1459 1199 1463 1203

+

1515 1255 1466 1206 1464 1204 1513 1253

+

1466 1206 1515 1255 1511 1251 1462 1202

+
+ + + +

1480 1220 1474 1214 1478 1218 1484 1224

+

1486 1226 1480 1220 1484 1224 1492 1232 1487 1227

+

1494 1234 1487 1227 1492 1232 1496 1236

+

1498 1238 1495 1235 1491 1231 1483 1223 1477 1217 1475 1215 1481 1221 1489 1229 1431 1171 1435 1175

+

1488 1228 1493 1233 1432 1172 1490 1230

+

1485 1225 1488 1228 1490 1230 1482 1222 1479 1219

+

1473 1213 1479 1219 1482 1222 1476 1216

+

1474 1214 1472 1212 1468 1208 1470 1210 1473 1213 1476 1216 1478 1218

+

1471 1211 1444 1184 1440 1180 1467 1207

+

1467 1207 1440 1180 1442 1182 1469 1209

+

1505 1245 1456 1196 1452 1192 1501 1241

+

1509 1249 1460 1200 1456 1196 1505 1245

+

1513 1253 1464 1204 1460 1200 1509 1249

+

1516 1256 1514 1254 1510 1250 1506 1246 1502 1242 1434 1174 1504 1244 1508 1248 1512 1252

+

1497 1237 1450 1190 1454 1194 1503 1243

+

1503 1243 1454 1194 1458 1198 1507 1247

+

1507 1247 1458 1198 1462 1202 1511 1251

+

1465 1205 1461 1201 1457 1197 1453 1193 1449 1189 1447 1187 1445 1185 1441 1181 1439 1179 1443 1183 1446 1186 1448 1188 1451 1191 1455 1195 1459 1199 1463 1203

+

1515 1255 1466 1206 1464 1204 1513 1253

+

1466 1206 1515 1255 1511 1251 1462 1202

+

1529 1269 1531 1271 1526 1266 1527 1267

+

1527 1267 1526 1266 1521 1261 1523 1263

+

1522 1262 1520 1260 1499 1239 1500 1240

+
+ + + +

1480 1220 1474 1214 1478 1218 1484 1224

+

1486 1226 1480 1220 1484 1224 1492 1232 1487 1227

+

1494 1234 1487 1227 1492 1232 1496 1236

+

1498 1238 1495 1235 1491 1231 1483 1223 1477 1217 1475 1215 1481 1221 1489 1229 1431 1171 1435 1175

+

1488 1228 1493 1233 1432 1172 1490 1230

+

1485 1225 1488 1228 1490 1230 1482 1222 1479 1219

+

1473 1213 1479 1219 1482 1222 1476 1216

+

1474 1214 1472 1212 1468 1208 1470 1210 1473 1213 1476 1216 1478 1218

+

1471 1211 1444 1184 1440 1180 1467 1207

+

1467 1207 1440 1180 1442 1182 1469 1209

+

1505 1245 1456 1196 1452 1192 1501 1241

+

1509 1249 1460 1200 1456 1196 1505 1245

+

1513 1253 1464 1204 1460 1200 1509 1249

+

1516 1256 1514 1254 1510 1250 1506 1246 1502 1242 1434 1174 1504 1244 1508 1248 1512 1252

+

1497 1237 1450 1190 1454 1194 1503 1243

+

1503 1243 1454 1194 1458 1198 1507 1247

+

1507 1247 1458 1198 1462 1202 1511 1251

+

1465 1205 1461 1201 1457 1197 1453 1193 1449 1189 1447 1187 1445 1185 1441 1181 1439 1179 1443 1183 1446 1186 1448 1188 1451 1191 1455 1195 1459 1199 1463 1203

+

1515 1255 1466 1206 1464 1204 1513 1253

+

1466 1206 1515 1255 1511 1251 1462 1202

+

1529 1269 1531 1271 1526 1266 1527 1267

+

1527 1267 1526 1266 1521 1261 1523 1263

+

1522 1262 1520 1260 1499 1239 1500 1240

+

1528 1268 1524 1264 1525 1265 1530 1270

+

1524 1264 1518 1258 1519 1259 1525 1265

+

1517 1257 1433 1173 1436 1176 1438 1178

+
+
+ + + CAT3DBagRep + + +
+ + + + 4.78369 93.4515 -106.5 8.83899 96.1612 -106.5 11.5486 100.216 -106.5 12.5001 105 -106.5 11.5486 109.784 -106.5 8.83899 113.839 -106.5 4.78369 116.549 -106.5 0.000122 117.5 -106.5 -4.78345 116.549 -106.5 -8.83875 113.839 -106.5 -11.5483 109.784 -106.5 -12.4999 105 -106.5 -11.5483 100.216 -106.5 -8.83875 96.1612 -106.5 -4.78345 93.4515 -106.5 0.000122 92.5 -106.5 0.000122 92.5 -117.5 -4.78345 93.4515 -117.5 -8.83875 96.1612 -117.5 -11.5483 100.216 -117.5 -12.4999 105 -117.5 -11.5483 109.784 -117.5 -8.83875 113.839 -117.5 -4.78345 116.549 -117.5 0.000122 117.5 -117.5 4.78369 116.549 -117.5 8.83899 113.839 -117.5 11.5486 109.784 -117.5 12.5001 105 -117.5 11.5486 100.216 -117.5 8.83899 96.1612 -117.5 4.78369 93.4515 -117.5 4.78369 93.4515 -106.5 4.78369 93.4515 -117.5 8.83899 96.1612 -117.5 8.83899 96.1612 -106.5 8.83899 96.1612 -106.5 8.83899 96.1612 -117.5 11.5486 100.216 -117.5 11.5486 100.216 -106.5 11.5486 100.216 -106.5 11.5486 100.216 -117.5 12.5001 105 -117.5 12.5001 105 -106.5 12.5001 105 -106.5 12.5001 105 -117.5 11.5486 109.784 -117.5 11.5486 109.784 -106.5 11.5486 109.784 -106.5 11.5486 109.784 -117.5 8.83899 113.839 -117.5 8.83899 113.839 -106.5 8.83899 113.839 -106.5 8.83899 113.839 -117.5 4.78369 116.549 -117.5 4.78369 116.549 -106.5 4.78369 116.549 -106.5 4.78369 116.549 -117.5 0.000122 117.5 -117.5 0.000122 117.5 -106.5 0.000122 117.5 -106.5 0.000122 117.5 -117.5 -4.78345 116.549 -117.5 -4.78345 116.549 -106.5 -4.78345 116.549 -106.5 -4.78345 116.549 -117.5 -8.83875 113.839 -117.5 -8.83875 113.839 -106.5 -8.83875 113.839 -106.5 -8.83875 113.839 -117.5 -11.5483 109.784 -117.5 -11.5483 109.784 -106.5 -11.5483 109.784 -106.5 -11.5483 109.784 -117.5 -12.4999 105 -117.5 -12.4999 105 -106.5 -12.4999 105 -106.5 -12.4999 105 -117.5 -11.5483 100.216 -117.5 -11.5483 100.216 -106.5 -11.5483 100.216 -106.5 -11.5483 100.216 -117.5 -8.83875 96.1612 -117.5 -8.83875 96.1612 -106.5 -8.83875 96.1612 -106.5 -8.83875 96.1612 -117.5 -4.78345 93.4515 -117.5 -4.78345 93.4515 -106.5 -4.78345 93.4515 -106.5 -4.78345 93.4515 -117.5 0.000122 92.5 -117.5 0.000122 92.5 -106.5 0.000122 92.5 -106.5 0.000122 92.5 -117.5 4.78369 93.4515 -117.5 4.78369 93.4515 -106.5 -25.9999 92 -106.5 -25.9999 92 -106.5 -25.9999 92 -84.8281 -25.9999 92 -84.8281 -25.9999 118 -106.5 -25.9999 118 -106.5 -25.9999 118 -84.8281 -25.9999 118 -84.8281 0.000122 92 -89.9999 0.000122 118 -89.9999 26.0001 92 -106.5 26.0001 92 -106.5 26.0001 92 -84.8281 26.0001 92 -84.8281 26.0001 118 -106.5 26.0001 118 -106.5 26.0001 118 -84.8281 26.0001 118 -84.8281 -34.4414 123 -83.149 -63.6395 123 -63.6395 -83.149 123 -34.4414 -89.9999 123 0.000122 -83.149 123 34.4417 -63.6395 123 63.6398 -34.4414 123 83.1493 0.000122 123 90.0001 34.4417 123 83.1493 63.6398 123 63.6398 83.1493 123 34.4417 90.0001 123 0.000122 83.1493 123 -34.4414 63.6398 123 -63.6395 34.4417 123 -83.149 0.000122 123 -89.9999 0.000122 91 -89.9999 34.4417 91 -83.149 63.6398 91 -63.6395 83.1493 91 -34.4414 90.0001 91 0.000122 83.1493 91 34.4417 63.6398 91 63.6398 34.4417 91 83.1493 0.000122 91 90.0001 -34.4414 91 83.1493 -63.6395 91 63.6398 -83.149 91 34.4417 -89.9999 91 0.000122 -83.149 91 -34.4414 -63.6395 91 -63.6395 -34.4414 91 -83.149 -34.4414 123 -83.149 -34.4414 91 -83.149 -63.6395 91 -63.6395 -63.6395 123 -63.6395 -63.6395 123 -63.6395 -63.6395 91 -63.6395 -83.149 91 -34.4414 -83.149 123 -34.4414 -83.149 123 -34.4414 -83.149 91 -34.4414 -89.9999 91 0.000122 -89.9999 123 0.000122 -89.9999 123 0.000122 -89.9999 91 0.000122 -83.149 91 34.4417 -83.149 123 34.4417 -83.149 123 34.4417 -83.149 91 34.4417 -63.6395 91 63.6398 -63.6395 123 63.6398 -63.6395 123 63.6398 -63.6395 91 63.6398 -34.4414 91 83.1493 -34.4414 123 83.1493 -34.4414 123 83.1493 -34.4414 91 83.1493 0.000122 91 90.0001 0.000122 123 90.0001 0.000122 123 90.0001 0.000122 91 90.0001 34.4417 91 83.1493 34.4417 123 83.1493 34.4417 123 83.1493 34.4417 91 83.1493 63.6398 91 63.6398 63.6398 123 63.6398 63.6398 123 63.6398 63.6398 91 63.6398 83.1493 91 34.4417 83.1493 123 34.4417 83.1493 123 34.4417 83.1493 91 34.4417 90.0001 91 0.000122 90.0001 123 0.000122 90.0001 123 0.000122 90.0001 91 0.000122 83.1493 91 -34.4414 83.1493 123 -34.4414 83.1493 123 -34.4414 83.1493 91 -34.4414 63.6398 91 -63.6395 63.6398 123 -63.6395 63.6398 123 -63.6395 63.6398 91 -63.6395 34.4417 91 -83.149 34.4417 123 -83.149 34.4417 123 -83.149 34.4417 91 -83.149 0.000122 91 -89.9999 0.000122 123 -89.9999 0.000122 123 -89.9999 0.000122 91 -89.9999 -34.4414 91 -83.149 -34.4414 123 -83.149 42.478 91 102.551 42.478 56 102.551 78.489 56 78.489 78.489 91 78.489 0.000122 91 111 0.000122 56 111 42.478 56 102.551 42.478 91 102.551 -42.4777 91 102.551 -42.4777 56 102.551 0.000122 56 111 0.000122 91 111 -78.4888 91 78.489 -78.4888 56 78.489 -42.4777 56 102.551 -42.4777 91 102.551 -102.551 91 42.478 -102.551 56 42.478 -78.4888 56 78.489 -78.4888 91 78.489 -111 91 0.000122 -111 56 0.000122 -102.551 56 42.478 -102.551 91 42.478 -102.551 91 -42.4778 -102.551 56 -42.4778 -111 56 0.000122 -111 91 0.000122 -78.4888 91 -78.4888 -78.4888 56 -78.4888 -102.551 56 -42.4778 -102.551 91 -42.4778 -42.4777 91 -102.551 -42.4777 56 -102.551 -78.4888 56 -78.4888 -78.4888 91 -78.4888 -42.4777 91 -102.551 -78.4888 91 -78.4888 -102.551 91 -42.4778 -111 91 0.000122 -102.551 91 42.478 -78.4888 91 78.489 -42.4777 91 102.551 0.000122 91 111 42.478 91 102.551 78.489 91 78.489 97.0001 91 50.7852 97.0001 91 -50.7849 78.489 91 -78.4888 42.478 91 -102.551 0.000122 91 -111 97.0001 91 50.7852 78.489 91 78.489 78.489 56 78.489 97.0001 56 50.7852 0.000122 56 -111 42.478 56 -102.551 78.489 56 -78.4888 97.0001 56 -50.7849 97.0001 56 50.7852 78.489 56 78.489 42.478 56 102.551 0.000122 56 111 -42.4777 56 102.551 -78.4888 56 78.489 -102.551 56 42.478 -111 56 0.000122 -102.551 56 -42.4778 -78.4888 56 -78.4888 -42.4777 56 -102.551 97.0001 56 50.7852 97.0001 56 -50.7849 97.0001 91 -50.7849 97.0001 91 50.7852 97.0001 91 -50.7849 97.0001 56 -50.7849 78.489 56 -78.4888 78.489 91 -78.4888 78.489 91 -78.4888 78.489 56 -78.4888 42.478 56 -102.551 42.478 91 -102.551 42.478 91 -102.551 42.478 56 -102.551 0.000122 56 -111 0.000122 91 -111 0.000122 91 -111 0.000122 56 -111 -42.4777 56 -102.551 -42.4777 91 -102.551 166.5 91.5 26.0001 166.5 91.5 -25.9999 192.5 91.5 -25.9999 192.5 91.5 26.0001 192.5 91.5 26.0001 192.5 103 26.0001 166.5 103 26.0001 166.5 91.5 26.0001 166.5 91.5 26.0001 166.5 103 26.0001 166.5 103 -25.9999 166.5 91.5 -25.9999 166.5 91.5 -25.9999 166.5 103 -25.9999 192.5 103 -25.9999 192.5 91.5 -25.9999 192.5 91.5 -25.9999 192.5 103 -25.9999 192.5 103 26.0001 192.5 91.5 26.0001 192.5 103 26.0001 192.5 103 -25.9999 166.5 103 -25.9999 166.5 103 26.0001 189.613 103 7.34741 183.363 103 11.8883 175.637 103 11.8883 169.387 103 7.34741 167 103 0.000122 169.387 103 -7.34717 175.637 103 -11.8881 183.363 103 -11.8881 189.613 103 -7.34717 192 103 0.000122 192 114 0.000122 189.613 114 -7.34717 183.363 114 -11.8881 175.637 114 -11.8881 169.387 114 -7.34717 167 114 0.000122 169.387 114 7.34741 175.637 114 11.8883 183.363 114 11.8883 189.613 114 7.34741 189.613 103 7.34741 189.613 114 7.34741 183.363 114 11.8883 183.363 103 11.8883 183.363 103 11.8883 183.363 114 11.8883 175.637 114 11.8883 175.637 103 11.8883 175.637 103 11.8883 175.637 114 11.8883 169.387 114 7.34741 169.387 103 7.34741 169.387 103 7.34741 169.387 114 7.34741 167 114 0.000122 167 103 0.000122 167 103 0.000122 167 114 0.000122 169.387 114 -7.34717 169.387 103 -7.34717 169.387 103 -7.34717 169.387 114 -7.34717 175.637 114 -11.8881 175.637 103 -11.8881 175.637 103 -11.8881 175.637 114 -11.8881 183.363 114 -11.8881 183.363 103 -11.8881 183.363 103 -11.8881 183.363 114 -11.8881 189.613 114 -7.34717 189.613 103 -7.34717 189.613 103 -7.34717 189.613 114 -7.34717 192 114 0.000122 192 103 0.000122 192 103 0.000122 192 114 0.000122 189.613 114 7.34741 189.613 103 7.34741 -42.4778 56 -102.551 -78.4888 56 -78.4888 -102.551 56 -42.4778 -111 56 0.000122 -102.551 56 42.478 -78.4888 56 78.489 -42.4778 56 102.551 0.000122 56 111 42.478 56 102.551 78.489 56 78.489 102.551 56 42.478 111 56 0.000122 102.551 56 -42.4778 78.489 56 -78.4888 42.478 56 -102.551 0.000122 56 -111 0.000122 0 -111 42.478 0 -102.551 78.489 0 -78.4888 102.551 0 -42.4778 111 0 0.000122 102.551 0 42.478 78.489 0 78.489 42.478 0 102.551 0.000122 0 111 -42.4778 0 102.551 -78.4888 0 78.489 -102.551 0 42.478 -111 0 0.000122 -102.551 0 -42.4778 -78.4888 0 -78.4888 -42.4778 0 -102.551 0.000122 56 -111 0.000122 0 -111 -42.4778 0 -102.551 -42.4778 56 -102.551 -42.4778 56 -102.551 -42.4778 0 -102.551 -78.4888 0 -78.4888 -78.4888 56 -78.4888 -78.4888 56 -78.4888 -78.4888 0 -78.4888 -102.551 0 -42.4778 -102.551 56 -42.4778 -102.551 56 -42.4778 -102.551 0 -42.4778 -111 0 0.000122 -111 56 0.000122 -111 56 0.000122 -111 0 0.000122 -102.551 0 42.478 -102.551 56 42.478 -102.551 56 42.478 -102.551 0 42.478 -78.4888 0 78.489 -78.4888 56 78.489 -78.4888 56 78.489 -78.4888 0 78.489 -42.4778 0 102.551 -42.4778 56 102.551 -42.4778 56 102.551 -42.4778 0 102.551 0.000122 0 111 0.000122 56 111 0.000122 56 111 0.000122 0 111 42.478 0 102.551 42.478 56 102.551 42.478 56 102.551 42.478 0 102.551 78.489 0 78.489 78.489 56 78.489 78.489 56 78.489 78.489 0 78.489 102.551 0 42.478 102.551 56 42.478 102.551 56 42.478 102.551 0 42.478 111 0 0.000122 111 56 0.000122 111 56 0.000122 111 0 0.000122 102.551 0 -42.4778 102.551 56 -42.4778 102.551 56 -42.4778 102.551 0 -42.4778 78.489 0 -78.4888 78.489 56 -78.4888 78.489 56 -78.4888 78.489 0 -78.4888 42.478 0 -102.551 42.478 56 -102.551 42.478 56 -102.551 42.478 0 -102.551 0.000122 0 -111 0.000122 56 -111 22.0044 -53.5 -53.1229 40.6588 -53.5 -40.6586 53.1232 -53.5 -22.0042 57.5001 -53.5 0.000122 53.1232 -53.5 22.0044 40.6588 -53.5 40.6588 22.0044 -53.5 53.1232 0.000122 -53.5 57.5001 -22.0042 -53.5 53.1232 -40.6586 -53.5 40.6588 -53.1229 -53.5 22.0044 -57.4999 -53.5 0.000122 -53.1229 -53.5 -22.0042 -40.6586 -53.5 -40.6586 -22.0042 -53.5 -53.1229 0.000122 -53.5 -57.4999 0.000122 0 -111 -42.4778 0 -102.551 -78.4888 0 -78.4888 -102.551 0 -42.4778 -111 0 0.000122 -102.551 0 42.478 -78.4888 0 78.489 -42.4778 0 102.551 0.000122 0 111 42.478 0 102.551 78.489 0 78.489 102.551 0 42.478 111 0 0.000122 102.551 0 -42.4778 78.489 0 -78.4888 42.478 0 -102.551 0.000122 -53.5 -57.4999 0.000122 0 -111 42.478 0 -102.551 22.0044 -53.5 -53.1229 22.0044 -53.5 -53.1229 42.478 0 -102.551 78.489 0 -78.4888 40.6588 -53.5 -40.6586 40.6588 -53.5 -40.6586 78.489 0 -78.4888 102.551 0 -42.4778 53.1232 -53.5 -22.0042 53.1232 -53.5 -22.0042 102.551 0 -42.4778 111 0 0.000122 57.5001 -53.5 0.000122 57.5001 -53.5 0.000122 111 0 0.000122 102.551 0 42.478 53.1232 -53.5 22.0044 53.1232 -53.5 22.0044 102.551 0 42.478 78.489 0 78.489 40.6588 -53.5 40.6588 40.6588 -53.5 40.6588 78.489 0 78.489 42.478 0 102.551 22.0044 -53.5 53.1232 22.0044 -53.5 53.1232 42.478 0 102.551 0.000122 0 111 0.000122 -53.5 57.5001 0.000122 -53.5 57.5001 0.000122 0 111 -42.4778 0 102.551 -22.0042 -53.5 53.1232 -22.0042 -53.5 53.1232 -42.4778 0 102.551 -78.4888 0 78.489 -40.6586 -53.5 40.6588 -40.6586 -53.5 40.6588 -78.4888 0 78.489 -102.551 0 42.478 -53.1229 -53.5 22.0044 -53.1229 -53.5 22.0044 -102.551 0 42.478 -111 0 0.000122 -57.4999 -53.5 0.000122 -57.4999 -53.5 0.000122 -111 0 0.000122 -102.551 0 -42.4778 -53.1229 -53.5 -22.0042 -53.1229 -53.5 -22.0042 -102.551 0 -42.4778 -78.4888 0 -78.4888 -40.6586 -53.5 -40.6586 -40.6586 -53.5 -40.6586 -78.4888 0 -78.4888 -42.4778 0 -102.551 -22.0042 -53.5 -53.1229 -22.0042 -53.5 -53.1229 -42.4778 0 -102.551 0.000122 0 -111 0.000122 -53.5 -57.4999 53.1232 -63 22.0044 40.6588 -63 40.6588 22.0044 -63 53.1232 0.000122 -63 57.5001 -22.0042 -63 53.1232 -40.6586 -63 40.6588 -53.1229 -63 22.0044 -57.4999 -63 0.000122 -53.1229 -63 -22.0042 -40.6586 -63 -40.6586 -22.0042 -63 -53.1229 0.000122 -63 -57.4999 22.0044 -63 -53.1229 40.6588 -63 -40.6586 53.1232 -63 -22.0042 57.5001 -63 0.000122 57.5001 -53.5 0.000122 53.1232 -53.5 -22.0042 40.6588 -53.5 -40.6586 22.0044 -53.5 -53.1229 0.000122 -53.5 -57.4999 -22.0042 -53.5 -53.1229 -40.6586 -53.5 -40.6586 -53.1229 -53.5 -22.0042 -57.4999 -53.5 0.000122 -53.1229 -53.5 22.0044 -40.6586 -53.5 40.6588 -22.0042 -53.5 53.1232 0.000122 -53.5 57.5001 22.0044 -53.5 53.1232 40.6588 -53.5 40.6588 53.1232 -53.5 22.0044 57.5001 -63 0.000122 57.5001 -53.5 0.000122 53.1232 -53.5 22.0044 53.1232 -63 22.0044 53.1232 -63 22.0044 53.1232 -53.5 22.0044 40.6588 -53.5 40.6588 40.6588 -63 40.6588 40.6588 -63 40.6588 40.6588 -53.5 40.6588 22.0044 -53.5 53.1232 22.0044 -63 53.1232 22.0044 -63 53.1232 22.0044 -53.5 53.1232 0.000122 -53.5 57.5001 0.000122 -63 57.5001 0.000122 -63 57.5001 0.000122 -53.5 57.5001 -22.0042 -53.5 53.1232 -22.0042 -63 53.1232 -22.0042 -63 53.1232 -22.0042 -53.5 53.1232 -40.6586 -53.5 40.6588 -40.6586 -63 40.6588 -40.6586 -63 40.6588 -40.6586 -53.5 40.6588 -53.1229 -53.5 22.0044 -53.1229 -63 22.0044 -53.1229 -63 22.0044 -53.1229 -53.5 22.0044 -57.4999 -53.5 0.000122 -57.4999 -63 0.000122 -57.4999 -63 0.000122 -57.4999 -53.5 0.000122 -53.1229 -53.5 -22.0042 -53.1229 -63 -22.0042 -53.1229 -63 -22.0042 -53.1229 -53.5 -22.0042 -40.6586 -53.5 -40.6586 -40.6586 -63 -40.6586 -40.6586 -63 -40.6586 -40.6586 -53.5 -40.6586 -22.0042 -53.5 -53.1229 -22.0042 -63 -53.1229 -22.0042 -63 -53.1229 -22.0042 -53.5 -53.1229 0.000122 -53.5 -57.4999 0.000122 -63 -57.4999 0.000122 -63 -57.4999 0.000122 -53.5 -57.4999 22.0044 -53.5 -53.1229 22.0044 -63 -53.1229 22.0044 -63 -53.1229 22.0044 -53.5 -53.1229 40.6588 -53.5 -40.6586 40.6588 -63 -40.6586 40.6588 -63 -40.6586 40.6588 -53.5 -40.6586 53.1232 -53.5 -22.0042 53.1232 -63 -22.0042 53.1232 -63 -22.0042 53.1232 -53.5 -22.0042 57.5001 -53.5 0.000122 57.5001 -63 0.000122 97.5001 28.7013 69.291 97.5001 53.033 53.0331 97.5001 69.291 28.7014 97.5001 75 0.000122 97.5001 69.291 -28.7012 97.5001 53.033 -53.0328 97.5001 28.7013 -69.2909 97.5001 0 -74.9999 97.5001 -28.7012 -69.2909 97.5001 -53.033 -53.033 97.5001 -69.291 -28.7012 97.5001 -75 0.000122 97.5001 -69.291 28.7014 97.5001 -53.033 53.0331 97.5001 -28.7013 69.291 97.5001 0 75.0001 97.5001 -69.291 -28.7012 110.5 -81.3014 -33.676 110.5 -88 0.000122 97.5001 -75 0.000122 97.5001 -75 0.000122 110.5 -88 0.000122 110.5 -81.3014 33.6763 97.5001 -69.291 28.7014 97.5001 -69.291 28.7014 110.5 -81.3014 33.6763 110.5 -62.2254 62.2256 97.5001 -53.033 53.0331 97.5001 -53.033 53.0331 110.5 -62.2254 62.2256 110.5 -33.6761 81.3015 97.5001 -28.7013 69.291 97.5001 -28.7013 69.291 110.5 -33.6761 81.3015 110.5 0 88.0001 97.5001 0 75.0001 97.5001 0 75.0001 110.5 0 88.0001 110.5 33.6761 81.3015 97.5001 28.7013 69.291 97.5001 28.7013 69.291 110.5 33.6761 81.3015 110.5 62.2254 62.2255 97.5001 53.033 53.0331 97.5001 53.033 53.0331 110.5 62.2254 62.2255 110.5 81.3014 33.6763 97.5001 69.291 28.7014 97.5001 69.291 28.7014 110.5 81.3014 33.6763 110.5 88 0.000122 97.5001 75 0.000122 97.5001 75 0.000122 110.5 88 0.000122 110.5 81.3014 -33.676 97.5001 69.291 -28.7012 97.5001 69.291 -28.7012 110.5 81.3014 -33.676 110.5 62.2254 -62.2252 97.5001 53.033 -53.0328 97.5001 53.033 -53.0328 110.5 62.2254 -62.2252 110.5 33.6762 -81.3013 97.5001 28.7013 -69.2909 97.5001 28.7013 -69.2909 110.5 33.6762 -81.3013 110.5 0 -87.9999 97.5001 0 -74.9999 97.5001 0 -74.9999 110.5 0 -87.9999 110.5 -33.6761 -81.3013 97.5001 -28.7012 -69.2909 97.5001 -28.7012 -69.2909 110.5 -33.6761 -81.3013 110.5 -62.2254 -62.2253 97.5001 -53.033 -53.033 97.5001 -53.033 -53.033 110.5 -62.2254 -62.2253 110.5 -81.3014 -33.676 97.5001 -69.291 -28.7012 193 -81.3014 -33.676 110.5 -81.3014 -33.676 110.5 -62.2254 -62.2253 193 -62.2254 -62.2253 193 -62.2254 -62.2253 110.5 -62.2254 -62.2253 110.5 -33.6761 -81.3013 193 -33.6761 -81.3013 193 -33.6761 -81.3013 110.5 -33.6761 -81.3013 110.5 0 -87.9999 193 0 -87.9999 193 0 -87.9999 110.5 0 -87.9999 110.5 33.6762 -81.3013 193 33.6762 -81.3013 193 33.6762 -81.3013 110.5 33.6762 -81.3013 110.5 62.2254 -62.2252 193 62.2254 -62.2252 193 62.2254 -62.2252 110.5 62.2254 -62.2252 110.5 81.3014 -33.676 193 81.3014 -33.676 193 81.3014 -33.676 110.5 81.3014 -33.676 110.5 88 0.000122 193 88 0.000122 193 88 0.000122 110.5 88 0.000122 110.5 81.3014 33.6763 193 81.3014 33.6763 193 81.3014 33.6763 110.5 81.3014 33.6763 110.5 62.2254 62.2255 193 62.2254 62.2255 193 62.2254 62.2255 110.5 62.2254 62.2255 110.5 33.6761 81.3015 193 33.6761 81.3015 193 33.6761 81.3015 110.5 33.6761 81.3015 110.5 0 88.0001 193 0 88.0001 193 0 88.0001 110.5 0 88.0001 110.5 -33.6761 81.3015 193 -33.6762 81.3015 193 -33.6762 81.3015 110.5 -33.6761 81.3015 110.5 -62.2254 62.2256 193 -62.2254 62.2255 193 -62.2254 62.2255 110.5 -62.2254 62.2256 110.5 -81.3014 33.6763 193 -81.3014 33.6763 193 -81.3014 33.6763 110.5 -81.3014 33.6763 110.5 -88 0.000122 193 -88 0.000122 193 -88 0.000122 110.5 -88 0.000122 110.5 -81.3014 -33.676 193 -81.3014 -33.676 110.5 -62.2254 -62.2253 110.5 -62.2254 -62.2253 110.5 -33.6761 -81.3013 110.5 -33.6761 -81.3013 110.5 0 -87.9999 110.5 0 -87.9999 110.5 33.6762 -81.3013 110.5 33.6762 -81.3013 110.5 62.2254 -62.2252 110.5 62.2254 -62.2252 114.5 0 -91.9999 115.637 -35.6421 -86.0476 115.637 -35.6421 -86.0476 115.637 35.6421 -86.0476 115.637 35.6421 -86.0476 120.269 -29 -91.9999 120.269 -29 -91.9999 120.269 29 -91.9999 120.269 29 -91.9999 193 29 -91.9999 193 29 -91.9999 115.637 -35.6421 -86.0476 115.637 35.6421 -86.0476 120.269 -29 -91.9999 120.269 29 -91.9999 193 -62.2254 -62.2253 193 -62.2254 -62.2253 193 -33.6761 -81.3013 193 -29 -91.9999 193 0 -87.9999 193 33.6762 -81.3013 193 62.2254 -62.2252 193 62.2254 -62.2252 162.5 81.3014 -33.676 162.5 81.3014 -33.676 162.5 81.3014 33.6763 162.5 81.3014 33.6763 162.5 88 0.000122 162.5 91.5 30.0001 162.5 91.5 30.0001 162.5 91.5 -29.9999 162.5 91.5 -29.9999 193 81.3014 -33.676 193 81.3014 -33.676 193 81.3014 33.6763 193 81.3014 33.6763 193 88 0.000122 193 91.5 30.0001 193 91.5 30.0001 193 91.5 -29.9999 193 91.5 -29.9999 0.000122 -55.1745 57.5001 0.000122 -55.1745 57.5001 0.000122 -55.1745 57.5001 0.000122 -55.1745 57.5001 0.000122 -53.5 -57.4999 0.000122 -53.5 -57.4999 0.000122 -53.5 57.5001 0.000122 -53.5 57.5001 0.000122 -50.1281 60.8721 0.000122 -50.1281 60.8721 0.000122 -50.1281 60.8721 0.000122 -50.1281 -60.8718 0.000122 -50.1281 -60.8718 22.0044 -53.5 -53.1229 22.0044 -53.5 -53.1229 22.0044 -53.5 53.1232 22.0044 -53.5 53.1232 22.0044 -53.5 53.1232 40.6588 -53.5 -40.6586 40.6588 -53.5 -40.6586 40.6588 -53.5 40.6588 40.6588 -53.5 40.6588 53.1232 -53.5 -22.0042 53.1232 -53.5 -22.0042 53.1232 -53.5 -22.0042 53.1232 -53.5 22.0044 53.1232 -53.5 22.0044 53.1232 -53.5 22.0044 57.5001 -63 0.000122 57.5001 -63 0.000122 57.5001 -63 0.000122 57.5001 -53.5 0.000122 57.5001 -53.5 0.000122 57.5001 -53.5 0.000122 57.5001 -53.5 0.000122 76.2274 0 -79.9999 76.2274 0 -79.9999 76.2274 0 -79.9999 76.2274 0 -79.9999 97.9429 56 -49.374 97.9429 56 -49.374 97.9429 56 -49.374 102.5 -30.6147 -73.9103 102.5 -30.6147 -73.9103 102.5 -30.6147 -73.9103 102.5 0 80.0001 102.5 0 80.0001 102.5 0 80.0001 102.5 0 80.0001 103.838 -63 -49.3051 103.838 -63 -49.3051 103.838 -63 -49.3051 103.838 -63 49.3053 103.838 -63 49.3053 103.838 -63 49.3053 103.838 -63 49.3053 0.000122 -55.1745 -57.4999 0.000122 -55.1745 -57.4999 0.000122 -55.1745 -57.4999 0.000122 -50.1281 -60.8718 22.0044 -59.6194 53.1232 22.0044 -59.6194 53.1232 22.0044 -59.6194 53.1232 22.0044 -53.5 -53.1229 22.0044 -53.5 -53.1229 22.0044 -53.5 53.1232 27.7183 -63 -49.3051 27.7183 -63 -49.3051 27.7183 -63 -49.3051 31.295 -30.6147 73.9105 31.295 -30.6147 73.9105 31.295 -30.6147 73.9105 40.6588 -63 40.6588 40.6588 -63 40.6588 40.6588 -53.5 -40.6586 40.6588 -53.5 40.6588 40.6588 -53.5 40.6588 53.1232 -53.5 22.0044 76.2274 0 80.0001 76.2274 0 80.0001 76.2274 0 80.0001 81.5482 30.6147 73.9105 81.5482 30.6147 73.9105 92.7595 56 -57.1313 92.7595 56 -57.1313 92.7595 56 -57.1313 97.5001 -63 -38.1162 97.5001 -63 -38.1162 97.5001 -63 -38.1162 97.5001 -28.7012 -69.2909 97.5001 -28.7012 -69.2909 97.5001 -13.5 0.000122 97.5001 -13.5 0.000122 97.5001 0 -50.0365 97.5001 0 -50.0365 97.5001 0 -50.0365 97.5001 0 50.0367 97.5001 0 50.0367 97.5001 0 50.0367 97.5001 0 75.0001 97.5001 0 75.0001 97.9429 56 49.3743 97.9429 56 49.3743 97.9429 56 49.3743 102.5 -30.6147 73.9105 102.5 -30.6147 73.9105 102.5 -30.6147 73.9105 102.5 0 80.0001 102.5 30.6147 73.9105 102.5 30.6147 73.9105 102.5 30.6147 -73.9103 102.5 30.6147 -73.9103 103.838 -63 -49.3051 4.68286 -56.5686 56.5686 4.68286 -56.5685 -56.5685 22.0044 -59.6194 -53.1229 27.7183 -63 49.3053 30.2295 -32.0069 72.9802 30.2295 -32.0069 -72.98 31.295 -30.6147 -73.9103 31.295 -30.6147 -73.9103 40.6588 -63 -40.6586 40.6588 -53.5 -40.6586 53.1232 -63 -22.0042 53.1232 -63 22.0044 53.1232 -53.5 -22.0042 78.489 0 -78.4888 78.489 0 -78.4888 78.489 0 -78.4888 78.489 0 78.489 78.489 0 78.489 78.489 0 78.489 78.489 7.59704 78.489 78.489 7.59705 -78.4888 81.5482 30.6147 -73.9103 92.7595 56 57.1315 97.5001 -63 38.1165 97.5001 -53.033 53.0331 97.5001 -53.033 -53.033 97.5001 -28.7013 69.291 97.5001 -5.46676 -40.3857 97.5001 -5.46676 40.386 97.5001 0 -74.9999 97.5001 0 -74.9999 97.5001 28.7013 -69.2909 97.5001 28.7013 69.291 97.5001 53.033 -53.0328 97.5001 53.033 53.0331 97.5001 55.0351 50.0367 97.5001 55.0351 -50.0365 97.9429 56 -49.374 97.9429 56 49.3743 101.696 56 -55.9999 101.696 56 56.0001 102.5 -56.5685 56.5687 102.5 -56.5685 -56.5685 102.5 0 -79.9999 102.5 0 -79.9999 102.655 56 -57.1313 102.655 56 -57.1313 102.655 56 57.1315 102.655 56 57.1315 103.838 -63 49.3053 143.401 -81.3014 33.6763 143.401 -81.3014 33.6763 143.401 -81.3014 -33.676 143.401 -81.3014 -33.676 149 -91 -41.1499 149 -91 -41.1499 149 -91 -41.1499 149 -91 41.1501 149 -91 41.1501 149 -91 41.1501 193 -91 -41.1499 193 -91 -41.1499 193 -91 -41.1499 193 -91 41.1501 193 -91 41.1501 193 -91 41.1501 193 -81.3014 33.6763 193 -81.3014 33.6763 193 -81.3014 -33.676 193 -81.3014 -33.676 132.387 -62.2254 62.2256 132.387 -62.2254 62.2256 132.387 -62.2254 -62.2252 132.387 -62.2254 -62.2252 147.268 -88 0.000122 193 -88 0.000122 193 -62.2254 62.2255 193 -62.2254 62.2255 193 -62.2254 -62.2253 193 -62.2254 -62.2253 110.5 -62.2254 62.2256 110.5 -62.2254 62.2256 110.5 -33.6761 81.3015 110.5 -33.6761 81.3015 110.5 0 88.0001 110.5 0 88.0001 110.5 33.6761 81.3015 110.5 33.6761 81.3015 110.5 62.2254 62.2255 110.5 62.2254 62.2255 114.5 0 92.0001 115.637 -35.6421 86.0479 115.637 -35.6421 86.0479 115.637 35.6421 86.0479 115.637 35.6421 86.0479 120.269 -29 92.0001 120.269 -29 92.0001 120.269 29 92.0001 120.269 29 92.0001 193 29 92.0001 193 29 92.0001 115.637 -35.6421 86.0479 115.637 35.6421 86.0479 120.269 -29 92.0001 120.269 29 92.0001 193 -62.2254 62.2255 193 -62.2254 62.2255 193 -33.6762 81.3015 193 -29 92.0001 193 0 88.0001 193 33.6761 81.3015 193 62.2254 62.2255 193 62.2254 62.2255 194 -62.2254 -62.2253 194 -33.6761 -81.3013 194 0 -87.9999 194 33.6762 -81.3013 194 62.2254 -62.2252 194 81.3014 -33.676 194 88 0.000122 194 81.3014 33.6763 194 62.2254 62.2255 194 33.6761 81.3015 194 0 88.0001 194 -33.6762 81.3015 194 -62.2254 62.2255 194 -81.3014 33.6763 194 -88 0.000122 194 -81.3014 -33.676 193 -81.3014 -33.676 193 -62.2254 -62.2253 194 -62.2254 -62.2253 194 -81.3014 -33.676 193 -88 0.000122 193 -81.3014 -33.676 194 -81.3014 -33.676 194 -88 0.000122 193 -81.3014 33.6763 193 -88 0.000122 194 -88 0.000122 194 -81.3014 33.6763 193 -62.2254 62.2255 193 -81.3014 33.6763 194 -81.3014 33.6763 194 -62.2254 62.2255 193 -33.6762 81.3015 193 -62.2254 62.2255 194 -62.2254 62.2255 194 -33.6762 81.3015 193 0 88.0001 193 -33.6762 81.3015 194 -33.6762 81.3015 194 0 88.0001 193 33.6761 81.3015 193 0 88.0001 194 0 88.0001 194 33.6761 81.3015 193 62.2254 62.2255 193 33.6761 81.3015 194 33.6761 81.3015 194 62.2254 62.2255 193 81.3014 33.6763 193 62.2254 62.2255 194 62.2254 62.2255 194 81.3014 33.6763 193 88 0.000122 193 81.3014 33.6763 194 81.3014 33.6763 194 88 0.000122 193 81.3014 -33.676 193 88 0.000122 194 88 0.000122 194 81.3014 -33.676 193 62.2254 -62.2252 193 81.3014 -33.676 194 81.3014 -33.676 194 62.2254 -62.2252 193 33.6762 -81.3013 193 62.2254 -62.2252 194 62.2254 -62.2252 194 33.6762 -81.3013 193 0 -87.9999 193 33.6762 -81.3013 194 33.6762 -81.3013 194 0 -87.9999 193 -33.6761 -81.3013 193 0 -87.9999 194 0 -87.9999 194 -33.6761 -81.3013 193 -62.2254 -62.2253 193 -33.6761 -81.3013 194 -33.6761 -81.3013 194 -62.2254 -62.2253 + + + + + + + + + + 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0.382672 -0.923884 0 0.382672 -0.923884 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 1 0 0 1 0 0 1 0 0 1 0 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.70713 0.707083 0 0.70713 0.707083 0 0.70713 0.707083 0 0.70713 0.707083 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.382672 -0.923884 0 0.382672 -0.923884 0 -1 0 0 0 0 -1 -1 0 0 0.195074 0 0.980788 -1 0 0 0 0 -1 -1 0 0 0.195074 0 0.980788 0 0 1 0 0 1 0 0 -1 1 0 0 -0.195074 0 0.980788 1 0 0 0 0 -1 1 0 0 -0.195074 0 0.980788 1 0 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 0 0 1 0 0 1 0 0 1 0 0 1 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.707083 0 0.70713 0.707083 0 0.70713 0.707083 0 0.70713 0.707083 0 0.70713 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 1 0 0 1 0 0 1 0 0 1 0 0 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.382672 0 -0.923884 -0.382672 0 -0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.70713 0 0.707083 0.70713 0 0.707083 0 0 1 0 0 1 0.382672 0 0.923884 0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 0 0 1 0 0 1 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.707083 0 0.70713 -0.707083 0 0.70713 -1 0 0 -1 0 0 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -1 0 0 -1 0 0 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.707083 0 -0.70713 -0.707083 0 -0.70713 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.956947 0 0.290262 0.70713 0 0.707083 0.70713 0 0.707083 0.956947 0 0.290262 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.956947 0 0.290262 0.956947 0 -0.290262 0.956947 0 -0.290262 0.956947 0 0.290262 0.956947 0 -0.290262 0.956947 0 -0.290262 0.70713 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.707083 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.382672 0 -0.923884 -0.382672 0 -0.923884 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.809016 0 0.587786 0.809016 0 0.587786 0.309 0 0.951062 0.309 0 0.951062 0.309 0 0.951062 0.309 0 0.951062 -0.309 0 0.951062 -0.309 0 0.951062 -0.309 0 0.951062 -0.309 0 0.951062 -0.809016 0 0.587786 -0.809016 0 0.587786 -0.809016 0 0.587786 -0.809016 0 0.587786 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.809016 0 -0.587786 -0.809016 0 -0.587786 -0.809016 0 -0.587786 -0.809016 0 -0.587786 -0.309 0 -0.951062 -0.309 0 -0.951062 -0.309 0 -0.951062 -0.309 0 -0.951062 0.309 0 -0.951062 0.309 0 -0.951062 0.309 0 -0.951062 0.309 0 -0.951062 0.809016 0 -0.587786 0.809016 0 -0.587786 0.809016 0 -0.587786 0.809016 0 -0.587786 1 0 0 1 0 0 1 0 0 1 0 0 0.809016 0 0.587786 0.809016 0 0.587786 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -1 0 0 -1 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 0 0 1 0 0 1 0 0 1 0 0 1 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.707083 0 0.70713 0.707083 0 0.70713 0.707083 0 0.70713 0.707083 0 0.70713 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 1 0 0 1 0 0 1 0 0 1 0 0 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0 0 -1 0 0 -1 0.192816 -0.863757 -0.46556 0.356304 -0.863768 -0.356304 0.46556 -0.863757 -0.192816 0.503891 -0.863767 0 0.46556 -0.863757 0.192816 0.356304 -0.863768 0.356304 0.192816 -0.863757 0.46556 0 -0.863767 0.503891 -0.192816 -0.863757 0.46556 -0.356304 -0.863768 0.356304 -0.46556 -0.863757 0.192816 -0.503891 -0.863767 0 -0.46556 -0.863757 -0.192816 -0.356304 -0.863768 -0.356304 -0.192816 -0.863757 -0.46556 0 -0.863767 -0.503891 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -0.863767 -0.503891 0 -0.70713 -0.707083 0.270577 -0.707117 -0.653279 0.192816 -0.863757 -0.46556 0.192816 -0.863757 -0.46556 0.270577 -0.707117 -0.653279 0.499985 -0.707128 -0.499985 0.356304 -0.863768 -0.356304 0.356304 -0.863768 -0.356304 0.499985 -0.707128 -0.499985 0.653279 -0.707117 -0.270577 0.46556 -0.863757 -0.192816 0.46556 -0.863757 -0.192816 0.653279 -0.707117 -0.270577 0.707083 -0.70713 0 0.503891 -0.863767 0 0.503891 -0.863767 0 0.707083 -0.70713 0 0.653279 -0.707117 0.270577 0.46556 -0.863757 0.192816 0.46556 -0.863757 0.192816 0.653279 -0.707117 0.270577 0.499985 -0.707128 0.499985 0.356304 -0.863768 0.356304 0.356304 -0.863768 0.356304 0.499985 -0.707128 0.499985 0.270577 -0.707117 0.653279 0.192816 -0.863757 0.46556 0.192816 -0.863757 0.46556 0.270577 -0.707117 0.653279 0 -0.70713 0.707083 0 -0.863767 0.503891 0 -0.863767 0.503891 0 -0.70713 0.707083 -0.270577 -0.707117 0.653279 -0.192816 -0.863757 0.46556 -0.192816 -0.863757 0.46556 -0.270577 -0.707117 0.653279 -0.499985 -0.707128 0.499985 -0.356304 -0.863768 0.356304 -0.356304 -0.863768 0.356304 -0.499985 -0.707128 0.499985 -0.653279 -0.707117 0.270577 -0.46556 -0.863757 0.192816 -0.46556 -0.863757 0.192816 -0.653279 -0.707117 0.270577 -0.707083 -0.70713 0 -0.503891 -0.863767 0 -0.503891 -0.863767 0 -0.707083 -0.70713 0 -0.653279 -0.707117 -0.270577 -0.46556 -0.863757 -0.192816 -0.46556 -0.863757 -0.192816 -0.653279 -0.707117 -0.270577 -0.499985 -0.707128 -0.499985 -0.356304 -0.863768 -0.356304 -0.356304 -0.863768 -0.356304 -0.499985 -0.707128 -0.499985 -0.270577 -0.707117 -0.653279 -0.192816 -0.863757 -0.46556 -0.192816 -0.863757 -0.46556 -0.270577 -0.707117 -0.653279 0 -0.70713 -0.707083 0 -0.863767 -0.503891 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.707083 0 0.70713 0.707083 0 0.70713 0.707083 0 0.70713 0.707083 0 0.70713 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0 0 1 0 0 1 0 0 1 0 0 1 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 1 0 0 1 0 0 -0.863773 0.192816 0.465529 -0.863768 0.356304 0.356304 -0.863757 0.46556 0.192816 -0.863767 0.503891 0 -0.863757 0.46556 -0.192816 -0.863768 0.356304 -0.356304 -0.863757 0.192816 -0.46556 -0.863767 0 -0.503891 -0.863757 -0.192816 -0.46556 -0.863768 -0.356304 -0.356304 -0.863757 -0.46556 -0.192816 -0.863767 -0.503891 0 -0.863757 -0.46556 0.192816 -0.863768 -0.356304 0.356304 -0.863773 -0.192816 0.465529 -0.863767 0 0.503891 -0.863757 -0.46556 -0.192816 -0.505661 -0.821362 -0.263955 -0.505661 -0.859852 -0.0704367 -0.863767 -0.503891 0 -0.863767 -0.503891 0 -0.505661 -0.859852 0.0704367 -0.505661 -0.821362 0.263955 -0.863757 -0.46556 0.192816 -0.863757 -0.46556 0.192816 -0.505661 -0.76745 0.394116 -0.505661 -0.657828 0.558184 -0.863768 -0.356304 0.356304 -0.863768 -0.356304 0.356304 -0.505661 -0.558184 0.657828 -0.505661 -0.394116 0.76745 -0.863773 -0.192816 0.465529 -0.863773 -0.192816 0.465529 -0.505661 -0.263955 0.821362 -0.505661 -0.0704367 0.859852 -0.863767 0 0.503891 -0.863767 0 0.503891 -0.505661 0.0704367 0.859852 -0.505661 0.263955 0.821362 -0.863773 0.192816 0.465529 -0.863773 0.192816 0.465529 -0.505661 0.394116 0.76745 -0.505661 0.558184 0.657828 -0.863768 0.356304 0.356304 -0.863768 0.356304 0.356304 -0.505661 0.657828 0.558184 -0.505661 0.76745 0.394116 -0.863757 0.46556 0.192816 -0.863757 0.46556 0.192816 -0.505661 0.821362 0.263955 -0.505661 0.859852 0.0704367 -0.863767 0.503891 0 -0.863767 0.503891 0 -0.505661 0.859852 -0.0704367 -0.505661 0.821362 -0.263955 -0.863757 0.46556 -0.192816 -0.863757 0.46556 -0.192816 -0.505661 0.76745 -0.394116 -0.505661 0.657828 -0.558184 -0.863768 0.356304 -0.356304 -0.863768 0.356304 -0.356304 -0.505661 0.558184 -0.657828 -0.505661 0.394116 -0.76745 -0.863757 0.192816 -0.46556 -0.863757 0.192816 -0.46556 -0.505661 0.263955 -0.821362 -0.505661 0.0704367 -0.859852 -0.863767 0 -0.503891 -0.863767 0 -0.503891 -0.505661 -0.0704367 -0.859852 -0.505661 -0.263955 -0.821362 -0.863757 -0.192816 -0.46556 -0.863757 -0.192816 -0.46556 -0.505661 -0.394116 -0.76745 -0.505661 -0.558184 -0.657828 -0.863768 -0.356304 -0.356304 -0.863768 -0.356304 -0.356304 -0.505661 -0.657828 -0.558184 -0.505661 -0.76745 -0.394116 -0.863757 -0.46556 -0.192816 0 -0.923884 -0.382672 -0.254067 -0.873007 -0.416303 -0.254067 -0.718731 -0.647206 0 -0.707083 -0.70713 0 -0.707083 -0.70713 -0.254067 -0.647206 -0.718731 -0.254067 -0.416303 -0.873007 0 -0.382672 -0.923884 0 -0.382672 -0.923884 -0.254067 -0.322916 -0.911688 -0.254067 -0.0505387 -0.965865 0 0 -1 0 0 -1 -0.254067 0.0505387 -0.965865 -0.254067 0.322916 -0.911688 0 0.382672 -0.923884 0 0.382672 -0.923884 -0.254067 0.416303 -0.873007 -0.254067 0.647206 -0.718731 0 0.70713 -0.707083 0 0.70713 -0.707083 -0.254067 0.718731 -0.647206 -0.254067 0.873007 -0.416303 0 0.923884 -0.382672 0 0.923884 -0.382672 -0.254067 0.911688 -0.322916 -0.254067 0.965865 -0.0505387 0 1 0 0 1 0 -0.254067 0.965865 0.0505387 -0.254067 0.911688 0.322916 0 0.923884 0.382672 0 0.923884 0.382672 -0.254067 0.873007 0.416303 -0.254067 0.718731 0.647206 0 0.707083 0.70713 0 0.707083 0.70713 -0.254067 0.647206 0.718731 -0.254067 0.416303 0.873007 0 0.382672 0.923884 0 0.382672 0.923884 -0.254067 0.322916 0.911688 -0.254067 0.0505387 0.965865 0 0 1 0 0 1 -0.254067 -0.0505387 0.965865 -0.254067 -0.322916 0.911688 0 -0.382672 0.923884 0 -0.382672 0.923884 -0.254067 -0.416303 0.873007 -0.254067 -0.647206 0.718731 0 -0.707083 0.70713 0 -0.707083 0.70713 -0.254067 -0.718731 0.647206 -0.254067 -0.873007 0.416303 0 -0.923884 0.382672 0 -0.923884 0.382672 -0.254067 -0.911688 0.322916 -0.254067 -0.965865 0.0505387 0 -1 0 0 -1 0 -0.254067 -0.965865 -0.0505387 -0.254067 -0.911688 -0.322916 0 -0.923884 -0.382672 -0.378979 -0.575884 -0.724384 0 0.555559 0.831477 -0.707145 -0.270577 -0.653249 0 0.382672 0.923884 -0.70713 0 -0.707083 0 0 1 -0.707117 0.270577 -0.653279 0 -0.382672 0.923884 -0.378979 0.575884 -0.724384 0 -0.555559 0.831477 -0.503891 0 -0.863767 -0.707145 -0.270577 -0.653249 -0.378979 -0.575884 -0.724384 -0.707117 0.270577 -0.653279 -0.378979 0.575884 -0.724384 -0.379711 -0.0755028 -0.922019 0 -0.35725 -0.934009 -0.379711 0.0755028 -0.922019 0 0.35725 -0.934009 0 0.35725 -0.934009 1 0 0 -0.509171 -0.437483 -0.741184 -0.509171 0.437483 -0.741184 -0.262429 -0.302316 -0.916371 -0.262429 0.302316 -0.916371 0 -0.667348 -0.744746 0 0.555559 0.831477 0 0.382672 0.923884 0 -0.35725 -0.934009 0 0 1 0 -0.382672 0.923884 0 -0.555559 0.831477 0 0.667348 -0.744746 1 0 0 0 0.339091 -0.940754 0 -0.980788 0.195074 0 0.339091 0.940754 0 -0.980788 -0.195074 0 -1 0 0 0.339091 0.940754 0 1 0 0 0.339091 -0.940754 0 1 0 0 0.339091 -0.940754 0 -0.980788 0.195074 0 0.339091 0.940754 0 -0.980788 -0.195074 0 -1 0 0 0.339091 0.940754 0 1 0 0 0.339091 -0.940754 0 1 0 -1 0 0 1 0 0 -1 0 0 -0.195074 0 -0.980788 0 -0.97213 0.234443 0 -0.689352 0.724426 -1 0 0 -0.180578 0.378185 0.907947 -1 0 0 -0.180578 0.378185 -0.907947 -1 0 0 -0.139256 0.700248 -0.700186 0 -0.689352 0.724426 -0.139256 0.700248 0.700186 0 -0.657521 -0.753436 -0.394116 0.505661 0.76745 -0.263955 0.505661 0.821362 -0.394116 0.505661 -0.76745 -0.322916 0.254067 -0.911688 -0.263955 0.505661 -0.821362 -0.657828 0.505661 0.558184 -0.558153 0.505661 0.657854 -0.657828 0.505661 -0.558184 -0.558153 0.505661 -0.657854 -0.911688 0.254067 0.322916 -0.821362 0.505661 0.263955 -0.76745 0.505661 0.394116 -0.911688 0.254067 -0.322916 -0.821362 0.505661 -0.263955 -0.76745 0.505661 -0.394116 -1 0 0 0 -0.657521 -0.753436 0 -0.97213 0.234443 -0.965865 0.254067 -0.0505387 -0.965865 0.254067 0.0505387 -0.859852 0.505661 -0.0704367 -0.859852 0.505661 0.0704367 -0.831477 0 0.555559 -0.514267 0.378185 0.769743 0 0 -1 0 0.380352 -0.924842 -0.831477 0 0.555559 0 0.380352 -0.924842 1 0 0 0 -0.657521 -0.753436 0 -0.382672 -0.923884 0.707117 0.270577 0.653279 -0.718731 0.254067 -0.647206 0 1 0 0 0 1 1 0 0 0 -0.657521 -0.753436 0 -0.97213 0.234443 1 0 0 0 -0.97213 0.234443 0 -0.97213 0.234443 0 -0.689352 0.724426 1 0 0 -1 0 0 -0.195074 0 0.980788 0 -0.657521 -0.753436 -1 0 0 -0.382672 0 -0.923884 0 -0.97213 0.234443 0 -0.97213 0.234443 -0.416303 0.254067 0.873007 -0.322916 0.254067 0.911688 -0.416303 0.254067 -0.873007 -0.555559 0 0.831477 0 -0.657521 -0.753436 0 -0.97213 0.234443 -0.396619 0.700224 -0.593616 0 -0.382672 0.923884 0 -0.689352 0.724426 -0.70713 0 -0.707083 0 -0.97213 0.234443 -0.647206 0.254067 0.718731 -0.718731 0.254067 -0.647206 -0.647206 0.254067 -0.718731 -0.873007 0.254067 -0.416303 -0.718731 0.254067 -0.647206 -0.514267 0.378185 -0.769743 0 0 1 -0.718731 0.254067 -0.647206 0 0.380352 0.924842 -0.831477 0 0.555559 0 0.551378 -0.834256 0 0.380352 -0.924842 0 -0.97213 0.234443 0.966781 0.212531 0.142003 1 0 0 0.863757 0.192816 0.46556 1 0 0 -0.707083 0.70713 0 1 0 0 -0.831477 0 0.555559 -0.769723 0.378185 0.514298 1 0 0 -0.769723 0.378185 -0.514298 -0.718731 0.254067 -0.647206 1 0 0 0.952917 0 -0.303232 1 0 0 -0.718731 0.254067 -0.647206 0 1 0 1 0 0 0 -0.689352 0.724426 0 -0.442946 0.896548 0.707145 0.270577 -0.653249 0.70713 0 -0.707083 0 0.319163 0.9477 0.707117 -0.270577 -0.653279 0 0.380352 -0.924842 0.707117 -0.270577 0.653279 0.700224 0.593616 0.396619 -0.195074 0 -0.980788 -0.195074 0 0.980788 -0.382672 0 0.923884 -0.555559 0 -0.831477 -0.270577 0.707117 -0.653279 -0.270577 0.707117 0.653279 -0.396619 0.700224 0.593616 0 -0.382672 -0.923884 -0.70713 0 0.707083 -0.718731 0.254067 0.647206 -0.923884 0 0.382672 -0.923884 0 -0.382672 -0.873007 0.254067 0.416303 -0.657828 0.505661 0.558184 -0.647206 0.254067 0.718731 -0.558153 0.505661 0.657854 -0.657828 0.505661 -0.558184 -0.647206 0.254067 -0.718731 -0.558153 0.505661 -0.657854 -0.707083 0 -0.70713 -0.707083 0 0.70713 0 0.380352 -0.924842 0 0.551408 0.834235 0.922021 0.321909 -0.215064 0.863768 0.356304 -0.356304 0.863768 0.356304 0.356304 0.863773 0.192816 -0.465529 -0.653279 0.707117 0.270577 -0.653279 0.707117 -0.270577 0.952917 0 0.303232 0.952917 0 0.303232 0.863757 -0.192816 0.46556 0.863757 -0.192816 -0.46556 0.863768 -0.356304 0.356304 0.863768 -0.356304 -0.356304 0.922021 -0.321909 -0.215064 0.922021 -0.321909 0.215064 0.70025 -0.593585 0.396619 0.70025 -0.593585 -0.396619 0.707128 -0.499985 0.499985 0.707128 -0.499985 -0.499985 0.707128 0.499985 -0.499985 0.707128 0.499985 0.499985 0 0.0661336 -0.997811 0.707083 0 0.70713 0 0.551378 -0.834256 0.70025 -0.396619 0.593585 0 0.551408 0.834235 0.700224 -0.396619 -0.593616 0.70025 0.593585 -0.396619 -2.12951e-006 1 -3.80483e-008 -2.1295e-006 1 3.81307e-008 6.25096e-007 -9.64761e-007 1 3.37964e-007 -0.689362 0.724417 -1.01323e-008 -0.972126 0.234458 -1.01323e-008 -0.972126 0.234458 -9.50031e-007 -0.657551 -0.75341 2.86681e-008 0.380372 -0.924834 1 0 0 -0.718702 0.254081 -0.647233 -0.831475 2.74156e-005 0.555562 -9.50031e-007 -0.657551 -0.75341 -0.866034 -0.499985 0 0 0.923884 -0.382672 -0.866034 -0.499985 0 0 0.923884 0.382672 -0.866034 -0.499985 0 0 -0.590869 -0.806768 0 -1 0 -0.866034 -0.499985 0 0 -1 0 0 -0.590869 0.806768 0 -0.590869 -0.806768 0 -1 0 1 0 0 0 -1 0 0 -0.590869 0.806768 1 0 0 0 0.923884 -0.382672 1 0 0 0 0.923884 0.382672 1 0 0 0 0.831477 -0.555559 0 -0.590869 0.806768 0 -0.590869 -0.806768 0 0.831477 0.555559 0 1 0 0 1 0 0 0.831477 -0.555559 0 -0.590869 0.806768 0 -0.590869 -0.806768 0 0.831477 0.555559 1 0 0 -0.866026 -0.5 8.71977e-008 -0.378979 -0.575884 0.724384 0 0.555559 -0.831477 -0.707117 -0.270577 0.653279 0 0.382672 -0.923884 -0.70713 0 0.707083 0 0 -1 -0.707145 0.270577 0.653249 0 -0.382672 -0.923884 -0.378979 0.575884 0.724384 0 -0.555559 -0.831477 -0.503891 0 0.863767 -0.707117 -0.270577 0.653279 -0.378979 -0.575884 0.724384 -0.707145 0.270577 0.653249 -0.378979 0.575884 0.724384 -0.379711 -0.0755028 0.922019 0 -0.35725 0.934009 -0.379711 0.0755028 0.922019 0 0.35725 0.934009 0 0.35725 0.934009 1 0 0 -0.509171 -0.437483 0.741184 -0.509171 0.437483 0.741184 -0.262429 -0.302316 0.916371 -0.262429 0.302316 0.916371 0 0.555559 -0.831477 0 -0.667348 0.744746 0 0.382672 -0.923884 0 -0.35725 0.934009 0 0 -1 0 -0.382672 -0.923884 0 -0.555559 -0.831477 0 0.667348 0.744746 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -0.923884 -0.382672 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.923884 -0.382672 0 -1 0 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -1 0 0 -0.923884 0.382672 0 -1 0 0 -1 0 0 -0.923884 0.382672 0 -0.70713 0.707083 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.70713 0.707083 0 -0.382672 0.923884 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.382672 0.923884 0 0 1 0 -0.382672 0.923884 0 -0.382672 0.923884 0 0 1 0 0.382672 0.923884 0 0 1 0 0 1 0 0.382672 0.923884 0 0.707083 0.70713 0 0.382672 0.923884 0 0.382672 0.923884 0 0.707083 0.70713 0 0.923884 0.382672 0 0.707083 0.70713 0 0.707083 0.70713 0 0.923884 0.382672 0 1 0 0 0.923884 0.382672 0 0.923884 0.382672 0 1 0 0 0.923884 -0.382672 0 1 0 0 1 0 0 0.923884 -0.382672 0 0.70713 -0.707083 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.70713 -0.707083 0 0.382672 -0.923884 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.382672 -0.923884 0 0 -1 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0 -1 0 -0.382672 -0.923884 0 0 -1 0 0 -1 0 -0.382672 -0.923884 0 -0.707083 -0.70713 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.707083 -0.70713 + + + + + + + + + + + + + + +

0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15

+

16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31

+

32 32 33 33 34 34 35 35

+

36 36 37 37 38 38 39 39

+

40 40 41 41 42 42 43 43

+

44 44 45 45 46 46 47 47

+

48 48 49 49 50 50 51 51

+

52 52 53 53 54 54 55 55

+

56 56 57 57 58 58 59 59

+

60 60 61 61 62 62 63 63

+

64 64 65 65 66 66 67 67

+

68 68 69 69 70 70 71 71

+

72 72 73 73 74 74 75 75

+

76 76 77 77 78 78 79 79

+

80 80 81 81 82 82 83 83

+

84 84 85 85 86 86 87 87

+

88 88 89 89 90 90 91 91

+

92 92 93 93 94 94 95 95

+
+ + + +

101 114 103 114 105 114

+
+ + + +

105 114 113 114 111 114 101 114

+
+ + + +

107 115 109 115 104 115

+
+ + + +

104 115 99 115 97 115 107 115

+
+ + + +

104 104 105 105 103 103 99 99

+

102 102 100 100 96 96 98 98

+

106 106 97 97 101 101 110 110

+

109 109 107 107 111 111 113 113

+

104 104 108 108 112 112 105 105

+
+ + + +

114 116 115 117 116 118 117 119 118 120 119 121 120 122 121 123 122 124 123 125 124 126 125 127 126 128 127 129 128 130 129 131

+

130 132 131 133 132 134 133 135 134 136 135 137 136 138 137 139 138 140 139 141 140 142 141 143 142 144 143 145 144 146 145 147

+

146 148 147 149 148 150 149 151

+

150 152 151 153 152 154 153 155

+

154 156 155 157 156 158 157 159

+

158 160 159 161 160 162 161 163

+

162 164 163 165 164 166 165 167

+

166 168 167 169 168 170 169 171

+

170 172 171 173 172 174 173 175

+

174 176 175 177 176 178 177 179

+

178 180 179 181 180 182 181 183

+

182 184 183 185 184 186 185 187

+

186 188 187 189 188 190 189 191

+

190 192 191 193 192 194 193 195

+

194 196 195 197 196 198 197 199

+

198 200 199 201 200 202 201 203

+

202 204 203 205 204 206 205 207

+

206 208 207 209 208 210 209 211

+
+ + + +

210 212 211 213 212 214 213 215

+

214 216 215 217 216 218 217 219

+

218 220 219 221 220 222 221 223

+

222 224 223 225 224 226 225 227

+

226 228 227 229 228 230 229 231

+

230 232 231 233 232 234 233 235

+

234 236 235 237 236 238 237 239

+

238 240 239 241 240 242 241 243

+

242 244 243 245 244 246 245 247

+

246 248 247 249 248 250 249 251 250 252 251 253 252 254 253 255 254 256 255 257 256 258 257 259 258 260 259 261 260 262

+

261 263 262 264 263 265 264 266

+

265 267 266 268 267 269 268 270 269 271 270 272 271 273 272 274 273 275 274 276 275 277 276 278 277 279 278 280 279 281

+

280 282 281 283 282 284 283 285

+

284 286 285 287 286 288 287 289

+

288 290 289 291 290 292 291 293

+

292 294 293 295 294 296 295 297

+

296 298 297 299 298 300 299 301

+
+ + + +

300 302 301 303 302 304 303 305

+

304 306 305 307 306 308 307 309

+

308 310 309 311 310 312 311 313

+

312 314 313 315 314 316 315 317

+

316 318 317 319 318 320 319 321

+

320 322 321 323 322 324 323 325

+
+ + + +

324 326 325 327 326 328 327 329 328 330 329 331 330 332 331 333 332 334 333 335

+

334 336 335 337 336 338 337 339 338 340 339 341 340 342 341 343 342 344 343 345

+

344 346 345 347 346 348 347 349

+

348 350 349 351 350 352 351 353

+

352 354 353 355 354 356 355 357

+

356 358 357 359 358 360 359 361

+

360 362 361 363 362 364 363 365

+

364 366 365 367 366 368 367 369

+

368 370 369 371 370 372 371 373

+

372 374 373 375 374 376 375 377

+

376 378 377 379 378 380 379 381

+

380 382 381 383 382 384 383 385

+
+ + + +

384 386 385 387 386 388 387 389 388 390 389 391 390 392 391 393 392 394 393 395 394 396 395 397 396 398 397 399 398 400 399 401

+

400 402 401 403 402 404 403 405 404 406 405 407 406 408 407 409 408 410 409 411 410 412 411 413 412 414 413 415 414 416 415 417

+

416 418 417 419 418 420 419 421

+

420 422 421 423 422 424 423 425

+

424 426 425 427 426 428 427 429

+

428 430 429 431 430 432 431 433

+

432 434 433 435 434 436 435 437

+

436 438 437 439 438 440 439 441

+

440 442 441 443 442 444 443 445

+

444 446 445 447 446 448 447 449

+

448 450 449 451 450 452 451 453

+

452 454 453 455 454 456 455 457

+

456 458 457 459 458 460 459 461

+

460 462 461 463 462 464 463 465

+

464 466 465 467 466 468 467 469

+

468 470 469 471 470 472 471 473

+

472 474 473 475 474 476 475 477

+

476 478 477 479 478 480 479 481

+
+ + + +

480 482 481 483 482 484 483 485 484 486 485 487 486 488 487 489 488 490 489 491 490 492 491 493 492 494 493 495 494 496 495 497

+

496 498 497 499 498 500 499 501 500 502 501 503 502 504 503 505 504 506 505 507 506 508 507 509 508 510 509 511 510 512 511 513

+

512 514 513 515 514 516 515 517

+

516 518 517 519 518 520 519 521

+

520 522 521 523 522 524 523 525

+

524 526 525 527 526 528 527 529

+

528 530 529 531 530 532 531 533

+

532 534 533 535 534 536 535 537

+

536 538 537 539 538 540 539 541

+

540 542 541 543 542 544 543 545

+

544 546 545 547 546 548 547 549

+

548 550 549 551 550 552 551 553

+

552 554 553 555 554 556 555 557

+

556 558 557 559 558 560 559 561

+

560 562 561 563 562 564 563 565

+

564 566 565 567 566 568 567 569

+

568 570 569 571 570 572 571 573

+

572 574 573 575 574 576 575 577

+
+ + + +

576 578 577 579 578 580 579 581 580 582 581 583 582 584 583 585 584 586 585 587 586 588 587 589 588 590 589 591 590 592 591 593

+

592 594 593 595 594 596 595 597 596 598 597 599 598 600 599 601 600 602 601 603 602 604 603 605 604 606 605 607 606 608 607 609

+

608 610 609 611 610 612 611 613

+

612 614 613 615 614 616 615 617

+

616 618 617 619 618 620 619 621

+

620 622 621 623 622 624 623 625

+

624 626 625 627 626 628 627 629

+

628 630 629 631 630 632 631 633

+

632 634 633 635 634 636 635 637

+

636 638 637 639 638 640 639 641

+

640 642 641 643 642 644 643 645

+

644 646 645 647 646 648 647 649

+

648 650 649 651 650 652 651 653

+

652 654 653 655 654 656 655 657

+

656 658 657 659 658 660 659 661

+

660 662 661 663 662 664 663 665

+

664 666 665 667 666 668 667 669

+

668 670 669 671 670 672 671 673

+
+ + + +

672 674 673 675 674 676 675 677 676 678 677 679 678 680 679 681 680 682 681 683 682 684 683 685 684 686 685 687 686 688 687 689

+

688 690 689 691 690 692 691 693

+

692 694 693 695 694 696 695 697

+

696 698 697 699 698 700 699 701

+

700 702 701 703 702 704 703 705

+

704 706 705 707 706 708 707 709

+

708 710 709 711 710 712 711 713

+

712 714 713 715 714 716 715 717

+

716 718 717 719 718 720 719 721

+

720 722 721 723 722 724 723 725

+

724 726 725 727 726 728 727 729

+

728 730 729 731 730 732 731 733

+

732 734 733 735 734 736 735 737

+

736 738 737 739 738 740 739 741

+

740 742 741 743 742 744 743 745

+

744 746 745 747 746 748 747 749

+

748 750 749 751 750 752 751 753

+

752 754 753 755 754 756 755 757

+

756 758 757 759 758 760 759 761

+

760 762 761 763 762 764 763 765

+

764 766 765 767 766 768 767 769

+

768 770 769 771 770 772 771 773

+

772 774 773 775 774 776 775 777

+

776 778 777 779 778 780 779 781

+

780 782 781 783 782 784 783 785

+

784 786 785 787 786 788 787 789

+

788 790 789 791 790 792 791 793

+

792 794 793 795 794 796 795 797

+

796 798 797 799 798 800 799 801

+

800 802 801 803 802 804 803 805

+

804 806 805 807 806 808 807 809

+

808 810 809 811 810 812 811 813

+

812 814 813 815 814 816 815 817

+
+ + + +

843 851 842 851 844 851 836 851 848 851 846 851 836 851 846 851 845 851 844 851 836 851 845 851 844 851 845 851 843 851

+
+ + + +

824 826 838 840 822 824 816 818 818 820 837 839

+
+ + + +

822 824 829 831 833 835 826 828 820 822

+

820 822 826 828 831 833 827 829 818 820

+

841 843 816 818 828 830 832 834 844 846

+

844 846 839 841 826 828 840 842 835 837

+

835 837 834 836 830 832 824 826 848 850

+

847 849 825 827 823 825 846 848

+

846 848 823 825 821 823 845 847

+

845 847 821 823 819 821 843 845

+

843 845 819 821 817 819 842 844

+
+ + + +

853 870 852 870 855 870 857 870 850 870 853 870 855 870 857 870 853 870

+
+ + + +

862 871 859 871 866 871 864 871 861 871 862 871 866 871 864 871 862 871

+
+ + + +

850 853 859 862 862 865 853 856

+

853 856 862 865 861 864 852 855

+

851 854 860 863 863 866 854 857

+

855 858 864 867 866 869 857 860

+

856 859 865 868 858 861 849 852

+
+ + + +

1019 1035 1026 1035 952 1035 908 1035 1019 1035 952 1035

+
+ + + +

1002 1036 1020 1036 970 1036 1002 1036 1028 1036 1020 1036

+
+ + + +

976 1037 949 1037 999 1037

+
+ + + +

947 1037 915 1037 976 1037 999 1037

+
+ + + +

973 1038 938 1038 984 1038

+
+ + + +

1021 1038 973 1038 984 1038 877 1038 870 1038 980 1038

+
+ + + +

1021 1039 980 1039 929 1039

+
+ + + +

922 1039 1021 1039 929 1039 983 1039

+
+ + + +

922 1040 983 1040 940 1040 955 1040 990 1040 988 1040 897 1040 990 1040 955 1040

+
+ + + +

991 1040 1003 1040 922 1040 940 1040

+

955 1040 1003 1040 991 1040 897 1040

+

988 1040 935 1040 918 1040 955 1040

+
+ + + +

982 1041 981 1041 1022 1041

+
+ + + +

1022 1041 918 1041 935 1041 982 1041

+
+ + + +

1024 1042 905 1042 1000 1042

+
+ + + +

978 1042 1024 1042 1000 1042 1001 1042

+
+ + + +

1010 1043 962 1043 1007 1043 967 1043 1008 1043 965 1043

+
+ + + +

965 1043 1015 1043 1014 1043 1012 1043 967 1043

+

1010 1043 1011 1043 1013 1043 1016 1043 962 1043

+

955 1043 1005 1043 957 1043 1010 1043 1007 1043 959 1043

+

967 1043 1006 1043 1004 1043 1003 1043 955 1043 959 1043 1008 1043

+
+ + + +

1002 1044 970 1044 1015 1044

+
+ + + +

998 1044 999 1044 949 1044 1002 1044 1015 1044 965 1044

+
+ + + +

1016 1045 1001 1045 1000 1045 995 1045 962 1045

+

908 1045 952 1045 1001 1045 1016 1045

+
+ + + +

1022 1046 981 1046 925 1046 879 1046 985 1046

+

987 1046 911 1046 1022 1046 985 1046

+
+ + + +

997 1002 946 951 999 1004 994 999 1000 1005 903 908 871 876 926 931 923 928 873 878 867 872 875 880

+
+ + + +

1003 1008 1004 1009 1021 1026 1029 1034

+

1004 1009 1006 1011 973 978 1021 1026

+

1027 1032 1002 1007 949 954 975 980

+

1018 1023 1020 1025 1014 1019 1015 1020

+

976 981 1012 1017 1014 1019 1020 1025 1028 1033

+

976 981 974 979 966 971 1012 1017

+

1006 1011 966 971 974 979 973 978

+

937 942 972 977 914 919 947 952

+

1016 1021 1013 1018 1019 1024 1017 1022

+

977 982 1001 1006 951 956 1025 1030

+

1013 1018 1011 1016 978 983 1026 1031 1019 1024

+

1011 1016 1010 1015 1024 1029 978 983

+

1005 1010 954 959 979 984 1022 1027

+

1022 1027 911 916 956 961 1005 1010

+

1009 1014 956 961 911 916 1024 1029

+

910 915 987 992 904 909 1023 1028

+

899 904 889 894 990 995 895 900

+

988 993 990 995 992 997 989 994

+

985 990 878 883 872 877 881 886

+

931 936 872 877 924 929 981 986 982 987

+

941 946 930 935 982 987 933 938 988 993

+

880 885 886 891 995 1000 903 908 986 991 985 990

+

993 998 885 890 891 896 1007 1012 961 966

+

958 963 1007 1012 890 895 901 906

+

1008 1013 958 963 900 905 893 898

+

892 897 898 903 895 900 991 996

+

939 944 983 988 927 932 932 937 943 948

+

991 996 939 944 942 947 944 949

+

894 899 887 892 996 1001 963 968 1008 1013

+

998 1003 888 893 882 887 984 989 936 941 946 951

+

876 881 984 989 884 889 874 879

+

874 879 883 888 927 932 980 985 868 873

+
+ + + +

1047 1077 1057 1077 1045 1077 1042 1077 1059 1077 1049 1077 1042 1077 1049 1077 1055 1077 1045 1077 1042 1077 1055 1077 1045 1077 1055 1077 1047 1077

+
+ + + +

1033 1078 1053 1078 1036 1078 1039 1078 1051 1078 1031 1078 1039 1078 1031 1078 1054 1078 1036 1078 1039 1078 1054 1078 1036 1078 1054 1078 1033 1078

+
+ + + +

1036 1053 1041 1058 1043 1060 1038 1055

+

1039 1056 1044 1061 1057 1074 1051 1068

+

1050 1067 1056 1073 1046 1063 1031 1048

+

1031 1048 1046 1063 1055 1072 1054 1071

+

1054 1071 1055 1072 1048 1065 1033 1050

+

1033 1050 1048 1065 1059 1076 1053 1070

+

1052 1069 1058 1075 1040 1057 1035 1052

+
+ + + +

1090 1112 1092 1112 1080 1112 1089 1112 1090 1112 1080 1112 1088 1112 1086 1112 1087 1112 1088 1112 1087 1112 1089 1112 1080 1112 1088 1112 1089 1112

+
+ + + +

1068 1087 1066 1085 1082 1101 1060 1079 1081 1100 1062 1081

+
+ + + +

1064 1083 1070 1089 1077 1096 1073 1092 1066 1085

+

1062 1081 1071 1090 1075 1094 1070 1089 1064 1083

+

1085 1104 1061 1080 1063 1082 1087 1106

+

1087 1106 1063 1082 1065 1084 1089 1108

+

1089 1108 1065 1084 1067 1086 1090 1109

+

1090 1109 1067 1086 1069 1088 1091 1110

+

1092 1111 1068 1087 1074 1093 1078 1097 1079 1098

+

1079 1098 1084 1103 1070 1089 1083 1102 1088 1107

+

1088 1107 1076 1095 1072 1091 1060 1079 1086 1105

+
+ + + +

1093 1113 1094 1114 1095 1115 1096 1116 1097 1117 1098 1118 1099 1119 1100 1120 1101 1121 1102 1122 1103 1123 1104 1124 1105 1125 1106 1126 1107 1127 1108 1128

+

1109 1129 1110 1130 1111 1131 1112 1132

+

1113 1133 1114 1134 1115 1135 1116 1136

+

1117 1137 1118 1138 1119 1139 1120 1140

+

1121 1141 1122 1142 1123 1143 1124 1144

+

1125 1145 1126 1146 1127 1147 1128 1148

+

1129 1149 1130 1150 1131 1151 1132 1152

+

1133 1153 1134 1154 1135 1155 1136 1156

+

1137 1157 1138 1158 1139 1159 1140 1160

+

1141 1161 1142 1162 1143 1163 1144 1164

+

1145 1165 1146 1166 1147 1167 1148 1168

+

1149 1169 1150 1170 1151 1171 1152 1172

+

1153 1173 1154 1174 1155 1175 1156 1176

+

1157 1177 1158 1178 1159 1179 1160 1180

+

1161 1181 1162 1182 1163 1183 1164 1184

+

1165 1185 1166 1186 1167 1187 1168 1188

+

1169 1189 1170 1190 1171 1191 1172 1192

+
+
+ + + CAT3DBagRep + + +
+ + + + 200 -0.249987 96.219 200 0 87.5002 200 -27.8125 81.968 200 -27.8125 94.468 200 -19.0096 96.219 200 0 87.5002 200 -0.249987 96.219 200 19.0096 96.219 200 38.2684 92.3882 200 53.1603 82.4377 200 25.451 82.4377 200 -84.709 -14.031 200 -81.9677 -27.8123 200 -94.4677 -27.8123 200 -97.209 -14.031 200 94.5672 27.3127 200 97.3085 13.5315 200 84.8085 13.5315 200 82.0672 27.3127 200 -55.375 80.9579 200 -55.375 68.6565 200 -72.0834 68.6565 200 -70.7107 70.7109 200 68.6563 -55.3748 200 80.9577 -55.3748 200 70.7107 -70.7104 200 68.6563 -72.0831 200 96.2188 -19.0094 200 96.2188 13.5315 200 97.3085 13.5315 200 100 0.000244 200 -82.9375 -27.8123 200 -82.9375 -52.4117 200 -92.3879 -38.2681 200 -94.4677 -27.8123 200 -27.8125 -82.9373 200 -27.8125 -94.4675 200 -38.2683 -92.3877 200 -52.4119 -82.9373 200 -27.8125 82.4377 200 -53.1602 82.4377 200 -38.2683 92.3882 200 -27.8125 94.468 200 82.4375 -27.8123 200 94.4678 -27.8123 200 92.388 -38.2681 200 82.4375 -53.16 200 87.5 0.000244 200 96.2188 -0.249756 200 96.2188 -19.0094 200 94.4678 -27.8123 200 81.9678 -27.8123 200 87.5 0.000244 200 84.8085 13.5315 200 96.2188 13.5315 200 96.2188 -0.249756 200 82.4375 27.3127 200 82.4375 53.1605 200 92.388 38.2686 200 94.5672 27.3127 200 -80.8394 -33.4845 200 -66.2129 -55.3748 200 -80.9576 -55.3748 200 -82.9375 -52.4117 200 -82.9375 -41.5935 200 -82.9375 -41.5935 200 -82.9375 -27.8123 200 -81.9677 -27.8123 200 -80.8394 -33.4845 200 -33.4848 -80.8392 200 -41.5937 -82.9373 200 -52.4119 -82.9373 200 -55.375 -80.9574 200 -55.375 -66.2126 200 -41.5937 -82.9373 200 -33.4848 -80.8392 200 -27.8125 -81.9675 200 -27.8125 -82.9373 200 -41.5937 82.4377 200 -33.4848 80.8397 200 -55.375 66.2131 200 -55.375 80.9579 200 -53.1602 82.4377 200 -41.5937 82.4377 200 -27.8125 82.4377 200 -27.8125 81.968 200 -33.4848 80.8397 200 80.8395 -33.4845 200 82.4375 -41.5935 200 82.4375 -53.16 200 80.9577 -55.3748 200 66.2129 -55.3748 200 82.4375 -41.5935 200 80.8395 -33.4845 200 81.9678 -27.8123 200 82.4375 -27.8123 200 -19.0096 96.219 200 0 100 200 19.0096 96.219 200 33.4848 80.8397 200 41.0938 82.4377 200 53.1603 82.4377 200 70.7107 70.7109 200 72.0834 68.6565 200 51.7183 68.6565 200 41.0938 82.4377 200 33.4848 80.8397 200 25.451 82.4377 194 -87.5 0.000244 194 -87.5 0.000244 194 -80.8394 -33.4845 194 -80.8394 -33.4845 194 -80.8394 33.485 194 -80.8394 33.485 194 -61.8718 -61.8716 194 -61.8718 -61.8716 194 -61.8718 61.8721 194 -61.8718 61.8721 194 -33.4848 -80.8392 194 -33.4848 -80.8392 194 -33.4848 80.8397 194 -33.4848 80.8397 194 0 -87.4998 194 0 -87.4998 194 0 87.5002 194 0 87.5002 194 33.4848 -80.8392 194 33.4848 -80.8392 194 33.4848 80.8397 194 33.4848 80.8397 194 61.8719 -61.8716 194 61.8719 -61.8716 194 61.8719 61.8721 194 61.8719 61.8721 194 80.8395 -33.4845 194 80.8395 -33.4845 194 80.8395 33.485 194 80.8395 33.485 194 87.5 0.000244 194 87.5 0.000244 200 -87.5 0.000244 200 -80.8394 -33.4845 200 -80.8394 33.485 200 -61.8718 -61.8716 200 -61.8718 61.8721 200 -33.4848 -80.8392 200 -33.4848 80.8397 200 0 -87.4998 200 0 87.5002 200 33.4848 -80.8392 200 33.4848 80.8397 200 61.8719 -61.8716 200 61.8719 61.8721 200 80.8395 -33.4845 200 80.8395 33.485 200 87.5 0.000244 200 -82.9375 22.9375 200 -82.9375 41.094 200 -82.9375 52.4122 200 -72.0834 68.6565 200 -69.1562 68.6565 200 -55.375 66.2131 200 -55.375 68.6565 200 22.9373 -82.9373 200 41.0938 -82.9373 200 51.7183 68.6565 200 52.412 -82.9373 200 66.2129 -55.3748 200 68.6563 -72.0831 200 68.6563 -69.156 200 68.6563 -55.3748 200 68.6563 68.6565 200 72.0834 68.6565 200 82.0672 27.3127 200 82.4375 27.3127 200 82.4375 41.094 200 82.4375 53.1605 200 -69.1562 -55.3748 200 -66.2129 -55.3748 200 -61.8718 -61.8716 200 -61.8718 -61.8716 200 -55.375 -69.156 200 -55.375 -80.9574 200 -70.7107 -70.7104 200 -80.9576 -55.3748 200 -69.1562 -55.3748 200 -61.8718 -61.8716 200 -55.375 -66.2126 200 -55.375 -69.156 210 19.0096 96.219 210 0 100 210 -19.0096 96.219 200 -99.9503 -0.249756 200 -97.209 -14.031 200 -96.7187 -14.031 200 -96.7187 -0.249756 200 -84.709 -14.031 200 -82.9375 52.4122 200 -27.8125 -94.4675 200 -27.8125 -81.9675 200 -16.4959 -96.7185 200 -0.249987 -99.9501 200 -0.249987 -96.7185 200 52.412 -82.9373 200 -100 0.000244 200 -100 0.000244 200 -92.3879 -38.2681 200 -92.3879 38.2686 200 -92.3879 38.2686 200 -87.5 0.000244 200 -70.7107 -70.7104 200 -70.7107 70.7109 200 -38.2683 -92.3877 200 -38.2683 92.3882 200 0 -99.9998 200 0 -99.9998 200 0 -87.4998 200 0 100 200 38.2684 -92.3877 200 38.2684 -92.3877 200 38.2684 92.3882 200 70.7107 -70.7104 200 70.7107 70.7109 200 92.388 -38.2681 200 92.388 38.2686 200 100 0.000244 210 -81.2917 54.8752 210 -54.875 -81.2915 210 -54.875 -55.3748 210 -54.875 -0.249756 210 -54.875 54.8752 210 0.250013 -99.9501 210 0.250013 -55.3748 210 0.250013 54.8752 210 49.9503 -0.249756 210 55.375 -80.9574 210 55.375 -55.3748 210 55.375 -0.249756 210 55.375 54.8752 210 80.9577 -55.3748 210 81.2917 54.8752 210 99.9503 -0.249756 210 -100 0.000244 210 -100 0.000244 210 -92.3879 -38.2681 210 -92.3879 -38.2681 210 -92.3879 38.2686 210 -92.3879 38.2686 210 -70.7107 -70.7104 210 -70.7107 -70.7104 210 -70.7107 70.7109 210 -38.2683 -92.3877 210 -38.2683 -92.3877 210 -38.2683 92.3882 210 0 -99.9998 210 0 -99.9998 210 0 -49.9998 210 0 100 210 38.2684 -92.3877 210 38.2684 -92.3877 210 38.2684 92.3882 210 46.194 -19.1339 210 50 0.000244 210 70.7107 -70.7104 210 70.7107 -70.7104 210 70.7107 70.7109 210 92.388 -38.2681 210 92.388 -38.2681 210 92.388 38.2686 210 92.388 38.2686 210 100 0.000244 210 100 0.000244 201.5 -50 0.000244 201.5 -50 0.000244 201.5 -46.194 -19.1339 201.5 -46.194 -19.1339 201.5 -46.194 19.1344 201.5 -46.194 19.1344 201.5 -35.3553 -35.3551 201.5 -35.3553 -35.3551 201.5 -35.3553 35.3556 201.5 -35.3553 35.3556 201.5 -19.1342 -46.1937 201.5 -19.1342 -46.1937 201.5 -19.1342 46.1942 201.5 -19.1342 46.1942 201.5 0 -49.9998 201.5 0 -49.9998 201.5 0 50.0002 201.5 0 50.0002 201.5 19.1342 -46.1937 201.5 19.1342 -46.1937 201.5 19.1342 46.1942 201.5 19.1342 46.1942 201.5 35.3554 -35.3551 201.5 35.3554 -35.3551 201.5 35.3554 35.3556 201.5 35.3554 35.3556 201.5 46.194 -19.1339 201.5 46.194 -19.1339 201.5 46.194 19.1344 201.5 46.194 19.1344 201.5 50 0.000244 201.5 50 0.000244 210 -50 0.000244 210 -46.194 -19.1339 210 -46.194 19.1344 210 -35.3553 -35.3551 210 -35.3553 35.3556 210 -19.1342 -46.1937 210 -19.1342 46.1942 210 0 -49.9998 210 0 50.0002 210 19.1342 -46.1937 210 19.1342 46.1942 210 35.3554 -35.3551 210 35.3554 35.3556 210 46.194 -19.1339 210 46.194 19.1344 210 50 0.000244 200 -82.9375 22.9375 200 22.9373 -82.9373 199.5 -4.75527 78.4552 199.5 -4.75527 78.4552 199.5 -4.75527 81.5453 199.5 -4.75527 81.5453 199.5 -2.93891 75.9552 199.5 -2.93891 75.9552 199.5 -2.93891 84.0453 199.5 -2.93891 84.0453 199.5 0 75.0002 199.5 0 75.0002 199.5 0 85.0002 199.5 0 85.0002 199.5 2.93894 75.9552 199.5 2.93894 75.9552 199.5 2.93894 84.0453 199.5 2.93894 84.0453 199.5 4.75529 78.4552 199.5 4.75529 78.4552 199.5 4.75529 81.5453 199.5 4.75529 81.5453 210 -4.75527 78.4552 210 -4.75527 81.5453 210 -2.93891 75.9552 210 -2.93891 84.0453 210 0 75.0002 210 0 85.0002 210 2.93894 75.9552 210 2.93894 84.0453 210 4.75529 78.4552 210 4.75529 81.5453 210 -81.2917 54.8752 210 -53.1602 82.4377 210 -27.3125 82.4377 210 -19.0096 96.219 210 -13.5312 82.4377 210 -4.10686 82.4377 210 0.250013 54.8752 210 0.250013 96.219 210 4.10689 82.4377 210 14.0313 82.4377 210 19.0096 96.219 210 27.8125 82.4377 210 53.1603 82.4377 210 81.2917 54.8752 210 -70.7107 70.7109 210 -38.2683 92.3882 210 38.2684 92.3882 210 70.7107 70.7109 + + + + + + + + + + -1 9.67554e-007 -4.95105e-006 -1 0 0 -1 0 0 -1 -1.2992e-005 3.09162e-005 -1 3.09164e-005 -1.29921e-005 -1 8.26763e-006 -3.65263e-006 -1 -8.13122e-006 -6.58167e-006 -1 -6.58166e-006 -8.13123e-006 -1 -6.55756e-006 7.88653e-006 -1 7.88653e-006 -6.55757e-006 -1 -6.86781e-006 -1.21319e-006 -1 7.73768e-006 6.27908e-006 -1 1.26999e-005 -2.25636e-006 -1 -2.25629e-006 1.26999e-005 -1 -2.16161e-006 -1.33856e-005 -1 -1.33856e-005 -2.16168e-006 -1 -4.74338e-015 3.22831e-005 -1 3.44932e-006 -2.73834e-005 -1 0 0 0 -1 0 -1 0 0 0 -0.923884 -0.382672 -1 0 0 0 -0.923884 0.382672 -1 0 0 0 -0.70713 -0.707083 -1 0 0 0 -0.70713 0.707083 -1 0 0 0 -0.382672 -0.923884 -1 0 0 0 -0.382672 0.923884 -1 0 0 0 0 -1 -1 0 0 0 0 1 -1 0 0 0 0.382672 -0.923884 -1 0 0 0 0.382672 0.923884 -1 0 0 0 0.70713 -0.707083 -1 0 0 0 0.70713 0.707083 -1 0 0 0 0.923884 -0.382672 -1 0 0 0 0.923884 0.382672 -1 0 0 0 1 0 0 -1 0 0 -0.923884 -0.382672 0 -0.923884 0.382672 0 -0.70713 -0.707083 0 -0.70713 0.707083 0 -0.382672 -0.923884 0 -0.382672 0.923884 0 0 -1 0 0 1 0 0.382672 -0.923884 0 0.382672 0.923884 0 0.70713 -0.707083 0 0.70713 0.707083 0 0.923884 -0.382672 0 0.923884 0.382672 0 1 0 -1 -1.4633e-005 3.71361e-007 -1 -8.25302e-006 1.93239e-006 -1 1.93239e-006 -8.25299e-006 -1 -1.52501e-006 -1.09196e-005 1 4.74338e-015 -3.22831e-005 -1 -3.05185e-005 3.05185e-005 -1 -3.05185e-005 3.05185e-005 -1 -3.05185e-005 3.05185e-005 -1 -3.05185e-005 3.05185e-005 -1 -3.05185e-005 3.05185e-005 -1 -3.05185e-005 3.05185e-005 -1 6.1037e-005 -6.1037e-005 -1 6.1037e-005 -6.1037e-005 -1 6.1037e-005 -6.1037e-005 -1 6.1037e-005 -6.1037e-005 -1 6.1037e-005 -6.1037e-005 -1 6.1037e-005 -6.1037e-005 -1 -3.05185e-005 3.05185e-005 0 -1 0 0 -0.923884 -0.382672 -1 -3.05185e-005 3.05185e-005 0 -0.923884 0.382672 -1 -3.05185e-005 3.05185e-005 0 -0.70713 -0.707083 0 -0.70713 0.707083 0 -0.382672 -0.923884 0 -0.382672 0.923884 -1 6.1037e-005 -6.1037e-005 0 0 -1 -1 6.1037e-005 -6.1037e-005 0 0 1 -1 6.1037e-005 -6.1037e-005 0 0.382672 -0.923884 0 0.382672 0.923884 0 0.707083 -0.70713 0 0.707083 0.70713 0 0.923884 -0.382672 0 0.923884 0.382672 0 1 0 1 0 0 1 3.05185e-005 3.05185e-005 1 -3.05185e-005 -0.000274667 1 -3.05185e-005 -0.000274667 1 0 0 1 -3.05185e-005 -0.000274667 1 -3.05185e-005 -0.000274667 1 -3.05185e-005 -0.000274667 1 -3.05185e-005 -0.000274667 1 -3.05185e-005 -0.000274667 1 -3.05185e-005 -0.000274667 1 -3.05185e-005 -0.000274667 1 -3.05185e-005 -0.000274667 1 -3.05185e-005 -0.000274667 1 -3.05185e-005 -0.000274667 1 -3.05185e-005 -0.000274667 0 -1 0 1 0 0 0 -0.923884 -0.382672 1 0 0 0 -0.923884 0.382672 1 0 0 0 -0.70713 -0.707083 1 0 0 0 -0.70713 0.707083 0 -0.382672 -0.923884 1 -3.05185e-005 -0.000274667 0 -0.382672 0.923884 0 0 -1 1 -3.05185e-005 -0.000274667 1 -3.05185e-005 -0.000274667 0 0 1 0 0.382672 -0.923884 1 -3.05185e-005 -0.000274667 0 0.382672 0.923884 1 -3.05185e-005 -0.000274667 1 -3.05185e-005 -0.000274667 0 0.707083 -0.70713 1 -3.05185e-005 -0.000274667 0 0.707083 0.70713 0 0.923884 -0.382672 1 -3.05185e-005 -0.000274667 0 0.923884 0.382672 1 -3.05185e-005 -0.000274667 0 1 0 1 -3.05185e-005 -0.000274667 0 1 0 1 0 0 0 0.923884 0.382672 1 0 0 0 0.923884 -0.382672 1 0 0 0 0.707083 0.70713 1 0 0 0 0.707083 -0.70713 1 0 0 0 0.382672 0.923884 1 0 0 0 0.382672 -0.923884 1 0 0 0 0 1 1 0 0 0 0 -1 1 0 0 0 -0.382672 0.923884 1 0 0 0 -0.382672 -0.923884 1 0 0 0 -0.70713 0.707083 1 0 0 0 -0.70713 -0.707083 1 0 0 0 -0.923884 0.382672 1 0 0 0 -0.923884 -0.382672 1 0 0 0 -1 0 1 0 0 0 1 0 0 0.923884 0.382672 0 0.923884 -0.382672 0 0.707083 0.70713 0 0.707083 -0.70713 0 0.382672 0.923884 0 0.382672 -0.923884 0 0 1 0 0 -1 0 -0.382672 0.923884 0 -0.382672 -0.923884 0 -0.70713 0.707083 0 -0.70713 -0.707083 0 -0.923884 0.382672 0 -0.923884 -0.382672 0 -1 0 1 -4.50532e-005 -0.000302355 -1 8.41207e-005 -6.48765e-005 -1 -4.31622e-005 5.68244e-005 0 0.951062 0.309 1 0 0 0 0.951062 -0.309 1 0 0 0 0.587786 0.809016 1 0 0 0 0.587786 -0.809016 1 0 0 0 0 1 1 0 0 0 0 -1 1 0 0 0 -0.587786 0.809016 1 0 0 0 -0.587786 -0.809016 1 0 0 0 -0.951062 0.309 1 0 0 0 -0.951062 -0.309 1 0 0 0 0.951062 0.309 0 0.951062 -0.309 0 0.587786 0.809016 0 0.587786 -0.809016 0 0 1 0 0 -1 0 -0.587786 0.809016 0 -0.587786 -0.809016 0 -0.951062 0.309 0 -0.951062 -0.309 1 1.80517e-006 4.42844e-005 1 2.85561e-007 -3.67577e-005 + + + + + + + + + + + + + + +

0 0 1 0 2 0 3 0 4 0

+

5 0 6 0 7 0 8 0 9 0 10 0

+
+ + + +

11 1 12 1 13 1 14 1

+
+ + + +

15 2 16 2 17 2 18 2

+
+ + + +

19 3 20 3 21 3 22 3

+
+ + + +

23 4 24 4 25 4 26 4

+
+ + + +

27 5 28 5 29 5 30 5

+
+ + + +

31 6 32 6 33 6 34 6

+
+ + + +

35 7 36 7 37 7 38 7

+
+ + + +

39 8 40 8 41 8 42 8

+
+ + + +

43 9 44 9 45 9 46 9

+
+ + + +

47 10 48 10 49 10 50 10 51 10

+

52 10 53 10 54 10 55 10

+
+ + + +

56 11 57 11 58 11 59 11

+
+ + + +

60 12 61 12 62 12 63 12 64 12

+

65 12 66 12 67 12 68 12

+
+ + + +

69 13 70 13 71 13 72 13 73 13

+

74 13 75 13 76 13 77 13

+
+ + + +

78 14 79 14 80 14 81 14 82 14

+

83 14 84 14 85 14 86 14

+
+ + + +

87 15 88 15 89 15 90 15 91 15

+

92 15 93 15 94 15 95 15

+
+ + + +

96 16 97 16 98 16

+
+ + + +

105 17 106 17 107 17

+
+ + + +

99 17 100 17 101 17 102 17 103 17 104 17

+
+ + + +

171 66 152 66 165 66

+
+ + + +

175 66 174 66 173 66 154 66

+

152 66 171 66 172 66 176 66 175 66 154 66

+
+ + + +

164 67 163 67 149 67

+
+ + + +

169 67 151 67 167 67 170 67

+

151 67 169 67 168 67 166 67 164 67 149 67

+
+ + + +

157 68 142 68 156 68

+
+ + + +

160 68 162 68 161 68 144 68

+

144 68 142 68 157 68 158 68 159 68 160 68

+
+ + + +

128 38 132 42 136 46 138 48 134 44 130 40 126 36 122 32 118 28 114 24 110 20 108 18 112 22 116 26 120 30 124 34

+

129 39 150 60 152 62 133 43

+

133 43 152 62 154 64 137 47

+

137 47 154 64 155 65 139 49

+

139 49 155 65 153 63 135 45

+

135 45 153 63 151 61 131 41

+

131 41 151 61 149 59 127 37

+

127 37 149 59 147 57 123 33

+

123 33 147 57 145 55 119 29

+

119 29 145 55 143 53 115 25

+

115 25 143 53 141 51 111 21

+

111 21 141 51 140 50 109 19

+

109 19 140 50 142 52 113 23

+

113 23 142 52 144 54 117 27

+

117 27 144 54 146 56 121 31

+

121 31 146 56 148 58 125 35

+

125 35 148 58 150 60 129 39

+
+ + + +

177 69 178 69 179 69 186 69 187 69 188 69

+
+ + + +

180 69 181 69 182 69 183 69 184 69 185 69

+
+ + + +

189 70 190 70 191 70

+
+ + + +

262 199 234 199 237 199 238 199 316 199 318 199 238 199 314 199 316 199 230 199 308 199 310 199 256 199 232 199 313 199 236 199 261 199 315 199 236 199 315 199 313 199 228 199 309 199 307 199 228 199 307 199 305 199 230 199 306 199 308 199

+
+ + + +

318 199 262 199 237 199 241 199 271 199 269 199 240 199 238 199

+

312 199 314 199 238 199 233 199

+

312 199 233 199 230 199 310 199

+

236 199 235 199 264 199 239 199

+

234 199 261 199 236 199 239 199 267 199 241 199

+

236 199 313 199 232 199 231 199 259 199 235 199

+

256 199 309 199 228 199 227 199 252 199 255 199 231 199 232 199

+

304 199 229 199 228 199 305 199

+

230 199 229 199 304 199 306 199

+
+ + + +

202 200 201 200 200 200

+
+ + + +

216 200 202 200 200 200 198 200 199 200

+

215 200 201 200 202 200 216 200 321 200 203 200 219 200

+
+ + + +

195 201 209 201 196 201 194 201

+

209 201 195 201 192 201 205 201 208 201 197 201 320 201

+

194 201 193 201 192 201 195 201

+
+ + + +

285 164 281 160 277 156 273 152 275 154 279 158 283 162 287 166 291 170 295 174 299 178 303 182 301 180 297 176 293 172 289 168

+

316 195 314 193 292 171 296 175

+

318 197 316 195 296 175 300 179

+

319 198 318 197 300 179 302 181

+

317 196 319 198 302 181 298 177

+

315 194 317 196 298 177 294 173

+

313 192 315 194 294 173 290 169

+

311 190 313 192 290 169 286 165

+

309 188 311 190 286 165 282 161

+

307 186 309 188 282 161 278 157

+

305 184 307 186 278 157 274 153

+

304 183 305 184 274 153 272 151

+

306 185 304 183 272 151 276 155

+

308 187 306 185 276 155 280 159

+

310 189 308 187 280 159 284 163

+

312 191 310 189 284 163 288 167

+

314 193 312 191 288 167 292 171

+
+ + + +

285 164 281 160 277 156 273 152 275 154 279 158 283 162 287 166 291 170 295 174 299 178 303 182 301 180 297 176 293 172 289 168

+

316 195 314 193 292 171 296 175

+

318 197 316 195 296 175 300 179

+

319 198 318 197 300 179 302 181

+

317 196 319 198 302 181 298 177

+

315 194 317 196 298 177 294 173

+

313 192 315 194 294 173 290 169

+

311 190 313 192 290 169 286 165

+

309 188 311 190 286 165 282 161

+

307 186 309 188 282 161 278 157

+

305 184 307 186 278 157 274 153

+

304 183 305 184 274 153 272 151

+

306 185 304 183 272 151 276 155

+

308 187 306 185 276 155 280 159

+

310 189 308 187 280 159 284 163

+

312 191 310 189 284 163 288 167

+

314 193 312 191 288 167 292 171

+

249 128 227 106 230 109 226 105 247 126 243 122 245 124

+

220 99 260 139 265 144 222 101

+

222 101 265 144 268 147 224 103

+

224 103 268 147 270 149 225 104

+

225 104 270 149 266 145 223 102

+

223 102 266 145 263 142 221 100

+

221 100 263 142 258 137 219 98

+

219 98 258 137 254 133 215 94

+

215 94 254 133 251 130 212 91

+

212 91 251 130 248 127 210 89

+

210 89 248 127 244 123 206 85

+

206 85 244 123 242 121 205 84

+

205 84 242 121 246 125 208 87

+

208 87 246 125 250 129 211 90

+

211 90 250 129 253 132 213 92

+

213 92 253 132 257 136 217 96

+

217 96 257 136 260 139 220 99

+
+ + + +

363 232 360 232 351 232 363 232 351 232 350 232 343 232 357 232 354 232 354 232 342 232 343 232 358 232 346 232 344 232 348 232 346 232 358 232

+
+ + + +

365 232 369 232 364 232 363 232 350 232 348 232 358 232

+

358 232 344 232 342 232 354 232 353 232 366 232 352 232

+
+ + + +

349 233 360 233 361 233 356 233 357 233 345 233

+
+ + + +

364 233 368 233 362 233 359 233 347 233 349 233 361 233

+

345 233 347 233 359 233 355 233 367 233 353 233 356 233

+
+ + + +

329 209 325 205 323 203 327 207 331 211 335 215 339 219 341 221 337 217 333 213

+

351 231 349 229 336 216 340 220

+

350 230 351 231 340 220 338 218

+

348 228 350 230 338 218 334 214

+

346 226 348 228 334 214 330 210

+

344 224 346 226 330 210 326 206

+

342 222 344 224 326 206 322 202

+

343 223 342 222 322 202 324 204

+

345 225 343 223 324 204 328 208

+

347 227 345 225 328 208 332 212

+

349 229 347 227 332 212 336 216

+
+
+ + + CAT3DBagRep + + +
+ + + + 300.449 -114.555 9.7512 300.323 -114.555 59.7512 300.323 -114.555 34.8756 312.479 -114.555 34.6268 312.479 -114.555 34.6268 349.822 -114.555 59.2537 312.479 -114.555 34.8756 350.449 -114.555 9.6517 360.449 -114.555 9.7512 360.449 -114.555 59.5012 360.449 -114.555 59.5012 398.136 -114.555 59.7512 398.136 -114.555 59.7512 410.449 -114.555 51.4012 410.449 -114.555 51.4012 410.136 -114.555 43.1012 410.136 -114.555 43.1012 397.511 -114.555 34.5012 397.511 -114.555 34.5012 361.199 -114.555 34.5012 372.261 -114.555 34.7512 410.449 -114.555 9.6512 420.449 -114.555 9.7512 439.868 -114.555 9.4512 430.158 -114.555 10.2012 430.158 -114.555 59.7512 430.158 -114.555 59.7512 419.998 -114.555 50.9512 490.54 -114.555 59.3092 450.219 -114.555 59.3092 450.219 -114.555 59.3092 449.868 -114.555 42.9535 449.868 -114.555 42.9535 479.407 -114.555 42.9535 479.407 -114.555 42.9535 489.637 -114.555 34.3092 489.637 -114.555 34.3092 489.637 -114.555 18.8377 489.637 -114.555 18.8377 479.407 -114.555 10.1932 479.407 -114.555 10.1932 461.353 -114.555 9.7512 461.353 -114.555 9.7512 450.671 -114.555 17.4624 500.54 -114.555 19.9158 500.101 -114.555 49.9254 500.101 -114.555 49.9254 509.915 -114.555 58.88 509.915 -114.555 58.88 519.388 -114.555 58.88 519.388 -114.555 58.88 529.788 -114.555 51.2323 529.788 -114.555 51.2323 530.228 -114.555 19.4317 530.228 -114.555 19.4317 520.755 -114.555 10.4773 520.755 -114.555 10.4773 511.722 -114.555 10.4773 511.722 -114.555 10.4773 500.101 -114.555 19.9158 540.228 -114.555 34.7762 580.138 -114.555 34.576 600.228 -114.555 9.7512 619.647 -114.555 9.4512 609.937 -114.555 10.2012 609.937 -114.555 59.7512 609.937 -114.555 59.7512 599.777 -114.555 50.9512 + + + + + + + + + + + + + +

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

+
+
+ + + CAT3DBagRep + + +
+ + + + 45.3272 20 158.134 45.3272 20 158.134 45.3272 20 158.134 288.097 12 257.948 288.097 12 257.948 298.439 -12 227.665 298.439 -12 227.665 299.732 0 223.879 299.732 0 223.879 40.1565 -12.0002 173.276 40.1565 -12.0002 173.276 40.1565 -12.0002 173.276 45.3272 20 158.134 45.3272 20 158.134 45.3272 20 158.134 45.3272 20 158.134 45.4539 -0.000183 239.243 45.4539 -0.000183 239.243 45.4539 -0.000183 239.243 45.4539 -0.000183 239.243 45.4539 -0.000183 239.243 59.1825 50.5904 234.145 59.1825 50.5904 234.145 59.1825 50.5904 234.145 59.1825 50.5904 234.145 80.9819 84.3176 170.311 80.9819 84.3176 170.311 80.9819 84.3176 170.311 80.9819 84.3176 170.311 80.9821 -84.3176 170.31 80.9821 -84.3176 170.31 80.9821 -84.3176 170.31 80.9821 -84.3176 170.31 95.0387 0.000107 94.0457 95.0387 0.000107 94.0457 95.0387 0.000107 94.0457 95.0387 0.000107 94.0457 102.781 50.5907 106.476 102.781 50.5907 106.476 102.781 50.5907 106.476 102.781 -50.5904 106.476 102.781 -50.5904 106.476 102.781 -50.5904 106.476 102.781 -50.5904 106.476 228.718 -22.932 303.844 228.718 -22.932 303.844 228.718 -22.932 303.844 228.718 -22.932 303.844 254.127 -81.8999 229.44 254.127 -81.8999 229.44 254.127 -81.8999 229.44 254.127 -81.8999 229.44 254.127 -81.8999 229.44 254.127 81.8999 229.44 254.127 81.8999 229.44 254.127 81.8999 229.44 254.127 81.8999 229.44 257.278 -40.4257 287.473 257.278 -40.4257 287.473 257.278 -40.4257 287.473 257.278 40.4257 287.473 257.278 40.4257 287.473 257.278 40.4257 287.473 257.278 40.4257 287.473 279.537 22.932 155.035 279.537 22.932 155.035 279.537 22.932 155.035 279.537 22.932 155.035 286.805 0 261.733 286.805 0 261.733 288.097 -12 257.948 288.097 12 257.948 292.117 40.4257 185.456 292.117 40.4257 185.456 292.117 40.4257 185.456 292.117 -40.4257 185.456 292.117 -40.4257 185.456 292.117 -40.4257 185.456 292.117 -40.4257 185.456 292.117 -40.4257 185.456 293.268 20 242.806 293.268 20 242.806 293.268 20 242.806 293.268 -20 242.806 293.268 -20 242.806 298.439 12 227.665 39.5118 20.0464 184.393 39.5118 20.0464 184.393 39.5118 -20.0466 184.392 39.5118 -20.0466 184.392 45.4539 -0.000183 239.243 45.4539 -0.000183 239.243 45.4539 -0.000183 239.243 48.1498 33.4108 159.098 48.1498 33.4108 159.098 48.1498 -33.4109 159.098 48.1498 -33.4109 159.098 48.683 44.2517 221.629 48.683 -44.252 221.628 50.4123 46.0289 224.723 50.4123 46.0289 224.723 50.4124 -46.0292 224.723 50.4124 -46.0292 224.723 53.7326 -0.000198 250.104 54.8226 -23.6091 246.912 54.8226 23.6087 246.912 56.5345 65.0762 198.637 56.5345 65.0762 198.637 56.5346 -65.0764 198.637 56.5346 -65.0764 198.637 56.7878 20.0466 133.804 56.7879 -20.0464 133.804 56.7879 -20.0464 133.804 59.1825 50.5904 234.145 59.1826 -50.5907 234.145 67.7511 73.7531 165.792 67.7512 -73.7531 165.792 78.9676 65.0763 132.947 78.9677 -65.0763 132.947 86.8192 44.252 109.956 86.8193 -44.2518 109.956 90.0801 46.0291 108.565 90.0801 46.0291 108.565 90.0802 -46.029 108.565 95.0387 0.000107 94.0457 95.0387 0.000107 94.0457 95.0387 0.000107 94.0457 95.0387 0.000107 94.0457 102.781 50.5907 106.476 102.781 -50.5904 106.476 107.141 23.6091 93.7092 107.141 -23.6088 93.709 108.231 0.000153 90.5174 227.659 0 306.945 227.659 0 306.945 228.718 -22.932 303.844 228.718 22.9319 303.844 228.718 22.9319 303.844 228.718 22.9319 303.844 232.953 -49.14 291.444 232.953 49.1399 291.444 252.923 0 300.225 257.278 -40.4257 287.473 257.278 40.4257 287.473 257.278 40.4257 287.473 264.451 59.4495 266.469 264.451 -59.4495 266.469 274.697 67.3761 236.464 274.697 67.3761 236.464 274.697 -67.3761 236.464 275.302 -49.14 167.435 275.302 49.1399 167.435 276.642 -27.3839 275.71 276.642 27.3839 275.71 279.537 -22.932 155.035 279.537 -22.932 155.035 279.537 22.932 155.035 280.595 0 151.934 280.595 0 151.934 284.944 -59.4495 206.459 284.944 -59.4495 206.459 284.944 59.4495 206.459 288.442 -45.6398 241.158 288.442 -45.6398 241.158 288.442 -45.6398 241.158 288.442 45.6397 241.158 288.442 45.6397 241.158 292.117 40.4257 185.456 292.117 40.4257 185.456 292.117 -40.4257 185.456 296.472 0 172.704 296.472 0 172.704 300.241 -27.3839 206.605 300.241 27.3838 206.605 37.3522 -0.000183 190.716 38.8637 -0.000198 177.061 40.1564 11.9998 173.276 43.916 -0.000198 235.588 45.3273 -20 158.134 50.498 12.0001 142.993 50.498 -11.9999 142.993 51.7907 0.000107 139.208 58.5792 67.6897 200.808 58.5793 -67.6899 200.808 58.9473 0.000107 127.48 65.5375 -0.000183 256.969 66.6621 -24.3602 253.676 66.6621 24.3598 253.676 68.1587 74.3978 207.86 68.1588 -74.3979 207.86 70.2462 76.715 166.644 70.2463 -76.7151 166.644 71.1607 52.1999 240.503 71.1608 -52.2001 240.503 80.4225 76.7646 213.382 80.4226 -76.7648 213.382 81.9132 67.6898 132.48 81.9133 -67.6898 132.48 91.5863 0.000107 95.9966 93.6537 87 174.638 93.6538 -87.0001 174.638 93.8051 74.3979 132.761 93.8053 -74.3977 132.761 106.885 76.7648 135.894 106.885 -76.7646 135.893 116.147 52.2001 108.773 116.147 -52.1999 108.772 120.645 -24.3599 95.5994 120.645 24.3602 95.5995 121.77 0.000137 92.3062 201.747 0 303.485 202.872 -24.36 300.192 202.872 24.36 300.192 207.37 -52.2 287.019 207.37 52.2 287.019 216.632 76.7647 259.898 216.632 -76.7648 259.897 229.863 -87.0001 221.153 229.863 87 221.153 241.672 -72.2646 265.913 241.672 72.2646 265.913 243.095 -76.7648 182.409 243.095 76.7647 182.409 252.356 -52.2 155.288 252.356 52.2 155.288 256.855 -24.36 142.115 256.855 24.36 142.115 257.98 0 138.822 266.583 -72.2646 192.967 266.583 72.2646 192.967 273.692 0 284.349 303.191 0 197.967 117.12 -19 74.7717 124.284 -6.20316 53.7964 124.906 -12.1352 51.9723 121.615 -32.9089 61.6091 115.475 0 79.5895 123.632 0 55.7038 124.284 -6.20316 53.7964 117.12 -19 74.7717 117.12 19 74.7717 123.145 4.63525 57.129 123.632 0 55.7038 115.475 0 79.5895 117.12 19 74.7717 124.038 6.64183 54.5154 123.145 4.63525 57.129 121.615 32.909 61.6091 125.784 10.5673 49.4023 124.038 6.64183 54.5154 117.12 19 74.7717 127.756 38 43.6287 127.756 15 43.6287 125.784 10.5673 49.4023 121.615 32.909 61.6091 133.896 32.909 25.6483 129.728 10.5673 37.8551 127.756 15 43.6287 127.756 38 43.6287 138.391 19 12.4856 131.474 6.64182 32.7421 129.728 10.5673 37.8551 133.896 32.909 25.6483 132.366 4.63524 30.1284 131.474 6.64182 32.7421 138.391 19 12.4856 140.036 0 7.66779 131.879 0 31.5536 132.366 4.63524 30.1284 138.391 19 12.4856 138.391 -19 12.4856 131.228 -6.20316 33.4611 131.879 0 31.5536 140.036 0 7.66779 133.896 -32.9089 25.6482 130.605 -12.1352 35.285 131.228 -6.20316 33.4611 138.391 -19 12.4856 133.896 -32.9089 25.6482 130.02 -12.1352 36.9984 130.605 -12.1352 35.285 127.756 -38 43.6287 127.756 -12.1352 43.6287 130.02 -12.1352 36.9984 133.896 -32.9089 25.6482 121.615 -32.9089 61.6091 125.492 -12.1352 50.259 127.756 -12.1352 43.6287 127.756 -38 43.6287 124.906 -12.1352 51.9723 125.492 -12.1352 50.259 121.615 -32.9089 61.6091 -57.8741 -35.0002 -15.8303 -57.8741 34.9998 -15.8303 -55.4679 34.9998 -22.8762 -55.4679 -35.0002 -22.8762 -36.5985 34.9998 -47.5452 -36.5985 -35.0002 -47.5452 -55.4679 -35.0002 -22.8762 -55.4679 34.9998 -22.8762 -7.92261 34.9998 -59.4746 -7.92261 -35.0002 -59.4746 -36.5984 -35.0002 -47.5453 -36.5984 34.9998 -47.5453 22.8761 34.9998 -55.4678 22.8761 -35.0002 -55.4678 -7.92258 -35.0002 -59.4745 -7.92258 34.9998 -59.4745 47.5453 34.9998 -36.5985 47.5452 -35.0002 -36.5985 22.8761 -35.0002 -55.4679 22.8761 34.9998 -55.4679 85.1925 34.9998 -23.742 85.1924 -35.0002 -23.742 47.5452 -35.0002 -36.5984 47.5453 34.9998 -36.5984 85.1925 34.9998 -23.742 143.915 49.9998 -3.68835 143.915 -50.0002 -3.68835 109.779 -50.0002 -15.3458 85.1924 -35.0002 -23.742 85.1925 34.9998 -23.742 109.78 49.9998 -15.3452 143.915 49.9998 -3.68835 -57.8741 34.9998 -15.8303 -57.8741 -35.0002 -15.8303 -58.0354 -35.0002 15.2276 -58.0354 34.9998 15.2276 -58.0354 34.9998 15.2276 -58.0354 -35.0002 15.2276 -42.6463 -35.0002 42.2053 -42.6463 34.9998 42.2053 -42.6463 34.9998 42.2053 -42.6463 -35.0002 42.2053 -15.8301 -35.0002 57.874 -15.8301 34.9998 57.874 -15.8301 34.9998 57.874 -15.8301 -35.0002 57.874 15.2277 -35.0002 58.0353 15.2277 34.9998 58.0353 52.8748 34.9998 70.892 15.2277 34.9998 58.0354 15.2277 -35.0002 58.0355 52.8749 -35.0002 70.8919 52.8748 34.9998 70.892 52.8749 -35.0002 70.8919 77.4612 -50.0002 79.2881 111.597 -50.0002 90.9456 111.597 49.9998 90.9456 52.8748 34.9998 70.892 111.597 49.9998 90.9456 77.4626 49.9998 79.2886 109.78 49.9998 -15.3452 77.4627 49.9998 79.2886 111.597 49.9998 90.9455 143.915 49.9998 -3.68829 109.779 -50.0002 -15.3458 143.915 -50.0002 -3.68829 111.597 -50.0002 90.9456 77.4612 -50.0002 79.2881 111.597 49.9998 90.9455 111.597 -50.0002 90.9455 143.915 -50.0002 -3.68842 143.915 49.9998 -3.68829 109.78 49.9998 -15.3452 85.1925 34.9998 -23.742 52.8748 34.9998 70.8918 77.4627 49.9998 79.2886 85.1924 -35.0002 -23.742 109.779 -50.0002 -15.3458 77.4612 -50.0002 79.2881 52.8748 -35.0002 70.8919 -42.6463 34.9998 42.2053 -15.83 34.9998 57.874 15.2277 34.9998 58.0354 -58.0354 34.9998 15.2276 -42.6463 34.9998 42.2053 15.2277 34.9998 58.0354 -58.0354 34.9998 15.2276 15.2277 34.9998 58.0354 52.8748 34.9998 70.8918 85.1925 34.9998 -23.7419 47.5453 34.9998 -36.5986 -36.5985 34.9998 -47.5453 -55.4679 34.9998 -22.8762 -57.874 34.9998 -15.8303 47.5453 34.9998 -36.5986 22.8761 34.9998 -55.4678 -7.92258 34.9998 -59.4746 47.5453 34.9998 -36.5986 -7.92258 34.9998 -59.4746 -36.5985 34.9998 -47.5453 -7.92264 -35.0002 -59.4745 22.876 -35.0002 -55.4677 47.5452 -35.0002 -36.5985 -36.5984 -35.0002 -47.5453 -7.92264 -35.0002 -59.4745 47.5452 -35.0002 -36.5985 -36.5984 -35.0002 -47.5453 47.5452 -35.0002 -36.5985 85.1923 -35.0002 -23.742 52.8748 -35.0002 70.8919 15.2277 -35.0002 58.0354 -58.0355 -35.0002 15.2277 -57.8741 -35.0002 -15.8302 -55.4678 -35.0002 -22.8761 15.2277 -35.0002 58.0354 -15.8301 -35.0003 57.874 -42.6463 -35.0002 42.2053 15.2277 -35.0002 58.0354 -42.6463 -35.0002 42.2053 -58.0355 -35.0002 15.2277 361.272 -50 308.25 361.272 50 308.25 304.89 50 287.729 304.89 -50 287.729 381.844 50 76.298 381.844 -50 76.298 304.89 -50 287.729 304.89 50 287.729 438.226 50 96.8192 381.844 50 76.298 304.89 50 287.729 361.272 50 308.25 438.226 -50 96.8192 438.226 50 96.8192 361.272 50 308.25 361.272 -50 308.25 381.844 -50 76.298 438.226 -50 96.8192 361.272 -50 308.25 304.89 -50 287.729 438.226 -50 96.8192 381.844 -50 76.298 381.844 50 76.298 438.226 50 96.8192 421.122 34.9997 143.813 415.135 30.3106 160.261 458.051 30.3106 174.917 463.706 34.9997 158.356 427.108 30.3106 127.365 421.122 34.9997 143.813 463.706 34.9997 158.356 469.362 30.3106 141.795 431.491 17.4997 115.325 427.108 30.3106 127.365 469.362 30.3106 141.795 473.502 17.4997 129.671 433.095 -0.000326 110.917 431.491 17.4997 115.325 473.502 17.4997 129.671 475.017 -0.000336 125.234 475.017 -0.000336 125.234 473.502 17.4997 129.671 469.362 30.3106 141.795 463.706 34.9997 158.356 458.051 30.3106 174.917 453.91 17.4997 187.04 452.395 -0.00032 191.478 453.91 -17.5003 187.04 458.051 -30.3112 174.917 463.706 -35.0003 158.356 469.362 -30.3112 141.795 473.502 -17.5003 129.671 427.108 -30.3112 127.365 431.491 -17.5003 115.325 473.502 -17.5003 129.671 469.362 -30.3112 141.795 421.122 -35.0003 143.813 427.108 -30.3112 127.365 469.362 -30.3112 141.795 463.706 -35.0003 158.356 415.135 -30.3112 160.261 421.122 -35.0003 143.813 463.706 -35.0003 158.356 458.051 -30.3112 174.917 410.753 -17.5003 172.302 415.135 -30.3112 160.261 458.051 -30.3112 174.917 453.91 -17.5003 187.04 409.149 -0.000312 176.709 410.753 -17.5003 172.302 453.91 -17.5003 187.04 452.395 -0.00032 191.478 410.753 17.4997 172.302 409.149 -0.000312 176.709 452.395 -0.00032 191.478 453.91 17.4997 187.04 415.135 30.3106 160.261 410.753 17.4997 172.302 453.91 17.4997 187.04 458.051 30.3106 174.917 410.753 17.4997 172.302 415.135 30.3106 160.261 421.122 34.9997 143.813 427.108 30.3106 127.365 431.491 17.4997 115.325 433.095 -0.000326 110.917 431.491 -17.5003 115.325 427.108 -30.3112 127.365 421.122 -35.0003 143.813 415.135 -30.3112 160.261 410.753 -17.5003 172.302 409.149 -0.000312 176.709 431.491 -17.5003 115.325 433.095 -0.000326 110.917 475.017 -0.000336 125.234 473.502 -17.5003 129.671 370.316 -30.3112 107.971 374.699 -17.5003 95.9301 376.303 -0.000313 91.5229 374.699 17.4997 95.9301 370.317 30.3106 107.971 364.33 34.9997 124.419 358.343 30.3106 140.867 353.961 17.4997 152.907 352.357 -0.000302 157.315 353.961 -17.5003 152.907 358.343 -30.3112 140.867 364.33 -35.0003 124.419 139.067 -0.000259 10.5067 137.552 -17.5003 14.9442 133.411 -30.3112 27.0676 127.756 -35.0002 43.6285 122.1 -30.3112 60.1895 117.96 -17.5003 72.3129 116.445 -0.000259 76.7504 117.96 17.4997 72.3129 122.1 30.3106 60.1895 127.756 34.9997 43.6285 133.411 30.3106 27.0676 137.552 17.4997 14.9442 376.303 -0.000313 91.5229 139.067 -0.000259 10.5067 137.552 17.4997 14.9442 374.699 17.4997 95.9301 374.699 17.4997 95.9301 137.552 17.4997 14.9442 133.411 30.3106 27.0676 370.317 30.3106 107.971 370.317 30.3106 107.971 133.411 30.3106 27.0676 127.756 34.9997 43.6285 364.33 34.9997 124.419 364.33 34.9997 124.419 127.756 34.9997 43.6285 122.1 30.3106 60.1895 358.343 30.3106 140.867 358.343 30.3106 140.867 122.1 30.3106 60.1895 117.96 17.4997 72.3129 353.961 17.4997 152.907 353.961 17.4997 152.907 117.96 17.4997 72.3129 116.445 -0.000259 76.7504 352.357 -0.000302 157.315 352.357 -0.000302 157.315 116.445 -0.000259 76.7504 117.96 -17.5003 72.3129 353.961 -17.5003 152.907 353.961 -17.5003 152.907 117.96 -17.5003 72.3129 122.1 -30.3112 60.1895 358.343 -30.3112 140.867 358.343 -30.3112 140.867 122.1 -30.3112 60.1895 127.756 -35.0002 43.6285 364.33 -35.0003 124.419 364.33 -35.0003 124.419 127.756 -35.0002 43.6285 133.411 -30.3112 27.0676 370.316 -30.3112 107.971 370.316 -30.3112 107.971 133.411 -30.3112 27.0676 137.552 -17.5003 14.9442 374.699 -17.5003 95.9301 374.699 -17.5003 95.9301 137.552 -17.5003 14.9442 139.067 -0.000259 10.5067 376.303 -0.000313 91.5229 39.8673 -10.0001 174.572 17.0176 -10 166.769 19.3834 -17.3206 159.841 41.206 -17.3206 167.294 42.5839 -17.3206 167.764 45.3273 -20.0001 158.134 40.5957 -12.6797 171.989 42.5839 -17.3206 167.764 19.3834 -17.3206 159.841 22.6151 -20 150.378 45.3273 -20.0001 158.134 49.0474 -17.3206 148.838 50.0589 -12.6793 144.279 45.3273 -20.0001 158.134 22.6151 -20 150.378 25.8469 -17.3206 140.915 49.0474 -17.3206 148.838 45.3273 -20.0001 158.134 49.0474 -17.3206 148.838 25.8469 -17.3206 140.915 28.2127 -10 133.987 50.6428 -10.0001 141.647 51.0624 -10.0001 141.79 51.7908 0 139.207 50.6078 -10.9808 142.671 51.0624 -10.0001 141.79 28.2127 -10 133.987 29.0786 0 131.451 51.7908 0 139.207 51.0624 9.99994 141.79 50.6078 10.9809 142.671 51.7908 0 139.207 29.0786 0 131.451 28.2127 9.99995 133.987 51.0624 9.99994 141.79 51.7908 0 139.207 51.0624 9.99994 141.79 28.2127 9.99995 133.987 25.8469 17.3205 140.915 47.6695 17.3205 148.367 42.5839 17.3205 167.764 40.5956 12.6794 171.99 45.3272 19.9999 158.134 49.0474 17.3205 148.838 45.3272 19.9999 158.134 50.0588 12.6795 144.279 25.8469 17.3205 140.915 22.6151 20 150.378 45.3272 19.9999 158.134 49.0474 17.3205 148.838 45.3272 19.9999 158.134 22.6151 20 150.378 19.3834 17.3205 159.841 42.5839 17.3205 167.764 42.5839 17.3205 167.764 19.3834 17.3205 159.841 17.0176 9.99995 166.769 39.4477 9.99994 174.429 39.8673 9.99994 174.572 38.8638 0 177.061 40.0466 10.9806 173.597 39.8673 9.99994 174.572 17.0176 9.99995 166.769 16.1516 0 169.305 38.8638 0 177.061 16.1516 0 169.305 17.0176 9.99995 166.769 19.3834 17.3205 159.841 22.6151 20 150.378 25.8469 17.3205 140.915 28.2127 9.99995 133.987 29.0786 0 131.451 28.2127 -10 133.987 25.8469 -17.3206 140.915 22.6151 -20 150.378 19.3834 -17.3206 159.841 17.0176 -10 166.769 16.1516 0 169.305 17.0176 -10 166.769 39.8673 -10.0001 174.572 38.8638 0 177.061 39.8673 -10.0001 174.572 40.0467 -10.9808 173.597 38.8638 0 177.061 296.063 17.3203 233.194 298 12.6797 228.951 293.268 19.9998 242.806 321.658 19.9998 252.501 324.89 17.3203 243.038 296.063 17.3203 233.194 293.268 19.9998 242.806 298.743 9.99982 226.373 297.295 17.3203 233.614 324.89 17.3203 243.038 327.256 9.9998 236.11 298.549 10.9804 227.343 298.743 9.99982 226.373 299.732 -0.000179 223.879 327.256 9.9998 236.11 328.122 -0.000198 233.575 299.732 -0.000179 223.879 298.743 9.99982 226.373 298.743 -10.0002 226.373 298.549 -10.981 227.343 299.732 -0.000179 223.879 298.743 -10.0002 226.373 299.732 -0.000179 223.879 328.122 -0.000198 233.575 327.256 -10.0002 236.11 296.063 -17.3207 233.194 299.118 -10.0002 226.501 327.256 -10.0002 236.11 324.89 -17.3207 243.038 296.063 -17.3207 233.194 293.268 -20.0002 242.806 298 -12.6793 228.95 324.89 -17.3207 243.038 321.658 -20.0002 252.501 293.268 -20.0002 242.806 296.063 -17.3207 233.194 289.6 -17.3207 252.12 288.536 -12.6794 256.662 293.268 -20.0002 242.806 289.6 -17.3207 252.12 293.268 -20.0002 242.806 321.658 -20.0002 252.501 318.427 -17.3207 261.965 287.548 -10.0002 259.155 290.832 -17.3207 252.541 318.427 -17.3207 261.965 316.061 -10.0002 268.892 287.988 -10.9809 258.269 287.548 -10.0002 259.155 286.805 -0.000166 261.733 287.548 9.99983 259.155 287.987 10.9804 258.269 286.805 -0.000166 261.733 287.548 9.99983 259.155 286.805 -0.000166 261.733 315.195 -0.000183 271.428 316.061 9.99982 268.892 316.061 -10.0002 268.892 315.195 -0.000183 271.428 286.805 -0.000166 261.733 287.548 -10.0002 259.155 315.195 -0.000183 271.428 316.061 -10.0002 268.892 318.427 -17.3207 261.965 321.658 -20.0002 252.501 324.89 -17.3207 243.038 327.256 -10.0002 236.11 328.122 -0.000198 233.575 327.256 9.9998 236.11 324.89 17.3203 243.038 321.658 19.9998 252.501 318.427 17.3203 261.965 316.061 9.99982 268.892 289.6 17.3203 252.12 287.923 9.99983 259.283 316.061 9.99982 268.892 318.427 17.3203 261.965 293.268 19.9998 242.806 289.6 17.3203 252.12 318.427 17.3203 261.965 321.658 19.9998 252.501 288.537 12.6797 256.661 289.6 17.3203 252.12 293.268 19.9998 242.806 40.1798 11.7087 172.873 39.4477 9.99994 174.429 39.8673 9.99994 174.572 50.2704 11.7089 143.326 47.6695 17.3205 148.367 49.0474 17.3205 148.838 50.2704 -11.7088 143.325 50.6428 -10.0001 141.647 51.0624 -10.0001 141.79 40.1798 -11.7089 172.873 41.206 -17.3206 167.294 42.5839 -17.3206 167.764 288.314 11.7086 257.611 287.548 9.99983 259.155 287.923 9.99983 259.283 298.405 11.7087 228.063 296.063 17.3203 233.194 297.295 17.3203 233.614 298.405 -11.709 228.063 298.743 -10.0002 226.373 299.118 -10.0002 226.501 288.314 -11.7087 257.612 289.6 -17.3207 252.12 290.832 -17.3207 252.541 354.429 -169 213.342 361.018 -169 219.931 361.018 -50 219.931 354.429 -50 213.342 352.018 -169 204.342 354.429 -169 213.342 354.429 -50 213.342 352.018 -50 204.342 354.429 -169 195.342 352.018 -169 204.342 352.018 -50 204.342 354.429 -50 195.342 361.018 -169 188.754 354.429 -169 195.342 354.429 -50 195.342 361.018 -50 188.754 370.018 -169 186.342 361.018 -169 188.754 361.018 -50 188.754 370.018 -50 186.342 379.018 -169 188.754 370.018 -169 186.342 370.018 -50 186.342 379.018 -50 188.754 385.606 -169 195.342 379.018 -169 188.754 379.018 -50 188.754 385.606 -50 195.342 388.018 -169 204.342 385.606 -169 195.342 385.606 -50 195.342 388.018 -50 204.342 385.606 -169 213.342 388.018 -169 204.342 388.018 -50 204.342 385.606 -50 213.342 379.018 -169 219.931 385.606 -169 213.342 385.606 -50 213.342 379.018 -50 219.931 370.018 -50 222.342 379.018 -50 219.931 385.606 -50 213.342 388.018 -50 204.342 385.606 -50 195.342 379.018 -50 188.754 370.018 -50 186.342 361.018 -50 188.754 354.429 -50 195.342 352.018 -50 204.342 354.429 -50 213.342 361.018 -50 219.931 361.018 -169 219.931 370.018 -169 222.342 370.018 -50 222.342 361.018 -50 219.931 370.018 -169 222.342 361.018 -169 219.931 354.429 -169 213.342 352.018 -169 204.342 354.429 -169 195.342 361.018 -169 188.754 370.018 -169 186.342 379.018 -169 188.754 385.606 -169 195.342 388.018 -169 204.342 385.606 -169 213.342 379.018 -169 219.931 370.018 -169 222.342 379.018 -169 219.931 379.018 -50 219.931 370.018 -50 222.342 + + + + + + + + + + -0.240883 -0.88447 0.399609 0.0538347 0.884468 -0.463485 0.213691 -0.296213 -0.930911 -0.240883 -0.88447 0.399609 0.240486 0.883887 -0.401135 0.882696 -0.3726 0.286386 0.971593 -0.233253 0.0400098 0.971593 -0.233253 0.0400098 0.991206 0 0.132328 -0.974219 0.22425 -0.0246895 -0.974219 -0.22425 -0.0246895 -0.911491 -0.216926 -0.349467 -0.974219 0.22425 -0.0246895 -0.895997 0.321818 -0.305979 -0.870986 0.144566 -0.469558 -0.801737 -0.223518 -0.554308 -0.974219 0.22425 -0.0246895 -0.918291 -0.333537 0.213294 -0.400311 0.296213 0.867184 -0.346873 -0.612903 0.70995 -0.260659 0 0.965431 -0.974219 0.22425 -0.0246895 -0.858742 0.512192 -0.014893 -0.346904 0.611896 0.710803 -0.210242 0.886555 0.412091 -0.780849 0.564959 -0.26664 -0.708154 0.510453 -0.487808 0.0538347 0.884468 -0.463485 0.0618305 0.997863 0.0211188 -0.918291 -0.333537 0.213294 -0.755775 -0.585437 -0.293374 -0.346873 -0.612903 0.70995 -0.0932035 -0.995112 -0.0326243 -0.801737 -0.223518 -0.554308 -0.631855 0 -0.775086 0.213691 -0.296213 -0.930911 0.384289 0 -0.923213 -0.595965 0.333537 -0.730465 0.159795 0.612903 -0.773831 0.245552 0.297525 -0.922596 -0.801737 -0.223518 -0.554308 -0.693471 -0.485977 -0.531907 0.054445 -0.883806 -0.464675 0.160283 -0.611896 -0.774527 -0.346873 -0.612903 0.70995 -0.214057 0.29722 0.930505 -0.160955 -0.611957 0.77434 0.706168 0 0.708045 -0.240883 -0.88447 0.399609 -0.160955 -0.611957 0.77434 -0.0550859 -0.883879 0.464461 0.240272 -0.884526 -0.399853 0.360881 -0.923561 0.129612 -0.210242 0.886555 0.412091 -0.0233772 0.880863 0.472793 0.240486 0.883887 -0.401135 0.624134 0.751683 0.213141 0.224006 -0.818064 0.52971 0.706168 0 0.708045 0.809406 -0.228065 0.541154 -0.214057 0.29722 0.930505 -0.0233772 0.880863 0.472793 0.624134 0.751683 0.213141 0.809415 0.228034 0.541154 0.245552 0.297525 -0.922596 0.346263 0.611957 -0.711063 0.399792 -0.29722 -0.867079 0.691491 0.270974 -0.669637 0.809415 0.228034 0.541154 0.865116 0 0.501572 0.809406 -0.228065 0.541154 0.809415 0.228034 0.541154 0.501206 0.818081 -0.282022 0.971348 0.228034 0.0669576 0.991755 0 -0.128147 0.240272 -0.884526 -0.399853 0.399792 -0.29722 -0.867079 0.882696 -0.3726 0.286386 0.971593 -0.233253 0.0400098 0.991755 0 -0.128147 0.624134 0.751683 0.213141 0.928169 0.195074 0.316935 0.971348 0.228034 0.0669576 0.809406 -0.228065 0.541154 0.882696 -0.3726 0.286386 0.971348 0.228034 0.0669576 -0.974219 0.22425 -0.0246895 -0.974219 0.22425 -0.0246895 -0.974219 -0.22425 -0.0246895 -0.974219 -0.22425 -0.0246895 -0.892229 0 0.451582 -0.892229 0 0.451582 -0.892229 0 0.451582 -0.895997 0.321818 -0.305979 -0.895997 0.321818 -0.305979 -0.896077 -0.336558 -0.289438 -0.896077 -0.336558 -0.289438 -0.929668 0.295602 0.219855 -0.918291 -0.333537 0.213294 -0.840332 0.421369 0.341014 -0.840332 0.421369 0.341014 -0.816744 -0.443281 0.369366 -0.816744 -0.443281 0.369366 -0.661946 0 0.749551 -0.648244 -0.2772 0.709183 -0.675588 0.247475 0.694505 -0.858742 0.512192 -0.014893 -0.858742 0.512192 -0.014893 -0.858627 -0.510422 -0.0472121 -0.858627 -0.510422 -0.0472121 -0.785838 0.22425 -0.576342 -0.801737 -0.223518 -0.554308 -0.801737 -0.223518 -0.554308 -0.599755 0.564318 0.567309 -0.558977 -0.608462 0.563311 -0.780849 0.564959 -0.26664 -0.755775 -0.585437 -0.293374 -0.708154 0.510453 -0.487808 -0.693471 -0.485977 -0.531907 -0.595965 0.333537 -0.730465 -0.600971 -0.295602 -0.742599 -0.420179 0.443281 -0.791803 -0.420179 0.443281 -0.791803 -0.456191 -0.421369 -0.783797 -0.429609 0 -0.903015 -0.429609 0 -0.903015 -0.429609 0 -0.903015 -0.429609 0 -0.903015 -0.0976287 0.608417 -0.78759 -0.127445 -0.564318 -0.815661 -0.0790735 0.2772 -0.957553 -0.109684 -0.247475 -0.962666 -0.0651875 0 -0.997873 -0.00231941 0 0.999997 -0.00231941 0 0.999997 0.137425 -0.270974 0.952726 0.0971099 0.301614 0.948472 0.0971099 0.301614 0.948472 0.0971099 0.301614 0.948472 0.126102 -0.564653 0.815638 0.0963164 0.608722 0.787515 0.418989 0 0.907991 0.487899 -0.351482 0.799009 0.46971 0.396008 0.789018 0.46971 0.396008 0.789018 0.609303 0.590869 0.528794 0.567339 -0.602981 0.560839 0.624134 0.751683 0.213141 0.624134 0.751683 0.213141 0.62862 -0.733261 0.259163 0.557878 -0.608763 -0.564074 0.598716 0.564653 -0.568072 0.809406 -0.228065 0.541154 0.809415 0.228034 0.541154 0.656972 -0.301614 -0.690953 0.656972 -0.301614 -0.690953 0.691491 0.270974 -0.669637 0.60979 0 -0.792563 0.60979 0 -0.792563 0.772527 -0.633656 -0.0410169 0.772527 -0.633656 -0.0410169 0.791923 0.602924 -0.0966521 0.882696 -0.3726 0.286386 0.882696 -0.3726 0.286386 0.882696 -0.3726 0.286386 0.866685 0.401593 0.295938 0.866685 0.401593 0.295938 0.87473 0.351482 -0.333628 0.87473 0.351482 -0.333628 0.854225 -0.396008 -0.336863 0.88687 0 -0.46202 0.88687 0 -0.46202 0.971593 -0.233253 0.0400098 0.971348 0.228034 0.0669576 0.928156 0.195091 0.316965 0.809405 0.228065 0.541156 0.865107 -6.94368e-007 0.501588 0.809405 -0.228065 0.541157 0.882681 -0.372627 0.286398 0.971589 -0.233268 0.0400162 0.991204 1.60526e-007 0.132344 0.97134 0.228064 0.0669679 0.469722 0.39601 0.789011 0.706196 -7.67144e-007 0.708016 0.854216 -0.396009 -0.336884 0.991753 1.76443e-007 -0.128168 0.624154 0.751665 0.213148 0.28681 0.796369 0.532482 0.126127 -0.564677 0.815617 0.224011 -0.818058 0.529717 0.360892 -0.923556 0.12962 0.498174 -0.823216 -0.272283 0.598666 0.564677 -0.568101 0.501228 0.818058 -0.282048 0.304148 0.946946 0.103866 -0.0234014 0.880859 0.4728 -0.160477 0.612944 0.773658 -0.214076 0.297226 0.930499 -0.00234807 1.84423e-006 0.999997 -0.18222 -0.295627 0.937763 -0.160969 -0.611976 0.774322 -0.0551056 -0.883869 0.464476 0.0925655 -0.995179 0.0324118 0.240283 -0.884512 -0.399878 0.346265 -0.612943 -0.710212 0.399793 -0.297222 -0.867078 0.609804 7.06085e-007 -0.792552 0.429438 0.295625 -0.853339 0.346282 0.611974 -0.711038 0.240511 0.883869 -0.401161 0.0618514 0.997862 0.0211234 -0.210262 0.886545 0.412101 -0.346909 0.611926 0.710775 -0.400334 0.296231 0.867168 -0.260662 -7.608e-007 0.96543 -0.370046 -0.297532 0.88008 -0.346882 -0.612912 0.709938 -0.24091 -0.884458 0.39962 -0.0932043 -0.995112 -0.0326435 0.0544545 -0.883804 -0.464678 0.16031 -0.611925 -0.774499 0.213707 -0.296229 -0.930902 0.384305 2.16651e-006 -0.923206 0.245562 0.29753 -0.922592 0.159812 0.61291 -0.773822 0.0538434 0.884458 -0.463502 -0.12451 0.991307 -0.0425181 -0.445647 0.841004 0.306775 -0.599731 0.56434 0.567312 -0.675606 0.247481 0.694485 -0.444844 -1.6021e-006 0.895608 -0.648265 -0.277208 0.70916 -0.558979 -0.608443 0.563328 -0.499279 -0.822762 0.271632 -0.362076 -0.923032 -0.130048 -0.225273 -0.817584 -0.529913 -0.127447 -0.564342 -0.815645 -0.109689 -0.247479 -0.962664 0.195884 2.82886e-006 -0.980627 -0.0790872 0.277208 -0.95755 -0.0976506 0.608442 -0.787568 -0.228837 0.822762 -0.520285 -0.420954 0.895618 -0.143754 -0.707026 0.69379 0.137002 -0.816734 -0.443298 0.369367 -0.731954 -0.672533 0.10928 -0.619962 -0.753499 -0.21883 -0.508523 -0.666704 -0.544895 -0.420195 0.4433 -0.791784 -0.512215 0.672535 -0.534165 -0.65176 0.725031 -0.222575 -0.85873 0.512212 -0.0149092 -0.929654 0.295627 0.219881 -0.892218 -2.14058e-007 0.451605 -0.918276 -0.333564 0.213316 -0.85861 -0.510449 -0.0472365 -0.755766 -0.585447 -0.293376 -0.693444 -0.485983 -0.531936 -0.60098 -0.295621 -0.742584 -0.429618 1.68762e-006 -0.903011 -0.595984 0.333564 -0.730437 -0.70815 0.510453 -0.487813 -0.974216 0.224262 -0.02469 -0.973965 -1.61072e-006 0.226697 -0.801723 -0.223531 -0.554323 -0.631857 -1.47353e-007 -0.775085 -0.895992 0.32183 -0.305979 -0.976261 0.144593 -0.16127 -0.999667 -9.91111e-007 -0.0257868 -0.97626 -0.144592 -0.161272 -0.911478 -0.216955 -0.349482 -0.865212 -0.120495 -0.486713 -0.806625 1.15713e-006 -0.591063 -0.87098 0.144593 -0.469561 -0.94634 4.35918e-007 -0.323174 -0.946339 0 -0.323177 -0.794283 0 -0.607548 -0.384096 0 -0.923293 0.129006 0 -0.991644 0.607546 -2.64869e-007 -0.794284 0.323175 1.89402e-007 -0.946339 -0.999987 0 -0.00519594 -0.868613 0 0.495491 -0.504493 0 0.863416 -0.00519595 0 0.999987 -0.323175 1.94372e-006 0.946339 0 1 0 0 -1 0 0.946339 -1.98792e-007 0.323175 -0.473151 0.866037 -0.161582 -0.473173 -0.866023 -0.161589 0 1 0 0 -1 0 -0.34199 0 0.939703 -0.34199 0 0.939703 -0.34199 0 0.939703 -0.34199 0 0.939703 -0.939703 0 -0.34199 -0.939703 0 -0.34199 -0.939703 0 -0.34199 -0.939703 0 -0.34199 0 1 0 0 1 0 0 1 0 0 1 0 0.939703 0 0.34199 0.939703 0 0.34199 0.939703 0 0.34199 0.939703 0 0.34199 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.34199 0 -0.939703 0.34199 0 -0.939703 0.34199 0 -0.939703 0.34199 0 -0.939703 0 1 0 -0.161565 0.866035 0.473159 -0.161565 0.866035 0.473159 0 1 0 0.161565 0.866035 -0.473159 0 1 0 0 1 0 0.161565 0.866035 -0.473159 0.279855 0.499985 -0.819571 0.161565 0.866035 -0.473159 0.161565 0.866035 -0.473159 0.279855 0.499985 -0.819571 0.32316 0 -0.946344 0.279855 0.499985 -0.819571 0.279855 0.499985 -0.819571 0.32316 0 -0.946344 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.161565 -0.866035 -0.473159 0.279855 -0.499985 -0.819571 0.279855 -0.499985 -0.819571 0.161565 -0.866035 -0.473159 0 -1 0 0.161565 -0.866035 -0.473159 0.161565 -0.866035 -0.473159 0 -1 0 -0.161565 -0.866035 0.473159 0 -1 0 0 -1 0 -0.161565 -0.866035 0.473159 -0.279855 -0.499985 0.819571 -0.161565 -0.866035 0.473159 -0.161565 -0.866035 0.473159 -0.279855 -0.499985 0.819571 -0.32316 0 0.946344 -0.279855 -0.499985 0.819571 -0.279855 -0.499985 0.819571 -0.32316 0 0.946344 -0.279855 0.499985 0.819571 -0.32316 0 0.946344 -0.32316 0 0.946344 -0.279855 0.499985 0.819571 -0.161565 0.866035 0.473159 -0.279855 0.499985 0.819571 -0.279855 0.499985 0.819571 -0.161565 0.866035 0.473159 -0.939703 0 -0.34199 -0.939703 0 -0.34199 -0.939703 0 -0.34199 -0.939703 0 -0.34199 -0.939703 0 -0.34199 -0.939703 0 -0.34199 -0.939703 0 -0.34199 -0.939703 0 -0.34199 -0.939703 0 -0.34199 -0.939703 0 -0.34199 -0.939703 0 -0.34199 -0.939703 0 -0.34199 0.279855 -0.499985 -0.819571 0.32316 0 -0.946344 0.32316 0 -0.946344 0.279855 -0.499985 -0.819571 0.939703 0 0.34199 0.939703 0 0.34199 0.939703 0 0.34199 0.939703 0 0.34199 0.939703 0 0.34199 0.939703 0 0.34199 0.939703 0 0.34199 0.939703 0 0.34199 0.939703 0 0.34199 0.939703 0 0.34199 0.939703 0 0.34199 0.939703 0 0.34199 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 0.32316 0 -0.946344 0.32316 0 -0.946344 0.279855 0.499985 -0.819571 0.279855 0.499985 -0.819571 0.279855 0.499985 -0.819571 0.279855 0.499985 -0.819571 0.161565 0.866035 -0.473159 0.161565 0.866035 -0.473159 0.161565 0.866035 -0.473159 0.161565 0.866035 -0.473159 0 1 0 0 1 0 0 1 0 0 1 0 -0.161565 0.866035 0.473159 -0.161565 0.866035 0.473159 -0.161565 0.866035 0.473159 -0.161565 0.866035 0.473159 -0.279855 0.499985 0.819571 -0.279855 0.499985 0.819571 -0.279855 0.499985 0.819571 -0.279855 0.499985 0.819571 -0.32316 0 0.946344 -0.32316 0 0.946344 -0.32316 0 0.946344 -0.32316 0 0.946344 -0.279855 -0.499985 0.819571 -0.279855 -0.499985 0.819571 -0.279855 -0.499985 0.819571 -0.279855 -0.499985 0.819571 -0.161565 -0.866035 0.473159 -0.161565 -0.866035 0.473159 -0.161565 -0.866035 0.473159 -0.161565 -0.866035 0.473159 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.161565 -0.866035 -0.473159 0.161565 -0.866035 -0.473159 0.161565 -0.866035 -0.473159 0.161565 -0.866035 -0.473159 0.279855 -0.499985 -0.819571 0.279855 -0.499985 -0.819571 0.279855 -0.499985 -0.819571 0.279855 -0.499985 -0.819571 0.32316 0 -0.946344 0.32316 0 -0.946344 -0.279855 -0.499985 0.819571 -0.279855 -0.499985 0.819571 -0.161565 -0.866035 0.473159 -0.228492 -0.707129 0.669149 0.953252 0.215827 0.211493 0.923783 0.217078 0.315439 0.953252 0.215827 0.211493 -0.0836207 -0.965933 0.244911 -0.161565 -0.866035 0.473159 0 -1 0 0 -1 0 0.883512 0.215827 0.415723 0.883512 0.215827 0.415723 0.923783 0.217078 0.315439 0 -1 0 0.161565 -0.866035 -0.473159 0.161565 -0.866035 -0.473159 0 -1 0 0.161565 -0.866035 -0.473159 0.161565 -0.866035 -0.473159 0.279855 -0.499985 -0.819571 0.228492 -0.707129 -0.669149 0.851409 0.0721458 0.519517 0.853624 0 0.52089 0.851409 0.0721458 0.519517 0.312143 -0.258797 -0.914106 0.279855 -0.499985 -0.819571 0.32316 0 -0.946344 0.32316 0 -0.946344 0.85139 -0.0721458 0.519547 0.85139 -0.0721458 0.519547 0.853624 0 0.52089 0.32316 0 -0.946344 0.279855 0.499985 -0.819571 0.279855 0.499985 -0.819571 0.32316 0 -0.946344 0.279855 0.499985 -0.819571 0.279855 0.499985 -0.819571 0.161565 0.866035 -0.473159 0.228492 0.707129 -0.669149 0.953252 -0.215827 0.211493 0.953252 -0.215827 0.211493 0.923783 -0.217078 0.315439 0.883512 -0.215827 0.415723 0.923783 -0.217078 0.315439 0.883512 -0.215827 0.415723 0.161565 0.866035 -0.473159 0 1 0 0 1 0 0.0836207 0.965933 -0.244911 0 1 0 0 1 0 -0.161565 0.866035 0.473159 -0.161565 0.866035 0.473159 -0.161565 0.866035 0.473159 -0.161565 0.866035 0.473159 -0.279855 0.499985 0.819571 -0.228492 0.707129 0.669149 0.991339 -0.0721763 0.109714 0.993929 0 0.110019 0.991339 -0.0721763 0.109714 -0.312143 0.258797 0.914106 -0.279855 0.499985 0.819571 -0.32316 0 0.946344 -0.32316 0 0.946344 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.32316 0 0.946344 -0.279855 -0.499985 0.819571 -0.279855 -0.499985 0.819571 -0.32316 0 0.946344 0.991341 0.0721458 0.109714 0.991341 0.0721458 0.109714 0.993929 0 0.110019 -0.955152 -0.194159 -0.223579 -0.955152 -0.194159 -0.223579 -0.928159 -0.195074 -0.316965 0 1 0 0.161565 0.866035 -0.473159 0.0836207 0.965933 -0.244911 0 1 0 0.279855 0.499985 -0.819571 0.228492 0.707129 -0.669149 0.161565 0.866035 -0.473159 0.279855 0.499985 -0.819571 -0.989117 -0.0648824 -0.132054 -0.989117 -0.0648824 -0.132054 -0.991206 0 -0.132328 0.279855 0.499985 -0.819571 0.32316 0 -0.946344 0.32316 0 -0.946344 0.279855 0.499985 -0.819571 -0.989121 0.0648824 -0.132023 -0.989121 0.0648824 -0.132023 -0.991206 0 -0.132328 0.312143 -0.258797 -0.914106 0.32316 0 -0.946344 0.32316 0 -0.946344 0.279855 -0.499985 -0.819571 0.161565 -0.866035 -0.473159 0.228492 -0.707129 -0.669149 0.279855 -0.499985 -0.819571 0.161565 -0.866035 -0.473159 -0.955152 0.194159 -0.223579 -0.928169 0.195074 -0.316935 -0.955152 0.194159 -0.223579 0.161565 -0.866035 -0.473159 0 -1 0 0 -1 0 0.161565 -0.866035 -0.473159 -0.892404 0.194159 -0.407331 -0.892404 0.194159 -0.407331 -0.928169 0.195074 -0.316935 -0.0836207 -0.965933 0.244911 0 -1 0 0 -1 0 -0.161565 -0.866035 0.473159 -0.279855 -0.499985 0.819571 -0.228492 -0.707129 0.669149 -0.161565 -0.866035 0.473159 -0.279855 -0.499985 0.819571 -0.8633 0.0648824 -0.500504 -0.8633 0.0648824 -0.500504 -0.865116 0 -0.501572 -0.8633 -0.0648824 -0.500504 -0.8633 -0.0648824 -0.500504 -0.865116 0 -0.501572 -0.312143 0.258797 0.914106 -0.32316 0 0.946344 -0.32316 0 0.946344 -0.279855 0.499985 0.819571 -0.279855 -0.499985 0.819571 -0.32316 0 0.946344 -0.32316 0 0.946344 -0.279855 -0.499985 0.819571 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 -0.161565 0.866035 0.473159 -0.228492 0.707129 0.669149 -0.279855 0.499985 0.819571 -0.161565 0.866035 0.473159 0 1 0 -0.161565 0.866035 0.473159 -0.161565 0.866035 0.473159 0 1 0 -0.892404 -0.194159 -0.407331 -0.892404 -0.194159 -0.407331 -0.928159 -0.195074 -0.316965 -0.228515 0.707106 0.669165 0.228518 0.707106 -0.669164 0.22852 -0.707108 -0.669162 -0.228516 -0.707106 0.669164 -0.228499 0.707106 0.669171 0.228523 0.707106 -0.669163 0.228523 -0.707106 -0.669162 -0.228525 -0.707105 0.669163 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.866034 0 0.499985 -1 0 0 -0.866034 0 0.499985 -0.866034 0 0.499985 -1 0 0 -0.866034 0 -0.499985 -1 0 0 -1 0 0 -0.866034 0 -0.499985 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.499985 0 -0.866034 0 0 -1 -0.499985 0 -0.866034 -0.499985 0 -0.866034 0 0 -1 0.499985 0 -0.866034 0 0 -1 0 0 -1 0.499985 0 -0.866034 0.866034 0 -0.499985 0.499985 0 -0.866034 0.499985 0 -0.866034 0.866034 0 -0.499985 1 0 0 0.866034 0 -0.499985 0.866034 0 -0.499985 1 0 0 0.866034 0 0.499985 1 0 0 1 0 0 0.866034 0 0.499985 0.499985 0 0.866034 0.866034 0 0.499985 0.866034 0 0.499985 0.499985 0 0.866034 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.499985 0 0.866034 0 0 1 0 0 1 -0.499985 0 0.866034 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0.499985 0 0.866034 0.499985 0 0.866034 0 0 1 + + + + + + + + + + + + + + +

82 174 166 174 153 174 82 174 153 174 71 174

+
+ + + +

153 175 230 175 69 175 153 175 69 175 71 175

+
+ + + +

69 176 230 176 152 176 69 176 152 176 70 176

+
+ + + +

152 177 164 177 84 177 152 177 84 177 70 177

+
+ + + +

164 178 172 178 6 178 164 178 6 178 84 178

+
+ + + +

172 179 231 179 8 179 172 179 8 179 6 179

+
+ + + +

8 180 231 180 173 180 8 180 173 180 85 180

+
+ + + +

173 181 166 181 82 181 173 181 82 181 85 181

+
+ + + +

63 182 141 182 230 182 63 182 230 182 153 182

+
+ + + +

230 183 141 183 59 183 230 183 59 183 152 183

+
+ + + +

79 184 171 184 231 184 79 184 231 184 172 184

+
+ + + +

231 185 171 185 74 185 231 185 74 185 173 185

+
+ + + +

148 186 56 186 220 186 148 186 220 186 145 186

+
+ + + +

220 187 140 187 63 187 220 187 63 187 145 187

+
+ + + +

139 188 219 188 146 188 139 188 146 188 59 188

+
+ + + +

219 189 52 189 149 189 219 189 149 189 146 189

+
+ + + +

52 190 228 190 160 190 52 190 160 190 149 190

+
+ + + +

228 191 150 191 79 191 228 191 79 191 160 191

+
+ + + +

151 192 229 192 161 192 151 192 161 192 74 192

+
+ + + +

229 193 56 193 148 193 229 193 148 193 161 193

+
+ + + +

56 194 218 194 215 194 56 194 215 194 220 194

+
+ + + +

215 195 214 195 140 195 215 195 140 195 220 195

+
+ + + +

214 196 212 196 138 196 214 196 138 196 140 196

+
+ + + +

212 197 210 197 134 197 212 197 134 197 138 197

+
+ + + +

134 198 210 198 211 198 134 198 211 198 47 198

+
+ + + +

211 199 213 199 139 199 211 199 139 199 47 199

+
+ + + +

213 200 216 200 219 200 213 200 219 200 139 200

+
+ + + +

216 201 217 201 52 201 216 201 52 201 219 201

+
+ + + +

217 202 221 202 228 202 217 202 228 202 52 202

+
+ + + +

221 203 223 203 150 203 221 203 150 203 228 203

+
+ + + +

223 204 225 204 155 204 223 204 155 204 150 204

+
+ + + +

225 205 227 205 158 205 225 205 158 205 155 205

+
+ + + +

158 206 227 206 226 206 158 206 226 206 67 206

+
+ + + +

226 207 224 207 151 207 226 207 151 207 67 207

+
+ + + +

224 208 222 208 229 208 224 208 229 208 151 208

+
+ + + +

222 209 218 209 56 209 222 209 56 209 229 209

+
+ + + +

218 210 199 210 194 210 218 210 194 210 215 210

+
+ + + +

194 211 192 211 214 211 194 211 214 211 215 211

+
+ + + +

192 212 187 212 212 212 192 212 212 212 214 212

+
+ + + +

187 213 185 213 210 213 187 213 210 213 212 213

+
+ + + +

210 214 185 214 186 214 210 214 186 214 211 214

+
+ + + +

186 215 193 215 213 215 186 215 213 215 211 215

+
+ + + +

193 216 195 216 216 216 193 216 216 216 213 216

+
+ + + +

195 217 200 217 217 217 195 217 217 217 216 217

+
+ + + +

200 218 204 218 221 218 200 218 221 218 217 218

+
+ + + +

204 219 206 219 223 219 204 219 223 219 221 219

+
+ + + +

206 220 207 220 225 220 206 220 225 220 223 220

+
+ + + +

207 221 209 221 227 221 207 221 227 221 225 221

+
+ + + +

227 222 209 222 208 222 227 222 208 222 226 222

+
+ + + +

208 223 205 223 224 223 208 223 224 223 226 223

+
+ + + +

205 224 203 224 222 224 205 224 222 224 224 224

+
+ + + +

203 225 199 225 218 225 203 225 218 225 222 225

+
+ + + +

199 226 28 226 188 226 199 226 188 226 194 226

+
+ + + +

188 227 24 227 192 227 188 227 192 227 194 227

+
+ + + +

24 228 105 228 187 228 24 228 187 228 192 228

+
+ + + +

105 229 103 229 185 229 105 229 185 229 187 229

+
+ + + +

185 230 103 230 104 230 185 230 104 230 186 230

+
+ + + +

104 231 114 231 193 231 104 231 193 231 186 231

+
+ + + +

114 232 189 232 195 232 114 232 195 232 193 232

+
+ + + +

189 233 32 233 200 233 189 233 200 233 195 233

+
+ + + +

32 234 202 234 204 234 32 234 204 234 200 234

+
+ + + +

202 235 43 235 206 235 202 235 206 235 204 235

+
+ + + +

43 236 131 236 207 236 43 236 207 236 206 236

+
+ + + +

131 237 132 237 209 237 131 237 209 237 207 237

+
+ + + +

209 238 132 238 130 238 209 238 130 238 208 238

+
+ + + +

130 239 39 239 205 239 130 239 205 239 208 239

+
+ + + +

39 240 201 240 203 240 39 240 203 240 205 240

+
+ + + +

201 241 28 241 199 241 201 241 199 241 203 241

+
+ + + +

28 242 190 242 182 242 28 242 182 242 188 242

+
+ + + +

182 243 100 243 24 243 182 243 24 243 188 243

+
+ + + +

102 244 183 244 189 244 102 244 189 244 114 244

+
+ + + +

183 245 191 245 32 245 183 245 32 245 189 245

+
+ + + +

191 246 197 246 202 246 191 246 202 246 32 246

+
+ + + +

197 247 123 247 43 247 197 247 43 247 202 247

+
+ + + +

122 248 196 248 201 248 122 248 201 248 39 248

+
+ + + +

196 249 190 249 28 249 196 249 28 249 201 249

+
+ + + +

190 250 115 250 107 250 190 250 107 250 182 250

+
+ + + +

107 251 97 251 100 251 107 251 100 251 182 251

+
+ + + +

97 252 177 252 20 252 97 252 20 252 100 252

+
+ + + +

20 253 177 253 98 253 20 253 98 253 102 253

+
+ + + +

98 254 109 254 183 254 98 254 183 254 102 254

+
+ + + +

109 255 116 255 191 255 109 255 191 255 183 255

+
+ + + +

116 256 118 256 197 256 116 256 197 256 191 256

+
+ + + +

118 257 120 257 123 257 118 257 123 257 197 257

+
+ + + +

120 258 198 258 36 258 120 258 36 258 123 258

+
+ + + +

36 259 198 259 119 259 36 259 119 259 122 259

+
+ + + +

119 260 117 260 196 260 119 260 196 260 122 260

+
+ + + +

117 261 115 261 190 261 117 261 190 261 196 261

+
+ + + +

87 262 174 262 177 262 87 262 177 262 97 262

+
+ + + +

177 263 174 263 89 263 177 263 89 263 98 263

+
+ + + +

112 264 184 264 198 264 112 264 198 264 120 264

+
+ + + +

198 265 184 265 110 265 198 265 110 265 119 265

+
+ + + +

94 266 2 266 176 266 94 266 176 266 87 266

+
+ + + +

176 267 175 267 174 267 176 267 174 267 87 267

+
+ + + +

174 268 175 268 11 268 174 268 11 268 89 268

+
+ + + +

11 269 178 269 96 269 11 269 96 269 89 269

+
+ + + +

178 270 180 270 112 270 178 270 112 270 96 270

+
+ + + +

180 271 181 271 184 271 180 271 184 271 112 271

+
+ + + +

184 272 181 272 179 272 184 272 179 272 110 272

+
+ + + +

179 273 2 273 94 273 179 273 94 273 110 273

+
+ + + +

145 145 144 144 153 153 167 167 161 161 173 173 161 161 165 165 173 173 161 161 147 147 165 165 166 166 148 148 145 145 166 166 145 145 153 153

+
+ + + +

145 145 144 144 153 153 167 167 161 161 173 173 161 161 165 165 173 173 161 161 147 147 165 165 166 166 148 148 145 145 166 166 145 145 153 153 160 160 169 169 172 172 159 159 172 172 164 164 149 149 160 160 164 164 146 146 149 149 162 162 146 146 163 163 152 152 142 142 146 146 152 152

+
+ + + +

145 145 144 144 153 153 167 167 161 161 173 173 161 161 165 165 173 173 161 161 147 147 165 165 166 166 148 148 145 145 166 166 145 145 153 153 160 160 169 169 172 172 159 159 172 172 164 164 149 149 160 160 164 164 146 146 149 149 162 162 146 146 163 163 152 152 142 142 146 146 152 152 135 135 139 139 142 142 141 141 135 135 142 142 141 141 134 134 135 135 138 138 133 133 141 141 136 136 141 141 143 143 140 140 137 137 143 143

+
+ + + +

145 145 144 144 153 153 167 167 161 161 173 173 161 161 165 165 173 173 161 161 147 147 165 165 166 166 148 148 145 145 166 166 145 145 153 153 160 160 169 169 172 172 159 159 172 172 164 164 149 149 160 160 164 164 146 146 149 149 162 162 146 146 163 163 152 152 142 142 146 146 152 152 135 135 139 139 142 142 141 141 135 135 142 142 141 141 134 134 135 135 138 138 133 133 141 141 136 136 141 141 143 143 140 140 137 137 143 143 156 156 151 151 168 168 170 170 67 67 167 167 170 170 157 157 156 156 154 154 158 158 170 170 155 155 171 171 169 169 150 150 155 155 169 169

+
+ + + +

145 145 144 144 153 153 167 167 161 161 173 173 161 161 165 165 173 173 161 161 147 147 165 165 166 166 148 148 145 145 166 166 145 145 153 153 160 160 169 169 172 172 159 159 172 172 164 164 149 149 160 160 164 164 146 146 149 149 162 162 146 146 163 163 152 152 142 142 146 146 152 152 135 135 139 139 142 142 141 141 135 135 142 142 141 141 134 134 135 135 138 138 133 133 141 141 136 136 141 141 143 143 140 140 137 137 143 143 156 156 151 151 168 168 170 170 67 67 167 167 170 170 157 157 156 156 154 154 158 158 170 170 155 155 171 171 169 169 150 150 155 155 169 169 101 101 114 114 104 104 92 92 102 102 104 104 103 103 92 92 104 104 90 90 103 103 105 105 100 100 91 91 105 105 99 99 105 105 113 113

+
+ + + +

145 145 144 144 153 153 167 167 161 161 173 173 161 161 165 165 173 173 161 161 147 147 165 165 166 166 148 148 145 145 166 166 145 145 153 153 160 160 169 169 172 172 159 159 172 172 164 164 149 149 160 160 164 164 146 146 149 149 162 162 146 146 163 163 152 152 142 142 146 146 152 152 135 135 139 139 142 142 141 141 135 135 142 142 141 141 134 134 135 135 138 138 133 133 141 141 136 136 141 141 143 143 140 140 137 137 143 143 156 156 151 151 168 168 170 170 67 67 167 167 170 170 157 157 156 156 154 154 158 158 170 170 155 155 171 171 169 169 150 150 155 155 169 169 101 101 114 114 104 104 92 92 102 102 104 104 103 103 92 92 104 104 90 90 103 103 105 105 100 100 91 91 105 105 99 99 105 105 113 113 121 121 128 128 130 130 127 127 122 122 130 130 132 132 124 124 130 130 126 126 132 132 131 131 123 123 125 125 131 131 123 123 131 131 129 129

+
+ + + +

145 145 144 144 153 153 167 167 161 161 173 173 161 161 165 165 173 173 161 161 147 147 165 165 166 166 148 148 145 145 166 166 145 145 153 153 160 160 169 169 172 172 159 159 172 172 164 164 149 149 160 160 164 164 146 146 149 149 162 162 146 146 163 163 152 152 142 142 146 146 152 152 135 135 139 139 142 142 141 141 135 135 142 142 141 141 134 134 135 135 138 138 133 133 141 141 136 136 141 141 143 143 140 140 137 137 143 143 156 156 151 151 168 168 170 170 67 67 167 167 170 170 157 157 156 156 154 154 158 158 170 170 155 155 171 171 169 169 150 150 155 155 169 169 101 101 114 114 104 104 92 92 102 102 104 104 103 103 92 92 104 104 90 90 103 103 105 105 100 100 91 91 105 105 99 99 105 105 113 113 121 121 128 128 130 130 127 127 122 122 130 130 132 132 124 124 130 130 126 126 132 132 131 131 123 123 125 125 131 131 123 123 131 131 129 129 86 86 97 97 106 106 94 94 87 87 106 106 110 110 117 117 119 119 110 110 93 93 117 117 94 94 115 115 117 117 115 115 94 94 107 107

+
+ + + +

145 145 144 144 153 153 167 167 161 161 173 173 161 161 165 165 173 173 161 161 147 147 165 165 166 166 148 148 145 145 166 166 145 145 153 153 160 160 169 169 172 172 159 159 172 172 164 164 149 149 160 160 164 164 146 146 149 149 162 162 146 146 163 163 152 152 142 142 146 146 152 152 135 135 139 139 142 142 141 141 135 135 142 142 141 141 134 134 135 135 138 138 133 133 141 141 136 136 141 141 143 143 140 140 137 137 143 143 156 156 151 151 168 168 170 170 67 67 167 167 170 170 157 157 156 156 154 154 158 158 170 170 155 155 171 171 169 169 150 150 155 155 169 169 101 101 114 114 104 104 92 92 102 102 104 104 103 103 92 92 104 104 90 90 103 103 105 105 100 100 91 91 105 105 99 99 105 105 113 113 121 121 128 128 130 130 127 127 122 122 130 130 132 132 124 124 130 130 126 126 132 132 131 131 123 123 125 125 131 131 123 123 131 131 129 129 86 86 97 97 106 106 94 94 87 87 106 106 110 110 117 117 119 119 110 110 93 93 117 117 94 94 115 115 117 117 115 115 94 94 107 107 112 112 120 120 118 118 96 96 111 111 118 118 96 96 118 118 116 116 96 96 116 116 108 108 88 88 95 95 108 108 89 89 109 109 98 98

+
+ + + +

244 274 245 274 246 274 263 274 264 274 265 274 278 274 279 274 280 274 289 274 290 274 291 274

+
+ + + +

232 274 233 274 234 274 235 274

+

236 274 237 274 238 274 239 274

+

240 274 241 274 242 274 243 274

+

247 274 248 274 249 274 250 274

+

251 274 252 274 253 274 254 274

+

255 274 256 274 257 274 258 274

+

259 274 260 274 261 274 262 274

+

266 274 267 274 268 274 269 274

+

270 274 271 274 272 274 273 274

+

274 274 275 274 276 274 277 274

+

281 274 282 274 283 274 284 274

+

285 274 286 274 287 274 288 274

+
+ + + +

292 275 293 275 294 275 295 275

+
+ + + +

296 276 297 276 298 276 299 276

+
+ + + +

300 277 301 277 302 277 303 277

+
+ + + +

304 278 305 278 306 278 307 278

+
+ + + +

308 279 309 279 310 279 311 279

+
+ + + +

321 280 322 280 323 280

+
+ + + +

312 280 313 280 314 280 315 280

+

316 280 317 280 318 280 319 280 320 280

+
+ + + +

324 281 325 281 326 281 327 281

+
+ + + +

328 282 329 282 330 282 331 282

+
+ + + +

332 283 333 283 334 283 335 283

+
+ + + +

336 284 337 284 338 284 339 284

+
+ + + +

349 285 350 285 351 285

+
+ + + +

340 285 341 285 342 285 343 285

+

344 285 345 285 346 285 347 285 348 285

+
+ + + +

352 286 353 286 354 286 355 286

+
+ + + +

356 287 357 287 358 287 359 287

+
+ + + +

360 288 361 288 362 288 363 288

+
+ + + +

364 289 365 289 366 289 367 289

+
+ + + +

368 290 369 290 370 290 371 290

+
+ + + +

372 291 373 291 374 291 375 291 376 291 377 291 386 291 387 291 388 291 389 291 390 291 391 291

+
+ + + +

378 291 379 291 380 291 381 291 382 291 383 291 384 291 385 291

+
+ + + +

392 292 393 292 394 292 395 292 396 292 397 292 406 292 407 292 408 292 409 292 410 292 411 292

+
+ + + +

398 292 399 292 400 292 401 292 402 292 403 292 404 292 405 292

+
+ + + +

412 293 413 294 414 295 415 296

+

416 297 417 298 418 299 419 300

+

420 301 421 302 422 303 423 304

+

424 305 425 306 426 307 427 308

+

428 309 429 310 430 311 431 312

+

432 313 433 314 434 315 435 316

+
+ + + +

436 317 437 318 438 319 439 320

+

440 321 441 322 442 323 443 324

+

444 325 445 326 446 327 447 328

+

448 329 449 330 450 331 451 332

+

452 333 453 334 454 335 455 336 456 337 457 338 458 339 459 340 460 341 461 342 462 343 463 344

+

464 345 465 346 466 347 467 348

+

468 349 469 350 470 351 471 352

+

472 353 473 354 474 355 475 356

+

476 357 477 358 478 359 479 360

+

480 361 481 362 482 363 483 364

+

484 365 485 366 486 367 487 368

+

488 369 489 370 490 371 491 372

+

492 373 493 374 494 375 495 376 496 377 497 378 498 379 499 380 500 381 501 382 502 383 503 384

+

504 385 505 386 506 387 507 388

+
+ + + +

508 389 509 390 510 391 511 392 512 393 513 394 514 395 515 396 516 397 517 398 518 399 519 400

+

520 401 521 402 522 403 523 404 524 405 525 406 526 407 527 408 528 409 529 410 530 411 531 412

+

532 413 533 414 534 415 535 416

+

536 417 537 418 538 419 539 420

+

540 421 541 422 542 423 543 424

+

544 425 545 426 546 427 547 428

+

548 429 549 430 550 431 551 432

+

552 433 553 434 554 435 555 436

+

556 437 557 438 558 439 559 440

+

560 441 561 442 562 443 563 444

+

564 445 565 446 566 447 567 448

+

568 449 569 450 570 451 571 452

+

572 453 573 454 574 455 575 456

+

576 457 577 458 578 459 579 460

+
+ + + +

584 465 585 466 586 467 591 472 592 473 593 474 602 483 603 484 604 485 609 490 610 491 611 492 620 501 621 502 622 503 623 504 624 505 625 506 638 519 639 520 640 521 661 542 662 543 663 544

+
+ + + +

580 461 581 462 582 463 583 464

+

587 468 588 469 589 470 590 471

+

594 475 595 476 596 477 597 478

+

598 479 599 480 600 481 601 482

+

605 486 606 487 607 488 608 489

+

612 493 613 494 614 495 615 496

+

616 497 617 498 618 499 619 500

+

626 507 627 508 628 509 629 510

+

630 511 631 512 632 513 633 514

+

634 515 635 516 636 517 637 518

+

641 522 642 523 643 524 644 525

+

645 526 646 527 647 528 648 529 649 530 650 531 651 532 652 533 653 534 654 535 655 536 656 537

+

657 538 658 539 659 540 660 541

+
+ + + +

664 545 665 546 666 547 675 556 676 557 677 558 682 563 683 564 684 565 693 574 694 575 695 576 700 581 701 582 702 583 711 592 712 593 713 594 714 595 715 596 716 597 745 626 746 627 747 628

+
+ + + +

667 548 668 549 669 550 670 551

+

671 552 672 553 673 554 674 555

+

678 559 679 560 680 561 681 562

+

685 566 686 567 687 568 688 569

+

689 570 690 571 691 572 692 573

+

696 577 697 578 698 579 699 580

+

703 584 704 585 705 586 706 587

+

707 588 708 589 709 590 710 591

+

717 598 718 599 719 600 720 601

+

721 602 722 603 723 604 724 605

+

725 606 726 607 727 608 728 609 729 610 730 611 731 612 732 613 733 614 734 615 735 616 736 617

+

737 618 738 619 739 620 740 621

+

741 622 742 623 743 624 744 625

+
+ + + +

748 629 749 629 750 629

+
+ + + +

751 630 752 630 753 630

+
+ + + +

754 631 755 631 756 631

+
+ + + +

757 632 758 632 759 632

+
+ + + +

760 633 761 633 762 633

+
+ + + +

763 634 764 634 765 634

+
+ + + +

766 635 767 635 768 635

+
+ + + +

769 636 770 636 771 636

+
+ + + +

772 637 773 638 774 639 775 640

+

776 641 777 642 778 643 779 644

+

780 645 781 646 782 647 783 648

+

784 649 785 650 786 651 787 652

+

788 653 789 654 790 655 791 656

+

792 657 793 658 794 659 795 660

+

796 661 797 662 798 663 799 664

+

800 665 801 666 802 667 803 668

+

804 669 805 670 806 671 807 672

+

808 673 809 674 810 675 811 676

+

812 677 813 678 814 679 815 680 816 681 817 682 818 683 819 684 820 685 821 686 822 687 823 688

+

824 689 825 690 826 691 827 692

+

828 693 829 694 830 695 831 696 832 697 833 698 834 699 835 700 836 701 837 702 838 703 839 704

+

840 705 841 706 842 707 843 708

+
+
+ + + CAT3DBagRep + + +
+ + + + -7.5 -12.9904 0 -12.9904 -7.5 0 -12.9904 -7.50003 -355 -7.50007 -12.9904 -355 0 -15 0 -7.5 -12.9904 0 -7.50007 -12.9904 -355 0 -15 -355 7.49999 -12.9904 0 0 -15 0 0 -15 -355 7.49996 -12.9904 -355 12.9904 -7.5 0 7.49999 -12.9904 0 7.49996 -12.9904 -355 12.9903 -7.50003 -355 15 0 0 12.9904 -7.5 0 12.9903 -7.50003 -355 14.9999 0 -355 12.9904 7.5 0 15 0 0 14.9999 0 -355 12.9903 7.49997 -355 7.5 12.9904 0 12.9904 7.5 0 12.9903 7.49997 -355 7.49996 12.9904 -355 0 15 0 7.5 12.9904 0 7.49996 12.9904 -355 0 15 -355 -7.5 12.9904 0 0 15 0 0 15 -355 -7.50007 12.9904 -355 -12.9904 7.5 0 -7.5 12.9904 0 -7.50007 12.9904 -355 -12.9904 7.49997 -355 -15 0 -355 -12.9904 7.49997 -355 -7.50007 12.9904 -355 0 15 -355 7.49996 12.9904 -355 12.9903 7.49997 -355 14.9999 0 -355 12.9903 -7.50003 -355 7.49996 -12.9904 -355 0 -15 -355 -7.50007 -12.9904 -355 -12.9904 -7.50003 -355 -12.9904 -7.5 0 -15 0 0 -15 0 -355 -12.9904 -7.50003 -355 -15 0 0 -12.9904 -7.5 0 -7.5 -12.9904 0 0 -15 0 7.49999 -12.9904 0 12.9904 -7.5 0 15 0 0 12.9904 7.5 0 7.5 12.9904 0 0 15 0 -7.5 12.9904 0 -12.9904 7.5 0 -15 0 0 -12.9904 7.5 0 -12.9904 7.49997 -355 -15 0 -355 0.00012 25 -373 0.000103 25 -355 21.6508 12.5 -355 21.6508 12.5 -373 21.6507 12.5 -373 21.6507 12.5 -355 21.6507 -12.5 -355 21.6507 -12.5 -373 21.6507 -12.5 -373 21.6507 -12.5 -355 0 -25 -355 0 -25 -373 0.00012 -25 -373 0.000103 -25 -355 -21.6505 -12.5 -355 -21.6504 -12.5 -373 -21.6506 -12.5 -373 -21.6506 -12.5 -355 -21.6506 12.5 -355 -21.6506 12.5 -373 -21.6506 12.5 -373 -21.6506 12.5 -355 0 25 -355 0 25 -373 0.000103 25 -355 -21.6506 12.5 -355 -21.6506 -12.5 -355 0.000103 -25 -355 21.6507 -12.5 -355 21.6507 12.5 -355 21.6507 12.5 -373 21.6507 -12.5 -373 0.00012 -25 -373 -21.6506 -12.5 -373 -21.6506 12.5 -373 0.00012 25 -373 -59.8138 30 -455.276 -59.8138 -30 -455.276 -54.1625 -30 -434.185 -54.1625 30 -434.185 -54.1625 30 -434.185 -54.1625 -30 -434.185 -25.0001 -30 -373 -25.0001 30 -373 -25.0001 30 -373 -25.0001 -30 -373 24.9998 -30 -373 24.9998 30 -373 24.9999 30 -373 24.9999 -30 -373 54.1624 -30 -434.185 54.1624 30 -434.185 54.1623 30 -434.185 54.1623 -30 -434.185 59.8137 -30 -464.724 59.8137 30 -464.724 59.8136 30 -464.724 59.8136 -30 -464.724 49.4379 -30 -493.998 49.4379 30 -493.998 49.4379 30 -493.998 49.4379 -30 -493.998 25.8152 -30 -514.162 25.8152 30 -514.162 25.8153 30 -514.162 25.8153 -30 -514.162 -4.72437 -30 -519.814 -4.72437 30 -519.814 -4.7245 30 -519.814 -4.7245 -30 -519.814 -33.9984 -30 -509.438 -33.9984 30 -509.438 -33.9984 30 -509.438 -33.9984 -30 -509.438 -54.1624 -30 -485.815 -54.1624 30 -485.815 -54.1625 30 -485.815 -54.1625 -30 -485.815 -59.8137 -30 -455.276 -59.8137 30 -455.276 -59.8138 -30 -455.276 -54.1625 -30 -485.815 -33.9984 -30 -509.438 -4.72448 -30 -519.814 25.8152 -30 -514.162 49.4379 -30 -493.998 59.8136 -30 -464.724 54.1623 -30 -434.185 24.9999 -30 -373 -25.0001 -30 -373 -54.1625 -30 -434.185 -54.1624 30 -434.185 -25.0001 30 -373 24.9999 30 -373 54.1623 30 -434.185 59.8136 30 -464.724 49.4379 30 -493.998 25.8153 30 -514.162 -4.72449 30 -519.814 -33.9984 30 -509.438 -54.1625 30 -485.815 -59.8138 30 -455.276 + + + + + + + + + + -0.499985 -0.866034 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.499985 -0.866034 0 0 -1 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 0 -1 0 0.499985 -0.866034 0 0 -1 0 0 -1 0 0.499985 -0.866034 0 0.866034 -0.499985 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.866034 -0.499985 0 1 0 0 0.866034 -0.499985 0 0.866034 -0.499985 0 1 0 0 0.866034 0.499985 0 1 0 0 1 0 0 0.866034 0.499985 0 0.499985 0.866034 0 0.866034 0.499985 0 0.866034 0.499985 0 0.499985 0.866034 0 0 1 0 0.499985 0.866034 0 0.499985 0.866034 0 0 1 0 -0.499985 0.866034 0 0 1 0 0 1 0 -0.499985 0.866034 0 -0.866034 0.499985 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.866034 0.499985 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.866034 -0.499985 0 -1 0 0 -1 0 0 -0.866034 -0.499985 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 -1 0 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -1 0 0 0.499999 0.866026 4.74529e-007 1 0 8.47711e-007 0.499998 -0.866026 2.11927e-007 -0.500001 -0.866025 -4.48039e-007 -1 0 -9.53674e-007 -0.500001 0.866025 -2.38419e-007 9.17607e-013 0 1 0 0 -1 -0.965927 0 0.258816 -0.902707 0 0.430257 6.10352e-007 0 1 0.902706 0 0.430257 0.983306 0 0.18196 0.942547 0 -0.334073 0.649232 0 -0.76059 0.181959 0 -0.983306 -0.334072 0 -0.942548 -0.760591 0 -0.649232 -0.983307 0 -0.181955 1.07285e-007 -1 6.4195e-008 2.53864e-008 1 3.69148e-008 + + + + + + + + + + + + + + +

0 0 1 1 2 2 3 3

+

4 4 5 5 6 6 7 7

+

8 8 9 9 10 10 11 11

+

12 12 13 13 14 14 15 15

+

16 16 17 17 18 18 19 19

+

20 20 21 21 22 22 23 23

+

24 24 25 25 26 26 27 27

+

28 28 29 29 30 30 31 31

+

32 32 33 33 34 34 35 35

+

36 36 37 37 38 38 39 39

+

40 40 41 41 42 42 43 43 44 44 45 45 46 46 47 47 48 48 49 49 50 50 51 51

+

52 52 53 53 54 54 55 55

+

56 56 57 57 58 58 59 59 60 60 61 61 62 62 63 63 64 64 65 65 66 66 67 67

+

68 68 69 69 70 70 71 71

+
+ + + +

72 72 73 72 74 72 75 72

+
+ + + +

76 73 77 73 78 73 79 73

+
+ + + +

80 74 81 74 82 74 83 74

+
+ + + +

84 75 85 75 86 75 87 75

+
+ + + +

88 76 89 76 90 76 91 76

+
+ + + +

92 77 93 77 94 77 95 77

+
+ + + +

96 78 97 78 98 78 99 78 100 78 101 78

+
+ + + +

102 79 103 79 104 79 105 79 106 79 107 79

+
+ + + +

108 80 109 80 110 80 111 80

+
+ + + +

112 81 113 81 114 81 115 81

+
+ + + +

116 82 117 82 118 82 119 82

+
+ + + +

120 83 121 83 122 83 123 83

+
+ + + +

124 84 125 84 126 84 127 84

+
+ + + +

128 85 129 85 130 85 131 85

+
+ + + +

132 86 133 86 134 86 135 86

+
+ + + +

136 87 137 87 138 87 139 87

+
+ + + +

140 88 141 88 142 88 143 88

+
+ + + +

144 89 145 89 146 89 147 89

+
+ + + +

148 90 149 90 150 90 151 90

+
+ + + +

152 91 153 91 154 91 155 91 156 91 157 91 158 91 159 91 160 91 161 91 162 91

+
+ + + +

163 92 164 92 165 92 166 92 167 92 168 92 169 92 170 92 171 92 172 92 173 92

+
+
+ + + CAT3DBagRep + + +
+
+ + + + + + + 0.498039 0.498039 0.498039 1 + + + 0.498039 0.498039 0.498039 1 + + + + + + + + + + + 0.298039 0.298039 0.298039 1 + + + 0.298039 0.298039 0.298039 1 + + + + + + + + + + + 1 0.376471 0 1 + + + 1 0.376471 0 1 + + + + + + + + + + + 0 0 0 1 + + + 0 0 0 1 + + + + + + + + + + + 1 1 1 1 + + + 1 1 1 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 0 -1 + + -185 + 185 + + + + + + 0 1 0 + + -130 + 3 + + + + + + 0 1 0 + + -120 + 148 + + + + + + -1 0 0 + + -350 + 350 + + + + + + 0 1 0 + + -120 + 120 + + + + + + -1 0 0 + + -350 + 350 + + + + + + 1 0 0 + + 0 + 0 + + + + + + 0 1 0 + + + + + 0 0 1 + + + + + + + + + + + + + + + + + + 0 0 865 + + + 410 0 0 + 0 1 0 90 + + + 1.31938e-005 0 1000 + 0 -1 0 90 + + + 674.501 0 45 + + + 325.499 0 -5.22959e-012 + + + + + + + + + + + + + + + + + -420 -225 -96 + 0 1 0 12.8351 + + 0 -1 0 1.24896e-005 + + 374.861 -0.000259399 120.245 + 0 -1 0 108.855 + + 0 -1 0 1.27781e-005 + + + + + + + + + + kinmodel.0/joint_7 + + + + + + + SASA + 185.009 + + + + + 90.0246 + 0.0174533 + + kinmodel.0/joint_1 + + 811.464 + + + + + + =-SASA(185.009,90.0246*RAD+DOF(2),811.464) + + + + + kinmodel.0/joint_8 + + + + + + + + + SASS + 811.464 + + + + + 90.0246 + 0.0174533 + + kinmodel.0/joint_1 + + 185.009 + + 832.365 + + + + + + =-(SASS(811.464,90.0246*RAD+DOF(2),185.009)-832.365) + + + + + + + + + + + + + + atan2 + + + a + + + gamma + + + + + b + + + a + + + gamma + + + + + + + + + + + + + + + + + + + + + y + 0 + + + + x + 0 + + + + + + + + + y + + + + x + + + + + + + + + + + y + 0 + + + + x + 0 + + + + + + + + + + + + y + + + + x + + + + + + + + + + + + y + 0 + + + + x + 0 + + + + + + + + + + + y + + + + x + + + + + + + + + + + + + y + 0 + + + + x + 0 + + + + + + + + + + + y + + + + x + + + + + + + + + + + + + + + + + + 2 + + + + + + + a + 2 + + + + b + 2 + + + + + + + + + 2 + a + + b + + + + gamma + + + + + + + + + + + + + libkinscenes.kinScene/inst_kinmodel.0 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_0/axis0 + + + 0 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_1/axis0 + + + -90 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_2/axis0 + + + 90 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_3/axis0 + + + 0 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_4/axis0 + + + 0 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_5/axis0 + + + 0 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_6/axis0 + + + 0 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_7/axis0 + + + -0.0072643 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_8/axis0 + + + 205.91 + + + + + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0 + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_4_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_4_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_4_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_4_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_5_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_5_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_6_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_6_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_7_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_7_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_7_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_7_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_8_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_8_axis0_value + + + + +
diff --git a/collada_urdf/test/ped_welder.dae b/collada_urdf/test/ped_welder.dae new file mode 100644 index 0000000..930bd45 --- /dev/null +++ b/collada_urdf/test/ped_welder.dae @@ -0,0 +1,2206 @@ + + + + + CPFCatiaPlugin + + 2009-02-17T14:22:43Z + 2009-02-17T14:22:43Z + + Z_UP + + + + + + + 0.036886 0 0.999319 157.985 0 1 0 169.448 -0.999319 0 0.036886 805.771 0 0 0 1 + 0.036886 -0 -0.999319 799.395 -0 1 -0 -169.448 0.999319 -0 0.036886 -187.599 -0 0 -0 1 + 0.036886 -0 0.999319 157.985 0 1 0 169.448 -0.999319 0 0.036886 805.771 0 0 0 1 + 1 0 0 + 0.036886 -0 -0.999319 799.395 -0 1 -0 -169.448 0.999319 -0 0.036886 -187.599 -0 0 -0 1 + 0.036886 0 0.999319 157.985 0 1 0 169.448 -0.999319 0 0.036886 805.771 0 0 0 1 + + + + + + + + + + + + + + + + + + + + 0.036886 0 0.999319 63.0135 0 1 0 169.448 -0.999319 0 0.036886 706.951 0 0 0 1 + 0.036886 -0 -0.999319 704.145 -0 1 -0 -169.448 0.999319 -0 0.036886 -89.0472 -0 0 -0 1 + 0.036886 -0 0.999319 157.985 0 1 0 169.448 -0.999319 0 0.036886 805.771 0 0 0 1 + 1 0 0 + 0.036886 -0 -0.999319 799.395 -0 1 -0 -169.448 0.999319 -0 0.036886 -187.599 -0 0 -0 1 + 0.036886 0 0.999319 63.0135 0 1 0 169.448 -0.999319 0 0.036886 706.951 0 0 0 1 + 1 0 0 + 0.036886 -0 -0.999319 704.145 -0 1 -0 -169.448 0.999319 -0 0.036886 -89.0472 -0 0 -0 1 + 0.036886 0 0.999319 63.0135 0 1 0 169.448 -0.999319 0 0.036886 706.951 0 0 0 1 + + + + + + + + + + + + + + + 0.036886 0 0.999319 -52.3687 0 1 0 169.448 -0.999319 0 0.036886 992.389 0 0 0 1 + 0.036886 -0 -0.999319 993.645 -0 1 -0 -169.448 0.999319 -0 0.036886 15.7278 -0 0 -0 1 + 0.036886 -0 0.999319 157.985 0 1 0 169.448 -0.999319 0 0.036886 805.771 0 0 0 1 + 1 0 0 + 0.036886 -0 -0.999319 799.395 -0 1 -0 -169.448 0.999319 -0 0.036886 -187.599 -0 0 -0 1 + 0.036886 0 0.999319 63.0135 0 1 0 169.448 -0.999319 0 0.036886 706.951 0 0 0 1 + 1 0 0 + 0.036886 -0 -0.999319 704.145 -0 1 -0 -169.448 0.999319 -0 0.036886 -89.0472 -0 0 -0 1 + 0.036886 0 0.999319 -48.8646 0 1 0 169.448 -0.999319 0 0.036886 897.454 0 0 0 1 + 1 0 0 + 0.036886 -0 -0.999319 898.645 -0 1 -0 -169.448 0.999319 -0 0.036886 15.7278 -0 0 -0 1 + 0.036886 0 0.999319 -52.3687 0 1 0 169.448 -0.999319 0 0.036886 992.389 0 0 0 1 + + + + + + + + + + 0.036886 0 0.999319 -52.8372 0 1 0 169.448 -0.999319 0 0.036886 1005.08 0 0 0 1 + 0.036886 -0 -0.999319 1006.35 -0 1 -0 -169.448 0.999319 -0 0.036886 15.7278 -0 0 -0 1 + 0.036886 -0 0.999319 157.985 0 1 0 169.448 -0.999319 0 0.036886 805.771 0 0 0 1 + 1 0 0 + 0.036886 -0 -0.999319 799.395 -0 1 -0 -169.448 0.999319 -0 0.036886 -187.599 -0 0 -0 1 + 0.036886 0 0.999319 63.0135 0 1 0 169.448 -0.999319 0 0.036886 706.951 0 0 0 1 + 1 0 0 + 0.036886 -0 -0.999319 704.145 -0 1 -0 -169.448 0.999319 -0 0.036886 -89.0472 -0 0 -0 1 + 0.036886 0 0.999319 -48.8646 0 1 0 169.448 -0.999319 0 0.036886 897.454 0 0 0 1 + 1 0 0 + 0.036886 -0 -0.999319 898.645 -0 1 -0 -169.448 0.999319 -0 0.036886 15.7278 -0 0 -0 1 + 0.036886 0 0.999319 -52.8372 0 1 0 169.448 -0.999319 0 0.036886 1005.08 0 0 0 1 + 1 0 0 + 0.036886 -0 -0.999319 1006.35 -0 1 -0 -169.448 0.999319 -0 0.036886 15.7278 -0 0 -0 1 + 0.036886 0 0.999319 -52.8372 0 1 0 169.448 -0.999319 0 0.036886 1005.08 0 0 0 1 + + + + + + + + + + + + + + + + + + + + + + + + + + 0.036886 0 0.999319 -59.9389 0 1 0 169.448 -0.999319 0 0.036886 1197.48 0 0 0 1 + 0.036886 -0 -0.999319 1198.88 -0 1 -0 -169.448 0.999319 -0 0.036886 15.7278 -0 0 -0 1 + 0.036886 -0 0.999319 157.985 0 1 0 169.448 -0.999319 0 0.036886 805.771 0 0 0 1 + 1 0 0 + 0.036886 -0 -0.999319 799.395 -0 1 -0 -169.448 0.999319 -0 0.036886 -187.599 -0 0 -0 1 + 0.036886 0 0.999319 63.0135 0 1 0 169.448 -0.999319 0 0.036886 706.951 0 0 0 1 + 1 0 0 + 0.036886 -0 -0.999319 704.145 -0 1 -0 -169.448 0.999319 -0 0.036886 -89.0472 -0 0 -0 1 + 0.036886 0 0.999319 -48.8646 0 1 0 169.448 -0.999319 0 0.036886 897.454 0 0 0 1 + 1 0 0 + 0.036886 -0 -0.999319 898.645 -0 1 -0 -169.448 0.999319 -0 0.036886 15.7278 -0 0 -0 1 + 0.036886 0 0.999319 -52.8372 0 1 0 169.448 -0.999319 0 0.036886 1005.08 0 0 0 1 + 1 0 0 + 0.036886 -0 -0.999319 1006.35 -0 1 -0 -169.448 0.999319 -0 0.036886 15.7278 -0 0 -0 1 + 0.036886 0 0.999319 -59.9389 0 1 0 169.448 -0.999319 0 0.036886 1197.48 0 0 0 1 + 1 0 0 + 0.036886 -0 -0.999319 1198.88 -0 1 -0 -169.448 0.999319 -0 0.036886 15.7278 -0 0 -0 1 + 0.036886 0 0.999319 -59.9389 0 1 0 169.448 -0.999319 0 0.036886 1197.48 0 0 0 1 + + + + + + + + + + + 0.036886 0 0.999319 -61.8127 0 1 0 169.448 -0.999319 0 0.036886 1248.25 0 0 0 1 + 0.036886 -0 -0.999319 1249.68 -0 1 -0 -169.448 0.999319 -0 0.036886 15.7278 -0 0 -0 1 + 0.036886 -0 0.999319 157.985 0 1 0 169.448 -0.999319 0 0.036886 805.771 0 0 0 1 + 1 0 0 + 0.036886 -0 -0.999319 799.395 -0 1 -0 -169.448 0.999319 -0 0.036886 -187.599 -0 0 -0 1 + 0.036886 0 0.999319 63.0135 0 1 0 169.448 -0.999319 0 0.036886 706.951 0 0 0 1 + 1 0 0 + 0.036886 -0 -0.999319 704.145 -0 1 -0 -169.448 0.999319 -0 0.036886 -89.0472 -0 0 -0 1 + 0.036886 0 0.999319 -48.8646 0 1 0 169.448 -0.999319 0 0.036886 897.454 0 0 0 1 + 1 0 0 + 0.036886 -0 -0.999319 898.645 -0 1 -0 -169.448 0.999319 -0 0.036886 15.7278 -0 0 -0 1 + 0.036886 0 0.999319 -52.8372 0 1 0 169.448 -0.999319 0 0.036886 1005.08 0 0 0 1 + 1 0 0 + 0.036886 -0 -0.999319 1006.35 -0 1 -0 -169.448 0.999319 -0 0.036886 15.7278 -0 0 -0 1 + 0.036886 0 0.999319 -59.9389 0 1 0 169.448 -0.999319 0 0.036886 1197.48 0 0 0 1 + 1 0 0 + 0.036886 -0 -0.999319 1198.88 -0 1 -0 -169.448 0.999319 -0 0.036886 15.7278 -0 0 -0 1 + 0.036886 0 0.999319 -61.8127 0 1 0 169.448 -0.999319 0 0.036886 1248.25 0 0 0 1 + 1 0 0 + 0.036886 -0 -0.999319 1249.68 -0 1 -0 -169.448 0.999319 -0 0.036886 15.7278 -0 0 -0 1 + 0.036886 0 0.999319 -61.8127 0 1 0 169.448 -0.999319 0 0.036886 1248.25 0 0 0 1 + + + + + + + + + + 0.036886 0 0.999319 46.9128 0 1 0 169.448 -0.999319 0 0.036886 1143.15 0 0 0 1 + 0.036886 -0 -0.999319 1140.64 -0 1 -0 -169.448 0.999319 -0 0.036886 -89.0472 -0 0 -0 1 + 0.036886 -0 0.999319 157.985 0 1 0 169.448 -0.999319 0 0.036886 805.771 0 0 0 1 + 1 0 0 + 0.036886 -0 -0.999319 799.395 -0 1 -0 -169.448 0.999319 -0 0.036886 -187.599 -0 0 -0 1 + 0.036886 0 0.999319 46.9127 0 1 0 169.448 -0.999319 0 0.036886 1143.15 0 0 0 1 + 1 0 0 + 0.036886 -0 -0.999319 1140.64 -0 1 -0 -169.448 0.999319 -0 0.036886 -89.0472 -0 0 -0 1 + 0.036886 0 0.999319 46.9127 0 1 0 169.448 -0.999319 0 0.036886 1143.15 0 0 0 1 + + + + + + + + + + + + + + + + + + + + + -0.036886 0 0.999319 -65.5766 0 -1 0 169.448 0.999319 0 0.036886 1350.22 0 0 0 1 + -0.036886 -0 0.999319 -1351.72 -0 -1 0 169.448 0.999319 0 0.036886 15.7278 -0 0 -0 1 + 0.036886 -0 0.999319 157.985 0 1 0 169.448 -0.999319 0 0.036886 805.771 0 0 0 1 + 1 0 0 + 0.036886 -0 -0.999319 799.395 -0 1 -0 -169.448 0.999319 -0 0.036886 -187.599 -0 0 -0 1 + 0.036886 0 0.999319 46.9127 0 1 0 169.448 -0.999319 0 0.036886 1143.15 0 0 0 1 + 1 0 0 + 0.036886 -0 -0.999319 1140.64 -0 1 -0 -169.448 0.999319 -0 0.036886 -89.0472 -0 0 -0 1 + -0.036886 0 0.999319 -65.5766 0 -1 0 169.448 0.999319 0 0.036886 1350.22 0 0 0 1 + 1 0 0 + -0.036886 -0 0.999319 -1351.72 -0 -1 0 169.448 0.999319 0 0.036886 15.7278 -0 0 -0 1 + -0.036886 0 0.999319 -65.5766 0 -1 0 169.448 0.999319 0 0.036886 1350.22 0 0 0 1 + + + + + + + + + + + -0.036886 0 0.999319 -63.7028 0 -1 0 169.448 0.999319 0 0.036886 1299.45 0 0 0 1 + -0.036886 -0 0.999319 -1300.92 -0 -1 0 169.448 0.999319 0 0.036886 15.7278 -0 0 -0 1 + 0.036886 -0 0.999319 157.985 0 1 0 169.448 -0.999319 0 0.036886 805.771 0 0 0 1 + 1 0 0 + 0.036886 -0 -0.999319 799.395 -0 1 -0 -169.448 0.999319 -0 0.036886 -187.599 -0 0 -0 1 + 0.036886 0 0.999319 46.9127 0 1 0 169.448 -0.999319 0 0.036886 1143.15 0 0 0 1 + 1 0 0 + 0.036886 -0 -0.999319 1140.64 -0 1 -0 -169.448 0.999319 -0 0.036886 -89.0472 -0 0 -0 1 + -0.036886 0 0.999319 -65.5766 0 -1 0 169.448 0.999319 0 0.036886 1350.22 0 0 0 1 + 1 0 0 + -0.036886 -0 0.999319 -1351.72 -0 -1 0 169.448 0.999319 0 0.036886 15.7278 -0 0 -0 1 + -0.036886 0 0.999319 -63.7028 0 -1 0 169.448 0.999319 0 0.036886 1299.45 0 0 0 1 + 1 0 0 + -0.036886 -0 0.999319 -1300.92 -0 -1 0 169.448 0.999319 0 0.036886 15.7278 -0 0 -0 1 + -0.036886 0 0.999319 -63.7028 0 -1 0 169.448 0.999319 0 0.036886 1299.45 0 0 0 1 + + + + + + + + + + + + + + + + 143.002 -6.35 -55.5755 143.002 6.35 -55.5755 152.654 6.35 -55.5755 152.654 -6.35 -55.5755 143.002 -12.7 -44.577 143.002 -6.35 -55.5755 152.654 -6.35 -55.5755 152.654 -12.7 -44.577 143.002 -6.35 -33.5785 143.002 -12.7 -44.577 152.654 -12.7 -44.577 152.654 -6.35 -33.5785 143.002 6.35 -33.5785 143.002 -6.35 -33.5785 152.654 -6.35 -33.5785 152.654 6.35 -33.5785 152.654 6.35 -33.5785 152.654 -6.35 -33.5785 152.654 -12.7 -44.577 152.654 -6.35 -55.5755 152.654 6.35 -55.5755 152.654 12.7 -44.577 143.002 6.35 -55.5755 143.002 12.7 -44.577 152.654 12.7 -44.577 152.654 6.35 -55.5755 143.002 12.7 -44.577 143.002 6.35 -55.5755 143.002 -6.35 -55.5755 143.002 -12.7 -44.577 143.002 -6.35 -33.5785 143.002 6.35 -33.5785 143.002 12.7 -44.577 143.002 6.35 -33.5785 152.654 6.35 -33.5785 152.654 12.7 -44.577 130.302 -7.9375 -58.3251 130.302 7.9375 -58.3251 143.002 7.9375 -58.3251 143.002 -7.9375 -58.3251 130.302 -15.875 -44.577 130.302 -7.9375 -58.3251 143.002 -7.9375 -58.3251 143.002 -15.875 -44.577 130.302 -7.9375 -30.8288 130.302 -15.875 -44.577 143.002 -15.875 -44.577 143.002 -7.9375 -30.8288 130.302 7.9375 -30.8288 130.302 -7.9375 -30.8288 143.002 -7.9375 -30.8288 143.002 7.9375 -30.8288 143.002 7.9375 -30.8288 143.002 -7.9375 -30.8288 143.002 -15.875 -44.577 143.002 -7.9375 -58.3251 143.002 7.9375 -58.3251 143.002 15.875 -44.577 130.302 7.9375 -58.3251 130.302 15.875 -44.577 143.002 15.875 -44.577 143.002 7.9375 -58.3251 130.302 15.875 -44.577 130.302 7.9375 -58.3251 130.302 -7.9375 -58.3251 130.302 -15.875 -44.577 130.302 -7.9375 -30.8288 130.302 7.9375 -30.8288 130.302 15.875 -44.577 130.302 7.9375 -30.8288 143.002 7.9375 -30.8288 143.002 15.875 -44.577 152.654 -3.82683 -53.8158 152.654 0 -54.577 158.654 0 -54.577 158.654 -3.82683 -53.8158 152.654 -7.07107 -51.648 152.654 -3.82683 -53.8158 158.654 -3.82683 -53.8158 158.654 -7.07107 -51.648 152.654 -9.2388 -48.4038 152.654 -7.07107 -51.648 158.654 -7.07107 -51.648 158.654 -9.2388 -48.4038 152.654 -10 -44.577 152.654 -9.2388 -48.4038 158.654 -9.2388 -48.4038 158.654 -10 -44.577 152.654 -9.23879 -40.7501 152.654 -10 -44.577 158.654 -10 -44.577 158.654 -9.23879 -40.7501 152.654 -7.07107 -37.5059 152.654 -9.23879 -40.7501 158.654 -9.23879 -40.7501 158.654 -7.07107 -37.5059 152.654 -3.82683 -35.3382 152.654 -7.07107 -37.5059 158.654 -7.07107 -37.5059 158.654 -3.82683 -35.3382 152.654 0 -34.577 152.654 -3.82683 -35.3382 158.654 -3.82683 -35.3382 158.654 0 -34.577 152.654 3.82683 -35.3382 152.654 0 -34.577 158.654 0 -34.577 158.654 3.82683 -35.3382 152.654 7.07107 -37.5059 152.654 3.82683 -35.3382 158.654 3.82683 -35.3382 158.654 7.07107 -37.5059 152.654 9.2388 -40.7501 152.654 7.07107 -37.5059 158.654 7.07107 -37.5059 158.654 9.2388 -40.7501 152.654 10 -44.577 152.654 9.2388 -40.7501 158.654 9.2388 -40.7501 158.654 10 -44.577 152.654 9.2388 -48.4038 152.654 10 -44.577 158.654 10 -44.577 158.654 9.2388 -48.4038 152.654 7.07107 -51.648 152.654 9.2388 -48.4038 158.654 9.2388 -48.4038 158.654 7.07107 -51.648 152.654 3.82683 -53.8158 152.654 7.07107 -51.648 158.654 7.07107 -51.648 158.654 3.82683 -53.8158 152.654 0 -54.577 152.654 3.82683 -53.8158 158.654 3.82683 -53.8158 158.654 0 -54.577 160.654 0 -36.577 160.654 -3.06147 -37.1859 160.654 -5.65685 -38.9201 160.654 -7.39104 -41.5155 160.654 -8 -44.577 160.654 -7.39104 -47.6384 160.654 -5.65685 -50.2338 160.654 -3.06147 -51.968 160.654 0 -52.577 160.654 3.06147 -51.968 160.654 5.65686 -50.2338 160.654 7.39104 -47.6384 160.654 8 -44.577 160.654 7.39104 -41.5155 160.654 5.65686 -38.9201 160.654 3.06147 -37.1859 158.654 3.82683 -35.3382 158.654 0 -34.577 160.654 0 -36.577 160.654 3.06147 -37.1859 158.654 7.07107 -37.5059 158.654 3.82683 -35.3382 160.654 3.06147 -37.1859 160.654 5.65686 -38.9201 158.654 9.23879 -40.7501 158.654 7.07107 -37.5059 160.654 5.65686 -38.9201 160.654 7.39104 -41.5155 158.654 10 -44.577 158.654 9.23879 -40.7501 160.654 7.39104 -41.5155 160.654 8 -44.577 158.654 9.23879 -48.4038 158.654 10 -44.577 160.654 8 -44.577 160.654 7.39104 -47.6384 158.654 7.07107 -51.648 158.654 9.23879 -48.4038 160.654 7.39104 -47.6384 160.654 5.65686 -50.2338 158.654 3.82683 -53.8158 158.654 7.07107 -51.648 160.654 5.65686 -50.2338 160.654 3.06147 -51.968 158.654 0 -54.577 158.654 3.82683 -53.8158 160.654 3.06147 -51.968 160.654 0 -52.577 158.654 -3.82683 -53.8158 158.654 0 -54.577 160.654 0 -52.577 160.654 -3.06147 -51.968 158.654 -7.07107 -51.648 158.654 -3.82683 -53.8158 160.654 -3.06147 -51.968 160.654 -5.65685 -50.2338 158.654 -9.2388 -48.4038 158.654 -7.07107 -51.648 160.654 -5.65685 -50.2338 160.654 -7.39104 -47.6384 158.654 -10 -44.577 158.654 -9.2388 -48.4038 160.654 -7.39104 -47.6384 160.654 -8 -44.577 158.654 -9.2388 -40.7501 158.654 -10 -44.577 160.654 -8 -44.577 160.654 -7.39104 -41.5155 158.654 -7.07107 -37.5059 158.654 -9.2388 -40.7501 160.654 -7.39104 -41.5155 160.654 -5.65685 -38.9201 158.654 -3.82683 -35.3382 158.654 -7.07107 -37.5059 160.654 -5.65685 -38.9201 160.654 -3.06147 -37.1859 158.654 0 -34.577 158.654 -3.82683 -35.3382 160.654 -3.06147 -37.1859 160.654 0 -36.577 152.527 10.7339 -101.428 152.527 11.1125 -98.552 158.877 11.1125 -98.552 158.877 10.7339 -101.428 158.877 10.7339 -101.428 158.877 11.1125 -98.552 160.877 9.11251 -98.552 160.877 8.802 -100.91 158.877 11.1125 -98.552 158.877 10.7338 -95.6759 160.877 8.802 -96.1935 160.877 9.11251 -98.552 152.527 11.1125 -98.552 152.527 10.7338 -95.6759 158.877 10.7338 -95.6759 158.877 11.1125 -98.552 152.527 10.7338 -95.6759 152.527 9.62371 -92.9957 158.877 9.6237 -92.9957 158.877 10.7338 -95.6759 158.877 10.7338 -95.6759 158.877 9.6237 -92.9957 160.877 7.89166 -93.9957 160.877 8.802 -96.1935 158.877 9.6237 -92.9957 158.877 7.85773 -90.6943 160.877 6.44351 -92.1085 160.877 7.89166 -93.9957 152.527 9.62371 -92.9957 152.527 7.85773 -90.6943 158.877 7.85773 -90.6943 158.877 9.6237 -92.9957 152.527 7.85773 -90.6943 152.527 5.55624 -88.9283 158.877 5.55625 -88.9283 158.877 7.85773 -90.6943 158.877 7.85773 -90.6943 158.877 5.55625 -88.9283 160.877 4.55625 -90.6603 160.877 6.44351 -92.1085 158.877 5.55625 -88.9283 158.877 2.87613 -87.8181 160.877 2.35849 -89.75 160.877 4.55625 -90.6603 152.527 5.55624 -88.9283 152.527 2.87613 -87.8181 158.877 2.87613 -87.8181 158.877 5.55625 -88.9283 152.527 2.87613 -87.8181 152.527 0 -87.4395 158.877 0 -87.4395 158.877 2.87613 -87.8181 158.877 2.87613 -87.8181 158.877 0 -87.4395 160.877 0 -89.4395 160.877 2.35849 -89.75 158.877 0 -87.4395 158.877 -2.87613 -87.8181 160.877 -2.35849 -89.75 160.877 0 -89.4395 152.527 0 -87.4395 152.527 -2.87614 -87.8181 158.877 -2.87613 -87.8181 158.877 0 -87.4395 152.527 -2.87614 -87.8181 152.527 -5.55625 -88.9283 158.877 -5.55625 -88.9283 158.877 -2.87613 -87.8181 158.877 -2.87613 -87.8181 158.877 -5.55625 -88.9283 160.877 -4.55625 -90.6603 160.877 -2.35849 -89.75 158.877 -5.55625 -88.9283 158.877 -7.85772 -90.6943 160.877 -6.44351 -92.1085 160.877 -4.55625 -90.6603 152.527 -5.55625 -88.9283 152.527 -7.85773 -90.6943 158.877 -7.85772 -90.6943 158.877 -5.55625 -88.9283 152.527 -7.85773 -90.6943 152.527 -9.62371 -92.9957 158.877 -9.6237 -92.9957 158.877 -7.85772 -90.6943 158.877 -7.85772 -90.6943 158.877 -9.6237 -92.9957 160.877 -7.89166 -93.9957 160.877 -6.44351 -92.1085 158.877 -9.6237 -92.9957 158.877 -10.7338 -95.6759 160.877 -8.802 -96.1935 160.877 -7.89166 -93.9957 152.527 -9.62371 -92.9957 152.527 -10.7338 -95.6759 158.877 -10.7338 -95.6759 158.877 -9.6237 -92.9957 152.527 -10.7338 -95.6759 152.527 -11.1125 -98.552 158.877 -11.1125 -98.552 158.877 -10.7338 -95.6759 158.877 -10.7338 -95.6759 158.877 -11.1125 -98.552 160.877 -9.1125 -98.552 160.877 -8.802 -96.1935 158.877 -11.1125 -98.552 158.877 -10.7338 -101.428 160.877 -8.802 -100.91 160.877 -9.1125 -98.552 152.527 -11.1125 -98.552 152.527 -10.7338 -101.428 158.877 -10.7338 -101.428 158.877 -11.1125 -98.552 152.527 -10.7338 -101.428 152.527 -9.62371 -104.108 158.877 -9.62371 -104.108 158.877 -10.7338 -101.428 158.877 -10.7338 -101.428 158.877 -9.62371 -104.108 160.877 -7.89166 -103.108 160.877 -8.802 -100.91 158.877 -9.62371 -104.108 158.877 -7.85773 -106.41 160.877 -6.44351 -104.996 160.877 -7.89166 -103.108 152.527 -9.62371 -104.108 152.527 -7.85773 -106.41 158.877 -7.85773 -106.41 158.877 -9.62371 -104.108 152.527 -7.85773 -106.41 152.527 -5.55626 -108.176 158.877 -5.55625 -108.176 158.877 -7.85773 -106.41 158.877 -7.85773 -106.41 158.877 -5.55625 -108.176 160.877 -4.55625 -106.444 160.877 -6.44351 -104.996 158.877 -5.55625 -108.176 158.877 -2.87613 -109.286 160.877 -2.35849 -107.354 160.877 -4.55625 -106.444 158.877 -2.87613 -109.286 158.877 0 -109.664 160.877 0 -107.664 160.877 -2.35849 -107.354 158.877 5.55625 -108.176 158.877 7.85773 -106.41 160.877 6.44351 -104.996 160.877 4.55625 -106.444 158.877 2.87613 -109.286 158.877 5.55625 -108.176 160.877 4.55625 -106.444 160.877 2.35849 -107.354 158.877 0 -109.664 158.877 2.87613 -109.286 160.877 2.35849 -107.354 160.877 0 -107.664 160.877 0 -107.664 160.877 2.35849 -107.354 160.877 4.55625 -106.444 160.877 6.44351 -104.996 160.877 7.89166 -103.108 160.877 8.802 -100.91 160.877 9.11251 -98.552 160.877 8.802 -96.1935 160.877 7.89166 -93.9957 160.877 6.44351 -92.1085 160.877 4.55625 -90.6603 160.877 2.35849 -89.75 160.877 0 -89.4395 160.877 -2.35849 -89.75 160.877 -4.55625 -90.6603 160.877 -6.44351 -92.1085 160.877 -7.89166 -93.9957 160.877 -8.802 -96.1935 160.877 -9.1125 -98.552 160.877 -8.802 -100.91 160.877 -7.89166 -103.108 160.877 -6.44351 -104.996 160.877 -4.55625 -106.444 160.877 -2.35849 -107.354 158.877 7.85773 -106.41 158.877 9.62371 -104.108 160.877 7.89166 -103.108 160.877 6.44351 -104.996 152.527 7.85771 -106.41 152.527 9.62371 -104.108 158.877 9.62371 -104.108 158.877 7.85773 -106.41 152.527 5.55625 -108.176 152.527 7.85771 -106.41 158.877 7.85773 -106.41 158.877 5.55625 -108.176 152.527 2.87612 -109.286 152.527 5.55625 -108.176 158.877 5.55625 -108.176 158.877 2.87613 -109.286 152.527 0 -109.664 152.527 2.87612 -109.286 158.877 2.87613 -109.286 158.877 0 -109.664 152.527 -2.87613 -109.286 152.527 0 -109.664 158.877 0 -109.664 158.877 -2.87613 -109.286 152.527 -5.55626 -108.176 152.527 -2.87613 -109.286 158.877 -2.87613 -109.286 158.877 -5.55625 -108.176 152.527 -2.87613 -109.286 152.527 -5.55626 -108.176 152.527 -7.85773 -106.41 152.527 -9.62371 -104.108 152.527 -10.7338 -101.428 152.527 -11.1125 -98.552 152.527 -10.7338 -95.6759 152.527 -9.62371 -92.9957 152.527 -7.85773 -90.6943 152.527 -5.55625 -88.9283 152.527 -2.87614 -87.8181 152.527 0 -87.4395 152.527 2.87613 -87.8181 152.527 5.55624 -88.9283 152.527 7.85773 -90.6943 152.527 9.62371 -92.9957 152.527 10.7338 -95.6759 152.527 11.1125 -98.552 152.527 10.7339 -101.428 152.527 9.62371 -104.108 152.527 7.85771 -106.41 152.527 5.55625 -108.176 152.527 2.87612 -109.286 152.527 0 -109.664 152.527 9.62371 -104.108 152.527 10.7339 -101.428 158.877 10.7339 -101.428 158.877 9.62371 -104.108 158.877 9.62371 -104.108 158.877 10.7339 -101.428 160.877 8.802 -100.91 160.877 7.89166 -103.108 130.302 19.05 -98.552 130.302 9.525 -115.05 130.302 -9.525 -115.05 130.302 -19.05 -98.552 130.302 -9.525 -82.0542 130.302 9.52501 -82.0542 152.527 0 -115.05 152.527 -4.26994 -114.488 151.675 -6.47049 -115.05 151.675 -6.47049 -115.05 152.527 -4.26994 -114.488 152.527 -8.24889 -112.84 150.41 -9.52501 -115.05 151.675 -6.47049 -115.05 152.527 -8.24889 -112.84 150.41 -9.52501 -115.05 152.527 -8.24889 -112.84 151.57 -10.925 -112.625 151.57 -10.925 -112.625 152.527 -8.24889 -112.84 152.527 -11.6657 -110.218 151.57 -10.925 -112.625 152.527 -11.6657 -110.218 152.527 -14.2875 -106.801 152.527 -14.2875 -106.801 152.527 -15.9356 -102.822 151.675 -17.5228 -101.197 151.675 -17.5228 -101.197 152.527 -15.9356 -102.822 152.527 -16.4978 -98.552 150.41 -19.05 -98.552 151.675 -17.5228 -101.197 152.527 -16.4978 -98.552 150.41 -19.05 -98.552 152.527 -16.4978 -98.552 151.57 -17.65 -96.1271 151.57 -17.65 -96.1271 152.527 -16.4978 -98.552 152.527 -15.9356 -94.2821 151.57 -17.65 -96.1271 152.527 -15.9356 -94.2821 152.527 -14.2875 -90.3031 152.527 -14.2875 -90.3031 152.527 -11.6657 -86.8863 151.675 -11.0523 -84.6995 151.675 -11.0523 -84.6995 152.527 -11.6657 -86.8863 152.527 -8.24889 -84.2645 150.41 -9.525 -82.0542 151.675 -11.0523 -84.6995 152.527 -8.24889 -84.2645 150.41 -9.525 -82.0542 152.527 -8.24889 -84.2645 151.57 -6.72503 -82.0542 151.57 -6.72503 -82.0542 152.527 -8.24889 -84.2645 152.527 -4.26994 -82.6164 151.57 -6.72503 -82.0542 152.527 -4.26994 -82.6164 152.527 0 -82.0542 152.527 0 -82.0542 152.527 4.26994 -82.6164 151.675 6.47049 -82.0542 151.675 6.47049 -82.0542 152.527 4.26994 -82.6164 152.527 8.2489 -84.2645 150.41 9.52501 -82.0542 151.675 6.47049 -82.0542 152.527 8.2489 -84.2645 150.41 9.52501 -82.0542 152.527 8.2489 -84.2645 151.57 10.925 -84.4791 151.57 10.925 -84.4791 152.527 8.2489 -84.2645 152.527 11.6657 -86.8863 151.57 10.925 -84.4791 152.527 11.6657 -86.8863 152.527 14.2875 -90.3031 152.527 14.2875 -90.3031 152.527 15.9356 -94.2821 151.675 17.5228 -95.9067 151.675 17.5228 -95.9067 152.527 15.9356 -94.2821 152.527 16.4978 -98.552 150.41 19.05 -98.552 151.675 17.5228 -95.9067 152.527 16.4978 -98.552 150.41 19.05 -98.552 152.527 16.4978 -98.552 151.57 17.65 -100.977 151.57 17.65 -100.977 152.527 16.4978 -98.552 152.527 15.9356 -102.822 151.57 17.65 -100.977 152.527 15.9356 -102.822 152.527 14.2875 -106.801 152.527 14.2875 -106.801 152.527 11.6657 -110.218 151.675 11.0523 -112.405 151.675 11.0523 -112.405 152.527 11.6657 -110.218 152.527 8.2489 -112.84 151.57 6.72503 -115.05 152.527 4.26994 -114.488 152.527 0 -115.05 152.527 0 -115.05 152.527 4.26994 -114.488 152.527 8.2489 -112.84 152.527 11.6657 -110.218 152.527 14.2875 -106.801 152.527 15.9356 -102.822 152.527 16.4978 -98.552 152.527 15.9356 -94.2821 152.527 14.2875 -90.3031 152.527 11.6657 -86.8863 152.527 8.2489 -84.2645 152.527 4.26994 -82.6164 152.527 0 -82.0542 152.527 -4.26994 -82.6164 152.527 -8.24889 -84.2645 152.527 -11.6657 -86.8863 152.527 -14.2875 -90.3031 152.527 -15.9356 -94.2821 152.527 -16.4978 -98.552 152.527 -15.9356 -102.822 152.527 -14.2875 -106.801 152.527 -11.6657 -110.218 152.527 -8.24889 -112.84 152.527 -4.26994 -114.488 151.57 6.72503 -115.05 152.527 8.2489 -112.84 152.527 4.26994 -114.488 150.41 9.52501 -115.05 152.527 8.2489 -112.84 151.57 6.72503 -115.05 130.302 9.525 -115.05 150.41 9.52501 -115.05 151.57 6.72503 -115.05 152.527 0 -115.05 151.675 -6.47049 -115.05 150.41 -9.52501 -115.05 130.302 -9.525 -115.05 130.302 -9.525 -115.05 150.41 -9.52501 -115.05 151.57 -10.925 -112.625 152.527 -14.2875 -106.801 151.675 -17.5228 -101.197 150.41 -19.05 -98.552 130.302 -19.05 -98.552 130.302 -19.05 -98.552 150.41 -19.05 -98.552 151.57 -17.65 -96.1271 152.527 -14.2875 -90.3031 151.675 -11.0523 -84.6995 150.41 -9.525 -82.0542 130.302 -9.525 -82.0542 130.302 -9.525 -82.0542 150.41 -9.525 -82.0542 151.57 -6.72503 -82.0542 152.527 0 -82.0542 151.675 6.47049 -82.0542 150.41 9.52501 -82.0542 130.302 9.52501 -82.0542 130.302 9.52501 -82.0542 150.41 9.52501 -82.0542 151.57 10.925 -84.4791 152.527 14.2875 -90.3031 151.675 17.5228 -95.9067 150.41 19.05 -98.552 130.302 19.05 -98.552 130.302 19.05 -98.552 150.41 19.05 -98.552 151.57 17.65 -100.977 152.527 14.2875 -106.801 151.675 11.0523 -112.405 150.41 9.52501 -115.05 130.302 9.525 -115.05 150.41 9.52501 -115.05 151.675 11.0523 -112.405 152.527 8.2489 -112.84 -357.2 19.9343 -103.893 -357.2 17.8726 -108.871 -357.2 14.5929 -113.145 -357.2 10.3187 -116.425 -357.2 5.34138 -118.486 -357.2 0 -119.189 -357.2 -5.34138 -118.486 -357.2 -10.3187 -116.425 -357.2 -14.5929 -113.145 -357.2 -17.8726 -108.871 -357.2 -19.9343 -103.893 -357.2 -20.6375 -98.552 -357.2 -19.9343 -93.2106 -357.2 -17.8726 -88.2332 -357.2 -14.5929 -83.9591 -357.2 -10.3188 -80.6794 -357.2 -5.34138 -78.6177 -357.2 0 -77.9145 -357.2 5.34138 -78.6177 -357.2 10.3187 -80.6794 -357.2 14.5929 -83.9591 -357.2 17.8726 -88.2332 -357.2 19.9343 -93.2106 -357.2 20.6375 -98.552 -98.425 19.9343 -93.2106 -98.425 20.6375 -98.552 -357.2 20.6375 -98.552 -357.2 19.9343 -93.2106 -98.425 17.8726 -88.2332 -98.425 19.9343 -93.2106 -357.2 19.9343 -93.2106 -357.2 17.8726 -88.2332 -98.425 14.5929 -83.9591 -98.425 17.8726 -88.2332 -357.2 17.8726 -88.2332 -357.2 14.5929 -83.9591 -98.425 10.3187 -80.6794 -98.425 14.5929 -83.9591 -357.2 14.5929 -83.9591 -357.2 10.3187 -80.6794 -98.425 5.34138 -78.6177 -98.425 10.3187 -80.6794 -357.2 10.3187 -80.6794 -357.2 5.34138 -78.6177 -98.425 0 -77.9145 -98.425 5.34138 -78.6177 -357.2 5.34138 -78.6177 -357.2 0 -77.9145 -98.425 -5.34138 -78.6177 -98.425 0 -77.9145 -357.2 0 -77.9145 -357.2 -5.34138 -78.6177 -98.425 -10.3188 -80.6794 -98.425 -5.34138 -78.6177 -357.2 -5.34138 -78.6177 -357.2 -10.3188 -80.6794 -98.425 -14.5929 -83.9591 -98.425 -10.3188 -80.6794 -357.2 -10.3188 -80.6794 -357.2 -14.5929 -83.9591 -98.425 -17.8726 -88.2332 -98.425 -14.5929 -83.9591 -357.2 -14.5929 -83.9591 -357.2 -17.8726 -88.2332 -98.425 -19.9343 -93.2106 -98.425 -17.8726 -88.2332 -357.2 -17.8726 -88.2332 -357.2 -19.9343 -93.2106 -98.425 -20.6375 -98.552 -98.425 -19.9343 -93.2106 -357.2 -19.9343 -93.2106 -357.2 -20.6375 -98.552 -98.425 -19.9343 -103.893 -98.425 -20.6375 -98.552 -357.2 -20.6375 -98.552 -357.2 -19.9343 -103.893 -98.425 -17.8726 -108.871 -98.425 -19.9343 -103.893 -357.2 -19.9343 -103.893 -357.2 -17.8726 -108.871 -98.425 -14.5929 -113.145 -98.425 -17.8726 -108.871 -357.2 -17.8726 -108.871 -357.2 -14.5929 -113.145 -98.425 -10.3187 -116.425 -98.425 -14.5929 -113.145 -357.2 -14.5929 -113.145 -357.2 -10.3187 -116.425 -98.425 -5.34138 -118.486 -98.425 -10.3187 -116.425 -357.2 -10.3187 -116.425 -357.2 -5.34138 -118.486 -98.425 0 -119.189 -98.425 -5.34138 -118.486 -357.2 -5.34138 -118.486 -357.2 0 -119.189 -98.425 5.34138 -118.486 -98.425 0 -119.189 -357.2 0 -119.189 -357.2 5.34138 -118.486 -98.425 10.3187 -116.425 -98.425 5.34138 -118.486 -357.2 5.34138 -118.486 -357.2 10.3187 -116.425 -98.425 14.5929 -113.145 -98.425 10.3187 -116.425 -357.2 10.3187 -116.425 -357.2 14.5929 -113.145 -98.425 17.8726 -108.871 -98.425 14.5929 -113.145 -357.2 14.5929 -113.145 -357.2 17.8726 -108.871 -98.425 19.9343 -103.893 -98.425 17.8726 -108.871 -357.2 17.8726 -108.871 -357.2 19.9343 -103.893 -98.425 20.6375 -98.552 -98.425 19.9343 -103.893 -357.2 19.9343 -103.893 -357.2 20.6375 -98.552 -54.9087 34.3841 0 -98.425 33.3375 -19.552 -58.7375 32.7982 0 -58.7375 32.7982 0 -98.425 33.3375 -19.552 -62.0253 30.2753 0 -62.0253 30.2753 0 -98.425 33.3375 -19.552 -64.5482 26.9875 0 -64.5482 26.9875 0 -98.425 33.3375 -19.552 -66.1341 23.1588 0 -66.1341 23.1588 0 -98.425 33.3375 -19.552 -66.675 19.05 0 -66.675 19.05 0 -98.425 33.3375 -19.552 -98.425 -33.3375 -19.552 -66.675 -19.05 0 -66.675 -19.05 0 -98.425 -33.3375 -19.552 -66.1341 -23.1588 0 -66.1341 -23.1588 0 -98.425 -33.3375 -19.552 -64.5482 -26.9875 0 -64.5482 -26.9875 0 -98.425 -33.3375 -19.552 -62.0253 -30.2753 0 -62.0253 -30.2753 0 -98.425 -33.3375 -19.552 -58.7375 -32.7982 0 -58.7375 -32.7982 0 -98.425 -33.3375 -19.552 -54.9087 -34.3841 0 -54.9087 -34.3841 0 -98.425 -33.3375 -19.552 -50.8 -34.925 0 -50.8 -34.925 0 -98.425 -33.3375 -19.552 95.25 -33.3375 -19.552 50.8 -34.925 0 50.8 -34.925 0 95.25 -33.3375 -19.552 54.9087 -34.3841 0 54.9087 -34.3841 0 95.25 -33.3375 -19.552 58.7375 -32.7982 0 58.7375 -32.7982 0 95.25 -33.3375 -19.552 62.0253 -30.2753 0 62.0253 -30.2753 0 95.25 -33.3375 -19.552 64.5481 -26.9875 0 64.5481 -26.9875 0 95.25 -33.3375 -19.552 66.1341 -23.1587 0 66.1341 -23.1587 0 95.25 -33.3375 -19.552 70.7061 -4.10875 0 71.247 0 0 70.7061 -4.10875 0 95.25 -33.3375 -19.552 95.25 -33.3375 -19.552 95.25 33.3375 -19.552 71.247 0 0 71.247 0 0 95.25 33.3375 -19.552 70.7061 4.10875 0 70.7061 4.10875 0 95.25 33.3375 -19.552 66.1341 23.1587 0 66.1341 23.1587 0 95.25 33.3375 -19.552 64.5481 26.9875 0 64.5481 26.9875 0 95.25 33.3375 -19.552 62.0253 30.2753 0 62.0253 30.2753 0 95.25 33.3375 -19.552 58.7375 32.7982 0 58.7375 32.7982 0 95.25 33.3375 -19.552 54.9087 34.3841 0 54.9087 34.3841 0 95.25 33.3375 -19.552 50.8 34.925 0 50.8 34.925 0 95.25 33.3375 -19.552 -98.425 33.3375 -19.552 -50.8 34.925 0 -50.8 34.925 0 -98.425 33.3375 -19.552 -54.9087 34.3841 0 -98.425 28.8711 -115.221 -98.425 32.2016 -107.18 95.25 32.2016 -107.18 95.25 28.8711 -115.221 -98.425 23.5732 -122.125 -98.425 28.8711 -115.221 95.25 28.8711 -115.221 95.25 23.5732 -122.125 -98.425 16.6688 -127.423 -98.425 23.5732 -122.125 95.25 23.5732 -122.125 95.25 16.6688 -127.423 -98.425 8.62838 -130.754 -98.425 16.6688 -127.423 95.25 16.6688 -127.423 95.25 8.62838 -130.754 -98.425 0 -131.889 -98.425 8.62838 -130.754 95.25 8.62838 -130.754 95.25 0 -131.889 -98.425 -8.62838 -130.754 -98.425 0 -131.889 95.25 0 -131.889 95.25 -8.62838 -130.754 -98.425 -16.6687 -127.423 -98.425 -8.62838 -130.754 95.25 -8.62838 -130.754 95.25 -16.6687 -127.423 -98.425 -28.8711 -115.221 -98.425 -23.5732 -122.125 95.25 -23.5732 -122.125 95.25 -28.8711 -115.221 -98.425 -32.2016 -107.18 -98.425 -28.8711 -115.221 95.25 -28.8711 -115.221 95.25 -32.2016 -107.18 -98.425 -33.3375 -98.552 -98.425 -32.2016 -107.18 95.25 -32.2016 -107.18 95.25 -33.3375 -98.552 95.25 -33.3375 -98.552 95.25 -32.2016 -107.18 95.25 -28.8711 -115.221 95.25 -23.5732 -122.125 95.25 -16.6687 -127.423 95.25 -8.62838 -130.754 95.25 0 -131.889 95.25 8.62838 -130.754 95.25 16.6688 -127.423 95.25 23.5732 -122.125 95.25 28.8711 -115.221 95.25 32.2016 -107.18 95.25 33.3375 -98.552 -98.425 32.2016 -107.18 -98.425 33.3375 -98.552 95.25 33.3375 -98.552 95.25 32.2016 -107.18 -98.425 33.3375 -98.552 -98.425 32.2016 -107.18 -98.425 28.8711 -115.221 -98.425 23.5732 -122.125 -98.425 16.6688 -127.423 -98.425 8.62838 -130.754 -98.425 0 -131.889 -98.425 -8.62838 -130.754 -98.425 -16.6687 -127.423 -98.425 -23.5732 -122.125 -98.425 -28.8711 -115.221 -98.425 -32.2016 -107.18 -98.425 -33.3375 -98.552 -98.425 -23.5732 -122.125 -98.425 -16.6687 -127.423 95.25 -16.6687 -127.423 95.25 -23.5732 -122.125 95.25 -33.3375 -98.552 95.25 33.3375 -98.552 95.25 33.3375 -19.552 95.25 -33.3375 -19.552 -98.425 -33.3375 -98.552 95.25 -33.3375 -98.552 95.25 -33.3375 -19.552 -98.425 -33.3375 -19.552 -98.425 33.3375 -98.552 -98.425 -33.3375 -98.552 -98.425 -33.3375 -19.552 -98.425 33.3375 -19.552 95.25 33.3375 -98.552 -98.425 33.3375 -98.552 -98.425 33.3375 -19.552 95.25 33.3375 -19.552 -98.425 33.3375 -19.552 95.25 33.3375 -19.552 95.25 -33.3375 -19.552 -98.425 -33.3375 -19.552 54.9087 34.3841 0 -54.9087 34.3841 0 -58.7375 32.7982 0 -64.5482 26.9875 0 -66.1341 23.1588 0 -66.1341 -23.1588 0 -64.5482 -26.9875 0 -58.7375 -32.7982 0 -54.9087 -34.3841 0 54.9087 -34.3841 0 58.7375 -32.7982 0 64.5481 -26.9875 0 71.247 0 0 64.5481 26.9875 0 58.7375 32.7982 0 50.8 34.925 0 -50.8 34.925 0 -62.0253 30.2753 0 -66.675 19.05 0 -66.675 -19.05 0 -62.0253 -30.2753 0 -50.8 -34.925 0 50.8 -34.925 0 62.0253 -30.2753 0 66.1341 -23.1587 0 70.7061 -4.10875 0 70.7061 4.10875 0 66.1341 23.1587 0 62.0253 30.2753 0 + + + + + + + + + + 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 0 1 0 0 1 0 0 1 0 0 1 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 0 1 0 0 1 0 0 1 0 0 1 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 -0.382672 -0.923884 0 0 -1 0 0 -1 0 -0.382672 -0.923884 0 -0.707083 -0.70713 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.707083 -0.70713 0 -0.923884 -0.382672 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.923884 -0.382672 0 -1 0 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -1 0 0 -0.923884 0.382672 0 -1 0 0 -1 0 0 -0.923884 0.382672 0 -0.707083 0.70713 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.707083 0.70713 0 -0.382672 0.923884 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.382672 0.923884 0 0 1 0 -0.382672 0.923884 0 -0.382672 0.923884 0 0 1 0 0.382672 0.923884 0 0 1 0 0 1 0 0.382672 0.923884 0 0.70713 0.707083 0 0.382672 0.923884 0 0.382672 0.923884 0 0.70713 0.707083 0 0.923884 0.382672 0 0.70713 0.707083 0 0.70713 0.707083 0 0.923884 0.382672 0 1 0 0 0.923884 0.382672 0 0.923884 0.382672 0 1 0 0 0.923884 -0.382672 0 1 0 0 1 0 0 0.923884 -0.382672 0 0.707083 -0.70713 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.707083 -0.70713 0 0.382672 -0.923884 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.382672 -0.923884 0 0 -1 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0 -1 0.863767 0 0.503891 0.863757 -0.192816 0.46556 0.863768 -0.356304 0.356304 0.863757 -0.46556 0.192816 0.863767 -0.503891 0 0.863757 -0.46556 -0.192816 0.863768 -0.356304 -0.356304 0.863757 -0.192816 -0.46556 0.863767 0 -0.503891 0.863757 0.192816 -0.46556 0.863768 0.356304 -0.356304 0.863757 0.46556 -0.192816 0.863767 0.503891 0 0.863757 0.46556 0.192816 0.863768 0.356304 0.356304 0.863757 0.192816 0.46556 0.707117 0.270577 0.653279 0.707083 0 0.70713 0.863767 0 0.503891 0.863757 0.192816 0.46556 0.707128 0.499985 0.499985 0.707117 0.270577 0.653279 0.863757 0.192816 0.46556 0.863768 0.356304 0.356304 0.707117 0.653279 0.270577 0.707128 0.499985 0.499985 0.863768 0.356304 0.356304 0.863757 0.46556 0.192816 0.707083 0.70713 0 0.707117 0.653279 0.270577 0.863757 0.46556 0.192816 0.863767 0.503891 0 0.707117 0.653279 -0.270577 0.707083 0.70713 0 0.863767 0.503891 0 0.863757 0.46556 -0.192816 0.707128 0.499985 -0.499985 0.707117 0.653279 -0.270577 0.863757 0.46556 -0.192816 0.863768 0.356304 -0.356304 0.707117 0.270577 -0.653279 0.707128 0.499985 -0.499985 0.863768 0.356304 -0.356304 0.863757 0.192816 -0.46556 0.707083 0 -0.70713 0.707117 0.270577 -0.653279 0.863757 0.192816 -0.46556 0.863767 0 -0.503891 0.707117 -0.270577 -0.653279 0.707083 0 -0.70713 0.863767 0 -0.503891 0.863757 -0.192816 -0.46556 0.707128 -0.499985 -0.499985 0.707117 -0.270577 -0.653279 0.863757 -0.192816 -0.46556 0.863768 -0.356304 -0.356304 0.707117 -0.653279 -0.270577 0.707128 -0.499985 -0.499985 0.863768 -0.356304 -0.356304 0.863757 -0.46556 -0.192816 0.707083 -0.70713 0 0.707117 -0.653279 -0.270577 0.863757 -0.46556 -0.192816 0.863767 -0.503891 0 0.707117 -0.653279 0.270577 0.707083 -0.70713 0 0.863767 -0.503891 0 0.863757 -0.46556 0.192816 0.707128 -0.499985 0.499985 0.707117 -0.653279 0.270577 0.863757 -0.46556 0.192816 0.863768 -0.356304 0.356304 0.707117 -0.270577 0.653279 0.707128 -0.499985 0.499985 0.863768 -0.356304 0.356304 0.863757 -0.192816 0.46556 0.707083 0 0.70713 0.707117 -0.270577 0.653279 0.863757 -0.192816 0.46556 0.863767 0 0.503891 0 0.965932 -0.258797 0 1 0 0.253304 0.966813 -0.0333262 0.253304 0.942505 -0.217994 0.505539 0.844304 -0.177709 0.505539 0.861531 -0.0468459 0.86325 0.504776 0 0.863261 0.487564 -0.130619 0.505539 0.861531 0.0468459 0.505539 0.844304 0.177709 0.863261 0.487564 0.130619 0.86325 0.504776 0 0 1 0 0 0.965932 0.258797 0.253304 0.942505 0.217994 0.253304 0.966813 0.0333262 0 0.965932 0.258797 0 0.866034 0.499985 0.253304 0.853965 0.454512 0.253304 0.925244 0.282418 0.505539 0.820051 0.268227 0.505539 0.769555 0.390149 0.863251 0.437147 0.252388 0.863261 0.487564 0.130619 0.505539 0.72269 0.471328 0.505539 0.642349 0.576037 0.863264 0.356914 0.356914 0.863251 0.437147 0.252388 0 0.866034 0.499985 0 0.707083 0.70713 0.253304 0.707252 0.660024 0.253304 0.820611 0.512284 0 0.707083 0.70713 0 0.499985 0.866034 0.253304 0.512284 0.820611 0.253304 0.660024 0.707252 0.505539 0.576037 0.642349 0.505539 0.471328 0.72269 0.863251 0.252388 0.437147 0.863264 0.356914 0.356914 0.505539 0.390149 0.769555 0.505539 0.268227 0.820051 0.863261 0.130619 0.487564 0.863251 0.252388 0.437147 0 0.499985 0.866034 0 0.258797 0.965932 0.253304 0.282418 0.925244 0.253304 0.454512 0.853965 0 0.258797 0.965932 0 0 1 0.253304 0.0333262 0.966813 0.253304 0.217994 0.942505 0.505539 0.177709 0.844304 0.505539 0.0468459 0.861531 0.86325 0 0.504776 0.863261 0.130619 0.487564 0.505539 -0.0468459 0.861531 0.505539 -0.177709 0.844304 0.863261 -0.130619 0.487564 0.86325 0 0.504776 0 0 1 0 -0.258797 0.965932 0.253304 -0.217994 0.942505 0.253304 -0.0333262 0.966813 0 -0.258797 0.965932 0 -0.499985 0.866034 0.253304 -0.454512 0.853965 0.253304 -0.282418 0.925244 0.505539 -0.268227 0.820051 0.505539 -0.390149 0.769555 0.863251 -0.252388 0.437147 0.863261 -0.130619 0.487564 0.505539 -0.471328 0.72269 0.505539 -0.576037 0.642349 0.863264 -0.356914 0.356914 0.863251 -0.252388 0.437147 0 -0.499985 0.866034 0 -0.707083 0.70713 0.253304 -0.660024 0.707252 0.253304 -0.512284 0.820611 0 -0.707083 0.70713 0 -0.866034 0.499985 0.253304 -0.820611 0.512284 0.253304 -0.707252 0.660024 0.505539 -0.642349 0.576037 0.505539 -0.72269 0.471328 0.863251 -0.437147 0.252388 0.863264 -0.356914 0.356914 0.505539 -0.769555 0.390149 0.505539 -0.820051 0.268227 0.863261 -0.487564 0.130619 0.863251 -0.437147 0.252388 0 -0.866034 0.499985 0 -0.965932 0.258797 0.253304 -0.925244 0.282418 0.253304 -0.853965 0.454512 0 -0.965932 0.258797 0 -1 0 0.253304 -0.966813 0.0333262 0.253304 -0.942505 0.217994 0.505539 -0.844304 0.177709 0.505539 -0.861531 0.0468459 0.86325 -0.504776 0 0.863261 -0.487564 0.130619 0.505539 -0.861531 -0.0468459 0.505539 -0.844304 -0.177709 0.863261 -0.487564 -0.130619 0.86325 -0.504776 0 0 -1 0 0 -0.965932 -0.258797 0.253304 -0.942505 -0.217994 0.253304 -0.966813 -0.0333262 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0.253304 -0.853965 -0.454512 0.253304 -0.925244 -0.282418 0.505539 -0.820051 -0.268227 0.505539 -0.769555 -0.390149 0.86326 -0.437147 -0.252358 0.863261 -0.487564 -0.130619 0.505539 -0.72269 -0.471328 0.505539 -0.642349 -0.576037 0.863264 -0.356914 -0.356914 0.86326 -0.437147 -0.252358 0 -0.866034 -0.499985 0 -0.70713 -0.707083 0.253304 -0.707252 -0.660024 0.253304 -0.820611 -0.512284 0 -0.70713 -0.707083 0 -0.499985 -0.866034 0.253304 -0.512284 -0.820611 0.253304 -0.660024 -0.707252 0.505539 -0.576037 -0.642349 0.505539 -0.471328 -0.72269 0.86326 -0.252358 -0.437147 0.863264 -0.356914 -0.356914 0.505539 -0.390149 -0.769555 0.505539 -0.268227 -0.820051 0.863261 -0.130619 -0.487564 0.86326 -0.252358 -0.437147 0.505539 -0.177709 -0.844304 0.505539 -0.0468459 -0.861531 0.86325 0 -0.504776 0.863261 -0.130619 -0.487564 0.505539 0.471328 -0.72269 0.505539 0.576037 -0.642349 0.863264 0.356914 -0.356914 0.863251 0.252388 -0.437147 0.505539 0.268227 -0.820051 0.505539 0.390149 -0.769555 0.863251 0.252388 -0.437147 0.863261 0.130619 -0.487564 0.505539 0.0468459 -0.861531 0.505539 0.177709 -0.844304 0.863261 0.130619 -0.487564 0.86325 0 -0.504776 0.86325 0 -0.504776 0.863261 0.130619 -0.487564 0.863251 0.252388 -0.437147 0.863264 0.356914 -0.356914 0.863251 0.437147 -0.252388 0.863261 0.487564 -0.130619 0.86325 0.504776 0 0.863261 0.487564 0.130619 0.863251 0.437147 0.252388 0.863264 0.356914 0.356914 0.863251 0.252388 0.437147 0.863261 0.130619 0.487564 0.86325 0 0.504776 0.863261 -0.130619 0.487564 0.863251 -0.252388 0.437147 0.863264 -0.356914 0.356914 0.863251 -0.437147 0.252388 0.863261 -0.487564 0.130619 0.86325 -0.504776 0 0.863261 -0.487564 -0.130619 0.86326 -0.437147 -0.252358 0.863264 -0.356914 -0.356914 0.86326 -0.252358 -0.437147 0.863261 -0.130619 -0.487564 0.505539 0.642349 -0.576037 0.505539 0.72269 -0.471328 0.863251 0.437147 -0.252388 0.863264 0.356914 -0.356914 0 0.707083 -0.70713 0 0.866034 -0.499985 0.253304 0.820611 -0.512284 0.253304 0.707252 -0.660024 0 0.499985 -0.866034 0 0.707083 -0.70713 0.253304 0.660024 -0.707252 0.253304 0.512284 -0.820611 0 0.258797 -0.965932 0 0.499985 -0.866034 0.253304 0.454512 -0.853965 0.253304 0.282418 -0.925244 0 0 -1 0 0.258797 -0.965932 0.253304 0.217994 -0.942505 0.253304 0.0333262 -0.966813 0 -0.258797 -0.965932 0 0 -1 0.253304 -0.0333262 -0.966813 0.253304 -0.217994 -0.942505 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0.253304 -0.282418 -0.925244 0.253304 -0.454512 -0.853965 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.866034 -0.499985 0 0.965932 -0.258797 0.253304 0.925244 -0.282418 0.253304 0.853965 -0.454512 0.505539 0.769555 -0.390149 0.505539 0.820051 -0.268227 0.863261 0.487564 -0.130619 0.863251 0.437147 -0.252388 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0.698996 0.00100711 -0.715125 0.90081 -0.104343 -0.421491 0.636219 -0.168401 -0.752905 0.781726 -0.206885 -0.588305 0.90081 -0.104343 -0.421491 0.874124 -0.243263 -0.420392 0.769671 -0.319224 -0.552904 0.781726 -0.206885 -0.588305 0.874124 -0.243263 -0.420392 0.769671 -0.319224 -0.552904 0.874124 -0.243263 -0.420392 0.769009 -0.417371 -0.484176 0.769009 -0.417371 -0.484176 0.874124 -0.243263 -0.420392 0.891729 -0.326121 -0.313791 0.623667 -0.575182 -0.529344 0.7645 -0.464522 -0.446944 0.493057 -0.752815 -0.436079 0.69901 -0.618793 -0.35844 0.9008 -0.417219 -0.120365 0.636219 -0.73624 -0.230598 0.781702 -0.612964 -0.114963 0.9008 -0.417219 -0.120365 0.874124 -0.485702 0.000488296 0.769691 -0.638417 0 0.781702 -0.612964 -0.114963 0.874124 -0.485702 0.000488296 0.769691 -0.638417 0 0.874124 -0.485702 0.000488296 0.768998 -0.62801 0.119358 0.768998 -0.62801 0.119358 0.874124 -0.485702 0.000488296 0.891737 -0.434797 0.125523 0.623615 -0.746055 0.233467 0.764488 -0.619343 0.178808 0.493057 -0.754083 0.433882 0.699039 -0.6198 0.356639 0.900806 -0.312845 0.301126 0.636224 -0.567827 0.522294 0.781711 -0.406049 0.473342 0.900806 -0.312845 0.301126 0.874127 -0.242409 0.420881 0.769684 -0.319193 0.552904 0.781711 -0.406049 0.473342 0.874127 -0.242409 0.420881 0.769684 -0.319193 0.552904 0.874127 -0.242409 0.420881 0.769019 -0.210608 0.603534 0.769019 -0.210608 0.603534 0.874127 -0.242409 0.420881 0.891736 -0.108676 0.439314 0.623615 -0.170812 0.762842 0.76451 -0.15479 0.625751 0.493057 -0.00125126 0.869996 0.698996 -0.00100711 0.715125 0.90081 0.104343 0.421491 0.636219 0.168401 0.752905 0.781726 0.206885 0.588305 0.90081 0.104343 0.421491 0.874124 0.243263 0.420392 0.769671 0.319224 0.552904 0.781726 0.206885 0.588305 0.874124 0.243263 0.420392 0.769671 0.319224 0.552904 0.874124 0.243263 0.420392 0.769009 0.417371 0.484176 0.769009 0.417371 0.484176 0.874124 0.243263 0.420392 0.891729 0.326121 0.313791 0.623667 0.575182 0.529344 0.7645 0.464522 0.446944 0.493057 0.752815 0.436079 0.69901 0.618793 0.35844 0.9008 0.417219 0.120365 0.636219 0.73624 0.230598 0.781702 0.612964 0.114963 0.9008 0.417219 0.120365 0.874124 0.485702 -0.000488296 0.769691 0.638417 0 0.781702 0.612964 0.114963 0.874124 0.485702 -0.000488296 0.769691 0.638417 0 0.874124 0.485702 -0.000488296 0.768998 0.62801 -0.119358 0.768998 0.62801 -0.119358 0.874124 0.485702 -0.000488296 0.891737 0.434797 -0.125523 0.623615 0.746055 -0.233467 0.764513 0.619312 -0.178808 0.493057 0.754083 -0.433882 0.699039 0.6198 -0.356639 0.900806 0.312845 -0.301126 0.636249 0.567827 -0.522263 0.781711 0.406049 -0.473342 0.900806 0.312845 -0.301126 0.874127 0.242409 -0.420881 0.623615 0.170812 -0.762842 0.76451 0.15479 -0.625751 0.493057 0.00125126 -0.869996 0.923063 -0.0502029 -0.381359 0.958153 0.109531 -0.264473 0.874127 0.242409 -0.420881 0.900806 0.312845 -0.301126 0.923071 0.305155 -0.234138 0.958149 0.283822 -0.0373547 0.874124 0.485702 -0.000488296 0.9008 0.417219 0.120365 0.923069 0.355358 0.147191 0.958149 0.174261 0.227119 0.874124 0.243263 0.420392 0.90081 0.104343 0.421491 0.923063 0.0502029 0.381359 0.958153 -0.109531 0.264473 0.874127 -0.242409 0.420881 0.900806 -0.312845 0.301126 0.923071 -0.305155 0.234138 0.958149 -0.283822 0.0373547 0.874124 -0.485702 0.000488296 0.9008 -0.417219 -0.120365 0.923069 -0.355358 -0.147191 0.958149 -0.174261 -0.227119 0.874124 -0.243263 -0.420392 0.90081 -0.104343 -0.421491 0.769019 0.210608 -0.603534 0.874127 0.242409 -0.420881 0.891736 0.108676 -0.439314 0.769684 0.319193 -0.552904 0.874127 0.242409 -0.420881 0.769019 0.210608 -0.603534 0 0 -1 0 0 -1 0.363231 0.0516984 -0.930264 0.493057 0.00125126 -0.869996 0.381359 -0.0502029 -0.923063 0 0 -1 0 0 -1 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0.363231 -0.779783 -0.509903 0.493057 -0.752815 -0.436079 0.381359 -0.824519 -0.418012 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0.363231 -0.831495 0.420331 0.493057 -0.754083 0.433882 0.381359 -0.774306 0.50499 0 -0.866034 0.499985 0 -0.866034 0.499985 0 0 1 0 0 1 0.363231 -0.0516984 0.930264 0.493057 -0.00125126 0.869996 0.381359 0.0502029 0.923063 0 0 1 0 0 1 0 0.866034 0.499985 0 0.866034 0.499985 0.363231 0.779783 0.509903 0.493057 0.752815 0.436079 0.381359 0.824503 0.418043 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0.363231 0.831495 -0.420331 0.493057 0.754083 -0.433882 0.381359 0.774306 -0.50499 0 0.866034 -0.499985 0 0.866034 -0.499985 0.769684 0.319193 -0.552904 0.781711 0.406049 -0.473342 0.874127 0.242409 -0.420881 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.965932 0.258797 0 1 0 0 1 0 0 0.965932 0.258797 0 0.866034 0.499985 0 0.965932 0.258797 0 0.965932 0.258797 0 0.866034 0.499985 0 0.70713 0.707083 0 0.866034 0.499985 0 0.866034 0.499985 0 0.70713 0.707083 0 0.499985 0.866034 0 0.70713 0.707083 0 0.70713 0.707083 0 0.499985 0.866034 0 0.258797 0.965932 0 0.499985 0.866034 0 0.499985 0.866034 0 0.258797 0.965932 0 0 1 0 0.258797 0.965932 0 0.258797 0.965932 0 0 1 0 -0.258797 0.965932 0 0 1 0 0 1 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.258797 0.965932 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -1 0 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -1 0 0 -0.965932 -0.258797 0 -1 0 0 -1 0 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.707083 -0.70713 0 -0.499985 -0.866034 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 0 -1 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 0 -1 0 0.258797 -0.965932 0 0 -1 0 0 -1 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.965932 -0.258797 0 1 0 0 0.965932 -0.258797 0 0.965932 -0.258797 0 1 0 -0.21955 0.86967 0.442122 -0.399487 0.502976 0.766437 -0.342235 0.613544 0.711645 -0.342235 0.613544 0.711645 -0.426435 0.433393 0.793929 -0.404035 0.411969 0.816724 -0.404035 0.411969 0.816724 -0.449202 0.311747 0.837276 -0.445662 0.259957 0.856626 -0.445662 0.259957 0.856626 -0.449202 0.311747 0.837276 -0.483444 0.129246 0.865782 -0.483444 0.129246 0.865782 -0.449202 0.311747 0.837276 -0.51323 0.033021 0.857616 -0.51323 0.033021 0.857616 -0.467116 0.219611 0.856489 -0.467116 -0.219611 0.856489 -0.51323 -0.033021 0.857616 -0.51323 -0.033021 0.857616 -0.449202 -0.311747 0.837276 -0.483444 -0.129246 0.865782 -0.483444 -0.129246 0.865782 -0.449202 -0.311747 0.837276 -0.445662 -0.259957 0.856626 -0.445662 -0.259957 0.856626 -0.449202 -0.311747 0.837276 -0.404035 -0.411969 0.816724 -0.404035 -0.411969 0.816724 -0.426435 -0.433393 0.793929 -0.342235 -0.613544 0.711645 -0.342235 -0.613544 0.711645 -0.399487 -0.502976 0.766437 -0.21955 -0.86967 0.442122 -0.21955 -0.86967 0.442122 -0.221717 -0.875388 0.429579 -0.0644246 -0.995016 0.0761132 -0.0644246 -0.995016 0.0761132 -0.0644246 -0.995016 0.0761132 0.0646077 -0.995723 0.0660421 0.0646077 -0.995723 0.0660421 0.0646077 -0.995723 0.0660421 0.228339 -0.884697 0.406415 0.224128 -0.881658 0.415265 0.224128 -0.881658 0.415265 0.447523 -0.465255 0.763715 0.356456 -0.637257 0.683259 0.356456 -0.637257 0.683259 0.479415 -0.40846 0.776738 0.42671 -0.434492 0.793181 0.42671 -0.434492 0.793181 0.50145 -0.299295 0.81177 0.474807 -0.27665 0.835478 0.474807 -0.27665 0.835478 0.50145 -0.299295 0.81177 0.509293 -0.16538 0.844553 0.509293 -0.16538 0.844553 0.50145 -0.299295 0.81177 0.544359 -0.0999786 0.832873 0.589068 0 0.808083 0.544359 -0.0999786 0.832873 0.50145 -0.299295 0.81177 0.520524 -0.215705 0.826152 0.520524 0.215705 0.826152 0.589068 0 0.808083 0.589068 0 0.808083 0.50145 0.299295 0.81177 0.544359 0.0999786 0.832873 0.544359 0.0999786 0.832873 0.50145 0.299295 0.81177 0.509293 0.16538 0.844553 0.509293 0.16538 0.844553 0.50145 0.299295 0.81177 0.474807 0.27665 0.835478 0.474807 0.27665 0.835478 0.50145 0.299295 0.81177 0.42671 0.434492 0.793181 0.42671 0.434492 0.793181 0.479415 0.40846 0.776738 0.356456 0.637257 0.683259 0.356456 0.637257 0.683259 0.447523 0.465255 0.763715 0.224128 0.881658 0.415265 0.224128 0.881658 0.415265 0.228339 0.884697 0.406415 0.0646077 0.995723 0.0660421 0.0646077 0.995723 0.0660421 0.0646077 0.995723 0.0660421 -0.0644246 0.995016 0.0761132 -0.0644246 0.995016 0.0761132 -0.0644246 0.995016 0.0761132 -0.221717 0.875388 0.429579 -0.21955 0.86967 0.442122 0 0.866034 -0.499985 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0 -1 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0 -1 0 -0.258797 -0.965932 0 0 -1 0 0 -1 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.866034 -0.499985 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.991449 -0.130497 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.991449 -0.130497 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.965932 -0.258797 0 0.991449 -0.130497 0 0.991449 -0.130497 0 0.965932 -0.258797 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -0.707083 -0.70713 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.707083 -0.70713 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 + + + + + + + + + + + + + + +

0 0 1 1 2 2 3 3

+

4 4 5 5 6 6 7 7

+

8 8 9 9 10 10 11 11

+

12 12 13 13 14 14 15 15

+

16 16 17 17 18 18 19 19 20 20 21 21

+

22 22 23 23 24 24 25 25

+

26 26 27 27 28 28 29 29 30 30 31 31

+

32 32 33 33 34 34 35 35

+
+ + + +

36 36 37 37 38 38 39 39

+

40 40 41 41 42 42 43 43

+

44 44 45 45 46 46 47 47

+

48 48 49 49 50 50 51 51

+

52 52 53 53 54 54 55 55 56 56 57 57

+

58 58 59 59 60 60 61 61

+

62 62 63 63 64 64 65 65 66 66 67 67

+

68 68 69 69 70 70 71 71

+
+ + + +

72 72 73 73 74 74 75 75

+

76 76 77 77 78 78 79 79

+

80 80 81 81 82 82 83 83

+

84 84 85 85 86 86 87 87

+

88 88 89 89 90 90 91 91

+

92 92 93 93 94 94 95 95

+

96 96 97 97 98 98 99 99

+

100 100 101 101 102 102 103 103

+

104 104 105 105 106 106 107 107

+

108 108 109 109 110 110 111 111

+

112 112 113 113 114 114 115 115

+

116 116 117 117 118 118 119 119

+

120 120 121 121 122 122 123 123

+

124 124 125 125 126 126 127 127

+

128 128 129 129 130 130 131 131

+

132 132 133 133 134 134 135 135

+
+ + + +

136 136 137 137 138 138 139 139 140 140 141 141 142 142 143 143 144 144 145 145 146 146 147 147 148 148 149 149 150 150 151 151

+

152 152 153 153 154 154 155 155

+

156 156 157 157 158 158 159 159

+

160 160 161 161 162 162 163 163

+

164 164 165 165 166 166 167 167

+

168 168 169 169 170 170 171 171

+

172 172 173 173 174 174 175 175

+

176 176 177 177 178 178 179 179

+

180 180 181 181 182 182 183 183

+

184 184 185 185 186 186 187 187

+

188 188 189 189 190 190 191 191

+

192 192 193 193 194 194 195 195

+

196 196 197 197 198 198 199 199

+

200 200 201 201 202 202 203 203

+

204 204 205 205 206 206 207 207

+

208 208 209 209 210 210 211 211

+

212 212 213 213 214 214 215 215

+
+ + + +

216 216 217 217 218 218 219 219

+

220 220 221 221 222 222 223 223

+

224 224 225 225 226 226 227 227

+

228 228 229 229 230 230 231 231

+

232 232 233 233 234 234 235 235

+

236 236 237 237 238 238 239 239

+

240 240 241 241 242 242 243 243

+

244 244 245 245 246 246 247 247

+

248 248 249 249 250 250 251 251

+

252 252 253 253 254 254 255 255

+

256 256 257 257 258 258 259 259

+

260 260 261 261 262 262 263 263

+

264 264 265 265 266 266 267 267

+

268 268 269 269 270 270 271 271

+

272 272 273 273 274 274 275 275

+

276 276 277 277 278 278 279 279

+

280 280 281 281 282 282 283 283

+

284 284 285 285 286 286 287 287

+

288 288 289 289 290 290 291 291

+

292 292 293 293 294 294 295 295

+

296 296 297 297 298 298 299 299

+

300 300 301 301 302 302 303 303

+

304 304 305 305 306 306 307 307

+

308 308 309 309 310 310 311 311

+

312 312 313 313 314 314 315 315

+

316 316 317 317 318 318 319 319

+

320 320 321 321 322 322 323 323

+

324 324 325 325 326 326 327 327

+

328 328 329 329 330 330 331 331

+

332 332 333 333 334 334 335 335

+

336 336 337 337 338 338 339 339

+

340 340 341 341 342 342 343 343

+

344 344 345 345 346 346 347 347

+

348 348 349 349 350 350 351 351

+

352 352 353 353 354 354 355 355

+

356 356 357 357 358 358 359 359

+

360 360 361 361 362 362 363 363

+

364 364 365 365 366 366 367 367

+

368 368 369 369 370 370 371 371

+

372 372 373 373 374 374 375 375 376 376 377 377 378 378 379 379 380 380 381 381 382 382 383 383 384 384 385 385 386 386 387 387 388 388 389 389 390 390 391 391 392 392 393 393 394 394 395 395

+

396 396 397 397 398 398 399 399

+

400 400 401 401 402 402 403 403

+

404 404 405 405 406 406 407 407

+

408 408 409 409 410 410 411 411

+

412 412 413 413 414 414 415 415

+

416 416 417 417 418 418 419 419

+

420 420 421 421 422 422 423 423

+

424 424 425 425 426 426 427 427 428 428 429 429 430 430 431 431 432 432 433 433 434 434 435 435 436 436 437 437 438 438 439 439 440 440 441 441 442 442 443 443 444 444 445 445 446 446 447 447

+

448 448 449 449 450 450 451 451

+

452 452 453 453 454 454 455 455

+
+ + + +

462 462 463 463 464 464 465 465 466 466 467 467 468 468 469 469 470 470 471 471 472 472 473 473 474 474 475 475 476 476 477 477 478 478 479 479 480 480 481 481 482 482 483 483 484 484 485 485 486 486 487 487 488 488 489 489 490 490 491 491 492 492 493 493 494 494 495 495 496 496 497 497 498 498 499 499 500 500 501 501 502 502 503 503 504 504 505 505 506 506 507 507 508 508 509 509 510 510 511 511 512 512 513 513 514 514 515 515 516 516 517 517 518 518 519 519 520 520 521 521 522 522 523 523 524 524 525 525 526 526 527 527 528 528 529 529 530 530 531 531 532 532 533 533 534 534 535 535 536 536 537 537 538 538 539 539 540 540 541 541 542 542 543 543 544 544 545 545 546 546 547 547 548 548 549 549 550 550 551 551 552 552 553 553 554 554 555 555 556 556 557 557 558 558 559 559 560 560 585 585 586 586 587 587 588 588 589 589 590 590 633 633 634 634 635 635

+
+ + + +

456 456 457 457 458 458 459 459 460 460 461 461

+

561 561 562 562 563 563 564 564 565 565 566 566 567 567 568 568 569 569 570 570 571 571 572 572 573 573 574 574 575 575 576 576 577 577 578 578 579 579 580 580 581 581 582 582 583 583 584 584

+

591 591 592 592 593 593 594 594 595 595 596 596 597 597

+

598 598 599 599 600 600 601 601 602 602 603 603 604 604

+

605 605 606 606 607 607 608 608 609 609 610 610 611 611

+

612 612 613 613 614 614 615 615 616 616 617 617 618 618

+

619 619 620 620 621 621 622 622 623 623 624 624 625 625

+

626 626 627 627 628 628 629 629 630 630 631 631 632 632

+
+ + + +

636 636 637 637 638 638 639 639 640 640 641 641 642 642 643 643 644 644 645 645 646 646 647 647 648 648 649 649 650 650 651 651 652 652 653 653 654 654 655 655 656 656 657 657 658 658 659 659

+

660 660 661 661 662 662 663 663

+

664 664 665 665 666 666 667 667

+

668 668 669 669 670 670 671 671

+

672 672 673 673 674 674 675 675

+

676 676 677 677 678 678 679 679

+

680 680 681 681 682 682 683 683

+

684 684 685 685 686 686 687 687

+

688 688 689 689 690 690 691 691

+

692 692 693 693 694 694 695 695

+

696 696 697 697 698 698 699 699

+

700 700 701 701 702 702 703 703

+

704 704 705 705 706 706 707 707

+

708 708 709 709 710 710 711 711

+

712 712 713 713 714 714 715 715

+

716 716 717 717 718 718 719 719

+

720 720 721 721 722 722 723 723

+

724 724 725 725 726 726 727 727

+

728 728 729 729 730 730 731 731

+

732 732 733 733 734 734 735 735

+

736 736 737 737 738 738 739 739

+

740 740 741 741 742 742 743 743

+

744 744 745 745 746 746 747 747

+

748 748 749 749 750 750 751 751

+

752 752 753 753 754 754 755 755

+
+ + + +

756 756 757 757 758 758 759 759 760 760 761 761 762 762 763 763 764 764 765 765 766 766 767 767 768 768 769 769 770 770 775 775 776 776 777 777 778 778 779 779 780 780 781 781 782 782 783 783 784 784 785 785 786 786 787 787 788 788 789 789 790 790 791 791 792 792 797 797 798 798 799 799 800 800 801 801 802 802 803 803 804 804 805 805 806 806 807 807 808 808 809 809 810 810 811 811 812 812 813 813 814 814 815 815 816 816 817 817 818 818 819 819 820 820 821 821 822 822 823 823 824 824 825 825 826 826 827 827 828 828 829 829 830 830 831 831 832 832 833 833 834 834 835 835 836 836 837 837 838 838 839 839 840 840 841 841 846 846 847 847 848 848

+
+ + + +

771 771 772 772 773 773 774 774

+

793 793 794 794 795 795 796 796

+

842 842 843 843 844 844 845 845

+
+ + + +

849 849 850 850 851 851 852 852

+

853 853 854 854 855 855 856 856

+

857 857 858 858 859 859 860 860

+

861 861 862 862 863 863 864 864

+

865 865 866 866 867 867 868 868

+

869 869 870 870 871 871 872 872

+

873 873 874 874 875 875 876 876

+

877 877 878 878 879 879 880 880

+

881 881 882 882 883 883 884 884

+

885 885 886 886 887 887 888 888

+

889 889 890 890 891 891 892 892 893 893 894 894 895 895 896 896 897 897 898 898 899 899 900 900 901 901

+

902 902 903 903 904 904 905 905

+

906 906 907 907 908 908 909 909 910 910 911 911 912 912 913 913 914 914 915 915 916 916 917 917 918 918

+

919 919 920 920 921 921 922 922

+
+ + + +

923 923 924 924 925 925 926 926

+

927 927 928 928 929 929 930 930

+

931 931 932 932 933 933 934 934

+

935 935 936 936 937 937 938 938

+

939 939 940 940 941 941 942 942

+
+ + + +

958 958 959 958 944 958 945 958 960 958 946 958 947 958 961 958 962 958 948 958 949 958 963 958 950 958 951 958 964 958 965 958 952 958 953 958 966 958 954 958 967 958 968 958 955 958 969 958 970 958 956 958 971 958 957 958 943 958

+
+
+ + + CAT3DBagRep + + +
+ + + + 0 58.6663 -129.075 0 24.3004 -163.441 0 -58.6663 -129.075 0 -22.225 69.85 35.052 -58.6663 -129.075 35.052 -24.3004 -163.441 35.052 58.6663 -129.075 35.052 15.875 69.85 35.052 -22.225 69.85 35.052 58.6663 -129.075 0 58.6663 -129.075 35.052 15.875 69.85 35.052 -22.225 69.85 35.052 -58.6663 -129.075 0 24.3004 -163.441 35.052 -24.3004 -163.441 0 -58.6663 -129.075 0 -22.225 69.85 35.052 58.6663 -80.4746 0 58.6663 -80.4746 0 15.875 69.85 35.052 24.3004 -163.441 0 -24.3004 -163.441 0 -58.6663 -80.4746 35.052 -58.6663 -80.4746 35.052 -22.225 69.85 0 -22.225 69.85 35.052 15.875 69.85 0 15.875 69.85 215.9 52.1358 -90.8052 215.9 46.7437 -77.7875 215.9 38.1661 -66.6089 215.9 26.9875 -58.0313 215.9 13.9698 -52.6392 215.9 0 -50.8 215.9 -13.9698 -52.6392 215.9 -26.9875 -58.0313 215.9 -38.1661 -66.6089 215.9 -46.7437 -77.7875 215.9 -52.1358 -90.8052 215.9 -53.975 -104.775 215.9 -52.1358 -118.745 215.9 -46.7437 -131.762 215.9 -38.1661 -142.941 215.9 -26.9875 -151.519 215.9 -13.9698 -156.911 215.9 0 -158.75 215.9 13.9698 -156.911 215.9 26.9875 -151.519 215.9 38.1661 -142.941 215.9 46.7437 -131.763 215.9 52.1358 -118.745 215.9 53.975 -104.775 -178.5 52.1358 -118.745 -178.5 53.975 -104.775 215.9 53.975 -104.775 215.9 52.1358 -118.745 -178.5 46.7437 -131.763 -178.5 52.1358 -118.745 215.9 52.1358 -118.745 215.9 46.7437 -131.763 -178.5 38.1661 -142.941 -178.5 46.7437 -131.763 215.9 46.7437 -131.763 215.9 38.1661 -142.941 -178.5 26.9875 -151.519 -178.5 38.1661 -142.941 215.9 38.1661 -142.941 215.9 26.9875 -151.519 -178.5 13.9698 -156.911 -178.5 26.9875 -151.519 215.9 26.9875 -151.519 215.9 13.9698 -156.911 -178.5 0 -158.75 -178.5 13.9698 -156.911 215.9 13.9698 -156.911 215.9 0 -158.75 -178.5 -13.9698 -156.911 -178.5 0 -158.75 215.9 0 -158.75 215.9 -13.9698 -156.911 -178.5 -26.9875 -151.519 -178.5 -13.9698 -156.911 215.9 -13.9698 -156.911 215.9 -26.9875 -151.519 -178.5 -38.1661 -142.941 -178.5 -26.9875 -151.519 215.9 -26.9875 -151.519 215.9 -38.1661 -142.941 -178.5 -46.7437 -131.762 -178.5 -38.1661 -142.941 215.9 -38.1661 -142.941 215.9 -46.7437 -131.762 -178.5 -52.1358 -118.745 -178.5 -46.7437 -131.762 215.9 -46.7437 -131.762 215.9 -52.1358 -118.745 -178.5 -53.975 -104.775 -178.5 -52.1358 -118.745 215.9 -52.1358 -118.745 215.9 -53.975 -104.775 -178.5 -52.1358 -90.8052 -178.5 -53.975 -104.775 215.9 -53.975 -104.775 215.9 -52.1358 -90.8052 -178.5 -46.7437 -77.7875 -178.5 -52.1358 -90.8052 215.9 -52.1358 -90.8052 215.9 -46.7437 -77.7875 -178.5 -38.1661 -66.6089 -178.5 -46.7437 -77.7875 215.9 -46.7437 -77.7875 215.9 -38.1661 -66.6089 -178.5 -26.9875 -58.0313 -178.5 -38.1661 -66.6089 215.9 -38.1661 -66.6089 215.9 -26.9875 -58.0313 -178.5 -13.9698 -52.6392 -178.5 -26.9875 -58.0313 215.9 -26.9875 -58.0313 215.9 -13.9698 -52.6392 -178.5 0 -50.8 -178.5 -13.9698 -52.6392 215.9 -13.9698 -52.6392 215.9 0 -50.8 -178.5 13.9698 -52.6392 -178.5 0 -50.8 215.9 0 -50.8 215.9 13.9698 -52.6392 -178.5 26.9875 -58.0313 -178.5 13.9698 -52.6392 215.9 13.9698 -52.6392 215.9 26.9875 -58.0313 -178.5 38.1661 -66.6089 -178.5 26.9875 -58.0313 215.9 26.9875 -58.0313 215.9 38.1661 -66.6089 -178.5 46.7437 -77.7875 -178.5 38.1661 -66.6089 215.9 38.1661 -66.6089 215.9 46.7437 -77.7875 -178.5 52.1358 -90.8052 -178.5 46.7437 -77.7875 215.9 46.7437 -77.7875 215.9 52.1358 -90.8052 -178.5 46.7437 -77.7875 -178.5 52.1358 -90.8052 -178.5 53.975 -104.775 -178.5 52.1358 -118.745 -178.5 46.7437 -131.763 -178.5 38.1661 -142.941 -178.5 26.9875 -151.519 -178.5 13.9698 -156.911 -178.5 0 -158.75 -178.5 -13.9698 -156.911 -178.5 -26.9875 -151.519 -178.5 -38.1661 -142.941 -178.5 -46.7437 -131.762 -178.5 -52.1358 -118.745 -178.5 -53.975 -104.775 -178.5 -52.1358 -90.8052 -178.5 -46.7437 -77.7875 -178.5 -38.1661 -66.6089 -178.5 -26.9875 -58.0313 -178.5 -13.9698 -52.6392 -178.5 0 -50.8 -178.5 13.9698 -52.6392 -178.5 26.9875 -58.0313 -178.5 38.1661 -66.6089 -178.5 53.975 -104.775 -178.5 52.1358 -90.8052 215.9 52.1358 -90.8052 215.9 53.975 -104.775 -178.5 -30 -164.775 -178.5 -60 -134.775 -190.5 -60 -134.775 -190.5 -30 -164.775 -178.5 30 -164.775 -178.5 -30 -164.775 -190.5 -30 -164.775 -190.5 30 -164.775 -178.5 60 -134.775 -178.5 30 -164.775 -190.5 30 -164.775 -190.5 60 -134.775 -178.5 60 -74.775 -178.5 60 -134.775 -190.5 60 -134.775 -190.5 60 -74.775 -178.5 30 -44.775 -178.5 60 -74.775 -190.5 60 -74.775 -190.5 30 -44.775 -178.5 -30 -44.775 -178.5 30 -44.775 -190.5 30 -44.775 -190.5 -30 -44.775 -190.5 -30 -44.775 -190.5 30 -44.775 -190.5 60 -74.775 -190.5 60 -134.775 -190.5 30 -164.775 -190.5 -30 -164.775 -190.5 -60 -134.775 -190.5 -60 -74.775 -178.5 -60 -134.775 -178.5 -60 -74.775 -190.5 -60 -74.775 -190.5 -60 -134.775 -178.5 -30 -44.775 -178.5 -60 -74.775 -178.5 -60 -134.775 -178.5 -30 -164.775 -178.5 30 -164.775 -178.5 60 -134.775 -178.5 60 -74.775 -178.5 30 -44.775 -178.5 -60 -74.775 -178.5 -30 -44.775 -190.5 -30 -44.775 -190.5 -60 -74.775 215.9 30 -164.775 215.9 60 -134.775 227.9 60 -134.775 227.9 30 -164.775 215.9 -30 -164.775 215.9 30 -164.775 227.9 30 -164.775 227.9 -30 -164.775 215.9 -60 -134.775 215.9 -30 -164.775 227.9 -30 -164.775 227.9 -60 -134.775 215.9 -60 -74.775 215.9 -60 -134.775 227.9 -60 -134.775 227.9 -60 -74.775 215.9 -30 -44.775 215.9 -60 -74.775 227.9 -60 -74.775 227.9 -30 -44.775 215.9 30 -44.775 215.9 -30 -44.775 227.9 -30 -44.775 227.9 30 -44.775 227.9 30 -44.775 227.9 -30 -44.775 227.9 -60 -74.775 227.9 -60 -134.775 227.9 -30 -164.775 227.9 30 -164.775 227.9 60 -134.775 227.9 60 -74.775 215.9 60 -134.775 215.9 60 -74.775 227.9 60 -74.775 227.9 60 -134.775 215.9 30 -44.775 215.9 60 -74.775 215.9 60 -134.775 215.9 30 -164.775 215.9 -30 -164.775 215.9 -60 -134.775 215.9 -60 -74.775 215.9 -30 -44.775 215.9 60 -74.775 215.9 30 -44.775 227.9 30 -44.775 227.9 60 -74.775 + + + + + + + + + + -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.961792 0.273782 0 0 1 0 -0.923884 -0.382672 0 0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.923884 -0.382672 0 -0.971857 0.235572 0 0.990406 0.138188 0 0.990406 0.138188 0 0.961792 0.273782 0 0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.992939 0.118625 0 -0.992939 0.118625 0 -0.971857 0.235572 0 0 1 0 0 1 0 0 1 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.965932 -0.258797 0 1 0 0 1 0 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0 -1 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0 -1 0 -0.258797 -0.965932 0 0 -1 0 0 -1 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.70713 -0.707083 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.70713 -0.707083 0 -0.866034 -0.499985 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -1 0 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -1 0 0 -0.965932 0.258797 0 -1 0 0 -1 0 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.258797 0.965932 0 0 1 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0 1 0 0.258797 0.965932 0 0 1 0 0 1 0 0.258797 0.965932 0 0.499985 0.866034 0 0.258797 0.965932 0 0.258797 0.965932 0 0.499985 0.866034 0 0.70713 0.707083 0 0.499985 0.866034 0 0.499985 0.866034 0 0.70713 0.707083 0 0.866034 0.499985 0 0.70713 0.707083 0 0.70713 0.707083 0 0.866034 0.499985 0 0.965932 0.258797 0 0.866034 0.499985 0 0.866034 0.499985 0 0.965932 0.258797 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 0.965932 0.258797 0 0.965932 0.258797 0 1 0 0 -0.382672 -0.923884 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.382672 -0.923884 0 0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 0.382672 -0.923884 0 0.923884 -0.382672 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.923884 -0.382672 0 0.923884 0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 0.382672 0 0.382672 0.923884 0 0.923884 0.382672 0 0.923884 0.382672 0 0.382672 0.923884 0 -0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 -0.382672 0.923884 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -0.923884 -0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 -0.382672 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -0.923884 0.382672 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.923884 0.382672 0 0.382672 -0.923884 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.382672 -0.923884 0 -0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.923884 -0.382672 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.923884 -0.382672 0 -0.923884 0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 0.382672 0 -0.382672 0.923884 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.382672 0.923884 0 0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 0.382672 0.923884 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.923884 -0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 -0.382672 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.923884 0.382672 0 0.382672 0.923884 0 0.382672 0.923884 0 0.923884 0.382672 + + + + + + + + + + + + + + +

19 29 10 29 14 29 22 29 16 29 23 29

+

20 29 19 29 23 29 26 29

+
+ + + +

24 30 4 30 5 30 21 30 6 30 18 30

+

7 30 8 30 24 30 18 30

+
+ + + +

11 11 18 18 19 19 20 20

+

10 10 19 19 18 18 9 9

+

14 14 10 10 9 9 21 21

+

22 22 14 14 21 21 15 15

+

16 16 22 22 15 15 13 13

+

23 23 16 16 13 13 24 24

+

17 17 23 23 24 24 25 25

+

26 26 12 12 27 27 28 28

+
+ + + +

29 31 30 32 31 33 32 34 33 35 34 36 35 37 36 38 37 39 38 40 39 41 40 42 41 43 42 44 43 45 44 46 45 47 46 48 47 49 48 50 49 51 50 52 51 53 52 54

+

53 55 54 56 55 57 56 58

+

57 59 58 60 59 61 60 62

+

61 63 62 64 63 65 64 66

+

65 67 66 68 67 69 68 70

+

69 71 70 72 71 73 72 74

+

73 75 74 76 75 77 76 78

+

77 79 78 80 79 81 80 82

+

81 83 82 84 83 85 84 86

+

85 87 86 88 87 89 88 90

+

89 91 90 92 91 93 92 94

+

93 95 94 96 95 97 96 98

+

97 99 98 100 99 101 100 102

+

101 103 102 104 103 105 104 106

+

105 107 106 108 107 109 108 110

+

109 111 110 112 111 113 112 114

+

113 115 114 116 115 117 116 118

+

117 119 118 120 119 121 120 122

+

121 123 122 124 123 125 124 126

+

125 127 126 128 127 129 128 130

+

129 131 130 132 131 133 132 134

+

133 135 134 136 135 137 136 138

+

137 139 138 140 139 141 140 142

+

141 143 142 144 143 145 144 146

+

145 147 146 148 147 149 148 150 149 151 150 152 151 153 152 154 153 155 154 156 155 157 156 158 157 159 158 160 159 161 160 162 161 163 162 164 163 165 164 166 165 167 166 168 167 169 168 170

+

169 171 170 172 171 173 172 174

+
+ + + +

173 175 174 176 175 177 176 178

+

177 179 178 180 179 181 180 182

+

181 183 182 184 183 185 184 186

+

185 187 186 188 187 189 188 190

+

189 191 190 192 191 193 192 194

+

193 195 194 196 195 197 196 198

+

197 199 198 200 199 201 200 202 201 203 202 204 203 205 204 206

+

205 207 206 208 207 209 208 210

+

209 211 210 212 211 213 212 214 213 215 214 216 215 217 216 218

+

217 219 218 220 219 221 220 222

+
+ + + +

221 223 222 224 223 225 224 226

+

225 227 226 228 227 229 228 230

+

229 231 230 232 231 233 232 234

+

233 235 234 236 235 237 236 238

+

237 239 238 240 239 241 240 242

+

241 243 242 244 243 245 244 246

+

245 247 246 248 247 249 248 250 249 251 250 252 251 253 252 254

+

253 255 254 256 255 257 256 258

+

257 259 258 260 259 261 260 262 261 263 262 264 263 265 264 266

+

265 267 266 268 267 269 268 270

+
+
+ + + CAT3DBagRep + + +
+ + + + -12.7 16.9288 4.53606 -12.7 15.178 8.763 171.45 15.178 8.763 171.45 16.9288 4.53606 -12.7 15.178 8.763 -12.7 12.3928 12.3928 171.45 12.3928 12.3928 171.45 15.178 8.763 -12.7 12.3928 12.3928 -12.7 8.763 15.178 171.45 8.763 15.178 171.45 12.3928 12.3928 -12.7 8.763 15.178 -12.7 4.53606 16.9288 171.45 4.53606 16.9288 171.45 8.763 15.178 -12.7 4.53606 16.9288 -12.7 0 17.526 171.45 0 17.526 171.45 4.53606 16.9288 -12.7 0 17.526 -12.7 -4.53606 16.9288 171.45 -4.53606 16.9288 171.45 0 17.526 -12.7 -4.53606 16.9288 -12.7 -8.763 15.178 171.45 -8.763 15.178 171.45 -4.53606 16.9288 -12.7 -8.763 15.178 -12.7 -12.3928 12.3928 171.45 -12.3928 12.3928 171.45 -8.763 15.178 -12.7 -12.3928 12.3928 -12.7 -15.178 8.763 171.45 -15.178 8.763 171.45 -12.3928 12.3928 -12.7 -15.178 8.763 -12.7 -16.9288 4.53606 171.45 -16.9288 4.53606 171.45 -15.178 8.763 -12.7 -16.9288 4.53606 -12.7 -17.526 0 171.45 -17.526 0 171.45 -16.9288 4.53606 -12.7 -17.526 0 -12.7 -16.9288 -4.53606 171.45 -16.9288 -4.53606 171.45 -17.526 0 -12.7 -16.9288 -4.53606 -12.7 -15.178 -8.763 171.45 -15.178 -8.763 171.45 -16.9288 -4.53606 -12.7 -15.178 -8.763 -12.7 -12.3928 -12.3928 171.45 -12.3928 -12.3928 171.45 -15.178 -8.763 -12.7 16.9288 -4.53606 -12.7 17.526 0 171.45 17.526 0 171.45 16.9288 -4.53606 -12.7 15.178 -8.763 -12.7 16.9288 -4.53606 171.45 16.9288 -4.53606 171.45 15.178 -8.763 -12.7 12.3928 -12.3928 -12.7 15.178 -8.763 171.45 15.178 -8.763 171.45 12.3928 -12.3928 -12.7 8.763 -15.178 -12.7 12.3928 -12.3928 171.45 12.3928 -12.3928 171.45 8.763 -15.178 -12.7 4.53606 -16.9288 -12.7 8.763 -15.178 171.45 8.763 -15.178 171.45 4.53606 -16.9288 -12.7 0 -17.526 -12.7 4.53606 -16.9288 171.45 4.53606 -16.9288 171.45 0 -17.526 -12.7 -4.53606 -16.9288 -12.7 0 -17.526 171.45 0 -17.526 171.45 -4.53606 -16.9288 -12.7 -8.763 -15.178 -12.7 -4.53606 -16.9288 171.45 -4.53606 -16.9288 171.45 -8.763 -15.178 -12.7 -12.3928 -12.3928 -12.7 -8.763 -15.178 171.45 -8.763 -15.178 171.45 -12.3928 -12.3928 -12.7 -8.763 -15.178 -12.7 -12.3928 -12.3928 -12.7 -15.178 -8.763 -12.7 -16.9288 -4.53606 -12.7 -17.526 0 -12.7 -16.9288 4.53606 -12.7 -15.178 8.763 -12.7 -12.3928 12.3928 -12.7 -8.763 15.178 -12.7 -4.53606 16.9288 -12.7 0 17.526 -12.7 4.53606 16.9288 -12.7 8.763 15.178 -12.7 12.3928 12.3928 -12.7 15.178 8.763 -12.7 16.9288 4.53606 -12.7 17.526 0 -12.7 16.9288 -4.53606 -12.7 15.178 -8.763 -12.7 12.3928 -12.3928 -12.7 8.763 -15.178 -12.7 4.53606 -16.9288 -12.7 0 -17.526 -12.7 -4.53606 -16.9288 -12.7 17.526 0 -12.7 16.9288 4.53606 171.45 16.9288 4.53606 171.45 17.526 0 + + + + + + + + + + 0 0.965932 0.258797 0 0.866034 0.499985 0 0.866034 0.499985 0 0.965932 0.258797 0 0.866034 0.499985 0 0.707083 0.70713 0 0.707083 0.70713 0 0.866034 0.499985 0 0.707083 0.70713 0 0.499985 0.866034 0 0.499985 0.866034 0 0.707083 0.70713 0 0.499985 0.866034 0 0.258797 0.965932 0 0.258797 0.965932 0 0.499985 0.866034 0 0.258797 0.965932 0 0 1 0 0 1 0 0.258797 0.965932 0 0 1 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0 1 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -1 0 0 -1 0 0 -0.965932 0.258797 0 -1 0 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -1 0 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 0.965932 -0.258797 0 1 0 0 1 0 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0 -1 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0 -1 0 -0.258797 -0.965932 0 0 -1 0 0 -1 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.707083 -0.70713 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.707083 -0.70713 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 0.965932 0.258797 0 0.965932 0.258797 0 1 0 + + + + + + + + + + + + + + +

0 0 1 1 2 2 3 3

+

4 4 5 5 6 6 7 7

+

8 8 9 9 10 10 11 11

+

12 12 13 13 14 14 15 15

+

16 16 17 17 18 18 19 19

+

20 20 21 21 22 22 23 23

+

24 24 25 25 26 26 27 27

+

28 28 29 29 30 30 31 31

+

32 32 33 33 34 34 35 35

+

36 36 37 37 38 38 39 39

+

40 40 41 41 42 42 43 43

+

44 44 45 45 46 46 47 47

+

48 48 49 49 50 50 51 51

+

52 52 53 53 54 54 55 55

+

56 56 57 57 58 58 59 59

+

60 60 61 61 62 62 63 63

+

64 64 65 65 66 66 67 67

+

68 68 69 69 70 70 71 71

+

72 72 73 73 74 74 75 75

+

76 76 77 77 78 78 79 79

+

80 80 81 81 82 82 83 83

+

84 84 85 85 86 86 87 87

+

88 88 89 89 90 90 91 91

+

92 92 93 93 94 94 95 95 96 96 97 97 98 98 99 99 100 100 101 101 102 102 103 103 104 104 105 105 106 106 107 107 108 108 109 109 110 110 111 111 112 112 113 113 114 114 115 115

+

116 116 117 117 118 118 119 119

+
+
+ + + CAT3DBagRep + + +
+ + + + -192.532 15.178 -8.763 -192.532 16.9288 -4.53606 -186.182 16.9288 -4.53606 -186.182 15.178 -8.763 -192.532 12.3928 -12.3928 -192.532 15.178 -8.763 -186.182 15.178 -8.763 -186.182 12.3928 -12.3928 -192.532 8.763 -15.178 -192.532 12.3928 -12.3928 -186.182 12.3928 -12.3928 -186.182 8.763 -15.178 -192.532 4.53606 -16.9288 -192.532 8.763 -15.178 -186.182 8.763 -15.178 -186.182 4.53606 -16.9288 -192.532 0 -17.526 -192.532 4.53606 -16.9288 -186.182 4.53606 -16.9288 -186.182 0 -17.526 -192.532 -4.53606 -16.9288 -192.532 0 -17.526 -186.182 0 -17.526 -186.182 -4.53606 -16.9288 -192.532 -8.763 -15.178 -192.532 -4.53606 -16.9288 -186.182 -4.53606 -16.9288 -186.182 -8.763 -15.178 -192.532 -12.3928 -12.3928 -192.532 -8.763 -15.178 -186.182 -8.763 -15.178 -186.182 -12.3928 -12.3928 -192.532 -15.178 -8.763 -192.532 -12.3928 -12.3928 -186.182 -12.3928 -12.3928 -186.182 -15.178 -8.763 -192.532 -16.9288 -4.53606 -192.532 -15.178 -8.763 -186.182 -15.178 -8.763 -186.182 -16.9288 -4.53606 -192.532 -17.526 0 -192.532 -16.9288 -4.53606 -186.182 -16.9288 -4.53606 -186.182 -17.526 0 -192.532 -16.9288 4.53606 -192.532 -17.526 0 -186.182 -17.526 0 -186.182 -16.9288 4.53606 -192.532 -15.178 8.763 -192.532 -16.9288 4.53606 -186.182 -16.9288 4.53606 -186.182 -15.178 8.763 -192.532 -12.3928 12.3928 -192.532 -15.178 8.763 -186.182 -15.178 8.763 -186.182 -12.3928 12.3928 -192.532 -8.763 15.178 -192.532 -12.3928 12.3928 -186.182 -12.3928 12.3928 -186.182 -8.763 15.178 -192.532 -4.53606 16.9288 -192.532 -8.763 15.178 -186.182 -8.763 15.178 -186.182 -4.53606 16.9288 -192.532 0 17.526 -192.532 -4.53606 16.9288 -186.182 -4.53606 16.9288 -186.182 0 17.526 -192.532 4.53606 16.9288 -192.532 0 17.526 -186.182 0 17.526 -186.182 4.53606 16.9288 -192.532 8.763 15.178 -192.532 4.53606 16.9288 -186.182 4.53606 16.9288 -186.182 8.763 15.178 -192.532 12.3928 12.3928 -192.532 8.763 15.178 -186.182 8.763 15.178 -186.182 12.3928 12.3928 -192.532 15.178 8.763 -192.532 12.3928 12.3928 -186.182 12.3928 12.3928 -186.182 15.178 8.763 -192.532 16.9288 4.53606 -192.532 15.178 8.763 -186.182 15.178 8.763 -186.182 16.9288 4.53606 -186.182 16.9288 4.53606 -186.182 15.178 8.763 -186.182 12.3928 12.3928 -186.182 8.763 15.178 -186.182 4.53606 16.9288 -186.182 0 17.526 -186.182 -4.53606 16.9288 -186.182 -8.763 15.178 -186.182 -12.3928 12.3928 -186.182 -15.178 8.763 -186.182 -16.9288 4.53606 -186.182 -17.526 0 -186.182 -16.9288 -4.53606 -186.182 -15.178 -8.763 -186.182 -12.3928 -12.3928 -186.182 -8.763 -15.178 -186.182 -4.53606 -16.9288 -186.182 0 -17.526 -186.182 4.53606 -16.9288 -186.182 8.763 -15.178 -186.182 12.3928 -12.3928 -186.182 15.178 -8.763 -186.182 16.9288 -4.53606 -186.182 17.526 0 -192.532 16.9288 -4.53606 -192.532 17.526 0 -186.182 17.526 0 -186.182 16.9288 -4.53606 -192.532 17.526 0 -192.532 16.9288 -4.53606 -192.532 15.178 -8.763 -192.532 12.3928 -12.3928 -192.532 8.763 -15.178 -192.532 4.53606 -16.9288 -192.532 0 -17.526 -192.532 -4.53606 -16.9288 -192.532 -8.763 -15.178 -192.532 -12.3928 -12.3928 -192.532 -15.178 -8.763 -192.532 -16.9288 -4.53606 -192.532 -17.526 0 -192.532 -16.9288 4.53606 -192.532 -15.178 8.763 -192.532 -12.3928 12.3928 -192.532 -8.763 15.178 -192.532 -4.53606 16.9288 -192.532 0 17.526 -192.532 4.53606 16.9288 -192.532 8.763 15.178 -192.532 12.3928 12.3928 -192.532 15.178 8.763 -192.532 16.9288 4.53606 -192.532 17.526 0 -192.532 16.9288 4.53606 -186.182 16.9288 4.53606 -186.182 17.526 0 -40.8191 33.3375 131.911 -41.148 33.3375 129.413 -41.148 -33.3375 129.413 -40.8191 -33.3375 131.911 -39.8549 33.3375 134.239 -40.8191 33.3375 131.911 -40.8191 -33.3375 131.911 -39.8549 -33.3375 134.239 -38.321 33.3375 136.238 -39.8549 33.3375 134.239 -39.8549 -33.3375 134.239 -38.321 -33.3375 136.238 -36.322 33.3375 137.772 -38.321 33.3375 136.238 -38.321 -33.3375 136.238 -36.322 -33.3375 137.772 -33.9941 33.3375 138.736 -36.322 33.3375 137.772 -36.322 -33.3375 137.772 -33.9941 -33.3375 138.736 -31.496 33.3375 139.065 -33.9941 33.3375 138.736 -33.9941 -33.3375 138.736 -31.496 -33.3375 139.065 -28.9979 33.3375 138.736 -31.496 33.3375 139.065 -31.496 -33.3375 139.065 -28.9979 -33.3375 138.736 -26.67 33.3375 137.772 -28.9979 33.3375 138.736 -28.9979 -33.3375 138.736 -26.67 -33.3375 137.772 -24.671 33.3375 136.238 -26.67 33.3375 137.772 -26.67 -33.3375 137.772 -24.671 -33.3375 136.238 -23.1371 33.3375 134.239 -24.671 33.3375 136.238 -24.671 -33.3375 136.238 -23.1371 -33.3375 134.239 -22.1729 33.3375 131.911 -23.1371 33.3375 134.239 -23.1371 -33.3375 134.239 -22.1729 -33.3375 131.911 -21.844 33.3375 129.413 -22.1729 33.3375 131.911 -22.1729 -33.3375 131.911 -21.844 -33.3375 129.413 -41.148 -33.3375 129.413 -41.148 -33.3375 104.775 -21.844 -33.3375 104.775 -21.844 -33.3375 129.413 -22.1729 -33.3375 131.911 -23.1371 -33.3375 134.239 -24.671 -33.3375 136.238 -26.67 -33.3375 137.772 -28.9979 -33.3375 138.736 -31.496 -33.3375 139.065 -33.9941 -33.3375 138.736 -36.322 -33.3375 137.772 -38.321 -33.3375 136.238 -39.8549 -33.3375 134.239 -40.8191 -33.3375 131.911 -41.148 33.3375 129.413 -41.148 33.3375 104.775 -41.148 -33.3375 104.775 -41.148 -33.3375 129.413 -21.844 33.3375 129.413 -21.844 33.3375 104.775 -41.148 33.3375 104.775 -41.148 33.3375 129.413 -40.8191 33.3375 131.911 -39.8549 33.3375 134.239 -38.321 33.3375 136.238 -36.322 33.3375 137.772 -33.9941 33.3375 138.736 -31.496 33.3375 139.065 -28.9979 33.3375 138.736 -26.67 33.3375 137.772 -24.671 33.3375 136.238 -23.1371 33.3375 134.239 -22.1729 33.3375 131.911 -21.844 33.3375 104.775 -21.844 33.3375 129.413 -21.844 -33.3375 129.413 -21.844 -33.3375 104.775 -28.702 -23.8125 12.7 -28.3731 -23.8125 15.1981 -28.3731 23.8125 15.1981 -28.702 23.8125 12.7 -28.3731 -23.8125 15.1981 -27.4089 -23.8125 17.526 -27.4089 23.8125 17.526 -28.3731 23.8125 15.1981 -27.4089 -23.8125 17.526 -25.875 -23.8125 19.525 -25.875 23.8125 19.525 -27.4089 23.8125 17.526 -25.875 -23.8125 19.525 -23.876 -23.8125 21.0589 -23.876 23.8125 21.0589 -25.875 23.8125 19.525 -23.876 -23.8125 21.0589 -21.5481 -23.8125 22.0231 -21.5481 23.8125 22.0231 -23.876 23.8125 21.0589 -21.5481 -23.8125 22.0231 -19.05 -23.8125 22.352 -19.05 23.8125 22.352 -21.5481 23.8125 22.0231 -19.05 -23.8125 22.352 -16.5519 -23.8125 22.0231 -16.5519 23.8125 22.0231 -19.05 23.8125 22.352 -16.5519 -23.8125 22.0231 -14.224 -23.8125 21.0589 -14.224 23.8125 21.0589 -16.5519 23.8125 22.0231 -14.224 -23.8125 21.0589 -12.225 -23.8125 19.525 -12.225 23.8125 19.525 -14.224 23.8125 21.0589 -12.225 -23.8125 19.525 -10.6911 -23.8125 17.526 -10.6911 23.8125 17.526 -12.225 23.8125 19.525 -10.6911 -23.8125 17.526 -9.72688 -23.8125 15.1981 -9.72688 23.8125 15.1981 -10.6911 23.8125 17.526 -9.72688 -23.8125 15.1981 -9.39801 -23.8125 12.7 -9.39801 23.8125 12.7 -9.72688 23.8125 15.1981 -28.702 -23.8125 0 -9.39801 -23.8125 0 -9.39801 -23.8125 12.7 -9.72688 -23.8125 15.1981 -10.6911 -23.8125 17.526 -12.225 -23.8125 19.525 -14.224 -23.8125 21.0589 -16.5519 -23.8125 22.0231 -19.05 -23.8125 22.352 -21.5481 -23.8125 22.0231 -23.876 -23.8125 21.0589 -25.875 -23.8125 19.525 -27.4089 -23.8125 17.526 -28.3731 -23.8125 15.1981 -28.702 -23.8125 12.7 -28.702 -23.8125 0 -28.702 -23.8125 12.7 -28.702 23.8125 12.7 -28.702 23.8125 0 -9.39801 23.8125 0 -28.702 23.8125 0 -28.702 23.8125 12.7 -28.3731 23.8125 15.1981 -27.4089 23.8125 17.526 -25.875 23.8125 19.525 -23.876 23.8125 21.0589 -21.5481 23.8125 22.0231 -19.05 23.8125 22.352 -16.5519 23.8125 22.0231 -14.224 23.8125 21.0589 -12.225 23.8125 19.525 -10.6911 23.8125 17.526 -9.72688 23.8125 15.1981 -9.39801 23.8125 12.7 -9.39801 23.8125 0 -9.39801 23.8125 12.7 -9.39801 -23.8125 12.7 -9.39801 -23.8125 0 -44.196 -12.7 -23.8125 -105.156 -12.7 -23.8125 -108.443 -12.2673 -23.8125 -111.506 -10.9985 -23.8125 -114.136 -8.98026 -23.8125 -116.155 -6.35 -23.8125 -117.423 -3.287 -23.8125 -117.856 0 -23.8125 -117.423 3.287 -23.8125 -116.155 6.35 -23.8125 -114.136 8.98026 -23.8125 -111.506 10.9985 -23.8125 -108.443 12.2673 -23.8125 -105.156 12.7 -23.8125 -44.196 12.7 -23.8125 -105.156 12.7 0 -44.196 12.7 0 -44.196 12.7 -23.8125 -105.156 12.7 -23.8125 -108.443 12.2673 0 -105.156 12.7 0 -105.156 12.7 -23.8125 -108.443 12.2673 -23.8125 -111.506 10.9985 0 -108.443 12.2673 0 -108.443 12.2673 -23.8125 -111.506 10.9985 -23.8125 -114.136 8.98026 0 -111.506 10.9985 0 -111.506 10.9985 -23.8125 -114.136 8.98026 -23.8125 -116.155 6.35 0 -114.136 8.98026 0 -114.136 8.98026 -23.8125 -116.155 6.35 -23.8125 -117.423 3.287 0 -116.155 6.35 0 -116.155 6.35 -23.8125 -117.423 3.287 -23.8125 -117.856 0 0 -117.423 3.287 0 -117.423 3.287 -23.8125 -117.856 0 -23.8125 -117.423 -3.287 0 -117.856 0 0 -117.856 0 -23.8125 -117.423 -3.287 -23.8125 -116.155 -6.35 0 -117.423 -3.287 0 -117.423 -3.287 -23.8125 -116.155 -6.35 -23.8125 -114.136 -8.98026 0 -116.155 -6.35 0 -116.155 -6.35 -23.8125 -114.136 -8.98026 -23.8125 -111.506 -10.9985 0 -114.136 -8.98026 0 -114.136 -8.98026 -23.8125 -111.506 -10.9985 -23.8125 -108.443 -12.2673 0 -111.506 -10.9985 0 -111.506 -10.9985 -23.8125 -108.443 -12.2673 -23.8125 -105.156 -12.7 0 -108.443 -12.2673 0 -108.443 -12.2673 -23.8125 -105.156 -12.7 -23.8125 -44.196 -12.7 0 -105.156 -12.7 0 -105.156 -12.7 -23.8125 -44.196 -12.7 -23.8125 -44.196 12.7 0 -44.196 -12.7 0 -44.196 -12.7 -23.8125 -44.196 12.7 -23.8125 -105.156 23.8125 -12.7 -44.196 23.8125 -12.7 -44.196 -23.8125 -12.7 -105.156 -23.8125 -12.7 -108.443 23.8125 -12.2673 -105.156 23.8125 -12.7 -105.156 -23.8125 -12.7 -108.443 -23.8125 -12.2673 -111.506 23.8125 -10.9985 -108.443 23.8125 -12.2673 -108.443 -23.8125 -12.2673 -111.506 -23.8125 -10.9985 -114.136 23.8125 -8.98026 -111.506 23.8125 -10.9985 -111.506 -23.8125 -10.9985 -114.136 -23.8125 -8.98026 -116.155 23.8125 -6.35 -114.136 23.8125 -8.98026 -114.136 -23.8125 -8.98026 -116.155 -23.8125 -6.35 -117.423 23.8125 -3.287 -116.155 23.8125 -6.35 -116.155 -23.8125 -6.35 -117.423 -23.8125 -3.287 -117.856 23.8125 0 -117.423 23.8125 -3.287 -117.423 -23.8125 -3.287 -117.856 -23.8125 0 -117.423 23.8125 3.287 -117.856 23.8125 0 -117.856 -23.8125 0 -117.423 -23.8125 3.287 -116.155 23.8125 6.35 -117.423 23.8125 3.287 -117.423 -23.8125 3.287 -116.155 -23.8125 6.35 -114.136 23.8125 8.98026 -116.155 23.8125 6.35 -116.155 -23.8125 6.35 -114.136 -23.8125 8.98026 -111.506 23.8125 10.9985 -114.136 23.8125 8.98026 -114.136 -23.8125 8.98026 -111.506 -23.8125 10.9985 -108.443 23.8125 12.2673 -111.506 23.8125 10.9985 -111.506 -23.8125 10.9985 -108.443 -23.8125 12.2673 -105.156 23.8125 12.7 -108.443 23.8125 12.2673 -108.443 -23.8125 12.2673 -105.156 -23.8125 12.7 -44.196 -23.8125 12.7 -105.156 -23.8125 12.7 -108.443 -23.8125 12.2673 -111.506 -23.8125 10.9985 -114.136 -23.8125 8.98026 -116.155 -23.8125 6.35 -117.423 -23.8125 3.287 -117.856 -23.8125 0 -117.423 -23.8125 -3.287 -116.155 -23.8125 -6.35 -114.136 -23.8125 -8.98026 -111.506 -23.8125 -10.9985 -108.443 -23.8125 -12.2673 -105.156 -23.8125 -12.7 -44.196 -23.8125 -12.7 -44.196 23.8125 12.7 -44.196 -23.8125 12.7 -44.196 -23.8125 -12.7 -44.196 23.8125 -12.7 -105.156 23.8125 12.7 -44.196 23.8125 12.7 -44.196 23.8125 -12.7 -105.156 23.8125 -12.7 -108.443 23.8125 -12.2673 -111.506 23.8125 -10.9985 -114.136 23.8125 -8.98026 -116.155 23.8125 -6.35 -117.423 23.8125 -3.287 -117.856 23.8125 0 -117.423 23.8125 3.287 -116.155 23.8125 6.35 -114.136 23.8125 8.98026 -111.506 23.8125 10.9985 -108.443 23.8125 12.2673 -44.196 23.8125 12.7 -105.156 23.8125 12.7 -105.156 -23.8125 12.7 -44.196 -23.8125 12.7 -38.1 19.05 0 -3.048 19.05 0 -3.048 19.05 -28.575 -38.1 19.05 -28.575 -38.1 -23.876 0 -38.1 19.05 0 -38.1 19.05 -28.575 -38.1 -23.876 -28.575 -3.048 -23.876 0 -38.1 -23.876 0 -38.1 -23.876 -28.575 -3.048 -23.876 -28.575 -3.048 19.05 0 -3.048 -23.876 0 -3.048 -23.876 -28.575 -3.048 19.05 -28.575 -3.048 19.05 -28.575 -3.048 -23.876 -28.575 -38.1 -23.876 -28.575 -38.1 19.05 -28.575 0 16.9288 4.53606 0 15.178 8.763 0 12.3928 12.3928 0 8.763 15.178 0 4.53606 16.9288 0 0 17.526 0 -4.53606 16.9288 0 -8.763 15.178 0 -12.3928 12.3928 0 -15.178 8.763 0 -16.9288 4.53606 0 -17.526 0 0 -16.9288 -4.53606 0 -15.178 -8.763 0 -12.3928 -12.3928 0 -8.763 -15.178 0 -4.53606 -16.9288 0 0 -17.526 0 4.53606 -16.9288 0 8.763 -15.178 0 12.3928 -12.3928 0 15.178 -8.763 0 16.9288 -4.53606 0 17.526 0 -3.048 16.9288 -4.53606 -3.048 17.526 0 0 17.526 0 0 16.9288 -4.53606 -3.048 15.178 -8.763 -3.048 16.9288 -4.53606 0 16.9288 -4.53606 0 15.178 -8.763 -3.048 12.3928 -12.3928 -3.048 15.178 -8.763 0 15.178 -8.763 0 12.3928 -12.3928 -3.048 8.763 -15.178 -3.048 12.3928 -12.3928 0 12.3928 -12.3928 0 8.763 -15.178 -3.048 4.53606 -16.9288 -3.048 8.763 -15.178 0 8.763 -15.178 0 4.53606 -16.9288 -3.048 0 -17.526 -3.048 4.53606 -16.9288 0 4.53606 -16.9288 0 0 -17.526 -3.048 -4.53606 -16.9288 -3.048 0 -17.526 0 0 -17.526 0 -4.53606 -16.9288 -3.048 -8.763 -15.178 -3.048 -4.53606 -16.9288 0 -4.53606 -16.9288 0 -8.763 -15.178 -3.048 -12.3928 -12.3928 -3.048 -8.763 -15.178 0 -8.763 -15.178 0 -12.3928 -12.3928 -3.048 -15.178 -8.763 -3.048 -12.3928 -12.3928 0 -12.3928 -12.3928 0 -15.178 -8.763 -3.048 -16.9288 -4.53606 -3.048 -15.178 -8.763 0 -15.178 -8.763 0 -16.9288 -4.53606 -3.048 -17.526 0 -3.048 -16.9288 -4.53606 0 -16.9288 -4.53606 0 -17.526 0 -3.048 -16.9288 4.53606 -3.048 -17.526 0 0 -17.526 0 0 -16.9288 4.53606 -3.048 -15.178 8.763 -3.048 -16.9288 4.53606 0 -16.9288 4.53606 0 -15.178 8.763 -3.048 -12.3928 12.3928 -3.048 -15.178 8.763 0 -15.178 8.763 0 -12.3928 12.3928 -3.048 -8.763 15.178 -3.048 -12.3928 12.3928 0 -12.3928 12.3928 0 -8.763 15.178 -3.048 -4.53606 16.9288 -3.048 -8.763 15.178 0 -8.763 15.178 0 -4.53606 16.9288 -3.048 0 17.526 -3.048 -4.53606 16.9288 0 -4.53606 16.9288 0 0 17.526 -3.048 4.53606 16.9288 -3.048 0 17.526 0 0 17.526 0 4.53606 16.9288 -3.048 8.763 15.178 -3.048 4.53606 16.9288 0 4.53606 16.9288 0 8.763 15.178 -3.048 12.3928 12.3928 -3.048 8.763 15.178 0 8.763 15.178 0 12.3928 12.3928 -3.048 15.178 8.763 -3.048 12.3928 12.3928 0 12.3928 12.3928 0 15.178 8.763 -3.048 16.9288 4.53606 -3.048 15.178 8.763 0 15.178 8.763 0 16.9288 4.53606 -3.048 17.526 0 -3.048 16.9288 4.53606 0 16.9288 4.53606 0 17.526 0 -47.244 15.748 304.673 -47.244 -15.748 304.673 -15.748 -15.748 304.673 -15.748 15.748 304.673 -15.748 -15.748 263.525 -15.748 15.748 263.525 -15.748 15.748 304.673 -15.748 -15.748 304.673 -47.244 -15.748 263.525 -15.748 -15.748 263.525 -15.748 -15.748 304.673 -47.244 -15.748 304.673 -47.244 15.748 263.525 -47.244 -15.748 263.525 -47.244 -15.748 304.673 -47.244 15.748 304.673 -15.748 15.748 263.525 -47.244 15.748 263.525 -47.244 15.748 304.673 -15.748 15.748 304.673 -47.244 15.748 263.525 -15.748 15.748 263.525 -15.748 -15.748 263.525 -47.244 -15.748 263.525 -44.196 15.748 263.525 -44.196 15.748 121.412 -44.196 -15.748 121.412 -44.196 -15.748 263.525 -44.196 -15.748 263.525 -44.196 -15.748 121.412 -18.796 -15.748 121.412 -18.796 -15.748 263.525 -18.796 -15.748 263.525 -18.796 -15.748 121.412 -18.796 15.748 121.412 -18.796 15.748 263.525 -18.796 15.748 263.525 -18.796 15.748 121.412 -44.196 15.748 121.412 -44.196 15.748 263.525 -44.196 8.61195 136.915 -44.196 16.637 133.591 -44.196 23.5283 128.303 -44.196 28.8161 121.412 -44.196 32.1402 113.387 -44.196 33.274 104.775 -44.196 32.1402 96.1631 -44.196 28.8161 88.138 -44.196 23.5283 81.2467 -44.196 16.637 75.9589 -44.196 8.61194 72.6348 -44.196 0 71.501 -44.196 -8.61194 72.6348 -44.196 -16.637 75.9589 -44.196 -23.5283 81.2467 -44.196 -28.8161 88.138 -44.196 -32.1402 96.1631 -44.196 -33.274 104.775 -44.196 -32.1402 113.387 -44.196 -28.8161 121.412 -44.196 -23.5283 128.303 -44.196 -16.637 133.591 -44.196 -8.61194 136.915 -44.196 0 138.049 7.87399 33.274 104.775 7.87399 32.1402 113.387 7.87399 28.8161 121.412 7.87399 23.5283 128.303 7.87399 16.637 133.591 7.87399 8.61195 136.915 7.87399 0 138.049 7.87399 -8.61194 136.915 7.87399 -16.637 133.591 7.87399 -23.5283 128.303 7.87399 -28.8161 121.412 7.87399 -32.1402 113.387 7.87399 -33.274 104.775 7.87399 -32.1402 96.1631 7.87399 -28.8161 88.138 7.87399 -23.5283 81.2467 7.87399 -16.637 75.9589 7.87399 -8.61194 72.6348 7.87399 0 71.501 7.87399 8.61194 72.6348 7.87399 16.637 75.9589 7.87399 23.5283 81.2467 7.87399 28.8161 88.138 7.87399 32.1402 96.1631 -44.196 32.1402 96.1631 7.87399 32.1402 96.1631 7.87399 28.8161 88.138 -44.196 28.8161 88.138 -44.196 28.8161 88.138 7.87399 28.8161 88.138 7.87399 23.5283 81.2467 -44.196 23.5283 81.2467 -44.196 23.5283 81.2467 7.87399 23.5283 81.2467 7.87399 16.637 75.9589 -44.196 16.637 75.9589 -44.196 16.637 75.9589 7.87399 16.637 75.9589 7.87399 8.61194 72.6348 -44.196 8.61194 72.6348 -44.196 8.61194 72.6348 7.87399 8.61194 72.6348 7.87399 0 71.501 -44.196 0 71.501 -44.196 0 71.501 7.87399 0 71.501 7.87399 -8.61194 72.6348 -44.196 -8.61194 72.6348 -44.196 -8.61194 72.6348 7.87399 -8.61194 72.6348 7.87399 -16.637 75.9589 -44.196 -16.637 75.9589 -44.196 -16.637 75.9589 7.87399 -16.637 75.9589 7.87399 -23.5283 81.2467 -44.196 -23.5283 81.2467 -44.196 -23.5283 81.2467 7.87399 -23.5283 81.2467 7.87399 -28.8161 88.138 -44.196 -28.8161 88.138 -44.196 -28.8161 88.138 7.87399 -28.8161 88.138 7.87399 -32.1402 96.1631 -44.196 -32.1402 96.1631 -44.196 -32.1402 96.1631 7.87399 -32.1402 96.1631 7.87399 -33.274 104.775 -44.196 -33.274 104.775 -44.196 -33.274 104.775 7.87399 -33.274 104.775 7.87399 -32.1402 113.387 -44.196 -32.1402 113.387 -44.196 -32.1402 113.387 7.87399 -32.1402 113.387 7.87399 -28.8161 121.412 -44.196 -28.8161 121.412 -44.196 -28.8161 121.412 7.87399 -28.8161 121.412 7.87399 -23.5283 128.303 -44.196 -23.5283 128.303 -44.196 -23.5283 128.303 7.87399 -23.5283 128.303 7.87399 -16.637 133.591 -44.196 -16.637 133.591 -44.196 -16.637 133.591 7.87399 -16.637 133.591 7.87399 -8.61194 136.915 -44.196 -8.61194 136.915 -44.196 -8.61194 136.915 7.87399 -8.61194 136.915 7.87399 0 138.049 -44.196 0 138.049 -44.196 0 138.049 7.87399 0 138.049 7.87399 8.61195 136.915 -44.196 8.61195 136.915 -44.196 8.61195 136.915 7.87399 8.61195 136.915 7.87399 16.637 133.591 -44.196 16.637 133.591 -44.196 16.637 133.591 7.87399 16.637 133.591 7.87399 23.5283 128.303 -44.196 23.5283 128.303 -44.196 23.5283 128.303 7.87399 23.5283 128.303 7.87399 28.8161 121.412 -44.196 28.8161 121.412 -44.196 28.8161 121.412 7.87399 28.8161 121.412 7.87399 32.1402 113.387 -44.196 32.1402 113.387 -44.196 32.1402 113.387 7.87399 32.1402 113.387 7.87399 33.274 104.775 -44.196 33.274 104.775 -44.196 33.274 104.775 7.87399 33.274 104.775 7.87399 32.1402 96.1631 -44.196 32.1402 96.1631 -44.196 17.526 88.138 -44.196 17.526 0 -44.196 -17.526 0 -44.196 -17.526 88.138 -44.196 -17.526 88.138 -44.196 -17.526 0 -3.048 -17.526 0 -3.048 -17.526 88.138 -3.048 -17.526 88.138 -3.048 -17.526 0 -3.048 17.526 0 -3.048 17.526 88.138 -3.048 17.526 88.138 -3.048 17.526 0 -44.196 17.526 0 -44.196 17.526 88.138 -50.8 20.6772 -11.938 -50.8 23.0624 -6.17956 -3.048 23.0624 -6.17956 -3.048 20.6772 -11.938 -50.8 16.8829 -16.8829 -50.8 20.6772 -11.938 -3.048 20.6772 -11.938 -3.048 16.8829 -16.8829 -50.8 11.938 -20.6772 -50.8 16.8829 -16.8829 -3.048 16.8829 -16.8829 -3.048 11.938 -20.6772 -50.8 6.17956 -23.0624 -50.8 11.938 -20.6772 -3.048 11.938 -20.6772 -3.048 6.17956 -23.0624 -50.8 0 -23.876 -50.8 6.17956 -23.0624 -3.048 6.17956 -23.0624 -3.048 0 -23.876 -50.8 -6.17956 -23.0624 -50.8 0 -23.876 -3.048 0 -23.876 -3.048 -6.17956 -23.0624 -50.8 -11.938 -20.6772 -50.8 -6.17956 -23.0624 -3.048 -6.17956 -23.0624 -3.048 -11.938 -20.6772 -50.8 -16.8829 -16.8829 -50.8 -11.938 -20.6772 -3.048 -11.938 -20.6772 -3.048 -16.8829 -16.8829 -50.8 -20.6772 -11.938 -50.8 -16.8829 -16.8829 -3.048 -16.8829 -16.8829 -3.048 -20.6772 -11.938 -50.8 -23.0624 -6.17956 -50.8 -20.6772 -11.938 -3.048 -20.6772 -11.938 -3.048 -23.0624 -6.17956 -50.8 -23.876 0 -50.8 -23.0624 -6.17956 -3.048 -23.0624 -6.17956 -3.048 -23.876 0 -50.8 -23.0624 6.17956 -50.8 -23.876 0 -3.048 -23.876 0 -3.048 -23.0624 6.17956 -50.8 -20.6772 11.938 -50.8 -23.0624 6.17956 -3.048 -23.0624 6.17956 -3.048 -20.6772 11.938 -50.8 -16.8829 16.8829 -50.8 -20.6772 11.938 -3.048 -20.6772 11.938 -3.048 -16.8829 16.8829 -50.8 -11.938 20.6772 -50.8 -16.8829 16.8829 -3.048 -16.8829 16.8829 -3.048 -11.938 20.6772 -50.8 -6.17956 23.0624 -50.8 -11.938 20.6772 -3.048 -11.938 20.6772 -3.048 -6.17956 23.0624 -50.8 0 23.876 -50.8 -6.17956 23.0624 -3.048 -6.17956 23.0624 -3.048 0 23.876 -50.8 6.17956 23.0624 -50.8 0 23.876 -3.048 0 23.876 -3.048 6.17956 23.0624 -50.8 11.938 20.6772 -50.8 6.17956 23.0624 -3.048 6.17956 23.0624 -3.048 11.938 20.6772 -50.8 16.8829 16.8829 -50.8 11.938 20.6772 -3.048 11.938 20.6772 -3.048 16.8829 16.8829 -50.8 20.6772 11.938 -50.8 16.8829 16.8829 -3.048 16.8829 16.8829 -3.048 20.6772 11.938 -50.8 23.0624 6.17956 -50.8 20.6772 11.938 -3.048 20.6772 11.938 -3.048 23.0624 6.17956 -3.048 23.0624 6.17956 -3.048 20.6772 11.938 -3.048 16.8829 16.8829 -3.048 11.938 20.6772 -3.048 6.17956 23.0624 -3.048 0 23.876 -3.048 -6.17956 23.0624 -3.048 -11.938 20.6772 -3.048 -16.8829 16.8829 -3.048 -20.6772 11.938 -3.048 -23.0624 6.17956 -3.048 -23.876 0 -3.048 -23.0624 -6.17956 -3.048 -20.6772 -11.938 -3.048 -16.8829 -16.8829 -3.048 -11.938 -20.6772 -3.048 -6.17956 -23.0624 -3.048 0 -23.876 -3.048 6.17956 -23.0624 -3.048 11.938 -20.6772 -3.048 16.8829 -16.8829 -3.048 20.6772 -11.938 -3.048 23.0624 -6.17956 -3.048 23.876 0 -50.8 23.0624 -6.17956 -50.8 23.876 0 -3.048 23.876 0 -3.048 23.0624 -6.17956 -50.8 23.876 0 -50.8 23.0624 -6.17956 -50.8 20.6772 -11.938 -50.8 16.8829 -16.8829 -50.8 11.938 -20.6772 -50.8 6.17956 -23.0624 -50.8 0 -23.876 -50.8 -6.17956 -23.0624 -50.8 -11.938 -20.6772 -50.8 -16.8829 -16.8829 -50.8 -20.6772 -11.938 -50.8 -23.0624 -6.17956 -50.8 -23.876 0 -50.8 -23.0624 6.17956 -50.8 -20.6772 11.938 -50.8 -16.8829 16.8829 -50.8 -11.938 20.6772 -50.8 -6.17956 23.0624 -50.8 0 23.876 -50.8 6.17956 23.0624 -50.8 11.938 20.6772 -50.8 16.8829 16.8829 -50.8 20.6772 11.938 -50.8 23.0624 6.17956 -50.8 23.876 0 -50.8 23.0624 6.17956 -3.048 23.0624 6.17956 -3.048 23.876 0 -186.182 21.4677 5.75225 -186.182 19.2474 11.1125 -44.196 19.2474 11.1125 -44.196 21.4677 5.75225 -186.182 19.2474 11.1125 -186.182 15.7154 15.7154 -44.196 15.7154 15.7154 -44.196 19.2474 11.1125 -186.182 15.7154 15.7154 -186.182 11.1125 19.2474 -44.196 11.1125 19.2474 -44.196 15.7154 15.7154 -186.182 11.1125 19.2474 -186.182 5.75225 21.4677 -44.196 5.75225 21.4677 -44.196 11.1125 19.2474 -186.182 5.75225 21.4677 -186.182 0 22.225 -44.196 0 22.225 -44.196 5.75225 21.4677 -186.182 0 22.225 -186.182 -5.75225 21.4677 -44.196 -5.75225 21.4677 -44.196 0 22.225 -186.182 -5.75225 21.4677 -186.182 -11.1125 19.2474 -44.196 -11.1125 19.2474 -44.196 -5.75225 21.4677 -186.182 -11.1125 19.2474 -186.182 -15.7154 15.7154 -44.196 -15.7154 15.7154 -44.196 -11.1125 19.2474 -186.182 -15.7154 15.7154 -186.182 -19.2474 11.1125 -44.196 -19.2474 11.1125 -44.196 -15.7154 15.7154 -186.182 -19.2474 11.1125 -186.182 -21.4677 5.75225 -44.196 -21.4677 5.75225 -44.196 -19.2474 11.1125 -186.182 -21.4677 5.75225 -186.182 -22.225 0 -44.196 -22.225 0 -44.196 -21.4677 5.75225 -186.182 -22.225 0 -186.182 -21.4677 -5.75225 -44.196 -21.4677 -5.75225 -44.196 -22.225 0 -186.182 -21.4677 -5.75225 -186.182 -19.2474 -11.1125 -44.196 -19.2474 -11.1125 -44.196 -21.4677 -5.75225 -186.182 -19.2474 -11.1125 -186.182 -15.7154 -15.7154 -44.196 -15.7154 -15.7154 -44.196 -19.2474 -11.1125 -186.182 -15.7154 -15.7154 -186.182 -11.1125 -19.2474 -44.196 -11.1125 -19.2474 -44.196 -15.7154 -15.7154 -186.182 -11.1125 -19.2474 -186.182 -5.75225 -21.4677 -44.196 -5.75225 -21.4677 -44.196 -11.1125 -19.2474 -186.182 -5.75225 -21.4677 -186.182 0 -22.225 -44.196 0 -22.225 -44.196 -5.75225 -21.4677 -186.182 0 -22.225 -186.182 5.75225 -21.4677 -44.196 5.75225 -21.4677 -44.196 0 -22.225 -186.182 5.75225 -21.4677 -186.182 11.1125 -19.2474 -44.196 11.1125 -19.2474 -44.196 5.75225 -21.4677 -186.182 11.1125 -19.2474 -186.182 15.7154 -15.7155 -44.196 15.7154 -15.7155 -44.196 11.1125 -19.2474 -186.182 15.7154 -15.7155 -186.182 19.2474 -11.1125 -44.196 19.2474 -11.1125 -44.196 15.7154 -15.7155 -186.182 19.2474 -11.1125 -186.182 21.4677 -5.75225 -44.196 21.4677 -5.75225 -44.196 19.2474 -11.1125 -186.182 21.4677 -5.75225 -186.182 22.225 0 -44.196 22.225 0 -44.196 21.4677 -5.75225 -186.182 22.225 0 -186.182 21.4677 -5.75225 -186.182 19.2474 -11.1125 -186.182 15.7154 -15.7155 -186.182 11.1125 -19.2474 -186.182 5.75225 -21.4677 -186.182 0 -22.225 -186.182 -5.75225 -21.4677 -186.182 -11.1125 -19.2474 -186.182 -15.7154 -15.7154 -186.182 -19.2474 -11.1125 -186.182 -21.4677 -5.75225 -186.182 -22.225 0 -186.182 -21.4677 5.75225 -186.182 -19.2474 11.1125 -186.182 -15.7154 15.7154 -186.182 -11.1125 19.2474 -186.182 -5.75225 21.4677 -186.182 0 22.225 -186.182 5.75225 21.4677 -186.182 11.1125 19.2474 -186.182 15.7154 15.7154 -186.182 19.2474 11.1125 -186.182 21.4677 5.75225 -186.182 22.225 0 -186.182 21.4677 5.75225 -44.196 21.4677 5.75225 -44.196 22.225 0 0.254013 -15.748 137.535 -18.796 -15.748 121.412 7.87399 -15.748 123.825 -16.2438 -15.748 147.06 -18.796 -15.748 156.585 0.254013 15.748 137.535 7.87399 15.748 123.825 -18.796 15.748 121.412 -16.2438 15.748 147.06 -18.796 15.748 156.585 7.87399 -15.748 123.825 7.87399 15.748 123.825 0.254013 15.748 137.535 -18.796 15.748 156.585 -18.796 -15.748 156.585 -18.1469 -15.748 151.655 -16.2438 15.748 147.06 -16.2438 -15.748 147.06 0.254013 15.748 137.535 0.254013 -15.748 137.535 0.254013 -15.748 137.535 -18.1469 15.748 151.655 -13.2164 15.748 143.115 -13.2164 -15.748 143.115 -9.27098 15.748 140.088 -9.27098 -15.748 140.088 -4.67648 15.748 138.185 -4.67648 -15.748 138.185 -44.196 -21.4677 27.9485 -109.569 -21.4677 5.43886 -107.696 -22.225 0 -44.196 -22.225 21.8648 -44.196 -19.2474 33.6176 -111.314 -19.2474 10.5071 -109.569 -21.4677 5.43886 -44.196 -21.4677 27.9485 -44.196 -15.7154 38.4858 -112.812 -15.7154 14.8592 -111.314 -19.2474 10.5071 -44.196 -19.2474 33.6176 -44.196 -11.1125 42.2213 -113.962 -11.1125 18.1988 -112.812 -15.7154 14.8592 -44.196 -15.7154 38.4858 -44.196 -5.75225 44.5695 -114.685 -5.75225 20.2981 -113.962 -11.1125 18.1988 -44.196 -11.1125 42.2213 -44.196 0 45.3704 -114.932 0 21.0142 -114.685 -5.75225 20.2981 -44.196 -5.75225 44.5695 -44.196 5.75225 44.5695 -114.685 5.75225 20.2981 -114.932 0 21.0142 -44.196 0 45.3704 -44.196 11.1125 42.2213 -113.962 11.1125 18.1988 -114.685 5.75225 20.2981 -44.196 5.75225 44.5695 -44.196 15.7154 38.4858 -112.812 15.7154 14.8592 -113.962 11.1125 18.1988 -44.196 11.1125 42.2213 -44.196 19.2474 33.6176 -111.314 19.2474 10.5071 -112.812 15.7154 14.8592 -44.196 15.7154 38.4858 -44.196 21.4677 27.9485 -109.569 21.4677 5.43886 -111.314 19.2474 10.5071 -44.196 19.2474 33.6176 -44.196 22.225 21.8648 -107.696 22.225 0 -109.569 21.4677 5.43886 -44.196 21.4677 27.9485 -44.196 22.225 21.8648 -44.196 22.225 0 -107.696 22.225 0 -44.196 22.225 0 -44.196 22.225 21.8648 -44.196 21.4677 27.9485 -44.196 19.2474 33.6176 -44.196 15.7154 38.4858 -44.196 11.1125 42.2213 -44.196 5.75225 44.5695 -44.196 0 45.3704 -44.196 -5.75225 44.5695 -44.196 -11.1125 42.2213 -44.196 -15.7154 38.4858 -44.196 -19.2474 33.6176 -44.196 -21.4677 27.9485 -44.196 -22.225 21.8648 -44.196 -22.225 0 -107.696 -22.225 0 -44.196 -22.225 0 -44.196 -22.225 21.8648 + + + + + + + + + + 0 0.866034 -0.499985 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0 -1 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0 -1 0 -0.258797 -0.965932 0 0 -1 0 0 -1 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.70713 -0.707083 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.70713 -0.707083 0 -0.866034 -0.499985 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -1 0 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -1 0 0 -0.965932 0.258797 0 -1 0 0 -1 0 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.258797 0.965932 0 0 1 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0 1 0 0.258797 0.965932 0 0 1 0 0 1 0 0.258797 0.965932 0 0.499985 0.866034 0 0.258797 0.965932 0 0.258797 0.965932 0 0.499985 0.866034 0 0.707083 0.70713 0 0.499985 0.866034 0 0.499985 0.866034 0 0.707083 0.70713 0 0.866034 0.499985 0 0.707083 0.70713 0 0.707083 0.70713 0 0.866034 0.499985 0 0.965932 0.258797 0 0.866034 0.499985 0 0.866034 0.499985 0 0.965932 0.258797 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.965932 -0.258797 0 1 0 0 1 0 0 0.965932 -0.258797 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 0.965932 0.258797 0 0.965932 0.258797 0 1 0 -0.965932 0 0.258797 -0.997861 0 0.0653706 -0.997861 0 0.0653706 -0.965932 0 0.258797 -0.866034 0 0.499985 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.866034 0 0.499985 -0.707083 0 0.70713 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.707083 0 0.70713 -0.499985 0 0.866034 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.499985 0 0.866034 -0.258797 0 0.965932 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.258797 0 0.965932 0 0 1 -0.258797 0 0.965932 -0.258797 0 0.965932 0 0 1 0.258797 0 0.965932 0 0 1 0 0 1 0.258797 0 0.965932 0.499985 0 0.866034 0.258797 0 0.965932 0.258797 0 0.965932 0.499985 0 0.866034 0.707083 0 0.70713 0.499985 0 0.866034 0.499985 0 0.866034 0.707083 0 0.70713 0.866034 0 0.499985 0.707083 0 0.70713 0.707083 0 0.70713 0.866034 0 0.499985 0.965932 0 0.258797 0.866034 0 0.499985 0.866034 0 0.499985 0.965932 0 0.258797 0.997861 0 0.0653706 0.965932 0 0.258797 0.965932 0 0.258797 0.997861 0 0.0653706 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.997861 0 0.0653706 -1 0 0 -1 0 0 -0.997861 0 0.0653706 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 0.997861 0 0.0653706 0.997861 0 0.0653706 1 0 0 -0.997861 0 0.0653706 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.997861 0 0.0653706 -0.965932 0 0.258797 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.965932 0 0.258797 -0.866034 0 0.499985 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.866034 0 0.499985 -0.70713 0 0.707083 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.70713 0 0.707083 -0.499985 0 0.866034 -0.258797 0 0.965932 -0.258797 0 0.965932 -0.499985 0 0.866034 -0.258797 0 0.965932 0 0 1 0 0 1 -0.258797 0 0.965932 0 0 1 0.258797 0 0.965932 0.258797 0 0.965932 0 0 1 0.258797 0 0.965932 0.499985 0 0.866034 0.499985 0 0.866034 0.258797 0 0.965932 0.499985 0 0.866034 0.70713 0 0.707083 0.70713 0 0.707083 0.499985 0 0.866034 0.70713 0 0.707083 0.866034 0 0.499985 0.866034 0 0.499985 0.70713 0 0.707083 0.866034 0 0.499985 0.965932 0 0.258797 0.965932 0 0.258797 0.866034 0 0.499985 0.965932 0 0.258797 0.997861 0 0.0653706 0.997861 0 0.0653706 0.965932 0 0.258797 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -0.997861 0 0.0653706 -0.997861 0 0.0653706 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 0.997861 0 0.0653706 0.997861 0 0.0653706 1 0 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.0654012 0.997859 0 0 1 0 0 1 0 -0.0654012 0.997859 0 -0.258797 0.965932 0 -0.0654012 0.997859 0 -0.0654012 0.997859 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.258797 0.965932 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.70713 0.707083 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.70713 0.707083 0 -0.866034 0.499985 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -1 0 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -1 0 0 -0.965932 -0.258797 0 -1 0 0 -1 0 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.70713 -0.707083 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.70713 -0.707083 0 -0.499985 -0.866034 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 -0.0654012 -0.997859 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.0654012 -0.997859 0 0 -1 0 -0.0654012 -0.997859 0 -0.0654012 -0.997859 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 -0.0654012 0 -0.997859 0 0 -1 0 0 -1 -0.0654012 0 -0.997859 -0.258797 0 -0.965932 -0.0654012 0 -0.997859 -0.0654012 0 -0.997859 -0.258797 0 -0.965932 -0.499985 0 -0.866034 -0.258797 0 -0.965932 -0.258797 0 -0.965932 -0.499985 0 -0.866034 -0.70713 0 -0.707083 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.70713 0 -0.707083 -0.866034 0 -0.499985 -0.70713 0 -0.707083 -0.70713 0 -0.707083 -0.866034 0 -0.499985 -0.965932 0 -0.258797 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.965932 0 -0.258797 -1 0 0 -0.965932 0 -0.258797 -0.965932 0 -0.258797 -1 0 0 -0.965932 0 0.258797 -1 0 0 -1 0 0 -0.965932 0 0.258797 -0.866034 0 0.499985 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.866034 0 0.499985 -0.70713 0 0.707083 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.70713 0 0.707083 -0.499985 0 0.866034 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.499985 0 0.866034 -0.258797 0 0.965932 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.258797 0 0.965932 -0.0654012 0 0.997859 -0.258797 0 0.965932 -0.258797 0 0.965932 -0.0654012 0 0.997859 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 -0.0654012 0 0.997859 -0.0654012 0 0.997859 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.965932 -0.258797 0 1 0 0 1 0 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0 -1 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0 -1 0 -0.258797 -0.965932 0 0 -1 0 0 -1 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.707083 -0.70713 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -1 0 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -1 0 0 -0.965932 0.258797 0 -1 0 0 -1 0 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.258797 0.965932 0 0 1 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0 1 0 0.258797 0.965932 0 0 1 0 0 1 0 0.258797 0.965932 0 0.499985 0.866034 0 0.258797 0.965932 0 0.258797 0.965932 0 0.499985 0.866034 0 0.707083 0.70713 0 0.499985 0.866034 0 0.499985 0.866034 0 0.707083 0.70713 0 0.866034 0.499985 0 0.707083 0.70713 0 0.707083 0.70713 0 0.866034 0.499985 0 0.965932 0.258797 0 0.866034 0.499985 0 0.866034 0.499985 0 0.965932 0.258797 0 1 0 0 0.965932 0.258797 0 0.965932 0.258797 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.258797 0.965932 0 -0.258797 0.965932 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0 1 0 0 1 0 0 1 0 0 1 0 0.258797 0.965932 0 0.258797 0.965932 0 0.258797 0.965932 0 0.258797 0.965932 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.707083 0.70713 0 0.707083 0.70713 0 0.707083 0.70713 0 0.707083 0.70713 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.965932 0.258797 0 0.965932 0.258797 0 0.965932 0.258797 0 0.965932 0.258797 0 1 0 0 1 0 0 1 0 0 1 0 0 0.965932 -0.258797 0 0.965932 -0.258797 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0.866034 -0.499985 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0 -1 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0 -1 0 -0.258797 -0.965932 0 0 -1 0 0 -1 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.707083 -0.70713 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -1 0 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -1 0 0 -0.965932 0.258797 0 -1 0 0 -1 0 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.258797 0.965932 0 0 1 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0 1 0 0.258797 0.965932 0 0 1 0 0 1 0 0.258797 0.965932 0 0.499985 0.866034 0 0.258797 0.965932 0 0.258797 0.965932 0 0.499985 0.866034 0 0.70713 0.707083 0 0.499985 0.866034 0 0.499985 0.866034 0 0.70713 0.707083 0 0.866034 0.499985 0 0.70713 0.707083 0 0.70713 0.707083 0 0.866034 0.499985 0 0.965932 0.258797 0 0.866034 0.499985 0 0.866034 0.499985 0 0.965932 0.258797 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.965932 -0.258797 0 1 0 0 1 0 0 0.965932 -0.258797 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 0.965932 0.258797 0 0.965932 0.258797 0 1 0 0 0.965932 0.258797 0 0.866034 0.499985 0 0.866034 0.499985 0 0.965932 0.258797 0 0.866034 0.499985 0 0.707083 0.70713 0 0.707083 0.70713 0 0.866034 0.499985 0 0.707083 0.70713 0 0.499985 0.866034 0 0.499985 0.866034 0 0.707083 0.70713 0 0.499985 0.866034 0 0.258797 0.965932 0 0.258797 0.965932 0 0.499985 0.866034 0 0.258797 0.965932 0 0 1 0 0 1 0 0.258797 0.965932 0 0 1 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0 1 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -1 0 0 -1 0 0 -0.965932 0.258797 0 -1 0 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -1 0 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 -0.707083 -0.70713 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.707083 -0.70713 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 0 -1 0 0 -1 0 -0.258797 -0.965932 0 0 -1 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0 -1 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.965932 -0.258797 0 1 0 0 1 0 0 0.965932 -0.258797 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 0.965932 0.258797 0 0.965932 0.258797 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.874074 0 0.485794 0.874074 0 0.485794 0.874074 0 0.485794 0.991449 0 0.130497 0.991449 0 0.130497 0.965932 0 0.258797 0.866034 0 0.499985 0.866034 0 0.499985 0.130528 0 0.991445 0.130528 0 0.991445 0.874074 0 0.485794 0.965932 0 0.258797 0.707083 0 0.70713 0.707083 0 0.70713 0.499985 0 0.866034 0.499985 0 0.866034 0.258797 0 0.965932 0.258797 0 0.965932 0 -1 0 0 1 0 -0.0842616 -0.965931 0.244697 -0.0842616 -0.965931 0.244697 -0.0212714 -0.99786 0.0618305 -0.0212714 -0.99786 0.0618305 -0.162755 -0.866046 0.472732 -0.162755 -0.866046 0.472732 -0.0842616 -0.965931 0.244697 -0.0842616 -0.965931 0.244697 -0.230201 -0.707123 0.668569 -0.230201 -0.707123 0.668569 -0.162755 -0.866046 0.472732 -0.162755 -0.866046 0.472732 -0.28193 -0.499985 0.818859 -0.28193 -0.499985 0.818859 -0.230201 -0.707123 0.668569 -0.230201 -0.707123 0.668569 -0.314463 -0.258797 0.913311 -0.314463 -0.258797 0.913311 -0.28193 -0.499985 0.818859 -0.28193 -0.499985 0.818859 -0.325541 0 0.945528 -0.325541 0 0.945528 -0.314463 -0.258797 0.913311 -0.314463 -0.258797 0.913311 -0.314463 0.258797 0.913311 -0.314463 0.258797 0.913311 -0.325541 0 0.945528 -0.325541 0 0.945528 -0.28193 0.499985 0.818859 -0.28193 0.499985 0.818859 -0.314463 0.258797 0.913311 -0.314463 0.258797 0.913311 -0.230201 0.707123 0.668569 -0.230201 0.707123 0.668569 -0.28193 0.499985 0.818859 -0.28193 0.499985 0.818859 -0.162755 0.866046 0.472732 -0.162755 0.866046 0.472732 -0.230201 0.707123 0.668569 -0.230201 0.707123 0.668569 -0.0842616 0.965931 0.244697 -0.0842616 0.965931 0.244697 -0.162755 0.866046 0.472732 -0.162755 0.866046 0.472732 -0.0212714 0.99786 0.0618305 -0.0212714 0.99786 0.0618305 -0.0842616 0.965931 0.244697 -0.0842616 0.965931 0.244697 -0.0212714 0.99786 0.0618305 0 1 0 -0.0212714 0.99786 0.0618305 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -0.0212714 -0.99786 0.0618305 0 -1 0 -0.0212714 -0.99786 0.0618305 + + + + + + + + + + + + + + +

0 0 1 1 2 2 3 3

+

4 4 5 5 6 6 7 7

+

8 8 9 9 10 10 11 11

+

12 12 13 13 14 14 15 15

+

16 16 17 17 18 18 19 19

+

20 20 21 21 22 22 23 23

+

24 24 25 25 26 26 27 27

+

28 28 29 29 30 30 31 31

+

32 32 33 33 34 34 35 35

+

36 36 37 37 38 38 39 39

+

40 40 41 41 42 42 43 43

+

44 44 45 45 46 46 47 47

+

48 48 49 49 50 50 51 51

+

52 52 53 53 54 54 55 55

+

56 56 57 57 58 58 59 59

+

60 60 61 61 62 62 63 63

+

64 64 65 65 66 66 67 67

+

68 68 69 69 70 70 71 71

+

72 72 73 73 74 74 75 75

+

76 76 77 77 78 78 79 79

+

80 80 81 81 82 82 83 83

+

84 84 85 85 86 86 87 87

+

88 88 89 89 90 90 91 91 92 92 93 93 94 94 95 95 96 96 97 97 98 98 99 99 100 100 101 101 102 102 103 103 104 104 105 105 106 106 107 107 108 108 109 109 110 110 111 111

+

112 112 113 113 114 114 115 115

+

116 116 117 117 118 118 119 119 120 120 121 121 122 122 123 123 124 124 125 125 126 126 127 127 128 128 129 129 130 130 131 131 132 132 133 133 134 134 135 135 136 136 137 137 138 138 139 139

+

140 140 141 141 142 142 143 143

+
+ + + +

144 144 145 145 146 146 147 147

+

148 148 149 149 150 150 151 151

+

152 152 153 153 154 154 155 155

+

156 156 157 157 158 158 159 159

+

160 160 161 161 162 162 163 163

+

164 164 165 165 166 166 167 167

+

168 168 169 169 170 170 171 171

+

172 172 173 173 174 174 175 175

+

176 176 177 177 178 178 179 179

+

180 180 181 181 182 182 183 183

+

184 184 185 185 186 186 187 187

+

188 188 189 189 190 190 191 191

+

192 192 193 193 194 194 195 195 196 196 197 197 198 198 199 199 200 200 201 201 202 202 203 203 204 204 205 205 206 206

+

207 207 208 208 209 209 210 210

+

211 211 212 212 213 213 214 214 215 215 216 216 217 217 218 218 219 219 220 220 221 221 222 222 223 223 224 224 225 225

+

226 226 227 227 228 228 229 229

+
+ + + +

230 230 231 231 232 232 233 233

+

234 234 235 235 236 236 237 237

+

238 238 239 239 240 240 241 241

+

242 242 243 243 244 244 245 245

+

246 246 247 247 248 248 249 249

+

250 250 251 251 252 252 253 253

+

254 254 255 255 256 256 257 257

+

258 258 259 259 260 260 261 261

+

262 262 263 263 264 264 265 265

+

266 266 267 267 268 268 269 269

+

270 270 271 271 272 272 273 273

+

274 274 275 275 276 276 277 277

+

278 278 279 279 280 280 281 281 282 282 283 283 284 284 285 285 286 286 287 287 288 288 289 289 290 290 291 291 292 292

+

293 293 294 294 295 295 296 296

+

297 297 298 298 299 299 300 300 301 301 302 302 303 303 304 304 305 305 306 306 307 307 308 308 309 309 310 310 311 311

+

312 312 313 313 314 314 315 315

+
+ + + +

316 316 317 317 318 318 319 319 320 320 321 321 322 322 323 323 324 324 325 325 326 326 327 327 328 328 329 329 330 330

+

331 331 332 332 333 333 334 334

+

335 335 336 336 337 337 338 338

+

339 339 340 340 341 341 342 342

+

343 343 344 344 345 345 346 346

+

347 347 348 348 349 349 350 350

+

351 351 352 352 353 353 354 354

+

355 355 356 356 357 357 358 358

+

359 359 360 360 361 361 362 362

+

363 363 364 364 365 365 366 366

+

367 367 368 368 369 369 370 370

+

371 371 372 372 373 373 374 374

+

375 375 376 376 377 377 378 378

+

379 379 380 380 381 381 382 382

+

383 383 384 384 385 385 386 386

+

387 387 388 388 389 389 390 390

+
+ + + +

391 391 392 392 393 393 394 394

+

395 395 396 396 397 397 398 398

+

399 399 400 400 401 401 402 402

+

403 403 404 404 405 405 406 406

+

407 407 408 408 409 409 410 410

+

411 411 412 412 413 413 414 414

+

415 415 416 416 417 417 418 418

+

419 419 420 420 421 421 422 422

+

423 423 424 424 425 425 426 426

+

427 427 428 428 429 429 430 430

+

431 431 432 432 433 433 434 434

+

435 435 436 436 437 437 438 438

+

439 439 440 440 441 441 442 442

+

443 443 444 444 445 445 446 446 447 447 448 448 449 449 450 450 451 451 452 452 453 453 454 454 455 455 456 456 457 457

+

458 458 459 459 460 460 461 461

+

462 462 463 463 464 464 465 465 466 466 467 467 468 468 469 469 470 470 471 471 472 472 473 473 474 474 475 475 476 476

+

477 477 478 478 479 479 480 480

+
+ + + +

481 481 482 482 483 483 484 484

+

485 485 486 486 487 487 488 488

+

489 489 490 490 491 491 492 492

+

493 493 494 494 495 495 496 496

+

497 497 498 498 499 499 500 500

+
+ + + +

501 501 502 502 503 503 504 504 505 505 506 506 507 507 508 508 509 509 510 510 511 511 512 512 513 513 514 514 515 515 516 516 517 517 518 518 519 519 520 520 521 521 522 522 523 523 524 524

+

525 525 526 526 527 527 528 528

+

529 529 530 530 531 531 532 532

+

533 533 534 534 535 535 536 536

+

537 537 538 538 539 539 540 540

+

541 541 542 542 543 543 544 544

+

545 545 546 546 547 547 548 548

+

549 549 550 550 551 551 552 552

+

553 553 554 554 555 555 556 556

+

557 557 558 558 559 559 560 560

+

561 561 562 562 563 563 564 564

+

565 565 566 566 567 567 568 568

+

569 569 570 570 571 571 572 572

+

573 573 574 574 575 575 576 576

+

577 577 578 578 579 579 580 580

+

581 581 582 582 583 583 584 584

+

585 585 586 586 587 587 588 588

+

589 589 590 590 591 591 592 592

+

593 593 594 594 595 595 596 596

+

597 597 598 598 599 599 600 600

+

601 601 602 602 603 603 604 604

+

605 605 606 606 607 607 608 608

+

609 609 610 610 611 611 612 612

+

613 613 614 614 615 615 616 616

+

617 617 618 618 619 619 620 620

+
+ + + +

621 621 622 622 623 623 624 624

+

625 625 626 626 627 627 628 628

+

629 629 630 630 631 631 632 632

+

633 633 634 634 635 635 636 636

+

637 637 638 638 639 639 640 640

+

641 641 642 642 643 643 644 644

+
+ + + +

645 645 646 646 647 647 648 648

+

649 649 650 650 651 651 652 652

+

653 653 654 654 655 655 656 656

+

657 657 658 658 659 659 660 660

+
+ + + +

661 661 662 662 663 663 664 664 665 665 666 666 667 667 668 668 669 669 670 670 671 671 672 672 673 673 674 674 675 675 676 676 677 677 678 678 679 679 680 680 681 681 682 682 683 683 684 684

+

685 685 686 686 687 687 688 688 689 689 690 690 691 691 692 692 693 693 694 694 695 695 696 696 697 697 698 698 699 699 700 700 701 701 702 702 703 703 704 704 705 705 706 706 707 707 708 708

+

709 709 710 710 711 711 712 712

+

713 713 714 714 715 715 716 716

+

717 717 718 718 719 719 720 720

+

721 721 722 722 723 723 724 724

+

725 725 726 726 727 727 728 728

+

729 729 730 730 731 731 732 732

+

733 733 734 734 735 735 736 736

+

737 737 738 738 739 739 740 740

+

741 741 742 742 743 743 744 744

+

745 745 746 746 747 747 748 748

+

749 749 750 750 751 751 752 752

+

753 753 754 754 755 755 756 756

+

757 757 758 758 759 759 760 760

+

761 761 762 762 763 763 764 764

+

765 765 766 766 767 767 768 768

+

769 769 770 770 771 771 772 772

+

773 773 774 774 775 775 776 776

+

777 777 778 778 779 779 780 780

+

781 781 782 782 783 783 784 784

+

785 785 786 786 787 787 788 788

+

789 789 790 790 791 791 792 792

+

793 793 794 794 795 795 796 796

+

797 797 798 798 799 799 800 800

+

801 801 802 802 803 803 804 804

+
+ + + +

805 805 806 806 807 807 808 808

+

809 809 810 810 811 811 812 812

+

813 813 814 814 815 815 816 816

+

817 817 818 818 819 819 820 820

+
+ + + +

821 821 822 822 823 823 824 824

+

825 825 826 826 827 827 828 828

+

829 829 830 830 831 831 832 832

+

833 833 834 834 835 835 836 836

+

837 837 838 838 839 839 840 840

+

841 841 842 842 843 843 844 844

+

845 845 846 846 847 847 848 848

+

849 849 850 850 851 851 852 852

+

853 853 854 854 855 855 856 856

+

857 857 858 858 859 859 860 860

+

861 861 862 862 863 863 864 864

+

865 865 866 866 867 867 868 868

+

869 869 870 870 871 871 872 872

+

873 873 874 874 875 875 876 876

+

877 877 878 878 879 879 880 880

+

881 881 882 882 883 883 884 884

+

885 885 886 886 887 887 888 888

+

889 889 890 890 891 891 892 892

+

893 893 894 894 895 895 896 896

+

897 897 898 898 899 899 900 900

+

901 901 902 902 903 903 904 904

+

905 905 906 906 907 907 908 908

+

909 909 910 910 911 911 912 912 913 913 914 914 915 915 916 916 917 917 918 918 919 919 920 920 921 921 922 922 923 923 924 924 925 925 926 926 927 927 928 928 929 929 930 930 931 931 932 932

+

933 933 934 934 935 935 936 936

+

937 937 938 938 939 939 940 940 941 941 942 942 943 943 944 944 945 945 946 946 947 947 948 948 949 949 950 950 951 951 952 952 953 953 954 954 955 955 956 956 957 957 958 958 959 959 960 960

+

961 961 962 962 963 963 964 964

+
+ + + +

965 965 966 966 967 967 968 968

+

969 969 970 970 971 971 972 972

+

973 973 974 974 975 975 976 976

+

977 977 978 978 979 979 980 980

+

981 981 982 982 983 983 984 984

+

985 985 986 986 987 987 988 988

+

989 989 990 990 991 991 992 992

+

993 993 994 994 995 995 996 996

+

997 997 998 998 999 999 1000 1000

+

1001 1001 1002 1002 1003 1003 1004 1004

+

1005 1005 1006 1006 1007 1007 1008 1008

+

1009 1009 1010 1010 1011 1011 1012 1012

+

1013 1013 1014 1014 1015 1015 1016 1016

+

1017 1017 1018 1018 1019 1019 1020 1020

+

1021 1021 1022 1022 1023 1023 1024 1024

+

1025 1025 1026 1026 1027 1027 1028 1028

+

1029 1029 1030 1030 1031 1031 1032 1032

+

1033 1033 1034 1034 1035 1035 1036 1036

+

1037 1037 1038 1038 1039 1039 1040 1040

+

1041 1041 1042 1042 1043 1043 1044 1044

+

1045 1045 1046 1046 1047 1047 1048 1048

+

1049 1049 1050 1050 1051 1051 1052 1052

+

1053 1053 1054 1054 1055 1055 1056 1056

+

1057 1057 1058 1058 1059 1059 1060 1060 1061 1061 1062 1062 1063 1063 1064 1064 1065 1065 1066 1066 1067 1067 1068 1068 1069 1069 1070 1070 1071 1071 1072 1072 1073 1073 1074 1074 1075 1075 1076 1076 1077 1077 1078 1078 1079 1079 1080 1080

+

1081 1081 1082 1082 1083 1083 1084 1084

+
+ + + +

1110 1113 1086 1113 1112 1113 1108 1113 1086 1113 1110 1113 1102 1113 1086 1113 1108 1113 1099 1113 1086 1113 1102 1113

+
+ + + +

1112 1113 1086 1113 1095 1113 1105 1113

+
+ + + +

1109 1114 1111 1114 1092 1114 1107 1114 1109 1114 1092 1114 1101 1114 1107 1114 1092 1114 1106 1114 1101 1114 1092 1114 1098 1114 1106 1114 1092 1114

+
+ + + +

1111 1114 1097 1114 1096 1114 1092 1114

+
+ + + +

1095 1095 1096 1096 1097 1097 1105 1105

+

1106 1106 1098 1098 1099 1099 1100 1100

+

1101 1101 1106 1106 1100 1100 1102 1102

+

1107 1107 1101 1101 1102 1102 1108 1108

+

1109 1109 1107 1107 1108 1108 1110 1110

+

1111 1111 1109 1109 1110 1110 1112 1112

+

1103 1103 1111 1111 1112 1112 1104 1104

+
+ + + +

1161 1163 1162 1164 1163 1165 1179 1181 1180 1182 1181 1183

+
+ + + +

1113 1115 1114 1116 1115 1117 1116 1118

+

1117 1119 1118 1120 1119 1121 1120 1122

+

1121 1123 1122 1124 1123 1125 1124 1126

+

1125 1127 1126 1128 1127 1129 1128 1130

+

1129 1131 1130 1132 1131 1133 1132 1134

+

1133 1135 1134 1136 1135 1137 1136 1138

+

1137 1139 1138 1140 1139 1141 1140 1142

+

1141 1143 1142 1144 1143 1145 1144 1146

+

1145 1147 1146 1148 1147 1149 1148 1150

+

1149 1151 1150 1152 1151 1153 1152 1154

+

1153 1155 1154 1156 1155 1157 1156 1158

+

1157 1159 1158 1160 1159 1161 1160 1162

+

1164 1166 1165 1167 1166 1168 1167 1169 1168 1170 1169 1171 1170 1172 1171 1173 1172 1174 1173 1175 1174 1176 1175 1177 1176 1178 1177 1179 1178 1180

+
+
+ + + CAT3DBagRep + + +
+ + + + 0 -11.1125 0 0 -10.7338 2.87613 -47.625 -10.7338 2.87613 -47.625 -11.1125 0 0 -10.7338 -2.87613 0 -11.1125 0 -47.625 -11.1125 0 -47.625 -10.7338 -2.87613 0 -9.62371 -5.55625 0 -10.7338 -2.87613 -47.625 -10.7338 -2.87613 -47.625 -9.62371 -5.55625 0 -7.85773 -7.85772 0 -9.62371 -5.55625 -47.625 -9.62371 -5.55625 -47.625 -7.85773 -7.85772 0 -5.55625 -9.62371 0 -7.85773 -7.85772 -47.625 -7.85773 -7.85772 -47.625 -5.55625 -9.62371 0 -2.87613 -10.7339 0 -5.55625 -9.62371 -47.625 -5.55625 -9.62371 -47.625 -2.87613 -10.7339 0 0 -11.1125 0 -2.87613 -10.7339 -47.625 -2.87613 -10.7339 -47.625 0 -11.1125 0 2.87613 -10.7339 0 0 -11.1125 -47.625 0 -11.1125 -47.625 2.87613 -10.7339 0 5.55625 -9.62371 0 2.87613 -10.7339 -47.625 2.87613 -10.7339 -47.625 5.55625 -9.62371 0 7.85772 -7.85773 0 5.55625 -9.62371 -47.625 5.55625 -9.62371 -47.625 7.85772 -7.85773 0 9.62371 -5.55625 0 7.85772 -7.85773 -47.625 7.85772 -7.85773 -47.625 9.62371 -5.55625 0 10.7338 -2.87613 0 9.62371 -5.55625 -47.625 9.62371 -5.55625 -47.625 10.7339 -2.87612 -47.625 10.7339 -2.87612 -47.625 9.62371 -5.55625 -47.625 7.85772 -7.85773 -47.625 5.55625 -9.62371 -47.625 2.87613 -10.7339 -47.625 0 -11.1125 -47.625 -2.87613 -10.7339 -47.625 -5.55625 -9.62371 -47.625 -7.85773 -7.85772 -47.625 -9.62371 -5.55625 -47.625 -10.7338 -2.87613 -47.625 -11.1125 0 -47.625 -10.7338 2.87613 -47.625 -9.62371 5.55625 -47.625 -7.85772 7.85772 -47.625 -5.55625 9.62371 -47.625 -2.87613 10.7338 -47.625 0 11.1125 -47.625 2.87613 10.7338 -47.625 5.55625 9.62371 -47.625 7.85772 7.85772 -47.625 9.62371 5.55625 -47.625 10.7338 2.87613 -47.625 11.1125 0 0 10.7338 2.87613 0 11.1125 0 -47.625 11.1125 0 -47.625 10.7338 2.87613 0 9.62371 5.55625 0 10.7338 2.87613 -47.625 10.7338 2.87613 -47.625 9.62371 5.55625 0 7.85773 7.85772 0 9.62371 5.55625 -47.625 9.62371 5.55625 -47.625 7.85772 7.85772 0 5.55625 9.62371 0 7.85773 7.85772 -47.625 7.85772 7.85772 -47.625 5.55625 9.62371 0 2.87613 10.7338 0 5.55625 9.62371 -47.625 5.55625 9.62371 -47.625 2.87613 10.7338 0 0 11.1125 0 2.87613 10.7338 -47.625 2.87613 10.7338 -47.625 0 11.1125 0 -2.87613 10.7338 0 0 11.1125 -47.625 0 11.1125 -47.625 -2.87613 10.7338 0 -5.55625 9.62371 0 -2.87613 10.7338 -47.625 -2.87613 10.7338 -47.625 -5.55625 9.62371 0 -7.85772 7.85773 0 -5.55625 9.62371 -47.625 -5.55625 9.62371 -47.625 -7.85772 7.85772 0 -9.62371 5.55625 0 -7.85772 7.85773 -47.625 -7.85772 7.85772 -47.625 -9.62371 5.55625 0 -10.7338 2.87613 0 -9.62371 5.55625 -47.625 -9.62371 5.55625 -47.625 -10.7338 2.87613 0 -9.62371 5.55625 0 -10.7338 2.87613 0 -11.1125 0 0 -10.7338 -2.87613 0 -9.62371 -5.55625 0 -7.85773 -7.85772 0 -5.55625 -9.62371 0 -2.87613 -10.7339 0 0 -11.1125 0 2.87613 -10.7339 0 5.55625 -9.62371 0 7.85772 -7.85773 0 9.62371 -5.55625 0 10.7338 -2.87613 0 11.1125 0 0 10.7338 2.87613 0 9.62371 5.55625 0 7.85773 7.85772 0 5.55625 9.62371 0 2.87613 10.7338 0 0 11.1125 0 -2.87613 10.7338 0 -5.55625 9.62371 0 -7.85772 7.85773 0 11.1125 0 0 10.7338 -2.87613 -47.625 10.7339 -2.87612 -47.625 11.1125 0 -50.8 6.13363 1.6435 -50.8 5.49926 3.175 -47.625 5.49926 3.175 -47.625 6.13363 1.6435 -50.8 5.49926 3.175 -50.8 4.49013 4.49013 -47.625 4.49013 4.49013 -47.625 5.49926 3.175 -50.8 4.49013 4.49013 -50.8 3.175 5.49926 -47.625 3.175 5.49926 -47.625 4.49013 4.49013 -50.8 6.13363 -1.6435 -50.8 6.35 0 -47.625 6.35 0 -47.625 6.13363 -1.6435 -50.8 5.49926 -3.175 -50.8 6.13363 -1.6435 -47.625 6.13363 -1.6435 -47.625 5.49926 -3.175 -50.8 4.49013 -4.49013 -50.8 5.49926 -3.175 -47.625 5.49926 -3.175 -47.625 4.49013 -4.49013 -50.8 3.175 -5.49926 -50.8 4.49013 -4.49013 -47.625 4.49013 -4.49013 -47.625 3.175 -5.49926 -50.8 1.6435 -6.13363 -50.8 3.175 -5.49926 -47.625 3.175 -5.49926 -47.625 1.6435 -6.13363 -50.8 0 -6.35 -50.8 1.6435 -6.13363 -47.625 1.6435 -6.13363 -47.625 0 -6.35 -50.8 -1.6435 -6.13363 -50.8 0 -6.35 -47.625 0 -6.35 -47.625 -1.6435 -6.13363 -50.8 -3.175 -5.49926 -50.8 -1.6435 -6.13363 -47.625 -1.6435 -6.13363 -47.625 -3.175 -5.49926 -50.8 -4.49013 -4.49013 -50.8 -3.175 -5.49926 -47.625 -3.175 -5.49926 -47.625 -4.49013 -4.49013 -50.8 -5.49926 -3.175 -50.8 -4.49013 -4.49013 -47.625 -4.49013 -4.49013 -47.625 -5.49926 -3.175 -50.8 -6.13363 -1.6435 -50.8 -5.49926 -3.175 -47.625 -5.49926 -3.175 -47.625 -6.13363 -1.6435 -50.8 -6.35 0 -50.8 -6.13363 -1.6435 -47.625 -6.13363 -1.6435 -47.625 -6.35 0 -50.8 -6.13363 1.6435 -50.8 -6.35 0 -47.625 -6.35 0 -47.625 -6.13363 1.6435 -50.8 -5.49926 3.175 -50.8 -6.13363 1.6435 -47.625 -6.13363 1.6435 -47.625 -5.49926 3.175 -50.8 -4.49013 4.49013 -50.8 -5.49926 3.175 -47.625 -5.49926 3.175 -47.625 -4.49013 4.49013 -50.8 -3.175 5.49926 -50.8 -4.49013 4.49013 -47.625 -4.49013 4.49013 -47.625 -3.175 5.49926 -50.8 -1.6435 6.13363 -50.8 -3.175 5.49926 -47.625 -3.175 5.49926 -47.625 -1.6435 6.13363 -50.8 0 6.35 -50.8 -1.6435 6.13363 -47.625 -1.6435 6.13363 -47.625 0 6.35 -50.8 1.6435 6.13363 -50.8 0 6.35 -47.625 0 6.35 -47.625 1.6435 6.13363 -50.8 3.175 5.49926 -50.8 1.6435 6.13363 -47.625 1.6435 6.13363 -47.625 3.175 5.49926 -50.8 1.6435 6.13363 -50.8 3.175 5.49926 -50.8 4.49013 4.49013 -50.8 5.49926 3.175 -50.8 6.13363 1.6435 -50.8 6.35 0 -50.8 6.13363 -1.6435 -50.8 5.49926 -3.175 -50.8 4.49013 -4.49013 -50.8 3.175 -5.49926 -50.8 1.6435 -6.13363 -50.8 0 -6.35 -50.8 -1.6435 -6.13363 -50.8 -3.175 -5.49926 -50.8 -4.49013 -4.49013 -50.8 -5.49926 -3.175 -50.8 -6.13363 -1.6435 -50.8 -6.35 0 -50.8 -6.13363 1.6435 -50.8 -5.49926 3.175 -50.8 -4.49013 4.49013 -50.8 -3.175 5.49926 -50.8 -1.6435 6.13363 -50.8 0 6.35 -50.8 6.35 0 -50.8 6.13363 1.6435 -47.625 6.13363 1.6435 -47.625 6.35 0 + + + + + + + + + + 0 -1 0 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -1 0 0 -0.965932 -0.258797 0 -1 0 0 -1 0 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.707083 -0.70713 0 -0.499985 -0.866034 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 0 -1 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 0 -1 0 0.258797 -0.965932 0 0 -1 0 0 -1 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.965932 -0.258797 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.965932 0.258797 0 1 0 0 1 0 0 0.965932 0.258797 0 0.866034 0.499985 0 0.965932 0.258797 0 0.965932 0.258797 0 0.866034 0.499985 0 0.70713 0.707083 0 0.866034 0.499985 0 0.866034 0.499985 0 0.70713 0.707083 0 0.499985 0.866034 0 0.70713 0.707083 0 0.70713 0.707083 0 0.499985 0.866034 0 0.258797 0.965932 0 0.499985 0.866034 0 0.499985 0.866034 0 0.258797 0.965932 0 0 1 0 0.258797 0.965932 0 0.258797 0.965932 0 0 1 0 -0.258797 0.965932 0 0 1 0 0 1 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.258797 0.965932 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.965932 0.258797 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 0.965932 -0.258797 0 0.965932 -0.258797 0 1 0 0 0.965932 0.258797 0 0.866034 0.499985 0 0.866034 0.499985 0 0.965932 0.258797 0 0.866034 0.499985 0 0.707083 0.70713 0 0.707083 0.70713 0 0.866034 0.499985 0 0.707083 0.70713 0 0.499985 0.866034 0 0.499985 0.866034 0 0.707083 0.70713 0 0.965932 -0.258797 0 1 0 0 1 0 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0 -1 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0 -1 0 -0.258797 -0.965932 0 0 -1 0 0 -1 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.707083 -0.70713 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -1 0 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -1 0 0 -0.965932 0.258797 0 -1 0 0 -1 0 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.258797 0.965932 0 0 1 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0 1 0 0.258797 0.965932 0 0 1 0 0 1 0 0.258797 0.965932 0 0.499985 0.866034 0 0.258797 0.965932 0 0.258797 0.965932 0 0.499985 0.866034 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 0.965932 0.258797 0 0.965932 0.258797 0 1 0 + + + + + + + + + + + + + + +

0 0 1 1 2 2 3 3

+

4 4 5 5 6 6 7 7

+

8 8 9 9 10 10 11 11

+

12 12 13 13 14 14 15 15

+

16 16 17 17 18 18 19 19

+

20 20 21 21 22 22 23 23

+

24 24 25 25 26 26 27 27

+

28 28 29 29 30 30 31 31

+

32 32 33 33 34 34 35 35

+

36 36 37 37 38 38 39 39

+

40 40 41 41 42 42 43 43

+

44 44 45 45 46 46 47 47

+

48 48 49 49 50 50 51 51 52 52 53 53 54 54 55 55 56 56 57 57 58 58 59 59 60 60 61 61 62 62 63 63 64 64 65 65 66 66 67 67 68 68 69 69 70 70 71 71

+

72 72 73 73 74 74 75 75

+

76 76 77 77 78 78 79 79

+

80 80 81 81 82 82 83 83

+

84 84 85 85 86 86 87 87

+

88 88 89 89 90 90 91 91

+

92 92 93 93 94 94 95 95

+

96 96 97 97 98 98 99 99

+

100 100 101 101 102 102 103 103

+

104 104 105 105 106 106 107 107

+

108 108 109 109 110 110 111 111

+

112 112 113 113 114 114 115 115

+

116 116 117 117 118 118 119 119 120 120 121 121 122 122 123 123 124 124 125 125 126 126 127 127 128 128 129 129 130 130 131 131 132 132 133 133 134 134 135 135 136 136 137 137 138 138 139 139

+

140 140 141 141 142 142 143 143

+
+ + + +

144 144 145 145 146 146 147 147

+

148 148 149 149 150 150 151 151

+

152 152 153 153 154 154 155 155

+

156 156 157 157 158 158 159 159

+

160 160 161 161 162 162 163 163

+

164 164 165 165 166 166 167 167

+

168 168 169 169 170 170 171 171

+

172 172 173 173 174 174 175 175

+

176 176 177 177 178 178 179 179

+

180 180 181 181 182 182 183 183

+

184 184 185 185 186 186 187 187

+

188 188 189 189 190 190 191 191

+

192 192 193 193 194 194 195 195

+

196 196 197 197 198 198 199 199

+

200 200 201 201 202 202 203 203

+

204 204 205 205 206 206 207 207

+

208 208 209 209 210 210 211 211

+

212 212 213 213 214 214 215 215

+

216 216 217 217 218 218 219 219

+

220 220 221 221 222 222 223 223

+

224 224 225 225 226 226 227 227

+

228 228 229 229 230 230 231 231

+

232 232 233 233 234 234 235 235

+

236 236 237 237 238 238 239 239 240 240 241 241 242 242 243 243 244 244 245 245 246 246 247 247 248 248 249 249 250 250 251 251 252 252 253 253 254 254 255 255 256 256 257 257 258 258 259 259

+

260 260 261 261 262 262 263 263

+
+
+ + + CAT3DBagRep + + +
+ + + + -11.1125 8.73125 0 -11.1125 8.43374 -2.25981 -25.4 3.06681 -0.82175 -25.4 3.175 0 0 8.73125 0 0 8.43374 -2.25981 -11.1125 8.43374 -2.25981 -11.1125 8.73125 0 -11.1125 7.56148 -4.36563 -11.1125 6.17392 -6.17393 -25.4 2.24506 -2.24506 -25.4 2.74963 -1.5875 -11.1125 6.17392 -6.17393 -11.1125 4.36562 -7.56148 -25.4 1.5875 -2.74963 -25.4 2.24506 -2.24506 -11.1125 4.36562 -7.56148 -11.1125 2.25981 -8.43374 -25.4 0.82175 -3.06681 -25.4 1.5875 -2.74963 -11.1125 2.25981 -8.43374 -11.1125 0 -8.73125 -25.4 0 -3.175 -25.4 0.82175 -3.06681 -11.1125 0 -8.73125 -11.1125 -2.25981 -8.43374 -25.4 -0.82175 -3.06681 -25.4 0 -3.175 -11.1125 -2.25981 -8.43374 -11.1125 -4.36562 -7.56148 -25.4 -1.5875 -2.74963 -25.4 -0.82175 -3.06681 -11.1125 -4.36562 -7.56148 -11.1125 -6.17393 -6.17392 -25.4 -2.24506 -2.24506 -25.4 -1.5875 -2.74963 -11.1125 -6.17393 -6.17392 -11.1125 -7.56148 -4.36562 -25.4 -2.74963 -1.5875 -25.4 -2.24506 -2.24506 -11.1125 -7.56148 -4.36562 -11.1125 -8.43374 -2.25981 -25.4 -3.06681 -0.821751 -25.4 -2.74963 -1.5875 -11.1125 -8.43374 -2.25981 -11.1125 -8.73125 0 -25.4 -3.175 0 -25.4 -3.06681 -0.821751 -11.1125 -8.73125 0 -11.1125 -8.43374 2.25981 -25.4 -3.06681 0.821751 -25.4 -3.175 0 -11.1125 -8.43374 2.25981 -11.1125 -7.56148 4.36562 -25.4 -2.74963 1.5875 -25.4 -3.06681 0.821751 -11.1125 -7.56148 4.36562 -11.1125 -6.17393 6.17393 -25.4 -2.24506 2.24506 -25.4 -2.74963 1.5875 -11.1125 -6.17393 6.17393 -11.1125 -4.36562 7.56148 -25.4 -1.5875 2.74963 -25.4 -2.24506 2.24506 -11.1125 -4.36562 7.56148 -11.1125 -2.25981 8.43374 -25.4 -0.82175 3.06681 -25.4 -1.5875 2.74963 -11.1125 -2.25981 8.43374 -11.1125 0 8.73125 -25.4 0 3.175 -25.4 -0.82175 3.06681 -11.1125 0 8.73125 -11.1125 2.25981 8.43374 -25.4 0.821751 3.06681 -25.4 0 3.175 -11.1125 2.25981 8.43374 -11.1125 4.36562 7.56148 -25.4 1.5875 2.74963 -25.4 0.821751 3.06681 -11.1125 4.36562 7.56148 -11.1125 6.17393 6.17393 -25.4 2.24506 2.24506 -25.4 1.5875 2.74963 -11.1125 6.17393 6.17393 -11.1125 7.56148 4.36562 -25.4 2.74963 1.5875 -25.4 2.24506 2.24506 0 6.17393 6.17393 0 7.56148 4.36562 -11.1125 7.56148 4.36562 -11.1125 6.17393 6.17393 0 4.36562 7.56148 0 6.17393 6.17393 -11.1125 6.17393 6.17393 -11.1125 4.36562 7.56148 0 2.25981 8.43374 0 4.36562 7.56148 -11.1125 4.36562 7.56148 -11.1125 2.25981 8.43374 0 0 8.73125 0 2.25981 8.43374 -11.1125 2.25981 8.43374 -11.1125 0 8.73125 0 -2.25981 8.43374 0 0 8.73125 -11.1125 0 8.73125 -11.1125 -2.25981 8.43374 0 -4.36562 7.56148 0 -2.25981 8.43374 -11.1125 -2.25981 8.43374 -11.1125 -4.36562 7.56148 0 -6.17393 6.17393 0 -4.36562 7.56148 -11.1125 -4.36562 7.56148 -11.1125 -6.17393 6.17393 0 -7.56148 4.36562 0 -6.17393 6.17393 -11.1125 -6.17393 6.17393 -11.1125 -7.56148 4.36562 0 -8.43374 2.25981 0 -7.56148 4.36562 -11.1125 -7.56148 4.36562 -11.1125 -8.43374 2.25981 0 -8.73125 0 0 -8.43374 2.25981 -11.1125 -8.43374 2.25981 -11.1125 -8.73125 0 0 -8.43374 -2.25981 0 -8.73125 0 -11.1125 -8.73125 0 -11.1125 -8.43374 -2.25981 0 -7.56148 -4.36562 0 -8.43374 -2.25981 -11.1125 -8.43374 -2.25981 -11.1125 -7.56148 -4.36562 0 -6.17393 -6.17392 0 -7.56148 -4.36562 -11.1125 -7.56148 -4.36562 -11.1125 -6.17393 -6.17392 0 -4.36562 -7.56148 0 -6.17393 -6.17392 -11.1125 -6.17393 -6.17392 -11.1125 -4.36562 -7.56148 0 -2.25981 -8.43374 0 -4.36562 -7.56148 -11.1125 -4.36562 -7.56148 -11.1125 -2.25981 -8.43374 0 0 -8.73125 0 -2.25981 -8.43374 -11.1125 -2.25981 -8.43374 -11.1125 0 -8.73125 0 2.25981 -8.43374 0 0 -8.73125 -11.1125 0 -8.73125 -11.1125 2.25981 -8.43374 0 4.36562 -7.56148 0 2.25981 -8.43374 -11.1125 2.25981 -8.43374 -11.1125 4.36562 -7.56148 0 6.17392 -6.17393 0 4.36562 -7.56148 -11.1125 4.36562 -7.56148 -11.1125 6.17392 -6.17393 0 7.56148 -4.36563 0 6.17392 -6.17393 -11.1125 6.17392 -6.17393 -11.1125 7.56148 -4.36563 0 8.43374 -2.25981 0 7.56148 -4.36563 -11.1125 7.56148 -4.36563 -11.1125 8.43374 -2.25981 -11.1125 8.43374 -2.25981 -11.1125 7.56148 -4.36563 -25.4 2.74963 -1.5875 -25.4 3.06681 -0.82175 -25.4 3.06681 -0.82175 -25.4 2.74963 -1.5875 -25.4 2.24506 -2.24506 -25.4 1.5875 -2.74963 -25.4 0.82175 -3.06681 -25.4 0 -3.175 -25.4 -0.82175 -3.06681 -25.4 -1.5875 -2.74963 -25.4 -2.24506 -2.24506 -25.4 -2.74963 -1.5875 -25.4 -3.06681 -0.821751 -25.4 -3.175 0 -25.4 -3.06681 0.821751 -25.4 -2.74963 1.5875 -25.4 -2.24506 2.24506 -25.4 -1.5875 2.74963 -25.4 -0.82175 3.06681 -25.4 0 3.175 -25.4 0.821751 3.06681 -25.4 1.5875 2.74963 -25.4 2.24506 2.24506 -25.4 2.74963 1.5875 -25.4 3.06681 0.82175 -25.4 3.175 0 -11.1125 7.56148 4.36562 -11.1125 8.43374 2.25981 -25.4 3.06681 0.82175 -25.4 2.74963 1.5875 0 7.56148 4.36562 0 8.43374 2.25981 -11.1125 8.43374 2.25981 -11.1125 7.56148 4.36562 0 8.73125 0 0 8.43374 2.25981 0 7.56148 4.36562 0 6.17393 6.17393 0 4.36562 7.56148 0 2.25981 8.43374 0 0 8.73125 0 -2.25981 8.43374 0 -4.36562 7.56148 0 -6.17393 6.17393 0 -7.56148 4.36562 0 -8.43374 2.25981 0 -8.73125 0 0 -8.43374 -2.25981 0 -7.56148 -4.36562 0 -6.17393 -6.17392 0 -4.36562 -7.56148 0 -2.25981 -8.43374 0 0 -8.73125 0 2.25981 -8.43374 0 4.36562 -7.56148 0 6.17392 -6.17393 0 7.56148 -4.36563 0 8.43374 -2.25981 0 8.43374 2.25981 0 8.73125 0 -11.1125 8.73125 0 -11.1125 8.43374 2.25981 -11.1125 8.43374 2.25981 -11.1125 8.73125 0 -25.4 3.175 0 -25.4 3.06681 0.82175 + + + + + + + + + + -0.184484 0.982835 0 -0.184484 0.949347 -0.254372 -0.362438 0.900251 -0.241218 -0.362438 0.932008 0 0 1 0 0 0.965932 -0.258797 -0.184484 0.949347 -0.254372 -0.184484 0.982835 0 -0.184484 0.851165 -0.491409 -0.184484 0.694968 -0.694972 -0.362438 0.659017 -0.659042 -0.362438 0.807152 -0.465987 -0.184484 0.694968 -0.694972 -0.184484 0.491409 -0.851165 -0.362438 0.465987 -0.807152 -0.362438 0.659017 -0.659042 -0.184484 0.491409 -0.851165 -0.184484 0.254372 -0.949347 -0.362438 0.241218 -0.900251 -0.362438 0.465987 -0.807152 -0.184484 0.254372 -0.949347 -0.184484 0 -0.982835 -0.362438 0 -0.932008 -0.362438 0.241218 -0.900251 -0.184484 0 -0.982835 -0.184484 -0.254372 -0.949347 -0.362438 -0.241218 -0.900251 -0.362438 0 -0.932008 -0.184484 -0.254372 -0.949347 -0.184484 -0.491409 -0.851165 -0.362438 -0.465987 -0.807152 -0.362438 -0.241218 -0.900251 -0.184484 -0.491409 -0.851165 -0.184484 -0.694972 -0.694968 -0.362438 -0.659042 -0.659017 -0.362438 -0.465987 -0.807152 -0.184484 -0.694968 -0.694972 -0.184484 -0.851165 -0.491409 -0.362438 -0.807152 -0.465987 -0.362438 -0.659042 -0.659017 -0.184484 -0.851165 -0.491409 -0.184484 -0.949347 -0.254372 -0.362438 -0.900251 -0.241218 -0.362438 -0.807152 -0.465987 -0.184484 -0.949347 -0.254372 -0.184484 -0.982835 0 -0.362438 -0.932008 0 -0.362438 -0.900251 -0.241218 -0.184484 -0.982835 0 -0.184484 -0.949347 0.254372 -0.362438 -0.900251 0.241218 -0.362438 -0.932008 0 -0.184484 -0.949347 0.254372 -0.184484 -0.851165 0.491409 -0.362438 -0.807152 0.465987 -0.362438 -0.900251 0.241218 -0.184484 -0.851165 0.491409 -0.184484 -0.694972 0.694968 -0.362438 -0.659017 0.659042 -0.362438 -0.807152 0.465987 -0.184484 -0.694968 0.694972 -0.184484 -0.491409 0.851165 -0.362438 -0.465987 0.807152 -0.362438 -0.659017 0.659042 -0.184484 -0.491409 0.851165 -0.184484 -0.254372 0.949347 -0.362438 -0.241218 0.900251 -0.362438 -0.465987 0.807152 -0.184484 -0.254372 0.949347 -0.184484 0 0.982835 -0.362438 0 0.932008 -0.362438 -0.241218 0.900251 -0.184484 0 0.982835 -0.184484 0.254372 0.949347 -0.362438 0.241218 0.900251 -0.362438 0 0.932008 -0.184484 0.254372 0.949347 -0.184484 0.491409 0.851165 -0.362438 0.465987 0.807152 -0.362438 0.241218 0.900251 -0.184484 0.491409 0.851165 -0.184484 0.694968 0.694972 -0.362438 0.659017 0.659042 -0.362438 0.465987 0.807152 -0.184484 0.694968 0.694972 -0.184484 0.851165 0.491409 -0.362438 0.807152 0.465987 -0.362438 0.659017 0.659042 0 0.707083 0.70713 0 0.866034 0.499985 -0.184484 0.851165 0.491409 -0.184484 0.694968 0.694972 0 0.499985 0.866034 0 0.707083 0.70713 -0.184484 0.694968 0.694972 -0.184484 0.491409 0.851165 0 0.258797 0.965932 0 0.499985 0.866034 -0.184484 0.491409 0.851165 -0.184484 0.254372 0.949347 0 0 1 0 0.258797 0.965932 -0.184484 0.254372 0.949347 -0.184484 0 0.982835 0 -0.258797 0.965932 0 0 1 -0.184484 0 0.982835 -0.184484 -0.254372 0.949347 0 -0.499985 0.866034 0 -0.258797 0.965932 -0.184484 -0.254372 0.949347 -0.184484 -0.491409 0.851165 0 -0.707083 0.70713 0 -0.499985 0.866034 -0.184484 -0.491409 0.851165 -0.184484 -0.694968 0.694972 0 -0.866034 0.499985 0 -0.707083 0.70713 -0.184484 -0.694968 0.694972 -0.184484 -0.851165 0.491409 0 -0.965932 0.258797 0 -0.866034 0.499985 -0.184484 -0.851165 0.491409 -0.184484 -0.949347 0.254372 0 -1 0 0 -0.965932 0.258797 -0.184484 -0.949347 0.254372 -0.184484 -0.982835 0 0 -0.965932 -0.258797 0 -1 0 -0.184484 -0.982835 0 -0.184484 -0.949347 -0.254372 0 -0.866034 -0.499985 0 -0.965932 -0.258797 -0.184484 -0.949347 -0.254372 -0.184484 -0.851165 -0.491409 0 -0.70713 -0.707083 0 -0.866034 -0.499985 -0.184484 -0.851165 -0.491409 -0.184484 -0.694972 -0.694968 0 -0.499985 -0.866034 0 -0.70713 -0.707083 -0.184484 -0.694972 -0.694968 -0.184484 -0.491409 -0.851165 0 -0.258797 -0.965932 0 -0.499985 -0.866034 -0.184484 -0.491409 -0.851165 -0.184484 -0.254372 -0.949347 0 0 -1 0 -0.258797 -0.965932 -0.184484 -0.254372 -0.949347 -0.184484 0 -0.982835 0 0.258797 -0.965932 0 0 -1 -0.184484 0 -0.982835 -0.184484 0.254372 -0.949347 0 0.499985 -0.866034 0 0.258797 -0.965932 -0.184484 0.254372 -0.949347 -0.184484 0.491409 -0.851165 0 0.707083 -0.70713 0 0.499985 -0.866034 -0.184484 0.491409 -0.851165 -0.184484 0.694968 -0.694972 0 0.866034 -0.499985 0 0.707083 -0.70713 -0.184484 0.694968 -0.694972 -0.184484 0.851165 -0.491409 0 0.965932 -0.258797 0 0.866034 -0.499985 -0.184484 0.851165 -0.491409 -0.184484 0.949347 -0.254372 -0.184484 0.949347 -0.254372 -0.184484 0.851165 -0.491409 -0.362438 0.807152 -0.465987 -0.362438 0.900251 -0.241218 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.184484 0.851165 0.491409 -0.184484 0.949347 0.254372 -0.362438 0.900251 0.241218 -0.362438 0.807152 0.465987 0 0.866034 0.499985 0 0.965932 0.258797 -0.184484 0.949347 0.254372 -0.184484 0.851165 0.491409 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.965932 0.258797 0 1 0 -0.184484 0.982835 0 -0.184484 0.949347 0.254372 -0.184484 0.949347 0.254372 -0.184484 0.982835 0 -0.362438 0.932008 0 -0.362438 0.900251 0.241218 + + + + + + + + + + + + + + +

0 0 1 1 2 2 3 3

+

4 4 5 5 6 6 7 7

+

8 8 9 9 10 10 11 11

+

12 12 13 13 14 14 15 15

+

16 16 17 17 18 18 19 19

+

20 20 21 21 22 22 23 23

+

24 24 25 25 26 26 27 27

+

28 28 29 29 30 30 31 31

+

32 32 33 33 34 34 35 35

+

36 36 37 37 38 38 39 39

+

40 40 41 41 42 42 43 43

+

44 44 45 45 46 46 47 47

+

48 48 49 49 50 50 51 51

+

52 52 53 53 54 54 55 55

+

56 56 57 57 58 58 59 59

+

60 60 61 61 62 62 63 63

+

64 64 65 65 66 66 67 67

+

68 68 69 69 70 70 71 71

+

72 72 73 73 74 74 75 75

+

76 76 77 77 78 78 79 79

+

80 80 81 81 82 82 83 83

+

84 84 85 85 86 86 87 87

+

88 88 89 89 90 90 91 91

+

92 92 93 93 94 94 95 95

+

96 96 97 97 98 98 99 99

+

100 100 101 101 102 102 103 103

+

104 104 105 105 106 106 107 107

+

108 108 109 109 110 110 111 111

+

112 112 113 113 114 114 115 115

+

116 116 117 117 118 118 119 119

+

120 120 121 121 122 122 123 123

+

124 124 125 125 126 126 127 127

+

128 128 129 129 130 130 131 131

+

132 132 133 133 134 134 135 135

+

136 136 137 137 138 138 139 139

+

140 140 141 141 142 142 143 143

+

144 144 145 145 146 146 147 147

+

148 148 149 149 150 150 151 151

+

152 152 153 153 154 154 155 155

+

156 156 157 157 158 158 159 159

+

160 160 161 161 162 162 163 163

+

164 164 165 165 166 166 167 167

+

168 168 169 169 170 170 171 171

+

172 172 173 173 174 174 175 175

+

176 176 177 177 178 178 179 179 180 180 181 181 182 182 183 183 184 184 185 185 186 186 187 187 188 188 189 189 190 190 191 191 192 192 193 193 194 194 195 195 196 196 197 197 198 198 199 199

+

200 200 201 201 202 202 203 203

+

204 204 205 205 206 206 207 207

+

208 208 209 209 210 210 211 211 212 212 213 213 214 214 215 215 216 216 217 217 218 218 219 219 220 220 221 221 222 222 223 223 224 224 225 225 226 226 227 227 228 228 229 229 230 230 231 231

+

232 232 233 233 234 234 235 235

+

236 236 237 237 238 238 239 239

+
+
+ + + CAT3DBagRep + + +
+ + + + -16.002 19.05 31.75 57.15 19.05 31.75 57.15 19.05 6.35 -16.002 19.05 6.35 53.74 -19.05 57.6516 57.15 -19.05 31.75 57.15 19.05 31.75 53.74 19.05 57.6516 -16.002 -19.05 31.75 -16.8675 -19.05 38.324 -16.002 -19.05 6.35 57.15 -19.05 6.35 -16.002 -32.1402 8.61195 -16.002 -33.274 0 57.15 -33.274 0 57.15 -32.1402 8.61195 -16.002 -28.8161 16.637 -16.002 -32.1402 8.61195 57.15 -32.1402 8.61195 57.15 -28.8161 16.637 -16.002 -23.5283 23.5283 -16.002 -28.8161 16.637 57.15 -28.8161 16.637 57.15 -23.5283 23.5283 -16.002 -16.637 28.8161 -16.002 -23.5283 23.5283 57.15 -23.5283 23.5283 57.15 -16.637 28.8161 -16.002 -8.61194 32.1402 -16.002 -16.637 28.8161 57.15 -16.637 28.8161 57.15 -8.61194 32.1402 -16.002 0 33.274 -16.002 -8.61194 32.1402 57.15 -8.61194 32.1402 57.15 0 33.274 -16.002 8.61195 32.1402 -16.002 0 33.274 57.15 0 33.274 57.15 8.61195 32.1402 -16.002 16.637 28.8161 -16.002 8.61195 32.1402 57.15 8.61195 32.1402 57.15 16.637 28.8161 -16.002 23.5283 23.5283 -16.002 16.637 28.8161 57.15 16.637 28.8161 57.15 23.5283 23.5283 -16.002 28.8161 16.637 -16.002 23.5283 23.5283 57.15 23.5283 23.5283 57.15 28.8161 16.637 57.15 32.1402 8.61195 57.15 28.8161 16.637 57.15 23.5283 23.5283 57.15 16.637 28.8161 57.15 8.61195 32.1402 57.15 0 33.274 57.15 -8.61194 32.1402 57.15 -16.637 28.8161 57.15 -23.5283 23.5283 57.15 -28.8161 16.637 57.15 -32.1402 8.61195 57.15 -33.274 0 57.15 -32.1402 -8.61195 57.15 -28.8161 -16.637 57.15 -23.5283 -23.5283 57.15 -16.637 -28.8161 57.15 -8.61194 -32.1402 57.15 0 -33.274 57.15 8.61194 -32.1402 57.15 16.637 -28.8161 57.15 23.5283 -23.5283 57.15 28.8161 -16.637 57.15 32.1402 -8.61194 57.15 33.274 0 57.15 -32.1402 -8.61195 -16.002 -32.1402 -8.61195 -16.002 -31.6455 -10.2822 57.15 -31.6455 -10.2822 -16.002 -33.274 0 -16.002 -32.1402 -8.61195 57.15 -32.1402 -8.61195 57.15 -33.274 0 -16.002 33.274 0 -16.002 32.1402 -8.61194 -16.002 28.8161 -16.637 -16.002 23.5283 -23.5283 -16.002 16.637 -28.8161 -16.002 8.61194 -32.1402 -16.002 0 -33.274 -16.002 -8.61194 -32.1402 -16.002 -16.637 -28.8161 -16.002 -23.5283 -23.5283 -16.002 -28.8161 -16.637 -16.002 -32.1402 -8.61195 -16.002 -33.274 0 -16.002 -32.1402 8.61195 -16.002 -28.8161 16.637 -16.002 -23.5283 23.5283 -16.002 -16.637 28.8161 -16.002 -8.61194 32.1402 -16.002 0 33.274 -16.002 8.61195 32.1402 -16.002 16.637 28.8161 -16.002 23.5283 23.5283 -16.002 28.8161 16.637 -16.002 32.1402 8.61195 -16.002 32.1402 8.61195 -16.002 28.8161 16.637 57.15 28.8161 16.637 57.15 32.1402 8.61195 -74.3996 -15.748 271.399 -117.348 -15.748 271.399 -117.348 -15.748 207.899 -74.3996 -15.748 207.899 -117.348 -15.748 271.399 -117.348 15.748 271.399 -117.348 15.748 207.899 -117.348 -15.748 207.899 -74.3996 -15.748 271.399 -74.3996 15.748 271.399 -117.348 15.748 271.399 -117.348 -15.748 271.399 -117.348 15.748 227.922 -117.348 15.748 271.399 -74.3996 15.748 271.399 -74.3996 15.748 227.922 -47.498 15.748 227.922 -47.498 15.748 207.899 -117.348 15.748 207.899 -117.348 15.748 227.922 -47.498 15.748 227.922 -47.498 -15.748 227.922 -47.498 -15.748 207.899 -47.498 15.748 207.899 -47.498 -15.748 227.922 -74.3996 -15.748 227.922 -74.3996 -15.748 207.899 -47.498 -15.748 207.899 -74.3996 15.748 227.922 -74.3996 -15.748 227.922 -47.498 -15.748 227.922 -47.498 15.748 227.922 -74.3996 -15.748 271.399 -74.3996 -15.748 227.922 -74.3996 15.748 227.922 -74.3996 15.748 271.399 57.15 -31.6455 -10.2822 -16.002 -31.6455 -10.2822 -16.002 -17.9096 -52.5567 57.15 -17.9096 -52.5567 57.15 31.6455 10.2822 57.15 -31.6455 -10.2822 57.15 -17.9096 -52.5567 57.15 45.3813 -31.9922 -16.002 31.6455 10.2822 57.15 31.6455 10.2822 57.15 45.3813 -31.9922 -16.002 45.3813 -31.9922 -16.002 -31.6455 -10.2822 -16.002 31.6455 10.2822 -16.002 45.3813 -31.9922 -16.002 -17.9096 -52.5567 -16.002 -17.9096 -52.5567 -16.002 45.3813 -31.9922 57.15 45.3813 -31.9922 57.15 -17.9096 -52.5567 57.15 19.05 31.75 57.15 -19.05 31.75 57.15 -19.05 6.35 57.15 19.05 6.35 -16.8675 -19.05 38.324 -15.3923 -19.05 198.084 -15.3923 19.05 198.084 -16.8675 -19.05 38.324 0.226875 -19.05 177.728 53.74 -19.05 57.6516 -15.3923 19.05 198.084 0.226875 19.05 177.728 -16.8675 -19.05 38.324 -16.002 19.05 31.75 53.74 19.05 57.6516 57.15 19.05 31.75 -16.002 19.05 31.75 0.226875 -19.05 177.728 53.74 -19.05 57.6516 53.74 19.05 57.6516 0.226875 19.05 177.728 -221.713 -19.05 -82.826 -299.456 -19.05 -77.9519 -235.175 -19.05 -127.276 -86.5509 -19.05 137.184 -221.713 19.05 -82.826 -217.424 5.75225 -126.243 -282.232 19.05 -107.785 -75.1644 19.05 130.609 -75.1644 19.05 130.609 -86.5509 -19.05 137.184 -212.006 -19.05 130.609 -212.006 19.05 130.609 -240.851 -19.05 -71.777 -243.058 19.05 -66.4474 -221.713 19.05 -82.826 -221.713 -19.05 -82.826 -15.3923 -19.05 198.084 -15.3923 19.05 198.084 -59.572 19.05 223.591 -59.572 -19.05 223.591 -217.124 19.05 223.054 -244.691 -19.05 211.636 -286.527 19.05 169.799 -297.946 -19.05 142.232 -282.232 19.05 -107.785 -299.456 -19.05 -77.9519 -217.424 5.75225 -126.243 -235.175 -19.05 -127.276 -217.424 -22.225 -104.775 -217.424 5.75225 -126.243 -217.424 22.225 -104.775 -221.713 -19.05 -82.826 -221.713 19.05 -82.826 -217.424 22.225 -104.775 -221.713 19.05 -82.826 -235.175 -19.05 -127.276 -221.713 -19.05 -82.826 -235.175 -19.05 -127.276 -217.424 -22.225 -104.775 -240.851 -19.05 -71.777 -212.006 -19.05 130.609 -297.946 -19.05 142.232 -244.691 -19.05 211.636 -59.572 -19.05 223.591 -243.058 19.05 -66.4474 -286.527 19.05 169.799 -212.006 19.05 130.609 -217.124 19.05 223.054 -59.572 19.05 223.591 -217.424 -21.4677 -99.0228 -217.424 -19.2474 -93.6625 -221.713 -19.05 -82.826 -217.424 -19.2474 -93.6625 -217.424 -15.7154 -89.0596 -217.424 -11.1125 -85.5276 -217.424 -5.75225 -83.3073 -217.424 -5.75225 -83.3073 -217.424 0 -82.55 -221.713 -19.05 -82.826 -217.424 0 -82.55 -221.713 19.05 -82.826 -217.424 5.75225 -83.3073 -217.424 5.75225 -83.3073 -217.424 11.1125 -85.5276 -221.713 19.05 -82.826 -221.713 19.05 -82.826 -217.424 15.7154 -89.0596 -217.424 19.2474 -93.6625 -217.424 19.2474 -93.6625 -217.424 21.4677 -99.0227 -217.424 21.4677 -99.0227 -235.175 19.05 -127.276 -217.424 19.2474 -115.888 -235.175 19.05 -127.276 -217.424 15.7154 -120.49 -235.175 19.05 -127.276 -217.424 11.1125 -124.022 -235.175 19.05 -127.276 -235.175 19.05 -127.276 -217.424 0 -127 -235.175 -19.05 -127.276 -235.175 19.05 -127.276 -217.424 -5.75225 -126.243 -235.175 -19.05 -127.276 -217.424 -11.1125 -124.022 -217.424 -15.7154 -120.49 -217.424 -22.225 -104.775 -217.424 -21.4677 -99.0228 -235.175 -19.05 -127.276 -217.424 -19.2474 -115.888 -235.175 -19.05 -127.276 -16.002 -19.05 31.75 -16.002 19.05 6.35 -16.002 -19.05 6.35 -16.8675 19.05 38.324 -19.405 19.05 44.45 -19.405 -19.05 44.45 -71.1278 19.05 125.349 -71.1299 -19.05 125.352 -75.1644 -19.05 130.609 -80.4249 19.05 134.646 -80.4249 -19.05 134.646 -86.5509 19.05 137.184 -93.1249 19.05 138.049 -93.1248 -19.05 138.049 -194.046 -19.05 138.049 -194.046 19.05 138.049 -200.62 19.05 137.184 -200.62 -19.05 137.184 -206.746 19.05 134.646 -206.746 -19.05 134.646 -216.043 19.05 125.349 -216.043 -19.05 125.349 -218.525 19.05 119.358 -218.525 -19.05 119.358 -243.811 -19.05 -60.728 -243.811 19.05 -60.728 -243.058 -19.05 -66.4474 -240.851 19.05 -71.777 -237.339 -19.05 -76.3537 -237.339 19.05 -76.3537 -232.762 -19.05 -79.8655 -232.762 19.05 -79.8655 -227.433 -19.05 -82.0731 -227.433 19.05 -82.0731 -221.713 19.05 -82.826 0.269409 -19.05 177.673 0.269409 19.05 177.673 -35.8031 -19.05 213.746 -35.8031 19.05 213.746 -85.0792 -19.05 226.949 -85.0791 19.05 226.949 -187.541 19.05 226.949 -187.541 -19.05 226.949 -217.124 -19.05 223.054 -244.691 19.05 211.636 -268.363 -19.05 193.471 -268.363 19.05 193.471 -286.527 -19.05 169.799 -297.946 19.05 142.232 -301.752 -19.05 113.323 -301.752 19.05 113.323 -301.752 19.05 -60.5099 -301.752 -19.05 -60.5099 -299.456 19.05 -77.9519 -292.808 19.05 -94.002 -292.808 -19.05 -94.002 -282.232 -19.05 -107.785 -268.449 19.05 -118.36 -268.449 -19.05 -118.36 -252.399 19.05 -125.008 -252.399 -19.05 -125.008 -235.175 19.05 -127.276 -217.424 -21.4677 -110.527 -217.424 -19.2474 -115.888 -217.424 -15.7154 -120.49 -217.424 -11.1125 -124.022 -217.424 -5.75225 -126.243 -217.424 0 -127 -217.424 11.1125 -124.022 -217.424 15.7154 -120.49 -217.424 19.2474 -115.888 -217.424 21.4677 -110.527 -217.424 21.4677 -99.0227 -217.424 19.2474 -93.6625 -217.424 5.75225 -83.3073 -217.424 0 -82.55 -217.424 -5.75225 -83.3073 -217.424 -19.2474 -93.6625 -217.424 -21.4677 -99.0228 43.7424 -19.05 81.788 43.7424 19.05 81.788 -211.074 -15.178 -113.538 -211.074 -16.9288 -109.311 -217.424 -16.9288 -109.311 -217.424 -15.178 -113.538 -211.074 -12.3928 -117.168 -211.074 -15.178 -113.538 -217.424 -15.178 -113.538 -217.424 -12.3928 -117.168 -211.074 -8.763 -119.953 -211.074 -12.3928 -117.168 -217.424 -12.3928 -117.168 -217.424 -8.763 -119.953 -211.074 -4.53606 -121.704 -211.074 -8.763 -119.953 -217.424 -8.763 -119.953 -217.424 -4.53606 -121.704 -211.074 0 -122.301 -211.074 -4.53606 -121.704 -217.424 -4.53606 -121.704 -217.424 0 -122.301 -211.074 4.53606 -121.704 -211.074 0 -122.301 -217.424 0 -122.301 -217.424 4.53606 -121.704 -211.074 8.763 -119.953 -211.074 4.53606 -121.704 -217.424 4.53606 -121.704 -217.424 8.763 -119.953 -211.074 12.3928 -117.168 -211.074 8.763 -119.953 -217.424 8.763 -119.953 -217.424 12.3928 -117.168 -211.074 15.178 -113.538 -211.074 12.3928 -117.168 -217.424 12.3928 -117.168 -217.424 15.178 -113.538 -211.074 16.9288 -109.311 -211.074 15.178 -113.538 -217.424 15.178 -113.538 -217.424 16.9288 -109.311 -211.074 17.526 -104.775 -211.074 16.9288 -109.311 -217.424 16.9288 -109.311 -217.424 17.526 -104.775 -211.074 16.9288 -100.239 -211.074 17.526 -104.775 -217.424 17.526 -104.775 -217.424 16.9288 -100.239 -211.074 15.178 -96.012 -211.074 16.9288 -100.239 -217.424 16.9288 -100.239 -217.424 15.178 -96.012 -211.074 12.3928 -92.3822 -211.074 15.178 -96.012 -217.424 15.178 -96.012 -217.424 12.3928 -92.3822 -211.074 8.763 -89.597 -211.074 12.3928 -92.3822 -217.424 12.3928 -92.3822 -217.424 8.763 -89.597 -211.074 4.53606 -87.8462 -211.074 8.763 -89.597 -217.424 8.763 -89.597 -217.424 4.53606 -87.8462 -211.074 0 -87.249 -211.074 4.53606 -87.8462 -217.424 4.53606 -87.8462 -217.424 0 -87.249 -211.074 -4.53606 -87.8462 -211.074 0 -87.249 -217.424 0 -87.249 -217.424 -4.53606 -87.8462 -211.074 -8.763 -89.597 -211.074 -4.53606 -87.8462 -217.424 -4.53606 -87.8462 -217.424 -8.763 -89.597 -211.074 -12.3928 -92.3822 -211.074 -8.763 -89.597 -217.424 -8.763 -89.597 -217.424 -12.3928 -92.3822 -211.074 -15.178 -96.012 -211.074 -12.3928 -92.3822 -217.424 -12.3928 -92.3822 -217.424 -15.178 -96.012 -211.074 -16.9288 -100.239 -211.074 -15.178 -96.012 -217.424 -15.178 -96.012 -217.424 -16.9288 -100.239 -217.424 -16.9288 -100.239 -217.424 -15.178 -96.012 -217.424 -12.3928 -92.3822 -217.424 -8.763 -89.597 -217.424 -4.53606 -87.8462 -217.424 0 -87.249 -217.424 4.53606 -87.8462 -217.424 8.763 -89.597 -217.424 12.3928 -92.3822 -217.424 15.178 -96.012 -217.424 16.9288 -100.239 -217.424 17.526 -104.775 -217.424 16.9288 -109.311 -217.424 15.178 -113.538 -217.424 12.3928 -117.168 -217.424 8.763 -119.953 -217.424 4.53606 -121.704 -217.424 0 -122.301 -217.424 -4.53606 -121.704 -217.424 -8.763 -119.953 -217.424 -12.3928 -117.168 -217.424 -15.178 -113.538 -217.424 -16.9288 -109.311 -217.424 -17.526 -104.775 -211.074 -16.9288 -109.311 -211.074 -17.526 -104.775 -217.424 -17.526 -104.775 -217.424 -16.9288 -109.311 -211.074 -17.526 -104.775 -211.074 -16.9288 -109.311 -211.074 -15.178 -113.538 -211.074 -12.3928 -117.168 -211.074 -8.763 -119.953 -211.074 -4.53606 -121.704 -211.074 0 -122.301 -211.074 4.53606 -121.704 -211.074 8.763 -119.953 -211.074 12.3928 -117.168 -211.074 15.178 -113.538 -211.074 16.9288 -109.311 -211.074 17.526 -104.775 -211.074 16.9288 -100.239 -211.074 15.178 -96.012 -211.074 12.3928 -92.3822 -211.074 8.763 -89.597 -211.074 4.53606 -87.8462 -211.074 0 -87.249 -211.074 -4.53606 -87.8462 -211.074 -8.763 -89.597 -211.074 -12.3928 -92.3822 -211.074 -15.178 -96.012 -211.074 -16.9288 -100.239 -211.074 -17.526 -104.775 -211.074 -16.9288 -100.239 -217.424 -16.9288 -100.239 -217.424 -17.526 -104.775 + + + + + + + + + + 0 1 0 0 -1 0 0.991445 0 0.130527 0 -0.965932 0.258797 0 -1 0 0 -1 0 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.258797 0.965932 0 0 1 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0 1 0 0.258797 0.965932 0 0 1 0 0 1 0 0.258797 0.965932 0 0.499985 0.866034 0 0.258797 0.965932 0 0.258797 0.965932 0 0.499985 0.866034 0 0.707083 0.70713 0 0.499985 0.866034 0 0.499985 0.866034 0 0.707083 0.70713 0 0.866034 0.499985 0 0.707083 0.70713 0 0.707083 0.70713 0 0.866034 0.499985 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -0.978152 -0.207892 0 -0.978152 -0.207892 0 -0.958823 -0.284005 0 -0.958823 -0.284005 0 -1 0 0 -0.978152 -0.207892 0 -0.978152 -0.207892 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.923884 0.382672 0 0.866034 0.499985 0 0.866034 0.499985 0 0.923884 0.382672 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 1 0 0 1 0 0 1 0 0 1 0 0 0 -0.951062 -0.309 0 -0.951062 -0.309 0 -0.951062 -0.309 0 -0.951062 -0.309 1 0 0 1 0 0 1 0 0 1 0 0 0 0.951062 0.309 0 0.951062 0.309 0 0.951062 0.309 0 0.951062 0.309 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.309 -0.951062 0 0.309 -0.951062 0 0.309 -0.951062 0 0.309 -0.951062 1 0 0 -0.965932 0 -0.258797 -0.115543 -0.990683 0.0720847 -0.115543 -0.990683 0.0720847 -0.115543 -0.990683 0.0720847 -0.115543 -0.990683 0.0720847 -0.115543 -0.990683 0.0720847 0.0621967 0.978176 -0.198248 0.0621967 0.978176 -0.198248 0.0621967 0.978176 -0.198248 0.0621967 0.978176 -0.198248 0.0621967 0.978176 -0.198248 0.0621967 0.978176 -0.198248 -0.997859 0 -0.0654012 0.910714 0 0.413038 0.923884 0 0.382672 0.923884 0 0.382672 0.910714 0 0.413038 -0.115543 -0.990683 0.0720847 -0.115543 -0.990683 0.0720847 -0.0425733 -0.997363 -0.0587787 -0.115543 -0.990683 0.0720847 0.0621967 0.978176 -0.198248 0.0621967 0.978176 -0.198248 0.0621967 0.978176 -0.198248 0.0621967 0.978176 -0.198248 -0.70713 0 -0.707083 -0.258797 0 -0.965932 0.70713 0 -0.707083 0.70713 0 -0.707083 0.866034 0 0.499985 0.965932 0 0.258797 0.569048 0.210425 0.794925 0.569048 -0.210425 0.794925 0.707083 0 0.70713 0.707083 0 0.70713 0.258797 0 0.965932 0.258797 0 0.965932 -0.258797 0 0.965932 -0.499985 0 0.866034 -0.866034 0 0.499985 -0.965932 0 0.258797 -0.707083 0 -0.70713 -0.965932 0 -0.258797 0.240791 0.248543 -0.938214 0.0926847 -0.126164 -0.98767 1 0 0 1 0 0 1 0 0 0.80623 -0.427381 0.40907 0.80623 0.427381 0.40907 -0.0654012 0.997758 -0.0142216 -0.115543 0.990683 0.0720847 0.25782 -0.511002 -0.820003 -0.115543 -0.990683 0.0720847 -0.115543 -0.990683 0.0720847 -0.0654012 -0.997758 -0.0142216 -0.115543 -0.990683 0.0720847 -0.115543 -0.990683 0.0720847 -0.115543 -0.990683 0.0720847 -0.115543 -0.990683 0.0720847 -0.115543 -0.990683 0.0720847 0.0621967 0.978176 -0.198248 0.0621967 0.978176 -0.198248 0.0621967 0.978176 -0.198248 0.0621967 0.978176 -0.198248 0.0621967 0.978176 -0.198248 0.678769 -0.678457 0.281014 0.763581 -0.56505 0.31251 0.763202 -0.377697 0.524277 0.891249 -0.396863 0.219489 0.929045 -0.262581 0.260628 0.919849 -0.192633 0.341716 0.833811 -0.129917 0.536546 0.642598 -0.180334 0.74468 0.295175 0 0.955443 0.179693 -0.0397046 0.982921 0.295175 0 0.955443 0.179693 0.0397046 0.982921 0.642598 0.180334 0.74468 0.833811 0.129917 0.536546 0.919849 0.192633 0.341716 0.763202 0.377697 0.524277 0.763202 0.377697 0.524277 0.929045 0.262581 0.260628 0.891249 0.396863 0.219489 0.763581 0.56505 0.31251 0.678769 0.678457 0.281014 -0.0657979 0.989299 0.130222 -0.0425733 0.997363 -0.0587787 0.261147 0.86812 -0.422101 0.137028 0.935142 -0.326701 0.373791 0.656408 -0.655293 0.261177 0.713992 -0.649617 0.35667 0.465743 -0.809858 0.25782 0.511002 -0.820003 0.19834 0.322642 -0.925507 0.108432 0 -0.994104 0.156896 -0.221381 -0.962483 0.156896 0.221381 -0.962483 0.240791 -0.248543 -0.938214 0.19834 -0.322642 -0.925507 0.35667 -0.465743 -0.809858 0.373791 -0.656408 -0.655293 -0.0654012 -0.997758 -0.0142216 -0.0657979 -0.989299 0.130222 0.137028 -0.935142 -0.326701 0.261147 -0.86812 -0.422101 0.261177 -0.713992 -0.649617 -0.997859 0 -0.0654012 -1 0 0 -1 0 0 -0.965932 0 -0.258797 -0.886647 0 -0.462447 -0.886647 0 -0.462447 -0.81869 0 -0.574236 -0.81869 0 -0.574236 -0.70713 0 -0.707083 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.258797 0 -0.965932 -0.0654012 0 -0.997859 -0.0654012 0 -0.997859 0.0654012 0 -0.997859 0.0654012 0 -0.997859 0.258797 0 -0.965932 0.258797 0 -0.965932 0.499985 0 -0.866034 0.499985 0 -0.866034 0.866034 0 -0.499985 0.866034 0 -0.499985 0.96481 0 -0.262947 0.96481 0 -0.262947 0.999991 0 -0.00427259 0.999991 0 -0.00427259 0.965932 0 0.258797 0.866034 0 0.499985 0.707083 0 0.70713 0.707083 0 0.70713 0.499985 0 0.866034 0.499985 0 0.866034 0.258797 0 0.965932 0.258797 0 0.965932 0.179693 0.0397046 0.982921 0.79336 0 0.608753 0.79336 0 0.608753 0.499985 0 0.866034 0.499985 0 0.866034 0.0654012 0 0.997859 0.0654012 0 0.997859 -0.0654012 0 0.997859 -0.0654012 0 0.997859 -0.258797 0 0.965932 -0.499985 0 0.866034 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.866034 0 0.499985 -0.965932 0 0.258797 -0.997859 0 0.0654012 -0.997859 0 0.0654012 -0.997859 0 -0.0654012 -0.997859 0 -0.0654012 -0.965932 0 -0.258797 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.707083 0 -0.70713 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.258797 0 -0.965932 -0.258797 0 -0.965932 0.0926847 0.126164 -0.98767 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0.957162 0.229713 0.176275 0.946143 0.123875 0.299112 1 0 0 0.946143 -0.123875 0.299112 0.957162 -0.229713 0.176275 1 0 0 0.917429 0 0.3979 0.917429 0 0.3979 -0.115545 -0.990683 0.0720859 0.0622078 0.978172 -0.198266 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.70713 -0.707083 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.70713 -0.707083 0 -0.499985 -0.866034 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 0 -1 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 0 -1 0 0.258797 -0.965932 0 0 -1 0 0 -1 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.70713 -0.707083 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.70713 -0.707083 0 0.866034 -0.499985 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.866034 -0.499985 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.965932 -0.258797 0 1 0 0 0.965932 -0.258797 0 0.965932 -0.258797 0 1 0 0 0.965932 0.258797 0 1 0 0 1 0 0 0.965932 0.258797 0 0.866034 0.499985 0 0.965932 0.258797 0 0.965932 0.258797 0 0.866034 0.499985 0 0.707083 0.70713 0 0.866034 0.499985 0 0.866034 0.499985 0 0.707083 0.70713 0 0.499985 0.866034 0 0.707083 0.70713 0 0.707083 0.70713 0 0.499985 0.866034 0 0.258797 0.965932 0 0.499985 0.866034 0 0.499985 0.866034 0 0.258797 0.965932 0 0 1 0 0.258797 0.965932 0 0.258797 0.965932 0 0 1 0 -0.258797 0.965932 0 0 1 0 0 1 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.258797 0.965932 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.965932 0.258797 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -0.965932 -0.258797 0 -1 0 0 -1 0 0 -0.965932 -0.258797 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -1 0 + + + + + + + + + + + + + + +

0 0 1 0 2 0 3 0

+
+ + + +

8 1 5 1 4 1 9 1

+

5 1 8 1 10 1 11 1

+
+ + + +

4 2 5 2 6 2 7 2

+
+ + + +

12 3 13 4 14 5 15 6

+

16 7 17 8 18 9 19 10

+

20 11 21 12 22 13 23 14

+

24 15 25 16 26 17 27 18

+

28 19 29 20 30 21 31 22

+

32 23 33 24 34 25 35 26

+

36 27 37 28 38 29 39 30

+

40 31 41 32 42 33 43 34

+

44 35 45 36 46 37 47 38

+

48 39 49 40 50 41 51 42

+

52 43 53 44 54 45 55 46 56 47 57 48 58 49 59 50 60 51 61 52 62 53 63 54 64 55 65 56 66 57 67 58 68 59 69 60 70 61 71 62 72 63 73 64 74 65 75 66

+

76 67 77 68 78 69 79 70

+

80 71 81 72 82 73 83 74

+

84 75 85 76 86 77 87 78 88 79 89 80 90 81 91 82 92 83 93 84 94 85 95 86 96 87 97 88 98 89 99 90 100 91 101 92 102 93 103 94 104 95 105 96 106 97 107 98

+

108 99 109 100 110 101 111 102

+
+ + + +

112 103 113 104 114 105 115 106

+

116 107 117 108 118 109 119 110

+

120 111 121 112 122 113 123 114

+

124 115 125 116 126 117 127 118

+

128 119 129 120 130 121 131 122

+

132 123 133 124 134 125 135 126

+

136 127 137 128 138 129 139 130

+

140 131 141 132 142 133 143 134

+

144 135 145 136 146 137 147 138

+
+ + + +

148 139 149 140 150 141 151 142

+

152 143 153 144 154 145 155 146

+

156 147 157 148 158 149 159 150

+

160 151 161 152 162 153 163 154

+

164 155 165 156 166 157 167 158

+
+ + + +

168 159 169 159 170 159 171 159

+
+ + + +

287 349 285 349 185 349

+
+ + + +

220 349 312 349 340 349 279 349

+

310 349 338 349 340 349 312 349

+

308 349 336 349 338 349 310 349

+

201 349 335 349 336 349 308 349

+

306 349 190 349 335 349 201 349

+

304 349 332 349 190 349 306 349

+

303 349 329 349 332 349 304 349

+

230 349 329 349 303 349 301 349

+

327 349 230 349 301 349 199 349

+

325 349 327 349 199 349 299 349

+

231 349 325 349 299 349 297 349

+

297 349 294 349 323 349 231 349

+

294 349 293 349 319 349 322 349 323 349

+

293 349 192 349 208 349 319 349

+

192 349 290 349 317 349 208 349

+

290 349 288 349 205 349 317 349

+

288 349 287 349 185 349 205 349

+

285 349 180 349 186 349 359 349 185 349

+
+ + + +

188 350 284 350 286 350

+
+ + + +

264 350 339 350 313 350 221 350

+

313 350 339 350 337 350 311 350

+

311 350 337 350 195 350 309 350

+

309 350 195 350 334 350 307 350

+

307 350 334 350 333 350 202 350

+

202 350 333 350 331 350 305 350

+

305 350 331 350 330 350 302 350

+

300 350 302 350 330 350 328 350

+

200 350 300 350 328 350 234 350

+

298 350 200 350 234 350 326 350

+

296 350 298 350 326 350 324 350

+

324 350 236 350 295 350 296 350

+

236 350 321 350 320 350 292 350 295 350

+

320 350 207 350 291 350 292 350

+

207 350 318 350 289 350 291 350

+

318 350 206 350 196 350 289 350

+

206 350 188 350 286 350 196 350

+

283 350 187 350 183 350 181 350

+

188 350 360 350 187 350 283 350 284 350

+
+ + + +

238 226 239 227 220 208 240 228 241 229 242 230 242 230 243 231 240 228 240 228 243 231 244 232 245 233 246 234 204 192 247 235 248 236 249 237 203 191 248 236 250 238 251 239 252 240 253 241 254 242 252 240 255 243 255 243 256 244 254 242 221 209 257 245 258 246 259 247 222 210 223 211 222 210 260 248 223 211 261 249 262 250 222 210 263 251 264 252 261 249 265 253 266 254 263 251 215 203 267 255 265 253 268 256 267 255 215 203 269 257 270 258 268 256 271 259 272 260 268 256 273 261 272 260 271 259 274 262 224 212 273 261 225 213 275 263 276 264 189 177 191 179 275 263 227 215 277 265 278 266 278 266 279 267 274 262

+
+ + + +

280 268 184 172 281 269 282 270

+

283 271 184 172 280 268 172 160

+

284 272 283 271 172 160 285 273

+

286 274 284 272 285 273 287 275

+

197 185 286 274 287 275 288 276

+

289 277 197 185 288 276 290 278

+

291 279 289 277 290 278 198 186

+

292 280 291 279 198 186 293 281

+

293 281 294 282 295 283 292 280

+

296 284 295 283 294 282 297 285

+

298 286 296 284 297 285 299 287

+

200 188 298 286 299 287 199 187

+

300 288 200 188 199 187 301 289

+

302 290 300 288 301 289 303 291

+

302 290 303 291 304 292 305 293

+

304 292 306 294 202 190 305 293

+

306 294 201 189 307 295 202 190

+

201 189 308 296 309 297 307 295

+

308 296 310 298 311 299 309 297

+

310 298 312 300 313 301 311 299

+

312 300 247 235 314 302 313 301

+

205 193 315 303 316 304 206 194

+

317 305 205 193 206 194 318 306

+

208 196 317 305 318 306 207 195

+

319 307 208 196 207 195 320 308

+

320 308 321 309 322 310 319 307

+

323 311 322 310 321 309 209 197

+

210 198 323 311 209 197 324 312

+

325 313 210 198 324 312 326 314

+

327 315 325 313 326 314 211 199

+

212 200 327 315 211 199 328 316

+

329 317 212 200 328 316 330 318

+

330 318 331 319 332 320 329 317

+

333 321 214 202 332 320 331 319

+

333 321 334 322 335 323 214 202

+

334 322 213 201 336 324 335 323

+

213 201 337 325 338 326 336 324

+

337 325 339 327 340 328 338 326

+

339 327 341 329 216 204 340 328

+

217 205 342 330 343 331 344 332 345 333 346 334 347 335 218 206 348 336 349 337 350 338 351 339 219 207 352 340 353 341 255 243 252 240 354 342 355 343 356 344 243 231 242 230 357 345 358 346

+
+ + + +

238 226 239 227 220 208 240 228 241 229 242 230 242 230 243 231 240 228 240 228 243 231 244 232 245 233 246 234 204 192 247 235 248 236 249 237 203 191 248 236 250 238 251 239 252 240 253 241 254 242 252 240 255 243 255 243 256 244 254 242 221 209 257 245 258 246 259 247 222 210 223 211 222 210 260 248 223 211 261 249 262 250 222 210 263 251 264 252 261 249 265 253 266 254 263 251 215 203 267 255 265 253 268 256 267 255 215 203 269 257 270 258 268 256 271 259 272 260 268 256 273 261 272 260 271 259 274 262 224 212 273 261 225 213 275 263 276 264 189 177 191 179 275 263 227 215 277 265 278 266 278 266 279 267 274 262

+
+ + + +

280 268 184 172 281 269 282 270

+

283 271 184 172 280 268 172 160

+

284 272 283 271 172 160 285 273

+

286 274 284 272 285 273 287 275

+

197 185 286 274 287 275 288 276

+

289 277 197 185 288 276 290 278

+

291 279 289 277 290 278 198 186

+

292 280 291 279 198 186 293 281

+

293 281 294 282 295 283 292 280

+

296 284 295 283 294 282 297 285

+

298 286 296 284 297 285 299 287

+

200 188 298 286 299 287 199 187

+

300 288 200 188 199 187 301 289

+

302 290 300 288 301 289 303 291

+

302 290 303 291 304 292 305 293

+

304 292 306 294 202 190 305 293

+

306 294 201 189 307 295 202 190

+

201 189 308 296 309 297 307 295

+

308 296 310 298 311 299 309 297

+

310 298 312 300 313 301 311 299

+

312 300 247 235 314 302 313 301

+

205 193 315 303 316 304 206 194

+

317 305 205 193 206 194 318 306

+

208 196 317 305 318 306 207 195

+

319 307 208 196 207 195 320 308

+

320 308 321 309 322 310 319 307

+

323 311 322 310 321 309 209 197

+

210 198 323 311 209 197 324 312

+

325 313 210 198 324 312 326 314

+

327 315 325 313 326 314 211 199

+

212 200 327 315 211 199 328 316

+

329 317 212 200 328 316 330 318

+

330 318 331 319 332 320 329 317

+

333 321 214 202 332 320 331 319

+

333 321 334 322 335 323 214 202

+

334 322 213 201 336 324 335 323

+

213 201 337 325 338 326 336 324

+

337 325 339 327 340 328 338 326

+

339 327 341 329 216 204 340 328

+

217 205 342 330 343 331 344 332 345 333 346 334 347 335 218 206 348 336 349 337 350 338 351 339 219 207 352 340 353 341 255 243 252 240 354 342 355 343 356 344 243 231 242 230 357 345 358 346

+

185 173 359 347 360 348 188 176

+

359 347 186 174 187 175 360 348

+
+ + + +

361 351 362 352 363 353 364 354

+

365 355 366 356 367 357 368 358

+

369 359 370 360 371 361 372 362

+

373 363 374 364 375 365 376 366

+

377 367 378 368 379 369 380 370

+

381 371 382 372 383 373 384 374

+

385 375 386 376 387 377 388 378

+

389 379 390 380 391 381 392 382

+

393 383 394 384 395 385 396 386

+

397 387 398 388 399 389 400 390

+

401 391 402 392 403 393 404 394

+

405 395 406 396 407 397 408 398

+

409 399 410 400 411 401 412 402

+

413 403 414 404 415 405 416 406

+

417 407 418 408 419 409 420 410

+

421 411 422 412 423 413 424 414

+

425 415 426 416 427 417 428 418

+

429 419 430 420 431 421 432 422

+

433 423 434 424 435 425 436 426

+

437 427 438 428 439 429 440 430

+

441 431 442 432 443 433 444 434

+

445 435 446 436 447 437 448 438

+

449 439 450 440 451 441 452 442 453 443 454 444 455 445 456 446 457 447 458 448 459 449 460 450 461 451 462 452 463 453 464 454 465 455 466 456 467 457 468 458 469 459 470 460 471 461 472 462

+

473 463 474 464 475 465 476 466

+

477 467 478 468 479 469 480 470 481 471 482 472 483 473 484 474 485 475 486 476 487 477 488 478 489 479 490 480 491 481 492 482 493 483 494 484 495 485 496 486 497 487 498 488 499 489 500 490

+

501 491 502 492 503 493 504 494

+
+
+ + + CAT3DBagRep + + +
+ + + + 0 -11.1125 0 0 -10.7338 2.87613 -47.625 -10.7338 2.87613 -47.625 -11.1125 0 0 -10.7338 -2.87613 0 -11.1125 0 -47.625 -11.1125 0 -47.625 -10.7338 -2.87613 0 -9.62371 -5.55625 0 -10.7338 -2.87613 -47.625 -10.7338 -2.87613 -47.625 -9.62371 -5.55625 0 -7.85773 -7.85772 0 -9.62371 -5.55625 -47.625 -9.62371 -5.55625 -47.625 -7.85773 -7.85772 0 -5.55625 -9.62371 0 -7.85773 -7.85772 -47.625 -7.85773 -7.85772 -47.625 -5.55625 -9.62371 0 -2.87613 -10.7339 0 -5.55625 -9.62371 -47.625 -5.55625 -9.62371 -47.625 -2.87613 -10.7339 0 0 -11.1125 0 -2.87613 -10.7339 -47.625 -2.87613 -10.7339 -47.625 0 -11.1125 0 2.87613 -10.7339 0 0 -11.1125 -47.625 0 -11.1125 -47.625 2.87613 -10.7339 0 5.55625 -9.62371 0 2.87613 -10.7339 -47.625 2.87613 -10.7339 -47.625 5.55625 -9.62371 0 7.85772 -7.85773 0 5.55625 -9.62371 -47.625 5.55625 -9.62371 -47.625 7.85772 -7.85773 0 9.62371 -5.55625 0 7.85772 -7.85773 -47.625 7.85772 -7.85773 -47.625 9.62371 -5.55625 0 10.7338 -2.87613 0 9.62371 -5.55625 -47.625 9.62371 -5.55625 -47.625 10.7339 -2.87612 -47.625 10.7339 -2.87612 -47.625 9.62371 -5.55625 -47.625 7.85772 -7.85773 -47.625 5.55625 -9.62371 -47.625 2.87613 -10.7339 -47.625 0 -11.1125 -47.625 -2.87613 -10.7339 -47.625 -5.55625 -9.62371 -47.625 -7.85773 -7.85772 -47.625 -9.62371 -5.55625 -47.625 -10.7338 -2.87613 -47.625 -11.1125 0 -47.625 -10.7338 2.87613 -47.625 -9.62371 5.55625 -47.625 -7.85772 7.85772 -47.625 -5.55625 9.62371 -47.625 -2.87613 10.7338 -47.625 0 11.1125 -47.625 2.87613 10.7338 -47.625 5.55625 9.62371 -47.625 7.85772 7.85772 -47.625 9.62371 5.55625 -47.625 10.7338 2.87613 -47.625 11.1125 0 0 10.7338 2.87613 0 11.1125 0 -47.625 11.1125 0 -47.625 10.7338 2.87613 0 9.62371 5.55625 0 10.7338 2.87613 -47.625 10.7338 2.87613 -47.625 9.62371 5.55625 0 7.85773 7.85772 0 9.62371 5.55625 -47.625 9.62371 5.55625 -47.625 7.85772 7.85772 0 5.55625 9.62371 0 7.85773 7.85772 -47.625 7.85772 7.85772 -47.625 5.55625 9.62371 0 2.87613 10.7338 0 5.55625 9.62371 -47.625 5.55625 9.62371 -47.625 2.87613 10.7338 0 0 11.1125 0 2.87613 10.7338 -47.625 2.87613 10.7338 -47.625 0 11.1125 0 -2.87613 10.7338 0 0 11.1125 -47.625 0 11.1125 -47.625 -2.87613 10.7338 0 -5.55625 9.62371 0 -2.87613 10.7338 -47.625 -2.87613 10.7338 -47.625 -5.55625 9.62371 0 -7.85772 7.85773 0 -5.55625 9.62371 -47.625 -5.55625 9.62371 -47.625 -7.85772 7.85772 0 -9.62371 5.55625 0 -7.85772 7.85773 -47.625 -7.85772 7.85772 -47.625 -9.62371 5.55625 0 -10.7338 2.87613 0 -9.62371 5.55625 -47.625 -9.62371 5.55625 -47.625 -10.7338 2.87613 0 -9.62371 5.55625 0 -10.7338 2.87613 0 -11.1125 0 0 -10.7338 -2.87613 0 -9.62371 -5.55625 0 -7.85773 -7.85772 0 -5.55625 -9.62371 0 -2.87613 -10.7339 0 0 -11.1125 0 2.87613 -10.7339 0 5.55625 -9.62371 0 7.85772 -7.85773 0 9.62371 -5.55625 0 10.7338 -2.87613 0 11.1125 0 0 10.7338 2.87613 0 9.62371 5.55625 0 7.85773 7.85772 0 5.55625 9.62371 0 2.87613 10.7338 0 0 11.1125 0 -2.87613 10.7338 0 -5.55625 9.62371 0 -7.85772 7.85773 0 11.1125 0 0 10.7338 -2.87613 -47.625 10.7339 -2.87612 -47.625 11.1125 0 -50.8 6.13363 1.6435 -50.8 5.49926 3.175 -47.625 5.49926 3.175 -47.625 6.13363 1.6435 -50.8 5.49926 3.175 -50.8 4.49013 4.49013 -47.625 4.49013 4.49013 -47.625 5.49926 3.175 -50.8 4.49013 4.49013 -50.8 3.175 5.49926 -47.625 3.175 5.49926 -47.625 4.49013 4.49013 -50.8 6.13363 -1.6435 -50.8 6.35 0 -47.625 6.35 0 -47.625 6.13363 -1.6435 -50.8 5.49926 -3.175 -50.8 6.13363 -1.6435 -47.625 6.13363 -1.6435 -47.625 5.49926 -3.175 -50.8 4.49013 -4.49013 -50.8 5.49926 -3.175 -47.625 5.49926 -3.175 -47.625 4.49013 -4.49013 -50.8 3.175 -5.49926 -50.8 4.49013 -4.49013 -47.625 4.49013 -4.49013 -47.625 3.175 -5.49926 -50.8 1.6435 -6.13363 -50.8 3.175 -5.49926 -47.625 3.175 -5.49926 -47.625 1.6435 -6.13363 -50.8 0 -6.35 -50.8 1.6435 -6.13363 -47.625 1.6435 -6.13363 -47.625 0 -6.35 -50.8 -1.6435 -6.13363 -50.8 0 -6.35 -47.625 0 -6.35 -47.625 -1.6435 -6.13363 -50.8 -3.175 -5.49926 -50.8 -1.6435 -6.13363 -47.625 -1.6435 -6.13363 -47.625 -3.175 -5.49926 -50.8 -4.49013 -4.49013 -50.8 -3.175 -5.49926 -47.625 -3.175 -5.49926 -47.625 -4.49013 -4.49013 -50.8 -5.49926 -3.175 -50.8 -4.49013 -4.49013 -47.625 -4.49013 -4.49013 -47.625 -5.49926 -3.175 -50.8 -6.13363 -1.6435 -50.8 -5.49926 -3.175 -47.625 -5.49926 -3.175 -47.625 -6.13363 -1.6435 -50.8 -6.35 0 -50.8 -6.13363 -1.6435 -47.625 -6.13363 -1.6435 -47.625 -6.35 0 -50.8 -6.13363 1.6435 -50.8 -6.35 0 -47.625 -6.35 0 -47.625 -6.13363 1.6435 -50.8 -5.49926 3.175 -50.8 -6.13363 1.6435 -47.625 -6.13363 1.6435 -47.625 -5.49926 3.175 -50.8 -4.49013 4.49013 -50.8 -5.49926 3.175 -47.625 -5.49926 3.175 -47.625 -4.49013 4.49013 -50.8 -3.175 5.49926 -50.8 -4.49013 4.49013 -47.625 -4.49013 4.49013 -47.625 -3.175 5.49926 -50.8 -1.6435 6.13363 -50.8 -3.175 5.49926 -47.625 -3.175 5.49926 -47.625 -1.6435 6.13363 -50.8 0 6.35 -50.8 -1.6435 6.13363 -47.625 -1.6435 6.13363 -47.625 0 6.35 -50.8 1.6435 6.13363 -50.8 0 6.35 -47.625 0 6.35 -47.625 1.6435 6.13363 -50.8 3.175 5.49926 -50.8 1.6435 6.13363 -47.625 1.6435 6.13363 -47.625 3.175 5.49926 -50.8 1.6435 6.13363 -50.8 3.175 5.49926 -50.8 4.49013 4.49013 -50.8 5.49926 3.175 -50.8 6.13363 1.6435 -50.8 6.35 0 -50.8 6.13363 -1.6435 -50.8 5.49926 -3.175 -50.8 4.49013 -4.49013 -50.8 3.175 -5.49926 -50.8 1.6435 -6.13363 -50.8 0 -6.35 -50.8 -1.6435 -6.13363 -50.8 -3.175 -5.49926 -50.8 -4.49013 -4.49013 -50.8 -5.49926 -3.175 -50.8 -6.13363 -1.6435 -50.8 -6.35 0 -50.8 -6.13363 1.6435 -50.8 -5.49926 3.175 -50.8 -4.49013 4.49013 -50.8 -3.175 5.49926 -50.8 -1.6435 6.13363 -50.8 0 6.35 -50.8 6.35 0 -50.8 6.13363 1.6435 -47.625 6.13363 1.6435 -47.625 6.35 0 + + + + + + + + + + 0 -1 0 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -1 0 0 -0.965932 -0.258797 0 -1 0 0 -1 0 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.707083 -0.70713 0 -0.499985 -0.866034 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 0 -1 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 0 -1 0 0.258797 -0.965932 0 0 -1 0 0 -1 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.965932 -0.258797 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.965932 0.258797 0 1 0 0 1 0 0 0.965932 0.258797 0 0.866034 0.499985 0 0.965932 0.258797 0 0.965932 0.258797 0 0.866034 0.499985 0 0.70713 0.707083 0 0.866034 0.499985 0 0.866034 0.499985 0 0.70713 0.707083 0 0.499985 0.866034 0 0.70713 0.707083 0 0.70713 0.707083 0 0.499985 0.866034 0 0.258797 0.965932 0 0.499985 0.866034 0 0.499985 0.866034 0 0.258797 0.965932 0 0 1 0 0.258797 0.965932 0 0.258797 0.965932 0 0 1 0 -0.258797 0.965932 0 0 1 0 0 1 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.258797 0.965932 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.965932 0.258797 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 0.965932 -0.258797 0 0.965932 -0.258797 0 1 0 0 0.965932 0.258797 0 0.866034 0.499985 0 0.866034 0.499985 0 0.965932 0.258797 0 0.866034 0.499985 0 0.707083 0.70713 0 0.707083 0.70713 0 0.866034 0.499985 0 0.707083 0.70713 0 0.499985 0.866034 0 0.499985 0.866034 0 0.707083 0.70713 0 0.965932 -0.258797 0 1 0 0 1 0 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0 -1 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0 -1 0 -0.258797 -0.965932 0 0 -1 0 0 -1 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.707083 -0.70713 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -1 0 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -1 0 0 -0.965932 0.258797 0 -1 0 0 -1 0 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.258797 0.965932 0 0 1 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0 1 0 0.258797 0.965932 0 0 1 0 0 1 0 0.258797 0.965932 0 0.499985 0.866034 0 0.258797 0.965932 0 0.258797 0.965932 0 0.499985 0.866034 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 0.965932 0.258797 0 0.965932 0.258797 0 1 0 + + + + + + + + + + + + + + +

0 0 1 1 2 2 3 3

+

4 4 5 5 6 6 7 7

+

8 8 9 9 10 10 11 11

+

12 12 13 13 14 14 15 15

+

16 16 17 17 18 18 19 19

+

20 20 21 21 22 22 23 23

+

24 24 25 25 26 26 27 27

+

28 28 29 29 30 30 31 31

+

32 32 33 33 34 34 35 35

+

36 36 37 37 38 38 39 39

+

40 40 41 41 42 42 43 43

+

44 44 45 45 46 46 47 47

+

48 48 49 49 50 50 51 51 52 52 53 53 54 54 55 55 56 56 57 57 58 58 59 59 60 60 61 61 62 62 63 63 64 64 65 65 66 66 67 67 68 68 69 69 70 70 71 71

+

72 72 73 73 74 74 75 75

+

76 76 77 77 78 78 79 79

+

80 80 81 81 82 82 83 83

+

84 84 85 85 86 86 87 87

+

88 88 89 89 90 90 91 91

+

92 92 93 93 94 94 95 95

+

96 96 97 97 98 98 99 99

+

100 100 101 101 102 102 103 103

+

104 104 105 105 106 106 107 107

+

108 108 109 109 110 110 111 111

+

112 112 113 113 114 114 115 115

+

116 116 117 117 118 118 119 119 120 120 121 121 122 122 123 123 124 124 125 125 126 126 127 127 128 128 129 129 130 130 131 131 132 132 133 133 134 134 135 135 136 136 137 137 138 138 139 139

+

140 140 141 141 142 142 143 143

+
+ + + +

144 144 145 145 146 146 147 147

+

148 148 149 149 150 150 151 151

+

152 152 153 153 154 154 155 155

+

156 156 157 157 158 158 159 159

+

160 160 161 161 162 162 163 163

+

164 164 165 165 166 166 167 167

+

168 168 169 169 170 170 171 171

+

172 172 173 173 174 174 175 175

+

176 176 177 177 178 178 179 179

+

180 180 181 181 182 182 183 183

+

184 184 185 185 186 186 187 187

+

188 188 189 189 190 190 191 191

+

192 192 193 193 194 194 195 195

+

196 196 197 197 198 198 199 199

+

200 200 201 201 202 202 203 203

+

204 204 205 205 206 206 207 207

+

208 208 209 209 210 210 211 211

+

212 212 213 213 214 214 215 215

+

216 216 217 217 218 218 219 219

+

220 220 221 221 222 222 223 223

+

224 224 225 225 226 226 227 227

+

228 228 229 229 230 230 231 231

+

232 232 233 233 234 234 235 235

+

236 236 237 237 238 238 239 239 240 240 241 241 242 242 243 243 244 244 245 245 246 246 247 247 248 248 249 249 250 250 251 251 252 252 253 253 254 254 255 255 256 256 257 257 258 258 259 259

+

260 260 261 261 262 262 263 263

+
+
+ + + CAT3DBagRep + + +
+ + + + -11.1125 8.73125 0 -11.1125 8.43374 -2.25981 -25.4 3.06681 -0.82175 -25.4 3.175 0 0 8.73125 0 0 8.43374 -2.25981 -11.1125 8.43374 -2.25981 -11.1125 8.73125 0 -11.1125 7.56148 -4.36563 -11.1125 6.17392 -6.17393 -25.4 2.24506 -2.24506 -25.4 2.74963 -1.5875 -11.1125 6.17392 -6.17393 -11.1125 4.36562 -7.56148 -25.4 1.5875 -2.74963 -25.4 2.24506 -2.24506 -11.1125 4.36562 -7.56148 -11.1125 2.25981 -8.43374 -25.4 0.82175 -3.06681 -25.4 1.5875 -2.74963 -11.1125 2.25981 -8.43374 -11.1125 0 -8.73125 -25.4 0 -3.175 -25.4 0.82175 -3.06681 -11.1125 0 -8.73125 -11.1125 -2.25981 -8.43374 -25.4 -0.82175 -3.06681 -25.4 0 -3.175 -11.1125 -2.25981 -8.43374 -11.1125 -4.36562 -7.56148 -25.4 -1.5875 -2.74963 -25.4 -0.82175 -3.06681 -11.1125 -4.36562 -7.56148 -11.1125 -6.17393 -6.17392 -25.4 -2.24506 -2.24506 -25.4 -1.5875 -2.74963 -11.1125 -6.17393 -6.17392 -11.1125 -7.56148 -4.36562 -25.4 -2.74963 -1.5875 -25.4 -2.24506 -2.24506 -11.1125 -7.56148 -4.36562 -11.1125 -8.43374 -2.25981 -25.4 -3.06681 -0.821751 -25.4 -2.74963 -1.5875 -11.1125 -8.43374 -2.25981 -11.1125 -8.73125 0 -25.4 -3.175 0 -25.4 -3.06681 -0.821751 -11.1125 -8.73125 0 -11.1125 -8.43374 2.25981 -25.4 -3.06681 0.821751 -25.4 -3.175 0 -11.1125 -8.43374 2.25981 -11.1125 -7.56148 4.36562 -25.4 -2.74963 1.5875 -25.4 -3.06681 0.821751 -11.1125 -7.56148 4.36562 -11.1125 -6.17393 6.17393 -25.4 -2.24506 2.24506 -25.4 -2.74963 1.5875 -11.1125 -6.17393 6.17393 -11.1125 -4.36562 7.56148 -25.4 -1.5875 2.74963 -25.4 -2.24506 2.24506 -11.1125 -4.36562 7.56148 -11.1125 -2.25981 8.43374 -25.4 -0.82175 3.06681 -25.4 -1.5875 2.74963 -11.1125 -2.25981 8.43374 -11.1125 0 8.73125 -25.4 0 3.175 -25.4 -0.82175 3.06681 -11.1125 0 8.73125 -11.1125 2.25981 8.43374 -25.4 0.821751 3.06681 -25.4 0 3.175 -11.1125 2.25981 8.43374 -11.1125 4.36562 7.56148 -25.4 1.5875 2.74963 -25.4 0.821751 3.06681 -11.1125 4.36562 7.56148 -11.1125 6.17393 6.17393 -25.4 2.24506 2.24506 -25.4 1.5875 2.74963 -11.1125 6.17393 6.17393 -11.1125 7.56148 4.36562 -25.4 2.74963 1.5875 -25.4 2.24506 2.24506 0 6.17393 6.17393 0 7.56148 4.36562 -11.1125 7.56148 4.36562 -11.1125 6.17393 6.17393 0 4.36562 7.56148 0 6.17393 6.17393 -11.1125 6.17393 6.17393 -11.1125 4.36562 7.56148 0 2.25981 8.43374 0 4.36562 7.56148 -11.1125 4.36562 7.56148 -11.1125 2.25981 8.43374 0 0 8.73125 0 2.25981 8.43374 -11.1125 2.25981 8.43374 -11.1125 0 8.73125 0 -2.25981 8.43374 0 0 8.73125 -11.1125 0 8.73125 -11.1125 -2.25981 8.43374 0 -4.36562 7.56148 0 -2.25981 8.43374 -11.1125 -2.25981 8.43374 -11.1125 -4.36562 7.56148 0 -6.17393 6.17393 0 -4.36562 7.56148 -11.1125 -4.36562 7.56148 -11.1125 -6.17393 6.17393 0 -7.56148 4.36562 0 -6.17393 6.17393 -11.1125 -6.17393 6.17393 -11.1125 -7.56148 4.36562 0 -8.43374 2.25981 0 -7.56148 4.36562 -11.1125 -7.56148 4.36562 -11.1125 -8.43374 2.25981 0 -8.73125 0 0 -8.43374 2.25981 -11.1125 -8.43374 2.25981 -11.1125 -8.73125 0 0 -8.43374 -2.25981 0 -8.73125 0 -11.1125 -8.73125 0 -11.1125 -8.43374 -2.25981 0 -7.56148 -4.36562 0 -8.43374 -2.25981 -11.1125 -8.43374 -2.25981 -11.1125 -7.56148 -4.36562 0 -6.17393 -6.17392 0 -7.56148 -4.36562 -11.1125 -7.56148 -4.36562 -11.1125 -6.17393 -6.17392 0 -4.36562 -7.56148 0 -6.17393 -6.17392 -11.1125 -6.17393 -6.17392 -11.1125 -4.36562 -7.56148 0 -2.25981 -8.43374 0 -4.36562 -7.56148 -11.1125 -4.36562 -7.56148 -11.1125 -2.25981 -8.43374 0 0 -8.73125 0 -2.25981 -8.43374 -11.1125 -2.25981 -8.43374 -11.1125 0 -8.73125 0 2.25981 -8.43374 0 0 -8.73125 -11.1125 0 -8.73125 -11.1125 2.25981 -8.43374 0 4.36562 -7.56148 0 2.25981 -8.43374 -11.1125 2.25981 -8.43374 -11.1125 4.36562 -7.56148 0 6.17392 -6.17393 0 4.36562 -7.56148 -11.1125 4.36562 -7.56148 -11.1125 6.17392 -6.17393 0 7.56148 -4.36563 0 6.17392 -6.17393 -11.1125 6.17392 -6.17393 -11.1125 7.56148 -4.36563 0 8.43374 -2.25981 0 7.56148 -4.36563 -11.1125 7.56148 -4.36563 -11.1125 8.43374 -2.25981 -11.1125 8.43374 -2.25981 -11.1125 7.56148 -4.36563 -25.4 2.74963 -1.5875 -25.4 3.06681 -0.82175 -25.4 3.06681 -0.82175 -25.4 2.74963 -1.5875 -25.4 2.24506 -2.24506 -25.4 1.5875 -2.74963 -25.4 0.82175 -3.06681 -25.4 0 -3.175 -25.4 -0.82175 -3.06681 -25.4 -1.5875 -2.74963 -25.4 -2.24506 -2.24506 -25.4 -2.74963 -1.5875 -25.4 -3.06681 -0.821751 -25.4 -3.175 0 -25.4 -3.06681 0.821751 -25.4 -2.74963 1.5875 -25.4 -2.24506 2.24506 -25.4 -1.5875 2.74963 -25.4 -0.82175 3.06681 -25.4 0 3.175 -25.4 0.821751 3.06681 -25.4 1.5875 2.74963 -25.4 2.24506 2.24506 -25.4 2.74963 1.5875 -25.4 3.06681 0.82175 -25.4 3.175 0 -11.1125 7.56148 4.36562 -11.1125 8.43374 2.25981 -25.4 3.06681 0.82175 -25.4 2.74963 1.5875 0 7.56148 4.36562 0 8.43374 2.25981 -11.1125 8.43374 2.25981 -11.1125 7.56148 4.36562 0 8.73125 0 0 8.43374 2.25981 0 7.56148 4.36562 0 6.17393 6.17393 0 4.36562 7.56148 0 2.25981 8.43374 0 0 8.73125 0 -2.25981 8.43374 0 -4.36562 7.56148 0 -6.17393 6.17393 0 -7.56148 4.36562 0 -8.43374 2.25981 0 -8.73125 0 0 -8.43374 -2.25981 0 -7.56148 -4.36562 0 -6.17393 -6.17392 0 -4.36562 -7.56148 0 -2.25981 -8.43374 0 0 -8.73125 0 2.25981 -8.43374 0 4.36562 -7.56148 0 6.17392 -6.17393 0 7.56148 -4.36563 0 8.43374 -2.25981 0 8.43374 2.25981 0 8.73125 0 -11.1125 8.73125 0 -11.1125 8.43374 2.25981 -11.1125 8.43374 2.25981 -11.1125 8.73125 0 -25.4 3.175 0 -25.4 3.06681 0.82175 + + + + + + + + + + -0.184484 0.982835 0 -0.184484 0.949347 -0.254372 -0.362438 0.900251 -0.241218 -0.362438 0.932008 0 0 1 0 0 0.965932 -0.258797 -0.184484 0.949347 -0.254372 -0.184484 0.982835 0 -0.184484 0.851165 -0.491409 -0.184484 0.694968 -0.694972 -0.362438 0.659017 -0.659042 -0.362438 0.807152 -0.465987 -0.184484 0.694968 -0.694972 -0.184484 0.491409 -0.851165 -0.362438 0.465987 -0.807152 -0.362438 0.659017 -0.659042 -0.184484 0.491409 -0.851165 -0.184484 0.254372 -0.949347 -0.362438 0.241218 -0.900251 -0.362438 0.465987 -0.807152 -0.184484 0.254372 -0.949347 -0.184484 0 -0.982835 -0.362438 0 -0.932008 -0.362438 0.241218 -0.900251 -0.184484 0 -0.982835 -0.184484 -0.254372 -0.949347 -0.362438 -0.241218 -0.900251 -0.362438 0 -0.932008 -0.184484 -0.254372 -0.949347 -0.184484 -0.491409 -0.851165 -0.362438 -0.465987 -0.807152 -0.362438 -0.241218 -0.900251 -0.184484 -0.491409 -0.851165 -0.184484 -0.694972 -0.694968 -0.362438 -0.659042 -0.659017 -0.362438 -0.465987 -0.807152 -0.184484 -0.694968 -0.694972 -0.184484 -0.851165 -0.491409 -0.362438 -0.807152 -0.465987 -0.362438 -0.659042 -0.659017 -0.184484 -0.851165 -0.491409 -0.184484 -0.949347 -0.254372 -0.362438 -0.900251 -0.241218 -0.362438 -0.807152 -0.465987 -0.184484 -0.949347 -0.254372 -0.184484 -0.982835 0 -0.362438 -0.932008 0 -0.362438 -0.900251 -0.241218 -0.184484 -0.982835 0 -0.184484 -0.949347 0.254372 -0.362438 -0.900251 0.241218 -0.362438 -0.932008 0 -0.184484 -0.949347 0.254372 -0.184484 -0.851165 0.491409 -0.362438 -0.807152 0.465987 -0.362438 -0.900251 0.241218 -0.184484 -0.851165 0.491409 -0.184484 -0.694972 0.694968 -0.362438 -0.659017 0.659042 -0.362438 -0.807152 0.465987 -0.184484 -0.694968 0.694972 -0.184484 -0.491409 0.851165 -0.362438 -0.465987 0.807152 -0.362438 -0.659017 0.659042 -0.184484 -0.491409 0.851165 -0.184484 -0.254372 0.949347 -0.362438 -0.241218 0.900251 -0.362438 -0.465987 0.807152 -0.184484 -0.254372 0.949347 -0.184484 0 0.982835 -0.362438 0 0.932008 -0.362438 -0.241218 0.900251 -0.184484 0 0.982835 -0.184484 0.254372 0.949347 -0.362438 0.241218 0.900251 -0.362438 0 0.932008 -0.184484 0.254372 0.949347 -0.184484 0.491409 0.851165 -0.362438 0.465987 0.807152 -0.362438 0.241218 0.900251 -0.184484 0.491409 0.851165 -0.184484 0.694968 0.694972 -0.362438 0.659017 0.659042 -0.362438 0.465987 0.807152 -0.184484 0.694968 0.694972 -0.184484 0.851165 0.491409 -0.362438 0.807152 0.465987 -0.362438 0.659017 0.659042 0 0.707083 0.70713 0 0.866034 0.499985 -0.184484 0.851165 0.491409 -0.184484 0.694968 0.694972 0 0.499985 0.866034 0 0.707083 0.70713 -0.184484 0.694968 0.694972 -0.184484 0.491409 0.851165 0 0.258797 0.965932 0 0.499985 0.866034 -0.184484 0.491409 0.851165 -0.184484 0.254372 0.949347 0 0 1 0 0.258797 0.965932 -0.184484 0.254372 0.949347 -0.184484 0 0.982835 0 -0.258797 0.965932 0 0 1 -0.184484 0 0.982835 -0.184484 -0.254372 0.949347 0 -0.499985 0.866034 0 -0.258797 0.965932 -0.184484 -0.254372 0.949347 -0.184484 -0.491409 0.851165 0 -0.707083 0.70713 0 -0.499985 0.866034 -0.184484 -0.491409 0.851165 -0.184484 -0.694968 0.694972 0 -0.866034 0.499985 0 -0.707083 0.70713 -0.184484 -0.694968 0.694972 -0.184484 -0.851165 0.491409 0 -0.965932 0.258797 0 -0.866034 0.499985 -0.184484 -0.851165 0.491409 -0.184484 -0.949347 0.254372 0 -1 0 0 -0.965932 0.258797 -0.184484 -0.949347 0.254372 -0.184484 -0.982835 0 0 -0.965932 -0.258797 0 -1 0 -0.184484 -0.982835 0 -0.184484 -0.949347 -0.254372 0 -0.866034 -0.499985 0 -0.965932 -0.258797 -0.184484 -0.949347 -0.254372 -0.184484 -0.851165 -0.491409 0 -0.70713 -0.707083 0 -0.866034 -0.499985 -0.184484 -0.851165 -0.491409 -0.184484 -0.694972 -0.694968 0 -0.499985 -0.866034 0 -0.70713 -0.707083 -0.184484 -0.694972 -0.694968 -0.184484 -0.491409 -0.851165 0 -0.258797 -0.965932 0 -0.499985 -0.866034 -0.184484 -0.491409 -0.851165 -0.184484 -0.254372 -0.949347 0 0 -1 0 -0.258797 -0.965932 -0.184484 -0.254372 -0.949347 -0.184484 0 -0.982835 0 0.258797 -0.965932 0 0 -1 -0.184484 0 -0.982835 -0.184484 0.254372 -0.949347 0 0.499985 -0.866034 0 0.258797 -0.965932 -0.184484 0.254372 -0.949347 -0.184484 0.491409 -0.851165 0 0.707083 -0.70713 0 0.499985 -0.866034 -0.184484 0.491409 -0.851165 -0.184484 0.694968 -0.694972 0 0.866034 -0.499985 0 0.707083 -0.70713 -0.184484 0.694968 -0.694972 -0.184484 0.851165 -0.491409 0 0.965932 -0.258797 0 0.866034 -0.499985 -0.184484 0.851165 -0.491409 -0.184484 0.949347 -0.254372 -0.184484 0.949347 -0.254372 -0.184484 0.851165 -0.491409 -0.362438 0.807152 -0.465987 -0.362438 0.900251 -0.241218 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.184484 0.851165 0.491409 -0.184484 0.949347 0.254372 -0.362438 0.900251 0.241218 -0.362438 0.807152 0.465987 0 0.866034 0.499985 0 0.965932 0.258797 -0.184484 0.949347 0.254372 -0.184484 0.851165 0.491409 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.965932 0.258797 0 1 0 -0.184484 0.982835 0 -0.184484 0.949347 0.254372 -0.184484 0.949347 0.254372 -0.184484 0.982835 0 -0.362438 0.932008 0 -0.362438 0.900251 0.241218 + + + + + + + + + + + + + + +

0 0 1 1 2 2 3 3

+

4 4 5 5 6 6 7 7

+

8 8 9 9 10 10 11 11

+

12 12 13 13 14 14 15 15

+

16 16 17 17 18 18 19 19

+

20 20 21 21 22 22 23 23

+

24 24 25 25 26 26 27 27

+

28 28 29 29 30 30 31 31

+

32 32 33 33 34 34 35 35

+

36 36 37 37 38 38 39 39

+

40 40 41 41 42 42 43 43

+

44 44 45 45 46 46 47 47

+

48 48 49 49 50 50 51 51

+

52 52 53 53 54 54 55 55

+

56 56 57 57 58 58 59 59

+

60 60 61 61 62 62 63 63

+

64 64 65 65 66 66 67 67

+

68 68 69 69 70 70 71 71

+

72 72 73 73 74 74 75 75

+

76 76 77 77 78 78 79 79

+

80 80 81 81 82 82 83 83

+

84 84 85 85 86 86 87 87

+

88 88 89 89 90 90 91 91

+

92 92 93 93 94 94 95 95

+

96 96 97 97 98 98 99 99

+

100 100 101 101 102 102 103 103

+

104 104 105 105 106 106 107 107

+

108 108 109 109 110 110 111 111

+

112 112 113 113 114 114 115 115

+

116 116 117 117 118 118 119 119

+

120 120 121 121 122 122 123 123

+

124 124 125 125 126 126 127 127

+

128 128 129 129 130 130 131 131

+

132 132 133 133 134 134 135 135

+

136 136 137 137 138 138 139 139

+

140 140 141 141 142 142 143 143

+

144 144 145 145 146 146 147 147

+

148 148 149 149 150 150 151 151

+

152 152 153 153 154 154 155 155

+

156 156 157 157 158 158 159 159

+

160 160 161 161 162 162 163 163

+

164 164 165 165 166 166 167 167

+

168 168 169 169 170 170 171 171

+

172 172 173 173 174 174 175 175

+

176 176 177 177 178 178 179 179 180 180 181 181 182 182 183 183 184 184 185 185 186 186 187 187 188 188 189 189 190 190 191 191 192 192 193 193 194 194 195 195 196 196 197 197 198 198 199 199

+

200 200 201 201 202 202 203 203

+

204 204 205 205 206 206 207 207

+

208 208 209 209 210 210 211 211 212 212 213 213 214 214 215 215 216 216 217 217 218 218 219 219 220 220 221 221 222 222 223 223 224 224 225 225 226 226 227 227 228 228 229 229 230 230 231 231

+

232 232 233 233 234 234 235 235

+

236 236 237 237 238 238 239 239

+
+
+ + + CAT3DBagRep + + +
+
+ + + + + + + 0.6 0.498039 0.4 1 + + + 0.6 0.498039 0.4 1 + + + + + + + + + + + 0.847059 0.717647 0.54902 1 + + + 0.847059 0.717647 0.54902 1 + + + + + + + + + + + 1 0.658824 0.498039 1 + + + 1 0.658824 0.498039 1 + + + + + + + + + + + + + + + + + + + + + 1 0 0 + + 0 + 0 + + + + + + 1 0 0 + + 0 + 0 + + + + + + 1 0 0 + + + + + 1 0 0 + + 0 + 0 + + + + + + 1 0 0 + + 0 + 0 + + + + + + 1 0 0 + + 0 + 0 + + + + + + 1 0 0 + + 0 + 0 + + + + + + 1 0 0 + + 0 + 0 + + + + + + 1 0 0 + + 0 + 0 + + + + + + -1 0 0 + + + + + + + + + + + + + + + + + + + -95 0 0 + + + + 157.985 169.448 805.771 + 0 1 0 87.8861 + + + 95.25 0 -98.552 + + + -289.5 0 -104.775 + + -95 2.84217e-014 -5.82206e-006 + + 82.3 0 5.33838e-006 + + -95 2.84217e-014 -5.33838e-006 + + -97.532 0 6.88014e-006 + + -95 2.84217e-014 -6.88014e-006 + + 44.2 0 4.9454e-006 + + -95 2.84217e-014 -4.9454e-006 + + + + + + + + + + + + -341.249 0 -98.552 + + + -211.074 0 -104.775 + 0 0 0 180 + + + -50.8 0 4.01244e-006 + + + + + + + + + + + + kinmodel.0/joint_2 + + + + + + kinmodel.0/pseudojoint_1 + + + + + = -DOF(10) + + + + + + + + + + + libkinscenes.kinScene/inst_kinmodel.0 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_0/axis0 + + + 0 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_1/axis0 + + + 0 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_2/axis0 + + + -0 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_3/axis0 + + + 0 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_4/axis0 + + + 0 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_5/axis0 + + + 0 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_6/axis0 + + + 0 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_7/axis0 + + + 0 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_8/axis0 + + + 0 + + + libkinscenes.kinScene/inst_kinmodel.0/pseudojoint_1/axis0 + + + 0 + + + + + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0 + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_4_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_4_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_4_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_4_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_5_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_5_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_6_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_6_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_6_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_6_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_6_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_6_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_7_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_7_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_7_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_7_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_8_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_8_axis0_value + + + + +
diff --git a/collada_urdf/test/pr2.urdf b/collada_urdf/test/pr2.urdf new file mode 100644 index 0000000..ae16a78 --- /dev/null +++ b/collada_urdf/test/pr2.urdf @@ -0,0 +1,3399 @@ + + + + + + + + + + + + + + + + + + + + true + 1000.0 + + + + true + 1.0 + 5 + + power_state + 10.0 + 87.78 + -474 + 525 + 15.52 + 16.41 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 + 640 + 1 + 0.0 0.0 0.0 + false + -129.998394137 + 129.998394137 + 0.05 + 10.0 + 0.01 + 20 + + 0.005 + true + 20 + base_scan + base_laser_link + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + true + + base_link_geom + 100.0 + + true + 100.0 + base_bumper + + + + + + + + true + 100.0 + base_link + base_pose_ground_truth + 0.01 + map + 25.7 25.7 0 + + 0 0 0 + + + base_footprint + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + torso_lift_link_geom + 100.0 + + true + 100.0 + torso_lift_bumper + + + + + + + + + -52143.33 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + 100.0 + imu_link + torso_lift_imu/data + 2.89e-08 + map + 0 0 0 + 0 0 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + R8G8B8 + 2448 2050 + 45 + 0.1 + 100 + 20.0 + + true + 20.0 + /prosilica/image_raw + /prosilica/camera_info + /prosilica/request_image + high_def_frame + 1224.5 + 1224.5 + 1025.5 + 2955 + + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + BAYER_BGGR8 + 90 + 0.1 + 100 + 25.0 + + true + 25.0 + wide_stereo/left/image_raw + wide_stereo/left/camera_info + wide_stereo_optical_frame + 0 + 320.5 + 320.5 + 240.5 + + + 320 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + + + + true + PR2/Blue + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + BAYER_BGGR8 + 90 + 0.1 + 100 + 25.0 + + true + 25.0 + wide_stereo/right/image_raw + wide_stereo/right/camera_info + wide_stereo_optical_frame + 0.09 + 320.5 + 320.5 + 240.5 + + + 320 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + + + + true + PR2/Blue + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 45 + 0.1 + 100 + 25.0 + + true + 25.0 + narrow_stereo/left/image_raw + narrow_stereo/left/camera_info + narrow_stereo_optical_frame + 0 + 320.5 + 320.5 + 240.5 + + + 772.55 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + + + + true + PR2/Blue + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 45 + 0.1 + 100 + 25.0 + + true + 25.0 + narrow_stereo/right/image_raw + narrow_stereo/right/camera_info + narrow_stereo_optical_frame + 0.09 + 320.5 + 320.5 + 240.5 + + + 772.55 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + + + + true + PR2/Blue + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 + 640 + 1 + 0.0 0.0 0.0 + false + -79.9999999086 + 79.9999999086 + 0.05 + 10.0 + 0.01 + 20 + + 0.005 + true + 20 + tilt_scan + laser_tilt_link + + + + + + + + + + + -6.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + 32.6525111499 + + + + r_shoulder_pan_link_geom + 100.0 + + true + 100.0 + r_shoulder_pan_bumper + + + + + true + + + + + + + + r_shoulder_lift_link_geom + 100.0 + + true + 100.0 + r_r_shoulder_lift_bumper + + + + true + + + + + + + + + 63.1552452977 + + + + + 61.8948225713 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + r_upper_arm_link_geom + + 100.0 + + true + 100.0 + r_upper_arm_bumper + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + -90.5142857143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -1.0 + + + + r_elbow_flex_link_geom + 100.0 + + true + 100.0 + r_elbow_flex_bumper + + + + + true + + + + + + + + + -36.167452007 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + r_forearm_link_geom + 100.0 + + true + 100.0 + r_forearm_bumper + + + + + + + true + + r_wrist_flex_link_geom + 100.0 + + true + 100.0 + r_wrist_flex_bumper + + + + + + + + + + + true + + r_wrist_roll_link_geom + 100.0 + + true + 100.0 + r_wrist_roll_bumper + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + r_gripper_l_finger_link_geom + 100.0 + + true + 100.0 + r_gripper_l_finger_bumper + + + + + + + + + + + + + + + + + + true + + r_gripper_r_finger_link_geom + 100.0 + + true + 100.0 + r_gripper_r_finger_bumper + + + + + + + + + + + + + + + + + true + false + + r_gripper_l_finger_tip_link_geom + 100.0 + + true + 100.0 + r_gripper_l_finger_tip_bumper + + + + + + + + + + + + + + + + + true + false + + r_gripper_r_finger_tip_link_geom + 100.0 + + true + 100.0 + r_gripper_r_finger_tip_bumper + + + + + + + + + + + + true + 100.0 + r_gripper_l_finger_link + r_gripper_l_finger_pose_ground_truth + 0.0 + map + + + + true + 100.0 + r_gripper_l_finger_link + r_gripper_l_finger_force_ground_truth + r_gripper_l_finger_link + + + + + + + + + + + + + + + + true + + r_gripper_palm_link_geom + 100.0 + + true + 100.0 + r_gripper_palm_bumper + + + + + + + true + + + + + + true + 0.01 + 0.0001 + 0 + 0 + 0.0001 + 0 + 0.0001 + 0 + 0 + 0 + 0.82025 0.188 0.790675 + 0 -0 0 + + 0 0 0 + 0 -0 0 + 0.0 0.0 0.0 + + 0 0 0 + 0 -0 0 + 0.0 0.0 0.0 + unit_box + PR2/White + + + true + false + + + r_gripper_float_link + r_gripper_palm_link + r_gripper_float_link + 1 0 0 + -0.05 + 0.001 + + + r_gripper_l_finger_tip_link + r_gripper_float_link + r_gripper_l_finger_tip_link + 0 1 0 + 0 0 0 + + + r_gripper_r_finger_tip_link + r_gripper_float_link + r_gripper_r_finger_tip_link + 0 1 0 + 0 0 0 + + + + + + true + 100.0 + r_gripper_palm_link + r_gripper_palm_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + map + + + + true + 100.0 + r_gripper_tool_frame + r_gripper_tool_frame_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + /map + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + 32.6525111499 + + + + l_shoulder_pan_link_geom + 100.0 + + true + 100.0 + l_shoulder_pan_bumper + + + + + true + + + + + + + + l_shoulder_lift_link_geom + 100.0 + + true + 100.0 + l_r_shoulder_lift_bumper + + + + true + + + + + + + + + 63.1552452977 + + + + + 61.8948225713 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + l_upper_arm_link_geom + + 100.0 + + true + 100.0 + l_upper_arm_bumper + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + -90.5142857143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -1.0 + + + + l_elbow_flex_link_geom + 100.0 + + true + 100.0 + l_elbow_flex_bumper + + + + + true + + + + + + + + + -36.167452007 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + l_forearm_link_geom + 100.0 + + true + 100.0 + l_forearm_bumper + + + + + + + true + + l_wrist_flex_link_geom + 100.0 + + true + 100.0 + l_wrist_flex_bumper + + + + + + + + + + + true + + l_wrist_roll_link_geom + 100.0 + + true + 100.0 + l_wrist_roll_bumper + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + l_gripper_l_finger_link_geom + 100.0 + + true + 100.0 + l_gripper_l_finger_bumper + + + + + + + + + + + + + + + + + + true + + l_gripper_r_finger_link_geom + 100.0 + + true + 100.0 + l_gripper_r_finger_bumper + + + + + + + + + + + + + + + + + true + false + + l_gripper_l_finger_tip_link_geom + 100.0 + + true + 100.0 + l_gripper_l_finger_tip_bumper + + + + + + + + + + + + + + + + + true + false + + l_gripper_r_finger_tip_link_geom + 100.0 + + true + 100.0 + l_gripper_r_finger_tip_bumper + + + + + + + + + + + + true + 100.0 + l_gripper_l_finger_link + l_gripper_l_finger_pose_ground_truth + 0.0 + map + + + + true + 100.0 + l_gripper_l_finger_link + l_gripper_l_finger_force_ground_truth + l_gripper_l_finger_link + + + + + + + + + + + + + + + + true + + l_gripper_palm_link_geom + 100.0 + + true + 100.0 + l_gripper_palm_bumper + + + + + + + true + + + + + + true + 0.01 + 0.0001 + 0 + 0 + 0.0001 + 0 + 0.0001 + 0 + 0 + 0 + 0.82025 0.188 0.790675 + 0 -0 0 + + 0 0 0 + 0 -0 0 + 0.0 0.0 0.0 + + 0 0 0 + 0 -0 0 + 0.0 0.0 0.0 + unit_box + PR2/White + + + true + false + + + l_gripper_float_link + l_gripper_palm_link + l_gripper_float_link + 1 0 0 + -0.05 + 0.001 + + + l_gripper_l_finger_tip_link + l_gripper_float_link + l_gripper_l_finger_tip_link + 0 1 0 + 0 0 0 + + + l_gripper_r_finger_tip_link + l_gripper_float_link + l_gripper_r_finger_tip_link + 0 1 0 + 0 0 0 + + + + + + true + 100.0 + l_gripper_palm_link + l_gripper_palm_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + map + + + + true + 100.0 + l_gripper_tool_frame + l_gripper_tool_frame_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + /map + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 90 + 0.1 + 100 + 25.0 + + true + 25.0 + l_forearm_cam/image_raw + l_forearm_cam/camera_info + l_forearm_cam_frame + 0 + 320.5 + 320.5 + 240.5 + + + 320 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + + + + true + PR2/Blue + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 90 + 0.1 + 100 + 25.0 + + true + 25.0 + r_forearm_cam/image_raw + r_forearm_cam/camera_info + r_forearm_cam_frame + 0 + 320.5 + 320.5 + 240.5 + + + 320 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + + + + true + PR2/Blue + + + diff --git a/collada_urdf/test/simple.dae b/collada_urdf/test/simple.dae new file mode 100644 index 0000000..de90f7f --- /dev/null +++ b/collada_urdf/test/simple.dae @@ -0,0 +1,392 @@ + + + + + CPFCatiaPlugin + + 2009-02-17T14:57:28Z + 2009-02-17T14:57:28Z + + Z_UP + + + + + + + + + + + + + + + + + + + 1 0 0 0 0 1 0 0 0 0 1 30000 0 0 0 1 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -30000 -0 0 -0 1 + 1 0 0 0 0 1 0 0 0 0 1 30000 0 0 0 1 + -1 -0 -0 0 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -30000 -0 0 -0 1 + 1 0 0 0 0 1 0 0 0 0 1 30000 0 0 0 1 + + + + + + + + + + + + + + 1 0 0 0 0 1 0 0 0 0 1 55000 0 0 0 1 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -55000 -0 0 -0 1 + 1 0 0 0 0 1 0 0 0 0 1 30000 0 0 0 1 + -1 -0 -0 0 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -30000 -0 0 -0 1 + 1 0 0 0 0 1 0 0 0 0 1 55000 0 0 0 1 + -1 -0 -0 0 + 1 -0 0 -0 -0 1 -0 0 0 -0 1 -55000 -0 0 -0 1 + 1 0 0 0 0 1 0 0 0 0 1 55000 0 0 0 1 + + + + + + + + + + + + + + + + + + + + -3000 -3000 0 -3000 -3000 0 -3000 -3000 0 -3000 3000 0 -3000 3000 0 -3000 3000 0 -1500 0 15000 0 -1500 15000 0 0 30000 0 0 30000 0 0 30000 0 0 30000 0 1500 15000 1500 0 15000 3000 -3000 0 3000 -3000 0 3000 -3000 0 3000 3000 0 3000 3000 0 3000 3000 0 + + + + + + + + + + -0.995039 0 0.0994903 0 -0.995039 0.0994903 0 0 -1 -0.995039 0 0.0994903 0 0 -1 0 0.995039 0.0994903 -0.995039 0 0.0994903 0 -0.995039 0.0994903 -0.995039 0 0.0994903 0 -0.995039 0.0994903 0 0.995039 0.0994903 0.995039 0 0.0994903 0 0.995039 0.0994903 0.995039 0 0.0994903 0 -0.995039 0.0994903 0 0 -1 0.995039 0 0.0994903 0 0 -1 0 0.995039 0.0994903 0.995039 0 0.0994903 + + + + + + + + + + + + + + +

17 17 15 15 2 2 2 2 4 4 17 17

+
+ + + +

1 1 7 7 9 9 7 7 1 1 14 14 14 14 9 9 7 7

+
+ + + +

16 16 13 13 11 11 13 13 16 16 19 19 19 19 11 11 13 13

+
+ + + +

18 18 12 12 10 10 12 12 18 18 5 5 5 5 10 10 12 12

+
+ + + +

3 3 6 6 8 8 6 6 3 3 0 0 0 0 8 8 6 6

+
+
+ + + CAT3DBagRep + + +
+ + + + -2000 -2000 0 -2000 -2000 0 -2000 -2000 0 -2000 2000 0 -2000 2000 0 -2000 2000 0 -1000 0 12500 0 -1000 12500 0 0 25000 0 0 25000 0 0 25000 0 0 25000 0 1000 12500 1000 0 12500 2000 -2000 0 2000 -2000 0 2000 -2000 0 2000 2000 0 2000 2000 0 2000 2000 0 + + + + + + + + + + -0.996815 0 0.0797449 0 -0.996815 0.0797449 0 0 -1 -0.996815 0 0.0797449 0 0 -1 0 0.996815 0.0797449 -0.996815 0 0.0797449 0 -0.996815 0.0797449 -0.996815 0 0.0797449 0 -0.996815 0.0797449 0 0.996815 0.0797449 0.996815 0 0.0797449 0 0.996815 0.0797449 0.996815 0 0.0797449 0 -0.996815 0.0797449 0 0 -1 0.996815 0 0.0797449 0 0 -1 0 0.996815 0.0797449 0.996815 0 0.0797449 + + + + + + + + + + + + + + +

17 17 15 15 2 2 2 2 4 4 17 17

+
+ + + +

1 1 7 7 9 9 7 7 1 1 14 14 14 14 9 9 7 7

+
+ + + +

16 16 13 13 11 11 13 13 16 16 19 19 19 19 11 11 13 13

+
+ + + +

18 18 12 12 10 10 12 12 18 18 5 5 5 5 10 10 12 12

+
+ + + +

3 3 6 6 8 8 6 6 3 3 0 0 0 0 8 8 6 6

+
+
+ + + CAT3DBagRep + + +
+ + + + -1000 -1000 0 -1000 -1000 0 -1000 -1000 0 -1000 1000 0 -1000 1000 0 -1000 1000 0 -500 0 2500 0 -500 2500 0 0 5000 0 0 5000 0 0 5000 0 0 5000 0 500 2500 500 0 2500 1000 -1000 0 1000 -1000 0 1000 -1000 0 1000 1000 0 1000 1000 0 1000 1000 0 + + + + + + + + + + -0.980582 0 0.196112 0 -0.980582 0.196112 0 0 -1 -0.980582 0 0.196112 0 0 -1 0 0.980582 0.196112 -0.980582 0 0.196112 0 -0.980582 0.196112 -0.980582 0 0.196112 0 -0.980582 0.196112 0 0.980582 0.196112 0.980582 0 0.196112 0 0.980582 0.196112 0.980582 0 0.196112 0 -0.980582 0.196112 0 0 -1 0.980582 0 0.196112 0 0 -1 0 0.980582 0.196112 0.980582 0 0.196112 + + + + + + + + + + + + + + +

17 17 15 15 2 2 2 2 4 4 17 17

+
+ + + +

1 1 7 7 9 9 7 7 1 1 14 14 14 14 9 9 7 7

+
+ + + +

16 16 13 13 11 11 13 13 16 16 19 19 19 19 11 11 13 13

+
+ + + +

18 18 12 12 10 10 12 12 18 18 5 5 5 5 10 10 12 12

+
+ + + +

3 3 6 6 8 8 6 6 3 3 0 0 0 0 8 8 6 6

+
+
+ + + CAT3DBagRep + + +
+
+ + + + + + + 1 0 0 1 + + + 1 0 0 1 + + + + + + + + + + + 0 1 0 1 + + + 0 1 0 1 + + + + + + + + + + + 0 0 1 1 + + + 0 0 1 1 + + + + + + + + + + + + + + + + + + + + + -1 -0 -0 + + -90 + 90 + + + + + + -1 -0 -0 + + 0 + 90 + + + + + + + + + + + + 0 0 30000 + + + 0 0 25000 + + + + + + + + + + + + + libkinscenes.kinScene/inst_kinmodel.0 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_1/axis0 + + + 0 + + + libkinscenes.kinScene/inst_kinmodel.0/joint_0/axis0 + + + 0 + + + + + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0 + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0_value + + + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 + + + libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value + + + + +
From 47c65893d6497bf7b6ce017e7762b4e810ab3dfb Mon Sep 17 00:00:00 2001 From: tfield Date: Thu, 4 Mar 2010 23:20:16 +0000 Subject: [PATCH 110/245] colladadom: fix include path --- colladadom/manifest.xml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/colladadom/manifest.xml b/colladadom/manifest.xml index 59b7739..25c8b47 100644 --- a/colladadom/manifest.xml +++ b/colladadom/manifest.xml @@ -10,9 +10,7 @@ http://ros.org/wiki/colladadom - + - - From 84a88a02ba2f9bfea58a9d4f933d81f45a3d7ce2 Mon Sep 17 00:00:00 2001 From: tfield Date: Thu, 4 Mar 2010 23:20:47 +0000 Subject: [PATCH 111/245] colladadom: copy system specific build artifacts (don't just assume linux) --- colladadom/Makefile | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/colladadom/Makefile b/colladadom/Makefile index 5c7e513..447fdc7 100644 --- a/colladadom/Makefile +++ b/colladadom/Makefile @@ -11,6 +11,17 @@ include $(shell rospack find mk)/download_unpack_build.mk ROOT = $(shell rospack find colladadom) +# Copied from dom/Makefile: +# os: 'linux', 'mac', 'windows', or 'ps3'. Use the 'uname' command to decide the +# default value. To detect when we're on Windows we'll check to see if we're +# running on Cygwin or MinGW. +OS := linux +ifneq ($(shell uname | grep -i darwin),) +OS := mac +else ifneq ($(or $(shell uname | grep -i cygwin),$(shell uname | grep -i mingw)),) +OS := windows +endif + installed: wiped $(SOURCE_DIR)/unpacked @echo "ROOT is: $(ROOT)" -mkdir -p $(ROOT)/include @@ -20,7 +31,7 @@ installed: wiped $(SOURCE_DIR)/unpacked cd $(SOURCE_DIR)/dom && make $(ROS_PARALLEL_JOBS) cp -rf $(SOURCE_DIR)/dom/include/* $(ROOT)/include/ mv $(ROOT)/include/1.5/dom $(ROOT)/include/dom - cp -f $(SOURCE_DIR)/dom/build/linux-1.5/*.* $(ROOT)/lib/ + cp -rf $(SOURCE_DIR)/dom/build/$(OS)-1.5/*.* $(ROOT)/lib/ touch installed wiped: Makefile From 6d5894e0f7db1513f05764756fd3956cf176eb49 Mon Sep 17 00:00:00 2001 From: tfield Date: Thu, 4 Mar 2010 23:22:00 +0000 Subject: [PATCH 112/245] colladadom: updated comments --- colladadom/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/colladadom/Makefile b/colladadom/Makefile index 447fdc7..223b1c4 100644 --- a/colladadom/Makefile +++ b/colladadom/Makefile @@ -11,7 +11,7 @@ include $(shell rospack find mk)/download_unpack_build.mk ROOT = $(shell rospack find colladadom) -# Copied from dom/Makefile: +# Copied from build/colladadom/dom/Makefile: # os: 'linux', 'mac', 'windows', or 'ps3'. Use the 'uname' command to decide the # default value. To detect when we're on Windows we'll check to see if we're # running on Cygwin or MinGW. From 4be755043daa10a6ce5f47b6f63625b9baa2b8a7 Mon Sep 17 00:00:00 2001 From: tfield Date: Fri, 5 Mar 2010 00:08:01 +0000 Subject: [PATCH 113/245] collada_urdf: use resource_retriever to load meshes --- collada_urdf/src/urdf_to_collada.cpp | 53 ++++++++++++++++++++-------- 1 file changed, 38 insertions(+), 15 deletions(-) diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp index 647baf0..91a9955 100644 --- a/collada_urdf/src/urdf_to_collada.cpp +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -34,23 +34,25 @@ /* Author: Tim Field */ -#include "dae.h" -#include "dae/daeErrorHandler.h" -#include "dom/domCOLLADA.h" +#include +#include +#include -#include "dae/domAny.h" -#include "dom/domConstants.h" -#include "dom/domTriangles.h" -#include "dae/daeDocument.h" -#include "dom/domTypes.h" -#include "dom/domElements.h" +#include +#include +#include +#include +#include +#include -#include "assimp/assimp.hpp" -#include "assimp/aiScene.h" -#include "assimp/aiPostProcess.h" +#include +#include +#include -#include "urdf/model.h" -#include "urdf/pose.h" +#include + +#include +#include using namespace std; @@ -257,11 +259,32 @@ public: } void loadMesh(const string& filename, domGeometryRef mesh) { - const aiScene* scene = importer_.ReadFile(filename.c_str(), aiProcess_SortByPType /* aiProcess_CalcTangentSpace | aiProcess_Triangulate | aiProcess_JoinIdenticalVertices */); + // Load the mesh + resource_retriever::MemoryResource resource; + resource_retriever::Retriever retriever; + try { + resource = retriever.get(filename.c_str()); + } + catch (resource_retriever::Exception& e) { + cerr << "Unable to load mesh file " << filename << ": " << e.what() << endl; + return; + } + + // Write the mesh to a temporary file + char tmp_filename[] = "/tmp/collada_urdf_mesh_XXXXXX"; + int mesh_fd = mkstemp(tmp_filename); + write(mesh_fd, resource.data, resource.size); + close(mesh_fd); + + // Import the mesh using assimp + const aiScene* scene = importer_.ReadFile(tmp_filename.c_str(), aiProcess_SortByPType /* aiProcess_CalcTangentSpace | aiProcess_Triangulate | aiProcess_JoinIdenticalVertices */); if (!scene) cerr << "Unable to import mesh " << filename << ": " << importer_.GetErrorString() << endl; else buildMesh(scene->mRootNode, mesh); + + // Delete the temporary file + unlink(tmp_filename); } void buildMesh(aiNode* node, daeElementRef parent) { From 56e1a300504cef10b6ae9d88a0ff6b2726196e59 Mon Sep 17 00:00:00 2001 From: tfield Date: Fri, 5 Mar 2010 00:08:42 +0000 Subject: [PATCH 114/245] collada_urdf: depends on resource_retriever --- collada_urdf/manifest.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/collada_urdf/manifest.xml b/collada_urdf/manifest.xml index cf11812..50b67c6 100644 --- a/collada_urdf/manifest.xml +++ b/collada_urdf/manifest.xml @@ -10,6 +10,5 @@ + - - From 8585e3a5be9626544a5dcb03b0eec627cd636b9b Mon Sep 17 00:00:00 2001 From: tfield Date: Fri, 5 Mar 2010 00:13:59 +0000 Subject: [PATCH 115/245] collada_urdf: write -> writeScene --- collada_urdf/src/urdf_to_collada.cpp | 40 ++++++++++++++-------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp index 91a9955..fabb82e 100644 --- a/collada_urdf/src/urdf_to_collada.cpp +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -204,7 +204,7 @@ public: cerr << "COLLADA warning: " << msg << "\n"; } - bool write() { + bool writeScene() { SCENE scene = createScene(); domPhysics_scene::domTechnique_commonRef common = daeSafeCast(scene.pscene->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); @@ -260,24 +260,24 @@ public: void loadMesh(const string& filename, domGeometryRef mesh) { // Load the mesh - resource_retriever::MemoryResource resource; - resource_retriever::Retriever retriever; - try { - resource = retriever.get(filename.c_str()); - } - catch (resource_retriever::Exception& e) { - cerr << "Unable to load mesh file " << filename << ": " << e.what() << endl; - return; - } - - // Write the mesh to a temporary file - char tmp_filename[] = "/tmp/collada_urdf_mesh_XXXXXX"; - int mesh_fd = mkstemp(tmp_filename); - write(mesh_fd, resource.data, resource.size); - close(mesh_fd); - - // Import the mesh using assimp - const aiScene* scene = importer_.ReadFile(tmp_filename.c_str(), aiProcess_SortByPType /* aiProcess_CalcTangentSpace | aiProcess_Triangulate | aiProcess_JoinIdenticalVertices */); + resource_retriever::MemoryResource resource; + resource_retriever::Retriever retriever; + try { + resource = retriever.get(filename.c_str()); + } + catch (resource_retriever::Exception& e) { + cerr << "Unable to load mesh file " << filename << ": " << e.what() << endl; + return; + } + + // Write the mesh to a temporary file + char tmp_filename[] = "/tmp/collada_urdf_mesh_XXXXXX"; + int mesh_fd = mkstemp(tmp_filename); + write(mesh_fd, resource.data.get(), resource.size); + close(mesh_fd); + + // Import the mesh using assimp + const aiScene* scene = importer_.ReadFile(tmp_filename, aiProcess_SortByPType /* aiProcess_CalcTangentSpace | aiProcess_Triangulate | aiProcess_JoinIdenticalVertices */); if (!scene) cerr << "Unable to import mesh " << filename << ": " << importer_.GetErrorString() << endl; else @@ -586,7 +586,7 @@ int main(int argc, char** argv) } ColladaWriter* writer = new ColladaWriter(&robot); - writer->write(); + writer->writeScene(); delete writer; return 0; From ca385b20d4a2e6dcf59934f4b3ecafae4e47d6bb Mon Sep 17 00:00:00 2001 From: tfield Date: Fri, 5 Mar 2010 00:17:27 +0000 Subject: [PATCH 116/245] colladadom: updating build flags for osx (thanks to gerkey) --- colladadom/manifest.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/colladadom/manifest.xml b/colladadom/manifest.xml index 25c8b47..f345ed9 100644 --- a/colladadom/manifest.xml +++ b/colladadom/manifest.xml @@ -11,6 +11,7 @@ + From 6fd7f8a489ef6f984c7a8db787f36206c176d03a Mon Sep 17 00:00:00 2001 From: tfield Date: Fri, 5 Mar 2010 02:40:48 +0000 Subject: [PATCH 117/245] collada_urdf: added binary STLLoader --- collada_urdf/CMakeLists.txt | 2 +- collada_urdf/src/STLLoader.cpp | 148 +++++++++++++++++++++++++++ collada_urdf/src/STLLoader.h | 96 +++++++++++++++++ collada_urdf/src/urdf_to_collada.cpp | 57 +++++++---- 4 files changed, 284 insertions(+), 19 deletions(-) create mode 100644 collada_urdf/src/STLLoader.cpp create mode 100644 collada_urdf/src/STLLoader.h diff --git a/collada_urdf/CMakeLists.txt b/collada_urdf/CMakeLists.txt index 037d9e2..0763be9 100644 --- a/collada_urdf/CMakeLists.txt +++ b/collada_urdf/CMakeLists.txt @@ -3,4 +3,4 @@ include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake) set(ROS_BUILD_TYPE Debug) rosbuild_init() set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) -rosbuild_add_executable(urdf_to_collada src/urdf_to_collada.cpp) +rosbuild_add_executable(urdf_to_collada src/urdf_to_collada.cpp src/STLLoader.cpp) diff --git a/collada_urdf/src/STLLoader.cpp b/collada_urdf/src/STLLoader.cpp new file mode 100644 index 0000000..446310e --- /dev/null +++ b/collada_urdf/src/STLLoader.cpp @@ -0,0 +1,148 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redstributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Tim Field */ + +// STLLoader.cpp + +#include +#include +#include +#include + +#include "STLLoader.h" + +using namespace collada_urdf; + +Vector3::Vector3(float _x, float _y, float _z) : x(_x), y(_y), z(_z) { } + +bool Vector3::operator==(const Vector3& v) const { + return x == v.x && y == v.y && z == v.z; +} + +Mesh::Mesh() { +} + +bool Mesh::hasVertex(const Vector3& v) const { + for (std::vector::const_iterator i = vertices.begin(); i != vertices.end(); i++) + if (v == *i) + return true; + + return false; +} + +unsigned int Mesh::getVertexIndex(const Vector3& v) const { + for (unsigned int i = 0; i < vertices.size(); i++) + if (vertices[i] == v) + return true; + + return false; +} + +void Mesh::addVertex(const Vector3& v) { + vertices.push_back(v); +} + +void Mesh::addNormal(const Vector3& n) { + normals.push_back(n); +} + +void Mesh::addIndex(unsigned int i) { + indices.push_back(i); +} + +// + +Mesh* STLLoader::load(const std::string& filename) { + Mesh* mesh = new Mesh(); + + FILE* file = fopen(filename.c_str(), "r"); + readBinary(file, mesh); + fclose(file); + + return mesh; +} + +void STLLoader::readBinary(FILE* filein, Mesh* mesh) { + // 80 byte Header + for (int i = 0; i < 80; i++) + fgetc(filein); + + int face_num = readLongInt(filein); + + std::cout << "Reading " << face_num << " faces " << std::endl; + + for (int iface = 0; iface < face_num; iface++) { + Vector3 normal(readFloat(filein), readFloat(filein), readFloat(filein)); + for (int i = 0; i < 3; i++) { + Vector3 vertex(readFloat(filein), readFloat(filein), readFloat(filein)); + if (!mesh->hasVertex(vertex)) { + mesh->addVertex(vertex); + mesh->addNormal(normal); + } + mesh->addIndex(mesh->getVertexIndex(vertex)); + } + readShortInt(filein); // 2 byte attribute + } +} + +float STLLoader::readFloat(FILE* filein) { + float rval; + if (fread(&rval, sizeof(float), 1, filein) == 0) + std::cerr << "Error in STLLoader::readFloat" << std::endl; + return rval; +} + +uint32_t STLLoader::readLongInt(FILE* filein) { + union + { + uint32_t yint; + char ychar[4]; + } y; + y.ychar[0] = fgetc(filein); + y.ychar[1] = fgetc(filein); + y.ychar[2] = fgetc(filein); + y.ychar[3] = fgetc(filein); + + return y.yint; +} + +uint16_t STLLoader::readShortInt(FILE* filein) { + uint8_t c1 = fgetc(filein); + uint8_t c2 = fgetc(filein); + + uint16_t ival = c1 | (c2 << 8); + + return ival; +} diff --git a/collada_urdf/src/STLLoader.h b/collada_urdf/src/STLLoader.h new file mode 100644 index 0000000..d01e560 --- /dev/null +++ b/collada_urdf/src/STLLoader.h @@ -0,0 +1,96 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redstributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Tim Field */ + +// STLLoader.h + +#ifndef COLLADA_URDF_STLLOADER_HH +#define COLLADA_URDF_STLLOADER_HH + +#include +#include +#include + +#define LINE_MAX_LEN 256 +#define COR3_MAX 200000 +#define ORDER_MAX 10 +#define FACE_MAX 200000 + +namespace collada_urdf +{ + class Vector3 + { + public: + Vector3(float x, float y, float z); + + bool operator==(const Vector3& v) const; + + float x; + float y; + float z; + }; + + class Mesh + { + public: + Mesh(); + + bool hasVertex(const Vector3& v) const; + unsigned int getVertexIndex(const Vector3& v) const; + + void addVertex(const Vector3& v); + void addNormal(const Vector3& n); + void addIndex(unsigned int i); + + private: + std::vector vertices; + std::vector normals; + std::vector indices; + }; + + class STLLoader + { + public: + Mesh* load(const std::string& filename); + + private: + void readBinary(FILE* filein, Mesh* mesh); + uint32_t readLongInt(FILE* filein); + uint16_t readShortInt(FILE* filein); + float readFloat(FILE* filein); + }; +} + +#endif diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp index fabb82e..30efe46 100644 --- a/collada_urdf/src/urdf_to_collada.cpp +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -34,6 +34,8 @@ /* Author: Tim Field */ +// urdf_to_collada.cpp + #include #include #include @@ -54,8 +56,12 @@ #include #include +#include "STLLoader.h" + using namespace std; +namespace collada_urdf { + class ColladaWriter : public daeErrorHandler { public: @@ -226,6 +232,9 @@ public: for (map >::const_iterator i = robot_->links_.begin(); i != robot_->links_.end(); i++) { boost::shared_ptr urdf_link = i->second; + if (urdf_link->visual == NULL || urdf_link->visual->geometry == NULL) + continue; + switch (urdf_link->visual->geometry->type) { case urdf::Geometry::MESH: { urdf::Mesh* mesh = (urdf::Mesh*) urdf_link->visual->geometry.get(); @@ -269,25 +278,35 @@ public: cerr << "Unable to load mesh file " << filename << ": " << e.what() << endl; return; } - - // Write the mesh to a temporary file - char tmp_filename[] = "/tmp/collada_urdf_mesh_XXXXXX"; - int mesh_fd = mkstemp(tmp_filename); - write(mesh_fd, resource.data.get(), resource.size); - close(mesh_fd); - - // Import the mesh using assimp - const aiScene* scene = importer_.ReadFile(tmp_filename, aiProcess_SortByPType /* aiProcess_CalcTangentSpace | aiProcess_Triangulate | aiProcess_JoinIdenticalVertices */); - if (!scene) - cerr << "Unable to import mesh " << filename << ": " << importer_.GetErrorString() << endl; - else - buildMesh(scene->mRootNode, mesh); - // Delete the temporary file - unlink(tmp_filename); + if (true) { + // Write the resource to a temporary file + char tmp_filename[] = "/tmp/collada_urdf_XXXXXX"; + int fd = mkstemp(tmp_filename); + write(fd, resource.data.get(), resource.size); + close(fd); + + // Import the mesh using STLLoader + STLLoader loader; + Mesh* mesh = loader.load(string(tmp_filename)); + delete mesh; + + // Delete the temporary file + unlink(tmp_filename); + } + else { + // Import the mesh using assimp + const aiScene* scene = importer_.ReadFileFromMemory(resource.data.get(), resource.size, aiProcess_SortByPType /* aiProcess_CalcTangentSpace | aiProcess_Triangulate | aiProcess_JoinIdenticalVertices */); + if (!scene) + cerr << "Unable to import mesh " << filename << ": " << importer_.GetErrorString() << endl; + else { + cout << "Successfully loaded mesh " << filename << endl; + buildMeshFromAssimp(scene->mRootNode, mesh); + } + } } - void buildMesh(aiNode* node, daeElementRef parent) { + void buildMeshFromAssimp(aiNode* node, daeElementRef parent) { if (node == NULL) return; @@ -392,7 +411,7 @@ public: } for (unsigned int i = 0; i < node->mNumChildren; i++) - buildMesh(node->mChildren[i], mesh); + buildMeshFromAssimp(node->mChildren[i], mesh); } } @@ -564,6 +583,8 @@ public: } }; +} + int main(int argc, char** argv) { if (argc != 2) { @@ -585,7 +606,7 @@ int main(int argc, char** argv) return -1; } - ColladaWriter* writer = new ColladaWriter(&robot); + collada_urdf::ColladaWriter* writer = new collada_urdf::ColladaWriter(&robot); writer->writeScene(); delete writer; From 1a48be8bb41b3cb79ccd65dab6749fae63a05ce1 Mon Sep 17 00:00:00 2001 From: tfield Date: Fri, 5 Mar 2010 03:05:35 +0000 Subject: [PATCH 118/245] collada_urdf: first try assimp, then fallback to STLLoader --- collada_urdf/src/STLLoader.cpp | 2 - collada_urdf/src/urdf_to_collada.cpp | 60 +++++++++++++++++----------- 2 files changed, 36 insertions(+), 26 deletions(-) diff --git a/collada_urdf/src/STLLoader.cpp b/collada_urdf/src/STLLoader.cpp index 446310e..0443c68 100644 --- a/collada_urdf/src/STLLoader.cpp +++ b/collada_urdf/src/STLLoader.cpp @@ -101,8 +101,6 @@ void STLLoader::readBinary(FILE* filein, Mesh* mesh) { int face_num = readLongInt(filein); - std::cout << "Reading " << face_num << " faces " << std::endl; - for (int iface = 0; iface < face_num; iface++) { Vector3 normal(readFloat(filein), readFloat(filein), readFloat(filein)); for (int i = 0; i < 3; i++) { diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp index 30efe46..2011d6d 100644 --- a/collada_urdf/src/urdf_to_collada.cpp +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -279,31 +279,43 @@ public: return; } - if (true) { - // Write the resource to a temporary file - char tmp_filename[] = "/tmp/collada_urdf_XXXXXX"; - int fd = mkstemp(tmp_filename); - write(fd, resource.data.get(), resource.size); - close(fd); + // Try assimp first, then STLLoader + if (!loadMeshWithAssimp(resource, mesh)) + if (!loadMeshWithSTLLoader(resource, mesh)) + cerr << "*** Can't load " << filename << endl; + } - // Import the mesh using STLLoader - STLLoader loader; - Mesh* mesh = loader.load(string(tmp_filename)); - delete mesh; - - // Delete the temporary file - unlink(tmp_filename); - } - else { - // Import the mesh using assimp - const aiScene* scene = importer_.ReadFileFromMemory(resource.data.get(), resource.size, aiProcess_SortByPType /* aiProcess_CalcTangentSpace | aiProcess_Triangulate | aiProcess_JoinIdenticalVertices */); - if (!scene) - cerr << "Unable to import mesh " << filename << ": " << importer_.GetErrorString() << endl; - else { - cout << "Successfully loaded mesh " << filename << endl; - buildMeshFromAssimp(scene->mRootNode, mesh); - } - } + bool loadMeshWithAssimp(const resource_retriever::MemoryResource& resource, domGeometryRef mesh) { + // Import the mesh using assimp + const aiScene* scene = importer_.ReadFileFromMemory(resource.data.get(), resource.size, aiProcess_SortByPType /* aiProcess_CalcTangentSpace | aiProcess_Triangulate | aiProcess_JoinIdenticalVertices */); + if (!scene) + return false; + + buildMeshFromAssimp(scene->mRootNode, mesh); + return true; + } + + bool loadMeshWithSTLLoader(const resource_retriever::MemoryResource& resource, domGeometryRef mesh) { + // Write the resource to a temporary file + char tmp_filename[] = "/tmp/collada_urdf_XXXXXX"; + int fd = mkstemp(tmp_filename); + write(fd, resource.data.get(), resource.size); + close(fd); + + // Import the mesh using STLLoader + STLLoader loader; + Mesh* stl_mesh = loader.load(string(tmp_filename)); + buildMeshFromSTLLoader(stl_mesh, mesh); + delete stl_mesh; + + // Delete the temporary file + unlink(tmp_filename); + + return true; + } + + void buildMeshFromSTLLoader(Mesh* mesh, daeElementRef parent) { + // } void buildMeshFromAssimp(aiNode* node, daeElementRef parent) { From 9ef55ab12da6fc5410263ad0a52ab87182b5d326 Mon Sep 17 00:00:00 2001 From: tfield Date: Fri, 5 Mar 2010 07:09:36 +0000 Subject: [PATCH 119/245] collada_urdf: library_geometries finished --- collada_urdf/src/STLLoader.cpp | 36 ++-- collada_urdf/src/STLLoader.h | 5 +- collada_urdf/src/urdf_to_collada.cpp | 273 ++++++++++++++++----------- 3 files changed, 174 insertions(+), 140 deletions(-) diff --git a/collada_urdf/src/STLLoader.cpp b/collada_urdf/src/STLLoader.cpp index 0443c68..e811e8a 100644 --- a/collada_urdf/src/STLLoader.cpp +++ b/collada_urdf/src/STLLoader.cpp @@ -54,33 +54,17 @@ bool Vector3::operator==(const Vector3& v) const { Mesh::Mesh() { } -bool Mesh::hasVertex(const Vector3& v) const { - for (std::vector::const_iterator i = vertices.begin(); i != vertices.end(); i++) - if (v == *i) - return true; - - return false; -} - -unsigned int Mesh::getVertexIndex(const Vector3& v) const { +int Mesh::getVertexIndex(const Vector3& v) const { for (unsigned int i = 0; i < vertices.size(); i++) if (vertices[i] == v) - return true; + return i; - return false; + return -1; } -void Mesh::addVertex(const Vector3& v) { - vertices.push_back(v); -} - -void Mesh::addNormal(const Vector3& n) { - normals.push_back(n); -} - -void Mesh::addIndex(unsigned int i) { - indices.push_back(i); -} +void Mesh::addVertex(const Vector3& v) { vertices.push_back(v); } +void Mesh::addNormal(const Vector3& n) { normals.push_back(n); } +void Mesh::addIndex(unsigned int i) { indices.push_back(i); } // @@ -104,12 +88,14 @@ void STLLoader::readBinary(FILE* filein, Mesh* mesh) { for (int iface = 0; iface < face_num; iface++) { Vector3 normal(readFloat(filein), readFloat(filein), readFloat(filein)); for (int i = 0; i < 3; i++) { - Vector3 vertex(readFloat(filein), readFloat(filein), readFloat(filein)); - if (!mesh->hasVertex(vertex)) { + Vector3 vertex(readFloat(filein), readFloat(filein), readFloat(filein)); + int index = mesh->getVertexIndex(vertex); + if (index == -1) { mesh->addVertex(vertex); mesh->addNormal(normal); + index = mesh->vertices.size() - 1; } - mesh->addIndex(mesh->getVertexIndex(vertex)); + mesh->addIndex(index); } readShortInt(filein); // 2 byte attribute } diff --git a/collada_urdf/src/STLLoader.h b/collada_urdf/src/STLLoader.h index d01e560..8c7d768 100644 --- a/collada_urdf/src/STLLoader.h +++ b/collada_urdf/src/STLLoader.h @@ -67,14 +67,13 @@ namespace collada_urdf public: Mesh(); - bool hasVertex(const Vector3& v) const; - unsigned int getVertexIndex(const Vector3& v) const; + int getVertexIndex(const Vector3& v) const; void addVertex(const Vector3& v); void addNormal(const Vector3& n); void addIndex(unsigned int i); - private: + public: std::vector vertices; std::vector normals; std::vector indices; diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp index 2011d6d..4011542 100644 --- a/collada_urdf/src/urdf_to_collada.cpp +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -84,21 +84,19 @@ public: urdf::Model* robot_; - Assimp::Importer importer_; - boost::shared_ptr collada_; domCOLLADA* dom_; domCOLLADA::domSceneRef scene_; - domLibrary_jointsRef jointsLib_; + domLibrary_geometriesRef geometriesLib_; domLibrary_visual_scenesRef visualScenesLib_; domLibrary_kinematics_scenesRef kinematicsScenesLib_; domLibrary_kinematics_modelsRef kinematicsModelsLib_; - domLibrary_articulated_systemsRef articulatedSystemsLib_; + domLibrary_jointsRef jointsLib_; domLibrary_physics_scenesRef physicsScenesLib_; domLibrary_materialsRef materialsLib_; domLibrary_effectsRef effectsLib_; - domLibrary_geometriesRef geometriesLib_; + //domLibrary_articulated_systemsRef articulatedSystemsLib_; public: ColladaWriter(urdf::Model* robot) : robot_(robot) { @@ -145,23 +143,26 @@ public: scene_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_SCENE)); visualScenesLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_VISUAL_SCENES)); - visualScenesLib_->setId("visual_scenes"); + visualScenesLib_->setId("vscenes"); geometriesLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_GEOMETRIES)); geometriesLib_->setId("geometries"); + kinematicsScenesLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_KINEMATICS_SCENES)); + kinematicsScenesLib_->setId("kinematics_scenes"); + kinematicsModelsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_KINEMATICS_MODELS)); + kinematicsModelsLib_->setId("kinematics_models"); + jointsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_JOINTS)); + jointsLib_->setId("joints"); + + /* effectsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_EFFECTS)); effectsLib_->setId("effects"); materialsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_MATERIALS)); materialsLib_->setId("materials"); - kinematicsModelsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_KINEMATICS_MODELS)); - kinematicsModelsLib_->setId("kinematics_models"); articulatedSystemsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_ARTICULATED_SYSTEMS)); articulatedSystemsLib_->setId("articulated_systems"); - kinematicsScenesLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_KINEMATICS_SCENES)); - kinematicsScenesLib_->setId("kinematics_scenes"); - physicsScenesLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_PHYSICS_SCENES)); physicsScenesLib_->setId("physics_scenes"); - jointsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_JOINTS)); - jointsLib_->setId("joints"); + physicsScenesLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_PHYSICS_SCENES)); + */ } virtual ~ColladaWriter() { @@ -174,31 +175,32 @@ public: // Create visual scene s.vscene = daeSafeCast(visualScenesLib_->createAndPlace(COLLADA_ELEMENT_VISUAL_SCENE)); - s.vscene->setId("visual_scene"); + s.vscene->setId("vscene"); s.vscene->setName("URDF Visual Scene"); + // Create instance visual scene + s.viscene = daeSafeCast(scene_->createAndPlace(COLLADA_ELEMENT_INSTANCE_VISUAL_SCENE)); + s.viscene->setUrl((string("#") + string(s.vscene->getID())).c_str()); + // Create kinematics scene s.kscene = daeSafeCast(kinematicsScenesLib_->createAndPlace(COLLADA_ELEMENT_KINEMATICS_SCENE)); s.kscene->setId("kinematics_scene"); s.kscene->setName("URDF Kinematics Scene"); - // Create physic scene - s.pscene = daeSafeCast(physicsScenesLib_->createAndPlace(COLLADA_ELEMENT_PHYSICS_SCENE)); - s.pscene->setId("physics_scene"); - s.pscene->setName("URDF Physics Scene"); - - // Create instance visual scene - s.viscene = daeSafeCast(scene_->createAndPlace(COLLADA_ELEMENT_INSTANCE_VISUAL_SCENE)); - s.viscene->setUrl((string("#") + string(s.vscene->getID())).c_str()); - // Create instance kinematics scene s.kiscene = daeSafeCast(scene_->createAndPlace(COLLADA_ELEMENT_INSTANCE_KINEMATICS_SCENE)); s.kiscene->setUrl((string("#") + string(s.kscene->getID())).c_str()); + /* + // Create physics scene + s.pscene = daeSafeCast(physicsScenesLib_->createAndPlace(COLLADA_ELEMENT_PHYSICS_SCENE)); + s.pscene->setId("physics_scene"); + s.pscene->setName("URDF Physics Scene"); + // Create instance physics scene s.piscene = daeSafeCast(scene_->createAndPlace(COLLADA_ELEMENT_INSTANCE_PHYSICS_SCENE)); s.piscene->setUrl((string("#") + string(s.pscene->getID())).c_str()); - + */ return s; } @@ -213,11 +215,13 @@ public: bool writeScene() { SCENE scene = createScene(); + /* domPhysics_scene::domTechnique_commonRef common = daeSafeCast(scene.pscene->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); // Create gravity - domTargetable_float3Ref g = daeSafeCast(common->createAndPlace (COLLADA_ELEMENT_GRAVITY)); + domTargetable_float3Ref g = daeSafeCast(common->createAndPlace(COLLADA_ELEMENT_GRAVITY)); g->getValue().set3(0.0, 0.0, 1.0); + */ addJoints(); addKinematics(); @@ -229,6 +233,8 @@ public: } void addGeometries() { + int link_num = 0; + for (map >::const_iterator i = robot_->links_.begin(); i != robot_->links_.end(); i++) { boost::shared_ptr urdf_link = i->second; @@ -237,14 +243,21 @@ public: switch (urdf_link->visual->geometry->type) { case urdf::Geometry::MESH: { - urdf::Mesh* mesh = (urdf::Mesh*) urdf_link->visual->geometry.get(); + urdf::Mesh* urdf_mesh = (urdf::Mesh*) urdf_link->visual->geometry.get(); - string filename = mesh->filename; - urdf::Vector3 scale = mesh->scale; + string filename = urdf_mesh->filename; + urdf::Vector3 scale = urdf_mesh->scale; // @todo use scale + // domGeometryRef geometry = daeSafeCast(geometriesLib_->createAndPlace(COLLADA_ELEMENT_GEOMETRY)); - loadMesh(filename, geometry); + string geometry_id = string("g1.link") + boost::lexical_cast(link_num) + string(".geom0"); + geometry->setId(geometry_id.c_str()); + { + loadMesh(filename, geometry, geometry_id); + } + // + link_num++; break; } case urdf::Geometry::SPHERE: { @@ -267,7 +280,7 @@ public: } } - void loadMesh(const string& filename, domGeometryRef mesh) { + void loadMesh(const string& filename, domGeometryRef geometry, const string& geometry_id) { // Load the mesh resource_retriever::MemoryResource resource; resource_retriever::Retriever retriever; @@ -280,22 +293,23 @@ public: } // Try assimp first, then STLLoader - if (!loadMeshWithAssimp(resource, mesh)) - if (!loadMeshWithSTLLoader(resource, mesh)) + if (!loadMeshWithAssimp(resource, geometry, geometry_id)) + if (!loadMeshWithSTLLoader(resource, geometry, geometry_id)) cerr << "*** Can't load " << filename << endl; } - bool loadMeshWithAssimp(const resource_retriever::MemoryResource& resource, domGeometryRef mesh) { + bool loadMeshWithAssimp(const resource_retriever::MemoryResource& resource, domGeometryRef geometry, const string& geometry_id) { // Import the mesh using assimp - const aiScene* scene = importer_.ReadFileFromMemory(resource.data.get(), resource.size, aiProcess_SortByPType /* aiProcess_CalcTangentSpace | aiProcess_Triangulate | aiProcess_JoinIdenticalVertices */); + Assimp::Importer importer; + const aiScene* scene = importer.ReadFileFromMemory(resource.data.get(), resource.size, aiProcess_SortByPType /* aiProcess_CalcTangentSpace | aiProcess_Triangulate | aiProcess_JoinIdenticalVertices */); if (!scene) return false; - buildMeshFromAssimp(scene->mRootNode, mesh); + buildMeshFromAssimp(scene, scene->mRootNode, geometry, geometry_id); return true; } - bool loadMeshWithSTLLoader(const resource_retriever::MemoryResource& resource, domGeometryRef mesh) { + bool loadMeshWithSTLLoader(const resource_retriever::MemoryResource& resource, domGeometryRef geometry, const string& geometry_id) { // Write the resource to a temporary file char tmp_filename[] = "/tmp/collada_urdf_XXXXXX"; int fd = mkstemp(tmp_filename); @@ -305,7 +319,7 @@ public: // Import the mesh using STLLoader STLLoader loader; Mesh* stl_mesh = loader.load(string(tmp_filename)); - buildMeshFromSTLLoader(stl_mesh, mesh); + buildMeshFromSTLLoader(stl_mesh, geometry, geometry_id); delete stl_mesh; // Delete the temporary file @@ -314,16 +328,88 @@ public: return true; } - void buildMeshFromSTLLoader(Mesh* mesh, daeElementRef parent) { - // + void buildMeshFromSTLLoader(Mesh* stl_mesh, daeElementRef parent, const string& geometry_id) { + // + domMeshRef mesh = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_MESH)); + { + unsigned int num_vertices = stl_mesh->vertices.size(); + unsigned int num_indices = stl_mesh->indices.size(); + unsigned int num_faces = num_indices / 3; + + // + domSourceRef positions_source = daeSafeCast(mesh->createAndPlace(COLLADA_ELEMENT_SOURCE)); + positions_source->setId((geometry_id + string(".positions")).c_str()); + { + // + domFloat_arrayRef positions_array = daeSafeCast(positions_source->createAndPlace(COLLADA_ELEMENT_FLOAT_ARRAY)); + positions_array->setId((geometry_id + string(".positions-array")).c_str()); + positions_array->setCount(num_vertices); + positions_array->setDigits(6); // 6 decimal places + positions_array->getValue().setCount(num_vertices); + + for (unsigned int j = 0; j < num_vertices; j++) { + positions_array->getValue()[j] = stl_mesh->vertices[j].x; + positions_array->getValue()[j] = stl_mesh->vertices[j].y; + positions_array->getValue()[j] = stl_mesh->vertices[j].z; + } + + // + domSource::domTechnique_commonRef source_tech = daeSafeCast(positions_source->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); + + // + domAccessorRef accessor = daeSafeCast(source_tech->createAndPlace(COLLADA_ELEMENT_ACCESSOR)); + accessor->setCount(num_vertices); + accessor->setSource(xsAnyURI(*positions_array, string("#") + geometry_id + string(".positions-array"))); + accessor->setStride(3); + + // + // + // + domParamRef px = daeSafeCast(accessor->createAndPlace(COLLADA_ELEMENT_PARAM)); px->setName("X"); px->setType("float"); + domParamRef py = daeSafeCast(accessor->createAndPlace(COLLADA_ELEMENT_PARAM)); py->setName("Y"); py->setType("float"); + domParamRef pz = daeSafeCast(accessor->createAndPlace(COLLADA_ELEMENT_PARAM)); pz->setName("Z"); pz->setType("float"); + } + + // + domVerticesRef vertices = daeSafeCast(mesh->createAndPlace(COLLADA_ELEMENT_VERTICES)); + vertices->setId("vertices"); + { + // + domInput_localRef vertices_input = daeSafeCast(vertices->createAndPlace(COLLADA_ELEMENT_INPUT)); + vertices_input->setSemantic("POSITION"); + vertices_input->setSource(domUrifragment(*positions_source, string("#") + geometry_id + string(".positions"))); + } + // + + // + domTrianglesRef triangles = daeSafeCast(mesh->createAndPlace(COLLADA_ELEMENT_TRIANGLES)); + { + triangles->setCount(num_faces); + triangles->setMaterial("mat0"); + + // + domInput_local_offsetRef vertex_offset = daeSafeCast(triangles->createAndPlace(COLLADA_ELEMENT_INPUT)); + vertex_offset->setSemantic("VERTEX"); + vertex_offset->setOffset(0); + vertex_offset->setSource(domUrifragment(*positions_source, string("#") + geometry_id + string("/vertices"))); + + //

0 1 2 3 ... + domPRef indices = daeSafeCast(triangles->createAndPlace(COLLADA_ELEMENT_P)); + indices->getValue().setCount(num_indices); + for (unsigned int i = 0; i < num_indices; i++) + indices->getValue()[i] = stl_mesh->indices[i]; + //

+ } + //
+ } + //
} - void buildMeshFromAssimp(aiNode* node, daeElementRef parent) { + // EXPERIMENTAL: untested + void buildMeshFromAssimp(const aiScene* scene, aiNode* node, daeElementRef parent, const string& geometry_id) { if (node == NULL) return; - const aiScene* scene = importer_.GetScene(); - aiMatrix4x4 transform = node->mTransformation; aiNode* pnode = node->mParent; @@ -334,13 +420,12 @@ public: pnode = pnode->mParent; } - string parentid("mesh"); - - for (unsigned int i = 0; i < node->mNumMeshes; i++) { - aiMesh* aMesh = scene->mMeshes[i]; - - domMeshRef mesh = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_MESH)); - { + // + domMeshRef mesh = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_MESH)); + { + for (unsigned int i = 0; i < node->mNumMeshes; i++) { + aiMesh* aMesh = scene->mMeshes[i]; + // Add in the indices for each face for (unsigned int j = 0; j < aMesh->mNumFaces; j++) { aiFace* aFace = &(aMesh->mFaces[j]); @@ -350,95 +435,59 @@ public: //subMesh->AddIndex(aFace->mIndices[k]); } } - + domSourceRef positions_source = daeSafeCast(mesh->createAndPlace(COLLADA_ELEMENT_SOURCE)); { - positions_source->setId((parentid + string(".positions")).c_str()); - + positions_source->setId((geometry_id + string(".positions")).c_str()); + domFloat_arrayRef positions_array = daeSafeCast(positions_source->createAndPlace(COLLADA_ELEMENT_FLOAT_ARRAY)); - positions_array->setId((parentid + string(".positions-array")).c_str()); + positions_array->setId((geometry_id + string(".positions-array")).c_str()); positions_array->setCount(aMesh->mNumVertices); positions_array->setDigits(6); // 6 decimal places positions_array->getValue().setCount(3 * aMesh->mNumVertices); - + for (unsigned int j = 0; j < aMesh->mNumVertices; j++) { aiVector3D p; p.x = aMesh->mVertices[j].x; p.y = aMesh->mVertices[j].y; p.z = aMesh->mVertices[j].z; - + p *= transform; - + positions_array->getValue()[j] = p.x; positions_array->getValue()[j] = p.y; positions_array->getValue()[j] = p.z; - + /* - if (aMesh->HasNormals()) { - p.x = aMesh->mNormals[j].x; - p.y = aMesh->mNormals[j].y; - p.z = aMesh->mNormals[j].z; - } - - // @todo add normal - //subMesh->AddNormal(p.x, p.y, p.z); - - // @todo add tex coord - //if (aMesh->mNumUVComponents[0]) - // subMesh->AddTexCoord(aMesh->mTextureCoords[0][j].x, 1.0 -aMesh->mTextureCoords[0][j].y); - //else - // subMesh->AddTexCoord(0,0); - */ + if (aMesh->HasNormals()) { + p.x = aMesh->mNormals[j].x; + p.y = aMesh->mNormals[j].y; + p.z = aMesh->mNormals[j].z; + } + + // @todo add normal + //subMesh->AddNormal(p.x, p.y, p.z); + + // @todo add tex coord + //if (aMesh->mNumUVComponents[0]) + // subMesh->AddTexCoord(aMesh->mTextureCoords[0][j].x, 1.0 -aMesh->mTextureCoords[0][j].y); + //else + // subMesh->AddTexCoord(0,0); + */ } - - /* - domSource::domTechnique_commonRef psourcetec = daeSafeCast(pvertsource->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); - domAccessorRef pacc = daeSafeCast(psourcetec->createAndPlace(COLLADA_ELEMENT_ACCESSOR)); - pacc->setCount(aMesh->mNumVertices); - pacc->setSource(xsAnyURI(*positions_array, string("#") + parentid + string(".positions-array"))); - pacc->setStride(3); - - domParamRef px = daeSafeCast(pacc->createAndPlace(COLLADA_ELEMENT_PARAM)); px->setName("X"); px->setType("float"); - domParamRef py = daeSafeCast(pacc->createAndPlace(COLLADA_ELEMENT_PARAM)); py->setName("Y"); py->setType("float"); - domParamRef pz = daeSafeCast(pacc->createAndPlace(COLLADA_ELEMENT_PARAM)); pz->setName("Z"); pz->setType("float"); - */ } - + domTrianglesRef triangles = daeSafeCast(mesh->createAndPlace(COLLADA_ELEMENT_TRIANGLES)); { triangles->setCount(aMesh->mNumFaces / 3); - //triangles->setMaterial("mat0"); - - /* - domInput_local_offsetRef pvertoffset = daeSafeCast(ptris->createAndPlace(COLLADA_ELEMENT_INPUT)); - pvertoffset->setSemantic("VERTEX"); - pvertoffset->setOffset(0); - pvertoffset->setSource(domUrifragment(*pverts, string("#") + parentid + string("/vertices"))); - domPRef pindices = daeSafeCast(ptris->createAndPlace(COLLADA_ELEMENT_P)); - pindices->getValue().setCount(mesh.indices.size()); - for (size_t ind = 0; ind < mesh.indices.size(); ++ind) - pindices->getValue()[ind] = mesh.indices[ind]; - */ } } for (unsigned int i = 0; i < node->mNumChildren; i++) - buildMeshFromAssimp(node->mChildren[i], mesh); + buildMeshFromAssimp(scene, node->mChildren[i], mesh, geometry_id); } } - /* - domGeometryRef writeGeometry(const string& parentid) { - domVerticesRef pverts = daeSafeCast(pdommesh->createAndPlace(COLLADA_ELEMENT_VERTICES)); - { - pverts->setId("vertices"); - domInput_localRef pvertinput = daeSafeCast(pverts->createAndPlace(COLLADA_ELEMENT_INPUT)); - pvertinput->setSemantic("POSITION"); - pvertinput->setSource(domUrifragment(*pvertsource, string("#")+parentid+string(".positions"))); - } - } - */ - void addJoints() { for (map >::const_iterator i = robot_->joints_.begin(); i != robot_->joints_.end(); i++) { boost::shared_ptr urdf_joint = i->second; @@ -500,11 +549,11 @@ public: break; } case urdf::Joint::FIXED: { - // Model as a PRISMATIC joint with no limits + // Model as a REVOLUTE joint with no leeway // joint.axis vector axes(1); - axes[0] = daeSafeCast(joint->createAndPlace(COLLADA_ELEMENT_PRISMATIC)); + axes[0] = daeSafeCast(joint->createAndPlace(COLLADA_ELEMENT_REVOLUTE)); axes[0]->setSid("axis0"); domAxisRef axis = daeSafeCast(axes[0]->createAndPlace(COLLADA_ELEMENT_AXIS)); axis->getValue().setCount(3); From 0286013425523060d06050421f84be318032194f Mon Sep 17 00:00:00 2001 From: tfield Date: Mon, 8 Mar 2010 21:37:48 +0000 Subject: [PATCH 120/245] collada_urdf: adding visual scene --- collada_urdf/src/urdf_to_collada.cpp | 140 +++++++++++++++++++-------- 1 file changed, 97 insertions(+), 43 deletions(-) diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp index 4011542..0c34424 100644 --- a/collada_urdf/src/urdf_to_collada.cpp +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -36,6 +36,11 @@ // urdf_to_collada.cpp +/* +Issues: + - triangles material hard-coded to "mat0" +*/ + #include #include #include @@ -147,22 +152,21 @@ public: geometriesLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_GEOMETRIES)); geometriesLib_->setId("geometries"); kinematicsScenesLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_KINEMATICS_SCENES)); - kinematicsScenesLib_->setId("kinematics_scenes"); + kinematicsScenesLib_->setId("kscenes"); kinematicsModelsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_KINEMATICS_MODELS)); kinematicsModelsLib_->setId("kinematics_models"); jointsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_JOINTS)); jointsLib_->setId("joints"); - /* + physicsScenesLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_PHYSICS_SCENES)); + physicsScenesLib_->setId("physics_scenes"); effectsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_EFFECTS)); effectsLib_->setId("effects"); materialsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_MATERIALS)); materialsLib_->setId("materials"); - articulatedSystemsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_ARTICULATED_SYSTEMS)); - articulatedSystemsLib_->setId("articulated_systems"); - physicsScenesLib_->setId("physics_scenes"); - physicsScenesLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_PHYSICS_SCENES)); - */ + + //articulatedSystemsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_ARTICULATED_SYSTEMS)); + //articulatedSystemsLib_->setId("articulated_systems"); } virtual ~ColladaWriter() { @@ -184,23 +188,22 @@ public: // Create kinematics scene s.kscene = daeSafeCast(kinematicsScenesLib_->createAndPlace(COLLADA_ELEMENT_KINEMATICS_SCENE)); - s.kscene->setId("kinematics_scene"); + s.kscene->setId("kscene"); s.kscene->setName("URDF Kinematics Scene"); // Create instance kinematics scene s.kiscene = daeSafeCast(scene_->createAndPlace(COLLADA_ELEMENT_INSTANCE_KINEMATICS_SCENE)); s.kiscene->setUrl((string("#") + string(s.kscene->getID())).c_str()); - /* // Create physics scene s.pscene = daeSafeCast(physicsScenesLib_->createAndPlace(COLLADA_ELEMENT_PHYSICS_SCENE)); - s.pscene->setId("physics_scene"); + s.pscene->setId("pscene"); s.pscene->setName("URDF Physics Scene"); // Create instance physics scene s.piscene = daeSafeCast(scene_->createAndPlace(COLLADA_ELEMENT_INSTANCE_PHYSICS_SCENE)); s.piscene->setUrl((string("#") + string(s.pscene->getID())).c_str()); - */ + return s; } @@ -215,23 +218,71 @@ public: bool writeScene() { SCENE scene = createScene(); - /* - domPhysics_scene::domTechnique_commonRef common = daeSafeCast(scene.pscene->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); - - // Create gravity - domTargetable_float3Ref g = daeSafeCast(common->createAndPlace(COLLADA_ELEMENT_GRAVITY)); - g->getValue().set3(0.0, 0.0, 1.0); - */ + setupPhysics(scene); + addScene(scene); + addGeometries(); addJoints(); addKinematics(); - addGeometries(); collada_->writeAll(); return true; } + void setupPhysics(SCENE scene) { + // + domPhysics_scene::domTechnique_commonRef common = daeSafeCast(scene.pscene->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); + { + // 0 0 0 + domTargetable_float3Ref g = daeSafeCast(common->createAndPlace(COLLADA_ELEMENT_GRAVITY)); + g->getValue().set3(0.0, 0.0, 0.0); + } + // + } + + void addScene(SCENE scene) { + boost::shared_ptr urdf_root = robot_->getRoot(); + + // + domNodeRef root_node = daeSafeCast(scene.vscene->createAndPlace(COLLADA_ELEMENT_NODE)); + root_node->setId("v1"); + root_node->setName(urdf_root->name.c_str()); + + // + domKinematics_modelRef kmodel = daeSafeCast(kinematicsModelsLib_->createAndPlace(COLLADA_ELEMENT_KINEMATICS_MODEL)); + kmodel->setId("k1"); + kmodel->setName(urdf_root->name.c_str()); + + // + domInstance_kinematics_modelRef ikm = daeSafeCast(scene.kscene->createAndPlace(COLLADA_ELEMENT_INSTANCE_KINEMATICS_MODEL)); + string model_id = kmodel->getID(); + string inst_model_sid = string("inst_") + model_id; + ikm->setUrl((string("#") + model_id).c_str()); + ikm->setSid(inst_model_sid.c_str()); + { + // + domKinematics_newparamRef newparam = daeSafeCast(ikm->createAndPlace(COLLADA_ELEMENT_NEWPARAM)); + newparam->setSid("kscene.inst_k1"); + { + // kscene/inst_k1 + daeSafeCast(newparam->createAndPlace(COLLADA_ELEMENT_SIDREF))->setValue("kscene/inst_k1"); + } + // + } + + /* + for (map >::const_iterator i = robot_->links_.begin(); i != robot_->links_.end(); i++) { + boost::shared_ptr urdf_link = i->second; + + // + domNodeRef link_node = daeSafeCast(scene.vscene->createAndPlace(COLLADA_ELEMENT_NODE)); + root_node->setId("v1"); + root_node->setName(urdf_root->name.c_str()); + } + */ + } + void addGeometries() { int link_num = 0; @@ -430,7 +481,7 @@ public: for (unsigned int j = 0; j < aMesh->mNumFaces; j++) { aiFace* aFace = &(aMesh->mFaces[j]); for (unsigned int k = 0; k < aFace->mNumIndices; k++) { - int index = aFace->mIndices[k]; + //int index = aFace->mIndices[k]; // @todo add index //subMesh->AddIndex(aFace->mIndices[k]); } @@ -589,52 +640,55 @@ public: void addKinematics() { - // Create kinematics model + // domKinematics_modelRef model = daeSafeCast(kinematicsModelsLib_->createAndPlace(COLLADA_ELEMENT_KINEMATICS_MODEL)); - model->setId("kinematics_model"); + model->setId("k1"); + { + // + domKinematics_model_techniqueRef technique = daeSafeCast(model->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); + for (map >::const_iterator i = robot_->links_.begin(); i != robot_->links_.end(); i++) { + boost::shared_ptr urdf_link = i->second; + + // + domInstance_jointRef instance_joint = daeSafeCast(technique->createAndPlace(COLLADA_ELEMENT_INSTANCE_JOINT)); + instance_joint->setUrl("#joint_1"); + } + // - // Create kinematics model technique common - domKinematics_model_techniqueRef technique = daeSafeCast(model->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); - - // Create the instance_joints - for (map >::const_iterator i = robot_->links_.begin(); i != robot_->links_.end(); i++) { - boost::shared_ptr urdf_link = i->second; - - domInstance_jointRef instance_joint = daeSafeCast(technique->createAndPlace(COLLADA_ELEMENT_INSTANCE_JOINT)); - instance_joint->setUrl("#joint_1"); + addLink(robot_->getRoot(), technique); } - - addLink(technique, robot_->getRoot()); } - void addLink(daeElementRef parent, boost::shared_ptr urdf_link) { - // Create link + void addLink(boost::shared_ptr urdf_link, daeElementRef parent) { + // domLinkRef link = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_LINK)); link->setName(urdf_link->name.c_str()); - + // @todo link->setSid for (vector >::const_iterator i = urdf_link->child_joints.begin(); i != urdf_link->child_joints.end(); i++) { boost::shared_ptr urdf_joint = *i; - // Create attachment full + // domLink::domAttachment_fullRef attachment_full = daeSafeCast(link->createAndPlace(COLLADA_TYPE_ATTACHMENT_FULL)); attachment_full->setJoint(urdf_joint->name.c_str()); - - // Create translation, rotation - addTransformation(attachment_full, urdf_joint->parent_to_joint_origin_transform); - - // Create child links - addLink(attachment_full, robot_->getLink(urdf_joint->child_link_name)); + { + addTransformation(attachment_full, urdf_joint->parent_to_joint_origin_transform); + addLink(robot_->getLink(urdf_joint->child_link_name), attachment_full); + } + // } + // } void addTransformation(daeElementRef parent, const urdf::Pose& pose) { + // x y z domTranslateRef trans = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_TRANSLATE)); trans->getValue().setCount(3); trans->getValue()[0] = pose.position.x; trans->getValue()[1] = pose.position.y; trans->getValue()[2] = pose.position.z; + // x y z w domRotateRef rot = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_ROTATE)); rot->getValue().setCount(4); rot->getValue()[0] = pose.rotation.x; From 4a586c639bde2523f07b2b004ca49f7cb6864464 Mon Sep 17 00:00:00 2001 From: tfield Date: Mon, 8 Mar 2010 23:08:32 +0000 Subject: [PATCH 121/245] collada_urdf: updating visual scene tree --- collada_urdf/src/urdf_to_collada.cpp | 116 +++++++++++++++++++-------- 1 file changed, 84 insertions(+), 32 deletions(-) diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp index 0c34424..57951d5 100644 --- a/collada_urdf/src/urdf_to_collada.cpp +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -224,6 +224,7 @@ public: addJoints(); addKinematics(); + addVisuals(scene); collada_->writeAll(); @@ -244,17 +245,12 @@ public: void addScene(SCENE scene) { boost::shared_ptr urdf_root = robot_->getRoot(); - // - domNodeRef root_node = daeSafeCast(scene.vscene->createAndPlace(COLLADA_ELEMENT_NODE)); - root_node->setId("v1"); - root_node->setName(urdf_root->name.c_str()); - // domKinematics_modelRef kmodel = daeSafeCast(kinematicsModelsLib_->createAndPlace(COLLADA_ELEMENT_KINEMATICS_MODEL)); kmodel->setId("k1"); kmodel->setName(urdf_root->name.c_str()); - // + // domInstance_kinematics_modelRef ikm = daeSafeCast(scene.kscene->createAndPlace(COLLADA_ELEMENT_INSTANCE_KINEMATICS_MODEL)); string model_id = kmodel->getID(); string inst_model_sid = string("inst_") + model_id; @@ -270,17 +266,6 @@ public: } // } - - /* - for (map >::const_iterator i = robot_->links_.begin(); i != robot_->links_.end(); i++) { - boost::shared_ptr urdf_link = i->second; - - // - domNodeRef link_node = daeSafeCast(scene.vscene->createAndPlace(COLLADA_ELEMENT_NODE)); - root_node->setId("v1"); - root_node->setName(urdf_root->name.c_str()); - } - */ } void addGeometries() { @@ -655,47 +640,114 @@ public: } // - addLink(robot_->getRoot(), technique); + int link_num = 0; + addKinematicLink(robot_->getRoot(), technique, link_num); } } - void addLink(boost::shared_ptr urdf_link, daeElementRef parent) { - // + void addKinematicLink(boost::shared_ptr urdf_link, daeElementRef parent, int& link_num) { + // domLinkRef link = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_LINK)); + string link_sid = string("link") + boost::lexical_cast(link_num); link->setName(urdf_link->name.c_str()); - // @todo link->setSid + link->setSid(link_sid.c_str()); + link_num++; for (vector >::const_iterator i = urdf_link->child_joints.begin(); i != urdf_link->child_joints.end(); i++) { boost::shared_ptr urdf_joint = *i; - // + // domLink::domAttachment_fullRef attachment_full = daeSafeCast(link->createAndPlace(COLLADA_TYPE_ATTACHMENT_FULL)); attachment_full->setJoint(urdf_joint->name.c_str()); { - addTransformation(attachment_full, urdf_joint->parent_to_joint_origin_transform); - addLink(robot_->getLink(urdf_joint->child_link_name), attachment_full); + addTranslate(attachment_full, urdf_joint->parent_to_joint_origin_transform.position); + addRotate(attachment_full, urdf_joint->parent_to_joint_origin_transform.rotation); + addKinematicLink(robot_->getLink(urdf_joint->child_link_name), attachment_full, link_num); } // } // } - void addTransformation(daeElementRef parent, const urdf::Pose& pose) + void addVisuals(SCENE scene) { + // + domNodeRef root_node = daeSafeCast(scene.vscene->createAndPlace(COLLADA_ELEMENT_NODE)); + root_node->setId("v1"); + root_node->setName(robot_->getName().c_str()); + { + int link_num = 0; + addVisualLink(robot_->getRoot(), root_node, link_num); + } + } + + void addVisualLink(boost::shared_ptr urdf_link, daeElementRef parent, int& link_num) { + // + domNodeRef node = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_NODE)); + string node_sid = string("node") + boost::lexical_cast(link_num); + string node_id = string("v1.") + node_sid; + node->setName(urdf_link->name.c_str()); + node->setSid(node_sid.c_str()); + node->setId(node_id.c_str()); + link_num++; + { + if (urdf_link->parent_joint != NULL) { + // x y z + addTranslate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.position); + + // x y z w + addRotate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.rotation); + + // x y z angle + addRotate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.rotation); + } + + for (vector >::const_iterator i = urdf_link->child_links.begin(); i != urdf_link->child_links.end(); i++) { + boost::shared_ptr urdf_child_link = *i; + + addVisualLink(urdf_child_link, node, link_num); + } + } + // + } + + void addTranslate(daeElementRef parent, const urdf::Vector3& position) { // x y z domTranslateRef trans = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_TRANSLATE)); trans->getValue().setCount(3); - trans->getValue()[0] = pose.position.x; - trans->getValue()[1] = pose.position.y; - trans->getValue()[2] = pose.position.z; + trans->getValue()[0] = position.x; + trans->getValue()[1] = position.y; + trans->getValue()[2] = position.z; + } + void addRotate(daeElementRef parent, const urdf::Rotation& rotation) { // x y z w domRotateRef rot = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_ROTATE)); rot->getValue().setCount(4); - rot->getValue()[0] = pose.rotation.x; - rot->getValue()[1] = pose.rotation.y; - rot->getValue()[2] = pose.rotation.z; - rot->getValue()[3] = pose.rotation.w; + rot->getValue()[0] = rotation.x; + rot->getValue()[1] = rotation.y; + rot->getValue()[2] = rotation.z; + rot->getValue()[3] = rotation.w; } + /* + void axisAngle4::set(const quaternion& q) { + T sqr_len = q.x * q.x + q.y * q.y + q.z * q.z; + if (sqr_len > 0) { + this->w = 2 * (T)acos((double)q.w); + + T inv_len = 1 / (T)sqrt((double)sqr_len); + this->x = q.x * inv_len; + this->x = q.y * inv_len; + this->x = q.z * inv_len; + } + else { + // Angle is 0 (mod 2*pi), so any axis will do. + this->w = 0; + this->x = 1; + this->y = 0; + this->z = 0; + } + } + */ }; } From 58c5b783574cecac2587872a54a7f04a5e3295ab Mon Sep 17 00:00:00 2001 From: tfield Date: Mon, 8 Mar 2010 23:23:03 +0000 Subject: [PATCH 122/245] collada_urdf: converting from quaternions to axis-angles --- collada_urdf/src/urdf_to_collada.cpp | 57 +++++++++++++++------------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp index 57951d5..fe1b4f6 100644 --- a/collada_urdf/src/urdf_to_collada.cpp +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -698,7 +698,8 @@ public: addRotate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.rotation); // x y z angle - addRotate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.rotation); + domRotateRef joint_rotate = addRotate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.rotation); + joint_rotate->setSid("node_joint0_axis0"); } for (vector >::const_iterator i = urdf_link->child_links.begin(); i != urdf_link->child_links.end(); i++) { @@ -710,44 +711,46 @@ public: // } - void addTranslate(daeElementRef parent, const urdf::Vector3& position) { + domTranslateRef addTranslate(daeElementRef parent, const urdf::Vector3& position) { // x y z domTranslateRef trans = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_TRANSLATE)); trans->getValue().setCount(3); trans->getValue()[0] = position.x; trans->getValue()[1] = position.y; trans->getValue()[2] = position.z; + return trans; } - void addRotate(daeElementRef parent, const urdf::Rotation& rotation) { + domRotateRef addRotate(daeElementRef parent, const urdf::Rotation& r) { + double ax, ay, az, aa; + + // Convert from quaternion to axis-angle + double sqr_len = r.x * r.x + r.y * r.y + r.z * r.z; + if (sqr_len > 0) { + aa = 2 * acos(r.w); + + double inv_len = 1.0 / sqrt(sqr_len); + ax = r.x * inv_len; + ay = r.y * inv_len; + az = r.z * inv_len; + } + else { + // Angle is 0 (mod 2*pi), so any axis will do. + aa = 0.0; + ax = 1.0; + ay = 0.0; + az = 0.0; + } + // x y z w domRotateRef rot = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_ROTATE)); rot->getValue().setCount(4); - rot->getValue()[0] = rotation.x; - rot->getValue()[1] = rotation.y; - rot->getValue()[2] = rotation.z; - rot->getValue()[3] = rotation.w; + rot->getValue()[0] = ax; + rot->getValue()[1] = ay; + rot->getValue()[2] = az; + rot->getValue()[3] = aa * (180.0 / M_PI); + return rot; } - /* - void axisAngle4::set(const quaternion& q) { - T sqr_len = q.x * q.x + q.y * q.y + q.z * q.z; - if (sqr_len > 0) { - this->w = 2 * (T)acos((double)q.w); - - T inv_len = 1 / (T)sqrt((double)sqr_len); - this->x = q.x * inv_len; - this->x = q.y * inv_len; - this->x = q.z * inv_len; - } - else { - // Angle is 0 (mod 2*pi), so any axis will do. - this->w = 0; - this->x = 1; - this->y = 0; - this->z = 0; - } - } - */ }; } From 5e656bbd7f0c3c7427541869133e26d2bbaa90b9 Mon Sep 17 00:00:00 2001 From: tfield Date: Mon, 8 Mar 2010 23:54:19 +0000 Subject: [PATCH 123/245] collada_urdf: cleaning up joint tags --- collada_urdf/src/urdf_to_collada.cpp | 158 +++++++++++++++++---------- 1 file changed, 100 insertions(+), 58 deletions(-) diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp index fe1b4f6..2afc41b 100644 --- a/collada_urdf/src/urdf_to_collada.cpp +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -103,6 +103,9 @@ public: domLibrary_effectsRef effectsLib_; //domLibrary_articulated_systemsRef articulatedSystemsLib_; + map geometry_ids_; // link.name -> geometry.id + map joint_ids_; // joint.name -> joint.sid + public: ColladaWriter(urdf::Model* robot) : robot_(robot) { daeErrorHandler::setErrorHandler(this); @@ -291,6 +294,7 @@ public: { loadMesh(filename, geometry, geometry_id); } + geometry_ids_[urdf_link->name] = geometry_id; // link_num++; @@ -528,79 +532,109 @@ public: for (map >::const_iterator i = robot_->joints_.begin(); i != robot_->joints_.end(); i++) { boost::shared_ptr urdf_joint = i->second; - // Create COLLADA joint + // domJointRef joint = daeSafeCast(jointsLib_->createAndPlace(COLLADA_ELEMENT_JOINT)); - joint->setId(urdf_joint->name.c_str()); joint->setName(urdf_joint->name.c_str()); - switch (urdf_joint->type) { case urdf::Joint::REVOLUTE: { - // joint.axis - vector axes(1); - axes[0] = daeSafeCast(joint->createAndPlace(COLLADA_ELEMENT_REVOLUTE)); - axes[0]->setSid("axis0"); - domAxisRef axis = daeSafeCast(axes[0]->createAndPlace(COLLADA_ELEMENT_AXIS)); - axis->getValue().setCount(3); - axis->getValue()[0] = urdf_joint->axis.x; - axis->getValue()[1] = urdf_joint->axis.y; - axis->getValue()[2] = urdf_joint->axis.z; + // + domAxis_constraintRef revolute = daeSafeCast(joint->createAndPlace(COLLADA_ELEMENT_REVOLUTE)); + revolute->setSid("axis0"); + { + // + domAxisRef axis = daeSafeCast(revolute->createAndPlace(COLLADA_ELEMENT_AXIS)); + { + axis->getValue().setCount(3); + axis->getValue()[0] = urdf_joint->axis.x; + axis->getValue()[1] = urdf_joint->axis.y; + axis->getValue()[2] = urdf_joint->axis.z; + } + // - // joint.limits - domJoint_limitsRef limits = daeSafeCast(axes[0]->createAndPlace(COLLADA_TYPE_LIMITS)); - daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MIN))->getValue() = urdf_joint->limits->lower; - daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MAX))->getValue() = urdf_joint->limits->upper; + // + domJoint_limitsRef limits = daeSafeCast(revolute->createAndPlace(COLLADA_TYPE_LIMITS)); + { + daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MIN))->getValue() = urdf_joint->limits->lower; + daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MAX))->getValue() = urdf_joint->limits->upper; + } + // + } + // break; } case urdf::Joint::CONTINUOUS: { // Model as a REVOLUTE joint without limits - // joint.axis - vector axes(1); - axes[0] = daeSafeCast(joint->createAndPlace(COLLADA_ELEMENT_REVOLUTE)); - axes[0]->setSid("axis0"); - domAxisRef axis = daeSafeCast(axes[0]->createAndPlace(COLLADA_ELEMENT_AXIS)); - axis->getValue().setCount(3); - axis->getValue()[0] = urdf_joint->axis.x; - axis->getValue()[1] = urdf_joint->axis.y; - axis->getValue()[2] = urdf_joint->axis.z; + // + domAxis_constraintRef revolute = daeSafeCast(joint->createAndPlace(COLLADA_ELEMENT_REVOLUTE)); + revolute->setSid("axis0"); + { + // + domAxisRef axis = daeSafeCast(revolute->createAndPlace(COLLADA_ELEMENT_AXIS)); + { + axis->getValue().setCount(3); + axis->getValue()[0] = urdf_joint->axis.x; + axis->getValue()[1] = urdf_joint->axis.y; + axis->getValue()[2] = urdf_joint->axis.z; + } + // + } + // break; } case urdf::Joint::PRISMATIC: { - // joint.axis - vector axes(1); - axes[0] = daeSafeCast(joint->createAndPlace(COLLADA_ELEMENT_PRISMATIC)); - axes[0]->setSid("axis0"); - domAxisRef axis = daeSafeCast(axes[0]->createAndPlace(COLLADA_ELEMENT_AXIS)); - axis->getValue().setCount(3); - axis->getValue()[0] = urdf_joint->axis.x; - axis->getValue()[1] = urdf_joint->axis.y; - axis->getValue()[2] = urdf_joint->axis.z; - - // joint.limits - domJoint_limitsRef limits = daeSafeCast(axes[0]->createAndPlace(COLLADA_TYPE_LIMITS)); - daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MIN))->getValue() = urdf_joint->limits->lower; - daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MAX))->getValue() = urdf_joint->limits->upper; + // + domAxis_constraintRef prismatic = daeSafeCast(joint->createAndPlace(COLLADA_ELEMENT_PRISMATIC)); + prismatic->setSid("axis0"); + { + // + domAxisRef axis = daeSafeCast(prismatic->createAndPlace(COLLADA_ELEMENT_AXIS)); + { + axis->getValue().setCount(3); + axis->getValue()[0] = urdf_joint->axis.x; + axis->getValue()[1] = urdf_joint->axis.y; + axis->getValue()[2] = urdf_joint->axis.z; + } + // + + // + domJoint_limitsRef limits = daeSafeCast(prismatic->createAndPlace(COLLADA_TYPE_LIMITS)); + { + daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MIN))->getValue() = urdf_joint->limits->lower; + daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MAX))->getValue() = urdf_joint->limits->upper; + } + // + } + // break; } case urdf::Joint::FIXED: { // Model as a REVOLUTE joint with no leeway - // joint.axis - vector axes(1); - axes[0] = daeSafeCast(joint->createAndPlace(COLLADA_ELEMENT_REVOLUTE)); - axes[0]->setSid("axis0"); - domAxisRef axis = daeSafeCast(axes[0]->createAndPlace(COLLADA_ELEMENT_AXIS)); - axis->getValue().setCount(3); - axis->getValue()[0] = urdf_joint->axis.x; - axis->getValue()[1] = urdf_joint->axis.y; - axis->getValue()[2] = urdf_joint->axis.z; - - // joint.limits - domJoint_limitsRef limits = daeSafeCast(axes[0]->createAndPlace(COLLADA_TYPE_LIMITS)); - daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MIN))->getValue() = 0.0; - daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MAX))->getValue() = 0.0; + domAxis_constraintRef revolute = daeSafeCast(joint->createAndPlace(COLLADA_ELEMENT_REVOLUTE)); + revolute->setSid("axis0"); + { + // + domAxisRef axis = daeSafeCast(revolute->createAndPlace(COLLADA_ELEMENT_AXIS)); + { + axis->getValue().setCount(3); + axis->getValue()[0] = urdf_joint->axis.x; + axis->getValue()[1] = urdf_joint->axis.y; + axis->getValue()[2] = urdf_joint->axis.z; + } + // + + // + domJoint_limitsRef limits = daeSafeCast(revolute->createAndPlace(COLLADA_TYPE_LIMITS)); + { + daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MIN))->getValue() = 0.0; + daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MAX))->getValue() = 0.0; + } + // + } + // break; } case urdf::Joint::UNKNOWN: { @@ -699,14 +733,22 @@ public: // x y z angle domRotateRef joint_rotate = addRotate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.rotation); - joint_rotate->setSid("node_joint0_axis0"); + joint_rotate->setSid("node_joint0_axis0"); // @todo use joint_num } - - for (vector >::const_iterator i = urdf_link->child_links.begin(); i != urdf_link->child_links.end(); i++) { - boost::shared_ptr urdf_child_link = *i; - addVisualLink(urdf_child_link, node, link_num); + // + domInstance_geometryRef instance_geometry = daeSafeCast(node->createAndPlace(COLLADA_ELEMENT_INSTANCE_GEOMETRY)); + instance_geometry->setUrl("#g1.link0.geom"); // @todo use link_num + { + // @todo + // @todo + // @todo } + + // + for (vector >::const_iterator i = urdf_link->child_links.begin(); i != urdf_link->child_links.end(); i++) + addVisualLink(*i, node, link_num); + // } // } From 9e684833d683e6308778a26f24edb17072e078c6 Mon Sep 17 00:00:00 2001 From: tfield Date: Tue, 9 Mar 2010 04:17:14 +0000 Subject: [PATCH 124/245] collada_urdf: finished kinematics models --- collada_urdf/src/urdf_to_collada.cpp | 143 ++++++++++++++++++--------- 1 file changed, 97 insertions(+), 46 deletions(-) diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp index 2afc41b..a79a5f4 100644 --- a/collada_urdf/src/urdf_to_collada.cpp +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -104,7 +104,7 @@ public: //domLibrary_articulated_systemsRef articulatedSystemsLib_; map geometry_ids_; // link.name -> geometry.id - map joint_ids_; // joint.name -> joint.sid + map joint_sids_; // joint.name -> joint.sid public: ColladaWriter(urdf::Model* robot) : robot_(robot) { @@ -157,7 +157,7 @@ public: kinematicsScenesLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_KINEMATICS_SCENES)); kinematicsScenesLib_->setId("kscenes"); kinematicsModelsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_KINEMATICS_MODELS)); - kinematicsModelsLib_->setId("kinematics_models"); + kinematicsModelsLib_->setId("kmodels"); jointsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_JOINTS)); jointsLib_->setId("joints"); @@ -222,11 +222,10 @@ public: SCENE scene = createScene(); setupPhysics(scene); - addScene(scene); addGeometries(); addJoints(); - addKinematics(); + addKinematics(scene); addVisuals(scene); collada_->writeAll(); @@ -245,32 +244,6 @@ public: // } - void addScene(SCENE scene) { - boost::shared_ptr urdf_root = robot_->getRoot(); - - // - domKinematics_modelRef kmodel = daeSafeCast(kinematicsModelsLib_->createAndPlace(COLLADA_ELEMENT_KINEMATICS_MODEL)); - kmodel->setId("k1"); - kmodel->setName(urdf_root->name.c_str()); - - // - domInstance_kinematics_modelRef ikm = daeSafeCast(scene.kscene->createAndPlace(COLLADA_ELEMENT_INSTANCE_KINEMATICS_MODEL)); - string model_id = kmodel->getID(); - string inst_model_sid = string("inst_") + model_id; - ikm->setUrl((string("#") + model_id).c_str()); - ikm->setSid(inst_model_sid.c_str()); - { - // - domKinematics_newparamRef newparam = daeSafeCast(ikm->createAndPlace(COLLADA_ELEMENT_NEWPARAM)); - newparam->setSid("kscene.inst_k1"); - { - // kscene/inst_k1 - daeSafeCast(newparam->createAndPlace(COLLADA_ELEMENT_SIDREF))->setValue("kscene/inst_k1"); - } - // - } - } - void addGeometries() { int link_num = 0; @@ -529,13 +502,17 @@ public: } void addJoints() { + int joint_num = 0; for (map >::const_iterator i = robot_->joints_.begin(); i != robot_->joints_.end(); i++) { boost::shared_ptr urdf_joint = i->second; // domJointRef joint = daeSafeCast(jointsLib_->createAndPlace(COLLADA_ELEMENT_JOINT)); - joint->setId(urdf_joint->name.c_str()); + string joint_sid = string("joint") + boost::lexical_cast(joint_num); + joint_num++; joint->setName(urdf_joint->name.c_str()); + joint->setSid(joint_sid.c_str()); + joint_sids_[urdf_joint->name] = joint_sid; switch (urdf_joint->type) { case urdf::Joint::REVOLUTE: { @@ -657,26 +634,80 @@ public: } } - void addKinematics() + void addKinematics(SCENE scene) { // - domKinematics_modelRef model = daeSafeCast(kinematicsModelsLib_->createAndPlace(COLLADA_ELEMENT_KINEMATICS_MODEL)); - model->setId("k1"); + domKinematics_modelRef kmodel = daeSafeCast(kinematicsModelsLib_->createAndPlace(COLLADA_ELEMENT_KINEMATICS_MODEL)); + kmodel->setId("k1"); + kmodel->setName(robot_->getName().c_str()); { // - domKinematics_model_techniqueRef technique = daeSafeCast(model->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); - for (map >::const_iterator i = robot_->links_.begin(); i != robot_->links_.end(); i++) { - boost::shared_ptr urdf_link = i->second; + domKinematics_model_techniqueRef technique = daeSafeCast(kmodel->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); + for (map >::const_iterator i = robot_->joints_.begin(); i != robot_->joints_.end(); i++) { + boost::shared_ptr urdf_joint = i->second; - // + // domInstance_jointRef instance_joint = daeSafeCast(technique->createAndPlace(COLLADA_ELEMENT_INSTANCE_JOINT)); - instance_joint->setUrl("#joint_1"); + string joint_id = joint_sids_[urdf_joint->name]; + string instance_joint_url = string("#") + joint_id; + instance_joint->setUrl(instance_joint_url.c_str()); + // } // + // int link_num = 0; addKinematicLink(robot_->getRoot(), technique, link_num); + // } + // + + // + domInstance_kinematics_modelRef ikm = daeSafeCast(scene.kscene->createAndPlace(COLLADA_ELEMENT_INSTANCE_KINEMATICS_MODEL)); + string model_id = kmodel->getID(); + string inst_model_sid = string("inst_") + model_id; + ikm->setUrl((string("#") + model_id).c_str()); + ikm->setSid(inst_model_sid.c_str()); + { + // + domKinematics_newparamRef newparam_model = daeSafeCast(ikm->createAndPlace(COLLADA_ELEMENT_NEWPARAM)); + string newparam_model_sid = string("kscene.inst_") + model_id; + newparam_model->setSid(newparam_model_sid.c_str()); + { + // kscene/inst_k1 + string model_sidref = string("kscene/inst_") + model_id; + daeSafeCast(newparam_model->createAndPlace(COLLADA_ELEMENT_SIDREF))->setValue(model_sidref.c_str()); + } + // + + for (map >::const_iterator i = robot_->joints_.begin(); i != robot_->joints_.end(); i++) { + boost::shared_ptr urdf_joint = i->second; + + string joint_sid = joint_sids_[urdf_joint->name]; + + // + domKinematics_newparamRef newparam = daeSafeCast(ikm->createAndPlace(COLLADA_ELEMENT_NEWPARAM)); + string newparam_sid = string("kscene.inst_") + model_id + string(".") + joint_sid + string(".axis0"); + newparam->setSid(newparam_sid.c_str()); + { + // kscene/inst_k1/joint0/axis0 + string sidref = string("kscene/inst_") + model_id + string("/") + joint_sid + string("/axis0"); + daeSafeCast(newparam->createAndPlace(COLLADA_ELEMENT_SIDREF))->setValue(sidref.c_str()); + } + // + + // + domKinematics_newparamRef newparam_value = daeSafeCast(ikm->createAndPlace(COLLADA_ELEMENT_NEWPARAM)); + string newparam_value_sid = string("kscene.inst_") + model_id + string(".") + joint_sid + string(".axis0_value"); + newparam_value->setSid(newparam_value_sid.c_str()); + { + // 0 + daeSafeCast(newparam_value->createAndPlace(COLLADA_ELEMENT_FLOAT))->setValue(0.0f); + } + // + } + } + // } void addKinematicLink(boost::shared_ptr urdf_link, daeElementRef parent, int& link_num) { @@ -733,17 +764,37 @@ public: // x y z angle domRotateRef joint_rotate = addRotate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.rotation); - joint_rotate->setSid("node_joint0_axis0"); // @todo use joint_num + string joint_sid = joint_sids_[urdf_link->parent_joint->name]; + string joint_rotate_sid = string("node_") + joint_sid + string("_axis0"); + joint_rotate->setSid(joint_rotate_sid.c_str()); } // - domInstance_geometryRef instance_geometry = daeSafeCast(node->createAndPlace(COLLADA_ELEMENT_INSTANCE_GEOMETRY)); - instance_geometry->setUrl("#g1.link0.geom"); // @todo use link_num - { - // @todo - // @todo - // @todo + map::const_iterator i = geometry_ids_.find(urdf_link->name); + if (i != geometry_ids_.end()) { + domInstance_geometryRef instance_geometry = daeSafeCast(node->createAndPlace(COLLADA_ELEMENT_INSTANCE_GEOMETRY)); + string geometry_id = geometry_ids_[urdf_link->name]; + string instance_geometry_url = string("#") + geometry_id; + instance_geometry->setUrl(instance_geometry_url.c_str()); + { + // + domBind_materialRef bind_material = daeSafeCast(instance_geometry->createAndPlace(COLLADA_ELEMENT_BIND_MATERIAL)); + { + // + domBind_material::domTechnique_commonRef technique_common = daeSafeCast(bind_material->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); + { + // + domInstance_materialRef instance_material = daeSafeCast(technique_common->createAndPlace(COLLADA_ELEMENT_INSTANCE_MATERIAL)); + instance_material->setTarget((instance_geometry_url + string(".mat")).c_str()); + instance_material->setSymbol("mat0"); + // + } + // + } + // + } } + // // for (vector >::const_iterator i = urdf_link->child_links.begin(); i != urdf_link->child_links.end(); i++) From 3bf18c4b6fdc8d723cf89fb5e514f6884bda0d3d Mon Sep 17 00:00:00 2001 From: tfield Date: Tue, 9 Mar 2010 05:02:14 +0000 Subject: [PATCH 125/245] collada_urdf: added effects --- collada_urdf/src/urdf_to_collada.cpp | 80 ++++++++++++++++++++++++++-- 1 file changed, 75 insertions(+), 5 deletions(-) diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp index a79a5f4..1432b5d 100644 --- a/collada_urdf/src/urdf_to_collada.cpp +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -223,10 +223,10 @@ public: setupPhysics(scene); addGeometries(); - addJoints(); addKinematics(scene); addVisuals(scene); + addMaterials(); collada_->writeAll(); @@ -237,9 +237,10 @@ public: // domPhysics_scene::domTechnique_commonRef common = daeSafeCast(scene.pscene->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); { - // 0 0 0 + // 0 0 0 domTargetable_float3Ref g = daeSafeCast(common->createAndPlace(COLLADA_ELEMENT_GRAVITY)); g->getValue().set3(0.0, 0.0, 0.0); + // } // } @@ -733,8 +734,7 @@ public: // } - void addVisuals(SCENE scene) - { + void addVisuals(SCENE scene) { // domNodeRef root_node = daeSafeCast(scene.vscene->createAndPlace(COLLADA_ELEMENT_NODE)); root_node->setId("v1"); @@ -745,6 +745,76 @@ public: } } + void addMaterials() { + urdf::Color ambient, diffuse; + ambient.init("0 0 0 0"); + diffuse.init("1 1 1 0"); + + for (map >::const_iterator i = robot_->links_.begin(); i != robot_->links_.end(); i++) { + boost::shared_ptr urdf_link = i->second; + + map::const_iterator j = geometry_ids_.find(urdf_link->name); + if (j != geometry_ids_.end()) { + string geometry_id = j->second; + addEffect(geometry_id, ambient, diffuse); + } + } + } + + domEffectRef addEffect(const string& geometry_id, const urdf::Color& color_ambient, const urdf::Color& color_diffuse) + { + // + domEffectRef effect = daeSafeCast(effectsLib_->createAndPlace(COLLADA_ELEMENT_EFFECT)); + effect->setId((geometry_id + string(".eff")).c_str()); + { + // + domProfile_commonRef profile = daeSafeCast(effect->createAndPlace(COLLADA_ELEMENT_PROFILE_COMMON)); + { + // + domProfile_common::domTechniqueRef technique = daeSafeCast(profile->createAndPlace(COLLADA_ELEMENT_TECHNIQUE)); + { + // + domProfile_common::domTechnique::domPhongRef phong = daeSafeCast(technique->createAndPlace(COLLADA_ELEMENT_PHONG)); + { + // + domFx_common_color_or_textureRef ambient = daeSafeCast(phong->createAndPlace(COLLADA_ELEMENT_AMBIENT)); + { + // r g b a + domFx_common_color_or_texture::domColorRef ambient_color = daeSafeCast(ambient->createAndPlace(COLLADA_ELEMENT_COLOR)); + ambient_color->getValue().setCount(4); + ambient_color->getValue()[0] = color_ambient.r; + ambient_color->getValue()[1] = color_ambient.g; + ambient_color->getValue()[2] = color_ambient.b; + ambient_color->getValue()[3] = color_ambient.a; + // + } + // + + // + domFx_common_color_or_textureRef diffuse = daeSafeCast(phong->createAndPlace(COLLADA_ELEMENT_DIFFUSE)); + { + // r g b a + domFx_common_color_or_texture::domColorRef diffuse_color = daeSafeCast(diffuse->createAndPlace(COLLADA_ELEMENT_COLOR)); + diffuse_color->getValue().setCount(4); + diffuse_color->getValue()[0] = color_diffuse.r; + diffuse_color->getValue()[1] = color_diffuse.g; + diffuse_color->getValue()[2] = color_diffuse.b; + diffuse_color->getValue()[3] = color_diffuse.a; + // + } + // + } + // + } + // + } + // + } + // + + return effect; + } + void addVisualLink(boost::shared_ptr urdf_link, daeElementRef parent, int& link_num) { // domNodeRef node = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_NODE)); @@ -773,7 +843,7 @@ public: map::const_iterator i = geometry_ids_.find(urdf_link->name); if (i != geometry_ids_.end()) { domInstance_geometryRef instance_geometry = daeSafeCast(node->createAndPlace(COLLADA_ELEMENT_INSTANCE_GEOMETRY)); - string geometry_id = geometry_ids_[urdf_link->name]; + string geometry_id = i->second; string instance_geometry_url = string("#") + geometry_id; instance_geometry->setUrl(instance_geometry_url.c_str()); { From 642c69eabbc969036501d656b5d8cdbd3b7def09 Mon Sep 17 00:00:00 2001 From: tfield Date: Tue, 9 Mar 2010 05:07:25 +0000 Subject: [PATCH 126/245] collada_urdf: added materials --- collada_urdf/src/urdf_to_collada.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp index 1432b5d..3b20da6 100644 --- a/collada_urdf/src/urdf_to_collada.cpp +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -752,11 +752,24 @@ public: for (map >::const_iterator i = robot_->links_.begin(); i != robot_->links_.end(); i++) { boost::shared_ptr urdf_link = i->second; - + map::const_iterator j = geometry_ids_.find(urdf_link->name); if (j != geometry_ids_.end()) { string geometry_id = j->second; - addEffect(geometry_id, ambient, diffuse); + + domEffectRef effect = addEffect(geometry_id, ambient, diffuse); + + // + domMaterialRef material = daeSafeCast(materialsLib_->createAndPlace(COLLADA_ELEMENT_MATERIAL)); + string material_id = geometry_id + string(".mat"); + material->setId(material_id.c_str()); + { + // + domInstance_effectRef instance_effect = daeSafeCast(material->createAndPlace(COLLADA_ELEMENT_INSTANCE_EFFECT)); + string effect_id(effect->getId()); + instance_effect->setUrl((string("#") + effect_id).c_str()); + } + // } } } @@ -765,7 +778,8 @@ public: { // domEffectRef effect = daeSafeCast(effectsLib_->createAndPlace(COLLADA_ELEMENT_EFFECT)); - effect->setId((geometry_id + string(".eff")).c_str()); + string effect_id = geometry_id + string(".eff"); + effect->setId(effect_id.c_str()); { // domProfile_commonRef profile = daeSafeCast(effect->createAndPlace(COLLADA_ELEMENT_PROFILE_COMMON)); From 1642af2b54f44d4fff3ad3271f8aa318af5ffad2 Mon Sep 17 00:00:00 2001 From: tfield Date: Tue, 9 Mar 2010 06:52:07 +0000 Subject: [PATCH 127/245] collada_urdf: fixed position_array --- collada_urdf/src/urdf_to_collada.cpp | 78 ++++++++++++++-------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp index 3b20da6..02c69f8 100644 --- a/collada_urdf/src/urdf_to_collada.cpp +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -36,11 +36,6 @@ // urdf_to_collada.cpp -/* -Issues: - - triangles material hard-coded to "mat0" -*/ - #include #include #include @@ -349,7 +344,7 @@ public: unsigned int num_vertices = stl_mesh->vertices.size(); unsigned int num_indices = stl_mesh->indices.size(); unsigned int num_faces = num_indices / 3; - + // domSourceRef positions_source = daeSafeCast(mesh->createAndPlace(COLLADA_ELEMENT_SOURCE)); positions_source->setId((geometry_id + string(".positions")).c_str()); @@ -357,62 +352,67 @@ public: // domFloat_arrayRef positions_array = daeSafeCast(positions_source->createAndPlace(COLLADA_ELEMENT_FLOAT_ARRAY)); positions_array->setId((geometry_id + string(".positions-array")).c_str()); - positions_array->setCount(num_vertices); + positions_array->setCount(num_vertices * 3); positions_array->setDigits(6); // 6 decimal places - positions_array->getValue().setCount(num_vertices); - + positions_array->getValue().setCount(num_vertices * 3); for (unsigned int j = 0; j < num_vertices; j++) { - positions_array->getValue()[j] = stl_mesh->vertices[j].x; - positions_array->getValue()[j] = stl_mesh->vertices[j].y; - positions_array->getValue()[j] = stl_mesh->vertices[j].z; + positions_array->getValue()[j * 3 ] = stl_mesh->vertices[j].x; + positions_array->getValue()[j * 3 + 1] = stl_mesh->vertices[j].y; + positions_array->getValue()[j * 3 + 2] = stl_mesh->vertices[j].z; } + // // domSource::domTechnique_commonRef source_tech = daeSafeCast(positions_source->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); - - // - domAccessorRef accessor = daeSafeCast(source_tech->createAndPlace(COLLADA_ELEMENT_ACCESSOR)); - accessor->setCount(num_vertices); - accessor->setSource(xsAnyURI(*positions_array, string("#") + geometry_id + string(".positions-array"))); - accessor->setStride(3); - - // - // - // - domParamRef px = daeSafeCast(accessor->createAndPlace(COLLADA_ELEMENT_PARAM)); px->setName("X"); px->setType("float"); - domParamRef py = daeSafeCast(accessor->createAndPlace(COLLADA_ELEMENT_PARAM)); py->setName("Y"); py->setType("float"); - domParamRef pz = daeSafeCast(accessor->createAndPlace(COLLADA_ELEMENT_PARAM)); pz->setName("Z"); pz->setType("float"); + { + // + domAccessorRef accessor = daeSafeCast(source_tech->createAndPlace(COLLADA_ELEMENT_ACCESSOR)); + accessor->setCount(num_vertices / 3); + accessor->setSource(xsAnyURI(*positions_array, string("#") + geometry_id + string(".positions-array"))); + accessor->setStride(3); + { + // + // + // + domParamRef px = daeSafeCast(accessor->createAndPlace(COLLADA_ELEMENT_PARAM)); px->setName("X"); px->setType("float"); + domParamRef py = daeSafeCast(accessor->createAndPlace(COLLADA_ELEMENT_PARAM)); py->setName("Y"); py->setType("float"); + domParamRef pz = daeSafeCast(accessor->createAndPlace(COLLADA_ELEMENT_PARAM)); pz->setName("Z"); pz->setType("float"); + } + // + } + // } // domVerticesRef vertices = daeSafeCast(mesh->createAndPlace(COLLADA_ELEMENT_VERTICES)); - vertices->setId("vertices"); + string vertices_id = geometry_id + string(".vertices"); + vertices->setId(vertices_id.c_str()); { // domInput_localRef vertices_input = daeSafeCast(vertices->createAndPlace(COLLADA_ELEMENT_INPUT)); vertices_input->setSemantic("POSITION"); - vertices_input->setSource(domUrifragment(*positions_source, string("#") + geometry_id + string(".positions"))); + vertices_input->setSource(domUrifragment(*positions_source, string("#") + string(positions_source->getId()))); } // - + // domTrianglesRef triangles = daeSafeCast(mesh->createAndPlace(COLLADA_ELEMENT_TRIANGLES)); + triangles->setCount(num_faces); + triangles->setMaterial("mat0"); { - triangles->setCount(num_faces); - triangles->setMaterial("mat0"); - // domInput_local_offsetRef vertex_offset = daeSafeCast(triangles->createAndPlace(COLLADA_ELEMENT_INPUT)); vertex_offset->setSemantic("VERTEX"); vertex_offset->setOffset(0); - vertex_offset->setSource(domUrifragment(*positions_source, string("#") + geometry_id + string("/vertices"))); - - //

0 1 2 3 ... - domPRef indices = daeSafeCast(triangles->createAndPlace(COLLADA_ELEMENT_P)); - indices->getValue().setCount(num_indices); - for (unsigned int i = 0; i < num_indices; i++) - indices->getValue()[i] = stl_mesh->indices[i]; - //

+ vertex_offset->setSource(domUrifragment(*positions_source, string("#") + vertices_id)); + { + //

0 1 2 3 ... + domPRef indices = daeSafeCast(triangles->createAndPlace(COLLADA_ELEMENT_P)); + indices->getValue().setCount(num_indices); + for (unsigned int i = 0; i < num_indices; i++) + indices->getValue()[i] = stl_mesh->indices[i]; + //

+ } } //
} From 4e96ca0e4405d213230b7bd210b3a7a0c2b95e9a Mon Sep 17 00:00:00 2001 From: tfield Date: Tue, 9 Mar 2010 07:15:45 +0000 Subject: [PATCH 128/245] collada_urdf: reference joints explicitly rather than by instance --- collada_urdf/src/urdf_to_collada.cpp | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp index 02c69f8..159fcf1 100644 --- a/collada_urdf/src/urdf_to_collada.cpp +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -218,7 +218,6 @@ public: setupPhysics(scene); addGeometries(); - addJoints(); addKinematics(scene); addVisuals(scene); addMaterials(); @@ -502,13 +501,13 @@ public: } } - void addJoints() { + void addJoints(daeElementRef parent) { int joint_num = 0; for (map >::const_iterator i = robot_->joints_.begin(); i != robot_->joints_.end(); i++) { boost::shared_ptr urdf_joint = i->second; // - domJointRef joint = daeSafeCast(jointsLib_->createAndPlace(COLLADA_ELEMENT_JOINT)); + domJointRef joint = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_JOINT)); string joint_sid = string("joint") + boost::lexical_cast(joint_num); joint_num++; joint->setName(urdf_joint->name.c_str()); @@ -644,16 +643,7 @@ public: { // domKinematics_model_techniqueRef technique = daeSafeCast(kmodel->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); - for (map >::const_iterator i = robot_->joints_.begin(); i != robot_->joints_.end(); i++) { - boost::shared_ptr urdf_joint = i->second; - - // - domInstance_jointRef instance_joint = daeSafeCast(technique->createAndPlace(COLLADA_ELEMENT_INSTANCE_JOINT)); - string joint_id = joint_sids_[urdf_joint->name]; - string instance_joint_url = string("#") + joint_id; - instance_joint->setUrl(instance_joint_url.c_str()); - // - } + addJoints(technique); // // @@ -723,7 +713,8 @@ public: // domLink::domAttachment_fullRef attachment_full = daeSafeCast(link->createAndPlace(COLLADA_TYPE_ATTACHMENT_FULL)); - attachment_full->setJoint(urdf_joint->name.c_str()); + string attachment_joint = string("k1/") + joint_sids_[urdf_joint->name]; + attachment_full->setJoint(attachment_joint.c_str()); { addTranslate(attachment_full, urdf_joint->parent_to_joint_origin_transform.position); addRotate(attachment_full, urdf_joint->parent_to_joint_origin_transform.rotation); @@ -912,7 +903,7 @@ public: az = r.z * inv_len; } else { - // Angle is 0 (mod 2*pi), so any axis will do. + // Angle is 0 (mod 2*pi), so any axis will do aa = 0.0; ax = 1.0; ay = 0.0; From f410728fe1a132cd70814b4a65127513f57e1af5 Mon Sep 17 00:00:00 2001 From: hsu Date: Tue, 9 Mar 2010 20:47:50 +0000 Subject: [PATCH 129/245] fix for stl mesh loading --- collada_urdf/src/STLLoader.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/collada_urdf/src/STLLoader.cpp b/collada_urdf/src/STLLoader.cpp index e811e8a..b96be83 100644 --- a/collada_urdf/src/STLLoader.cpp +++ b/collada_urdf/src/STLLoader.cpp @@ -88,7 +88,10 @@ void STLLoader::readBinary(FILE* filein, Mesh* mesh) { for (int iface = 0; iface < face_num; iface++) { Vector3 normal(readFloat(filein), readFloat(filein), readFloat(filein)); for (int i = 0; i < 3; i++) { - Vector3 vertex(readFloat(filein), readFloat(filein), readFloat(filein)); + double x = readFloat(filein); + double y = readFloat(filein); + double z = readFloat(filein); + Vector3 vertex(x,y,z); int index = mesh->getVertexIndex(vertex); if (index == -1) { mesh->addVertex(vertex); From 2faa8ca0820a30991e83b90898447afd56de44e1 Mon Sep 17 00:00:00 2001 From: hsu Date: Tue, 9 Mar 2010 20:53:08 +0000 Subject: [PATCH 130/245] convert limits from radians to degrees --- collada_urdf/src/urdf_to_collada.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp index 159fcf1..cc4633f 100644 --- a/collada_urdf/src/urdf_to_collada.cpp +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -533,8 +533,8 @@ public: // domJoint_limitsRef limits = daeSafeCast(revolute->createAndPlace(COLLADA_TYPE_LIMITS)); { - daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MIN))->getValue() = urdf_joint->limits->lower; - daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MAX))->getValue() = urdf_joint->limits->upper; + daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MIN))->getValue() = urdf_joint->limits->lower * (180.0 / M_PI); + daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MAX))->getValue() = urdf_joint->limits->upper * (180.0 / M_PI); } // } From 6369746caf4699d7fd8c8af6f05d8a160f01e590 Mon Sep 17 00:00:00 2001 From: hsu Date: Tue, 9 Mar 2010 22:24:25 +0000 Subject: [PATCH 131/245] use angles::to_degrees() to make the angles conversion from radians to degrees --- collada_urdf/manifest.xml | 1 + collada_urdf/src/urdf_to_collada.cpp | 8 +++++--- stack.xml | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/collada_urdf/manifest.xml b/collada_urdf/manifest.xml index 50b67c6..b315558 100644 --- a/collada_urdf/manifest.xml +++ b/collada_urdf/manifest.xml @@ -11,4 +11,5 @@ + diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp index cc4633f..1ce34c7 100644 --- a/collada_urdf/src/urdf_to_collada.cpp +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -56,6 +56,8 @@ #include #include +#include + #include "STLLoader.h" using namespace std; @@ -533,8 +535,8 @@ public: // domJoint_limitsRef limits = daeSafeCast(revolute->createAndPlace(COLLADA_TYPE_LIMITS)); { - daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MIN))->getValue() = urdf_joint->limits->lower * (180.0 / M_PI); - daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MAX))->getValue() = urdf_joint->limits->upper * (180.0 / M_PI); + daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MIN))->getValue() = angles::to_degrees(urdf_joint->limits->lower); + daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MAX))->getValue() = angles::to_degrees(urdf_joint->limits->upper); } // } @@ -916,7 +918,7 @@ public: rot->getValue()[0] = ax; rot->getValue()[1] = ay; rot->getValue()[2] = az; - rot->getValue()[3] = aa * (180.0 / M_PI); + rot->getValue()[3] = angles::to_degrees(aa); return rot; } }; diff --git a/stack.xml b/stack.xml index e907ec8..ea2973b 100644 --- a/stack.xml +++ b/stack.xml @@ -12,7 +12,7 @@ http://ros.org/wiki/robot_model - +
From 953a2b17bbcf5b4c622544beaa812e96101e8dc3 Mon Sep 17 00:00:00 2001 From: tfield Date: Tue, 23 Mar 2010 03:04:31 +0000 Subject: [PATCH 132/245] collada_urdf: adding instance_kinematics_scene bindings --- collada_urdf/src/urdf_to_collada.cpp | 55 +++++++++++++++++++--------- 1 file changed, 38 insertions(+), 17 deletions(-) diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp index 1ce34c7..b824f5d 100644 --- a/collada_urdf/src/urdf_to_collada.cpp +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -77,13 +77,6 @@ public: domInstance_with_extraRef piscene; }; - struct LINKOUTPUT - { - list listusedlinks; - daeElementRef plink; - domNodeRef pnode; - }; - urdf::Model* robot_; boost::shared_ptr collada_; @@ -655,10 +648,17 @@ public: } // - // - domInstance_kinematics_modelRef ikm = daeSafeCast(scene.kscene->createAndPlace(COLLADA_ELEMENT_INSTANCE_KINEMATICS_MODEL)); string model_id = kmodel->getID(); string inst_model_sid = string("inst_") + model_id; + + // + // + domBind_kinematics_modelRef kmodel_bind = daeSafeCast(scene.kiscene->createAndPlace(COLLADA_ELEMENT_BIND_KINEMATICS_MODEL)); + kmodel_bind->setNode(robot_->getName().c_str()); + daeSafeCast(kmodel_bind->createAndPlace(COLLADA_ELEMENT_PARAM))->setValue(string(string(scene.kscene->getID()) + string(".") + inst_model_sid).c_str()); + + // + domInstance_kinematics_modelRef ikm = daeSafeCast(scene.kscene->createAndPlace(COLLADA_ELEMENT_INSTANCE_KINEMATICS_MODEL)); ikm->setUrl((string("#") + model_id).c_str()); ikm->setSid(inst_model_sid.c_str()); { @@ -676,28 +676,50 @@ public: for (map >::const_iterator i = robot_->joints_.begin(); i != robot_->joints_.end(); i++) { boost::shared_ptr urdf_joint = i->second; + int idof = 0; // @todo assuming 1 dof joints + string joint_sid = joint_sids_[urdf_joint->name]; + string axis_name = string("axis") + boost::lexical_cast(idof); + // domKinematics_newparamRef newparam = daeSafeCast(ikm->createAndPlace(COLLADA_ELEMENT_NEWPARAM)); - string newparam_sid = string("kscene.inst_") + model_id + string(".") + joint_sid + string(".axis0"); + string newparam_sid = string("kscene.inst_") + model_id + string(".") + joint_sid + string(".") + axis_name; newparam->setSid(newparam_sid.c_str()); { // kscene/inst_k1/joint0/axis0 - string sidref = string("kscene/inst_") + model_id + string("/") + joint_sid + string("/axis0"); + string sidref = string("kscene/inst_") + model_id + string("/") + joint_sid + string("/") + axis_name; daeSafeCast(newparam->createAndPlace(COLLADA_ELEMENT_SIDREF))->setValue(sidref.c_str()); } // // domKinematics_newparamRef newparam_value = daeSafeCast(ikm->createAndPlace(COLLADA_ELEMENT_NEWPARAM)); - string newparam_value_sid = string("kscene.inst_") + model_id + string(".") + joint_sid + string(".axis0_value"); + string newparam_value_sid = string("kscene.inst_") + model_id + string(".") + joint_sid + string(".") + axis_name + string("_value"); newparam_value->setSid(newparam_value_sid.c_str()); { // 0 daeSafeCast(newparam_value->createAndPlace(COLLADA_ELEMENT_FLOAT))->setValue(0.0f); } // + + // + domBind_joint_axisRef joint_bind = daeSafeCast(scene.kiscene->createAndPlace(COLLADA_ELEMENT_BIND_JOINT_AXIS)); + joint_bind->setTarget((string("node_") + joint_sid + string("_") + axis_name).c_str()); + { + // + domCommon_sidref_or_paramRef axis_bind = daeSafeCast(joint_bind->createAndPlace(COLLADA_ELEMENT_AXIS)); + { + daeSafeCast(axis_bind->createAndPlace(COLLADA_TYPE_PARAM))->setValue(newparam_sid.c_str()); + } + // + // + domCommon_float_or_paramRef value_bind = daeSafeCast(joint_bind->createAndPlace(COLLADA_ELEMENT_VALUE)); + { + daeSafeCast(value_bind->createAndPlace(COLLADA_TYPE_PARAM))->setValue(newparam_value_sid.c_str()); + } + } + // } } // @@ -718,8 +740,8 @@ public: string attachment_joint = string("k1/") + joint_sids_[urdf_joint->name]; attachment_full->setJoint(attachment_joint.c_str()); { - addTranslate(attachment_full, urdf_joint->parent_to_joint_origin_transform.position); addRotate(attachment_full, urdf_joint->parent_to_joint_origin_transform.rotation); + addTranslate(attachment_full, urdf_joint->parent_to_joint_origin_transform.position); addKinematicLink(robot_->getLink(urdf_joint->child_link_name), attachment_full, link_num); } // @@ -740,7 +762,7 @@ public: void addMaterials() { urdf::Color ambient, diffuse; - ambient.init("0 0 0 0"); + ambient.init("1 1 1 0"); diffuse.init("1 1 1 0"); for (map >::const_iterator i = robot_->links_.begin(); i != robot_->links_.end(); i++) { @@ -833,11 +855,10 @@ public: link_num++; { if (urdf_link->parent_joint != NULL) { - // x y z - addTranslate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.position); - // x y z w addRotate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.rotation); + // x y z + addTranslate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.position); // x y z angle domRotateRef joint_rotate = addRotate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.rotation); From 2072a78dafb88427080adb6da31f7fd0416d1d25 Mon Sep 17 00:00:00 2001 From: tfield Date: Tue, 23 Mar 2010 18:34:54 +0000 Subject: [PATCH 133/245] collada_urdf: fixing bindings --- collada_urdf/src/urdf_to_collada.cpp | 111 +++++++++++++++++---------- 1 file changed, 72 insertions(+), 39 deletions(-) diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp index b824f5d..1232a3c 100644 --- a/collada_urdf/src/urdf_to_collada.cpp +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -93,8 +93,11 @@ public: domLibrary_effectsRef effectsLib_; //domLibrary_articulated_systemsRef articulatedSystemsLib_; + domKinematics_modelRef kmodel_; + map geometry_ids_; // link.name -> geometry.id map joint_sids_; // joint.name -> joint.sid + map node_ids_; // joint.name -> node.id public: ColladaWriter(urdf::Model* robot) : robot_(robot) { @@ -114,7 +117,7 @@ public: } dom_ = daeSafeCast(doc->getDomRoot()); - dom_->setAttribute("xmlns:math","http://www.w3.org/1998/Math/MathML"); + dom_->setAttribute("xmlns:math", "http://www.w3.org/1998/Math/MathML"); // Create the required asset tag domAssetRef asset = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_ASSET)); @@ -216,6 +219,7 @@ public: addKinematics(scene); addVisuals(scene); addMaterials(); + addBindings(scene); collada_->writeAll(); @@ -508,6 +512,16 @@ public: joint->setName(urdf_joint->name.c_str()); joint->setSid(joint_sid.c_str()); joint_sids_[urdf_joint->name] = joint_sid; + + double axis_x = urdf_joint->axis.x; + double axis_y = urdf_joint->axis.y; + double axis_z = urdf_joint->axis.z; + if (axis_x == 0.0 && axis_y == 0.0 && axis_z == 0.0) { + axis_x = 1.0; + axis_y = 0.0; + axis_z = 0.0; + } + switch (urdf_joint->type) { case urdf::Joint::REVOLUTE: { @@ -519,9 +533,9 @@ public: domAxisRef axis = daeSafeCast(revolute->createAndPlace(COLLADA_ELEMENT_AXIS)); { axis->getValue().setCount(3); - axis->getValue()[0] = urdf_joint->axis.x; - axis->getValue()[1] = urdf_joint->axis.y; - axis->getValue()[2] = urdf_joint->axis.z; + axis->getValue()[0] = axis_x; + axis->getValue()[1] = axis_y; + axis->getValue()[2] = axis_z; } //
@@ -547,9 +561,9 @@ public: domAxisRef axis = daeSafeCast(revolute->createAndPlace(COLLADA_ELEMENT_AXIS)); { axis->getValue().setCount(3); - axis->getValue()[0] = urdf_joint->axis.x; - axis->getValue()[1] = urdf_joint->axis.y; - axis->getValue()[2] = urdf_joint->axis.z; + axis->getValue()[0] = axis_x; + axis->getValue()[1] = axis_y; + axis->getValue()[2] = axis_z; } //
} @@ -565,9 +579,9 @@ public: domAxisRef axis = daeSafeCast(prismatic->createAndPlace(COLLADA_ELEMENT_AXIS)); { axis->getValue().setCount(3); - axis->getValue()[0] = urdf_joint->axis.x; - axis->getValue()[1] = urdf_joint->axis.y; - axis->getValue()[2] = urdf_joint->axis.z; + axis->getValue()[0] = axis_x; + axis->getValue()[1] = axis_y; + axis->getValue()[2] = axis_z; } //
@@ -592,9 +606,9 @@ public: domAxisRef axis = daeSafeCast(revolute->createAndPlace(COLLADA_ELEMENT_AXIS)); { axis->getValue().setCount(3); - axis->getValue()[0] = urdf_joint->axis.x; - axis->getValue()[1] = urdf_joint->axis.y; - axis->getValue()[2] = urdf_joint->axis.z; + axis->getValue()[0] = axis_x; + axis->getValue()[1] = axis_y; + axis->getValue()[2] = axis_z; } // @@ -629,8 +643,47 @@ public: } } - void addKinematics(SCENE scene) - { + void addBindings(SCENE scene) { + string model_id = kmodel_->getID(); + string inst_model_sid = string("inst_") + model_id; + + // + // + domBind_kinematics_modelRef kmodel_bind = daeSafeCast(scene.kiscene->createAndPlace(COLLADA_ELEMENT_BIND_KINEMATICS_MODEL)); + kmodel_bind->setNode("v1.node0"); // @todo + daeSafeCast(kmodel_bind->createAndPlace(COLLADA_ELEMENT_PARAM))->setValue(string(string(scene.kscene->getID()) + string(".") + inst_model_sid).c_str()); + + for (map >::const_iterator i = robot_->joints_.begin(); i != robot_->joints_.end(); i++) { + boost::shared_ptr urdf_joint = i->second; + + int idof = 0; // @todo assuming 1 dof joints + string joint_sid = joint_sids_[urdf_joint->name]; + string axis_name = string("axis") + boost::lexical_cast(idof); + string joint_axis_sid = string("kscene.inst_") + model_id + string(".") + joint_sid + string(".") + axis_name; + string joint_axis_value_sid = joint_axis_sid + string("_value"); + + // + domBind_joint_axisRef joint_bind = daeSafeCast(scene.kiscene->createAndPlace(COLLADA_ELEMENT_BIND_JOINT_AXIS)); + string node_name = node_ids_[urdf_joint->name]; + joint_bind->setTarget((node_name + string("/node_") + joint_sid + string("_") + axis_name).c_str()); + { + // + domCommon_sidref_or_paramRef axis_bind = daeSafeCast(joint_bind->createAndPlace(COLLADA_ELEMENT_AXIS)); + { + daeSafeCast(axis_bind->createAndPlace(COLLADA_TYPE_PARAM))->setValue(joint_axis_sid.c_str()); + } + // + // + domCommon_float_or_paramRef value_bind = daeSafeCast(joint_bind->createAndPlace(COLLADA_ELEMENT_VALUE)); + { + daeSafeCast(value_bind->createAndPlace(COLLADA_TYPE_PARAM))->setValue(joint_axis_value_sid.c_str()); + } + } + // + } + } + + void addKinematics(SCENE scene) { // domKinematics_modelRef kmodel = daeSafeCast(kinematicsModelsLib_->createAndPlace(COLLADA_ELEMENT_KINEMATICS_MODEL)); kmodel->setId("k1"); @@ -646,17 +699,12 @@ public: addKinematicLink(robot_->getRoot(), technique, link_num); // } + kmodel_ = kmodel; // string model_id = kmodel->getID(); string inst_model_sid = string("inst_") + model_id; - // - // - domBind_kinematics_modelRef kmodel_bind = daeSafeCast(scene.kiscene->createAndPlace(COLLADA_ELEMENT_BIND_KINEMATICS_MODEL)); - kmodel_bind->setNode(robot_->getName().c_str()); - daeSafeCast(kmodel_bind->createAndPlace(COLLADA_ELEMENT_PARAM))->setValue(string(string(scene.kscene->getID()) + string(".") + inst_model_sid).c_str()); - // domInstance_kinematics_modelRef ikm = daeSafeCast(scene.kscene->createAndPlace(COLLADA_ELEMENT_INSTANCE_KINEMATICS_MODEL)); ikm->setUrl((string("#") + model_id).c_str()); @@ -702,24 +750,6 @@ public: daeSafeCast(newparam_value->createAndPlace(COLLADA_ELEMENT_FLOAT))->setValue(0.0f); } // - - // - domBind_joint_axisRef joint_bind = daeSafeCast(scene.kiscene->createAndPlace(COLLADA_ELEMENT_BIND_JOINT_AXIS)); - joint_bind->setTarget((string("node_") + joint_sid + string("_") + axis_name).c_str()); - { - // - domCommon_sidref_or_paramRef axis_bind = daeSafeCast(joint_bind->createAndPlace(COLLADA_ELEMENT_AXIS)); - { - daeSafeCast(axis_bind->createAndPlace(COLLADA_TYPE_PARAM))->setValue(newparam_sid.c_str()); - } - // - // - domCommon_float_or_paramRef value_bind = daeSafeCast(joint_bind->createAndPlace(COLLADA_ELEMENT_VALUE)); - { - daeSafeCast(value_bind->createAndPlace(COLLADA_TYPE_PARAM))->setValue(newparam_value_sid.c_str()); - } - } - // } } // @@ -865,6 +895,9 @@ public: string joint_sid = joint_sids_[urdf_link->parent_joint->name]; string joint_rotate_sid = string("node_") + joint_sid + string("_axis0"); joint_rotate->setSid(joint_rotate_sid.c_str()); + + cout << "setting " << urdf_link->parent_joint->name << " to " << node_id << endl; + node_ids_[urdf_link->parent_joint->name] = node_id; } // From d40511d2d56963fbcfd5b923d89abc522c17293b Mon Sep 17 00:00:00 2001 From: tfield Date: Tue, 23 Mar 2010 19:34:38 +0000 Subject: [PATCH 134/245] collada_urdf: adding hack to axes to placate OpenRAVE --- collada_urdf/src/urdf_to_collada.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp index 1232a3c..1648f4c 100644 --- a/collada_urdf/src/urdf_to_collada.cpp +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -522,6 +522,11 @@ public: axis_z = 0.0; } + // @hack: OpenRAVE appears to flip joint axes + axis_x *= -1.0; + axis_y *= -1.0; + axis_z *= -1.0; + switch (urdf_joint->type) { case urdf::Joint::REVOLUTE: { @@ -896,7 +901,6 @@ public: string joint_rotate_sid = string("node_") + joint_sid + string("_axis0"); joint_rotate->setSid(joint_rotate_sid.c_str()); - cout << "setting " << urdf_link->parent_joint->name << " to " << node_id << endl; node_ids_[urdf_link->parent_joint->name] = node_id; } From 1801b362a3fd42029ab7115759a343035e0d335b Mon Sep 17 00:00:00 2001 From: hsu Date: Thu, 25 Mar 2010 21:16:40 +0000 Subject: [PATCH 135/245] de-spamming, info->debug --- urdf/src/link.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/urdf/src/link.cpp b/urdf/src/link.cpp index ef057cc..ec44af3 100644 --- a/urdf/src/link.cpp +++ b/urdf/src/link.cpp @@ -139,7 +139,7 @@ bool Inertial::initXml(TiXmlElement *config) TiXmlElement *o = config->FirstChildElement("origin"); if (!o) { - ROS_INFO("Origin tag not present for inertial element, using default (Identity)"); + ROS_DEBUG("Origin tag not present for inertial element, using default (Identity)"); this->origin.clear(); } else @@ -278,7 +278,7 @@ bool Collision::initXml(TiXmlElement* config) TiXmlElement *o = config->FirstChildElement("origin"); if (!o) { - ROS_INFO("Origin tag not present for collision element, using default (Identity)"); + ROS_DEBUG("Origin tag not present for collision element, using default (Identity)"); this->origin.clear(); } else if (!this->origin.initXml(o)) From 4b496476d3c5cf49a1518e48d349877224dc090b Mon Sep 17 00:00:00 2001 From: wim Date: Mon, 29 Mar 2010 22:38:04 +0000 Subject: [PATCH 136/245] change printf to ros_debug, ticket #3932 --- robot_state_publisher/src/treefksolverposfull_recursive.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/robot_state_publisher/src/treefksolverposfull_recursive.cpp b/robot_state_publisher/src/treefksolverposfull_recursive.cpp index bfa7665..7fdf560 100644 --- a/robot_state_publisher/src/treefksolverposfull_recursive.cpp +++ b/robot_state_publisher/src/treefksolverposfull_recursive.cpp @@ -21,6 +21,7 @@ #include "robot_state_publisher/treefksolverposfull_recursive.hpp" +#include #include #include @@ -58,7 +59,7 @@ void TreeFkSolverPosFull_recursive::addFrameToMap(const map& q_i if (this_segment->second.segment.getJoint().getType() != Joint::None){ map::const_iterator jnt_pos = q_in.find(this_segment->second.segment.getJoint().getName()); if (jnt_pos == q_in.end()){ - printf("Warning: TreeFKSolverPosFull Could not find value for joint '%s'. Skipping this tree branch\n", this_segment->first.c_str()); + ROS_DEBUG("Warning: TreeFKSolverPosFull Could not find value for joint '%s'. Skipping this tree branch", this_segment->first.c_str()); return; } jnt_p = jnt_pos->second; From 9f3c2565fd1a45fc40962084d5b89cc0dfc487f2 Mon Sep 17 00:00:00 2001 From: hsu Date: Wed, 31 Mar 2010 03:59:40 +0000 Subject: [PATCH 137/245] fix faulty check and debug message for prismatic joints without limits --- urdf/src/joint.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/urdf/src/joint.cpp b/urdf/src/joint.cpp index 09bc94e..637da37 100644 --- a/urdf/src/joint.cpp +++ b/urdf/src/joint.cpp @@ -513,9 +513,9 @@ bool Joint::initXml(TiXmlElement* config) ROS_ERROR("Joint '%s' is of type REVOLUTE but it does not specify limits", this->name.c_str()); return false; } - else if (this->type == REVOLUTE || this->type == PRISMATIC) + else if (this->type == PRISMATIC) { - ROS_ERROR("Joint '%s' is of type REVOLUTE but it does not specify limits", this->name.c_str()); + ROS_INFO("Joint '%s' is of type PRISMATIC without limits", this->name.c_str()); limits.reset(); } From 2f37d1c4f08b0b0337befdaa695bdef1c557af64 Mon Sep 17 00:00:00 2001 From: wim Date: Wed, 7 Apr 2010 18:25:47 +0000 Subject: [PATCH 138/245] merge bugfixes from 1.0 branch r28613:28615 --- kdl_parser/src/check_kdl_parser.cpp | 58 +++++++---------------------- kdl_parser/src/kdl_parser.cpp | 2 +- 2 files changed, 14 insertions(+), 46 deletions(-) diff --git a/kdl_parser/src/check_kdl_parser.cpp b/kdl_parser/src/check_kdl_parser.cpp index 904d6bd..45a4d78 100644 --- a/kdl_parser/src/check_kdl_parser.cpp +++ b/kdl_parser/src/check_kdl_parser.cpp @@ -43,6 +43,15 @@ using namespace KDL; using namespace std; using namespace urdf; +void printLink(const SegmentMap::const_iterator& link, const std::string& prefix) +{ + cout << prefix << "- Segment " << link->second.segment.getName() << " has " << link->second.children.size() << " children" << endl; + for (unsigned int i=0; isecond.children.size(); i++) + printLink(link->second.children[i], prefix + " "); +} + + + int main(int argc, char** argv) { if (argc < 2){ @@ -59,51 +68,10 @@ int main(int argc, char** argv) // walk through tree cout << " ======================================" << endl; + cout << " Tree has " << my_tree.getNrOfSegments() << " link(s) and a root link" << endl; + cout << " ======================================" << endl; SegmentMap::const_iterator root = my_tree.getRootSegment(); - cout << "Found root segment '" << root->second.segment.getName() << "' with " << root->second.children.size() << " children" << endl; - for (unsigned int i=0; isecond.children.size(); i++){ - SegmentMap::const_iterator child = root->second.children[i]; - cout << " - child " << i+1 << ": " << child->second.segment.getName() << " has joint " << child->second.segment.getJoint().getName() - << " and " << child->second.children.size() << " children" << endl; - - for (unsigned int j=0; jsecond.children.size(); j++){ - SegmentMap::const_iterator grandchild = child->second.children[j]; - cout << " - grandchild " << j+1 << ": " << grandchild->second.segment.getName() << " has joint " << grandchild->second.segment.getJoint().getName() - << " and " << grandchild->second.children.size() << " children" << endl; - - } - } - - // extract chains from tree - Chain chain1, chain2; - my_tree.getChain("l_gripper_palm_link", "r_gripper_palm_link", chain1); - my_tree.getChain("r_gripper_palm_link", "l_gripper_palm_link", chain2); - cout << "Got chain1 with " << chain1.getNrOfJoints() << " joints and " << chain1.getNrOfSegments() << " segments" << endl; - cout << "Got chain2 with " << chain2.getNrOfJoints() << " joints and " << chain2.getNrOfSegments() << " segments" << endl; - - JntArray jnt1(chain1.getNrOfJoints()); - JntArray jnt2(chain1.getNrOfJoints()); - for (int i=0; i<(int)chain1.getNrOfJoints(); i++){ - jnt1(i) = (i+1)*2; - jnt2((int)chain1.getNrOfJoints()-i-1) = -jnt1(i); - } - for (int i=0; i<(int)chain1.getNrOfJoints(); i++) - cout << "jnt 1 -- jnt 2 " << jnt1(i) << " -- " << jnt2(i) << endl; - - ChainFkSolverPos_recursive solver1(chain1); - ChainFkSolverPos_recursive solver2(chain2); - Frame f1, f2; - solver1.JntToCart(jnt1, f1); - solver2.JntToCart(jnt2, f2); - cout << "frame 1 " << f1 << endl; - cout << "frame 2 " << f2.Inverse() << endl; - - // copy tree - Tree copy = my_tree; - copy.getChain("l_gripper_palm_link", "r_gripper_palm_link", chain1); - copy.getChain("r_gripper_palm_link", "l_gripper_palm_link", chain2); - cout << "Got chain1 with " << chain1.getNrOfJoints() << " joints and " << chain1.getNrOfSegments() << " segments" << endl; - cout << "Got chain2 with " << chain2.getNrOfJoints() << " joints and " << chain2.getNrOfSegments() << " segments" << endl; - + printLink(root, ""); } + diff --git a/kdl_parser/src/kdl_parser.cpp b/kdl_parser/src/kdl_parser.cpp index ae23ac4..358e2c5 100644 --- a/kdl_parser/src/kdl_parser.cpp +++ b/kdl_parser/src/kdl_parser.cpp @@ -106,7 +106,7 @@ RigidBodyInertia toKdl(boost::shared_ptr i) bool addChildrenToTree(boost::shared_ptr root, Tree& tree) { std::vector > children = root->child_links; - ROS_DEBUG("Link %s had %u children", root->name.c_str(), children.size()); + ROS_DEBUG("Link %s had %i children", root->name.c_str(), (int)children.size()); // constructs the optional inertia RigidBodyInertia inert(0); From 80b19428ed8fe88c4109d9bd28a7888832d84702 Mon Sep 17 00:00:00 2001 From: wim Date: Wed, 7 Apr 2010 18:38:52 +0000 Subject: [PATCH 139/245] Fix tf prefix lookup ticket #3949 --- robot_state_publisher/src/robot_state_publisher.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/robot_state_publisher/src/robot_state_publisher.cpp b/robot_state_publisher/src/robot_state_publisher.cpp index b299e40..175c029 100644 --- a/robot_state_publisher/src/robot_state_publisher.cpp +++ b/robot_state_publisher/src/robot_state_publisher.cpp @@ -51,7 +51,9 @@ RobotStatePublisher::RobotStatePublisher(const Tree& tree) { // get tf prefix NodeHandle n_local("~"); - n_local.param("tf_prefix", tf_prefix_, string()); + std::string searched_param; + n_local.searchParam("tf_prefix", searched_param); + n_local.param(searched_param, tf_prefix_, std::string()); // build tree solver solver_.reset(new TreeFkSolverPosFull_recursive(tree_)); From f11fc537bc12d1a0fdbc5886f5fde359c17ed852 Mon Sep 17 00:00:00 2001 From: wim Date: Wed, 7 Apr 2010 18:39:17 +0000 Subject: [PATCH 140/245] fix check for number of links in urdf --- robot_state_publisher/src/robot_state_publisher_node.cpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/robot_state_publisher/src/robot_state_publisher_node.cpp b/robot_state_publisher/src/robot_state_publisher_node.cpp index ccff5ed..ad51100 100644 --- a/robot_state_publisher/src/robot_state_publisher_node.cpp +++ b/robot_state_publisher/src/robot_state_publisher_node.cpp @@ -71,15 +71,10 @@ int main(int argc, char** argv) if (tree.getNrOfSegments() == 0){ ROS_WARN("Robot state publisher got an empty tree and cannot publish any state to tf"); - ros::spin(); - } - else if (tree.getNrOfSegments() == 1){ - ROS_WARN("Robot state publisher got a tree with only one segment and cannot publish any state to tf"); - ros::spin(); } else{ JointStateListener state_publisher(tree); - ros::spin(); } + ros::spin(); return 0; } From f8d595966bf3dcd965042c826b4e1d7b4e208c89 Mon Sep 17 00:00:00 2001 From: tfield Date: Wed, 7 Apr 2010 20:19:16 +0000 Subject: [PATCH 141/245] colladadom: tidying manifest --- colladadom/manifest.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/colladadom/manifest.xml b/colladadom/manifest.xml index f345ed9..8d05612 100644 --- a/colladadom/manifest.xml +++ b/colladadom/manifest.xml @@ -1,17 +1,17 @@ - collada-dom + This package contains the COLLADA Document Object Model (DOM) which is an API that provides a C++ object representation of a COLLADA XML instance document. + + See http://sourceforge.net/projects/collada-dom. - John Hsu + John Hsu (package) BSD http://ros.org/wiki/colladadom - - From 7af1d5595649bf28c7ea6b50873e9664551daabd Mon Sep 17 00:00:00 2001 From: wim Date: Wed, 7 Apr 2010 22:20:16 +0000 Subject: [PATCH 142/245] fix tests for multiple trees, and clean up regression tests --- urdf/src/model.cpp | 30 ++++++++----------- ...bracket.xml => fail_pr2_desc_bracket.urdf} | 0 ...c_double.xml => fail_pr2_desc_double.urdf} | 0 ...nt.xml => fail_pr2_desc_double_joint.urdf} | 0 ..._desc_loop.xml => fail_pr2_desc_loop.urdf} | 0 ...=> fail_pr2_desc_no_filename_in_mesh.urdf} | 0 ...oint2.xml => fail_pr2_desc_no_joint2.urdf} | 1 + ...f.xml => fail_pr2_desc_parent_itself.urdf} | 0 ...trees.xml => fail_pr2_desc_two_trees.urdf} | 0 urdf/test/fail_three_links_one_joint.urdf | 25 ++++++++++++++++ urdf/test/{pr2_desc.xml => pr2_desc.urdf} | 0 ...world.xml => pr2_desc_explicit_world.urdf} | 0 ...sc_no_joint.xml => pr2_desc_no_joint.urdf} | 2 +- urdf/test/test_robot_model_parser.cpp | 18 +++++------ urdf/test/test_robot_model_parser.launch | 2 +- 15 files changed, 50 insertions(+), 28 deletions(-) rename urdf/test/{pr2_desc_bracket.xml => fail_pr2_desc_bracket.urdf} (100%) rename urdf/test/{pr2_desc_double.xml => fail_pr2_desc_double.urdf} (100%) rename urdf/test/{pr2_desc_double_joint.xml => fail_pr2_desc_double_joint.urdf} (100%) rename urdf/test/{pr2_desc_loop.xml => fail_pr2_desc_loop.urdf} (100%) rename urdf/test/{pr2_desc_no_filename_in_mesh.xml => fail_pr2_desc_no_filename_in_mesh.urdf} (100%) rename urdf/test/{pr2_desc_no_joint2.xml => fail_pr2_desc_no_joint2.urdf} (99%) rename urdf/test/{pr2_desc_parent_itself.xml => fail_pr2_desc_parent_itself.urdf} (100%) rename urdf/test/{pr2_desc_two_trees.xml => fail_pr2_desc_two_trees.urdf} (100%) create mode 100644 urdf/test/fail_three_links_one_joint.urdf rename urdf/test/{pr2_desc.xml => pr2_desc.urdf} (100%) rename urdf/test/{pr2_desc_explicit_world.xml => pr2_desc_explicit_world.urdf} (100%) rename urdf/test/{pr2_desc_no_joint.xml => pr2_desc_no_joint.urdf} (84%) diff --git a/urdf/src/model.cpp b/urdf/src/model.cpp index 648c33c..65e8a14 100644 --- a/urdf/src/model.cpp +++ b/urdf/src/model.cpp @@ -232,12 +232,6 @@ bool Model::initXml(TiXmlElement *robot_xml) return false; } - // make sure tree is not empty - if (parent_link_tree.empty()){ - ROS_ERROR("The robot xml does not contain any valid links. Are you parsing an empty file, or an un-processed xacro file?"); - return false; - } - // find the root link if (!this->initRoot(parent_link_tree)) { @@ -323,21 +317,23 @@ bool Model::initRoot(std::map &parent_link_tree) this->root_link_.reset(); - for (std::map::iterator p=parent_link_tree.begin(); p!=parent_link_tree.end(); p++) + // for (std::map::iterator p=parent_link_tree.begin(); p!=parent_link_tree.end(); p++) + // find the links that have no parent in the tree + for (std::map >::iterator l=this->links_.begin(); l!=this->links_.end(); l++) { - if (parent_link_tree.find(p->second) == parent_link_tree.end()) + std::map::iterator parent = parent_link_tree.find(l->first); + if (parent == parent_link_tree.end()) { - if (this->root_link_) + // store root link + if (!this->root_link_) { - ROS_DEBUG("child '%s', parent '%s', root '%s'", p->first.c_str(), p->second.c_str(), this->root_link_->name.c_str()); - if (this->root_link_->name != p->second) - { - ROS_ERROR("Two root links found: '%s' and '%s'", this->root_link_->name.c_str(), p->second.c_str()); - return false; - } + getLink(l->first, this->root_link_); + } + // we already found a root link + else{ + ROS_ERROR("Two root links found: '%s' and '%s'", this->root_link_->name.c_str(), l->first.c_str()); + return false; } - else - getLink(p->second,this->root_link_); } } if (!this->root_link_) diff --git a/urdf/test/pr2_desc_bracket.xml b/urdf/test/fail_pr2_desc_bracket.urdf similarity index 100% rename from urdf/test/pr2_desc_bracket.xml rename to urdf/test/fail_pr2_desc_bracket.urdf diff --git a/urdf/test/pr2_desc_double.xml b/urdf/test/fail_pr2_desc_double.urdf similarity index 100% rename from urdf/test/pr2_desc_double.xml rename to urdf/test/fail_pr2_desc_double.urdf diff --git a/urdf/test/pr2_desc_double_joint.xml b/urdf/test/fail_pr2_desc_double_joint.urdf similarity index 100% rename from urdf/test/pr2_desc_double_joint.xml rename to urdf/test/fail_pr2_desc_double_joint.urdf diff --git a/urdf/test/pr2_desc_loop.xml b/urdf/test/fail_pr2_desc_loop.urdf similarity index 100% rename from urdf/test/pr2_desc_loop.xml rename to urdf/test/fail_pr2_desc_loop.urdf diff --git a/urdf/test/pr2_desc_no_filename_in_mesh.xml b/urdf/test/fail_pr2_desc_no_filename_in_mesh.urdf similarity index 100% rename from urdf/test/pr2_desc_no_filename_in_mesh.xml rename to urdf/test/fail_pr2_desc_no_filename_in_mesh.urdf diff --git a/urdf/test/pr2_desc_no_joint2.xml b/urdf/test/fail_pr2_desc_no_joint2.urdf similarity index 99% rename from urdf/test/pr2_desc_no_joint2.xml rename to urdf/test/fail_pr2_desc_no_joint2.urdf index 7b37fbe..be1fdbc 100644 --- a/urdf/test/pr2_desc_no_joint2.xml +++ b/urdf/test/fail_pr2_desc_no_joint2.urdf @@ -10,6 +10,7 @@
+ diff --git a/urdf/test/pr2_desc_parent_itself.xml b/urdf/test/fail_pr2_desc_parent_itself.urdf similarity index 100% rename from urdf/test/pr2_desc_parent_itself.xml rename to urdf/test/fail_pr2_desc_parent_itself.urdf diff --git a/urdf/test/pr2_desc_two_trees.xml b/urdf/test/fail_pr2_desc_two_trees.urdf similarity index 100% rename from urdf/test/pr2_desc_two_trees.xml rename to urdf/test/fail_pr2_desc_two_trees.urdf diff --git a/urdf/test/fail_three_links_one_joint.urdf b/urdf/test/fail_three_links_one_joint.urdf new file mode 100644 index 0000000..a6766a9 --- /dev/null +++ b/urdf/test/fail_three_links_one_joint.urdf @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/urdf/test/pr2_desc.xml b/urdf/test/pr2_desc.urdf similarity index 100% rename from urdf/test/pr2_desc.xml rename to urdf/test/pr2_desc.urdf diff --git a/urdf/test/pr2_desc_explicit_world.xml b/urdf/test/pr2_desc_explicit_world.urdf similarity index 100% rename from urdf/test/pr2_desc_explicit_world.xml rename to urdf/test/pr2_desc_explicit_world.urdf diff --git a/urdf/test/pr2_desc_no_joint.xml b/urdf/test/pr2_desc_no_joint.urdf similarity index 84% rename from urdf/test/pr2_desc_no_joint.xml rename to urdf/test/pr2_desc_no_joint.urdf index 0f17fe0..04839d2 100644 --- a/urdf/test/pr2_desc_no_joint.xml +++ b/urdf/test/pr2_desc_no_joint.urdf @@ -1,7 +1,7 @@ - + diff --git a/urdf/test/test_robot_model_parser.cpp b/urdf/test/test_robot_model_parser.cpp index ef46eb1..13236f6 100644 --- a/urdf/test/test_robot_model_parser.cpp +++ b/urdf/test/test_robot_model_parser.cpp @@ -70,16 +70,16 @@ protected: TEST_F(TestParser, test) { - for (int i=1; i= g_argc-2) - ASSERT_TRUE(robot.initXml(robot_xml)); + std::string folder = std::string(g_argv[1]) + "/test/"; + printf("Folder %s",folder.c_str()); + for (int i=2; i - + From fad48c31dbbf77d481266aa83960f60fd9aeb37c Mon Sep 17 00:00:00 2001 From: wim Date: Wed, 7 Apr 2010 22:37:10 +0000 Subject: [PATCH 143/245] preparing for 1.1.0 release --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 417a3e3..8f96cf0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,4 +16,4 @@ set(ROSPACK_MAKEDIST true) # variables. #list(APPEND CPACK_SOURCE_IGNORE_FILES /core/experimental) -rosbuild_make_distribution(1.0.1) +rosbuild_make_distribution(1.1.0) From 99a0b5062320dc3c3436b6f2b4904990615ba98d Mon Sep 17 00:00:00 2001 From: wim Date: Wed, 7 Apr 2010 23:50:02 +0000 Subject: [PATCH 144/245] add support to read robot description from parameter server, plus add regression tests --- urdf/include/urdf/model.h | 2 ++ urdf/src/model.cpp | 12 ++++++++++++ urdf/test/test_robot_model_parser.cpp | 4 ++++ urdf/test/test_robot_model_parser.launch | 2 ++ 4 files changed, 20 insertions(+) diff --git a/urdf/include/urdf/model.h b/urdf/include/urdf/model.h index c54ba52..264520f 100644 --- a/urdf/include/urdf/model.h +++ b/urdf/include/urdf/model.h @@ -58,6 +58,8 @@ public: bool initXml(TiXmlDocument *xml); /// \brief Load Model given a filename bool initFile(const std::string& filename); + /// \brief Load Model given the name of a parameter on the parameter server + bool initParam(const std::string& param); /// \brief Load Model from a XML-string bool initString(const std::string& xmlstring); diff --git a/urdf/src/model.cpp b/urdf/src/model.cpp index 65e8a14..dd5a56d 100644 --- a/urdf/src/model.cpp +++ b/urdf/src/model.cpp @@ -66,6 +66,18 @@ bool Model::initFile(const std::string& filename) } +bool Model::initParam(const std::string& param) +{ + ros::NodeHandle nh; + std::string xml_string; + if (!nh.getParam(param, xml_string)){ + ROS_ERROR("Could not find parameter %s on parameter server", param.c_str()); + return false; + } + return initString(xml_string); +} + + bool Model::initString(const std::string& xml_string) { TiXmlDocument xml_doc; diff --git a/urdf/test/test_robot_model_parser.cpp b/urdf/test/test_robot_model_parser.cpp index 13236f6..0be1a77 100644 --- a/urdf/test/test_robot_model_parser.cpp +++ b/urdf/test/test_robot_model_parser.cpp @@ -81,6 +81,10 @@ TEST_F(TestParser, test) else ASSERT_TRUE(robot.initFile(folder + file)); } + + // test reading from parameter server + ASSERT_TRUE(robot.initParam("robot_description")); + ASSERT_FALSE(robot.initParam("robot_description_wim")); SUCCEED(); } diff --git a/urdf/test/test_robot_model_parser.launch b/urdf/test/test_robot_model_parser.launch index a6d913e..81f5408 100644 --- a/urdf/test/test_robot_model_parser.launch +++ b/urdf/test/test_robot_model_parser.launch @@ -1,3 +1,5 @@ + + From 317be62c4c180b1008e7395173a2d1c213e37f83 Mon Sep 17 00:00:00 2001 From: tfield Date: Thu, 8 Apr 2010 00:48:30 +0000 Subject: [PATCH 145/245] colladadom: patch to use rosboost-cfg for boost compile/link flags --- colladadom/Makefile | 3 +- colladadom/collada-dom.patch | 54 ++++++++++++++++++++++++++++++++++++ colladadom/manifest.xml | 2 +- colladadom/use_1_5.patch | 22 --------------- 4 files changed, 56 insertions(+), 25 deletions(-) create mode 100644 colladadom/collada-dom.patch delete mode 100644 colladadom/use_1_5.patch diff --git a/colladadom/Makefile b/colladadom/Makefile index 223b1c4..efb8121 100644 --- a/colladadom/Makefile +++ b/colladadom/Makefile @@ -4,7 +4,7 @@ TARBALL_URL = http://pr.willowgarage.com/downloads/collada-dom-2.2.zip SOURCE_DIR = build/colladadom INITIAL_DIR = build/collada-dom UNPACK_CMD = unzip -TARBALL_PATCH=use_1_5.patch +TARBALL_PATCH = collada-dom.patch MD5SUM_FILE = collada-dom-2.2.zip.md5sum include $(shell rospack find mk)/download_unpack_build.mk @@ -25,7 +25,6 @@ endif installed: wiped $(SOURCE_DIR)/unpacked @echo "ROOT is: $(ROOT)" -mkdir -p $(ROOT)/include - -mkdir -p $(ROOT)/include -mkdir -p $(ROOT)/lib @echo "making it" cd $(SOURCE_DIR)/dom && make $(ROS_PARALLEL_JOBS) diff --git a/colladadom/collada-dom.patch b/colladadom/collada-dom.patch new file mode 100644 index 0000000..eb05cec --- /dev/null +++ b/colladadom/collada-dom.patch @@ -0,0 +1,54 @@ +Index: dom/Makefile +=================================================================== +--- dom/Makefile 2008-10-02 17:48:30.000000000 -0700 ++++ dom/Makefile 2010-03-03 14:44:09.162398249 -0800 +@@ -55,7 +55,7 @@ + conf := release + + # Collada version: '1.4', '1.5', or 'all' +-colladaVersion := 1.4 ++colladaVersion := 1.5 + + # parser: 'libxml', 'tinyxml', or 'all'. + parser := libxml +@@ -188,7 +188,7 @@ + ifneq ($(filter install uninstall installTest,$(MAKECMDGOALS)),) + # You can only install on Mac or Linux. Check for that. + ifeq ($(oss),linux) +-prefix := /usr/local ++prefix := ../../../ + else ifeq ($(oss),mac) + prefix := /Library/Frameworks + else +Index: dom/make/common.mk +=================================================================== +--- dom/make/common.mk 2008-05-14 17:30:42.000000000 -0700 ++++ dom/make/common.mk 2010-04-07 17:16:11.000000000 -0700 +@@ -17,6 +17,8 @@ + debugSuffix := + endif + ++ccFlags += $(shell rosboost-cfg --cflags) ++ + ifeq ($(os),mac) + # Add the -arch flags to specify what architectures we're building for. + ccFlags += $(addprefix -arch ,$(subst x86,i386,$(archs))) +Index: dom/make/domTest.mk +=================================================================== +--- dom/make/domTest.mk 2008-09-03 08:51:18.000000000 -0700 ++++ dom/make/domTest.mk 2010-04-07 17:17:18.000000000 -0700 +@@ -55,13 +55,7 @@ + endif + + # Boost defs +-ifeq ($(os),linux) +-libOpts += -lboost_filesystem +-else +-includeOpts += -Iexternal-libs/boost +-libOpts += external-libs/boost/lib/$(buildID)/libboost_system.a +-libOpts += external-libs/boost/lib/$(buildID)/libboost_filesystem.a +-endif ++libOpts += $(shell rosboost-cfg --lflags system,filesystem) + ifeq ($(os),ps3) + # PS3 doesn't support C++ locales, so tell boost not to use them + ccFlags += -DBOOST_NO_STD_LOCALE diff --git a/colladadom/manifest.xml b/colladadom/manifest.xml index 8d05612..da732a0 100644 --- a/colladadom/manifest.xml +++ b/colladadom/manifest.xml @@ -6,7 +6,7 @@ See http://sourceforge.net/projects/collada-dom. - John Hsu (package) + John Hsu, Tim Field BSD http://ros.org/wiki/colladadom diff --git a/colladadom/use_1_5.patch b/colladadom/use_1_5.patch deleted file mode 100644 index e8a739c..0000000 --- a/colladadom/use_1_5.patch +++ /dev/null @@ -1,22 +0,0 @@ -Index: dom/Makefile -=================================================================== ---- dom/Makefile 2008-10-02 17:48:30.000000000 -0700 -+++ dom/Makefile 2010-03-03 14:44:09.162398249 -0800 -@@ -55,7 +55,7 @@ - conf := release - - # Collada version: '1.4', '1.5', or 'all' --colladaVersion := 1.4 -+colladaVersion := 1.5 - - # parser: 'libxml', 'tinyxml', or 'all'. - parser := libxml -@@ -188,7 +188,7 @@ - ifneq ($(filter install uninstall installTest,$(MAKECMDGOALS)),) - # You can only install on Mac or Linux. Check for that. - ifeq ($(oss),linux) --prefix := /usr/local -+prefix := ../../../ - else ifeq ($(oss),mac) - prefix := /Library/Frameworks - else From a53de106cdb9d079355bec05a5288da63a46f05b Mon Sep 17 00:00:00 2001 From: tfield Date: Thu, 8 Apr 2010 01:05:47 +0000 Subject: [PATCH 146/245] collada_urdf: added option to specify output filename --- collada_urdf/ROS_BUILD_BLACKLIST | 1 - collada_urdf/manifest.xml | 2 + collada_urdf/src/urdf_to_collada.cpp | 11 +- collada_urdf/test/base.dae | 63 - collada_urdf/test/ir663.dae | 5517 ---------- collada_urdf/test/kr150.dae | 13484 ------------------------- collada_urdf/test/ped_welder.dae | 2206 ---- collada_urdf/test/pr2.urdf | 3399 ------- collada_urdf/test/simple.dae | 392 - 9 files changed, 8 insertions(+), 25067 deletions(-) delete mode 100644 collada_urdf/ROS_BUILD_BLACKLIST delete mode 100644 collada_urdf/test/base.dae delete mode 100644 collada_urdf/test/ir663.dae delete mode 100644 collada_urdf/test/kr150.dae delete mode 100644 collada_urdf/test/ped_welder.dae delete mode 100644 collada_urdf/test/pr2.urdf delete mode 100644 collada_urdf/test/simple.dae diff --git a/collada_urdf/ROS_BUILD_BLACKLIST b/collada_urdf/ROS_BUILD_BLACKLIST deleted file mode 100644 index 22710e9..0000000 --- a/collada_urdf/ROS_BUILD_BLACKLIST +++ /dev/null @@ -1 +0,0 @@ -Experimental code. diff --git a/collada_urdf/manifest.xml b/collada_urdf/manifest.xml index b315558..ff3a891 100644 --- a/collada_urdf/manifest.xml +++ b/collada_urdf/manifest.xml @@ -1,6 +1,8 @@ + This package contains a tool to convert Unified Robot Description Format (URDF) documents into COLLAborative Design Activity (COLLADA) documents. + Tim Field BSD diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp index 1648f4c..edf51c9 100644 --- a/collada_urdf/src/urdf_to_collada.cpp +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -100,14 +100,13 @@ public: map node_ids_; // joint.name -> node.id public: - ColladaWriter(urdf::Model* robot) : robot_(robot) { + ColladaWriter(const string& documentName, urdf::Model* robot) : robot_(robot) { daeErrorHandler::setErrorHandler(this); collada_.reset(new DAE()); collada_->setIOPlugin(NULL); collada_->setDatabase(NULL); - string documentName("mycollada.dae"); daeDocument* doc = NULL; daeInt error = collada_->getDatabase()->insertDocument(documentName.c_str(), &doc); // also creates a collada root if (error != DAE_OK || doc == NULL) @@ -985,8 +984,8 @@ public: int main(int argc, char** argv) { - if (argc != 2) { - std::cerr << "Usage: urdf_to_collada input.urdf" << std::endl; + if (argc != 3) { + std::cerr << "Usage: urdf_to_collada input.urdf output.dae" << std::endl; return -1; } @@ -1004,7 +1003,9 @@ int main(int argc, char** argv) return -1; } - collada_urdf::ColladaWriter* writer = new collada_urdf::ColladaWriter(&robot); + string output_filename(argv[2]); + + collada_urdf::ColladaWriter* writer = new collada_urdf::ColladaWriter(output_filename, &robot); writer->writeScene(); delete writer; diff --git a/collada_urdf/test/base.dae b/collada_urdf/test/base.dae deleted file mode 100644 index b1e4d14..0000000 --- a/collada_urdf/test/base.dae +++ /dev/null @@ -1,63 +0,0 @@ - - - - - VCGLab - VCGLib | MeshLab - - Y_UP - Sat Dec 26 05:44:16 2009 - Sat Dec 26 05:44:16 2009 - - - - - - - - - 0.245 0.03 0.182 0.305 0.03 0.182 0.245 -0.03 0.2201 0.245 0.00235022 0.2201 0.305 -0.03 0.2201 0.245 -0.03 0.182 0.305 -0.03 0.182 0.305 -0.03 0.2688 0.305 0.03 0.2688 0.305 0.03 0.2509 0.305 -0.03 0.2509 0.245 -0.03 0.2688 0.245 0.00235022 0.2509 0.245 -0.00235022 0.2509 0.245 0.03 0.2688 0.305 0.03 0.2201 0.296177 0.013287 0.2201 0.259464 0.0195866 0.2201 0.245 0.03 0.2201 0.2975 1.78638e-18 0.2509 0.245 0.03 0.2509 0.272648 0.0223767 0.2509 0.245 -0.03 0.2509 0.284864 -0.0202227 0.2509 0.247559 -0.00726508 0.2509 0.253052 -0.00798837 0.2509 0.261147 -0.01773 0.2509 0.253857 -0.00769545 0.2509 0.272648 -0.0223767 0.2509 0.246912 -0.00674251 0.2201 0.245 -0.00235022 0.2201 0.259464 -0.0195866 0.2201 0.27225 -0.0248482 0.2201 0.246912 0.00674251 0.2201 0.253857 0.00769545 0.2509 0.253052 0.00798837 0.2509 0.247559 0.00726508 0.2509 0.253052 0.00798837 0.241308 0.252209 0.00822719 0.231517 0.253052 -0.00798837 0.241308 0.252209 -0.00822719 0.231517 0.25143 -0.00833477 0.2201 0.25143 -0.00833477 0.2229 0.261147 0.01773 0.2509 0.294081 0.0119235 0.2509 0.285877 0.0225099 0.2229 0.284864 0.0202227 0.2509 0.3 -6.85789e-09 0.2229 0.294081 -0.0119235 0.2509 0.259464 -0.0195868 0.2229 0.27225 -0.0248483 0.2229 0.259464 0.0195869 0.2229 0.25143 0.00833477 0.2229 0.25143 0.00833477 0.2201 0.27225 0.0248483 0.2229 0.27225 0.0248482 0.2201 0.296177 0.0132868 0.2229 0.285876 0.02251 0.2201 0.296177 -0.013287 0.2201 0.3 -6.84691e-09 0.2201 0.296177 -0.0132868 0.2229 0.285877 -0.0225099 0.2229 0.285876 -0.02251 0.2201 0.318955 -0.220906 0.219841 0.318686 2.40068e-16 0.225177 0.310453 -0.261757 0.218225 0.25447 -0.315409 0.218013 0.275611 -0.311096 0.0772584 0.286334 -0.295544 0.217612 0.217444 -0.322342 0.21928 0.0642492 -0.322267 0.223602 0.0650111 -0.107523 0.233639 0.224364 -0.324741 0.0818477 0.0650111 0.107523 0.233639 0.0134436 -0.32226 0.223998 0.318955 0.220906 0.219841 0.0642492 0.322267 0.223602 -0.146581 0.324161 0.115067 0.217444 0.322342 0.21928 0.25447 0.315409 0.218013 0.286334 0.295544 0.217612 0.275611 0.311096 0.0772584 0.310453 0.261757 0.218225 0.326363 0.223474 0.0727134 -0.184988 -0.322319 0.220588 -0.146581 -0.321161 0.115067 0.0134436 0.32226 0.223998 -0.189051 -2.02495e-16 0.231751 -0.184988 0.322319 0.220588 -0.183981 0.319367 0.217823 0.310209 -0.272456 0.07416 0.326363 -0.223474 0.0727134 0.312825 -0.273958 0.0739258 0.310209 0.272456 0.07416 0.323346 0.223467 0.0729836 -0.146581 0.321161 0.115067 0.224364 0.324741 0.0818477 0.316094 0.220953 0.217011 0.323346 -0.223467 0.0729836 0.316094 -0.220953 0.217011 0.302998 -0.270186 0.215183 0.224361 -0.32174 0.0818479 0.27409 -0.308501 0.0773946 -0.146581 -0.324161 0.115067 0.217582 -0.319391 0.21647 0.312825 0.273958 0.0739258 0.0641175 0.319315 0.220803 0.224361 0.32174 0.0818479 0.27409 0.308501 0.0773946 -0.183981 -0.319367 0.217823 -0.187973 2.25607e-16 0.22879 0.0641175 -0.106536 0.230673 0.0641175 0.106536 0.230673 0.0168136 -0.319308 0.221187 0.0641175 -0.319315 0.220803 0.267012 -0.306187 0.214973 0.0168136 0.319308 0.221187 0.315825 2.39999e-16 0.222352 0.302998 0.270186 0.215183 0.217582 0.319391 0.21647 0.267012 0.306187 0.214973 0.327 0.143998 0.117 0.327 -0.159361 0.0940276 0.327 -0.163022 0.0892562 0.327 -0.2225 0 0.327 0.153395 0.11042 0.327 0.159361 0.0940276 0.327 0.149734 0.115192 0.327 -0.2225 0.0874478 0.313 -0.274748 0 0.27483 -0.312954 0.0922537 0.313062 -0.274641 0.0887319 0.276248 -0.315599 0 0.274748 -0.313 0 0.2225 -0.33 0 0.2225 -0.327 0 0.2225 -0.327 0.0970746 -0.165173 -0.33 0.131792 -0.117205 -0.33 0 -0.117205 -0.327 0 0.315599 -0.276248 0 0.2225 -0.33 0.0970746 0.315659 -0.276143 0.0887321 0.276327 -0.315553 0.0922542 0.33 -0.2225 0 0.33 0.168758 0.0874478 0.33 0.2225 0.0874478 0.33 0.163022 0.0892562 0.33 -0.2225 0.0874478 0.33 0.2225 0 0.276327 0.315553 0.0922542 0.315599 0.276248 0 0.315659 0.276143 0.0887321 0.2225 0.327 0 0.276248 0.315599 0 0.2225 0.33 0 -0.165173 0.327 0.131792 -0.165173 0.33 0.131792 0.2225 0.33 0.0970746 -0.117205 0.33 0 -0.117205 0.327 0 0.2225 0.327 0.0970746 0.274748 0.313 0 0.327 0.2225 0 0.313 0.274748 0 0.327 0.168758 0.0874478 0.327 0.2225 0.0874478 0.27483 0.312954 0.0922537 0.313062 0.274641 0.0887319 0.33 0.159361 0.0940276 0.33 0.153395 0.11042 0.33 -0.143998 0.117 0.327 0.163022 0.0892562 0.33 -0.163022 0.0892562 0.33 -0.168758 0.0874478 0.33 -0.159361 0.0940276 0.327 -0.168758 0.0874478 0.33 -0.153395 0.11042 0.327 -0.153395 0.11042 0.33 -0.149734 0.115192 0.327 -0.149734 0.115192 0.33 0.143998 0.117 0.33 0.149734 0.115192 0.327 -0.143998 0.117 -0.165173 -0.327 0.131792 -0.327 -0.2225 0 -0.33 -0.2225 0 -0.33 -0.148592 0.134628 -0.33 -0.151799 0.141128 -0.276248 -0.315599 0 -0.315599 -0.276248 0 -0.315658 -0.276146 0.145268 -0.2225 -0.33 0 -0.2225 -0.33 0.136925 -0.117737 -0.33 0 -0.117737 -0.327 0 -0.2225 -0.327 0.136925 -0.2225 -0.327 0 -0.274748 -0.313 0 -0.274828 -0.312955 0.141746 -0.313 -0.274748 0 -0.313061 -0.274644 0.145268 -0.327 0.2225 0 -0.313 0.274748 0 -0.327 -0.141837 0.132 -0.327 0.141837 0.132 -0.327 -0.2225 0.146552 -0.313061 0.274644 0.145268 -0.274748 0.313 0 -0.315599 0.276248 0 -0.276248 0.315599 0 -0.2225 0.327 0 -0.2225 0.327 0.136925 -0.2225 0.33 0 -0.117737 0.33 0 -0.165723 0.327 0.131841 -0.117737 0.327 0 -0.315658 0.276146 0.145268 -0.276325 0.315555 0.141746 -0.33 0.2225 0 -0.33 0.2225 0.146552 -0.33 0.152273 0.146552 -0.327 0.152273 0.146552 -0.327 0.2225 0.146552 -0.33 0.151799 0.141128 -0.33 0.148592 0.134628 -0.327 0.148592 0.134628 -0.327 0.151799 0.141128 -0.33 0.141837 0.132 -0.33 -0.141837 0.132 -0.327 -0.148592 0.134628 -0.327 -0.151799 0.141128 -0.33 -0.152273 0.146552 -0.33 -0.2225 0.146552 -0.327 -0.152273 0.146552 -0.165723 0.33 0.131841 -0.2225 0.33 0.136925 -0.274828 0.312955 0.141746 -0.165723 -0.327 0.131841 -0.165723 -0.33 0.131841 -0.276325 -0.315555 0.141746 -0.325972 0.174959 0.51394 -0.305 0.190571 0.503654 -0.305 0.192256 0.452 -0.254916 0.195694 0.406996 -0.305 0.18778 0.602553 -0.305 0.186508 0.649774 -0.255 0.191001 0.451887 -0.254949 0.19234 0.415669 -0.255 0.194001 0.452 -0.255 0.187526 0.676239 -0.305 0.181695 0.803651 -0.305 0.183551 0.750618 -0.255 0.184526 0.676123 -0.255 0.190997 0.452 -0.255 0.179 0.90325 -0.305 0.179608 0.854532 -0.305 0.177254 0.90325 -0.323192 0.169941 0.85506 -0.327255 0.172677 0.74443 -0.328383 0.17422 0.656504 -0.32801 0.173473 0.704113 -0.305 0.185233 0.695482 -0.327529 0.174829 0.567928 -0.328241 0.174594 0.615164 -0.305 0.189109 0.553839 -0.297877 0.209371 0.256092 -0.274367 0.209905 0.257332 -0.304059 0.200969 0.302768 -0.251783 0.20443 0.28843 -0.248527 0.210502 0.258596 -0.249023 0.206506 0.261922 -0.251881 0.201205 0.289753 -0.304888 0.198147 0.3327 -0.25376 0.197109 0.32815 -0.253833 0.19993 0.330533 -0.305102 0.195885 0.36724 -0.254576 0.197602 0.366393 -0.254754 0.193783 0.382353 -0.312527 0.185038 0.412667 -0.310681 0.184879 0.373338 -0.305058 0.193977 0.406854 -0.30845 0.184721 0.334099 -0.289891 0.212785 0.243015 -0.271818 0.205994 0.260764 -0.303743 0.191257 0.401296 -0.303241 0.193357 0.359948 -0.323582 -0.118243 0.452121 -0.322459 -0.148934 0.452138 -0.304121 0.189287 0.451895 -0.237915 0.248522 0.222942 -0.244236 0.218922 0.238534 -0.238138 0.240854 0.22334 -0.242125 0.228982 0.232125 -0.285693 0.22725 0.230449 -0.255679 0.255701 0.22167 -0.237682 0.256115 0.222535 -0.239795 -4.96529e-05 0.226575 -0.2411 0.000348644 0.229516 -0.304569 0.182366 0.691265 -0.255 0.175994 0.90325 -0.304398 0.186217 0.55063 -0.304527 0.183832 0.638319 -0.286334 0.196921 0.222908 -0.301987 0.159291 0.223448 -0.305548 0.220864 0.22068 -0.306249 0.162409 0.256757 -0.298881 0.187738 0.256891 -0.284545 0.2045 0.222679 -0.31309 0.168203 0.319199 -0.305265 0.185185 0.295075 -0.318821 0.173026 0.385273 -0.32124 0.174508 0.41979 -0.313661 0.185352 0.452 -0.314117 0.184907 0.452 -0.323158 0.175 0.452 -0.314575 0.169515 0.334771 -0.315813 0.170594 0.348479 -0.318405 0.127329 0.342524 -0.309921 0.165431 0.288623 -0.278769 0.235542 0.221515 -0.279606 0.231048 0.221697 -0.292612 0.216024 0.241985 -0.272642 0.255321 0.220795 -0.278181 0.242962 0.222729 -0.313401 0.173632 0.90325 -0.320552 0.168 0.90325 -0.326282 0.114492 0.804542 -0.326299 0.171926 0.778874 -0.328246 0.116797 0.507437 -0.325 1e-20 0.90325 -0.324194 -0.0501721 0.90325 -0.321998 1e-20 0.90325 -0.325372 1e-20 0.890679 -0.325672 1e-20 0.878709 -0.325951 1e-20 0.86653 -0.326772 1e-20 0.825969 -0.326307 1e-20 0.84981 -0.327584 0.0576309 0.761329 -0.326474 -0.0572035 0.818566 -0.327348 1e-20 0.793093 -0.328026 1e-20 0.74811 -0.328777 1e-20 0.683817 -0.329074 0.0582101 0.632797 -0.329291 1e-20 0.601615 -0.328758 0.0583677 0.50648 -0.329198 1e-20 0.538023 -0.328758 -0.0583677 0.50648 -0.328725 1e-20 0.493803 -0.327719 1e-20 0.452 -0.327654 0.0339559 0.452 -0.326848 0.106839 0.452 -0.327461 0.0641029 0.452 -0.320992 0.0424801 0.358419 -0.326563 0.118888 0.452 -0.329032 0.116696 0.5663 -0.329212 0.0583159 0.567789 -0.329134 0.116487 0.62702 -0.32849 0.0579925 0.698359 -0.328657 0.116056 0.688018 -0.326474 0.0572035 0.818566 -0.327682 0.115339 0.747717 -0.324194 0.0501721 0.90325 -0.324519 0.113487 0.856916 -0.325272 0.0566966 0.866923 -0.324053 0.0557668 0.90325 -0.325414 0.149809 0.452 -0.322741 0.101969 0.90325 -0.322468 0.110672 0.90325 -0.320542 0.0747267 0.90325 -0.306649 -0.0440814 0.225717 -0.321698 3.04167e-18 0.365415 -0.319981 0.0849322 0.350475 -0.321021 -1.41505e-17 0.358711 -0.306786 9.95304e-13 0.225921 -0.306266 0.0786846 0.225278 -0.306649 0.0440814 0.225717 -0.305671 0.1061 0.224763 -0.304453 0.135477 0.224064 -0.148781 0.324158 0.115264 -0.224777 0.324039 0.122069 -0.214171 0.317755 0.219741 -0.273735 0.308222 0.208534 -0.221539 0.32242 0.214781 -0.148781 0.321157 0.115264 -0.186004 0.322372 0.217532 -0.187197 0.317983 0.220809 -0.186617 0.320208 0.219217 -0.197169 0.317996 0.220424 -0.197781 0.322386 0.216753 -0.208082 0.320313 0.218038 -0.209292 0.322401 0.21587 -0.21517 0.32241 0.215368 -0.323607 -0.135184 0.19852 -0.323528 1e-20 0.2008 -0.318306 1.82333e-17 0.213451 -0.310936 0.125138 0.223958 -0.323607 0.135184 0.19852 -0.312 2.00221e-13 0.225598 -0.31521 -0.221084 0.208086 -0.323741 -0.221318 0.194688 -0.325961 0.222427 0.13113 -0.325961 -0.222427 0.13113 -0.309825 -0.271665 0.129685 -0.322968 -0.22243 0.130862 -0.323741 0.221318 0.194688 -0.31521 0.221084 0.208086 -0.312426 -0.273145 0.129918 -0.275399 -0.310355 0.126603 -0.224775 -0.321038 0.122069 -0.273892 -0.307764 0.126468 -0.148781 -0.324158 0.115264 -0.148781 -0.321157 0.115264 -0.224777 -0.324039 0.122069 -0.208625 -0.319421 0.214695 -0.221431 -0.319442 0.213519 -0.272583 -0.305472 0.207018 -0.322968 0.22243 0.130862 -0.320769 0.221331 0.193828 -0.320631 -0.139151 0.197785 -0.320546 6.30092e-15 0.20022 -0.325152 -0.11512 0.722596 -0.273892 0.307764 0.126468 -0.309165 0.267356 0.197968 -0.309825 0.271665 0.129685 -0.224775 0.321038 0.122069 -0.221582 0.319442 0.213502 -0.275399 0.310355 0.126603 -0.312426 0.273145 0.129918 -0.221375 0.317028 0.219478 -0.221453 0.319826 0.217248 -0.304426 0.280405 0.201639 -0.317801 0.255294 0.19666 -0.299715 0.249966 0.219539 -0.24864 0.30876 0.218759 -0.280911 0.28269 0.218731 -0.207 0.318 0.220027 -0.185804 0.318235 0.216983 -0.207 -0.318 0.220027 -0.214171 -0.317755 0.219741 -0.19115 1.25767e-15 0.231672 -0.186617 -0.320208 0.219217 -0.187197 -0.317983 0.220809 -0.197169 -0.317996 0.220424 -0.21517 -0.32241 0.215368 -0.209292 -0.322401 0.21587 -0.208082 -0.320313 0.218038 -0.24864 -0.30876 0.218759 -0.221375 -0.317028 0.219478 -0.273735 -0.308222 0.208534 -0.280911 -0.28269 0.218731 -0.221539 -0.32242 0.214781 -0.221453 -0.319826 0.217248 -0.304426 -0.280405 0.201639 -0.255006 -0.255716 0.221704 -0.272642 -0.255321 0.220795 -0.299715 -0.249966 0.219539 -0.317801 -0.255294 0.19666 -0.301987 -0.159291 0.223448 -0.284612 -0.204193 0.222689 -0.305548 -0.220864 0.22068 -0.310936 -0.125138 0.223958 -0.304453 -0.135477 0.224064 -0.305671 -0.1061 0.224763 -0.237915 -0.248522 0.222942 -0.319981 -0.0849325 0.350475 -0.306266 -0.0786846 0.225278 -0.306973 -0.162984 0.262788 -0.29888 -0.187738 0.256888 -0.286341 -0.196896 0.222909 -0.27961 -0.231026 0.221698 -0.292592 -0.21605 0.241947 -0.279142 -0.240706 0.22344 -0.278797 -0.235396 0.221521 -0.237682 -0.256115 0.222535 -0.238138 -0.240854 0.22334 -0.282592 -0.224003 0.23067 -0.273336 -0.242254 0.220755 -0.304622 0.174261 0.90325 -0.311677 0.183097 0.452023 -0.304282 0.187623 0.502688 -0.310542 0.182633 0.412026 -0.323063 0.173494 0.511837 -0.32034 0.173693 0.452127 -0.324596 0.173279 0.564425 -0.304473 0.184977 0.595777 -0.304591 0.180895 0.740214 -0.304608 0.179371 0.785523 -0.304635 0.176065 0.866676 -0.323492 0.170418 0.774572 -0.304623 0.177766 0.827554 -0.295757 0.205468 0.259454 -0.302126 0.183727 0.292501 -0.300294 0.200042 0.287323 -0.30248 0.19574 0.326128 -0.308248 0.182837 0.372007 -0.283088 0.223173 0.231357 -0.276806 0.219821 0.219397 -0.272025 0.241784 0.218554 -0.266838 0.258148 0.217941 -0.273397 0.242111 0.220802 -0.300184 0.243053 0.216873 -0.274479 0.230879 0.218982 -0.282912 0.194523 0.220198 -0.283734 0.191759 0.220268 -0.295238 0.186296 0.254202 -0.308778 0.16588 0.304917 -0.305644 0.183036 0.332093 -0.311579 0.168257 0.333242 -0.315148 0.171122 0.374313 -0.31252 0.182266 0.452036 -0.317814 0.17287 0.410497 -0.25101 0.258505 0.218741 -0.236505 0.250108 0.220605 -0.298755 0.157867 0.220685 -0.308804 0.143477 0.220547 -0.305479 0.163082 0.274689 -0.302248 0.160417 0.247573 -0.312494 0.169019 0.343155 -0.322459 0.148934 0.452138 -0.311447 0.171306 0.90325 -0.321794 0.113042 0.849929 -0.317592 0.16662 0.90325 -0.319589 0.106669 0.90325 -0.323582 0.118243 0.452121 -0.325414 0.11619 0.515753 -0.325318 0.173006 0.610776 -0.326128 0.116086 0.583633 -0.325486 0.172631 0.651692 -0.325994 0.115787 0.653377 -0.325152 0.11512 0.722596 -0.325152 0.171918 0.699161 -0.324427 0.171143 0.739755 -0.320357 0.168503 0.852728 -0.325911 -6.48498e-12 0.506772 -0.324721 1e-20 0.452103 -0.324656 -0.033776 0.452103 -0.324096 1.41188e-18 0.436435 -0.326316 -2.11219e-13 0.573478 -0.325848 -1.66285e-12 0.676207 -0.324858 4.31599e-14 0.76006 -0.325001 -0.0575123 0.735054 -0.32587 -0.0578545 0.661162 -0.323803 0.0570312 0.803185 -0.324019 1.97312e-18 0.812307 -0.323803 -0.0570312 0.803185 -0.322894 9.00636e-15 0.869073 -0.323368 4.73828e-14 0.846747 -0.322539 1.69697e-14 0.884136 -0.321055 0.0555624 0.90325 -0.322256 -3.57213e-16 0.894869 -0.322445 0.0564522 0.860836 -0.323719 0.114177 0.788907 -0.325001 0.0575123 0.735054 -0.32587 0.0578545 0.661162 -0.326226 0.0580113 0.586225 -0.325867 0.0580715 0.514967 -0.324656 0.033776 0.452103 -0.324466 0.063758 0.452106 -0.323862 0.106217 0.452117 -0.317931 0.0423167 0.357964 -0.306287 7.67491e-18 0.249557 -0.303472 -6.25928e-13 0.223117 -0.317931 -0.0423167 0.357964 -0.309224 2.06897e-18 0.276839 -0.311947 8.2829e-19 0.30195 -0.314273 7.59987e-18 0.323421 -0.316233 4.7478e-18 0.341715 -0.317929 8.36838e-18 0.357969 -0.318713 1.78081e-18 0.365721 -0.320942 3.72454e-18 0.389408 -0.322217 -2.14247e-19 0.405145 -0.315358 0.126761 0.342038 -0.302884 0.0812988 0.222433 -0.316922 0.0845847 0.350006 -0.301034 0.135814 0.221254 -0.30226 0.10781 0.221924 -0.303311 0.0463185 0.222893 -0.319492 -4.10244e-20 0.37365 -0.32327 1.87057e-18 0.420801 -0.221431 0.319442 0.213519 -0.221281 0.319442 0.213535 -0.214755 0.31943 0.214191 -0.221171 0.317746 0.215098 -0.208625 0.319421 0.214695 -0.207901 0.318188 0.215923 -0.185483 0.319397 0.216101 -0.19746 0.319409 0.215425 -0.186142 0.316947 0.217911 -0.272583 0.305472 0.207018 -0.276745 0.285793 0.21576 -0.258589 0.30181 0.215707 -0.310195 5.04572e-12 0.222705 -0.320631 0.139151 0.197785 -0.301034 -0.135814 0.221254 -0.30226 -0.10781 0.221924 -0.312915 0.220846 0.20615 -0.320769 0.221219 0.193835 -0.30409 0.220522 0.217777 -0.286945 0.27271 0.215982 -0.294959 0.258739 0.216326 -0.221078 0.315958 0.216555 -0.235745 0.258857 0.219465 -0.214489 0.316598 0.216798 -0.207224 0.316871 0.217086 -0.196836 0.316917 0.217503 -0.186004 -0.322372 0.217532 -0.197781 -0.322386 0.216753 -0.190073 -2.73549e-16 0.228711 -0.185804 -0.318235 0.216983 -0.221078 -0.315958 0.216555 -0.286945 -0.27271 0.215982 -0.186142 -0.316947 0.217911 -0.235745 -0.258857 0.219465 -0.185483 -0.319397 0.216101 -0.19746 -0.319409 0.215425 -0.207901 -0.318188 0.215923 -0.221281 -0.319442 0.213535 -0.214755 -0.31943 0.214191 -0.214489 -0.316598 0.216798 -0.221171 -0.317746 0.215098 -0.258589 -0.30181 0.215707 -0.221582 -0.319442 0.213502 -0.323719 -0.114177 0.788907 -0.300184 -0.243053 0.216873 -0.320769 -0.221331 0.193828 -0.320769 -0.221219 0.193835 -0.276745 -0.285793 0.21576 -0.309165 -0.267356 0.197968 -0.312915 -0.220846 0.20615 -0.273501 -0.235378 0.218806 -0.30409 -0.220522 0.217777 -0.282759 -0.19505 0.220184 -0.298755 -0.157867 0.220685 -0.308804 -0.143477 0.220547 -0.294959 -0.258739 0.216326 -0.266838 -0.258148 0.217941 -0.196836 -0.316917 0.217503 -0.207224 -0.316871 0.217086 -0.251168 -0.258501 0.218733 -0.236505 -0.250108 0.220605 -0.280814 -0.202296 0.21998 -0.274451 -0.231008 0.218977 -0.295224 -0.186303 0.254149 -0.302248 -0.160417 0.247573 -0.302884 -0.0812988 0.222433 -0.303311 -0.0463185 0.222893 -0.325272 -0.0566966 0.866923 -0.321055 -0.0555624 0.90325 -0.324053 -0.0557668 0.90325 -0.326282 -0.114492 0.804542 -0.327682 -0.115339 0.747717 -0.32849 -0.0579925 0.698359 -0.327584 -0.0576309 0.761329 -0.329212 -0.0583159 0.567789 -0.329074 -0.0582101 0.632797 -0.329134 -0.116487 0.62702 -0.327654 -0.0339559 0.452 -0.328246 -0.116797 0.507437 -0.320992 -0.0424803 0.358419 -0.327461 -0.0641029 0.452 -0.326848 -0.106839 0.452 -0.320552 -0.168 0.90325 -0.311447 -0.171306 0.90325 -0.323192 -0.169941 0.85506 -0.324519 -0.113487 0.856916 -0.313401 -0.173632 0.90325 -0.305 -0.179608 0.854532 -0.326299 -0.171926 0.778874 -0.328657 -0.116056 0.688018 -0.328383 -0.17422 0.656504 -0.305 -0.185233 0.695482 -0.327668 -0.173071 0.72504 -0.305 -0.186508 0.649774 -0.328241 -0.174594 0.615164 -0.329032 -0.116696 0.5663 -0.327529 -0.174829 0.567928 -0.305 -0.18778 0.602553 -0.325414 -0.149809 0.452 -0.323158 -0.175 0.452 -0.326563 -0.118888 0.452 -0.305 -0.189109 0.553839 -0.325972 -0.174959 0.51394 -0.318405 -0.127329 0.342524 -0.314662 -0.169591 0.335704 -0.319589 -0.106669 0.90325 -0.322468 -0.110672 0.90325 -0.322741 -0.101969 0.90325 -0.32124 -0.174508 0.41979 -0.314117 -0.184907 0.452 -0.315813 -0.170594 0.348479 -0.318821 -0.173026 0.385273 -0.310681 -0.184879 0.373337 -0.311155 -0.166498 0.300141 -0.30845 -0.184721 0.334098 -0.320542 -0.0747267 0.90325 -0.322445 -0.0564522 0.860836 -0.317592 -0.16662 0.90325 -0.305 -0.177254 0.90325 -0.255 -0.175994 0.90325 -0.304635 -0.176065 0.866676 -0.304622 -0.174261 0.90325 -0.305 -0.183551 0.750618 -0.305 -0.181695 0.803651 -0.255 -0.179 0.90325 -0.313661 -0.185352 0.452 -0.305 -0.190571 0.503654 -0.312527 -0.185038 0.412666 -0.305 -0.192256 0.452 -0.255 -0.187526 0.676239 -0.305265 -0.185185 0.295073 -0.304059 -0.200969 0.302768 -0.297877 -0.209371 0.256092 -0.272907 -0.209938 0.257406 -0.248527 -0.210502 0.258596 -0.305084 -0.194585 0.393052 -0.30503 -0.19339 0.421265 -0.254576 -0.197602 0.366393 -0.305102 -0.195885 0.36724 -0.304888 -0.198147 0.3327 -0.253833 -0.19993 0.330533 -0.287381 -0.224275 0.232815 -0.255 -0.194001 0.452 -0.249023 -0.206506 0.261922 -0.244337 -0.218612 0.238885 -0.242122 -0.228992 0.232117 -0.326128 -0.116086 0.583633 -0.326226 -0.0580113 0.586225 -0.255 -0.191001 0.451887 -0.254916 -0.195694 0.406996 -0.25376 -0.197109 0.32815 -0.251881 -0.201205 0.289753 -0.251783 -0.20443 0.28843 -0.255 -0.184526 0.676123 -0.304473 -0.184977 0.595777 -0.304282 -0.187623 0.502688 -0.255 -0.190997 0.452 -0.304121 -0.189287 0.451895 -0.254949 -0.19234 0.415669 -0.254754 -0.193783 0.382353 -0.303241 -0.193357 0.359948 -0.304623 -0.177766 0.827554 -0.304608 -0.179371 0.785523 -0.304591 -0.180895 0.740214 -0.320357 -0.168503 0.852728 -0.323492 -0.170418 0.774572 -0.304569 -0.182366 0.691265 -0.325152 -0.171918 0.699161 -0.325486 -0.172631 0.651692 -0.304527 -0.183832 0.638319 -0.304398 -0.186217 0.55063 -0.323063 -0.173494 0.511837 -0.303743 -0.191257 0.401296 -0.311677 -0.183097 0.452023 -0.30248 -0.19574 0.326128 -0.272127 -0.205987 0.260748 -0.300294 -0.200042 0.287323 -0.295757 -0.205468 0.259454 -0.289786 -0.212935 0.242789 -0.302121 -0.183729 0.292455 -0.305479 -0.163082 0.274689 -0.311579 -0.168257 0.333242 -0.308778 -0.16588 0.304917 -0.305642 -0.183036 0.332058 -0.310541 -0.182633 0.412015 -0.308246 -0.182837 0.371983 -0.31252 -0.182266 0.452036 -0.315358 -0.126761 0.342038 -0.317814 -0.17287 0.410497 -0.32034 -0.173693 0.452127 -0.315148 -0.171122 0.374313 -0.312494 -0.169019 0.343155 -0.324427 -0.171143 0.739755 -0.321794 -0.113042 0.849929 -0.325994 -0.115787 0.653377 -0.324596 -0.173279 0.564425 -0.325318 -0.173006 0.610776 -0.324466 -0.063758 0.452106 -0.316922 -0.0845847 0.350006 -0.323862 -0.106217 0.452117 -0.325414 -0.11619 0.515753 -0.325867 -0.0580715 0.514967 - - - - - - - - - - 0 0 -1 0 1 0 0 0 -1 1 0 0 0 1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -1 0 0 -1 0 1 0 0 0 0 1 1 0 0 0 1 0 1 0 0 0 0 1 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -1 0 0 -0.887006 0.461757 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -1 0 0 -0.916858 -0.399215 0 -0.886955 -0.461731 0.0107719 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 -0.916786 0.399184 0.0124589 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0.342014 0.939695 0 0.27247 0.962164 0 0 0 -1 0 0 -1 -0.130511 0.991249 0.0198226 0.0034973 0.99992 0.0121677 -0.806057 0.585628 0.085514 -0.806714 0.584466 0.0872483 -0.809698 0.580817 0.08391 0.342014 -0.939695 0 -0.130537 -0.991443 0 -0.808188 -0.58267 0.0856025 -0.07716 -0.996538 0.0309536 -0.809697 -0.580818 0.0839099 -0.805934 -0.585538 0.0872722 -0.111761 -0.99348 0.0225006 -0.266309 -0.963888 0 -0.332388 -0.943099 -0.00902848 -0.327331 0.944865 -0.00916454 -0.373193 0.92368 0.0868427 -0.379207 0.9215 0.0839036 0.173007 0.981123 0.086403 0.16853 0.982086 0.0842926 0.666654 0.740395 0.0859545 0.664688 0.742306 0.0846869 0.957775 0.274644 0.0850706 0.957739 -0.274634 0.0855154 0.95749 0.275507 0.0854931 0.666654 -0.740395 0.0859549 0.957523 -0.275516 0.0850942 0.173007 -0.981123 0.086403 0.664687 -0.742307 0.0846865 -0.373193 -0.92368 0.0868426 0.16853 -0.982086 0.0842926 -0.379208 -0.9215 0.0839032 -0.811196 -0.579204 0.0805202 -0.813839 -0.581091 4.23261e-05 -0.813844 -0.581084 0 -0.811197 0.579203 0.0805202 -0.813839 0.58109 0 -0.332402 0.943138 0 -0.380549 0.924761 -4.3775e-05 -0.813843 0.581085 3.36648e-05 0.169132 0.985593 -6.33855e-05 -0.380565 0.924754 3.81016e-05 0.667084 0.744982 -6.68567e-05 0.169114 0.985596 2.54519e-05 0.961009 0.276519 -5.34817e-05 0.667074 0.744991 -8.85217e-07 0.961008 -0.276519 -3.06871e-05 0.961007 0.276523 -3.06849e-05 0.667083 -0.744983 -8.86373e-07 0.961007 -0.276523 -5.34813e-05 0.169132 -0.985593 2.54489e-05 0.667073 -0.744992 -6.68544e-05 -0.38055 -0.92476 4.21492e-05 0.169114 -0.985597 -6.51822e-05 -0.380565 -0.924754 -3.97221e-05 0.033201 -0.0463826 0.998372 0.97724 -0.205461 0.0527951 0.0333599 -0.0467828 0.998348 0.0435219 -0.0240733 0.998762 0.998735 -3.00068e-08 0.050291 0.998735 0 0.0502911 0.0318531 -0.0408727 0.998657 0.811771 -0.580628 0.0624363 0.965412 -0.257991 0.0376813 0.0303857 -0.0285713 0.99913 0.528776 -0.847076 0.0534649 0.707267 -0.70653 0.0242553 0.0282032 0.0319412 0.999092 0.183953 -0.982932 -0.00249042 8.16625e-08 -0.999848 0.0174524 0.259673 -0.965233 0.029924 0.00778832 -0.0467169 0.998878 -4.68791e-07 -0.999848 0.0174517 0.0333409 0 0.999444 -0.00743067 0 0.999972 -0.0221877 -0.0348831 0.999145 -0.0171548 -0.0407335 0.999023 0.0310212 0.046778 0.998424 0.00778832 0.0467169 0.998878 0.0378499 0.0405574 0.99846 0.0354201 0.0434149 0.998429 0.0335106 0.0464465 0.998359 0.0435219 0.0240733 0.998762 -0.0239683 0.0390939 0.998948 0.0282032 -0.0319412 0.999092 7.38344e-08 0.999848 0.0174521 -4.60056e-07 0.999848 0.0174532 0.184846 0.982411 0.0264559 1.0321e-08 0.999848 0.0174524 0.528776 0.847076 0.0534649 0.258042 0.966091 0.00915375 0.811771 0.580628 0.0624363 0.707267 0.70653 0.0242553 0.978214 0.204896 0.0334023 0.998735 3.22096e-08 0.0502911 0.964829 0.257465 0.0530778 -0.939692 3.79082e-08 -0.342021 -1.72637e-08 -0.999848 0.0174525 -0.939693 0 -0.34202 -0.939693 1.4858e-06 -0.34202 -0.0171604 0.0348233 0.999246 -0.939692 -4.6557e-08 -0.342022 -0.939692 4.78909e-08 -0.342022 -1.72637e-08 0.999848 0.0174525 -0.939693 0 -0.34202 -0.939693 -1.4858e-06 -0.34202 -0.939692 -4.0137e-08 -0.342021 2.02064e-08 -0.999848 0.0174525 -0.0891939 0 -0.996014 -0.0891939 -3.55204e-07 -0.996014 -0.0891939 0 -0.996014 -0.0891937 -4.11635e-07 -0.996014 -0.0891937 4.11635e-07 -0.996014 -0.0891939 3.61328e-07 -0.996014 -0.0891953 -2.95316e-07 -0.996014 -0.0891953 0 -0.996014 -0.0891953 -2.95274e-07 -0.996014 -0.964832 0.257453 -0.0530778 -0.998735 0 -0.0502911 -0.998735 4.99151e-08 -0.0502911 -0.998735 -4.65367e-08 -0.050291 -0.0891942 -1.26835e-06 -0.996014 -0.707719 0.704893 -0.0475337 -0.964519 0.258539 -0.0534824 -0.0891951 -6.74014e-07 -0.996014 -0.259626 0.965256 -0.0295921 -0.0891949 -5.68179e-07 -0.996014 -0.706294 0.706275 -0.0482167 -0.0891953 0 -0.996014 6.73165e-09 0.999848 -0.0174523 -0.0891953 2.95316e-07 -0.996014 -0.0891953 2.82712e-07 -0.996014 -0.258794 0.96547 -0.0298838 4.64343e-09 0.999848 -0.0174522 -3.95015e-07 0.999848 -0.0174516 5.2631e-08 0.999848 -0.0174525 -0.0891949 5.17871e-07 -0.996014 -0.0891942 1.26225e-06 -0.996014 -0.0891951 6.7705e-07 -0.996014 1.62414e-08 -0.999848 -0.0174522 4.64343e-09 -0.999848 -0.0174522 -0.259651 -0.965239 -0.0299229 -4.05231e-07 -0.999848 -0.0174528 5.7346e-08 -0.999848 -0.0174523 -0.707719 -0.704893 -0.0475337 -0.706294 -0.706275 -0.0482167 -0.258787 -0.965482 -0.0295528 -0.964814 -0.257438 -0.0534797 -0.964544 -0.258531 -0.0530821 0.0167291 0.0345233 -0.999264 0.0220794 -0.0345866 -0.999158 0.0240254 0.0391952 -0.998943 0.00746892 0 -0.999972 0.0167233 -0.0408223 -0.999026 -0.00809249 0.0463335 -0.998893 -0.0316865 0.0463117 -0.998424 -0.0282251 -0.00769526 -0.999572 -0.0330379 0 -0.999454 -0.0360528 0.0418782 -0.998472 -0.0332859 0.0459094 -0.998391 -0.043213 0.0240933 -0.998775 -0.0080925 -0.0463335 -0.998893 -0.0331035 -0.0463096 -0.998379 -0.043213 -0.0240933 -0.998775 -0.0329088 -0.0458097 -0.998408 -0.0310906 -0.0369203 -0.998834 -0.0282251 0.00769526 -0.999572 0 0 -1 -0.965927 0.258815 0 0 0 -1 0 0 -1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0 -1 -0.707107 0.707107 0.000269089 -0.966079 0.258248 0.000363159 -0.707859 0.706354 -0.00035363 0 0 -1 -0.258815 0.965927 -0.000261286 0 0 -1 0 0 -1 0 1 0 0 0 -1 -0.259245 0.965812 0 0 0 -1 -0.939693 0 -0.34202 -0.939693 0 -0.34202 0 1 0 0 -1 0 0.258816 -0.965927 0 0 -1 0 0.707107 -0.707107 -0.000260408 0.25924 -0.965813 0.000252162 0.965927 -0.258816 -0.000355932 0.70782 -0.706393 0.000347315 0 0 -1 1 0 0 0.966074 -0.258266 0 0 0 -1 0.965927 0.258816 0 0 0 -1 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 -1 0.707107 0.707107 -0.000260408 0 0 -1 0.966072 0.258274 -0.000356669 0.70782 0.706393 0.000347319 0 0 -1 0.258816 0.965927 0.000252583 0 0 -1 0 0 -1 0 1 0 0.259219 0.965818 0 0 0 -1 -0.939693 0 -0.34202 0 1 0 -0.939693 0 -0.34202 0 -1 0 -0.258815 -0.965927 0 0 -1 0 -0.707107 -0.707107 0.000269089 -0.259268 -0.965806 -0.000260822 -0.965927 -0.258815 0.000362374 -0.707859 -0.706354 -0.00035363 -0.966081 -0.25824 0 0.0891953 0 0.996014 0.0772156 -0.0446435 0.996014 0.091737 0 0.995783 0.0891953 0 0.996014 0 -0.023936 0.999714 0 0 1 0 0 1 0.0565489 -0.0327408 0.997863 0.0122447 -0.021347 0.999697 0.0335681 -0.058219 0.997739 1 0 0 0 0.939693 0.34202 0 0.793354 0.608761 0 0.793354 0.608761 0 0.793354 0.608761 1 0 0 1 0 0 0 0.939693 0.34202 0 0.300705 0.953717 0 0.793354 0.608761 0 0.300705 0.953717 0 0 1 0 0.0246201 0.999697 0.0119019 0.0207542 0.999714 0 -0.300705 0.953717 0 0 1 0 -0.793354 0.608761 0 -0.300705 0.953717 0 -0.939693 0.34202 0 -0.793354 0.608761 0 -0.793354 0.608761 0 -0.939693 0.34202 0 -0.300705 0.953717 0 -0.793354 0.608761 0 0 1 0 -0.300705 0.953717 0 0.300705 0.953717 0 0 1 0 0.300705 0.953717 -1 0 0 -1 0 0 -1 0 0 0.0891976 0 0.996014 0.0891953 0 0.996014 0.0891953 0 0.996014 0.0565489 0.0327408 0.997863 0.0794139 0.0459096 0.995784 0.0335682 0.058219 0.997739 0 0 -1 -0.965927 -0.258816 0 0 0 -1 0 0 -1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0 -1 -0.707107 -0.707107 -0.000163984 0 0 -1 -0.966071 -0.258275 -0.00021252 -0.707775 -0.706438 0.000206564 0 0 -1 -0.258816 -0.965927 0.000158823 0 0 -1 0 0 -1 0 -1 0 0 -1 0 -0.259206 -0.965822 0 0 0 -1 0.939693 0 0.34202 0.939693 0 0.34202 0 1 0 0 1 0 0.258815 0.965927 0 0.707107 0.707107 0.000170822 0.25922 0.965818 -0.000165423 0.965927 0.258815 0.000217134 0.707816 0.706397 -0.000211716 0 0 -1 1 0 0 0.966078 0.258251 0 0 0 -1 0.965927 -0.258815 0 0 0 -1 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 -1 0.707107 -0.707107 0.000170822 0.966079 -0.258246 0.000217606 0.707816 -0.706397 -0.000211709 0 0 -1 0.258815 -0.965927 -0.000165686 0 0 -1 0 0 -1 0 -1 0 0 0 -1 0 -1 0 0.259234 -0.965815 0 0 0 -1 0.939693 0 0.34202 0.939693 0 0.34202 0 1 0 0 1 0 -0.258816 0.965927 0 -0.707107 0.707107 -0.000163984 -0.259192 0.965826 0.000158588 -0.965927 0.258816 -0.000212082 -0.707775 0.706438 0.000206559 -0.96607 0.25828 0 -1 0 0 0 -0.996195 0.0871569 0 0 1 0 0 1 -1 0 0 0 -0.896846 0.442343 0 -0.996195 0.0871569 -1 0 0 0 -0.362495 0.931986 0 -0.896846 0.442343 0 0 1 0 -0.362495 0.931986 0 0.362495 0.931986 0 0 1 0 0.896846 0.442343 0 0.362495 0.931986 0 0.996195 0.0871569 0 0.896846 0.442343 0 0 1 0 0.996195 0.0871569 0 0 1 0 -0.0239373 0.999713 0.0119004 0.0207557 0.999714 0 0.0246212 0.999697 0.0891975 0 0.996014 0.0891953 0 0.996014 0.0891953 0 0.996014 0.0565497 0.032742 0.997863 0.0794157 0.0459046 0.995784 0.0335748 0.058215 0.997739 1 0 0 1 0 0 1 0 0 0.0122433 -0.0213483 0.999697 0.0891953 0 0.996014 0.0772174 -0.0446392 0.996014 0.091737 0 0.995783 0.0891953 0 0.996014 0.0565497 -0.032742 0.997863 0.0335748 -0.058215 0.997739 -0.0348546 0.998861 0.0325812 -0.0348486 0.998689 0.0375083 -0.588583 0.808007 0.0263558 -0.034307 0.998684 0.0381107 -0.623079 0.781561 0.030589 -0.623354 0.781906 0.00729422 -0.0355894 0.99895 0.028846 1 0 0 -0.0433141 0.9987 0.0268836 -0.0422121 0.998737 0.0272512 -0.0384422 0.998837 0.0291068 0.999983 -0.0055131 0.00165799 0.999999 -5.31721e-05 0.00140841 0.997084 0.0232442 0.0726847 1 0 0 -0.034875 0.998688 0.0375064 1 0 0 0.0139656 0.998737 0.0482659 -0.012111 0.999087 0.0409686 -0.027406 0.999013 0.0349631 -0.0340783 0.998954 0.0304747 -0.0350789 0.998996 0.0278798 1 0 0 0 0 1 1 0 0 -0.395536 0.91738 0.0443342 0 0 1 0 0 1 -0.468112 0.882927 0.0362054 -0.618699 0.78556 -0.0103217 -0.466976 0.882155 0.0611271 -0.446524 0.894224 0.0312957 -0.456247 0.888873 0.0417632 -0.444941 0.895143 0.0273078 -0.445905 0.894512 0.0318814 -0.459461 0.887852 0.024778 -0.447161 0.894075 0.0260247 -0.449782 0.892966 0.0175264 -0.483622 0.87496 0.0235527 -0.463743 0.885946 0.00642148 -0.524796 0.850911 0.0232177 -0.494736 0.869038 -0.00312075 -0.589524 0.807408 0.0235285 -0.541343 0.840692 -0.0136005 -0.0314639 0.984413 0.173034 -0.0424351 0.909668 0.413164 -0.985953 0.127764 -0.107582 -0.985958 0.0397437 -0.162193 -0.941149 0.0312242 -0.336548 -0.0312136 0.984393 0.173194 -0.0411744 0.910292 0.411914 -0.0104868 0.980081 0.19832 0.994145 -0.0400285 0.10037 0.96736 0.0799393 0.240468 0.980778 -0.0984484 0.16847 -0.104445 0.827148 0.552193 -0.0371539 0.99384 0.104411 0.998814 -0.01083 0.0474729 0.99444 0.012706 0.104532 -0.0321078 0.997428 0.0640819 0.999743 0.00797779 0.0212348 -0.0308033 0.995192 0.092974 0.998778 -0.0141237 0.0473682 -0.0343186 0.998322 0.0466322 0.999866 -0.0144486 0.00768518 -0.0331204 0.998292 0.0481245 -0.032803 0.997338 0.0651185 0.998967 0.0403975 0.0207999 0.999964 0.00597805 0.00610183 -0.886478 0.462185 0.0232557 -0.779129 0.625642 -0.039125 -0.776297 0.629688 -0.0292634 -0.698068 0.716021 0.00377779 -0.88609 0.462849 0.0248087 -0.966612 0.256231 -0.00259883 -0.966465 0.250633 -0.05594 -0.990252 0.114391 -0.0794704 0.0328182 -0.982421 -0.183773 0.0745104 -0.887047 -0.455626 0.0315559 -0.982002 -0.186214 0.0406275 -0.918687 -0.392892 0.0322592 -0.994006 -0.10446 0.0293108 -0.993663 -0.10851 0.0367391 -0.99749 -0.0605296 0.0308985 -0.997098 -0.069572 0.0348464 -0.998465 -0.0430468 0.0320242 -0.99822 -0.0503123 0.0330347 -0.998774 -0.0368728 0.996763 0.0364918 0.0716357 0.0348463 -0.998646 -0.0386176 0.0348518 -0.998786 -0.0348261 0.0387308 -0.998833 -0.0288402 0.0348497 -0.99886 -0.0326155 0.914017 -0.00631438 0.405626 -0.108227 0.346972 0.93161 0.913354 -0.00546455 0.40713 0.594618 0.339558 0.728787 -0.055207 0.731916 0.679155 -0.0523751 0.460458 0.886135 -0.0325834 0.0544357 0.997986 -0.0509881 0.0597766 0.996909 -0.0304013 0.986583 0.160405 -0.0512453 0.172286 0.983713 -0.0470287 0.0661873 0.996698 -0.0302436 0.0527324 0.998151 0.085391 -0.583309 -0.80775 0.0110107 0.0255331 0.999613 -0.91391 0.000833223 -0.405917 0.0441835 -0.503534 -0.862845 0.0583075 -0.292365 -0.954528 -0.857049 -0.00102582 -0.515235 0.0377027 -0.756916 -0.652424 0.0320586 -0.998782 -0.037518 0.0348572 -0.998179 -0.0492334 -7.10564e-05 -0.999549 -0.0300281 0.0117359 -0.999366 -0.033614 0.0225259 -0.999018 -0.0381507 0.0305672 -0.99859 -0.0434122 0.0399781 -0.998774 -0.0291936 0.0353268 -0.999001 -0.0273657 0.0344778 -0.999045 -0.0268432 0.0350857 -0.999002 -0.0276404 -0.913317 0.37774 -0.152202 -0.0644073 0.0410988 0.997077 -0.98588 0.0985871 -0.135354 -0.0686166 0.0328721 0.997101 -0.0933702 0.039324 0.994855 -0.92461 0.270386 -0.268304 -0.934027 0.211853 -0.287597 -0.0602825 0.0444198 0.997193 -0.952302 0.270557 -0.141135 -0.951096 0.27739 -0.135912 -0.935895 0.162528 -0.312547 -0.778938 -0.148446 -0.609278 -0.926305 0.369983 -0.0712097 -0.954001 0.277137 -0.114356 -0.95618 0.265607 -0.12318 -0.906706 0.418392 -0.0532174 -0.92342 0.367007 -0.112257 -0.842721 0.53673 -0.0417499 -0.865349 0.490438 -0.103155 -0.738347 0.673856 -0.0275828 -0.787618 0.613588 -0.0562811 -0.794294 0.60204 -0.0815161 -0.738224 0.673744 -0.0330865 -0.697953 0.715902 -0.0186075 -0.997462 0.0383327 -0.059999 -0.998 0.0440925 -0.0453045 -0.996013 0.0891787 0.00221368 -0.992678 0.0888801 -0.0818022 -0.883824 -0.465937 -0.0419162 -0.993774 0.0750893 -0.0823078 -0.827897 -0.560041 -0.0306733 -0.995186 0.0176128 -0.0964063 -0.991284 0.0694113 -0.111975 -0.992928 0.0504113 -0.107484 -0.989178 0.0818652 -0.12176 -0.0577841 0.0476264 0.997192 -0.878304 0.145201 -0.455519 -0.0592443 0.0513732 0.996921 -0.168053 -0.654183 -0.737429 -0.645419 0.172824 -0.74402 -0.056901 0.0539451 0.996921 -0.844298 0.150973 -0.514167 -0.058993 0.0509124 0.996959 -0.0546993 0.178283 0.982458 -0.0576413 0.0577482 0.996666 0 0 1 0 0 1 -0.997872 0.0333609 0.056023 0 0 1 0 0 1 -0.998835 0.0248373 0.0413771 -0.998642 0.0249755 0.0457213 -0.999533 0.0122165 0.0280061 -0.999314 0.0148572 0.0339147 -0.999785 0.00853288 0.0188951 -0.999654 0.00886856 0.0247674 -0.999927 0.009029 0.00797131 -0.999843 0.00666422 0.0164041 -0.999887 0.0146977 -0.00330754 -0.999929 0.00898226 0.00788502 -0.999812 0.0123113 -0.0149979 -0.999232 0.0266266 -0.0287607 -0.999664 0.0258771 -0.00160004 -0.999089 0.0405516 -0.0132576 -0.999463 0.0141545 0.0295625 -0.999434 -0.0160598 0.0295617 -0.999342 0.0160584 0.0325329 0 0 1 0 0 1 0 0 1 -0.999611 0.0122585 0.0250367 -0.999525 -0.017986 0.0250345 -0.999665 -0.0250708 -0.00637899 -0.999667 0.0118231 0.0229404 -0.999667 -0.0118231 0.0229404 -0.999327 -0.0140926 0.0338688 -0.999736 0.00868172 0.0212624 -0.999704 -0.0118351 0.0212617 -0.999618 0.0118083 0.02499 -0.99978 0.00771942 0.0195009 -0.99978 -0.00771942 0.0195009 -0.999631 -0.0107119 0.0249788 -0.999831 0.00555598 0.0175134 -0.999819 -0.00746238 0.0175132 -0.999781 0.00771076 0.0194339 -0.999877 0.00421972 0.0150892 -0.999877 -0.00421972 0.0150892 -0.999789 -0.0066102 0.0194258 -0.99993 0.00203518 0.01168 -0.99993 -0.00203518 0.01168 -0.999887 0.00437602 0.0144081 -0.999887 -0.00437601 0.0144081 -0.99998 0.000369832 0.00624149 -0.99998 -0.000369832 0.00624149 -0.999956 0.0027252 0.00892865 -0.999956 -0.0027252 0.00892865 -0.999999 0.000500967 -0.00145704 -0.999999 -0.000500967 -0.00145704 -0.999994 0.00257678 0.00212173 -0.999994 -0.00257678 0.00212173 -0.999941 0.00176131 -0.010691 -0.999941 -0.00176131 -0.010691 -0.999966 0.00353717 -0.00740534 -0.999966 -0.00353717 -0.00740534 -0.999709 0.00192769 -0.0240499 -0.9997 -0.00466272 -0.0240497 -0.999771 0.00640348 -0.0204159 -0.999718 0.00450532 -0.023325 -0.997588 0.0019236 -0.06938 -0.997577 -0.00513327 -0.0693792 -0.999775 -0.00192782 -0.021121 -0.997487 -0.0019234 -0.0708298 -0.997497 0.0063889 -0.0704238 -0.997496 0.0049382 -0.0705559 -0.999649 0.0143397 -0.022288 -0.997406 0.0143076 -0.070544 -0.997398 0.0104031 -0.0713445 -0.999933 0.00887419 -0.00740059 -0.999623 0.0236116 -0.0140379 -0.999507 0.00924058 -0.0299977 -0.999993 0.00314562 0.00212266 -0.999907 0.00275112 -0.0133334 -0.99996 -0.000141652 0.00891917 -0.999998 -0.00119378 -0.001694 -0.999897 -0.000322687 0.0143813 -0.999968 -0.00149293 0.00781126 -0.999808 0.00286758 0.0193983 -0.999864 0.00214852 0.0163502 -0.999643 0.00947072 0.0249661 -0.999649 0.00942409 0.0247755 -0.999103 0.0250567 0.034142 -0.999237 0.0192242 0.0339972 -0.999237 0.019224 0.0339959 0 0 1 -0.998567 0.0283631 0.0453752 0 0 1 0 0 1 -0.997089 0.0235517 -0.0725172 -0.998892 0.03713 -0.0289273 -0.996758 0.0370506 -0.0714206 -0.997093 0.0234762 -0.0724922 -0.998447 0.03128 0.0460957 0 0 1 0 0 1 0 0 1 -0.994941 -2.998e-05 -0.100465 -0.994715 -0.021276 -0.100442 -0.994207 0.00119735 -0.107479 -0.994207 0.00357586 -0.107422 -0.994303 -7.24356e-05 -0.106589 -0.994209 0.00259456 -0.107434 -0.993755 0.0162443 -0.110392 -0.993955 0.00959812 -0.109367 -0.993758 0.0195223 -0.10984 -0.992706 0.038415 -0.114275 -0.9943 -0.00259874 -0.106588 -0.0617223 0.00479382 0.998082 -0.0617173 -0.0136023 0.998001 -0.29189 -0.00531714 0.956437 -0.138207 0.0140999 0.990303 -0.276721 0.024073 0.960649 -0.0579001 0.0261445 0.99798 -0.10168 0.0138992 0.99472 1.4153e-09 0.999848 0.0174525 -0.258699 0.965611 0.0258888 5.22486e-08 0.999848 0.0174525 -0.0666234 0.675529 0.734317 -0.265751 0.96356 0.0304769 -0.263741 0.660098 0.703357 -0.0526162 0.687239 0.724524 -0.0891953 0 -0.996014 -0.0891953 5.0852e-07 -0.996014 -0.0891954 3.81636e-07 -0.996014 -9.63174e-07 0.999848 0.0174521 0.939693 0 0.34202 3.33445e-07 0.999848 0.0174527 8.53472e-07 0.999848 0.017453 -0.0509558 0.622492 0.780965 0.939693 7.65275e-07 0.34202 -0.0581561 0.635721 0.769725 -0.0620758 0.591474 0.803931 -0.0288235 0.638955 0.768704 -0.0595089 0.702172 0.709517 0.00141102 0.720641 0.693307 -0.11058 0.617607 0.778674 -0.0523077 0.677759 0.733422 -0.999391 -1.63201e-08 0.0348993 -0.924353 -0.00588872 0.381493 -0.999391 1.41489e-08 0.0348992 -0.893964 0.00702952 0.448083 -0.924137 0.0224058 0.381404 -0.999391 -2.20666e-07 0.0348995 -0.891971 -0.0187125 0.451705 -0.88741 -0.0160857 0.4607 -0.892879 -0.0134918 0.450095 -0.965257 -0.258491 0.0382195 -0.984209 -0.173958 -0.032734 -0.842015 -0.0513243 0.537008 -0.836997 -0.115269 0.534929 -0.999391 0 0.0348995 -0.0891959 0 -0.996014 -0.999391 1.68867e-07 0.0348983 -0.0891953 7.30113e-08 -0.996014 -0.0891959 -1.09161e-07 -0.996014 -0.984739 0.169982 0.0373549 -0.0891959 0 -0.996014 -0.0891958 7.16415e-08 -0.996014 -0.966206 0.257618 -0.00890734 -0.843138 0.0225934 0.537222 -0.769496 0.097886 0.631105 -0.818889 0.230986 0.52542 -0.793288 0.00975286 0.608768 -0.882584 0.0656155 0.465553 -0.0891951 2.14541e-07 -0.996014 -0.708478 -0.705692 0.00759864 -0.0891953 -1.23161e-08 -0.996014 -0.885658 -0.461407 0.0520875 -0.0891953 -3.69116e-07 -0.996014 -0.258291 -0.965589 0.0303782 -0.0891952 2.89126e-07 -0.996014 -0.675251 -0.736855 0.0328912 -0.0891953 0 -0.996014 -1.93516e-09 -0.999848 0.0174524 -0.0891953 -3.69142e-07 -0.996014 -5.38309e-08 -0.999848 0.0174525 -0.265295 -0.963814 0.0260878 0.939693 0 0.34202 4.1749e-08 0.999848 -0.0174524 0.939693 -7.65275e-07 0.34202 0.939693 -6.02963e-06 0.34202 -6.90194e-07 0.999848 -0.0174527 1.18202e-06 0.999848 -0.0174518 -3.08861e-06 0.999848 -0.0174544 4.90541e-07 0.999848 -0.017452 9.8922e-05 0.999849 -0.0173794 -5.71242e-05 0.999847 -0.0174948 0.258649 0.965625 -0.0258873 0.706971 0.706537 -0.0315933 0.267813 0.962947 -0.0317544 0.965696 0.258406 -0.0256327 0.726496 0.68533 -0.0502674 0.999391 0 -0.0348995 0.96976 0.241073 -0.0380727 -0.0891953 -4.29751e-08 -0.996014 0.965233 -0.258583 -0.0382203 0.997081 0.0233122 0.0727069 0.999391 -5.45781e-08 -0.0348997 0.999391 4.87796e-08 -0.0348993 0.999391 7.86901e-08 -0.0348995 0.99959 0.0160661 -0.0237138 0.999391 -1.78443e-05 -0.0348998 0.999764 0.00206289 -0.0216403 0.999926 -0.000505807 -0.0121521 0.999394 1.24191e-05 -0.0348121 0.999391 -5.87084e-08 -0.0348999 -0.0891953 1.84741e-08 -0.996014 0.706971 -0.706537 -0.0315933 0.969885 -0.242311 -0.0246574 0.726496 -0.68533 -0.0502674 -0.0891952 -2.86051e-07 -0.996014 0.258122 -0.965593 -0.0316722 -0.089195 -1.90703e-07 -0.996014 3.53281e-08 -0.999848 -0.0174525 -1.27329e-07 -0.999848 -0.0174524 0.267193 -0.963288 -0.0261449 0.939693 6.10794e-06 0.34202 -0.706997 0.706459 0.0327446 -0.671556 0.740953 -8.87232e-05 -0.885658 0.461407 0.0520875 -0.555947 0.438323 0.706255 -0.259098 0.597505 0.758851 -0.251184 0.778212 0.57558 -0.348477 0.430474 0.83262 -0.590577 0.157644 0.791434 -0.670946 0.400939 0.623762 -0.887443 0.0135848 0.460717 -0.778976 0.179699 0.600754 -0.0910148 0.61907 0.780044 -0.040157 0.0457085 0.998147 -0.0397986 0.0321245 0.998691 -0.0406851 0.0492688 0.997957 -0.0307047 0.643252 0.765039 -0.0404246 0.0199835 0.998983 -0.0384402 -0.105183 0.99371 0.939692 -2.59764e-07 0.342022 -0.0428493 0.0346423 0.998481 0.939692 1.09946e-07 0.342022 0.939693 -6.21832e-06 0.34202 0.939692 5.16756e-06 0.342021 -0.0169424 0.912146 0.409515 -0.0288235 -0.638955 0.768704 -0.0394794 0.00795302 0.999189 -0.0398163 -0.0346089 0.998607 0.939692 -5.71824e-08 0.342021 -0.0620758 -0.591474 0.803931 0.939692 -9.56009e-08 0.342022 0.939692 -5.16756e-06 0.342021 0.939693 1.29035e-06 0.34202 -0.0308586 -0.638748 0.768797 -0.0523353 -0.636773 0.769273 -0.0337015 -0.642375 0.765649 -0.0400442 -0.0345921 0.998599 -0.0946032 -0.670753 0.735623 -0.061639 -0.676322 0.734023 -0.090158 -0.6917 0.716535 -0.0451067 -0.062124 0.997049 -0.204212 -0.606592 0.768338 0.0322756 -0.0414876 0.998618 -0.0220892 -0.622679 0.782165 -0.0502016 -0.0610508 0.996871 -0.348477 -0.430474 0.83262 -0.272962 -0.725483 0.631796 -0.231824 -0.666284 0.708748 -0.0576413 -0.0577482 0.996666 -0.573148 -0.347667 0.742044 -0.0527052 -0.0592534 0.996851 -0.0492847 -0.0625357 0.996825 -0.555947 -0.438323 0.706255 -0.059071 -0.0509279 0.996954 -0.751976 -0.175644 0.63536 -0.0587538 -0.0512648 0.996955 -0.0568972 -0.0539255 0.996923 -0.726754 -0.261129 0.635327 -0.0775495 -0.0384812 0.996246 -0.791161 -0.0653519 0.608106 -0.11753 -0.0378142 0.992349 -0.0644126 -0.0410985 0.997077 -0.0603166 -0.0443916 0.997192 -0.0577719 -0.0475878 0.997195 -0.784126 -0.142361 0.604053 -0.13944 -0.0141114 0.99013 -0.0783292 -0.0204414 0.996718 -0.0579001 -0.0261445 0.99798 0.0837566 -0.0507187 0.995195 0.0770732 -0.0494822 0.995797 -0.0432837 -0.0261033 0.998722 0.939692 4.27994e-08 0.342021 -0.994175 -0.0096262 -0.107345 -0.993758 -0.0195223 -0.10984 -0.99403 -0.00326516 -0.109059 -0.992706 -0.038415 -0.114275 -0.993755 -0.016245 -0.110392 -0.98603 -0.0986316 -0.134229 -0.991426 -0.0670597 -0.112154 -0.91342 -0.377877 -0.151237 0.131838 0.0611061 -0.989386 -0.880192 -0.157713 -0.447647 -0.930348 -0.237622 -0.279265 -0.940342 -0.0300052 -0.338906 -0.840463 -0.135077 -0.524763 -0.686331 0.300553 -0.662283 -0.848469 -0.133205 -0.512208 -0.71457 -0.196258 -0.671471 -0.0560055 -0.338947 0.939137 -0.14896 -0.239869 0.959309 -0.0528935 -0.340324 0.938819 0.913994 0.00631168 0.405679 0.913329 0.00546002 0.407187 -0.913994 -0.000836682 -0.405728 -0.857048 0.00102626 -0.515236 0.540529 -0.375519 0.75287 0.089987 0.587254 -0.804385 0.0441389 0.494101 -0.868283 0.0584923 0.292391 -0.954508 0.464313 -0.884588 -0.0437855 0.397242 -0.917514 -0.0191431 0.633333 -0.773528 -0.023338 0.773585 -0.633411 -0.0188746 0.633784 -0.773041 0.026943 0.594109 -0.80408 -0.022145 0.700639 -0.71247 -0.0386159 0.737686 -0.67338 -0.0487752 0.608763 -0.792954 0.025116 0.528317 -0.848751 -0.0224138 0.545342 -0.838121 0.0124833 0.485456 -0.873961 -0.0229057 0.499469 -0.866328 0.00266012 0.459161 -0.888023 -0.0242343 0.468292 -0.883552 -0.00617961 0.444306 -0.895477 -0.0266995 0.447506 -0.894127 -0.0165724 0.442375 -0.896329 -0.0299909 0.441519 -0.896904 -0.0249916 0.441555 -0.896714 -0.0305596 0.444217 -0.895273 -0.0340316 0.460607 -0.886772 -0.0384237 0.458466 -0.887805 -0.0401417 0.0317422 -0.982033 -0.186022 0.986894 -0.063772 0.148232 0.041714 -0.918238 -0.393826 0.948272 -0.0597466 0.311786 0.984235 -0.0214534 0.175559 0.994228 -0.0972833 0.0452299 0.970885 -0.239493 0.0049608 0.97545 -0.203928 0.0831295 0.897716 -0.440426 -0.0114769 0.925767 -0.373539 0.0585197 0.810117 -0.584655 0.0434588 0.885338 -0.191189 0.42382 0.69203 0.289101 0.661449 0.94281 -0.0512176 0.329371 -0.186269 0.0759834 0.979556 0.0579304 -0.0496321 -0.997086 0.0196262 -0.043624 -0.998855 0.724755 -0.177655 0.665709 0.0571481 -0.0519954 -0.997011 0.854521 -0.162232 0.493431 0.0580745 -0.0500473 -0.997057 0.0580451 -0.0455951 -0.997272 0.914591 -0.31323 0.255755 0.911514 -0.262943 0.316233 0.0608661 -0.043291 -0.997207 0.946758 -0.284237 0.151193 0.945777 -0.292399 0.141455 0.95087 -0.299267 0.0792811 0.955213 -0.266371 0.128894 0.914169 -0.401216 0.0576249 0.924313 -0.361694 0.121753 0.925025 -0.362643 0.113223 0.798028 -0.601107 0.042682 0.86578 -0.488909 0.106744 0.865789 -0.492683 0.0875998 0.701416 -0.712196 0.0281562 0.79895 -0.600435 0.0340028 0.737883 -0.672426 0.0580708 0.0569848 -0.0553883 -0.996837 0.0359118 -0.189711 -0.981183 0.0561389 -0.0535091 -0.996988 0.0533841 -0.155578 -0.98638 0.05297 -0.128379 -0.99031 0.903853 -0.398697 0.155213 0.0643806 -0.0407939 -0.997091 0.1555 0.985119 -0.0732197 0.990776 -0.0650333 0.118883 0.988972 -0.0993394 0.109843 0.0593771 -0.0318985 -0.997726 0.0712355 -0.0401897 -0.99665 0.496966 0.867379 -0.026045 0.603813 0.797094 -0.00718115 0.798996 0.600706 0.0275319 0.995931 -0.0197878 0.0879214 0.994141 -0.0737981 0.0789796 0.995252 -0.0604761 0.0762575 0.994442 -0.0850724 0.0620286 0.995347 -0.0851574 0.0450937 0.605201 -0.7936 -0.0626926 0.998193 -0.0230638 -0.0554831 0.998421 -0.0332462 -0.0452696 0.998818 -0.039015 0.0289745 0.998856 -0.0391166 0.02751 0.999016 -0.0365486 0.0251326 0.999648 -0.0215861 0.0154269 0.999675 -0.0232514 0.0104705 0.999953 -0.00881416 0.00402701 0.99991 -0.0132879 -0.00198251 0.999932 -0.00914594 -0.00717611 0.999811 -0.00742615 -0.0179805 0.999913 -0.00504334 -0.0122055 0.999626 -0.00467432 -0.0269573 0.99908 -0.0143335 -0.040424 0.999718 -0.00957533 -0.0217462 0.999194 -0.0242765 -0.0319664 0.999756 -0.00381378 0.0217528 0.999762 0.00191691 0.0217529 0.999798 -0.00191698 0.0200014 0.997469 -0.00191257 0.0710837 0.996651 -0.0714568 0.0397638 0.999203 0.00191586 0.0398656 0.99998 -0.00160083 0.00607063 0.99998 0.00160083 0.00607063 0.999799 0.00636206 0.0190075 0.999752 0.0038411 0.0219464 0.999989 -0.000806299 -0.0045543 0.99999 0.000536852 -0.0045543 0.999989 -0.000491162 -0.00476223 0.999984 -0.00264401 0.00503531 0.999984 0.00264401 0.00503531 0.999927 -0.00263913 -0.0118056 0.999927 0.00263913 -0.0118056 0.999927 -0.00268138 -0.0117644 0.999988 0.000860573 -0.004763 0.999927 0.00268138 -0.0117644 0.999851 -0.00635348 -0.0160489 0.999861 0.00448429 -0.0160491 0.999831 -0.00516656 -0.0176181 0.999798 -0.00680804 -0.018892 0.999798 0.00680804 -0.018892 0.999823 0.00660597 -0.0176281 0.999713 -0.0110504 -0.0212581 0.999737 0.00861619 -0.0212586 0.999665 -0.0104504 -0.0236592 0.999658 -0.0113855 -0.0235578 0.999658 0.0113855 -0.0235578 0.999655 0.0114016 -0.0236685 0.999499 -0.0176558 -0.0262759 0.999576 0.0125081 -0.0262779 0.999336 -0.0153128 -0.0330743 0.999381 -0.0169701 -0.0308055 0.999381 0.0169701 -0.0308055 0.999314 0.0166224 -0.0331011 0 0 1 0.999088 -0.0267233 -0.0333056 0.99959 -0.0160661 -0.0237138 0.999044 -0.0298225 -0.0319683 0.998847 -0.0199084 -0.0436931 0.999827 -0.0058823 -0.0176231 0.999453 -0.00939823 -0.0316977 0.999931 7.60955e-05 -0.0117516 0.999764 -0.00206289 -0.0216403 0.999988 0.00149957 -0.00475806 0.999926 0.000505806 -0.0121521 0.999986 -0.00147224 0.00503632 0.999997 -0.00178338 -0.0019335 0.999744 -0.00636195 0.0217182 0.999735 -0.00808351 0.0215623 0.999913 -0.00793541 0.0104967 0.997479 -0.00635187 0.0706817 0.999545 -0.0142085 0.0266053 0.99739 -0.0141893 0.0707953 0.997381 -0.010332 0.0715814 0.999334 -0.0233469 0.0280324 0.997083 -0.0233122 0.0726793 0.996763 -0.0364918 0.0716357 0.997084 -0.0232427 0.0726924 0.994378 -0.00294356 0.10585 0.994379 -0.00246702 0.10585 0.306383 -0.00566925 -0.951891 0.0612416 -0.0156053 -0.998001 0.0612483 0.00504095 -0.99811 0.994198 0.00293481 0.107526 0.994253 -0.00225408 0.107034 0.994255 0.000599994 0.107034 0.994171 -0.00134405 0.107806 0.99417 0.00209754 0.107806 0.994179 -0.00146951 0.107734 0.994178 0.0020003 0.107734 0.994304 -0.00418058 0.106498 0.994312 0.000980974 0.106499 0.994535 -0.0111575 0.103804 0.994597 -6.29777e-05 0.10381 0.994714 -0.0205258 0.100611 0.994924 -6.26319e-05 0.100632 0.994188 0.0013632 0.107652 0.995217 -0.0004819 0.0976908 0.99245 0.074519 0.0974192 0.997478 0.00545987 0.0707626 0.994198 -0.00349172 0.10751 0.995788 -0.00274428 0.0916446 0.996675 -0.0109009 0.0807524 0.997402 -0.0261821 0.0671128 0.997475 -0.0476134 0.0526864 0.993708 -0.0159051 0.110871 0.993715 -0.0212868 0.109896 0.993913 -0.0106837 0.109644 0.992569 -0.0407261 0.114662 0.0645049 -0.026684 -0.997561 0.0933958 -0.0213 -0.995401 0.15776 -0.0149284 -0.987365 0.993969 0.0604849 0.0914771 0.995926 0.0402498 0.0806918 0.997518 0.0212671 0.0671206 0.998577 0.00790047 0.0527446 0.000117372 -0.999818 -0.0190843 0.102263 -0.33187 -0.937766 0.268866 -0.652844 -0.70817 -0.000209977 -0.999894 -0.0145275 0.101073 -0.329483 -0.938736 -2.42347e-06 -0.999848 -0.017423 0.072747 -0.673403 -0.735688 0.262881 -0.644665 -0.717844 1.00208e-05 -0.999845 -0.0176137 0.0596836 -0.672931 -0.737293 0.0554455 -0.628916 -0.775494 0.0921733 -0.669596 -0.736984 -1.28518e-05 -0.999851 -0.0172372 0.0463793 -0.690819 -0.721539 0.0683839 -0.683288 -0.726939 0.0439598 -0.611553 -0.789981 0.0397808 -0.649728 -0.759125 0.0337925 -0.634979 -0.77179 0.0478085 -0.59232 -0.804283 0.0312463 -0.63541 -0.771542 0.803637 -0.150835 -0.575688 0.807079 -0.162691 -0.567587 0.998951 0.0365476 0.0275956 0.625534 -0.44884 -0.638161 0.702142 -0.257055 -0.664017 0.635898 -0.381237 -0.671038 0.541404 -0.43432 -0.719894 0.387076 -0.441478 -0.809487 0.90826 -0.0150929 -0.418135 0.90826 0.0150929 -0.418135 0.887913 -0.00750357 -0.45995 0.887913 0.00750357 -0.45995 0.0752641 0.0157268 -0.99704 0.487813 0.0422175 -0.871927 0.23207 0.0241235 -0.9724 0.125364 0.0145942 -0.992004 0.793622 -0.0702815 -0.604338 0.841074 -0.0554295 -0.538073 0.88876 -0.0205475 -0.457912 0.0207668 -0.998835 -0.0435558 0.819602 -0.0335731 -0.571949 0.999453 0.00939822 -0.0316977 0.0529719 -0.0548939 -0.997086 0.0516808 -0.256428 -0.965181 0.0522274 -0.0576167 -0.996972 0.050364 -0.0604433 -0.9969 0.245181 -0.604632 -0.75783 0.046178 -0.0626752 -0.996965 0.0402131 -0.0344731 -0.998596 -0.0351463 -0.0418648 -0.998505 0.054442 -0.644964 -0.762272 0.0408694 -0.0344216 -0.998571 0.0402478 -0.0344561 -0.998595 0.0381961 -0.0345027 -0.998674 -6.25536e-07 -0.999848 0.0174599 -0.0656709 -0.686477 0.72418 -6.57928e-06 -0.999846 0.0175401 -9.44175e-06 -0.999846 0.0175802 -0.0533334 -0.704186 0.70801 -0.0509558 -0.622492 0.780965 0.0428444 0.0345538 -0.998484 0.0429155 -0.0280979 -0.998684 0.0478085 0.59232 -0.804283 0.0312463 0.63541 -0.771542 0.0400609 0.0463876 -0.99812 0.0395578 0.027628 -0.998835 0.0407056 0.049499 -0.997944 0.0403097 0.0483424 -0.998017 0.0399083 0.0474251 -0.998077 0.0529485 0.0718597 -0.996008 0.0390486 -0.014636 -0.99913 0.021191 -0.788643 -0.614487 0.00085866 0.0274765 -0.999622 0.939692 4.08813e-06 0.342023 0.0439598 0.611553 -0.789981 0.0498253 0.632162 -0.773232 0.058619 0.68668 -0.724593 0.0218171 0.69875 -0.715033 0.0729082 0.671661 -0.737263 0.0783775 0.636833 -0.767008 0.0545192 0.673395 -0.73727 0.0784547 0.672909 -0.735553 0.0713887 0.673517 -0.735717 0.0816284 0.650062 -0.755484 0.676605 0.44357 -0.587751 0.268866 0.652844 -0.70817 0.249729 0.617401 -0.745957 0.999827 0.0058823 -0.0176231 0.753027 0.131874 -0.64464 0.833644 0.293996 -0.46755 0.999931 -7.60955e-05 -0.0117516 0.762878 0.0382354 -0.645411 0.842544 0.0244837 -0.538072 0.820528 0.214583 -0.5298 0.796286 0.0132852 -0.604774 0.890568 0.07064 -0.449331 0.609299 0.425983 -0.668799 0.387076 0.441478 -0.809487 0.616871 0.49138 -0.614831 0.635898 0.381237 -0.671038 0.784124 0.159996 -0.599625 0.0632886 0.0397234 -0.997204 0.0578502 0.050009 -0.997072 0.0586068 0.0515754 -0.996948 0.0571844 0.0475225 -0.997232 0.089013 0.0519404 -0.994675 0.0855171 0.0501778 -0.995072 0.0593771 0.0318985 -0.997726 0.0893556 0.626296 -0.774448 0.0561389 0.0535091 -0.996988 0.0523684 0.188377 -0.9807 0.0565618 0.0544486 -0.996913 0.0333 0.651782 -0.757675 0.0500096 -0.13338 -0.989802 -0.822298 -0.00276706 -0.569051 -0.822293 0.00276839 -0.569058 0.0307101 0.985253 -0.168326 0.050907 0.19139 -0.980193 0.023986 0.131283 -0.991055 0.0539359 0.195403 -0.979239 0.752442 0.196283 0.628732 0.882875 0.174868 0.435835 -0.206259 -0.780418 0.590259 0.852031 0.161617 0.497919 0.933015 0.196221 0.301631 0.807467 -0.0841706 0.583877 0.929431 0.241659 0.278851 0.90828 0.388657 0.154836 0.914834 0.313048 0.255108 0.987634 0.0988961 0.121651 0.155499 -0.985119 -0.0732195 0.992569 0.0407261 0.114662 0.991418 0.0664236 0.1126 0.993516 0.0212477 0.111693 0.993913 0.0106837 0.109644 0.993826 0.0161166 0.109775 0.994198 0.00349172 0.10751 0 0 1 -0.999011 -0.0283757 0.0342238 0 0 1 0 0 1 -0.99953 -0.0176513 0.025049 -0.998739 -0.0212443 0.0454989 -0.999042 -0.0312986 0.0305834 -0.999778 -0.0081177 0.0194369 -0.999359 -0.0116455 0.0338546 -0.999895 -0.00168676 0.0143928 -0.999687 -0.00411775 0.0246974 -0.999959 0.00129628 0.00891533 -0.999867 -2.3502e-05 0.0163248 -0.999997 0.00081607 0.00211621 -0.999969 0.000250617 0.00782005 -0.999968 -0.0029025 -0.00740589 -0.999994 -0.00304864 -0.00167936 -0.999712 -0.0064031 -0.0231251 -0.999698 -0.00912498 -0.0228382 -0.999871 -0.00897064 -0.0133222 -0.997497 -0.00638892 -0.0704238 -0.999511 -0.0143378 -0.0277905 -0.997406 -0.0143076 -0.070544 -0.997398 -0.010403 -0.0713444 -0.998127 -0.0252918 0.0557119 -0.617407 -0.78392 0.0654125 -0.998374 -0.0333777 0.0462199 0 0 1 0 0 1 0 0 1 -0.998986 -0.0181169 0.0412081 -0.46787 -0.882795 0.0420789 -0.999116 -0.0246046 0.0340951 -0.395905 -0.918236 0.0101227 -0.467846 -0.88278 0.0426621 -0.999618 -0.0103201 0.0256329 -0.447498 -0.893769 0.0303749 -0.999634 -0.0107816 0.0247954 -0.451426 -0.89156 0.0365593 -0.446524 -0.894224 0.0312957 -0.999889 -0.0104585 0.01061 -0.452655 -0.891469 0.0196734 -0.999843 -0.00669514 0.0164045 -0.444725 -0.895251 0.027311 -0.999887 -0.0146977 -0.00330754 -0.463743 -0.885946 0.00642148 -0.999929 -0.00898226 0.00788502 -0.459461 -0.887852 0.024778 -0.999544 -0.0262472 -0.0149244 -0.494736 -0.869038 -0.00312077 -0.999886 -0.0150383 -0.00163781 -0.483622 -0.87496 0.0235527 -0.999232 -0.0266266 -0.0287607 -0.541343 -0.840692 -0.0136005 -0.524796 -0.850911 0.0232177 -0.995 -0.0890881 -0.0451384 -0.605402 -0.795463 -0.0269724 -0.99902 -0.0371347 -0.0240794 -0.998693 -0.042266 -0.0287276 -0.999089 -0.0405516 -0.0132576 -0.589524 -0.807408 0.0235285 -0.994186 -0.0890152 -0.0605776 -0.737542 -0.673122 -0.0542071 -0.737455 -0.673042 0.0563536 -0.996758 -0.0370506 -0.0714207 -0.994754 -0.0619061 -0.0814393 -0.99402 -0.075283 -0.079096 -0.999288 -0.0236036 -0.0294494 -0.997091 -0.0235518 -0.0724864 0 0 1 0 0 1 0 0 1 -0.997092 -0.0234751 -0.0725008 -0.884386 0.464863 -0.0420017 -0.794295 -0.602039 -0.0815161 -0.779823 -0.625309 -0.0294206 -0.828798 0.558698 -0.0308357 -0.865351 -0.490434 -0.103155 -0.842721 -0.53673 -0.0417501 -0.923373 -0.367188 -0.112049 -0.906706 -0.418393 -0.0532179 -0.992033 -0.0710872 -0.104007 -0.955823 -0.269358 -0.117679 -0.925363 -0.372354 -0.0711056 -0.991531 -0.057572 -0.116412 -0.950988 -0.279292 -0.132734 -0.954468 -0.262318 -0.142057 0.999088 0.0267233 -0.0333056 0.999044 0.0298225 -0.0319683 0.997886 0.0332284 -0.0558451 0.998746 0.0236507 -0.0441362 0.998847 0.0199084 -0.0436931 0.606367 0.795128 0.00949287 0.474513 0.878289 -0.0586971 0 0 1 0.396906 0.916738 -0.0453467 0 0 1 0.034875 0.998687 -0.0375145 0 0 1 -0.0187905 0.99861 -0.0492356 0 0 1 1 0 0 1 0 0 -0.034859 -0.998227 0.0482413 -0.0277536 -0.998775 0.0409558 -0.0158073 -0.999263 0.0349718 -0.00210844 -0.999533 0.0304923 -0.0313634 -0.998804 0.0375108 -0.0350789 -0.998996 0.0278798 -0.0345574 -0.999041 0.0268928 -0.0350967 -0.999012 0.0272587 -0.0396247 -0.998791 0.0291055 -0.623168 -0.781672 0.0254969 -0.0515802 -0.998138 0.0325576 -0.697376 -0.715314 0.0446446 -0.623188 -0.781698 -0.0241805 -0.756511 -0.653508 0.0248565 -0.0348494 -0.998712 0.0368861 -0.0348586 -0.998976 0.0288468 -0.697842 -0.715787 -0.0258066 -0.941024 -0.0312171 -0.336897 -0.0424178 -0.909469 0.413601 -0.985957 -0.0397316 -0.162204 -0.985952 -0.127766 -0.107581 -0.0171906 -0.984431 0.174928 -0.0325736 -0.980027 0.196181 -0.136407 -0.773566 0.61886 -0.0411515 -0.910139 0.412254 -0.990252 -0.114389 -0.0794721 -0.902255 -0.427933 -0.0530032 -0.966213 -0.257518 0.0108623 -0.966614 -0.256223 -0.00259962 -0.827164 -0.560454 -0.041116 -0.886316 -0.462463 0.0239212 -0.758509 -0.651016 0.0290188 -0.0338405 -0.998529 0.0423648 -0.0352304 -0.998675 0.0375071 -0.0360314 -0.998085 0.050283 -0.032803 -0.997338 0.0651184 -0.0331476 -0.998361 0.0466438 -0.0308033 -0.995192 0.0929741 -0.0321078 -0.997428 0.0640819 -0.0371539 -0.99384 0.104411 -0.0399276 -0.510232 0.859109 -0.0774952 -0.826116 0.558146 1 0 0 0.999998 0 0.00186544 1 0 0 -0.0322179 -0.980085 0.195949 0.994145 0.0400285 0.10037 0.980808 0.100297 0.167204 0.968239 -0.0775266 0.237702 0.999866 0.0144486 0.00768518 0.999997 0.00178338 -0.0019335 0.99964 0.0268329 -0.000935621 0.999976 0.00680373 0.00115884 0.999964 -0.00597805 0.00610183 0.998202 -0.054825 0.0242439 0.998791 0.0139309 0.0471403 0.999771 -0.0099135 0.0189442 0.998803 0.0107233 0.0477321 0.99444 -0.0127061 0.104532 0.999988 -0.00149957 -0.00475806 0.0360028 0.998935 -0.0288431 0.0435704 0.99869 -0.0268221 0.0420502 0.998741 -0.0273473 0.0383617 0.998837 -0.0291993 0.0348518 0.998786 -0.0348261 0.0348497 0.99886 -0.0326155 0.0348489 0.998712 -0.036868 0.0348464 0.998465 -0.0430468 0.0335501 0.99869 -0.038629 0.0367391 0.99749 -0.0605296 0.0320242 0.99822 -0.0503123 0.0322592 0.994006 -0.10446 0.0308985 0.997098 -0.069572 0.0328182 0.982421 -0.183773 0.0293108 0.993663 -0.10851 0.0432438 0.887985 -0.457834 0.0315569 0.982003 -0.186212 0.0762777 0.902372 -0.424153 0.0366518 0.748664 -0.661936 0.0035335 0.99905 -0.0434402 0.0196688 0.999078 -0.038154 0.0297143 0.998994 -0.0335949 0.0343646 0.998959 -0.0299948 0.0350857 0.999002 -0.0276404 0.460607 0.886772 -0.0384237 0.466611 0.883825 -0.033586 0.442375 0.896329 -0.0299909 0.446841 0.893727 -0.0398205 0.441532 0.896847 -0.026742 0.441555 0.896714 -0.0305596 0.459161 0.888023 -0.0242343 0.444841 0.89526 -0.0250195 0.447506 0.894127 -0.0165724 0.485456 0.873961 -0.0229057 0.468292 0.883552 -0.00617961 0.528317 0.848751 -0.0224138 0.499469 0.866328 0.00266012 0.594109 0.80408 -0.022145 0.545342 0.838121 0.0124833 0.633333 0.773528 -0.023338 0.596315 0.802604 -0.0153377 0.633281 0.773506 -0.0253777 0.897775 0.440305 -0.01147 0.810116 0.584656 0.0434618 0.802561 0.595831 0.0296789 0.970927 0.239325 0.00497358 0.925766 0.373539 0.0585266 0.973116 0.228419 0.0295029 0.0317436 0.982033 -0.186021 0.986891 0.0638838 0.148208 0.992691 0.0838514 0.0867997 0.041821 0.91728 -0.39604 0.984201 0.0212534 0.175772 0.947941 0.0601705 0.312711 0.946726 0.284256 0.151354 0.945725 0.292561 0.141465 0.927332 0.366432 0.0760491 0.954517 0.274074 0.117388 0.955231 0.26631 0.12889 0.865012 0.498844 0.0539369 0.923482 0.369389 0.103595 0.925064 0.362543 0.113219 0.79803 0.601104 0.0426852 0.86582 0.492627 0.0875994 0.738643 0.673413 0.0303534 0.701416 0.712195 0.0281574 0.79599 0.602308 0.0602108 0.738624 0.673385 0.0314339 0.701494 0.712418 0.0191623 0.997403 0.0378517 0.0612748 0.998252 0.0378705 0.0453833 0.996356 0.0852631 0.00240062 0.993075 0.0849467 0.0811561 0.995271 0.0601917 0.076245 0.993558 0.0697132 0.0893433 0.992832 0.0698656 0.0969696 0.603812 -0.797095 -0.0071812 0.496966 -0.867379 -0.0260448 0.998889 0.0238304 -0.0406491 0.999573 0.0109359 -0.0270865 0.999422 0.0121233 -0.0317475 0.999811 0.00742615 -0.0179805 0.999745 0.00628609 -0.0217 0.999971 0.00292983 -0.00708307 0.999953 0.00881416 0.00402701 0.999882 0.00929571 -0.0122461 0.999648 0.0215861 0.0154269 0.99991 0.0132879 -0.00198251 0.998818 0.039015 0.0289745 0.999675 0.0232514 0.0104705 0.997479 0.00635187 0.0706817 0.999678 0.014209 0.0210069 0.99739 0.0141893 0.0707953 0.997381 0.010332 0.0715814 0.999986 0.00147224 0.00503632 0.999629 0.0233482 0.0140046 0.99956 0.00817625 0.0285282 0.999913 0.00793541 0.0104967 - - - - - - - - - - - - - - -

5 0 0 0 1 0 18 1 1 1 0 1 6 2 5 2 1 2 15 3 6 3 1 3 18 4 15 4 1 4 2 5 0 5 5 5 3 6 18 6 0 6 2 7 30 7 0 7 3 8 0 8 30 8 4 9 5 9 6 9 4 10 2 10 5 10 4 11 6 11 15 11 14 12 7 12 8 12 10 13 8 13 7 13 9 14 14 14 8 14 10 15 9 15 8 15 14 16 11 16 7 16 22 17 7 17 11 17 10 18 7 18 22 18 20 19 11 19 14 19 12 20 11 20 20 20 13 21 11 21 12 21 13 22 22 22 11 22 20 23 14 23 9 23 57 24 15 24 18 24 59 25 4 25 15 25 16 26 15 26 57 26 59 27 15 27 16 27 33 28 18 28 3 28 17 29 18 29 53 29 33 30 53 30 18 30 55 31 18 31 17 31 57 32 18 32 55 32 21 33 20 33 9 33 19 34 9 34 10 34 46 35 21 35 9 35 44 36 46 36 9 36 19 37 44 37 9 37 36 38 12 38 20 38 43 39 36 39 20 39 21 40 43 40 20 40 3 41 13 41 12 41 36 42 3 42 12 42 24 43 22 43 13 43 23 44 10 44 22 44 27 45 22 45 25 45 24 46 25 46 22 46 26 47 22 47 27 47 28 48 23 48 22 48 26 49 28 49 22 49 3 50 30 50 13 50 29 51 13 51 30 51 29 52 24 52 13 52 29 53 30 53 2 53 32 54 2 54 4 54 31 55 2 55 32 55 41 56 2 56 31 56 29 57 2 57 41 57 33 58 3 58 36 58 58 59 4 59 59 59 62 60 4 60 58 60 32 61 4 61 62 61 48 62 19 62 10 62 23 63 48 63 10 63 34 64 37 64 35 64 38 65 35 65 37 65 43 66 34 66 35 66 43 67 35 67 36 67 52 68 36 68 35 68 52 69 35 69 38 69 43 70 37 70 34 70 51 71 37 71 43 71 51 72 38 72 37 72 27 73 25 73 39 73 24 74 39 74 25 74 49 75 27 75 39 75 40 76 39 76 24 76 49 77 39 77 40 77 49 78 26 78 27 78 40 79 24 79 42 79 41 80 42 80 24 80 29 81 41 81 24 81 33 82 36 82 52 82 54 83 43 83 21 83 54 84 51 84 43 84 45 85 21 85 46 85 45 86 54 86 21 86 56 87 46 87 44 87 56 88 45 88 46 88 56 89 44 89 19 89 47 90 19 90 48 90 47 91 56 91 19 91 60 92 48 92 23 92 60 93 47 93 48 93 61 94 23 94 28 94 61 95 60 95 23 95 50 96 28 96 26 96 50 97 61 97 28 97 49 98 50 98 26 98 49 99 40 99 42 99 31 100 49 100 42 100 41 101 31 101 42 101 51 102 52 102 38 102 53 103 52 103 51 103 33 104 52 104 53 104 17 105 51 105 54 105 17 106 53 106 51 106 55 107 54 107 45 107 55 108 17 108 54 108 57 109 45 109 56 109 57 110 55 110 45 110 16 111 56 111 47 111 16 112 57 112 56 112 59 113 47 113 60 113 59 114 16 114 47 114 58 115 60 115 61 115 58 116 59 116 60 116 62 117 61 117 50 117 62 118 58 118 61 118 32 119 50 119 49 119 32 120 62 120 50 120 31 121 32 121 49 121 70 122 65 122 63 122 91 123 63 123 65 123 71 124 70 124 63 124 64 125 71 125 63 125 83 126 64 126 63 126 83 127 63 127 91 127 70 128 68 128 65 128 92 129 65 129 68 129 92 130 91 130 65 130 70 131 66 131 68 131 67 132 68 132 66 132 92 133 68 133 67 133 70 134 69 134 66 134 67 135 66 135 69 135 72 136 69 136 70 136 67 137 69 137 72 137 74 138 70 138 71 138 72 139 70 139 74 139 64 140 73 140 71 140 87 141 71 141 73 141 87 142 84 142 71 142 74 143 71 143 84 143 79 144 76 144 73 144 86 145 73 145 76 145 80 146 79 146 73 146 82 147 80 147 73 147 75 148 82 148 73 148 64 149 75 149 73 149 86 150 87 150 73 150 79 151 78 151 76 151 77 152 76 152 78 152 77 153 86 153 76 153 96 154 78 154 79 154 96 155 77 155 78 155 81 156 79 156 80 156 81 157 96 157 79 157 105 158 80 158 82 158 81 159 80 159 105 159 105 160 82 160 75 160 83 161 75 161 64 161 105 162 75 162 83 162 109 163 84 163 87 163 103 164 74 164 84 164 103 165 84 165 85 165 109 166 85 166 84 166 86 167 88 167 87 167 110 168 87 168 88 168 110 169 109 169 87 169 77 170 88 170 86 170 95 171 88 171 77 171 89 172 88 172 95 172 89 173 110 173 88 173 72 174 74 174 103 174 94 175 83 175 91 175 90 176 98 176 91 176 94 177 91 177 98 177 92 178 90 178 91 178 93 179 105 179 83 179 94 180 93 180 83 180 107 181 77 181 96 181 107 182 95 182 77 182 107 183 96 183 81 183 99 184 98 184 90 184 97 185 94 185 98 185 117 186 98 186 99 186 97 187 98 187 117 187 92 188 102 188 90 188 100 189 90 189 102 189 99 190 90 190 100 190 67 191 101 191 102 191 115 192 102 192 101 192 92 193 67 193 102 193 100 194 102 194 115 194 103 195 85 195 101 195 104 196 101 196 85 196 72 197 103 197 101 197 67 198 72 198 101 198 115 199 101 199 104 199 113 200 85 200 109 200 114 201 85 201 113 201 104 202 85 202 114 202 108 203 81 203 105 203 93 204 108 204 105 204 108 205 107 205 81 205 116 206 95 206 107 206 116 207 89 207 95 207 119 208 107 208 108 208 116 209 107 209 106 209 119 210 106 210 107 210 118 211 108 211 93 211 120 212 108 212 118 212 119 213 108 213 120 213 118 214 93 214 94 214 118 215 94 215 97 215 113 216 109 216 110 216 112 217 110 217 89 217 111 218 113 218 110 218 112 219 111 219 110 219 116 220 112 220 89 220 111 221 114 221 113 221 115 222 114 222 111 222 115 223 104 223 114 223 117 224 111 224 112 224 100 225 115 225 111 225 99 226 100 226 111 226 117 227 99 227 111 227 116 228 106 228 112 228 97 229 112 229 106 229 97 230 117 230 112 230 118 231 97 231 106 231 120 232 118 232 106 232 119 233 120 233 106 233 140 234 129 234 124 234 128 235 124 235 129 235 144 236 140 236 124 236 163 237 144 237 124 237 166 238 163 238 124 238 122 239 121 239 124 239 127 240 124 240 121 240 123 241 122 241 124 241 176 242 123 242 124 242 128 243 176 243 124 243 165 244 166 244 124 244 172 245 165 245 124 245 126 246 172 246 124 246 125 247 126 247 124 247 127 248 125 248 124 248 140 249 133 249 129 249 130 250 129 250 133 250 131 251 128 251 129 251 130 252 131 252 129 252 132 253 135 253 133 253 130 254 133 254 135 254 140 255 132 255 133 255 134 256 139 256 135 256 136 257 135 257 139 257 132 258 134 258 135 258 130 259 135 259 136 259 134 260 138 260 139 260 137 261 139 261 138 261 184 262 139 262 137 262 184 263 136 263 139 263 137 264 138 264 134 264 141 265 134 265 132 265 137 266 134 266 141 266 143 267 132 267 140 267 143 268 141 268 132 268 142 269 140 269 144 269 142 270 143 270 140 270 163 271 149 271 144 271 148 272 144 272 149 272 142 273 144 273 148 273 164 274 151 274 149 274 146 275 149 275 151 275 163 276 164 276 149 276 145 277 149 277 146 277 147 278 169 278 149 278 171 279 149 279 169 279 145 280 147 280 149 280 174 281 148 281 149 281 173 282 174 282 149 282 175 283 173 283 149 283 177 284 175 284 149 284 179 285 177 285 149 285 171 286 179 286 149 286 162 287 154 287 151 287 150 288 151 288 154 288 164 289 162 289 151 289 152 290 146 290 151 290 150 291 152 291 151 291 153 292 155 292 154 292 150 293 154 293 155 293 162 294 153 294 154 294 153 295 159 295 155 295 158 296 155 296 159 296 150 297 155 297 158 297 153 298 160 298 159 298 156 299 159 299 160 299 157 300 158 300 159 300 156 301 157 301 159 301 156 302 160 302 153 302 161 303 153 303 162 303 156 304 153 304 161 304 167 305 162 305 164 305 167 306 161 306 162 306 168 307 164 307 163 307 168 308 167 308 164 308 168 309 163 309 166 309 161 310 158 310 157 310 167 311 150 311 158 311 167 312 158 312 161 312 156 313 161 313 157 313 166 314 146 314 152 314 165 315 145 315 146 315 165 316 146 316 166 316 167 317 152 317 150 317 168 318 166 318 152 318 168 319 152 319 167 319 182 320 169 320 170 320 125 321 170 321 169 321 127 322 182 322 170 322 127 323 170 323 125 323 126 324 169 324 147 324 181 325 171 325 169 325 182 326 181 326 169 326 125 327 169 327 126 327 172 328 147 328 145 328 126 329 147 329 172 329 172 330 145 330 165 330 128 331 148 331 174 331 131 332 148 332 128 332 131 333 142 333 148 333 176 334 174 334 173 334 128 335 174 335 176 335 123 336 173 336 175 336 176 337 173 337 123 337 122 338 175 338 177 338 123 339 175 339 122 339 178 340 177 340 179 340 122 341 177 341 178 341 180 342 179 342 171 342 178 343 179 343 180 343 183 344 171 344 181 344 180 345 171 345 183 345 121 346 181 346 182 346 183 347 181 347 121 347 127 348 121 348 182 348 122 349 183 349 121 349 122 350 180 350 183 350 122 351 178 351 180 351 136 352 141 352 143 352 184 353 137 353 141 353 184 354 141 354 136 354 130 355 143 355 142 355 130 356 136 356 143 356 130 357 142 357 131 357 200 358 190 358 186 358 233 359 186 359 190 359 185 360 200 360 186 360 219 361 185 361 186 361 220 362 219 362 186 362 229 363 228 363 186 363 220 364 186 364 228 364 187 365 229 365 186 365 188 366 187 366 186 366 232 367 188 367 186 367 233 368 232 368 186 368 198 369 189 369 190 369 240 370 190 370 189 370 200 371 198 371 190 371 191 372 233 372 190 372 240 373 191 373 190 373 197 374 192 374 189 374 240 375 189 375 192 375 198 376 197 376 189 376 197 377 194 377 192 377 239 378 192 378 194 378 239 379 193 379 192 379 240 380 192 380 193 380 197 381 195 381 194 381 238 382 194 382 195 382 238 383 239 383 194 383 196 384 195 384 197 384 238 385 195 385 196 385 196 386 197 386 198 386 199 387 198 387 200 387 199 388 196 388 198 388 201 389 200 389 185 389 201 390 199 390 200 390 219 391 202 391 185 391 206 392 185 392 202 392 201 393 185 393 206 393 209 394 203 394 202 394 223 395 202 395 203 395 219 396 209 396 202 396 222 397 202 397 223 397 226 398 205 398 202 398 204 399 202 399 205 399 227 400 226 400 202 400 222 401 227 401 202 401 204 402 206 402 202 402 209 403 208 403 203 403 237 404 203 404 208 404 207 405 223 405 203 405 237 406 207 406 203 406 210 407 211 407 208 407 237 408 208 408 211 408 209 409 210 409 208 409 213 410 216 410 211 410 215 411 211 411 216 411 210 412 213 412 211 412 215 413 212 413 211 413 237 414 211 414 212 414 213 415 214 415 216 415 235 416 216 416 214 416 215 417 216 417 235 417 236 418 214 418 213 418 235 419 214 419 236 419 236 420 213 420 210 420 218 421 210 421 209 421 218 422 236 422 210 422 217 423 209 423 219 423 217 424 218 424 209 424 217 425 219 425 220 425 220 426 224 426 221 426 222 427 221 427 224 427 223 428 220 428 221 428 222 429 223 429 221 429 220 430 225 430 224 430 227 431 224 431 225 431 222 432 224 432 227 432 220 433 228 433 225 433 226 434 225 434 228 434 227 435 225 435 226 435 205 436 228 436 229 436 226 437 228 437 205 437 204 438 229 438 187 438 204 439 205 439 229 439 230 440 187 440 188 440 204 441 187 441 230 441 231 442 188 442 232 442 230 443 188 443 231 443 234 444 232 444 233 444 231 445 232 445 234 445 234 446 233 446 206 446 191 447 206 447 233 447 207 448 217 448 220 448 207 449 220 449 223 449 212 450 236 450 218 450 215 451 235 451 236 451 215 452 236 452 212 452 237 453 218 453 217 453 237 454 212 454 218 454 237 455 217 455 207 455 231 456 234 456 206 456 230 457 231 457 206 457 204 458 230 458 206 458 201 459 206 459 191 459 196 460 193 460 239 460 199 461 240 461 193 461 199 462 193 462 196 462 238 463 196 463 239 463 199 464 191 464 240 464 201 465 191 465 199 465 242 466 249 466 243 466 244 467 243 467 249 467 241 468 242 468 243 468 281 469 243 469 244 469 313 470 243 470 281 470 241 471 243 471 313 471 246 472 250 472 249 472 254 473 249 473 250 473 245 474 246 474 249 474 265 475 245 475 249 475 242 476 265 476 249 476 248 477 244 477 249 477 247 478 248 478 249 478 778 479 287 479 767 479 254 480 247 480 249 480 257 481 255 481 250 481 253 482 250 482 255 482 256 483 257 483 250 483 251 484 256 484 250 484 252 485 251 485 250 485 262 486 252 486 250 486 246 487 262 487 250 487 253 488 254 488 250 488 300 489 255 489 257 489 253 490 255 490 300 490 325 491 257 491 256 491 478 492 300 492 257 492 478 493 257 493 325 493 258 494 256 494 251 494 326 495 325 495 256 495 258 496 326 496 256 496 328 497 251 497 252 497 328 498 258 498 251 498 259 499 252 499 262 499 259 500 328 500 252 500 260 501 262 501 246 501 261 502 259 502 262 502 260 503 261 503 262 503 264 504 246 504 245 504 264 505 260 505 246 505 263 506 245 506 265 506 263 507 264 507 245 507 241 508 265 508 242 508 241 509 263 509 265 509 268 510 267 510 266 510 322 511 266 511 267 511 310 512 268 512 266 512 310 513 266 513 307 513 322 514 307 514 266 514 268 515 270 515 267 515 322 516 267 516 270 516 268 517 269 517 270 517 271 518 270 518 269 518 291 519 270 519 271 519 291 520 293 520 270 520 322 521 270 521 293 521 268 522 275 522 269 522 272 523 269 523 275 523 272 524 271 524 269 524 273 525 277 525 275 525 274 526 275 526 277 526 268 527 273 527 275 527 274 528 272 528 275 528 281 529 244 529 277 529 278 530 277 530 244 530 276 531 281 531 277 531 273 532 276 532 277 532 278 533 274 533 277 533 248 534 278 534 244 534 280 535 281 535 276 535 279 536 281 536 280 536 314 537 281 537 279 537 313 538 281 538 314 538 280 539 276 539 273 539 282 540 273 540 268 540 280 541 273 541 282 541 282 542 268 542 310 542 493 543 271 543 272 543 283 544 291 544 271 544 284 545 271 545 493 545 283 546 271 546 284 546 494 547 272 547 274 547 494 548 493 548 272 548 286 549 274 549 278 549 286 550 494 550 274 550 285 551 278 551 248 551 285 552 286 552 278 552 285 553 248 553 247 553 767 554 287 554 288 554 285 555 247 555 289 555 289 556 247 556 254 556 480 557 254 557 253 557 480 558 289 558 254 558 290 559 296 559 293 559 324 560 293 560 296 560 292 561 290 561 293 561 291 562 292 562 293 562 294 563 322 563 293 563 294 564 293 564 324 564 386 565 296 565 290 565 435 566 323 566 296 566 295 567 296 567 323 567 295 568 324 568 296 568 386 569 435 569 296 569 386 570 290 570 292 570 496 571 292 571 291 571 298 572 386 572 292 572 297 573 298 573 292 573 500 574 292 574 496 574 513 575 292 575 500 575 513 576 297 576 292 576 496 577 291 577 283 577 299 578 253 578 300 578 488 579 300 579 478 579 486 580 299 580 300 580 487 581 486 581 300 581 490 582 487 582 300 582 488 583 490 583 300 583 301 584 480 584 253 584 485 585 301 585 253 585 302 586 485 586 253 586 299 587 302 587 253 587 306 588 303 588 304 588 305 589 304 589 303 589 378 590 306 590 304 590 396 591 378 591 304 591 396 592 304 592 305 592 306 593 307 593 303 593 308 594 303 594 307 594 305 595 303 595 308 595 319 596 310 596 307 596 306 597 319 597 307 597 321 598 308 598 307 598 322 599 321 599 307 599 316 600 282 600 310 600 309 601 316 601 310 601 319 602 309 602 310 602 317 603 280 603 282 603 316 604 317 604 282 604 311 605 279 605 280 605 317 606 311 606 280 606 315 607 314 607 279 607 312 608 315 608 279 608 311 609 312 609 279 609 241 610 314 610 315 610 241 611 313 611 314 611 318 612 315 612 312 612 329 613 241 613 315 613 366 614 329 614 315 614 318 615 366 615 315 615 316 616 312 616 311 616 318 617 312 617 316 617 316 618 311 618 317 618 378 619 316 619 309 619 378 620 318 620 316 620 378 621 309 621 319 621 378 622 319 622 306 622 305 623 308 623 321 623 320 624 321 624 322 624 305 625 321 625 320 625 294 626 320 626 322 626 324 627 323 627 320 627 433 628 320 628 323 628 294 629 324 629 320 629 433 630 305 630 320 630 295 631 323 631 324 631 433 632 323 632 435 632 520 633 325 633 326 633 520 634 478 634 325 634 368 635 326 635 258 635 522 636 326 636 368 636 520 637 326 637 522 637 363 638 258 638 328 638 368 639 258 639 363 639 327 640 328 640 259 640 363 641 328 641 327 641 361 642 259 642 261 642 327 643 259 643 361 643 359 644 261 644 260 644 361 645 261 645 359 645 357 646 260 646 264 646 359 647 260 647 357 647 357 648 264 648 263 648 355 649 263 649 241 649 357 650 263 650 355 650 355 651 241 651 329 651 364 652 333 652 330 652 331 653 330 653 333 653 362 654 364 654 330 654 549 655 362 655 330 655 549 656 330 656 332 656 331 657 332 657 330 657 364 658 334 658 333 658 649 659 333 659 334 659 649 660 331 660 333 660 364 661 335 661 334 661 647 662 334 662 335 662 647 663 649 663 334 663 360 664 337 664 335 664 647 665 335 665 337 665 364 666 360 666 335 666 360 667 336 667 337 667 339 668 337 668 336 668 339 669 647 669 337 669 338 670 340 670 336 670 339 671 336 671 340 671 360 672 338 672 336 672 338 673 341 673 340 673 653 674 340 674 341 674 653 675 339 675 340 675 358 676 342 676 341 676 652 677 341 677 342 677 338 678 358 678 341 678 652 679 653 679 341 679 343 680 344 680 342 680 655 681 342 681 344 681 358 682 343 682 342 682 655 683 652 683 342 683 356 684 346 684 344 684 654 685 344 685 346 685 343 686 356 686 344 686 654 687 655 687 344 687 345 688 348 688 346 688 347 689 346 689 348 689 356 690 345 690 346 690 347 691 654 691 346 691 350 692 349 692 348 692 347 693 348 693 349 693 352 694 350 694 348 694 345 695 352 695 348 695 371 696 349 696 350 696 659 697 349 697 371 697 657 698 347 698 349 698 659 699 657 699 349 699 353 700 350 700 352 700 353 701 371 701 350 701 351 702 352 702 345 702 372 703 352 703 351 703 372 704 353 704 352 704 329 705 345 705 356 705 354 706 351 706 345 706 329 707 354 707 345 707 355 708 356 708 343 708 355 709 329 709 356 709 357 710 343 710 358 710 357 711 355 711 343 711 359 712 358 712 338 712 359 713 357 713 358 713 361 714 338 714 360 714 361 715 359 715 338 715 327 716 360 716 364 716 327 717 361 717 360 717 362 718 365 718 364 718 363 719 364 719 365 719 363 720 327 720 364 720 549 721 365 721 362 721 367 722 363 722 365 722 369 723 367 723 365 723 369 724 365 724 549 724 372 725 351 725 354 725 366 726 354 726 329 726 318 727 354 727 366 727 318 728 372 728 354 728 367 729 368 729 363 729 523 730 368 730 367 730 523 731 522 731 368 731 523 732 367 732 369 732 373 733 371 733 353 733 370 734 371 734 373 734 659 735 371 735 370 735 376 736 353 736 372 736 374 737 373 737 353 737 376 738 374 738 353 738 377 739 372 739 318 739 375 740 376 740 372 740 377 741 375 741 372 741 378 742 377 742 318 742 370 743 373 743 374 743 398 744 374 744 376 744 461 745 374 745 398 745 370 746 374 746 461 746 398 747 376 747 375 747 398 748 375 748 377 748 396 749 377 749 378 749 396 750 398 750 377 750 379 751 380 751 383 751 427 752 383 752 380 752 392 753 379 753 383 753 381 754 392 754 383 754 382 755 383 755 427 755 430 756 383 756 382 756 381 757 383 757 430 757 384 758 380 758 379 758 384 759 425 759 380 759 427 760 380 760 425 760 389 761 385 761 379 761 384 762 379 762 385 762 391 763 389 763 379 763 392 764 391 764 379 764 387 765 385 765 389 765 387 766 384 766 385 766 388 767 389 767 391 767 386 768 387 768 389 768 388 769 386 769 389 769 390 770 391 770 392 770 388 771 391 771 390 771 436 772 390 772 392 772 381 773 436 773 392 773 402 774 393 774 394 774 395 775 394 775 393 775 397 776 402 776 394 776 396 777 397 777 394 777 396 778 394 778 395 778 402 779 400 779 393 779 461 780 393 780 400 780 395 781 393 781 398 781 461 782 398 782 393 782 407 783 400 783 402 783 457 784 400 784 407 784 399 785 461 785 400 785 399 786 400 786 457 786 405 787 401 787 402 787 404 788 402 788 401 788 397 789 405 789 402 789 403 790 407 790 402 790 404 791 403 791 402 791 432 792 401 792 405 792 417 793 404 793 401 793 428 794 417 794 401 794 432 795 428 795 401 795 406 796 405 796 397 796 433 797 432 797 405 797 433 798 405 798 406 798 305 799 406 799 397 799 396 800 305 800 397 800 410 801 408 801 407 801 453 802 407 802 408 802 403 803 410 803 407 803 453 804 457 804 407 804 409 805 413 805 408 805 449 806 408 806 413 806 410 807 409 807 408 807 449 808 453 808 408 808 412 809 411 809 413 809 606 810 413 810 411 810 409 811 412 811 413 811 606 812 451 812 413 812 449 813 413 813 451 813 606 814 411 814 412 814 622 815 412 815 409 815 441 816 606 816 412 816 441 817 412 817 614 817 615 818 614 818 412 818 414 819 615 819 412 819 618 820 414 820 412 820 617 821 618 821 412 821 415 822 617 822 412 822 622 823 415 823 412 823 622 824 409 824 410 824 416 825 410 825 403 825 416 826 622 826 410 826 628 827 403 827 404 827 628 828 416 828 403 828 625 829 404 829 417 829 628 830 404 830 625 830 428 831 424 831 417 831 418 832 417 832 424 832 778 833 779 833 287 833 593 834 420 834 417 834 419 835 417 835 420 835 593 836 417 836 597 836 773 837 545 837 696 837 597 838 417 838 418 838 623 839 421 839 541 839 421 840 774 840 542 840 626 841 625 841 417 841 419 842 626 842 417 842 428 843 422 843 424 843 589 844 424 844 422 844 423 845 418 845 424 845 589 846 423 846 424 846 427 847 425 847 422 847 589 848 422 848 425 848 428 849 427 849 422 849 586 850 425 850 384 850 586 851 426 851 425 851 589 852 425 852 426 852 586 853 384 853 387 853 382 854 427 854 428 854 431 855 382 855 428 855 432 856 431 856 428 856 435 857 382 857 431 857 429 858 430 858 382 858 434 859 429 859 382 859 435 860 434 860 382 860 435 861 431 861 432 861 433 862 435 862 432 862 396 863 395 863 398 863 433 864 406 864 305 864 381 865 430 865 429 865 386 866 429 866 434 866 386 867 381 867 429 867 386 868 434 868 435 868 388 869 390 869 436 869 388 870 436 870 381 870 388 871 381 871 386 871 586 872 387 872 386 872 298 873 440 873 386 873 588 874 386 874 440 874 437 875 586 875 386 875 437 876 386 876 588 876 438 877 443 877 442 877 607 878 442 878 443 878 439 879 438 879 442 879 440 880 439 880 442 880 608 881 440 881 442 881 441 882 442 882 607 882 612 883 608 883 442 883 609 884 612 884 442 884 441 885 609 885 442 885 607 886 443 886 438 886 446 887 438 887 439 887 446 888 607 888 438 888 440 889 448 889 439 889 444 890 439 890 448 890 445 891 439 891 444 891 446 892 439 892 445 892 474 893 447 893 448 893 452 894 448 894 447 894 474 895 448 895 440 895 452 896 444 896 448 896 474 897 450 897 447 897 449 898 447 898 450 898 449 899 451 899 447 899 452 900 447 900 451 900 455 901 456 901 450 901 453 902 450 902 456 902 454 903 455 903 450 903 474 904 454 904 450 904 449 905 450 905 453 905 470 906 460 906 456 906 457 907 456 907 460 907 473 908 470 908 456 908 455 909 473 909 456 909 453 910 456 910 457 910 462 911 461 911 460 911 399 912 460 912 461 912 458 913 462 913 460 913 469 914 458 914 460 914 459 915 469 915 460 915 470 916 459 916 460 916 399 917 457 917 460 917 466 918 370 918 461 918 463 919 466 919 461 919 462 920 463 920 461 920 464 921 474 921 440 921 475 922 464 922 440 922 298 923 475 923 440 923 608 924 588 924 440 924 659 925 370 925 466 925 465 926 466 926 463 926 659 927 466 927 465 927 683 928 463 928 462 928 465 929 463 929 683 929 467 930 462 930 458 930 467 931 683 931 462 931 467 932 458 932 469 932 470 933 469 933 459 933 471 934 469 934 470 934 468 935 467 935 469 935 468 936 469 936 471 936 472 937 470 937 473 937 721 938 471 938 470 938 472 939 721 939 470 939 472 940 473 940 455 940 725 941 455 941 454 941 725 942 472 942 455 942 725 943 454 943 474 943 725 944 474 944 464 944 725 945 464 945 475 945 297 946 475 946 298 946 640 947 475 947 297 947 724 948 725 948 475 948 476 949 724 949 475 949 476 950 475 950 477 950 640 951 477 951 475 951 533 952 488 952 478 952 533 953 478 953 520 953 479 954 289 954 480 954 481 955 285 955 289 955 479 956 481 956 289 956 482 957 480 957 301 957 479 958 480 958 510 958 483 959 510 959 480 959 482 960 483 960 480 960 484 961 301 961 485 961 484 962 482 962 301 962 526 963 485 963 302 963 526 964 484 964 485 964 528 965 302 965 299 965 528 966 526 966 302 966 531 967 299 967 486 967 531 968 528 968 299 968 489 969 486 969 487 969 532 970 531 970 486 970 489 971 532 971 486 971 489 972 487 972 490 972 533 973 490 973 488 973 533 974 489 974 490 974 284 975 493 975 491 975 492 976 491 976 493 976 283 977 284 977 491 977 505 978 283 978 491 978 492 979 505 979 491 979 492 980 493 980 494 980 507 981 494 981 286 981 507 982 492 982 494 982 495 983 286 983 285 983 495 984 507 984 286 984 481 985 495 985 285 985 503 986 502 986 283 986 496 987 283 987 502 987 505 988 503 988 283 988 503 989 497 989 502 989 598 990 502 990 497 990 498 991 499 991 502 991 500 992 502 992 499 992 501 993 498 993 502 993 500 994 496 994 502 994 501 995 502 995 598 995 598 996 497 996 503 996 517 997 503 997 505 997 517 998 504 998 503 998 598 999 503 999 504 999 516 1000 505 1000 492 1000 516 1001 517 1001 505 1001 506 1002 492 1002 507 1002 506 1003 516 1003 492 1003 518 1004 507 1004 495 1004 508 1005 506 1005 507 1005 518 1006 508 1006 507 1006 511 1007 495 1007 481 1007 509 1008 518 1008 495 1008 511 1009 509 1009 495 1009 479 1010 510 1010 481 1010 511 1011 481 1011 510 1011 483 1012 511 1012 510 1012 501 1013 499 1013 498 1013 513 1014 500 1014 499 1014 600 1015 499 1015 501 1015 512 1016 499 1016 600 1016 513 1017 499 1017 512 1017 517 1018 514 1018 504 1018 598 1019 504 1019 514 1019 508 1020 514 1020 517 1020 572 1021 514 1021 508 1021 575 1022 514 1022 572 1022 515 1023 514 1023 575 1023 598 1024 514 1024 515 1024 506 1025 517 1025 516 1025 508 1026 517 1026 506 1026 509 1027 508 1027 518 1027 519 1028 508 1028 509 1028 572 1029 508 1029 519 1029 519 1030 509 1030 511 1030 519 1031 511 1031 483 1031 519 1032 483 1032 482 1032 533 1033 520 1033 522 1033 521 1034 533 1034 522 1034 521 1035 522 1035 523 1035 525 1036 482 1036 484 1036 524 1037 482 1037 525 1037 519 1038 482 1038 524 1038 527 1039 484 1039 526 1039 525 1040 484 1040 527 1040 529 1041 526 1041 528 1041 527 1042 526 1042 529 1042 529 1043 528 1043 531 1043 530 1044 531 1044 532 1044 529 1045 531 1045 530 1045 530 1046 532 1046 489 1046 552 1047 489 1047 533 1047 530 1048 489 1048 552 1048 552 1049 533 1049 521 1049 556 1050 534 1050 535 1050 536 1051 535 1051 534 1051 557 1052 556 1052 535 1052 560 1053 557 1053 535 1053 537 1054 560 1054 535 1054 536 1055 537 1055 535 1055 556 1056 538 1056 534 1056 781 1057 534 1057 538 1057 777 1058 536 1058 534 1058 781 1059 777 1059 534 1059 554 1060 539 1060 538 1060 727 1061 538 1061 539 1061 555 1062 554 1062 538 1062 556 1063 555 1063 538 1063 727 1064 781 1064 538 1064 553 1065 540 1065 539 1065 541 1066 539 1066 540 1066 554 1067 553 1067 539 1067 542 1068 727 1068 539 1068 541 1069 542 1069 539 1069 543 1070 544 1070 540 1070 541 1071 540 1071 544 1071 553 1072 543 1072 540 1072 543 1073 547 1073 544 1073 545 1074 544 1074 547 1074 545 1075 541 1075 544 1075 551 1076 546 1076 547 1076 545 1077 547 1077 546 1077 543 1078 551 1078 547 1078 551 1079 548 1079 546 1079 696 1080 546 1080 548 1080 696 1081 545 1081 546 1081 549 1082 550 1082 548 1082 696 1083 548 1083 550 1083 551 1084 549 1084 548 1084 549 1085 332 1085 550 1085 648 1086 550 1086 332 1086 696 1087 550 1087 648 1087 648 1088 332 1088 331 1088 369 1089 549 1089 551 1089 521 1090 551 1090 543 1090 523 1091 369 1091 551 1091 521 1092 523 1092 551 1092 552 1093 543 1093 553 1093 552 1094 521 1094 543 1094 530 1095 553 1095 554 1095 530 1096 552 1096 553 1096 529 1097 554 1097 555 1097 529 1098 530 1098 554 1098 527 1099 555 1099 556 1099 527 1100 529 1100 555 1100 557 1101 558 1101 556 1101 525 1102 556 1102 558 1102 525 1103 527 1103 556 1103 560 1104 558 1104 557 1104 559 1105 525 1105 558 1105 574 1106 559 1106 558 1106 574 1107 558 1107 560 1107 559 1108 524 1108 525 1108 572 1109 524 1109 559 1109 572 1110 519 1110 524 1110 572 1111 559 1111 574 1111 577 1112 561 1112 562 1112 563 1113 562 1113 561 1113 515 1114 577 1114 562 1114 515 1115 562 1115 592 1115 646 1116 592 1116 562 1116 563 1117 646 1117 562 1117 577 1118 564 1118 561 1118 563 1119 561 1119 564 1119 577 1120 565 1120 564 1120 563 1121 564 1121 565 1121 577 1122 566 1122 565 1122 563 1123 565 1123 566 1123 577 1124 567 1124 566 1124 563 1125 566 1125 567 1125 577 1126 568 1126 567 1126 563 1127 567 1127 568 1127 577 1128 569 1128 568 1128 563 1129 568 1129 569 1129 577 1130 560 1130 569 1130 578 1131 569 1131 560 1131 536 1132 569 1132 578 1132 563 1133 569 1133 536 1133 577 1134 574 1134 560 1134 570 1135 578 1135 560 1135 571 1136 570 1136 560 1136 579 1137 571 1137 560 1137 537 1138 579 1138 560 1138 576 1139 572 1139 574 1139 573 1140 576 1140 574 1140 577 1141 573 1141 574 1141 576 1142 575 1142 572 1142 515 1143 575 1143 576 1143 515 1144 576 1144 573 1144 515 1145 573 1145 577 1145 536 1146 578 1146 570 1146 536 1147 570 1147 571 1147 536 1148 571 1148 579 1148 536 1149 579 1149 537 1149 586 1150 580 1150 426 1150 591 1151 426 1151 580 1151 591 1152 589 1152 426 1152 586 1153 581 1153 580 1153 591 1154 580 1154 581 1154 586 1155 582 1155 581 1155 583 1156 581 1156 582 1156 583 1157 591 1157 581 1157 586 1158 584 1158 582 1158 603 1159 582 1159 584 1159 583 1160 582 1160 601 1160 603 1161 601 1161 582 1161 586 1162 587 1162 584 1162 585 1163 584 1163 587 1163 585 1164 603 1164 584 1164 437 1165 587 1165 586 1165 585 1166 587 1166 604 1166 605 1167 604 1167 587 1167 437 1168 588 1168 587 1168 605 1169 587 1169 588 1169 501 1170 418 1170 423 1170 501 1171 598 1171 418 1171 288 1172 287 1172 780 1172 599 1173 423 1173 589 1173 600 1174 501 1174 423 1174 599 1175 600 1175 423 1175 590 1176 599 1176 589 1176 591 1177 590 1177 589 1177 515 1178 592 1178 420 1178 634 1179 420 1179 592 1179 593 1180 515 1180 420 1180 634 1181 419 1181 420 1181 594 1182 634 1182 592 1182 595 1183 594 1183 592 1183 645 1184 595 1184 592 1184 646 1185 645 1185 592 1185 596 1186 598 1186 515 1186 597 1187 596 1187 515 1187 593 1188 597 1188 515 1188 597 1189 598 1189 596 1189 597 1190 418 1190 598 1190 773 1191 623 1191 545 1191 602 1192 600 1192 599 1192 602 1193 512 1193 600 1193 602 1194 599 1194 590 1194 602 1195 590 1195 591 1195 583 1196 601 1196 591 1196 602 1197 591 1197 601 1197 608 1198 601 1198 603 1198 602 1199 601 1199 608 1199 585 1200 604 1200 603 1200 608 1201 603 1201 604 1201 608 1202 604 1202 605 1202 608 1203 605 1203 588 1203 606 1204 444 1204 451 1204 452 1205 451 1205 444 1205 606 1206 445 1206 444 1206 606 1207 607 1207 445 1207 446 1208 445 1208 607 1208 441 1209 607 1209 606 1209 297 1210 608 1210 612 1210 297 1211 602 1211 608 1211 615 1212 612 1212 609 1212 637 1213 612 1213 615 1213 621 1214 612 1214 610 1214 619 1215 610 1215 612 1215 627 1216 612 1216 621 1216 611 1217 612 1217 627 1217 635 1218 612 1218 611 1218 613 1219 612 1219 635 1219 619 1220 612 1220 638 1220 637 1221 638 1221 612 1221 613 1222 297 1222 612 1222 441 1223 614 1223 609 1223 615 1224 609 1224 614 1224 637 1225 615 1225 414 1225 616 1226 414 1226 618 1226 637 1227 414 1227 616 1227 619 1228 618 1228 617 1228 638 1229 616 1229 618 1229 619 1230 638 1230 618 1230 620 1231 617 1231 415 1231 619 1232 617 1232 620 1232 610 1233 415 1233 622 1233 610 1234 620 1234 415 1234 621 1235 622 1235 416 1235 621 1236 610 1236 622 1236 623 1237 541 1237 545 1237 635 1238 628 1238 625 1238 624 1239 635 1239 625 1239 421 1240 542 1240 541 1240 624 1241 625 1241 626 1241 629 1242 626 1242 419 1242 624 1243 626 1243 629 1243 631 1244 629 1244 419 1244 634 1245 631 1245 419 1245 627 1246 416 1246 628 1246 627 1247 621 1247 416 1247 611 1248 627 1248 628 1248 635 1249 611 1249 628 1249 624 1250 629 1250 631 1250 641 1251 631 1251 634 1251 630 1252 624 1252 631 1252 642 1253 630 1253 631 1253 641 1254 642 1254 631 1254 632 1255 641 1255 634 1255 633 1256 632 1256 634 1256 594 1257 633 1257 634 1257 619 1258 620 1258 610 1258 636 1259 635 1259 624 1259 636 1260 613 1260 635 1260 630 1261 636 1261 624 1261 637 1262 616 1262 638 1262 513 1263 512 1263 602 1263 513 1264 602 1264 297 1264 640 1265 297 1265 613 1265 636 1266 639 1266 613 1266 477 1267 613 1267 639 1267 640 1268 613 1268 477 1268 477 1269 639 1269 636 1269 477 1270 636 1270 630 1270 758 1271 630 1271 642 1271 476 1272 630 1272 758 1272 476 1273 477 1273 630 1273 643 1274 642 1274 641 1274 758 1275 642 1275 643 1275 643 1276 641 1276 632 1276 644 1277 632 1277 633 1277 644 1278 643 1278 632 1278 761 1279 633 1279 594 1279 644 1280 633 1280 761 1280 767 1281 594 1281 595 1281 767 1282 761 1282 594 1282 767 1283 595 1283 645 1283 778 1284 645 1284 646 1284 778 1285 767 1285 645 1285 563 1286 778 1286 646 1286 648 1287 331 1287 649 1287 687 1288 649 1288 647 1288 695 1289 649 1289 687 1289 695 1290 648 1290 649 1290 665 1291 647 1291 339 1291 686 1292 647 1292 665 1292 687 1293 647 1293 686 1293 650 1294 339 1294 653 1294 665 1295 339 1295 650 1295 651 1296 653 1296 652 1296 650 1297 653 1297 651 1297 669 1298 652 1298 655 1298 651 1299 652 1299 669 1299 656 1300 655 1300 654 1300 669 1301 655 1301 656 1301 675 1302 654 1302 347 1302 656 1303 654 1303 675 1303 657 1304 660 1304 347 1304 658 1305 347 1305 660 1305 675 1306 347 1306 658 1306 659 1307 660 1307 657 1307 661 1308 658 1308 660 1308 465 1309 661 1309 660 1309 659 1310 465 1310 660 1310 665 1311 664 1311 662 1311 666 1312 662 1312 664 1312 686 1313 665 1313 662 1313 697 1314 686 1314 662 1314 663 1315 697 1315 662 1315 666 1316 663 1316 662 1316 650 1317 668 1317 664 1317 667 1318 664 1318 668 1318 665 1319 650 1319 664 1319 666 1320 664 1320 698 1320 667 1321 698 1321 664 1321 651 1322 672 1322 668 1322 702 1323 668 1323 672 1323 650 1324 651 1324 668 1324 703 1325 667 1325 668 1325 702 1326 703 1326 668 1326 669 1327 670 1327 672 1327 671 1328 672 1328 670 1328 651 1329 669 1329 672 1329 671 1330 702 1330 672 1330 656 1331 674 1331 670 1331 673 1332 670 1332 674 1332 669 1333 656 1333 670 1333 673 1334 671 1334 670 1334 675 1335 676 1335 674 1335 677 1336 674 1336 676 1336 656 1337 675 1337 674 1337 677 1338 673 1338 674 1338 675 1339 682 1339 676 1339 681 1340 676 1340 682 1340 681 1341 677 1341 676 1341 678 1342 679 1342 682 1342 706 1343 682 1343 679 1343 680 1344 678 1344 682 1344 658 1345 680 1345 682 1345 675 1346 658 1346 682 1346 706 1347 681 1347 682 1347 688 1348 679 1348 678 1348 689 1349 679 1349 688 1349 689 1350 706 1350 679 1350 683 1351 678 1351 680 1351 684 1352 688 1352 678 1352 683 1353 684 1353 678 1353 661 1354 680 1354 658 1354 683 1355 680 1355 661 1355 685 1356 687 1356 686 1356 697 1357 685 1357 686 1357 685 1358 695 1358 687 1358 465 1359 683 1359 661 1359 684 1360 691 1360 688 1360 707 1361 688 1361 691 1361 707 1362 689 1362 688 1362 684 1363 690 1363 691 1363 692 1364 691 1364 690 1364 707 1365 691 1365 692 1365 694 1366 690 1366 684 1366 692 1367 690 1367 694 1367 693 1368 684 1368 683 1368 710 1369 684 1369 693 1369 694 1370 684 1370 710 1370 467 1371 693 1371 683 1371 468 1372 693 1372 467 1372 710 1373 693 1373 468 1373 696 1374 648 1374 695 1374 696 1375 695 1375 685 1375 744 1376 685 1376 697 1376 773 1377 685 1377 744 1377 773 1378 696 1378 685 1378 700 1379 697 1379 663 1379 744 1380 697 1380 700 1380 666 1381 701 1381 663 1381 700 1382 663 1382 701 1382 698 1383 699 1383 701 1383 733 1384 701 1384 699 1384 666 1385 698 1385 701 1385 700 1386 701 1386 733 1386 698 1387 704 1387 699 1387 709 1388 699 1388 704 1388 733 1389 699 1389 709 1389 667 1390 704 1390 698 1390 703 1391 704 1391 667 1391 702 1392 704 1392 703 1392 671 1393 704 1393 702 1393 709 1394 704 1394 671 1394 709 1395 671 1395 673 1395 709 1396 673 1396 677 1396 709 1397 677 1397 681 1397 709 1398 681 1398 706 1398 705 1399 708 1399 706 1399 709 1400 706 1400 708 1400 689 1401 705 1401 706 1401 707 1402 708 1402 705 1402 716 1403 708 1403 707 1403 722 1404 708 1404 716 1404 722 1405 709 1405 708 1405 707 1406 705 1406 689 1406 468 1407 471 1407 712 1407 713 1408 712 1408 471 1408 710 1409 468 1409 712 1409 711 1410 710 1410 712 1410 732 1411 711 1411 712 1411 732 1412 712 1412 713 1412 714 1413 471 1413 721 1413 713 1414 471 1414 714 1414 711 1415 694 1415 710 1415 718 1416 692 1416 694 1416 719 1417 718 1417 694 1417 711 1418 719 1418 694 1418 715 1419 707 1419 692 1419 718 1420 715 1420 692 1420 715 1421 716 1421 707 1421 729 1422 716 1422 715 1422 729 1423 722 1423 716 1423 729 1424 715 1424 718 1424 717 1425 718 1425 719 1425 717 1426 729 1426 718 1426 720 1427 719 1427 711 1427 720 1428 717 1428 719 1428 732 1429 720 1429 711 1429 725 1430 721 1430 472 1430 725 1431 714 1431 721 1431 733 1432 709 1432 722 1432 736 1433 722 1433 729 1433 733 1434 722 1434 736 1434 732 1435 713 1435 714 1435 723 1436 732 1436 714 1436 724 1437 714 1437 725 1437 724 1438 723 1438 714 1438 739 1439 729 1439 717 1439 774 1440 726 1440 727 1440 728 1441 736 1441 729 1441 738 1442 728 1442 729 1442 739 1443 738 1443 729 1443 739 1444 717 1444 720 1444 730 1445 720 1445 732 1445 730 1446 739 1446 720 1446 731 1447 730 1447 732 1447 723 1448 731 1448 732 1448 774 1449 727 1449 542 1449 749 1450 733 1450 736 1450 734 1451 749 1451 736 1451 750 1452 734 1452 736 1452 735 1453 750 1453 736 1453 737 1454 736 1454 728 1454 737 1455 735 1455 736 1455 737 1456 728 1456 738 1456 752 1457 738 1457 739 1457 752 1458 737 1458 738 1458 740 1459 739 1459 730 1459 740 1460 752 1460 739 1460 754 1461 730 1461 731 1461 754 1462 740 1462 730 1462 756 1463 731 1463 723 1463 756 1464 754 1464 731 1464 755 1465 723 1465 724 1465 755 1466 756 1466 723 1466 758 1467 755 1467 724 1467 476 1468 758 1468 724 1468 741 1469 700 1469 733 1469 742 1470 741 1470 733 1470 743 1471 742 1471 733 1471 746 1472 743 1472 733 1472 749 1473 746 1473 733 1473 744 1474 700 1474 741 1474 744 1475 741 1475 742 1475 745 1476 742 1476 743 1476 745 1477 744 1477 742 1477 772 1478 743 1478 746 1478 772 1479 745 1479 743 1479 748 1480 746 1480 749 1480 747 1481 772 1481 746 1481 748 1482 747 1482 746 1482 776 1483 749 1483 734 1483 776 1484 748 1484 749 1484 775 1485 734 1485 750 1485 775 1486 776 1486 734 1486 751 1487 750 1487 735 1487 751 1488 775 1488 750 1488 753 1489 735 1489 737 1489 751 1490 735 1490 753 1490 753 1491 737 1491 752 1491 765 1492 752 1492 740 1492 764 1493 752 1493 765 1493 753 1494 752 1494 764 1494 763 1495 740 1495 754 1495 765 1496 740 1496 763 1496 763 1497 754 1497 756 1497 755 1498 757 1498 756 1498 759 1499 756 1499 757 1499 763 1500 756 1500 759 1500 758 1501 757 1501 755 1501 759 1502 757 1502 643 1502 758 1503 643 1503 757 1503 760 1504 759 1504 643 1504 644 1505 760 1505 643 1505 761 1506 763 1506 759 1506 762 1507 761 1507 759 1507 760 1508 762 1508 759 1508 770 1509 765 1509 763 1509 771 1510 770 1510 763 1510 761 1511 771 1511 763 1511 768 1512 764 1512 765 1512 770 1513 768 1513 765 1513 769 1514 766 1514 764 1514 753 1515 764 1515 766 1515 768 1516 769 1516 764 1516 751 1517 766 1517 769 1517 751 1518 753 1518 766 1518 767 1519 769 1519 768 1519 780 1520 751 1520 769 1520 288 1521 780 1521 769 1521 767 1522 288 1522 769 1522 767 1523 768 1523 770 1523 767 1524 770 1524 771 1524 767 1525 771 1525 761 1525 644 1526 761 1526 762 1526 644 1527 762 1527 760 1527 773 1528 744 1528 745 1528 623 1529 745 1529 772 1529 773 1530 745 1530 623 1530 421 1531 772 1531 747 1531 623 1532 772 1532 421 1532 421 1533 747 1533 748 1533 774 1534 748 1534 776 1534 421 1535 748 1535 774 1535 726 1536 776 1536 775 1536 774 1537 776 1537 726 1537 780 1538 775 1538 751 1538 726 1539 775 1539 780 1539 563 1540 536 1540 777 1540 779 1541 777 1541 781 1541 778 1542 777 1542 779 1542 563 1543 777 1543 778 1543 726 1544 781 1544 727 1544 287 1545 779 1545 781 1545 780 1546 287 1546 781 1546 726 1547 780 1547 781 1547

-
-
-
-
- - - - - - - - - - - - - - -
diff --git a/collada_urdf/test/ir663.dae b/collada_urdf/test/ir663.dae deleted file mode 100644 index 08a4be1..0000000 --- a/collada_urdf/test/ir663.dae +++ /dev/null @@ -1,5517 +0,0 @@ - - - - - CPFCatiaPlugin - - 2009-02-17T14:09:46Z - 2009-02-17T14:09:46Z - - Z_UP - - - - - - - - - - - - - - - - - - - - - - - - 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 - 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 - 0 0 1 0 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 - 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 0 0 -444.046 0 1 0 -223.999 0 0 1 602.712 0 0 0 1 - 1 -0 0 444.046 -0 1 -0 223.999 0 -0 1 -602.712 -0 0 -0 1 - 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 - 0 0 1 0 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 - 1 0 0 -444.046 0 1 0 -223.999 0 0 1 602.712 0 0 0 1 - 1 0 0 - 1 -0 0 444.046 -0 1 -0 223.999 0 -0 1 -602.712 -0 0 -0 1 - 1 0 0 -444.046 0 1 0 -223.999 0 0 1 602.712 0 0 0 1 - - - - - - - - - - - - - - 1 0 0 -444.046 0 1 0 223.999 0 0 1 602.712 0 0 0 1 - 1 -0 0 444.046 -0 1 -0 -223.999 0 -0 1 -602.712 -0 0 -0 1 - 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 - 0 0 1 0 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 - 1 0 0 -444.046 0 1 0 223.999 0 0 1 602.712 0 0 0 1 - 1 0 0 - 1 -0 0 444.046 -0 1 -0 -223.999 0 -0 1 -602.712 -0 0 -0 1 - 1 0 0 -444.046 0 1 0 223.999 0 0 1 602.712 0 0 0 1 - - - - - - - - - - - - - - 1 0 1.3062e-006 0 0 1 0 0 -1.3062e-006 0 1 892 0 0 0 1 - 1 -0 -1.3062e-006 0.00116513 -0 1 -0 0 1.3062e-006 -0 1 -892 -0 0 -0 1 - 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 - 0 0 1 0 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 - 1 0 1.3062e-006 0 0 1 0 0 -1.3062e-006 0 1 892 0 0 0 1 - 0 1 0 0 - 0 1 0 -62.6141 - 1 -0 -1.3062e-006 0.00116513 -0 1 -0 0 1.3062e-006 -0 1 -892 -0 0 -0 1 - 1 0 1.3062e-006 0 0 1 0 0 -1.3062e-006 0 1 892 0 0 0 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0.944562 0 0.328333 0 0 1 0 0 -0.328333 0 0.944562 892 0 0 0 1 - 0.944562 -0 -0.328333 292.873 -0 1 -0 0 0.328333 -0 0.944562 -842.549 -0 0 -0 1 - 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 - 0 0 1 0 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 - 1 0 1.3062e-006 0 0 1 0 0 -1.3062e-006 0 1 892 0 0 0 1 - 0 1 0 0 - 0 1 0 -62.6141 - 1 -0 -1.3062e-006 0.00116513 -0 1 -0 0 1.3062e-006 -0 1 -892 -0 0 -0 1 - 0.944562 0 0.328333 0 0 1 0 0 -0.328333 0 0.944562 892 0 0 0 1 - 0 1 0 0 - 0 1 0 12.9465 - 0.944562 -0 -0.328333 292.873 -0 1 -0 0 0.328333 -0 0.944562 -842.549 -0 0 -0 1 - 0.944562 0 0.328333 0 0 1 0 0 -0.328333 0 0.944562 892 0 0 0 1 - - - - - - - - - - - - - - - - 1 0 -2.87231e-007 0.00137151 0 1 0 0 2.87231e-007 0 1 1942 0 0 0 1 - 1 -0 2.87231e-007 -0.00192931 -0 1 -0 0 -2.87231e-007 -0 1 -1942 -0 0 -0 1 - 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 - 0 0 1 0 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 - 1 0 1.3062e-006 0 0 1 0 0 -1.3062e-006 0 1 892 0 0 0 1 - 0 1 0 0 - 0 1 0 -62.6141 - 1 -0 -1.3062e-006 0.00116513 -0 1 -0 0 1.3062e-006 -0 1 -892 -0 0 -0 1 - 1 0 -2.87231e-007 0.00137151 0 1 0 0 2.87231e-007 0 1 1942 0 0 0 1 - 0 1 0 0 - 0 1 0 90.0001 - 1 -0 2.87231e-007 -0.00192931 -0 1 -0 0 -2.87231e-007 -0 1 -1942 -0 0 -0 1 - 1 0 -2.87231e-007 0.00137151 0 1 0 0 2.87231e-007 0 1 1942 0 0 0 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 0 -2.87231e-007 1760 0 1 0 0 2.87231e-007 0 1 1942 0 0 0 1 - 1 -0 2.87231e-007 -1760 -0 1 -0 0 -2.87231e-007 -0 1 -1942 -0 0 -0 1 - 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 - 0 0 1 0 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 - 1 0 1.3062e-006 0 0 1 0 0 -1.3062e-006 0 1 892 0 0 0 1 - 0 1 0 0 - 0 1 0 -62.6141 - 1 -0 -1.3062e-006 0.00116513 -0 1 -0 0 1.3062e-006 -0 1 -892 -0 0 -0 1 - 1 0 -2.87231e-007 0.00137151 0 1 0 0 2.87231e-007 0 1 1942 0 0 0 1 - 0 1 0 0 - 0 1 0 90.0001 - 1 -0 2.87231e-007 -0.00192931 -0 1 -0 0 -2.87231e-007 -0 1 -1942 -0 0 -0 1 - 1 0 -2.87231e-007 1760 0 1 0 0 2.87231e-007 0 1 1942 0 0 0 1 - -1 0 0 0 - 1 -0 2.87231e-007 -1760 -0 1 -0 0 -2.87231e-007 -0 1 -1942 -0 0 -0 1 - 1 0 -2.87231e-007 1760 0 1 0 0 2.87231e-007 0 1 1942 0 0 0 1 - - - - - - - - - - - - - - - - 0.866025 0 0.5 1760 0 1 0 0 -0.5 0 0.866025 1942 0 0 0 1 - 0.866025 -0 -0.5 -553.206 -0 1 -0 0 0.5 -0 0.866025 -2561.82 -0 0 -0 1 - 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 - 0 0 1 0 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 - 1 0 1.3062e-006 0 0 1 0 0 -1.3062e-006 0 1 892 0 0 0 1 - 0 1 0 0 - 0 1 0 -62.6141 - 1 -0 -1.3062e-006 0.00116513 -0 1 -0 0 1.3062e-006 -0 1 -892 -0 0 -0 1 - 1 0 -2.87231e-007 0.00137151 0 1 0 0 2.87231e-007 0 1 1942 0 0 0 1 - 0 1 0 0 - 0 1 0 90.0001 - 1 -0 2.87231e-007 -0.00192931 -0 1 -0 0 -2.87231e-007 -0 1 -1942 -0 0 -0 1 - 1 0 -2.87231e-007 1760 0 1 0 0 2.87231e-007 0 1 1942 0 0 0 1 - -1 0 0 0 - 1 -0 2.87231e-007 -1760 -0 1 -0 0 -2.87231e-007 -0 1 -1942 -0 0 -0 1 - 0.866025 0 0.5 1760 0 1 0 0 -0.5 0 0.866025 1942 0 0 0 1 - 1 0 0 0 - 0.866025 -0 -0.5 -553.206 -0 1 -0 0 0.5 -0 0.866025 -2561.82 -0 0 -0 1 - 0.866025 0 0.5 1760 0 1 0 0 -0.5 0 0.866025 1942 0 0 0 1 - - - - - - - - - - - - - - - - - - 0.866025 0 -0.5 1760 0 1 0 0 0.5 0 0.866025 1942 0 0 0 1 - 0.866025 -0 0.5 -2495.21 -0 1 -0 0 -0.5 -0 0.866025 -801.821 -0 0 -0 1 - 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 - 0 0 1 0 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 - 1 0 1.3062e-006 0 0 1 0 0 -1.3062e-006 0 1 892 0 0 0 1 - 0 1 0 0 - 0 1 0 -62.6141 - 1 -0 -1.3062e-006 0.00116513 -0 1 -0 0 1.3062e-006 -0 1 -892 -0 0 -0 1 - 1 0 -2.87231e-007 0.00137151 0 1 0 0 2.87231e-007 0 1 1942 0 0 0 1 - 0 1 0 0 - 0 1 0 90.0001 - 1 -0 2.87231e-007 -0.00192931 -0 1 -0 0 -2.87231e-007 -0 1 -1942 -0 0 -0 1 - 1 0 -2.87231e-007 1760 0 1 0 0 2.87231e-007 0 1 1942 0 0 0 1 - -1 0 0 0 - 1 -0 2.87231e-007 -1760 -0 1 -0 0 -2.87231e-007 -0 1 -1942 -0 0 -0 1 - 0.866025 0 0.5 1760 0 1 0 0 -0.5 0 0.866025 1942 0 0 0 1 - 1 0 0 0 - 0.866025 -0 -0.5 -553.206 -0 1 -0 0 0.5 -0 0.866025 -2561.82 -0 0 -0 1 - 0.866025 0 -0.5 1760 0 1 0 0 0.5 0 0.866025 1942 0 0 0 1 - -1 0 0 0 - 0.866025 -0 0.5 -2495.21 -0 1 -0 0 -0.5 -0 0.866025 -801.821 -0 0 -0 1 - 0.866025 0 -0.5 1760 0 1 0 0 0.5 0 0.866025 1942 0 0 0 1 - - - - - - - - - - - - - - - - - - 1 0 2.74734e-007 1760 0 1 0 0 -2.74734e-007 0 1 1942 0 0 0 1 - 1 -0 -2.74734e-007 -1760 -0 1 -0 0 2.74734e-007 -0 1 -1942 -0 0 -0 1 - 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 - 0 0 1 0 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 - 1 0 1.3062e-006 0 0 1 0 0 -1.3062e-006 0 1 892 0 0 0 1 - 0 1 0 0 - 0 1 0 -62.6141 - 1 -0 -1.3062e-006 0.00116513 -0 1 -0 0 1.3062e-006 -0 1 -892 -0 0 -0 1 - 1 0 -2.87231e-007 0.00137151 0 1 0 0 2.87231e-007 0 1 1942 0 0 0 1 - 0 1 0 0 - 0 1 0 90.0001 - 1 -0 2.87231e-007 -0.00192931 -0 1 -0 0 -2.87231e-007 -0 1 -1942 -0 0 -0 1 - 1 0 -2.87231e-007 1760 0 1 0 0 2.87231e-007 0 1 1942 0 0 0 1 - -1 0 0 0 - 1 -0 2.87231e-007 -1760 -0 1 -0 0 -2.87231e-007 -0 1 -1942 -0 0 -0 1 - 0.866025 0 0.5 1760 0 1 0 0 -0.5 0 0.866025 1942 0 0 0 1 - 1 0 0 0 - 0.866025 -0 -0.5 -553.206 -0 1 -0 0 0.5 -0 0.866025 -2561.82 -0 0 -0 1 - 0.866025 0 -0.5 1760 0 1 0 0 0.5 0 0.866025 1942 0 0 0 1 - -1 0 0 0 - 0.866025 -0 0.5 -2495.21 -0 1 -0 0 -0.5 -0 0.866025 -801.821 -0 0 -0 1 - 1 0 2.74734e-007 1760 0 1 0 0 -2.74734e-007 0 1 1942 0 0 0 1 - 1 0 0 0 - 1 -0 -2.74734e-007 -1760 -0 1 -0 0 2.74734e-007 -0 1 -1942 -0 0 -0 1 - 1 0 2.74734e-007 1760 0 1 0 0 -2.74734e-007 0 1 1942 0 0 0 1 - - - - - - - - - - 0.99932 0 -0.0368738 400.001 0 1 0 0 0.0368738 0 0.99932 1942 0 0 0 1 - 0.99932 -0 0.0368738 -471.338 -0 1 -0 0 -0.0368738 -0 0.99932 -1925.93 -0 0 -0 1 - 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 - 0 0 1 0 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 - 1 0 1.3062e-006 0 0 1 0 0 -1.3062e-006 0 1 892 0 0 0 1 - 0 1 0 0 - 0 1 0 -62.6141 - 1 -0 -1.3062e-006 0.00116513 -0 1 -0 0 1.3062e-006 -0 1 -892 -0 0 -0 1 - 1 0 -2.87231e-007 0.00137151 0 1 0 0 2.87231e-007 0 1 1942 0 0 0 1 - 0 1 0 0 - 0 1 0 90.0001 - 1 -0 2.87231e-007 -0.00192931 -0 1 -0 0 -2.87231e-007 -0 1 -1942 -0 0 -0 1 - 0.99932 0 -0.0368738 400.001 0 1 0 0 0.0368738 0 0.99932 1942 0 0 0 1 - 0 1 0 0 - 0 1 0 92.1132 - 0.99932 -0 0.0368738 -471.338 -0 1 -0 0 -0.0368738 -0 0.99932 -1925.93 -0 0 -0 1 - 0.99932 0 -0.0368738 400.001 0 1 0 0 0.0368738 0 0.99932 1942 0 0 0 1 - - - - - - - - - - - - - - - - - - - 1 0 2.00674e-006 0.000751066 0 1 0 0 -2.00674e-006 0 1 1467 0 0 0 1 - 1 -0 -2.00674e-006 0.00219282 -0 1 -0 0 2.00674e-006 -0 1 -1467 -0 0 -0 1 - 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 - 0 0 1 0 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 - 1 0 1.3062e-006 0 0 1 0 0 -1.3062e-006 0 1 892 0 0 0 1 - 0 1 0 0 - 0 1 0 -62.6141 - 1 -0 -1.3062e-006 0.00116513 -0 1 -0 0 1.3062e-006 -0 1 -892 -0 0 -0 1 - 1 0 2.00674e-006 0.000751066 0 1 0 0 -2.00674e-006 0 1 1467 0 0 0 1 - 0 1 0 0 - 0 1 0 -4.33092e-005 - 1 -0 -2.00674e-006 0.00219282 -0 1 -0 0 2.00674e-006 -0 1 -1467 -0 0 -0 1 - 1 0 2.00674e-006 0.000751066 0 1 0 0 -2.00674e-006 0 1 1467 0 0 0 1 - - - - - - - - - - - - - - - - - 1 0 2.00674e-006 -6.16639e-005 0 1 0 0 -2.00674e-006 0 1 1062 0 0 0 1 - 1 -0 -2.00674e-006 0.00219282 -0 1 -0 0 2.00674e-006 -0 1 -1062 -0 0 -0 1 - 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 - 0 0 1 0 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 - 1 0 1.3062e-006 0 0 1 0 0 -1.3062e-006 0 1 892 0 0 0 1 - 0 1 0 0 - 0 1 0 -62.6141 - 1 -0 -1.3062e-006 0.00116513 -0 1 -0 0 1.3062e-006 -0 1 -892 -0 0 -0 1 - 1 0 2.00674e-006 0.000751066 0 1 0 0 -2.00674e-006 0 1 1467 0 0 0 1 - 0 1 0 0 - 0 1 0 -4.33092e-005 - 1 -0 -2.00674e-006 0.00219282 -0 1 -0 0 2.00674e-006 -0 1 -1467 -0 0 -0 1 - 1 0 2.00674e-006 -6.16639e-005 0 1 0 0 -2.00674e-006 0 1 1062 0 0 0 1 - 0 0 1 - 0 0 405 - 1 -0 -2.00674e-006 0.00219282 -0 1 -0 0 2.00674e-006 -0 1 -1062 -0 0 -0 1 - 1 0 2.00674e-006 -6.16639e-005 0 1 0 0 -2.00674e-006 0 1 1062 0 0 0 1 - - - - - - - - - - - - - - - 0.998284 0 -0.058559 -606.997 0 1 0 -60 0.058559 0 0.998284 1239 0 0 0 1 - 0.998284 -0 0.058559 533.401 -0 1 -0 60 -0.058559 -0 0.998284 -1272.42 -0 0 -0 1 - 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 - 0 0 1 0 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 - 0.998284 0 -0.058559 -606.997 0 1 0 -60 0.058559 0 0.998284 1239 0 0 0 1 - 0 1 0 0 - 0 1 0 33.1121 - 0.998284 -0 0.058559 533.401 -0 1 -0 60 -0.058559 -0 0.998284 -1272.42 -0 0 -0 1 - 0.998284 0 -0.058559 -606.997 0 1 0 -60 0.058559 0 0.998284 1239 0 0 0 1 - - - - - - - - - - - - - - - - - - - - 0.998284 0 -0.058559 -70.6719 0 1 0 -60 0.058559 0 0.998284 1270.46 0 0 0 1 - 0.998284 -0 0.058559 -3.84619 -0 1 -0 60 -0.058559 -0 0.998284 -1272.42 -0 0 -0 1 - 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 - 0 0 1 0 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 - 0.998284 0 -0.058559 -606.997 0 1 0 -60 0.058559 0 0.998284 1239 0 0 0 1 - 0 1 0 0 - 0 1 0 33.1121 - 0.998284 -0 0.058559 533.401 -0 1 -0 60 -0.058559 -0 0.998284 -1272.42 -0 0 -0 1 - 0.998284 0 -0.058559 -70.6719 0 1 0 -60 0.058559 0 0.998284 1270.46 0 0 0 1 - 1 0 0 - -537.247 -0 -0 - 0.998284 -0 0.058559 -3.84619 -0 1 -0 60 -0.058559 -0 0.998284 -1272.42 -0 0 -0 1 - 0.998284 0 -0.058559 -70.6719 0 1 0 -60 0.058559 0 0.998284 1270.46 0 0 0 1 - - - - - - - - - - 0.888604 0 -0.458675 -674.503 0 1 0 130 0.458675 0 0.888604 926.004 0 0 0 1 - 0.888604 -0 0.458675 174.631 -0 1 -0 -130 -0.458675 -0 0.888604 -1132.23 -0 0 -0 1 - 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 - 0 0 1 0 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 - 0.888604 0 -0.458675 -674.503 0 1 0 130 0.458675 0 0.888604 926.004 0 0 0 1 - 0 1 0 0 - 0 1 0 30.1876 - 0.888604 -0 0.458675 174.631 -0 1 -0 -130 -0.458675 -0 0.888604 -1132.23 -0 0 -0 1 - 0.888604 0 -0.458675 -674.503 0 1 0 130 0.458675 0 0.888604 926.004 0 0 0 1 - - - - - - - - - - - - - - - - - - - - 0.888604 0 -0.458675 -140.995 0 1 0 130 0.458675 0 0.888604 1201.39 0 0 0 1 - 0.888604 -0 0.458675 -425.758 -0 1 -0 -130 -0.458675 -0 0.888604 -1132.23 -0 0 -0 1 - 1 0 0 0 0 1 0 0 0 0 1 892 0 0 0 1 - 0 0 1 0 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -892 -0 0 -0 1 - 0.888604 0 -0.458675 -674.503 0 1 0 130 0.458675 0 0.888604 926.004 0 0 0 1 - 0 1 0 0 - 0 1 0 30.1876 - 0.888604 -0 0.458675 174.631 -0 1 -0 -130 -0.458675 -0 0.888604 -1132.23 -0 0 -0 1 - 0.888604 0 -0.458675 -140.995 0 1 0 130 0.458675 0 0.888604 1201.39 0 0 0 1 - 1 0 0 - -600.389 -0 -0 - 0.888604 -0 0.458675 -425.758 -0 1 -0 -130 -0.458675 -0 0.888604 -1132.23 -0 0 -0 1 - 0.888604 0 -0.458675 -140.995 0 1 0 130 0.458675 0 0.888604 1201.39 0 0 0 1 - - - - - - - - - - - - - - - - -705.027 -492.794 -85.0031 -492.908 -704.947 -85.0043 -492.908 -704.947 -35.0045 -705.027 -492.794 -35.0034 -841.474 -176.705 -85.0021 -705.027 -492.794 -85.0031 -705.027 -492.794 -35.0034 -841.474 -176.706 -35.0014 -841.474 -176.706 -35.0014 -705.027 -492.794 -35.0034 -492.908 -704.947 -35.0045 -176.847 -841.442 -35.0045 -53.0922 -717.709 -35.0042 -717.721 -52.9723 -35.0013 -841.474 -176.706 -35.0014 -717.721 -52.9723 -35.0013 -717.721 -52.9721 -85.0011 -841.474 -176.705 -85.0021 -53.0921 -717.708 -85.0038 -717.721 -52.9721 -85.0011 -717.721 -52.9723 -35.0013 -53.0922 -717.709 -35.0042 -717.721 -52.9721 -85.0011 -53.0921 -717.708 -85.0038 -176.847 -841.442 -85.0043 -492.908 -704.947 -85.0043 -705.027 -492.794 -85.0031 -841.474 -176.705 -85.0021 -492.908 -704.947 -85.0043 -176.847 -841.442 -85.0043 -176.847 -841.442 -35.0045 -492.908 -704.947 -35.0045 -176.847 -841.442 -35.0045 -176.847 -841.442 -85.0043 -53.0921 -717.708 -85.0038 -53.0922 -717.709 -35.0042 395 684.16 0 684.16 395 0 684.16 395 -35 395 684.16 -35 0 790 0 395 684.16 0 395 684.16 -35 0 790 -35 -395 684.16 0 0 790 0 0 790 -35 -395 684.16 -35 -684.16 395 0 -395 684.16 0 -395 684.16 -35 -684.16 395 -35 -790 0 0 -684.16 395 0 -684.16 395 -35 -790 0 -35 -790 0 -35 -684.16 -395 -35 -684.16 -395 0 -790 0 0 -395 -684.16 -35 0 -790 -35 0 -790 0 -395 -684.16 0 0 -790 -35 395 -684.16 -35 395 -684.16 0 0 -790 0 684.16 -395 -35 790 0 -35 790 0 0 684.16 -395 0 395 -684.16 -35 684.16 -395 -35 684.16 -395 0 395 -684.16 0 684.16 -395 -35 395 -684.16 -35 0 -790 -35 -395 -684.16 -35 -684.16 -395 -35 -790 0 -35 -684.16 395 -35 -395 684.16 -35 0 790 -35 395 684.16 -35 684.16 395 -35 790 0 -35 -684.16 -395 -35 -395 -684.16 -35 -395 -684.16 0 -684.16 -395 0 -684.16 -395 0 -395 -684.16 0 0 -790 0 395 -684.16 0 684.16 -395 0 790 0 0 684.16 395 0 395 684.16 0 0 790 0 -395 684.16 0 -684.16 395 0 -790 0 0 684.16 395 0 790 0 0 790 0 -35 684.16 395 -35 -841.474 176.705 -85.0021 -717.721 52.9721 -85.0011 -717.721 52.9723 -35.0013 -841.474 176.706 -35.0014 -705.027 492.794 -35.0034 -492.908 704.947 -35.0045 -492.908 704.947 -85.0043 -705.027 492.794 -85.0031 -841.474 176.706 -35.0014 -705.027 492.794 -35.0034 -705.027 492.794 -85.0031 -841.474 176.705 -85.0021 -841.474 176.705 -85.0021 -705.027 492.794 -85.0031 -492.908 704.947 -85.0043 -176.847 841.442 -85.0043 -53.0921 717.708 -85.0038 -717.721 52.9721 -85.0011 -492.908 704.947 -35.0045 -176.847 841.442 -35.0045 -176.847 841.442 -85.0043 -492.908 704.947 -85.0043 -717.721 52.9723 -35.0013 -53.0922 717.709 -35.0042 -176.847 841.442 -35.0045 -492.908 704.947 -35.0045 -705.027 492.794 -35.0034 -841.474 176.706 -35.0014 -53.0922 717.709 -35.0042 -717.721 52.9723 -35.0013 -717.721 52.9721 -85.0011 -53.0921 717.708 -85.0038 -53.0922 717.709 -35.0042 -53.0921 717.708 -85.0038 -176.847 841.442 -85.0043 -176.847 841.442 -35.0045 717.708 -53.0914 -35 52.9732 -717.718 -35.004 52.9732 -717.718 -85.0037 717.708 -53.0911 -84.9998 492.794 -705.025 -85.0035 176.707 -841.47 -85.0044 52.9732 -717.718 -85.0037 717.708 -53.0911 -84.9998 841.442 -176.845 -84.9998 704.944 -492.91 -85.0018 176.707 -841.471 -35.0037 176.707 -841.47 -85.0044 492.794 -705.025 -85.0035 492.794 -705.025 -35.0037 492.794 -705.025 -35.0037 492.794 -705.025 -85.0035 704.944 -492.91 -85.0018 704.944 -492.911 -35.002 704.944 -492.911 -35.002 704.944 -492.91 -85.0018 841.442 -176.845 -84.9998 841.442 -176.846 -35 841.442 -176.846 -35 841.442 -176.845 -84.9998 717.708 -53.0911 -84.9998 717.708 -53.0914 -35 841.442 -176.846 -35 717.708 -53.0914 -35 52.9732 -717.718 -35.004 176.707 -841.471 -35.0037 492.794 -705.025 -35.0037 704.944 -492.911 -35.002 176.707 -841.471 -35.0037 52.9732 -717.718 -35.004 52.9732 -717.718 -85.0037 176.707 -841.47 -85.0044 -622.009 -119.951 234.999 -622.008 119.951 234.999 -498.012 -119.959 234.998 -498.012 -119.959 234.998 -498.012 119.959 234.998 -498.012 119.959 234.998 -498.012 -119.959 299.998 -498.012 119.959 299.998 -622.009 -119.951 234.999 -622.008 -119.951 299.998 -622.008 -119.951 299.998 -622.008 119.951 234.999 -622.008 119.951 299.999 -622.008 119.951 299.999 -613.702 -119.951 330.999 -613.702 -119.951 330.999 -613.702 119.951 330.999 -613.702 119.951 330.999 -591.008 -119.951 353.692 -591.008 -119.951 353.692 -591.008 119.951 353.692 -591.008 119.951 353.692 -560.008 -119.951 361.999 -560.008 -119.951 361.999 -560.008 119.951 361.999 -560.008 119.951 361.999 -529.008 -119.951 353.692 -529.008 -119.951 353.692 -529.008 119.951 353.692 -529.008 119.951 353.692 -506.314 -119.951 330.999 -506.314 -119.951 330.999 -506.314 119.951 330.999 -506.314 119.951 330.999 -498.008 -119.951 234.999 -498.008 -119.951 234.999 -498.008 -119.951 234.999 -498.008 119.951 234.999 -498.008 119.951 234.999 -498.008 119.951 234.999 -498.008 119.951 299.999 -498.008 119.951 299.999 -498.008 -119.951 299.999 -498.008 -119.951 299.999 704.944 492.911 -35.002 492.794 705.025 -35.0037 176.707 841.471 -35.0037 52.9732 717.718 -35.004 717.708 53.0914 -35 841.442 176.846 -35 704.944 492.91 -85.0018 841.442 176.845 -84.9998 717.708 53.0911 -84.9998 52.9732 717.718 -85.0037 176.707 841.47 -85.0044 492.794 705.025 -85.0035 717.708 53.0911 -84.9998 52.9732 717.718 -85.0037 52.9732 717.718 -35.004 717.708 53.0914 -35 717.708 53.0914 -35 717.708 53.0911 -84.9998 841.442 176.845 -84.9998 841.442 176.846 -35 841.442 176.846 -35 841.442 176.845 -84.9998 704.944 492.91 -85.0018 704.944 492.911 -35.002 704.944 492.911 -35.002 704.944 492.91 -85.0018 492.794 705.025 -85.0035 492.794 705.025 -35.0037 492.794 705.025 -35.0037 492.794 705.025 -85.0035 176.707 841.47 -85.0044 176.707 841.471 -35.0037 176.707 841.471 -35.0037 176.707 841.47 -85.0044 52.9732 717.718 -85.0037 52.9732 717.718 -35.004 -690 0 0 -626.12 -289.952 234.997 -626.12 -289.952 234.997 -626.12 -289.952 234.997 -626.12 -289.951 -0.001953 -626.12 -289.951 -0.001953 -626.12 289.951 -0.001953 -626.12 289.951 -0.001953 -620.36 -289.951 0 -620.36 -289.951 0 -620.36 289.951 0 -620.36 289.951 0 -597.558 -345 0 -597.558 345 0 -539.873 289.955 235 -539.873 289.955 235 -539.873 289.955 235 -487.904 -487.904 0 -487.904 487.904 0 -345 -597.558 0 -345 597.558 0 -178.585 -666.489 0 -178.585 666.489 0 -159.174 594.044 235 -159.174 594.044 235 0 -690 0 0 -615 235 0 -615 235 0 690 0 178.585 -666.489 0 178.585 666.489 0 345 -597.558 0 345 597.558 0 434.871 434.871 235 434.871 434.871 235 487.904 -487.904 0 487.904 487.904 0 532.606 -307.5 235 532.606 -307.5 235 594.044 159.174 235 594.044 159.174 235 597.557 -345 0 597.557 345 0 666.489 -178.585 0 666.489 178.585 0 690 0 0 -690.004 -0.057995 234.999 -626.12 289.952 234.997 -626.12 289.952 234.997 -539.873 -289.955 235 -539.873 -289.955 235 -532.606 -307.5 235 -532.606 307.5 235 -434.871 -434.871 235 -434.871 434.871 235 -307.5 -532.606 235 -307.5 532.606 235 -159.174 -594.044 235 0 615 235 159.174 -594.044 235 159.174 594.044 235 307.5 -532.606 235 307.5 532.606 235 434.871 -434.871 235 532.606 307.5 235 594.044 -159.174 235 615 0 235 - - - - - - - - - - -0.827366 -0.561663 0 -0.561785 -0.827283 0 -0.561785 -0.827283 0 -0.827366 -0.561663 0 -0.918115 -0.396313 0 -0.827366 -0.561663 0 -0.827366 -0.561663 0 -0.918115 -0.396313 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 -0.707022 0.707191 0 -0.707022 0.707191 0 -0.707022 0.707191 0 -0.707022 0.707191 0 0.707191 0.707022 0 0.707191 0.707022 0 0.707191 0.707022 0 0.707191 0.707022 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.561785 -0.827283 0 -0.396466 -0.918049 0 -0.396466 -0.918049 0 -0.561785 -0.827283 0 0.707022 -0.707191 0 0.707022 -0.707191 0 0.707022 -0.707191 0 0.707022 -0.707191 0 0.499985 0.866034 0 0.866034 0.499985 0 0.866034 0.499985 0 0.499985 0.866034 0 0 1 0 0.499985 0.866034 0 0.499985 0.866034 0 0 1 0 -0.499985 0.866034 0 0 1 0 0 1 0 -0.499985 0.866034 0 -0.866034 0.499985 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.866034 0.499985 0 -1 0 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -1 0 0 -1 0 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -1 0 0 -0.499985 -0.866034 0 0 -1 0 0 -1 0 -0.499985 -0.866034 0 0 -1 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0 -1 0 0.866034 -0.499985 0 1 0 0 1 0 0 0.866034 -0.499985 0 0.499985 -0.866034 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.499985 -0.866034 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.866034 -0.499985 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.866034 -0.499985 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0.866034 0.499985 0 1 0 0 1 0 0 0.866034 0.499985 0 -0.707022 -0.707191 0 -0.707022 -0.707191 0 -0.707022 -0.707191 0 -0.707022 -0.707191 0 -0.827366 0.561663 0 -0.561785 0.827283 0 -0.561785 0.827283 0 -0.827366 0.561663 0 -0.918115 0.396313 0 -0.827366 0.561663 0 -0.827366 0.561663 0 -0.918115 0.396313 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.561785 0.827283 0 -0.396466 0.918049 0 -0.396466 0.918049 0 -0.561785 0.827283 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0.707191 -0.707022 0 0.707191 -0.707022 0 0.707191 -0.707022 0 0.707191 -0.707022 0 0.707022 0.707191 0 0.707022 0.707191 0 0.707022 0.707191 0 0.707022 0.707191 0 0.707022 -0.707191 0 0.707022 -0.707191 0 0.707022 -0.707191 0 0.707022 -0.707191 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0.396313 -0.918115 0 0.396313 -0.918115 0 0.561663 -0.827366 0 0.561663 -0.827366 0 0.561663 -0.827366 0 0.561663 -0.827366 0 0.827283 -0.561785 0 0.827283 -0.561785 0 0.827283 -0.561785 0 0.827283 -0.561785 0 0.918049 -0.396466 0 0.918049 -0.396466 0 0.707191 0.707022 0 0.707191 0.707022 0 0.707191 0.707022 0 0.707191 0.707022 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 -0.707191 -0.707022 0 -0.707191 -0.707022 0 -0.707191 -0.707022 0 -0.707191 -0.707022 0 0 0 -1 0 0 -1 0 0 -1 1 0 0 0 0 -1 1 0 0 1 0 0 1 0 0 0 -1 0 -0.996216 0 0.0869167 0 -1 0 0 1 0 -0.996216 0 0.0869167 0 1 0 -0.866034 0 0.499985 0 -1 0 -0.866034 0 0.499985 0 1 0 -0.499985 0 0.866034 0 -1 0 -0.499985 0 0.866034 0 1 0 0 0 1 0 -1 0 0 0 1 0 1 0 0 -1 0 0.499985 0 0.866034 0 1 0 0.499985 0 0.866034 0 -1 0 0.866034 0 0.499985 0 1 0 0.866034 0 0.499985 0 0 -1 0 -1 0 1 0 0 0 0 -1 0 1 0 1 0 0 0 1 0 0.991449 0 0.130497 0 -1 0 0.991449 0 0.130497 -1 1.27208e-007 4.69506e-007 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0.707022 0.707191 0 0.707022 0.707191 0 0.707022 0.707191 0 0.707022 0.707191 0 0.707191 -0.707022 0 0.707191 -0.707022 0 0.707191 -0.707022 0 0.707191 -0.707022 0 0.918049 0.396466 0 0.918049 0.396466 0 0.827283 0.561785 0 0.827283 0.561785 0 0.827283 0.561785 0 0.827283 0.561785 0 0.561663 0.827366 0 0.561663 0.827366 0 0.561663 0.827366 0 0.561663 0.827366 0 0.396313 0.918115 0 0.396313 0.918115 0 -0.707191 0.707022 0 -0.707191 0.707022 0 -0.707191 0.707022 0 -0.707191 0.707022 0 -1 0 0 -0.97658 -0.215155 -3.05185e-005 -3.05185e-005 -1 0 0 0 1 -0.97658 -0.215155 -3.05185e-005 -3.05185e-005 -1 0 -0.976587 0.215125 0 -3.05185e-005 1 0 -0.880839 -0.364849 0.301675 -3.05185e-005 -1 0 -0.880839 0.364849 0.301675 -3.05185e-005 1 0 -0.825048 -0.476302 0.304025 -0.825048 0.476302 0.304025 -0.880839 0.364849 0.301675 -3.05185e-005 1 0 0 0 1 -0.673605 -0.673666 0.304025 -0.673605 0.673666 0.304025 -0.476302 -0.825048 0.304025 -0.476302 0.825048 0.304025 -0.246559 -0.920205 0.304025 -0.246559 0.920205 0.304025 -0.246559 0.920205 0.304025 0 0 1 0 -0.952664 0.304025 0 0 1 0 -0.952664 0.304025 0 0.952664 0.304025 0.246559 -0.920205 0.304025 0.246559 0.920205 0.304025 0.476302 -0.825048 0.304025 0.476302 0.825048 0.304025 0 0 1 0.673605 0.673666 0.304025 0.673605 -0.673666 0.304025 0.673605 0.673666 0.304025 0 0 1 0.825048 -0.476302 0.304025 0 0 1 0.920205 0.246559 0.304025 0.825048 -0.476302 0.304025 0.825048 0.476302 0.304025 0.920205 -0.246559 0.304025 0.920205 0.246559 0.304025 0.952664 0 0.304025 -1 0 0 -0.976587 0.215125 0 -3.05185e-005 1 0 -0.880839 -0.364849 0.301675 -3.05185e-005 -1 0 -0.825048 -0.476302 0.304025 -0.825048 0.476302 0.304025 -0.673605 -0.673666 0.304025 -0.673605 0.673666 0.304025 -0.476302 -0.825048 0.304025 -0.476302 0.825048 0.304025 -0.246559 -0.920205 0.304025 0 0.952664 0.304025 0.246559 -0.920205 0.304025 0.246559 0.920205 0.304025 0.476302 -0.825048 0.304025 0.476302 0.825048 0.304025 0.673605 -0.673666 0.304025 0.825048 0.476302 0.304025 0.920205 -0.246559 0.304025 0.952664 0 0.304025 -1.37012e-005 -5.721e-010 1 - - - - - - - - - - - - - - -

0 0 1 1 2 2 3 3

-

4 4 5 5 6 6 7 7

-

8 8 9 9 10 10 11 11 12 12 13 13

-

14 14 15 15 16 16 17 17

-

18 18 19 19 20 20 21 21

-

22 22 23 23 24 24 25 25 26 26 27 27

-

28 28 29 29 30 30 31 31

-

32 32 33 33 34 34 35 35

-
- - - -

36 36 37 37 38 38 39 39

-

40 40 41 41 42 42 43 43

-

44 44 45 45 46 46 47 47

-

48 48 49 49 50 50 51 51

-

52 52 53 53 54 54 55 55

-

56 56 57 57 58 58 59 59

-

60 60 61 61 62 62 63 63

-

64 64 65 65 66 66 67 67

-

68 68 69 69 70 70 71 71

-

72 72 73 73 74 74 75 75

-

76 76 77 77 78 78 79 79 80 80 81 81 82 82 83 83 84 84 85 85 86 86 87 87

-

88 88 89 89 90 90 91 91

-

92 92 93 93 94 94 95 95 96 96 97 97 98 98 99 99 100 100 101 101 102 102 103 103

-

104 104 105 105 106 106 107 107

-
- - - -

108 108 109 109 110 110 111 111

-

112 112 113 113 114 114 115 115

-

116 116 117 117 118 118 119 119

-

120 120 121 121 122 122 123 123 124 124 125 125

-

126 126 127 127 128 128 129 129

-

130 130 131 131 132 132 133 133 134 134 135 135

-

136 136 137 137 138 138 139 139

-

140 140 141 141 142 142 143 143

-
- - - -

144 144 145 145 146 146 147 147

-

148 148 149 149 150 150 151 151 152 152 153 153

-

154 154 155 155 156 156 157 157

-

158 158 159 159 160 160 161 161

-

162 162 163 163 164 164 165 165

-

166 166 167 167 168 168 169 169

-

170 170 171 171 172 172 173 173 174 174 175 175

-

176 176 177 177 178 178 179 179

-
- - - -

188 224 190 224 193 224 191 224

-

188 224 190 224 193 224 191 224

-
- - - -

202 202 207 207 209 209 204 204

-

198 198 202 202 204 204 200 200

-

194 194 198 198 200 200 196 196

-

189 189 194 194 196 196 192 192

-

214 214 180 180 181 181 217 217

-

218 218 191 191 193 193 197 197 201 201 205 205 208 208 212 212 220 220

-

211 211 223 223 221 221 213 213

-

207 207 211 211 213 213 209 209

-

210 210 206 206 203 203 199 199 195 195 190 190 188 188 215 215 222 222

-

223 223 216 216 219 219 221 221

-
- - - -

202 202 207 207 209 209 204 204

-

198 198 202 202 204 204 200 200

-

194 194 198 198 200 200 196 196

-

189 189 194 194 196 196 192 192

-

214 214 180 180 181 181 217 217

-

218 218 191 191 193 193 197 197 201 201 205 205 208 208 212 212 220 220

-

211 211 223 223 221 221 213 213

-

207 207 211 211 213 213 209 209

-

210 210 206 206 203 203 199 199 195 195 190 190 188 188 215 215 222 222

-

223 223 216 216 219 219 221 221

-

186 186 183 183 185 185 187 187

-

182 182 180 180 181 181 184 184

-
- - - -

224 225 225 226 226 227 227 228 228 229 229 230

-

230 231 231 232 232 233 233 234 234 235 235 236

-

236 237 237 238 238 239 239 240

-

240 241 241 242 242 243 243 244

-

244 245 245 246 246 247 247 248

-

248 249 249 250 250 251 251 252

-

252 253 253 254 254 255 255 256

-

256 257 257 258 258 259 259 260

-
- - - -

276 328 308 328 306 328 263 328 310 328

-

310 328 311 328 313 328 315 328 317 328 287 328 319 328 321 328 323 328 298 328 325 328 326 328 300 328 324 328 294 328 322 328 320 328 318 328 284 328 316 328 314 328 312 328 276 328

-
- - - -

260 261 264 265 261 262 306 307

-

310 311 262 263 265 266 269 270

-

268 269 272 273 311 312 309 310

-

272 273 277 278 313 314 311 312

-

277 278 279 280 315 316 313 314

-

279 280 281 282 317 318 315 316

-

281 282 285 286 287 288 317 318

-

285 286 289 290 319 320 287 288

-

289 290 291 292 321 322 319 320

-

291 292 295 296 323 324 321 322

-

295 296 301 302 298 299 323 324

-

301 302 303 304 325 326 298 299

-

303 304 305 306 326 327 325 326

-

300 301 326 327 305 306 304 305

-

324 325 300 301 304 305 302 303

-

294 295 324 325 302 303 296 297

-

322 323 294 295 296 297 292 293

-

320 321 322 323 292 293 290 291

-

318 319 320 321 290 291 288 289

-

283 284 318 319 288 289 282 283

-

316 317 283 284 282 283 280 281

-

314 315 316 317 280 281 278 279

-

312 313 314 315 278 279 273 274

-

274 275 312 313 273 274 270 271

-

271 272 267 268 308 309 275 276

-

307 308 266 267 260 261 306 307

-
-
- - - CAT3DBagRep - - -
- - - - 210 289.999 64.3515 210.001 289.999 -108.001 310 290 57.9996 310 289.999 115.304 310 379.999 115.304 310 289.999 115.304 310 290 57.9996 309.999 380 57.9992 309.999 380 57.9992 310 290 57.9996 210.001 289.999 -108.001 210 379.999 -108.001 210 379.999 -108.001 210.001 289.999 -108.001 210 289.999 64.3515 210 379.999 64.3511 210 379.999 64.3511 210 289.999 64.3515 310 289.999 115.304 310 379.999 115.304 210 379.999 64.3511 310 379.999 115.304 309.999 380 57.9992 210 379.999 -108.001 -652.003 -5 -4.96759 -635.532 -5 11.5036 -629.503 -5 34.0036 -635.532 -5 56.5036 -652.003 -5 72.9747 -674.503 -5 79.0036 -697.003 -5 72.9747 -713.474 -5 56.5036 -719.503 -5 34.0036 -713.474 -5 11.5036 -697.003 -5 -4.96758 -674.503 -5 -10.9964 -713.474 0 11.5036 -697.003 0 -4.96758 -697.003 -5 -4.96758 -713.474 -5 11.5036 -719.503 0 34.0036 -713.474 0 11.5036 -713.474 -5 11.5036 -719.503 -5 34.0036 -713.474 0 56.5036 -719.503 0 34.0036 -719.503 -5 34.0036 -713.474 -5 56.5036 -697.003 0 72.9747 -713.474 0 56.5036 -713.474 -5 56.5036 -697.003 -5 72.9747 -674.503 0 79.0036 -697.003 0 72.9747 -697.003 -5 72.9747 -674.503 -5 79.0036 -652.003 0 72.9747 -674.503 0 79.0036 -674.503 -5 79.0036 -652.003 -5 72.9747 -635.532 0 56.5036 -652.003 0 72.9747 -652.003 -5 72.9747 -635.532 -5 56.5036 -629.503 0 34.0036 -635.532 0 56.5036 -635.532 -5 56.5036 -629.503 -5 34.0036 -635.532 0 11.5036 -629.503 0 34.0036 -629.503 -5 34.0036 -635.532 -5 11.5036 -652.003 0 -4.96759 -635.532 0 11.5036 -635.532 -5 11.5036 -652.003 -5 -4.96759 -674.503 0 -10.9964 -652.003 0 -4.96759 -652.003 -5 -4.96759 -674.503 -5 -10.9964 -697.003 0 -4.96758 -674.503 0 -10.9964 -674.503 -5 -10.9964 -697.003 -5 -4.96758 -479.999 -136.499 -240.003 -479.999 -136.499 -240.003 -479.999 -116.499 -240.003 -479.999 -116.499 -240.003 -479.998 -136.5 -330.003 -479.998 -136.5 -330.003 -479.998 -116.499 -330.003 -479.998 -116.499 -330.003 -429.999 -116.499 -240.003 -429.999 -116.499 -240.003 -429.999 -136.499 -240.003 -429.999 -136.499 -240.003 -389.999 -116.5 -330.002 -389.999 -116.5 -330.002 -389.998 -136.5 -330.002 -389.998 -136.5 -330.002 -336.012 -116.499 -80.6659 -336.012 -136.499 -80.6658 -234.076 -116.5 -154.727 -234.076 -136.499 -154.727 -234.076 -116.499 -154.727 -479.999 116.499 -240.003 -479.999 116.499 -240.003 -479.999 136.5 -240.003 -479.999 136.5 -240.003 -479.998 116.499 -330.003 -479.998 116.499 -330.003 -479.998 136.499 -330.003 -479.998 136.499 -330.003 -429.999 136.499 -240.003 -429.999 136.499 -240.003 -429.999 116.499 -240.003 -429.999 116.499 -240.003 -389.999 136.498 -330.002 -389.999 136.498 -330.002 -389.998 116.498 -330.002 -389.998 116.498 -330.002 -336.012 136.499 -80.6659 -336.012 116.499 -80.6658 -234.076 136.498 -154.727 -234.076 116.499 -154.727 -234.076 136.499 -154.727 -479.999 -334 -240.003 -479.999 -334 -240.003 -479.999 -314 -240.003 -479.999 -314 -240.003 -479.998 -334.001 -330.003 -479.998 -334.001 -330.003 -479.998 -314 -330.003 -479.998 -314 -330.003 -429.999 -334 -240.002 -429.999 -334 -240.002 -429.999 -314 -240.003 -429.999 -314 -240.003 -389.999 -334.001 -330.002 -389.999 -334.001 -330.002 -389.999 -314.001 -330.002 -389.999 -314.001 -330.002 -336.012 -314 -80.6659 -336.012 -334 -80.6658 -234.076 -314.001 -154.727 -234.076 -334 -154.727 -234.076 -314 -154.727 -179 122.502 -456.001 -379 122.502 -456.001 -379 122.502 -341.001 -179 122.502 -341.001 -156.5 100.002 -456.001 -179 122.502 -456.001 -179 122.502 -341.001 -156.5 100.002 -341.001 -156.5 -99.9978 -456.001 -156.5 100.002 -456.001 -156.5 100.002 -341.001 -156.5 -99.9978 -341.001 -179 -122.498 -456.001 -156.5 -99.9978 -456.001 -156.5 -99.9978 -341.001 -179 -122.498 -341.001 -379 -122.498 -456.001 -179 -122.498 -456.001 -179 -122.498 -341.001 -379 -122.498 -341.001 -401.5 -99.9978 -456.001 -379 -122.498 -456.001 -379 -122.498 -341.001 -401.5 -99.9978 -341.001 -401.5 100.002 -341.001 -401.5 -99.9978 -341.001 -379 -122.498 -341.001 -179 -122.498 -341.001 -156.5 -99.9978 -341.001 -156.5 100.002 -341.001 -179 122.502 -341.001 -379 122.502 -341.001 -379 122.502 -456.001 -401.5 100.002 -456.001 -401.5 100.002 -341.001 -379 122.502 -341.001 -401.5 100.002 -456.001 -379 122.502 -456.001 -179 122.502 -456.001 -156.5 100.002 -456.001 -156.5 -99.9978 -456.001 -179 -122.498 -456.001 -379 -122.498 -456.001 -401.5 -99.9978 -456.001 -401.5 100.002 -456.001 -401.5 -99.9978 -456.001 -401.5 -99.9978 -341.001 -401.5 100.002 -341.001 -189.323 89.6784 -276.001 -246.176 122.502 -276.001 -311.823 122.502 -276.001 -368.676 89.6784 -276.001 -401.5 32.826 -276.001 -401.5 -32.8216 -276.001 -368.676 -89.674 -276.001 -311.823 -122.498 -276.001 -246.176 -122.498 -276.001 -189.323 -89.674 -276.001 -156.5 -32.8216 -276.001 -156.5 32.826 -276.001 -189.323 -89.674 -341.001 -156.5 -32.8216 -341.001 -156.5 -32.8216 -276.001 -189.323 -89.674 -276.001 -246.176 -122.498 -341.001 -189.323 -89.674 -341.001 -189.323 -89.674 -276.001 -246.176 -122.498 -276.001 -311.823 -122.498 -341.001 -246.176 -122.498 -341.001 -246.176 -122.498 -276.001 -311.823 -122.498 -276.001 -368.676 -89.674 -341.001 -311.823 -122.498 -341.001 -311.823 -122.498 -276.001 -368.676 -89.674 -276.001 -401.5 -32.8216 -341.001 -368.676 -89.674 -341.001 -368.676 -89.674 -276.001 -401.5 -32.8216 -276.001 -401.5 32.826 -341.001 -401.5 -32.8216 -341.001 -401.5 -32.8216 -276.001 -401.5 32.826 -276.001 -368.676 89.6784 -341.001 -401.5 32.826 -341.001 -401.5 32.826 -276.001 -368.676 89.6784 -276.001 -311.823 122.502 -341.001 -368.676 89.6784 -341.001 -368.676 89.6784 -276.001 -311.823 122.502 -276.001 -246.176 122.502 -341.001 -311.823 122.502 -341.001 -311.823 122.502 -276.001 -246.176 122.502 -276.001 -189.323 89.6784 -341.001 -246.176 122.502 -341.001 -246.176 122.502 -276.001 -189.323 89.6784 -276.001 -156.5 32.826 -341.001 -189.323 89.6784 -341.001 -189.323 89.6784 -276.001 -156.5 32.826 -276.001 -156.5 -32.8216 -341.001 -156.5 32.826 -341.001 -156.5 32.826 -276.001 -156.5 -32.8216 -276.001 -479.999 314 -240.003 -479.999 314 -240.003 -479.999 334 -240.003 -479.999 334 -240.003 -479.998 313.999 -330.003 -479.998 313.999 -330.003 -479.998 333.999 -330.003 -479.998 333.999 -330.003 -429.999 334 -240.003 -429.999 334 -240.003 -429.999 314 -240.003 -429.999 314 -240.003 -389.999 333.999 -330.002 -389.999 333.999 -330.002 -389.998 313.999 -330.002 -389.998 313.999 -330.002 -336.012 334 -80.6659 -336.012 314 -80.6658 -234.076 333.999 -154.727 -234.076 314 -154.727 -234.076 334 -154.727 -336.012 290 -80.6659 -234.076 290 -154.726 -234.074 -290 -154.723 -336.01 -290 -80.6626 -315.367 290 -45.6655 -336.012 290 -80.6659 -336.01 -290 -80.6626 -315.365 -290 -45.6623 -209.999 290 -122.219 -315.367 290 -45.6655 -315.365 -290 -45.6623 -209.997 -290 -122.216 -209.999 290 -127.661 -209.999 290 -122.219 -209.997 -290 -122.216 -209.997 -290 -127.658 -234.076 290 -154.726 -209.999 290 -127.661 -209.997 -290 -127.658 -234.074 -290 -154.723 -668.409 30 -21.1373 -638.421 30 -12.6998 -638.421 0 -12.6998 -668.409 0 -21.1373 -699.089 30 -15.7276 -668.409 30 -21.1373 -668.409 0 -21.1373 -699.089 0 -15.7276 -724.383 30 2.45771 -699.089 30 -15.7276 -699.089 0 -15.7276 -724.383 0 2.45771 -739.282 30 29.8169 -724.383 30 2.45771 -724.383 0 2.45771 -739.282 0 29.8169 -740.835 30 60.931 -739.282 30 29.8169 -739.282 0 29.8169 -740.835 0 60.931 -740.835 0 60.931 -739.282 0 29.8169 -724.383 0 2.45771 -699.089 0 -15.7276 -668.409 0 -21.1373 -638.421 0 -12.6998 -615.063 0 7.91362 -602.962 0 36.6203 -638.421 30 -12.6998 -615.063 30 7.91362 -615.063 0 7.91362 -638.421 0 -12.6998 -602.962 30 36.6203 -615.063 30 7.91362 -638.421 30 -12.6998 -668.409 30 -21.1373 -699.089 30 -15.7276 -724.383 30 2.45771 -739.282 30 29.8169 -740.835 30 60.931 -615.063 30 7.91362 -602.962 30 36.6203 -602.962 0 36.6203 -615.063 0 7.91362 -580.388 0 164.645 -718.261 0 188.956 -740.835 0 60.931 -602.962 0 36.6203 -718.261 30 188.956 -580.388 30 164.645 -602.962 30 36.6203 -740.835 30 60.931 -718.261 0 188.956 -718.261 30 188.956 -740.835 30 60.931 -740.835 0 60.931 -718.261 30 188.956 -718.261 0 188.956 -580.388 0 164.645 -580.388 30 164.645 -580.388 30 164.645 -580.388 0 164.645 -602.962 0 36.6203 -602.962 30 36.6203 -668.409 260 -21.1373 -638.421 260 -12.6998 -638.421 230 -12.6998 -668.409 230 -21.1373 -699.089 260 -15.7276 -668.409 260 -21.1373 -668.409 230 -21.1373 -699.089 230 -15.7276 -724.383 260 2.45771 -699.089 260 -15.7276 -699.089 230 -15.7276 -724.383 230 2.45771 -739.282 260 29.8169 -724.383 260 2.45771 -724.383 230 2.45771 -739.282 230 29.8169 -740.835 260 60.931 -739.282 260 29.8169 -739.282 230 29.8169 -740.835 230 60.931 -740.835 230 60.931 -739.282 230 29.8169 -724.383 230 2.45771 -699.089 230 -15.7276 -668.409 230 -21.1373 -638.421 230 -12.6998 -615.063 230 7.91362 -602.962 230 36.6203 -638.421 260 -12.6998 -615.063 260 7.91362 -615.063 230 7.91362 -638.421 230 -12.6998 -602.962 260 36.6203 -615.063 260 7.91362 -638.421 260 -12.6998 -668.409 260 -21.1373 -699.089 260 -15.7276 -724.383 260 2.45771 -739.282 260 29.8169 -740.835 260 60.931 -615.063 260 7.91362 -602.962 260 36.6203 -602.962 230 36.6203 -615.063 230 7.91362 -580.388 230 164.645 -718.261 230 188.956 -740.835 230 60.931 -602.962 230 36.6203 -718.261 260 188.956 -580.388 260 164.645 -602.962 260 36.6203 -740.835 260 60.931 -718.261 230 188.956 -718.261 260 188.956 -740.835 260 60.931 -740.835 230 60.931 -718.261 260 188.956 -718.261 230 188.956 -580.388 230 164.645 -580.388 260 164.645 -580.388 260 164.645 -580.388 230 164.645 -602.962 230 36.6203 -602.962 260 36.6203 -610.486 -160 416.91 -640.475 -160 408.473 -640.475 -190 408.473 -610.486 -190 416.91 -579.806 -160 411.501 -610.486 -160 416.91 -610.486 -190 416.91 -579.806 -190 411.501 -554.512 -160 393.315 -579.806 -160 411.501 -579.806 -190 411.501 -554.512 -190 393.315 -539.613 -160 365.956 -554.512 -160 393.315 -554.512 -190 393.315 -539.613 -190 365.956 -538.06 -160 334.842 -539.613 -160 365.956 -539.613 -190 365.956 -538.06 -190 334.842 -538.06 -190 334.842 -539.613 -190 365.956 -554.512 -190 393.315 -579.806 -190 411.501 -610.486 -190 416.91 -640.475 -190 408.473 -663.833 -190 387.859 -675.933 -190 359.153 -640.475 -160 408.473 -663.833 -160 387.859 -663.833 -190 387.859 -640.475 -190 408.473 -675.933 -160 359.153 -663.833 -160 387.859 -640.475 -160 408.473 -610.486 -160 416.91 -579.806 -160 411.501 -554.512 -160 393.315 -539.613 -160 365.956 -538.06 -160 334.842 -663.833 -160 387.859 -675.933 -160 359.153 -675.933 -190 359.153 -663.833 -190 387.859 -698.508 -190 231.128 -560.635 -190 206.817 -538.06 -190 334.842 -675.933 -190 359.153 -560.635 -160 206.817 -698.508 -160 231.128 -675.933 -160 359.153 -538.06 -160 334.842 -560.635 -190 206.817 -560.635 -160 206.817 -538.06 -160 334.842 -538.06 -190 334.842 -560.635 -160 206.817 -560.635 -190 206.817 -698.508 -190 231.128 -698.508 -160 231.128 -698.508 -160 231.128 -698.508 -190 231.128 -675.933 -190 359.153 -675.933 -160 359.153 -610.486 70 416.91 -640.475 70 408.473 -640.475 40 408.473 -610.486 40 416.91 -579.806 70 411.501 -610.486 70 416.91 -610.486 40 416.91 -579.806 40 411.501 -554.512 70 393.315 -579.806 70 411.501 -579.806 40 411.501 -554.512 40 393.315 -539.613 70 365.956 -554.512 70 393.315 -554.512 40 393.315 -539.613 40 365.956 -538.06 70 334.842 -539.613 70 365.956 -539.613 40 365.956 -538.06 40 334.842 -538.06 40 334.842 -539.613 40 365.956 -554.512 40 393.315 -579.806 40 411.501 -610.486 40 416.91 -640.475 40 408.473 -663.833 40 387.859 -675.933 40 359.153 -640.475 70 408.473 -663.833 70 387.859 -663.833 40 387.859 -640.475 40 408.473 -675.933 70 359.153 -663.833 70 387.859 -640.475 70 408.473 -610.486 70 416.91 -579.806 70 411.501 -554.512 70 393.315 -539.613 70 365.956 -538.06 70 334.842 -663.833 70 387.859 -675.933 70 359.153 -675.933 40 359.153 -663.833 40 387.859 -698.508 40 231.128 -560.635 40 206.817 -538.06 40 334.842 -675.933 40 359.153 -560.635 70 206.817 -698.508 70 231.128 -675.933 70 359.153 -538.06 70 334.842 -560.635 40 206.817 -560.635 70 206.817 -538.06 70 334.842 -538.06 40 334.842 -560.635 70 206.817 -560.635 40 206.817 -698.508 40 231.128 -698.508 70 231.128 -698.508 70 231.128 -698.508 40 231.128 -675.933 40 359.153 -675.933 70 359.153 -449.115 -380.001 280.854 -210.001 -380.001 107.134 -210 -290.001 107.134 -449.114 -290.001 280.854 -650.793 -380.001 297.593 -449.115 -380.001 280.854 -449.114 -290.001 280.854 -650.793 -290.001 297.594 -721.918 -380 199.708 -650.793 -380.001 297.593 -650.793 -290.001 297.594 -721.917 -290 199.709 -209.999 -290 -172.219 -721.917 -290 199.709 -650.793 -290.001 297.594 -449.114 -290.001 280.854 -210 -290.001 107.134 -210.001 -380.001 107.134 -210 -380 -172.22 -209.999 -290 -172.219 -210 -290.001 107.134 -210 -380 -172.22 -210.001 -380.001 107.134 -449.115 -380.001 280.854 -650.793 -380.001 297.593 -721.918 -380 199.708 -210 -380 -172.22 -721.918 -380 199.708 -721.917 -290 199.709 -209.999 -290 -172.219 -209.998 -429.997 -550.002 -210 -429.999 127.994 -209.999 -289.999 127.994 -209.997 -289.997 -550.002 209.999 -290 128.001 210.002 -289.997 -550.001 -209.997 -289.997 -550.002 -209.999 -289.999 127.994 -210 -429.999 127.994 209.999 -430 128 209.999 -290 128.001 -209.999 -289.999 127.994 209.999 -430 128 -210 -429.999 127.994 -209.998 -429.997 -550.002 210.002 -429.997 -550.001 209.999 -430 128 210.002 -429.997 -550.001 210.002 -289.997 -550.001 209.999 -290 128.001 210 -289.999 64.3515 310 -289.999 115.304 310 -290 57.9996 210.001 -289.999 -108.001 309.999 -380 57.9992 210 -379.999 -108.001 210.001 -289.999 -108.001 310 -290 57.9996 310 -379.999 115.304 309.999 -380 57.9992 310 -290 57.9996 310 -289.999 115.304 210 -379.999 64.3511 310 -379.999 115.304 310 -289.999 115.304 210 -289.999 64.3515 210 -379.999 -108.001 210 -379.999 64.3511 210 -289.999 64.3515 210.001 -289.999 -108.001 210 -379.999 64.3511 210 -379.999 -108.001 309.999 -380 57.9992 310 -379.999 115.304 229.253 -344.278 132.522 239.689 -355.991 137.84 253.945 -360.278 145.104 268.201 -355.99 152.367 278.637 -344.277 157.685 282.457 -328.277 159.631 278.637 -312.277 157.685 268.201 -300.565 152.367 253.945 -296.278 145.104 239.689 -300.565 137.84 229.252 -312.278 132.522 225.433 -328.278 130.576 263.296 -300.565 91.5074 252.86 -312.278 86.1899 229.252 -312.278 132.522 239.689 -300.565 137.84 277.552 -296.277 98.7713 263.296 -300.565 91.5074 239.689 -300.565 137.84 253.945 -296.278 145.104 291.808 -300.565 106.035 277.552 -296.277 98.7713 253.945 -296.278 145.104 268.201 -300.565 152.367 302.245 -312.277 111.353 291.808 -300.565 106.035 268.201 -300.565 152.367 278.637 -312.277 157.685 306.065 -328.277 113.299 302.245 -312.277 111.353 278.637 -312.277 157.685 282.457 -328.277 159.631 302.245 -344.277 111.353 306.065 -328.277 113.299 282.457 -328.277 159.631 278.637 -344.277 157.685 291.809 -355.99 106.035 302.245 -344.277 111.353 278.637 -344.277 157.685 268.201 -355.99 152.367 277.553 -360.277 98.7713 291.809 -355.99 106.035 268.201 -355.99 152.367 253.945 -360.278 145.104 263.297 -355.99 91.5074 277.553 -360.277 98.7713 253.945 -360.278 145.104 239.689 -355.991 137.84 252.86 -344.278 86.1899 263.297 -355.99 91.5074 239.689 -355.991 137.84 229.253 -344.278 132.522 249.04 -328.278 84.2435 252.86 -344.278 86.1899 229.253 -344.278 132.522 225.433 -328.278 130.576 252.86 -312.278 86.1899 249.04 -328.278 84.2435 225.433 -328.278 130.576 229.252 -312.278 132.522 225.433 328.278 130.576 229.253 344.278 132.522 252.86 344.278 86.1899 249.04 328.278 84.2435 229.253 344.278 132.522 239.689 355.991 137.84 263.297 355.99 91.5074 252.86 344.278 86.1899 239.689 355.991 137.84 253.945 360.278 145.104 277.553 360.277 98.7713 263.297 355.99 91.5074 253.945 360.278 145.104 268.201 355.99 152.367 291.809 355.99 106.035 277.553 360.277 98.7713 268.201 355.99 152.367 278.637 344.277 157.685 302.245 344.277 111.353 291.809 355.99 106.035 278.637 344.277 157.685 282.457 328.277 159.631 306.065 328.277 113.299 302.245 344.277 111.353 282.457 328.277 159.631 278.637 312.277 157.685 302.245 312.277 111.353 306.065 328.277 113.299 278.637 312.277 157.685 268.201 300.565 152.367 291.808 300.565 106.035 302.245 312.277 111.353 268.201 300.565 152.367 253.945 296.278 145.104 277.552 296.277 98.7713 291.808 300.565 106.035 253.945 296.278 145.104 239.689 300.565 137.84 263.296 300.565 91.5074 277.552 296.277 98.7713 239.689 300.565 137.84 229.252 312.278 132.522 252.86 312.278 86.1899 263.296 300.565 91.5074 225.433 328.278 130.576 229.252 312.278 132.522 239.689 300.565 137.84 253.945 296.278 145.104 268.201 300.565 152.367 278.637 312.277 157.685 282.457 328.277 159.631 278.637 344.277 157.685 268.201 355.99 152.367 253.945 360.278 145.104 239.689 355.991 137.84 229.253 344.278 132.522 229.252 312.278 132.522 225.433 328.278 130.576 249.04 328.278 84.2435 252.86 312.278 86.1899 210.002 429.997 -550.001 -209.998 429.997 -550.002 -210 429.999 127.994 209.999 430 128 -209.999 289.999 127.994 209.999 290 128.001 209.999 430 128 -210 429.999 127.994 -209.997 289.997 -550.002 -209.999 289.999 127.994 -210 429.999 127.994 -209.998 429.997 -550.002 -209.999 289.999 127.994 -209.997 289.997 -550.002 210.002 289.997 -550.001 209.999 290 128.001 209.999 290 128.001 210.002 289.997 -550.001 210.002 429.997 -550.001 209.999 430 128 -650.793 290.001 297.594 -449.114 290.001 280.854 -449.115 380.001 280.854 -650.793 380.001 297.593 -721.917 290 199.709 -650.793 290.001 297.594 -650.793 380.001 297.593 -721.918 380 199.708 -721.918 380 199.708 -650.793 380.001 297.593 -449.115 380.001 280.854 -210.001 380.001 107.134 -210 380 -172.22 -210 290.001 107.134 -209.999 290 -172.219 -210 380 -172.22 -210.001 380.001 107.134 -449.114 290.001 280.854 -210 290.001 107.134 -210.001 380.001 107.134 -449.115 380.001 280.854 -210 290.001 107.134 -449.114 290.001 280.854 -650.793 290.001 297.594 -721.917 290 199.709 -209.999 290 -172.219 -209.999 290 -172.219 -721.917 290 199.709 -721.918 380 199.708 -210 380 -172.22 -690.262 -290 206.616 -690.262 -290 206.616 -690.262 290 206.616 -690.262 290 206.616 -683.095 -290 179.866 -683.095 -290 233.366 -683.095 290 179.866 -683.095 290 233.366 -663.512 -290 160.284 -663.512 -290 160.284 -663.512 -290 252.949 -663.512 -290 252.949 -663.512 290 160.284 -663.512 290 160.284 -663.512 290 252.949 -663.512 290 252.949 -636.762 -290 153.116 -636.762 -290 153.116 -636.762 -290 260.116 -636.762 290 153.116 -636.762 290 153.116 -636.762 290 260.116 -610.012 -290 160.284 -610.012 -290 160.284 -610.012 -290 252.949 -610.012 -290 252.949 -610.012 290 160.284 -610.012 290 160.284 -610.012 290 252.949 -610.012 290 252.949 -590.43 -290 179.866 -590.43 -290 233.366 -590.43 290 179.866 -590.43 290 233.366 -583.262 -290.001 206.616 -583.262 -290.001 206.616 -583.262 290.001 206.616 -583.262 290.001 206.616 -690.261 0 206.616 -683.093 0 179.866 -683.093 0 233.366 -663.511 0 160.284 -663.511 0 252.949 -636.761 0 153.116 -636.761 0 260.116 -610.011 0 160.284 -610.011 0 252.949 -590.428 0 179.866 -590.428 0 233.366 -583.261 0 206.616 479.099 128.374 -550 429.549 248 -550 350.725 350.725 -550 248 429.549 -550 128.374 479.099 -550 0 496 -550 -128.374 479.099 -550 -248 429.549 -550 -350.725 350.725 -550 -429.549 248 -550 -479.099 128.374 -550 -496 0 -550 -479.099 -128.374 -550 -429.549 -248 -550 -350.725 -350.725 -550 -248 -429.549 -550 -128.374 -479.099 -550 0 -496 -550 128.374 -479.099 -550 248 -429.549 -550 350.725 -350.725 -550 429.549 -248 -550 479.099 -128.374 -550 496 0 -550 429.549 -248 -657 479.099 -128.374 -657 479.099 -128.374 -550 429.549 -248 -550 350.725 -350.725 -657 429.549 -248 -657 429.549 -248 -550 350.725 -350.725 -550 248 -429.549 -657 350.725 -350.725 -657 350.725 -350.725 -550 248 -429.549 -550 128.374 -479.099 -657 248 -429.549 -657 248 -429.549 -550 128.374 -479.099 -550 0 -496 -657 128.374 -479.099 -657 128.374 -479.099 -550 0 -496 -550 -128.374 -479.099 -657 0 -496 -657 0 -496 -550 -128.374 -479.099 -550 -248 -429.549 -657 -128.374 -479.099 -657 -128.374 -479.099 -550 -248 -429.549 -550 -350.725 -350.725 -657 -248 -429.549 -657 -248 -429.549 -550 -350.725 -350.725 -550 -429.549 -248 -657 -350.725 -350.725 -657 -350.725 -350.725 -550 -429.549 -248 -550 -479.099 -128.374 -657 -429.549 -248 -657 -429.549 -248 -550 -479.099 -128.374 -550 -496 0 -657 -479.099 -128.374 -657 -479.099 -128.374 -550 -496 0 -550 -479.099 128.374 -657 -496 0 -657 -496 0 -550 -479.099 128.374 -550 -429.549 248 -657 -479.099 128.374 -657 -479.099 128.374 -550 -429.549 248 -550 -350.725 350.725 -657 -429.549 248 -657 -429.549 248 -550 -350.725 350.725 -550 -248 429.549 -657 -350.725 350.725 -657 -350.725 350.725 -550 -248 429.549 -550 -128.374 479.099 -657 -248 429.549 -657 -248 429.549 -550 -128.374 479.099 -550 0 496 -657 -128.374 479.099 -657 -128.374 479.099 -550 0 496 -550 128.374 479.099 -657 0 496 -657 0 496 -550 128.374 479.099 -550 248 429.549 -657 128.374 479.099 -657 128.374 479.099 -550 248 429.549 -550 350.725 350.725 -657 248 429.549 -657 248 429.549 -550 350.725 350.725 -550 429.549 248 -657 350.725 350.725 -657 350.725 350.725 -550 429.549 248 -550 479.099 128.374 -657 429.549 248 -657 429.549 248 -550 479.099 128.374 -550 496 0 -657 479.099 128.374 -657 479.099 128.374 -550 496 0 -550 479.099 -128.374 -657 496 0 -657 496 0 -550 479.099 -128.374 -550 -429 150.002 -456.001 -128.999 150.002 -456 -128.999 150.002 -549.999 -429 150.003 -550 -128.999 150.002 -456 -128.999 -149.998 -456.001 -128.998 -149.998 -550 -128.999 150.002 -549.999 -128.999 -149.998 -456.001 -429 -149.998 -456.002 -429 -149.997 -550.001 -128.998 -149.998 -550 -429 -149.998 -456.002 -128.999 -149.998 -456.001 -128.999 150.002 -456 -429 150.002 -456.001 -429 -149.998 -456.002 -429 150.002 -456.001 -429 150.003 -550 -429 -149.997 -550.001 60.6218 -440 35 35 -440 60.6218 0 -440 70 -35 -440 60.6218 -60.6218 -440 35 -70 -440 0 -60.6218 -440 -35 -35 -440 -60.6218 0 -440 -70 35 -440 -60.6218 60.6218 -440 -35 70 -440 0 60.6218 -429.999 -35 60.6218 -440 -35 35 -440 -60.6218 35 -429.999 -60.6218 35 -429.999 -60.6218 35 -440 -60.6218 0 -440 -70 0 -429.999 -70 0 -429.999 -70 0 -440 -70 -35 -440 -60.6218 -35 -429.999 -60.6218 -35 -429.999 -60.6218 -35 -440 -60.6218 -60.6218 -440 -35 -60.6218 -429.999 -35 -60.6218 -429.999 -35 -60.6218 -440 -35 -70 -440 0 -70 -429.999 0 -70 -429.999 0 -70 -440 0 -60.6218 -440 35 -60.6218 -429.999 35 -60.6218 -429.999 35 -60.6218 -440 35 -35 -440 60.6218 -35 -429.999 60.6218 -35 -429.999 60.6218 -35 -440 60.6218 0 -440 70 0 -429.999 70 0 -429.999 70 0 -440 70 35 -440 60.6218 35 -429.999 60.6218 35 -429.999 60.6218 35 -440 60.6218 60.6218 -440 35 60.6218 -429.999 35 60.6218 -429.999 35 60.6218 -440 35 70 -440 0 70 -429.999 0 70 -429.999 0 70 -440 0 60.6218 -440 -35 60.6218 -429.999 -35 70 440 0 60.6218 440 -35 35 440 -60.6218 0 440 -70 -35 440 -60.6218 -60.6218 440 -35 -70 440 0 -60.6218 440 35 -35 440 60.6218 0 440 70 35 440 60.6218 60.6218 440 35 70 429.999 0 70 440 0 60.6218 440 35 60.6218 429.999 35 60.6218 429.999 35 60.6218 440 35 35 440 60.6218 35 429.999 60.6218 35 429.999 60.6218 35 440 60.6218 0 440 70 0 429.999 70 0 429.999 70 0 440 70 -35 440 60.6218 -35 429.999 60.6218 -35 429.999 60.6218 -35 440 60.6218 -60.6218 440 35 -60.6218 429.999 35 -60.6218 429.999 35 -60.6218 440 35 -70 440 0 -70 429.999 0 -70 429.999 0 -70 440 0 -60.6218 440 -35 -60.6218 429.999 -35 -60.6218 429.999 -35 -60.6218 440 -35 -35 440 -60.6218 -35 429.999 -60.6218 -35 429.999 -60.6218 -35 440 -60.6218 0 440 -70 0 429.999 -70 0 429.999 -70 0 440 -70 35 440 -60.6218 35 429.999 -60.6218 35 429.999 -60.6218 35 440 -60.6218 60.6218 440 -35 60.6218 429.999 -35 60.6218 429.999 -35 60.6218 440 -35 70 440 0 70 429.999 0 -584.497 -195 308.026 -568.026 -195 324.497 -561.997 -195 346.997 -568.026 -195 369.497 -584.497 -195 385.968 -606.997 -195 391.997 -629.497 -195 385.968 -645.968 -195 369.497 -651.997 -195 346.997 -645.968 -195 324.497 -629.497 -195 308.026 -606.997 -195 301.997 -645.968 -190 324.497 -629.497 -190 308.026 -629.497 -195 308.026 -645.968 -195 324.497 -651.997 -190 346.997 -645.968 -190 324.497 -645.968 -195 324.497 -651.997 -195 346.997 -645.968 -190 369.497 -651.997 -190 346.997 -651.997 -195 346.997 -645.968 -195 369.497 -629.497 -190 385.968 -645.968 -190 369.497 -645.968 -195 369.497 -629.497 -195 385.968 -606.997 -190 391.997 -629.497 -190 385.968 -629.497 -195 385.968 -606.997 -195 391.997 -584.497 -190 385.968 -606.997 -190 391.997 -606.997 -195 391.997 -584.497 -195 385.968 -568.026 -190 369.497 -584.497 -190 385.968 -584.497 -195 385.968 -568.026 -195 369.497 -561.997 -190 346.997 -568.026 -190 369.497 -568.026 -195 369.497 -561.997 -195 346.997 -568.026 -190 324.497 -561.997 -190 346.997 -561.997 -195 346.997 -568.026 -195 324.497 -584.497 -190 308.026 -568.026 -190 324.497 -568.026 -195 324.497 -584.497 -195 308.026 -606.997 -190 301.997 -584.497 -190 308.026 -584.497 -195 308.026 -606.997 -195 301.997 -629.497 -190 308.026 -606.997 -190 301.997 -606.997 -195 301.997 -629.497 -195 308.026 -629.497 75 308.026 -645.968 75 324.497 -651.997 75 346.997 -645.968 75 369.497 -629.497 75 385.968 -606.997 75 391.997 -584.497 75 385.968 -568.026 75 369.497 -561.997 75 346.997 -568.026 75 324.497 -584.497 75 308.026 -606.997 75 301.997 -568.026 70 324.497 -584.497 70 308.026 -584.497 75 308.026 -568.026 75 324.497 -561.997 70 346.997 -568.026 70 324.497 -568.026 75 324.497 -561.997 75 346.997 -568.026 70 369.497 -561.997 70 346.997 -561.997 75 346.997 -568.026 75 369.497 -584.497 70 385.968 -568.026 70 369.497 -568.026 75 369.497 -584.497 75 385.968 -606.997 70 391.997 -584.497 70 385.968 -584.497 75 385.968 -606.997 75 391.997 -629.497 70 385.968 -606.997 70 391.997 -606.997 75 391.997 -629.497 75 385.968 -645.968 70 369.497 -629.497 70 385.968 -629.497 75 385.968 -645.968 75 369.497 -651.997 70 346.997 -645.968 70 369.497 -645.968 75 369.497 -651.997 75 346.997 -645.968 70 324.497 -651.997 70 346.997 -651.997 75 346.997 -645.968 75 324.497 -629.497 70 308.026 -645.968 70 324.497 -645.968 75 324.497 -629.497 75 308.026 -606.997 70 301.997 -629.497 70 308.026 -629.497 75 308.026 -606.997 75 301.997 -584.497 70 308.026 -606.997 70 301.997 -606.997 75 301.997 -584.497 75 308.026 -697.003 265 -4.96759 -713.474 265 11.5036 -719.503 265 34.0036 -713.474 265 56.5036 -697.003 265 72.9747 -674.503 265 79.0036 -652.003 265 72.9747 -635.532 265 56.5036 -629.503 265 34.0036 -635.532 265 11.5036 -652.003 265 -4.96758 -674.503 265 -10.9964 -635.532 260 11.5036 -652.003 260 -4.96758 -652.003 265 -4.96758 -635.532 265 11.5036 -629.503 260 34.0036 -635.532 260 11.5036 -635.532 265 11.5036 -629.503 265 34.0036 -635.532 260 56.5036 -629.503 260 34.0036 -629.503 265 34.0036 -635.532 265 56.5036 -652.003 260 72.9747 -635.532 260 56.5036 -635.532 265 56.5036 -652.003 265 72.9747 -674.503 260 79.0036 -652.003 260 72.9747 -652.003 265 72.9747 -674.503 265 79.0036 -697.003 260 72.9747 -674.503 260 79.0036 -674.503 265 79.0036 -697.003 265 72.9747 -713.474 260 56.5036 -697.003 260 72.9747 -697.003 265 72.9747 -713.474 265 56.5036 -719.503 260 34.0036 -713.474 260 56.5036 -713.474 265 56.5036 -719.503 265 34.0036 -713.474 260 11.5036 -719.503 260 34.0036 -719.503 265 34.0036 -713.474 265 11.5036 -697.003 260 -4.96759 -713.474 260 11.5036 -713.474 265 11.5036 -697.003 265 -4.96759 -674.503 260 -10.9964 -697.003 260 -4.96759 -697.003 265 -4.96759 -674.503 265 -10.9964 -652.003 260 -4.96758 -674.503 260 -10.9964 -674.503 265 -10.9964 -652.003 265 -4.96758 - - - - - - - - - - 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 0.963483 0 -0.267769 0.963483 0 -0.267769 0.963483 0 -0.267769 0.963483 0 -0.267769 0.856584 0 -0.516007 0.856584 0 -0.516007 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.866034 0 -0.499985 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -1 0 0 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -1 0 0 -0.866034 0 0.499985 -1 0 0 -1 0 0 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.499985 0 0.866034 0 0 1 -0.499985 0 0.866034 -0.499985 0 0.866034 0 0 1 0.499985 0 0.866034 0 0 1 0 0 1 0.499985 0 0.866034 0.866034 0 0.499985 0.499985 0 0.866034 0.499985 0 0.866034 0.866034 0 0.499985 1 0 0 0.866034 0 0.499985 0.866034 0 0.499985 1 0 0 0.866034 0 -0.499985 1 0 0 1 0 0 0.866034 0 -0.499985 0.499985 0 -0.866034 0.866034 0 -0.499985 0.866034 0 -0.499985 0.499985 0 -0.866034 0 0 -1 0.499985 0 -0.866034 0.499985 0 -0.866034 0 0 -1 -0.499985 0 -0.866034 0 0 -1 0 0 -1 -0.499985 0 -0.866034 -1 0 0 0 0 1 -1 0 0 0 0 1 -1 0 0 0 0 -1 -1 0 0 0 0 -1 -0.861333 0 0.508042 0 0 1 -0.861333 0 0.508042 0 0 1 0 0 -1 0.747171 0 -0.664632 0 0 -1 0.747171 0 -0.664632 -0.861333 0 0.508042 -0.861333 0 0.508042 0.747171 0 -0.664632 0.747171 0 -0.664632 4.42697e-006 1 -5.60915e-006 -1.29224e-006 -1 4.93852e-006 -1 0 0 0 0 1 -1 0 0 0 0 1 -1 0 0 0 0 -1 -1 0 0 0 0 -1 -0.861333 0 0.508042 0 0 1 -0.861333 0 0.508042 0 0 1 0 0 -1 0.747171 0 -0.664632 0 0 -1 0.747171 0 -0.664632 -0.861333 0 0.508042 -0.861333 0 0.508042 0.747171 0 -0.664632 0.747171 0 -0.664632 4.42697e-006 1 -5.60915e-006 -1.29224e-006 -1 4.93852e-006 -1 0 0 0 0 1 -1 0 0 0 0 1 -1 0 0 0 0 -1 -1 0 0 0 0 -1 -0.861333 0 0.508042 0 0 1 -0.861333 0 0.508042 0 0 1 0 0 -1 0.747171 0 -0.664632 0 0 -1 0.747171 0 -0.664632 -0.861333 0 0.508042 -0.861333 0 0.508042 0.747171 0 -0.664632 0.747171 0 -0.664632 7.56172e-006 1 -6.27977e-006 -3.05188e-006 -1 8.4771e-006 0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 0.382672 0.923884 0 0.923884 0.382672 0 0.382672 0.923884 0 0.382672 0.923884 0 0.923884 0.382672 0 0.923884 -0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 -0.382672 0 0.382672 -0.923884 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.382672 -0.923884 0 -0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.923884 -0.382672 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.923884 -0.382672 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 -0.382672 0.923884 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.382672 0.923884 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.923884 0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 0.382672 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0.707083 -0.70713 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.707083 -0.70713 0 0.258797 -0.965932 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.258797 -0.965932 0 -0.258797 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.707083 -0.70713 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.707083 -0.70713 0 -0.965932 -0.258797 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.965932 -0.258797 0 -0.965932 0.258797 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.965932 0.258797 0 -0.70713 0.707083 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.70713 0.707083 0 -0.258797 0.965932 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.258797 0.965932 0 0.258797 0.965932 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0.258797 0.965932 0 0.707083 0.70713 0 0.258797 0.965932 0 0.258797 0.965932 0 0.707083 0.70713 0 0.965932 0.258797 0 0.707083 0.70713 0 0.707083 0.70713 0 0.965932 0.258797 0 0.965932 -0.258797 0 0.965932 0.258797 0 0.965932 0.258797 0 0.965932 -0.258797 0 -1 0 0 0 0 1 -1 0 0 0 0 1 -1 0 0 0 0 -1 -1 0 0 0 0 -1 -0.861333 0 0.508042 0 0 1 -0.861333 0 0.508042 0 0 1 0 0 -1 0.747171 0 -0.664632 0 0 -1 0.747171 0 -0.664632 -0.861333 0 0.508042 -0.861333 0 0.508042 0.747171 0 -0.664632 0.747171 0 -0.664632 4.42697e-006 1 -5.60915e-006 -1.29224e-006 -1 4.93852e-006 -0.587756 0 -0.809038 -0.587756 0 -0.809038 -0.587756 0 -0.809038 -0.587756 0 -0.809038 -0.861333 0 0.508042 -0.861333 0 0.508042 -0.861333 0 0.508042 -0.861333 0 0.508042 0.587756 0 0.809038 0.587756 0 0.809038 0.587756 0 0.809038 0.587756 0 0.809038 0.934661 0 -0.355541 1 0 0 1 0 0 0.934661 0 -0.355541 0.747171 0 -0.664632 0.934661 0 -0.355541 0.934661 0 -0.355541 0.747171 0 -0.664632 0.0498367 0 -0.998757 0.478225 0 -0.878237 0.478225 0 -0.878237 0.0498367 0 -0.998757 -0.388409 0 -0.921487 0.0498367 0 -0.998757 0.0498367 0 -0.998757 -0.388409 0 -0.921487 -0.749794 0 -0.661672 -0.388409 0 -0.921487 -0.388409 0 -0.921487 -0.749794 0 -0.661672 -0.96263 0 -0.270821 -0.749794 0 -0.661672 -0.749794 0 -0.661672 -0.96263 0 -0.270821 -0.998757 0 -0.0498367 -0.96263 0 -0.270821 -0.96263 0 -0.270821 -0.998757 0 -0.0498367 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.478225 0 -0.878237 0.81195 0 -0.583728 0.81195 0 -0.583728 0.478225 0 -0.878237 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.81195 0 -0.583728 0.921487 0 -0.388409 0.921487 0 -0.388409 0.81195 0 -0.583728 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.984813 0 0.17362 -0.984813 0 0.17362 -0.984813 0 0.17362 -0.984813 0 0.17362 0.17362 0 0.984813 0.17362 0 0.984813 0.17362 0 0.984813 0.17362 0 0.984813 0.984813 0 -0.17362 0.984813 0 -0.17362 0.984813 0 -0.17362 0.984813 0 -0.17362 0.0498367 0 -0.998757 0.478225 0 -0.878237 0.478225 0 -0.878237 0.0498367 0 -0.998757 -0.388409 0 -0.921487 0.0498367 0 -0.998757 0.0498367 0 -0.998757 -0.388409 0 -0.921487 -0.749794 0 -0.661672 -0.388409 0 -0.921487 -0.388409 0 -0.921487 -0.749794 0 -0.661672 -0.96263 0 -0.270821 -0.749794 0 -0.661672 -0.749794 0 -0.661672 -0.96263 0 -0.270821 -0.998757 0 -0.0498367 -0.96263 0 -0.270821 -0.96263 0 -0.270821 -0.998757 0 -0.0498367 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.478225 0 -0.878237 0.81195 0 -0.583728 0.81195 0 -0.583728 0.478225 0 -0.878237 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.81195 0 -0.583728 0.921487 0 -0.388409 0.921487 0 -0.388409 0.81195 0 -0.583728 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.984813 0 0.17362 -0.984813 0 0.17362 -0.984813 0 0.17362 -0.984813 0 0.17362 0.17362 0 0.984813 0.17362 0 0.984813 0.17362 0 0.984813 0.17362 0 0.984813 0.984813 0 -0.17362 0.984813 0 -0.17362 0.984813 0 -0.17362 0.984813 0 -0.17362 -0.0498367 0 0.998757 -0.478225 0 0.878237 -0.478225 0 0.878237 -0.0498367 0 0.998757 0.388409 0 0.921487 -0.0498367 0 0.998757 -0.0498367 0 0.998757 0.388409 0 0.921487 0.749794 0 0.661672 0.388409 0 0.921487 0.388409 0 0.921487 0.749794 0 0.661672 0.96263 0 0.270821 0.749794 0 0.661672 0.749794 0 0.661672 0.96263 0 0.270821 0.998757 0 0.0498367 0.96263 0 0.270821 0.96263 0 0.270821 0.998757 0 0.0498367 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.478225 0 0.878237 -0.81195 0 0.583728 -0.81195 0 0.583728 -0.478225 0 0.878237 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.81195 0 0.583728 -0.921487 0 0.388409 -0.921487 0 0.388409 -0.81195 0 0.583728 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.984813 0 -0.17362 0.984813 0 -0.17362 0.984813 0 -0.17362 0.984813 0 -0.17362 -0.17362 0 -0.984813 -0.17362 0 -0.984813 -0.17362 0 -0.984813 -0.17362 0 -0.984813 -0.984813 0 0.17362 -0.984813 0 0.17362 -0.984813 0 0.17362 -0.984813 0 0.17362 -0.0498367 0 0.998757 -0.478225 0 0.878237 -0.478225 0 0.878237 -0.0498367 0 0.998757 0.388409 0 0.921487 -0.0498367 0 0.998757 -0.0498367 0 0.998757 0.388409 0 0.921487 0.749794 0 0.661672 0.388409 0 0.921487 0.388409 0 0.921487 0.749794 0 0.661672 0.96263 0 0.270821 0.749794 0 0.661672 0.749794 0 0.661672 0.96263 0 0.270821 0.998757 0 0.0498367 0.96263 0 0.270821 0.96263 0 0.270821 0.998757 0 0.0498367 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.478225 0 0.878237 -0.81195 0 0.583728 -0.81195 0 0.583728 -0.478225 0 0.878237 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.81195 0 0.583728 -0.921487 0 0.388409 -0.921487 0 0.388409 -0.81195 0 0.583728 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.984813 0 -0.17362 0.984813 0 -0.17362 0.984813 0 -0.17362 0.984813 0 -0.17362 -0.17362 0 -0.984813 -0.17362 0 -0.984813 -0.17362 0 -0.984813 -0.17362 0 -0.984813 -0.984813 0 0.17362 -0.984813 0 0.17362 -0.984813 0 0.17362 -0.984813 0 0.17362 0.348094 0 0.93746 0.587756 0 0.809038 0.587756 0 0.809038 0.348094 0 0.93746 0.0827052 0 0.996574 0.348094 0 0.93746 0.348094 0 0.93746 0.0827052 0 0.996574 -0.808994 0 0.587817 -0.808994 0 0.587817 -0.808994 0 0.587817 -0.808994 0 0.587817 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.587756 0 -0.809038 -0.587756 0 -0.809038 -0.587756 0 -0.809038 -0.587756 0 -0.809038 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0.963483 0 -0.267769 0.856584 0 -0.516007 0.856584 0 -0.516007 0.963483 0 -0.267769 1 0 0 0.963483 0 -0.267769 0.963483 0 -0.267769 1 0 0 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.445479 0.866046 -0.226966 -0.771658 0.499985 -0.393139 -0.771658 0.499985 -0.393139 -0.445479 0.866046 -0.226966 0 1 0 -0.445479 0.866046 -0.226966 -0.445479 0.866046 -0.226966 0 1 0 0.445479 0.866046 0.226966 0 1 0 0 1 0 0.445479 0.866046 0.226966 0.771658 0.499985 0.393139 0.445479 0.866046 0.226966 0.445479 0.866046 0.226966 0.771658 0.499985 0.393139 0.891021 0 0.453963 0.771658 0.499985 0.393139 0.771658 0.499985 0.393139 0.891021 0 0.453963 0.771658 -0.499985 0.393139 0.891021 0 0.453963 0.891021 0 0.453963 0.771658 -0.499985 0.393139 0.445479 -0.866046 0.226966 0.771658 -0.499985 0.393139 0.771658 -0.499985 0.393139 0.445479 -0.866046 0.226966 0 -1 0 0.445479 -0.866046 0.226966 0.445479 -0.866046 0.226966 0 -1 0 -0.445479 -0.866046 -0.226966 0 -1 0 0 -1 0 -0.445479 -0.866046 -0.226966 -0.771658 -0.499985 -0.393139 -0.445479 -0.866046 -0.226966 -0.445479 -0.866046 -0.226966 -0.771658 -0.499985 -0.393139 -0.891021 0 -0.453963 -0.771658 -0.499985 -0.393139 -0.771658 -0.499985 -0.393139 -0.891021 0 -0.453963 -0.771658 0.499985 -0.393139 -0.891021 0 -0.453963 -0.891021 0 -0.453963 -0.771658 0.499985 -0.393139 -0.891021 0 -0.453963 -0.771658 0.499985 -0.393139 -0.771658 0.499985 -0.393139 -0.891021 0 -0.453963 -0.771658 0.499985 -0.393139 -0.445479 0.866046 -0.226966 -0.445479 0.866046 -0.226966 -0.771658 0.499985 -0.393139 -0.445479 0.866046 -0.226966 0 1 0 0 1 0 -0.445479 0.866046 -0.226966 0 1 0 0.445479 0.866046 0.226966 0.445479 0.866046 0.226966 0 1 0 0.445479 0.866046 0.226966 0.771658 0.499985 0.393139 0.771658 0.499985 0.393139 0.445479 0.866046 0.226966 0.771658 0.499985 0.393139 0.891021 0 0.453963 0.891021 0 0.453963 0.771658 0.499985 0.393139 0.891021 0 0.453963 0.771658 -0.499985 0.393139 0.771658 -0.499985 0.393139 0.891021 0 0.453963 0.771658 -0.499985 0.393139 0.445479 -0.866046 0.226966 0.445479 -0.866046 0.226966 0.771658 -0.499985 0.393139 0.445479 -0.866046 0.226966 0 -1 0 0 -1 0 0.445479 -0.866046 0.226966 0 -1 0 -0.445479 -0.866046 -0.226966 -0.445479 -0.866046 -0.226966 0 -1 0 -0.445479 -0.866046 -0.226966 -0.771658 -0.499985 -0.393139 -0.771658 -0.499985 -0.393139 -0.445479 -0.866046 -0.226966 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.453963 0 0.891021 -0.771658 -0.499985 -0.393139 -0.891021 0 -0.453963 -0.891021 0 -0.453963 -0.771658 -0.499985 -0.393139 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 0.0827052 0 0.996574 0.348094 0 0.93746 0.348094 0 0.93746 0.0827052 0 0.996574 -0.808994 0 0.587817 -0.808994 0 0.587817 -0.808994 0 0.587817 -0.808994 0 0.587817 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0.348094 0 0.93746 0.587756 0 0.809038 0.587756 0 0.809038 0.348094 0 0.93746 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.587756 0 -0.809038 -0.587756 0 -0.809038 -0.587756 0 -0.809038 -0.587756 0 -0.809038 -1 0 0 -0.866034 0 -0.499985 -1 0 0 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 0.499985 -0.866034 0 -0.499985 -0.866034 0 0.499985 -0.499985 0 -0.866034 0 0 -1 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.499985 0 -0.866034 0 0 -1 -0.866034 0 0.499985 -0.499985 0 0.866034 0 0 -1 0.499985 0 -0.866034 0 0 1 0 0 -1 0.499985 0 -0.866034 0 0 1 0.499985 0 -0.866034 0.866034 0 -0.499985 0 0 1 0.499985 0 0.866034 0.499985 0 -0.866034 0.866034 0 -0.499985 0 0 1 0.499985 0 0.866034 0.866034 0 -0.499985 0.866034 0 0.499985 0.866034 0 -0.499985 0.866034 0 0.499985 0.866034 0 0.499985 1 0 0 0.866034 0 0.499985 1 0 0 0.5 0 -0.866025 0.866025 1.17697e-013 -0.5 1 1.17697e-013 0 0.866026 -1.17697e-013 0.5 0.5 0 0.866026 0 -5.88486e-014 1 -0.5 -5.88486e-014 0.866025 -0.866025 2.35394e-013 0.5 -1 -1.17697e-013 0 -0.866025 -1.17697e-013 -0.5 -0.5 0 -0.866025 2.62256e-007 2.94243e-014 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0.866034 -0.499985 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0 -1 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0 -1 0 -0.258797 -0.965932 0 0 -1 0 0 -1 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.707083 -0.70713 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -1 0 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -1 0 0 -0.965932 0.258797 0 -1 0 0 -1 0 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.70713 0.707083 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.70713 0.707083 0 -0.499985 0.866034 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.499985 0.866034 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.258797 0.965932 0 0 1 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0 1 0 0.258797 0.965932 0 0 1 0 0 1 0 0.258797 0.965932 0 0.499985 0.866034 0 0.258797 0.965932 0 0.258797 0.965932 0 0.499985 0.866034 0 0.70713 0.707083 0 0.499985 0.866034 0 0.499985 0.866034 0 0.70713 0.707083 0 0.866034 0.499985 0 0.70713 0.707083 0 0.70713 0.707083 0 0.866034 0.499985 0 0.965932 0.258797 0 0.866034 0.499985 0 0.866034 0.499985 0 0.965932 0.258797 0 1 0 0 0.965932 0.258797 0 0.965932 0.258797 0 1 0 0 0.965932 -0.258797 0 1 0 0 1 0 0 0.965932 -0.258797 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.866034 0 -0.499985 0.866034 0 -0.499985 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 0 0 1 0 0 1 0 0 1 0 0 1 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 1 0 0 1 0 0 1 0 0 1 0 0 0.866034 0 -0.499985 0.866034 0 -0.499985 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0 0 1 0 0 1 0 0 1 0 0 1 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.866034 0 -0.499985 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -1 0 0 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -1 0 0 -0.866034 0 0.499985 -1 0 0 -1 0 0 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.499985 0 0.866034 0 0 1 -0.499985 0 0.866034 -0.499985 0 0.866034 0 0 1 0.499985 0 0.866034 0 0 1 0 0 1 0.499985 0 0.866034 0.866034 0 0.499985 0.499985 0 0.866034 0.499985 0 0.866034 0.866034 0 0.499985 1 0 0 0.866034 0 0.499985 0.866034 0 0.499985 1 0 0 0.866034 0 -0.499985 1 0 0 1 0 0 0.866034 0 -0.499985 0.499985 0 -0.866034 0.866034 0 -0.499985 0.866034 0 -0.499985 0.499985 0 -0.866034 0 0 -1 0.499985 0 -0.866034 0.499985 0 -0.866034 0 0 -1 -0.499985 0 -0.866034 0 0 -1 0 0 -1 -0.499985 0 -0.866034 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.866034 0 -0.499985 0.499985 0 -0.866034 0.499985 0 -0.866034 0.866034 0 -0.499985 1 0 0 0.866034 0 -0.499985 0.866034 0 -0.499985 1 0 0 0.866034 0 0.499985 1 0 0 1 0 0 0.866034 0 0.499985 0.499985 0 0.866034 0.866034 0 0.499985 0.866034 0 0.499985 0.499985 0 0.866034 0 0 1 0.499985 0 0.866034 0.499985 0 0.866034 0 0 1 -0.499985 0 0.866034 0 0 1 0 0 1 -0.499985 0 0.866034 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.866034 0 0.499985 -1 0 0 -0.866034 0 0.499985 -0.866034 0 0.499985 -1 0 0 -0.866034 0 -0.499985 -1 0 0 -1 0 0 -0.866034 0 -0.499985 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.499985 0 -0.866034 0 0 -1 -0.499985 0 -0.866034 -0.499985 0 -0.866034 0 0 -1 0.499985 0 -0.866034 0 0 -1 0 0 -1 0.499985 0 -0.866034 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.866034 0 -0.499985 0.499985 0 -0.866034 0.499985 0 -0.866034 0.866034 0 -0.499985 1 0 0 0.866034 0 -0.499985 0.866034 0 -0.499985 1 0 0 0.866034 0 0.499985 1 0 0 1 0 0 0.866034 0 0.499985 0.499985 0 0.866034 0.866034 0 0.499985 0.866034 0 0.499985 0.499985 0 0.866034 0 0 1 0.499985 0 0.866034 0.499985 0 0.866034 0 0 1 -0.499985 0 0.866034 0 0 1 0 0 1 -0.499985 0 0.866034 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.866034 0 0.499985 -1 0 0 -0.866034 0 0.499985 -0.866034 0 0.499985 -1 0 0 -0.866034 0 -0.499985 -1 0 0 -1 0 0 -0.866034 0 -0.499985 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.499985 0 -0.866034 0 0 -1 -0.499985 0 -0.866034 -0.499985 0 -0.866034 0 0 -1 0.499985 0 -0.866034 0 0 -1 0 0 -1 0.499985 0 -0.866034 - - - - - - - - - - - - - - -

0 0 1 1 2 2 3 3

-

4 4 5 5 6 6 7 7

-

8 8 9 9 10 10 11 11

-

12 12 13 13 14 14 15 15

-

16 16 17 17 18 18 19 19

-

20 20 21 21 22 22 23 23

-
- - - -

24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35

-

36 36 37 37 38 38 39 39

-

40 40 41 41 42 42 43 43

-

44 44 45 45 46 46 47 47

-

48 48 49 49 50 50 51 51

-

52 52 53 53 54 54 55 55

-

56 56 57 57 58 58 59 59

-

60 60 61 61 62 62 63 63

-

64 64 65 65 66 66 67 67

-

68 68 69 69 70 70 71 71

-

72 72 73 73 74 74 75 75

-

76 76 77 77 78 78 79 79

-

80 80 81 81 82 82 83 83

-
- - - -

97 104 93 104 100 104 104 104

-

87 104 93 104 97 104 91 104

-
- - - -

101 105 95 105 99 105 103 105

-

85 105 89 105 99 105 95 105

-
- - - -

92 92 94 94 101 101 100 100

-

87 87 85 85 95 95 93 93

-

90 90 88 88 84 84 86 86

-

102 102 103 103 99 99 97 97

-

96 96 98 98 89 89 91 91

-
- - - -

118 126 114 126 121 126 125 126

-

108 126 114 126 118 126 112 126

-
- - - -

122 127 116 127 120 127 124 127

-

106 127 110 127 120 127 116 127

-
- - - -

113 114 115 116 122 123 121 122

-

108 109 106 107 116 117 114 115

-

111 112 109 110 105 106 107 108

-

123 124 124 125 120 121 118 119

-

117 118 119 120 110 111 112 113

-
- - - -

129 148 137 148 141 148 133 148

-

141 148 137 148 142 148 146 148

-
- - - -

127 149 131 149 139 149 135 149

-

143 149 135 149 139 149 145 149

-
- - - -

136 138 134 136 143 145 142 144

-

129 131 127 129 135 137 137 139

-

132 134 130 132 126 128 128 130

-

140 142 138 140 131 133 133 135

-

144 146 145 147 139 141 141 143

-
- - - -

147 150 148 151 149 152 150 153

-

151 154 152 155 153 156 154 157

-

155 158 156 159 157 160 158 161

-

159 162 160 163 161 164 162 165

-

163 166 164 167 165 168 166 169

-

167 170 168 171 169 172 170 173

-

171 174 172 175 173 176 174 177 175 178 176 179 177 180 178 181

-

179 182 180 183 181 184 182 185

-

183 186 184 187 185 188 186 189 187 190 188 191 189 192 190 193

-

191 194 192 195 193 196 194 197

-
- - - -

195 198 196 199 197 200 198 201 199 202 200 203 201 204 202 205 203 206 204 207 205 208 206 209

-

207 210 208 211 209 212 210 213

-

211 214 212 215 213 216 214 217

-

215 218 216 219 217 220 218 221

-

219 222 220 223 221 224 222 225

-

223 226 224 227 225 228 226 229

-

227 230 228 231 229 232 230 233

-

231 234 232 235 233 236 234 237

-

235 238 236 239 237 240 238 241

-

239 242 240 243 241 244 242 245

-

243 246 244 247 245 248 246 249

-

247 250 248 251 249 252 250 253

-

251 254 252 255 253 256 254 257

-
- - - -

268 278 264 278 271 278 275 278

-

258 278 264 278 268 278 262 278

-
- - - -

272 279 266 279 270 279 274 279

-

256 279 260 279 270 279 266 279

-
- - - -

263 266 265 268 272 275 271 274

-

258 261 256 259 266 269 264 267

-

261 264 259 262 255 258 257 260

-

273 276 274 277 270 273 268 271

-

267 270 269 272 260 263 262 265

-
- - - -

276 280 277 281 278 282 279 283

-

280 284 281 285 282 286 283 287

-

284 288 285 289 286 290 287 291

-

288 292 289 293 290 294 291 295

-

292 296 293 297 294 298 295 299

-
- - - -

296 300 297 301 298 302 299 303

-

300 304 301 305 302 306 303 307

-

304 308 305 309 306 310 307 311

-

308 312 309 313 310 314 311 315

-

312 316 313 317 314 318 315 319

-

316 320 317 321 318 322 319 323 320 324 321 325 322 326 323 327

-

324 328 325 329 326 330 327 331

-

328 332 329 333 330 334 331 335 332 336 333 337 334 338 335 339

-

336 340 337 341 338 342 339 343

-
- - - -

340 344 341 345 342 346 343 347

-

344 348 345 349 346 350 347 351

-

348 352 349 353 350 354 351 355

-

352 356 353 357 354 358 355 359

-

356 360 357 361 358 362 359 363

-
- - - -

360 364 361 365 362 366 363 367

-

364 368 365 369 366 370 367 371

-

368 372 369 373 370 374 371 375

-

372 376 373 377 374 378 375 379

-

376 380 377 381 378 382 379 383

-

380 384 381 385 382 386 383 387 384 388 385 389 386 390 387 391

-

388 392 389 393 390 394 391 395

-

392 396 393 397 394 398 395 399 396 400 397 401 398 402 399 403

-

400 404 401 405 402 406 403 407

-
- - - -

404 408 405 409 406 410 407 411

-

408 412 409 413 410 414 411 415

-

412 416 413 417 414 418 415 419

-

416 420 417 421 418 422 419 423

-

420 424 421 425 422 426 423 427

-
- - - -

424 428 425 429 426 430 427 431

-

428 432 429 433 430 434 431 435

-

432 436 433 437 434 438 435 439

-

436 440 437 441 438 442 439 443

-

440 444 441 445 442 446 443 447

-

444 448 445 449 446 450 447 451 448 452 449 453 450 454 451 455

-

452 456 453 457 454 458 455 459

-

456 460 457 461 458 462 459 463 460 464 461 465 462 466 463 467

-

464 468 465 469 466 470 467 471

-
- - - -

468 472 469 473 470 474 471 475

-

472 476 473 477 474 478 475 479

-

476 480 477 481 478 482 479 483

-

480 484 481 485 482 486 483 487

-

484 488 485 489 486 490 487 491

-
- - - -

488 492 489 493 490 494 491 495

-

492 496 493 497 494 498 495 499

-

496 500 497 501 498 502 499 503

-

500 504 501 505 502 506 503 507

-

504 508 505 509 506 510 507 511

-

508 512 509 513 510 514 511 515 512 516 513 517 514 518 515 519

-

516 520 517 521 518 522 519 523

-

520 524 521 525 522 526 523 527 524 528 525 529 526 530 527 531

-

528 532 529 533 530 534 531 535

-
- - - -

532 536 533 537 534 538 535 539

-

536 540 537 541 538 542 539 543

-

540 544 541 545 542 546 543 547

-

544 548 545 549 546 550 547 551

-

548 552 549 553 550 554 551 555

-
- - - -

552 556 553 557 554 558 555 559

-

556 560 557 561 558 562 559 563

-

560 564 561 565 562 566 563 567

-

564 568 565 569 566 570 567 571 568 572

-

569 573 570 574 571 575 572 576

-

573 577 574 578 575 579 576 580 577 581

-

578 582 579 583 580 584 581 585

-
- - - -

582 586 583 587 584 588 585 589

-

586 590 587 591 588 592 589 593

-

590 594 591 595 592 596 593 597

-

594 598 595 599 596 600 597 601

-

598 602 599 603 600 604 601 605

-
- - - -

602 606 603 607 604 608 605 609

-

606 610 607 611 608 612 609 613

-

610 614 611 615 612 616 613 617

-

614 618 615 619 616 620 617 621

-

618 622 619 623 620 624 621 625

-

622 626 623 627 624 628 625 629

-
- - - -

626 630 627 631 628 632 629 633 630 634 631 635 632 636 633 637 634 638 635 639 636 640 637 641

-

638 642 639 643 640 644 641 645

-

642 646 643 647 644 648 645 649

-

646 650 647 651 648 652 649 653

-

650 654 651 655 652 656 653 657

-

654 658 655 659 656 660 657 661

-

658 662 659 663 660 664 661 665

-

662 666 663 667 664 668 665 669

-

666 670 667 671 668 672 669 673

-

670 674 671 675 672 676 673 677

-

674 678 675 679 676 680 677 681

-

678 682 679 683 680 684 681 685

-

682 686 683 687 684 688 685 689

-
- - - -

686 690 687 691 688 692 689 693

-

690 694 691 695 692 696 693 697

-

694 698 695 699 696 700 697 701

-

698 702 699 703 700 704 701 705

-

702 706 703 707 704 708 705 709

-

706 710 707 711 708 712 709 713

-

710 714 711 715 712 716 713 717

-

714 718 715 719 716 720 717 721

-

718 722 719 723 720 724 721 725

-

722 726 723 727 724 728 725 729

-

726 730 727 731 728 732 729 733

-

730 734 731 735 732 736 733 737 734 738 735 739 736 740 737 741 738 742 739 743 740 744 741 745

-

742 746 743 747 744 748 745 749

-
- - - -

746 750 747 751 748 752 749 753

-

750 754 751 755 752 756 753 757

-

754 758 755 759 756 760 757 761

-

758 762 759 763 760 764 761 765

-

762 766 763 767 764 768 765 769

-
- - - -

766 770 767 771 768 772 769 773

-

770 774 771 775 772 776 773 777

-

774 778 775 779 776 780 777 781 778 782

-

779 783 780 784 781 785 782 786

-

783 787 784 788 785 789 786 790

-

787 791 788 792 789 793 790 794 791 795

-

792 796 793 797 794 798 795 799

-
- - - -

841 838 819 838 813 838 839 838

-

839 838 816 838 823 838 841 838

-
- - - -

843 839 826 839 819 839 841 839

-

841 839 823 839 828 839 843 839

-
- - - -

845 840 831 840 826 840 843 840

-

843 840 828 840 833 840 845 840

-
- - - -

844 841 827 841 831 841 845 841

-

845 841 833 841 829 841 844 841

-
- - - -

842 842 821 842 827 842 844 842

-

844 842 829 842 825 842 842 842

-
- - - -

840 843 814 843 821 843 842 843

-

842 843 825 843 817 843 840 843

-
- - - -

838 844 807 844 814 844 840 844

-

840 844 817 844 811 844 838 844

-
- - - -

836 845 801 845 807 845 838 845

-

838 845 811 845 803 845 836 845

-
- - - -

834 846 797 846 801 846 836 846

-

836 846 803 846 799 846 834 846

-
- - - -

835 847 800 847 797 847 834 847

-

834 847 799 847 802 847 835 847

-
- - - -

837 848 805 848 800 848 835 848

-

835 848 802 848 809 848 837 848

-
- - - -

839 849 813 849 805 849 837 849

-

837 849 809 849 816 849 839 849

-
- - - -

846 850 847 851 848 852 849 853 850 854 851 855 852 856 853 857 854 858 855 859 856 860 857 861 858 862 859 863 860 864 861 865 862 866 863 867 864 868 865 869 866 870 867 871 868 872 869 873

-

870 874 871 875 872 876 873 877

-

874 878 875 879 876 880 877 881

-

878 882 879 883 880 884 881 885

-

882 886 883 887 884 888 885 889

-

886 890 887 891 888 892 889 893

-

890 894 891 895 892 896 893 897

-

894 898 895 899 896 900 897 901

-

898 902 899 903 900 904 901 905

-

902 906 903 907 904 908 905 909

-

906 910 907 911 908 912 909 913

-

910 914 911 915 912 916 913 917

-

914 918 915 919 916 920 917 921

-

918 922 919 923 920 924 921 925

-

922 926 923 927 924 928 925 929

-

926 930 927 931 928 932 929 933

-

930 934 931 935 932 936 933 937

-

934 938 935 939 936 940 937 941

-

938 942 939 943 940 944 941 945

-

942 946 943 947 944 948 945 949

-

946 950 947 951 948 952 949 953

-

950 954 951 955 952 956 953 957

-

954 958 955 959 956 960 957 961

-

958 962 959 963 960 964 961 965

-

962 966 963 967 964 968 965 969

-
- - - -

966 970 967 971 968 972 969 973

-

970 974 971 975 972 976 973 977

-

974 978 975 979 976 980 977 981

-

978 982 979 983 980 984 981 985

-

982 986 983 987 984 988 985 989

-
- - - -

986 990 987 991 988 992 989 993 990 994 991 995 992 996 993 997 994 998 995 999 996 1000 997 1001

-

998 1002 999 1003 1000 1004 1001 1005

-

1002 1006 1003 1007 1004 1008 1005 1009

-

1006 1010 1007 1011 1008 1012 1009 1013

-

1010 1014 1011 1015 1012 1016 1013 1017

-

1014 1018 1015 1019 1016 1020 1017 1021

-

1018 1022 1019 1023 1020 1024 1021 1025

-

1022 1026 1023 1027 1024 1028 1025 1029

-

1026 1030 1027 1031 1028 1032 1029 1033

-

1030 1034 1031 1035 1032 1036 1033 1037

-

1034 1038 1035 1039 1036 1040 1037 1041

-

1038 1042 1039 1043 1040 1044 1041 1045

-

1042 1046 1043 1047 1044 1048 1045 1049

-
- - - -

1046 1050 1047 1051 1048 1052 1049 1053 1050 1054 1051 1055 1052 1056 1053 1057 1054 1058 1055 1059 1056 1060 1057 1061

-

1058 1062 1059 1063 1060 1064 1061 1065

-

1062 1066 1063 1067 1064 1068 1065 1069

-

1066 1070 1067 1071 1068 1072 1069 1073

-

1070 1074 1071 1075 1072 1076 1073 1077

-

1074 1078 1075 1079 1076 1080 1077 1081

-

1078 1082 1079 1083 1080 1084 1081 1085

-

1082 1086 1083 1087 1084 1088 1085 1089

-

1086 1090 1087 1091 1088 1092 1089 1093

-

1090 1094 1091 1095 1092 1096 1093 1097

-

1094 1098 1095 1099 1096 1100 1097 1101

-

1098 1102 1099 1103 1100 1104 1101 1105

-

1102 1106 1103 1107 1104 1108 1105 1109

-
- - - -

1106 1110 1107 1111 1108 1112 1109 1113 1110 1114 1111 1115 1112 1116 1113 1117 1114 1118 1115 1119 1116 1120 1117 1121

-

1118 1122 1119 1123 1120 1124 1121 1125

-

1122 1126 1123 1127 1124 1128 1125 1129

-

1126 1130 1127 1131 1128 1132 1129 1133

-

1130 1134 1131 1135 1132 1136 1133 1137

-

1134 1138 1135 1139 1136 1140 1137 1141

-

1138 1142 1139 1143 1140 1144 1141 1145

-

1142 1146 1143 1147 1144 1148 1145 1149

-

1146 1150 1147 1151 1148 1152 1149 1153

-

1150 1154 1151 1155 1152 1156 1153 1157

-

1154 1158 1155 1159 1156 1160 1157 1161

-

1158 1162 1159 1163 1160 1164 1161 1165

-

1162 1166 1163 1167 1164 1168 1165 1169

-
- - - -

1166 1170 1167 1171 1168 1172 1169 1173 1170 1174 1171 1175 1172 1176 1173 1177 1174 1178 1175 1179 1176 1180 1177 1181

-

1178 1182 1179 1183 1180 1184 1181 1185

-

1182 1186 1183 1187 1184 1188 1185 1189

-

1186 1190 1187 1191 1188 1192 1189 1193

-

1190 1194 1191 1195 1192 1196 1193 1197

-

1194 1198 1195 1199 1196 1200 1197 1201

-

1198 1202 1199 1203 1200 1204 1201 1205

-

1202 1206 1203 1207 1204 1208 1205 1209

-

1206 1210 1207 1211 1208 1212 1209 1213

-

1210 1214 1211 1215 1212 1216 1213 1217

-

1214 1218 1215 1219 1216 1220 1217 1221

-

1218 1222 1219 1223 1220 1224 1221 1225

-

1222 1226 1223 1227 1224 1228 1225 1229

-
- - - -

1226 1230 1227 1231 1228 1232 1229 1233 1230 1234 1231 1235 1232 1236 1233 1237 1234 1238 1235 1239 1236 1240 1237 1241

-

1238 1242 1239 1243 1240 1244 1241 1245

-

1242 1246 1243 1247 1244 1248 1245 1249

-

1246 1250 1247 1251 1248 1252 1249 1253

-

1250 1254 1251 1255 1252 1256 1253 1257

-

1254 1258 1255 1259 1256 1260 1257 1261

-

1258 1262 1259 1263 1260 1264 1261 1265

-

1262 1266 1263 1267 1264 1268 1265 1269

-

1266 1270 1267 1271 1268 1272 1269 1273

-

1270 1274 1271 1275 1272 1276 1273 1277

-

1274 1278 1275 1279 1276 1280 1277 1281

-

1278 1282 1279 1283 1280 1284 1281 1285

-

1282 1286 1283 1287 1284 1288 1285 1289

-
-
- - - CAT3DBagRep - - -
- - - - -356.547 -82.4997 20.9036 -391.015 -82.4997 14.8259 -362.363 -82.4997 -147.667 -327.895 -82.4997 -141.59 -327.895 -82.4997 -141.59 -362.363 -82.4997 -147.667 -362.363 82.5003 -147.667 -327.895 82.5003 -141.59 -391.015 82.5003 14.8259 -356.547 82.5003 20.9036 -327.895 82.5003 -141.59 -362.363 82.5003 -147.667 -391.015 -82.4997 14.8259 -391.015 82.5003 14.8259 -362.363 82.5003 -147.667 -362.363 -82.4997 -147.667 -391.015 82.5003 14.8259 -391.015 -82.4997 14.8259 -356.547 -82.4997 20.9036 -356.547 82.5003 20.9036 -356.547 82.5003 20.9036 -356.547 -82.4997 20.9036 -327.895 -82.4997 -141.59 -327.895 82.5003 -141.59 2.90823 -82.4997 84.2851 -31.5601 -82.4997 78.2075 -2.90811 -82.4997 -84.2858 31.5602 -82.4997 -78.2081 31.5602 -82.4997 -78.2081 -2.90811 -82.4997 -84.2858 -2.90811 82.5003 -84.2858 31.5602 82.5003 -78.2081 -31.5601 82.5003 78.2075 2.90823 82.5003 84.2851 31.5602 82.5003 -78.2081 -2.90811 82.5003 -84.2858 -31.5601 -82.4997 78.2075 -31.5601 82.5003 78.2075 -2.90811 82.5003 -84.2858 -2.90811 -82.4997 -84.2858 -31.5601 82.5003 78.2075 -31.5601 -82.4997 78.2075 2.90823 -82.4997 84.2851 2.90823 82.5003 84.2851 2.90823 82.5003 84.2851 2.90823 -82.4997 84.2851 31.5602 -82.4997 -78.2081 31.5602 82.5003 -78.2081 2.90823 0.000162 84.2851 4.82755 -41.2498 73.4001 54.0679 -41.2499 82.0826 52.1486 0 92.9676 4.82755 41.2502 73.4001 2.90823 0.000162 84.2851 52.1486 0 92.9676 54.0679 41.2501 82.0826 10.0712 71.4473 43.6618 4.82755 41.2502 73.4001 54.0679 41.2501 82.0826 59.3116 71.4471 52.3442 17.2342 82.5002 3.03851 10.0712 71.4473 43.6618 59.3116 71.4471 52.3442 66.4746 82.5001 11.7209 24.3972 71.4473 -37.5848 17.2342 82.5002 3.03851 66.4746 82.5001 11.7209 73.6376 71.4471 -28.9024 29.6408 41.2502 -67.3232 24.3972 71.4473 -37.5848 73.6376 71.4471 -28.9024 78.8812 41.2501 -58.6407 31.5602 0.000162 -78.2081 29.6408 41.2502 -67.3232 78.8812 41.2501 -58.6407 80.8006 0 -69.5257 29.6408 -41.2498 -67.3232 31.5602 0.000162 -78.2081 80.8006 0 -69.5257 78.8812 -41.2499 -58.6407 24.3972 -71.4469 -37.5849 29.6408 -41.2498 -67.3232 78.8812 -41.2499 -58.6407 73.6376 -71.447 -28.9024 17.2342 -82.4998 3.03851 24.3972 -71.4469 -37.5849 73.6376 -71.447 -28.9024 66.4746 -82.4999 11.7209 10.0712 -71.4469 43.6618 17.2342 -82.4998 3.03851 66.4746 -82.4999 11.7209 59.3116 -71.447 52.3442 4.82755 -41.2498 73.4001 10.0712 -71.4469 43.6618 59.3116 -71.447 52.3442 54.0679 -41.2499 82.0826 -354.627 -41.2497 10.0186 -349.384 -71.4468 -19.7198 -24.3971 -71.4468 37.5841 -29.6407 -41.2497 67.3224 -356.547 0.000275 20.9036 -354.627 -41.2497 10.0186 -29.6407 -41.2497 67.3224 -31.5601 0.000275 78.2075 -354.627 41.2503 10.0186 -356.547 0.000275 20.9036 -31.5601 0.000275 78.2075 -29.6407 41.2503 67.3224 -349.384 71.4474 -19.7198 -354.627 41.2503 10.0186 -29.6407 41.2503 67.3224 -24.3971 71.4474 37.5841 -342.221 82.5003 -60.3431 -349.384 71.4474 -19.7198 -24.3971 71.4474 37.5841 -17.2341 82.5003 -3.03919 -335.058 71.4474 -100.966 -342.221 82.5003 -60.3431 -17.2341 82.5003 -3.03919 -10.0711 71.4474 -43.6625 -329.814 41.2503 -130.705 -335.058 71.4474 -100.966 -10.0711 71.4474 -43.6625 -4.82742 41.2503 -73.4008 -327.895 0.000275 -141.59 -329.814 41.2503 -130.705 -4.82742 41.2503 -73.4008 -2.90811 0.000275 -84.2858 -329.814 -41.2497 -130.705 -327.895 0.000275 -141.59 -2.90811 0.000275 -84.2858 -4.82742 -41.2497 -73.4008 -335.058 -71.4468 -100.966 -329.814 -41.2497 -130.705 -4.82742 -41.2497 -73.4008 -10.0711 -71.4468 -43.6625 -342.221 -82.4997 -60.3431 -335.058 -71.4468 -100.966 -10.0711 -71.4468 -43.6625 -17.2341 -82.4997 -3.03919 -349.384 -71.4468 -19.7198 -342.221 -82.4997 -60.3431 -17.2341 -82.4997 -3.03919 -24.3971 -71.4468 37.5841 52.1486 -82.4996 92.9675 52.1486 82.5004 92.9675 80.8006 82.5004 -69.5258 80.8006 -82.4996 -69.5258 110.345 -82.4996 -64.3163 80.8006 -82.4996 -69.5258 80.8006 82.5004 -69.5258 110.345 82.5004 -64.3163 52.1486 82.5004 92.9675 81.6928 82.5004 98.1769 110.345 82.5004 -64.3163 80.8006 82.5004 -69.5258 81.6928 82.5004 98.1769 52.1486 82.5004 92.9675 52.1486 -82.4996 92.9675 81.6928 -82.4996 98.1769 81.6928 -82.4996 98.1769 52.1486 -82.4996 92.9675 80.8006 -82.4996 -69.5258 110.345 -82.4996 -64.3163 81.6928 -82.4996 98.1769 110.345 -82.4996 -64.3163 110.345 82.5004 -64.3163 81.6928 82.5004 98.1769 - - - - - - - - - - 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.17362 0 -0.984813 0.17362 0 -0.984813 0.17362 0 -0.984813 0.17362 0 -0.984813 0 1 0 0 1 0 0 1 0 0 1 0 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.17362 0 0.984813 0.984813 0 0.17362 0.984813 0 0.17362 0.984813 0 0.17362 0.984813 0 0.17362 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.17362 0 -0.984813 0.17362 0 -0.984813 0.17362 0 -0.984813 0.17362 0 -0.984813 0 1 0 0 1 0 0 1 0 0 1 0 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.17362 0 0.984813 0.984813 0 0.17362 0.984813 0 0.17362 0.984813 0 0.17362 0.984813 0 0.17362 -0.17362 0 0.984813 -0.150365 -0.499985 0.852881 -0.150365 -0.499985 0.852881 -0.17362 0 0.984813 -0.150365 0.499985 0.852881 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.150365 0.499985 0.852881 -0.0867946 0.866039 0.492386 -0.150365 0.499985 0.852881 -0.150365 0.499985 0.852881 -0.0867946 0.866039 0.492386 0 1 0 -0.0867946 0.866039 0.492386 -0.0867946 0.866039 0.492386 0 1 0 0.0868252 0.866036 -0.492386 0 1 0 0 1 0 0.0868252 0.866036 -0.492386 0.150365 0.499985 -0.852881 0.0868252 0.866036 -0.492386 0.0868252 0.866036 -0.492386 0.150365 0.499985 -0.852881 0.17362 0 -0.984813 0.150365 0.499985 -0.852881 0.150365 0.499985 -0.852881 0.17362 0 -0.984813 0.150365 -0.499985 -0.852881 0.17362 0 -0.984813 0.17362 0 -0.984813 0.150365 -0.499985 -0.852881 0.0867946 -0.866039 -0.492386 0.150365 -0.499985 -0.852881 0.150365 -0.499985 -0.852881 0.0867946 -0.866039 -0.492386 0 -1 0 0.0867946 -0.866039 -0.492386 0.0867946 -0.866039 -0.492386 0 -1 0 -0.0868252 -0.866036 0.492386 0 -1 0 0 -1 0 -0.0868252 -0.866036 0.492386 -0.150365 -0.499985 0.852881 -0.0868252 -0.866036 0.492386 -0.0868252 -0.866036 0.492386 -0.150365 -0.499985 0.852881 -0.150365 -0.499985 0.852881 -0.0867946 -0.866039 0.492386 -0.0867946 -0.866039 0.492386 -0.150365 -0.499985 0.852881 -0.17362 0 0.984813 -0.150365 -0.499985 0.852881 -0.150365 -0.499985 0.852881 -0.17362 0 0.984813 -0.150365 0.499985 0.852881 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.150365 0.499985 0.852881 -0.0867946 0.866039 0.492386 -0.150365 0.499985 0.852881 -0.150365 0.499985 0.852881 -0.0867946 0.866039 0.492386 0 1 0 -0.0867946 0.866039 0.492386 -0.0867946 0.866039 0.492386 0 1 0 0.0867946 0.866039 -0.492386 0 1 0 0 1 0 0.0867946 0.866039 -0.492386 0.150365 0.499985 -0.852881 0.0867946 0.866039 -0.492386 0.0867946 0.866039 -0.492386 0.150365 0.499985 -0.852881 0.17362 0 -0.984813 0.150365 0.499985 -0.852881 0.150365 0.499985 -0.852881 0.17362 0 -0.984813 0.150365 -0.499985 -0.852881 0.17362 0 -0.984813 0.17362 0 -0.984813 0.150365 -0.499985 -0.852881 0.0867946 -0.866039 -0.492386 0.150365 -0.499985 -0.852881 0.150365 -0.499985 -0.852881 0.0867946 -0.866039 -0.492386 0 -1 0 0.0867946 -0.866039 -0.492386 0.0867946 -0.866039 -0.492386 0 -1 0 -0.0867946 -0.866039 0.492386 0 -1 0 0 -1 0 -0.0867946 -0.866039 0.492386 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.984813 0 -0.17362 0.17362 0 -0.984813 0.17362 0 -0.984813 0.17362 0 -0.984813 0.17362 0 -0.984813 0 1 0 0 1 0 0 1 0 0 1 0 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.17362 0 0.984813 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.984813 0 0.17362 0.984813 0 0.17362 0.984813 0 0.17362 0.984813 0 0.17362 - - - - - - - - - - - - - - -

0 0 1 1 2 2 3 3

-

4 4 5 5 6 6 7 7

-

8 8 9 9 10 10 11 11

-

12 12 13 13 14 14 15 15

-

16 16 17 17 18 18 19 19

-

20 20 21 21 22 22 23 23

-
- - - -

24 24 25 25 26 26 27 27

-

28 28 29 29 30 30 31 31

-

32 32 33 33 34 34 35 35

-

36 36 37 37 38 38 39 39

-

40 40 41 41 42 42 43 43

-

44 44 45 45 46 46 47 47

-
- - - -

48 48 49 49 50 50 51 51

-

52 52 53 53 54 54 55 55

-

56 56 57 57 58 58 59 59

-

60 60 61 61 62 62 63 63

-

64 64 65 65 66 66 67 67

-

68 68 69 69 70 70 71 71

-

72 72 73 73 74 74 75 75

-

76 76 77 77 78 78 79 79

-

80 80 81 81 82 82 83 83

-

84 84 85 85 86 86 87 87

-

88 88 89 89 90 90 91 91

-

92 92 93 93 94 94 95 95

-
- - - -

96 96 97 97 98 98 99 99

-

100 100 101 101 102 102 103 103

-

104 104 105 105 106 106 107 107

-

108 108 109 109 110 110 111 111

-

112 112 113 113 114 114 115 115

-

116 116 117 117 118 118 119 119

-

120 120 121 121 122 122 123 123

-

124 124 125 125 126 126 127 127

-

128 128 129 129 130 130 131 131

-

132 132 133 133 134 134 135 135

-

136 136 137 137 138 138 139 139

-

140 140 141 141 142 142 143 143

-
- - - -

144 144 145 145 146 146 147 147

-

148 148 149 149 150 150 151 151

-

152 152 153 153 154 154 155 155

-

156 156 157 157 158 158 159 159

-

160 160 161 161 162 162 163 163

-

164 164 165 165 166 166 167 167

-
-
- - - CAT3DBagRep - - -
- - - - -356.547 -82.4997 20.9036 -391.015 -82.4997 14.8259 -362.363 -82.4997 -147.667 -327.895 -82.4997 -141.59 -327.895 -82.4997 -141.59 -362.363 -82.4997 -147.667 -362.363 82.5003 -147.667 -327.895 82.5003 -141.59 -391.015 82.5003 14.8259 -356.547 82.5003 20.9036 -327.895 82.5003 -141.59 -362.363 82.5003 -147.667 -391.015 -82.4997 14.8259 -391.015 82.5003 14.8259 -362.363 82.5003 -147.667 -362.363 -82.4997 -147.667 -391.015 82.5003 14.8259 -391.015 -82.4997 14.8259 -356.547 -82.4997 20.9036 -356.547 82.5003 20.9036 -356.547 82.5003 20.9036 -356.547 -82.4997 20.9036 -327.895 -82.4997 -141.59 -327.895 82.5003 -141.59 2.90823 -82.4997 84.2851 -31.5601 -82.4997 78.2075 -2.90811 -82.4997 -84.2858 31.5602 -82.4997 -78.2081 31.5602 -82.4997 -78.2081 -2.90811 -82.4997 -84.2858 -2.90811 82.5003 -84.2858 31.5602 82.5003 -78.2081 -31.5601 82.5003 78.2075 2.90823 82.5003 84.2851 31.5602 82.5003 -78.2081 -2.90811 82.5003 -84.2858 -31.5601 -82.4997 78.2075 -31.5601 82.5003 78.2075 -2.90811 82.5003 -84.2858 -2.90811 -82.4997 -84.2858 -31.5601 82.5003 78.2075 -31.5601 -82.4997 78.2075 2.90823 -82.4997 84.2851 2.90823 82.5003 84.2851 2.90823 82.5003 84.2851 2.90823 -82.4997 84.2851 31.5602 -82.4997 -78.2081 31.5602 82.5003 -78.2081 2.90823 0.000162 84.2851 4.82755 -41.2498 73.4001 54.0679 -41.2499 82.0826 52.1486 0 92.9676 4.82755 41.2502 73.4001 2.90823 0.000162 84.2851 52.1486 0 92.9676 54.0679 41.2501 82.0826 10.0712 71.4473 43.6618 4.82755 41.2502 73.4001 54.0679 41.2501 82.0826 59.3116 71.4471 52.3442 17.2342 82.5002 3.03851 10.0712 71.4473 43.6618 59.3116 71.4471 52.3442 66.4746 82.5001 11.7209 24.3972 71.4473 -37.5848 17.2342 82.5002 3.03851 66.4746 82.5001 11.7209 73.6376 71.4471 -28.9024 29.6408 41.2502 -67.3232 24.3972 71.4473 -37.5848 73.6376 71.4471 -28.9024 78.8812 41.2501 -58.6407 31.5602 0.000162 -78.2081 29.6408 41.2502 -67.3232 78.8812 41.2501 -58.6407 80.8006 0 -69.5257 29.6408 -41.2498 -67.3232 31.5602 0.000162 -78.2081 80.8006 0 -69.5257 78.8812 -41.2499 -58.6407 24.3972 -71.4469 -37.5849 29.6408 -41.2498 -67.3232 78.8812 -41.2499 -58.6407 73.6376 -71.447 -28.9024 17.2342 -82.4998 3.03851 24.3972 -71.4469 -37.5849 73.6376 -71.447 -28.9024 66.4746 -82.4999 11.7209 10.0712 -71.4469 43.6618 17.2342 -82.4998 3.03851 66.4746 -82.4999 11.7209 59.3116 -71.447 52.3442 4.82755 -41.2498 73.4001 10.0712 -71.4469 43.6618 59.3116 -71.447 52.3442 54.0679 -41.2499 82.0826 -354.627 -41.2497 10.0186 -349.384 -71.4468 -19.7198 -24.3971 -71.4468 37.5841 -29.6407 -41.2497 67.3224 -356.547 0.000275 20.9036 -354.627 -41.2497 10.0186 -29.6407 -41.2497 67.3224 -31.5601 0.000275 78.2075 -354.627 41.2503 10.0186 -356.547 0.000275 20.9036 -31.5601 0.000275 78.2075 -29.6407 41.2503 67.3224 -349.384 71.4474 -19.7198 -354.627 41.2503 10.0186 -29.6407 41.2503 67.3224 -24.3971 71.4474 37.5841 -342.221 82.5003 -60.3431 -349.384 71.4474 -19.7198 -24.3971 71.4474 37.5841 -17.2341 82.5003 -3.03919 -335.058 71.4474 -100.966 -342.221 82.5003 -60.3431 -17.2341 82.5003 -3.03919 -10.0711 71.4474 -43.6625 -329.814 41.2503 -130.705 -335.058 71.4474 -100.966 -10.0711 71.4474 -43.6625 -4.82742 41.2503 -73.4008 -327.895 0.000275 -141.59 -329.814 41.2503 -130.705 -4.82742 41.2503 -73.4008 -2.90811 0.000275 -84.2858 -329.814 -41.2497 -130.705 -327.895 0.000275 -141.59 -2.90811 0.000275 -84.2858 -4.82742 -41.2497 -73.4008 -335.058 -71.4468 -100.966 -329.814 -41.2497 -130.705 -4.82742 -41.2497 -73.4008 -10.0711 -71.4468 -43.6625 -342.221 -82.4997 -60.3431 -335.058 -71.4468 -100.966 -10.0711 -71.4468 -43.6625 -17.2341 -82.4997 -3.03919 -349.384 -71.4468 -19.7198 -342.221 -82.4997 -60.3431 -17.2341 -82.4997 -3.03919 -24.3971 -71.4468 37.5841 52.1486 -82.4996 92.9675 52.1486 82.5004 92.9675 80.8006 82.5004 -69.5258 80.8006 -82.4996 -69.5258 110.345 -82.4996 -64.3163 80.8006 -82.4996 -69.5258 80.8006 82.5004 -69.5258 110.345 82.5004 -64.3163 52.1486 82.5004 92.9675 81.6928 82.5004 98.1769 110.345 82.5004 -64.3163 80.8006 82.5004 -69.5258 81.6928 82.5004 98.1769 52.1486 82.5004 92.9675 52.1486 -82.4996 92.9675 81.6928 -82.4996 98.1769 81.6928 -82.4996 98.1769 52.1486 -82.4996 92.9675 80.8006 -82.4996 -69.5258 110.345 -82.4996 -64.3163 81.6928 -82.4996 98.1769 110.345 -82.4996 -64.3163 110.345 82.5004 -64.3163 81.6928 82.5004 98.1769 - - - - - - - - - - 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.17362 0 -0.984813 0.17362 0 -0.984813 0.17362 0 -0.984813 0.17362 0 -0.984813 0 1 0 0 1 0 0 1 0 0 1 0 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.17362 0 0.984813 0.984813 0 0.17362 0.984813 0 0.17362 0.984813 0 0.17362 0.984813 0 0.17362 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.17362 0 -0.984813 0.17362 0 -0.984813 0.17362 0 -0.984813 0.17362 0 -0.984813 0 1 0 0 1 0 0 1 0 0 1 0 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.17362 0 0.984813 0.984813 0 0.17362 0.984813 0 0.17362 0.984813 0 0.17362 0.984813 0 0.17362 -0.17362 0 0.984813 -0.150365 -0.499985 0.852881 -0.150365 -0.499985 0.852881 -0.17362 0 0.984813 -0.150365 0.499985 0.852881 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.150365 0.499985 0.852881 -0.0867946 0.866039 0.492386 -0.150365 0.499985 0.852881 -0.150365 0.499985 0.852881 -0.0867946 0.866039 0.492386 0 1 0 -0.0867946 0.866039 0.492386 -0.0867946 0.866039 0.492386 0 1 0 0.0868252 0.866036 -0.492386 0 1 0 0 1 0 0.0868252 0.866036 -0.492386 0.150365 0.499985 -0.852881 0.0868252 0.866036 -0.492386 0.0868252 0.866036 -0.492386 0.150365 0.499985 -0.852881 0.17362 0 -0.984813 0.150365 0.499985 -0.852881 0.150365 0.499985 -0.852881 0.17362 0 -0.984813 0.150365 -0.499985 -0.852881 0.17362 0 -0.984813 0.17362 0 -0.984813 0.150365 -0.499985 -0.852881 0.0867946 -0.866039 -0.492386 0.150365 -0.499985 -0.852881 0.150365 -0.499985 -0.852881 0.0867946 -0.866039 -0.492386 0 -1 0 0.0867946 -0.866039 -0.492386 0.0867946 -0.866039 -0.492386 0 -1 0 -0.0868252 -0.866036 0.492386 0 -1 0 0 -1 0 -0.0868252 -0.866036 0.492386 -0.150365 -0.499985 0.852881 -0.0868252 -0.866036 0.492386 -0.0868252 -0.866036 0.492386 -0.150365 -0.499985 0.852881 -0.150365 -0.499985 0.852881 -0.0867946 -0.866039 0.492386 -0.0867946 -0.866039 0.492386 -0.150365 -0.499985 0.852881 -0.17362 0 0.984813 -0.150365 -0.499985 0.852881 -0.150365 -0.499985 0.852881 -0.17362 0 0.984813 -0.150365 0.499985 0.852881 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.150365 0.499985 0.852881 -0.0867946 0.866039 0.492386 -0.150365 0.499985 0.852881 -0.150365 0.499985 0.852881 -0.0867946 0.866039 0.492386 0 1 0 -0.0867946 0.866039 0.492386 -0.0867946 0.866039 0.492386 0 1 0 0.0867946 0.866039 -0.492386 0 1 0 0 1 0 0.0867946 0.866039 -0.492386 0.150365 0.499985 -0.852881 0.0867946 0.866039 -0.492386 0.0867946 0.866039 -0.492386 0.150365 0.499985 -0.852881 0.17362 0 -0.984813 0.150365 0.499985 -0.852881 0.150365 0.499985 -0.852881 0.17362 0 -0.984813 0.150365 -0.499985 -0.852881 0.17362 0 -0.984813 0.17362 0 -0.984813 0.150365 -0.499985 -0.852881 0.0867946 -0.866039 -0.492386 0.150365 -0.499985 -0.852881 0.150365 -0.499985 -0.852881 0.0867946 -0.866039 -0.492386 0 -1 0 0.0867946 -0.866039 -0.492386 0.0867946 -0.866039 -0.492386 0 -1 0 -0.0867946 -0.866039 0.492386 0 -1 0 0 -1 0 -0.0867946 -0.866039 0.492386 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.984813 0 -0.17362 0.17362 0 -0.984813 0.17362 0 -0.984813 0.17362 0 -0.984813 0.17362 0 -0.984813 0 1 0 0 1 0 0 1 0 0 1 0 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.17362 0 0.984813 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.984813 0 0.17362 0.984813 0 0.17362 0.984813 0 0.17362 0.984813 0 0.17362 - - - - - - - - - - - - - - -

0 0 1 1 2 2 3 3

-

4 4 5 5 6 6 7 7

-

8 8 9 9 10 10 11 11

-

12 12 13 13 14 14 15 15

-

16 16 17 17 18 18 19 19

-

20 20 21 21 22 22 23 23

-
- - - -

24 24 25 25 26 26 27 27

-

28 28 29 29 30 30 31 31

-

32 32 33 33 34 34 35 35

-

36 36 37 37 38 38 39 39

-

40 40 41 41 42 42 43 43

-

44 44 45 45 46 46 47 47

-
- - - -

48 48 49 49 50 50 51 51

-

52 52 53 53 54 54 55 55

-

56 56 57 57 58 58 59 59

-

60 60 61 61 62 62 63 63

-

64 64 65 65 66 66 67 67

-

68 68 69 69 70 70 71 71

-

72 72 73 73 74 74 75 75

-

76 76 77 77 78 78 79 79

-

80 80 81 81 82 82 83 83

-

84 84 85 85 86 86 87 87

-

88 88 89 89 90 90 91 91

-

92 92 93 93 94 94 95 95

-
- - - -

96 96 97 97 98 98 99 99

-

100 100 101 101 102 102 103 103

-

104 104 105 105 106 106 107 107

-

108 108 109 109 110 110 111 111

-

112 112 113 113 114 114 115 115

-

116 116 117 117 118 118 119 119

-

120 120 121 121 122 122 123 123

-

124 124 125 125 126 126 127 127

-

128 128 129 129 130 130 131 131

-

132 132 133 133 134 134 135 135

-

136 136 137 137 138 138 139 139

-

140 140 141 141 142 142 143 143

-
- - - -

144 144 145 145 146 146 147 147

-

148 148 149 149 150 150 151 151

-

152 152 153 153 154 154 155 155

-

156 156 157 157 158 158 159 159

-

160 160 161 161 162 162 163 163

-

164 164 165 165 166 166 167 167

-
-
- - - CAT3DBagRep - - -
- - - - -30 290 670 30 290 670 30 290 570 -30 290 570 -30 280 570 -30 290 570 30 290 570 30 280 570 30 280 570 30 290 570 30 290 670 30 280 670 30 280 670 30 290 670 -30 290 670 -30 280 670 -30 280 670 -30 290 670 -30 290 570 -30 280 570 -10 290 670 -10 290 670 -8.66025 367.5 570 -8.66025 397.5 570 -8.66025 397.5 570 -5 367.5 566.34 -5 367.5 566.34 -5 397.5 566.34 -5 397.5 566.34 0 367.5 565 0 367.5 565 0 397.5 565 0 397.5 565 5 367.5 566.34 5 367.5 566.34 5 397.5 566.34 5 397.5 566.34 8.66025 367.5 570 8.66025 367.5 570 8.66025 397.5 570 8.66025 397.5 570 10 290 670 10 290 670 -10 290 575.714 -10 367.5 575 -10 367.5 575 -10 367.5 620 -10 367.5 620 -10 397.5 575 -10 397.5 575 -10 397.5 670 -10 397.5 670 -8.66025 367.5 570 10 290 575.714 10 367.5 575 10 367.5 575 10 367.5 620 10 367.5 620 10 397.5 575 10 397.5 575 10 397.5 670 10 397.5 670 -30 -290 670 -30 -290 570 30 -290 570 30 -290 670 30 -280 670 -30 -280 670 -30 -290 670 30 -290 670 30 -280 570 30 -280 670 30 -290 670 30 -290 570 -30 -280 570 30 -280 570 30 -290 570 -30 -290 570 -30 -280 670 -30 -280 570 -30 -290 570 -30 -290 670 -10 -290 670 -10 -290 670 -8.66025 -397.5 570 -8.66025 -397.5 570 -8.66025 -367.5 570 -5 -397.5 566.34 -5 -397.5 566.34 -5 -367.5 566.34 -5 -367.5 566.34 0 -397.5 565 0 -397.5 565 0 -367.5 565 0 -367.5 565 5 -397.5 566.34 5 -397.5 566.34 5 -367.5 566.34 5 -367.5 566.34 8.66025 -397.5 570 8.66025 -397.5 570 8.66025 -367.5 570 8.66025 -367.5 570 10 -290 670 10 -290 670 -10 -397.5 575 -10 -397.5 575 -10 -397.5 670 -10 -397.5 670 -10 -367.5 575 -10 -367.5 575 -10 -367.5 620 -10 -367.5 620 -10 -290 575.714 -8.66025 -367.5 570 10 -397.5 575 10 -397.5 575 10 -397.5 670 10 -397.5 670 10 -367.5 575 10 -367.5 575 10 -367.5 620 10 -367.5 620 10 -290 575.714 30 352.5 240 30 280 240 -30 280 240 -30 352.5 240 -30 352.5 190 30 352.5 190 30 280 190 -30 280 190 30 352.5 190 30 352.5 240 30 280 240 30 280 190 -30 352.5 240 30 352.5 240 30 352.5 190 -30 352.5 190 -30 280 190 -30 280 240 -30 352.5 240 -30 352.5 190 -30 352.5 240 -30 280 240 30 280 240 30 352.5 240 30 -352.5 240 -30 -352.5 240 -30 -280 240 30 -280 240 30 -352.5 190 30 -280 190 30 -280 240 30 -352.5 240 -30 -352.5 190 -30 -280 190 30 -280 190 30 -352.5 190 -30 -280 190 -30 -352.5 190 -30 -352.5 240 -30 -280 240 -30 -352.5 240 -30 -352.5 190 30 -352.5 190 30 -352.5 240 -30 -352.5 240 30 -352.5 240 30 -280 240 -30 -280 240 -195.724 212 266.067 -171.368 212 246.643 -171.368 187 246.643 -195.724 187 266.067 -209.241 212 294.135 -195.724 212 266.067 -195.724 187 266.067 -209.241 187 294.135 -209.241 212 325.288 -209.241 212 294.135 -209.241 187 294.135 -209.241 187 325.288 -195.724 212 353.355 -209.241 212 325.288 -209.241 187 325.288 -195.724 187 353.355 -171.367 212 372.779 -195.724 212 353.355 -195.724 187 353.355 -171.367 187 372.779 -140.996 212 379.711 -171.367 212 372.779 -171.367 187 372.779 -140.996 187 379.711 -10.9957 212 379.711 -140.996 212 379.711 -140.996 187 379.711 -10.9957 187 379.711 -10.9957 212 239.711 -10.9957 212 379.711 -10.9957 187 379.711 -10.9957 187 239.711 -140.996 187 239.711 -10.9957 187 239.711 -10.9957 187 379.711 -140.996 187 379.711 -171.367 187 372.779 -195.724 187 353.355 -209.241 187 325.288 -209.241 187 294.135 -195.724 187 266.067 -171.368 187 246.643 -171.368 212 246.643 -140.996 212 239.711 -140.996 187 239.711 -171.368 187 246.643 -140.996 212 239.711 -171.368 212 246.643 -195.724 212 266.067 -209.241 212 294.135 -209.241 212 325.288 -195.724 212 353.355 -171.367 212 372.779 -140.996 212 379.711 -10.9957 212 379.711 -10.9957 212 239.711 -140.996 212 239.711 -10.9957 212 239.711 -10.9957 187 239.711 -140.996 187 239.711 162.402 48 691.592 -78.4585 48 575.368 -78.4584 48 379.711 33.8747 48 239.711 -78.4587 73 575.368 -78.4585 73 379.711 -78.4584 48 379.711 -78.4585 48 575.368 162.402 73 691.592 33.8747 73 239.711 -78.4585 73 379.711 -78.4587 73 575.368 33.8747 73 239.711 162.402 73 691.592 162.402 48 691.592 33.8747 48 239.711 -140.996 73 379.711 -171.368 73 372.779 -171.368 48 372.779 -140.996 48 379.711 -171.368 73 372.779 -195.724 73 353.355 -195.724 48 353.355 -171.368 48 372.779 -195.724 73 353.355 -209.241 73 325.288 -209.241 48 325.288 -195.724 48 353.355 -209.241 73 325.288 -209.241 73 294.135 -209.241 48 294.135 -209.241 48 325.288 -209.241 73 294.135 -195.724 73 266.067 -195.724 48 266.067 -209.241 48 294.135 -195.724 73 266.067 -171.368 73 246.643 -171.368 48 246.643 -195.724 48 266.067 -171.368 73 246.643 -140.996 73 239.711 -140.996 48 239.711 -171.368 48 246.643 -78.4585 73 379.711 33.8747 73 239.711 -140.996 73 239.711 -171.368 73 246.643 -195.724 73 266.067 -209.241 73 294.135 -209.241 73 325.288 -195.724 73 353.355 -171.368 73 372.779 -140.996 73 379.711 -78.4584 48 379.711 -78.4585 73 379.711 -140.996 73 379.711 -140.996 48 379.711 33.8747 48 239.711 -78.4584 48 379.711 -140.996 48 379.711 -171.368 48 372.779 -195.724 48 353.355 -209.241 48 325.288 -209.241 48 294.135 -195.724 48 266.067 -171.368 48 246.643 -140.996 48 239.711 33.8747 73 239.711 33.8747 48 239.711 -140.996 48 239.711 -140.996 73 239.711 -163.496 217 270.74 -179.967 217 287.211 -185.996 217 309.711 -179.967 217 332.211 -163.496 217 348.682 -140.996 217 354.711 -118.496 217 348.682 -102.025 217 332.211 -95.9957 217 309.711 -102.025 217 287.211 -118.496 217 270.74 -140.996 217 264.711 -102.025 212 287.211 -118.496 212 270.74 -118.496 217 270.74 -102.025 217 287.211 -95.9957 212 309.711 -102.025 212 287.211 -102.025 217 287.211 -95.9957 217 309.711 -102.025 212 332.211 -95.9957 212 309.711 -95.9957 217 309.711 -102.025 217 332.211 -118.496 212 348.682 -102.025 212 332.211 -102.025 217 332.211 -118.496 217 348.682 -140.996 212 354.711 -118.496 212 348.682 -118.496 217 348.682 -140.996 217 354.711 -163.496 212 348.682 -140.996 212 354.711 -140.996 217 354.711 -163.496 217 348.682 -179.967 212 332.211 -163.496 212 348.682 -163.496 217 348.682 -179.967 217 332.211 -185.996 212 309.711 -179.967 212 332.211 -179.967 217 332.211 -185.996 217 309.711 -179.967 212 287.211 -185.996 212 309.711 -185.996 217 309.711 -179.967 217 287.211 -163.496 212 270.74 -179.967 212 287.211 -179.967 217 287.211 -163.496 217 270.74 -140.996 212 264.711 -163.496 212 270.74 -163.496 217 270.74 -140.996 217 264.711 -118.496 212 270.74 -140.996 212 264.711 -140.996 217 264.711 -118.496 217 270.74 -118.496 43 348.358 -140.996 43 354.387 -163.496 43 348.358 -179.967 43 331.887 -185.996 43 309.387 -179.967 43 286.887 -163.496 43 270.416 -140.996 43 264.387 -118.496 43 270.416 -102.025 43 286.887 -95.9957 43 309.387 -102.025 43 331.887 -95.9957 48 309.387 -102.025 48 331.887 -102.025 43 331.887 -95.9957 43 309.387 -102.025 48 286.887 -95.9957 48 309.387 -95.9957 43 309.387 -102.025 43 286.887 -118.496 43 270.416 -118.496 48 270.416 -102.025 48 286.887 -102.025 43 286.887 -140.996 48 264.387 -118.496 48 270.416 -118.496 43 270.416 -140.996 43 264.387 -163.496 48 270.416 -140.996 48 264.387 -140.996 43 264.387 -163.496 43 270.416 -179.967 48 286.887 -163.496 48 270.416 -163.496 43 270.416 -179.967 43 286.887 -185.996 48 309.387 -179.967 48 286.887 -179.967 43 286.887 -185.996 43 309.387 -179.967 48 331.887 -185.996 48 309.387 -185.996 43 309.387 -179.967 43 331.887 -163.496 48 348.358 -179.967 48 331.887 -179.967 43 331.887 -163.496 43 348.358 -140.996 48 354.387 -163.496 48 348.358 -163.496 43 348.358 -140.996 43 354.387 -118.496 48 348.358 -140.996 48 354.387 -140.996 43 354.387 -118.496 43 348.358 -118.496 48 348.358 -118.496 43 348.358 -102.025 43 331.887 -102.025 48 331.887 130.381 220 1061.19 130.381 275 1061.19 152.824 220 802.164 152.824 275 802.164 194.005 220 906.107 194.005 220 906.107 194.005 275 906.107 194.005 275 906.107 214.596 220 958.078 214.596 220 958.078 214.596 275 958.078 214.596 275 958.078 218.912 220 908.265 218.912 220 908.265 218.912 275 908.265 218.912 275 908.265 264.877 219.999 1072.85 264.877 219.999 1072.85 264.877 274.999 1072.85 264.877 274.999 1072.85 274.372 219.999 963.257 274.372 219.999 963.257 274.372 274.999 963.257 274.372 274.999 963.257 130.379 -275 1061.19 130.379 -220 1061.19 152.822 -275 802.164 152.823 -220 802.164 194.004 -275 906.107 194.004 -275 906.107 194.004 -220 906.107 194.004 -220 906.107 214.594 -275 958.078 214.594 -275 958.078 214.595 -220 958.078 214.595 -220 958.078 218.91 -275 908.265 218.91 -275 908.265 218.911 -220 908.265 218.911 -220 908.265 264.875 -275.001 1072.85 264.875 -275.001 1072.85 264.875 -220.001 1072.85 264.875 -220.001 1072.85 274.371 -275.001 963.257 274.371 -275.001 963.257 274.371 -220.001 963.257 274.371 -220.001 963.257 64.7656 290 1049.19 58.4192 290 1074.28 58.4192 280.001 1074.28 64.7656 280.001 1049.19 58.4192 290 1074.28 40.3771 290 1092.84 40.3771 280.001 1092.84 58.4192 280.001 1074.28 40.3771 290 1092.84 15.4739 290 1099.89 15.4739 280.001 1099.89 40.3771 280.001 1092.84 15.4739 290 1099.89 -9.61791 290 1093.54 -9.61791 280.001 1093.54 15.4739 280.001 1099.89 -9.61791 290 1093.54 -28.1748 290 1075.5 -28.1748 280.001 1075.5 -9.61791 280.001 1093.54 -28.1748 290 1075.5 -35.2245 290 1050.6 -35.2245 280.001 1050.6 -28.1748 280.001 1075.5 -35.2245 290 1050.6 -28.8782 290 1025.5 -28.8782 280.001 1025.5 -35.2245 280.001 1050.6 -28.8782 290 1025.5 -10.8361 290 1006.95 -10.8361 280.001 1006.95 -28.8782 280.001 1025.5 -10.8361 290 1006.95 14.0672 290 999.898 14.0672 280.001 999.898 -10.8361 280.001 1006.95 14.0672 290 999.898 39.1589 290 1006.24 39.1589 280.001 1006.24 14.0672 280.001 999.898 39.1589 290 1006.24 57.7158 290 1024.29 57.7158 280.001 1024.29 39.1589 280.001 1006.24 64.7656 290 1049.19 57.7158 290 1024.29 39.1589 290 1006.24 14.0672 290 999.898 -10.8361 290 1006.95 -28.8782 290 1025.5 -35.2245 290 1050.6 -28.1748 290 1075.5 -9.61791 290 1093.54 15.4739 290 1099.89 40.3771 290 1092.84 58.4192 290 1074.28 57.7158 290 1024.29 64.7656 290 1049.19 64.7656 280.001 1049.19 57.7158 280.001 1024.29 58.4192 -290 1074.28 40.3771 -290 1092.84 15.4739 -290 1099.89 -9.61791 -290 1093.54 -28.1748 -290 1075.5 -35.2245 -290 1050.6 -28.8782 -290 1025.5 -10.8361 -290 1006.95 14.0672 -290 999.898 39.1589 -290 1006.24 57.7158 -290 1024.29 64.7656 -290 1049.19 39.1589 -280.001 1006.24 57.7158 -280.001 1024.29 57.7158 -290 1024.29 39.1589 -290 1006.24 14.0672 -280.001 999.898 39.1589 -280.001 1006.24 39.1589 -290 1006.24 14.0672 -290 999.898 -10.8361 -280.001 1006.95 14.0672 -280.001 999.898 14.0672 -290 999.898 -10.8361 -290 1006.95 -28.8782 -280.001 1025.5 -10.8361 -280.001 1006.95 -10.8361 -290 1006.95 -28.8782 -290 1025.5 -35.2245 -280.001 1050.6 -28.8782 -280.001 1025.5 -28.8782 -290 1025.5 -35.2245 -290 1050.6 -28.1748 -280.001 1075.5 -35.2245 -280.001 1050.6 -35.2245 -290 1050.6 -28.1748 -290 1075.5 -9.61791 -280.001 1093.54 -28.1748 -280.001 1075.5 -28.1748 -290 1075.5 -9.61791 -290 1093.54 15.4739 -280.001 1099.89 -9.61791 -280.001 1093.54 -9.61791 -290 1093.54 15.4739 -290 1099.89 40.3771 -280.001 1092.84 15.4739 -280.001 1099.89 15.4739 -290 1099.89 40.3771 -290 1092.84 58.4192 -280.001 1074.28 40.3771 -280.001 1092.84 40.3771 -290 1092.84 58.4192 -290 1074.28 64.7656 -280.001 1049.19 58.4192 -280.001 1074.28 58.4192 -290 1074.28 64.7656 -290 1049.19 57.7158 -280.001 1024.29 64.7656 -280.001 1049.19 64.7656 -290 1049.19 57.7158 -290 1024.29 100.686 280 -61.5329 -65.1897 280 -75.9048 -77.2741 280 63.5694 -39.4167 280 66.8501 -77.2741 175 63.5694 -39.4167 175 66.8501 -39.4167 280 66.8501 -77.2741 280 63.5694 -65.1897 175 -75.9049 -77.2741 175 63.5694 -77.2741 280 63.5694 -65.1897 280 -75.9048 -77.2741 175 63.5694 -65.1897 175 -75.9049 100.686 175 -61.5329 -39.4167 175 66.8501 100.686 175 -61.5329 -65.1897 175 -75.9049 -65.1897 280 -75.9048 100.686 280 -61.5329 32.2069 175.002 1118.11 130.379 175.001 1061.19 130.379 280.001 1061.19 32.2066 280.002 1118.11 18.4227 175.003 1122.89 32.2069 175.002 1118.11 32.2066 280.002 1118.11 18.4224 280.003 1122.89 3.9732 175.002 1124.91 18.4227 175.003 1122.89 18.4224 280.003 1122.89 3.9729 280.002 1124.91 -24.7251 175.002 1120.47 3.9732 175.002 1124.91 3.9729 280.002 1124.91 -24.7254 280.002 1120.47 -127.475 175.002 1083.17 -24.7251 175.002 1120.47 -24.7254 280.002 1120.47 -127.475 280.002 1083.17 -39.4167 280 66.8501 -127.475 280.002 1083.17 -24.7254 280.002 1120.47 3.9729 280.002 1124.91 18.4224 280.003 1122.89 32.2066 280.002 1118.11 130.379 280.001 1061.19 195.204 280 313.017 100.686 280 -61.5329 195.204 175 313.017 100.686 175 -61.5328 100.686 280 -61.5329 195.204 280 313.017 130.379 175.001 1061.19 195.204 175 313.017 195.204 280 313.017 130.379 280.001 1061.19 195.204 175 313.017 130.379 175.001 1061.19 32.2069 175.002 1118.11 18.4227 175.003 1122.89 3.9732 175.002 1124.91 -24.7251 175.002 1120.47 -127.475 175.002 1083.17 -39.4164 175 66.8502 100.686 175 -61.5328 -39.4164 175 66.8502 -127.475 175.002 1083.17 -127.475 280.002 1083.17 -39.4167 280 66.8501 -95.3781 174.998 770.633 -78.4591 174.998 575.368 -78.4575 -175.002 575.369 -95.3765 -175.002 770.634 -28.6552 174.998 834.63 -95.3781 174.998 770.633 -95.3765 -175.002 770.634 -28.6536 -175.002 834.631 162.401 174.999 691.591 -28.6552 174.998 834.63 -28.6536 -175.002 834.631 162.403 -175.001 691.592 -78.4591 174.998 575.368 162.401 174.999 691.591 162.403 -175.001 691.592 -78.4575 -175.002 575.369 130.379 -280.001 1061.19 195.204 -280 313.017 195.204 -175 313.017 130.379 -175.001 1061.19 32.2066 -280.002 1118.11 130.379 -280.001 1061.19 130.379 -175.001 1061.19 32.2069 -175.002 1118.11 18.4224 -280.003 1122.89 32.2066 -280.002 1118.11 32.2069 -175.002 1118.11 18.4227 -175.003 1122.89 3.9729 -280.002 1124.91 18.4224 -280.003 1122.89 18.4227 -175.003 1122.89 3.9732 -175.002 1124.91 -24.7254 -280.002 1120.47 3.9729 -280.002 1124.91 3.9732 -175.002 1124.91 -24.7251 -175.002 1120.47 -127.475 -280.002 1083.17 -24.7254 -280.002 1120.47 -24.7251 -175.002 1120.47 -127.475 -175.002 1083.17 100.686 -175 -61.5328 -39.4164 -175 66.8502 -127.475 -175.002 1083.17 -24.7251 -175.002 1120.47 3.9732 -175.002 1124.91 18.4227 -175.003 1122.89 32.2069 -175.002 1118.11 130.379 -175.001 1061.19 195.204 -175 313.017 195.204 -280 313.017 100.686 -280 -61.5329 100.686 -175 -61.5328 195.204 -175 313.017 100.686 -280 -61.5329 195.204 -280 313.017 130.379 -280.001 1061.19 32.2066 -280.002 1118.11 18.4224 -280.003 1122.89 3.9729 -280.002 1124.91 -24.7254 -280.002 1120.47 -127.475 -280.002 1083.17 -39.4167 -280 66.8501 -39.4167 -280 66.8501 -127.475 -280.002 1083.17 -127.475 -175.002 1083.17 -39.4164 -175 66.8502 -65.1897 -280 -75.9048 -77.2741 -280 63.5694 -77.2741 -175 63.5694 -65.1897 -175 -75.9049 -39.4167 -175 66.8501 100.686 -175 -61.5329 -65.1897 -175 -75.9049 -77.2741 -175 63.5694 -77.2741 -280 63.5694 -39.4167 -280 66.8501 -39.4167 -175 66.8501 -77.2741 -175 63.5694 -39.4167 -280 66.8501 -77.2741 -280 63.5694 -65.1897 -280 -75.9048 100.686 -280 -61.5329 100.686 -280 -61.5329 -65.1897 -280 -75.9048 -65.1897 -175 -75.9049 100.686 -175 -61.5329 - - - - - - - - - - 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 1 0 0 1 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 1 0 0 1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0 1 -0.866034 0 -0.499985 -0.866034 0 -0.499985 0 1 0 -0.499985 0 -0.866034 0 -1 0 -0.499985 0 -0.866034 0 1 0 0 -1 0 0 0 -1 0 0 -1 0 1 0 0 -1 0 0.499985 0 -0.866034 0 1 0 0.499985 0 -0.866034 0 -1 0 0.866034 0 -0.499985 0 1 0 0.866034 0 -0.499985 0 0 1 0.991449 0 -0.130497 0 0.496109 -0.86826 -0.991449 0 -0.130497 0 -1 0 0 -1 0 0 0.496109 -0.86826 -0.991449 0 -0.130497 0 1 0 0 0 1 0 1 0 0 -1 0 0 0.496109 -0.86826 0 -1 0 0.991449 0 -0.130497 0 -1 0 0 0.496109 -0.86826 0 1 0 0.991449 0 -0.130497 0 0 1 0 1 0 -1 6.68644e-009 -7.29741e-009 0.991445 0 -0.130526 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 1 0 0 1 0 0 1 0 0 1 0 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0 1 -0.866034 0 -0.499985 0 -1 0 -0.866034 0 -0.499985 -0.499985 0 -0.866034 0 -1 0 -0.499985 0 -0.866034 0 1 0 0 -1 0 0 0 -1 0 0 -1 0 1 0 0 -1 0 0.499985 0 -0.866034 0 1 0 0.499985 0 -0.866034 0 -1 0 0.866034 0 -0.499985 0 1 0 0.866034 0 -0.499985 0 0 1 0.991449 0 -0.130497 -0.991449 0 -0.130497 0 -1 0 0 -1 0 0 0 1 -0.991449 0 -0.130497 0 1 0 0 -0.496109 -0.86826 0 1 0 0 -0.496109 -0.86826 0 1 0 0 -1 0 0.991449 0 -0.130497 0 -1 0 0 0 1 0 1 0 0.991449 0 -0.130497 0 -0.496109 -0.86826 0 1 0 0 -0.496109 -0.86826 -1 -6.68644e-009 -7.29741e-009 0.991445 0 -0.130526 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 1 0 0 1 0 0 1 0 0 1 0 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 -0.781853 0 -0.623463 -0.433882 0 -0.90097 -0.433882 0 -0.90097 -0.781853 0 -0.623463 -0.97493 0 -0.22251 -0.781853 0 -0.623463 -0.781853 0 -0.623463 -0.97493 0 -0.22251 -0.97493 0 0.22251 -0.97493 0 -0.22251 -0.97493 0 -0.22251 -0.97493 0 0.22251 -0.781853 0 0.623463 -0.97493 0 0.22251 -0.97493 0 0.22251 -0.781853 0 0.623463 -0.433882 0 0.90097 -0.781853 0 0.623463 -0.781853 0 0.623463 -0.433882 0 0.90097 -0.111942 0 0.993715 -0.433882 0 0.90097 -0.433882 0 0.90097 -0.111942 0 0.993715 0 0 1 -0.111942 0 0.993715 -0.111942 0 0.993715 0 0 1 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.433882 0 -0.90097 -0.111942 0 -0.993715 -0.111942 0 -0.993715 -0.433882 0 -0.90097 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.111942 0 -0.993715 0 0 -1 0 0 -1 -0.111942 0 -0.993715 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0.961853 0 -0.273568 0.961853 0 -0.273568 0.961853 0 -0.273568 0.961853 0 -0.273568 -0.111942 0 0.993715 -0.433882 0 0.90097 -0.433882 0 0.90097 -0.111942 0 0.993715 -0.433882 0 0.90097 -0.781853 0 0.623463 -0.781853 0 0.623463 -0.433882 0 0.90097 -0.781853 0 0.623463 -0.97493 0 0.22251 -0.97493 0 0.22251 -0.781853 0 0.623463 -0.97493 0 0.22251 -0.97493 0 -0.22251 -0.97493 0 -0.22251 -0.97493 0 0.22251 -0.97493 0 -0.22251 -0.781853 0 -0.623463 -0.781853 0 -0.623463 -0.97493 0 -0.22251 -0.781853 0 -0.623463 -0.433882 0 -0.90097 -0.433882 0 -0.90097 -0.781853 0 -0.623463 -0.433882 0 -0.90097 -0.111942 0 -0.993715 -0.111942 0 -0.993715 -0.433882 0 -0.90097 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 -0.111942 0 0.993715 -0.111942 0 0.993715 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -1 0 0 -1 -0.111942 0 -0.993715 -0.111942 0 -0.993715 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.866034 0 -0.499985 0.499985 0 -0.866034 0.499985 0 -0.866034 0.866034 0 -0.499985 1 0 0 0.866034 0 -0.499985 0.866034 0 -0.499985 1 0 0 0.866034 0 0.499985 1 0 0 1 0 0 0.866034 0 0.499985 0.499985 0 0.866034 0.866034 0 0.499985 0.866034 0 0.499985 0.499985 0 0.866034 0 0 1 0.499985 0 0.866034 0.499985 0 0.866034 0 0 1 -0.499985 0 0.866034 0 0 1 0 0 1 -0.499985 0 0.866034 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.866034 0 0.499985 -1 0 0 -0.866034 0 0.499985 -0.866034 0 0.499985 -1 0 0 -0.866034 0 -0.499985 -1 0 0 -1 0 0 -0.866034 0 -0.499985 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.499985 0 -0.866034 0 0 -1 -0.499985 0 -0.866034 -0.499985 0 -0.866034 0 0 -1 0.499985 0 -0.866034 0 0 -1 0 0 -1 0.499985 0 -0.866034 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 0.866034 0 0.499985 0.866034 0 0.499985 1 0 0 0.866034 0 -0.499985 1 0 0 1 0 0 0.866034 0 -0.499985 0.499985 0 -0.866034 0.499985 0 -0.866034 0.866034 0 -0.499985 0.866034 0 -0.499985 0 0 -1 0.499985 0 -0.866034 0.499985 0 -0.866034 0 0 -1 -0.499985 0 -0.866034 0 0 -1 0 0 -1 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -1 0 0 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -1 0 0 -0.866034 0 0.499985 -1 0 0 -1 0 0 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.499985 0 0.866034 0 0 1 -0.499985 0 0.866034 -0.499985 0 0.866034 0 0 1 0.499985 0 0.866034 0 0 1 0 0 1 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.866034 0 0.499985 0.866034 0 0.499985 -0.0863063 0 0.996269 -0.0863063 0 0.996269 0.929696 0 -0.368328 0.929696 0 -0.368328 0.0863063 0 -0.996269 0.929696 0 -0.368328 0.0863063 0 -0.996269 0.929696 0 -0.368328 0.0863063 0 -0.996269 0.996269 0 0.0863063 0.0863063 0 -0.996269 0.996269 0 0.0863063 0.0863063 0 -0.996269 0.996269 0 0.0863063 0.0863063 0 -0.996269 0.996269 0 0.0863063 -0.0863063 0 0.996269 0.996269 0 0.0863063 -0.0863063 0 0.996269 0.996269 0 0.0863063 0.0863063 0 -0.996269 0.996269 0 0.0863063 0.0863063 0 -0.996269 0.996269 0 0.0863063 -2.93446e-006 -1 -1.26534e-008 2.83039e-006 1 5.14806e-008 -0.0863063 0 0.996269 -0.0863063 0 0.996269 0.929696 0 -0.368328 0.929696 0 -0.368328 0.0863063 0 -0.996269 0.929696 0 -0.368328 0.0863063 0 -0.996269 0.929696 0 -0.368328 0.0863063 0 -0.996269 0.996269 0 0.0863063 0.0863063 0 -0.996269 0.996269 0 0.0863063 0.0863063 0 -0.996269 0.996269 0 0.0863063 0.0863063 0 -0.996269 0.996269 0 0.0863063 -0.0863063 0 0.996269 0.996269 0 0.0863063 -0.0863063 0 0.996269 0.996269 0 0.0863063 0.0863063 0 -0.996269 0.996269 0 0.0863063 0.0863063 0 -0.996269 0.996269 0 0.0863063 2.93446e-006 1 1.26531e-008 -2.83039e-006 -1 -5.14806e-008 0.999901 0 -0.0140385 0.872985 0 0.487747 0.872985 0 0.487747 0.999901 0 -0.0140385 0.872985 0 0.487747 0.512131 0 0.858907 0.512131 0 0.858907 0.872985 0 0.487747 0.512131 0 0.858907 0.0140385 0 0.999901 0.0140385 0 0.999901 0.512131 0 0.858907 0.0140385 0 0.999901 -0.487747 0 0.872985 -0.487747 0 0.872985 0.0140385 0 0.999901 -0.487747 0 0.872985 -0.858907 0 0.512131 -0.858907 0 0.512131 -0.487747 0 0.872985 -0.858907 0 0.512131 -0.999901 0 0.0140385 -0.999901 0 0.0140385 -0.858907 0 0.512131 -0.999901 0 0.0140385 -0.872985 0 -0.487747 -0.872985 0 -0.487747 -0.999901 0 0.0140385 -0.872985 0 -0.487747 -0.512131 0 -0.858907 -0.512131 0 -0.858907 -0.872985 0 -0.487747 -0.512131 0 -0.858907 -0.0140385 0 -0.999901 -0.0140385 0 -0.999901 -0.512131 0 -0.858907 -0.0140385 0 -0.999901 0.487747 0 -0.872985 0.487747 0 -0.872985 -0.0140385 0 -0.999901 0.487747 0 -0.872985 0.858907 0 -0.512131 0.858907 0 -0.512131 0.487747 0 -0.872985 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.858907 0 -0.512131 0.999901 0 -0.0140385 0.999901 0 -0.0140385 0.858907 0 -0.512131 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.487747 0 -0.872985 0.858907 0 -0.512131 0.858907 0 -0.512131 0.487747 0 -0.872985 -0.0140385 0 -0.999901 0.487747 0 -0.872985 0.487747 0 -0.872985 -0.0140385 0 -0.999901 -0.512131 0 -0.858907 -0.0140385 0 -0.999901 -0.0140385 0 -0.999901 -0.512131 0 -0.858907 -0.872985 0 -0.487747 -0.512131 0 -0.858907 -0.512131 0 -0.858907 -0.872985 0 -0.487747 -0.999901 0 0.0140385 -0.872985 0 -0.487747 -0.872985 0 -0.487747 -0.999901 0 0.0140385 -0.858907 0 0.512131 -0.999901 0 0.0140385 -0.999901 0 0.0140385 -0.858907 0 0.512131 -0.487747 0 0.872985 -0.858907 0 0.512131 -0.858907 0 0.512131 -0.487747 0 0.872985 0.0140385 0 0.999901 -0.487747 0 0.872985 -0.487747 0 0.872985 0.0140385 0 0.999901 0.512131 0 0.858907 0.0140385 0 0.999901 0.0140385 0 0.999901 0.512131 0 0.858907 0.872985 0 0.487747 0.512131 0 0.858907 0.512131 0 0.858907 0.872985 0 0.487747 0.999901 0 -0.0140385 0.872985 0 0.487747 0.872985 0 0.487747 0.999901 0 -0.0140385 0.858907 0 -0.512131 0.999901 0 -0.0140385 0.999901 0 -0.0140385 0.858907 0 -0.512131 0 1 0 0 1 0 0 1 0 0 1 0 -0.0863063 0 0.996269 -0.0863063 0 0.996269 -0.0863063 0 0.996269 -0.0863063 0 0.996269 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.0863063 0 -0.996269 0.0863063 0 -0.996269 0.0863063 0 -0.996269 0.0863063 0 -0.996269 0.416486 0 0.909142 0.501541 0 0.865134 0.501541 0 0.865134 0.416486 0 0.909142 0.234138 0 0.972203 0.416486 0 0.909142 0.416486 0 0.909142 0.234138 0 0.972203 -0.00726341 0 0.999974 0.234138 0 0.972203 0.234138 0 0.972203 -0.00726341 0 0.999974 -0.248238 0 0.968699 -0.00726341 0 0.999974 -0.00726341 0 0.999974 -0.248238 0 0.968699 -0.341227 0 0.939981 -0.248238 0 0.968699 -0.248238 0 0.968699 -0.341227 0 0.939981 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.996771 0 -0.0802942 0.969607 0 -0.244667 0.969607 0 -0.244667 0.996771 0 -0.0802942 0.996269 0 0.0863063 0.996771 0 -0.0802942 0.996771 0 -0.0802942 0.996269 0 0.0863063 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 -0.69219 0 0.721715 -0.69219 0 0.721715 -0.69219 0 0.721715 -0.69219 0 0.721715 0.599292 0 0.80053 0.599292 0 0.80053 0.599292 0 0.80053 0.599292 0 0.80053 0.434584 0 -0.900632 0.434584 0 -0.900632 0.434584 0 -0.900632 0.434584 0 -0.900632 0.996269 0 0.0863063 0.996771 0 -0.0802942 0.996771 0 -0.0802942 0.996269 0 0.0863063 0.416486 0 0.909142 0.501541 0 0.865134 0.501541 0 0.865134 0.416486 0 0.909142 0.234138 0 0.972203 0.416486 0 0.909142 0.416486 0 0.909142 0.234138 0 0.972203 -0.00726341 0 0.999974 0.234138 0 0.972203 0.234138 0 0.972203 -0.00726341 0 0.999974 -0.248238 0 0.968699 -0.00726341 0 0.999974 -0.00726341 0 0.999974 -0.248238 0 0.968699 -0.341227 0 0.939981 -0.248238 0 0.968699 -0.248238 0 0.968699 -0.341227 0 0.939981 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.996771 0 -0.0802942 0.969607 0 -0.244667 0.969607 0 -0.244667 0.996771 0 -0.0802942 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 -0.996269 0 -0.0863063 0 1 0 0 1 0 0 1 0 0 1 0 -0.0863063 0 0.996269 -0.0863063 0 0.996269 -0.0863063 0 0.996269 -0.0863063 0 0.996269 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.0863063 0 -0.996269 0.0863063 0 -0.996269 0.0863063 0 -0.996269 0.0863063 0 -0.996269 - - - - - - - - - - - - - - -

0 0 1 1 2 2 3 3

-

4 4 5 5 6 6 7 7

-

8 8 9 9 10 10 11 11

-

12 12 13 13 14 14 15 15

-

16 16 17 17 18 18 19 19

-
- - - -

21 62 51 62 47 62 43 62

-

51 62 49 62 45 62 47 62

-
- - - -

59 63 61 63 57 63 55 63

-

61 63 42 63 53 63 57 63

-
- - - -

53 53 43 43 47 47 57 57

-

40 40 38 38 34 34 36 36

-

36 36 34 34 30 30 31 31

-

31 31 30 30 25 25 27 27

-

27 27 25 25 22 22 23 23

-

23 23 22 22 44 44 48 48

-

46 46 45 45 52 52 26 26 29 29 33 33 37 37 54 54 56 56

-

59 59 55 55 38 38 40 40

-

61 61 58 58 39 39 35 35 32 32 28 28 24 24 49 49 51 51

-

41 41 60 60 50 50 21 21

-
- - - -

62 64 63 65 64 66 65 67

-

66 68 67 69 68 70 69 71

-

70 72 71 73 72 74 73 75

-

74 76 75 77 76 78 77 79

-

78 80 79 81 80 82 81 83

-
- - - -

83 126 113 126 112 126 108 126

-

108 126 112 126 110 126 106 126

-
- - - -

116 127 120 127 122 127 118 127

-

118 127 122 127 123 127 104 127

-
- - - -

87 89 84 86 86 88 89 91

-

92 94 87 89 89 91 93 95

-

96 98 92 94 93 95 98 100

-

100 102 96 98 98 100 102 104

-

116 118 100 102 102 104 120 122

-

123 125 121 123 111 113 113 115

-

112 114 122 124 119 121 101 103 97 99 94 96 90 92 114 116 110 112

-

84 86 105 107 109 111 86 88

-

117 119 107 109 106 108 85 87 88 90 91 93 95 97 99 101 115 117

-

103 105 83 85 108 110 118 120

-
- - - -

124 128 125 129 126 130 127 131

-

128 132 129 133 130 134 131 135

-

132 136 133 137 134 138 135 139

-

136 140 137 141 138 142 139 143

-

140 144 141 145 142 146 143 147

-

144 148 145 149 146 150 147 151

-
- - - -

148 152 149 153 150 154 151 155

-

152 156 153 157 154 158 155 159

-

156 160 157 161 158 162 159 163

-

160 164 161 165 162 166 163 167

-

164 168 165 169 166 170 167 171

-

168 172 169 173 170 174 171 175

-
- - - -

172 176 173 177 174 178 175 179

-

176 180 177 181 178 182 179 183

-

180 184 181 185 182 186 183 187

-

184 188 185 189 186 190 187 191

-

188 192 189 193 190 194 191 195

-

192 196 193 197 194 198 195 199

-

196 200 197 201 198 202 199 203

-

200 204 201 205 202 206 203 207

-

204 208 205 209 206 210 207 211 208 212 209 213 210 214 211 215 212 216 213 217

-

214 218 215 219 216 220 217 221

-

218 222 219 223 220 224 221 225 222 226 223 227 224 228 225 229 226 230 227 231

-

228 232 229 233 230 234 231 235

-
- - - -

232 236 233 237 234 238 235 239

-

236 240 237 241 238 242 239 243

-

240 244 241 245 242 246 243 247

-

244 248 245 249 246 250 247 251

-
- - - -

248 252 249 253 250 254 251 255

-

252 256 253 257 254 258 255 259

-

256 260 257 261 258 262 259 263

-

260 264 261 265 262 266 263 267

-

264 268 265 269 266 270 267 271

-

268 272 269 273 270 274 271 275

-

272 276 273 277 274 278 275 279

-

276 280 277 281 278 282 279 283 280 284 281 285 282 286 283 287 284 288 285 289

-

286 290 287 291 288 292 289 293

-

290 294 291 295 292 296 293 297 294 298 295 299 296 300 297 301 298 302 299 303

-

300 304 301 305 302 306 303 307

-
- - - -

304 308 305 309 306 310 307 311 308 312 309 313 310 314 311 315 312 316 313 317 314 318 315 319

-

316 320 317 321 318 322 319 323

-

320 324 321 325 322 326 323 327

-

324 328 325 329 326 330 327 331

-

328 332 329 333 330 334 331 335

-

332 336 333 337 334 338 335 339

-

336 340 337 341 338 342 339 343

-

340 344 341 345 342 346 343 347

-

344 348 345 349 346 350 347 351

-

348 352 349 353 350 354 351 355

-

352 356 353 357 354 358 355 359

-

356 360 357 361 358 362 359 363

-

360 364 361 365 362 366 363 367

-
- - - -

364 368 365 369 366 370 367 371 368 372 369 373 370 374 371 375 372 376 373 377 374 378 375 379

-

376 380 377 381 378 382 379 383

-

380 384 381 385 382 386 383 387

-

384 388 385 389 386 390 387 391

-

388 392 389 393 390 394 391 395

-

392 396 393 397 394 398 395 399

-

396 400 397 401 398 402 399 403

-

400 404 401 405 402 406 403 407

-

404 408 405 409 406 410 407 411

-

408 412 409 413 410 414 411 415

-

412 416 413 417 414 418 415 419

-

416 420 417 421 418 422 419 423

-

420 424 421 425 422 426 423 427

-
- - - -

424 452 426 452 429 452

-
- - - -

441 452 424 452 433 452 445 452

-

424 452 429 452 437 452 433 452

-
- - - -

425 453 431 453 427 453

-
- - - -

435 453 425 453 443 453 447 453

-

431 453 425 453 435 453 439 453

-
- - - -

425 429 424 428 440 444 442 446

-

441 445 445 449 447 451 443 447

-

431 435 429 433 426 430 427 431

-

436 440 428 432 430 434 438 442

-

433 437 437 441 439 443 435 439

-

432 436 434 438 446 450 444 448

-
- - - -

449 478 455 478 451 478

-
- - - -

467 478 471 478 459 478 449 478

-

449 478 459 478 463 478 455 478

-
- - - -

448 479 450 479 453 479

-
- - - -

457 479 469 479 465 479 448 479

-

453 479 461 479 457 479 448 479

-
- - - -

453 459 450 456 451 457 455 461

-

462 468 460 466 452 458 454 460

-

459 465 457 463 461 467 463 469

-

448 454 464 470 466 472 449 455

-

467 473 465 471 469 475 471 477

-

458 464 470 476 468 474 456 462

-
- - - -

472 480 473 481 474 482 475 483

-

476 484 477 485 478 486 479 487

-

480 488 481 489 482 490 483 491

-

484 492 485 493 486 494 487 495

-

488 496 489 497 490 498 491 499

-

492 500 493 501 494 502 495 503

-

496 504 497 505 498 506 499 507

-

500 508 501 509 502 510 503 511

-

504 512 505 513 506 514 507 515

-

508 516 509 517 510 518 511 519

-

512 520 513 521 514 522 515 523

-

516 524 517 525 518 526 519 527 520 528 521 529 522 530 523 531 524 532 525 533 526 534 527 535

-

528 536 529 537 530 538 531 539

-
- - - -

532 540 533 541 534 542 535 543 536 544 537 545 538 546 539 547 540 548 541 549 542 550 543 551

-

544 552 545 553 546 554 547 555

-

548 556 549 557 550 558 551 559

-

552 560 553 561 554 562 555 563

-

556 564 557 565 558 566 559 567

-

560 568 561 569 562 570 563 571

-

564 572 565 573 566 574 567 575

-

568 576 569 577 570 578 571 579

-

572 580 573 581 574 582 575 583

-

576 584 577 585 578 586 579 587

-

580 588 581 589 582 590 583 591

-

584 592 585 593 586 594 587 595

-

588 596 589 597 590 598 591 599

-
- - - -

592 600 593 601 594 602 595 603

-

596 604 597 605 598 606 599 607

-

600 608 601 609 602 610 603 611

-

604 612 605 613 606 614 607 615

-

608 616 609 617 610 618 611 619

-
- - - -

612 620 613 621 614 622 615 623

-

616 624 617 625 618 626 619 627

-

620 628 621 629 622 630 623 631

-

624 632 625 633 626 634 627 635

-

628 636 629 637 630 638 631 639

-

632 640 633 641 634 642 635 643 636 644 637 645 638 646 639 647 640 648

-

641 649 642 650 643 651 644 652

-

645 653 646 654 647 655 648 656

-

649 657 650 658 651 659 652 660 653 661 654 662 655 663 656 664 657 665

-

658 666 659 667 660 668 661 669

-
- - - -

662 670 663 671 664 672 665 673

-

666 674 667 675 668 676 669 677

-

670 678 671 679 672 680 673 681

-

674 682 675 683 676 684 677 685

-
- - - -

678 686 679 687 680 688 681 689

-

682 690 683 691 684 692 685 693

-

686 694 687 695 688 696 689 697

-

690 698 691 699 692 700 693 701

-

694 702 695 703 696 704 697 705

-

698 706 699 707 700 708 701 709

-

702 710 703 711 704 712 705 713 706 714 707 715 708 716 709 717 710 718

-

711 719 712 720 713 721 714 722

-

715 723 716 724 717 725 718 726 719 727 720 728 721 729 722 730 723 731

-

724 732 725 733 726 734 727 735

-
- - - -

728 736 729 737 730 738 731 739

-

732 740 733 741 734 742 735 743

-

736 744 737 745 738 746 739 747

-

740 748 741 749 742 750 743 751

-

744 752 745 753 746 754 747 755

-
-
- - - CAT3DBagRep - - -
- - - - 0 142 65 0 -142 65 473 -142 65 473 142 65 473 142 -65 0 142 -65 0 142 65 473 142 65 0 142 -65 473 142 -65 473 -142 -65 0 -142 -65 0 -142 -65 473 -142 -65 473 -142 65 0 -142 65 548 160 0 537.952 160 37.5 537.952 -160 37.5 548 -160 0 537.952 160 -37.5 548 160 0 548 -160 0 537.952 -160 -37.5 510.5 160 -64.9519 537.952 160 -37.5 537.952 -160 -37.5 510.5 -160 -64.9519 473 160 -75 510.5 160 -64.9519 510.5 -160 -64.9519 473 -160 -75 435.5 160 -64.9519 473 160 -75 473 -160 -75 435.5 -160 -64.9519 408.048 160 -37.5 435.5 160 -64.9519 435.5 -160 -64.9519 408.048 -160 -37.5 398 160 0 408.048 160 -37.5 408.048 -160 -37.5 398 -160 0 408.048 160 37.5 398 160 0 398 -160 0 408.048 -160 37.5 435.5 160 64.9519 408.048 160 37.5 408.048 -160 37.5 435.5 -160 64.9519 473 160 75 435.5 160 64.9519 435.5 -160 64.9519 473 -160 75 473 -160 75 435.5 -160 64.9519 408.048 -160 37.5 398 -160 0 408.048 -160 -37.5 435.5 -160 -64.9519 473 -160 -75 510.5 -160 -64.9519 537.952 -160 -37.5 548 -160 0 537.952 -160 37.5 510.5 -160 64.9519 537.952 160 37.5 510.5 160 64.9519 510.5 -160 64.9519 537.952 -160 37.5 473 160 75 510.5 160 64.9519 537.952 160 37.5 548 160 0 537.952 160 -37.5 510.5 160 -64.9519 473 160 -75 435.5 160 -64.9519 408.048 160 -37.5 398 160 0 408.048 160 37.5 435.5 160 64.9519 510.5 160 64.9519 473 160 75 473 -160 75 510.5 -160 64.9519 64.6222 -3 38.0653 -130.78 -3 369.793 -158.47 -3 397.004 -196.057 -3 406.724 -233.468 -3 396.349 -260.679 -3 368.659 -270.399 -3 331.073 -260.024 -3 293.662 -64.6222 -3 -38.0654 -130.78 -3 369.793 64.6222 -3 38.0653 64.6222 22 38.0653 -130.78 22 369.793 -64.6222 22 -38.0654 -260.024 22 293.662 -270.399 22 331.073 -260.679 22 368.659 -233.468 22 396.349 -196.057 22 406.724 -158.47 22 397.004 -130.78 22 369.793 64.6222 22 38.0653 -260.024 22 293.662 -64.6222 22 -38.0654 -64.6222 -3 -38.0654 -260.024 -3 293.662 -260.024 22 293.662 -260.024 -3 293.662 -270.399 -3 331.073 -270.399 22 331.073 -270.399 22 331.073 -270.399 -3 331.073 -260.679 -3 368.659 -260.679 22 368.659 -260.679 22 368.659 -260.679 -3 368.659 -233.468 -3 396.349 -233.468 22 396.349 -233.468 22 396.349 -233.468 -3 396.349 -196.057 -3 406.724 -196.057 22 406.724 -196.057 22 406.724 -196.057 -3 406.724 -158.47 -3 397.004 -158.47 22 397.004 -158.47 22 397.004 -158.47 -3 397.004 -130.78 -3 369.793 -130.78 22 369.793 -195.402 27 376.727 -172.902 27 370.698 -156.431 27 354.227 -150.402 27 331.727 -156.431 27 309.227 -172.902 27 292.756 -195.402 27 286.727 -217.902 27 292.756 -234.373 27 309.227 -240.402 27 331.727 -234.373 27 354.227 -217.902 27 370.698 -195.402 27 376.727 -195.402 22 376.727 -172.902 22 370.698 -172.902 27 370.698 -172.902 27 370.698 -172.902 22 370.698 -156.431 22 354.227 -156.431 27 354.227 -156.431 27 354.227 -156.431 22 354.227 -150.402 22 331.727 -150.402 27 331.727 -150.402 27 331.727 -150.402 22 331.727 -156.431 22 309.227 -156.431 27 309.227 -156.431 27 309.227 -156.431 22 309.227 -172.902 22 292.756 -172.902 27 292.756 -172.902 27 292.756 -172.902 22 292.756 -195.402 22 286.727 -195.402 27 286.727 -195.402 27 286.727 -195.402 22 286.727 -217.902 22 292.756 -217.902 27 292.756 -217.902 27 292.756 -217.902 22 292.756 -234.373 22 309.227 -234.373 27 309.227 -234.373 27 309.227 -234.373 22 309.227 -240.402 22 331.727 -240.402 27 331.727 -240.402 27 331.727 -240.402 22 331.727 -234.373 22 354.227 -234.373 27 354.227 -234.373 27 354.227 -234.373 22 354.227 -217.902 22 370.698 -217.902 27 370.698 -217.902 27 370.698 -217.902 22 370.698 -195.402 22 376.727 -195.402 27 376.727 -195.402 -147 376.727 -172.902 -147 370.698 -172.902 -142 370.698 -195.402 -142 376.727 -172.902 -147 370.698 -156.431 -147 354.227 -156.431 -142 354.227 -172.902 -142 370.698 -156.431 -147 354.227 -150.402 -147 331.727 -150.402 -142 331.727 -156.431 -142 354.227 -150.402 -147 331.727 -156.431 -147 309.227 -156.431 -142 309.227 -150.402 -142 331.727 -156.431 -147 309.227 -172.902 -147 292.756 -172.902 -142 292.756 -156.431 -142 309.227 -172.902 -147 292.756 -195.402 -147 286.727 -195.402 -142 286.727 -172.902 -142 292.756 -195.402 -147 286.727 -217.902 -147 292.756 -217.902 -142 292.756 -195.402 -142 286.727 -217.902 -147 292.756 -234.373 -147 309.227 -234.373 -142 309.227 -217.902 -142 292.756 -234.373 -147 309.227 -240.402 -147 331.727 -240.402 -142 331.727 -234.373 -142 309.227 -240.402 -147 331.727 -234.373 -147 354.227 -234.373 -142 354.227 -240.402 -142 331.727 -234.373 -147 354.227 -217.902 -147 370.698 -217.902 -142 370.698 -234.373 -142 354.227 -195.402 -147 376.727 -217.902 -147 370.698 -234.373 -147 354.227 -240.402 -147 331.727 -234.373 -147 309.227 -217.902 -147 292.756 -195.402 -147 286.727 -172.902 -147 292.756 -156.431 -147 309.227 -150.402 -147 331.727 -156.431 -147 354.227 -172.902 -147 370.698 -217.902 -147 370.698 -195.402 -147 376.727 -195.402 -142 376.727 -217.902 -142 370.698 -196.057 -142 406.724 -158.471 -142 397.004 -158.471 -117 397.004 -196.057 -117 406.724 -233.468 -142 396.349 -196.057 -142 406.724 -196.057 -117 406.724 -233.468 -117 396.349 -260.679 -142 368.659 -233.468 -142 396.349 -233.468 -117 396.349 -260.679 -117 368.659 -270.399 -142 331.073 -260.679 -142 368.659 -260.679 -117 368.659 -270.399 -117 331.073 -260.024 -142 293.662 -270.399 -142 331.073 -270.399 -117 331.073 -260.024 -117 293.662 -64.6222 -142 -38.0654 -260.024 -142 293.662 -260.024 -117 293.662 -64.6222 -117 -38.0654 64.6222 -117 38.0653 -64.6222 -117 -38.0654 -260.024 -117 293.662 -270.399 -117 331.073 -260.679 -117 368.659 -233.468 -117 396.349 -196.057 -117 406.724 -158.471 -117 397.004 -130.78 -117 369.793 64.6222 -117 38.0653 -130.78 -117 369.793 -130.78 -142 369.793 64.6222 -142 38.0653 -64.6222 -142 -38.0654 64.6222 -142 38.0653 -130.78 -142 369.793 -158.471 -142 397.004 -196.057 -142 406.724 -233.468 -142 396.349 -260.679 -142 368.659 -270.399 -142 331.073 -260.024 -142 293.662 -158.471 -142 397.004 -130.78 -142 369.793 -130.78 -117 369.793 -158.471 -117 397.004 -65.2767 -175 36.9318 -38.0654 -175 64.6222 -38.0654 175 64.6222 -65.2767 175 36.9318 -74.9971 -175 -0.65449 -65.2767 -175 36.9318 -65.2767 175 36.9318 -74.9971 175 -0.65449 -64.6222 -175 -38.0654 -74.9971 -175 -0.65449 -74.9971 175 -0.65449 -64.6222 175 -38.0654 -36.9318 -175 -65.2767 -64.6222 -175 -38.0654 -64.6222 175 -38.0654 -36.9318 175 -65.2767 0.65449 -175 -74.9971 -36.9318 -175 -65.2767 -36.9318 175 -65.2767 0.65449 175 -74.9971 38.0654 -175 -64.6222 0.65449 -175 -74.9971 0.65449 175 -74.9971 38.0654 175 -64.6222 65.2767 -175 -36.9318 38.0654 -175 -64.6222 38.0654 175 -64.6222 65.2767 175 -36.9318 74.9971 -175 0.65449 65.2767 -175 -36.9318 65.2767 175 -36.9318 74.9971 175 0.65449 64.6222 -175 38.0654 74.9971 -175 0.65449 74.9971 175 0.65449 64.6222 175 38.0654 36.9318 -175 65.2767 64.6222 -175 38.0654 64.6222 175 38.0654 36.9318 175 65.2767 -0.65449 -175 74.9971 36.9318 -175 65.2767 36.9318 175 65.2767 -0.65449 175 74.9971 -38.0654 -175 64.6222 -0.65449 -175 74.9971 -0.65449 175 74.9971 -38.0654 175 64.6222 - - - - - - - - - - 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 0.866034 0 0.499985 0.866034 0 0.499985 1 0 0 0.866034 0 -0.499985 1 0 0 1 0 0 0.866034 0 -0.499985 0.499985 0 -0.866034 0.866034 0 -0.499985 0.866034 0 -0.499985 0.499985 0 -0.866034 0 0 -1 0.499985 0 -0.866034 0.499985 0 -0.866034 0 0 -1 -0.499985 0 -0.866034 0 0 -1 0 0 -1 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -1 0 0 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -1 0 0 -0.866034 0 0.499985 -1 0 0 -1 0 0 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.499985 0 0.866034 0 0 1 -0.499985 0 0.866034 -0.499985 0 0.866034 0 0 1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.866034 0 0.499985 0.499985 0 0.866034 0.499985 0 0.866034 0.866034 0 0.499985 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.499985 0 0.866034 0 0 1 0 0 1 0.499985 0 0.866034 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.78802 0 0.61565 0.861638 0 0.507523 0.861638 0 0.507523 0.78802 0 0.61565 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.920506 0 -0.390728 -0.861638 0 -0.507523 -0.861638 0 -0.507523 -0.920506 0 -0.390728 -0.920506 0 -0.390728 -0.920506 0 -0.390728 -0.999962 0 -0.00869778 -0.999962 0 -0.00869778 -0.999962 0 -0.00869778 -0.999962 0 -0.00869778 -0.87036 0 0.492416 -0.87036 0 0.492416 -0.87036 0 0.492416 -0.87036 0 0.492416 -0.507523 0 0.861638 -0.507523 0 0.861638 -0.507523 0 0.861638 -0.507523 0 0.861638 -0.00869778 0 0.999962 -0.00869778 0 0.999962 -0.00869778 0 0.999962 -0.00869778 0 0.999962 0.492416 0 0.87036 0.492416 0 0.87036 0.492416 0 0.87036 0.492416 0 0.87036 0.78802 0 0.61565 0.78802 0 0.61565 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 1 0 0 1 0 0 1 0 0 1 0 0 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 0 0 1 0 0 1 0 0 1 0.499985 0 0.866034 0.499985 0 0.866034 0 0 1 0.499985 0 0.866034 0.866034 0 0.499985 0.866034 0 0.499985 0.499985 0 0.866034 0.866034 0 0.499985 1 0 0 1 0 0 0.866034 0 0.499985 1 0 0 0.866034 0 -0.499985 0.866034 0 -0.499985 1 0 0 0.866034 0 -0.499985 0.499985 0 -0.866034 0.499985 0 -0.866034 0.866034 0 -0.499985 0.499985 0 -0.866034 0 0 -1 0 0 -1 0.499985 0 -0.866034 0 0 -1 -0.499985 0 -0.866034 -0.499985 0 -0.866034 0 0 -1 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -1 0 0 -1 0 0 -0.866034 0 -0.499985 -1 0 0 -0.866034 0 0.499985 -0.866034 0 0.499985 -1 0 0 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.866034 0 0.499985 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.499985 0 0.866034 0 0 1 0 0 1 -0.499985 0 0.866034 -0.00869778 0 0.999962 0.492416 0 0.87036 0.492416 0 0.87036 -0.00869778 0 0.999962 -0.507523 0 0.861638 -0.00869778 0 0.999962 -0.00869778 0 0.999962 -0.507523 0 0.861638 -0.87036 0 0.492416 -0.507523 0 0.861638 -0.507523 0 0.861638 -0.87036 0 0.492416 -0.999962 0 -0.00869778 -0.87036 0 0.492416 -0.87036 0 0.492416 -0.999962 0 -0.00869778 -0.920506 0 -0.390728 -0.999962 0 -0.00869778 -0.999962 0 -0.00869778 -0.920506 0 -0.390728 -0.861638 0 -0.507523 -0.920506 0 -0.390728 -0.920506 0 -0.390728 -0.861638 0 -0.507523 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.861638 0 0.507523 0.78802 0 0.61565 0.78802 0 0.61565 0.861638 0 0.507523 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.492416 0 0.87036 0.78802 0 0.61565 0.78802 0 0.61565 0.492416 0 0.87036 -0.87036 0 0.492416 -0.507523 0 0.861638 -0.507523 0 0.861638 -0.87036 0 0.492416 -0.999962 0 -0.00869778 -0.87036 0 0.492416 -0.87036 0 0.492416 -0.999962 0 -0.00869778 -0.861638 0 -0.507523 -0.999962 0 -0.00869778 -0.999962 0 -0.00869778 -0.861638 0 -0.507523 -0.492416 0 -0.87036 -0.861638 0 -0.507523 -0.861638 0 -0.507523 -0.492416 0 -0.87036 0.00869778 0 -0.999962 -0.492416 0 -0.87036 -0.492416 0 -0.87036 0.00869778 0 -0.999962 0.507523 0 -0.861638 0.00869778 0 -0.999962 0.00869778 0 -0.999962 0.507523 0 -0.861638 0.87036 0 -0.492416 0.507523 0 -0.861638 0.507523 0 -0.861638 0.87036 0 -0.492416 0.999962 0 0.00869778 0.87036 0 -0.492416 0.87036 0 -0.492416 0.999962 0 0.00869778 0.861638 0 0.507523 0.999962 0 0.00869778 0.999962 0 0.00869778 0.861638 0 0.507523 0.492416 0 0.87036 0.861638 0 0.507523 0.861638 0 0.507523 0.492416 0 0.87036 -0.00869778 0 0.999962 0.492416 0 0.87036 0.492416 0 0.87036 -0.00869778 0 0.999962 -0.507523 0 0.861638 -0.00869778 0 0.999962 -0.00869778 0 0.999962 -0.507523 0 0.861638 - - - - - - - - - - - - - - -

0 0 1 1 2 2 3 3

-

4 4 5 5 6 6 7 7

-

8 8 9 9 10 10 11 11

-

12 12 13 13 14 14 15 15

-
- - - -

16 16 17 17 18 18 19 19

-

20 20 21 21 22 22 23 23

-

24 24 25 25 26 26 27 27

-

28 28 29 29 30 30 31 31

-

32 32 33 33 34 34 35 35

-

36 36 37 37 38 38 39 39

-

40 40 41 41 42 42 43 43

-

44 44 45 45 46 46 47 47

-

48 48 49 49 50 50 51 51

-

52 52 53 53 54 54 55 55

-

56 56 57 57 58 58 59 59 60 60 61 61 62 62 63 63 64 64 65 65 66 66 67 67

-

68 68 69 69 70 70 71 71

-

72 72 73 73 74 74 75 75 76 76 77 77 78 78 79 79 80 80 81 81 82 82 83 83

-

84 84 85 85 86 86 87 87

-
- - - -

88 88 89 89 90 90 91 91 92 92 93 93 94 94 95 95 96 96

-

97 97 98 98 99 99 100 100

-

101 101 102 102 103 103 104 104 105 105 106 106 107 107 108 108 109 109

-

110 110 111 111 112 112 113 113

-

114 114 115 115 116 116 117 117

-

118 118 119 119 120 120 121 121

-

122 122 123 123 124 124 125 125

-

126 126 127 127 128 128 129 129

-

130 130 131 131 132 132 133 133

-

134 134 135 135 136 136 137 137

-
- - - -

138 138 139 139 140 140 141 141 142 142 143 143 144 144 145 145 146 146 147 147 148 148 149 149

-

150 150 151 151 152 152 153 153

-

154 154 155 155 156 156 157 157

-

158 158 159 159 160 160 161 161

-

162 162 163 163 164 164 165 165

-

166 166 167 167 168 168 169 169

-

170 170 171 171 172 172 173 173

-

174 174 175 175 176 176 177 177

-

178 178 179 179 180 180 181 181

-

182 182 183 183 184 184 185 185

-

186 186 187 187 188 188 189 189

-

190 190 191 191 192 192 193 193

-

194 194 195 195 196 196 197 197

-
- - - -

198 198 199 199 200 200 201 201

-

202 202 203 203 204 204 205 205

-

206 206 207 207 208 208 209 209

-

210 210 211 211 212 212 213 213

-

214 214 215 215 216 216 217 217

-

218 218 219 219 220 220 221 221

-

222 222 223 223 224 224 225 225

-

226 226 227 227 228 228 229 229

-

230 230 231 231 232 232 233 233

-

234 234 235 235 236 236 237 237

-

238 238 239 239 240 240 241 241

-

242 242 243 243 244 244 245 245 246 246 247 247 248 248 249 249 250 250 251 251 252 252 253 253

-

254 254 255 255 256 256 257 257

-
- - - -

258 258 259 259 260 260 261 261

-

262 262 263 263 264 264 265 265

-

266 266 267 267 268 268 269 269

-

270 270 271 271 272 272 273 273

-

274 274 275 275 276 276 277 277

-

278 278 279 279 280 280 281 281

-

282 282 283 283 284 284 285 285 286 286 287 287 288 288 289 289 290 290

-

291 291 292 292 293 293 294 294

-

295 295 296 296 297 297 298 298 299 299 300 300 301 301 302 302 303 303

-

304 304 305 305 306 306 307 307

-
- - - -

308 308 309 309 310 310 311 311

-

312 312 313 313 314 314 315 315

-

316 316 317 317 318 318 319 319

-

320 320 321 321 322 322 323 323

-

324 324 325 325 326 326 327 327

-

328 328 329 329 330 330 331 331

-

332 332 333 333 334 334 335 335

-

336 336 337 337 338 338 339 339

-

340 340 341 341 342 342 343 343

-

344 344 345 345 346 346 347 347

-

348 348 349 349 350 350 351 351

-

352 352 353 353 354 354 355 355

-
-
- - - CAT3DBagRep - - -
- - - - -361.69 -275.743 168.88 -361.004 -338.333 323.922 -469.289 -340.122 323.679 -469.975 -277.532 168.638 -361.921 -260.906 162.577 -361.69 -275.743 168.88 -469.975 -277.532 168.638 -470.206 -262.695 162.334 -364.622 -105.888 225.17 -361.921 -260.906 162.577 -470.206 -262.695 162.334 -472.907 -107.676 224.927 -364.759 -99.586 240.008 -364.622 -105.888 225.17 -472.907 -107.676 224.927 -473.044 -101.374 239.766 -364.073 -162.176 395.05 -364.759 -99.586 240.008 -473.044 -101.374 239.766 -472.358 -163.965 394.807 -363.842 -177.013 401.353 -364.073 -162.176 395.05 -472.358 -163.965 394.807 -472.127 -178.802 401.11 -469.426 -333.82 338.518 -472.127 -178.802 401.11 -472.358 -163.965 394.807 -473.044 -101.374 239.766 -472.907 -107.676 224.927 -470.206 -262.695 162.334 -469.975 -277.532 168.638 -469.289 -340.122 323.679 -361.004 -338.333 323.922 -361.142 -332.031 338.76 -469.426 -333.82 338.518 -469.289 -340.122 323.679 -361.142 -332.031 338.76 -361.004 -338.333 323.922 -361.69 -275.743 168.88 -361.921 -260.906 162.577 -364.622 -105.888 225.17 -364.759 -99.586 240.008 -364.073 -162.176 395.05 -363.842 -177.013 401.353 -361.142 -332.031 338.76 -363.842 -177.013 401.353 -472.127 -178.802 401.11 -469.426 -333.82 338.518 -327.86 88.3389 239.954 -329.24 150.918 394.995 -437.525 149.129 394.753 -436.145 86.5504 239.712 -327.931 94.6419 225.115 -327.86 88.3389 239.954 -436.145 86.5504 239.712 -436.216 92.8534 224.873 -330.352 249.665 162.522 -327.931 94.6419 225.115 -436.216 92.8534 224.873 -438.637 247.876 162.28 -330.611 264.501 168.826 -330.352 249.665 162.522 -438.637 247.876 162.28 -438.896 262.713 168.584 -331.991 327.08 323.867 -330.611 264.501 168.826 -438.896 262.713 168.584 -440.276 325.292 323.625 -331.92 320.777 338.706 -331.991 327.08 323.867 -440.276 325.292 323.625 -440.205 318.989 338.464 -437.784 163.966 401.057 -440.205 318.989 338.464 -440.276 325.292 323.625 -438.896 262.713 168.584 -438.637 247.876 162.28 -436.216 92.8534 224.873 -436.145 86.5504 239.712 -437.525 149.129 394.753 -329.24 150.918 394.995 -329.499 165.754 401.298 -437.784 163.966 401.057 -437.525 149.129 394.753 -329.499 165.754 401.298 -329.24 150.918 394.995 -327.86 88.3389 239.954 -327.931 94.6419 225.115 -330.352 249.665 162.522 -330.611 264.501 168.826 -331.991 327.08 323.867 -331.92 320.777 338.706 -329.499 165.754 401.298 -331.92 320.777 338.706 -440.205 318.989 338.464 -437.784 163.966 401.057 -486.26 114.592 243.105 -486.256 107.493 293.518 -486.676 126.547 340.726 -487.408 166.65 372.08 -488.257 217.056 379.179 -488.994 264.259 360.12 -489.422 295.61 320.01 -489.427 302.71 269.598 -489.006 283.655 222.389 -488.274 243.552 191.035 -487.426 193.146 183.936 -486.689 145.944 202.995 -438.643 244.372 191.146 -437.795 193.966 184.047 -487.426 193.146 183.936 -488.274 243.552 191.035 -439.376 284.475 222.5 -438.643 244.372 191.146 -488.274 243.552 191.035 -489.006 283.655 222.389 -439.796 303.529 269.708 -439.376 284.475 222.5 -489.006 283.655 222.389 -489.427 302.71 269.598 -439.791 296.43 320.121 -439.796 303.529 269.708 -489.427 302.71 269.598 -489.422 295.61 320.01 -439.363 265.078 360.231 -439.791 296.43 320.121 -489.422 295.61 320.01 -488.994 264.259 360.12 -438.626 217.876 379.289 -439.363 265.078 360.231 -488.994 264.259 360.12 -488.257 217.056 379.179 -437.778 167.47 372.191 -438.626 217.876 379.289 -488.257 217.056 379.179 -487.408 166.65 372.08 -437.045 127.367 340.837 -437.778 167.47 372.191 -487.408 166.65 372.08 -486.676 126.547 340.726 -436.625 108.313 293.628 -437.045 127.367 340.837 -486.676 126.547 340.726 -486.256 107.493 293.518 -436.63 115.412 243.216 -436.625 108.313 293.628 -486.256 107.493 293.518 -486.26 114.592 243.105 -437.058 146.764 203.106 -436.63 115.412 243.216 -486.26 114.592 243.105 -486.689 145.944 202.995 -437.795 193.966 184.047 -437.058 146.764 203.106 -486.689 145.944 202.995 -487.426 193.146 183.936 -463.67 -76.9259 293.455 -463.249 -102.378 337.545 -463.249 -102.378 388.455 -463.67 -76.9259 432.545 -464.399 -32.8423 458 -465.241 18.0611 458 -465.97 62.1448 432.545 -466.391 87.5965 388.455 -466.391 87.5965 337.545 -465.97 62.1448 293.455 -465.241 18.0611 268 -464.399 -32.8423 268 -416.34 62.9658 293.455 -415.61 18.8821 268 -465.241 18.0611 268 -465.97 62.1448 293.455 -416.761 88.4174 337.545 -416.34 62.9658 293.455 -465.97 62.1448 293.455 -466.391 87.5965 337.545 -416.761 88.4175 388.455 -416.761 88.4174 337.545 -466.391 87.5965 337.545 -466.391 87.5965 388.455 -416.34 62.9658 432.545 -416.761 88.4175 388.455 -466.391 87.5965 388.455 -465.97 62.1448 432.545 -415.61 18.8821 458 -416.34 62.9658 432.545 -465.97 62.1448 432.545 -465.241 18.0611 458 -414.768 -32.0213 458 -415.61 18.8821 458 -465.241 18.0611 458 -464.399 -32.8423 458 -414.039 -76.1049 432.545 -414.768 -32.0213 458 -464.399 -32.8423 458 -463.67 -76.9259 432.545 -413.618 -101.557 388.455 -414.039 -76.1049 432.545 -463.67 -76.9259 432.545 -463.249 -102.378 388.455 -413.618 -101.557 337.545 -413.618 -101.557 388.455 -463.249 -102.378 388.455 -463.249 -102.378 337.545 -414.039 -76.1049 293.455 -413.618 -101.557 337.545 -463.249 -102.378 337.545 -463.67 -76.9259 293.455 -414.768 -32.0213 268 -414.039 -76.1049 293.455 -463.67 -76.9259 293.455 -464.399 -32.8423 268 -415.61 18.8821 268 -414.768 -32.0213 268 -464.399 -32.8423 268 -465.241 18.0611 268 -305.333 -99.7653 279.4 -305.333 -99.7653 446.6 -413.618 -101.557 446.6 -413.618 -101.557 279.4 -305.521 -88.3668 268 -305.333 -99.7653 279.4 -413.618 -101.557 279.4 -413.807 -90.1581 268 -308.287 78.8103 268 -305.521 -88.3668 268 -413.807 -90.1581 268 -416.572 77.019 268 -308.476 90.2087 279.4 -308.287 78.8103 268 -416.572 77.019 268 -416.761 88.4174 279.4 -308.476 90.2087 446.6 -308.476 90.2087 279.4 -416.761 88.4174 279.4 -416.761 88.4174 446.6 -308.287 78.8103 458 -308.476 90.2087 446.6 -416.761 88.4174 446.6 -416.572 77.019 458 -413.807 -90.1581 458 -416.572 77.019 458 -416.761 88.4174 446.6 -416.761 88.4174 279.4 -416.572 77.019 268 -413.807 -90.1581 268 -413.618 -101.557 279.4 -413.618 -101.557 446.6 -305.333 -99.7653 446.6 -305.521 -88.3668 458 -413.807 -90.1581 458 -413.618 -101.557 446.6 -305.521 -88.3668 458 -305.333 -99.7653 446.6 -305.333 -99.7653 279.4 -305.521 -88.3668 268 -308.287 78.8103 268 -308.476 90.2087 279.4 -308.476 90.2087 446.6 -308.287 78.8103 458 -305.521 -88.3668 458 -308.287 78.8103 458 -416.572 77.019 458 -413.807 -90.1581 458 -269.238 -99.1682 410.5 -270.023 -51.6747 458 -306.119 -52.2718 458 -305.333 -99.7653 410.5 -269.238 -99.1682 315.5 -269.238 -99.1682 410.5 -305.333 -99.7653 410.5 -305.333 -99.7653 315.5 -270.023 -51.6747 268 -269.238 -99.1682 315.5 -305.333 -99.7653 315.5 -306.119 -52.2718 268 -271.595 43.3123 268 -270.023 -51.6747 268 -306.119 -52.2718 268 -307.69 42.7152 268 -272.38 90.8058 315.5 -271.595 43.3123 268 -307.69 42.7152 268 -308.476 90.2087 315.5 -272.38 90.8058 410.5 -272.38 90.8058 315.5 -308.476 90.2087 315.5 -308.476 90.2087 410.5 -271.595 43.3123 458 -272.38 90.8058 410.5 -308.476 90.2087 410.5 -307.69 42.7152 458 -270.023 -51.6747 458 -271.595 43.3123 458 -307.69 42.7152 458 -306.119 -52.2718 458 -327.522 -218.334 175.13 -327.987 -190.668 178.783 -310.99 -190.387 178.822 -310.525 -218.053 175.168 -326.344 -293.937 206.415 -326.671 -271.79 189.433 -309.674 -271.509 189.471 -309.346 -293.656 206.453 -326.113 -310.935 228.551 -326.344 -293.937 206.415 -309.346 -293.656 206.453 -309.115 -310.654 228.589 -325.994 -321.625 254.332 -326.113 -310.935 228.551 -309.115 -310.654 228.589 -308.996 -321.345 254.37 -325.996 -325.28 282.002 -325.994 -321.625 254.332 -308.996 -321.345 254.37 -308.998 -324.999 282.04 -326.118 -321.649 309.675 -325.996 -325.28 282.002 -308.998 -324.999 282.04 -309.12 -321.368 309.713 -326.352 -310.981 335.465 -326.118 -321.649 309.675 -309.12 -321.368 309.713 -309.355 -310.7 335.503 -326.682 -294.002 357.614 -326.352 -310.981 335.465 -309.355 -310.7 335.503 -309.685 -293.721 357.653 -327.086 -271.869 374.614 -326.682 -294.002 357.614 -309.685 -293.721 357.653 -310.089 -271.588 374.652 -327.536 -246.091 385.304 -327.086 -271.869 374.614 -310.089 -271.588 374.652 -310.538 -245.811 385.343 -328.001 -218.425 388.958 -327.536 -246.091 385.304 -310.538 -245.811 385.343 -311.003 -218.144 388.996 -328.45 -190.756 385.326 -328.001 -218.425 388.958 -311.003 -218.144 388.996 -311.452 -190.475 385.364 -328.852 -164.969 374.655 -328.45 -190.756 385.326 -311.452 -190.475 385.364 -311.854 -164.688 374.693 -329.18 -142.822 357.673 -328.852 -164.969 374.655 -311.854 -164.688 374.693 -312.182 -142.541 357.711 -329.411 -125.824 335.537 -329.18 -142.822 357.673 -312.182 -142.541 357.711 -312.413 -125.544 335.575 -329.529 -115.134 309.756 -329.411 -125.824 335.537 -312.413 -125.544 335.575 -312.532 -114.853 309.794 -329.527 -111.48 282.086 -329.529 -115.134 309.756 -312.532 -114.853 309.794 -312.53 -111.199 282.124 -329.405 -115.11 254.413 -329.527 -111.48 282.086 -312.53 -111.199 282.124 -312.408 -114.83 254.451 -329.171 -125.779 228.623 -329.405 -115.11 254.413 -312.408 -114.83 254.451 -312.173 -125.498 228.661 -328.841 -142.758 206.474 -329.171 -125.779 228.623 -312.173 -125.498 228.661 -311.843 -142.477 206.512 -328.437 -164.89 189.474 -328.841 -142.758 206.474 -311.843 -142.477 206.512 -311.439 -164.609 189.512 -327.987 -190.668 178.783 -328.437 -164.89 189.474 -311.439 -164.609 189.512 -310.99 -190.387 178.822 -310.99 -190.387 178.822 -311.439 -164.609 189.512 -311.843 -142.477 206.512 -312.173 -125.498 228.661 -312.408 -114.83 254.451 -312.53 -111.199 282.124 -312.532 -114.853 309.794 -312.413 -125.544 335.575 -312.182 -142.541 357.711 -311.854 -164.688 374.693 -311.452 -190.475 385.364 -311.003 -218.144 388.996 -310.538 -245.811 385.343 -310.089 -271.588 374.652 -309.685 -293.721 357.653 -309.355 -310.7 335.503 -309.12 -321.368 309.713 -308.998 -324.999 282.04 -308.996 -321.345 254.37 -309.115 -310.654 228.589 -309.346 -293.656 206.453 -309.674 -271.509 189.471 -310.076 -245.723 178.8 -310.525 -218.053 175.168 -326.671 -271.79 189.433 -327.073 -246.003 178.762 -310.076 -245.723 178.8 -309.674 -271.509 189.471 -327.522 -218.334 175.13 -327.073 -246.003 178.762 -326.671 -271.79 189.433 -326.344 -293.937 206.415 -326.113 -310.935 228.551 -325.994 -321.625 254.332 -325.996 -325.28 282.002 -326.118 -321.649 309.675 -326.352 -310.981 335.465 -326.682 -294.002 357.614 -327.086 -271.869 374.614 -327.536 -246.091 385.304 -328.001 -218.425 388.958 -328.45 -190.756 385.326 -328.852 -164.969 374.655 -329.18 -142.822 357.673 -329.411 -125.824 335.537 -329.529 -115.134 309.756 -329.527 -111.48 282.086 -329.405 -115.11 254.413 -329.171 -125.779 228.623 -328.841 -142.758 206.474 -328.437 -164.89 189.474 -327.987 -190.668 178.783 -327.073 -246.003 178.762 -327.522 -218.334 175.13 -310.525 -218.053 175.168 -310.076 -245.723 178.8 1535 97.2272 -97.2272 1535 132.815 -35.5876 1535 132.815 35.5876 1535 97.2272 97.2272 1535 35.5876 132.815 1535 -35.5876 132.815 1535 -97.2272 97.2272 1535 -132.815 35.5876 1535 -132.815 -35.5876 1535 -97.2272 -97.2272 1535 -35.5876 -132.815 1535 35.5876 -132.815 360 110 29.4744 0 110 29.4744 0 80.5256 80.5256 360 80.5256 80.5256 360 80.5256 80.5256 0 80.5256 80.5256 0 29.4744 110 360 29.4744 110 360 29.4744 110 0 29.4744 110 0 -29.4744 110 360 -29.4744 110 360 -29.4744 110 0 -29.4744 110 0 -80.5256 80.5256 360 -80.5256 80.5256 360 -80.5256 80.5256 0 -80.5256 80.5256 0 -110 29.4744 360 -110 29.4744 360 -110 29.4744 0 -110 29.4744 0 -110 -29.4744 360 -110 -29.4744 360 -110 -29.4744 0 -110 -29.4744 0 -80.5256 -80.5256 360 -80.5256 -80.5256 360 -80.5256 -80.5256 0 -80.5256 -80.5256 0 -29.4744 -110 360 -29.4744 -110 360 -29.4744 -110 0 -29.4744 -110 0 29.4744 -110 360 29.4744 -110 360 29.4744 -110 0 29.4744 -110 0 80.5256 -80.5256 360 80.5256 -80.5256 360 80.5256 -80.5256 0 80.5256 -80.5256 0 110 -29.4744 360 110 -29.4744 360 110 -29.4744 0 110 -29.4744 0 110 29.4744 360 110 29.4744 455 80.5256 80.5256 455 29.4744 110 455 -29.4744 110 455 -80.5256 80.5256 455 -110 29.4744 455 -110 -29.4744 455 -80.5256 -80.5256 455 -29.4744 -110 455 29.4744 -110 455 80.5256 -80.5256 455 110 -29.4744 455 110 29.4744 440 80.5256 -80.5256 440 110 -29.4744 455 110 -29.4744 455 80.5256 -80.5256 440 29.4744 -110 440 80.5256 -80.5256 455 80.5256 -80.5256 455 29.4744 -110 440 -29.4744 -110 440 29.4744 -110 455 29.4744 -110 455 -29.4744 -110 440 -80.5256 -80.5256 440 -29.4744 -110 455 -29.4744 -110 455 -80.5256 -80.5256 440 -110 -29.4744 440 -80.5256 -80.5256 455 -80.5256 -80.5256 455 -110 -29.4744 440 -110 29.4744 440 -110 -29.4744 455 -110 -29.4744 455 -110 29.4744 440 -80.5256 80.5256 440 -110 29.4744 455 -110 29.4744 455 -80.5256 80.5256 440 -29.4744 110 440 -80.5256 80.5256 455 -80.5256 80.5256 455 -29.4744 110 440 29.4744 110 440 -29.4744 110 455 -29.4744 110 455 29.4744 110 440 80.5256 80.5256 440 29.4744 110 455 29.4744 110 455 80.5256 80.5256 440 110 29.4744 440 80.5256 80.5256 455 80.5256 80.5256 455 110 29.4744 440 110 -29.4744 440 110 29.4744 455 110 29.4744 455 110 -29.4744 1310 62.2243 62.2243 1310 22.7757 85 1310 -22.7757 85 1310 -62.2243 62.2243 1310 -85 22.7757 1310 -85 -22.7757 1310 -62.2243 -62.2243 1310 -22.7757 -85 1310 22.7757 -85 1310 62.2243 -62.2243 1310 85 -22.7757 1310 85 22.7757 455 62.2243 -62.2243 455 85 -22.7757 1310 85 -22.7757 1310 62.2243 -62.2243 455 22.7757 -85 455 62.2243 -62.2243 1310 62.2243 -62.2243 1310 22.7757 -85 455 -22.7757 -85 455 22.7757 -85 1310 22.7757 -85 1310 -22.7757 -85 455 -62.2243 -62.2243 455 -22.7757 -85 1310 -22.7757 -85 1310 -62.2243 -62.2243 455 -85 -22.7757 455 -62.2243 -62.2243 1310 -62.2243 -62.2243 1310 -85 -22.7757 455 -85 22.7757 455 -85 -22.7757 1310 -85 -22.7757 1310 -85 22.7757 455 -62.2243 62.2243 455 -85 22.7757 1310 -85 22.7757 1310 -62.2243 62.2243 455 -22.7757 85 455 -62.2243 62.2243 1310 -62.2243 62.2243 1310 -22.7757 85 455 22.7757 85 455 -22.7757 85 1310 -22.7757 85 1310 22.7757 85 455 62.2243 62.2243 455 22.7757 85 1310 22.7757 85 1310 62.2243 62.2243 455 85 22.7757 455 62.2243 62.2243 1310 62.2243 62.2243 1310 85 22.7757 455 85 -22.7757 455 85 22.7757 1310 85 22.7757 1310 85 -22.7757 -48.3154 183 -48.3154 -66 183 -17.6847 -66 183 17.6846 -48.3154 183 48.3154 -17.6847 183 66 17.6846 183 66 48.3153 183 48.3154 66 183 17.6846 66 183 -17.6846 48.3154 183 -48.3153 17.6846 183 -66 -17.6847 183 -66 80.5256 83 -80.5256 29.4744 83 -110 17.6846 183 -66 48.3154 183 -48.3153 110 83 -29.4744 80.5256 83 -80.5256 48.3154 183 -48.3153 66 183 -17.6846 110 83 29.4744 110 83 -29.4744 66 183 -17.6846 66 183 17.6846 80.5256 83 80.5256 110 83 29.4744 66 183 17.6846 48.3153 183 48.3154 29.4744 83 110 80.5256 83 80.5256 48.3153 183 48.3154 17.6846 183 66 -29.4744 83 110 29.4744 83 110 17.6846 183 66 -17.6847 183 66 -80.5256 83 80.5256 -29.4744 83 110 -17.6847 183 66 -48.3154 183 48.3154 -110 83 29.4744 -80.5256 83 80.5256 -48.3154 183 48.3154 -66 183 17.6846 -110 83 -29.4744 -110 83 29.4744 -66 183 17.6846 -66 183 -17.6847 -80.5256 83 -80.5256 -110 83 -29.4744 -66 183 -17.6847 -48.3154 183 -48.3154 -29.4744 83 -110 -80.5256 83 -80.5256 -48.3154 183 -48.3154 -17.6847 183 -66 29.4744 83 -110 -29.4744 83 -110 -17.6847 183 -66 17.6846 183 -66 48.3154 -183 -48.3154 66 -183 -17.6846 66 -183 17.6846 48.3154 -183 48.3154 17.6847 -183 66 -17.6846 -183 66 -48.3153 -183 48.3154 -66 -183 17.6846 -66 -183 -17.6846 -48.3154 -183 -48.3153 -17.6846 -183 -66 17.6847 -183 -66 -80.5256 -83 -80.5256 -29.4744 -83 -110 -17.6846 -183 -66 -48.3154 -183 -48.3153 -110 -83 -29.4744 -80.5256 -83 -80.5256 -48.3154 -183 -48.3153 -66 -183 -17.6846 -110 -83 29.4744 -110 -83 -29.4744 -66 -183 -17.6846 -66 -183 17.6846 -80.5256 -83 80.5256 -110 -83 29.4744 -66 -183 17.6846 -48.3153 -183 48.3154 -29.4744 -83 110 -80.5256 -83 80.5256 -48.3153 -183 48.3154 -17.6846 -183 66 29.4744 -83 110 -29.4744 -83 110 -17.6846 -183 66 17.6847 -183 66 80.5256 -83 80.5256 29.4744 -83 110 17.6847 -183 66 48.3154 -183 48.3154 110 -83 29.4744 80.5256 -83 80.5256 48.3154 -183 48.3154 66 -183 17.6846 110 -83 -29.4744 110 -83 29.4744 66 -183 17.6846 66 -183 -17.6846 80.5256 -83 -80.5256 110 -83 -29.4744 66 -183 -17.6846 48.3154 -183 -48.3154 29.4744 -83 -110 80.5256 -83 -80.5256 48.3154 -183 -48.3154 17.6847 -183 -66 -29.4744 -83 -110 29.4744 -83 -110 17.6847 -183 -66 -17.6846 -183 -66 -110 -83 29.4744 -80.5256 -83 80.5256 -80.5256 83 80.5256 -110 83 29.4744 -110 -83 -29.4744 -110 -83 29.4744 -110 83 29.4744 -110 83 -29.4744 -80.5256 -83 -80.5256 -110 -83 -29.4744 -110 83 -29.4744 -80.5256 83 -80.5256 -29.4744 -83 -110 -80.5256 -83 -80.5256 -80.5256 83 -80.5256 -29.4744 83 -110 29.4744 -83 -110 -29.4744 -83 -110 -29.4744 83 -110 29.4744 83 -110 80.5256 -83 -80.5256 29.4744 -83 -110 29.4744 83 -110 80.5256 83 -80.5256 110 -83 -29.4744 80.5256 -83 -80.5256 80.5256 83 -80.5256 110 83 -29.4744 29.4744 -83 110 80.5256 -83 80.5256 80.5256 83 80.5256 29.4744 83 110 80.5256 -83 80.5256 110 -83 29.4744 110 83 29.4744 80.5256 83 80.5256 80.5256 83 80.5256 110 83 29.4744 110 83 -29.4744 80.5256 83 -80.5256 29.4744 83 -110 -29.4744 83 -110 -80.5256 83 -80.5256 -110 83 -29.4744 -110 83 29.4744 -80.5256 83 80.5256 -29.4744 83 110 29.4744 83 110 -80.5256 -83 80.5256 -29.4744 -83 110 -29.4744 83 110 -80.5256 83 80.5256 29.4744 -83 110 -29.4744 -83 110 -80.5256 -83 80.5256 -110 -83 29.4744 -110 -83 -29.4744 -80.5256 -83 -80.5256 -29.4744 -83 -110 29.4744 -83 -110 80.5256 -83 -80.5256 110 -83 -29.4744 110 -83 29.4744 80.5256 -83 80.5256 -29.4744 -83 110 29.4744 -83 110 29.4744 83 110 -29.4744 83 110 440 -29.4744 110 360 -29.4744 110 360 -190 40 440 -190 40 440 -29.4744 110 440 29.4744 110 360 29.4744 110 360 -29.4744 110 360 190 40 360 29.4744 110 440 29.4744 110 440 190 40 360 190 40 440 190 40 440 190 -40 360 190 -40 360 29.4744 -110 360 190 -40 440 190 -40 440 29.4744 -110 440 29.4744 -110 440 190 -40 440 190 40 440 29.4744 110 440 -29.4744 110 440 -190 40 440 -190 -40 440 -29.4744 -110 360 -29.4744 -110 440 -29.4744 -110 440 -190 -40 360 -190 -40 360 -190 -40 440 -190 -40 440 -190 40 360 -190 40 360 -190 -40 360 -190 40 360 -29.4744 110 360 29.4744 110 360 190 40 360 190 -40 360 29.4744 -110 360 -29.4744 -110 360 -29.4744 -110 360 29.4744 -110 440 29.4744 -110 440 -29.4744 -110 -294.568 208.335 175.074 -295.033 236.001 178.728 -278.035 236.282 178.766 -277.57 208.616 175.112 -293.389 132.732 206.359 -293.717 154.879 189.377 -276.719 155.16 189.415 -276.391 133.013 206.397 -293.157 115.734 228.495 -293.389 132.732 206.359 -276.391 133.013 206.397 -276.16 116.015 228.533 -293.038 105.044 254.277 -293.157 115.734 228.495 -276.16 116.015 228.533 -276.041 105.325 254.315 -293.04 101.389 281.947 -293.038 105.044 254.277 -276.041 105.325 254.315 -276.042 101.67 281.985 -293.162 105.02 309.62 -293.04 101.389 281.947 -276.042 101.67 281.985 -276.164 105.301 309.658 -293.395 115.689 335.41 -293.162 105.02 309.62 -276.164 105.301 309.658 -276.398 115.969 335.448 -293.725 132.668 357.559 -293.395 115.689 335.41 -276.398 115.969 335.448 -276.728 132.948 357.597 -294.129 154.8 374.558 -293.725 132.668 357.559 -276.728 132.948 357.597 -277.131 155.081 374.596 -294.578 180.578 385.249 -294.129 154.8 374.558 -277.131 155.081 374.596 -277.581 180.858 385.287 -295.043 208.244 388.903 -294.578 180.578 385.249 -277.581 180.858 385.287 -278.046 208.525 388.941 -295.492 235.913 385.271 -295.043 208.244 388.903 -278.046 208.525 388.941 -278.495 236.194 385.309 -295.894 261.7 374.6 -295.492 235.913 385.271 -278.495 236.194 385.309 -278.897 261.981 374.638 -296.222 283.847 357.618 -295.894 261.7 374.6 -278.897 261.981 374.638 -279.225 284.128 357.656 -296.454 300.845 335.482 -296.222 283.847 357.618 -279.225 284.128 357.656 -279.456 301.126 335.52 -296.573 311.535 309.7 -296.454 300.845 335.482 -279.456 301.126 335.52 -279.575 311.816 309.738 -296.571 315.19 282.03 -296.573 311.535 309.7 -279.575 311.816 309.738 -279.573 315.47 282.068 -296.449 311.559 254.357 -296.571 315.19 282.03 -279.573 315.47 282.068 -279.452 311.84 254.395 -296.216 300.89 228.568 -296.449 311.559 254.357 -279.452 311.84 254.395 -279.218 301.171 228.606 -295.886 283.911 206.418 -296.216 300.89 228.568 -279.218 301.171 228.606 -278.888 284.192 206.456 -295.482 261.779 189.419 -295.886 283.911 206.418 -278.888 284.192 206.456 -278.485 262.06 189.457 -295.033 236.001 178.728 -295.482 261.779 189.419 -278.485 262.06 189.457 -278.035 236.282 178.766 -278.035 236.282 178.766 -278.485 262.06 189.457 -278.888 284.192 206.456 -279.218 301.171 228.606 -279.452 311.84 254.395 -279.573 315.47 282.068 -279.575 311.816 309.738 -279.456 301.126 335.52 -279.225 284.128 357.656 -278.897 261.981 374.638 -278.495 236.194 385.309 -278.046 208.525 388.941 -277.581 180.858 385.287 -277.131 155.081 374.596 -276.728 132.948 357.597 -276.398 115.969 335.448 -276.164 105.301 309.658 -276.042 101.67 281.985 -276.041 105.325 254.315 -276.16 116.015 228.533 -276.391 133.013 206.397 -276.719 155.16 189.415 -277.121 180.947 178.745 -277.57 208.616 175.112 -293.717 154.879 189.377 -294.119 180.666 178.707 -277.121 180.947 178.745 -276.719 155.16 189.415 -294.568 208.335 175.074 -294.119 180.666 178.707 -293.717 154.879 189.377 -293.389 132.732 206.359 -293.157 115.734 228.495 -293.038 105.044 254.277 -293.04 101.389 281.947 -293.162 105.02 309.62 -293.395 115.689 335.41 -293.725 132.668 357.559 -294.129 154.8 374.558 -294.578 180.578 385.249 -295.043 208.244 388.903 -295.492 235.913 385.271 -295.894 261.7 374.6 -296.222 283.847 357.618 -296.454 300.845 335.482 -296.573 311.535 309.7 -296.571 315.19 282.03 -296.449 311.559 254.357 -296.216 300.89 228.568 -295.886 283.911 206.418 -295.482 261.779 189.419 -295.033 236.001 178.728 -294.119 180.666 178.707 -294.568 208.335 175.074 -277.57 208.616 175.112 -277.121 180.947 178.745 -185.563 81.9729 84.5581 -182.756 -87.9983 84.6163 -252.746 -89.1543 84.4597 -255.553 80.8169 84.4014 -185.907 82.0192 237.554 -185.563 81.9729 84.5581 -255.553 80.8169 84.4014 -255.897 80.8632 237.397 -185.641 48.3518 366.926 -185.907 82.0192 237.554 -255.897 80.8632 237.397 -255.631 47.1958 366.77 -185.558 41.8521 379.461 -185.641 48.3518 366.926 -255.631 47.1958 366.77 -255.548 40.6962 379.305 -185.446 33.6281 390.172 -185.558 41.8521 379.461 -255.548 40.6962 379.305 -255.436 32.4721 390.015 -185.288 22.9128 398.388 -185.446 33.6281 390.172 -255.436 32.4721 390.015 -255.278 21.7568 398.231 -185.094 10.4365 403.551 -185.288 22.9128 398.388 -255.278 21.7568 398.231 -255.084 9.28048 403.394 -184.877 -2.95073 405.308 -185.094 10.4365 403.551 -255.084 9.28048 403.394 -254.867 -4.1067 405.151 -184.652 -16.3364 403.54 -184.877 -2.95073 405.308 -254.867 -4.1067 405.151 -254.642 -17.4924 403.384 -184.435 -28.8083 398.368 -184.652 -16.3364 403.54 -254.642 -17.4924 403.384 -254.425 -29.9643 398.211 -184.24 -39.5166 390.143 -184.435 -28.8083 398.368 -254.425 -29.9643 398.211 -254.23 -40.6726 389.986 -184.08 -47.7315 379.427 -184.24 -39.5166 390.143 -254.23 -40.6726 389.986 -254.071 -48.8875 379.27 -183.945 -54.2055 366.962 -184.08 -47.7315 379.427 -254.071 -48.8875 379.27 -253.936 -55.3615 366.805 -253.089 -89.1077 237.455 -253.936 -55.3615 366.805 -254.071 -48.8875 379.27 -254.23 -40.6726 389.986 -254.425 -29.9643 398.211 -254.642 -17.4924 403.384 -254.867 -4.1067 405.151 -255.084 9.28048 403.394 -255.278 21.7568 398.231 -255.436 32.4721 390.015 -255.548 40.6962 379.305 -255.631 47.1958 366.77 -255.897 80.8632 237.397 -255.553 80.8169 84.4014 -252.746 -89.1543 84.4597 -182.756 -87.9983 84.6163 -183.099 -87.9518 237.611 -253.089 -89.1077 237.455 -252.746 -89.1543 84.4597 -183.099 -87.9518 237.611 -182.756 -87.9983 84.6163 -185.563 81.9729 84.5581 -185.907 82.0192 237.554 -185.641 48.3518 366.926 -185.558 41.8521 379.461 -185.446 33.6281 390.172 -185.288 22.9128 398.388 -185.094 10.4365 403.551 -184.877 -2.95073 405.308 -184.652 -16.3364 403.54 -184.435 -28.8083 398.368 -184.24 -39.5166 390.143 -184.08 -47.7315 379.427 -183.945 -54.2055 366.962 -183.099 -87.9518 237.611 -183.945 -54.2055 366.962 -253.936 -55.3615 366.805 -253.089 -89.1077 237.455 -271.785 -4.15165 256.086 -272.243 23.5145 259.74 -255.245 23.7957 259.74 -254.787 -3.87046 256.085 -270.534 -79.7547 287.368 -270.901 -57.6078 270.387 -253.903 -57.3266 270.387 -253.537 -79.4735 287.368 -270.253 -96.7526 309.503 -270.534 -79.7547 287.368 -253.537 -79.4735 287.368 -253.255 -96.4714 309.503 -270.076 -107.443 335.284 -270.253 -96.7526 309.503 -253.255 -96.4714 309.503 -253.078 -107.162 335.284 -270.016 -111.097 362.954 -270.076 -107.443 335.284 -253.078 -107.162 335.284 -253.018 -110.816 362.954 -270.076 -107.467 390.627 -270.016 -111.097 362.954 -253.018 -110.816 362.954 -253.078 -107.185 390.627 -270.252 -96.7982 416.418 -270.076 -107.467 390.627 -253.078 -107.185 390.627 -253.254 -96.5171 416.418 -270.533 -79.8193 438.568 -270.252 -96.7982 416.418 -253.254 -96.5171 416.418 -253.535 -79.5381 438.568 -270.899 -57.6868 455.568 -270.533 -79.8193 438.568 -253.535 -79.5381 438.568 -253.901 -57.4056 455.568 -271.325 -31.9092 466.26 -270.899 -57.6868 455.568 -253.901 -57.4056 455.568 -254.328 -31.628 466.26 -271.783 -4.24296 469.915 -271.325 -31.9092 466.26 -254.328 -31.628 466.26 -254.785 -3.96177 469.915 -272.241 23.4264 466.283 -271.783 -4.24296 469.915 -254.785 -3.96177 469.915 -255.243 23.7076 466.283 -272.667 49.2132 455.614 -272.241 23.4264 466.283 -255.243 23.7076 466.283 -255.67 49.4944 455.614 -273.034 71.3601 438.632 -272.667 49.2132 455.614 -255.67 49.4944 455.614 -256.036 71.6413 438.632 -273.315 88.358 416.497 -273.034 71.3601 438.632 -256.036 71.6413 438.632 -256.317 88.6392 416.497 -273.492 99.0483 390.716 -273.315 88.358 416.497 -256.317 88.6392 416.497 -256.494 99.3295 390.716 -273.552 102.703 363.046 -273.492 99.0483 390.716 -256.494 99.3295 390.716 -256.555 102.984 363.046 -273.492 99.072 335.373 -273.552 102.703 363.046 -256.555 102.984 363.046 -256.495 99.3532 335.373 -273.316 88.4036 309.582 -273.492 99.072 335.373 -256.495 99.3532 335.373 -256.318 88.6848 309.582 -273.035 71.4247 287.432 -273.316 88.4036 309.582 -256.318 88.6848 309.582 -256.038 71.7059 287.432 -272.669 49.2922 270.432 -273.035 71.4247 287.432 -256.038 71.7059 287.432 -255.671 49.5734 270.432 -272.243 23.5145 259.74 -272.669 49.2922 270.432 -255.671 49.5734 270.432 -255.245 23.7957 259.74 -255.245 23.7957 259.74 -255.671 49.5734 270.432 -256.038 71.7059 287.432 -256.318 88.6848 309.582 -256.495 99.3532 335.373 -256.555 102.984 363.046 -256.494 99.3295 390.716 -256.317 88.6392 416.497 -256.036 71.6413 438.632 -255.67 49.4944 455.614 -255.243 23.7076 466.283 -254.785 -3.96177 469.915 -254.328 -31.628 466.26 -253.901 -57.4056 455.568 -253.535 -79.5381 438.568 -253.254 -96.5171 416.418 -253.078 -107.185 390.627 -253.018 -110.816 362.954 -253.078 -107.162 335.284 -253.255 -96.4714 309.503 -253.537 -79.4735 287.368 -253.903 -57.3266 270.387 -254.33 -31.5397 259.717 -254.787 -3.87046 256.085 -270.901 -57.6078 270.387 -271.327 -31.8209 259.717 -254.33 -31.5397 259.717 -253.903 -57.3266 270.387 -271.785 -4.15165 256.086 -271.327 -31.8209 259.717 -270.901 -57.6078 270.387 -270.534 -79.7547 287.368 -270.253 -96.7526 309.503 -270.076 -107.443 335.284 -270.016 -111.097 362.954 -270.076 -107.467 390.627 -270.252 -96.7982 416.418 -270.533 -79.8193 438.568 -270.899 -57.6868 455.568 -271.325 -31.9092 466.26 -271.783 -4.24296 469.915 -272.241 23.4264 466.283 -272.667 49.2132 455.614 -273.034 71.3601 438.632 -273.315 88.358 416.497 -273.492 99.0483 390.716 -273.552 102.703 363.046 -273.492 99.072 335.373 -273.316 88.4036 309.582 -273.035 71.4247 287.432 -272.669 49.2922 270.432 -272.243 23.5145 259.74 -271.327 -31.8209 259.717 -271.785 -4.15165 256.086 -254.787 -3.87046 256.085 -254.33 -31.5397 259.717 1310 28.4701 -106.252 1310 77.7817 -77.7817 1420 77.7817 -77.7817 1420 28.4701 -106.252 1310 -106.252 -28.4701 1310 -77.7818 -77.7817 1420 -77.7818 -77.7817 1420 -106.252 -28.4701 1310 -106.252 28.4701 1310 -106.252 -28.4701 1420 -106.252 -28.4701 1420 -106.252 28.4701 1310 -77.7817 77.7818 1310 -106.252 28.4701 1420 -106.252 28.4701 1420 -77.7817 77.7818 1310 -28.4701 106.252 1310 -77.7817 77.7818 1420 -77.7817 77.7818 1420 -28.4701 106.252 1310 28.4701 106.252 1310 -28.4701 106.252 1420 -28.4701 106.252 1420 28.4701 106.252 1310 77.7817 77.7817 1310 28.4701 106.252 1420 28.4701 106.252 1420 77.7817 77.7817 1310 106.252 28.4701 1310 77.7817 77.7817 1420 77.7817 77.7817 1420 106.252 28.4701 1310 106.252 -28.4701 1310 106.252 28.4701 1420 106.252 28.4701 1420 106.252 -28.4701 1310 77.7817 -77.7817 1310 106.252 -28.4701 1420 106.252 -28.4701 1420 77.7817 -77.7817 1420 77.7817 -77.7817 1420 106.252 -28.4701 1420 106.252 28.4701 1420 77.7817 77.7817 1420 28.4701 106.252 1420 -28.4701 106.252 1420 -77.7817 77.7818 1420 -106.252 28.4701 1420 -106.252 -28.4701 1420 -77.7818 -77.7817 1420 -28.4701 -106.252 1420 28.4701 -106.252 1310 -77.7818 -77.7817 1310 -28.4701 -106.252 1420 -28.4701 -106.252 1420 -77.7818 -77.7817 1310 28.4701 -106.252 1310 -28.4701 -106.252 1310 -77.7818 -77.7817 1310 -106.252 -28.4701 1310 -106.252 28.4701 1310 -77.7817 77.7818 1310 -28.4701 106.252 1310 28.4701 106.252 1310 77.7817 77.7817 1310 106.252 28.4701 1310 106.252 -28.4701 1310 77.7817 -77.7817 1310 -28.4701 -106.252 1310 28.4701 -106.252 1420 28.4701 -106.252 1420 -28.4701 -106.252 1435 97.2272 -97.2272 1435 132.815 -35.5876 1435 132.815 35.5876 1435 97.2272 97.2272 1435 35.5876 132.815 1435 -35.5876 132.815 1435 -97.2272 97.2272 1435 -132.815 35.5876 1435 -132.815 -35.5876 1435 -97.2272 -97.2272 1435 -35.5876 -132.815 1435 35.5876 -132.815 1420 -77.7818 -77.7817 1420 -28.4701 -106.252 1435 -35.5876 -132.815 1435 -97.2272 -97.2272 1420 -106.252 -28.4701 1420 -77.7818 -77.7817 1435 -97.2272 -97.2272 1435 -132.815 -35.5876 1420 -106.252 28.4701 1420 -106.252 -28.4701 1435 -132.815 -35.5876 1435 -132.815 35.5876 1420 -77.7817 77.7818 1420 -106.252 28.4701 1435 -132.815 35.5876 1435 -97.2272 97.2272 1420 -28.4701 106.252 1420 -77.7817 77.7818 1435 -97.2272 97.2272 1435 -35.5876 132.815 1420 28.4701 106.252 1420 -28.4701 106.252 1435 -35.5876 132.815 1435 35.5876 132.815 1420 77.7817 77.7817 1420 28.4701 106.252 1435 35.5876 132.815 1435 97.2272 97.2272 1420 106.252 28.4701 1420 77.7817 77.7817 1435 97.2272 97.2272 1435 132.815 35.5876 1420 106.252 -28.4701 1420 106.252 28.4701 1435 132.815 35.5876 1435 132.815 -35.5876 1420 77.7817 -77.7817 1420 106.252 -28.4701 1435 132.815 -35.5876 1435 97.2272 -97.2272 1420 28.4701 -106.252 1420 77.7817 -77.7817 1435 97.2272 -97.2272 1435 35.5876 -132.815 1420 -28.4701 -106.252 1420 28.4701 -106.252 1435 35.5876 -132.815 1435 -35.5876 -132.815 1435 -97.2272 -97.2272 1435 -35.5876 -132.815 1535 -35.5876 -132.815 1535 -97.2272 -97.2272 1435 -132.815 -35.5876 1435 -97.2272 -97.2272 1535 -97.2272 -97.2272 1535 -132.815 -35.5876 1435 -132.815 35.5876 1435 -132.815 -35.5876 1535 -132.815 -35.5876 1535 -132.815 35.5876 1435 -97.2272 97.2272 1435 -132.815 35.5876 1535 -132.815 35.5876 1535 -97.2272 97.2272 1435 -35.5876 132.815 1435 -97.2272 97.2272 1535 -97.2272 97.2272 1535 -35.5876 132.815 1435 35.5876 132.815 1435 -35.5876 132.815 1535 -35.5876 132.815 1535 35.5876 132.815 1435 97.2272 97.2272 1435 35.5876 132.815 1535 35.5876 132.815 1535 97.2272 97.2272 1435 132.815 35.5876 1435 97.2272 97.2272 1535 97.2272 97.2272 1535 132.815 35.5876 1435 132.815 -35.5876 1435 132.815 35.5876 1535 132.815 35.5876 1535 132.815 -35.5876 1435 97.2272 -97.2272 1435 132.815 -35.5876 1535 132.815 -35.5876 1535 97.2272 -97.2272 1435 35.5876 -132.815 1435 97.2272 -97.2272 1535 97.2272 -97.2272 1535 35.5876 -132.815 1435 -35.5876 -132.815 1435 35.5876 -132.815 1535 35.5876 -132.815 1535 -35.5876 -132.815 -310.432 -244.348 327.548 -240.442 -243.192 327.705 -240.892 -216.946 334.739 -310.882 -218.102 334.582 -244.677 65 -53.4127 -244.918 65 53.9512 -241.338 -188.887 327.22 -240.892 -216.946 334.739 -240.442 -243.192 327.705 -240.082 -262.405 308.489 -239.907 -269.436 282.241 -239.964 -262.402 255.989 -242.433 -70.8991 -53.4127 -310.072 -263.561 308.332 -240.082 -262.405 308.489 -240.442 -243.192 327.705 -310.432 -244.348 327.548 -314.687 65 -53.4127 -312.422 -72.1525 -53.4128 -309.954 -263.559 255.832 -309.897 -270.592 282.083 -310.072 -263.561 308.332 -310.432 -244.348 327.548 -310.882 -218.102 334.582 -311.328 -190.043 327.063 -314.925 65 52.5498 -314.925 65 52.5498 -311.328 -190.043 327.063 -241.338 -188.887 327.22 -244.918 65 53.9512 -312.422 -72.1525 -53.4128 -242.433 -70.8991 -53.4127 -239.964 -262.402 255.989 -309.954 -263.559 255.832 -309.954 -263.559 255.832 -239.964 -262.402 255.989 -239.907 -269.436 282.241 -309.897 -270.592 282.083 -309.897 -270.592 282.083 -239.907 -269.436 282.241 -240.082 -262.405 308.489 -310.072 -263.561 308.332 -278.675 261.062 282.029 -278.675 261.062 282.029 -278.617 254.028 308.278 -278.617 254.028 308.278 -278.5 254.03 255.778 -278.5 254.03 255.778 -278.343 234.814 327.494 -277.926 208.567 334.528 -277.476 182.321 327.494 -277.428 205.46 135.415 -274.654 63.0984 -53.4127 -272.961 -65 134.821 -272.539 -65 -53.4127 -208.684 262.217 282.186 -208.684 262.217 282.186 -208.627 255.184 308.435 -208.627 255.184 308.435 -208.509 255.185 255.935 -208.509 255.185 255.935 -208.353 235.97 327.651 -207.935 209.723 334.685 -207.486 183.477 327.651 -207.464 207.811 138.533 -204.645 63.0985 -53.4127 -202.95 -65 134.078 -202.529 -65 -53.4127 -204.645 63.0985 -53.4127 -274.654 63.0984 -53.4127 -277.428 205.46 135.415 -207.464 207.811 138.533 -278.5 254.03 255.778 -208.509 255.185 255.935 -207.464 207.811 138.533 -277.428 205.46 135.415 -202.95 -65 134.078 -207.486 183.477 327.651 -277.476 182.321 327.494 -272.961 -65 134.821 -277.926 208.567 334.528 -277.476 182.321 327.494 -207.486 183.477 327.651 -207.935 209.723 334.685 -208.627 255.184 308.435 -278.617 254.028 308.278 -278.343 234.814 327.494 -208.353 235.97 327.651 -350 -85 -85 0 -85 -85 0 -85 85 -350 -85 85 -350 85 85 -350 -85 85 0 -85 85 0 85 85 0 85 -85 -350 85 -85 -350 85 85 0 85 85 -350 85 -85 0 85 -85 0 -85 -85 -350 -85 -85 -350 85 -85 -350 -85 -85 -350 -85 85 -350 85 85 1471.7 -27.5 132.815 1471.7 27.5 132.815 1471.7 27.5 150.815 1471.7 -27.5 150.815 1446.7 -27.5 132.815 1471.7 -27.5 132.815 1471.7 -27.5 150.815 1446.7 -27.5 150.815 1446.7 27.5 150.815 1446.7 -27.5 150.815 1471.7 -27.5 150.815 1471.7 27.5 150.815 1471.7 27.5 132.815 1446.7 27.5 132.815 1446.7 27.5 150.815 1471.7 27.5 150.815 1446.7 27.5 132.815 1471.7 27.5 132.815 1471.7 -27.5 132.815 1446.7 -27.5 132.815 1446.7 27.5 132.815 1446.7 -27.5 132.815 1446.7 -27.5 150.815 1446.7 27.5 150.815 -241.338 -188.887 327.22 -311.328 -190.043 327.063 -310.882 -218.102 334.582 -240.892 -216.946 334.739 -529.615 -228.073 236.436 -529.277 -249.795 245.665 -529.084 -263.995 264.52 -529.09 -266.866 287.949 -529.291 -257.639 309.674 -529.634 -238.787 323.875 -530.027 -215.361 326.745 -530.365 -193.638 317.516 -530.558 -179.439 298.662 -530.552 -176.568 275.232 -530.351 -185.795 253.507 -530.008 -204.647 239.307 -521.529 -176.419 275.253 -521.328 -185.646 253.527 -530.351 -185.795 253.507 -530.552 -176.568 275.232 -521.534 -179.29 298.682 -521.529 -176.419 275.253 -530.552 -176.568 275.232 -530.558 -179.439 298.662 -521.342 -193.489 317.537 -521.534 -179.29 298.682 -530.558 -179.439 298.662 -530.365 -193.638 317.516 -521.003 -215.212 326.765 -521.342 -193.489 317.537 -530.365 -193.638 317.516 -530.027 -215.361 326.745 -520.61 -238.638 323.895 -521.003 -215.212 326.765 -530.027 -215.361 326.745 -529.634 -238.787 323.875 -520.267 -257.49 309.695 -520.61 -238.638 323.895 -529.634 -238.787 323.875 -529.291 -257.639 309.674 -520.066 -266.716 287.969 -520.267 -257.49 309.695 -529.291 -257.639 309.674 -529.09 -266.866 287.949 -520.061 -263.846 264.54 -520.066 -266.716 287.969 -529.09 -266.866 287.949 -529.084 -263.995 264.52 -520.253 -249.646 245.685 -520.061 -263.846 264.54 -529.084 -263.995 264.52 -529.277 -249.795 245.665 -520.591 -227.924 236.457 -520.253 -249.646 245.685 -529.277 -249.795 245.665 -529.615 -228.073 236.436 -520.984 -204.498 239.327 -520.591 -227.924 236.457 -529.615 -228.073 236.436 -530.008 -204.647 239.307 -521.328 -185.646 253.527 -520.984 -204.498 239.327 -530.008 -204.647 239.307 -530.351 -185.795 253.507 -519.959 -260.012 191.089 -519.367 -300.118 222.443 -519.158 -319.175 269.651 -519.389 -312.079 320.064 -519.996 -280.731 360.173 -520.819 -233.53 379.232 -521.635 -183.123 372.133 -522.227 -143.018 340.779 -522.436 -123.96 293.571 -522.206 -131.056 243.158 -521.598 -162.405 203.049 -520.776 -209.606 183.99 -472.575 -130.237 243.269 -471.968 -161.585 203.16 -521.598 -162.405 203.049 -522.206 -131.056 243.158 -472.806 -123.141 293.682 -472.575 -130.237 243.269 -522.206 -131.056 243.158 -522.436 -123.96 293.571 -472.597 -142.198 340.89 -472.806 -123.141 293.682 -522.436 -123.96 293.571 -522.227 -143.018 340.779 -472.005 -182.304 372.245 -472.597 -142.198 340.89 -522.227 -143.018 340.779 -521.635 -183.123 372.133 -471.188 -232.71 379.343 -472.005 -182.304 372.245 -521.635 -183.123 372.133 -520.819 -233.53 379.232 -470.366 -279.911 360.285 -471.188 -232.71 379.343 -520.819 -233.53 379.232 -519.996 -280.731 360.173 -469.758 -311.26 320.175 -470.366 -279.911 360.285 -519.996 -280.731 360.173 -519.389 -312.079 320.064 -469.528 -318.356 269.762 -469.758 -311.26 320.175 -519.389 -312.079 320.064 -519.158 -319.175 269.651 -469.737 -299.298 222.554 -469.528 -318.356 269.762 -519.158 -319.175 269.651 -519.367 -300.118 222.443 -470.329 -259.193 191.2 -469.737 -299.298 222.554 -519.367 -300.118 222.443 -519.959 -260.012 191.089 -471.145 -208.786 184.101 -470.329 -259.193 191.2 -519.959 -260.012 191.089 -520.776 -209.606 183.99 -471.968 -161.585 203.16 -471.145 -208.786 184.101 -520.776 -209.606 183.99 -521.598 -162.405 203.049 -325.057 -324.223 290.528 -325.63 -297.965 352.356 -361.725 -298.562 352.275 -361.152 -324.82 290.447 -325.447 -288.661 202.436 -325.057 -324.223 290.528 -361.152 -324.82 290.447 -361.542 -289.257 202.355 -326.409 -226.84 176.172 -325.447 -288.661 202.436 -361.542 -289.257 202.355 -362.504 -227.436 176.091 -327.944 -138.762 211.736 -326.409 -226.84 176.172 -362.504 -227.436 176.091 -364.039 -139.358 211.655 -328.516 -112.504 273.564 -327.944 -138.762 211.736 -364.039 -139.358 211.655 -364.611 -113.1 273.483 -328.126 -148.066 361.656 -328.516 -112.504 273.564 -364.611 -113.1 273.483 -364.221 -148.662 361.575 -327.164 -209.887 387.92 -328.126 -148.066 361.656 -364.221 -148.662 361.575 -363.259 -210.483 387.839 -325.63 -297.965 352.356 -327.164 -209.887 387.92 -363.259 -210.483 387.839 -361.725 -298.562 352.275 -473.467 -30.3367 323.509 -473.191 -47.0252 340.2 -473.09 -53.1336 363 -473.191 -47.0252 385.8 -473.467 -30.3367 402.491 -473.844 -7.53983 408.6 -474.221 15.2571 402.491 -474.497 31.9455 385.8 -474.598 38.0539 363 -474.497 31.9455 340.2 -474.221 15.2571 323.509 -473.844 -7.53983 317.4 -465.473 32.0948 340.2 -465.197 15.4063 323.509 -474.221 15.2571 323.509 -474.497 31.9455 340.2 -465.574 38.2032 363 -465.473 32.0948 340.2 -474.497 31.9455 340.2 -474.598 38.0539 363 -465.473 32.0948 385.8 -465.574 38.2032 363 -474.598 38.0539 363 -474.497 31.9455 385.8 -465.197 15.4063 402.491 -465.473 32.0948 385.8 -474.497 31.9455 385.8 -474.221 15.2571 402.491 -464.82 -7.39055 408.6 -465.197 15.4063 402.491 -474.221 15.2571 402.491 -473.844 -7.53983 408.6 -464.443 -30.1874 402.491 -464.82 -7.39055 408.6 -473.844 -7.53983 408.6 -473.467 -30.3367 402.491 -464.167 -46.8759 385.8 -464.443 -30.1874 402.491 -473.467 -30.3367 402.491 -473.191 -47.0252 385.8 -464.066 -52.9843 363 -464.167 -46.8759 385.8 -473.191 -47.0252 385.8 -473.09 -53.1336 363 -464.167 -46.8759 340.2 -464.066 -52.9843 363 -473.09 -53.1336 363 -473.191 -47.0252 340.2 -464.443 -30.1874 323.509 -464.167 -46.8759 340.2 -473.191 -47.0252 340.2 -473.467 -30.3367 323.509 -464.82 -7.39055 317.4 -464.443 -30.1874 323.509 -473.467 -30.3367 323.509 -473.844 -7.53983 317.4 -465.197 15.4063 323.509 -464.82 -7.39055 317.4 -473.844 -7.53983 317.4 -474.221 15.2571 323.509 -496.209 169.032 253.454 -496.105 159.804 275.179 -496.205 162.673 298.608 -496.481 176.871 317.463 -496.861 198.593 326.692 -497.241 222.019 323.821 -497.521 240.872 309.621 -497.625 250.1 287.896 -497.525 247.231 264.467 -497.249 233.033 245.612 -496.869 211.311 236.383 -496.489 187.885 239.253 -488.225 233.183 245.632 -487.845 211.46 236.403 -496.869 211.311 236.383 -497.249 233.033 245.612 -488.501 247.38 264.487 -488.225 233.183 245.632 -497.249 233.033 245.612 -497.525 247.231 264.467 -488.601 250.249 287.916 -488.501 247.38 264.487 -497.525 247.231 264.467 -497.625 250.1 287.896 -488.497 241.021 309.641 -488.601 250.249 287.916 -497.625 250.1 287.896 -497.521 240.872 309.621 -488.218 222.168 323.842 -488.497 241.021 309.641 -497.521 240.872 309.621 -497.241 222.019 323.821 -487.837 198.742 326.712 -488.218 222.168 323.842 -497.241 222.019 323.821 -496.861 198.593 326.692 -487.458 177.02 317.483 -487.837 198.742 326.712 -496.861 198.593 326.692 -496.481 176.871 317.463 -487.181 162.822 298.628 -487.458 177.02 317.483 -496.481 176.871 317.463 -496.205 162.673 298.608 -487.081 159.953 275.199 -487.181 162.822 298.628 -496.205 162.673 298.608 -496.105 159.804 275.179 -487.185 169.181 253.474 -487.081 159.953 275.199 -496.105 159.804 275.179 -496.209 169.032 253.454 -487.465 188.034 239.274 -487.185 169.181 253.474 -496.209 169.032 253.454 -496.489 187.885 239.253 -487.845 211.46 236.403 -487.465 188.034 239.274 -496.489 187.885 239.253 -496.869 211.311 236.383 -292.847 138.002 361.601 -293.927 199.821 387.865 -330.022 199.225 387.784 -328.942 137.406 361.52 -292.063 102.446 273.509 -292.847 138.002 361.601 -328.942 137.406 361.52 -328.158 101.85 273.428 -292.359 128.709 211.681 -292.063 102.446 273.509 -328.158 101.85 273.428 -328.454 128.113 211.601 -293.734 216.79 176.117 -292.359 128.709 211.681 -328.454 128.113 211.601 -329.829 216.194 176.037 -294.814 278.609 202.381 -293.734 216.79 176.117 -329.829 216.194 176.037 -330.909 278.013 202.3 -295.598 314.165 290.473 -294.814 278.609 202.381 -330.909 278.013 202.3 -331.693 313.569 290.392 -295.302 287.902 352.301 -295.598 314.165 290.473 -331.693 313.569 290.392 -331.397 287.306 352.22 -293.927 199.821 387.865 -295.302 287.902 352.301 -331.397 287.306 352.22 -330.022 199.225 387.784 - - - - - - - - - - 0.0133366 -0.713326 -0.700705 0.01648 -0.999824 0.00897244 0.01648 -0.999824 0.00897244 0.0133366 -0.713326 -0.700705 0.00238044 -0.00894192 -0.999957 0.0133366 -0.713326 -0.700705 0.0133366 -0.713326 -0.700705 0.00238044 -0.00894192 -0.999957 -0.00994903 0.700644 -0.713442 0.00238044 -0.00894192 -0.999957 0.00238044 -0.00894192 -0.999957 -0.00994903 0.700644 -0.713442 -0.01648 0.999824 -0.00897244 -0.00994903 0.700644 -0.713442 -0.00994903 0.700644 -0.713442 -0.01648 0.999824 -0.00897244 -0.0133366 0.713326 0.700705 -0.01648 0.999824 -0.00897244 -0.01648 0.999824 -0.00897244 -0.0133366 0.713326 0.700705 -0.00238044 0.00894192 0.999957 -0.0133366 0.713326 0.700705 -0.0133366 0.713326 0.700705 -0.00238044 0.00894192 0.999957 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 0.01648 -0.999824 0.00897244 0.00994903 -0.700644 0.713442 0.00994903 -0.700644 0.713442 0.01648 -0.999824 0.00897244 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.00994903 -0.700644 0.713442 -0.00238044 0.00894192 0.999957 -0.00238044 0.00894192 0.999957 0.00994903 -0.700644 0.713442 0.0165105 -0.999823 -0.00897244 0.0101932 -0.713378 0.700705 0.0101932 -0.713378 0.700705 0.0165105 -0.999823 -0.00897244 0.0131535 -0.700583 -0.71345 0.0165105 -0.999823 -0.00897244 0.0165105 -0.999823 -0.00897244 0.0131535 -0.700583 -0.71345 0.00207526 0.00900296 -0.999957 0.0131535 -0.700583 -0.71345 0.0131535 -0.700583 -0.71345 0.00207526 0.00900296 -0.999957 -0.0101932 0.713378 -0.700705 0.00207526 0.00900296 -0.999957 0.00207526 0.00900296 -0.999957 -0.0101932 0.713378 -0.700705 -0.0165105 0.999823 0.00897244 -0.0101932 0.713378 -0.700705 -0.0101932 0.713378 -0.700705 -0.0165105 0.999823 0.00897244 -0.0131535 0.700583 0.71345 -0.0165105 0.999823 0.00897244 -0.0165105 0.999823 0.00897244 -0.0131535 0.700583 0.71345 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 0.0101932 -0.713378 0.700705 -0.00207526 -0.00900296 0.999957 -0.00207526 -0.00900296 0.999957 0.0101932 -0.713378 0.700705 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 -0.00207526 -0.00900296 0.999957 -0.0131535 0.700583 0.71345 -0.0131535 0.700583 0.71345 -0.00207526 -0.00900296 0.999957 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.00439467 0.390942 -0.920405 0.00421155 -0.121525 -0.992579 0.00421155 -0.121525 -0.992579 -0.00439467 0.390942 -0.920405 -0.0118412 0.798724 -0.601581 -0.00439467 0.390942 -0.920405 -0.00439467 0.390942 -0.920405 -0.0118412 0.798724 -0.601581 -0.0161138 0.99245 -0.121586 -0.0118412 0.798724 -0.601581 -0.0118412 0.798724 -0.601581 -0.0161138 0.99245 -0.121586 -0.0160527 0.920262 0.390973 -0.0161138 0.99245 -0.121586 -0.0161138 0.99245 -0.121586 -0.0160527 0.920262 0.390973 -0.0116886 0.601489 0.798795 -0.0160527 0.920262 0.390973 -0.0160527 0.920262 0.390973 -0.0116886 0.601489 0.798795 -0.00421155 0.121525 0.992579 -0.0116886 0.601489 0.798795 -0.0116886 0.601489 0.798795 -0.00421155 0.121525 0.992579 0.00439467 -0.390942 0.920405 -0.00421155 0.121525 0.992579 -0.00421155 0.121525 0.992579 0.00439467 -0.390942 0.920405 0.0118412 -0.798724 0.601581 0.00439467 -0.390942 0.920405 0.00439467 -0.390942 0.920405 0.0118412 -0.798724 0.601581 0.0161138 -0.99245 0.121586 0.0118412 -0.798724 0.601581 0.0118412 -0.798724 0.601581 0.0161138 -0.99245 0.121586 0.0160527 -0.920262 -0.390973 0.0161138 -0.99245 0.121586 0.0161138 -0.99245 0.121586 0.0160527 -0.920262 -0.390973 0.0116886 -0.601489 -0.798795 0.0160527 -0.920262 -0.390973 0.0160527 -0.920262 -0.390973 0.0116886 -0.601489 -0.798795 0.00421155 -0.121525 -0.992579 0.0116886 -0.601489 -0.798795 0.0116886 -0.601489 -0.798795 0.00421155 -0.121525 -0.992579 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.0116886 0.706992 -0.707125 -0.00427259 0.258766 -0.96593 -0.00427259 0.258766 -0.96593 -0.0116886 0.706992 -0.707125 -0.0159612 0.9658 -0.258797 -0.0116886 0.706992 -0.707125 -0.0116886 0.706992 -0.707125 -0.0159612 0.9658 -0.258797 -0.0159612 0.9658 0.258797 -0.0159612 0.9658 -0.258797 -0.0159612 0.9658 -0.258797 -0.0159612 0.9658 0.258797 -0.0116886 0.706992 0.707125 -0.0159612 0.9658 0.258797 -0.0159612 0.9658 0.258797 -0.0116886 0.706992 0.707125 -0.00427259 0.258766 0.96593 -0.0116886 0.706992 0.707125 -0.0116886 0.706992 0.707125 -0.00427259 0.258766 0.96593 0.00427259 -0.258766 0.96593 -0.00427259 0.258766 0.96593 -0.00427259 0.258766 0.96593 0.00427259 -0.258766 0.96593 0.0116886 -0.706992 0.707125 0.00427259 -0.258766 0.96593 0.00427259 -0.258766 0.96593 0.0116886 -0.706992 0.707125 0.0159612 -0.9658 0.258797 0.0116886 -0.706992 0.707125 0.0116886 -0.706992 0.707125 0.0159612 -0.9658 0.258797 0.0159612 -0.9658 -0.258797 0.0159612 -0.9658 0.258797 0.0159612 -0.9658 0.258797 0.0159612 -0.9658 -0.258797 0.0116886 -0.706992 -0.707125 0.0159612 -0.9658 -0.258797 0.0159612 -0.9658 -0.258797 0.0116886 -0.706992 -0.707125 0.00427259 -0.258766 -0.96593 0.0116886 -0.706992 -0.707125 0.0116886 -0.706992 -0.707125 0.00427259 -0.258766 -0.96593 -0.00427259 0.258766 -0.96593 0.00427259 -0.258766 -0.96593 0.00427259 -0.258766 -0.96593 -0.00427259 0.258766 -0.96593 0.0152593 -0.923758 -0.382672 0.0152593 -0.923758 0.382672 0.0152593 -0.923758 0.382672 0.0152593 -0.923758 -0.382672 0.00631733 -0.382611 -0.923888 0.0152593 -0.923758 -0.382672 0.0152593 -0.923758 -0.382672 0.00631733 -0.382611 -0.923888 -0.00631733 0.382611 -0.923888 0.00631733 -0.382611 -0.923888 0.00631733 -0.382611 -0.923888 -0.00631733 0.382611 -0.923888 -0.0152593 0.923758 -0.382672 -0.00631733 0.382611 -0.923888 -0.00631733 0.382611 -0.923888 -0.0152593 0.923758 -0.382672 -0.0152593 0.923758 0.382672 -0.0152593 0.923758 -0.382672 -0.0152593 0.923758 -0.382672 -0.0152593 0.923758 0.382672 -0.00631733 0.382611 0.923888 -0.0152593 0.923758 0.382672 -0.0152593 0.923758 0.382672 -0.00631733 0.382611 0.923888 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 0.0152593 -0.923758 0.382672 0.00631733 -0.382611 0.923888 0.00631733 -0.382611 0.923888 0.0152593 -0.923758 0.382672 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.00631733 -0.382611 0.923888 -0.00631733 0.382611 0.923888 -0.00631733 0.382611 0.923888 0.00631733 -0.382611 0.923888 0.0152593 -0.923758 0.382672 0.00631733 -0.382611 0.923888 0.00631733 -0.382611 0.923888 0.0152593 -0.923758 0.382672 0.0152593 -0.923758 -0.382672 0.0152593 -0.923758 0.382672 0.0152593 -0.923758 0.382672 0.0152593 -0.923758 -0.382672 0.00631733 -0.382611 -0.923888 0.0152593 -0.923758 -0.382672 0.0152593 -0.923758 -0.382672 0.00631733 -0.382611 -0.923888 -0.00631733 0.382611 -0.923888 0.00631733 -0.382611 -0.923888 0.00631733 -0.382611 -0.923888 -0.00631733 0.382611 -0.923888 -0.0152593 0.923758 -0.382672 -0.00631733 0.382611 -0.923888 -0.00631733 0.382611 -0.923888 -0.0152593 0.923758 -0.382672 -0.0152593 0.923758 0.382672 -0.0152593 0.923758 -0.382672 -0.0152593 0.923758 -0.382672 -0.0152593 0.923758 0.382672 -0.00631733 0.382611 0.923888 -0.0152593 0.923758 0.382672 -0.0152593 0.923758 0.382672 -0.00631733 0.382611 0.923888 0.00631733 -0.382611 0.923888 -0.00631733 0.382611 0.923888 -0.00631733 0.382611 0.923888 0.00631733 -0.382611 0.923888 0.00222785 0.000396741 -0.999997 -0.00210578 0.259194 -0.965823 -0.00210578 0.259194 -0.965823 0.00222785 0.000396741 -0.999997 0.013245 -0.706687 -0.707403 0.0101932 -0.499557 -0.866221 0.0101932 -0.499557 -0.866221 0.013245 -0.706687 -0.707403 0.0154118 -0.865703 -0.50032 0.013245 -0.706687 -0.707403 0.013245 -0.706687 -0.707403 0.0154118 -0.865703 -0.50032 0.0165105 -0.965684 -0.259194 0.0154118 -0.865703 -0.50032 0.0154118 -0.865703 -0.50032 0.0165105 -0.965684 -0.259194 0.0165105 -0.999864 -0.000366222 0.0165105 -0.965684 -0.259194 0.0165105 -0.965684 -0.259194 0.0165105 -0.999864 -0.000366222 0.0153508 -0.965908 0.258431 0.0165105 -0.999864 -0.000366222 0.0165105 -0.999864 -0.000366222 0.0153508 -0.965908 0.258431 0.0131535 -0.866128 0.499649 0.0153508 -0.965908 0.258431 0.0153508 -0.965908 0.258431 0.0131535 -0.866128 0.499649 0.0100711 -0.707333 0.706809 0.0131535 -0.866128 0.499649 0.0131535 -0.866128 0.499649 0.0100711 -0.707333 0.706809 0.00628681 -0.50029 0.865835 0.0100711 -0.707333 0.706809 0.0100711 -0.707333 0.706809 0.00628681 -0.50029 0.865835 0.00210578 -0.259194 0.965823 0.00628681 -0.50029 0.865835 0.00628681 -0.50029 0.865835 0.00210578 -0.259194 0.965823 -0.00222785 -0.000396741 0.999997 0.00210578 -0.259194 0.965823 0.00210578 -0.259194 0.965823 -0.00222785 -0.000396741 0.999997 -0.00640889 0.25837 0.966025 -0.00222785 -0.000396741 0.999997 -0.00222785 -0.000396741 0.999997 -0.00640889 0.25837 0.966025 -0.0101932 0.499557 0.866221 -0.00640889 0.25837 0.966025 -0.00640889 0.25837 0.966025 -0.0101932 0.499557 0.866221 -0.013245 0.706687 0.707403 -0.0101932 0.499557 0.866221 -0.0101932 0.499557 0.866221 -0.013245 0.706687 0.707403 -0.0154118 0.865703 0.50032 -0.013245 0.706687 0.707403 -0.013245 0.706687 0.707403 -0.0154118 0.865703 0.50032 -0.0165105 0.965684 0.259194 -0.0154118 0.865703 0.50032 -0.0154118 0.865703 0.50032 -0.0165105 0.965684 0.259194 -0.0165105 0.999864 0.000366222 -0.0165105 0.965684 0.259194 -0.0165105 0.965684 0.259194 -0.0165105 0.999864 0.000366222 -0.0153508 0.965908 -0.258431 -0.0165105 0.999864 0.000366222 -0.0165105 0.999864 0.000366222 -0.0153508 0.965908 -0.258431 -0.0131535 0.866128 -0.499649 -0.0153508 0.965908 -0.258431 -0.0153508 0.965908 -0.258431 -0.0131535 0.866128 -0.499649 -0.0100711 0.707333 -0.706809 -0.0131535 0.866128 -0.499649 -0.0131535 0.866128 -0.499649 -0.0100711 0.707333 -0.706809 -0.00631733 0.50029 -0.865835 -0.0100711 0.707333 -0.706809 -0.0100711 0.707333 -0.706809 -0.00631733 0.50029 -0.865835 -0.00210578 0.259194 -0.965823 -0.00631733 0.50029 -0.865835 -0.00631733 0.50029 -0.865835 -0.00210578 0.259194 -0.965823 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.0101932 -0.499557 -0.866221 0.00640889 -0.25837 -0.966025 0.00640889 -0.25837 -0.966025 0.0101932 -0.499557 -0.866221 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 0.00640889 -0.25837 -0.966025 0.00222785 0.000396741 -0.999997 0.00222785 0.000396741 -0.999997 0.00640889 -0.25837 -0.966025 1 0 0 0 0.965932 0.258797 0 0.965932 0.258797 0 0.707083 0.70713 0 0.707083 0.70713 0 0.707083 0.70713 0 0.707083 0.70713 0 0.258797 0.965932 0 0.258797 0.965932 0 0.258797 0.965932 0 0.258797 0.965932 0 -0.258797 0.965932 0 -0.258797 0.965932 0 -0.258797 0.965932 0 -0.258797 0.965932 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.965932 0.258797 0 0.965932 0.258797 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.707083 -0.70713 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.707083 -0.70713 0 0.258797 -0.965932 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.258797 -0.965932 0 -0.258797 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.707083 -0.70713 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.707083 -0.70713 0 -0.965932 -0.258797 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.965932 -0.258797 0 -0.965932 0.258797 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.965932 0.258797 0 -0.707083 0.70713 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.707083 0.70713 0 -0.258797 0.965932 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.258797 0.965932 0 0.258797 0.965932 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0.258797 0.965932 0 0.707083 0.70713 0 0.258797 0.965932 0 0.258797 0.965932 0 0.707083 0.70713 0 0.965932 0.258797 0 0.707083 0.70713 0 0.707083 0.70713 0 0.965932 0.258797 0 0.965932 -0.258797 0 0.965932 0.258797 0 0.965932 0.258797 0 0.965932 -0.258797 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.707083 -0.70713 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.707083 -0.70713 0 0.258797 -0.965932 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.258797 -0.965932 0 -0.258797 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.707083 -0.70713 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.707083 -0.70713 0 -0.965932 -0.258797 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.965932 -0.258797 0 -0.965932 0.258797 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.965932 0.258797 0 -0.707083 0.70713 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.707083 0.70713 0 -0.258797 0.965932 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.258797 0.965932 0 0.258797 0.965932 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0.258797 0.965932 0 0.707083 0.70713 0 0.258797 0.965932 0 0.258797 0.965932 0 0.707083 0.70713 0 0.965932 0.258797 0 0.707083 0.70713 0 0.707083 0.70713 0 0.965932 0.258797 0 0.965932 -0.258797 0 0.965932 0.258797 0 0.965932 0.258797 0 0.965932 -0.258797 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.643483 0.414533 -0.6435 0.235511 0.414533 -0.879032 0.235511 0.414533 -0.879032 0.643483 0.414533 -0.6435 0.879032 0.414533 -0.235511 0.643483 0.414533 -0.6435 0.643483 0.414533 -0.6435 0.879032 0.414533 -0.235511 0.879032 0.414533 0.235511 0.879032 0.414533 -0.235511 0.879032 0.414533 -0.235511 0.879032 0.414533 0.235511 0.643483 0.414533 0.6435 0.879032 0.414533 0.235511 0.879032 0.414533 0.235511 0.643483 0.414533 0.6435 0.235511 0.414533 0.879032 0.643483 0.414533 0.6435 0.643483 0.414533 0.6435 0.235511 0.414533 0.879032 -0.235511 0.414533 0.879032 0.235511 0.414533 0.879032 0.235511 0.414533 0.879032 -0.235511 0.414533 0.879032 -0.6435 0.414533 0.643483 -0.235511 0.414533 0.879032 -0.235511 0.414533 0.879032 -0.6435 0.414533 0.643483 -0.879032 0.414533 0.235511 -0.6435 0.414533 0.643483 -0.6435 0.414533 0.643483 -0.879032 0.414533 0.235511 -0.879032 0.414533 -0.235511 -0.879032 0.414533 0.235511 -0.879032 0.414533 0.235511 -0.879032 0.414533 -0.235511 -0.6435 0.414533 -0.643483 -0.879032 0.414533 -0.235511 -0.879032 0.414533 -0.235511 -0.6435 0.414533 -0.643483 -0.235511 0.414533 -0.879032 -0.6435 0.414533 -0.643483 -0.6435 0.414533 -0.643483 -0.235511 0.414533 -0.879032 0.235511 0.414533 -0.879032 -0.235511 0.414533 -0.879032 -0.235511 0.414533 -0.879032 0.235511 0.414533 -0.879032 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.6435 -0.414533 -0.643483 -0.235511 -0.414533 -0.879032 -0.235511 -0.414533 -0.879032 -0.6435 -0.414533 -0.643483 -0.879032 -0.414533 -0.235511 -0.6435 -0.414533 -0.643483 -0.6435 -0.414533 -0.643483 -0.879032 -0.414533 -0.235511 -0.879032 -0.414533 0.235511 -0.879032 -0.414533 -0.235511 -0.879032 -0.414533 -0.235511 -0.879032 -0.414533 0.235511 -0.643483 -0.414533 0.6435 -0.879032 -0.414533 0.235511 -0.879032 -0.414533 0.235511 -0.643483 -0.414533 0.6435 -0.235511 -0.414533 0.879032 -0.643483 -0.414533 0.6435 -0.643483 -0.414533 0.6435 -0.235511 -0.414533 0.879032 0.235511 -0.414533 0.879032 -0.235511 -0.414533 0.879032 -0.235511 -0.414533 0.879032 0.235511 -0.414533 0.879032 0.6435 -0.414533 0.643483 0.235511 -0.414533 0.879032 0.235511 -0.414533 0.879032 0.6435 -0.414533 0.643483 0.879032 -0.414533 0.235511 0.6435 -0.414533 0.643483 0.6435 -0.414533 0.643483 0.879032 -0.414533 0.235511 0.879032 -0.414533 -0.235511 0.879032 -0.414533 0.235511 0.879032 -0.414533 0.235511 0.879032 -0.414533 -0.235511 0.6435 -0.414533 -0.643483 0.879032 -0.414533 -0.235511 0.879032 -0.414533 -0.235511 0.6435 -0.414533 -0.643483 0.235511 -0.414533 -0.879032 0.6435 -0.414533 -0.643483 0.6435 -0.414533 -0.643483 0.235511 -0.414533 -0.879032 -0.235511 -0.414533 -0.879032 0.235511 -0.414533 -0.879032 0.235511 -0.414533 -0.879032 -0.235511 -0.414533 -0.879032 -0.965932 0 0.258797 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.965932 0 0.258797 -0.965932 0 -0.258797 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.965932 0 -0.258797 -0.707083 0 -0.70713 -0.965932 0 -0.258797 -0.965932 0 -0.258797 -0.707083 0 -0.70713 -0.258797 0 -0.965932 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.258797 0 -0.965932 0.258797 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.965932 0.258797 0 -0.965932 0.707083 0 -0.70713 0.258797 0 -0.965932 0.258797 0 -0.965932 0.707083 0 -0.70713 0.866034 0 -0.499985 0.707083 0 -0.70713 0.707083 0 -0.70713 0.866034 0 -0.499985 0.258797 0 0.965932 0.707083 0 0.70713 0.707083 0 0.70713 0.258797 0 0.965932 0.707083 0 0.70713 0.866034 0 0.499985 0.866034 0 0.499985 0.707083 0 0.70713 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.70713 0 0.707083 -0.258797 0 0.965932 -0.258797 0 0.965932 -0.70713 0 0.707083 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.258797 0 0.965932 0.258797 0 0.965932 0.258797 0 0.965932 -0.258797 0 0.965932 0 -0.204138 0.978942 0 -0.204138 0.978942 0 -0.399701 0.916646 0 -0.399701 0.916646 0 -0.204138 0.978942 0 0.204138 0.978942 0 0.204138 0.978942 0 -0.204138 0.978942 0 0.399701 0.916646 0 0.204138 0.978942 0 0.204138 0.978942 0 0.399701 0.916646 0 1 0 0 1 0 0 1 0 0 1 0 0 0.204138 -0.978942 0 0.399701 -0.916646 0 0.399701 -0.916646 0 0.204138 -0.978942 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -0.204138 -0.978942 0 -0.204138 -0.978942 0 -0.399701 -0.916646 0 -0.399701 -0.916646 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -0.204138 -0.978942 0 0.204138 -0.978942 0 0.204138 -0.978942 0 -0.204138 -0.978942 0.00219733 0.000396741 -0.999997 -0.00210578 0.259194 -0.965823 -0.00210578 0.259194 -0.965823 0.00219733 0.000396741 -0.999997 0.013245 -0.706687 -0.707403 0.0101627 -0.499557 -0.866221 0.0101627 -0.499557 -0.866221 0.013245 -0.706687 -0.707403 0.0154118 -0.865703 -0.50032 0.013245 -0.706687 -0.707403 0.013245 -0.706687 -0.707403 0.0154118 -0.865703 -0.50032 0.0165105 -0.965684 -0.259194 0.0154118 -0.865703 -0.50032 0.0154118 -0.865703 -0.50032 0.0165105 -0.965684 -0.259194 0.0165105 -0.999864 -0.000366222 0.0165105 -0.965684 -0.259194 0.0165105 -0.965684 -0.259194 0.0165105 -0.999864 -0.000366222 0.0153508 -0.965908 0.258431 0.0165105 -0.999864 -0.000366222 0.0165105 -0.999864 -0.000366222 0.0153508 -0.965908 0.258431 0.013184 -0.866128 0.499649 0.0153508 -0.965908 0.258431 0.0153508 -0.965908 0.258431 0.013184 -0.866128 0.499649 0.0101016 -0.707333 0.706809 0.013184 -0.866128 0.499649 0.013184 -0.866128 0.499649 0.0101016 -0.707333 0.706809 0.00631733 -0.50029 0.865835 0.0101016 -0.707333 0.706809 0.0101016 -0.707333 0.706809 0.00631733 -0.50029 0.865835 0.00210578 -0.259194 0.965823 0.00631733 -0.50029 0.865835 0.00631733 -0.50029 0.865835 0.00210578 -0.259194 0.965823 -0.00219733 -0.000396741 0.999997 0.00210578 -0.259194 0.965823 0.00210578 -0.259194 0.965823 -0.00219733 -0.000396741 0.999997 -0.00640889 0.25837 0.966025 -0.00219733 -0.000396741 0.999997 -0.00219733 -0.000396741 0.999997 -0.00640889 0.25837 0.966025 -0.0101627 0.499557 0.866221 -0.00640889 0.25837 0.966025 -0.00640889 0.25837 0.966025 -0.0101627 0.499557 0.866221 -0.013245 0.706687 0.707403 -0.0101627 0.499557 0.866221 -0.0101627 0.499557 0.866221 -0.013245 0.706687 0.707403 -0.0154118 0.865703 0.50032 -0.013245 0.706687 0.707403 -0.013245 0.706687 0.707403 -0.0154118 0.865703 0.50032 -0.0165105 0.965684 0.259194 -0.0154118 0.865703 0.50032 -0.0154118 0.865703 0.50032 -0.0165105 0.965684 0.259194 -0.0165105 0.999864 0.000366222 -0.0165105 0.965684 0.259194 -0.0165105 0.965684 0.259194 -0.0165105 0.999864 0.000366222 -0.0153508 0.965908 -0.258431 -0.0165105 0.999864 0.000366222 -0.0165105 0.999864 0.000366222 -0.0153508 0.965908 -0.258431 -0.013184 0.866128 -0.499649 -0.0153508 0.965908 -0.258431 -0.0153508 0.965908 -0.258431 -0.013184 0.866128 -0.499649 -0.0101016 0.707333 -0.706809 -0.013184 0.866128 -0.499649 -0.013184 0.866128 -0.499649 -0.0101016 0.707333 -0.706809 -0.00631733 0.50029 -0.865835 -0.0101016 0.707333 -0.706809 -0.0101016 0.707333 -0.706809 -0.00631733 0.50029 -0.865835 -0.00210578 0.259194 -0.965823 -0.00631733 0.50029 -0.865835 -0.00631733 0.50029 -0.865835 -0.00210578 0.259194 -0.965823 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.0101627 -0.499557 -0.866221 0.00640889 -0.25837 -0.966025 0.00640889 -0.25837 -0.966025 0.0101627 -0.499557 -0.866221 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 0.00640889 -0.25837 -0.966025 0.00219733 0.000396741 -0.999997 0.00219733 0.000396741 -0.999997 0.00640889 -0.25837 -0.966025 0.00222785 -0.000305185 -0.999997 0.00222785 -0.000305185 -0.999997 0.00222785 -0.000305185 -0.999997 0.00222785 -0.000305185 -0.999997 -0.0166631 0.991792 0.126774 -0.0165105 0.999864 -0.000335704 -0.0165105 0.999864 -0.000335704 -0.0166631 0.991792 0.126774 -0.0162053 0.933459 0.358318 -0.0166631 0.991792 0.126774 -0.0166631 0.991792 0.126774 -0.0162053 0.933459 0.358318 -0.0151067 0.843581 0.53679 -0.0162053 0.933459 0.358318 -0.0162053 0.933459 0.358318 -0.0151067 0.843581 0.53679 -0.013245 0.706687 0.707403 -0.0151067 0.843581 0.53679 -0.0151067 0.843581 0.53679 -0.013245 0.706687 0.707403 -0.0101627 0.499557 0.866221 -0.013245 0.706687 0.707403 -0.013245 0.706687 0.707403 -0.0101627 0.499557 0.866221 -0.00640889 0.25837 0.966025 -0.0101627 0.499557 0.866221 -0.0101627 0.499557 0.866221 -0.00640889 0.25837 0.966025 -0.00222785 -0.000396741 0.999997 -0.00640889 0.25837 0.966025 -0.00640889 0.25837 0.966025 -0.00222785 -0.000396741 0.999997 0.00210578 -0.259194 0.965823 -0.00222785 -0.000396741 0.999997 -0.00222785 -0.000396741 0.999997 0.00210578 -0.259194 0.965823 0.00631733 -0.50029 0.865835 0.00210578 -0.259194 0.965823 0.00210578 -0.259194 0.965823 0.00631733 -0.50029 0.865835 0.0100711 -0.707333 0.706809 0.00631733 -0.50029 0.865835 0.00631733 -0.50029 0.865835 0.0100711 -0.707333 0.706809 0.0127262 -0.843639 0.53676 0.0100711 -0.707333 0.706809 0.0100711 -0.707333 0.706809 0.0127262 -0.843639 0.53676 0.0145878 -0.933228 0.358989 0.0127262 -0.843639 0.53676 0.0127262 -0.843639 0.53676 0.0145878 -0.933228 0.358989 -0.999862 -0.01648 -0.00219733 -0.999862 -0.01648 -0.00219733 -0.999862 -0.01648 -0.00219733 -0.999862 -0.01648 -0.00219733 -0.999862 -0.01648 -0.00219733 -0.999862 -0.01648 -0.00219733 -0.999862 -0.01648 -0.00219733 -0.999862 -0.01648 -0.00219733 -0.999862 -0.01648 -0.00219733 -0.999862 -0.01648 -0.00219733 -0.999862 -0.01648 -0.00219733 -0.999862 -0.01648 -0.00219733 -0.999862 -0.01648 -0.00219733 -0.999862 -0.01648 -0.00219733 -0.999862 -0.01648 -0.00219733 0.0165105 -0.999864 0.000335704 0.0160833 -0.991715 0.127445 0.0160833 -0.991715 0.127445 0.0165105 -0.999864 0.000335704 0.999862 0.01648 0.00219733 0.999862 0.01648 0.00219733 0.999862 0.01648 0.00219733 0.999862 0.01648 0.00219733 0.999862 0.01648 0.00219733 0.999862 0.01648 0.00219733 0.999862 0.01648 0.00219733 0.999862 0.01648 0.00219733 0.999862 0.01648 0.00219733 0.999862 0.01648 0.00219733 0.999862 0.01648 0.00219733 0.999862 0.01648 0.00219733 0.999862 0.01648 0.00219733 0.999862 0.01648 0.00219733 0.999862 0.01648 0.00219733 0.0160833 -0.991715 0.127445 0.0145878 -0.933228 0.358989 0.0145878 -0.933228 0.358989 0.0160833 -0.991715 0.127445 0 0.000396741 -1 -0.00427259 0.259194 -0.965816 -0.00427259 0.259194 -0.965816 0 0.000396741 -1 0.0116886 -0.706687 -0.70743 0.00824 -0.499557 -0.866242 0.00824 -0.499557 -0.866242 0.0116886 -0.706687 -0.70743 0.0143132 -0.865704 -0.500351 0.0116886 -0.706687 -0.70743 0.0116886 -0.706687 -0.70743 0.0143132 -0.865704 -0.500351 0.0159612 -0.965685 -0.259224 0.0143132 -0.865704 -0.500351 0.0143132 -0.865704 -0.500351 0.0159612 -0.965685 -0.259224 0.0165105 -0.999864 -0.000396741 0.0159612 -0.965685 -0.259224 0.0159612 -0.965685 -0.259224 0.0165105 -0.999864 -0.000396741 0.0159612 -0.965906 0.2584 0.0165105 -0.999864 -0.000396741 0.0165105 -0.999864 -0.000396741 0.0159612 -0.965906 0.2584 0.0143132 -0.866127 0.499619 0.0159612 -0.965906 0.2584 0.0159612 -0.965906 0.2584 0.0143132 -0.866127 0.499619 0.0116886 -0.707339 0.706778 0.0143132 -0.866127 0.499619 0.0143132 -0.866127 0.499619 0.0116886 -0.707339 0.706778 0.00827052 -0.50029 0.865818 0.0116886 -0.707339 0.706778 0.0116886 -0.707339 0.706778 0.00827052 -0.50029 0.865818 0.00427259 -0.259194 0.965816 0.00827052 -0.50029 0.865818 0.00827052 -0.50029 0.865818 0.00427259 -0.259194 0.965816 0 -0.000396741 1 0.00427259 -0.259194 0.965816 0.00427259 -0.259194 0.965816 0 -0.000396741 1 -0.00427259 0.25837 0.966037 0 -0.000396741 1 0 -0.000396741 1 -0.00427259 0.25837 0.966037 -0.00824 0.499557 0.866242 -0.00427259 0.25837 0.966037 -0.00427259 0.25837 0.966037 -0.00824 0.499557 0.866242 -0.0116886 0.706687 0.70743 -0.00824 0.499557 0.866242 -0.00824 0.499557 0.866242 -0.0116886 0.706687 0.70743 -0.0143132 0.865704 0.500351 -0.0116886 0.706687 0.70743 -0.0116886 0.706687 0.70743 -0.0143132 0.865704 0.500351 -0.0159612 0.965685 0.259224 -0.0143132 0.865704 0.500351 -0.0143132 0.865704 0.500351 -0.0159612 0.965685 0.259224 -0.0165105 0.999864 0.000396741 -0.0159612 0.965685 0.259224 -0.0159612 0.965685 0.259224 -0.0165105 0.999864 0.000396741 -0.0159612 0.965906 -0.2584 -0.0165105 0.999864 0.000396741 -0.0165105 0.999864 0.000396741 -0.0159612 0.965906 -0.2584 -0.0143132 0.866127 -0.499619 -0.0159612 0.965906 -0.2584 -0.0159612 0.965906 -0.2584 -0.0143132 0.866127 -0.499619 -0.0116886 0.707339 -0.706778 -0.0143132 0.866127 -0.499619 -0.0143132 0.866127 -0.499619 -0.0116886 0.707339 -0.706778 -0.00827052 0.50029 -0.865818 -0.0116886 0.707339 -0.706778 -0.0116886 0.707339 -0.706778 -0.00827052 0.50029 -0.865818 -0.00427259 0.259194 -0.965816 -0.00827052 0.50029 -0.865818 -0.00827052 0.50029 -0.865818 -0.00427259 0.259194 -0.965816 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.999864 0.0165105 0 0.00824 -0.499557 -0.866242 0.00427259 -0.25837 -0.966037 0.00427259 -0.25837 -0.966037 0.00824 -0.499557 -0.866242 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 0.00427259 -0.25837 -0.966037 0 0.000396741 -1 0 0.000396741 -1 0.00427259 -0.25837 -0.966037 0 0.258797 -0.965932 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.258797 -0.965932 0 -0.965932 -0.258797 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.965932 -0.258797 0 -0.965932 0.258797 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.965932 0.258797 0 -0.707083 0.70713 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.707083 0.70713 0 -0.258797 0.965932 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.258797 0.965932 0 0.258797 0.965932 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0.258797 0.965932 0 0.70713 0.707083 0 0.258797 0.965932 0 0.258797 0.965932 0 0.70713 0.707083 0 0.965932 0.258797 0 0.70713 0.707083 0 0.70713 0.707083 0 0.965932 0.258797 0 0.965932 -0.258797 0 0.965932 0.258797 0 0.965932 0.258797 0 0.965932 -0.258797 0 0.70713 -0.707083 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.70713 -0.707083 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -0.70713 -0.707083 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.70713 -0.707083 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -0.258797 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.965932 0 -0.258797 -0.965932 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -0.877917 -0.338572 -0.338572 -0.87791 -0.123936 -0.462508 -0.87791 -0.123936 -0.462508 -0.877917 -0.338572 -0.338572 -0.87791 -0.462508 -0.123936 -0.877917 -0.338572 -0.338572 -0.877917 -0.338572 -0.338572 -0.87791 -0.462508 -0.123936 -0.87791 -0.462508 0.123936 -0.87791 -0.462508 -0.123936 -0.87791 -0.462508 -0.123936 -0.87791 -0.462508 0.123936 -0.877917 -0.338572 0.338572 -0.87791 -0.462508 0.123936 -0.87791 -0.462508 0.123936 -0.877917 -0.338572 0.338572 -0.87791 -0.123936 0.462508 -0.877917 -0.338572 0.338572 -0.877917 -0.338572 0.338572 -0.87791 -0.123936 0.462508 -0.87791 0.123936 0.462508 -0.87791 -0.123936 0.462508 -0.87791 -0.123936 0.462508 -0.87791 0.123936 0.462508 -0.877917 0.338572 0.338572 -0.87791 0.123936 0.462508 -0.87791 0.123936 0.462508 -0.877917 0.338572 0.338572 -0.87791 0.462508 0.123936 -0.877917 0.338572 0.338572 -0.877917 0.338572 0.338572 -0.87791 0.462508 0.123936 -0.87791 0.462508 -0.123936 -0.87791 0.462508 0.123936 -0.87791 0.462508 0.123936 -0.87791 0.462508 -0.123936 -0.877917 0.338572 -0.338572 -0.87791 0.462508 -0.123936 -0.87791 0.462508 -0.123936 -0.877917 0.338572 -0.338572 -0.87791 0.123936 -0.462508 -0.877917 0.338572 -0.338572 -0.877917 0.338572 -0.338572 -0.87791 0.123936 -0.462508 -0.87791 -0.123936 -0.462508 -0.87791 0.123936 -0.462508 -0.87791 0.123936 -0.462508 -0.87791 -0.123936 -0.462508 0 -0.707083 -0.70713 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.707083 -0.70713 0 -0.965932 -0.258797 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.965932 -0.258797 0 -0.965932 0.258797 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.965932 0.258797 0 -0.707083 0.70713 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.707083 0.70713 0 -0.258797 0.965932 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.258797 0.965932 0 0.258797 0.965932 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0.258797 0.965932 0 0.70713 0.707083 0 0.258797 0.965932 0 0.258797 0.965932 0 0.70713 0.707083 0 0.965932 0.258797 0 0.70713 0.707083 0 0.70713 0.707083 0 0.965932 0.258797 0 0.965932 -0.258797 0 0.965932 0.258797 0 0.965932 0.258797 0 0.965932 -0.258797 0 0.70713 -0.707083 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.70713 -0.707083 0 0.258797 -0.965932 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.258797 -0.965932 0 -0.258797 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.965932 0 -0.258797 -0.965932 0.00628681 -0.499954 0.866029 0.00628681 -0.499954 0.866029 0.00210578 -0.258797 0.965929 0.00210578 -0.258797 0.965929 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.999861 0.0165105 0.00222785 0.0100711 -0.707022 0.70712 0.0100711 -0.707022 0.70712 0.00628681 -0.499954 0.866029 0.00628681 -0.499954 0.866029 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.0136113 0.732478 0.680654 -0.0136113 0.732478 0.680654 -0.0136113 0.732478 0.680654 -0.0136113 0.732478 0.680654 0.0152252 -0.850151 -0.526319 0.016534 -0.965785 -0.258818 0.0153722 -0.965804 0.258818 -0.999862 -0.01648 -0.00222785 -0.01648 0.999864 0 -0.999862 -0.01648 -0.00222785 -0.0165105 0.965791 0.258797 -0.999862 -0.01648 -0.00222785 -0.0153508 0.96581 -0.258797 -0.999862 -0.01648 -0.00222785 -0.999862 -0.01648 -0.00222785 -0.999862 -0.01648 -0.00222785 -0.999862 -0.01648 -0.00222785 -0.999862 -0.01648 -0.00222785 -0.999862 -0.01648 -0.00222785 -0.999862 -0.01648 -0.00222785 -0.01648 0.999864 0 0.999862 0.01648 0.00222785 -0.0165105 0.965791 0.258797 0.999862 0.01648 0.00222785 -0.0153508 0.96581 -0.258797 0.999862 0.01648 0.00222785 0.999862 0.01648 0.00222785 0.999862 0.01648 0.00222785 0.999862 0.01648 0.00222785 0.999862 0.01648 0.00222785 0.999862 0.01648 0.00222785 0.999862 0.01648 0.00222785 0.999862 0.01648 0.00222785 -0.00643711 0.258748 0.965923 -3.24573e-007 0.798493 -0.602004 -0.0144708 0.927204 -0.374277 0.0083771 -0.614444 0.788916 0.00210865 -0.258819 0.965923 -0.0132581 0.706985 0.707104 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.00644253 0.258748 0.965923 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.0160222 0.990105 -0.139409 -0.0116276 0.787767 -0.615864 -0.0116276 0.787767 -0.615864 -0.0160222 0.990105 -0.139409 -0.0161443 0.927151 0.37434 -0.0160222 0.990105 -0.139409 -0.0160222 0.990105 -0.139409 -0.0161443 0.927151 0.37434 -0.0119327 0.615741 0.787858 -0.0161443 0.927151 0.37434 -0.0161443 0.927151 0.37434 -0.0119327 0.615741 0.787858 -0.00451674 0.139378 0.990229 -0.0119327 0.615741 0.787858 -0.0119327 0.615741 0.787858 -0.00451674 0.139378 0.990229 0.00408948 -0.37434 0.927282 -0.00451674 0.139378 0.990229 -0.00451674 0.139378 0.990229 0.00408948 -0.37434 0.927282 0.0116276 -0.787767 0.615864 0.00408948 -0.37434 0.927282 0.00408948 -0.37434 0.927282 0.0116276 -0.787767 0.615864 0.0160222 -0.990105 0.139409 0.0116276 -0.787767 0.615864 0.0116276 -0.787767 0.615864 0.0160222 -0.990105 0.139409 0.0161443 -0.927151 -0.37434 0.0160222 -0.990105 0.139409 0.0160222 -0.990105 0.139409 0.0161443 -0.927151 -0.37434 0.0119327 -0.615741 -0.787858 0.0161443 -0.927151 -0.37434 0.0161443 -0.927151 -0.37434 0.0119327 -0.615741 -0.787858 0.00451674 -0.139378 -0.990229 0.0119327 -0.615741 -0.787858 0.0119327 -0.615741 -0.787858 0.00451674 -0.139378 -0.990229 -0.00408948 0.37434 -0.927282 0.00451674 -0.139378 -0.990229 0.00451674 -0.139378 -0.990229 -0.00408948 0.37434 -0.927282 -0.0116276 0.787767 -0.615864 -0.00408948 0.37434 -0.927282 -0.00408948 0.37434 -0.927282 -0.0116276 0.787767 -0.615864 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.0143132 0.920291 -0.390973 -0.00811792 0.60152 -0.798817 -0.00811792 0.60152 -0.798817 -0.0143132 0.920291 -0.390973 -0.0166631 0.992441 0.121586 -0.0143132 0.920291 -0.390973 -0.0143132 0.920291 -0.390973 -0.0166631 0.992441 0.121586 -0.0145268 0.79868 0.601581 -0.0166631 0.992441 0.121586 -0.0166631 0.992441 0.121586 -0.0145268 0.79868 0.601581 -0.00851466 0.390881 0.920402 -0.0145268 0.79868 0.601581 -0.0145268 0.79868 0.601581 -0.00851466 0.390881 0.920402 -0.00021363 -0.121616 0.992577 -0.00851466 0.390881 0.920402 -0.00851466 0.390881 0.920402 -0.00021363 -0.121616 0.992577 0.00811792 -0.60152 0.798817 -0.00021363 -0.121616 0.992577 -0.00021363 -0.121616 0.992577 0.00811792 -0.60152 0.798817 0.0143132 -0.920291 0.390973 0.00811792 -0.60152 0.798817 0.00811792 -0.60152 0.798817 0.0143132 -0.920291 0.390973 0.0166631 -0.992441 -0.121586 0.0143132 -0.920291 0.390973 0.0143132 -0.920291 0.390973 0.0166631 -0.992441 -0.121586 0.0145268 -0.79868 -0.601581 0.0166631 -0.992441 -0.121586 0.0166631 -0.992441 -0.121586 0.0145268 -0.79868 -0.601581 0.00851466 -0.390881 -0.920402 0.0145268 -0.79868 -0.601581 0.0145268 -0.79868 -0.601581 0.00851466 -0.390881 -0.920402 0.00021363 0.121616 -0.992577 0.00851466 -0.390881 -0.920402 0.00851466 -0.390881 -0.920402 0.00021363 0.121616 -0.992577 -0.00811792 0.60152 -0.798817 0.00021363 0.121616 -0.992577 0.00021363 0.121616 -0.992577 -0.00811792 0.60152 -0.798817 0.01648 -0.999824 0.00897244 0.00994903 -0.700644 0.713442 0.00994903 -0.700644 0.713442 0.01648 -0.999824 0.00897244 0.0133366 -0.713326 -0.700705 0.01648 -0.999824 0.00897244 0.01648 -0.999824 0.00897244 0.0133366 -0.713326 -0.700705 0.00238044 -0.00894192 -0.999957 0.0133366 -0.713326 -0.700705 0.0133366 -0.713326 -0.700705 0.00238044 -0.00894192 -0.999957 -0.00994903 0.700644 -0.713442 0.00238044 -0.00894192 -0.999957 0.00238044 -0.00894192 -0.999957 -0.00994903 0.700644 -0.713442 -0.01648 0.999824 -0.00897244 -0.00994903 0.700644 -0.713442 -0.00994903 0.700644 -0.713442 -0.01648 0.999824 -0.00897244 -0.0133366 0.713326 0.700705 -0.01648 0.999824 -0.00897244 -0.01648 0.999824 -0.00897244 -0.0133366 0.713326 0.700705 -0.00238044 0.00894192 0.999957 -0.0133366 0.713326 0.700705 -0.0133366 0.713326 0.700705 -0.00238044 0.00894192 0.999957 0.00994903 -0.700644 0.713442 -0.00238044 0.00894192 0.999957 -0.00238044 0.00894192 0.999957 0.00994903 -0.700644 0.713442 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.999864 -0.0165105 0 -0.0143132 0.865916 -0.499985 -0.00824 0.499924 -0.86603 -0.00824 0.499924 -0.86603 -0.0143132 0.865916 -0.499985 -0.0165105 0.999864 0 -0.0143132 0.865916 -0.499985 -0.0143132 0.865916 -0.499985 -0.0165105 0.999864 0 -0.0143132 0.865916 0.499985 -0.0165105 0.999864 0 -0.0165105 0.999864 0 -0.0143132 0.865916 0.499985 -0.00824 0.499924 0.86603 -0.0143132 0.865916 0.499985 -0.0143132 0.865916 0.499985 -0.00824 0.499924 0.86603 0 0 1 -0.00824 0.499924 0.86603 -0.00824 0.499924 0.86603 0 0 1 0.00824 -0.499924 0.86603 0 0 1 0 0 1 0.00824 -0.499924 0.86603 0.0143132 -0.865916 0.499985 0.00824 -0.499924 0.86603 0.00824 -0.499924 0.86603 0.0143132 -0.865916 0.499985 0.0165105 -0.999864 0 0.0143132 -0.865916 0.499985 0.0143132 -0.865916 0.499985 0.0165105 -0.999864 0 0.0143132 -0.865916 -0.499985 0.0165105 -0.999864 0 0.0165105 -0.999864 0 0.0143132 -0.865916 -0.499985 0.00824 -0.499924 -0.86603 0.0143132 -0.865916 -0.499985 0.0143132 -0.865916 -0.499985 0.00824 -0.499924 -0.86603 0 0 -1 0.00824 -0.499924 -0.86603 0.00824 -0.499924 -0.86603 0 0 -1 -0.00824 0.499924 -0.86603 0 0 -1 0 0 -1 -0.00824 0.499924 -0.86603 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.999861 -0.0165105 -0.00222785 -0.00839259 0.615802 -0.787856 -6.1037e-005 0.139439 -0.990231 -6.1037e-005 0.139439 -0.990231 -0.00839259 0.615802 -0.787856 -0.0144658 0.927179 -0.37434 -0.00839259 0.615802 -0.787856 -0.00839259 0.615802 -0.787856 -0.0144658 0.927179 -0.37434 -0.0166631 0.990095 0.139409 -0.0144658 0.927179 -0.37434 -0.0144658 0.927179 -0.37434 -0.0166631 0.990095 0.139409 -0.0143742 0.787722 0.615864 -0.0166631 0.990095 0.139409 -0.0166631 0.990095 0.139409 -0.0143742 0.787722 0.615864 -0.00824 0.374248 0.927292 -0.0143742 0.787722 0.615864 -0.0143742 0.787722 0.615864 -0.00824 0.374248 0.927292 9.15555e-005 -0.139439 0.990231 -0.00824 0.374248 0.927292 -0.00824 0.374248 0.927292 9.15555e-005 -0.139439 0.990231 0.00839259 -0.615802 0.787856 9.15555e-005 -0.139439 0.990231 9.15555e-005 -0.139439 0.990231 0.00839259 -0.615802 0.787856 0.0144658 -0.927179 0.37434 0.00839259 -0.615802 0.787856 0.00839259 -0.615802 0.787856 0.0144658 -0.927179 0.37434 0.0166631 -0.990095 -0.139409 0.0144658 -0.927179 0.37434 0.0144658 -0.927179 0.37434 0.0166631 -0.990095 -0.139409 0.0143742 -0.787722 -0.615864 0.0166631 -0.990095 -0.139409 0.0166631 -0.990095 -0.139409 0.0143742 -0.787722 -0.615864 0.00824 -0.374248 -0.927292 0.0143742 -0.787722 -0.615864 0.0143742 -0.787722 -0.615864 0.00824 -0.374248 -0.927292 -6.1037e-005 0.139439 -0.990231 0.00824 -0.374248 -0.927292 0.00824 -0.374248 -0.927292 -6.1037e-005 0.139439 -0.990231 0.0101932 -0.713378 0.700705 -0.00207526 -0.00900296 0.999957 -0.00207526 -0.00900296 0.999957 0.0101932 -0.713378 0.700705 0.0165105 -0.999823 -0.00897244 0.0101932 -0.713378 0.700705 0.0101932 -0.713378 0.700705 0.0165105 -0.999823 -0.00897244 0.0131535 -0.700583 -0.71345 0.0165105 -0.999823 -0.00897244 0.0165105 -0.999823 -0.00897244 0.0131535 -0.700583 -0.71345 0.00207526 0.00900296 -0.999957 0.0131535 -0.700583 -0.71345 0.0131535 -0.700583 -0.71345 0.00207526 0.00900296 -0.999957 -0.0101932 0.713378 -0.700705 0.00207526 0.00900296 -0.999957 0.00207526 0.00900296 -0.999957 -0.0101932 0.713378 -0.700705 -0.0165105 0.999823 0.00897244 -0.0101932 0.713378 -0.700705 -0.0101932 0.713378 -0.700705 -0.0165105 0.999823 0.00897244 -0.0131535 0.700583 0.71345 -0.0165105 0.999823 0.00897244 -0.0165105 0.999823 0.00897244 -0.0131535 0.700583 0.71345 -0.00207526 -0.00900296 0.999957 -0.0131535 0.700583 0.71345 -0.0131535 0.700583 0.71345 -0.00207526 -0.00900296 0.999957 - - - - - - - - - - - - - - -

0 0 1 1 2 2 3 3

-

4 4 5 5 6 6 7 7

-

8 8 9 9 10 10 11 11

-

12 12 13 13 14 14 15 15

-

16 16 17 17 18 18 19 19

-

20 20 21 21 22 22 23 23

-

24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31

-

32 32 33 33 34 34 35 35

-

36 36 37 37 38 38 39 39 40 40 41 41 42 42 43 43

-

44 44 45 45 46 46 47 47

-
- - - -

48 48 49 49 50 50 51 51

-

52 52 53 53 54 54 55 55

-

56 56 57 57 58 58 59 59

-

60 60 61 61 62 62 63 63

-

64 64 65 65 66 66 67 67

-

68 68 69 69 70 70 71 71

-

72 72 73 73 74 74 75 75 76 76 77 77 78 78 79 79

-

80 80 81 81 82 82 83 83

-

84 84 85 85 86 86 87 87 88 88 89 89 90 90 91 91

-

92 92 93 93 94 94 95 95

-
- - - -

96 96 97 97 98 98 99 99 100 100 101 101 102 102 103 103 104 104 105 105 106 106 107 107

-

108 108 109 109 110 110 111 111

-

112 112 113 113 114 114 115 115

-

116 116 117 117 118 118 119 119

-

120 120 121 121 122 122 123 123

-

124 124 125 125 126 126 127 127

-

128 128 129 129 130 130 131 131

-

132 132 133 133 134 134 135 135

-

136 136 137 137 138 138 139 139

-

140 140 141 141 142 142 143 143

-

144 144 145 145 146 146 147 147

-

148 148 149 149 150 150 151 151

-

152 152 153 153 154 154 155 155

-
- - - -

156 156 157 157 158 158 159 159 160 160 161 161 162 162 163 163 164 164 165 165 166 166 167 167

-

168 168 169 169 170 170 171 171

-

172 172 173 173 174 174 175 175

-

176 176 177 177 178 178 179 179

-

180 180 181 181 182 182 183 183

-

184 184 185 185 186 186 187 187

-

188 188 189 189 190 190 191 191

-

192 192 193 193 194 194 195 195

-

196 196 197 197 198 198 199 199

-

200 200 201 201 202 202 203 203

-

204 204 205 205 206 206 207 207

-

208 208 209 209 210 210 211 211

-

212 212 213 213 214 214 215 215

-
- - - -

216 216 217 217 218 218 219 219

-

220 220 221 221 222 222 223 223

-

224 224 225 225 226 226 227 227

-

228 228 229 229 230 230 231 231

-

232 232 233 233 234 234 235 235

-

236 236 237 237 238 238 239 239

-

240 240 241 241 242 242 243 243 244 244 245 245 246 246 247 247

-

248 248 249 249 250 250 251 251

-

252 252 253 253 254 254 255 255 256 256 257 257 258 258 259 259

-

260 260 261 261 262 262 263 263

-
- - - -

264 264 265 265 266 266 267 267

-

268 268 269 269 270 270 271 271

-

272 272 273 273 274 274 275 275

-

276 276 277 277 278 278 279 279

-

280 280 281 281 282 282 283 283

-

284 284 285 285 286 286 287 287

-

288 288 289 289 290 290 291 291

-

292 292 293 293 294 294 295 295

-
- - - -

296 296 297 297 298 298 299 299

-

300 300 301 301 302 302 303 303

-

304 304 305 305 306 306 307 307

-

308 308 309 309 310 310 311 311

-

312 312 313 313 314 314 315 315

-

316 316 317 317 318 318 319 319

-

320 320 321 321 322 322 323 323

-

324 324 325 325 326 326 327 327

-

328 328 329 329 330 330 331 331

-

332 332 333 333 334 334 335 335

-

336 336 337 337 338 338 339 339

-

340 340 341 341 342 342 343 343

-

344 344 345 345 346 346 347 347

-

348 348 349 349 350 350 351 351

-

352 352 353 353 354 354 355 355

-

356 356 357 357 358 358 359 359

-

360 360 361 361 362 362 363 363

-

364 364 365 365 366 366 367 367

-

368 368 369 369 370 370 371 371

-

372 372 373 373 374 374 375 375

-

376 376 377 377 378 378 379 379

-

380 380 381 381 382 382 383 383

-

384 384 385 385 386 386 387 387 388 388 389 389 390 390 391 391 392 392 393 393 394 394 395 395 396 396 397 397 398 398 399 399 400 400 401 401 402 402 403 403 404 404 405 405 406 406 407 407

-

408 408 409 409 410 410 411 411

-

412 412 413 413 414 414 415 415 416 416 417 417 418 418 419 419 420 420 421 421 422 422 423 423 424 424 425 425 426 426 427 427 428 428 429 429 430 430 431 431 432 432 433 433 434 434 435 435

-

436 436 437 437 438 438 439 439

-
- - - -

440 440 441 440 442 440 443 440 444 440 445 440 446 440 447 440 448 440 449 440 450 440 451 440

-
- - - -

452 441 453 442 454 443 455 444

-

456 445 457 446 458 447 459 448

-

460 449 461 450 462 451 463 452

-

464 453 465 454 466 455 467 456

-

468 457 469 458 470 459 471 460

-

472 461 473 462 474 463 475 464

-

476 465 477 466 478 467 479 468

-

480 469 481 470 482 471 483 472

-

484 473 485 474 486 475 487 476

-

488 477 489 478 490 479 491 480

-

492 481 493 482 494 483 495 484

-

496 485 497 486 498 487 499 488

-
- - - -

500 489 501 490 502 491 503 492 504 493 505 494 506 495 507 496 508 497 509 498 510 499 511 500

-

512 501 513 502 514 503 515 504

-

516 505 517 506 518 507 519 508

-

520 509 521 510 522 511 523 512

-

524 513 525 514 526 515 527 516

-

528 517 529 518 530 519 531 520

-

532 521 533 522 534 523 535 524

-

536 525 537 526 538 527 539 528

-

540 529 541 530 542 531 543 532

-

544 533 545 534 546 535 547 536

-

548 537 549 538 550 539 551 540

-

552 541 553 542 554 543 555 544

-

556 545 557 546 558 547 559 548

-
- - - -

560 549 561 550 562 551 563 552 564 553 565 554 566 555 567 556 568 557 569 558 570 559 571 560

-

572 561 573 562 574 563 575 564

-

576 565 577 566 578 567 579 568

-

580 569 581 570 582 571 583 572

-

584 573 585 574 586 575 587 576

-

588 577 589 578 590 579 591 580

-

592 581 593 582 594 583 595 584

-

596 585 597 586 598 587 599 588

-

600 589 601 590 602 591 603 592

-

604 593 605 594 606 595 607 596

-

608 597 609 598 610 599 611 600

-

612 601 613 602 614 603 615 604

-

616 605 617 606 618 607 619 608

-
- - - -

620 609 621 610 622 611 623 612 624 613 625 614 626 615 627 616 628 617 629 618 630 619 631 620

-

632 621 633 622 634 623 635 624

-

636 625 637 626 638 627 639 628

-

640 629 641 630 642 631 643 632

-

644 633 645 634 646 635 647 636

-

648 637 649 638 650 639 651 640

-

652 641 653 642 654 643 655 644

-

656 645 657 646 658 647 659 648

-

660 649 661 650 662 651 663 652

-

664 653 665 654 666 655 667 656

-

668 657 669 658 670 659 671 660

-

672 661 673 662 674 663 675 664

-

676 665 677 666 678 667 679 668

-
- - - -

680 669 681 670 682 671 683 672 684 673 685 674 686 675 687 676 688 677 689 678 690 679 691 680

-

692 681 693 682 694 683 695 684

-

696 685 697 686 698 687 699 688

-

700 689 701 690 702 691 703 692

-

704 693 705 694 706 695 707 696

-

708 697 709 698 710 699 711 700

-

712 701 713 702 714 703 715 704

-

716 705 717 706 718 707 719 708

-

720 709 721 710 722 711 723 712

-

724 713 725 714 726 715 727 716

-

728 717 729 718 730 719 731 720

-

732 721 733 722 734 723 735 724

-

736 725 737 726 738 727 739 728

-
- - - -

740 729 741 730 742 731 743 732

-

744 733 745 734 746 735 747 736

-

748 737 749 738 750 739 751 740

-

752 741 753 742 754 743 755 744

-

756 745 757 746 758 747 759 748

-

760 749 761 750 762 751 763 752

-

764 753 765 754 766 755 767 756

-

768 757 769 758 770 759 771 760

-

772 761 773 762 774 763 775 764

-

776 765 777 766 778 767 779 768 780 769 781 770 782 771 783 772 784 773 785 774 786 775 787 776

-

788 777 789 778 790 779 791 780

-

792 781 793 782 794 783 795 784 796 785 797 786 798 787 799 788 800 789 801 790 802 791 803 792

-

804 793 805 794 806 795 807 796

-
- - - -

808 797 809 798 810 799 811 800

-

812 801 813 802 814 803 815 804

-

816 805 817 806 818 807 819 808

-

820 809 821 810 822 811 823 812

-

824 813 825 814 826 815 827 816

-

828 817 829 818 830 819 831 820 832 821 833 822 834 823 835 824

-

836 825 837 826 838 827 839 828

-

840 829 841 830 842 831 843 832

-

844 833 845 834 846 835 847 836 848 837 849 838 850 839 851 840

-

852 841 853 842 854 843 855 844

-
- - - -

856 845 857 846 858 847 859 848

-

860 849 861 850 862 851 863 852

-

864 853 865 854 866 855 867 856

-

868 857 869 858 870 859 871 860

-

872 861 873 862 874 863 875 864

-

876 865 877 866 878 867 879 868

-

880 869 881 870 882 871 883 872

-

884 873 885 874 886 875 887 876

-

888 877 889 878 890 879 891 880

-

892 881 893 882 894 883 895 884

-

896 885 897 886 898 887 899 888

-

900 889 901 890 902 891 903 892

-

904 893 905 894 906 895 907 896

-

908 897 909 898 910 899 911 900

-

912 901 913 902 914 903 915 904

-

916 905 917 906 918 907 919 908

-

920 909 921 910 922 911 923 912

-

924 913 925 914 926 915 927 916

-

928 917 929 918 930 919 931 920

-

932 921 933 922 934 923 935 924

-

936 925 937 926 938 927 939 928

-

940 929 941 930 942 931 943 932

-

944 933 945 934 946 935 947 936 948 937 949 938 950 939 951 940 952 941 953 942 954 943 955 944 956 945 957 946 958 947 959 948 960 949 961 950 962 951 963 952 964 953 965 954 966 955 967 956

-

968 957 969 958 970 959 971 960

-

972 961 973 962 974 963 975 964 976 965 977 966 978 967 979 968 980 969 981 970 982 971 983 972 984 973 985 974 986 975 987 976 988 977 989 978 990 979 991 980 992 981 993 982 994 983 995 984

-

996 985 997 986 998 987 999 988

-
- - - -

1000 989 1001 990 1002 991 1003 992

-

1004 993 1005 994 1006 995 1007 996

-

1008 997 1009 998 1010 999 1011 1000

-

1012 1001 1013 1002 1014 1003 1015 1004

-

1016 1005 1017 1006 1018 1007 1019 1008

-

1020 1009 1021 1010 1022 1011 1023 1012

-

1024 1013 1025 1014 1026 1015 1027 1016

-

1028 1017 1029 1018 1030 1019 1031 1020

-

1032 1021 1033 1022 1034 1023 1035 1024

-

1036 1025 1037 1026 1038 1027 1039 1028

-

1040 1029 1041 1030 1042 1031 1043 1032

-

1044 1033 1045 1034 1046 1035 1047 1036

-

1048 1037 1049 1038 1050 1039 1051 1040

-

1052 1041 1053 1042 1054 1043 1055 1044 1056 1045 1057 1046 1058 1047 1059 1048 1060 1049 1061 1050 1062 1051 1063 1052 1064 1053 1065 1054 1066 1055

-

1067 1056 1068 1057 1069 1058 1070 1059

-

1071 1060 1072 1061 1073 1062 1074 1063 1075 1064 1076 1065 1077 1066 1078 1067 1079 1068 1080 1069 1081 1070 1082 1071 1083 1072 1084 1073 1085 1074

-

1086 1075 1087 1076 1088 1077 1089 1078

-
- - - -

1090 1079 1091 1080 1092 1081 1093 1082

-

1094 1083 1095 1084 1096 1085 1097 1086

-

1098 1087 1099 1088 1100 1089 1101 1090

-

1102 1091 1103 1092 1104 1093 1105 1094

-

1106 1095 1107 1096 1108 1097 1109 1098

-

1110 1099 1111 1100 1112 1101 1113 1102

-

1114 1103 1115 1104 1116 1105 1117 1106

-

1118 1107 1119 1108 1120 1109 1121 1110

-

1122 1111 1123 1112 1124 1113 1125 1114

-

1126 1115 1127 1116 1128 1117 1129 1118

-

1130 1119 1131 1120 1132 1121 1133 1122

-

1134 1123 1135 1124 1136 1125 1137 1126

-

1138 1127 1139 1128 1140 1129 1141 1130

-

1142 1131 1143 1132 1144 1133 1145 1134

-

1146 1135 1147 1136 1148 1137 1149 1138

-

1150 1139 1151 1140 1152 1141 1153 1142

-

1154 1143 1155 1144 1156 1145 1157 1146

-

1158 1147 1159 1148 1160 1149 1161 1150

-

1162 1151 1163 1152 1164 1153 1165 1154

-

1166 1155 1167 1156 1168 1157 1169 1158

-

1170 1159 1171 1160 1172 1161 1173 1162

-

1174 1163 1175 1164 1176 1165 1177 1166

-

1178 1167 1179 1168 1180 1169 1181 1170 1182 1171 1183 1172 1184 1173 1185 1174 1186 1175 1187 1176 1188 1177 1189 1178 1190 1179 1191 1180 1192 1181 1193 1182 1194 1183 1195 1184 1196 1185 1197 1186 1198 1187 1199 1188 1200 1189 1201 1190

-

1202 1191 1203 1192 1204 1193 1205 1194

-

1206 1195 1207 1196 1208 1197 1209 1198 1210 1199 1211 1200 1212 1201 1213 1202 1214 1203 1215 1204 1216 1205 1217 1206 1218 1207 1219 1208 1220 1209 1221 1210 1222 1211 1223 1212 1224 1213 1225 1214 1226 1215 1227 1216 1228 1217 1229 1218

-

1230 1219 1231 1220 1232 1221 1233 1222

-
- - - -

1234 1223 1235 1224 1236 1225 1237 1226

-

1238 1227 1239 1228 1240 1229 1241 1230

-

1242 1231 1243 1232 1244 1233 1245 1234

-

1246 1235 1247 1236 1248 1237 1249 1238

-

1250 1239 1251 1240 1252 1241 1253 1242

-

1254 1243 1255 1244 1256 1245 1257 1246

-

1258 1247 1259 1248 1260 1249 1261 1250

-

1262 1251 1263 1252 1264 1253 1265 1254

-

1266 1255 1267 1256 1268 1257 1269 1258

-

1270 1259 1271 1260 1272 1261 1273 1262

-

1274 1263 1275 1264 1276 1265 1277 1266 1278 1267 1279 1268 1280 1269 1281 1270 1282 1271 1283 1272 1284 1273 1285 1274

-

1286 1275 1287 1276 1288 1277 1289 1278

-

1290 1279 1291 1280 1292 1281 1293 1282 1294 1283 1295 1284 1296 1285 1297 1286 1298 1287 1299 1288 1300 1289 1301 1290

-

1302 1291 1303 1292 1304 1293 1305 1294

-
- - - -

1306 1295 1307 1296 1308 1297 1309 1298 1310 1299 1311 1300 1312 1301 1313 1302 1314 1303 1315 1304 1316 1305 1317 1306

-

1318 1307 1319 1308 1320 1309 1321 1310

-

1322 1311 1323 1312 1324 1313 1325 1314

-

1326 1315 1327 1316 1328 1317 1329 1318

-

1330 1319 1331 1320 1332 1321 1333 1322

-

1334 1323 1335 1324 1336 1325 1337 1326

-

1338 1327 1339 1328 1340 1329 1341 1330

-

1342 1331 1343 1332 1344 1333 1345 1334

-

1346 1335 1347 1336 1348 1337 1349 1338

-

1350 1339 1351 1340 1352 1341 1353 1342

-

1354 1343 1355 1344 1356 1345 1357 1346

-

1358 1347 1359 1348 1360 1349 1361 1350

-

1362 1351 1363 1352 1364 1353 1365 1354

-
- - - -

1366 1355 1367 1356 1368 1357 1369 1358

-

1370 1359 1371 1360 1372 1361 1373 1362

-

1374 1363 1375 1364 1376 1365 1377 1366

-

1378 1367 1379 1368 1380 1369 1381 1370

-

1382 1371 1383 1372 1384 1373 1385 1374

-

1386 1375 1387 1376 1388 1377 1389 1378

-

1390 1379 1391 1380 1392 1381 1393 1382

-

1394 1383 1395 1384 1396 1385 1397 1386

-

1398 1387 1399 1388 1400 1389 1401 1390

-

1402 1391 1403 1392 1404 1393 1405 1394

-

1406 1395 1407 1396 1408 1397 1409 1398

-

1410 1399 1411 1400 1412 1401 1413 1402

-
- - - -

1414 1403 1415 1404 1416 1405 1417 1406

-

1418 1407 1419 1408 1420 1409 1421 1410 1422 1411 1423 1412 1424 1413 1425 1414 1426 1415

-

1427 1416 1428 1417 1429 1418 1430 1419

-

1431 1420 1432 1421 1433 1422 1434 1423 1435 1424 1436 1425 1437 1426 1438 1427 1439 1428

-

1440 1429 1441 1430 1442 1431 1443 1432

-
- - - -

1444 1433 1445 1433 1446 1433 1447 1433

-
- - - -

1448 1434 1449 1434 1450 1434 1451 1434

-
- - - -

1452 1435 1453 1435 1454 1435 1455 1435

-
- - - -

1463 1462 1476 1462 1475 1462 1463 1462 1475 1462 1462 1462

-
- - - -

1468 1448 1467 1447 1464 1444 1463 1443 1462 1442 1458 1438 1456 1436 1460 1440 1465 1445 1466 1446

-

1481 1461 1479 1459 1478 1458 1474 1454 1470 1450 1472 1452 1475 1455 1476 1456 1477 1457 1480 1460

-

1459 1439 1471 1451 1469 1449 1457 1437

-

1457 1437 1469 1449 1473 1453 1461 1441

-
- - - -

1482 1463 1483 1463 1484 1463 1485 1463

-
- - - -

1486 1464 1487 1464 1488 1464 1489 1464

-
- - - -

1490 1465 1491 1465 1492 1465 1493 1465

-
- - - -

1494 1466 1495 1466 1496 1466 1497 1466

-
- - - -

1498 1467 1499 1467 1500 1467 1501 1467

-
- - - -

1502 1468 1503 1469 1504 1470 1505 1471

-

1506 1472 1507 1473 1508 1474 1509 1475

-

1510 1476 1511 1477 1512 1478 1513 1479

-

1514 1480 1515 1481 1516 1482 1517 1483

-

1518 1484 1519 1485 1520 1486 1521 1487

-
- - - -

1522 1488 1523 1489 1524 1490 1525 1491

-

1526 1492 1527 1493 1528 1494 1529 1495

-

1530 1496 1531 1497 1532 1498 1533 1499

-

1534 1500 1535 1501 1536 1502 1537 1503

-

1538 1504 1539 1505 1540 1506 1541 1507

-

1542 1508 1543 1509 1544 1510 1545 1511

-
- - - -

1546 1512 1547 1512 1548 1512 1549 1512

-
- - - -

1550 1513 1551 1514 1552 1515 1553 1516 1554 1517 1555 1518 1556 1519 1557 1520 1558 1521 1559 1522 1560 1523 1561 1524

-

1562 1525 1563 1526 1564 1527 1565 1528

-

1566 1529 1567 1530 1568 1531 1569 1532

-

1570 1533 1571 1534 1572 1535 1573 1536

-

1574 1537 1575 1538 1576 1539 1577 1540

-

1578 1541 1579 1542 1580 1543 1581 1544

-

1582 1545 1583 1546 1584 1547 1585 1548

-

1586 1549 1587 1550 1588 1551 1589 1552

-

1590 1553 1591 1554 1592 1555 1593 1556

-

1594 1557 1595 1558 1596 1559 1597 1560

-

1598 1561 1599 1562 1600 1563 1601 1564

-

1602 1565 1603 1566 1604 1567 1605 1568

-

1606 1569 1607 1570 1608 1571 1609 1572

-
- - - -

1610 1573 1611 1574 1612 1575 1613 1576 1614 1577 1615 1578 1616 1579 1617 1580 1618 1581 1619 1582 1620 1583 1621 1584

-

1622 1585 1623 1586 1624 1587 1625 1588

-

1626 1589 1627 1590 1628 1591 1629 1592

-

1630 1593 1631 1594 1632 1595 1633 1596

-

1634 1597 1635 1598 1636 1599 1637 1600

-

1638 1601 1639 1602 1640 1603 1641 1604

-

1642 1605 1643 1606 1644 1607 1645 1608

-

1646 1609 1647 1610 1648 1611 1649 1612

-

1650 1613 1651 1614 1652 1615 1653 1616

-

1654 1617 1655 1618 1656 1619 1657 1620

-

1658 1621 1659 1622 1660 1623 1661 1624

-

1662 1625 1663 1626 1664 1627 1665 1628

-

1666 1629 1667 1630 1668 1631 1669 1632

-
- - - -

1670 1633 1671 1634 1672 1635 1673 1636

-

1674 1637 1675 1638 1676 1639 1677 1640

-

1678 1641 1679 1642 1680 1643 1681 1644

-

1682 1645 1683 1646 1684 1647 1685 1648

-

1686 1649 1687 1650 1688 1651 1689 1652

-

1690 1653 1691 1654 1692 1655 1693 1656

-

1694 1657 1695 1658 1696 1659 1697 1660

-

1698 1661 1699 1662 1700 1663 1701 1664

-
- - - -

1702 1665 1703 1666 1704 1667 1705 1668 1706 1669 1707 1670 1708 1671 1709 1672 1710 1673 1711 1674 1712 1675 1713 1676

-

1714 1677 1715 1678 1716 1679 1717 1680

-

1718 1681 1719 1682 1720 1683 1721 1684

-

1722 1685 1723 1686 1724 1687 1725 1688

-

1726 1689 1727 1690 1728 1691 1729 1692

-

1730 1693 1731 1694 1732 1695 1733 1696

-

1734 1697 1735 1698 1736 1699 1737 1700

-

1738 1701 1739 1702 1740 1703 1741 1704

-

1742 1705 1743 1706 1744 1707 1745 1708

-

1746 1709 1747 1710 1748 1711 1749 1712

-

1750 1713 1751 1714 1752 1715 1753 1716

-

1754 1717 1755 1718 1756 1719 1757 1720

-

1758 1721 1759 1722 1760 1723 1761 1724

-
- - - -

1762 1725 1763 1726 1764 1727 1765 1728 1766 1729 1767 1730 1768 1731 1769 1732 1770 1733 1771 1734 1772 1735 1773 1736

-

1774 1737 1775 1738 1776 1739 1777 1740

-

1778 1741 1779 1742 1780 1743 1781 1744

-

1782 1745 1783 1746 1784 1747 1785 1748

-

1786 1749 1787 1750 1788 1751 1789 1752

-

1790 1753 1791 1754 1792 1755 1793 1756

-

1794 1757 1795 1758 1796 1759 1797 1760

-

1798 1761 1799 1762 1800 1763 1801 1764

-

1802 1765 1803 1766 1804 1767 1805 1768

-

1806 1769 1807 1770 1808 1771 1809 1772

-

1810 1773 1811 1774 1812 1775 1813 1776

-

1814 1777 1815 1778 1816 1779 1817 1780

-

1818 1781 1819 1782 1820 1783 1821 1784

-
- - - -

1822 1785 1823 1786 1824 1787 1825 1788

-

1826 1789 1827 1790 1828 1791 1829 1792

-

1830 1793 1831 1794 1832 1795 1833 1796

-

1834 1797 1835 1798 1836 1799 1837 1800

-

1838 1801 1839 1802 1840 1803 1841 1804

-

1842 1805 1843 1806 1844 1807 1845 1808

-

1846 1809 1847 1810 1848 1811 1849 1812

-

1850 1813 1851 1814 1852 1815 1853 1816

-
-
- - - CAT3DBagRep - - -
- - - - -145.997 53.5834 -22.8751 -142.894 55 -27.5 -150.263 0 -40.2628 -153.176 0 -35.3095 -153.176 0 -35.3095 -150.263 0 -40.2628 -142.894 -55 -27.4999 -145.997 -53.5834 -22.8753 -145.997 -53.5834 -22.8753 -142.894 -55 -27.4999 -122.763 -95.2628 7.36872 -126.385 -92.809 11.0956 -203.832 38.96 117.682 -95.2628 110 54.9999 -122.763 95.2628 7.36854 -216.673 31.6392 104.004 -216.673 -31.6392 104.004 -122.763 -95.2628 7.36872 -95.2628 -110 55.0001 -203.832 -38.96 117.682 -203.832 -38.96 117.682 -95.2628 -110 55.0001 -67.7627 -95.2628 102.632 -189.164 -36.1403 133.307 -189.164 -36.1403 133.307 -67.7627 -95.2628 102.632 -47.6313 -55 137.5 -177.03 -22.0118 146.232 -177.03 -22.0118 146.232 -47.6313 -55 137.5 -40.2628 0 150.263 -172.249 0 151.325 -172.249 0 151.325 -40.2628 0 150.263 -47.6314 55 137.5 -177.03 22.0118 146.232 -177.03 22.0118 146.232 -47.6314 55 137.5 -67.7628 95.2628 102.631 -189.164 36.1403 133.307 -189.164 36.1403 133.307 -67.7628 95.2628 102.631 -95.2628 110 54.9999 -203.832 38.96 117.682 -95.2628 110 54.9999 -67.7628 95.2628 102.631 -47.6314 55 137.5 -40.2628 0 150.263 -47.6313 -55 137.5 -67.7627 -95.2628 102.632 -95.2628 -110 55.0001 -122.763 -95.2628 7.36872 -142.894 -55 -27.4999 -150.263 0 -40.2628 -142.894 55 -27.5 -122.763 95.2628 7.36854 -126.385 92.8088 11.0959 -122.763 95.2628 7.36854 -142.894 55 -27.5 -145.997 53.5834 -22.8751 -221.61 23.3428 98.7449 -216.673 31.6392 104.004 -207.844 37.6206 94.9187 -221.609 -23.3431 98.7452 -207.846 -37.6196 94.9202 -216.673 -31.6392 104.004 -225.001 90.9303 -52.5026 -225.001 104.999 -0.003009 -225.001 52.4966 -90.9343 -225.001 90.933 52.4974 -225 -0.003741 -105 -225 52.5013 90.931 -225 -52.5034 -90.9315 -225 -90.935 -52.4979 -225 -52.4986 90.9338 -225 -105.001 0.00251 -225 -90.9323 52.5022 -184.356 -52.4986 90.9338 -184.352 52.5014 90.931 -125.99 -90.9321 52.502 -125.989 90.9332 52.4972 -117.168 97.7482 27.0609 -117.168 97.7482 27.0609 -117.166 -97.7492 27.063 -117.166 -97.7492 27.063 -193.411 -0.003678 -105 -185.29 52.4967 -90.9343 -185.288 -52.5033 -90.9316 -163.102 90.9304 -52.5027 -163.099 -90.9349 -52.4979 -132.793 104.999 -0.003118 -132.789 -105.001 0.002402 -225 52.4992 90.6082 -225 -0.00075 104.676 -125 -0.00075 104.676 -125 52.4992 90.6082 -225 -0.00075 104.676 -225 -52.5008 90.6084 -125 -52.5008 90.6084 -125 -0.00075 104.676 -225 -105.001 -0.324099 -225 -90.9335 52.1759 -225 -52.5008 90.6084 -225 -0.00075 104.676 -225 52.4992 90.6082 -225 90.9318 52.1754 -225 104.999 -0.324632 -225 90.9315 -52.8246 -225 52.4988 -91.2572 -225 -0.001283 -105.324 -225 -52.5012 -91.2569 -225 -90.9338 -52.8241 -225 90.9318 52.1754 -225 52.4992 90.6082 -125 52.4992 90.6082 -125 90.9318 52.1754 -216.673 -31.6392 104.004 -203.832 -38.96 117.682 -189.164 -36.1403 133.307 -177.03 -22.0118 146.232 -172.249 0 151.325 -177.03 22.0118 146.232 -189.164 36.1403 133.307 -203.832 38.96 117.682 -216.673 31.6392 104.004 -221.61 23.3428 98.7449 -221.609 -23.3431 98.7452 - - - - - - - - - - -0.80372 0.43498 -0.405988 -0.80372 0.43498 -0.405988 -0.86198 0 -0.506943 -0.86198 0 -0.506943 -0.86198 0 -0.506943 -0.86198 0 -0.506943 -0.803704 -0.435011 -0.405988 -0.803704 -0.435011 -0.405988 -0.803704 -0.435011 -0.405988 -0.803704 -0.435011 -0.405988 -0.644459 -0.753468 -0.130222 -0.725956 -0.620258 -0.297098 -0.426954 0.870028 0.246498 -0.426954 0.870028 0.246498 -0.644459 0.753468 -0.130222 -0.529313 0.847314 0.0434278 -0.529313 -0.847314 0.0434278 -0.644459 -0.753468 -0.130222 -0.426954 -0.870028 0.246498 -0.426954 -0.870028 0.246498 -0.426954 -0.870028 0.246498 -0.426954 -0.870028 0.246498 -0.209449 -0.753479 0.623218 -0.209449 -0.753479 0.623218 -0.209449 -0.753479 0.623218 -0.209449 -0.753479 0.623218 -0.0502029 -0.43498 0.899039 -0.0502029 -0.43498 0.899039 -0.0502029 -0.43498 0.899039 -0.0502029 -0.43498 0.899039 0.00802637 0 0.999968 0.00802637 0 0.999968 0.00802637 0 0.999968 0.00802637 0 0.999968 -0.0502029 0.435011 0.899025 -0.0502029 0.435011 0.899025 -0.0502029 0.435011 0.899025 -0.0502029 0.435011 0.899025 -0.209449 0.753479 0.623218 -0.209449 0.753479 0.623218 -0.209449 0.753479 0.623218 -0.209449 0.753479 0.623218 -0.426954 0.870028 0.246498 -0.426954 0.870028 0.246498 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 -0.725956 0.620258 -0.297098 -0.644459 0.753468 -0.130222 -0.80372 0.43498 -0.405988 -0.80372 0.43498 -0.405988 -0.725946 0.62027 -0.297098 -0.725947 -0.620269 -0.297099 0 0.866017 -0.500015 0 1 0 0 0.499954 -0.866052 0 0.866052 0.499954 0 0 -1 0 0.70713 0.707083 0 -0.500015 -0.866017 0 -0.866052 -0.499954 0 -0.707083 0.70713 0 -1 0 0 -0.866017 0.500015 0 -0.707083 0.70713 0 0.70713 0.707083 0 -0.866017 0.500015 0 0.866052 0.499954 0 0.96594 0.258766 0.866034 0 -0.499985 0 -0.965924 0.258827 0.866034 0 -0.499985 0 0 -1 0 0.499954 -0.866052 0 -0.500015 -0.866017 0 0.866017 -0.500015 0 -0.866052 -0.499954 0 1 0 0 -1 0 0.866033 2.73738e-006 -0.499988 0 0.499985 0.866034 0 0 1 0 0 1 0 0.499985 0.866034 0 0 1 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0 1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.70713 0.707083 0 0.499985 0.866034 0 0.499985 0.866034 0 0.70713 0.707083 -0.729078 1.2147e-007 0.684431 - - - - - - - - - - - - - - -

0 0 1 1 2 2 3 3

-

4 4 5 5 6 6 7 7

-

8 8 9 9 10 10 11 11

-

12 12 13 13 14 14 15 15

-

16 16 17 17 18 18 19 19

-

20 20 21 21 22 22 23 23

-

24 24 25 25 26 26 27 27

-

28 28 29 29 30 30 31 31

-

32 32 33 33 34 34 35 35

-

36 36 37 37 38 38 39 39

-

40 40 41 41 42 42 43 43

-

44 44 45 45 46 46 47 47 48 48 49 49 50 50 51 51 52 52 53 53 54 54 55 55

-

56 56 57 57 58 58 59 59

-
- - - -

60 60 61 60 62 60

-
- - - -

63 61 64 61 65 61

-
- - - -

86 88 88 88 89 88 87 88 85 88

-

90 88 91 88 89 88 88 88

-

82 88 84 88 91 88 90 88

-
- - - -

77 73 74 70 76 72 79 75

-

83 79 79 75 76 72 75 71 91 87

-

91 87 75 71 73 69 89 85

-

89 85 73 69 72 68 87 83

-

87 83 72 68 70 66 85 81

-

85 81 70 66 68 64 86 82

-

86 82 68 64 66 62 88 84

-

88 84 66 62 67 63 90 86

-

81 77 90 86 67 63 69 65 80 76

-

80 76 69 65 71 67 78 74

-
- - - -

92 89 93 90 94 91 95 92

-

96 93 97 94 98 95 99 96

-

100 97 101 98 102 99 103 100 104 101 105 102 106 103 107 104 108 105 109 106 110 107 111 108

-

112 109 113 110 114 111 115 112

-
- - - -

116 113 117 113 118 113 119 113 120 113 121 113 122 113 123 113 124 113 125 113 126 113

-
-
- - - CAT3DBagRep - - -
- - - - -37.0345 -27.5 -120.092 -37.0345 27.5 -120.092 -43.0345 27.5 -109.699 -43.0345 -27.5 -109.699 -58.6851 -27.5 -132.592 -37.0345 -27.5 -120.092 -43.0345 -27.5 -109.699 -64.6851 -27.5 -122.199 -64.6851 27.5 -122.199 -64.6851 -27.5 -122.199 -43.0345 -27.5 -109.699 -43.0345 27.5 -109.699 -37.0345 27.5 -120.092 -58.6851 27.5 -132.592 -64.6851 27.5 -122.199 -43.0345 27.5 -109.699 -58.6851 27.5 -132.592 -37.0345 27.5 -120.092 -37.0345 -27.5 -120.092 -58.6851 -27.5 -132.592 -58.6851 27.5 -132.592 -58.6851 -27.5 -132.592 -64.6851 -27.5 -122.199 -64.6851 27.5 -122.199 -38.9714 -116.913 67.5 -14.4953 -128.273 25.1061 39.3145 -133.55 78.9159 -14.4567 -116.913 109.961 -67.5003 -67.5 116.913 -38.9714 -116.913 67.5 -14.4567 -116.913 109.961 -57.25 -67.5 134.667 -77.9426 0 135 -67.5003 -67.5 116.913 -57.25 -67.5 134.667 -72.9134 0 143.711 -14.4567 116.913 109.961 39.3145 133.55 78.9159 -14.4953 128.273 25.1061 -38.9714 116.913 67.5 -57.25 67.5 134.667 -14.4567 116.913 109.961 -38.9714 116.913 67.5 -67.5003 67.5 116.913 -72.9134 0 143.711 -57.25 67.5 134.667 -67.5003 67.5 116.913 -77.9426 0 135 139.682 -67.5 8.1104 145.25 -67.5 17.754 109.259 -109.058 38.5332 139.682 -67.5 8.1104 152.923 0 -5.12989 160.913 0 8.71074 145.25 -67.5 17.754 145.25 67.5 17.754 160.913 0 8.71074 152.923 0 -5.12989 139.682 67.5 8.1104 109.259 109.058 38.5332 145.25 67.5 17.754 139.682 67.5 8.1104 -77.9426 0 135 -110 0 135 -110 -67.5 116.913 -67.5003 -67.5 116.913 -67.5003 -67.5 116.913 -110 -67.5 116.913 -110 -116.913 67.5 -38.9715 -116.913 67.5 -14.4953 -128.273 25.1061 -38.9715 -116.913 67.5 -110 -116.913 67.5 -110 -135 0 -108.192 -135 0 -108.192 -135 0 -110 -135 0 -110 -116.913 -67.5 -90.1057 -116.913 -67.5 -90.1057 -116.913 -67.5 -110 -116.913 -67.5 -110 -67.5 -116.913 -76.8654 -67.5 -116.913 -76.8654 -67.5 -116.913 -110 -67.5 -116.913 -110 0 -135 -72.0191 0 -135 -72.0191 0 -135 -110 0 -135 -110 67.5 -116.913 -76.8654 67.5 -116.913 -76.8654 67.5 -116.913 -110 67.5 -116.913 -110 116.913 -67.5 -90.1057 116.913 -67.5 -90.1057 116.913 -67.5 -110 116.913 -67.5 -110 135 0 -108.192 135 0 -108.192 135 0 -110 135 0 -110 116.913 67.5 -38.9715 116.913 67.5 -14.4953 128.273 25.1061 -38.9715 116.913 67.5 -110 116.913 67.5 -110 67.5 116.913 -67.5003 67.5 116.913 -67.5003 67.5 116.913 -110 67.5 116.913 -110 0 135 -77.9426 0 135 -90.1056 -116.913 -67.4999 -90.1056 116.913 -67.4999 -76.8654 -67.5 -116.913 -76.8654 67.5 -116.913 -72.0191 0 -135 101.404 -116.913 43.0684 101.404 116.913 43.0684 109.26 -109.058 38.5331 109.26 109.058 38.5331 139.682 -67.5 8.11042 139.682 67.5 8.11042 152.923 0 -5.12985 -108.192 -135 0 -108.192 135 0 -93.6972 -120.505 -54.0959 -93.6972 120.505 -54.0959 -14.4953 -128.273 25.106 -14.4953 128.273 25.106 39.3146 -133.55 78.9159 39.3146 133.55 78.9159 85.9153 -121.064 52.0109 85.9153 121.064 52.0109 160.913 0 8.71074 145.25 67.5 17.754 109.259 109.058 38.5332 101.404 116.913 43.0683 39.3145 133.55 78.9159 -14.4567 116.913 109.961 -57.25 67.5 134.667 -72.9134 0 143.711 -72.9134 0 143.711 -57.25 -67.5 134.667 -14.4567 -116.913 109.961 39.3145 -133.55 78.9159 101.404 -116.913 43.0683 109.259 -109.058 38.5332 145.25 -67.5 17.754 160.913 0 8.71074 -110 0 135 -110 67.5 116.913 -110 116.913 67.5 -110 135 0 -110 116.913 -67.5 -110 67.5 -116.913 -110 0 -135 -110 0 -135 -110 -67.5 -116.913 -110 -116.913 -67.5 -110 -135 0 -110 -116.913 67.5 -110 -67.5 116.913 -110 0 135 - - - - - - - - - - 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 0 1 0 0 1 0 0 1 0 0 1 0 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.432997 -0.86604 0.249977 -0.224128 -0.965931 0.129398 -0.224128 -0.965931 0.129398 -0.432997 -0.86604 0.249977 -0.750019 -0.499985 0.432997 -0.432997 -0.86604 0.249977 -0.432997 -0.86604 0.249977 -0.750019 -0.499985 0.432997 -0.866034 0 0.499985 -0.750019 -0.499985 0.432997 -0.750019 -0.499985 0.432997 -0.866034 0 0.499985 -0.432997 0.86604 0.249977 -0.224128 0.965931 0.129398 -0.224128 0.965931 0.129398 -0.432997 0.86604 0.249977 -0.750019 0.499985 0.432997 -0.432997 0.86604 0.249977 -0.432997 0.86604 0.249977 -0.750019 0.499985 0.432997 -0.866034 0 0.499985 -0.750019 0.499985 0.432997 -0.750019 0.499985 0.432997 -0.866034 0 0.499985 0.750019 -0.499985 -0.432997 0.750019 -0.499985 -0.432997 0.612354 -0.707136 -0.353526 0.750019 -0.499985 -0.432997 0.866034 0 -0.499985 0.866034 0 -0.499985 0.750019 -0.499985 -0.432997 0.750019 0.499985 -0.432997 0.866034 0 -0.499985 0.866034 0 -0.499985 0.750019 0.499985 -0.432997 0.612354 0.707136 -0.353526 0.750019 0.499985 -0.432997 0.750019 0.499985 -0.432997 0 0 1 0 0 1 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 1 0 0 1 0 0 1 0 0 1 0 0 0.866034 0.499985 0 0.866034 0.499985 0 0.965932 0.258797 0 0.866034 0.499985 0 0.866034 0.499985 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0 1 0 0 1 0.249977 -0.86604 -0.432997 0.249977 0.86604 -0.432997 0.432997 -0.499985 -0.750019 0.432997 0.499985 -0.750019 0.499985 0 -0.866034 0.249977 -0.86604 -0.432997 0.249977 0.86604 -0.432997 0.353526 -0.707136 -0.612354 0.353526 0.707136 -0.612354 0.432997 -0.499985 -0.750019 0.432997 0.499985 -0.750019 0.499985 0 -0.866034 0.129409 0.965926 -0.224144 0.12941 -0.965926 -0.224144 0.5 -4.44089e-016 0.866025 -1 0 0 - - - - - - - - - - - - - - -

0 0 1 1 2 2 3 3

-

4 4 5 5 6 6 7 7

-

8 8 9 9 10 10 11 11

-

12 12 13 13 14 14 15 15

-

16 16 17 17 18 18 19 19

-

20 20 21 21 22 22 23 23

-
- - - -

24 24 25 25 26 26 27 27

-

28 28 29 29 30 30 31 31

-

32 32 33 33 34 34 35 35

-

36 36 37 37 38 38 39 39

-

40 40 41 41 42 42 43 43

-

44 44 45 45 46 46 47 47

-
- - - -

48 48 49 49 50 50 59 59 60 60 61 61

-
- - - -

51 51 52 52 53 53 54 54

-

55 55 56 56 57 57 58 58

-
- - - -

62 62 63 63 64 64 65 65

-

66 66 67 67 68 68 69 69

-

70 70 71 71 72 72 73 73 74 74

-

75 75 76 76 77 77 78 78

-

79 79 80 80 81 81 82 82

-

83 83 84 84 85 85 86 86

-

87 87 88 88 89 89 90 90

-

91 91 92 92 93 93 94 94

-

95 95 96 96 97 97 98 98

-

99 99 100 100 101 101 102 102 103 103

-

104 104 105 105 106 106 107 107

-

108 108 109 109 110 110 111 111

-
- - - -

133 124 129 124 131 124 127 124 125 124 129 124

-
- - - -

118 124 113 124 127 124 129 124 133 124

-
- - - -

130 125 128 125 132 125 128 125 124 125 126 125

-
- - - -

132 125 128 125 126 125 112 125 117 125

-
- - - -

122 122 115 115 113 113 118 118 120 120

-

119 119 117 117 112 112 114 114 121 121

-

121 121 114 114 116 116 123 123

-

123 123 116 116 115 115 122 122

-
- - - -

134 126 135 126 136 126 137 126 138 126 139 126 140 126 141 126

-

142 126 143 126 144 126 145 126 146 126 147 126 148 126 149 126

-
- - - -

150 127 151 127 152 127 153 127 154 127 155 127 156 127

-

157 127 158 127 159 127 160 127 161 127 162 127 163 127

-
-
- - - CAT3DBagRep - - -
- - - - 65.5736 0 -176.423 65.5736 0 -176.423 73.6121 -60 -162.5 73.6121 -60 -162.5 73.6121 60 -162.5 73.6121 60 -162.5 93 98.7757 -128.919 93 103.923 -122.976 93 -98.7757 -128.919 93 120 -53.6936 93 -120 -53.6936 93 -103.923 -122.976 93 -103.923 15.5885 93 99.1666 21.0807 93 99.1666 21.0807 93 103.923 15.5884 93 -99.1666 21.0807 93 -99.1666 21.0807 112.583 60 55 112.583 60 55 112.583 -60 55 112.583 -60 55 120.622 0 68.923 120.622 0 68.923 139.186 0 -218.923 139.186 0 -218.923 147.224 -60 -205 147.224 -60 -205 147.224 60 -205 147.224 60 -205 169.186 103.923 -166.961 169.186 103.923 -166.961 169.186 -103.923 -166.961 169.186 -103.923 -166.961 199.186 -120 -115 199.186 -120 -115 199.186 120 -115 199.186 120 -115 229.186 -103.923 -63.0385 229.186 -103.923 -63.0385 229.186 103.923 -63.0385 229.186 103.923 -63.0385 251.147 -60 -25.0001 251.147 -60 -25.0001 251.147 60 -25 251.147 60 -25 259.185 0 -11.077 259.185 0 -11.077 207.418 27.5 30.7281 207.418 -27.5 30.7281 229.068 -27.5 18.2281 229.068 27.5 18.2281 220.068 27.5 2.63969 198.418 27.5 15.1397 207.418 27.5 30.7281 229.068 27.5 18.2281 220.068 -27.5 2.63969 220.068 27.5 2.63969 229.068 27.5 18.2281 229.068 -27.5 18.2281 198.418 -27.5 15.1397 220.068 -27.5 2.63969 229.068 -27.5 18.2281 207.418 -27.5 30.7281 198.418 27.5 15.1397 198.418 -27.5 15.1397 207.418 -27.5 30.7281 207.418 27.5 30.7281 93 -98.7757 -128.919 95.5737 -103.923 -124.462 125.574 -120 -72.5 155.574 -103.923 -20.5385 177.535 -60 17.5 185.574 0 31.423 177.535 60 17.5 155.574 103.923 -20.5385 125.574 120 -72.5 95.5737 103.923 -124.462 93 98.7757 -128.919 93 -98.7758 -128.919 93 -103.923 -122.976 93 -120 -53.6936 93 -103.923 15.5884 93 -99.1659 21.0815 93 99.1659 21.0815 93 103.923 15.5885 93 120 -53.6936 93 103.923 -122.976 93 98.7758 -128.919 196.832 0.001502 24.9218 196.35 47.8163 0 189.932 44.6 25.7498 187.228 26.526 45.9443 189.67 0.00183 51.6495 196.35 -47.8165 0 196.832 0.001502 24.9218 189.67 0.00183 51.6495 187.227 -26.5261 45.9446 189.932 -44.6002 25.7499 196.35 47.8163 0 88 110 0 88 95.2628 55 189.932 44.6 25.7498 189.932 44.6 25.7498 88 95.2628 55 88 55 95.2628 187.228 26.526 45.9443 189.67 0.00183 51.6495 187.228 26.526 45.9443 88 55 95.2628 88 0 110 189.67 0 51.6503 189.67 0 51.6503 88 0 110 88 -55 95.2628 187.227 -26.5261 45.9446 187.227 -26.5261 45.9446 88 -55 95.2628 88 -95.2628 55 189.932 -44.6002 25.7499 189.932 -44.6002 25.7499 88 -95.2628 55 88 -110 0 196.35 -47.8165 0 88 110 0 88 95.2628 -55 88 55 -95.2628 88 0 -110 88 -55 -95.2628 88 -95.2628 -55 88 -110 0 88 -95.2628 55 88 -55 95.2628 88 0 110 88 55 95.2628 88 95.2628 55 182.443 -55.7981 0 88 -110 0 88 -95.2628 -55 163.137 -57.9181 -33.439 163.137 -57.9181 -33.439 88 -95.2628 -55 88 -55 -95.2628 143.316 -39.1267 -67.7695 143.316 -39.1267 -67.7695 88 -55 -95.2628 88 0 -110 134.264 0 -83.4487 134.264 0 -83.4487 88 0 -110 88 55 -95.2628 143.316 39.1267 -67.7695 143.316 39.1267 -67.7695 88 55 -95.2628 88 95.2628 -55 163.137 57.9181 -33.4391 163.137 57.9181 -33.4391 88 95.2628 -55 88 110 0 182.443 55.7981 0 - - - - - - - - - - -0.866034 0 0.499985 -0.499985 0 -0.866034 -0.866034 0 0.499985 -0.432997 -0.499985 -0.750019 -0.866034 0 0.499985 -0.432997 0.499985 -0.750019 -0.866034 0 0.499985 -0.249977 0.86604 -0.432997 -0.866034 0 0.499985 0 1 0 0 -1 0 -0.249977 -0.86604 -0.432997 0.249977 -0.86604 0.432997 -0.866034 0 0.499985 0.353526 0.707136 0.612354 0.249977 0.86604 0.432997 -0.866034 0 0.499985 0.353526 -0.707136 0.612354 -0.866034 0 0.499985 0.432997 0.499985 0.750019 -0.866034 0 0.499985 0.432997 -0.499985 0.750019 -0.866034 0 0.499985 0.499985 0 0.866034 -0.499985 0 -0.866034 0.866034 0 -0.499985 -0.40904 -0.57506 -0.708514 0.866034 0 -0.499985 -0.40904 0.57506 -0.708514 0.866034 0 -0.499985 -0.249977 0.86604 -0.432997 0.866034 0 -0.499985 -0.249977 -0.86604 -0.432997 0.866034 0 -0.499985 0 -1 0 0.866034 0 -0.499985 0 1 0 0.866034 0 -0.499985 0.249977 -0.86604 0.432997 0.866034 0 -0.499985 0.249977 0.86604 0.432997 0.866034 0 -0.499985 0.432997 -0.499985 0.750019 0.866034 0 -0.499985 0.432997 0.499985 0.750019 0.866034 0 -0.499985 0.499985 0 0.866034 0.866034 0 -0.499985 -0.409054 0.575061 -0.708505 -0.25 -0.866025 -0.433013 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0 1 0 0 1 0 0 1 0 0 1 0 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866025 -7.14243e-008 0.5 -1 1.88179e-007 -1.13747e-007 0.955981 0.143138 0.256149 0.95598 -0.143137 0.256152 0.484817 0.844817 0.226356 0.497757 0.867317 0 0.497757 0.75113 0.433637 0.497757 0.75113 0.433637 0.497757 0.75113 0.433637 0.497757 0.75113 0.433637 0.497909 0.433851 0.750906 0.497909 0.433851 0.750906 0.485183 0.226814 0.844484 0.497909 0.433851 0.750906 0.497909 0.433851 0.750906 0.497971 0.00021363 0.867194 0.497971 0.00021363 0.867194 0.497971 0.00021363 0.867194 0.497971 0.00021363 0.867194 0.497757 -0.433637 0.75113 0.497757 -0.433637 0.75113 0.497757 -0.433637 0.75113 0.497757 -0.433637 0.75113 0.497757 -0.75113 0.433637 0.497757 -0.75113 0.433637 0.497757 -0.75113 0.433637 0.497757 -0.75113 0.433637 0.497757 -0.867317 0 0.484817 -0.844817 0.226356 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0.484817 -0.844817 -0.226356 0.497757 -0.867317 0 0.497757 -0.75113 -0.433637 0.497757 -0.75113 -0.433637 0.497757 -0.75113 -0.433637 0.497757 -0.75113 -0.433637 0.497757 -0.433637 -0.75113 0.497757 -0.433637 -0.75113 0.497757 -0.433637 -0.75113 0.497757 -0.433637 -0.75113 0.497757 0 -0.867317 0.497757 0 -0.867317 0.497757 0 -0.867317 0.497757 0 -0.867317 0.497757 0.433637 -0.75113 0.497757 0.433637 -0.75113 0.497757 0.433637 -0.75113 0.497757 0.433637 -0.75113 0.497757 0.75113 -0.433637 0.497757 0.75113 -0.433637 0.497757 0.75113 -0.433637 0.497757 0.75113 -0.433637 0.497757 0.867317 0 0.484817 0.844817 -0.226356 - - - - - - - - - - - - - - -

6 48 29 48 5 48

-
- - - -

29 48 6 48 7 48 31 48

-
- - - -

8 49 3 49 27 49

-
- - - -

33 49 11 49 8 49 27 49

-
- - - -

1 1 5 5 28 28 24 24

-

2 2 8 8 6 6 4 4 0 0

-

3 3 1 1 24 24 26 26

-

32 32 34 34 10 10 11 11

-

34 34 38 38 12 12 10 10

-

38 38 42 42 21 21 17 17 12 12

-

16 16 20 20 22 22 18 18 13 13

-

40 40 36 36 9 9 15 15

-

44 44 40 40 15 15 14 14 19 19

-

46 46 44 44 19 19 23 23

-

42 42 46 46 23 23 21 21

-

47 47 43 43 39 39 35 35 33 33 27 27 25 25 29 29 31 31 37 37 41 41 45 45

-

36 36 30 30 7 7 9 9

-
- - - -

48 50 49 51 50 52 51 53

-

52 54 53 55 54 56 55 57

-

56 58 57 59 58 60 59 61

-

60 62 61 63 62 64 63 65

-

64 66 65 67 66 68 67 69

-
- - - -

68 70 69 70 70 70 71 70 72 70 73 70 74 70 75 70 76 70 77 70 78 70

-
- - - -

79 71 80 71 81 71 82 71 83 71 84 71 85 71 86 71 87 71 88 71

-
- - - -

89 72 90 72 91 72 92 72 93 72

-
- - - -

94 73 95 73 96 73 97 73 98 73

-
- - - -

99 74 100 75 101 76 102 77

-

103 78 104 79 105 80 106 81

-

107 82 108 83 109 84 110 85 111 86

-

112 87 113 88 114 89 115 90

-

116 91 117 92 118 93 119 94

-

120 95 121 96 122 97 123 98

-

124 99 125 100 126 101 127 102 128 103 129 104 130 105 131 106 132 107 133 108 134 109 135 110

-

136 111 137 112 138 113 139 114

-

140 115 141 116 142 117 143 118

-

144 119 145 120 146 121 147 122

-

148 123 149 124 150 125 151 126

-

152 127 153 128 154 129 155 130

-

156 131 157 132 158 133 159 134

-
-
- - - CAT3DBagRep - - -
- - - - 230 120 0 230 103.923 60 240 103.923 60 240 120 0 240 103.923 60 240 60 103.923 240 0 120 240 -60 103.923 240 -103.923 60 240 -120 0 240 -103.923 -60 240 -60 -103.923 240 0 -120 240 60 -103.923 240 103.923 -60 240 120 0 230 60 -103.923 230 103.923 -60 240 103.923 -60 240 60 -103.923 230 0 -120 230 60 -103.923 240 60 -103.923 240 0 -120 230 -60 -103.923 230 0 -120 240 0 -120 240 -60 -103.923 230 -103.923 -60 230 -60 -103.923 240 -60 -103.923 240 -103.923 -60 230 -120 0 230 -103.923 -60 240 -103.923 -60 240 -120 0 230 -103.923 60 230 -120 0 240 -120 0 240 -103.923 60 230 -60 103.923 230 -103.923 60 240 -103.923 60 240 -60 103.923 230 0 120 230 -60 103.923 240 -60 103.923 240 0 120 230 60 103.923 230 0 120 240 0 120 240 60 103.923 230 103.923 60 230 60 103.923 240 60 103.923 240 103.923 60 230 60 103.923 230 103.923 60 230 120 0 230 103.923 -60 230 60 -103.923 230 0 -120 230 -60 -103.923 230 -103.923 -60 230 -120 0 230 -103.923 60 230 -60 103.923 230 0 120 230 103.923 -60 230 120 0 240 120 0 240 103.923 -60 - - - - - - - - - - 0 1 0 0 0.866034 0.499985 0 0.866034 0.499985 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.499985 -0.866034 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.499985 -0.866034 0 0 -1 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0 -1 0 -0.499985 -0.866034 0 0 -1 0 0 -1 0 -0.499985 -0.866034 0 -0.866034 -0.499985 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.866034 -0.499985 0 -1 0 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -1 0 0 -0.866034 0.499985 0 -1 0 0 -1 0 0 -0.866034 0.499985 0 -0.499985 0.866034 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.499985 0.866034 0 0 1 0 -0.499985 0.866034 0 -0.499985 0.866034 0 0 1 0 0.499985 0.866034 0 0 1 0 0 1 0 0.499985 0.866034 0 0.866034 0.499985 0 0.499985 0.866034 0 0.499985 0.866034 0 0.866034 0.499985 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.866034 -0.499985 0 1 0 0 1 0 0 0.866034 -0.499985 - - - - - - - - - - - - - - -

0 0 1 1 2 2 3 3

-

4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15

-

16 16 17 17 18 18 19 19

-

20 20 21 21 22 22 23 23

-

24 24 25 25 26 26 27 27

-

28 28 29 29 30 30 31 31

-

32 32 33 33 34 34 35 35

-

36 36 37 37 38 38 39 39

-

40 40 41 41 42 42 43 43

-

44 44 45 45 46 46 47 47

-

48 48 49 49 50 50 51 51

-

52 52 53 53 54 54 55 55

-

56 56 57 57 58 58 59 59 60 60 61 61 62 62 63 63 64 64 65 65 66 66 67 67

-

68 68 69 69 70 70 71 71

-
-
- - - CAT3DBagRep - - -
- - - - 37.5 280 0 32.476 280 18.75 32.476 275.984 18.75 37.5 275.984 0 32.476 280 18.75 18.75 280 32.476 18.75 275.984 32.476 32.476 275.984 18.75 18.75 280 32.476 0 280 37.5 0 275.984 37.5 18.75 275.984 32.476 0 280 37.5 -18.75 280 32.476 -18.75 275.984 32.476 0 275.984 37.5 -18.75 280 32.476 -32.476 280 18.75 -32.476 275.984 18.75 -18.75 275.984 32.476 -32.476 280 18.75 -37.5 280 0 -37.5 275.984 0 -32.476 275.984 18.75 -37.5 280 0 -32.476 280 -18.75 -32.476 275.984 -18.75 -37.5 275.984 0 -32.476 280 -18.75 -18.75 280 -32.476 -18.75 275.985 -32.476 -32.476 275.984 -18.75 -18.75 280 -32.476 0 280 -37.5 0 275.985 -37.5 -18.75 275.985 -32.476 0 280 -37.5 18.75 280 -32.476 18.75 275.985 -32.476 0 275.985 -37.5 18.75 280 -32.476 32.476 280 -18.75 32.476 275.985 -18.75 18.75 275.985 -32.476 37.5 280 0 32.476 280 -18.75 18.75 280 -32.476 0 280 -37.5 -18.75 280 -32.476 -32.476 280 -18.75 -37.5 280 0 -32.476 280 18.75 -18.75 280 32.476 0 280 37.5 18.75 280 32.476 32.476 280 18.75 32.476 280 -18.75 37.5 280 0 37.5 275.984 0 32.476 275.985 -18.75 46.0055 -275.984 47.9985 128.681 -275.986 -32.8739 128.682 -191.986 -32.875 46.0061 -191.984 47.9974 18.7305 -275.985 64.3004 46.0055 -275.984 47.9985 46.0061 -191.984 47.9974 18.7311 -191.985 64.2993 -16.4394 -275.985 65.7443 18.7305 -275.985 64.3004 18.7311 -191.985 64.2993 -16.4388 -191.985 65.743 -47.6182 -275.984 49.408 -16.4394 -275.985 65.7443 -16.4388 -191.985 65.743 -47.6176 -191.984 49.4069 -66.4504 -275.983 19.6667 -47.6182 -275.984 49.408 -47.6176 -191.984 49.4069 -66.4497 -191.983 19.6656 -69.4125 -275.985 -4.88123 -66.4504 -275.983 19.6667 -66.4497 -191.983 19.6656 -69.4119 -191.985 -4.88232 -64.2752 -275.986 -86.4246 -69.4125 -275.985 -4.88123 -69.4119 -191.985 -4.88232 -64.2746 -191.986 -86.4258 237.235 -191.993 -516.528 53.1085 -191.993 -609.415 -64.2746 -191.986 -86.4258 -69.4119 -191.985 -4.88232 -66.4497 -191.983 19.6656 -47.6176 -191.984 49.4069 -16.4388 -191.985 65.743 18.7311 -191.985 64.2993 46.0061 -191.984 47.9974 128.682 -191.986 -32.875 128.681 -275.986 -32.8739 237.234 -275.993 -516.527 237.235 -191.993 -516.528 128.682 -191.986 -32.875 237.234 -275.993 -516.527 128.681 -275.986 -32.8739 46.0055 -275.984 47.9985 18.7305 -275.985 64.3004 -16.4394 -275.985 65.7443 -47.6182 -275.984 49.408 -66.4504 -275.983 19.6667 -69.4125 -275.985 -4.88123 -64.2752 -275.986 -86.4246 53.1078 -275.993 -609.413 53.1078 -275.993 -609.413 -64.2752 -275.986 -86.4246 -64.2746 -191.986 -86.4258 53.1085 -191.993 -609.415 -16.4032 -276.001 -1264.49 -40.4539 -276 -1249.26 -40.4522 -192 -1249.26 -16.4015 -192.001 -1264.49 12.0427 -276.001 -1265.66 -16.4032 -276.001 -1264.49 -16.4015 -192.001 -1264.49 12.0444 -192.001 -1265.66 37.2618 -276.001 -1252.45 12.0427 -276.001 -1265.66 12.0444 -192.001 -1265.66 37.2635 -192.001 -1252.45 -48.9309 -192 -1237.11 52.1788 -192.001 -1229.38 37.2635 -192.001 -1252.45 12.0444 -192.001 -1265.66 -16.4015 -192.001 -1264.49 -40.4522 -192 -1249.26 -40.4539 -276 -1249.26 -48.9327 -276 -1237.11 -48.9309 -192 -1237.11 -40.4522 -192 -1249.26 -48.9327 -276 -1237.11 -40.4539 -276 -1249.26 -16.4032 -276.001 -1264.49 12.0427 -276.001 -1265.66 37.2618 -276.001 -1252.45 52.1771 -276.001 -1229.38 52.1771 -276.001 -1229.38 37.2618 -276.001 -1252.45 37.2635 -192.001 -1252.45 52.1788 -192.001 -1229.38 136.686 -275.998 -975.766 52.1771 -276.001 -1229.38 52.1774 -192.001 -1229.38 136.686 -191.998 -975.762 237.234 -275.993 -516.527 136.686 -275.998 -975.766 136.686 -191.998 -975.762 237.235 -191.993 -516.523 -82.7051 -192 -1229.71 53.1082 -191.993 -609.41 237.235 -191.993 -516.523 136.686 -191.998 -975.762 52.1774 -192.001 -1229.38 -48.9323 -192 -1237.11 -48.9327 -276 -1237.11 -82.7054 -276 -1229.72 -82.7051 -192 -1229.71 -48.9323 -192 -1237.11 -82.7054 -276 -1229.72 -48.9327 -276 -1237.11 52.1771 -276.001 -1229.38 136.686 -275.998 -975.766 237.234 -275.993 -516.527 53.1078 -275.993 -609.413 -82.7054 -276 -1229.72 53.1078 -275.993 -609.413 53.1082 -191.993 -609.41 -82.7051 -192 -1229.71 12.0444 192.001 -1265.66 -16.4015 192.001 -1264.49 -16.4032 276.001 -1264.49 12.0427 276.001 -1265.66 37.2635 192.001 -1252.45 12.0444 192.001 -1265.66 12.0427 276.001 -1265.66 37.2618 276.001 -1252.45 52.1771 276.001 -1229.38 37.2618 276.001 -1252.45 12.0427 276.001 -1265.66 -16.4032 276.001 -1264.49 -40.4539 276 -1249.26 -48.9327 276 -1237.11 -40.4522 192 -1249.26 -48.9309 192 -1237.11 -48.9327 276 -1237.11 -40.4539 276 -1249.26 -16.4015 192.001 -1264.49 -40.4522 192 -1249.26 -40.4539 276 -1249.26 -16.4032 276.001 -1264.49 -40.4522 192 -1249.26 -16.4015 192.001 -1264.49 12.0444 192.001 -1265.66 37.2635 192.001 -1252.45 52.1788 192.001 -1229.38 -48.9309 192 -1237.11 52.1788 192.001 -1229.38 37.2635 192.001 -1252.45 37.2618 276.001 -1252.45 52.1771 276.001 -1229.38 -48.9323 192 -1237.11 -82.7051 192 -1229.71 -82.7054 276 -1229.72 -48.9327 276 -1237.11 237.235 191.993 -516.523 136.686 191.998 -975.762 136.686 275.998 -975.766 237.234 275.993 -516.527 53.1078 275.993 -609.413 237.234 275.993 -516.527 136.686 275.998 -975.766 52.1771 276.001 -1229.38 -48.9327 276 -1237.11 -82.7054 276 -1229.72 136.686 191.998 -975.762 52.1774 192.001 -1229.38 52.1771 276.001 -1229.38 136.686 275.998 -975.766 -48.9323 192 -1237.11 52.1774 192.001 -1229.38 136.686 191.998 -975.762 237.235 191.993 -516.523 53.1082 191.993 -609.41 -82.7051 192 -1229.71 -82.7051 192 -1229.71 53.1082 191.993 -609.41 53.1078 275.993 -609.413 -82.7054 276 -1229.72 18.7311 191.985 64.2993 46.0061 191.984 47.9974 46.0055 275.984 47.9985 18.7305 275.985 64.3004 -16.4388 191.985 65.743 18.7311 191.985 64.2993 18.7305 275.985 64.3004 -16.4394 275.985 65.7443 -47.6176 191.984 49.4069 -16.4388 191.985 65.743 -16.4394 275.985 65.7443 -47.6182 275.984 49.408 -66.4497 191.983 19.6656 -47.6176 191.984 49.4069 -47.6182 275.984 49.408 -66.4504 275.983 19.6667 -69.4119 191.985 -4.88232 -66.4497 191.983 19.6656 -66.4504 275.983 19.6667 -69.4125 275.985 -4.88123 -64.2746 191.986 -86.4258 -69.4119 191.985 -4.88232 -69.4125 275.985 -4.88123 -64.2752 275.986 -86.4246 53.1078 275.993 -609.413 -64.2752 275.986 -86.4246 -69.4125 275.985 -4.88123 -66.4504 275.983 19.6667 -47.6182 275.984 49.408 -16.4394 275.985 65.7443 18.7305 275.985 64.3004 46.0055 275.984 47.9985 128.681 275.986 -32.8739 237.234 275.993 -516.527 128.682 191.986 -32.875 237.235 191.993 -516.528 237.234 275.993 -516.527 128.681 275.986 -32.8739 46.0061 191.984 47.9974 128.682 191.986 -32.875 128.681 275.986 -32.8739 46.0055 275.984 47.9985 128.682 191.986 -32.875 46.0061 191.984 47.9974 18.7311 191.985 64.2993 -16.4388 191.985 65.743 -47.6176 191.984 49.4069 -66.4497 191.983 19.6656 -69.4119 191.985 -4.88232 -64.2746 191.986 -86.4258 53.1085 191.993 -609.415 237.235 191.993 -516.528 53.1085 191.993 -609.415 -64.2746 191.986 -86.4258 -64.2752 275.986 -86.4246 53.1078 275.993 -609.413 17.576 -280 -1245.13 31.7842 -280 -1231.9 37.476 -280 -1213.34 33.1261 -280 -1194.42 19.9001 -280 -1180.22 1.34193 -280 -1174.52 -17.5758 -280 -1178.87 -31.784 -280 -1192.1 -37.4757 -280 -1210.66 -33.1258 -280 -1229.58 -19.8999 -280 -1243.78 -1.34171 -280 -1249.48 -33.1258 -160 -1229.58 -19.8999 -160 -1243.78 -19.8999 -280 -1243.78 -33.1258 -280 -1229.58 -37.4757 -160 -1210.66 -33.1258 -160 -1229.58 -33.1258 -280 -1229.58 -37.4757 -280 -1210.66 -31.784 -160 -1192.1 -37.4757 -160 -1210.66 -37.4757 -280 -1210.66 -31.784 -280 -1192.1 -17.5758 -160 -1178.87 -31.784 -160 -1192.1 -31.784 -280 -1192.1 -17.5758 -280 -1178.87 1.34193 -160 -1174.52 -17.5758 -160 -1178.87 -17.5758 -280 -1178.87 1.34193 -280 -1174.52 19.9001 -160 -1180.22 1.34193 -160 -1174.52 1.34193 -280 -1174.52 19.9001 -280 -1180.22 33.1261 -160 -1194.42 19.9001 -160 -1180.22 19.9001 -280 -1180.22 33.1261 -280 -1194.42 37.476 -160 -1213.34 33.1261 -160 -1194.42 33.1261 -280 -1194.42 37.476 -280 -1213.34 31.7842 -160 -1231.9 37.476 -160 -1213.34 37.476 -280 -1213.34 31.7842 -280 -1231.9 17.576 -160 -1245.13 31.7842 -160 -1231.9 31.7842 -280 -1231.9 17.576 -280 -1245.13 -1.34171 -160 -1249.48 17.576 -160 -1245.13 17.576 -280 -1245.13 -1.34171 -280 -1249.48 -19.8999 -160 -1243.78 -1.34171 -160 -1249.48 -1.34171 -280 -1249.48 -19.8999 -280 -1243.78 -19.8999 280 -1243.78 -33.1258 280 -1229.58 -37.4757 280 -1210.66 -31.784 280 -1192.1 -17.5758 280 -1178.87 1.34193 280 -1174.52 19.9001 280 -1180.22 33.1261 280 -1194.42 37.476 280 -1213.34 31.7842 280 -1231.9 17.576 280 -1245.13 -1.34171 280 -1249.48 31.7842 160 -1231.9 17.576 160 -1245.13 17.576 280 -1245.13 31.7842 280 -1231.9 37.476 160 -1213.34 31.7842 160 -1231.9 31.7842 280 -1231.9 37.476 280 -1213.34 33.1261 160 -1194.42 37.476 160 -1213.34 37.476 280 -1213.34 33.1261 280 -1194.42 19.9001 160 -1180.22 33.1261 160 -1194.42 33.1261 280 -1194.42 19.9001 280 -1180.22 1.34193 160 -1174.52 19.9001 160 -1180.22 19.9001 280 -1180.22 1.34193 280 -1174.52 -17.5758 160 -1178.87 1.34193 160 -1174.52 1.34193 280 -1174.52 -17.5758 280 -1178.87 -31.784 160 -1192.1 -17.5758 160 -1178.87 -17.5758 280 -1178.87 -31.784 280 -1192.1 -37.4757 160 -1210.66 -31.784 160 -1192.1 -31.784 280 -1192.1 -37.4757 280 -1210.66 -33.1258 160 -1229.58 -37.4757 160 -1210.66 -37.4757 280 -1210.66 -33.1258 280 -1229.58 -19.8999 160 -1243.78 -33.1258 160 -1229.58 -33.1258 280 -1229.58 -19.8999 280 -1243.78 -1.34171 160 -1249.48 -19.8999 160 -1243.78 -19.8999 280 -1243.78 -1.34171 280 -1249.48 17.576 160 -1245.13 -1.34171 160 -1249.48 -1.34171 280 -1249.48 17.576 280 -1245.13 32.476 -280 18.75 18.75 -280 32.476 0 -280 37.5 -18.75 -280 32.476 -32.476 -280 18.75 -37.5 -280 0 -32.476 -280 -18.75 -18.75 -280 -32.476 0 -280 -37.5 18.75 -280 -32.476 32.476 -280 -18.75 37.5 -280 0 18.75 -275.985 -32.476 32.476 -275.985 -18.75 32.476 -280 -18.75 18.75 -280 -32.476 0 -275.985 -37.5 18.75 -275.985 -32.476 18.75 -280 -32.476 0 -280 -37.5 -18.75 -275.985 -32.476 0 -275.985 -37.5 0 -280 -37.5 -18.75 -280 -32.476 -32.476 -275.984 -18.75 -18.75 -275.985 -32.476 -18.75 -280 -32.476 -32.476 -280 -18.75 -37.5 -275.984 0 -32.476 -275.984 -18.75 -32.476 -280 -18.75 -37.5 -280 0 -32.476 -275.984 18.75 -37.5 -275.984 0 -37.5 -280 0 -32.476 -280 18.75 -18.75 -275.984 32.476 -32.476 -275.984 18.75 -32.476 -280 18.75 -18.75 -280 32.476 0 -275.984 37.5 -18.75 -275.984 32.476 -18.75 -280 32.476 0 -280 37.5 18.75 -275.984 32.476 0 -275.984 37.5 0 -280 37.5 18.75 -280 32.476 32.476 -275.984 18.75 18.75 -275.984 32.476 18.75 -280 32.476 32.476 -280 18.75 37.5 -275.984 0 32.476 -275.984 18.75 32.476 -280 18.75 37.5 -280 0 32.476 -275.985 -18.75 37.5 -275.984 0 37.5 -280 0 32.476 -280 -18.75 - - - - - - - - - - 1 0 0 0.866034 0 0.499985 0.866034 0 0.499985 1 0 0 0.866034 0 0.499985 0.499985 0 0.866034 0.499985 0 0.866034 0.866034 0 0.499985 0.499985 0 0.866034 0 0 1 0 0 1 0.499985 0 0.866034 0 0 1 -0.499985 0 0.866034 -0.499985 0 0.866034 0 0 1 -0.499985 0 0.866034 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.866034 0 0.499985 -1 0 0 -1 0 0 -0.866034 0 0.499985 -1 0 0 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -1 0 0 -0.866034 0 -0.499985 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.499985 0 -0.866034 0 0 -1 0 0 -1 -0.499985 0 -0.866034 0 0 -1 0.499985 0 -0.866034 0.499985 0 -0.866034 0 0 -1 0.499985 0 -0.866034 0.866034 0 -0.499985 0.866034 0 -0.499985 0.499985 0 -0.866034 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.866034 0 -0.499985 1 0 0 1 0 0 0.866034 0 -0.499985 0.61037 0 0.792116 0.873428 0 0.486953 0.873428 0 0.486953 0.61037 0 0.792116 0.285806 0 0.958288 0.61037 0 0.792116 0.61037 0 0.792116 0.285806 0 0.958288 -0.219001 0 0.975725 0.285806 0 0.958288 0.285806 0 0.958288 -0.219001 0 0.975725 -0.677572 0 0.735456 -0.219001 0 0.975725 -0.219001 0 0.975725 -0.677572 0 0.735456 -0.942 0 0.335612 -0.677572 0 0.735456 -0.677572 0 0.735456 -0.942 0 0.335612 -0.999592 0 0.0285653 -0.942 0 0.335612 -0.942 0 0.335612 -0.999592 0 0.0285653 -0.989958 0 -0.141362 -0.999592 0 0.0285653 -0.999592 0 0.0285653 -0.989958 0 -0.141362 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.873428 0 0.486953 0.975731 0 0.21897 0.975731 0 0.21897 0.873428 0 0.486953 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.975731 0 -0.21897 -0.989958 0 -0.141362 -0.989958 0 -0.141362 -0.975731 0 -0.21897 -0.298196 0 -0.954505 -0.691092 0 -0.722767 -0.691092 0 -0.722767 -0.298196 0 -0.954505 0.21897 0 -0.975731 -0.298196 0 -0.954505 -0.298196 0 -0.954505 0.21897 0 -0.975731 0.674032 0 -0.738702 0.21897 0 -0.975731 0.21897 0 -0.975731 0.674032 0 -0.738702 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.691092 0 -0.722767 -0.820014 0 -0.572344 -0.820014 0 -0.572344 -0.691092 0 -0.722767 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.839742 0 -0.542985 0.674032 0 -0.738702 0.674032 0 -0.738702 0.839742 0 -0.542985 0.96415 0 -0.265358 0.948722 0 -0.316111 0.948722 0 -0.316111 0.96415 0 -0.265358 0.976861 0 -0.213874 0.96415 0 -0.265358 0.96415 0 -0.265358 0.976861 0 -0.213874 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.213874 3.05185e-005 -0.976861 -0.213874 3.05185e-005 -0.976861 -0.213874 3.05185e-005 -0.976861 -0.213874 3.05185e-005 -0.976861 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.976861 0 0.213874 -0.976861 0 0.213874 -0.976861 0 0.213874 -0.976861 0 0.213874 0.21897 0 -0.975731 -0.298196 0 -0.954505 -0.298196 0 -0.954505 0.21897 0 -0.975731 0.674032 0 -0.738702 0.21897 0 -0.975731 0.21897 0 -0.975731 0.674032 0 -0.738702 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.691092 0 -0.722767 -0.820014 0 -0.572344 -0.820014 0 -0.572344 -0.691092 0 -0.722767 -0.298196 0 -0.954505 -0.691092 0 -0.722767 -0.691092 0 -0.722767 -0.298196 0 -0.954505 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.839742 0 -0.542985 0.674032 0 -0.738702 0.674032 0 -0.738702 0.839742 0 -0.542985 -0.213874 -3.05185e-005 -0.976861 -0.213874 -3.05185e-005 -0.976861 -0.213874 -3.05185e-005 -0.976861 -0.213874 -3.05185e-005 -0.976861 0.976861 0 -0.213874 0.96415 0 -0.265358 0.96415 0 -0.265358 0.976861 0 -0.213874 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.96415 0 -0.265358 0.948722 0 -0.316111 0.948722 0 -0.316111 0.96415 0 -0.265358 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.976861 0 0.213874 -0.976861 0 0.213874 -0.976861 0 0.213874 -0.976861 0 0.213874 0.285806 0 0.958288 0.61037 0 0.792116 0.61037 0 0.792116 0.285806 0 0.958288 -0.219001 0 0.975725 0.285806 0 0.958288 0.285806 0 0.958288 -0.219001 0 0.975725 -0.677572 0 0.735456 -0.219001 0 0.975725 -0.219001 0 0.975725 -0.677572 0 0.735456 -0.942 0 0.335612 -0.677572 0 0.735456 -0.677572 0 0.735456 -0.942 0 0.335612 -0.999592 0 0.0285653 -0.942 0 0.335612 -0.942 0 0.335612 -0.999592 0 0.0285653 -0.989958 0 -0.141362 -0.999592 0 0.0285653 -0.999592 0 0.0285653 -0.989958 0 -0.141362 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.873428 0 0.486953 0.975731 0 0.21897 0.975731 0 0.21897 0.873428 0 0.486953 0.61037 0 0.792116 0.873428 0 0.486953 0.873428 0 0.486953 0.61037 0 0.792116 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.975731 0 -0.21897 -0.989958 0 -0.141362 -0.989958 0 -0.141362 -0.975731 0 -0.21897 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.883372 0 -0.468673 -0.530656 0 -0.847587 -0.530656 0 -0.847587 -0.883372 0 -0.468673 -0.99936 0 0.0357677 -0.883372 0 -0.468673 -0.883372 0 -0.468673 -0.99936 0 0.0357677 -0.847587 0 0.530656 -0.99936 0 0.0357677 -0.99936 0 0.0357677 -0.847587 0 0.530656 -0.468673 0 0.883372 -0.847587 0 0.530656 -0.847587 0 0.530656 -0.468673 0 0.883372 0.0357677 0 0.99936 -0.468673 0 0.883372 -0.468673 0 0.883372 0.0357677 0 0.99936 0.530656 0 0.847587 0.0357677 0 0.99936 0.0357677 0 0.99936 0.530656 0 0.847587 0.883372 0 0.468673 0.530656 0 0.847587 0.530656 0 0.847587 0.883372 0 0.468673 0.99936 0 -0.0357677 0.883372 0 0.468673 0.883372 0 0.468673 0.99936 0 -0.0357677 0.847587 0 -0.530656 0.99936 0 -0.0357677 0.99936 0 -0.0357677 0.847587 0 -0.530656 0.468673 0 -0.883372 0.847587 0 -0.530656 0.847587 0 -0.530656 0.468673 0 -0.883372 -0.0357677 0 -0.99936 0.468673 0 -0.883372 0.468673 0 -0.883372 -0.0357677 0 -0.99936 -0.530656 0 -0.847587 -0.0357677 0 -0.99936 -0.0357677 0 -0.99936 -0.530656 0 -0.847587 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.847587 0 -0.530656 0.468673 0 -0.883372 0.468673 0 -0.883372 0.847587 0 -0.530656 0.99936 0 -0.0357677 0.847587 0 -0.530656 0.847587 0 -0.530656 0.99936 0 -0.0357677 0.883372 0 0.468673 0.99936 0 -0.0357677 0.99936 0 -0.0357677 0.883372 0 0.468673 0.530656 0 0.847587 0.883372 0 0.468673 0.883372 0 0.468673 0.530656 0 0.847587 0.0357677 0 0.99936 0.530656 0 0.847587 0.530656 0 0.847587 0.0357677 0 0.99936 -0.468673 0 0.883372 0.0357677 0 0.99936 0.0357677 0 0.99936 -0.468673 0 0.883372 -0.847587 0 0.530656 -0.468673 0 0.883372 -0.468673 0 0.883372 -0.847587 0 0.530656 -0.99936 0 0.0357677 -0.847587 0 0.530656 -0.847587 0 0.530656 -0.99936 0 0.0357677 -0.883372 0 -0.468673 -0.99936 0 0.0357677 -0.99936 0 0.0357677 -0.883372 0 -0.468673 -0.530656 0 -0.847587 -0.883372 0 -0.468673 -0.883372 0 -0.468673 -0.530656 0 -0.847587 -0.0357677 0 -0.99936 -0.530656 0 -0.847587 -0.530656 0 -0.847587 -0.0357677 0 -0.99936 0.468673 0 -0.883372 -0.0357677 0 -0.99936 -0.0357677 0 -0.99936 0.468673 0 -0.883372 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.499985 0 -0.866034 0.866034 0 -0.499985 0.866034 0 -0.499985 0.499985 0 -0.866034 0 0 -1 0.499985 0 -0.866034 0.499985 0 -0.866034 0 0 -1 -0.499985 0 -0.866034 0 0 -1 0 0 -1 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -1 0 0 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -1 0 0 -0.866034 0 0.499985 -1 0 0 -1 0 0 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.499985 0 0.866034 0 0 1 -0.499985 0 0.866034 -0.499985 0 0.866034 0 0 1 0.499985 0 0.866034 0 0 1 0 0 1 0.499985 0 0.866034 0.866034 0 0.499985 0.499985 0 0.866034 0.499985 0 0.866034 0.866034 0 0.499985 1 0 0 0.866034 0 0.499985 0.866034 0 0.499985 1 0 0 0.866034 0 -0.499985 1 0 0 1 0 0 0.866034 0 -0.499985 - - - - - - - - - - - - - - -

0 0 1 1 2 2 3 3

-

4 4 5 5 6 6 7 7

-

8 8 9 9 10 10 11 11

-

12 12 13 13 14 14 15 15

-

16 16 17 17 18 18 19 19

-

20 20 21 21 22 22 23 23

-

24 24 25 25 26 26 27 27

-

28 28 29 29 30 30 31 31

-

32 32 33 33 34 34 35 35

-

36 36 37 37 38 38 39 39

-

40 40 41 41 42 42 43 43

-

44 44 45 45 46 46 47 47 48 48 49 49 50 50 51 51 52 52 53 53 54 54 55 55

-

56 56 57 57 58 58 59 59

-
- - - -

60 60 61 61 62 62 63 63

-

64 64 65 65 66 66 67 67

-

68 68 69 69 70 70 71 71

-

72 72 73 73 74 74 75 75

-

76 76 77 77 78 78 79 79

-

80 80 81 81 82 82 83 83

-

84 84 85 85 86 86 87 87

-

88 88 89 89 90 90 91 91 92 92 93 93 94 94 95 95 96 96 97 97

-

98 98 99 99 100 100 101 101

-

102 102 103 103 104 104 105 105 106 106 107 107 108 108 109 109 110 110 111 111

-

112 112 113 113 114 114 115 115

-
- - - -

116 116 117 117 118 118 119 119

-

120 120 121 121 122 122 123 123

-

124 124 125 125 126 126 127 127

-

128 128 129 129 130 130 131 131 132 132 133 133

-

134 134 135 135 136 136 137 137

-

138 138 139 139 140 140 141 141 142 142 143 143

-

144 144 145 145 146 146 147 147

-
- - - -

148 148 149 149 150 150 151 151

-

152 152 153 153 154 154 155 155

-

156 156 157 157 158 158 159 159 160 160 161 161

-

162 162 163 163 164 164 165 165

-

166 166 167 167 168 168 169 169 170 170 171 171

-

172 172 173 173 174 174 175 175

-
- - - -

176 176 177 177 178 178 179 179

-

180 180 181 181 182 182 183 183

-

184 184 185 185 186 186 187 187 188 188 189 189

-

190 190 191 191 192 192 193 193

-

194 194 195 195 196 196 197 197

-

198 198 199 199 200 200 201 201 202 202 203 203

-

204 204 205 205 206 206 207 207

-
- - - -

208 208 209 209 210 210 211 211

-

212 212 213 213 214 214 215 215

-

216 216 217 217 218 218 219 219 220 220 221 221

-

222 222 223 223 224 224 225 225

-

226 226 227 227 228 228 229 229 230 230 231 231

-

232 232 233 233 234 234 235 235

-
- - - -

236 236 237 237 238 238 239 239

-

240 240 241 241 242 242 243 243

-

244 244 245 245 246 246 247 247

-

248 248 249 249 250 250 251 251

-

252 252 253 253 254 254 255 255

-

256 256 257 257 258 258 259 259

-

260 260 261 261 262 262 263 263 264 264 265 265 266 266 267 267 268 268 269 269

-

270 270 271 271 272 272 273 273

-

274 274 275 275 276 276 277 277

-

278 278 279 279 280 280 281 281 282 282 283 283 284 284 285 285 286 286 287 287

-

288 288 289 289 290 290 291 291

-
- - - -

292 292 293 293 294 294 295 295 296 296 297 297 298 298 299 299 300 300 301 301 302 302 303 303

-

304 304 305 305 306 306 307 307

-

308 308 309 309 310 310 311 311

-

312 312 313 313 314 314 315 315

-

316 316 317 317 318 318 319 319

-

320 320 321 321 322 322 323 323

-

324 324 325 325 326 326 327 327

-

328 328 329 329 330 330 331 331

-

332 332 333 333 334 334 335 335

-

336 336 337 337 338 338 339 339

-

340 340 341 341 342 342 343 343

-

344 344 345 345 346 346 347 347

-

348 348 349 349 350 350 351 351

-
- - - -

352 352 353 353 354 354 355 355 356 356 357 357 358 358 359 359 360 360 361 361 362 362 363 363

-

364 364 365 365 366 366 367 367

-

368 368 369 369 370 370 371 371

-

372 372 373 373 374 374 375 375

-

376 376 377 377 378 378 379 379

-

380 380 381 381 382 382 383 383

-

384 384 385 385 386 386 387 387

-

388 388 389 389 390 390 391 391

-

392 392 393 393 394 394 395 395

-

396 396 397 397 398 398 399 399

-

400 400 401 401 402 402 403 403

-

404 404 405 405 406 406 407 407

-

408 408 409 409 410 410 411 411

-
- - - -

412 412 413 413 414 414 415 415 416 416 417 417 418 418 419 419 420 420 421 421 422 422 423 423

-

424 424 425 425 426 426 427 427

-

428 428 429 429 430 430 431 431

-

432 432 433 433 434 434 435 435

-

436 436 437 437 438 438 439 439

-

440 440 441 441 442 442 443 443

-

444 444 445 445 446 446 447 447

-

448 448 449 449 450 450 451 451

-

452 452 453 453 454 454 455 455

-

456 456 457 457 458 458 459 459

-

460 460 461 461 462 462 463 463

-

464 464 465 465 466 466 467 467

-

468 468 469 469 470 470 471 471

-
-
- - - CAT3DBagRep - - -
- - - - -12.9904 382.5 7.5 -12.9904 372.5 7.5 -7.5 372.5 12.9904 -7.5 382.5 12.9904 -7.5 382.5 12.9904 -7.5 372.5 12.9904 0 372.5 15 0 382.5 15 0 382.5 15 0 372.5 15 7.5 372.5 12.9904 7.5 382.5 12.9904 7.5 382.5 12.9904 7.5 372.5 12.9904 12.9904 372.5 7.5 12.9904 382.5 7.5 12.9904 382.5 7.5 12.9904 372.5 7.5 15 372.5 0 15 382.5 0 12.9904 382.5 7.5 15 382.5 0 18 382.5 -15 -18 382.5 -15 -15 382.5 0 -12.9904 382.5 7.5 -7.5 382.5 12.9904 0 382.5 15 7.5 382.5 12.9904 18 382.5 -15 15 382.5 0 15 372.5 0 18 372.5 -15 -12.9904 372.5 7.5 -15 372.5 0 -18 372.5 -15 18 372.5 -15 15 372.5 0 12.9904 372.5 7.5 7.5 372.5 12.9904 0 372.5 15 -7.5 372.5 12.9904 -15 382.5 0 -15 372.5 0 -12.9904 372.5 7.5 -12.9904 382.5 7.5 -15 372.5 0 -15 382.5 0 -18 382.5 -15 -18 372.5 -15 -15 -382.5 0 -12.9904 -382.5 7.5 -12.9904 -372.5 7.5 -15 -372.5 0 -7.5 -382.5 12.9904 0 -382.5 15 0 -372.5 15 -7.5 -372.5 12.9904 0 -382.5 15 7.5 -382.5 12.9904 7.5 -372.5 12.9904 0 -372.5 15 18 -382.5 -15 18 -372.5 -15 15 -372.5 0 15 -382.5 0 12.9904 -382.5 7.5 15 -382.5 0 15 -372.5 0 12.9904 -372.5 7.5 7.5 -382.5 12.9904 12.9904 -382.5 7.5 12.9904 -372.5 7.5 7.5 -372.5 12.9904 12.9904 -382.5 7.5 7.5 -382.5 12.9904 0 -382.5 15 -7.5 -382.5 12.9904 -12.9904 -382.5 7.5 -15 -382.5 0 -18 -382.5 -15 18 -382.5 -15 15 -382.5 0 -12.9904 -382.5 7.5 -7.5 -382.5 12.9904 -7.5 -372.5 12.9904 -12.9904 -372.5 7.5 -12.9904 -372.5 7.5 -7.5 -372.5 12.9904 0 -372.5 15 7.5 -372.5 12.9904 12.9904 -372.5 7.5 15 -372.5 0 18 -372.5 -15 -18 -372.5 -15 -15 -372.5 0 -15 -372.5 0 -18 -372.5 -15 -18 -382.5 -15 -15 -382.5 0 -82.5 465 -15 -82.5 300 -15 82.5 300 -15 82.5 465 -15 -82.5 465 -65 82.5 465 -65 82.5 300 -65 -82.5 300 -65 -82.5 300 -15 -82.5 300 -65 82.5 300 -65 82.5 300 -15 82.5 300 -15 82.5 300 -65 82.5 465 -65 82.5 465 -15 82.5 465 -15 82.5 465 -65 -82.5 465 -65 -82.5 465 -15 -82.5 465 -15 -82.5 465 -65 -82.5 300 -65 -82.5 300 -15 75 382.5 -225 75 382.5 -65.0001 64.9519 345 -65.0001 64.9519 345 -225 64.9519 345 -225 64.9519 345 -65.0001 37.5 317.548 -65.0001 37.5 317.548 -225 37.5 317.548 -225 37.5 317.548 -65.0001 0 307.5 -65.0001 0 307.5 -225 0 307.5 -225 0 307.5 -65.0001 -37.5 317.548 -65.0001 -37.5 317.548 -225 -37.5 317.548 -225 -37.5 317.548 -65.0001 -64.9519 345 -65.0001 -64.9519 345 -225 -64.9519 345 -225 -64.9519 345 -65.0001 -75 382.5 -65.0001 -75 382.5 -225 -75 382.5 -225 -75 382.5 -65.0001 -64.9519 420 -65.0001 -64.9519 420 -225 -64.9519 420 -225 -64.9519 420 -65.0001 -37.5 447.452 -65.0001 -37.5 447.452 -225 -37.5 447.452 -225 -37.5 447.452 -65.0001 0 457.5 -65.0001 0 457.5 -225 0 457.5 -225 0 457.5 -65.0001 37.5 447.452 -65.0001 37.5 447.452 -225 37.5 447.452 -225 37.5 447.452 -65.0001 64.9519 420 -65.0001 64.9519 420 -225 64.9519 420 -225 64.9519 420 -65.0001 75 382.5 -65.0001 75 382.5 -225 -82.5 300 -275 -82.5 465 -275 82.5 465 -275 82.5 300 -275 -82.5 300 -225 82.5 300 -225 82.5 465 -225 -82.5 465 -225 -82.5 465 -275 -82.5 465 -225 82.5 465 -225 82.5 465 -275 82.5 465 -275 82.5 465 -225 82.5 300 -225 82.5 300 -275 82.5 300 -275 82.5 300 -225 -82.5 300 -225 -82.5 300 -275 -82.5 300 -275 -82.5 300 -225 -82.5 465 -225 -82.5 465 -275 82.5 -465 -275 82.5 -300 -275 82.5 -300 -225 82.5 -465 -225 -82.5 -465 -275 82.5 -465 -275 82.5 -465 -225 -82.5 -465 -225 -82.5 -300 -225 -82.5 -465 -225 82.5 -465 -225 82.5 -300 -225 82.5 -300 -275 -82.5 -300 -275 -82.5 -300 -225 82.5 -300 -225 -82.5 -300 -275 82.5 -300 -275 82.5 -465 -275 -82.5 -465 -275 -82.5 -300 -275 -82.5 -465 -275 -82.5 -465 -225 -82.5 -300 -225 37.5 -447.452 -225 64.9519 -420 -225 64.9519 -420 -65.0001 37.5 -447.452 -65.0001 0 -457.5 -225 37.5 -447.452 -225 37.5 -447.452 -65.0001 0 -457.5 -65.0001 -37.5 -447.452 -225 0 -457.5 -225 0 -457.5 -65.0001 -37.5 -447.452 -65.0001 -64.9519 -420 -225 -37.5 -447.452 -225 -37.5 -447.452 -65.0001 -64.9519 -420 -65.0001 -75 -382.5 -225 -64.9519 -420 -225 -64.9519 -420 -65.0001 -75 -382.5 -65.0001 -64.9519 -345 -225 -75 -382.5 -225 -75 -382.5 -65.0001 -64.9519 -345 -65.0001 -37.5 -317.548 -225 -64.9519 -345 -225 -64.9519 -345 -65.0001 -37.5 -317.548 -65.0001 0 -307.5 -225 -37.5 -317.548 -225 -37.5 -317.548 -65.0001 0 -307.5 -65.0001 37.5 -317.548 -225 0 -307.5 -225 0 -307.5 -65.0001 37.5 -317.548 -65.0001 64.9519 -345 -225 37.5 -317.548 -225 37.5 -317.548 -65.0001 64.9519 -345 -65.0001 75 -382.5 -225 64.9519 -345 -225 64.9519 -345 -65.0001 75 -382.5 -65.0001 64.9519 -420 -225 75 -382.5 -225 75 -382.5 -65.0001 64.9519 -420 -65.0001 82.5 -300 -15 82.5 -465 -15 82.5 -465 -65 82.5 -300 -65 -82.5 -300 -15 82.5 -300 -15 82.5 -300 -65 -82.5 -300 -65 -82.5 -465 -65 -82.5 -300 -65 82.5 -300 -65 82.5 -465 -65 82.5 -465 -15 -82.5 -465 -15 -82.5 -465 -65 82.5 -465 -65 -82.5 -465 -15 82.5 -465 -15 82.5 -300 -15 -82.5 -300 -15 -82.5 -465 -15 -82.5 -300 -15 -82.5 -300 -65 -82.5 -465 -65 - - - - - - - - - - -0.866034 0 0.499985 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 0 0 1 0 0 1 0 0 1 0 0 1 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.97376 0 0.227577 0.97376 0 0.227577 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.980582 0 0.196112 0.97376 0 0.227577 0.97376 0 0.227577 0.980582 0 0.196112 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.97376 0 0.227577 -0.97376 0 0.227577 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.97376 0 0.227577 -0.97376 0 0.227577 -0.980582 0 0.196112 -0.980582 0 0.196112 -0.97376 0 0.227577 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.97376 0 0.227577 -0.499985 0 0.866034 0 0 1 0 0 1 -0.499985 0 0.866034 0 0 1 0.499985 0 0.866034 0.499985 0 0.866034 0 0 1 0.980582 0 0.196112 0.980582 0 0.196112 0.97376 0 0.227577 0.97376 0 0.227577 0.866034 0 0.499985 0.97376 0 0.227577 0.97376 0 0.227577 0.866034 0 0.499985 0.499985 0 0.866034 0.866034 0 0.499985 0.866034 0 0.499985 0.499985 0 0.866034 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.866034 0 0.499985 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.97376 0 0.227577 -0.980582 0 0.196112 -0.980582 0 0.196112 -0.97376 0 0.227577 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 0 1 0 0 1 0 0 1 0 0 1 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 1 0 0 1 0 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0.499985 -0.866034 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.499985 -0.866034 0 0 -1 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0 -1 0 -0.499985 -0.866034 0 0 -1 0 0 -1 0 -0.499985 -0.866034 0 -0.866034 -0.499985 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.866034 -0.499985 0 -1 0 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -1 0 0 -0.866034 0.499985 0 -1 0 0 -1 0 0 -0.866034 0.499985 0 -0.499985 0.866034 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.499985 0.866034 0 0 1 0 -0.499985 0.866034 0 -0.499985 0.866034 0 0 1 0 0.499985 0.866034 0 0 1 0 0 1 0 0.499985 0.866034 0 0.866034 0.499985 0 0.499985 0.866034 0 0.499985 0.866034 0 0.866034 0.499985 0 1 0 0 0.866034 0.499985 0 0.866034 0.499985 0 1 0 0 0.866034 -0.499985 0 1 0 0 1 0 0 0.866034 -0.499985 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 - - - - - - - - - - - - - - -

0 0 1 1 2 2 3 3

-

4 4 5 5 6 6 7 7

-

8 8 9 9 10 10 11 11

-

12 12 13 13 14 14 15 15

-

16 16 17 17 18 18 19 19

-

20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28

-

29 29 30 30 31 31 32 32

-

33 33 34 34 35 35 36 36 37 37 38 38 39 39 40 40 41 41

-

42 42 43 43 44 44 45 45

-

46 46 47 47 48 48 49 49

-
- - - -

50 50 51 51 52 52 53 53

-

54 54 55 55 56 56 57 57

-

58 58 59 59 60 60 61 61

-

62 62 63 63 64 64 65 65

-

66 66 67 67 68 68 69 69

-

70 70 71 71 72 72 73 73

-

74 74 75 75 76 76 77 77 78 78 79 79 80 80 81 81 82 82

-

83 83 84 84 85 85 86 86

-

87 87 88 88 89 89 90 90 91 91 92 92 93 93 94 94 95 95

-

96 96 97 97 98 98 99 99

-
- - - -

100 100 101 101 102 102 103 103

-

104 104 105 105 106 106 107 107

-

108 108 109 109 110 110 111 111

-

112 112 113 113 114 114 115 115

-

116 116 117 117 118 118 119 119

-

120 120 121 121 122 122 123 123

-
- - - -

124 124 125 125 126 126 127 127

-

128 128 129 129 130 130 131 131

-

132 132 133 133 134 134 135 135

-

136 136 137 137 138 138 139 139

-

140 140 141 141 142 142 143 143

-

144 144 145 145 146 146 147 147

-

148 148 149 149 150 150 151 151

-

152 152 153 153 154 154 155 155

-

156 156 157 157 158 158 159 159

-

160 160 161 161 162 162 163 163

-

164 164 165 165 166 166 167 167

-

168 168 169 169 170 170 171 171

-
- - - -

172 172 173 173 174 174 175 175

-

176 176 177 177 178 178 179 179

-

180 180 181 181 182 182 183 183

-

184 184 185 185 186 186 187 187

-

188 188 189 189 190 190 191 191

-

192 192 193 193 194 194 195 195

-
- - - -

196 196 197 197 198 198 199 199

-

200 200 201 201 202 202 203 203

-

204 204 205 205 206 206 207 207

-

208 208 209 209 210 210 211 211

-

212 212 213 213 214 214 215 215

-

216 216 217 217 218 218 219 219

-
- - - -

220 220 221 221 222 222 223 223

-

224 224 225 225 226 226 227 227

-

228 228 229 229 230 230 231 231

-

232 232 233 233 234 234 235 235

-

236 236 237 237 238 238 239 239

-

240 240 241 241 242 242 243 243

-

244 244 245 245 246 246 247 247

-

248 248 249 249 250 250 251 251

-

252 252 253 253 254 254 255 255

-

256 256 257 257 258 258 259 259

-

260 260 261 261 262 262 263 263

-

264 264 265 265 266 266 267 267

-
- - - -

268 268 269 269 270 270 271 271

-

272 272 273 273 274 274 275 275

-

276 276 277 277 278 278 279 279

-

280 280 281 281 282 282 283 283

-

284 284 285 285 286 286 287 287

-

288 288 289 289 290 290 291 291

-
-
- - - CAT3DBagRep - - -
- - - - 0 387.5 15 7.5 387.5 12.9904 12.9904 387.5 7.5 15 387.5 0 12.9904 387.5 -7.5 7.5 387.5 -12.9904 0 387.5 -15 -7.5 387.5 -12.9904 -12.9904 387.5 -7.5 -15 387.5 0 -12.9904 387.5 7.5 -7.5 387.5 12.9904 0 377.5 15 -7.5 377.5 12.9904 -12.9904 377.5 7.5 -15 377.5 0 -12.9904 377.5 -7.5 -7.5 377.5 -12.9904 0 377.5 -15 7.5 377.5 -12.9904 12.9904 377.5 -7.5 15 377.5 0 12.9904 377.5 7.5 7.5 377.5 12.9904 0 387.5 15 0 377.5 15 7.5 377.5 12.9904 7.5 387.5 12.9904 7.5 387.5 12.9904 7.5 377.5 12.9904 12.9904 377.5 7.5 12.9904 387.5 7.5 12.9904 387.5 7.5 12.9904 377.5 7.5 15 377.5 0 15 387.5 0 15 387.5 0 15 377.5 0 12.9904 377.5 -7.5 12.9904 387.5 -7.5 12.9904 387.5 -7.5 12.9904 377.5 -7.5 7.5 377.5 -12.9904 7.5 387.5 -12.9904 7.5 387.5 -12.9904 7.5 377.5 -12.9904 0 377.5 -15 0 387.5 -15 0 387.5 -15 0 377.5 -15 -7.5 377.5 -12.9904 -7.5 387.5 -12.9904 -7.5 387.5 -12.9904 -7.5 377.5 -12.9904 -12.9904 377.5 -7.5 -12.9904 387.5 -7.5 -12.9904 387.5 -7.5 -12.9904 377.5 -7.5 -15 377.5 0 -15 387.5 0 -15 387.5 0 -15 377.5 0 -12.9904 377.5 7.5 -12.9904 387.5 7.5 -12.9904 387.5 7.5 -12.9904 377.5 7.5 -7.5 377.5 12.9904 -7.5 387.5 12.9904 -7.5 387.5 12.9904 -7.5 377.5 12.9904 0 377.5 15 0 387.5 15 5 382.5 10 5 382.5 40 4.33013 380 40 4.33013 380 10 4.33013 380 10 4.33013 380 40 2.5 378.17 40 2.5 378.17 10 2.5 378.17 10 2.5 378.17 40 0 377.5 40 0 377.5 10 0 377.5 10 0 377.5 40 -2.5 378.17 40 -2.5 378.17 10 -2.5 378.17 10 -2.5 378.17 40 -4.33013 380 40 -4.33013 380 10 -4.33013 380 10 -4.33013 380 40 -5 382.5 40 -5 382.5 10 -5 382.5 10 -5 382.5 40 -4.33013 385 40 -4.33013 385 10 -4.33013 385 10 -4.33013 385 40 -2.5 386.83 40 -2.5 386.83 10 -2.5 386.83 10 -2.5 386.83 40 0 387.5 40 0 387.5 10 0 387.5 10 0 387.5 40 2.5 386.83 40 2.5 386.83 10 2.5 386.83 10 2.5 386.83 40 4.33013 385 40 4.33013 385 10 4.33013 385 10 4.33013 385 40 5 382.5 40 5 382.5 10 20 382.5 40 17.3205 372.5 40 10 365.18 40 0 362.5 40 -10 365.18 40 -17.3205 372.5 40 -20 382.5 40 -17.3205 392.5 40 -10 399.82 40 0 402.5 40 10 399.82 40 17.3205 392.5 40 20 382.5 40 20 382.5 290 17.3205 372.5 290 17.3205 372.5 40 17.3205 372.5 40 17.3205 372.5 290 10 365.18 290 10 365.18 40 10 365.18 40 10 365.18 290 0 362.5 290 0 362.5 40 0 362.5 40 0 362.5 290 -10 365.18 290 -10 365.18 40 -10 365.18 40 -10 365.18 290 -17.3205 372.5 290 -17.3205 372.5 40 -17.3205 372.5 40 -17.3205 372.5 290 -20 382.5 290 -20 382.5 40 -20 382.5 40 -20 382.5 290 -17.3205 392.5 290 -17.3205 392.5 40 -17.3205 392.5 40 -17.3205 392.5 290 -10 399.82 290 -10 399.82 40 -10 399.82 40 -10 399.82 290 0 402.5 290 0 402.5 40 0 402.5 40 0 402.5 290 10 399.82 290 10 399.82 40 10 399.82 40 10 399.82 290 17.3205 392.5 290 17.3205 392.5 40 17.3205 392.5 40 17.3205 392.5 290 20 382.5 290 20 382.5 40 20 -382.5 40 17.3205 -372.5 40 17.3205 -372.5 290 20 -382.5 290 17.3205 -372.5 40 10 -365.18 40 10 -365.18 290 17.3205 -372.5 290 10 -365.18 40 0 -362.5 40 0 -362.5 290 10 -365.18 290 0 -362.5 40 -10 -365.18 40 -10 -365.18 290 0 -362.5 290 -10 -365.18 40 -17.3205 -372.5 40 -17.3205 -372.5 290 -10 -365.18 290 -17.3205 -372.5 40 -20 -382.5 40 -20 -382.5 290 -17.3205 -372.5 290 -20 -382.5 40 -17.3205 -392.5 40 -17.3205 -392.5 290 -20 -382.5 290 -17.3205 -392.5 40 -10 -399.82 40 -10 -399.82 290 -17.3205 -392.5 290 -10 -399.82 40 0 -402.5 40 0 -402.5 290 -10 -399.82 290 0 -402.5 40 10 -399.82 40 10 -399.82 290 0 -402.5 290 10 -399.82 40 17.3205 -392.5 40 17.3205 -392.5 290 10 -399.82 290 20 -382.5 40 17.3205 -392.5 40 10 -399.82 40 0 -402.5 40 -10 -399.82 40 -17.3205 -392.5 40 -20 -382.5 40 -17.3205 -372.5 40 -10 -365.18 40 0 -362.5 40 10 -365.18 40 17.3205 -372.5 40 17.3205 -392.5 40 20 -382.5 40 20 -382.5 290 17.3205 -392.5 290 2.5 -386.83 10 4.33013 -385 10 4.33013 -385 40 2.5 -386.83 40 0 -387.5 10 2.5 -386.83 10 2.5 -386.83 40 0 -387.5 40 -2.5 -386.83 10 0 -387.5 10 0 -387.5 40 -2.5 -386.83 40 -4.33013 -385 10 -2.5 -386.83 10 -2.5 -386.83 40 -4.33013 -385 40 -5 -382.5 10 -4.33013 -385 10 -4.33013 -385 40 -5 -382.5 40 -4.33013 -380 10 -5 -382.5 10 -5 -382.5 40 -4.33013 -380 40 -2.5 -378.17 10 -4.33013 -380 10 -4.33013 -380 40 -2.5 -378.17 40 0 -377.5 10 -2.5 -378.17 10 -2.5 -378.17 40 0 -377.5 40 2.5 -378.17 10 0 -377.5 10 0 -377.5 40 2.5 -378.17 40 4.33013 -380 10 2.5 -378.17 10 2.5 -378.17 40 4.33013 -380 40 5 -382.5 10 4.33013 -380 10 4.33013 -380 40 5 -382.5 40 4.33013 -385 10 5 -382.5 10 5 -382.5 40 4.33013 -385 40 -15 -387.5 0 -12.9904 -387.5 7.5 -12.9904 -377.5 7.5 -15 -377.5 0 -12.9904 -387.5 -7.5 -15 -387.5 0 -15 -377.5 0 -12.9904 -377.5 -7.5 -7.5 -387.5 -12.9904 -12.9904 -387.5 -7.5 -12.9904 -377.5 -7.5 -7.5 -377.5 -12.9904 0 -387.5 -15 -7.5 -387.5 -12.9904 -7.5 -377.5 -12.9904 0 -377.5 -15 7.5 -387.5 -12.9904 0 -387.5 -15 0 -377.5 -15 7.5 -377.5 -12.9904 12.9904 -387.5 -7.5 7.5 -387.5 -12.9904 7.5 -377.5 -12.9904 12.9904 -377.5 -7.5 15 -387.5 0 12.9904 -387.5 -7.5 12.9904 -377.5 -7.5 15 -377.5 0 12.9904 -387.5 7.5 15 -387.5 0 15 -377.5 0 12.9904 -377.5 7.5 7.5 -387.5 12.9904 12.9904 -387.5 7.5 12.9904 -377.5 7.5 7.5 -377.5 12.9904 0 -387.5 15 7.5 -387.5 12.9904 7.5 -377.5 12.9904 0 -377.5 15 0 -377.5 15 7.5 -377.5 12.9904 12.9904 -377.5 7.5 15 -377.5 0 12.9904 -377.5 -7.5 7.5 -377.5 -12.9904 0 -377.5 -15 -7.5 -377.5 -12.9904 -12.9904 -377.5 -7.5 -15 -377.5 0 -12.9904 -377.5 7.5 -7.5 -377.5 12.9904 -12.9904 -387.5 7.5 -7.5 -387.5 12.9904 -7.5 -377.5 12.9904 -12.9904 -377.5 7.5 0 -387.5 15 -7.5 -387.5 12.9904 -12.9904 -387.5 7.5 -15 -387.5 0 -12.9904 -387.5 -7.5 -7.5 -387.5 -12.9904 0 -387.5 -15 7.5 -387.5 -12.9904 12.9904 -387.5 -7.5 15 -387.5 0 12.9904 -387.5 7.5 7.5 -387.5 12.9904 -7.5 -387.5 12.9904 0 -387.5 15 0 -377.5 15 -7.5 -377.5 12.9904 - - - - - - - - - - 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 1 0 0 1 0 0 1 0 0 1 0 0 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 0 0 1 0 0 1 1 0 0 1 0 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 0 1 0 0 1 0 0 1 0 0 1 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 1 0 0 1 0 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 1 0 0 1 0 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 0 1 0 0 1 0 0 1 0 0 1 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 1 0 0 1 0 0 1 0 0 0.866034 0.499985 0 0.866034 0.499985 0 1 0 0 0.866034 0.499985 0 0.499985 0.866034 0 0.499985 0.866034 0 0.866034 0.499985 0 0.499985 0.866034 0 0 1 0 0 1 0 0.499985 0.866034 0 0 1 0 -0.499985 0.866034 0 -0.499985 0.866034 0 0 1 0 -0.499985 0.866034 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.499985 0.866034 0 -0.866034 0.499985 0 -1 0 0 -1 0 0 -0.866034 0.499985 0 -1 0 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -1 0 0 -0.866034 -0.499985 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.866034 -0.499985 0 -0.499985 -0.866034 0 0 -1 0 0 -1 0 -0.499985 -0.866034 0 0 -1 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0 -1 0 0.499985 -0.866034 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.499985 -0.866034 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0.866034 -0.499985 0 1 0 0 1 0 0 0.866034 -0.499985 0 0.499985 -0.866034 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.499985 -0.866034 0 0 -1 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0 -1 0 -0.499985 -0.866034 0 0 -1 0 0 -1 0 -0.499985 -0.866034 0 -0.866034 -0.499985 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.866034 -0.499985 0 -1 0 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -1 0 0 -0.866034 0.499985 0 -1 0 0 -1 0 0 -0.866034 0.499985 0 -0.499985 0.866034 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.499985 0.866034 0 0 1 0 -0.499985 0.866034 0 -0.499985 0.866034 0 0 1 0 0.499985 0.866034 0 0 1 0 0 1 0 0.499985 0.866034 0 0.866034 0.499985 0 0.499985 0.866034 0 0.499985 0.866034 0 0.866034 0.499985 0 1 0 0 0.866034 0.499985 0 0.866034 0.499985 0 1 0 0 0.866034 -0.499985 0 1 0 0 1 0 0 0.866034 -0.499985 0 -1 0 0 -0.866034 0 0.499985 -0.866034 0 0.499985 -1 0 0 -0.866034 0 -0.499985 -1 0 0 -1 0 0 -0.866034 0 -0.499985 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.499985 0 -0.866034 0 0 -1 -0.499985 0 -0.866034 -0.499985 0 -0.866034 0 0 -1 0.499985 0 -0.866034 0 0 -1 0 0 -1 0.499985 0 -0.866034 0.866034 0 -0.499985 0.499985 0 -0.866034 0.499985 0 -0.866034 0.866034 0 -0.499985 1 0 0 0.866034 0 -0.499985 0.866034 0 -0.499985 1 0 0 0.866034 0 0.499985 1 0 0 1 0 0 0.866034 0 0.499985 0.499985 0 0.866034 0.866034 0 0.499985 0.866034 0 0.499985 0.499985 0 0.866034 0 0 1 0.499985 0 0.866034 0.499985 0 0.866034 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.866034 0 0.499985 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.499985 0 0.866034 0 0 1 0 0 1 -0.499985 0 0.866034 - - - - - - - - - - - - - - -

0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11

-

12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23

-

24 24 25 25 26 26 27 27

-

28 28 29 29 30 30 31 31

-

32 32 33 33 34 34 35 35

-

36 36 37 37 38 38 39 39

-

40 40 41 41 42 42 43 43

-

44 44 45 45 46 46 47 47

-

48 48 49 49 50 50 51 51

-

52 52 53 53 54 54 55 55

-

56 56 57 57 58 58 59 59

-

60 60 61 61 62 62 63 63

-

64 64 65 65 66 66 67 67

-

68 68 69 69 70 70 71 71

-
- - - -

72 72 73 73 74 74 75 75

-

76 76 77 77 78 78 79 79

-

80 80 81 81 82 82 83 83

-

84 84 85 85 86 86 87 87

-

88 88 89 89 90 90 91 91

-

92 92 93 93 94 94 95 95

-

96 96 97 97 98 98 99 99

-

100 100 101 101 102 102 103 103

-

104 104 105 105 106 106 107 107

-

108 108 109 109 110 110 111 111

-

112 112 113 113 114 114 115 115

-

116 116 117 117 118 118 119 119

-
- - - -

120 120 121 121 122 122 123 123 124 124 125 125 126 126 127 127 128 128 129 129 130 130 131 131

-

132 132 133 133 134 134 135 135

-

136 136 137 137 138 138 139 139

-

140 140 141 141 142 142 143 143

-

144 144 145 145 146 146 147 147

-

148 148 149 149 150 150 151 151

-

152 152 153 153 154 154 155 155

-

156 156 157 157 158 158 159 159

-

160 160 161 161 162 162 163 163

-

164 164 165 165 166 166 167 167

-

168 168 169 169 170 170 171 171

-

172 172 173 173 174 174 175 175

-

176 176 177 177 178 178 179 179

-
- - - -

180 180 181 181 182 182 183 183

-

184 184 185 185 186 186 187 187

-

188 188 189 189 190 190 191 191

-

192 192 193 193 194 194 195 195

-

196 196 197 197 198 198 199 199

-

200 200 201 201 202 202 203 203

-

204 204 205 205 206 206 207 207

-

208 208 209 209 210 210 211 211

-

212 212 213 213 214 214 215 215

-

216 216 217 217 218 218 219 219

-

220 220 221 221 222 222 223 223

-

224 224 225 225 226 226 227 227 228 228 229 229 230 230 231 231 232 232 233 233 234 234 235 235

-

236 236 237 237 238 238 239 239

-
- - - -

240 240 241 241 242 242 243 243

-

244 244 245 245 246 246 247 247

-

248 248 249 249 250 250 251 251

-

252 252 253 253 254 254 255 255

-

256 256 257 257 258 258 259 259

-

260 260 261 261 262 262 263 263

-

264 264 265 265 266 266 267 267

-

268 268 269 269 270 270 271 271

-

272 272 273 273 274 274 275 275

-

276 276 277 277 278 278 279 279

-

280 280 281 281 282 282 283 283

-

284 284 285 285 286 286 287 287

-
- - - -

288 288 289 289 290 290 291 291

-

292 292 293 293 294 294 295 295

-

296 296 297 297 298 298 299 299

-

300 300 301 301 302 302 303 303

-

304 304 305 305 306 306 307 307

-

308 308 309 309 310 310 311 311

-

312 312 313 313 314 314 315 315

-

316 316 317 317 318 318 319 319

-

320 320 321 321 322 322 323 323

-

324 324 325 325 326 326 327 327

-

328 328 329 329 330 330 331 331 332 332 333 333 334 334 335 335 336 336 337 337 338 338 339 339

-

340 340 341 341 342 342 343 343

-

344 344 345 345 346 346 347 347 348 348 349 349 350 350 351 351 352 352 353 353 354 354 355 355

-

356 356 357 357 358 358 359 359

-
-
- - - CAT3DBagRep - - -
- - - - -125 62.5 125 -125 125 62.5 -135 125 62.5 -135 62.5 125 -125 125 62.5 -125 125 -62.5 -135 125 -62.5 -135 125 62.5 -125 125 -62.5 -125 62.5 -125 -135 62.5 -125 -135 125 -62.5 -125 62.5 -125 -125 -62.5 -125 -135 -62.5 -125 -135 62.5 -125 -125 -62.5 -125 -125 -125 -62.5 -135 -125 -62.5 -135 -62.5 -125 -125 -125 -62.5 -125 -125 62.5 -135 -125 62.5 -135 -125 -62.5 -125 -125 62.5 -125 -62.5 125 -135 -62.5 125 -135 -125 62.5 -125 -62.5 125 -125 -125 62.5 -125 -125 -62.5 -125 -62.5 -125 -125 62.5 -125 -125 125 -62.5 -125 125 62.5 -125 62.5 125 -125 -62.5 125 -125 62.5 125 -135 62.5 125 -135 -62.5 125 -135 -125 62.5 -135 -62.5 125 -175 -62.5 125 -175 -125 62.5 -135 -125 -62.5 -135 -125 62.5 -175 -125 62.5 -175 -125 -62.5 -135 -62.5 -125 -135 -125 -62.5 -175 -125 -62.5 -175 -62.5 -125 -135 62.5 -125 -135 -62.5 -125 -175 -62.5 -125 -175 62.5 -125 -135 125 -62.5 -135 62.5 -125 -175 62.5 -125 -175 125 -62.5 -135 125 62.5 -135 125 -62.5 -175 125 -62.5 -175 125 62.5 -135 62.5 125 -135 125 62.5 -175 125 62.5 -175 62.5 125 -135 -62.5 125 -135 62.5 125 -175 62.5 125 -175 -62.5 125 -175 -125 -110 -175 -125 110 -295 -125 110 -295 -125 -110 -175 -110 -125 -175 -125 -110 -295 -125 -110 -295 -110 -125 -175 110 -125 -175 -110 -125 -295 -110 -125 -295 110 -125 -175 125 -110 -175 110 -125 -295 110 -125 -295 125 -110 -175 125 110 -175 125 -110 -295 125 -110 -295 125 110 -175 110 125 -175 125 110 -295 125 110 -295 110 125 -295 -110 125 -295 110 125 -295 125 110 -295 125 -110 -295 110 -125 -295 -110 -125 -295 -125 -110 -295 -125 110 -175 -125 110 -175 -110 125 -295 -110 125 -295 -125 110 -175 -110 125 -175 -125 110 -175 -125 -110 -175 -110 -125 -175 110 -125 -175 125 -110 -175 125 110 -175 110 125 -175 -110 125 -175 110 125 -295 110 125 -295 -110 125 -350 -91.5064 -91.5063 -350 -125 -33.4937 -350 -125 33.4936 -350 -91.5064 91.5064 -350 -33.4937 125 -350 33.4937 125 -350 91.5063 91.5064 -350 125 33.4936 -350 125 -33.4936 -350 91.5064 -91.5063 -350 33.4936 -125 -350 -33.4937 -125 -295 91.5064 -91.5063 -295 33.4936 -125 -350 33.4936 -125 -350 91.5064 -91.5063 -295 125 -33.4936 -295 91.5064 -91.5063 -350 91.5064 -91.5063 -350 125 -33.4936 -295 125 33.4936 -295 125 -33.4936 -350 125 -33.4936 -350 125 33.4936 -295 91.5063 91.5064 -295 125 33.4936 -350 125 33.4936 -350 91.5063 91.5064 -295 33.4937 125 -295 91.5063 91.5064 -350 91.5063 91.5064 -350 33.4937 125 -295 -33.4937 125 -295 33.4937 125 -350 33.4937 125 -350 -33.4937 125 -295 -91.5064 91.5064 -295 -33.4937 125 -350 -33.4937 125 -350 -91.5064 91.5064 -295 -125 33.4936 -295 -91.5064 91.5064 -350 -91.5064 91.5064 -350 -125 33.4936 -295 -125 -33.4937 -295 -125 33.4936 -350 -125 33.4936 -350 -125 -33.4937 -295 -91.5064 -91.5063 -295 -125 -33.4937 -350 -125 -33.4937 -350 -91.5064 -91.5063 -295 -33.4937 -125 -295 -91.5064 -91.5063 -350 -91.5064 -91.5063 -350 -33.4937 -125 -295 33.4936 -125 -295 -33.4937 -125 -350 -33.4937 -125 -350 33.4936 -125 -360 -30 -51.9615 -360 -51.9615 -30 -360 -60 0 -360 -51.9615 30 -360 -30 51.9615 -360 0 60 -360 30 51.9615 -360 51.9615 30 -360 60 0 -360 51.9615 -30 -360 30 -51.9615 -360 0 -60 -350 51.9615 -30 -350 30 -51.9615 -360 30 -51.9615 -360 51.9615 -30 -350 60 0 -350 51.9615 -30 -360 51.9615 -30 -360 60 0 -350 51.9615 30 -350 60 0 -360 60 0 -360 51.9615 30 -350 30 51.9615 -350 51.9615 30 -360 51.9615 30 -360 30 51.9615 -350 0 60 -350 30 51.9615 -360 30 51.9615 -360 0 60 -350 -30 51.9615 -350 0 60 -360 0 60 -360 -30 51.9615 -350 -51.9615 30 -350 -30 51.9615 -360 -30 51.9615 -360 -51.9615 30 -350 -60 0 -350 -51.9615 30 -360 -51.9615 30 -360 -60 0 -350 -51.9615 -30 -350 -60 0 -360 -60 0 -360 -51.9615 -30 -350 -30 -51.9615 -350 -51.9615 -30 -360 -51.9615 -30 -360 -30 -51.9615 -350 0 -60 -350 -30 -51.9615 -360 -30 -51.9615 -360 0 -60 -350 30 -51.9615 -350 0 -60 -360 0 -60 -360 30 -51.9615 145 -70 -80 145 70 -80 145 70 60 145 -70 60 145 70 60 75 70 60 75 -70 60 145 -70 60 145 70 -80 75 70 -80 75 70 60 145 70 60 75 70 -80 145 70 -80 145 -70 -80 75 -70 -80 75 -70 -80 145 -70 -80 145 -70 60 75 -70 60 75 -100 -80 75 100 -80 75 100 80 75 -100 80 -125 100 80 -125 -100 80 75 -100 80 75 100 80 75 100 -80 -125 100 -80 -125 100 80 75 100 80 -125 100 -80 75 100 -80 75 -100 -80 -125 -100 -80 -125 -100 -80 75 -100 -80 75 -100 80 -125 -100 80 145 30 50 145 -30 50 945 -30 50 945 30 50 945 30 -30 145 30 -30 145 30 50 945 30 50 145 30 -30 945 30 -30 945 -30 -30 145 -30 -30 145 -30 -30 945 -30 -30 945 -30 50 145 -30 50 945 -30 50 945 -30 -30 945 30 -30 945 30 50 145 -25 -80 145 25 -80 945 -25 -30 945 -25 70 945 -25 70 945 25 -30 945 25 70 945 25 70 975 -25 -80 975 -25 -80 975 -25 70 975 -25 70 975 25 -80 975 25 -80 975 25 70 975 25 70 145 -25 -30 145 25 -30 - - - - - - - - - - 0 0.382672 0.923884 0 0.923884 0.382672 0 0.923884 0.382672 0 0.382672 0.923884 0 0.923884 0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 0.382672 0 0.923884 -0.382672 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.923884 -0.382672 0 0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.382672 -0.923884 0 -0.923884 -0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 -0.382672 0 -0.923884 0.382672 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.923884 0.382672 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 -0.382672 0.923884 0 -0.923884 0.382672 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.923884 0.382672 0 -0.923884 -0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 -0.382672 0 -0.382672 -0.923884 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.382672 -0.923884 0 0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 0.382672 -0.923884 0 0.923884 -0.382672 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.923884 -0.382672 0 0.923884 0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 0.382672 0 0.382672 0.923884 0 0.923884 0.382672 0 0.923884 0.382672 0 0.382672 0.923884 0 -0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 -0.382672 0.923884 0 -0.923884 -0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 -0.382672 0 -0.382672 -0.923884 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.382672 -0.923884 0 0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 0.382672 -0.923884 0 0.923884 -0.382672 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.923884 -0.382672 0 0.923884 0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 0.382672 0 0.382672 0.923884 0 0.923884 0.382672 0 0.923884 0.382672 0 0.382672 0.923884 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -0.923884 0.382672 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.923884 0.382672 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 -0.382672 0.923884 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.70713 -0.707083 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0.70713 -0.707083 0 0.965932 -0.258797 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.965932 -0.258797 0 0.965932 0.258797 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.965932 0.258797 0 0.707083 0.70713 0 0.965932 0.258797 0 0.965932 0.258797 0 0.707083 0.70713 0 0.258797 0.965932 0 0.707083 0.70713 0 0.707083 0.70713 0 0.258797 0.965932 0 -0.258797 0.965932 0 0.258797 0.965932 0 0.258797 0.965932 0 -0.258797 0.965932 0 -0.70713 0.707083 0 -0.258797 0.965932 0 -0.258797 0.965932 0 -0.70713 0.707083 0 -0.965932 0.258797 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.965932 0.258797 0 -0.965932 -0.258797 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.965932 -0.258797 0 -0.707083 -0.70713 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.707083 -0.70713 0 -0.258797 -0.965932 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.258797 -0.965932 0 0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 0.258797 -0.965932 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.866034 -0.499985 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.866034 -0.499985 0 1 0 0 0.866034 -0.499985 0 0.866034 -0.499985 0 1 0 0 0.866034 0.499985 0 1 0 0 1 0 0 0.866034 0.499985 0 0.499985 0.866034 0 0.866034 0.499985 0 0.866034 0.499985 0 0.499985 0.866034 0 0 1 0 0.499985 0.866034 0 0.499985 0.866034 0 0 1 0 -0.499985 0.866034 0 0 1 0 0 1 0 -0.499985 0.866034 0 -0.866034 0.499985 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.866034 0.499985 0 -1 0 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -1 0 0 -0.866034 -0.499985 0 -1 0 0 -1 0 0 -0.866034 -0.499985 0 -0.499985 -0.866034 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.499985 -0.866034 0 0 -1 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 0 -1 0 0.499985 -0.866034 0 0 -1 0 0 -1 0 0.499985 -0.866034 1 0 0 1 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 -1 0 0 -1 -1 0 0 -1 0 0 0 0 1 -1 0 0 -1 0 0 0 0 1 0 0 -1 1 0 0 0 0 1 1 0 0 0 0 -1 1 0 0 0 0 1 1 0 0 0 1 0 0 -1 0 - - - - - - - - - - - - - - -

0 0 1 1 2 2 3 3

-

4 4 5 5 6 6 7 7

-

8 8 9 9 10 10 11 11

-

12 12 13 13 14 14 15 15

-

16 16 17 17 18 18 19 19

-

20 20 21 21 22 22 23 23

-

24 24 25 25 26 26 27 27

-

28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35

-

36 36 37 37 38 38 39 39

-
- - - -

40 40 41 41 42 42 43 43

-

44 44 45 45 46 46 47 47

-

48 48 49 49 50 50 51 51

-

52 52 53 53 54 54 55 55

-

56 56 57 57 58 58 59 59

-

60 60 61 61 62 62 63 63

-

64 64 65 65 66 66 67 67

-

68 68 69 69 70 70 71 71

-
- - - -

72 72 73 73 74 74 75 75

-

76 76 77 77 78 78 79 79

-

80 80 81 81 82 82 83 83

-

84 84 85 85 86 86 87 87

-

88 88 89 89 90 90 91 91

-

92 92 93 93 94 94 95 95

-

96 96 97 97 98 98 99 99 100 100 101 101 102 102 103 103

-

104 104 105 105 106 106 107 107

-

108 108 109 109 110 110 111 111 112 112 113 113 114 114 115 115

-

116 116 117 117 118 118 119 119

-
- - - -

120 120 121 121 122 122 123 123 124 124 125 125 126 126 127 127 128 128 129 129 130 130 131 131

-

132 132 133 133 134 134 135 135

-

136 136 137 137 138 138 139 139

-

140 140 141 141 142 142 143 143

-

144 144 145 145 146 146 147 147

-

148 148 149 149 150 150 151 151

-

152 152 153 153 154 154 155 155

-

156 156 157 157 158 158 159 159

-

160 160 161 161 162 162 163 163

-

164 164 165 165 166 166 167 167

-

168 168 169 169 170 170 171 171

-

172 172 173 173 174 174 175 175

-

176 176 177 177 178 178 179 179

-
- - - -

180 180 181 181 182 182 183 183 184 184 185 185 186 186 187 187 188 188 189 189 190 190 191 191

-

192 192 193 193 194 194 195 195

-

196 196 197 197 198 198 199 199

-

200 200 201 201 202 202 203 203

-

204 204 205 205 206 206 207 207

-

208 208 209 209 210 210 211 211

-

212 212 213 213 214 214 215 215

-

216 216 217 217 218 218 219 219

-

220 220 221 221 222 222 223 223

-

224 224 225 225 226 226 227 227

-

228 228 229 229 230 230 231 231

-

232 232 233 233 234 234 235 235

-

236 236 237 237 238 238 239 239

-
- - - -

240 240 241 241 242 242 243 243

-

244 244 245 245 246 246 247 247

-

248 248 249 249 250 250 251 251

-

252 252 253 253 254 254 255 255

-

256 256 257 257 258 258 259 259

-
- - - -

260 260 261 261 262 262 263 263

-

264 264 265 265 266 266 267 267

-

268 268 269 269 270 270 271 271

-

272 272 273 273 274 274 275 275

-

276 276 277 277 278 278 279 279

-
- - - -

280 280 281 281 282 282 283 283

-

284 284 285 285 286 286 287 287

-

288 288 289 289 290 290 291 291

-

292 292 293 293 294 294 295 295

-

296 296 297 297 298 298 299 299

-
- - - -

305 316 307 316 315 316 313 316

-

317 316 305 316 313 316 301 316

-
- - - -

316 317 300 317 309 317 302 317

-

302 317 309 317 311 317 304 317

-
- - - -

312 312 308 308 300 300 301 301

-

315 315 311 311 309 309 313 313

-

307 307 304 304 310 310 314 314

-

305 305 302 302 303 303 306 306

-
-
- - - CAT3DBagRep - - -
- - - - 75 -50 -28.75 75 50 -28.75 75 50 61.25 75 -50 61.25 -75 -50 -28.75 75 -50 -28.75 75 -50 61.25 -75 -50 61.25 -75 50 61.25 -75 -50 61.25 75 -50 61.25 75 50 61.25 75 50 -28.75 -75 50 -28.75 -75 50 61.25 75 50 61.25 -75 50 -28.75 75 50 -28.75 75 -50 -28.75 -75 -50 -28.75 -75 50 -28.75 -75 -50 -28.75 -75 -50 61.25 -75 50 61.25 - - - - - - - - - - 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 - - - - - - - - - - - - - - -

0 0 1 1 2 2 3 3

-

4 4 5 5 6 6 7 7

-

8 8 9 9 10 10 11 11

-

12 12 13 13 14 14 15 15

-

16 16 17 17 18 18 19 19

-

20 20 21 21 22 22 23 23

-
-
- - - CAT3DBagRep - - -
- - - - -125 62.5 125 -125 125 62.5 -135 125 62.5 -135 62.5 125 -125 125 62.5 -125 125 -62.5 -135 125 -62.5 -135 125 62.5 -125 125 -62.5 -125 62.5 -125 -135 62.5 -125 -135 125 -62.5 -125 62.5 -125 -125 -62.5 -125 -135 -62.5 -125 -135 62.5 -125 -125 -62.5 -125 -125 -125 -62.5 -135 -125 -62.5 -135 -62.5 -125 -125 -125 -62.5 -125 -125 62.5 -135 -125 62.5 -135 -125 -62.5 -125 -125 62.5 -125 -62.5 125 -135 -62.5 125 -135 -125 62.5 -125 -62.5 125 -125 -125 62.5 -125 -125 -62.5 -125 -62.5 -125 -125 62.5 -125 -125 125 -62.5 -125 125 62.5 -125 62.5 125 -125 -62.5 125 -125 62.5 125 -135 62.5 125 -135 -62.5 125 -135 -125 62.5 -135 -62.5 125 -175 -62.5 125 -175 -125 62.5 -135 -125 -62.5 -135 -125 62.5 -175 -125 62.5 -175 -125 -62.5 -135 -62.5 -125 -135 -125 -62.5 -175 -125 -62.5 -175 -62.5 -125 -135 62.5 -125 -135 -62.5 -125 -175 -62.5 -125 -175 62.5 -125 -135 125 -62.5 -135 62.5 -125 -175 62.5 -125 -175 125 -62.5 -135 125 62.5 -135 125 -62.5 -175 125 -62.5 -175 125 62.5 -135 62.5 125 -135 125 62.5 -175 125 62.5 -175 62.5 125 -135 -62.5 125 -135 62.5 125 -175 62.5 125 -175 -62.5 125 -175 -125 -110 -175 -125 110 -295 -125 110 -295 -125 -110 -175 -110 -125 -175 -125 -110 -295 -125 -110 -295 -110 -125 -175 110 -125 -175 -110 -125 -295 -110 -125 -295 110 -125 -175 125 -110 -175 110 -125 -295 110 -125 -295 125 -110 -175 125 110 -175 125 -110 -295 125 -110 -295 125 110 -175 110 125 -175 125 110 -295 125 110 -295 110 125 -295 -110 125 -295 110 125 -295 125 110 -295 125 -110 -295 110 -125 -295 -110 -125 -295 -125 -110 -295 -125 110 -175 -125 110 -175 -110 125 -295 -110 125 -295 -125 110 -175 -110 125 -175 -125 110 -175 -125 -110 -175 -110 -125 -175 110 -125 -175 125 -110 -175 125 110 -175 110 125 -175 -110 125 -175 110 125 -295 110 125 -295 -110 125 -350 -91.5064 -91.5063 -350 -125 -33.4937 -350 -125 33.4936 -350 -91.5064 91.5064 -350 -33.4937 125 -350 33.4937 125 -350 91.5063 91.5064 -350 125 33.4936 -350 125 -33.4936 -350 91.5064 -91.5063 -350 33.4936 -125 -350 -33.4937 -125 -295 91.5064 -91.5063 -295 33.4936 -125 -350 33.4936 -125 -350 91.5064 -91.5063 -295 125 -33.4936 -295 91.5064 -91.5063 -350 91.5064 -91.5063 -350 125 -33.4936 -295 125 33.4936 -295 125 -33.4936 -350 125 -33.4936 -350 125 33.4936 -295 91.5063 91.5064 -295 125 33.4936 -350 125 33.4936 -350 91.5063 91.5064 -295 33.4937 125 -295 91.5063 91.5064 -350 91.5063 91.5064 -350 33.4937 125 -295 -33.4937 125 -295 33.4937 125 -350 33.4937 125 -350 -33.4937 125 -295 -91.5064 91.5064 -295 -33.4937 125 -350 -33.4937 125 -350 -91.5064 91.5064 -295 -125 33.4936 -295 -91.5064 91.5064 -350 -91.5064 91.5064 -350 -125 33.4936 -295 -125 -33.4937 -295 -125 33.4936 -350 -125 33.4936 -350 -125 -33.4937 -295 -91.5064 -91.5063 -295 -125 -33.4937 -350 -125 -33.4937 -350 -91.5064 -91.5063 -295 -33.4937 -125 -295 -91.5064 -91.5063 -350 -91.5064 -91.5063 -350 -33.4937 -125 -295 33.4936 -125 -295 -33.4937 -125 -350 -33.4937 -125 -350 33.4936 -125 -360 -30 -51.9615 -360 -51.9615 -30 -360 -60 0 -360 -51.9615 30 -360 -30 51.9615 -360 0 60 -360 30 51.9615 -360 51.9615 30 -360 60 0 -360 51.9615 -30 -360 30 -51.9615 -360 0 -60 -350 51.9615 -30 -350 30 -51.9615 -360 30 -51.9615 -360 51.9615 -30 -350 60 0 -350 51.9615 -30 -360 51.9615 -30 -360 60 0 -350 51.9615 30 -350 60 0 -360 60 0 -360 51.9615 30 -350 30 51.9615 -350 51.9615 30 -360 51.9615 30 -360 30 51.9615 -350 0 60 -350 30 51.9615 -360 30 51.9615 -360 0 60 -350 -30 51.9615 -350 0 60 -360 0 60 -360 -30 51.9615 -350 -51.9615 30 -350 -30 51.9615 -360 -30 51.9615 -360 -51.9615 30 -350 -60 0 -350 -51.9615 30 -360 -51.9615 30 -360 -60 0 -350 -51.9615 -30 -350 -60 0 -360 -60 0 -360 -51.9615 -30 -350 -30 -51.9615 -350 -51.9615 -30 -360 -51.9615 -30 -360 -30 -51.9615 -350 0 -60 -350 -30 -51.9615 -360 -30 -51.9615 -360 0 -60 -350 30 -51.9615 -350 0 -60 -360 0 -60 -360 30 -51.9615 145 -70 -80 145 70 -80 145 70 60 145 -70 60 145 70 60 75 70 60 75 -70 60 145 -70 60 145 70 -80 75 70 -80 75 70 60 145 70 60 75 70 -80 145 70 -80 145 -70 -80 75 -70 -80 75 -70 -80 145 -70 -80 145 -70 60 75 -70 60 75 -100 -80 75 100 -80 75 100 80 75 -100 80 -125 100 80 -125 -100 80 75 -100 80 75 100 80 75 100 -80 -125 100 -80 -125 100 80 75 100 80 -125 100 -80 75 100 -80 75 -100 -80 -125 -100 -80 -125 -100 -80 75 -100 -80 75 -100 80 -125 -100 80 145 30 50 145 -30 50 945 -30 50 945 30 50 945 30 -30 145 30 -30 145 30 50 945 30 50 145 30 -30 945 30 -30 945 -30 -30 145 -30 -30 145 -30 -30 945 -30 -30 945 -30 50 145 -30 50 945 -30 50 945 -30 -30 945 30 -30 945 30 50 145 -25 -80 145 25 -80 945 -25 -30 945 -25 70 945 -25 70 945 25 -30 945 25 70 945 25 70 975 -25 -80 975 -25 -80 975 -25 70 975 -25 70 975 25 -80 975 25 -80 975 25 70 975 25 70 145 -25 -30 145 25 -30 - - - - - - - - - - 0 0.382672 0.923884 0 0.923884 0.382672 0 0.923884 0.382672 0 0.382672 0.923884 0 0.923884 0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 0.382672 0 0.923884 -0.382672 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.923884 -0.382672 0 0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.382672 -0.923884 0 -0.923884 -0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 -0.382672 0 -0.923884 0.382672 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.923884 0.382672 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 -0.382672 0.923884 0 -0.923884 0.382672 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.923884 0.382672 0 -0.923884 -0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 -0.382672 0 -0.382672 -0.923884 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.382672 -0.923884 0 0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 0.382672 -0.923884 0 0.923884 -0.382672 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.923884 -0.382672 0 0.923884 0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 0.382672 0 0.382672 0.923884 0 0.923884 0.382672 0 0.923884 0.382672 0 0.382672 0.923884 0 -0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 -0.382672 0.923884 0 -0.923884 -0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 -0.382672 0 -0.382672 -0.923884 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.382672 -0.923884 0 0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 0.382672 -0.923884 0 0.923884 -0.382672 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.923884 -0.382672 0 0.923884 0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 0.382672 0 0.382672 0.923884 0 0.923884 0.382672 0 0.923884 0.382672 0 0.382672 0.923884 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -0.923884 0.382672 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.923884 0.382672 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 -0.382672 0.923884 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.70713 -0.707083 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0.70713 -0.707083 0 0.965932 -0.258797 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.965932 -0.258797 0 0.965932 0.258797 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.965932 0.258797 0 0.707083 0.70713 0 0.965932 0.258797 0 0.965932 0.258797 0 0.707083 0.70713 0 0.258797 0.965932 0 0.707083 0.70713 0 0.707083 0.70713 0 0.258797 0.965932 0 -0.258797 0.965932 0 0.258797 0.965932 0 0.258797 0.965932 0 -0.258797 0.965932 0 -0.70713 0.707083 0 -0.258797 0.965932 0 -0.258797 0.965932 0 -0.70713 0.707083 0 -0.965932 0.258797 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.965932 0.258797 0 -0.965932 -0.258797 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.965932 -0.258797 0 -0.707083 -0.70713 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.707083 -0.70713 0 -0.258797 -0.965932 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.258797 -0.965932 0 0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 0.258797 -0.965932 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.866034 -0.499985 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.866034 -0.499985 0 1 0 0 0.866034 -0.499985 0 0.866034 -0.499985 0 1 0 0 0.866034 0.499985 0 1 0 0 1 0 0 0.866034 0.499985 0 0.499985 0.866034 0 0.866034 0.499985 0 0.866034 0.499985 0 0.499985 0.866034 0 0 1 0 0.499985 0.866034 0 0.499985 0.866034 0 0 1 0 -0.499985 0.866034 0 0 1 0 0 1 0 -0.499985 0.866034 0 -0.866034 0.499985 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.866034 0.499985 0 -1 0 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -1 0 0 -0.866034 -0.499985 0 -1 0 0 -1 0 0 -0.866034 -0.499985 0 -0.499985 -0.866034 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.499985 -0.866034 0 0 -1 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 0 -1 0 0.499985 -0.866034 0 0 -1 0 0 -1 0 0.499985 -0.866034 1 0 0 1 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 -1 0 0 -1 -1 0 0 -1 0 0 0 0 1 -1 0 0 -1 0 0 0 0 1 0 0 -1 1 0 0 0 0 1 1 0 0 0 0 -1 1 0 0 0 0 1 1 0 0 0 1 0 0 -1 0 - - - - - - - - - - - - - - -

0 0 1 1 2 2 3 3

-

4 4 5 5 6 6 7 7

-

8 8 9 9 10 10 11 11

-

12 12 13 13 14 14 15 15

-

16 16 17 17 18 18 19 19

-

20 20 21 21 22 22 23 23

-

24 24 25 25 26 26 27 27

-

28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35

-

36 36 37 37 38 38 39 39

-
- - - -

40 40 41 41 42 42 43 43

-

44 44 45 45 46 46 47 47

-

48 48 49 49 50 50 51 51

-

52 52 53 53 54 54 55 55

-

56 56 57 57 58 58 59 59

-

60 60 61 61 62 62 63 63

-

64 64 65 65 66 66 67 67

-

68 68 69 69 70 70 71 71

-
- - - -

72 72 73 73 74 74 75 75

-

76 76 77 77 78 78 79 79

-

80 80 81 81 82 82 83 83

-

84 84 85 85 86 86 87 87

-

88 88 89 89 90 90 91 91

-

92 92 93 93 94 94 95 95

-

96 96 97 97 98 98 99 99 100 100 101 101 102 102 103 103

-

104 104 105 105 106 106 107 107

-

108 108 109 109 110 110 111 111 112 112 113 113 114 114 115 115

-

116 116 117 117 118 118 119 119

-
- - - -

120 120 121 121 122 122 123 123 124 124 125 125 126 126 127 127 128 128 129 129 130 130 131 131

-

132 132 133 133 134 134 135 135

-

136 136 137 137 138 138 139 139

-

140 140 141 141 142 142 143 143

-

144 144 145 145 146 146 147 147

-

148 148 149 149 150 150 151 151

-

152 152 153 153 154 154 155 155

-

156 156 157 157 158 158 159 159

-

160 160 161 161 162 162 163 163

-

164 164 165 165 166 166 167 167

-

168 168 169 169 170 170 171 171

-

172 172 173 173 174 174 175 175

-

176 176 177 177 178 178 179 179

-
- - - -

180 180 181 181 182 182 183 183 184 184 185 185 186 186 187 187 188 188 189 189 190 190 191 191

-

192 192 193 193 194 194 195 195

-

196 196 197 197 198 198 199 199

-

200 200 201 201 202 202 203 203

-

204 204 205 205 206 206 207 207

-

208 208 209 209 210 210 211 211

-

212 212 213 213 214 214 215 215

-

216 216 217 217 218 218 219 219

-

220 220 221 221 222 222 223 223

-

224 224 225 225 226 226 227 227

-

228 228 229 229 230 230 231 231

-

232 232 233 233 234 234 235 235

-

236 236 237 237 238 238 239 239

-
- - - -

240 240 241 241 242 242 243 243

-

244 244 245 245 246 246 247 247

-

248 248 249 249 250 250 251 251

-

252 252 253 253 254 254 255 255

-

256 256 257 257 258 258 259 259

-
- - - -

260 260 261 261 262 262 263 263

-

264 264 265 265 266 266 267 267

-

268 268 269 269 270 270 271 271

-

272 272 273 273 274 274 275 275

-

276 276 277 277 278 278 279 279

-
- - - -

280 280 281 281 282 282 283 283

-

284 284 285 285 286 286 287 287

-

288 288 289 289 290 290 291 291

-

292 292 293 293 294 294 295 295

-

296 296 297 297 298 298 299 299

-
- - - -

305 316 307 316 315 316 313 316

-

317 316 305 316 313 316 301 316

-
- - - -

316 317 300 317 309 317 302 317

-

302 317 309 317 311 317 304 317

-
- - - -

312 312 308 308 300 300 301 301

-

315 315 311 311 309 309 313 313

-

307 307 304 304 310 310 314 314

-

305 305 302 302 303 303 306 306

-
-
- - - CAT3DBagRep - - -
- - - - 75 -50 -28.75 75 50 -28.75 75 50 61.25 75 -50 61.25 -75 -50 -28.75 75 -50 -28.75 75 -50 61.25 -75 -50 61.25 -75 50 61.25 -75 -50 61.25 75 -50 61.25 75 50 61.25 75 50 -28.75 -75 50 -28.75 -75 50 61.25 75 50 61.25 -75 50 -28.75 75 50 -28.75 75 -50 -28.75 -75 -50 -28.75 -75 50 -28.75 -75 -50 -28.75 -75 -50 61.25 -75 50 61.25 - - - - - - - - - - 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 - - - - - - - - - - - - - - -

0 0 1 1 2 2 3 3

-

4 4 5 5 6 6 7 7

-

8 8 9 9 10 10 11 11

-

12 12 13 13 14 14 15 15

-

16 16 17 17 18 18 19 19

-

20 20 21 21 22 22 23 23

-
-
- - - CAT3DBagRep - - -
-
- - - - - - - 0.498039 0.498039 0.498039 1 - - - 0.498039 0.498039 0.498039 1 - - - - - - - - - - - 1 0.376471 0 1 - - - 1 0.376471 0 1 - - - - - - - - - - - 0.298039 0.298039 0.298039 1 - - - 0.298039 0.298039 0.298039 1 - - - - - - - - - - - 1 1 1 1 - - - 1 1 1 1 - - - - - - - - - - - - - - - - - - - - - - - - 0 0 1 - - - - - 1 0 0 - - 0 - 0 - - - - - - 1 0 0 - - 0 - 0 - - - - - - 0 1 0 - - - - - 0 1 0 - - - - - 0 1 0 - - - - - -1 0 0 - - -350 - 350 - - - - - - 1 0 0 - - -172 - 172 - - - - - - -1 0 0 - - -172 - 172 - - - - - - 1 0 0 - - - - - 0 1 0 - - - - - 0 1 0 - - - - - 0 0 1 - - - - - 0 1 0 - - - - - 1 0 0 - - - - - 0 1 0 - - - - - 1 0 0 - - - - - -1 0 0 - - - - - -1 0 0 - - - - - -1 0 0 - - - - - -1 0 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 892 - - - -444.046 -223.999 -289.288 - - - - -444.046 223.999 -289.288 - - - - 0 -1 0 62.614 - - - 0 1 0 32.114 - - - - 1.04075e-010 0 1050 - 0 1 0 90 - - - 1760 0 0.000104825 - - - 0 1 0 30 - - - 0 -1 0 60 - - - 0 1 0 30 - - - - - - - - - - 400 0 7.17802e-006 - 0 1 0 90 - - - - - - -5.24977e-011 0 575 - 0 1 0 4.01364e-005 - - - - - - - - - - -606.997 -60 346.998 - 0 1 0 29.755 - - - - - - - - -674.503 130 34.0037 - 0 1 0 2.886 - - - - - - - - - - - - kinmodel.0/joint_0 - - - - kinmodel.0/pseudojoint_1 - - - - =$B1=340;$B2=675.36;$L2=600.389;$C1=1050;$C2=473;$C3=1212;$C4=400;$C5=699.18;$C6=385;$L3=537.247;DOF(18) - - - - - kinmodel.0/joint_10 - - - - - - - SSSA - - SASS - 1050 - - - - - - SSSA - - - kinmodel.0/pseudojoint_3 - 537.247 - - 699.18 - 385 - - - SSSA - - - kinmodel.0/pseudojoint_2 - 600.389 - - 340 - 675.36 - - - 2.14447 - - 473 - - 400 - 1212 - - - - - - =DOF(20);-SSSA($C7,$C4,$C3) - - - - - kinmodel.0/joint_11 - - - - - SASA - 170 - - - - SSSA - - - kinmodel.0/pseudojoint_2 - 600.389 - - 340 - 675.36 - - 1.09282 - - 575 - - - - - =SASA(170,$T2-1.09282,575) - - - - - kinmodel.0/joint_12 - - - - - - - SASS - 575 - - - - SSSA - - - kinmodel.0/pseudojoint_2 - 600.389 - - 340 - 675.36 - - 1.09282 - - 170 - - - - - - =-SASS(575,$T2-1.09282,170) - - - - - kinmodel.0/joint_13 - - - - - - - SSSA - 385 - - - kinmodel.0/pseudojoint_3 - 537.247 - - 699.18 - - - - - - =-SSSA($C6,DOF(20)+$L3,$C5) - - - - - kinmodel.0/joint_14 - - - - - - kinmodel.0/pseudojoint_3 - 537.247 - - - - - =DOF(20)+$L3 - - - - - kinmodel.0/joint_15 - - - - - - - SSSA - 340 - - - 600.389 - kinmodel.0/pseudojoint_2 - - 675.36 - - - - - - =-SSSA($B1,$L2+DOF(19),$B2) - - - - - kinmodel.0/joint_16 - - - - - - kinmodel.0/pseudojoint_2 - 600.389 - - - - - =DOF(19)+$L2 - - - - - kinmodel.0/joint_3 - - - - - SSSA - - - kinmodel.0/pseudojoint_2 - 600.389 - - 340 - 675.36 - - - - - =$T2=SSSA(DOF(19)+$L2,$B1,$B2) - - - - - kinmodel.0/joint_4 - - - - - - - SSSA - - - kinmodel.0/pseudojoint_3 - 537.247 - - 699.18 - 385 - - - SSSA - - - kinmodel.0/pseudojoint_2 - 600.389 - - 340 - 675.36 - - - - - - =SSSA(DOF(20)+$L3,$C5,$C6)-$T2 - - - - - kinmodel.0/joint_5 - - - - - - - - - - - - - INRANGE - - - - - - SSSA - - - kinmodel.0/pseudojoint_3 - 537.247 - - 699.18 - 385 - - - SSSA - - - kinmodel.0/pseudojoint_2 - 600.389 - - 340 - 675.36 - - - 2.14447 - - - - - - - - - INRANGE - - - - - - SSSA - - - kinmodel.0/pseudojoint_3 - 537.247 - - 699.18 - 385 - - - SSSA - - - kinmodel.0/pseudojoint_2 - 600.389 - - 340 - 675.36 - - - 2.14447 - - - 9 - - - - - SSSA - 473 - 1050 - - SASS - 1050 - - - - - - SSSA - - - kinmodel.0/pseudojoint_3 - 537.247 - - 699.18 - 385 - - - SSSA - - - kinmodel.0/pseudojoint_2 - 600.389 - - 340 - 675.36 - - - 2.14447 - - 473 - - - - - SSSA - 1212 - 400 - - SASS - 1050 - - - - - - SSSA - - - kinmodel.0/pseudojoint_3 - 537.247 - - 699.18 - 385 - - - SSSA - - - kinmodel.0/pseudojoint_2 - 600.389 - - 340 - 675.36 - - - 2.14447 - - 473 - - - - - - - =$A0=SSSA(DOF(20)+$L3,$C5,$C6)-SSSA(DOF(19)+$L2,$B1,$B2)+2.14447;$C7=SASS($C1,$A0,$C2);$SIGN=INRANGE($A0,-PI,PI)-INRANGE($A0,PI,9);-$SIGN*SSSA($C2,$C1,$C7)-SSSA($C3,$C4,$C7) - - - - - kinmodel.0/joint_8 - - - - - - 1 - kinmodel.0/joint_7 - - - - - 1 * DOF(8) - - - - - kinmodel.0/joint_9 - - - - - - kinmodel.0/pseudojoint_6 - - - - - =$B1=340;$B2=675.36;$L2=600.389;$C1=1050;$C2=473;$C3=1212;$C4=400;$C5=699.18;$C6=385;$L3=537.247;-DOF(21) - - - - - - - - - - - - - - atan2 - - - 2 - - - - - a - 2 - - - - - - - - - - - - a - 2 - - - - b - 2 - - - - - c - 2 - - - - - 2 - b - - - 2 - - - - - - b - - - - - - - - - a - 2 - - - - b - 2 - - - - - c - 2 - - - - - 2 - b - - - - - - - - - - - - - - - - - - - - - y - 0 - - - - x - 0 - - - - - - - - - y - - - - x - - - - - - - - - - - y - 0 - - - - x - 0 - - - - - - - - - - - - y - - - - x - - - - - - - - - - - - y - 0 - - - - x - 0 - - - - - - - - - - - y - - - - x - - - - - - - - - - - - - y - 0 - - - - x - 0 - - - - - - - - - - - y - - - - x - - - - - - - - - - - - - - - - - - 2 - - - - - - - a - 2 - - - - b - 2 - - - - - - - - - 2 - a - - b - - - - gamma - - - - - - - - - - - - - - - atan2 - - - a - - - gamma - - - - - b - - - a - - - gamma - - - - - - - - - - - - - - - - - - a - b - - - - a - c - - - - - - - - - - - libkinscenes.kinScene/inst_kinmodel.0 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_0/axis0 - - - 0 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_1/axis0 - - - 0 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_2/axis0 - - - 0 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_3/axis0 - - - 62.6141 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_4/axis0 - - - -12.9465 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_5/axis0 - - - -90.0001 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_6/axis0 - - - 0 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_7/axis0 - - - 0 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_8/axis0 - - - 0 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_9/axis0 - - - -0 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_10/axis0 - - - -92.1132 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_11/axis0 - - - 4.33092e-005 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_12/axis0 - - - -405 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_13/axis0 - - - -33.1121 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_14/axis0 - - - 537.247 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_15/axis0 - - - -30.1876 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_16/axis0 - - - 600.389 - - - libkinscenes.kinScene/inst_kinmodel.0/pseudojoint_1/axis0 - - - 0 - - - libkinscenes.kinScene/inst_kinmodel.0/pseudojoint_2/axis0 - - - 0 - - - libkinscenes.kinScene/inst_kinmodel.0/pseudojoint_3/axis0 - - - 0 - - - libkinscenes.kinScene/inst_kinmodel.0/pseudojoint_6/axis0 - - - 0 - - - - - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0 - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_4_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_4_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_5_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_5_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_5_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_5_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_5_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_5_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_5_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_5_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_5_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_5_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_5_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_5_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_6_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_6_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_6_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_6_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_6_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_6_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_6_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_6_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_7_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_7_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_7_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_7_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_7_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_7_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_8_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_8_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_8_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_8_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_9_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_9_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_10_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_10_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_11_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_11_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_11_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_11_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_12_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_12_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_13_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_13_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_13_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_13_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_14_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_14_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_15_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_15_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_15_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_15_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_16_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_16_axis0_value - - - - -
diff --git a/collada_urdf/test/kr150.dae b/collada_urdf/test/kr150.dae deleted file mode 100644 index 0f5bfd0..0000000 --- a/collada_urdf/test/kr150.dae +++ /dev/null @@ -1,13484 +0,0 @@ - - - - - CPFCatiaPlugin - - 2009-02-17T14:20:33Z - 2009-02-17T14:20:33Z - - Z_UP - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 0 0 0 0 1 0 0 0 0 1 865 0 0 0 1 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -865 -0 0 -0 1 - 1 0 0 0 0 1 0 0 0 0 1 865 0 0 0 1 - 0 0 -1 0 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -865 -0 0 -0 1 - 1 0 0 0 0 1 0 0 0 0 1 865 0 0 0 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 0 -4.37114e-008 410 0 1 0 0 4.37114e-008 0 1 865 0 0 0 1 - 1 -0 4.37114e-008 -410 -0 1 -0 0 -4.37114e-008 -0 1 -865 -0 0 -0 1 - 1 0 0 0 0 1 0 0 0 0 1 865 0 0 0 1 - 0 0 -1 0 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -865 -0 0 -0 1 - 1 0 -4.37114e-008 410 0 1 0 0 4.37114e-008 0 1 865 0 0 0 1 - 0 1 0 0 - 0 1 0 90 - 1 -0 4.37114e-008 -410 -0 1 -0 0 -4.37114e-008 -0 1 -865 -0 0 -0 1 - 1 0 -4.37114e-008 410 0 1 0 0 4.37114e-008 0 1 865 0 0 0 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 0 -6.21725e-015 410 0 1 0 0 6.21725e-015 0 1 1865 0 0 0 1 - 1 -0 6.21725e-015 -410 -0 1 -0 0 -6.21725e-015 -0 1 -1865 -0 0 -0 1 - 1 0 0 0 0 1 0 0 0 0 1 865 0 0 0 1 - 0 0 -1 0 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -865 -0 0 -0 1 - 1 0 -4.37114e-008 410 0 1 0 0 4.37114e-008 0 1 865 0 0 0 1 - 0 1 0 0 - 0 1 0 90 - 1 -0 4.37114e-008 -410 -0 1 -0 0 -4.37114e-008 -0 1 -865 -0 0 -0 1 - 1 0 -4.37114e-008 410 0 1 0 0 4.37114e-008 0 1 1865 0 0 0 1 - 0 1 0 0 - 0 1 0 -90 - 1 -0 4.37114e-008 -410 -0 1 -0 0 -4.37114e-008 -0 1 -1865 -0 0 -0 1 - 1 0 -6.21725e-015 410 0 1 0 0 6.21725e-015 0 1 1865 0 0 0 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 0 -6.21725e-015 1084.5 0 1 0 0 6.21725e-015 0 1 1910 0 0 0 1 - 1 -0 6.21725e-015 -1084.5 -0 1 -0 0 -6.21725e-015 -0 1 -1910 -0 0 -0 1 - 1 0 0 0 0 1 0 0 0 0 1 865 0 0 0 1 - 0 0 -1 0 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -865 -0 0 -0 1 - 1 0 -4.37114e-008 410 0 1 0 0 4.37114e-008 0 1 865 0 0 0 1 - 0 1 0 0 - 0 1 0 90 - 1 -0 4.37114e-008 -410 -0 1 -0 0 -4.37114e-008 -0 1 -865 -0 0 -0 1 - 1 0 -4.37114e-008 410 0 1 0 0 4.37114e-008 0 1 1865 0 0 0 1 - 0 1 0 0 - 0 1 0 -90 - 1 -0 4.37114e-008 -410 -0 1 -0 0 -4.37114e-008 -0 1 -1865 -0 0 -0 1 - 1 0 -3.55271e-015 1084.5 0 1 0 0 3.55271e-015 0 1 1910 0 0 0 1 - -1 0 0 0 - 1 -0 3.55271e-015 -1084.5 -0 1 -0 0 -3.55271e-015 -0 1 -1910 -0 0 -0 1 - 1 0 -6.21725e-015 1084.5 0 1 0 0 6.21725e-015 0 1 1910 0 0 0 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 0 -6.21725e-015 1410 0 1 0 0 6.21725e-015 0 1 1910 0 0 0 1 - 1 -0 6.21725e-015 -1410 -0 1 -0 0 -6.21725e-015 -0 1 -1910 -0 0 -0 1 - 1 0 0 0 0 1 0 0 0 0 1 865 0 0 0 1 - 0 0 -1 0 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -865 -0 0 -0 1 - 1 0 -4.37114e-008 410 0 1 0 0 4.37114e-008 0 1 865 0 0 0 1 - 0 1 0 0 - 0 1 0 90 - 1 -0 4.37114e-008 -410 -0 1 -0 0 -4.37114e-008 -0 1 -865 -0 0 -0 1 - 1 0 -4.37114e-008 410 0 1 0 0 4.37114e-008 0 1 1865 0 0 0 1 - 0 1 0 0 - 0 1 0 -90 - 1 -0 4.37114e-008 -410 -0 1 -0 0 -4.37114e-008 -0 1 -1865 -0 0 -0 1 - 1 0 -3.55271e-015 1084.5 0 1 0 0 3.55271e-015 0 1 1910 0 0 0 1 - -1 0 0 0 - 1 -0 3.55271e-015 -1084.5 -0 1 -0 0 -3.55271e-015 -0 1 -1910 -0 0 -0 1 - 1 0 -3.55271e-015 1410 0 1 0 0 3.55271e-015 0 1 1910 0 0 0 1 - 0 1 0 0 - 1 -0 3.55271e-015 -1410 -0 1 -0 0 -3.55271e-015 -0 1 -1910 -0 0 -0 1 - 1 0 -6.21725e-015 1410 0 1 0 0 6.21725e-015 0 1 1910 0 0 0 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 0 -6.21725e-015 1410 0 1 0 0 6.21725e-015 0 1 1910 0 0 0 1 - 1 -0 6.21725e-015 -1410 -0 1 -0 0 -6.21725e-015 -0 1 -1910 -0 0 -0 1 - 1 0 0 0 0 1 0 0 0 0 1 865 0 0 0 1 - 0 0 -1 0 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -865 -0 0 -0 1 - 1 0 -4.37114e-008 410 0 1 0 0 4.37114e-008 0 1 865 0 0 0 1 - 0 1 0 0 - 0 1 0 90 - 1 -0 4.37114e-008 -410 -0 1 -0 0 -4.37114e-008 -0 1 -865 -0 0 -0 1 - 1 0 -4.37114e-008 410 0 1 0 0 4.37114e-008 0 1 1865 0 0 0 1 - 0 1 0 0 - 0 1 0 -90 - 1 -0 4.37114e-008 -410 -0 1 -0 0 -4.37114e-008 -0 1 -1865 -0 0 -0 1 - 1 0 -3.55271e-015 1084.5 0 1 0 0 3.55271e-015 0 1 1910 0 0 0 1 - -1 0 0 0 - 1 -0 3.55271e-015 -1084.5 -0 1 -0 0 -3.55271e-015 -0 1 -1910 -0 0 -0 1 - 1 0 -3.55271e-015 1410 0 1 0 0 3.55271e-015 0 1 1910 0 0 0 1 - 0 1 0 0 - 1 -0 3.55271e-015 -1410 -0 1 -0 0 -3.55271e-015 -0 1 -1910 -0 0 -0 1 - 1 0 -3.55271e-015 1410 0 1 0 0 3.55271e-015 0 1 1910 0 0 0 1 - -1 0 0 0 - 1 -0 3.55271e-015 -1410 -0 1 -0 0 -3.55271e-015 -0 1 -1910 -0 0 -0 1 - 1 0 -6.21725e-015 1410 0 1 0 0 6.21725e-015 0 1 1910 0 0 0 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 0 -6.21725e-015 410 0 1 0 0 6.21725e-015 0 1 1865 0 0 0 1 - 1 -0 6.21725e-015 -410 -0 1 -0 0 -6.21725e-015 -0 1 -1865 -0 0 -0 1 - 1 0 0 0 0 1 0 0 0 0 1 865 0 0 0 1 - 0 0 -1 0 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -865 -0 0 -0 1 - 1 0 -4.37114e-008 410 0 1 0 0 4.37114e-008 0 1 865 0 0 0 1 - 0 1 0 0 - 0 1 0 90 - 1 -0 4.37114e-008 -410 -0 1 -0 0 -4.37114e-008 -0 1 -865 -0 0 -0 1 - 1 0 -4.37114e-008 410 0 1 0 0 4.37114e-008 0 1 1865 0 0 0 1 - 0 1 0 0 - 0 1 0 -90 - 1 -0 4.37114e-008 -410 -0 1 -0 0 -4.37114e-008 -0 1 -1865 -0 0 -0 1 - 1 0 -3.55271e-015 410 0 1 0 0 3.55271e-015 0 1 1865 0 0 0 1 - 1 0 0 - 1 -0 3.55271e-015 -410 -0 1 -0 0 -3.55271e-015 -0 1 -1865 -0 0 -0 1 - 1 0 -6.21725e-015 410 0 1 0 0 6.21725e-015 0 1 1865 0 0 0 1 - - - - - - - - - - 0.975042 0 0.222022 -420 0 1 0 -225 -0.222022 0 0.975042 769 0 0 0 1 - 0.975042 -0 -0.222022 580.253 -0 1 -0 225 0.222022 -0 0.975042 -656.558 -0 0 -0 1 - 1 0 0 0 0 1 0 0 0 0 1 865 0 0 0 1 - 0 0 -1 0 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -865 -0 0 -0 1 - 0.975042 0 0.222022 -420 0 1 0 -225 -0.222022 0 0.975042 769 0 0 0 1 - 0 1 0 0 - 0 1 0 0.0072643 - 0.975042 -0 -0.222022 580.253 -0 1 -0 225 0.222022 -0 0.975042 -656.558 -0 0 -0 1 - 0.975042 0 0.222022 -420 0 1 0 -225 -0.222022 0 0.975042 769 0 0 0 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -0.105001 0 -0.994472 -232.57 0 1 0 -225 0.994472 0 -0.105001 781.396 0 0 0 1 - -0.105001 -0 0.994472 -801.496 0 1 -0 225 -0.994472 0 -0.105001 -149.237 -0 -0 0 1 - 1 0 0 0 0 1 0 0 0 0 1 865 0 0 0 1 - 0 0 -1 0 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -865 -0 0 -0 1 - 0.975042 0 0.222022 -420 0 1 0 -225 -0.222022 0 0.975042 769 0 0 0 1 - 0 1 0 0 - 0 1 0 0.0072643 - 0.975042 -0 -0.222022 580.253 -0 1 -0 225 0.222022 -0 0.975042 -656.558 -0 0 -0 1 - -0.105001 0 -0.994472 -232.57 0 1 0 -225 0.994472 0 -0.105001 781.396 0 0 0 1 - 0 0 1 - -0 -0 -205.91 - -0.105001 -0 0.994472 -801.496 0 1 -0 225 -0.994472 0 -0.105001 -149.237 -0 -0 0 1 - -0.105001 0 -0.994472 -232.57 0 1 0 -225 0.994472 0 -0.105001 781.396 0 0 0 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -577.276 45.7443 292.607 -587.035 38.4789 294.792 -599.097 38.4789 297.492 -608.855 45.7443 299.677 -612.583 57.5 300.512 -608.855 69.2557 299.677 -599.097 76.5211 297.492 -587.035 76.5211 294.792 -577.276 69.2557 292.607 -573.549 57.5 291.773 -568.087 57.5 316.169 -571.815 69.2557 317.003 -581.573 76.5211 319.188 -593.635 76.5211 321.888 -603.394 69.2557 324.073 -607.121 57.5 324.908 -603.394 45.7443 324.073 -593.635 38.4789 321.888 -581.573 38.4789 319.188 -571.815 45.7443 317.003 -573.549 57.5 291.773 -568.087 57.5 316.169 -571.815 45.7443 317.003 -577.276 45.7443 292.607 -577.276 45.7443 292.607 -571.815 45.7443 317.003 -581.573 38.4789 319.188 -587.035 38.4789 294.792 -587.035 38.4789 294.792 -581.573 38.4789 319.188 -593.635 38.4789 321.888 -599.097 38.4789 297.492 -599.097 38.4789 297.492 -593.635 38.4789 321.888 -603.394 45.7443 324.073 -608.855 45.7443 299.677 -608.855 45.7443 299.677 -603.394 45.7443 324.073 -607.121 57.5 324.908 -612.583 57.5 300.512 -612.583 57.5 300.512 -607.121 57.5 324.908 -603.394 69.2557 324.073 -608.855 69.2557 299.677 -608.855 69.2557 299.677 -603.394 69.2557 324.073 -593.635 76.5211 321.888 -599.097 76.5211 297.492 -599.097 76.5211 297.492 -593.635 76.5211 321.888 -581.573 76.5211 319.188 -587.035 76.5211 294.792 -587.035 76.5211 294.792 -581.573 76.5211 319.188 -571.815 69.2557 317.003 -577.276 69.2557 292.607 -577.276 69.2557 292.607 -571.815 69.2557 317.003 -568.087 57.5 316.169 -573.549 57.5 291.773 -557.571 -69.7557 281.925 -567.123 -77.0211 284.887 -578.929 -77.0211 288.548 -588.48 -69.7557 291.51 -592.129 -58 292.641 -588.48 -46.2443 291.51 -578.929 -38.9789 288.548 -567.123 -38.9789 284.887 -557.571 -46.2443 281.925 -553.923 -58 280.794 -546.519 -58 304.673 -550.167 -46.2443 305.804 -559.719 -38.9789 308.765 -571.525 -38.9789 312.426 -581.076 -46.2443 315.388 -584.724 -58 316.519 -581.076 -69.7557 315.388 -571.525 -77.0211 312.426 -559.719 -77.0211 308.765 -550.167 -69.7557 305.804 -553.923 -58 280.794 -546.519 -58 304.673 -550.167 -69.7557 305.804 -557.571 -69.7557 281.925 -557.571 -69.7557 281.925 -550.167 -69.7557 305.804 -559.719 -77.0211 308.765 -567.123 -77.0211 284.887 -567.123 -77.0211 284.887 -559.719 -77.0211 308.765 -571.525 -77.0211 312.426 -578.929 -77.0211 288.548 -578.929 -77.0211 288.548 -571.525 -77.0211 312.426 -581.076 -69.7557 315.388 -588.48 -69.7557 291.51 -588.48 -69.7557 291.51 -581.076 -69.7557 315.388 -584.724 -58 316.519 -592.129 -58 292.641 -592.129 -58 292.641 -584.724 -58 316.519 -581.076 -46.2443 315.388 -588.48 -46.2443 291.51 -588.48 -46.2443 291.51 -581.076 -46.2443 315.388 -571.525 -38.9789 312.426 -578.929 -38.9789 288.548 -578.929 -38.9789 288.548 -571.525 -38.9789 312.426 -559.719 -38.9789 308.765 -567.123 -38.9789 284.887 -567.123 -38.9789 284.887 -559.719 -38.9789 308.765 -550.167 -46.2443 305.804 -557.571 -46.2443 281.925 -557.571 -46.2443 281.925 -550.167 -46.2443 305.804 -546.519 -58 304.673 -553.923 -58 280.794 -612 99.5 326 -612 99.5 390 -545 99.5 405 -485 99.5 405 -485 99.5 311 -545 99.5 311 -545 15.5 311 -485 15.5 311 -485 15.5 405 -545 15.5 405 -612 15.5 390 -612 15.5 326 -545 99.5 311 -545 15.5 311 -612 15.5 326 -612 99.5 326 -612 99.5 326 -612 15.5 326 -612 15.5 390 -612 99.5 390 -612 99.5 390 -612 15.5 390 -545 15.5 405 -545 99.5 405 -545 99.5 405 -545 15.5 405 -485 15.5 405 -485 99.5 405 -485 99.5 405 -485 15.5 405 -485 15.5 311 -485 99.5 311 -485 99.5 311 -485 15.5 311 -545 15.5 311 -545 99.5 311 -589.5 -36.5 318 -589.5 -36.5 398 -525 -36.5 418 -485 -36.5 418 -485 -36.5 298 -525 -36.5 298 -525 -79.5 298 -485 -79.5 298 -485 -79.5 418 -525 -79.5 418 -589.5 -79.5 398 -589.5 -79.5 318 -525 -36.5 298 -525 -79.5 298 -589.5 -79.5 318 -589.5 -36.5 318 -589.5 -36.5 318 -589.5 -79.5 318 -589.5 -79.5 398 -589.5 -36.5 398 -589.5 -36.5 398 -589.5 -79.5 398 -525 -79.5 418 -525 -36.5 418 -525 -36.5 418 -525 -79.5 418 -485 -79.5 418 -485 -36.5 418 -485 -36.5 418 -485 -79.5 418 -485 -79.5 298 -485 -36.5 298 -485 -36.5 298 -485 -79.5 298 -525 -79.5 298 -525 -36.5 298 -395 -130 438 -395 -130 278 -395 130 278 -395 130 438 -485 130 278 -395 130 278 -395 -130 278 -485 -130 278 -485 -130 278 -395 -130 278 -395 -130 438 -485 -130 438 -485 -130 438 -395 -130 438 -395 130 438 -485 130 438 -485 130 438 -395 130 438 -395 130 278 -485 130 278 -485 130 438 -485 130 278 -485 -130 278 -485 -130 438 -265.797 334.714 104 -265.797 334.714 104 -265.797 334.714 104 -165.996 396.498 99 -165.996 396.498 99 -165.996 396.498 99 -118.049 348.552 104 -118.049 348.552 104 -118.049 348.552 104 -118.049 348.552 30 -118.049 348.552 30 -118.049 348.552 30 118.049 348.552 30 118.049 348.552 30 118.049 348.552 30 118.049 348.552 104 118.049 348.552 104 118.049 348.552 104 165.996 396.498 99 165.996 396.498 99 165.996 396.498 99 262.3 333.765 104 262.3 333.765 104 262.3 333.765 104 -265.797 334.714 30 -265.797 334.714 30 -265.797 334.714 30 -165.996 396.498 30 -165.996 396.498 30 -165.996 396.498 30 -39.8106 365.84 104 -39.8106 365.84 104 39.8106 365.84 30 39.8106 365.84 30 165.996 396.498 30 165.996 396.498 30 165.996 396.498 30 262.3 333.765 30 262.3 333.765 30 262.3 333.765 30 -230 325 30 -230 325 104 -212.03 368 104 -212.03 368 104 -137.498 368 104 -137.498 368 104 -39.8106 365.84 30 39.8106 365.84 104 137.497 368 104 137.497 368 104 212.029 368 104 212.029 368 104 223.446 360.932 30 223.446 360.932 104 230 325 30 230 325 104 -172.624 325 493 -172.624 325 493 -172.624 -325 104 -172.624 -325 104 39.8106 -365.84 493 39.8106 -365.84 493 39.8106 365.84 104 39.8106 365.84 104 239.851 -279.098 104 239.851 -279.098 104 239.851 279.098 493 239.851 279.098 493 358.714 -82.1484 493 358.714 -82.1484 493 358.714 82.1484 104 358.714 82.1484 104 -395 -150 104 -395 -150 104 -395 -150 104 -395 150 493 -395 150 493 -395 150 493 -370.047 -150 493 -370.047 -150 493 -370.047 150 104 -370.047 150 104 -118.049 -348.552 493 -118.049 -348.552 493 336.042 -150 104 336.042 -150 104 336.042 150 493 336.042 150 493 -260.669 -259.761 493 -260.669 -259.761 493 -260.669 259.761 104 -260.669 259.761 104 -118.049 348.552 104 -118.049 348.552 104 -39.8106 -365.84 104 -39.8106 -365.84 104 -39.8106 365.84 493 -39.8106 365.84 493 118.049 -348.552 104 118.049 -348.552 104 118.049 348.552 493 118.049 348.552 493 172.624 -325 493 172.624 -325 493 172.624 325 104 172.624 325 104 294.843 -220.208 493 294.843 -220.208 493 294.843 220.208 104 294.843 220.208 104 368 0 104 368 0 104 368 0 493 368 0 493 -395 -150 493 -395 -150 493 -395 150 104 -395 150 104 -370.047 -150 104 -370.047 150 493 -260.669 -259.761 104 -260.669 259.761 493 -172.624 325 104 -172.624 -325 493 -118.049 -348.552 104 -118.049 348.552 493 -39.8106 -365.84 493 -39.8106 365.84 104 39.8106 -365.84 104 39.8106 365.84 493 118.049 -348.552 493 118.049 348.552 104 172.624 -325 104 172.624 325 493 239.851 -279.098 493 239.851 279.098 104 294.843 -220.208 104 294.843 220.208 493 336.042 -150 493 336.042 150 104 358.714 -82.1484 104 358.714 82.1484 493 -265.797 -334.714 104 -265.797 -334.714 104 -265.797 -334.714 104 -165.996 -396.498 99 -165.996 -396.498 99 -165.996 -396.498 99 -118.049 -348.552 104 -118.049 -348.552 104 -118.049 -348.552 104 -118.049 -348.552 30 -118.049 -348.552 30 -118.049 -348.552 30 118.049 -348.552 30 118.049 -348.552 30 118.049 -348.552 30 118.049 -348.552 104 118.049 -348.552 104 118.049 -348.552 104 165.996 -396.498 99 165.996 -396.498 99 165.996 -396.498 99 262.3 -333.765 104 262.3 -333.765 104 262.3 -333.765 104 -265.797 -334.714 30 -265.797 -334.714 30 -265.797 -334.714 30 -165.996 -396.498 30 -165.996 -396.498 30 -165.996 -396.498 30 -39.8106 -365.84 30 -39.8106 -365.84 30 39.8106 -365.84 104 39.8106 -365.84 104 165.996 -396.498 30 165.996 -396.498 30 165.996 -396.498 30 262.3 -333.765 30 262.3 -333.765 30 262.3 -333.765 30 -230 -325 30 -230 -325 104 -212.029 -368 104 -212.029 -368 104 -137.497 -368 104 -137.497 -368 104 -39.8106 -365.84 104 39.8106 -365.84 30 137.497 -368 104 137.497 -368 104 212.029 -368 104 212.029 -368 104 223.446 -360.932 30 223.446 -360.932 104 230 -325 30 230 -325 104 -405 83.1436 30 -405 83.1436 59.3429 -405 -120.841 30 -405 -120.841 30 -405 -120.841 30 -405 -120.841 59.3429 -405 -120.841 59.3429 -405 -120.841 59.3429 -405 -83.1435 30 -405 -83.1435 59.3429 -405 120.841 30 -405 120.841 30 -405 120.841 30 -405 120.841 59.3429 -405 120.841 59.3429 358.714 82.1484 30 358.714 82.1484 30 358.714 82.1484 30 358.714 82.1484 30 -475 -64.3871 30 -475 -64.3871 30 -475 64.3871 30 -475 64.3871 30 -475 64.3871 47 -475 64.3871 47 -475 -64.3871 47 -475 -64.3871 47 -421.042 -150 30 -421.042 -150 56.5143 -421.042 150 30 -421.042 150 56.5143 -405 83.1436 30 -405 83.1436 59.3429 -405 -83.1435 30 -405 -83.1435 59.3429 347.378 -116.074 30 347.378 -116.074 30 347.378 -116.074 104 347.378 -116.074 104 347.378 116.074 30 347.378 116.074 30 347.378 116.074 104 347.378 116.074 104 358.714 -82.1484 30 358.714 -82.1484 30 358.714 -82.1484 104 358.714 -82.1484 104 358.714 82.1484 30 358.714 82.1484 30 358.714 82.1484 104 358.714 82.1484 104 366.042 -150 30 366.042 -150 104 366.042 150 30 366.042 150 104 368 -79.6602 104 368 -79.6602 104 368 79.6602 104 368 79.6602 104 425 -64.3871 30 425 -64.3871 30 425 -64.3871 94 425 -64.3871 94 425 -64.3871 94 425 64.3871 30 425 64.3871 30 425 64.3871 94 425 64.3871 94 425 64.3871 94 -395 -150 104 -395 -150 61.1061 -395 150 61.1061 -395 150 104 283.953 -313.457 0 283.953 -233.219 0 345.969 -233.219 0 345.969 -243.449 0 316.273 -283.146 0 -336.203 -233.219 0 -367.211 -233.219 0 -367.211 -174.648 0 -345.485 -174.648 0 -336.203 -183.963 0 316.273 283.146 0 345.969 243.449 0 345.969 235.344 0 283.953 235.344 0 283.953 313.457 0 -271.938 -328.542 30 -265.797 -334.714 30 -240.93 -350.109 30 -240.93 -291.789 30 -271.938 -291.789 30 224.188 -291.789 30 224.188 -350.359 30 238.567 -350.359 30 262.3 -333.765 30 307.057 -291.789 30 -367.211 -232.783 0 -398.219 -201.618 0 -398.219 -174.648 0 -367.211 -174.648 0 407.956 147.488 0 345.969 147.488 0 345.969 243.449 0 360.933 223.445 0 -336.203 183.963 0 -336.203 264.629 0 -274.188 264.629 0 -274.188 246.195 0 -274.188 -326.28 0 -336.203 -263.949 0 -336.203 -183.963 0 -274.188 -246.195 0 -395.969 203.879 30 -395.969 176.773 30 -364.961 176.773 30 -364.961 235.045 30 -285.001 235.344 30 -364.961 235.344 30 -364.961 176.773 30 -343.367 176.773 30 100.156 352.484 30 100.156 425 30 -119.957 425 30 -237.092 352.484 30 -333.953 -266.21 30 -271.938 -328.542 30 -271.938 -248.453 30 -333.953 -186.22 30 -364.663 235.344 30 -285.001 235.344 30 -271.938 248.453 30 -271.938 328.542 30 -336.203 -233.219 0 -336.203 -263.949 0 -366.778 -233.219 0 -274.188 326.28 0 -274.188 264.629 0 -335.527 264.629 0 -260.669 -259.761 30 -271.938 -248.453 30 -271.938 -291.789 30 -271.938 -291.789 30 -217.444 -291.789 30 -260.669 -259.761 30 353.622 -233.219 30 282.693 -233.219 30 239.851 -279.098 30 286.203 -291.789 30 307.057 -291.789 30 316.273 -283.146 30 239.851 -279.098 30 224.188 -289.793 30 224.188 -291.789 30 239.851 -279.098 30 224.188 -291.789 30 286.203 -291.789 30 -333.953 -266.21 30 -333.953 -203.934 30 -395.915 -203.934 30 -475 124.445 0 -475 124.445 0 -475 124.445 30 -475 124.445 30 -475 -124.445 0 -475 -124.445 0 -475 -124.445 30 -475 -124.445 30 -398.219 -201.618 0 -398.219 201.618 0 -395.969 -203.879 30 -395.969 203.879 30 -395 150 0 -395 150 0 -395 150 30 -395 150 30 -395 -150 0 -395 -150 0 -395 -150 30 -395 -150 30 -370.047 150 0 -370.047 150 30 -370.047 -150 0 -370.047 -150 30 -265.797 334.714 0 -265.797 334.714 30 -265.797 -334.714 0 -265.797 -334.714 30 -260.669 259.761 0 -260.669 259.761 30 -260.669 -259.761 0 -260.669 -259.761 30 -240.525 -350.359 0 -240.525 -350.359 30 -237.092 352.484 0 -172.624 325 0 -172.624 325 30 -172.624 -325 0 -172.624 -325 30 -119.957 425 0 -119.957 425 0 -119.957 425 30 -119.957 -425 0 -119.957 -425 0 -119.957 -425 30 -119.957 -425 30 119.957 -425 0 119.957 -425 0 119.957 -425 30 119.957 -425 30 119.957 425 0 119.957 425 0 119.957 425 30 172.624 325 0 172.624 325 30 172.624 -325 0 172.624 -325 30 221.938 -361.866 0 221.938 -350.359 0 221.938 352.484 0 221.938 361.866 0 223.445 360.933 0 223.445 360.933 30 223.446 -360.932 0 223.446 -360.932 30 223.446 -360.932 30 238.567 -350.359 30 239.851 279.098 0 239.851 279.098 30 239.851 -279.098 0 239.851 -279.098 30 262.3 -333.765 0 262.3 -333.765 30 262.3 333.765 0 262.3 333.765 30 294.843 -220.208 0 294.843 -220.208 30 294.843 220.208 0 294.843 220.208 30 316.273 -283.146 0 316.273 -283.146 30 316.273 283.146 0 316.273 283.146 30 336.042 -150 0 336.042 -150 30 336.042 150 0 336.042 150 30 358.714 -82.1484 0 358.714 -82.1484 30 358.714 82.1485 0 358.714 82.1485 30 360.933 223.445 0 360.933 223.445 30 360.933 -223.445 0 360.933 -223.445 30 368 0 0 368 0 30 407.984 -147.442 0 407.984 147.443 0 425 -119.957 0 425 -119.957 0 425 -119.957 30 425 119.957 0 425 119.957 0 425 119.957 30 -398.219 -174.648 0 -398.219 176.773 0 -395.969 -203.934 30 -395.969 -174.648 30 -395.969 176.773 30 -345.485 -174.648 0 -343.367 176.773 30 -336.203 183.963 0 -336.203 263.949 0 -333.953 -203.934 30 -333.953 -186.22 30 -274.188 -326.28 0 -274.188 -291.789 0 -274.188 -246.195 0 -274.188 246.195 0 -274.188 293.914 0 -274.188 326.28 0 -271.938 248.453 30 -271.938 293.914 30 -271.938 328.542 30 -240.93 -350.359 30 -240.93 -291.789 30 -237.092 352.484 30 -217.444 -291.789 30 -150.156 -350.359 0 -150.156 352.484 0 -147.906 -350.359 30 -147.906 352.484 30 100.156 325 30 100.156 352.484 30 100.156 425 30 221.938 -291.329 0 221.938 291.329 0 224.188 -350.359 30 224.188 -289.793 30 224.188 352.484 30 224.188 360.414 30 235.528 352.484 30 280.709 235.344 0 282.693 -233.219 0 282.693 -233.219 30 283.953 -313.457 0 283.953 -291.789 0 283.953 -233.219 0 283.953 235.344 0 283.953 293.914 0 283.953 313.457 0 286.203 293.914 30 286.203 311.347 30 304.792 293.914 30 345.969 -243.449 0 345.969 -233.219 0 345.969 -120.291 0 345.969 120.291 0 345.969 147.488 0 345.969 235.344 0 347.376 -116.078 0 347.376 -116.078 30 347.378 -116.074 0 347.378 -116.074 30 348.219 -233.219 30 348.219 -116.078 30 348.219 118.203 30 348.219 235.344 30 348.219 240.441 30 352.032 235.344 30 353.622 -233.219 30 361.499 -57.5078 0 361.499 -57.5078 30 407.984 -57.5078 0 407.984 1.0625 0 407.984 59.6328 0 407.984 147.488 0 410.234 -57.5078 30 410.234 1.0625 30 410.234 59.6328 30 410.234 118.203 30 425 -116.078 30 425 -57.5078 30 425 1.0625 30 425 118.203 30 - - - - - - - - - - -0.218451 0 -0.975848 -0.218451 0 -0.975848 -0.218451 0 -0.975848 -0.218451 0 -0.975848 -0.218451 0 -0.975848 -0.218451 0 -0.975848 -0.218451 0 -0.975848 -0.218451 0 -0.975848 -0.218451 0 -0.975848 -0.218451 0 -0.975848 0.218451 0 0.975848 0.218451 0 0.975848 0.218451 0 0.975848 0.218451 0 0.975848 0.218451 0 0.975848 0.218451 0 0.975848 0.218451 0 0.975848 0.218451 0 0.975848 0.218451 0 0.975848 0.218451 0 0.975848 0.975848 0 -0.218451 0.975848 0 -0.218451 0.789499 -0.587756 -0.176733 0.789499 -0.587756 -0.176733 0.789499 -0.587756 -0.176733 0.789499 -0.587756 -0.176733 0.301523 -0.951066 -0.0675069 0.301523 -0.951066 -0.0675069 0.301523 -0.951066 -0.0675069 0.301523 -0.951066 -0.0675069 -0.301523 -0.951066 0.0675069 -0.301523 -0.951066 0.0675069 -0.301523 -0.951066 0.0675069 -0.301523 -0.951066 0.0675069 -0.789499 -0.587756 0.176733 -0.789499 -0.587756 0.176733 -0.789499 -0.587756 0.176733 -0.789499 -0.587756 0.176733 -0.975848 0 0.218451 -0.975848 0 0.218451 -0.975848 0 0.218451 -0.975848 0 0.218451 -0.789499 0.587756 0.176733 -0.789499 0.587756 0.176733 -0.789499 0.587756 0.176733 -0.789499 0.587756 0.176733 -0.301523 0.951066 0.0675069 -0.301523 0.951066 0.0675069 -0.301523 0.951066 0.0675069 -0.301523 0.951066 0.0675069 0.301523 0.951066 -0.0675069 0.301523 0.951066 -0.0675069 0.301523 0.951066 -0.0675069 0.301523 0.951066 -0.0675069 0.789499 0.587756 -0.176733 0.789499 0.587756 -0.176733 0.789499 0.587756 -0.176733 0.789499 0.587756 -0.176733 0.975848 0 -0.218451 0.975848 0 -0.218451 -0.296152 0 -0.955141 -0.296152 0 -0.955141 -0.296152 0 -0.955141 -0.296152 0 -0.955141 -0.296152 0 -0.955141 -0.296152 0 -0.955141 -0.296152 0 -0.955141 -0.296152 0 -0.955141 -0.296152 0 -0.955141 -0.296152 0 -0.955141 0.296152 0 0.955141 0.296152 0 0.955141 0.296152 0 0.955141 0.296152 0 0.955141 0.296152 0 0.955141 0.296152 0 0.955141 0.296152 0 0.955141 0.296152 0 0.955141 0.296152 0 0.955141 0.296152 0 0.955141 0.955141 0 -0.296152 0.955141 0 -0.296152 0.772745 -0.587756 -0.239601 0.772745 -0.587756 -0.239601 0.772745 -0.587756 -0.239601 0.772745 -0.587756 -0.239601 0.295144 -0.951062 -0.0914945 0.295144 -0.951062 -0.0914945 0.295144 -0.951062 -0.0914945 0.295144 -0.951062 -0.0914945 -0.295144 -0.951062 0.0914945 -0.295144 -0.951062 0.0914945 -0.295144 -0.951062 0.0914945 -0.295144 -0.951062 0.0914945 -0.772745 -0.587756 0.239601 -0.772745 -0.587756 0.239601 -0.772745 -0.587756 0.239601 -0.772745 -0.587756 0.239601 -0.955141 0 0.296152 -0.955141 0 0.296152 -0.955141 0 0.296152 -0.955141 0 0.296152 -0.772745 0.587756 0.239601 -0.772745 0.587756 0.239601 -0.772745 0.587756 0.239601 -0.772745 0.587756 0.239601 -0.295144 0.951062 0.0914945 -0.295144 0.951062 0.0914945 -0.295144 0.951062 0.0914945 -0.295144 0.951062 0.0914945 0.295144 0.951062 -0.0914945 0.295144 0.951062 -0.0914945 0.295144 0.951062 -0.0914945 0.295144 0.951062 -0.0914945 0.772745 0.587756 -0.239601 0.772745 0.587756 -0.239601 0.772745 0.587756 -0.239601 0.772745 0.587756 -0.239601 0.955141 0 -0.296152 0.955141 0 -0.296152 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.109897 0 -0.993943 -0.109897 0 -0.993943 -0.218451 0 -0.975848 -0.218451 0 -0.975848 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.218451 0 0.975848 -0.218451 0 0.975848 -0.109897 0 0.993943 -0.109897 0 0.993943 -0.109897 0 0.993943 -0.109897 0 0.993943 0 0 1 0 0 1 1 0 0 1 0 0 1 0 0 1 0 0 0 0 -1 0 0 -1 -0.109897 0 -0.993943 -0.109897 0 -0.993943 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.149754 0 -0.988723 -0.149754 0 -0.988723 -0.296152 0 -0.955141 -0.296152 0 -0.955141 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.296152 0 0.955141 -0.296152 0 0.955141 -0.149754 0 0.988723 -0.149754 0 0.988723 -0.149754 0 0.988723 -0.149754 0 0.988723 0 0 1 0 0 1 1 0 0 1 0 0 1 0 0 1 0 0 0 0 -1 0 0 -1 -0.149754 0 -0.988723 -0.149754 0 -0.988723 1 0 0 1 0 0 1 0 0 1 0 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.526353 0.850266 0 -0.261879 -0.965101 0 0 0.0577715 0.99833 -0.526353 0.850266 0 0 0.172796 0.984958 0.707083 0.70713 0 -0.215766 0.976445 0 0 0.0577715 0.99833 0.707083 0.70713 0 -0.215766 0.976445 0 0 0 -1 0.707083 0.70713 0 -0.70713 0.707083 0 0 0 -1 0.215766 0.976445 0 -0.70713 0.707083 0 0 0.0577715 0.99833 0.215766 0.976445 0 -0.70713 0.707083 0 0 0.172796 0.984958 0.526353 0.850266 0 0 0.0577715 0.99833 0.261879 -0.965101 0 0.573016 0.819544 0 -0.526353 0.850266 0 -0.261879 -0.965101 0 0 0 -1 -0.526353 0.850266 0 0 0 -1 0.707083 0.70713 0 -0.108524 0.994094 0 0 0.0577715 0.99833 0 0 -1 0.108524 0.994094 0 -0.70713 0.707083 0 0 0 -1 0.526353 0.850266 0 0 0 -1 0.261879 -0.965101 0 0.573016 0.819544 0 -0.132084 -0.991239 0 -0.132084 -0.991239 0 -0.526353 0.850266 0 0 0.0577715 0.99833 0 0.0867031 0.996234 0.707083 0.70713 0 -0.108524 0.994094 0 0.108524 0.994094 0 -0.70713 0.707083 0 0 0.0867031 0.996234 0 0.0577715 0.99833 0.526353 0.850266 0 0.549913 0.835222 0 0.549913 0.835222 0 0.132084 -0.991239 0 0.132084 -0.991239 0 -1.66535e-010 0.0577966 0.998328 0 0 -1 -0.499069 0.866562 0 0 0 1 -0.499069 -0.866562 0 0 0 -1 0 0 1 0.108524 -0.994094 0 0 0 -1 0.108524 0.994094 0 0 0 -1 0.651326 -0.758798 0 0 0 1 0.651326 0.758798 0 0 0 1 0.976438 -0.215796 0 0 0 -1 0.976438 0.215796 0 -1 0 0 0 -1 0 0 0 -1 -1 0 0 0 0 1 0 1 0 -0.383465 -0.923555 0 0 0 1 -0.383465 0.923555 0 0 0 -1 -0.307382 -0.951586 0 0 0 1 0 0 -1 0.910395 -0.413739 0 0 0 1 0.910395 0.413739 0 -0.653645 -0.756801 0 0 0 1 -0.653645 0.756801 0 0 0 -1 -0.307382 0.951586 0 0 0 -1 -0.108524 -0.994094 0 0 0 -1 -0.108524 0.994094 0 0 0 1 0 0 -1 0.307382 -0.951586 0 0 0 1 0.307382 0.951586 0 0 0 1 0.482253 -0.876032 0 0 0 -1 0.482253 0.876032 0 0 0 1 0.801557 -0.597919 0 0 0 -1 0.801557 0.597919 0 0 0 -1 1 0 0 0 0 1 1 0 0 -1 0 0 0 -1 0 -1 0 0 0 1 0 -0.383465 -0.923555 0 -0.383465 0.923555 0 -0.653645 -0.756801 0 -0.653645 0.756801 0 -0.499069 0.866562 0 -0.499069 -0.866562 0 -0.307382 -0.951586 0 -0.307382 0.951586 0 -0.108524 -0.994094 0 -0.108524 0.994094 0 0.108524 -0.994094 0 0.108524 0.994094 0 0.307382 -0.951586 0 0.307382 0.951586 0 0.482253 -0.876032 0 0.482253 0.876032 0 0.651326 -0.758798 0 0.651326 0.758798 0 0.801557 -0.597919 0 0.801557 0.597919 0 0.910395 -0.413739 0 0.910395 0.413739 0 0.976438 -0.215796 0 0.976438 0.215796 0 0 0 1 0 0 -1 -0.526353 -0.850266 0 -0.261879 0.965101 0 0 -0.0577715 0.99833 -0.526353 -0.850266 0 0 -0.172796 0.984958 0.707083 -0.70713 0 -0.215766 -0.976445 0 0 -0.0577715 0.99833 0.707083 -0.70713 0 -0.215766 -0.976445 0 0 0 -1 0.707083 -0.70713 0 -0.707083 -0.70713 0 0 0 -1 0.215735 -0.976452 0 -0.707083 -0.70713 0 0 -0.0577715 0.99833 0.215735 -0.976452 0 -0.707083 -0.70713 0 0 -0.172796 0.984958 0.526353 -0.850266 0 0 -0.0577715 0.99833 0.261879 0.965101 0 0.573016 -0.819544 0 -0.526353 -0.850266 0 -0.261879 0.965101 0 0 0 -1 -0.526353 -0.850266 0 0 0 -1 0.707083 -0.70713 0 -0.108524 -0.994094 0 0 0 -1 0 -0.0577715 0.99833 0.108524 -0.994094 0 -0.707083 -0.70713 0 0 0 -1 0.526353 -0.850266 0 0 0 -1 0.261879 0.965101 0 0.573016 -0.819544 0 -0.132084 0.991239 0 -0.132084 0.991239 0 -0.526353 -0.850266 0 0 -0.0577715 0.99833 0 -0.0867031 0.996234 0.707083 -0.70713 0 -0.108524 -0.994094 0 0.108524 -0.994094 0 -0.707083 -0.70713 0 0 -0.0867031 0.996234 0 -0.0577715 0.99833 0.526353 -0.850266 0 0.549913 -0.835222 0 0.549913 -0.835222 0 0.132084 0.991239 0 0.132084 0.991239 0 -9.87448e-010 -0.0577967 0.998328 0 0 -1 -1 0 0 -1 0 0 -0.96855 0.248817 0 0 -1 0 0 0 -1 -0.96855 0.248817 0 -0.96855 -0.248817 0 -0.17362 0 0.984813 -1 0 0 -1 0 0 -0.96855 -0.248817 0 0 0 -1 0 1 0 -0.96855 -0.248817 0 -0.17362 0 0.984813 0 -1 0 0 0 -1 0 0 1 0 1 0 -1 0 0 -0.258797 -0.965932 0 -1 0 0 -0.258797 0.965932 0 -1 0 0 -0.258797 0.965932 0 -1 0 0 -0.258797 -0.965932 0 -0.876166 0.482009 0 -0.876166 0.482009 0 -0.876166 -0.482009 0 -0.876166 -0.482009 0 -0.258797 0.965932 0 -0.258797 0.965932 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 0.876166 0.482009 0 0.948458 -0.316904 0 0.876166 0.482009 0 0.948458 -0.316904 0 0.876166 -0.482009 0 0.948458 0.316904 0 0.876166 -0.482009 0 0.948458 0.316904 0 0.258797 -0.965932 0 0.948458 -0.316904 0 0.258797 -0.965932 0 0.948458 -0.316904 0 0.258797 0.965932 0 0.948458 0.316904 0 0.258797 0.965932 0 0.948458 0.316904 0 0.876166 0.482009 0 0.876166 0.482009 0 0.876166 -0.482009 0 0.876166 -0.482009 0 0.0867031 0 0.996234 0.258797 -0.965932 0 0.0433058 0 0.999062 0.258797 0.965932 0 0.258797 -0.965932 0 1 0 0 0.172796 0 0.984958 0.258797 -0.965932 0 1 0 0 0.258797 0.965932 0 1 0 0 0.172796 0 0.984958 0.258797 0.965932 0 1 0 0 0 0 -1 0 0 -1 0 0 1 0 -1 0 0 1 0 -0.173648 -2.72113e-010 0.984808 -0.173648 -5.06036e-009 0.984808 -0.968546 -0.248834 0 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 -0.924377 0.381481 0 0 0 -1 -0.924377 0.381481 0 0 0 1 -0.924377 -0.381481 0 0 0 -1 -0.924377 -0.381481 0 0 0 1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 -1 0 1 0 0 0 -1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0.383465 -0.923555 0 0.383465 -0.923555 0 0.383465 0.923555 0 0.383465 0.923555 0 -0.621845 0.78314 0 -0.621845 0.78314 0 -0.621845 -0.78314 0 -0.621845 -0.78314 0 0.653645 -0.756801 0 0.653645 -0.756801 0 0.653645 0.756801 0 0.653645 0.756801 0 0 0 -1 0 0 1 0 0 -1 0.313456 -0.949603 0 0.313456 -0.949603 0 0.313456 0.949603 0 0.313456 0.949603 0 -0.273629 0.961835 0 0 0 -1 -0.273629 0.961835 0 -0.273629 -0.961835 0 0 0 -1 -0.273629 -0.961835 0 0 0 1 0 0 -1 0.273629 -0.961835 0 0 0 1 0.273629 -0.961835 0 0 0 -1 0.273629 0.961835 0 0.273629 0.961835 0 -0.295053 -0.955481 0 -0.295053 -0.955481 0 -0.295053 0.955481 0 -0.295053 0.955481 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0.549913 0.835222 0 0.549913 0.835222 0 0.549913 -0.835222 0 0 0 1 0.549913 -0.835222 0 0 0 1 -0.651326 -0.758798 0 -0.651326 -0.758798 0 -0.651326 0.758798 0 -0.651326 0.758798 0 0.630146 -0.776477 0 0.630146 -0.776477 0 0.630146 0.776477 0 0.630146 0.776477 0 -0.801557 0.597919 0 -0.801557 0.597919 0 -0.801557 -0.597919 0 -0.801557 -0.597919 0 0.745292 -0.666738 0 0.745292 -0.666738 0 0.745292 0.666738 0 0.745292 0.666738 0 -0.910395 0.413739 0 -0.910395 0.413739 0 -0.910395 -0.413739 0 -0.910395 -0.413739 0 -0.976438 0.215796 0 -0.976438 0.215796 0 -0.976438 -0.215796 0 -0.976438 -0.215796 0 0.826308 0.563219 0 0.826308 0.563219 0 0.826308 -0.563219 0 0.826308 -0.563219 0 -1 0 0 -1 0 0 0 0 -1 0 0 -1 0 0 -1 0.961835 -0.273629 0 0.961835 -0.273629 0 0 0 -1 0.961835 0.273629 0 0.961835 0.273629 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 -1 0 0 -1 0 0 -1 - - - - - - - - - - - - - - -

0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9

-

10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19

-

20 20 21 21 22 22 23 23

-

24 24 25 25 26 26 27 27

-

28 28 29 29 30 30 31 31

-

32 32 33 33 34 34 35 35

-

36 36 37 37 38 38 39 39

-

40 40 41 41 42 42 43 43

-

44 44 45 45 46 46 47 47

-

48 48 49 49 50 50 51 51

-

52 52 53 53 54 54 55 55

-

56 56 57 57 58 58 59 59

-
- - - -

60 60 61 61 62 62 63 63 64 64 65 65 66 66 67 67 68 68 69 69

-

70 70 71 71 72 72 73 73 74 74 75 75 76 76 77 77 78 78 79 79

-

80 80 81 81 82 82 83 83

-

84 84 85 85 86 86 87 87

-

88 88 89 89 90 90 91 91

-

92 92 93 93 94 94 95 95

-

96 96 97 97 98 98 99 99

-

100 100 101 101 102 102 103 103

-

104 104 105 105 106 106 107 107

-

108 108 109 109 110 110 111 111

-

112 112 113 113 114 114 115 115

-

116 116 117 117 118 118 119 119

-
- - - -

120 120 121 121 122 122 123 123 124 124 125 125

-

126 126 127 127 128 128 129 129 130 130 131 131

-

132 132 133 133 134 134 135 135

-

136 136 137 137 138 138 139 139

-

140 140 141 141 142 142 143 143

-

144 144 145 145 146 146 147 147

-

148 148 149 149 150 150 151 151

-

152 152 153 153 154 154 155 155

-
- - - -

156 156 157 157 158 158 159 159 160 160 161 161

-

162 162 163 163 164 164 165 165 166 166 167 167

-

168 168 169 169 170 170 171 171

-

172 172 173 173 174 174 175 175

-

176 176 177 177 178 178 179 179

-

180 180 181 181 182 182 183 183

-

184 184 185 185 186 186 187 187

-

188 188 189 189 190 190 191 191

-
- - - -

192 192 193 193 194 194 195 195

-

196 196 197 197 198 198 199 199

-

200 200 201 201 202 202 203 203

-

204 204 205 205 206 206 207 207

-

208 208 209 209 210 210 211 211

-

212 212 213 213 214 214 215 215

-
- - - -

267 272 265 272 233 272 269 272 267 272 233 272 224 272 261 272 259 272

-
- - - -

271 272 239 272 269 272 233 272

-

257 272 271 272 233 272 263 272 247 272 224 272

-

224 272 259 272 218 272 257 272

-
- - - -

230 273 252 273 268 273

-
- - - -

256 273 242 273 245 273 227 273

-

270 273 256 273 227 273 262 273 249 273 230 273

-

230 273 268 273 255 273 270 273

-
- - - -

260 260 220 220 259 259 266 266 235 235 265 265

-
- - - -

234 234 250 250 228 228 231 231 264 264

-

233 233 230 230 249 249 263 263

-

263 263 249 249 262 262 246 246

-

246 246 262 262 225 225 222 222

-

224 224 227 227 245 245 221 221 261 261

-

219 219 243 243 240 240 216 216 258 258

-

217 217 241 241 256 256 257 257

-

257 257 256 256 270 270 271 271

-

271 271 270 270 254 254 238 238

-

239 239 255 255 268 268 269 269

-

269 269 268 268 252 252 236 236 267 267

-
- - - -

273 360 337 360 335 360

-
- - - -

335 360 293 360 331 360 295 360

-

295 360 305 360 339 360 299 360 342 360 277 360 346 360 319 360 350 360 323 360 354 360 285 360 329 360 357 360 303 360 353 360 283 360 349 360 317 360 345 360 313 360 341 360 273 360 335 360

-
- - - -

275 361 336 361 334 361

-
- - - -

334 361 290 361 333 361 297 361

-

297 361 307 361 338 361 309 361 343 361 279 361 347 361 321 361 351 361 325 361 355 361 287 361 327 361 356 361 301 361 352 361 281 361 348 361 315 361 344 361 311 361 340 361 275 361 334 361

-
- - - -

337 339 306 308 296 298 335 337

-

335 337 296 298 333 335 293 295

-

291 293 332 334 288 290 330 332

-

331 333 289 291 334 336 294 296

-

294 296 334 336 336 338 304 306

-

304 306 336 338 274 276 339 341

-

339 341 274 276 340 342 298 300

-

298 300 340 342 310 312 342 344

-

342 344 310 312 344 346 277 279

-

277 279 344 346 315 317 346 348

-

346 348 315 317 348 350 319 321

-

319 321 348 350 281 283 350 352

-

350 352 281 283 352 354 323 325

-

323 325 352 354 301 303 354 356

-

354 356 301 303 356 358 285 287

-

285 287 356 358 327 329 329 331

-

329 331 327 329 287 289 357 359

-

357 359 287 289 355 357 303 305

-

303 305 355 357 325 327 353 355

-

353 355 325 327 351 353 283 285

-

283 285 351 353 321 323 349 351

-

349 351 321 323 347 349 317 319

-

317 319 347 349 279 281 345 347

-

345 347 279 281 343 345 312 314

-

312 314 343 345 308 310 341 343

-

341 343 308 310 338 340 272 274

-

272 274 338 340 306 308 337 339

-
- - - -

401 418 403 418 366 418 375 418 407 418 409 418 375 418 409 418 411 418

-
- - - -

399 418 360 418 401 418 366 418

-

413 418 399 418 366 418 404 418 391 418 375 418

-

375 418 411 418 381 418 413 418

-
- - - -

410 419 394 419 372 419

-
- - - -

369 419 387 419 384 419 398 419

-

398 419 412 419 372 419 405 419 389 419 369 419

-

412 419 397 419 410 419 372 419

-
- - - -

401 405 362 366 402 406 407 411 377 381 408 412

-
- - - -

409 413 378 382 394 398 410 414 411 415

-

411 415 410 414 397 401 381 385

-

380 384 396 400 412 416 413 417

-

398 402 399 403 413 417 412 416

-

399 403 398 402 383 387 359 363

-

400 404 358 362 382 386 385 389 361 365

-

403 407 363 367 387 391 369 373 366 370

-

364 368 367 371 388 392 404 408

-

404 408 388 392 405 409 391 395

-

391 395 405 409 372 376 375 379

-

406 410 373 377 370 374 392 396 376 380

-
- - - -

462 489 479 489 474 489 462 489 474 489 458 489 462 489 458 489 450 489 454 489 462 489 450 489

-
- - - -

450 489 465 489 441 489 418 489

-

426 489 443 489 467 489 454 489

-

418 489 426 489 454 489 450 489

-
- - - -

447 490 434 490 436 490 447 490 436 490 445 490

-
- - - -

460 491 470 491 472 491 483 491 466 491 452 491 456 491 468 491 486 491 452 491 472 491 464 491 472 491 452 491 460 491

-
- - - -

464 491 456 491 486 491 483 491 452 491

-
- - - -

484 492 442 492 441 492 484 492 441 492 465 492

-
- - - -

465 492 466 492 483 492 484 492

-
- - - -

443 493 444 493 485 493 467 493 443 493 485 493

-
- - - -

485 493 486 493 468 493 467 493

-
- - - -

485 494 444 494 428 494 421 494 442 494 484 494

-
- - - -

421 494 484 494 485 494 428 494

-
- - - -

446 495 438 495 440 495 446 495 440 495 448 495

-
- - - -

424 430 427 433 444 450 443 449

-

414 420 415 421 427 433 424 430

-

436 442 438 444 446 452 445 451

-

433 439 439 445 437 443 435 441

-

447 453 448 454 440 446 434 440

-

416 422 419 425 423 429 422 428

-

441 447 442 448 419 425 416 422

-
- - - -

424 430 427 433 444 450 443 449

-

414 420 415 421 427 433 424 430

-

436 442 438 444 446 452 445 451

-

433 439 439 445 437 443 435 441

-

447 453 448 454 440 446 434 440

-

416 422 419 425 423 429 422 428

-

441 447 442 448 419 425 416 422

-

480 486 471 477 469 475 475 481

-

467 473 468 474 455 461 453 459

-

454 460 456 462 464 470 462 468

-

461 467 463 469 472 478 481 487 478 484

-

479 485 482 488 477 483 474 480

-

473 479 476 482 470 476 459 465 457 463

-

458 464 460 466 452 458 450 456

-

449 455 451 457 466 472 465 471

-
- - - -

426 496 428 496 444 496 443 496

-

445 496 446 496 428 496 426 496

-

436 496 438 496 446 496 445 496

-

434 496 440 496 438 496 436 496

-

447 496 448 496 440 496 434 496

-

418 496 421 496 448 496 447 496

-

441 496 442 496 421 496 418 496

-

482 496 472 496 470 496 477 496

-

467 496 468 496 456 496 454 496

-

454 496 456 496 464 496 462 496

-

462 496 464 496 472 496 482 496 479 496

-

479 496 482 496 477 496 474 496

-

474 496 477 496 470 496 460 496 458 496

-

458 496 460 496 452 496 450 496

-

450 496 452 496 466 496 465 496

-

484 496 483 496 486 496 485 496

-
- - - -

487 497 488 497 489 497 490 497 491 497

-
- - - -

492 498 493 498 494 498 495 498 496 498

-
- - - -

497 499 498 499 499 499 500 499 501 499

-
- - - -

502 500 503 500 504 500 505 500 506 500

-
- - - -

507 501 508 501 509 501 510 501 511 501

-
- - - -

512 502 513 502 514 502 515 502

-
- - - -

516 503 517 503 518 503 519 503

-
- - - -

520 504 521 504 522 504 523 504

-
- - - -

524 505 525 505 526 505 527 505

-
- - - -

528 506 529 506 530 506 531 506

-
- - - -

532 507 533 507 534 507 535 507

-
- - - -

536 508 537 508 538 508 539 508

-
- - - -

540 509 541 509 542 509 543 509

-
- - - -

544 510 545 510 546 510 547 510

-
- - - -

548 511 549 511 550 511

-
- - - -

551 512 552 512 553 512

-
- - - -

554 513 555 513 556 513 557 513 558 513 559 513

-
- - - -

566 514 567 514 568 514 569 514 570 514 571 514

-
- - - -

560 514 561 514 562 514 563 514 564 514 565 514

-
- - - -

572 515 573 515 574 515

-
- - - -

715 621 717 621 716 621 727 621 729 621 728 621 743 621 745 621 744 621 743 621 653 621 661 621 665 621 742 621 661 621

-
- - - -

708 621 629 621 715 621 716 621 637 621 627 621 710 621

-

715 621 629 621 643 621 727 621 728 621 649 621 717 621

-

653 621 743 621 744 621 657 621 729 621 727 621 643 621

-

743 621 661 621 742 621 760 621 679 621 667 621 745 621

-

754 621 759 621 760 621 756 621

-

754 621 671 621 748 621 758 621 759 621

-

665 621 671 621 754 621 755 621

-

755 621 756 621 742 621 665 621

-
- - - -

698 622 697 622 604 622

-
- - - -

708 622 709 622 707 622 611 622

-

611 622 707 622 702 622 600 622 699 622 698 622 604 622

-
- - - -

651 623 720 623 740 623 740 623 659 623 651 623 753 623 748 623 663 623

-
- - - -

659 623 740 623 746 623 669 623 676 623 757 623 741 623

-

663 623 739 623 737 623 659 623 741 623

-

663 623 741 623 757 623 758 623 753 623

-
- - - -

713 624 714 624 631 624

-
- - - -

706 624 613 624 703 624 701 624 700 624

-

713 624 631 624 613 624 706 624

-
- - - -

634 625 712 625 628 625 603 625 694 625 695 625

-
- - - -

610 625 705 625 634 625 628 625

-

705 625 610 625 603 625 695 625 696 625 599 625 609 625

-
- - - -

652 626 718 626 735 626 735 626 733 626 660 626 735 626 660 626 652 626

-
- - - -

630 627 711 627 633 627 692 627 693 627 605 627

-
- - - -

612 627 630 627 633 627 704 627

-

612 627 704 627 607 627 601 627 691 627 692 627 605 627

-
- - - -

662 628 747 628 749 628

-
- - - -

672 628 668 628 730 628 732 628 736 628 738 628 662 628 749 628

-

751 628 664 628 733 628 734 628 752 628

-

664 628 751 628 750 628 670 628

-

750 628 749 628 747 628 670 628

-
- - - -

658 629 732 629 731 629 731 629 719 629 650 629 731 629 650 629 658 629

-
- - - -

598 630 594 630 683 630 682 630 689 630 690 630

-

590 630 596 630 686 630 684 630

-

590 630 684 630 683 630 594 630

-
- - - -

592 631 597 631 685 631 680 631

-

687 631 595 631 588 631 681 631 584 631 688 631

-

681 631 588 631 592 631 680 631

-
- - - -

635 632 636 632 648 632 726 632 725 632 642 632 712 632

-

725 632 724 632 718 632 642 632

-
- - - -

711 633 644 633 722 633 721 633 646 633 638 633 632 633

-

644 633 719 633 723 633 722 633

-
- - - -

576 517 584 525 583 524 580 521

-

641 582 608 549 620 561 623 564 639 580

-

673 614 677 618 674 615 672 613

-

600 541 599 540 575 516 577 518

-

616 557 614 555 599 540 600 541

-

609 550 615 556 625 566 635 576 634 575

-

627 568 626 567 614 555 616 557

-

637 578 636 577 626 567 627 568

-

649 590 648 589 636 577 637 578

-

657 598 656 597 648 589 649 590

-

667 608 666 607 656 597 657 598

-

679 620 678 619 666 607 667 608

-

678 619 679 620 676 617 675 616

-

669 610 668 609 675 616 676 617

-

655 596 654 595 668 609 669 610

-

647 588 646 587 654 595 655 596

-

640 581 638 579 646 587 647 588

-

624 565 622 563 638 579 640 581

-

607 548 633 574 632 573 621 562 618 559

-

619 560 617 558 622 563 624 565

-

602 543 601 542 617 558 619 560

-

581 522 579 520 601 542 602 543

-

579 520 581 522 577 518 575 516

-

586 527 578 519 582 523 585 526

-
- - - -

576 517 584 525 583 524 580 521

-

641 582 608 549 620 561 623 564 639 580

-

673 614 677 618 674 615 672 613

-

600 541 599 540 575 516 577 518

-

616 557 614 555 599 540 600 541

-

609 550 615 556 625 566 635 576 634 575

-

627 568 626 567 614 555 616 557

-

637 578 636 577 626 567 627 568

-

649 590 648 589 636 577 637 578

-

657 598 656 597 648 589 649 590

-

667 608 666 607 656 597 657 598

-

679 620 678 619 666 607 667 608

-

678 619 679 620 676 617 675 616

-

669 610 668 609 675 616 676 617

-

655 596 654 595 668 609 669 610

-

647 588 646 587 654 595 655 596

-

640 581 638 579 646 587 647 588

-

624 565 622 563 638 579 640 581

-

607 548 633 574 632 573 621 562 618 559

-

619 560 617 558 622 563 624 565

-

602 543 601 542 617 558 619 560

-

581 522 579 520 601 542 602 543

-

579 520 581 522 577 518 575 516

-

586 527 578 519 582 523 585 526

-

587 528 595 536 596 537 589 530

-

592 533 588 529 590 531 594 535

-

597 538 591 532 593 534 598 539

-

605 546 597 538 598 539 606 547

-

612 553 605 546 606 547 613 554

-

630 571 612 553 613 554 631 572

-

644 585 630 571 631 572 645 586

-

650 591 644 585 645 586 651 592

-

658 599 650 591 651 592 659 600

-

658 599 659 600 663 604 662 603

-

670 611 662 603 663 604 671 612

-

664 605 670 611 671 612 665 606

-

664 605 665 606 661 602 660 601

-

652 593 660 601 661 602 653 594

-

642 583 652 593 653 594 643 584

-

628 569 642 583 643 584 629 570

-

610 551 628 569 629 570 611 552

-

603 544 610 551 611 552 604 545

-

595 536 603 544 604 545 596 537

-
-
- - - CAT3DBagRep - - -
- - - - -100 -150 -186 -440 -150 -186 -440 -170 -186 -100 -170 -186 -405 -150 -346 -100 -150 -346 -100 -170 -346 -405 -170 -346 -440 -150 -186 -405 -150 -346 -405 -170 -346 -440 -170 -186 -405 -150 -346 -440 -150 -186 -100 -150 -186 -100 -150 -346 -100 -150 -346 -100 -150 -186 -100 -170 -186 -100 -170 -346 -100 -170 -346 -100 -170 -186 -440 -170 -186 -405 -170 -346 314 122 103 314 122 -89 314 109 -89 314 109 103 506 122 103 314 122 103 314 109 103 506 109 103 506 122 -89 506 122 103 506 109 103 506 109 -89 314 122 -89 506 122 -89 506 109 -89 314 109 -89 314 109 -89 506 109 -89 506 109 103 314 109 103 314 284 33.22 330.38 284 33.22 330.38 284 -19.7 314 284 -19.7 332.5 284 -19.7 330.38 284 -19.7 330.38 284 33.22 332.5 284 42.1165 332.5 284 42.1165 330.38 284 33.22 314 284 33.22 314 284 59.68 330.38 284 59.68 330.38 284 59.68 356.84 284 59.68 356.84 284 56.1693 332.5 284 42.1165 314 122 -89 314 122 -59 314 122 -59 314 122 -59 314 122 73 314 122 73 314 122 73 314 122 103 314 284 -59 314 284 -59 314 284 73 314 284 73 344 122 -89 344 122 -89 344 122 -89 344 122 -59 344 122 -59 344 122 -59 344 122 73 344 122 73 344 122 73 344 122 103 344 122 103 344 122 103 344 284 -89 344 284 -89 344 284 -59 344 284 -59 344 284 73 344 284 73 344 284 103 344 284 103 476 122 -89 476 122 -89 476 122 -89 476 122 -59 476 122 -59 476 122 -59 476 122 73 476 122 73 476 122 73 476 122 103 476 122 103 476 122 103 476 284 -89 476 284 -89 476 284 -59 476 284 -59 476 284 73 476 284 73 476 284 103 476 284 103 506 122 -89 506 122 -59 506 122 -59 506 122 -59 506 122 73 506 122 73 506 122 73 506 122 103 506 284 -59 506 284 -59 506 284 73 506 284 73 314 284 -46.16 314 284 59.68 356.84 284 -89 356.84 284 -46.16 356.84 284 59.68 356.84 284 103 462.68 284 -89 462.68 284 -46.16 462.68 284 59.68 462.68 284 103 506 284 -46.16 506 284 59.68 332.5 284 -28.1165 332.5 284 -28.1165 332.5 284 42.1165 332.5 284 42.1165 332.5 327 -28.1165 332.5 327 -28.1165 332.5 327 42.1165 332.5 327 42.1165 359.37 284 -43.6299 359.37 284 57.6299 359.37 327 -43.6299 359.37 327 57.6299 374.883 284 -70.5 374.883 284 -70.5 374.883 284 84.5 374.883 284 84.5 374.883 327 -70.5 374.883 327 -70.5 374.883 327 84.5 374.883 327 84.5 445.117 284 -70.5 445.117 284 -70.5 445.117 284 84.5 445.117 284 84.5 445.117 327 -70.5 445.117 327 -70.5 445.117 327 84.5 445.117 327 84.5 460.63 284 -43.6299 460.63 284 57.6299 460.63 327 -43.6299 460.63 327 57.6299 487.5 284 -28.1165 487.5 284 -28.1165 487.5 284 42.1165 487.5 284 42.1165 487.5 327 -28.1165 487.5 327 -28.1165 487.5 327 42.1165 487.5 327 42.1165 314 284 -46.16 314 284 -19.7 330.38 284 -46.16 332.5 284 -19.7 345.337 327 49.5281 346.009 327 -35.9156 356.84 284 -89 356.84 284 -72.62 356.84 284 -46.16 356.84 284 56.1693 356.84 284 86.14 356.84 284 103 360.831 284 -46.16 367.084 327 -35.9156 367.084 327 49.5281 436.22 284 -89 436.22 284 -72.62 452.528 327 -35.9156 452.528 327 49.5281 459.169 284 -46.16 459.446 284 59.68 462.68 284 -89 462.68 284 -72.62 462.68 284 -46.16 462.68 284 59.68 462.68 284 86.14 462.68 284 103 489.14 284 -46.16 489.14 284 59.68 506 284 -46.16 506 284 59.68 392.5 327 7 392.5 344 7 392.5 344 7 394.845 327 -1.75 394.845 327 15.75 394.845 344 -1.75 394.845 344 -1.75 394.845 344 15.75 394.845 344 15.75 401.25 327 -8.15546 401.25 327 22.1555 401.25 344 -8.15546 401.25 344 -8.15546 401.25 344 22.1555 401.25 344 22.1555 410 327 -10.5 410 327 24.5 410 344 -10.5 410 344 -10.5 410 344 24.5 410 344 24.5 418.75 327 -8.15546 418.75 327 22.1555 418.75 344 -8.15546 418.75 344 -8.15546 418.75 344 22.1555 418.75 344 22.1555 425.155 327 -1.75 425.155 327 15.75 425.155 344 -1.75 425.155 344 -1.75 425.155 344 15.75 425.155 344 15.75 427.5 327 7 427.5 344 7 427.5 344 7 332.5 327 -28.1165 332.5 327 6.80627 332.5 327 42.1165 345.337 327 49.5281 346.009 327 -35.9156 367.084 327 6.80627 409.806 327 -35.9156 409.806 327 49.5281 452.528 327 -35.9156 452.528 327 6.80627 452.528 327 49.5281 -143 -96 -173 -143 96 -173 -143 96 -186 -143 -96 -186 49 -96 -173 -143 -96 -173 -143 -96 -186 49 -96 -186 49 96 -173 49 -96 -173 49 -96 -186 49 96 -186 -143 96 -173 49 96 -173 49 96 -186 -143 96 -186 -143 96 -186 49 96 -186 49 -96 -186 -143 -96 -186 -73.22 96 -11 -73.22 79.62 -11 -20.3 79.62 -11 -20.3 96 -11 -20.3 77.5 -11 -20.3 79.62 -11 -73.22 79.62 -11 -82.1165 77.5 -11 -82.1165 77.5 -11 -73.22 79.62 -11 -73.22 96 -11 -99.68 96 -11 -99.68 79.62 -11 -99.68 79.62 -11 -99.68 53.16 -11 -96.1692 53.16 -11 -82.1165 77.5 -11 -143 -96 -173 -143 -66 -173 -143 -66 -173 -143 -66 -173 -143 -66 -11 -143 -66 -11 -143 66 -173 -143 66 -173 -143 66 -173 -143 66 -11 -143 66 -11 -143 96 -173 -113 -96 -173 -113 -96 -173 -113 -96 -173 -113 -96 -11 -113 -96 -11 -113 -66 -173 -113 -66 -173 -113 -66 -173 -113 -66 -11 -113 -66 -11 -113 66 -173 -113 66 -173 -113 66 -173 -113 66 -11 -113 66 -11 -113 96 -173 -113 96 -173 -113 96 -173 -113 96 -11 -113 96 -11 19 -96 -173 19 -96 -173 19 -96 -173 19 -96 -11 19 -96 -11 19 -66 -173 19 -66 -173 19 -66 -173 19 -66 -11 19 -66 -11 19 66 -173 19 66 -173 19 66 -173 19 66 -11 19 66 -11 19 96 -173 19 96 -173 19 96 -173 19 96 -11 19 96 -11 49 -96 -173 49 -66 -173 49 -66 -173 49 -66 -173 49 -66 -11 49 -66 -11 49 66 -173 49 66 -173 49 66 -173 49 66 -11 49 66 -11 49 96 -173 -143 -52.68 -11 -143 53.16 -11 -99.68 -96 -11 -99.68 -52.68 -11 -99.68 53.16 -11 -99.68 96 -11 6.16 -96 -11 6.16 -52.68 -11 6.16 53.16 -11 6.16 96 -11 49 -52.68 -11 49 53.16 -11 -124.5 -35.1165 -11 -124.5 -35.1165 -11 -124.5 -35.1165 32 -124.5 -35.1165 32 -124.5 35.1165 -11 -124.5 35.1165 -11 -124.5 35.1165 32 -124.5 35.1165 32 -97.6299 -50.6299 -11 -97.6299 -50.6299 32 -97.6299 50.6299 -11 -97.6299 50.6299 32 -82.1165 -77.5 -11 -82.1165 -77.5 -11 -82.1165 -77.5 32 -82.1165 -77.5 32 -82.1165 77.5 -11 -82.1165 77.5 -11 -82.1165 77.5 32 -82.1165 77.5 32 -11.8835 -77.5 -11 -11.8835 -77.5 -11 -11.8835 -77.5 32 -11.8835 -77.5 32 -11.8835 77.5 -11 -11.8835 77.5 -11 -11.8835 77.5 32 -11.8835 77.5 32 3.62994 -50.6299 -11 3.62994 -50.6299 32 3.62994 50.6299 -11 3.62994 50.6299 32 30.5 -35.1165 -11 30.5 -35.1165 -11 30.5 -35.1165 32 30.5 -35.1165 32 30.5 35.1165 -11 30.5 35.1165 -11 30.5 35.1165 32 30.5 35.1165 32 -143 -52.68 -11 -143 53.16 -11 -126.14 -52.68 -11 -126.14 53.16 -11 -99.68 -96 -11 -99.68 -79.14 -11 -99.68 -52.68 -11 -99.68 -49.4463 -11 -96.1692 53.16 -11 -89.5281 -42.5281 32 -89.5281 42.9156 32 -89.5281 64.6627 32 -20.3 77.5 -11 -20.3 96 -11 -4.08437 -42.5281 32 -4.08437 42.9156 32 -4.08437 63.9915 32 6.16 -96 -11 6.16 -79.14 -11 6.16 -52.68 -11 6.16 -49.1692 -11 6.16 49.1692 -11 6.16 53.16 -11 6.16 79.62 -11 6.16 96 -11 32.62 -52.68 -11 32.62 -26.22 -11 32.62 53.16 -11 49 -52.68 -11 49 -26.22 -11 49 53.16 -11 -89.5281 -42.5281 32 -89.5281 0.193748 32 -82.1165 77.5 32 -64.5 0 49 -64.5 0 49 -62.1554 -8.75 49 -62.1554 -8.75 49 -62.1554 8.75 49 -62.1554 8.75 49 -55.75 -15.1554 49 -55.75 -15.1554 49 -55.75 15.1554 49 -55.75 15.1554 49 -47 -17.5 49 -47 -17.5 49 -47 17.5 49 -47 17.5 49 -46.8063 -42.5281 32 -46.8063 42.9156 32 -46.8063 77.5 32 -38.25 -15.1554 49 -38.25 -15.1554 49 -38.25 15.1554 49 -38.25 15.1554 49 -31.8446 -8.75 49 -31.8446 -8.75 49 -31.8446 8.75 32 -31.8446 8.75 32 -31.8446 8.75 49 -31.8446 8.75 49 -29.5 0 49 -29.5 0 49 -11.8835 77.5 32 -4.08437 -42.5281 32 -4.08437 0.193748 32 -64.5 0 32 -62.1554 -8.75 32 -62.1554 8.75 32 -55.75 -15.1554 32 -55.75 15.1554 32 -47 -17.5 32 -47 17.5 32 -38.25 -15.1554 32 -38.25 15.1554 32 -31.8446 -8.75 32 -29.5 0 32 -89.5281 64.6627 32 -4.08437 63.9915 32 565.488 -155 -217.084 569.097 -155 -217.084 585.902 -155 -204.189 585.902 -155 -194.862 565.488 -155 -194.862 548.5 -155 246.889 545.074 -155 248.308 545.074 -155 225.149 585.902 -155 193.821 585.902 -155 218.189 198.036 -155 150.135 218.45 -155 176.739 218.45 -155 205.139 217.09 -155 205.139 214.131 -155 202.869 198.036 -155 181.893 657.351 -155 -83.7508 648.741 -155 -83.7508 647.144 -155 -87.6068 647.144 -155 -94.8619 657.351 -155 -94.8619 259.278 -155 -223.511 259.278 -155 -199.142 239.22 -155 -183.751 238.864 -155 -183.751 238.864 -155 -207.847 463.418 -155 271.805 463.418 -155 260.694 504.246 -155 260.694 504.246 -155 265.22 488.346 -155 271.805 278.004 -155 249.583 271.5 -155 246.889 260.531 -155 238.472 300.106 -155 238.472 300.106 -155 249.583 200.23 103 -146.389 219.283 103 -146.389 219.283 103 -184.563 210.828 103 -184.563 200.23 103 -170.752 214.131 103 -188.869 210.828 103 -184.563 257.388 103 -184.563 257.388 103 -203.65 233.395 103 -203.65 659.534 103 -108.215 657.492 103 -108.215 657.492 103 -31.8666 676.545 103 -31.8666 676.545 103 -67.1472 447.914 103 254.439 447.914 103 273.526 484.193 103 273.526 524.124 103 256.986 524.124 103 254.439 676.545 103 44.4816 657.492 103 44.4816 657.492 103 120.83 660.108 103 120.83 676.545 103 81.1472 181.178 103 120.83 159.892 103 120.83 170.111 103 145.5 180.473 103 159.004 181.178 103 159.004 638.44 103 -108.215 659.534 103 -108.215 649.889 103 -131.5 638.464 103 -146.389 638.44 103 -146.389 638.44 103 159.004 639.527 103 159.004 649.889 103 145.5 660.108 103 120.83 638.44 103 120.83 573.949 102 227.361 563.389 102 227.361 563.389 102 205.139 601.563 102 205.139 601.563 102 206.172 143.474 102 49.5828 162.561 102 49.5828 162.561 102 116.25 157.995 102 116.25 143.474 102 81.1928 219.822 102 207.235 214.131 102 202.869 181.77 102 160.694 219.26 102 160.694 219.822 102 161.426 592.08 -155 189.08 626.73 -155 143.923 626.73 -155 175.681 612.652 -155 194.028 606.316 -155 194.028 585.902 -155 193.821 592.08 -155 189.08 606.316 -155 194.028 585.902 -155 194.028 657.492 103 -108.215 638.44 103 -108.215 638.44 103 -81.418 648.584 103 -56.9283 657.492 103 -50.9536 648.584 103 -56.9283 651.883 103 -31.8666 657.492 103 -31.8666 657.492 103 -50.9536 198.036 -155 181.893 177.622 -155 155.289 177.622 -155 149.583 198.036 -155 149.583 95.9662 -155 -305.973 177.622 -155 -305.973 177.622 -155 -128.195 95.9662 -155 -128.195 612.652 -155 194.028 605.869 -155 202.869 585.902 -155 218.189 585.902 -155 194.028 565.488 -155 -195.485 538.75 -155 -216.002 545.074 -155 -217.084 565.488 -155 -217.084 545.074 -155 -217.084 538.75 -155 -216.002 482.486 -155 -239.307 533.007 -155 -239.307 545.074 -155 -234.308 545.074 -155 -217.084 545.074 -155 -234.308 548.5 -155 -232.889 569.097 -155 -217.084 657.351 -155 -94.8619 665.065 -155 -94.8619 667.366 -155 -89.3064 657.351 -155 -89.3064 657.351 -155 -83.7508 657.351 -155 -89.3064 667.558 -155 -89.3064 667.558 -155 -83.7508 95.9662 -155 -305.973 95.9662 -155 -360 196 -155 -360 196 -155 -305.973 177.622 -155 -305.973 196 -155 -305.973 196 -155 -165.239 177.622 -155 -161.529 198.036 -155 -150.418 177.622 -155 -150.418 177.622 -155 -161.529 196 -155 -165.239 198.036 -155 -161.529 198.036 -155 -161.529 196 -155 -165.239 201.679 -155 -172.64 226.048 -155 -172.64 217.522 -155 -161.529 198.036 -155 -161.529 217.522 -155 -161.529 208.996 -155 -150.418 198.036 -155 -150.418 177.622 -155 -150.418 208.996 -155 -150.418 191.944 -155 -128.195 177.622 -155 -128.195 504.246 -155 244.293 504.246 -155 260.694 483.832 -155 260.694 476.646 -155 255.726 483.832 -155 260.694 463.418 -155 260.694 463.418 -155 257.467 476.646 -155 255.726 217.09 -155 205.139 248.848 -155 205.139 281.25 -155 230.002 279.692 -155 238.472 260.531 -155 238.472 281.25 -155 230.002 300.106 -155 237.812 300.106 -155 238.472 279.692 -155 238.472 600.335 103 -184.563 600.335 103 -193.115 562.229 103 -222.354 562.229 103 -184.563 152.599 103 73.1121 152.599 103 63.5686 141.447 103 63.5686 142.704 103 73.1121 143.332 103 77.8838 147.836 103 77.8838 147.836 103 73.1121 142.704 103 73.1121 144.263 103 80.2697 145.454 103 80.2697 145.454 103 77.8838 144.263 103 77.8838 145.454 103 82.6556 147.836 103 82.6556 147.836 103 77.8838 145.454 103 77.8838 147.836 103 82.6556 152.599 103 82.6556 152.599 103 73.1121 147.836 103 73.1121 152.599 103 82.6556 162.125 103 82.6556 162.125 103 63.5686 152.599 103 63.5686 162.125 103 63.5686 162.125 103 44.4816 138.935 103 44.4816 141.447 103 63.5686 171.416 103 70.9283 162.125 103 63.5686 162.125 103 120.83 181.178 103 120.83 181.178 103 94.4946 162.125 103 63.5686 171.416 103 70.9283 167.935 103 44.4816 162.125 103 44.4816 159.892 103 120.83 162.125 103 120.83 162.125 103 82.6556 144.08 103 82.6556 209.765 103 197.178 219.283 103 197.178 219.283 103 178.091 195.119 103 178.091 473.928 103 245.584 466.966 103 254.439 524.124 103 254.439 524.124 103 235.352 498.63 103 235.352 466.966 103 254.439 473.928 103 245.584 447.914 103 249.009 447.914 103 254.439 657.492 103 63.5686 648.584 103 70.9283 638.44 103 95.418 638.44 103 120.83 657.492 103 120.83 648.584 103 70.9283 657.492 103 63.5686 657.492 103 44.4816 652.065 103 44.4816 581.282 103 221.735 605.869 103 202.869 610.235 103 197.178 581.282 103 197.178 563.536 103 235.352 524.124 103 235.352 524.124 103 256.986 548.5 103 246.889 143.073 103 78.6953 143.073 103 80.2697 144.263 103 80.2697 144.263 103 79.0767 143.439 103 78.6929 144.263 103 79.0767 144.263 103 77.8838 143.332 103 77.8838 143.439 103 78.6929 145.454 103 80.2697 143.092 103 80.2697 144.08 103 82.6556 145.454 103 82.6556 410 103 -240 409.809 103 -260.911 352.651 103 -260.911 352.651 103 -232.45 410 103 -240 447.914 103 -235.009 447.914 103 -260.911 409.809 103 -260.911 409.809 103 273.526 410 103 254 352.651 103 246.45 352.651 103 273.526 409.809 103 273.526 447.914 103 273.526 447.914 103 249.009 410 103 254 657 103 7 676.545 103 6.3075 676.545 103 -31.8666 651.883 103 -31.8666 657 103 7 652.065 103 44.4816 676.545 103 44.4816 676.545 103 6.3075 -463.9 -200 -52.5964 -463.9 -200 -29.7105 -476.569 -200 -39.4315 -486.67 -200 -52.5964 492.682 102 -305.973 257.996 102 -305.973 257.996 102 -361 439.496 102 -361 157.995 102 116.25 181.648 102 116.25 181.648 102 160.536 170.111 102 145.5 639.737 102 -128.195 651.258 102 -128.195 669.667 102 -83.7508 639.737 102 -83.7508 582.476 102 205.139 582.476 102 182.916 601.563 102 182.916 601.563 102 205.139 563.389 102 205.139 563.389 102 197.974 582.476 102 183.328 582.476 102 205.139 257.996 102 -217.084 133 102 -217.084 133 102 -361 257.996 102 -361 171.416 102 70.9283 181.648 102 95.6301 181.648 102 116.25 162.561 102 116.25 162.561 102 71.8051 162.561 102 71.8051 162.561 102 49.5828 168.606 102 49.5828 171.416 102 70.9283 345.655 -155 -261.529 410 -155 -270 474.345 -155 -261.529 633.002 -155 135.75 647.144 -155 138.472 647.144 -155 149.583 626.73 -155 149.583 626.73 -155 143.923 647.144 -155 101.607 647.144 -155 138.472 633.002 -155 135.75 626.73 -155 175.681 626.73 -155 149.583 646.756 -155 149.583 504.246 -155 265.22 504.246 -155 244.293 538.75 -155 230.002 545.074 -155 227.361 545.074 -155 248.308 545.074 -155 227.361 538.75 -155 230.002 545.074 -155 225.149 227.92 -155 189.08 248.848 -155 205.139 218.45 -155 205.139 218.45 -155 182.916 227.92 -155 189.08 218.45 -155 182.916 218.45 -155 176.739 504.246 -155 -239.307 504.246 -155 -251.22 533.007 -155 -239.307 585.902 -155 -194.862 585.902 -155 -179.82 566.299 -155 -194.862 201.679 -155 -172.64 214.131 -155 -188.869 238.864 -155 -207.847 238.864 -155 -183.478 227.92 -155 -175.08 218.45 -155 -172.64 227.92 -155 -175.08 226.048 -155 -172.64 218.45 -155 -172.64 152.5 -155 7 152.5 -63 7 152.5 -63 7 161.274 -155 -59.6459 161.274 -155 73.6459 161.274 -63 -59.6459 161.274 -63 -59.6459 161.274 -63 73.6459 161.274 -63 73.6459 186.998 -155 -121.75 186.998 -155 135.75 186.998 -63 -121.75 186.998 -63 -121.75 186.998 -63 135.75 186.998 -63 135.75 227.92 -155 -175.08 227.92 -155 189.08 227.92 -63 -175.08 227.92 -63 -175.08 227.92 -63 189.08 227.92 -63 189.08 281.25 -155 -216.002 281.25 -155 230.002 281.25 -63 -216.002 281.25 -63 -216.002 281.25 -63 230.002 281.25 -63 230.002 343.354 -155 -241.726 343.354 -155 255.726 343.354 -63 -241.726 343.354 -63 -241.726 343.354 -63 255.726 343.354 -63 255.726 410 -155 -250.5 410 -155 264.5 410 -63 -250.5 410 -63 -250.5 410 -63 264.5 410 -63 264.5 476.646 -155 -241.726 476.646 -155 255.726 476.646 -63 -241.726 476.646 -63 -241.726 476.646 -63 255.726 476.646 -63 255.726 538.75 -155 -216.002 538.75 -155 230.002 538.75 -63 -216.002 538.75 -63 -216.002 538.75 -63 230.002 538.75 -63 230.002 592.08 -155 -175.08 592.08 -155 189.08 592.08 -63 -175.08 592.08 -63 -175.08 592.08 -63 189.08 592.08 -63 189.08 633.002 -155 -121.75 633.002 -155 135.75 633.002 -63 -121.75 633.002 -63 -121.75 633.002 -63 135.75 633.002 -63 135.75 658.726 -155 -59.6459 658.726 -155 73.6459 658.726 -63 -59.6459 658.726 -63 -59.6459 658.726 -63 73.6459 658.726 -63 73.6459 667.5 -155 7 667.5 -63 7 667.5 -63 7 95.9662 -155 -128.195 95.9662 -155 -39.3063 95.9662 -155 5.13825 152.745 -155 5.13825 191.944 -155 -128.195 278.004 -155 249.583 328.525 -155 249.583 331.654 -155 271.805 340.934 -155 -260.907 340.934 -155 -250.418 340.934 -155 -240.724 340.934 -155 271.805 345.655 -155 -261.529 422.59 -155 -261.529 422.59 -155 271.805 463.418 -155 257.467 463.418 -155 271.805 474.345 -155 -261.529 481.693 -155 -260.561 482.486 -155 -239.307 483.832 -155 -259.675 483.832 -155 -250.418 504.246 -155 -251.22 504.246 -155 -250.418 504.246 -155 -239.307 585.902 -155 -204.189 585.902 -155 -183.751 585.902 -155 -179.82 605.869 -155 -188.869 647.144 -155 -117.084 647.144 -155 -94.8619 647.144 -155 -87.6068 647.144 -155 101.607 647.144 -155 149.077 648.741 -155 -83.7508 649.889 -155 -131.5 649.889 -155 145.5 655.86 -155 -117.084 665.065 -155 -94.8619 667.558 -155 -83.7508 667.558 -155 -39.3063 667.558 -155 5.13825 667.558 -155 49.5828 667.558 -155 94.0273 667.558 -155 102.843 136.794 -155 5.13825 152.5 -155 7 161.032 -155 71.8051 136.794 -155 71.8051 136.794 -155 5.13825 152.745 -155 5.13825 152.5 -155 7 186.998 -155 135.75 197.613 -155 149.583 177.622 -155 149.583 177.622 -155 138.472 177.622 -155 138.472 177.622 -155 113.114 186.998 -155 135.75 157.208 -155 71.8051 161.274 -155 73.6459 177.622 -155 113.114 177.622 -155 155.289 170.111 -155 145.5 157.208 -155 114.35 157.208 -155 71.8051 161.032 -155 71.8051 161.274 -155 73.6459 142.441 -155 78.6993 157.208 -155 82.9162 157.208 -155 114.35 142.441 -155 78.6993 136.794 -155 71.8051 157.208 -155 71.8051 157.208 -155 82.9162 142.441 -155 78.6993 136.794 -155 78.7359 136.794 -155 71.8051 300.106 -155 249.583 300.106 -155 237.812 328.525 -155 249.583 143.073 103 6.3075 163 103 7 170.63 103 -50.9536 143.073 103 -50.9536 167.935 103 44.4816 163 103 7 143.073 103 6.3075 134.091 103 6.3075 134 103 7 138.935 103 44.4816 134.091 103 6.3075 143.073 103 6.3075 143.073 103 -61.9136 200.23 103 -121.894 219.026 103 -146.389 200.23 103 -146.389 282.254 103 -203.65 257.388 103 -203.65 257.388 103 -184.57 340.962 103 -260.911 479.038 103 -260.911 410 103 -270 562.229 103 -184.863 562.229 103 -203.65 537.746 103 -203.65 219.283 103 -184.563 219.283 103 -146.723 235.345 103 -167.655 235.345 103 -167.655 257.379 103 -184.563 219.283 103 -184.563 143.073 103 78.6953 142.441 103 78.6993 143.073 103 80.2238 181.178 103 159.004 217.963 103 159.004 196.092 103 130.5 196.092 103 130.5 181.178 103 94.4946 181.178 103 159.004 219.283 103 197.178 255.574 103 197.178 235.345 103 181.655 235.345 103 181.655 219.283 103 160.723 219.283 103 197.178 257.388 103 235.352 286.5 103 220.908 255.574 103 197.178 209.765 103 197.178 214.131 103 202.869 256.464 103 235.352 257.388 103 235.352 321.37 103 235.352 286.5 103 220.908 256.464 103 235.352 271.5 103 246.889 335.807 103 273.526 352.651 103 273.526 352.651 103 254.439 346.072 103 245.584 321.37 103 235.352 352.651 103 254.439 352.651 103 246.45 346.072 103 245.584 562.229 103 -203.65 562.229 103 -222.737 495.286 103 -222.737 533.5 103 -206.908 543.177 103 -203.65 533.5 103 -206.908 537.746 103 -203.65 543.177 103 -203.65 600.335 103 -184.563 562.621 103 -184.563 584.655 103 -167.655 584.655 103 -167.655 600.335 103 -147.222 600.335 103 -184.563 638.44 103 -146.389 600.974 103 -146.389 623.908 103 -116.5 623.908 103 -116.5 638.44 103 -81.418 638.44 103 -146.389 562.229 103 235.352 562.229 103 198.863 533.5 103 220.908 533.5 103 220.908 498.63 103 235.352 562.229 103 235.352 638.44 103 159.004 638.44 103 95.418 623.908 103 130.5 623.908 103 130.5 602.037 103 159.004 638.44 103 159.004 584.655 103 181.655 600.335 103 197.178 610.235 103 197.178 639.527 103 159.004 602.037 103 159.004 584.655 103 181.655 564.426 103 197.178 600.335 103 197.178 -500 10 -96 -500 10 -96 -500 10 -96 -500 10 -96 -486.359 -200 -142.009 -486.359 -200 -142.009 -486.359 -200 -142.009 -486.094 10 -163.428 -486.094 10 -93.615 -485.95 -200 -142.009 -485.95 -200 -97.3027 -485.95 -200 -52.5964 -485.95 -200 -52.5964 -485.95 -200 -52.5964 -481.768 10 -46.2075 -481.768 10 -46.2075 -480.938 10 -188.43 -476.569 -200 -154.769 -476.569 -200 -154.769 -463.9 -200 -142.009 -463.9 -200 -52.5964 -463.9 -200 -30.2432 -463.9 -200 -30.2432 -463.631 10 -188.43 -463.631 10 -46.2075 -445.554 10 -360 -445.554 10 -360 -445.554 10 -360 -443.75 -200 -137.136 -443.75 -200 -137.136 -441.167 10 -46.2075 -425.564 -200 -142.009 -424.072 -155 -360 -424.072 -155 -360 -424.072 -155 -360 -424.072 -155 -360 -420 -200 -178.2 -420 -200 -178.2 -420 -200 -143.5 -420 -200 -143.5 -419.8 -200 -178.174 -419.8 -200 -164.362 -419.8 -200 -30.2432 -418.704 10 -188.43 -418.704 10 -46.2075 -399.294 -200 -175.474 -399.294 -200 -175.474 -396.24 10 -46.2075 -380 -200 -167.482 -380 -200 -167.482 -380 -200 -167.482 -378.864 -200 -72.25 -378.864 -200 -72.25 -378.864 -200 -72.25 -378.864 -200 -72.25 -378.864 10 -119.75 -378.864 10 -119.75 -378.864 10 -119.75 -378.864 10 -119.75 -375.934 -200 -164.362 -375.7 -200 -164.183 -375.7 -200 -142.009 -375.7 -200 -84.0574 -375.7 -200 -74.9496 -375.7 -200 -52.5964 -375.7 -200 -30.2432 -375.7 -200 -30.2432 -373.777 10 -188.43 -373.777 10 -46.2075 -372.5 -200 -96 -372.5 -200 -96 -363.431 -200 -154.769 -363.431 -200 -154.769 -358.232 10 -46.2075 -358.232 10 -46.2075 -353.65 -200 -142.009 -353.65 -200 -97.3027 -353.65 -200 -74.9496 -353.641 -200 -142.009 -351.313 10 -188.43 -351.313 10 -93.615 -350.718 -200 -138.2 -350.718 -200 -138.2 -350.718 -200 -138.2 -350.718 10 -56 -350.718 10 -56 -342.869 -200 -74.9496 -342.869 -200 -74.9496 -342.726 -200 -75.2944 -342.726 -200 -75.2944 -341.317 -200 -88.2 -341.317 -200 -88.2 -341.317 -200 -88.2 -341.317 -155 -86 -341.317 -155 -86 -341.317 -155 -86 -341.317 10 -86 -341.317 10 -86 -341.317 10 -86 -340.118 -200 -97.3027 -340 -200 -98.2 -340 -200 -98.2 -337 10 -188.43 -337 10 -86 -337 10 -86 -337 10 -86 -47.0104 -155 -86 -47.0104 -155 -86 -47.0104 -155 -86 95.9662 -155 -360 95.9662 -155 5.13825 95.9662 -155 27.3605 95.9662 -155 33.9717 96 -155 34 96 -155 34 96 -155 34 96 -155 79 96 -155 79 96 -155 79 96 155 34 96 155 34 96 155 34 96 155 34 96 155 34 136.794 -155 5.13825 136.794 -155 78.7359 142.441 -155 78.6993 142.441 -155 78.6993 142.441 -155 78.6993 142.441 103 78.6993 142.441 103 78.6993 142.441 103 78.6993 143.073 103 -50.9536 143.439 103 -64.6929 143.439 103 -64.6929 143.439 103 78.6929 143.439 103 78.6929 162.125 103 -50.9536 170.111 -155 145.5 170.111 -155 145.5 170.111 103 145.5 170.111 103 145.5 170.63 103 -50.9536 171.416 103 -56.9283 180.473 103 159.004 189.893 103 171.281 189.893 103 171.281 190.662 -155 172.283 191.431 103 173.285 191.431 103 173.285 195.119 103 178.091 196 -155 -360 196 -155 -360 196 -155 -165.239 196 -155 -165.239 196 103 -165.239 196 103 -165.239 196 103 -165.239 196 103 -165.239 196.092 103 -116.5 200.23 103 -170.752 200.23 103 -165.476 200.23 103 -127.302 200.23 103 -121.894 200.23 103 159.004 200.23 103 178.091 214.131 -155 -188.869 214.131 -155 202.869 214.131 103 -188.869 214.131 103 202.869 214.131 103 202.869 217.963 103 159.004 219.283 103 160.723 219.283 103 178.091 227.5 -394.042 -380 227.5 -394.042 -380 227.5 -394.042 -380 233.395 103 -203.65 259.278 -155 -223.511 259.278 -155 -217.084 259.278 -155 -199.142 271.5 -155 -232.889 271.5 -155 -232.889 271.5 103 -232.889 271.5 103 -232.889 276.441 103 -203.65 281.25 -155 -216.002 282.254 103 -203.65 286.5 103 -206.908 338.307 -155 -260.561 338.307 -155 -260.561 338.307 103 -260.561 338.307 103 -260.561 340.934 -155 -260.907 340.934 -155 -240.724 346.072 103 -231.584 352.651 103 -260.911 352.651 103 -241.824 352.651 103 -232.45 394.042 227.5 -380 394.042 227.5 -380 394.042 227.5 -380 410 -155 -270 410 103 -270 447.914 103 -260.911 447.914 103 -241.824 447.914 103 -235.009 466.966 103 -260.911 466.966 103 -241.824 473.928 103 -231.584 481.693 -155 -260.561 481.693 103 -260.561 481.693 103 -260.561 548.5 -155 -232.889 548.5 -155 246.889 548.5 -155 246.889 548.5 103 -232.889 548.5 103 -232.889 548.5 103 246.889 548.5 103 246.889 561.73 103 -222.737 562.229 103 198.863 562.229 103 216.265 562.229 103 235.352 563.536 103 235.352 564.426 103 197.178 574.281 103 227.107 574.281 103 227.107 575.283 -155 226.338 575.283 -155 226.338 576.285 103 225.569 576.285 103 225.569 581.282 103 197.178 581.282 103 216.265 581.282 103 221.735 600.335 103 -193.115 600.335 103 -165.476 600.335 103 -147.222 600.974 103 -146.389 605.869 -155 -188.869 605.869 -155 -188.869 605.869 -155 202.869 605.869 -155 202.869 605.869 103 -188.869 605.869 103 -188.869 605.869 103 202.869 619.387 103 -171.251 619.387 103 -165.476 619.387 103 -146.389 628.569 103 -159.285 628.569 103 -159.285 629.338 -155 -158.283 629.338 -155 -158.283 630.107 103 -157.281 630.107 103 -157.281 638.44 103 -146.421 638.44 103 -146.389 649.889 -155 -131.5 649.889 103 -131.5 649.889 103 -131.5 -500 -200 -96 -500 -200 -96 -498.03 -200 -105.552 -498.03 -200 -105.552 -498.03 -155 -105.552 -497.274 -200 -75.2944 -497.274 -200 -75.2944 -497.274 10 -75.2944 -497.274 10 -75.2944 -489.282 -200 -138.2 -489.282 -200 -138.2 -489.282 -200 -56 -489.282 -200 -56 -489.282 -155 -138.2 -489.282 10 -56 -489.282 10 -56 -486.67 -200 -52.5964 -486.094 10 -51.8453 -476.569 -200 -154.769 -476.569 -155 -154.769 -476.569 -200 -39.4315 -476.569 10 -39.4315 -476.569 10 -39.4315 -467.5 -200 -96 -467.5 10 -96 -463.9 -200 -29.7105 -461.136 -200 -119.75 -461.136 -200 -72.25 -461.136 10 -119.75 -461.136 10 -72.25 -460 -200 -167.482 -460 -200 -26.718 -460 -200 -26.718 -460 -155 -167.482 -460 10 -26.718 -460 10 -26.718 -455 0 -380 -455 0 -380 -455 0 -360 -443.75 -200 -54.8638 -443.75 10 -137.136 -443.75 10 -54.8638 -440.706 -200 -175.474 -440.706 -200 -18.726 -440.706 -200 -18.726 -440.706 -155 -175.474 -440.706 10 -18.726 -440.706 10 -18.726 -439.496 -117.763 -380 -439.496 117.763 -380 -439.496 117.763 -380 -439.496 117.763 -360 -420 -200 -178.2 -420 -200 -48.5 -420 -200 -16 -420 -200 -16 -420 -155 -178.2 -420 10 -143.5 -420 10 -48.5 -420 10 -16 -420 10 -16 -399.294 -200 -175.474 -399.294 -155 -175.474 -399.294 -200 -18.726 -399.294 -200 -18.726 -399.294 10 -18.726 -399.294 10 -18.726 -396.25 -200 -137.136 -396.25 -200 -54.8638 -396.25 10 -137.136 -396.25 10 -54.8638 -394.042 -227.5 -380 -394.042 -227.5 -380 -394.042 -227.5 -360 -394.042 227.5 -380 -394.042 227.5 -380 -394.042 227.5 -360 -380 -200 -26.718 -380 -200 -26.718 -380 -155 -167.482 -380 10 -26.718 -380 10 -26.718 -378.864 -200 -119.75 -378.864 10 -72.25 -375.7 -200 -30.0175 -372.5 10 -96 -363.431 -200 -154.769 -363.431 -200 -39.4315 -363.431 -200 -39.4315 -363.431 -155 -154.769 -363.431 10 -39.4315 -363.431 10 -39.4315 -350.718 -200 -56 -350.718 -200 -56 -350.718 -155 -138.2 -342.726 -200 -118.906 -342.726 -155 -118.906 -342.726 10 -75.2944 -341.317 -200 -86 -341.317 -155 -88.2 -340 -155 -98.2 -337 10 -360 -321.734 -321.734 -380 -321.734 -321.734 -380 -321.734 -321.734 -360 -321.734 321.734 -380 -321.734 321.734 -380 -321.734 321.734 -360 -227.5 -394.042 -380 -227.5 -394.042 -380 -227.5 -394.042 -360 -227.5 394.042 -380 -227.5 394.042 -380 -227.5 394.042 -360 -192 155 -360 -192 155 -86 -117.763 -439.496 -380 -117.763 -439.496 -380 -117.763 -439.496 -360 -117.763 439.496 -380 -117.763 439.496 -380 -117.763 439.496 -360 -47.0104 -155 -86 -47.0104 155 -86 0 -455 -380 0 -455 -380 0 -455 -360 0 455 -380 0 455 -380 0 455 -360 96 155 79 117.763 -439.496 -380 117.763 -439.496 -380 117.763 -439.496 -360 117.763 439.496 -380 117.763 439.496 -380 117.763 439.496 -360 134 103 7 134 155 7 137.204 -25 185.02 137.204 -25 185.02 138.977 -90 187.374 138.977 -90 187.374 138.977 40 187.374 138.977 40 187.374 143.439 155 -64.6929 143.439 155 78.6929 143.824 -137.583 193.805 143.824 -137.583 193.805 143.824 87.5833 193.805 143.824 87.5833 193.805 150.443 -155 202.59 150.443 -155 202.59 150.443 -155 202.59 150.443 105 202.59 157.063 -137.583 211.375 157.063 -137.583 211.375 157.063 87.5833 211.375 157.063 87.5833 211.375 161.91 -90 217.806 161.91 -90 217.806 161.91 40 217.806 161.91 40 217.806 163 103 7 163 155 7 163 155 7 163 155 7 163.683 -25 220.16 163.683 -25 220.16 166.95 155 37 166.95 155 37 171.111 103 -131.5 171.111 155 -131.5 171.416 103 -56.9283 171.416 103 70.9283 171.416 147.857 70.9283 171.416 147.857 70.9283 171.416 155 -56.9283 171.416 155 -56.9283 177.269 -25 154.828 179.063 -90 157.167 179.063 40 157.167 183.966 -137.583 163.556 183.966 87.5833 163.556 190.662 -155 172.283 190.662 -155 172.283 196 103 -163.936 196 155 -163.936 196.092 103 -116.5 196.092 103 130.5 196.092 135.316 130.5 196.092 135.316 130.5 196.092 155 -116.5 196.092 155 -116.5 197.359 -137.583 181.01 197.359 87.5833 181.01 197.601 103 165.472 198.362 105 166.481 199.122 103 167.49 202.261 -90 187.399 202.261 40 187.399 204.055 -25 189.737 214.131 -155 202.869 227.5 -394.042 -380 227.5 -394.042 -360 227.5 394.042 -380 227.5 394.042 -380 227.5 394.042 -360 235.345 103 -167.655 235.345 103 181.655 235.345 124.546 181.655 235.345 124.546 181.655 235.345 155 -167.655 235.345 155 -167.655 271.5 -155 246.889 271.5 103 246.889 286.5 103 -206.908 286.5 103 220.908 286.5 116.282 220.908 286.5 116.282 220.908 286.5 155 -206.908 286.5 155 -206.908 309 109 -94 309 109 -94 309 109 108 309 109 108 321.734 -321.734 -380 321.734 -321.734 -380 321.734 -321.734 -360 321.734 321.734 -380 321.734 321.734 -380 321.734 321.734 -360 331.654 -155 271.805 335.807 103 273.526 338.307 -155 274.561 338.307 -155 274.561 338.307 103 274.561 338.307 103 274.561 346.072 103 -231.584 346.072 103 245.584 346.072 111.088 245.584 346.072 111.088 245.584 346.072 155 -231.584 346.072 155 -231.584 394.042 -227.5 -380 394.042 -227.5 -380 394.042 -227.5 -360 394.042 227.5 -380 394.042 227.5 -360 410 -155 284 410 -155 284 410 103 -240 410 103 254 410 103 284 410 103 284 410 109.316 254 410 109.316 254 410 155 -240 410 155 -240 439.496 -117.763 -380 439.496 -117.763 -380 439.496 -117.763 -360 439.496 117.763 -380 439.496 117.763 -380 439.496 117.763 -360 455 0 -380 455 0 -380 455 0 -360 473.928 103 -231.584 473.928 103 245.584 473.928 111.088 245.584 473.928 111.088 245.584 473.928 155 -231.584 473.928 155 -231.584 481.693 -155 274.561 481.693 -155 274.561 481.693 103 274.561 481.693 103 274.561 484.193 103 273.526 488.346 -155 271.805 511 109 -94 511 109 -94 511 109 -94 511 109 108 511 109 108 511 109 108 533.5 103 -206.908 533.5 103 220.908 533.5 116.282 220.908 533.5 116.282 220.908 533.5 155 -206.908 533.5 155 -206.908 557.828 -25 239.731 560.167 -90 237.937 560.167 40 237.937 566.556 -137.583 233.034 566.556 87.5833 233.034 568.472 103 219.399 569.481 105 218.638 570.49 103 217.878 575.283 -155 226.338 575.283 -155 226.338 584.01 -137.583 219.641 584.01 87.5833 219.641 584.655 103 -167.655 584.655 103 181.655 584.655 124.546 181.655 584.655 124.546 181.655 584.655 155 -167.655 584.655 155 -167.655 588.02 -25 279.797 588.02 -25 279.797 590.374 -90 278.023 590.374 -90 278.023 590.374 40 278.023 590.374 40 278.023 590.399 -90 214.739 590.399 40 214.739 592.737 -25 212.945 596.805 -137.583 273.177 596.805 -137.583 273.177 596.805 87.5833 273.177 596.805 87.5833 273.177 605.59 -155 266.557 605.59 -155 266.557 605.59 -155 266.557 605.59 105 266.557 614.375 -137.583 259.937 614.375 -137.583 259.937 614.375 87.5833 259.937 614.375 87.5833 259.937 615.945 -25 -175.737 617.739 -90 -173.399 617.739 40 -173.399 620.806 -90 255.09 620.806 -90 255.09 620.806 40 255.09 620.806 40 255.09 620.878 103 -153.49 621.638 105 -152.481 622.399 103 -151.472 622.641 -137.583 -167.01 622.641 87.5833 -167.01 623.16 -25 253.317 623.16 -25 253.317 623.908 103 -116.5 623.908 103 130.5 623.908 135.316 130.5 623.908 135.316 130.5 623.908 155 -116.5 623.908 155 -116.5 629.338 -155 -158.283 629.338 -155 -158.283 636.034 -137.583 -149.556 636.034 87.5833 -149.556 640.937 -90 -143.167 640.937 40 -143.167 642.731 -25 -140.828 648.584 103 -56.9283 648.584 103 70.9283 648.584 147.857 70.9283 648.584 147.857 70.9283 648.584 155 -56.9283 648.584 155 -56.9283 649.889 -155 145.5 649.889 103 145.5 653.05 155 37 653.05 155 37 656.317 -25 -206.16 656.317 -25 -206.16 657 103 7 657 155 7 657 155 7 657 155 7 658.09 -90 -203.806 658.09 -90 -203.806 658.09 40 -203.806 658.09 40 -203.806 662.937 -137.583 -197.375 662.937 -137.583 -197.375 662.937 87.5833 -197.375 662.937 87.5833 -197.375 667.558 -155 -88.8431 667.558 -155 102.843 669.557 -155 -188.59 669.557 -155 -188.59 669.557 -155 -188.59 669.557 105 -188.59 676.177 -137.583 -179.805 676.177 -137.583 -179.805 676.177 87.5833 -179.805 676.177 87.5833 -179.805 676.545 103 -67.1472 676.545 103 81.1472 677.561 -155 -64.6929 677.561 -155 -64.6929 677.561 -155 78.6929 677.561 -155 78.6929 677.561 103 -64.6929 677.561 103 -64.6929 677.561 103 78.6929 677.561 103 78.6929 681.023 -90 -173.374 681.023 -90 -173.374 681.023 40 -173.374 681.023 40 -173.374 682.796 -25 -171.02 682.796 -25 -171.02 687 -155 7 687 -155 7 687 103 7 687 103 7 -445.554 -71.7501 -360 -445.348 -155 -361 -445.348 -73.3166 -361 -439.496 -117.763 -361 -424.072 -155 -361 143.073 103 -61.9136 196 155 -360 340.962 103 -260.911 479.038 103 -260.911 495.286 103 -222.737 677.911 102 -62.0378 687 102 7 677.911 102 76.0378 614.934 102 -128.195 584.655 102 -167.655 601.563 102 -172.64 618.321 102 -172.64 649.889 102 -131.5 651.258 102 -128.195 584.655 102 -167.655 578.16 102 -172.64 601.563 102 -172.64 639.737 102 -128.195 639.737 102 -78.2862 623.908 102 -116.5 623.908 102 -116.5 614.934 102 -128.195 639.737 102 -128.195 578.16 102 -172.64 533.5 102 -206.908 563.389 102 -217.084 578.597 102 -217.084 605.869 102 -188.869 618.321 102 -172.64 533.5 102 -206.908 508.933 102 -217.084 563.389 102 -217.084 639.737 102 138.472 623.908 102 130.5 648.221 102 71.8051 677.911 102 71.8051 677.911 102 76.0378 677.561 102 78.6929 652.8 102 138.472 639.737 102 138.472 617.791 102 138.472 623.908 102 130.5 601.563 102 182.916 621.178 102 182.916 605.869 102 202.869 601.563 102 206.172 601.563 102 182.916 584.655 102 181.655 617.791 102 138.472 652.8 102 138.472 649.889 102 145.5 621.178 102 182.916 601.563 102 182.916 583.012 102 182.916 584.655 102 181.655 563.389 102 227.361 517.922 102 227.361 533.5 102 220.908 533.5 102 220.908 563.389 102 197.974 563.389 102 227.361 181.648 102 138.472 196.092 102 130.5 219.26 102 160.694 181.648 102 160.694 181.648 102 138.472 181.648 102 95.6301 196.092 102 130.5 133 102 -217.084 133 102 -128.195 133 154 -361 133 154 -361 136.95 154 37 136.95 154 37 136.95 154 37 143.474 102 -128.195 143.474 102 -39.3063 143.474 102 5.13825 143.474 102 49.5828 163 102 7 163 102 7 168.606 102 49.5828 170.111 131.158 145.5 170.111 131.158 145.5 171.416 102 70.9283 181.648 102 -217.084 181.648 102 -128.195 196.092 102 130.5 219.822 102 161.426 219.822 102 182.916 219.822 102 207.235 235.345 102 -167.655 235.345 102 -167.655 235.345 102 181.655 235.345 102 181.655 235.345 123.546 181.655 235.345 123.546 181.655 246.051 102 227.361 257.996 102 -305.973 257.996 102 -217.084 257.996 102 227.361 286.5 102 220.908 286.5 102 220.908 302.078 102 227.361 331.654 102 271.805 331.654 102 271.805 334.344 102 -305.973 334.344 102 271.805 346.072 102 245.584 346.072 102 245.584 346.072 154 -231.584 346.072 154 -231.584 410 108.316 254 410 108.316 254 410.693 102 -305.973 410.693 102 271.805 439.496 154 -361 473.928 102 -231.584 473.928 102 -231.584 473.928 102 245.584 473.928 102 245.584 487.041 102 -305.973 487.041 102 271.805 488.346 102 271.805 488.346 102 271.805 492.682 102 -305.973 533.5 102 -206.908 533.5 102 220.908 533.5 154 -206.908 533.5 154 -206.908 573.949 102 227.361 578.597 102 -217.084 584.655 102 -167.655 584.655 102 181.655 584.655 123.546 181.655 584.655 123.546 181.655 623.908 102 -116.5 623.908 102 130.5 639.737 102 -83.7508 648.221 102 71.8051 648.584 102 -56.9283 648.584 102 -56.9283 648.584 102 70.9283 648.584 102 70.9283 649.889 131.158 145.5 649.889 154 -131.5 649.889 154 -131.5 658.824 102 -83.7508 658.824 102 -61.5286 658.824 102 71.8051 669.667 102 -83.7508 677.561 102 -64.6929 677.561 102 -64.6929 677.911 102 -61.5286 677.911 102 5.13825 677.911 102 71.8051 687 154 7 687 154 7 687 154 7 133 102 -361 133 102 -361 133 102 7 133 102 7 133 154 -361 133 154 7 142.439 102 78.6929 142.439 102 78.6929 142.439 145.223 78.6929 143.474 102 81.1928 163 154 7 166.95 154 37 170.111 102 145.5 171.416 102 -56.9283 171.416 146.857 70.9283 171.416 154 -56.9283 196.092 102 -116.5 196.092 134.316 130.5 196.092 154 -116.5 214.131 102 202.869 214.131 119.08 202.869 235.345 154 -167.655 271.5 102 246.889 271.5 109.813 246.889 286.5 102 -206.908 286.5 115.282 220.908 286.5 154 -206.908 338.307 102 274.561 338.307 102 274.561 338.307 103.987 274.561 346.072 102 -231.584 346.072 110.088 245.584 410 102 -240 410 102 254 410 102 284 410 102 284 410 154 -240 439.496 102 -361 439.496 102 -361 439.496 154 -361 439.496 154 -361 473.928 110.088 245.584 473.928 154 -231.584 481.693 102 274.561 481.693 102 274.561 481.693 103.987 274.561 533.5 115.282 220.908 548.5 102 246.889 548.5 109.813 246.889 584.655 154 -167.655 605.869 102 -188.869 605.869 102 202.869 605.869 119.08 202.869 605.869 154 -188.869 623.908 134.316 130.5 623.908 154 -116.5 648.584 146.857 70.9283 648.584 154 -56.9283 649.889 102 -131.5 649.889 102 145.5 649.889 131.158 145.5 653.05 154 37 657 102 7 657 154 7 677.561 102 78.6929 677.561 145.223 78.6929 677.561 154 -64.6929 683.05 154 37 687 102 7 508.933 102 -217.084 517.922 102 227.361 639.737 102 -78.2862 677.911 102 -62.0378 -37.8302 -94.3988 -175.5 37.8302 -94.3988 -175.5 94.3987 -37.8302 -175.5 94.3987 37.8302 -175.5 37.8302 94.3988 -175.5 -37.8302 94.3988 -175.5 -94.3988 37.8302 -175.5 -94.3988 -37.8302 -175.5 -94.3988 -37.8302 -210.5 -94.3988 37.8302 -210.5 -37.8302 94.3988 -210.5 37.8302 94.3988 -210.5 94.3987 37.8302 -210.5 94.3987 -37.8302 -210.5 37.8302 -94.3988 -210.5 -37.8302 -94.3988 -210.5 -37.8302 -94.3988 -175.5 -37.8302 -94.3988 -210.5 37.8302 -94.3988 -210.5 37.8302 -94.3988 -175.5 37.8302 -94.3988 -175.5 37.8302 -94.3988 -210.5 94.3987 -37.8302 -210.5 94.3987 -37.8302 -175.5 94.3987 -37.8302 -175.5 94.3987 -37.8302 -210.5 94.3987 37.8302 -210.5 94.3987 37.8302 -175.5 94.3987 37.8302 -175.5 94.3987 37.8302 -210.5 37.8302 94.3988 -210.5 37.8302 94.3988 -175.5 37.8302 94.3988 -175.5 37.8302 94.3988 -210.5 -37.8302 94.3988 -210.5 -37.8302 94.3988 -175.5 -37.8302 94.3988 -175.5 -37.8302 94.3988 -210.5 -94.3988 37.8302 -210.5 -94.3988 37.8302 -175.5 -94.3988 37.8302 -175.5 -94.3988 37.8302 -210.5 -94.3988 -37.8302 -210.5 -94.3988 -37.8302 -175.5 -94.3988 -37.8302 -175.5 -94.3988 -37.8302 -210.5 -37.8302 -94.3988 -210.5 -37.8302 -94.3988 -175.5 97 75.534 -210.5 75.534 97 -210.5 -75.5341 97 -210.5 -97 75.534 -210.5 -97 -75.534 -210.5 -75.5341 -97 -210.5 75.534 -97 -210.5 97 -75.5341 -210.5 97 -75.5341 -221.5 75.534 -97 -221.5 -75.5341 -97 -221.5 -97 -75.534 -221.5 -97 75.534 -221.5 -75.5341 97 -221.5 75.534 97 -221.5 97 75.534 -221.5 97 75.534 -210.5 97 75.534 -221.5 75.534 97 -221.5 75.534 97 -210.5 75.534 97 -210.5 75.534 97 -221.5 -75.5341 97 -221.5 -75.5341 97 -210.5 -75.5341 97 -210.5 -75.5341 97 -221.5 -97 75.534 -221.5 -97 75.534 -210.5 -97 75.534 -210.5 -97 75.534 -221.5 -97 -75.534 -221.5 -97 -75.534 -210.5 -97 -75.534 -210.5 -97 -75.534 -221.5 -75.5341 -97 -221.5 -75.5341 -97 -210.5 -75.5341 -97 -210.5 -75.5341 -97 -221.5 75.534 -97 -221.5 75.534 -97 -210.5 75.534 -97 -210.5 75.534 -97 -221.5 97 -75.5341 -221.5 97 -75.5341 -210.5 97 -75.5341 -210.5 97 -75.5341 -221.5 97 75.534 -221.5 97 75.534 -210.5 307.461 -282.678 -267.08 307.461 -275 -267.08 262.87 -275 -245.331 262.87 -282.678 -245.331 307.461 -365 -267.08 307.461 -357.097 -267.08 262.87 -357.097 -245.331 262.87 -365 -245.331 294.31 -357.322 -294.044 294.31 -365 -294.044 249.718 -365 -272.295 249.718 -357.322 -272.295 262.87 -275 -245.331 244.618 -275 -236.43 244.618 -365 -236.43 262.87 -365 -245.331 325.51 -275 -275.883 307.461 -275 -267.08 307.461 -365 -267.08 325.51 -365 -275.883 312.359 -365 -302.847 294.31 -365 -294.044 294.31 -275 -294.044 312.359 -275 -302.847 244.618 -365 -236.43 231.467 -365 -263.393 312.359 -365 -302.847 325.51 -365 -275.883 325.51 -365 -275.883 312.359 -365 -302.847 312.359 -275 -302.847 325.51 -275 -275.883 325.51 -275 -275.883 312.359 -275 -302.847 231.467 -275 -263.393 244.618 -275 -236.43 244.618 -275 -236.43 231.467 -275 -263.393 231.467 -365 -263.393 244.618 -365 -236.43 249.718 -365 -272.295 231.467 -365 -263.393 231.467 -275 -263.393 249.718 -275 -272.295 294.31 -275 -294.044 294.31 -282.903 -294.044 249.718 -282.903 -272.295 249.718 -275 -272.295 249.718 -357.322 -272.295 249.718 -344.919 -272.295 249.718 -295.306 -272.295 249.718 -282.903 -272.295 250.543 -327.725 -272.697 250.543 -327.725 -272.697 262.87 -357.097 -245.331 262.87 -344.694 -245.331 262.87 -295.081 -245.331 262.87 -282.678 -245.331 263.694 -312.275 -245.733 263.694 -312.275 -245.733 272.014 -357.322 -283.169 272.014 -282.903 -283.169 285.165 -357.097 -256.206 285.165 -282.678 -256.206 293.283 -312.275 -293.543 293.283 -312.275 -293.543 294.31 -357.322 -294.044 294.31 -344.919 -294.044 294.31 -295.306 -294.044 294.31 -282.903 -294.044 298.272 -340.225 -262.598 298.272 -340.225 -262.598 298.272 -299.775 -262.598 298.272 -299.775 -262.598 307.461 -357.097 -267.08 307.461 -344.694 -267.08 307.461 -295.081 -267.08 307.461 -282.678 -267.08 250.543 -312.275 -272.697 258.706 -340.225 -276.678 258.706 -299.775 -276.678 263.694 -327.725 -245.733 271.857 -340.225 -249.715 271.857 -299.775 -249.715 271.913 -345 -283.12 271.913 -295 -283.12 285.064 -345 -256.156 285.064 -295 -256.156 285.121 -340.225 -289.562 285.121 -299.775 -289.562 293.283 -327.725 -293.543 306.434 -327.725 -266.579 306.434 -312.275 -266.579 334.892 -155 -274.896 317.357 -155 -310.848 222.085 -155 -264.38 239.62 -155 -228.429 239.62 -285 -228.429 222.085 -285 -264.38 317.357 -285 -310.848 334.892 -285 -274.896 222.085 -155 -264.38 222.085 -285 -264.38 239.62 -285 -228.429 239.62 -155 -228.429 239.62 -155 -228.429 239.62 -285 -228.429 334.892 -285 -274.896 334.892 -155 -274.896 334.892 -155 -274.896 334.892 -285 -274.896 317.357 -285 -310.848 317.357 -155 -310.848 317.357 -155 -310.848 317.357 -285 -310.848 222.085 -285 -264.38 222.085 -155 -264.38 355.204 -345 -112.349 370.504 -340.225 -114.5 384.146 -327.725 -107.246 390.92 -312.275 -93.3586 388.237 -299.775 -78.1425 377.122 -295 -67.4095 361.822 -299.775 -65.2592 348.179 -312.275 -72.5129 341.406 -327.725 -86.4 344.089 -340.225 -101.616 245.611 -345 -337.048 232.403 -340.225 -330.606 224.241 -327.725 -326.625 224.241 -312.275 -326.625 232.403 -299.775 -330.606 245.611 -295 -337.048 258.818 -299.775 -343.489 266.981 -312.275 -347.471 266.981 -327.725 -347.471 258.818 -340.225 -343.489 370.504 -340.225 -114.5 258.818 -340.225 -343.489 266.981 -327.725 -347.471 384.146 -327.725 -107.246 384.146 -327.725 -107.246 266.981 -327.725 -347.471 266.981 -312.275 -347.471 390.92 -312.275 -93.3586 390.92 -312.275 -93.3586 266.981 -312.275 -347.471 258.818 -299.775 -343.489 388.237 -299.775 -78.1425 388.237 -299.775 -78.1425 258.818 -299.775 -343.489 245.611 -295 -337.048 377.122 -295 -67.4095 377.122 -295 -67.4095 245.611 -295 -337.048 232.403 -299.775 -330.606 361.822 -299.775 -65.2592 361.822 -299.775 -65.2592 232.403 -299.775 -330.606 224.241 -312.275 -326.625 348.179 -312.275 -72.5129 348.179 -312.275 -72.5129 224.241 -312.275 -326.625 224.241 -327.725 -326.625 341.406 -327.725 -86.4 341.406 -327.725 -86.4 224.241 -327.725 -326.625 232.403 -340.225 -330.606 344.089 -340.225 -101.616 344.089 -340.225 -101.616 232.403 -340.225 -330.606 245.611 -345 -337.048 355.204 -345 -112.349 355.204 -345 -112.349 245.611 -345 -337.048 258.818 -340.225 -343.489 370.504 -340.225 -114.5 10 -155 -305 10 -155 -305 10 -155 -337 10 -155 -337 10.0001 -381 -305 10.0001 -381 -305 10.0001 -381 -337 10.0001 -381 -337 200.018 -155 -337 200.018 -155 -337 200.018 -381 -337 200.018 -381 -337 202.274 -155 -305 202.274 -155 -305 202.274 -381 -305 202.274 -381 -305 222.085 -155 -264.38 222.085 -155 -264.38 222.085 -381 -264.38 222.085 -381 -264.38 232.871 -155 -269.641 232.871 -155 -269.641 232.871 -381 -269.641 232.871 -381 -269.641 162 -155 -337 162 -155 -337 162 -155 -337 162 -56.9999 -337 162 -56.9999 -337 162 -56.9999 -337 170.45 -155 -64.1873 170.45 -155 -64.1873 170.45 -56.9999 -64.1872 170.45 -56.9999 -64.1872 195.225 -155 -124 195.225 -155 -124 286 -56.9999 -214.774 286 -56.9999 -214.774 345.813 -155 -239.55 345.813 -155 -239.55 361.22 -155 -337 361.22 -155 -337 361.22 -56.9999 -337 361.22 -56.9999 -337 410 -56.9999 -248 410 -56.9999 -248 474.187 -155 -239.55 474.187 -155 -239.55 474.187 -56.9999 -239.55 474.187 -56.9999 -239.55 162 -155 7.49988 162 -155 7.49988 162 -56.9999 7.49988 162 -56.9999 7.49988 195.226 -56.9999 -124 234.637 -155 -175.362 234.637 -56.9999 -175.362 286 -155 -214.774 345.813 -56.9999 -239.55 410 -155 -248 552.312 -155 -203.104 552.312 -155 -203.104 552.313 -56.9999 -203.104 552.313 -56.9999 -203.104 -403 -155 -350 -403 -155 -350 -403 -155 -350 -403 10 -350 -403 10 -350 -342.564 -155 -337 -342.564 -155 -337 -64.7048 241.481 -337 -64.7048 241.481 -337 10.0001 -375.125 -337 10.0001 -375.125 -337 10.0001 -375.125 -350 10.0001 -375.125 -350 416.851 180.802 -350 416.851 180.802 -350 416.851 180.802 -350 418.869 176.057 -337 418.869 176.057 -337 418.869 176.057 -337 427.785 -155 -350 427.785 -155 -350 427.785 -155 -350 -403 10 -350 -403 10 -337 -403 10 -337 -403 10 -337 0 250 -350 0 250 -350 150 200 -337 150 200 -337 200.018 -285 -337 200.018 -285 -337 200.018 -381 -350 200.018 -381 -350 200.018 -381 -350 250 -285 -350 250 -285 -350 250 -285 -350 250 -285 -337 250 -285 -337 250 -285 -337 342.566 -155 -337 342.566 -155 -337 -403 -155 -337 -403 -155 -337 -403 -155 -337 -342.564 -155 -350 -342.564 -155 -350 -342.564 -155 -350 -342.564 -155 -337 -288.033 -241.688 -350 -288.033 -241.688 -350 -241.688 -288.033 -337 -241.688 -288.033 -337 -188 -325.626 -350 -188 -325.626 -350 -128.6 -353.324 -337 -128.6 -353.324 -337 -125 216.506 -350 -125 216.506 -350 -125 216.506 -337 -125 216.506 -337 64.7048 241.481 -337 64.7048 241.481 -337 150 200 -350 150 200 -350 200.018 -381 -337 200.018 -381 -337 200.018 -381 -337 200.018 -285 -337 200.018 -285 -350 200.018 -285 -350 200.018 -285 -350 342.566 -155 -350 342.566 -155 -350 342.566 -155 -350 342.566 -155 -337 427.785 -155 -337 427.785 -155 -337 427.785 -155 -337 455 0 -350 455 0 -350 455 0 -337 455 0 -337 -369.56 9.99998 -350 -369.56 9.99998 -337 -288.033 -241.688 -337 -241.688 -288.033 -350 -188 -325.626 -337 -164.015 188.677 -350 -164.015 188.677 -337 -128.6 -353.324 -350 -65.2917 -370.288 -350 -65.2917 -370.288 -337 -64.7048 241.481 -350 0 -376 -350 0 -376 -337 0 250 -337 10.0001 -381 -337 10.0001 -381 -337 10.0001 -375.125 -337 10.0001 -381 -350 10.0001 -381 -350 10.0001 -375.125 -350 64.7048 241.481 -350 125 216.506 -350 125 216.506 -337 288.033 -241.688 -350 288.033 -241.688 -337 325.626 -188 -350 325.626 -188 -337 362.75 200 -337 371.853 200 -350 427.56 155.619 -337 427.56 155.619 -350 448.088 -79.0099 -350 448.088 -79.0099 -337 448.088 79.0099 -350 448.088 79.0099 -337 -427.56 -155.619 -350 -427.56 -155.619 -350 -427.56 155.619 -370 -427.56 155.619 -370 -348.55 292.468 -350 -348.55 292.468 -350 -292.468 348.55 -370 -292.468 348.55 -370 0 455 -350 0 455 -350 200 -408.687 -370 200 -408.687 -370 200 -408.687 -350 200 -408.687 -350 227.5 394.042 -370 227.5 394.042 -370 292.468 348.55 -350 292.468 348.55 -350 448.088 -79.0099 -350 448.088 -79.0099 -350 455 0 -370 455 0 -370 -448.087 79.0099 -350 -448.087 79.0099 -350 -427.56 -155.619 -370 -427.56 -155.619 -370 -227.5 -394.042 -370 -227.5 -394.042 -370 -155.619 -427.56 -350 -155.619 -427.56 -350 -79.0099 -448.088 -370 -79.0099 -448.088 -370 200 -408.687 -370 200 -408.687 -350 200 -285 -370 200 -285 -370 200 -285 -370 200 -285 -350 200 -285 -350 200 -285 -350 250 -380.164 -370 250 -380.164 -370 250 -380.164 -370 250 -380.164 -350 250 -380.164 -350 250 -380.164 -350 408.688 200 -370 408.688 200 -370 -455 0 -370 -455 0 -370 -394.042 -227.5 -350 -394.042 -227.5 -350 -394.042 227.5 -350 -394.042 227.5 -350 -348.55 -292.468 -370 -348.55 -292.468 -370 -292.468 -348.55 -350 -292.468 -348.55 -350 -227.5 394.042 -370 -227.5 394.042 -370 -227.5 394.042 -350 -227.5 394.042 -350 -79.0099 448.088 -370 -79.0099 448.088 -370 79.0099 -448.088 -370 79.0099 -448.088 -370 79.0099 -448.088 -350 79.0099 -448.088 -350 79.01 448.088 -370 79.01 448.088 -370 155.619 427.56 -350 155.619 427.56 -350 250 -285 -370 250 -285 -370 250 -285 -370 250 -285 -350 250 -285 -350 250 -285 -350 348.55 -292.468 -370 348.55 -292.468 -370 348.55 292.468 -370 348.55 292.468 -370 394.042 -227.5 -350 394.042 -227.5 -350 394.042 227.5 -350 394.042 227.5 -350 427.785 -155 -370 427.785 -155 -370 448.088 79.0099 -350 448.088 79.0099 -350 -455 0 -350 -448.088 -79.0099 -370 -448.088 -79.0099 -350 -448.087 79.0099 -370 -427.56 155.619 -350 -394.042 -227.5 -370 -394.042 227.5 -370 -348.55 -292.468 -350 -348.55 292.468 -370 -292.468 348.55 -350 -292.468 -348.55 -370 -227.5 -394.042 -350 -155.619 -427.56 -370 -155.619 427.56 -370 -155.619 427.56 -350 -79.0099 -448.088 -350 -79.0099 448.088 -350 0 -455 -370 0 -455 -350 0 455 -370 79.01 448.088 -350 155.619 -427.56 -370 155.619 -427.56 -350 155.619 427.56 -370 227.5 394.042 -350 292.468 348.55 -370 292.468 -348.55 -370 292.468 -348.55 -350 348.55 -292.468 -350 348.55 292.468 -350 394.042 -227.5 -370 394.042 227.5 -370 408.688 200 -350 427.56 155.619 -370 427.56 155.619 -350 427.785 -155 -350 448.088 -79.0099 -370 448.088 79.0099 -370 455 0 -350 646.652 -57.0002 -63.4106 622.176 -57.0002 -122.5 583.241 -57.0002 -173.241 532.5 -57.0002 -212.176 473.411 -57.0002 -236.652 410 -57.0002 -245 346.589 -57.0002 -236.652 287.5 -57.0002 -212.176 236.759 -57.0002 -173.241 197.824 -57.0002 -122.5 173.348 -57.0002 -63.4106 165 -57.0002 0 173.348 -57.0002 63.4106 197.824 -57.0002 122.5 236.759 -57.0002 173.241 287.5 -57.0002 212.176 346.589 -57.0002 236.652 410 -57.0002 245 473.411 -57.0002 236.652 532.5 -57.0002 212.176 583.241 -57.0002 173.241 622.176 -57.0002 122.5 646.652 -57.0002 63.4106 655 -57.0002 0 655 -119 0 646.652 -119 63.4106 622.176 -119 122.5 583.241 -119 173.241 532.5 -119 212.176 473.411 -119 236.652 410 -119 245 346.589 -119 236.652 287.5 -119 212.176 236.759 -119 173.241 197.824 -119 122.5 173.348 -119 63.4106 165 -119 0 173.348 -119 -63.4106 197.824 -119 -122.5 236.759 -119 -173.241 287.5 -119 -212.176 346.589 -119 -236.652 410 -119 -245 473.411 -119 -236.652 532.5 -119 -212.176 583.241 -119 -173.241 622.176 -119 -122.5 646.652 -119 -63.4106 646.652 -57.0002 -63.4106 646.652 -119 -63.4106 622.176 -119 -122.5 622.176 -57.0002 -122.5 622.176 -57.0002 -122.5 622.176 -119 -122.5 583.241 -119 -173.241 583.241 -57.0002 -173.241 583.241 -57.0002 -173.241 583.241 -119 -173.241 532.5 -119 -212.176 532.5 -57.0002 -212.176 532.5 -57.0002 -212.176 532.5 -119 -212.176 473.411 -119 -236.652 473.411 -57.0002 -236.652 473.411 -57.0002 -236.652 473.411 -119 -236.652 410 -119 -245 410 -57.0002 -245 410 -57.0002 -245 410 -119 -245 346.589 -119 -236.652 346.589 -57.0002 -236.652 346.589 -57.0002 -236.652 346.589 -119 -236.652 287.5 -119 -212.176 287.5 -57.0002 -212.176 287.5 -57.0002 -212.176 287.5 -119 -212.176 236.759 -119 -173.241 236.759 -57.0002 -173.241 236.759 -57.0002 -173.241 236.759 -119 -173.241 197.824 -119 -122.5 197.824 -57.0002 -122.5 197.824 -57.0002 -122.5 197.824 -119 -122.5 173.348 -119 -63.4106 173.348 -57.0002 -63.4106 173.348 -57.0002 -63.4106 173.348 -119 -63.4106 165 -119 0 165 -57.0002 0 165 -57.0002 0 165 -119 0 173.348 -119 63.4106 173.348 -57.0002 63.4106 173.348 -57.0002 63.4106 173.348 -119 63.4106 197.824 -119 122.5 197.824 -57.0002 122.5 197.824 -57.0002 122.5 197.824 -119 122.5 236.759 -119 173.241 236.759 -57.0002 173.241 236.759 -57.0002 173.241 236.759 -119 173.241 287.5 -119 212.176 287.5 -57.0002 212.176 287.5 -57.0002 212.176 287.5 -119 212.176 346.589 -119 236.652 346.589 -57.0002 236.652 346.589 -57.0002 236.652 346.589 -119 236.652 410 -119 245 410 -57.0002 245 410 -57.0002 245 410 -119 245 473.411 -119 236.652 473.411 -57.0002 236.652 473.411 -57.0002 236.652 473.411 -119 236.652 532.5 -119 212.176 532.5 -57.0002 212.176 532.5 -57.0002 212.176 532.5 -119 212.176 583.241 -119 173.241 583.241 -57.0002 173.241 583.241 -57.0002 173.241 583.241 -119 173.241 622.176 -119 122.5 622.176 -57.0002 122.5 622.176 -57.0002 122.5 622.176 -119 122.5 646.652 -119 63.4106 646.652 -57.0002 63.4106 646.652 -57.0002 63.4106 646.652 -119 63.4106 655 -119 0 655 -57.0002 0 655 -57.0002 0 655 -119 0 646.652 -119 -63.4106 646.652 -57.0002 -63.4106 -405.842 22.9997 -106.286 -414.592 22.9997 -112.643 -425.408 22.9997 -112.643 -434.158 22.9997 -106.286 -437.5 22.9997 -96 -434.158 22.9997 -85.7137 -425.408 22.9997 -79.3565 -414.592 22.9997 -79.3565 -405.842 22.9997 -85.7137 -402.5 22.9997 -96 -402.5 9.99969 -96 -405.842 9.99969 -85.7137 -414.592 9.99969 -79.3565 -425.408 9.99969 -79.3565 -434.158 9.99969 -85.7137 -437.5 9.99969 -96 -434.158 9.99969 -106.286 -425.408 9.99969 -112.643 -414.592 9.99969 -112.643 -405.842 9.99969 -106.286 -405.842 22.9997 -106.286 -405.842 9.99969 -106.286 -414.592 9.99969 -112.643 -414.592 22.9997 -112.643 -414.592 22.9997 -112.643 -414.592 9.99969 -112.643 -425.408 9.99969 -112.643 -425.408 22.9997 -112.643 -425.408 22.9997 -112.643 -425.408 9.99969 -112.643 -434.158 9.99969 -106.286 -434.158 22.9997 -106.286 -434.158 22.9997 -106.286 -434.158 9.99969 -106.286 -437.5 9.99969 -96 -437.5 22.9997 -96 -437.5 22.9997 -96 -437.5 9.99969 -96 -434.158 9.99969 -85.7137 -434.158 22.9997 -85.7137 -434.158 22.9997 -85.7137 -434.158 9.99969 -85.7137 -425.408 9.99969 -79.3565 -425.408 22.9997 -79.3565 -425.408 22.9997 -79.3565 -425.408 9.99969 -79.3565 -414.592 9.99969 -79.3565 -414.592 22.9997 -79.3565 -414.592 22.9997 -79.3565 -414.592 9.99969 -79.3565 -405.842 9.99969 -85.7137 -405.842 22.9997 -85.7137 -405.842 22.9997 -85.7137 -405.842 9.99969 -85.7137 -402.5 9.99969 -96 -402.5 22.9997 -96 -402.5 22.9997 -96 -402.5 9.99969 -96 -405.842 9.99969 -106.286 -405.842 22.9997 -106.286 - - - - - - - - - - 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.976901 0 -0.213691 -0.976901 0 -0.213691 -0.976901 0 -0.213691 -0.976901 0 -0.213691 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0 1 0 0 1 0 0 1 0 0 1 1 0 0 1 0 0 1 0 0 1 0 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 -1 0 0 0 0 -1 0 1 0 -1 0 0 0 0 1 0 1 0 0 1 0 -1 0 0 0 0 -1 -1 0 0 0 0 1 -1 0 0 0 0 -1 0 1 0 -1 0 0 0 0 -1 0 1 0 -1 0 0 0 0 1 0 1 0 -1 0 0 0 0 1 0 1 0 -1 0 0 0 0 -1 -1 0 0 0 0 -1 -1 0 0 0 0 1 -1 0 0 0 0 1 0 0 -1 0 1 0 1 0 0 0 0 -1 0 1 0 1 0 0 0 0 1 0 1 0 1 0 0 0 0 1 0 1 0 1 0 0 0 0 -1 1 0 0 0 0 -1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 1 0 0 0 -1 0 1 0 1 0 0 0 0 1 0 1 0 1 0 0 0 1 0 0 0 -1 1 0 0 0 0 1 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 -1 0 0 -0.499985 0 -0.866034 -1 0 0 -0.499985 0 0.866034 -1 0 0 -0.499985 0 -0.866034 -1 0 0 -0.499985 0 0.866034 -0.707083 0 -0.70713 -0.707083 0 0.70713 -0.707083 0 -0.70713 -0.707083 0 0.70713 -0.866034 0 -0.499985 0 0 -1 -0.866034 0 0.499985 0 0 1 -0.866034 0 -0.499985 0 0 -1 -0.866034 0 0.499985 0 0 1 0 0 -1 0.866034 0 -0.499985 0 0 1 0.866034 0 0.499985 0 0 -1 0.866034 0 -0.499985 0 0 1 0.866034 0 0.499985 0.707083 0 -0.70713 0.707083 0 0.70713 0.707083 0 -0.70713 0.707083 0 0.70713 0.499985 0 -0.866034 1 0 0 0.499985 0 0.866034 1 0 0 0.499985 0 -0.866034 1 0 0 0.499985 0 0.866034 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -1 0 0 -1 0 0 0 1 0 -0.866034 0 -0.499985 -0.866034 0 0.499985 -0.866034 0 -0.499985 0 1 0 -0.866034 0 0.499985 0 1 0 -0.499985 0 -0.866034 -0.499985 0 0.866034 -0.499985 0 -0.866034 0 1 0 -0.499985 0 0.866034 0 1 0 0 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0 1 0 0.499985 0 -0.866034 0.499985 0 0.866034 0 1 0 0.499985 0 -0.866034 0 1 0 0.499985 0 0.866034 0.866034 0 -0.499985 0.866034 0 0.499985 0 1 0 0.866034 0 -0.499985 0 1 0 0.866034 0 0.499985 1 0 0 0 1 0 1 0 0 0 1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 -1 0 0 0 -1 0 0 0 1 -1 0 0 0 -1 0 -1 0 0 0 0 1 0 1 0 -1 0 0 0 1 0 0 0 1 -1 0 0 0 -1 0 0 0 1 -1 0 0 0 -1 0 -1 0 0 0 -1 0 0 0 1 -1 0 0 0 -1 0 -1 0 0 0 0 1 0 1 0 -1 0 0 0 1 0 -1 0 0 0 0 1 0 1 0 -1 0 0 0 1 0 0 -1 0 0 0 1 1 0 0 0 -1 0 1 0 0 0 -1 0 0 0 1 1 0 0 0 -1 0 1 0 0 0 0 1 0 1 0 1 0 0 0 1 0 1 0 0 0 0 1 0 1 0 1 0 0 0 1 0 1 0 0 0 0 1 0 -1 0 0 0 1 1 0 0 0 -1 0 1 0 0 0 0 1 0 1 0 1 0 0 0 1 0 1 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 -1 0 0 -0.499985 -0.866034 0 -1 0 0 -0.499985 -0.866034 0 -1 0 0 -0.499985 0.866034 0 -1 0 0 -0.499985 0.866034 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.866034 -0.499985 0 0 -1 0 -0.866034 -0.499985 0 0 -1 0 -0.866034 0.499985 0 0 1 0 -0.866034 0.499985 0 0 1 0 0 -1 0 0.866034 -0.499985 0 0 -1 0 0.866034 -0.499985 0 0 1 0 0.866034 0.499985 0 0 1 0 0.866034 0.499985 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.707083 0.70713 0 0.707083 0.70713 0 0.499985 -0.866034 0 1 0 0 0.499985 -0.866034 0 1 0 0 0.499985 0.866034 0 1 0 0 0.499985 0.866034 0 1 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 -1 0 0 0 0 1 -0.866034 -0.499985 0 0 0 1 -0.866034 0.499985 0 0 0 1 -0.499985 -0.866034 0 0 0 1 -0.499985 0.866034 0 0 0 1 0 -1 0 0 0 1 0 0 1 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0.499985 -0.866034 0 0 0 1 0.499985 0.866034 0 0 0 1 0.866034 -0.499985 0 0 0 1 0.866034 0.499985 0 0 0 1 0.866034 0.499985 0 0 0 1 1 0 0 0 0 1 0 0 1 0 0 1 -1 0 0 -0.866034 -0.499985 0 -0.866034 0.499985 0 -0.499985 -0.866034 0 -0.499985 0.866034 0 0 -1 0 0 1 0 0.499985 -0.866034 0 0.499985 0.866034 0 0.866034 -0.499985 0 1 0 0 0 0 1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 0 -1 0 1 0 0 0.965932 0 0.258797 0.965932 0 -0.258797 0 -1 0 0.965932 0 0.258797 0 -1 0 0.965932 0 -0.258797 0.866034 0 0.499985 0.866034 0 -0.499985 0 -1 0 0.866034 0 0.499985 0 -1 0 0.866034 0 -0.499985 0.707083 0 0.70713 0.70713 0 -0.707083 0 -1 0 0.707083 0 0.70713 0 -1 0 0.70713 0 -0.707083 0.499985 0 0.866034 0.499985 0 -0.866034 0 -1 0 0.499985 0 0.866034 0 -1 0 0.499985 0 -0.866034 0.258797 0 0.965932 0.258797 0 -0.965932 0 -1 0 0.258797 0 0.965932 0 -1 0 0.258797 0 -0.965932 0 0 1 0 0 -1 0 -1 0 0 0 1 0 -1 0 0 0 -1 -0.258797 0 0.965932 -0.258797 0 -0.965932 -0.258797 0 0.965932 0 -1 0 -0.258797 0 -0.965932 0 -1 0 -0.499985 0 0.866034 -0.499985 0 -0.866034 -0.499985 0 0.866034 0 -1 0 -0.499985 0 -0.866034 0 -1 0 -0.707083 0 0.70713 -0.70713 0 -0.707083 -0.707083 0 0.70713 0 -1 0 -0.70713 0 -0.707083 0 -1 0 -0.866034 0 0.499985 -0.866034 0 -0.499985 -0.866034 0 0.499985 0 -1 0 -0.866034 0 -0.499985 0 -1 0 -0.965932 0 0.258797 -0.965932 0 -0.258797 -0.965932 0 0.258797 0 -1 0 -0.965932 0 -0.258797 0 -1 0 -1 0 0 -1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.992763 0 -0.12009 -0.973078 0 -0.230476 -0.798651 0 0.601794 0 1 0 -0.973078 0 -0.230476 -0.798651 0 0.601794 0 -1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 -0.973078 0 -0.230476 -0.798651 0 0.601794 0 -1 0 -0.798651 0 0.601794 0 1 0 0 1 0 -0.798651 0 0.601794 0 -1 0 0 -1 0 0 -1 0 -0.798651 0 0.601794 0 -1 0 0 1 0 0 1 0 -0.973078 0 -0.230476 0 0 -1 0 1 0 0 -1 0 0.499985 0 0.866034 0 1 0 0 -1 0 -0.973078 0 -0.230476 0 -1 0 0 0 -1 0 0 1 -0.798651 0 0.601794 0 -1 0 0 -1 0 0 0 1 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 -0.798651 0 0.601794 0 -1 0 0 1 0 -0.798651 0 0.601794 0 -1 0 0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.798651 0 0.601794 0 -1 0 0 1 0 -0.866034 0 0.499985 -0.798651 0 0.601794 0 -1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.798651 0 0.601794 0 -1 0 0 1 0 0 1 0 -1 0 0 0 -1 0 -0.798651 0 0.601794 0 -1 0 -0.798651 0 0.601794 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 -0.798651 0 0.601794 0 -1 0 0.866034 0 -0.499985 0 1 0 0.866034 0 0.499985 -0.798651 0 0.601794 0 -1 0 0 -1 0 0.965932 0 0.258797 -0.798651 0 0.601794 0 -1 0 0.997859 0 0.0654012 0 -1 0 0 0 1 1 0 0 0 0 1 0 1 0 0.991449 0 0.130497 0 -1 0 0 -1 0 1 0 0 0 1 0 -0.382672 0.923884 0 0 0 1 0 1 0 -0.798651 0 0.601794 0 -1 0 0 0 1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -0.642781 0 0.76605 0 -1 0 -1 0 0 0 -1 0 0.00646992 0 0.999979 -1 0 0 -0.642781 0 0.76605 0 0 1 0 1 0 0.00646992 0 0.999979 0 -1 0 0 -1 0 -0.923884 0 0.382672 -0.798651 0 0.601794 0.00646992 0 0.999979 -0.923884 0 0.382672 -0.798651 0 0.601794 0.00646992 0 0.999979 0 1 0 0 1 0 0.965932 0 0.258797 0.00646992 0 0.999979 0.991449 0 -0.130497 0 1 0 -0.823967 0 0.566637 -0.798651 0 0.601794 -0.831314 0 0.555803 -0.798651 0 0.601794 0 1 0 0 1 0 0 1 0 -0.798651 0 0.601794 0 1 0 -0.798651 0 0.601794 -0.798651 0 0.601794 0 1 0 0 1 0 0 0 1 0.946936 0 0.321421 -0.79336 0 -0.608753 0.946936 0 0.321421 -0.798651 0 0.601794 -0.79336 0 -0.608753 0 1 0 0.946936 0 0.321421 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.707083 0 -0.70713 -0.798651 0 0.601794 -0.707083 0 -0.70713 -0.798651 0 0.601794 -0.7606 0 0.64922 0 1 0 0 1 0 0 1 0 -0.798651 0 0.601794 0 0 -1 0 0 1 0 1 0 0 -1 0 0 -1 0 0 -1 0 -0.499985 0 -0.866034 0 -1 0 -0.499985 0 -0.866034 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 -0.258797 0 -0.965932 0 -1 0 -0.258797 0 -0.965932 0 1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.798651 0 0.601794 0 0 -1 0 0 1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.258797 0 -0.965932 0 1 0 0.258797 0 -0.965932 0.499985 0 -0.866034 0.566637 0 0.823967 0.566637 0 0.823967 0 1 0 0.499985 0 -0.866034 0.555803 0 0.831314 0.566637 0 0.823967 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.566637 0 0.823967 0.566637 0 0.823967 0.64922 0 0.7606 0 1 0 0.64922 0 0.7606 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.752048 0 -0.659108 0.7606 0 -0.64922 0.64922 0 0.7606 0.659108 0 0.752048 0 1 0 0.7606 0 -0.64922 0.64922 0 0.7606 0 1 0 0 1 0 0 1 0 0 1 0 0.7606 0 -0.64922 0.7606 0 -0.64922 0.823967 0 -0.566637 0 1 0 0.798651 0 -0.601794 0 1 0 0 1 0 0.823967 0 -0.566637 0.823967 0 -0.566637 0.831314 0 -0.555803 -0.999344 0 -0.0362255 0 -1 0 -0.973078 0 -0.230476 0 -1 0 -0.975277 0 -0.220985 -0.965932 0 0.258797 0 -1 0 -0.965932 0 0.258797 0 1 0 -0.89688 0 -0.442274 0 -1 0 -0.866034 0 0.499985 0 -1 0 -0.89688 0 -0.442274 -0.866034 0 0.499985 0 1 0 0 -1 0 0 1 0 -0.70713 0 -0.707083 -0.70713 0 -0.707083 -0.707083 0 0.70713 -0.707083 0 0.70713 0 1 0 1 0 0 1 0 0 0 -1 0 0.866034 0 0.499985 0.866034 0 -0.499985 0.866034 0 0.499985 0.866034 0 -0.499985 -0.499985 0 -0.866034 -0.499985 0 0.866034 0 -1 0 -0.499985 0 -0.866034 -0.499985 0 0.866034 0 1 0 -1 0 0 0 0 -1 -0.999039 -0.0438246 0 0.499985 0 -0.866034 0.499985 0 0.866034 0.499985 0 -0.866034 -0.258797 0 -0.965932 -0.258797 0 0.965932 0 -1 0 -0.258797 0 -0.965932 -0.258797 0 0.965932 0 1 0 0 0 -1 -0.965932 0.258797 0 0 0 -1 -0.965932 0.258797 0 0 0 -1 0 0 -1 0 -1 0 0 0 1 0 0 -1 0 0 1 0 0 -1 0 0 1 0 1 0 0.258797 0 -0.965932 0.258797 0 -0.965932 0 -1 0 0.258797 0 0.965932 0 1 0 0.258797 0 0.965932 -0.499985 0 0.866034 -0.499985 0 -0.866034 -0.499985 0 0.866034 -0.499985 0 -0.866034 -0.866034 -0.499985 0 0 0 -1 -0.887124 -0.461531 0 -0.866034 0.499985 0 0 0 -1 -0.866034 0.499985 0 0 -1 0 0.499985 0 0.866034 0.499985 0 -0.866034 0 1 0 0.499985 0 0.866034 -0.866034 0 0.499985 -0.866034 0 -0.499985 0 -1 0 -1 0 0 0.707083 0 -0.70713 0 -1 0 0.707083 0 0.70713 0.707083 0 -0.70713 0 1 0 0.707083 0 0.70713 0 -1 0 0.866034 0 0.499985 0.866034 0 -0.499985 0.965932 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0.258797 0.997859 0 0.0654012 0.997859 0 0.0654012 1 0 0 -0.382672 0.923884 0 -0.707083 -0.70713 0 0 0 -1 -0.707083 -0.70713 0 -0.707083 0.70713 0 0 0 -1 -0.707083 0.70713 0 -0.499985 -0.866034 0 0 0 -1 -0.499985 -0.866034 0 -0.499985 0.866034 0 0 0 -1 -0.499985 0.866034 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.258797 -0.965932 0 0 0 -1 -0.258797 -0.965932 0 -0.258797 0.965932 0 0 0 -1 -0.258797 0.965932 0 -0.34199 0 0.939703 -0.34199 0 0.939703 0 -1 0 0 0 -1 0 -1 0 0 0 -1 0 1 0 0 1 0 -1 0 0 0 0 -1 0.258797 -0.965932 0 0.258797 -0.965932 0 0 0 -1 0.258797 0.965932 0 0.258797 0.965932 0 1 0 0 1 0 0 -0.798651 0 0.601794 -0.601794 0 -0.798651 -0.798651 0 0.601794 -0.598376 -0.106265 -0.794137 -0.798651 0 0.601794 -0.598376 0.106265 -0.794137 0.965932 0 0.258797 0.991449 0 -0.130497 -0.798651 0 0.601794 -0.562059 -0.357372 -0.745905 -0.798651 0 0.601794 -0.562059 0.357372 -0.745905 -0.798651 0 0.601794 -0.508805 -0.533982 -0.675263 0.508805 -0.533982 0.675263 -0.798651 0 0.601794 -0.798651 0 0.601794 0.562059 -0.357372 0.745905 -0.798651 0 0.601794 0.562059 0.357372 0.745905 -0.798651 0 0.601794 0.598376 -0.106265 0.794137 -0.798651 0 0.601794 0.598376 0.106265 0.794137 -1 0 0 -1 0 0 0.318522 0.947916 0 0.318522 0.947916 0 -0.798651 0 0.601794 0.601794 0 0.798651 -0.991449 0 0.130497 0.27781 0.958428 0.065096 0.866034 0 0.499985 0.866034 0 0.499985 -0.965932 0 -0.258797 -0.965932 0 0.258797 -0.965932 0 0.258797 0.23484 0.962327 0.137028 -0.965932 0 -0.258797 0.338328 0.936337 0.0938444 -0.601794 0 -0.798651 -0.598376 -0.106265 -0.794137 -0.598376 0.106265 -0.794137 -0.562059 -0.357372 -0.745905 -0.562059 0.357372 -0.745905 -0.508805 -0.533982 -0.675263 0.508805 -0.533982 0.675263 0.946936 0 0.321421 0.946936 0 0.321421 -0.866034 0 -0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 0.238624 0.968991 0.0641499 -0.866034 0 -0.499985 0.336131 0.921132 0.196295 0.562059 -0.357372 0.745905 0.562059 0.357372 0.745905 0.798651 0 -0.601794 0.798651 0 -0.601794 0.798651 0 -0.601794 0.598376 -0.106265 0.794137 0.598376 0.106265 0.794137 0.601794 0 0.798651 -0.752048 0 0.659108 0.499985 -0.866034 0 0.499985 -0.866034 0 0 0 -1 0.499985 0.866034 0 0.499985 0.866034 0 -0.707083 0 -0.70713 -0.707083 0 0.70713 -0.707083 0 0.70713 0.206091 0.978533 -0.000396741 -0.707083 0 -0.70713 0.285623 0.914789 0.285623 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 -0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 0.142369 0.98918 -0.0354015 -0.499985 0 -0.866034 0.196295 0.921132 0.336131 0.19657 0.960596 0.196509 0.19657 0.960596 0.196509 0.18424 0.982712 0.0182195 0.18424 0.982712 0.0182195 0 0 -1 0.707083 -0.70713 0 0.707083 -0.70713 0 0 0 -1 0.707083 0.70713 0 0.707083 0.70713 0 0 -1 0 0 1 0 -0.258797 0 0.965932 0 -1 0 -0.258797 0 0.965932 0 1 0 -0.258797 0 -0.965932 -0.258797 0 0.965932 -0.258797 0 0.965932 0.0676901 0.997149 -0.0333567 -0.258797 0 -0.965932 0.0938444 0.936337 0.338328 0 0 -1 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0 -1 0 0 0 1 0 0 -1 0 0 1 0 0 1 0 1 0 0 0 1 0 0.999875 -0.0158086 0 0 -1 0 0.947916 0.318522 0 0 -1 0.965932 -0.258797 0 0.965932 -0.258797 0 0 0 -1 0.965932 0.258797 0 0.965932 0.258797 0 0 0 -1 1 0 0 1 0 0 0.258797 0 -0.965932 0.258797 0 0.965932 -0.0676901 0.997149 -0.0333567 0.258797 0 0.965932 -0.0938444 0.936337 0.338328 0.258797 0 -0.965932 0 -1 0 0.258797 0 0.965932 0 1 0 0.258797 0 0.965932 0 1 0 0 -1 0 -0.19657 0.960596 0.196509 -0.19657 0.960596 0.196509 -0.19657 0.960596 0.196509 -0.18424 0.982712 0.0182195 -0.18424 0.982712 0.0182195 -0.18424 0.982712 0.0182195 0.499985 0 -0.866034 0.499985 0 0.866034 -0.142369 0.98918 -0.0354015 0.499985 0 0.866034 -0.196295 0.921132 0.336131 0.499985 0 -0.866034 -0.798651 0 0.601794 -0.794114 -0.106265 0.598407 -0.794114 0.106265 0.598407 -0.745905 -0.357372 0.562059 -0.745905 0.357372 0.562059 -0.601794 3.05185e-005 -0.798651 -0.601794 3.05185e-005 -0.798651 -0.601794 3.05185e-005 -0.798651 -0.675263 -0.533982 0.508805 0.675263 -0.533982 -0.508805 0.745905 -0.357372 -0.562059 0.745905 0.357372 -0.562059 0.707083 0 -0.70713 0.707083 0 0.70713 -0.206091 0.978533 -0.000396741 0.707083 0 0.70713 -0.285623 0.914789 0.285623 0.707083 0 -0.70713 -0.798651 0 0.601794 0.601794 0 0.798651 -0.794114 -0.106265 0.598407 0.601794 0 0.798651 -0.794114 0.106265 0.598407 0.601794 0 0.798651 0.794137 -0.106265 -0.598376 0.794137 0.106265 -0.598376 0.798651 0 -0.601794 -0.745905 -0.357372 0.562059 0.601794 0 0.798651 -0.745905 0.357372 0.562059 0.601794 0 0.798651 -0.675263 -0.533982 0.508805 0.601794 0 0.798651 0.675263 -0.533982 -0.508805 0.601794 0 0.798651 0.601794 0 0.798651 0.745905 -0.357372 -0.562059 0.601794 0 0.798651 0.745905 0.357372 -0.562059 -0.601794 0 -0.798651 -0.598376 -0.106265 -0.794137 -0.598376 0.106265 -0.794137 0.601794 0 0.798651 0.794137 -0.106265 -0.598376 0.601794 0 0.798651 0.794137 0.106265 -0.598376 -0.798651 0 0.601794 -0.798651 0 0.601794 -0.798651 0 0.601794 -0.562059 -0.357372 -0.745905 -0.562059 0.357372 -0.745905 0.601794 0 0.798651 0.798651 0 -0.601794 0.866034 0 -0.499985 0.866034 0 0.499985 -0.238624 0.968991 0.0641499 0.866034 0 0.499985 -0.336131 0.921132 0.196295 0.866034 0 -0.499985 -0.508805 -0.533982 -0.675263 0.508805 -0.533982 0.675263 0.562059 -0.357372 0.745905 0.562059 0.357372 0.745905 0.598376 -0.106265 0.794137 0.598376 0.106265 0.794137 0.601794 0 0.798651 0.965932 0 -0.258797 0.965932 0 0.258797 -0.23484 0.962327 0.137028 0.965932 0 0.258797 -0.338328 0.936337 0.0938444 0.965932 0 -0.258797 0.866034 0 0.499985 0.866034 0 0.499985 -0.27781 0.958428 0.065096 0.991449 0 0.130497 -0.601794 0 -0.798651 0.798651 0 -0.601794 1 0 0 -0.318522 0.947916 0 -0.318522 0.947916 0 1 0 0 -0.598376 -0.106265 -0.794137 0.798651 0 -0.601794 -0.598376 0.106265 -0.794137 0.798651 0 -0.601794 -0.562059 -0.357372 -0.745905 0.798651 0 -0.601794 -0.562059 0.357372 -0.745905 0.798651 0 -0.601794 0 -1 0 0 -1 0 -0.508805 -0.533982 -0.675263 0.508805 -0.533982 0.675263 0.798651 0 -0.601794 0.798651 0 -0.601794 0.562059 -0.357372 0.745905 0.798651 0 -0.601794 0.562059 0.357372 0.745905 0.798651 0 -0.601794 0 1 0 0 1 0 0 -1 0 0.965932 0 -0.258797 0 -1 0 0.965932 0 0.258797 0 1 0 0.965932 0 -0.258797 0 1 0 0.965932 0 0.258797 0.598376 -0.106265 0.794137 0.798651 0 -0.601794 0.598376 0.106265 0.794137 0.798651 0 -0.601794 0.601794 0 0.798651 0.798651 0 -0.601794 0 -1 0 1 0 0 0 1 0 1 0 0 -0.887114 -0.461551 -7.27849e-008 -0.965926 -0.258819 -5.56364e-008 0 0 1 0 1 0 0 1 0 0 0 -1 0 0 1 -0.973072 0 -0.2305 0 -1 0 0 -1 0 0.649229 -6.59579e-007 0.760593 0.566642 4.97567e-007 0.823964 -0.760593 3.19461e-007 0.649229 -0.823963 3.76467e-007 0.566643 0.760593 -1.55781e-008 -0.649229 0.823963 2.67267e-007 -0.566643 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0.00647717 1.27356e-006 0.999979 -0.562067 0.357397 -0.745888 0.50883 0.53399 0.675239 -0.745887 0.357397 0.562067 0.675236 0.533997 -0.508826 0.562067 0.357397 0.745888 -0.508829 0.533992 -0.675238 0.94693 0 0.321439 0 1 0 -0.798638 9.19503e-006 0.601811 -0.798638 9.19503e-006 0.601811 -0.798638 9.19503e-006 0.601811 -0.798638 9.19503e-006 0.601811 -0.798638 9.19503e-006 0.601811 -0.798638 9.19503e-006 0.601811 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 0 1 0 -0.991449 0 0.130497 0 0.978552 0.206 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 0 -1 0 -0.866034 0 0.499985 0 0.978552 0.206 0.965932 0 -0.258797 0 -1 0 0 -1 0 0.866034 0 -0.499985 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.707083 0 0.70713 0 -1 0 0.707083 0 -0.70713 0 0.978552 0.206 0.707083 0 -0.70713 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.499985 0 -0.866034 0 -1 0 0 0.978552 0.206 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.258797 0 -0.965932 0 1 0 0.258797 0 0.965932 0 0.978552 0.206 0 0 -1 0 -1 0 0 -1 0 0 1 0 -0.258797 0 0.965932 0 -1 0 -0.258797 0 -0.965932 0 -1 0 0 -1 0 0 -1 0 0 0.978552 0.206 0 -1 0 0 -1 0 -0.499985 0 0.866034 -0.499985 0 -0.866034 -0.499985 0 0.866034 0 1 0 0 -1 0 0 -1 0 -0.707083 0 0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.70713 0 0.978552 0.206 -0.866034 0 0.499985 -0.866034 0 -0.499985 0 -1 0 0 -1 0 -0.965932 0 0.258797 0 -1 0 -0.965932 0 -0.258797 0 -1 0 0 0.978552 0.206 0 1 0 0.866034 0 -0.499985 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.965932 0 -0.258797 0 -1 0 0 -1 0 0 -1 0 0 0.978552 0.206 0 1 0 1 0 0 -1 0 0 0 0 -1 -0.997859 0 0.0654012 0 -1 0 0 0 -1 -0.997859 0 0.0654012 -0.965932 0 0.258797 0 -1 0 -0.965932 0 0.258797 0 -1 0 1 0 0 0.991449 0 -0.130497 -0.866034 0 0.499985 0.965932 0 0.258797 0.965932 0 -0.258797 0.965932 0 0.258797 0.866034 0 0.499985 0.866034 0 -0.499985 0.866034 0 0.499985 -0.707083 0 0.70713 -0.707083 0 0.70713 0.707083 0 0.70713 -0.499985 0 0.866034 -0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 -0.866034 0.499985 0 0.866034 -0.258797 0 0.965932 0 -1 0 -0.258797 0 0.965932 0.258797 0 0.965932 0.258797 0 -0.965932 0 0 1 0 0 -1 0 -1 0 0 0 1 0 0 1 0 0 -1 0.719041 0 -0.694968 0 0 -1 0.719041 0 -0.694968 -0.258797 0 -0.965932 -0.258797 0 0.965932 0 -1 0 0.258797 0 0.965932 0.258797 0 0.965932 -0.499985 0 -0.866034 0.499985 0 0.866034 0.499985 0 0.866034 -0.707083 0 0.70713 0.757433 0 -0.652913 0.70713 0 0.707083 0.70713 0 0.707083 0.757433 0 -0.652913 -0.866034 0 -0.499985 -0.866034 0 0.499985 -0.965932 0 -0.258797 -0.965932 0 0.258797 0.866034 0 -0.499985 0.866034 0 0.499985 0.866034 0 0.499985 -0.991449 0 -0.130497 -1 0 0 -1 0 0 0.965932 0 0.258797 0.965932 0 0.258797 0.965932 0 -0.258797 0.991449 0 0.130497 1 0 0 -5.07307e-008 0.97855 0.20601 0 -1 0 0 -1 0 0 1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.382672 -0.923884 0 -0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0.923884 0.382672 0 0.923884 0.382672 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.438372 0 0.898794 0.438372 0 0.898794 -0.438371 0 -0.898794 0.438368 0 0.898796 0.438368 0 0.898796 0.438368 0 0.898796 0.438368 0 0.898796 0.438368 0 0.898796 0.438368 0 0.898796 0.438368 0 0.898796 0.438368 0 0.898796 -0.438368 0 -0.898796 -0.438368 0 -0.898796 -0.438368 0 -0.898796 -0.438368 0 -0.898796 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.898796 0 -0.438368 0.898796 0 -0.438368 0.898796 0 -0.438368 0.898796 0 -0.438368 0 1 0 0 1 0 0 1 0 0 1 0 -0.898796 0 0.438368 -0.898796 0 0.438368 -0.898796 0 0.438368 -0.898796 0 0.438368 -0.438368 0 -0.898796 -0.438368 0 -0.898796 -0.438368 0 -0.898796 -0.438368 0 -0.898796 -0.438371 0 -0.898794 -0.438337 0 -0.898811 -0.438337 0 -0.898811 -0.438337 0 -0.898811 -0.438337 0 -0.898811 -0.438337 0 -0.898811 0.854811 0.309 -0.416913 0.438368 0 0.898796 0.438368 0 0.898796 0.438368 0 0.898796 0.438368 0 0.898796 0.438368 0 0.898796 0.854811 -0.309 -0.416913 -0.438337 0 -0.898811 -0.438337 0 -0.898811 0.438368 0 0.898796 0.438368 0 0.898796 -0.854811 -0.309 0.416913 -0.438337 0 -0.898811 -0.438337 0 -0.898811 -0.438337 0 -0.898811 -0.438337 0 -0.898811 -0.438337 0 -0.898811 -0.528275 0.809032 0.257668 0.438368 0 0.898796 -0.528275 -0.809032 0.257668 0.438368 0 0.898796 0.438368 0 0.898796 0.438368 0 0.898796 0.438368 0 0.898796 0.438368 0 0.898796 0.854811 -0.309 -0.416913 0.528275 0.809032 -0.257668 0.528275 -0.809032 -0.257668 0.854811 0.309 -0.416913 0.528275 0.809032 -0.257668 0.528275 -0.809032 -0.257668 0 1 0 0 -1 0 0 1 0 0 -1 0 -0.528275 0.809032 0.257668 -0.528275 -0.809032 0.257668 -0.854811 0.309 0.416913 -0.854811 0.309 0.416913 -0.854811 -0.309 0.416913 -0.438363 5.83947e-007 -0.898798 0.438381 -6.86109e-007 0.898789 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.898796 0 0.438368 -0.898796 0 0.438368 -0.898796 0 0.438368 -0.898796 0 0.438368 0.438368 0 0.898796 0.438368 0 0.898796 0.438368 0 0.898796 0.438368 0 0.898796 0.898796 0 -0.438368 0.898796 0 -0.438368 0.898796 0 -0.438368 0.898796 0 -0.438368 -0.438368 0 -0.898796 -0.438368 0 -0.898796 -0.438368 0 -0.898796 -0.438368 0 -0.898796 0.309946 -0.707143 0.635517 0.309946 -0.707143 0.635517 0.309946 -0.707143 0.635517 0.309946 -0.707143 0.635517 0.309946 -0.707143 0.635517 0.309946 -0.707143 0.635517 0.309946 -0.707143 0.635517 0.309946 -0.707143 0.635517 0.309946 -0.707143 0.635517 0.309946 -0.707143 0.635517 -0.438368 0 -0.898796 -0.438368 0 -0.898796 -0.438368 0 -0.898796 -0.438368 0 -0.898796 -0.438368 0 -0.898796 -0.438368 0 -0.898796 -0.438368 0 -0.898796 -0.438368 0 -0.898796 -0.438368 0 -0.898796 -0.438368 0 -0.898796 0.528275 -0.809032 -0.257668 0.528275 -0.809032 -0.257668 0.854811 -0.309 -0.416913 0.854811 -0.309 -0.416913 0.854811 -0.309 -0.416913 0.854811 -0.309 -0.416913 0.854811 0.309 -0.416913 0.854811 0.309 -0.416913 0.854811 0.309 -0.416913 0.854811 0.309 -0.416913 0.528275 0.809032 -0.257668 0.528275 0.809032 -0.257668 0.528275 0.809032 -0.257668 0.528275 0.809032 -0.257668 0 1 0 0 1 0 0 1 0 0 1 0 -0.528275 0.809042 0.257637 -0.528275 0.809042 0.257637 -0.528275 0.809042 0.257637 -0.528275 0.809042 0.257637 -0.854811 0.309 0.416913 -0.854811 0.309 0.416913 -0.854811 0.309 0.416913 -0.854811 0.309 0.416913 -0.854811 -0.309 0.416913 -0.854811 -0.309 0.416913 -0.854811 -0.309 0.416913 -0.854811 -0.309 0.416913 -0.528275 -0.809032 0.257668 -0.528275 -0.809032 0.257668 -0.528275 -0.809032 0.257668 -0.528275 -0.809032 0.257668 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.528275 -0.809032 -0.257668 0.528275 -0.809032 -0.257668 -1 0 0 0 0 1 -1 0 0 0 0 -1 -1 0 0 0 0 1 -1 0 0 0 0 -1 0 0 -1 0.898796 0 -0.438368 0 0 -1 0.898796 0 -0.438368 -0.898796 0 0.438368 0 0 1 -0.898796 0 0.438368 0 0 1 -0.898796 0 0.438368 0.438368 0 0.898796 -0.898796 0 0.438368 0.438368 0 0.898796 0.438368 0 0.898796 0.898796 0 -0.438368 0.438368 0 0.898796 0.898796 0 -0.438368 0 -1 0 0 1 0 -1 0 0 0 -1 0 0 0 -1 -1 0 0 0 0 -1 0 1 0 0 -1 0 0.967666 0 0.252235 0 1 0 0.967666 0 0.252235 0 -1 0 0.866034 0 0.499985 0 1 0 0.499985 0 0.866034 0 -1 0 0.258797 0 0.965932 0 -1 0 0.300851 0 -0.953671 0 1 0 0.300851 0 -0.953671 0 1 0 0 0 1 -0.279885 0 0.960033 0 -1 0 -0.279885 0 0.960033 0 1 0 -1 0 0 0.993127 0 0.117038 -1 0 0 0.993127 0 0.117038 0.866034 0 0.499985 0.70713 0 0.707083 0.70713 0 0.707083 0.499985 0 0.866034 0.258797 0 0.965932 0 0 1 -0.422742 0 0.90625 0.57384 0 -0.818968 -0.422742 0 0.90625 0.57384 0 -0.818968 0 1 0 0 -1 0 -1 0 0 0 0 -1 0 -1 0 -1 0 0 0 0 -1 -0.846457 -0.532456 0 0 0 1 -0.258797 0.965932 0 0 0 1 0 0 1 0.0871303 -0.996197 0 0 0 -1 0.0871303 -0.996197 0 0 0 -1 0.378368 0.886932 0.264931 0.92026 0.391308 0 0 0 1 0.378368 0.886932 0.264931 0.92026 0.391308 0 0 -1 0 0 0 -1 0.96612 -0.258095 0 0 1 0 -1 0 0 0 0 1 0 1 0 0 0 -1 0 1 0 0 0 1 0.287637 0.95774 0 0 -1 0 0 0 1 0 0 -1 0 -1 0 1 0 0 0 -1 0 0 0 -1 0.751432 -0.65981 0 0 -1 0 0 0 1 0.751432 -0.65981 0 0 0 1 0.889647 -0.456648 0 -1 0 0 0 0 1 0 -1 0 -0.846457 -0.532456 0 0 0 -1 0 -1 0 0 -1 0 -0.781683 -0.623676 0 0 0 -1 -0.642781 -0.76605 0 0 0 1 -0.499985 -0.866034 0 0 0 -1 -0.34199 -0.939703 0 0 0 1 -0.484787 0.874633 0 0 0 -1 -0.484787 0.874633 0 0 0 1 0 0 1 0.258797 0.965932 0 0 0 -1 0.287637 0.95774 0 0 0 1 0 -1 0 1 0 0 1 0 0 0 -1 0 0 0 -1 1 0 0 0 -1 0 0 0 -1 0.889647 -0.456648 0 0 -1 0 0 -1 0 0 0 1 0.96612 -0.258095 0 0 0 -1 1 0 0 0 0 1 1 0 0 -0.3502 0.936675 0 -0.3502 0.936675 0 -0.781683 -0.623676 0 -0.642781 -0.76605 0 -0.499985 -0.866034 0 -0.619068 0.785337 0 -0.619068 0.785337 0 -0.34199 -0.939703 0 -0.17362 -0.984813 0 -0.17362 -0.984813 0 -0.258797 0.965932 0 0 -1 0 0 -1 0 0 1 0 -1 0 0 0 -1 0 -1 0 0 -1 0 0 0 -1 0 -1 0 0 0.258797 0.965932 0 0.468947 0.883226 0 0.468947 0.883226 0 0.78649 -0.617603 0 0.78649 -0.617603 0 0.8564 -0.516312 0 0.8564 -0.516312 0 0.194769 0.971321 0.136387 0.194769 0.971321 0.136387 0.945423 0.325846 0 0.945423 0.325846 0 0.984872 -0.173284 0 0.984872 -0.173284 0 0.984813 0.17362 0 0.984813 0.17362 0 0 0 1 0 0 -1 -0.939703 -0.34199 0 0 0 1 -0.939703 0.34199 0 0 0 -1 -0.76605 0.642781 0 0 0 1 -0.642781 0.76605 0 0 0 -1 0 0 1 0 1 0 0 0 -1 0.391339 -0.920247 0 0 0 1 0.391339 -0.920247 0 0 0 -1 0.499985 0.866034 0 0 0 1 0.642781 0.76605 0 0 0 1 0.984872 -0.173284 0 0 0 -1 1 0 0 -0.984813 0.17362 0 0 0 1 -0.939703 -0.34199 0 0 0 -1 -0.499985 -0.866034 0 0 0 -1 -0.34199 -0.939703 0 0 0 1 -0.17362 -0.984813 0 0 0 -1 1 0 0 1 0 0 0 -1 0 0 0 -1 1 0 0 0 -1 0 0 0 1 1 0 0 -1 0 0 0 0 -1 0.597125 -0.802148 0 -1 0 0 0 0 1 0.597125 -0.802148 0 0 0 -1 0.902302 0.431104 0 -1 0 0 0 0 -1 -0.866034 -0.499985 0 0 0 1 -0.866034 0.499985 0 0 0 1 -0.76605 -0.642781 0 0 0 -1 -0.642781 -0.76605 0 0 0 1 -0.499985 0.866034 0 0 0 -1 -0.499985 0.866034 0 0 0 1 -0.17362 0.984813 0 0 0 -1 0 0 -1 0.17362 -0.984813 0 0 0 1 0.17362 -0.984813 0 0 0 -1 0.17362 0.984813 0 0 0 1 0.34199 0.939703 0 -1 0 0 0 -1 0 0 0 -1 -1 0 0 0 -1 0 0 0 1 0 0 -1 0.76605 -0.642781 0 0 0 -1 0.76605 0.642781 0 0 0 1 0.86621 -0.49968 0 0 0 1 0.852466 0.522782 0 0 0 -1 0.939948 -0.341319 0 0 0 1 0.984813 0.17362 0 -1 0 0 -0.984813 -0.17362 0 -0.984813 -0.17362 0 -0.984813 0.17362 0 -0.939703 0.34199 0 -0.866034 -0.499985 0 -0.866034 0.499985 0 -0.76605 -0.642781 0 -0.76605 0.642781 0 -0.642781 0.76605 0 -0.642781 -0.76605 0 -0.499985 -0.866034 0 -0.34199 -0.939703 0 -0.34199 0.939703 0 -0.34199 0.939703 0 -0.17362 -0.984813 0 -0.17362 0.984813 0 0 -1 0 0 -1 0 0 1 0 0.17362 0.984813 0 0.325877 -0.945412 0 0.325877 -0.945412 0 0.34199 0.939703 0 0.499985 0.866034 0 0.642781 0.76605 0 0.653829 -0.756643 0 0.653829 -0.756643 0 0.76605 -0.642781 0 0.76605 0.642781 0 0.86621 -0.49968 0 0.852466 0.522782 0 0.902302 0.431104 0 0.945423 0.325846 0 0.945423 0.325846 0 0.939948 -0.341319 0 0.984872 -0.173284 0 0.984813 0.17362 0 1 0 0 0 0 -1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.965932 0 -0.258797 0.965932 0 -0.258797 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.258797 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.965932 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.258797 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.965932 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.965932 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.258797 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.258797 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.965932 0 0 1 0 0 1 0 0 1 0 0 1 0.258797 0 0.965932 0.258797 0 0.965932 0.258797 0 0.965932 0.258797 0 0.965932 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.70713 0 0.707083 0.70713 0 0.707083 0.70713 0 0.707083 0.70713 0 0.707083 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.965932 0 0.258797 0.965932 0 0.258797 0.965932 0 0.258797 0.965932 0 0.258797 1 0 0 1 0 0 1 0 0 1 0 0 0.965932 0 -0.258797 0.965932 0 -0.258797 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.809038 0 -0.587756 0.809038 0 -0.587756 0.309 0 -0.951062 0.309 0 -0.951062 0.309 0 -0.951062 0.309 0 -0.951062 -0.309 0 -0.951062 -0.309 0 -0.951062 -0.309 0 -0.951062 -0.309 0 -0.951062 -0.809038 0 -0.587756 -0.809038 0 -0.587756 -0.809038 0 -0.587756 -0.809038 0 -0.587756 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.809038 0 0.587756 -0.809038 0 0.587756 -0.809038 0 0.587756 -0.809038 0 0.587756 -0.309 0 0.951062 -0.309 0 0.951062 -0.309 0 0.951062 -0.309 0 0.951062 0.309 0 0.951062 0.309 0 0.951062 0.309 0 0.951062 0.309 0 0.951062 0.809038 0 0.587756 0.809038 0 0.587756 0.809038 0 0.587756 0.809038 0 0.587756 1 0 0 1 0 0 1 0 0 1 0 0 0.809038 0 -0.587756 0.809038 0 -0.587756 - - - - - - - - - - - - - - -

0 0 1 1 2 2 3 3

-

4 4 5 5 6 6 7 7

-

8 8 9 9 10 10 11 11

-

12 12 13 13 14 14 15 15

-

16 16 17 17 18 18 19 19

-

20 20 21 21 22 22 23 23

-
- - - -

24 24 25 25 26 26 27 27

-

28 28 29 29 30 30 31 31

-

32 32 33 33 34 34 35 35

-

36 36 37 37 38 38 39 39

-

40 40 41 41 42 42 43 43

-
- - - -

44 44 45 44 46 44 47 44

-

48 44 49 44 50 44 51 44

-

52 44 53 44 54 44 55 44 56 44

-

57 44 58 44 59 44 60 44

-
- - - -

133 109 134 109 112 109 110 109

-

110 109 124 109 136 109 133 109

-
- - - -

132 110 135 110 122 110 108 110

-

108 110 106 110 131 110 132 110

-
- - - -

129 111 126 111 72 111 90 111

-

90 111 92 111 130 111 129 111

-
- - - -

128 112 127 112 86 112 88 112

-

88 112 70 112 125 112 128 112

-
- - - -

113 97 94 78 97 81 115 99

-

103 87 120 104 118 102 100 84

-

67 51 68 52 84 68 81 65

-

75 59 61 45 64 48 78 62

-

70 54 88 72 77 61 63 47

-

65 49 71 55 69 53 62 46

-

90 74 72 56 66 50 80 64

-

91 75 89 73 79 63 82 66

-

102 86 111 95 92 76 83 67

-

110 94 112 96 104 88 101 85

-

123 107 109 93 99 83 117 101

-

116 100 122 106 124 108 119 103

-

107 91 121 105 114 98 96 80

-

106 90 108 92 98 82 95 79

-

74 58 86 70 105 89 93 77

-

87 71 85 69 73 57 76 60

-
- - - -

147 153 182 153 190 153 191 153 181 153 148 153

-
- - - -

147 153 190 153 194 153 167 153 162 153 154 153

-

167 153 194 153 195 153 168 153 176 153 174 153

-

148 153 156 153 164 153 168 153 195 153 191 153

-
- - - -

187 154 152 154 146 154 186 154

-

188 154 203 154 202 154 160 154 152 154 187 154

-

202 154 201 154 197 154 160 154

-
- - - -

184 155 185 155 189 155 150 155

-

184 155 150 155 158 155 193 155

-

183 155 184 155 193 155 192 155

-

158 155 199 155 198 155 192 155 193 155

-

158 155 196 155 200 155 199 155

-
- - - -

170 156 204 156 196 156 165 156

-

207 156 206 156 204 156 170 156 172 156 205 156

-

205 156 172 156 166 156 197 156

-
- - - -

180 157 138 157 179 157 177 157 178 157

-

145 157 189 157 179 157 138 157

-
- - - -

171 147 175 151 168 144 166 142

-

170 146 174 150 176 152 172 148

-

173 149 169 145 165 141 167 143

-

158 134 162 138 167 143 165 141

-

150 126 154 130 161 137 157 133

-

153 129 149 125 145 121 147 123

-

138 114 142 118 147 123 145 121

-

139 115 143 119 141 117 137 113

-

144 120 140 116 146 122 148 124

-

151 127 155 131 148 124 146 122

-

159 135 163 139 156 132 152 128

-

164 140 160 136 166 142 168 144

-
- - - -

208 194 211 194 249 194 249 194 212 194 208 194 251 194 230 194 224 194 224 194 218 194 251 194 223 194 250 194 217 194 250 194 223 194 229 194 241 194 253 194 235 194 253 194 241 194 236 194

-
- - - -

251 194 254 194 253 194 236 194 230 194

-

251 194 218 194 212 194 249 194 245 194 246 194 247 194

-

211 194 217 194 250 194 248 194 244 194 245 194 249 194

-

253 194 252 194 250 194 229 194 235 194

-
- - - -

237 187 231 181 226 176 220 170 214 164 210 160 216 166 222 172 228 178 233 183 239 189 242 192

-

236 186 240 190 234 184 230 180

-

230 180 234 184 227 177 224 174

-

224 174 227 177 221 171 218 168

-

218 168 221 171 215 165 212 162

-

212 162 215 165 209 159 208 158

-

208 158 209 159 213 163 211 161

-

211 161 213 163 219 169 217 167

-

217 167 219 169 225 175 223 173

-

223 173 225 175 232 182 229 179

-

229 179 232 182 238 188 235 185

-

235 185 238 188 243 193 241 191

-

241 191 243 193 240 190 236 186

-
- - - -

255 195 256 196 257 197 258 198

-

259 199 260 200 261 201 262 202

-

263 203 264 204 265 205 266 206

-

267 207 268 208 269 209 270 210

-

271 211 272 212 273 213 274 214

-
- - - -

275 215 276 215 277 215 278 215

-

279 215 280 215 281 215 282 215

-

283 215 284 215 285 215 286 215 287 215

-

288 215 289 215 290 215 291 215

-
- - - -

359 280 356 280 297 280 313 280

-

313 280 308 280 358 280 359 280

-
- - - -

363 281 362 281 328 281 333 281

-

333 281 349 281 366 281 363 281

-
- - - -

360 282 361 282 323 282 318 282

-

318 282 302 282 357 282 360 282

-
- - - -

364 283 367 283 354 283 338 283

-

338 283 343 283 365 283 364 283

-
- - - -

355 279 339 263 334 258 350 274

-

325 249 344 268 346 270 330 254

-

295 219 292 216 306 230 311 235

-

320 244 303 227 299 223 315 239

-

302 226 318 242 316 240 300 224

-

293 217 296 220 301 225 298 222

-

313 237 297 221 294 218 310 234

-

307 231 312 236 309 233 304 228

-

324 248 327 251 308 232 305 229

-

333 257 328 252 326 250 331 255

-

348 272 332 256 329 253 345 269

-

352 276 354 278 349 273 347 271

-

337 261 353 277 351 275 335 259

-

343 267 338 262 336 260 341 265

-

321 245 323 247 342 266 340 264

-

317 241 322 246 319 243 314 238

-
- - - -

399 324 424 324 423 324 418 324 419 324 379 324

-
- - - -

399 324 423 324 422 324 397 324 403 324 407 324

-

397 324 422 324 417 324 377 324 383 324 391 324

-

379 324 375 324 371 324 377 324 417 324 418 324

-
- - - -

411 325 373 325 378 325 416 325

-

409 325 408 325 410 325 369 325 373 325 411 325

-

410 325 414 325 415 325 369 325

-
- - - -

435 326 430 326 429 326 405 326

-

435 326 405 326 401 326 434 326

-

438 326 435 326 434 326 437 326

-

401 326 433 326 436 326 437 326 434 326

-

401 326 428 326 427 326 433 326

-
- - - -

389 327 426 327 428 327 396 327

-

412 327 425 327 426 327 389 327 381 327 413 327

-

413 327 381 327 376 327 415 327

-
- - - -

420 328 393 328 431 328 432 328 421 328

-

398 328 429 328 431 328 393 328

-
- - - -

400 316 402 318 397 313 396 312

-

405 321 407 323 403 319 401 317

-

406 322 404 320 398 314 399 315

-

393 309 395 311 399 315 398 314

-

385 301 387 303 394 310 392 308

-

386 302 384 300 378 294 379 295

-

373 289 375 291 379 295 378 294

-

368 284 370 286 374 290 372 288

-

371 287 369 285 376 292 377 293

-

380 296 382 298 377 293 376 292

-

388 304 390 306 383 299 381 297

-

391 307 389 305 396 312 397 313

-
- - - -

480 375 482 375 457 375 457 375 478 375 480 375 440 375 475 375 474 375 474 375 476 375 440 375 484 375 473 375 466 375 473 375 484 375 483 375 479 375 456 375 481 375 456 375 479 375 477 375

-
- - - -

440 375 439 375 456 375 477 375 475 375

-

440 375 476 375 478 375 457 375 458 375 441 375 485 375

-

482 375 466 375 473 375 486 375 471 375 458 375 457 375

-

456 375 472 375 473 375 483 375 481 375

-
- - - -

467 357 461 351 454 344 451 341 447 337 443 333 445 335 449 339 453 343 459 349 463 353 469 359

-

483 373 464 354 460 350 481 371

-

481 371 460 350 452 342 479 369

-

479 369 452 342 448 338 477 367

-

477 367 448 338 444 334 475 365

-

475 365 444 334 442 332 474 364

-

474 364 442 332 446 336 476 366

-

476 366 446 336 450 340 478 368

-

478 368 450 340 455 345 480 370

-

480 370 455 345 462 352 482 372

-

482 372 462 352 468 358 466 356

-

466 356 468 358 470 360 484 374

-

484 374 470 360 464 354 483 373

-
- - - -

487 376 488 376 489 376 490 376 491 376

-
- - - -

492 377 493 377 494 377 495 377 496 377

-
- - - -

497 378 498 378 499 378 500 378 501 378 502 378

-
- - - -

503 379 504 379 505 379 506 379 507 379

-
- - - -

508 380 509 380 510 380 511 380 512 380

-
- - - -

513 381 514 381 515 381 516 381 517 381

-
- - - -

518 382 519 382 520 382 521 382 522 382

-
- - - -

523 383 524 383 525 383 526 383 527 383

-
- - - -

528 384 529 384 530 384 531 384 532 384

-
- - - -

533 385 534 385 535 385 536 385 537 385

-
- - - -

538 386 539 386 540 386 541 386 542 386

-
- - - -

543 387 544 387 545 387 546 387 547 387

-
- - - -

548 388 549 388 550 388 551 388 552 388

-
- - - -

553 389 554 389 555 389 556 389 557 389

-
- - - -

558 390 559 390 560 390 561 390 562 390

-
- - - -

563 391 564 391 565 391 566 391 567 391

-
- - - -

568 392 569 392 570 392 571 392 572 392

-
- - - -

573 393 574 393 575 393 576 393 577 393

-
- - - -

578 394 579 394 580 394 581 394 582 394

-

583 394 584 394 585 394 586 394

-
- - - -

587 395 588 395 589 395 590 395 591 395

-

592 395 593 395 594 395 595 395

-
- - - -

596 396 597 396 598 396 599 396

-
- - - -

600 397 601 397 602 397 603 397

-
- - - -

604 398 605 398 606 398 607 398

-
- - - -

608 399 609 399 610 399 611 399

-

612 399 613 399 614 399 615 399 616 399

-

617 399 618 399 619 399 620 399

-
- - - -

621 400 622 400 623 400 624 400

-
- - - -

625 401 626 401 627 401 628 401

-
- - - -

629 402 630 402 631 402 632 402

-
- - - -

633 403 634 403 635 403 636 403

-

637 403 638 403 639 403 640 403 641 403

-

642 403 643 403 644 403 645 403 646 403

-

647 403 648 403 649 403 650 403

-
- - - -

651 404 652 404 653 404 654 404

-
- - - -

655 405 656 405 657 405 658 405

-

659 405 660 405 661 405 662 405

-
- - - -

663 406 664 406 665 406 666 406 667 406

-

668 406 669 406 670 406 671 406

-
- - - -

672 407 673 407 674 407 675 407

-
- - - -

676 408 677 408 678 408 679 408

-
- - - -

680 409 681 409 682 409 683 409

-
- - - -

684 410 685 410 686 410 687 410

-
- - - -

688 411 689 411 690 411 691 411

-
- - - -

692 412 693 412 694 412 695 412

-
- - - -

696 413 697 413 698 413 699 413

-
- - - -

700 414 701 414 702 414 703 414

-

704 414 705 414 706 414 707 414 708 414

-

709 414 710 414 711 414 712 414

-
- - - -

713 415 714 415 715 415 716 415

-
- - - -

717 416 718 416 719 416 720 416

-
- - - -

721 417 722 417 723 417 724 417 725 417

-

726 417 727 417 728 417 729 417

-
- - - -

730 418 731 418 732 418 733 418 734 418

-

735 418 736 418 737 418 738 418

-
- - - -

739 419 740 419 741 419 742 419

-
- - - -

743 420 744 420 745 420 746 420

-
- - - -

747 421 748 421 749 421 750 421 751 421

-

752 421 753 421 754 421 755 421

-
- - - -

756 422 757 422 758 422 759 422

-
- - - -

760 423 761 423 762 423 763 423

-

764 423 765 423 766 423 767 423

-
- - - -

768 424 769 424 770 424 771 424

-

772 424 773 424 774 424 775 424

-
- - - -

776 425 777 425 778 425 779 425

-

780 425 781 425 782 425 783 425

-
- - - -

784 426 785 426 786 426 787 426

-
- - - -

788 427 789 427 790 427 791 427

-
- - - -

792 428 793 428 794 428 795 428

-
- - - -

796 429 797 429 798 429 799 429

-
- - - -

800 430 801 430 802 430 803 430

-
- - - -

804 431 805 431 806 431 807 431

-
- - - -

808 432 809 432 810 432 811 432

-
- - - -

812 433 813 433 814 433 815 433 816 433

-

817 433 818 433 819 433 820 433

-
- - - -

821 434 822 434 823 434

-
- - - -

829 435 830 435 831 435

-
- - - -

824 435 825 435 826 435 827 435 828 435

-
- - - -

832 436 833 436 834 436

-
- - - -

840 437 841 437 842 437

-
- - - -

835 437 836 437 837 437 838 437 839 437

-
- - - -

847 438 848 438 849 438

-
- - - -

843 438 844 438 845 438 846 438

-
- - - -

850 439 851 439 852 439

-
- - - -

853 440 854 440 855 440

-
- - - -

862 441 863 441 864 441

-
- - - -

856 441 857 441 858 441 859 441 860 441 861 441

-
- - - -

934 514 978 514 979 514

-
- - - -

973 514 970 514 969 514 929 514 980 514 981 514

-

979 514 980 514 929 514 934 514

-

928 514 971 514 976 514 977 514

-

928 514 977 514 978 514 934 514

-
- - - -

937 515 941 515 874 515

-
- - - -

940 515 939 515 938 515 868 515

-

938 515 937 515 874 515 868 515

-
- - - -

892 516 947 516 946 516

-
- - - -

956 516 904 516 958 516 960 516 961 516

-

958 516 957 516 959 516 960 516

-

898 516 950 516 954 516 955 516 957 516 958 516 904 516

-

950 516 898 516 892 516 946 516 945 516 949 516

-
- - - -

922 517 966 517 968 517 916 517 964 517 963 517

-
- - - -

975 517 967 517 966 517 974 517

-

972 517 974 517 966 517 922 517 916 517 963 517 962 517 965 517

-
- - - -

899 518 952 518 953 518 951 518

-

893 518 948 518 944 518 942 518 943 518

-

951 518 948 518 893 518 899 518

-
- - - -

936 513 933 510 927 504 921 498 915 492 909 486 902 479 896 473 890 467 884 461 878 455 872 449 866 443 870 447 876 453 882 459 888 465 894 471 900 477 907 484 913 490 919 496 925 502 931 508

-

932 509 929 506 923 500 926 503

-

926 503 923 500 917 494 920 497

-

920 497 917 494 911 488 914 491

-

914 491 911 488 905 482 908 485

-

908 485 905 482 899 476 903 480

-

903 480 899 476 893 470 897 474

-

897 474 893 470 887 464 891 468

-

891 468 887 464 881 458 885 462

-

885 462 881 458 875 452 879 456

-

879 456 875 452 869 446 873 450

-

873 450 869 446 865 442 867 444

-

867 444 865 442 868 445 871 448

-

871 448 868 445 874 451 877 454

-

877 454 874 451 880 457 883 460

-

883 460 880 457 886 463 889 466

-

889 466 886 463 892 469 895 472

-

895 472 892 469 898 475 901 478

-

901 478 898 475 904 481 906 483

-

906 483 904 481 910 487 912 489

-

912 489 910 487 916 493 918 495

-

918 495 916 493 922 499 924 501

-

924 501 922 499 928 505 930 507

-

930 507 928 505 934 511 935 512

-

935 512 934 511 929 506 932 509

-
- - - -

986 519 987 519 988 519

-
- - - -

982 519 983 519 984 519 985 519

-
- - - -

993 520 994 520 995 520

-
- - - -

989 520 990 520 991 520 992 520

-
- - - -

1002 521 1003 521 1004 521

-
- - - -

996 521 997 521 998 521 999 521 1000 521 1001 521

-
- - - -

1005 522 1006 522 1007 522 1012 522 1013 522 1014 522

-
- - - -

1008 522 1009 522 1010 522 1011 522

-
- - - -

1015 523 1016 523 1017 523

-
- - - -

1028 524 1029 524 1030 524

-
- - - -

1018 524 1019 524 1020 524 1021 524

-

1022 524 1023 524 1024 524 1025 524 1026 524 1027 524

-
- - - -

1031 525 1032 525 1033 525

-
- - - -

1034 526 1035 526 1036 526

-
- - - -

1037 527 1038 527 1039 527

-
- - - -

1040 528 1041 528 1042 528

-
- - - -

1043 529 1044 529 1045 529 1046 529 1047 529 1048 529

-
- - - -

1049 530 1050 530 1051 530

-
- - - -

1052 531 1053 531 1054 531 1055 531 1056 531 1057 531

-
- - - -

1058 532 1059 532 1060 532 1061 532 1062 532 1063 532

-
- - - -

1070 533 1071 533 1072 533

-
- - - -

1064 533 1065 533 1066 533 1067 533 1068 533 1069 533

-
- - - -

1080 534 1081 534 1082 534

-
- - - -

1073 534 1074 534 1075 534 1076 534 1077 534 1078 534 1079 534

-
- - - -

1088 535 1089 535 1090 535

-
- - - -

1083 535 1084 535 1085 535 1086 535 1087 535

-
- - - -

1091 536 1092 536 1093 536 1094 536 1095 536 1096 536

-
- - - -

1097 537 1098 537 1099 537 1100 537 1101 537 1102 537

-
- - - -

1103 538 1104 538 1105 538 1106 538 1107 538 1108 538

-
- - - -

1109 539 1110 539 1111 539 1112 539 1113 539 1114 539

-
- - - -

1120 540 1121 540 1122 540

-
- - - -

1115 540 1116 540 1117 540 1118 540 1119 540

-
- - - -

1456 1213 1158 1213 1799 1213 1799 1213 1798 1213 1431 1213

-
- - - -

1455 1213 1456 1213 1799 1213 1431 1213

-
- - - -

1431 1214 1798 1214 1797 1214 1797 1214 1795 1214 1421 1214

-
- - - -

1421 1214 1420 1214 1431 1214 1797 1214

-
- - - -

1434 1215 1421 1215 1150 1215 1421 1215 1795 1215 1150 1215

-
- - - -

1275 1215 1158 1215 1456 1215 1487 1215 1493 1215 1501 1215 1509 1215 1516 1215 1587 1215 1611 1215

-

1611 1215 1629 1215 1644 1215 1650 1215 1647 1215 1631 1215 1614 1215 1801 1215 1275 1215

-

1614 1215 1590 1215 1519 1215 1512 1215 1504 1215 1496 1215 1490 1215 1497 1215 1801 1215

-

1490 1215 1459 1215 1434 1215 1150 1215 1484 1215 1497 1215

-
- - - -

1146 1216 1411 1216 1423 1216 1190 1216 1452 1216 1181 1216

-
- - - -

1225 1216 1202 1216 1203 1216 1221 1216 1228 1216

-

1181 1216 1468 1216 1203 1216 1202 1216 1190 1216

-

1203 1216 1468 1216 1466 1216 1191 1216 1197 1216 1208 1216 1480 1216 1221 1216

-

1453 1216 1170 1216 1191 1216 1466 1216

-

1441 1216 1167 1216 1170 1216 1453 1216

-

1424 1216 1153 1216 1167 1216 1441 1216

-

1147 1216 1153 1216 1424 1216 1412 1216

-

1407 1216 1131 1216 1400 1216 1138 1216 1147 1216 1412 1216

-

1411 1216 1146 1216 1139 1216 1130 1216 1131 1216 1407 1216

-

1166 1216 1146 1216 1423 1216 1440 1216

-

1440 1216 1452 1216 1190 1216 1166 1216

-
- - - -

1506 1217 1528 1217 1555 1217

-
- - - -

1555 1217 1570 1217 1801 1217 1497 1217 1498 1217 1506 1217

-

1246 1217 1513 1217 1529 1217 1521 1217

-

1521 1217 1528 1217 1506 1217 1246 1217

-
- - - -

1796 1218 1797 1218 1798 1218 1798 1218 1799 1218 1796 1218

-
- - - -

1228 1219 1221 1219 1218 1219

-
- - - -

1218 1219 1231 1219 1506 1219 1498 1219 1228 1219

-
- - - -

1126 1220 1150 1220 1795 1220

-
- - - -

1386 1220 1384 1220 1126 1220 1387 1220

-

1126 1220 1795 1220 1797 1220 1796 1220 1387 1220

-
- - - -

1177 1221 1185 1221 1187 1221 1187 1221 1451 1221 1177 1221 1142 1221 1154 1221 1152 1221 1142 1221 1152 1221 1409 1221 1143 1221 1410 1221 1422 1221

-
- - - -

1451 1221 1187 1221 1189 1221 1165 1221 1436 1221

-

1422 1221 1436 1221 1165 1221 1145 1221 1143 1221

-

1409 1221 1406 1221 1133 1221 1132 1221 1142 1221

-

1410 1221 1143 1221 1136 1221 1133 1221 1406 1221

-
- - - -

1184 1222 1465 1222 1450 1222

-
- - - -

1184 1222 1183 1222 1469 1222 1201 1222

-

1164 1222 1163 1222 1444 1222 1173 1222 1182 1222

-

1129 1222 1141 1222 1413 1222 1425 1222 1435 1222 1163 1222 1164 1222 1162 1222 1154 1222

-

1450 1222 1162 1222 1164 1222 1182 1222 1183 1222 1184 1222

-

1481 1222 1212 1222 1210 1222 1215 1222

-

1199 1222 1200 1222 1186 1222 1185 1222 1193 1222

-

1210 1222 1200 1222 1199 1222 1222 1222 1215 1222

-

1478 1222 1224 1222 1222 1222 1199 1222 1198 1222 1201 1222 1206 1222

-

1465 1222 1184 1222 1198 1222 1199 1222 1193 1222

-
- - - -

1368 1223 1354 1223 1686 1223 1368 1223 1686 1223 1700 1223 1368 1223 1700 1223 1701 1223 1699 1223 1685 1223 1365 1223 1685 1223 1684 1223 1365 1223

-
- - - -

1365 1223 1368 1223 1701 1223 1699 1223

-
- - - -

1338 1224 1684 1224 1678 1224 1338 1224 1678 1224 1676 1224 1338 1224 1676 1224 1675 1224 1677 1224 1679 1224 1342 1224 1679 1224 1350 1224 1342 1224

-
- - - -

1677 1224 1342 1224 1338 1224 1675 1224

-
- - - -

1293 1225 1272 1225 1578 1225 1293 1225 1578 1225 1583 1225 1293 1225 1583 1225 1584 1225 1582 1225 1577 1225 1585 1225 1577 1225 1568 1225 1585 1225

-
- - - -

1585 1225 1293 1225 1584 1225 1582 1225

-
- - - -

1262 1226 1568 1226 1565 1226 1262 1226 1565 1226 1563 1226 1262 1226 1563 1226 1562 1226 1564 1226 1566 1226 1264 1226 1566 1226 1269 1226 1264 1226

-
- - - -

1564 1226 1264 1226 1262 1226 1562 1226

-
- - - -

1367 1227 1373 1227 1725 1227 1367 1227 1725 1227 1716 1227 1367 1227 1716 1227 1714 1227 1715 1227 1724 1227 1363 1227 1724 1227 1375 1227 1363 1227

-
- - - -

1363 1227 1367 1227 1714 1227 1715 1227

-
- - - -

1380 1228 1375 1228 1736 1228 1380 1228 1736 1228 1738 1228 1380 1228 1738 1228 1740 1228 1739 1228 1737 1228 1382 1228 1737 1228 1377 1228 1382 1228

-
- - - -

1739 1228 1382 1228 1380 1228 1740 1228

-
- - - -

1345 1229 1680 1229 1682 1229

-
- - - -

1682 1229 1354 1229 1357 1229 1356 1229

-

1345 1229 1682 1229 1356 1229 1355 1229 1348 1229 1344 1229

-

1345 1229 1346 1229 1347 1229 1350 1229 1680 1229

-
- - - -

1371 1230 1723 1230 1721 1230

-
- - - -

1359 1230 1370 1230 1369 1230 1367 1230 1358 1230

-

1370 1230 1721 1230 1373 1230 1369 1230

-

1371 1230 1721 1230 1370 1230 1359 1230 1360 1230 1361 1230

-

1371 1230 1379 1230 1378 1230 1377 1230 1723 1230

-
- - - -

1287 1231 1579 1231 1581 1231

-
- - - -

1581 1231 1272 1231 1273 1231 1288 1231

-

1581 1231 1288 1231 1296 1231 1295 1231 1294 1231 1287 1231

-

1269 1231 1579 1231 1287 1231 1267 1231

-
- - - -

1308 1232 1310 1232 1311 1232 1318 1232 1321 1232 1320 1232

-
- - - -

1300 1232 1308 1232 1311 1232 1318 1232 1320 1232 1319 1232 1802 1232 1315 1232 1307 1232

-
- - - -

1260 1233 1265 1233 1266 1233 1282 1233 1286 1233 1285 1233

-
- - - -

1281 1233 1569 1233 1284 1233 1283 1233

-

1282 1233 1285 1233 1284 1233 1569 1233 1554 1233 1257 1233 1800 1233 1255 1233 1260 1233 1266 1233

-
- - - -

1235 1234 1231 1234 1232 1234 1396 1234 1387 1234 1796 1234 1796 1234 1402 1234 1396 1234 1796 1234 1416 1234 1402 1234 1158 1234 1439 1234 1428 1234 1158 1234 1445 1234 1439 1234 1158 1234 1462 1234 1445 1234 1158 1234 1472 1234 1462 1234 1158 1234 1477 1234 1472 1234 1231 1234 1483 1234 1479 1234

-
- - - -

1796 1234 1799 1234 1158 1234 1428 1234 1416 1234

-

1477 1234 1158 1234 1232 1234 1231 1234 1479 1234

-

1231 1234 1218 1234 1482 1234 1483 1234

-
- - - -

1238 1235 1235 1235 1234 1235

-
- - - -

1248 1235 1241 1235 1238 1235 1234 1235 1233 1235 1247 1235

-
- - - -

1309 1236 1303 1236 1302 1236

-
- - - -

1309 1236 1302 1236 1301 1236 1305 1236 1313 1236 1316 1236 1317 1236

-
- - - -

1513 1237 1241 1237 1251 1237 1254 1237

-

1259 1237 1529 1237 1513 1237 1254 1237

-
- - - -

1533 1238 1537 1238 1269 1238 1566 1238

-

1537 1238 1580 1238 1579 1238 1269 1238

-
- - - -

1537 1239 1541 1239 1578 1239 1272 1239

-

1581 1239 1580 1239 1537 1239 1272 1239

-
- - - -

1705 1240 1709 1240 1350 1240 1679 1240

-

1709 1240 1681 1240 1680 1240 1350 1240

-
- - - -

1709 1241 1713 1241 1686 1241 1354 1241

-

1682 1241 1681 1241 1709 1241 1354 1241

-
- - - -

1774 1242 1770 1242 1377 1242 1737 1242

-

1770 1242 1722 1242 1723 1242 1377 1242

-
- - - -

1770 1243 1764 1243 1725 1243 1373 1243

-

1721 1243 1722 1243 1770 1243 1373 1243

-
- - - -

1569 1244 1281 1244 1801 1244 1570 1244

-

1281 1244 1277 1244 1275 1244 1801 1244

-
- - - -

1651 1245 1331 1245 1328 1245 1329 1245

-

1335 1245 1803 1245 1330 1245 1331 1245 1651 1245 1804 1245 1343 1245 1340 1245

-

1331 1245 1330 1245 1327 1245 1328 1245

-
- - - -

1721 1246 1723 1246 1722 1246

-
- - - -

1721 1247 1723 1247 1722 1247 1682 1247 1680 1247 1681 1247

-
- - - -

1721 1248 1723 1248 1722 1248 1682 1248 1680 1248 1681 1248 1581 1248 1579 1248 1580 1248

-
- - - -

1721 1139 1723 1141 1722 1140 1682 1100 1680 1098 1681 1099 1581 999 1579 997 1580 998 1553 971 1559 977 1608 1026 1559 977 1574 992 1608 1026 1574 992 1594 1012 1608 1026 1594 1012 1602 1020 1608 1026 1602 1020 1624 1042 1607 1025 1624 1042 1639 1057 1607 1025 1576 994 1561 979 1605 1023 1596 1014 1576 994 1605 1023 1604 1022 1596 1014 1605 1023 1626 1044 1604 1022 1605 1023 1641 1059 1626 1044 1606 1024 1732 1150 1691 1109 1665 1083 1691 1109 1673 1091 1665 1083 1673 1091 1655 1073 1665 1083 1655 1073 1641 1059 1665 1083 1665 1083 1641 1059 1605 1023 1755 1173 1665 1083 1668 1086 1749 1167 1754 1172 1666 1084 1743 1161 1749 1167 1667 1085 1730 1148 1743 1161 1668 1086 1689 1107 1730 1148 1668 1086 1671 1089 1689 1107 1666 1084 1653 1071 1671 1089 1668 1086 1639 1057 1653 1071 1666 1084 1605 1023 1548 966 1607 1025 1561 979 1548 966 1605 1023 1745 1163 1732 1150 1663 1081 1755 1173 1745 1163 1664 1082 1549 967 1553 971 1608 1026

-
- - - -

1639 1057 1668 1086 1665 1083 1605 1023 1607 1025

-

1560 978 1556 974 1546 964 1547 965

-

1575 993 1571 989 1556 974 1560 978

-

1595 1013 1591 1009 1571 989 1575 993

-

1603 1021 1599 1017 1591 1009 1595 1013

-

1621 1039 1599 1017 1603 1021 1625 1043

-

1634 1052 1621 1039 1625 1043 1640 1058

-

1651 1069 1634 1052 1640 1058 1656 1074

-

1669 1087 1651 1069 1656 1074 1674 1092

-

1687 1105 1669 1087 1674 1092 1692 1110

-

1687 1105 1692 1110 1733 1151 1728 1146

-

1733 1151 1746 1164 1741 1159 1728 1146

-

1746 1164 1756 1174 1753 1171 1741 1159

-

1744 1162 1742 1160 1753 1171 1756 1174 1750 1168

-

1731 1149 1729 1147 1742 1160 1744 1162

-

1690 1108 1688 1106 1729 1147 1731 1149

-

1672 1090 1670 1088 1688 1106 1690 1108

-

1654 1072 1652 1070 1670 1088 1672 1090

-

1638 1056 1635 1053 1652 1070 1654 1072

-

1623 1041 1622 1040 1635 1053 1638 1056

-

1601 1019 1600 1018 1622 1040 1623 1041

-

1593 1011 1592 1010 1600 1018 1601 1019

-

1573 991 1572 990 1592 1010 1593 1011

-

1558 976 1557 975 1572 990 1573 991

-

1546 964 1557 975 1558 976 1552 970 1547 965

-
- - - -

1721 1139 1723 1141 1722 1140 1682 1100 1680 1098 1681 1099 1581 999 1579 997 1580 998 1553 971 1559 977 1608 1026 1559 977 1574 992 1608 1026 1574 992 1594 1012 1608 1026 1594 1012 1602 1020 1608 1026 1602 1020 1624 1042 1607 1025 1624 1042 1639 1057 1607 1025 1576 994 1561 979 1605 1023 1596 1014 1576 994 1605 1023 1604 1022 1596 1014 1605 1023 1626 1044 1604 1022 1605 1023 1641 1059 1626 1044 1606 1024 1732 1150 1691 1109 1665 1083 1691 1109 1673 1091 1665 1083 1673 1091 1655 1073 1665 1083 1655 1073 1641 1059 1665 1083 1665 1083 1641 1059 1605 1023 1755 1173 1665 1083 1668 1086 1749 1167 1754 1172 1666 1084 1743 1161 1749 1167 1667 1085 1730 1148 1743 1161 1668 1086 1689 1107 1730 1148 1668 1086 1671 1089 1689 1107 1666 1084 1653 1071 1671 1089 1668 1086 1639 1057 1653 1071 1666 1084 1605 1023 1548 966 1607 1025 1561 979 1548 966 1605 1023 1745 1163 1732 1150 1663 1081 1755 1173 1745 1163 1664 1082 1549 967 1553 971 1608 1026

-
- - - -

1639 1057 1668 1086 1665 1083 1605 1023 1607 1025

-

1560 978 1556 974 1546 964 1547 965

-

1575 993 1571 989 1556 974 1560 978

-

1595 1013 1591 1009 1571 989 1575 993

-

1603 1021 1599 1017 1591 1009 1595 1013

-

1621 1039 1599 1017 1603 1021 1625 1043

-

1634 1052 1621 1039 1625 1043 1640 1058

-

1651 1069 1634 1052 1640 1058 1656 1074

-

1669 1087 1651 1069 1656 1074 1674 1092

-

1687 1105 1669 1087 1674 1092 1692 1110

-

1687 1105 1692 1110 1733 1151 1728 1146

-

1733 1151 1746 1164 1741 1159 1728 1146

-

1746 1164 1756 1174 1753 1171 1741 1159

-

1744 1162 1742 1160 1753 1171 1756 1174 1750 1168

-

1731 1149 1729 1147 1742 1160 1744 1162

-

1690 1108 1688 1106 1729 1147 1731 1149

-

1672 1090 1670 1088 1688 1106 1690 1108

-

1654 1072 1652 1070 1670 1088 1672 1090

-

1638 1056 1635 1053 1652 1070 1654 1072

-

1623 1041 1622 1040 1635 1053 1638 1056

-

1601 1019 1600 1018 1622 1040 1623 1041

-

1593 1011 1592 1010 1600 1018 1601 1019

-

1573 991 1572 990 1592 1010 1593 1011

-

1558 976 1557 975 1572 990 1573 991

-

1546 964 1557 975 1558 976 1552 970 1547 965

-

1578 996 1541 959 1545 963 1583 1001

-

1551 969 1584 1002 1583 1001 1545 963

-

1543 961 1582 1000 1584 1002 1551 969

-

1582 1000 1543 961 1539 957 1577 995

-

1523 941 1562 980 1563 981 1525 943

-

1527 945 1564 982 1562 980 1523 941

-

1564 982 1527 945 1533 951 1566 984

-

1537 955 1532 950 1526 944 1522 940 1524 942 1530 948 1534 952 1538 956 1542 960 1550 968 1544 962 1540 958

-

1565 983 1531 949 1525 943 1563 981

-

1531 949 1565 983 1567 985 1535 953

-

1536 954 1568 986 1577 995 1539 957

-
- - - -

1721 1139 1723 1141 1722 1140 1682 1100 1680 1098 1681 1099 1581 999 1579 997 1580 998 1553 971 1559 977 1608 1026 1559 977 1574 992 1608 1026 1574 992 1594 1012 1608 1026 1594 1012 1602 1020 1608 1026 1602 1020 1624 1042 1607 1025 1624 1042 1639 1057 1607 1025 1576 994 1561 979 1605 1023 1596 1014 1576 994 1605 1023 1604 1022 1596 1014 1605 1023 1626 1044 1604 1022 1605 1023 1641 1059 1626 1044 1606 1024 1732 1150 1691 1109 1665 1083 1691 1109 1673 1091 1665 1083 1673 1091 1655 1073 1665 1083 1655 1073 1641 1059 1665 1083 1665 1083 1641 1059 1605 1023 1755 1173 1665 1083 1668 1086 1749 1167 1754 1172 1666 1084 1743 1161 1749 1167 1667 1085 1730 1148 1743 1161 1668 1086 1689 1107 1730 1148 1668 1086 1671 1089 1689 1107 1666 1084 1653 1071 1671 1089 1668 1086 1639 1057 1653 1071 1666 1084 1605 1023 1548 966 1607 1025 1561 979 1548 966 1605 1023 1745 1163 1732 1150 1663 1081 1755 1173 1745 1163 1664 1082 1549 967 1553 971 1608 1026

-
- - - -

1639 1057 1668 1086 1665 1083 1605 1023 1607 1025

-

1560 978 1556 974 1546 964 1547 965

-

1575 993 1571 989 1556 974 1560 978

-

1595 1013 1591 1009 1571 989 1575 993

-

1603 1021 1599 1017 1591 1009 1595 1013

-

1621 1039 1599 1017 1603 1021 1625 1043

-

1634 1052 1621 1039 1625 1043 1640 1058

-

1651 1069 1634 1052 1640 1058 1656 1074

-

1669 1087 1651 1069 1656 1074 1674 1092

-

1687 1105 1669 1087 1674 1092 1692 1110

-

1687 1105 1692 1110 1733 1151 1728 1146

-

1733 1151 1746 1164 1741 1159 1728 1146

-

1746 1164 1756 1174 1753 1171 1741 1159

-

1744 1162 1742 1160 1753 1171 1756 1174 1750 1168

-

1731 1149 1729 1147 1742 1160 1744 1162

-

1690 1108 1688 1106 1729 1147 1731 1149

-

1672 1090 1670 1088 1688 1106 1690 1108

-

1654 1072 1652 1070 1670 1088 1672 1090

-

1638 1056 1635 1053 1652 1070 1654 1072

-

1623 1041 1622 1040 1635 1053 1638 1056

-

1601 1019 1600 1018 1622 1040 1623 1041

-

1593 1011 1592 1010 1600 1018 1601 1019

-

1573 991 1572 990 1592 1010 1593 1011

-

1558 976 1557 975 1572 990 1573 991

-

1546 964 1557 975 1558 976 1552 970 1547 965

-

1578 996 1541 959 1545 963 1583 1001

-

1551 969 1584 1002 1583 1001 1545 963

-

1543 961 1582 1000 1584 1002 1551 969

-

1582 1000 1543 961 1539 957 1577 995

-

1523 941 1562 980 1563 981 1525 943

-

1527 945 1564 982 1562 980 1523 941

-

1564 982 1527 945 1533 951 1566 984

-

1537 955 1532 950 1526 944 1522 940 1524 942 1530 948 1534 952 1538 956 1542 960 1550 968 1544 962 1540 958

-

1565 983 1531 949 1525 943 1563 981

-

1531 949 1565 983 1567 985 1535 953

-

1536 954 1568 986 1577 995 1539 957

-

1720 1138 1700 1118 1686 1104 1713 1131

-

1727 1145 1701 1119 1700 1118 1720 1138

-

1718 1136 1699 1117 1701 1119 1727 1145

-

1709 1127 1705 1123 1698 1116 1694 1112 1696 1114 1703 1121 1707 1125 1710 1128 1717 1135 1726 1144 1719 1137 1712 1130

-

1704 1122 1679 1097 1677 1095 1697 1115

-

1697 1115 1677 1095 1675 1093 1693 1111

-

1693 1111 1675 1093 1676 1094 1695 1113

-

1695 1113 1676 1094 1678 1096 1702 1120

-

1702 1120 1678 1096 1683 1101 1706 1124

-

1708 1126 1684 1102 1685 1103 1711 1129

-

1711 1129 1685 1103 1699 1117 1718 1136

-
- - - -

1721 1139 1723 1141 1722 1140 1682 1100 1680 1098 1681 1099 1581 999 1579 997 1580 998 1553 971 1559 977 1608 1026 1559 977 1574 992 1608 1026 1574 992 1594 1012 1608 1026 1594 1012 1602 1020 1608 1026 1602 1020 1624 1042 1607 1025 1624 1042 1639 1057 1607 1025 1576 994 1561 979 1605 1023 1596 1014 1576 994 1605 1023 1604 1022 1596 1014 1605 1023 1626 1044 1604 1022 1605 1023 1641 1059 1626 1044 1606 1024 1732 1150 1691 1109 1665 1083 1691 1109 1673 1091 1665 1083 1673 1091 1655 1073 1665 1083 1655 1073 1641 1059 1665 1083 1665 1083 1641 1059 1605 1023 1755 1173 1665 1083 1668 1086 1749 1167 1754 1172 1666 1084 1743 1161 1749 1167 1667 1085 1730 1148 1743 1161 1668 1086 1689 1107 1730 1148 1668 1086 1671 1089 1689 1107 1666 1084 1653 1071 1671 1089 1668 1086 1639 1057 1653 1071 1666 1084 1605 1023 1548 966 1607 1025 1561 979 1548 966 1605 1023 1745 1163 1732 1150 1663 1081 1755 1173 1745 1163 1664 1082 1549 967 1553 971 1608 1026

-
- - - -

1639 1057 1668 1086 1665 1083 1605 1023 1607 1025

-

1560 978 1556 974 1546 964 1547 965

-

1575 993 1571 989 1556 974 1560 978

-

1595 1013 1591 1009 1571 989 1575 993

-

1603 1021 1599 1017 1591 1009 1595 1013

-

1621 1039 1599 1017 1603 1021 1625 1043

-

1634 1052 1621 1039 1625 1043 1640 1058

-

1651 1069 1634 1052 1640 1058 1656 1074

-

1669 1087 1651 1069 1656 1074 1674 1092

-

1687 1105 1669 1087 1674 1092 1692 1110

-

1687 1105 1692 1110 1733 1151 1728 1146

-

1733 1151 1746 1164 1741 1159 1728 1146

-

1746 1164 1756 1174 1753 1171 1741 1159

-

1744 1162 1742 1160 1753 1171 1756 1174 1750 1168

-

1731 1149 1729 1147 1742 1160 1744 1162

-

1690 1108 1688 1106 1729 1147 1731 1149

-

1672 1090 1670 1088 1688 1106 1690 1108

-

1654 1072 1652 1070 1670 1088 1672 1090

-

1638 1056 1635 1053 1652 1070 1654 1072

-

1623 1041 1622 1040 1635 1053 1638 1056

-

1601 1019 1600 1018 1622 1040 1623 1041

-

1593 1011 1592 1010 1600 1018 1601 1019

-

1573 991 1572 990 1592 1010 1593 1011

-

1558 976 1557 975 1572 990 1573 991

-

1546 964 1557 975 1558 976 1552 970 1547 965

-

1578 996 1541 959 1545 963 1583 1001

-

1551 969 1584 1002 1583 1001 1545 963

-

1543 961 1582 1000 1584 1002 1551 969

-

1582 1000 1543 961 1539 957 1577 995

-

1523 941 1562 980 1563 981 1525 943

-

1527 945 1564 982 1562 980 1523 941

-

1564 982 1527 945 1533 951 1566 984

-

1537 955 1532 950 1526 944 1522 940 1524 942 1530 948 1534 952 1538 956 1542 960 1550 968 1544 962 1540 958

-

1565 983 1531 949 1525 943 1563 981

-

1531 949 1565 983 1567 985 1535 953

-

1536 954 1568 986 1577 995 1539 957

-

1720 1138 1700 1118 1686 1104 1713 1131

-

1727 1145 1701 1119 1700 1118 1720 1138

-

1718 1136 1699 1117 1701 1119 1727 1145

-

1709 1127 1705 1123 1698 1116 1694 1112 1696 1114 1703 1121 1707 1125 1710 1128 1717 1135 1726 1144 1719 1137 1712 1130

-

1704 1122 1679 1097 1677 1095 1697 1115

-

1697 1115 1677 1095 1675 1093 1693 1111

-

1693 1111 1675 1093 1676 1094 1695 1113

-

1695 1113 1676 1094 1678 1096 1702 1120

-

1702 1120 1678 1096 1683 1101 1706 1124

-

1708 1126 1684 1102 1685 1103 1711 1129

-

1711 1129 1685 1103 1699 1117 1718 1136

-

1759 1177 1716 1134 1725 1143 1763 1181

-

1751 1169 1714 1132 1716 1134 1759 1177

-

1757 1175 1715 1133 1714 1132 1751 1169

-

1770 1188 1774 1192 1788 1206 1790 1208 1786 1204 1772 1190 1769 1187 1762 1180 1758 1176 1752 1170 1760 1178 1764 1182

-

1773 1191 1737 1155 1739 1157 1787 1205

-

1787 1205 1739 1157 1740 1158 1789 1207

-

1789 1207 1740 1158 1738 1156 1785 1203

-

1785 1203 1738 1156 1736 1154 1771 1189

-

1771 1189 1736 1154 1735 1153 1768 1186

-

1767 1185 1734 1152 1724 1142 1761 1179

-

1761 1179 1724 1142 1715 1133 1757 1175

-
- - - -

1721 1139 1723 1141 1722 1140 1682 1100 1680 1098 1681 1099 1581 999 1579 997 1580 998 1553 971 1559 977 1608 1026 1559 977 1574 992 1608 1026 1574 992 1594 1012 1608 1026 1594 1012 1602 1020 1608 1026 1602 1020 1624 1042 1607 1025 1624 1042 1639 1057 1607 1025 1576 994 1561 979 1605 1023 1596 1014 1576 994 1605 1023 1604 1022 1596 1014 1605 1023 1626 1044 1604 1022 1605 1023 1641 1059 1626 1044 1606 1024 1732 1150 1691 1109 1665 1083 1691 1109 1673 1091 1665 1083 1673 1091 1655 1073 1665 1083 1655 1073 1641 1059 1665 1083 1665 1083 1641 1059 1605 1023 1755 1173 1665 1083 1668 1086 1749 1167 1754 1172 1666 1084 1743 1161 1749 1167 1667 1085 1730 1148 1743 1161 1668 1086 1689 1107 1730 1148 1668 1086 1671 1089 1689 1107 1666 1084 1653 1071 1671 1089 1668 1086 1639 1057 1653 1071 1666 1084 1605 1023 1548 966 1607 1025 1561 979 1548 966 1605 1023 1745 1163 1732 1150 1663 1081 1755 1173 1745 1163 1664 1082 1549 967 1553 971 1608 1026

-
- - - -

1639 1057 1668 1086 1665 1083 1605 1023 1607 1025

-

1560 978 1556 974 1546 964 1547 965

-

1575 993 1571 989 1556 974 1560 978

-

1595 1013 1591 1009 1571 989 1575 993

-

1603 1021 1599 1017 1591 1009 1595 1013

-

1621 1039 1599 1017 1603 1021 1625 1043

-

1634 1052 1621 1039 1625 1043 1640 1058

-

1651 1069 1634 1052 1640 1058 1656 1074

-

1669 1087 1651 1069 1656 1074 1674 1092

-

1687 1105 1669 1087 1674 1092 1692 1110

-

1687 1105 1692 1110 1733 1151 1728 1146

-

1733 1151 1746 1164 1741 1159 1728 1146

-

1746 1164 1756 1174 1753 1171 1741 1159

-

1744 1162 1742 1160 1753 1171 1756 1174 1750 1168

-

1731 1149 1729 1147 1742 1160 1744 1162

-

1690 1108 1688 1106 1729 1147 1731 1149

-

1672 1090 1670 1088 1688 1106 1690 1108

-

1654 1072 1652 1070 1670 1088 1672 1090

-

1638 1056 1635 1053 1652 1070 1654 1072

-

1623 1041 1622 1040 1635 1053 1638 1056

-

1601 1019 1600 1018 1622 1040 1623 1041

-

1593 1011 1592 1010 1600 1018 1601 1019

-

1573 991 1572 990 1592 1010 1593 1011

-

1558 976 1557 975 1572 990 1573 991

-

1546 964 1557 975 1558 976 1552 970 1547 965

-

1578 996 1541 959 1545 963 1583 1001

-

1551 969 1584 1002 1583 1001 1545 963

-

1543 961 1582 1000 1584 1002 1551 969

-

1582 1000 1543 961 1539 957 1577 995

-

1523 941 1562 980 1563 981 1525 943

-

1527 945 1564 982 1562 980 1523 941

-

1564 982 1527 945 1533 951 1566 984

-

1537 955 1532 950 1526 944 1522 940 1524 942 1530 948 1534 952 1538 956 1542 960 1550 968 1544 962 1540 958

-

1565 983 1531 949 1525 943 1563 981

-

1531 949 1565 983 1567 985 1535 953

-

1536 954 1568 986 1577 995 1539 957

-

1720 1138 1700 1118 1686 1104 1713 1131

-

1727 1145 1701 1119 1700 1118 1720 1138

-

1718 1136 1699 1117 1701 1119 1727 1145

-

1709 1127 1705 1123 1698 1116 1694 1112 1696 1114 1703 1121 1707 1125 1710 1128 1717 1135 1726 1144 1719 1137 1712 1130

-

1704 1122 1679 1097 1677 1095 1697 1115

-

1697 1115 1677 1095 1675 1093 1693 1111

-

1693 1111 1675 1093 1676 1094 1695 1113

-

1695 1113 1676 1094 1678 1096 1702 1120

-

1702 1120 1678 1096 1683 1101 1706 1124

-

1708 1126 1684 1102 1685 1103 1711 1129

-

1711 1129 1685 1103 1699 1117 1718 1136

-

1759 1177 1716 1134 1725 1143 1763 1181

-

1751 1169 1714 1132 1716 1134 1759 1177

-

1757 1175 1715 1133 1714 1132 1751 1169

-

1770 1188 1774 1192 1788 1206 1790 1208 1786 1204 1772 1190 1769 1187 1762 1180 1758 1176 1752 1170 1760 1178 1764 1182

-

1773 1191 1737 1155 1739 1157 1787 1205

-

1787 1205 1739 1157 1740 1158 1789 1207

-

1789 1207 1740 1158 1738 1156 1785 1203

-

1785 1203 1738 1156 1736 1154 1771 1189

-

1771 1189 1736 1154 1735 1153 1768 1186

-

1767 1185 1734 1152 1724 1142 1761 1179

-

1761 1179 1724 1142 1715 1133 1757 1175

-

1466 884 1174 592 1451 869 1453 871

-

1453 871 1451 869 1436 854 1441 859

-

1441 859 1436 854 1422 840 1424 842

-

1424 842 1422 840 1410 828 1412 830

-

1412 830 1410 828 1406 824 1407 825

-

1407 825 1406 824 1409 827 1411 829

-

1411 829 1409 827 1152 570 1423 841

-

1423 841 1152 570 1162 580 1440 858

-

1440 858 1162 580 1450 868 1452 870

-

1452 870 1450 868 1465 883 1178 596

-

1178 596 1465 883 1192 610 1468 886

-

1468 886 1192 610 1174 592 1466 884

-
- - - -

1721 1139 1723 1141 1722 1140 1682 1100 1680 1098 1681 1099 1581 999 1579 997 1580 998 1553 971 1559 977 1608 1026 1559 977 1574 992 1608 1026 1574 992 1594 1012 1608 1026 1594 1012 1602 1020 1608 1026 1602 1020 1624 1042 1607 1025 1624 1042 1639 1057 1607 1025 1576 994 1561 979 1605 1023 1596 1014 1576 994 1605 1023 1604 1022 1596 1014 1605 1023 1626 1044 1604 1022 1605 1023 1641 1059 1626 1044 1606 1024 1732 1150 1691 1109 1665 1083 1691 1109 1673 1091 1665 1083 1673 1091 1655 1073 1665 1083 1655 1073 1641 1059 1665 1083 1665 1083 1641 1059 1605 1023 1755 1173 1665 1083 1668 1086 1749 1167 1754 1172 1666 1084 1743 1161 1749 1167 1667 1085 1730 1148 1743 1161 1668 1086 1689 1107 1730 1148 1668 1086 1671 1089 1689 1107 1666 1084 1653 1071 1671 1089 1668 1086 1639 1057 1653 1071 1666 1084 1605 1023 1548 966 1607 1025 1561 979 1548 966 1605 1023 1745 1163 1732 1150 1663 1081 1755 1173 1745 1163 1664 1082 1549 967 1553 971 1608 1026

-
- - - -

1639 1057 1668 1086 1665 1083 1605 1023 1607 1025

-

1560 978 1556 974 1546 964 1547 965

-

1575 993 1571 989 1556 974 1560 978

-

1595 1013 1591 1009 1571 989 1575 993

-

1603 1021 1599 1017 1591 1009 1595 1013

-

1621 1039 1599 1017 1603 1021 1625 1043

-

1634 1052 1621 1039 1625 1043 1640 1058

-

1651 1069 1634 1052 1640 1058 1656 1074

-

1669 1087 1651 1069 1656 1074 1674 1092

-

1687 1105 1669 1087 1674 1092 1692 1110

-

1687 1105 1692 1110 1733 1151 1728 1146

-

1733 1151 1746 1164 1741 1159 1728 1146

-

1746 1164 1756 1174 1753 1171 1741 1159

-

1744 1162 1742 1160 1753 1171 1756 1174 1750 1168

-

1731 1149 1729 1147 1742 1160 1744 1162

-

1690 1108 1688 1106 1729 1147 1731 1149

-

1672 1090 1670 1088 1688 1106 1690 1108

-

1654 1072 1652 1070 1670 1088 1672 1090

-

1638 1056 1635 1053 1652 1070 1654 1072

-

1623 1041 1622 1040 1635 1053 1638 1056

-

1601 1019 1600 1018 1622 1040 1623 1041

-

1593 1011 1592 1010 1600 1018 1601 1019

-

1573 991 1572 990 1592 1010 1593 1011

-

1558 976 1557 975 1572 990 1573 991

-

1546 964 1557 975 1558 976 1552 970 1547 965

-

1578 996 1541 959 1545 963 1583 1001

-

1551 969 1584 1002 1583 1001 1545 963

-

1543 961 1582 1000 1584 1002 1551 969

-

1582 1000 1543 961 1539 957 1577 995

-

1523 941 1562 980 1563 981 1525 943

-

1527 945 1564 982 1562 980 1523 941

-

1564 982 1527 945 1533 951 1566 984

-

1537 955 1532 950 1526 944 1522 940 1524 942 1530 948 1534 952 1538 956 1542 960 1550 968 1544 962 1540 958

-

1565 983 1531 949 1525 943 1563 981

-

1531 949 1565 983 1567 985 1535 953

-

1536 954 1568 986 1577 995 1539 957

-

1720 1138 1700 1118 1686 1104 1713 1131

-

1727 1145 1701 1119 1700 1118 1720 1138

-

1718 1136 1699 1117 1701 1119 1727 1145

-

1709 1127 1705 1123 1698 1116 1694 1112 1696 1114 1703 1121 1707 1125 1710 1128 1717 1135 1726 1144 1719 1137 1712 1130

-

1704 1122 1679 1097 1677 1095 1697 1115

-

1697 1115 1677 1095 1675 1093 1693 1111

-

1693 1111 1675 1093 1676 1094 1695 1113

-

1695 1113 1676 1094 1678 1096 1702 1120

-

1702 1120 1678 1096 1683 1101 1706 1124

-

1708 1126 1684 1102 1685 1103 1711 1129

-

1711 1129 1685 1103 1699 1117 1718 1136

-

1759 1177 1716 1134 1725 1143 1763 1181

-

1751 1169 1714 1132 1716 1134 1759 1177

-

1757 1175 1715 1133 1714 1132 1751 1169

-

1770 1188 1774 1192 1788 1206 1790 1208 1786 1204 1772 1190 1769 1187 1762 1180 1758 1176 1752 1170 1760 1178 1764 1182

-

1773 1191 1737 1155 1739 1157 1787 1205

-

1787 1205 1739 1157 1740 1158 1789 1207

-

1789 1207 1740 1158 1738 1156 1785 1203

-

1785 1203 1738 1156 1736 1154 1771 1189

-

1771 1189 1736 1154 1735 1153 1768 1186

-

1767 1185 1734 1152 1724 1142 1761 1179

-

1761 1179 1724 1142 1715 1133 1757 1175

-

1466 884 1174 592 1451 869 1453 871

-

1453 871 1451 869 1436 854 1441 859

-

1441 859 1436 854 1422 840 1424 842

-

1424 842 1422 840 1410 828 1412 830

-

1412 830 1410 828 1406 824 1407 825

-

1407 825 1406 824 1409 827 1411 829

-

1411 829 1409 827 1152 570 1423 841

-

1423 841 1152 570 1162 580 1440 858

-

1440 858 1162 580 1450 868 1452 870

-

1452 870 1450 868 1465 883 1178 596

-

1178 596 1465 883 1192 610 1468 886

-

1468 886 1192 610 1174 592 1466 884

-

1647 1065 1650 1068 1649 1067 1646 1064

-

1631 1049 1647 1065 1646 1064 1630 1048

-

1614 1032 1631 1049 1630 1048 1613 1031

-

1590 1008 1614 1032 1613 1031 1589 1007

-

1519 937 1590 1008 1589 1007 1518 936

-

1512 930 1519 937 1518 936 1511 929

-

1504 922 1512 930 1511 929 1502 920

-

1496 914 1504 922 1502 920 1494 912

-

1490 908 1496 914 1494 912 1488 906

-

1459 877 1490 908 1488 906 1457 875

-

1434 852 1459 877 1457 875 1432 850

-

1421 839 1434 852 1432 850 1419 837

-

1642 1060 1627 1045 1609 1027 1298 716 1514 932 1508 926 1500 918 1492 910 1486 904 1455 873 1431 849 1420 838 1433 851 1458 876 1489 907 1495 913 1503 921 1510 928 1517 935 1588 1006 1612 1030 1323 741 1645 1063 1648 1066

-

1487 905 1456 874 1454 872 1485 903

-

1493 911 1487 905 1485 903 1491 909

-

1501 919 1493 911 1491 909 1499 917

-

1509 927 1501 919 1499 917 1507 925

-

1516 934 1509 927 1507 925 1515 933

-

1587 1005 1516 934 1515 933 1586 1004

-

1611 1029 1587 1005 1586 1004 1610 1028

-

1629 1047 1611 1029 1610 1028 1628 1046

-

1644 1062 1629 1047 1628 1046 1643 1061

-

1650 1068 1644 1062 1643 1061 1649 1067

-
- - - -

1721 1139 1723 1141 1722 1140 1682 1100 1680 1098 1681 1099 1581 999 1579 997 1580 998 1553 971 1559 977 1608 1026 1559 977 1574 992 1608 1026 1574 992 1594 1012 1608 1026 1594 1012 1602 1020 1608 1026 1602 1020 1624 1042 1607 1025 1624 1042 1639 1057 1607 1025 1576 994 1561 979 1605 1023 1596 1014 1576 994 1605 1023 1604 1022 1596 1014 1605 1023 1626 1044 1604 1022 1605 1023 1641 1059 1626 1044 1606 1024 1732 1150 1691 1109 1665 1083 1691 1109 1673 1091 1665 1083 1673 1091 1655 1073 1665 1083 1655 1073 1641 1059 1665 1083 1665 1083 1641 1059 1605 1023 1755 1173 1665 1083 1668 1086 1749 1167 1754 1172 1666 1084 1743 1161 1749 1167 1667 1085 1730 1148 1743 1161 1668 1086 1689 1107 1730 1148 1668 1086 1671 1089 1689 1107 1666 1084 1653 1071 1671 1089 1668 1086 1639 1057 1653 1071 1666 1084 1605 1023 1548 966 1607 1025 1561 979 1548 966 1605 1023 1745 1163 1732 1150 1663 1081 1755 1173 1745 1163 1664 1082 1549 967 1553 971 1608 1026

-
- - - -

1639 1057 1668 1086 1665 1083 1605 1023 1607 1025

-

1560 978 1556 974 1546 964 1547 965

-

1575 993 1571 989 1556 974 1560 978

-

1595 1013 1591 1009 1571 989 1575 993

-

1603 1021 1599 1017 1591 1009 1595 1013

-

1621 1039 1599 1017 1603 1021 1625 1043

-

1634 1052 1621 1039 1625 1043 1640 1058

-

1651 1069 1634 1052 1640 1058 1656 1074

-

1669 1087 1651 1069 1656 1074 1674 1092

-

1687 1105 1669 1087 1674 1092 1692 1110

-

1687 1105 1692 1110 1733 1151 1728 1146

-

1733 1151 1746 1164 1741 1159 1728 1146

-

1746 1164 1756 1174 1753 1171 1741 1159

-

1744 1162 1742 1160 1753 1171 1756 1174 1750 1168

-

1731 1149 1729 1147 1742 1160 1744 1162

-

1690 1108 1688 1106 1729 1147 1731 1149

-

1672 1090 1670 1088 1688 1106 1690 1108

-

1654 1072 1652 1070 1670 1088 1672 1090

-

1638 1056 1635 1053 1652 1070 1654 1072

-

1623 1041 1622 1040 1635 1053 1638 1056

-

1601 1019 1600 1018 1622 1040 1623 1041

-

1593 1011 1592 1010 1600 1018 1601 1019

-

1573 991 1572 990 1592 1010 1593 1011

-

1558 976 1557 975 1572 990 1573 991

-

1546 964 1557 975 1558 976 1552 970 1547 965

-

1578 996 1541 959 1545 963 1583 1001

-

1551 969 1584 1002 1583 1001 1545 963

-

1543 961 1582 1000 1584 1002 1551 969

-

1582 1000 1543 961 1539 957 1577 995

-

1523 941 1562 980 1563 981 1525 943

-

1527 945 1564 982 1562 980 1523 941

-

1564 982 1527 945 1533 951 1566 984

-

1537 955 1532 950 1526 944 1522 940 1524 942 1530 948 1534 952 1538 956 1542 960 1550 968 1544 962 1540 958

-

1565 983 1531 949 1525 943 1563 981

-

1531 949 1565 983 1567 985 1535 953

-

1536 954 1568 986 1577 995 1539 957

-

1720 1138 1700 1118 1686 1104 1713 1131

-

1727 1145 1701 1119 1700 1118 1720 1138

-

1718 1136 1699 1117 1701 1119 1727 1145

-

1709 1127 1705 1123 1698 1116 1694 1112 1696 1114 1703 1121 1707 1125 1710 1128 1717 1135 1726 1144 1719 1137 1712 1130

-

1704 1122 1679 1097 1677 1095 1697 1115

-

1697 1115 1677 1095 1675 1093 1693 1111

-

1693 1111 1675 1093 1676 1094 1695 1113

-

1695 1113 1676 1094 1678 1096 1702 1120

-

1702 1120 1678 1096 1683 1101 1706 1124

-

1708 1126 1684 1102 1685 1103 1711 1129

-

1711 1129 1685 1103 1699 1117 1718 1136

-

1759 1177 1716 1134 1725 1143 1763 1181

-

1751 1169 1714 1132 1716 1134 1759 1177

-

1757 1175 1715 1133 1714 1132 1751 1169

-

1770 1188 1774 1192 1788 1206 1790 1208 1786 1204 1772 1190 1769 1187 1762 1180 1758 1176 1752 1170 1760 1178 1764 1182

-

1773 1191 1737 1155 1739 1157 1787 1205

-

1787 1205 1739 1157 1740 1158 1789 1207

-

1789 1207 1740 1158 1738 1156 1785 1203

-

1785 1203 1738 1156 1736 1154 1771 1189

-

1771 1189 1736 1154 1735 1153 1768 1186

-

1767 1185 1734 1152 1724 1142 1761 1179

-

1761 1179 1724 1142 1715 1133 1757 1175

-

1466 884 1174 592 1451 869 1453 871

-

1453 871 1451 869 1436 854 1441 859

-

1441 859 1436 854 1422 840 1424 842

-

1424 842 1422 840 1410 828 1412 830

-

1412 830 1410 828 1406 824 1407 825

-

1407 825 1406 824 1409 827 1411 829

-

1411 829 1409 827 1152 570 1423 841

-

1423 841 1152 570 1162 580 1440 858

-

1440 858 1162 580 1450 868 1452 870

-

1452 870 1450 868 1465 883 1178 596

-

1178 596 1465 883 1192 610 1468 886

-

1468 886 1192 610 1174 592 1466 884

-

1647 1065 1650 1068 1649 1067 1646 1064

-

1631 1049 1647 1065 1646 1064 1630 1048

-

1614 1032 1631 1049 1630 1048 1613 1031

-

1590 1008 1614 1032 1613 1031 1589 1007

-

1519 937 1590 1008 1589 1007 1518 936

-

1512 930 1519 937 1518 936 1511 929

-

1504 922 1512 930 1511 929 1502 920

-

1496 914 1504 922 1502 920 1494 912

-

1490 908 1496 914 1494 912 1488 906

-

1459 877 1490 908 1488 906 1457 875

-

1434 852 1459 877 1457 875 1432 850

-

1421 839 1434 852 1432 850 1419 837

-

1642 1060 1627 1045 1609 1027 1298 716 1514 932 1508 926 1500 918 1492 910 1486 904 1455 873 1431 849 1420 838 1433 851 1458 876 1489 907 1495 913 1503 921 1510 928 1517 935 1588 1006 1612 1030 1323 741 1645 1063 1648 1066

-

1487 905 1456 874 1454 872 1485 903

-

1493 911 1487 905 1485 903 1491 909

-

1501 919 1493 911 1491 909 1499 917

-

1509 927 1501 919 1499 917 1507 925

-

1516 934 1509 927 1507 925 1515 933

-

1587 1005 1516 934 1515 933 1586 1004

-

1611 1029 1587 1005 1586 1004 1610 1028

-

1629 1047 1611 1029 1610 1028 1628 1046

-

1644 1062 1629 1047 1628 1046 1643 1061

-

1650 1068 1644 1062 1643 1061 1649 1067

-

1481 899 1215 633 1482 900 1218 636

-

1480 898 1212 630 1481 899 1221 639

-

1208 626 1476 894 1212 630 1480 898

-

1470 888 1467 885 1186 604 1210 628 1475 893

-

1474 892 1471 889 1476 894 1208 626

-

1464 882 1461 879 1471 889 1474 892

-

1138 556 1405 823 1418 836 1430 848 1443 861 1448 866 1463 881 1473 891 1197 615

-

1429 847 1426 844 1438 856 1442 860

-

1442 860 1438 856 1447 865 1449 867

-

1449 867 1447 865 1461 879 1464 882

-

1189 607 1467 885 1460 878 1446 864 1437 855 1427 845 1415 833 1408 826 1145 563

-

1417 835 1414 832 1426 844 1429 847

-

1404 822 1403 821 1414 832 1417 835

-

1397 815 1394 812 1403 821 1404 822

-

1130 548 1126 544 1391 809 1398 816 1400 818

-

1123 541 1383 801 1388 806 1390 808

-

1390 808 1388 806 1394 812 1397 815

-

1393 811 1129 547 1132 550 1136 554 1399 817 1395 813 1389 807 1384 802 1386 804

-

1392 810 1385 803 1387 805 1396 814

-

1401 819 1392 810 1396 814 1402 820

-

1413 831 1401 819 1402 820 1416 834

-

1425 843 1413 831 1416 834 1428 846

-

1435 853 1425 843 1428 846 1439 857

-

1444 862 1435 853 1439 857 1445 863

-

1173 591 1444 862 1445 863 1462 880

-

1469 887 1173 591 1462 880 1472 890

-

1206 624 1469 887 1472 890 1477 895

-

1478 896 1206 624 1477 895 1479 897

-

1224 642 1478 896 1479 897 1483 901

-

1215 633 1224 642 1483 901 1482 900

-
- - - -

1721 1249 1723 1249 1722 1249 1682 1249 1680 1249 1681 1249 1581 1249 1579 1249 1580 1249 1553 1249 1559 1249 1608 1249 1559 1249 1574 1249 1608 1249 1574 1249 1594 1249 1608 1249 1594 1249 1602 1249 1608 1249 1602 1249 1624 1249 1608 1249 1624 1249 1639 1249 1608 1249 1576 1249 1561 1249 1606 1249 1596 1249 1576 1249 1606 1249 1604 1249 1596 1249 1606 1249 1626 1249 1604 1249 1606 1249 1641 1249 1626 1249 1606 1249 1733 1249 1692 1249 1665 1249 1692 1249 1674 1249 1665 1249 1674 1249 1656 1249 1665 1249 1656 1249 1641 1249 1665 1249 1665 1249 1641 1249 1606 1249 1756 1249 1665 1249 1668 1249 1750 1249 1756 1249 1668 1249 1744 1249 1750 1249 1668 1249 1731 1249 1744 1249 1668 1249 1690 1249 1731 1249 1668 1249 1672 1249 1690 1249 1668 1249 1654 1249 1672 1249 1668 1249 1639 1249 1654 1249 1668 1249 1606 1249 1549 1249 1608 1249 1561 1249 1549 1249 1606 1249 1746 1249 1733 1249 1665 1249 1756 1249 1746 1249 1665 1249 1549 1249 1553 1249 1608 1249

-
- - - -

1639 1249 1668 1249 1665 1249 1606 1249 1608 1249

-

1561 1249 1266 1249 1546 1249 1549 1249

-

1576 1249 1282 1249 1266 1249 1561 1249

-

1596 1249 1591 1249 1282 1249 1576 1249

-

1604 1249 1311 1249 1591 1249 1596 1249

-

1318 1249 1311 1249 1604 1249 1626 1249

-

1634 1249 1318 1249 1626 1249 1641 1249

-

1651 1249 1634 1249 1641 1249 1656 1249

-

1669 1249 1651 1249 1656 1249 1674 1249

-

1687 1249 1669 1249 1674 1249 1692 1249

-

1687 1249 1692 1249 1733 1249 1728 1249

-

1733 1249 1746 1249 1741 1249 1728 1249

-

1746 1249 1756 1249 1753 1249 1741 1249

-

1744 1249 1742 1249 1753 1249 1756 1249 1750 1249

-

1731 1249 1729 1249 1742 1249 1744 1249

-

1690 1249 1688 1249 1729 1249 1731 1249

-

1672 1249 1670 1249 1688 1249 1690 1249

-

1654 1249 1652 1249 1670 1249 1672 1249

-

1639 1249 1635 1249 1652 1249 1654 1249

-

1624 1249 1622 1249 1635 1249 1639 1249

-

1602 1249 1600 1249 1622 1249 1624 1249

-

1594 1249 1592 1249 1600 1249 1602 1249

-

1574 1249 1572 1249 1592 1249 1594 1249

-

1559 1249 1557 1249 1572 1249 1574 1249

-

1546 1249 1557 1249 1559 1249 1553 1249 1549 1249

-

1578 1249 1541 1249 1545 1249 1583 1249

-

1551 1249 1584 1249 1583 1249 1545 1249

-

1543 1249 1582 1249 1584 1249 1551 1249

-

1582 1249 1543 1249 1539 1249 1577 1249

-

1523 1249 1562 1249 1563 1249 1525 1249

-

1527 1249 1564 1249 1562 1249 1523 1249

-

1564 1249 1527 1249 1533 1249 1566 1249

-

1537 1249 1533 1249 1527 1249 1523 1249 1525 1249 1531 1249 1536 1249 1539 1249 1543 1249 1551 1249 1545 1249 1541 1249

-

1565 1249 1531 1249 1525 1249 1563 1249

-

1531 1249 1565 1249 1568 1249 1536 1249

-

1536 1249 1568 1249 1577 1249 1539 1249

-

1720 1249 1700 1249 1686 1249 1713 1249

-

1727 1249 1701 1249 1700 1249 1720 1249

-

1718 1249 1699 1249 1701 1249 1727 1249

-

1709 1249 1705 1249 1698 1249 1694 1249 1696 1249 1703 1249 1708 1249 1711 1249 1718 1249 1727 1249 1720 1249 1713 1249

-

1705 1249 1679 1249 1677 1249 1698 1249

-

1698 1249 1677 1249 1675 1249 1694 1249

-

1694 1249 1675 1249 1676 1249 1696 1249

-

1696 1249 1676 1249 1678 1249 1703 1249

-

1703 1249 1678 1249 1684 1249 1708 1249

-

1708 1249 1684 1249 1685 1249 1711 1249

-

1711 1249 1685 1249 1699 1249 1718 1249

-

1760 1249 1716 1249 1725 1249 1764 1249

-

1752 1249 1714 1249 1716 1249 1760 1249

-

1758 1249 1715 1249 1714 1249 1752 1249

-

1770 1249 1774 1249 1788 1249 1790 1249 1786 1249 1772 1249 1769 1249 1762 1249 1758 1249 1752 1249 1760 1249 1764 1249

-

1774 1249 1737 1249 1739 1249 1788 1249

-

1788 1249 1739 1249 1740 1249 1790 1249

-

1790 1249 1740 1249 1738 1249 1786 1249

-

1786 1249 1738 1249 1736 1249 1772 1249

-

1772 1249 1736 1249 1375 1249 1769 1249

-

1769 1249 1375 1249 1724 1249 1762 1249

-

1762 1249 1724 1249 1715 1249 1758 1249

-

1466 1249 1177 1249 1451 1249 1453 1249

-

1453 1249 1451 1249 1436 1249 1441 1249

-

1441 1249 1436 1249 1422 1249 1424 1249

-

1424 1249 1422 1249 1410 1249 1412 1249

-

1412 1249 1410 1249 1406 1249 1407 1249

-

1407 1249 1406 1249 1409 1249 1411 1249

-

1411 1249 1409 1249 1152 1249 1423 1249

-

1423 1249 1152 1249 1162 1249 1440 1249

-

1440 1249 1162 1249 1450 1249 1452 1249

-

1452 1249 1450 1249 1465 1249 1181 1249

-

1181 1249 1465 1249 1193 1249 1468 1249

-

1468 1249 1193 1249 1177 1249 1466 1249

-

1647 1249 1650 1249 1649 1249 1646 1249

-

1631 1249 1647 1249 1646 1249 1630 1249

-

1614 1249 1631 1249 1630 1249 1613 1249

-

1590 1249 1614 1249 1613 1249 1589 1249

-

1519 1249 1590 1249 1589 1249 1518 1249

-

1512 1249 1519 1249 1518 1249 1511 1249

-

1504 1249 1512 1249 1511 1249 1503 1249

-

1496 1249 1504 1249 1503 1249 1495 1249

-

1490 1249 1496 1249 1495 1249 1489 1249

-

1459 1249 1490 1249 1489 1249 1458 1249

-

1434 1249 1459 1249 1458 1249 1433 1249

-

1421 1249 1434 1249 1433 1249 1420 1249

-

1643 1249 1628 1249 1610 1249 1586 1249 1515 1249 1508 1249 1500 1249 1492 1249 1486 1249 1455 1249 1431 1249 1420 1249 1433 1249 1458 1249 1489 1249 1495 1249 1503 1249 1511 1249 1518 1249 1589 1249 1613 1249 1630 1249 1646 1249 1649 1249

-

1487 1249 1456 1249 1455 1249 1486 1249

-

1493 1249 1487 1249 1486 1249 1492 1249

-

1501 1249 1493 1249 1492 1249 1500 1249

-

1509 1249 1501 1249 1500 1249 1508 1249

-

1516 1249 1509 1249 1508 1249 1515 1249

-

1587 1249 1516 1249 1515 1249 1586 1249

-

1611 1249 1587 1249 1586 1249 1610 1249

-

1629 1249 1611 1249 1610 1249 1628 1249

-

1644 1249 1629 1249 1628 1249 1643 1249

-

1650 1249 1644 1249 1643 1249 1649 1249

-

1481 1249 1215 1249 1482 1249 1218 1249

-

1480 1249 1212 1249 1481 1249 1221 1249

-

1208 1249 1476 1249 1212 1249 1480 1249

-

1471 1249 1467 1249 1186 1249 1210 1249 1476 1249

-

1474 1249 1471 1249 1476 1249 1208 1249

-

1464 1249 1461 1249 1471 1249 1474 1249

-

1138 1249 1405 1249 1418 1249 1430 1249 1443 1249 1449 1249 1464 1249 1474 1249 1197 1249

-

1430 1249 1427 1249 1438 1249 1443 1249

-

1443 1249 1438 1249 1447 1249 1449 1249

-

1449 1249 1447 1249 1461 1249 1464 1249

-

1189 1249 1467 1249 1461 1249 1447 1249 1438 1249 1427 1249 1415 1249 1408 1249 1145 1249

-

1418 1249 1415 1249 1427 1249 1430 1249

-

1405 1249 1403 1249 1415 1249 1418 1249

-

1398 1249 1395 1249 1403 1249 1405 1249

-

1130 1249 1126 1249 1391 1249 1398 1249 1400 1249

-

1126 1249 1384 1249 1389 1249 1391 1249

-

1391 1249 1389 1249 1395 1249 1398 1249

-

1393 1249 1129 1249 1132 1249 1136 1249 1399 1249 1395 1249 1389 1249 1384 1249 1386 1249

-

1393 1249 1386 1249 1387 1249 1396 1249

-

1141 1249 1393 1249 1396 1249 1402 1249

-

1413 1249 1141 1249 1402 1249 1416 1249

-

1425 1249 1413 1249 1416 1249 1428 1249

-

1435 1249 1425 1249 1428 1249 1439 1249

-

1444 1249 1435 1249 1439 1249 1445 1249

-

1173 1249 1444 1249 1445 1249 1462 1249

-

1469 1249 1173 1249 1462 1249 1472 1249

-

1206 1249 1469 1249 1472 1249 1477 1249

-

1478 1249 1206 1249 1477 1249 1479 1249

-

1224 1249 1478 1249 1479 1249 1483 1249

-

1215 1249 1224 1249 1483 1249 1482 1249

-

1498 1249 1497 1249 1484 1249 1228 1249

-
- - - -

1721 1250 1723 1250 1722 1250 1682 1250 1680 1250 1681 1250 1581 1250 1579 1250 1580 1250 1553 1250 1559 1250 1608 1250 1559 1250 1574 1250 1608 1250 1574 1250 1594 1250 1608 1250 1594 1250 1602 1250 1608 1250 1602 1250 1624 1250 1608 1250 1624 1250 1639 1250 1608 1250 1576 1250 1561 1250 1606 1250 1596 1250 1576 1250 1606 1250 1604 1250 1596 1250 1606 1250 1626 1250 1604 1250 1606 1250 1641 1250 1626 1250 1606 1250 1733 1250 1692 1250 1665 1250 1692 1250 1674 1250 1665 1250 1674 1250 1656 1250 1665 1250 1656 1250 1641 1250 1665 1250 1665 1250 1641 1250 1606 1250 1756 1250 1665 1250 1668 1250 1750 1250 1756 1250 1668 1250 1744 1250 1750 1250 1668 1250 1731 1250 1744 1250 1668 1250 1690 1250 1731 1250 1668 1250 1672 1250 1690 1250 1668 1250 1654 1250 1672 1250 1668 1250 1639 1250 1654 1250 1668 1250 1606 1250 1549 1250 1608 1250 1561 1250 1549 1250 1606 1250 1746 1250 1733 1250 1665 1250 1756 1250 1746 1250 1665 1250 1549 1250 1553 1250 1608 1250

-
- - - -

1639 1250 1668 1250 1665 1250 1606 1250 1608 1250

-

1561 1250 1266 1250 1546 1250 1549 1250

-

1576 1250 1282 1250 1266 1250 1561 1250

-

1596 1250 1591 1250 1282 1250 1576 1250

-

1604 1250 1311 1250 1591 1250 1596 1250

-

1318 1250 1311 1250 1604 1250 1626 1250

-

1634 1250 1318 1250 1626 1250 1641 1250

-

1651 1250 1634 1250 1641 1250 1656 1250

-

1669 1250 1651 1250 1656 1250 1674 1250

-

1687 1250 1669 1250 1674 1250 1692 1250

-

1687 1250 1692 1250 1733 1250 1728 1250

-

1733 1250 1746 1250 1741 1250 1728 1250

-

1746 1250 1756 1250 1753 1250 1741 1250

-

1744 1250 1742 1250 1753 1250 1756 1250 1750 1250

-

1731 1250 1729 1250 1742 1250 1744 1250

-

1690 1250 1688 1250 1729 1250 1731 1250

-

1672 1250 1670 1250 1688 1250 1690 1250

-

1654 1250 1652 1250 1670 1250 1672 1250

-

1639 1250 1635 1250 1652 1250 1654 1250

-

1624 1250 1622 1250 1635 1250 1639 1250

-

1602 1250 1600 1250 1622 1250 1624 1250

-

1594 1250 1592 1250 1600 1250 1602 1250

-

1574 1250 1572 1250 1592 1250 1594 1250

-

1559 1250 1557 1250 1572 1250 1574 1250

-

1546 1250 1557 1250 1559 1250 1553 1250 1549 1250

-

1578 1250 1541 1250 1545 1250 1583 1250

-

1551 1250 1584 1250 1583 1250 1545 1250

-

1543 1250 1582 1250 1584 1250 1551 1250

-

1582 1250 1543 1250 1539 1250 1577 1250

-

1523 1250 1562 1250 1563 1250 1525 1250

-

1527 1250 1564 1250 1562 1250 1523 1250

-

1564 1250 1527 1250 1533 1250 1566 1250

-

1537 1250 1533 1250 1527 1250 1523 1250 1525 1250 1531 1250 1536 1250 1539 1250 1543 1250 1551 1250 1545 1250 1541 1250

-

1565 1250 1531 1250 1525 1250 1563 1250

-

1531 1250 1565 1250 1568 1250 1536 1250

-

1536 1250 1568 1250 1577 1250 1539 1250

-

1720 1250 1700 1250 1686 1250 1713 1250

-

1727 1250 1701 1250 1700 1250 1720 1250

-

1718 1250 1699 1250 1701 1250 1727 1250

-

1709 1250 1705 1250 1698 1250 1694 1250 1696 1250 1703 1250 1708 1250 1711 1250 1718 1250 1727 1250 1720 1250 1713 1250

-

1705 1250 1679 1250 1677 1250 1698 1250

-

1698 1250 1677 1250 1675 1250 1694 1250

-

1694 1250 1675 1250 1676 1250 1696 1250

-

1696 1250 1676 1250 1678 1250 1703 1250

-

1703 1250 1678 1250 1684 1250 1708 1250

-

1708 1250 1684 1250 1685 1250 1711 1250

-

1711 1250 1685 1250 1699 1250 1718 1250

-

1760 1250 1716 1250 1725 1250 1764 1250

-

1752 1250 1714 1250 1716 1250 1760 1250

-

1758 1250 1715 1250 1714 1250 1752 1250

-

1770 1250 1774 1250 1788 1250 1790 1250 1786 1250 1772 1250 1769 1250 1762 1250 1758 1250 1752 1250 1760 1250 1764 1250

-

1774 1250 1737 1250 1739 1250 1788 1250

-

1788 1250 1739 1250 1740 1250 1790 1250

-

1790 1250 1740 1250 1738 1250 1786 1250

-

1786 1250 1738 1250 1736 1250 1772 1250

-

1772 1250 1736 1250 1375 1250 1769 1250

-

1769 1250 1375 1250 1724 1250 1762 1250

-

1762 1250 1724 1250 1715 1250 1758 1250

-

1466 1250 1177 1250 1451 1250 1453 1250

-

1453 1250 1451 1250 1436 1250 1441 1250

-

1441 1250 1436 1250 1422 1250 1424 1250

-

1424 1250 1422 1250 1410 1250 1412 1250

-

1412 1250 1410 1250 1406 1250 1407 1250

-

1407 1250 1406 1250 1409 1250 1411 1250

-

1411 1250 1409 1250 1152 1250 1423 1250

-

1423 1250 1152 1250 1162 1250 1440 1250

-

1440 1250 1162 1250 1450 1250 1452 1250

-

1452 1250 1450 1250 1465 1250 1181 1250

-

1181 1250 1465 1250 1193 1250 1468 1250

-

1468 1250 1193 1250 1177 1250 1466 1250

-

1647 1250 1650 1250 1649 1250 1646 1250

-

1631 1250 1647 1250 1646 1250 1630 1250

-

1614 1250 1631 1250 1630 1250 1613 1250

-

1590 1250 1614 1250 1613 1250 1589 1250

-

1519 1250 1590 1250 1589 1250 1518 1250

-

1512 1250 1519 1250 1518 1250 1511 1250

-

1504 1250 1512 1250 1511 1250 1503 1250

-

1496 1250 1504 1250 1503 1250 1495 1250

-

1490 1250 1496 1250 1495 1250 1489 1250

-

1459 1250 1490 1250 1489 1250 1458 1250

-

1434 1250 1459 1250 1458 1250 1433 1250

-

1421 1250 1434 1250 1433 1250 1420 1250

-

1643 1250 1628 1250 1610 1250 1586 1250 1515 1250 1508 1250 1500 1250 1492 1250 1486 1250 1455 1250 1431 1250 1420 1250 1433 1250 1458 1250 1489 1250 1495 1250 1503 1250 1511 1250 1518 1250 1589 1250 1613 1250 1630 1250 1646 1250 1649 1250

-

1487 1250 1456 1250 1455 1250 1486 1250

-

1493 1250 1487 1250 1486 1250 1492 1250

-

1501 1250 1493 1250 1492 1250 1500 1250

-

1509 1250 1501 1250 1500 1250 1508 1250

-

1516 1250 1509 1250 1508 1250 1515 1250

-

1587 1250 1516 1250 1515 1250 1586 1250

-

1611 1250 1587 1250 1586 1250 1610 1250

-

1629 1250 1611 1250 1610 1250 1628 1250

-

1644 1250 1629 1250 1628 1250 1643 1250

-

1650 1250 1644 1250 1643 1250 1649 1250

-

1481 1250 1215 1250 1482 1250 1218 1250

-

1480 1250 1212 1250 1481 1250 1221 1250

-

1208 1250 1476 1250 1212 1250 1480 1250

-

1471 1250 1467 1250 1186 1250 1210 1250 1476 1250

-

1474 1250 1471 1250 1476 1250 1208 1250

-

1464 1250 1461 1250 1471 1250 1474 1250

-

1138 1250 1405 1250 1418 1250 1430 1250 1443 1250 1449 1250 1464 1250 1474 1250 1197 1250

-

1430 1250 1427 1250 1438 1250 1443 1250

-

1443 1250 1438 1250 1447 1250 1449 1250

-

1449 1250 1447 1250 1461 1250 1464 1250

-

1189 1250 1467 1250 1461 1250 1447 1250 1438 1250 1427 1250 1415 1250 1408 1250 1145 1250

-

1418 1250 1415 1250 1427 1250 1430 1250

-

1405 1250 1403 1250 1415 1250 1418 1250

-

1398 1250 1395 1250 1403 1250 1405 1250

-

1130 1250 1126 1250 1391 1250 1398 1250 1400 1250

-

1126 1250 1384 1250 1389 1250 1391 1250

-

1391 1250 1389 1250 1395 1250 1398 1250

-

1393 1250 1129 1250 1132 1250 1136 1250 1399 1250 1395 1250 1389 1250 1384 1250 1386 1250

-

1393 1250 1386 1250 1387 1250 1396 1250

-

1141 1250 1393 1250 1396 1250 1402 1250

-

1413 1250 1141 1250 1402 1250 1416 1250

-

1425 1250 1413 1250 1416 1250 1428 1250

-

1435 1250 1425 1250 1428 1250 1439 1250

-

1444 1250 1435 1250 1439 1250 1445 1250

-

1173 1250 1444 1250 1445 1250 1462 1250

-

1469 1250 1173 1250 1462 1250 1472 1250

-

1206 1250 1469 1250 1472 1250 1477 1250

-

1478 1250 1206 1250 1477 1250 1479 1250

-

1224 1250 1478 1250 1479 1250 1483 1250

-

1215 1250 1224 1250 1483 1250 1482 1250

-

1498 1250 1497 1250 1484 1250 1228 1250

-

1225 1250 1484 1250 1150 1250 1139 1250

-
- - - -

1721 1139 1723 1141 1722 1140 1682 1100 1680 1098 1681 1099 1581 999 1579 997 1580 998 1553 971 1559 977 1608 1026 1559 977 1574 992 1608 1026 1574 992 1594 1012 1608 1026 1594 1012 1602 1020 1608 1026 1602 1020 1624 1042 1607 1025 1624 1042 1639 1057 1607 1025 1576 994 1561 979 1605 1023 1596 1014 1576 994 1605 1023 1604 1022 1596 1014 1605 1023 1626 1044 1604 1022 1605 1023 1641 1059 1626 1044 1606 1024 1732 1150 1691 1109 1665 1083 1691 1109 1673 1091 1665 1083 1673 1091 1655 1073 1665 1083 1655 1073 1641 1059 1665 1083 1665 1083 1641 1059 1605 1023 1755 1173 1665 1083 1668 1086 1749 1167 1754 1172 1666 1084 1743 1161 1749 1167 1667 1085 1730 1148 1743 1161 1668 1086 1689 1107 1730 1148 1668 1086 1671 1089 1689 1107 1666 1084 1653 1071 1671 1089 1668 1086 1639 1057 1653 1071 1666 1084 1605 1023 1548 966 1607 1025 1561 979 1548 966 1605 1023 1745 1163 1732 1150 1663 1081 1755 1173 1745 1163 1664 1082 1549 967 1553 971 1608 1026

-
- - - -

1639 1057 1668 1086 1665 1083 1605 1023 1607 1025

-

1560 978 1556 974 1546 964 1547 965

-

1575 993 1571 989 1556 974 1560 978

-

1595 1013 1591 1009 1571 989 1575 993

-

1603 1021 1599 1017 1591 1009 1595 1013

-

1621 1039 1599 1017 1603 1021 1625 1043

-

1634 1052 1621 1039 1625 1043 1640 1058

-

1651 1069 1634 1052 1640 1058 1656 1074

-

1669 1087 1651 1069 1656 1074 1674 1092

-

1687 1105 1669 1087 1674 1092 1692 1110

-

1687 1105 1692 1110 1733 1151 1728 1146

-

1733 1151 1746 1164 1741 1159 1728 1146

-

1746 1164 1756 1174 1753 1171 1741 1159

-

1744 1162 1742 1160 1753 1171 1756 1174 1750 1168

-

1731 1149 1729 1147 1742 1160 1744 1162

-

1690 1108 1688 1106 1729 1147 1731 1149

-

1672 1090 1670 1088 1688 1106 1690 1108

-

1654 1072 1652 1070 1670 1088 1672 1090

-

1638 1056 1635 1053 1652 1070 1654 1072

-

1623 1041 1622 1040 1635 1053 1638 1056

-

1601 1019 1600 1018 1622 1040 1623 1041

-

1593 1011 1592 1010 1600 1018 1601 1019

-

1573 991 1572 990 1592 1010 1593 1011

-

1558 976 1557 975 1572 990 1573 991

-

1546 964 1557 975 1558 976 1552 970 1547 965

-

1578 996 1541 959 1545 963 1583 1001

-

1551 969 1584 1002 1583 1001 1545 963

-

1543 961 1582 1000 1584 1002 1551 969

-

1582 1000 1543 961 1539 957 1577 995

-

1523 941 1562 980 1563 981 1525 943

-

1527 945 1564 982 1562 980 1523 941

-

1564 982 1527 945 1533 951 1566 984

-

1537 955 1532 950 1526 944 1522 940 1524 942 1530 948 1534 952 1538 956 1542 960 1550 968 1544 962 1540 958

-

1565 983 1531 949 1525 943 1563 981

-

1531 949 1565 983 1567 985 1535 953

-

1536 954 1568 986 1577 995 1539 957

-

1720 1138 1700 1118 1686 1104 1713 1131

-

1727 1145 1701 1119 1700 1118 1720 1138

-

1718 1136 1699 1117 1701 1119 1727 1145

-

1709 1127 1705 1123 1698 1116 1694 1112 1696 1114 1703 1121 1707 1125 1710 1128 1717 1135 1726 1144 1719 1137 1712 1130

-

1704 1122 1679 1097 1677 1095 1697 1115

-

1697 1115 1677 1095 1675 1093 1693 1111

-

1693 1111 1675 1093 1676 1094 1695 1113

-

1695 1113 1676 1094 1678 1096 1702 1120

-

1702 1120 1678 1096 1683 1101 1706 1124

-

1708 1126 1684 1102 1685 1103 1711 1129

-

1711 1129 1685 1103 1699 1117 1718 1136

-

1759 1177 1716 1134 1725 1143 1763 1181

-

1751 1169 1714 1132 1716 1134 1759 1177

-

1757 1175 1715 1133 1714 1132 1751 1169

-

1770 1188 1774 1192 1788 1206 1790 1208 1786 1204 1772 1190 1769 1187 1762 1180 1758 1176 1752 1170 1760 1178 1764 1182

-

1773 1191 1737 1155 1739 1157 1787 1205

-

1787 1205 1739 1157 1740 1158 1789 1207

-

1789 1207 1740 1158 1738 1156 1785 1203

-

1785 1203 1738 1156 1736 1154 1771 1189

-

1771 1189 1736 1154 1735 1153 1768 1186

-

1767 1185 1734 1152 1724 1142 1761 1179

-

1761 1179 1724 1142 1715 1133 1757 1175

-

1466 884 1174 592 1451 869 1453 871

-

1453 871 1451 869 1436 854 1441 859

-

1441 859 1436 854 1422 840 1424 842

-

1424 842 1422 840 1410 828 1412 830

-

1412 830 1410 828 1406 824 1407 825

-

1407 825 1406 824 1409 827 1411 829

-

1411 829 1409 827 1152 570 1423 841

-

1423 841 1152 570 1162 580 1440 858

-

1440 858 1162 580 1450 868 1452 870

-

1452 870 1450 868 1465 883 1178 596

-

1178 596 1465 883 1192 610 1468 886

-

1468 886 1192 610 1174 592 1466 884

-

1647 1065 1650 1068 1649 1067 1646 1064

-

1631 1049 1647 1065 1646 1064 1630 1048

-

1614 1032 1631 1049 1630 1048 1613 1031

-

1590 1008 1614 1032 1613 1031 1589 1007

-

1519 937 1590 1008 1589 1007 1518 936

-

1512 930 1519 937 1518 936 1511 929

-

1504 922 1512 930 1511 929 1502 920

-

1496 914 1504 922 1502 920 1494 912

-

1490 908 1496 914 1494 912 1488 906

-

1459 877 1490 908 1488 906 1457 875

-

1434 852 1459 877 1457 875 1432 850

-

1421 839 1434 852 1432 850 1419 837

-

1642 1060 1627 1045 1609 1027 1298 716 1514 932 1508 926 1500 918 1492 910 1486 904 1455 873 1431 849 1420 838 1433 851 1458 876 1489 907 1495 913 1503 921 1510 928 1517 935 1588 1006 1612 1030 1323 741 1645 1063 1648 1066

-

1487 905 1456 874 1454 872 1485 903

-

1493 911 1487 905 1485 903 1491 909

-

1501 919 1493 911 1491 909 1499 917

-

1509 927 1501 919 1499 917 1507 925

-

1516 934 1509 927 1507 925 1515 933

-

1587 1005 1516 934 1515 933 1586 1004

-

1611 1029 1587 1005 1586 1004 1610 1028

-

1629 1047 1611 1029 1610 1028 1628 1046

-

1644 1062 1629 1047 1628 1046 1643 1061

-

1650 1068 1644 1062 1643 1061 1649 1067

-

1481 899 1215 633 1482 900 1218 636

-

1480 898 1212 630 1481 899 1221 639

-

1208 626 1476 894 1212 630 1480 898

-

1470 888 1467 885 1186 604 1210 628 1475 893

-

1474 892 1471 889 1476 894 1208 626

-

1464 882 1461 879 1471 889 1474 892

-

1138 556 1405 823 1418 836 1430 848 1443 861 1448 866 1463 881 1473 891 1197 615

-

1429 847 1426 844 1438 856 1442 860

-

1442 860 1438 856 1447 865 1449 867

-

1449 867 1447 865 1461 879 1464 882

-

1189 607 1467 885 1460 878 1446 864 1437 855 1427 845 1415 833 1408 826 1145 563

-

1417 835 1414 832 1426 844 1429 847

-

1404 822 1403 821 1414 832 1417 835

-

1397 815 1394 812 1403 821 1404 822

-

1130 548 1126 544 1391 809 1398 816 1400 818

-

1123 541 1383 801 1388 806 1390 808

-

1390 808 1388 806 1394 812 1397 815

-

1393 811 1129 547 1132 550 1136 554 1399 817 1395 813 1389 807 1384 802 1386 804

-

1392 810 1385 803 1387 805 1396 814

-

1401 819 1392 810 1396 814 1402 820

-

1413 831 1401 819 1402 820 1416 834

-

1425 843 1413 831 1416 834 1428 846

-

1435 853 1425 843 1428 846 1439 857

-

1444 862 1435 853 1439 857 1445 863

-

1173 591 1444 862 1445 863 1462 880

-

1469 887 1173 591 1462 880 1472 890

-

1206 624 1469 887 1472 890 1477 895

-

1478 896 1206 624 1477 895 1479 897

-

1224 642 1478 896 1479 897 1483 901

-

1215 633 1224 642 1483 901 1482 900

-

1498 916 1497 915 1484 902 1226 644

-

1225 643 1484 902 1150 568 1139 557

-

1259 677 1520 938 1521 939 1529 947

-

1520 938 1257 675 1528 946 1521 939

-

1257 675 1554 972 1555 973 1528 946

-

1554 972 1569 987 1570 988 1555 973

-
- - - -

1721 1139 1723 1141 1722 1140 1682 1100 1680 1098 1681 1099 1581 999 1579 997 1580 998 1553 971 1559 977 1608 1026 1559 977 1574 992 1608 1026 1574 992 1594 1012 1608 1026 1594 1012 1602 1020 1608 1026 1602 1020 1624 1042 1607 1025 1624 1042 1639 1057 1607 1025 1576 994 1561 979 1605 1023 1596 1014 1576 994 1605 1023 1604 1022 1596 1014 1605 1023 1626 1044 1604 1022 1605 1023 1641 1059 1626 1044 1606 1024 1732 1150 1691 1109 1665 1083 1691 1109 1673 1091 1665 1083 1673 1091 1655 1073 1665 1083 1655 1073 1641 1059 1665 1083 1665 1083 1641 1059 1605 1023 1755 1173 1665 1083 1668 1086 1749 1167 1754 1172 1666 1084 1743 1161 1749 1167 1667 1085 1730 1148 1743 1161 1668 1086 1689 1107 1730 1148 1668 1086 1671 1089 1689 1107 1666 1084 1653 1071 1671 1089 1668 1086 1639 1057 1653 1071 1666 1084 1605 1023 1548 966 1607 1025 1561 979 1548 966 1605 1023 1745 1163 1732 1150 1663 1081 1755 1173 1745 1163 1664 1082 1549 967 1553 971 1608 1026

-
- - - -

1639 1057 1668 1086 1665 1083 1605 1023 1607 1025

-

1560 978 1556 974 1546 964 1547 965

-

1575 993 1571 989 1556 974 1560 978

-

1595 1013 1591 1009 1571 989 1575 993

-

1603 1021 1599 1017 1591 1009 1595 1013

-

1621 1039 1599 1017 1603 1021 1625 1043

-

1634 1052 1621 1039 1625 1043 1640 1058

-

1651 1069 1634 1052 1640 1058 1656 1074

-

1669 1087 1651 1069 1656 1074 1674 1092

-

1687 1105 1669 1087 1674 1092 1692 1110

-

1687 1105 1692 1110 1733 1151 1728 1146

-

1733 1151 1746 1164 1741 1159 1728 1146

-

1746 1164 1756 1174 1753 1171 1741 1159

-

1744 1162 1742 1160 1753 1171 1756 1174 1750 1168

-

1731 1149 1729 1147 1742 1160 1744 1162

-

1690 1108 1688 1106 1729 1147 1731 1149

-

1672 1090 1670 1088 1688 1106 1690 1108

-

1654 1072 1652 1070 1670 1088 1672 1090

-

1638 1056 1635 1053 1652 1070 1654 1072

-

1623 1041 1622 1040 1635 1053 1638 1056

-

1601 1019 1600 1018 1622 1040 1623 1041

-

1593 1011 1592 1010 1600 1018 1601 1019

-

1573 991 1572 990 1592 1010 1593 1011

-

1558 976 1557 975 1572 990 1573 991

-

1546 964 1557 975 1558 976 1552 970 1547 965

-

1578 996 1541 959 1545 963 1583 1001

-

1551 969 1584 1002 1583 1001 1545 963

-

1543 961 1582 1000 1584 1002 1551 969

-

1582 1000 1543 961 1539 957 1577 995

-

1523 941 1562 980 1563 981 1525 943

-

1527 945 1564 982 1562 980 1523 941

-

1564 982 1527 945 1533 951 1566 984

-

1537 955 1532 950 1526 944 1522 940 1524 942 1530 948 1534 952 1538 956 1542 960 1550 968 1544 962 1540 958

-

1565 983 1531 949 1525 943 1563 981

-

1531 949 1565 983 1567 985 1535 953

-

1536 954 1568 986 1577 995 1539 957

-

1720 1138 1700 1118 1686 1104 1713 1131

-

1727 1145 1701 1119 1700 1118 1720 1138

-

1718 1136 1699 1117 1701 1119 1727 1145

-

1709 1127 1705 1123 1698 1116 1694 1112 1696 1114 1703 1121 1707 1125 1710 1128 1717 1135 1726 1144 1719 1137 1712 1130

-

1704 1122 1679 1097 1677 1095 1697 1115

-

1697 1115 1677 1095 1675 1093 1693 1111

-

1693 1111 1675 1093 1676 1094 1695 1113

-

1695 1113 1676 1094 1678 1096 1702 1120

-

1702 1120 1678 1096 1683 1101 1706 1124

-

1708 1126 1684 1102 1685 1103 1711 1129

-

1711 1129 1685 1103 1699 1117 1718 1136

-

1759 1177 1716 1134 1725 1143 1763 1181

-

1751 1169 1714 1132 1716 1134 1759 1177

-

1757 1175 1715 1133 1714 1132 1751 1169

-

1770 1188 1774 1192 1788 1206 1790 1208 1786 1204 1772 1190 1769 1187 1762 1180 1758 1176 1752 1170 1760 1178 1764 1182

-

1773 1191 1737 1155 1739 1157 1787 1205

-

1787 1205 1739 1157 1740 1158 1789 1207

-

1789 1207 1740 1158 1738 1156 1785 1203

-

1785 1203 1738 1156 1736 1154 1771 1189

-

1771 1189 1736 1154 1735 1153 1768 1186

-

1767 1185 1734 1152 1724 1142 1761 1179

-

1761 1179 1724 1142 1715 1133 1757 1175

-

1466 884 1174 592 1451 869 1453 871

-

1453 871 1451 869 1436 854 1441 859

-

1441 859 1436 854 1422 840 1424 842

-

1424 842 1422 840 1410 828 1412 830

-

1412 830 1410 828 1406 824 1407 825

-

1407 825 1406 824 1409 827 1411 829

-

1411 829 1409 827 1152 570 1423 841

-

1423 841 1152 570 1162 580 1440 858

-

1440 858 1162 580 1450 868 1452 870

-

1452 870 1450 868 1465 883 1178 596

-

1178 596 1465 883 1192 610 1468 886

-

1468 886 1192 610 1174 592 1466 884

-

1647 1065 1650 1068 1649 1067 1646 1064

-

1631 1049 1647 1065 1646 1064 1630 1048

-

1614 1032 1631 1049 1630 1048 1613 1031

-

1590 1008 1614 1032 1613 1031 1589 1007

-

1519 937 1590 1008 1589 1007 1518 936

-

1512 930 1519 937 1518 936 1511 929

-

1504 922 1512 930 1511 929 1502 920

-

1496 914 1504 922 1502 920 1494 912

-

1490 908 1496 914 1494 912 1488 906

-

1459 877 1490 908 1488 906 1457 875

-

1434 852 1459 877 1457 875 1432 850

-

1421 839 1434 852 1432 850 1419 837

-

1642 1060 1627 1045 1609 1027 1298 716 1514 932 1508 926 1500 918 1492 910 1486 904 1455 873 1431 849 1420 838 1433 851 1458 876 1489 907 1495 913 1503 921 1510 928 1517 935 1588 1006 1612 1030 1323 741 1645 1063 1648 1066

-

1487 905 1456 874 1454 872 1485 903

-

1493 911 1487 905 1485 903 1491 909

-

1501 919 1493 911 1491 909 1499 917

-

1509 927 1501 919 1499 917 1507 925

-

1516 934 1509 927 1507 925 1515 933

-

1587 1005 1516 934 1515 933 1586 1004

-

1611 1029 1587 1005 1586 1004 1610 1028

-

1629 1047 1611 1029 1610 1028 1628 1046

-

1644 1062 1629 1047 1628 1046 1643 1061

-

1650 1068 1644 1062 1643 1061 1649 1067

-

1481 899 1215 633 1482 900 1218 636

-

1480 898 1212 630 1481 899 1221 639

-

1208 626 1476 894 1212 630 1480 898

-

1470 888 1467 885 1186 604 1210 628 1475 893

-

1474 892 1471 889 1476 894 1208 626

-

1464 882 1461 879 1471 889 1474 892

-

1138 556 1405 823 1418 836 1430 848 1443 861 1448 866 1463 881 1473 891 1197 615

-

1429 847 1426 844 1438 856 1442 860

-

1442 860 1438 856 1447 865 1449 867

-

1449 867 1447 865 1461 879 1464 882

-

1189 607 1467 885 1460 878 1446 864 1437 855 1427 845 1415 833 1408 826 1145 563

-

1417 835 1414 832 1426 844 1429 847

-

1404 822 1403 821 1414 832 1417 835

-

1397 815 1394 812 1403 821 1404 822

-

1130 548 1126 544 1391 809 1398 816 1400 818

-

1123 541 1383 801 1388 806 1390 808

-

1390 808 1388 806 1394 812 1397 815

-

1393 811 1129 547 1132 550 1136 554 1399 817 1395 813 1389 807 1384 802 1386 804

-

1392 810 1385 803 1387 805 1396 814

-

1401 819 1392 810 1396 814 1402 820

-

1413 831 1401 819 1402 820 1416 834

-

1425 843 1413 831 1416 834 1428 846

-

1435 853 1425 843 1428 846 1439 857

-

1444 862 1435 853 1439 857 1445 863

-

1173 591 1444 862 1445 863 1462 880

-

1469 887 1173 591 1462 880 1472 890

-

1206 624 1469 887 1472 890 1477 895

-

1478 896 1206 624 1477 895 1479 897

-

1224 642 1478 896 1479 897 1483 901

-

1215 633 1224 642 1483 901 1482 900

-

1498 916 1497 915 1484 902 1226 644

-

1225 643 1484 902 1150 568 1139 557

-

1259 677 1520 938 1521 939 1529 947

-

1520 938 1257 675 1528 946 1521 939

-

1257 675 1554 972 1555 973 1528 946

-

1554 972 1569 987 1570 988 1555 973

-

1505 923 1237 655 1243 661 1506 924

-

1236 654 1239 657 1513 931 1242 660

-
- - - -

1721 1139 1723 1141 1722 1140 1682 1100 1680 1098 1681 1099 1581 999 1579 997 1580 998 1553 971 1559 977 1608 1026 1559 977 1574 992 1608 1026 1574 992 1594 1012 1608 1026 1594 1012 1602 1020 1608 1026 1602 1020 1624 1042 1607 1025 1624 1042 1639 1057 1607 1025 1576 994 1561 979 1605 1023 1596 1014 1576 994 1605 1023 1604 1022 1596 1014 1605 1023 1626 1044 1604 1022 1605 1023 1641 1059 1626 1044 1606 1024 1732 1150 1691 1109 1665 1083 1691 1109 1673 1091 1665 1083 1673 1091 1655 1073 1665 1083 1655 1073 1641 1059 1665 1083 1665 1083 1641 1059 1605 1023 1755 1173 1665 1083 1668 1086 1749 1167 1754 1172 1666 1084 1743 1161 1749 1167 1667 1085 1730 1148 1743 1161 1668 1086 1689 1107 1730 1148 1668 1086 1671 1089 1689 1107 1666 1084 1653 1071 1671 1089 1668 1086 1639 1057 1653 1071 1666 1084 1605 1023 1548 966 1607 1025 1561 979 1548 966 1605 1023 1745 1163 1732 1150 1663 1081 1755 1173 1745 1163 1664 1082 1549 967 1553 971 1608 1026

-
- - - -

1639 1057 1668 1086 1665 1083 1605 1023 1607 1025

-

1560 978 1556 974 1546 964 1547 965

-

1575 993 1571 989 1556 974 1560 978

-

1595 1013 1591 1009 1571 989 1575 993

-

1603 1021 1599 1017 1591 1009 1595 1013

-

1621 1039 1599 1017 1603 1021 1625 1043

-

1634 1052 1621 1039 1625 1043 1640 1058

-

1651 1069 1634 1052 1640 1058 1656 1074

-

1669 1087 1651 1069 1656 1074 1674 1092

-

1687 1105 1669 1087 1674 1092 1692 1110

-

1687 1105 1692 1110 1733 1151 1728 1146

-

1733 1151 1746 1164 1741 1159 1728 1146

-

1746 1164 1756 1174 1753 1171 1741 1159

-

1744 1162 1742 1160 1753 1171 1756 1174 1750 1168

-

1731 1149 1729 1147 1742 1160 1744 1162

-

1690 1108 1688 1106 1729 1147 1731 1149

-

1672 1090 1670 1088 1688 1106 1690 1108

-

1654 1072 1652 1070 1670 1088 1672 1090

-

1638 1056 1635 1053 1652 1070 1654 1072

-

1623 1041 1622 1040 1635 1053 1638 1056

-

1601 1019 1600 1018 1622 1040 1623 1041

-

1593 1011 1592 1010 1600 1018 1601 1019

-

1573 991 1572 990 1592 1010 1593 1011

-

1558 976 1557 975 1572 990 1573 991

-

1546 964 1557 975 1558 976 1552 970 1547 965

-

1578 996 1541 959 1545 963 1583 1001

-

1551 969 1584 1002 1583 1001 1545 963

-

1543 961 1582 1000 1584 1002 1551 969

-

1582 1000 1543 961 1539 957 1577 995

-

1523 941 1562 980 1563 981 1525 943

-

1527 945 1564 982 1562 980 1523 941

-

1564 982 1527 945 1533 951 1566 984

-

1537 955 1532 950 1526 944 1522 940 1524 942 1530 948 1534 952 1538 956 1542 960 1550 968 1544 962 1540 958

-

1565 983 1531 949 1525 943 1563 981

-

1531 949 1565 983 1567 985 1535 953

-

1536 954 1568 986 1577 995 1539 957

-

1720 1138 1700 1118 1686 1104 1713 1131

-

1727 1145 1701 1119 1700 1118 1720 1138

-

1718 1136 1699 1117 1701 1119 1727 1145

-

1709 1127 1705 1123 1698 1116 1694 1112 1696 1114 1703 1121 1707 1125 1710 1128 1717 1135 1726 1144 1719 1137 1712 1130

-

1704 1122 1679 1097 1677 1095 1697 1115

-

1697 1115 1677 1095 1675 1093 1693 1111

-

1693 1111 1675 1093 1676 1094 1695 1113

-

1695 1113 1676 1094 1678 1096 1702 1120

-

1702 1120 1678 1096 1683 1101 1706 1124

-

1708 1126 1684 1102 1685 1103 1711 1129

-

1711 1129 1685 1103 1699 1117 1718 1136

-

1759 1177 1716 1134 1725 1143 1763 1181

-

1751 1169 1714 1132 1716 1134 1759 1177

-

1757 1175 1715 1133 1714 1132 1751 1169

-

1770 1188 1774 1192 1788 1206 1790 1208 1786 1204 1772 1190 1769 1187 1762 1180 1758 1176 1752 1170 1760 1178 1764 1182

-

1773 1191 1737 1155 1739 1157 1787 1205

-

1787 1205 1739 1157 1740 1158 1789 1207

-

1789 1207 1740 1158 1738 1156 1785 1203

-

1785 1203 1738 1156 1736 1154 1771 1189

-

1771 1189 1736 1154 1735 1153 1768 1186

-

1767 1185 1734 1152 1724 1142 1761 1179

-

1761 1179 1724 1142 1715 1133 1757 1175

-

1466 884 1174 592 1451 869 1453 871

-

1453 871 1451 869 1436 854 1441 859

-

1441 859 1436 854 1422 840 1424 842

-

1424 842 1422 840 1410 828 1412 830

-

1412 830 1410 828 1406 824 1407 825

-

1407 825 1406 824 1409 827 1411 829

-

1411 829 1409 827 1152 570 1423 841

-

1423 841 1152 570 1162 580 1440 858

-

1440 858 1162 580 1450 868 1452 870

-

1452 870 1450 868 1465 883 1178 596

-

1178 596 1465 883 1192 610 1468 886

-

1468 886 1192 610 1174 592 1466 884

-

1647 1065 1650 1068 1649 1067 1646 1064

-

1631 1049 1647 1065 1646 1064 1630 1048

-

1614 1032 1631 1049 1630 1048 1613 1031

-

1590 1008 1614 1032 1613 1031 1589 1007

-

1519 937 1590 1008 1589 1007 1518 936

-

1512 930 1519 937 1518 936 1511 929

-

1504 922 1512 930 1511 929 1502 920

-

1496 914 1504 922 1502 920 1494 912

-

1490 908 1496 914 1494 912 1488 906

-

1459 877 1490 908 1488 906 1457 875

-

1434 852 1459 877 1457 875 1432 850

-

1421 839 1434 852 1432 850 1419 837

-

1642 1060 1627 1045 1609 1027 1298 716 1514 932 1508 926 1500 918 1492 910 1486 904 1455 873 1431 849 1420 838 1433 851 1458 876 1489 907 1495 913 1503 921 1510 928 1517 935 1588 1006 1612 1030 1323 741 1645 1063 1648 1066

-

1487 905 1456 874 1454 872 1485 903

-

1493 911 1487 905 1485 903 1491 909

-

1501 919 1493 911 1491 909 1499 917

-

1509 927 1501 919 1499 917 1507 925

-

1516 934 1509 927 1507 925 1515 933

-

1587 1005 1516 934 1515 933 1586 1004

-

1611 1029 1587 1005 1586 1004 1610 1028

-

1629 1047 1611 1029 1610 1028 1628 1046

-

1644 1062 1629 1047 1628 1046 1643 1061

-

1650 1068 1644 1062 1643 1061 1649 1067

-

1481 899 1215 633 1482 900 1218 636

-

1480 898 1212 630 1481 899 1221 639

-

1208 626 1476 894 1212 630 1480 898

-

1470 888 1467 885 1186 604 1210 628 1475 893

-

1474 892 1471 889 1476 894 1208 626

-

1464 882 1461 879 1471 889 1474 892

-

1138 556 1405 823 1418 836 1430 848 1443 861 1448 866 1463 881 1473 891 1197 615

-

1429 847 1426 844 1438 856 1442 860

-

1442 860 1438 856 1447 865 1449 867

-

1449 867 1447 865 1461 879 1464 882

-

1189 607 1467 885 1460 878 1446 864 1437 855 1427 845 1415 833 1408 826 1145 563

-

1417 835 1414 832 1426 844 1429 847

-

1404 822 1403 821 1414 832 1417 835

-

1397 815 1394 812 1403 821 1404 822

-

1130 548 1126 544 1391 809 1398 816 1400 818

-

1123 541 1383 801 1388 806 1390 808

-

1390 808 1388 806 1394 812 1397 815

-

1393 811 1129 547 1132 550 1136 554 1399 817 1395 813 1389 807 1384 802 1386 804

-

1392 810 1385 803 1387 805 1396 814

-

1401 819 1392 810 1396 814 1402 820

-

1413 831 1401 819 1402 820 1416 834

-

1425 843 1413 831 1416 834 1428 846

-

1435 853 1425 843 1428 846 1439 857

-

1444 862 1435 853 1439 857 1445 863

-

1173 591 1444 862 1445 863 1462 880

-

1469 887 1173 591 1462 880 1472 890

-

1206 624 1469 887 1472 890 1477 895

-

1478 896 1206 624 1477 895 1479 897

-

1224 642 1478 896 1479 897 1483 901

-

1215 633 1224 642 1483 901 1482 900

-

1498 916 1497 915 1484 902 1226 644

-

1225 643 1484 902 1150 568 1139 557

-

1259 677 1520 938 1521 939 1529 947

-

1520 938 1257 675 1528 946 1521 939

-

1257 675 1554 972 1555 973 1528 946

-

1554 972 1569 987 1570 988 1555 973

-

1505 923 1237 655 1243 661 1506 924

-

1236 654 1239 657 1513 931 1242 660

-

1748 1166 1368 786 1365 783 1747 1165

-

1784 1202 1748 1166 1747 1165 1780 1198

-

1382 800 1782 1200 1778 1196 1380 798

-

1765 1183 1777 1195 1791 1209 1779 1197 1766 1184

-

1782 1200 1794 1212 1792 1210 1778 1196

-

1781 1199 1775 1193 1776 1194 1783 1201 1793 1211

-

1794 1212 1784 1202 1780 1198 1792 1210

-
- - - -

1721 1139 1723 1141 1722 1140 1682 1100 1680 1098 1681 1099 1581 999 1579 997 1580 998 1553 971 1559 977 1608 1026 1559 977 1574 992 1608 1026 1574 992 1594 1012 1608 1026 1594 1012 1602 1020 1608 1026 1602 1020 1624 1042 1607 1025 1624 1042 1639 1057 1607 1025 1576 994 1561 979 1605 1023 1596 1014 1576 994 1605 1023 1604 1022 1596 1014 1605 1023 1626 1044 1604 1022 1605 1023 1641 1059 1626 1044 1606 1024 1732 1150 1691 1109 1665 1083 1691 1109 1673 1091 1665 1083 1673 1091 1655 1073 1665 1083 1655 1073 1641 1059 1665 1083 1665 1083 1641 1059 1605 1023 1755 1173 1665 1083 1668 1086 1749 1167 1754 1172 1666 1084 1743 1161 1749 1167 1667 1085 1730 1148 1743 1161 1668 1086 1689 1107 1730 1148 1668 1086 1671 1089 1689 1107 1666 1084 1653 1071 1671 1089 1668 1086 1639 1057 1653 1071 1666 1084 1605 1023 1548 966 1607 1025 1561 979 1548 966 1605 1023 1745 1163 1732 1150 1663 1081 1755 1173 1745 1163 1664 1082 1549 967 1553 971 1608 1026

-
- - - -

1639 1057 1668 1086 1665 1083 1605 1023 1607 1025

-

1560 978 1556 974 1546 964 1547 965

-

1575 993 1571 989 1556 974 1560 978

-

1595 1013 1591 1009 1571 989 1575 993

-

1603 1021 1599 1017 1591 1009 1595 1013

-

1621 1039 1599 1017 1603 1021 1625 1043

-

1634 1052 1621 1039 1625 1043 1640 1058

-

1651 1069 1634 1052 1640 1058 1656 1074

-

1669 1087 1651 1069 1656 1074 1674 1092

-

1687 1105 1669 1087 1674 1092 1692 1110

-

1687 1105 1692 1110 1733 1151 1728 1146

-

1733 1151 1746 1164 1741 1159 1728 1146

-

1746 1164 1756 1174 1753 1171 1741 1159

-

1744 1162 1742 1160 1753 1171 1756 1174 1750 1168

-

1731 1149 1729 1147 1742 1160 1744 1162

-

1690 1108 1688 1106 1729 1147 1731 1149

-

1672 1090 1670 1088 1688 1106 1690 1108

-

1654 1072 1652 1070 1670 1088 1672 1090

-

1638 1056 1635 1053 1652 1070 1654 1072

-

1623 1041 1622 1040 1635 1053 1638 1056

-

1601 1019 1600 1018 1622 1040 1623 1041

-

1593 1011 1592 1010 1600 1018 1601 1019

-

1573 991 1572 990 1592 1010 1593 1011

-

1558 976 1557 975 1572 990 1573 991

-

1546 964 1557 975 1558 976 1552 970 1547 965

-

1578 996 1541 959 1545 963 1583 1001

-

1551 969 1584 1002 1583 1001 1545 963

-

1543 961 1582 1000 1584 1002 1551 969

-

1582 1000 1543 961 1539 957 1577 995

-

1523 941 1562 980 1563 981 1525 943

-

1527 945 1564 982 1562 980 1523 941

-

1564 982 1527 945 1533 951 1566 984

-

1537 955 1532 950 1526 944 1522 940 1524 942 1530 948 1534 952 1538 956 1542 960 1550 968 1544 962 1540 958

-

1565 983 1531 949 1525 943 1563 981

-

1531 949 1565 983 1567 985 1535 953

-

1536 954 1568 986 1577 995 1539 957

-

1720 1138 1700 1118 1686 1104 1713 1131

-

1727 1145 1701 1119 1700 1118 1720 1138

-

1718 1136 1699 1117 1701 1119 1727 1145

-

1709 1127 1705 1123 1698 1116 1694 1112 1696 1114 1703 1121 1707 1125 1710 1128 1717 1135 1726 1144 1719 1137 1712 1130

-

1704 1122 1679 1097 1677 1095 1697 1115

-

1697 1115 1677 1095 1675 1093 1693 1111

-

1693 1111 1675 1093 1676 1094 1695 1113

-

1695 1113 1676 1094 1678 1096 1702 1120

-

1702 1120 1678 1096 1683 1101 1706 1124

-

1708 1126 1684 1102 1685 1103 1711 1129

-

1711 1129 1685 1103 1699 1117 1718 1136

-

1759 1177 1716 1134 1725 1143 1763 1181

-

1751 1169 1714 1132 1716 1134 1759 1177

-

1757 1175 1715 1133 1714 1132 1751 1169

-

1770 1188 1774 1192 1788 1206 1790 1208 1786 1204 1772 1190 1769 1187 1762 1180 1758 1176 1752 1170 1760 1178 1764 1182

-

1773 1191 1737 1155 1739 1157 1787 1205

-

1787 1205 1739 1157 1740 1158 1789 1207

-

1789 1207 1740 1158 1738 1156 1785 1203

-

1785 1203 1738 1156 1736 1154 1771 1189

-

1771 1189 1736 1154 1735 1153 1768 1186

-

1767 1185 1734 1152 1724 1142 1761 1179

-

1761 1179 1724 1142 1715 1133 1757 1175

-

1466 884 1174 592 1451 869 1453 871

-

1453 871 1451 869 1436 854 1441 859

-

1441 859 1436 854 1422 840 1424 842

-

1424 842 1422 840 1410 828 1412 830

-

1412 830 1410 828 1406 824 1407 825

-

1407 825 1406 824 1409 827 1411 829

-

1411 829 1409 827 1152 570 1423 841

-

1423 841 1152 570 1162 580 1440 858

-

1440 858 1162 580 1450 868 1452 870

-

1452 870 1450 868 1465 883 1178 596

-

1178 596 1465 883 1192 610 1468 886

-

1468 886 1192 610 1174 592 1466 884

-

1647 1065 1650 1068 1649 1067 1646 1064

-

1631 1049 1647 1065 1646 1064 1630 1048

-

1614 1032 1631 1049 1630 1048 1613 1031

-

1590 1008 1614 1032 1613 1031 1589 1007

-

1519 937 1590 1008 1589 1007 1518 936

-

1512 930 1519 937 1518 936 1511 929

-

1504 922 1512 930 1511 929 1502 920

-

1496 914 1504 922 1502 920 1494 912

-

1490 908 1496 914 1494 912 1488 906

-

1459 877 1490 908 1488 906 1457 875

-

1434 852 1459 877 1457 875 1432 850

-

1421 839 1434 852 1432 850 1419 837

-

1642 1060 1627 1045 1609 1027 1298 716 1514 932 1508 926 1500 918 1492 910 1486 904 1455 873 1431 849 1420 838 1433 851 1458 876 1489 907 1495 913 1503 921 1510 928 1517 935 1588 1006 1612 1030 1323 741 1645 1063 1648 1066

-

1487 905 1456 874 1454 872 1485 903

-

1493 911 1487 905 1485 903 1491 909

-

1501 919 1493 911 1491 909 1499 917

-

1509 927 1501 919 1499 917 1507 925

-

1516 934 1509 927 1507 925 1515 933

-

1587 1005 1516 934 1515 933 1586 1004

-

1611 1029 1587 1005 1586 1004 1610 1028

-

1629 1047 1611 1029 1610 1028 1628 1046

-

1644 1062 1629 1047 1628 1046 1643 1061

-

1650 1068 1644 1062 1643 1061 1649 1067

-

1481 899 1215 633 1482 900 1218 636

-

1480 898 1212 630 1481 899 1221 639

-

1208 626 1476 894 1212 630 1480 898

-

1470 888 1467 885 1186 604 1210 628 1475 893

-

1474 892 1471 889 1476 894 1208 626

-

1464 882 1461 879 1471 889 1474 892

-

1138 556 1405 823 1418 836 1430 848 1443 861 1448 866 1463 881 1473 891 1197 615

-

1429 847 1426 844 1438 856 1442 860

-

1442 860 1438 856 1447 865 1449 867

-

1449 867 1447 865 1461 879 1464 882

-

1189 607 1467 885 1460 878 1446 864 1437 855 1427 845 1415 833 1408 826 1145 563

-

1417 835 1414 832 1426 844 1429 847

-

1404 822 1403 821 1414 832 1417 835

-

1397 815 1394 812 1403 821 1404 822

-

1130 548 1126 544 1391 809 1398 816 1400 818

-

1123 541 1383 801 1388 806 1390 808

-

1390 808 1388 806 1394 812 1397 815

-

1393 811 1129 547 1132 550 1136 554 1399 817 1395 813 1389 807 1384 802 1386 804

-

1392 810 1385 803 1387 805 1396 814

-

1401 819 1392 810 1396 814 1402 820

-

1413 831 1401 819 1402 820 1416 834

-

1425 843 1413 831 1416 834 1428 846

-

1435 853 1425 843 1428 846 1439 857

-

1444 862 1435 853 1439 857 1445 863

-

1173 591 1444 862 1445 863 1462 880

-

1469 887 1173 591 1462 880 1472 890

-

1206 624 1469 887 1472 890 1477 895

-

1478 896 1206 624 1477 895 1479 897

-

1224 642 1478 896 1479 897 1483 901

-

1215 633 1224 642 1483 901 1482 900

-

1498 916 1497 915 1484 902 1226 644

-

1225 643 1484 902 1150 568 1139 557

-

1259 677 1520 938 1521 939 1529 947

-

1520 938 1257 675 1528 946 1521 939

-

1257 675 1554 972 1555 973 1528 946

-

1554 972 1569 987 1570 988 1555 973

-

1505 923 1237 655 1243 661 1506 924

-

1236 654 1239 657 1513 931 1242 660

-

1748 1166 1368 786 1365 783 1747 1165

-

1784 1202 1748 1166 1747 1165 1780 1198

-

1382 800 1782 1200 1778 1196 1380 798

-

1765 1183 1777 1195 1791 1209 1779 1197 1766 1184

-

1782 1200 1794 1212 1792 1210 1778 1196

-

1781 1199 1775 1193 1776 1194 1783 1201 1793 1211

-

1794 1212 1784 1202 1780 1198 1792 1210

-

1662 1080 1657 1075 1632 1050 1618 1036 1615 1033

-

1598 1016 1293 711 1585 1003 1597 1015

-

1619 1037 1598 1016 1597 1015 1617 1035

-

1636 1054 1619 1037 1617 1035 1633 1051

-

1616 1034 1620 1038 1637 1055 1659 1077 1661 1079

-

1660 1078 1636 1054 1633 1051 1658 1076

-

1341 759 1660 1078 1658 1076 1338 756

-
- - - -

1721 1251 1723 1251 1722 1251 1682 1251 1680 1251 1681 1251 1581 1251 1579 1251 1580 1251 1553 1251 1559 1251 1608 1251 1559 1251 1574 1251 1608 1251 1574 1251 1594 1251 1608 1251 1594 1251 1602 1251 1608 1251 1602 1251 1624 1251 1608 1251 1624 1251 1639 1251 1608 1251 1576 1251 1561 1251 1606 1251 1596 1251 1576 1251 1606 1251 1604 1251 1596 1251 1606 1251 1626 1251 1604 1251 1606 1251 1641 1251 1626 1251 1606 1251 1733 1251 1692 1251 1665 1251 1692 1251 1674 1251 1665 1251 1674 1251 1656 1251 1665 1251 1656 1251 1641 1251 1665 1251 1665 1251 1641 1251 1606 1251 1756 1251 1665 1251 1668 1251 1750 1251 1756 1251 1668 1251 1744 1251 1750 1251 1668 1251 1731 1251 1744 1251 1668 1251 1690 1251 1731 1251 1668 1251 1672 1251 1690 1251 1668 1251 1654 1251 1672 1251 1668 1251 1639 1251 1654 1251 1668 1251 1606 1251 1549 1251 1608 1251 1561 1251 1549 1251 1606 1251 1746 1251 1733 1251 1665 1251 1756 1251 1746 1251 1665 1251 1549 1251 1553 1251 1608 1251

-
- - - -

1639 1251 1668 1251 1665 1251 1606 1251 1608 1251

-

1561 1251 1266 1251 1546 1251 1549 1251

-

1576 1251 1282 1251 1266 1251 1561 1251

-

1596 1251 1591 1251 1282 1251 1576 1251

-

1604 1251 1311 1251 1591 1251 1596 1251

-

1318 1251 1311 1251 1604 1251 1626 1251

-

1634 1251 1318 1251 1626 1251 1641 1251

-

1651 1251 1634 1251 1641 1251 1656 1251

-

1669 1251 1651 1251 1656 1251 1674 1251

-

1687 1251 1669 1251 1674 1251 1692 1251

-

1687 1251 1692 1251 1733 1251 1728 1251

-

1733 1251 1746 1251 1741 1251 1728 1251

-

1746 1251 1756 1251 1753 1251 1741 1251

-

1744 1251 1742 1251 1753 1251 1756 1251 1750 1251

-

1731 1251 1729 1251 1742 1251 1744 1251

-

1690 1251 1688 1251 1729 1251 1731 1251

-

1672 1251 1670 1251 1688 1251 1690 1251

-

1654 1251 1652 1251 1670 1251 1672 1251

-

1639 1251 1635 1251 1652 1251 1654 1251

-

1624 1251 1622 1251 1635 1251 1639 1251

-

1602 1251 1600 1251 1622 1251 1624 1251

-

1594 1251 1592 1251 1600 1251 1602 1251

-

1574 1251 1572 1251 1592 1251 1594 1251

-

1559 1251 1557 1251 1572 1251 1574 1251

-

1546 1251 1557 1251 1559 1251 1553 1251 1549 1251

-

1578 1251 1541 1251 1545 1251 1583 1251

-

1551 1251 1584 1251 1583 1251 1545 1251

-

1543 1251 1582 1251 1584 1251 1551 1251

-

1582 1251 1543 1251 1539 1251 1577 1251

-

1523 1251 1562 1251 1563 1251 1525 1251

-

1527 1251 1564 1251 1562 1251 1523 1251

-

1564 1251 1527 1251 1533 1251 1566 1251

-

1537 1251 1533 1251 1527 1251 1523 1251 1525 1251 1531 1251 1536 1251 1539 1251 1543 1251 1551 1251 1545 1251 1541 1251

-

1565 1251 1531 1251 1525 1251 1563 1251

-

1531 1251 1565 1251 1568 1251 1536 1251

-

1536 1251 1568 1251 1577 1251 1539 1251

-

1720 1251 1700 1251 1686 1251 1713 1251

-

1727 1251 1701 1251 1700 1251 1720 1251

-

1718 1251 1699 1251 1701 1251 1727 1251

-

1709 1251 1705 1251 1698 1251 1694 1251 1696 1251 1703 1251 1708 1251 1711 1251 1718 1251 1727 1251 1720 1251 1713 1251

-

1705 1251 1679 1251 1677 1251 1698 1251

-

1698 1251 1677 1251 1675 1251 1694 1251

-

1694 1251 1675 1251 1676 1251 1696 1251

-

1696 1251 1676 1251 1678 1251 1703 1251

-

1703 1251 1678 1251 1684 1251 1708 1251

-

1708 1251 1684 1251 1685 1251 1711 1251

-

1711 1251 1685 1251 1699 1251 1718 1251

-

1760 1251 1716 1251 1725 1251 1764 1251

-

1752 1251 1714 1251 1716 1251 1760 1251

-

1758 1251 1715 1251 1714 1251 1752 1251

-

1770 1251 1774 1251 1788 1251 1790 1251 1786 1251 1772 1251 1769 1251 1762 1251 1758 1251 1752 1251 1760 1251 1764 1251

-

1774 1251 1737 1251 1739 1251 1788 1251

-

1788 1251 1739 1251 1740 1251 1790 1251

-

1790 1251 1740 1251 1738 1251 1786 1251

-

1786 1251 1738 1251 1736 1251 1772 1251

-

1772 1251 1736 1251 1375 1251 1769 1251

-

1769 1251 1375 1251 1724 1251 1762 1251

-

1762 1251 1724 1251 1715 1251 1758 1251

-

1466 1251 1177 1251 1451 1251 1453 1251

-

1453 1251 1451 1251 1436 1251 1441 1251

-

1441 1251 1436 1251 1422 1251 1424 1251

-

1424 1251 1422 1251 1410 1251 1412 1251

-

1412 1251 1410 1251 1406 1251 1407 1251

-

1407 1251 1406 1251 1409 1251 1411 1251

-

1411 1251 1409 1251 1152 1251 1423 1251

-

1423 1251 1152 1251 1162 1251 1440 1251

-

1440 1251 1162 1251 1450 1251 1452 1251

-

1452 1251 1450 1251 1465 1251 1181 1251

-

1181 1251 1465 1251 1193 1251 1468 1251

-

1468 1251 1193 1251 1177 1251 1466 1251

-

1647 1251 1650 1251 1649 1251 1646 1251

-

1631 1251 1647 1251 1646 1251 1630 1251

-

1614 1251 1631 1251 1630 1251 1613 1251

-

1590 1251 1614 1251 1613 1251 1589 1251

-

1519 1251 1590 1251 1589 1251 1518 1251

-

1512 1251 1519 1251 1518 1251 1511 1251

-

1504 1251 1512 1251 1511 1251 1503 1251

-

1496 1251 1504 1251 1503 1251 1495 1251

-

1490 1251 1496 1251 1495 1251 1489 1251

-

1459 1251 1490 1251 1489 1251 1458 1251

-

1434 1251 1459 1251 1458 1251 1433 1251

-

1421 1251 1434 1251 1433 1251 1420 1251

-

1643 1251 1628 1251 1610 1251 1586 1251 1515 1251 1508 1251 1500 1251 1492 1251 1486 1251 1455 1251 1431 1251 1420 1251 1433 1251 1458 1251 1489 1251 1495 1251 1503 1251 1511 1251 1518 1251 1589 1251 1613 1251 1630 1251 1646 1251 1649 1251

-

1487 1251 1456 1251 1455 1251 1486 1251

-

1493 1251 1487 1251 1486 1251 1492 1251

-

1501 1251 1493 1251 1492 1251 1500 1251

-

1509 1251 1501 1251 1500 1251 1508 1251

-

1516 1251 1509 1251 1508 1251 1515 1251

-

1587 1251 1516 1251 1515 1251 1586 1251

-

1611 1251 1587 1251 1586 1251 1610 1251

-

1629 1251 1611 1251 1610 1251 1628 1251

-

1644 1251 1629 1251 1628 1251 1643 1251

-

1650 1251 1644 1251 1643 1251 1649 1251

-

1481 1251 1215 1251 1482 1251 1218 1251

-

1480 1251 1212 1251 1481 1251 1221 1251

-

1208 1251 1476 1251 1212 1251 1480 1251

-

1471 1251 1467 1251 1186 1251 1210 1251 1476 1251

-

1474 1251 1471 1251 1476 1251 1208 1251

-

1464 1251 1461 1251 1471 1251 1474 1251

-

1138 1251 1405 1251 1418 1251 1430 1251 1443 1251 1449 1251 1464 1251 1474 1251 1197 1251

-

1430 1251 1427 1251 1438 1251 1443 1251

-

1443 1251 1438 1251 1447 1251 1449 1251

-

1449 1251 1447 1251 1461 1251 1464 1251

-

1189 1251 1467 1251 1461 1251 1447 1251 1438 1251 1427 1251 1415 1251 1408 1251 1145 1251

-

1418 1251 1415 1251 1427 1251 1430 1251

-

1405 1251 1403 1251 1415 1251 1418 1251

-

1398 1251 1395 1251 1403 1251 1405 1251

-

1130 1251 1126 1251 1391 1251 1398 1251 1400 1251

-

1126 1251 1384 1251 1389 1251 1391 1251

-

1391 1251 1389 1251 1395 1251 1398 1251

-

1393 1251 1129 1251 1132 1251 1136 1251 1399 1251 1395 1251 1389 1251 1384 1251 1386 1251

-

1393 1251 1386 1251 1387 1251 1396 1251

-

1141 1251 1393 1251 1396 1251 1402 1251

-

1413 1251 1141 1251 1402 1251 1416 1251

-

1425 1251 1413 1251 1416 1251 1428 1251

-

1435 1251 1425 1251 1428 1251 1439 1251

-

1444 1251 1435 1251 1439 1251 1445 1251

-

1173 1251 1444 1251 1445 1251 1462 1251

-

1469 1251 1173 1251 1462 1251 1472 1251

-

1206 1251 1469 1251 1472 1251 1477 1251

-

1478 1251 1206 1251 1477 1251 1479 1251

-

1224 1251 1478 1251 1479 1251 1483 1251

-

1215 1251 1224 1251 1483 1251 1482 1251

-

1498 1251 1497 1251 1484 1251 1228 1251

-

1225 1251 1484 1251 1150 1251 1139 1251

-

1259 1251 1520 1251 1521 1251 1529 1251

-

1520 1251 1257 1251 1528 1251 1521 1251

-

1257 1251 1554 1251 1555 1251 1528 1251

-

1554 1251 1569 1251 1570 1251 1555 1251

-

1231 1251 1238 1251 1246 1251 1506 1251

-

1238 1251 1241 1251 1513 1251 1246 1251

-

1748 1251 1368 1251 1365 1251 1747 1251

-

1784 1251 1748 1251 1747 1251 1780 1251

-

1382 1251 1782 1251 1778 1251 1380 1251

-

1765 1251 1778 1251 1792 1251 1780 1251 1766 1251

-

1782 1251 1794 1251 1792 1251 1778 1251

-

1782 1251 1775 1251 1776 1251 1784 1251 1794 1251

-

1794 1251 1784 1251 1780 1251 1792 1251

-

1662 1251 1658 1251 1633 1251 1618 1251 1615 1251

-

1598 1251 1293 1251 1585 1251 1597 1251

-

1620 1251 1598 1251 1597 1251 1618 1251

-

1637 1251 1620 1251 1618 1251 1633 1251

-

1616 1251 1620 1251 1637 1251 1660 1251 1661 1251

-

1660 1251 1637 1251 1633 1251 1658 1251

-

1342 1251 1660 1251 1658 1251 1338 1251

-

1264 1251 1254 1251 1251 1251 1262 1251

-
- - - -

1721 1139 1723 1141 1722 1140 1682 1100 1680 1098 1681 1099 1581 999 1579 997 1580 998 1553 971 1559 977 1608 1026 1559 977 1574 992 1608 1026 1574 992 1594 1012 1608 1026 1594 1012 1602 1020 1608 1026 1602 1020 1624 1042 1607 1025 1624 1042 1639 1057 1607 1025 1576 994 1561 979 1605 1023 1596 1014 1576 994 1605 1023 1604 1022 1596 1014 1605 1023 1626 1044 1604 1022 1605 1023 1641 1059 1626 1044 1606 1024 1732 1150 1691 1109 1665 1083 1691 1109 1673 1091 1665 1083 1673 1091 1655 1073 1665 1083 1655 1073 1641 1059 1665 1083 1665 1083 1641 1059 1605 1023 1755 1173 1665 1083 1668 1086 1749 1167 1754 1172 1666 1084 1743 1161 1749 1167 1667 1085 1730 1148 1743 1161 1668 1086 1689 1107 1730 1148 1668 1086 1671 1089 1689 1107 1666 1084 1653 1071 1671 1089 1668 1086 1639 1057 1653 1071 1666 1084 1605 1023 1548 966 1607 1025 1561 979 1548 966 1605 1023 1745 1163 1732 1150 1663 1081 1755 1173 1745 1163 1664 1082 1549 967 1553 971 1608 1026

-
- - - -

1639 1057 1668 1086 1665 1083 1605 1023 1607 1025

-

1560 978 1556 974 1546 964 1547 965

-

1575 993 1571 989 1556 974 1560 978

-

1595 1013 1591 1009 1571 989 1575 993

-

1603 1021 1599 1017 1591 1009 1595 1013

-

1621 1039 1599 1017 1603 1021 1625 1043

-

1634 1052 1621 1039 1625 1043 1640 1058

-

1651 1069 1634 1052 1640 1058 1656 1074

-

1669 1087 1651 1069 1656 1074 1674 1092

-

1687 1105 1669 1087 1674 1092 1692 1110

-

1687 1105 1692 1110 1733 1151 1728 1146

-

1733 1151 1746 1164 1741 1159 1728 1146

-

1746 1164 1756 1174 1753 1171 1741 1159

-

1744 1162 1742 1160 1753 1171 1756 1174 1750 1168

-

1731 1149 1729 1147 1742 1160 1744 1162

-

1690 1108 1688 1106 1729 1147 1731 1149

-

1672 1090 1670 1088 1688 1106 1690 1108

-

1654 1072 1652 1070 1670 1088 1672 1090

-

1638 1056 1635 1053 1652 1070 1654 1072

-

1623 1041 1622 1040 1635 1053 1638 1056

-

1601 1019 1600 1018 1622 1040 1623 1041

-

1593 1011 1592 1010 1600 1018 1601 1019

-

1573 991 1572 990 1592 1010 1593 1011

-

1558 976 1557 975 1572 990 1573 991

-

1546 964 1557 975 1558 976 1552 970 1547 965

-

1578 996 1541 959 1545 963 1583 1001

-

1551 969 1584 1002 1583 1001 1545 963

-

1543 961 1582 1000 1584 1002 1551 969

-

1582 1000 1543 961 1539 957 1577 995

-

1523 941 1562 980 1563 981 1525 943

-

1527 945 1564 982 1562 980 1523 941

-

1564 982 1527 945 1533 951 1566 984

-

1537 955 1532 950 1526 944 1522 940 1524 942 1530 948 1534 952 1538 956 1542 960 1550 968 1544 962 1540 958

-

1565 983 1531 949 1525 943 1563 981

-

1531 949 1565 983 1567 985 1535 953

-

1536 954 1568 986 1577 995 1539 957

-

1720 1138 1700 1118 1686 1104 1713 1131

-

1727 1145 1701 1119 1700 1118 1720 1138

-

1718 1136 1699 1117 1701 1119 1727 1145

-

1709 1127 1705 1123 1698 1116 1694 1112 1696 1114 1703 1121 1707 1125 1710 1128 1717 1135 1726 1144 1719 1137 1712 1130

-

1704 1122 1679 1097 1677 1095 1697 1115

-

1697 1115 1677 1095 1675 1093 1693 1111

-

1693 1111 1675 1093 1676 1094 1695 1113

-

1695 1113 1676 1094 1678 1096 1702 1120

-

1702 1120 1678 1096 1683 1101 1706 1124

-

1708 1126 1684 1102 1685 1103 1711 1129

-

1711 1129 1685 1103 1699 1117 1718 1136

-

1759 1177 1716 1134 1725 1143 1763 1181

-

1751 1169 1714 1132 1716 1134 1759 1177

-

1757 1175 1715 1133 1714 1132 1751 1169

-

1770 1188 1774 1192 1788 1206 1790 1208 1786 1204 1772 1190 1769 1187 1762 1180 1758 1176 1752 1170 1760 1178 1764 1182

-

1773 1191 1737 1155 1739 1157 1787 1205

-

1787 1205 1739 1157 1740 1158 1789 1207

-

1789 1207 1740 1158 1738 1156 1785 1203

-

1785 1203 1738 1156 1736 1154 1771 1189

-

1771 1189 1736 1154 1735 1153 1768 1186

-

1767 1185 1734 1152 1724 1142 1761 1179

-

1761 1179 1724 1142 1715 1133 1757 1175

-

1466 884 1174 592 1451 869 1453 871

-

1453 871 1451 869 1436 854 1441 859

-

1441 859 1436 854 1422 840 1424 842

-

1424 842 1422 840 1410 828 1412 830

-

1412 830 1410 828 1406 824 1407 825

-

1407 825 1406 824 1409 827 1411 829

-

1411 829 1409 827 1152 570 1423 841

-

1423 841 1152 570 1162 580 1440 858

-

1440 858 1162 580 1450 868 1452 870

-

1452 870 1450 868 1465 883 1178 596

-

1178 596 1465 883 1192 610 1468 886

-

1468 886 1192 610 1174 592 1466 884

-

1647 1065 1650 1068 1649 1067 1646 1064

-

1631 1049 1647 1065 1646 1064 1630 1048

-

1614 1032 1631 1049 1630 1048 1613 1031

-

1590 1008 1614 1032 1613 1031 1589 1007

-

1519 937 1590 1008 1589 1007 1518 936

-

1512 930 1519 937 1518 936 1511 929

-

1504 922 1512 930 1511 929 1502 920

-

1496 914 1504 922 1502 920 1494 912

-

1490 908 1496 914 1494 912 1488 906

-

1459 877 1490 908 1488 906 1457 875

-

1434 852 1459 877 1457 875 1432 850

-

1421 839 1434 852 1432 850 1419 837

-

1642 1060 1627 1045 1609 1027 1298 716 1514 932 1508 926 1500 918 1492 910 1486 904 1455 873 1431 849 1420 838 1433 851 1458 876 1489 907 1495 913 1503 921 1510 928 1517 935 1588 1006 1612 1030 1323 741 1645 1063 1648 1066

-

1487 905 1456 874 1454 872 1485 903

-

1493 911 1487 905 1485 903 1491 909

-

1501 919 1493 911 1491 909 1499 917

-

1509 927 1501 919 1499 917 1507 925

-

1516 934 1509 927 1507 925 1515 933

-

1587 1005 1516 934 1515 933 1586 1004

-

1611 1029 1587 1005 1586 1004 1610 1028

-

1629 1047 1611 1029 1610 1028 1628 1046

-

1644 1062 1629 1047 1628 1046 1643 1061

-

1650 1068 1644 1062 1643 1061 1649 1067

-

1481 899 1215 633 1482 900 1218 636

-

1480 898 1212 630 1481 899 1221 639

-

1208 626 1476 894 1212 630 1480 898

-

1470 888 1467 885 1186 604 1210 628 1475 893

-

1474 892 1471 889 1476 894 1208 626

-

1464 882 1461 879 1471 889 1474 892

-

1138 556 1405 823 1418 836 1430 848 1443 861 1448 866 1463 881 1473 891 1197 615

-

1429 847 1426 844 1438 856 1442 860

-

1442 860 1438 856 1447 865 1449 867

-

1449 867 1447 865 1461 879 1464 882

-

1189 607 1467 885 1460 878 1446 864 1437 855 1427 845 1415 833 1408 826 1145 563

-

1417 835 1414 832 1426 844 1429 847

-

1404 822 1403 821 1414 832 1417 835

-

1397 815 1394 812 1403 821 1404 822

-

1130 548 1126 544 1391 809 1398 816 1400 818

-

1123 541 1383 801 1388 806 1390 808

-

1390 808 1388 806 1394 812 1397 815

-

1393 811 1129 547 1132 550 1136 554 1399 817 1395 813 1389 807 1384 802 1386 804

-

1392 810 1385 803 1387 805 1396 814

-

1401 819 1392 810 1396 814 1402 820

-

1413 831 1401 819 1402 820 1416 834

-

1425 843 1413 831 1416 834 1428 846

-

1435 853 1425 843 1428 846 1439 857

-

1444 862 1435 853 1439 857 1445 863

-

1173 591 1444 862 1445 863 1462 880

-

1469 887 1173 591 1462 880 1472 890

-

1206 624 1469 887 1472 890 1477 895

-

1478 896 1206 624 1477 895 1479 897

-

1224 642 1478 896 1479 897 1483 901

-

1215 633 1224 642 1483 901 1482 900

-

1498 916 1497 915 1484 902 1226 644

-

1225 643 1484 902 1150 568 1139 557

-

1259 677 1520 938 1521 939 1529 947

-

1520 938 1257 675 1528 946 1521 939

-

1257 675 1554 972 1555 973 1528 946

-

1554 972 1569 987 1570 988 1555 973

-

1505 923 1237 655 1243 661 1506 924

-

1236 654 1239 657 1513 931 1242 660

-

1748 1166 1368 786 1365 783 1747 1165

-

1784 1202 1748 1166 1747 1165 1780 1198

-

1382 800 1782 1200 1778 1196 1380 798

-

1765 1183 1777 1195 1791 1209 1779 1197 1766 1184

-

1782 1200 1794 1212 1792 1210 1778 1196

-

1781 1199 1775 1193 1776 1194 1783 1201 1793 1211

-

1794 1212 1784 1202 1780 1198 1792 1210

-

1662 1080 1657 1075 1632 1050 1618 1036 1615 1033

-

1598 1016 1293 711 1585 1003 1597 1015

-

1619 1037 1598 1016 1597 1015 1617 1035

-

1636 1054 1619 1037 1617 1035 1633 1051

-

1616 1034 1620 1038 1637 1055 1659 1077 1661 1079

-

1660 1078 1636 1054 1633 1051 1658 1076

-

1341 759 1660 1078 1658 1076 1338 756

-

1263 681 1252 670 1249 667 1261 679

-

1340 758 1367 785 1362 780 1336 754

-

1335 753 1340 758 1336 754 1333 751

-

1326 744 1335 753 1333 751 1325 743

-

1314 732 1326 744 1325 743 1312 730

-

1306 724 1314 732 1312 730 1304 722

-

1291 709 1306 724 1304 722 1289 707

-

1279 697 1291 709 1289 707 1276 694

-
- - - -

1805 1252 1806 1252 1807 1252

-
- - - -

1814 1253 1815 1253 1816 1253

-
- - - -

1808 1253 1809 1253 1810 1253 1811 1253 1812 1253 1813 1253

-
- - - -

1817 1254 1818 1254 1819 1254 1820 1254 1821 1254 1822 1254

-
- - - -

1829 1255 1830 1255 1831 1255

-
- - - -

1823 1255 1824 1255 1825 1255 1826 1255 1827 1255 1828 1255

-
- - - -

1839 1256 1840 1256 1841 1256

-
- - - -

1832 1256 1833 1256 1834 1256 1835 1256 1836 1256 1837 1256 1838 1256

-
- - - -

1852 1257 1853 1257 1854 1257

-
- - - -

1842 1257 1843 1257 1844 1257 1845 1257

-

1846 1257 1847 1257 1848 1257 1849 1257 1850 1257 1851 1257

-
- - - -

1855 1258 1856 1258 1857 1258 1858 1258 1859 1258 1860 1258

-
- - - -

1865 1259 1866 1259 1867 1259

-
- - - -

1861 1259 1862 1259 1863 1259 1864 1259

-
- - - -

2024 1420 2015 1420 2013 1420 1896 1420 1976 1420 1979 1420

-
- - - -

2024 1420 2026 1420 2020 1420 2015 1420

-

1935 1420 2019 1420 2024 1420 2013 1420

-

2005 1420 2007 1420 2011 1420 2019 1420 1935 1420

-

2004 1420 2007 1420 2005 1420 2000 1420

-

1994 1420 2004 1420 2000 1420 1913 1420

-

1913 1420 1990 1420 1988 1420 1994 1420

-

1990 1420 1984 1420 1982 1420 1988 1420

-

1984 1420 1896 1420 1979 1420 1982 1420

-

1970 1420 1874 1420 1967 1420 1883 1420 1973 1420

-

1973 1420 1883 1420 1979 1420 1976 1420

-
- - - -

1902 1421 1903 1421 1900 1421 1889 1421 1888 1421 1894 1421

-
- - - -

1902 1421 1900 1421 1897 1421 1890 1421 1889 1421 1894 1421

-
- - - -

1949 1422 1939 1422 1943 1422

-
- - - -

1947 1422 1950 1422 1952 1422 2031 1422 1953 1422 1948 1422

-

1948 1422 1941 1422 2030 1422 1938 1422 1947 1422

-

1954 1422 2021 1422 1941 1422 1948 1422 1953 1422

-

2021 1422 1954 1422 1955 1422 1949 1422 1943 1422

-
- - - -

2012 1423 1929 1423 2008 1423 1999 1423 1995 1423 2001 1423 1999 1423 1911 1423 1995 1423 1999 1423 1985 1423 1911 1423 1871 1423 1977 1423 1980 1423 1964 1423 1969 1423 1974 1423

-
- - - -

2022 1423 2020 1423 2026 1423 1958 1423

-

1958 1423 2025 1423 2016 1423 2022 1423

-

2025 1423 1946 1423 2014 1423 2016 1423

-

1946 1423 2012 1423 2008 1423 2014 1423

-

2012 1423 1999 1423 2001 1423 1929 1423

-

1999 1423 1871 1423 1980 1423 1985 1423

-

1974 1423 1977 1423 1871 1423 1964 1423

-

1964 1423 1874 1423 1970 1423 1969 1423

-
- - - -

1892 1424 1899 1424 1983 1424

-
- - - -

2028 1424 1918 1424 1921 1424 1925 1424 1931 1424

-

1991 1424 1914 1424 1921 1424 1918 1424

-

1906 1424 1914 1424 1991 1424 1989 1424

-

1989 1424 1983 1424 1899 1424 1898 1424 1906 1424

-

1886 1424 1869 1424 1868 1424 1885 1424

-

1880 1424 1881 1424 1878 1424 1877 1424

-

1972 1424 1880 1424 1877 1424 1876 1424

-

1886 1424 1975 1424 1972 1424 1876 1424 1875 1424

-

1975 1424 1886 1424 1885 1424 1899 1424 1892 1424

-
- - - -

1981 1425 1897 1425 1903 1425 1909 1425 1907 1425 1905 1425

-

1907 1425 1909 1425 1992 1425 1915 1425

-

1930 1425 2006 1425 1924 1425 1922 1425 1920 1425 2029 1425

-

1920 1425 1922 1425 1915 1425 1992 1425

-
- - - -

1994 1386 1988 1380 1986 1378 1994 1386 2003 1395 2004 1396

-
- - - -

2004 1396 2003 1395 2006 1398 2007 1399

-

2007 1399 2006 1398 2010 1402 2011 1403

-

2011 1403 2010 1402 2018 1410 2019 1411

-

2019 1411 2018 1410 2023 1415 2024 1416

-

2024 1416 2023 1415 2027 1419 1958 1350 2026 1418

-

1958 1350 2027 1419 1952 1344 2025 1417

-

2025 1417 1952 1344 2017 1409 1946 1338

-

1946 1338 2017 1409 2009 1401 2012 1404

-

2012 1404 2009 1401 1997 1389 1999 1391

-

1998 1390 1996 1388 1960 1352 1963 1355

-

1870 1262 1959 1351 1961 1353 1964 1356

-

1869 1261 1875 1267 1968 1360 1966 1358 1962 1354

-

1961 1353 1965 1357 1967 1359 1872 1264 1964 1356

-

1967 1359 1965 1357 1971 1363 1882 1274

-

1882 1274 1971 1363 1978 1370 1979 1371

-

1979 1371 1978 1370 1981 1373 1982 1374

-

1982 1374 1981 1373 1986 1378 1988 1380

-

1924 1316 2002 1394 1993 1385 1987 1379 1905 1297

-
- - - -

1994 1386 1988 1380 1986 1378 1994 1386 2003 1395 2004 1396

-
- - - -

2004 1396 2003 1395 2006 1398 2007 1399

-

2007 1399 2006 1398 2010 1402 2011 1403

-

2011 1403 2010 1402 2018 1410 2019 1411

-

2019 1411 2018 1410 2023 1415 2024 1416

-

2024 1416 2023 1415 2027 1419 1958 1350 2026 1418

-

1958 1350 2027 1419 1952 1344 2025 1417

-

2025 1417 1952 1344 2017 1409 1946 1338

-

1946 1338 2017 1409 2009 1401 2012 1404

-

2012 1404 2009 1401 1997 1389 1999 1391

-

1998 1390 1996 1388 1960 1352 1963 1355

-

1870 1262 1959 1351 1961 1353 1964 1356

-

1869 1261 1875 1267 1968 1360 1966 1358 1962 1354

-

1961 1353 1965 1357 1967 1359 1872 1264 1964 1356

-

1967 1359 1965 1357 1971 1363 1882 1274

-

1882 1274 1971 1363 1978 1370 1979 1371

-

1979 1371 1978 1370 1981 1373 1982 1374

-

1982 1374 1981 1373 1986 1378 1988 1380

-

1924 1316 2002 1394 1993 1385 1987 1379 1905 1297

-

2021 1413 1942 1334 2015 1407 2020 1412 2022 1414

-

2015 1407 1942 1334 1937 1329 2013 1405

-

2013 1405 1937 1329 1933 1325 1934 1326

-

1934 1326 1933 1325 1927 1319 2005 1397

-

2005 1397 1927 1319 1919 1311 2000 1392

-

2000 1392 1919 1311 1992 1384 1913 1305

-

1913 1305 1992 1384 1909 1301 1990 1382

-

1990 1382 1909 1301 1902 1294 1984 1376

-

1984 1376 1902 1294 1894 1286 1896 1288

-

1896 1288 1894 1286 1887 1279 1976 1368

-

1976 1368 1887 1279 1884 1276 1973 1365

-

1880 1272 1969 1361 1970 1362 1973 1365 1884 1276

-

1969 1361 1880 1272 1972 1364 1974 1366

-

1974 1366 1972 1364 1975 1367 1977 1369

-

1977 1369 1975 1367 1892 1284 1980 1372

-

1980 1372 1892 1284 1983 1375 1985 1377

-

1985 1377 1983 1375 1989 1381 1911 1303

-

1911 1303 1989 1381 1991 1383 1995 1387

-

1995 1387 1991 1383 1917 1309 2001 1393

-

2001 1393 1917 1309 1926 1318 1928 1320

-

1928 1320 1926 1318 1932 1324 2008 1400

-

2008 1400 1932 1324 1936 1328 2014 1406

-

2014 1406 1936 1328 1940 1332 2016 1408

-

2016 1408 1940 1332 2021 1413 2022 1414

-
- - - -

2032 1426 2033 1427 2034 1428 2035 1429 2036 1430 2037 1431 2038 1432 2039 1433

-

2040 1434 2041 1435 2042 1436 2043 1437 2044 1438 2045 1439 2046 1440 2047 1441

-

2048 1442 2049 1443 2050 1444 2051 1445

-

2052 1446 2053 1447 2054 1448 2055 1449

-

2056 1450 2057 1451 2058 1452 2059 1453

-

2060 1454 2061 1455 2062 1456 2063 1457

-

2064 1458 2065 1459 2066 1460 2067 1461

-

2068 1462 2069 1463 2070 1464 2071 1465

-

2072 1466 2073 1467 2074 1468 2075 1469

-

2076 1470 2077 1471 2078 1472 2079 1473

-
- - - -

2080 1474 2081 1475 2082 1476 2083 1477 2084 1478 2085 1479 2086 1480 2087 1481

-

2088 1482 2089 1483 2090 1484 2091 1485 2092 1486 2093 1487 2094 1488 2095 1489

-

2096 1490 2097 1491 2098 1492 2099 1493

-

2100 1494 2101 1495 2102 1496 2103 1497

-

2104 1498 2105 1499 2106 1500 2107 1501

-

2108 1502 2109 1503 2110 1504 2111 1505

-

2112 1506 2113 1507 2114 1508 2115 1509

-

2116 1510 2117 1511 2118 1512 2119 1513

-

2120 1514 2121 1515 2122 1516 2123 1517

-

2124 1518 2125 1519 2126 1520 2127 1521

-
- - - -

2128 1522 2129 1522 2130 1522 2131 1522

-
- - - -

2132 1523 2133 1523 2134 1523 2135 1523

-
- - - -

2136 1524 2137 1524 2138 1524 2139 1524

-
- - - -

2140 1525 2141 1526 2142 1527 2143 1528

-

2144 1529 2145 1530 2146 1531 2147 1532

-

2148 1533 2149 1534 2150 1535 2151 1536

-

2152 1537 2153 1538 2154 1539 2155 1540

-

2156 1541 2157 1542 2158 1543 2159 1544

-

2160 1545 2161 1546 2162 1547 2163 1548

-

2164 1549 2165 1550 2166 1551 2167 1552

-

2168 1553 2169 1554 2170 1555 2171 1556

-
- - - -

2172 1557 2173 1557 2174 1557 2175 1557

-
- - - -

2177 1603 2181 1603 2207 1603 2195 1603 2216 1603 2218 1603 2196 1603 2193 1603 2217 1603 2178 1603 2208 1603 2206 1603

-
- - - -

2177 1603 2178 1603 2206 1603 2181 1603

-

2177 1603 2207 1603 2212 1603 2188 1603 2176 1603

-

2216 1603 2195 1603 2194 1603 2188 1603 2212 1603

-

2195 1603 2218 1603 2193 1603 2196 1603

-

2196 1603 2217 1603 2213 1603 2189 1603 2197 1603

-

2208 1603 2178 1603 2179 1603 2189 1603 2213 1603

-
- - - -

2184 1604 2187 1604 2211 1604 2204 1604 2201 1604 2220 1604 2203 1604 2219 1604 2199 1604 2183 1604 2210 1604 2209 1604

-
- - - -

2184 1604 2183 1604 2209 1604 2187 1604

-

2184 1604 2211 1604 2215 1604 2191 1604 2185 1604

-

2201 1604 2204 1604 2205 1604 2191 1604 2215 1604

-

2204 1604 2220 1604 2219 1604 2203 1604

-

2203 1604 2199 1604 2214 1604 2190 1604 2202 1604

-

2210 1604 2183 1604 2182 1604 2190 1604 2214 1604

-
- - - -

2218 1600 2216 1598 2198 1580 2219 1601

-

2192 1574 2218 1600 2219 1601 2220 1602

-

2217 1599 2192 1574 2220 1602 2200 1582

-

2213 1595 2217 1599 2200 1582 2215 1597

-

2208 1590 2213 1595 2215 1597 2211 1593

-

2206 1588 2208 1590 2211 1593 2187 1569

-

2181 1563 2206 1588 2187 1569 2209 1591

-

2207 1589 2181 1563 2209 1591 2210 1592

-

2212 1594 2207 1589 2210 1592 2214 1596

-

2216 1598 2212 1594 2214 1596 2198 1580

-
- - - -

2221 1605 2222 1606 2223 1607 2224 1608

-

2225 1609 2226 1610 2227 1611 2228 1612

-

2229 1613 2230 1614 2231 1615 2232 1616

-

2233 1617 2234 1618 2235 1619 2236 1620

-

2237 1621 2238 1622 2239 1623 2240 1624

-

2241 1625 2242 1626 2243 1627 2244 1628

-
- - - -

2245 1629 2246 1630 2247 1631 2248 1632 2249 1633 2250 1634 2251 1635 2252 1636 2253 1637 2254 1638

-

2255 1639 2256 1640 2257 1641 2258 1642 2259 1643 2260 1644 2261 1645 2262 1646 2263 1647 2264 1648

-

2265 1649 2266 1650 2267 1651 2268 1652

-

2269 1653 2270 1654 2271 1655 2272 1656

-

2273 1657 2274 1658 2275 1659 2276 1660

-

2277 1661 2278 1662 2279 1663 2280 1664

-

2281 1665 2282 1666 2283 1667 2284 1668

-

2285 1669 2286 1670 2287 1671 2288 1672

-

2289 1673 2290 1674 2291 1675 2292 1676

-

2293 1677 2294 1678 2295 1679 2296 1680

-

2297 1681 2298 1682 2299 1683 2300 1684

-

2301 1685 2302 1686 2303 1687 2304 1688

-
- - - -

2316 1713 2328 1713 2324 1713 2320 1713

-

2320 1713 2310 1713 2312 1713 2316 1713

-
- - - -

2314 1714 2308 1714 2306 1714 2318 1714

-

2318 1714 2322 1714 2326 1714 2314 1714

-
- - - -

2307 1691 2311 1695 2309 1693 2305 1689

-

2306 1690 2310 1694 2320 1704 2318 1702

-

2317 1701 2319 1703 2323 1707 2321 1705

-

2322 1706 2324 1708 2327 1711 2325 1709

-

2326 1710 2328 1712 2316 1700 2314 1698

-

2313 1697 2315 1699 2312 1696 2308 1692

-
- - - -

2354 1755 2368 1755 2348 1755 2348 1755 2350 1755 2354 1755 2348 1755 2363 1755 2350 1755 2348 1755 2342 1755 2363 1755 2334 1755 2359 1755 2361 1755 2334 1755 2338 1755 2359 1755 2334 1755 2358 1755 2338 1755

-
- - - -

2348 1755 2334 1755 2361 1755 2342 1755

-
- - - -

2336 1756 2356 1756 2331 1756 2331 1756 2340 1756 2336 1756 2331 1756 2360 1756 2340 1756 2346 1756 2344 1756 2362 1756 2346 1756 2364 1756 2344 1756 2346 1756 2352 1756 2364 1756 2346 1756 2366 1756 2352 1756

-
- - - -

2331 1756 2346 1756 2362 1756 2360 1756

-
- - - -

2346 1732 2348 1734 2368 1754 2366 1752

-

2365 1751 2367 1753 2353 1739 2351 1737

-

2351 1737 2353 1739 2350 1736 2364 1750

-

2364 1750 2350 1736 2363 1749 2344 1730

-

2344 1730 2363 1749 2342 1728 2362 1748

-

2362 1748 2342 1728 2361 1747 2360 1746

-

2360 1746 2361 1747 2359 1745 2340 1726

-

2340 1726 2359 1745 2338 1724 2336 1722

-

2336 1722 2338 1724 2358 1744 2356 1742

-

2355 1741 2357 1743 2332 1718 2329 1715

-

2331 1717 2333 1719 2348 1734 2346 1732

-
- - - -

2387 1876 2480 1876 2398 1876

-
- - - -

2468 1876 2437 1876 2438 1876 2379 1876

-

2454 1876 2394 1876 2414 1876 2418 1876

-

2430 1876 2398 1876 2475 1876 2432 1876 2466 1876 2377 1876

-

2448 1876 2485 1876 2452 1876 2411 1876

-

2409 1876 2477 1876 2479 1876 2411 1876 2438 1876

-

2438 1876 2411 1876 2452 1876 2487 1876 2482 1876 2387 1876 2398 1876 2430 1876 2459 1876 2454 1876 2418 1876 2455 1876 2422 1876 2457 1876 2426 1876 2462 1876 2465 1876 2379 1876

-
- - - -

2434 1877 2481 1877 2384 1877

-
- - - -

2390 1877 2444 1877 2450 1877 2484 1877

-

2474 1877 2434 1877 2428 1877 2463 1877 2396 1877 2473 1877

-

2417 1877 2371 1877 2391 1877 2453 1877

-

2441 1877 2403 1877 2471 1877 2381 1877

-

2406 1877 2441 1877 2444 1877 2478 1877 2476 1877

-

2444 1877 2441 1877 2381 1877 2464 1877 2461 1877 2460 1877 2424 1877 2456 1877 2420 1877 2417 1877 2453 1877 2458 1877 2428 1877 2434 1877 2384 1877 2483 1877 2486 1877 2450 1877

-
- - - -

2481 1869 2434 1822 2398 1786 2480 1868

-

2474 1862 2475 1863 2398 1786 2434 1822

-

2473 1861 2432 1820 2475 1863 2474 1862

-

2396 1784 2466 1854 2432 1820 2473 1861

-

2463 1851 2376 1764 2466 1854 2396 1784

-

2427 1815 2429 1817 2376 1764 2463 1851

-

2458 1846 2459 1847 2429 1817 2427 1815

-

2453 1841 2454 1842 2459 1847 2458 1846

-

2391 1779 2394 1782 2454 1842 2453 1841

-

2369 1757 2412 1800 2392 1780 2372 1760

-

2417 1805 2418 1806 2414 1802 2371 1759

-

2419 1807 2455 1843 2374 1762 2415 1803

-

2456 1844 2421 1809 2455 1843 2419 1807

-

2423 1811 2457 1845 2421 1809 2456 1844

-

2460 1848 2425 1813 2457 1845 2423 1811

-

2461 1849 2462 1850 2425 1813 2460 1848

-

2464 1852 2465 1853 2462 1850 2461 1849

-

2381 1769 2379 1767 2465 1853 2464 1852

-

2469 1857 2472 1860 2470 1858 2467 1855

-

2468 1856 2471 1859 2402 1790 2436 1824

-

2441 1829 2438 1826 2437 1825 2403 1791

-

2399 1787 2439 1827 2404 1792 2407 1795

-

2476 1864 2477 1865 2409 1797 2406 1794

-

2478 1866 2479 1867 2477 1865 2476 1864

-

2444 1832 2411 1799 2479 1867 2478 1866

-

2388 1776 2446 1834 2445 1833 2442 1830

-

2484 1872 2485 1873 2448 1836 2390 1778

-

2450 1838 2452 1840 2485 1873 2484 1872

-

2486 1874 2487 1875 2452 1840 2450 1838

-

2483 1871 2482 1870 2487 1875 2486 1874

-

2384 1772 2387 1775 2482 1870 2483 1871

-

2480 1868 2386 1774 2383 1771 2481 1869

-
- - - -

2595 2007 2524 2007 2520 2007 2599 2007 2553 2007

-

2524 2007 2595 2007 2519 2007 2590 2007 2515 2007 2588 2007 2543 2007 2583 2007 2513 2007 2579 2007 2537 2007 2581 2007 2491 2007 2584 2007 2586 2007 2495 2007 2547 2007 2591 2007 2551 2007 2597 2007 2557 2007 2601 2007 2503 2007 2603 2007 2569 2007 2609 2007 2535 2007 2611 2007 2615 2007 2509 2007 2614 2007

-

2608 2007 2567 2007 2604 2007 2530 2007 2562 2007

-

2614 2007 2575 2007 2608 2007 2562 2007 2524 2007

-
- - - -

2596 2008 2555 2008 2600 2008 2521 2008 2527 2008

-

2507 2008 2616 2008 2577 2008 2612 2008 2610 2008 2573 2008 2607 2008 2505 2008 2602 2008 2559 2008 2598 2008 2497 2008 2594 2008 2592 2008 2549 2008 2587 2008 2493 2008 2541 2008 2582 2008 2511 2008 2578 2008 2580 2008 2489 2008 2539 2008 2585 2008 2545 2008 2589 2008 2517 2008 2593 2008 2596 2008 2527 2008

-

2571 2008 2565 2008 2533 2008 2605 2008 2606 2008

-

2565 2008 2571 2008 2613 2008 2507 2008 2527 2008

-
- - - -

2514 1904 2589 1979 2544 1934 2588 1978

-

2588 1978 2544 1934 2585 1975 2542 1932

-

2542 1932 2585 1975 2538 1928 2583 1973

-

2583 1973 2538 1928 2488 1878 2512 1902

-

2512 1902 2488 1878 2580 1970 2579 1969

-

2579 1969 2580 1970 2578 1968 2536 1926

-

2536 1926 2578 1968 2510 1900 2581 1971

-

2581 1971 2510 1900 2582 1972 2490 1880

-

2490 1880 2582 1972 2540 1930 2584 1974

-

2584 1974 2540 1930 2492 1882 2586 1976

-

2586 1976 2492 1882 2587 1977 2494 1884

-

2494 1884 2587 1977 2548 1938 2546 1936

-

2546 1936 2548 1938 2592 1982 2591 1981

-

2591 1981 2592 1982 2594 1984 2550 1940

-

2550 1940 2594 1984 2497 1887 2597 1987

-

2597 1987 2497 1887 2598 1988 2557 1947

-

2557 1947 2598 1988 2559 1949 2601 1991

-

2601 1991 2559 1949 2602 1992 2503 1893

-

2503 1893 2602 1992 2505 1895 2603 1993

-

2603 1993 2505 1895 2607 1997 2569 1959

-

2569 1959 2607 1997 2573 1963 2609 1999

-

2609 1999 2573 1963 2610 2000 2535 1925

-

2535 1925 2610 2000 2612 2002 2611 2001

-

2611 2001 2612 2002 2577 1967 2615 2005

-

2615 2005 2577 1967 2616 2006 2509 1899

-

2509 1899 2616 2006 2507 1897 2614 2004

-

2614 2004 2507 1897 2613 2003 2575 1965

-

2575 1965 2613 2003 2571 1961 2608 1998

-

2608 1998 2571 1961 2606 1996 2567 1957

-

2567 1957 2606 1996 2605 1995 2604 1994

-

2604 1994 2605 1995 2533 1923 2530 1920

-

2528 1918 2531 1921 2563 1953 2560 1950

-

2561 1951 2564 1954 2525 1915 2522 1912

-

2524 1914 2527 1917 2521 1911 2520 1910

-

2499 1889 2501 1891 2600 1990 2599 1989

-

2599 1989 2600 1990 2555 1945 2553 1943

-

2553 1943 2555 1945 2596 1986 2595 1985

-

2595 1985 2596 1986 2593 1983 2518 1908

-

2518 1908 2593 1983 2516 1906 2590 1980

-

2590 1980 2516 1906 2589 1979 2514 1904

-
- - - -

2617 2009 2618 2010 2619 2011 2620 2012 2621 2013 2622 2014 2623 2015 2624 2016 2625 2017 2626 2018 2627 2019 2628 2020 2629 2021 2630 2022 2631 2023 2632 2024 2633 2025 2634 2026 2635 2027 2636 2028 2637 2029 2638 2030 2639 2031 2640 2032

-

2641 2033 2642 2034 2643 2035 2644 2036 2645 2037 2646 2038 2647 2039 2648 2040 2649 2041 2650 2042 2651 2043 2652 2044 2653 2045 2654 2046 2655 2047 2656 2048 2657 2049 2658 2050 2659 2051 2660 2052 2661 2053 2662 2054 2663 2055 2664 2056

-

2665 2057 2666 2058 2667 2059 2668 2060

-

2669 2061 2670 2062 2671 2063 2672 2064

-

2673 2065 2674 2066 2675 2067 2676 2068

-

2677 2069 2678 2070 2679 2071 2680 2072

-

2681 2073 2682 2074 2683 2075 2684 2076

-

2685 2077 2686 2078 2687 2079 2688 2080

-

2689 2081 2690 2082 2691 2083 2692 2084

-

2693 2085 2694 2086 2695 2087 2696 2088

-

2697 2089 2698 2090 2699 2091 2700 2092

-

2701 2093 2702 2094 2703 2095 2704 2096

-

2705 2097 2706 2098 2707 2099 2708 2100

-

2709 2101 2710 2102 2711 2103 2712 2104

-

2713 2105 2714 2106 2715 2107 2716 2108

-

2717 2109 2718 2110 2719 2111 2720 2112

-

2721 2113 2722 2114 2723 2115 2724 2116

-

2725 2117 2726 2118 2727 2119 2728 2120

-

2729 2121 2730 2122 2731 2123 2732 2124

-

2733 2125 2734 2126 2735 2127 2736 2128

-

2737 2129 2738 2130 2739 2131 2740 2132

-

2741 2133 2742 2134 2743 2135 2744 2136

-

2745 2137 2746 2138 2747 2139 2748 2140

-

2749 2141 2750 2142 2751 2143 2752 2144

-

2753 2145 2754 2146 2755 2147 2756 2148

-

2757 2149 2758 2150 2759 2151 2760 2152

-
- - - -

2761 2153 2762 2154 2763 2155 2764 2156 2765 2157 2766 2158 2767 2159 2768 2160 2769 2161 2770 2162

-

2771 2163 2772 2164 2773 2165 2774 2166 2775 2167 2776 2168 2777 2169 2778 2170 2779 2171 2780 2172

-

2781 2173 2782 2174 2783 2175 2784 2176

-

2785 2177 2786 2178 2787 2179 2788 2180

-

2789 2181 2790 2182 2791 2183 2792 2184

-

2793 2185 2794 2186 2795 2187 2796 2188

-

2797 2189 2798 2190 2799 2191 2800 2192

-

2801 2193 2802 2194 2803 2195 2804 2196

-

2805 2197 2806 2198 2807 2199 2808 2200

-

2809 2201 2810 2202 2811 2203 2812 2204

-

2813 2205 2814 2206 2815 2207 2816 2208

-

2817 2209 2818 2210 2819 2211 2820 2212

-
-
- - - CAT3DBagRep - - -
- - - - -162.483 -170 240.206 -173.845 -170 100.369 -251.147 -170 145 -205.061 -170 205.06 -251.147 -192 145 -251.147 -170 145 -173.845 -170 100.369 -173.845 -192 100.369 -173.845 -192 100.369 -173.845 -170 100.369 -162.483 -170 240.206 -162.483 -192 240.206 -162.483 -192 240.206 -162.483 -170 240.206 -205.061 -170 205.06 -205.061 -192 205.06 -205.061 -192 205.06 -205.061 -170 205.06 -251.147 -170 145 -251.147 -192 145 -205.061 -192 205.06 -251.147 -192 145 -173.845 -192 100.369 -162.483 -192 240.206 -177.794 -294 24.0367 -179.587 -294 24.0367 -179.587 -294 13.4156 -155.245 -294 13.4156 -161.5 -294 19.6708 -229.64 -294 -66.9112 -229.64 -294 24.0367 -239.891 -294 24.0367 -270.614 -294 7.00677 -179.587 -294 13.4156 -179.587 -294 12.7463 -161.835 -294 4.46844 -160.817 -294 8.1051 -160.817 -294 13.4156 -154.56 -294 8.1051 -154.56 -294 12.7312 -155.245 -294 13.4156 -160.817 -294 13.4156 -160.817 -294 8.1051 -154.56 -294 -8.6554 -154.56 -294 8.1051 -160.817 -294 8.1051 -161.835 -294 4.46844 -145.029 -294 3.19977 -154.56 -294 12.7312 -154.56 -294 -7.82642 -142.074 -294 -7.82642 -148.304 -294 -13.137 -148.304 -294 -18.4475 -142.047 -294 -18.4475 -142.047 -294 -13.137 -154.56 -294 -7.82642 -154.56 -294 -8.6554 -152.097 -294 -13.0992 -148.304 -294 -13.137 -142.047 -294 -13.137 -142.047 -294 -7.82642 -148.304 -294 -13.137 -152.097 -294 -13.0992 -152.754 -294 -18.4475 -148.304 -294 -18.4475 -270.614 -260 7.00677 -270.614 -260 7.00677 -270.614 -260 7.00677 -256.505 -260 -18.4457 -239.891 -294 24.0367 -239.886 -260 24.0396 -232.955 -260 -60.9309 -230.642 -260 -65.1039 -230.642 -260 -60.9309 -230.642 -260 -18.4457 -230.642 -260 24.0396 -229.64 -294 -60.9318 -229.64 -294 -18.4475 -229.64 -294 24.0367 -213.891 -294 -95.3238 -213.891 -294 -95.3238 -213.891 -294 -95.3238 -213.891 -260 -95.3238 -213.891 -260 -95.3238 -213.891 -260 -95.3238 -192.1 -294 24.0367 -187.961 -260 -51.5583 -187.961 -260 -51.5583 -181.266 -260 -93.1872 -181.266 -260 -60.9309 -181.266 -260 -50.2569 -181.266 -260 24.0396 -181.266 -260 56.5331 -180.039 -294 12.9572 -180.039 -294 12.9572 -179.938 -294 24.6113 -179.938 -294 24.6113 -179.938 -294 24.6113 -179.938 -294 24.6113 -179.587 -294 -93.0773 -179.587 -294 -60.9318 -179.587 -294 12.7463 -179.587 -294 24.0367 -177.794 -294 24.0367 -177.151 -294 58.8141 -177.151 -294 58.8141 -177.151 -294 58.8141 -177.144 -260 58.8177 -177.144 -260 58.8177 -177.144 -260 58.8177 -177.144 -260 58.8177 -168.244 -294 -47.7257 -168.244 -294 -47.7257 -168.244 -260 -47.7257 -168.244 -260 -47.7257 -161.835 -294 4.46844 -160.75 -294 -39.6896 -155.416 -294 -91.4943 -155.416 -294 -91.4943 -154.56 -294 -39.6896 -154.545 -294 -33.0356 -154.545 -294 -33.0356 -154.058 -294 -29.0686 -152.754 -294 -18.4475 -152.097 -294 -13.0992 -146.459 -260 45.6271 -146.459 -260 45.6271 -142.047 -294 -39.6896 -142.047 -294 -29.0686 -142.047 -294 -18.4475 -142.047 -294 -7.92828 -139 -294 -19.3003 -139 -294 -19.3003 -139 -294 -19.3003 -131.889 -260 -78.4531 -131.889 -260 -78.4531 -131.889 -260 -60.9309 -131.889 -260 -18.4457 -131.889 -260 24.0396 -118.404 -275.001 17.06 -118.404 -275.001 17.06 -108 -275 -1.70935 -108 -275 -1.70935 -108 -275 -1.70935 -108 -275 -9.11298 -108 -275 -9.11298 -104.507 -294 -39.6896 -104.507 -294 -18.4475 -100.911 -294 26.7564 -100.911 -294 26.7564 -98.0045 -294 -59.6707 -98.0045 -294 -59.6707 -98.0045 -294 -59.6707 -93.3644 -294 -39.6896 -89.6406 -294 -18.4475 -89.0146 -294 -20.9585 -89.0146 -294 -20.9585 -89.0146 -294 -20.9585 -270.614 -294 7.00677 -270.614 -294 7.00677 -215.903 -294 -25.5018 -215.903 -260 -25.5018 -213.455 -294 -5.56543 -213.455 -260 -5.56543 -206.165 -294 -43.0695 -206.165 -260 -43.0695 -199.756 -294 9.12457 -199.756 -260 9.12457 -187.961 -294 -51.5583 -180.039 -260 12.9572 -179.926 -275.002 24.6079 -179.926 -275.002 24.6079 -177.415 -275.002 55.4093 -177.415 -275.002 55.4093 -177.397 -260 55.4036 -177.397 -260 55.4036 -177.184 -275 58.7958 -177.184 -275 58.7958 -161.835 -260 4.46844 -161.5 -294 19.6708 -161.5 -275.001 19.6708 -155.416 -260 -91.4943 -154.545 -260 -33.0356 -152.097 -260 -13.0992 -146.459 -275.002 45.627 -145.029 -294 3.19977 -145.029 -275.001 3.19977 -143.433 -275 -35.8434 -143.433 -275 -35.8434 -141.973 -294 -30.3952 -141.973 -294 -30.3952 -139 -275 -19.3003 -131.889 -260 30.7913 -123.433 -274.999 -35.8435 -123.433 -274.999 -35.8435 -120.287 -294 -30.3951 -120.287 -294 -30.3951 -118.404 -260 17.0601 -118.404 -260 17.0601 -108 -294 -9.11292 -108 -294 34.097 -108 -294 34.097 -108 -274.999 34.097 -108 -274.999 34.097 -108 -274.999 34.097 -100.911 -275 26.7565 -100.911 -275 26.7565 -98.0045 -260 -59.6707 -98.0045 -260 -59.6707 -91.4697 -275.002 -31.5308 -91.4697 -275.002 -31.5308 -91.4697 -260 -31.5307 -91.4697 -260 -31.5307 -89.0146 -275.002 -20.9585 -89.0146 -275.002 -20.9585 -229.64 -294 -66.9112 -175.424 -170.001 80.4701 -175.424 -170.001 80.4701 -175.424 -170.001 80.4701 -175.424 -170.001 80.4701 -175.424 -170.001 80.4701 -175.424 -119.002 80.4709 -175.424 -119.002 80.4709 -1.97028 -183.001 -192.991 -1.97028 -183.001 -192.991 -1.97028 -183.001 -192.991 -1.97021 -162.001 -192.991 -1.97021 -162.001 -192.991 -1.97021 -162.001 -192.991 175.47 -170.001 80.3698 175.47 -170.001 80.3698 175.47 -170.001 80.3698 175.47 -119.001 80.3698 175.47 -119.001 80.3698 -250 -119.002 -0.000427 -250 -192.001 -0.000671 -241.482 -119.002 -64.705 -241.482 -192.001 -64.7056 -238.88 -119.002 41.4995 -238.88 -192.001 41.4993 -224.698 -192.001 -109.593 -224.698 -192.001 -109.593 -224.698 -119.002 -109.593 -224.698 -119.002 -109.593 -216.506 -170.001 125 -216.506 -170.001 125 -216.506 -119.002 125 -216.506 -119.002 125 -208.501 -192.001 71.8782 -208.5 -119.002 71.8798 -177.415 -192.001 55.4098 -177.415 -192.001 55.4098 -177.415 -275.003 55.4094 -177.415 -275.003 55.4094 -175.424 -170.001 80.4701 -175.424 -119.002 80.4709 -175.423 -192.001 80.4698 -175.423 -192.001 80.4698 -175.423 -275.003 80.4688 -175.423 -275.003 80.4688 -173.845 -119.002 100.369 -173.845 -119.002 100.369 -173.845 -170.001 100.369 -173.845 -170.001 100.369 -173.467 -119.002 -84.6063 -173.467 -119.002 -84.6063 -173.467 -192.001 -84.6063 -173.467 -192.001 -84.6063 -166.84 -170.001 186.183 -166.84 -119.002 186.183 -158.383 -119.002 -110.29 -158.383 -162.001 -110.29 -158.383 -162.001 -110.29 -158.383 -162.001 -110.29 -158.383 -192.001 -110.29 -158.383 -192.001 -110.29 -146.459 -275.002 45.6271 -146.458 -192.001 45.6273 -124.058 -119.002 -147.847 -124.057 -162.001 -147.848 -124.057 -162.001 -147.848 -118.404 -275.002 17.0598 -118.404 -192.001 17.0606 -85.505 -170.001 234.923 -85.505 -119.002 234.923 -73.8009 -192.001 -63.4051 -73.8008 -162.001 -63.4048 -73.8008 -162.001 -63.4048 -66.0096 -119.002 -181.361 -66.0096 -162.001 -181.361 -66.0096 -162.001 -181.361 -32.4524 -275.001 -138.001 -18.7873 -183.001 -162.652 -1.97028 -183.001 -192.991 -1.97021 -162.001 -192.991 -1.97021 -162.001 -192.991 -1.97009 -119.002 -192.991 0 -170.001 249.999 0 -119.001 249.999 12.0737 -275.001 -138.001 14.2307 -183.001 -162.652 47.9268 -275.001 -131.679 56.4886 -183.001 -155.201 66.0099 -183.001 -181.362 66.01 -119.002 -181.361 85.505 -170.001 234.923 85.505 -119.001 234.923 90.0731 -275.001 -107.345 105.115 -170.001 161.863 105.115 -170.001 161.863 105.115 -119.001 161.863 105.115 -119.001 161.863 106.164 -183.001 -126.521 119.764 -275.001 -71.9616 124.058 -119.001 -147.847 124.058 -183.001 -147.847 127.951 -275.001 -51.6965 127.951 -275.001 -51.6965 136.16 -170.001 209.667 136.16 -170.001 209.667 136.16 -119.001 209.667 136.16 -119.001 209.667 141.158 -183.001 -84.8163 147.846 -170.001 124.057 147.847 -119.001 124.057 150.808 -183.001 -60.9311 150.808 -183.001 -60.9311 167.143 -119.001 -96.5007 167.143 -183.001 -96.5005 175.47 -170.001 80.3698 175.47 -275.002 80.3685 175.47 -275.002 80.3685 178.947 -275.001 -72.3 178.947 -275.001 -72.3 178.947 -183.001 -72.2998 178.947 -183.001 -72.2998 178.947 -119.001 -72.2988 190.068 -275.002 33.5131 190.068 -119.001 33.5136 190.068 -275.001 -33.5156 190.068 -119.001 -33.515 68 -418 613 -68 -418 613 -68 -418 477 68 -418 477 -68 -415 477 -68 -418 477 -68 -418 613 -68 -415 613 -68 -415 613 -68 -418 613 68 -418 613 68 -415 613 68 -415 613 68 -418 613 68 -418 477 68 -415 477 68 -415 477 68 -418 477 -68 -418 477 -68 -415 477 68 -415 477 -68 -415 477 -68 -415 613 68 -415 613 -180.039 -260 12.9572 -161.835 -260 4.46844 -152.097 -260 -13.0992 -154.545 -260 -33.0356 -168.244 -260 -47.7257 -187.961 -260 -51.5583 -206.165 -260 -43.0695 -215.903 -260 -25.5018 -213.455 -260 -5.56543 -199.756 -260 9.12463 -199.756 -294 9.12463 -213.455 -294 -5.56543 -215.903 -294 -25.5018 -206.165 -294 -43.0695 -187.961 -294 -51.5583 -168.244 -294 -47.7257 -154.545 -294 -33.0356 -152.097 -294 -13.0992 -161.835 -294 4.46844 -180.039 -294 12.9572 -199.756 -260 9.12463 -199.756 -294 9.12463 -180.039 -294 12.9572 -180.039 -260 12.9572 -180.039 -260 12.9572 -180.039 -294 12.9572 -161.835 -294 4.46844 -161.835 -260 4.46844 -161.835 -260 4.46844 -161.835 -294 4.46844 -152.097 -294 -13.0992 -152.097 -260 -13.0992 -152.097 -260 -13.0992 -152.097 -294 -13.0992 -154.545 -294 -33.0356 -154.545 -260 -33.0356 -154.545 -260 -33.0356 -154.545 -294 -33.0356 -168.244 -294 -47.7257 -168.244 -260 -47.7257 -168.244 -260 -47.7257 -168.244 -294 -47.7257 -187.961 -294 -51.5583 -187.961 -260 -51.5583 -187.961 -260 -51.5583 -187.961 -294 -51.5583 -206.165 -294 -43.0695 -206.165 -260 -43.0695 -206.165 -260 -43.0695 -206.165 -294 -43.0695 -215.903 -294 -25.5018 -215.903 -260 -25.5018 -215.903 -260 -25.5018 -215.903 -294 -25.5018 -213.455 -294 -5.56543 -213.455 -260 -5.56543 -213.455 -260 -5.56543 -213.455 -294 -5.56543 -199.756 -294 9.12463 -199.756 -260 9.12463 -68.6325 -285.982 1069.69 -68.6325 -285.982 1104.79 -81.6341 -285.982 1097.29 -104.79 -285.982 1069.69 68.6325 -274.982 1069.69 68.6325 -274.982 1104.79 81.634 -274.982 1097.29 104.79 -274.982 1069.69 -125.071 -274.982 977.946 -125.071 -274.982 977.946 -125.071 -274.982 1022.05 -125.071 -274.982 1022.05 -125.071 -274.982 999.682 -109.985 -274.982 936.5 -109.985 -274.982 936.5 -109.985 -274.982 1063.5 -109.985 -274.982 1063.5 -104.79 -274.982 1069.69 -104.257 -285.982 929.673 -104.257 -285.982 929.673 -104.257 -274.982 929.673 -104.257 -274.982 929.673 -103.73 -274.982 999.682 -103.105 -285.982 929.673 -103.105 -285.982 999.682 -103.105 -285.982 1069.69 -103.105 -285.982 1069.69 -69.2579 -274.982 929.673 -69.2579 -274.982 1069.69 -68.8031 -274.982 1104.7 -68.6325 -285.982 929.673 -68.6325 -285.982 1069.69 -68.6325 -285.982 1104.7 -68.6325 -285.982 1104.7 -67.7032 -285.982 894.669 -67.7032 -274.982 894.669 -67.7032 -274.982 894.669 -53.3514 -285.982 936.418 -53.3514 -285.982 936.418 -53.3514 -274.982 936.418 -53.3514 -274.982 936.418 -53.3514 -274.982 1063.58 -53.3514 -274.982 1063.58 -42.7695 -274.982 1069.69 -42.7695 -274.982 1069.69 -41.6696 -285.982 929.673 -41.6696 -285.982 929.673 -41.6696 -274.982 929.673 -34.7853 -274.982 894.669 -34.7853 -274.982 1104.7 -34.1599 -285.982 894.669 -34.1599 -285.982 1104.7 -28.3877 -285.982 922.005 -28.3877 -285.982 922.005 -28.3877 -274.982 922.005 -28.3877 -274.982 922.005 -28.3877 -274.982 1077.99 -28.3877 -274.982 1077.99 -0.312683 -274.982 894.669 -0.312683 -274.982 1104.7 0.312622 -285.982 894.669 0.312622 -285.982 1104.7 28.3876 -285.982 922.005 28.3876 -285.982 922.005 28.3876 -285.982 1077.99 28.3876 -285.982 1077.99 28.3876 -274.982 922.005 28.3876 -274.982 922.005 34.1599 -274.982 894.669 34.1599 -274.982 1104.7 34.7852 -285.982 894.669 34.7852 -285.982 1104.7 41.6696 -285.982 929.673 41.6696 -285.982 929.673 41.6696 -274.982 929.673 41.6696 -274.982 929.673 42.7694 -285.982 1069.69 53.3513 -285.982 936.418 53.3513 -285.982 936.418 53.3513 -285.982 1063.58 53.3513 -274.982 936.418 53.3513 -274.982 936.418 67.7032 -285.982 894.669 67.7032 -285.982 894.669 67.7032 -274.982 894.669 68.6325 -274.982 929.673 68.6325 -274.982 1069.69 68.6325 -274.982 1104.7 68.6325 -274.982 1104.7 68.803 -285.982 1104.7 69.2578 -285.982 929.673 69.2578 -285.982 1069.69 103.105 -274.982 929.673 103.105 -274.982 929.673 103.105 -274.982 999.682 103.105 -274.982 1069.69 103.105 -274.982 1069.69 103.73 -285.982 999.682 104.257 -285.982 929.673 104.257 -285.982 929.673 104.257 -274.982 929.673 104.257 -274.982 929.673 104.79 -285.982 1069.69 104.79 -285.982 1069.69 109.985 -285.982 936.5 109.985 -285.982 936.5 109.985 -285.982 1063.5 109.985 -285.982 1063.5 125.071 -285.982 977.946 125.071 -285.982 977.946 125.071 -285.982 1022.05 125.071 -285.982 1022.05 125.071 -285.982 999.682 -125.071 -285.982 977.946 -125.071 -285.982 977.946 -125.071 -285.982 1022.05 -125.071 -285.982 1022.05 -109.985 -285.982 936.5 -109.985 -285.982 936.5 -109.985 -285.982 1063.5 -109.985 -285.982 1063.5 -104.79 -285.982 1069.69 -103.105 -285.982 929.673 -81.7391 -285.982 985.587 -81.7391 -285.982 1014.41 -81.7391 -274.982 985.587 -81.7391 -274.982 1014.41 -81.6341 -285.982 902.712 -81.6341 -285.982 1097.29 -81.6341 -274.982 902.712 -81.6341 -274.982 1097.29 -71.8801 -285.982 958.5 -71.8801 -285.982 1041.5 -71.8801 -274.982 958.5 -71.8801 -274.982 1041.5 -68.8031 -274.982 1104.7 -68.6325 -285.982 1104.79 -67.7032 -285.982 894.669 -53.3514 -285.982 1063.58 -43.4366 -285.982 880.659 -43.4366 -285.982 880.659 -43.4366 -285.982 1119.34 -43.4366 -285.982 1119.34 -43.4366 -274.982 880.659 -43.4366 -274.982 880.659 -43.4366 -274.982 1119.34 -43.4366 -274.982 1119.34 -28.3877 -285.982 1077.99 0 -285.982 873 0 -285.982 873 0 -285.982 917 0 -285.982 1083 0 -285.982 1127 0 -285.982 1127 0 -274.982 873 0 -274.982 873 0 -274.982 917 0 -274.982 1083 0 -274.982 1127 0 -274.982 1127 28.3876 -274.982 1077.99 43.4365 -285.982 880.659 43.4365 -285.982 880.659 43.4365 -285.982 1119.34 43.4365 -285.982 1119.34 43.4365 -274.982 880.659 43.4365 -274.982 880.659 43.4365 -274.982 1119.34 43.4365 -274.982 1119.34 53.3513 -285.982 1063.58 53.3513 -274.982 1063.58 68.6325 -274.982 1104.79 71.8801 -285.982 958.5 71.8801 -285.982 1041.5 71.8801 -274.982 958.5 71.8801 -274.982 1041.5 81.634 -285.982 902.712 81.634 -285.982 1097.29 81.634 -274.982 902.712 81.634 -274.982 1097.29 81.739 -285.982 985.587 81.739 -285.982 1014.41 81.739 -274.982 985.587 81.739 -274.982 1014.41 104.79 -274.982 1069.69 109.985 -274.982 936.5 109.985 -274.982 936.5 109.985 -274.982 1063.5 109.985 -274.982 1063.5 125.071 -274.982 977.946 125.071 -274.982 977.946 125.071 -274.982 1022.05 125.071 -274.982 1022.05 -175.424 -170 80.4702 -117 -170 800 117 -170 800 175.47 -170 80.3699 117 -275 800 117 -170 800 -117 -170 800 -117 -275 800 -117 -275 800 -117 -170 800 -175.424 -170 80.4702 -175.424 -275 80.4702 -175.424 -275 80.4702 -175.424 -170 80.4702 175.47 -170 80.3699 175.47 -275 80.3699 175.47 -275 80.3699 175.47 -170 80.3699 117 -170 800 117 -275 800 175.47 -275 80.3699 117 -275 800 -117 -275 800 -175.424 -275 80.4702 -143.584 -392.361 -2.19061 -143.584 -392.361 -2.19061 -143.584 -392.361 -2.19061 -116.935 -333.1 800 -116.935 -333.1 800 -113.814 -333.1 -19.1836 -113.814 -333.1 -19.1836 -113.814 -333.1 -19.1836 -113.814 -333.1 -19.1836 -108 -389 -3.15442 -108 -389 -3.15442 -108 -389 -3.15442 -108 -333.1 80.451 -108 -333.1 80.451 103.207 -389 80.3962 103.207 -389 80.3962 103.207 -389 80.3962 116.938 -333.1 800 116.938 -333.1 800 128.704 -415 -0.000122 128.704 -415 -0.000122 128.704 -415 -0.000122 147.596 -333.1 -19.1836 147.596 -333.1 -19.1836 147.596 -333.1 -19.1836 147.596 -333.1 -19.1836 -179.895 -333.1 24.5999 -161.5 -362.042 19.6708 -161.5 -333.1 19.6708 -145.029 -333.1 3.19977 -145.029 -389.463 3.19977 -145.029 -389.463 3.19977 -139.031 -333.1 -19.1836 -138.446 -400 -0.000305 -128.704 -415 -0.000122 -128.704 -415 -0.000122 -116.935 -333.1 800 -108 -333.1 -9.11298 -108 -368.221 -9.11285 -108 -333.1 80.451 -108 -389 21.3704 -108 -389 21.3704 -108 -381.613 80.451 -108 -381.613 80.451 -103.203 -389 80.4498 -103.203 -389 80.4498 -103.203 -389 80.4498 -63.7458 -415 800 -63.7458 -415 800 63.7496 -415 800 63.7496 -415 800 103.207 -389 80.3962 109.991 -389 -3.15448 109.991 -389 -3.15448 116.938 -333.1 800 128.704 -415 -0.000122 138.445 -400 -0.000305 139.511 -333.1 80.3868 139.511 -333.1 80.3868 183.45 -333.1 -19.1837 -138.933 -333.1 -19.2158 -138.933 -333.1 -19.2158 -138.933 -333.1 -19.2158 -123.33 -275 -35.8721 -123.33 -275 -35.8721 -117.095 -333.1 799.972 -117.095 -333.1 799.972 -117.095 -333.1 799.972 -117.095 -275 799.972 -117.095 -275 799.972 -117.095 -275 799.972 116.905 -333.1 800.027 116.905 -333.1 800.027 116.905 -333.1 800.027 116.905 -275 800.027 116.905 -275 800.027 116.905 -275 800.027 183.617 -333.1 -19.1396 183.617 -333.1 -19.1396 183.617 -333.1 -19.1396 184.974 -275 -35.7994 184.974 -275 -35.7994 184.974 -275 -35.7994 -179.871 -333.1 24.5748 -179.871 -333.1 24.5748 -179.871 -333.1 24.5748 -179.871 -275 24.5748 -179.871 -275 24.5748 -179.871 -275 24.5748 -123.33 -275 -35.8721 -107.925 -333.1 80.426 -107.925 -333.1 80.426 -107.925 -333.1 80.426 -107.925 -275 80.4259 -107.925 -275 80.4259 -107.925 -275 80.4259 139.586 -333.1 80.4259 139.586 -333.1 80.4259 139.586 -333.1 80.4259 139.586 -275 80.4259 139.586 -275 80.4259 139.586 -275 80.4259 -161.411 -333.1 19.6331 -161.411 -275 19.633 -144.936 -333.1 3.16596 -144.936 -275 3.16589 -143.33 -275 -35.8769 -138.901 -332.692 -19.3327 -138.901 -275 -19.3327 -113.716 -333.1 -19.2098 -107.904 -333.1 -9.13794 -107.904 -275 -9.13818 147.7 -333.1 -19.1481 147.7 -333.1 -19.1481 149.058 -275 -35.8079 149.058 -275 -35.8079 -147.713 -319.984 973.915 -147.713 -319.984 973.915 -143.095 -319.984 947.773 -139.539 -319.983 927.625 -139.539 -319.983 927.625 -129.903 -311.538 1075 -129.903 -311.538 1075 -129.903 -311.538 1075 -51.3022 -259.976 1140.96 -51.3022 -259.976 1140.96 0.000702 -259.977 1138 0.000702 -259.977 1138 0.000702 -259.977 1138 51.3036 -259.976 1140.96 51.3036 -259.976 1140.96 51.3036 -259.976 1140.96 51.3036 -259.976 1140.96 129.905 -259.977 1075 129.905 -259.977 1075 -149.428 -259.978 1013.08 -149.428 -319.191 1013.08 -148.855 -319.984 999.999 -147.713 -259.979 973.913 -147.713 -319.984 973.915 -143.097 -274.977 947.772 -143.096 -259.979 947.769 -137.786 -316.954 1050 -137.475 -274.976 1012.03 -137.474 -259.978 1012.03 -131.497 -274.977 1011.51 -131.496 -319.287 1011.51 -130.994 -319.984 999.999 -129.994 -274.977 977.082 -129.993 -319.984 977.083 -129.903 -259.977 1075 -129.903 -311.538 1075 -119.511 -274.976 1069 -119.511 -259.978 1069 -119.359 -316.955 1050 -117 -333.085 800.003 -117 -333.085 800.003 -117 -274.979 800.004 -116.939 -319.984 941.217 -116.937 -274.978 941.208 -114.538 -319.984 927.623 -114.315 -274.976 1066 -114.314 -313.488 1066 -108.927 -306.122 1100 -96.4171 -259.977 1114.91 -96.4168 -300.235 1114.91 -91.9997 -333.085 800.003 -91.9997 -333.085 800.003 -91.9992 -274.979 800.004 -88.7043 -274.976 1105.72 -88.7039 -259.977 1105.72 -85.7867 -306.123 1100 -84.8473 -274.976 1101.12 -84.8468 -305.68 1101.12 -51.3019 -289.951 1140.96 -47.1984 -274.976 1129.68 -47.1981 -259.977 1129.68 -45.1458 -274.977 1124.04 -45.1456 -296.63 1124.04 0.000397 -274.977 1138 0.000488 -259.976 1150 0.000916 -274.977 1132 0.001038 -293.487 1132 0.001251 -286.379 1150 45.1474 -274.978 1124.04 45.1477 -296.631 1124.04 47.1991 -274.978 1129.68 47.1994 -259.977 1129.68 51.3036 -259.976 1140.96 51.3041 -289.952 1140.96 84.8486 -274.979 1101.12 84.8492 -305.683 1101.12 85.7888 -306.125 1100 88.705 -274.979 1105.72 88.7053 -259.977 1105.72 92.0004 -274.982 800.004 92.0009 -333.088 800.003 92.0009 -333.088 800.003 96.4188 -259.977 1114.91 96.4192 -300.238 1114.91 108.929 -306.125 1100 114.316 -274.979 1066 114.317 -313.491 1066 114.54 -319.987 927.625 116.94 -274.981 941.213 116.94 -319.987 941.214 116.999 -274.982 800.004 117 -333.088 800.003 117 -333.088 800.003 119.362 -316.958 1050 119.512 -274.979 1069 119.512 -259.978 1069 129.905 -259.977 1075 129.905 -311.541 1075 129.995 -274.981 977.082 129.996 -319.988 977.083 130.997 -319.988 999.998 131.499 -274.98 1011.51 131.499 -319.29 1011.51 137.475 -274.98 1012.03 137.476 -259.978 1012.03 137.789 -316.958 1050 139.539 -319.987 927.623 143.097 -274.981 947.773 143.098 -259.979 947.774 147.715 -259.979 973.919 147.716 -319.988 973.92 148.858 -319.988 999.999 149.43 -259.978 1013.08 149.431 -319.195 1013.08 -143.097 -170 947.768 -137.475 -170 1012.03 -119.512 -170 1069 -88.7047 -170 1105.71 -47.1988 -170 1129.68 0 -170 1138 47.1986 -170 1129.68 88.7045 -170 1105.71 119.511 -170 1069 137.475 -170 1012.03 143.097 -170 947.768 117 -170 800 -117 -170 800 -117 -275 800 117 -275 800 143.097 -275 947.768 137.475 -275 1012.03 119.511 -275 1069 88.7045 -275 1105.71 47.1986 -275 1129.68 0 -275 1138 -47.1988 -275 1129.68 -88.7047 -275 1105.71 -119.512 -275 1069 -137.475 -275 1012.03 -143.097 -275 947.768 -137.475 -170 1012.03 -137.475 -275 1012.03 -119.512 -275 1069 -119.512 -170 1069 -119.512 -170 1069 -119.512 -275 1069 -88.7047 -275 1105.71 -88.7047 -170 1105.71 -88.7047 -170 1105.71 -88.7047 -275 1105.71 -47.1988 -275 1129.68 -47.1988 -170 1129.68 -47.1988 -170 1129.68 -47.1988 -275 1129.68 0 -275 1138 0 -170 1138 0 -170 1138 0 -275 1138 47.1986 -275 1129.68 47.1986 -170 1129.68 47.1986 -170 1129.68 47.1986 -275 1129.68 88.7045 -275 1105.71 88.7045 -170 1105.71 88.7045 -170 1105.71 88.7045 -275 1105.71 119.511 -275 1069 119.511 -170 1069 119.511 -170 1069 119.511 -275 1069 137.475 -275 1012.03 137.475 -170 1012.03 137.475 -170 1012.03 137.475 -275 1012.03 143.097 -275 947.768 143.097 -170 947.768 143.097 -170 947.768 143.097 -275 947.768 117 -275 800 117 -170 800 117 -170 800 117 -275 800 -117 -275 800 -117 -170 800 -117 -170 800 -117 -275 800 -143.097 -275 947.768 -143.097 -170 947.768 -143.097 -170 947.768 -143.097 -275 947.768 -137.475 -275 1012.03 -137.475 -170 1012.03 -48.4602 -400 800 -91.9073 -333.1 800 -114.513 -319.985 927.629 -116.935 -333.1 800 -91.9073 -333.1 800 -48.4602 -400 800 -73.4875 -400 800 -73.4875 -400 800 -48.4602 -400 800 -114.513 -319.985 927.629 -139.541 -319.985 927.629 -139.541 -319.985 927.629 -114.513 -319.985 927.629 -91.9073 -333.1 800 -116.935 -333.1 800 -139.541 -319.985 927.629 -116.935 -333.1 800 -73.4875 -400 800 114.513 -319.985 927.629 91.9071 -333.1 800 48.4604 -400 800 116.934 -333.1 800 91.9071 -333.1 800 114.513 -319.985 927.629 139.54 -319.985 927.629 139.54 -319.985 927.629 114.513 -319.985 927.629 48.4604 -400 800 73.4876 -400 800 73.4876 -400 800 48.4604 -400 800 91.9071 -333.1 800 116.934 -333.1 800 73.4876 -400 800 116.934 -333.1 800 139.54 -319.985 927.629 0 -375 925 14.6947 -370.225 929.775 23.7765 -357.725 942.275 23.7765 -342.275 957.725 14.6947 -329.775 970.225 0 -325 975 -14.6946 -329.775 970.225 -23.7764 -342.275 957.725 -23.7764 -357.725 942.275 -14.6946 -370.225 929.775 0 -375 800 -14.6946 -370.225 800 -23.7764 -357.725 800 -23.7764 -342.275 800 -14.6946 -329.775 800 0 -325 800 14.6947 -329.775 800 23.7765 -342.275 800 23.7765 -357.725 800 14.6947 -370.225 800 0 -375 925 0 -375 800 14.6947 -370.225 800 14.6947 -370.225 929.775 14.6947 -370.225 929.775 14.6947 -370.225 800 23.7765 -357.725 800 23.7765 -357.725 942.275 23.7765 -357.725 942.275 23.7765 -357.725 800 23.7765 -342.275 800 23.7765 -342.275 957.725 23.7765 -342.275 957.725 23.7765 -342.275 800 14.6947 -329.775 800 14.6947 -329.775 970.225 14.6947 -329.775 970.225 14.6947 -329.775 800 0 -325 800 0 -325 975 0 -325 975 0 -325 800 -14.6946 -329.775 800 -14.6946 -329.775 970.225 -14.6946 -329.775 970.225 -14.6946 -329.775 800 -23.7764 -342.275 800 -23.7764 -342.275 957.725 -23.7764 -342.275 957.725 -23.7764 -342.275 800 -23.7764 -357.725 800 -23.7764 -357.725 942.275 -23.7764 -357.725 942.275 -23.7764 -357.725 800 -14.6946 -370.225 800 -14.6946 -370.225 929.775 -14.6946 -370.225 929.775 -14.6946 -370.225 800 0 -375 800 0 -375 925 50.6817 -415.5 120.229 49.6527 -415.5 119.953 48.6237 -415.5 118.171 48.6237 -415.5 103.351 52.7404 -415.5 103.351 52.7404 -415.5 118.171 52.4647 -415.5 119.2 -2.24253 -415.5 78.9974 -2.24253 -415.5 83.5636 -29.6082 -415.5 83.5636 -29.6082 -415.5 78.9974 -29.6082 -415.5 130.997 -32.2425 -415.5 130.997 -32.2425 -415.5 78.9974 -29.6082 -415.5 78.9974 -2.24253 -415.5 130.997 -4.8019 -415.5 130.997 -4.8019 -415.5 90.7299 -2.24253 -415.5 90.7299 59.5124 -415.5 119.395 66.2061 -415.5 119.395 66.2061 -415.5 130.997 59.5124 -415.5 130.997 66.2061 -415.5 78.9974 66.2061 -415.5 83.5636 38.8405 -415.5 83.5636 38.8405 -415.5 78.9974 38.8405 -415.5 130.997 36.2061 -415.5 130.997 36.2061 -415.5 78.9974 38.8405 -415.5 78.9974 32.2438 -415.5 78.9974 32.2438 -415.5 83.5636 4.87819 -415.5 83.5636 4.87819 -415.5 78.9974 32.2438 -415.5 105.062 29.6844 -415.5 105.062 29.6844 -415.5 83.5636 32.2438 -415.5 83.5636 4.87819 -415.5 130.997 2.24381 -415.5 130.997 2.24381 -415.5 78.9974 4.87819 -415.5 78.9974 -36.2048 -415.5 78.9974 -36.2048 -415.5 83.5636 -63.5704 -415.5 83.5636 -63.5704 -415.5 78.9974 -36.2048 -415.5 105.062 -38.7641 -415.5 105.062 -38.7641 -415.5 83.5636 -36.2048 -415.5 83.5636 -63.5704 -415.5 130.997 -66.2048 -415.5 130.997 -66.2048 -415.5 78.9974 -63.5704 -415.5 78.9974 -21.3394 -415.5 126.561 -21.3394 -415.5 130.997 -29.6082 -415.5 130.997 -29.6082 -415.5 126.561 -19.3008 -415.5 126.404 -19.3008 -415.5 92.6471 -19.0252 -415.5 91.6181 -17.243 -415.5 90.5891 -16.2131 -415.5 90.8649 -15.1842 -415.5 92.6471 -15.1842 -415.5 126.404 -17.205 -415.5 126.561 -21.3394 -415.5 126.561 -19.3008 -415.5 126.404 -17.205 -415.5 126.561 -17.205 -415.5 130.997 -21.3394 -415.5 130.997 -4.8019 -415.5 130.997 -17.205 -415.5 130.997 -17.205 -415.5 126.561 -15.1842 -415.5 126.404 -8.18591 -415.5 126.404 -4.8019 -415.5 126.561 -4.8019 -415.5 126.561 -8.18591 -415.5 126.404 -8.18591 -415.5 92.6475 -4.8019 -415.5 90.7299 -8.18591 -415.5 92.6475 -8.69973 -415.5 90.7299 -4.8019 -415.5 90.7299 -25.4738 -415.5 126.561 -29.6082 -415.5 126.561 -29.6082 -415.5 90.7299 -26.2991 -415.5 92.6475 -26.2991 -415.5 92.6475 -29.6082 -415.5 90.7299 -29.6082 -415.5 83.5636 -25.4738 -415.5 83.5636 -25.0858 -415.5 88.1192 -25.4738 -415.5 83.5636 -21.3394 -415.5 83.5636 -21.7708 -415.5 84.8042 -25.0858 -415.5 88.1192 -17.205 -415.5 83.5636 -21.7708 -415.5 84.8042 -21.3394 -415.5 83.5636 -2.24253 -415.5 83.5636 -2.24253 -415.5 90.7299 -8.69973 -415.5 90.7299 -9.39926 -415.5 88.1192 -8.93628 -415.5 83.5636 -13.0707 -415.5 83.5636 -8.93628 -415.5 83.5636 -9.39926 -415.5 88.1192 -12.7142 -415.5 84.8042 -12.7142 -415.5 84.8042 -17.205 -415.5 83.5636 -13.0707 -415.5 83.5636 47.1092 -415.5 126.561 45.9479 -415.5 125.246 51.2436 -415.5 126.561 42.7836 -415.5 122.081 45.9479 -415.5 125.246 47.1092 -415.5 126.561 47.1092 -415.5 130.997 42.9749 -415.5 130.997 55.378 -415.5 126.561 55.378 -415.5 130.997 47.1092 -415.5 130.997 47.1092 -415.5 126.561 38.8405 -415.5 119.395 41.6255 -415.5 117.759 42.7836 -415.5 122.081 42.9749 -415.5 126.561 42.9749 -415.5 130.997 38.8405 -415.5 130.997 41.6255 -415.5 117.759 38.8405 -415.5 119.395 38.8405 -415.5 83.5636 41.6255 -415.5 83.5909 51.2436 -415.5 83.5636 48.6237 -415.5 83.5909 41.6255 -415.5 83.5909 38.8405 -415.5 83.5636 48.6237 -415.5 96.3524 48.6237 -415.5 83.5909 51.2436 -415.5 83.5636 52.7404 -415.5 83.5909 52.7404 -415.5 96.3524 63.6467 -415.5 83.5636 59.7386 -415.5 83.5909 52.7404 -415.5 83.5909 51.2436 -415.5 83.5636 59.7386 -415.5 117.759 59.7386 -415.5 83.5909 63.6467 -415.5 83.5636 66.2061 -415.5 83.5636 66.2061 -415.5 119.395 63.6467 -415.5 119.395 63.6467 -415.5 119.395 59.5124 -415.5 119.395 59.7386 -415.5 117.759 59.7386 -415.5 117.759 59.5124 -415.5 119.395 58.5805 -415.5 122.081 58.5805 -415.5 122.081 59.5124 -415.5 119.395 59.5124 -415.5 126.561 55.378 -415.5 126.561 55.4162 -415.5 125.246 58.5805 -415.5 122.081 59.5124 -415.5 126.561 59.5124 -415.5 130.997 55.378 -415.5 130.997 55.4162 -415.5 125.246 55.378 -415.5 126.561 51.2436 -415.5 126.561 32.2438 -415.5 126.561 32.2438 -415.5 130.997 17.2813 -415.5 130.997 17.2813 -415.5 126.561 29.6844 -415.5 126.561 17.2813 -415.5 126.561 18.7781 -415.5 126.404 25.7763 -415.5 126.404 25.5501 -415.5 105.062 32.2438 -415.5 105.062 32.2438 -415.5 126.561 29.6844 -415.5 126.561 25.7763 -415.5 126.404 25.5501 -415.5 125.091 25.5501 -415.5 125.091 21.7392 -415.5 102.987 23.9239 -415.5 102.031 25.5501 -415.5 105.062 25.5501 -415.5 105.062 23.9239 -415.5 102.031 25.28 -415.5 100.675 25.28 -415.5 100.675 25.5501 -415.5 99.6669 29.6844 -415.5 97.8961 29.6844 -415.5 105.062 25.5501 -415.5 105.062 25.5501 -415.5 99.6669 25.7763 -415.5 83.5909 29.6844 -415.5 83.5636 29.6844 -415.5 97.8961 29.6844 -415.5 83.5636 25.7763 -415.5 83.5909 18.7781 -415.5 83.5909 17.2813 -415.5 83.5636 17.2678 -415.5 96.2056 15.1041 -415.5 96.3524 14.6614 -415.5 83.5909 17.2813 -415.5 83.5636 18.7781 -415.5 83.5909 18.7781 -415.5 94.2941 18.5023 -415.5 95.3233 17.2813 -415.5 83.5636 14.6614 -415.5 83.5909 7.66316 -415.5 83.5909 4.87819 -415.5 83.5636 7.66316 -415.5 125.88 4.87819 -415.5 126.561 4.87819 -415.5 83.5636 7.66316 -415.5 83.5909 9.01257 -415.5 126.561 9.01257 -415.5 130.997 4.87819 -415.5 130.997 4.87819 -415.5 126.561 7.66316 -415.5 125.88 9.01257 -415.5 130.997 9.01257 -415.5 126.561 10.4977 -415.5 126.404 14.6614 -415.5 126.404 17.2813 -415.5 126.561 17.2813 -415.5 130.997 17.2813 -415.5 126.561 14.6614 -415.5 126.404 14.6614 -415.5 102.527 17.2813 -415.5 119.395 17.2813 -415.5 126.561 17.2813 -415.5 119.395 18.7781 -415.5 126.404 -59.436 -415.5 126.561 -63.5704 -415.5 126.561 -63.5704 -415.5 83.5636 -60.2614 -415.5 83.5909 -51.1673 -415.5 83.5636 -53.2631 -415.5 83.5909 -60.2614 -415.5 83.5909 -63.5704 -415.5 83.5636 -51.2048 -415.5 96.3524 -53.2631 -415.5 96.3524 -53.2631 -415.5 83.5909 -51.1673 -415.5 83.5636 -49.1465 -415.5 83.5909 -49.1465 -415.5 94.2941 -49.4223 -415.5 95.3233 -38.7641 -415.5 83.5636 -42.1481 -415.5 83.5909 -49.1465 -415.5 83.5909 -51.1673 -415.5 83.5636 -42.1481 -415.5 98.8224 -42.1481 -415.5 83.5909 -38.7641 -415.5 83.5636 -38.7641 -415.5 97.8961 -38.7641 -415.5 97.8961 -38.7641 -415.5 105.062 -42.8985 -415.5 105.062 -42.8985 -415.5 100.929 -42.1481 -415.5 98.8224 -44.0007 -415.5 102.031 -42.8985 -415.5 100.929 -42.8985 -415.5 105.062 -42.8985 -415.5 122.052 -46.2649 -415.5 102.527 -44.0007 -415.5 102.031 -42.8985 -415.5 105.062 -42.8985 -415.5 105.062 -36.2048 -415.5 105.062 -36.2048 -415.5 126.561 -38.7641 -415.5 126.561 -42.1481 -415.5 126.404 -42.8985 -415.5 122.052 -38.7641 -415.5 126.561 -51.1673 -415.5 126.561 -49.1465 -415.5 126.404 -42.1481 -415.5 126.404 -55.3016 -415.5 126.561 -55.3016 -415.5 130.997 -63.5704 -415.5 130.997 -63.5704 -415.5 126.561 -36.2048 -415.5 126.561 -36.2048 -415.5 130.997 -51.1673 -415.5 130.997 -51.1673 -415.5 126.561 -55.3016 -415.5 126.561 -53.2631 -415.5 126.404 -51.1673 -415.5 126.561 -51.1673 -415.5 130.997 -55.3016 -415.5 130.997 -51.1673 -415.5 126.561 -53.2631 -415.5 126.404 -53.2631 -415.5 102.527 -51.1673 -415.5 119.395 -51.1673 -415.5 126.561 -51.1673 -415.5 119.395 -49.1465 -415.5 126.404 - - - - - - - - - - 0 1 0 0 1 0 0 1 0 0 1 0 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 0.996717 0 -0.0809656 0.996717 0 -0.0809656 0.996717 0 -0.0809656 0.996717 0 -0.0809656 -0.636586 0 0.771206 -0.636586 0 0.771206 -0.719572 0 0.694418 -0.719572 0 0.694418 -0.719572 0 0.694418 -0.719572 0 0.694418 -0.79336 0 0.608753 -0.79336 0 0.608753 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.874633 0 -0.484787 -0.484787 0 0.874633 0 1 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 -0.874633 0 -0.484787 0 -1 0 0.0653401 0 -0.997863 -0.874633 0 -0.484787 0 1 0 0.0653401 0 -0.997863 0 -1 0 0 1 0 0.12186 0 0.992547 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.12186 0 -0.992547 0 -1 0 0 -1 0 0 -1 0 0.258797 0 0.965932 0.996697 -0.000671407 -0.0812098 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.484787 0 0.874633 0 -1 0 0.997205 0.000488296 -0.0747093 -0.484787 0 0.874633 0 1 0 0 -1 0 0.997478 -0.00186163 -0.0709555 -0.484787 0 0.874633 0 -1 0 -0.484787 0 0.874633 0 1 0 -0.681997 0 -0.731355 0 -1 0 0 -1 0 0.281869 0 -0.959453 0 -1 0 -0.906321 0 0.42259 0 -1 0 0 -1 0 0 -1 0 -0.981629 0 -0.190802 0 1 0 0.522904 0 0.852391 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 0 1 0 0.9987 0 -0.0509659 0 1 0 0 1 0 0 1 0 0 -1 0 0.801352 0 0.598193 0 -1 0 6.1037e-005 1 0 0.9987 0 -0.0509659 -0.965932 0 0.258797 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.874633 0 0.484787 0 -1 0 0.484787 0 -0.874633 0.9987 0 -0.0509659 0 -1 0 0 -1 0 0 -1 0 0.99741 0 -0.0719321 0.9987 0 -0.0509659 -0.874633 0 -0.484787 -0.484787 0 0.874633 0.981629 0 0.190802 0.981629 0 0.190802 0.906321 0 -0.42259 0.906321 0 -0.42259 0.681997 0 0.731355 0.681997 0 0.731355 0.484787 0 -0.874633 0.484787 0 -0.874633 0.12186 0 0.992547 -0.12186 0 -0.992547 0.258797 0 0.965932 0.996697 -0.000671407 -0.0812098 0.301309 0 0.953526 0.997298 -0.000274667 -0.0734581 0.301309 0 0.953526 0.997478 -0.00186163 -0.0709555 -0.484787 0 0.874633 0.997576 -9.15555e-005 -0.0695822 -0.681997 0 -0.731355 0.499985 0 0.866034 0.499985 0 0.866034 0.281869 0 -0.959453 -0.906321 0 0.42259 -0.981629 0 -0.190802 0.522904 0 0.852391 0.866034 0 0.499985 0.866034 0 0.499985 0 0.275613 0.961269 0.965932 0 -0.258797 0 0.275613 0.961269 0.965932 0 -0.258797 1 0 0 0 1 0 -0.866034 0 0.499985 0 0.275613 0.961269 -0.866034 0 0.499985 0 0.275613 0.961269 0 1 0 0.801352 0 0.598193 -0.965932 0 0.258797 -1 0 0 0.719365 0 0.694632 -1 0 0 6.1037e-005 1 0 0.719365 0 0.694632 6.1037e-005 1 0 0.874633 0 0.484787 0 1 0 0.484787 0 -0.874633 6.1037e-005 1 0 0.9987 0 -0.0509659 0 1 0 0.990359 0 0.138524 6.1037e-005 1 0 0.999968 0 0.00805689 0 -1 0 0 -1 0 0 1 0 0 -1 0 0 1 0 0.9987 -1.35347e-006 -0.0509778 1.56418e-005 -1 -2.34426e-005 -0.874633 0 -0.484787 0 1 0 0 -1 0 0.000274667 0 1 0.484787 0 -0.874633 -0.251381 0 0.967888 0.838674 0 -0.544633 -0.874633 0 -0.484787 0 -1 0 0.838674 0 -0.544633 -0.874633 0 -0.484787 0 1 0 0.838674 0 -0.544633 0 -1 0 0.000274667 0 1 0.838674 0 -0.544633 0 1 0 0.907752 0 0.419507 -0.997859 0 0.0654012 -0.997859 0 0.0654012 -0.970296 0 -0.24192 -0.970296 0 -0.24192 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.936675 0 -0.3502 0.438368 0 -0.898796 -0.936675 0 -0.3502 0.438368 0 -0.898796 -0.776402 0 0.630238 -0.499985 0 -0.866034 -0.776402 0 0.630238 -0.499985 0 -0.866034 -0.496658 0 0.867946 -0.496658 0 0.867946 -0.996857 0 0.079226 -0.301309 0 -0.953526 -0.996857 0 0.079226 -0.301309 0 -0.953526 -0.996869 0 0.0790735 -0.996869 0 0.0790735 -0.996857 0 0.079226 -0.251381 0 0.967888 -0.996857 0 0.079226 0.000274667 0 1 -0.996869 0 0.0790735 -0.499985 0 -0.866034 -0.996869 0 0.0790735 -0.499985 0 -0.866034 -0.862285 0 -0.506424 0.438368 0 -0.898796 -0.862285 0 -0.506424 0.438368 0 -0.898796 -0.655141 0 0.755507 -0.655141 0 0.755507 -0.804636 0 -0.593768 -0.738173 0 -0.674612 0 -1 0 0.484787 0 -0.874633 -0.862285 0 -0.506424 0.484787 0 -0.874633 -0.522904 0 -0.852391 -0.522904 0 -0.852391 -0.626423 0 -0.779483 -0.626423 0 -0.779483 0 -1 0 -0.801352 0 -0.598193 -0.801352 0 -0.598193 -0.34962 0 0.936892 -0.34962 0 0.936892 0.484787 0 -0.874633 0 -1 0 0.484787 0 -0.874633 -0.344401 0 -0.938823 -0.344401 0 -0.938823 0 -1 0 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0.168615 0 -0.985682 -0.178655 0 -0.983912 0 -1 0 -0.00509659 0 -0.999987 0 0 1 0 0 1 0.0841395 -0.259743 -0.962005 0.0841395 -0.259743 -0.962005 0.329997 -0.26252 -0.906744 0.329997 -0.26252 -0.906744 0.33961 0 -0.940566 0.33961 0 -0.940566 0.31315 0 0.949704 0.31315 0 0.949704 0.620228 -0.26252 -0.739189 0.662618 0 0.748958 0.838674 0 -0.544633 0.662618 0 0.748958 0.838674 0 -0.544633 0.620228 -0.26252 -0.739189 0.827277 -0.261818 -0.497055 0.642781 0 -0.76605 0.642781 0 -0.76605 -0.374584 0 -0.927193 0.895603 -0.258797 -0.361827 0.446181 0 0.894943 0.838674 0 -0.544633 0.446181 0 0.894943 0.838674 0 -0.544633 0.827277 -0.261818 -0.497055 0.761511 0 0.648152 0.761511 0 0.648152 -0.374584 0 -0.927193 0.895603 -0.258797 -0.361827 0.838674 0 -0.544633 0.838674 0 -0.544633 0.845226 0 0.53441 0.000274667 0 1 0.954743 0 0.297433 -0.374584 0 -0.927193 0.961269 0 -0.275613 -0.374584 0 -0.927193 0.898796 0 -0.438368 0.933588 0 -0.358348 0.988621 0 0.150426 0.988621 0 0.150426 0.990269 0 -0.139164 0.990269 0 -0.139164 1.95001e-006 -1 -5.15363e-006 0 -1 0 -0.87462 4.51139e-006 -0.48481 0 -1 0 0 -1 0 -1.97104e-006 1 -7.261e-007 0.838672 3.52842e-006 -0.544636 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0 1 0 0 1 0 0 1 0 0 1 1 0 0 1 0 0 1 0 0 1 0 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.484787 0 0.874633 -0.484787 0 0.874633 0.12186 0 0.992547 0.12186 0 0.992547 0.12186 0 0.992547 0.12186 0 0.992547 0.681997 0 0.731355 0.681997 0 0.731355 0.681997 0 0.731355 0.681997 0 0.731355 0.981629 0 0.190802 0.981629 0 0.190802 0.981629 0 0.190802 0.981629 0 0.190802 0.906321 0 -0.42259 0.906321 0 -0.42259 0.906321 0 -0.42259 0.906321 0 -0.42259 0.484787 0 -0.874633 0.484787 0 -0.874633 0.484787 0 -0.874633 0.484787 0 -0.874633 -0.12186 0 -0.992547 -0.12186 0 -0.992547 -0.12186 0 -0.992547 -0.12186 0 -0.992547 -0.681997 0 -0.731355 -0.681997 0 -0.731355 -0.681997 0 -0.731355 -0.681997 0 -0.731355 -0.981629 0 -0.190802 -0.981629 0 -0.190802 -0.981629 0 -0.190802 -0.981629 0 -0.190802 -0.906321 0 0.42259 -0.906321 0 0.42259 -0.906321 0 0.42259 -0.906321 0 0.42259 -0.484787 0 0.874633 -0.484787 0 0.874633 1.34949e-006 -1 -9.70852e-007 1.34949e-006 1 9.70854e-007 -0.984813 0 -0.17362 0 1 0 -0.984813 0 0.17362 0 1 0 0 1 0 -0.866034 0 -0.499985 0 1 0 -0.866034 0 0.499985 0 1 0 0 1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 -1 0 0.642781 0 0.76605 0 1 0 0.642781 0 0.76605 0 1 0 0.642781 0 -0.76605 0 1 0 0 1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0.34199 0 0.939703 0 1 0 0.34199 0 0.939703 0 1 0 0.34199 0 -0.939703 0 1 0 0 1 0 0 -1 0 0 -1 0 -0.34199 0 0.939703 0 -1 0 -0.34199 0 -0.939703 0 -1 0 -0.34199 0 0.939703 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 -1 0 -0.642781 0 0.76605 0 -1 0 0 -1 0 -0.642781 0 0.76605 0 1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0.866034 0 -0.499985 0 -1 0 0.866034 0 0.499985 0 -1 0 0.984813 0 -0.17362 0 -1 0 0.984813 0 0.17362 0 -1 0 -0.984813 0 -0.17362 0 -1 0 -0.984813 0 0.17362 0 -1 0 -0.866034 0 -0.499985 0 -1 0 -0.866034 0 0.499985 0 -1 0 0 -1 0 0 -1 0 0.984813 0 0.17362 0.984813 0 -0.17362 0.984813 0 0.17362 0.984813 0 -0.17362 -0.642781 0 -0.76605 -0.642781 0 0.76605 -0.642781 0 -0.76605 -0.642781 0 0.76605 0.866034 0 0.499985 0.866034 0 -0.499985 0.866034 0 0.499985 0.866034 0 -0.499985 0 1 0 0 -1 0 0 -1 0 0.642781 0 -0.76605 -0.34199 0 -0.939703 0 -1 0 -0.34199 0 0.939703 0 -1 0 -0.34199 0 -0.939703 0 1 0 -0.34199 0 0.939703 0 1 0 0.34199 0 -0.939703 0 -1 0 0 0 -1 0 0 1 0 0 -1 0 -1 0 0 0 1 0 1 0 0 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 -0.34199 0 -0.939703 0 -1 0 0.34199 0 -0.939703 0 -1 0 0.34199 0 0.939703 0 1 0 0.34199 0 -0.939703 0 1 0 0.34199 0 0.939703 -0.642781 0 -0.76605 -0.642781 0 -0.76605 0 1 0 -0.866034 0 0.499985 -0.866034 0 -0.499985 -0.866034 0 0.499985 -0.866034 0 -0.499985 0.642781 0 -0.76605 0.642781 0 0.76605 0.642781 0 -0.76605 0.642781 0 0.76605 -0.984813 0 0.17362 -0.984813 0 -0.17362 -0.984813 0 0.17362 -0.984813 0 -0.17362 0 1 0 0 1 0 0.866034 0 -0.499985 0 1 0 0.866034 0 0.499985 0 1 0 0.984813 0 -0.17362 0 1 0 0.984813 0 0.17362 4.11789e-007 1 -1.38427e-007 -7.86508e-007 1 2.08165e-006 4.11791e-007 -1 1.38427e-007 -7.86508e-007 -1 -2.08165e-006 7.35529e-008 1 2.09463e-006 7.35531e-008 -1 -2.09463e-006 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 -0.996722 0 0.0809046 -0.996722 0 0.0809046 -0.996722 0 0.0809046 -0.996722 0 0.0809046 -0.000274667 0 -1 -0.000274667 0 -1 -0.000274667 0 -1 -0.000274667 0 -1 0.996717 0 0.0809656 0.996717 0 0.0809656 0.996717 0 0.0809656 0.996717 0 0.0809656 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.95257 -0.287118 -0.100864 -0.836732 -0.543382 0.0679342 0 -0.275613 -0.961269 -0.836732 -0.543382 0.0679342 0 1 0 -0.965932 0 -0.258797 0 -0.275613 -0.961269 0 1 0 0.866052 0 -0.499954 0 -0.275613 -0.961269 0 1 0 1 0 0 0 1 0 1 0 0 -0.836732 0.543382 -0.0679342 0 1 0 0 1 0 0 1 0 0.836732 -0.543382 0.0679342 0 -0.275613 -0.961269 0 -1 0 0.836732 -0.543382 0.0679342 -0.836732 0.543382 -0.0679342 0 -0.275613 -0.961269 0 1 0 0.836732 -0.543382 0.0679342 -0.258797 0 -0.965932 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.925702 -0.300607 -0.229591 -0.866034 0 -0.499985 -0.965932 0 -0.258797 0 -0.185339 -0.982675 0 0 -1 0 -1 0 0 0 1 0.965932 0 -0.258797 0.965932 0 -0.258797 -0.000244148 0 -1 0 1 0 0.958321 0.283486 -0.035432 -0.000244148 0 -1 0.958321 0.283486 -0.035432 -0.000244148 0 -1 0 1 0 0.836732 0.543382 -0.0679342 0 -1 0 0 0 1 0 -1 0 0 0 1 -0.000244148 0 -1 -0.836732 0.543382 -0.0679342 0 1 0 0 0 1 0 0 -1 0 -0.185339 -0.982675 -0.836732 0.543382 -0.0679342 -0.000244148 0 -1 0.836722 -0.543397 0.0679355 -0.836722 -0.543397 0.0679398 -4.52844e-008 1 -4.09305e-008 -4.97948e-007 -0.275638 -0.961262 -0.965866 0 -0.259041 0 -1 0 0.00021363 -0.275643 -0.96126 0 1 0 0.00021363 -0.275643 -0.96126 -0.996739 0 0.0806909 -0.00021363 0 1 0 -1 0 -0.996739 0 0.0806909 -0.00021363 0 1 0 1 0 -0.00021363 0 1 0 -1 0 0.996702 0 0.0811487 -0.00021363 0 1 0 1 0 0.996702 0 0.0811487 0 -1 0 0.00021363 -0.275613 -0.961269 0.996702 0 0.0811487 0 1 0 0.00021363 -0.275613 -0.961269 0.996702 0 0.0811487 -0.996739 0 0.0806909 -0.258583 0 -0.965989 0 -1 0 -0.996739 0 0.0806909 -0.258583 0 -0.965989 0 1 0 0.866158 0 -0.499771 0 -1 0 0 0 -1 1 0 0.00021363 0 0 -1 0 1 0 1 0 0.00021363 -0.996697 0 -0.0812098 0 -1 0 0 0 -1 -0.996697 0 -0.0812098 0 0 -1 0 1 0 -0.499771 0 -0.866158 -0.499771 0 -0.866158 -0.865911 0 -0.500198 -0.865911 0 -0.500198 -0.965989 0 0.258583 -1 0 -0.00021363 -1 0 -0.00021363 0.866158 0 -0.499771 0.965989 0 -0.258583 0.965989 0 -0.258583 -0.996697 0 -0.0812098 0.00021363 -0.275613 -0.961269 -0.996697 0 -0.0812098 0.00021363 -0.275613 -0.961269 0 1 0 -7.36454e-007 -1 3.31419e-008 0.000229157 -0.275663 -0.961254 -0.984764 0 -0.173894 0 -0.998171 0.0604572 0 -1 0 0 -0.998693 0.0511185 0 1 0 0 -0.998171 0.0604572 0 -0.930118 0.36726 0 1 0 -0.34199 0 0.939703 0 1 0 0 0 -1 0 1 0 0 1 0 0 -0.998171 0.0604572 0 -0.930118 0.36726 0 1 0 0 1 0 0 -0.998693 0.0511185 0 1 0 -0.991457 0 0.130436 -0.991457 0 0.130436 -0.999043 0 -0.043733 -0.991417 0 -0.130741 -0.994037 0 -0.109043 0.996197 0 -0.0871303 0.996197 0 -0.0871303 -0.953719 0 0.300699 0.980788 0 -0.195074 0.980788 0 -0.195074 0.991445 0 -0.130528 0.991445 0 -0.130528 0.999049 0 0.0436109 0.980788 0 0.195074 0.980788 0 0.195074 -0.876736 0 0.480972 -0.876736 0 0.480972 0.876736 0 -0.480972 0.876736 0 -0.480972 0.953719 0 -0.300699 0 -0.994773 0.102115 0 0 -1 0 0 -1 0.965891 0 0.25895 0.97302 0 0.23072 0 -0.998693 0.0511185 0.876736 0 -0.480972 0.876736 0 -0.480972 -0.76605 0 0.642781 -0.642781 0 0.76605 -0.642781 0 0.76605 0 -0.994773 0.102115 0 0 -1 0 0 -1 0.642781 0 -0.76605 0.642781 0 -0.76605 0.76605 0 -0.642781 0.642781 0 -0.76605 0.642781 0 -0.76605 -0.34199 0 0.939703 0.342021 0 -0.939692 0.342021 0 -0.939692 0.34199 0 -0.939703 0.34199 0 -0.939703 0 0 -1 0 0 1 0 0 -1 0 0 -1 0 0 1 -0.342021 0 -0.939692 -0.342021 0 -0.939692 -0.342021 0 -0.939692 -0.342021 0 -0.939692 0.34199 0 0.939703 0.34199 0 0.939703 -0.642781 0 -0.76605 -0.642781 0 -0.76605 -0.76605 0 -0.642781 -0.642781 0 -0.76605 -0.642781 0 -0.76605 0 0 -1 0 -0.994773 0.102115 0 0 -1 0.642781 0 0.76605 0.642781 0 0.76605 0.76605 0 0.642781 -0.876736 0 -0.480972 -0.876736 0 -0.480972 0 -0.998693 0.0511185 -0.97302 0 0.23072 -0.965891 0 0.25895 0 0 -1 0 -0.994773 0.102115 0 0 -1 -0.953719 0 -0.300699 -0.876736 0 -0.480972 -0.876736 0 -0.480972 0.876736 0 0.480972 0.876736 0 0.480972 -0.980788 0 0.195074 -0.980788 0 0.195074 -0.999049 0 0.0436109 -0.991449 0 -0.130497 -0.991449 0 -0.130497 -0.980788 0 -0.195074 -0.980788 0 -0.195074 0.953719 0 0.300699 0 -0.998693 0.0511185 -0.996197 0 -0.0871303 -0.996197 0 -0.0871303 0.994037 0 -0.109043 0.991412 0 -0.130772 0.999043 0 -0.043733 0.991457 0 0.130436 0.991457 0 0.130436 -0.984762 -6.54726e-006 -0.173906 0.98476 -1.13783e-005 0.173917 -0.973017 -8.92166e-006 0.230733 0.98476 1.088e-005 -0.173918 1.34962e-006 1 -1.5568e-005 1.4048e-005 1 -1.06865e-005 -1.19427e-005 -0.930111 0.367279 -1.39923e-005 -0.977327 0.211738 -1.42785e-005 -0.977327 0.211737 -1.38461e-005 -0.998169 0.0604802 -1.36424e-005 -0.998169 0.0604811 -8.86043e-006 -0.998692 0.0511222 -7.72303e-006 -1 -1.15183e-005 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.980788 0 0.195074 -0.980788 0 0.195074 -0.876736 0 0.480972 -0.876736 0 0.480972 -0.876736 0 0.480972 -0.876736 0 0.480972 -0.642781 0 0.76605 -0.642781 0 0.76605 -0.642781 0 0.76605 -0.642781 0 0.76605 -0.34199 0 0.939703 -0.34199 0 0.939703 -0.34199 0 0.939703 -0.34199 0 0.939703 0 0 1 0 0 1 0 0 1 0 0 1 0.34199 0 0.939703 0.34199 0 0.939703 0.34199 0 0.939703 0.34199 0 0.939703 0.642781 0 0.76605 0.642781 0 0.76605 0.642781 0 0.76605 0.642781 0 0.76605 0.876736 0 0.480972 0.876736 0 0.480972 0.876736 0 0.480972 0.876736 0 0.480972 0.980788 0 0.195074 0.980788 0 0.195074 0.980788 0 0.195074 0.980788 0 0.195074 0.999043 0 -0.043733 0.999043 0 -0.043733 0.999043 0 -0.043733 0.999043 0 -0.043733 0.984764 0 -0.173894 0.984764 0 -0.173894 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.984764 0 -0.173894 -0.984764 0 -0.173894 -0.999043 0 -0.043733 -0.999043 0 -0.043733 -0.999043 0 -0.043733 -0.999043 0 -0.043733 -0.980788 0 0.195074 -0.980788 0 0.195074 0.835105 0.542314 0.0921659 0.835105 0.542314 0.0921659 0.835105 0.542314 0.0921659 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.847262 0.531175 0 -0.847262 0.531175 0 -0.847262 0.531175 0 -0.847262 0.531175 0 0.994763 -0.102206 0 0.994763 -0.102206 0 0.994763 -0.102206 0 0.994763 -0.102206 -0.835105 -0.542314 -0.0921659 -0.835105 -0.542314 -0.0921659 -0.835105 -0.542314 -0.0921659 -0.835105 0.542314 0.0921659 -0.835105 0.542314 0.0921659 -0.835105 0.542314 0.0921659 0 0.994763 -0.102206 0 0.994763 -0.102206 0 0.994763 -0.102206 0 0.994763 -0.102206 0 -0.847262 0.531175 0 -0.847262 0.531175 0 -0.847262 0.531175 0 -0.847262 0.531175 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0.835105 -0.542314 -0.0921659 0.835105 -0.542314 -0.0921659 0.835105 -0.542314 -0.0921659 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0.587756 -0.809038 0 0.587756 -0.809038 0 0.587756 -0.809038 0 0.587756 -0.809038 0 0.951062 -0.309 0 0.951062 -0.309 0 0.951062 -0.309 0 0.951062 -0.309 0 0.951062 0.309 0 0.951062 0.309 0 0.951062 0.309 0 0.951062 0.309 0 0.587756 0.809038 0 0.587756 0.809038 0 0.587756 0.809038 0 0.587756 0.809038 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.587786 0.809016 0 -0.587786 0.809016 0 -0.587786 0.809016 0 -0.587786 0.809016 0 -0.951062 0.309 0 -0.951062 0.309 0 -0.951062 0.309 0 -0.951062 0.309 0 -0.951062 -0.309 0 -0.951062 -0.309 0 -0.951062 -0.309 0 -0.951062 -0.309 0 -0.587756 -0.809038 0 -0.587756 -0.809038 0 -0.587756 -0.809038 0 -0.587756 -0.809038 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 - - - - - - - - - - - - - - -

0 0 1 1 2 2 3 3

-

4 4 5 5 6 6 7 7

-

8 8 9 9 10 10 11 11

-

12 12 13 13 14 14 15 15

-

16 16 17 17 18 18 19 19

-

20 20 21 21 22 22 23 23

-
- - - -

24 24 25 24 26 24 27 24 28 24

-
- - - -

29 25 30 25 31 25 32 25

-
- - - -

33 26 34 26 35 26 36 26 37 26

-

38 26 39 26 40 26 41 26 42 26

-

43 26 44 26 45 26 46 26

-
- - - -

47 27 48 27 49 27 50 27

-
- - - -

51 28 52 28 53 28 54 28

-

55 28 56 28 57 28 58 28 59 28 60 28

-

61 28 62 28 63 28 64 28

-
- - - -

116 179 119 179 121 179

-
- - - -

190 179 133 179 130 179 128 179

-

146 179 153 179 157 179 154 179 147 179

-

149 179 201 179 199 179 147 179 154 179

-

147 179 199 179 196 179 146 179

-

146 179 196 179 190 179 127 179

-

129 179 123 179 122 179 128 179

-

128 179 122 179 121 179 119 179 127 179 190 179

-
- - - -

168 180 100 180 112 180 94 180 101 180 102 180 162 180 77 180 160 180

-
- - - -

99 180 118 180 152 180 153 180 116 180 112 180 100 180

-

168 180 164 180 76 180 215 180 81 180 99 180 100 180

-

77 180 76 180 164 180 160 180

-

78 180 166 180 94 180 102 180

-

78 180 77 180 162 180 166 180

-
- - - -

183 181 137 181 182 181 73 181 72 181 71 181 87 181 90 181 89 181 163 181 161 181 74 181

-
- - - -

90 181 114 181 136 181 135 181 181 181 88 181

-

137 181 136 181 114 181 182 181

-

138 181 137 181 183 181 178 181

-

138 181 178 181 169 181 91 181

-

75 181 91 181 169 181 167 181

-

75 181 167 181 163 181 74 181 68 181 67 181 70 181

-

73 181 165 181 87 181 89 181 88 181 84 181 72 181

-

161 181 165 181 73 181 71 181 68 181 74 181

-
- - - -

85 182 103 182 98 182

-
- - - -

106 182 69 182 85 182 98 182

-
- - - -

92 183 110 183 175 183

-
- - - -

70 183 92 183 175 183 126 183 192 183 138 183

-
- - - -

210 184 214 184 157 184 208 184 212 184 210 184

-
- - - -

210 184 157 184 152 184 208 184

-
- - - -

191 185 188 185 194 185

-
- - - -

184 185 173 185 171 185 180 185

-

140 185 184 185 180 185 186 185

-

194 185 145 185 143 185 140 185 186 185 191 185

-
- - - -

173 137 177 141 106 70

-
- - - -

142 106 203 167 205 169 213 177 209 173

-

156 120 214 178 206 170 149 113

-

204 168 201 165 149 113 206 170

-

199 163 200 164 202 166 144 108

-

144 108 193 157 195 159 199 163

-

189 153 196 160 194 158 187 151

-

133 97 190 154 188 152 191 155

-

185 149 133 97 191 155 186 150

-

179 143 185 149 186 150 180 144

-

97 61 179 143 180 144 170 134

-

106 70 98 62 171 135 173 137

-

134 98 192 156 197 161 211 175 207 171

-

140 104 210 174 212 176 198 162

-

184 148 140 104 198 162 126 90

-

172 136 184 148 126 90 174 138

-

118 82 181 145 208 172 151 115

-

81 45 84 48 181 145 118 82

-

158 122 65 29 82 46 79 43

-

107 71 66 30 159 123 104 68 176 140

-

110 74 177 141 173 137 175 139

-
- - - -

173 137 177 141 106 70

-
- - - -

142 106 203 167 205 169 213 177 209 173

-

156 120 214 178 206 170 149 113

-

204 168 201 165 149 113 206 170

-

199 163 200 164 202 166 144 108

-

144 108 193 157 195 159 199 163

-

189 153 196 160 194 158 187 151

-

133 97 190 154 188 152 191 155

-

185 149 133 97 191 155 186 150

-

179 143 185 149 186 150 180 144

-

97 61 179 143 180 144 170 134

-

106 70 98 62 171 135 173 137

-

134 98 192 156 197 161 211 175 207 171

-

140 104 210 174 212 176 198 162

-

184 148 140 104 198 162 126 90

-

172 136 184 148 126 90 174 138

-

118 82 181 145 208 172 151 115

-

81 45 84 48 181 145 118 82

-

158 122 65 29 82 46 79 43

-

107 71 66 30 159 123 104 68 176 140

-

110 74 177 141 173 137 175 139

-

93 57 166 130 167 131 169 133

-

115 79 93 57 169 133 178 142

-

124 88 115 79 178 142 183 147

-

120 84 124 88 183 147 182 146

-

111 75 120 84 182 146 113 77

-

168 132 111 75 113 77 87 51

-

164 128 168 132 87 51 165 129

-

160 124 164 128 165 129 161 125

-

162 126 160 124 161 125 163 127

-

166 130 162 126 163 127 167 131

-
- - - -

259 311 253 311 276 311

-
- - - -

333 311 339 311 337 311 317 311

-

313 311 317 311 301 311 307 311

-

291 311 299 311 301 311 281 311

-

276 311 281 311 301 311 317 311 337 311 331 311 259 311

-
- - - -

237 312 241 312 267 312 267 312 275 312 285 312

-
- - - -

257 312 248 312 239 312 251 312

-

239 312 235 312 237 312 267 312 285 312 282 312 277 312 251 312

-
- - - -

228 313 225 313 292 313 285 313 292 313 291 313

-
- - - -

291 313 281 313 282 313 285 313

-

285 313 287 313 228 313 292 313

-
- - - -

300 314 292 314 225 314

-
- - - -

328 314 335 314 326 314 322 314

-

315 314 328 314 322 314 312 314

-

303 314 315 314 312 314 302 314

-

225 314 303 314 302 314 300 314

-
- - - -

268 315 245 315 263 315

-
- - - -

319 315 305 315 297 315 309 315

-

323 315 309 315 297 315 283 315 268 315 263 315 220 315 329 315

-
- - - -

261 316 247 316 269 316

-
- - - -

321 316 311 316 298 316 306 316

-

238 316 249 316 222 316 265 316 243 316 236 316 234 316

-

324 316 233 316 338 316 340 316 336 316 327 316 314 316 304 316 296 316 288 316 278 316 270 316 265 316 222 316 261 316 269 316 284 316 298 316 311 316

-
- - - -

328 298 327 297 336 306 335 305

-

293 263 296 266 304 274 303 273

-

303 273 304 274 314 284 315 285

-

315 285 314 284 327 297 328 298

-
- - - -

328 298 327 297 336 306 335 305

-

293 263 296 266 304 274 303 273

-

303 273 304 274 314 284 315 285

-

315 285 314 284 327 297 328 298

-

285 255 275 245 273 243 287 257

-

286 256 272 242 280 250 290 260 295 265

-

271 241 270 240 278 248 279 249

-

279 249 278 248 288 258 289 259

-

289 259 288 258 296 266 294 264

-
- - - -

328 298 327 297 336 306 335 305

-

293 263 296 266 304 274 303 273

-

303 273 304 274 314 284 315 285

-

315 285 314 284 327 297 328 298

-

285 255 275 245 273 243 287 257

-

286 256 272 242 280 250 290 260 295 265

-

271 241 270 240 278 248 279 249

-

279 249 278 248 288 258 289 259

-

289 259 288 258 296 266 294 264

-

257 227 221 191 249 219 248 218

-

248 218 249 219 238 208 239 209

-

239 209 238 208 234 204 235 205

-

235 205 234 204 236 206 237 207

-

237 207 236 206 242 212 240 210

-

241 211 243 213 265 235 267 237

-

266 236 264 234 270 240 274 244

-
- - - -

328 317 327 317 336 317 335 317

-

225 317 296 317 304 317 303 317

-

303 317 304 317 314 317 315 317

-

315 317 314 317 327 317 328 317

-

285 317 275 317 273 317 287 317

-

287 317 273 317 280 317 290 317 228 317

-

273 317 270 317 278 317 280 317

-

280 317 278 317 288 317 290 317

-

290 317 288 317 296 317 228 317

-

257 317 222 317 249 317 248 317

-

248 317 249 317 238 317 239 317

-

239 317 238 317 234 317 235 317

-

235 317 234 317 236 317 237 317

-

237 317 236 317 243 317 241 317

-

241 317 243 317 265 317 267 317

-

267 317 265 317 270 317 275 317

-

331 317 329 317 220 317 259 317

-
- - - -

328 298 327 297 336 306 335 305

-

293 263 296 266 304 274 303 273

-

303 273 304 274 314 284 315 285

-

315 285 314 284 327 297 328 298

-

285 255 275 245 273 243 287 257

-

286 256 272 242 280 250 290 260 295 265

-

271 241 270 240 278 248 279 249

-

279 249 278 248 288 258 289 259

-

289 259 288 258 296 266 294 264

-

257 227 221 191 249 219 248 218

-

248 218 249 219 238 208 239 209

-

239 209 238 208 234 204 235 205

-

235 205 234 204 236 206 237 207

-

237 207 236 206 242 212 240 210

-

241 211 243 213 265 235 267 237

-

266 236 264 234 270 240 274 244

-

330 300 230 200 219 189 259 229

-

333 303 336 306 340 310 339 309

-

339 309 340 310 338 308 337 307

-

337 307 338 308 233 203 331 301

-
- - - -

328 298 327 297 336 306 335 305

-

293 263 296 266 304 274 303 273

-

303 273 304 274 314 284 315 285

-

315 285 314 284 327 297 328 298

-

285 255 275 245 273 243 287 257

-

286 256 272 242 280 250 290 260 295 265

-

271 241 270 240 278 248 279 249

-

279 249 278 248 288 258 289 259

-

289 259 288 258 296 266 294 264

-

257 227 221 191 249 219 248 218

-

248 218 249 219 238 208 239 209

-

239 209 238 208 234 204 235 205

-

235 205 234 204 236 206 237 207

-

237 207 236 206 242 212 240 210

-

241 211 243 213 265 235 267 237

-

266 236 264 234 270 240 274 244

-

330 300 230 200 219 189 259 229

-

333 303 336 306 340 310 339 309

-

339 309 340 310 338 308 337 307

-

337 307 338 308 233 203 331 301

-

252 222 258 228 256 226 250 220

-

276 246 253 223 251 221 277 247

-

281 251 276 246 277 247 282 252

-
- - - -

328 298 327 297 336 306 335 305

-

293 263 296 266 304 274 303 273

-

303 273 304 274 314 284 315 285

-

315 285 314 284 327 297 328 298

-

285 255 275 245 273 243 287 257

-

286 256 272 242 280 250 290 260 295 265

-

271 241 270 240 278 248 279 249

-

279 249 278 248 288 258 289 259

-

289 259 288 258 296 266 294 264

-

257 227 221 191 249 219 248 218

-

248 218 249 219 238 208 239 209

-

239 209 238 208 234 204 235 205

-

235 205 234 204 236 206 237 207

-

237 207 236 206 242 212 240 210

-

241 211 243 213 265 235 267 237

-

266 236 264 234 270 240 274 244

-

330 300 230 200 219 189 259 229

-

333 303 336 306 340 310 339 309

-

339 309 340 310 338 308 337 307

-

337 307 338 308 233 203 331 301

-

252 222 258 228 256 226 250 220

-

276 246 253 223 251 221 277 247

-

281 251 276 246 277 247 282 252

-

291 261 292 262 300 270 299 269

-

299 269 300 270 302 272 301 271

-

301 271 302 272 312 282 307 277

-

307 277 312 282 322 292 313 283

-

313 283 322 292 326 296 317 287

-

316 286 325 295 334 304 332 302

-
- - - -

328 298 327 297 336 306 335 305

-

293 263 296 266 304 274 303 273

-

303 273 304 274 314 284 315 285

-

315 285 314 284 327 297 328 298

-

285 255 275 245 273 243 287 257

-

286 256 272 242 280 250 290 260 295 265

-

271 241 270 240 278 248 279 249

-

279 249 278 248 288 258 289 259

-

289 259 288 258 296 266 294 264

-

257 227 221 191 249 219 248 218

-

248 218 249 219 238 208 239 209

-

239 209 238 208 234 204 235 205

-

235 205 234 204 236 206 237 207

-

237 207 236 206 242 212 240 210

-

241 211 243 213 265 235 267 237

-

266 236 264 234 270 240 274 244

-

330 300 230 200 219 189 259 229

-

333 303 336 306 340 310 339 309

-

339 309 340 310 338 308 337 307

-

337 307 338 308 233 203 331 301

-

252 222 258 228 256 226 250 220

-

276 246 253 223 251 221 277 247

-

281 251 276 246 277 247 282 252

-

291 261 292 262 300 270 299 269

-

299 269 300 270 302 272 301 271

-

301 271 302 272 312 282 307 277

-

307 277 312 282 322 292 313 283

-

313 283 322 292 326 296 317 287

-

316 286 325 295 334 304 332 302

-

262 232 260 230 255 225 254 224

-

329 299 233 203 324 294 323 293

-

323 293 324 294 310 280 308 278

-

309 279 311 281 321 291 319 289

-

318 288 320 290 306 276 305 275

-

305 275 306 276 298 268 297 267

-

297 267 298 268 284 254 283 253

-

283 253 284 254 269 239 268 238

-

268 238 269 239 246 216 244 214

-

245 215 247 217 261 231 263 233

-
- - - -

341 318 342 319 343 320 344 321

-

345 322 346 323 347 324 348 325

-

349 326 350 327 351 328 352 329

-

353 330 354 331 355 332 356 333

-

357 334 358 335 359 336 360 337

-

361 338 362 339 363 340 364 341

-
- - - -

365 342 366 343 367 344 368 345 369 346 370 347 371 348 372 349 373 350 374 351

-

375 352 376 353 377 354 378 355 379 356 380 357 381 358 382 359 383 360 384 361

-

385 362 386 363 387 364 388 365

-

389 366 390 367 391 368 392 369

-

393 370 394 371 395 372 396 373

-

397 374 398 375 399 376 400 377

-

401 378 402 379 403 380 404 381

-

405 382 406 383 407 384 408 385

-

409 386 410 387 411 388 412 389

-

413 390 414 391 415 392 416 393

-

417 394 418 395 419 396 420 397

-

421 398 422 399 423 400 424 401

-
- - - -

425 402 426 402 427 402 428 402

-
- - - -

429 403 430 403 431 403 432 403

-
- - - -

551 589 550 589 447 589 453 589 469 589 467 589 467 589 559 589 453 589 465 589 472 589 452 589 465 589 452 589 558 589

-
- - - -

441 589 442 589 453 589 559 589 551 589 447 589 437 589 436 589

-

434 589 437 589 447 589 550 589 558 589 452 589 446 589 439 589

-
- - - -

510 590 500 590 506 590 600 590 595 590 511 590 608 590 519 590 607 590 599 590 510 590 506 590

-
- - - -

474 590 482 590 469 590 442 590 555 590 560 590

-

582 590 482 590 474 590 484 590

-

484 590 494 590 585 590 582 590

-

595 590 585 590 494 590 513 590 511 590

-

519 590 608 590 600 590 511 590 521 590

-

607 590 519 590 518 590 510 590 599 590

-
- - - -

606 591 605 591 522 591 516 591 501 591 504 591 504 591 598 591 516 591 503 591 498 591 515 591 503 591 515 591 597 591

-
- - - -

532 591 528 591 516 591 598 591 606 591 522 591 537 591 536 591

-

534 591 537 591 522 591 605 591 597 591 515 591 524 591 530 591

-
- - - -

455 592 471 592 463 592 557 592 563 592 456 592 549 592 449 592 548 592 556 592 455 592 463 592

-
- - - -

496 592 490 592 501 592 528 592 602 592 514 592

-

576 592 490 592 496 592 486 592

-

486 592 476 592 572 592 576 592

-

563 592 572 592 476 592 458 592 456 592

-

449 592 549 592 557 592 456 592 451 592

-

548 592 449 592 547 592 455 592 556 592

-
- - - -

472 593 480 593 473 593 461 593 554 593 446 593

-

526 593 603 593 509 593 493 593 492 593 500 593

-

493 593 483 593 581 593 492 593

-

581 593 483 593 473 593 480 593

-
- - - -

498 594 488 594 495 594 508 594 601 594 524 594

-

444 594 552 594 459 594 475 594 478 594 471 594

-

475 594 485 594 575 594 478 594

-

575 594 485 594 495 594 488 594

-
- - - -

543 514 444 415 547 518 451 422 546 517 545 516 541 512 539 510

-

569 540 461 432 509 480 590 561 579 550

-

586 557 507 478 562 533 565 536 573 544

-

610 581 526 497 518 489 521 492 609 580 612 583 616 587 614 585

-

560 531 571 542 583 554 592 563 596 567 513 484

-

514 485 588 559 577 548 567 538 561 532 458 429

-

584 555 578 549 589 560 593 564

-

593 564 589 560 602 573 604 575

-

604 575 602 573 532 503 613 584

-

613 584 532 503 536 507 617 588

-

617 588 536 507 534 505 615 586

-

615 586 534 505 530 501 611 582

-

611 582 530 501 601 572 603 574

-

603 574 601 572 587 558 591 562

-

591 562 587 558 574 545 580 551

-

580 551 574 545 564 535 568 539

-

568 539 564 535 552 523 554 525

-

554 525 552 523 542 513 438 409

-

438 409 542 513 538 509 433 404

-

433 404 538 509 540 511 435 406

-

435 406 540 511 544 515 440 411

-

440 411 544 515 553 524 555 526

-

555 526 553 524 566 537 570 541

-

570 541 566 537 578 549 584 555

-
- - - -

543 514 444 415 547 518 451 422 546 517 545 516 541 512 539 510

-

569 540 461 432 509 480 590 561 579 550

-

586 557 507 478 562 533 565 536 573 544

-

610 581 526 497 518 489 521 492 609 580 612 583 616 587 614 585

-

560 531 571 542 583 554 592 563 596 567 513 484

-

514 485 588 559 577 548 567 538 561 532 458 429

-

584 555 578 549 589 560 593 564

-

593 564 589 560 602 573 604 575

-

604 575 602 573 532 503 613 584

-

613 584 532 503 536 507 617 588

-

617 588 536 507 534 505 615 586

-

615 586 534 505 530 501 611 582

-

611 582 530 501 601 572 603 574

-

603 574 601 572 587 558 591 562

-

591 562 587 558 574 545 580 551

-

580 551 574 545 564 535 568 539

-

568 539 564 535 552 523 554 525

-

554 525 552 523 542 513 438 409

-

438 409 542 513 538 509 433 404

-

433 404 538 509 540 511 435 406

-

435 406 540 511 544 515 440 411

-

440 411 544 515 553 524 555 526

-

555 526 553 524 566 537 570 541

-

570 541 566 537 578 549 584 555

-

482 453 572 543 563 534 467 438

-

467 438 563 534 557 528 559 530

-

559 530 557 528 549 520 551 522

-

551 522 549 520 548 519 550 521

-

550 521 548 519 556 527 558 529

-

558 529 556 527 463 434 465 436

-

465 436 463 434 478 449 480 451

-

480 451 478 449 575 546 581 552

-

581 552 575 546 487 458 491 462

-

491 462 487 458 502 473 505 476

-

505 476 502 473 597 568 599 570

-

599 570 597 568 605 576 607 578

-

607 578 605 576 606 577 608 579

-

608 579 606 577 598 569 600 571

-

600 571 598 569 594 565 595 566

-

595 566 594 565 489 460 585 556

-

585 556 489 460 576 547 582 553

-

582 553 576 547 572 543 482 453

-
- - - -

618 595 619 596 620 597 621 598

-

622 599 623 600 624 601 625 602

-

626 603 627 604 628 605 629 606

-

630 607 631 608 632 609 633 610

-

634 611 635 612 636 613 637 614

-

638 615 639 616 640 617 641 618

-
- - - -

698 678 701 678 660 678

-
- - - -

660 678 692 678 663 678 698 678

-
- - - -

678 679 668 679 669 679 673 679 644 679 675 679

-
- - - -

690 679 678 679 669 679 673 679 675 679 677 679

-
- - - -

650 680 674 680 671 680

-
- - - -

667 680 700 680 660 680 701 680

-

678 680 660 680 700 680 655 680

-

670 680 668 680 678 680 655 680

-

671 680 670 680 655 680 679 680 650 680

-
- - - -

695 681 667 681 701 681 698 681

-

675 681 644 681 674 681 650 681 680 681 653 681

-

698 681 675 681 653 681 695 681

-
- - - -

670 647 669 646 668 645

-
- - - -

674 651 642 619 672 649 671 648

-

671 648 673 650 669 646 670 647

-
- - - -

670 647 669 646 668 645 685 662 688 665 683 660 679 656 680 657 650 627

-
- - - -

674 651 642 619 672 649 671 648

-

671 648 673 650 669 646 670 647

-

699 676 664 641 694 671 656 633

-

658 635 695 672 652 629 682 659 687 664

-

693 670 686 663 684 661 681 658 700 677

-

655 632 685 662 683 660 653 630 680 657 679 656

-
- - - -

670 647 669 646 668 645 685 662 688 665 683 660 679 656 680 657 650 627

-
- - - -

674 651 642 619 672 649 671 648

-

671 648 673 650 669 646 670 647

-

699 676 664 641 694 671 656 633

-

658 635 695 672 652 629 682 659 687 664

-

693 670 686 663 684 661 681 658 700 677

-

655 632 685 662 683 660 653 630 680 657 679 656

-

698 675 697 674 676 653 675 652

-

677 654 662 639 691 668 689 666

-

678 655 690 667 692 669 696 673

-
- - - -

731 738 748 738 750 738

-
- - - -

757 738 743 738 718 738 724 738

-

712 738 718 738 743 738 737 738

-

745 738 730 738 712 738 737 738

-

747 738 745 738 737 738 753 738

-

753 738 731 738 750 738 747 738

-
- - - -

746 739 704 739 751 739

-
- - - -

755 739 721 739 715 739 740 739

-

715 739 709 739 734 739 740 739

-

744 739 734 739 709 739 727 739

-

734 739 744 739 746 739 751 739 752 739

-
- - - -

751 740 704 740 749 740

-
- - - -

749 740 748 740 731 740 751 740

-
- - - -

748 728 749 729 750 730

-
- - - -

731 711 753 733 752 732 751 731

-

737 717 734 714 752 732 753 733

-

742 722 740 720 733 713 735 715

-

756 736 754 734 738 718 741 721

-

723 703 720 700 755 735 757 737

-

724 704 718 698 715 695 721 701

-

711 691 708 688 713 693 716 696

-

728 708 725 705 707 687 710 690

-

745 725 744 724 726 706 729 709

-

747 727 746 726 744 724 745 725

-

750 730 749 729 702 682 746 726 747 727

-
- - - -

780 855 783 855 782 855

-
- - - -

782 855 799 855 798 855 762 855

-

759 855 780 855 782 855 762 855

-
- - - -

801 856 800 856 802 856

-
- - - -

802 856 809 856 810 856 801 856

-
- - - -

845 857 847 857 846 857

-
- - - -

846 857 837 857 839 857 845 857

-
- - - -

864 858 865 858 868 858

-
- - - -

865 858 866 858 867 858 868 858

-

864 858 850 858 848 858 865 858

-
- - - -

786 859 783 859 780 859 777 859

-

870 859 867 859 866 859 862 859

-

854 859 870 859 862 859 853 859

-

840 859 854 859 853 859 836 859

-

830 859 840 859 836 859 829 859

-

822 859 830 859 829 859 770 859

-

767 859 822 859 770 859 818 859

-

806 859 767 859 818 859 812 859

-

792 859 806 859 812 859 795 859

-

777 859 792 859 795 859 786 859

-
- - - -

790 860 801 860 810 860 799 860 782 860

-

865 860 848 860 837 860 846 860 856 860

-

861 860 865 860 856 860 859 860

-

852 860 861 860 859 860 843 860

-

835 860 852 860 843 860 832 860

-

828 860 835 860 832 860 826 860

-

821 860 828 860 826 860 823 860

-

817 860 821 860 823 860 819 860

-

811 860 817 860 819 860 814 860

-

794 860 811 860 814 860 803 860

-

785 860 794 860 803 860 787 860

-

782 860 785 860 787 860 790 860

-
- - - -

833 861 834 861 842 861 841 861

-

807 861 805 861 813 861 815 861

-

816 861 807 861 815 861 820 861

-

825 861 816 861 820 861 824 861

-

831 861 825 861 824 861 827 861

-

841 861 831 861 827 861 833 861

-
- - - -

804 862 813 862 805 862 765 862

-

765 862 784 862 796 862 804 862

-
- - - -

844 863 851 863 863 863 855 863

-

855 863 842 863 834 863 844 863

-
- - - -

788 864 796 864 784 864 778 864

-

778 864 779 864 789 864 788 864

-
- - - -

860 865 858 865 869 865 871 865

-

871 865 863 865 851 865 860 865

-
- - - -

864 866 868 866 857 866 847 866 845 866

-

868 866 869 866 858 866 857 866

-
- - - -

791 867 760 867 762 867 802 867 800 867

-

789 867 779 867 759 867 760 867 791 867

-
- - - -

779 762 778 761 777 760 780 763 781 764

-

784 767 793 776 792 775 777 760 778 761

-

805 788 807 790 806 789 792 775 793 776

-

869 852 868 851 867 850 870 853 871 854

-

863 846 871 854 870 853 854 837 855 838

-

842 825 855 838 854 837 840 823 841 824

-

841 824 840 823 830 813 831 814

-

831 814 830 813 822 805 825 808

-

825 808 822 805 766 749 816 799

-

816 799 766 749 806 789 807 790

-
- - - -

779 762 778 761 777 760 780 763 781 764

-

784 767 793 776 792 775 777 760 778 761

-

805 788 807 790 806 789 792 775 793 776

-

869 852 868 851 867 850 870 853 871 854

-

863 846 871 854 870 853 854 837 855 838

-

842 825 855 838 854 837 840 823 841 824

-

841 824 840 823 830 813 831 814

-

831 814 830 813 822 805 825 808

-

825 808 822 805 766 749 816 799

-

816 799 766 749 806 789 807 790

-

800 783 801 784 790 773 791 774

-

789 772 791 774 790 773 787 770 788 771

-

796 779 788 771 787 770 803 786 804 787

-

813 796 804 787 803 786 814 797 815 798

-

815 798 814 797 819 802 820 803

-

820 803 819 802 823 806 824 807

-

824 807 823 806 826 809 827 810

-

827 810 826 809 832 815 833 816

-

834 817 833 816 832 815 843 826 844 827

-

851 834 844 827 843 826 859 842 860 843

-

858 841 860 843 859 842 856 839 857 840

-

857 840 856 839 846 829 847 830

-
- - - -

779 762 778 761 777 760 780 763 781 764

-

784 767 793 776 792 775 777 760 778 761

-

805 788 807 790 806 789 792 775 793 776

-

869 852 868 851 867 850 870 853 871 854

-

863 846 871 854 870 853 854 837 855 838

-

842 825 855 838 854 837 840 823 841 824

-

841 824 840 823 830 813 831 814

-

831 814 830 813 822 805 825 808

-

825 808 822 805 766 749 816 799

-

816 799 766 749 806 789 807 790

-

800 783 801 784 790 773 791 774

-

789 772 791 774 790 773 787 770 788 771

-

796 779 788 771 787 770 803 786 804 787

-

813 796 804 787 803 786 814 797 815 798

-

815 798 814 797 819 802 820 803

-

820 803 819 802 823 806 824 807

-

824 807 823 806 826 809 827 810

-

827 810 826 809 832 815 833 816

-

834 817 833 816 832 815 843 826 844 827

-

851 834 844 827 843 826 859 842 860 843

-

858 841 860 843 859 842 856 839 857 840

-

857 840 856 839 846 829 847 830

-

785 768 782 765 783 766 786 769

-

794 777 785 768 786 769 795 778

-

811 794 794 777 795 778 812 795

-

817 800 811 794 812 795 818 801

-

821 804 817 800 818 801 768 751

-

828 811 821 804 768 751 829 812

-

835 818 828 811 829 812 836 819

-

852 835 835 818 836 819 853 836

-

861 844 852 835 853 836 862 845

-

865 848 861 844 862 845 866 849

-
- - - -

779 762 778 761 777 760 780 763 781 764

-

784 767 793 776 792 775 777 760 778 761

-

805 788 807 790 806 789 792 775 793 776

-

869 852 868 851 867 850 870 853 871 854

-

863 846 871 854 870 853 854 837 855 838

-

842 825 855 838 854 837 840 823 841 824

-

841 824 840 823 830 813 831 814

-

831 814 830 813 822 805 825 808

-

825 808 822 805 766 749 816 799

-

816 799 766 749 806 789 807 790

-

800 783 801 784 790 773 791 774

-

789 772 791 774 790 773 787 770 788 771

-

796 779 788 771 787 770 803 786 804 787

-

813 796 804 787 803 786 814 797 815 798

-

815 798 814 797 819 802 820 803

-

820 803 819 802 823 806 824 807

-

824 807 823 806 826 809 827 810

-

827 810 826 809 832 815 833 816

-

834 817 833 816 832 815 843 826 844 827

-

851 834 844 827 843 826 859 842 860 843

-

858 841 860 843 859 842 856 839 857 840

-

857 840 856 839 846 829 847 830

-

785 768 782 765 783 766 786 769

-

794 777 785 768 786 769 795 778

-

811 794 794 777 795 778 812 795

-

817 800 811 794 812 795 818 801

-

821 804 817 800 818 801 768 751

-

828 811 821 804 768 751 829 812

-

835 818 828 811 829 812 836 819

-

852 835 835 818 836 819 853 836

-

861 844 852 835 853 836 862 845

-

865 848 861 844 862 845 866 849

-

798 781 799 782 810 793 809 792

-

797 780 808 791 802 785 761 744

-
- - - -

779 762 778 761 777 760 780 763 781 764

-

784 767 793 776 792 775 777 760 778 761

-

805 788 807 790 806 789 792 775 793 776

-

869 852 868 851 867 850 870 853 871 854

-

863 846 871 854 870 853 854 837 855 838

-

842 825 855 838 854 837 840 823 841 824

-

841 824 840 823 830 813 831 814

-

831 814 830 813 822 805 825 808

-

825 808 822 805 766 749 816 799

-

816 799 766 749 806 789 807 790

-

800 783 801 784 790 773 791 774

-

789 772 791 774 790 773 787 770 788 771

-

796 779 788 771 787 770 803 786 804 787

-

813 796 804 787 803 786 814 797 815 798

-

815 798 814 797 819 802 820 803

-

820 803 819 802 823 806 824 807

-

824 807 823 806 826 809 827 810

-

827 810 826 809 832 815 833 816

-

834 817 833 816 832 815 843 826 844 827

-

851 834 844 827 843 826 859 842 860 843

-

858 841 860 843 859 842 856 839 857 840

-

857 840 856 839 846 829 847 830

-

785 768 782 765 783 766 786 769

-

794 777 785 768 786 769 795 778

-

811 794 794 777 795 778 812 795

-

817 800 811 794 812 795 818 801

-

821 804 817 800 818 801 768 751

-

828 811 821 804 768 751 829 812

-

835 818 828 811 829 812 836 819

-

852 835 835 818 836 819 853 836

-

861 844 852 835 853 836 862 845

-

865 848 861 844 862 845 866 849

-

798 781 799 782 810 793 809 792

-

797 780 808 791 802 785 761 744

-

839 822 837 820 848 831 850 833

-

838 821 849 832 864 847 845 828

-
- - - -

872 868 873 869 874 870 875 871 876 872 877 873 878 874 879 875 880 876 881 877 882 878 883 879 884 880

-

885 881 886 882 887 883 888 884 889 885 890 886 891 887 892 888 893 889 894 890 895 891 896 892 897 893

-

898 894 899 895 900 896 901 897

-

902 898 903 899 904 900 905 901

-

906 902 907 903 908 904 909 905

-

910 906 911 907 912 908 913 909

-

914 910 915 911 916 912 917 913

-

918 914 919 915 920 916 921 917

-

922 918 923 919 924 920 925 921

-

926 922 927 923 928 924 929 925

-

930 926 931 927 932 928 933 929

-

934 930 935 931 936 932 937 933

-

938 934 939 935 940 936 941 937

-

942 938 943 939 944 940 945 941

-

946 942 947 943 948 944 949 945

-
- - - -

950 946 951 947 952 948 965 961 966 962 967 963

-
- - - -

953 949 954 950 955 951 956 952

-

957 953 958 954 959 955 960 956

-

961 957 962 958 963 959 964 960

-
- - - -

968 964 969 965 970 966 983 979 984 980 985 981

-
- - - -

971 967 972 968 973 969 974 970

-

975 971 976 972 977 973 978 974

-

979 975 980 976 981 977 982 978

-
- - - -

986 982 987 983 988 984 989 985 990 986 991 987 992 988 993 989 994 990 995 991

-

996 992 997 993 998 994 999 995 1000 996 1001 997 1002 998 1003 999 1004 1000 1005 1001

-

1006 1002 1007 1003 1008 1004 1009 1005

-

1010 1006 1011 1007 1012 1008 1013 1009

-

1014 1010 1015 1011 1016 1012 1017 1013

-

1018 1014 1019 1015 1020 1016 1021 1017

-

1022 1018 1023 1019 1024 1020 1025 1021

-

1026 1022 1027 1023 1028 1024 1029 1025

-

1030 1026 1031 1027 1032 1028 1033 1029

-

1034 1030 1035 1031 1036 1032 1037 1033

-

1038 1034 1039 1035 1040 1036 1041 1037

-

1042 1038 1043 1039 1044 1040 1045 1041

-
- - - -

1046 1042 1047 1042 1048 1042 1049 1042 1050 1042 1051 1042 1052 1042

-
- - - -

1053 1043 1054 1043 1055 1043 1056 1043

-
- - - -

1057 1044 1058 1044 1059 1044 1060 1044

-
- - - -

1061 1045 1062 1045 1063 1045 1064 1045

-
- - - -

1065 1046 1066 1046 1067 1046 1068 1046

-
- - - -

1069 1047 1070 1047 1071 1047 1072 1047

-
- - - -

1073 1048 1074 1048 1075 1048 1076 1048

-
- - - -

1077 1049 1078 1049 1079 1049 1080 1049

-
- - - -

1081 1050 1082 1050 1083 1050 1084 1050

-
- - - -

1085 1051 1086 1051 1087 1051 1088 1051

-
- - - -

1089 1052 1090 1052 1091 1052 1092 1052

-
- - - -

1093 1053 1094 1053 1095 1053 1096 1053

-
- - - -

1097 1054 1098 1054 1099 1054 1100 1054

-
- - - -

1128 1055 1129 1055 1130 1055

-
- - - -

1101 1055 1102 1055 1103 1055 1104 1055

-

1105 1055 1106 1055 1107 1055 1108 1055 1109 1055 1110 1055 1111 1055 1112 1055

-

1113 1055 1114 1055 1115 1055 1116 1055 1117 1055

-

1118 1055 1119 1055 1120 1055 1121 1055 1122 1055 1123 1055

-

1124 1055 1125 1055 1126 1055 1127 1055

-
- - - -

1144 1056 1145 1056 1146 1056

-
- - - -

1131 1056 1132 1056 1133 1056 1134 1056

-

1135 1056 1136 1056 1137 1056 1138 1056 1139 1056

-

1140 1056 1141 1056 1142 1056 1143 1056

-
- - - -

1156 1057 1157 1057 1158 1057

-
- - - -

1147 1057 1148 1057 1149 1057 1150 1057 1151 1057

-

1152 1057 1153 1057 1154 1057 1155 1057

-
- - - -

1159 1058 1160 1058 1161 1058 1200 1058 1201 1058 1202 1058 1203 1058 1204 1058 1205 1058 1206 1058 1207 1058 1208 1058 1215 1058 1216 1058 1217 1058

-
- - - -

1162 1058 1163 1058 1164 1058 1165 1058 1166 1058

-

1167 1058 1168 1058 1169 1058 1170 1058

-

1171 1058 1172 1058 1173 1058 1174 1058 1175 1058 1176 1058

-

1177 1058 1178 1058 1179 1058 1180 1058

-

1181 1058 1182 1058 1183 1058 1184 1058

-

1185 1058 1186 1058 1187 1058 1188 1058 1189 1058

-

1190 1058 1191 1058 1192 1058 1193 1058

-

1194 1058 1195 1058 1196 1058 1197 1058 1198 1058 1199 1058

-

1209 1058 1210 1058 1211 1058 1212 1058 1213 1058 1214 1058

-
- - - -

1236 1059 1237 1059 1238 1059 1282 1059 1283 1059 1284 1059

-
- - - -

1218 1059 1219 1059 1220 1059 1221 1059

-

1222 1059 1223 1059 1224 1059 1225 1059

-

1226 1059 1227 1059 1228 1059 1229 1059 1230 1059 1231 1059

-

1232 1059 1233 1059 1234 1059 1235 1059

-

1239 1059 1240 1059 1241 1059 1242 1059 1243 1059

-

1244 1059 1245 1059 1246 1059 1247 1059

-

1248 1059 1249 1059 1250 1059 1251 1059

-

1252 1059 1253 1059 1254 1059 1255 1059 1256 1059 1257 1059 1258 1059

-

1259 1059 1260 1059 1261 1059 1262 1059

-

1263 1059 1264 1059 1265 1059 1266 1059

-

1267 1059 1268 1059 1269 1059 1270 1059 1271 1059

-

1272 1059 1273 1059 1274 1059 1275 1059 1276 1059 1277 1059

-

1278 1059 1279 1059 1280 1059 1281 1059

-
- - - -

1313 1060 1314 1060 1315 1060 1347 1060 1348 1060 1349 1060

-
- - - -

1285 1060 1286 1060 1287 1060 1288 1060

-

1289 1060 1290 1060 1291 1060 1292 1060

-

1293 1060 1294 1060 1295 1060 1296 1060 1297 1060 1298 1060 1299 1060

-

1300 1060 1301 1060 1302 1060 1303 1060

-

1304 1060 1305 1060 1306 1060 1307 1060

-

1308 1060 1309 1060 1310 1060 1311 1060 1312 1060

-

1316 1060 1317 1060 1318 1060 1319 1060

-

1320 1060 1321 1060 1322 1060 1323 1060 1324 1060 1325 1060

-

1326 1060 1327 1060 1328 1060 1329 1060

-

1330 1060 1331 1060 1332 1060 1333 1060

-

1334 1060 1335 1060 1336 1060 1337 1060

-

1338 1060 1339 1060 1340 1060 1341 1060 1342 1060

-

1343 1060 1344 1060 1345 1060 1346 1060

-
-
- - - CAT3DBagRep - - -
- - - - 48.2248 -131.5 132.496 90.633 -131.5 108.012 122.11 -131.5 70.4995 138.858 -131.5 24.4839 138.858 -131.5 -24.4849 122.11 -131.5 -70.5005 90.633 -131.5 -108.013 48.2248 -131.5 -132.497 0 -131.5 -141 -48.2249 -131.5 -132.497 -90.6331 -131.5 -108.013 -122.11 -131.5 -70.5005 -138.858 -131.5 -24.4849 -138.858 -131.5 24.4839 -122.11 -131.5 70.4995 -90.6331 -131.5 108.012 -48.2249 -131.5 132.496 0 -131.5 141 0 -170 141 -48.2249 -170 132.496 -90.6331 -170 108.012 -122.11 -170 70.4995 -138.858 -170 24.4839 -138.858 -170 -24.4849 -122.11 -170 -70.5005 -90.6331 -170 -108.013 -48.2249 -170 -132.497 0 -170 -141 48.2248 -170 -132.497 90.633 -170 -108.013 122.11 -170 -70.5005 138.858 -170 -24.4849 138.858 -170 24.4839 122.11 -170 70.4995 90.633 -170 108.012 48.2248 -170 132.496 48.2248 -131.5 132.496 48.2248 -170 132.496 90.633 -170 108.012 90.633 -131.5 108.012 90.633 -131.5 108.012 90.633 -170 108.012 122.11 -170 70.4995 122.11 -131.5 70.4995 122.11 -131.5 70.4995 122.11 -170 70.4995 138.858 -170 24.4839 138.858 -131.5 24.4839 138.858 -131.5 24.4839 138.858 -170 24.4839 138.858 -170 -24.4849 138.858 -131.5 -24.4849 138.858 -131.5 -24.4849 138.858 -170 -24.4849 122.11 -170 -70.5005 122.11 -131.5 -70.5005 122.11 -131.5 -70.5005 122.11 -170 -70.5005 90.633 -170 -108.013 90.633 -131.5 -108.013 90.633 -131.5 -108.013 90.633 -170 -108.013 48.2248 -170 -132.497 48.2248 -131.5 -132.497 48.2248 -131.5 -132.497 48.2248 -170 -132.497 0 -170 -141 0 -131.5 -141 0 -131.5 -141 0 -170 -141 -48.2249 -170 -132.497 -48.2249 -131.5 -132.497 -48.2249 -131.5 -132.497 -48.2249 -170 -132.497 -90.6331 -170 -108.013 -90.6331 -131.5 -108.013 -90.6331 -131.5 -108.013 -90.6331 -170 -108.013 -122.11 -170 -70.5005 -122.11 -131.5 -70.5005 -122.11 -131.5 -70.5005 -122.11 -170 -70.5005 -138.858 -170 -24.4849 -138.858 -131.5 -24.4849 -138.858 -131.5 -24.4849 -138.858 -170 -24.4849 -138.858 -170 24.4839 -138.858 -131.5 24.4839 -138.858 -131.5 24.4839 -138.858 -170 24.4839 -122.11 -170 70.4995 -122.11 -131.5 70.4995 -122.11 -131.5 70.4995 -122.11 -170 70.4995 -90.6331 -170 108.012 -90.6331 -131.5 108.012 -90.6331 -131.5 108.012 -90.6331 -170 108.012 -48.2249 -170 132.496 -48.2249 -131.5 132.496 -48.2249 -131.5 132.496 -48.2249 -170 132.496 0 -170 141 0 -131.5 141 0 -131.5 141 0 -170 141 48.2248 -170 132.496 48.2248 -131.5 132.496 46.4339 63 127.578 -127.577 63 46.4349 -127.577 50 46.4349 46.4339 50 127.578 127.577 63 -46.4335 46.4339 63 127.578 46.4339 50 127.578 127.577 50 -46.4335 -46.4345 63 -127.576 127.577 63 -46.4335 127.577 50 -46.4335 -46.4345 50 -127.576 -127.577 63 46.4349 -46.4345 63 -127.576 -46.4345 50 -127.576 -127.577 50 46.4349 -127.577 50 46.4349 -46.4345 50 -127.576 127.577 50 -46.4335 46.4339 50 127.578 -59.1131 225 -100.387 -63.6253 225 -90.7103 -63.6253 225 -79.4585 -31.9565 225 -79.4585 -31.9238 225 -87.7084 -31.9565 225 -87.7236 -28.3871 225 -95.293 -31.9238 225 -87.7084 -31.9565 225 -79.4585 -7.10065 225 -79.4585 0.926239 225 -85.079 -0.287598 225 -95.293 90.7109 225 -63.6241 -0.287598 225 -106.057 -0.287598 225 -95.293 0.926239 225 -85.079 46.9362 225 -63.6241 -0.287598 225 -95.293 -0.287598 225 -106.057 -19.2453 225 -114.898 -28.3871 225 -95.293 -114.899 225 19.2457 -95.2942 225 28.3875 -95.2942 225 -22.7963 19.2446 225 114.899 28.6542 225 94.7202 -24.0293 225 94.7202 94.719 225 24.0299 114.898 225 -19.2441 94.719 225 -28.6538 -63.6253 225 -63.6241 -63.6253 225 -90.7103 -76.2558 225 -63.6241 -127.577 63 46.4349 -114.899 63 19.2457 -114.899 63 19.2457 -114.899 63 19.2457 -114.899 225 19.2457 -114.899 225 19.2457 -100.388 63 59.1135 -100.388 63 59.1135 -100.388 63 59.1135 -100.388 225 59.1135 -100.388 225 59.1135 -100.388 225 59.1135 -95.2942 225 -0.286377 -95.2942 225 28.3875 -91.9435 225 63.0513 -87.7094 63 31.9243 -87.7094 63 31.9243 -87.7094 63 31.9243 -87.7094 225 31.9243 -87.7094 225 31.9243 -87.7094 225 31.9243 -85.08 225 -0.925781 -85.08 225 -0.925781 -85.08 225 -0.925781 -85.08 268 -0.925781 -85.08 268 -0.925781 -85.08 268 -0.925781 -79.4597 225 7.10095 -79.4597 225 31.3824 -79.4597 225 63.0513 -76.2558 225 -63.6241 -67.2838 225 24.49 -67.2838 225 24.49 -67.2838 268 24.49 -67.2838 268 24.49 -65.3417 268 46.6882 -64.5796 225 55.3988 -64.5796 225 55.3988 -64.5796 225 55.3988 -64.5796 268 55.3988 -64.5796 268 55.3988 -64.5796 268 55.3988 -63.6253 225 -79.4585 -63.6253 225 -63.6241 -63.543 268 -47.1121 -59.1131 63 -100.387 -59.1131 63 -100.387 -59.1131 63 -100.387 -59.1131 225 -100.387 -59.1131 225 -100.387 -55.8433 225 -63.6241 -55.3983 225 -64.5785 -55.3983 225 -64.5785 -55.3983 225 -64.5785 -55.3983 268 -64.5785 -55.3983 268 -64.5785 -55.3983 268 -64.5785 -48.1688 225 63.0513 -47.7909 225 -79.4585 -47.1132 268 -47.1121 -47.1132 268 -0.211914 -47.1132 268 46.6882 -46.4345 63 -127.576 -31.9238 63 -87.7084 -31.9238 63 -87.7084 -31.9238 63 -87.7084 -31.9238 225 -87.7084 -31.9238 225 -87.7084 -24.4895 225 -67.2827 -24.4895 225 -67.2827 -24.4895 268 -67.2827 -24.4895 268 -67.2827 -19.2453 63 -114.898 -19.2453 63 -114.898 -19.2453 63 -114.898 -19.2453 225 -114.898 -19.2453 225 -114.898 -14.3355 285 10.0383 -14.3355 285 10.0383 -7.10065 225 -79.4585 -0.92688 225 85.0804 -0.92688 225 85.0804 -0.92688 225 85.0804 -0.287598 225 94.7202 -0.213013 268 -84.2813 -0.213013 268 -47.1121 -0.213013 268 46.6882 0.926239 268 -85.079 0.926239 268 -85.079 0.926239 268 -85.079 7.92007 225 78.8857 19.2446 63 114.899 19.2446 63 114.899 19.2446 63 114.899 19.2446 225 114.899 19.2446 225 114.899 24.4889 225 67.2842 24.4889 225 67.2842 24.4889 268 67.2842 24.4889 268 67.2842 28.6542 225 94.7202 31.3813 225 66.6812 31.3813 225 78.8857 31.9232 63 87.7098 31.9232 63 87.7098 31.9232 63 87.7098 31.9232 225 87.7098 31.9232 225 87.7098 31.9232 225 87.7098 46.4339 63 127.578 46.6872 268 -63.7402 46.6872 268 -47.1121 46.6872 268 -0.211914 46.6872 268 46.6882 46.6872 268 65.3422 46.9362 225 -63.6241 55.3976 225 64.5801 55.3976 225 64.5801 55.3976 225 64.5801 55.3976 268 64.5801 55.3976 268 64.5801 55.3976 268 64.5801 59.1124 63 100.388 59.1124 63 100.388 59.1124 63 100.388 59.1124 225 100.388 59.1124 225 100.388 59.1124 225 100.388 63.0501 225 -63.6241 63.0501 225 48.1693 63.0501 225 78.8857 63.0501 225 91.9441 64.5789 225 -55.3972 64.5789 225 -55.3972 64.5789 225 -55.3972 64.5789 268 -55.3972 64.5789 268 -55.3972 64.5789 268 -55.3972 66.6299 225 -31.9553 67.2831 225 -24.4884 67.2831 225 -24.4884 67.2831 268 -24.4884 67.2831 268 -24.4884 78.8845 225 -63.6241 78.8845 225 -47.7898 78.8845 225 -31.9553 84.2817 268 -0.211914 85.0794 225 0.927368 85.0794 225 0.927368 85.0794 225 0.927368 85.0794 268 0.927368 85.0794 268 0.927368 85.0794 268 0.927368 87.7088 63 -31.9227 87.7088 63 -31.9227 87.7088 63 -31.9227 87.7088 225 -31.9227 87.7088 225 -31.9227 87.7088 225 -31.9227 94.719 225 -28.6538 94.719 225 -0.286377 100.387 63 -59.1119 100.387 63 -59.1119 100.387 63 -59.1119 100.387 225 -59.1119 100.387 225 -59.1119 100.387 225 -59.1119 114.898 63 -19.2441 114.898 63 -19.2441 114.898 63 -19.2441 114.898 225 -19.2441 114.898 225 -19.2441 127.577 63 -46.4335 -17.4337 268 1.526 -17.4337 285 1.526 -17.4337 285 1.526 -15.8607 268 -7.39502 -15.8607 285 -7.39502 -15.8607 285 -7.39502 -14.3355 268 10.0383 -10.0379 268 -14.3344 -10.0379 285 -14.3344 -10.0379 285 -14.3344 -7.39615 268 15.8612 -7.39615 285 15.8612 -7.39615 285 15.8612 -1.52554 268 -17.4326 -1.52554 285 -17.4326 -1.52554 285 -17.4326 -0.92688 268 85.0804 -0.92688 268 85.0804 0.926239 225 -85.079 0.926239 225 -85.079 1.5249 268 17.4342 1.5249 285 17.4342 1.5249 285 17.4342 7.39551 268 -15.8596 7.39551 285 -15.8596 7.39551 285 -15.8596 10.0373 268 14.3359 10.0373 285 14.3359 10.0373 285 14.3359 14.3348 268 -10.0369 14.3348 285 -10.0369 14.3348 285 -10.0369 15.8601 268 7.39661 15.8601 285 7.39661 15.8601 285 7.39661 17.4331 268 -1.52441 17.4331 285 -1.52441 17.4331 285 -1.52441 -95.2942 225 -22.7963 -24.0293 225 94.7202 90.7109 225 -63.6241 94.719 225 24.0299 -405 -38.7625 143.57 -405 -38.7625 151.996 -405 38.4125 151.996 -405 38.4125 143.538 -405 0 140.053 -405 -38.7625 267.759 -405 -38.7625 276.535 -405 -0.000122 280.053 -405 38.4125 276.567 -405 38.4125 267.759 -405 66.4826 171.29 -405 57.7062 171.29 -405 57.7062 248.465 -405 66.5144 248.465 -405 70 210.053 -195 -70 280.053 -195 -70 140.053 -195 70 140.053 -195 70 280.053 -215 -70 140.053 -195 -70 140.053 -195 -70 280.053 -215 -70 280.053 -215 -70 280.053 -195 -70 280.053 -195 70 280.053 -215 70 280.053 -215 70 140.053 -215 70 280.053 -195 70 280.053 -195 70 140.053 -215 -70 140.053 -215 70 140.053 -195 70 140.053 -195 -70 140.053 -405 -46.8659 209.878 -405 -45.2911 197.917 -405 -58.0562 190.584 -405 -68.2334 190.584 -405 -69.9841 209.878 -405 -45.2911 197.917 -405 -42.2536 190.584 -405 -58.0562 190.584 -420.665 -31.4094 210.053 -420.665 -31.4094 210.053 -420.665 -31.3991 209.974 -420.665 -30.3392 201.923 -420.665 -30.3392 201.923 -420.665 -27.2014 225.757 -420.665 -27.2014 225.757 -420.665 -26.0264 227.289 -420.665 -17.393 209.974 -420.665 -8.12927 179.714 -420.665 -8.12927 179.714 -420.665 -0.623596 207.725 -420.665 -0.623596 207.725 -420.665 -0.623596 212.38 -420.665 -0.623596 212.38 -420.665 -0.078524 178.654 -420.665 -0.078524 192.66 -420.665 -0.078524 212.452 -420.665 -0.078524 227.289 -420.665 0 178.643 -420.665 0 178.643 -420.665 0 207.643 -420.665 0 207.643 -420.665 0 212.462 -420.665 0 212.462 -420.665 15.7047 182.851 -420.665 15.7047 182.851 -420.665 17.2359 209.974 -420.665 17.2359 227.289 -405 -70 210.052 -405 -70 210.052 -405 -69.9841 209.878 -405 -68.2651 229.171 -405 -68.2334 190.584 -405 -66.5144 248.465 -405 -66.4827 171.29 -405 -65.1 156.053 -405 -65.1 156.053 -405 -65.1 264.053 -405 -65.1 264.053 -405 -58.0562 209.878 -405 -58.0562 229.171 -405 -54 144.953 -405 -54 144.953 -405 -54 275.153 -405 -54 275.153 -405 -46.8889 210.053 -405 -46.8889 210.053 -405 -46.8659 209.878 -405 -45.2911 222.188 -405 -45.2911 222.188 -405 -42.3986 229.171 -405 -42.2536 190.584 -405 -40.6069 186.608 -405 -40.6069 186.608 -405 -40.6069 233.497 -405 -40.6069 233.497 -405 -38.7625 143.57 -405 -38.7625 151.996 -405 -38.7625 171.29 -405 -38.7625 248.465 -405 -38.7625 267.759 -405 -38.7625 276.535 -405 -19.4687 151.996 -405 -19.4687 267.759 -405 -2.40942 210.053 -405 -2.40942 210.053 -405 -2.32727 209.429 -405 -2.32727 209.429 -405 -2.32727 210.676 -405 -2.32727 210.676 -405 -2.08661 208.848 -405 -2.08661 208.848 -405 -2.08661 211.257 -405 -2.08661 211.257 -405 -1.70367 208.349 -405 -1.70367 208.349 -405 -1.70367 211.756 -405 -1.70367 211.756 -405 -1.20471 207.966 -405 -1.20471 207.966 -405 -1.20471 212.139 -405 -1.20471 212.139 -405 -0.623596 207.725 -405 -0.623596 207.725 -405 -0.623596 212.38 -405 -0.623596 212.38 -405 -0.174999 151.996 -405 -0.174999 267.759 -405 0 207.643 -405 0 207.643 -405 0 212.462 -405 0 212.462 -405 0.623596 207.725 -405 0.623596 207.725 -405 0.623596 212.38 -405 0.623596 212.38 -405 1.20471 207.966 -405 1.20471 207.966 -405 1.20471 212.139 -405 1.20471 212.139 -405 1.70367 208.349 -405 1.70367 208.349 -405 1.70367 211.756 -405 1.70367 211.756 -405 2.08661 208.848 -405 2.08661 208.848 -405 2.08661 211.257 -405 2.08661 211.257 -405 2.32727 209.429 -405 2.32727 209.429 -405 2.32727 210.676 -405 2.32727 210.676 -405 2.40942 210.053 -405 2.40942 210.053 -405 12.1357 164.762 -405 12.1357 164.762 -405 19.1187 151.996 -405 19.1187 267.759 -405 38.4125 143.538 -405 38.4125 151.996 -405 38.4125 171.29 -405 38.4125 248.465 -405 38.4125 267.759 -405 38.4125 276.567 -405 54 144.953 -405 54 144.953 -405 54 275.153 -405 54 275.153 -405 57.7062 171.29 -405 57.7062 190.584 -405 57.7062 209.878 -405 57.7062 229.171 -405 57.7062 248.465 -405 65.1 156.053 -405 65.1 156.053 -405 65.1 264.053 -405 65.1 264.053 -405 66.4826 171.29 -405 66.5144 248.465 -215 -70 140.053 -215 -70 210.053 -215 -70 210.053 -215 -70 280.053 -215 0 140.053 -215 0 140.053 -215 0 280.053 -215 0 280.053 -215 70 140.053 -215 70 210.053 -215 70 210.053 -215 70 280.053 -420.665 -30.3392 218.182 -420.665 -27.2014 194.348 -420.665 -22.2098 187.843 -420.665 -22.2098 232.262 -420.665 -22.2098 232.262 -420.665 -15.7047 182.851 -420.665 -15.7047 237.254 -420.665 -15.7047 237.254 -420.665 -8.12927 240.392 -420.665 -8.12927 240.392 -420.665 -2.40942 210.053 -420.665 -2.32727 209.429 -420.665 -2.32727 210.676 -420.665 -2.08661 208.848 -420.665 -2.08661 211.257 -420.665 -1.70367 208.349 -420.665 -1.70367 211.756 -420.665 -1.20471 207.966 -420.665 -1.20471 212.139 -420.665 -0.078524 241.452 -420.665 0 241.462 -420.665 0 241.462 -420.665 0.623596 207.725 -420.665 0.623596 212.38 -420.665 1.20471 207.966 -420.665 1.20471 212.139 -420.665 1.70367 208.349 -420.665 1.70367 211.756 -420.665 2.08661 208.848 -420.665 2.08661 211.257 -420.665 2.32727 209.429 -420.665 2.32727 210.676 -420.665 2.40942 210.053 -420.665 8.12927 179.714 -420.665 8.12927 240.392 -420.665 8.12927 240.392 -420.665 15.7047 237.254 -420.665 15.7047 237.254 -420.665 17.2359 184.026 -420.665 22.2098 187.843 -420.665 22.2098 187.843 -420.665 22.2098 232.262 -420.665 22.2098 232.262 -420.665 26.0264 227.289 -420.665 27.2014 194.348 -420.665 27.2014 194.348 -420.665 27.2014 225.757 -420.665 27.2014 225.757 -420.665 30.3392 201.923 -420.665 30.3392 201.923 -420.665 30.3392 218.182 -420.665 30.3392 218.182 -420.665 31.4094 210.053 -420.665 31.4094 210.053 -405 -65.1 156.053 -405 -65.1 264.053 -405 -60 156.053 -405 -60 264.053 -405 -58.4471 155.848 -405 -58.4471 264.257 -405 -57 155.249 -405 -57 264.856 -405 -55.7574 154.295 -405 -55.7574 265.81 -405 -54.8038 153.053 -405 -54.8038 267.053 -405 -54.2045 151.606 -405 -54.2045 268.5 -405 -54 144.953 -405 -54 150.053 -405 -54 270.053 -405 -54 275.153 -405 -45.2911 197.917 -405 -33.1554 176.897 -405 -33.1554 243.208 -405 -23.4444 169.446 -405 -23.4444 250.66 -405 -12.1357 164.762 -405 -12.1357 255.344 -405 -0.000122 280.053 -405 0 140.053 -405 0 163.164 -405 0 256.942 -405 12.1357 255.344 -405 23.4444 169.446 -405 23.4444 250.66 -405 33.1554 176.897 -405 33.1554 243.208 -405 40.6069 186.608 -405 40.6069 233.497 -405 45.2911 197.917 -405 45.2911 222.188 -405 46.8889 210.053 -405 54 144.953 -405 54 150.053 -405 54 270.053 -405 54 275.153 -405 54.2045 151.606 -405 54.2045 268.5 -405 54.8038 153.053 -405 54.8038 267.053 -405 55.7574 154.295 -405 55.7574 265.81 -405 57 155.249 -405 57 264.856 -405 58.4471 155.848 -405 58.4471 264.257 -405 60 156.053 -405 60 264.053 -405 65.1 156.053 -405 65.1 264.053 -405 70 210.053 -215 -65.1 156.053 -215 -65.1 156.053 -215 -65.1 264.053 -215 -65.1 264.053 -215 -60 156.053 -215 -60 264.053 -215 -58.4471 155.848 -215 -58.4471 264.257 -215 -57 155.249 -215 -57 264.856 -215 -55.7574 154.295 -215 -55.7574 265.81 -215 -54.8038 153.053 -215 -54.8038 267.053 -215 -54.2045 151.606 -215 -54.2045 268.5 -215 -54 144.953 -215 -54 144.953 -215 -54 150.053 -215 -54 270.053 -215 -54 275.153 -215 -54 275.153 -215 54 144.953 -215 54 144.953 -215 54 150.053 -215 54 270.053 -215 54 275.153 -215 54 275.153 -215 54.2045 151.606 -215 54.2045 268.5 -215 54.8038 153.053 -215 54.8038 267.053 -215 55.7574 154.295 -215 55.7574 265.81 -215 57 155.249 -215 57 264.856 -215 58.4471 155.848 -215 58.4471 264.257 -215 60 156.053 -215 60 264.053 -215 65.1 156.053 -215 65.1 156.053 -215 65.1 264.053 -215 65.1 264.053 -420.665 -0.078524 207.654 -405 -38.7625 -22.667 -405 -38.7625 -14.2405 -405 38.4125 -14.2405 -405 38.4125 -22.6987 -405 0 -26.1843 -405 -38.7625 101.522 -405 -38.7625 110.298 -405 -0.000122 113.816 -405 38.4125 110.33 -405 38.4125 101.522 -405 66.4827 5.05322 -405 57.7062 5.05322 -405 57.7062 82.2281 -405 66.5144 82.2281 -405 70 43.8157 -195 -70 113.816 -195 -70 -26.1843 -195 70 -26.1843 -195 70 113.816 -215 -70 -26.1843 -195 -70 -26.1843 -195 -70 113.816 -215 -70 113.816 -215 -70 113.816 -195 -70 113.816 -195 70 113.816 -215 70 113.816 -215 70 -26.1843 -215 70 113.816 -195 70 113.816 -195 70 -26.1843 -215 -70 -26.1843 -215 70 -26.1843 -195 70 -26.1843 -195 -70 -26.1843 -405 -46.8659 43.6406 -405 -45.2911 31.6799 -405 -58.0562 24.3469 -405 -68.2334 24.3469 -405 -69.9841 43.6406 -405 -45.2911 31.6799 -405 -42.2536 24.3469 -405 -58.0562 24.3469 -420.665 -31.4094 43.8157 -420.665 -31.4094 43.8157 -420.665 -31.3991 43.7372 -420.665 -30.3392 35.6863 -420.665 -30.3392 35.6863 -420.665 -27.2014 59.5204 -420.665 -27.2014 59.5204 -420.665 -26.0264 61.0516 -420.665 -17.393 43.7372 -420.665 -8.12927 13.4764 -420.665 -8.12927 13.4764 -420.665 -2.40942 43.8157 -420.665 -2.40942 43.8157 -420.665 -1.20471 41.7291 -420.665 -1.20471 41.7291 -420.665 -0.078524 12.4166 -420.665 -0.078524 26.4227 -420.665 -0.078524 61.0516 -420.665 0 12.4063 -420.665 0 12.4063 -420.665 2.08661 42.611 -420.665 2.08661 42.611 -420.665 15.7047 16.6143 -420.665 15.7047 16.6143 -420.665 17.2359 43.7372 -420.665 17.2359 61.0516 -405 -70 43.8156 -405 -70 43.8156 -405 -69.9841 43.6406 -405 -68.2651 62.9343 -405 -68.2334 24.3469 -405 -66.5144 82.2281 -405 -66.4827 5.05322 -405 -65.1 -10.1843 -405 -65.1 -10.1843 -405 -65.1 97.8157 -405 -65.1 97.8157 -405 -58.0562 43.6406 -405 -58.0562 62.9343 -405 -54 -21.2843 -405 -54 -21.2843 -405 -54 108.916 -405 -54 108.916 -405 -46.8889 43.8157 -405 -46.8889 43.8157 -405 -46.8659 43.6406 -405 -45.2911 55.9514 -405 -45.2911 55.9514 -405 -42.3986 62.9343 -405 -42.2536 24.3469 -405 -40.6069 20.3713 -405 -40.6069 20.3713 -405 -40.6069 67.26 -405 -40.6069 67.26 -405 -38.7625 -22.667 -405 -38.7625 -14.2405 -405 -38.7625 5.05322 -405 -38.7625 82.2281 -405 -38.7625 101.522 -405 -38.7625 110.298 -405 -19.4687 -14.2405 -405 -19.4687 101.522 -405 -12.1357 -1.47546 -405 -12.1357 -1.47546 -405 -2.40942 43.8157 -405 -2.40942 43.8157 -405 -2.32727 43.1921 -405 -2.32727 43.1921 -405 -2.32727 44.4392 -405 -2.32727 44.4392 -405 -2.08661 42.611 -405 -2.08661 42.611 -405 -2.08661 45.0204 -405 -2.08661 45.0204 -405 -1.70367 42.1119 -405 -1.70367 42.1119 -405 -1.70367 45.5194 -405 -1.70367 45.5194 -405 -1.20471 41.7291 -405 -1.20471 41.7291 -405 -1.20471 45.9022 -405 -1.20471 45.9022 -405 -0.623596 41.4884 -405 -0.623596 41.4884 -405 -0.623596 46.1429 -405 -0.623596 46.1429 -405 -0.174999 -14.2405 -405 -0.174999 101.522 -405 0 41.4063 -405 0 41.4063 -405 0 46.2251 -405 0 46.2251 -405 0.623596 41.4884 -405 0.623596 41.4884 -405 0.623596 46.1429 -405 0.623596 46.1429 -405 1.20471 41.7291 -405 1.20471 41.7291 -405 1.20471 45.9022 -405 1.20471 45.9022 -405 1.70367 42.1119 -405 1.70367 42.1119 -405 1.70367 45.5194 -405 1.70367 45.5194 -405 2.08661 42.611 -405 2.08661 42.611 -405 2.08661 45.0204 -405 2.08661 45.0204 -405 2.32727 43.1921 -405 2.32727 43.1921 -405 2.32727 44.4392 -405 2.32727 44.4392 -405 2.40942 43.8157 -405 2.40942 43.8157 -405 19.1187 -14.2405 -405 19.1187 101.522 -405 38.4125 -22.6987 -405 38.4125 -14.2405 -405 38.4125 5.05322 -405 38.4125 82.2281 -405 38.4125 101.522 -405 38.4125 110.33 -405 54 -21.2843 -405 54 -21.2843 -405 54 108.916 -405 54 108.916 -405 57.7062 5.05322 -405 57.7062 24.3469 -405 57.7062 43.6406 -405 57.7062 62.9343 -405 57.7062 82.2281 -405 65.1 -10.1843 -405 65.1 -10.1843 -405 65.1 97.8157 -405 65.1 97.8157 -405 66.4827 5.05322 -405 66.5144 82.2281 -215 -70 -26.1843 -215 -70 43.8157 -215 -70 43.8157 -215 -70 113.816 -215 0 -26.1843 -215 0 -26.1843 -215 0 113.816 -215 0 113.816 -215 70 -26.1843 -215 70 43.8157 -215 70 43.8157 -215 70 113.816 -420.665 -30.3392 51.9451 -420.665 -27.2014 28.111 -420.665 -22.2098 21.6058 -420.665 -22.2098 66.0255 -420.665 -22.2098 66.0255 -420.665 -15.7047 16.6143 -420.665 -15.7047 71.0171 -420.665 -15.7047 71.0171 -420.665 -8.12927 74.1549 -420.665 -8.12927 74.1549 -420.665 -2.32727 43.1921 -420.665 -2.32727 44.4392 -420.665 -2.08661 42.611 -420.665 -2.08661 45.0204 -420.665 -1.70367 42.1119 -420.665 -1.70367 45.5194 -420.665 -1.20471 45.9022 -420.665 -0.623596 41.4884 -420.665 -0.623596 46.1429 -420.665 0 41.4063 -420.665 0 46.2251 -420.665 0 75.2251 -420.665 0 75.2251 -420.665 0.623596 41.4884 -420.665 0.623596 46.1429 -420.665 1.20471 41.7291 -420.665 1.20471 45.9022 -420.665 1.70367 42.1119 -420.665 1.70367 45.5194 -420.665 2.08661 45.0204 -420.665 2.32727 43.1921 -420.665 2.32727 44.4392 -420.665 2.40942 43.8157 -420.665 8.12927 13.4764 -420.665 8.12927 74.1549 -420.665 8.12927 74.1549 -420.665 15.7047 71.0171 -420.665 15.7047 71.0171 -420.665 17.2359 17.7892 -420.665 22.2098 21.6058 -420.665 22.2098 21.6058 -420.665 22.2098 66.0255 -420.665 22.2098 66.0255 -420.665 26.0264 61.0516 -420.665 27.2014 28.111 -420.665 27.2014 28.111 -420.665 27.2014 59.5204 -420.665 27.2014 59.5204 -420.665 30.3392 35.6863 -420.665 30.3392 35.6863 -420.665 30.3392 51.9451 -420.665 30.3392 51.9451 -420.665 31.4094 43.8157 -420.665 31.4094 43.8157 -405 -65.1 -10.1843 -405 -65.1 97.8157 -405 -60 -10.1843 -405 -60 97.8157 -405 -58.4471 -10.3887 -405 -58.4471 98.0201 -405 -57 -10.9882 -405 -57 98.6195 -405 -55.7574 -11.9417 -405 -55.7574 99.5731 -405 -54.8038 -13.1843 -405 -54.8038 100.816 -405 -54.2045 -14.6315 -405 -54.2045 102.263 -405 -54 -21.2843 -405 -54 -16.1843 -405 -54 103.816 -405 -54 108.916 -405 -45.2911 31.6799 -405 -33.1554 10.6603 -405 -33.1554 76.9711 -405 -23.4444 3.20874 -405 -23.4444 84.4226 -405 -12.1357 89.1068 -405 -0.000122 113.816 -405 0 -26.1843 -405 0 -3.07324 -405 0 90.7046 -405 12.1357 -1.47546 -405 12.1357 89.1068 -405 23.4444 3.20874 -405 23.4444 84.4226 -405 33.1554 10.6603 -405 33.1554 76.9711 -405 40.6069 20.3713 -405 40.6069 67.26 -405 45.2911 31.6799 -405 45.2911 55.9514 -405 46.8889 43.8157 -405 54 -21.2843 -405 54 -16.1843 -405 54 103.816 -405 54 108.916 -405 54.2045 -14.6315 -405 54.2045 102.263 -405 54.8038 -13.1843 -405 54.8038 100.816 -405 55.7574 -11.9417 -405 55.7574 99.5731 -405 57 -10.9882 -405 57 98.6195 -405 58.4471 -10.3887 -405 58.4471 98.0201 -405 60 -10.1843 -405 60 97.8157 -405 65.1 -10.1843 -405 65.1 97.8157 -405 70 43.8157 -215 -65.1 -10.1843 -215 -65.1 -10.1843 -215 -65.1 97.8157 -215 -65.1 97.8157 -215 -60 -10.1843 -215 -60 97.8157 -215 -58.4471 -10.3887 -215 -58.4471 98.0201 -215 -57 -10.9882 -215 -57 98.6195 -215 -55.7574 -11.9417 -215 -55.7574 99.5731 -215 -54.8038 -13.1843 -215 -54.8038 100.816 -215 -54.2045 -14.6315 -215 -54.2045 102.263 -215 -54 -21.2843 -215 -54 -21.2843 -215 -54 -16.1843 -215 -54 103.816 -215 -54 108.916 -215 -54 108.916 -215 54 -21.2843 -215 54 -21.2843 -215 54 -16.1843 -215 54 103.816 -215 54 108.916 -215 54 108.916 -215 54.2045 -14.6315 -215 54.2045 102.263 -215 54.8038 -13.1843 -215 54.8038 100.816 -215 55.7574 -11.9417 -215 55.7574 99.5731 -215 57 -10.9882 -215 57 98.6195 -215 58.4471 -10.3887 -215 58.4471 98.0201 -215 60 -10.1843 -215 60 97.8157 -215 65.1 -10.1843 -215 65.1 -10.1843 -215 65.1 97.8157 -215 65.1 97.8157 -405 -38.7625 -188.904 -405 -38.7625 -180.478 -405 38.4125 -180.478 -405 38.4125 -188.936 -405 0 -192.421 -405 -38.7625 -64.7151 -405 -38.7625 -55.9386 -405 -0.000122 -52.4214 -405 38.4125 -55.9069 -405 38.4125 -64.7151 -405 66.4827 -161.184 -405 57.7062 -161.184 -405 57.7062 -84.0089 -405 66.5144 -84.0089 -405 70 -122.421 -195 -70 -52.4214 -195 -70 -192.421 -195 70 -192.421 -195 70 -52.4214 -215 -70 -192.421 -195 -70 -192.421 -195 -70 -52.4214 -215 -70 -52.4214 -215 -70 -52.4214 -195 -70 -52.4214 -195 70 -52.4214 -215 70 -52.4214 -215 70 -192.421 -215 70 -52.4214 -195 70 -52.4214 -195 70 -192.421 -215 -70 -192.421 -215 70 -192.421 -195 70 -192.421 -195 -70 -192.421 -405 -46.8659 -122.596 -405 -45.2911 -134.557 -405 -58.0562 -141.89 -405 -68.2334 -141.89 -405 -69.9841 -122.596 -405 -45.2911 -134.557 -405 -42.2536 -141.89 -405 -58.0562 -141.89 -420.665 -31.4094 -122.421 -420.665 -31.4094 -122.421 -420.665 -31.3991 -122.5 -420.665 -30.3392 -130.551 -420.665 -30.3392 -130.551 -420.665 -27.2014 -106.717 -420.665 -27.2014 -106.717 -420.665 -26.0264 -105.185 -420.665 -17.393 -122.5 -420.665 -8.12927 -152.76 -420.665 -8.12927 -152.76 -420.665 -1.70367 -124.125 -420.665 -1.70367 -124.125 -420.665 -0.078524 -153.82 -420.665 -0.078524 -139.814 -420.665 -0.078524 -105.185 -420.665 0 -153.831 -420.665 0 -153.831 -420.665 1.20471 -124.508 -420.665 1.20471 -124.508 -420.665 15.7047 -149.623 -420.665 15.7047 -149.623 -420.665 17.2359 -122.5 -420.665 17.2359 -105.185 -405 -70 -122.421 -405 -70 -122.421 -405 -69.9841 -122.596 -405 -68.2652 -103.303 -405 -68.2334 -141.89 -405 -66.5144 -84.0089 -405 -66.4827 -161.184 -405 -65.1 -176.421 -405 -65.1 -176.421 -405 -65.1 -68.4214 -405 -65.1 -68.4214 -405 -58.0562 -122.596 -405 -58.0562 -103.303 -405 -54 -187.521 -405 -54 -187.521 -405 -54 -57.3213 -405 -54 -57.3213 -405 -46.8889 -122.421 -405 -46.8889 -122.421 -405 -46.8659 -122.596 -405 -45.2911 -110.286 -405 -45.2911 -110.286 -405 -42.3987 -103.303 -405 -42.2536 -141.89 -405 -40.6069 -145.866 -405 -40.6069 -145.866 -405 -40.6069 -98.9769 -405 -40.6069 -98.9769 -405 -38.7625 -188.904 -405 -38.7625 -180.478 -405 -38.7625 -161.184 -405 -38.7625 -84.0089 -405 -38.7625 -64.7151 -405 -38.7625 -55.9386 -405 -19.4687 -180.478 -405 -19.4687 -64.7151 -405 -2.40942 -122.421 -405 -2.40942 -122.421 -405 -2.32727 -123.045 -405 -2.32727 -123.045 -405 -2.32727 -121.798 -405 -2.32727 -121.798 -405 -2.08661 -123.626 -405 -2.08661 -123.626 -405 -2.08661 -121.217 -405 -2.08661 -121.217 -405 -1.70367 -124.125 -405 -1.70367 -124.125 -405 -1.70367 -120.718 -405 -1.70367 -120.718 -405 -1.20471 -124.508 -405 -1.20471 -124.508 -405 -1.20471 -120.335 -405 -1.20471 -120.335 -405 -0.623596 -124.749 -405 -0.623596 -124.749 -405 -0.623596 -120.094 -405 -0.623596 -120.094 -405 -0.174999 -180.478 -405 -0.174999 -64.7151 -405 0 -169.31 -405 0 -169.31 -405 0 -124.831 -405 0 -124.831 -405 0 -120.012 -405 0 -120.012 -405 0.623596 -124.749 -405 0.623596 -124.749 -405 0.623596 -120.094 -405 0.623596 -120.094 -405 1.20471 -124.508 -405 1.20471 -124.508 -405 1.20471 -120.335 -405 1.20471 -120.335 -405 1.70367 -124.125 -405 1.70367 -124.125 -405 1.70367 -120.718 -405 1.70367 -120.718 -405 2.08661 -123.626 -405 2.08661 -123.626 -405 2.08661 -121.217 -405 2.08661 -121.217 -405 2.32727 -123.045 -405 2.32727 -123.045 -405 2.32727 -121.798 -405 2.32727 -121.798 -405 2.40942 -122.421 -405 2.40942 -122.421 -405 19.1187 -180.478 -405 19.1187 -64.7151 -405 38.4125 -188.936 -405 38.4125 -180.478 -405 38.4125 -161.184 -405 38.4125 -84.0089 -405 38.4125 -64.7151 -405 38.4125 -55.9069 -405 54 -187.521 -405 54 -187.521 -405 54 -57.3213 -405 54 -57.3213 -405 57.7062 -161.184 -405 57.7062 -141.89 -405 57.7062 -122.596 -405 57.7062 -103.303 -405 57.7062 -84.0089 -405 65.1 -176.421 -405 65.1 -176.421 -405 65.1 -68.4214 -405 65.1 -68.4214 -405 66.4827 -161.184 -405 66.5144 -84.0089 -215 -70 -192.421 -215 -70 -122.421 -215 -70 -122.421 -215 -70 -52.4214 -215 0 -192.421 -215 0 -192.421 -215 0 -52.4214 -215 0 -52.4214 -215 70 -192.421 -215 70 -122.421 -215 70 -122.421 -215 70 -52.4214 -420.665 -30.3392 -114.292 -420.665 -27.2014 -138.126 -420.665 -22.2098 -144.631 -420.665 -22.2098 -100.212 -420.665 -22.2098 -100.212 -420.665 -15.7047 -149.623 -420.665 -15.7047 -95.22 -420.665 -15.7047 -95.22 -420.665 -8.12927 -92.0822 -420.665 -8.12927 -92.0822 -420.665 -2.40942 -122.421 -420.665 -2.32727 -123.045 -420.665 -2.32727 -121.798 -420.665 -2.08661 -123.626 -420.665 -2.08661 -121.217 -420.665 -1.70367 -120.718 -420.665 -1.20471 -124.508 -420.665 -1.20471 -120.335 -420.665 -0.623596 -124.749 -420.665 -0.623596 -120.094 -420.665 0 -124.831 -420.665 0 -120.012 -420.665 0 -91.012 -420.665 0 -91.012 -420.665 0.623596 -124.749 -420.665 0.623596 -120.094 -420.665 1.20471 -120.335 -420.665 1.70367 -124.125 -420.665 1.70367 -120.718 -420.665 2.08661 -123.626 -420.665 2.08661 -121.217 -420.665 2.32727 -123.045 -420.665 2.32727 -121.798 -420.665 2.40942 -122.421 -420.665 8.12927 -152.76 -420.665 8.12927 -92.0822 -420.665 8.12927 -92.0822 -420.665 15.7047 -95.22 -420.665 15.7047 -95.22 -420.665 17.2359 -148.448 -420.665 22.2098 -144.631 -420.665 22.2098 -144.631 -420.665 22.2098 -100.212 -420.665 22.2098 -100.212 -420.665 26.0264 -105.185 -420.665 27.2014 -138.126 -420.665 27.2014 -138.126 -420.665 27.2014 -106.717 -420.665 27.2014 -106.717 -420.665 30.3392 -130.551 -420.665 30.3392 -130.551 -420.665 30.3392 -114.292 -420.665 30.3392 -114.292 -420.665 31.4094 -122.421 -420.665 31.4094 -122.421 -405 -65.1 -176.421 -405 -65.1 -68.4214 -405 -60 -176.421 -405 -60 -68.4214 -405 -58.4471 -176.626 -405 -58.4471 -68.2168 -405 -57 -177.225 -405 -57 -67.6176 -405 -55.7574 -178.179 -405 -55.7574 -66.6639 -405 -54.8038 -179.421 -405 -54.8038 -65.4214 -405 -54.2045 -180.868 -405 -54.2045 -63.9742 -405 -54 -187.521 -405 -54 -182.421 -405 -54 -62.4214 -405 -54 -57.3213 -405 -45.2911 -134.557 -405 -33.1554 -155.577 -405 -33.1554 -89.2659 -405 -23.4444 -163.028 -405 -23.4444 -81.8145 -405 -12.1357 -167.712 -405 -12.1357 -77.1301 -405 -0.000122 -52.4214 -405 0 -192.421 -405 0 -75.5325 -405 12.1357 -167.712 -405 12.1357 -77.1301 -405 23.4444 -163.028 -405 23.4444 -81.8145 -405 33.1554 -155.577 -405 33.1554 -89.2659 -405 40.6069 -145.866 -405 40.6069 -98.9769 -405 45.2911 -134.557 -405 45.2911 -110.286 -405 46.8889 -122.421 -405 54 -187.521 -405 54 -182.421 -405 54 -62.4214 -405 54 -57.3213 -405 54.2045 -180.868 -405 54.2045 -63.9742 -405 54.8038 -179.421 -405 54.8038 -65.4214 -405 55.7574 -178.179 -405 55.7574 -66.6639 -405 57 -177.225 -405 57 -67.6176 -405 58.4471 -176.626 -405 58.4471 -68.2168 -405 60 -176.421 -405 60 -68.4214 -405 65.1 -176.421 -405 65.1 -68.4214 -405 70 -122.421 -215 -65.1 -176.421 -215 -65.1 -176.421 -215 -65.1 -68.4214 -215 -65.1 -68.4214 -215 -60 -176.421 -215 -60 -68.4214 -215 -58.4471 -176.626 -215 -58.4471 -68.2168 -215 -57 -177.225 -215 -57 -67.6176 -215 -55.7574 -178.179 -215 -55.7574 -66.6639 -215 -54.8038 -179.421 -215 -54.8038 -65.4214 -215 -54.2045 -180.868 -215 -54.2045 -63.9742 -215 -54 -187.521 -215 -54 -187.521 -215 -54 -182.421 -215 -54 -62.4214 -215 -54 -57.3213 -215 -54 -57.3213 -215 54 -187.521 -215 54 -187.521 -215 54 -182.421 -215 54 -62.4214 -215 54 -57.3213 -215 54 -57.3213 -215 54.2045 -180.868 -215 54.2045 -63.9742 -215 54.8038 -179.421 -215 54.8038 -65.4214 -215 55.7574 -178.179 -215 55.7574 -66.6639 -215 57 -177.225 -215 57 -67.6176 -215 58.4471 -176.626 -215 58.4471 -68.2168 -215 60 -176.421 -215 60 -68.4214 -215 65.1 -176.421 -215 65.1 -176.421 -215 65.1 -68.4214 -215 65.1 -68.4214 72.7724 -325 18.1438 71.6947 -329.774 2.73035 61.763 -342.274 -9.10571 46.7711 -357.725 -12.8436 32.4454 -370.225 -7.05554 24.2574 -375 6.04773 25.3355 -370.225 21.4607 35.2671 -357.725 33.2966 50.2589 -342.275 37.0345 64.5847 -329.775 31.2466 93.4748 -329.775 38.4497 91.2777 -342.275 47.2617 91.2777 -357.725 47.2617 93.4748 -370.225 38.4497 97.0297 -375 24.1919 100.585 -370.225 9.93347 102.782 -357.725 1.12146 102.782 -342.274 1.12146 100.585 -329.774 9.93347 97.0297 -325 24.1919 72.7724 -325 18.1438 97.0297 -325 24.1919 100.585 -329.774 9.93347 71.6947 -329.774 2.73035 71.6947 -329.774 2.73035 100.585 -329.774 9.93347 102.782 -342.274 1.12146 61.763 -342.274 -9.10571 61.763 -342.274 -9.10571 102.782 -342.274 1.12146 102.782 -357.725 1.12146 46.7711 -357.725 -12.8436 46.7711 -357.725 -12.8436 102.782 -357.725 1.12146 100.585 -370.225 9.93347 32.4454 -370.225 -7.05554 32.4454 -370.225 -7.05554 100.585 -370.225 9.93347 97.0297 -375 24.1919 24.2574 -375 6.04773 24.2574 -375 6.04773 97.0297 -375 24.1919 93.4748 -370.225 38.4497 25.3355 -370.225 21.4607 25.3355 -370.225 21.4607 93.4748 -370.225 38.4497 91.2777 -357.725 47.2617 35.2671 -357.725 33.2966 35.2671 -357.725 33.2966 91.2777 -357.725 47.2617 91.2777 -342.275 47.2617 50.2589 -342.275 37.0345 50.2589 -342.275 37.0345 91.2777 -342.275 47.2617 93.4748 -329.775 38.4497 64.5847 -329.775 31.2466 64.5847 -329.775 31.2466 93.4748 -329.775 38.4497 97.0297 -325 24.1919 72.7724 -325 18.1438 91.2777 -342.275 47.262 91.2777 -342.275 47.262 91.2777 -357.725 47.262 91.2777 -357.725 47.262 93.4748 -329.775 38.45 93.4748 -329.775 38.45 93.4748 -370.225 38.45 93.4748 -370.225 38.45 97.0297 -325 24.1919 97.0297 -325 24.1919 97.0298 -375 24.1918 97.0298 -375 24.1918 100.585 -370.225 9.93372 100.585 -370.225 9.93372 100.585 -329.775 9.93372 100.585 -329.775 9.93372 102.782 -357.725 1.1217 102.782 -357.725 1.1217 102.782 -342.275 1.1217 102.782 -342.275 1.1217 118.04 -327.281 44.575 118.21 -339.541 53.9769 118.21 -339.541 53.9769 120.692 -322.598 30.0914 120.692 -322.598 30.0914 120.692 -322.598 30.0914 121.134 -354.695 54.7061 125.15 -327.281 16.0586 125.698 -366.955 46.484 125.698 -366.955 46.484 125.698 -366.955 46.484 129.714 -339.541 7.83655 129.714 -339.541 7.83655 130.156 -371.638 32.4512 130.156 -371.638 32.4512 132.638 -354.695 8.5658 132.638 -354.695 8.5658 132.807 -366.955 17.9678 132.807 -366.955 17.9678 141.662 -319.896 50.4645 141.662 -319.896 50.4645 141.662 -319.896 50.4645 143.444 -315.485 35.7643 143.444 -315.485 35.7643 143.444 -315.485 35.7643 144.107 -331.445 60.4337 144.107 -331.445 60.4337 148.772 -319.896 21.9481 148.772 -319.896 21.9481 149.844 -345.719 61.8641 149.844 -345.719 61.8641 155.611 -331.445 14.2935 156.682 -357.268 54.2094 161.348 -345.719 15.7238 161.348 -345.719 15.7238 162.01 -361.679 40.3932 162.01 -361.679 40.3932 163.432 -307.904 55.8923 163.432 -307.904 55.8923 163.792 -357.268 25.6931 163.792 -357.268 25.6931 164.413 -303.934 40.9924 164.413 -303.934 40.9924 164.413 -303.934 40.9924 167.973 -318.297 66.3844 167.973 -318.297 66.3844 170.542 -307.904 27.376 170.542 -307.904 27.376 176.302 -331.144 68.4609 176.302 -331.144 68.4609 179.477 -318.297 20.244 182.513 -291.765 60.6498 182.792 -288.388 45.575 182.792 -288.388 45.575 182.792 -288.388 45.575 185.238 -341.537 61.3291 187.806 -331.144 22.3207 187.806 -331.144 22.3207 188.893 -300.603 71.6001 189.623 -291.764 32.1335 189.623 -291.764 32.1335 191.367 -345.507 47.7126 192.348 -341.537 32.8129 192.348 -341.537 32.8129 197.876 -269.446 49.3357 198.173 -272.099 64.5542 199.493 -311.529 74.2432 199.493 -311.529 74.2432 200.397 -300.603 25.4598 205.283 -272.099 36.038 205.283 -272.099 36.038 206.061 -279.044 75.8806 206.061 -279.044 75.8806 209.084 -247.835 52.1301 209.084 -247.835 52.1301 209.084 -247.835 52.1301 209.809 -249.663 67.4554 209.809 -249.663 67.4554 210.267 -320.368 67.5695 210.267 -320.368 67.5695 210.267 -320.368 67.5695 210.997 -311.529 28.1029 210.997 -311.529 28.1029 215.986 -224.386 53.851 215.986 -224.386 53.851 215.986 -224.386 53.851 216.919 -249.663 38.9392 216.919 -249.663 38.9392 216.919 -249.663 38.9392 216.975 -225.318 69.2421 216.975 -225.318 69.2421 216.975 -225.318 69.2421 217.098 -323.744 54.1282 217.377 -320.368 39.0532 217.377 -320.368 39.0532 217.565 -279.044 29.7404 217.565 -279.044 29.7404 218.317 -200 54.4321 218.317 -200 54.4321 218.526 -287.628 78.9885 218.526 -287.628 78.9885 218.818 -254.446 79.0613 218.818 -254.446 79.0613 219.394 -200 69.8453 219.394 -200 69.8453 224.085 -225.318 40.7257 224.085 -225.318 40.7257 224.085 -225.318 40.7257 226.504 -200 41.329 226.504 -200 41.329 226.673 -227.756 81.02 229.326 -200 81.6813 229.326 -200 81.6813 230.03 -287.628 32.8483 230.322 -254.446 32.921 230.322 -254.446 32.921 230.808 -294.572 72.6909 230.808 -294.572 72.6909 232.668 -260.359 82.5146 232.668 -260.359 82.5146 237.918 -294.572 44.1747 237.918 -294.572 44.1747 238.177 -227.756 34.8796 238.177 -227.756 34.8796 238.215 -297.225 59.3932 238.215 -297.225 59.3932 240.83 -200 35.541 240.83 -200 35.541 241.377 -230.771 84.686 241.377 -230.771 84.686 244.172 -260.359 36.3744 244.172 -260.359 36.3744 244.318 -200 85.4192 244.318 -200 85.4192 246.071 -265.143 76.4965 246.071 -265.143 76.4965 252.881 -230.771 38.5457 253.181 -265.142 47.9802 253.906 -266.97 63.3055 253.906 -266.97 63.3055 255.47 -233.209 78.84 255.822 -200 39.2789 255.822 -200 39.2789 258.644 -200 79.6312 258.644 -200 79.6312 262.58 -233.209 50.3237 262.58 -233.209 50.3237 263.569 -234.141 65.7147 263.569 -234.141 65.7147 265.753 -200 51.115 265.753 -200 51.115 266.831 -200 66.5282 266.831 -200 66.5282 258.644 -200 79.6313 244.318 -200 85.4193 229.326 -200 81.6814 219.394 -200 69.8453 218.317 -200 54.4321 226.504 -200 41.3291 240.83 -200 35.5411 255.822 -200 39.2791 265.754 -200 51.1151 266.831 -200 66.5283 266.831 -117 66.5283 265.754 -117 51.1151 255.822 -117 39.2791 240.83 -117 35.5411 226.504 -117 41.3291 218.317 -117 54.4321 219.394 -117 69.8453 229.326 -117 81.6814 244.318 -117 85.4193 258.644 -117 79.6313 258.644 -200 79.6313 258.644 -117 79.6313 244.318 -117 85.4193 244.318 -200 85.4193 244.318 -200 85.4193 244.318 -117 85.4193 229.326 -117 81.6814 229.326 -200 81.6814 229.326 -200 81.6814 229.326 -117 81.6814 219.394 -117 69.8453 219.394 -200 69.8453 219.394 -200 69.8453 219.394 -117 69.8453 218.317 -117 54.4321 218.317 -200 54.4321 218.317 -200 54.4321 218.317 -117 54.4321 226.504 -117 41.3291 226.504 -200 41.3291 226.504 -200 41.3291 226.504 -117 41.3291 240.83 -117 35.5411 240.83 -200 35.5411 240.83 -200 35.5411 240.83 -117 35.5411 255.822 -117 39.2791 255.822 -200 39.2791 255.822 -200 39.2791 255.822 -117 39.2791 265.754 -117 51.1151 265.754 -200 51.1151 265.754 -200 51.1151 265.754 -117 51.1151 266.831 -117 66.5283 266.831 -200 66.5283 266.831 -200 66.5283 266.831 -117 66.5283 258.644 -117 79.6313 258.644 -200 79.6313 209.797 -147 5.93042 212.64 -147 6.63916 212.64 -147 90.4143 188.733 -147 90.4143 281.488 -147 90.4143 275.351 -147 115.03 188.024 -147 93.2571 188.733 -147 90.4143 188.024 -147 93.2571 188.024 -117 93.2571 209.797 -117 5.93042 209.797 -147 5.93042 209.797 -147 5.93042 209.797 -117 5.93042 297.124 -117 27.7034 297.124 -147 27.7034 297.124 -147 27.7034 297.124 -117 27.7034 275.351 -117 115.03 275.351 -147 115.03 275.351 -147 115.03 275.351 -117 115.03 188.024 -117 93.2571 188.024 -147 93.2571 188.733 -117 90.4143 188.024 -117 93.2571 275.351 -117 115.03 281.488 -117 90.4143 297.124 -117 27.7034 272.508 -117 21.566 272.508 -117 90.4143 281.488 -117 90.4143 218.317 -147 54.4321 218.317 -117 54.4321 219.394 -147 69.8455 219.394 -117 69.8455 226.504 -147 41.3291 226.504 -117 41.3291 229.326 -147 81.6814 229.326 -117 81.6814 240.83 -147 35.5411 240.83 -117 35.5411 244.318 -147 85.4193 244.318 -117 85.4193 255.822 -147 39.2791 255.822 -117 39.2791 258.644 -147 79.6313 258.644 -117 79.6313 265.753 -147 51.1151 265.753 -117 51.1151 266.831 -147 66.5283 266.831 -117 66.5283 188.733 -117 90.4143 196.23 -117 60.3438 203.728 -117 30.2732 209.797 -117 5.93042 212.367 -117 6.57117 212.367 -117 30.2732 212.367 -117 60.3438 212.367 -117 90.4143 212.64 -147 6.63916 212.64 -147 30.2732 212.64 -147 60.3438 212.64 -147 90.4143 218.73 -117 60.3438 242.438 -117 14.0686 242.438 -117 30.2732 242.438 -117 35.942 242.438 -117 90.4143 242.71 -147 14.1366 242.71 -147 30.2732 242.71 -147 36.01 242.71 -147 90.4143 266.399 -147 60.3438 272.508 -117 21.566 272.508 -117 30.2732 272.508 -117 60.3438 272.508 -117 90.4143 272.781 -147 21.634 272.781 -147 30.2732 272.781 -147 60.3438 272.781 -147 90.4143 281.488 -147 90.4143 288.986 -147 60.3438 296.483 -147 30.2732 297.124 -147 27.7034 420.899 88.9999 18.4998 401.5 88.9999 -0.899536 375 88.9999 -8.00024 348.5 88.9999 -0.899536 329.101 88.9999 18.4998 322 88.9999 44.9998 329.101 88.9999 71.4998 348.5 88.9999 90.899 375 88.9999 97.9998 401.5 88.9999 90.899 420.899 88.9999 71.4998 428 88.9999 44.9998 428 84.9999 44.9998 420.899 84.9999 71.4998 401.5 84.9999 90.899 375 84.9999 97.9998 348.5 84.9999 90.899 329.101 84.9999 71.4998 322 84.9999 44.9998 329.101 84.9999 18.4998 348.5 84.9999 -0.899536 375 84.9999 -8.00024 401.5 84.9999 -0.899536 420.899 84.9999 18.4998 420.899 88.9999 18.4998 420.899 84.9999 18.4998 401.5 84.9999 -0.899536 401.5 88.9999 -0.899536 401.5 88.9999 -0.899536 401.5 84.9999 -0.899536 375 84.9999 -8.00024 375 88.9999 -8.00024 375 88.9999 -8.00024 375 84.9999 -8.00024 348.5 84.9999 -0.899536 348.5 88.9999 -0.899536 348.5 88.9999 -0.899536 348.5 84.9999 -0.899536 329.101 84.9999 18.4998 329.101 88.9999 18.4998 329.101 88.9999 18.4998 329.101 84.9999 18.4998 322 84.9999 44.9998 322 88.9999 44.9998 322 88.9999 44.9998 322 84.9999 44.9998 329.101 84.9999 71.4998 329.101 88.9999 71.4998 329.101 88.9999 71.4998 329.101 84.9999 71.4998 348.5 84.9999 90.899 348.5 88.9999 90.899 348.5 88.9999 90.899 348.5 84.9999 90.899 375 84.9999 97.9998 375 88.9999 97.9998 375 88.9999 97.9998 375 84.9999 97.9998 401.5 84.9999 90.899 401.5 88.9999 90.899 401.5 88.9999 90.899 401.5 84.9999 90.899 420.899 84.9999 71.4998 420.899 88.9999 71.4998 420.899 88.9999 71.4998 420.899 84.9999 71.4998 428 84.9999 44.9998 428 88.9999 44.9998 428 88.9999 44.9998 428 84.9999 44.9998 420.899 84.9999 18.4998 420.899 88.9999 18.4998 152.7 -69.9997 -55.5785 124.482 -69.9997 -104.453 81.25 -69.9997 -140.729 28.2178 -69.9997 -160.031 -28.2178 -69.9997 -160.031 -81.25 -69.9997 -140.729 -124.482 -69.9997 -104.453 -152.7 -69.9997 -55.5785 -162.5 -69.9997 -0.000244 -152.7 -69.9997 55.578 -124.482 -69.9997 104.453 -81.25 -69.9997 140.729 -28.2178 -69.9997 160.031 28.2178 -69.9997 160.031 81.25 -69.9997 140.729 124.482 -69.9997 104.453 152.7 -69.9997 55.578 162.5 -69.9997 -0.000244 162.5 -131.5 -0.000244 152.7 -131.5 55.578 124.482 -131.5 104.453 81.25 -131.5 140.729 28.2178 -131.5 160.031 -28.2178 -131.5 160.031 -81.25 -131.5 140.729 -124.482 -131.5 104.453 -152.7 -131.5 55.578 -162.5 -131.5 -0.000244 -152.7 -131.5 -55.5785 -124.482 -131.5 -104.453 -81.25 -131.5 -140.729 -28.2178 -131.5 -160.031 28.2178 -131.5 -160.031 81.25 -131.5 -140.729 124.482 -131.5 -104.453 152.7 -131.5 -55.5785 152.7 -69.9997 -55.5785 152.7 -131.5 -55.5785 124.482 -131.5 -104.453 124.482 -69.9997 -104.453 124.482 -69.9997 -104.453 124.482 -131.5 -104.453 81.25 -131.5 -140.729 81.25 -69.9997 -140.729 81.25 -69.9997 -140.729 81.25 -131.5 -140.729 28.2178 -131.5 -160.031 28.2178 -69.9997 -160.031 28.2178 -69.9997 -160.031 28.2178 -131.5 -160.031 -28.2178 -131.5 -160.031 -28.2178 -69.9997 -160.031 -28.2178 -69.9997 -160.031 -28.2178 -131.5 -160.031 -81.25 -131.5 -140.729 -81.25 -69.9997 -140.729 -81.25 -69.9997 -140.729 -81.25 -131.5 -140.729 -124.482 -131.5 -104.453 -124.482 -69.9997 -104.453 -124.482 -69.9997 -104.453 -124.482 -131.5 -104.453 -152.7 -131.5 -55.5785 -152.7 -69.9997 -55.5785 -152.7 -69.9997 -55.5785 -152.7 -131.5 -55.5785 -162.5 -131.5 -0.000244 -162.5 -69.9997 -0.000244 -162.5 -69.9997 -0.000244 -162.5 -131.5 -0.000244 -152.7 -131.5 55.578 -152.7 -69.9997 55.578 -152.7 -69.9997 55.578 -152.7 -131.5 55.578 -124.482 -131.5 104.453 -124.482 -69.9997 104.453 -124.482 -69.9997 104.453 -124.482 -131.5 104.453 -81.25 -131.5 140.729 -81.25 -69.9997 140.729 -81.25 -69.9997 140.729 -81.25 -131.5 140.729 -28.2178 -131.5 160.031 -28.2178 -69.9997 160.031 -28.2178 -69.9997 160.031 -28.2178 -131.5 160.031 28.2178 -131.5 160.031 28.2178 -69.9997 160.031 28.2178 -69.9997 160.031 28.2178 -131.5 160.031 81.25 -131.5 140.729 81.25 -69.9997 140.729 81.25 -69.9997 140.729 81.25 -131.5 140.729 124.482 -131.5 104.453 124.482 -69.9997 104.453 124.482 -69.9997 104.453 124.482 -131.5 104.453 152.7 -131.5 55.578 152.7 -69.9997 55.578 152.7 -69.9997 55.578 152.7 -131.5 55.578 162.5 -131.5 -0.000244 162.5 -69.9997 -0.000244 162.5 -69.9997 -0.000244 162.5 -131.5 -0.000244 152.7 -131.5 -55.5785 152.7 -69.9997 -55.5785 176.109 85.0005 -78.8334 176.109 66.0006 -98.2223 105.001 66.0006 -112.69 105.001 66.0006 202.689 105.001 66.0006 -112.69 176.109 66.0006 -98.2223 176.109 66.0006 188.222 176.109 66.0006 188.222 176.109 66.0006 -98.2223 176.109 85.0005 -78.8334 176.109 85.0005 168.833 176.109 85.0005 168.833 176.109 85.0005 -78.8334 105.001 66.0006 -112.69 105.001 66.0006 202.689 176.109 85.0005 168.833 105.001 66.0006 202.689 176.109 66.0006 188.222 -54.636 -69.9988 -172.133 -54.636 -69.9988 -172.133 -54.636 -69.9988 -172.133 -54.636 -69.9988 -172.133 -26.9996 -82.0001 -220.001 -26.9996 -82.0001 -220.001 0.000336 -82.0001 -183.001 0.000336 -82.0001 -183.001 0.000336 -69.9988 -183.001 0.000336 -69.9988 -183.001 27.0003 -82.0001 -220.001 27.0003 -82.0001 -220.001 27.0003 -82.0001 -220.001 54.6369 -69.9988 -172.133 54.6369 -69.9988 -172.133 54.6369 -69.9988 -172.133 76.1397 -50.0001 -134.889 76.1397 -50.0001 -134.889 89.4905 -69.9988 -111.765 89.4905 -69.9988 -111.765 89.4905 -69.9988 -111.765 -70.6758 -69.9988 -144.351 -70.6758 -69.9988 -144.351 -60.1318 -50.0001 -162.614 -54.636 -82.0001 -172.133 -26.9996 -50.0001 -220.001 -26.9996 -50.0001 -220.001 27.0003 -50.0001 -220.001 27.0003 -50.0001 -220.001 54.6369 -82.0001 -172.133 54.6369 -69.9988 -172.133 494 -81.3172 126.317 494 -82.896 123.954 494 -65.6006 123.954 494 -50.0703 139.803 494 -61.1344 139.803 494 49.2751 147.727 494 44.0086 151.246 494 21.861 155.651 494 16.1358 155.651 494 16.1358 147.727 494 -15.5611 147.727 494 -15.5611 155.651 494 -21.861 155.651 494 -44.0085 151.246 494 -49.275 147.727 494 -55.1821 143.78 494 -55.1821 143.765 494 -47.2579 143.765 494 -47.2579 147.727 494 -49.275 147.727 494 -94.8032 92.2576 494 -86.879 92.2576 494 -86.879 116.03 494 -88.1908 116.03 494 -94.8032 106.134 494 49.2751 147.727 494 47.8327 147.727 494 47.8327 143.765 494 55.2049 143.765 494 47.8327 139.874 494 47.8327 147.727 494 16.1358 147.727 494 16.1358 139.874 494 -86.879 -27.9937 494 -86.879 -2.83301 494 -94.8032 -2.83301 494 -94.8032 -16.1342 494 -94.8032 -2.83301 494 -85.0001 -2.83301 494 -85.0001 92.2576 494 -94.8032 92.2576 494 -15.5611 155.651 494 -15.5611 139.874 494 16.1358 139.874 494 16.1358 155.651 494 -15.5611 139.874 494 -15.5611 147.727 494 -47.2579 147.727 494 -47.2579 139.874 494 -85.0001 104.157 494 -78.9548 110.327 494 -78.9548 116.03 494 -86.879 116.03 494 -86.879 108.106 494 -85.0001 104.157 494 -86.879 108.106 494 -86.879 92.2576 494 -85.0001 92.2576 494 -88.1908 116.03 494 -78.9548 116.03 494 -78.9548 123.954 494 -82.896 123.954 494 81.3173 126.317 494 61.1345 139.803 494 50.07 139.803 494 81.1303 108.106 494 93.4856 108.106 494 61.1345 139.803 494 55.2049 143.765 494 51.7948 143.765 494 49.9999 139.874 494 50.07 139.803 494 51.7948 143.765 494 47.8327 143.765 494 47.8327 139.874 494 49.9999 139.874 494 -50.0703 139.803 494 -50.0002 139.874 494 -51.22 143.765 494 -55.1821 143.765 494 -55.1821 139.803 494 -50.0002 139.874 494 -47.2579 139.874 494 -47.2579 143.765 494 -51.22 143.765 494 21.861 155.651 494 -0.000113 160 494 -21.861 155.651 438.071 -85.0001 44.9998 438.071 -85.0001 44.9998 438.073 84.9999 44.9998 438.073 84.9999 44.9998 456.184 -0.000108 147.568 456.184 -0.000108 147.568 456.184 -0.000281 -57.5688 456.184 -0.000281 -57.5688 462.965 -85.0001 110.471 462.965 -85.0001 110.471 462.965 -85.0001 110.471 462.965 -85.0001 -20.4718 462.965 -85.0001 -20.4718 462.965 -85.0001 -20.4718 462.965 84.9999 110.472 462.965 84.9999 110.472 462.965 84.9999 110.472 462.965 84.9999 -20.4718 462.965 84.9999 -20.4718 462.965 84.9999 -20.4718 469 -115 44.9998 469 -115 44.9998 469 -115 44.9998 469 -115 44.9998 469 -0.000114 -70.0002 469 -0.000114 -70.0002 469 -0.000114 -70.0002 469 -0.000114 -70.0002 469 -0.000114 160 469 -0.000114 160 469 -0.000114 160 469 -0.000114 160 469 115 44.9998 469 115 44.9998 469 115 44.9998 494 -94.8032 -16.1342 494 -94.8032 106.134 494 -86.879 -18.6814 494 -86.879 -2.83301 494 -85.0001 -2.83301 494 -60.2737 -50.3783 494 -60.2737 -50.3783 494 -55.1821 -50.3783 494 55.7569 -50.3783 494 60.2738 -50.3783 494 60.2738 -50.3783 494 81.1303 108.106 494 87.4538 -27.1335 494 87.4538 -18.6814 494 87.4538 108.106 494 93.1014 -18.6814 494 93.4856 108.106 494 -115 44.9998 494 -115 44.9998 494 -106.246 0.991211 494 -106.246 0.991211 494 -106.246 89.0084 494 -106.246 89.0084 494 -85.0001 -14.1578 494 -85.0001 -14.1578 494 -85.0001 104.157 494 -81.3172 -36.3174 494 -81.3172 -36.3174 494 -81.3172 126.317 494 -50.0002 139.874 494 -44.0085 -61.2463 494 -44.0085 -61.2463 494 -44.0085 151.246 494 -0.000113 -70.0002 494 -0.000113 -70.0002 494 -0.000113 160 494 44.0086 -61.2463 494 44.0086 -61.2463 494 44.0086 151.246 494 49.9999 139.874 494 81.3173 -36.3174 494 81.3173 -36.3174 494 81.3173 126.317 494 84.9999 104.157 494 84.9999 104.157 494 106.246 0.991211 494 106.246 0.991211 494 106.246 89.0084 494 106.246 89.0084 445.292 -85.0001 9.79114 445.292 -85.0001 9.79114 445.292 -85.0001 80.2086 445.292 -85.0001 80.2086 445.292 84.9999 9.79224 445.292 84.9999 9.79224 445.292 84.9999 80.2075 445.292 84.9999 80.2075 460.622 -75.5709 120.571 460.622 -75.5709 -30.5708 460.622 75.5705 120.571 460.622 75.5708 -30.5712 463.284 41.8867 146.124 463.284 41.8867 146.124 463.284 -41.8872 -56.1239 463.284 -41.8872 -56.1239 463.284 -41.8871 146.124 463.284 -41.8871 146.124 463.285 41.887 -56.1246 463.285 41.887 -56.1246 467.307 -50 -55.3054 467.307 -49.9999 145.305 467.307 50 145.305 467.307 50.0002 -55.3063 469 -106.246 0.991211 469 -106.246 0.991211 469 -106.246 0.991211 469 -106.246 89.0084 469 -106.246 89.0084 469 -106.246 89.0084 469 -81.3172 -36.3174 469 -81.3172 -36.3174 469 -81.3172 126.317 469 -81.3172 126.317 469 -44.0085 -61.2463 469 -44.0085 -61.2463 469 -44.0085 -61.2463 469 -44.0085 151.246 469 -44.0085 151.246 469 -44.0085 151.246 469 44.0086 -61.2463 469 44.0086 -61.2463 469 44.0086 -61.2463 469 44.0086 151.246 469 44.0086 151.246 469 44.0086 151.246 469 81.3173 -36.3174 469 81.3173 -36.3174 469 81.3173 126.317 469 81.3173 126.317 469 106.246 0.991211 469 106.246 0.991211 469 106.246 0.991211 469 106.246 89.0084 469 106.246 89.0084 469 106.246 89.0084 469 115 44.9998 494 -50.0001 -49.8746 494 49.9998 -49.8756 494 84.9999 -14.1572 494 115 44.9998 494 -86.879 -27.9937 494 -55.1821 139.803 494 -55.1821 143.78 494 -61.1344 139.803 494 -78.9548 123.954 494 -78.9548 110.327 494 -65.6006 123.954 179.539 -116.994 98.3558 179.539 -116.994 98.3558 179.539 -116.994 98.3558 204.699 -116.994 -2.55505 204.699 -116.994 -2.55505 204.699 -116.994 -2.55505 211.776 -69.9942 106.395 211.776 -69.9942 106.395 211.777 -116.994 106.394 211.777 -116.994 106.394 211.777 -116.994 106.394 211.777 -156.994 106.394 211.777 -156.994 106.394 211.777 -156.994 106.394 236.937 -156.994 5.48279 236.937 -156.994 5.48279 236.937 -156.994 5.48279 236.937 -116.994 5.48303 236.937 -116.994 5.48303 236.937 -116.994 5.48303 236.937 -69.9941 5.48169 236.937 -69.9941 5.48169 140.936 -69.9944 95.0626 140.936 -69.9944 95.0626 140.936 -156.994 95.0625 140.936 -156.994 95.0625 164.95 -69.9943 41.1265 164.951 -156.994 41.1263 169.069 -69.9943 -17.77 169.069 -69.9943 -17.77 169.069 -156.994 -17.7701 169.069 -156.994 -17.7701 179.539 -156.994 98.3557 179.539 -156.994 98.3557 196.482 -156.995 132.529 196.482 -156.995 132.529 196.482 -69.9942 132.529 196.482 -69.9942 132.529 204.699 -156.994 -2.55518 204.699 -156.994 -2.55518 235.702 -156.994 -24.7736 235.702 -156.994 -24.7736 235.702 -69.9941 -24.7736 235.702 -69.9941 -24.7736 -195 -66.0001 263.725 -195 -66.0001 263.725 -195 -82.0002 267.421 -195 -82.0002 267.421 -195 -65.9999 -193.422 -195 -65.9999 -193.422 -195 -65.9999 -193.422 -195 -69.9992 -169.644 -195 -69.9992 -169.644 -195 -82.0001 -177.422 -195 -82.0001 -177.422 -172 -82.0001 -177.422 -172 -82.0001 -177.422 -172 -82.0001 -177.422 -159.999 -69.9992 -162.523 -159.999 -69.9992 -162.523 -156 -66.0001 283.421 -156 -66.0001 283.421 -156 -66.0001 283.421 -156 -66.0001 255.79 -156 -66.0001 255.79 -195 -66.0001 283.421 -195 -66.0001 283.421 -195 -69.9992 259.644 -195 -65.9999 -173.726 -172 -82.0002 267.421 -172 -82.0002 267.421 -159.999 -69.9992 252.523 -156 -65.9999 -165.791 -156 -65.9999 -193.422 -156 -65.9999 -193.422 -156 66 -193.422 -195 66 -193.422 -195 82.0002 -177.422 -172 82.0002 -177.422 -172 82.0002 -177.422 -172 82.0002 267.421 -156 66.0001 283.421 -156 66 -193.422 -156 66 -193.422 -156 66.0001 283.421 -195 66.0001 283.421 -195 66 -193.422 -195 66 -193.422 -195 66.0001 283.421 -195 82.0002 267.421 -195 82.0002 -177.422 -195 82.0002 -177.422 -195 82.0002 267.421 -172 82.0002 267.421 -172 82.0002 -177.422 -172 82.0002 267.421 -195 82.0002 267.421 -195 66.0001 283.421 -156 66.0001 283.421 -147 49.9999 -232.578 -147 49.9999 -232.578 -147 49.9999 -180.288 -147 49.9999 -180.288 -147 65.9999 -163.96 -147 65.9999 -163.96 -147 65.9999 -216.25 -147 65.9999 -216.25 -141.004 49.9999 -205.531 -141.003 65.9999 -189.203 -121.069 49.9999 -181.131 -121.068 65.9999 -164.803 -95.7594 49.9999 -169.863 -95.7594 49.9999 -169.863 -95.7593 65.9999 -153.535 -95.7593 65.9999 -153.535 -147 -50.0001 -232.578 -147 -50.0001 -232.578 -147 -50.0001 -180.288 -147 -50.0001 -180.288 -147 49.9999 -232.578 -147 49.9999 -232.578 -147 49.9999 -180.288 -147 49.9999 -180.288 -141.004 -50.0001 -205.531 -141.004 49.9999 -205.531 -121.069 -50.0001 -181.131 -121.069 49.9999 -181.131 -95.7595 -50.0001 -169.863 -95.7595 -50.0001 -169.863 -95.7594 49.9999 -169.863 -95.7594 49.9999 -169.863 -147 -50.0001 -232.578 -147 -50.0001 -232.578 -147 -50.0001 -180.288 -147 -50.0001 -180.288 -147 -66.0001 -216.25 -147 -66.0001 -216.25 -147 -66.0001 -163.96 -147 -66.0001 -163.96 -141.004 -50.0001 -205.531 -141.003 -66.0001 -189.203 -121.069 -50.0001 -181.131 -121.068 -66.0001 -164.803 -95.7594 -50.0001 -169.863 -95.7594 -50.0001 -169.863 -95.7593 -66.0001 -153.535 -95.7593 -66.0001 -153.535 -195 -66.0001 -260 -195 -66.0001 -260 -195 -66.0001 -173.725 -195 -66.0001 -173.725 -195 -50 -190.053 -195 49.9999 -190.053 -195 65.9999 -260 -195 65.9999 -260 -195 65.9999 -173.725 -195 65.9999 -173.725 -147 -66.0001 -259.999 -147 -66.0001 -259.999 -147 -66.0001 -163.959 -147 -66.0001 -163.959 -147 -50.0001 -180.287 -147 50 -180.287 -147 65.9999 -259.999 -147 65.9999 -259.999 -147 65.9999 -163.959 -147 65.9999 -163.959 285 -66.0001 182.396 285 -66.0001 182.396 285 -66.0001 258.343 285 -66.0001 258.343 285 49.9999 182.396 285 65.9999 166.068 285 65.9999 166.068 285 65.9999 258.343 285 65.9999 258.343 330 -66.0001 173.24 330 -66.0001 173.24 330 -66.0001 249.186 330 -66.0001 249.186 330 49.9999 173.24 330 65.9999 156.912 330 65.9999 156.912 330 65.9999 249.187 330 65.9999 249.187 -147 -50.0001 270.287 -147 -50.0001 270.287 -147 -50.0001 322.577 -147 -50.0001 322.577 -147 -66.0001 253.959 -147 -66.0001 253.959 -147 -66.0001 306.25 -147 -66.0001 306.25 -141.004 -50.0001 295.53 -141.004 -66.0001 279.202 -121.069 -50.0001 271.131 -121.069 -66.0001 254.803 -95.7596 -50.0001 259.862 -95.7596 -50.0001 259.862 -95.7595 -66.0001 243.534 -95.7595 -66.0001 243.534 -195 -66.0001 263.725 -195 -66.0001 263.725 -195 -66.0001 356 -195 -66.0001 356 -195 -50.0001 280.053 -195 49.9999 280.053 -195 65.9999 263.725 -195 65.9999 263.725 -195 65.9999 356 -195 65.9999 356 -147 -66.0001 253.958 -147 -66.0001 253.958 -147 -66.0001 346.233 -147 -66.0001 346.233 -147 -50.0001 270.286 -147 49.9999 270.286 -147 65.9999 253.958 -147 65.9999 253.958 -147 65.9999 346.233 -147 65.9999 346.233 -147 -50.0001 270.287 -147 -50.0001 270.287 -147 -50.0001 322.577 -147 -50.0001 322.577 -147 49.9999 270.287 -147 49.9999 270.287 -147 49.9999 322.577 -147 49.9999 322.577 -141.004 -50.0001 295.53 -141.004 49.9999 295.53 -121.069 -50.0001 271.131 -121.069 49.9999 271.131 -95.7596 -50.0001 259.862 -95.7596 -50.0001 259.862 -95.7596 49.9999 259.862 -95.7596 49.9999 259.862 -147 49.9999 270.287 -147 49.9999 270.287 -147 49.9999 322.577 -147 49.9999 322.577 -147 65.9999 253.959 -147 65.9999 253.959 -147 65.9999 306.25 -147 65.9999 306.25 -141.004 49.9999 295.53 -141.004 65.9999 279.202 -121.069 49.9999 271.131 -121.069 65.9999 254.803 -95.7596 49.9999 259.862 -95.7596 49.9999 259.862 -95.7595 65.9999 243.534 -95.7595 65.9999 243.534 -89.0001 -69.9996 238.078 -89.0001 -69.9996 238.078 -89.0001 -69.9996 238.078 235.702 -84.999 -24.7734 235.702 -84.999 -24.7734 250.547 -69.9997 168.995 330 -69.9997 152.831 330 -49.9996 173.241 494 -50.0001 139.875 494 -50.0001 139.875 494 -50.0001 139.875 -195 -69.9996 259.644 -195 -69.9996 259.644 -195 -49.9999 280.053 -195 -49.9999 280.053 -195 50 280.053 -195 50 280.053 -195 -69.9991 -169.644 -195 65.9999 263.725 -195 65.9999 263.725 -195 -50 -190.053 -195 -50 -190.053 -195 49.9998 -190.053 -195 49.9998 -190.053 -195 65.9999 -173.725 -195 65.9999 -173.725 -89.0001 -69.9996 238.078 -89 -69.9996 258.487 -89 -69.9996 258.487 -89 -69.9996 258.487 -89 -50.0003 258.487 -89 -50.0003 258.487 133.572 -69.9993 -102.795 147.226 -69.9993 -85.0011 147.226 -69.9993 -85.0011 161.601 -73.7154 -93.3005 164.209 -69.9994 -44.0012 167.681 -69.9994 -17.6241 167.681 -69.9994 -17.6241 176.109 84.9999 -78.833 176.109 84.9999 -78.833 176.109 84.9999 168.833 176.109 84.9999 168.833 176.109 65.9999 188.222 176.109 65.9999 188.222 176.109 65.9999 -98.2227 176.109 65.9999 -98.2227 202.904 -84.9989 121.555 204.832 -84.8914 118.26 205.248 -84.9989 118.5 205.248 -84.9989 118.5 206.596 -84.9989 115.247 214.066 -84.9989 97.2122 223.38 -83.7138 59.8544 225.872 -84.9989 -68.7098 228.925 -84.999 61.3398 228.925 -84.9989 -61.3395 233.766 -84.9989 -24.5699 233.766 -84.9989 -24.5699 235.542 -84.999 11.0773 235.702 -84.999 -24.7734 235.702 -69.9994 -24.7734 236.584 -84.999 -3.16309 236.713 -84.9345 0 236.781 -84.999 1.66724 237 -84.999 -0.000122 330 -69.9997 152.831 330 -69.9997 173.241 330 -69.9997 173.241 330 -69.9997 173.241 330 -49.9996 173.241 330 -49.9996 173.241 494 -50.0001 139.875 494 -50.0001 139.875 494 -85.0001 104.157 494 49.9998 139.875 494 49.9998 139.875 494.001 84.9999 104.157 494.001 84.9999 104.157 494.001 -85.0001 -14.1575 494.001 -50 -49.8748 494.001 -50 -49.8748 494.001 84.9999 -14.1573 494.001 84.9999 -14.1573 494.001 50 -49.8751 494.001 50 -49.8751 196.482 -84.9989 132.528 196.482 -69.9996 132.528 211.777 -84.9989 106.394 211.777 -69.9996 106.393 233.112 -84.9991 157.236 236.937 -84.999 5.48254 236.937 -69.9995 5.48267 643.501 83.1492 10.5582 643.501 63.6396 -18.6399 643.501 34.4415 -38.1494 643.501 0 -45.0002 643.501 -34.4415 -38.1494 643.501 -63.6396 -18.6399 643.501 -83.1492 10.5582 643.501 -90 44.9998 643.501 -83.1492 79.4413 643.501 -63.6396 108.639 643.501 -34.4415 128.149 643.501 0 135 643.501 34.4415 128.149 643.501 63.6396 108.639 643.501 83.1492 79.4413 643.501 90 44.9998 674.501 90 44.9998 674.501 83.1492 79.4413 674.501 63.6396 108.639 674.501 34.4415 128.149 674.501 0 135 674.501 -34.4415 128.149 674.501 -63.6396 108.639 674.501 -83.1492 79.4413 674.501 -90 44.9998 674.501 -83.1492 10.5582 674.501 -63.6396 -18.6399 674.501 -34.4415 -38.1494 674.501 0 -45.0002 674.501 34.4415 -38.1494 674.501 63.6396 -18.6399 674.501 83.1492 10.5582 643.501 90 44.9998 674.501 90 44.9998 674.501 83.1492 10.5582 643.501 83.1492 10.5582 643.501 83.1492 10.5582 674.501 83.1492 10.5582 674.501 63.6396 -18.6399 643.501 63.6396 -18.6399 643.501 63.6396 -18.6399 674.501 63.6396 -18.6399 674.501 34.4415 -38.1494 643.501 34.4415 -38.1494 643.501 34.4415 -38.1494 674.501 34.4415 -38.1494 674.501 0 -45.0002 643.501 0 -45.0002 643.501 0 -45.0002 674.501 0 -45.0002 674.501 -34.4415 -38.1494 643.501 -34.4415 -38.1494 643.501 -34.4415 -38.1494 674.501 -34.4415 -38.1494 674.501 -63.6396 -18.6399 643.501 -63.6396 -18.6399 643.501 -63.6396 -18.6399 674.501 -63.6396 -18.6399 674.501 -83.1492 10.5582 643.501 -83.1492 10.5582 643.501 -83.1492 10.5582 674.501 -83.1492 10.5582 674.501 -90 44.9998 643.501 -90 44.9998 643.501 -90 44.9998 674.501 -90 44.9998 674.501 -83.1492 79.4413 643.501 -83.1492 79.4413 643.501 -83.1492 79.4413 674.501 -83.1492 79.4413 674.501 -63.6396 108.639 643.501 -63.6396 108.639 643.501 -63.6396 108.639 674.501 -63.6396 108.639 674.501 -34.4415 128.149 643.501 -34.4415 128.149 643.501 -34.4415 128.149 674.501 -34.4415 128.149 674.501 0 135 643.501 0 135 643.501 0 135 674.501 0 135 674.501 34.4415 128.149 643.501 34.4415 128.149 643.501 34.4415 128.149 674.501 34.4415 128.149 674.501 63.6396 108.639 643.501 63.6396 108.639 643.501 63.6396 108.639 674.501 63.6396 108.639 674.501 83.1492 79.4413 643.501 83.1492 79.4413 643.501 83.1492 79.4413 674.501 83.1492 79.4413 674.501 90 44.9998 643.501 90 44.9998 666.613 -7.34732 151 660.363 -11.8882 151 652.638 -11.8882 151 646.388 -7.34732 151 644.001 0 151 646.388 7.34732 151 652.638 11.8882 151 660.363 11.8882 151 666.613 7.34732 151 669.001 0 151 669.001 0 162.5 666.613 7.34731 162.5 660.363 11.8882 162.5 652.638 11.8882 162.5 646.388 7.34731 162.5 644.001 0 162.5 646.388 -7.34732 162.5 652.638 -11.8882 162.5 660.363 -11.8882 162.5 666.613 -7.34732 162.5 669.001 0 151 669.001 0 162.5 666.613 -7.34732 162.5 666.613 -7.34732 151 666.613 -7.34732 151 666.613 -7.34732 162.5 660.363 -11.8882 162.5 660.363 -11.8882 151 660.363 -11.8882 151 660.363 -11.8882 162.5 652.638 -11.8882 162.5 652.638 -11.8882 151 652.638 -11.8882 151 652.638 -11.8882 162.5 646.388 -7.34732 162.5 646.388 -7.34732 151 646.388 -7.34732 151 646.388 -7.34732 162.5 644.001 0 162.5 644.001 0 151 644.001 0 151 644.001 0 162.5 646.388 7.34731 162.5 646.388 7.34732 151 646.388 7.34732 151 646.388 7.34731 162.5 652.638 11.8882 162.5 652.638 11.8882 151 652.638 11.8882 151 652.638 11.8882 162.5 660.363 11.8882 162.5 660.363 11.8882 151 660.363 11.8882 151 660.363 11.8882 162.5 666.613 7.34731 162.5 666.613 7.34732 151 666.613 7.34732 151 666.613 7.34731 162.5 669.001 0 162.5 669.001 0 151 504.501 -105.322 1.37378 504.501 -80.6102 -35.6105 504.501 -43.6259 -60.3225 504.501 0 -69.0002 504.501 43.6259 -60.3225 504.501 80.6102 -35.6105 504.501 105.322 1.37378 504.501 114 44.9998 504.501 105.322 88.6256 504.501 80.6102 125.61 504.501 43.6259 150.322 504.501 0 159 504.501 -43.6259 150.322 504.501 -80.6102 125.61 504.501 -105.322 88.6256 504.501 -114 44.9998 494.001 -114 44.9998 494.001 -105.322 88.6256 494.001 -80.6102 125.61 494.001 -43.6259 150.322 494.001 0 159 494.001 43.6259 150.322 494.001 80.6102 125.61 494.001 105.322 88.6256 494.001 114 44.9998 494.001 105.322 1.37378 494.001 80.6102 -35.6105 494.001 43.6259 -60.3225 494.001 0 -69.0002 494.001 -43.6259 -60.3225 494.001 -80.6102 -35.6105 494.001 -105.322 1.37378 504.501 -114 44.9998 494.001 -114 44.9998 494.001 -105.322 1.37378 504.501 -105.322 1.37378 504.501 -105.322 1.37378 494.001 -105.322 1.37378 494.001 -80.6102 -35.6105 504.501 -80.6102 -35.6105 504.501 -80.6102 -35.6105 494.001 -80.6102 -35.6105 494.001 -43.6259 -60.3225 504.501 -43.6259 -60.3225 504.501 -43.6259 -60.3225 494.001 -43.6259 -60.3225 494.001 0 -69.0002 504.501 0 -69.0002 504.501 0 -69.0002 494.001 0 -69.0002 494.001 43.6259 -60.3225 504.501 43.6259 -60.3225 504.501 43.6259 -60.3225 494.001 43.6259 -60.3225 494.001 80.6102 -35.6105 504.501 80.6102 -35.6105 504.501 80.6102 -35.6105 494.001 80.6102 -35.6105 494.001 105.322 1.37378 504.501 105.322 1.37378 504.501 105.322 1.37378 494.001 105.322 1.37378 494.001 114 44.9998 504.501 114 44.9998 504.501 114 44.9998 494.001 114 44.9998 494.001 105.322 88.6256 504.501 105.322 88.6256 504.501 105.322 88.6256 494.001 105.322 88.6256 494.001 80.6102 125.61 504.501 80.6102 125.61 504.501 80.6102 125.61 494.001 80.6102 125.61 494.001 43.6259 150.322 504.501 43.6259 150.322 504.501 43.6259 150.322 494.001 43.6259 150.322 494.001 0 159 504.501 0 159 504.501 0 159 494.001 0 159 494.001 -43.6259 150.322 504.501 -43.6259 150.322 504.501 -43.6259 150.322 494.001 -43.6259 150.322 494.001 -80.6102 125.61 504.501 -80.6102 125.61 504.501 -80.6102 125.61 494.001 -80.6102 125.61 494.001 -105.322 88.6256 504.501 -105.322 88.6256 504.501 -105.322 88.6256 494.001 -105.322 88.6256 494.001 -114 44.9998 504.501 -114 44.9998 504.501 -114 44.9998 504.501 -105.322 88.6256 504.501 -80.6102 125.61 504.501 -43.6259 150.322 504.501 0 159 504.501 43.6259 150.322 504.501 80.6102 125.61 504.501 105.322 88.6256 504.501 114 44.9998 504.501 105.322 1.37378 504.501 80.6102 -35.6105 504.501 43.6259 -60.3225 504.501 0 -69.0002 504.501 -43.6259 -60.3225 504.501 -80.6102 -35.6105 504.501 -105.322 1.37378 608.501 -105.322 1.37378 608.501 -80.6102 -35.6105 608.501 -43.6259 -60.3225 608.501 0 -69.0002 608.501 43.6259 -60.3225 608.501 80.6102 -35.6105 608.501 105.322 1.37378 608.501 114 44.9998 608.501 105.322 88.6256 608.501 80.6102 125.61 608.501 43.6259 150.322 608.501 0 159 608.501 -43.6259 150.322 608.501 -80.6102 125.61 608.501 -105.322 88.6256 608.501 -114 44.9998 504.501 -114 44.9998 608.501 -114 44.9998 608.501 -105.322 88.6256 504.501 -105.322 88.6256 504.501 -105.322 88.6256 608.501 -105.322 88.6256 608.501 -80.6102 125.61 504.501 -80.6102 125.61 504.501 -80.6102 125.61 608.501 -80.6102 125.61 608.501 -43.6259 150.322 504.501 -43.6259 150.322 504.501 -43.6259 150.322 608.501 -43.6259 150.322 608.501 0 159 504.501 0 159 504.501 0 159 608.501 0 159 608.501 43.6259 150.322 504.501 43.6259 150.322 504.501 43.6259 150.322 608.501 43.6259 150.322 608.501 80.6102 125.61 504.501 80.6102 125.61 504.501 80.6102 125.61 608.501 80.6102 125.61 608.501 105.322 88.6256 504.501 105.322 88.6256 504.501 105.322 88.6256 608.501 105.322 88.6256 608.501 114 44.9998 504.501 114 44.9998 504.501 114 44.9998 608.501 114 44.9998 608.501 105.322 1.37378 504.501 105.322 1.37378 504.501 105.322 1.37378 608.501 105.322 1.37378 608.501 80.6102 -35.6105 504.501 80.6102 -35.6105 504.501 80.6102 -35.6105 608.501 80.6102 -35.6105 608.501 43.6259 -60.3225 504.501 43.6259 -60.3225 504.501 43.6259 -60.3225 608.501 43.6259 -60.3225 608.501 0 -69.0002 504.501 0 -69.0002 504.501 0 -69.0002 608.501 0 -69.0002 608.501 -43.6259 -60.3225 504.501 -43.6259 -60.3225 504.501 -43.6259 -60.3225 608.501 -43.6259 -60.3225 608.501 -80.6102 -35.6105 504.501 -80.6102 -35.6105 504.501 -80.6102 -35.6105 608.501 -80.6102 -35.6105 608.501 -105.322 1.37378 504.501 -105.322 1.37378 504.501 -105.322 1.37378 608.501 -105.322 1.37378 608.501 -114 44.9998 504.501 -114 44.9998 608.501 102.551 2.52185 608.501 78.4889 -33.4891 608.501 42.4779 -57.5509 608.501 0 -66.0002 608.501 -42.4779 -57.5509 608.501 -78.4889 -33.4891 608.501 -102.551 2.52185 608.501 -111 44.9998 608.501 -102.551 87.4777 608.501 -78.4889 123.489 608.501 -42.4779 147.55 608.501 0 156 608.501 42.4779 147.55 608.501 78.4889 123.489 608.501 102.551 87.4777 608.501 111 44.9998 643.501 111 44.9998 643.501 102.551 87.4777 643.501 78.4889 123.489 643.501 42.4779 147.55 643.501 0 156 643.501 -42.4779 147.55 643.501 -78.4889 123.489 643.501 -102.551 87.4777 643.501 -111 44.9998 643.501 -102.551 2.52185 643.501 -78.4889 -33.4891 643.501 -42.4779 -57.5509 643.501 0 -66.0002 643.501 42.4779 -57.5509 643.501 78.4889 -33.4891 643.501 102.551 2.52185 608.501 111 44.9998 643.501 111 44.9998 643.501 102.551 2.52185 608.501 102.551 2.52185 608.501 102.551 2.52185 643.501 102.551 2.52185 643.501 78.4889 -33.4891 608.501 78.4889 -33.4891 608.501 78.4889 -33.4891 643.501 78.4889 -33.4891 643.501 42.4779 -57.5509 608.501 42.4779 -57.5509 608.501 42.4779 -57.5509 643.501 42.4779 -57.5509 643.501 0 -66.0002 608.501 0 -66.0002 608.501 0 -66.0002 643.501 0 -66.0002 643.501 -42.4779 -57.5509 608.501 -42.4779 -57.5509 608.501 -42.4779 -57.5509 643.501 -42.4779 -57.5509 643.501 -78.4889 -33.4891 608.501 -78.4889 -33.4891 608.501 -78.4889 -33.4891 643.501 -78.4889 -33.4891 643.501 -102.551 2.52185 608.501 -102.551 2.52185 608.501 -102.551 2.52185 643.501 -102.551 2.52185 643.501 -111 44.9998 608.501 -111 44.9998 608.501 -111 44.9998 643.501 -111 44.9998 643.501 -102.551 87.4777 608.501 -102.551 87.4777 608.501 -102.551 87.4777 643.501 -102.551 87.4777 643.501 -78.4889 123.489 608.501 -78.4889 123.489 608.501 -78.4889 123.489 643.501 -78.4889 123.489 643.501 -42.4779 147.55 608.501 -42.4779 147.55 608.501 -42.4779 147.55 643.501 -42.4779 147.55 643.501 0 156 608.501 0 156 608.501 0 156 643.501 0 156 643.501 42.4779 147.55 608.501 42.4779 147.55 608.501 42.4779 147.55 643.501 42.4779 147.55 643.501 78.4889 123.489 608.501 78.4889 123.489 608.501 78.4889 123.489 643.501 78.4889 123.489 643.501 102.551 87.4777 608.501 102.551 87.4777 608.501 102.551 87.4777 643.501 102.551 87.4777 643.501 111 44.9998 608.501 111 44.9998 643.501 -26 129.828 643.501 -26 129.828 643.501 -26 151 643.501 -26 151 643.501 0 135 643.501 26 129.828 643.501 26 129.828 643.501 26 151 643.501 26 151 669.501 -26 129.828 669.501 -26 129.828 669.501 -26 151 669.501 -26 151 669.501 0 135 669.501 26 129.828 669.501 26 129.828 669.501 26 151 669.501 26 151 -594.344 136.011 4.54187 -594.344 169.542 4.54187 -594.344 169.542 4.54187 -590.77 136.011 -69.9271 -590.77 195.271 -69.9271 -586.805 136.011 78.7144 -586.805 223.825 78.7144 -584.973 237.009 85.8696 -584.84 237.968 -99.6084 -584.84 237.968 -99.6084 -584.75 238.618 50.0476 -584.75 238.618 50.0476 -584.736 238.72 -82.2629 -584.736 238.72 -82.2629 -584.61 239.625 5.94849 -584.61 239.625 5.94849 -584.605 239.659 -38.1622 -584.605 239.659 -38.1622 -582.863 236.639 94.1139 -582.863 236.639 94.1139 -579.501 236.809 -126.332 -579.501 236.809 -126.332 -576.163 136.011 -143.037 -576.163 235.9 -143.037 -571.6 233.688 138.126 -571.6 233.688 138.126 -568.32 136.011 150.941 -568.32 232.687 150.941 -555.239 -57.9892 -201 -555.239 116.011 -201 -554.181 -65.0602 -203.929 -551.628 -67.9892 -211 -550.848 -67.9892 -213.162 -550.848 -67.9892 -213.162 -550.848 232.084 -213.162 -539.301 136.011 219.617 -539.301 227.322 219.617 -537.485 -67.9892 -243 -537.485 -67.9892 -243 -536.39 230.327 -245.445 -536.39 230.327 -245.445 -529.772 -64.5638 -260.221 -529.772 -64.5638 -260.221 -529.02 226.231 -261.901 -529.02 226.231 -261.901 -526.334 -59.4338 -267.898 -526.334 -59.4338 -267.898 -526.334 221.922 -267.898 -526.334 221.922 -267.898 -523.136 -54.809 -274.82 -523.136 -54.809 -274.82 -522.742 216.336 -275.673 -522.742 216.336 -275.673 -522.714 -53.4429 -275.732 -522.714 -53.4429 -275.732 -522.714 216.243 -275.732 -522.714 216.243 -275.732 -516.647 -44.2585 -281.869 -516.647 -44.2585 -281.869 -516.647 -44.2585 -281.869 -516.647 206.64 -281.869 -516.647 206.64 -281.869 -516.647 206.64 -281.869 -510.961 -40.2099 -284.574 -510.477 202.047 -284.805 -508.854 -35.1685 -285.577 -508.854 -35.1685 -285.577 -508.854 198.02 -285.577 -508.854 198.02 -285.577 -500.264 -30.9594 -286.414 -500.264 -30.9594 -286.414 -500.264 193.657 -286.414 -500.264 193.657 -286.414 -496.481 -57.9892 303 -496.481 116.011 303 -494.977 -65.0602 305.929 -491.345 -67.9892 313 -479.208 202.047 -284.805 -479.208 202.047 -284.805 -476.196 -40.2099 -284.574 -474.912 -67.9892 345 -473.112 217.253 348.505 -466.069 -64.5638 362.221 -464.836 212.886 364.621 -460.106 -56.8057 373.832 -460.106 -56.8057 373.832 -460.106 206.061 373.832 -460.106 206.061 373.832 -458.426 -54.809 376.82 -458.426 -54.809 376.82 -457.742 202.945 378.036 -457.742 202.945 378.036 -456.414 -49.4558 380.397 -456.414 -49.4558 380.397 -456.414 199.177 380.397 -456.414 199.177 380.397 -450.935 -41.7218 385.565 -450.935 -41.7218 385.565 -450.935 -41.7218 385.565 -450.935 190.931 385.565 -450.935 190.931 385.565 -450.935 190.931 385.565 -448.863 -40.2099 386.575 -448.863 -40.2099 386.575 -448.19 188.796 386.903 -444.164 -28.6935 388.865 -444.164 -28.6935 388.865 -444.164 178.399 388.865 -436.718 -22.9892 390 -436.718 172.389 390 -391.931 238.618 50.0476 -389.777 236.639 94.1139 -388.7 239.625 5.94849 -387.506 233.688 138.126 -385.467 239.659 -38.1622 -382.236 238.72 -82.2629 -379.007 236.809 -126.332 -379.001 -22.9892 390 -379.001 172.389 390 -367.421 123.176 301.575 -367.421 220.919 301.575 -363.646 123.03 -199.604 -363.646 232.821 -199.604 -362.627 188.796 386.903 -362.627 188.796 386.903 -360.895 -40.2099 386.575 -359.763 216.336 -275.673 -359.763 216.336 -275.673 -359.763 216.336 -275.673 -356.305 116.011 -201 -356.305 232.745 -201 -348.604 -54.809 -274.82 -348.604 -54.809 -274.82 -348.604 -54.809 -274.82 -338.756 232.745 -201 -338.756 232.745 -201 -335.859 230.327 -245.445 -335.859 230.327 -245.445 -334.3 229.026 -250.673 -334.3 229.026 -250.673 -334.3 229.026 -250.673 -334.3 229.026 -201 -334.3 229.026 -201 -331.559 226.231 -261.901 -331.559 226.231 -261.901 -326.322 220.893 301.913 -323.79 218.312 -272.923 -323.79 218.312 -272.923 -323.79 218.312 -272.923 -322.751 217.253 348.505 -318.467 212.886 364.621 -315.761 202.945 378.036 -315.761 202.945 378.036 -315.761 202.945 378.036 -309.567 203.813 376.864 -309.567 203.813 376.864 -309.334 -54.809 376.82 -309.334 -54.809 376.82 -309.334 -54.809 376.82 -232.168 -64.5638 362.221 -232.168 -64.5638 362.221 -224.675 117.278 302.748 -223.431 116.011 -201 -223.431 116.011 303 -199.724 91.8446 -263.437 -199.724 91.8446 -263.437 -199.724 91.8446 -201 -199.724 91.8446 -201 -199.724 91.8446 303 -199.724 91.8446 303 -199.724 91.8446 356.083 -199.724 91.8446 356.083 -195.487 85.4036 -263.113 -195.487 85.4036 -263.113 -195.487 85.4036 -201 -195.487 85.4036 -201 -195.487 85.4036 303 -195.487 85.4036 303 -195.487 85.4036 355.281 -195.487 85.4036 355.281 -194.001 -67.9892 -243 -194.001 -67.9892 -243 -194.001 -67.9892 -211 -194.001 -67.9892 -211 -194.001 -67.9892 313 -194.001 -67.9892 313 -194.001 -67.9892 345 -194.001 -67.9892 345 -194.001 -66.0001 355 -194.001 -66.0001 355 -194.001 -66.0001 355 -194.001 -65.0602 -203.929 -194.001 -65.0602 -203.929 -194.001 -65.0602 305.929 -194.001 -65.0602 305.929 -194.001 -64.5638 -260.221 -194.001 -64.5638 -260.221 -194.001 -62.7067 -263 -194.001 -62.7067 -263 -194.001 -62.7067 -263 -194.001 -57.9892 -201 -194.001 -57.9892 -201 -194.001 -57.9892 303 -194.001 -57.9892 303 -194.001 77.8386 -263 -194.001 77.8386 -263 -194.001 77.8386 -201 -194.001 77.8386 -201 -194.001 77.8386 303 -194.001 77.8386 303 -194.001 77.8386 355 -194.001 77.8386 355 -562.459 136.011 -181 -559.696 134.488 -188.653 -557.353 130.153 -195.142 -555.788 123.664 -199.477 -506.751 136.011 283 -502.821 134.488 290.654 -499.489 130.153 297.142 -497.263 123.664 301.478 -392.001 136.011 51.0001 -392.001 238.575 51.0001 -380.033 136.011 283 -379.979 135.806 284.031 -379.979 222.29 284.031 -378.349 134.488 290.654 -378.174 134.015 291.362 -378.174 221.717 291.362 -375.001 136.011 -181 -374.44 134.488 -188.653 -374.372 133.871 -189.577 -374.372 233.367 -189.577 -374.037 130.153 297.142 -373.779 129.615 297.502 -373.779 221.237 297.502 -370.305 130.153 -195.142 -369.963 129.452 -195.61 -369.963 233.039 -195.61 -367.573 123.664 301.478 -363.846 123.664 -199.477 - - - - - - - - - - 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.34199 0 0.939703 0.34199 0 0.939703 0.642781 0 0.76605 0.642781 0 0.76605 0.642781 0 0.76605 0.642781 0 0.76605 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.984813 0 0.17362 0.984813 0 0.17362 0.984813 0 0.17362 0.984813 0 0.17362 0.984813 0 -0.17362 0.984813 0 -0.17362 0.984813 0 -0.17362 0.984813 0 -0.17362 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.642781 0 -0.76605 0.642781 0 -0.76605 0.642781 0 -0.76605 0.642781 0 -0.76605 0.34199 0 -0.939703 0.34199 0 -0.939703 0.34199 0 -0.939703 0.34199 0 -0.939703 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.34199 0 -0.939703 -0.34199 0 -0.939703 -0.34199 0 -0.939703 -0.34199 0 -0.939703 -0.642781 0 -0.76605 -0.642781 0 -0.76605 -0.642781 0 -0.76605 -0.642781 0 -0.76605 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.984813 0 -0.17362 -0.984813 0 0.17362 -0.984813 0 0.17362 -0.984813 0 0.17362 -0.984813 0 0.17362 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.642781 0 0.76605 -0.642781 0 0.76605 -0.642781 0 0.76605 -0.642781 0 0.76605 -0.34199 0 0.939703 -0.34199 0 0.939703 -0.34199 0 0.939703 -0.34199 0 0.939703 0 0 1 0 0 1 0 0 1 0 0 1 0.34199 0 0.939703 0.34199 0 0.939703 -0.42259 0 0.906321 -0.42259 0 0.906321 -0.42259 0 0.906321 -0.42259 0 0.906321 0.906321 0 0.42259 0.906321 0 0.42259 0.906321 0 0.42259 0.906321 0 0.42259 0.42259 0 -0.906321 0.42259 0 -0.906321 0.42259 0 -0.906321 0.42259 0 -0.906321 -0.906321 0 -0.42259 -0.906321 0 -0.42259 -0.906321 0 -0.42259 -0.906321 0 -0.42259 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.906321 0 -0.42259 -0.42259 0 0.906321 0 1 0 -0.906321 0 -0.42259 -0.42259 0 0.906321 -0.906321 0 -0.42259 -0.42259 0 0.906321 0 1 0 -0.906321 0 -0.42259 -0.42259 0 0.906321 0 1 0 0 1 0 0 1 0 0 1 0 -0.906321 0 -0.42259 -0.42259 0 0.906321 0 1 0 -0.906321 0 -0.42259 -0.42259 0 0.906321 0 1 0 -0.906321 0 -0.42259 -0.81916 0 0.573565 0 1 0 -0.906321 0 -0.42259 -0.81916 0 0.573565 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.939703 0 0.34199 0 1 0 -0.939703 0 0.34199 0 1 0 0 1 0 -0.996197 0 0.0871303 -0.42259 0 0.906321 0 1 0 -0.996197 0 0.0871303 -0.42259 0 0.906321 0 1 0 0 1 0 0 1 0 0 1 0 -0.906321 0 -0.42259 0 1 0 0.42259 0 -0.906321 -0.906321 0 -0.42259 0.42259 0 -0.906321 0 1 0 -0.906321 0 -0.42259 -0.0871303 0 -0.996197 0 1 0 -0.906321 0 -0.42259 -0.0871303 0 -0.996197 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.906321 0 -0.42259 0 1 0 0.42259 0 -0.906321 -0.906321 0 -0.42259 0.42259 0 -0.906321 -0.34199 0 -0.939703 0 1 0 -0.34199 0 -0.939703 0 1 0 -0.906321 0 -0.42259 0 1 0 0.42259 0 -0.906321 -0.906321 0 -0.42259 0.42259 0 -0.906321 -0.81916 0 0.573565 0 1 0 0 1 0 -0.42259 0 0.906321 0 1 0 0.573565 0 0.81916 0 1 0 0 1 0 0 1 0 0 1 0 -0.573565 0 -0.81916 0 1 0 0.42259 0 -0.906321 0 1 0 -0.42259 0 0.906321 0 1 0 0.906321 0 0.42259 -0.42259 0 0.906321 0.906321 0 0.42259 0 1 0 0.34199 0 0.939703 0 1 0 0.34199 0 0.939703 0 1 0 0 1 0 0 1 0 -0.42259 0 0.906321 0 1 0 0.906321 0 0.42259 -0.42259 0 0.906321 0 1 0 0.906321 0 0.42259 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.0871303 0 0.996197 0.906321 0 0.42259 0 1 0 0.0871303 0 0.996197 0.906321 0 0.42259 -0.42259 0 0.906321 0 1 0 0.906321 0 0.42259 -0.42259 0 0.906321 0 1 0 0.906321 0 0.42259 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.42259 0 -0.906321 0.996197 0 -0.0871303 0 1 0 0.42259 0 -0.906321 0.996197 0 -0.0871303 0 1 0 0 1 0 0.939703 0 -0.34199 0 1 0 0.939703 0 -0.34199 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.81916 0 -0.573565 0.906321 0 0.42259 0 1 0 0.81916 0 -0.573565 0.906321 0 0.42259 0 1 0 0.42259 0 -0.906321 0.906321 0 0.42259 0 1 0 0.42259 0 -0.906321 0.906321 0 0.42259 0 1 0 0 1 0 0 1 0 0.42259 0 -0.906321 0.906321 0 0.42259 0 1 0 0.42259 0 -0.906321 0.906321 0 0.42259 0 1 0 0.42259 0 -0.906321 0.906321 0 0.42259 0.42259 0 -0.906321 0.906321 0 0.42259 0 1 0 -0.996197 0 0.0871303 -0.996197 0 0.0871303 0 1 0 -0.906321 0 -0.42259 -0.906321 0 -0.42259 0 1 0 -0.81916 0 0.573565 -0.573565 0 -0.81916 -0.573565 0 -0.81916 0 1 0 -0.42262 0 0.906307 -0.42262 0 0.906307 0 1 0 -0.0871303 0 -0.996197 -0.0871303 0 -0.996197 0 1 0 -0.42259 0 0.906321 0.573565 0 0.81916 -0.573565 0 -0.81916 0.42259 0 -0.906321 0.0871303 0 0.996197 0 1 0 0.0871303 0 0.996197 0.42259 0 -0.906321 0 1 0 0.42259 0 -0.906321 0.573565 0 0.81916 0 1 0 0.573565 0 0.81916 0.81916 0 -0.573565 0 1 0 0.81916 0 -0.573565 0.906321 0 0.42259 0 1 0 0.906321 0 0.42259 0.996197 0 -0.0871303 0 1 0 0.996197 0 -0.0871303 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -1 0 0 -1 0 0 -0.702872 -0.711317 0 -1 0 0 -1 0 0 -0.702891 -0.687063 -0.184088 -1 0 0 -0.702914 -0.615986 0.355632 -1 0 0 -1 0 0 -1 0 0 -0.702891 -0.184088 -0.687063 -1 0 0 0 0.258766 0.96594 -1 0 0 0 0.25895 -0.965891 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.702872 0 -0.711317 -1 0 0 0 0 1 -1 0 0 0 0 -1 -1 0 0 -0.702887 0.355632 -0.616016 -1 0 0 -1 0 0 -1 0 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -0.995909 -0.0903653 -1 0 0 0 -0.995909 0.0903653 -1 0 0 -1 0 0 -1 0 0 0 -0.0903653 -0.995909 -1 0 0 0 -0.0903653 0.995909 -1 0 0 -0.702872 -0.711317 0 -1 0 0 -1 0 0 -0.702891 -0.687063 0.184088 -1 0 0 -1 0 0 -1 0 0 -0.702887 -0.616016 -0.355632 -1 0 0 -0.702914 -0.615986 0.355632 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 -1 0 0 0 0.96594 0.258766 -1 0 0 0 0.965924 -0.258827 -1 0 0 0 0.866069 0.499924 -1 0 0 0 0.866034 -0.499985 -1 0 0 0 0.707053 0.707161 -1 0 0 0 0.707053 -0.707161 -1 0 0 0 0.499954 0.866052 -1 0 0 0 0.499954 -0.866052 -1 0 0 0 0.258766 0.96594 -1 0 0 0 0.25895 -0.965891 -1 0 0 -1 0 0 -1 0 0 0 0 1 -1 0 0 0 0 -1 -1 0 0 0 -0.258766 0.96594 -1 0 0 0 -0.25895 -0.965891 -1 0 0 0 -0.499954 0.866052 -1 0 0 0 -0.499954 -0.866052 -1 0 0 0 -0.707053 0.707161 -1 0 0 0 -0.707053 -0.707161 -1 0 0 0 -0.866069 0.499924 -1 0 0 0 -0.866034 -0.499985 -1 0 0 0 -0.96594 0.258766 -1 0 0 0 -0.965924 -0.258827 -1 0 0 0 -1 0 -1 0 0 -0.702891 0.184088 -0.687063 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.0903653 -0.995909 -1 0 0 0 0.0903653 0.995909 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.995909 -0.0903653 -1 0 0 0 0.995909 0.0903653 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -1 0 -1 0 0 -1 0 0 0 0 -1 -1 0 0 0 0 1 -1 0 0 -1 0 0 0 1 0 -1 0 0 -0.702891 -0.687063 0.184088 -0.702887 -0.616016 -0.355632 -0.702895 -0.502945 -0.502976 -1 0 0 -0.702895 -0.502976 0.502945 -0.702887 -0.355632 -0.616016 -1 0 0 -0.702914 -0.355632 0.615986 -1 0 0 -0.702891 -0.184088 0.687063 0 1 0 0 0.96594 0.258766 0 0.965924 -0.258827 0 0.866069 0.499924 0 0.866034 -0.499985 0 0.707053 0.707161 0 0.707053 -0.707161 0 0.499954 0.866052 0 0.499954 -0.866052 -1 0 0 -1 0 0 -0.702872 0 0.711317 0 -0.258766 0.96594 0 -0.25895 -0.965891 0 -0.499954 0.866052 0 -0.499954 -0.866052 0 -0.707053 0.707161 0 -0.707053 -0.707161 0 -0.866069 0.499924 0 -0.866034 -0.499985 0 -0.96594 0.258766 0 -0.965924 -0.258827 0 -1 0 -0.702891 0.184088 -0.687063 -1 0 0 -0.702891 0.184088 0.687063 -1 0 0 -0.702914 0.355632 0.615986 -1 0 0 -1 0 0 -0.702895 0.502945 -0.502976 -1 0 0 -0.702895 0.502976 0.502945 -1 0 0 -1 0 0 -0.702887 0.616016 -0.355632 -1 0 0 -0.702914 0.615986 0.355632 -1 0 0 -0.702891 0.687063 -0.184088 -1 0 0 -0.702891 0.687063 0.184088 -1 0 0 -0.702872 0.711317 0 0 0 -1 0 0 1 0 -0.0653706 -0.997861 0 -0.0653706 0.997861 0 -0.258766 -0.96594 0 -0.258766 0.96594 0 -0.500015 -0.866017 0 -0.500015 0.866017 0 -0.70713 -0.707083 0 -0.70713 0.707083 0 -0.866052 -0.499954 0 -0.866052 0.499954 0 -0.965932 -0.258797 0 -0.965932 0.258797 0 -1 0 0 -0.997859 -0.0654012 0 -0.997859 0.0654012 0 -1 0 -0.702891 -0.687063 -0.184088 -0.702895 -0.502945 -0.502976 -0.702895 -0.502976 0.502945 -0.702887 -0.355632 -0.616016 -0.702914 -0.355632 0.615986 -0.702891 -0.184088 -0.687063 -0.702891 -0.184088 0.687063 0 0 1 0 0 -1 -0.702872 0 -0.711317 -0.702872 0 0.711317 -0.702891 0.184088 0.687063 -0.702887 0.355632 -0.616016 -0.702914 0.355632 0.615986 -0.702895 0.502945 -0.502976 -0.702895 0.502976 0.502945 -0.702887 0.616016 -0.355632 -0.702914 0.615986 0.355632 -0.702891 0.687063 -0.184088 -0.702891 0.687063 0.184088 -0.702872 0.711317 0 0 1 0 0 0.997859 -0.0654012 0 0.997859 0.0654012 0 1 0 0 0.965932 -0.258797 0 0.965932 0.258797 0 0.866052 -0.499954 0 0.866052 0.499954 0 0.70713 -0.707083 0 0.70713 0.707083 0 0.500015 -0.866017 0 0.500015 0.866017 0 0.258766 -0.96594 0 0.258766 0.96594 0 0.0653706 -0.997861 0 0.0653706 0.997861 0 0 -1 0 0 1 0 1 0 0 0 -1 0 -0.995909 -0.0903653 0 -0.995909 0.0903653 0 0 1 0 -0.0653706 -0.997861 0 -0.0653706 0.997861 0 -0.258766 -0.96594 0 -0.258766 0.96594 0 -0.500015 -0.866017 0 -0.500015 0.866017 0 -0.70713 -0.707083 0 -0.70713 0.707083 0 -0.866052 -0.499954 0 -0.866052 0.499954 0 -0.965932 -0.258797 0 -0.965932 0.258797 0 -1 0 0 -0.0903653 -0.995909 0 -0.997859 -0.0654012 0 -0.997859 0.0654012 0 -1 0 0 -0.0903653 0.995909 0 0.0903653 -0.995909 0 1 0 0 0.997859 -0.0654012 0 0.997859 0.0654012 0 0.0903653 0.995909 0 1 0 0 0.965932 -0.258797 0 0.965932 0.258797 0 0.866052 -0.499954 0 0.866052 0.499954 0 0.70713 -0.707083 0 0.70713 0.707083 0 0.500015 -0.866017 0 0.500015 0.866017 0 0.258766 -0.96594 0 0.258766 0.96594 0 0.0653706 -0.997861 0 0.0653706 0.997861 0 0 -1 0 0.995909 -0.0903653 0 0 1 0 0.995909 0.0903653 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -1 0 0 -1 0 0 -0.702872 -0.711317 0 -1 0 0 -1 0 0 -0.702891 -0.687063 -0.184088 -1 0 0 -0.702914 -0.615986 0.355632 -1 0 0 -1 0 0 -1 0 0 -0.702891 -0.184088 -0.687063 -1 0 0 0 1 0 -1 0 0 0 0.499954 0.866052 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.702872 0 -0.711317 -1 0 0 0 -0.866052 0.499954 -1 0 0 -0.702914 0.355632 -0.615986 -1 0 0 -1 0 0 -1 0 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -0.995909 -0.0903653 -1 0 0 0 -0.995909 0.0903653 -1 0 0 -1 0 0 -1 0 0 0 -0.0903653 -0.995909 -1 0 0 0 -0.0903653 0.995909 -1 0 0 -0.702872 -0.711317 0 -1 0 0 -1 0 0 -0.702891 -0.687063 0.184088 -1 0 0 -1 0 0 -1 0 0 -0.702914 -0.615986 -0.355632 -1 0 0 -0.702914 -0.615986 0.355632 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.702891 -0.184088 -0.687063 -1 0 0 0 1 0 -1 0 0 0 0.965932 0.258797 -1 0 0 0 0.965932 -0.258797 -1 0 0 0 0.866052 0.499954 -1 0 0 0 0.866052 -0.499954 -1 0 0 0 0.707053 0.707161 -1 0 0 0 0.707053 -0.707161 -1 0 0 0 0.499954 0.866052 -1 0 0 0 0.499954 -0.866052 -1 0 0 0 0.258858 0.965915 -1 0 0 0 0.258858 -0.965915 -1 0 0 -1 0 0 -1 0 0 0 0 1 -1 0 0 0 0 -1 -1 0 0 0 -0.258858 0.965915 -1 0 0 0 -0.258858 -0.965915 -1 0 0 0 -0.499954 0.866052 -1 0 0 0 -0.499954 -0.866052 -1 0 0 0 -0.707053 0.707161 -1 0 0 0 -0.707053 -0.707161 -1 0 0 0 -0.866052 0.499954 -1 0 0 0 -0.866052 -0.499954 -1 0 0 0 -0.965932 0.258797 -1 0 0 0 -0.965932 -0.258797 -1 0 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.0903653 -0.995909 -1 0 0 0 0.0903653 0.995909 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.995909 -0.0903653 -1 0 0 0 0.995909 0.0903653 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -1 0 -1 0 0 -1 0 0 0 0 -1 -1 0 0 0 0 1 -1 0 0 -1 0 0 0 1 0 -1 0 0 -0.702891 -0.687063 0.184088 -0.702914 -0.615986 -0.355632 -0.702917 -0.502945 -0.502945 -1 0 0 -0.702917 -0.502945 0.502945 -0.702914 -0.355632 -0.615986 -1 0 0 -0.702914 -0.355632 0.615986 -1 0 0 -0.702891 -0.184088 0.687063 0 0.965932 0.258797 0 0.965932 -0.258797 0 0.866052 0.499954 0 0.866052 -0.499954 0 0.707053 0.707161 0 0.707053 -0.707161 0 0.499954 -0.866052 0 0.258858 0.965915 0 0.258858 -0.965915 0 0 1 0 0 -1 -1 0 0 -0.702872 0 0.711317 0 -0.258858 0.965915 0 -0.258858 -0.965915 0 -0.499954 0.866052 0 -0.499954 -0.866052 0 -0.707053 0.707161 0 -0.707053 -0.707161 0 -0.866052 -0.499954 0 -0.965932 0.258797 0 -0.965932 -0.258797 0 -1 0 -0.702891 0.184088 -0.687063 -1 0 0 -0.702891 0.184088 0.687063 -1 0 0 -0.702914 0.355632 0.615986 -1 0 0 -1 0 0 -0.702917 0.502945 -0.502945 -1 0 0 -0.702917 0.502945 0.502945 -1 0 0 -1 0 0 -0.702914 0.615986 -0.355632 -1 0 0 -0.702914 0.615986 0.355632 -1 0 0 -0.702891 0.687063 -0.184088 -1 0 0 -0.702891 0.687063 0.184088 -1 0 0 -0.702872 0.711317 0 0 0 -1 0 0 1 0 -0.0653706 -0.997861 0 -0.0654012 0.997859 0 -0.258797 -0.965932 0 -0.258797 0.965932 0 -0.500015 -0.866017 0 -0.500015 0.866017 0 -0.707083 -0.70713 0 -0.707083 0.70713 0 -0.866052 -0.499954 0 -0.866034 0.499985 0 -0.96594 -0.258766 0 -0.96594 0.258766 0 -1 0 0 -0.997857 -0.0654317 0 -0.997857 0.0654317 0 -1 0 -0.702891 -0.687063 -0.184088 -0.702917 -0.502945 -0.502945 -0.702917 -0.502945 0.502945 -0.702914 -0.355632 -0.615986 -0.702914 -0.355632 0.615986 -0.702891 -0.184088 0.687063 0 0 1 0 0 -1 -0.702872 0 -0.711317 -0.702872 0 0.711317 -0.702891 0.184088 -0.687063 -0.702891 0.184088 0.687063 -0.702914 0.355632 -0.615986 -0.702914 0.355632 0.615986 -0.702917 0.502945 -0.502945 -0.702917 0.502945 0.502945 -0.702914 0.615986 -0.355632 -0.702914 0.615986 0.355632 -0.702891 0.687063 -0.184088 -0.702891 0.687063 0.184088 -0.702872 0.711317 0 0 1 0 0 0.997857 -0.0654317 0 0.997857 0.0654317 0 1 0 0 0.96594 -0.258766 0 0.96594 0.258766 0 0.866052 -0.499954 0 0.866034 0.499985 0 0.707083 -0.70713 0 0.707083 0.70713 0 0.500015 -0.866017 0 0.500015 0.866017 0 0.258797 -0.965932 0 0.258797 0.965932 0 0.0653706 -0.997861 0 0.0654012 0.997859 0 0 -1 0 0 1 0 1 0 0 0 -1 0 -0.995909 -0.0903653 0 -0.995909 0.0903653 0 0 1 0 -0.0653706 -0.997861 0 -0.0654012 0.997859 0 -0.258797 -0.965932 0 -0.258797 0.965932 0 -0.500015 -0.866017 0 -0.500015 0.866017 0 -0.707083 -0.70713 0 -0.707083 0.70713 0 -0.866052 -0.499954 0 -0.866034 0.499985 0 -0.96594 -0.258766 0 -0.96594 0.258766 0 -1 0 0 -0.0903653 -0.995909 0 -0.997857 -0.0654317 0 -0.997857 0.0654317 0 -1 0 0 -0.0903653 0.995909 0 0.0903653 -0.995909 0 1 0 0 0.997857 -0.0654317 0 0.997857 0.0654317 0 0.0903653 0.995909 0 1 0 0 0.96594 -0.258766 0 0.96594 0.258766 0 0.866052 -0.499954 0 0.866034 0.499985 0 0.707083 -0.70713 0 0.707083 0.70713 0 0.500015 -0.866017 0 0.500015 0.866017 0 0.258797 -0.965932 0 0.258797 0.965932 0 0.0653706 -0.997861 0 0.0654012 0.997859 0 0 -1 0 0.995909 -0.0903653 0 0 1 0 0.995909 0.0903653 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -1 0 0 -1 0 0 -0.702872 -0.711317 0 -1 0 0 -1 0 0 -0.702891 -0.687063 -0.184088 -1 0 0 -0.702914 -0.615986 0.355632 -1 0 0 -1 0 0 -1 0 0 -0.702891 -0.184088 -0.687063 -1 0 0 0 0.707083 0.70713 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.702872 0 -0.711317 -1 0 0 0 -0.500046 0.865999 -1 0 0 -0.702914 0.355632 -0.615986 -1 0 0 -1 0 0 -1 0 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -0.995909 -0.0903653 -1 0 0 0 -0.995909 0.0903653 -1 0 0 -1 0 0 -1 0 0 0 -0.0903653 -0.995909 -1 0 0 0 -0.0903653 0.995909 -1 0 0 -0.702872 -0.711317 0 -1 0 0 -1 0 0 -0.702891 -0.687063 0.184088 -1 0 0 -1 0 0 -1 0 0 -0.702914 -0.615986 -0.355632 -1 0 0 -0.702914 -0.615986 0.355632 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 -1 0 0 0 0.965932 0.258797 -1 0 0 0 0.965932 -0.258797 -1 0 0 0 0.866017 0.500015 -1 0 0 0 0.866017 -0.500015 -1 0 0 0 0.707083 0.70713 -1 0 0 0 0.707083 -0.70713 -1 0 0 0 0.500046 0.865999 -1 0 0 0 0.500046 -0.865999 -1 0 0 0 0.258766 0.96594 -1 0 0 0 0.258766 -0.96594 -1 0 0 -1 0 0 -1 0 0 -0.702872 0 -0.711317 -1 0 0 0 0 1 -1 0 0 0 0 -1 -1 0 0 0 -0.258766 0.96594 -1 0 0 0 -0.258766 -0.96594 -1 0 0 0 -0.500046 0.865999 -1 0 0 0 -0.500046 -0.865999 -1 0 0 0 -0.707083 0.70713 -1 0 0 0 -0.707083 -0.70713 -1 0 0 0 -0.866017 0.500015 -1 0 0 0 -0.866017 -0.500015 -1 0 0 0 -0.965932 0.258797 -1 0 0 0 -0.965932 -0.258797 -1 0 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.0903653 -0.995909 -1 0 0 0 0.0903653 0.995909 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.995909 -0.0903653 -1 0 0 0 0.995909 0.0903653 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -1 0 -1 0 0 -1 0 0 0 0 -1 -1 0 0 0 0 1 -1 0 0 -1 0 0 0 1 0 -1 0 0 -0.702891 -0.687063 0.184088 -0.702914 -0.615986 -0.355632 -0.702895 -0.502945 -0.502976 -1 0 0 -0.702917 -0.502945 0.502945 -0.702914 -0.355632 -0.615986 -1 0 0 -0.702914 -0.355632 0.615986 -1 0 0 -0.702891 -0.184088 0.687063 0 1 0 0 0.965932 0.258797 0 0.965932 -0.258797 0 0.866017 0.500015 0 0.866017 -0.500015 0 0.707083 -0.70713 0 0.500046 0.865999 0 0.500046 -0.865999 0 0.258766 0.96594 0 0.258766 -0.96594 0 0 1 0 0 -1 -1 0 0 -0.702872 0 0.711317 0 -0.258766 0.96594 0 -0.258766 -0.96594 0 -0.500046 -0.865999 0 -0.707083 0.70713 0 -0.707083 -0.70713 0 -0.866017 0.500015 0 -0.866017 -0.500015 0 -0.965932 0.258797 0 -0.965932 -0.258797 0 -1 0 -0.702891 0.184088 -0.687063 -1 0 0 -0.702891 0.184088 0.687063 -1 0 0 -0.702914 0.355632 0.615986 -1 0 0 -1 0 0 -0.702895 0.502945 -0.502976 -1 0 0 -0.702917 0.502945 0.502945 -1 0 0 -1 0 0 -0.702914 0.615986 -0.355632 -1 0 0 -0.702914 0.615986 0.355632 -1 0 0 -0.702891 0.687063 -0.184088 -1 0 0 -0.702891 0.687063 0.184088 -1 0 0 -0.702872 0.711317 0 0 0 -1 0 0 1 0 -0.0653706 -0.997861 0 -0.0654317 0.997857 0 -0.258766 -0.96594 0 -0.258797 0.965932 0 -0.500015 -0.866017 0 -0.499985 0.866034 0 -0.70713 -0.707083 0 -0.707083 0.70713 0 -0.866052 -0.499954 0 -0.866034 0.499985 0 -0.965932 -0.258797 0 -0.96594 0.258766 0 -1 0 0 -0.997859 -0.0654012 0 -0.997857 0.0654317 0 -1 0 -0.702891 -0.687063 -0.184088 -0.702895 -0.502945 -0.502976 -0.702917 -0.502945 0.502945 -0.702914 -0.355632 -0.615986 -0.702914 -0.355632 0.615986 -0.702891 -0.184088 -0.687063 -0.702891 -0.184088 0.687063 0 0 1 0 0 -1 -0.702872 0 0.711317 -0.702891 0.184088 -0.687063 -0.702891 0.184088 0.687063 -0.702914 0.355632 -0.615986 -0.702914 0.355632 0.615986 -0.702895 0.502945 -0.502976 -0.702917 0.502945 0.502945 -0.702914 0.615986 -0.355632 -0.702914 0.615986 0.355632 -0.702891 0.687063 -0.184088 -0.702891 0.687063 0.184088 -0.702872 0.711317 0 0 1 0 0 0.997859 -0.0654012 0 0.997857 0.0654317 0 1 0 0 0.965932 -0.258797 0 0.96594 0.258766 0 0.866052 -0.499954 0 0.866034 0.499985 0 0.70713 -0.707083 0 0.707083 0.70713 0 0.500015 -0.866017 0 0.499985 0.866034 0 0.258766 -0.96594 0 0.258797 0.965932 0 0.0653706 -0.997861 0 0.0654317 0.997857 0 0 -1 0 0 1 0 1 0 0 -0.995909 -0.0903653 0 0 -1 0 -0.995909 0.0903653 0 0 1 0 -0.0653706 -0.997861 0 -0.0654317 0.997857 0 -0.258766 -0.96594 0 -0.258797 0.965932 0 -0.500015 -0.866017 0 -0.499985 0.866034 0 -0.70713 -0.707083 0 -0.707083 0.70713 0 -0.866052 -0.499954 0 -0.866034 0.499985 0 -0.965932 -0.258797 0 -0.96594 0.258766 0 -1 0 0 -0.0903653 -0.995909 0 -0.997859 -0.0654012 0 -0.997857 0.0654317 0 -1 0 0 -0.0903653 0.995909 0 0.0903653 -0.995909 0 1 0 0 0.997859 -0.0654012 0 0.997857 0.0654317 0 0.0903653 0.995909 0 1 0 0 0.965932 -0.258797 0 0.96594 0.258766 0 0.866052 -0.499954 0 0.866034 0.499985 0 0.70713 -0.707083 0 0.707083 0.70713 0 0.500015 -0.866017 0 0.499985 0.866034 0 0.258766 -0.96594 0 0.258797 0.965932 0 0.0653706 -0.997861 0 0.0654317 0.997857 0 0 -1 0 0.995909 -0.0903653 0 0 1 0 0.995909 0.0903653 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.686087 0.707124 -0.171056 -0.686087 0.707124 -0.171056 -0.686087 0.707124 -0.171056 -0.686087 0.707124 -0.171056 -0.686087 0.707124 -0.171056 -0.686087 0.707124 -0.171056 -0.686087 0.707124 -0.171056 -0.686087 0.707124 -0.171056 -0.686087 0.707124 -0.171056 -0.686087 0.707124 -0.171056 0.970296 0 0.24192 0.970296 0 0.24192 0.970296 0 0.24192 0.970296 0 0.24192 0.970296 0 0.24192 0.970296 0 0.24192 0.970296 0 0.24192 0.970296 0 0.24192 0.970296 0 0.24192 0.970296 0 0.24192 0 1 0 0 1 0 0.142186 0.809038 -0.570299 0.142186 0.809038 -0.570299 0.142186 0.809038 -0.570299 0.142186 0.809038 -0.570299 0.230079 0.309 -0.922812 0.230079 0.309 -0.922812 0.230079 0.309 -0.922812 0.230079 0.309 -0.922812 0.230079 -0.309 -0.922812 0.230079 -0.309 -0.922812 0.230079 -0.309 -0.922812 0.230079 -0.309 -0.922812 0.142186 -0.809038 -0.570299 0.142186 -0.809038 -0.570299 0.142186 -0.809038 -0.570299 0.142186 -0.809038 -0.570299 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.142186 -0.809016 0.57033 -0.142186 -0.809016 0.57033 -0.142186 -0.809016 0.57033 -0.142186 -0.809016 0.57033 -0.230079 -0.309 0.922812 -0.230079 -0.309 0.922812 -0.230079 -0.309 0.922812 -0.230079 -0.309 0.922812 -0.230079 0.309 0.922812 -0.230079 0.309 0.922812 -0.230079 0.309 0.922812 -0.230079 0.309 0.922812 -0.142186 0.809038 0.570299 -0.142186 0.809038 0.570299 -0.142186 0.809038 0.570299 -0.142186 0.809038 0.570299 0 1 0 0 1 0 -0.970296 0 -0.24192 -0.259468 0.308603 0.915118 -0.970296 0 -0.24192 -0.200476 -0.308603 0.929824 -0.970296 0 -0.24192 -0.218879 0.806219 0.549638 -0.970296 0 -0.24192 -0.0647603 -0.80622 0.588061 -0.970296 0 -0.24192 -0.0950957 0.995186 -0.0236824 -0.970296 0 -0.24192 0.0950957 -0.995186 0.0236824 -0.970296 0 -0.24192 0.218879 -0.806219 -0.549638 -0.970296 0 -0.24192 0.0647603 0.80622 -0.588061 -0.970296 0 -0.24192 0.256294 -0.204535 -0.944711 -0.970296 0 -0.24192 0.200476 0.308603 -0.929824 -0.295358 0.793235 0.532487 -0.288522 0.302805 0.908331 -0.288522 0.302805 0.908331 -0.189276 0.98079 -0.0471816 -0.189276 0.98079 -0.0471816 -0.189276 0.98079 -0.0471816 -0.171636 -0.302805 0.93747 -0.0108036 0.79324 -0.608814 0.0108036 -0.79324 0.608814 0.0108036 -0.79324 0.608814 0.0108036 -0.79324 0.608814 0.171636 0.302805 -0.93747 0.171636 0.302805 -0.93747 0.189276 -0.98079 0.0471816 0.189276 -0.98079 0.0471816 0.298196 -0.401532 -0.865939 0.298196 -0.401532 -0.865939 0.295358 -0.793235 -0.532487 0.295358 -0.793235 -0.532487 -0.442579 0.747216 0.495773 -0.442579 0.747216 0.495773 -0.442579 0.747216 0.495773 -0.371288 0.923892 -0.0925626 -0.371288 0.923892 -0.0925626 -0.371288 0.923892 -0.0925626 -0.344737 0.285226 0.894317 -0.344737 0.285226 0.894317 -0.157994 0.747216 -0.645527 -0.157994 0.747216 -0.645527 -0.115452 -0.285257 0.951472 -0.115452 -0.285226 0.951482 0.115452 0.285226 -0.951482 0.157994 -0.747216 0.645527 0.344737 -0.285226 -0.894317 0.344737 -0.285226 -0.894317 0.371288 -0.923892 0.0925626 0.371288 -0.923892 0.0925626 -0.578234 0.672487 0.461959 -0.578234 0.672487 0.461959 0.442579 -0.747216 -0.495773 0.442579 -0.747216 -0.495773 -0.539048 0.831487 -0.134373 -0.539048 0.831487 -0.134373 -0.539048 0.831487 -0.134373 -0.396527 0.256722 0.881397 -0.396527 0.256722 0.881397 -0.29368 0.672445 -0.67939 -0.29368 0.672445 -0.67939 -0.0636311 -0.256722 0.964388 -0.0636311 -0.256722 0.964388 0.0636311 0.256722 -0.964388 -0.69721 0.571856 0.432295 -0.686087 0.707124 -0.171056 -0.686087 0.707124 -0.171056 -0.686087 0.707124 -0.171056 0.29368 -0.672445 0.67939 0.396527 -0.256722 -0.881397 0.396527 -0.256722 -0.881397 -0.441939 0.218299 0.870078 -0.41258 0.571856 -0.709055 -0.41258 0.571856 -0.709055 0.539048 -0.831487 0.134373 0.578234 -0.672487 -0.461959 0.578234 -0.672487 -0.461959 -0.80678 0.555559 -0.201147 -0.794792 0.449293 0.407971 -0.0182501 -0.218299 0.975711 -0.0182501 -0.218299 0.975711 0.0182501 0.218299 -0.975711 -0.510178 0.449293 -0.733385 -0.510178 0.449293 -0.733385 -0.479171 0.171514 0.860801 -0.479171 0.171514 0.860801 -0.896446 0.382672 -0.223487 -0.896446 0.382672 -0.223487 -0.896446 0.382672 -0.223487 -0.86729 0.309488 0.389904 -0.86729 0.309488 0.389904 0.41258 -0.571856 0.709055 0.41258 -0.571856 0.709055 0.41258 -0.571856 0.709055 0.441939 -0.218299 -0.870078 0.441939 -0.218299 -0.870078 -0.951661 0.195074 -0.237251 -0.951661 0.195074 -0.237251 -0.951661 0.195074 -0.237251 -0.58269 0.309488 -0.751458 -0.58269 0.309488 -0.751458 -0.58269 0.309488 -0.751458 -0.911944 0.157781 0.378765 -0.911944 0.157781 0.378765 -0.911944 0.157781 0.378765 0.686087 -0.707124 0.171056 0.69721 -0.571856 -0.432295 0.69721 -0.571856 -0.432295 -0.0189825 0.171514 -0.984999 -0.0189825 0.171514 -0.984999 -0.965632 0.0979949 -0.24073 0 1 0 0.0189825 -0.171514 0.984999 0.0189825 -0.171514 0.984999 -0.506882 0.118137 0.853882 -0.506882 0.118137 0.853882 -0.924098 0.0793786 0.373821 0 1 0 -0.627369 0.157781 -0.76257 -0.627369 0.157781 -0.76257 -0.627369 0.157781 -0.76257 -0.6404 0.0793786 -0.763928 0 1 0 -0.523911 0.060213 0.849642 -0.529435 0.0303964 0.847806 0 1 0 0.479171 -0.171514 -0.860801 -0.0466628 0.118137 -0.9919 -0.0466628 0.118137 -0.9919 0.510178 -0.449293 0.733385 0.510178 -0.449293 0.733385 0.0466628 -0.118137 0.9919 0.0466628 -0.118137 0.9919 0.794792 -0.449293 -0.407971 0.794792 -0.449293 -0.407971 -0.0637226 0.060213 -0.996149 -0.0637226 0.060213 -0.996149 0.80678 -0.555559 0.201147 0.80678 -0.555559 0.201147 -0.0694296 0.0303964 -0.997124 0 1 0 0.0637226 -0.060213 0.996149 0.0637226 -0.060213 0.996149 0.506882 -0.118137 -0.853882 0.506882 -0.118137 -0.853882 0 1 0 0.0694296 -0.0303659 0.997125 0.58269 -0.309488 0.751458 0.58269 -0.309488 0.751458 0.523911 -0.060213 -0.849642 0.86729 -0.309488 -0.389904 0.896446 -0.382672 0.223487 0.896446 -0.382672 0.223487 0.627369 -0.157781 0.76257 0 1 0 0.529435 -0.0303659 -0.847807 0 1 0 0.6404 -0.0793786 0.763928 0.911949 -0.15775 -0.378765 0.911949 -0.15775 -0.378765 0.951661 -0.195074 0.237251 0.951661 -0.195074 0.237251 0 1 0 0.924098 -0.0793786 -0.373821 0 1 0 0.965632 -0.0979949 0.24073 -0.0637289 0.0602355 -0.996148 0.0637289 -0.0602359 0.996148 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.642781 0 0.76605 0.642781 0 0.76605 0.0697348 0 0.997566 0.0697348 0 0.997566 0.0697348 0 0.997566 0.0697348 0 0.997566 -0.529893 0 0.848065 -0.529893 0 0.848065 -0.529893 0 0.848065 -0.529893 0 0.848065 -0.927193 0 0.374584 -0.927193 0 0.374584 -0.927193 0 0.374584 -0.927193 0 0.374584 -0.970296 0 -0.24192 -0.970296 0 -0.24192 -0.970296 0 -0.24192 -0.970296 0 -0.24192 -0.642781 0 -0.76605 -0.642781 0 -0.76605 -0.642781 0 -0.76605 -0.642781 0 -0.76605 -0.0697348 0 -0.997566 -0.0697348 0 -0.997566 -0.0697348 0 -0.997566 -0.0697348 0 -0.997566 0.529893 0 -0.848065 0.529893 0 -0.848065 0.529893 0 -0.848065 0.529893 0 -0.848065 0.927193 0 -0.374584 0.927193 0 -0.374584 0.927193 0 -0.374584 0.927193 0 -0.374584 0.970296 0 0.24192 0.970296 0 0.24192 0.970296 0 0.24192 0.970296 0 0.24192 0.642781 0 0.76605 0.642781 0 0.76605 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.970296 0 -0.24192 -0.970296 0 -0.24192 -0.970296 0 -0.24192 -0.970296 0 -0.24192 0.24192 0 -0.970296 0.24192 0 -0.970296 0.24192 0 -0.970296 0.24192 0 -0.970296 0.970296 0 0.24192 0.970296 0 0.24192 0.970296 0 0.24192 0.970296 0 0.24192 -0.24192 0 0.970296 -0.24192 0 0.970296 -0.24192 0 0.970296 -0.24192 0 0.970296 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.970296 0 0.24192 0.970296 0 0.24192 0.927193 0 -0.374584 0.927193 0 -0.374584 0.642781 0 0.76605 0.642781 0 0.76605 0.529893 0 -0.848065 0.529893 0 -0.848065 0.0697348 0 0.997566 0.0697348 0 0.997566 -0.0697348 0 -0.997566 -0.0697348 0 -0.997566 -0.529893 0 0.848065 -0.529893 0 0.848065 -0.642781 0 -0.76605 -0.642781 0 -0.76605 -0.927193 0 0.374584 -0.927193 0 0.374584 -0.970296 0 -0.24192 -0.970296 0 -0.24192 0 1 0 0 1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.866034 0 -0.499985 0.866034 0 -0.499985 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 0 0 1 0 0 1 0 0 1 0 0 1 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 1 0 0 1 0 0 1 0 0 1 0 0 0.866034 0 -0.499985 0.866034 0 -0.499985 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.939703 0 -0.34199 0.939703 0 -0.34199 0.76605 0 -0.642781 0.76605 0 -0.642781 0.76605 0 -0.642781 0.76605 0 -0.642781 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.17362 0 -0.984813 0.17362 0 -0.984813 0.17362 0 -0.984813 0.17362 0 -0.984813 -0.17362 0 -0.984813 -0.17362 0 -0.984813 -0.17362 0 -0.984813 -0.17362 0 -0.984813 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.76605 0 -0.642781 -0.76605 0 -0.642781 -0.76605 0 -0.642781 -0.76605 0 -0.642781 -0.939703 0 -0.34199 -0.939703 0 -0.34199 -0.939703 0 -0.34199 -0.939703 0 -0.34199 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.939703 0 0.34199 -0.939703 0 0.34199 -0.939703 0 0.34199 -0.939703 0 0.34199 -0.76605 0 0.642781 -0.76605 0 0.642781 -0.76605 0 0.642781 -0.76605 0 0.642781 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.17362 0 0.984813 -0.17362 0 0.984813 0.17362 0 0.984813 0.17362 0 0.984813 0.17362 0 0.984813 0.17362 0 0.984813 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.76605 0 0.642781 0.76605 0 0.642781 0.76605 0 0.642781 0.76605 0 0.642781 0.939703 0 0.34199 0.939703 0 0.34199 0.939703 0 0.34199 0.939703 0 0.34199 1 0 0 1 0 0 1 0 0 1 0 0 0.939703 0 -0.34199 0.939703 0 -0.34199 0.140965 0.707127 -0.692892 0.140965 0.707127 -0.692892 0.140965 0.707127 -0.692892 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 -0.258126 0.966111 0 -0.258126 0.966111 0 -0.258126 0.966111 0 -0.258126 0.966111 0 0.140965 0.707127 0.692892 0.140965 0.707127 0.692892 0.140965 0.707127 0.692892 -0.866034 0 -0.499985 0 -1 0 0 -1 0 0.195074 0 0.980788 0 0 -1 0 -1 0 0 -1 0 0 0 1 0 -1 0 0 0 1 0 0 -1 0 -1 0 0.866034 0 -0.499985 -0.195074 0 0.980788 0 -1 0 0.866034 0 -0.499985 -0.0762658 0.92389 0.374981 0.866034 0 -0.499985 -0.140965 0.707127 0.692892 0 -1 0 0.866034 0 -0.499985 -0.140965 0.707127 0.692892 0 -1 0 -0.0762658 0.92389 0.374981 0.195074 0 0.980788 0 0 -1 0 1 0 0 0 -1 0 1 0 -0.195074 0 0.980788 0 -1 0 0.866025 2.50635e-007 -0.5 -0.866027 1.57718e-007 -0.499998 0 -1 0 1 8.76956e-006 -2.39006e-005 1 -2.15843e-006 -1.18927e-005 1 2.15845e-006 -1.18926e-005 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 -1.39588e-005 5.82992e-007 1 0 0 1 -2.27558e-006 -2.49279e-006 1 -0.000260305 -0.000336834 1 6.30119e-014 -2.80725e-005 -0.696219 -0.71783 0 0 1 0 -0.696249 0.7178 0 0 -1 0 -0.696249 0 0.7178 -0.199347 0 -0.979929 -0.696249 0 -0.7178 -0.199347 0 0.979929 -0.696261 -0.507553 0.507553 -0.689272 -0.402509 0.602405 -0.0762658 0.92389 -0.374981 -0.696261 -0.507553 -0.507553 -0.551103 -0.400311 -0.732145 -0.0762658 0.92389 0.374981 -0.696305 0.507523 0.507523 -0.551103 0.400311 0.732145 -0.0762963 -0.923888 -0.374981 -0.696305 0.507523 -0.507523 -0.689298 0.402509 -0.602374 -0.0762963 -0.923888 0.374981 -0.496506 -0.865186 -0.0702536 -0.496506 -0.865186 0.0702536 -0.249428 -0.967042 -0.051149 -0.249428 -0.967042 0.051149 -0.496536 -0.0702536 -0.865168 -0.496536 0.0702536 -0.865168 -0.249428 0.051149 -0.967042 -0.249428 -0.051149 -0.967042 -0.496506 0.0702536 0.865186 -0.496506 -0.0702536 0.865186 -0.249428 -0.051149 0.967042 -0.249428 0.051149 0.967042 -0.496536 0.865168 -0.0702536 -0.496536 0.865168 0.0702536 -0.249428 0.967042 0.051149 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 1 0 0 0 -0.923884 -0.382672 1 0 0 0 -0.923884 0.382672 1 0 0 -0.0762658 0.92389 0.374981 1 0 0 -0.0762658 0.92389 -0.374981 0 -0.70713 -0.707083 1 0 0 0 -0.707083 0.70713 -0.184179 0.382672 -0.90534 0 -0.382672 -0.923884 1 0 0 0 -0.382672 0.923884 0 0 -1 1 0 0 0 0 1 0 0.382672 -0.923884 1 0 0 0 0.382672 0.923884 -0.184179 -0.382672 -0.90534 0 0.70713 -0.707083 1 0 0 0 0.707083 0.70713 -0.0762963 -0.923888 -0.374981 1 0 0 0 0.923884 -0.382672 1 0 0 0 0.923884 0.382672 1 0 0 -0.696282 -0.663137 -0.274667 0 1 0 -0.696282 -0.663137 0.274667 0 1 0 -0.696282 0.663137 -0.274667 0 -1 0 -0.696282 0.663137 0.274667 0 -1 0 -0.140965 0.707127 -0.692892 -0.140965 0.707127 0.692892 -0.140965 -0.707127 -0.692892 -0.140965 -0.707127 0.692892 -0.696282 0.274667 0.663137 -0.199347 0 -0.979929 -0.696282 -0.274667 -0.663137 -0.199347 0 0.979929 -0.696282 -0.274667 0.663137 -0.199347 0 -0.979929 -0.696282 0.274667 -0.663137 -0.199347 0 0.979929 -0.184179 0.382672 0.90534 -0.184179 0.382672 -0.90534 -0.184179 -0.382672 -0.90534 -0.184179 -0.382672 0.90534 -0.55327 -0.774987 -0.305429 -0.376232 -0.823505 -0.424604 -0.249428 -0.913011 -0.322794 -0.55327 -0.774987 0.305429 -0.376232 -0.823505 0.424604 -0.249428 -0.913011 0.322794 -0.249428 -0.647603 -0.719997 -0.249428 -0.719997 -0.647603 -0.249428 -0.647603 0.719997 -0.249428 -0.719997 0.647603 -0.55327 -0.305429 -0.774987 -0.376232 -0.424604 -0.823505 -0.249428 -0.322794 -0.913011 -0.55327 -0.305429 0.774987 -0.376232 -0.424604 0.823505 -0.249428 -0.322794 0.913011 -0.553301 0.305429 -0.774965 -0.376263 0.424604 -0.823491 -0.249428 0.322794 -0.913011 -0.553301 0.305429 0.774965 -0.376232 0.424604 0.823505 -0.249428 0.322794 0.913011 -0.249428 0.719997 -0.647603 -0.249428 0.647603 -0.719997 -0.249428 0.719997 0.647603 -0.249428 0.647603 0.719997 -0.553301 0.774978 -0.305399 -0.376263 0.823491 -0.424604 -0.249428 0.913011 -0.322794 -0.553301 0.774978 0.305399 -0.376263 0.823491 0.424604 -0.249428 0.913011 0.322794 -0.249428 0.967042 -0.051149 -0.184179 0.382672 0.90534 -0.184179 -0.382672 0.90534 -0.0762963 -0.923888 0.374981 0 1 0 1 -1.90914e-005 -4.01669e-006 -0.696268 0.507548 -0.507548 -0.689277 0.402511 -0.602397 -0.551128 -0.400317 -0.732123 -0.696248 -0.507563 -0.507563 -0.696244 -0.507565 0.507565 -0.689254 -0.402521 0.602416 -0.55113 0.400312 0.732124 -0.696263 0.507551 0.507553 1 0 0 1 0 0 0 -1 0 0.24189 0 -0.970304 0.970296 0 0.24192 -0.24192 0 0.970296 0 -1 0 0.970296 0 0.24192 0 -1 0 0.926078 0 0.377331 0 -1 0 0.24189 0 -0.970304 0.970296 0 0.24192 0 -1 0 0.24189 0 -0.970304 0.86309 0 0.505051 -0.24192 0 0.970296 0 -1 0 0.999168 0 -0.0407727 -0.24192 0 0.970296 0 -1 0 0.970296 0 0.24192 0 1 0 0.994826 0 0.101596 -0.913553 0 -0.40672 -0.559191 0 0.829039 -0.913553 0 -0.40672 -0.559191 0 0.829039 -0.970296 0 -0.24192 -0.970296 0 -0.24192 -0.997566 0 -0.0697348 -0.104526 0 -0.994522 -0.997566 0 -0.0697348 -0.104526 0 -0.994522 0.24189 0 -0.970304 0.970296 0 0.24192 -0.559191 0 0.829039 0.86309 0 0.505051 -0.559191 0 0.829039 0.86309 0 0.505051 -0.24192 0 0.970296 0.970296 0 0.24192 -0.104526 0 -0.994522 0.999168 0 -0.0407727 -0.104526 0 -0.994522 0.999168 0 -0.0407727 -4.66115e-008 -1 -2.17427e-006 -3.63048e-006 1 1.6235e-008 -1 0 0 -0.0762658 0.92389 -0.374981 -1 0 0 0 -0.923884 0.382672 -1 0 0 0 1 0 0 -0.707083 -0.70713 -1 0 0 -0.0762658 0.92389 0.374981 -1 0 0 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0.404157 -0.892092 -0.202063 0.70713 -0.707083 0 -0.0762658 0.92389 0.374981 0.70713 -0.707083 0 0 1 0 0 -0.70713 0.707083 0.70713 -0.707083 0 -0.0762658 0.92389 -0.374981 0.70713 -0.707083 0 0 1 0 0 -0.70713 0.707083 -0.0762658 0.92389 -0.374981 -0.0762658 0.92389 0.374981 0 -0.923884 0.382672 0.404157 -0.892092 0.202063 -0.0762658 0.92389 -0.374981 -0.0762658 0.92389 0.374981 0 1 0 0 -0.707083 -0.70713 -1 -3.8146e-006 -6.97418e-008 0.70711 -0.707103 -2.70547e-007 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.923884 -0.382672 0 0.923884 -0.382672 0.382672 0.923884 0 0.382672 0.923884 0 0.70713 0.707083 0 0.70713 0.707083 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.923884 -0.382672 0 0.923884 0.382672 0.270577 0.923892 0.270577 0.270577 0.923892 -0.270577 0 0.923884 0.382672 0 0.923884 0.382672 0 0.70713 0.707083 0 0.70713 0.707083 -1 0 0 0.953327 0.215644 -0.211341 -1 0 0 -0.0373241 -0.982292 0.183599 -1 0 0 -0.140965 -0.707127 0.692892 -1 0 0 0.953327 0.215644 -0.211341 0.833946 0.394147 -0.386242 0.833946 0.394147 -0.386242 0.483963 0.625053 -0.612445 0.483963 0.625053 -0.612445 -0.0762658 -0.92389 0.374981 0.297494 0.681911 -0.668203 -0.140965 -0.707127 0.692892 0.297494 0.681911 -0.668203 -0.0373545 -0.98229 0.183604 0 1 0 -1 0 0 0.976297 0 -0.216437 -1 0 0 -0.199347 0 0.979929 -1 0 0 0.976297 0 -0.216437 -1 0 0 -0.199347 0 0.979929 0.89976 0 -0.436384 0.89976 0 -0.436384 0.607013 0 -0.794692 0.607013 0 -0.794692 -0.199347 0 0.979929 0.40672 0 -0.913553 -0.199347 0 0.979929 0.40672 0 -0.913553 0 -1 0 0 1 0 -1 0 0 0.953327 -0.215644 -0.211341 -1 0 0 -0.0373241 0.982292 0.183599 -1 0 0 0.953327 -0.215644 -0.211341 -1 0 0 -0.140965 0.707127 0.692892 0.833946 -0.394147 -0.386242 0.833946 -0.394147 -0.386242 0.483963 -0.625053 -0.612445 0.483963 -0.625053 -0.612445 -0.0762658 0.92389 0.374981 0.297494 -0.681911 -0.668203 -0.140965 0.707127 0.692892 0.297494 -0.681911 -0.668203 -0.0373545 0.98229 0.183604 0 -1 0 0 -1 0 0 0 -1 -0.140965 0.707127 0.692892 0 -1 0 -0.184179 0.382672 0.90534 -0.184179 -0.382672 0.90534 0 1 0 0 0 -1 -0.140965 -0.707127 0.692892 0 1 0 0 -1 0 0 0 -1 -0.140965 0.707127 0.692892 0 -1 0 -0.184179 0.382672 0.90534 -0.184179 -0.382672 0.90534 0 1 0 0 0 -1 -0.140965 -0.707127 0.692892 0 1 0 -1 0 0 1 0 0 -0.199377 0 -0.979923 0 -1 0 0 -1 0 0.199377 0 0.979923 -0.184179 -0.382672 -0.90534 -0.140965 -0.707127 -0.692892 0 1 0 0 1 0 0.199377 0 0.979923 -0.199377 0 -0.979923 0 -1 0 0 -1 0 0.199377 0 0.979923 -0.184179 -0.382672 -0.90534 -0.140965 -0.707127 -0.692892 0 1 0 0 1 0 0.199377 0 0.979923 -1 0 0 1 0 0 -1 0 0 -0.0373241 0.982292 -0.183599 -1 0 0 0.953327 -0.215644 0.211341 -1 0 0 -0.140965 0.707127 -0.692892 -1 0 0 0.953327 -0.215644 0.211341 0.833946 -0.394147 0.386242 0.833946 -0.394147 0.386242 0.483963 -0.625053 0.612445 0.483963 -0.625053 0.612445 -0.0762658 0.92389 -0.374981 0.297494 -0.681911 0.668203 -0.140965 0.707127 -0.692892 0.297494 -0.681911 0.668203 -0.0373545 0.98229 -0.183604 0 -1 0 -0.140965 0.707127 -0.692892 0 -1 0 0 -1 0 0.199377 0 0.979923 -0.184179 0.382672 -0.90534 -0.184179 -0.382672 -0.90534 -0.140965 -0.707127 -0.692892 0 1 0 0 1 0 0.199377 0 0.979923 -0.140965 0.707127 -0.692892 0 -1 0 0 -1 0 0.199377 0 0.979923 -0.184179 0.382672 -0.90534 -0.184179 -0.382672 -0.90534 -0.140965 -0.707127 -0.692892 0 1 0 0 1 0 0.199377 0 0.979923 -1 0 0 1 0 0 -1 0 0 -0.199347 0 -0.979929 -1 0 0 0.976297 0 0.216437 -1 0 0 -0.199347 0 -0.979929 -1 0 0 0.976297 0 0.216437 0.89976 0 0.436384 0.89976 0 0.436384 0.607013 0 0.794692 0.607013 0 0.794692 -0.199347 0 -0.979929 0.40672 0 0.913553 -0.199347 0 -0.979929 0.40672 0 0.913553 0 -1 0 0 1 0 -1 0 0 -0.0373241 -0.982292 -0.183599 -1 0 0 0.953327 0.215644 0.211341 -1 0 0 -0.140965 -0.707127 -0.692892 -1 0 0 0.953327 0.215644 0.211341 0.833946 0.394147 0.386242 0.833946 0.394147 0.386242 0.483963 0.625053 0.612445 0.483963 0.625053 0.612445 -0.0762658 -0.92389 -0.374981 0.297494 0.681911 0.668203 -0.140965 -0.707127 -0.692892 0.297494 0.681911 0.668203 -0.0373545 -0.98229 -0.183604 0 1 0 0.0373241 -0.982292 0.183599 0.0373241 -0.982292 0.183599 0.100742 0.86287 0.495285 0.0373241 -0.982292 0.183599 0.100742 0.86287 0.495285 0.0373241 -0.982292 0.183599 0.112033 -0.827085 0.550798 0.172002 -0.505448 0.84554 -0.084872 -0.996132 0.0227363 0.100742 0.86287 0.495285 0.172002 -0.505448 0.84554 -1 0 0 0.0762658 -0.92389 0.374981 -1 0 0 0.184179 -0.382672 0.90534 -1 0 0 0.184179 0.382672 0.90534 -1 0 0 -1 0 0 0.0762658 0.92389 0.374981 -1 0 0 0.184179 -0.382672 -0.90534 -1 0 0 0.184179 0.382672 -0.90534 -1 0 0 0.0762658 0.92389 -0.374981 -1 0 0 -1 0 0 0 -1 0 0.199347 0 0.979929 -1 0 0 0.184179 -0.382672 0.90534 -0.0878933 -0.993844 0.0674459 -0.0951567 -0.993945 0.0549333 -0.0951567 -0.993945 0.0549333 -0.189184 -0.975848 0.109226 -0.141423 -0.989225 0.0378735 -0.0548418 -0.998469 0.00720237 0.104526 0 0.994522 -1 0 0 0.0762658 0.92389 -0.374981 -1 0 0 0.0762658 0.92389 0.374981 -1 0 0 0.100742 0.86287 0.495285 -1 0 0 0.100742 0.86287 -0.495285 -0.0878933 -0.993844 -0.0674459 -0.189184 -0.975848 -0.109226 -0.0951567 -0.993945 -0.0549333 -0.0951567 -0.993945 -0.0549333 -0.102359 -0.993844 -0.0423902 -0.102359 -0.993844 -0.0423902 -0.211035 -0.975843 -0.0565203 -0.102359 -0.993844 0.0423902 -0.106143 -0.993945 -0.0284127 -0.084872 -0.996132 0.0227363 -0.109867 -0.993842 0.0144353 0.104526 0 0.994522 -0.109867 -0.993842 -0.0144353 0.104526 0 0.994522 0.104526 0 0.994522 -0.109928 -0.993834 0.0144658 -0.218635 -0.975807 0 -0.109958 -0.993831 -0.0144658 -0.0879238 -0.996127 0 1 0 0 0 -1 0 0.199347 0 0.979929 1 0 0 0.184179 -0.382672 0.90534 1 0 0 0.172002 -0.505448 0.84554 1 0 0 1 0 0 0.172002 0.505448 0.84554 1 0 0 0.0762658 0.92389 0.374981 1 0 0 1 0 0 0.164861 -0.56209 -0.810479 1 0 0 0.0762658 0.92389 -0.374981 1 0 0 0.172002 0.505448 -0.84554 1 0 0 0.0373535 -0.98229 0.183603 -0.863073 -7.20931e-005 -0.505079 0.0762936 -0.923881 -0.374999 0.172024 -0.505452 0.845533 -0.0848858 -0.996131 0.0227432 0.172025 0.505452 0.845533 0.172025 0.505455 -0.845531 -0.998544 1.36142e-006 -0.0539366 -0.943054 -9.12253e-007 -0.332638 0.10077 0.862858 0.4953 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 0 1 0 0 1 0 0 1 0 0 1 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.707083 0.70713 0 0.707083 0.70713 0 0.707083 0.70713 0 0.707083 0.70713 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 1 0 0 1 0 0 0.809016 -0.587786 0 0.809016 -0.587786 0 0.809016 -0.587786 0 0.809016 -0.587786 0 0.309 -0.951062 0 0.309 -0.951062 0 0.309 -0.951062 0 0.309 -0.951062 0 -0.309 -0.951062 0 -0.309 -0.951062 0 -0.309 -0.951062 0 -0.309 -0.951062 0 -0.809016 -0.587786 0 -0.809016 -0.587786 0 -0.809016 -0.587786 0 -0.809016 -0.587786 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.809016 0.587786 0 -0.809016 0.587786 0 -0.809016 0.587786 0 -0.809016 0.587786 0 -0.309 0.951062 0 -0.309 0.951062 0 -0.309 0.951062 0 -0.309 0.951062 0 0.309 0.951062 0 0.309 0.951062 0 0.309 0.951062 0 0.309 0.951062 0 0.809016 0.587786 0 0.809016 0.587786 0 0.809016 0.587786 0 0.809016 0.587786 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -1 0 0 -1 0 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 1 0 0 1 0 0 1 0 0 1 0 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.70713 0.707083 0 0.70713 0.707083 0 0.70713 0.707083 0 0.70713 0.707083 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 0 1 0 0 1 0 0 1 0 0 1 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.70713 0.707083 0 0.70713 0.707083 0 0.70713 0.707083 0 0.70713 0.707083 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 1 0 0 1 0 0 1 0 0 1 0 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 0 1 0 0 1 0 0 1 0 0 1 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.707083 0.70713 0 0.707083 0.70713 0 0.707083 0.70713 0 0.707083 0.70713 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 1 0 0 1 0 0 -1 0 0 0.195074 -0.980788 0 -1 0 0 0 1 0 0 -1 0 -0.195074 -0.980788 0 1 0 0 0 1 0 1 0 0 -1 0 0 0.195074 -0.980788 0 -1 0 0 0 1 0 0 -1 0 -0.195074 -0.980788 0 1 0 0 0 1 0 1 0 1 0 0 -1 0 0 -0.999645 0 0.0266427 -0.998782 0.0460219 0.0177923 -0.998782 0.0460219 0.0177923 -0.992498 0 -0.122257 -0.995587 0.0461135 -0.0817286 -0.98457 0 0.174993 -0.992035 0.0461745 0.117191 -0.989695 0.0694601 0.125217 -0.992706 0.069277 -0.0986663 0 0.999062 -0.0433058 -0.990495 0.137547 0 0 0.999427 0.033845 -0.990495 0.137547 0 0 0.999479 -0.0322886 -0.990495 0.137547 0 0 0.999931 0.0117801 -0.990495 0.137547 0 0 0.999947 -0.0102542 -0.968777 0 0.247932 0 0.998637 0.0521867 -0.980624 0 -0.195898 0 0.998716 -0.0506607 -0.963288 0 -0.268471 -0.963288 0 -0.268471 -0.968777 0 0.247932 0 0.997379 0.0723594 -0.947597 0 0.319468 -0.947597 0 0.319468 0 -0.195074 0.980788 0 -0.130589 0.991437 0 -0.707083 0.70713 0 -0.980788 0.195074 -0.927267 0 -0.374401 0 -1 0 -0.936926 0 -0.349528 -0.905993 0 0.423292 -0.900646 0 0.434553 -0.912653 0 -0.408734 0 -0.995187 -0.0979949 -0.912653 0 -0.408734 0 0.988903 -0.148564 -0.912653 0 -0.408734 0 -0.923884 -0.382672 -0.912653 0 -0.408734 0 0.907526 -0.419996 -0.910243 0 -0.414075 0 -0.831477 -0.555559 -0.910243 0 -0.414075 0 0.812125 -0.583483 -0.907794 0 -0.419416 0 -0.70713 -0.707083 -0.907794 0 -0.419416 0 0.687643 -0.726049 -0.821776 0 -0.569811 0 -0.555559 -0.831477 -0.821776 0 -0.569811 3.05185e-005 0.53853 -0.842607 -0.579058 0 -0.815286 -0.415082 -0.202155 -0.88704 -0.229591 -0.296884 -0.926902 -0.579058 0 -0.815286 -0.414106 0.195502 -0.888986 -0.228919 0.286966 -0.930186 -0.150761 -0.263405 -0.952832 -0.150426 0.254585 -0.955279 -0.17954 -0.0664998 -0.9815 -0.17954 -0.0664998 -0.9815 -0.179479 0.0642109 -0.981664 -0.179479 0.0642109 -0.981664 -0.00695822 -0.0654622 -0.997831 -0.00695822 -0.0654622 -0.997831 -0.00695822 0.0632038 -0.997976 -0.00695822 0.0632038 -0.997976 0 -0.195074 -0.980788 0 -0.0980255 -0.995184 0 -0.70713 -0.707083 0 -0.980788 -0.195074 0.0261544 0.249367 -0.968056 0.0261544 0.249367 -0.968056 0.0261849 -0.258034 -0.965781 0 -0.995187 0.0979949 0 0.99226 0.12418 0 -0.923884 0.382672 0 0.899938 0.436018 -0.880764 0 0.473556 0 -0.831477 0.555559 -0.880764 0 0.473556 0 0.803417 0.595416 -0.871634 0 0.490158 0 -0.707083 0.70713 -0.871634 0 0.490158 0 0.679006 0.734132 -0.787853 0 0.615864 0 -0.555559 0.831477 -0.787853 0 0.615864 0 0.531022 0.847358 -0.568621 0 0.8226 -0.407422 -0.201331 0.890771 -0.234382 -0.297159 0.925614 -0.568621 0 0.8226 -0.406049 0.191778 0.893502 -0.233436 0.282907 0.930307 -0.153905 -0.263649 0.952262 -0.153905 -0.263649 0.952262 -0.153447 0.250954 0.95576 -0.200659 -0.0664693 0.977404 -0.200659 -0.0664693 0.977404 -0.200568 0.0631733 0.977641 -0.0505387 -0.0654622 0.996574 -0.0505387 0.0622272 0.996782 0 0.999427 0.033845 0 0.998438 0.0558794 0 0.999931 0.0117801 0 0.997379 0.0723594 0 0.999947 -0.0102542 0 0.999479 -0.0322886 0 0.998807 -0.0488296 0.0624409 -0.0655538 0.995893 0.0624409 0.0623188 0.996101 0.14185 -0.101047 -0.984717 0.3755 0 -0.926822 0.18598 -0.10062 0.977388 0.425123 0 0.905136 0.0639058 0.246376 0.967065 0.0639058 0.246376 0.967065 0.0640889 -0.258858 0.963787 0 0.687643 -0.726049 0.0274667 0.486679 -0.873149 0.0397351 0.280709 -0.95897 0.0627766 -0.0655538 0.995872 0.0938139 0 0.99559 0 -0.70713 -0.707083 0.0276193 -0.50267 -0.864037 0.0398572 -0.290475 -0.956052 0 0 1 0.340922 0.939647 -0.028901 0.110752 0.99068 -0.0792871 0.110752 0.99068 -0.0792871 0.343028 0.930387 -0.129276 0.48384 0.870896 -0.0862453 0.678182 0.734894 0 0 0 1 0.678182 0.734894 0 0 0.907526 -0.419996 0.71387 0.700278 0 0.00820948 0 -0.999966 0 0.812125 -0.583483 0.0762047 0 -0.997092 0.71387 0.700278 0 0 0.990205 0.139622 0 0.899938 0.436018 0 0.679006 0.734132 0.0669881 0.480972 0.874173 0.0970794 0.277352 0.955851 0 0.803417 0.595416 0.185888 0 0.982571 0 -0.707083 0.70713 0.0675375 -0.503983 0.861069 0.0975066 -0.291421 0.951612 0 -0.923884 0.382672 0.185888 0 0.982571 0.00412 -0.0980255 -0.995175 0 0 1 0 -0.0980255 -0.995184 0.0762047 0 -0.997092 0.778304 0.627888 0 0 0 1 0.778304 0.627888 0 0 0 -1 0.778304 0.627888 0 0.185888 0 0.982571 0.778304 0.627888 0 0.0762047 0 -0.997092 0.925705 0.378246 0 0 0 1 0.925705 0.378246 0 0 0 -1 0.925705 0.378246 0 0.185888 0 0.982571 0.925705 0.378246 0 0 -0.995187 -0.0979949 1 0 0 0 -0.980788 0.195074 1 0 0 0 -0.980788 -0.195074 1 0 0 0 -0.995187 0.0979949 1 0 0 0 -0.980788 0.195074 0.185888 0 0.982571 1 0 0 0 -0.707083 0.70713 1 0 0 0 -0.70713 -0.707083 1 0 0 0 -0.923884 -0.382672 1 0 0 0 -0.831477 -0.555559 0.0762047 0 -0.997092 1 0 0 0 -0.195074 0.980788 1 0 0 0 -0.195074 -0.980788 1 0 0 0.0762047 0 -0.997092 0.995303 0.0968047 0 0 0 1 0.995303 0.0968047 0 0 0 -1 0.995303 0.0968047 0 0.185888 0 0.982571 0.995303 0.0968047 0 7.85328e-007 0.998992 0.044878 -6.93687e-007 0.990204 0.139629 -3.42118e-007 -0.320786 -0.947152 0.191915 -0.267134 -0.944356 1.52841e-007 -0.707056 -0.707158 -4.3601e-008 -0.923896 -0.382643 9.92703e-008 -0.831474 0.555564 -1.26916e-007 -0.752337 0.658779 0.185996 -0.100637 0.977383 4.68372e-009 0.998715 -0.0506706 -0.940585 2.53562e-008 -0.339558 0.425143 -5.62101e-008 0.905126 0.682894 -2.15587e-007 0.730518 0.999942 5.69935e-007 0.0108014 0.998672 -1.40775e-008 -0.0515188 0.970998 7.46891e-008 -0.239087 0.93328 -2.68556e-008 -0.359149 0.733585 4.81426e-008 -0.679598 -0.880753 1.96754e-006 0.473576 0.713851 0.700297 -2.96407e-007 0 -1 0 0.425143 -5.62101e-008 0.905126 0.425143 -5.62101e-008 0.905126 - - - - - - - - - - - - - - -

0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17

-

18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35

-

36 36 37 37 38 38 39 39

-

40 40 41 41 42 42 43 43

-

44 44 45 45 46 46 47 47

-

48 48 49 49 50 50 51 51

-

52 52 53 53 54 54 55 55

-

56 56 57 57 58 58 59 59

-

60 60 61 61 62 62 63 63

-

64 64 65 65 66 66 67 67

-

68 68 69 69 70 70 71 71

-

72 72 73 73 74 74 75 75

-

76 76 77 77 78 78 79 79

-

80 80 81 81 82 82 83 83

-

84 84 85 85 86 86 87 87

-

88 88 89 89 90 90 91 91

-

92 92 93 93 94 94 95 95

-

96 96 97 97 98 98 99 99

-

100 100 101 101 102 102 103 103

-

104 104 105 105 106 106 107 107

-
- - - -

108 108 109 109 110 110 111 111

-

112 112 113 113 114 114 115 115

-

116 116 117 117 118 118 119 119

-

120 120 121 121 122 122 123 123

-

124 124 125 125 126 126 127 127

-
- - - -

128 128 129 128 130 128 131 128 132 128 133 128

-

134 128 135 128 136 128 137 128 138 128 139 128

-

140 128 141 128 142 128 143 128 144 128

-

145 128 146 128 147 128 148 128

-
- - - -

149 129 150 129 151 129

-
- - - -

152 130 153 130 154 130

-
- - - -

155 131 156 131 157 131

-
- - - -

158 132 159 132 160 132

-
- - - -

260 344 275 344 274 344

-
- - - -

196 344 202 344 351 344 260 344 274 344

-
- - - -

357 345 246 345 347 345 246 345 341 345 347 345 354 345 344 345 247 345 221 345 340 345 334 345 334 345 337 345 221 345 195 345 196 345 222 345 273 345 363 345 369 345 366 345 273 345 369 345 247 345 360 345 354 345

-
- - - -

221 345 222 345 247 345 344 345 340 345

-

195 345 222 345 220 345 205 345 187 345

-

220 345 232 345 217 345 205 345

-

245 345 232 345 220 345 221 345 337 345 341 345 246 345

-

272 345 271 345 250 345 245 345 246 345

-

272 345 303 345 298 345 271 345

-

275 345 282 345 313 345 307 345 273 345

-

273 345 307 345 303 345 272 345 246 345 357 345 363 345

-

247 345 274 345 273 345 366 345 360 345

-
- - - -

204 346 211 346 214 346

-
- - - -

214 346 230 346 240 346 219 346

-

219 346 203 346 204 346 214 346

-
- - - -

291 347 290 347 279 347

-
- - - -

244 347 243 347 218 347 175 347 373 347

-

243 347 244 347 261 347 269 347 263 347 251 347

-

263 347 262 347 258 347 251 347

-

288 347 292 347 291 347 279 347 262 347 263 347 269 347

-
- - - -

295 348 289 348 276 348

-
- - - -

327 348 374 348 304 348 306 348 319 348

-

321 348 310 348 290 348 292 348 375 348

-

310 348 321 348 320 348 319 348 306 348 299 348 301 348

-

299 348 306 348 305 348 295 348

-

305 348 304 348 289 348 295 348

-
- - - -

190 349 218 349 199 349

-
- - - -

188 349 190 349 199 349 193 349

-
- - - -

189 350 181 350 172 350 175 350 190 350

-

211 350 191 350 372 350 173 350 184 350

-

184 350 173 350 174 350 181 350 189 350 188 350

-
- - - -

349 321 343 315 339 311 336 308 239 211 346 318 355 327 361 333 367 339 370 342 364 336 358 330

-

363 335 365 337 371 343 369 341

-

369 341 371 343 368 340 366 338

-

366 338 368 340 362 334 360 332

-

360 332 362 334 356 328 354 326

-

354 326 356 328 345 317 344 316

-

344 316 345 317 238 210 340 312

-

340 312 238 210 335 307 334 306

-

334 306 335 307 338 310 337 309

-

337 309 338 310 342 314 341 313

-

341 313 342 314 348 320 347 319

-

347 319 348 320 359 331 357 329

-

357 329 359 331 365 337 363 335

-
- - - -

349 321 343 315 339 311 336 308 239 211 346 318 355 327 361 333 367 339 370 342 364 336 358 330

-

363 335 365 337 371 343 369 341

-

369 341 371 343 368 340 366 338

-

366 338 368 340 362 334 360 332

-

360 332 362 334 356 328 354 326

-

354 326 356 328 345 317 344 316

-

344 316 345 317 238 210 340 312

-

340 312 238 210 335 307 334 306

-

334 306 335 307 338 310 337 309

-

337 309 338 310 342 314 341 313

-

341 313 342 314 348 320 347 319

-

347 319 348 320 359 331 357 329

-

357 329 359 331 365 337 363 335

-

295 267 298 270 303 275 301 273

-

353 325 250 222 297 269 294 266

-

248 220 352 324 229 201 231 203

-

213 185 216 188 231 203 229 201

-

182 154 185 157 215 187 212 184

-

186 158 183 155 192 164 194 166

-

197 169 200 172 194 166 192 164

-

241 213 350 322 201 173 198 170

-

351 323 243 215 258 230 260 232

-

278 250 281 253 260 232 258 230

-

310 282 313 285 282 254 279 251

-

312 284 309 281 301 273 303 275

-
- - - -

349 321 343 315 339 311 336 308 239 211 346 318 355 327 361 333 367 339 370 342 364 336 358 330

-

363 335 365 337 371 343 369 341

-

369 341 371 343 368 340 366 338

-

366 338 368 340 362 334 360 332

-

360 332 362 334 356 328 354 326

-

354 326 356 328 345 317 344 316

-

344 316 345 317 238 210 340 312

-

340 312 238 210 335 307 334 306

-

334 306 335 307 338 310 337 309

-

337 309 338 310 342 314 341 313

-

341 313 342 314 348 320 347 319

-

347 319 348 320 359 331 357 329

-

357 329 359 331 365 337 363 335

-

295 267 298 270 303 275 301 273

-

353 325 250 222 297 269 294 266

-

248 220 352 324 229 201 231 203

-

213 185 216 188 231 203 229 201

-

182 154 185 157 215 187 212 184

-

186 158 183 155 192 164 194 166

-

197 169 200 172 194 166 192 164

-

241 213 350 322 201 173 198 170

-

351 323 243 215 258 230 260 232

-

278 250 281 253 260 232 258 230

-

310 282 313 285 282 254 279 251

-

312 284 309 281 301 273 303 275

-

223 195 207 179 225 197 234 206

-

328 300 333 305 322 294 314 286

-

253 225 270 242 284 256 265 237

-

164 136 161 133 169 141 178 150

-

170 142 179 151 176 148 167 139

-

252 224 255 227 171 143 168 140

-

269 241 256 228 254 226 266 238

-

286 258 267 239 264 236 283 255

-

330 302 332 304 288 260 285 257

-

318 290 331 303 329 301 315 287

-

327 299 319 291 316 288 324 296

-

235 207 237 209 326 298 323 295

-

227 199 236 208 233 205 224 196

-

210 182 228 200 226 198 208 180

-

162 134 165 137 209 181 206 178

-

180 152 166 138 163 135 177 149

-
- - - -

376 351 377 351 378 351 379 351 380 351

-
- - - -

381 352 382 352 383 352 384 352 385 352

-
- - - -

386 353 387 353 388 353 389 353 390 353

-
- - - -

391 354 392 355 393 356 394 357

-

395 358 396 359 397 360 398 361

-

399 362 400 363 401 364 402 365

-

403 366 404 367 405 368 406 369

-

407 370 408 371 409 372 410 373

-
- - - -

416 374 417 374 418 374

-
- - - -

411 374 412 374 413 374 414 374 415 374

-
- - - -

427 683 584 683 586 683 427 683 582 683 584 683 581 683 582 683 427 683 427 683 583 683 581 683 427 683 585 683 583 683 446 683 602 683 600 683 446 683 600 683 598 683 437 683 596 683 594 683 437 683 594 683 443 683 443 683 436 683 437 683 437 683 436 683 433 683 437 683 433 683 589 683 437 683 589 683 587 683 435 683 593 683 595 683 435 683 441 683 593 683 435 683 588 683 431 683 446 683 597 683 599 683 446 683 599 683 601 683 603 683 446 683 601 683 446 683 603 683 602 683

-
- - - -

437 683 447 683 446 683 598 683 596 683

-

437 683 587 683 585 683 427 683 421 683 420 683 571 683 425 683 426 683

-

441 683 435 683 431 683 727 683

-

586 683 588 683 435 683 434 683 429 683 576 683 573 683 572 683 423 683 421 683 427 683

-

595 683 597 683 446 683 609 683 445 683 604 683 439 683 434 683 435 683

-
- - - -

679 684 556 684 558 684 558 684 677 684 679 684 558 684 675 684 677 684 543 684 671 684 673 684 543 684 669 684 671 684 543 684 666 684 669 684 543 684 667 684 666 684

-
- - - -

558 684 541 684 543 684 673 684 675 684

-
- - - -

665 685 664 685 538 685 538 685 668 685 665 685 538 685 670 685 668 685 557 685 674 685 672 685 557 685 676 685 674 685 557 685 678 685 676 685 557 685 554 685 678 685

-
- - - -

538 685 540 685 557 685 672 685 670 685

-
- - - -

627 686 456 686 454 686 454 686 629 686 627 686 454 686 631 686 629 686 476 686 462 686 640 686 476 686 640 686 637 686 476 686 637 686 635 686 476 686 635 686 633 686 644 686 478 686 473 686 644 686 646 686 478 686 657 686 540 686 655 686 659 686 540 686 657 686 660 686 658 686 541 686 656 686 541 686 658 686 647 686 645 686 479 686 645 686 475 686 479 686 641 686 464 686 481 686 481 686 638 686 641 686 481 686 636 686 638 686 481 686 634 686 636 686 453 686 630 686 632 686 453 686 628 686 630 686 453 686 626 686 628 686

-
- - - -

478 686 476 686 633 686 631 686 454 686 452 686 471 686 473 686

-

648 686 482 686 477 686 478 686 646 686

-

652 686 506 686 482 686 648 686

-

536 686 506 686 652 686 535 686

-

655 686 540 686 539 686 536 686 535 686

-

661 686 549 686 548 686 540 686 659 686

-

663 686 550 686 549 686 661 686

-

551 686 550 686 663 686 662 686

-

660 686 541 686 552 686 551 686 662 686

-

654 686 537 686 542 686 541 686 656 686

-

507 686 537 686 654 686 653 686

-

653 686 649 686 483 686 507 686

-

649 686 647 686 479 686 480 686 483 686

-

632 686 634 686 481 686 479 686 475 686 470 686 451 686 453 686

-
- - - -

466 687 467 687 459 687 460 687 470 687 469 687

-
- - - -

469 687 466 687 459 687 450 687 449 687 451 687 460 687

-
- - - -

559 688 561 688 684 688 700 688 564 688 559 688

-
- - - -

559 688 684 688 687 688 689 688 691 688 693 688 695 688 697 688 701 688 700 688

-
- - - -

567 689 564 689 706 689 724 689 569 689 567 689

-
- - - -

567 689 706 689 707 689 711 689 713 689 715 689 717 689 719 689 721 689 724 689

-
- - - -

562 690 566 690 704 690 686 690 561 690 562 690

-
- - - -

562 690 704 690 702 690 698 690 696 690 694 690 692 690 690 690 688 690 686 690

-
- - - -

570 691 569 691 726 691 710 691 566 691 570 691

-
- - - -

570 691 726 691 722 691 720 691 718 691 716 691 714 691 712 691 708 691 710 691

-
- - - -

688 644 628 584 626 582 686 642

-

628 584 688 644 690 646 630 586

-

630 586 690 646 692 648 632 588

-

632 588 692 648 694 650 634 590

-

634 590 694 650 696 652 636 592

-

636 592 696 652 698 654 638 594

-

638 594 698 654 702 658 641 597

-

641 597 702 658 703 659 642 598

-

704 660 566 522 650 606 464 420

-

650 606 566 522 709 665 547 503

-

708 664 666 622 667 623 710 666

-

666 622 708 664 712 668 669 625

-

669 625 712 668 714 670 671 627

-

671 627 714 670 716 672 673 629

-

673 629 716 672 718 674 675 631

-

675 631 718 674 720 676 677 633

-

677 633 720 676 722 678 679 635

-

679 635 722 678 725 681 681 637

-

556 512 726 682 569 525 682 638

-

569 525 724 680 554 510 682 638

-

721 677 678 634 680 636 723 679

-

678 634 721 677 719 675 676 632

-

676 632 719 675 717 673 674 630

-

674 630 717 673 715 671 672 628

-

672 628 715 671 713 669 670 626

-

670 626 713 669 711 667 668 624

-

668 624 711 667 707 663 665 621

-

665 621 707 663 706 662 664 620

-

545 501 705 661 564 520 651 607

-

651 607 564 520 700 656 462 418

-

639 595 699 655 701 657 640 596

-

640 596 701 657 697 653 637 593

-

637 593 697 653 695 651 635 591

-

695 651 693 649 633 589 635 591

-

631 587 633 589 693 649 691 647

-

629 585 631 587 691 647 689 645

-

627 583 629 585 689 645 687 643

-

625 581 627 583 687 643 683 639

-

684 640 561 517 449 405 456 412

-

449 405 561 517 685 641 458 414

-
- - - -

688 644 628 584 626 582 686 642

-

628 584 688 644 690 646 630 586

-

630 586 690 646 692 648 632 588

-

632 588 692 648 694 650 634 590

-

634 590 694 650 696 652 636 592

-

636 592 696 652 698 654 638 594

-

638 594 698 654 702 658 641 597

-

641 597 702 658 703 659 642 598

-

704 660 566 522 650 606 464 420

-

650 606 566 522 709 665 547 503

-

708 664 666 622 667 623 710 666

-

666 622 708 664 712 668 669 625

-

669 625 712 668 714 670 671 627

-

671 627 714 670 716 672 673 629

-

673 629 716 672 718 674 675 631

-

675 631 718 674 720 676 677 633

-

677 633 720 676 722 678 679 635

-

679 635 722 678 725 681 681 637

-

556 512 726 682 569 525 682 638

-

569 525 724 680 554 510 682 638

-

721 677 678 634 680 636 723 679

-

678 634 721 677 719 675 676 632

-

676 632 719 675 717 673 674 630

-

674 630 717 673 715 671 672 628

-

672 628 715 671 713 669 670 626

-

670 626 713 669 711 667 668 624

-

668 624 711 667 707 663 665 621

-

665 621 707 663 706 662 664 620

-

545 501 705 661 564 520 651 607

-

651 607 564 520 700 656 462 418

-

639 595 699 655 701 657 640 596

-

640 596 701 657 697 653 637 593

-

637 593 697 653 695 651 635 591

-

695 651 693 649 633 589 635 591

-

631 587 633 589 693 649 691 647

-

629 585 631 587 691 647 689 645

-

627 583 629 585 689 645 687 643

-

625 581 627 583 687 643 683 639

-

684 640 561 517 449 405 456 412

-

449 405 561 517 685 641 458 414

-

610 566 609 565 447 403 614 570 617 573 621 577 623 579 619 575 615 571

-

426 382 574 530 577 533 579 535 590 546 591 547 605 561 607 563 612 568 614 570

-

649 605 653 609 592 548 580 536

-

647 603 649 605 580 536 578 534

-

645 601 647 603 578 534 575 531

-

475 431 645 601 575 531 425 381

-

469 425 475 431 425 381 571 527

-

466 422 469 425 571 527 420 376

-

643 599 466 422 420 376 423 379

-

473 429 643 599 423 379 572 528

-

644 600 473 429 572 528 573 529

-

646 602 644 600 573 529 576 532

-

648 604 646 602 576 532 429 385

-

652 608 648 604 429 385 439 395

-

535 491 652 608 439 395 604 560

-

445 401 655 611 535 491 604 560

-

611 567 657 613 655 611 445 401

-

616 572 659 615 657 613 611 567

-

620 576 661 617 659 615 616 572

-

624 580 663 619 661 617 620 576

-

662 618 663 619 624 580 622 578

-

660 616 662 618 622 578 618 574

-

658 614 660 616 618 574 613 569

-

656 612 658 614 613 569 608 564

-

654 610 656 612 608 564 606 562

-

653 609 654 610 606 562 592 548

-
- - - -

688 644 628 584 626 582 686 642

-

628 584 688 644 690 646 630 586

-

630 586 690 646 692 648 632 588

-

632 588 692 648 694 650 634 590

-

634 590 694 650 696 652 636 592

-

636 592 696 652 698 654 638 594

-

638 594 698 654 702 658 641 597

-

641 597 702 658 703 659 642 598

-

704 660 566 522 650 606 464 420

-

650 606 566 522 709 665 547 503

-

708 664 666 622 667 623 710 666

-

666 622 708 664 712 668 669 625

-

669 625 712 668 714 670 671 627

-

671 627 714 670 716 672 673 629

-

673 629 716 672 718 674 675 631

-

675 631 718 674 720 676 677 633

-

677 633 720 676 722 678 679 635

-

679 635 722 678 725 681 681 637

-

556 512 726 682 569 525 682 638

-

569 525 724 680 554 510 682 638

-

721 677 678 634 680 636 723 679

-

678 634 721 677 719 675 676 632

-

676 632 719 675 717 673 674 630

-

674 630 717 673 715 671 672 628

-

672 628 715 671 713 669 670 626

-

670 626 713 669 711 667 668 624

-

668 624 711 667 707 663 665 621

-

665 621 707 663 706 662 664 620

-

545 501 705 661 564 520 651 607

-

651 607 564 520 700 656 462 418

-

639 595 699 655 701 657 640 596

-

640 596 701 657 697 653 637 593

-

637 593 697 653 695 651 635 591

-

695 651 693 649 633 589 635 591

-

631 587 633 589 693 649 691 647

-

629 585 631 587 691 647 689 645

-

627 583 629 585 689 645 687 643

-

625 581 627 583 687 643 683 639

-

684 640 561 517 449 405 456 412

-

449 405 561 517 685 641 458 414

-

610 566 609 565 447 403 614 570 617 573 621 577 623 579 619 575 615 571

-

426 382 574 530 577 533 579 535 590 546 591 547 605 561 607 563 612 568 614 570

-

649 605 653 609 592 548 580 536

-

647 603 649 605 580 536 578 534

-

645 601 647 603 578 534 575 531

-

475 431 645 601 575 531 425 381

-

469 425 475 431 425 381 571 527

-

466 422 469 425 571 527 420 376

-

643 599 466 422 420 376 423 379

-

473 429 643 599 423 379 572 528

-

644 600 473 429 572 528 573 529

-

646 602 644 600 573 529 576 532

-

648 604 646 602 576 532 429 385

-

652 608 648 604 429 385 439 395

-

535 491 652 608 439 395 604 560

-

445 401 655 611 535 491 604 560

-

611 567 657 613 655 611 445 401

-

616 572 659 615 657 613 611 567

-

620 576 661 617 659 615 616 572

-

624 580 663 619 661 617 620 576

-

662 618 663 619 624 580 622 578

-

660 616 662 618 622 578 618 574

-

658 614 660 616 618 574 613 569

-

656 612 658 614 613 569 608 564

-

654 610 656 612 608 564 606 562

-

653 609 654 610 606 562 592 548

-

516 472 512 468 508 464 502 458 498 454 494 450 490 446 486 442 484 440 488 444 492 448 496 452 500 456 504 460 510 466 514 470 518 474 522 478 526 482 530 486 532 488 528 484 524 480 520 476

-

443 399 511 467 505 461 433 389

-

433 389 505 461 501 457 589 545

-

589 545 501 457 497 453 587 543

-

587 543 497 453 493 449 585 541

-

585 541 493 449 489 445 583 539

-

583 539 489 445 485 441 581 537

-

581 537 485 441 487 443 582 538

-

582 538 487 443 491 447 584 540

-

584 540 491 447 495 451 586 542

-

586 542 495 451 499 455 588 544

-

588 544 499 455 503 459 431 387

-

431 387 503 459 509 465 441 397

-

441 397 509 465 513 469 593 549

-

593 549 513 469 517 473 595 551

-

595 551 517 473 521 477 597 553

-

599 555 597 553 521 477 525 481

-

529 485 601 557 599 555 525 481

-

603 559 601 557 529 485 533 489

-

602 558 603 559 533 489 531 487

-

600 556 602 558 531 487 527 483

-

598 554 600 556 527 483 523 479

-

596 552 598 554 523 479 519 475

-

594 550 596 552 519 475 515 471

-

594 550 515 471 511 467 443 399

-
- - - -

728 692 729 692 730 692 731 692 732 692

-
- - - -

733 693 734 693 735 693 736 693 737 693

-
- - - -

738 694 739 694 740 694 741 694 742 694

-
- - - -

743 695 744 696 745 697 746 698

-

747 699 748 700 749 701 750 702

-

751 703 752 704 753 705 754 706

-

755 707 756 708 757 709 758 710

-

759 711 760 712 761 713 762 714

-
- - - -

768 715 769 715 770 715

-
- - - -

763 715 764 715 765 715 766 715 767 715

-
- - - -

779 1021 932 1021 934 1021 779 1021 930 1021 932 1021 783 1021 930 1021 779 1021 779 1021 931 1021 783 1021 779 1021 933 1021 931 1021 795 1021 951 1021 949 1021 795 1021 949 1021 948 1021 788 1021 946 1021 944 1021 788 1021 944 1021 940 1021 940 1021 938 1021 788 1021 788 1021 938 1021 936 1021 788 1021 936 1021 935 1021 787 1021 943 1021 945 1021 787 1021 939 1021 943 1021 939 1021 787 1021 937 1021 787 1021 785 1021 937 1021 795 1021 947 1021 792 1021 795 1021 792 1021 950 1021 952 1021 795 1021 950 1021 795 1021 952 1021 951 1021

-
- - - -

788 1021 796 1021 795 1021 948 1021 946 1021

-

788 1021 935 1021 933 1021 779 1021 773 1021 772 1021 920 1021 777 1021 778 1021

-

934 1021 785 1021 787 1021 786 1021 781 1021 925 1021 922 1021 921 1021 775 1021 773 1021 779 1021

-

945 1021 947 1021 795 1021 958 1021 794 1021 953 1021 790 1021 786 1021 787 1021

-
- - - -

1028 1022 905 1022 907 1022 907 1022 1026 1022 1028 1022 907 1022 1024 1022 1026 1022 892 1022 1020 1022 1022 1022 892 1022 1018 1022 1020 1022 892 1022 1015 1022 1018 1022 892 1022 1016 1022 1015 1022

-
- - - -

907 1022 890 1022 892 1022 1022 1022 1024 1022

-
- - - -

1014 1023 1013 1023 887 1023 887 1023 1017 1023 1014 1023 887 1023 1019 1023 1017 1023 906 1023 1023 1023 1021 1023 906 1023 1025 1023 1023 1023 906 1023 1027 1023 1025 1023 906 1023 903 1023 1027 1023

-
- - - -

887 1023 889 1023 906 1023 1021 1023 1019 1023

-
- - - -

976 1024 805 1024 803 1024 803 1024 978 1024 976 1024 803 1024 980 1024 978 1024 825 1024 811 1024 989 1024 825 1024 989 1024 986 1024 825 1024 986 1024 984 1024 825 1024 984 1024 982 1024 993 1024 827 1024 822 1024 993 1024 995 1024 827 1024 1006 1024 889 1024 1004 1024 1008 1024 889 1024 1006 1024 1009 1024 1007 1024 890 1024 1005 1024 890 1024 1007 1024 996 1024 994 1024 828 1024 994 1024 824 1024 828 1024 990 1024 813 1024 830 1024 830 1024 987 1024 990 1024 830 1024 985 1024 987 1024 830 1024 983 1024 985 1024 802 1024 979 1024 981 1024 802 1024 977 1024 979 1024 802 1024 975 1024 977 1024

-
- - - -

827 1024 825 1024 982 1024 980 1024 803 1024 801 1024 820 1024 822 1024

-

834 1024 831 1024 826 1024 827 1024 995 1024

-

1000 1024 857 1024 831 1024 834 1024

-

885 1024 857 1024 1000 1024 1002 1024

-

1004 1024 889 1024 888 1024 885 1024 1002 1024

-

1010 1024 898 1024 897 1024 889 1024 1008 1024

-

1012 1024 899 1024 898 1024 1010 1024

-

900 1024 899 1024 1012 1024 1011 1024

-

1009 1024 890 1024 901 1024 900 1024 1011 1024

-

1003 1024 886 1024 891 1024 890 1024 1005 1024

-

858 1024 886 1024 1003 1024 1001 1024

-

1001 1024 997 1024 832 1024 858 1024

-

997 1024 996 1024 828 1024 829 1024 832 1024

-

981 1024 983 1024 830 1024 828 1024 824 1024 819 1024 800 1024 802 1024

-
- - - -

815 1025 816 1025 808 1025 809 1025 819 1025 818 1025

-
- - - -

818 1025 815 1025 808 1025 799 1025 798 1025 800 1025 809 1025

-
- - - -

908 1026 910 1026 1033 1026 1049 1026 913 1026 908 1026

-
- - - -

908 1026 1033 1026 1036 1026 1038 1026 1040 1026 1042 1026 1044 1026 1046 1026 1050 1026 1049 1026

-
- - - -

916 1027 913 1027 1055 1027 1073 1027 918 1027 916 1027

-
- - - -

916 1027 1055 1027 1056 1027 1060 1027 1062 1027 1064 1027 1066 1027 1068 1027 1070 1027 1073 1027

-
- - - -

911 1028 915 1028 1053 1028 1035 1028 910 1028 911 1028

-
- - - -

911 1028 1053 1028 1051 1028 1047 1028 1045 1028 1043 1028 1041 1028 1039 1028 1037 1028 1035 1028

-
- - - -

919 1029 918 1029 1075 1029 1059 1029 915 1029 919 1029

-
- - - -

919 1029 1075 1029 1071 1029 1069 1029 1067 1029 1065 1029 1063 1029 1061 1029 1057 1029 1059 1029

-
- - - -

1037 982 977 922 975 920 1035 980

-

977 922 1037 982 1039 984 979 924

-

979 924 1039 984 1041 986 981 926

-

981 926 1041 986 1043 988 983 928

-

983 928 1043 988 1045 990 985 930

-

985 930 1045 990 1047 992 987 932

-

987 932 1047 992 1051 996 990 935

-

990 935 1051 996 1052 997 991 936

-

1053 998 915 860 998 943 813 758

-

998 943 915 860 1058 1003 896 841

-

1057 1002 1015 960 1016 961 1059 1004

-

1015 960 1057 1002 1061 1006 1018 963

-

1018 963 1061 1006 1063 1008 1020 965

-

1020 965 1063 1008 1065 1010 1022 967

-

1022 967 1065 1010 1067 1012 1024 969

-

1024 969 1067 1012 1069 1014 1026 971

-

1026 971 1069 1014 1071 1016 1028 973

-

1028 973 1071 1016 1074 1019 1030 975

-

905 850 1075 1020 918 863 1031 976

-

918 863 1073 1018 903 848 1031 976

-

1070 1015 1027 972 1029 974 1072 1017

-

1027 972 1070 1015 1068 1013 1025 970

-

1025 970 1068 1013 1066 1011 1023 968

-

1023 968 1066 1011 1064 1009 1021 966

-

1021 966 1064 1009 1062 1007 1019 964

-

1019 964 1062 1007 1060 1005 1017 962

-

1017 962 1060 1005 1056 1001 1014 959

-

1014 959 1056 1001 1055 1000 1013 958

-

894 839 1054 999 913 858 999 944

-

999 944 913 858 1049 994 811 756

-

988 933 1048 993 1050 995 989 934

-

989 934 1050 995 1046 991 986 931

-

986 931 1046 991 1044 989 984 929

-

1044 989 1042 987 982 927 984 929

-

980 925 982 927 1042 987 1040 985

-

978 923 980 925 1040 985 1038 983

-

976 921 978 923 1038 983 1036 981

-

974 919 976 921 1036 981 1032 977

-

1033 978 910 855 798 743 805 750

-

798 743 910 855 1034 979 807 752

-
- - - -

1037 982 977 922 975 920 1035 980

-

977 922 1037 982 1039 984 979 924

-

979 924 1039 984 1041 986 981 926

-

981 926 1041 986 1043 988 983 928

-

983 928 1043 988 1045 990 985 930

-

985 930 1045 990 1047 992 987 932

-

987 932 1047 992 1051 996 990 935

-

990 935 1051 996 1052 997 991 936

-

1053 998 915 860 998 943 813 758

-

998 943 915 860 1058 1003 896 841

-

1057 1002 1015 960 1016 961 1059 1004

-

1015 960 1057 1002 1061 1006 1018 963

-

1018 963 1061 1006 1063 1008 1020 965

-

1020 965 1063 1008 1065 1010 1022 967

-

1022 967 1065 1010 1067 1012 1024 969

-

1024 969 1067 1012 1069 1014 1026 971

-

1026 971 1069 1014 1071 1016 1028 973

-

1028 973 1071 1016 1074 1019 1030 975

-

905 850 1075 1020 918 863 1031 976

-

918 863 1073 1018 903 848 1031 976

-

1070 1015 1027 972 1029 974 1072 1017

-

1027 972 1070 1015 1068 1013 1025 970

-

1025 970 1068 1013 1066 1011 1023 968

-

1023 968 1066 1011 1064 1009 1021 966

-

1021 966 1064 1009 1062 1007 1019 964

-

1019 964 1062 1007 1060 1005 1017 962

-

1017 962 1060 1005 1056 1001 1014 959

-

1014 959 1056 1001 1055 1000 1013 958

-

894 839 1054 999 913 858 999 944

-

999 944 913 858 1049 994 811 756

-

988 933 1048 993 1050 995 989 934

-

989 934 1050 995 1046 991 986 931

-

986 931 1046 991 1044 989 984 929

-

1044 989 1042 987 982 927 984 929

-

980 925 982 927 1042 987 1040 985

-

978 923 980 925 1040 985 1038 983

-

976 921 978 923 1038 983 1036 981

-

974 919 976 921 1036 981 1032 977

-

1033 978 910 855 798 743 805 750

-

798 743 910 855 1034 979 807 752

-

959 904 958 903 796 741 963 908 966 911 970 915 972 917 968 913 964 909

-

778 723 923 868 926 871 928 873 941 886 954 899 956 901 961 906 963 908

-

997 942 1001 946 942 887 929 874

-

996 941 997 942 929 874 927 872

-

994 939 996 941 927 872 924 869

-

824 769 994 939 924 869 777 722

-

818 763 824 769 777 722 920 865

-

815 760 818 763 920 865 772 717

-

992 937 815 760 772 717 775 720

-

822 767 992 937 775 720 921 866

-

993 938 822 767 921 866 922 867

-

995 940 993 938 922 867 925 870

-

834 779 995 940 925 870 781 726

-

1000 945 834 779 781 726 790 735

-

1002 947 1000 945 790 735 953 898

-

794 739 1004 949 1002 947 953 898

-

960 905 1006 951 1004 949 794 739

-

965 910 1008 953 1006 951 960 905

-

969 914 1010 955 1008 953 965 910

-

973 918 1012 957 1010 955 969 914

-

1011 956 1012 957 973 918 971 916

-

1009 954 1011 956 971 916 967 912

-

1007 952 1009 954 967 912 962 907

-

1005 950 1007 952 962 907 957 902

-

1003 948 1005 950 957 902 955 900

-

1001 946 1003 948 955 900 942 887

-
- - - -

1037 982 977 922 975 920 1035 980

-

977 922 1037 982 1039 984 979 924

-

979 924 1039 984 1041 986 981 926

-

981 926 1041 986 1043 988 983 928

-

983 928 1043 988 1045 990 985 930

-

985 930 1045 990 1047 992 987 932

-

987 932 1047 992 1051 996 990 935

-

990 935 1051 996 1052 997 991 936

-

1053 998 915 860 998 943 813 758

-

998 943 915 860 1058 1003 896 841

-

1057 1002 1015 960 1016 961 1059 1004

-

1015 960 1057 1002 1061 1006 1018 963

-

1018 963 1061 1006 1063 1008 1020 965

-

1020 965 1063 1008 1065 1010 1022 967

-

1022 967 1065 1010 1067 1012 1024 969

-

1024 969 1067 1012 1069 1014 1026 971

-

1026 971 1069 1014 1071 1016 1028 973

-

1028 973 1071 1016 1074 1019 1030 975

-

905 850 1075 1020 918 863 1031 976

-

918 863 1073 1018 903 848 1031 976

-

1070 1015 1027 972 1029 974 1072 1017

-

1027 972 1070 1015 1068 1013 1025 970

-

1025 970 1068 1013 1066 1011 1023 968

-

1023 968 1066 1011 1064 1009 1021 966

-

1021 966 1064 1009 1062 1007 1019 964

-

1019 964 1062 1007 1060 1005 1017 962

-

1017 962 1060 1005 1056 1001 1014 959

-

1014 959 1056 1001 1055 1000 1013 958

-

894 839 1054 999 913 858 999 944

-

999 944 913 858 1049 994 811 756

-

988 933 1048 993 1050 995 989 934

-

989 934 1050 995 1046 991 986 931

-

986 931 1046 991 1044 989 984 929

-

1044 989 1042 987 982 927 984 929

-

980 925 982 927 1042 987 1040 985

-

978 923 980 925 1040 985 1038 983

-

976 921 978 923 1038 983 1036 981

-

974 919 976 921 1036 981 1032 977

-

1033 978 910 855 798 743 805 750

-

798 743 910 855 1034 979 807 752

-

959 904 958 903 796 741 963 908 966 911 970 915 972 917 968 913 964 909

-

778 723 923 868 926 871 928 873 941 886 954 899 956 901 961 906 963 908

-

997 942 1001 946 942 887 929 874

-

996 941 997 942 929 874 927 872

-

994 939 996 941 927 872 924 869

-

824 769 994 939 924 869 777 722

-

818 763 824 769 777 722 920 865

-

815 760 818 763 920 865 772 717

-

992 937 815 760 772 717 775 720

-

822 767 992 937 775 720 921 866

-

993 938 822 767 921 866 922 867

-

995 940 993 938 922 867 925 870

-

834 779 995 940 925 870 781 726

-

1000 945 834 779 781 726 790 735

-

1002 947 1000 945 790 735 953 898

-

794 739 1004 949 1002 947 953 898

-

960 905 1006 951 1004 949 794 739

-

965 910 1008 953 1006 951 960 905

-

969 914 1010 955 1008 953 965 910

-

973 918 1012 957 1010 955 969 914

-

1011 956 1012 957 973 918 971 916

-

1009 954 1011 956 971 916 967 912

-

1007 952 1009 954 967 912 962 907

-

1005 950 1007 952 962 907 957 902

-

1003 948 1005 950 957 902 955 900

-

1001 946 1003 948 955 900 942 887

-

867 812 863 808 859 804 853 798 849 794 845 790 841 786 837 782 835 780 839 784 843 788 847 792 851 796 855 800 861 806 865 810 869 814 873 818 877 822 881 826 883 828 879 824 875 820 871 816

-

940 885 862 807 856 801 938 883

-

938 883 856 801 852 797 936 881

-

936 881 852 797 848 793 935 880

-

935 880 848 793 844 789 933 878

-

933 878 844 789 840 785 931 876

-

931 876 840 785 836 781 783 728

-

783 728 836 781 838 783 930 875

-

930 875 838 783 842 787 932 877

-

932 877 842 787 846 791 934 879

-

934 879 846 791 850 795 785 730

-

785 730 850 795 854 799 937 882

-

937 882 854 799 860 805 939 884

-

939 884 860 805 864 809 943 888

-

943 888 864 809 868 813 945 890

-

945 890 868 813 872 817 947 892

-

792 737 947 892 872 817 876 821

-

880 825 950 895 792 737 876 821

-

952 897 950 895 880 825 884 829

-

951 896 952 897 884 829 882 827

-

949 894 951 896 882 827 878 823

-

948 893 949 894 878 823 874 819

-

946 891 948 893 874 819 870 815

-

944 889 946 891 870 815 866 811

-

944 889 866 811 862 807 940 885

-
- - - -

1076 1030 1077 1030 1078 1030 1079 1030 1080 1030

-
- - - -

1081 1031 1082 1031 1083 1031 1084 1031 1085 1031

-
- - - -

1086 1032 1087 1032 1088 1032 1089 1032 1090 1032

-
- - - -

1091 1033 1092 1034 1093 1035 1094 1036

-

1095 1037 1096 1038 1097 1039 1098 1040

-

1099 1041 1100 1042 1101 1043 1102 1044

-

1103 1045 1104 1046 1105 1047 1106 1048

-

1107 1049 1108 1050 1109 1051 1110 1052

-
- - - -

1116 1053 1117 1053 1118 1053

-
- - - -

1111 1053 1112 1053 1113 1053 1114 1053 1115 1053

-
- - - -

1127 1358 1279 1358 1131 1358 1127 1358 1277 1358 1279 1358 1276 1358 1277 1358 1127 1358 1127 1358 1278 1358 1276 1358 1127 1358 1280 1358 1278 1358 1141 1358 1298 1358 1296 1358 1141 1358 1296 1358 1294 1358 1134 1358 1292 1358 1291 1358 1134 1358 1291 1358 1287 1358 1287 1358 1285 1358 1134 1358 1134 1358 1285 1358 1283 1358 1134 1358 1283 1358 1281 1358 1133 1358 1290 1358 1138 1358 1133 1358 1286 1358 1290 1358 1286 1358 1133 1358 1284 1358 1133 1358 1282 1358 1284 1358 1141 1358 1293 1358 1295 1358 1141 1358 1295 1358 1297 1358 1299 1358 1141 1358 1297 1358 1141 1358 1299 1358 1298 1358

-
- - - -

1134 1358 1142 1358 1141 1358 1294 1358 1292 1358

-

1134 1358 1281 1358 1280 1358 1127 1358 1121 1358 1120 1358 1266 1358 1125 1358 1126 1358

-

1131 1358 1282 1358 1133 1358 1132 1358 1129 1358 1271 1358 1268 1358 1267 1358 1123 1358 1121 1358 1127 1358

-

1138 1358 1293 1358 1141 1358 1305 1358 1140 1358 1300 1358 1136 1358 1132 1358 1133 1358

-
- - - -

1375 1359 1251 1359 1253 1359 1253 1359 1373 1359 1375 1359 1253 1359 1371 1359 1373 1359 1238 1359 1367 1359 1369 1359 1238 1359 1365 1359 1367 1359 1238 1359 1362 1359 1365 1359 1238 1359 1363 1359 1362 1359

-
- - - -

1253 1359 1236 1359 1238 1359 1369 1359 1371 1359

-
- - - -

1361 1360 1360 1360 1233 1360 1233 1360 1364 1360 1361 1360 1233 1360 1366 1360 1364 1360 1252 1360 1370 1360 1368 1360 1252 1360 1372 1360 1370 1360 1252 1360 1374 1360 1372 1360 1252 1360 1249 1360 1374 1360

-
- - - -

1233 1360 1235 1360 1252 1360 1368 1360 1366 1360

-
- - - -

1323 1361 1321 1361 1149 1361 1149 1361 1325 1361 1323 1361 1149 1361 1327 1361 1325 1361 1171 1361 1157 1361 1336 1361 1171 1361 1336 1361 1333 1361 1171 1361 1333 1361 1331 1361 1171 1361 1331 1361 1329 1361 1340 1361 1173 1361 1168 1361 1340 1361 1342 1361 1173 1361 1353 1361 1235 1361 1351 1361 1355 1361 1235 1361 1353 1361 1356 1361 1354 1361 1236 1361 1352 1361 1236 1361 1354 1361 1343 1361 1341 1361 1174 1361 1341 1361 1170 1361 1174 1361 1337 1361 1159 1361 1176 1361 1176 1361 1334 1361 1337 1361 1176 1361 1332 1361 1334 1361 1176 1361 1330 1361 1332 1361 1148 1361 1326 1361 1328 1361 1148 1361 1324 1361 1326 1361 1148 1361 1322 1361 1324 1361

-
- - - -

1173 1361 1171 1361 1329 1361 1327 1361 1149 1361 1147 1361 1166 1361 1168 1361

-

1344 1361 1177 1361 1172 1361 1173 1361 1342 1361

-

1204 1361 1201 1361 1177 1361 1344 1361

-

1231 1361 1201 1361 1204 1361 1349 1361

-

1351 1361 1235 1361 1234 1361 1231 1361 1349 1361

-

1357 1361 1244 1361 1243 1361 1235 1361 1355 1361

-

1359 1361 1245 1361 1244 1361 1357 1361

-

1246 1361 1245 1361 1359 1361 1358 1361

-

1356 1361 1236 1361 1247 1361 1246 1361 1358 1361

-

1350 1361 1232 1361 1237 1361 1236 1361 1352 1361

-

1202 1361 1232 1361 1350 1361 1348 1361

-

1348 1361 1345 1361 1178 1361 1202 1361

-

1345 1361 1343 1361 1174 1361 1175 1361 1178 1361

-

1328 1361 1330 1361 1176 1361 1174 1361 1170 1361 1165 1361 1146 1361 1148 1361

-
- - - -

1161 1362 1162 1362 1154 1362 1155 1362 1165 1362 1164 1362

-
- - - -

1164 1362 1161 1362 1154 1362 1145 1362 1144 1362 1146 1362 1155 1362

-
- - - -

1254 1363 1256 1363 1380 1363 1396 1363 1259 1363 1254 1363

-
- - - -

1254 1363 1380 1363 1383 1363 1385 1363 1387 1363 1389 1363 1391 1363 1393 1363 1397 1363 1396 1363

-
- - - -

1262 1364 1259 1364 1402 1364 1420 1364 1264 1364 1262 1364

-
- - - -

1262 1364 1402 1364 1403 1364 1407 1364 1409 1364 1411 1364 1413 1364 1415 1364 1417 1364 1420 1364

-
- - - -

1257 1365 1261 1365 1400 1365 1382 1365 1256 1365 1257 1365

-
- - - -

1257 1365 1400 1365 1398 1365 1394 1365 1392 1365 1390 1365 1388 1365 1386 1365 1384 1365 1382 1365

-
- - - -

1265 1366 1264 1366 1422 1366 1406 1366 1261 1366 1265 1366

-
- - - -

1265 1366 1422 1366 1418 1366 1416 1366 1414 1366 1412 1366 1410 1366 1408 1366 1404 1366 1406 1366

-
- - - -

1384 1319 1324 1259 1322 1257 1382 1317

-

1324 1259 1384 1319 1386 1321 1326 1261

-

1326 1261 1386 1321 1388 1323 1328 1263

-

1328 1263 1388 1323 1390 1325 1330 1265

-

1330 1265 1390 1325 1392 1327 1332 1267

-

1332 1267 1392 1327 1394 1329 1334 1269

-

1334 1269 1394 1329 1398 1333 1337 1272

-

1337 1272 1398 1333 1399 1334 1338 1273

-

1400 1335 1261 1196 1346 1281 1159 1094

-

1346 1281 1261 1196 1405 1340 1242 1177

-

1404 1339 1362 1297 1363 1298 1406 1341

-

1362 1297 1404 1339 1408 1343 1365 1300

-

1365 1300 1408 1343 1410 1345 1367 1302

-

1367 1302 1410 1345 1412 1347 1369 1304

-

1369 1304 1412 1347 1414 1349 1371 1306

-

1371 1306 1414 1349 1416 1351 1373 1308

-

1373 1308 1416 1351 1418 1353 1375 1310

-

1375 1310 1418 1353 1421 1356 1377 1312

-

1251 1186 1422 1357 1264 1199 1378 1313

-

1264 1199 1420 1355 1249 1184 1378 1313

-

1417 1352 1374 1309 1376 1311 1419 1354

-

1374 1309 1417 1352 1415 1350 1372 1307

-

1372 1307 1415 1350 1413 1348 1370 1305

-

1370 1305 1413 1348 1411 1346 1368 1303

-

1368 1303 1411 1346 1409 1344 1366 1301

-

1366 1301 1409 1344 1407 1342 1364 1299

-

1364 1299 1407 1342 1403 1338 1361 1296

-

1361 1296 1403 1338 1402 1337 1360 1295

-

1240 1175 1401 1336 1259 1194 1347 1282

-

1347 1282 1259 1194 1396 1331 1157 1092

-

1335 1270 1395 1330 1397 1332 1336 1271

-

1336 1271 1397 1332 1393 1328 1333 1268

-

1333 1268 1393 1328 1391 1326 1331 1266

-

1391 1326 1389 1324 1329 1264 1331 1266

-

1327 1262 1329 1264 1389 1324 1387 1322

-

1325 1260 1327 1262 1387 1322 1385 1320

-

1323 1258 1325 1260 1385 1320 1383 1318

-

1321 1256 1323 1258 1383 1318 1380 1315

-

1379 1314 1256 1191 1144 1079 1151 1086

-

1144 1079 1256 1191 1381 1316 1153 1088

-
- - - -

1384 1319 1324 1259 1322 1257 1382 1317

-

1324 1259 1384 1319 1386 1321 1326 1261

-

1326 1261 1386 1321 1388 1323 1328 1263

-

1328 1263 1388 1323 1390 1325 1330 1265

-

1330 1265 1390 1325 1392 1327 1332 1267

-

1332 1267 1392 1327 1394 1329 1334 1269

-

1334 1269 1394 1329 1398 1333 1337 1272

-

1337 1272 1398 1333 1399 1334 1338 1273

-

1400 1335 1261 1196 1346 1281 1159 1094

-

1346 1281 1261 1196 1405 1340 1242 1177

-

1404 1339 1362 1297 1363 1298 1406 1341

-

1362 1297 1404 1339 1408 1343 1365 1300

-

1365 1300 1408 1343 1410 1345 1367 1302

-

1367 1302 1410 1345 1412 1347 1369 1304

-

1369 1304 1412 1347 1414 1349 1371 1306

-

1371 1306 1414 1349 1416 1351 1373 1308

-

1373 1308 1416 1351 1418 1353 1375 1310

-

1375 1310 1418 1353 1421 1356 1377 1312

-

1251 1186 1422 1357 1264 1199 1378 1313

-

1264 1199 1420 1355 1249 1184 1378 1313

-

1417 1352 1374 1309 1376 1311 1419 1354

-

1374 1309 1417 1352 1415 1350 1372 1307

-

1372 1307 1415 1350 1413 1348 1370 1305

-

1370 1305 1413 1348 1411 1346 1368 1303

-

1368 1303 1411 1346 1409 1344 1366 1301

-

1366 1301 1409 1344 1407 1342 1364 1299

-

1364 1299 1407 1342 1403 1338 1361 1296

-

1361 1296 1403 1338 1402 1337 1360 1295

-

1240 1175 1401 1336 1259 1194 1347 1282

-

1347 1282 1259 1194 1396 1331 1157 1092

-

1335 1270 1395 1330 1397 1332 1336 1271

-

1336 1271 1397 1332 1393 1328 1333 1268

-

1333 1268 1393 1328 1391 1326 1331 1266

-

1391 1326 1389 1324 1329 1264 1331 1266

-

1327 1262 1329 1264 1389 1324 1387 1322

-

1325 1260 1327 1262 1387 1322 1385 1320

-

1323 1258 1325 1260 1385 1320 1383 1318

-

1321 1256 1323 1258 1383 1318 1380 1315

-

1379 1314 1256 1191 1144 1079 1151 1086

-

1144 1079 1256 1191 1381 1316 1153 1088

-

1306 1241 1305 1240 1142 1077 1310 1245 1313 1248 1317 1252 1319 1254 1315 1250 1311 1246

-

1126 1061 1269 1204 1272 1207 1274 1209 1288 1223 1301 1236 1303 1238 1308 1243 1310 1245

-

1345 1280 1348 1283 1289 1224 1275 1210

-

1343 1278 1345 1280 1275 1210 1273 1208

-

1341 1276 1343 1278 1273 1208 1270 1205

-

1170 1105 1341 1276 1270 1205 1125 1060

-

1164 1099 1170 1105 1125 1060 1266 1201

-

1161 1096 1164 1099 1266 1201 1120 1055

-

1339 1274 1161 1096 1120 1055 1123 1058

-

1168 1103 1339 1274 1123 1058 1267 1202

-

1340 1275 1168 1103 1267 1202 1268 1203

-

1342 1277 1340 1275 1268 1203 1271 1206

-

1344 1279 1342 1277 1271 1206 1129 1064

-

1204 1139 1344 1279 1129 1064 1136 1071

-

1349 1284 1204 1139 1136 1071 1300 1235

-

1140 1075 1351 1286 1349 1284 1300 1235

-

1307 1242 1353 1288 1351 1286 1140 1075

-

1312 1247 1355 1290 1353 1288 1307 1242

-

1316 1251 1357 1292 1355 1290 1312 1247

-

1320 1255 1359 1294 1357 1292 1316 1251

-

1358 1293 1359 1294 1320 1255 1318 1253

-

1356 1291 1358 1293 1318 1253 1314 1249

-

1354 1289 1356 1291 1314 1249 1309 1244

-

1352 1287 1354 1289 1309 1244 1304 1239

-

1350 1285 1352 1287 1304 1239 1302 1237

-

1348 1283 1350 1285 1302 1237 1289 1224

-
- - - -

1384 1319 1324 1259 1322 1257 1382 1317

-

1324 1259 1384 1319 1386 1321 1326 1261

-

1326 1261 1386 1321 1388 1323 1328 1263

-

1328 1263 1388 1323 1390 1325 1330 1265

-

1330 1265 1390 1325 1392 1327 1332 1267

-

1332 1267 1392 1327 1394 1329 1334 1269

-

1334 1269 1394 1329 1398 1333 1337 1272

-

1337 1272 1398 1333 1399 1334 1338 1273

-

1400 1335 1261 1196 1346 1281 1159 1094

-

1346 1281 1261 1196 1405 1340 1242 1177

-

1404 1339 1362 1297 1363 1298 1406 1341

-

1362 1297 1404 1339 1408 1343 1365 1300

-

1365 1300 1408 1343 1410 1345 1367 1302

-

1367 1302 1410 1345 1412 1347 1369 1304

-

1369 1304 1412 1347 1414 1349 1371 1306

-

1371 1306 1414 1349 1416 1351 1373 1308

-

1373 1308 1416 1351 1418 1353 1375 1310

-

1375 1310 1418 1353 1421 1356 1377 1312

-

1251 1186 1422 1357 1264 1199 1378 1313

-

1264 1199 1420 1355 1249 1184 1378 1313

-

1417 1352 1374 1309 1376 1311 1419 1354

-

1374 1309 1417 1352 1415 1350 1372 1307

-

1372 1307 1415 1350 1413 1348 1370 1305

-

1370 1305 1413 1348 1411 1346 1368 1303

-

1368 1303 1411 1346 1409 1344 1366 1301

-

1366 1301 1409 1344 1407 1342 1364 1299

-

1364 1299 1407 1342 1403 1338 1361 1296

-

1361 1296 1403 1338 1402 1337 1360 1295

-

1240 1175 1401 1336 1259 1194 1347 1282

-

1347 1282 1259 1194 1396 1331 1157 1092

-

1335 1270 1395 1330 1397 1332 1336 1271

-

1336 1271 1397 1332 1393 1328 1333 1268

-

1333 1268 1393 1328 1391 1326 1331 1266

-

1391 1326 1389 1324 1329 1264 1331 1266

-

1327 1262 1329 1264 1389 1324 1387 1322

-

1325 1260 1327 1262 1387 1322 1385 1320

-

1323 1258 1325 1260 1385 1320 1383 1318

-

1321 1256 1323 1258 1383 1318 1380 1315

-

1379 1314 1256 1191 1144 1079 1151 1086

-

1144 1079 1256 1191 1381 1316 1153 1088

-

1306 1241 1305 1240 1142 1077 1310 1245 1313 1248 1317 1252 1319 1254 1315 1250 1311 1246

-

1126 1061 1269 1204 1272 1207 1274 1209 1288 1223 1301 1236 1303 1238 1308 1243 1310 1245

-

1345 1280 1348 1283 1289 1224 1275 1210

-

1343 1278 1345 1280 1275 1210 1273 1208

-

1341 1276 1343 1278 1273 1208 1270 1205

-

1170 1105 1341 1276 1270 1205 1125 1060

-

1164 1099 1170 1105 1125 1060 1266 1201

-

1161 1096 1164 1099 1266 1201 1120 1055

-

1339 1274 1161 1096 1120 1055 1123 1058

-

1168 1103 1339 1274 1123 1058 1267 1202

-

1340 1275 1168 1103 1267 1202 1268 1203

-

1342 1277 1340 1275 1268 1203 1271 1206

-

1344 1279 1342 1277 1271 1206 1129 1064

-

1204 1139 1344 1279 1129 1064 1136 1071

-

1349 1284 1204 1139 1136 1071 1300 1235

-

1140 1075 1351 1286 1349 1284 1300 1235

-

1307 1242 1353 1288 1351 1286 1140 1075

-

1312 1247 1355 1290 1353 1288 1307 1242

-

1316 1251 1357 1292 1355 1290 1312 1247

-

1320 1255 1359 1294 1357 1292 1316 1251

-

1358 1293 1359 1294 1320 1255 1318 1253

-

1356 1291 1358 1293 1318 1253 1314 1249

-

1354 1289 1356 1291 1314 1249 1309 1244

-

1352 1287 1354 1289 1309 1244 1304 1239

-

1350 1285 1352 1287 1304 1239 1302 1237

-

1348 1283 1350 1285 1302 1237 1289 1224

-

1213 1148 1209 1144 1205 1140 1197 1132 1193 1128 1189 1124 1185 1120 1181 1116 1179 1114 1183 1118 1187 1122 1191 1126 1195 1130 1199 1134 1207 1142 1211 1146 1215 1150 1219 1154 1223 1158 1227 1162 1229 1164 1225 1160 1221 1156 1217 1152

-

1287 1222 1208 1143 1200 1135 1285 1220

-

1285 1220 1200 1135 1196 1131 1283 1218

-

1283 1218 1196 1131 1192 1127 1281 1216

-

1281 1216 1192 1127 1188 1123 1280 1215

-

1280 1215 1188 1123 1184 1119 1278 1213

-

1278 1213 1184 1119 1180 1115 1276 1211

-

1276 1211 1180 1115 1182 1117 1277 1212

-

1277 1212 1182 1117 1186 1121 1279 1214

-

1279 1214 1186 1121 1190 1125 1131 1066

-

1131 1066 1190 1125 1194 1129 1282 1217

-

1282 1217 1194 1129 1198 1133 1284 1219

-

1284 1219 1198 1133 1206 1141 1286 1221

-

1286 1221 1206 1141 1210 1145 1290 1225

-

1290 1225 1210 1145 1214 1149 1138 1073

-

1138 1073 1214 1149 1218 1153 1293 1228

-

1295 1230 1293 1228 1218 1153 1222 1157

-

1226 1161 1297 1232 1295 1230 1222 1157

-

1299 1234 1297 1232 1226 1161 1230 1165

-

1298 1233 1299 1234 1230 1165 1228 1163

-

1296 1231 1298 1233 1228 1163 1224 1159

-

1294 1229 1296 1231 1224 1159 1220 1155

-

1292 1227 1294 1229 1220 1155 1216 1151

-

1291 1226 1292 1227 1216 1151 1212 1147

-

1291 1226 1212 1147 1208 1143 1287 1222

-
- - - -

1423 1367 1424 1368 1425 1369 1426 1370 1427 1371 1428 1372 1429 1373 1430 1374 1431 1375 1432 1376

-

1433 1377 1434 1378 1435 1379 1436 1380 1437 1381 1438 1382 1439 1383 1440 1384 1441 1385 1442 1386

-

1443 1387 1444 1388 1445 1389 1446 1390

-

1447 1391 1448 1392 1449 1393 1450 1394

-

1451 1395 1452 1396 1453 1397 1454 1398

-

1455 1399 1456 1400 1457 1401 1458 1402

-

1459 1403 1460 1404 1461 1405 1462 1406

-

1463 1407 1464 1408 1465 1409 1466 1410

-

1467 1411 1468 1412 1469 1413 1470 1414

-

1471 1415 1472 1416 1473 1417 1474 1418

-

1475 1419 1476 1420 1477 1421 1478 1422

-

1479 1423 1480 1424 1481 1425 1482 1426

-
- - - -

1502 1600 1515 1600 1500 1600

-
- - - -

1626 1600 1630 1600 1645 1600 1639 1600

-

1618 1600 1626 1600 1639 1600 1634 1600

-

1599 1600 1618 1600 1634 1600 1616 1600

-

1571 1600 1599 1600 1616 1600 1585 1600

-

1553 1600 1571 1600 1585 1600 1560 1600

-

1534 1600 1553 1600 1560 1600 1537 1600

-

1534 1600 1537 1600 1519 1600 1500 1600 1515 1600

-
- - - -

1632 1601 1636 1601 1615 1601 1613 1601

-

1486 1601 1509 1601 1505 1601 1484 1601

-

1509 1601 1533 1601 1529 1601 1505 1601

-

1533 1601 1552 1601 1548 1601 1529 1601

-

1552 1601 1570 1601 1561 1601 1548 1601

-

1570 1601 1603 1601 1575 1601 1561 1601

-

1603 1601 1622 1601 1605 1601 1575 1601

-

1613 1601 1605 1601 1622 1601 1632 1601

-
- - - -

1655 1599 1650 1594 1649 1593 1653 1597

-

1647 1591 1643 1587 1651 1595 1655 1599

-

1643 1587 1647 1591 1636 1580 1631 1575

-

1522 1466 1540 1484 1546 1490 1527 1471

-

1549 1493 1530 1474 1525 1469 1544 1488

-

1562 1506 1549 1493 1545 1489 1556 1500

-

1555 1499 1546 1490 1540 1484 1554 1498

-

1567 1511 1557 1501 1554 1498 1568 1512

-

1557 1501 1567 1511 1573 1517 1562 1506

-

1590 1534 1573 1517 1567 1511 1576 1520

-

1578 1522 1588 1532 1609 1553 1589 1533

-

1605 1549 1613 1557 1594 1538 1579 1523

-

1579 1523 1594 1538 1588 1532 1577 1521

-

1568 1512 1579 1523 1578 1522 1567 1511

-

1580 1524 1568 1512 1575 1519 1604 1548

-

1561 1505 1574 1518 1568 1512 1554 1498

-

1547 1491 1561 1505 1554 1498 1541 1485

-

1528 1472 1548 1492 1540 1484 1523 1467

-

1504 1448 1529 1473 1523 1467 1503 1447

-

1526 1470 1508 1452 1503 1447 1524 1468

-

1508 1452 1527 1471 1530 1474 1510 1454

-

1534 1478 1515 1459 1510 1454 1531 1475

-

1553 1497 1534 1478 1531 1475 1550 1494

-

1571 1515 1553 1497 1549 1493 1563 1507

-

1598 1542 1571 1515 1562 1506 1572 1516

-

1618 1562 1599 1543 1573 1517 1591 1535

-

1625 1569 1617 1561 1589 1533 1608 1552

-

1629 1573 1626 1570 1610 1554 1611 1555

-

1611 1555 1609 1553 1587 1531 1600 1544

-

1592 1536 1606 1550 1600 1544 1586 1530

-

1613 1557 1614 1558 1606 1550 1593 1537

-

1607 1551 1615 1559 1635 1579 1646 1590 1654 1598 1652 1596 1644 1588 1630 1574 1612 1556 1601 1545

-

1639 1583 1645 1589 1653 1597 1648 1592

-

1633 1577 1639 1583 1648 1592 1640 1584

-

1650 1594 1641 1585 1640 1584 1648 1592

-

1641 1585 1650 1594 1643 1587 1638 1582

-

1632 1576 1621 1565 1638 1582 1643 1587

-

1627 1571 1595 1539 1596 1540 1624 1568

-

1620 1564 1581 1525 1595 1539 1628 1572

-

1581 1525 1620 1564 1603 1547 1570 1514

-

1622 1566 1602 1546 1619 1563 1637 1581

-

1638 1582 1620 1564 1627 1571 1642 1586

-

1641 1585 1627 1571 1624 1568 1640 1584

-

1640 1584 1623 1567 1616 1560 1634 1578

-

1585 1529 1616 1560 1623 1567 1597 1541

-

1597 1541 1565 1509 1560 1504 1584 1528

-

1565 1509 1597 1541 1595 1539 1564 1508

-

1583 1527 1558 1502 1564 1508 1595 1539

-

1569 1513 1551 1495 1558 1502 1582 1526

-

1539 1483 1517 1461 1521 1465 1543 1487

-

1535 1479 1513 1457 1517 1461 1538 1482

-

1512 1456 1535 1479 1532 1476 1509 1453

-

1552 1496 1533 1477 1535 1479 1558 1502

-

1558 1502 1535 1479 1539 1483 1564 1508

-

1564 1508 1539 1483 1543 1487 1565 1509

-

1566 1510 1542 1486 1536 1480 1559 1503

-

1518 1462 1537 1481 1542 1486 1521 1465

-

1520 1464 1496 1440 1500 1444 1519 1463

-

1516 1460 1494 1438 1496 1440 1521 1465

-

1511 1455 1490 1434 1494 1438 1517 1461

-

1490 1434 1512 1456 1509 1453 1486 1430

-

1489 1433 1485 1429 1483 1427 1487 1431 1491 1435 1497 1441 1501 1445 1499 1443 1495 1439 1493 1437

-

1514 1458 1502 1446 1498 1442 1510 1454

-

1510 1454 1498 1442 1492 1436 1507 1451

-

1506 1450 1492 1436 1488 1432 1503 1447

-

1503 1447 1488 1432 1484 1428 1505 1449

-
- - - -

1656 1602 1657 1603 1658 1604 1659 1605 1660 1606 1661 1607 1662 1608 1663 1609 1664 1610 1665 1611

-

1666 1612 1667 1613 1668 1614 1669 1615 1670 1616 1671 1617 1672 1618 1673 1619 1674 1620 1675 1621

-

1676 1622 1677 1623 1678 1624 1679 1625

-

1680 1626 1681 1627 1682 1628 1683 1629

-

1684 1630 1685 1631 1686 1632 1687 1633

-

1688 1634 1689 1635 1690 1636 1691 1637

-

1692 1638 1693 1639 1694 1640 1695 1641

-

1696 1642 1697 1643 1698 1644 1699 1645

-

1700 1646 1701 1647 1702 1648 1703 1649

-

1704 1650 1705 1651 1706 1652 1707 1653

-

1708 1654 1709 1655 1710 1656 1711 1657

-

1712 1658 1713 1659 1714 1660 1715 1661

-
- - - -

1716 1662 1717 1662 1718 1662 1719 1662

-
- - - -

1720 1663 1721 1664 1722 1665 1723 1666

-

1724 1667 1725 1668 1726 1669 1727 1670

-

1728 1671 1729 1672 1730 1673 1731 1674

-

1732 1675 1733 1676 1734 1677 1735 1678

-

1736 1679 1737 1680 1738 1681 1739 1682

-

1740 1683 1741 1684 1742 1685 1743 1686

-
- - - -

1744 1687 1745 1687 1746 1687 1747 1687

-
- - - -

1775 1708 1755 1708 1751 1708 1791 1708 1761 1708 1765 1708

-
- - - -

1780 1708 1769 1708 1768 1708 1775 1708 1751 1708

-

1775 1708 1784 1708 1759 1708 1755 1708

-

1784 1708 1793 1708 1763 1708 1759 1708

-

1793 1708 1792 1708 1767 1708 1763 1708

-

1791 1708 1765 1708 1767 1708 1792 1708

-

1783 1708 1761 1708 1791 1708 1790 1708 1781 1708

-
- - - -

1757 1709 1783 1709 1782 1709 1774 1709 1780 1709 1749 1709

-
- - - -

1773 1709 1772 1709 1771 1709 1770 1709

-

1773 1709 1753 1709 1757 1709 1782 1709 1781 1709 1772 1709

-

1749 1709 1753 1709 1773 1709 1770 1709 1769 1709 1774 1709

-
- - - -

1766 1710 1789 1710 1796 1710 1786 1710 1787 1710 1756 1710 1779 1710 1750 1710 1754 1710

-
- - - -

1797 1710 1762 1710 1766 1710 1796 1710 1799 1710 1798 1710

-

1797 1710 1788 1710 1758 1710 1762 1710

-

1779 1710 1754 1710 1758 1710 1788 1710

-

1756 1710 1752 1710 1777 1710 1776 1710 1785 1710 1786 1710

-

1778 1710 1777 1710 1752 1710 1748 1710

-

1779 1710 1778 1710 1748 1710 1750 1710

-
- - - -

1795 1711 1764 1711 1760 1711

-
- - - -

1787 1711 1785 1711 1794 1711 1795 1711 1760 1711

-

1795 1711 1794 1711 1801 1711 1800 1711

-

1789 1711 1764 1711 1795 1711 1800 1711 1799 1711

-
- - - -

1759 1699 1763 1703 1762 1702 1758 1698

-

1755 1695 1759 1699 1758 1698 1754 1694

-

1751 1691 1755 1695 1754 1694 1750 1690

-

1749 1689 1751 1691 1750 1690 1748 1688

-

1753 1693 1749 1689 1748 1688 1752 1692

-

1757 1697 1753 1693 1752 1692 1756 1696

-

1761 1701 1757 1697 1756 1696 1760 1700

-

1765 1705 1761 1701 1760 1700 1764 1704

-

1767 1707 1765 1705 1764 1704 1766 1706

-

1763 1703 1767 1707 1766 1706 1762 1702

-
- - - -

1802 1712 1803 1713 1804 1714 1805 1715 1806 1716 1807 1717 1808 1718 1809 1719 1810 1720 1811 1721 1812 1722 1813 1723

-

1814 1724 1815 1725 1816 1726 1817 1727 1818 1728 1819 1729 1820 1730 1821 1731 1822 1732 1823 1733 1824 1734 1825 1735

-

1826 1736 1827 1737 1828 1738 1829 1739

-

1830 1740 1831 1741 1832 1742 1833 1743

-

1834 1744 1835 1745 1836 1746 1837 1747

-

1838 1748 1839 1749 1840 1750 1841 1751

-

1842 1752 1843 1753 1844 1754 1845 1755

-

1846 1756 1847 1757 1848 1758 1849 1759

-

1850 1760 1851 1761 1852 1762 1853 1763

-

1854 1764 1855 1765 1856 1766 1857 1767

-

1858 1768 1859 1769 1860 1770 1861 1771

-

1862 1772 1863 1773 1864 1774 1865 1775

-

1866 1776 1867 1777 1868 1778 1869 1779

-

1870 1780 1871 1781 1872 1782 1873 1783

-
- - - -

1874 1784 1875 1785 1876 1786 1877 1787 1878 1788 1879 1789 1880 1790 1881 1791 1882 1792 1883 1793 1884 1794 1885 1795 1886 1796 1887 1797 1888 1798 1889 1799 1890 1800 1891 1801

-

1892 1802 1893 1803 1894 1804 1895 1805 1896 1806 1897 1807 1898 1808 1899 1809 1900 1810 1901 1811 1902 1812 1903 1813 1904 1814 1905 1815 1906 1816 1907 1817 1908 1818 1909 1819

-

1910 1820 1911 1821 1912 1822 1913 1823

-

1914 1824 1915 1825 1916 1826 1917 1827

-

1918 1828 1919 1829 1920 1830 1921 1831

-

1922 1832 1923 1833 1924 1834 1925 1835

-

1926 1836 1927 1837 1928 1838 1929 1839

-

1930 1840 1931 1841 1932 1842 1933 1843

-

1934 1844 1935 1845 1936 1846 1937 1847

-

1938 1848 1939 1849 1940 1850 1941 1851

-

1942 1852 1943 1853 1944 1854 1945 1855

-

1946 1856 1947 1857 1948 1858 1949 1859

-

1950 1860 1951 1861 1952 1862 1953 1863

-

1954 1864 1955 1865 1956 1866 1957 1867

-

1958 1868 1959 1869 1960 1870 1961 1871

-

1962 1872 1963 1873 1964 1874 1965 1875

-

1966 1876 1967 1877 1968 1878 1969 1879

-

1970 1880 1971 1881 1972 1882 1973 1883

-

1974 1884 1975 1885 1976 1886 1977 1887

-

1978 1888 1979 1889 1980 1890 1981 1891

-
- - - -

1982 1892 1983 1893 1984 1894 1997 1907 1998 1908 1999 1909

-
- - - -

1985 1895 1986 1896 1987 1897 1988 1898

-

1989 1899 1990 1900 1991 1901 1992 1902

-

1993 1903 1994 1904 1995 1905 1996 1906

-
- - - -

2015 1941 2029 1941 2012 1941 2017 1941 2020 1941 2015 1941

-
- - - -

2012 1941 2028 1941 2017 1941 2015 1941

-
- - - -

2005 1942 2024 1942 2003 1942 2003 1942 2022 1942 2023 1942

-
- - - -

2003 1942 2023 1942 2026 1942 2005 1942

-
- - - -

2012 1943 2029 1943 2007 1943

-
- - - -

2007 1943 2024 1943 2005 1943 2012 1943

-
- - - -

2027 1937 2010 1920 2004 1914 2025 1935

-

2016 1926 2028 1938 2026 1936 2023 1933

-

2009 1919 2003 1913 2024 1934 2007 1917

-

2007 1917 2029 1939 2013 1923 2009 1919

-

2008 1918 2030 1940 2019 1929 2022 1932 2001 1911

-

2023 1933 2021 1931 2018 1928 2016 1926

-
- - - -

2031 1944 2032 1944 2033 1944 2034 1944 2035 1944

-
- - - -

2036 1945 2037 1945 2038 1945 2039 1945 2040 1945

-
- - - -

2041 1946 2042 1946 2043 1946 2044 1946 2045 1946

-
- - - -

2046 1947 2047 1947 2048 1947 2049 1947 2050 1947

-
- - - -

2051 1948 2052 1948 2053 1948 2054 1948 2055 1948

-
- - - -

2056 1949 2057 1949 2058 1949 2059 1949

-
- - - -

2060 1950 2061 1950 2062 1950 2063 1950

-
- - - -

2064 1951 2065 1951 2066 1951 2067 1951

-
- - - -

2068 1952 2069 1952 2070 1952 2071 1952

-
- - - -

2072 1953 2073 1953 2074 1953 2075 1953

-
- - - -

2076 1954 2077 1954 2078 1954 2079 1954

-
- - - -

2080 1955 2081 1955 2082 1955 2083 1955 2084 1955

-

2085 1955 2086 1955 2087 1955 2088 1955

-
- - - -

2089 1956 2090 1956 2091 1956 2092 1956

-
- - - -

2093 1957 2094 1957 2095 1957 2096 1957 2097 1957

-

2098 1957 2099 1957 2100 1957 2101 1957 2102 1957

-

2103 1957 2104 1957 2105 1957 2106 1957

-
- - - -

2107 1958 2108 1958 2109 1958 2110 1958 2111 1958

-

2112 1958 2113 1958 2114 1958 2115 1958

-
- - - -

2116 1959 2117 1959 2118 1959

-
- - - -

2169 2105 2167 2105 2166 2105 2168 2105 2165 2105 2198 2105

-
- - - -

2156 2105 2178 2105 2158 2105 2157 2105

-

2178 2105 2156 2105 2264 2105 2181 2105 2160 2105 2161 2105 2260 2105

-

2162 2105 2261 2105 2260 2105 2161 2105

-

2195 2105 2166 2105 2167 2105 2262 2105 2261 2105 2162 2105 2164 2105

-

2200 2105 2263 2105 2202 2105 2170 2105 2168 2105 2198 2105 2262 2105 2167 2105 2169 2105

-
- - - -

2138 2106 2208 2106 2255 2106

-
- - - -

2214 2106 2138 2106 2255 2106 2250 2106

-
- - - -

2245 2107 2222 2107 2226 2107

-
- - - -

2226 2107 2214 2107 2250 2107 2245 2107

-
- - - -

2223 2108 2218 2108 2239 2108

-
- - - -

2239 2108 2234 2108 2212 2108 2223 2108

-
- - - -

2229 2109 2204 2109 2132 2109

-
- - - -

2212 2109 2234 2109 2229 2109 2132 2109

-
- - - -

2129 2110 2206 2110 2232 2110

-
- - - -

2211 2110 2129 2110 2232 2110 2236 2110

-
- - - -

2242 2111 2220 2111 2224 2111

-
- - - -

2224 2111 2211 2111 2236 2111 2242 2111

-
- - - -

2225 2112 2216 2112 2248 2112

-
- - - -

2248 2112 2252 2112 2213 2112 2225 2112

-
- - - -

2258 2113 2210 2113 2135 2113

-
- - - -

2213 2113 2252 2113 2258 2113 2135 2113

-
- - - -

2174 2015 2154 1995 2155 1996 2176 2017 2172 2013

-

2121 1962 2151 1992 2253 2094 2207 2048

-

2209 2050 2256 2097 2152 1993 2121 1962

-

2123 1964 2147 1988 2246 2087 2215 2056

-

2219 2060 2240 2081 2148 1989 2123 1964

-

2119 1960 2140 1981 2230 2071 2205 2046

-

2203 2044 2227 2068 2139 1980 2119 1960

-

2260 2101 2223 2064 2212 2053 2132 1973 2177 2018

-

2177 2018 2132 1973 2204 2045 2120 1961 2206 2047 2129 1970 2179 2020

-

2183 2024 2179 2020 2129 1970 2211 2052 2224 2065

-

2193 2034 2183 2024 2224 2065 2220 2061 2124 1965 2216 2057 2225 2066

-

2193 2034 2225 2066 2213 2054 2135 1976 2197 2038

-

2197 2038 2135 1976 2210 2051 2122 1963 2208 2049 2138 1979 2262 2103

-

2261 2102 2262 2103 2138 1979 2214 2055 2226 2067

-

2261 2102 2226 2067 2222 2063 2126 1967 2218 2059 2223 2064 2260 2101

-

2125 1966 2143 1984 2237 2078 2217 2058

-

2221 2062 2243 2084 2144 1985 2125 1966

-

2191 2032 2164 2005 2160 2001 2185 2026 2188 2029

-

2254 2095 2199 2040 2194 2035 2249 2090

-

2250 2091 2194 2035 2190 2031 2244 2085

-

2245 2086 2190 2031 2187 2028 2145 1986

-

2146 1987 2187 2028 2184 2025 2239 2080

-

2238 2079 2184 2025 2180 2021 2233 2074

-

2234 2075 2180 2021 2173 2014 2228 2069

-

2229 2070 2173 2014 2171 2012 2141 1982

-

2142 1983 2171 2012 2175 2016 2232 2073

-

2231 2072 2175 2016 2182 2023 2236 2077

-

2235 2076 2182 2023 2186 2027 2241 2082

-

2242 2083 2186 2027 2189 2030 2149 1990

-

2150 1991 2189 2030 2192 2033 2248 2089

-

2247 2088 2192 2033 2196 2037 2252 2093

-

2251 2092 2196 2037 2201 2042 2257 2098

-

2258 2099 2201 2042 2263 2104 2153 1994

-

2259 2100 2263 2104 2199 2040 2255 2096

-
- - - -

2265 2114 2266 2114 2267 2114

-
- - - -

2268 2115 2269 2115 2270 2115

-
- - - -

2296 2160 2298 2160 2304 2160

-
- - - -

2284 2160 2306 2160 2296 2160 2304 2160

-

2287 2160 2310 2160 2302 2160 2312 2160

-

2298 2160 2302 2160 2310 2160 2304 2160

-
- - - -

2297 2161 2294 2161 2308 2161 2278 2161 2292 2161

-

2292 2161 2314 2161 2300 2161 2297 2161

-
- - - -

2287 2132 2312 2157 2314 2159 2292 2137

-

2302 2147 2300 2145 2313 2158 2311 2156

-

2298 2143 2297 2142 2299 2144 2301 2146

-

2295 2140 2293 2138 2297 2142 2298 2143

-

2284 2129 2278 2123 2308 2153 2306 2151

-

2305 2150 2307 2152 2294 2139 2296 2141

-
- - - -

2287 2132 2312 2157 2314 2159 2292 2137

-

2302 2147 2300 2145 2313 2158 2311 2156

-

2298 2143 2297 2142 2299 2144 2301 2146

-

2295 2140 2293 2138 2297 2142 2298 2143

-

2284 2129 2278 2123 2308 2153 2306 2151

-

2305 2150 2307 2152 2294 2139 2296 2141

-

2290 2135 2292 2137 2278 2123 2281 2126

-

2271 2116 2275 2120 2289 2134 2279 2124

-

2274 2119 2309 2154 2285 2130 2288 2133

-

2273 2118 2304 2149 2310 2155 2276 2121

-

2280 2125 2283 2128 2303 2148 2272 2117

-
- - - -

2323 2193 2339 2193 2321 2193 2325 2193

-

2325 2193 2318 2193 2338 2193 2323 2193

-

2318 2193 2337 2193 2316 2193 2338 2193

-
- - - -

2342 2194 2335 2194 2333 2194 2341 2194

-

2341 2194 2328 2194 2330 2194 2342 2194

-

2328 2194 2345 2194 2343 2194 2330 2194

-
- - - -

2320 2167 2339 2186 2343 2190 2344 2191

-

2326 2173 2325 2172 2321 2168 2345 2192

-

2327 2174 2341 2188 2318 2165 2325 2172

-

2332 2179 2337 2184 2318 2165 2340 2187

-

2316 2163 2336 2183 2331 2178 2334 2181

-

2338 2185 2316 2163 2334 2181 2342 2189

-

2338 2185 2342 2189 2329 2176 2323 2170

-

2323 2170 2329 2176 2343 2190 2339 2186

-
- - - -

2346 2195 2347 2196 2348 2197 2349 2198

-

2350 2199 2351 2200 2352 2201 2353 2202

-

2354 2203 2355 2204 2356 2205 2357 2206

-

2358 2207 2359 2208 2360 2209 2361 2210

-

2362 2211 2363 2212 2364 2213 2365 2214

-

2366 2215 2367 2216 2368 2217 2369 2218

-
- - - -

2373 2235 2371 2235 2378 2235 2378 2235 2380 2235 2373 2235 2380 2235 2383 2235 2373 2235

-
- - - -

2375 2236 2385 2236 2381 2236 2381 2236 2379 2236 2375 2236 2379 2236 2377 2236 2375 2236

-
- - - -

2379 2228 2378 2227 2371 2220 2377 2226

-

2376 2225 2370 2219 2372 2221 2374 2223

-

2375 2224 2373 2222 2382 2231 2384 2233

-

2385 2234 2383 2232 2380 2229 2381 2230

-

2381 2230 2380 2229 2378 2227 2379 2228

-
- - - -

2389 2253 2387 2253 2394 2253 2394 2253 2396 2253 2389 2253 2396 2253 2399 2253 2389 2253

-
- - - -

2393 2254 2401 2254 2397 2254 2397 2254 2395 2254 2393 2254 2395 2254 2391 2254 2393 2254

-
- - - -

2395 2246 2394 2245 2387 2238 2391 2242

-

2390 2241 2386 2237 2388 2239 2392 2243

-

2393 2244 2389 2240 2398 2249 2400 2251

-

2401 2252 2399 2250 2396 2247 2397 2248

-

2397 2248 2396 2247 2394 2245 2395 2246

-
- - - -

2405 2271 2415 2271 2412 2271 2412 2271 2410 2271 2405 2271 2410 2271 2403 2271 2405 2271

-
- - - -

2409 2272 2407 2272 2411 2272 2411 2272 2413 2272 2409 2272 2413 2272 2417 2272 2409 2272

-
- - - -

2413 2266 2412 2265 2415 2268 2417 2270

-

2416 2269 2414 2267 2405 2258 2409 2262

-

2408 2261 2404 2257 2402 2255 2406 2259

-

2407 2260 2403 2256 2410 2263 2411 2264

-

2411 2264 2410 2263 2412 2265 2413 2266

-
- - - -

2419 2293 2421 2293 2422 2293 2423 2293 2427 2293 2425 2293

-
- - - -

2422 2293 2423 2293 2425 2293 2419 2293

-
- - - -

2435 2294 2437 2294 2433 2294 2432 2294 2431 2294 2429 2294

-
- - - -

2433 2294 2432 2294 2429 2294 2435 2294

-
- - - -

2434 2289 2424 2279 2427 2282 2437 2292

-

2436 2291 2426 2281 2423 2278 2433 2288

-

2433 2288 2423 2278 2422 2277 2432 2287

-

2432 2287 2422 2277 2420 2275 2430 2285

-

2428 2283 2431 2286 2421 2276 2418 2273

-

2429 2284 2419 2274 2425 2280 2435 2290

-
- - - -

2446 2313 2444 2313 2442 2313

-
- - - -

2442 2313 2439 2313 2441 2313 2446 2313

-
- - - -

2451 2314 2453 2314 2455 2314

-
- - - -

2455 2314 2450 2314 2448 2314 2451 2314

-
- - - -

2451 2308 2442 2299 2443 2300 2452 2309

-

2453 2310 2444 2301 2445 2302 2454 2311

-

2455 2312 2446 2303 2441 2298 2450 2307

-

2448 2305 2449 2306 2440 2297 2439 2296

-

2447 2304 2438 2295 2442 2299 2451 2308

-
- - - -

2457 2331 2459 2331 2464 2331 2464 2331 2466 2331 2457 2331 2466 2331 2469 2331 2457 2331

-
- - - -

2461 2332 2471 2332 2467 2332 2467 2332 2465 2332 2461 2332 2465 2332 2463 2332 2461 2332

-
- - - -

2465 2324 2464 2323 2459 2318 2463 2322

-

2462 2321 2458 2317 2456 2315 2460 2319

-

2461 2320 2457 2316 2468 2327 2470 2329

-

2471 2330 2469 2328 2466 2325 2467 2326

-

2467 2326 2466 2325 2464 2323 2465 2324

-
- - - -

2481 2353 2479 2353 2477 2353 2476 2353 2473 2353 2475 2353

-
- - - -

2477 2353 2476 2353 2475 2353 2481 2353

-
- - - -

2485 2354 2483 2354 2486 2354 2487 2354 2489 2354 2491 2354

-
- - - -

2486 2354 2487 2354 2491 2354 2485 2354

-
- - - -

2487 2348 2477 2338 2478 2339 2488 2349

-

2489 2350 2479 2340 2480 2341 2490 2351

-

2491 2352 2481 2342 2475 2336 2485 2346

-

2484 2345 2474 2335 2473 2334 2483 2344

-

2482 2343 2472 2333 2476 2337 2486 2347

-

2486 2347 2476 2337 2477 2338 2487 2348

-
- - - -

2493 2371 2505 2371 2502 2371 2502 2371 2500 2371 2493 2371 2500 2371 2495 2371 2493 2371

-
- - - -

2497 2372 2499 2372 2501 2372 2501 2372 2503 2372 2497 2372 2503 2372 2507 2372 2497 2372

-
- - - -

2503 2366 2502 2365 2505 2368 2507 2370

-

2506 2369 2504 2367 2493 2356 2497 2360

-

2496 2359 2492 2355 2494 2357 2498 2361

-

2499 2362 2495 2358 2500 2363 2501 2364

-

2501 2364 2500 2363 2502 2365 2503 2366

-
- - - -

2509 2389 2521 2389 2518 2389 2518 2389 2516 2389 2509 2389 2516 2389 2511 2389 2509 2389

-
- - - -

2513 2390 2515 2390 2517 2390 2517 2390 2519 2390 2513 2390 2519 2390 2523 2390 2513 2390

-
- - - -

2519 2384 2518 2383 2521 2386 2523 2388

-

2522 2387 2520 2385 2509 2374 2513 2378

-

2512 2377 2508 2373 2510 2375 2514 2379

-

2515 2380 2511 2376 2516 2381 2517 2382

-

2517 2382 2516 2381 2518 2383 2519 2384

-
- - - -

2526 2477 2611 2477 2529 2477 2558 2477 2560 2477 2562 2477

-
- - - -

2613 2477 2611 2477 2562 2477 2585 2477 2616 2477

-

2526 2477 2536 2477 2541 2477 2556 2477 2558 2477 2562 2477 2611 2477

-
- - - -

2572 2478 2571 2478 2610 2478 2612 2478 2575 2478 2572 2478

-
- - - -

2610 2478 2611 2478 2613 2478 2612 2478 2572 2478

-
- - - -

2605 2479 2559 2479 2556 2479

-
- - - -

2541 2479 2545 2479 2605 2479 2556 2479

-

2605 2479 2603 2479 2578 2479 2559 2479

-
- - - -

2597 2480 2595 2480 2590 2480 2590 2480 2529 2480 2614 2480

-
- - - -

2590 2480 2614 2480 2598 2480 2597 2480

-
- - - -

2580 2481 2578 2481 2603 2481 2584 2481 2582 2481 2580 2481 2584 2481 2580 2481 2603 2481 2615 2481 2588 2481 2589 2481

-
- - - -

2586 2481 2584 2481 2603 2481 2589 2481

-

2571 2481 2574 2481 2614 2481 2610 2481

-

2575 2481 2612 2481 2614 2481 2574 2481

-

2576 2481 2579 2481 2614 2481 2612 2481

-

2583 2481 2615 2481 2614 2481 2579 2481

-

2603 2481 2598 2481 2614 2481 2615 2481 2589 2481

-
- - - -

2600 2482 2602 2482 2566 2482 2568 2482

-

2568 2482 2543 2482 2540 2482 2600 2482

-
- - - -

2609 2483 2547 2483 2549 2483 2570 2483

-

2570 2483 2564 2483 2607 2483 2609 2483

-
- - - -

2616 2484 2585 2484 2584 2484 2586 2484 2587 2484

-

2588 2484 2615 2484 2616 2484 2587 2484

-
- - - -

2613 2485 2616 2485 2615 2485 2583 2485 2577 2485

-

2576 2485 2612 2485 2613 2485 2577 2485

-
- - - -

2590 2457 2595 2462 2593 2460 2550 2417 2551 2418 2554 2421

-
- - - -

2568 2435 2570 2437 2549 2416 2543 2410

-

2567 2434 2565 2432 2563 2430 2569 2436

-

2564 2431 2566 2433 2601 2468 2606 2473

-

2545 2412 2547 2414 2608 2475 2604 2471

-

2598 2465 2603 2470 2605 2472 2609 2476 2607 2474 2602 2469 2600 2467 2597 2464

-

2538 2405 2596 2463 2599 2466 2540 2407

-

2541 2408 2535 2402 2537 2404 2539 2406 2542 2409 2548 2415 2546 2413 2544 2411

-

2555 2422 2538 2405 2536 2403 2524 2391

-

2555 2422 2553 2420 2592 2459 2594 2461

-

2530 2397 2591 2458 2552 2419 2525 2392

-
- - - -

2590 2457 2595 2462 2593 2460 2550 2417 2551 2418 2554 2421 2587 2454 2589 2456 2588 2455 2586 2453 2589 2456 2587 2454

-
- - - -

2568 2435 2570 2437 2549 2416 2543 2410

-

2567 2434 2565 2432 2563 2430 2569 2436

-

2564 2431 2566 2433 2601 2468 2606 2473

-

2545 2412 2547 2414 2608 2475 2604 2471

-

2598 2465 2603 2470 2605 2472 2609 2476 2607 2474 2602 2469 2600 2467 2597 2464

-

2538 2405 2596 2463 2599 2466 2540 2407

-

2541 2408 2535 2402 2537 2404 2539 2406 2542 2409 2548 2415 2546 2413 2544 2411

-

2555 2422 2538 2405 2536 2403 2524 2391

-

2555 2422 2553 2420 2592 2459 2594 2461

-

2530 2397 2591 2458 2552 2419 2525 2392

-
- - - -

2590 2457 2595 2462 2593 2460 2550 2417 2551 2418 2554 2421 2587 2454 2589 2456 2588 2455 2586 2453 2589 2456 2587 2454 2559 2426 2557 2424 2556 2423

-
- - - -

2568 2435 2570 2437 2549 2416 2543 2410

-

2567 2434 2565 2432 2563 2430 2569 2436

-

2564 2431 2566 2433 2601 2468 2606 2473

-

2545 2412 2547 2414 2608 2475 2604 2471

-

2598 2465 2603 2470 2605 2472 2609 2476 2607 2474 2602 2469 2600 2467 2597 2464

-

2538 2405 2596 2463 2599 2466 2540 2407

-

2541 2408 2535 2402 2537 2404 2539 2406 2542 2409 2548 2415 2546 2413 2544 2411

-

2555 2422 2538 2405 2536 2403 2524 2391

-

2555 2422 2553 2420 2592 2459 2594 2461

-

2530 2397 2591 2458 2552 2419 2525 2392

-

2585 2452 2562 2429 2582 2449 2584 2451

-

2580 2447 2581 2448 2561 2428 2560 2427

-

2559 2426 2578 2445 2580 2447 2560 2427 2558 2425

-
- - - -

2590 2457 2595 2462 2593 2460 2550 2417 2551 2418 2554 2421 2587 2454 2589 2456 2588 2455 2586 2453 2589 2456 2587 2454 2559 2426 2557 2424 2556 2423 2575 2442 2573 2440 2572 2439 2572 2439 2574 2441 2571 2438

-
- - - -

2568 2435 2570 2437 2549 2416 2543 2410

-

2567 2434 2565 2432 2563 2430 2569 2436

-

2564 2431 2566 2433 2601 2468 2606 2473

-

2545 2412 2547 2414 2608 2475 2604 2471

-

2598 2465 2603 2470 2605 2472 2609 2476 2607 2474 2602 2469 2600 2467 2597 2464

-

2538 2405 2596 2463 2599 2466 2540 2407

-

2541 2408 2535 2402 2537 2404 2539 2406 2542 2409 2548 2415 2546 2413 2544 2411

-

2555 2422 2538 2405 2536 2403 2524 2391

-

2555 2422 2553 2420 2592 2459 2594 2461

-

2530 2397 2591 2458 2552 2419 2525 2392

-

2585 2452 2562 2429 2582 2449 2584 2451

-

2580 2447 2581 2448 2561 2428 2560 2427

-

2559 2426 2578 2445 2580 2447 2560 2427 2558 2425

-
- - - -

2590 2457 2595 2462 2593 2460 2550 2417 2551 2418 2554 2421 2587 2454 2589 2456 2588 2455 2586 2453 2589 2456 2587 2454 2559 2426 2557 2424 2556 2423 2575 2442 2573 2440 2572 2439 2572 2439 2574 2441 2571 2438 2583 2450 2579 2446 2577 2444 2577 2444 2579 2446 2576 2443

-
- - - -

2568 2435 2570 2437 2549 2416 2543 2410

-

2567 2434 2565 2432 2563 2430 2569 2436

-

2564 2431 2566 2433 2601 2468 2606 2473

-

2545 2412 2547 2414 2608 2475 2604 2471

-

2598 2465 2603 2470 2605 2472 2609 2476 2607 2474 2602 2469 2600 2467 2597 2464

-

2538 2405 2596 2463 2599 2466 2540 2407

-

2541 2408 2535 2402 2537 2404 2539 2406 2542 2409 2548 2415 2546 2413 2544 2411

-

2555 2422 2538 2405 2536 2403 2524 2391

-

2555 2422 2553 2420 2592 2459 2594 2461

-

2530 2397 2591 2458 2552 2419 2525 2392

-

2585 2452 2562 2429 2582 2449 2584 2451

-

2580 2447 2581 2448 2561 2428 2560 2427

-

2559 2426 2578 2445 2580 2447 2560 2427 2558 2425

-
- - - -

2590 2486 2595 2486 2593 2486 2526 2486 2553 2486 2555 2486 2587 2486 2589 2486 2588 2486 2586 2486 2589 2486 2587 2486 2559 2486 2558 2486 2556 2486 2575 2486 2574 2486 2572 2486 2572 2486 2574 2486 2571 2486 2583 2486 2579 2486 2577 2486 2577 2486 2579 2486 2576 2486

-
- - - -

2568 2486 2570 2486 2549 2486 2543 2486

-

2568 2486 2566 2486 2564 2486 2570 2486

-

2564 2486 2566 2486 2602 2486 2607 2486

-

2545 2486 2547 2486 2609 2486 2605 2486

-

2598 2486 2603 2486 2605 2486 2609 2486 2607 2486 2602 2486 2600 2486 2597 2486

-

2538 2486 2597 2486 2600 2486 2540 2486

-

2541 2486 2536 2486 2538 2486 2540 2486 2543 2486 2549 2486 2547 2486 2545 2486

-

2555 2486 2538 2486 2536 2486 2526 2486

-

2555 2486 2553 2486 2593 2486 2595 2486

-

2590 2486 2593 2486 2553 2486 2526 2486

-

2585 2486 2562 2486 2582 2486 2584 2486

-

2580 2486 2582 2486 2562 2486 2560 2486

-

2559 2486 2578 2486 2580 2486 2560 2486 2558 2486

-

2611 2486 2610 2486 2614 2486 2529 2486

-
- - - -

2617 2487 2618 2488 2619 2489 2620 2490 2621 2491 2622 2492 2623 2493 2624 2494 2625 2495 2626 2496 2627 2497 2628 2498 2629 2499 2630 2500 2631 2501 2632 2502

-

2633 2503 2634 2504 2635 2505 2636 2506 2637 2507 2638 2508 2639 2509 2640 2510 2641 2511 2642 2512 2643 2513 2644 2514 2645 2515 2646 2516 2647 2517 2648 2518

-

2649 2519 2650 2520 2651 2521 2652 2522

-

2653 2523 2654 2524 2655 2525 2656 2526

-

2657 2527 2658 2528 2659 2529 2660 2530

-

2661 2531 2662 2532 2663 2533 2664 2534

-

2665 2535 2666 2536 2667 2537 2668 2538

-

2669 2539 2670 2540 2671 2541 2672 2542

-

2673 2543 2674 2544 2675 2545 2676 2546

-

2677 2547 2678 2548 2679 2549 2680 2550

-

2681 2551 2682 2552 2683 2553 2684 2554

-

2685 2555 2686 2556 2687 2557 2688 2558

-

2689 2559 2690 2560 2691 2561 2692 2562

-

2693 2563 2694 2564 2695 2565 2696 2566

-

2697 2567 2698 2568 2699 2569 2700 2570

-

2701 2571 2702 2572 2703 2573 2704 2574

-

2705 2575 2706 2576 2707 2577 2708 2578

-

2709 2579 2710 2580 2711 2581 2712 2582

-
- - - -

2713 2583 2714 2584 2715 2585 2716 2586 2717 2587 2718 2588 2719 2589 2720 2590 2721 2591 2722 2592

-

2723 2593 2724 2594 2725 2595 2726 2596 2727 2597 2728 2598 2729 2599 2730 2600 2731 2601 2732 2602

-

2733 2603 2734 2604 2735 2605 2736 2606

-

2737 2607 2738 2608 2739 2609 2740 2610

-

2741 2611 2742 2612 2743 2613 2744 2614

-

2745 2615 2746 2616 2747 2617 2748 2618

-

2749 2619 2750 2620 2751 2621 2752 2622

-

2753 2623 2754 2624 2755 2625 2756 2626

-

2757 2627 2758 2628 2759 2629 2760 2630

-

2761 2631 2762 2632 2763 2633 2764 2634

-

2765 2635 2766 2636 2767 2637 2768 2638

-

2769 2639 2770 2640 2771 2641 2772 2642

-
- - - -

2773 2643 2774 2644 2775 2645 2776 2646 2777 2647 2778 2648 2779 2649 2780 2650 2781 2651 2782 2652 2783 2653 2784 2654 2785 2655 2786 2656 2787 2657 2788 2658

-

2789 2659 2790 2660 2791 2661 2792 2662 2793 2663 2794 2664 2795 2665 2796 2666 2797 2667 2798 2668 2799 2669 2800 2670 2801 2671 2802 2672 2803 2673 2804 2674

-

2805 2675 2806 2676 2807 2677 2808 2678

-

2809 2679 2810 2680 2811 2681 2812 2682

-

2813 2683 2814 2684 2815 2685 2816 2686

-

2817 2687 2818 2688 2819 2689 2820 2690

-

2821 2691 2822 2692 2823 2693 2824 2694

-

2825 2695 2826 2696 2827 2697 2828 2698

-

2829 2699 2830 2700 2831 2701 2832 2702

-

2833 2703 2834 2704 2835 2705 2836 2706

-

2837 2707 2838 2708 2839 2709 2840 2710

-

2841 2711 2842 2712 2843 2713 2844 2714

-

2845 2715 2846 2716 2847 2717 2848 2718

-

2849 2719 2850 2720 2851 2721 2852 2722

-

2853 2723 2854 2724 2855 2725 2856 2726

-

2857 2727 2858 2728 2859 2729 2860 2730

-

2861 2731 2862 2732 2863 2733 2864 2734

-

2865 2735 2866 2736 2867 2737 2868 2738

-
- - - -

2869 2739 2870 2740 2871 2741 2872 2742 2873 2743 2874 2744 2875 2745 2876 2746 2877 2747 2878 2748 2879 2749 2880 2750 2881 2751 2882 2752 2883 2753 2884 2754

-

2885 2755 2886 2756 2887 2757 2888 2758 2889 2759 2890 2760 2891 2761 2892 2762 2893 2763 2894 2764 2895 2765 2896 2766 2897 2767 2898 2768 2899 2769 2900 2770

-

2901 2771 2902 2772 2903 2773 2904 2774

-

2905 2775 2906 2776 2907 2777 2908 2778

-

2909 2779 2910 2780 2911 2781 2912 2782

-

2913 2783 2914 2784 2915 2785 2916 2786

-

2917 2787 2918 2788 2919 2789 2920 2790

-

2921 2791 2922 2792 2923 2793 2924 2794

-

2925 2795 2926 2796 2927 2797 2928 2798

-

2929 2799 2930 2800 2931 2801 2932 2802

-

2933 2803 2934 2804 2935 2805 2936 2806

-

2937 2807 2938 2808 2939 2809 2940 2810

-

2941 2811 2942 2812 2943 2813 2944 2814

-

2945 2815 2946 2816 2947 2817 2948 2818

-

2949 2819 2950 2820 2951 2821 2952 2822

-

2953 2823 2954 2824 2955 2825 2956 2826

-

2957 2827 2958 2828 2959 2829 2960 2830

-

2961 2831 2962 2832 2963 2833 2964 2834

-
- - - -

2965 2835 2966 2836 2967 2837 2968 2838 2969 2839 2970 2840 2971 2841 2972 2842 2973 2843 2974 2844 2975 2845 2976 2846 2977 2847 2978 2848 2979 2849 2980 2850

-

2981 2851 2982 2852 2983 2853 2984 2854 2985 2855 2986 2856 2987 2857 2988 2858 2989 2859 2990 2860 2991 2861 2992 2862 2993 2863 2994 2864 2995 2865 2996 2866

-

2997 2867 2998 2868 2999 2869 3000 2870

-

3001 2871 3002 2872 3003 2873 3004 2874

-

3005 2875 3006 2876 3007 2877 3008 2878

-

3009 2879 3010 2880 3011 2881 3012 2882

-

3013 2883 3014 2884 3015 2885 3016 2886

-

3017 2887 3018 2888 3019 2889 3020 2890

-

3021 2891 3022 2892 3023 2893 3024 2894

-

3025 2895 3026 2896 3027 2897 3028 2898

-

3029 2899 3030 2900 3031 2901 3032 2902

-

3033 2903 3034 2904 3035 2905 3036 2906

-

3037 2907 3038 2908 3039 2909 3040 2910

-

3041 2911 3042 2912 3043 2913 3044 2914

-

3045 2915 3046 2916 3047 2917 3048 2918

-

3049 2919 3050 2920 3051 2921 3052 2922

-

3053 2923 3054 2924 3055 2925 3056 2926

-

3057 2927 3058 2928 3059 2929 3060 2930

-
- - - -

3073 2949 3071 2949 3074 2949

-
- - - -

3074 2949 3076 2949 3078 2949 3073 2949

-
- - - -

3069 2950 3067 2950 3065 2950

-
- - - -

3065 2950 3062 2950 3064 2950 3069 2950

-
- - - -

3065 2935 3066 2936 3075 2945 3074 2944

-

3074 2944 3071 2941 3062 2932 3065 2935

-

3070 2940 3072 2942 3063 2933 3061 2931

-

3073 2943 3077 2947 3068 2938 3064 2934

-

3067 2937 3069 2939 3078 2948 3076 2946

-
- - - -

3098 3163 3190 3163 3300 3163

-
- - - -

3086 3163 3098 3163 3300 3163 3189 3163 3090 3163

-
- - - -

3228 3164 3224 3164 3199 3164 3313 3164 3306 3164 3160 3164

-
- - - -

3160 3164 3228 3164 3199 3164 3313 3164

-

3106 3164 3115 3164 3303 3164 3192 3164 3104 3164

-

3115 3164 3160 3164 3306 3164 3303 3164

-
- - - -

3298 3165 3317 3165 3198 3165

-
- - - -

3298 3165 3198 3165 3240 3165 3242 3165 3153 3165

-
- - - -

3297 3166 3311 3166 3312 3166

-
- - - -

3317 3166 3298 3166 3297 3166 3312 3166

-
- - - -

3296 3167 3304 3167 3305 3167

-
- - - -

3311 3167 3297 3167 3296 3167 3305 3167

-
- - - -

3295 3168 3301 3168 3302 3168

-
- - - -

3304 3168 3296 3168 3295 3168 3302 3168

-
- - - -

3293 3169 3314 3169 3309 3169

-
- - - -

3309 3169 3308 3169 3292 3169 3293 3169

-
- - - -

3294 3170 3318 3170 3315 3170

-
- - - -

3293 3170 3294 3170 3315 3170 3314 3170

-
- - - -

3108 3171 3208 3171 3200 3171

-
- - - -

3200 3171 3318 3171 3294 3171 3108 3171

-
- - - -

3100 3172 3195 3172 3310 3172 3316 3172 3201 3172 3216 3172 3201 3172 3209 3172 3216 3172 3209 3172 3214 3172 3216 3172

-
- - - -

3100 3172 3310 3172 3316 3172 3216 3172 3119 3172 3113 3172 3102 3172

-
- - - -

3108 3173 3294 3173 3113 3173 3294 3173 3293 3173 3113 3173 3293 3173 3292 3173 3113 3173 3113 3173 3292 3173 3291 3173

-
- - - -

3291 3173 3101 3173 3102 3173 3113 3173

-

3109 3173 3107 3173 3108 3173 3113 3173 3112 3173 3110 3173

-
- - - -

3318 3174 3200 3174 3201 3174

-
- - - -

3201 3174 3316 3174 3315 3174 3318 3174

-
- - - -

3310 3175 3309 3175 3314 3175

-
- - - -

3315 3175 3316 3175 3310 3175 3314 3175

-
- - - -

3308 3176 3309 3176 3310 3176

-
- - - -

3300 3176 3299 3176 3307 3176 3193 3176 3191 3176 3189 3176

-

3193 3176 3307 3176 3308 3176 3310 3176 3195 3176 3194 3176

-
- - - -

3303 3177 3302 3177 3301 3177

-
- - - -

3190 3177 3192 3177 3303 3177 3301 3177 3299 3177 3300 3177

-
- - - -

3306 3178 3305 3178 3304 3178

-
- - - -

3304 3178 3302 3178 3303 3178 3306 3178

-
- - - -

3313 3179 3312 3179 3311 3179

-
- - - -

3306 3179 3313 3179 3311 3179 3305 3179

-
- - - -

3199 3180 3198 3180 3317 3180

-
- - - -

3313 3180 3199 3180 3317 3180 3312 3180

-
- - - -

3115 3181 3114 3181 3295 3181 3296 3181 3297 3181 3160 3181 3160 3181 3297 3181 3298 3181 3160 3181 3298 3181 3153 3181

-
- - - -

3166 3181 3162 3181 3160 3181 3153 3181 3152 3181 3154 3181 3155 3181 3159 3181 3161 3181 3164 3181

-

3296 3181 3160 3181 3115 3181 3295 3181

-
- - - -

3229 3182 3234 3182 3250 3182 3248 3182 3242 3182

-

3229 3182 3242 3182 3240 3182 3224 3182 3228 3182

-
- - - -

3084 3183 3079 3183 3082 3183 3101 3183 3291 3183 3307 3183 3299 3183

-

3299 3183 3301 3183 3295 3183 3114 3183 3105 3183 3084 3183

-
- - - -

3201 3073 3200 3072 3208 3080 3209 3081

-

3241 3113 3220 3092 3213 3085 3209 3081 3208 3080

-

3121 2993 3274 3146 3259 3131 3117 2989

-

3125 2997 3129 3001 3210 3082 3276 3148 3274 3146 3121 2993

-

3275 3147 3278 3150 3284 3156 3286 3158 3280 3152 3271 3143 3262 3134 3260 3132

-

3252 3124 3254 3126 3286 3158 3284 3156

-

3150 3022 3149 3021 3145 3017 3147 3019

-

3144 3016 3148 3020 3158 3030 3142 3014

-

3158 3030 3149 3021 3150 3022 3157 3029 3207 3079 3226 3098 3243 3115 3251 3123 3283 3155 3277 3149 3212 3084

-

3222 3094 3123 2995 3119 2991 3216 3088 3217 3089

-

3127 2999 3123 2995 3222 3094 3225 3097 3205 3077 3131 3003

-

3135 3007 3131 3003 3206 3078 3157 3029 3143 3015 3141 3013

-

3143 3015 3156 3028 3151 3023 3146 3018

-

3143 3015 3147 3019 3145 3017 3142 3014 3137 3009 3140 3012

-

3139 3011 3136 3008 3132 3004 3134 3006

-

3133 3005 3138 3010 3142 3014 3158 3030 3211 3083 3129 3001

-

3132 3004 3128 3000 3124 2996 3126 2998 3130 3002 3134 3006

-

3126 2998 3124 2996 3120 2992 3116 2988 3111 2983 3113 2985 3118 2990 3122 2994

-

3110 2982 3112 2984 3117 2989 3259 3131 3261 3133

-

3110 2982 3261 3133 3270 3142 3109 2981

-

3109 2981 3270 3142 3279 3151 3107 2979

-

3108 2980 3107 2979 3279 3151 3285 3157 3253 3125 3245 3117 3241 3113

-

3244 3116 3246 3118 3254 3126 3252 3124

-

3219 3091 3221 3093 3246 3118 3244 3116 3227 3099 3223 3095

-

3221 3093 3218 3090 3215 3087 3214 3086

-
- - - -

3201 3184 3200 3184 3208 3184 3209 3184

-

3241 3184 3221 3184 3214 3184 3209 3184 3208 3184

-

3121 3184 3275 3184 3260 3184 3117 3184

-

3125 3184 3129 3184 3212 3184 3278 3184 3275 3184 3121 3184

-

3275 3184 3278 3184 3284 3184 3286 3184 3280 3184 3271 3184 3262 3184 3260 3184

-

3252 3184 3254 3184 3286 3184 3284 3184

-

3151 3184 3149 3184 3145 3184 3147 3184

-

3145 3184 3149 3184 3158 3184 3142 3184

-

3158 3184 3149 3184 3151 3184 3157 3184 3207 3184 3227 3184 3244 3184 3252 3184 3284 3184 3278 3184 3212 3184

-

3223 3184 3123 3184 3119 3184 3216 3184 3219 3184

-

3127 3184 3123 3184 3223 3184 3227 3184 3207 3184 3131 3184

-

3135 3184 3131 3184 3207 3184 3157 3184 3143 3184 3141 3184

-

3143 3184 3157 3184 3151 3184 3147 3184

-

3143 3184 3147 3184 3145 3184 3142 3184 3138 3184 3141 3184

-

3141 3184 3138 3184 3133 3184 3135 3184

-

3133 3184 3138 3184 3142 3184 3158 3184 3212 3184 3129 3184

-

3133 3184 3129 3184 3125 3184 3127 3184 3131 3184 3135 3184

-

3127 3184 3125 3184 3121 3184 3117 3184 3112 3184 3113 3184 3119 3184 3123 3184

-

3110 3184 3112 3184 3117 3184 3260 3184 3262 3184

-

3110 3184 3262 3184 3271 3184 3109 3184

-

3109 3184 3271 3184 3280 3184 3107 3184

-

3108 3184 3107 3184 3280 3184 3286 3184 3254 3184 3246 3184 3241 3184

-

3244 3184 3246 3184 3254 3184 3252 3184

-

3219 3184 3221 3184 3246 3184 3244 3184 3227 3184 3223 3184

-

3221 3184 3219 3184 3216 3184 3214 3184

-

3198 3184 3199 3184 3224 3184 3240 3184

-
- - - -

3201 3073 3200 3072 3208 3080 3209 3081

-

3241 3113 3220 3092 3213 3085 3209 3081 3208 3080

-

3121 2993 3274 3146 3259 3131 3117 2989

-

3125 2997 3129 3001 3210 3082 3276 3148 3274 3146 3121 2993

-

3275 3147 3278 3150 3284 3156 3286 3158 3280 3152 3271 3143 3262 3134 3260 3132

-

3252 3124 3254 3126 3286 3158 3284 3156

-

3150 3022 3149 3021 3145 3017 3147 3019

-

3144 3016 3148 3020 3158 3030 3142 3014

-

3158 3030 3149 3021 3150 3022 3157 3029 3207 3079 3226 3098 3243 3115 3251 3123 3283 3155 3277 3149 3212 3084

-

3222 3094 3123 2995 3119 2991 3216 3088 3217 3089

-

3127 2999 3123 2995 3222 3094 3225 3097 3205 3077 3131 3003

-

3135 3007 3131 3003 3206 3078 3157 3029 3143 3015 3141 3013

-

3143 3015 3156 3028 3151 3023 3146 3018

-

3143 3015 3147 3019 3145 3017 3142 3014 3137 3009 3140 3012

-

3139 3011 3136 3008 3132 3004 3134 3006

-

3133 3005 3138 3010 3142 3014 3158 3030 3211 3083 3129 3001

-

3132 3004 3128 3000 3124 2996 3126 2998 3130 3002 3134 3006

-

3126 2998 3124 2996 3120 2992 3116 2988 3111 2983 3113 2985 3118 2990 3122 2994

-

3110 2982 3112 2984 3117 2989 3259 3131 3261 3133

-

3110 2982 3261 3133 3270 3142 3109 2981

-

3109 2981 3270 3142 3279 3151 3107 2979

-

3108 2980 3107 2979 3279 3151 3285 3157 3253 3125 3245 3117 3241 3113

-

3244 3116 3246 3118 3254 3126 3252 3124

-

3219 3091 3221 3093 3246 3118 3244 3116 3227 3099 3223 3095

-

3221 3093 3218 3090 3215 3087 3214 3086

-

3198 3070 3199 3071 3224 3096 3240 3112

-

3104 2976 3192 3064 3190 3062 3098 2970

-

3106 2978 3105 2977 3114 2986 3115 2987

-

3084 2956 3105 2977 3106 2978 3103 2975 3097 2969 3086 2958 3085 2957

-

3081 2953 3079 2951 3084 2956 3085 2957

-

3083 2955 3082 2954 3079 2951 3080 2952

-

3087 2959 3099 2971 3102 2974 3101 2973 3082 2954 3083 2955

-

3088 2960 3092 2964 3194 3066 3195 3067 3100 2972

-

3086 2958 3089 2961 3093 2965 3095 2967 3091 2963 3087 2959 3083 2955 3080 2952 3085 2957

-

3090 2962 3189 3061 3191 3063 3094 2966

-

3094 2966 3191 3063 3193 3065 3096 2968

-

3096 2968 3193 3065 3194 3066 3092 2964

-
- - - -

3201 3073 3200 3072 3208 3080 3209 3081

-

3241 3113 3220 3092 3213 3085 3209 3081 3208 3080

-

3121 2993 3274 3146 3259 3131 3117 2989

-

3125 2997 3129 3001 3210 3082 3276 3148 3274 3146 3121 2993

-

3275 3147 3278 3150 3284 3156 3286 3158 3280 3152 3271 3143 3262 3134 3260 3132

-

3252 3124 3254 3126 3286 3158 3284 3156

-

3150 3022 3149 3021 3145 3017 3147 3019

-

3144 3016 3148 3020 3158 3030 3142 3014

-

3158 3030 3149 3021 3150 3022 3157 3029 3207 3079 3226 3098 3243 3115 3251 3123 3283 3155 3277 3149 3212 3084

-

3222 3094 3123 2995 3119 2991 3216 3088 3217 3089

-

3127 2999 3123 2995 3222 3094 3225 3097 3205 3077 3131 3003

-

3135 3007 3131 3003 3206 3078 3157 3029 3143 3015 3141 3013

-

3143 3015 3156 3028 3151 3023 3146 3018

-

3143 3015 3147 3019 3145 3017 3142 3014 3137 3009 3140 3012

-

3139 3011 3136 3008 3132 3004 3134 3006

-

3133 3005 3138 3010 3142 3014 3158 3030 3211 3083 3129 3001

-

3132 3004 3128 3000 3124 2996 3126 2998 3130 3002 3134 3006

-

3126 2998 3124 2996 3120 2992 3116 2988 3111 2983 3113 2985 3118 2990 3122 2994

-

3110 2982 3112 2984 3117 2989 3259 3131 3261 3133

-

3110 2982 3261 3133 3270 3142 3109 2981

-

3109 2981 3270 3142 3279 3151 3107 2979

-

3108 2980 3107 2979 3279 3151 3285 3157 3253 3125 3245 3117 3241 3113

-

3244 3116 3246 3118 3254 3126 3252 3124

-

3219 3091 3221 3093 3246 3118 3244 3116 3227 3099 3223 3095

-

3221 3093 3218 3090 3215 3087 3214 3086

-

3198 3070 3199 3071 3224 3096 3240 3112

-

3104 2976 3192 3064 3190 3062 3098 2970

-

3106 2978 3105 2977 3114 2986 3115 2987

-

3084 2956 3105 2977 3106 2978 3103 2975 3097 2969 3086 2958 3085 2957

-

3081 2953 3079 2951 3084 2956 3085 2957

-

3083 2955 3082 2954 3079 2951 3080 2952

-

3087 2959 3099 2971 3102 2974 3101 2973 3082 2954 3083 2955

-

3088 2960 3092 2964 3194 3066 3195 3067 3100 2972

-

3086 2958 3089 2961 3093 2965 3095 2967 3091 2963 3087 2959 3083 2955 3080 2952 3085 2957

-

3090 2962 3189 3061 3191 3063 3094 2966

-

3094 2966 3191 3063 3193 3065 3096 2968

-

3096 2968 3193 3065 3194 3066 3092 2964

-

3154 3026 3272 3144 3263 3135 3155 3027

-

3256 3128 3258 3130 3290 3162 3288 3160

-

3248 3120 3250 3122 3258 3130 3256 3128

-

3153 3025 3242 3114 3247 3119 3255 3127 3287 3159 3281 3153 3152 3024

-

3152 3024 3281 3153 3272 3144 3154 3026

-

3273 3145 3282 3154 3288 3160 3290 3162 3269 3141 3266 3138 3264 3136

-

3263 3135 3265 3137 3159 3031 3155 3027

-

3159 3031 3265 3137 3267 3139 3238 3110 3161 3033

-

3238 3110 3235 3107 3168 3040 3164 3036 3161 3033

-

3203 3075 3231 3103 3170 3042 3174 3046 3180 3052 3183 3055

-

3186 3058 3188 3060 3197 3069 3203 3075 3183 3055

-

3176 3048 3182 3054 3185 3057 3186 3058 3183 3055 3179 3051

-

3186 3058 3184 3056 3187 3059 3188 3060

-

3188 3060 3187 3059 3196 3068 3197 3069

-

3204 3076 3196 3068 3187 3059 3185 3057 3181 3053

-

3196 3068 3204 3076 3237 3109 3239 3111 3268 3140 3289 3161 3257 3129 3249 3121 3234 3106 3232 3104 3202 3074 3197 3069

-

3236 3108 3204 3076 3181 3053 3177 3049 3172 3044 3168 3040

-

3173 3045 3171 3043 3175 3047 3178 3050

-

3171 3043 3173 3045 3169 3041 3165 3037 3163 3035 3167 3039

-

3166 3038 3170 3042 3230 3102 3233 3105 3229 3101 3162 3034

-

3162 3034 3229 3101 3228 3100 3160 3032

-
- - - -

3201 3185 3200 3185 3208 3185 3209 3185

-

3241 3185 3221 3185 3214 3185 3209 3185 3208 3185

-

3121 3185 3275 3185 3260 3185 3117 3185

-

3125 3185 3129 3185 3212 3185 3278 3185 3275 3185 3121 3185

-

3275 3185 3278 3185 3284 3185 3286 3185 3280 3185 3271 3185 3262 3185 3260 3185

-

3252 3185 3254 3185 3286 3185 3284 3185

-

3151 3185 3149 3185 3145 3185 3147 3185

-

3145 3185 3149 3185 3158 3185 3142 3185

-

3158 3185 3149 3185 3151 3185 3157 3185 3207 3185 3227 3185 3244 3185 3252 3185 3284 3185 3278 3185 3212 3185

-

3223 3185 3123 3185 3119 3185 3216 3185 3219 3185

-

3127 3185 3123 3185 3223 3185 3227 3185 3207 3185 3131 3185

-

3135 3185 3131 3185 3207 3185 3157 3185 3143 3185 3141 3185

-

3143 3185 3157 3185 3151 3185 3147 3185

-

3143 3185 3147 3185 3145 3185 3142 3185 3138 3185 3141 3185

-

3141 3185 3138 3185 3133 3185 3135 3185

-

3133 3185 3138 3185 3142 3185 3158 3185 3212 3185 3129 3185

-

3133 3185 3129 3185 3125 3185 3127 3185 3131 3185 3135 3185

-

3127 3185 3125 3185 3121 3185 3117 3185 3112 3185 3113 3185 3119 3185 3123 3185

-

3110 3185 3112 3185 3117 3185 3260 3185 3262 3185

-

3110 3185 3262 3185 3271 3185 3109 3185

-

3109 3185 3271 3185 3280 3185 3107 3185

-

3108 3185 3107 3185 3280 3185 3286 3185 3254 3185 3246 3185 3241 3185

-

3244 3185 3246 3185 3254 3185 3252 3185

-

3219 3185 3221 3185 3246 3185 3244 3185 3227 3185 3223 3185

-

3221 3185 3219 3185 3216 3185 3214 3185

-

3198 3185 3199 3185 3224 3185 3240 3185

-

3104 3185 3192 3185 3190 3185 3098 3185

-

3106 3185 3105 3185 3114 3185 3115 3185

-

3084 3185 3105 3185 3106 3185 3104 3185 3098 3185 3086 3185 3085 3185

-

3081 3185 3079 3185 3084 3185 3085 3185

-

3083 3185 3082 3185 3079 3185 3081 3185

-

3088 3185 3100 3185 3102 3185 3101 3185 3082 3185 3083 3185

-

3088 3185 3092 3185 3194 3185 3195 3185 3100 3185

-

3086 3185 3090 3185 3094 3185 3096 3185 3092 3185 3088 3185 3083 3185 3081 3185 3085 3185

-

3090 3185 3189 3185 3191 3185 3094 3185

-

3094 3185 3191 3185 3193 3185 3096 3185

-

3096 3185 3193 3185 3194 3185 3092 3185

-

3154 3185 3273 3185 3264 3185 3155 3185

-

3256 3185 3258 3185 3290 3185 3288 3185

-

3248 3185 3250 3185 3258 3185 3256 3185

-

3153 3185 3242 3185 3248 3185 3256 3185 3288 3185 3282 3185 3152 3185

-

3152 3185 3282 3185 3273 3185 3154 3185

-

3273 3185 3282 3185 3288 3185 3290 3185 3269 3185 3266 3185 3264 3185

-

3264 3185 3266 3185 3159 3185 3155 3185

-

3159 3185 3266 3185 3269 3185 3239 3185 3161 3185

-

3239 3185 3237 3185 3168 3185 3164 3185 3161 3185

-

3203 3185 3232 3185 3170 3185 3174 3185 3180 3185 3183 3185

-

3186 3185 3188 3185 3197 3185 3203 3185 3183 3185

-

3177 3185 3182 3185 3185 3185 3186 3185 3183 3185 3180 3185

-

3186 3185 3185 3185 3187 3185 3188 3185

-

3188 3185 3187 3185 3196 3185 3197 3185

-

3204 3185 3196 3185 3187 3185 3185 3185 3182 3185

-

3196 3185 3204 3185 3237 3185 3239 3185 3269 3185 3290 3185 3258 3185 3250 3185 3234 3185 3232 3185 3203 3185 3197 3185

-

3237 3185 3204 3185 3182 3185 3177 3185 3172 3185 3168 3185

-

3174 3185 3172 3185 3177 3185 3180 3185

-

3172 3185 3174 3185 3170 3185 3166 3185 3164 3185 3168 3185

-

3166 3185 3170 3185 3232 3185 3234 3185 3229 3185 3162 3185

-

3162 3185 3229 3185 3228 3185 3160 3185

-

3292 3185 3308 3185 3307 3185 3291 3185

-
-
- - - CAT3DBagRep - - -
- - - - 337.036 -166.5 15.2313 336.007 -166.5 14.9556 334.978 -166.5 13.1734 334.978 -166.5 -1.64688 339.094 -166.5 -1.64688 339.094 -166.5 13.1734 338.819 -166.5 14.2024 222.784 -166.5 25.9998 220.149 -166.5 25.9998 220.149 -166.5 -26.0002 222.784 -166.5 -26.0002 250.149 -166.5 0.06476 247.59 -166.5 0.06476 247.59 -166.5 -21.434 250.149 -166.5 -21.434 250.149 -166.5 -26.0002 250.149 -166.5 -21.434 222.784 -166.5 -21.434 222.784 -166.5 -26.0002 291.232 -166.5 25.9998 288.598 -166.5 25.9998 288.598 -166.5 -26.0002 291.232 -166.5 -26.0002 318.598 -166.5 0.06476 316.038 -166.5 0.06476 316.038 -166.5 -21.434 318.598 -166.5 -21.434 318.598 -166.5 -26.0002 318.598 -166.5 -21.434 291.232 -166.5 -21.434 291.232 -166.5 -26.0002 325.195 -166.5 25.9998 322.56 -166.5 25.9998 322.56 -166.5 -26.0002 325.195 -166.5 -26.0002 352.56 -166.5 -26.0002 352.56 -166.5 -21.434 325.195 -166.5 -21.434 325.195 -166.5 -26.0002 345.866 -166.5 14.3973 352.56 -166.5 14.3973 352.56 -166.5 25.9998 345.866 -166.5 25.9998 284.112 -166.5 25.9998 281.552 -166.5 25.9998 281.552 -166.5 -14.2677 284.112 -166.5 -14.2677 256.746 -166.5 25.9998 254.112 -166.5 25.9998 254.112 -166.5 -26.0002 256.746 -166.5 -26.0002 284.112 -166.5 -26.0002 284.112 -166.5 -21.434 256.746 -166.5 -21.434 256.746 -166.5 -26.0002 231.052 -166.5 21.5635 231.052 -166.5 25.9998 222.784 -166.5 25.9998 222.784 -166.5 21.5635 250.149 -166.5 21.5635 250.149 -166.5 25.9998 235.187 -166.5 25.9998 235.187 -166.5 21.5635 231.052 -166.5 21.5635 233.091 -166.5 21.4063 235.187 -166.5 21.5635 235.187 -166.5 25.9998 231.052 -166.5 25.9998 235.187 -166.5 21.5635 233.091 -166.5 21.4063 233.091 -166.5 -2.47022 235.187 -166.5 14.3973 235.187 -166.5 21.5635 235.187 -166.5 14.3973 237.208 -166.5 21.4063 247.59 -166.5 21.5635 235.187 -166.5 21.5635 237.208 -166.5 21.4063 244.206 -166.5 21.4063 243.456 -166.5 0.06476 250.149 -166.5 0.06476 250.149 -166.5 21.5635 247.59 -166.5 21.5635 244.206 -166.5 21.4063 243.456 -166.5 17.0542 243.456 -166.5 17.0542 240.089 -166.5 -2.47022 242.353 -166.5 -2.96658 243.456 -166.5 0.06476 226.918 -166.5 21.5635 222.784 -166.5 21.5635 222.784 -166.5 -21.434 226.093 -166.5 -21.4068 235.187 -166.5 -21.434 233.091 -166.5 -21.4068 226.093 -166.5 -21.4068 222.784 -166.5 -21.434 235.149 -166.5 -8.64517 233.091 -166.5 -8.64517 233.091 -166.5 -21.4068 235.187 -166.5 -21.434 237.208 -166.5 -21.4068 237.208 -166.5 -10.7035 236.932 -166.5 -9.67431 247.59 -166.5 -21.434 244.206 -166.5 -21.4068 237.208 -166.5 -21.4068 235.187 -166.5 -21.434 244.206 -166.5 -6.17521 244.206 -166.5 -21.4068 247.59 -166.5 -21.434 247.59 -166.5 -7.10149 247.59 -166.5 -7.10149 247.59 -166.5 0.06476 243.456 -166.5 0.06476 243.456 -166.5 -4.06875 244.206 -166.5 -6.17521 242.353 -166.5 -2.96658 243.456 -166.5 -4.06875 243.456 -166.5 0.06476 318.598 -166.5 21.5635 318.598 -166.5 25.9998 303.635 -166.5 25.9998 303.635 -166.5 21.5635 311.634 -166.5 -4.32271 311.904 -166.5 -5.3307 316.038 -166.5 -7.10149 316.038 -166.5 0.06476 311.904 -166.5 0.06476 311.904 -166.5 -5.3307 312.13 -166.5 -21.4068 316.038 -166.5 -21.434 316.038 -166.5 -7.10149 316.038 -166.5 -21.434 312.13 -166.5 -21.4068 305.132 -166.5 -21.4068 303.635 -166.5 -21.434 303.622 -166.5 -8.792 301.458 -166.5 -8.64517 301.016 -166.5 -21.4068 303.635 -166.5 -21.434 305.132 -166.5 -21.4068 305.132 -166.5 -10.7035 304.856 -166.5 -9.67431 303.635 -166.5 -21.434 301.016 -166.5 -21.4068 294.017 -166.5 -21.4068 291.232 -166.5 -21.434 294.017 -166.5 20.8824 291.232 -166.5 21.5635 291.232 -166.5 -21.434 294.017 -166.5 -21.4068 295.367 -166.5 21.5635 295.367 -166.5 25.9998 291.232 -166.5 25.9998 291.232 -166.5 21.5635 294.017 -166.5 20.8824 295.367 -166.5 25.9998 295.367 -166.5 21.5635 296.852 -166.5 21.4063 301.016 -166.5 21.4063 303.635 -166.5 21.5635 303.635 -166.5 25.9998 303.635 -166.5 21.5635 301.016 -166.5 21.4063 301.016 -166.5 -2.47022 303.635 -166.5 14.3973 303.635 -166.5 21.5635 303.635 -166.5 14.3973 305.132 -166.5 21.4063 316.038 -166.5 21.5635 303.635 -166.5 21.5635 305.132 -166.5 21.4063 312.13 -166.5 21.4063 311.904 -166.5 0.06476 318.598 -166.5 0.06476 318.598 -166.5 21.5635 316.038 -166.5 21.5635 312.13 -166.5 21.4063 311.904 -166.5 20.0938 311.904 -166.5 20.0938 308.093 -166.5 -2.01018 310.278 -166.5 -2.96658 311.904 -166.5 0.06476 311.904 -166.5 0.06476 310.278 -166.5 -2.96658 311.634 -166.5 -4.32271 325.195 -166.5 14.3973 327.98 -166.5 12.7614 329.138 -166.5 17.0838 329.329 -166.5 21.5635 329.329 -166.5 25.9998 325.195 -166.5 25.9998 327.98 -166.5 12.7614 325.195 -166.5 14.3973 325.195 -166.5 -21.434 327.98 -166.5 -21.4068 337.598 -166.5 -21.434 334.978 -166.5 -21.4068 327.98 -166.5 -21.4068 325.195 -166.5 -21.434 334.978 -166.5 -8.64517 334.978 -166.5 -21.4068 337.598 -166.5 -21.434 339.094 -166.5 -21.4068 339.094 -166.5 -8.64517 350.001 -166.5 -21.434 346.093 -166.5 -21.4068 339.094 -166.5 -21.4068 337.598 -166.5 -21.434 346.093 -166.5 12.7614 346.093 -166.5 -21.4068 350.001 -166.5 -21.434 352.56 -166.5 -21.434 352.56 -166.5 14.3973 350.001 -166.5 14.3973 333.463 -166.5 21.5635 332.302 -166.5 20.2481 337.598 -166.5 21.5635 329.138 -166.5 17.0838 332.302 -166.5 20.2481 333.463 -166.5 21.5635 333.463 -166.5 25.9998 329.329 -166.5 25.9998 341.732 -166.5 21.5635 341.732 -166.5 25.9998 333.463 -166.5 25.9998 333.463 -166.5 21.5635 341.77 -166.5 20.2481 341.732 -166.5 21.5635 337.598 -166.5 21.5635 341.732 -166.5 21.5635 341.77 -166.5 20.2481 344.935 -166.5 17.0838 345.866 -166.5 21.5635 345.866 -166.5 25.9998 341.732 -166.5 25.9998 344.935 -166.5 17.0838 345.866 -166.5 14.3973 345.866 -166.5 21.5635 346.093 -166.5 12.7614 345.866 -166.5 14.3973 344.935 -166.5 17.0838 350.001 -166.5 14.3973 345.866 -166.5 14.3973 346.093 -166.5 12.7614 284.112 -166.5 -21.434 284.112 -166.5 -14.2677 277.654 -166.5 -14.2677 276.955 -166.5 -16.8784 277.418 -166.5 -21.434 273.283 -166.5 -21.434 277.418 -166.5 -21.434 276.955 -166.5 -16.8784 273.64 -166.5 -20.1934 273.64 -166.5 -20.1934 269.149 -166.5 -21.434 273.283 -166.5 -21.434 260.88 -166.5 21.5635 256.746 -166.5 21.5635 256.746 -166.5 -14.2677 260.055 -166.5 -12.3501 260.055 -166.5 -12.3501 256.746 -166.5 -14.2677 256.746 -166.5 -21.434 260.88 -166.5 -21.434 261.268 -166.5 -16.8784 260.88 -166.5 -21.434 265.015 -166.5 -21.434 264.583 -166.5 -20.1934 261.268 -166.5 -16.8784 269.149 -166.5 -21.434 264.583 -166.5 -20.1934 265.015 -166.5 -21.434 265.015 -166.5 21.5635 265.015 -166.5 25.9998 256.746 -166.5 25.9998 256.746 -166.5 21.5635 267.053 -166.5 21.4063 267.053 -166.5 -12.3505 267.329 -166.5 -13.3795 269.111 -166.5 -14.4085 270.141 -166.5 -14.1328 271.17 -166.5 -12.3505 271.17 -166.5 21.4063 269.149 -166.5 21.5635 265.015 -166.5 21.5635 267.053 -166.5 21.4063 269.149 -166.5 21.5635 269.149 -166.5 25.9998 265.015 -166.5 25.9998 281.552 -166.5 25.9998 269.149 -166.5 25.9998 269.149 -166.5 21.5635 271.17 -166.5 21.4063 278.168 -166.5 21.4063 281.552 -166.5 21.5635 281.552 -166.5 21.5635 278.168 -166.5 21.4063 278.168 -166.5 -12.3501 281.552 -166.5 -14.2677 278.168 -166.5 -12.3501 277.654 -166.5 -14.2677 281.552 -166.5 -14.2677 10.6324 93 -0.000244 10.6324 93 -0.000244 11.25 93.9955 -0.000244 11.25 93.9955 -0.000244 14.3579 87.8732 -25.7744 14.3579 87.8732 -25.7744 14.3579 87.8732 -25.7744 14.3579 87.8732 -25.7744 14.3579 87.8732 25.7739 14.3579 87.8732 25.7739 14.3579 87.8732 25.7739 29.3539 75.391 -51.3488 29.3539 75.391 -51.3488 29.3539 75.391 -51.3488 35.125 93.9955 -41.353 35.125 93.9955 -41.353 35.125 93.9955 -41.353 35.125 93.9955 41.3524 35.125 93.9955 41.3524 35.125 93.9955 41.3524 59 66.325 -64.9169 59 66.325 -64.9169 59 66.3252 64.9161 59 66.3252 64.9161 82.875 93.9955 -41.353 82.875 93.9955 -41.353 82.875 93.9955 41.3524 82.875 93.9955 41.3524 88.6461 75.3908 -51.3488 88.6461 75.3908 -51.3488 88.6461 75.3908 -51.3488 88.6461 75.3909 51.3483 88.6461 75.3909 51.3483 88.6461 75.3909 51.3483 94.7159 85.9207 -35.5897 94.7159 85.9207 -35.5897 94.7159 85.9208 35.5891 94.7159 85.9208 35.5891 94.7159 85.9208 35.5891 96.6128 92.9999 -0.000244 100.932 92.9182 -24.2095 100.932 92.9182 -24.2095 100.932 92.9182 -24.2095 100.932 92.9182 24.2089 100.932 92.9182 24.2089 100.932 92.9182 24.2089 17.6473 93.9955 -23.8752 17.6473 93.9955 23.8748 22.5187 85.9207 -35.5898 22.5188 85.9208 35.5894 29.354 75.3911 51.3481 29.354 75.3911 51.3481 59 93.9955 -47.7502 59 93.9955 47.7498 94.1779 83.9125 38.5946 94.1779 83.9125 38.5946 94.1779 83.9126 -38.5951 94.1779 83.9126 -38.5951 94.7159 85.9207 -35.5897 94.7159 85.9207 -35.5897 94.7159 85.9208 35.5891 95.0088 86.1213 -35.8922 95.0089 86.1214 35.8916 96.6128 92.9999 -0.000244 98.3372 93.9955 -2.98682 98.3372 93.9955 2.98645 100.353 93.9955 -23.8752 100.353 93.9955 23.8748 100.932 92.9182 -24.2095 100.932 92.9182 24.2089 101.42 93.9955 -19.8909 101.42 93.9955 -19.8909 101.42 93.9955 19.8906 101.42 93.9955 19.8906 100.353 97 -23.8752 82.875 97 -41.3529 59 97 -47.7502 35.125 97 -41.3529 17.6473 97 -23.8752 11.25 97 -0.000244 17.6473 97 23.8748 35.125 97 41.3524 59 97 47.7498 82.875 97 41.3524 100.353 97 23.8748 106.75 97 -0.000244 106.75 94 -0.000244 100.353 94 23.8748 82.875 94 41.3524 59 94 47.7498 35.125 94 41.3524 17.6473 94 23.8748 11.25 94 -0.000244 17.6473 94 -23.8752 35.125 94 -41.3529 59 94 -47.7502 82.875 94 -41.3529 100.353 94 -23.8752 106.75 97 -0.000244 106.75 94 -0.000244 100.353 94 -23.8752 100.353 97 -23.8752 100.353 97 -23.8752 100.353 94 -23.8752 82.875 94 -41.3529 82.875 97 -41.3529 82.875 97 -41.3529 82.875 94 -41.3529 59 94 -47.7502 59 97 -47.7502 59 97 -47.7502 59 94 -47.7502 35.125 94 -41.3529 35.125 97 -41.3529 35.125 97 -41.3529 35.125 94 -41.3529 17.6473 94 -23.8752 17.6473 97 -23.8752 17.6473 97 -23.8752 17.6473 94 -23.8752 11.25 94 -0.000244 11.25 97 -0.000244 11.25 97 -0.000244 11.25 94 -0.000244 17.6473 94 23.8748 17.6473 97 23.8748 17.6473 97 23.8748 17.6473 94 23.8748 35.125 94 41.3524 35.125 97 41.3524 35.125 97 41.3524 35.125 94 41.3524 59 94 47.7498 59 97 47.7498 59 97 47.7498 59 94 47.7498 82.875 94 41.3524 82.875 97 41.3524 82.875 97 41.3524 82.875 94 41.3524 100.353 94 23.8748 100.353 97 23.8748 100.353 97 23.8748 100.353 94 23.8748 106.75 94 -0.000244 106.75 97 -0.000244 172.153 -64.3467 -82.0002 152.427 -34.8242 -82.0002 149.509 -26.9643 -82.0002 179.864 -69.4986 -82.0002 179.864 -69.4986 81.9998 172.153 -64.3467 81.9998 172.153 -64.3467 -82.0002 179.864 -69.4986 -82.0002 180.614 -70 -81.46 180.614 -70 81.4595 225.945 -70 -19.0674 196.5 -19 -9.50024 196.5 -19 9.49976 225.945 -70 19.0669 225.945 -70 -19.0674 225.945 -70 19.0669 180.614 -70 81.4595 180.614 -70 -81.46 225.945 -70 -19.0674 180.614 -70 -81.46 179.864 -69.4986 -82.0002 149.509 -26.9643 -82.0002 146.553 -19 -78.2465 196.5 -19 -9.50024 149.509 -26.9643 81.9998 146.553 -19 78.246 146.553 -19 -78.2465 149.509 -26.9643 -82.0002 152.427 -34.8242 -82.0002 152.427 -34.8242 81.9998 152.427 -34.8242 81.9998 152.427 -34.8242 -82.0002 172.153 -64.3467 -82.0002 172.153 -64.3467 81.9998 152.427 -34.8242 81.9998 172.153 -64.3467 81.9998 179.864 -69.4986 81.9998 149.509 -26.9643 81.9998 149.509 -26.9643 81.9998 179.864 -69.4986 81.9998 180.614 -70 81.4595 225.945 -70 19.0669 196.5 -19 9.49976 146.553 -19 78.246 146.553 -19 78.246 196.5 -19 9.49976 196.5 -19 -9.50024 146.553 -19 -78.2465 147.396 0 -80.1135 148.799 -7.3473 -78.1823 152.473 -11.8882 -73.1259 157.013 -11.8882 -66.8759 160.687 -7.34731 -61.8195 162.09 0 -59.8881 160.687 7.34732 -61.8195 157.014 11.8882 -66.8759 152.473 11.8882 -73.1259 148.799 7.34733 -78.1823 162.552 7.34733 -88.1746 166.226 11.8882 -83.1182 170.767 11.8882 -76.8682 174.44 7.34732 -71.8118 175.844 0 -69.8805 174.44 -7.34731 -71.8118 170.767 -11.8882 -76.8682 166.226 -11.8882 -83.1182 162.552 -7.3473 -88.1746 161.149 0 -90.106 148.799 -7.3473 -78.1823 162.552 -7.3473 -88.1746 166.226 -11.8882 -83.1182 152.473 -11.8882 -73.1259 152.473 -11.8882 -73.1259 166.226 -11.8882 -83.1182 170.767 -11.8882 -76.8682 157.013 -11.8882 -66.8759 157.013 -11.8882 -66.8759 170.767 -11.8882 -76.8682 174.44 -7.34731 -71.8118 160.687 -7.34731 -61.8195 160.687 -7.34731 -61.8195 174.44 -7.34731 -71.8118 175.844 0 -69.8805 162.09 0 -59.8881 162.09 0 -59.8881 175.844 0 -69.8805 174.44 7.34732 -71.8118 160.687 7.34732 -61.8195 160.687 7.34732 -61.8195 174.44 7.34732 -71.8118 170.767 11.8882 -76.8682 157.014 11.8882 -66.8759 157.014 11.8882 -66.8759 170.767 11.8882 -76.8682 166.226 11.8882 -83.1182 152.473 11.8882 -73.1259 152.473 11.8882 -73.1259 166.226 11.8882 -83.1182 162.552 7.34733 -88.1746 148.799 7.34733 -78.1823 148.799 7.34733 -78.1823 162.552 7.34733 -88.1746 161.149 0 -90.106 147.396 0 -80.1135 147.396 0 -80.1135 161.149 0 -90.106 162.552 -7.3473 -88.1746 148.799 -7.3473 -78.1823 148.799 7.34732 78.1816 152.473 11.8882 73.1254 157.014 11.8882 66.8754 160.687 7.34732 61.819 162.09 0 59.8876 160.687 -7.34732 61.819 157.014 -11.8882 66.8754 152.473 -11.8882 73.1254 148.799 -7.34732 78.1816 147.396 0 80.113 161.149 0 90.1053 162.552 -7.34732 88.1741 166.226 -11.8882 83.1177 170.767 -11.8882 76.8677 174.44 -7.34732 71.8113 175.844 0 69.88 174.44 7.34732 71.8113 170.767 11.8882 76.8677 166.226 11.8882 83.1177 162.552 7.34732 88.1741 147.396 0 80.113 161.149 0 90.1053 162.552 7.34732 88.1741 148.799 7.34732 78.1816 148.799 7.34732 78.1816 162.552 7.34732 88.1741 166.226 11.8882 83.1177 152.473 11.8882 73.1254 152.473 11.8882 73.1254 166.226 11.8882 83.1177 170.767 11.8882 76.8677 157.014 11.8882 66.8754 157.014 11.8882 66.8754 170.767 11.8882 76.8677 174.44 7.34732 71.8113 160.687 7.34732 61.819 160.687 7.34732 61.819 174.44 7.34732 71.8113 175.844 0 69.88 162.09 0 59.8876 162.09 0 59.8876 175.844 0 69.88 174.44 -7.34732 71.8113 160.687 -7.34732 61.819 160.687 -7.34732 61.819 174.44 -7.34732 71.8113 170.767 -11.8882 76.8677 157.014 -11.8882 66.8754 157.014 -11.8882 66.8754 170.767 -11.8882 76.8677 166.226 -11.8882 83.1177 152.473 -11.8882 73.1254 152.473 -11.8882 73.1254 166.226 -11.8882 83.1177 162.552 -7.34732 88.1741 148.799 -7.34732 78.1816 148.799 -7.34732 78.1816 162.552 -7.34732 88.1741 161.149 0 90.1053 147.396 0 80.113 402.182 147 -31.7629 384.19 147 -58.6901 357.263 147 -76.6823 325.5 147 -83.0002 293.737 147 -76.6823 266.81 147 -58.6901 248.818 147 -31.7629 242.5 147 -0.000244 248.818 147 31.7625 266.81 147 58.6896 293.737 147 76.6818 325.5 147 82.9998 357.263 147 76.6818 384.19 147 58.6896 402.182 147 31.7625 408.5 147 -0.000244 408.5 144 -0.000244 402.182 144 31.7625 384.19 144 58.6896 357.263 144 76.6818 325.5 144 82.9998 293.737 144 76.6818 266.81 144 58.6896 248.818 144 31.7625 242.5 144 -0.000244 248.818 144 -31.7629 266.81 144 -58.6901 293.737 144 -76.6823 325.5 144 -83.0002 357.263 144 -76.6823 384.19 144 -58.6901 402.182 144 -31.7629 408.5 147 -0.000244 408.5 144 -0.000244 402.182 144 -31.7629 402.182 147 -31.7629 402.182 147 -31.7629 402.182 144 -31.7629 384.19 144 -58.6901 384.19 147 -58.6901 384.19 147 -58.6901 384.19 144 -58.6901 357.263 144 -76.6823 357.263 147 -76.6823 357.263 147 -76.6823 357.263 144 -76.6823 325.5 144 -83.0002 325.5 147 -83.0002 325.5 147 -83.0002 325.5 144 -83.0002 293.737 144 -76.6823 293.737 147 -76.6823 293.737 147 -76.6823 293.737 144 -76.6823 266.81 144 -58.6901 266.81 147 -58.6901 266.81 147 -58.6901 266.81 144 -58.6901 248.818 144 -31.7629 248.818 147 -31.7629 248.818 147 -31.7629 248.818 144 -31.7629 242.5 144 -0.000244 242.5 147 -0.000244 242.5 147 -0.000244 242.5 144 -0.000244 248.818 144 31.7625 248.818 147 31.7625 248.818 147 31.7625 248.818 144 31.7625 266.81 144 58.6896 266.81 147 58.6896 266.81 147 58.6896 266.81 144 58.6896 293.737 144 76.6818 293.737 147 76.6818 293.737 147 76.6818 293.737 144 76.6818 325.5 144 82.9998 325.5 147 82.9998 325.5 147 82.9998 325.5 144 82.9998 357.263 144 76.6818 357.263 147 76.6818 357.263 147 76.6818 357.263 144 76.6818 384.19 144 58.6896 384.19 147 58.6896 384.19 147 58.6896 384.19 144 58.6896 402.182 144 31.7625 402.182 147 31.7625 402.182 147 31.7625 402.182 144 31.7625 408.5 144 -0.000244 408.5 147 -0.000244 30.859 -148.516 61.9996 30.859 -120 61.9996 25.5 -120 41.9996 25.5 -148 41.9996 25.5 -148 41.9996 25.5 -120 41.9996 25.5 -120 -42.0004 25.5 -148 -42.0004 25.5 -148 -42.0004 25.5 -120 -42.0004 30.859 -120 -62.0004 30.859 -148.516 -62.0004 37.3344 -120 68.4751 212.437 -120 45.3362 212.437 -120 -45.3368 37.3344 -120 -68.4757 30.859 -120 -62.0004 25.5 -120 -42.0004 25.5 -120 41.9996 30.859 -120 61.9996 37.3344 -149.14 68.4751 37.3344 -120 68.4751 30.859 -120 61.9996 30.859 -148.516 61.9996 37.3344 -120 68.4751 37.3344 -149.14 68.4751 212.437 -166 45.3362 212.437 -120 45.3362 212.437 -120 45.3362 212.437 -166 45.3362 212.437 -166 -45.3368 212.437 -120 -45.3368 212.437 -120 -45.3368 212.437 -166 -45.3368 37.3344 -149.14 -68.4757 37.3344 -120 -68.4757 30.859 -148.516 -62.0004 37.3344 -149.14 -68.4757 212.437 -166 -45.3368 212.437 -166 45.3362 37.3344 -149.14 68.4751 30.859 -148.516 61.9996 25.5 -148 41.9996 25.5 -148 -42.0004 37.3344 -149.14 -68.4757 30.859 -148.516 -62.0004 30.859 -120 -62.0004 37.3344 -120 -68.4757 37.3344 -149.14 68.4751 37.3344 -149.14 68.4751 37.3344 -149.14 68.4751 37.3344 -149.14 -68.4757 37.3344 -149.14 -68.4757 37.3344 -149.14 -68.4757 45.5 -142.96 76.6407 45.5 -142.96 76.6407 45.5 -142.959 -76.6414 45.5 -142.959 -76.6414 45.5 -120 -76.6414 45.5 -120 -76.6414 45.5 -120 76.6407 45.5 -120 76.6407 65.5 -138.856 81.9996 65.5 -138.856 81.9996 65.5 -138.855 -82.0002 65.5 -138.855 -82.0002 212.437 -166 -45.3368 212.437 -166 -45.3368 212.437 -166 45.3362 212.437 -166 45.3362 325.498 -166 44.8429 325.498 -166 44.8429 325.498 -166 -44.8434 325.498 -166 -44.8434 325.5 -138 -82.0002 325.5 -138 -82.0002 325.5 -138 81.9998 325.5 -138 81.9998 342.661 -166 -41.4296 342.661 -166 -41.4296 342.661 -166 41.4291 342.661 -166 41.4291 356.88 -138 75.7579 356.88 -138 75.7579 356.88 -138 -75.7583 356.88 -138 -75.7583 356.88 -120 -75.7583 356.88 -120 -75.7583 357.209 -166 -31.7089 357.209 -166 -31.7089 357.209 -166 31.7084 357.209 -166 31.7084 357.209 -120 -31.7089 357.209 -120 -31.7089 366.929 -166 -17.1608 366.929 -166 -17.1608 366.929 -166 17.1603 366.929 -166 17.1603 370.343 -166 -0.000244 370.343 -166 -0.000244 383.483 -138 -57.9829 383.483 -138 -57.9829 383.483 -138 57.9825 383.483 -138 57.9825 401.258 -138 31.3799 401.258 -138 31.3799 401.258 -120 31.3799 401.258 -120 31.3799 401.258 -138 -31.3802 401.258 -138 -31.3802 407.5 -138 -0.000244 407.5 -138 -0.000244 37.3344 -120 -68.4757 37.3344 -120 -68.4757 37.3344 -120 68.4751 37.3344 -120 68.4751 65.5 -120 -82.0004 65.5 -120 81.9996 212.437 -120 -45.3368 212.437 -120 45.3362 325.498 -120 44.8429 325.498 -120 -44.8434 325.5 -120 -82.0002 325.5 -120 81.9998 342.661 -120 -41.4296 342.661 -120 41.4291 356.88 -120 75.7579 357.209 -120 31.7084 366.929 -120 -17.1608 366.929 -120 17.1603 370.343 -120 -0.000244 383.483 -120 -57.983 383.483 -120 57.9825 401.258 -120 -31.3802 407.5 -120 -0.000244 180.612 -120 -82.0002 180.612 -120 -82.0002 180.612 -70 -82.0002 180.612 -70 -82.0002 201.675 -84.0743 -82.0002 207.505 -120 -55.6136 207.505 -120 -55.6136 207.505 -70 -55.6136 207.505 -70 -55.6136 236.5 -120 -45.6238 236.5 -120 -45.6238 236.5 -91.0013 -82.0002 236.5 -70 -45.6238 236.5 -70 -45.6238 265.495 -120 -55.6136 265.495 -120 -55.6136 265.495 -70 -55.6136 265.495 -70 -55.6136 271.325 -84.0743 -82.0002 292.388 -120 -82.0002 292.388 -120 -82.0002 292.388 -70 -82.0002 292.388 -70 -82.0002 342.661 -166 -41.4296 357.208 -166 -31.7089 366.929 -166 -17.1608 370.343 -166 -0.000244 366.929 -166 17.1603 357.209 -166 31.7084 342.661 -166 41.4291 325.498 -166 44.8429 212.437 -166 45.3363 212.437 -166 -45.3368 325.498 -166 -44.8434 212.437 -120 45.3362 325.498 -120 44.8429 342.661 -120 41.429 357.209 -120 31.7084 366.929 -120 17.1603 370.343 -120 -0.000244 366.929 -120 -17.1608 357.208 -120 -31.7089 342.661 -120 -41.4296 325.498 -120 -44.8434 212.437 -120 -45.3368 325.498 -166 -44.8434 325.498 -120 -44.8434 342.661 -120 -41.4296 342.661 -166 -41.4296 342.661 -166 -41.4296 342.661 -120 -41.4296 357.208 -120 -31.7089 357.208 -166 -31.7089 357.208 -166 -31.7089 357.208 -120 -31.7089 366.929 -120 -17.1608 366.929 -166 -17.1608 366.929 -166 -17.1608 366.929 -120 -17.1608 370.343 -120 -0.000244 370.343 -166 -0.000244 370.343 -166 -0.000244 370.343 -120 -0.000244 366.929 -120 17.1603 366.929 -166 17.1603 366.929 -166 17.1603 366.929 -120 17.1603 357.209 -120 31.7084 357.209 -166 31.7084 357.209 -166 31.7084 357.209 -120 31.7084 342.661 -120 41.429 342.661 -166 41.4291 342.661 -166 41.4291 342.661 -120 41.429 325.498 -120 44.8429 325.498 -166 44.8429 325.498 -166 44.8429 325.498 -120 44.8429 212.437 -120 45.3362 212.437 -166 45.3363 212.437 -166 45.3363 212.437 -120 45.3362 212.437 -120 -45.3368 212.437 -166 -45.3368 212.437 -166 -45.3368 212.437 -120 -45.3368 325.498 -120 -44.8434 325.498 -166 -44.8434 25.5 0 -42.0002 25.5 0 -42.0002 25.5 0 41.9998 25.5 0 41.9998 30.859 0 -62.0002 30.859 0 -62.0002 30.859 0 61.9998 30.859 0 61.9998 45.5 0 -76.6412 45.5 0 -76.6412 45.5 0 76.6407 45.5 0 76.6407 356.88 -120 -75.7584 356.88 -120 -75.7584 45.5 -120 -76.6414 45.5 -120 -76.6414 45.5 -120 -76.6414 45.5 -120 76.6407 45.5 -120 76.6407 45.5 -120 76.6407 139.5 0 -82.0002 139.5 0 -82.0002 139.5 0 -82.0002 139.5 0 81.9998 139.5 0 81.9998 139.5 0 81.9998 180.612 -120 -82.0002 180.612 -120 -82.0002 180.612 -120 -82.0002 180.612 -120 -82.0002 180.612 -70 81.9998 180.612 -70 81.9998 180.612 -70 81.9998 180.612 -70 81.9998 236.5 -120 -45.6238 236.5 -120 -45.6238 236.5 -120 45.6233 236.5 -120 45.6233 236.5 -70 -45.6238 236.5 -70 -45.6238 236.5 -70 45.6233 236.5 -70 45.6233 356.88 -120 -75.7584 356.88 -120 75.7578 356.88 -120 75.7578 356.88 -70 -75.7584 356.88 -70 -75.7584 356.88 -70 75.7578 356.88 -70 75.7578 401.258 -120 31.3798 401.258 -120 31.3798 401.258 -70 -31.3802 401.258 -70 -31.3802 25.5 -120 -42.0002 25.5 -120 41.9998 30.859 -120 -62.0002 30.859 -120 61.9998 65.5 -120 -82.0002 65.5 -120 81.9998 65.5 0 -82.0002 65.5 0 -82.0002 65.5 0 81.9998 65.5 0 81.9998 152.427 -34.8242 -82.0002 152.427 -34.8242 81.9998 172.153 -64.3467 81.9998 172.153 -64.3467 -82.0002 180.612 -120 81.9998 180.612 -70 -82.0002 180.612 -70 -82.0002 207.505 -120 -55.6136 207.505 -120 55.6132 207.505 -70 -55.6136 207.505 -70 55.6132 265.495 -120 -55.6136 265.495 -120 55.6132 265.495 -70 -55.6136 265.495 -70 55.6132 292.388 -120 -82.0002 292.388 -120 81.9998 292.388 -70 -82.0002 292.388 -70 81.9998 325.5 -120 -82.0002 325.5 -120 81.9998 325.5 -70 -82.0002 325.5 -70 81.9998 383.483 -120 -57.983 383.483 -120 57.9824 383.483 -70 -57.983 383.483 -70 57.9824 401.258 -120 -31.3802 401.258 -70 31.3798 407.5 -120 -0.000244 407.5 -70 -0.000244 12.2246 -49.4778 76.6407 12.2246 -49.4778 76.6407 12.2246 -49.4778 76.6407 15.6788 -82.9739 39.9998 15.6788 -82.9739 39.9998 25.5 -97 39.9998 25.5 -97 39.9998 25.5 -97 39.9998 30.859 -97 61.9998 30.859 -97 61.9998 30.859 -97 61.9998 30.859 -68.2739 61.9998 30.859 -68.2739 61.9998 30.859 -68.2739 61.9998 45.5 -49.4777 76.6409 45.5 -49.4777 76.6409 65.5 -97 81.9998 65.5 -97 81.9998 10.7448 -68.2739 61.9998 14.743 -81.6375 41.9999 15.6788 -82.9739 39.9998 25.5 -97 41.9999 25.5 -97 41.9999 25.5 -97 39.9998 25.5 -82.9739 39.9998 25.5 -82.9739 39.9998 25.5 -81.6374 41.9999 26.6088 -41.4575 81.9998 45.5 -97 76.6407 45.5 -97 76.6407 45.5 -49.4777 76.6409 65.5 -41.4574 81.9999 65.5 -41.4574 81.9999 12.7462 -65.7608 65.7609 34.62 -65.7608 65.7609 180.612 -120 81.9998 180.612 -120 81.9998 180.612 -70 81.9998 180.612 -70 81.9998 201.675 -84.0743 81.9998 207.505 -120 55.6132 207.505 -120 55.6132 207.505 -70 55.6132 207.505 -70 55.6132 236.5 -120 45.6233 236.5 -120 45.6233 236.5 -91.0013 81.9998 236.5 -70 45.6233 236.5 -70 45.6233 265.495 -120 55.6132 265.495 -120 55.6132 265.495 -70 55.6132 265.495 -70 55.6132 271.325 -84.0743 81.9998 292.388 -120 81.9998 292.388 -120 81.9998 292.388 -70 81.9998 292.388 -70 81.9998 2 -97 -40.0002 2 -97 -40.0002 2 -97 -40.0002 2 -97 39.9998 2 -97 39.9998 2 -97 39.9998 2 -82.9739 39.9998 2 -82.9739 39.9998 2 -82.9739 39.9998 2 -82.9738 -40.0002 2 -82.9738 -40.0002 2 -82.9738 -40.0002 25.5 -97 -40.0002 25.5 -97 -40.0002 25.5 -97 -40.0002 25.5 -97 39.9998 25.5 -97 39.9998 25.5 -97 39.9998 25.5 -82.9739 39.9998 25.5 -82.9739 39.9998 25.5 -82.9739 39.9998 25.5 -82.9738 -40.0002 25.5 -82.9738 -40.0002 25.5 -82.9738 -40.0002 2 -93 -0.000244 2 -85.9208 -35.5897 2 -85.9208 35.5894 25.5 -93 -0.000244 25.5 -85.9208 -35.5897 25.5 -85.9208 35.5894 10.7448 -68.2739 -62.0002 10.7448 -68.2739 -62.0002 10.7448 -68.2739 -62.0002 10.7448 -68.2739 -62.0002 12.2246 -49.4778 -76.6412 12.2246 -49.4778 -76.6412 12.2246 -49.4778 -76.6412 25.5 -97 -40.0002 25.5 -97 -40.0002 25.5 -82.9739 -40.0002 25.5 -82.9739 -40.0002 25.5 -82.9739 -40.0002 45.5 -97 -76.6412 45.5 -97 -76.6412 45.5 -97 -76.6412 45.5 -97 -76.6412 45.5 -49.4777 -76.6414 45.5 -49.4777 -76.6414 45.5 -49.4777 -76.6414 45.5 -49.4777 -76.6414 65.5 -96.9999 -82.0002 65.5 -96.9999 -82.0002 14.743 -81.6375 -42.0004 15.6788 -82.9739 -40.0002 15.6788 -82.9739 -40.0002 25.5 -97 -42.0004 25.5 -97 -42.0004 25.5 -97 -40.0002 25.5 -81.6375 -42.0004 26.6088 -41.4575 -82.0002 30.859 -97 -62.0002 30.859 -97 -62.0002 30.859 -68.2739 -62.0002 65.5 -41.4574 -82.0004 65.5 -41.4574 -82.0004 12.7462 -65.7609 -65.7614 34.62 -65.7609 -65.7614 376.313 155 -21.0479 364.391 155 -38.8911 346.548 155 -50.8136 325.5 155 -55.0002 304.452 155 -50.8136 286.609 155 -38.8911 274.687 155 -21.0479 270.5 155 -0.000244 274.687 155 21.0474 286.609 155 38.8906 304.452 155 50.8131 325.5 155 54.9998 346.548 155 50.8131 364.391 155 38.8906 376.313 155 21.0474 380.5 155 -0.000244 376.313 147 21.0474 364.391 147 38.8906 346.548 147 50.8131 325.5 147 54.9998 304.452 147 50.8131 286.609 147 38.8906 274.687 147 21.0474 270.5 147 -0.000244 274.687 147 -21.0479 286.609 147 -38.8911 304.452 147 -50.8136 325.5 147 -55.0002 346.548 147 -50.8136 364.391 147 -38.8911 376.313 147 -21.0479 380.5 147 -0.000244 380.5 155 -0.000244 380.5 147 -0.000244 376.313 147 -21.0479 376.313 155 -21.0479 376.313 155 -21.0479 376.313 147 -21.0479 364.391 147 -38.8911 364.391 155 -38.8911 364.391 155 -38.8911 364.391 147 -38.8911 346.548 147 -50.8136 346.548 155 -50.8136 346.548 155 -50.8136 346.548 147 -50.8136 325.5 147 -55.0002 325.5 155 -55.0002 325.5 155 -55.0002 325.5 147 -55.0002 304.452 147 -50.8136 304.452 155 -50.8136 304.452 155 -50.8136 304.452 147 -50.8136 286.609 147 -38.8911 286.609 155 -38.8911 286.609 155 -38.8911 286.609 147 -38.8911 274.687 147 -21.0479 274.687 155 -21.0479 274.687 155 -21.0479 274.687 147 -21.0479 270.5 147 -0.000244 270.5 155 -0.000244 270.5 155 -0.000244 270.5 147 -0.000244 274.687 147 21.0474 274.687 155 21.0474 274.687 155 21.0474 274.687 147 21.0474 286.609 147 38.8906 286.609 155 38.8906 286.609 155 38.8906 286.609 147 38.8906 304.452 147 50.8131 304.452 155 50.8131 304.452 155 50.8131 304.452 147 50.8131 325.5 147 54.9998 325.5 155 54.9998 325.5 155 54.9998 325.5 147 54.9998 346.548 147 50.8131 346.548 155 50.8131 346.548 155 50.8131 346.548 147 50.8131 364.391 147 38.8906 364.391 155 38.8906 364.391 155 38.8906 364.391 147 38.8906 376.313 147 21.0474 376.313 155 21.0474 376.313 155 21.0474 376.313 147 21.0474 380.5 147 -0.000244 380.5 155 -0.000244 71.6935 -0.000153 92.9998 71.6935 -0.000153 92.9998 71.6935 -0.000153 92.9998 71.6935 -0.000137 -93.0002 71.6935 -0.000137 -93.0002 71.6935 -0.000137 -93.0002 81.2297 35.5894 -85.9211 81.2297 35.5894 -85.9211 81.2297 35.5894 -85.9211 81.2297 35.5895 85.9205 81.2297 35.5895 85.9205 81.2297 35.5895 85.9205 89.3141 65.7608 65.7606 89.3141 65.7608 -65.7611 94.7158 85.9206 -35.5897 94.7158 85.9207 35.5891 96.6128 92.9999 -0.000244 96.6128 92.9999 -0.000244 98.345 93.9999 -3.00024 98.345 93.9999 2.99976 98.345 93.9999 2.99976 101.423 93.9999 19.8787 101.423 93.9999 19.8787 101.423 93.9999 -19.879 101.423 93.9999 -19.879 103.536 96.9973 11.9923 103.537 96.9974 -11.9926 106.75 93.9999 -0.000244 106.75 93.9999 -0.000244 106.75 98.8526 -0.000244 139.5 -0.000153 92.9998 139.5 -0.000153 92.9998 139.5 -0.000137 -93.0002 139.5 -0.000137 -93.0002 149.091 48.218 92.9998 149.091 48.218 -93.0002 150.306 124 92.9998 150.306 124 92.9998 150.306 124 92.9998 150.306 124 -93.0002 150.306 124 -93.0002 150.306 124 -93.0002 176.404 89.0953 92.9998 176.404 89.0953 -93.0002 205.5 108.536 -0.000244 205.5 123 -0.000244 214.634 114.64 45.9218 214.634 114.64 -45.9222 214.634 123 -45.9222 214.634 123 45.9218 240.647 121.056 84.8525 240.647 121.056 -84.853 240.647 123 -84.853 240.647 123 84.8525 242.5 144 -0.000244 242.5 144 -0.000244 242.5 155 -0.000244 248.818 144 -31.7629 248.818 144 -31.7629 248.818 144 31.7625 248.818 144 31.7625 248.818 155 -31.7629 248.818 155 31.7625 250.418 123 -91.3817 250.418 123 91.3813 266.81 144 -58.6902 266.81 144 -58.6902 266.81 144 58.6896 266.81 144 58.6896 266.81 155 -58.6902 266.81 155 58.6896 293.737 144 -76.6823 293.737 144 -76.6823 293.737 144 76.6818 293.737 144 76.6818 293.737 155 76.6818 293.737 155 -76.6823 306.84 155 92.9998 306.84 155 79.2881 306.84 155 79.2881 306.84 155 -93.0002 306.84 155 -79.2886 306.84 155 -79.2886 325.5 123 92.9998 325.5 123 -93.0002 325.5 144 -83.0002 325.5 144 -83.0002 325.5 144 82.9998 325.5 144 82.9998 325.5 150 92.9998 325.5 150 92.9998 325.5 150 -93.0002 325.5 150 -93.0002 325.5 150 -83.0002 325.5 150 -83.0002 325.5 150 82.9998 325.5 150 82.9998 357.263 144 -76.6823 357.263 144 -76.6823 357.263 144 76.6818 357.263 144 76.6818 357.263 150 -76.6823 357.263 150 76.6818 361.089 123 85.9205 361.089 123 -85.9211 361.089 150 -85.9211 361.089 150 85.9205 384.19 144 -58.6902 384.19 144 -58.6902 384.19 144 58.6896 384.19 144 58.6896 384.19 150 -58.6902 384.19 150 58.6896 391.261 123 65.7606 391.261 123 -65.7612 391.261 150 -65.7612 391.261 150 65.7606 402.182 144 -31.7629 402.182 144 -31.7629 402.182 144 31.7625 402.182 144 31.7625 402.182 150 -31.7629 402.182 150 31.7625 408.5 144 -0.000244 408.5 144 -0.000244 408.5 150 -0.000244 411.421 123 -35.5898 411.421 123 35.5894 411.421 150 -35.5898 411.421 150 35.5894 418.5 150 -0.000244 418.5 123 -0.000244 204 155 92.9998 204 155 -93.0002 217.282 116.409 49.8838 217.282 116.409 92.9998 217.282 116.409 -93.0002 217.282 116.409 -49.8844 250.418 123 92.9998 250.418 123 -93.0002 146.553 -19 -78.2465 146.553 -19 78.246 139.5 0 87.9535 139.5 0 -87.954 176.404 89.0955 37.1588 149.091 48.2181 74.7523 139.5 0 87.9535 146.553 -19 78.246 196.5 -19 9.49976 196.5 102.523 9.49976 196.5 102.523 9.49976 196.5 -19 9.49976 196.5 -19 -9.50024 196.5 102.523 -9.50024 196.5 102.523 9.49976 196.5 102.523 -9.50024 176.404 89.0955 -37.1593 176.404 89.0955 37.1588 176.404 89.0955 37.1588 176.404 89.0955 -37.1593 149.091 48.2181 -74.7529 149.091 48.2181 74.7523 149.091 48.2181 74.7523 149.091 48.2181 -74.7529 139.5 0 -87.954 139.5 0 87.9535 139.5 0 -87.954 149.091 48.2181 -74.7529 176.404 89.0955 -37.1593 196.5 102.523 -9.50024 196.5 -19 -9.50024 146.553 -19 -78.2465 146.553 -19 -78.2465 196.5 -19 -9.50024 196.5 -19 9.49976 146.553 -19 78.246 0 0.000144 92.9999 0 0.000144 92.9999 65.5 0 -82.0002 65.5 0 -82.0002 71.6936 0 -93.0002 71.6936 0 -93.0002 71.6936 0 -82.0002 71.6936 0 -82.0002 139.5 0 -82.0002 139.5 0 -82.0002 0 -93 -0.000244 0 -93 -0.000244 0 -85.9208 -35.5897 0 -85.9208 -35.5897 0 -85.9208 35.5894 0 -85.9208 35.5894 0 -65.761 -65.761 0 -65.7608 65.7609 0 -35.5897 -85.9209 0 -35.5894 85.9207 0 -0.000101 -93.0001 0 -0.000101 -93.0001 0 0.000144 92.9999 0 0.000144 92.9999 0 35.5895 -85.921 0 35.5895 -85.921 0 35.5897 85.9207 0 35.5897 85.9207 0 65.7609 -65.7611 0 65.7609 -65.7611 0 65.7611 65.7606 0 65.7611 65.7606 0 85.9208 -35.5898 0 85.9208 -35.5898 0 85.9209 35.5892 0 85.9209 35.5892 0 93 -0.000244 0 93 -0.000244 25.5 -93 -0.000244 25.5 -93 -0.000244 25.5 -85.9208 -35.5897 25.5 -85.9208 -35.5897 25.5 -85.9208 35.5894 25.5 -85.9208 35.5894 25.5 -81.6375 -42.0002 25.5 -81.6374 41.9999 25.5 0 -42.0002 25.5 0 -42.0002 25.5 0 41.9998 25.5 0 41.9998 30.859 -68.2739 -62.0002 30.859 -68.2739 61.9998 30.859 0 -62.0002 30.859 0 -62.0002 30.859 0 61.9998 30.859 0 61.9998 34.6198 -65.761 -65.7611 34.62 -65.7609 65.7609 45.5 -49.4777 76.6409 45.5 -49.4777 -76.6412 45.5 0 -76.6412 45.5 0 -76.6412 45.5 0 76.6407 45.5 0 76.6407 65.5 -41.4575 -82.0001 65.5 -41.4574 81.9998 65.5 0 81.9998 65.5 0 81.9998 71.6936 0 -93.0002 71.6936 0 81.9998 71.6936 0 81.9998 71.6936 0 92.9998 71.6936 0 92.9998 71.6936 0 92.9998 81.2297 35.5894 -85.921 81.2297 35.5894 -85.921 81.2299 35.5897 85.9205 81.2299 35.5897 85.9205 89.3142 65.7608 -65.7612 89.3142 65.7608 -65.7612 89.3142 65.761 65.7606 89.3142 65.761 65.7606 94.7159 85.9207 -35.5898 94.7159 85.9207 -35.5898 94.7161 85.9208 35.5892 94.7161 85.9208 35.5892 96.6128 93 -0.000244 96.6128 93 -0.000244 139.5 -0.000133 -93.0002 139.5 -0.000133 -93.0002 139.5 0 -82.0002 139.5 0 81.9998 139.5 0 81.9998 139.5 0 92.9998 139.5 0 92.9998 152.427 -34.8243 -86.0732 152.427 -34.8243 -82.0002 152.427 -34.8242 81.9998 152.427 -34.8242 86.0729 152.938 -35.5898 -85.921 152.938 -35.5895 85.9207 156.859 -41.4576 -82.0002 156.859 -41.4574 81.9998 - - - - - - - - - - 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.849775 0.527146 0 0 -1 0 -0.849775 0.527146 0 0 1 0 -0.735927 0.527177 -0.424848 -0.695983 0.525651 -0.489181 0 -0.980788 0.195074 0 1 0 -0.735927 0.527177 0.424848 0 -0.980788 -0.195074 0 1 0 -0.695983 0.525651 -0.489181 -0.424848 0.527177 -0.735927 0 -0.831477 0.555559 -0.695983 0.525651 -0.489181 -0.424848 0.527177 -0.735927 0 1 0 -0.606525 0.514023 0.606554 -0.424848 0.527177 0.735927 0 1 0 0 -0.831477 0.555559 0 0.527177 -0.849756 0 -0.831477 -0.555559 0 0.527177 0.849756 0 1 0 0.489181 0.525651 -0.695983 0 1 0 0.489181 0.525651 0.695983 0 -0.831477 0.555559 0.424848 0.527177 -0.735927 0.489181 0.525651 -0.695983 0 -0.831477 -0.555559 0.424848 0.527177 0.735927 0.489181 0.525651 0.695983 0 -0.923884 0.382672 0.687735 -0.696804 0.203681 0 -0.923884 -0.382672 0.229713 -0.922196 -0.311106 0.687643 -0.696876 -0.203742 0.379223 -0.925305 0 0 1 0 0.489181 0.525651 -0.695983 0.640553 -0.75898 0.116794 0 1 0 0.489181 0.525651 0.695983 0.640522 -0.759001 -0.116825 -0.695983 0.525651 -0.489181 -0.695983 0.525651 0.489181 0 -0.923884 0.382672 0 -0.923884 -0.382672 -0.424848 0.527177 0.735927 0 -0.831477 -0.555559 0 0.527177 -0.849756 0 0.527177 0.849756 0 -0.831477 -0.555559 0.725441 -0.625202 -0.287851 0 -0.831477 0.555559 0.725556 -0.625111 0.287759 0.229743 -0.922188 0.311106 0.48854 -0.845777 0.214454 0.488479 -0.845804 -0.214484 0.687735 -0.696804 0.203681 0.687643 -0.696876 -0.203742 0.379223 -0.925305 0 0.573504 -0.817096 0.0587176 0.573473 -0.817115 -0.0587481 0.735905 0.527207 -0.424848 0.73591 0.527177 0.424879 0.735905 0.527207 -0.424848 0.73591 0.527177 0.424879 0.640553 -0.75898 0.116794 0.828534 0.514054 -0.221992 0.640522 -0.759001 -0.116825 0.828534 0.514054 0.221992 -0.606534 0.51403 0.606539 -0.695958 0.52567 -0.489197 0.489197 0.525672 0.695957 0.489193 0.525678 -0.695955 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 0 0 1 0 0 1 0 0 1 0 0 1 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 1 0 0 1 0 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.555559 -0.831477 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.555559 -0.831477 0 -0.290262 -0.956947 0 -0.290262 -0.956947 0 0.812999 0.518906 -0.264138 0.812999 0.518906 -0.264138 0.812999 0.518906 0.264138 0.812999 0.518906 0.264138 0 -1 0 0 -1 0 -0.290262 -0.956947 0 -0.290262 -0.956947 0 0.812999 0.518906 -0.264138 0.700654 0.499985 -0.509018 0.700654 0.499985 -0.509018 0.700654 0.499985 -0.509018 0.700654 0.499985 -0.509018 0.812999 0.518906 -0.264138 -0.937494 -0.348003 0 -0.937494 -0.348003 0 -0.937494 -0.348003 0 -0.937494 -0.348003 0 -0.890554 -0.454878 0 -0.890554 -0.454878 0 -0.890554 -0.454878 0 -0.890554 -0.454878 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 0 0 1 0 0 1 0 0 1 0 0 1 0.700654 0.499985 0.509018 0.700654 0.499985 0.509018 0.700654 0.499985 0.509018 0.812999 0.518906 0.264138 0.812999 0.518906 0.264138 0.700654 0.499985 0.509018 0 1 0 0 1 0 0 1 0 0 1 0 -0.809038 0 0.587756 -0.809038 0 0.587756 -0.809038 0 0.587756 -0.809038 0 0.587756 -0.809038 0 0.587756 -0.809038 0 0.587756 -0.809038 0 0.587756 -0.809038 0 0.587756 -0.809038 0 0.587756 -0.809038 0 0.587756 0.809038 0 -0.587756 0.809038 0 -0.587756 0.809038 0 -0.587756 0.809038 0 -0.587756 0.809038 0 -0.587756 0.809038 0 -0.587756 0.809038 0 -0.587756 0.809038 0 -0.587756 0.809038 0 -0.587756 0.809038 0 -0.587756 -0.475509 -0.587756 -0.654549 -0.475509 -0.587756 -0.654549 -0.181616 -0.951066 -0.249977 -0.181616 -0.951066 -0.249977 -0.181616 -0.951066 -0.249977 -0.181616 -0.951066 -0.249977 0.181616 -0.951066 0.249977 0.181616 -0.951066 0.249977 0.181616 -0.951066 0.249977 0.181616 -0.951066 0.249977 0.475509 -0.587756 0.654549 0.475509 -0.587756 0.654549 0.475509 -0.587756 0.654549 0.475509 -0.587756 0.654549 0.587756 0 0.809038 0.587756 0 0.809038 0.587756 0 0.809038 0.587756 0 0.809038 0.475509 0.587756 0.654549 0.475509 0.587756 0.654549 0.475509 0.587756 0.654549 0.475509 0.587756 0.654549 0.181616 0.951066 0.249977 0.181616 0.951066 0.249977 0.181616 0.951066 0.249977 0.181616 0.951066 0.249977 -0.181616 0.951066 -0.249977 -0.181616 0.951066 -0.249977 -0.181616 0.951066 -0.249977 -0.181616 0.951066 -0.249977 -0.475509 0.587756 -0.654549 -0.475509 0.587756 -0.654549 -0.475509 0.587756 -0.654549 -0.475509 0.587756 -0.654549 -0.587756 0 -0.809038 -0.587756 0 -0.809038 -0.587756 0 -0.809038 -0.587756 0 -0.809038 -0.475509 -0.587756 -0.654549 -0.475509 -0.587756 -0.654549 -0.809038 0 -0.587756 -0.809038 0 -0.587756 -0.809038 0 -0.587756 -0.809038 0 -0.587756 -0.809038 0 -0.587756 -0.809038 0 -0.587756 -0.809038 0 -0.587756 -0.809038 0 -0.587756 -0.809038 0 -0.587756 -0.809038 0 -0.587756 0.809038 0 0.587756 0.809038 0 0.587756 0.809038 0 0.587756 0.809038 0 0.587756 0.809038 0 0.587756 0.809038 0 0.587756 0.809038 0 0.587756 0.809038 0 0.587756 0.809038 0 0.587756 0.809038 0 0.587756 -0.587756 0 0.809038 -0.587756 0 0.809038 -0.475509 0.587756 0.654549 -0.475509 0.587756 0.654549 -0.475509 0.587756 0.654549 -0.475509 0.587756 0.654549 -0.181616 0.951066 0.249977 -0.181616 0.951066 0.249977 -0.181616 0.951066 0.249977 -0.181616 0.951066 0.249977 0.181616 0.951066 -0.249977 0.181616 0.951066 -0.249977 0.181616 0.951066 -0.249977 0.181616 0.951066 -0.249977 0.475509 0.587756 -0.654549 0.475509 0.587756 -0.654549 0.475509 0.587756 -0.654549 0.475509 0.587756 -0.654549 0.587756 0 -0.809038 0.587756 0 -0.809038 0.587756 0 -0.809038 0.587756 0 -0.809038 0.475509 -0.587756 -0.654549 0.475509 -0.587756 -0.654549 0.475509 -0.587756 -0.654549 0.475509 -0.587756 -0.654549 0.181616 -0.951066 -0.249977 0.181616 -0.951066 -0.249977 0.181616 -0.951066 -0.249977 0.181616 -0.951066 -0.249977 -0.181616 -0.951066 0.249977 -0.181616 -0.951066 0.249977 -0.181616 -0.951066 0.249977 -0.181616 -0.951066 0.249977 -0.475509 -0.587756 0.654549 -0.475509 -0.587756 0.654549 -0.475509 -0.587756 0.654549 -0.475509 -0.587756 0.654549 -0.587756 0 0.809038 -0.587756 0 0.809038 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 0 0 1 0 0 1 0 0 1 0 0 1 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.707083 0 0.70713 0.707083 0 0.70713 0.707083 0 0.70713 0.707083 0 0.70713 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 1 0 0 1 0 0 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.991449 0 0.130497 -0.991449 0 0.130497 -0.991449 0 0.130497 -0.991449 0 0.130497 -0.991449 0 -0.130497 -0.991449 0 -0.130497 -0.991449 0 -0.130497 -0.991449 0 -0.130497 -0.866034 0 -0.499985 -0.866034 0 -0.499985 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.866034 0 0.499985 -0.866034 0 0.499985 0.130985 0 0.991384 0.130985 0 0.991384 0.130985 0 0.991384 0.130985 0 0.991384 1 0 0 1 0 0 1 0 0 1 0 0 0.130985 0 -0.991384 0.130985 0 -0.991384 0.130985 0 -0.991384 0.130985 0 -0.991384 -0.0958281 -0.995398 0 -0.0958281 -0.995398 0 -0.0958281 -0.995398 0 -0.0958281 -0.995398 0 -0.0958281 -0.995398 0 -0.0958281 -0.995398 0 -0.0958281 -0.995398 0 -0.0958281 -0.995398 0 -0.707083 0 -0.70713 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.707083 0 -0.70713 -0.707083 0 0.70713 -0.130985 0 -0.991384 0.00262459 -0.798647 0.601794 -0.707083 0 -0.70713 -0.130985 0 0.991384 0.00262459 -0.798647 -0.601794 -0.499985 0 0.866034 0.00262459 -0.798647 0.601794 -0.499985 0 -0.866034 0.00262459 -0.798647 -0.601794 -0.499985 0 -0.866034 0 1 0 -0.499985 0 0.866034 0 1 0 -0.130497 0 0.991449 0.00262459 -0.798647 0.601794 -0.130497 0 -0.991449 0.00262459 -0.798647 -0.601794 -0.0678121 0 0.997698 0.00262459 -0.798647 -0.601794 -0.0678121 0 -0.997698 0.00262459 -0.798647 0.601794 -0.100162 0 -0.994971 0.0608234 -0.797161 0.600696 -0.100162 0 0.994971 0.0608234 -0.797161 -0.600696 0.0608234 -0.797161 -0.600696 0.0979949 0 -0.995187 0.0608234 -0.797161 0.600696 0.0979949 0 0.995187 -0.382672 0 0.923884 0.230293 -0.798652 -0.555986 -0.382672 0 -0.923884 0.230293 -0.798652 0.555986 0.230293 -0.798652 0.555986 0.382672 0 0.923884 0.230293 -0.798652 -0.555986 0.382672 0 -0.923884 0 1 0 0.382672 0 -0.923884 -0.70713 0 0.707083 0.42552 -0.798665 -0.42552 -0.70713 0 -0.707083 0.42552 -0.798665 0.42552 -0.70713 0 0.707083 0 1 0 -0.923884 0 0.382672 0.555986 -0.798652 -0.230293 -0.923884 0 -0.382672 0.555986 -0.798652 0.230293 -1 0 0 0.601794 -0.798651 0 0.42552 -0.798665 -0.42552 0.707083 0 -0.70713 0.42552 -0.798665 0.42552 0.70713 0 0.707083 0.555986 -0.798652 0.230293 0.923884 0 0.382672 0 1 0 0.923884 0 0.382672 0.555986 -0.798652 -0.230293 0.923884 0 -0.382672 0.601794 -0.798651 0 1 0 0 -0.707083 0 -0.70713 -0.130985 0 0.991384 -0.707083 0 0.70713 -0.130985 0 -0.991384 -0.130497 0 -0.991449 -0.130497 0 0.991449 -0.0678121 0 0.997698 -0.0678121 0 -0.997698 -0.100162 0 -0.994971 -0.100162 0 0.994971 0.0979949 0 -0.995187 0.0979949 0 0.995187 -0.382672 0 0.923884 -0.382672 0 -0.923884 0.382672 0 0.923884 -0.70713 0 -0.707083 -0.923884 0 0.382672 -0.923884 0 -0.382672 -1 0 0 0.707083 0 -0.70713 0.70713 0 0.707083 0.923884 0 -0.382672 1 0 0 0 1 0 -0.700339 0 0.713811 0 -1 0 -0.700339 0 0.713811 0.483444 0.723538 -0.492721 0.3314 0.800118 -0.499985 -0.525956 0 0.850512 0 -1 0 -0.525956 0 0.850512 0.3314 0.800118 -0.499985 0 -1 0 0 0 1 0 0.866034 -0.499985 0 0 1 0 0.866034 -0.499985 0 -1 0 0.525956 0 0.850512 -0.3314 0.800118 -0.499985 0.525956 0 0.850512 -0.3314 0.800118 -0.499985 0 -1 0 0.700339 0 0.713811 -0.483444 0.723538 -0.492721 0.700339 0 0.713811 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.100162 0 -0.994971 0.100162 0 -0.994971 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.70713 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.707083 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 1 0 0 1 0 0 1 0 0 1 0 0 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.70713 0 0.707083 0.70713 0 0.707083 0.70713 0 0.707083 0.70713 0 0.707083 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.100162 0 0.994971 0.100162 0 0.994971 0.100162 0 0.994971 0.100162 0 0.994971 0.00433363 0 0.999991 0.00433363 0 0.999991 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0.00433363 0 -0.999991 0.00433363 0 -0.999991 0.100162 0 -0.994971 0.100162 0 -0.994971 -0.991449 0 -0.130497 0 1 0 -0.991449 0 0.130497 0 1 0 -0.866034 0 -0.499985 0 1 0 -0.866034 0 0.499985 0 1 0 -0.499985 0 -0.866034 0 1 0 -0.499985 0 0.866034 0 1 0 0 -1 0 0 1 0 -0.499985 0 -0.866034 0 -1 0 0 0 -1 -0.499985 0 0.866034 0 -1 0 0 0 1 0 0 -1 0 1 0 0.937494 0.348003 0 0 0 1 0 1 0 0.937494 0.348003 0 0 -1 0 0 0 -1 0 1 0 0.185308 0 -0.98268 0 0 1 0 1 0 0.290323 0.956929 0 0.378277 0 0.925692 0 -1 0 0 0 -1 0 -1 0 0 0 1 0 0 -1 0 1 0 0 0 1 0 1 0 0.382672 0 -0.923884 0 -1 0 0.382672 0 0.923884 0 1 0 0.382672 0 -0.923884 0 1 0 0.382672 0 0.923884 0 -1 0 0.923884 0 0.382672 0 1 0 0.923884 0 -0.382672 -0.991449 0 -0.130497 -0.991449 0 0.130497 -0.866034 0 -0.499985 -0.866034 0 0.499985 -0.130497 0 -0.991449 -0.130497 0 0.991449 -0.130497 0 -0.991449 0 1 0 -0.130497 0 0.991449 0 1 0 0.890554 0.454878 0 0.890554 0.454878 0 0.707161 0.707053 0 0.707161 0.707053 0 0.185308 0 0.98268 0.290323 0.956929 0 0.378277 0 -0.925692 0.525956 0 -0.850512 0.525956 0 0.850512 0.525956 0 -0.850512 0.525956 0 0.850512 -0.525956 0 -0.850512 -0.525956 0 0.850512 -0.525956 0 -0.850512 -0.525956 0 0.850512 -0.378277 0 -0.925692 -0.378277 0 0.925692 -0.378277 0 -0.925692 -0.378277 0 0.925692 0.0979949 0 -0.995187 0.0979949 0 0.995187 0.0979949 0 -0.995187 0.0979949 0 0.995187 0.707083 0 -0.70713 0.707083 0 0.70713 0.707083 0 -0.70713 0.707083 0 0.70713 0.923884 0 -0.382672 0.923884 0 0.382672 1 0 0 1 0 0 0 0 -1 0 0 1 0 1 0 0 -1 0 -0.737203 -0.51616 0.436018 -0.462722 -0.323985 0.82518 0 0.752342 -0.658773 -0.81916 -0.573565 0 0 0.752342 -0.658773 -0.81916 -0.573565 0 0 0.752342 -0.658773 1 0 0 -0.706432 -0.494613 0.506272 0.70713 0 -0.707083 0.818133 0 -0.57503 0 0.752342 -0.658773 0.70713 0 -0.707083 0.866034 0 -0.499985 0.0903043 0.387707 -0.917349 0.70713 0 -0.707083 -0.128941 -0.0902738 0.987535 0.258797 0 -0.965932 -0.737203 -0.51616 0.436018 -0.814398 -0.570208 0.107791 0 0 -1 -0.814398 -0.570208 0.107791 0.991449 0 -0.130497 0 0 -1 0 0 -1 1 0 0 0.991449 0 -0.130497 -0.128941 -0.0902738 0.987535 -0.462722 -0.323985 0.82518 0.499985 0 -0.866034 0.26487 0.304697 -0.914879 0 0 1 0.136265 0.29255 -0.946491 -0.706409 -0.494633 0.506285 0.0903155 0.387729 -0.917338 1.01337e-007 0.75234 -0.658775 0.707112 1.18656e-006 -0.707101 -0.700339 0 -0.713811 0 -1 0 -0.700339 0 -0.713811 0.483444 0.723538 0.492721 0.3314 0.800118 0.499985 -0.525956 0 -0.850512 0 -1 0 -0.525956 0 -0.850512 0.3314 0.800118 0.499985 0 -1 0 0 0 -1 0 0.866034 0.499985 0 0 -1 0 0.866034 0.499985 0 -1 0 0.525956 0 -0.850512 -0.3314 0.800118 0.499985 0.525956 0 -0.850512 -0.3314 0.800118 0.499985 0 -1 0 0.700339 0 -0.713811 -0.483444 0.723538 0.492721 0.700339 0 -0.713811 0 0 1 -1 0 0 0 -1 0 0 0 -1 -1 0 0 0 -1 0 0 0 1 -1 0 0 0 0 1 0 0.831477 -0.555559 -1 0 0 0 0 -1 0 0.831477 0.555559 0 -1 0 0 0 -1 1 0 0 0 -1 0 0 0 1 1 0 0 0 0 1 0 0.831477 -0.555559 1 0 0 0 0 -1 0 0.831477 0.555559 1 0 0 0 1 0 0 0.923884 0.382672 0 0.923884 -0.382672 0 1 0 0 0.923884 0.382672 0 0.923884 -0.382672 1 0 0 -1 0 0 -0.737203 -0.51616 -0.436018 -0.633656 -0.443709 -0.633722 0 0.831477 0.555559 0 0.555559 0.831477 -0.633656 -0.443709 -0.633722 -0.462722 -0.323985 -0.82518 0 0.555559 0.831477 -0.81916 -0.573565 0 1 0 0 0 0.831477 0.555559 0 0 1 1 0 0 -0.633656 -0.443709 -0.633722 -0.462722 -0.323985 -0.82518 0.499985 0 0.866034 0.818133 0 0.57503 0 0.831477 0.555559 0 0.555559 0.831477 0.26487 0.304697 0.914879 0.866034 0 0.499985 -0.128941 -0.0902738 -0.987535 0.258797 0 0.965932 -0.814398 -0.570208 -0.107791 -0.81916 -0.573565 0 0 0 1 -0.814398 -0.570208 -0.107791 0.991449 0 0.130497 0 0 1 0.991449 0 0.130497 -0.128941 -0.0902738 -0.987535 -0.706432 -0.494613 -0.506272 0.818133 0 0.57503 0.866034 0 0.499985 0 0 -1 0.136265 0.29255 0.946491 -0.633686 -0.443712 -0.633689 1.19018e-006 0.555567 0.831472 -7.84074e-007 0.831473 0.555565 0.818113 8.15696e-007 0.575058 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 0 0 1 0 0 1 0 0 1 0 0 1 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.707083 0 0.70713 0.707083 0 0.70713 0.707083 0 0.70713 0.707083 0 0.70713 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 1 0 0 1 0 0 -0.965932 0.258797 0 -0.238166 0.150975 0.959418 0 -1 0 -0.965932 0.258797 0 -0.238166 0.150975 -0.959418 0 -1 0 -0.877966 0.405377 -0.254646 -0.781771 0.389843 -0.486679 -0.600421 0.41435 -0.683965 -0.877966 0.405377 0.254646 -0.781771 0.389843 0.486679 -0.600421 0.41435 0.683965 -0.832354 0.485 0.268258 -0.832354 0.485 -0.268258 -0.770668 0.62273 -0.135197 -0.770668 0.62273 0.135197 -0.72066 0.693289 0 -0.72066 0.693289 0 -0.398144 0.916416 -0.0407727 -0.398144 0.916416 0.0407727 -0.398144 0.916416 0.0407727 -0.965932 0 -0.258797 -0.503708 0.858976 0.0918607 -0.965932 0 0.258797 -0.503708 0.858976 -0.0918607 -0.965932 0 -0.258797 -0.965932 0 0.258797 -1 0 0 0 1 0 -1 0 0 0 -1 0 0.980788 -0.195074 0 0 -1 0 0.980788 -0.195074 0 0.923884 -0.382672 0 0.923884 -0.382672 0 -0.654805 0.680143 0.3296 -0.654805 0.680143 0.3296 -0.36436 0.27543 0.889595 -0.638264 0.716009 -0.282754 -0.638264 0.716009 -0.282754 -0.36436 0.27543 -0.889595 0.70713 -0.707083 0 0.658773 -0.752342 0 1 0 0 1 0 0 0.923884 0 -0.382672 0.923884 0 0.382672 0.896548 0 0.442946 0.896548 0 -0.442946 0.70713 0 -0.707083 0.707083 0 0.70713 0.707083 0 0.70713 0.70713 0 -0.707083 0 1 0 1 0 0 1 0 0 0 1 0 0.923884 0 0.382672 0 1 0 0.923884 0 -0.382672 0.923884 0 0.382672 0.923884 0 -0.382672 0.555559 0 0.831477 0.555559 0 -0.831477 0 1 0 0.707083 0 0.70713 0 1 0 0.707083 0 -0.70713 0.707083 0 0.70713 0.707083 0 -0.70713 0 1 0 0.382672 0 0.923884 0 1 0 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 0.923884 0.0869167 0.996216 0 0.130497 0.991449 0 0.195074 0 -0.980788 0.0869167 0.996216 0 0.130497 0.991449 0 0.195074 0 0.980788 0.0979949 0 0.995187 0.0979949 0 -0.995187 0 0 1 0 1 0 0 1 0 0 0 -1 0.0979949 0 0.995187 0.130497 0.991449 0 0.0979949 0 -0.995187 0.130497 0.991449 0 0 0 1 0.130497 0.991449 0 0 0 -1 0.130497 0.991449 0 -0.382672 0 0.923884 0 1 0 -0.382672 0 -0.923884 0 1 0 -0.382672 0 0.923884 -0.382672 0 -0.923884 0.382672 0 0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 0.923884 -0.707083 0 0.70713 0 1 0 -0.70713 0 -0.707083 0 1 0 -0.707083 0 0.70713 -0.70713 0 -0.707083 0.70713 0 0.707083 0.70713 0 -0.707083 0.70713 0 -0.707083 0.70713 0 0.707083 -0.923884 0 0.382672 0 1 0 -0.923884 0 -0.382672 0 1 0 -0.923884 0 0.382672 -0.923884 0 -0.382672 -1 0 0 0 1 0 -1 0 0 0.923884 0 -0.382672 0.923884 0 0.382672 0.923884 0 -0.382672 0.923884 0 0.382672 1 0 0 1 0 0 0 0 -1 0 0 1 0.555573 -0.831468 2.7006e-008 0.382685 -0.923879 -1.2851e-006 0.382685 -0.923879 -1.04899e-007 -6.30538e-007 1 -4.84219e-007 -0.636282 0.751926 -0.17249 -0.503713 0.858972 -0.0918718 -0.720643 0.693307 -8.46325e-007 0.896538 -1.30469e-007 -0.442968 0.831474 -2.58735e-006 0.555564 0.0653084 -0.997865 -4.80529e-006 0.130527 0.991445 -7.22848e-007 -0.965926 1.9605e-006 -0.258818 -0.965926 1.9605e-006 -0.258818 -0.937494 -0.348003 0 -0.937494 -0.348003 0 -0.99684 -0.0794397 0 -0.99684 -0.0794397 0 0.809038 0 0.587756 0.809038 0 0.587756 0.809038 0 0.587756 0.809038 0 0.587756 0.951062 0 0.309 0.951062 0 0.309 0.951062 0 0.309 0.951062 0 0.309 0.951062 0 -0.309 0.951062 0 -0.309 -0.555559 0.831477 0 -0.555559 0.831477 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.99684 -0.0794397 0 -0.99684 -0.0794397 0 0.809038 0 -0.587756 0.809038 0 -0.587756 0.809038 0 -0.587756 0.951062 0 -0.309 0.951062 0 -0.309 0.809038 0 -0.587756 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.923884 -0.382672 0.130497 0 -0.991449 0 -1 0 0.130497 0 0.991449 0 1 0 0.965932 -0.258797 0 0 -1 0 0 1 0 0 -0.472213 -0.881485 0 1 0 -1 0 0 0 -1 0 -1 0 0 0 -0.923884 -0.382672 -1 0 0 0 -0.896548 0.442946 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0 -1 -1 0 0 0 0 1 -1 0 0 0 0.382672 -0.923884 -1 0 0 0 0.382672 0.923884 -1 0 0 0 0.707083 -0.70713 -1 0 0 0 0.70713 0.707083 -1 0 0 0 0.923884 -0.382672 -1 0 0 0 0.923884 0.382672 -1 0 0 0 1 0 0 -1 0 1 0 0 0 -0.923884 -0.382672 1 0 0 0 -0.923884 0.382672 1 0 0 0.991449 0 0.130497 0.991449 0 -0.130497 0 -1 0 0.991449 0 0.130497 0 -1 0 0.991449 0 -0.130497 0.866034 0 0.499985 0.866034 0 -0.499985 0 -1 0 0.866034 0 0.499985 0 -1 0 0.866034 0 -0.499985 0.70713 0 0.707083 0.70713 0 -0.707083 0.499985 0 -0.866034 0.499985 0 0.866034 0 -1 0 0.499985 0 0.866034 0 -1 0 0.499985 0 -0.866034 0.0869167 0 0.996216 0.130497 0 -0.991449 0 -1 0 0.130497 0 -0.991449 0 -0.0661336 -0.997811 0 -1 0 0 1 0 0 1 0 0 0.195074 0.980788 0.965932 -0.258797 0 0 0.382672 -0.923884 0.965932 -0.258797 0 0 0.382672 0.923884 0.965932 -0.258797 0 0 0.707083 -0.70713 0.965932 -0.258797 0 0 0.70713 0.707083 0.965932 -0.258797 0 0 0.923884 -0.382672 0.965932 -0.258797 0 0 0.923884 0.382672 0.965932 -0.258797 0 0 1 0 0.965932 -0.258797 0 0 1 0 0.937505 0.347972 0 0.937505 0.347972 0 0 1 0 0.937494 0.348003 0 0 1 0 0.937494 0.348003 0 0.890554 0.454878 0 0.890554 0.454878 0 0.890554 0.454878 0 0.890554 0.454878 0 0.831477 0.555559 0 0.831498 0.555528 0 0.831477 0.555559 0 0.831498 0.555528 0 0.130526 1.54146e-006 0.991445 0.130526 -6.00919e-007 -0.991445 2.95047e-007 -0.19509 0.980785 -2.4373e-007 -0.555572 0.831469 -1.07673e-006 -0.831472 0.555567 -1.05099e-006 -0.92388 -0.382682 -9.84978e-008 -0.472236 -0.881472 9.96224e-007 -0.195084 -0.980787 - - - - - - - - - - - - - - -

0 0 1 0 2 0 3 0 4 0 5 0 6 0

-
- - - -

7 1 8 1 9 1 10 1

-
- - - -

11 2 12 2 13 2 14 2

-
- - - -

15 3 16 3 17 3 18 3

-
- - - -

19 4 20 4 21 4 22 4

-
- - - -

23 5 24 5 25 5 26 5

-
- - - -

27 6 28 6 29 6 30 6

-
- - - -

31 7 32 7 33 7 34 7

-
- - - -

35 8 36 8 37 8 38 8

-
- - - -

39 9 40 9 41 9 42 9

-
- - - -

43 10 44 10 45 10 46 10

-
- - - -

47 11 48 11 49 11 50 11

-
- - - -

51 12 52 12 53 12 54 12

-
- - - -

72 13 73 13 74 13 117 13 118 13 119 13

-
- - - -

55 13 56 13 57 13 58 13

-

59 13 60 13 61 13 62 13

-

63 13 64 13 65 13 66 13 67 13

-

68 13 69 13 70 13 71 13

-

75 13 76 13 77 13 78 13

-

79 13 80 13 81 13 82 13 83 13 84 13

-

85 13 86 13 87 13 88 13

-

89 13 90 13 91 13 92 13

-

93 13 94 13 95 13 96 13

-

97 13 98 13 99 13 100 13 101 13 102 13 103 13

-

104 13 105 13 106 13 107 13

-

108 13 109 13 110 13 111 13

-

112 13 113 13 114 13 115 13 116 13

-
- - - -

167 14 168 14 169 14 184 14 185 14 186 14

-
- - - -

120 14 121 14 122 14 123 14

-

124 14 125 14 126 14 127 14 128 14

-

129 14 130 14 131 14 132 14

-

133 14 134 14 135 14 136 14

-

137 14 138 14 139 14 140 14 141 14 142 14 143 14

-

144 14 145 14 146 14 147 14

-

148 14 149 14 150 14 151 14

-

152 14 153 14 154 14 155 14 156 14

-

157 14 158 14 159 14 160 14 161 14 162 14

-

163 14 164 14 165 14 166 14

-

170 14 171 14 172 14 173 14

-

174 14 175 14 176 14 177 14 178 14 179 14

-

180 14 181 14 182 14 183 14

-
- - - -

216 15 217 15 218 15 228 15 229 15 230 15 237 15 238 15 239 15 240 15 241 15 242 15 243 15 244 15 245 15

-
- - - -

187 15 188 15 189 15 190 15 191 15 192 15

-

193 15 194 15 195 15 196 15

-

197 15 198 15 199 15 200 15

-

201 15 202 15 203 15 204 15 205 15

-

206 15 207 15 208 15 209 15

-

210 15 211 15 212 15 213 15 214 15 215 15

-

219 15 220 15 221 15 222 15 223 15

-

224 15 225 15 226 15 227 15

-

231 15 232 15 233 15 234 15 235 15 236 15

-
- - - -

255 16 256 16 257 16

-
- - - -

246 16 247 16 248 16 249 16 250 16

-

251 16 252 16 253 16 254 16

-
- - - -

271 17 272 17 273 17

-
- - - -

258 17 259 17 260 17 261 17

-

262 17 263 17 264 17 265 17 266 17

-

267 17 268 17 269 17 270 17

-
- - - -

301 18 302 18 303 18

-
- - - -

274 18 275 18 276 18 277 18

-

278 18 279 18 280 18 281 18 282 18 283 18 284 18 285 18

-

286 18 287 18 288 18 289 18 290 18

-

291 18 292 18 293 18 294 18 295 18 296 18

-

297 18 298 18 299 18 300 18

-
- - - -

351 93 314 93 353 93

-
- - - -

353 93 355 93 323 93 351 93

-
- - - -

352 94 311 94 350 94

-
- - - -

350 94 320 94 317 94 352 94

-
- - - -

331 95 366 95 373 95 371 95

-

331 95 337 95 359 95 366 95

-
- - - -

329 96 370 96 372 96 365 96

-

365 96 361 96 334 96 329 96

-
- - - -

331 97 371 97 377 97 369 97

-

329 97 356 97 320 97 350 97 307 97 351 97 323 97 357 97 331 97 369 97 368 97

-

329 97 368 97 375 97 370 97

-
- - - -

367 82 368 83 369 84 375 90 372 87 370 85 361 76 365 80 339 54 342 57 366 81 359 74 377 92 371 86 373 88

-
- - - -

329 44 333 48 325 40 356 71

-

356 71 325 40 316 31 319 34

-

338 53 352 67 317 32 324 39 332 47 360 75

-

363 78 365 80 346 61 374 89 368 83 343 58

-

362 77 343 58 305 20 310 25 352 67

-

350 65 308 23 304 19 306 21

-

306 21 304 19 312 27 351 66

-

322 37 354 69 327 42 357 72

-

357 72 327 42 336 51 331 46

-

340 55 358 73 335 50 326 41 355 70 353 68

-

343 58 341 56 353 68 313 28 305 20

-

364 79 343 58 369 84 376 91 349 64 366 81

-
- - - -

378 98 379 99 380 100 381 101 382 102 383 103 384 104 385 105 386 106 387 107 388 108 389 109

-

390 110 391 111 392 112 393 113 394 114 395 115 396 116 397 117 398 118 399 119 400 120 401 121

-

402 122 403 123 404 124 405 125

-

406 126 407 127 408 128 409 129

-

410 130 411 131 412 132 413 133

-

414 134 415 135 416 136 417 137

-

418 138 419 139 420 140 421 141

-

422 142 423 143 424 144 425 145

-

426 146 427 147 428 148 429 149

-

430 150 431 151 432 152 433 153

-

434 154 435 155 436 156 437 157

-

438 158 439 159 440 160 441 161

-

442 162 443 163 444 164 445 165

-

446 166 447 167 448 168 449 169

-
- - - -

450 170 451 171 452 172 453 173

-

454 174 455 175 456 176 457 177 458 178 459 179

-

460 180 461 181 462 182 463 183

-

464 184 465 185 466 186 467 187

-

468 188 469 189 470 190 471 191 472 192 473 193

-

474 194 475 195 476 196 477 197 478 198 479 199

-

480 200 481 201 482 202 483 203

-

484 204 485 205 486 206 487 207

-

488 208 489 209 490 210 491 211 492 212 493 213

-

494 214 495 215 496 216 497 217

-
- - - -

498 218 499 219 500 220 501 221 502 222 503 223 504 224 505 225 506 226 507 227

-

508 228 509 229 510 230 511 231 512 232 513 233 514 234 515 235 516 236 517 237

-

518 238 519 239 520 240 521 241

-

522 242 523 243 524 244 525 245

-

526 246 527 247 528 248 529 249

-

530 250 531 251 532 252 533 253

-

534 254 535 255 536 256 537 257

-

538 258 539 259 540 260 541 261

-

542 262 543 263 544 264 545 265

-

546 266 547 267 548 268 549 269

-

550 270 551 271 552 272 553 273

-

554 274 555 275 556 276 557 277

-
- - - -

558 278 559 279 560 280 561 281 562 282 563 283 564 284 565 285 566 286 567 287

-

568 288 569 289 570 290 571 291 572 292 573 293 574 294 575 295 576 296 577 297

-

578 298 579 299 580 300 581 301

-

582 302 583 303 584 304 585 305

-

586 306 587 307 588 308 589 309

-

590 310 591 311 592 312 593 313

-

594 314 595 315 596 316 597 317

-

598 318 599 319 600 320 601 321

-

602 322 603 323 604 324 605 325

-

606 326 607 327 608 328 609 329

-

610 330 611 331 612 332 613 333

-

614 334 615 335 616 336 617 337

-
- - - -

618 338 619 339 620 340 621 341 622 342 623 343 624 344 625 345 626 346 627 347 628 348 629 349 630 350 631 351 632 352 633 353

-

634 354 635 355 636 356 637 357 638 358 639 359 640 360 641 361 642 362 643 363 644 364 645 365 646 366 647 367 648 368 649 369

-

650 370 651 371 652 372 653 373

-

654 374 655 375 656 376 657 377

-

658 378 659 379 660 380 661 381

-

662 382 663 383 664 384 665 385

-

666 386 667 387 668 388 669 389

-

670 390 671 391 672 392 673 393

-

674 394 675 395 676 396 677 397

-

678 398 679 399 680 400 681 401

-

682 402 683 403 684 404 685 405

-

686 406 687 407 688 408 689 409

-

690 410 691 411 692 412 693 413

-

694 414 695 415 696 416 697 417

-

698 418 699 419 700 420 701 421

-

702 422 703 423 704 424 705 425

-

706 426 707 427 708 428 709 429

-

710 430 711 431 712 432 713 433

-
- - - -

714 434 715 435 716 436 717 437

-

718 438 719 439 720 440 721 441

-

722 442 723 443 724 444 725 445

-

726 446 727 447 728 448 729 449 730 450 731 451 732 452 733 453

-

734 454 735 455 736 456 737 457

-

738 458 739 459 740 460 741 461

-

742 462 743 463 744 464 745 465

-

746 466 747 467 748 468 749 469

-

750 470 751 471 752 472 753 473 754 474 755 475 756 476 757 477

-

758 478 759 479 760 480 761 481

-
- - - -

834 569 833 569 829 569 775 569 831 569 837 569

-

836 569 830 569 773 569 827 569 832 569 835 569

-

801 569 836 569 835 569 838 569

-

845 569 801 569 838 569 807 569

-

847 569 845 569 807 569 842 569

-

848 569 847 569 842 569 844 569

-

821 569 848 569 844 569 843 569

-

846 569 821 569 843 569 841 569

-

840 569 846 569 841 569 839 569

-

837 569 840 569 839 569 834 569

-
- - - -

837 557 791 511 797 517 840 560

-

840 560 797 517 817 537 846 566

-

819 539 821 541 846 566 817 537

-

812 532 810 530 843 563 844 564

-

844 564 842 562 808 528 812 532

-

824 544 813 533 809 529 822 542

-

809 529 803 523 814 534 822 542

-

842 562 806 526 802 522 808 528

-

806 526 838 558 792 512 802 522

-

803 523 793 513 798 518 814 534

-

788 508 798 518 793 513 787 507

-

838 558 835 555 786 506 792 512

-

835 555 832 552 780 500 786 506

-

832 552 827 547 766 486 780 500

-

772 492 770 490 765 485 826 546

-

830 550 778 498 770 490 772 492

-

771 491 779 499 788 508 787 507 781 501 767 487

-

836 556 789 509 778 498 830 550

-

789 509 836 556 801 521 799 519

-

799 519 801 521 845 565 815 535

-

815 535 845 565 847 567 823 543

-

823 543 847 567 848 568 825 545

-

825 545 848 568 821 541 819 539

-

824 544 818 538 811 531 813 533

-

805 525 811 531 818 538 816 536

-

810 530 804 524 841 561 843 563

-

839 559 841 561 804 524 794 514

-

795 515 805 525 816 536 796 516

-

790 510 785 505 795 515 796 516

-

794 514 784 504 834 554 839 559

-

833 553 834 554 784 504 782 502

-

829 549 833 553 782 502 763 483

-

774 494 828 548 762 482 768 488

-

769 489 764 484 783 503 785 505 790 510 777 497

-

831 551 776 496 791 511 837 557

-

776 496 831 551 774 494 768 488

-
- - - -

867 593 871 593 869 593 850 593 852 593 853 593 850 593 853 593 860 593

-
- - - -

860 593 867 593 869 593 850 593

-
- - - -

865 586 870 591 867 588 853 574 852 573 857 578

-
- - - -

866 587 864 585 869 590 871 592

-

867 588 860 581 862 583 865 586

-

860 581 853 574 857 578 862 583

-

856 577 854 575 859 580 861 582

-

861 582 859 580 864 585 866 587

-

863 584 858 579 855 576 850 571 868 589

-

851 572 849 570 854 575 856 577

-
- - - -

872 594 873 595 874 596 875 597 876 598 877 599 878 600 879 601 880 602 881 603 882 604

-

883 605 884 606 885 607 886 608 887 609 888 610 889 611 890 612 891 613 892 614 893 615

-

894 616 895 617 896 618 897 619

-

898 620 899 621 900 622 901 623

-

902 624 903 625 904 626 905 627

-

906 628 907 629 908 630 909 631

-

910 632 911 633 912 634 913 635

-

914 636 915 637 916 638 917 639

-

918 640 919 641 920 642 921 643

-

922 644 923 645 924 646 925 647

-

926 648 927 649 928 650 929 651

-

930 652 931 653 932 654 933 655

-

934 656 935 657 936 658 937 659

-
- - - -

1004 754 1007 754 967 754 967 754 1001 754 1004 754

-
- - - -

967 754 995 754 998 754 960 754 1001 754

-
- - - -

1005 755 971 755 1003 755 1005 755 1003 755 1002 755

-
- - - -

1002 755 963 755 1000 755 996 755 1005 755

-
- - - -

986 756 1015 756 1019 756 1023 756

-

984 756 1022 756 1018 756 1014 756

-

986 756 1027 756 1029 756 1031 756 990 756 1026 756 984 756 1014 756 977 756 979 756 1015 756

-

979 756 977 756 1010 756 1011 756

-

1010 756 1007 756 971 756 1011 756

-
- - - -

1009 757 1005 757 996 757 957 757 994 757 992 757 991 757 993 757 954 757 995 757 967 757 1008 757

-

973 757 975 757 1009 757 1008 757

-

982 757 1021 757 1017 757 1013 757

-

980 757 1024 757 1028 757 1030 757 988 757 1025 757 982 757 1013 757 975 757 973 757 1012 757

-

980 757 1012 757 1016 757 1020 757

-
- - - -

1005 727 1009 731 1011 733 971 693

-

1009 731 975 697 978 700 1011 733

-

975 697 1013 735 1015 737 978 700

-

1013 735 1017 739 1019 741 1015 737

-

1017 739 1021 743 1023 745 1019 741

-

982 704 986 708 1023 745 1021 743

-

1025 747 1027 749 986 708 982 704

-

988 710 1029 751 1027 749 1025 747

-

1030 752 1031 753 1029 751 988 710

-

1028 750 990 712 1031 753 1030 752

-

1008 730 967 689 1007 729 1010 732

-

973 695 1008 730 1010 732 976 698

-

1012 734 973 695 976 698 1014 736

-

1016 738 1012 734 1014 736 1018 740

-

1018 740 1022 744 1020 742 1016 738

-

1020 742 1022 744 984 706 980 702

-

980 702 984 706 1026 748 1024 746

-

1024 746 1026 748 990 712 1028 750

-
- - - -

1005 727 1009 731 1011 733 971 693

-

1009 731 975 697 978 700 1011 733

-

975 697 1013 735 1015 737 978 700

-

1013 735 1017 739 1019 741 1015 737

-

1017 739 1021 743 1023 745 1019 741

-

982 704 986 708 1023 745 1021 743

-

1025 747 1027 749 986 708 982 704

-

988 710 1029 751 1027 749 1025 747

-

1030 752 1031 753 1029 751 988 710

-

1028 750 990 712 1031 753 1030 752

-

1008 730 967 689 1007 729 1010 732

-

973 695 1008 730 1010 732 976 698

-

1012 734 973 695 976 698 1014 736

-

1016 738 1012 734 1014 736 1018 740

-

1018 740 1022 744 1020 742 1016 738

-

1020 742 1022 744 984 706 980 702

-

980 702 984 706 1026 748 1024 746

-

1024 746 1026 748 990 712 1028 750

-

952 674 946 668 997 719 995 717

-

993 715 942 664 946 668 952 674

-

991 713 938 660 942 664 993 715

-

938 660 991 713 992 714 940 662

-

994 716 944 666 940 662 992 714

-

996 718 999 721 948 670 955 677

-

955 677 948 670 944 666 994 716

-

945 667 949 671 1000 722 962 684 959 681 998 720 947 669 943 665 939 661 941 663

-

970 692 1006 728 1004 726 1003 725

-

1003 725 1004 726 1001 723 1002 724

-

1002 724 1001 723 960 682 963 685

-
- - - -

1065 791 1050 791 1042 791

-
- - - -

1042 791 1061 791 1034 791 1065 791

-
- - - -

1059 792 1064 792 1047 792

-
- - - -

1047 792 1066 792 1065 792 1034 792 1059 792

-
- - - -

1065 793 1066 793 1045 793 1058 793 1057 793 1036 793

-
- - - -

1036 793 1051 793 1050 793 1065 793 1045 793 1058 793

-
- - - -

1042 794 1045 794 1066 794

-
- - - -

1066 794 1047 794 1061 794 1042 794

-
- - - -

1055 781 1052 778 1056 782

-
- - - -

1054 780 1039 765 1057 783 1058 784

-

1058 784 1045 771 1042 768 1054 780

-

1040 766 1050 776 1051 777 1053 779

-

1053 779 1051 777 1035 761 1037 763

-
- - - -

1055 781 1052 778 1056 782 1063 789 1059 785 1048 774

-
- - - -

1054 780 1039 765 1057 783 1058 784

-

1058 784 1045 771 1042 768 1054 780

-

1040 766 1050 776 1051 777 1053 779

-

1053 779 1051 777 1035 761 1037 763

-

1062 788 1064 790 1049 775 1061 787

-

1048 774 1059 785 1033 759 1060 786

-
- - - -

1087 818 1089 818 1085 818 1087 818 1085 818 1078 818 1071 818 1070 818 1068 818

-
- - - -

1068 818 1087 818 1078 818 1071 818

-
- - - -

1085 813 1088 816 1083 811 1075 803 1070 798 1071 799

-
- - - -

1071 799 1078 806 1080 808 1075 803

-

1078 806 1085 813 1083 811 1080 808

-

1073 801 1076 804 1081 809 1086 814 1068 796

-

1089 817 1087 815 1082 810 1084 812

-

1084 812 1082 810 1077 805 1079 807

-

1079 807 1077 805 1072 800 1074 802

-

1074 802 1072 800 1067 795 1069 797

-
- - - -

1119 849 1110 849 1107 849 1104 849 1113 849 1118 849 1104 849 1118 849 1117 849 1107 849 1104 849 1117 849 1107 849 1117 849 1119 849

-
- - - -

1115 850 1101 850 1092 850 1095 850 1098 850 1116 850 1095 850 1116 850 1114 850 1092 850 1095 850 1114 850 1092 850 1114 850 1115 850

-
- - - -

1117 846 1114 843 1116 845 1119 848

-

1119 848 1116 845 1098 827 1109 838

-

1108 837 1097 826 1095 824 1106 835

-

1105 834 1094 823 1091 820 1102 831

-

1103 832 1092 821 1100 829 1111 840

-

1112 841 1101 830 1115 844 1118 847

-

1118 847 1115 844 1114 843 1117 846

-
- - - -

1151 886 1123 886 1155 886

-
- - - -

1155 886 1126 886 1135 886 1151 886

-
- - - -

1139 887 1154 887 1149 887

-
- - - -

1149 887 1126 887 1155 887 1156 887 1139 887

-
- - - -

1144 888 1131 888 1148 888 1152 888 1156 888 1155 888

-
- - - -

1155 888 1123 888 1142 888 1144 888 1148 888 1152 888

-
- - - -

1156 889 1152 889 1151 889

-
- - - -

1151 889 1135 889 1139 889 1156 889

-
- - - -

1130 861 1144 875 1147 878

-
- - - -

1148 879 1131 862 1128 859 1146 877

-

1146 877 1151 882 1152 883 1148 879

-

1145 876 1142 873 1120 851 1150 881

-

1127 858 1143 874 1142 873 1145 876

-
- - - -

1130 861 1144 875 1147 878 1140 871 1149 880 1153 884

-
- - - -

1148 879 1131 862 1128 859 1146 877

-

1146 877 1151 882 1152 883 1148 879

-

1145 876 1142 873 1120 851 1150 881

-

1127 858 1143 874 1142 873 1145 876

-

1134 865 1141 872 1154 885 1138 869

-

1133 864 1125 856 1149 880 1140 871

-
- - - -

1157 890 1158 891 1159 892 1160 893 1161 894 1162 895 1163 896 1164 897 1165 898 1166 899 1167 900 1168 901 1169 902 1170 903 1171 904 1172 905

-

1173 906 1174 907 1175 908 1176 909 1177 910 1178 911 1179 912 1180 913 1181 914 1182 915 1183 916 1184 917 1185 918 1186 919 1187 920 1188 921

-

1189 922 1190 923 1191 924 1192 925

-

1193 926 1194 927 1195 928 1196 929

-

1197 930 1198 931 1199 932 1200 933

-

1201 934 1202 935 1203 936 1204 937

-

1205 938 1206 939 1207 940 1208 941

-

1209 942 1210 943 1211 944 1212 945

-

1213 946 1214 947 1215 948 1216 949

-

1217 950 1218 951 1219 952 1220 953

-

1221 954 1222 955 1223 956 1224 957

-

1225 958 1226 959 1227 960 1228 961

-

1229 962 1230 963 1231 964 1232 965

-

1233 966 1234 967 1235 968 1236 969

-

1237 970 1238 971 1239 972 1240 973

-

1241 974 1242 975 1243 976 1244 977

-

1245 978 1246 979 1247 980 1248 981

-

1249 982 1250 983 1251 984 1252 985

-
- - - -

1386 1118 1392 1118 1389 1118 1294 1118 1296 1118 1288 1118

-
- - - -

1288 1118 1286 1118 1258 1118 1294 1118

-

1386 1118 1333 1118 1345 1118 1337 1118 1392 1118

-

1294 1118 1386 1118 1389 1118 1296 1118

-
- - - -

1291 1119 1287 1119 1295 1119 1385 1119 1388 1119 1391 1119

-
- - - -

1391 1119 1336 1119 1343 1119 1330 1119 1385 1119

-

1291 1119 1255 1119 1284 1119 1287 1119

-

1385 1119 1291 1119 1295 1119 1388 1119

-
- - - -

1299 1120 1387 1120 1388 1120 1389 1120 1390 1120 1300 1120

-
- - - -

1295 1120 1296 1120 1297 1120 1299 1120 1388 1120

-

1296 1120 1389 1120 1300 1120 1297 1120

-
- - - -

1304 1121 1390 1121 1389 1121

-
- - - -

1389 1121 1392 1121 1316 1121 1304 1121

-
- - - -

1388 1122 1387 1122 1303 1122

-
- - - -

1388 1122 1303 1122 1317 1122 1391 1122

-
- - - -

1329 1123 1335 1123 1333 1123 1314 1123 1322 1123 1386 1123 1385 1123 1315 1123 1309 1123 1385 1123 1323 1123 1315 1123 1330 1123 1332 1123 1328 1123

-
- - - -

1329 1123 1333 1123 1386 1123 1322 1123

-

1309 1123 1314 1123 1386 1123 1385 1123

-

1385 1123 1330 1123 1328 1123 1323 1123

-
- - - -

1294 1124 1279 1124 1282 1124

-
- - - -

1294 1124 1282 1124 1278 1124 1291 1124 1385 1124 1386 1124

-
- - - -

1277 1125 1279 1125 1294 1125 1294 1125 1267 1125 1277 1125

-
- - - -

1271 1125 1277 1125 1267 1125 1270 1125

-
- - - -

1275 1126 1268 1126 1291 1126 1291 1126 1278 1126 1275 1126

-
- - - -

1270 1126 1268 1126 1275 1126 1273 1126

-
- - - -

1387 1127 1299 1127 1302 1127

-
- - - -

1302 1127 1306 1127 1303 1127 1387 1127

-
- - - -

1301 1128 1300 1128 1390 1128

-
- - - -

1390 1128 1304 1128 1305 1128 1301 1128

-
- - - -

1316 1129 1392 1129 1337 1129 1336 1129 1391 1129 1317 1129

-
- - - -

1384 1129 1380 1129 1366 1129 1356 1129 1336 1129 1317 1129 1306 1129 1302 1129 1298 1129 1301 1129 1305 1129 1316 1129 1337 1129 1357 1129 1367 1129 1379 1129

-
- - - -

1347 1130 1354 1130 1358 1130 1345 1130

-

1368 1130 1358 1130 1354 1130 1364 1130

-

1343 1130 1359 1130 1355 1130 1349 1130

-

1365 1130 1355 1130 1359 1130 1369 1130

-

1369 1130 1382 1130 1375 1130 1365 1130

-

1382 1130 1383 1130 1378 1130 1375 1130

-

1374 1130 1378 1130 1383 1130 1381 1130

-

1364 1130 1374 1130 1381 1130 1368 1130

-
- - - -

1271 1004 1270 1003 1272 1005

-
- - - -

1278 1011 1282 1015 1280 1013 1274 1007

-

1279 1012 1276 1009 1280 1013 1282 1015

-

1281 1014 1277 1010 1271 1004 1273 1006 1275 1008

-
- - - -

1271 1004 1270 1003 1272 1005 1268 1001 1265 998 1290 1023 1265 998 1263 996 1289 1022 1291 1024 1264 997 1254 987 1292 1025 1260 993 1266 999 1293 1026 1266 999 1267 1000 1294 1027 1257 990 1261 994

-
- - - -

1278 1011 1282 1015 1280 1013 1274 1007

-

1279 1012 1276 1009 1280 1013 1282 1015

-

1281 1014 1277 1010 1271 1004 1273 1006 1275 1008

-

1287 1020 1288 1021 1296 1029 1295 1028

-

1288 1021 1287 1020 1284 1017 1286 1019

-

1285 1018 1283 1016 1255 988 1258 991

-

1267 1000 1266 999 1259 992 1256 989 1253 986 1262 995 1265 998 1268 1001 1269 1002

-
- - - -

1271 1131 1270 1131 1273 1131 1268 1131 1265 1131 1291 1131 1265 1131 1264 1131 1291 1131 1291 1131 1264 1131 1255 1131 1294 1131 1261 1131 1266 1131 1294 1131 1266 1131 1267 1131 1294 1131 1258 1131 1261 1131 1306 1131 1317 1131 1303 1131

-
- - - -

1278 1131 1282 1131 1281 1131 1275 1131

-

1279 1131 1277 1131 1281 1131 1282 1131

-

1281 1131 1277 1131 1271 1131 1273 1131 1275 1131

-

1287 1131 1288 1131 1296 1131 1295 1131

-

1288 1131 1287 1131 1284 1131 1286 1131

-

1286 1131 1284 1131 1255 1131 1258 1131

-

1267 1131 1266 1131 1261 1131 1258 1131 1255 1131 1264 1131 1265 1131 1268 1131 1270 1131

-
- - - -

1271 1132 1270 1132 1273 1132 1268 1132 1265 1132 1291 1132 1265 1132 1264 1132 1291 1132 1291 1132 1264 1132 1255 1132 1294 1132 1261 1132 1266 1132 1294 1132 1266 1132 1267 1132 1294 1132 1258 1132 1261 1132 1306 1132 1317 1132 1303 1132 1304 1132 1316 1132 1305 1132

-
- - - -

1278 1132 1282 1132 1281 1132 1275 1132

-

1279 1132 1277 1132 1281 1132 1282 1132

-

1281 1132 1277 1132 1271 1132 1273 1132 1275 1132

-

1287 1132 1288 1132 1296 1132 1295 1132

-

1288 1132 1287 1132 1284 1132 1286 1132

-

1286 1132 1284 1132 1255 1132 1258 1132

-

1267 1132 1266 1132 1261 1132 1258 1132 1255 1132 1264 1132 1265 1132 1268 1132 1270 1132

-
- - - -

1271 1004 1270 1003 1272 1005 1268 1001 1265 998 1290 1023 1265 998 1263 996 1289 1022 1291 1024 1264 997 1254 987 1292 1025 1260 993 1266 999 1293 1026 1266 999 1267 1000 1294 1027 1257 990 1261 994 1306 1039 1317 1050 1303 1036 1304 1037 1316 1049 1305 1038

-
- - - -

1278 1011 1282 1015 1280 1013 1274 1007

-

1279 1012 1276 1009 1280 1013 1282 1015

-

1281 1014 1277 1010 1271 1004 1273 1006 1275 1008

-

1287 1020 1288 1021 1296 1029 1295 1028

-

1288 1021 1287 1020 1284 1017 1286 1019

-

1285 1018 1283 1016 1255 988 1258 991

-

1267 1000 1266 999 1259 992 1256 989 1253 986 1262 995 1265 998 1268 1001 1269 1002

-

1337 1070 1344 1077 1358 1091 1357 1090

-

1357 1090 1358 1091 1368 1101 1367 1100

-

1367 1100 1368 1101 1381 1114 1379 1112

-

1383 1116 1384 1117 1379 1112 1381 1114

-

1382 1115 1380 1113 1384 1117 1383 1116

-

1380 1113 1382 1115 1369 1102 1366 1099

-

1366 1099 1369 1102 1359 1092 1356 1089

-

1356 1089 1359 1092 1342 1075 1336 1069

-
- - - -

1271 1004 1270 1003 1272 1005 1268 1001 1265 998 1290 1023 1265 998 1263 996 1289 1022 1291 1024 1264 997 1254 987 1292 1025 1260 993 1266 999 1293 1026 1266 999 1267 1000 1294 1027 1257 990 1261 994 1306 1039 1317 1050 1303 1036 1304 1037 1316 1049 1305 1038

-
- - - -

1278 1011 1282 1015 1280 1013 1274 1007

-

1279 1012 1276 1009 1280 1013 1282 1015

-

1281 1014 1277 1010 1271 1004 1273 1006 1275 1008

-

1287 1020 1288 1021 1296 1029 1295 1028

-

1288 1021 1287 1020 1284 1017 1286 1019

-

1285 1018 1283 1016 1255 988 1258 991

-

1267 1000 1266 999 1259 992 1256 989 1253 986 1262 995 1265 998 1268 1001 1269 1002

-

1337 1070 1344 1077 1358 1091 1357 1090

-

1357 1090 1358 1091 1368 1101 1367 1100

-

1367 1100 1368 1101 1381 1114 1379 1112

-

1383 1116 1384 1117 1379 1112 1381 1114

-

1382 1115 1380 1113 1384 1117 1383 1116

-

1380 1113 1382 1115 1369 1102 1366 1099

-

1366 1099 1369 1102 1359 1092 1356 1089

-

1356 1089 1359 1092 1342 1075 1336 1069

-

1330 1063 1343 1076 1349 1082 1331 1064

-

1375 1108 1372 1105 1362 1095 1365 1098

-

1365 1098 1362 1095 1352 1085 1355 1088

-

1355 1088 1352 1085 1341 1074 1348 1081

-

1348 1081 1341 1074 1327 1060 1328 1061 1332 1065

-

1327 1060 1321 1054 1323 1056 1328 1061

-

1321 1054 1313 1046 1315 1048 1323 1056

-

1313 1046 1308 1041 1309 1042 1315 1048

-

1308 1041 1311 1044 1314 1047 1309 1042

-

1311 1044 1319 1052 1322 1055 1314 1047

-

1361 1094 1351 1084 1339 1072 1324 1057 1318 1051 1310 1043 1307 1040 1312 1045 1320 1053 1326 1059 1340 1073 1353 1086 1363 1096 1373 1106 1377 1110 1371 1104

-

1319 1052 1325 1058 1329 1062 1322 1055

-

1334 1067 1347 1080 1345 1078 1333 1066

-

1346 1079 1335 1068 1329 1062 1325 1058 1338 1071

-

1346 1079 1338 1071 1350 1083 1354 1087

-

1354 1087 1350 1083 1360 1093 1364 1097

-

1364 1097 1360 1093 1370 1103 1374 1107

-

1374 1107 1370 1103 1376 1109 1378 1111

-

1378 1111 1376 1109 1372 1105 1375 1108

-
- - - -

1271 1004 1270 1003 1272 1005 1268 1001 1265 998 1290 1023 1265 998 1263 996 1289 1022 1291 1024 1264 997 1254 987 1292 1025 1260 993 1266 999 1293 1026 1266 999 1267 1000 1294 1027 1257 990 1261 994 1306 1039 1317 1050 1303 1036 1304 1037 1316 1049 1305 1038

-
- - - -

1278 1011 1282 1015 1280 1013 1274 1007

-

1279 1012 1276 1009 1280 1013 1282 1015

-

1281 1014 1277 1010 1271 1004 1273 1006 1275 1008

-

1287 1020 1288 1021 1296 1029 1295 1028

-

1288 1021 1287 1020 1284 1017 1286 1019

-

1285 1018 1283 1016 1255 988 1258 991

-

1267 1000 1266 999 1259 992 1256 989 1253 986 1262 995 1265 998 1268 1001 1269 1002

-

1337 1070 1344 1077 1358 1091 1357 1090

-

1357 1090 1358 1091 1368 1101 1367 1100

-

1367 1100 1368 1101 1381 1114 1379 1112

-

1383 1116 1384 1117 1379 1112 1381 1114

-

1382 1115 1380 1113 1384 1117 1383 1116

-

1380 1113 1382 1115 1369 1102 1366 1099

-

1366 1099 1369 1102 1359 1092 1356 1089

-

1356 1089 1359 1092 1342 1075 1336 1069

-

1330 1063 1343 1076 1349 1082 1331 1064

-

1375 1108 1372 1105 1362 1095 1365 1098

-

1365 1098 1362 1095 1352 1085 1355 1088

-

1355 1088 1352 1085 1341 1074 1348 1081

-

1348 1081 1341 1074 1327 1060 1328 1061 1332 1065

-

1327 1060 1321 1054 1323 1056 1328 1061

-

1321 1054 1313 1046 1315 1048 1323 1056

-

1313 1046 1308 1041 1309 1042 1315 1048

-

1308 1041 1311 1044 1314 1047 1309 1042

-

1311 1044 1319 1052 1322 1055 1314 1047

-

1361 1094 1351 1084 1339 1072 1324 1057 1318 1051 1310 1043 1307 1040 1312 1045 1320 1053 1326 1059 1340 1073 1353 1086 1363 1096 1373 1106 1377 1110 1371 1104

-

1319 1052 1325 1058 1329 1062 1322 1055

-

1334 1067 1347 1080 1345 1078 1333 1066

-

1346 1079 1335 1068 1329 1062 1325 1058 1338 1071

-

1346 1079 1338 1071 1350 1083 1354 1087

-

1354 1087 1350 1083 1360 1093 1364 1097

-

1364 1097 1360 1093 1370 1103 1374 1107

-

1374 1107 1370 1103 1376 1109 1378 1111

-

1378 1111 1376 1109 1372 1105 1375 1108

-

1297 1030 1300 1033 1301 1034 1298 1031

-

1299 1032 1297 1030 1298 1031 1302 1035

-
- - - -

1393 1133 1394 1134 1395 1135 1396 1136

-

1397 1137 1398 1138 1399 1139 1400 1140 1401 1141 1402 1142

-

1403 1143 1404 1144 1405 1145 1406 1146

-

1407 1147 1408 1148 1409 1149 1410 1150

-

1411 1151 1412 1152 1413 1153 1414 1154

-

1415 1155 1416 1156 1417 1157 1418 1158

-

1419 1159 1420 1160 1421 1161 1422 1162 1423 1163 1424 1164

-

1425 1165 1426 1166 1427 1167 1428 1168

-
- - - -

1493 1272 1530 1272 1525 1272

-
- - - -

1432 1272 1493 1272 1525 1272 1519 1272

-
- - - -

1499 1273 1521 1273 1526 1273

-
- - - -

1496 1273 1499 1273 1526 1273 1531 1273 1494 1273

-
- - - -

1448 1274 1529 1274 1527 1274

-
- - - -

1523 1274 1430 1274 1448 1274 1527 1274

-
- - - -

1446 1275 1486 1275 1487 1275

-
- - - -

1494 1275 1531 1275 1529 1275 1448 1275

-

1494 1275 1448 1275 1446 1275 1487 1275

-
- - - -

1480 1276 1486 1276 1446 1276 1444 1276 1472 1276 1474 1276

-
- - - -

1446 1276 1444 1276 1474 1276 1480 1276

-
- - - -

1479 1277 1473 1277 1445 1277 1445 1277 1485 1277 1479 1277

-
- - - -

1470 1277 1442 1277 1445 1277 1473 1277

-
- - - -

1493 1278 1488 1278 1447 1278

-
- - - -

1447 1278 1528 1278 1530 1278 1493 1278

-

1445 1278 1447 1278 1488 1278 1485 1278

-
- - - -

1434 1279 1518 1279 1524 1279

-
- - - -

1524 1279 1528 1279 1447 1279 1450 1279 1434 1279

-
- - - -

1480 1220 1474 1214 1478 1218 1484 1224

-

1486 1226 1480 1220 1484 1224 1492 1232 1487 1227

-

1494 1234 1487 1227 1492 1232 1496 1236

-

1498 1238 1495 1235 1491 1231 1483 1223 1477 1217 1475 1215 1481 1221 1489 1229 1431 1171 1435 1175

-

1488 1228 1493 1233 1432 1172 1490 1230

-

1485 1225 1488 1228 1490 1230 1482 1222 1479 1219

-

1473 1213 1479 1219 1482 1222 1476 1216

-

1474 1214 1472 1212 1468 1208 1470 1210 1473 1213 1476 1216 1478 1218

-

1471 1211 1444 1184 1440 1180 1467 1207

-

1467 1207 1440 1180 1442 1182 1469 1209

-

1505 1245 1456 1196 1452 1192 1501 1241

-

1509 1249 1460 1200 1456 1196 1505 1245

-

1513 1253 1464 1204 1460 1200 1509 1249

-

1516 1256 1514 1254 1510 1250 1506 1246 1502 1242 1434 1174 1504 1244 1508 1248 1512 1252

-

1497 1237 1450 1190 1454 1194 1503 1243

-

1503 1243 1454 1194 1458 1198 1507 1247

-

1507 1247 1458 1198 1462 1202 1511 1251

-

1465 1205 1461 1201 1457 1197 1453 1193 1449 1189 1447 1187 1445 1185 1441 1181 1439 1179 1443 1183 1446 1186 1448 1188 1451 1191 1455 1195 1459 1199 1463 1203

-

1515 1255 1466 1206 1464 1204 1513 1253

-

1466 1206 1515 1255 1511 1251 1462 1202

-
- - - -

1480 1220 1474 1214 1478 1218 1484 1224

-

1486 1226 1480 1220 1484 1224 1492 1232 1487 1227

-

1494 1234 1487 1227 1492 1232 1496 1236

-

1498 1238 1495 1235 1491 1231 1483 1223 1477 1217 1475 1215 1481 1221 1489 1229 1431 1171 1435 1175

-

1488 1228 1493 1233 1432 1172 1490 1230

-

1485 1225 1488 1228 1490 1230 1482 1222 1479 1219

-

1473 1213 1479 1219 1482 1222 1476 1216

-

1474 1214 1472 1212 1468 1208 1470 1210 1473 1213 1476 1216 1478 1218

-

1471 1211 1444 1184 1440 1180 1467 1207

-

1467 1207 1440 1180 1442 1182 1469 1209

-

1505 1245 1456 1196 1452 1192 1501 1241

-

1509 1249 1460 1200 1456 1196 1505 1245

-

1513 1253 1464 1204 1460 1200 1509 1249

-

1516 1256 1514 1254 1510 1250 1506 1246 1502 1242 1434 1174 1504 1244 1508 1248 1512 1252

-

1497 1237 1450 1190 1454 1194 1503 1243

-

1503 1243 1454 1194 1458 1198 1507 1247

-

1507 1247 1458 1198 1462 1202 1511 1251

-

1465 1205 1461 1201 1457 1197 1453 1193 1449 1189 1447 1187 1445 1185 1441 1181 1439 1179 1443 1183 1446 1186 1448 1188 1451 1191 1455 1195 1459 1199 1463 1203

-

1515 1255 1466 1206 1464 1204 1513 1253

-

1466 1206 1515 1255 1511 1251 1462 1202

-

1529 1269 1531 1271 1526 1266 1527 1267

-

1527 1267 1526 1266 1521 1261 1523 1263

-

1522 1262 1520 1260 1499 1239 1500 1240

-
- - - -

1480 1220 1474 1214 1478 1218 1484 1224

-

1486 1226 1480 1220 1484 1224 1492 1232 1487 1227

-

1494 1234 1487 1227 1492 1232 1496 1236

-

1498 1238 1495 1235 1491 1231 1483 1223 1477 1217 1475 1215 1481 1221 1489 1229 1431 1171 1435 1175

-

1488 1228 1493 1233 1432 1172 1490 1230

-

1485 1225 1488 1228 1490 1230 1482 1222 1479 1219

-

1473 1213 1479 1219 1482 1222 1476 1216

-

1474 1214 1472 1212 1468 1208 1470 1210 1473 1213 1476 1216 1478 1218

-

1471 1211 1444 1184 1440 1180 1467 1207

-

1467 1207 1440 1180 1442 1182 1469 1209

-

1505 1245 1456 1196 1452 1192 1501 1241

-

1509 1249 1460 1200 1456 1196 1505 1245

-

1513 1253 1464 1204 1460 1200 1509 1249

-

1516 1256 1514 1254 1510 1250 1506 1246 1502 1242 1434 1174 1504 1244 1508 1248 1512 1252

-

1497 1237 1450 1190 1454 1194 1503 1243

-

1503 1243 1454 1194 1458 1198 1507 1247

-

1507 1247 1458 1198 1462 1202 1511 1251

-

1465 1205 1461 1201 1457 1197 1453 1193 1449 1189 1447 1187 1445 1185 1441 1181 1439 1179 1443 1183 1446 1186 1448 1188 1451 1191 1455 1195 1459 1199 1463 1203

-

1515 1255 1466 1206 1464 1204 1513 1253

-

1466 1206 1515 1255 1511 1251 1462 1202

-

1529 1269 1531 1271 1526 1266 1527 1267

-

1527 1267 1526 1266 1521 1261 1523 1263

-

1522 1262 1520 1260 1499 1239 1500 1240

-

1528 1268 1524 1264 1525 1265 1530 1270

-

1524 1264 1518 1258 1519 1259 1525 1265

-

1517 1257 1433 1173 1436 1176 1438 1178

-
-
- - - CAT3DBagRep - - -
- - - - 4.78369 93.4515 -106.5 8.83899 96.1612 -106.5 11.5486 100.216 -106.5 12.5001 105 -106.5 11.5486 109.784 -106.5 8.83899 113.839 -106.5 4.78369 116.549 -106.5 0.000122 117.5 -106.5 -4.78345 116.549 -106.5 -8.83875 113.839 -106.5 -11.5483 109.784 -106.5 -12.4999 105 -106.5 -11.5483 100.216 -106.5 -8.83875 96.1612 -106.5 -4.78345 93.4515 -106.5 0.000122 92.5 -106.5 0.000122 92.5 -117.5 -4.78345 93.4515 -117.5 -8.83875 96.1612 -117.5 -11.5483 100.216 -117.5 -12.4999 105 -117.5 -11.5483 109.784 -117.5 -8.83875 113.839 -117.5 -4.78345 116.549 -117.5 0.000122 117.5 -117.5 4.78369 116.549 -117.5 8.83899 113.839 -117.5 11.5486 109.784 -117.5 12.5001 105 -117.5 11.5486 100.216 -117.5 8.83899 96.1612 -117.5 4.78369 93.4515 -117.5 4.78369 93.4515 -106.5 4.78369 93.4515 -117.5 8.83899 96.1612 -117.5 8.83899 96.1612 -106.5 8.83899 96.1612 -106.5 8.83899 96.1612 -117.5 11.5486 100.216 -117.5 11.5486 100.216 -106.5 11.5486 100.216 -106.5 11.5486 100.216 -117.5 12.5001 105 -117.5 12.5001 105 -106.5 12.5001 105 -106.5 12.5001 105 -117.5 11.5486 109.784 -117.5 11.5486 109.784 -106.5 11.5486 109.784 -106.5 11.5486 109.784 -117.5 8.83899 113.839 -117.5 8.83899 113.839 -106.5 8.83899 113.839 -106.5 8.83899 113.839 -117.5 4.78369 116.549 -117.5 4.78369 116.549 -106.5 4.78369 116.549 -106.5 4.78369 116.549 -117.5 0.000122 117.5 -117.5 0.000122 117.5 -106.5 0.000122 117.5 -106.5 0.000122 117.5 -117.5 -4.78345 116.549 -117.5 -4.78345 116.549 -106.5 -4.78345 116.549 -106.5 -4.78345 116.549 -117.5 -8.83875 113.839 -117.5 -8.83875 113.839 -106.5 -8.83875 113.839 -106.5 -8.83875 113.839 -117.5 -11.5483 109.784 -117.5 -11.5483 109.784 -106.5 -11.5483 109.784 -106.5 -11.5483 109.784 -117.5 -12.4999 105 -117.5 -12.4999 105 -106.5 -12.4999 105 -106.5 -12.4999 105 -117.5 -11.5483 100.216 -117.5 -11.5483 100.216 -106.5 -11.5483 100.216 -106.5 -11.5483 100.216 -117.5 -8.83875 96.1612 -117.5 -8.83875 96.1612 -106.5 -8.83875 96.1612 -106.5 -8.83875 96.1612 -117.5 -4.78345 93.4515 -117.5 -4.78345 93.4515 -106.5 -4.78345 93.4515 -106.5 -4.78345 93.4515 -117.5 0.000122 92.5 -117.5 0.000122 92.5 -106.5 0.000122 92.5 -106.5 0.000122 92.5 -117.5 4.78369 93.4515 -117.5 4.78369 93.4515 -106.5 -25.9999 92 -106.5 -25.9999 92 -106.5 -25.9999 92 -84.8281 -25.9999 92 -84.8281 -25.9999 118 -106.5 -25.9999 118 -106.5 -25.9999 118 -84.8281 -25.9999 118 -84.8281 0.000122 92 -89.9999 0.000122 118 -89.9999 26.0001 92 -106.5 26.0001 92 -106.5 26.0001 92 -84.8281 26.0001 92 -84.8281 26.0001 118 -106.5 26.0001 118 -106.5 26.0001 118 -84.8281 26.0001 118 -84.8281 -34.4414 123 -83.149 -63.6395 123 -63.6395 -83.149 123 -34.4414 -89.9999 123 0.000122 -83.149 123 34.4417 -63.6395 123 63.6398 -34.4414 123 83.1493 0.000122 123 90.0001 34.4417 123 83.1493 63.6398 123 63.6398 83.1493 123 34.4417 90.0001 123 0.000122 83.1493 123 -34.4414 63.6398 123 -63.6395 34.4417 123 -83.149 0.000122 123 -89.9999 0.000122 91 -89.9999 34.4417 91 -83.149 63.6398 91 -63.6395 83.1493 91 -34.4414 90.0001 91 0.000122 83.1493 91 34.4417 63.6398 91 63.6398 34.4417 91 83.1493 0.000122 91 90.0001 -34.4414 91 83.1493 -63.6395 91 63.6398 -83.149 91 34.4417 -89.9999 91 0.000122 -83.149 91 -34.4414 -63.6395 91 -63.6395 -34.4414 91 -83.149 -34.4414 123 -83.149 -34.4414 91 -83.149 -63.6395 91 -63.6395 -63.6395 123 -63.6395 -63.6395 123 -63.6395 -63.6395 91 -63.6395 -83.149 91 -34.4414 -83.149 123 -34.4414 -83.149 123 -34.4414 -83.149 91 -34.4414 -89.9999 91 0.000122 -89.9999 123 0.000122 -89.9999 123 0.000122 -89.9999 91 0.000122 -83.149 91 34.4417 -83.149 123 34.4417 -83.149 123 34.4417 -83.149 91 34.4417 -63.6395 91 63.6398 -63.6395 123 63.6398 -63.6395 123 63.6398 -63.6395 91 63.6398 -34.4414 91 83.1493 -34.4414 123 83.1493 -34.4414 123 83.1493 -34.4414 91 83.1493 0.000122 91 90.0001 0.000122 123 90.0001 0.000122 123 90.0001 0.000122 91 90.0001 34.4417 91 83.1493 34.4417 123 83.1493 34.4417 123 83.1493 34.4417 91 83.1493 63.6398 91 63.6398 63.6398 123 63.6398 63.6398 123 63.6398 63.6398 91 63.6398 83.1493 91 34.4417 83.1493 123 34.4417 83.1493 123 34.4417 83.1493 91 34.4417 90.0001 91 0.000122 90.0001 123 0.000122 90.0001 123 0.000122 90.0001 91 0.000122 83.1493 91 -34.4414 83.1493 123 -34.4414 83.1493 123 -34.4414 83.1493 91 -34.4414 63.6398 91 -63.6395 63.6398 123 -63.6395 63.6398 123 -63.6395 63.6398 91 -63.6395 34.4417 91 -83.149 34.4417 123 -83.149 34.4417 123 -83.149 34.4417 91 -83.149 0.000122 91 -89.9999 0.000122 123 -89.9999 0.000122 123 -89.9999 0.000122 91 -89.9999 -34.4414 91 -83.149 -34.4414 123 -83.149 42.478 91 102.551 42.478 56 102.551 78.489 56 78.489 78.489 91 78.489 0.000122 91 111 0.000122 56 111 42.478 56 102.551 42.478 91 102.551 -42.4777 91 102.551 -42.4777 56 102.551 0.000122 56 111 0.000122 91 111 -78.4888 91 78.489 -78.4888 56 78.489 -42.4777 56 102.551 -42.4777 91 102.551 -102.551 91 42.478 -102.551 56 42.478 -78.4888 56 78.489 -78.4888 91 78.489 -111 91 0.000122 -111 56 0.000122 -102.551 56 42.478 -102.551 91 42.478 -102.551 91 -42.4778 -102.551 56 -42.4778 -111 56 0.000122 -111 91 0.000122 -78.4888 91 -78.4888 -78.4888 56 -78.4888 -102.551 56 -42.4778 -102.551 91 -42.4778 -42.4777 91 -102.551 -42.4777 56 -102.551 -78.4888 56 -78.4888 -78.4888 91 -78.4888 -42.4777 91 -102.551 -78.4888 91 -78.4888 -102.551 91 -42.4778 -111 91 0.000122 -102.551 91 42.478 -78.4888 91 78.489 -42.4777 91 102.551 0.000122 91 111 42.478 91 102.551 78.489 91 78.489 97.0001 91 50.7852 97.0001 91 -50.7849 78.489 91 -78.4888 42.478 91 -102.551 0.000122 91 -111 97.0001 91 50.7852 78.489 91 78.489 78.489 56 78.489 97.0001 56 50.7852 0.000122 56 -111 42.478 56 -102.551 78.489 56 -78.4888 97.0001 56 -50.7849 97.0001 56 50.7852 78.489 56 78.489 42.478 56 102.551 0.000122 56 111 -42.4777 56 102.551 -78.4888 56 78.489 -102.551 56 42.478 -111 56 0.000122 -102.551 56 -42.4778 -78.4888 56 -78.4888 -42.4777 56 -102.551 97.0001 56 50.7852 97.0001 56 -50.7849 97.0001 91 -50.7849 97.0001 91 50.7852 97.0001 91 -50.7849 97.0001 56 -50.7849 78.489 56 -78.4888 78.489 91 -78.4888 78.489 91 -78.4888 78.489 56 -78.4888 42.478 56 -102.551 42.478 91 -102.551 42.478 91 -102.551 42.478 56 -102.551 0.000122 56 -111 0.000122 91 -111 0.000122 91 -111 0.000122 56 -111 -42.4777 56 -102.551 -42.4777 91 -102.551 166.5 91.5 26.0001 166.5 91.5 -25.9999 192.5 91.5 -25.9999 192.5 91.5 26.0001 192.5 91.5 26.0001 192.5 103 26.0001 166.5 103 26.0001 166.5 91.5 26.0001 166.5 91.5 26.0001 166.5 103 26.0001 166.5 103 -25.9999 166.5 91.5 -25.9999 166.5 91.5 -25.9999 166.5 103 -25.9999 192.5 103 -25.9999 192.5 91.5 -25.9999 192.5 91.5 -25.9999 192.5 103 -25.9999 192.5 103 26.0001 192.5 91.5 26.0001 192.5 103 26.0001 192.5 103 -25.9999 166.5 103 -25.9999 166.5 103 26.0001 189.613 103 7.34741 183.363 103 11.8883 175.637 103 11.8883 169.387 103 7.34741 167 103 0.000122 169.387 103 -7.34717 175.637 103 -11.8881 183.363 103 -11.8881 189.613 103 -7.34717 192 103 0.000122 192 114 0.000122 189.613 114 -7.34717 183.363 114 -11.8881 175.637 114 -11.8881 169.387 114 -7.34717 167 114 0.000122 169.387 114 7.34741 175.637 114 11.8883 183.363 114 11.8883 189.613 114 7.34741 189.613 103 7.34741 189.613 114 7.34741 183.363 114 11.8883 183.363 103 11.8883 183.363 103 11.8883 183.363 114 11.8883 175.637 114 11.8883 175.637 103 11.8883 175.637 103 11.8883 175.637 114 11.8883 169.387 114 7.34741 169.387 103 7.34741 169.387 103 7.34741 169.387 114 7.34741 167 114 0.000122 167 103 0.000122 167 103 0.000122 167 114 0.000122 169.387 114 -7.34717 169.387 103 -7.34717 169.387 103 -7.34717 169.387 114 -7.34717 175.637 114 -11.8881 175.637 103 -11.8881 175.637 103 -11.8881 175.637 114 -11.8881 183.363 114 -11.8881 183.363 103 -11.8881 183.363 103 -11.8881 183.363 114 -11.8881 189.613 114 -7.34717 189.613 103 -7.34717 189.613 103 -7.34717 189.613 114 -7.34717 192 114 0.000122 192 103 0.000122 192 103 0.000122 192 114 0.000122 189.613 114 7.34741 189.613 103 7.34741 -42.4778 56 -102.551 -78.4888 56 -78.4888 -102.551 56 -42.4778 -111 56 0.000122 -102.551 56 42.478 -78.4888 56 78.489 -42.4778 56 102.551 0.000122 56 111 42.478 56 102.551 78.489 56 78.489 102.551 56 42.478 111 56 0.000122 102.551 56 -42.4778 78.489 56 -78.4888 42.478 56 -102.551 0.000122 56 -111 0.000122 0 -111 42.478 0 -102.551 78.489 0 -78.4888 102.551 0 -42.4778 111 0 0.000122 102.551 0 42.478 78.489 0 78.489 42.478 0 102.551 0.000122 0 111 -42.4778 0 102.551 -78.4888 0 78.489 -102.551 0 42.478 -111 0 0.000122 -102.551 0 -42.4778 -78.4888 0 -78.4888 -42.4778 0 -102.551 0.000122 56 -111 0.000122 0 -111 -42.4778 0 -102.551 -42.4778 56 -102.551 -42.4778 56 -102.551 -42.4778 0 -102.551 -78.4888 0 -78.4888 -78.4888 56 -78.4888 -78.4888 56 -78.4888 -78.4888 0 -78.4888 -102.551 0 -42.4778 -102.551 56 -42.4778 -102.551 56 -42.4778 -102.551 0 -42.4778 -111 0 0.000122 -111 56 0.000122 -111 56 0.000122 -111 0 0.000122 -102.551 0 42.478 -102.551 56 42.478 -102.551 56 42.478 -102.551 0 42.478 -78.4888 0 78.489 -78.4888 56 78.489 -78.4888 56 78.489 -78.4888 0 78.489 -42.4778 0 102.551 -42.4778 56 102.551 -42.4778 56 102.551 -42.4778 0 102.551 0.000122 0 111 0.000122 56 111 0.000122 56 111 0.000122 0 111 42.478 0 102.551 42.478 56 102.551 42.478 56 102.551 42.478 0 102.551 78.489 0 78.489 78.489 56 78.489 78.489 56 78.489 78.489 0 78.489 102.551 0 42.478 102.551 56 42.478 102.551 56 42.478 102.551 0 42.478 111 0 0.000122 111 56 0.000122 111 56 0.000122 111 0 0.000122 102.551 0 -42.4778 102.551 56 -42.4778 102.551 56 -42.4778 102.551 0 -42.4778 78.489 0 -78.4888 78.489 56 -78.4888 78.489 56 -78.4888 78.489 0 -78.4888 42.478 0 -102.551 42.478 56 -102.551 42.478 56 -102.551 42.478 0 -102.551 0.000122 0 -111 0.000122 56 -111 22.0044 -53.5 -53.1229 40.6588 -53.5 -40.6586 53.1232 -53.5 -22.0042 57.5001 -53.5 0.000122 53.1232 -53.5 22.0044 40.6588 -53.5 40.6588 22.0044 -53.5 53.1232 0.000122 -53.5 57.5001 -22.0042 -53.5 53.1232 -40.6586 -53.5 40.6588 -53.1229 -53.5 22.0044 -57.4999 -53.5 0.000122 -53.1229 -53.5 -22.0042 -40.6586 -53.5 -40.6586 -22.0042 -53.5 -53.1229 0.000122 -53.5 -57.4999 0.000122 0 -111 -42.4778 0 -102.551 -78.4888 0 -78.4888 -102.551 0 -42.4778 -111 0 0.000122 -102.551 0 42.478 -78.4888 0 78.489 -42.4778 0 102.551 0.000122 0 111 42.478 0 102.551 78.489 0 78.489 102.551 0 42.478 111 0 0.000122 102.551 0 -42.4778 78.489 0 -78.4888 42.478 0 -102.551 0.000122 -53.5 -57.4999 0.000122 0 -111 42.478 0 -102.551 22.0044 -53.5 -53.1229 22.0044 -53.5 -53.1229 42.478 0 -102.551 78.489 0 -78.4888 40.6588 -53.5 -40.6586 40.6588 -53.5 -40.6586 78.489 0 -78.4888 102.551 0 -42.4778 53.1232 -53.5 -22.0042 53.1232 -53.5 -22.0042 102.551 0 -42.4778 111 0 0.000122 57.5001 -53.5 0.000122 57.5001 -53.5 0.000122 111 0 0.000122 102.551 0 42.478 53.1232 -53.5 22.0044 53.1232 -53.5 22.0044 102.551 0 42.478 78.489 0 78.489 40.6588 -53.5 40.6588 40.6588 -53.5 40.6588 78.489 0 78.489 42.478 0 102.551 22.0044 -53.5 53.1232 22.0044 -53.5 53.1232 42.478 0 102.551 0.000122 0 111 0.000122 -53.5 57.5001 0.000122 -53.5 57.5001 0.000122 0 111 -42.4778 0 102.551 -22.0042 -53.5 53.1232 -22.0042 -53.5 53.1232 -42.4778 0 102.551 -78.4888 0 78.489 -40.6586 -53.5 40.6588 -40.6586 -53.5 40.6588 -78.4888 0 78.489 -102.551 0 42.478 -53.1229 -53.5 22.0044 -53.1229 -53.5 22.0044 -102.551 0 42.478 -111 0 0.000122 -57.4999 -53.5 0.000122 -57.4999 -53.5 0.000122 -111 0 0.000122 -102.551 0 -42.4778 -53.1229 -53.5 -22.0042 -53.1229 -53.5 -22.0042 -102.551 0 -42.4778 -78.4888 0 -78.4888 -40.6586 -53.5 -40.6586 -40.6586 -53.5 -40.6586 -78.4888 0 -78.4888 -42.4778 0 -102.551 -22.0042 -53.5 -53.1229 -22.0042 -53.5 -53.1229 -42.4778 0 -102.551 0.000122 0 -111 0.000122 -53.5 -57.4999 53.1232 -63 22.0044 40.6588 -63 40.6588 22.0044 -63 53.1232 0.000122 -63 57.5001 -22.0042 -63 53.1232 -40.6586 -63 40.6588 -53.1229 -63 22.0044 -57.4999 -63 0.000122 -53.1229 -63 -22.0042 -40.6586 -63 -40.6586 -22.0042 -63 -53.1229 0.000122 -63 -57.4999 22.0044 -63 -53.1229 40.6588 -63 -40.6586 53.1232 -63 -22.0042 57.5001 -63 0.000122 57.5001 -53.5 0.000122 53.1232 -53.5 -22.0042 40.6588 -53.5 -40.6586 22.0044 -53.5 -53.1229 0.000122 -53.5 -57.4999 -22.0042 -53.5 -53.1229 -40.6586 -53.5 -40.6586 -53.1229 -53.5 -22.0042 -57.4999 -53.5 0.000122 -53.1229 -53.5 22.0044 -40.6586 -53.5 40.6588 -22.0042 -53.5 53.1232 0.000122 -53.5 57.5001 22.0044 -53.5 53.1232 40.6588 -53.5 40.6588 53.1232 -53.5 22.0044 57.5001 -63 0.000122 57.5001 -53.5 0.000122 53.1232 -53.5 22.0044 53.1232 -63 22.0044 53.1232 -63 22.0044 53.1232 -53.5 22.0044 40.6588 -53.5 40.6588 40.6588 -63 40.6588 40.6588 -63 40.6588 40.6588 -53.5 40.6588 22.0044 -53.5 53.1232 22.0044 -63 53.1232 22.0044 -63 53.1232 22.0044 -53.5 53.1232 0.000122 -53.5 57.5001 0.000122 -63 57.5001 0.000122 -63 57.5001 0.000122 -53.5 57.5001 -22.0042 -53.5 53.1232 -22.0042 -63 53.1232 -22.0042 -63 53.1232 -22.0042 -53.5 53.1232 -40.6586 -53.5 40.6588 -40.6586 -63 40.6588 -40.6586 -63 40.6588 -40.6586 -53.5 40.6588 -53.1229 -53.5 22.0044 -53.1229 -63 22.0044 -53.1229 -63 22.0044 -53.1229 -53.5 22.0044 -57.4999 -53.5 0.000122 -57.4999 -63 0.000122 -57.4999 -63 0.000122 -57.4999 -53.5 0.000122 -53.1229 -53.5 -22.0042 -53.1229 -63 -22.0042 -53.1229 -63 -22.0042 -53.1229 -53.5 -22.0042 -40.6586 -53.5 -40.6586 -40.6586 -63 -40.6586 -40.6586 -63 -40.6586 -40.6586 -53.5 -40.6586 -22.0042 -53.5 -53.1229 -22.0042 -63 -53.1229 -22.0042 -63 -53.1229 -22.0042 -53.5 -53.1229 0.000122 -53.5 -57.4999 0.000122 -63 -57.4999 0.000122 -63 -57.4999 0.000122 -53.5 -57.4999 22.0044 -53.5 -53.1229 22.0044 -63 -53.1229 22.0044 -63 -53.1229 22.0044 -53.5 -53.1229 40.6588 -53.5 -40.6586 40.6588 -63 -40.6586 40.6588 -63 -40.6586 40.6588 -53.5 -40.6586 53.1232 -53.5 -22.0042 53.1232 -63 -22.0042 53.1232 -63 -22.0042 53.1232 -53.5 -22.0042 57.5001 -53.5 0.000122 57.5001 -63 0.000122 97.5001 28.7013 69.291 97.5001 53.033 53.0331 97.5001 69.291 28.7014 97.5001 75 0.000122 97.5001 69.291 -28.7012 97.5001 53.033 -53.0328 97.5001 28.7013 -69.2909 97.5001 0 -74.9999 97.5001 -28.7012 -69.2909 97.5001 -53.033 -53.033 97.5001 -69.291 -28.7012 97.5001 -75 0.000122 97.5001 -69.291 28.7014 97.5001 -53.033 53.0331 97.5001 -28.7013 69.291 97.5001 0 75.0001 97.5001 -69.291 -28.7012 110.5 -81.3014 -33.676 110.5 -88 0.000122 97.5001 -75 0.000122 97.5001 -75 0.000122 110.5 -88 0.000122 110.5 -81.3014 33.6763 97.5001 -69.291 28.7014 97.5001 -69.291 28.7014 110.5 -81.3014 33.6763 110.5 -62.2254 62.2256 97.5001 -53.033 53.0331 97.5001 -53.033 53.0331 110.5 -62.2254 62.2256 110.5 -33.6761 81.3015 97.5001 -28.7013 69.291 97.5001 -28.7013 69.291 110.5 -33.6761 81.3015 110.5 0 88.0001 97.5001 0 75.0001 97.5001 0 75.0001 110.5 0 88.0001 110.5 33.6761 81.3015 97.5001 28.7013 69.291 97.5001 28.7013 69.291 110.5 33.6761 81.3015 110.5 62.2254 62.2255 97.5001 53.033 53.0331 97.5001 53.033 53.0331 110.5 62.2254 62.2255 110.5 81.3014 33.6763 97.5001 69.291 28.7014 97.5001 69.291 28.7014 110.5 81.3014 33.6763 110.5 88 0.000122 97.5001 75 0.000122 97.5001 75 0.000122 110.5 88 0.000122 110.5 81.3014 -33.676 97.5001 69.291 -28.7012 97.5001 69.291 -28.7012 110.5 81.3014 -33.676 110.5 62.2254 -62.2252 97.5001 53.033 -53.0328 97.5001 53.033 -53.0328 110.5 62.2254 -62.2252 110.5 33.6762 -81.3013 97.5001 28.7013 -69.2909 97.5001 28.7013 -69.2909 110.5 33.6762 -81.3013 110.5 0 -87.9999 97.5001 0 -74.9999 97.5001 0 -74.9999 110.5 0 -87.9999 110.5 -33.6761 -81.3013 97.5001 -28.7012 -69.2909 97.5001 -28.7012 -69.2909 110.5 -33.6761 -81.3013 110.5 -62.2254 -62.2253 97.5001 -53.033 -53.033 97.5001 -53.033 -53.033 110.5 -62.2254 -62.2253 110.5 -81.3014 -33.676 97.5001 -69.291 -28.7012 193 -81.3014 -33.676 110.5 -81.3014 -33.676 110.5 -62.2254 -62.2253 193 -62.2254 -62.2253 193 -62.2254 -62.2253 110.5 -62.2254 -62.2253 110.5 -33.6761 -81.3013 193 -33.6761 -81.3013 193 -33.6761 -81.3013 110.5 -33.6761 -81.3013 110.5 0 -87.9999 193 0 -87.9999 193 0 -87.9999 110.5 0 -87.9999 110.5 33.6762 -81.3013 193 33.6762 -81.3013 193 33.6762 -81.3013 110.5 33.6762 -81.3013 110.5 62.2254 -62.2252 193 62.2254 -62.2252 193 62.2254 -62.2252 110.5 62.2254 -62.2252 110.5 81.3014 -33.676 193 81.3014 -33.676 193 81.3014 -33.676 110.5 81.3014 -33.676 110.5 88 0.000122 193 88 0.000122 193 88 0.000122 110.5 88 0.000122 110.5 81.3014 33.6763 193 81.3014 33.6763 193 81.3014 33.6763 110.5 81.3014 33.6763 110.5 62.2254 62.2255 193 62.2254 62.2255 193 62.2254 62.2255 110.5 62.2254 62.2255 110.5 33.6761 81.3015 193 33.6761 81.3015 193 33.6761 81.3015 110.5 33.6761 81.3015 110.5 0 88.0001 193 0 88.0001 193 0 88.0001 110.5 0 88.0001 110.5 -33.6761 81.3015 193 -33.6762 81.3015 193 -33.6762 81.3015 110.5 -33.6761 81.3015 110.5 -62.2254 62.2256 193 -62.2254 62.2255 193 -62.2254 62.2255 110.5 -62.2254 62.2256 110.5 -81.3014 33.6763 193 -81.3014 33.6763 193 -81.3014 33.6763 110.5 -81.3014 33.6763 110.5 -88 0.000122 193 -88 0.000122 193 -88 0.000122 110.5 -88 0.000122 110.5 -81.3014 -33.676 193 -81.3014 -33.676 110.5 -62.2254 -62.2253 110.5 -62.2254 -62.2253 110.5 -33.6761 -81.3013 110.5 -33.6761 -81.3013 110.5 0 -87.9999 110.5 0 -87.9999 110.5 33.6762 -81.3013 110.5 33.6762 -81.3013 110.5 62.2254 -62.2252 110.5 62.2254 -62.2252 114.5 0 -91.9999 115.637 -35.6421 -86.0476 115.637 -35.6421 -86.0476 115.637 35.6421 -86.0476 115.637 35.6421 -86.0476 120.269 -29 -91.9999 120.269 -29 -91.9999 120.269 29 -91.9999 120.269 29 -91.9999 193 29 -91.9999 193 29 -91.9999 115.637 -35.6421 -86.0476 115.637 35.6421 -86.0476 120.269 -29 -91.9999 120.269 29 -91.9999 193 -62.2254 -62.2253 193 -62.2254 -62.2253 193 -33.6761 -81.3013 193 -29 -91.9999 193 0 -87.9999 193 33.6762 -81.3013 193 62.2254 -62.2252 193 62.2254 -62.2252 162.5 81.3014 -33.676 162.5 81.3014 -33.676 162.5 81.3014 33.6763 162.5 81.3014 33.6763 162.5 88 0.000122 162.5 91.5 30.0001 162.5 91.5 30.0001 162.5 91.5 -29.9999 162.5 91.5 -29.9999 193 81.3014 -33.676 193 81.3014 -33.676 193 81.3014 33.6763 193 81.3014 33.6763 193 88 0.000122 193 91.5 30.0001 193 91.5 30.0001 193 91.5 -29.9999 193 91.5 -29.9999 0.000122 -55.1745 57.5001 0.000122 -55.1745 57.5001 0.000122 -55.1745 57.5001 0.000122 -55.1745 57.5001 0.000122 -53.5 -57.4999 0.000122 -53.5 -57.4999 0.000122 -53.5 57.5001 0.000122 -53.5 57.5001 0.000122 -50.1281 60.8721 0.000122 -50.1281 60.8721 0.000122 -50.1281 60.8721 0.000122 -50.1281 -60.8718 0.000122 -50.1281 -60.8718 22.0044 -53.5 -53.1229 22.0044 -53.5 -53.1229 22.0044 -53.5 53.1232 22.0044 -53.5 53.1232 22.0044 -53.5 53.1232 40.6588 -53.5 -40.6586 40.6588 -53.5 -40.6586 40.6588 -53.5 40.6588 40.6588 -53.5 40.6588 53.1232 -53.5 -22.0042 53.1232 -53.5 -22.0042 53.1232 -53.5 -22.0042 53.1232 -53.5 22.0044 53.1232 -53.5 22.0044 53.1232 -53.5 22.0044 57.5001 -63 0.000122 57.5001 -63 0.000122 57.5001 -63 0.000122 57.5001 -53.5 0.000122 57.5001 -53.5 0.000122 57.5001 -53.5 0.000122 57.5001 -53.5 0.000122 76.2274 0 -79.9999 76.2274 0 -79.9999 76.2274 0 -79.9999 76.2274 0 -79.9999 97.9429 56 -49.374 97.9429 56 -49.374 97.9429 56 -49.374 102.5 -30.6147 -73.9103 102.5 -30.6147 -73.9103 102.5 -30.6147 -73.9103 102.5 0 80.0001 102.5 0 80.0001 102.5 0 80.0001 102.5 0 80.0001 103.838 -63 -49.3051 103.838 -63 -49.3051 103.838 -63 -49.3051 103.838 -63 49.3053 103.838 -63 49.3053 103.838 -63 49.3053 103.838 -63 49.3053 0.000122 -55.1745 -57.4999 0.000122 -55.1745 -57.4999 0.000122 -55.1745 -57.4999 0.000122 -50.1281 -60.8718 22.0044 -59.6194 53.1232 22.0044 -59.6194 53.1232 22.0044 -59.6194 53.1232 22.0044 -53.5 -53.1229 22.0044 -53.5 -53.1229 22.0044 -53.5 53.1232 27.7183 -63 -49.3051 27.7183 -63 -49.3051 27.7183 -63 -49.3051 31.295 -30.6147 73.9105 31.295 -30.6147 73.9105 31.295 -30.6147 73.9105 40.6588 -63 40.6588 40.6588 -63 40.6588 40.6588 -53.5 -40.6586 40.6588 -53.5 40.6588 40.6588 -53.5 40.6588 53.1232 -53.5 22.0044 76.2274 0 80.0001 76.2274 0 80.0001 76.2274 0 80.0001 81.5482 30.6147 73.9105 81.5482 30.6147 73.9105 92.7595 56 -57.1313 92.7595 56 -57.1313 92.7595 56 -57.1313 97.5001 -63 -38.1162 97.5001 -63 -38.1162 97.5001 -63 -38.1162 97.5001 -28.7012 -69.2909 97.5001 -28.7012 -69.2909 97.5001 -13.5 0.000122 97.5001 -13.5 0.000122 97.5001 0 -50.0365 97.5001 0 -50.0365 97.5001 0 -50.0365 97.5001 0 50.0367 97.5001 0 50.0367 97.5001 0 50.0367 97.5001 0 75.0001 97.5001 0 75.0001 97.9429 56 49.3743 97.9429 56 49.3743 97.9429 56 49.3743 102.5 -30.6147 73.9105 102.5 -30.6147 73.9105 102.5 -30.6147 73.9105 102.5 0 80.0001 102.5 30.6147 73.9105 102.5 30.6147 73.9105 102.5 30.6147 -73.9103 102.5 30.6147 -73.9103 103.838 -63 -49.3051 4.68286 -56.5686 56.5686 4.68286 -56.5685 -56.5685 22.0044 -59.6194 -53.1229 27.7183 -63 49.3053 30.2295 -32.0069 72.9802 30.2295 -32.0069 -72.98 31.295 -30.6147 -73.9103 31.295 -30.6147 -73.9103 40.6588 -63 -40.6586 40.6588 -53.5 -40.6586 53.1232 -63 -22.0042 53.1232 -63 22.0044 53.1232 -53.5 -22.0042 78.489 0 -78.4888 78.489 0 -78.4888 78.489 0 -78.4888 78.489 0 78.489 78.489 0 78.489 78.489 0 78.489 78.489 7.59704 78.489 78.489 7.59705 -78.4888 81.5482 30.6147 -73.9103 92.7595 56 57.1315 97.5001 -63 38.1165 97.5001 -53.033 53.0331 97.5001 -53.033 -53.033 97.5001 -28.7013 69.291 97.5001 -5.46676 -40.3857 97.5001 -5.46676 40.386 97.5001 0 -74.9999 97.5001 0 -74.9999 97.5001 28.7013 -69.2909 97.5001 28.7013 69.291 97.5001 53.033 -53.0328 97.5001 53.033 53.0331 97.5001 55.0351 50.0367 97.5001 55.0351 -50.0365 97.9429 56 -49.374 97.9429 56 49.3743 101.696 56 -55.9999 101.696 56 56.0001 102.5 -56.5685 56.5687 102.5 -56.5685 -56.5685 102.5 0 -79.9999 102.5 0 -79.9999 102.655 56 -57.1313 102.655 56 -57.1313 102.655 56 57.1315 102.655 56 57.1315 103.838 -63 49.3053 143.401 -81.3014 33.6763 143.401 -81.3014 33.6763 143.401 -81.3014 -33.676 143.401 -81.3014 -33.676 149 -91 -41.1499 149 -91 -41.1499 149 -91 -41.1499 149 -91 41.1501 149 -91 41.1501 149 -91 41.1501 193 -91 -41.1499 193 -91 -41.1499 193 -91 -41.1499 193 -91 41.1501 193 -91 41.1501 193 -91 41.1501 193 -81.3014 33.6763 193 -81.3014 33.6763 193 -81.3014 -33.676 193 -81.3014 -33.676 132.387 -62.2254 62.2256 132.387 -62.2254 62.2256 132.387 -62.2254 -62.2252 132.387 -62.2254 -62.2252 147.268 -88 0.000122 193 -88 0.000122 193 -62.2254 62.2255 193 -62.2254 62.2255 193 -62.2254 -62.2253 193 -62.2254 -62.2253 110.5 -62.2254 62.2256 110.5 -62.2254 62.2256 110.5 -33.6761 81.3015 110.5 -33.6761 81.3015 110.5 0 88.0001 110.5 0 88.0001 110.5 33.6761 81.3015 110.5 33.6761 81.3015 110.5 62.2254 62.2255 110.5 62.2254 62.2255 114.5 0 92.0001 115.637 -35.6421 86.0479 115.637 -35.6421 86.0479 115.637 35.6421 86.0479 115.637 35.6421 86.0479 120.269 -29 92.0001 120.269 -29 92.0001 120.269 29 92.0001 120.269 29 92.0001 193 29 92.0001 193 29 92.0001 115.637 -35.6421 86.0479 115.637 35.6421 86.0479 120.269 -29 92.0001 120.269 29 92.0001 193 -62.2254 62.2255 193 -62.2254 62.2255 193 -33.6762 81.3015 193 -29 92.0001 193 0 88.0001 193 33.6761 81.3015 193 62.2254 62.2255 193 62.2254 62.2255 194 -62.2254 -62.2253 194 -33.6761 -81.3013 194 0 -87.9999 194 33.6762 -81.3013 194 62.2254 -62.2252 194 81.3014 -33.676 194 88 0.000122 194 81.3014 33.6763 194 62.2254 62.2255 194 33.6761 81.3015 194 0 88.0001 194 -33.6762 81.3015 194 -62.2254 62.2255 194 -81.3014 33.6763 194 -88 0.000122 194 -81.3014 -33.676 193 -81.3014 -33.676 193 -62.2254 -62.2253 194 -62.2254 -62.2253 194 -81.3014 -33.676 193 -88 0.000122 193 -81.3014 -33.676 194 -81.3014 -33.676 194 -88 0.000122 193 -81.3014 33.6763 193 -88 0.000122 194 -88 0.000122 194 -81.3014 33.6763 193 -62.2254 62.2255 193 -81.3014 33.6763 194 -81.3014 33.6763 194 -62.2254 62.2255 193 -33.6762 81.3015 193 -62.2254 62.2255 194 -62.2254 62.2255 194 -33.6762 81.3015 193 0 88.0001 193 -33.6762 81.3015 194 -33.6762 81.3015 194 0 88.0001 193 33.6761 81.3015 193 0 88.0001 194 0 88.0001 194 33.6761 81.3015 193 62.2254 62.2255 193 33.6761 81.3015 194 33.6761 81.3015 194 62.2254 62.2255 193 81.3014 33.6763 193 62.2254 62.2255 194 62.2254 62.2255 194 81.3014 33.6763 193 88 0.000122 193 81.3014 33.6763 194 81.3014 33.6763 194 88 0.000122 193 81.3014 -33.676 193 88 0.000122 194 88 0.000122 194 81.3014 -33.676 193 62.2254 -62.2252 193 81.3014 -33.676 194 81.3014 -33.676 194 62.2254 -62.2252 193 33.6762 -81.3013 193 62.2254 -62.2252 194 62.2254 -62.2252 194 33.6762 -81.3013 193 0 -87.9999 193 33.6762 -81.3013 194 33.6762 -81.3013 194 0 -87.9999 193 -33.6761 -81.3013 193 0 -87.9999 194 0 -87.9999 194 -33.6761 -81.3013 193 -62.2254 -62.2253 193 -33.6761 -81.3013 194 -33.6761 -81.3013 194 -62.2254 -62.2253 - - - - - - - - - - 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0.382672 -0.923884 0 0.382672 -0.923884 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 1 0 0 1 0 0 1 0 0 1 0 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.70713 0.707083 0 0.70713 0.707083 0 0.70713 0.707083 0 0.70713 0.707083 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.382672 -0.923884 0 0.382672 -0.923884 0 -1 0 0 0 0 -1 -1 0 0 0.195074 0 0.980788 -1 0 0 0 0 -1 -1 0 0 0.195074 0 0.980788 0 0 1 0 0 1 0 0 -1 1 0 0 -0.195074 0 0.980788 1 0 0 0 0 -1 1 0 0 -0.195074 0 0.980788 1 0 0 0 1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 0 0 1 0 0 1 0 0 1 0 0 1 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.707083 0 0.70713 0.707083 0 0.70713 0.707083 0 0.70713 0.707083 0 0.70713 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 1 0 0 1 0 0 1 0 0 1 0 0 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.382672 0 -0.923884 -0.382672 0 -0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.70713 0 0.707083 0.70713 0 0.707083 0 0 1 0 0 1 0.382672 0 0.923884 0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 0 0 1 0 0 1 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.707083 0 0.70713 -0.707083 0 0.70713 -1 0 0 -1 0 0 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -1 0 0 -1 0 0 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.707083 0 -0.70713 -0.707083 0 -0.70713 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.956947 0 0.290262 0.70713 0 0.707083 0.70713 0 0.707083 0.956947 0 0.290262 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.956947 0 0.290262 0.956947 0 -0.290262 0.956947 0 -0.290262 0.956947 0 0.290262 0.956947 0 -0.290262 0.956947 0 -0.290262 0.70713 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.707083 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.382672 0 -0.923884 -0.382672 0 -0.923884 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.809016 0 0.587786 0.809016 0 0.587786 0.309 0 0.951062 0.309 0 0.951062 0.309 0 0.951062 0.309 0 0.951062 -0.309 0 0.951062 -0.309 0 0.951062 -0.309 0 0.951062 -0.309 0 0.951062 -0.809016 0 0.587786 -0.809016 0 0.587786 -0.809016 0 0.587786 -0.809016 0 0.587786 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.809016 0 -0.587786 -0.809016 0 -0.587786 -0.809016 0 -0.587786 -0.809016 0 -0.587786 -0.309 0 -0.951062 -0.309 0 -0.951062 -0.309 0 -0.951062 -0.309 0 -0.951062 0.309 0 -0.951062 0.309 0 -0.951062 0.309 0 -0.951062 0.309 0 -0.951062 0.809016 0 -0.587786 0.809016 0 -0.587786 0.809016 0 -0.587786 0.809016 0 -0.587786 1 0 0 1 0 0 1 0 0 1 0 0 0.809016 0 0.587786 0.809016 0 0.587786 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -1 0 0 -1 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 0 0 1 0 0 1 0 0 1 0 0 1 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.707083 0 0.70713 0.707083 0 0.70713 0.707083 0 0.70713 0.707083 0 0.70713 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 1 0 0 1 0 0 1 0 0 1 0 0 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0 0 -1 0 0 -1 0.192816 -0.863757 -0.46556 0.356304 -0.863768 -0.356304 0.46556 -0.863757 -0.192816 0.503891 -0.863767 0 0.46556 -0.863757 0.192816 0.356304 -0.863768 0.356304 0.192816 -0.863757 0.46556 0 -0.863767 0.503891 -0.192816 -0.863757 0.46556 -0.356304 -0.863768 0.356304 -0.46556 -0.863757 0.192816 -0.503891 -0.863767 0 -0.46556 -0.863757 -0.192816 -0.356304 -0.863768 -0.356304 -0.192816 -0.863757 -0.46556 0 -0.863767 -0.503891 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -0.863767 -0.503891 0 -0.70713 -0.707083 0.270577 -0.707117 -0.653279 0.192816 -0.863757 -0.46556 0.192816 -0.863757 -0.46556 0.270577 -0.707117 -0.653279 0.499985 -0.707128 -0.499985 0.356304 -0.863768 -0.356304 0.356304 -0.863768 -0.356304 0.499985 -0.707128 -0.499985 0.653279 -0.707117 -0.270577 0.46556 -0.863757 -0.192816 0.46556 -0.863757 -0.192816 0.653279 -0.707117 -0.270577 0.707083 -0.70713 0 0.503891 -0.863767 0 0.503891 -0.863767 0 0.707083 -0.70713 0 0.653279 -0.707117 0.270577 0.46556 -0.863757 0.192816 0.46556 -0.863757 0.192816 0.653279 -0.707117 0.270577 0.499985 -0.707128 0.499985 0.356304 -0.863768 0.356304 0.356304 -0.863768 0.356304 0.499985 -0.707128 0.499985 0.270577 -0.707117 0.653279 0.192816 -0.863757 0.46556 0.192816 -0.863757 0.46556 0.270577 -0.707117 0.653279 0 -0.70713 0.707083 0 -0.863767 0.503891 0 -0.863767 0.503891 0 -0.70713 0.707083 -0.270577 -0.707117 0.653279 -0.192816 -0.863757 0.46556 -0.192816 -0.863757 0.46556 -0.270577 -0.707117 0.653279 -0.499985 -0.707128 0.499985 -0.356304 -0.863768 0.356304 -0.356304 -0.863768 0.356304 -0.499985 -0.707128 0.499985 -0.653279 -0.707117 0.270577 -0.46556 -0.863757 0.192816 -0.46556 -0.863757 0.192816 -0.653279 -0.707117 0.270577 -0.707083 -0.70713 0 -0.503891 -0.863767 0 -0.503891 -0.863767 0 -0.707083 -0.70713 0 -0.653279 -0.707117 -0.270577 -0.46556 -0.863757 -0.192816 -0.46556 -0.863757 -0.192816 -0.653279 -0.707117 -0.270577 -0.499985 -0.707128 -0.499985 -0.356304 -0.863768 -0.356304 -0.356304 -0.863768 -0.356304 -0.499985 -0.707128 -0.499985 -0.270577 -0.707117 -0.653279 -0.192816 -0.863757 -0.46556 -0.192816 -0.863757 -0.46556 -0.270577 -0.707117 -0.653279 0 -0.70713 -0.707083 0 -0.863767 -0.503891 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.707083 0 0.70713 0.707083 0 0.70713 0.707083 0 0.70713 0.707083 0 0.70713 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 0 0 1 0 0 1 0 0 1 0 0 1 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.70713 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.70713 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 1 0 0 1 0 0 -0.863773 0.192816 0.465529 -0.863768 0.356304 0.356304 -0.863757 0.46556 0.192816 -0.863767 0.503891 0 -0.863757 0.46556 -0.192816 -0.863768 0.356304 -0.356304 -0.863757 0.192816 -0.46556 -0.863767 0 -0.503891 -0.863757 -0.192816 -0.46556 -0.863768 -0.356304 -0.356304 -0.863757 -0.46556 -0.192816 -0.863767 -0.503891 0 -0.863757 -0.46556 0.192816 -0.863768 -0.356304 0.356304 -0.863773 -0.192816 0.465529 -0.863767 0 0.503891 -0.863757 -0.46556 -0.192816 -0.505661 -0.821362 -0.263955 -0.505661 -0.859852 -0.0704367 -0.863767 -0.503891 0 -0.863767 -0.503891 0 -0.505661 -0.859852 0.0704367 -0.505661 -0.821362 0.263955 -0.863757 -0.46556 0.192816 -0.863757 -0.46556 0.192816 -0.505661 -0.76745 0.394116 -0.505661 -0.657828 0.558184 -0.863768 -0.356304 0.356304 -0.863768 -0.356304 0.356304 -0.505661 -0.558184 0.657828 -0.505661 -0.394116 0.76745 -0.863773 -0.192816 0.465529 -0.863773 -0.192816 0.465529 -0.505661 -0.263955 0.821362 -0.505661 -0.0704367 0.859852 -0.863767 0 0.503891 -0.863767 0 0.503891 -0.505661 0.0704367 0.859852 -0.505661 0.263955 0.821362 -0.863773 0.192816 0.465529 -0.863773 0.192816 0.465529 -0.505661 0.394116 0.76745 -0.505661 0.558184 0.657828 -0.863768 0.356304 0.356304 -0.863768 0.356304 0.356304 -0.505661 0.657828 0.558184 -0.505661 0.76745 0.394116 -0.863757 0.46556 0.192816 -0.863757 0.46556 0.192816 -0.505661 0.821362 0.263955 -0.505661 0.859852 0.0704367 -0.863767 0.503891 0 -0.863767 0.503891 0 -0.505661 0.859852 -0.0704367 -0.505661 0.821362 -0.263955 -0.863757 0.46556 -0.192816 -0.863757 0.46556 -0.192816 -0.505661 0.76745 -0.394116 -0.505661 0.657828 -0.558184 -0.863768 0.356304 -0.356304 -0.863768 0.356304 -0.356304 -0.505661 0.558184 -0.657828 -0.505661 0.394116 -0.76745 -0.863757 0.192816 -0.46556 -0.863757 0.192816 -0.46556 -0.505661 0.263955 -0.821362 -0.505661 0.0704367 -0.859852 -0.863767 0 -0.503891 -0.863767 0 -0.503891 -0.505661 -0.0704367 -0.859852 -0.505661 -0.263955 -0.821362 -0.863757 -0.192816 -0.46556 -0.863757 -0.192816 -0.46556 -0.505661 -0.394116 -0.76745 -0.505661 -0.558184 -0.657828 -0.863768 -0.356304 -0.356304 -0.863768 -0.356304 -0.356304 -0.505661 -0.657828 -0.558184 -0.505661 -0.76745 -0.394116 -0.863757 -0.46556 -0.192816 0 -0.923884 -0.382672 -0.254067 -0.873007 -0.416303 -0.254067 -0.718731 -0.647206 0 -0.707083 -0.70713 0 -0.707083 -0.70713 -0.254067 -0.647206 -0.718731 -0.254067 -0.416303 -0.873007 0 -0.382672 -0.923884 0 -0.382672 -0.923884 -0.254067 -0.322916 -0.911688 -0.254067 -0.0505387 -0.965865 0 0 -1 0 0 -1 -0.254067 0.0505387 -0.965865 -0.254067 0.322916 -0.911688 0 0.382672 -0.923884 0 0.382672 -0.923884 -0.254067 0.416303 -0.873007 -0.254067 0.647206 -0.718731 0 0.70713 -0.707083 0 0.70713 -0.707083 -0.254067 0.718731 -0.647206 -0.254067 0.873007 -0.416303 0 0.923884 -0.382672 0 0.923884 -0.382672 -0.254067 0.911688 -0.322916 -0.254067 0.965865 -0.0505387 0 1 0 0 1 0 -0.254067 0.965865 0.0505387 -0.254067 0.911688 0.322916 0 0.923884 0.382672 0 0.923884 0.382672 -0.254067 0.873007 0.416303 -0.254067 0.718731 0.647206 0 0.707083 0.70713 0 0.707083 0.70713 -0.254067 0.647206 0.718731 -0.254067 0.416303 0.873007 0 0.382672 0.923884 0 0.382672 0.923884 -0.254067 0.322916 0.911688 -0.254067 0.0505387 0.965865 0 0 1 0 0 1 -0.254067 -0.0505387 0.965865 -0.254067 -0.322916 0.911688 0 -0.382672 0.923884 0 -0.382672 0.923884 -0.254067 -0.416303 0.873007 -0.254067 -0.647206 0.718731 0 -0.707083 0.70713 0 -0.707083 0.70713 -0.254067 -0.718731 0.647206 -0.254067 -0.873007 0.416303 0 -0.923884 0.382672 0 -0.923884 0.382672 -0.254067 -0.911688 0.322916 -0.254067 -0.965865 0.0505387 0 -1 0 0 -1 0 -0.254067 -0.965865 -0.0505387 -0.254067 -0.911688 -0.322916 0 -0.923884 -0.382672 -0.378979 -0.575884 -0.724384 0 0.555559 0.831477 -0.707145 -0.270577 -0.653249 0 0.382672 0.923884 -0.70713 0 -0.707083 0 0 1 -0.707117 0.270577 -0.653279 0 -0.382672 0.923884 -0.378979 0.575884 -0.724384 0 -0.555559 0.831477 -0.503891 0 -0.863767 -0.707145 -0.270577 -0.653249 -0.378979 -0.575884 -0.724384 -0.707117 0.270577 -0.653279 -0.378979 0.575884 -0.724384 -0.379711 -0.0755028 -0.922019 0 -0.35725 -0.934009 -0.379711 0.0755028 -0.922019 0 0.35725 -0.934009 0 0.35725 -0.934009 1 0 0 -0.509171 -0.437483 -0.741184 -0.509171 0.437483 -0.741184 -0.262429 -0.302316 -0.916371 -0.262429 0.302316 -0.916371 0 -0.667348 -0.744746 0 0.555559 0.831477 0 0.382672 0.923884 0 -0.35725 -0.934009 0 0 1 0 -0.382672 0.923884 0 -0.555559 0.831477 0 0.667348 -0.744746 1 0 0 0 0.339091 -0.940754 0 -0.980788 0.195074 0 0.339091 0.940754 0 -0.980788 -0.195074 0 -1 0 0 0.339091 0.940754 0 1 0 0 0.339091 -0.940754 0 1 0 0 0.339091 -0.940754 0 -0.980788 0.195074 0 0.339091 0.940754 0 -0.980788 -0.195074 0 -1 0 0 0.339091 0.940754 0 1 0 0 0.339091 -0.940754 0 1 0 -1 0 0 1 0 0 -1 0 0 -0.195074 0 -0.980788 0 -0.97213 0.234443 0 -0.689352 0.724426 -1 0 0 -0.180578 0.378185 0.907947 -1 0 0 -0.180578 0.378185 -0.907947 -1 0 0 -0.139256 0.700248 -0.700186 0 -0.689352 0.724426 -0.139256 0.700248 0.700186 0 -0.657521 -0.753436 -0.394116 0.505661 0.76745 -0.263955 0.505661 0.821362 -0.394116 0.505661 -0.76745 -0.322916 0.254067 -0.911688 -0.263955 0.505661 -0.821362 -0.657828 0.505661 0.558184 -0.558153 0.505661 0.657854 -0.657828 0.505661 -0.558184 -0.558153 0.505661 -0.657854 -0.911688 0.254067 0.322916 -0.821362 0.505661 0.263955 -0.76745 0.505661 0.394116 -0.911688 0.254067 -0.322916 -0.821362 0.505661 -0.263955 -0.76745 0.505661 -0.394116 -1 0 0 0 -0.657521 -0.753436 0 -0.97213 0.234443 -0.965865 0.254067 -0.0505387 -0.965865 0.254067 0.0505387 -0.859852 0.505661 -0.0704367 -0.859852 0.505661 0.0704367 -0.831477 0 0.555559 -0.514267 0.378185 0.769743 0 0 -1 0 0.380352 -0.924842 -0.831477 0 0.555559 0 0.380352 -0.924842 1 0 0 0 -0.657521 -0.753436 0 -0.382672 -0.923884 0.707117 0.270577 0.653279 -0.718731 0.254067 -0.647206 0 1 0 0 0 1 1 0 0 0 -0.657521 -0.753436 0 -0.97213 0.234443 1 0 0 0 -0.97213 0.234443 0 -0.97213 0.234443 0 -0.689352 0.724426 1 0 0 -1 0 0 -0.195074 0 0.980788 0 -0.657521 -0.753436 -1 0 0 -0.382672 0 -0.923884 0 -0.97213 0.234443 0 -0.97213 0.234443 -0.416303 0.254067 0.873007 -0.322916 0.254067 0.911688 -0.416303 0.254067 -0.873007 -0.555559 0 0.831477 0 -0.657521 -0.753436 0 -0.97213 0.234443 -0.396619 0.700224 -0.593616 0 -0.382672 0.923884 0 -0.689352 0.724426 -0.70713 0 -0.707083 0 -0.97213 0.234443 -0.647206 0.254067 0.718731 -0.718731 0.254067 -0.647206 -0.647206 0.254067 -0.718731 -0.873007 0.254067 -0.416303 -0.718731 0.254067 -0.647206 -0.514267 0.378185 -0.769743 0 0 1 -0.718731 0.254067 -0.647206 0 0.380352 0.924842 -0.831477 0 0.555559 0 0.551378 -0.834256 0 0.380352 -0.924842 0 -0.97213 0.234443 0.966781 0.212531 0.142003 1 0 0 0.863757 0.192816 0.46556 1 0 0 -0.707083 0.70713 0 1 0 0 -0.831477 0 0.555559 -0.769723 0.378185 0.514298 1 0 0 -0.769723 0.378185 -0.514298 -0.718731 0.254067 -0.647206 1 0 0 0.952917 0 -0.303232 1 0 0 -0.718731 0.254067 -0.647206 0 1 0 1 0 0 0 -0.689352 0.724426 0 -0.442946 0.896548 0.707145 0.270577 -0.653249 0.70713 0 -0.707083 0 0.319163 0.9477 0.707117 -0.270577 -0.653279 0 0.380352 -0.924842 0.707117 -0.270577 0.653279 0.700224 0.593616 0.396619 -0.195074 0 -0.980788 -0.195074 0 0.980788 -0.382672 0 0.923884 -0.555559 0 -0.831477 -0.270577 0.707117 -0.653279 -0.270577 0.707117 0.653279 -0.396619 0.700224 0.593616 0 -0.382672 -0.923884 -0.70713 0 0.707083 -0.718731 0.254067 0.647206 -0.923884 0 0.382672 -0.923884 0 -0.382672 -0.873007 0.254067 0.416303 -0.657828 0.505661 0.558184 -0.647206 0.254067 0.718731 -0.558153 0.505661 0.657854 -0.657828 0.505661 -0.558184 -0.647206 0.254067 -0.718731 -0.558153 0.505661 -0.657854 -0.707083 0 -0.70713 -0.707083 0 0.70713 0 0.380352 -0.924842 0 0.551408 0.834235 0.922021 0.321909 -0.215064 0.863768 0.356304 -0.356304 0.863768 0.356304 0.356304 0.863773 0.192816 -0.465529 -0.653279 0.707117 0.270577 -0.653279 0.707117 -0.270577 0.952917 0 0.303232 0.952917 0 0.303232 0.863757 -0.192816 0.46556 0.863757 -0.192816 -0.46556 0.863768 -0.356304 0.356304 0.863768 -0.356304 -0.356304 0.922021 -0.321909 -0.215064 0.922021 -0.321909 0.215064 0.70025 -0.593585 0.396619 0.70025 -0.593585 -0.396619 0.707128 -0.499985 0.499985 0.707128 -0.499985 -0.499985 0.707128 0.499985 -0.499985 0.707128 0.499985 0.499985 0 0.0661336 -0.997811 0.707083 0 0.70713 0 0.551378 -0.834256 0.70025 -0.396619 0.593585 0 0.551408 0.834235 0.700224 -0.396619 -0.593616 0.70025 0.593585 -0.396619 -2.12951e-006 1 -3.80483e-008 -2.1295e-006 1 3.81307e-008 6.25096e-007 -9.64761e-007 1 3.37964e-007 -0.689362 0.724417 -1.01323e-008 -0.972126 0.234458 -1.01323e-008 -0.972126 0.234458 -9.50031e-007 -0.657551 -0.75341 2.86681e-008 0.380372 -0.924834 1 0 0 -0.718702 0.254081 -0.647233 -0.831475 2.74156e-005 0.555562 -9.50031e-007 -0.657551 -0.75341 -0.866034 -0.499985 0 0 0.923884 -0.382672 -0.866034 -0.499985 0 0 0.923884 0.382672 -0.866034 -0.499985 0 0 -0.590869 -0.806768 0 -1 0 -0.866034 -0.499985 0 0 -1 0 0 -0.590869 0.806768 0 -0.590869 -0.806768 0 -1 0 1 0 0 0 -1 0 0 -0.590869 0.806768 1 0 0 0 0.923884 -0.382672 1 0 0 0 0.923884 0.382672 1 0 0 0 0.831477 -0.555559 0 -0.590869 0.806768 0 -0.590869 -0.806768 0 0.831477 0.555559 0 1 0 0 1 0 0 0.831477 -0.555559 0 -0.590869 0.806768 0 -0.590869 -0.806768 0 0.831477 0.555559 1 0 0 -0.866026 -0.5 8.71977e-008 -0.378979 -0.575884 0.724384 0 0.555559 -0.831477 -0.707117 -0.270577 0.653279 0 0.382672 -0.923884 -0.70713 0 0.707083 0 0 -1 -0.707145 0.270577 0.653249 0 -0.382672 -0.923884 -0.378979 0.575884 0.724384 0 -0.555559 -0.831477 -0.503891 0 0.863767 -0.707117 -0.270577 0.653279 -0.378979 -0.575884 0.724384 -0.707145 0.270577 0.653249 -0.378979 0.575884 0.724384 -0.379711 -0.0755028 0.922019 0 -0.35725 0.934009 -0.379711 0.0755028 0.922019 0 0.35725 0.934009 0 0.35725 0.934009 1 0 0 -0.509171 -0.437483 0.741184 -0.509171 0.437483 0.741184 -0.262429 -0.302316 0.916371 -0.262429 0.302316 0.916371 0 0.555559 -0.831477 0 -0.667348 0.744746 0 0.382672 -0.923884 0 -0.35725 0.934009 0 0 -1 0 -0.382672 -0.923884 0 -0.555559 -0.831477 0 0.667348 0.744746 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -0.923884 -0.382672 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.923884 -0.382672 0 -1 0 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -1 0 0 -0.923884 0.382672 0 -1 0 0 -1 0 0 -0.923884 0.382672 0 -0.70713 0.707083 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.70713 0.707083 0 -0.382672 0.923884 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.382672 0.923884 0 0 1 0 -0.382672 0.923884 0 -0.382672 0.923884 0 0 1 0 0.382672 0.923884 0 0 1 0 0 1 0 0.382672 0.923884 0 0.707083 0.70713 0 0.382672 0.923884 0 0.382672 0.923884 0 0.707083 0.70713 0 0.923884 0.382672 0 0.707083 0.70713 0 0.707083 0.70713 0 0.923884 0.382672 0 1 0 0 0.923884 0.382672 0 0.923884 0.382672 0 1 0 0 0.923884 -0.382672 0 1 0 0 1 0 0 0.923884 -0.382672 0 0.70713 -0.707083 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.70713 -0.707083 0 0.382672 -0.923884 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.382672 -0.923884 0 0 -1 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0 -1 0 -0.382672 -0.923884 0 0 -1 0 0 -1 0 -0.382672 -0.923884 0 -0.707083 -0.70713 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.707083 -0.70713 - - - - - - - - - - - - - - -

0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15

-

16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31

-

32 32 33 33 34 34 35 35

-

36 36 37 37 38 38 39 39

-

40 40 41 41 42 42 43 43

-

44 44 45 45 46 46 47 47

-

48 48 49 49 50 50 51 51

-

52 52 53 53 54 54 55 55

-

56 56 57 57 58 58 59 59

-

60 60 61 61 62 62 63 63

-

64 64 65 65 66 66 67 67

-

68 68 69 69 70 70 71 71

-

72 72 73 73 74 74 75 75

-

76 76 77 77 78 78 79 79

-

80 80 81 81 82 82 83 83

-

84 84 85 85 86 86 87 87

-

88 88 89 89 90 90 91 91

-

92 92 93 93 94 94 95 95

-
- - - -

101 114 103 114 105 114

-
- - - -

105 114 113 114 111 114 101 114

-
- - - -

107 115 109 115 104 115

-
- - - -

104 115 99 115 97 115 107 115

-
- - - -

104 104 105 105 103 103 99 99

-

102 102 100 100 96 96 98 98

-

106 106 97 97 101 101 110 110

-

109 109 107 107 111 111 113 113

-

104 104 108 108 112 112 105 105

-
- - - -

114 116 115 117 116 118 117 119 118 120 119 121 120 122 121 123 122 124 123 125 124 126 125 127 126 128 127 129 128 130 129 131

-

130 132 131 133 132 134 133 135 134 136 135 137 136 138 137 139 138 140 139 141 140 142 141 143 142 144 143 145 144 146 145 147

-

146 148 147 149 148 150 149 151

-

150 152 151 153 152 154 153 155

-

154 156 155 157 156 158 157 159

-

158 160 159 161 160 162 161 163

-

162 164 163 165 164 166 165 167

-

166 168 167 169 168 170 169 171

-

170 172 171 173 172 174 173 175

-

174 176 175 177 176 178 177 179

-

178 180 179 181 180 182 181 183

-

182 184 183 185 184 186 185 187

-

186 188 187 189 188 190 189 191

-

190 192 191 193 192 194 193 195

-

194 196 195 197 196 198 197 199

-

198 200 199 201 200 202 201 203

-

202 204 203 205 204 206 205 207

-

206 208 207 209 208 210 209 211

-
- - - -

210 212 211 213 212 214 213 215

-

214 216 215 217 216 218 217 219

-

218 220 219 221 220 222 221 223

-

222 224 223 225 224 226 225 227

-

226 228 227 229 228 230 229 231

-

230 232 231 233 232 234 233 235

-

234 236 235 237 236 238 237 239

-

238 240 239 241 240 242 241 243

-

242 244 243 245 244 246 245 247

-

246 248 247 249 248 250 249 251 250 252 251 253 252 254 253 255 254 256 255 257 256 258 257 259 258 260 259 261 260 262

-

261 263 262 264 263 265 264 266

-

265 267 266 268 267 269 268 270 269 271 270 272 271 273 272 274 273 275 274 276 275 277 276 278 277 279 278 280 279 281

-

280 282 281 283 282 284 283 285

-

284 286 285 287 286 288 287 289

-

288 290 289 291 290 292 291 293

-

292 294 293 295 294 296 295 297

-

296 298 297 299 298 300 299 301

-
- - - -

300 302 301 303 302 304 303 305

-

304 306 305 307 306 308 307 309

-

308 310 309 311 310 312 311 313

-

312 314 313 315 314 316 315 317

-

316 318 317 319 318 320 319 321

-

320 322 321 323 322 324 323 325

-
- - - -

324 326 325 327 326 328 327 329 328 330 329 331 330 332 331 333 332 334 333 335

-

334 336 335 337 336 338 337 339 338 340 339 341 340 342 341 343 342 344 343 345

-

344 346 345 347 346 348 347 349

-

348 350 349 351 350 352 351 353

-

352 354 353 355 354 356 355 357

-

356 358 357 359 358 360 359 361

-

360 362 361 363 362 364 363 365

-

364 366 365 367 366 368 367 369

-

368 370 369 371 370 372 371 373

-

372 374 373 375 374 376 375 377

-

376 378 377 379 378 380 379 381

-

380 382 381 383 382 384 383 385

-
- - - -

384 386 385 387 386 388 387 389 388 390 389 391 390 392 391 393 392 394 393 395 394 396 395 397 396 398 397 399 398 400 399 401

-

400 402 401 403 402 404 403 405 404 406 405 407 406 408 407 409 408 410 409 411 410 412 411 413 412 414 413 415 414 416 415 417

-

416 418 417 419 418 420 419 421

-

420 422 421 423 422 424 423 425

-

424 426 425 427 426 428 427 429

-

428 430 429 431 430 432 431 433

-

432 434 433 435 434 436 435 437

-

436 438 437 439 438 440 439 441

-

440 442 441 443 442 444 443 445

-

444 446 445 447 446 448 447 449

-

448 450 449 451 450 452 451 453

-

452 454 453 455 454 456 455 457

-

456 458 457 459 458 460 459 461

-

460 462 461 463 462 464 463 465

-

464 466 465 467 466 468 467 469

-

468 470 469 471 470 472 471 473

-

472 474 473 475 474 476 475 477

-

476 478 477 479 478 480 479 481

-
- - - -

480 482 481 483 482 484 483 485 484 486 485 487 486 488 487 489 488 490 489 491 490 492 491 493 492 494 493 495 494 496 495 497

-

496 498 497 499 498 500 499 501 500 502 501 503 502 504 503 505 504 506 505 507 506 508 507 509 508 510 509 511 510 512 511 513

-

512 514 513 515 514 516 515 517

-

516 518 517 519 518 520 519 521

-

520 522 521 523 522 524 523 525

-

524 526 525 527 526 528 527 529

-

528 530 529 531 530 532 531 533

-

532 534 533 535 534 536 535 537

-

536 538 537 539 538 540 539 541

-

540 542 541 543 542 544 543 545

-

544 546 545 547 546 548 547 549

-

548 550 549 551 550 552 551 553

-

552 554 553 555 554 556 555 557

-

556 558 557 559 558 560 559 561

-

560 562 561 563 562 564 563 565

-

564 566 565 567 566 568 567 569

-

568 570 569 571 570 572 571 573

-

572 574 573 575 574 576 575 577

-
- - - -

576 578 577 579 578 580 579 581 580 582 581 583 582 584 583 585 584 586 585 587 586 588 587 589 588 590 589 591 590 592 591 593

-

592 594 593 595 594 596 595 597 596 598 597 599 598 600 599 601 600 602 601 603 602 604 603 605 604 606 605 607 606 608 607 609

-

608 610 609 611 610 612 611 613

-

612 614 613 615 614 616 615 617

-

616 618 617 619 618 620 619 621

-

620 622 621 623 622 624 623 625

-

624 626 625 627 626 628 627 629

-

628 630 629 631 630 632 631 633

-

632 634 633 635 634 636 635 637

-

636 638 637 639 638 640 639 641

-

640 642 641 643 642 644 643 645

-

644 646 645 647 646 648 647 649

-

648 650 649 651 650 652 651 653

-

652 654 653 655 654 656 655 657

-

656 658 657 659 658 660 659 661

-

660 662 661 663 662 664 663 665

-

664 666 665 667 666 668 667 669

-

668 670 669 671 670 672 671 673

-
- - - -

672 674 673 675 674 676 675 677 676 678 677 679 678 680 679 681 680 682 681 683 682 684 683 685 684 686 685 687 686 688 687 689

-

688 690 689 691 690 692 691 693

-

692 694 693 695 694 696 695 697

-

696 698 697 699 698 700 699 701

-

700 702 701 703 702 704 703 705

-

704 706 705 707 706 708 707 709

-

708 710 709 711 710 712 711 713

-

712 714 713 715 714 716 715 717

-

716 718 717 719 718 720 719 721

-

720 722 721 723 722 724 723 725

-

724 726 725 727 726 728 727 729

-

728 730 729 731 730 732 731 733

-

732 734 733 735 734 736 735 737

-

736 738 737 739 738 740 739 741

-

740 742 741 743 742 744 743 745

-

744 746 745 747 746 748 747 749

-

748 750 749 751 750 752 751 753

-

752 754 753 755 754 756 755 757

-

756 758 757 759 758 760 759 761

-

760 762 761 763 762 764 763 765

-

764 766 765 767 766 768 767 769

-

768 770 769 771 770 772 771 773

-

772 774 773 775 774 776 775 777

-

776 778 777 779 778 780 779 781

-

780 782 781 783 782 784 783 785

-

784 786 785 787 786 788 787 789

-

788 790 789 791 790 792 791 793

-

792 794 793 795 794 796 795 797

-

796 798 797 799 798 800 799 801

-

800 802 801 803 802 804 803 805

-

804 806 805 807 806 808 807 809

-

808 810 809 811 810 812 811 813

-

812 814 813 815 814 816 815 817

-
- - - -

843 851 842 851 844 851 836 851 848 851 846 851 836 851 846 851 845 851 844 851 836 851 845 851 844 851 845 851 843 851

-
- - - -

824 826 838 840 822 824 816 818 818 820 837 839

-
- - - -

822 824 829 831 833 835 826 828 820 822

-

820 822 826 828 831 833 827 829 818 820

-

841 843 816 818 828 830 832 834 844 846

-

844 846 839 841 826 828 840 842 835 837

-

835 837 834 836 830 832 824 826 848 850

-

847 849 825 827 823 825 846 848

-

846 848 823 825 821 823 845 847

-

845 847 821 823 819 821 843 845

-

843 845 819 821 817 819 842 844

-
- - - -

853 870 852 870 855 870 857 870 850 870 853 870 855 870 857 870 853 870

-
- - - -

862 871 859 871 866 871 864 871 861 871 862 871 866 871 864 871 862 871

-
- - - -

850 853 859 862 862 865 853 856

-

853 856 862 865 861 864 852 855

-

851 854 860 863 863 866 854 857

-

855 858 864 867 866 869 857 860

-

856 859 865 868 858 861 849 852

-
- - - -

1019 1035 1026 1035 952 1035 908 1035 1019 1035 952 1035

-
- - - -

1002 1036 1020 1036 970 1036 1002 1036 1028 1036 1020 1036

-
- - - -

976 1037 949 1037 999 1037

-
- - - -

947 1037 915 1037 976 1037 999 1037

-
- - - -

973 1038 938 1038 984 1038

-
- - - -

1021 1038 973 1038 984 1038 877 1038 870 1038 980 1038

-
- - - -

1021 1039 980 1039 929 1039

-
- - - -

922 1039 1021 1039 929 1039 983 1039

-
- - - -

922 1040 983 1040 940 1040 955 1040 990 1040 988 1040 897 1040 990 1040 955 1040

-
- - - -

991 1040 1003 1040 922 1040 940 1040

-

955 1040 1003 1040 991 1040 897 1040

-

988 1040 935 1040 918 1040 955 1040

-
- - - -

982 1041 981 1041 1022 1041

-
- - - -

1022 1041 918 1041 935 1041 982 1041

-
- - - -

1024 1042 905 1042 1000 1042

-
- - - -

978 1042 1024 1042 1000 1042 1001 1042

-
- - - -

1010 1043 962 1043 1007 1043 967 1043 1008 1043 965 1043

-
- - - -

965 1043 1015 1043 1014 1043 1012 1043 967 1043

-

1010 1043 1011 1043 1013 1043 1016 1043 962 1043

-

955 1043 1005 1043 957 1043 1010 1043 1007 1043 959 1043

-

967 1043 1006 1043 1004 1043 1003 1043 955 1043 959 1043 1008 1043

-
- - - -

1002 1044 970 1044 1015 1044

-
- - - -

998 1044 999 1044 949 1044 1002 1044 1015 1044 965 1044

-
- - - -

1016 1045 1001 1045 1000 1045 995 1045 962 1045

-

908 1045 952 1045 1001 1045 1016 1045

-
- - - -

1022 1046 981 1046 925 1046 879 1046 985 1046

-

987 1046 911 1046 1022 1046 985 1046

-
- - - -

997 1002 946 951 999 1004 994 999 1000 1005 903 908 871 876 926 931 923 928 873 878 867 872 875 880

-
- - - -

1003 1008 1004 1009 1021 1026 1029 1034

-

1004 1009 1006 1011 973 978 1021 1026

-

1027 1032 1002 1007 949 954 975 980

-

1018 1023 1020 1025 1014 1019 1015 1020

-

976 981 1012 1017 1014 1019 1020 1025 1028 1033

-

976 981 974 979 966 971 1012 1017

-

1006 1011 966 971 974 979 973 978

-

937 942 972 977 914 919 947 952

-

1016 1021 1013 1018 1019 1024 1017 1022

-

977 982 1001 1006 951 956 1025 1030

-

1013 1018 1011 1016 978 983 1026 1031 1019 1024

-

1011 1016 1010 1015 1024 1029 978 983

-

1005 1010 954 959 979 984 1022 1027

-

1022 1027 911 916 956 961 1005 1010

-

1009 1014 956 961 911 916 1024 1029

-

910 915 987 992 904 909 1023 1028

-

899 904 889 894 990 995 895 900

-

988 993 990 995 992 997 989 994

-

985 990 878 883 872 877 881 886

-

931 936 872 877 924 929 981 986 982 987

-

941 946 930 935 982 987 933 938 988 993

-

880 885 886 891 995 1000 903 908 986 991 985 990

-

993 998 885 890 891 896 1007 1012 961 966

-

958 963 1007 1012 890 895 901 906

-

1008 1013 958 963 900 905 893 898

-

892 897 898 903 895 900 991 996

-

939 944 983 988 927 932 932 937 943 948

-

991 996 939 944 942 947 944 949

-

894 899 887 892 996 1001 963 968 1008 1013

-

998 1003 888 893 882 887 984 989 936 941 946 951

-

876 881 984 989 884 889 874 879

-

874 879 883 888 927 932 980 985 868 873

-
- - - -

1047 1077 1057 1077 1045 1077 1042 1077 1059 1077 1049 1077 1042 1077 1049 1077 1055 1077 1045 1077 1042 1077 1055 1077 1045 1077 1055 1077 1047 1077

-
- - - -

1033 1078 1053 1078 1036 1078 1039 1078 1051 1078 1031 1078 1039 1078 1031 1078 1054 1078 1036 1078 1039 1078 1054 1078 1036 1078 1054 1078 1033 1078

-
- - - -

1036 1053 1041 1058 1043 1060 1038 1055

-

1039 1056 1044 1061 1057 1074 1051 1068

-

1050 1067 1056 1073 1046 1063 1031 1048

-

1031 1048 1046 1063 1055 1072 1054 1071

-

1054 1071 1055 1072 1048 1065 1033 1050

-

1033 1050 1048 1065 1059 1076 1053 1070

-

1052 1069 1058 1075 1040 1057 1035 1052

-
- - - -

1090 1112 1092 1112 1080 1112 1089 1112 1090 1112 1080 1112 1088 1112 1086 1112 1087 1112 1088 1112 1087 1112 1089 1112 1080 1112 1088 1112 1089 1112

-
- - - -

1068 1087 1066 1085 1082 1101 1060 1079 1081 1100 1062 1081

-
- - - -

1064 1083 1070 1089 1077 1096 1073 1092 1066 1085

-

1062 1081 1071 1090 1075 1094 1070 1089 1064 1083

-

1085 1104 1061 1080 1063 1082 1087 1106

-

1087 1106 1063 1082 1065 1084 1089 1108

-

1089 1108 1065 1084 1067 1086 1090 1109

-

1090 1109 1067 1086 1069 1088 1091 1110

-

1092 1111 1068 1087 1074 1093 1078 1097 1079 1098

-

1079 1098 1084 1103 1070 1089 1083 1102 1088 1107

-

1088 1107 1076 1095 1072 1091 1060 1079 1086 1105

-
- - - -

1093 1113 1094 1114 1095 1115 1096 1116 1097 1117 1098 1118 1099 1119 1100 1120 1101 1121 1102 1122 1103 1123 1104 1124 1105 1125 1106 1126 1107 1127 1108 1128

-

1109 1129 1110 1130 1111 1131 1112 1132

-

1113 1133 1114 1134 1115 1135 1116 1136

-

1117 1137 1118 1138 1119 1139 1120 1140

-

1121 1141 1122 1142 1123 1143 1124 1144

-

1125 1145 1126 1146 1127 1147 1128 1148

-

1129 1149 1130 1150 1131 1151 1132 1152

-

1133 1153 1134 1154 1135 1155 1136 1156

-

1137 1157 1138 1158 1139 1159 1140 1160

-

1141 1161 1142 1162 1143 1163 1144 1164

-

1145 1165 1146 1166 1147 1167 1148 1168

-

1149 1169 1150 1170 1151 1171 1152 1172

-

1153 1173 1154 1174 1155 1175 1156 1176

-

1157 1177 1158 1178 1159 1179 1160 1180

-

1161 1181 1162 1182 1163 1183 1164 1184

-

1165 1185 1166 1186 1167 1187 1168 1188

-

1169 1189 1170 1190 1171 1191 1172 1192

-
-
- - - CAT3DBagRep - - -
- - - - 200 -0.249987 96.219 200 0 87.5002 200 -27.8125 81.968 200 -27.8125 94.468 200 -19.0096 96.219 200 0 87.5002 200 -0.249987 96.219 200 19.0096 96.219 200 38.2684 92.3882 200 53.1603 82.4377 200 25.451 82.4377 200 -84.709 -14.031 200 -81.9677 -27.8123 200 -94.4677 -27.8123 200 -97.209 -14.031 200 94.5672 27.3127 200 97.3085 13.5315 200 84.8085 13.5315 200 82.0672 27.3127 200 -55.375 80.9579 200 -55.375 68.6565 200 -72.0834 68.6565 200 -70.7107 70.7109 200 68.6563 -55.3748 200 80.9577 -55.3748 200 70.7107 -70.7104 200 68.6563 -72.0831 200 96.2188 -19.0094 200 96.2188 13.5315 200 97.3085 13.5315 200 100 0.000244 200 -82.9375 -27.8123 200 -82.9375 -52.4117 200 -92.3879 -38.2681 200 -94.4677 -27.8123 200 -27.8125 -82.9373 200 -27.8125 -94.4675 200 -38.2683 -92.3877 200 -52.4119 -82.9373 200 -27.8125 82.4377 200 -53.1602 82.4377 200 -38.2683 92.3882 200 -27.8125 94.468 200 82.4375 -27.8123 200 94.4678 -27.8123 200 92.388 -38.2681 200 82.4375 -53.16 200 87.5 0.000244 200 96.2188 -0.249756 200 96.2188 -19.0094 200 94.4678 -27.8123 200 81.9678 -27.8123 200 87.5 0.000244 200 84.8085 13.5315 200 96.2188 13.5315 200 96.2188 -0.249756 200 82.4375 27.3127 200 82.4375 53.1605 200 92.388 38.2686 200 94.5672 27.3127 200 -80.8394 -33.4845 200 -66.2129 -55.3748 200 -80.9576 -55.3748 200 -82.9375 -52.4117 200 -82.9375 -41.5935 200 -82.9375 -41.5935 200 -82.9375 -27.8123 200 -81.9677 -27.8123 200 -80.8394 -33.4845 200 -33.4848 -80.8392 200 -41.5937 -82.9373 200 -52.4119 -82.9373 200 -55.375 -80.9574 200 -55.375 -66.2126 200 -41.5937 -82.9373 200 -33.4848 -80.8392 200 -27.8125 -81.9675 200 -27.8125 -82.9373 200 -41.5937 82.4377 200 -33.4848 80.8397 200 -55.375 66.2131 200 -55.375 80.9579 200 -53.1602 82.4377 200 -41.5937 82.4377 200 -27.8125 82.4377 200 -27.8125 81.968 200 -33.4848 80.8397 200 80.8395 -33.4845 200 82.4375 -41.5935 200 82.4375 -53.16 200 80.9577 -55.3748 200 66.2129 -55.3748 200 82.4375 -41.5935 200 80.8395 -33.4845 200 81.9678 -27.8123 200 82.4375 -27.8123 200 -19.0096 96.219 200 0 100 200 19.0096 96.219 200 33.4848 80.8397 200 41.0938 82.4377 200 53.1603 82.4377 200 70.7107 70.7109 200 72.0834 68.6565 200 51.7183 68.6565 200 41.0938 82.4377 200 33.4848 80.8397 200 25.451 82.4377 194 -87.5 0.000244 194 -87.5 0.000244 194 -80.8394 -33.4845 194 -80.8394 -33.4845 194 -80.8394 33.485 194 -80.8394 33.485 194 -61.8718 -61.8716 194 -61.8718 -61.8716 194 -61.8718 61.8721 194 -61.8718 61.8721 194 -33.4848 -80.8392 194 -33.4848 -80.8392 194 -33.4848 80.8397 194 -33.4848 80.8397 194 0 -87.4998 194 0 -87.4998 194 0 87.5002 194 0 87.5002 194 33.4848 -80.8392 194 33.4848 -80.8392 194 33.4848 80.8397 194 33.4848 80.8397 194 61.8719 -61.8716 194 61.8719 -61.8716 194 61.8719 61.8721 194 61.8719 61.8721 194 80.8395 -33.4845 194 80.8395 -33.4845 194 80.8395 33.485 194 80.8395 33.485 194 87.5 0.000244 194 87.5 0.000244 200 -87.5 0.000244 200 -80.8394 -33.4845 200 -80.8394 33.485 200 -61.8718 -61.8716 200 -61.8718 61.8721 200 -33.4848 -80.8392 200 -33.4848 80.8397 200 0 -87.4998 200 0 87.5002 200 33.4848 -80.8392 200 33.4848 80.8397 200 61.8719 -61.8716 200 61.8719 61.8721 200 80.8395 -33.4845 200 80.8395 33.485 200 87.5 0.000244 200 -82.9375 22.9375 200 -82.9375 41.094 200 -82.9375 52.4122 200 -72.0834 68.6565 200 -69.1562 68.6565 200 -55.375 66.2131 200 -55.375 68.6565 200 22.9373 -82.9373 200 41.0938 -82.9373 200 51.7183 68.6565 200 52.412 -82.9373 200 66.2129 -55.3748 200 68.6563 -72.0831 200 68.6563 -69.156 200 68.6563 -55.3748 200 68.6563 68.6565 200 72.0834 68.6565 200 82.0672 27.3127 200 82.4375 27.3127 200 82.4375 41.094 200 82.4375 53.1605 200 -69.1562 -55.3748 200 -66.2129 -55.3748 200 -61.8718 -61.8716 200 -61.8718 -61.8716 200 -55.375 -69.156 200 -55.375 -80.9574 200 -70.7107 -70.7104 200 -80.9576 -55.3748 200 -69.1562 -55.3748 200 -61.8718 -61.8716 200 -55.375 -66.2126 200 -55.375 -69.156 210 19.0096 96.219 210 0 100 210 -19.0096 96.219 200 -99.9503 -0.249756 200 -97.209 -14.031 200 -96.7187 -14.031 200 -96.7187 -0.249756 200 -84.709 -14.031 200 -82.9375 52.4122 200 -27.8125 -94.4675 200 -27.8125 -81.9675 200 -16.4959 -96.7185 200 -0.249987 -99.9501 200 -0.249987 -96.7185 200 52.412 -82.9373 200 -100 0.000244 200 -100 0.000244 200 -92.3879 -38.2681 200 -92.3879 38.2686 200 -92.3879 38.2686 200 -87.5 0.000244 200 -70.7107 -70.7104 200 -70.7107 70.7109 200 -38.2683 -92.3877 200 -38.2683 92.3882 200 0 -99.9998 200 0 -99.9998 200 0 -87.4998 200 0 100 200 38.2684 -92.3877 200 38.2684 -92.3877 200 38.2684 92.3882 200 70.7107 -70.7104 200 70.7107 70.7109 200 92.388 -38.2681 200 92.388 38.2686 200 100 0.000244 210 -81.2917 54.8752 210 -54.875 -81.2915 210 -54.875 -55.3748 210 -54.875 -0.249756 210 -54.875 54.8752 210 0.250013 -99.9501 210 0.250013 -55.3748 210 0.250013 54.8752 210 49.9503 -0.249756 210 55.375 -80.9574 210 55.375 -55.3748 210 55.375 -0.249756 210 55.375 54.8752 210 80.9577 -55.3748 210 81.2917 54.8752 210 99.9503 -0.249756 210 -100 0.000244 210 -100 0.000244 210 -92.3879 -38.2681 210 -92.3879 -38.2681 210 -92.3879 38.2686 210 -92.3879 38.2686 210 -70.7107 -70.7104 210 -70.7107 -70.7104 210 -70.7107 70.7109 210 -38.2683 -92.3877 210 -38.2683 -92.3877 210 -38.2683 92.3882 210 0 -99.9998 210 0 -99.9998 210 0 -49.9998 210 0 100 210 38.2684 -92.3877 210 38.2684 -92.3877 210 38.2684 92.3882 210 46.194 -19.1339 210 50 0.000244 210 70.7107 -70.7104 210 70.7107 -70.7104 210 70.7107 70.7109 210 92.388 -38.2681 210 92.388 -38.2681 210 92.388 38.2686 210 92.388 38.2686 210 100 0.000244 210 100 0.000244 201.5 -50 0.000244 201.5 -50 0.000244 201.5 -46.194 -19.1339 201.5 -46.194 -19.1339 201.5 -46.194 19.1344 201.5 -46.194 19.1344 201.5 -35.3553 -35.3551 201.5 -35.3553 -35.3551 201.5 -35.3553 35.3556 201.5 -35.3553 35.3556 201.5 -19.1342 -46.1937 201.5 -19.1342 -46.1937 201.5 -19.1342 46.1942 201.5 -19.1342 46.1942 201.5 0 -49.9998 201.5 0 -49.9998 201.5 0 50.0002 201.5 0 50.0002 201.5 19.1342 -46.1937 201.5 19.1342 -46.1937 201.5 19.1342 46.1942 201.5 19.1342 46.1942 201.5 35.3554 -35.3551 201.5 35.3554 -35.3551 201.5 35.3554 35.3556 201.5 35.3554 35.3556 201.5 46.194 -19.1339 201.5 46.194 -19.1339 201.5 46.194 19.1344 201.5 46.194 19.1344 201.5 50 0.000244 201.5 50 0.000244 210 -50 0.000244 210 -46.194 -19.1339 210 -46.194 19.1344 210 -35.3553 -35.3551 210 -35.3553 35.3556 210 -19.1342 -46.1937 210 -19.1342 46.1942 210 0 -49.9998 210 0 50.0002 210 19.1342 -46.1937 210 19.1342 46.1942 210 35.3554 -35.3551 210 35.3554 35.3556 210 46.194 -19.1339 210 46.194 19.1344 210 50 0.000244 200 -82.9375 22.9375 200 22.9373 -82.9373 199.5 -4.75527 78.4552 199.5 -4.75527 78.4552 199.5 -4.75527 81.5453 199.5 -4.75527 81.5453 199.5 -2.93891 75.9552 199.5 -2.93891 75.9552 199.5 -2.93891 84.0453 199.5 -2.93891 84.0453 199.5 0 75.0002 199.5 0 75.0002 199.5 0 85.0002 199.5 0 85.0002 199.5 2.93894 75.9552 199.5 2.93894 75.9552 199.5 2.93894 84.0453 199.5 2.93894 84.0453 199.5 4.75529 78.4552 199.5 4.75529 78.4552 199.5 4.75529 81.5453 199.5 4.75529 81.5453 210 -4.75527 78.4552 210 -4.75527 81.5453 210 -2.93891 75.9552 210 -2.93891 84.0453 210 0 75.0002 210 0 85.0002 210 2.93894 75.9552 210 2.93894 84.0453 210 4.75529 78.4552 210 4.75529 81.5453 210 -81.2917 54.8752 210 -53.1602 82.4377 210 -27.3125 82.4377 210 -19.0096 96.219 210 -13.5312 82.4377 210 -4.10686 82.4377 210 0.250013 54.8752 210 0.250013 96.219 210 4.10689 82.4377 210 14.0313 82.4377 210 19.0096 96.219 210 27.8125 82.4377 210 53.1603 82.4377 210 81.2917 54.8752 210 -70.7107 70.7109 210 -38.2683 92.3882 210 38.2684 92.3882 210 70.7107 70.7109 - - - - - - - - - - -1 9.67554e-007 -4.95105e-006 -1 0 0 -1 0 0 -1 -1.2992e-005 3.09162e-005 -1 3.09164e-005 -1.29921e-005 -1 8.26763e-006 -3.65263e-006 -1 -8.13122e-006 -6.58167e-006 -1 -6.58166e-006 -8.13123e-006 -1 -6.55756e-006 7.88653e-006 -1 7.88653e-006 -6.55757e-006 -1 -6.86781e-006 -1.21319e-006 -1 7.73768e-006 6.27908e-006 -1 1.26999e-005 -2.25636e-006 -1 -2.25629e-006 1.26999e-005 -1 -2.16161e-006 -1.33856e-005 -1 -1.33856e-005 -2.16168e-006 -1 -4.74338e-015 3.22831e-005 -1 3.44932e-006 -2.73834e-005 -1 0 0 0 -1 0 -1 0 0 0 -0.923884 -0.382672 -1 0 0 0 -0.923884 0.382672 -1 0 0 0 -0.70713 -0.707083 -1 0 0 0 -0.70713 0.707083 -1 0 0 0 -0.382672 -0.923884 -1 0 0 0 -0.382672 0.923884 -1 0 0 0 0 -1 -1 0 0 0 0 1 -1 0 0 0 0.382672 -0.923884 -1 0 0 0 0.382672 0.923884 -1 0 0 0 0.70713 -0.707083 -1 0 0 0 0.70713 0.707083 -1 0 0 0 0.923884 -0.382672 -1 0 0 0 0.923884 0.382672 -1 0 0 0 1 0 0 -1 0 0 -0.923884 -0.382672 0 -0.923884 0.382672 0 -0.70713 -0.707083 0 -0.70713 0.707083 0 -0.382672 -0.923884 0 -0.382672 0.923884 0 0 -1 0 0 1 0 0.382672 -0.923884 0 0.382672 0.923884 0 0.70713 -0.707083 0 0.70713 0.707083 0 0.923884 -0.382672 0 0.923884 0.382672 0 1 0 -1 -1.4633e-005 3.71361e-007 -1 -8.25302e-006 1.93239e-006 -1 1.93239e-006 -8.25299e-006 -1 -1.52501e-006 -1.09196e-005 1 4.74338e-015 -3.22831e-005 -1 -3.05185e-005 3.05185e-005 -1 -3.05185e-005 3.05185e-005 -1 -3.05185e-005 3.05185e-005 -1 -3.05185e-005 3.05185e-005 -1 -3.05185e-005 3.05185e-005 -1 -3.05185e-005 3.05185e-005 -1 6.1037e-005 -6.1037e-005 -1 6.1037e-005 -6.1037e-005 -1 6.1037e-005 -6.1037e-005 -1 6.1037e-005 -6.1037e-005 -1 6.1037e-005 -6.1037e-005 -1 6.1037e-005 -6.1037e-005 -1 -3.05185e-005 3.05185e-005 0 -1 0 0 -0.923884 -0.382672 -1 -3.05185e-005 3.05185e-005 0 -0.923884 0.382672 -1 -3.05185e-005 3.05185e-005 0 -0.70713 -0.707083 0 -0.70713 0.707083 0 -0.382672 -0.923884 0 -0.382672 0.923884 -1 6.1037e-005 -6.1037e-005 0 0 -1 -1 6.1037e-005 -6.1037e-005 0 0 1 -1 6.1037e-005 -6.1037e-005 0 0.382672 -0.923884 0 0.382672 0.923884 0 0.707083 -0.70713 0 0.707083 0.70713 0 0.923884 -0.382672 0 0.923884 0.382672 0 1 0 1 0 0 1 3.05185e-005 3.05185e-005 1 -3.05185e-005 -0.000274667 1 -3.05185e-005 -0.000274667 1 0 0 1 -3.05185e-005 -0.000274667 1 -3.05185e-005 -0.000274667 1 -3.05185e-005 -0.000274667 1 -3.05185e-005 -0.000274667 1 -3.05185e-005 -0.000274667 1 -3.05185e-005 -0.000274667 1 -3.05185e-005 -0.000274667 1 -3.05185e-005 -0.000274667 1 -3.05185e-005 -0.000274667 1 -3.05185e-005 -0.000274667 1 -3.05185e-005 -0.000274667 0 -1 0 1 0 0 0 -0.923884 -0.382672 1 0 0 0 -0.923884 0.382672 1 0 0 0 -0.70713 -0.707083 1 0 0 0 -0.70713 0.707083 0 -0.382672 -0.923884 1 -3.05185e-005 -0.000274667 0 -0.382672 0.923884 0 0 -1 1 -3.05185e-005 -0.000274667 1 -3.05185e-005 -0.000274667 0 0 1 0 0.382672 -0.923884 1 -3.05185e-005 -0.000274667 0 0.382672 0.923884 1 -3.05185e-005 -0.000274667 1 -3.05185e-005 -0.000274667 0 0.707083 -0.70713 1 -3.05185e-005 -0.000274667 0 0.707083 0.70713 0 0.923884 -0.382672 1 -3.05185e-005 -0.000274667 0 0.923884 0.382672 1 -3.05185e-005 -0.000274667 0 1 0 1 -3.05185e-005 -0.000274667 0 1 0 1 0 0 0 0.923884 0.382672 1 0 0 0 0.923884 -0.382672 1 0 0 0 0.707083 0.70713 1 0 0 0 0.707083 -0.70713 1 0 0 0 0.382672 0.923884 1 0 0 0 0.382672 -0.923884 1 0 0 0 0 1 1 0 0 0 0 -1 1 0 0 0 -0.382672 0.923884 1 0 0 0 -0.382672 -0.923884 1 0 0 0 -0.70713 0.707083 1 0 0 0 -0.70713 -0.707083 1 0 0 0 -0.923884 0.382672 1 0 0 0 -0.923884 -0.382672 1 0 0 0 -1 0 1 0 0 0 1 0 0 0.923884 0.382672 0 0.923884 -0.382672 0 0.707083 0.70713 0 0.707083 -0.70713 0 0.382672 0.923884 0 0.382672 -0.923884 0 0 1 0 0 -1 0 -0.382672 0.923884 0 -0.382672 -0.923884 0 -0.70713 0.707083 0 -0.70713 -0.707083 0 -0.923884 0.382672 0 -0.923884 -0.382672 0 -1 0 1 -4.50532e-005 -0.000302355 -1 8.41207e-005 -6.48765e-005 -1 -4.31622e-005 5.68244e-005 0 0.951062 0.309 1 0 0 0 0.951062 -0.309 1 0 0 0 0.587786 0.809016 1 0 0 0 0.587786 -0.809016 1 0 0 0 0 1 1 0 0 0 0 -1 1 0 0 0 -0.587786 0.809016 1 0 0 0 -0.587786 -0.809016 1 0 0 0 -0.951062 0.309 1 0 0 0 -0.951062 -0.309 1 0 0 0 0.951062 0.309 0 0.951062 -0.309 0 0.587786 0.809016 0 0.587786 -0.809016 0 0 1 0 0 -1 0 -0.587786 0.809016 0 -0.587786 -0.809016 0 -0.951062 0.309 0 -0.951062 -0.309 1 1.80517e-006 4.42844e-005 1 2.85561e-007 -3.67577e-005 - - - - - - - - - - - - - - -

0 0 1 0 2 0 3 0 4 0

-

5 0 6 0 7 0 8 0 9 0 10 0

-
- - - -

11 1 12 1 13 1 14 1

-
- - - -

15 2 16 2 17 2 18 2

-
- - - -

19 3 20 3 21 3 22 3

-
- - - -

23 4 24 4 25 4 26 4

-
- - - -

27 5 28 5 29 5 30 5

-
- - - -

31 6 32 6 33 6 34 6

-
- - - -

35 7 36 7 37 7 38 7

-
- - - -

39 8 40 8 41 8 42 8

-
- - - -

43 9 44 9 45 9 46 9

-
- - - -

47 10 48 10 49 10 50 10 51 10

-

52 10 53 10 54 10 55 10

-
- - - -

56 11 57 11 58 11 59 11

-
- - - -

60 12 61 12 62 12 63 12 64 12

-

65 12 66 12 67 12 68 12

-
- - - -

69 13 70 13 71 13 72 13 73 13

-

74 13 75 13 76 13 77 13

-
- - - -

78 14 79 14 80 14 81 14 82 14

-

83 14 84 14 85 14 86 14

-
- - - -

87 15 88 15 89 15 90 15 91 15

-

92 15 93 15 94 15 95 15

-
- - - -

96 16 97 16 98 16

-
- - - -

105 17 106 17 107 17

-
- - - -

99 17 100 17 101 17 102 17 103 17 104 17

-
- - - -

171 66 152 66 165 66

-
- - - -

175 66 174 66 173 66 154 66

-

152 66 171 66 172 66 176 66 175 66 154 66

-
- - - -

164 67 163 67 149 67

-
- - - -

169 67 151 67 167 67 170 67

-

151 67 169 67 168 67 166 67 164 67 149 67

-
- - - -

157 68 142 68 156 68

-
- - - -

160 68 162 68 161 68 144 68

-

144 68 142 68 157 68 158 68 159 68 160 68

-
- - - -

128 38 132 42 136 46 138 48 134 44 130 40 126 36 122 32 118 28 114 24 110 20 108 18 112 22 116 26 120 30 124 34

-

129 39 150 60 152 62 133 43

-

133 43 152 62 154 64 137 47

-

137 47 154 64 155 65 139 49

-

139 49 155 65 153 63 135 45

-

135 45 153 63 151 61 131 41

-

131 41 151 61 149 59 127 37

-

127 37 149 59 147 57 123 33

-

123 33 147 57 145 55 119 29

-

119 29 145 55 143 53 115 25

-

115 25 143 53 141 51 111 21

-

111 21 141 51 140 50 109 19

-

109 19 140 50 142 52 113 23

-

113 23 142 52 144 54 117 27

-

117 27 144 54 146 56 121 31

-

121 31 146 56 148 58 125 35

-

125 35 148 58 150 60 129 39

-
- - - -

177 69 178 69 179 69 186 69 187 69 188 69

-
- - - -

180 69 181 69 182 69 183 69 184 69 185 69

-
- - - -

189 70 190 70 191 70

-
- - - -

262 199 234 199 237 199 238 199 316 199 318 199 238 199 314 199 316 199 230 199 308 199 310 199 256 199 232 199 313 199 236 199 261 199 315 199 236 199 315 199 313 199 228 199 309 199 307 199 228 199 307 199 305 199 230 199 306 199 308 199

-
- - - -

318 199 262 199 237 199 241 199 271 199 269 199 240 199 238 199

-

312 199 314 199 238 199 233 199

-

312 199 233 199 230 199 310 199

-

236 199 235 199 264 199 239 199

-

234 199 261 199 236 199 239 199 267 199 241 199

-

236 199 313 199 232 199 231 199 259 199 235 199

-

256 199 309 199 228 199 227 199 252 199 255 199 231 199 232 199

-

304 199 229 199 228 199 305 199

-

230 199 229 199 304 199 306 199

-
- - - -

202 200 201 200 200 200

-
- - - -

216 200 202 200 200 200 198 200 199 200

-

215 200 201 200 202 200 216 200 321 200 203 200 219 200

-
- - - -

195 201 209 201 196 201 194 201

-

209 201 195 201 192 201 205 201 208 201 197 201 320 201

-

194 201 193 201 192 201 195 201

-
- - - -

285 164 281 160 277 156 273 152 275 154 279 158 283 162 287 166 291 170 295 174 299 178 303 182 301 180 297 176 293 172 289 168

-

316 195 314 193 292 171 296 175

-

318 197 316 195 296 175 300 179

-

319 198 318 197 300 179 302 181

-

317 196 319 198 302 181 298 177

-

315 194 317 196 298 177 294 173

-

313 192 315 194 294 173 290 169

-

311 190 313 192 290 169 286 165

-

309 188 311 190 286 165 282 161

-

307 186 309 188 282 161 278 157

-

305 184 307 186 278 157 274 153

-

304 183 305 184 274 153 272 151

-

306 185 304 183 272 151 276 155

-

308 187 306 185 276 155 280 159

-

310 189 308 187 280 159 284 163

-

312 191 310 189 284 163 288 167

-

314 193 312 191 288 167 292 171

-
- - - -

285 164 281 160 277 156 273 152 275 154 279 158 283 162 287 166 291 170 295 174 299 178 303 182 301 180 297 176 293 172 289 168

-

316 195 314 193 292 171 296 175

-

318 197 316 195 296 175 300 179

-

319 198 318 197 300 179 302 181

-

317 196 319 198 302 181 298 177

-

315 194 317 196 298 177 294 173

-

313 192 315 194 294 173 290 169

-

311 190 313 192 290 169 286 165

-

309 188 311 190 286 165 282 161

-

307 186 309 188 282 161 278 157

-

305 184 307 186 278 157 274 153

-

304 183 305 184 274 153 272 151

-

306 185 304 183 272 151 276 155

-

308 187 306 185 276 155 280 159

-

310 189 308 187 280 159 284 163

-

312 191 310 189 284 163 288 167

-

314 193 312 191 288 167 292 171

-

249 128 227 106 230 109 226 105 247 126 243 122 245 124

-

220 99 260 139 265 144 222 101

-

222 101 265 144 268 147 224 103

-

224 103 268 147 270 149 225 104

-

225 104 270 149 266 145 223 102

-

223 102 266 145 263 142 221 100

-

221 100 263 142 258 137 219 98

-

219 98 258 137 254 133 215 94

-

215 94 254 133 251 130 212 91

-

212 91 251 130 248 127 210 89

-

210 89 248 127 244 123 206 85

-

206 85 244 123 242 121 205 84

-

205 84 242 121 246 125 208 87

-

208 87 246 125 250 129 211 90

-

211 90 250 129 253 132 213 92

-

213 92 253 132 257 136 217 96

-

217 96 257 136 260 139 220 99

-
- - - -

363 232 360 232 351 232 363 232 351 232 350 232 343 232 357 232 354 232 354 232 342 232 343 232 358 232 346 232 344 232 348 232 346 232 358 232

-
- - - -

365 232 369 232 364 232 363 232 350 232 348 232 358 232

-

358 232 344 232 342 232 354 232 353 232 366 232 352 232

-
- - - -

349 233 360 233 361 233 356 233 357 233 345 233

-
- - - -

364 233 368 233 362 233 359 233 347 233 349 233 361 233

-

345 233 347 233 359 233 355 233 367 233 353 233 356 233

-
- - - -

329 209 325 205 323 203 327 207 331 211 335 215 339 219 341 221 337 217 333 213

-

351 231 349 229 336 216 340 220

-

350 230 351 231 340 220 338 218

-

348 228 350 230 338 218 334 214

-

346 226 348 228 334 214 330 210

-

344 224 346 226 330 210 326 206

-

342 222 344 224 326 206 322 202

-

343 223 342 222 322 202 324 204

-

345 225 343 223 324 204 328 208

-

347 227 345 225 328 208 332 212

-

349 229 347 227 332 212 336 216

-
-
- - - CAT3DBagRep - - -
- - - - 300.449 -114.555 9.7512 300.323 -114.555 59.7512 300.323 -114.555 34.8756 312.479 -114.555 34.6268 312.479 -114.555 34.6268 349.822 -114.555 59.2537 312.479 -114.555 34.8756 350.449 -114.555 9.6517 360.449 -114.555 9.7512 360.449 -114.555 59.5012 360.449 -114.555 59.5012 398.136 -114.555 59.7512 398.136 -114.555 59.7512 410.449 -114.555 51.4012 410.449 -114.555 51.4012 410.136 -114.555 43.1012 410.136 -114.555 43.1012 397.511 -114.555 34.5012 397.511 -114.555 34.5012 361.199 -114.555 34.5012 372.261 -114.555 34.7512 410.449 -114.555 9.6512 420.449 -114.555 9.7512 439.868 -114.555 9.4512 430.158 -114.555 10.2012 430.158 -114.555 59.7512 430.158 -114.555 59.7512 419.998 -114.555 50.9512 490.54 -114.555 59.3092 450.219 -114.555 59.3092 450.219 -114.555 59.3092 449.868 -114.555 42.9535 449.868 -114.555 42.9535 479.407 -114.555 42.9535 479.407 -114.555 42.9535 489.637 -114.555 34.3092 489.637 -114.555 34.3092 489.637 -114.555 18.8377 489.637 -114.555 18.8377 479.407 -114.555 10.1932 479.407 -114.555 10.1932 461.353 -114.555 9.7512 461.353 -114.555 9.7512 450.671 -114.555 17.4624 500.54 -114.555 19.9158 500.101 -114.555 49.9254 500.101 -114.555 49.9254 509.915 -114.555 58.88 509.915 -114.555 58.88 519.388 -114.555 58.88 519.388 -114.555 58.88 529.788 -114.555 51.2323 529.788 -114.555 51.2323 530.228 -114.555 19.4317 530.228 -114.555 19.4317 520.755 -114.555 10.4773 520.755 -114.555 10.4773 511.722 -114.555 10.4773 511.722 -114.555 10.4773 500.101 -114.555 19.9158 540.228 -114.555 34.7762 580.138 -114.555 34.576 600.228 -114.555 9.7512 619.647 -114.555 9.4512 609.937 -114.555 10.2012 609.937 -114.555 59.7512 609.937 -114.555 59.7512 599.777 -114.555 50.9512 - - - - - - - - - - - - - -

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

-
-
- - - CAT3DBagRep - - -
- - - - 45.3272 20 158.134 45.3272 20 158.134 45.3272 20 158.134 288.097 12 257.948 288.097 12 257.948 298.439 -12 227.665 298.439 -12 227.665 299.732 0 223.879 299.732 0 223.879 40.1565 -12.0002 173.276 40.1565 -12.0002 173.276 40.1565 -12.0002 173.276 45.3272 20 158.134 45.3272 20 158.134 45.3272 20 158.134 45.3272 20 158.134 45.4539 -0.000183 239.243 45.4539 -0.000183 239.243 45.4539 -0.000183 239.243 45.4539 -0.000183 239.243 45.4539 -0.000183 239.243 59.1825 50.5904 234.145 59.1825 50.5904 234.145 59.1825 50.5904 234.145 59.1825 50.5904 234.145 80.9819 84.3176 170.311 80.9819 84.3176 170.311 80.9819 84.3176 170.311 80.9819 84.3176 170.311 80.9821 -84.3176 170.31 80.9821 -84.3176 170.31 80.9821 -84.3176 170.31 80.9821 -84.3176 170.31 95.0387 0.000107 94.0457 95.0387 0.000107 94.0457 95.0387 0.000107 94.0457 95.0387 0.000107 94.0457 102.781 50.5907 106.476 102.781 50.5907 106.476 102.781 50.5907 106.476 102.781 -50.5904 106.476 102.781 -50.5904 106.476 102.781 -50.5904 106.476 102.781 -50.5904 106.476 228.718 -22.932 303.844 228.718 -22.932 303.844 228.718 -22.932 303.844 228.718 -22.932 303.844 254.127 -81.8999 229.44 254.127 -81.8999 229.44 254.127 -81.8999 229.44 254.127 -81.8999 229.44 254.127 -81.8999 229.44 254.127 81.8999 229.44 254.127 81.8999 229.44 254.127 81.8999 229.44 254.127 81.8999 229.44 257.278 -40.4257 287.473 257.278 -40.4257 287.473 257.278 -40.4257 287.473 257.278 40.4257 287.473 257.278 40.4257 287.473 257.278 40.4257 287.473 257.278 40.4257 287.473 279.537 22.932 155.035 279.537 22.932 155.035 279.537 22.932 155.035 279.537 22.932 155.035 286.805 0 261.733 286.805 0 261.733 288.097 -12 257.948 288.097 12 257.948 292.117 40.4257 185.456 292.117 40.4257 185.456 292.117 40.4257 185.456 292.117 -40.4257 185.456 292.117 -40.4257 185.456 292.117 -40.4257 185.456 292.117 -40.4257 185.456 292.117 -40.4257 185.456 293.268 20 242.806 293.268 20 242.806 293.268 20 242.806 293.268 -20 242.806 293.268 -20 242.806 298.439 12 227.665 39.5118 20.0464 184.393 39.5118 20.0464 184.393 39.5118 -20.0466 184.392 39.5118 -20.0466 184.392 45.4539 -0.000183 239.243 45.4539 -0.000183 239.243 45.4539 -0.000183 239.243 48.1498 33.4108 159.098 48.1498 33.4108 159.098 48.1498 -33.4109 159.098 48.1498 -33.4109 159.098 48.683 44.2517 221.629 48.683 -44.252 221.628 50.4123 46.0289 224.723 50.4123 46.0289 224.723 50.4124 -46.0292 224.723 50.4124 -46.0292 224.723 53.7326 -0.000198 250.104 54.8226 -23.6091 246.912 54.8226 23.6087 246.912 56.5345 65.0762 198.637 56.5345 65.0762 198.637 56.5346 -65.0764 198.637 56.5346 -65.0764 198.637 56.7878 20.0466 133.804 56.7879 -20.0464 133.804 56.7879 -20.0464 133.804 59.1825 50.5904 234.145 59.1826 -50.5907 234.145 67.7511 73.7531 165.792 67.7512 -73.7531 165.792 78.9676 65.0763 132.947 78.9677 -65.0763 132.947 86.8192 44.252 109.956 86.8193 -44.2518 109.956 90.0801 46.0291 108.565 90.0801 46.0291 108.565 90.0802 -46.029 108.565 95.0387 0.000107 94.0457 95.0387 0.000107 94.0457 95.0387 0.000107 94.0457 95.0387 0.000107 94.0457 102.781 50.5907 106.476 102.781 -50.5904 106.476 107.141 23.6091 93.7092 107.141 -23.6088 93.709 108.231 0.000153 90.5174 227.659 0 306.945 227.659 0 306.945 228.718 -22.932 303.844 228.718 22.9319 303.844 228.718 22.9319 303.844 228.718 22.9319 303.844 232.953 -49.14 291.444 232.953 49.1399 291.444 252.923 0 300.225 257.278 -40.4257 287.473 257.278 40.4257 287.473 257.278 40.4257 287.473 264.451 59.4495 266.469 264.451 -59.4495 266.469 274.697 67.3761 236.464 274.697 67.3761 236.464 274.697 -67.3761 236.464 275.302 -49.14 167.435 275.302 49.1399 167.435 276.642 -27.3839 275.71 276.642 27.3839 275.71 279.537 -22.932 155.035 279.537 -22.932 155.035 279.537 22.932 155.035 280.595 0 151.934 280.595 0 151.934 284.944 -59.4495 206.459 284.944 -59.4495 206.459 284.944 59.4495 206.459 288.442 -45.6398 241.158 288.442 -45.6398 241.158 288.442 -45.6398 241.158 288.442 45.6397 241.158 288.442 45.6397 241.158 292.117 40.4257 185.456 292.117 40.4257 185.456 292.117 -40.4257 185.456 296.472 0 172.704 296.472 0 172.704 300.241 -27.3839 206.605 300.241 27.3838 206.605 37.3522 -0.000183 190.716 38.8637 -0.000198 177.061 40.1564 11.9998 173.276 43.916 -0.000198 235.588 45.3273 -20 158.134 50.498 12.0001 142.993 50.498 -11.9999 142.993 51.7907 0.000107 139.208 58.5792 67.6897 200.808 58.5793 -67.6899 200.808 58.9473 0.000107 127.48 65.5375 -0.000183 256.969 66.6621 -24.3602 253.676 66.6621 24.3598 253.676 68.1587 74.3978 207.86 68.1588 -74.3979 207.86 70.2462 76.715 166.644 70.2463 -76.7151 166.644 71.1607 52.1999 240.503 71.1608 -52.2001 240.503 80.4225 76.7646 213.382 80.4226 -76.7648 213.382 81.9132 67.6898 132.48 81.9133 -67.6898 132.48 91.5863 0.000107 95.9966 93.6537 87 174.638 93.6538 -87.0001 174.638 93.8051 74.3979 132.761 93.8053 -74.3977 132.761 106.885 76.7648 135.894 106.885 -76.7646 135.893 116.147 52.2001 108.773 116.147 -52.1999 108.772 120.645 -24.3599 95.5994 120.645 24.3602 95.5995 121.77 0.000137 92.3062 201.747 0 303.485 202.872 -24.36 300.192 202.872 24.36 300.192 207.37 -52.2 287.019 207.37 52.2 287.019 216.632 76.7647 259.898 216.632 -76.7648 259.897 229.863 -87.0001 221.153 229.863 87 221.153 241.672 -72.2646 265.913 241.672 72.2646 265.913 243.095 -76.7648 182.409 243.095 76.7647 182.409 252.356 -52.2 155.288 252.356 52.2 155.288 256.855 -24.36 142.115 256.855 24.36 142.115 257.98 0 138.822 266.583 -72.2646 192.967 266.583 72.2646 192.967 273.692 0 284.349 303.191 0 197.967 117.12 -19 74.7717 124.284 -6.20316 53.7964 124.906 -12.1352 51.9723 121.615 -32.9089 61.6091 115.475 0 79.5895 123.632 0 55.7038 124.284 -6.20316 53.7964 117.12 -19 74.7717 117.12 19 74.7717 123.145 4.63525 57.129 123.632 0 55.7038 115.475 0 79.5895 117.12 19 74.7717 124.038 6.64183 54.5154 123.145 4.63525 57.129 121.615 32.909 61.6091 125.784 10.5673 49.4023 124.038 6.64183 54.5154 117.12 19 74.7717 127.756 38 43.6287 127.756 15 43.6287 125.784 10.5673 49.4023 121.615 32.909 61.6091 133.896 32.909 25.6483 129.728 10.5673 37.8551 127.756 15 43.6287 127.756 38 43.6287 138.391 19 12.4856 131.474 6.64182 32.7421 129.728 10.5673 37.8551 133.896 32.909 25.6483 132.366 4.63524 30.1284 131.474 6.64182 32.7421 138.391 19 12.4856 140.036 0 7.66779 131.879 0 31.5536 132.366 4.63524 30.1284 138.391 19 12.4856 138.391 -19 12.4856 131.228 -6.20316 33.4611 131.879 0 31.5536 140.036 0 7.66779 133.896 -32.9089 25.6482 130.605 -12.1352 35.285 131.228 -6.20316 33.4611 138.391 -19 12.4856 133.896 -32.9089 25.6482 130.02 -12.1352 36.9984 130.605 -12.1352 35.285 127.756 -38 43.6287 127.756 -12.1352 43.6287 130.02 -12.1352 36.9984 133.896 -32.9089 25.6482 121.615 -32.9089 61.6091 125.492 -12.1352 50.259 127.756 -12.1352 43.6287 127.756 -38 43.6287 124.906 -12.1352 51.9723 125.492 -12.1352 50.259 121.615 -32.9089 61.6091 -57.8741 -35.0002 -15.8303 -57.8741 34.9998 -15.8303 -55.4679 34.9998 -22.8762 -55.4679 -35.0002 -22.8762 -36.5985 34.9998 -47.5452 -36.5985 -35.0002 -47.5452 -55.4679 -35.0002 -22.8762 -55.4679 34.9998 -22.8762 -7.92261 34.9998 -59.4746 -7.92261 -35.0002 -59.4746 -36.5984 -35.0002 -47.5453 -36.5984 34.9998 -47.5453 22.8761 34.9998 -55.4678 22.8761 -35.0002 -55.4678 -7.92258 -35.0002 -59.4745 -7.92258 34.9998 -59.4745 47.5453 34.9998 -36.5985 47.5452 -35.0002 -36.5985 22.8761 -35.0002 -55.4679 22.8761 34.9998 -55.4679 85.1925 34.9998 -23.742 85.1924 -35.0002 -23.742 47.5452 -35.0002 -36.5984 47.5453 34.9998 -36.5984 85.1925 34.9998 -23.742 143.915 49.9998 -3.68835 143.915 -50.0002 -3.68835 109.779 -50.0002 -15.3458 85.1924 -35.0002 -23.742 85.1925 34.9998 -23.742 109.78 49.9998 -15.3452 143.915 49.9998 -3.68835 -57.8741 34.9998 -15.8303 -57.8741 -35.0002 -15.8303 -58.0354 -35.0002 15.2276 -58.0354 34.9998 15.2276 -58.0354 34.9998 15.2276 -58.0354 -35.0002 15.2276 -42.6463 -35.0002 42.2053 -42.6463 34.9998 42.2053 -42.6463 34.9998 42.2053 -42.6463 -35.0002 42.2053 -15.8301 -35.0002 57.874 -15.8301 34.9998 57.874 -15.8301 34.9998 57.874 -15.8301 -35.0002 57.874 15.2277 -35.0002 58.0353 15.2277 34.9998 58.0353 52.8748 34.9998 70.892 15.2277 34.9998 58.0354 15.2277 -35.0002 58.0355 52.8749 -35.0002 70.8919 52.8748 34.9998 70.892 52.8749 -35.0002 70.8919 77.4612 -50.0002 79.2881 111.597 -50.0002 90.9456 111.597 49.9998 90.9456 52.8748 34.9998 70.892 111.597 49.9998 90.9456 77.4626 49.9998 79.2886 109.78 49.9998 -15.3452 77.4627 49.9998 79.2886 111.597 49.9998 90.9455 143.915 49.9998 -3.68829 109.779 -50.0002 -15.3458 143.915 -50.0002 -3.68829 111.597 -50.0002 90.9456 77.4612 -50.0002 79.2881 111.597 49.9998 90.9455 111.597 -50.0002 90.9455 143.915 -50.0002 -3.68842 143.915 49.9998 -3.68829 109.78 49.9998 -15.3452 85.1925 34.9998 -23.742 52.8748 34.9998 70.8918 77.4627 49.9998 79.2886 85.1924 -35.0002 -23.742 109.779 -50.0002 -15.3458 77.4612 -50.0002 79.2881 52.8748 -35.0002 70.8919 -42.6463 34.9998 42.2053 -15.83 34.9998 57.874 15.2277 34.9998 58.0354 -58.0354 34.9998 15.2276 -42.6463 34.9998 42.2053 15.2277 34.9998 58.0354 -58.0354 34.9998 15.2276 15.2277 34.9998 58.0354 52.8748 34.9998 70.8918 85.1925 34.9998 -23.7419 47.5453 34.9998 -36.5986 -36.5985 34.9998 -47.5453 -55.4679 34.9998 -22.8762 -57.874 34.9998 -15.8303 47.5453 34.9998 -36.5986 22.8761 34.9998 -55.4678 -7.92258 34.9998 -59.4746 47.5453 34.9998 -36.5986 -7.92258 34.9998 -59.4746 -36.5985 34.9998 -47.5453 -7.92264 -35.0002 -59.4745 22.876 -35.0002 -55.4677 47.5452 -35.0002 -36.5985 -36.5984 -35.0002 -47.5453 -7.92264 -35.0002 -59.4745 47.5452 -35.0002 -36.5985 -36.5984 -35.0002 -47.5453 47.5452 -35.0002 -36.5985 85.1923 -35.0002 -23.742 52.8748 -35.0002 70.8919 15.2277 -35.0002 58.0354 -58.0355 -35.0002 15.2277 -57.8741 -35.0002 -15.8302 -55.4678 -35.0002 -22.8761 15.2277 -35.0002 58.0354 -15.8301 -35.0003 57.874 -42.6463 -35.0002 42.2053 15.2277 -35.0002 58.0354 -42.6463 -35.0002 42.2053 -58.0355 -35.0002 15.2277 361.272 -50 308.25 361.272 50 308.25 304.89 50 287.729 304.89 -50 287.729 381.844 50 76.298 381.844 -50 76.298 304.89 -50 287.729 304.89 50 287.729 438.226 50 96.8192 381.844 50 76.298 304.89 50 287.729 361.272 50 308.25 438.226 -50 96.8192 438.226 50 96.8192 361.272 50 308.25 361.272 -50 308.25 381.844 -50 76.298 438.226 -50 96.8192 361.272 -50 308.25 304.89 -50 287.729 438.226 -50 96.8192 381.844 -50 76.298 381.844 50 76.298 438.226 50 96.8192 421.122 34.9997 143.813 415.135 30.3106 160.261 458.051 30.3106 174.917 463.706 34.9997 158.356 427.108 30.3106 127.365 421.122 34.9997 143.813 463.706 34.9997 158.356 469.362 30.3106 141.795 431.491 17.4997 115.325 427.108 30.3106 127.365 469.362 30.3106 141.795 473.502 17.4997 129.671 433.095 -0.000326 110.917 431.491 17.4997 115.325 473.502 17.4997 129.671 475.017 -0.000336 125.234 475.017 -0.000336 125.234 473.502 17.4997 129.671 469.362 30.3106 141.795 463.706 34.9997 158.356 458.051 30.3106 174.917 453.91 17.4997 187.04 452.395 -0.00032 191.478 453.91 -17.5003 187.04 458.051 -30.3112 174.917 463.706 -35.0003 158.356 469.362 -30.3112 141.795 473.502 -17.5003 129.671 427.108 -30.3112 127.365 431.491 -17.5003 115.325 473.502 -17.5003 129.671 469.362 -30.3112 141.795 421.122 -35.0003 143.813 427.108 -30.3112 127.365 469.362 -30.3112 141.795 463.706 -35.0003 158.356 415.135 -30.3112 160.261 421.122 -35.0003 143.813 463.706 -35.0003 158.356 458.051 -30.3112 174.917 410.753 -17.5003 172.302 415.135 -30.3112 160.261 458.051 -30.3112 174.917 453.91 -17.5003 187.04 409.149 -0.000312 176.709 410.753 -17.5003 172.302 453.91 -17.5003 187.04 452.395 -0.00032 191.478 410.753 17.4997 172.302 409.149 -0.000312 176.709 452.395 -0.00032 191.478 453.91 17.4997 187.04 415.135 30.3106 160.261 410.753 17.4997 172.302 453.91 17.4997 187.04 458.051 30.3106 174.917 410.753 17.4997 172.302 415.135 30.3106 160.261 421.122 34.9997 143.813 427.108 30.3106 127.365 431.491 17.4997 115.325 433.095 -0.000326 110.917 431.491 -17.5003 115.325 427.108 -30.3112 127.365 421.122 -35.0003 143.813 415.135 -30.3112 160.261 410.753 -17.5003 172.302 409.149 -0.000312 176.709 431.491 -17.5003 115.325 433.095 -0.000326 110.917 475.017 -0.000336 125.234 473.502 -17.5003 129.671 370.316 -30.3112 107.971 374.699 -17.5003 95.9301 376.303 -0.000313 91.5229 374.699 17.4997 95.9301 370.317 30.3106 107.971 364.33 34.9997 124.419 358.343 30.3106 140.867 353.961 17.4997 152.907 352.357 -0.000302 157.315 353.961 -17.5003 152.907 358.343 -30.3112 140.867 364.33 -35.0003 124.419 139.067 -0.000259 10.5067 137.552 -17.5003 14.9442 133.411 -30.3112 27.0676 127.756 -35.0002 43.6285 122.1 -30.3112 60.1895 117.96 -17.5003 72.3129 116.445 -0.000259 76.7504 117.96 17.4997 72.3129 122.1 30.3106 60.1895 127.756 34.9997 43.6285 133.411 30.3106 27.0676 137.552 17.4997 14.9442 376.303 -0.000313 91.5229 139.067 -0.000259 10.5067 137.552 17.4997 14.9442 374.699 17.4997 95.9301 374.699 17.4997 95.9301 137.552 17.4997 14.9442 133.411 30.3106 27.0676 370.317 30.3106 107.971 370.317 30.3106 107.971 133.411 30.3106 27.0676 127.756 34.9997 43.6285 364.33 34.9997 124.419 364.33 34.9997 124.419 127.756 34.9997 43.6285 122.1 30.3106 60.1895 358.343 30.3106 140.867 358.343 30.3106 140.867 122.1 30.3106 60.1895 117.96 17.4997 72.3129 353.961 17.4997 152.907 353.961 17.4997 152.907 117.96 17.4997 72.3129 116.445 -0.000259 76.7504 352.357 -0.000302 157.315 352.357 -0.000302 157.315 116.445 -0.000259 76.7504 117.96 -17.5003 72.3129 353.961 -17.5003 152.907 353.961 -17.5003 152.907 117.96 -17.5003 72.3129 122.1 -30.3112 60.1895 358.343 -30.3112 140.867 358.343 -30.3112 140.867 122.1 -30.3112 60.1895 127.756 -35.0002 43.6285 364.33 -35.0003 124.419 364.33 -35.0003 124.419 127.756 -35.0002 43.6285 133.411 -30.3112 27.0676 370.316 -30.3112 107.971 370.316 -30.3112 107.971 133.411 -30.3112 27.0676 137.552 -17.5003 14.9442 374.699 -17.5003 95.9301 374.699 -17.5003 95.9301 137.552 -17.5003 14.9442 139.067 -0.000259 10.5067 376.303 -0.000313 91.5229 39.8673 -10.0001 174.572 17.0176 -10 166.769 19.3834 -17.3206 159.841 41.206 -17.3206 167.294 42.5839 -17.3206 167.764 45.3273 -20.0001 158.134 40.5957 -12.6797 171.989 42.5839 -17.3206 167.764 19.3834 -17.3206 159.841 22.6151 -20 150.378 45.3273 -20.0001 158.134 49.0474 -17.3206 148.838 50.0589 -12.6793 144.279 45.3273 -20.0001 158.134 22.6151 -20 150.378 25.8469 -17.3206 140.915 49.0474 -17.3206 148.838 45.3273 -20.0001 158.134 49.0474 -17.3206 148.838 25.8469 -17.3206 140.915 28.2127 -10 133.987 50.6428 -10.0001 141.647 51.0624 -10.0001 141.79 51.7908 0 139.207 50.6078 -10.9808 142.671 51.0624 -10.0001 141.79 28.2127 -10 133.987 29.0786 0 131.451 51.7908 0 139.207 51.0624 9.99994 141.79 50.6078 10.9809 142.671 51.7908 0 139.207 29.0786 0 131.451 28.2127 9.99995 133.987 51.0624 9.99994 141.79 51.7908 0 139.207 51.0624 9.99994 141.79 28.2127 9.99995 133.987 25.8469 17.3205 140.915 47.6695 17.3205 148.367 42.5839 17.3205 167.764 40.5956 12.6794 171.99 45.3272 19.9999 158.134 49.0474 17.3205 148.838 45.3272 19.9999 158.134 50.0588 12.6795 144.279 25.8469 17.3205 140.915 22.6151 20 150.378 45.3272 19.9999 158.134 49.0474 17.3205 148.838 45.3272 19.9999 158.134 22.6151 20 150.378 19.3834 17.3205 159.841 42.5839 17.3205 167.764 42.5839 17.3205 167.764 19.3834 17.3205 159.841 17.0176 9.99995 166.769 39.4477 9.99994 174.429 39.8673 9.99994 174.572 38.8638 0 177.061 40.0466 10.9806 173.597 39.8673 9.99994 174.572 17.0176 9.99995 166.769 16.1516 0 169.305 38.8638 0 177.061 16.1516 0 169.305 17.0176 9.99995 166.769 19.3834 17.3205 159.841 22.6151 20 150.378 25.8469 17.3205 140.915 28.2127 9.99995 133.987 29.0786 0 131.451 28.2127 -10 133.987 25.8469 -17.3206 140.915 22.6151 -20 150.378 19.3834 -17.3206 159.841 17.0176 -10 166.769 16.1516 0 169.305 17.0176 -10 166.769 39.8673 -10.0001 174.572 38.8638 0 177.061 39.8673 -10.0001 174.572 40.0467 -10.9808 173.597 38.8638 0 177.061 296.063 17.3203 233.194 298 12.6797 228.951 293.268 19.9998 242.806 321.658 19.9998 252.501 324.89 17.3203 243.038 296.063 17.3203 233.194 293.268 19.9998 242.806 298.743 9.99982 226.373 297.295 17.3203 233.614 324.89 17.3203 243.038 327.256 9.9998 236.11 298.549 10.9804 227.343 298.743 9.99982 226.373 299.732 -0.000179 223.879 327.256 9.9998 236.11 328.122 -0.000198 233.575 299.732 -0.000179 223.879 298.743 9.99982 226.373 298.743 -10.0002 226.373 298.549 -10.981 227.343 299.732 -0.000179 223.879 298.743 -10.0002 226.373 299.732 -0.000179 223.879 328.122 -0.000198 233.575 327.256 -10.0002 236.11 296.063 -17.3207 233.194 299.118 -10.0002 226.501 327.256 -10.0002 236.11 324.89 -17.3207 243.038 296.063 -17.3207 233.194 293.268 -20.0002 242.806 298 -12.6793 228.95 324.89 -17.3207 243.038 321.658 -20.0002 252.501 293.268 -20.0002 242.806 296.063 -17.3207 233.194 289.6 -17.3207 252.12 288.536 -12.6794 256.662 293.268 -20.0002 242.806 289.6 -17.3207 252.12 293.268 -20.0002 242.806 321.658 -20.0002 252.501 318.427 -17.3207 261.965 287.548 -10.0002 259.155 290.832 -17.3207 252.541 318.427 -17.3207 261.965 316.061 -10.0002 268.892 287.988 -10.9809 258.269 287.548 -10.0002 259.155 286.805 -0.000166 261.733 287.548 9.99983 259.155 287.987 10.9804 258.269 286.805 -0.000166 261.733 287.548 9.99983 259.155 286.805 -0.000166 261.733 315.195 -0.000183 271.428 316.061 9.99982 268.892 316.061 -10.0002 268.892 315.195 -0.000183 271.428 286.805 -0.000166 261.733 287.548 -10.0002 259.155 315.195 -0.000183 271.428 316.061 -10.0002 268.892 318.427 -17.3207 261.965 321.658 -20.0002 252.501 324.89 -17.3207 243.038 327.256 -10.0002 236.11 328.122 -0.000198 233.575 327.256 9.9998 236.11 324.89 17.3203 243.038 321.658 19.9998 252.501 318.427 17.3203 261.965 316.061 9.99982 268.892 289.6 17.3203 252.12 287.923 9.99983 259.283 316.061 9.99982 268.892 318.427 17.3203 261.965 293.268 19.9998 242.806 289.6 17.3203 252.12 318.427 17.3203 261.965 321.658 19.9998 252.501 288.537 12.6797 256.661 289.6 17.3203 252.12 293.268 19.9998 242.806 40.1798 11.7087 172.873 39.4477 9.99994 174.429 39.8673 9.99994 174.572 50.2704 11.7089 143.326 47.6695 17.3205 148.367 49.0474 17.3205 148.838 50.2704 -11.7088 143.325 50.6428 -10.0001 141.647 51.0624 -10.0001 141.79 40.1798 -11.7089 172.873 41.206 -17.3206 167.294 42.5839 -17.3206 167.764 288.314 11.7086 257.611 287.548 9.99983 259.155 287.923 9.99983 259.283 298.405 11.7087 228.063 296.063 17.3203 233.194 297.295 17.3203 233.614 298.405 -11.709 228.063 298.743 -10.0002 226.373 299.118 -10.0002 226.501 288.314 -11.7087 257.612 289.6 -17.3207 252.12 290.832 -17.3207 252.541 354.429 -169 213.342 361.018 -169 219.931 361.018 -50 219.931 354.429 -50 213.342 352.018 -169 204.342 354.429 -169 213.342 354.429 -50 213.342 352.018 -50 204.342 354.429 -169 195.342 352.018 -169 204.342 352.018 -50 204.342 354.429 -50 195.342 361.018 -169 188.754 354.429 -169 195.342 354.429 -50 195.342 361.018 -50 188.754 370.018 -169 186.342 361.018 -169 188.754 361.018 -50 188.754 370.018 -50 186.342 379.018 -169 188.754 370.018 -169 186.342 370.018 -50 186.342 379.018 -50 188.754 385.606 -169 195.342 379.018 -169 188.754 379.018 -50 188.754 385.606 -50 195.342 388.018 -169 204.342 385.606 -169 195.342 385.606 -50 195.342 388.018 -50 204.342 385.606 -169 213.342 388.018 -169 204.342 388.018 -50 204.342 385.606 -50 213.342 379.018 -169 219.931 385.606 -169 213.342 385.606 -50 213.342 379.018 -50 219.931 370.018 -50 222.342 379.018 -50 219.931 385.606 -50 213.342 388.018 -50 204.342 385.606 -50 195.342 379.018 -50 188.754 370.018 -50 186.342 361.018 -50 188.754 354.429 -50 195.342 352.018 -50 204.342 354.429 -50 213.342 361.018 -50 219.931 361.018 -169 219.931 370.018 -169 222.342 370.018 -50 222.342 361.018 -50 219.931 370.018 -169 222.342 361.018 -169 219.931 354.429 -169 213.342 352.018 -169 204.342 354.429 -169 195.342 361.018 -169 188.754 370.018 -169 186.342 379.018 -169 188.754 385.606 -169 195.342 388.018 -169 204.342 385.606 -169 213.342 379.018 -169 219.931 370.018 -169 222.342 379.018 -169 219.931 379.018 -50 219.931 370.018 -50 222.342 - - - - - - - - - - -0.240883 -0.88447 0.399609 0.0538347 0.884468 -0.463485 0.213691 -0.296213 -0.930911 -0.240883 -0.88447 0.399609 0.240486 0.883887 -0.401135 0.882696 -0.3726 0.286386 0.971593 -0.233253 0.0400098 0.971593 -0.233253 0.0400098 0.991206 0 0.132328 -0.974219 0.22425 -0.0246895 -0.974219 -0.22425 -0.0246895 -0.911491 -0.216926 -0.349467 -0.974219 0.22425 -0.0246895 -0.895997 0.321818 -0.305979 -0.870986 0.144566 -0.469558 -0.801737 -0.223518 -0.554308 -0.974219 0.22425 -0.0246895 -0.918291 -0.333537 0.213294 -0.400311 0.296213 0.867184 -0.346873 -0.612903 0.70995 -0.260659 0 0.965431 -0.974219 0.22425 -0.0246895 -0.858742 0.512192 -0.014893 -0.346904 0.611896 0.710803 -0.210242 0.886555 0.412091 -0.780849 0.564959 -0.26664 -0.708154 0.510453 -0.487808 0.0538347 0.884468 -0.463485 0.0618305 0.997863 0.0211188 -0.918291 -0.333537 0.213294 -0.755775 -0.585437 -0.293374 -0.346873 -0.612903 0.70995 -0.0932035 -0.995112 -0.0326243 -0.801737 -0.223518 -0.554308 -0.631855 0 -0.775086 0.213691 -0.296213 -0.930911 0.384289 0 -0.923213 -0.595965 0.333537 -0.730465 0.159795 0.612903 -0.773831 0.245552 0.297525 -0.922596 -0.801737 -0.223518 -0.554308 -0.693471 -0.485977 -0.531907 0.054445 -0.883806 -0.464675 0.160283 -0.611896 -0.774527 -0.346873 -0.612903 0.70995 -0.214057 0.29722 0.930505 -0.160955 -0.611957 0.77434 0.706168 0 0.708045 -0.240883 -0.88447 0.399609 -0.160955 -0.611957 0.77434 -0.0550859 -0.883879 0.464461 0.240272 -0.884526 -0.399853 0.360881 -0.923561 0.129612 -0.210242 0.886555 0.412091 -0.0233772 0.880863 0.472793 0.240486 0.883887 -0.401135 0.624134 0.751683 0.213141 0.224006 -0.818064 0.52971 0.706168 0 0.708045 0.809406 -0.228065 0.541154 -0.214057 0.29722 0.930505 -0.0233772 0.880863 0.472793 0.624134 0.751683 0.213141 0.809415 0.228034 0.541154 0.245552 0.297525 -0.922596 0.346263 0.611957 -0.711063 0.399792 -0.29722 -0.867079 0.691491 0.270974 -0.669637 0.809415 0.228034 0.541154 0.865116 0 0.501572 0.809406 -0.228065 0.541154 0.809415 0.228034 0.541154 0.501206 0.818081 -0.282022 0.971348 0.228034 0.0669576 0.991755 0 -0.128147 0.240272 -0.884526 -0.399853 0.399792 -0.29722 -0.867079 0.882696 -0.3726 0.286386 0.971593 -0.233253 0.0400098 0.991755 0 -0.128147 0.624134 0.751683 0.213141 0.928169 0.195074 0.316935 0.971348 0.228034 0.0669576 0.809406 -0.228065 0.541154 0.882696 -0.3726 0.286386 0.971348 0.228034 0.0669576 -0.974219 0.22425 -0.0246895 -0.974219 0.22425 -0.0246895 -0.974219 -0.22425 -0.0246895 -0.974219 -0.22425 -0.0246895 -0.892229 0 0.451582 -0.892229 0 0.451582 -0.892229 0 0.451582 -0.895997 0.321818 -0.305979 -0.895997 0.321818 -0.305979 -0.896077 -0.336558 -0.289438 -0.896077 -0.336558 -0.289438 -0.929668 0.295602 0.219855 -0.918291 -0.333537 0.213294 -0.840332 0.421369 0.341014 -0.840332 0.421369 0.341014 -0.816744 -0.443281 0.369366 -0.816744 -0.443281 0.369366 -0.661946 0 0.749551 -0.648244 -0.2772 0.709183 -0.675588 0.247475 0.694505 -0.858742 0.512192 -0.014893 -0.858742 0.512192 -0.014893 -0.858627 -0.510422 -0.0472121 -0.858627 -0.510422 -0.0472121 -0.785838 0.22425 -0.576342 -0.801737 -0.223518 -0.554308 -0.801737 -0.223518 -0.554308 -0.599755 0.564318 0.567309 -0.558977 -0.608462 0.563311 -0.780849 0.564959 -0.26664 -0.755775 -0.585437 -0.293374 -0.708154 0.510453 -0.487808 -0.693471 -0.485977 -0.531907 -0.595965 0.333537 -0.730465 -0.600971 -0.295602 -0.742599 -0.420179 0.443281 -0.791803 -0.420179 0.443281 -0.791803 -0.456191 -0.421369 -0.783797 -0.429609 0 -0.903015 -0.429609 0 -0.903015 -0.429609 0 -0.903015 -0.429609 0 -0.903015 -0.0976287 0.608417 -0.78759 -0.127445 -0.564318 -0.815661 -0.0790735 0.2772 -0.957553 -0.109684 -0.247475 -0.962666 -0.0651875 0 -0.997873 -0.00231941 0 0.999997 -0.00231941 0 0.999997 0.137425 -0.270974 0.952726 0.0971099 0.301614 0.948472 0.0971099 0.301614 0.948472 0.0971099 0.301614 0.948472 0.126102 -0.564653 0.815638 0.0963164 0.608722 0.787515 0.418989 0 0.907991 0.487899 -0.351482 0.799009 0.46971 0.396008 0.789018 0.46971 0.396008 0.789018 0.609303 0.590869 0.528794 0.567339 -0.602981 0.560839 0.624134 0.751683 0.213141 0.624134 0.751683 0.213141 0.62862 -0.733261 0.259163 0.557878 -0.608763 -0.564074 0.598716 0.564653 -0.568072 0.809406 -0.228065 0.541154 0.809415 0.228034 0.541154 0.656972 -0.301614 -0.690953 0.656972 -0.301614 -0.690953 0.691491 0.270974 -0.669637 0.60979 0 -0.792563 0.60979 0 -0.792563 0.772527 -0.633656 -0.0410169 0.772527 -0.633656 -0.0410169 0.791923 0.602924 -0.0966521 0.882696 -0.3726 0.286386 0.882696 -0.3726 0.286386 0.882696 -0.3726 0.286386 0.866685 0.401593 0.295938 0.866685 0.401593 0.295938 0.87473 0.351482 -0.333628 0.87473 0.351482 -0.333628 0.854225 -0.396008 -0.336863 0.88687 0 -0.46202 0.88687 0 -0.46202 0.971593 -0.233253 0.0400098 0.971348 0.228034 0.0669576 0.928156 0.195091 0.316965 0.809405 0.228065 0.541156 0.865107 -6.94368e-007 0.501588 0.809405 -0.228065 0.541157 0.882681 -0.372627 0.286398 0.971589 -0.233268 0.0400162 0.991204 1.60526e-007 0.132344 0.97134 0.228064 0.0669679 0.469722 0.39601 0.789011 0.706196 -7.67144e-007 0.708016 0.854216 -0.396009 -0.336884 0.991753 1.76443e-007 -0.128168 0.624154 0.751665 0.213148 0.28681 0.796369 0.532482 0.126127 -0.564677 0.815617 0.224011 -0.818058 0.529717 0.360892 -0.923556 0.12962 0.498174 -0.823216 -0.272283 0.598666 0.564677 -0.568101 0.501228 0.818058 -0.282048 0.304148 0.946946 0.103866 -0.0234014 0.880859 0.4728 -0.160477 0.612944 0.773658 -0.214076 0.297226 0.930499 -0.00234807 1.84423e-006 0.999997 -0.18222 -0.295627 0.937763 -0.160969 -0.611976 0.774322 -0.0551056 -0.883869 0.464476 0.0925655 -0.995179 0.0324118 0.240283 -0.884512 -0.399878 0.346265 -0.612943 -0.710212 0.399793 -0.297222 -0.867078 0.609804 7.06085e-007 -0.792552 0.429438 0.295625 -0.853339 0.346282 0.611974 -0.711038 0.240511 0.883869 -0.401161 0.0618514 0.997862 0.0211234 -0.210262 0.886545 0.412101 -0.346909 0.611926 0.710775 -0.400334 0.296231 0.867168 -0.260662 -7.608e-007 0.96543 -0.370046 -0.297532 0.88008 -0.346882 -0.612912 0.709938 -0.24091 -0.884458 0.39962 -0.0932043 -0.995112 -0.0326435 0.0544545 -0.883804 -0.464678 0.16031 -0.611925 -0.774499 0.213707 -0.296229 -0.930902 0.384305 2.16651e-006 -0.923206 0.245562 0.29753 -0.922592 0.159812 0.61291 -0.773822 0.0538434 0.884458 -0.463502 -0.12451 0.991307 -0.0425181 -0.445647 0.841004 0.306775 -0.599731 0.56434 0.567312 -0.675606 0.247481 0.694485 -0.444844 -1.6021e-006 0.895608 -0.648265 -0.277208 0.70916 -0.558979 -0.608443 0.563328 -0.499279 -0.822762 0.271632 -0.362076 -0.923032 -0.130048 -0.225273 -0.817584 -0.529913 -0.127447 -0.564342 -0.815645 -0.109689 -0.247479 -0.962664 0.195884 2.82886e-006 -0.980627 -0.0790872 0.277208 -0.95755 -0.0976506 0.608442 -0.787568 -0.228837 0.822762 -0.520285 -0.420954 0.895618 -0.143754 -0.707026 0.69379 0.137002 -0.816734 -0.443298 0.369367 -0.731954 -0.672533 0.10928 -0.619962 -0.753499 -0.21883 -0.508523 -0.666704 -0.544895 -0.420195 0.4433 -0.791784 -0.512215 0.672535 -0.534165 -0.65176 0.725031 -0.222575 -0.85873 0.512212 -0.0149092 -0.929654 0.295627 0.219881 -0.892218 -2.14058e-007 0.451605 -0.918276 -0.333564 0.213316 -0.85861 -0.510449 -0.0472365 -0.755766 -0.585447 -0.293376 -0.693444 -0.485983 -0.531936 -0.60098 -0.295621 -0.742584 -0.429618 1.68762e-006 -0.903011 -0.595984 0.333564 -0.730437 -0.70815 0.510453 -0.487813 -0.974216 0.224262 -0.02469 -0.973965 -1.61072e-006 0.226697 -0.801723 -0.223531 -0.554323 -0.631857 -1.47353e-007 -0.775085 -0.895992 0.32183 -0.305979 -0.976261 0.144593 -0.16127 -0.999667 -9.91111e-007 -0.0257868 -0.97626 -0.144592 -0.161272 -0.911478 -0.216955 -0.349482 -0.865212 -0.120495 -0.486713 -0.806625 1.15713e-006 -0.591063 -0.87098 0.144593 -0.469561 -0.94634 4.35918e-007 -0.323174 -0.946339 0 -0.323177 -0.794283 0 -0.607548 -0.384096 0 -0.923293 0.129006 0 -0.991644 0.607546 -2.64869e-007 -0.794284 0.323175 1.89402e-007 -0.946339 -0.999987 0 -0.00519594 -0.868613 0 0.495491 -0.504493 0 0.863416 -0.00519595 0 0.999987 -0.323175 1.94372e-006 0.946339 0 1 0 0 -1 0 0.946339 -1.98792e-007 0.323175 -0.473151 0.866037 -0.161582 -0.473173 -0.866023 -0.161589 0 1 0 0 -1 0 -0.34199 0 0.939703 -0.34199 0 0.939703 -0.34199 0 0.939703 -0.34199 0 0.939703 -0.939703 0 -0.34199 -0.939703 0 -0.34199 -0.939703 0 -0.34199 -0.939703 0 -0.34199 0 1 0 0 1 0 0 1 0 0 1 0 0.939703 0 0.34199 0.939703 0 0.34199 0.939703 0 0.34199 0.939703 0 0.34199 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.34199 0 -0.939703 0.34199 0 -0.939703 0.34199 0 -0.939703 0.34199 0 -0.939703 0 1 0 -0.161565 0.866035 0.473159 -0.161565 0.866035 0.473159 0 1 0 0.161565 0.866035 -0.473159 0 1 0 0 1 0 0.161565 0.866035 -0.473159 0.279855 0.499985 -0.819571 0.161565 0.866035 -0.473159 0.161565 0.866035 -0.473159 0.279855 0.499985 -0.819571 0.32316 0 -0.946344 0.279855 0.499985 -0.819571 0.279855 0.499985 -0.819571 0.32316 0 -0.946344 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.161565 -0.866035 -0.473159 0.279855 -0.499985 -0.819571 0.279855 -0.499985 -0.819571 0.161565 -0.866035 -0.473159 0 -1 0 0.161565 -0.866035 -0.473159 0.161565 -0.866035 -0.473159 0 -1 0 -0.161565 -0.866035 0.473159 0 -1 0 0 -1 0 -0.161565 -0.866035 0.473159 -0.279855 -0.499985 0.819571 -0.161565 -0.866035 0.473159 -0.161565 -0.866035 0.473159 -0.279855 -0.499985 0.819571 -0.32316 0 0.946344 -0.279855 -0.499985 0.819571 -0.279855 -0.499985 0.819571 -0.32316 0 0.946344 -0.279855 0.499985 0.819571 -0.32316 0 0.946344 -0.32316 0 0.946344 -0.279855 0.499985 0.819571 -0.161565 0.866035 0.473159 -0.279855 0.499985 0.819571 -0.279855 0.499985 0.819571 -0.161565 0.866035 0.473159 -0.939703 0 -0.34199 -0.939703 0 -0.34199 -0.939703 0 -0.34199 -0.939703 0 -0.34199 -0.939703 0 -0.34199 -0.939703 0 -0.34199 -0.939703 0 -0.34199 -0.939703 0 -0.34199 -0.939703 0 -0.34199 -0.939703 0 -0.34199 -0.939703 0 -0.34199 -0.939703 0 -0.34199 0.279855 -0.499985 -0.819571 0.32316 0 -0.946344 0.32316 0 -0.946344 0.279855 -0.499985 -0.819571 0.939703 0 0.34199 0.939703 0 0.34199 0.939703 0 0.34199 0.939703 0 0.34199 0.939703 0 0.34199 0.939703 0 0.34199 0.939703 0 0.34199 0.939703 0 0.34199 0.939703 0 0.34199 0.939703 0 0.34199 0.939703 0 0.34199 0.939703 0 0.34199 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 0.32316 0 -0.946344 0.32316 0 -0.946344 0.279855 0.499985 -0.819571 0.279855 0.499985 -0.819571 0.279855 0.499985 -0.819571 0.279855 0.499985 -0.819571 0.161565 0.866035 -0.473159 0.161565 0.866035 -0.473159 0.161565 0.866035 -0.473159 0.161565 0.866035 -0.473159 0 1 0 0 1 0 0 1 0 0 1 0 -0.161565 0.866035 0.473159 -0.161565 0.866035 0.473159 -0.161565 0.866035 0.473159 -0.161565 0.866035 0.473159 -0.279855 0.499985 0.819571 -0.279855 0.499985 0.819571 -0.279855 0.499985 0.819571 -0.279855 0.499985 0.819571 -0.32316 0 0.946344 -0.32316 0 0.946344 -0.32316 0 0.946344 -0.32316 0 0.946344 -0.279855 -0.499985 0.819571 -0.279855 -0.499985 0.819571 -0.279855 -0.499985 0.819571 -0.279855 -0.499985 0.819571 -0.161565 -0.866035 0.473159 -0.161565 -0.866035 0.473159 -0.161565 -0.866035 0.473159 -0.161565 -0.866035 0.473159 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0.161565 -0.866035 -0.473159 0.161565 -0.866035 -0.473159 0.161565 -0.866035 -0.473159 0.161565 -0.866035 -0.473159 0.279855 -0.499985 -0.819571 0.279855 -0.499985 -0.819571 0.279855 -0.499985 -0.819571 0.279855 -0.499985 -0.819571 0.32316 0 -0.946344 0.32316 0 -0.946344 -0.279855 -0.499985 0.819571 -0.279855 -0.499985 0.819571 -0.161565 -0.866035 0.473159 -0.228492 -0.707129 0.669149 0.953252 0.215827 0.211493 0.923783 0.217078 0.315439 0.953252 0.215827 0.211493 -0.0836207 -0.965933 0.244911 -0.161565 -0.866035 0.473159 0 -1 0 0 -1 0 0.883512 0.215827 0.415723 0.883512 0.215827 0.415723 0.923783 0.217078 0.315439 0 -1 0 0.161565 -0.866035 -0.473159 0.161565 -0.866035 -0.473159 0 -1 0 0.161565 -0.866035 -0.473159 0.161565 -0.866035 -0.473159 0.279855 -0.499985 -0.819571 0.228492 -0.707129 -0.669149 0.851409 0.0721458 0.519517 0.853624 0 0.52089 0.851409 0.0721458 0.519517 0.312143 -0.258797 -0.914106 0.279855 -0.499985 -0.819571 0.32316 0 -0.946344 0.32316 0 -0.946344 0.85139 -0.0721458 0.519547 0.85139 -0.0721458 0.519547 0.853624 0 0.52089 0.32316 0 -0.946344 0.279855 0.499985 -0.819571 0.279855 0.499985 -0.819571 0.32316 0 -0.946344 0.279855 0.499985 -0.819571 0.279855 0.499985 -0.819571 0.161565 0.866035 -0.473159 0.228492 0.707129 -0.669149 0.953252 -0.215827 0.211493 0.953252 -0.215827 0.211493 0.923783 -0.217078 0.315439 0.883512 -0.215827 0.415723 0.923783 -0.217078 0.315439 0.883512 -0.215827 0.415723 0.161565 0.866035 -0.473159 0 1 0 0 1 0 0.0836207 0.965933 -0.244911 0 1 0 0 1 0 -0.161565 0.866035 0.473159 -0.161565 0.866035 0.473159 -0.161565 0.866035 0.473159 -0.161565 0.866035 0.473159 -0.279855 0.499985 0.819571 -0.228492 0.707129 0.669149 0.991339 -0.0721763 0.109714 0.993929 0 0.110019 0.991339 -0.0721763 0.109714 -0.312143 0.258797 0.914106 -0.279855 0.499985 0.819571 -0.32316 0 0.946344 -0.32316 0 0.946344 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.946344 0 -0.32316 -0.32316 0 0.946344 -0.279855 -0.499985 0.819571 -0.279855 -0.499985 0.819571 -0.32316 0 0.946344 0.991341 0.0721458 0.109714 0.991341 0.0721458 0.109714 0.993929 0 0.110019 -0.955152 -0.194159 -0.223579 -0.955152 -0.194159 -0.223579 -0.928159 -0.195074 -0.316965 0 1 0 0.161565 0.866035 -0.473159 0.0836207 0.965933 -0.244911 0 1 0 0.279855 0.499985 -0.819571 0.228492 0.707129 -0.669149 0.161565 0.866035 -0.473159 0.279855 0.499985 -0.819571 -0.989117 -0.0648824 -0.132054 -0.989117 -0.0648824 -0.132054 -0.991206 0 -0.132328 0.279855 0.499985 -0.819571 0.32316 0 -0.946344 0.32316 0 -0.946344 0.279855 0.499985 -0.819571 -0.989121 0.0648824 -0.132023 -0.989121 0.0648824 -0.132023 -0.991206 0 -0.132328 0.312143 -0.258797 -0.914106 0.32316 0 -0.946344 0.32316 0 -0.946344 0.279855 -0.499985 -0.819571 0.161565 -0.866035 -0.473159 0.228492 -0.707129 -0.669149 0.279855 -0.499985 -0.819571 0.161565 -0.866035 -0.473159 -0.955152 0.194159 -0.223579 -0.928169 0.195074 -0.316935 -0.955152 0.194159 -0.223579 0.161565 -0.866035 -0.473159 0 -1 0 0 -1 0 0.161565 -0.866035 -0.473159 -0.892404 0.194159 -0.407331 -0.892404 0.194159 -0.407331 -0.928169 0.195074 -0.316935 -0.0836207 -0.965933 0.244911 0 -1 0 0 -1 0 -0.161565 -0.866035 0.473159 -0.279855 -0.499985 0.819571 -0.228492 -0.707129 0.669149 -0.161565 -0.866035 0.473159 -0.279855 -0.499985 0.819571 -0.8633 0.0648824 -0.500504 -0.8633 0.0648824 -0.500504 -0.865116 0 -0.501572 -0.8633 -0.0648824 -0.500504 -0.8633 -0.0648824 -0.500504 -0.865116 0 -0.501572 -0.312143 0.258797 0.914106 -0.32316 0 0.946344 -0.32316 0 0.946344 -0.279855 0.499985 0.819571 -0.279855 -0.499985 0.819571 -0.32316 0 0.946344 -0.32316 0 0.946344 -0.279855 -0.499985 0.819571 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 0.946344 0 0.32316 -0.161565 0.866035 0.473159 -0.228492 0.707129 0.669149 -0.279855 0.499985 0.819571 -0.161565 0.866035 0.473159 0 1 0 -0.161565 0.866035 0.473159 -0.161565 0.866035 0.473159 0 1 0 -0.892404 -0.194159 -0.407331 -0.892404 -0.194159 -0.407331 -0.928159 -0.195074 -0.316965 -0.228515 0.707106 0.669165 0.228518 0.707106 -0.669164 0.22852 -0.707108 -0.669162 -0.228516 -0.707106 0.669164 -0.228499 0.707106 0.669171 0.228523 0.707106 -0.669163 0.228523 -0.707106 -0.669162 -0.228525 -0.707105 0.669163 -0.866034 0 0.499985 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.866034 0 0.499985 -1 0 0 -0.866034 0 0.499985 -0.866034 0 0.499985 -1 0 0 -0.866034 0 -0.499985 -1 0 0 -1 0 0 -0.866034 0 -0.499985 -0.499985 0 -0.866034 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.499985 0 -0.866034 0 0 -1 -0.499985 0 -0.866034 -0.499985 0 -0.866034 0 0 -1 0.499985 0 -0.866034 0 0 -1 0 0 -1 0.499985 0 -0.866034 0.866034 0 -0.499985 0.499985 0 -0.866034 0.499985 0 -0.866034 0.866034 0 -0.499985 1 0 0 0.866034 0 -0.499985 0.866034 0 -0.499985 1 0 0 0.866034 0 0.499985 1 0 0 1 0 0 0.866034 0 0.499985 0.499985 0 0.866034 0.866034 0 0.499985 0.866034 0 0.499985 0.499985 0 0.866034 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 -0.499985 0 0.866034 0 0 1 0 0 1 -0.499985 0 0.866034 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0.499985 0 0.866034 0.499985 0 0.866034 0 0 1 - - - - - - - - - - - - - - -

82 174 166 174 153 174 82 174 153 174 71 174

-
- - - -

153 175 230 175 69 175 153 175 69 175 71 175

-
- - - -

69 176 230 176 152 176 69 176 152 176 70 176

-
- - - -

152 177 164 177 84 177 152 177 84 177 70 177

-
- - - -

164 178 172 178 6 178 164 178 6 178 84 178

-
- - - -

172 179 231 179 8 179 172 179 8 179 6 179

-
- - - -

8 180 231 180 173 180 8 180 173 180 85 180

-
- - - -

173 181 166 181 82 181 173 181 82 181 85 181

-
- - - -

63 182 141 182 230 182 63 182 230 182 153 182

-
- - - -

230 183 141 183 59 183 230 183 59 183 152 183

-
- - - -

79 184 171 184 231 184 79 184 231 184 172 184

-
- - - -

231 185 171 185 74 185 231 185 74 185 173 185

-
- - - -

148 186 56 186 220 186 148 186 220 186 145 186

-
- - - -

220 187 140 187 63 187 220 187 63 187 145 187

-
- - - -

139 188 219 188 146 188 139 188 146 188 59 188

-
- - - -

219 189 52 189 149 189 219 189 149 189 146 189

-
- - - -

52 190 228 190 160 190 52 190 160 190 149 190

-
- - - -

228 191 150 191 79 191 228 191 79 191 160 191

-
- - - -

151 192 229 192 161 192 151 192 161 192 74 192

-
- - - -

229 193 56 193 148 193 229 193 148 193 161 193

-
- - - -

56 194 218 194 215 194 56 194 215 194 220 194

-
- - - -

215 195 214 195 140 195 215 195 140 195 220 195

-
- - - -

214 196 212 196 138 196 214 196 138 196 140 196

-
- - - -

212 197 210 197 134 197 212 197 134 197 138 197

-
- - - -

134 198 210 198 211 198 134 198 211 198 47 198

-
- - - -

211 199 213 199 139 199 211 199 139 199 47 199

-
- - - -

213 200 216 200 219 200 213 200 219 200 139 200

-
- - - -

216 201 217 201 52 201 216 201 52 201 219 201

-
- - - -

217 202 221 202 228 202 217 202 228 202 52 202

-
- - - -

221 203 223 203 150 203 221 203 150 203 228 203

-
- - - -

223 204 225 204 155 204 223 204 155 204 150 204

-
- - - -

225 205 227 205 158 205 225 205 158 205 155 205

-
- - - -

158 206 227 206 226 206 158 206 226 206 67 206

-
- - - -

226 207 224 207 151 207 226 207 151 207 67 207

-
- - - -

224 208 222 208 229 208 224 208 229 208 151 208

-
- - - -

222 209 218 209 56 209 222 209 56 209 229 209

-
- - - -

218 210 199 210 194 210 218 210 194 210 215 210

-
- - - -

194 211 192 211 214 211 194 211 214 211 215 211

-
- - - -

192 212 187 212 212 212 192 212 212 212 214 212

-
- - - -

187 213 185 213 210 213 187 213 210 213 212 213

-
- - - -

210 214 185 214 186 214 210 214 186 214 211 214

-
- - - -

186 215 193 215 213 215 186 215 213 215 211 215

-
- - - -

193 216 195 216 216 216 193 216 216 216 213 216

-
- - - -

195 217 200 217 217 217 195 217 217 217 216 217

-
- - - -

200 218 204 218 221 218 200 218 221 218 217 218

-
- - - -

204 219 206 219 223 219 204 219 223 219 221 219

-
- - - -

206 220 207 220 225 220 206 220 225 220 223 220

-
- - - -

207 221 209 221 227 221 207 221 227 221 225 221

-
- - - -

227 222 209 222 208 222 227 222 208 222 226 222

-
- - - -

208 223 205 223 224 223 208 223 224 223 226 223

-
- - - -

205 224 203 224 222 224 205 224 222 224 224 224

-
- - - -

203 225 199 225 218 225 203 225 218 225 222 225

-
- - - -

199 226 28 226 188 226 199 226 188 226 194 226

-
- - - -

188 227 24 227 192 227 188 227 192 227 194 227

-
- - - -

24 228 105 228 187 228 24 228 187 228 192 228

-
- - - -

105 229 103 229 185 229 105 229 185 229 187 229

-
- - - -

185 230 103 230 104 230 185 230 104 230 186 230

-
- - - -

104 231 114 231 193 231 104 231 193 231 186 231

-
- - - -

114 232 189 232 195 232 114 232 195 232 193 232

-
- - - -

189 233 32 233 200 233 189 233 200 233 195 233

-
- - - -

32 234 202 234 204 234 32 234 204 234 200 234

-
- - - -

202 235 43 235 206 235 202 235 206 235 204 235

-
- - - -

43 236 131 236 207 236 43 236 207 236 206 236

-
- - - -

131 237 132 237 209 237 131 237 209 237 207 237

-
- - - -

209 238 132 238 130 238 209 238 130 238 208 238

-
- - - -

130 239 39 239 205 239 130 239 205 239 208 239

-
- - - -

39 240 201 240 203 240 39 240 203 240 205 240

-
- - - -

201 241 28 241 199 241 201 241 199 241 203 241

-
- - - -

28 242 190 242 182 242 28 242 182 242 188 242

-
- - - -

182 243 100 243 24 243 182 243 24 243 188 243

-
- - - -

102 244 183 244 189 244 102 244 189 244 114 244

-
- - - -

183 245 191 245 32 245 183 245 32 245 189 245

-
- - - -

191 246 197 246 202 246 191 246 202 246 32 246

-
- - - -

197 247 123 247 43 247 197 247 43 247 202 247

-
- - - -

122 248 196 248 201 248 122 248 201 248 39 248

-
- - - -

196 249 190 249 28 249 196 249 28 249 201 249

-
- - - -

190 250 115 250 107 250 190 250 107 250 182 250

-
- - - -

107 251 97 251 100 251 107 251 100 251 182 251

-
- - - -

97 252 177 252 20 252 97 252 20 252 100 252

-
- - - -

20 253 177 253 98 253 20 253 98 253 102 253

-
- - - -

98 254 109 254 183 254 98 254 183 254 102 254

-
- - - -

109 255 116 255 191 255 109 255 191 255 183 255

-
- - - -

116 256 118 256 197 256 116 256 197 256 191 256

-
- - - -

118 257 120 257 123 257 118 257 123 257 197 257

-
- - - -

120 258 198 258 36 258 120 258 36 258 123 258

-
- - - -

36 259 198 259 119 259 36 259 119 259 122 259

-
- - - -

119 260 117 260 196 260 119 260 196 260 122 260

-
- - - -

117 261 115 261 190 261 117 261 190 261 196 261

-
- - - -

87 262 174 262 177 262 87 262 177 262 97 262

-
- - - -

177 263 174 263 89 263 177 263 89 263 98 263

-
- - - -

112 264 184 264 198 264 112 264 198 264 120 264

-
- - - -

198 265 184 265 110 265 198 265 110 265 119 265

-
- - - -

94 266 2 266 176 266 94 266 176 266 87 266

-
- - - -

176 267 175 267 174 267 176 267 174 267 87 267

-
- - - -

174 268 175 268 11 268 174 268 11 268 89 268

-
- - - -

11 269 178 269 96 269 11 269 96 269 89 269

-
- - - -

178 270 180 270 112 270 178 270 112 270 96 270

-
- - - -

180 271 181 271 184 271 180 271 184 271 112 271

-
- - - -

184 272 181 272 179 272 184 272 179 272 110 272

-
- - - -

179 273 2 273 94 273 179 273 94 273 110 273

-
- - - -

145 145 144 144 153 153 167 167 161 161 173 173 161 161 165 165 173 173 161 161 147 147 165 165 166 166 148 148 145 145 166 166 145 145 153 153

-
- - - -

145 145 144 144 153 153 167 167 161 161 173 173 161 161 165 165 173 173 161 161 147 147 165 165 166 166 148 148 145 145 166 166 145 145 153 153 160 160 169 169 172 172 159 159 172 172 164 164 149 149 160 160 164 164 146 146 149 149 162 162 146 146 163 163 152 152 142 142 146 146 152 152

-
- - - -

145 145 144 144 153 153 167 167 161 161 173 173 161 161 165 165 173 173 161 161 147 147 165 165 166 166 148 148 145 145 166 166 145 145 153 153 160 160 169 169 172 172 159 159 172 172 164 164 149 149 160 160 164 164 146 146 149 149 162 162 146 146 163 163 152 152 142 142 146 146 152 152 135 135 139 139 142 142 141 141 135 135 142 142 141 141 134 134 135 135 138 138 133 133 141 141 136 136 141 141 143 143 140 140 137 137 143 143

-
- - - -

145 145 144 144 153 153 167 167 161 161 173 173 161 161 165 165 173 173 161 161 147 147 165 165 166 166 148 148 145 145 166 166 145 145 153 153 160 160 169 169 172 172 159 159 172 172 164 164 149 149 160 160 164 164 146 146 149 149 162 162 146 146 163 163 152 152 142 142 146 146 152 152 135 135 139 139 142 142 141 141 135 135 142 142 141 141 134 134 135 135 138 138 133 133 141 141 136 136 141 141 143 143 140 140 137 137 143 143 156 156 151 151 168 168 170 170 67 67 167 167 170 170 157 157 156 156 154 154 158 158 170 170 155 155 171 171 169 169 150 150 155 155 169 169

-
- - - -

145 145 144 144 153 153 167 167 161 161 173 173 161 161 165 165 173 173 161 161 147 147 165 165 166 166 148 148 145 145 166 166 145 145 153 153 160 160 169 169 172 172 159 159 172 172 164 164 149 149 160 160 164 164 146 146 149 149 162 162 146 146 163 163 152 152 142 142 146 146 152 152 135 135 139 139 142 142 141 141 135 135 142 142 141 141 134 134 135 135 138 138 133 133 141 141 136 136 141 141 143 143 140 140 137 137 143 143 156 156 151 151 168 168 170 170 67 67 167 167 170 170 157 157 156 156 154 154 158 158 170 170 155 155 171 171 169 169 150 150 155 155 169 169 101 101 114 114 104 104 92 92 102 102 104 104 103 103 92 92 104 104 90 90 103 103 105 105 100 100 91 91 105 105 99 99 105 105 113 113

-
- - - -

145 145 144 144 153 153 167 167 161 161 173 173 161 161 165 165 173 173 161 161 147 147 165 165 166 166 148 148 145 145 166 166 145 145 153 153 160 160 169 169 172 172 159 159 172 172 164 164 149 149 160 160 164 164 146 146 149 149 162 162 146 146 163 163 152 152 142 142 146 146 152 152 135 135 139 139 142 142 141 141 135 135 142 142 141 141 134 134 135 135 138 138 133 133 141 141 136 136 141 141 143 143 140 140 137 137 143 143 156 156 151 151 168 168 170 170 67 67 167 167 170 170 157 157 156 156 154 154 158 158 170 170 155 155 171 171 169 169 150 150 155 155 169 169 101 101 114 114 104 104 92 92 102 102 104 104 103 103 92 92 104 104 90 90 103 103 105 105 100 100 91 91 105 105 99 99 105 105 113 113 121 121 128 128 130 130 127 127 122 122 130 130 132 132 124 124 130 130 126 126 132 132 131 131 123 123 125 125 131 131 123 123 131 131 129 129

-
- - - -

145 145 144 144 153 153 167 167 161 161 173 173 161 161 165 165 173 173 161 161 147 147 165 165 166 166 148 148 145 145 166 166 145 145 153 153 160 160 169 169 172 172 159 159 172 172 164 164 149 149 160 160 164 164 146 146 149 149 162 162 146 146 163 163 152 152 142 142 146 146 152 152 135 135 139 139 142 142 141 141 135 135 142 142 141 141 134 134 135 135 138 138 133 133 141 141 136 136 141 141 143 143 140 140 137 137 143 143 156 156 151 151 168 168 170 170 67 67 167 167 170 170 157 157 156 156 154 154 158 158 170 170 155 155 171 171 169 169 150 150 155 155 169 169 101 101 114 114 104 104 92 92 102 102 104 104 103 103 92 92 104 104 90 90 103 103 105 105 100 100 91 91 105 105 99 99 105 105 113 113 121 121 128 128 130 130 127 127 122 122 130 130 132 132 124 124 130 130 126 126 132 132 131 131 123 123 125 125 131 131 123 123 131 131 129 129 86 86 97 97 106 106 94 94 87 87 106 106 110 110 117 117 119 119 110 110 93 93 117 117 94 94 115 115 117 117 115 115 94 94 107 107

-
- - - -

145 145 144 144 153 153 167 167 161 161 173 173 161 161 165 165 173 173 161 161 147 147 165 165 166 166 148 148 145 145 166 166 145 145 153 153 160 160 169 169 172 172 159 159 172 172 164 164 149 149 160 160 164 164 146 146 149 149 162 162 146 146 163 163 152 152 142 142 146 146 152 152 135 135 139 139 142 142 141 141 135 135 142 142 141 141 134 134 135 135 138 138 133 133 141 141 136 136 141 141 143 143 140 140 137 137 143 143 156 156 151 151 168 168 170 170 67 67 167 167 170 170 157 157 156 156 154 154 158 158 170 170 155 155 171 171 169 169 150 150 155 155 169 169 101 101 114 114 104 104 92 92 102 102 104 104 103 103 92 92 104 104 90 90 103 103 105 105 100 100 91 91 105 105 99 99 105 105 113 113 121 121 128 128 130 130 127 127 122 122 130 130 132 132 124 124 130 130 126 126 132 132 131 131 123 123 125 125 131 131 123 123 131 131 129 129 86 86 97 97 106 106 94 94 87 87 106 106 110 110 117 117 119 119 110 110 93 93 117 117 94 94 115 115 117 117 115 115 94 94 107 107 112 112 120 120 118 118 96 96 111 111 118 118 96 96 118 118 116 116 96 96 116 116 108 108 88 88 95 95 108 108 89 89 109 109 98 98

-
- - - -

244 274 245 274 246 274 263 274 264 274 265 274 278 274 279 274 280 274 289 274 290 274 291 274

-
- - - -

232 274 233 274 234 274 235 274

-

236 274 237 274 238 274 239 274

-

240 274 241 274 242 274 243 274

-

247 274 248 274 249 274 250 274

-

251 274 252 274 253 274 254 274

-

255 274 256 274 257 274 258 274

-

259 274 260 274 261 274 262 274

-

266 274 267 274 268 274 269 274

-

270 274 271 274 272 274 273 274

-

274 274 275 274 276 274 277 274

-

281 274 282 274 283 274 284 274

-

285 274 286 274 287 274 288 274

-
- - - -

292 275 293 275 294 275 295 275

-
- - - -

296 276 297 276 298 276 299 276

-
- - - -

300 277 301 277 302 277 303 277

-
- - - -

304 278 305 278 306 278 307 278

-
- - - -

308 279 309 279 310 279 311 279

-
- - - -

321 280 322 280 323 280

-
- - - -

312 280 313 280 314 280 315 280

-

316 280 317 280 318 280 319 280 320 280

-
- - - -

324 281 325 281 326 281 327 281

-
- - - -

328 282 329 282 330 282 331 282

-
- - - -

332 283 333 283 334 283 335 283

-
- - - -

336 284 337 284 338 284 339 284

-
- - - -

349 285 350 285 351 285

-
- - - -

340 285 341 285 342 285 343 285

-

344 285 345 285 346 285 347 285 348 285

-
- - - -

352 286 353 286 354 286 355 286

-
- - - -

356 287 357 287 358 287 359 287

-
- - - -

360 288 361 288 362 288 363 288

-
- - - -

364 289 365 289 366 289 367 289

-
- - - -

368 290 369 290 370 290 371 290

-
- - - -

372 291 373 291 374 291 375 291 376 291 377 291 386 291 387 291 388 291 389 291 390 291 391 291

-
- - - -

378 291 379 291 380 291 381 291 382 291 383 291 384 291 385 291

-
- - - -

392 292 393 292 394 292 395 292 396 292 397 292 406 292 407 292 408 292 409 292 410 292 411 292

-
- - - -

398 292 399 292 400 292 401 292 402 292 403 292 404 292 405 292

-
- - - -

412 293 413 294 414 295 415 296

-

416 297 417 298 418 299 419 300

-

420 301 421 302 422 303 423 304

-

424 305 425 306 426 307 427 308

-

428 309 429 310 430 311 431 312

-

432 313 433 314 434 315 435 316

-
- - - -

436 317 437 318 438 319 439 320

-

440 321 441 322 442 323 443 324

-

444 325 445 326 446 327 447 328

-

448 329 449 330 450 331 451 332

-

452 333 453 334 454 335 455 336 456 337 457 338 458 339 459 340 460 341 461 342 462 343 463 344

-

464 345 465 346 466 347 467 348

-

468 349 469 350 470 351 471 352

-

472 353 473 354 474 355 475 356

-

476 357 477 358 478 359 479 360

-

480 361 481 362 482 363 483 364

-

484 365 485 366 486 367 487 368

-

488 369 489 370 490 371 491 372

-

492 373 493 374 494 375 495 376 496 377 497 378 498 379 499 380 500 381 501 382 502 383 503 384

-

504 385 505 386 506 387 507 388

-
- - - -

508 389 509 390 510 391 511 392 512 393 513 394 514 395 515 396 516 397 517 398 518 399 519 400

-

520 401 521 402 522 403 523 404 524 405 525 406 526 407 527 408 528 409 529 410 530 411 531 412

-

532 413 533 414 534 415 535 416

-

536 417 537 418 538 419 539 420

-

540 421 541 422 542 423 543 424

-

544 425 545 426 546 427 547 428

-

548 429 549 430 550 431 551 432

-

552 433 553 434 554 435 555 436

-

556 437 557 438 558 439 559 440

-

560 441 561 442 562 443 563 444

-

564 445 565 446 566 447 567 448

-

568 449 569 450 570 451 571 452

-

572 453 573 454 574 455 575 456

-

576 457 577 458 578 459 579 460

-
- - - -

584 465 585 466 586 467 591 472 592 473 593 474 602 483 603 484 604 485 609 490 610 491 611 492 620 501 621 502 622 503 623 504 624 505 625 506 638 519 639 520 640 521 661 542 662 543 663 544

-
- - - -

580 461 581 462 582 463 583 464

-

587 468 588 469 589 470 590 471

-

594 475 595 476 596 477 597 478

-

598 479 599 480 600 481 601 482

-

605 486 606 487 607 488 608 489

-

612 493 613 494 614 495 615 496

-

616 497 617 498 618 499 619 500

-

626 507 627 508 628 509 629 510

-

630 511 631 512 632 513 633 514

-

634 515 635 516 636 517 637 518

-

641 522 642 523 643 524 644 525

-

645 526 646 527 647 528 648 529 649 530 650 531 651 532 652 533 653 534 654 535 655 536 656 537

-

657 538 658 539 659 540 660 541

-
- - - -

664 545 665 546 666 547 675 556 676 557 677 558 682 563 683 564 684 565 693 574 694 575 695 576 700 581 701 582 702 583 711 592 712 593 713 594 714 595 715 596 716 597 745 626 746 627 747 628

-
- - - -

667 548 668 549 669 550 670 551

-

671 552 672 553 673 554 674 555

-

678 559 679 560 680 561 681 562

-

685 566 686 567 687 568 688 569

-

689 570 690 571 691 572 692 573

-

696 577 697 578 698 579 699 580

-

703 584 704 585 705 586 706 587

-

707 588 708 589 709 590 710 591

-

717 598 718 599 719 600 720 601

-

721 602 722 603 723 604 724 605

-

725 606 726 607 727 608 728 609 729 610 730 611 731 612 732 613 733 614 734 615 735 616 736 617

-

737 618 738 619 739 620 740 621

-

741 622 742 623 743 624 744 625

-
- - - -

748 629 749 629 750 629

-
- - - -

751 630 752 630 753 630

-
- - - -

754 631 755 631 756 631

-
- - - -

757 632 758 632 759 632

-
- - - -

760 633 761 633 762 633

-
- - - -

763 634 764 634 765 634

-
- - - -

766 635 767 635 768 635

-
- - - -

769 636 770 636 771 636

-
- - - -

772 637 773 638 774 639 775 640

-

776 641 777 642 778 643 779 644

-

780 645 781 646 782 647 783 648

-

784 649 785 650 786 651 787 652

-

788 653 789 654 790 655 791 656

-

792 657 793 658 794 659 795 660

-

796 661 797 662 798 663 799 664

-

800 665 801 666 802 667 803 668

-

804 669 805 670 806 671 807 672

-

808 673 809 674 810 675 811 676

-

812 677 813 678 814 679 815 680 816 681 817 682 818 683 819 684 820 685 821 686 822 687 823 688

-

824 689 825 690 826 691 827 692

-

828 693 829 694 830 695 831 696 832 697 833 698 834 699 835 700 836 701 837 702 838 703 839 704

-

840 705 841 706 842 707 843 708

-
-
- - - CAT3DBagRep - - -
- - - - -7.5 -12.9904 0 -12.9904 -7.5 0 -12.9904 -7.50003 -355 -7.50007 -12.9904 -355 0 -15 0 -7.5 -12.9904 0 -7.50007 -12.9904 -355 0 -15 -355 7.49999 -12.9904 0 0 -15 0 0 -15 -355 7.49996 -12.9904 -355 12.9904 -7.5 0 7.49999 -12.9904 0 7.49996 -12.9904 -355 12.9903 -7.50003 -355 15 0 0 12.9904 -7.5 0 12.9903 -7.50003 -355 14.9999 0 -355 12.9904 7.5 0 15 0 0 14.9999 0 -355 12.9903 7.49997 -355 7.5 12.9904 0 12.9904 7.5 0 12.9903 7.49997 -355 7.49996 12.9904 -355 0 15 0 7.5 12.9904 0 7.49996 12.9904 -355 0 15 -355 -7.5 12.9904 0 0 15 0 0 15 -355 -7.50007 12.9904 -355 -12.9904 7.5 0 -7.5 12.9904 0 -7.50007 12.9904 -355 -12.9904 7.49997 -355 -15 0 -355 -12.9904 7.49997 -355 -7.50007 12.9904 -355 0 15 -355 7.49996 12.9904 -355 12.9903 7.49997 -355 14.9999 0 -355 12.9903 -7.50003 -355 7.49996 -12.9904 -355 0 -15 -355 -7.50007 -12.9904 -355 -12.9904 -7.50003 -355 -12.9904 -7.5 0 -15 0 0 -15 0 -355 -12.9904 -7.50003 -355 -15 0 0 -12.9904 -7.5 0 -7.5 -12.9904 0 0 -15 0 7.49999 -12.9904 0 12.9904 -7.5 0 15 0 0 12.9904 7.5 0 7.5 12.9904 0 0 15 0 -7.5 12.9904 0 -12.9904 7.5 0 -15 0 0 -12.9904 7.5 0 -12.9904 7.49997 -355 -15 0 -355 0.00012 25 -373 0.000103 25 -355 21.6508 12.5 -355 21.6508 12.5 -373 21.6507 12.5 -373 21.6507 12.5 -355 21.6507 -12.5 -355 21.6507 -12.5 -373 21.6507 -12.5 -373 21.6507 -12.5 -355 0 -25 -355 0 -25 -373 0.00012 -25 -373 0.000103 -25 -355 -21.6505 -12.5 -355 -21.6504 -12.5 -373 -21.6506 -12.5 -373 -21.6506 -12.5 -355 -21.6506 12.5 -355 -21.6506 12.5 -373 -21.6506 12.5 -373 -21.6506 12.5 -355 0 25 -355 0 25 -373 0.000103 25 -355 -21.6506 12.5 -355 -21.6506 -12.5 -355 0.000103 -25 -355 21.6507 -12.5 -355 21.6507 12.5 -355 21.6507 12.5 -373 21.6507 -12.5 -373 0.00012 -25 -373 -21.6506 -12.5 -373 -21.6506 12.5 -373 0.00012 25 -373 -59.8138 30 -455.276 -59.8138 -30 -455.276 -54.1625 -30 -434.185 -54.1625 30 -434.185 -54.1625 30 -434.185 -54.1625 -30 -434.185 -25.0001 -30 -373 -25.0001 30 -373 -25.0001 30 -373 -25.0001 -30 -373 24.9998 -30 -373 24.9998 30 -373 24.9999 30 -373 24.9999 -30 -373 54.1624 -30 -434.185 54.1624 30 -434.185 54.1623 30 -434.185 54.1623 -30 -434.185 59.8137 -30 -464.724 59.8137 30 -464.724 59.8136 30 -464.724 59.8136 -30 -464.724 49.4379 -30 -493.998 49.4379 30 -493.998 49.4379 30 -493.998 49.4379 -30 -493.998 25.8152 -30 -514.162 25.8152 30 -514.162 25.8153 30 -514.162 25.8153 -30 -514.162 -4.72437 -30 -519.814 -4.72437 30 -519.814 -4.7245 30 -519.814 -4.7245 -30 -519.814 -33.9984 -30 -509.438 -33.9984 30 -509.438 -33.9984 30 -509.438 -33.9984 -30 -509.438 -54.1624 -30 -485.815 -54.1624 30 -485.815 -54.1625 30 -485.815 -54.1625 -30 -485.815 -59.8137 -30 -455.276 -59.8137 30 -455.276 -59.8138 -30 -455.276 -54.1625 -30 -485.815 -33.9984 -30 -509.438 -4.72448 -30 -519.814 25.8152 -30 -514.162 49.4379 -30 -493.998 59.8136 -30 -464.724 54.1623 -30 -434.185 24.9999 -30 -373 -25.0001 -30 -373 -54.1625 -30 -434.185 -54.1624 30 -434.185 -25.0001 30 -373 24.9999 30 -373 54.1623 30 -434.185 59.8136 30 -464.724 49.4379 30 -493.998 25.8153 30 -514.162 -4.72449 30 -519.814 -33.9984 30 -509.438 -54.1625 30 -485.815 -59.8138 30 -455.276 - - - - - - - - - - -0.499985 -0.866034 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.499985 -0.866034 0 0 -1 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 0 -1 0 0.499985 -0.866034 0 0 -1 0 0 -1 0 0.499985 -0.866034 0 0.866034 -0.499985 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.866034 -0.499985 0 1 0 0 0.866034 -0.499985 0 0.866034 -0.499985 0 1 0 0 0.866034 0.499985 0 1 0 0 1 0 0 0.866034 0.499985 0 0.499985 0.866034 0 0.866034 0.499985 0 0.866034 0.499985 0 0.499985 0.866034 0 0 1 0 0.499985 0.866034 0 0.499985 0.866034 0 0 1 0 -0.499985 0.866034 0 0 1 0 0 1 0 -0.499985 0.866034 0 -0.866034 0.499985 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.866034 0.499985 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.866034 -0.499985 0 -1 0 0 -1 0 0 -0.866034 -0.499985 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 -1 0 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -1 0 0 0.499999 0.866026 4.74529e-007 1 0 8.47711e-007 0.499998 -0.866026 2.11927e-007 -0.500001 -0.866025 -4.48039e-007 -1 0 -9.53674e-007 -0.500001 0.866025 -2.38419e-007 9.17607e-013 0 1 0 0 -1 -0.965927 0 0.258816 -0.902707 0 0.430257 6.10352e-007 0 1 0.902706 0 0.430257 0.983306 0 0.18196 0.942547 0 -0.334073 0.649232 0 -0.76059 0.181959 0 -0.983306 -0.334072 0 -0.942548 -0.760591 0 -0.649232 -0.983307 0 -0.181955 1.07285e-007 -1 6.4195e-008 2.53864e-008 1 3.69148e-008 - - - - - - - - - - - - - - -

0 0 1 1 2 2 3 3

-

4 4 5 5 6 6 7 7

-

8 8 9 9 10 10 11 11

-

12 12 13 13 14 14 15 15

-

16 16 17 17 18 18 19 19

-

20 20 21 21 22 22 23 23

-

24 24 25 25 26 26 27 27

-

28 28 29 29 30 30 31 31

-

32 32 33 33 34 34 35 35

-

36 36 37 37 38 38 39 39

-

40 40 41 41 42 42 43 43 44 44 45 45 46 46 47 47 48 48 49 49 50 50 51 51

-

52 52 53 53 54 54 55 55

-

56 56 57 57 58 58 59 59 60 60 61 61 62 62 63 63 64 64 65 65 66 66 67 67

-

68 68 69 69 70 70 71 71

-
- - - -

72 72 73 72 74 72 75 72

-
- - - -

76 73 77 73 78 73 79 73

-
- - - -

80 74 81 74 82 74 83 74

-
- - - -

84 75 85 75 86 75 87 75

-
- - - -

88 76 89 76 90 76 91 76

-
- - - -

92 77 93 77 94 77 95 77

-
- - - -

96 78 97 78 98 78 99 78 100 78 101 78

-
- - - -

102 79 103 79 104 79 105 79 106 79 107 79

-
- - - -

108 80 109 80 110 80 111 80

-
- - - -

112 81 113 81 114 81 115 81

-
- - - -

116 82 117 82 118 82 119 82

-
- - - -

120 83 121 83 122 83 123 83

-
- - - -

124 84 125 84 126 84 127 84

-
- - - -

128 85 129 85 130 85 131 85

-
- - - -

132 86 133 86 134 86 135 86

-
- - - -

136 87 137 87 138 87 139 87

-
- - - -

140 88 141 88 142 88 143 88

-
- - - -

144 89 145 89 146 89 147 89

-
- - - -

148 90 149 90 150 90 151 90

-
- - - -

152 91 153 91 154 91 155 91 156 91 157 91 158 91 159 91 160 91 161 91 162 91

-
- - - -

163 92 164 92 165 92 166 92 167 92 168 92 169 92 170 92 171 92 172 92 173 92

-
-
- - - CAT3DBagRep - - -
-
- - - - - - - 0.498039 0.498039 0.498039 1 - - - 0.498039 0.498039 0.498039 1 - - - - - - - - - - - 0.298039 0.298039 0.298039 1 - - - 0.298039 0.298039 0.298039 1 - - - - - - - - - - - 1 0.376471 0 1 - - - 1 0.376471 0 1 - - - - - - - - - - - 0 0 0 1 - - - 0 0 0 1 - - - - - - - - - - - 1 1 1 1 - - - 1 1 1 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 -1 - - -185 - 185 - - - - - - 0 1 0 - - -130 - 3 - - - - - - 0 1 0 - - -120 - 148 - - - - - - -1 0 0 - - -350 - 350 - - - - - - 0 1 0 - - -120 - 120 - - - - - - -1 0 0 - - -350 - 350 - - - - - - 1 0 0 - - 0 - 0 - - - - - - 0 1 0 - - - - - 0 0 1 - - - - - - - - - - - - - - - - - - 0 0 865 - - - 410 0 0 - 0 1 0 90 - - - 1.31938e-005 0 1000 - 0 -1 0 90 - - - 674.501 0 45 - - - 325.499 0 -5.22959e-012 - - - - - - - - - - - - - - - - - -420 -225 -96 - 0 1 0 12.8351 - - 0 -1 0 1.24896e-005 - - 374.861 -0.000259399 120.245 - 0 -1 0 108.855 - - 0 -1 0 1.27781e-005 - - - - - - - - - - kinmodel.0/joint_7 - - - - - - - SASA - 185.009 - - - - - 90.0246 - 0.0174533 - - kinmodel.0/joint_1 - - 811.464 - - - - - - =-SASA(185.009,90.0246*RAD+DOF(2),811.464) - - - - - kinmodel.0/joint_8 - - - - - - - - - SASS - 811.464 - - - - - 90.0246 - 0.0174533 - - kinmodel.0/joint_1 - - 185.009 - - 832.365 - - - - - - =-(SASS(811.464,90.0246*RAD+DOF(2),185.009)-832.365) - - - - - - - - - - - - - - atan2 - - - a - - - gamma - - - - - b - - - a - - - gamma - - - - - - - - - - - - - - - - - - - - - y - 0 - - - - x - 0 - - - - - - - - - y - - - - x - - - - - - - - - - - y - 0 - - - - x - 0 - - - - - - - - - - - - y - - - - x - - - - - - - - - - - - y - 0 - - - - x - 0 - - - - - - - - - - - y - - - - x - - - - - - - - - - - - - y - 0 - - - - x - 0 - - - - - - - - - - - y - - - - x - - - - - - - - - - - - - - - - - - 2 - - - - - - - a - 2 - - - - b - 2 - - - - - - - - - 2 - a - - b - - - - gamma - - - - - - - - - - - - - libkinscenes.kinScene/inst_kinmodel.0 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_0/axis0 - - - 0 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_1/axis0 - - - -90 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_2/axis0 - - - 90 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_3/axis0 - - - 0 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_4/axis0 - - - 0 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_5/axis0 - - - 0 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_6/axis0 - - - 0 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_7/axis0 - - - -0.0072643 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_8/axis0 - - - 205.91 - - - - - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0 - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_4_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_4_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_4_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_4_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_5_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_5_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_6_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_6_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_7_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_7_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_7_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_7_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_8_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_8_axis0_value - - - - -
diff --git a/collada_urdf/test/ped_welder.dae b/collada_urdf/test/ped_welder.dae deleted file mode 100644 index 930bd45..0000000 --- a/collada_urdf/test/ped_welder.dae +++ /dev/null @@ -1,2206 +0,0 @@ - - - - - CPFCatiaPlugin - - 2009-02-17T14:22:43Z - 2009-02-17T14:22:43Z - - Z_UP - - - - - - - 0.036886 0 0.999319 157.985 0 1 0 169.448 -0.999319 0 0.036886 805.771 0 0 0 1 - 0.036886 -0 -0.999319 799.395 -0 1 -0 -169.448 0.999319 -0 0.036886 -187.599 -0 0 -0 1 - 0.036886 -0 0.999319 157.985 0 1 0 169.448 -0.999319 0 0.036886 805.771 0 0 0 1 - 1 0 0 - 0.036886 -0 -0.999319 799.395 -0 1 -0 -169.448 0.999319 -0 0.036886 -187.599 -0 0 -0 1 - 0.036886 0 0.999319 157.985 0 1 0 169.448 -0.999319 0 0.036886 805.771 0 0 0 1 - - - - - - - - - - - - - - - - - - - - 0.036886 0 0.999319 63.0135 0 1 0 169.448 -0.999319 0 0.036886 706.951 0 0 0 1 - 0.036886 -0 -0.999319 704.145 -0 1 -0 -169.448 0.999319 -0 0.036886 -89.0472 -0 0 -0 1 - 0.036886 -0 0.999319 157.985 0 1 0 169.448 -0.999319 0 0.036886 805.771 0 0 0 1 - 1 0 0 - 0.036886 -0 -0.999319 799.395 -0 1 -0 -169.448 0.999319 -0 0.036886 -187.599 -0 0 -0 1 - 0.036886 0 0.999319 63.0135 0 1 0 169.448 -0.999319 0 0.036886 706.951 0 0 0 1 - 1 0 0 - 0.036886 -0 -0.999319 704.145 -0 1 -0 -169.448 0.999319 -0 0.036886 -89.0472 -0 0 -0 1 - 0.036886 0 0.999319 63.0135 0 1 0 169.448 -0.999319 0 0.036886 706.951 0 0 0 1 - - - - - - - - - - - - - - - 0.036886 0 0.999319 -52.3687 0 1 0 169.448 -0.999319 0 0.036886 992.389 0 0 0 1 - 0.036886 -0 -0.999319 993.645 -0 1 -0 -169.448 0.999319 -0 0.036886 15.7278 -0 0 -0 1 - 0.036886 -0 0.999319 157.985 0 1 0 169.448 -0.999319 0 0.036886 805.771 0 0 0 1 - 1 0 0 - 0.036886 -0 -0.999319 799.395 -0 1 -0 -169.448 0.999319 -0 0.036886 -187.599 -0 0 -0 1 - 0.036886 0 0.999319 63.0135 0 1 0 169.448 -0.999319 0 0.036886 706.951 0 0 0 1 - 1 0 0 - 0.036886 -0 -0.999319 704.145 -0 1 -0 -169.448 0.999319 -0 0.036886 -89.0472 -0 0 -0 1 - 0.036886 0 0.999319 -48.8646 0 1 0 169.448 -0.999319 0 0.036886 897.454 0 0 0 1 - 1 0 0 - 0.036886 -0 -0.999319 898.645 -0 1 -0 -169.448 0.999319 -0 0.036886 15.7278 -0 0 -0 1 - 0.036886 0 0.999319 -52.3687 0 1 0 169.448 -0.999319 0 0.036886 992.389 0 0 0 1 - - - - - - - - - - 0.036886 0 0.999319 -52.8372 0 1 0 169.448 -0.999319 0 0.036886 1005.08 0 0 0 1 - 0.036886 -0 -0.999319 1006.35 -0 1 -0 -169.448 0.999319 -0 0.036886 15.7278 -0 0 -0 1 - 0.036886 -0 0.999319 157.985 0 1 0 169.448 -0.999319 0 0.036886 805.771 0 0 0 1 - 1 0 0 - 0.036886 -0 -0.999319 799.395 -0 1 -0 -169.448 0.999319 -0 0.036886 -187.599 -0 0 -0 1 - 0.036886 0 0.999319 63.0135 0 1 0 169.448 -0.999319 0 0.036886 706.951 0 0 0 1 - 1 0 0 - 0.036886 -0 -0.999319 704.145 -0 1 -0 -169.448 0.999319 -0 0.036886 -89.0472 -0 0 -0 1 - 0.036886 0 0.999319 -48.8646 0 1 0 169.448 -0.999319 0 0.036886 897.454 0 0 0 1 - 1 0 0 - 0.036886 -0 -0.999319 898.645 -0 1 -0 -169.448 0.999319 -0 0.036886 15.7278 -0 0 -0 1 - 0.036886 0 0.999319 -52.8372 0 1 0 169.448 -0.999319 0 0.036886 1005.08 0 0 0 1 - 1 0 0 - 0.036886 -0 -0.999319 1006.35 -0 1 -0 -169.448 0.999319 -0 0.036886 15.7278 -0 0 -0 1 - 0.036886 0 0.999319 -52.8372 0 1 0 169.448 -0.999319 0 0.036886 1005.08 0 0 0 1 - - - - - - - - - - - - - - - - - - - - - - - - - - 0.036886 0 0.999319 -59.9389 0 1 0 169.448 -0.999319 0 0.036886 1197.48 0 0 0 1 - 0.036886 -0 -0.999319 1198.88 -0 1 -0 -169.448 0.999319 -0 0.036886 15.7278 -0 0 -0 1 - 0.036886 -0 0.999319 157.985 0 1 0 169.448 -0.999319 0 0.036886 805.771 0 0 0 1 - 1 0 0 - 0.036886 -0 -0.999319 799.395 -0 1 -0 -169.448 0.999319 -0 0.036886 -187.599 -0 0 -0 1 - 0.036886 0 0.999319 63.0135 0 1 0 169.448 -0.999319 0 0.036886 706.951 0 0 0 1 - 1 0 0 - 0.036886 -0 -0.999319 704.145 -0 1 -0 -169.448 0.999319 -0 0.036886 -89.0472 -0 0 -0 1 - 0.036886 0 0.999319 -48.8646 0 1 0 169.448 -0.999319 0 0.036886 897.454 0 0 0 1 - 1 0 0 - 0.036886 -0 -0.999319 898.645 -0 1 -0 -169.448 0.999319 -0 0.036886 15.7278 -0 0 -0 1 - 0.036886 0 0.999319 -52.8372 0 1 0 169.448 -0.999319 0 0.036886 1005.08 0 0 0 1 - 1 0 0 - 0.036886 -0 -0.999319 1006.35 -0 1 -0 -169.448 0.999319 -0 0.036886 15.7278 -0 0 -0 1 - 0.036886 0 0.999319 -59.9389 0 1 0 169.448 -0.999319 0 0.036886 1197.48 0 0 0 1 - 1 0 0 - 0.036886 -0 -0.999319 1198.88 -0 1 -0 -169.448 0.999319 -0 0.036886 15.7278 -0 0 -0 1 - 0.036886 0 0.999319 -59.9389 0 1 0 169.448 -0.999319 0 0.036886 1197.48 0 0 0 1 - - - - - - - - - - - 0.036886 0 0.999319 -61.8127 0 1 0 169.448 -0.999319 0 0.036886 1248.25 0 0 0 1 - 0.036886 -0 -0.999319 1249.68 -0 1 -0 -169.448 0.999319 -0 0.036886 15.7278 -0 0 -0 1 - 0.036886 -0 0.999319 157.985 0 1 0 169.448 -0.999319 0 0.036886 805.771 0 0 0 1 - 1 0 0 - 0.036886 -0 -0.999319 799.395 -0 1 -0 -169.448 0.999319 -0 0.036886 -187.599 -0 0 -0 1 - 0.036886 0 0.999319 63.0135 0 1 0 169.448 -0.999319 0 0.036886 706.951 0 0 0 1 - 1 0 0 - 0.036886 -0 -0.999319 704.145 -0 1 -0 -169.448 0.999319 -0 0.036886 -89.0472 -0 0 -0 1 - 0.036886 0 0.999319 -48.8646 0 1 0 169.448 -0.999319 0 0.036886 897.454 0 0 0 1 - 1 0 0 - 0.036886 -0 -0.999319 898.645 -0 1 -0 -169.448 0.999319 -0 0.036886 15.7278 -0 0 -0 1 - 0.036886 0 0.999319 -52.8372 0 1 0 169.448 -0.999319 0 0.036886 1005.08 0 0 0 1 - 1 0 0 - 0.036886 -0 -0.999319 1006.35 -0 1 -0 -169.448 0.999319 -0 0.036886 15.7278 -0 0 -0 1 - 0.036886 0 0.999319 -59.9389 0 1 0 169.448 -0.999319 0 0.036886 1197.48 0 0 0 1 - 1 0 0 - 0.036886 -0 -0.999319 1198.88 -0 1 -0 -169.448 0.999319 -0 0.036886 15.7278 -0 0 -0 1 - 0.036886 0 0.999319 -61.8127 0 1 0 169.448 -0.999319 0 0.036886 1248.25 0 0 0 1 - 1 0 0 - 0.036886 -0 -0.999319 1249.68 -0 1 -0 -169.448 0.999319 -0 0.036886 15.7278 -0 0 -0 1 - 0.036886 0 0.999319 -61.8127 0 1 0 169.448 -0.999319 0 0.036886 1248.25 0 0 0 1 - - - - - - - - - - 0.036886 0 0.999319 46.9128 0 1 0 169.448 -0.999319 0 0.036886 1143.15 0 0 0 1 - 0.036886 -0 -0.999319 1140.64 -0 1 -0 -169.448 0.999319 -0 0.036886 -89.0472 -0 0 -0 1 - 0.036886 -0 0.999319 157.985 0 1 0 169.448 -0.999319 0 0.036886 805.771 0 0 0 1 - 1 0 0 - 0.036886 -0 -0.999319 799.395 -0 1 -0 -169.448 0.999319 -0 0.036886 -187.599 -0 0 -0 1 - 0.036886 0 0.999319 46.9127 0 1 0 169.448 -0.999319 0 0.036886 1143.15 0 0 0 1 - 1 0 0 - 0.036886 -0 -0.999319 1140.64 -0 1 -0 -169.448 0.999319 -0 0.036886 -89.0472 -0 0 -0 1 - 0.036886 0 0.999319 46.9127 0 1 0 169.448 -0.999319 0 0.036886 1143.15 0 0 0 1 - - - - - - - - - - - - - - - - - - - - - -0.036886 0 0.999319 -65.5766 0 -1 0 169.448 0.999319 0 0.036886 1350.22 0 0 0 1 - -0.036886 -0 0.999319 -1351.72 -0 -1 0 169.448 0.999319 0 0.036886 15.7278 -0 0 -0 1 - 0.036886 -0 0.999319 157.985 0 1 0 169.448 -0.999319 0 0.036886 805.771 0 0 0 1 - 1 0 0 - 0.036886 -0 -0.999319 799.395 -0 1 -0 -169.448 0.999319 -0 0.036886 -187.599 -0 0 -0 1 - 0.036886 0 0.999319 46.9127 0 1 0 169.448 -0.999319 0 0.036886 1143.15 0 0 0 1 - 1 0 0 - 0.036886 -0 -0.999319 1140.64 -0 1 -0 -169.448 0.999319 -0 0.036886 -89.0472 -0 0 -0 1 - -0.036886 0 0.999319 -65.5766 0 -1 0 169.448 0.999319 0 0.036886 1350.22 0 0 0 1 - 1 0 0 - -0.036886 -0 0.999319 -1351.72 -0 -1 0 169.448 0.999319 0 0.036886 15.7278 -0 0 -0 1 - -0.036886 0 0.999319 -65.5766 0 -1 0 169.448 0.999319 0 0.036886 1350.22 0 0 0 1 - - - - - - - - - - - -0.036886 0 0.999319 -63.7028 0 -1 0 169.448 0.999319 0 0.036886 1299.45 0 0 0 1 - -0.036886 -0 0.999319 -1300.92 -0 -1 0 169.448 0.999319 0 0.036886 15.7278 -0 0 -0 1 - 0.036886 -0 0.999319 157.985 0 1 0 169.448 -0.999319 0 0.036886 805.771 0 0 0 1 - 1 0 0 - 0.036886 -0 -0.999319 799.395 -0 1 -0 -169.448 0.999319 -0 0.036886 -187.599 -0 0 -0 1 - 0.036886 0 0.999319 46.9127 0 1 0 169.448 -0.999319 0 0.036886 1143.15 0 0 0 1 - 1 0 0 - 0.036886 -0 -0.999319 1140.64 -0 1 -0 -169.448 0.999319 -0 0.036886 -89.0472 -0 0 -0 1 - -0.036886 0 0.999319 -65.5766 0 -1 0 169.448 0.999319 0 0.036886 1350.22 0 0 0 1 - 1 0 0 - -0.036886 -0 0.999319 -1351.72 -0 -1 0 169.448 0.999319 0 0.036886 15.7278 -0 0 -0 1 - -0.036886 0 0.999319 -63.7028 0 -1 0 169.448 0.999319 0 0.036886 1299.45 0 0 0 1 - 1 0 0 - -0.036886 -0 0.999319 -1300.92 -0 -1 0 169.448 0.999319 0 0.036886 15.7278 -0 0 -0 1 - -0.036886 0 0.999319 -63.7028 0 -1 0 169.448 0.999319 0 0.036886 1299.45 0 0 0 1 - - - - - - - - - - - - - - - - 143.002 -6.35 -55.5755 143.002 6.35 -55.5755 152.654 6.35 -55.5755 152.654 -6.35 -55.5755 143.002 -12.7 -44.577 143.002 -6.35 -55.5755 152.654 -6.35 -55.5755 152.654 -12.7 -44.577 143.002 -6.35 -33.5785 143.002 -12.7 -44.577 152.654 -12.7 -44.577 152.654 -6.35 -33.5785 143.002 6.35 -33.5785 143.002 -6.35 -33.5785 152.654 -6.35 -33.5785 152.654 6.35 -33.5785 152.654 6.35 -33.5785 152.654 -6.35 -33.5785 152.654 -12.7 -44.577 152.654 -6.35 -55.5755 152.654 6.35 -55.5755 152.654 12.7 -44.577 143.002 6.35 -55.5755 143.002 12.7 -44.577 152.654 12.7 -44.577 152.654 6.35 -55.5755 143.002 12.7 -44.577 143.002 6.35 -55.5755 143.002 -6.35 -55.5755 143.002 -12.7 -44.577 143.002 -6.35 -33.5785 143.002 6.35 -33.5785 143.002 12.7 -44.577 143.002 6.35 -33.5785 152.654 6.35 -33.5785 152.654 12.7 -44.577 130.302 -7.9375 -58.3251 130.302 7.9375 -58.3251 143.002 7.9375 -58.3251 143.002 -7.9375 -58.3251 130.302 -15.875 -44.577 130.302 -7.9375 -58.3251 143.002 -7.9375 -58.3251 143.002 -15.875 -44.577 130.302 -7.9375 -30.8288 130.302 -15.875 -44.577 143.002 -15.875 -44.577 143.002 -7.9375 -30.8288 130.302 7.9375 -30.8288 130.302 -7.9375 -30.8288 143.002 -7.9375 -30.8288 143.002 7.9375 -30.8288 143.002 7.9375 -30.8288 143.002 -7.9375 -30.8288 143.002 -15.875 -44.577 143.002 -7.9375 -58.3251 143.002 7.9375 -58.3251 143.002 15.875 -44.577 130.302 7.9375 -58.3251 130.302 15.875 -44.577 143.002 15.875 -44.577 143.002 7.9375 -58.3251 130.302 15.875 -44.577 130.302 7.9375 -58.3251 130.302 -7.9375 -58.3251 130.302 -15.875 -44.577 130.302 -7.9375 -30.8288 130.302 7.9375 -30.8288 130.302 15.875 -44.577 130.302 7.9375 -30.8288 143.002 7.9375 -30.8288 143.002 15.875 -44.577 152.654 -3.82683 -53.8158 152.654 0 -54.577 158.654 0 -54.577 158.654 -3.82683 -53.8158 152.654 -7.07107 -51.648 152.654 -3.82683 -53.8158 158.654 -3.82683 -53.8158 158.654 -7.07107 -51.648 152.654 -9.2388 -48.4038 152.654 -7.07107 -51.648 158.654 -7.07107 -51.648 158.654 -9.2388 -48.4038 152.654 -10 -44.577 152.654 -9.2388 -48.4038 158.654 -9.2388 -48.4038 158.654 -10 -44.577 152.654 -9.23879 -40.7501 152.654 -10 -44.577 158.654 -10 -44.577 158.654 -9.23879 -40.7501 152.654 -7.07107 -37.5059 152.654 -9.23879 -40.7501 158.654 -9.23879 -40.7501 158.654 -7.07107 -37.5059 152.654 -3.82683 -35.3382 152.654 -7.07107 -37.5059 158.654 -7.07107 -37.5059 158.654 -3.82683 -35.3382 152.654 0 -34.577 152.654 -3.82683 -35.3382 158.654 -3.82683 -35.3382 158.654 0 -34.577 152.654 3.82683 -35.3382 152.654 0 -34.577 158.654 0 -34.577 158.654 3.82683 -35.3382 152.654 7.07107 -37.5059 152.654 3.82683 -35.3382 158.654 3.82683 -35.3382 158.654 7.07107 -37.5059 152.654 9.2388 -40.7501 152.654 7.07107 -37.5059 158.654 7.07107 -37.5059 158.654 9.2388 -40.7501 152.654 10 -44.577 152.654 9.2388 -40.7501 158.654 9.2388 -40.7501 158.654 10 -44.577 152.654 9.2388 -48.4038 152.654 10 -44.577 158.654 10 -44.577 158.654 9.2388 -48.4038 152.654 7.07107 -51.648 152.654 9.2388 -48.4038 158.654 9.2388 -48.4038 158.654 7.07107 -51.648 152.654 3.82683 -53.8158 152.654 7.07107 -51.648 158.654 7.07107 -51.648 158.654 3.82683 -53.8158 152.654 0 -54.577 152.654 3.82683 -53.8158 158.654 3.82683 -53.8158 158.654 0 -54.577 160.654 0 -36.577 160.654 -3.06147 -37.1859 160.654 -5.65685 -38.9201 160.654 -7.39104 -41.5155 160.654 -8 -44.577 160.654 -7.39104 -47.6384 160.654 -5.65685 -50.2338 160.654 -3.06147 -51.968 160.654 0 -52.577 160.654 3.06147 -51.968 160.654 5.65686 -50.2338 160.654 7.39104 -47.6384 160.654 8 -44.577 160.654 7.39104 -41.5155 160.654 5.65686 -38.9201 160.654 3.06147 -37.1859 158.654 3.82683 -35.3382 158.654 0 -34.577 160.654 0 -36.577 160.654 3.06147 -37.1859 158.654 7.07107 -37.5059 158.654 3.82683 -35.3382 160.654 3.06147 -37.1859 160.654 5.65686 -38.9201 158.654 9.23879 -40.7501 158.654 7.07107 -37.5059 160.654 5.65686 -38.9201 160.654 7.39104 -41.5155 158.654 10 -44.577 158.654 9.23879 -40.7501 160.654 7.39104 -41.5155 160.654 8 -44.577 158.654 9.23879 -48.4038 158.654 10 -44.577 160.654 8 -44.577 160.654 7.39104 -47.6384 158.654 7.07107 -51.648 158.654 9.23879 -48.4038 160.654 7.39104 -47.6384 160.654 5.65686 -50.2338 158.654 3.82683 -53.8158 158.654 7.07107 -51.648 160.654 5.65686 -50.2338 160.654 3.06147 -51.968 158.654 0 -54.577 158.654 3.82683 -53.8158 160.654 3.06147 -51.968 160.654 0 -52.577 158.654 -3.82683 -53.8158 158.654 0 -54.577 160.654 0 -52.577 160.654 -3.06147 -51.968 158.654 -7.07107 -51.648 158.654 -3.82683 -53.8158 160.654 -3.06147 -51.968 160.654 -5.65685 -50.2338 158.654 -9.2388 -48.4038 158.654 -7.07107 -51.648 160.654 -5.65685 -50.2338 160.654 -7.39104 -47.6384 158.654 -10 -44.577 158.654 -9.2388 -48.4038 160.654 -7.39104 -47.6384 160.654 -8 -44.577 158.654 -9.2388 -40.7501 158.654 -10 -44.577 160.654 -8 -44.577 160.654 -7.39104 -41.5155 158.654 -7.07107 -37.5059 158.654 -9.2388 -40.7501 160.654 -7.39104 -41.5155 160.654 -5.65685 -38.9201 158.654 -3.82683 -35.3382 158.654 -7.07107 -37.5059 160.654 -5.65685 -38.9201 160.654 -3.06147 -37.1859 158.654 0 -34.577 158.654 -3.82683 -35.3382 160.654 -3.06147 -37.1859 160.654 0 -36.577 152.527 10.7339 -101.428 152.527 11.1125 -98.552 158.877 11.1125 -98.552 158.877 10.7339 -101.428 158.877 10.7339 -101.428 158.877 11.1125 -98.552 160.877 9.11251 -98.552 160.877 8.802 -100.91 158.877 11.1125 -98.552 158.877 10.7338 -95.6759 160.877 8.802 -96.1935 160.877 9.11251 -98.552 152.527 11.1125 -98.552 152.527 10.7338 -95.6759 158.877 10.7338 -95.6759 158.877 11.1125 -98.552 152.527 10.7338 -95.6759 152.527 9.62371 -92.9957 158.877 9.6237 -92.9957 158.877 10.7338 -95.6759 158.877 10.7338 -95.6759 158.877 9.6237 -92.9957 160.877 7.89166 -93.9957 160.877 8.802 -96.1935 158.877 9.6237 -92.9957 158.877 7.85773 -90.6943 160.877 6.44351 -92.1085 160.877 7.89166 -93.9957 152.527 9.62371 -92.9957 152.527 7.85773 -90.6943 158.877 7.85773 -90.6943 158.877 9.6237 -92.9957 152.527 7.85773 -90.6943 152.527 5.55624 -88.9283 158.877 5.55625 -88.9283 158.877 7.85773 -90.6943 158.877 7.85773 -90.6943 158.877 5.55625 -88.9283 160.877 4.55625 -90.6603 160.877 6.44351 -92.1085 158.877 5.55625 -88.9283 158.877 2.87613 -87.8181 160.877 2.35849 -89.75 160.877 4.55625 -90.6603 152.527 5.55624 -88.9283 152.527 2.87613 -87.8181 158.877 2.87613 -87.8181 158.877 5.55625 -88.9283 152.527 2.87613 -87.8181 152.527 0 -87.4395 158.877 0 -87.4395 158.877 2.87613 -87.8181 158.877 2.87613 -87.8181 158.877 0 -87.4395 160.877 0 -89.4395 160.877 2.35849 -89.75 158.877 0 -87.4395 158.877 -2.87613 -87.8181 160.877 -2.35849 -89.75 160.877 0 -89.4395 152.527 0 -87.4395 152.527 -2.87614 -87.8181 158.877 -2.87613 -87.8181 158.877 0 -87.4395 152.527 -2.87614 -87.8181 152.527 -5.55625 -88.9283 158.877 -5.55625 -88.9283 158.877 -2.87613 -87.8181 158.877 -2.87613 -87.8181 158.877 -5.55625 -88.9283 160.877 -4.55625 -90.6603 160.877 -2.35849 -89.75 158.877 -5.55625 -88.9283 158.877 -7.85772 -90.6943 160.877 -6.44351 -92.1085 160.877 -4.55625 -90.6603 152.527 -5.55625 -88.9283 152.527 -7.85773 -90.6943 158.877 -7.85772 -90.6943 158.877 -5.55625 -88.9283 152.527 -7.85773 -90.6943 152.527 -9.62371 -92.9957 158.877 -9.6237 -92.9957 158.877 -7.85772 -90.6943 158.877 -7.85772 -90.6943 158.877 -9.6237 -92.9957 160.877 -7.89166 -93.9957 160.877 -6.44351 -92.1085 158.877 -9.6237 -92.9957 158.877 -10.7338 -95.6759 160.877 -8.802 -96.1935 160.877 -7.89166 -93.9957 152.527 -9.62371 -92.9957 152.527 -10.7338 -95.6759 158.877 -10.7338 -95.6759 158.877 -9.6237 -92.9957 152.527 -10.7338 -95.6759 152.527 -11.1125 -98.552 158.877 -11.1125 -98.552 158.877 -10.7338 -95.6759 158.877 -10.7338 -95.6759 158.877 -11.1125 -98.552 160.877 -9.1125 -98.552 160.877 -8.802 -96.1935 158.877 -11.1125 -98.552 158.877 -10.7338 -101.428 160.877 -8.802 -100.91 160.877 -9.1125 -98.552 152.527 -11.1125 -98.552 152.527 -10.7338 -101.428 158.877 -10.7338 -101.428 158.877 -11.1125 -98.552 152.527 -10.7338 -101.428 152.527 -9.62371 -104.108 158.877 -9.62371 -104.108 158.877 -10.7338 -101.428 158.877 -10.7338 -101.428 158.877 -9.62371 -104.108 160.877 -7.89166 -103.108 160.877 -8.802 -100.91 158.877 -9.62371 -104.108 158.877 -7.85773 -106.41 160.877 -6.44351 -104.996 160.877 -7.89166 -103.108 152.527 -9.62371 -104.108 152.527 -7.85773 -106.41 158.877 -7.85773 -106.41 158.877 -9.62371 -104.108 152.527 -7.85773 -106.41 152.527 -5.55626 -108.176 158.877 -5.55625 -108.176 158.877 -7.85773 -106.41 158.877 -7.85773 -106.41 158.877 -5.55625 -108.176 160.877 -4.55625 -106.444 160.877 -6.44351 -104.996 158.877 -5.55625 -108.176 158.877 -2.87613 -109.286 160.877 -2.35849 -107.354 160.877 -4.55625 -106.444 158.877 -2.87613 -109.286 158.877 0 -109.664 160.877 0 -107.664 160.877 -2.35849 -107.354 158.877 5.55625 -108.176 158.877 7.85773 -106.41 160.877 6.44351 -104.996 160.877 4.55625 -106.444 158.877 2.87613 -109.286 158.877 5.55625 -108.176 160.877 4.55625 -106.444 160.877 2.35849 -107.354 158.877 0 -109.664 158.877 2.87613 -109.286 160.877 2.35849 -107.354 160.877 0 -107.664 160.877 0 -107.664 160.877 2.35849 -107.354 160.877 4.55625 -106.444 160.877 6.44351 -104.996 160.877 7.89166 -103.108 160.877 8.802 -100.91 160.877 9.11251 -98.552 160.877 8.802 -96.1935 160.877 7.89166 -93.9957 160.877 6.44351 -92.1085 160.877 4.55625 -90.6603 160.877 2.35849 -89.75 160.877 0 -89.4395 160.877 -2.35849 -89.75 160.877 -4.55625 -90.6603 160.877 -6.44351 -92.1085 160.877 -7.89166 -93.9957 160.877 -8.802 -96.1935 160.877 -9.1125 -98.552 160.877 -8.802 -100.91 160.877 -7.89166 -103.108 160.877 -6.44351 -104.996 160.877 -4.55625 -106.444 160.877 -2.35849 -107.354 158.877 7.85773 -106.41 158.877 9.62371 -104.108 160.877 7.89166 -103.108 160.877 6.44351 -104.996 152.527 7.85771 -106.41 152.527 9.62371 -104.108 158.877 9.62371 -104.108 158.877 7.85773 -106.41 152.527 5.55625 -108.176 152.527 7.85771 -106.41 158.877 7.85773 -106.41 158.877 5.55625 -108.176 152.527 2.87612 -109.286 152.527 5.55625 -108.176 158.877 5.55625 -108.176 158.877 2.87613 -109.286 152.527 0 -109.664 152.527 2.87612 -109.286 158.877 2.87613 -109.286 158.877 0 -109.664 152.527 -2.87613 -109.286 152.527 0 -109.664 158.877 0 -109.664 158.877 -2.87613 -109.286 152.527 -5.55626 -108.176 152.527 -2.87613 -109.286 158.877 -2.87613 -109.286 158.877 -5.55625 -108.176 152.527 -2.87613 -109.286 152.527 -5.55626 -108.176 152.527 -7.85773 -106.41 152.527 -9.62371 -104.108 152.527 -10.7338 -101.428 152.527 -11.1125 -98.552 152.527 -10.7338 -95.6759 152.527 -9.62371 -92.9957 152.527 -7.85773 -90.6943 152.527 -5.55625 -88.9283 152.527 -2.87614 -87.8181 152.527 0 -87.4395 152.527 2.87613 -87.8181 152.527 5.55624 -88.9283 152.527 7.85773 -90.6943 152.527 9.62371 -92.9957 152.527 10.7338 -95.6759 152.527 11.1125 -98.552 152.527 10.7339 -101.428 152.527 9.62371 -104.108 152.527 7.85771 -106.41 152.527 5.55625 -108.176 152.527 2.87612 -109.286 152.527 0 -109.664 152.527 9.62371 -104.108 152.527 10.7339 -101.428 158.877 10.7339 -101.428 158.877 9.62371 -104.108 158.877 9.62371 -104.108 158.877 10.7339 -101.428 160.877 8.802 -100.91 160.877 7.89166 -103.108 130.302 19.05 -98.552 130.302 9.525 -115.05 130.302 -9.525 -115.05 130.302 -19.05 -98.552 130.302 -9.525 -82.0542 130.302 9.52501 -82.0542 152.527 0 -115.05 152.527 -4.26994 -114.488 151.675 -6.47049 -115.05 151.675 -6.47049 -115.05 152.527 -4.26994 -114.488 152.527 -8.24889 -112.84 150.41 -9.52501 -115.05 151.675 -6.47049 -115.05 152.527 -8.24889 -112.84 150.41 -9.52501 -115.05 152.527 -8.24889 -112.84 151.57 -10.925 -112.625 151.57 -10.925 -112.625 152.527 -8.24889 -112.84 152.527 -11.6657 -110.218 151.57 -10.925 -112.625 152.527 -11.6657 -110.218 152.527 -14.2875 -106.801 152.527 -14.2875 -106.801 152.527 -15.9356 -102.822 151.675 -17.5228 -101.197 151.675 -17.5228 -101.197 152.527 -15.9356 -102.822 152.527 -16.4978 -98.552 150.41 -19.05 -98.552 151.675 -17.5228 -101.197 152.527 -16.4978 -98.552 150.41 -19.05 -98.552 152.527 -16.4978 -98.552 151.57 -17.65 -96.1271 151.57 -17.65 -96.1271 152.527 -16.4978 -98.552 152.527 -15.9356 -94.2821 151.57 -17.65 -96.1271 152.527 -15.9356 -94.2821 152.527 -14.2875 -90.3031 152.527 -14.2875 -90.3031 152.527 -11.6657 -86.8863 151.675 -11.0523 -84.6995 151.675 -11.0523 -84.6995 152.527 -11.6657 -86.8863 152.527 -8.24889 -84.2645 150.41 -9.525 -82.0542 151.675 -11.0523 -84.6995 152.527 -8.24889 -84.2645 150.41 -9.525 -82.0542 152.527 -8.24889 -84.2645 151.57 -6.72503 -82.0542 151.57 -6.72503 -82.0542 152.527 -8.24889 -84.2645 152.527 -4.26994 -82.6164 151.57 -6.72503 -82.0542 152.527 -4.26994 -82.6164 152.527 0 -82.0542 152.527 0 -82.0542 152.527 4.26994 -82.6164 151.675 6.47049 -82.0542 151.675 6.47049 -82.0542 152.527 4.26994 -82.6164 152.527 8.2489 -84.2645 150.41 9.52501 -82.0542 151.675 6.47049 -82.0542 152.527 8.2489 -84.2645 150.41 9.52501 -82.0542 152.527 8.2489 -84.2645 151.57 10.925 -84.4791 151.57 10.925 -84.4791 152.527 8.2489 -84.2645 152.527 11.6657 -86.8863 151.57 10.925 -84.4791 152.527 11.6657 -86.8863 152.527 14.2875 -90.3031 152.527 14.2875 -90.3031 152.527 15.9356 -94.2821 151.675 17.5228 -95.9067 151.675 17.5228 -95.9067 152.527 15.9356 -94.2821 152.527 16.4978 -98.552 150.41 19.05 -98.552 151.675 17.5228 -95.9067 152.527 16.4978 -98.552 150.41 19.05 -98.552 152.527 16.4978 -98.552 151.57 17.65 -100.977 151.57 17.65 -100.977 152.527 16.4978 -98.552 152.527 15.9356 -102.822 151.57 17.65 -100.977 152.527 15.9356 -102.822 152.527 14.2875 -106.801 152.527 14.2875 -106.801 152.527 11.6657 -110.218 151.675 11.0523 -112.405 151.675 11.0523 -112.405 152.527 11.6657 -110.218 152.527 8.2489 -112.84 151.57 6.72503 -115.05 152.527 4.26994 -114.488 152.527 0 -115.05 152.527 0 -115.05 152.527 4.26994 -114.488 152.527 8.2489 -112.84 152.527 11.6657 -110.218 152.527 14.2875 -106.801 152.527 15.9356 -102.822 152.527 16.4978 -98.552 152.527 15.9356 -94.2821 152.527 14.2875 -90.3031 152.527 11.6657 -86.8863 152.527 8.2489 -84.2645 152.527 4.26994 -82.6164 152.527 0 -82.0542 152.527 -4.26994 -82.6164 152.527 -8.24889 -84.2645 152.527 -11.6657 -86.8863 152.527 -14.2875 -90.3031 152.527 -15.9356 -94.2821 152.527 -16.4978 -98.552 152.527 -15.9356 -102.822 152.527 -14.2875 -106.801 152.527 -11.6657 -110.218 152.527 -8.24889 -112.84 152.527 -4.26994 -114.488 151.57 6.72503 -115.05 152.527 8.2489 -112.84 152.527 4.26994 -114.488 150.41 9.52501 -115.05 152.527 8.2489 -112.84 151.57 6.72503 -115.05 130.302 9.525 -115.05 150.41 9.52501 -115.05 151.57 6.72503 -115.05 152.527 0 -115.05 151.675 -6.47049 -115.05 150.41 -9.52501 -115.05 130.302 -9.525 -115.05 130.302 -9.525 -115.05 150.41 -9.52501 -115.05 151.57 -10.925 -112.625 152.527 -14.2875 -106.801 151.675 -17.5228 -101.197 150.41 -19.05 -98.552 130.302 -19.05 -98.552 130.302 -19.05 -98.552 150.41 -19.05 -98.552 151.57 -17.65 -96.1271 152.527 -14.2875 -90.3031 151.675 -11.0523 -84.6995 150.41 -9.525 -82.0542 130.302 -9.525 -82.0542 130.302 -9.525 -82.0542 150.41 -9.525 -82.0542 151.57 -6.72503 -82.0542 152.527 0 -82.0542 151.675 6.47049 -82.0542 150.41 9.52501 -82.0542 130.302 9.52501 -82.0542 130.302 9.52501 -82.0542 150.41 9.52501 -82.0542 151.57 10.925 -84.4791 152.527 14.2875 -90.3031 151.675 17.5228 -95.9067 150.41 19.05 -98.552 130.302 19.05 -98.552 130.302 19.05 -98.552 150.41 19.05 -98.552 151.57 17.65 -100.977 152.527 14.2875 -106.801 151.675 11.0523 -112.405 150.41 9.52501 -115.05 130.302 9.525 -115.05 150.41 9.52501 -115.05 151.675 11.0523 -112.405 152.527 8.2489 -112.84 -357.2 19.9343 -103.893 -357.2 17.8726 -108.871 -357.2 14.5929 -113.145 -357.2 10.3187 -116.425 -357.2 5.34138 -118.486 -357.2 0 -119.189 -357.2 -5.34138 -118.486 -357.2 -10.3187 -116.425 -357.2 -14.5929 -113.145 -357.2 -17.8726 -108.871 -357.2 -19.9343 -103.893 -357.2 -20.6375 -98.552 -357.2 -19.9343 -93.2106 -357.2 -17.8726 -88.2332 -357.2 -14.5929 -83.9591 -357.2 -10.3188 -80.6794 -357.2 -5.34138 -78.6177 -357.2 0 -77.9145 -357.2 5.34138 -78.6177 -357.2 10.3187 -80.6794 -357.2 14.5929 -83.9591 -357.2 17.8726 -88.2332 -357.2 19.9343 -93.2106 -357.2 20.6375 -98.552 -98.425 19.9343 -93.2106 -98.425 20.6375 -98.552 -357.2 20.6375 -98.552 -357.2 19.9343 -93.2106 -98.425 17.8726 -88.2332 -98.425 19.9343 -93.2106 -357.2 19.9343 -93.2106 -357.2 17.8726 -88.2332 -98.425 14.5929 -83.9591 -98.425 17.8726 -88.2332 -357.2 17.8726 -88.2332 -357.2 14.5929 -83.9591 -98.425 10.3187 -80.6794 -98.425 14.5929 -83.9591 -357.2 14.5929 -83.9591 -357.2 10.3187 -80.6794 -98.425 5.34138 -78.6177 -98.425 10.3187 -80.6794 -357.2 10.3187 -80.6794 -357.2 5.34138 -78.6177 -98.425 0 -77.9145 -98.425 5.34138 -78.6177 -357.2 5.34138 -78.6177 -357.2 0 -77.9145 -98.425 -5.34138 -78.6177 -98.425 0 -77.9145 -357.2 0 -77.9145 -357.2 -5.34138 -78.6177 -98.425 -10.3188 -80.6794 -98.425 -5.34138 -78.6177 -357.2 -5.34138 -78.6177 -357.2 -10.3188 -80.6794 -98.425 -14.5929 -83.9591 -98.425 -10.3188 -80.6794 -357.2 -10.3188 -80.6794 -357.2 -14.5929 -83.9591 -98.425 -17.8726 -88.2332 -98.425 -14.5929 -83.9591 -357.2 -14.5929 -83.9591 -357.2 -17.8726 -88.2332 -98.425 -19.9343 -93.2106 -98.425 -17.8726 -88.2332 -357.2 -17.8726 -88.2332 -357.2 -19.9343 -93.2106 -98.425 -20.6375 -98.552 -98.425 -19.9343 -93.2106 -357.2 -19.9343 -93.2106 -357.2 -20.6375 -98.552 -98.425 -19.9343 -103.893 -98.425 -20.6375 -98.552 -357.2 -20.6375 -98.552 -357.2 -19.9343 -103.893 -98.425 -17.8726 -108.871 -98.425 -19.9343 -103.893 -357.2 -19.9343 -103.893 -357.2 -17.8726 -108.871 -98.425 -14.5929 -113.145 -98.425 -17.8726 -108.871 -357.2 -17.8726 -108.871 -357.2 -14.5929 -113.145 -98.425 -10.3187 -116.425 -98.425 -14.5929 -113.145 -357.2 -14.5929 -113.145 -357.2 -10.3187 -116.425 -98.425 -5.34138 -118.486 -98.425 -10.3187 -116.425 -357.2 -10.3187 -116.425 -357.2 -5.34138 -118.486 -98.425 0 -119.189 -98.425 -5.34138 -118.486 -357.2 -5.34138 -118.486 -357.2 0 -119.189 -98.425 5.34138 -118.486 -98.425 0 -119.189 -357.2 0 -119.189 -357.2 5.34138 -118.486 -98.425 10.3187 -116.425 -98.425 5.34138 -118.486 -357.2 5.34138 -118.486 -357.2 10.3187 -116.425 -98.425 14.5929 -113.145 -98.425 10.3187 -116.425 -357.2 10.3187 -116.425 -357.2 14.5929 -113.145 -98.425 17.8726 -108.871 -98.425 14.5929 -113.145 -357.2 14.5929 -113.145 -357.2 17.8726 -108.871 -98.425 19.9343 -103.893 -98.425 17.8726 -108.871 -357.2 17.8726 -108.871 -357.2 19.9343 -103.893 -98.425 20.6375 -98.552 -98.425 19.9343 -103.893 -357.2 19.9343 -103.893 -357.2 20.6375 -98.552 -54.9087 34.3841 0 -98.425 33.3375 -19.552 -58.7375 32.7982 0 -58.7375 32.7982 0 -98.425 33.3375 -19.552 -62.0253 30.2753 0 -62.0253 30.2753 0 -98.425 33.3375 -19.552 -64.5482 26.9875 0 -64.5482 26.9875 0 -98.425 33.3375 -19.552 -66.1341 23.1588 0 -66.1341 23.1588 0 -98.425 33.3375 -19.552 -66.675 19.05 0 -66.675 19.05 0 -98.425 33.3375 -19.552 -98.425 -33.3375 -19.552 -66.675 -19.05 0 -66.675 -19.05 0 -98.425 -33.3375 -19.552 -66.1341 -23.1588 0 -66.1341 -23.1588 0 -98.425 -33.3375 -19.552 -64.5482 -26.9875 0 -64.5482 -26.9875 0 -98.425 -33.3375 -19.552 -62.0253 -30.2753 0 -62.0253 -30.2753 0 -98.425 -33.3375 -19.552 -58.7375 -32.7982 0 -58.7375 -32.7982 0 -98.425 -33.3375 -19.552 -54.9087 -34.3841 0 -54.9087 -34.3841 0 -98.425 -33.3375 -19.552 -50.8 -34.925 0 -50.8 -34.925 0 -98.425 -33.3375 -19.552 95.25 -33.3375 -19.552 50.8 -34.925 0 50.8 -34.925 0 95.25 -33.3375 -19.552 54.9087 -34.3841 0 54.9087 -34.3841 0 95.25 -33.3375 -19.552 58.7375 -32.7982 0 58.7375 -32.7982 0 95.25 -33.3375 -19.552 62.0253 -30.2753 0 62.0253 -30.2753 0 95.25 -33.3375 -19.552 64.5481 -26.9875 0 64.5481 -26.9875 0 95.25 -33.3375 -19.552 66.1341 -23.1587 0 66.1341 -23.1587 0 95.25 -33.3375 -19.552 70.7061 -4.10875 0 71.247 0 0 70.7061 -4.10875 0 95.25 -33.3375 -19.552 95.25 -33.3375 -19.552 95.25 33.3375 -19.552 71.247 0 0 71.247 0 0 95.25 33.3375 -19.552 70.7061 4.10875 0 70.7061 4.10875 0 95.25 33.3375 -19.552 66.1341 23.1587 0 66.1341 23.1587 0 95.25 33.3375 -19.552 64.5481 26.9875 0 64.5481 26.9875 0 95.25 33.3375 -19.552 62.0253 30.2753 0 62.0253 30.2753 0 95.25 33.3375 -19.552 58.7375 32.7982 0 58.7375 32.7982 0 95.25 33.3375 -19.552 54.9087 34.3841 0 54.9087 34.3841 0 95.25 33.3375 -19.552 50.8 34.925 0 50.8 34.925 0 95.25 33.3375 -19.552 -98.425 33.3375 -19.552 -50.8 34.925 0 -50.8 34.925 0 -98.425 33.3375 -19.552 -54.9087 34.3841 0 -98.425 28.8711 -115.221 -98.425 32.2016 -107.18 95.25 32.2016 -107.18 95.25 28.8711 -115.221 -98.425 23.5732 -122.125 -98.425 28.8711 -115.221 95.25 28.8711 -115.221 95.25 23.5732 -122.125 -98.425 16.6688 -127.423 -98.425 23.5732 -122.125 95.25 23.5732 -122.125 95.25 16.6688 -127.423 -98.425 8.62838 -130.754 -98.425 16.6688 -127.423 95.25 16.6688 -127.423 95.25 8.62838 -130.754 -98.425 0 -131.889 -98.425 8.62838 -130.754 95.25 8.62838 -130.754 95.25 0 -131.889 -98.425 -8.62838 -130.754 -98.425 0 -131.889 95.25 0 -131.889 95.25 -8.62838 -130.754 -98.425 -16.6687 -127.423 -98.425 -8.62838 -130.754 95.25 -8.62838 -130.754 95.25 -16.6687 -127.423 -98.425 -28.8711 -115.221 -98.425 -23.5732 -122.125 95.25 -23.5732 -122.125 95.25 -28.8711 -115.221 -98.425 -32.2016 -107.18 -98.425 -28.8711 -115.221 95.25 -28.8711 -115.221 95.25 -32.2016 -107.18 -98.425 -33.3375 -98.552 -98.425 -32.2016 -107.18 95.25 -32.2016 -107.18 95.25 -33.3375 -98.552 95.25 -33.3375 -98.552 95.25 -32.2016 -107.18 95.25 -28.8711 -115.221 95.25 -23.5732 -122.125 95.25 -16.6687 -127.423 95.25 -8.62838 -130.754 95.25 0 -131.889 95.25 8.62838 -130.754 95.25 16.6688 -127.423 95.25 23.5732 -122.125 95.25 28.8711 -115.221 95.25 32.2016 -107.18 95.25 33.3375 -98.552 -98.425 32.2016 -107.18 -98.425 33.3375 -98.552 95.25 33.3375 -98.552 95.25 32.2016 -107.18 -98.425 33.3375 -98.552 -98.425 32.2016 -107.18 -98.425 28.8711 -115.221 -98.425 23.5732 -122.125 -98.425 16.6688 -127.423 -98.425 8.62838 -130.754 -98.425 0 -131.889 -98.425 -8.62838 -130.754 -98.425 -16.6687 -127.423 -98.425 -23.5732 -122.125 -98.425 -28.8711 -115.221 -98.425 -32.2016 -107.18 -98.425 -33.3375 -98.552 -98.425 -23.5732 -122.125 -98.425 -16.6687 -127.423 95.25 -16.6687 -127.423 95.25 -23.5732 -122.125 95.25 -33.3375 -98.552 95.25 33.3375 -98.552 95.25 33.3375 -19.552 95.25 -33.3375 -19.552 -98.425 -33.3375 -98.552 95.25 -33.3375 -98.552 95.25 -33.3375 -19.552 -98.425 -33.3375 -19.552 -98.425 33.3375 -98.552 -98.425 -33.3375 -98.552 -98.425 -33.3375 -19.552 -98.425 33.3375 -19.552 95.25 33.3375 -98.552 -98.425 33.3375 -98.552 -98.425 33.3375 -19.552 95.25 33.3375 -19.552 -98.425 33.3375 -19.552 95.25 33.3375 -19.552 95.25 -33.3375 -19.552 -98.425 -33.3375 -19.552 54.9087 34.3841 0 -54.9087 34.3841 0 -58.7375 32.7982 0 -64.5482 26.9875 0 -66.1341 23.1588 0 -66.1341 -23.1588 0 -64.5482 -26.9875 0 -58.7375 -32.7982 0 -54.9087 -34.3841 0 54.9087 -34.3841 0 58.7375 -32.7982 0 64.5481 -26.9875 0 71.247 0 0 64.5481 26.9875 0 58.7375 32.7982 0 50.8 34.925 0 -50.8 34.925 0 -62.0253 30.2753 0 -66.675 19.05 0 -66.675 -19.05 0 -62.0253 -30.2753 0 -50.8 -34.925 0 50.8 -34.925 0 62.0253 -30.2753 0 66.1341 -23.1587 0 70.7061 -4.10875 0 70.7061 4.10875 0 66.1341 23.1587 0 62.0253 30.2753 0 - - - - - - - - - - 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 0 1 0 0 1 0 0 1 0 0 1 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 0 1 0 0 1 0 0 1 0 0 1 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 -0.382672 -0.923884 0 0 -1 0 0 -1 0 -0.382672 -0.923884 0 -0.707083 -0.70713 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.707083 -0.70713 0 -0.923884 -0.382672 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.923884 -0.382672 0 -1 0 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -1 0 0 -0.923884 0.382672 0 -1 0 0 -1 0 0 -0.923884 0.382672 0 -0.707083 0.70713 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.707083 0.70713 0 -0.382672 0.923884 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.382672 0.923884 0 0 1 0 -0.382672 0.923884 0 -0.382672 0.923884 0 0 1 0 0.382672 0.923884 0 0 1 0 0 1 0 0.382672 0.923884 0 0.70713 0.707083 0 0.382672 0.923884 0 0.382672 0.923884 0 0.70713 0.707083 0 0.923884 0.382672 0 0.70713 0.707083 0 0.70713 0.707083 0 0.923884 0.382672 0 1 0 0 0.923884 0.382672 0 0.923884 0.382672 0 1 0 0 0.923884 -0.382672 0 1 0 0 1 0 0 0.923884 -0.382672 0 0.707083 -0.70713 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.707083 -0.70713 0 0.382672 -0.923884 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.382672 -0.923884 0 0 -1 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0 -1 0.863767 0 0.503891 0.863757 -0.192816 0.46556 0.863768 -0.356304 0.356304 0.863757 -0.46556 0.192816 0.863767 -0.503891 0 0.863757 -0.46556 -0.192816 0.863768 -0.356304 -0.356304 0.863757 -0.192816 -0.46556 0.863767 0 -0.503891 0.863757 0.192816 -0.46556 0.863768 0.356304 -0.356304 0.863757 0.46556 -0.192816 0.863767 0.503891 0 0.863757 0.46556 0.192816 0.863768 0.356304 0.356304 0.863757 0.192816 0.46556 0.707117 0.270577 0.653279 0.707083 0 0.70713 0.863767 0 0.503891 0.863757 0.192816 0.46556 0.707128 0.499985 0.499985 0.707117 0.270577 0.653279 0.863757 0.192816 0.46556 0.863768 0.356304 0.356304 0.707117 0.653279 0.270577 0.707128 0.499985 0.499985 0.863768 0.356304 0.356304 0.863757 0.46556 0.192816 0.707083 0.70713 0 0.707117 0.653279 0.270577 0.863757 0.46556 0.192816 0.863767 0.503891 0 0.707117 0.653279 -0.270577 0.707083 0.70713 0 0.863767 0.503891 0 0.863757 0.46556 -0.192816 0.707128 0.499985 -0.499985 0.707117 0.653279 -0.270577 0.863757 0.46556 -0.192816 0.863768 0.356304 -0.356304 0.707117 0.270577 -0.653279 0.707128 0.499985 -0.499985 0.863768 0.356304 -0.356304 0.863757 0.192816 -0.46556 0.707083 0 -0.70713 0.707117 0.270577 -0.653279 0.863757 0.192816 -0.46556 0.863767 0 -0.503891 0.707117 -0.270577 -0.653279 0.707083 0 -0.70713 0.863767 0 -0.503891 0.863757 -0.192816 -0.46556 0.707128 -0.499985 -0.499985 0.707117 -0.270577 -0.653279 0.863757 -0.192816 -0.46556 0.863768 -0.356304 -0.356304 0.707117 -0.653279 -0.270577 0.707128 -0.499985 -0.499985 0.863768 -0.356304 -0.356304 0.863757 -0.46556 -0.192816 0.707083 -0.70713 0 0.707117 -0.653279 -0.270577 0.863757 -0.46556 -0.192816 0.863767 -0.503891 0 0.707117 -0.653279 0.270577 0.707083 -0.70713 0 0.863767 -0.503891 0 0.863757 -0.46556 0.192816 0.707128 -0.499985 0.499985 0.707117 -0.653279 0.270577 0.863757 -0.46556 0.192816 0.863768 -0.356304 0.356304 0.707117 -0.270577 0.653279 0.707128 -0.499985 0.499985 0.863768 -0.356304 0.356304 0.863757 -0.192816 0.46556 0.707083 0 0.70713 0.707117 -0.270577 0.653279 0.863757 -0.192816 0.46556 0.863767 0 0.503891 0 0.965932 -0.258797 0 1 0 0.253304 0.966813 -0.0333262 0.253304 0.942505 -0.217994 0.505539 0.844304 -0.177709 0.505539 0.861531 -0.0468459 0.86325 0.504776 0 0.863261 0.487564 -0.130619 0.505539 0.861531 0.0468459 0.505539 0.844304 0.177709 0.863261 0.487564 0.130619 0.86325 0.504776 0 0 1 0 0 0.965932 0.258797 0.253304 0.942505 0.217994 0.253304 0.966813 0.0333262 0 0.965932 0.258797 0 0.866034 0.499985 0.253304 0.853965 0.454512 0.253304 0.925244 0.282418 0.505539 0.820051 0.268227 0.505539 0.769555 0.390149 0.863251 0.437147 0.252388 0.863261 0.487564 0.130619 0.505539 0.72269 0.471328 0.505539 0.642349 0.576037 0.863264 0.356914 0.356914 0.863251 0.437147 0.252388 0 0.866034 0.499985 0 0.707083 0.70713 0.253304 0.707252 0.660024 0.253304 0.820611 0.512284 0 0.707083 0.70713 0 0.499985 0.866034 0.253304 0.512284 0.820611 0.253304 0.660024 0.707252 0.505539 0.576037 0.642349 0.505539 0.471328 0.72269 0.863251 0.252388 0.437147 0.863264 0.356914 0.356914 0.505539 0.390149 0.769555 0.505539 0.268227 0.820051 0.863261 0.130619 0.487564 0.863251 0.252388 0.437147 0 0.499985 0.866034 0 0.258797 0.965932 0.253304 0.282418 0.925244 0.253304 0.454512 0.853965 0 0.258797 0.965932 0 0 1 0.253304 0.0333262 0.966813 0.253304 0.217994 0.942505 0.505539 0.177709 0.844304 0.505539 0.0468459 0.861531 0.86325 0 0.504776 0.863261 0.130619 0.487564 0.505539 -0.0468459 0.861531 0.505539 -0.177709 0.844304 0.863261 -0.130619 0.487564 0.86325 0 0.504776 0 0 1 0 -0.258797 0.965932 0.253304 -0.217994 0.942505 0.253304 -0.0333262 0.966813 0 -0.258797 0.965932 0 -0.499985 0.866034 0.253304 -0.454512 0.853965 0.253304 -0.282418 0.925244 0.505539 -0.268227 0.820051 0.505539 -0.390149 0.769555 0.863251 -0.252388 0.437147 0.863261 -0.130619 0.487564 0.505539 -0.471328 0.72269 0.505539 -0.576037 0.642349 0.863264 -0.356914 0.356914 0.863251 -0.252388 0.437147 0 -0.499985 0.866034 0 -0.707083 0.70713 0.253304 -0.660024 0.707252 0.253304 -0.512284 0.820611 0 -0.707083 0.70713 0 -0.866034 0.499985 0.253304 -0.820611 0.512284 0.253304 -0.707252 0.660024 0.505539 -0.642349 0.576037 0.505539 -0.72269 0.471328 0.863251 -0.437147 0.252388 0.863264 -0.356914 0.356914 0.505539 -0.769555 0.390149 0.505539 -0.820051 0.268227 0.863261 -0.487564 0.130619 0.863251 -0.437147 0.252388 0 -0.866034 0.499985 0 -0.965932 0.258797 0.253304 -0.925244 0.282418 0.253304 -0.853965 0.454512 0 -0.965932 0.258797 0 -1 0 0.253304 -0.966813 0.0333262 0.253304 -0.942505 0.217994 0.505539 -0.844304 0.177709 0.505539 -0.861531 0.0468459 0.86325 -0.504776 0 0.863261 -0.487564 0.130619 0.505539 -0.861531 -0.0468459 0.505539 -0.844304 -0.177709 0.863261 -0.487564 -0.130619 0.86325 -0.504776 0 0 -1 0 0 -0.965932 -0.258797 0.253304 -0.942505 -0.217994 0.253304 -0.966813 -0.0333262 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0.253304 -0.853965 -0.454512 0.253304 -0.925244 -0.282418 0.505539 -0.820051 -0.268227 0.505539 -0.769555 -0.390149 0.86326 -0.437147 -0.252358 0.863261 -0.487564 -0.130619 0.505539 -0.72269 -0.471328 0.505539 -0.642349 -0.576037 0.863264 -0.356914 -0.356914 0.86326 -0.437147 -0.252358 0 -0.866034 -0.499985 0 -0.70713 -0.707083 0.253304 -0.707252 -0.660024 0.253304 -0.820611 -0.512284 0 -0.70713 -0.707083 0 -0.499985 -0.866034 0.253304 -0.512284 -0.820611 0.253304 -0.660024 -0.707252 0.505539 -0.576037 -0.642349 0.505539 -0.471328 -0.72269 0.86326 -0.252358 -0.437147 0.863264 -0.356914 -0.356914 0.505539 -0.390149 -0.769555 0.505539 -0.268227 -0.820051 0.863261 -0.130619 -0.487564 0.86326 -0.252358 -0.437147 0.505539 -0.177709 -0.844304 0.505539 -0.0468459 -0.861531 0.86325 0 -0.504776 0.863261 -0.130619 -0.487564 0.505539 0.471328 -0.72269 0.505539 0.576037 -0.642349 0.863264 0.356914 -0.356914 0.863251 0.252388 -0.437147 0.505539 0.268227 -0.820051 0.505539 0.390149 -0.769555 0.863251 0.252388 -0.437147 0.863261 0.130619 -0.487564 0.505539 0.0468459 -0.861531 0.505539 0.177709 -0.844304 0.863261 0.130619 -0.487564 0.86325 0 -0.504776 0.86325 0 -0.504776 0.863261 0.130619 -0.487564 0.863251 0.252388 -0.437147 0.863264 0.356914 -0.356914 0.863251 0.437147 -0.252388 0.863261 0.487564 -0.130619 0.86325 0.504776 0 0.863261 0.487564 0.130619 0.863251 0.437147 0.252388 0.863264 0.356914 0.356914 0.863251 0.252388 0.437147 0.863261 0.130619 0.487564 0.86325 0 0.504776 0.863261 -0.130619 0.487564 0.863251 -0.252388 0.437147 0.863264 -0.356914 0.356914 0.863251 -0.437147 0.252388 0.863261 -0.487564 0.130619 0.86325 -0.504776 0 0.863261 -0.487564 -0.130619 0.86326 -0.437147 -0.252358 0.863264 -0.356914 -0.356914 0.86326 -0.252358 -0.437147 0.863261 -0.130619 -0.487564 0.505539 0.642349 -0.576037 0.505539 0.72269 -0.471328 0.863251 0.437147 -0.252388 0.863264 0.356914 -0.356914 0 0.707083 -0.70713 0 0.866034 -0.499985 0.253304 0.820611 -0.512284 0.253304 0.707252 -0.660024 0 0.499985 -0.866034 0 0.707083 -0.70713 0.253304 0.660024 -0.707252 0.253304 0.512284 -0.820611 0 0.258797 -0.965932 0 0.499985 -0.866034 0.253304 0.454512 -0.853965 0.253304 0.282418 -0.925244 0 0 -1 0 0.258797 -0.965932 0.253304 0.217994 -0.942505 0.253304 0.0333262 -0.966813 0 -0.258797 -0.965932 0 0 -1 0.253304 -0.0333262 -0.966813 0.253304 -0.217994 -0.942505 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0.253304 -0.282418 -0.925244 0.253304 -0.454512 -0.853965 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.866034 -0.499985 0 0.965932 -0.258797 0.253304 0.925244 -0.282418 0.253304 0.853965 -0.454512 0.505539 0.769555 -0.390149 0.505539 0.820051 -0.268227 0.863261 0.487564 -0.130619 0.863251 0.437147 -0.252388 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0.698996 0.00100711 -0.715125 0.90081 -0.104343 -0.421491 0.636219 -0.168401 -0.752905 0.781726 -0.206885 -0.588305 0.90081 -0.104343 -0.421491 0.874124 -0.243263 -0.420392 0.769671 -0.319224 -0.552904 0.781726 -0.206885 -0.588305 0.874124 -0.243263 -0.420392 0.769671 -0.319224 -0.552904 0.874124 -0.243263 -0.420392 0.769009 -0.417371 -0.484176 0.769009 -0.417371 -0.484176 0.874124 -0.243263 -0.420392 0.891729 -0.326121 -0.313791 0.623667 -0.575182 -0.529344 0.7645 -0.464522 -0.446944 0.493057 -0.752815 -0.436079 0.69901 -0.618793 -0.35844 0.9008 -0.417219 -0.120365 0.636219 -0.73624 -0.230598 0.781702 -0.612964 -0.114963 0.9008 -0.417219 -0.120365 0.874124 -0.485702 0.000488296 0.769691 -0.638417 0 0.781702 -0.612964 -0.114963 0.874124 -0.485702 0.000488296 0.769691 -0.638417 0 0.874124 -0.485702 0.000488296 0.768998 -0.62801 0.119358 0.768998 -0.62801 0.119358 0.874124 -0.485702 0.000488296 0.891737 -0.434797 0.125523 0.623615 -0.746055 0.233467 0.764488 -0.619343 0.178808 0.493057 -0.754083 0.433882 0.699039 -0.6198 0.356639 0.900806 -0.312845 0.301126 0.636224 -0.567827 0.522294 0.781711 -0.406049 0.473342 0.900806 -0.312845 0.301126 0.874127 -0.242409 0.420881 0.769684 -0.319193 0.552904 0.781711 -0.406049 0.473342 0.874127 -0.242409 0.420881 0.769684 -0.319193 0.552904 0.874127 -0.242409 0.420881 0.769019 -0.210608 0.603534 0.769019 -0.210608 0.603534 0.874127 -0.242409 0.420881 0.891736 -0.108676 0.439314 0.623615 -0.170812 0.762842 0.76451 -0.15479 0.625751 0.493057 -0.00125126 0.869996 0.698996 -0.00100711 0.715125 0.90081 0.104343 0.421491 0.636219 0.168401 0.752905 0.781726 0.206885 0.588305 0.90081 0.104343 0.421491 0.874124 0.243263 0.420392 0.769671 0.319224 0.552904 0.781726 0.206885 0.588305 0.874124 0.243263 0.420392 0.769671 0.319224 0.552904 0.874124 0.243263 0.420392 0.769009 0.417371 0.484176 0.769009 0.417371 0.484176 0.874124 0.243263 0.420392 0.891729 0.326121 0.313791 0.623667 0.575182 0.529344 0.7645 0.464522 0.446944 0.493057 0.752815 0.436079 0.69901 0.618793 0.35844 0.9008 0.417219 0.120365 0.636219 0.73624 0.230598 0.781702 0.612964 0.114963 0.9008 0.417219 0.120365 0.874124 0.485702 -0.000488296 0.769691 0.638417 0 0.781702 0.612964 0.114963 0.874124 0.485702 -0.000488296 0.769691 0.638417 0 0.874124 0.485702 -0.000488296 0.768998 0.62801 -0.119358 0.768998 0.62801 -0.119358 0.874124 0.485702 -0.000488296 0.891737 0.434797 -0.125523 0.623615 0.746055 -0.233467 0.764513 0.619312 -0.178808 0.493057 0.754083 -0.433882 0.699039 0.6198 -0.356639 0.900806 0.312845 -0.301126 0.636249 0.567827 -0.522263 0.781711 0.406049 -0.473342 0.900806 0.312845 -0.301126 0.874127 0.242409 -0.420881 0.623615 0.170812 -0.762842 0.76451 0.15479 -0.625751 0.493057 0.00125126 -0.869996 0.923063 -0.0502029 -0.381359 0.958153 0.109531 -0.264473 0.874127 0.242409 -0.420881 0.900806 0.312845 -0.301126 0.923071 0.305155 -0.234138 0.958149 0.283822 -0.0373547 0.874124 0.485702 -0.000488296 0.9008 0.417219 0.120365 0.923069 0.355358 0.147191 0.958149 0.174261 0.227119 0.874124 0.243263 0.420392 0.90081 0.104343 0.421491 0.923063 0.0502029 0.381359 0.958153 -0.109531 0.264473 0.874127 -0.242409 0.420881 0.900806 -0.312845 0.301126 0.923071 -0.305155 0.234138 0.958149 -0.283822 0.0373547 0.874124 -0.485702 0.000488296 0.9008 -0.417219 -0.120365 0.923069 -0.355358 -0.147191 0.958149 -0.174261 -0.227119 0.874124 -0.243263 -0.420392 0.90081 -0.104343 -0.421491 0.769019 0.210608 -0.603534 0.874127 0.242409 -0.420881 0.891736 0.108676 -0.439314 0.769684 0.319193 -0.552904 0.874127 0.242409 -0.420881 0.769019 0.210608 -0.603534 0 0 -1 0 0 -1 0.363231 0.0516984 -0.930264 0.493057 0.00125126 -0.869996 0.381359 -0.0502029 -0.923063 0 0 -1 0 0 -1 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0.363231 -0.779783 -0.509903 0.493057 -0.752815 -0.436079 0.381359 -0.824519 -0.418012 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0.363231 -0.831495 0.420331 0.493057 -0.754083 0.433882 0.381359 -0.774306 0.50499 0 -0.866034 0.499985 0 -0.866034 0.499985 0 0 1 0 0 1 0.363231 -0.0516984 0.930264 0.493057 -0.00125126 0.869996 0.381359 0.0502029 0.923063 0 0 1 0 0 1 0 0.866034 0.499985 0 0.866034 0.499985 0.363231 0.779783 0.509903 0.493057 0.752815 0.436079 0.381359 0.824503 0.418043 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0.363231 0.831495 -0.420331 0.493057 0.754083 -0.433882 0.381359 0.774306 -0.50499 0 0.866034 -0.499985 0 0.866034 -0.499985 0.769684 0.319193 -0.552904 0.781711 0.406049 -0.473342 0.874127 0.242409 -0.420881 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.965932 0.258797 0 1 0 0 1 0 0 0.965932 0.258797 0 0.866034 0.499985 0 0.965932 0.258797 0 0.965932 0.258797 0 0.866034 0.499985 0 0.70713 0.707083 0 0.866034 0.499985 0 0.866034 0.499985 0 0.70713 0.707083 0 0.499985 0.866034 0 0.70713 0.707083 0 0.70713 0.707083 0 0.499985 0.866034 0 0.258797 0.965932 0 0.499985 0.866034 0 0.499985 0.866034 0 0.258797 0.965932 0 0 1 0 0.258797 0.965932 0 0.258797 0.965932 0 0 1 0 -0.258797 0.965932 0 0 1 0 0 1 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.258797 0.965932 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -1 0 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -1 0 0 -0.965932 -0.258797 0 -1 0 0 -1 0 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.707083 -0.70713 0 -0.499985 -0.866034 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 0 -1 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 0 -1 0 0.258797 -0.965932 0 0 -1 0 0 -1 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.965932 -0.258797 0 1 0 0 0.965932 -0.258797 0 0.965932 -0.258797 0 1 0 -0.21955 0.86967 0.442122 -0.399487 0.502976 0.766437 -0.342235 0.613544 0.711645 -0.342235 0.613544 0.711645 -0.426435 0.433393 0.793929 -0.404035 0.411969 0.816724 -0.404035 0.411969 0.816724 -0.449202 0.311747 0.837276 -0.445662 0.259957 0.856626 -0.445662 0.259957 0.856626 -0.449202 0.311747 0.837276 -0.483444 0.129246 0.865782 -0.483444 0.129246 0.865782 -0.449202 0.311747 0.837276 -0.51323 0.033021 0.857616 -0.51323 0.033021 0.857616 -0.467116 0.219611 0.856489 -0.467116 -0.219611 0.856489 -0.51323 -0.033021 0.857616 -0.51323 -0.033021 0.857616 -0.449202 -0.311747 0.837276 -0.483444 -0.129246 0.865782 -0.483444 -0.129246 0.865782 -0.449202 -0.311747 0.837276 -0.445662 -0.259957 0.856626 -0.445662 -0.259957 0.856626 -0.449202 -0.311747 0.837276 -0.404035 -0.411969 0.816724 -0.404035 -0.411969 0.816724 -0.426435 -0.433393 0.793929 -0.342235 -0.613544 0.711645 -0.342235 -0.613544 0.711645 -0.399487 -0.502976 0.766437 -0.21955 -0.86967 0.442122 -0.21955 -0.86967 0.442122 -0.221717 -0.875388 0.429579 -0.0644246 -0.995016 0.0761132 -0.0644246 -0.995016 0.0761132 -0.0644246 -0.995016 0.0761132 0.0646077 -0.995723 0.0660421 0.0646077 -0.995723 0.0660421 0.0646077 -0.995723 0.0660421 0.228339 -0.884697 0.406415 0.224128 -0.881658 0.415265 0.224128 -0.881658 0.415265 0.447523 -0.465255 0.763715 0.356456 -0.637257 0.683259 0.356456 -0.637257 0.683259 0.479415 -0.40846 0.776738 0.42671 -0.434492 0.793181 0.42671 -0.434492 0.793181 0.50145 -0.299295 0.81177 0.474807 -0.27665 0.835478 0.474807 -0.27665 0.835478 0.50145 -0.299295 0.81177 0.509293 -0.16538 0.844553 0.509293 -0.16538 0.844553 0.50145 -0.299295 0.81177 0.544359 -0.0999786 0.832873 0.589068 0 0.808083 0.544359 -0.0999786 0.832873 0.50145 -0.299295 0.81177 0.520524 -0.215705 0.826152 0.520524 0.215705 0.826152 0.589068 0 0.808083 0.589068 0 0.808083 0.50145 0.299295 0.81177 0.544359 0.0999786 0.832873 0.544359 0.0999786 0.832873 0.50145 0.299295 0.81177 0.509293 0.16538 0.844553 0.509293 0.16538 0.844553 0.50145 0.299295 0.81177 0.474807 0.27665 0.835478 0.474807 0.27665 0.835478 0.50145 0.299295 0.81177 0.42671 0.434492 0.793181 0.42671 0.434492 0.793181 0.479415 0.40846 0.776738 0.356456 0.637257 0.683259 0.356456 0.637257 0.683259 0.447523 0.465255 0.763715 0.224128 0.881658 0.415265 0.224128 0.881658 0.415265 0.228339 0.884697 0.406415 0.0646077 0.995723 0.0660421 0.0646077 0.995723 0.0660421 0.0646077 0.995723 0.0660421 -0.0644246 0.995016 0.0761132 -0.0644246 0.995016 0.0761132 -0.0644246 0.995016 0.0761132 -0.221717 0.875388 0.429579 -0.21955 0.86967 0.442122 0 0.866034 -0.499985 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0 -1 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0 -1 0 -0.258797 -0.965932 0 0 -1 0 0 -1 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.866034 -0.499985 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.991449 -0.130497 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.991449 -0.130497 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.965932 -0.258797 0 0.991449 -0.130497 0 0.991449 -0.130497 0 0.965932 -0.258797 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -0.707083 -0.70713 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.707083 -0.70713 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 - - - - - - - - - - - - - - -

0 0 1 1 2 2 3 3

-

4 4 5 5 6 6 7 7

-

8 8 9 9 10 10 11 11

-

12 12 13 13 14 14 15 15

-

16 16 17 17 18 18 19 19 20 20 21 21

-

22 22 23 23 24 24 25 25

-

26 26 27 27 28 28 29 29 30 30 31 31

-

32 32 33 33 34 34 35 35

-
- - - -

36 36 37 37 38 38 39 39

-

40 40 41 41 42 42 43 43

-

44 44 45 45 46 46 47 47

-

48 48 49 49 50 50 51 51

-

52 52 53 53 54 54 55 55 56 56 57 57

-

58 58 59 59 60 60 61 61

-

62 62 63 63 64 64 65 65 66 66 67 67

-

68 68 69 69 70 70 71 71

-
- - - -

72 72 73 73 74 74 75 75

-

76 76 77 77 78 78 79 79

-

80 80 81 81 82 82 83 83

-

84 84 85 85 86 86 87 87

-

88 88 89 89 90 90 91 91

-

92 92 93 93 94 94 95 95

-

96 96 97 97 98 98 99 99

-

100 100 101 101 102 102 103 103

-

104 104 105 105 106 106 107 107

-

108 108 109 109 110 110 111 111

-

112 112 113 113 114 114 115 115

-

116 116 117 117 118 118 119 119

-

120 120 121 121 122 122 123 123

-

124 124 125 125 126 126 127 127

-

128 128 129 129 130 130 131 131

-

132 132 133 133 134 134 135 135

-
- - - -

136 136 137 137 138 138 139 139 140 140 141 141 142 142 143 143 144 144 145 145 146 146 147 147 148 148 149 149 150 150 151 151

-

152 152 153 153 154 154 155 155

-

156 156 157 157 158 158 159 159

-

160 160 161 161 162 162 163 163

-

164 164 165 165 166 166 167 167

-

168 168 169 169 170 170 171 171

-

172 172 173 173 174 174 175 175

-

176 176 177 177 178 178 179 179

-

180 180 181 181 182 182 183 183

-

184 184 185 185 186 186 187 187

-

188 188 189 189 190 190 191 191

-

192 192 193 193 194 194 195 195

-

196 196 197 197 198 198 199 199

-

200 200 201 201 202 202 203 203

-

204 204 205 205 206 206 207 207

-

208 208 209 209 210 210 211 211

-

212 212 213 213 214 214 215 215

-
- - - -

216 216 217 217 218 218 219 219

-

220 220 221 221 222 222 223 223

-

224 224 225 225 226 226 227 227

-

228 228 229 229 230 230 231 231

-

232 232 233 233 234 234 235 235

-

236 236 237 237 238 238 239 239

-

240 240 241 241 242 242 243 243

-

244 244 245 245 246 246 247 247

-

248 248 249 249 250 250 251 251

-

252 252 253 253 254 254 255 255

-

256 256 257 257 258 258 259 259

-

260 260 261 261 262 262 263 263

-

264 264 265 265 266 266 267 267

-

268 268 269 269 270 270 271 271

-

272 272 273 273 274 274 275 275

-

276 276 277 277 278 278 279 279

-

280 280 281 281 282 282 283 283

-

284 284 285 285 286 286 287 287

-

288 288 289 289 290 290 291 291

-

292 292 293 293 294 294 295 295

-

296 296 297 297 298 298 299 299

-

300 300 301 301 302 302 303 303

-

304 304 305 305 306 306 307 307

-

308 308 309 309 310 310 311 311

-

312 312 313 313 314 314 315 315

-

316 316 317 317 318 318 319 319

-

320 320 321 321 322 322 323 323

-

324 324 325 325 326 326 327 327

-

328 328 329 329 330 330 331 331

-

332 332 333 333 334 334 335 335

-

336 336 337 337 338 338 339 339

-

340 340 341 341 342 342 343 343

-

344 344 345 345 346 346 347 347

-

348 348 349 349 350 350 351 351

-

352 352 353 353 354 354 355 355

-

356 356 357 357 358 358 359 359

-

360 360 361 361 362 362 363 363

-

364 364 365 365 366 366 367 367

-

368 368 369 369 370 370 371 371

-

372 372 373 373 374 374 375 375 376 376 377 377 378 378 379 379 380 380 381 381 382 382 383 383 384 384 385 385 386 386 387 387 388 388 389 389 390 390 391 391 392 392 393 393 394 394 395 395

-

396 396 397 397 398 398 399 399

-

400 400 401 401 402 402 403 403

-

404 404 405 405 406 406 407 407

-

408 408 409 409 410 410 411 411

-

412 412 413 413 414 414 415 415

-

416 416 417 417 418 418 419 419

-

420 420 421 421 422 422 423 423

-

424 424 425 425 426 426 427 427 428 428 429 429 430 430 431 431 432 432 433 433 434 434 435 435 436 436 437 437 438 438 439 439 440 440 441 441 442 442 443 443 444 444 445 445 446 446 447 447

-

448 448 449 449 450 450 451 451

-

452 452 453 453 454 454 455 455

-
- - - -

462 462 463 463 464 464 465 465 466 466 467 467 468 468 469 469 470 470 471 471 472 472 473 473 474 474 475 475 476 476 477 477 478 478 479 479 480 480 481 481 482 482 483 483 484 484 485 485 486 486 487 487 488 488 489 489 490 490 491 491 492 492 493 493 494 494 495 495 496 496 497 497 498 498 499 499 500 500 501 501 502 502 503 503 504 504 505 505 506 506 507 507 508 508 509 509 510 510 511 511 512 512 513 513 514 514 515 515 516 516 517 517 518 518 519 519 520 520 521 521 522 522 523 523 524 524 525 525 526 526 527 527 528 528 529 529 530 530 531 531 532 532 533 533 534 534 535 535 536 536 537 537 538 538 539 539 540 540 541 541 542 542 543 543 544 544 545 545 546 546 547 547 548 548 549 549 550 550 551 551 552 552 553 553 554 554 555 555 556 556 557 557 558 558 559 559 560 560 585 585 586 586 587 587 588 588 589 589 590 590 633 633 634 634 635 635

-
- - - -

456 456 457 457 458 458 459 459 460 460 461 461

-

561 561 562 562 563 563 564 564 565 565 566 566 567 567 568 568 569 569 570 570 571 571 572 572 573 573 574 574 575 575 576 576 577 577 578 578 579 579 580 580 581 581 582 582 583 583 584 584

-

591 591 592 592 593 593 594 594 595 595 596 596 597 597

-

598 598 599 599 600 600 601 601 602 602 603 603 604 604

-

605 605 606 606 607 607 608 608 609 609 610 610 611 611

-

612 612 613 613 614 614 615 615 616 616 617 617 618 618

-

619 619 620 620 621 621 622 622 623 623 624 624 625 625

-

626 626 627 627 628 628 629 629 630 630 631 631 632 632

-
- - - -

636 636 637 637 638 638 639 639 640 640 641 641 642 642 643 643 644 644 645 645 646 646 647 647 648 648 649 649 650 650 651 651 652 652 653 653 654 654 655 655 656 656 657 657 658 658 659 659

-

660 660 661 661 662 662 663 663

-

664 664 665 665 666 666 667 667

-

668 668 669 669 670 670 671 671

-

672 672 673 673 674 674 675 675

-

676 676 677 677 678 678 679 679

-

680 680 681 681 682 682 683 683

-

684 684 685 685 686 686 687 687

-

688 688 689 689 690 690 691 691

-

692 692 693 693 694 694 695 695

-

696 696 697 697 698 698 699 699

-

700 700 701 701 702 702 703 703

-

704 704 705 705 706 706 707 707

-

708 708 709 709 710 710 711 711

-

712 712 713 713 714 714 715 715

-

716 716 717 717 718 718 719 719

-

720 720 721 721 722 722 723 723

-

724 724 725 725 726 726 727 727

-

728 728 729 729 730 730 731 731

-

732 732 733 733 734 734 735 735

-

736 736 737 737 738 738 739 739

-

740 740 741 741 742 742 743 743

-

744 744 745 745 746 746 747 747

-

748 748 749 749 750 750 751 751

-

752 752 753 753 754 754 755 755

-
- - - -

756 756 757 757 758 758 759 759 760 760 761 761 762 762 763 763 764 764 765 765 766 766 767 767 768 768 769 769 770 770 775 775 776 776 777 777 778 778 779 779 780 780 781 781 782 782 783 783 784 784 785 785 786 786 787 787 788 788 789 789 790 790 791 791 792 792 797 797 798 798 799 799 800 800 801 801 802 802 803 803 804 804 805 805 806 806 807 807 808 808 809 809 810 810 811 811 812 812 813 813 814 814 815 815 816 816 817 817 818 818 819 819 820 820 821 821 822 822 823 823 824 824 825 825 826 826 827 827 828 828 829 829 830 830 831 831 832 832 833 833 834 834 835 835 836 836 837 837 838 838 839 839 840 840 841 841 846 846 847 847 848 848

-
- - - -

771 771 772 772 773 773 774 774

-

793 793 794 794 795 795 796 796

-

842 842 843 843 844 844 845 845

-
- - - -

849 849 850 850 851 851 852 852

-

853 853 854 854 855 855 856 856

-

857 857 858 858 859 859 860 860

-

861 861 862 862 863 863 864 864

-

865 865 866 866 867 867 868 868

-

869 869 870 870 871 871 872 872

-

873 873 874 874 875 875 876 876

-

877 877 878 878 879 879 880 880

-

881 881 882 882 883 883 884 884

-

885 885 886 886 887 887 888 888

-

889 889 890 890 891 891 892 892 893 893 894 894 895 895 896 896 897 897 898 898 899 899 900 900 901 901

-

902 902 903 903 904 904 905 905

-

906 906 907 907 908 908 909 909 910 910 911 911 912 912 913 913 914 914 915 915 916 916 917 917 918 918

-

919 919 920 920 921 921 922 922

-
- - - -

923 923 924 924 925 925 926 926

-

927 927 928 928 929 929 930 930

-

931 931 932 932 933 933 934 934

-

935 935 936 936 937 937 938 938

-

939 939 940 940 941 941 942 942

-
- - - -

958 958 959 958 944 958 945 958 960 958 946 958 947 958 961 958 962 958 948 958 949 958 963 958 950 958 951 958 964 958 965 958 952 958 953 958 966 958 954 958 967 958 968 958 955 958 969 958 970 958 956 958 971 958 957 958 943 958

-
-
- - - CAT3DBagRep - - -
- - - - 0 58.6663 -129.075 0 24.3004 -163.441 0 -58.6663 -129.075 0 -22.225 69.85 35.052 -58.6663 -129.075 35.052 -24.3004 -163.441 35.052 58.6663 -129.075 35.052 15.875 69.85 35.052 -22.225 69.85 35.052 58.6663 -129.075 0 58.6663 -129.075 35.052 15.875 69.85 35.052 -22.225 69.85 35.052 -58.6663 -129.075 0 24.3004 -163.441 35.052 -24.3004 -163.441 0 -58.6663 -129.075 0 -22.225 69.85 35.052 58.6663 -80.4746 0 58.6663 -80.4746 0 15.875 69.85 35.052 24.3004 -163.441 0 -24.3004 -163.441 0 -58.6663 -80.4746 35.052 -58.6663 -80.4746 35.052 -22.225 69.85 0 -22.225 69.85 35.052 15.875 69.85 0 15.875 69.85 215.9 52.1358 -90.8052 215.9 46.7437 -77.7875 215.9 38.1661 -66.6089 215.9 26.9875 -58.0313 215.9 13.9698 -52.6392 215.9 0 -50.8 215.9 -13.9698 -52.6392 215.9 -26.9875 -58.0313 215.9 -38.1661 -66.6089 215.9 -46.7437 -77.7875 215.9 -52.1358 -90.8052 215.9 -53.975 -104.775 215.9 -52.1358 -118.745 215.9 -46.7437 -131.762 215.9 -38.1661 -142.941 215.9 -26.9875 -151.519 215.9 -13.9698 -156.911 215.9 0 -158.75 215.9 13.9698 -156.911 215.9 26.9875 -151.519 215.9 38.1661 -142.941 215.9 46.7437 -131.763 215.9 52.1358 -118.745 215.9 53.975 -104.775 -178.5 52.1358 -118.745 -178.5 53.975 -104.775 215.9 53.975 -104.775 215.9 52.1358 -118.745 -178.5 46.7437 -131.763 -178.5 52.1358 -118.745 215.9 52.1358 -118.745 215.9 46.7437 -131.763 -178.5 38.1661 -142.941 -178.5 46.7437 -131.763 215.9 46.7437 -131.763 215.9 38.1661 -142.941 -178.5 26.9875 -151.519 -178.5 38.1661 -142.941 215.9 38.1661 -142.941 215.9 26.9875 -151.519 -178.5 13.9698 -156.911 -178.5 26.9875 -151.519 215.9 26.9875 -151.519 215.9 13.9698 -156.911 -178.5 0 -158.75 -178.5 13.9698 -156.911 215.9 13.9698 -156.911 215.9 0 -158.75 -178.5 -13.9698 -156.911 -178.5 0 -158.75 215.9 0 -158.75 215.9 -13.9698 -156.911 -178.5 -26.9875 -151.519 -178.5 -13.9698 -156.911 215.9 -13.9698 -156.911 215.9 -26.9875 -151.519 -178.5 -38.1661 -142.941 -178.5 -26.9875 -151.519 215.9 -26.9875 -151.519 215.9 -38.1661 -142.941 -178.5 -46.7437 -131.762 -178.5 -38.1661 -142.941 215.9 -38.1661 -142.941 215.9 -46.7437 -131.762 -178.5 -52.1358 -118.745 -178.5 -46.7437 -131.762 215.9 -46.7437 -131.762 215.9 -52.1358 -118.745 -178.5 -53.975 -104.775 -178.5 -52.1358 -118.745 215.9 -52.1358 -118.745 215.9 -53.975 -104.775 -178.5 -52.1358 -90.8052 -178.5 -53.975 -104.775 215.9 -53.975 -104.775 215.9 -52.1358 -90.8052 -178.5 -46.7437 -77.7875 -178.5 -52.1358 -90.8052 215.9 -52.1358 -90.8052 215.9 -46.7437 -77.7875 -178.5 -38.1661 -66.6089 -178.5 -46.7437 -77.7875 215.9 -46.7437 -77.7875 215.9 -38.1661 -66.6089 -178.5 -26.9875 -58.0313 -178.5 -38.1661 -66.6089 215.9 -38.1661 -66.6089 215.9 -26.9875 -58.0313 -178.5 -13.9698 -52.6392 -178.5 -26.9875 -58.0313 215.9 -26.9875 -58.0313 215.9 -13.9698 -52.6392 -178.5 0 -50.8 -178.5 -13.9698 -52.6392 215.9 -13.9698 -52.6392 215.9 0 -50.8 -178.5 13.9698 -52.6392 -178.5 0 -50.8 215.9 0 -50.8 215.9 13.9698 -52.6392 -178.5 26.9875 -58.0313 -178.5 13.9698 -52.6392 215.9 13.9698 -52.6392 215.9 26.9875 -58.0313 -178.5 38.1661 -66.6089 -178.5 26.9875 -58.0313 215.9 26.9875 -58.0313 215.9 38.1661 -66.6089 -178.5 46.7437 -77.7875 -178.5 38.1661 -66.6089 215.9 38.1661 -66.6089 215.9 46.7437 -77.7875 -178.5 52.1358 -90.8052 -178.5 46.7437 -77.7875 215.9 46.7437 -77.7875 215.9 52.1358 -90.8052 -178.5 46.7437 -77.7875 -178.5 52.1358 -90.8052 -178.5 53.975 -104.775 -178.5 52.1358 -118.745 -178.5 46.7437 -131.763 -178.5 38.1661 -142.941 -178.5 26.9875 -151.519 -178.5 13.9698 -156.911 -178.5 0 -158.75 -178.5 -13.9698 -156.911 -178.5 -26.9875 -151.519 -178.5 -38.1661 -142.941 -178.5 -46.7437 -131.762 -178.5 -52.1358 -118.745 -178.5 -53.975 -104.775 -178.5 -52.1358 -90.8052 -178.5 -46.7437 -77.7875 -178.5 -38.1661 -66.6089 -178.5 -26.9875 -58.0313 -178.5 -13.9698 -52.6392 -178.5 0 -50.8 -178.5 13.9698 -52.6392 -178.5 26.9875 -58.0313 -178.5 38.1661 -66.6089 -178.5 53.975 -104.775 -178.5 52.1358 -90.8052 215.9 52.1358 -90.8052 215.9 53.975 -104.775 -178.5 -30 -164.775 -178.5 -60 -134.775 -190.5 -60 -134.775 -190.5 -30 -164.775 -178.5 30 -164.775 -178.5 -30 -164.775 -190.5 -30 -164.775 -190.5 30 -164.775 -178.5 60 -134.775 -178.5 30 -164.775 -190.5 30 -164.775 -190.5 60 -134.775 -178.5 60 -74.775 -178.5 60 -134.775 -190.5 60 -134.775 -190.5 60 -74.775 -178.5 30 -44.775 -178.5 60 -74.775 -190.5 60 -74.775 -190.5 30 -44.775 -178.5 -30 -44.775 -178.5 30 -44.775 -190.5 30 -44.775 -190.5 -30 -44.775 -190.5 -30 -44.775 -190.5 30 -44.775 -190.5 60 -74.775 -190.5 60 -134.775 -190.5 30 -164.775 -190.5 -30 -164.775 -190.5 -60 -134.775 -190.5 -60 -74.775 -178.5 -60 -134.775 -178.5 -60 -74.775 -190.5 -60 -74.775 -190.5 -60 -134.775 -178.5 -30 -44.775 -178.5 -60 -74.775 -178.5 -60 -134.775 -178.5 -30 -164.775 -178.5 30 -164.775 -178.5 60 -134.775 -178.5 60 -74.775 -178.5 30 -44.775 -178.5 -60 -74.775 -178.5 -30 -44.775 -190.5 -30 -44.775 -190.5 -60 -74.775 215.9 30 -164.775 215.9 60 -134.775 227.9 60 -134.775 227.9 30 -164.775 215.9 -30 -164.775 215.9 30 -164.775 227.9 30 -164.775 227.9 -30 -164.775 215.9 -60 -134.775 215.9 -30 -164.775 227.9 -30 -164.775 227.9 -60 -134.775 215.9 -60 -74.775 215.9 -60 -134.775 227.9 -60 -134.775 227.9 -60 -74.775 215.9 -30 -44.775 215.9 -60 -74.775 227.9 -60 -74.775 227.9 -30 -44.775 215.9 30 -44.775 215.9 -30 -44.775 227.9 -30 -44.775 227.9 30 -44.775 227.9 30 -44.775 227.9 -30 -44.775 227.9 -60 -74.775 227.9 -60 -134.775 227.9 -30 -164.775 227.9 30 -164.775 227.9 60 -134.775 227.9 60 -74.775 215.9 60 -134.775 215.9 60 -74.775 227.9 60 -74.775 227.9 60 -134.775 215.9 30 -44.775 215.9 60 -74.775 215.9 60 -134.775 215.9 30 -164.775 215.9 -30 -164.775 215.9 -60 -134.775 215.9 -60 -74.775 215.9 -30 -44.775 215.9 60 -74.775 215.9 30 -44.775 227.9 30 -44.775 227.9 60 -74.775 - - - - - - - - - - -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.961792 0.273782 0 0 1 0 -0.923884 -0.382672 0 0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.923884 -0.382672 0 -0.971857 0.235572 0 0.990406 0.138188 0 0.990406 0.138188 0 0.961792 0.273782 0 0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.992939 0.118625 0 -0.992939 0.118625 0 -0.971857 0.235572 0 0 1 0 0 1 0 0 1 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.965932 -0.258797 0 1 0 0 1 0 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0 -1 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0 -1 0 -0.258797 -0.965932 0 0 -1 0 0 -1 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.70713 -0.707083 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.70713 -0.707083 0 -0.866034 -0.499985 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -1 0 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -1 0 0 -0.965932 0.258797 0 -1 0 0 -1 0 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.258797 0.965932 0 0 1 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0 1 0 0.258797 0.965932 0 0 1 0 0 1 0 0.258797 0.965932 0 0.499985 0.866034 0 0.258797 0.965932 0 0.258797 0.965932 0 0.499985 0.866034 0 0.70713 0.707083 0 0.499985 0.866034 0 0.499985 0.866034 0 0.70713 0.707083 0 0.866034 0.499985 0 0.70713 0.707083 0 0.70713 0.707083 0 0.866034 0.499985 0 0.965932 0.258797 0 0.866034 0.499985 0 0.866034 0.499985 0 0.965932 0.258797 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 0.965932 0.258797 0 0.965932 0.258797 0 1 0 0 -0.382672 -0.923884 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.382672 -0.923884 0 0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 0.382672 -0.923884 0 0.923884 -0.382672 0 0.382672 -0.923884 0 0.382672 -0.923884 0 0.923884 -0.382672 0 0.923884 0.382672 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.923884 0.382672 0 0.382672 0.923884 0 0.923884 0.382672 0 0.923884 0.382672 0 0.382672 0.923884 0 -0.382672 0.923884 0 0.382672 0.923884 0 0.382672 0.923884 0 -0.382672 0.923884 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -0.923884 -0.382672 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.923884 -0.382672 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -0.923884 0.382672 0 -0.382672 0.923884 0 -0.382672 0.923884 0 -0.923884 0.382672 0 0.382672 -0.923884 0 0.923884 -0.382672 0 0.923884 -0.382672 0 0.382672 -0.923884 0 -0.382672 -0.923884 0 0.382672 -0.923884 0 0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.923884 -0.382672 0 -0.382672 -0.923884 0 -0.382672 -0.923884 0 -0.923884 -0.382672 0 -0.923884 0.382672 0 -0.923884 -0.382672 0 -0.923884 -0.382672 0 -0.923884 0.382672 0 -0.382672 0.923884 0 -0.923884 0.382672 0 -0.923884 0.382672 0 -0.382672 0.923884 0 0.382672 0.923884 0 -0.382672 0.923884 0 -0.382672 0.923884 0 0.382672 0.923884 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.923884 -0.382672 0 0.923884 0.382672 0 0.923884 0.382672 0 0.923884 -0.382672 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.923884 0.382672 0 0.382672 0.923884 0 0.382672 0.923884 0 0.923884 0.382672 - - - - - - - - - - - - - - -

19 29 10 29 14 29 22 29 16 29 23 29

-

20 29 19 29 23 29 26 29

-
- - - -

24 30 4 30 5 30 21 30 6 30 18 30

-

7 30 8 30 24 30 18 30

-
- - - -

11 11 18 18 19 19 20 20

-

10 10 19 19 18 18 9 9

-

14 14 10 10 9 9 21 21

-

22 22 14 14 21 21 15 15

-

16 16 22 22 15 15 13 13

-

23 23 16 16 13 13 24 24

-

17 17 23 23 24 24 25 25

-

26 26 12 12 27 27 28 28

-
- - - -

29 31 30 32 31 33 32 34 33 35 34 36 35 37 36 38 37 39 38 40 39 41 40 42 41 43 42 44 43 45 44 46 45 47 46 48 47 49 48 50 49 51 50 52 51 53 52 54

-

53 55 54 56 55 57 56 58

-

57 59 58 60 59 61 60 62

-

61 63 62 64 63 65 64 66

-

65 67 66 68 67 69 68 70

-

69 71 70 72 71 73 72 74

-

73 75 74 76 75 77 76 78

-

77 79 78 80 79 81 80 82

-

81 83 82 84 83 85 84 86

-

85 87 86 88 87 89 88 90

-

89 91 90 92 91 93 92 94

-

93 95 94 96 95 97 96 98

-

97 99 98 100 99 101 100 102

-

101 103 102 104 103 105 104 106

-

105 107 106 108 107 109 108 110

-

109 111 110 112 111 113 112 114

-

113 115 114 116 115 117 116 118

-

117 119 118 120 119 121 120 122

-

121 123 122 124 123 125 124 126

-

125 127 126 128 127 129 128 130

-

129 131 130 132 131 133 132 134

-

133 135 134 136 135 137 136 138

-

137 139 138 140 139 141 140 142

-

141 143 142 144 143 145 144 146

-

145 147 146 148 147 149 148 150 149 151 150 152 151 153 152 154 153 155 154 156 155 157 156 158 157 159 158 160 159 161 160 162 161 163 162 164 163 165 164 166 165 167 166 168 167 169 168 170

-

169 171 170 172 171 173 172 174

-
- - - -

173 175 174 176 175 177 176 178

-

177 179 178 180 179 181 180 182

-

181 183 182 184 183 185 184 186

-

185 187 186 188 187 189 188 190

-

189 191 190 192 191 193 192 194

-

193 195 194 196 195 197 196 198

-

197 199 198 200 199 201 200 202 201 203 202 204 203 205 204 206

-

205 207 206 208 207 209 208 210

-

209 211 210 212 211 213 212 214 213 215 214 216 215 217 216 218

-

217 219 218 220 219 221 220 222

-
- - - -

221 223 222 224 223 225 224 226

-

225 227 226 228 227 229 228 230

-

229 231 230 232 231 233 232 234

-

233 235 234 236 235 237 236 238

-

237 239 238 240 239 241 240 242

-

241 243 242 244 243 245 244 246

-

245 247 246 248 247 249 248 250 249 251 250 252 251 253 252 254

-

253 255 254 256 255 257 256 258

-

257 259 258 260 259 261 260 262 261 263 262 264 263 265 264 266

-

265 267 266 268 267 269 268 270

-
-
- - - CAT3DBagRep - - -
- - - - -12.7 16.9288 4.53606 -12.7 15.178 8.763 171.45 15.178 8.763 171.45 16.9288 4.53606 -12.7 15.178 8.763 -12.7 12.3928 12.3928 171.45 12.3928 12.3928 171.45 15.178 8.763 -12.7 12.3928 12.3928 -12.7 8.763 15.178 171.45 8.763 15.178 171.45 12.3928 12.3928 -12.7 8.763 15.178 -12.7 4.53606 16.9288 171.45 4.53606 16.9288 171.45 8.763 15.178 -12.7 4.53606 16.9288 -12.7 0 17.526 171.45 0 17.526 171.45 4.53606 16.9288 -12.7 0 17.526 -12.7 -4.53606 16.9288 171.45 -4.53606 16.9288 171.45 0 17.526 -12.7 -4.53606 16.9288 -12.7 -8.763 15.178 171.45 -8.763 15.178 171.45 -4.53606 16.9288 -12.7 -8.763 15.178 -12.7 -12.3928 12.3928 171.45 -12.3928 12.3928 171.45 -8.763 15.178 -12.7 -12.3928 12.3928 -12.7 -15.178 8.763 171.45 -15.178 8.763 171.45 -12.3928 12.3928 -12.7 -15.178 8.763 -12.7 -16.9288 4.53606 171.45 -16.9288 4.53606 171.45 -15.178 8.763 -12.7 -16.9288 4.53606 -12.7 -17.526 0 171.45 -17.526 0 171.45 -16.9288 4.53606 -12.7 -17.526 0 -12.7 -16.9288 -4.53606 171.45 -16.9288 -4.53606 171.45 -17.526 0 -12.7 -16.9288 -4.53606 -12.7 -15.178 -8.763 171.45 -15.178 -8.763 171.45 -16.9288 -4.53606 -12.7 -15.178 -8.763 -12.7 -12.3928 -12.3928 171.45 -12.3928 -12.3928 171.45 -15.178 -8.763 -12.7 16.9288 -4.53606 -12.7 17.526 0 171.45 17.526 0 171.45 16.9288 -4.53606 -12.7 15.178 -8.763 -12.7 16.9288 -4.53606 171.45 16.9288 -4.53606 171.45 15.178 -8.763 -12.7 12.3928 -12.3928 -12.7 15.178 -8.763 171.45 15.178 -8.763 171.45 12.3928 -12.3928 -12.7 8.763 -15.178 -12.7 12.3928 -12.3928 171.45 12.3928 -12.3928 171.45 8.763 -15.178 -12.7 4.53606 -16.9288 -12.7 8.763 -15.178 171.45 8.763 -15.178 171.45 4.53606 -16.9288 -12.7 0 -17.526 -12.7 4.53606 -16.9288 171.45 4.53606 -16.9288 171.45 0 -17.526 -12.7 -4.53606 -16.9288 -12.7 0 -17.526 171.45 0 -17.526 171.45 -4.53606 -16.9288 -12.7 -8.763 -15.178 -12.7 -4.53606 -16.9288 171.45 -4.53606 -16.9288 171.45 -8.763 -15.178 -12.7 -12.3928 -12.3928 -12.7 -8.763 -15.178 171.45 -8.763 -15.178 171.45 -12.3928 -12.3928 -12.7 -8.763 -15.178 -12.7 -12.3928 -12.3928 -12.7 -15.178 -8.763 -12.7 -16.9288 -4.53606 -12.7 -17.526 0 -12.7 -16.9288 4.53606 -12.7 -15.178 8.763 -12.7 -12.3928 12.3928 -12.7 -8.763 15.178 -12.7 -4.53606 16.9288 -12.7 0 17.526 -12.7 4.53606 16.9288 -12.7 8.763 15.178 -12.7 12.3928 12.3928 -12.7 15.178 8.763 -12.7 16.9288 4.53606 -12.7 17.526 0 -12.7 16.9288 -4.53606 -12.7 15.178 -8.763 -12.7 12.3928 -12.3928 -12.7 8.763 -15.178 -12.7 4.53606 -16.9288 -12.7 0 -17.526 -12.7 -4.53606 -16.9288 -12.7 17.526 0 -12.7 16.9288 4.53606 171.45 16.9288 4.53606 171.45 17.526 0 - - - - - - - - - - 0 0.965932 0.258797 0 0.866034 0.499985 0 0.866034 0.499985 0 0.965932 0.258797 0 0.866034 0.499985 0 0.707083 0.70713 0 0.707083 0.70713 0 0.866034 0.499985 0 0.707083 0.70713 0 0.499985 0.866034 0 0.499985 0.866034 0 0.707083 0.70713 0 0.499985 0.866034 0 0.258797 0.965932 0 0.258797 0.965932 0 0.499985 0.866034 0 0.258797 0.965932 0 0 1 0 0 1 0 0.258797 0.965932 0 0 1 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0 1 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -1 0 0 -1 0 0 -0.965932 0.258797 0 -1 0 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -1 0 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 0.965932 -0.258797 0 1 0 0 1 0 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0 -1 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0 -1 0 -0.258797 -0.965932 0 0 -1 0 0 -1 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.707083 -0.70713 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.707083 -0.70713 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 0.965932 0.258797 0 0.965932 0.258797 0 1 0 - - - - - - - - - - - - - - -

0 0 1 1 2 2 3 3

-

4 4 5 5 6 6 7 7

-

8 8 9 9 10 10 11 11

-

12 12 13 13 14 14 15 15

-

16 16 17 17 18 18 19 19

-

20 20 21 21 22 22 23 23

-

24 24 25 25 26 26 27 27

-

28 28 29 29 30 30 31 31

-

32 32 33 33 34 34 35 35

-

36 36 37 37 38 38 39 39

-

40 40 41 41 42 42 43 43

-

44 44 45 45 46 46 47 47

-

48 48 49 49 50 50 51 51

-

52 52 53 53 54 54 55 55

-

56 56 57 57 58 58 59 59

-

60 60 61 61 62 62 63 63

-

64 64 65 65 66 66 67 67

-

68 68 69 69 70 70 71 71

-

72 72 73 73 74 74 75 75

-

76 76 77 77 78 78 79 79

-

80 80 81 81 82 82 83 83

-

84 84 85 85 86 86 87 87

-

88 88 89 89 90 90 91 91

-

92 92 93 93 94 94 95 95 96 96 97 97 98 98 99 99 100 100 101 101 102 102 103 103 104 104 105 105 106 106 107 107 108 108 109 109 110 110 111 111 112 112 113 113 114 114 115 115

-

116 116 117 117 118 118 119 119

-
-
- - - CAT3DBagRep - - -
- - - - -192.532 15.178 -8.763 -192.532 16.9288 -4.53606 -186.182 16.9288 -4.53606 -186.182 15.178 -8.763 -192.532 12.3928 -12.3928 -192.532 15.178 -8.763 -186.182 15.178 -8.763 -186.182 12.3928 -12.3928 -192.532 8.763 -15.178 -192.532 12.3928 -12.3928 -186.182 12.3928 -12.3928 -186.182 8.763 -15.178 -192.532 4.53606 -16.9288 -192.532 8.763 -15.178 -186.182 8.763 -15.178 -186.182 4.53606 -16.9288 -192.532 0 -17.526 -192.532 4.53606 -16.9288 -186.182 4.53606 -16.9288 -186.182 0 -17.526 -192.532 -4.53606 -16.9288 -192.532 0 -17.526 -186.182 0 -17.526 -186.182 -4.53606 -16.9288 -192.532 -8.763 -15.178 -192.532 -4.53606 -16.9288 -186.182 -4.53606 -16.9288 -186.182 -8.763 -15.178 -192.532 -12.3928 -12.3928 -192.532 -8.763 -15.178 -186.182 -8.763 -15.178 -186.182 -12.3928 -12.3928 -192.532 -15.178 -8.763 -192.532 -12.3928 -12.3928 -186.182 -12.3928 -12.3928 -186.182 -15.178 -8.763 -192.532 -16.9288 -4.53606 -192.532 -15.178 -8.763 -186.182 -15.178 -8.763 -186.182 -16.9288 -4.53606 -192.532 -17.526 0 -192.532 -16.9288 -4.53606 -186.182 -16.9288 -4.53606 -186.182 -17.526 0 -192.532 -16.9288 4.53606 -192.532 -17.526 0 -186.182 -17.526 0 -186.182 -16.9288 4.53606 -192.532 -15.178 8.763 -192.532 -16.9288 4.53606 -186.182 -16.9288 4.53606 -186.182 -15.178 8.763 -192.532 -12.3928 12.3928 -192.532 -15.178 8.763 -186.182 -15.178 8.763 -186.182 -12.3928 12.3928 -192.532 -8.763 15.178 -192.532 -12.3928 12.3928 -186.182 -12.3928 12.3928 -186.182 -8.763 15.178 -192.532 -4.53606 16.9288 -192.532 -8.763 15.178 -186.182 -8.763 15.178 -186.182 -4.53606 16.9288 -192.532 0 17.526 -192.532 -4.53606 16.9288 -186.182 -4.53606 16.9288 -186.182 0 17.526 -192.532 4.53606 16.9288 -192.532 0 17.526 -186.182 0 17.526 -186.182 4.53606 16.9288 -192.532 8.763 15.178 -192.532 4.53606 16.9288 -186.182 4.53606 16.9288 -186.182 8.763 15.178 -192.532 12.3928 12.3928 -192.532 8.763 15.178 -186.182 8.763 15.178 -186.182 12.3928 12.3928 -192.532 15.178 8.763 -192.532 12.3928 12.3928 -186.182 12.3928 12.3928 -186.182 15.178 8.763 -192.532 16.9288 4.53606 -192.532 15.178 8.763 -186.182 15.178 8.763 -186.182 16.9288 4.53606 -186.182 16.9288 4.53606 -186.182 15.178 8.763 -186.182 12.3928 12.3928 -186.182 8.763 15.178 -186.182 4.53606 16.9288 -186.182 0 17.526 -186.182 -4.53606 16.9288 -186.182 -8.763 15.178 -186.182 -12.3928 12.3928 -186.182 -15.178 8.763 -186.182 -16.9288 4.53606 -186.182 -17.526 0 -186.182 -16.9288 -4.53606 -186.182 -15.178 -8.763 -186.182 -12.3928 -12.3928 -186.182 -8.763 -15.178 -186.182 -4.53606 -16.9288 -186.182 0 -17.526 -186.182 4.53606 -16.9288 -186.182 8.763 -15.178 -186.182 12.3928 -12.3928 -186.182 15.178 -8.763 -186.182 16.9288 -4.53606 -186.182 17.526 0 -192.532 16.9288 -4.53606 -192.532 17.526 0 -186.182 17.526 0 -186.182 16.9288 -4.53606 -192.532 17.526 0 -192.532 16.9288 -4.53606 -192.532 15.178 -8.763 -192.532 12.3928 -12.3928 -192.532 8.763 -15.178 -192.532 4.53606 -16.9288 -192.532 0 -17.526 -192.532 -4.53606 -16.9288 -192.532 -8.763 -15.178 -192.532 -12.3928 -12.3928 -192.532 -15.178 -8.763 -192.532 -16.9288 -4.53606 -192.532 -17.526 0 -192.532 -16.9288 4.53606 -192.532 -15.178 8.763 -192.532 -12.3928 12.3928 -192.532 -8.763 15.178 -192.532 -4.53606 16.9288 -192.532 0 17.526 -192.532 4.53606 16.9288 -192.532 8.763 15.178 -192.532 12.3928 12.3928 -192.532 15.178 8.763 -192.532 16.9288 4.53606 -192.532 17.526 0 -192.532 16.9288 4.53606 -186.182 16.9288 4.53606 -186.182 17.526 0 -40.8191 33.3375 131.911 -41.148 33.3375 129.413 -41.148 -33.3375 129.413 -40.8191 -33.3375 131.911 -39.8549 33.3375 134.239 -40.8191 33.3375 131.911 -40.8191 -33.3375 131.911 -39.8549 -33.3375 134.239 -38.321 33.3375 136.238 -39.8549 33.3375 134.239 -39.8549 -33.3375 134.239 -38.321 -33.3375 136.238 -36.322 33.3375 137.772 -38.321 33.3375 136.238 -38.321 -33.3375 136.238 -36.322 -33.3375 137.772 -33.9941 33.3375 138.736 -36.322 33.3375 137.772 -36.322 -33.3375 137.772 -33.9941 -33.3375 138.736 -31.496 33.3375 139.065 -33.9941 33.3375 138.736 -33.9941 -33.3375 138.736 -31.496 -33.3375 139.065 -28.9979 33.3375 138.736 -31.496 33.3375 139.065 -31.496 -33.3375 139.065 -28.9979 -33.3375 138.736 -26.67 33.3375 137.772 -28.9979 33.3375 138.736 -28.9979 -33.3375 138.736 -26.67 -33.3375 137.772 -24.671 33.3375 136.238 -26.67 33.3375 137.772 -26.67 -33.3375 137.772 -24.671 -33.3375 136.238 -23.1371 33.3375 134.239 -24.671 33.3375 136.238 -24.671 -33.3375 136.238 -23.1371 -33.3375 134.239 -22.1729 33.3375 131.911 -23.1371 33.3375 134.239 -23.1371 -33.3375 134.239 -22.1729 -33.3375 131.911 -21.844 33.3375 129.413 -22.1729 33.3375 131.911 -22.1729 -33.3375 131.911 -21.844 -33.3375 129.413 -41.148 -33.3375 129.413 -41.148 -33.3375 104.775 -21.844 -33.3375 104.775 -21.844 -33.3375 129.413 -22.1729 -33.3375 131.911 -23.1371 -33.3375 134.239 -24.671 -33.3375 136.238 -26.67 -33.3375 137.772 -28.9979 -33.3375 138.736 -31.496 -33.3375 139.065 -33.9941 -33.3375 138.736 -36.322 -33.3375 137.772 -38.321 -33.3375 136.238 -39.8549 -33.3375 134.239 -40.8191 -33.3375 131.911 -41.148 33.3375 129.413 -41.148 33.3375 104.775 -41.148 -33.3375 104.775 -41.148 -33.3375 129.413 -21.844 33.3375 129.413 -21.844 33.3375 104.775 -41.148 33.3375 104.775 -41.148 33.3375 129.413 -40.8191 33.3375 131.911 -39.8549 33.3375 134.239 -38.321 33.3375 136.238 -36.322 33.3375 137.772 -33.9941 33.3375 138.736 -31.496 33.3375 139.065 -28.9979 33.3375 138.736 -26.67 33.3375 137.772 -24.671 33.3375 136.238 -23.1371 33.3375 134.239 -22.1729 33.3375 131.911 -21.844 33.3375 104.775 -21.844 33.3375 129.413 -21.844 -33.3375 129.413 -21.844 -33.3375 104.775 -28.702 -23.8125 12.7 -28.3731 -23.8125 15.1981 -28.3731 23.8125 15.1981 -28.702 23.8125 12.7 -28.3731 -23.8125 15.1981 -27.4089 -23.8125 17.526 -27.4089 23.8125 17.526 -28.3731 23.8125 15.1981 -27.4089 -23.8125 17.526 -25.875 -23.8125 19.525 -25.875 23.8125 19.525 -27.4089 23.8125 17.526 -25.875 -23.8125 19.525 -23.876 -23.8125 21.0589 -23.876 23.8125 21.0589 -25.875 23.8125 19.525 -23.876 -23.8125 21.0589 -21.5481 -23.8125 22.0231 -21.5481 23.8125 22.0231 -23.876 23.8125 21.0589 -21.5481 -23.8125 22.0231 -19.05 -23.8125 22.352 -19.05 23.8125 22.352 -21.5481 23.8125 22.0231 -19.05 -23.8125 22.352 -16.5519 -23.8125 22.0231 -16.5519 23.8125 22.0231 -19.05 23.8125 22.352 -16.5519 -23.8125 22.0231 -14.224 -23.8125 21.0589 -14.224 23.8125 21.0589 -16.5519 23.8125 22.0231 -14.224 -23.8125 21.0589 -12.225 -23.8125 19.525 -12.225 23.8125 19.525 -14.224 23.8125 21.0589 -12.225 -23.8125 19.525 -10.6911 -23.8125 17.526 -10.6911 23.8125 17.526 -12.225 23.8125 19.525 -10.6911 -23.8125 17.526 -9.72688 -23.8125 15.1981 -9.72688 23.8125 15.1981 -10.6911 23.8125 17.526 -9.72688 -23.8125 15.1981 -9.39801 -23.8125 12.7 -9.39801 23.8125 12.7 -9.72688 23.8125 15.1981 -28.702 -23.8125 0 -9.39801 -23.8125 0 -9.39801 -23.8125 12.7 -9.72688 -23.8125 15.1981 -10.6911 -23.8125 17.526 -12.225 -23.8125 19.525 -14.224 -23.8125 21.0589 -16.5519 -23.8125 22.0231 -19.05 -23.8125 22.352 -21.5481 -23.8125 22.0231 -23.876 -23.8125 21.0589 -25.875 -23.8125 19.525 -27.4089 -23.8125 17.526 -28.3731 -23.8125 15.1981 -28.702 -23.8125 12.7 -28.702 -23.8125 0 -28.702 -23.8125 12.7 -28.702 23.8125 12.7 -28.702 23.8125 0 -9.39801 23.8125 0 -28.702 23.8125 0 -28.702 23.8125 12.7 -28.3731 23.8125 15.1981 -27.4089 23.8125 17.526 -25.875 23.8125 19.525 -23.876 23.8125 21.0589 -21.5481 23.8125 22.0231 -19.05 23.8125 22.352 -16.5519 23.8125 22.0231 -14.224 23.8125 21.0589 -12.225 23.8125 19.525 -10.6911 23.8125 17.526 -9.72688 23.8125 15.1981 -9.39801 23.8125 12.7 -9.39801 23.8125 0 -9.39801 23.8125 12.7 -9.39801 -23.8125 12.7 -9.39801 -23.8125 0 -44.196 -12.7 -23.8125 -105.156 -12.7 -23.8125 -108.443 -12.2673 -23.8125 -111.506 -10.9985 -23.8125 -114.136 -8.98026 -23.8125 -116.155 -6.35 -23.8125 -117.423 -3.287 -23.8125 -117.856 0 -23.8125 -117.423 3.287 -23.8125 -116.155 6.35 -23.8125 -114.136 8.98026 -23.8125 -111.506 10.9985 -23.8125 -108.443 12.2673 -23.8125 -105.156 12.7 -23.8125 -44.196 12.7 -23.8125 -105.156 12.7 0 -44.196 12.7 0 -44.196 12.7 -23.8125 -105.156 12.7 -23.8125 -108.443 12.2673 0 -105.156 12.7 0 -105.156 12.7 -23.8125 -108.443 12.2673 -23.8125 -111.506 10.9985 0 -108.443 12.2673 0 -108.443 12.2673 -23.8125 -111.506 10.9985 -23.8125 -114.136 8.98026 0 -111.506 10.9985 0 -111.506 10.9985 -23.8125 -114.136 8.98026 -23.8125 -116.155 6.35 0 -114.136 8.98026 0 -114.136 8.98026 -23.8125 -116.155 6.35 -23.8125 -117.423 3.287 0 -116.155 6.35 0 -116.155 6.35 -23.8125 -117.423 3.287 -23.8125 -117.856 0 0 -117.423 3.287 0 -117.423 3.287 -23.8125 -117.856 0 -23.8125 -117.423 -3.287 0 -117.856 0 0 -117.856 0 -23.8125 -117.423 -3.287 -23.8125 -116.155 -6.35 0 -117.423 -3.287 0 -117.423 -3.287 -23.8125 -116.155 -6.35 -23.8125 -114.136 -8.98026 0 -116.155 -6.35 0 -116.155 -6.35 -23.8125 -114.136 -8.98026 -23.8125 -111.506 -10.9985 0 -114.136 -8.98026 0 -114.136 -8.98026 -23.8125 -111.506 -10.9985 -23.8125 -108.443 -12.2673 0 -111.506 -10.9985 0 -111.506 -10.9985 -23.8125 -108.443 -12.2673 -23.8125 -105.156 -12.7 0 -108.443 -12.2673 0 -108.443 -12.2673 -23.8125 -105.156 -12.7 -23.8125 -44.196 -12.7 0 -105.156 -12.7 0 -105.156 -12.7 -23.8125 -44.196 -12.7 -23.8125 -44.196 12.7 0 -44.196 -12.7 0 -44.196 -12.7 -23.8125 -44.196 12.7 -23.8125 -105.156 23.8125 -12.7 -44.196 23.8125 -12.7 -44.196 -23.8125 -12.7 -105.156 -23.8125 -12.7 -108.443 23.8125 -12.2673 -105.156 23.8125 -12.7 -105.156 -23.8125 -12.7 -108.443 -23.8125 -12.2673 -111.506 23.8125 -10.9985 -108.443 23.8125 -12.2673 -108.443 -23.8125 -12.2673 -111.506 -23.8125 -10.9985 -114.136 23.8125 -8.98026 -111.506 23.8125 -10.9985 -111.506 -23.8125 -10.9985 -114.136 -23.8125 -8.98026 -116.155 23.8125 -6.35 -114.136 23.8125 -8.98026 -114.136 -23.8125 -8.98026 -116.155 -23.8125 -6.35 -117.423 23.8125 -3.287 -116.155 23.8125 -6.35 -116.155 -23.8125 -6.35 -117.423 -23.8125 -3.287 -117.856 23.8125 0 -117.423 23.8125 -3.287 -117.423 -23.8125 -3.287 -117.856 -23.8125 0 -117.423 23.8125 3.287 -117.856 23.8125 0 -117.856 -23.8125 0 -117.423 -23.8125 3.287 -116.155 23.8125 6.35 -117.423 23.8125 3.287 -117.423 -23.8125 3.287 -116.155 -23.8125 6.35 -114.136 23.8125 8.98026 -116.155 23.8125 6.35 -116.155 -23.8125 6.35 -114.136 -23.8125 8.98026 -111.506 23.8125 10.9985 -114.136 23.8125 8.98026 -114.136 -23.8125 8.98026 -111.506 -23.8125 10.9985 -108.443 23.8125 12.2673 -111.506 23.8125 10.9985 -111.506 -23.8125 10.9985 -108.443 -23.8125 12.2673 -105.156 23.8125 12.7 -108.443 23.8125 12.2673 -108.443 -23.8125 12.2673 -105.156 -23.8125 12.7 -44.196 -23.8125 12.7 -105.156 -23.8125 12.7 -108.443 -23.8125 12.2673 -111.506 -23.8125 10.9985 -114.136 -23.8125 8.98026 -116.155 -23.8125 6.35 -117.423 -23.8125 3.287 -117.856 -23.8125 0 -117.423 -23.8125 -3.287 -116.155 -23.8125 -6.35 -114.136 -23.8125 -8.98026 -111.506 -23.8125 -10.9985 -108.443 -23.8125 -12.2673 -105.156 -23.8125 -12.7 -44.196 -23.8125 -12.7 -44.196 23.8125 12.7 -44.196 -23.8125 12.7 -44.196 -23.8125 -12.7 -44.196 23.8125 -12.7 -105.156 23.8125 12.7 -44.196 23.8125 12.7 -44.196 23.8125 -12.7 -105.156 23.8125 -12.7 -108.443 23.8125 -12.2673 -111.506 23.8125 -10.9985 -114.136 23.8125 -8.98026 -116.155 23.8125 -6.35 -117.423 23.8125 -3.287 -117.856 23.8125 0 -117.423 23.8125 3.287 -116.155 23.8125 6.35 -114.136 23.8125 8.98026 -111.506 23.8125 10.9985 -108.443 23.8125 12.2673 -44.196 23.8125 12.7 -105.156 23.8125 12.7 -105.156 -23.8125 12.7 -44.196 -23.8125 12.7 -38.1 19.05 0 -3.048 19.05 0 -3.048 19.05 -28.575 -38.1 19.05 -28.575 -38.1 -23.876 0 -38.1 19.05 0 -38.1 19.05 -28.575 -38.1 -23.876 -28.575 -3.048 -23.876 0 -38.1 -23.876 0 -38.1 -23.876 -28.575 -3.048 -23.876 -28.575 -3.048 19.05 0 -3.048 -23.876 0 -3.048 -23.876 -28.575 -3.048 19.05 -28.575 -3.048 19.05 -28.575 -3.048 -23.876 -28.575 -38.1 -23.876 -28.575 -38.1 19.05 -28.575 0 16.9288 4.53606 0 15.178 8.763 0 12.3928 12.3928 0 8.763 15.178 0 4.53606 16.9288 0 0 17.526 0 -4.53606 16.9288 0 -8.763 15.178 0 -12.3928 12.3928 0 -15.178 8.763 0 -16.9288 4.53606 0 -17.526 0 0 -16.9288 -4.53606 0 -15.178 -8.763 0 -12.3928 -12.3928 0 -8.763 -15.178 0 -4.53606 -16.9288 0 0 -17.526 0 4.53606 -16.9288 0 8.763 -15.178 0 12.3928 -12.3928 0 15.178 -8.763 0 16.9288 -4.53606 0 17.526 0 -3.048 16.9288 -4.53606 -3.048 17.526 0 0 17.526 0 0 16.9288 -4.53606 -3.048 15.178 -8.763 -3.048 16.9288 -4.53606 0 16.9288 -4.53606 0 15.178 -8.763 -3.048 12.3928 -12.3928 -3.048 15.178 -8.763 0 15.178 -8.763 0 12.3928 -12.3928 -3.048 8.763 -15.178 -3.048 12.3928 -12.3928 0 12.3928 -12.3928 0 8.763 -15.178 -3.048 4.53606 -16.9288 -3.048 8.763 -15.178 0 8.763 -15.178 0 4.53606 -16.9288 -3.048 0 -17.526 -3.048 4.53606 -16.9288 0 4.53606 -16.9288 0 0 -17.526 -3.048 -4.53606 -16.9288 -3.048 0 -17.526 0 0 -17.526 0 -4.53606 -16.9288 -3.048 -8.763 -15.178 -3.048 -4.53606 -16.9288 0 -4.53606 -16.9288 0 -8.763 -15.178 -3.048 -12.3928 -12.3928 -3.048 -8.763 -15.178 0 -8.763 -15.178 0 -12.3928 -12.3928 -3.048 -15.178 -8.763 -3.048 -12.3928 -12.3928 0 -12.3928 -12.3928 0 -15.178 -8.763 -3.048 -16.9288 -4.53606 -3.048 -15.178 -8.763 0 -15.178 -8.763 0 -16.9288 -4.53606 -3.048 -17.526 0 -3.048 -16.9288 -4.53606 0 -16.9288 -4.53606 0 -17.526 0 -3.048 -16.9288 4.53606 -3.048 -17.526 0 0 -17.526 0 0 -16.9288 4.53606 -3.048 -15.178 8.763 -3.048 -16.9288 4.53606 0 -16.9288 4.53606 0 -15.178 8.763 -3.048 -12.3928 12.3928 -3.048 -15.178 8.763 0 -15.178 8.763 0 -12.3928 12.3928 -3.048 -8.763 15.178 -3.048 -12.3928 12.3928 0 -12.3928 12.3928 0 -8.763 15.178 -3.048 -4.53606 16.9288 -3.048 -8.763 15.178 0 -8.763 15.178 0 -4.53606 16.9288 -3.048 0 17.526 -3.048 -4.53606 16.9288 0 -4.53606 16.9288 0 0 17.526 -3.048 4.53606 16.9288 -3.048 0 17.526 0 0 17.526 0 4.53606 16.9288 -3.048 8.763 15.178 -3.048 4.53606 16.9288 0 4.53606 16.9288 0 8.763 15.178 -3.048 12.3928 12.3928 -3.048 8.763 15.178 0 8.763 15.178 0 12.3928 12.3928 -3.048 15.178 8.763 -3.048 12.3928 12.3928 0 12.3928 12.3928 0 15.178 8.763 -3.048 16.9288 4.53606 -3.048 15.178 8.763 0 15.178 8.763 0 16.9288 4.53606 -3.048 17.526 0 -3.048 16.9288 4.53606 0 16.9288 4.53606 0 17.526 0 -47.244 15.748 304.673 -47.244 -15.748 304.673 -15.748 -15.748 304.673 -15.748 15.748 304.673 -15.748 -15.748 263.525 -15.748 15.748 263.525 -15.748 15.748 304.673 -15.748 -15.748 304.673 -47.244 -15.748 263.525 -15.748 -15.748 263.525 -15.748 -15.748 304.673 -47.244 -15.748 304.673 -47.244 15.748 263.525 -47.244 -15.748 263.525 -47.244 -15.748 304.673 -47.244 15.748 304.673 -15.748 15.748 263.525 -47.244 15.748 263.525 -47.244 15.748 304.673 -15.748 15.748 304.673 -47.244 15.748 263.525 -15.748 15.748 263.525 -15.748 -15.748 263.525 -47.244 -15.748 263.525 -44.196 15.748 263.525 -44.196 15.748 121.412 -44.196 -15.748 121.412 -44.196 -15.748 263.525 -44.196 -15.748 263.525 -44.196 -15.748 121.412 -18.796 -15.748 121.412 -18.796 -15.748 263.525 -18.796 -15.748 263.525 -18.796 -15.748 121.412 -18.796 15.748 121.412 -18.796 15.748 263.525 -18.796 15.748 263.525 -18.796 15.748 121.412 -44.196 15.748 121.412 -44.196 15.748 263.525 -44.196 8.61195 136.915 -44.196 16.637 133.591 -44.196 23.5283 128.303 -44.196 28.8161 121.412 -44.196 32.1402 113.387 -44.196 33.274 104.775 -44.196 32.1402 96.1631 -44.196 28.8161 88.138 -44.196 23.5283 81.2467 -44.196 16.637 75.9589 -44.196 8.61194 72.6348 -44.196 0 71.501 -44.196 -8.61194 72.6348 -44.196 -16.637 75.9589 -44.196 -23.5283 81.2467 -44.196 -28.8161 88.138 -44.196 -32.1402 96.1631 -44.196 -33.274 104.775 -44.196 -32.1402 113.387 -44.196 -28.8161 121.412 -44.196 -23.5283 128.303 -44.196 -16.637 133.591 -44.196 -8.61194 136.915 -44.196 0 138.049 7.87399 33.274 104.775 7.87399 32.1402 113.387 7.87399 28.8161 121.412 7.87399 23.5283 128.303 7.87399 16.637 133.591 7.87399 8.61195 136.915 7.87399 0 138.049 7.87399 -8.61194 136.915 7.87399 -16.637 133.591 7.87399 -23.5283 128.303 7.87399 -28.8161 121.412 7.87399 -32.1402 113.387 7.87399 -33.274 104.775 7.87399 -32.1402 96.1631 7.87399 -28.8161 88.138 7.87399 -23.5283 81.2467 7.87399 -16.637 75.9589 7.87399 -8.61194 72.6348 7.87399 0 71.501 7.87399 8.61194 72.6348 7.87399 16.637 75.9589 7.87399 23.5283 81.2467 7.87399 28.8161 88.138 7.87399 32.1402 96.1631 -44.196 32.1402 96.1631 7.87399 32.1402 96.1631 7.87399 28.8161 88.138 -44.196 28.8161 88.138 -44.196 28.8161 88.138 7.87399 28.8161 88.138 7.87399 23.5283 81.2467 -44.196 23.5283 81.2467 -44.196 23.5283 81.2467 7.87399 23.5283 81.2467 7.87399 16.637 75.9589 -44.196 16.637 75.9589 -44.196 16.637 75.9589 7.87399 16.637 75.9589 7.87399 8.61194 72.6348 -44.196 8.61194 72.6348 -44.196 8.61194 72.6348 7.87399 8.61194 72.6348 7.87399 0 71.501 -44.196 0 71.501 -44.196 0 71.501 7.87399 0 71.501 7.87399 -8.61194 72.6348 -44.196 -8.61194 72.6348 -44.196 -8.61194 72.6348 7.87399 -8.61194 72.6348 7.87399 -16.637 75.9589 -44.196 -16.637 75.9589 -44.196 -16.637 75.9589 7.87399 -16.637 75.9589 7.87399 -23.5283 81.2467 -44.196 -23.5283 81.2467 -44.196 -23.5283 81.2467 7.87399 -23.5283 81.2467 7.87399 -28.8161 88.138 -44.196 -28.8161 88.138 -44.196 -28.8161 88.138 7.87399 -28.8161 88.138 7.87399 -32.1402 96.1631 -44.196 -32.1402 96.1631 -44.196 -32.1402 96.1631 7.87399 -32.1402 96.1631 7.87399 -33.274 104.775 -44.196 -33.274 104.775 -44.196 -33.274 104.775 7.87399 -33.274 104.775 7.87399 -32.1402 113.387 -44.196 -32.1402 113.387 -44.196 -32.1402 113.387 7.87399 -32.1402 113.387 7.87399 -28.8161 121.412 -44.196 -28.8161 121.412 -44.196 -28.8161 121.412 7.87399 -28.8161 121.412 7.87399 -23.5283 128.303 -44.196 -23.5283 128.303 -44.196 -23.5283 128.303 7.87399 -23.5283 128.303 7.87399 -16.637 133.591 -44.196 -16.637 133.591 -44.196 -16.637 133.591 7.87399 -16.637 133.591 7.87399 -8.61194 136.915 -44.196 -8.61194 136.915 -44.196 -8.61194 136.915 7.87399 -8.61194 136.915 7.87399 0 138.049 -44.196 0 138.049 -44.196 0 138.049 7.87399 0 138.049 7.87399 8.61195 136.915 -44.196 8.61195 136.915 -44.196 8.61195 136.915 7.87399 8.61195 136.915 7.87399 16.637 133.591 -44.196 16.637 133.591 -44.196 16.637 133.591 7.87399 16.637 133.591 7.87399 23.5283 128.303 -44.196 23.5283 128.303 -44.196 23.5283 128.303 7.87399 23.5283 128.303 7.87399 28.8161 121.412 -44.196 28.8161 121.412 -44.196 28.8161 121.412 7.87399 28.8161 121.412 7.87399 32.1402 113.387 -44.196 32.1402 113.387 -44.196 32.1402 113.387 7.87399 32.1402 113.387 7.87399 33.274 104.775 -44.196 33.274 104.775 -44.196 33.274 104.775 7.87399 33.274 104.775 7.87399 32.1402 96.1631 -44.196 32.1402 96.1631 -44.196 17.526 88.138 -44.196 17.526 0 -44.196 -17.526 0 -44.196 -17.526 88.138 -44.196 -17.526 88.138 -44.196 -17.526 0 -3.048 -17.526 0 -3.048 -17.526 88.138 -3.048 -17.526 88.138 -3.048 -17.526 0 -3.048 17.526 0 -3.048 17.526 88.138 -3.048 17.526 88.138 -3.048 17.526 0 -44.196 17.526 0 -44.196 17.526 88.138 -50.8 20.6772 -11.938 -50.8 23.0624 -6.17956 -3.048 23.0624 -6.17956 -3.048 20.6772 -11.938 -50.8 16.8829 -16.8829 -50.8 20.6772 -11.938 -3.048 20.6772 -11.938 -3.048 16.8829 -16.8829 -50.8 11.938 -20.6772 -50.8 16.8829 -16.8829 -3.048 16.8829 -16.8829 -3.048 11.938 -20.6772 -50.8 6.17956 -23.0624 -50.8 11.938 -20.6772 -3.048 11.938 -20.6772 -3.048 6.17956 -23.0624 -50.8 0 -23.876 -50.8 6.17956 -23.0624 -3.048 6.17956 -23.0624 -3.048 0 -23.876 -50.8 -6.17956 -23.0624 -50.8 0 -23.876 -3.048 0 -23.876 -3.048 -6.17956 -23.0624 -50.8 -11.938 -20.6772 -50.8 -6.17956 -23.0624 -3.048 -6.17956 -23.0624 -3.048 -11.938 -20.6772 -50.8 -16.8829 -16.8829 -50.8 -11.938 -20.6772 -3.048 -11.938 -20.6772 -3.048 -16.8829 -16.8829 -50.8 -20.6772 -11.938 -50.8 -16.8829 -16.8829 -3.048 -16.8829 -16.8829 -3.048 -20.6772 -11.938 -50.8 -23.0624 -6.17956 -50.8 -20.6772 -11.938 -3.048 -20.6772 -11.938 -3.048 -23.0624 -6.17956 -50.8 -23.876 0 -50.8 -23.0624 -6.17956 -3.048 -23.0624 -6.17956 -3.048 -23.876 0 -50.8 -23.0624 6.17956 -50.8 -23.876 0 -3.048 -23.876 0 -3.048 -23.0624 6.17956 -50.8 -20.6772 11.938 -50.8 -23.0624 6.17956 -3.048 -23.0624 6.17956 -3.048 -20.6772 11.938 -50.8 -16.8829 16.8829 -50.8 -20.6772 11.938 -3.048 -20.6772 11.938 -3.048 -16.8829 16.8829 -50.8 -11.938 20.6772 -50.8 -16.8829 16.8829 -3.048 -16.8829 16.8829 -3.048 -11.938 20.6772 -50.8 -6.17956 23.0624 -50.8 -11.938 20.6772 -3.048 -11.938 20.6772 -3.048 -6.17956 23.0624 -50.8 0 23.876 -50.8 -6.17956 23.0624 -3.048 -6.17956 23.0624 -3.048 0 23.876 -50.8 6.17956 23.0624 -50.8 0 23.876 -3.048 0 23.876 -3.048 6.17956 23.0624 -50.8 11.938 20.6772 -50.8 6.17956 23.0624 -3.048 6.17956 23.0624 -3.048 11.938 20.6772 -50.8 16.8829 16.8829 -50.8 11.938 20.6772 -3.048 11.938 20.6772 -3.048 16.8829 16.8829 -50.8 20.6772 11.938 -50.8 16.8829 16.8829 -3.048 16.8829 16.8829 -3.048 20.6772 11.938 -50.8 23.0624 6.17956 -50.8 20.6772 11.938 -3.048 20.6772 11.938 -3.048 23.0624 6.17956 -3.048 23.0624 6.17956 -3.048 20.6772 11.938 -3.048 16.8829 16.8829 -3.048 11.938 20.6772 -3.048 6.17956 23.0624 -3.048 0 23.876 -3.048 -6.17956 23.0624 -3.048 -11.938 20.6772 -3.048 -16.8829 16.8829 -3.048 -20.6772 11.938 -3.048 -23.0624 6.17956 -3.048 -23.876 0 -3.048 -23.0624 -6.17956 -3.048 -20.6772 -11.938 -3.048 -16.8829 -16.8829 -3.048 -11.938 -20.6772 -3.048 -6.17956 -23.0624 -3.048 0 -23.876 -3.048 6.17956 -23.0624 -3.048 11.938 -20.6772 -3.048 16.8829 -16.8829 -3.048 20.6772 -11.938 -3.048 23.0624 -6.17956 -3.048 23.876 0 -50.8 23.0624 -6.17956 -50.8 23.876 0 -3.048 23.876 0 -3.048 23.0624 -6.17956 -50.8 23.876 0 -50.8 23.0624 -6.17956 -50.8 20.6772 -11.938 -50.8 16.8829 -16.8829 -50.8 11.938 -20.6772 -50.8 6.17956 -23.0624 -50.8 0 -23.876 -50.8 -6.17956 -23.0624 -50.8 -11.938 -20.6772 -50.8 -16.8829 -16.8829 -50.8 -20.6772 -11.938 -50.8 -23.0624 -6.17956 -50.8 -23.876 0 -50.8 -23.0624 6.17956 -50.8 -20.6772 11.938 -50.8 -16.8829 16.8829 -50.8 -11.938 20.6772 -50.8 -6.17956 23.0624 -50.8 0 23.876 -50.8 6.17956 23.0624 -50.8 11.938 20.6772 -50.8 16.8829 16.8829 -50.8 20.6772 11.938 -50.8 23.0624 6.17956 -50.8 23.876 0 -50.8 23.0624 6.17956 -3.048 23.0624 6.17956 -3.048 23.876 0 -186.182 21.4677 5.75225 -186.182 19.2474 11.1125 -44.196 19.2474 11.1125 -44.196 21.4677 5.75225 -186.182 19.2474 11.1125 -186.182 15.7154 15.7154 -44.196 15.7154 15.7154 -44.196 19.2474 11.1125 -186.182 15.7154 15.7154 -186.182 11.1125 19.2474 -44.196 11.1125 19.2474 -44.196 15.7154 15.7154 -186.182 11.1125 19.2474 -186.182 5.75225 21.4677 -44.196 5.75225 21.4677 -44.196 11.1125 19.2474 -186.182 5.75225 21.4677 -186.182 0 22.225 -44.196 0 22.225 -44.196 5.75225 21.4677 -186.182 0 22.225 -186.182 -5.75225 21.4677 -44.196 -5.75225 21.4677 -44.196 0 22.225 -186.182 -5.75225 21.4677 -186.182 -11.1125 19.2474 -44.196 -11.1125 19.2474 -44.196 -5.75225 21.4677 -186.182 -11.1125 19.2474 -186.182 -15.7154 15.7154 -44.196 -15.7154 15.7154 -44.196 -11.1125 19.2474 -186.182 -15.7154 15.7154 -186.182 -19.2474 11.1125 -44.196 -19.2474 11.1125 -44.196 -15.7154 15.7154 -186.182 -19.2474 11.1125 -186.182 -21.4677 5.75225 -44.196 -21.4677 5.75225 -44.196 -19.2474 11.1125 -186.182 -21.4677 5.75225 -186.182 -22.225 0 -44.196 -22.225 0 -44.196 -21.4677 5.75225 -186.182 -22.225 0 -186.182 -21.4677 -5.75225 -44.196 -21.4677 -5.75225 -44.196 -22.225 0 -186.182 -21.4677 -5.75225 -186.182 -19.2474 -11.1125 -44.196 -19.2474 -11.1125 -44.196 -21.4677 -5.75225 -186.182 -19.2474 -11.1125 -186.182 -15.7154 -15.7154 -44.196 -15.7154 -15.7154 -44.196 -19.2474 -11.1125 -186.182 -15.7154 -15.7154 -186.182 -11.1125 -19.2474 -44.196 -11.1125 -19.2474 -44.196 -15.7154 -15.7154 -186.182 -11.1125 -19.2474 -186.182 -5.75225 -21.4677 -44.196 -5.75225 -21.4677 -44.196 -11.1125 -19.2474 -186.182 -5.75225 -21.4677 -186.182 0 -22.225 -44.196 0 -22.225 -44.196 -5.75225 -21.4677 -186.182 0 -22.225 -186.182 5.75225 -21.4677 -44.196 5.75225 -21.4677 -44.196 0 -22.225 -186.182 5.75225 -21.4677 -186.182 11.1125 -19.2474 -44.196 11.1125 -19.2474 -44.196 5.75225 -21.4677 -186.182 11.1125 -19.2474 -186.182 15.7154 -15.7155 -44.196 15.7154 -15.7155 -44.196 11.1125 -19.2474 -186.182 15.7154 -15.7155 -186.182 19.2474 -11.1125 -44.196 19.2474 -11.1125 -44.196 15.7154 -15.7155 -186.182 19.2474 -11.1125 -186.182 21.4677 -5.75225 -44.196 21.4677 -5.75225 -44.196 19.2474 -11.1125 -186.182 21.4677 -5.75225 -186.182 22.225 0 -44.196 22.225 0 -44.196 21.4677 -5.75225 -186.182 22.225 0 -186.182 21.4677 -5.75225 -186.182 19.2474 -11.1125 -186.182 15.7154 -15.7155 -186.182 11.1125 -19.2474 -186.182 5.75225 -21.4677 -186.182 0 -22.225 -186.182 -5.75225 -21.4677 -186.182 -11.1125 -19.2474 -186.182 -15.7154 -15.7154 -186.182 -19.2474 -11.1125 -186.182 -21.4677 -5.75225 -186.182 -22.225 0 -186.182 -21.4677 5.75225 -186.182 -19.2474 11.1125 -186.182 -15.7154 15.7154 -186.182 -11.1125 19.2474 -186.182 -5.75225 21.4677 -186.182 0 22.225 -186.182 5.75225 21.4677 -186.182 11.1125 19.2474 -186.182 15.7154 15.7154 -186.182 19.2474 11.1125 -186.182 21.4677 5.75225 -186.182 22.225 0 -186.182 21.4677 5.75225 -44.196 21.4677 5.75225 -44.196 22.225 0 0.254013 -15.748 137.535 -18.796 -15.748 121.412 7.87399 -15.748 123.825 -16.2438 -15.748 147.06 -18.796 -15.748 156.585 0.254013 15.748 137.535 7.87399 15.748 123.825 -18.796 15.748 121.412 -16.2438 15.748 147.06 -18.796 15.748 156.585 7.87399 -15.748 123.825 7.87399 15.748 123.825 0.254013 15.748 137.535 -18.796 15.748 156.585 -18.796 -15.748 156.585 -18.1469 -15.748 151.655 -16.2438 15.748 147.06 -16.2438 -15.748 147.06 0.254013 15.748 137.535 0.254013 -15.748 137.535 0.254013 -15.748 137.535 -18.1469 15.748 151.655 -13.2164 15.748 143.115 -13.2164 -15.748 143.115 -9.27098 15.748 140.088 -9.27098 -15.748 140.088 -4.67648 15.748 138.185 -4.67648 -15.748 138.185 -44.196 -21.4677 27.9485 -109.569 -21.4677 5.43886 -107.696 -22.225 0 -44.196 -22.225 21.8648 -44.196 -19.2474 33.6176 -111.314 -19.2474 10.5071 -109.569 -21.4677 5.43886 -44.196 -21.4677 27.9485 -44.196 -15.7154 38.4858 -112.812 -15.7154 14.8592 -111.314 -19.2474 10.5071 -44.196 -19.2474 33.6176 -44.196 -11.1125 42.2213 -113.962 -11.1125 18.1988 -112.812 -15.7154 14.8592 -44.196 -15.7154 38.4858 -44.196 -5.75225 44.5695 -114.685 -5.75225 20.2981 -113.962 -11.1125 18.1988 -44.196 -11.1125 42.2213 -44.196 0 45.3704 -114.932 0 21.0142 -114.685 -5.75225 20.2981 -44.196 -5.75225 44.5695 -44.196 5.75225 44.5695 -114.685 5.75225 20.2981 -114.932 0 21.0142 -44.196 0 45.3704 -44.196 11.1125 42.2213 -113.962 11.1125 18.1988 -114.685 5.75225 20.2981 -44.196 5.75225 44.5695 -44.196 15.7154 38.4858 -112.812 15.7154 14.8592 -113.962 11.1125 18.1988 -44.196 11.1125 42.2213 -44.196 19.2474 33.6176 -111.314 19.2474 10.5071 -112.812 15.7154 14.8592 -44.196 15.7154 38.4858 -44.196 21.4677 27.9485 -109.569 21.4677 5.43886 -111.314 19.2474 10.5071 -44.196 19.2474 33.6176 -44.196 22.225 21.8648 -107.696 22.225 0 -109.569 21.4677 5.43886 -44.196 21.4677 27.9485 -44.196 22.225 21.8648 -44.196 22.225 0 -107.696 22.225 0 -44.196 22.225 0 -44.196 22.225 21.8648 -44.196 21.4677 27.9485 -44.196 19.2474 33.6176 -44.196 15.7154 38.4858 -44.196 11.1125 42.2213 -44.196 5.75225 44.5695 -44.196 0 45.3704 -44.196 -5.75225 44.5695 -44.196 -11.1125 42.2213 -44.196 -15.7154 38.4858 -44.196 -19.2474 33.6176 -44.196 -21.4677 27.9485 -44.196 -22.225 21.8648 -44.196 -22.225 0 -107.696 -22.225 0 -44.196 -22.225 0 -44.196 -22.225 21.8648 - - - - - - - - - - 0 0.866034 -0.499985 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0 -1 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0 -1 0 -0.258797 -0.965932 0 0 -1 0 0 -1 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.70713 -0.707083 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.70713 -0.707083 0 -0.866034 -0.499985 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -1 0 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -1 0 0 -0.965932 0.258797 0 -1 0 0 -1 0 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.258797 0.965932 0 0 1 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0 1 0 0.258797 0.965932 0 0 1 0 0 1 0 0.258797 0.965932 0 0.499985 0.866034 0 0.258797 0.965932 0 0.258797 0.965932 0 0.499985 0.866034 0 0.707083 0.70713 0 0.499985 0.866034 0 0.499985 0.866034 0 0.707083 0.70713 0 0.866034 0.499985 0 0.707083 0.70713 0 0.707083 0.70713 0 0.866034 0.499985 0 0.965932 0.258797 0 0.866034 0.499985 0 0.866034 0.499985 0 0.965932 0.258797 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.965932 -0.258797 0 1 0 0 1 0 0 0.965932 -0.258797 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 0.965932 0.258797 0 0.965932 0.258797 0 1 0 -0.965932 0 0.258797 -0.997861 0 0.0653706 -0.997861 0 0.0653706 -0.965932 0 0.258797 -0.866034 0 0.499985 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.866034 0 0.499985 -0.707083 0 0.70713 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.707083 0 0.70713 -0.499985 0 0.866034 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.499985 0 0.866034 -0.258797 0 0.965932 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.258797 0 0.965932 0 0 1 -0.258797 0 0.965932 -0.258797 0 0.965932 0 0 1 0.258797 0 0.965932 0 0 1 0 0 1 0.258797 0 0.965932 0.499985 0 0.866034 0.258797 0 0.965932 0.258797 0 0.965932 0.499985 0 0.866034 0.707083 0 0.70713 0.499985 0 0.866034 0.499985 0 0.866034 0.707083 0 0.70713 0.866034 0 0.499985 0.707083 0 0.70713 0.707083 0 0.70713 0.866034 0 0.499985 0.965932 0 0.258797 0.866034 0 0.499985 0.866034 0 0.499985 0.965932 0 0.258797 0.997861 0 0.0653706 0.965932 0 0.258797 0.965932 0 0.258797 0.997861 0 0.0653706 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.997861 0 0.0653706 -1 0 0 -1 0 0 -0.997861 0 0.0653706 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 0.997861 0 0.0653706 0.997861 0 0.0653706 1 0 0 -0.997861 0 0.0653706 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.997861 0 0.0653706 -0.965932 0 0.258797 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.965932 0 0.258797 -0.866034 0 0.499985 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.866034 0 0.499985 -0.70713 0 0.707083 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.70713 0 0.707083 -0.499985 0 0.866034 -0.258797 0 0.965932 -0.258797 0 0.965932 -0.499985 0 0.866034 -0.258797 0 0.965932 0 0 1 0 0 1 -0.258797 0 0.965932 0 0 1 0.258797 0 0.965932 0.258797 0 0.965932 0 0 1 0.258797 0 0.965932 0.499985 0 0.866034 0.499985 0 0.866034 0.258797 0 0.965932 0.499985 0 0.866034 0.70713 0 0.707083 0.70713 0 0.707083 0.499985 0 0.866034 0.70713 0 0.707083 0.866034 0 0.499985 0.866034 0 0.499985 0.70713 0 0.707083 0.866034 0 0.499985 0.965932 0 0.258797 0.965932 0 0.258797 0.866034 0 0.499985 0.965932 0 0.258797 0.997861 0 0.0653706 0.997861 0 0.0653706 0.965932 0 0.258797 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -0.997861 0 0.0653706 -0.997861 0 0.0653706 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 0.997861 0 0.0653706 0.997861 0 0.0653706 1 0 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -0.0654012 0.997859 0 0 1 0 0 1 0 -0.0654012 0.997859 0 -0.258797 0.965932 0 -0.0654012 0.997859 0 -0.0654012 0.997859 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.258797 0.965932 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.70713 0.707083 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.70713 0.707083 0 -0.866034 0.499985 0 -0.70713 0.707083 0 -0.70713 0.707083 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -1 0 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -1 0 0 -0.965932 -0.258797 0 -1 0 0 -1 0 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.70713 -0.707083 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.70713 -0.707083 0 -0.499985 -0.866034 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 -0.0654012 -0.997859 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.0654012 -0.997859 0 0 -1 0 -0.0654012 -0.997859 0 -0.0654012 -0.997859 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 -0.0654012 0 -0.997859 0 0 -1 0 0 -1 -0.0654012 0 -0.997859 -0.258797 0 -0.965932 -0.0654012 0 -0.997859 -0.0654012 0 -0.997859 -0.258797 0 -0.965932 -0.499985 0 -0.866034 -0.258797 0 -0.965932 -0.258797 0 -0.965932 -0.499985 0 -0.866034 -0.70713 0 -0.707083 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.70713 0 -0.707083 -0.866034 0 -0.499985 -0.70713 0 -0.707083 -0.70713 0 -0.707083 -0.866034 0 -0.499985 -0.965932 0 -0.258797 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.965932 0 -0.258797 -1 0 0 -0.965932 0 -0.258797 -0.965932 0 -0.258797 -1 0 0 -0.965932 0 0.258797 -1 0 0 -1 0 0 -0.965932 0 0.258797 -0.866034 0 0.499985 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.866034 0 0.499985 -0.70713 0 0.707083 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.70713 0 0.707083 -0.499985 0 0.866034 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.499985 0 0.866034 -0.258797 0 0.965932 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.258797 0 0.965932 -0.0654012 0 0.997859 -0.258797 0 0.965932 -0.258797 0 0.965932 -0.0654012 0 0.997859 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 -0.0654012 0 0.997859 -0.0654012 0 0.997859 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.965932 -0.258797 0 1 0 0 1 0 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0 -1 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0 -1 0 -0.258797 -0.965932 0 0 -1 0 0 -1 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.707083 -0.70713 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -1 0 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -1 0 0 -0.965932 0.258797 0 -1 0 0 -1 0 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.258797 0.965932 0 0 1 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0 1 0 0.258797 0.965932 0 0 1 0 0 1 0 0.258797 0.965932 0 0.499985 0.866034 0 0.258797 0.965932 0 0.258797 0.965932 0 0.499985 0.866034 0 0.707083 0.70713 0 0.499985 0.866034 0 0.499985 0.866034 0 0.707083 0.70713 0 0.866034 0.499985 0 0.707083 0.70713 0 0.707083 0.70713 0 0.866034 0.499985 0 0.965932 0.258797 0 0.866034 0.499985 0 0.866034 0.499985 0 0.965932 0.258797 0 1 0 0 0.965932 0.258797 0 0.965932 0.258797 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.258797 0.965932 0 -0.258797 0.965932 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0 1 0 0 1 0 0 1 0 0 1 0 0.258797 0.965932 0 0.258797 0.965932 0 0.258797 0.965932 0 0.258797 0.965932 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.499985 0.866034 0 0.707083 0.70713 0 0.707083 0.70713 0 0.707083 0.70713 0 0.707083 0.70713 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.866034 0.499985 0 0.965932 0.258797 0 0.965932 0.258797 0 0.965932 0.258797 0 0.965932 0.258797 0 1 0 0 1 0 0 1 0 0 1 0 0 0.965932 -0.258797 0 0.965932 -0.258797 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0.866034 -0.499985 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0 -1 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0 -1 0 -0.258797 -0.965932 0 0 -1 0 0 -1 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.707083 -0.70713 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -1 0 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -1 0 0 -0.965932 0.258797 0 -1 0 0 -1 0 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.258797 0.965932 0 0 1 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0 1 0 0.258797 0.965932 0 0 1 0 0 1 0 0.258797 0.965932 0 0.499985 0.866034 0 0.258797 0.965932 0 0.258797 0.965932 0 0.499985 0.866034 0 0.70713 0.707083 0 0.499985 0.866034 0 0.499985 0.866034 0 0.70713 0.707083 0 0.866034 0.499985 0 0.70713 0.707083 0 0.70713 0.707083 0 0.866034 0.499985 0 0.965932 0.258797 0 0.866034 0.499985 0 0.866034 0.499985 0 0.965932 0.258797 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.965932 -0.258797 0 1 0 0 1 0 0 0.965932 -0.258797 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 0.965932 0.258797 0 0.965932 0.258797 0 1 0 0 0.965932 0.258797 0 0.866034 0.499985 0 0.866034 0.499985 0 0.965932 0.258797 0 0.866034 0.499985 0 0.707083 0.70713 0 0.707083 0.70713 0 0.866034 0.499985 0 0.707083 0.70713 0 0.499985 0.866034 0 0.499985 0.866034 0 0.707083 0.70713 0 0.499985 0.866034 0 0.258797 0.965932 0 0.258797 0.965932 0 0.499985 0.866034 0 0.258797 0.965932 0 0 1 0 0 1 0 0.258797 0.965932 0 0 1 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0 1 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -1 0 0 -1 0 0 -0.965932 0.258797 0 -1 0 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -1 0 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 -0.707083 -0.70713 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.707083 -0.70713 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 0 -1 0 0 -1 0 -0.258797 -0.965932 0 0 -1 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0 -1 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.965932 -0.258797 0 1 0 0 1 0 0 0.965932 -0.258797 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 0.965932 0.258797 0 0.965932 0.258797 0 1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0.874074 0 0.485794 0.874074 0 0.485794 0.874074 0 0.485794 0.991449 0 0.130497 0.991449 0 0.130497 0.965932 0 0.258797 0.866034 0 0.499985 0.866034 0 0.499985 0.130528 0 0.991445 0.130528 0 0.991445 0.874074 0 0.485794 0.965932 0 0.258797 0.707083 0 0.70713 0.707083 0 0.70713 0.499985 0 0.866034 0.499985 0 0.866034 0.258797 0 0.965932 0.258797 0 0.965932 0 -1 0 0 1 0 -0.0842616 -0.965931 0.244697 -0.0842616 -0.965931 0.244697 -0.0212714 -0.99786 0.0618305 -0.0212714 -0.99786 0.0618305 -0.162755 -0.866046 0.472732 -0.162755 -0.866046 0.472732 -0.0842616 -0.965931 0.244697 -0.0842616 -0.965931 0.244697 -0.230201 -0.707123 0.668569 -0.230201 -0.707123 0.668569 -0.162755 -0.866046 0.472732 -0.162755 -0.866046 0.472732 -0.28193 -0.499985 0.818859 -0.28193 -0.499985 0.818859 -0.230201 -0.707123 0.668569 -0.230201 -0.707123 0.668569 -0.314463 -0.258797 0.913311 -0.314463 -0.258797 0.913311 -0.28193 -0.499985 0.818859 -0.28193 -0.499985 0.818859 -0.325541 0 0.945528 -0.325541 0 0.945528 -0.314463 -0.258797 0.913311 -0.314463 -0.258797 0.913311 -0.314463 0.258797 0.913311 -0.314463 0.258797 0.913311 -0.325541 0 0.945528 -0.325541 0 0.945528 -0.28193 0.499985 0.818859 -0.28193 0.499985 0.818859 -0.314463 0.258797 0.913311 -0.314463 0.258797 0.913311 -0.230201 0.707123 0.668569 -0.230201 0.707123 0.668569 -0.28193 0.499985 0.818859 -0.28193 0.499985 0.818859 -0.162755 0.866046 0.472732 -0.162755 0.866046 0.472732 -0.230201 0.707123 0.668569 -0.230201 0.707123 0.668569 -0.0842616 0.965931 0.244697 -0.0842616 0.965931 0.244697 -0.162755 0.866046 0.472732 -0.162755 0.866046 0.472732 -0.0212714 0.99786 0.0618305 -0.0212714 0.99786 0.0618305 -0.0842616 0.965931 0.244697 -0.0842616 0.965931 0.244697 -0.0212714 0.99786 0.0618305 0 1 0 -0.0212714 0.99786 0.0618305 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 -0.0212714 -0.99786 0.0618305 0 -1 0 -0.0212714 -0.99786 0.0618305 - - - - - - - - - - - - - - -

0 0 1 1 2 2 3 3

-

4 4 5 5 6 6 7 7

-

8 8 9 9 10 10 11 11

-

12 12 13 13 14 14 15 15

-

16 16 17 17 18 18 19 19

-

20 20 21 21 22 22 23 23

-

24 24 25 25 26 26 27 27

-

28 28 29 29 30 30 31 31

-

32 32 33 33 34 34 35 35

-

36 36 37 37 38 38 39 39

-

40 40 41 41 42 42 43 43

-

44 44 45 45 46 46 47 47

-

48 48 49 49 50 50 51 51

-

52 52 53 53 54 54 55 55

-

56 56 57 57 58 58 59 59

-

60 60 61 61 62 62 63 63

-

64 64 65 65 66 66 67 67

-

68 68 69 69 70 70 71 71

-

72 72 73 73 74 74 75 75

-

76 76 77 77 78 78 79 79

-

80 80 81 81 82 82 83 83

-

84 84 85 85 86 86 87 87

-

88 88 89 89 90 90 91 91 92 92 93 93 94 94 95 95 96 96 97 97 98 98 99 99 100 100 101 101 102 102 103 103 104 104 105 105 106 106 107 107 108 108 109 109 110 110 111 111

-

112 112 113 113 114 114 115 115

-

116 116 117 117 118 118 119 119 120 120 121 121 122 122 123 123 124 124 125 125 126 126 127 127 128 128 129 129 130 130 131 131 132 132 133 133 134 134 135 135 136 136 137 137 138 138 139 139

-

140 140 141 141 142 142 143 143

-
- - - -

144 144 145 145 146 146 147 147

-

148 148 149 149 150 150 151 151

-

152 152 153 153 154 154 155 155

-

156 156 157 157 158 158 159 159

-

160 160 161 161 162 162 163 163

-

164 164 165 165 166 166 167 167

-

168 168 169 169 170 170 171 171

-

172 172 173 173 174 174 175 175

-

176 176 177 177 178 178 179 179

-

180 180 181 181 182 182 183 183

-

184 184 185 185 186 186 187 187

-

188 188 189 189 190 190 191 191

-

192 192 193 193 194 194 195 195 196 196 197 197 198 198 199 199 200 200 201 201 202 202 203 203 204 204 205 205 206 206

-

207 207 208 208 209 209 210 210

-

211 211 212 212 213 213 214 214 215 215 216 216 217 217 218 218 219 219 220 220 221 221 222 222 223 223 224 224 225 225

-

226 226 227 227 228 228 229 229

-
- - - -

230 230 231 231 232 232 233 233

-

234 234 235 235 236 236 237 237

-

238 238 239 239 240 240 241 241

-

242 242 243 243 244 244 245 245

-

246 246 247 247 248 248 249 249

-

250 250 251 251 252 252 253 253

-

254 254 255 255 256 256 257 257

-

258 258 259 259 260 260 261 261

-

262 262 263 263 264 264 265 265

-

266 266 267 267 268 268 269 269

-

270 270 271 271 272 272 273 273

-

274 274 275 275 276 276 277 277

-

278 278 279 279 280 280 281 281 282 282 283 283 284 284 285 285 286 286 287 287 288 288 289 289 290 290 291 291 292 292

-

293 293 294 294 295 295 296 296

-

297 297 298 298 299 299 300 300 301 301 302 302 303 303 304 304 305 305 306 306 307 307 308 308 309 309 310 310 311 311

-

312 312 313 313 314 314 315 315

-
- - - -

316 316 317 317 318 318 319 319 320 320 321 321 322 322 323 323 324 324 325 325 326 326 327 327 328 328 329 329 330 330

-

331 331 332 332 333 333 334 334

-

335 335 336 336 337 337 338 338

-

339 339 340 340 341 341 342 342

-

343 343 344 344 345 345 346 346

-

347 347 348 348 349 349 350 350

-

351 351 352 352 353 353 354 354

-

355 355 356 356 357 357 358 358

-

359 359 360 360 361 361 362 362

-

363 363 364 364 365 365 366 366

-

367 367 368 368 369 369 370 370

-

371 371 372 372 373 373 374 374

-

375 375 376 376 377 377 378 378

-

379 379 380 380 381 381 382 382

-

383 383 384 384 385 385 386 386

-

387 387 388 388 389 389 390 390

-
- - - -

391 391 392 392 393 393 394 394

-

395 395 396 396 397 397 398 398

-

399 399 400 400 401 401 402 402

-

403 403 404 404 405 405 406 406

-

407 407 408 408 409 409 410 410

-

411 411 412 412 413 413 414 414

-

415 415 416 416 417 417 418 418

-

419 419 420 420 421 421 422 422

-

423 423 424 424 425 425 426 426

-

427 427 428 428 429 429 430 430

-

431 431 432 432 433 433 434 434

-

435 435 436 436 437 437 438 438

-

439 439 440 440 441 441 442 442

-

443 443 444 444 445 445 446 446 447 447 448 448 449 449 450 450 451 451 452 452 453 453 454 454 455 455 456 456 457 457

-

458 458 459 459 460 460 461 461

-

462 462 463 463 464 464 465 465 466 466 467 467 468 468 469 469 470 470 471 471 472 472 473 473 474 474 475 475 476 476

-

477 477 478 478 479 479 480 480

-
- - - -

481 481 482 482 483 483 484 484

-

485 485 486 486 487 487 488 488

-

489 489 490 490 491 491 492 492

-

493 493 494 494 495 495 496 496

-

497 497 498 498 499 499 500 500

-
- - - -

501 501 502 502 503 503 504 504 505 505 506 506 507 507 508 508 509 509 510 510 511 511 512 512 513 513 514 514 515 515 516 516 517 517 518 518 519 519 520 520 521 521 522 522 523 523 524 524

-

525 525 526 526 527 527 528 528

-

529 529 530 530 531 531 532 532

-

533 533 534 534 535 535 536 536

-

537 537 538 538 539 539 540 540

-

541 541 542 542 543 543 544 544

-

545 545 546 546 547 547 548 548

-

549 549 550 550 551 551 552 552

-

553 553 554 554 555 555 556 556

-

557 557 558 558 559 559 560 560

-

561 561 562 562 563 563 564 564

-

565 565 566 566 567 567 568 568

-

569 569 570 570 571 571 572 572

-

573 573 574 574 575 575 576 576

-

577 577 578 578 579 579 580 580

-

581 581 582 582 583 583 584 584

-

585 585 586 586 587 587 588 588

-

589 589 590 590 591 591 592 592

-

593 593 594 594 595 595 596 596

-

597 597 598 598 599 599 600 600

-

601 601 602 602 603 603 604 604

-

605 605 606 606 607 607 608 608

-

609 609 610 610 611 611 612 612

-

613 613 614 614 615 615 616 616

-

617 617 618 618 619 619 620 620

-
- - - -

621 621 622 622 623 623 624 624

-

625 625 626 626 627 627 628 628

-

629 629 630 630 631 631 632 632

-

633 633 634 634 635 635 636 636

-

637 637 638 638 639 639 640 640

-

641 641 642 642 643 643 644 644

-
- - - -

645 645 646 646 647 647 648 648

-

649 649 650 650 651 651 652 652

-

653 653 654 654 655 655 656 656

-

657 657 658 658 659 659 660 660

-
- - - -

661 661 662 662 663 663 664 664 665 665 666 666 667 667 668 668 669 669 670 670 671 671 672 672 673 673 674 674 675 675 676 676 677 677 678 678 679 679 680 680 681 681 682 682 683 683 684 684

-

685 685 686 686 687 687 688 688 689 689 690 690 691 691 692 692 693 693 694 694 695 695 696 696 697 697 698 698 699 699 700 700 701 701 702 702 703 703 704 704 705 705 706 706 707 707 708 708

-

709 709 710 710 711 711 712 712

-

713 713 714 714 715 715 716 716

-

717 717 718 718 719 719 720 720

-

721 721 722 722 723 723 724 724

-

725 725 726 726 727 727 728 728

-

729 729 730 730 731 731 732 732

-

733 733 734 734 735 735 736 736

-

737 737 738 738 739 739 740 740

-

741 741 742 742 743 743 744 744

-

745 745 746 746 747 747 748 748

-

749 749 750 750 751 751 752 752

-

753 753 754 754 755 755 756 756

-

757 757 758 758 759 759 760 760

-

761 761 762 762 763 763 764 764

-

765 765 766 766 767 767 768 768

-

769 769 770 770 771 771 772 772

-

773 773 774 774 775 775 776 776

-

777 777 778 778 779 779 780 780

-

781 781 782 782 783 783 784 784

-

785 785 786 786 787 787 788 788

-

789 789 790 790 791 791 792 792

-

793 793 794 794 795 795 796 796

-

797 797 798 798 799 799 800 800

-

801 801 802 802 803 803 804 804

-
- - - -

805 805 806 806 807 807 808 808

-

809 809 810 810 811 811 812 812

-

813 813 814 814 815 815 816 816

-

817 817 818 818 819 819 820 820

-
- - - -

821 821 822 822 823 823 824 824

-

825 825 826 826 827 827 828 828

-

829 829 830 830 831 831 832 832

-

833 833 834 834 835 835 836 836

-

837 837 838 838 839 839 840 840

-

841 841 842 842 843 843 844 844

-

845 845 846 846 847 847 848 848

-

849 849 850 850 851 851 852 852

-

853 853 854 854 855 855 856 856

-

857 857 858 858 859 859 860 860

-

861 861 862 862 863 863 864 864

-

865 865 866 866 867 867 868 868

-

869 869 870 870 871 871 872 872

-

873 873 874 874 875 875 876 876

-

877 877 878 878 879 879 880 880

-

881 881 882 882 883 883 884 884

-

885 885 886 886 887 887 888 888

-

889 889 890 890 891 891 892 892

-

893 893 894 894 895 895 896 896

-

897 897 898 898 899 899 900 900

-

901 901 902 902 903 903 904 904

-

905 905 906 906 907 907 908 908

-

909 909 910 910 911 911 912 912 913 913 914 914 915 915 916 916 917 917 918 918 919 919 920 920 921 921 922 922 923 923 924 924 925 925 926 926 927 927 928 928 929 929 930 930 931 931 932 932

-

933 933 934 934 935 935 936 936

-

937 937 938 938 939 939 940 940 941 941 942 942 943 943 944 944 945 945 946 946 947 947 948 948 949 949 950 950 951 951 952 952 953 953 954 954 955 955 956 956 957 957 958 958 959 959 960 960

-

961 961 962 962 963 963 964 964

-
- - - -

965 965 966 966 967 967 968 968

-

969 969 970 970 971 971 972 972

-

973 973 974 974 975 975 976 976

-

977 977 978 978 979 979 980 980

-

981 981 982 982 983 983 984 984

-

985 985 986 986 987 987 988 988

-

989 989 990 990 991 991 992 992

-

993 993 994 994 995 995 996 996

-

997 997 998 998 999 999 1000 1000

-

1001 1001 1002 1002 1003 1003 1004 1004

-

1005 1005 1006 1006 1007 1007 1008 1008

-

1009 1009 1010 1010 1011 1011 1012 1012

-

1013 1013 1014 1014 1015 1015 1016 1016

-

1017 1017 1018 1018 1019 1019 1020 1020

-

1021 1021 1022 1022 1023 1023 1024 1024

-

1025 1025 1026 1026 1027 1027 1028 1028

-

1029 1029 1030 1030 1031 1031 1032 1032

-

1033 1033 1034 1034 1035 1035 1036 1036

-

1037 1037 1038 1038 1039 1039 1040 1040

-

1041 1041 1042 1042 1043 1043 1044 1044

-

1045 1045 1046 1046 1047 1047 1048 1048

-

1049 1049 1050 1050 1051 1051 1052 1052

-

1053 1053 1054 1054 1055 1055 1056 1056

-

1057 1057 1058 1058 1059 1059 1060 1060 1061 1061 1062 1062 1063 1063 1064 1064 1065 1065 1066 1066 1067 1067 1068 1068 1069 1069 1070 1070 1071 1071 1072 1072 1073 1073 1074 1074 1075 1075 1076 1076 1077 1077 1078 1078 1079 1079 1080 1080

-

1081 1081 1082 1082 1083 1083 1084 1084

-
- - - -

1110 1113 1086 1113 1112 1113 1108 1113 1086 1113 1110 1113 1102 1113 1086 1113 1108 1113 1099 1113 1086 1113 1102 1113

-
- - - -

1112 1113 1086 1113 1095 1113 1105 1113

-
- - - -

1109 1114 1111 1114 1092 1114 1107 1114 1109 1114 1092 1114 1101 1114 1107 1114 1092 1114 1106 1114 1101 1114 1092 1114 1098 1114 1106 1114 1092 1114

-
- - - -

1111 1114 1097 1114 1096 1114 1092 1114

-
- - - -

1095 1095 1096 1096 1097 1097 1105 1105

-

1106 1106 1098 1098 1099 1099 1100 1100

-

1101 1101 1106 1106 1100 1100 1102 1102

-

1107 1107 1101 1101 1102 1102 1108 1108

-

1109 1109 1107 1107 1108 1108 1110 1110

-

1111 1111 1109 1109 1110 1110 1112 1112

-

1103 1103 1111 1111 1112 1112 1104 1104

-
- - - -

1161 1163 1162 1164 1163 1165 1179 1181 1180 1182 1181 1183

-
- - - -

1113 1115 1114 1116 1115 1117 1116 1118

-

1117 1119 1118 1120 1119 1121 1120 1122

-

1121 1123 1122 1124 1123 1125 1124 1126

-

1125 1127 1126 1128 1127 1129 1128 1130

-

1129 1131 1130 1132 1131 1133 1132 1134

-

1133 1135 1134 1136 1135 1137 1136 1138

-

1137 1139 1138 1140 1139 1141 1140 1142

-

1141 1143 1142 1144 1143 1145 1144 1146

-

1145 1147 1146 1148 1147 1149 1148 1150

-

1149 1151 1150 1152 1151 1153 1152 1154

-

1153 1155 1154 1156 1155 1157 1156 1158

-

1157 1159 1158 1160 1159 1161 1160 1162

-

1164 1166 1165 1167 1166 1168 1167 1169 1168 1170 1169 1171 1170 1172 1171 1173 1172 1174 1173 1175 1174 1176 1175 1177 1176 1178 1177 1179 1178 1180

-
-
- - - CAT3DBagRep - - -
- - - - 0 -11.1125 0 0 -10.7338 2.87613 -47.625 -10.7338 2.87613 -47.625 -11.1125 0 0 -10.7338 -2.87613 0 -11.1125 0 -47.625 -11.1125 0 -47.625 -10.7338 -2.87613 0 -9.62371 -5.55625 0 -10.7338 -2.87613 -47.625 -10.7338 -2.87613 -47.625 -9.62371 -5.55625 0 -7.85773 -7.85772 0 -9.62371 -5.55625 -47.625 -9.62371 -5.55625 -47.625 -7.85773 -7.85772 0 -5.55625 -9.62371 0 -7.85773 -7.85772 -47.625 -7.85773 -7.85772 -47.625 -5.55625 -9.62371 0 -2.87613 -10.7339 0 -5.55625 -9.62371 -47.625 -5.55625 -9.62371 -47.625 -2.87613 -10.7339 0 0 -11.1125 0 -2.87613 -10.7339 -47.625 -2.87613 -10.7339 -47.625 0 -11.1125 0 2.87613 -10.7339 0 0 -11.1125 -47.625 0 -11.1125 -47.625 2.87613 -10.7339 0 5.55625 -9.62371 0 2.87613 -10.7339 -47.625 2.87613 -10.7339 -47.625 5.55625 -9.62371 0 7.85772 -7.85773 0 5.55625 -9.62371 -47.625 5.55625 -9.62371 -47.625 7.85772 -7.85773 0 9.62371 -5.55625 0 7.85772 -7.85773 -47.625 7.85772 -7.85773 -47.625 9.62371 -5.55625 0 10.7338 -2.87613 0 9.62371 -5.55625 -47.625 9.62371 -5.55625 -47.625 10.7339 -2.87612 -47.625 10.7339 -2.87612 -47.625 9.62371 -5.55625 -47.625 7.85772 -7.85773 -47.625 5.55625 -9.62371 -47.625 2.87613 -10.7339 -47.625 0 -11.1125 -47.625 -2.87613 -10.7339 -47.625 -5.55625 -9.62371 -47.625 -7.85773 -7.85772 -47.625 -9.62371 -5.55625 -47.625 -10.7338 -2.87613 -47.625 -11.1125 0 -47.625 -10.7338 2.87613 -47.625 -9.62371 5.55625 -47.625 -7.85772 7.85772 -47.625 -5.55625 9.62371 -47.625 -2.87613 10.7338 -47.625 0 11.1125 -47.625 2.87613 10.7338 -47.625 5.55625 9.62371 -47.625 7.85772 7.85772 -47.625 9.62371 5.55625 -47.625 10.7338 2.87613 -47.625 11.1125 0 0 10.7338 2.87613 0 11.1125 0 -47.625 11.1125 0 -47.625 10.7338 2.87613 0 9.62371 5.55625 0 10.7338 2.87613 -47.625 10.7338 2.87613 -47.625 9.62371 5.55625 0 7.85773 7.85772 0 9.62371 5.55625 -47.625 9.62371 5.55625 -47.625 7.85772 7.85772 0 5.55625 9.62371 0 7.85773 7.85772 -47.625 7.85772 7.85772 -47.625 5.55625 9.62371 0 2.87613 10.7338 0 5.55625 9.62371 -47.625 5.55625 9.62371 -47.625 2.87613 10.7338 0 0 11.1125 0 2.87613 10.7338 -47.625 2.87613 10.7338 -47.625 0 11.1125 0 -2.87613 10.7338 0 0 11.1125 -47.625 0 11.1125 -47.625 -2.87613 10.7338 0 -5.55625 9.62371 0 -2.87613 10.7338 -47.625 -2.87613 10.7338 -47.625 -5.55625 9.62371 0 -7.85772 7.85773 0 -5.55625 9.62371 -47.625 -5.55625 9.62371 -47.625 -7.85772 7.85772 0 -9.62371 5.55625 0 -7.85772 7.85773 -47.625 -7.85772 7.85772 -47.625 -9.62371 5.55625 0 -10.7338 2.87613 0 -9.62371 5.55625 -47.625 -9.62371 5.55625 -47.625 -10.7338 2.87613 0 -9.62371 5.55625 0 -10.7338 2.87613 0 -11.1125 0 0 -10.7338 -2.87613 0 -9.62371 -5.55625 0 -7.85773 -7.85772 0 -5.55625 -9.62371 0 -2.87613 -10.7339 0 0 -11.1125 0 2.87613 -10.7339 0 5.55625 -9.62371 0 7.85772 -7.85773 0 9.62371 -5.55625 0 10.7338 -2.87613 0 11.1125 0 0 10.7338 2.87613 0 9.62371 5.55625 0 7.85773 7.85772 0 5.55625 9.62371 0 2.87613 10.7338 0 0 11.1125 0 -2.87613 10.7338 0 -5.55625 9.62371 0 -7.85772 7.85773 0 11.1125 0 0 10.7338 -2.87613 -47.625 10.7339 -2.87612 -47.625 11.1125 0 -50.8 6.13363 1.6435 -50.8 5.49926 3.175 -47.625 5.49926 3.175 -47.625 6.13363 1.6435 -50.8 5.49926 3.175 -50.8 4.49013 4.49013 -47.625 4.49013 4.49013 -47.625 5.49926 3.175 -50.8 4.49013 4.49013 -50.8 3.175 5.49926 -47.625 3.175 5.49926 -47.625 4.49013 4.49013 -50.8 6.13363 -1.6435 -50.8 6.35 0 -47.625 6.35 0 -47.625 6.13363 -1.6435 -50.8 5.49926 -3.175 -50.8 6.13363 -1.6435 -47.625 6.13363 -1.6435 -47.625 5.49926 -3.175 -50.8 4.49013 -4.49013 -50.8 5.49926 -3.175 -47.625 5.49926 -3.175 -47.625 4.49013 -4.49013 -50.8 3.175 -5.49926 -50.8 4.49013 -4.49013 -47.625 4.49013 -4.49013 -47.625 3.175 -5.49926 -50.8 1.6435 -6.13363 -50.8 3.175 -5.49926 -47.625 3.175 -5.49926 -47.625 1.6435 -6.13363 -50.8 0 -6.35 -50.8 1.6435 -6.13363 -47.625 1.6435 -6.13363 -47.625 0 -6.35 -50.8 -1.6435 -6.13363 -50.8 0 -6.35 -47.625 0 -6.35 -47.625 -1.6435 -6.13363 -50.8 -3.175 -5.49926 -50.8 -1.6435 -6.13363 -47.625 -1.6435 -6.13363 -47.625 -3.175 -5.49926 -50.8 -4.49013 -4.49013 -50.8 -3.175 -5.49926 -47.625 -3.175 -5.49926 -47.625 -4.49013 -4.49013 -50.8 -5.49926 -3.175 -50.8 -4.49013 -4.49013 -47.625 -4.49013 -4.49013 -47.625 -5.49926 -3.175 -50.8 -6.13363 -1.6435 -50.8 -5.49926 -3.175 -47.625 -5.49926 -3.175 -47.625 -6.13363 -1.6435 -50.8 -6.35 0 -50.8 -6.13363 -1.6435 -47.625 -6.13363 -1.6435 -47.625 -6.35 0 -50.8 -6.13363 1.6435 -50.8 -6.35 0 -47.625 -6.35 0 -47.625 -6.13363 1.6435 -50.8 -5.49926 3.175 -50.8 -6.13363 1.6435 -47.625 -6.13363 1.6435 -47.625 -5.49926 3.175 -50.8 -4.49013 4.49013 -50.8 -5.49926 3.175 -47.625 -5.49926 3.175 -47.625 -4.49013 4.49013 -50.8 -3.175 5.49926 -50.8 -4.49013 4.49013 -47.625 -4.49013 4.49013 -47.625 -3.175 5.49926 -50.8 -1.6435 6.13363 -50.8 -3.175 5.49926 -47.625 -3.175 5.49926 -47.625 -1.6435 6.13363 -50.8 0 6.35 -50.8 -1.6435 6.13363 -47.625 -1.6435 6.13363 -47.625 0 6.35 -50.8 1.6435 6.13363 -50.8 0 6.35 -47.625 0 6.35 -47.625 1.6435 6.13363 -50.8 3.175 5.49926 -50.8 1.6435 6.13363 -47.625 1.6435 6.13363 -47.625 3.175 5.49926 -50.8 1.6435 6.13363 -50.8 3.175 5.49926 -50.8 4.49013 4.49013 -50.8 5.49926 3.175 -50.8 6.13363 1.6435 -50.8 6.35 0 -50.8 6.13363 -1.6435 -50.8 5.49926 -3.175 -50.8 4.49013 -4.49013 -50.8 3.175 -5.49926 -50.8 1.6435 -6.13363 -50.8 0 -6.35 -50.8 -1.6435 -6.13363 -50.8 -3.175 -5.49926 -50.8 -4.49013 -4.49013 -50.8 -5.49926 -3.175 -50.8 -6.13363 -1.6435 -50.8 -6.35 0 -50.8 -6.13363 1.6435 -50.8 -5.49926 3.175 -50.8 -4.49013 4.49013 -50.8 -3.175 5.49926 -50.8 -1.6435 6.13363 -50.8 0 6.35 -50.8 6.35 0 -50.8 6.13363 1.6435 -47.625 6.13363 1.6435 -47.625 6.35 0 - - - - - - - - - - 0 -1 0 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -1 0 0 -0.965932 -0.258797 0 -1 0 0 -1 0 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.707083 -0.70713 0 -0.499985 -0.866034 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 0 -1 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 0 -1 0 0.258797 -0.965932 0 0 -1 0 0 -1 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.965932 -0.258797 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.965932 0.258797 0 1 0 0 1 0 0 0.965932 0.258797 0 0.866034 0.499985 0 0.965932 0.258797 0 0.965932 0.258797 0 0.866034 0.499985 0 0.70713 0.707083 0 0.866034 0.499985 0 0.866034 0.499985 0 0.70713 0.707083 0 0.499985 0.866034 0 0.70713 0.707083 0 0.70713 0.707083 0 0.499985 0.866034 0 0.258797 0.965932 0 0.499985 0.866034 0 0.499985 0.866034 0 0.258797 0.965932 0 0 1 0 0.258797 0.965932 0 0.258797 0.965932 0 0 1 0 -0.258797 0.965932 0 0 1 0 0 1 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.258797 0.965932 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.965932 0.258797 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 0.965932 -0.258797 0 0.965932 -0.258797 0 1 0 0 0.965932 0.258797 0 0.866034 0.499985 0 0.866034 0.499985 0 0.965932 0.258797 0 0.866034 0.499985 0 0.707083 0.70713 0 0.707083 0.70713 0 0.866034 0.499985 0 0.707083 0.70713 0 0.499985 0.866034 0 0.499985 0.866034 0 0.707083 0.70713 0 0.965932 -0.258797 0 1 0 0 1 0 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0 -1 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0 -1 0 -0.258797 -0.965932 0 0 -1 0 0 -1 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.707083 -0.70713 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -1 0 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -1 0 0 -0.965932 0.258797 0 -1 0 0 -1 0 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.258797 0.965932 0 0 1 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0 1 0 0.258797 0.965932 0 0 1 0 0 1 0 0.258797 0.965932 0 0.499985 0.866034 0 0.258797 0.965932 0 0.258797 0.965932 0 0.499985 0.866034 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 0.965932 0.258797 0 0.965932 0.258797 0 1 0 - - - - - - - - - - - - - - -

0 0 1 1 2 2 3 3

-

4 4 5 5 6 6 7 7

-

8 8 9 9 10 10 11 11

-

12 12 13 13 14 14 15 15

-

16 16 17 17 18 18 19 19

-

20 20 21 21 22 22 23 23

-

24 24 25 25 26 26 27 27

-

28 28 29 29 30 30 31 31

-

32 32 33 33 34 34 35 35

-

36 36 37 37 38 38 39 39

-

40 40 41 41 42 42 43 43

-

44 44 45 45 46 46 47 47

-

48 48 49 49 50 50 51 51 52 52 53 53 54 54 55 55 56 56 57 57 58 58 59 59 60 60 61 61 62 62 63 63 64 64 65 65 66 66 67 67 68 68 69 69 70 70 71 71

-

72 72 73 73 74 74 75 75

-

76 76 77 77 78 78 79 79

-

80 80 81 81 82 82 83 83

-

84 84 85 85 86 86 87 87

-

88 88 89 89 90 90 91 91

-

92 92 93 93 94 94 95 95

-

96 96 97 97 98 98 99 99

-

100 100 101 101 102 102 103 103

-

104 104 105 105 106 106 107 107

-

108 108 109 109 110 110 111 111

-

112 112 113 113 114 114 115 115

-

116 116 117 117 118 118 119 119 120 120 121 121 122 122 123 123 124 124 125 125 126 126 127 127 128 128 129 129 130 130 131 131 132 132 133 133 134 134 135 135 136 136 137 137 138 138 139 139

-

140 140 141 141 142 142 143 143

-
- - - -

144 144 145 145 146 146 147 147

-

148 148 149 149 150 150 151 151

-

152 152 153 153 154 154 155 155

-

156 156 157 157 158 158 159 159

-

160 160 161 161 162 162 163 163

-

164 164 165 165 166 166 167 167

-

168 168 169 169 170 170 171 171

-

172 172 173 173 174 174 175 175

-

176 176 177 177 178 178 179 179

-

180 180 181 181 182 182 183 183

-

184 184 185 185 186 186 187 187

-

188 188 189 189 190 190 191 191

-

192 192 193 193 194 194 195 195

-

196 196 197 197 198 198 199 199

-

200 200 201 201 202 202 203 203

-

204 204 205 205 206 206 207 207

-

208 208 209 209 210 210 211 211

-

212 212 213 213 214 214 215 215

-

216 216 217 217 218 218 219 219

-

220 220 221 221 222 222 223 223

-

224 224 225 225 226 226 227 227

-

228 228 229 229 230 230 231 231

-

232 232 233 233 234 234 235 235

-

236 236 237 237 238 238 239 239 240 240 241 241 242 242 243 243 244 244 245 245 246 246 247 247 248 248 249 249 250 250 251 251 252 252 253 253 254 254 255 255 256 256 257 257 258 258 259 259

-

260 260 261 261 262 262 263 263

-
-
- - - CAT3DBagRep - - -
- - - - -11.1125 8.73125 0 -11.1125 8.43374 -2.25981 -25.4 3.06681 -0.82175 -25.4 3.175 0 0 8.73125 0 0 8.43374 -2.25981 -11.1125 8.43374 -2.25981 -11.1125 8.73125 0 -11.1125 7.56148 -4.36563 -11.1125 6.17392 -6.17393 -25.4 2.24506 -2.24506 -25.4 2.74963 -1.5875 -11.1125 6.17392 -6.17393 -11.1125 4.36562 -7.56148 -25.4 1.5875 -2.74963 -25.4 2.24506 -2.24506 -11.1125 4.36562 -7.56148 -11.1125 2.25981 -8.43374 -25.4 0.82175 -3.06681 -25.4 1.5875 -2.74963 -11.1125 2.25981 -8.43374 -11.1125 0 -8.73125 -25.4 0 -3.175 -25.4 0.82175 -3.06681 -11.1125 0 -8.73125 -11.1125 -2.25981 -8.43374 -25.4 -0.82175 -3.06681 -25.4 0 -3.175 -11.1125 -2.25981 -8.43374 -11.1125 -4.36562 -7.56148 -25.4 -1.5875 -2.74963 -25.4 -0.82175 -3.06681 -11.1125 -4.36562 -7.56148 -11.1125 -6.17393 -6.17392 -25.4 -2.24506 -2.24506 -25.4 -1.5875 -2.74963 -11.1125 -6.17393 -6.17392 -11.1125 -7.56148 -4.36562 -25.4 -2.74963 -1.5875 -25.4 -2.24506 -2.24506 -11.1125 -7.56148 -4.36562 -11.1125 -8.43374 -2.25981 -25.4 -3.06681 -0.821751 -25.4 -2.74963 -1.5875 -11.1125 -8.43374 -2.25981 -11.1125 -8.73125 0 -25.4 -3.175 0 -25.4 -3.06681 -0.821751 -11.1125 -8.73125 0 -11.1125 -8.43374 2.25981 -25.4 -3.06681 0.821751 -25.4 -3.175 0 -11.1125 -8.43374 2.25981 -11.1125 -7.56148 4.36562 -25.4 -2.74963 1.5875 -25.4 -3.06681 0.821751 -11.1125 -7.56148 4.36562 -11.1125 -6.17393 6.17393 -25.4 -2.24506 2.24506 -25.4 -2.74963 1.5875 -11.1125 -6.17393 6.17393 -11.1125 -4.36562 7.56148 -25.4 -1.5875 2.74963 -25.4 -2.24506 2.24506 -11.1125 -4.36562 7.56148 -11.1125 -2.25981 8.43374 -25.4 -0.82175 3.06681 -25.4 -1.5875 2.74963 -11.1125 -2.25981 8.43374 -11.1125 0 8.73125 -25.4 0 3.175 -25.4 -0.82175 3.06681 -11.1125 0 8.73125 -11.1125 2.25981 8.43374 -25.4 0.821751 3.06681 -25.4 0 3.175 -11.1125 2.25981 8.43374 -11.1125 4.36562 7.56148 -25.4 1.5875 2.74963 -25.4 0.821751 3.06681 -11.1125 4.36562 7.56148 -11.1125 6.17393 6.17393 -25.4 2.24506 2.24506 -25.4 1.5875 2.74963 -11.1125 6.17393 6.17393 -11.1125 7.56148 4.36562 -25.4 2.74963 1.5875 -25.4 2.24506 2.24506 0 6.17393 6.17393 0 7.56148 4.36562 -11.1125 7.56148 4.36562 -11.1125 6.17393 6.17393 0 4.36562 7.56148 0 6.17393 6.17393 -11.1125 6.17393 6.17393 -11.1125 4.36562 7.56148 0 2.25981 8.43374 0 4.36562 7.56148 -11.1125 4.36562 7.56148 -11.1125 2.25981 8.43374 0 0 8.73125 0 2.25981 8.43374 -11.1125 2.25981 8.43374 -11.1125 0 8.73125 0 -2.25981 8.43374 0 0 8.73125 -11.1125 0 8.73125 -11.1125 -2.25981 8.43374 0 -4.36562 7.56148 0 -2.25981 8.43374 -11.1125 -2.25981 8.43374 -11.1125 -4.36562 7.56148 0 -6.17393 6.17393 0 -4.36562 7.56148 -11.1125 -4.36562 7.56148 -11.1125 -6.17393 6.17393 0 -7.56148 4.36562 0 -6.17393 6.17393 -11.1125 -6.17393 6.17393 -11.1125 -7.56148 4.36562 0 -8.43374 2.25981 0 -7.56148 4.36562 -11.1125 -7.56148 4.36562 -11.1125 -8.43374 2.25981 0 -8.73125 0 0 -8.43374 2.25981 -11.1125 -8.43374 2.25981 -11.1125 -8.73125 0 0 -8.43374 -2.25981 0 -8.73125 0 -11.1125 -8.73125 0 -11.1125 -8.43374 -2.25981 0 -7.56148 -4.36562 0 -8.43374 -2.25981 -11.1125 -8.43374 -2.25981 -11.1125 -7.56148 -4.36562 0 -6.17393 -6.17392 0 -7.56148 -4.36562 -11.1125 -7.56148 -4.36562 -11.1125 -6.17393 -6.17392 0 -4.36562 -7.56148 0 -6.17393 -6.17392 -11.1125 -6.17393 -6.17392 -11.1125 -4.36562 -7.56148 0 -2.25981 -8.43374 0 -4.36562 -7.56148 -11.1125 -4.36562 -7.56148 -11.1125 -2.25981 -8.43374 0 0 -8.73125 0 -2.25981 -8.43374 -11.1125 -2.25981 -8.43374 -11.1125 0 -8.73125 0 2.25981 -8.43374 0 0 -8.73125 -11.1125 0 -8.73125 -11.1125 2.25981 -8.43374 0 4.36562 -7.56148 0 2.25981 -8.43374 -11.1125 2.25981 -8.43374 -11.1125 4.36562 -7.56148 0 6.17392 -6.17393 0 4.36562 -7.56148 -11.1125 4.36562 -7.56148 -11.1125 6.17392 -6.17393 0 7.56148 -4.36563 0 6.17392 -6.17393 -11.1125 6.17392 -6.17393 -11.1125 7.56148 -4.36563 0 8.43374 -2.25981 0 7.56148 -4.36563 -11.1125 7.56148 -4.36563 -11.1125 8.43374 -2.25981 -11.1125 8.43374 -2.25981 -11.1125 7.56148 -4.36563 -25.4 2.74963 -1.5875 -25.4 3.06681 -0.82175 -25.4 3.06681 -0.82175 -25.4 2.74963 -1.5875 -25.4 2.24506 -2.24506 -25.4 1.5875 -2.74963 -25.4 0.82175 -3.06681 -25.4 0 -3.175 -25.4 -0.82175 -3.06681 -25.4 -1.5875 -2.74963 -25.4 -2.24506 -2.24506 -25.4 -2.74963 -1.5875 -25.4 -3.06681 -0.821751 -25.4 -3.175 0 -25.4 -3.06681 0.821751 -25.4 -2.74963 1.5875 -25.4 -2.24506 2.24506 -25.4 -1.5875 2.74963 -25.4 -0.82175 3.06681 -25.4 0 3.175 -25.4 0.821751 3.06681 -25.4 1.5875 2.74963 -25.4 2.24506 2.24506 -25.4 2.74963 1.5875 -25.4 3.06681 0.82175 -25.4 3.175 0 -11.1125 7.56148 4.36562 -11.1125 8.43374 2.25981 -25.4 3.06681 0.82175 -25.4 2.74963 1.5875 0 7.56148 4.36562 0 8.43374 2.25981 -11.1125 8.43374 2.25981 -11.1125 7.56148 4.36562 0 8.73125 0 0 8.43374 2.25981 0 7.56148 4.36562 0 6.17393 6.17393 0 4.36562 7.56148 0 2.25981 8.43374 0 0 8.73125 0 -2.25981 8.43374 0 -4.36562 7.56148 0 -6.17393 6.17393 0 -7.56148 4.36562 0 -8.43374 2.25981 0 -8.73125 0 0 -8.43374 -2.25981 0 -7.56148 -4.36562 0 -6.17393 -6.17392 0 -4.36562 -7.56148 0 -2.25981 -8.43374 0 0 -8.73125 0 2.25981 -8.43374 0 4.36562 -7.56148 0 6.17392 -6.17393 0 7.56148 -4.36563 0 8.43374 -2.25981 0 8.43374 2.25981 0 8.73125 0 -11.1125 8.73125 0 -11.1125 8.43374 2.25981 -11.1125 8.43374 2.25981 -11.1125 8.73125 0 -25.4 3.175 0 -25.4 3.06681 0.82175 - - - - - - - - - - -0.184484 0.982835 0 -0.184484 0.949347 -0.254372 -0.362438 0.900251 -0.241218 -0.362438 0.932008 0 0 1 0 0 0.965932 -0.258797 -0.184484 0.949347 -0.254372 -0.184484 0.982835 0 -0.184484 0.851165 -0.491409 -0.184484 0.694968 -0.694972 -0.362438 0.659017 -0.659042 -0.362438 0.807152 -0.465987 -0.184484 0.694968 -0.694972 -0.184484 0.491409 -0.851165 -0.362438 0.465987 -0.807152 -0.362438 0.659017 -0.659042 -0.184484 0.491409 -0.851165 -0.184484 0.254372 -0.949347 -0.362438 0.241218 -0.900251 -0.362438 0.465987 -0.807152 -0.184484 0.254372 -0.949347 -0.184484 0 -0.982835 -0.362438 0 -0.932008 -0.362438 0.241218 -0.900251 -0.184484 0 -0.982835 -0.184484 -0.254372 -0.949347 -0.362438 -0.241218 -0.900251 -0.362438 0 -0.932008 -0.184484 -0.254372 -0.949347 -0.184484 -0.491409 -0.851165 -0.362438 -0.465987 -0.807152 -0.362438 -0.241218 -0.900251 -0.184484 -0.491409 -0.851165 -0.184484 -0.694972 -0.694968 -0.362438 -0.659042 -0.659017 -0.362438 -0.465987 -0.807152 -0.184484 -0.694968 -0.694972 -0.184484 -0.851165 -0.491409 -0.362438 -0.807152 -0.465987 -0.362438 -0.659042 -0.659017 -0.184484 -0.851165 -0.491409 -0.184484 -0.949347 -0.254372 -0.362438 -0.900251 -0.241218 -0.362438 -0.807152 -0.465987 -0.184484 -0.949347 -0.254372 -0.184484 -0.982835 0 -0.362438 -0.932008 0 -0.362438 -0.900251 -0.241218 -0.184484 -0.982835 0 -0.184484 -0.949347 0.254372 -0.362438 -0.900251 0.241218 -0.362438 -0.932008 0 -0.184484 -0.949347 0.254372 -0.184484 -0.851165 0.491409 -0.362438 -0.807152 0.465987 -0.362438 -0.900251 0.241218 -0.184484 -0.851165 0.491409 -0.184484 -0.694972 0.694968 -0.362438 -0.659017 0.659042 -0.362438 -0.807152 0.465987 -0.184484 -0.694968 0.694972 -0.184484 -0.491409 0.851165 -0.362438 -0.465987 0.807152 -0.362438 -0.659017 0.659042 -0.184484 -0.491409 0.851165 -0.184484 -0.254372 0.949347 -0.362438 -0.241218 0.900251 -0.362438 -0.465987 0.807152 -0.184484 -0.254372 0.949347 -0.184484 0 0.982835 -0.362438 0 0.932008 -0.362438 -0.241218 0.900251 -0.184484 0 0.982835 -0.184484 0.254372 0.949347 -0.362438 0.241218 0.900251 -0.362438 0 0.932008 -0.184484 0.254372 0.949347 -0.184484 0.491409 0.851165 -0.362438 0.465987 0.807152 -0.362438 0.241218 0.900251 -0.184484 0.491409 0.851165 -0.184484 0.694968 0.694972 -0.362438 0.659017 0.659042 -0.362438 0.465987 0.807152 -0.184484 0.694968 0.694972 -0.184484 0.851165 0.491409 -0.362438 0.807152 0.465987 -0.362438 0.659017 0.659042 0 0.707083 0.70713 0 0.866034 0.499985 -0.184484 0.851165 0.491409 -0.184484 0.694968 0.694972 0 0.499985 0.866034 0 0.707083 0.70713 -0.184484 0.694968 0.694972 -0.184484 0.491409 0.851165 0 0.258797 0.965932 0 0.499985 0.866034 -0.184484 0.491409 0.851165 -0.184484 0.254372 0.949347 0 0 1 0 0.258797 0.965932 -0.184484 0.254372 0.949347 -0.184484 0 0.982835 0 -0.258797 0.965932 0 0 1 -0.184484 0 0.982835 -0.184484 -0.254372 0.949347 0 -0.499985 0.866034 0 -0.258797 0.965932 -0.184484 -0.254372 0.949347 -0.184484 -0.491409 0.851165 0 -0.707083 0.70713 0 -0.499985 0.866034 -0.184484 -0.491409 0.851165 -0.184484 -0.694968 0.694972 0 -0.866034 0.499985 0 -0.707083 0.70713 -0.184484 -0.694968 0.694972 -0.184484 -0.851165 0.491409 0 -0.965932 0.258797 0 -0.866034 0.499985 -0.184484 -0.851165 0.491409 -0.184484 -0.949347 0.254372 0 -1 0 0 -0.965932 0.258797 -0.184484 -0.949347 0.254372 -0.184484 -0.982835 0 0 -0.965932 -0.258797 0 -1 0 -0.184484 -0.982835 0 -0.184484 -0.949347 -0.254372 0 -0.866034 -0.499985 0 -0.965932 -0.258797 -0.184484 -0.949347 -0.254372 -0.184484 -0.851165 -0.491409 0 -0.70713 -0.707083 0 -0.866034 -0.499985 -0.184484 -0.851165 -0.491409 -0.184484 -0.694972 -0.694968 0 -0.499985 -0.866034 0 -0.70713 -0.707083 -0.184484 -0.694972 -0.694968 -0.184484 -0.491409 -0.851165 0 -0.258797 -0.965932 0 -0.499985 -0.866034 -0.184484 -0.491409 -0.851165 -0.184484 -0.254372 -0.949347 0 0 -1 0 -0.258797 -0.965932 -0.184484 -0.254372 -0.949347 -0.184484 0 -0.982835 0 0.258797 -0.965932 0 0 -1 -0.184484 0 -0.982835 -0.184484 0.254372 -0.949347 0 0.499985 -0.866034 0 0.258797 -0.965932 -0.184484 0.254372 -0.949347 -0.184484 0.491409 -0.851165 0 0.707083 -0.70713 0 0.499985 -0.866034 -0.184484 0.491409 -0.851165 -0.184484 0.694968 -0.694972 0 0.866034 -0.499985 0 0.707083 -0.70713 -0.184484 0.694968 -0.694972 -0.184484 0.851165 -0.491409 0 0.965932 -0.258797 0 0.866034 -0.499985 -0.184484 0.851165 -0.491409 -0.184484 0.949347 -0.254372 -0.184484 0.949347 -0.254372 -0.184484 0.851165 -0.491409 -0.362438 0.807152 -0.465987 -0.362438 0.900251 -0.241218 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.184484 0.851165 0.491409 -0.184484 0.949347 0.254372 -0.362438 0.900251 0.241218 -0.362438 0.807152 0.465987 0 0.866034 0.499985 0 0.965932 0.258797 -0.184484 0.949347 0.254372 -0.184484 0.851165 0.491409 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.965932 0.258797 0 1 0 -0.184484 0.982835 0 -0.184484 0.949347 0.254372 -0.184484 0.949347 0.254372 -0.184484 0.982835 0 -0.362438 0.932008 0 -0.362438 0.900251 0.241218 - - - - - - - - - - - - - - -

0 0 1 1 2 2 3 3

-

4 4 5 5 6 6 7 7

-

8 8 9 9 10 10 11 11

-

12 12 13 13 14 14 15 15

-

16 16 17 17 18 18 19 19

-

20 20 21 21 22 22 23 23

-

24 24 25 25 26 26 27 27

-

28 28 29 29 30 30 31 31

-

32 32 33 33 34 34 35 35

-

36 36 37 37 38 38 39 39

-

40 40 41 41 42 42 43 43

-

44 44 45 45 46 46 47 47

-

48 48 49 49 50 50 51 51

-

52 52 53 53 54 54 55 55

-

56 56 57 57 58 58 59 59

-

60 60 61 61 62 62 63 63

-

64 64 65 65 66 66 67 67

-

68 68 69 69 70 70 71 71

-

72 72 73 73 74 74 75 75

-

76 76 77 77 78 78 79 79

-

80 80 81 81 82 82 83 83

-

84 84 85 85 86 86 87 87

-

88 88 89 89 90 90 91 91

-

92 92 93 93 94 94 95 95

-

96 96 97 97 98 98 99 99

-

100 100 101 101 102 102 103 103

-

104 104 105 105 106 106 107 107

-

108 108 109 109 110 110 111 111

-

112 112 113 113 114 114 115 115

-

116 116 117 117 118 118 119 119

-

120 120 121 121 122 122 123 123

-

124 124 125 125 126 126 127 127

-

128 128 129 129 130 130 131 131

-

132 132 133 133 134 134 135 135

-

136 136 137 137 138 138 139 139

-

140 140 141 141 142 142 143 143

-

144 144 145 145 146 146 147 147

-

148 148 149 149 150 150 151 151

-

152 152 153 153 154 154 155 155

-

156 156 157 157 158 158 159 159

-

160 160 161 161 162 162 163 163

-

164 164 165 165 166 166 167 167

-

168 168 169 169 170 170 171 171

-

172 172 173 173 174 174 175 175

-

176 176 177 177 178 178 179 179 180 180 181 181 182 182 183 183 184 184 185 185 186 186 187 187 188 188 189 189 190 190 191 191 192 192 193 193 194 194 195 195 196 196 197 197 198 198 199 199

-

200 200 201 201 202 202 203 203

-

204 204 205 205 206 206 207 207

-

208 208 209 209 210 210 211 211 212 212 213 213 214 214 215 215 216 216 217 217 218 218 219 219 220 220 221 221 222 222 223 223 224 224 225 225 226 226 227 227 228 228 229 229 230 230 231 231

-

232 232 233 233 234 234 235 235

-

236 236 237 237 238 238 239 239

-
-
- - - CAT3DBagRep - - -
- - - - -16.002 19.05 31.75 57.15 19.05 31.75 57.15 19.05 6.35 -16.002 19.05 6.35 53.74 -19.05 57.6516 57.15 -19.05 31.75 57.15 19.05 31.75 53.74 19.05 57.6516 -16.002 -19.05 31.75 -16.8675 -19.05 38.324 -16.002 -19.05 6.35 57.15 -19.05 6.35 -16.002 -32.1402 8.61195 -16.002 -33.274 0 57.15 -33.274 0 57.15 -32.1402 8.61195 -16.002 -28.8161 16.637 -16.002 -32.1402 8.61195 57.15 -32.1402 8.61195 57.15 -28.8161 16.637 -16.002 -23.5283 23.5283 -16.002 -28.8161 16.637 57.15 -28.8161 16.637 57.15 -23.5283 23.5283 -16.002 -16.637 28.8161 -16.002 -23.5283 23.5283 57.15 -23.5283 23.5283 57.15 -16.637 28.8161 -16.002 -8.61194 32.1402 -16.002 -16.637 28.8161 57.15 -16.637 28.8161 57.15 -8.61194 32.1402 -16.002 0 33.274 -16.002 -8.61194 32.1402 57.15 -8.61194 32.1402 57.15 0 33.274 -16.002 8.61195 32.1402 -16.002 0 33.274 57.15 0 33.274 57.15 8.61195 32.1402 -16.002 16.637 28.8161 -16.002 8.61195 32.1402 57.15 8.61195 32.1402 57.15 16.637 28.8161 -16.002 23.5283 23.5283 -16.002 16.637 28.8161 57.15 16.637 28.8161 57.15 23.5283 23.5283 -16.002 28.8161 16.637 -16.002 23.5283 23.5283 57.15 23.5283 23.5283 57.15 28.8161 16.637 57.15 32.1402 8.61195 57.15 28.8161 16.637 57.15 23.5283 23.5283 57.15 16.637 28.8161 57.15 8.61195 32.1402 57.15 0 33.274 57.15 -8.61194 32.1402 57.15 -16.637 28.8161 57.15 -23.5283 23.5283 57.15 -28.8161 16.637 57.15 -32.1402 8.61195 57.15 -33.274 0 57.15 -32.1402 -8.61195 57.15 -28.8161 -16.637 57.15 -23.5283 -23.5283 57.15 -16.637 -28.8161 57.15 -8.61194 -32.1402 57.15 0 -33.274 57.15 8.61194 -32.1402 57.15 16.637 -28.8161 57.15 23.5283 -23.5283 57.15 28.8161 -16.637 57.15 32.1402 -8.61194 57.15 33.274 0 57.15 -32.1402 -8.61195 -16.002 -32.1402 -8.61195 -16.002 -31.6455 -10.2822 57.15 -31.6455 -10.2822 -16.002 -33.274 0 -16.002 -32.1402 -8.61195 57.15 -32.1402 -8.61195 57.15 -33.274 0 -16.002 33.274 0 -16.002 32.1402 -8.61194 -16.002 28.8161 -16.637 -16.002 23.5283 -23.5283 -16.002 16.637 -28.8161 -16.002 8.61194 -32.1402 -16.002 0 -33.274 -16.002 -8.61194 -32.1402 -16.002 -16.637 -28.8161 -16.002 -23.5283 -23.5283 -16.002 -28.8161 -16.637 -16.002 -32.1402 -8.61195 -16.002 -33.274 0 -16.002 -32.1402 8.61195 -16.002 -28.8161 16.637 -16.002 -23.5283 23.5283 -16.002 -16.637 28.8161 -16.002 -8.61194 32.1402 -16.002 0 33.274 -16.002 8.61195 32.1402 -16.002 16.637 28.8161 -16.002 23.5283 23.5283 -16.002 28.8161 16.637 -16.002 32.1402 8.61195 -16.002 32.1402 8.61195 -16.002 28.8161 16.637 57.15 28.8161 16.637 57.15 32.1402 8.61195 -74.3996 -15.748 271.399 -117.348 -15.748 271.399 -117.348 -15.748 207.899 -74.3996 -15.748 207.899 -117.348 -15.748 271.399 -117.348 15.748 271.399 -117.348 15.748 207.899 -117.348 -15.748 207.899 -74.3996 -15.748 271.399 -74.3996 15.748 271.399 -117.348 15.748 271.399 -117.348 -15.748 271.399 -117.348 15.748 227.922 -117.348 15.748 271.399 -74.3996 15.748 271.399 -74.3996 15.748 227.922 -47.498 15.748 227.922 -47.498 15.748 207.899 -117.348 15.748 207.899 -117.348 15.748 227.922 -47.498 15.748 227.922 -47.498 -15.748 227.922 -47.498 -15.748 207.899 -47.498 15.748 207.899 -47.498 -15.748 227.922 -74.3996 -15.748 227.922 -74.3996 -15.748 207.899 -47.498 -15.748 207.899 -74.3996 15.748 227.922 -74.3996 -15.748 227.922 -47.498 -15.748 227.922 -47.498 15.748 227.922 -74.3996 -15.748 271.399 -74.3996 -15.748 227.922 -74.3996 15.748 227.922 -74.3996 15.748 271.399 57.15 -31.6455 -10.2822 -16.002 -31.6455 -10.2822 -16.002 -17.9096 -52.5567 57.15 -17.9096 -52.5567 57.15 31.6455 10.2822 57.15 -31.6455 -10.2822 57.15 -17.9096 -52.5567 57.15 45.3813 -31.9922 -16.002 31.6455 10.2822 57.15 31.6455 10.2822 57.15 45.3813 -31.9922 -16.002 45.3813 -31.9922 -16.002 -31.6455 -10.2822 -16.002 31.6455 10.2822 -16.002 45.3813 -31.9922 -16.002 -17.9096 -52.5567 -16.002 -17.9096 -52.5567 -16.002 45.3813 -31.9922 57.15 45.3813 -31.9922 57.15 -17.9096 -52.5567 57.15 19.05 31.75 57.15 -19.05 31.75 57.15 -19.05 6.35 57.15 19.05 6.35 -16.8675 -19.05 38.324 -15.3923 -19.05 198.084 -15.3923 19.05 198.084 -16.8675 -19.05 38.324 0.226875 -19.05 177.728 53.74 -19.05 57.6516 -15.3923 19.05 198.084 0.226875 19.05 177.728 -16.8675 -19.05 38.324 -16.002 19.05 31.75 53.74 19.05 57.6516 57.15 19.05 31.75 -16.002 19.05 31.75 0.226875 -19.05 177.728 53.74 -19.05 57.6516 53.74 19.05 57.6516 0.226875 19.05 177.728 -221.713 -19.05 -82.826 -299.456 -19.05 -77.9519 -235.175 -19.05 -127.276 -86.5509 -19.05 137.184 -221.713 19.05 -82.826 -217.424 5.75225 -126.243 -282.232 19.05 -107.785 -75.1644 19.05 130.609 -75.1644 19.05 130.609 -86.5509 -19.05 137.184 -212.006 -19.05 130.609 -212.006 19.05 130.609 -240.851 -19.05 -71.777 -243.058 19.05 -66.4474 -221.713 19.05 -82.826 -221.713 -19.05 -82.826 -15.3923 -19.05 198.084 -15.3923 19.05 198.084 -59.572 19.05 223.591 -59.572 -19.05 223.591 -217.124 19.05 223.054 -244.691 -19.05 211.636 -286.527 19.05 169.799 -297.946 -19.05 142.232 -282.232 19.05 -107.785 -299.456 -19.05 -77.9519 -217.424 5.75225 -126.243 -235.175 -19.05 -127.276 -217.424 -22.225 -104.775 -217.424 5.75225 -126.243 -217.424 22.225 -104.775 -221.713 -19.05 -82.826 -221.713 19.05 -82.826 -217.424 22.225 -104.775 -221.713 19.05 -82.826 -235.175 -19.05 -127.276 -221.713 -19.05 -82.826 -235.175 -19.05 -127.276 -217.424 -22.225 -104.775 -240.851 -19.05 -71.777 -212.006 -19.05 130.609 -297.946 -19.05 142.232 -244.691 -19.05 211.636 -59.572 -19.05 223.591 -243.058 19.05 -66.4474 -286.527 19.05 169.799 -212.006 19.05 130.609 -217.124 19.05 223.054 -59.572 19.05 223.591 -217.424 -21.4677 -99.0228 -217.424 -19.2474 -93.6625 -221.713 -19.05 -82.826 -217.424 -19.2474 -93.6625 -217.424 -15.7154 -89.0596 -217.424 -11.1125 -85.5276 -217.424 -5.75225 -83.3073 -217.424 -5.75225 -83.3073 -217.424 0 -82.55 -221.713 -19.05 -82.826 -217.424 0 -82.55 -221.713 19.05 -82.826 -217.424 5.75225 -83.3073 -217.424 5.75225 -83.3073 -217.424 11.1125 -85.5276 -221.713 19.05 -82.826 -221.713 19.05 -82.826 -217.424 15.7154 -89.0596 -217.424 19.2474 -93.6625 -217.424 19.2474 -93.6625 -217.424 21.4677 -99.0227 -217.424 21.4677 -99.0227 -235.175 19.05 -127.276 -217.424 19.2474 -115.888 -235.175 19.05 -127.276 -217.424 15.7154 -120.49 -235.175 19.05 -127.276 -217.424 11.1125 -124.022 -235.175 19.05 -127.276 -235.175 19.05 -127.276 -217.424 0 -127 -235.175 -19.05 -127.276 -235.175 19.05 -127.276 -217.424 -5.75225 -126.243 -235.175 -19.05 -127.276 -217.424 -11.1125 -124.022 -217.424 -15.7154 -120.49 -217.424 -22.225 -104.775 -217.424 -21.4677 -99.0228 -235.175 -19.05 -127.276 -217.424 -19.2474 -115.888 -235.175 -19.05 -127.276 -16.002 -19.05 31.75 -16.002 19.05 6.35 -16.002 -19.05 6.35 -16.8675 19.05 38.324 -19.405 19.05 44.45 -19.405 -19.05 44.45 -71.1278 19.05 125.349 -71.1299 -19.05 125.352 -75.1644 -19.05 130.609 -80.4249 19.05 134.646 -80.4249 -19.05 134.646 -86.5509 19.05 137.184 -93.1249 19.05 138.049 -93.1248 -19.05 138.049 -194.046 -19.05 138.049 -194.046 19.05 138.049 -200.62 19.05 137.184 -200.62 -19.05 137.184 -206.746 19.05 134.646 -206.746 -19.05 134.646 -216.043 19.05 125.349 -216.043 -19.05 125.349 -218.525 19.05 119.358 -218.525 -19.05 119.358 -243.811 -19.05 -60.728 -243.811 19.05 -60.728 -243.058 -19.05 -66.4474 -240.851 19.05 -71.777 -237.339 -19.05 -76.3537 -237.339 19.05 -76.3537 -232.762 -19.05 -79.8655 -232.762 19.05 -79.8655 -227.433 -19.05 -82.0731 -227.433 19.05 -82.0731 -221.713 19.05 -82.826 0.269409 -19.05 177.673 0.269409 19.05 177.673 -35.8031 -19.05 213.746 -35.8031 19.05 213.746 -85.0792 -19.05 226.949 -85.0791 19.05 226.949 -187.541 19.05 226.949 -187.541 -19.05 226.949 -217.124 -19.05 223.054 -244.691 19.05 211.636 -268.363 -19.05 193.471 -268.363 19.05 193.471 -286.527 -19.05 169.799 -297.946 19.05 142.232 -301.752 -19.05 113.323 -301.752 19.05 113.323 -301.752 19.05 -60.5099 -301.752 -19.05 -60.5099 -299.456 19.05 -77.9519 -292.808 19.05 -94.002 -292.808 -19.05 -94.002 -282.232 -19.05 -107.785 -268.449 19.05 -118.36 -268.449 -19.05 -118.36 -252.399 19.05 -125.008 -252.399 -19.05 -125.008 -235.175 19.05 -127.276 -217.424 -21.4677 -110.527 -217.424 -19.2474 -115.888 -217.424 -15.7154 -120.49 -217.424 -11.1125 -124.022 -217.424 -5.75225 -126.243 -217.424 0 -127 -217.424 11.1125 -124.022 -217.424 15.7154 -120.49 -217.424 19.2474 -115.888 -217.424 21.4677 -110.527 -217.424 21.4677 -99.0227 -217.424 19.2474 -93.6625 -217.424 5.75225 -83.3073 -217.424 0 -82.55 -217.424 -5.75225 -83.3073 -217.424 -19.2474 -93.6625 -217.424 -21.4677 -99.0228 43.7424 -19.05 81.788 43.7424 19.05 81.788 -211.074 -15.178 -113.538 -211.074 -16.9288 -109.311 -217.424 -16.9288 -109.311 -217.424 -15.178 -113.538 -211.074 -12.3928 -117.168 -211.074 -15.178 -113.538 -217.424 -15.178 -113.538 -217.424 -12.3928 -117.168 -211.074 -8.763 -119.953 -211.074 -12.3928 -117.168 -217.424 -12.3928 -117.168 -217.424 -8.763 -119.953 -211.074 -4.53606 -121.704 -211.074 -8.763 -119.953 -217.424 -8.763 -119.953 -217.424 -4.53606 -121.704 -211.074 0 -122.301 -211.074 -4.53606 -121.704 -217.424 -4.53606 -121.704 -217.424 0 -122.301 -211.074 4.53606 -121.704 -211.074 0 -122.301 -217.424 0 -122.301 -217.424 4.53606 -121.704 -211.074 8.763 -119.953 -211.074 4.53606 -121.704 -217.424 4.53606 -121.704 -217.424 8.763 -119.953 -211.074 12.3928 -117.168 -211.074 8.763 -119.953 -217.424 8.763 -119.953 -217.424 12.3928 -117.168 -211.074 15.178 -113.538 -211.074 12.3928 -117.168 -217.424 12.3928 -117.168 -217.424 15.178 -113.538 -211.074 16.9288 -109.311 -211.074 15.178 -113.538 -217.424 15.178 -113.538 -217.424 16.9288 -109.311 -211.074 17.526 -104.775 -211.074 16.9288 -109.311 -217.424 16.9288 -109.311 -217.424 17.526 -104.775 -211.074 16.9288 -100.239 -211.074 17.526 -104.775 -217.424 17.526 -104.775 -217.424 16.9288 -100.239 -211.074 15.178 -96.012 -211.074 16.9288 -100.239 -217.424 16.9288 -100.239 -217.424 15.178 -96.012 -211.074 12.3928 -92.3822 -211.074 15.178 -96.012 -217.424 15.178 -96.012 -217.424 12.3928 -92.3822 -211.074 8.763 -89.597 -211.074 12.3928 -92.3822 -217.424 12.3928 -92.3822 -217.424 8.763 -89.597 -211.074 4.53606 -87.8462 -211.074 8.763 -89.597 -217.424 8.763 -89.597 -217.424 4.53606 -87.8462 -211.074 0 -87.249 -211.074 4.53606 -87.8462 -217.424 4.53606 -87.8462 -217.424 0 -87.249 -211.074 -4.53606 -87.8462 -211.074 0 -87.249 -217.424 0 -87.249 -217.424 -4.53606 -87.8462 -211.074 -8.763 -89.597 -211.074 -4.53606 -87.8462 -217.424 -4.53606 -87.8462 -217.424 -8.763 -89.597 -211.074 -12.3928 -92.3822 -211.074 -8.763 -89.597 -217.424 -8.763 -89.597 -217.424 -12.3928 -92.3822 -211.074 -15.178 -96.012 -211.074 -12.3928 -92.3822 -217.424 -12.3928 -92.3822 -217.424 -15.178 -96.012 -211.074 -16.9288 -100.239 -211.074 -15.178 -96.012 -217.424 -15.178 -96.012 -217.424 -16.9288 -100.239 -217.424 -16.9288 -100.239 -217.424 -15.178 -96.012 -217.424 -12.3928 -92.3822 -217.424 -8.763 -89.597 -217.424 -4.53606 -87.8462 -217.424 0 -87.249 -217.424 4.53606 -87.8462 -217.424 8.763 -89.597 -217.424 12.3928 -92.3822 -217.424 15.178 -96.012 -217.424 16.9288 -100.239 -217.424 17.526 -104.775 -217.424 16.9288 -109.311 -217.424 15.178 -113.538 -217.424 12.3928 -117.168 -217.424 8.763 -119.953 -217.424 4.53606 -121.704 -217.424 0 -122.301 -217.424 -4.53606 -121.704 -217.424 -8.763 -119.953 -217.424 -12.3928 -117.168 -217.424 -15.178 -113.538 -217.424 -16.9288 -109.311 -217.424 -17.526 -104.775 -211.074 -16.9288 -109.311 -211.074 -17.526 -104.775 -217.424 -17.526 -104.775 -217.424 -16.9288 -109.311 -211.074 -17.526 -104.775 -211.074 -16.9288 -109.311 -211.074 -15.178 -113.538 -211.074 -12.3928 -117.168 -211.074 -8.763 -119.953 -211.074 -4.53606 -121.704 -211.074 0 -122.301 -211.074 4.53606 -121.704 -211.074 8.763 -119.953 -211.074 12.3928 -117.168 -211.074 15.178 -113.538 -211.074 16.9288 -109.311 -211.074 17.526 -104.775 -211.074 16.9288 -100.239 -211.074 15.178 -96.012 -211.074 12.3928 -92.3822 -211.074 8.763 -89.597 -211.074 4.53606 -87.8462 -211.074 0 -87.249 -211.074 -4.53606 -87.8462 -211.074 -8.763 -89.597 -211.074 -12.3928 -92.3822 -211.074 -15.178 -96.012 -211.074 -16.9288 -100.239 -211.074 -17.526 -104.775 -211.074 -16.9288 -100.239 -217.424 -16.9288 -100.239 -217.424 -17.526 -104.775 - - - - - - - - - - 0 1 0 0 -1 0 0.991445 0 0.130527 0 -0.965932 0.258797 0 -1 0 0 -1 0 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.258797 0.965932 0 0 1 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0 1 0 0.258797 0.965932 0 0 1 0 0 1 0 0.258797 0.965932 0 0.499985 0.866034 0 0.258797 0.965932 0 0.258797 0.965932 0 0.499985 0.866034 0 0.707083 0.70713 0 0.499985 0.866034 0 0.499985 0.866034 0 0.707083 0.70713 0 0.866034 0.499985 0 0.707083 0.70713 0 0.707083 0.70713 0 0.866034 0.499985 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -0.978152 -0.207892 0 -0.978152 -0.207892 0 -0.958823 -0.284005 0 -0.958823 -0.284005 0 -1 0 0 -0.978152 -0.207892 0 -0.978152 -0.207892 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.923884 0.382672 0 0.866034 0.499985 0 0.866034 0.499985 0 0.923884 0.382672 0 -1 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 1 1 0 0 1 0 0 1 0 0 1 0 0 0 -0.951062 -0.309 0 -0.951062 -0.309 0 -0.951062 -0.309 0 -0.951062 -0.309 1 0 0 1 0 0 1 0 0 1 0 0 0 0.951062 0.309 0 0.951062 0.309 0 0.951062 0.309 0 0.951062 0.309 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.309 -0.951062 0 0.309 -0.951062 0 0.309 -0.951062 0 0.309 -0.951062 1 0 0 -0.965932 0 -0.258797 -0.115543 -0.990683 0.0720847 -0.115543 -0.990683 0.0720847 -0.115543 -0.990683 0.0720847 -0.115543 -0.990683 0.0720847 -0.115543 -0.990683 0.0720847 0.0621967 0.978176 -0.198248 0.0621967 0.978176 -0.198248 0.0621967 0.978176 -0.198248 0.0621967 0.978176 -0.198248 0.0621967 0.978176 -0.198248 0.0621967 0.978176 -0.198248 -0.997859 0 -0.0654012 0.910714 0 0.413038 0.923884 0 0.382672 0.923884 0 0.382672 0.910714 0 0.413038 -0.115543 -0.990683 0.0720847 -0.115543 -0.990683 0.0720847 -0.0425733 -0.997363 -0.0587787 -0.115543 -0.990683 0.0720847 0.0621967 0.978176 -0.198248 0.0621967 0.978176 -0.198248 0.0621967 0.978176 -0.198248 0.0621967 0.978176 -0.198248 -0.70713 0 -0.707083 -0.258797 0 -0.965932 0.70713 0 -0.707083 0.70713 0 -0.707083 0.866034 0 0.499985 0.965932 0 0.258797 0.569048 0.210425 0.794925 0.569048 -0.210425 0.794925 0.707083 0 0.70713 0.707083 0 0.70713 0.258797 0 0.965932 0.258797 0 0.965932 -0.258797 0 0.965932 -0.499985 0 0.866034 -0.866034 0 0.499985 -0.965932 0 0.258797 -0.707083 0 -0.70713 -0.965932 0 -0.258797 0.240791 0.248543 -0.938214 0.0926847 -0.126164 -0.98767 1 0 0 1 0 0 1 0 0 0.80623 -0.427381 0.40907 0.80623 0.427381 0.40907 -0.0654012 0.997758 -0.0142216 -0.115543 0.990683 0.0720847 0.25782 -0.511002 -0.820003 -0.115543 -0.990683 0.0720847 -0.115543 -0.990683 0.0720847 -0.0654012 -0.997758 -0.0142216 -0.115543 -0.990683 0.0720847 -0.115543 -0.990683 0.0720847 -0.115543 -0.990683 0.0720847 -0.115543 -0.990683 0.0720847 -0.115543 -0.990683 0.0720847 0.0621967 0.978176 -0.198248 0.0621967 0.978176 -0.198248 0.0621967 0.978176 -0.198248 0.0621967 0.978176 -0.198248 0.0621967 0.978176 -0.198248 0.678769 -0.678457 0.281014 0.763581 -0.56505 0.31251 0.763202 -0.377697 0.524277 0.891249 -0.396863 0.219489 0.929045 -0.262581 0.260628 0.919849 -0.192633 0.341716 0.833811 -0.129917 0.536546 0.642598 -0.180334 0.74468 0.295175 0 0.955443 0.179693 -0.0397046 0.982921 0.295175 0 0.955443 0.179693 0.0397046 0.982921 0.642598 0.180334 0.74468 0.833811 0.129917 0.536546 0.919849 0.192633 0.341716 0.763202 0.377697 0.524277 0.763202 0.377697 0.524277 0.929045 0.262581 0.260628 0.891249 0.396863 0.219489 0.763581 0.56505 0.31251 0.678769 0.678457 0.281014 -0.0657979 0.989299 0.130222 -0.0425733 0.997363 -0.0587787 0.261147 0.86812 -0.422101 0.137028 0.935142 -0.326701 0.373791 0.656408 -0.655293 0.261177 0.713992 -0.649617 0.35667 0.465743 -0.809858 0.25782 0.511002 -0.820003 0.19834 0.322642 -0.925507 0.108432 0 -0.994104 0.156896 -0.221381 -0.962483 0.156896 0.221381 -0.962483 0.240791 -0.248543 -0.938214 0.19834 -0.322642 -0.925507 0.35667 -0.465743 -0.809858 0.373791 -0.656408 -0.655293 -0.0654012 -0.997758 -0.0142216 -0.0657979 -0.989299 0.130222 0.137028 -0.935142 -0.326701 0.261147 -0.86812 -0.422101 0.261177 -0.713992 -0.649617 -0.997859 0 -0.0654012 -1 0 0 -1 0 0 -0.965932 0 -0.258797 -0.886647 0 -0.462447 -0.886647 0 -0.462447 -0.81869 0 -0.574236 -0.81869 0 -0.574236 -0.70713 0 -0.707083 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.258797 0 -0.965932 -0.0654012 0 -0.997859 -0.0654012 0 -0.997859 0.0654012 0 -0.997859 0.0654012 0 -0.997859 0.258797 0 -0.965932 0.258797 0 -0.965932 0.499985 0 -0.866034 0.499985 0 -0.866034 0.866034 0 -0.499985 0.866034 0 -0.499985 0.96481 0 -0.262947 0.96481 0 -0.262947 0.999991 0 -0.00427259 0.999991 0 -0.00427259 0.965932 0 0.258797 0.866034 0 0.499985 0.707083 0 0.70713 0.707083 0 0.70713 0.499985 0 0.866034 0.499985 0 0.866034 0.258797 0 0.965932 0.258797 0 0.965932 0.179693 0.0397046 0.982921 0.79336 0 0.608753 0.79336 0 0.608753 0.499985 0 0.866034 0.499985 0 0.866034 0.0654012 0 0.997859 0.0654012 0 0.997859 -0.0654012 0 0.997859 -0.0654012 0 0.997859 -0.258797 0 0.965932 -0.499985 0 0.866034 -0.70713 0 0.707083 -0.70713 0 0.707083 -0.866034 0 0.499985 -0.965932 0 0.258797 -0.997859 0 0.0654012 -0.997859 0 0.0654012 -0.997859 0 -0.0654012 -0.997859 0 -0.0654012 -0.965932 0 -0.258797 -0.866034 0 -0.499985 -0.866034 0 -0.499985 -0.707083 0 -0.70713 -0.499985 0 -0.866034 -0.499985 0 -0.866034 -0.258797 0 -0.965932 -0.258797 0 -0.965932 0.0926847 0.126164 -0.98767 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0.957162 0.229713 0.176275 0.946143 0.123875 0.299112 1 0 0 0.946143 -0.123875 0.299112 0.957162 -0.229713 0.176275 1 0 0 0.917429 0 0.3979 0.917429 0 0.3979 -0.115545 -0.990683 0.0720859 0.0622078 0.978172 -0.198266 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.70713 -0.707083 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.70713 -0.707083 0 -0.499985 -0.866034 0 -0.70713 -0.707083 0 -0.70713 -0.707083 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 0 -1 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 0 -1 0 0.258797 -0.965932 0 0 -1 0 0 -1 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.70713 -0.707083 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.70713 -0.707083 0 0.866034 -0.499985 0 0.70713 -0.707083 0 0.70713 -0.707083 0 0.866034 -0.499985 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.965932 -0.258797 0 1 0 0 0.965932 -0.258797 0 0.965932 -0.258797 0 1 0 0 0.965932 0.258797 0 1 0 0 1 0 0 0.965932 0.258797 0 0.866034 0.499985 0 0.965932 0.258797 0 0.965932 0.258797 0 0.866034 0.499985 0 0.707083 0.70713 0 0.866034 0.499985 0 0.866034 0.499985 0 0.707083 0.70713 0 0.499985 0.866034 0 0.707083 0.70713 0 0.707083 0.70713 0 0.499985 0.866034 0 0.258797 0.965932 0 0.499985 0.866034 0 0.499985 0.866034 0 0.258797 0.965932 0 0 1 0 0.258797 0.965932 0 0.258797 0.965932 0 0 1 0 -0.258797 0.965932 0 0 1 0 0 1 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.258797 0.965932 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.965932 0.258797 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 -0.965932 -0.258797 0 -1 0 0 -1 0 0 -0.965932 -0.258797 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -1 0 - - - - - - - - - - - - - - -

0 0 1 0 2 0 3 0

-
- - - -

8 1 5 1 4 1 9 1

-

5 1 8 1 10 1 11 1

-
- - - -

4 2 5 2 6 2 7 2

-
- - - -

12 3 13 4 14 5 15 6

-

16 7 17 8 18 9 19 10

-

20 11 21 12 22 13 23 14

-

24 15 25 16 26 17 27 18

-

28 19 29 20 30 21 31 22

-

32 23 33 24 34 25 35 26

-

36 27 37 28 38 29 39 30

-

40 31 41 32 42 33 43 34

-

44 35 45 36 46 37 47 38

-

48 39 49 40 50 41 51 42

-

52 43 53 44 54 45 55 46 56 47 57 48 58 49 59 50 60 51 61 52 62 53 63 54 64 55 65 56 66 57 67 58 68 59 69 60 70 61 71 62 72 63 73 64 74 65 75 66

-

76 67 77 68 78 69 79 70

-

80 71 81 72 82 73 83 74

-

84 75 85 76 86 77 87 78 88 79 89 80 90 81 91 82 92 83 93 84 94 85 95 86 96 87 97 88 98 89 99 90 100 91 101 92 102 93 103 94 104 95 105 96 106 97 107 98

-

108 99 109 100 110 101 111 102

-
- - - -

112 103 113 104 114 105 115 106

-

116 107 117 108 118 109 119 110

-

120 111 121 112 122 113 123 114

-

124 115 125 116 126 117 127 118

-

128 119 129 120 130 121 131 122

-

132 123 133 124 134 125 135 126

-

136 127 137 128 138 129 139 130

-

140 131 141 132 142 133 143 134

-

144 135 145 136 146 137 147 138

-
- - - -

148 139 149 140 150 141 151 142

-

152 143 153 144 154 145 155 146

-

156 147 157 148 158 149 159 150

-

160 151 161 152 162 153 163 154

-

164 155 165 156 166 157 167 158

-
- - - -

168 159 169 159 170 159 171 159

-
- - - -

287 349 285 349 185 349

-
- - - -

220 349 312 349 340 349 279 349

-

310 349 338 349 340 349 312 349

-

308 349 336 349 338 349 310 349

-

201 349 335 349 336 349 308 349

-

306 349 190 349 335 349 201 349

-

304 349 332 349 190 349 306 349

-

303 349 329 349 332 349 304 349

-

230 349 329 349 303 349 301 349

-

327 349 230 349 301 349 199 349

-

325 349 327 349 199 349 299 349

-

231 349 325 349 299 349 297 349

-

297 349 294 349 323 349 231 349

-

294 349 293 349 319 349 322 349 323 349

-

293 349 192 349 208 349 319 349

-

192 349 290 349 317 349 208 349

-

290 349 288 349 205 349 317 349

-

288 349 287 349 185 349 205 349

-

285 349 180 349 186 349 359 349 185 349

-
- - - -

188 350 284 350 286 350

-
- - - -

264 350 339 350 313 350 221 350

-

313 350 339 350 337 350 311 350

-

311 350 337 350 195 350 309 350

-

309 350 195 350 334 350 307 350

-

307 350 334 350 333 350 202 350

-

202 350 333 350 331 350 305 350

-

305 350 331 350 330 350 302 350

-

300 350 302 350 330 350 328 350

-

200 350 300 350 328 350 234 350

-

298 350 200 350 234 350 326 350

-

296 350 298 350 326 350 324 350

-

324 350 236 350 295 350 296 350

-

236 350 321 350 320 350 292 350 295 350

-

320 350 207 350 291 350 292 350

-

207 350 318 350 289 350 291 350

-

318 350 206 350 196 350 289 350

-

206 350 188 350 286 350 196 350

-

283 350 187 350 183 350 181 350

-

188 350 360 350 187 350 283 350 284 350

-
- - - -

238 226 239 227 220 208 240 228 241 229 242 230 242 230 243 231 240 228 240 228 243 231 244 232 245 233 246 234 204 192 247 235 248 236 249 237 203 191 248 236 250 238 251 239 252 240 253 241 254 242 252 240 255 243 255 243 256 244 254 242 221 209 257 245 258 246 259 247 222 210 223 211 222 210 260 248 223 211 261 249 262 250 222 210 263 251 264 252 261 249 265 253 266 254 263 251 215 203 267 255 265 253 268 256 267 255 215 203 269 257 270 258 268 256 271 259 272 260 268 256 273 261 272 260 271 259 274 262 224 212 273 261 225 213 275 263 276 264 189 177 191 179 275 263 227 215 277 265 278 266 278 266 279 267 274 262

-
- - - -

280 268 184 172 281 269 282 270

-

283 271 184 172 280 268 172 160

-

284 272 283 271 172 160 285 273

-

286 274 284 272 285 273 287 275

-

197 185 286 274 287 275 288 276

-

289 277 197 185 288 276 290 278

-

291 279 289 277 290 278 198 186

-

292 280 291 279 198 186 293 281

-

293 281 294 282 295 283 292 280

-

296 284 295 283 294 282 297 285

-

298 286 296 284 297 285 299 287

-

200 188 298 286 299 287 199 187

-

300 288 200 188 199 187 301 289

-

302 290 300 288 301 289 303 291

-

302 290 303 291 304 292 305 293

-

304 292 306 294 202 190 305 293

-

306 294 201 189 307 295 202 190

-

201 189 308 296 309 297 307 295

-

308 296 310 298 311 299 309 297

-

310 298 312 300 313 301 311 299

-

312 300 247 235 314 302 313 301

-

205 193 315 303 316 304 206 194

-

317 305 205 193 206 194 318 306

-

208 196 317 305 318 306 207 195

-

319 307 208 196 207 195 320 308

-

320 308 321 309 322 310 319 307

-

323 311 322 310 321 309 209 197

-

210 198 323 311 209 197 324 312

-

325 313 210 198 324 312 326 314

-

327 315 325 313 326 314 211 199

-

212 200 327 315 211 199 328 316

-

329 317 212 200 328 316 330 318

-

330 318 331 319 332 320 329 317

-

333 321 214 202 332 320 331 319

-

333 321 334 322 335 323 214 202

-

334 322 213 201 336 324 335 323

-

213 201 337 325 338 326 336 324

-

337 325 339 327 340 328 338 326

-

339 327 341 329 216 204 340 328

-

217 205 342 330 343 331 344 332 345 333 346 334 347 335 218 206 348 336 349 337 350 338 351 339 219 207 352 340 353 341 255 243 252 240 354 342 355 343 356 344 243 231 242 230 357 345 358 346

-
- - - -

238 226 239 227 220 208 240 228 241 229 242 230 242 230 243 231 240 228 240 228 243 231 244 232 245 233 246 234 204 192 247 235 248 236 249 237 203 191 248 236 250 238 251 239 252 240 253 241 254 242 252 240 255 243 255 243 256 244 254 242 221 209 257 245 258 246 259 247 222 210 223 211 222 210 260 248 223 211 261 249 262 250 222 210 263 251 264 252 261 249 265 253 266 254 263 251 215 203 267 255 265 253 268 256 267 255 215 203 269 257 270 258 268 256 271 259 272 260 268 256 273 261 272 260 271 259 274 262 224 212 273 261 225 213 275 263 276 264 189 177 191 179 275 263 227 215 277 265 278 266 278 266 279 267 274 262

-
- - - -

280 268 184 172 281 269 282 270

-

283 271 184 172 280 268 172 160

-

284 272 283 271 172 160 285 273

-

286 274 284 272 285 273 287 275

-

197 185 286 274 287 275 288 276

-

289 277 197 185 288 276 290 278

-

291 279 289 277 290 278 198 186

-

292 280 291 279 198 186 293 281

-

293 281 294 282 295 283 292 280

-

296 284 295 283 294 282 297 285

-

298 286 296 284 297 285 299 287

-

200 188 298 286 299 287 199 187

-

300 288 200 188 199 187 301 289

-

302 290 300 288 301 289 303 291

-

302 290 303 291 304 292 305 293

-

304 292 306 294 202 190 305 293

-

306 294 201 189 307 295 202 190

-

201 189 308 296 309 297 307 295

-

308 296 310 298 311 299 309 297

-

310 298 312 300 313 301 311 299

-

312 300 247 235 314 302 313 301

-

205 193 315 303 316 304 206 194

-

317 305 205 193 206 194 318 306

-

208 196 317 305 318 306 207 195

-

319 307 208 196 207 195 320 308

-

320 308 321 309 322 310 319 307

-

323 311 322 310 321 309 209 197

-

210 198 323 311 209 197 324 312

-

325 313 210 198 324 312 326 314

-

327 315 325 313 326 314 211 199

-

212 200 327 315 211 199 328 316

-

329 317 212 200 328 316 330 318

-

330 318 331 319 332 320 329 317

-

333 321 214 202 332 320 331 319

-

333 321 334 322 335 323 214 202

-

334 322 213 201 336 324 335 323

-

213 201 337 325 338 326 336 324

-

337 325 339 327 340 328 338 326

-

339 327 341 329 216 204 340 328

-

217 205 342 330 343 331 344 332 345 333 346 334 347 335 218 206 348 336 349 337 350 338 351 339 219 207 352 340 353 341 255 243 252 240 354 342 355 343 356 344 243 231 242 230 357 345 358 346

-

185 173 359 347 360 348 188 176

-

359 347 186 174 187 175 360 348

-
- - - -

361 351 362 352 363 353 364 354

-

365 355 366 356 367 357 368 358

-

369 359 370 360 371 361 372 362

-

373 363 374 364 375 365 376 366

-

377 367 378 368 379 369 380 370

-

381 371 382 372 383 373 384 374

-

385 375 386 376 387 377 388 378

-

389 379 390 380 391 381 392 382

-

393 383 394 384 395 385 396 386

-

397 387 398 388 399 389 400 390

-

401 391 402 392 403 393 404 394

-

405 395 406 396 407 397 408 398

-

409 399 410 400 411 401 412 402

-

413 403 414 404 415 405 416 406

-

417 407 418 408 419 409 420 410

-

421 411 422 412 423 413 424 414

-

425 415 426 416 427 417 428 418

-

429 419 430 420 431 421 432 422

-

433 423 434 424 435 425 436 426

-

437 427 438 428 439 429 440 430

-

441 431 442 432 443 433 444 434

-

445 435 446 436 447 437 448 438

-

449 439 450 440 451 441 452 442 453 443 454 444 455 445 456 446 457 447 458 448 459 449 460 450 461 451 462 452 463 453 464 454 465 455 466 456 467 457 468 458 469 459 470 460 471 461 472 462

-

473 463 474 464 475 465 476 466

-

477 467 478 468 479 469 480 470 481 471 482 472 483 473 484 474 485 475 486 476 487 477 488 478 489 479 490 480 491 481 492 482 493 483 494 484 495 485 496 486 497 487 498 488 499 489 500 490

-

501 491 502 492 503 493 504 494

-
-
- - - CAT3DBagRep - - -
- - - - 0 -11.1125 0 0 -10.7338 2.87613 -47.625 -10.7338 2.87613 -47.625 -11.1125 0 0 -10.7338 -2.87613 0 -11.1125 0 -47.625 -11.1125 0 -47.625 -10.7338 -2.87613 0 -9.62371 -5.55625 0 -10.7338 -2.87613 -47.625 -10.7338 -2.87613 -47.625 -9.62371 -5.55625 0 -7.85773 -7.85772 0 -9.62371 -5.55625 -47.625 -9.62371 -5.55625 -47.625 -7.85773 -7.85772 0 -5.55625 -9.62371 0 -7.85773 -7.85772 -47.625 -7.85773 -7.85772 -47.625 -5.55625 -9.62371 0 -2.87613 -10.7339 0 -5.55625 -9.62371 -47.625 -5.55625 -9.62371 -47.625 -2.87613 -10.7339 0 0 -11.1125 0 -2.87613 -10.7339 -47.625 -2.87613 -10.7339 -47.625 0 -11.1125 0 2.87613 -10.7339 0 0 -11.1125 -47.625 0 -11.1125 -47.625 2.87613 -10.7339 0 5.55625 -9.62371 0 2.87613 -10.7339 -47.625 2.87613 -10.7339 -47.625 5.55625 -9.62371 0 7.85772 -7.85773 0 5.55625 -9.62371 -47.625 5.55625 -9.62371 -47.625 7.85772 -7.85773 0 9.62371 -5.55625 0 7.85772 -7.85773 -47.625 7.85772 -7.85773 -47.625 9.62371 -5.55625 0 10.7338 -2.87613 0 9.62371 -5.55625 -47.625 9.62371 -5.55625 -47.625 10.7339 -2.87612 -47.625 10.7339 -2.87612 -47.625 9.62371 -5.55625 -47.625 7.85772 -7.85773 -47.625 5.55625 -9.62371 -47.625 2.87613 -10.7339 -47.625 0 -11.1125 -47.625 -2.87613 -10.7339 -47.625 -5.55625 -9.62371 -47.625 -7.85773 -7.85772 -47.625 -9.62371 -5.55625 -47.625 -10.7338 -2.87613 -47.625 -11.1125 0 -47.625 -10.7338 2.87613 -47.625 -9.62371 5.55625 -47.625 -7.85772 7.85772 -47.625 -5.55625 9.62371 -47.625 -2.87613 10.7338 -47.625 0 11.1125 -47.625 2.87613 10.7338 -47.625 5.55625 9.62371 -47.625 7.85772 7.85772 -47.625 9.62371 5.55625 -47.625 10.7338 2.87613 -47.625 11.1125 0 0 10.7338 2.87613 0 11.1125 0 -47.625 11.1125 0 -47.625 10.7338 2.87613 0 9.62371 5.55625 0 10.7338 2.87613 -47.625 10.7338 2.87613 -47.625 9.62371 5.55625 0 7.85773 7.85772 0 9.62371 5.55625 -47.625 9.62371 5.55625 -47.625 7.85772 7.85772 0 5.55625 9.62371 0 7.85773 7.85772 -47.625 7.85772 7.85772 -47.625 5.55625 9.62371 0 2.87613 10.7338 0 5.55625 9.62371 -47.625 5.55625 9.62371 -47.625 2.87613 10.7338 0 0 11.1125 0 2.87613 10.7338 -47.625 2.87613 10.7338 -47.625 0 11.1125 0 -2.87613 10.7338 0 0 11.1125 -47.625 0 11.1125 -47.625 -2.87613 10.7338 0 -5.55625 9.62371 0 -2.87613 10.7338 -47.625 -2.87613 10.7338 -47.625 -5.55625 9.62371 0 -7.85772 7.85773 0 -5.55625 9.62371 -47.625 -5.55625 9.62371 -47.625 -7.85772 7.85772 0 -9.62371 5.55625 0 -7.85772 7.85773 -47.625 -7.85772 7.85772 -47.625 -9.62371 5.55625 0 -10.7338 2.87613 0 -9.62371 5.55625 -47.625 -9.62371 5.55625 -47.625 -10.7338 2.87613 0 -9.62371 5.55625 0 -10.7338 2.87613 0 -11.1125 0 0 -10.7338 -2.87613 0 -9.62371 -5.55625 0 -7.85773 -7.85772 0 -5.55625 -9.62371 0 -2.87613 -10.7339 0 0 -11.1125 0 2.87613 -10.7339 0 5.55625 -9.62371 0 7.85772 -7.85773 0 9.62371 -5.55625 0 10.7338 -2.87613 0 11.1125 0 0 10.7338 2.87613 0 9.62371 5.55625 0 7.85773 7.85772 0 5.55625 9.62371 0 2.87613 10.7338 0 0 11.1125 0 -2.87613 10.7338 0 -5.55625 9.62371 0 -7.85772 7.85773 0 11.1125 0 0 10.7338 -2.87613 -47.625 10.7339 -2.87612 -47.625 11.1125 0 -50.8 6.13363 1.6435 -50.8 5.49926 3.175 -47.625 5.49926 3.175 -47.625 6.13363 1.6435 -50.8 5.49926 3.175 -50.8 4.49013 4.49013 -47.625 4.49013 4.49013 -47.625 5.49926 3.175 -50.8 4.49013 4.49013 -50.8 3.175 5.49926 -47.625 3.175 5.49926 -47.625 4.49013 4.49013 -50.8 6.13363 -1.6435 -50.8 6.35 0 -47.625 6.35 0 -47.625 6.13363 -1.6435 -50.8 5.49926 -3.175 -50.8 6.13363 -1.6435 -47.625 6.13363 -1.6435 -47.625 5.49926 -3.175 -50.8 4.49013 -4.49013 -50.8 5.49926 -3.175 -47.625 5.49926 -3.175 -47.625 4.49013 -4.49013 -50.8 3.175 -5.49926 -50.8 4.49013 -4.49013 -47.625 4.49013 -4.49013 -47.625 3.175 -5.49926 -50.8 1.6435 -6.13363 -50.8 3.175 -5.49926 -47.625 3.175 -5.49926 -47.625 1.6435 -6.13363 -50.8 0 -6.35 -50.8 1.6435 -6.13363 -47.625 1.6435 -6.13363 -47.625 0 -6.35 -50.8 -1.6435 -6.13363 -50.8 0 -6.35 -47.625 0 -6.35 -47.625 -1.6435 -6.13363 -50.8 -3.175 -5.49926 -50.8 -1.6435 -6.13363 -47.625 -1.6435 -6.13363 -47.625 -3.175 -5.49926 -50.8 -4.49013 -4.49013 -50.8 -3.175 -5.49926 -47.625 -3.175 -5.49926 -47.625 -4.49013 -4.49013 -50.8 -5.49926 -3.175 -50.8 -4.49013 -4.49013 -47.625 -4.49013 -4.49013 -47.625 -5.49926 -3.175 -50.8 -6.13363 -1.6435 -50.8 -5.49926 -3.175 -47.625 -5.49926 -3.175 -47.625 -6.13363 -1.6435 -50.8 -6.35 0 -50.8 -6.13363 -1.6435 -47.625 -6.13363 -1.6435 -47.625 -6.35 0 -50.8 -6.13363 1.6435 -50.8 -6.35 0 -47.625 -6.35 0 -47.625 -6.13363 1.6435 -50.8 -5.49926 3.175 -50.8 -6.13363 1.6435 -47.625 -6.13363 1.6435 -47.625 -5.49926 3.175 -50.8 -4.49013 4.49013 -50.8 -5.49926 3.175 -47.625 -5.49926 3.175 -47.625 -4.49013 4.49013 -50.8 -3.175 5.49926 -50.8 -4.49013 4.49013 -47.625 -4.49013 4.49013 -47.625 -3.175 5.49926 -50.8 -1.6435 6.13363 -50.8 -3.175 5.49926 -47.625 -3.175 5.49926 -47.625 -1.6435 6.13363 -50.8 0 6.35 -50.8 -1.6435 6.13363 -47.625 -1.6435 6.13363 -47.625 0 6.35 -50.8 1.6435 6.13363 -50.8 0 6.35 -47.625 0 6.35 -47.625 1.6435 6.13363 -50.8 3.175 5.49926 -50.8 1.6435 6.13363 -47.625 1.6435 6.13363 -47.625 3.175 5.49926 -50.8 1.6435 6.13363 -50.8 3.175 5.49926 -50.8 4.49013 4.49013 -50.8 5.49926 3.175 -50.8 6.13363 1.6435 -50.8 6.35 0 -50.8 6.13363 -1.6435 -50.8 5.49926 -3.175 -50.8 4.49013 -4.49013 -50.8 3.175 -5.49926 -50.8 1.6435 -6.13363 -50.8 0 -6.35 -50.8 -1.6435 -6.13363 -50.8 -3.175 -5.49926 -50.8 -4.49013 -4.49013 -50.8 -5.49926 -3.175 -50.8 -6.13363 -1.6435 -50.8 -6.35 0 -50.8 -6.13363 1.6435 -50.8 -5.49926 3.175 -50.8 -4.49013 4.49013 -50.8 -3.175 5.49926 -50.8 -1.6435 6.13363 -50.8 0 6.35 -50.8 6.35 0 -50.8 6.13363 1.6435 -47.625 6.13363 1.6435 -47.625 6.35 0 - - - - - - - - - - 0 -1 0 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -1 0 0 -0.965932 -0.258797 0 -1 0 0 -1 0 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.707083 -0.70713 0 -0.499985 -0.866034 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 0 -1 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 0 -1 0 0.258797 -0.965932 0 0 -1 0 0 -1 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.965932 -0.258797 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 0.965932 0.258797 0 1 0 0 1 0 0 0.965932 0.258797 0 0.866034 0.499985 0 0.965932 0.258797 0 0.965932 0.258797 0 0.866034 0.499985 0 0.70713 0.707083 0 0.866034 0.499985 0 0.866034 0.499985 0 0.70713 0.707083 0 0.499985 0.866034 0 0.70713 0.707083 0 0.70713 0.707083 0 0.499985 0.866034 0 0.258797 0.965932 0 0.499985 0.866034 0 0.499985 0.866034 0 0.258797 0.965932 0 0 1 0 0.258797 0.965932 0 0.258797 0.965932 0 0 1 0 -0.258797 0.965932 0 0 1 0 0 1 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.258797 0.965932 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.965932 0.258797 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 0.965932 -0.258797 0 0.965932 -0.258797 0 1 0 0 0.965932 0.258797 0 0.866034 0.499985 0 0.866034 0.499985 0 0.965932 0.258797 0 0.866034 0.499985 0 0.707083 0.70713 0 0.707083 0.70713 0 0.866034 0.499985 0 0.707083 0.70713 0 0.499985 0.866034 0 0.499985 0.866034 0 0.707083 0.70713 0 0.965932 -0.258797 0 1 0 0 1 0 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.965932 -0.258797 0 0.965932 -0.258797 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.866034 -0.499985 0 0.866034 -0.499985 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.707083 -0.70713 0 0.707083 -0.70713 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0.499985 -0.866034 0 0.499985 -0.866034 0 0.258797 -0.965932 0 0 -1 0 0.258797 -0.965932 0 0.258797 -0.965932 0 0 -1 0 -0.258797 -0.965932 0 0 -1 0 0 -1 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.258797 -0.965932 0 -0.258797 -0.965932 0 -0.499985 -0.866034 0 -0.707083 -0.70713 0 -0.499985 -0.866034 0 -0.499985 -0.866034 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 -0.707083 -0.70713 0 -0.707083 -0.70713 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -0.866034 -0.499985 0 -0.866034 -0.499985 0 -0.965932 -0.258797 0 -1 0 0 -0.965932 -0.258797 0 -0.965932 -0.258797 0 -1 0 0 -0.965932 0.258797 0 -1 0 0 -1 0 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.965932 0.258797 0 -0.965932 0.258797 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.866034 0.499985 0 -0.866034 0.499985 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.707083 0.70713 0 -0.707083 0.70713 0 -0.499985 0.866034 0 -0.258797 0.965932 0 -0.499985 0.866034 0 -0.499985 0.866034 0 -0.258797 0.965932 0 0 1 0 -0.258797 0.965932 0 -0.258797 0.965932 0 0 1 0 0.258797 0.965932 0 0 1 0 0 1 0 0.258797 0.965932 0 0.499985 0.866034 0 0.258797 0.965932 0 0.258797 0.965932 0 0.499985 0.866034 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 0.965932 0.258797 0 0.965932 0.258797 0 1 0 - - - - - - - - - - - - - - -

0 0 1 1 2 2 3 3

-

4 4 5 5 6 6 7 7

-

8 8 9 9 10 10 11 11

-

12 12 13 13 14 14 15 15

-

16 16 17 17 18 18 19 19

-

20 20 21 21 22 22 23 23

-

24 24 25 25 26 26 27 27

-

28 28 29 29 30 30 31 31

-

32 32 33 33 34 34 35 35

-

36 36 37 37 38 38 39 39

-

40 40 41 41 42 42 43 43

-

44 44 45 45 46 46 47 47

-

48 48 49 49 50 50 51 51 52 52 53 53 54 54 55 55 56 56 57 57 58 58 59 59 60 60 61 61 62 62 63 63 64 64 65 65 66 66 67 67 68 68 69 69 70 70 71 71

-

72 72 73 73 74 74 75 75

-

76 76 77 77 78 78 79 79

-

80 80 81 81 82 82 83 83

-

84 84 85 85 86 86 87 87

-

88 88 89 89 90 90 91 91

-

92 92 93 93 94 94 95 95

-

96 96 97 97 98 98 99 99

-

100 100 101 101 102 102 103 103

-

104 104 105 105 106 106 107 107

-

108 108 109 109 110 110 111 111

-

112 112 113 113 114 114 115 115

-

116 116 117 117 118 118 119 119 120 120 121 121 122 122 123 123 124 124 125 125 126 126 127 127 128 128 129 129 130 130 131 131 132 132 133 133 134 134 135 135 136 136 137 137 138 138 139 139

-

140 140 141 141 142 142 143 143

-
- - - -

144 144 145 145 146 146 147 147

-

148 148 149 149 150 150 151 151

-

152 152 153 153 154 154 155 155

-

156 156 157 157 158 158 159 159

-

160 160 161 161 162 162 163 163

-

164 164 165 165 166 166 167 167

-

168 168 169 169 170 170 171 171

-

172 172 173 173 174 174 175 175

-

176 176 177 177 178 178 179 179

-

180 180 181 181 182 182 183 183

-

184 184 185 185 186 186 187 187

-

188 188 189 189 190 190 191 191

-

192 192 193 193 194 194 195 195

-

196 196 197 197 198 198 199 199

-

200 200 201 201 202 202 203 203

-

204 204 205 205 206 206 207 207

-

208 208 209 209 210 210 211 211

-

212 212 213 213 214 214 215 215

-

216 216 217 217 218 218 219 219

-

220 220 221 221 222 222 223 223

-

224 224 225 225 226 226 227 227

-

228 228 229 229 230 230 231 231

-

232 232 233 233 234 234 235 235

-

236 236 237 237 238 238 239 239 240 240 241 241 242 242 243 243 244 244 245 245 246 246 247 247 248 248 249 249 250 250 251 251 252 252 253 253 254 254 255 255 256 256 257 257 258 258 259 259

-

260 260 261 261 262 262 263 263

-
-
- - - CAT3DBagRep - - -
- - - - -11.1125 8.73125 0 -11.1125 8.43374 -2.25981 -25.4 3.06681 -0.82175 -25.4 3.175 0 0 8.73125 0 0 8.43374 -2.25981 -11.1125 8.43374 -2.25981 -11.1125 8.73125 0 -11.1125 7.56148 -4.36563 -11.1125 6.17392 -6.17393 -25.4 2.24506 -2.24506 -25.4 2.74963 -1.5875 -11.1125 6.17392 -6.17393 -11.1125 4.36562 -7.56148 -25.4 1.5875 -2.74963 -25.4 2.24506 -2.24506 -11.1125 4.36562 -7.56148 -11.1125 2.25981 -8.43374 -25.4 0.82175 -3.06681 -25.4 1.5875 -2.74963 -11.1125 2.25981 -8.43374 -11.1125 0 -8.73125 -25.4 0 -3.175 -25.4 0.82175 -3.06681 -11.1125 0 -8.73125 -11.1125 -2.25981 -8.43374 -25.4 -0.82175 -3.06681 -25.4 0 -3.175 -11.1125 -2.25981 -8.43374 -11.1125 -4.36562 -7.56148 -25.4 -1.5875 -2.74963 -25.4 -0.82175 -3.06681 -11.1125 -4.36562 -7.56148 -11.1125 -6.17393 -6.17392 -25.4 -2.24506 -2.24506 -25.4 -1.5875 -2.74963 -11.1125 -6.17393 -6.17392 -11.1125 -7.56148 -4.36562 -25.4 -2.74963 -1.5875 -25.4 -2.24506 -2.24506 -11.1125 -7.56148 -4.36562 -11.1125 -8.43374 -2.25981 -25.4 -3.06681 -0.821751 -25.4 -2.74963 -1.5875 -11.1125 -8.43374 -2.25981 -11.1125 -8.73125 0 -25.4 -3.175 0 -25.4 -3.06681 -0.821751 -11.1125 -8.73125 0 -11.1125 -8.43374 2.25981 -25.4 -3.06681 0.821751 -25.4 -3.175 0 -11.1125 -8.43374 2.25981 -11.1125 -7.56148 4.36562 -25.4 -2.74963 1.5875 -25.4 -3.06681 0.821751 -11.1125 -7.56148 4.36562 -11.1125 -6.17393 6.17393 -25.4 -2.24506 2.24506 -25.4 -2.74963 1.5875 -11.1125 -6.17393 6.17393 -11.1125 -4.36562 7.56148 -25.4 -1.5875 2.74963 -25.4 -2.24506 2.24506 -11.1125 -4.36562 7.56148 -11.1125 -2.25981 8.43374 -25.4 -0.82175 3.06681 -25.4 -1.5875 2.74963 -11.1125 -2.25981 8.43374 -11.1125 0 8.73125 -25.4 0 3.175 -25.4 -0.82175 3.06681 -11.1125 0 8.73125 -11.1125 2.25981 8.43374 -25.4 0.821751 3.06681 -25.4 0 3.175 -11.1125 2.25981 8.43374 -11.1125 4.36562 7.56148 -25.4 1.5875 2.74963 -25.4 0.821751 3.06681 -11.1125 4.36562 7.56148 -11.1125 6.17393 6.17393 -25.4 2.24506 2.24506 -25.4 1.5875 2.74963 -11.1125 6.17393 6.17393 -11.1125 7.56148 4.36562 -25.4 2.74963 1.5875 -25.4 2.24506 2.24506 0 6.17393 6.17393 0 7.56148 4.36562 -11.1125 7.56148 4.36562 -11.1125 6.17393 6.17393 0 4.36562 7.56148 0 6.17393 6.17393 -11.1125 6.17393 6.17393 -11.1125 4.36562 7.56148 0 2.25981 8.43374 0 4.36562 7.56148 -11.1125 4.36562 7.56148 -11.1125 2.25981 8.43374 0 0 8.73125 0 2.25981 8.43374 -11.1125 2.25981 8.43374 -11.1125 0 8.73125 0 -2.25981 8.43374 0 0 8.73125 -11.1125 0 8.73125 -11.1125 -2.25981 8.43374 0 -4.36562 7.56148 0 -2.25981 8.43374 -11.1125 -2.25981 8.43374 -11.1125 -4.36562 7.56148 0 -6.17393 6.17393 0 -4.36562 7.56148 -11.1125 -4.36562 7.56148 -11.1125 -6.17393 6.17393 0 -7.56148 4.36562 0 -6.17393 6.17393 -11.1125 -6.17393 6.17393 -11.1125 -7.56148 4.36562 0 -8.43374 2.25981 0 -7.56148 4.36562 -11.1125 -7.56148 4.36562 -11.1125 -8.43374 2.25981 0 -8.73125 0 0 -8.43374 2.25981 -11.1125 -8.43374 2.25981 -11.1125 -8.73125 0 0 -8.43374 -2.25981 0 -8.73125 0 -11.1125 -8.73125 0 -11.1125 -8.43374 -2.25981 0 -7.56148 -4.36562 0 -8.43374 -2.25981 -11.1125 -8.43374 -2.25981 -11.1125 -7.56148 -4.36562 0 -6.17393 -6.17392 0 -7.56148 -4.36562 -11.1125 -7.56148 -4.36562 -11.1125 -6.17393 -6.17392 0 -4.36562 -7.56148 0 -6.17393 -6.17392 -11.1125 -6.17393 -6.17392 -11.1125 -4.36562 -7.56148 0 -2.25981 -8.43374 0 -4.36562 -7.56148 -11.1125 -4.36562 -7.56148 -11.1125 -2.25981 -8.43374 0 0 -8.73125 0 -2.25981 -8.43374 -11.1125 -2.25981 -8.43374 -11.1125 0 -8.73125 0 2.25981 -8.43374 0 0 -8.73125 -11.1125 0 -8.73125 -11.1125 2.25981 -8.43374 0 4.36562 -7.56148 0 2.25981 -8.43374 -11.1125 2.25981 -8.43374 -11.1125 4.36562 -7.56148 0 6.17392 -6.17393 0 4.36562 -7.56148 -11.1125 4.36562 -7.56148 -11.1125 6.17392 -6.17393 0 7.56148 -4.36563 0 6.17392 -6.17393 -11.1125 6.17392 -6.17393 -11.1125 7.56148 -4.36563 0 8.43374 -2.25981 0 7.56148 -4.36563 -11.1125 7.56148 -4.36563 -11.1125 8.43374 -2.25981 -11.1125 8.43374 -2.25981 -11.1125 7.56148 -4.36563 -25.4 2.74963 -1.5875 -25.4 3.06681 -0.82175 -25.4 3.06681 -0.82175 -25.4 2.74963 -1.5875 -25.4 2.24506 -2.24506 -25.4 1.5875 -2.74963 -25.4 0.82175 -3.06681 -25.4 0 -3.175 -25.4 -0.82175 -3.06681 -25.4 -1.5875 -2.74963 -25.4 -2.24506 -2.24506 -25.4 -2.74963 -1.5875 -25.4 -3.06681 -0.821751 -25.4 -3.175 0 -25.4 -3.06681 0.821751 -25.4 -2.74963 1.5875 -25.4 -2.24506 2.24506 -25.4 -1.5875 2.74963 -25.4 -0.82175 3.06681 -25.4 0 3.175 -25.4 0.821751 3.06681 -25.4 1.5875 2.74963 -25.4 2.24506 2.24506 -25.4 2.74963 1.5875 -25.4 3.06681 0.82175 -25.4 3.175 0 -11.1125 7.56148 4.36562 -11.1125 8.43374 2.25981 -25.4 3.06681 0.82175 -25.4 2.74963 1.5875 0 7.56148 4.36562 0 8.43374 2.25981 -11.1125 8.43374 2.25981 -11.1125 7.56148 4.36562 0 8.73125 0 0 8.43374 2.25981 0 7.56148 4.36562 0 6.17393 6.17393 0 4.36562 7.56148 0 2.25981 8.43374 0 0 8.73125 0 -2.25981 8.43374 0 -4.36562 7.56148 0 -6.17393 6.17393 0 -7.56148 4.36562 0 -8.43374 2.25981 0 -8.73125 0 0 -8.43374 -2.25981 0 -7.56148 -4.36562 0 -6.17393 -6.17392 0 -4.36562 -7.56148 0 -2.25981 -8.43374 0 0 -8.73125 0 2.25981 -8.43374 0 4.36562 -7.56148 0 6.17392 -6.17393 0 7.56148 -4.36563 0 8.43374 -2.25981 0 8.43374 2.25981 0 8.73125 0 -11.1125 8.73125 0 -11.1125 8.43374 2.25981 -11.1125 8.43374 2.25981 -11.1125 8.73125 0 -25.4 3.175 0 -25.4 3.06681 0.82175 - - - - - - - - - - -0.184484 0.982835 0 -0.184484 0.949347 -0.254372 -0.362438 0.900251 -0.241218 -0.362438 0.932008 0 0 1 0 0 0.965932 -0.258797 -0.184484 0.949347 -0.254372 -0.184484 0.982835 0 -0.184484 0.851165 -0.491409 -0.184484 0.694968 -0.694972 -0.362438 0.659017 -0.659042 -0.362438 0.807152 -0.465987 -0.184484 0.694968 -0.694972 -0.184484 0.491409 -0.851165 -0.362438 0.465987 -0.807152 -0.362438 0.659017 -0.659042 -0.184484 0.491409 -0.851165 -0.184484 0.254372 -0.949347 -0.362438 0.241218 -0.900251 -0.362438 0.465987 -0.807152 -0.184484 0.254372 -0.949347 -0.184484 0 -0.982835 -0.362438 0 -0.932008 -0.362438 0.241218 -0.900251 -0.184484 0 -0.982835 -0.184484 -0.254372 -0.949347 -0.362438 -0.241218 -0.900251 -0.362438 0 -0.932008 -0.184484 -0.254372 -0.949347 -0.184484 -0.491409 -0.851165 -0.362438 -0.465987 -0.807152 -0.362438 -0.241218 -0.900251 -0.184484 -0.491409 -0.851165 -0.184484 -0.694972 -0.694968 -0.362438 -0.659042 -0.659017 -0.362438 -0.465987 -0.807152 -0.184484 -0.694968 -0.694972 -0.184484 -0.851165 -0.491409 -0.362438 -0.807152 -0.465987 -0.362438 -0.659042 -0.659017 -0.184484 -0.851165 -0.491409 -0.184484 -0.949347 -0.254372 -0.362438 -0.900251 -0.241218 -0.362438 -0.807152 -0.465987 -0.184484 -0.949347 -0.254372 -0.184484 -0.982835 0 -0.362438 -0.932008 0 -0.362438 -0.900251 -0.241218 -0.184484 -0.982835 0 -0.184484 -0.949347 0.254372 -0.362438 -0.900251 0.241218 -0.362438 -0.932008 0 -0.184484 -0.949347 0.254372 -0.184484 -0.851165 0.491409 -0.362438 -0.807152 0.465987 -0.362438 -0.900251 0.241218 -0.184484 -0.851165 0.491409 -0.184484 -0.694972 0.694968 -0.362438 -0.659017 0.659042 -0.362438 -0.807152 0.465987 -0.184484 -0.694968 0.694972 -0.184484 -0.491409 0.851165 -0.362438 -0.465987 0.807152 -0.362438 -0.659017 0.659042 -0.184484 -0.491409 0.851165 -0.184484 -0.254372 0.949347 -0.362438 -0.241218 0.900251 -0.362438 -0.465987 0.807152 -0.184484 -0.254372 0.949347 -0.184484 0 0.982835 -0.362438 0 0.932008 -0.362438 -0.241218 0.900251 -0.184484 0 0.982835 -0.184484 0.254372 0.949347 -0.362438 0.241218 0.900251 -0.362438 0 0.932008 -0.184484 0.254372 0.949347 -0.184484 0.491409 0.851165 -0.362438 0.465987 0.807152 -0.362438 0.241218 0.900251 -0.184484 0.491409 0.851165 -0.184484 0.694968 0.694972 -0.362438 0.659017 0.659042 -0.362438 0.465987 0.807152 -0.184484 0.694968 0.694972 -0.184484 0.851165 0.491409 -0.362438 0.807152 0.465987 -0.362438 0.659017 0.659042 0 0.707083 0.70713 0 0.866034 0.499985 -0.184484 0.851165 0.491409 -0.184484 0.694968 0.694972 0 0.499985 0.866034 0 0.707083 0.70713 -0.184484 0.694968 0.694972 -0.184484 0.491409 0.851165 0 0.258797 0.965932 0 0.499985 0.866034 -0.184484 0.491409 0.851165 -0.184484 0.254372 0.949347 0 0 1 0 0.258797 0.965932 -0.184484 0.254372 0.949347 -0.184484 0 0.982835 0 -0.258797 0.965932 0 0 1 -0.184484 0 0.982835 -0.184484 -0.254372 0.949347 0 -0.499985 0.866034 0 -0.258797 0.965932 -0.184484 -0.254372 0.949347 -0.184484 -0.491409 0.851165 0 -0.707083 0.70713 0 -0.499985 0.866034 -0.184484 -0.491409 0.851165 -0.184484 -0.694968 0.694972 0 -0.866034 0.499985 0 -0.707083 0.70713 -0.184484 -0.694968 0.694972 -0.184484 -0.851165 0.491409 0 -0.965932 0.258797 0 -0.866034 0.499985 -0.184484 -0.851165 0.491409 -0.184484 -0.949347 0.254372 0 -1 0 0 -0.965932 0.258797 -0.184484 -0.949347 0.254372 -0.184484 -0.982835 0 0 -0.965932 -0.258797 0 -1 0 -0.184484 -0.982835 0 -0.184484 -0.949347 -0.254372 0 -0.866034 -0.499985 0 -0.965932 -0.258797 -0.184484 -0.949347 -0.254372 -0.184484 -0.851165 -0.491409 0 -0.70713 -0.707083 0 -0.866034 -0.499985 -0.184484 -0.851165 -0.491409 -0.184484 -0.694972 -0.694968 0 -0.499985 -0.866034 0 -0.70713 -0.707083 -0.184484 -0.694972 -0.694968 -0.184484 -0.491409 -0.851165 0 -0.258797 -0.965932 0 -0.499985 -0.866034 -0.184484 -0.491409 -0.851165 -0.184484 -0.254372 -0.949347 0 0 -1 0 -0.258797 -0.965932 -0.184484 -0.254372 -0.949347 -0.184484 0 -0.982835 0 0.258797 -0.965932 0 0 -1 -0.184484 0 -0.982835 -0.184484 0.254372 -0.949347 0 0.499985 -0.866034 0 0.258797 -0.965932 -0.184484 0.254372 -0.949347 -0.184484 0.491409 -0.851165 0 0.707083 -0.70713 0 0.499985 -0.866034 -0.184484 0.491409 -0.851165 -0.184484 0.694968 -0.694972 0 0.866034 -0.499985 0 0.707083 -0.70713 -0.184484 0.694968 -0.694972 -0.184484 0.851165 -0.491409 0 0.965932 -0.258797 0 0.866034 -0.499985 -0.184484 0.851165 -0.491409 -0.184484 0.949347 -0.254372 -0.184484 0.949347 -0.254372 -0.184484 0.851165 -0.491409 -0.362438 0.807152 -0.465987 -0.362438 0.900251 -0.241218 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -1 0 0 -0.184484 0.851165 0.491409 -0.184484 0.949347 0.254372 -0.362438 0.900251 0.241218 -0.362438 0.807152 0.465987 0 0.866034 0.499985 0 0.965932 0.258797 -0.184484 0.949347 0.254372 -0.184484 0.851165 0.491409 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0.965932 0.258797 0 1 0 -0.184484 0.982835 0 -0.184484 0.949347 0.254372 -0.184484 0.949347 0.254372 -0.184484 0.982835 0 -0.362438 0.932008 0 -0.362438 0.900251 0.241218 - - - - - - - - - - - - - - -

0 0 1 1 2 2 3 3

-

4 4 5 5 6 6 7 7

-

8 8 9 9 10 10 11 11

-

12 12 13 13 14 14 15 15

-

16 16 17 17 18 18 19 19

-

20 20 21 21 22 22 23 23

-

24 24 25 25 26 26 27 27

-

28 28 29 29 30 30 31 31

-

32 32 33 33 34 34 35 35

-

36 36 37 37 38 38 39 39

-

40 40 41 41 42 42 43 43

-

44 44 45 45 46 46 47 47

-

48 48 49 49 50 50 51 51

-

52 52 53 53 54 54 55 55

-

56 56 57 57 58 58 59 59

-

60 60 61 61 62 62 63 63

-

64 64 65 65 66 66 67 67

-

68 68 69 69 70 70 71 71

-

72 72 73 73 74 74 75 75

-

76 76 77 77 78 78 79 79

-

80 80 81 81 82 82 83 83

-

84 84 85 85 86 86 87 87

-

88 88 89 89 90 90 91 91

-

92 92 93 93 94 94 95 95

-

96 96 97 97 98 98 99 99

-

100 100 101 101 102 102 103 103

-

104 104 105 105 106 106 107 107

-

108 108 109 109 110 110 111 111

-

112 112 113 113 114 114 115 115

-

116 116 117 117 118 118 119 119

-

120 120 121 121 122 122 123 123

-

124 124 125 125 126 126 127 127

-

128 128 129 129 130 130 131 131

-

132 132 133 133 134 134 135 135

-

136 136 137 137 138 138 139 139

-

140 140 141 141 142 142 143 143

-

144 144 145 145 146 146 147 147

-

148 148 149 149 150 150 151 151

-

152 152 153 153 154 154 155 155

-

156 156 157 157 158 158 159 159

-

160 160 161 161 162 162 163 163

-

164 164 165 165 166 166 167 167

-

168 168 169 169 170 170 171 171

-

172 172 173 173 174 174 175 175

-

176 176 177 177 178 178 179 179 180 180 181 181 182 182 183 183 184 184 185 185 186 186 187 187 188 188 189 189 190 190 191 191 192 192 193 193 194 194 195 195 196 196 197 197 198 198 199 199

-

200 200 201 201 202 202 203 203

-

204 204 205 205 206 206 207 207

-

208 208 209 209 210 210 211 211 212 212 213 213 214 214 215 215 216 216 217 217 218 218 219 219 220 220 221 221 222 222 223 223 224 224 225 225 226 226 227 227 228 228 229 229 230 230 231 231

-

232 232 233 233 234 234 235 235

-

236 236 237 237 238 238 239 239

-
-
- - - CAT3DBagRep - - -
-
- - - - - - - 0.6 0.498039 0.4 1 - - - 0.6 0.498039 0.4 1 - - - - - - - - - - - 0.847059 0.717647 0.54902 1 - - - 0.847059 0.717647 0.54902 1 - - - - - - - - - - - 1 0.658824 0.498039 1 - - - 1 0.658824 0.498039 1 - - - - - - - - - - - - - - - - - - - - - 1 0 0 - - 0 - 0 - - - - - - 1 0 0 - - 0 - 0 - - - - - - 1 0 0 - - - - - 1 0 0 - - 0 - 0 - - - - - - 1 0 0 - - 0 - 0 - - - - - - 1 0 0 - - 0 - 0 - - - - - - 1 0 0 - - 0 - 0 - - - - - - 1 0 0 - - 0 - 0 - - - - - - 1 0 0 - - 0 - 0 - - - - - - -1 0 0 - - - - - - - - - - - - - - - - - - - -95 0 0 - - - - 157.985 169.448 805.771 - 0 1 0 87.8861 - - - 95.25 0 -98.552 - - - -289.5 0 -104.775 - - -95 2.84217e-014 -5.82206e-006 - - 82.3 0 5.33838e-006 - - -95 2.84217e-014 -5.33838e-006 - - -97.532 0 6.88014e-006 - - -95 2.84217e-014 -6.88014e-006 - - 44.2 0 4.9454e-006 - - -95 2.84217e-014 -4.9454e-006 - - - - - - - - - - - - -341.249 0 -98.552 - - - -211.074 0 -104.775 - 0 0 0 180 - - - -50.8 0 4.01244e-006 - - - - - - - - - - - - kinmodel.0/joint_2 - - - - - - kinmodel.0/pseudojoint_1 - - - - - = -DOF(10) - - - - - - - - - - - libkinscenes.kinScene/inst_kinmodel.0 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_0/axis0 - - - 0 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_1/axis0 - - - 0 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_2/axis0 - - - -0 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_3/axis0 - - - 0 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_4/axis0 - - - 0 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_5/axis0 - - - 0 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_6/axis0 - - - 0 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_7/axis0 - - - 0 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_8/axis0 - - - 0 - - - libkinscenes.kinScene/inst_kinmodel.0/pseudojoint_1/axis0 - - - 0 - - - - - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0 - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_2_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_3_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_4_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_4_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_4_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_4_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_5_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_5_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_6_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_6_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_6_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_6_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_6_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_6_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_7_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_7_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_7_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_7_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_8_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_8_axis0_value - - - - -
diff --git a/collada_urdf/test/pr2.urdf b/collada_urdf/test/pr2.urdf deleted file mode 100644 index ae16a78..0000000 --- a/collada_urdf/test/pr2.urdf +++ /dev/null @@ -1,3399 +0,0 @@ - - - - - - - - - - - - - - - - - - - - true - 1000.0 - - - - true - 1.0 - 5 - - power_state - 10.0 - 87.78 - -474 - 525 - 15.52 - 16.41 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 - 640 - 1 - 0.0 0.0 0.0 - false - -129.998394137 - 129.998394137 - 0.05 - 10.0 - 0.01 - 20 - - 0.005 - true - 20 - base_scan - base_laser_link - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -79.2380952381 - - - - - - true - - base_link_geom - 100.0 - - true - 100.0 - base_bumper - - - - - - - - true - 100.0 - base_link - base_pose_ground_truth - 0.01 - map - 25.7 25.7 0 - - 0 0 0 - - - base_footprint - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - torso_lift_link_geom - 100.0 - - true - 100.0 - torso_lift_bumper - - - - - - - - - -52143.33 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - 100.0 - imu_link - torso_lift_imu/data - 2.89e-08 - map - 0 0 0 - 0 0 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - R8G8B8 - 2448 2050 - 45 - 0.1 - 100 - 20.0 - - true - 20.0 - /prosilica/image_raw - /prosilica/camera_info - /prosilica/request_image - high_def_frame - 1224.5 - 1224.5 - 1025.5 - 2955 - - 0.00000001 - 0.00000001 - 0.00000001 - 0.00000001 - 0.00000001 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 480 - BAYER_BGGR8 - 90 - 0.1 - 100 - 25.0 - - true - 25.0 - wide_stereo/left/image_raw - wide_stereo/left/camera_info - wide_stereo_optical_frame - 0 - 320.5 - 320.5 - 240.5 - - - 320 - 0.00000001 - 0.00000001 - 0.00000001 - 0.00000001 - 0.00000001 - - - - true - PR2/Blue - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 480 - BAYER_BGGR8 - 90 - 0.1 - 100 - 25.0 - - true - 25.0 - wide_stereo/right/image_raw - wide_stereo/right/camera_info - wide_stereo_optical_frame - 0.09 - 320.5 - 320.5 - 240.5 - - - 320 - 0.00000001 - 0.00000001 - 0.00000001 - 0.00000001 - 0.00000001 - - - - true - PR2/Blue - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 480 - L8 - 45 - 0.1 - 100 - 25.0 - - true - 25.0 - narrow_stereo/left/image_raw - narrow_stereo/left/camera_info - narrow_stereo_optical_frame - 0 - 320.5 - 320.5 - 240.5 - - - 772.55 - 0.00000001 - 0.00000001 - 0.00000001 - 0.00000001 - 0.00000001 - - - - true - PR2/Blue - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 480 - L8 - 45 - 0.1 - 100 - 25.0 - - true - 25.0 - narrow_stereo/right/image_raw - narrow_stereo/right/camera_info - narrow_stereo_optical_frame - 0.09 - 320.5 - 320.5 - 240.5 - - - 772.55 - 0.00000001 - 0.00000001 - 0.00000001 - 0.00000001 - 0.00000001 - - - - true - PR2/Blue - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 - 640 - 1 - 0.0 0.0 0.0 - false - -79.9999999086 - 79.9999999086 - 0.05 - 10.0 - 0.01 - 20 - - 0.005 - true - 20 - tilt_scan - laser_tilt_link - - - - - - - - - - - -6.05 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - - - - - - - - 32.6525111499 - - - - r_shoulder_pan_link_geom - 100.0 - - true - 100.0 - r_shoulder_pan_bumper - - - - - true - - - - - - - - r_shoulder_lift_link_geom - 100.0 - - true - 100.0 - r_r_shoulder_lift_bumper - - - - true - - - - - - - - - 63.1552452977 - - - - - 61.8948225713 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - r_upper_arm_link_geom - - 100.0 - - true - 100.0 - r_upper_arm_bumper - - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - - - - - - -90.5142857143 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -1.0 - - - - r_elbow_flex_link_geom - 100.0 - - true - 100.0 - r_elbow_flex_bumper - - - - - true - - - - - - - - - -36.167452007 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - r_forearm_link_geom - 100.0 - - true - 100.0 - r_forearm_bumper - - - - - - - true - - r_wrist_flex_link_geom - 100.0 - - true - 100.0 - r_wrist_flex_bumper - - - - - - - - - - - true - - r_wrist_roll_link_geom - 100.0 - - true - 100.0 - r_wrist_roll_bumper - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - r_gripper_l_finger_link_geom - 100.0 - - true - 100.0 - r_gripper_l_finger_bumper - - - - - - - - - - - - - - - - - - true - - r_gripper_r_finger_link_geom - 100.0 - - true - 100.0 - r_gripper_r_finger_bumper - - - - - - - - - - - - - - - - - true - false - - r_gripper_l_finger_tip_link_geom - 100.0 - - true - 100.0 - r_gripper_l_finger_tip_bumper - - - - - - - - - - - - - - - - - true - false - - r_gripper_r_finger_tip_link_geom - 100.0 - - true - 100.0 - r_gripper_r_finger_tip_bumper - - - - - - - - - - - - true - 100.0 - r_gripper_l_finger_link - r_gripper_l_finger_pose_ground_truth - 0.0 - map - - - - true - 100.0 - r_gripper_l_finger_link - r_gripper_l_finger_force_ground_truth - r_gripper_l_finger_link - - - - - - - - - - - - - - - - true - - r_gripper_palm_link_geom - 100.0 - - true - 100.0 - r_gripper_palm_bumper - - - - - - - true - - - - - - true - 0.01 - 0.0001 - 0 - 0 - 0.0001 - 0 - 0.0001 - 0 - 0 - 0 - 0.82025 0.188 0.790675 - 0 -0 0 - - 0 0 0 - 0 -0 0 - 0.0 0.0 0.0 - - 0 0 0 - 0 -0 0 - 0.0 0.0 0.0 - unit_box - PR2/White - - - true - false - - - r_gripper_float_link - r_gripper_palm_link - r_gripper_float_link - 1 0 0 - -0.05 - 0.001 - - - r_gripper_l_finger_tip_link - r_gripper_float_link - r_gripper_l_finger_tip_link - 0 1 0 - 0 0 0 - - - r_gripper_r_finger_tip_link - r_gripper_float_link - r_gripper_r_finger_tip_link - 0 1 0 - 0 0 0 - - - - - - true - 100.0 - r_gripper_palm_link - r_gripper_palm_pose_ground_truth - 0 0 0 - 0 0 0 - 0.0 - map - - - - true - 100.0 - r_gripper_tool_frame - r_gripper_tool_frame_pose_ground_truth - 0 0 0 - 0 0 0 - 0.0 - /map - - - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - - - - - - - - 32.6525111499 - - - - l_shoulder_pan_link_geom - 100.0 - - true - 100.0 - l_shoulder_pan_bumper - - - - - true - - - - - - - - l_shoulder_lift_link_geom - 100.0 - - true - 100.0 - l_r_shoulder_lift_bumper - - - - true - - - - - - - - - 63.1552452977 - - - - - 61.8948225713 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - l_upper_arm_link_geom - - 100.0 - - true - 100.0 - l_upper_arm_bumper - - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - - - - - - - -90.5142857143 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -1.0 - - - - l_elbow_flex_link_geom - 100.0 - - true - 100.0 - l_elbow_flex_bumper - - - - - true - - - - - - - - - -36.167452007 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - l_forearm_link_geom - 100.0 - - true - 100.0 - l_forearm_bumper - - - - - - - true - - l_wrist_flex_link_geom - 100.0 - - true - 100.0 - l_wrist_flex_bumper - - - - - - - - - - - true - - l_wrist_roll_link_geom - 100.0 - - true - 100.0 - l_wrist_roll_bumper - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - l_gripper_l_finger_link_geom - 100.0 - - true - 100.0 - l_gripper_l_finger_bumper - - - - - - - - - - - - - - - - - - true - - l_gripper_r_finger_link_geom - 100.0 - - true - 100.0 - l_gripper_r_finger_bumper - - - - - - - - - - - - - - - - - true - false - - l_gripper_l_finger_tip_link_geom - 100.0 - - true - 100.0 - l_gripper_l_finger_tip_bumper - - - - - - - - - - - - - - - - - true - false - - l_gripper_r_finger_tip_link_geom - 100.0 - - true - 100.0 - l_gripper_r_finger_tip_bumper - - - - - - - - - - - - true - 100.0 - l_gripper_l_finger_link - l_gripper_l_finger_pose_ground_truth - 0.0 - map - - - - true - 100.0 - l_gripper_l_finger_link - l_gripper_l_finger_force_ground_truth - l_gripper_l_finger_link - - - - - - - - - - - - - - - - true - - l_gripper_palm_link_geom - 100.0 - - true - 100.0 - l_gripper_palm_bumper - - - - - - - true - - - - - - true - 0.01 - 0.0001 - 0 - 0 - 0.0001 - 0 - 0.0001 - 0 - 0 - 0 - 0.82025 0.188 0.790675 - 0 -0 0 - - 0 0 0 - 0 -0 0 - 0.0 0.0 0.0 - - 0 0 0 - 0 -0 0 - 0.0 0.0 0.0 - unit_box - PR2/White - - - true - false - - - l_gripper_float_link - l_gripper_palm_link - l_gripper_float_link - 1 0 0 - -0.05 - 0.001 - - - l_gripper_l_finger_tip_link - l_gripper_float_link - l_gripper_l_finger_tip_link - 0 1 0 - 0 0 0 - - - l_gripper_r_finger_tip_link - l_gripper_float_link - l_gripper_r_finger_tip_link - 0 1 0 - 0 0 0 - - - - - - true - 100.0 - l_gripper_palm_link - l_gripper_palm_pose_ground_truth - 0 0 0 - 0 0 0 - 0.0 - map - - - - true - 100.0 - l_gripper_tool_frame - l_gripper_tool_frame_pose_ground_truth - 0 0 0 - 0 0 0 - 0.0 - /map - - - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 480 - L8 - 90 - 0.1 - 100 - 25.0 - - true - 25.0 - l_forearm_cam/image_raw - l_forearm_cam/camera_info - l_forearm_cam_frame - 0 - 320.5 - 320.5 - 240.5 - - - 320 - 0.00000001 - 0.00000001 - 0.00000001 - 0.00000001 - 0.00000001 - - - - true - PR2/Blue - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 480 - L8 - 90 - 0.1 - 100 - 25.0 - - true - 25.0 - r_forearm_cam/image_raw - r_forearm_cam/camera_info - r_forearm_cam_frame - 0 - 320.5 - 320.5 - 240.5 - - - 320 - 0.00000001 - 0.00000001 - 0.00000001 - 0.00000001 - 0.00000001 - - - - true - PR2/Blue - - - diff --git a/collada_urdf/test/simple.dae b/collada_urdf/test/simple.dae deleted file mode 100644 index de90f7f..0000000 --- a/collada_urdf/test/simple.dae +++ /dev/null @@ -1,392 +0,0 @@ - - - - - CPFCatiaPlugin - - 2009-02-17T14:57:28Z - 2009-02-17T14:57:28Z - - Z_UP - - - - - - - - - - - - - - - - - - - 1 0 0 0 0 1 0 0 0 0 1 30000 0 0 0 1 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -30000 -0 0 -0 1 - 1 0 0 0 0 1 0 0 0 0 1 30000 0 0 0 1 - -1 -0 -0 0 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -30000 -0 0 -0 1 - 1 0 0 0 0 1 0 0 0 0 1 30000 0 0 0 1 - - - - - - - - - - - - - - 1 0 0 0 0 1 0 0 0 0 1 55000 0 0 0 1 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -55000 -0 0 -0 1 - 1 0 0 0 0 1 0 0 0 0 1 30000 0 0 0 1 - -1 -0 -0 0 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -30000 -0 0 -0 1 - 1 0 0 0 0 1 0 0 0 0 1 55000 0 0 0 1 - -1 -0 -0 0 - 1 -0 0 -0 -0 1 -0 0 0 -0 1 -55000 -0 0 -0 1 - 1 0 0 0 0 1 0 0 0 0 1 55000 0 0 0 1 - - - - - - - - - - - - - - - - - - - - -3000 -3000 0 -3000 -3000 0 -3000 -3000 0 -3000 3000 0 -3000 3000 0 -3000 3000 0 -1500 0 15000 0 -1500 15000 0 0 30000 0 0 30000 0 0 30000 0 0 30000 0 1500 15000 1500 0 15000 3000 -3000 0 3000 -3000 0 3000 -3000 0 3000 3000 0 3000 3000 0 3000 3000 0 - - - - - - - - - - -0.995039 0 0.0994903 0 -0.995039 0.0994903 0 0 -1 -0.995039 0 0.0994903 0 0 -1 0 0.995039 0.0994903 -0.995039 0 0.0994903 0 -0.995039 0.0994903 -0.995039 0 0.0994903 0 -0.995039 0.0994903 0 0.995039 0.0994903 0.995039 0 0.0994903 0 0.995039 0.0994903 0.995039 0 0.0994903 0 -0.995039 0.0994903 0 0 -1 0.995039 0 0.0994903 0 0 -1 0 0.995039 0.0994903 0.995039 0 0.0994903 - - - - - - - - - - - - - - -

17 17 15 15 2 2 2 2 4 4 17 17

-
- - - -

1 1 7 7 9 9 7 7 1 1 14 14 14 14 9 9 7 7

-
- - - -

16 16 13 13 11 11 13 13 16 16 19 19 19 19 11 11 13 13

-
- - - -

18 18 12 12 10 10 12 12 18 18 5 5 5 5 10 10 12 12

-
- - - -

3 3 6 6 8 8 6 6 3 3 0 0 0 0 8 8 6 6

-
-
- - - CAT3DBagRep - - -
- - - - -2000 -2000 0 -2000 -2000 0 -2000 -2000 0 -2000 2000 0 -2000 2000 0 -2000 2000 0 -1000 0 12500 0 -1000 12500 0 0 25000 0 0 25000 0 0 25000 0 0 25000 0 1000 12500 1000 0 12500 2000 -2000 0 2000 -2000 0 2000 -2000 0 2000 2000 0 2000 2000 0 2000 2000 0 - - - - - - - - - - -0.996815 0 0.0797449 0 -0.996815 0.0797449 0 0 -1 -0.996815 0 0.0797449 0 0 -1 0 0.996815 0.0797449 -0.996815 0 0.0797449 0 -0.996815 0.0797449 -0.996815 0 0.0797449 0 -0.996815 0.0797449 0 0.996815 0.0797449 0.996815 0 0.0797449 0 0.996815 0.0797449 0.996815 0 0.0797449 0 -0.996815 0.0797449 0 0 -1 0.996815 0 0.0797449 0 0 -1 0 0.996815 0.0797449 0.996815 0 0.0797449 - - - - - - - - - - - - - - -

17 17 15 15 2 2 2 2 4 4 17 17

-
- - - -

1 1 7 7 9 9 7 7 1 1 14 14 14 14 9 9 7 7

-
- - - -

16 16 13 13 11 11 13 13 16 16 19 19 19 19 11 11 13 13

-
- - - -

18 18 12 12 10 10 12 12 18 18 5 5 5 5 10 10 12 12

-
- - - -

3 3 6 6 8 8 6 6 3 3 0 0 0 0 8 8 6 6

-
-
- - - CAT3DBagRep - - -
- - - - -1000 -1000 0 -1000 -1000 0 -1000 -1000 0 -1000 1000 0 -1000 1000 0 -1000 1000 0 -500 0 2500 0 -500 2500 0 0 5000 0 0 5000 0 0 5000 0 0 5000 0 500 2500 500 0 2500 1000 -1000 0 1000 -1000 0 1000 -1000 0 1000 1000 0 1000 1000 0 1000 1000 0 - - - - - - - - - - -0.980582 0 0.196112 0 -0.980582 0.196112 0 0 -1 -0.980582 0 0.196112 0 0 -1 0 0.980582 0.196112 -0.980582 0 0.196112 0 -0.980582 0.196112 -0.980582 0 0.196112 0 -0.980582 0.196112 0 0.980582 0.196112 0.980582 0 0.196112 0 0.980582 0.196112 0.980582 0 0.196112 0 -0.980582 0.196112 0 0 -1 0.980582 0 0.196112 0 0 -1 0 0.980582 0.196112 0.980582 0 0.196112 - - - - - - - - - - - - - - -

17 17 15 15 2 2 2 2 4 4 17 17

-
- - - -

1 1 7 7 9 9 7 7 1 1 14 14 14 14 9 9 7 7

-
- - - -

16 16 13 13 11 11 13 13 16 16 19 19 19 19 11 11 13 13

-
- - - -

18 18 12 12 10 10 12 12 18 18 5 5 5 5 10 10 12 12

-
- - - -

3 3 6 6 8 8 6 6 3 3 0 0 0 0 8 8 6 6

-
-
- - - CAT3DBagRep - - -
-
- - - - - - - 1 0 0 1 - - - 1 0 0 1 - - - - - - - - - - - 0 1 0 1 - - - 0 1 0 1 - - - - - - - - - - - 0 0 1 1 - - - 0 0 1 1 - - - - - - - - - - - - - - - - - - - - - -1 -0 -0 - - -90 - 90 - - - - - - -1 -0 -0 - - 0 - 90 - - - - - - - - - - - - 0 0 30000 - - - 0 0 25000 - - - - - - - - - - - - - libkinscenes.kinScene/inst_kinmodel.0 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_1/axis0 - - - 0 - - - libkinscenes.kinScene/inst_kinmodel.0/joint_0/axis0 - - - 0 - - - - - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0 - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_1_axis0_value - - - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0 - - - libkinscenes.kinScene_libkinscenes.kinScene_inst_kinmodel.0_joint_0_axis0_value - - - - -
From b34eed700f57771f875cfc6319ea20db5a14900e Mon Sep 17 00:00:00 2001 From: wim Date: Thu, 8 Apr 2010 18:36:06 +0000 Subject: [PATCH 147/245] pull regression test fix from 1.0 branch. r28659:r28660 --- kdl_parser/test/pr2_desc_bracket.xml | 3 +-- kdl_parser/test/pr2_desc_bracket2.xml | 3 +-- kdl_parser/test/pr2_desc_vector.xml | 2 +- kdl_parser/test/test_kdl_parser.cpp | 1 + 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/kdl_parser/test/pr2_desc_bracket.xml b/kdl_parser/test/pr2_desc_bracket.xml index f512410..990f441 100644 --- a/kdl_parser/test/pr2_desc_bracket.xml +++ b/kdl_parser/test/pr2_desc_bracket.xml @@ -2,7 +2,7 @@ - + @@ -11,7 +11,6 @@ - diff --git a/kdl_parser/test/pr2_desc_bracket2.xml b/kdl_parser/test/pr2_desc_bracket2.xml index f3f2e00..70e513a 100644 --- a/kdl_parser/test/pr2_desc_bracket2.xml +++ b/kdl_parser/test/pr2_desc_bracket2.xml @@ -11,11 +11,10 @@ - - + diff --git a/kdl_parser/test/pr2_desc_vector.xml b/kdl_parser/test/pr2_desc_vector.xml index a6a37f3..1dcc98f 100644 --- a/kdl_parser/test/pr2_desc_vector.xml +++ b/kdl_parser/test/pr2_desc_vector.xml @@ -2,7 +2,7 @@ - + diff --git a/kdl_parser/test/test_kdl_parser.cpp b/kdl_parser/test/test_kdl_parser.cpp index 52ea5ff..c229cd2 100644 --- a/kdl_parser/test/test_kdl_parser.cpp +++ b/kdl_parser/test/test_kdl_parser.cpp @@ -68,6 +68,7 @@ protected: TEST_F(TestParser, test) { for (int i=1; i Date: Thu, 8 Apr 2010 18:37:48 +0000 Subject: [PATCH 148/245] merge regression test patch from 1.0 branch. r28660:r28661 --- robot_state_publisher/src/robot_state_publisher_node.cpp | 4 +++- robot_state_publisher/test/test_publisher.cpp | 4 +++- robot_state_publisher/test/test_publisher.launch | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/robot_state_publisher/src/robot_state_publisher_node.cpp b/robot_state_publisher/src/robot_state_publisher_node.cpp index ad51100..ae54ba9 100644 --- a/robot_state_publisher/src/robot_state_publisher_node.cpp +++ b/robot_state_publisher/src/robot_state_publisher_node.cpp @@ -71,10 +71,12 @@ int main(int argc, char** argv) if (tree.getNrOfSegments() == 0){ ROS_WARN("Robot state publisher got an empty tree and cannot publish any state to tf"); + ros::spin(); } else{ JointStateListener state_publisher(tree); + ros::spin(); } - ros::spin(); + return 0; } diff --git a/robot_state_publisher/test/test_publisher.cpp b/robot_state_publisher/test/test_publisher.cpp index 34c06c2..41c96a7 100644 --- a/robot_state_publisher/test/test_publisher.cpp +++ b/robot_state_publisher/test/test_publisher.cpp @@ -63,6 +63,7 @@ protected: /// constructor TestPublisher() { + /* // constructs a robot model from the xml file urdf::Model robot_model; if (g_argc == 2){ @@ -78,12 +79,13 @@ protected: ROS_ERROR("Failed to extract kdl tree from robot model"); publisher = new JointStateListener(tree); + */ } /// Destructor ~TestPublisher() { - delete publisher; + // delete publisher; } }; diff --git a/robot_state_publisher/test/test_publisher.launch b/robot_state_publisher/test/test_publisher.launch index 43d8fae..79b6a9c 100644 --- a/robot_state_publisher/test/test_publisher.launch +++ b/robot_state_publisher/test/test_publisher.launch @@ -1,5 +1,7 @@ + + - + From 210cd8227810b27d4b3a6479597d28476c3775fe Mon Sep 17 00:00:00 2001 From: wim Date: Wed, 14 Apr 2010 16:37:24 +0000 Subject: [PATCH 149/245] export boost l/c flags --- colladadom/manifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/colladadom/manifest.xml b/colladadom/manifest.xml index da732a0..49fa283 100644 --- a/colladadom/manifest.xml +++ b/colladadom/manifest.xml @@ -11,7 +11,7 @@ http://ros.org/wiki/colladadom - +
From 5edee733f677143ffee4cc541fac35b9afbb4afc Mon Sep 17 00:00:00 2001 From: wim Date: Wed, 14 Apr 2010 16:46:12 +0000 Subject: [PATCH 150/245] add authors of collada dom --- colladadom/manifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/colladadom/manifest.xml b/colladadom/manifest.xml index 49fa283..24c3de7 100644 --- a/colladadom/manifest.xml +++ b/colladadom/manifest.xml @@ -6,7 +6,7 @@ See http://sourceforge.net/projects/collada-dom. - John Hsu, Tim Field + Du Hung Hou, Khronos.org, Marcus Barnes, Greg Corson, Herbert Law, Sebastian Schwarz, Steven Thomas, John Hsu (ros package), Tim Field (ros package) BSD http://ros.org/wiki/colladadom From d8d84e3496b8b587b67f4fa371cb704c7b96ad5f Mon Sep 17 00:00:00 2001 From: wim Date: Wed, 14 Apr 2010 18:57:20 +0000 Subject: [PATCH 151/245] getting ready for 1.1.1 release --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8f96cf0..98631f5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,4 +16,4 @@ set(ROSPACK_MAKEDIST true) # variables. #list(APPEND CPACK_SOURCE_IGNORE_FILES /core/experimental) -rosbuild_make_distribution(1.1.0) +rosbuild_make_distribution(1.1.1) From c6b4ab66f97a28e390279c07cd4d6af656d9a960 Mon Sep 17 00:00:00 2001 From: tfield Date: Fri, 23 Apr 2010 18:31:27 +0000 Subject: [PATCH 152/245] collada_urdf: cleaned up interface, removing unfinished assimp mesh-loading --- collada_urdf/CMakeLists.txt | 2 +- .../include/collada_urdf/ColladaWriter.h | 128 +++ .../{src => include/collada_urdf}/STLLoader.h | 78 +- collada_urdf/manifest.xml | 1 - collada_urdf/src/ColladaWriter.cpp | 833 +++++++++++++++ collada_urdf/src/STLLoader.cpp | 14 +- collada_urdf/src/urdf_to_collada.cpp | 954 +----------------- 7 files changed, 1008 insertions(+), 1002 deletions(-) create mode 100644 collada_urdf/include/collada_urdf/ColladaWriter.h rename collada_urdf/{src => include/collada_urdf}/STLLoader.h (65%) create mode 100644 collada_urdf/src/ColladaWriter.cpp diff --git a/collada_urdf/CMakeLists.txt b/collada_urdf/CMakeLists.txt index 0763be9..7ed58f2 100644 --- a/collada_urdf/CMakeLists.txt +++ b/collada_urdf/CMakeLists.txt @@ -3,4 +3,4 @@ include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake) set(ROS_BUILD_TYPE Debug) rosbuild_init() set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) -rosbuild_add_executable(urdf_to_collada src/urdf_to_collada.cpp src/STLLoader.cpp) +rosbuild_add_executable(urdf_to_collada src/urdf_to_collada.cpp src/ColladaWriter.cpp src/STLLoader.cpp) diff --git a/collada_urdf/include/collada_urdf/ColladaWriter.h b/collada_urdf/include/collada_urdf/ColladaWriter.h new file mode 100644 index 0000000..728438c --- /dev/null +++ b/collada_urdf/include/collada_urdf/ColladaWriter.h @@ -0,0 +1,128 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2010, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redstributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +#ifndef COLLADA_URDF_COLLADA_WRITER_H +#define COLLADA_URDF_COLLADA_WRITER_H + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace collada_urdf { + +class Mesh; + +class ColladaWriter : public daeErrorHandler +{ +private: + struct SCENE + { + domVisual_sceneRef vscene; + domKinematics_sceneRef kscene; + domPhysics_sceneRef pscene; + domInstance_with_extraRef viscene; + domInstance_kinematics_sceneRef kiscene; + domInstance_with_extraRef piscene; + }; + +public: + ColladaWriter(std::string const& documentName, urdf::Model* robot); + virtual ~ColladaWriter(); + + /** + * todo + * @return + */ + bool writeScene(); + +protected: + virtual void handleError(daeString msg); + virtual void handleWarning(daeString msg); + +private: + SCENE createScene(); + void setupPhysics(SCENE scene); + void addGeometries(); + void loadMesh(std::string const& filename, domGeometryRef geometry, std::string const& geometry_id); + bool loadMeshWithSTLLoader(resource_retriever::MemoryResource const& resource, domGeometryRef geometry, std::string const& geometry_id); + void buildMeshFromSTLLoader(Mesh* stl_mesh, daeElementRef parent, std::string const& geometry_id); + void addJoints(daeElementRef parent); + void addBindings(SCENE scene); + void addKinematics(SCENE scene); + void addKinematicLink(boost::shared_ptr urdf_link, daeElementRef parent, int& link_num); + void addVisuals(SCENE scene); + void addMaterials(); + domEffectRef addEffect(std::string const& geometry_id, urdf::Color const& color_ambient, urdf::Color const& color_diffuse); + void addVisualLink(boost::shared_ptr urdf_link, daeElementRef parent, int& link_num); + domTranslateRef addTranslate(daeElementRef parent, urdf::Vector3 const& position); + domRotateRef addRotate(daeElementRef parent, urdf::Rotation const& r); + +private: + urdf::Model* robot_; + + boost::shared_ptr collada_; + domCOLLADA* dom_; + domCOLLADA::domSceneRef scene_; + + domLibrary_geometriesRef geometriesLib_; + domLibrary_visual_scenesRef visualScenesLib_; + domLibrary_kinematics_scenesRef kinematicsScenesLib_; + domLibrary_kinematics_modelsRef kinematicsModelsLib_; + domLibrary_jointsRef jointsLib_; + domLibrary_physics_scenesRef physicsScenesLib_; + domLibrary_materialsRef materialsLib_; + domLibrary_effectsRef effectsLib_; + + domKinematics_modelRef kmodel_; + + std::map geometry_ids_; //!< link.name -> geometry.id + std::map joint_sids_; //!< joint.name -> joint.sid + std::map node_ids_; //!< joint.name -> node.id +}; + +} + +#endif diff --git a/collada_urdf/src/STLLoader.h b/collada_urdf/include/collada_urdf/STLLoader.h similarity index 65% rename from collada_urdf/src/STLLoader.h rename to collada_urdf/include/collada_urdf/STLLoader.h index 8c7d768..6bec856 100644 --- a/collada_urdf/src/STLLoader.h +++ b/collada_urdf/include/collada_urdf/STLLoader.h @@ -1,7 +1,7 @@ /********************************************************************* * Software License Agreement (BSD License) * -* Copyright (c) 2008, Willow Garage, Inc. +* Copyright (c) 2010, Willow Garage, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -32,14 +32,11 @@ * POSSIBILITY OF SUCH DAMAGE. *********************************************************************/ -/* Author: Tim Field */ - -// STLLoader.h - -#ifndef COLLADA_URDF_STLLOADER_HH -#define COLLADA_URDF_STLLOADER_HH +#ifndef COLLADA_URDF_STL_LOADER_H +#define COLLADA_URDF_STL_LOADER_H #include + #include #include @@ -48,48 +45,49 @@ #define ORDER_MAX 10 #define FACE_MAX 200000 -namespace collada_urdf +namespace collada_urdf { + +class Vector3 { - class Vector3 - { - public: - Vector3(float x, float y, float z); +public: + Vector3(float x, float y, float z); - bool operator==(const Vector3& v) const; + bool operator==(Vector3 const& v) const; - float x; - float y; - float z; - }; + float x; + float y; + float z; +}; - class Mesh - { - public: - Mesh(); +class Mesh +{ +public: + Mesh(); - int getVertexIndex(const Vector3& v) const; + int getVertexIndex(Vector3 const& v) const; - void addVertex(const Vector3& v); - void addNormal(const Vector3& n); - void addIndex(unsigned int i); + void addVertex(Vector3 const& v); + void addNormal(Vector3 const& n); + void addIndex(unsigned int i); - public: - std::vector vertices; - std::vector normals; - std::vector indices; - }; +public: + std::vector vertices; + std::vector normals; + std::vector indices; +}; - class STLLoader - { - public: - Mesh* load(const std::string& filename); +class STLLoader +{ +public: + Mesh* load(std::string const& filename); + +private: + void readBinary (FILE* filein, Mesh* mesh); + uint32_t readLongInt (FILE* filein); + uint16_t readShortInt(FILE* filein); + float readFloat (FILE* filein); +}; - private: - void readBinary(FILE* filein, Mesh* mesh); - uint32_t readLongInt(FILE* filein); - uint16_t readShortInt(FILE* filein); - float readFloat(FILE* filein); - }; } #endif diff --git a/collada_urdf/manifest.xml b/collada_urdf/manifest.xml index ff3a891..d6bedf7 100644 --- a/collada_urdf/manifest.xml +++ b/collada_urdf/manifest.xml @@ -11,7 +11,6 @@ - diff --git a/collada_urdf/src/ColladaWriter.cpp b/collada_urdf/src/ColladaWriter.cpp new file mode 100644 index 0000000..b6e626a --- /dev/null +++ b/collada_urdf/src/ColladaWriter.cpp @@ -0,0 +1,833 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2010, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redstributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +#include "collada_urdf/ColladaWriter.h" + +#include "collada_urdf/STLLoader.h" + +#include + +#define foreach BOOST_FOREACH + +using std::string; +using std::map; +using std::vector; +using boost::shared_ptr; + +namespace collada_urdf { + +ColladaWriter::ColladaWriter(string const& documentName, urdf::Model* robot) : robot_(robot) { + daeErrorHandler::setErrorHandler(this); + + collada_.reset(new DAE()); + collada_->setIOPlugin(NULL); + collada_->setDatabase(NULL); + + daeDocument* doc = NULL; + daeInt error = collada_->getDatabase()->insertDocument(documentName.c_str(), &doc); // also creates a collada root + if (error != DAE_OK || doc == NULL) + { + std::cerr << "Failed to create new document" << std::endl; + throw; + } + + dom_ = daeSafeCast(doc->getDomRoot()); + dom_->setAttribute("xmlns:math", "http://www.w3.org/1998/Math/MathML"); + + // Create the required asset tag + domAssetRef asset = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_ASSET)); + { + domAsset::domCreatedRef created = daeSafeCast(asset->createAndPlace(COLLADA_ELEMENT_CREATED)); + created->setValue("2009-04-06T17:01:00.891550"); // @todo: replace with current date + domAsset::domModifiedRef modified = daeSafeCast(asset->createAndPlace(COLLADA_ELEMENT_MODIFIED)); + modified->setValue("2009-04-06T17:01:00.891550"); // @todo: replace with current date + + domAsset::domContributorRef contrib = daeSafeCast(asset->createAndPlace(COLLADA_TYPE_CONTRIBUTOR)); + domAsset::domContributor::domAuthoring_toolRef authoringtool = daeSafeCast(contrib->createAndPlace(COLLADA_ELEMENT_AUTHORING_TOOL)); + authoringtool->setValue("URDF Collada Writer"); + + domAsset::domUnitRef units = daeSafeCast(asset->createAndPlace(COLLADA_ELEMENT_UNIT)); + units->setMeter(1); + units->setName("meter"); + + domAsset::domUp_axisRef zup = daeSafeCast(asset->createAndPlace(COLLADA_ELEMENT_UP_AXIS)); + zup->setValue(UP_AXIS_Z_UP); + } + + scene_ = dom_->getScene(); + if (!scene_) + scene_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_SCENE)); + + visualScenesLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_VISUAL_SCENES)); + visualScenesLib_->setId("vscenes"); + geometriesLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_GEOMETRIES)); + geometriesLib_->setId("geometries"); + kinematicsScenesLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_KINEMATICS_SCENES)); + kinematicsScenesLib_->setId("kscenes"); + kinematicsModelsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_KINEMATICS_MODELS)); + kinematicsModelsLib_->setId("kmodels"); + jointsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_JOINTS)); + jointsLib_->setId("joints"); + + physicsScenesLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_PHYSICS_SCENES)); + physicsScenesLib_->setId("physics_scenes"); + effectsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_EFFECTS)); + effectsLib_->setId("effects"); + materialsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_MATERIALS)); + materialsLib_->setId("materials"); +} + +ColladaWriter::~ColladaWriter() { + collada_.reset(); + DAE::cleanup(); +} + +bool ColladaWriter::writeScene() { + SCENE scene = createScene(); + + setupPhysics(scene); + addGeometries(); + addKinematics(scene); + addVisuals(scene); + addMaterials(); + addBindings(scene); + + collada_->writeAll(); + + return true; +} + +// Implementation + +ColladaWriter::SCENE ColladaWriter::createScene() { + SCENE s; + + // Create visual scene + s.vscene = daeSafeCast(visualScenesLib_->createAndPlace(COLLADA_ELEMENT_VISUAL_SCENE)); + s.vscene->setId("vscene"); + s.vscene->setName("URDF Visual Scene"); + + // Create instance visual scene + s.viscene = daeSafeCast(scene_->createAndPlace(COLLADA_ELEMENT_INSTANCE_VISUAL_SCENE)); + s.viscene->setUrl((string("#") + string(s.vscene->getID())).c_str()); + + // Create kinematics scene + s.kscene = daeSafeCast(kinematicsScenesLib_->createAndPlace(COLLADA_ELEMENT_KINEMATICS_SCENE)); + s.kscene->setId("kscene"); + s.kscene->setName("URDF Kinematics Scene"); + + // Create instance kinematics scene + s.kiscene = daeSafeCast(scene_->createAndPlace(COLLADA_ELEMENT_INSTANCE_KINEMATICS_SCENE)); + s.kiscene->setUrl((string("#") + string(s.kscene->getID())).c_str()); + + // Create physics scene + s.pscene = daeSafeCast(physicsScenesLib_->createAndPlace(COLLADA_ELEMENT_PHYSICS_SCENE)); + s.pscene->setId("pscene"); + s.pscene->setName("URDF Physics Scene"); + + // Create instance physics scene + s.piscene = daeSafeCast(scene_->createAndPlace(COLLADA_ELEMENT_INSTANCE_PHYSICS_SCENE)); + s.piscene->setUrl((string("#") + string(s.pscene->getID())).c_str()); + + return s; +} + +void ColladaWriter::handleError(daeString msg) { + std::cerr << "COLLADA error: " << msg << std::endl; +} + +void ColladaWriter::handleWarning(daeString msg) { + std::cerr << "COLLADA warning: " << msg << std::endl; +} + +void ColladaWriter::setupPhysics(SCENE scene) { + // + domPhysics_scene::domTechnique_commonRef common = daeSafeCast(scene.pscene->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); + { + // 0 0 0 + domTargetable_float3Ref g = daeSafeCast(common->createAndPlace(COLLADA_ELEMENT_GRAVITY)); + g->getValue().set3(0.0, 0.0, 0.0); + // + } + // +} + +void ColladaWriter::addGeometries() { + int link_num = 0; + + for (map >::const_iterator i = robot_->links_.begin(); i != robot_->links_.end(); i++) { + shared_ptr urdf_link = i->second; + + if (urdf_link->visual == NULL || urdf_link->visual->geometry == NULL) + continue; + + switch (urdf_link->visual->geometry->type) { + case urdf::Geometry::MESH: { + urdf::Mesh* urdf_mesh = (urdf::Mesh*) urdf_link->visual->geometry.get(); + + string filename = urdf_mesh->filename; + urdf::Vector3 scale = urdf_mesh->scale; // @todo use scale + + // + domGeometryRef geometry = daeSafeCast(geometriesLib_->createAndPlace(COLLADA_ELEMENT_GEOMETRY)); + string geometry_id = string("g1.link") + boost::lexical_cast(link_num) + string(".geom0"); + geometry->setId(geometry_id.c_str()); + { + loadMesh(filename, geometry, geometry_id); + } + geometry_ids_[urdf_link->name] = geometry_id; + // + + link_num++; + break; + } + case urdf::Geometry::SPHERE: { + std::cerr << "Warning: geometry type SPHERE of link " << urdf_link->name << " is unsupported" << std::endl; + break; + } + case urdf::Geometry::BOX: { + std::cerr << "Warning: geometry type BOX of link " << urdf_link->name << " is unsupported" << std::endl; + break; + } + case urdf::Geometry::CYLINDER: { + std::cerr << "Warning: geometry type CYLINDER of link " << urdf_link->name << " is unsupported" << std::endl; + break; + } + default: { + std::cerr << "Warning: geometry type " << urdf_link->visual->geometry->type << " of link " << urdf_link->name << " is supported" << std::endl; + break; + } + } + } +} + +void ColladaWriter::loadMesh(string const& filename, domGeometryRef geometry, string const& geometry_id) { + // Load the mesh + resource_retriever::MemoryResource resource; + resource_retriever::Retriever retriever; + try { + resource = retriever.get(filename.c_str()); + } + catch (resource_retriever::Exception& e) { + std::cerr << "Unable to load mesh file " << filename << ": " << e.what() << std::endl; + return; + } + + // Try assimp first, then STLLoader + if (!loadMeshWithSTLLoader(resource, geometry, geometry_id)) + std::cerr << "Can't load mesh " << filename << std::endl; +} + +bool ColladaWriter::loadMeshWithSTLLoader(resource_retriever::MemoryResource const& resource, domGeometryRef geometry, string const& geometry_id) { + // Write the resource to a temporary file + char tmp_filename[] = "/tmp/collada_urdf_XXXXXX"; + int fd = mkstemp(tmp_filename); + write(fd, resource.data.get(), resource.size); + close(fd); + + // Import the mesh using STLLoader + STLLoader loader; + Mesh* stl_mesh = loader.load(string(tmp_filename)); + buildMeshFromSTLLoader(stl_mesh, geometry, geometry_id); + delete stl_mesh; + + // Delete the temporary file + unlink(tmp_filename); + + return true; +} + +void ColladaWriter::buildMeshFromSTLLoader(Mesh* stl_mesh, daeElementRef parent, string const& geometry_id) { + // + domMeshRef mesh = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_MESH)); + { + unsigned int num_vertices = stl_mesh->vertices.size(); + unsigned int num_indices = stl_mesh->indices.size(); + unsigned int num_faces = num_indices / 3; + + // + domSourceRef positions_source = daeSafeCast(mesh->createAndPlace(COLLADA_ELEMENT_SOURCE)); + positions_source->setId((geometry_id + string(".positions")).c_str()); + { + // + domFloat_arrayRef positions_array = daeSafeCast(positions_source->createAndPlace(COLLADA_ELEMENT_FLOAT_ARRAY)); + positions_array->setId((geometry_id + string(".positions-array")).c_str()); + positions_array->setCount(num_vertices * 3); + positions_array->setDigits(6); // 6 decimal places + positions_array->getValue().setCount(num_vertices * 3); + for (unsigned int j = 0; j < num_vertices; j++) { + positions_array->getValue()[j * 3 ] = stl_mesh->vertices[j].x; + positions_array->getValue()[j * 3 + 1] = stl_mesh->vertices[j].y; + positions_array->getValue()[j * 3 + 2] = stl_mesh->vertices[j].z; + } + // + + // + domSource::domTechnique_commonRef source_tech = daeSafeCast(positions_source->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); + { + // + domAccessorRef accessor = daeSafeCast(source_tech->createAndPlace(COLLADA_ELEMENT_ACCESSOR)); + accessor->setCount(num_vertices / 3); + accessor->setSource(xsAnyURI(*positions_array, string("#") + geometry_id + string(".positions-array"))); + accessor->setStride(3); + { + // + // + // + domParamRef px = daeSafeCast(accessor->createAndPlace(COLLADA_ELEMENT_PARAM)); px->setName("X"); px->setType("float"); + domParamRef py = daeSafeCast(accessor->createAndPlace(COLLADA_ELEMENT_PARAM)); py->setName("Y"); py->setType("float"); + domParamRef pz = daeSafeCast(accessor->createAndPlace(COLLADA_ELEMENT_PARAM)); pz->setName("Z"); pz->setType("float"); + } + // + } + // + } + + // + domVerticesRef vertices = daeSafeCast(mesh->createAndPlace(COLLADA_ELEMENT_VERTICES)); + string vertices_id = geometry_id + string(".vertices"); + vertices->setId(vertices_id.c_str()); + { + // + domInput_localRef vertices_input = daeSafeCast(vertices->createAndPlace(COLLADA_ELEMENT_INPUT)); + vertices_input->setSemantic("POSITION"); + vertices_input->setSource(domUrifragment(*positions_source, string("#") + string(positions_source->getId()))); + } + // + + // + domTrianglesRef triangles = daeSafeCast(mesh->createAndPlace(COLLADA_ELEMENT_TRIANGLES)); + triangles->setCount(num_faces); + triangles->setMaterial("mat0"); + { + // + domInput_local_offsetRef vertex_offset = daeSafeCast(triangles->createAndPlace(COLLADA_ELEMENT_INPUT)); + vertex_offset->setSemantic("VERTEX"); + vertex_offset->setOffset(0); + vertex_offset->setSource(domUrifragment(*positions_source, string("#") + vertices_id)); + { + //

0 1 2 3 ... + domPRef indices = daeSafeCast(triangles->createAndPlace(COLLADA_ELEMENT_P)); + indices->getValue().setCount(num_indices); + for (unsigned int i = 0; i < num_indices; i++) + indices->getValue()[i] = stl_mesh->indices[i]; + //

+ } + } + //
+ } + //
+} + +void ColladaWriter::addJoints(daeElementRef parent) { + int joint_num = 0; + for (map >::const_iterator i = robot_->joints_.begin(); i != robot_->joints_.end(); i++) { + shared_ptr urdf_joint = i->second; + + // + domJointRef joint = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_JOINT)); + string joint_sid = string("joint") + boost::lexical_cast(joint_num); + joint_num++; + joint->setName(urdf_joint->name.c_str()); + joint->setSid(joint_sid.c_str()); + joint_sids_[urdf_joint->name] = joint_sid; + + double axis_x = urdf_joint->axis.x; + double axis_y = urdf_joint->axis.y; + double axis_z = urdf_joint->axis.z; + if (axis_x == 0.0 && axis_y == 0.0 && axis_z == 0.0) { + axis_x = 1.0; + axis_y = 0.0; + axis_z = 0.0; + } + + // @hack: OpenRAVE appears to flip joint axes + axis_x *= -1.0; + axis_y *= -1.0; + axis_z *= -1.0; + + switch (urdf_joint->type) + { + case urdf::Joint::REVOLUTE: { + // + domAxis_constraintRef revolute = daeSafeCast(joint->createAndPlace(COLLADA_ELEMENT_REVOLUTE)); + revolute->setSid("axis0"); + { + // + domAxisRef axis = daeSafeCast(revolute->createAndPlace(COLLADA_ELEMENT_AXIS)); + { + axis->getValue().setCount(3); + axis->getValue()[0] = axis_x; + axis->getValue()[1] = axis_y; + axis->getValue()[2] = axis_z; + } + // + + // + domJoint_limitsRef limits = daeSafeCast(revolute->createAndPlace(COLLADA_TYPE_LIMITS)); + { + daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MIN))->getValue() = angles::to_degrees(urdf_joint->limits->lower); + daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MAX))->getValue() = angles::to_degrees(urdf_joint->limits->upper); + } + // + } + // + break; + } + case urdf::Joint::CONTINUOUS: { + // Model as a REVOLUTE joint without limits + + // + domAxis_constraintRef revolute = daeSafeCast(joint->createAndPlace(COLLADA_ELEMENT_REVOLUTE)); + revolute->setSid("axis0"); + { + // + domAxisRef axis = daeSafeCast(revolute->createAndPlace(COLLADA_ELEMENT_AXIS)); + { + axis->getValue().setCount(3); + axis->getValue()[0] = axis_x; + axis->getValue()[1] = axis_y; + axis->getValue()[2] = axis_z; + } + // + } + // + break; + } + case urdf::Joint::PRISMATIC: { + // + domAxis_constraintRef prismatic = daeSafeCast(joint->createAndPlace(COLLADA_ELEMENT_PRISMATIC)); + prismatic->setSid("axis0"); + { + // + domAxisRef axis = daeSafeCast(prismatic->createAndPlace(COLLADA_ELEMENT_AXIS)); + { + axis->getValue().setCount(3); + axis->getValue()[0] = axis_x; + axis->getValue()[1] = axis_y; + axis->getValue()[2] = axis_z; + } + // + + // + domJoint_limitsRef limits = daeSafeCast(prismatic->createAndPlace(COLLADA_TYPE_LIMITS)); + { + daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MIN))->getValue() = urdf_joint->limits->lower; + daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MAX))->getValue() = urdf_joint->limits->upper; + } + // + } + // + break; + } + case urdf::Joint::FIXED: { + // Model as a REVOLUTE joint with no leeway + + domAxis_constraintRef revolute = daeSafeCast(joint->createAndPlace(COLLADA_ELEMENT_REVOLUTE)); + revolute->setSid("axis0"); + { + // + domAxisRef axis = daeSafeCast(revolute->createAndPlace(COLLADA_ELEMENT_AXIS)); + { + axis->getValue().setCount(3); + axis->getValue()[0] = axis_x; + axis->getValue()[1] = axis_y; + axis->getValue()[2] = axis_z; + } + // + + // + domJoint_limitsRef limits = daeSafeCast(revolute->createAndPlace(COLLADA_TYPE_LIMITS)); + { + daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MIN))->getValue() = 0.0; + daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MAX))->getValue() = 0.0; + } + // + } + // + break; + } + case urdf::Joint::UNKNOWN: { + std::cerr << "Joint type UNKNOWN of joint " << urdf_joint->name << " is unsupported" << std::endl; + break; + } + case urdf::Joint::FLOATING: { + std::cerr << "Joint type FLOATING of joint " << urdf_joint->name << " is unsupported" << std::endl; + break; + } + case urdf::Joint::PLANAR: { + std::cerr << "Joint type PLANAR of joint " << urdf_joint->name << " is unsupported" << std::endl; + break; + } + default: { + std::cerr << "Joint type " << urdf_joint->type << " of joint " << urdf_joint->name << " is unsupported" << std::endl; + break; + } + } + } +} + +void ColladaWriter::addBindings(SCENE scene) { + string model_id = kmodel_->getID(); + string inst_model_sid = string("inst_") + model_id; + + // + // + domBind_kinematics_modelRef kmodel_bind = daeSafeCast(scene.kiscene->createAndPlace(COLLADA_ELEMENT_BIND_KINEMATICS_MODEL)); + kmodel_bind->setNode("v1.node0"); // @todo + daeSafeCast(kmodel_bind->createAndPlace(COLLADA_ELEMENT_PARAM))->setValue(string(string(scene.kscene->getID()) + string(".") + inst_model_sid).c_str()); + + for (map >::const_iterator i = robot_->joints_.begin(); i != robot_->joints_.end(); i++) { + shared_ptr urdf_joint = i->second; + + int idof = 0; // @todo assuming 1 dof joints + string joint_sid = joint_sids_[urdf_joint->name]; + string axis_name = string("axis") + boost::lexical_cast(idof); + string joint_axis_sid = string("kscene.inst_") + model_id + string(".") + joint_sid + string(".") + axis_name; + string joint_axis_value_sid = joint_axis_sid + string("_value"); + + // + domBind_joint_axisRef joint_bind = daeSafeCast(scene.kiscene->createAndPlace(COLLADA_ELEMENT_BIND_JOINT_AXIS)); + string node_name = node_ids_[urdf_joint->name]; + joint_bind->setTarget((node_name + string("/node_") + joint_sid + string("_") + axis_name).c_str()); + { + // + domCommon_sidref_or_paramRef axis_bind = daeSafeCast(joint_bind->createAndPlace(COLLADA_ELEMENT_AXIS)); + { + daeSafeCast(axis_bind->createAndPlace(COLLADA_TYPE_PARAM))->setValue(joint_axis_sid.c_str()); + } + // + // + domCommon_float_or_paramRef value_bind = daeSafeCast(joint_bind->createAndPlace(COLLADA_ELEMENT_VALUE)); + { + daeSafeCast(value_bind->createAndPlace(COLLADA_TYPE_PARAM))->setValue(joint_axis_value_sid.c_str()); + } + } + // + } +} + +void ColladaWriter::addKinematics(SCENE scene) { + // + domKinematics_modelRef kmodel = daeSafeCast(kinematicsModelsLib_->createAndPlace(COLLADA_ELEMENT_KINEMATICS_MODEL)); + kmodel->setId("k1"); + kmodel->setName(robot_->getName().c_str()); + { + // + domKinematics_model_techniqueRef technique = daeSafeCast(kmodel->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); + addJoints(technique); + // + + // + int link_num = 0; + addKinematicLink(robot_->getRoot(), technique, link_num); + // + } + kmodel_ = kmodel; + // + + string model_id = kmodel->getID(); + string inst_model_sid = string("inst_") + model_id; + + // + domInstance_kinematics_modelRef ikm = daeSafeCast(scene.kscene->createAndPlace(COLLADA_ELEMENT_INSTANCE_KINEMATICS_MODEL)); + ikm->setUrl((string("#") + model_id).c_str()); + ikm->setSid(inst_model_sid.c_str()); + { + // + domKinematics_newparamRef newparam_model = daeSafeCast(ikm->createAndPlace(COLLADA_ELEMENT_NEWPARAM)); + string newparam_model_sid = string("kscene.inst_") + model_id; + newparam_model->setSid(newparam_model_sid.c_str()); + { + // kscene/inst_k1 + string model_sidref = string("kscene/inst_") + model_id; + daeSafeCast(newparam_model->createAndPlace(COLLADA_ELEMENT_SIDREF))->setValue(model_sidref.c_str()); + } + // + + for (map >::const_iterator i = robot_->joints_.begin(); i != robot_->joints_.end(); i++) { + shared_ptr urdf_joint = i->second; + + int idof = 0; // @todo assuming 1 dof joints + + string joint_sid = joint_sids_[urdf_joint->name]; + + string axis_name = string("axis") + boost::lexical_cast(idof); + + // + domKinematics_newparamRef newparam = daeSafeCast(ikm->createAndPlace(COLLADA_ELEMENT_NEWPARAM)); + string newparam_sid = string("kscene.inst_") + model_id + string(".") + joint_sid + string(".") + axis_name; + newparam->setSid(newparam_sid.c_str()); + { + // kscene/inst_k1/joint0/axis0 + string sidref = string("kscene/inst_") + model_id + string("/") + joint_sid + string("/") + axis_name; + daeSafeCast(newparam->createAndPlace(COLLADA_ELEMENT_SIDREF))->setValue(sidref.c_str()); + } + // + + // + domKinematics_newparamRef newparam_value = daeSafeCast(ikm->createAndPlace(COLLADA_ELEMENT_NEWPARAM)); + string newparam_value_sid = string("kscene.inst_") + model_id + string(".") + joint_sid + string(".") + axis_name + string("_value"); + newparam_value->setSid(newparam_value_sid.c_str()); + { + // 0 + daeSafeCast(newparam_value->createAndPlace(COLLADA_ELEMENT_FLOAT))->setValue(0.0f); + } + // + } + } + // +} + +void ColladaWriter::addKinematicLink(shared_ptr urdf_link, daeElementRef parent, int& link_num) { + // + domLinkRef link = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_LINK)); + string link_sid = string("link") + boost::lexical_cast(link_num); + link->setName(urdf_link->name.c_str()); + link->setSid(link_sid.c_str()); + link_num++; + foreach(shared_ptr urdf_joint, urdf_link->child_joints) { + // + domLink::domAttachment_fullRef attachment_full = daeSafeCast(link->createAndPlace(COLLADA_TYPE_ATTACHMENT_FULL)); + string attachment_joint = string("k1/") + joint_sids_[urdf_joint->name]; + attachment_full->setJoint(attachment_joint.c_str()); + { + addRotate(attachment_full, urdf_joint->parent_to_joint_origin_transform.rotation); + addTranslate(attachment_full, urdf_joint->parent_to_joint_origin_transform.position); + addKinematicLink(robot_->getLink(urdf_joint->child_link_name), attachment_full, link_num); + } + // + } + // +} + +void ColladaWriter::addVisuals(SCENE scene) { + // + domNodeRef root_node = daeSafeCast(scene.vscene->createAndPlace(COLLADA_ELEMENT_NODE)); + root_node->setId("v1"); + root_node->setName(robot_->getName().c_str()); + { + int link_num = 0; + addVisualLink(robot_->getRoot(), root_node, link_num); + } +} + +void ColladaWriter::addMaterials() { + urdf::Color ambient, diffuse; + ambient.init("1 1 1 0"); + diffuse.init("1 1 1 0"); + + for (map >::const_iterator i = robot_->links_.begin(); i != robot_->links_.end(); i++) { + shared_ptr urdf_link = i->second; + + map::const_iterator j = geometry_ids_.find(urdf_link->name); + if (j == geometry_ids_.end()) + continue; + + string geometry_id = j->second; + + domEffectRef effect = addEffect(geometry_id, ambient, diffuse); + + // + domMaterialRef material = daeSafeCast(materialsLib_->createAndPlace(COLLADA_ELEMENT_MATERIAL)); + string material_id = geometry_id + string(".mat"); + material->setId(material_id.c_str()); + { + // + domInstance_effectRef instance_effect = daeSafeCast(material->createAndPlace(COLLADA_ELEMENT_INSTANCE_EFFECT)); + string effect_id(effect->getId()); + instance_effect->setUrl((string("#") + effect_id).c_str()); + } + // + } +} + +domEffectRef ColladaWriter::addEffect(string const& geometry_id, urdf::Color const& color_ambient, urdf::Color const& color_diffuse) +{ + // + domEffectRef effect = daeSafeCast(effectsLib_->createAndPlace(COLLADA_ELEMENT_EFFECT)); + string effect_id = geometry_id + string(".eff"); + effect->setId(effect_id.c_str()); + { + // + domProfile_commonRef profile = daeSafeCast(effect->createAndPlace(COLLADA_ELEMENT_PROFILE_COMMON)); + { + // + domProfile_common::domTechniqueRef technique = daeSafeCast(profile->createAndPlace(COLLADA_ELEMENT_TECHNIQUE)); + { + // + domProfile_common::domTechnique::domPhongRef phong = daeSafeCast(technique->createAndPlace(COLLADA_ELEMENT_PHONG)); + { + // + domFx_common_color_or_textureRef ambient = daeSafeCast(phong->createAndPlace(COLLADA_ELEMENT_AMBIENT)); + { + // r g b a + domFx_common_color_or_texture::domColorRef ambient_color = daeSafeCast(ambient->createAndPlace(COLLADA_ELEMENT_COLOR)); + ambient_color->getValue().setCount(4); + ambient_color->getValue()[0] = color_ambient.r; + ambient_color->getValue()[1] = color_ambient.g; + ambient_color->getValue()[2] = color_ambient.b; + ambient_color->getValue()[3] = color_ambient.a; + // + } + // + + // + domFx_common_color_or_textureRef diffuse = daeSafeCast(phong->createAndPlace(COLLADA_ELEMENT_DIFFUSE)); + { + // r g b a + domFx_common_color_or_texture::domColorRef diffuse_color = daeSafeCast(diffuse->createAndPlace(COLLADA_ELEMENT_COLOR)); + diffuse_color->getValue().setCount(4); + diffuse_color->getValue()[0] = color_diffuse.r; + diffuse_color->getValue()[1] = color_diffuse.g; + diffuse_color->getValue()[2] = color_diffuse.b; + diffuse_color->getValue()[3] = color_diffuse.a; + // + } + // + } + // + } + // + } + // + } + // + + return effect; +} + +void ColladaWriter::addVisualLink(shared_ptr urdf_link, daeElementRef parent, int& link_num) { + // + domNodeRef node = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_NODE)); + string node_sid = string("node") + boost::lexical_cast(link_num); + string node_id = string("v1.") + node_sid; + node->setName(urdf_link->name.c_str()); + node->setSid(node_sid.c_str()); + node->setId(node_id.c_str()); + link_num++; + { + if (urdf_link->parent_joint != NULL) { + // x y z w + addRotate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.rotation); + // x y z + addTranslate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.position); + + // x y z angle + domRotateRef joint_rotate = addRotate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.rotation); + string joint_sid = joint_sids_[urdf_link->parent_joint->name]; + string joint_rotate_sid = string("node_") + joint_sid + string("_axis0"); + joint_rotate->setSid(joint_rotate_sid.c_str()); + + node_ids_[urdf_link->parent_joint->name] = node_id; + } + + // + map::const_iterator i = geometry_ids_.find(urdf_link->name); + if (i != geometry_ids_.end()) { + domInstance_geometryRef instance_geometry = daeSafeCast(node->createAndPlace(COLLADA_ELEMENT_INSTANCE_GEOMETRY)); + string geometry_id = i->second; + string instance_geometry_url = string("#") + geometry_id; + instance_geometry->setUrl(instance_geometry_url.c_str()); + { + // + domBind_materialRef bind_material = daeSafeCast(instance_geometry->createAndPlace(COLLADA_ELEMENT_BIND_MATERIAL)); + { + // + domBind_material::domTechnique_commonRef technique_common = daeSafeCast(bind_material->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); + { + // + domInstance_materialRef instance_material = daeSafeCast(technique_common->createAndPlace(COLLADA_ELEMENT_INSTANCE_MATERIAL)); + instance_material->setTarget((instance_geometry_url + string(".mat")).c_str()); + instance_material->setSymbol("mat0"); + // + } + // + } + // + } + } + // + + // + foreach(shared_ptr link2, urdf_link->child_links) + addVisualLink(link2, node, link_num); + // + } + // +} + +domTranslateRef ColladaWriter::addTranslate(daeElementRef parent, urdf::Vector3 const& position) { + // x y z + domTranslateRef trans = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_TRANSLATE)); + trans->getValue().setCount(3); + trans->getValue()[0] = position.x; + trans->getValue()[1] = position.y; + trans->getValue()[2] = position.z; + return trans; +} + +domRotateRef ColladaWriter::addRotate(daeElementRef parent, urdf::Rotation const& r) { + double ax, ay, az, aa; + + // Convert from quaternion to axis-angle + double sqr_len = r.x * r.x + r.y * r.y + r.z * r.z; + if (sqr_len > 0) { + aa = 2 * acos(r.w); + + double inv_len = 1.0 / sqrt(sqr_len); + ax = r.x * inv_len; + ay = r.y * inv_len; + az = r.z * inv_len; + } + else { + // Angle is 0 (mod 2*pi), so any axis will do + aa = 0.0; + ax = 1.0; + ay = 0.0; + az = 0.0; + } + + // x y z w + domRotateRef rot = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_ROTATE)); + rot->getValue().setCount(4); + rot->getValue()[0] = ax; + rot->getValue()[1] = ay; + rot->getValue()[2] = az; + rot->getValue()[3] = angles::to_degrees(aa); + + return rot; +} + +} diff --git a/collada_urdf/src/STLLoader.cpp b/collada_urdf/src/STLLoader.cpp index b96be83..ada5ef4 100644 --- a/collada_urdf/src/STLLoader.cpp +++ b/collada_urdf/src/STLLoader.cpp @@ -1,7 +1,7 @@ /********************************************************************* * Software License Agreement (BSD License) * -* Copyright (c) 2008, Willow Garage, Inc. +* Copyright (c) 2010, Willow Garage, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -32,18 +32,14 @@ * POSSIBILITY OF SUCH DAMAGE. *********************************************************************/ -/* Author: Tim Field */ - -// STLLoader.cpp - #include #include #include #include -#include "STLLoader.h" +#include "collada_urdf/STLLoader.h" -using namespace collada_urdf; +namespace collada_urdf { Vector3::Vector3(float _x, float _y, float _z) : x(_x), y(_y), z(_z) { } @@ -66,8 +62,6 @@ void Mesh::addVertex(const Vector3& v) { vertices.push_back(v); } void Mesh::addNormal(const Vector3& n) { normals.push_back(n); } void Mesh::addIndex(unsigned int i) { indices.push_back(i); } -// - Mesh* STLLoader::load(const std::string& filename) { Mesh* mesh = new Mesh(); @@ -133,3 +127,5 @@ uint16_t STLLoader::readShortInt(FILE* filein) { return ival; } + +} diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp index edf51c9..1693f75 100644 --- a/collada_urdf/src/urdf_to_collada.cpp +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -1,7 +1,7 @@ /********************************************************************* * Software License Agreement (BSD License) * -* Copyright (c) 2008, Willow Garage, Inc. +* Copyright (c) 2010, Willow Garage, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -32,955 +32,7 @@ * POSSIBILITY OF SUCH DAMAGE. *********************************************************************/ -/* Author: Tim Field */ - -// urdf_to_collada.cpp - -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include - -#include - -#include "STLLoader.h" - -using namespace std; - -namespace collada_urdf { - -class ColladaWriter : public daeErrorHandler -{ -public: - struct SCENE - { - domVisual_sceneRef vscene; - domKinematics_sceneRef kscene; - domPhysics_sceneRef pscene; - domInstance_with_extraRef viscene; - domInstance_kinematics_sceneRef kiscene; - domInstance_with_extraRef piscene; - }; - - urdf::Model* robot_; - - boost::shared_ptr collada_; - domCOLLADA* dom_; - domCOLLADA::domSceneRef scene_; - - domLibrary_geometriesRef geometriesLib_; - domLibrary_visual_scenesRef visualScenesLib_; - domLibrary_kinematics_scenesRef kinematicsScenesLib_; - domLibrary_kinematics_modelsRef kinematicsModelsLib_; - domLibrary_jointsRef jointsLib_; - domLibrary_physics_scenesRef physicsScenesLib_; - domLibrary_materialsRef materialsLib_; - domLibrary_effectsRef effectsLib_; - //domLibrary_articulated_systemsRef articulatedSystemsLib_; - - domKinematics_modelRef kmodel_; - - map geometry_ids_; // link.name -> geometry.id - map joint_sids_; // joint.name -> joint.sid - map node_ids_; // joint.name -> node.id - -public: - ColladaWriter(const string& documentName, urdf::Model* robot) : robot_(robot) { - daeErrorHandler::setErrorHandler(this); - - collada_.reset(new DAE()); - collada_->setIOPlugin(NULL); - collada_->setDatabase(NULL); - - daeDocument* doc = NULL; - daeInt error = collada_->getDatabase()->insertDocument(documentName.c_str(), &doc); // also creates a collada root - if (error != DAE_OK || doc == NULL) - { - cerr << "Failed to create new document\n"; - throw; - } - - dom_ = daeSafeCast(doc->getDomRoot()); - dom_->setAttribute("xmlns:math", "http://www.w3.org/1998/Math/MathML"); - - // Create the required asset tag - domAssetRef asset = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_ASSET)); - { - domAsset::domCreatedRef created = daeSafeCast(asset->createAndPlace(COLLADA_ELEMENT_CREATED)); - created->setValue("2009-04-06T17:01:00.891550"); // @todo: replace with current date - domAsset::domModifiedRef modified = daeSafeCast(asset->createAndPlace(COLLADA_ELEMENT_MODIFIED)); - modified->setValue("2009-04-06T17:01:00.891550"); // @todo: replace with current date - - domAsset::domContributorRef contrib = daeSafeCast(asset->createAndPlace(COLLADA_TYPE_CONTRIBUTOR)); - domAsset::domContributor::domAuthoring_toolRef authoringtool = daeSafeCast(contrib->createAndPlace(COLLADA_ELEMENT_AUTHORING_TOOL)); - authoringtool->setValue("URDF Collada Writer"); - - domAsset::domUnitRef units = daeSafeCast(asset->createAndPlace(COLLADA_ELEMENT_UNIT)); - units->setMeter(1); - units->setName("meter"); - - domAsset::domUp_axisRef zup = daeSafeCast(asset->createAndPlace(COLLADA_ELEMENT_UP_AXIS)); - zup->setValue(UP_AXIS_Z_UP); - } - - scene_ = dom_->getScene(); - if (!scene_) - scene_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_SCENE)); - - visualScenesLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_VISUAL_SCENES)); - visualScenesLib_->setId("vscenes"); - geometriesLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_GEOMETRIES)); - geometriesLib_->setId("geometries"); - kinematicsScenesLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_KINEMATICS_SCENES)); - kinematicsScenesLib_->setId("kscenes"); - kinematicsModelsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_KINEMATICS_MODELS)); - kinematicsModelsLib_->setId("kmodels"); - jointsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_JOINTS)); - jointsLib_->setId("joints"); - - physicsScenesLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_PHYSICS_SCENES)); - physicsScenesLib_->setId("physics_scenes"); - effectsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_EFFECTS)); - effectsLib_->setId("effects"); - materialsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_MATERIALS)); - materialsLib_->setId("materials"); - - //articulatedSystemsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_ARTICULATED_SYSTEMS)); - //articulatedSystemsLib_->setId("articulated_systems"); - } - - virtual ~ColladaWriter() { - collada_.reset(); - DAE::cleanup(); - } - - SCENE createScene() { - SCENE s; - - // Create visual scene - s.vscene = daeSafeCast(visualScenesLib_->createAndPlace(COLLADA_ELEMENT_VISUAL_SCENE)); - s.vscene->setId("vscene"); - s.vscene->setName("URDF Visual Scene"); - - // Create instance visual scene - s.viscene = daeSafeCast(scene_->createAndPlace(COLLADA_ELEMENT_INSTANCE_VISUAL_SCENE)); - s.viscene->setUrl((string("#") + string(s.vscene->getID())).c_str()); - - // Create kinematics scene - s.kscene = daeSafeCast(kinematicsScenesLib_->createAndPlace(COLLADA_ELEMENT_KINEMATICS_SCENE)); - s.kscene->setId("kscene"); - s.kscene->setName("URDF Kinematics Scene"); - - // Create instance kinematics scene - s.kiscene = daeSafeCast(scene_->createAndPlace(COLLADA_ELEMENT_INSTANCE_KINEMATICS_SCENE)); - s.kiscene->setUrl((string("#") + string(s.kscene->getID())).c_str()); - - // Create physics scene - s.pscene = daeSafeCast(physicsScenesLib_->createAndPlace(COLLADA_ELEMENT_PHYSICS_SCENE)); - s.pscene->setId("pscene"); - s.pscene->setName("URDF Physics Scene"); - - // Create instance physics scene - s.piscene = daeSafeCast(scene_->createAndPlace(COLLADA_ELEMENT_INSTANCE_PHYSICS_SCENE)); - s.piscene->setUrl((string("#") + string(s.pscene->getID())).c_str()); - - return s; - } - - virtual void handleError(daeString msg) { - cerr << "COLLADA error: " << msg << "\n"; - } - - virtual void handleWarning(daeString msg) { - cerr << "COLLADA warning: " << msg << "\n"; - } - - bool writeScene() { - SCENE scene = createScene(); - - setupPhysics(scene); - addGeometries(); - addKinematics(scene); - addVisuals(scene); - addMaterials(); - addBindings(scene); - - collada_->writeAll(); - - return true; - } - - void setupPhysics(SCENE scene) { - // - domPhysics_scene::domTechnique_commonRef common = daeSafeCast(scene.pscene->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); - { - // 0 0 0 - domTargetable_float3Ref g = daeSafeCast(common->createAndPlace(COLLADA_ELEMENT_GRAVITY)); - g->getValue().set3(0.0, 0.0, 0.0); - // - } - // - } - - void addGeometries() { - int link_num = 0; - - for (map >::const_iterator i = robot_->links_.begin(); i != robot_->links_.end(); i++) { - boost::shared_ptr urdf_link = i->second; - - if (urdf_link->visual == NULL || urdf_link->visual->geometry == NULL) - continue; - - switch (urdf_link->visual->geometry->type) { - case urdf::Geometry::MESH: { - urdf::Mesh* urdf_mesh = (urdf::Mesh*) urdf_link->visual->geometry.get(); - - string filename = urdf_mesh->filename; - urdf::Vector3 scale = urdf_mesh->scale; // @todo use scale - - // - domGeometryRef geometry = daeSafeCast(geometriesLib_->createAndPlace(COLLADA_ELEMENT_GEOMETRY)); - string geometry_id = string("g1.link") + boost::lexical_cast(link_num) + string(".geom0"); - geometry->setId(geometry_id.c_str()); - { - loadMesh(filename, geometry, geometry_id); - } - geometry_ids_[urdf_link->name] = geometry_id; - // - - link_num++; - break; - } - case urdf::Geometry::SPHERE: { - cerr << "Geometry type SPHERE of link " << urdf_link->name << " is unsupported" << endl; - break; - } - case urdf::Geometry::BOX: { - cerr << "Geometry type BOX of link " << urdf_link->name << " is unsupported" << endl; - break; - } - case urdf::Geometry::CYLINDER: { - cerr << "Geometry type CYLINDER of link " << urdf_link->name << " is unsupported" << endl; - break; - } - default: { - cerr << "Geometry type " << urdf_link->visual->geometry->type << " of link " << urdf_link->name << " is supported" << endl; - break; - } - } - } - } - - void loadMesh(const string& filename, domGeometryRef geometry, const string& geometry_id) { - // Load the mesh - resource_retriever::MemoryResource resource; - resource_retriever::Retriever retriever; - try { - resource = retriever.get(filename.c_str()); - } - catch (resource_retriever::Exception& e) { - cerr << "Unable to load mesh file " << filename << ": " << e.what() << endl; - return; - } - - // Try assimp first, then STLLoader - if (!loadMeshWithAssimp(resource, geometry, geometry_id)) - if (!loadMeshWithSTLLoader(resource, geometry, geometry_id)) - cerr << "*** Can't load " << filename << endl; - } - - bool loadMeshWithAssimp(const resource_retriever::MemoryResource& resource, domGeometryRef geometry, const string& geometry_id) { - // Import the mesh using assimp - Assimp::Importer importer; - const aiScene* scene = importer.ReadFileFromMemory(resource.data.get(), resource.size, aiProcess_SortByPType /* aiProcess_CalcTangentSpace | aiProcess_Triangulate | aiProcess_JoinIdenticalVertices */); - if (!scene) - return false; - - buildMeshFromAssimp(scene, scene->mRootNode, geometry, geometry_id); - return true; - } - - bool loadMeshWithSTLLoader(const resource_retriever::MemoryResource& resource, domGeometryRef geometry, const string& geometry_id) { - // Write the resource to a temporary file - char tmp_filename[] = "/tmp/collada_urdf_XXXXXX"; - int fd = mkstemp(tmp_filename); - write(fd, resource.data.get(), resource.size); - close(fd); - - // Import the mesh using STLLoader - STLLoader loader; - Mesh* stl_mesh = loader.load(string(tmp_filename)); - buildMeshFromSTLLoader(stl_mesh, geometry, geometry_id); - delete stl_mesh; - - // Delete the temporary file - unlink(tmp_filename); - - return true; - } - - void buildMeshFromSTLLoader(Mesh* stl_mesh, daeElementRef parent, const string& geometry_id) { - // - domMeshRef mesh = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_MESH)); - { - unsigned int num_vertices = stl_mesh->vertices.size(); - unsigned int num_indices = stl_mesh->indices.size(); - unsigned int num_faces = num_indices / 3; - - // - domSourceRef positions_source = daeSafeCast(mesh->createAndPlace(COLLADA_ELEMENT_SOURCE)); - positions_source->setId((geometry_id + string(".positions")).c_str()); - { - // - domFloat_arrayRef positions_array = daeSafeCast(positions_source->createAndPlace(COLLADA_ELEMENT_FLOAT_ARRAY)); - positions_array->setId((geometry_id + string(".positions-array")).c_str()); - positions_array->setCount(num_vertices * 3); - positions_array->setDigits(6); // 6 decimal places - positions_array->getValue().setCount(num_vertices * 3); - for (unsigned int j = 0; j < num_vertices; j++) { - positions_array->getValue()[j * 3 ] = stl_mesh->vertices[j].x; - positions_array->getValue()[j * 3 + 1] = stl_mesh->vertices[j].y; - positions_array->getValue()[j * 3 + 2] = stl_mesh->vertices[j].z; - } - // - - // - domSource::domTechnique_commonRef source_tech = daeSafeCast(positions_source->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); - { - // - domAccessorRef accessor = daeSafeCast(source_tech->createAndPlace(COLLADA_ELEMENT_ACCESSOR)); - accessor->setCount(num_vertices / 3); - accessor->setSource(xsAnyURI(*positions_array, string("#") + geometry_id + string(".positions-array"))); - accessor->setStride(3); - { - // - // - // - domParamRef px = daeSafeCast(accessor->createAndPlace(COLLADA_ELEMENT_PARAM)); px->setName("X"); px->setType("float"); - domParamRef py = daeSafeCast(accessor->createAndPlace(COLLADA_ELEMENT_PARAM)); py->setName("Y"); py->setType("float"); - domParamRef pz = daeSafeCast(accessor->createAndPlace(COLLADA_ELEMENT_PARAM)); pz->setName("Z"); pz->setType("float"); - } - // - } - // - } - - // - domVerticesRef vertices = daeSafeCast(mesh->createAndPlace(COLLADA_ELEMENT_VERTICES)); - string vertices_id = geometry_id + string(".vertices"); - vertices->setId(vertices_id.c_str()); - { - // - domInput_localRef vertices_input = daeSafeCast(vertices->createAndPlace(COLLADA_ELEMENT_INPUT)); - vertices_input->setSemantic("POSITION"); - vertices_input->setSource(domUrifragment(*positions_source, string("#") + string(positions_source->getId()))); - } - // - - // - domTrianglesRef triangles = daeSafeCast(mesh->createAndPlace(COLLADA_ELEMENT_TRIANGLES)); - triangles->setCount(num_faces); - triangles->setMaterial("mat0"); - { - // - domInput_local_offsetRef vertex_offset = daeSafeCast(triangles->createAndPlace(COLLADA_ELEMENT_INPUT)); - vertex_offset->setSemantic("VERTEX"); - vertex_offset->setOffset(0); - vertex_offset->setSource(domUrifragment(*positions_source, string("#") + vertices_id)); - { - //

0 1 2 3 ... - domPRef indices = daeSafeCast(triangles->createAndPlace(COLLADA_ELEMENT_P)); - indices->getValue().setCount(num_indices); - for (unsigned int i = 0; i < num_indices; i++) - indices->getValue()[i] = stl_mesh->indices[i]; - //

- } - } - //
- } - //
- } - - // EXPERIMENTAL: untested - void buildMeshFromAssimp(const aiScene* scene, aiNode* node, daeElementRef parent, const string& geometry_id) { - if (node == NULL) - return; - - aiMatrix4x4 transform = node->mTransformation; - - aiNode* pnode = node->mParent; - while (pnode) { - // Don't convert to y-up orientation, which is what the root node in Assimp does - if (pnode->mParent != NULL) - transform = pnode->mTransformation * transform; - pnode = pnode->mParent; - } - - // - domMeshRef mesh = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_MESH)); - { - for (unsigned int i = 0; i < node->mNumMeshes; i++) { - aiMesh* aMesh = scene->mMeshes[i]; - - // Add in the indices for each face - for (unsigned int j = 0; j < aMesh->mNumFaces; j++) { - aiFace* aFace = &(aMesh->mFaces[j]); - for (unsigned int k = 0; k < aFace->mNumIndices; k++) { - //int index = aFace->mIndices[k]; - // @todo add index - //subMesh->AddIndex(aFace->mIndices[k]); - } - } - - domSourceRef positions_source = daeSafeCast(mesh->createAndPlace(COLLADA_ELEMENT_SOURCE)); - { - positions_source->setId((geometry_id + string(".positions")).c_str()); - - domFloat_arrayRef positions_array = daeSafeCast(positions_source->createAndPlace(COLLADA_ELEMENT_FLOAT_ARRAY)); - positions_array->setId((geometry_id + string(".positions-array")).c_str()); - positions_array->setCount(aMesh->mNumVertices); - positions_array->setDigits(6); // 6 decimal places - positions_array->getValue().setCount(3 * aMesh->mNumVertices); - - for (unsigned int j = 0; j < aMesh->mNumVertices; j++) { - aiVector3D p; - p.x = aMesh->mVertices[j].x; - p.y = aMesh->mVertices[j].y; - p.z = aMesh->mVertices[j].z; - - p *= transform; - - positions_array->getValue()[j] = p.x; - positions_array->getValue()[j] = p.y; - positions_array->getValue()[j] = p.z; - - /* - if (aMesh->HasNormals()) { - p.x = aMesh->mNormals[j].x; - p.y = aMesh->mNormals[j].y; - p.z = aMesh->mNormals[j].z; - } - - // @todo add normal - //subMesh->AddNormal(p.x, p.y, p.z); - - // @todo add tex coord - //if (aMesh->mNumUVComponents[0]) - // subMesh->AddTexCoord(aMesh->mTextureCoords[0][j].x, 1.0 -aMesh->mTextureCoords[0][j].y); - //else - // subMesh->AddTexCoord(0,0); - */ - } - } - - domTrianglesRef triangles = daeSafeCast(mesh->createAndPlace(COLLADA_ELEMENT_TRIANGLES)); - { - triangles->setCount(aMesh->mNumFaces / 3); - } - } - - for (unsigned int i = 0; i < node->mNumChildren; i++) - buildMeshFromAssimp(scene, node->mChildren[i], mesh, geometry_id); - } - } - - void addJoints(daeElementRef parent) { - int joint_num = 0; - for (map >::const_iterator i = robot_->joints_.begin(); i != robot_->joints_.end(); i++) { - boost::shared_ptr urdf_joint = i->second; - - // - domJointRef joint = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_JOINT)); - string joint_sid = string("joint") + boost::lexical_cast(joint_num); - joint_num++; - joint->setName(urdf_joint->name.c_str()); - joint->setSid(joint_sid.c_str()); - joint_sids_[urdf_joint->name] = joint_sid; - - double axis_x = urdf_joint->axis.x; - double axis_y = urdf_joint->axis.y; - double axis_z = urdf_joint->axis.z; - if (axis_x == 0.0 && axis_y == 0.0 && axis_z == 0.0) { - axis_x = 1.0; - axis_y = 0.0; - axis_z = 0.0; - } - - // @hack: OpenRAVE appears to flip joint axes - axis_x *= -1.0; - axis_y *= -1.0; - axis_z *= -1.0; - - switch (urdf_joint->type) - { - case urdf::Joint::REVOLUTE: { - // - domAxis_constraintRef revolute = daeSafeCast(joint->createAndPlace(COLLADA_ELEMENT_REVOLUTE)); - revolute->setSid("axis0"); - { - // - domAxisRef axis = daeSafeCast(revolute->createAndPlace(COLLADA_ELEMENT_AXIS)); - { - axis->getValue().setCount(3); - axis->getValue()[0] = axis_x; - axis->getValue()[1] = axis_y; - axis->getValue()[2] = axis_z; - } - // - - // - domJoint_limitsRef limits = daeSafeCast(revolute->createAndPlace(COLLADA_TYPE_LIMITS)); - { - daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MIN))->getValue() = angles::to_degrees(urdf_joint->limits->lower); - daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MAX))->getValue() = angles::to_degrees(urdf_joint->limits->upper); - } - // - } - // - break; - } - case urdf::Joint::CONTINUOUS: { - // Model as a REVOLUTE joint without limits - - // - domAxis_constraintRef revolute = daeSafeCast(joint->createAndPlace(COLLADA_ELEMENT_REVOLUTE)); - revolute->setSid("axis0"); - { - // - domAxisRef axis = daeSafeCast(revolute->createAndPlace(COLLADA_ELEMENT_AXIS)); - { - axis->getValue().setCount(3); - axis->getValue()[0] = axis_x; - axis->getValue()[1] = axis_y; - axis->getValue()[2] = axis_z; - } - // - } - // - break; - } - case urdf::Joint::PRISMATIC: { - // - domAxis_constraintRef prismatic = daeSafeCast(joint->createAndPlace(COLLADA_ELEMENT_PRISMATIC)); - prismatic->setSid("axis0"); - { - // - domAxisRef axis = daeSafeCast(prismatic->createAndPlace(COLLADA_ELEMENT_AXIS)); - { - axis->getValue().setCount(3); - axis->getValue()[0] = axis_x; - axis->getValue()[1] = axis_y; - axis->getValue()[2] = axis_z; - } - // - - // - domJoint_limitsRef limits = daeSafeCast(prismatic->createAndPlace(COLLADA_TYPE_LIMITS)); - { - daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MIN))->getValue() = urdf_joint->limits->lower; - daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MAX))->getValue() = urdf_joint->limits->upper; - } - // - } - // - break; - } - case urdf::Joint::FIXED: { - // Model as a REVOLUTE joint with no leeway - - domAxis_constraintRef revolute = daeSafeCast(joint->createAndPlace(COLLADA_ELEMENT_REVOLUTE)); - revolute->setSid("axis0"); - { - // - domAxisRef axis = daeSafeCast(revolute->createAndPlace(COLLADA_ELEMENT_AXIS)); - { - axis->getValue().setCount(3); - axis->getValue()[0] = axis_x; - axis->getValue()[1] = axis_y; - axis->getValue()[2] = axis_z; - } - // - - // - domJoint_limitsRef limits = daeSafeCast(revolute->createAndPlace(COLLADA_TYPE_LIMITS)); - { - daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MIN))->getValue() = 0.0; - daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MAX))->getValue() = 0.0; - } - // - } - // - break; - } - case urdf::Joint::UNKNOWN: { - cerr << "Joint type UNKNOWN of joint " << urdf_joint->name << " is unsupported" << endl; - break; - } - case urdf::Joint::FLOATING: { - cerr << "Joint type FLOATING of joint " << urdf_joint->name << " is unsupported" << endl; - break; - } - case urdf::Joint::PLANAR: { - cerr << "Joint type PLANAR of joint " << urdf_joint->name << " is unsupported" << endl; - break; - } - default: { - cerr << "Joint type " << urdf_joint->type << " of joint " << urdf_joint->name << " is unsupported" << endl; - break; - } - } - } - } - - void addBindings(SCENE scene) { - string model_id = kmodel_->getID(); - string inst_model_sid = string("inst_") + model_id; - - // - // - domBind_kinematics_modelRef kmodel_bind = daeSafeCast(scene.kiscene->createAndPlace(COLLADA_ELEMENT_BIND_KINEMATICS_MODEL)); - kmodel_bind->setNode("v1.node0"); // @todo - daeSafeCast(kmodel_bind->createAndPlace(COLLADA_ELEMENT_PARAM))->setValue(string(string(scene.kscene->getID()) + string(".") + inst_model_sid).c_str()); - - for (map >::const_iterator i = robot_->joints_.begin(); i != robot_->joints_.end(); i++) { - boost::shared_ptr urdf_joint = i->second; - - int idof = 0; // @todo assuming 1 dof joints - string joint_sid = joint_sids_[urdf_joint->name]; - string axis_name = string("axis") + boost::lexical_cast(idof); - string joint_axis_sid = string("kscene.inst_") + model_id + string(".") + joint_sid + string(".") + axis_name; - string joint_axis_value_sid = joint_axis_sid + string("_value"); - - // - domBind_joint_axisRef joint_bind = daeSafeCast(scene.kiscene->createAndPlace(COLLADA_ELEMENT_BIND_JOINT_AXIS)); - string node_name = node_ids_[urdf_joint->name]; - joint_bind->setTarget((node_name + string("/node_") + joint_sid + string("_") + axis_name).c_str()); - { - // - domCommon_sidref_or_paramRef axis_bind = daeSafeCast(joint_bind->createAndPlace(COLLADA_ELEMENT_AXIS)); - { - daeSafeCast(axis_bind->createAndPlace(COLLADA_TYPE_PARAM))->setValue(joint_axis_sid.c_str()); - } - // - // - domCommon_float_or_paramRef value_bind = daeSafeCast(joint_bind->createAndPlace(COLLADA_ELEMENT_VALUE)); - { - daeSafeCast(value_bind->createAndPlace(COLLADA_TYPE_PARAM))->setValue(joint_axis_value_sid.c_str()); - } - } - // - } - } - - void addKinematics(SCENE scene) { - // - domKinematics_modelRef kmodel = daeSafeCast(kinematicsModelsLib_->createAndPlace(COLLADA_ELEMENT_KINEMATICS_MODEL)); - kmodel->setId("k1"); - kmodel->setName(robot_->getName().c_str()); - { - // - domKinematics_model_techniqueRef technique = daeSafeCast(kmodel->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); - addJoints(technique); - // - - // - int link_num = 0; - addKinematicLink(robot_->getRoot(), technique, link_num); - // - } - kmodel_ = kmodel; - // - - string model_id = kmodel->getID(); - string inst_model_sid = string("inst_") + model_id; - - // - domInstance_kinematics_modelRef ikm = daeSafeCast(scene.kscene->createAndPlace(COLLADA_ELEMENT_INSTANCE_KINEMATICS_MODEL)); - ikm->setUrl((string("#") + model_id).c_str()); - ikm->setSid(inst_model_sid.c_str()); - { - // - domKinematics_newparamRef newparam_model = daeSafeCast(ikm->createAndPlace(COLLADA_ELEMENT_NEWPARAM)); - string newparam_model_sid = string("kscene.inst_") + model_id; - newparam_model->setSid(newparam_model_sid.c_str()); - { - // kscene/inst_k1 - string model_sidref = string("kscene/inst_") + model_id; - daeSafeCast(newparam_model->createAndPlace(COLLADA_ELEMENT_SIDREF))->setValue(model_sidref.c_str()); - } - // - - for (map >::const_iterator i = robot_->joints_.begin(); i != robot_->joints_.end(); i++) { - boost::shared_ptr urdf_joint = i->second; - - int idof = 0; // @todo assuming 1 dof joints - - string joint_sid = joint_sids_[urdf_joint->name]; - - string axis_name = string("axis") + boost::lexical_cast(idof); - - // - domKinematics_newparamRef newparam = daeSafeCast(ikm->createAndPlace(COLLADA_ELEMENT_NEWPARAM)); - string newparam_sid = string("kscene.inst_") + model_id + string(".") + joint_sid + string(".") + axis_name; - newparam->setSid(newparam_sid.c_str()); - { - // kscene/inst_k1/joint0/axis0 - string sidref = string("kscene/inst_") + model_id + string("/") + joint_sid + string("/") + axis_name; - daeSafeCast(newparam->createAndPlace(COLLADA_ELEMENT_SIDREF))->setValue(sidref.c_str()); - } - // - - // - domKinematics_newparamRef newparam_value = daeSafeCast(ikm->createAndPlace(COLLADA_ELEMENT_NEWPARAM)); - string newparam_value_sid = string("kscene.inst_") + model_id + string(".") + joint_sid + string(".") + axis_name + string("_value"); - newparam_value->setSid(newparam_value_sid.c_str()); - { - // 0 - daeSafeCast(newparam_value->createAndPlace(COLLADA_ELEMENT_FLOAT))->setValue(0.0f); - } - // - } - } - // - } - - void addKinematicLink(boost::shared_ptr urdf_link, daeElementRef parent, int& link_num) { - // - domLinkRef link = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_LINK)); - string link_sid = string("link") + boost::lexical_cast(link_num); - link->setName(urdf_link->name.c_str()); - link->setSid(link_sid.c_str()); - link_num++; - for (vector >::const_iterator i = urdf_link->child_joints.begin(); i != urdf_link->child_joints.end(); i++) { - boost::shared_ptr urdf_joint = *i; - - // - domLink::domAttachment_fullRef attachment_full = daeSafeCast(link->createAndPlace(COLLADA_TYPE_ATTACHMENT_FULL)); - string attachment_joint = string("k1/") + joint_sids_[urdf_joint->name]; - attachment_full->setJoint(attachment_joint.c_str()); - { - addRotate(attachment_full, urdf_joint->parent_to_joint_origin_transform.rotation); - addTranslate(attachment_full, urdf_joint->parent_to_joint_origin_transform.position); - addKinematicLink(robot_->getLink(urdf_joint->child_link_name), attachment_full, link_num); - } - // - } - // - } - - void addVisuals(SCENE scene) { - // - domNodeRef root_node = daeSafeCast(scene.vscene->createAndPlace(COLLADA_ELEMENT_NODE)); - root_node->setId("v1"); - root_node->setName(robot_->getName().c_str()); - { - int link_num = 0; - addVisualLink(robot_->getRoot(), root_node, link_num); - } - } - - void addMaterials() { - urdf::Color ambient, diffuse; - ambient.init("1 1 1 0"); - diffuse.init("1 1 1 0"); - - for (map >::const_iterator i = robot_->links_.begin(); i != robot_->links_.end(); i++) { - boost::shared_ptr urdf_link = i->second; - - map::const_iterator j = geometry_ids_.find(urdf_link->name); - if (j != geometry_ids_.end()) { - string geometry_id = j->second; - - domEffectRef effect = addEffect(geometry_id, ambient, diffuse); - - // - domMaterialRef material = daeSafeCast(materialsLib_->createAndPlace(COLLADA_ELEMENT_MATERIAL)); - string material_id = geometry_id + string(".mat"); - material->setId(material_id.c_str()); - { - // - domInstance_effectRef instance_effect = daeSafeCast(material->createAndPlace(COLLADA_ELEMENT_INSTANCE_EFFECT)); - string effect_id(effect->getId()); - instance_effect->setUrl((string("#") + effect_id).c_str()); - } - // - } - } - } - - domEffectRef addEffect(const string& geometry_id, const urdf::Color& color_ambient, const urdf::Color& color_diffuse) - { - // - domEffectRef effect = daeSafeCast(effectsLib_->createAndPlace(COLLADA_ELEMENT_EFFECT)); - string effect_id = geometry_id + string(".eff"); - effect->setId(effect_id.c_str()); - { - // - domProfile_commonRef profile = daeSafeCast(effect->createAndPlace(COLLADA_ELEMENT_PROFILE_COMMON)); - { - // - domProfile_common::domTechniqueRef technique = daeSafeCast(profile->createAndPlace(COLLADA_ELEMENT_TECHNIQUE)); - { - // - domProfile_common::domTechnique::domPhongRef phong = daeSafeCast(technique->createAndPlace(COLLADA_ELEMENT_PHONG)); - { - // - domFx_common_color_or_textureRef ambient = daeSafeCast(phong->createAndPlace(COLLADA_ELEMENT_AMBIENT)); - { - // r g b a - domFx_common_color_or_texture::domColorRef ambient_color = daeSafeCast(ambient->createAndPlace(COLLADA_ELEMENT_COLOR)); - ambient_color->getValue().setCount(4); - ambient_color->getValue()[0] = color_ambient.r; - ambient_color->getValue()[1] = color_ambient.g; - ambient_color->getValue()[2] = color_ambient.b; - ambient_color->getValue()[3] = color_ambient.a; - // - } - // - - // - domFx_common_color_or_textureRef diffuse = daeSafeCast(phong->createAndPlace(COLLADA_ELEMENT_DIFFUSE)); - { - // r g b a - domFx_common_color_or_texture::domColorRef diffuse_color = daeSafeCast(diffuse->createAndPlace(COLLADA_ELEMENT_COLOR)); - diffuse_color->getValue().setCount(4); - diffuse_color->getValue()[0] = color_diffuse.r; - diffuse_color->getValue()[1] = color_diffuse.g; - diffuse_color->getValue()[2] = color_diffuse.b; - diffuse_color->getValue()[3] = color_diffuse.a; - // - } - // - } - // - } - // - } - // - } - // - - return effect; - } - - void addVisualLink(boost::shared_ptr urdf_link, daeElementRef parent, int& link_num) { - // - domNodeRef node = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_NODE)); - string node_sid = string("node") + boost::lexical_cast(link_num); - string node_id = string("v1.") + node_sid; - node->setName(urdf_link->name.c_str()); - node->setSid(node_sid.c_str()); - node->setId(node_id.c_str()); - link_num++; - { - if (urdf_link->parent_joint != NULL) { - // x y z w - addRotate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.rotation); - // x y z - addTranslate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.position); - - // x y z angle - domRotateRef joint_rotate = addRotate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.rotation); - string joint_sid = joint_sids_[urdf_link->parent_joint->name]; - string joint_rotate_sid = string("node_") + joint_sid + string("_axis0"); - joint_rotate->setSid(joint_rotate_sid.c_str()); - - node_ids_[urdf_link->parent_joint->name] = node_id; - } - - // - map::const_iterator i = geometry_ids_.find(urdf_link->name); - if (i != geometry_ids_.end()) { - domInstance_geometryRef instance_geometry = daeSafeCast(node->createAndPlace(COLLADA_ELEMENT_INSTANCE_GEOMETRY)); - string geometry_id = i->second; - string instance_geometry_url = string("#") + geometry_id; - instance_geometry->setUrl(instance_geometry_url.c_str()); - { - // - domBind_materialRef bind_material = daeSafeCast(instance_geometry->createAndPlace(COLLADA_ELEMENT_BIND_MATERIAL)); - { - // - domBind_material::domTechnique_commonRef technique_common = daeSafeCast(bind_material->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); - { - // - domInstance_materialRef instance_material = daeSafeCast(technique_common->createAndPlace(COLLADA_ELEMENT_INSTANCE_MATERIAL)); - instance_material->setTarget((instance_geometry_url + string(".mat")).c_str()); - instance_material->setSymbol("mat0"); - // - } - // - } - // - } - } - // - - // - for (vector >::const_iterator i = urdf_link->child_links.begin(); i != urdf_link->child_links.end(); i++) - addVisualLink(*i, node, link_num); - // - } - // - } - - domTranslateRef addTranslate(daeElementRef parent, const urdf::Vector3& position) { - // x y z - domTranslateRef trans = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_TRANSLATE)); - trans->getValue().setCount(3); - trans->getValue()[0] = position.x; - trans->getValue()[1] = position.y; - trans->getValue()[2] = position.z; - return trans; - } - - domRotateRef addRotate(daeElementRef parent, const urdf::Rotation& r) { - double ax, ay, az, aa; - - // Convert from quaternion to axis-angle - double sqr_len = r.x * r.x + r.y * r.y + r.z * r.z; - if (sqr_len > 0) { - aa = 2 * acos(r.w); - - double inv_len = 1.0 / sqrt(sqr_len); - ax = r.x * inv_len; - ay = r.y * inv_len; - az = r.z * inv_len; - } - else { - // Angle is 0 (mod 2*pi), so any axis will do - aa = 0.0; - ax = 1.0; - ay = 0.0; - az = 0.0; - } - - // x y z w - domRotateRef rot = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_ROTATE)); - rot->getValue().setCount(4); - rot->getValue()[0] = ax; - rot->getValue()[1] = ay; - rot->getValue()[2] = az; - rot->getValue()[3] = angles::to_degrees(aa); - return rot; - } -}; - -} +#include "collada_urdf/ColladaWriter.h" int main(int argc, char** argv) { @@ -1003,7 +55,7 @@ int main(int argc, char** argv) return -1; } - string output_filename(argv[2]); + std::string output_filename(argv[2]); collada_urdf::ColladaWriter* writer = new collada_urdf::ColladaWriter(output_filename, &robot); writer->writeScene(); From 5b33005a0b01dbd413542b0e5a7a471b015aa421 Mon Sep 17 00:00:00 2001 From: tfield Date: Fri, 23 Apr 2010 19:49:15 +0000 Subject: [PATCH 153/245] collada_urdf: more tidying up --- .../include/collada_urdf/ColladaWriter.h | 38 ++++++--- collada_urdf/include/collada_urdf/STLLoader.h | 18 ++--- collada_urdf/src/ColladaWriter.cpp | 49 ++++++------ collada_urdf/src/STLLoader.cpp | 77 +++++++++++-------- collada_urdf/src/urdf_to_collada.cpp | 23 ++++-- 5 files changed, 120 insertions(+), 85 deletions(-) diff --git a/collada_urdf/include/collada_urdf/ColladaWriter.h b/collada_urdf/include/collada_urdf/ColladaWriter.h index 728438c..5f0f263 100644 --- a/collada_urdf/include/collada_urdf/ColladaWriter.h +++ b/collada_urdf/include/collada_urdf/ColladaWriter.h @@ -69,34 +69,48 @@ private: }; public: - ColladaWriter(std::string const& documentName, urdf::Model* robot); + /** + * \brief Create a ColladaWriter using the specified URDF robot model. + */ + ColladaWriter(urdf::Model* robot); + virtual ~ColladaWriter(); /** - * todo - * @return + * \brief Write the model to a COLLADA file. + * + * \param documentName The filename of the document to write to + * \return True if the file was successfully written */ - bool writeScene(); + bool writeDocument(std::string const& documentName); protected: virtual void handleError(daeString msg); virtual void handleWarning(daeString msg); private: + void initDocument(std::string const& documentName); SCENE createScene(); - void setupPhysics(SCENE scene); + + void setupPhysics(SCENE const& scene); + void addGeometries(); void loadMesh(std::string const& filename, domGeometryRef geometry, std::string const& geometry_id); bool loadMeshWithSTLLoader(resource_retriever::MemoryResource const& resource, domGeometryRef geometry, std::string const& geometry_id); - void buildMeshFromSTLLoader(Mesh* stl_mesh, daeElementRef parent, std::string const& geometry_id); + void buildMeshFromSTLLoader(boost::shared_ptr stl_mesh, daeElementRef parent, std::string const& geometry_id); + + void addKinematics(SCENE const& scene); void addJoints(daeElementRef parent); - void addBindings(SCENE scene); - void addKinematics(SCENE scene); void addKinematicLink(boost::shared_ptr urdf_link, daeElementRef parent, int& link_num); - void addVisuals(SCENE scene); - void addMaterials(); - domEffectRef addEffect(std::string const& geometry_id, urdf::Color const& color_ambient, urdf::Color const& color_diffuse); - void addVisualLink(boost::shared_ptr urdf_link, daeElementRef parent, int& link_num); + + void addVisuals(SCENE const& scene); + void addVisualLink(boost::shared_ptr urdf_link, daeElementRef parent, int& link_num); + + void addMaterials(); + domEffectRef addEffect(std::string const& geometry_id, urdf::Color const& color_ambient, urdf::Color const& color_diffuse); + + void addBindings(SCENE const& scene); + domTranslateRef addTranslate(daeElementRef parent, urdf::Vector3 const& position); domRotateRef addRotate(daeElementRef parent, urdf::Rotation const& r); diff --git a/collada_urdf/include/collada_urdf/STLLoader.h b/collada_urdf/include/collada_urdf/STLLoader.h index 6bec856..c96395d 100644 --- a/collada_urdf/include/collada_urdf/STLLoader.h +++ b/collada_urdf/include/collada_urdf/STLLoader.h @@ -40,10 +40,7 @@ #include #include -#define LINE_MAX_LEN 256 -#define COR3_MAX 200000 -#define ORDER_MAX 10 -#define FACE_MAX 200000 +#include namespace collada_urdf { @@ -79,13 +76,16 @@ public: class STLLoader { public: - Mesh* load(std::string const& filename); + boost::shared_ptr load(std::string const& filename); private: - void readBinary (FILE* filein, Mesh* mesh); - uint32_t readLongInt (FILE* filein); - uint16_t readShortInt(FILE* filein); - float readFloat (FILE* filein); + FILE* file_; + boost::shared_ptr mesh_; + + void readBinary(); + uint32_t readLongInt(); + uint16_t readShortInt(); + float readFloat(); }; } diff --git a/collada_urdf/src/ColladaWriter.cpp b/collada_urdf/src/ColladaWriter.cpp index b6e626a..f7124d5 100644 --- a/collada_urdf/src/ColladaWriter.cpp +++ b/collada_urdf/src/ColladaWriter.cpp @@ -47,7 +47,26 @@ using boost::shared_ptr; namespace collada_urdf { -ColladaWriter::ColladaWriter(string const& documentName, urdf::Model* robot) : robot_(robot) { +ColladaWriter::ColladaWriter(urdf::Model* robot) : robot_(robot) { } + +bool ColladaWriter::writeDocument(string const& documentName) { + initDocument(documentName); + + SCENE scene = createScene(); + + setupPhysics(scene); + addGeometries(); + addKinematics(scene); + addVisuals(scene); + addMaterials(); + addBindings(scene); + + collada_->writeAll(); + + return true; +} + +void ColladaWriter::initDocument(string const& documentName) { daeErrorHandler::setErrorHandler(this); collada_.reset(new DAE()); @@ -113,21 +132,6 @@ ColladaWriter::~ColladaWriter() { DAE::cleanup(); } -bool ColladaWriter::writeScene() { - SCENE scene = createScene(); - - setupPhysics(scene); - addGeometries(); - addKinematics(scene); - addVisuals(scene); - addMaterials(); - addBindings(scene); - - collada_->writeAll(); - - return true; -} - // Implementation ColladaWriter::SCENE ColladaWriter::createScene() { @@ -171,7 +175,7 @@ void ColladaWriter::handleWarning(daeString msg) { std::cerr << "COLLADA warning: " << msg << std::endl; } -void ColladaWriter::setupPhysics(SCENE scene) { +void ColladaWriter::setupPhysics(SCENE const& scene) { // domPhysics_scene::domTechnique_commonRef common = daeSafeCast(scene.pscene->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); { @@ -258,9 +262,8 @@ bool ColladaWriter::loadMeshWithSTLLoader(resource_retriever::MemoryResource con // Import the mesh using STLLoader STLLoader loader; - Mesh* stl_mesh = loader.load(string(tmp_filename)); + shared_ptr stl_mesh = loader.load(string(tmp_filename)); buildMeshFromSTLLoader(stl_mesh, geometry, geometry_id); - delete stl_mesh; // Delete the temporary file unlink(tmp_filename); @@ -268,7 +271,7 @@ bool ColladaWriter::loadMeshWithSTLLoader(resource_retriever::MemoryResource con return true; } -void ColladaWriter::buildMeshFromSTLLoader(Mesh* stl_mesh, daeElementRef parent, string const& geometry_id) { +void ColladaWriter::buildMeshFromSTLLoader(shared_ptr stl_mesh, daeElementRef parent, string const& geometry_id) { // domMeshRef mesh = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_MESH)); { @@ -498,7 +501,7 @@ void ColladaWriter::addJoints(daeElementRef parent) { } } -void ColladaWriter::addBindings(SCENE scene) { +void ColladaWriter::addBindings(SCENE const& scene) { string model_id = kmodel_->getID(); string inst_model_sid = string("inst_") + model_id; @@ -538,7 +541,7 @@ void ColladaWriter::addBindings(SCENE scene) { } } -void ColladaWriter::addKinematics(SCENE scene) { +void ColladaWriter::addKinematics(SCENE const& scene) { // domKinematics_modelRef kmodel = daeSafeCast(kinematicsModelsLib_->createAndPlace(COLLADA_ELEMENT_KINEMATICS_MODEL)); kmodel->setId("k1"); @@ -632,7 +635,7 @@ void ColladaWriter::addKinematicLink(shared_ptr urdf_link, dae // } -void ColladaWriter::addVisuals(SCENE scene) { +void ColladaWriter::addVisuals(SCENE const& scene) { // domNodeRef root_node = daeSafeCast(scene.vscene->createAndPlace(COLLADA_ELEMENT_NODE)); root_node->setId("v1"); diff --git a/collada_urdf/src/STLLoader.cpp b/collada_urdf/src/STLLoader.cpp index ada5ef4..d962f79 100644 --- a/collada_urdf/src/STLLoader.cpp +++ b/collada_urdf/src/STLLoader.cpp @@ -39,14 +39,21 @@ #include "collada_urdf/STLLoader.h" +using std::string; +using boost::shared_ptr; + namespace collada_urdf { +// Vector3 + Vector3::Vector3(float _x, float _y, float _z) : x(_x), y(_y), z(_z) { } -bool Vector3::operator==(const Vector3& v) const { +bool Vector3::operator==(Vector3 const& v) const { return x == v.x && y == v.y && z == v.z; } +// Mesh + Mesh::Mesh() { } @@ -58,70 +65,74 @@ int Mesh::getVertexIndex(const Vector3& v) const { return -1; } -void Mesh::addVertex(const Vector3& v) { vertices.push_back(v); } -void Mesh::addNormal(const Vector3& n) { normals.push_back(n); } +void Mesh::addVertex(Vector3 const& v) { vertices.push_back(v); } +void Mesh::addNormal(Vector3 const& n) { normals.push_back(n); } void Mesh::addIndex(unsigned int i) { indices.push_back(i); } -Mesh* STLLoader::load(const std::string& filename) { - Mesh* mesh = new Mesh(); +// STLLoader - FILE* file = fopen(filename.c_str(), "r"); - readBinary(file, mesh); - fclose(file); +shared_ptr STLLoader::load(std::string const& filename) { + mesh_ = shared_ptr(new Mesh); - return mesh; + file_ = fopen(filename.c_str(), "r"); + readBinary(); + fclose(file_); + file_ = NULL; + + return mesh_; } -void STLLoader::readBinary(FILE* filein, Mesh* mesh) { +void STLLoader::readBinary() { // 80 byte Header for (int i = 0; i < 80; i++) - fgetc(filein); + fgetc(file_); - int face_num = readLongInt(filein); + int face_num = readLongInt(); for (int iface = 0; iface < face_num; iface++) { - Vector3 normal(readFloat(filein), readFloat(filein), readFloat(filein)); + Vector3 normal(readFloat(), readFloat(), readFloat()); + for (int i = 0; i < 3; i++) { - double x = readFloat(filein); - double y = readFloat(filein); - double z = readFloat(filein); - Vector3 vertex(x,y,z); - int index = mesh->getVertexIndex(vertex); + Vector3 vertex(readFloat(), readFloat(), readFloat()); + + int index = mesh_->getVertexIndex(vertex); if (index == -1) { - mesh->addVertex(vertex); - mesh->addNormal(normal); - index = mesh->vertices.size() - 1; + mesh_->addVertex(vertex); + mesh_->addNormal(normal); + index = mesh_->vertices.size() - 1; } - mesh->addIndex(index); + mesh_->addIndex(index); } - readShortInt(filein); // 2 byte attribute + + readShortInt(); // 2 byte attribute } } -float STLLoader::readFloat(FILE* filein) { +float STLLoader::readFloat() { float rval; - if (fread(&rval, sizeof(float), 1, filein) == 0) + if (fread(&rval, sizeof(float), 1, file_) == 0) std::cerr << "Error in STLLoader::readFloat" << std::endl; + return rval; } -uint32_t STLLoader::readLongInt(FILE* filein) { +uint32_t STLLoader::readLongInt() { union { uint32_t yint; char ychar[4]; } y; - y.ychar[0] = fgetc(filein); - y.ychar[1] = fgetc(filein); - y.ychar[2] = fgetc(filein); - y.ychar[3] = fgetc(filein); + y.ychar[0] = fgetc(file_); + y.ychar[1] = fgetc(file_); + y.ychar[2] = fgetc(file_); + y.ychar[3] = fgetc(file_); return y.yint; } -uint16_t STLLoader::readShortInt(FILE* filein) { - uint8_t c1 = fgetc(filein); - uint8_t c2 = fgetc(filein); +uint16_t STLLoader::readShortInt() { + uint8_t c1 = fgetc(file_); + uint8_t c2 = fgetc(file_); uint16_t ival = c1 | (c2 << 8); diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp index 1693f75..cce43ca 100644 --- a/collada_urdf/src/urdf_to_collada.cpp +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -41,25 +41,32 @@ int main(int argc, char** argv) return -1; } + std::string input_filename(argv[1]); + std::string output_filename(argv[2]); + TiXmlDocument robot_model_xml; - robot_model_xml.LoadFile(argv[1]); + if (!robot_model_xml.LoadFile(input_filename.c_str())) { + std::cerr << "Error opening file " << argv[1] << std::endl; + return -1; + } + TiXmlElement* robot_xml = robot_model_xml.FirstChildElement("robot"); if (!robot_xml) { - std::cerr << "ERROR: Could not load the xml into TiXmlElement" << std::endl; + std::cerr << "Error parsing URDF model from XML" << std::endl; return -1; } urdf::Model robot; if (!robot.initXml(robot_xml)) { - std::cerr << "ERROR: Model Parsing the xml failed" << std::endl; + std::cerr << "Error parsing URDF model from XML" << std::endl; return -1; } - std::string output_filename(argv[2]); - - collada_urdf::ColladaWriter* writer = new collada_urdf::ColladaWriter(output_filename, &robot); - writer->writeScene(); - delete writer; + collada_urdf::ColladaWriter writer(&robot); + if (!writer.writeDocument(output_filename)) { + std::cerr << "Error writing document" << std::endl; + return -1; + } return 0; } From da0af98c438b88ca1733e2610224f044e7b2b66f Mon Sep 17 00:00:00 2001 From: tfield Date: Fri, 23 Apr 2010 21:01:11 +0000 Subject: [PATCH 154/245] collada_urdf: asset tag now writes correct create/modified dates and includes source --- .../include/collada_urdf/ColladaWriter.h | 14 +++++- collada_urdf/src/ColladaWriter.cpp | 46 ++++++++++++++----- collada_urdf/src/STLLoader.cpp | 7 +-- collada_urdf/src/urdf_to_collada.cpp | 2 +- 4 files changed, 52 insertions(+), 17 deletions(-) diff --git a/collada_urdf/include/collada_urdf/ColladaWriter.h b/collada_urdf/include/collada_urdf/ColladaWriter.h index 5f0f263..3120c87 100644 --- a/collada_urdf/include/collada_urdf/ColladaWriter.h +++ b/collada_urdf/include/collada_urdf/ColladaWriter.h @@ -53,6 +53,12 @@ namespace collada_urdf { +class ColladaWriterException : public std::runtime_error +{ +public: + ColladaWriterException(std::string const& what) : std::runtime_error(what) { } +}; + class Mesh; class ColladaWriter : public daeErrorHandler @@ -70,9 +76,10 @@ private: public: /** - * \brief Create a ColladaWriter using the specified URDF robot model. + * \brief Create a ColladaWriter using the specified URDF robot model and a source string, + * e.g. the name of the file the URDF was read from. */ - ColladaWriter(urdf::Model* robot); + ColladaWriter(urdf::Model* robot, std::string const& source); virtual ~ColladaWriter(); @@ -114,8 +121,11 @@ private: domTranslateRef addTranslate(daeElementRef parent, urdf::Vector3 const& position); domRotateRef addRotate(daeElementRef parent, urdf::Rotation const& r); + std::string getTimeStampString() const; + private: urdf::Model* robot_; + std::string source_; boost::shared_ptr collada_; domCOLLADA* dom_; diff --git a/collada_urdf/src/ColladaWriter.cpp b/collada_urdf/src/ColladaWriter.cpp index f7124d5..8ed8720 100644 --- a/collada_urdf/src/ColladaWriter.cpp +++ b/collada_urdf/src/ColladaWriter.cpp @@ -36,6 +36,8 @@ #include "collada_urdf/STLLoader.h" +#include +#include #include #define foreach BOOST_FOREACH @@ -47,7 +49,10 @@ using boost::shared_ptr; namespace collada_urdf { -ColladaWriter::ColladaWriter(urdf::Model* robot) : robot_(robot) { } +ColladaWriter::ColladaWriter(urdf::Model* robot, string const& source) + : robot_(robot), source_(source) +{ +} bool ColladaWriter::writeDocument(string const& documentName) { initDocument(documentName); @@ -76,10 +81,7 @@ void ColladaWriter::initDocument(string const& documentName) { daeDocument* doc = NULL; daeInt error = collada_->getDatabase()->insertDocument(documentName.c_str(), &doc); // also creates a collada root if (error != DAE_OK || doc == NULL) - { - std::cerr << "Failed to create new document" << std::endl; - throw; - } + throw ColladaWriterException("Failed to create document"); dom_ = daeSafeCast(doc->getDomRoot()); dom_->setAttribute("xmlns:math", "http://www.w3.org/1998/Math/MathML"); @@ -87,15 +89,21 @@ void ColladaWriter::initDocument(string const& documentName) { // Create the required asset tag domAssetRef asset = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_ASSET)); { + string date = getTimeStampString(); + domAsset::domCreatedRef created = daeSafeCast(asset->createAndPlace(COLLADA_ELEMENT_CREATED)); - created->setValue("2009-04-06T17:01:00.891550"); // @todo: replace with current date + created->setValue(date.c_str()); domAsset::domModifiedRef modified = daeSafeCast(asset->createAndPlace(COLLADA_ELEMENT_MODIFIED)); - modified->setValue("2009-04-06T17:01:00.891550"); // @todo: replace with current date + modified->setValue(date.c_str()); domAsset::domContributorRef contrib = daeSafeCast(asset->createAndPlace(COLLADA_TYPE_CONTRIBUTOR)); + domAsset::domContributor::domAuthoring_toolRef authoringtool = daeSafeCast(contrib->createAndPlace(COLLADA_ELEMENT_AUTHORING_TOOL)); authoringtool->setValue("URDF Collada Writer"); + domAsset::domContributor::domSource_dataRef sourcedata = daeSafeCast(contrib->createAndPlace(COLLADA_ELEMENT_SOURCE_DATA)); + sourcedata->setValue(source_.c_str()); + domAsset::domUnitRef units = daeSafeCast(asset->createAndPlace(COLLADA_ELEMENT_UNIT)); units->setMeter(1); units->setName("meter"); @@ -217,19 +225,19 @@ void ColladaWriter::addGeometries() { break; } case urdf::Geometry::SPHERE: { - std::cerr << "Warning: geometry type SPHERE of link " << urdf_link->name << " is unsupported" << std::endl; + std::cerr << "Warning: geometry type SPHERE of link " << urdf_link->name << " not exported" << std::endl; break; } case urdf::Geometry::BOX: { - std::cerr << "Warning: geometry type BOX of link " << urdf_link->name << " is unsupported" << std::endl; + std::cerr << "Warning: geometry type BOX of link " << urdf_link->name << " not exported" << std::endl; break; } case urdf::Geometry::CYLINDER: { - std::cerr << "Warning: geometry type CYLINDER of link " << urdf_link->name << " is unsupported" << std::endl; + std::cerr << "Warning: geometry type CYLINDER of link " << urdf_link->name << " not exported" << std::endl; break; } default: { - std::cerr << "Warning: geometry type " << urdf_link->visual->geometry->type << " of link " << urdf_link->name << " is supported" << std::endl; + std::cerr << "Warning: geometry type " << urdf_link->visual->geometry->type << " of link " << urdf_link->name << " not exported" << std::endl; break; } } @@ -833,4 +841,20 @@ domRotateRef ColladaWriter::addRotate(daeElementRef parent, urdf::Rotation const return rot; } +string ColladaWriter::getTimeStampString() const { + //"2009-04-06T17:01:00.891550" + + // facet becomes owned by locale, so no need to explicitly delete + boost::posix_time::time_facet* facet = new boost::posix_time::time_facet("%Y-%m-%dT%H:%M:%s"); + + std::stringstream ss(std::stringstream::in | std::stringstream::out); + ss.imbue(std::locale(ss.getloc(), facet)); + ss << boost::posix_time::second_clock::local_time(); + + string date; + ss >> date; + + return date; +} + } diff --git a/collada_urdf/src/STLLoader.cpp b/collada_urdf/src/STLLoader.cpp index d962f79..88dfe6a 100644 --- a/collada_urdf/src/STLLoader.cpp +++ b/collada_urdf/src/STLLoader.cpp @@ -32,12 +32,13 @@ * POSSIBILITY OF SUCH DAMAGE. *********************************************************************/ -#include -#include +#include "collada_urdf/STLLoader.h" + #include #include +#include -#include "collada_urdf/STLLoader.h" +#include using std::string; using boost::shared_ptr; diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp index cce43ca..e913bbe 100644 --- a/collada_urdf/src/urdf_to_collada.cpp +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -62,7 +62,7 @@ int main(int argc, char** argv) return -1; } - collada_urdf::ColladaWriter writer(&robot); + collada_urdf::ColladaWriter writer(&robot, input_filename); if (!writer.writeDocument(output_filename)) { std::cerr << "Error writing document" << std::endl; return -1; From 138cff4f75278b789e298a8df5b4641a53b15d02 Mon Sep 17 00:00:00 2001 From: tfield Date: Fri, 23 Apr 2010 22:11:53 +0000 Subject: [PATCH 155/245] collada_urdf: added unit test, new ColladaWriter constructor --- collada_urdf/CMakeLists.txt | 2 + .../include/collada_urdf/ColladaWriter.h | 20 +- collada_urdf/src/ColladaWriter.cpp | 55 +- collada_urdf/src/urdf_to_collada.cpp | 6 +- collada_urdf/test/pr2.urdf | 3399 +++++++++++++++++ collada_urdf/test/test_collada_writer.cpp | 40 + 6 files changed, 3496 insertions(+), 26 deletions(-) create mode 100644 collada_urdf/test/pr2.urdf create mode 100644 collada_urdf/test/test_collada_writer.cpp diff --git a/collada_urdf/CMakeLists.txt b/collada_urdf/CMakeLists.txt index 7ed58f2..40bfa84 100644 --- a/collada_urdf/CMakeLists.txt +++ b/collada_urdf/CMakeLists.txt @@ -4,3 +4,5 @@ set(ROS_BUILD_TYPE Debug) rosbuild_init() set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) rosbuild_add_executable(urdf_to_collada src/urdf_to_collada.cpp src/ColladaWriter.cpp src/STLLoader.cpp) + +rosbuild_add_gtest(test_collada_writer test/test_collada_writer.cpp src/ColladaWriter.cpp src/STLLoader.cpp) diff --git a/collada_urdf/include/collada_urdf/ColladaWriter.h b/collada_urdf/include/collada_urdf/ColladaWriter.h index 3120c87..63450e5 100644 --- a/collada_urdf/include/collada_urdf/ColladaWriter.h +++ b/collada_urdf/include/collada_urdf/ColladaWriter.h @@ -76,10 +76,19 @@ private: public: /** - * \brief Create a ColladaWriter using the specified URDF robot model and a source string, - * e.g. the name of the file the URDF was read from. + * \brief Create a ColladaWriter using the specified URDF filename. + * + * \param filename The name of the URDF file to convert */ - ColladaWriter(urdf::Model* robot, std::string const& source); + ColladaWriter(std::string const& filename); + + /** + * \brief Create a ColladaWriter using the specified URDF robot model and source. + * + * \param robot The URDF model to write + * \param source The source of the model, e.g. the URL the URDF was read from + */ + ColladaWriter(boost::shared_ptr robot, std::string const& source); virtual ~ColladaWriter(); @@ -124,9 +133,10 @@ private: std::string getTimeStampString() const; private: - urdf::Model* robot_; - std::string source_; + boost::shared_ptr robot_; + std::string source_; + DAE* dae_; boost::shared_ptr collada_; domCOLLADA* dom_; domCOLLADA::domSceneRef scene_; diff --git a/collada_urdf/src/ColladaWriter.cpp b/collada_urdf/src/ColladaWriter.cpp index 8ed8720..1cb70d7 100644 --- a/collada_urdf/src/ColladaWriter.cpp +++ b/collada_urdf/src/ColladaWriter.cpp @@ -49,8 +49,24 @@ using boost::shared_ptr; namespace collada_urdf { -ColladaWriter::ColladaWriter(urdf::Model* robot, string const& source) - : robot_(robot), source_(source) +ColladaWriter::ColladaWriter(std::string const& filename) + : source_(filename), dae_(NULL), dom_(NULL) +{ + TiXmlDocument xml; + if (!xml.LoadFile(filename.c_str())) + throw ColladaWriterException("Error opening file"); + + TiXmlElement* robot_xml = xml.FirstChildElement("robot"); + if (!robot_xml) + throw ColladaWriterException("Error parsing URDF model from XML"); + + robot_ = shared_ptr(new urdf::Model); + if (!robot_->initXml(robot_xml)) + throw ColladaWriterException("Error parsing URDF model from XML"); +} + +ColladaWriter::ColladaWriter(shared_ptr robot, string const& source) + : robot_(robot), source_(source), dae_(NULL), dom_(NULL) { } @@ -71,10 +87,28 @@ bool ColladaWriter::writeDocument(string const& documentName) { return true; } +ColladaWriter::~ColladaWriter() { + collada_.reset(); + + DAE::cleanup(); +} + +// Implementation + +void ColladaWriter::handleError(daeString msg) { + std::cerr << "COLLADA error: " << msg << std::endl; +} + +void ColladaWriter::handleWarning(daeString msg) { + std::cerr << "COLLADA warning: " << msg << std::endl; +} + void ColladaWriter::initDocument(string const& documentName) { daeErrorHandler::setErrorHandler(this); - collada_.reset(new DAE()); + dae_ = new DAE(); + + collada_.reset(dae_); collada_->setIOPlugin(NULL); collada_->setDatabase(NULL); @@ -135,13 +169,6 @@ void ColladaWriter::initDocument(string const& documentName) { materialsLib_->setId("materials"); } -ColladaWriter::~ColladaWriter() { - collada_.reset(); - DAE::cleanup(); -} - -// Implementation - ColladaWriter::SCENE ColladaWriter::createScene() { SCENE s; @@ -175,14 +202,6 @@ ColladaWriter::SCENE ColladaWriter::createScene() { return s; } -void ColladaWriter::handleError(daeString msg) { - std::cerr << "COLLADA error: " << msg << std::endl; -} - -void ColladaWriter::handleWarning(daeString msg) { - std::cerr << "COLLADA warning: " << msg << std::endl; -} - void ColladaWriter::setupPhysics(SCENE const& scene) { // domPhysics_scene::domTechnique_commonRef common = daeSafeCast(scene.pscene->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp index e913bbe..939a44e 100644 --- a/collada_urdf/src/urdf_to_collada.cpp +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -56,13 +56,13 @@ int main(int argc, char** argv) return -1; } - urdf::Model robot; - if (!robot.initXml(robot_xml)) { + boost::shared_ptr robot(new urdf::Model); + if (!robot->initXml(robot_xml)) { std::cerr << "Error parsing URDF model from XML" << std::endl; return -1; } - collada_urdf::ColladaWriter writer(&robot, input_filename); + collada_urdf::ColladaWriter writer(robot, input_filename); if (!writer.writeDocument(output_filename)) { std::cerr << "Error writing document" << std::endl; return -1; diff --git a/collada_urdf/test/pr2.urdf b/collada_urdf/test/pr2.urdf new file mode 100644 index 0000000..ae16a78 --- /dev/null +++ b/collada_urdf/test/pr2.urdf @@ -0,0 +1,3399 @@ + + + + + + + + + + + + + + + + + + + + true + 1000.0 + + + + true + 1.0 + 5 + + power_state + 10.0 + 87.78 + -474 + 525 + 15.52 + 16.41 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 + 640 + 1 + 0.0 0.0 0.0 + false + -129.998394137 + 129.998394137 + 0.05 + 10.0 + 0.01 + 20 + + 0.005 + true + 20 + base_scan + base_laser_link + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + true + + base_link_geom + 100.0 + + true + 100.0 + base_bumper + + + + + + + + true + 100.0 + base_link + base_pose_ground_truth + 0.01 + map + 25.7 25.7 0 + + 0 0 0 + + + base_footprint + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + torso_lift_link_geom + 100.0 + + true + 100.0 + torso_lift_bumper + + + + + + + + + -52143.33 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + 100.0 + imu_link + torso_lift_imu/data + 2.89e-08 + map + 0 0 0 + 0 0 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + R8G8B8 + 2448 2050 + 45 + 0.1 + 100 + 20.0 + + true + 20.0 + /prosilica/image_raw + /prosilica/camera_info + /prosilica/request_image + high_def_frame + 1224.5 + 1224.5 + 1025.5 + 2955 + + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + BAYER_BGGR8 + 90 + 0.1 + 100 + 25.0 + + true + 25.0 + wide_stereo/left/image_raw + wide_stereo/left/camera_info + wide_stereo_optical_frame + 0 + 320.5 + 320.5 + 240.5 + + + 320 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + + + + true + PR2/Blue + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + BAYER_BGGR8 + 90 + 0.1 + 100 + 25.0 + + true + 25.0 + wide_stereo/right/image_raw + wide_stereo/right/camera_info + wide_stereo_optical_frame + 0.09 + 320.5 + 320.5 + 240.5 + + + 320 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + + + + true + PR2/Blue + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 45 + 0.1 + 100 + 25.0 + + true + 25.0 + narrow_stereo/left/image_raw + narrow_stereo/left/camera_info + narrow_stereo_optical_frame + 0 + 320.5 + 320.5 + 240.5 + + + 772.55 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + + + + true + PR2/Blue + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 45 + 0.1 + 100 + 25.0 + + true + 25.0 + narrow_stereo/right/image_raw + narrow_stereo/right/camera_info + narrow_stereo_optical_frame + 0.09 + 320.5 + 320.5 + 240.5 + + + 772.55 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + + + + true + PR2/Blue + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 + 640 + 1 + 0.0 0.0 0.0 + false + -79.9999999086 + 79.9999999086 + 0.05 + 10.0 + 0.01 + 20 + + 0.005 + true + 20 + tilt_scan + laser_tilt_link + + + + + + + + + + + -6.05 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + 32.6525111499 + + + + r_shoulder_pan_link_geom + 100.0 + + true + 100.0 + r_shoulder_pan_bumper + + + + + true + + + + + + + + r_shoulder_lift_link_geom + 100.0 + + true + 100.0 + r_r_shoulder_lift_bumper + + + + true + + + + + + + + + 63.1552452977 + + + + + 61.8948225713 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + r_upper_arm_link_geom + + 100.0 + + true + 100.0 + r_upper_arm_bumper + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + -90.5142857143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -1.0 + + + + r_elbow_flex_link_geom + 100.0 + + true + 100.0 + r_elbow_flex_bumper + + + + + true + + + + + + + + + -36.167452007 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + r_forearm_link_geom + 100.0 + + true + 100.0 + r_forearm_bumper + + + + + + + true + + r_wrist_flex_link_geom + 100.0 + + true + 100.0 + r_wrist_flex_bumper + + + + + + + + + + + true + + r_wrist_roll_link_geom + 100.0 + + true + 100.0 + r_wrist_roll_bumper + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + r_gripper_l_finger_link_geom + 100.0 + + true + 100.0 + r_gripper_l_finger_bumper + + + + + + + + + + + + + + + + + + true + + r_gripper_r_finger_link_geom + 100.0 + + true + 100.0 + r_gripper_r_finger_bumper + + + + + + + + + + + + + + + + + true + false + + r_gripper_l_finger_tip_link_geom + 100.0 + + true + 100.0 + r_gripper_l_finger_tip_bumper + + + + + + + + + + + + + + + + + true + false + + r_gripper_r_finger_tip_link_geom + 100.0 + + true + 100.0 + r_gripper_r_finger_tip_bumper + + + + + + + + + + + + true + 100.0 + r_gripper_l_finger_link + r_gripper_l_finger_pose_ground_truth + 0.0 + map + + + + true + 100.0 + r_gripper_l_finger_link + r_gripper_l_finger_force_ground_truth + r_gripper_l_finger_link + + + + + + + + + + + + + + + + true + + r_gripper_palm_link_geom + 100.0 + + true + 100.0 + r_gripper_palm_bumper + + + + + + + true + + + + + + true + 0.01 + 0.0001 + 0 + 0 + 0.0001 + 0 + 0.0001 + 0 + 0 + 0 + 0.82025 0.188 0.790675 + 0 -0 0 + + 0 0 0 + 0 -0 0 + 0.0 0.0 0.0 + + 0 0 0 + 0 -0 0 + 0.0 0.0 0.0 + unit_box + PR2/White + + + true + false + + + r_gripper_float_link + r_gripper_palm_link + r_gripper_float_link + 1 0 0 + -0.05 + 0.001 + + + r_gripper_l_finger_tip_link + r_gripper_float_link + r_gripper_l_finger_tip_link + 0 1 0 + 0 0 0 + + + r_gripper_r_finger_tip_link + r_gripper_float_link + r_gripper_r_finger_tip_link + 0 1 0 + 0 0 0 + + + + + + true + 100.0 + r_gripper_palm_link + r_gripper_palm_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + map + + + + true + 100.0 + r_gripper_tool_frame + r_gripper_tool_frame_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + /map + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + 32.6525111499 + + + + l_shoulder_pan_link_geom + 100.0 + + true + 100.0 + l_shoulder_pan_bumper + + + + + true + + + + + + + + l_shoulder_lift_link_geom + 100.0 + + true + 100.0 + l_r_shoulder_lift_bumper + + + + true + + + + + + + + + 63.1552452977 + + + + + 61.8948225713 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + l_upper_arm_link_geom + + 100.0 + + true + 100.0 + l_upper_arm_bumper + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + -90.5142857143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -1.0 + + + + l_elbow_flex_link_geom + 100.0 + + true + 100.0 + l_elbow_flex_bumper + + + + + true + + + + + + + + + -36.167452007 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + l_forearm_link_geom + 100.0 + + true + 100.0 + l_forearm_bumper + + + + + + + true + + l_wrist_flex_link_geom + 100.0 + + true + 100.0 + l_wrist_flex_bumper + + + + + + + + + + + true + + l_wrist_roll_link_geom + 100.0 + + true + 100.0 + l_wrist_roll_bumper + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + l_gripper_l_finger_link_geom + 100.0 + + true + 100.0 + l_gripper_l_finger_bumper + + + + + + + + + + + + + + + + + + true + + l_gripper_r_finger_link_geom + 100.0 + + true + 100.0 + l_gripper_r_finger_bumper + + + + + + + + + + + + + + + + + true + false + + l_gripper_l_finger_tip_link_geom + 100.0 + + true + 100.0 + l_gripper_l_finger_tip_bumper + + + + + + + + + + + + + + + + + true + false + + l_gripper_r_finger_tip_link_geom + 100.0 + + true + 100.0 + l_gripper_r_finger_tip_bumper + + + + + + + + + + + + true + 100.0 + l_gripper_l_finger_link + l_gripper_l_finger_pose_ground_truth + 0.0 + map + + + + true + 100.0 + l_gripper_l_finger_link + l_gripper_l_finger_force_ground_truth + l_gripper_l_finger_link + + + + + + + + + + + + + + + + true + + l_gripper_palm_link_geom + 100.0 + + true + 100.0 + l_gripper_palm_bumper + + + + + + + true + + + + + + true + 0.01 + 0.0001 + 0 + 0 + 0.0001 + 0 + 0.0001 + 0 + 0 + 0 + 0.82025 0.188 0.790675 + 0 -0 0 + + 0 0 0 + 0 -0 0 + 0.0 0.0 0.0 + + 0 0 0 + 0 -0 0 + 0.0 0.0 0.0 + unit_box + PR2/White + + + true + false + + + l_gripper_float_link + l_gripper_palm_link + l_gripper_float_link + 1 0 0 + -0.05 + 0.001 + + + l_gripper_l_finger_tip_link + l_gripper_float_link + l_gripper_l_finger_tip_link + 0 1 0 + 0 0 0 + + + l_gripper_r_finger_tip_link + l_gripper_float_link + l_gripper_r_finger_tip_link + 0 1 0 + 0 0 0 + + + + + + true + 100.0 + l_gripper_palm_link + l_gripper_palm_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + map + + + + true + 100.0 + l_gripper_tool_frame + l_gripper_tool_frame_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + /map + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 90 + 0.1 + 100 + 25.0 + + true + 25.0 + l_forearm_cam/image_raw + l_forearm_cam/camera_info + l_forearm_cam_frame + 0 + 320.5 + 320.5 + 240.5 + + + 320 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + + + + true + PR2/Blue + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 90 + 0.1 + 100 + 25.0 + + true + 25.0 + r_forearm_cam/image_raw + r_forearm_cam/camera_info + r_forearm_cam_frame + 0 + 320.5 + 320.5 + 240.5 + + + 320 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + + + + true + PR2/Blue + + + diff --git a/collada_urdf/test/test_collada_writer.cpp b/collada_urdf/test/test_collada_writer.cpp new file mode 100644 index 0000000..74c4670 --- /dev/null +++ b/collada_urdf/test/test_collada_writer.cpp @@ -0,0 +1,40 @@ +// Copyright (c) 2010, Willow Garage, Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// * Neither the name of Willow Garage, Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. + +#include "collada_urdf/ColladaWriter.h" + +#include + +TEST(collada_urdf, collada_writer_writes) +{ + ASSERT_TRUE(collada_urdf::ColladaWriter("test/pr2.urdf").writeDocument("test/pr2.dae")); +} + +int main(int argc, char **argv) { + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} From da358799d07423aab8fceb0fa81f023b8ec6adce Mon Sep 17 00:00:00 2001 From: tfield Date: Fri, 23 Apr 2010 22:14:56 +0000 Subject: [PATCH 156/245] collada_urdf: urdf_to_collada catches exceptions --- collada_urdf/src/ColladaWriter.cpp | 4 ++-- collada_urdf/src/urdf_to_collada.cpp | 32 ++++++++-------------------- 2 files changed, 11 insertions(+), 25 deletions(-) diff --git a/collada_urdf/src/ColladaWriter.cpp b/collada_urdf/src/ColladaWriter.cpp index 1cb70d7..78c3d54 100644 --- a/collada_urdf/src/ColladaWriter.cpp +++ b/collada_urdf/src/ColladaWriter.cpp @@ -54,11 +54,11 @@ ColladaWriter::ColladaWriter(std::string const& filename) { TiXmlDocument xml; if (!xml.LoadFile(filename.c_str())) - throw ColladaWriterException("Error opening file"); + throw ColladaWriterException("Error reading XML file"); TiXmlElement* robot_xml = xml.FirstChildElement("robot"); if (!robot_xml) - throw ColladaWriterException("Error parsing URDF model from XML"); + throw ColladaWriterException("Error parsing URDF model from XML (robot element not found)"); robot_ = shared_ptr(new urdf::Model); if (!robot_->initXml(robot_xml)) diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp index 939a44e..03b01c1 100644 --- a/collada_urdf/src/urdf_to_collada.cpp +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -41,30 +41,16 @@ int main(int argc, char** argv) return -1; } - std::string input_filename(argv[1]); - std::string output_filename(argv[2]); - - TiXmlDocument robot_model_xml; - if (!robot_model_xml.LoadFile(input_filename.c_str())) { - std::cerr << "Error opening file " << argv[1] << std::endl; - return -1; + try + { + collada_urdf::ColladaWriter writer(argv[1]); + if (!writer.writeDocument(argv[2])) { + std::cerr << "Error writing document" << std::endl; + return -1; + } } - - TiXmlElement* robot_xml = robot_model_xml.FirstChildElement("robot"); - if (!robot_xml) { - std::cerr << "Error parsing URDF model from XML" << std::endl; - return -1; - } - - boost::shared_ptr robot(new urdf::Model); - if (!robot->initXml(robot_xml)) { - std::cerr << "Error parsing URDF model from XML" << std::endl; - return -1; - } - - collada_urdf::ColladaWriter writer(robot, input_filename); - if (!writer.writeDocument(output_filename)) { - std::cerr << "Error writing document" << std::endl; + catch (collada_urdf::ColladaWriterException ex) { + std::cerr << "Error converting document: " << ex.what() << std::endl; return -1; } From 51a5c72b3125a33ad63ad256897f7c11df7e9988 Mon Sep 17 00:00:00 2001 From: tfield Date: Fri, 23 Apr 2010 22:25:33 +0000 Subject: [PATCH 157/245] collada_urdf: more exceptions --- .../include/collada_urdf/ColladaWriter.h | 10 ++++---- collada_urdf/src/ColladaWriter.cpp | 23 ++++++++++++++++--- collada_urdf/src/STLLoader.cpp | 6 +++-- 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/collada_urdf/include/collada_urdf/ColladaWriter.h b/collada_urdf/include/collada_urdf/ColladaWriter.h index 63450e5..dac9890 100644 --- a/collada_urdf/include/collada_urdf/ColladaWriter.h +++ b/collada_urdf/include/collada_urdf/ColladaWriter.h @@ -75,15 +75,14 @@ private: }; public: - /** - * \brief Create a ColladaWriter using the specified URDF filename. + /** \brief Create a ColladaWriter using the specified URDF filename. * * \param filename The name of the URDF file to convert + * \throws ColladaWriterException if file could not be opened, or URDF could not be parsed */ ColladaWriter(std::string const& filename); - /** - * \brief Create a ColladaWriter using the specified URDF robot model and source. + /** \brief Create a ColladaWriter using the specified URDF robot model and source. * * \param robot The URDF model to write * \param source The source of the model, e.g. the URL the URDF was read from @@ -92,8 +91,7 @@ public: virtual ~ColladaWriter(); - /** - * \brief Write the model to a COLLADA file. + /** \brief Write the model to a COLLADA file. * * \param documentName The filename of the document to write to * \return True if the file was successfully written diff --git a/collada_urdf/src/ColladaWriter.cpp b/collada_urdf/src/ColladaWriter.cpp index 78c3d54..0981b40 100644 --- a/collada_urdf/src/ColladaWriter.cpp +++ b/collada_urdf/src/ColladaWriter.cpp @@ -276,20 +276,37 @@ void ColladaWriter::loadMesh(string const& filename, domGeometryRef geometry, st } // Try assimp first, then STLLoader - if (!loadMeshWithSTLLoader(resource, geometry, geometry_id)) - std::cerr << "Can't load mesh " << filename << std::endl; + try { + loadMeshWithSTLLoader(resource, geometry, geometry_id); + } + catch (ColladaWriterException e) { + std::cerr << "Unable to load mesh file " << filename << ": " << e.what() << std::endl; + } } bool ColladaWriter::loadMeshWithSTLLoader(resource_retriever::MemoryResource const& resource, domGeometryRef geometry, string const& geometry_id) { // Write the resource to a temporary file char tmp_filename[] = "/tmp/collada_urdf_XXXXXX"; int fd = mkstemp(tmp_filename); - write(fd, resource.data.get(), resource.size); + if (fd == -1) + throw ColladaWriterException("Couldn't create temporary file"); + + if (write(fd, resource.data.get(), resource.size) != resource.size) { + close(fd); + unlink(tmp_filename); + throw ColladaWriterException("Couldn't write resource to file"); + } close(fd); // Import the mesh using STLLoader STLLoader loader; shared_ptr stl_mesh = loader.load(string(tmp_filename)); + if (stl_mesh == shared_ptr()) { + unlink(tmp_filename); + throw ColladaWriterException("Couldn't import mesh with STLLoader"); + } + + // Build the COLLADA mesh buildMeshFromSTLLoader(stl_mesh, geometry, geometry_id); // Delete the temporary file diff --git a/collada_urdf/src/STLLoader.cpp b/collada_urdf/src/STLLoader.cpp index 88dfe6a..138f56c 100644 --- a/collada_urdf/src/STLLoader.cpp +++ b/collada_urdf/src/STLLoader.cpp @@ -73,9 +73,11 @@ void Mesh::addIndex(unsigned int i) { indices.push_back(i); } // STLLoader shared_ptr STLLoader::load(std::string const& filename) { - mesh_ = shared_ptr(new Mesh); - file_ = fopen(filename.c_str(), "r"); + if (file_ == NULL) + return shared_ptr(); + + mesh_ = shared_ptr(new Mesh); readBinary(); fclose(file_); file_ = NULL; From 275955babf96a17927666a1cbc911854508f4990 Mon Sep 17 00:00:00 2001 From: tfield Date: Fri, 23 Apr 2010 22:27:52 +0000 Subject: [PATCH 158/245] collada_urdf: writeDocument now throws instead of returning bool --- collada_urdf/include/collada_urdf/ColladaWriter.h | 3 ++- collada_urdf/src/ColladaWriter.cpp | 4 +--- collada_urdf/test/test_collada_writer.cpp | 3 ++- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/collada_urdf/include/collada_urdf/ColladaWriter.h b/collada_urdf/include/collada_urdf/ColladaWriter.h index dac9890..8b4c856 100644 --- a/collada_urdf/include/collada_urdf/ColladaWriter.h +++ b/collada_urdf/include/collada_urdf/ColladaWriter.h @@ -95,8 +95,9 @@ public: * * \param documentName The filename of the document to write to * \return True if the file was successfully written + * \throws ColladaWriterException if an error occurred writing the COLLADA file */ - bool writeDocument(std::string const& documentName); + void writeDocument(std::string const& documentName); protected: virtual void handleError(daeString msg); diff --git a/collada_urdf/src/ColladaWriter.cpp b/collada_urdf/src/ColladaWriter.cpp index 0981b40..a7f82e1 100644 --- a/collada_urdf/src/ColladaWriter.cpp +++ b/collada_urdf/src/ColladaWriter.cpp @@ -70,7 +70,7 @@ ColladaWriter::ColladaWriter(shared_ptr robot, string const& source { } -bool ColladaWriter::writeDocument(string const& documentName) { +void ColladaWriter::writeDocument(string const& documentName) { initDocument(documentName); SCENE scene = createScene(); @@ -83,8 +83,6 @@ bool ColladaWriter::writeDocument(string const& documentName) { addBindings(scene); collada_->writeAll(); - - return true; } ColladaWriter::~ColladaWriter() { diff --git a/collada_urdf/test/test_collada_writer.cpp b/collada_urdf/test/test_collada_writer.cpp index 74c4670..0f427e8 100644 --- a/collada_urdf/test/test_collada_writer.cpp +++ b/collada_urdf/test/test_collada_writer.cpp @@ -31,7 +31,8 @@ TEST(collada_urdf, collada_writer_writes) { - ASSERT_TRUE(collada_urdf::ColladaWriter("test/pr2.urdf").writeDocument("test/pr2.dae")); + // An exception will be thrown on any error opening the URDF or writing the COLLADA file + collada_urdf::ColladaWriter("test/pr2.urdf").writeDocument("test/pr2.dae"); } int main(int argc, char **argv) { From b031e157a8aa1c80157d956e6ee4476573f05478 Mon Sep 17 00:00:00 2001 From: tfield Date: Fri, 23 Apr 2010 22:30:44 +0000 Subject: [PATCH 159/245] collada_urdf: cleanup --- collada_urdf/src/ColladaWriter.cpp | 2 -- collada_urdf/src/urdf_to_collada.cpp | 7 +++---- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/collada_urdf/src/ColladaWriter.cpp b/collada_urdf/src/ColladaWriter.cpp index a7f82e1..221f84e 100644 --- a/collada_urdf/src/ColladaWriter.cpp +++ b/collada_urdf/src/ColladaWriter.cpp @@ -876,8 +876,6 @@ domRotateRef ColladaWriter::addRotate(daeElementRef parent, urdf::Rotation const } string ColladaWriter::getTimeStampString() const { - //"2009-04-06T17:01:00.891550" - // facet becomes owned by locale, so no need to explicitly delete boost::posix_time::time_facet* facet = new boost::posix_time::time_facet("%Y-%m-%dT%H:%M:%s"); diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp index 03b01c1..7a60dbf 100644 --- a/collada_urdf/src/urdf_to_collada.cpp +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -44,15 +44,14 @@ int main(int argc, char** argv) try { collada_urdf::ColladaWriter writer(argv[1]); - if (!writer.writeDocument(argv[2])) { - std::cerr << "Error writing document" << std::endl; - return -1; - } + writer.writeDocument(argv[2]); } catch (collada_urdf::ColladaWriterException ex) { std::cerr << "Error converting document: " << ex.what() << std::endl; return -1; } + std::cout << "Document successfully written to " << argv[2] << std::endl; + return 0; } From 47d90e0c4a0f48a81637a8ef8d43c0a5cc7393a1 Mon Sep 17 00:00:00 2001 From: tfield Date: Fri, 23 Apr 2010 22:34:11 +0000 Subject: [PATCH 160/245] collada_urdf: clean up docs --- collada_urdf/include/collada_urdf/ColladaWriter.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/collada_urdf/include/collada_urdf/ColladaWriter.h b/collada_urdf/include/collada_urdf/ColladaWriter.h index 8b4c856..f0daa5e 100644 --- a/collada_urdf/include/collada_urdf/ColladaWriter.h +++ b/collada_urdf/include/collada_urdf/ColladaWriter.h @@ -75,7 +75,7 @@ private: }; public: - /** \brief Create a ColladaWriter using the specified URDF filename. + /** \brief Create a ColladaWriter to import URDF from the specified file. * * \param filename The name of the URDF file to convert * \throws ColladaWriterException if file could not be opened, or URDF could not be parsed From c8cb7dce19ab4267759d469a96955b2ec0ee8d56 Mon Sep 17 00:00:00 2001 From: tfield Date: Fri, 23 Apr 2010 22:45:41 +0000 Subject: [PATCH 161/245] collada_urdf: throw exception on colladadom error --- collada_urdf/src/ColladaWriter.cpp | 2 +- collada_urdf/src/urdf_to_collada.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/collada_urdf/src/ColladaWriter.cpp b/collada_urdf/src/ColladaWriter.cpp index 221f84e..507ca31 100644 --- a/collada_urdf/src/ColladaWriter.cpp +++ b/collada_urdf/src/ColladaWriter.cpp @@ -94,7 +94,7 @@ ColladaWriter::~ColladaWriter() { // Implementation void ColladaWriter::handleError(daeString msg) { - std::cerr << "COLLADA error: " << msg << std::endl; + throw ColladaWriterException(msg); } void ColladaWriter::handleWarning(daeString msg) { diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp index 7a60dbf..b390d0f 100644 --- a/collada_urdf/src/urdf_to_collada.cpp +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -47,11 +47,11 @@ int main(int argc, char** argv) writer.writeDocument(argv[2]); } catch (collada_urdf::ColladaWriterException ex) { - std::cerr << "Error converting document: " << ex.what() << std::endl; + std::cerr << std::endl << "Error converting document: " << ex.what() << std::endl; return -1; } - std::cout << "Document successfully written to " << argv[2] << std::endl; + std::cout << std::endl << "Document successfully written to " << argv[2] << std::endl; return 0; } From e5fc479762370022572642f7982fbc9ee5ca2a13 Mon Sep 17 00:00:00 2001 From: wim Date: Fri, 23 Apr 2010 23:18:33 +0000 Subject: [PATCH 162/245] use new tf broadcaster with vectors --- .../robot_state_publisher.h | 6 ++--- .../src/robot_state_publisher.cpp | 22 ++++++------------- 2 files changed, 10 insertions(+), 18 deletions(-) diff --git a/robot_state_publisher/include/robot_state_publisher/robot_state_publisher.h b/robot_state_publisher/include/robot_state_publisher/robot_state_publisher.h index 402aa92..67c68be 100644 --- a/robot_state_publisher/include/robot_state_publisher/robot_state_publisher.h +++ b/robot_state_publisher/include/robot_state_publisher/robot_state_publisher.h @@ -40,7 +40,7 @@ #include #include #include -#include +#include #include "robot_state_publisher/treefksolverposfull_recursive.hpp" namespace robot_state_publisher{ @@ -68,8 +68,8 @@ private: KDL::Tree tree_; boost::scoped_ptr solver_; std::string root_; - std::string tf_prefix_; - tf::tfMessage tf_msg_; + std::vector transforms_; + tf::TransformBroadcaster tf_broadcaster_; class empty_tree_exception: public std::exception{ virtual const char* what() const throw(){ diff --git a/robot_state_publisher/src/robot_state_publisher.cpp b/robot_state_publisher/src/robot_state_publisher.cpp index 175c029..221fe2e 100644 --- a/robot_state_publisher/src/robot_state_publisher.cpp +++ b/robot_state_publisher/src/robot_state_publisher.cpp @@ -49,12 +49,6 @@ namespace robot_state_publisher{ RobotStatePublisher::RobotStatePublisher(const Tree& tree) :tree_(tree) { - // get tf prefix - NodeHandle n_local("~"); - std::string searched_param; - n_local.searchParam("tf_prefix", searched_param); - n_local.param(searched_param, tf_prefix_, std::string()); - // build tree solver solver_.reset(new TreeFkSolverPosFull_recursive(tree_)); @@ -78,21 +72,19 @@ bool RobotStatePublisher::publishTransforms(const map& joint_pos ROS_ERROR("Could not compute link poses. The tree or the state is invalid."); return false; } - tf_msg_.transforms.resize(link_poses.size()); + transforms_.resize(link_poses.size()); // send transforms to tf - geometry_msgs::TransformStamped trans; tf::Transform tf_frame; unsigned int i = 0; for (map::const_iterator f=link_poses.begin(); f!=link_poses.end(); f++){ - tf::TransformKDLToTF(f->second, tf_frame); - trans.header.stamp = time; - trans.header.frame_id = tf::resolve(tf_prefix_, root_); - trans.child_frame_id = tf::resolve(tf_prefix_, f->first); - tf::transformTFToMsg(tf_frame, trans.transform); - tf_msg_.transforms[i++] = trans; + tf::TransformKDLToTF(f->second, transforms_[i]); + transforms_[i].stamp_ = time; + transforms_[i].frame_id_ = root_; + transforms_[i].child_frame_id_ = f->first; + i++; } - tf_publisher_.publish(tf_msg_); + tf_broadcaster_.sendTransform(transforms_); return true; } From fcc7c835af0a5001a644dc45739f4fae492fb03f Mon Sep 17 00:00:00 2001 From: tfield Date: Sat, 24 Apr 2010 00:10:18 +0000 Subject: [PATCH 163/245] collada_urdf: incorporating review changes --- collada_urdf/CMakeLists.txt | 4 ++-- collada_urdf/src/urdf_to_collada.cpp | 18 +++++++++--------- collada_urdf/test/test_collada_writer.cpp | 7 ++++--- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/collada_urdf/CMakeLists.txt b/collada_urdf/CMakeLists.txt index 40bfa84..dd21f38 100644 --- a/collada_urdf/CMakeLists.txt +++ b/collada_urdf/CMakeLists.txt @@ -3,6 +3,6 @@ include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake) set(ROS_BUILD_TYPE Debug) rosbuild_init() set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) -rosbuild_add_executable(urdf_to_collada src/urdf_to_collada.cpp src/ColladaWriter.cpp src/STLLoader.cpp) +rosbuild_add_executable(urdf_to_collada src/urdf_to_collada.cpp src/collada_writer.cpp src/stl_loader.cpp) -rosbuild_add_gtest(test_collada_writer test/test_collada_writer.cpp src/ColladaWriter.cpp src/STLLoader.cpp) +rosbuild_add_gtest(test_collada_writer test/test_collada_writer.cpp src/collada_writer.cpp src/stl_loader.cpp) diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp index b390d0f..e527f7b 100644 --- a/collada_urdf/src/urdf_to_collada.cpp +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -32,7 +32,7 @@ * POSSIBILITY OF SUCH DAMAGE. *********************************************************************/ -#include "collada_urdf/ColladaWriter.h" +#include "collada_urdf/collada_writer.h" int main(int argc, char** argv) { @@ -41,17 +41,17 @@ int main(int argc, char** argv) return -1; } - try - { - collada_urdf::ColladaWriter writer(argv[1]); - writer.writeDocument(argv[2]); - } - catch (collada_urdf::ColladaWriterException ex) { - std::cerr << std::endl << "Error converting document: " << ex.what() << std::endl; + std::string input_filename(argv[1]); + std::string output_filename(argv[2]); + + boost::shared_ptr dom; + if (!collada_urdf::colladaFromFile(input_filename, dom)) { + std::cerr << std::endl << "Error converting document" << std::endl; return -1; } - std::cout << std::endl << "Document successfully written to " << argv[2] << std::endl; + dom->write("/u/tfield/test.dae"); + std::cout << std::endl << "Document successfully written to " << output_filename << std::endl; return 0; } diff --git a/collada_urdf/test/test_collada_writer.cpp b/collada_urdf/test/test_collada_writer.cpp index 0f427e8..a69fa79 100644 --- a/collada_urdf/test/test_collada_writer.cpp +++ b/collada_urdf/test/test_collada_writer.cpp @@ -25,14 +25,15 @@ // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE // POSSIBILITY OF SUCH DAMAGE. -#include "collada_urdf/ColladaWriter.h" +#include "collada_urdf/collada_writer.h" #include -TEST(collada_urdf, collada_writer_writes) +TEST(collada_urdf, collada_from_file_works) { // An exception will be thrown on any error opening the URDF or writing the COLLADA file - collada_urdf::ColladaWriter("test/pr2.urdf").writeDocument("test/pr2.dae"); + boost::shared_ptr dom; + ASSERT_TRUE(collada_urdf::colladaFromFile("test/pr2.urdf", dom)); } int main(int argc, char **argv) { From b24bcc5aa6cf8f4c7f6bd6dd1f1b7d514911b244 Mon Sep 17 00:00:00 2001 From: tfield Date: Sat, 24 Apr 2010 16:59:57 +0000 Subject: [PATCH 164/245] collada_urdf: review changes --- .../{ColladaWriter.h => collada_writer.h} | 58 +++++---- .../{STLLoader.h => stl_loader.h} | 0 .../{ColladaWriter.cpp => collada_writer.cpp} | 111 +++++++++++------- .../src/{STLLoader.cpp => stl_loader.cpp} | 2 +- 4 files changed, 100 insertions(+), 71 deletions(-) rename collada_urdf/include/collada_urdf/{ColladaWriter.h => collada_writer.h} (80%) rename collada_urdf/include/collada_urdf/{STLLoader.h => stl_loader.h} (100%) rename collada_urdf/src/{ColladaWriter.cpp => collada_writer.cpp} (94%) rename collada_urdf/src/{STLLoader.cpp => stl_loader.cpp} (99%) diff --git a/collada_urdf/include/collada_urdf/ColladaWriter.h b/collada_urdf/include/collada_urdf/collada_writer.h similarity index 80% rename from collada_urdf/include/collada_urdf/ColladaWriter.h rename to collada_urdf/include/collada_urdf/collada_writer.h index f0daa5e..69025fc 100644 --- a/collada_urdf/include/collada_urdf/ColladaWriter.h +++ b/collada_urdf/include/collada_urdf/collada_writer.h @@ -59,6 +59,36 @@ public: ColladaWriterException(std::string const& what) : std::runtime_error(what) { } }; +/** Constructs a COLLADA DOM from a file, given the file name + * \param file The filename from where to read the XML + * \param dom The resulting COLLADA DOM + * \return true on success, false on failure + */ +bool colladaFromFile(std::string const& file, boost::shared_ptr& dom); + +/** Constructs a COLLADA DOM from a string containing XML + * \param xml A string containing the XML description of the robot + * \param dom The resulting COLLADA DOM + * \return true on success, false on failure + */ +bool colladaFromString(std::string const& xml, boost::shared_ptr& dom); + +/** Constructs a COLLADA DOM from a TiXmlDocument + * \param xml_doc The TiXmlDocument containing the XML description of the robot + * \param dom The resulting COLLADA DOM + * \return true on success, false on failure + */ +bool colladaFromXml(TiXmlDocument* xml_doc, boost::shared_ptr& dom); + +/** Constructs a COLLADA DOM from a URDF robot model + * \param robot_model The URDF robot model + * \param dom The resulting COLLADA DOM + * \return true on success, false on failure + */ +bool colladaFromUrdfModel(urdf::Model const& robot_model, boost::shared_ptr& dom); + +// + class Mesh; class ColladaWriter : public daeErrorHandler @@ -75,29 +105,10 @@ private: }; public: - /** \brief Create a ColladaWriter to import URDF from the specified file. - * - * \param filename The name of the URDF file to convert - * \throws ColladaWriterException if file could not be opened, or URDF could not be parsed - */ - ColladaWriter(std::string const& filename); - - /** \brief Create a ColladaWriter using the specified URDF robot model and source. - * - * \param robot The URDF model to write - * \param source The source of the model, e.g. the URL the URDF was read from - */ - ColladaWriter(boost::shared_ptr robot, std::string const& source); - + ColladaWriter(urdf::Model const& robot); virtual ~ColladaWriter(); - /** \brief Write the model to a COLLADA file. - * - * \param documentName The filename of the document to write to - * \return True if the file was successfully written - * \throws ColladaWriterException if an error occurred writing the COLLADA file - */ - void writeDocument(std::string const& documentName); + boost::shared_ptr convert(); protected: virtual void handleError(daeString msg); @@ -132,10 +143,7 @@ private: std::string getTimeStampString() const; private: - boost::shared_ptr robot_; - std::string source_; - - DAE* dae_; + urdf::Model robot_; boost::shared_ptr collada_; domCOLLADA* dom_; domCOLLADA::domSceneRef scene_; diff --git a/collada_urdf/include/collada_urdf/STLLoader.h b/collada_urdf/include/collada_urdf/stl_loader.h similarity index 100% rename from collada_urdf/include/collada_urdf/STLLoader.h rename to collada_urdf/include/collada_urdf/stl_loader.h diff --git a/collada_urdf/src/ColladaWriter.cpp b/collada_urdf/src/collada_writer.cpp similarity index 94% rename from collada_urdf/src/ColladaWriter.cpp rename to collada_urdf/src/collada_writer.cpp index 507ca31..90364e0 100644 --- a/collada_urdf/src/ColladaWriter.cpp +++ b/collada_urdf/src/collada_writer.cpp @@ -32,9 +32,9 @@ * POSSIBILITY OF SUCH DAMAGE. *********************************************************************/ -#include "collada_urdf/ColladaWriter.h" +#include "collada_urdf/collada_writer.h" -#include "collada_urdf/STLLoader.h" +#include "collada_urdf/stl_loader.h" #include #include @@ -49,40 +49,66 @@ using boost::shared_ptr; namespace collada_urdf { -ColladaWriter::ColladaWriter(std::string const& filename) - : source_(filename), dae_(NULL), dom_(NULL) -{ - TiXmlDocument xml; - if (!xml.LoadFile(filename.c_str())) - throw ColladaWriterException("Error reading XML file"); +bool colladaFromFile(std::string const& file, boost::shared_ptr& dom) { + TiXmlDocument urdf_xml; + if (!urdf_xml.LoadFile(file)) { + ROS_ERROR("Could not load XML file"); + return false; + } - TiXmlElement* robot_xml = xml.FirstChildElement("robot"); - if (!robot_xml) - throw ColladaWriterException("Error parsing URDF model from XML (robot element not found)"); - - robot_ = shared_ptr(new urdf::Model); - if (!robot_->initXml(robot_xml)) - throw ColladaWriterException("Error parsing URDF model from XML"); + return colladaFromXml(&urdf_xml, dom); } -ColladaWriter::ColladaWriter(shared_ptr robot, string const& source) - : robot_(robot), source_(source), dae_(NULL), dom_(NULL) -{ +bool colladaFromString(std::string const& xml, boost::shared_ptr& dom) { + TiXmlDocument urdf_xml; + if (urdf_xml.Parse(xml.c_str()) == 0) { + ROS_ERROR("Could not parse XML document"); + return false; + } + + return colladaFromXml(&urdf_xml, dom); } -void ColladaWriter::writeDocument(string const& documentName) { - initDocument(documentName); +bool colladaFromXml(TiXmlDocument* xml_doc, boost::shared_ptr& dom) { + urdf::Model robot_model; + if (!robot_model.initXml(xml_doc)) { + ROS_ERROR("Could not generate robot model"); + return false; + } - SCENE scene = createScene(); + return colladaFromUrdfModel(robot_model, dom); +} - setupPhysics(scene); - addGeometries(); - addKinematics(scene); - addVisuals(scene); - addMaterials(); - addBindings(scene); +bool colladaFromUrdfModel(urdf::Model const& robot_model, boost::shared_ptr& dom) { + ColladaWriter writer(robot_model); + dom = writer.convert(); - collada_->writeAll(); + return dom != shared_ptr(); +} + +// + +ColladaWriter::ColladaWriter(urdf::Model const& robot) : robot_(robot), dom_(NULL) { } + +shared_ptr ColladaWriter::convert() { + try { + initDocument("collada_urdf"); + + SCENE scene = createScene(); + + setupPhysics(scene); + addGeometries(); + addKinematics(scene); + addVisuals(scene); + addMaterials(); + addBindings(scene); + + return collada_; + } + catch (ColladaWriterException ex) { + ROS_ERROR("Error converting: %s", ex.what()); + return shared_ptr(); + } } ColladaWriter::~ColladaWriter() { @@ -98,15 +124,13 @@ void ColladaWriter::handleError(daeString msg) { } void ColladaWriter::handleWarning(daeString msg) { - std::cerr << "COLLADA warning: " << msg << std::endl; + std::cerr << "COLLADA DOM warning: " << msg << std::endl; } void ColladaWriter::initDocument(string const& documentName) { daeErrorHandler::setErrorHandler(this); - dae_ = new DAE(); - - collada_.reset(dae_); + collada_.reset(new DAE); collada_->setIOPlugin(NULL); collada_->setDatabase(NULL); @@ -133,9 +157,6 @@ void ColladaWriter::initDocument(string const& documentName) { domAsset::domContributor::domAuthoring_toolRef authoringtool = daeSafeCast(contrib->createAndPlace(COLLADA_ELEMENT_AUTHORING_TOOL)); authoringtool->setValue("URDF Collada Writer"); - domAsset::domContributor::domSource_dataRef sourcedata = daeSafeCast(contrib->createAndPlace(COLLADA_ELEMENT_SOURCE_DATA)); - sourcedata->setValue(source_.c_str()); - domAsset::domUnitRef units = daeSafeCast(asset->createAndPlace(COLLADA_ELEMENT_UNIT)); units->setMeter(1); units->setName("meter"); @@ -215,7 +236,7 @@ void ColladaWriter::setupPhysics(SCENE const& scene) { void ColladaWriter::addGeometries() { int link_num = 0; - for (map >::const_iterator i = robot_->links_.begin(); i != robot_->links_.end(); i++) { + for (map >::const_iterator i = robot_.links_.begin(); i != robot_.links_.end(); i++) { shared_ptr urdf_link = i->second; if (urdf_link->visual == NULL || urdf_link->visual->geometry == NULL) @@ -397,7 +418,7 @@ void ColladaWriter::buildMeshFromSTLLoader(shared_ptr stl_mesh, daeElement void ColladaWriter::addJoints(daeElementRef parent) { int joint_num = 0; - for (map >::const_iterator i = robot_->joints_.begin(); i != robot_->joints_.end(); i++) { + for (map >::const_iterator i = robot_.joints_.begin(); i != robot_.joints_.end(); i++) { shared_ptr urdf_joint = i->second; // @@ -553,7 +574,7 @@ void ColladaWriter::addBindings(SCENE const& scene) { kmodel_bind->setNode("v1.node0"); // @todo daeSafeCast(kmodel_bind->createAndPlace(COLLADA_ELEMENT_PARAM))->setValue(string(string(scene.kscene->getID()) + string(".") + inst_model_sid).c_str()); - for (map >::const_iterator i = robot_->joints_.begin(); i != robot_->joints_.end(); i++) { + for (map >::const_iterator i = robot_.joints_.begin(); i != robot_.joints_.end(); i++) { shared_ptr urdf_joint = i->second; int idof = 0; // @todo assuming 1 dof joints @@ -587,7 +608,7 @@ void ColladaWriter::addKinematics(SCENE const& scene) { // domKinematics_modelRef kmodel = daeSafeCast(kinematicsModelsLib_->createAndPlace(COLLADA_ELEMENT_KINEMATICS_MODEL)); kmodel->setId("k1"); - kmodel->setName(robot_->getName().c_str()); + kmodel->setName(robot_.getName().c_str()); { // domKinematics_model_techniqueRef technique = daeSafeCast(kmodel->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); @@ -596,7 +617,7 @@ void ColladaWriter::addKinematics(SCENE const& scene) { // int link_num = 0; - addKinematicLink(robot_->getRoot(), technique, link_num); + addKinematicLink(robot_.getRoot(), technique, link_num); // } kmodel_ = kmodel; @@ -621,7 +642,7 @@ void ColladaWriter::addKinematics(SCENE const& scene) { } // - for (map >::const_iterator i = robot_->joints_.begin(); i != robot_->joints_.end(); i++) { + for (map >::const_iterator i = robot_.joints_.begin(); i != robot_.joints_.end(); i++) { shared_ptr urdf_joint = i->second; int idof = 0; // @todo assuming 1 dof joints @@ -670,7 +691,7 @@ void ColladaWriter::addKinematicLink(shared_ptr urdf_link, dae { addRotate(attachment_full, urdf_joint->parent_to_joint_origin_transform.rotation); addTranslate(attachment_full, urdf_joint->parent_to_joint_origin_transform.position); - addKinematicLink(robot_->getLink(urdf_joint->child_link_name), attachment_full, link_num); + addKinematicLink(robot_.getLink(urdf_joint->child_link_name), attachment_full, link_num); } // } @@ -681,10 +702,10 @@ void ColladaWriter::addVisuals(SCENE const& scene) { // domNodeRef root_node = daeSafeCast(scene.vscene->createAndPlace(COLLADA_ELEMENT_NODE)); root_node->setId("v1"); - root_node->setName(robot_->getName().c_str()); + root_node->setName(robot_.getName().c_str()); { int link_num = 0; - addVisualLink(robot_->getRoot(), root_node, link_num); + addVisualLink(robot_.getRoot(), root_node, link_num); } } @@ -693,7 +714,7 @@ void ColladaWriter::addMaterials() { ambient.init("1 1 1 0"); diffuse.init("1 1 1 0"); - for (map >::const_iterator i = robot_->links_.begin(); i != robot_->links_.end(); i++) { + for (map >::const_iterator i = robot_.links_.begin(); i != robot_.links_.end(); i++) { shared_ptr urdf_link = i->second; map::const_iterator j = geometry_ids_.find(urdf_link->name); diff --git a/collada_urdf/src/STLLoader.cpp b/collada_urdf/src/stl_loader.cpp similarity index 99% rename from collada_urdf/src/STLLoader.cpp rename to collada_urdf/src/stl_loader.cpp index 138f56c..7278c05 100644 --- a/collada_urdf/src/STLLoader.cpp +++ b/collada_urdf/src/stl_loader.cpp @@ -32,7 +32,7 @@ * POSSIBILITY OF SUCH DAMAGE. *********************************************************************/ -#include "collada_urdf/STLLoader.h" +#include "collada_urdf/stl_loader.h" #include #include From 2083f8ef9a12fafb404cd0b405930f33ed966383 Mon Sep 17 00:00:00 2001 From: tfield Date: Sat, 24 Apr 2010 17:45:27 +0000 Subject: [PATCH 165/245] collada_urdf: link Boost.System --- collada_urdf/CMakeLists.txt | 10 ++++- .../include/collada_urdf/collada_writer.h | 32 +------------- .../include/collada_urdf/stl_loader.h | 2 + collada_urdf/src/collada_writer.cpp | 43 ++----------------- collada_urdf/src/stl_loader.cpp | 2 + collada_urdf/src/urdf_to_collada.cpp | 4 +- ...llada_writer.cpp => test_collada_urdf.cpp} | 4 +- 7 files changed, 23 insertions(+), 74 deletions(-) rename collada_urdf/test/{test_collada_writer.cpp => test_collada_urdf.cpp} (96%) diff --git a/collada_urdf/CMakeLists.txt b/collada_urdf/CMakeLists.txt index dd21f38..ee272a6 100644 --- a/collada_urdf/CMakeLists.txt +++ b/collada_urdf/CMakeLists.txt @@ -3,6 +3,12 @@ include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake) set(ROS_BUILD_TYPE Debug) rosbuild_init() set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) -rosbuild_add_executable(urdf_to_collada src/urdf_to_collada.cpp src/collada_writer.cpp src/stl_loader.cpp) -rosbuild_add_gtest(test_collada_writer test/test_collada_writer.cpp src/collada_writer.cpp src/stl_loader.cpp) +rosbuild_add_library(collada_urdf src/collada_urdf.cpp src/collada_writer.cpp src/stl_loader.cpp) +rosbuild_link_boost(collada_urdf system) + +rosbuild_add_executable(urdf_to_collada src/urdf_to_collada.cpp) +target_link_libraries(urdf_to_collada collada_urdf) + +rosbuild_add_gtest(test_collada_writer test/test_collada_urdf.cpp) +target_link_libraries(test_collada_writer collada_urdf) diff --git a/collada_urdf/include/collada_urdf/collada_writer.h b/collada_urdf/include/collada_urdf/collada_writer.h index 69025fc..d579d80 100644 --- a/collada_urdf/include/collada_urdf/collada_writer.h +++ b/collada_urdf/include/collada_urdf/collada_writer.h @@ -32,6 +32,8 @@ * POSSIBILITY OF SUCH DAMAGE. *********************************************************************/ +/* Author: Tim Field */ + #ifndef COLLADA_URDF_COLLADA_WRITER_H #define COLLADA_URDF_COLLADA_WRITER_H @@ -59,36 +61,6 @@ public: ColladaWriterException(std::string const& what) : std::runtime_error(what) { } }; -/** Constructs a COLLADA DOM from a file, given the file name - * \param file The filename from where to read the XML - * \param dom The resulting COLLADA DOM - * \return true on success, false on failure - */ -bool colladaFromFile(std::string const& file, boost::shared_ptr& dom); - -/** Constructs a COLLADA DOM from a string containing XML - * \param xml A string containing the XML description of the robot - * \param dom The resulting COLLADA DOM - * \return true on success, false on failure - */ -bool colladaFromString(std::string const& xml, boost::shared_ptr& dom); - -/** Constructs a COLLADA DOM from a TiXmlDocument - * \param xml_doc The TiXmlDocument containing the XML description of the robot - * \param dom The resulting COLLADA DOM - * \return true on success, false on failure - */ -bool colladaFromXml(TiXmlDocument* xml_doc, boost::shared_ptr& dom); - -/** Constructs a COLLADA DOM from a URDF robot model - * \param robot_model The URDF robot model - * \param dom The resulting COLLADA DOM - * \return true on success, false on failure - */ -bool colladaFromUrdfModel(urdf::Model const& robot_model, boost::shared_ptr& dom); - -// - class Mesh; class ColladaWriter : public daeErrorHandler diff --git a/collada_urdf/include/collada_urdf/stl_loader.h b/collada_urdf/include/collada_urdf/stl_loader.h index c96395d..4241c54 100644 --- a/collada_urdf/include/collada_urdf/stl_loader.h +++ b/collada_urdf/include/collada_urdf/stl_loader.h @@ -32,6 +32,8 @@ * POSSIBILITY OF SUCH DAMAGE. *********************************************************************/ +/* Author: Tim Field */ + #ifndef COLLADA_URDF_STL_LOADER_H #define COLLADA_URDF_STL_LOADER_H diff --git a/collada_urdf/src/collada_writer.cpp b/collada_urdf/src/collada_writer.cpp index 90364e0..11b5b0e 100644 --- a/collada_urdf/src/collada_writer.cpp +++ b/collada_urdf/src/collada_writer.cpp @@ -32,6 +32,8 @@ * POSSIBILITY OF SUCH DAMAGE. *********************************************************************/ +/* Author: Tim Field */ + #include "collada_urdf/collada_writer.h" #include "collada_urdf/stl_loader.h" @@ -49,45 +51,6 @@ using boost::shared_ptr; namespace collada_urdf { -bool colladaFromFile(std::string const& file, boost::shared_ptr& dom) { - TiXmlDocument urdf_xml; - if (!urdf_xml.LoadFile(file)) { - ROS_ERROR("Could not load XML file"); - return false; - } - - return colladaFromXml(&urdf_xml, dom); -} - -bool colladaFromString(std::string const& xml, boost::shared_ptr& dom) { - TiXmlDocument urdf_xml; - if (urdf_xml.Parse(xml.c_str()) == 0) { - ROS_ERROR("Could not parse XML document"); - return false; - } - - return colladaFromXml(&urdf_xml, dom); -} - -bool colladaFromXml(TiXmlDocument* xml_doc, boost::shared_ptr& dom) { - urdf::Model robot_model; - if (!robot_model.initXml(xml_doc)) { - ROS_ERROR("Could not generate robot model"); - return false; - } - - return colladaFromUrdfModel(robot_model, dom); -} - -bool colladaFromUrdfModel(urdf::Model const& robot_model, boost::shared_ptr& dom) { - ColladaWriter writer(robot_model); - dom = writer.convert(); - - return dom != shared_ptr(); -} - -// - ColladaWriter::ColladaWriter(urdf::Model const& robot) : robot_(robot), dom_(NULL) { } shared_ptr ColladaWriter::convert() { @@ -310,7 +273,7 @@ bool ColladaWriter::loadMeshWithSTLLoader(resource_retriever::MemoryResource con if (fd == -1) throw ColladaWriterException("Couldn't create temporary file"); - if (write(fd, resource.data.get(), resource.size) != resource.size) { + if ((uint32_t) write(fd, resource.data.get(), resource.size) != resource.size) { close(fd); unlink(tmp_filename); throw ColladaWriterException("Couldn't write resource to file"); diff --git a/collada_urdf/src/stl_loader.cpp b/collada_urdf/src/stl_loader.cpp index 7278c05..77b8b2d 100644 --- a/collada_urdf/src/stl_loader.cpp +++ b/collada_urdf/src/stl_loader.cpp @@ -32,6 +32,8 @@ * POSSIBILITY OF SUCH DAMAGE. *********************************************************************/ +/* Author: Tim Field */ + #include "collada_urdf/stl_loader.h" #include diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp index e527f7b..6081c79 100644 --- a/collada_urdf/src/urdf_to_collada.cpp +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -32,7 +32,9 @@ * POSSIBILITY OF SUCH DAMAGE. *********************************************************************/ -#include "collada_urdf/collada_writer.h" +/* Author: Tim Field */ + +#include "collada_urdf/collada_urdf.h" int main(int argc, char** argv) { diff --git a/collada_urdf/test/test_collada_writer.cpp b/collada_urdf/test/test_collada_urdf.cpp similarity index 96% rename from collada_urdf/test/test_collada_writer.cpp rename to collada_urdf/test/test_collada_urdf.cpp index a69fa79..0c17a8e 100644 --- a/collada_urdf/test/test_collada_writer.cpp +++ b/collada_urdf/test/test_collada_urdf.cpp @@ -25,7 +25,9 @@ // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE // POSSIBILITY OF SUCH DAMAGE. -#include "collada_urdf/collada_writer.h" +/* Author: Tim Field */ + +#include "collada_urdf/collada_urdf.h" #include From 51126cf4585c67c6410b144712a04201e0bfb6c0 Mon Sep 17 00:00:00 2001 From: tfield Date: Sat, 24 Apr 2010 17:46:20 +0000 Subject: [PATCH 166/245] collada_urdf: split top-level API functions into own header --- .../include/collada_urdf/collada_urdf.h | 80 ++++++++++++++++++ collada_urdf/src/collada_urdf.cpp | 82 +++++++++++++++++++ 2 files changed, 162 insertions(+) create mode 100644 collada_urdf/include/collada_urdf/collada_urdf.h create mode 100644 collada_urdf/src/collada_urdf.cpp diff --git a/collada_urdf/include/collada_urdf/collada_urdf.h b/collada_urdf/include/collada_urdf/collada_urdf.h new file mode 100644 index 0000000..a1d3f66 --- /dev/null +++ b/collada_urdf/include/collada_urdf/collada_urdf.h @@ -0,0 +1,80 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2010, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redstributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Tim Field */ + +#ifndef COLLADA_URDF_COLLADA_URDF_H +#define COLLADA_URDF_COLLADA_URDF_H + +#include + +#include + +#include + +#include "urdf/model.h" + +namespace collada_urdf { + +/** Constructs a COLLADA DOM from a file, given the filename + * \param file The filename from where to read the XML + * \param dom The resulting COLLADA DOM + * \return true on success, false on failure + */ +bool colladaFromFile(std::string const& file, boost::shared_ptr& dom); + +/** Constructs a COLLADA DOM from a string containing XML + * \param xml A string containing the XML description of the robot + * \param dom The resulting COLLADA DOM + * \return true on success, false on failure + */ +bool colladaFromString(std::string const& xml, boost::shared_ptr& dom); + +/** Constructs a COLLADA DOM from a TiXmlDocument + * \param xml_doc The TiXmlDocument containing the XML description of the robot + * \param dom The resulting COLLADA DOM + * \return true on success, false on failure + */ +bool colladaFromXml(TiXmlDocument* xml_doc, boost::shared_ptr& dom); + +/** Constructs a COLLADA DOM from a URDF robot model + * \param robot_model The URDF robot model + * \param dom The resulting COLLADA DOM + * \return true on success, false on failure + */ +bool colladaFromUrdfModel(urdf::Model const& robot_model, boost::shared_ptr& dom); + +} + +#endif diff --git a/collada_urdf/src/collada_urdf.cpp b/collada_urdf/src/collada_urdf.cpp new file mode 100644 index 0000000..b407e74 --- /dev/null +++ b/collada_urdf/src/collada_urdf.cpp @@ -0,0 +1,82 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2010, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redstributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Tim Field */ + +#include "collada_urdf/collada_urdf.h" +#include "collada_urdf/collada_writer.h" + +using std::string; +using boost::shared_ptr; + +namespace collada_urdf { + +bool colladaFromFile(string const& file, shared_ptr& dom) { + TiXmlDocument urdf_xml; + if (!urdf_xml.LoadFile(file)) { + ROS_ERROR("Could not load XML file"); + return false; + } + + return colladaFromXml(&urdf_xml, dom); +} + +bool colladaFromString(string const& xml, shared_ptr& dom) { + TiXmlDocument urdf_xml; + if (urdf_xml.Parse(xml.c_str()) == 0) { + ROS_ERROR("Could not parse XML document"); + return false; + } + + return colladaFromXml(&urdf_xml, dom); +} + +bool colladaFromXml(TiXmlDocument* xml_doc, shared_ptr& dom) { + urdf::Model robot_model; + if (!robot_model.initXml(xml_doc)) { + ROS_ERROR("Could not generate robot model"); + return false; + } + + return colladaFromUrdfModel(robot_model, dom); +} + +bool colladaFromUrdfModel(urdf::Model const& robot_model, shared_ptr& dom) { + ColladaWriter writer(robot_model); + dom = writer.convert(); + + return dom != shared_ptr(); +} + +} From 3ab12d3c7f52c7db06902dcd2fbb4d11522526ae Mon Sep 17 00:00:00 2001 From: tfield Date: Sat, 24 Apr 2010 18:22:25 +0000 Subject: [PATCH 167/245] collada_urdf: added colladaToFile --- .../include/collada_urdf/collada_urdf.h | 25 ++++++++----- .../include/collada_urdf/collada_writer.h | 2 + collada_urdf/src/collada_urdf.cpp | 15 +++++--- collada_urdf/src/collada_writer.cpp | 37 +++++++++---------- collada_urdf/src/urdf_to_collada.cpp | 4 +- collada_urdf/test/test_collada_urdf.cpp | 6 +-- 6 files changed, 50 insertions(+), 39 deletions(-) diff --git a/collada_urdf/include/collada_urdf/collada_urdf.h b/collada_urdf/include/collada_urdf/collada_urdf.h index a1d3f66..7030f82 100644 --- a/collada_urdf/include/collada_urdf/collada_urdf.h +++ b/collada_urdf/include/collada_urdf/collada_urdf.h @@ -47,34 +47,41 @@ namespace collada_urdf { -/** Constructs a COLLADA DOM from a file, given the filename - * \param file The filename from where to read the XML +/** Construct a COLLADA DOM from an URDF file + * \param file The filename from where to read the URDF * \param dom The resulting COLLADA DOM * \return true on success, false on failure */ -bool colladaFromFile(std::string const& file, boost::shared_ptr& dom); +bool colladaFromUrdfFile(std::string const& file, boost::shared_ptr& dom); -/** Constructs a COLLADA DOM from a string containing XML +/** Construct a COLLADA DOM from a string containing URDF * \param xml A string containing the XML description of the robot * \param dom The resulting COLLADA DOM * \return true on success, false on failure */ -bool colladaFromString(std::string const& xml, boost::shared_ptr& dom); +bool colladaFromUrdfString(std::string const& xml, boost::shared_ptr& dom); -/** Constructs a COLLADA DOM from a TiXmlDocument - * \param xml_doc The TiXmlDocument containing the XML description of the robot +/** Construct a COLLADA DOM from a TiXmlDocument containing URDF + * \param xml_doc The TiXmlDocument containing URDF * \param dom The resulting COLLADA DOM * \return true on success, false on failure */ -bool colladaFromXml(TiXmlDocument* xml_doc, boost::shared_ptr& dom); +bool colladaFromUrdfXml(TiXmlDocument* xml_doc, boost::shared_ptr& dom); -/** Constructs a COLLADA DOM from a URDF robot model +/** Construct a COLLADA DOM from a URDF robot model * \param robot_model The URDF robot model * \param dom The resulting COLLADA DOM * \return true on success, false on failure */ bool colladaFromUrdfModel(urdf::Model const& robot_model, boost::shared_ptr& dom); +/** Write a COLLADA DOM to a file + * \param dom COLLADA DOM to write + * \param file The filename to write the document to + * \return true on success, false on failure + */ +bool colladaToFile(boost::shared_ptr dom, std::string const& file); + } #endif diff --git a/collada_urdf/include/collada_urdf/collada_writer.h b/collada_urdf/include/collada_urdf/collada_writer.h index d579d80..3bf0c30 100644 --- a/collada_urdf/include/collada_urdf/collada_writer.h +++ b/collada_urdf/include/collada_urdf/collada_writer.h @@ -115,6 +115,8 @@ private: std::string getTimeStampString() const; private: + static int s_doc_count_; + urdf::Model robot_; boost::shared_ptr collada_; domCOLLADA* dom_; diff --git a/collada_urdf/src/collada_urdf.cpp b/collada_urdf/src/collada_urdf.cpp index b407e74..69fbd3f 100644 --- a/collada_urdf/src/collada_urdf.cpp +++ b/collada_urdf/src/collada_urdf.cpp @@ -42,27 +42,27 @@ using boost::shared_ptr; namespace collada_urdf { -bool colladaFromFile(string const& file, shared_ptr& dom) { +bool colladaFromUrdfFile(string const& file, shared_ptr& dom) { TiXmlDocument urdf_xml; if (!urdf_xml.LoadFile(file)) { ROS_ERROR("Could not load XML file"); return false; } - return colladaFromXml(&urdf_xml, dom); + return colladaFromUrdfXml(&urdf_xml, dom); } -bool colladaFromString(string const& xml, shared_ptr& dom) { +bool colladaFromUrdfString(string const& xml, shared_ptr& dom) { TiXmlDocument urdf_xml; if (urdf_xml.Parse(xml.c_str()) == 0) { ROS_ERROR("Could not parse XML document"); return false; } - return colladaFromXml(&urdf_xml, dom); + return colladaFromUrdfXml(&urdf_xml, dom); } -bool colladaFromXml(TiXmlDocument* xml_doc, shared_ptr& dom) { +bool colladaFromUrdfXml(TiXmlDocument* xml_doc, shared_ptr& dom) { urdf::Model robot_model; if (!robot_model.initXml(xml_doc)) { ROS_ERROR("Could not generate robot model"); @@ -79,4 +79,9 @@ bool colladaFromUrdfModel(urdf::Model const& robot_model, shared_ptr& dom) return dom != shared_ptr(); } +bool colladaToFile(shared_ptr dom, string const& file) { + daeString uri = dom->getDoc(0)->getDocumentURI()->getURI(); + return dom->writeTo(uri, file); +} + } diff --git a/collada_urdf/src/collada_writer.cpp b/collada_urdf/src/collada_writer.cpp index 11b5b0e..7265365 100644 --- a/collada_urdf/src/collada_writer.cpp +++ b/collada_urdf/src/collada_writer.cpp @@ -51,11 +51,22 @@ using boost::shared_ptr; namespace collada_urdf { -ColladaWriter::ColladaWriter(urdf::Model const& robot) : robot_(robot), dom_(NULL) { } +int ColladaWriter::s_doc_count_ = 0; + +ColladaWriter::ColladaWriter(urdf::Model const& robot) : robot_(robot), dom_(NULL) { + daeErrorHandler::setErrorHandler(this); + + collada_.reset(new DAE); + collada_->setIOPlugin(NULL); + collada_->setDatabase(NULL); +} + +ColladaWriter::~ColladaWriter() { } shared_ptr ColladaWriter::convert() { try { - initDocument("collada_urdf"); + string doc_count_str = boost::lexical_cast(s_doc_count_++); + initDocument(string("collada_urdf_") + doc_count_str + string(".dae")); SCENE scene = createScene(); @@ -74,12 +85,6 @@ shared_ptr ColladaWriter::convert() { } } -ColladaWriter::~ColladaWriter() { - collada_.reset(); - - DAE::cleanup(); -} - // Implementation void ColladaWriter::handleError(daeString msg) { @@ -91,12 +96,7 @@ void ColladaWriter::handleWarning(daeString msg) { } void ColladaWriter::initDocument(string const& documentName) { - daeErrorHandler::setErrorHandler(this); - - collada_.reset(new DAE); - collada_->setIOPlugin(NULL); - collada_->setDatabase(NULL); - + // Create the document daeDocument* doc = NULL; daeInt error = collada_->getDatabase()->insertDocument(documentName.c_str(), &doc); // also creates a collada root if (error != DAE_OK || doc == NULL) @@ -105,7 +105,7 @@ void ColladaWriter::initDocument(string const& documentName) { dom_ = daeSafeCast(doc->getDomRoot()); dom_->setAttribute("xmlns:math", "http://www.w3.org/1998/Math/MathML"); - // Create the required asset tag + // Create asset elements domAssetRef asset = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_ASSET)); { string date = getTimeStampString(); @@ -128,10 +128,8 @@ void ColladaWriter::initDocument(string const& documentName) { zup->setValue(UP_AXIS_Z_UP); } - scene_ = dom_->getScene(); - if (!scene_) - scene_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_SCENE)); - + // Create top-level elements + scene_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_SCENE)); visualScenesLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_VISUAL_SCENES)); visualScenesLib_->setId("vscenes"); geometriesLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_GEOMETRIES)); @@ -142,7 +140,6 @@ void ColladaWriter::initDocument(string const& documentName) { kinematicsModelsLib_->setId("kmodels"); jointsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_JOINTS)); jointsLib_->setId("joints"); - physicsScenesLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_PHYSICS_SCENES)); physicsScenesLib_->setId("physics_scenes"); effectsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_EFFECTS)); diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp index 6081c79..5eb9d16 100644 --- a/collada_urdf/src/urdf_to_collada.cpp +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -47,12 +47,12 @@ int main(int argc, char** argv) std::string output_filename(argv[2]); boost::shared_ptr dom; - if (!collada_urdf::colladaFromFile(input_filename, dom)) { + if (!collada_urdf::colladaFromUrdfFile(input_filename, dom)) { std::cerr << std::endl << "Error converting document" << std::endl; return -1; } - dom->write("/u/tfield/test.dae"); + collada_urdf::colladaToFile(dom, output_filename); std::cout << std::endl << "Document successfully written to " << output_filename << std::endl; return 0; diff --git a/collada_urdf/test/test_collada_urdf.cpp b/collada_urdf/test/test_collada_urdf.cpp index 0c17a8e..895fa50 100644 --- a/collada_urdf/test/test_collada_urdf.cpp +++ b/collada_urdf/test/test_collada_urdf.cpp @@ -31,11 +31,11 @@ #include -TEST(collada_urdf, collada_from_file_works) +TEST(collada_urdf, collada_from_urdf_file_works) { - // An exception will be thrown on any error opening the URDF or writing the COLLADA file boost::shared_ptr dom; - ASSERT_TRUE(collada_urdf::colladaFromFile("test/pr2.urdf", dom)); + ASSERT_TRUE(collada_urdf::colladaFromUrdfFile("test/pr2.urdf", dom)); + ASSERT_TRUE(collada_urdf::colladaToFile(dom, "test/pr2.dae")); } int main(int argc, char **argv) { From de6ad90cf17476a74a3f8ad9fd449eb598a597ca Mon Sep 17 00:00:00 2001 From: tfield Date: Mon, 26 Apr 2010 19:00:40 +0000 Subject: [PATCH 168/245] collada_urdf: ColladaWriterException -> ColladaUrdfException --- collada_urdf/include/collada_urdf/collada_urdf.h | 6 ++++++ collada_urdf/include/collada_urdf/collada_writer.h | 13 +++++++------ collada_urdf/src/collada_urdf.cpp | 5 +++++ collada_urdf/src/collada_writer.cpp | 14 +++++++------- 4 files changed, 25 insertions(+), 13 deletions(-) diff --git a/collada_urdf/include/collada_urdf/collada_urdf.h b/collada_urdf/include/collada_urdf/collada_urdf.h index 7030f82..44f5837 100644 --- a/collada_urdf/include/collada_urdf/collada_urdf.h +++ b/collada_urdf/include/collada_urdf/collada_urdf.h @@ -47,6 +47,12 @@ namespace collada_urdf { +class ColladaUrdfException : public std::runtime_error +{ +public: + ColladaUrdfException(std::string const& what); +}; + /** Construct a COLLADA DOM from an URDF file * \param file The filename from where to read the URDF * \param dom The resulting COLLADA DOM diff --git a/collada_urdf/include/collada_urdf/collada_writer.h b/collada_urdf/include/collada_urdf/collada_writer.h index 3bf0c30..6aada98 100644 --- a/collada_urdf/include/collada_urdf/collada_writer.h +++ b/collada_urdf/include/collada_urdf/collada_writer.h @@ -37,6 +37,8 @@ #ifndef COLLADA_URDF_COLLADA_WRITER_H #define COLLADA_URDF_COLLADA_WRITER_H +#include "collada_urdf/collada_urdf.h" + #include #include @@ -55,14 +57,13 @@ namespace collada_urdf { -class ColladaWriterException : public std::runtime_error -{ -public: - ColladaWriterException(std::string const& what) : std::runtime_error(what) { } -}; - class Mesh; +/** + * Implements writing urdf::Model objects to a COLLADA DOM. + * + * The API for this class is unstable. The public API for collada_urdf is declared in collada_urdf.h. + */ class ColladaWriter : public daeErrorHandler { private: diff --git a/collada_urdf/src/collada_urdf.cpp b/collada_urdf/src/collada_urdf.cpp index 69fbd3f..63ea86e 100644 --- a/collada_urdf/src/collada_urdf.cpp +++ b/collada_urdf/src/collada_urdf.cpp @@ -42,6 +42,11 @@ using boost::shared_ptr; namespace collada_urdf { +ColladaUrdfException::ColladaUrdfException(std::string const& what) + : std::runtime_error(what) +{ +} + bool colladaFromUrdfFile(string const& file, shared_ptr& dom) { TiXmlDocument urdf_xml; if (!urdf_xml.LoadFile(file)) { diff --git a/collada_urdf/src/collada_writer.cpp b/collada_urdf/src/collada_writer.cpp index 7265365..8fe3dea 100644 --- a/collada_urdf/src/collada_writer.cpp +++ b/collada_urdf/src/collada_writer.cpp @@ -79,7 +79,7 @@ shared_ptr ColladaWriter::convert() { return collada_; } - catch (ColladaWriterException ex) { + catch (ColladaUrdfException ex) { ROS_ERROR("Error converting: %s", ex.what()); return shared_ptr(); } @@ -88,7 +88,7 @@ shared_ptr ColladaWriter::convert() { // Implementation void ColladaWriter::handleError(daeString msg) { - throw ColladaWriterException(msg); + throw ColladaUrdfException(msg); } void ColladaWriter::handleWarning(daeString msg) { @@ -100,7 +100,7 @@ void ColladaWriter::initDocument(string const& documentName) { daeDocument* doc = NULL; daeInt error = collada_->getDatabase()->insertDocument(documentName.c_str(), &doc); // also creates a collada root if (error != DAE_OK || doc == NULL) - throw ColladaWriterException("Failed to create document"); + throw ColladaUrdfException("Failed to create document"); dom_ = daeSafeCast(doc->getDomRoot()); dom_->setAttribute("xmlns:math", "http://www.w3.org/1998/Math/MathML"); @@ -258,7 +258,7 @@ void ColladaWriter::loadMesh(string const& filename, domGeometryRef geometry, st try { loadMeshWithSTLLoader(resource, geometry, geometry_id); } - catch (ColladaWriterException e) { + catch (ColladaUrdfException e) { std::cerr << "Unable to load mesh file " << filename << ": " << e.what() << std::endl; } } @@ -268,12 +268,12 @@ bool ColladaWriter::loadMeshWithSTLLoader(resource_retriever::MemoryResource con char tmp_filename[] = "/tmp/collada_urdf_XXXXXX"; int fd = mkstemp(tmp_filename); if (fd == -1) - throw ColladaWriterException("Couldn't create temporary file"); + throw ColladaUrdfException("Couldn't create temporary file"); if ((uint32_t) write(fd, resource.data.get(), resource.size) != resource.size) { close(fd); unlink(tmp_filename); - throw ColladaWriterException("Couldn't write resource to file"); + throw ColladaUrdfException("Couldn't write resource to file"); } close(fd); @@ -282,7 +282,7 @@ bool ColladaWriter::loadMeshWithSTLLoader(resource_retriever::MemoryResource con shared_ptr stl_mesh = loader.load(string(tmp_filename)); if (stl_mesh == shared_ptr()) { unlink(tmp_filename); - throw ColladaWriterException("Couldn't import mesh with STLLoader"); + throw ColladaUrdfException("Couldn't import STL mesh"); } // Build the COLLADA mesh From 49dd64ef66d0af265038095b38ab254d39d2799b Mon Sep 17 00:00:00 2001 From: tfield Date: Mon, 26 Apr 2010 19:44:55 +0000 Subject: [PATCH 169/245] collada_urdf: more unit tests --- collada_urdf/test/test_collada_urdf.cpp | 42 +++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/collada_urdf/test/test_collada_urdf.cpp b/collada_urdf/test/test_collada_urdf.cpp index 895fa50..677d029 100644 --- a/collada_urdf/test/test_collada_urdf.cpp +++ b/collada_urdf/test/test_collada_urdf.cpp @@ -31,6 +31,17 @@ #include +#include +#include +#include + +std::string readTestUrdfString() { + std::ifstream file("test/pr2.urdf"); + std::stringstream ss; + ss << file.rdbuf(); + return ss.str(); +} + TEST(collada_urdf, collada_from_urdf_file_works) { boost::shared_ptr dom; @@ -38,6 +49,37 @@ TEST(collada_urdf, collada_from_urdf_file_works) ASSERT_TRUE(collada_urdf::colladaToFile(dom, "test/pr2.dae")); } +TEST(collada_urdf, collada_from_urdf_string_works) +{ + std::string urdf_str = readTestUrdfString(); + + boost::shared_ptr dom; + ASSERT_TRUE(collada_urdf::colladaFromUrdfString(urdf_str, dom)); + ASSERT_TRUE(collada_urdf::colladaToFile(dom, "test/pr2.dae")); +} + +TEST(collada_urdf, collada_from_urdf_xml_works) +{ + TiXmlDocument urdf_xml; + ASSERT_TRUE(urdf_xml.Parse(readTestUrdfString().c_str()) > 0); + + boost::shared_ptr dom; + ASSERT_TRUE(collada_urdf::colladaFromUrdfXml(&urdf_xml, dom)); + ASSERT_TRUE(collada_urdf::colladaToFile(dom, "test/pr2.dae")); +} + +TEST(collada_urdf, collada_from_urdf_model_works) +{ + urdf::Model robot_model; + TiXmlDocument urdf_xml; + ASSERT_TRUE(urdf_xml.Parse(readTestUrdfString().c_str()) > 0); + ASSERT_TRUE(robot_model.initXml(&urdf_xml)); + + boost::shared_ptr dom; + ASSERT_TRUE(collada_urdf::colladaFromUrdfModel(robot_model, dom)); + ASSERT_TRUE(collada_urdf::colladaToFile(dom, "test/pr2.dae")); +} + int main(int argc, char **argv) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); From 1879bebcf051685aef874d7fc9264100907f89a7 Mon Sep 17 00:00:00 2001 From: tfoote Date: Fri, 30 Apr 2010 17:02:02 +0000 Subject: [PATCH 170/245] reving for 1.1.2 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 98631f5..d2f23fc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,4 +16,4 @@ set(ROSPACK_MAKEDIST true) # variables. #list(APPEND CPACK_SOURCE_IGNORE_FILES /core/experimental) -rosbuild_make_distribution(1.1.1) +rosbuild_make_distribution(1.1.2) From 03d1d90b720f435c6200b289b4b5b07a2be8d62e Mon Sep 17 00:00:00 2001 From: tfield Date: Wed, 5 May 2010 05:05:28 +0000 Subject: [PATCH 171/245] collada_urdf: update review status --- collada_urdf/manifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/collada_urdf/manifest.xml b/collada_urdf/manifest.xml index d6bedf7..8594903 100644 --- a/collada_urdf/manifest.xml +++ b/collada_urdf/manifest.xml @@ -6,7 +6,7 @@ Tim Field BSD - + http://ros.org/wiki/collada_urdf From 807cef55189e33be5a188d5bd01df401b0e52a92 Mon Sep 17 00:00:00 2001 From: tfield Date: Wed, 12 May 2010 04:19:12 +0000 Subject: [PATCH 172/245] robot_state_publisher: indexing test bags --- robot_state_publisher/CMakeLists.txt | 2 +- robot_state_publisher/test/test_publisher.launch | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/robot_state_publisher/CMakeLists.txt b/robot_state_publisher/CMakeLists.txt index 56f67f7..b3220fe 100644 --- a/robot_state_publisher/CMakeLists.txt +++ b/robot_state_publisher/CMakeLists.txt @@ -35,4 +35,4 @@ rosbuild_declare_test(test_publisher) rosbuild_add_rostest(${CMAKE_CURRENT_SOURCE_DIR}/test/test_publisher.launch) # Download needed data file -rosbuild_download_test_data(http://pr.willowgarage.com/data/robot_state_publisher/joint_states.bag test/joint_states.bag 6a41221f3569766052754a65ecd061ce) +rosbuild_download_test_data(http://pr.willowgarage.com/data/robot_state_publisher/joint_states_indexed.bag test/joint_states_indexed.bag 793e0b566ebe4698265a936b92fa2bba) diff --git a/robot_state_publisher/test/test_publisher.launch b/robot_state_publisher/test/test_publisher.launch index 79b6a9c..29aa39d 100644 --- a/robot_state_publisher/test/test_publisher.launch +++ b/robot_state_publisher/test/test_publisher.launch @@ -1,5 +1,5 @@ - + From ddefd5656013e1db1120c0d4a8d3ff9ba84dc0d2 Mon Sep 17 00:00:00 2001 From: leibs Date: Wed, 12 May 2010 17:34:04 +0000 Subject: [PATCH 173/245] updating to release 1.1.3 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d2f23fc..6484240 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,4 +16,4 @@ set(ROSPACK_MAKEDIST true) # variables. #list(APPEND CPACK_SOURCE_IGNORE_FILES /core/experimental) -rosbuild_make_distribution(1.1.2) +rosbuild_make_distribution(1.1.3) From 37b000d41d97e4e98412a7453970a3f139a63743 Mon Sep 17 00:00:00 2001 From: tfield Date: Fri, 14 May 2010 01:10:36 +0000 Subject: [PATCH 174/245] collada_urdf: fix mesh loading bug --- collada_urdf/src/stl_loader.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/collada_urdf/src/stl_loader.cpp b/collada_urdf/src/stl_loader.cpp index 77b8b2d..4194f99 100644 --- a/collada_urdf/src/stl_loader.cpp +++ b/collada_urdf/src/stl_loader.cpp @@ -95,10 +95,16 @@ void STLLoader::readBinary() { int face_num = readLongInt(); for (int iface = 0; iface < face_num; iface++) { - Vector3 normal(readFloat(), readFloat(), readFloat()); + float nx = readFloat(); + float ny = readFloat(); + float nz = readFloat(); + Vector3 normal(nx, ny, nz); for (int i = 0; i < 3; i++) { - Vector3 vertex(readFloat(), readFloat(), readFloat()); + float vx = readFloat(); + float vy = readFloat(); + float vz = readFloat(); + Vector3 vertex(vx, vy, vz); int index = mesh_->getVertexIndex(vertex); if (index == -1) { From ae891899a8c7aee476291d3dd8c6eb57ccd888ab Mon Sep 17 00:00:00 2001 From: tfield Date: Mon, 17 May 2010 02:36:17 +0000 Subject: [PATCH 175/245] collada_urdf: transform nodes by link visual origin; remove OpenRAVE bug workaround --- collada_urdf/src/collada_writer.cpp | 30 ++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/collada_urdf/src/collada_writer.cpp b/collada_urdf/src/collada_writer.cpp index 8fe3dea..72c2013 100644 --- a/collada_urdf/src/collada_writer.cpp +++ b/collada_urdf/src/collada_writer.cpp @@ -399,9 +399,9 @@ void ColladaWriter::addJoints(daeElementRef parent) { } // @hack: OpenRAVE appears to flip joint axes - axis_x *= -1.0; - axis_y *= -1.0; - axis_z *= -1.0; + //axis_x *= -1.0; + //axis_y *= -1.0; + //axis_z *= -1.0; switch (urdf_joint->type) { @@ -763,6 +763,9 @@ void ColladaWriter::addVisualLink(shared_ptr urdf_link, daeEle node->setSid(node_sid.c_str()); node->setId(node_id.c_str()); link_num++; + + domNodeRef parent_node = node; + { if (urdf_link->parent_joint != NULL) { // x y z w @@ -770,8 +773,25 @@ void ColladaWriter::addVisualLink(shared_ptr urdf_link, daeEle // x y z addTranslate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.position); + if (urdf_link->visual != NULL) { + // + domNodeRef visual_node = daeSafeCast(node->createAndPlace(COLLADA_ELEMENT_NODE)); + string visual_sid("visual"); + string visual_id = node_id + "." + visual_sid; + visual_node->setName("visual"); + visual_node->setSid(visual_sid.c_str()); + visual_node->setId(visual_id.c_str()); + + parent_node = visual_node; + + // x y z w + addRotate(parent_node, urdf_link->visual->origin.rotation); + // x y z + addTranslate(parent_node, urdf_link->visual->origin.position); + } + // x y z angle - domRotateRef joint_rotate = addRotate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.rotation); + domRotateRef joint_rotate = addRotate(parent_node, urdf_link->parent_joint->parent_to_joint_origin_transform.rotation); string joint_sid = joint_sids_[urdf_link->parent_joint->name]; string joint_rotate_sid = string("node_") + joint_sid + string("_axis0"); joint_rotate->setSid(joint_rotate_sid.c_str()); @@ -782,7 +802,7 @@ void ColladaWriter::addVisualLink(shared_ptr urdf_link, daeEle // map::const_iterator i = geometry_ids_.find(urdf_link->name); if (i != geometry_ids_.end()) { - domInstance_geometryRef instance_geometry = daeSafeCast(node->createAndPlace(COLLADA_ELEMENT_INSTANCE_GEOMETRY)); + domInstance_geometryRef instance_geometry = daeSafeCast(parent_node->createAndPlace(COLLADA_ELEMENT_INSTANCE_GEOMETRY)); string geometry_id = i->second; string instance_geometry_url = string("#") + geometry_id; instance_geometry->setUrl(instance_geometry_url.c_str()); From c8db59bef02b3c12f856e3d13c693284283dc70a Mon Sep 17 00:00:00 2001 From: tfield Date: Mon, 17 May 2010 04:26:39 +0000 Subject: [PATCH 176/245] collada_urdf: need to use ros::init for logging to work --- collada_urdf/src/urdf_to_collada.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp index 5eb9d16..6785ebe 100644 --- a/collada_urdf/src/urdf_to_collada.cpp +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -43,6 +43,8 @@ int main(int argc, char** argv) return -1; } + ros::init(argc, argv, "urdf_to_collada"); + std::string input_filename(argv[1]); std::string output_filename(argv[2]); From 01196304b675a12a373e073b761cc2cd574740de Mon Sep 17 00:00:00 2001 From: tfield Date: Mon, 17 May 2010 04:52:20 +0000 Subject: [PATCH 177/245] collada_urdf: trimming collada by not writing null transforms; shifted away from deprecated createAndPlace API; added option to add transform before an existing element --- .../include/collada_urdf/collada_writer.h | 4 +- collada_urdf/src/collada_writer.cpp | 232 ++++++++++-------- 2 files changed, 126 insertions(+), 110 deletions(-) diff --git a/collada_urdf/include/collada_urdf/collada_writer.h b/collada_urdf/include/collada_urdf/collada_writer.h index 6aada98..0c137df 100644 --- a/collada_urdf/include/collada_urdf/collada_writer.h +++ b/collada_urdf/include/collada_urdf/collada_writer.h @@ -110,8 +110,8 @@ private: void addBindings(SCENE const& scene); - domTranslateRef addTranslate(daeElementRef parent, urdf::Vector3 const& position); - domRotateRef addRotate(daeElementRef parent, urdf::Rotation const& r); + domTranslateRef addTranslate(daeElementRef parent, urdf::Vector3 const& position, daeElementRef before = NULL, bool ignore_zero_translations = false); + domRotateRef addRotate(daeElementRef parent, urdf::Rotation const& r, daeElementRef before = NULL, bool ignore_zero_rotations = false); std::string getTimeStampString() const; diff --git a/collada_urdf/src/collada_writer.cpp b/collada_urdf/src/collada_writer.cpp index 72c2013..9b8aa1f 100644 --- a/collada_urdf/src/collada_writer.cpp +++ b/collada_urdf/src/collada_writer.cpp @@ -106,45 +106,45 @@ void ColladaWriter::initDocument(string const& documentName) { dom_->setAttribute("xmlns:math", "http://www.w3.org/1998/Math/MathML"); // Create asset elements - domAssetRef asset = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_ASSET)); + domAssetRef asset = daeSafeCast(dom_->add(COLLADA_ELEMENT_ASSET)); { string date = getTimeStampString(); - domAsset::domCreatedRef created = daeSafeCast(asset->createAndPlace(COLLADA_ELEMENT_CREATED)); + domAsset::domCreatedRef created = daeSafeCast(asset->add(COLLADA_ELEMENT_CREATED)); created->setValue(date.c_str()); - domAsset::domModifiedRef modified = daeSafeCast(asset->createAndPlace(COLLADA_ELEMENT_MODIFIED)); + domAsset::domModifiedRef modified = daeSafeCast(asset->add(COLLADA_ELEMENT_MODIFIED)); modified->setValue(date.c_str()); - domAsset::domContributorRef contrib = daeSafeCast(asset->createAndPlace(COLLADA_TYPE_CONTRIBUTOR)); + domAsset::domContributorRef contrib = daeSafeCast(asset->add(COLLADA_ELEMENT_CONTRIBUTOR)); - domAsset::domContributor::domAuthoring_toolRef authoringtool = daeSafeCast(contrib->createAndPlace(COLLADA_ELEMENT_AUTHORING_TOOL)); + domAsset::domContributor::domAuthoring_toolRef authoringtool = daeSafeCast(contrib->add(COLLADA_ELEMENT_AUTHORING_TOOL)); authoringtool->setValue("URDF Collada Writer"); - domAsset::domUnitRef units = daeSafeCast(asset->createAndPlace(COLLADA_ELEMENT_UNIT)); + domAsset::domUnitRef units = daeSafeCast(asset->add(COLLADA_ELEMENT_UNIT)); units->setMeter(1); units->setName("meter"); - domAsset::domUp_axisRef zup = daeSafeCast(asset->createAndPlace(COLLADA_ELEMENT_UP_AXIS)); + domAsset::domUp_axisRef zup = daeSafeCast(asset->add(COLLADA_ELEMENT_UP_AXIS)); zup->setValue(UP_AXIS_Z_UP); } // Create top-level elements - scene_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_SCENE)); - visualScenesLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_VISUAL_SCENES)); + scene_ = daeSafeCast(dom_->add(COLLADA_ELEMENT_SCENE)); + visualScenesLib_ = daeSafeCast(dom_->add(COLLADA_ELEMENT_LIBRARY_VISUAL_SCENES)); visualScenesLib_->setId("vscenes"); - geometriesLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_GEOMETRIES)); + geometriesLib_ = daeSafeCast(dom_->add(COLLADA_ELEMENT_LIBRARY_GEOMETRIES)); geometriesLib_->setId("geometries"); - kinematicsScenesLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_KINEMATICS_SCENES)); + kinematicsScenesLib_ = daeSafeCast(dom_->add(COLLADA_ELEMENT_LIBRARY_KINEMATICS_SCENES)); kinematicsScenesLib_->setId("kscenes"); - kinematicsModelsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_KINEMATICS_MODELS)); + kinematicsModelsLib_ = daeSafeCast(dom_->add(COLLADA_ELEMENT_LIBRARY_KINEMATICS_MODELS)); kinematicsModelsLib_->setId("kmodels"); - jointsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_JOINTS)); + jointsLib_ = daeSafeCast(dom_->add(COLLADA_ELEMENT_LIBRARY_JOINTS)); jointsLib_->setId("joints"); - physicsScenesLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_PHYSICS_SCENES)); + physicsScenesLib_ = daeSafeCast(dom_->add(COLLADA_ELEMENT_LIBRARY_PHYSICS_SCENES)); physicsScenesLib_->setId("physics_scenes"); - effectsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_EFFECTS)); + effectsLib_ = daeSafeCast(dom_->add(COLLADA_ELEMENT_LIBRARY_EFFECTS)); effectsLib_->setId("effects"); - materialsLib_ = daeSafeCast(dom_->createAndPlace(COLLADA_ELEMENT_LIBRARY_MATERIALS)); + materialsLib_ = daeSafeCast(dom_->add(COLLADA_ELEMENT_LIBRARY_MATERIALS)); materialsLib_->setId("materials"); } @@ -152,30 +152,30 @@ ColladaWriter::SCENE ColladaWriter::createScene() { SCENE s; // Create visual scene - s.vscene = daeSafeCast(visualScenesLib_->createAndPlace(COLLADA_ELEMENT_VISUAL_SCENE)); + s.vscene = daeSafeCast(visualScenesLib_->add(COLLADA_ELEMENT_VISUAL_SCENE)); s.vscene->setId("vscene"); s.vscene->setName("URDF Visual Scene"); // Create instance visual scene - s.viscene = daeSafeCast(scene_->createAndPlace(COLLADA_ELEMENT_INSTANCE_VISUAL_SCENE)); + s.viscene = daeSafeCast(scene_->add(COLLADA_ELEMENT_INSTANCE_VISUAL_SCENE)); s.viscene->setUrl((string("#") + string(s.vscene->getID())).c_str()); // Create kinematics scene - s.kscene = daeSafeCast(kinematicsScenesLib_->createAndPlace(COLLADA_ELEMENT_KINEMATICS_SCENE)); + s.kscene = daeSafeCast(kinematicsScenesLib_->add(COLLADA_ELEMENT_KINEMATICS_SCENE)); s.kscene->setId("kscene"); s.kscene->setName("URDF Kinematics Scene"); // Create instance kinematics scene - s.kiscene = daeSafeCast(scene_->createAndPlace(COLLADA_ELEMENT_INSTANCE_KINEMATICS_SCENE)); + s.kiscene = daeSafeCast(scene_->add(COLLADA_ELEMENT_INSTANCE_KINEMATICS_SCENE)); s.kiscene->setUrl((string("#") + string(s.kscene->getID())).c_str()); // Create physics scene - s.pscene = daeSafeCast(physicsScenesLib_->createAndPlace(COLLADA_ELEMENT_PHYSICS_SCENE)); + s.pscene = daeSafeCast(physicsScenesLib_->add(COLLADA_ELEMENT_PHYSICS_SCENE)); s.pscene->setId("pscene"); s.pscene->setName("URDF Physics Scene"); // Create instance physics scene - s.piscene = daeSafeCast(scene_->createAndPlace(COLLADA_ELEMENT_INSTANCE_PHYSICS_SCENE)); + s.piscene = daeSafeCast(scene_->add(COLLADA_ELEMENT_INSTANCE_PHYSICS_SCENE)); s.piscene->setUrl((string("#") + string(s.pscene->getID())).c_str()); return s; @@ -183,10 +183,10 @@ ColladaWriter::SCENE ColladaWriter::createScene() { void ColladaWriter::setupPhysics(SCENE const& scene) { // - domPhysics_scene::domTechnique_commonRef common = daeSafeCast(scene.pscene->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); + domPhysics_scene::domTechnique_commonRef common = daeSafeCast(scene.pscene->add(COLLADA_ELEMENT_TECHNIQUE_COMMON)); { // 0 0 0 - domTargetable_float3Ref g = daeSafeCast(common->createAndPlace(COLLADA_ELEMENT_GRAVITY)); + domTargetable_float3Ref g = daeSafeCast(common->add(COLLADA_ELEMENT_GRAVITY)); g->getValue().set3(0.0, 0.0, 0.0); // } @@ -210,7 +210,7 @@ void ColladaWriter::addGeometries() { urdf::Vector3 scale = urdf_mesh->scale; // @todo use scale // - domGeometryRef geometry = daeSafeCast(geometriesLib_->createAndPlace(COLLADA_ELEMENT_GEOMETRY)); + domGeometryRef geometry = daeSafeCast(geometriesLib_->add(COLLADA_ELEMENT_GEOMETRY)); string geometry_id = string("g1.link") + boost::lexical_cast(link_num) + string(".geom0"); geometry->setId(geometry_id.c_str()); { @@ -296,18 +296,18 @@ bool ColladaWriter::loadMeshWithSTLLoader(resource_retriever::MemoryResource con void ColladaWriter::buildMeshFromSTLLoader(shared_ptr stl_mesh, daeElementRef parent, string const& geometry_id) { // - domMeshRef mesh = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_MESH)); + domMeshRef mesh = daeSafeCast(parent->add(COLLADA_ELEMENT_MESH)); { unsigned int num_vertices = stl_mesh->vertices.size(); unsigned int num_indices = stl_mesh->indices.size(); unsigned int num_faces = num_indices / 3; // - domSourceRef positions_source = daeSafeCast(mesh->createAndPlace(COLLADA_ELEMENT_SOURCE)); + domSourceRef positions_source = daeSafeCast(mesh->add(COLLADA_ELEMENT_SOURCE)); positions_source->setId((geometry_id + string(".positions")).c_str()); { // - domFloat_arrayRef positions_array = daeSafeCast(positions_source->createAndPlace(COLLADA_ELEMENT_FLOAT_ARRAY)); + domFloat_arrayRef positions_array = daeSafeCast(positions_source->add(COLLADA_ELEMENT_FLOAT_ARRAY)); positions_array->setId((geometry_id + string(".positions-array")).c_str()); positions_array->setCount(num_vertices * 3); positions_array->setDigits(6); // 6 decimal places @@ -320,10 +320,10 @@ void ColladaWriter::buildMeshFromSTLLoader(shared_ptr stl_mesh, daeElement // // - domSource::domTechnique_commonRef source_tech = daeSafeCast(positions_source->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); + domSource::domTechnique_commonRef source_tech = daeSafeCast(positions_source->add(COLLADA_ELEMENT_TECHNIQUE_COMMON)); { // - domAccessorRef accessor = daeSafeCast(source_tech->createAndPlace(COLLADA_ELEMENT_ACCESSOR)); + domAccessorRef accessor = daeSafeCast(source_tech->add(COLLADA_ELEMENT_ACCESSOR)); accessor->setCount(num_vertices / 3); accessor->setSource(xsAnyURI(*positions_array, string("#") + geometry_id + string(".positions-array"))); accessor->setStride(3); @@ -331,9 +331,9 @@ void ColladaWriter::buildMeshFromSTLLoader(shared_ptr stl_mesh, daeElement // // // - domParamRef px = daeSafeCast(accessor->createAndPlace(COLLADA_ELEMENT_PARAM)); px->setName("X"); px->setType("float"); - domParamRef py = daeSafeCast(accessor->createAndPlace(COLLADA_ELEMENT_PARAM)); py->setName("Y"); py->setType("float"); - domParamRef pz = daeSafeCast(accessor->createAndPlace(COLLADA_ELEMENT_PARAM)); pz->setName("Z"); pz->setType("float"); + domParamRef px = daeSafeCast(accessor->add(COLLADA_ELEMENT_PARAM)); px->setName("X"); px->setType("float"); + domParamRef py = daeSafeCast(accessor->add(COLLADA_ELEMENT_PARAM)); py->setName("Y"); py->setType("float"); + domParamRef pz = daeSafeCast(accessor->add(COLLADA_ELEMENT_PARAM)); pz->setName("Z"); pz->setType("float"); } // } @@ -341,30 +341,30 @@ void ColladaWriter::buildMeshFromSTLLoader(shared_ptr stl_mesh, daeElement } // - domVerticesRef vertices = daeSafeCast(mesh->createAndPlace(COLLADA_ELEMENT_VERTICES)); + domVerticesRef vertices = daeSafeCast(mesh->add(COLLADA_ELEMENT_VERTICES)); string vertices_id = geometry_id + string(".vertices"); vertices->setId(vertices_id.c_str()); { // - domInput_localRef vertices_input = daeSafeCast(vertices->createAndPlace(COLLADA_ELEMENT_INPUT)); + domInput_localRef vertices_input = daeSafeCast(vertices->add(COLLADA_ELEMENT_INPUT)); vertices_input->setSemantic("POSITION"); vertices_input->setSource(domUrifragment(*positions_source, string("#") + string(positions_source->getId()))); } // // - domTrianglesRef triangles = daeSafeCast(mesh->createAndPlace(COLLADA_ELEMENT_TRIANGLES)); + domTrianglesRef triangles = daeSafeCast(mesh->add(COLLADA_ELEMENT_TRIANGLES)); triangles->setCount(num_faces); triangles->setMaterial("mat0"); { // - domInput_local_offsetRef vertex_offset = daeSafeCast(triangles->createAndPlace(COLLADA_ELEMENT_INPUT)); + domInput_local_offsetRef vertex_offset = daeSafeCast(triangles->add(COLLADA_ELEMENT_INPUT)); vertex_offset->setSemantic("VERTEX"); vertex_offset->setOffset(0); vertex_offset->setSource(domUrifragment(*positions_source, string("#") + vertices_id)); { //

0 1 2 3 ... - domPRef indices = daeSafeCast(triangles->createAndPlace(COLLADA_ELEMENT_P)); + domPRef indices = daeSafeCast(triangles->add(COLLADA_ELEMENT_P)); indices->getValue().setCount(num_indices); for (unsigned int i = 0; i < num_indices; i++) indices->getValue()[i] = stl_mesh->indices[i]; @@ -382,7 +382,7 @@ void ColladaWriter::addJoints(daeElementRef parent) { shared_ptr urdf_joint = i->second; // - domJointRef joint = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_JOINT)); + domJointRef joint = daeSafeCast(parent->add(COLLADA_ELEMENT_JOINT)); string joint_sid = string("joint") + boost::lexical_cast(joint_num); joint_num++; joint->setName(urdf_joint->name.c_str()); @@ -398,20 +398,15 @@ void ColladaWriter::addJoints(daeElementRef parent) { axis_z = 0.0; } - // @hack: OpenRAVE appears to flip joint axes - //axis_x *= -1.0; - //axis_y *= -1.0; - //axis_z *= -1.0; - switch (urdf_joint->type) { case urdf::Joint::REVOLUTE: { // - domAxis_constraintRef revolute = daeSafeCast(joint->createAndPlace(COLLADA_ELEMENT_REVOLUTE)); + domAxis_constraintRef revolute = daeSafeCast(joint->add(COLLADA_ELEMENT_REVOLUTE)); revolute->setSid("axis0"); { // - domAxisRef axis = daeSafeCast(revolute->createAndPlace(COLLADA_ELEMENT_AXIS)); + domAxisRef axis = daeSafeCast(revolute->add(COLLADA_ELEMENT_AXIS)); { axis->getValue().setCount(3); axis->getValue()[0] = axis_x; @@ -421,10 +416,10 @@ void ColladaWriter::addJoints(daeElementRef parent) { // // - domJoint_limitsRef limits = daeSafeCast(revolute->createAndPlace(COLLADA_TYPE_LIMITS)); + domJoint_limitsRef limits = daeSafeCast(revolute->add(COLLADA_ELEMENT_LIMITS)); { - daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MIN))->getValue() = angles::to_degrees(urdf_joint->limits->lower); - daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MAX))->getValue() = angles::to_degrees(urdf_joint->limits->upper); + daeSafeCast(limits->add(COLLADA_ELEMENT_MIN))->getValue() = angles::to_degrees(urdf_joint->limits->lower); + daeSafeCast(limits->add(COLLADA_ELEMENT_MAX))->getValue() = angles::to_degrees(urdf_joint->limits->upper); } // } @@ -435,11 +430,11 @@ void ColladaWriter::addJoints(daeElementRef parent) { // Model as a REVOLUTE joint without limits // - domAxis_constraintRef revolute = daeSafeCast(joint->createAndPlace(COLLADA_ELEMENT_REVOLUTE)); + domAxis_constraintRef revolute = daeSafeCast(joint->add(COLLADA_ELEMENT_REVOLUTE)); revolute->setSid("axis0"); { // - domAxisRef axis = daeSafeCast(revolute->createAndPlace(COLLADA_ELEMENT_AXIS)); + domAxisRef axis = daeSafeCast(revolute->add(COLLADA_ELEMENT_AXIS)); { axis->getValue().setCount(3); axis->getValue()[0] = axis_x; @@ -453,11 +448,11 @@ void ColladaWriter::addJoints(daeElementRef parent) { } case urdf::Joint::PRISMATIC: { // - domAxis_constraintRef prismatic = daeSafeCast(joint->createAndPlace(COLLADA_ELEMENT_PRISMATIC)); + domAxis_constraintRef prismatic = daeSafeCast(joint->add(COLLADA_ELEMENT_PRISMATIC)); prismatic->setSid("axis0"); { // - domAxisRef axis = daeSafeCast(prismatic->createAndPlace(COLLADA_ELEMENT_AXIS)); + domAxisRef axis = daeSafeCast(prismatic->add(COLLADA_ELEMENT_AXIS)); { axis->getValue().setCount(3); axis->getValue()[0] = axis_x; @@ -467,10 +462,10 @@ void ColladaWriter::addJoints(daeElementRef parent) { // // - domJoint_limitsRef limits = daeSafeCast(prismatic->createAndPlace(COLLADA_TYPE_LIMITS)); + domJoint_limitsRef limits = daeSafeCast(prismatic->add(COLLADA_ELEMENT_LIMITS)); { - daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MIN))->getValue() = urdf_joint->limits->lower; - daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MAX))->getValue() = urdf_joint->limits->upper; + daeSafeCast(limits->add(COLLADA_ELEMENT_MIN))->getValue() = urdf_joint->limits->lower; + daeSafeCast(limits->add(COLLADA_ELEMENT_MAX))->getValue() = urdf_joint->limits->upper; } // } @@ -480,11 +475,11 @@ void ColladaWriter::addJoints(daeElementRef parent) { case urdf::Joint::FIXED: { // Model as a REVOLUTE joint with no leeway - domAxis_constraintRef revolute = daeSafeCast(joint->createAndPlace(COLLADA_ELEMENT_REVOLUTE)); + domAxis_constraintRef revolute = daeSafeCast(joint->add(COLLADA_ELEMENT_REVOLUTE)); revolute->setSid("axis0"); { // - domAxisRef axis = daeSafeCast(revolute->createAndPlace(COLLADA_ELEMENT_AXIS)); + domAxisRef axis = daeSafeCast(revolute->add(COLLADA_ELEMENT_AXIS)); { axis->getValue().setCount(3); axis->getValue()[0] = axis_x; @@ -494,10 +489,10 @@ void ColladaWriter::addJoints(daeElementRef parent) { // // - domJoint_limitsRef limits = daeSafeCast(revolute->createAndPlace(COLLADA_TYPE_LIMITS)); + domJoint_limitsRef limits = daeSafeCast(revolute->add(COLLADA_ELEMENT_LIMITS)); { - daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MIN))->getValue() = 0.0; - daeSafeCast(limits->createAndPlace(COLLADA_ELEMENT_MAX))->getValue() = 0.0; + daeSafeCast(limits->add(COLLADA_ELEMENT_MIN))->getValue() = 0.0; + daeSafeCast(limits->add(COLLADA_ELEMENT_MAX))->getValue() = 0.0; } // } @@ -530,9 +525,9 @@ void ColladaWriter::addBindings(SCENE const& scene) { // // - domBind_kinematics_modelRef kmodel_bind = daeSafeCast(scene.kiscene->createAndPlace(COLLADA_ELEMENT_BIND_KINEMATICS_MODEL)); + domBind_kinematics_modelRef kmodel_bind = daeSafeCast(scene.kiscene->add(COLLADA_ELEMENT_BIND_KINEMATICS_MODEL)); kmodel_bind->setNode("v1.node0"); // @todo - daeSafeCast(kmodel_bind->createAndPlace(COLLADA_ELEMENT_PARAM))->setValue(string(string(scene.kscene->getID()) + string(".") + inst_model_sid).c_str()); + daeSafeCast(kmodel_bind->add(COLLADA_ELEMENT_PARAM))->setValue(string(string(scene.kscene->getID()) + string(".") + inst_model_sid).c_str()); for (map >::const_iterator i = robot_.joints_.begin(); i != robot_.joints_.end(); i++) { shared_ptr urdf_joint = i->second; @@ -544,20 +539,20 @@ void ColladaWriter::addBindings(SCENE const& scene) { string joint_axis_value_sid = joint_axis_sid + string("_value"); // - domBind_joint_axisRef joint_bind = daeSafeCast(scene.kiscene->createAndPlace(COLLADA_ELEMENT_BIND_JOINT_AXIS)); + domBind_joint_axisRef joint_bind = daeSafeCast(scene.kiscene->add(COLLADA_ELEMENT_BIND_JOINT_AXIS)); string node_name = node_ids_[urdf_joint->name]; joint_bind->setTarget((node_name + string("/node_") + joint_sid + string("_") + axis_name).c_str()); { // - domCommon_sidref_or_paramRef axis_bind = daeSafeCast(joint_bind->createAndPlace(COLLADA_ELEMENT_AXIS)); + domCommon_sidref_or_paramRef axis_bind = daeSafeCast(joint_bind->add(COLLADA_ELEMENT_AXIS)); { - daeSafeCast(axis_bind->createAndPlace(COLLADA_TYPE_PARAM))->setValue(joint_axis_sid.c_str()); + daeSafeCast(axis_bind->add(COLLADA_ELEMENT_PARAM))->setValue(joint_axis_sid.c_str()); } // // - domCommon_float_or_paramRef value_bind = daeSafeCast(joint_bind->createAndPlace(COLLADA_ELEMENT_VALUE)); + domCommon_float_or_paramRef value_bind = daeSafeCast(joint_bind->add(COLLADA_ELEMENT_VALUE)); { - daeSafeCast(value_bind->createAndPlace(COLLADA_TYPE_PARAM))->setValue(joint_axis_value_sid.c_str()); + daeSafeCast(value_bind->add(COLLADA_ELEMENT_PARAM))->setValue(joint_axis_value_sid.c_str()); } } // @@ -566,12 +561,12 @@ void ColladaWriter::addBindings(SCENE const& scene) { void ColladaWriter::addKinematics(SCENE const& scene) { // - domKinematics_modelRef kmodel = daeSafeCast(kinematicsModelsLib_->createAndPlace(COLLADA_ELEMENT_KINEMATICS_MODEL)); + domKinematics_modelRef kmodel = daeSafeCast(kinematicsModelsLib_->add(COLLADA_ELEMENT_KINEMATICS_MODEL)); kmodel->setId("k1"); kmodel->setName(robot_.getName().c_str()); { // - domKinematics_model_techniqueRef technique = daeSafeCast(kmodel->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); + domKinematics_model_techniqueRef technique = daeSafeCast(kmodel->add(COLLADA_ELEMENT_TECHNIQUE_COMMON)); addJoints(technique); // @@ -587,18 +582,18 @@ void ColladaWriter::addKinematics(SCENE const& scene) { string inst_model_sid = string("inst_") + model_id; // - domInstance_kinematics_modelRef ikm = daeSafeCast(scene.kscene->createAndPlace(COLLADA_ELEMENT_INSTANCE_KINEMATICS_MODEL)); + domInstance_kinematics_modelRef ikm = daeSafeCast(scene.kscene->add(COLLADA_ELEMENT_INSTANCE_KINEMATICS_MODEL)); ikm->setUrl((string("#") + model_id).c_str()); ikm->setSid(inst_model_sid.c_str()); { // - domKinematics_newparamRef newparam_model = daeSafeCast(ikm->createAndPlace(COLLADA_ELEMENT_NEWPARAM)); + domKinematics_newparamRef newparam_model = daeSafeCast(ikm->add(COLLADA_ELEMENT_NEWPARAM)); string newparam_model_sid = string("kscene.inst_") + model_id; newparam_model->setSid(newparam_model_sid.c_str()); { // kscene/inst_k1 string model_sidref = string("kscene/inst_") + model_id; - daeSafeCast(newparam_model->createAndPlace(COLLADA_ELEMENT_SIDREF))->setValue(model_sidref.c_str()); + daeSafeCast(newparam_model->add(COLLADA_ELEMENT_SIDREF))->setValue(model_sidref.c_str()); } // @@ -612,23 +607,23 @@ void ColladaWriter::addKinematics(SCENE const& scene) { string axis_name = string("axis") + boost::lexical_cast(idof); // - domKinematics_newparamRef newparam = daeSafeCast(ikm->createAndPlace(COLLADA_ELEMENT_NEWPARAM)); + domKinematics_newparamRef newparam = daeSafeCast(ikm->add(COLLADA_ELEMENT_NEWPARAM)); string newparam_sid = string("kscene.inst_") + model_id + string(".") + joint_sid + string(".") + axis_name; newparam->setSid(newparam_sid.c_str()); { // kscene/inst_k1/joint0/axis0 string sidref = string("kscene/inst_") + model_id + string("/") + joint_sid + string("/") + axis_name; - daeSafeCast(newparam->createAndPlace(COLLADA_ELEMENT_SIDREF))->setValue(sidref.c_str()); + daeSafeCast(newparam->add(COLLADA_ELEMENT_SIDREF))->setValue(sidref.c_str()); } // // - domKinematics_newparamRef newparam_value = daeSafeCast(ikm->createAndPlace(COLLADA_ELEMENT_NEWPARAM)); + domKinematics_newparamRef newparam_value = daeSafeCast(ikm->add(COLLADA_ELEMENT_NEWPARAM)); string newparam_value_sid = string("kscene.inst_") + model_id + string(".") + joint_sid + string(".") + axis_name + string("_value"); newparam_value->setSid(newparam_value_sid.c_str()); { // 0 - daeSafeCast(newparam_value->createAndPlace(COLLADA_ELEMENT_FLOAT))->setValue(0.0f); + daeSafeCast(newparam_value->add(COLLADA_ELEMENT_FLOAT))->setValue(0.0f); } // } @@ -638,19 +633,22 @@ void ColladaWriter::addKinematics(SCENE const& scene) { void ColladaWriter::addKinematicLink(shared_ptr urdf_link, daeElementRef parent, int& link_num) { // - domLinkRef link = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_LINK)); + domLinkRef link = daeSafeCast(parent->add(COLLADA_ELEMENT_LINK)); string link_sid = string("link") + boost::lexical_cast(link_num); link->setName(urdf_link->name.c_str()); link->setSid(link_sid.c_str()); link_num++; foreach(shared_ptr urdf_joint, urdf_link->child_joints) { - // - domLink::domAttachment_fullRef attachment_full = daeSafeCast(link->createAndPlace(COLLADA_TYPE_ATTACHMENT_FULL)); + // + domLink::domAttachment_fullRef attachment_full = daeSafeCast(link->add(COLLADA_ELEMENT_ATTACHMENT_FULL)); string attachment_joint = string("k1/") + joint_sids_[urdf_joint->name]; attachment_full->setJoint(attachment_joint.c_str()); { - addRotate(attachment_full, urdf_joint->parent_to_joint_origin_transform.rotation); - addTranslate(attachment_full, urdf_joint->parent_to_joint_origin_transform.position); + // x y z w + addRotate(attachment_full, urdf_joint->parent_to_joint_origin_transform.rotation, NULL, true); + // x y z + addTranslate(attachment_full, urdf_joint->parent_to_joint_origin_transform.position, NULL, true); + addKinematicLink(robot_.getLink(urdf_joint->child_link_name), attachment_full, link_num); } // @@ -660,7 +658,7 @@ void ColladaWriter::addKinematicLink(shared_ptr urdf_link, dae void ColladaWriter::addVisuals(SCENE const& scene) { // - domNodeRef root_node = daeSafeCast(scene.vscene->createAndPlace(COLLADA_ELEMENT_NODE)); + domNodeRef root_node = daeSafeCast(scene.vscene->add(COLLADA_ELEMENT_NODE)); root_node->setId("v1"); root_node->setName(robot_.getName().c_str()); { @@ -686,12 +684,12 @@ void ColladaWriter::addMaterials() { domEffectRef effect = addEffect(geometry_id, ambient, diffuse); // - domMaterialRef material = daeSafeCast(materialsLib_->createAndPlace(COLLADA_ELEMENT_MATERIAL)); + domMaterialRef material = daeSafeCast(materialsLib_->add(COLLADA_ELEMENT_MATERIAL)); string material_id = geometry_id + string(".mat"); material->setId(material_id.c_str()); { // - domInstance_effectRef instance_effect = daeSafeCast(material->createAndPlace(COLLADA_ELEMENT_INSTANCE_EFFECT)); + domInstance_effectRef instance_effect = daeSafeCast(material->add(COLLADA_ELEMENT_INSTANCE_EFFECT)); string effect_id(effect->getId()); instance_effect->setUrl((string("#") + effect_id).c_str()); } @@ -702,24 +700,24 @@ void ColladaWriter::addMaterials() { domEffectRef ColladaWriter::addEffect(string const& geometry_id, urdf::Color const& color_ambient, urdf::Color const& color_diffuse) { // - domEffectRef effect = daeSafeCast(effectsLib_->createAndPlace(COLLADA_ELEMENT_EFFECT)); + domEffectRef effect = daeSafeCast(effectsLib_->add(COLLADA_ELEMENT_EFFECT)); string effect_id = geometry_id + string(".eff"); effect->setId(effect_id.c_str()); { // - domProfile_commonRef profile = daeSafeCast(effect->createAndPlace(COLLADA_ELEMENT_PROFILE_COMMON)); + domProfile_commonRef profile = daeSafeCast(effect->add(COLLADA_ELEMENT_PROFILE_COMMON)); { // - domProfile_common::domTechniqueRef technique = daeSafeCast(profile->createAndPlace(COLLADA_ELEMENT_TECHNIQUE)); + domProfile_common::domTechniqueRef technique = daeSafeCast(profile->add(COLLADA_ELEMENT_TECHNIQUE)); { // - domProfile_common::domTechnique::domPhongRef phong = daeSafeCast(technique->createAndPlace(COLLADA_ELEMENT_PHONG)); + domProfile_common::domTechnique::domPhongRef phong = daeSafeCast(technique->add(COLLADA_ELEMENT_PHONG)); { // - domFx_common_color_or_textureRef ambient = daeSafeCast(phong->createAndPlace(COLLADA_ELEMENT_AMBIENT)); + domFx_common_color_or_textureRef ambient = daeSafeCast(phong->add(COLLADA_ELEMENT_AMBIENT)); { // r g b a - domFx_common_color_or_texture::domColorRef ambient_color = daeSafeCast(ambient->createAndPlace(COLLADA_ELEMENT_COLOR)); + domFx_common_color_or_texture::domColorRef ambient_color = daeSafeCast(ambient->add(COLLADA_ELEMENT_COLOR)); ambient_color->getValue().setCount(4); ambient_color->getValue()[0] = color_ambient.r; ambient_color->getValue()[1] = color_ambient.g; @@ -730,10 +728,10 @@ domEffectRef ColladaWriter::addEffect(string const& geometry_id, urdf::Color con // // - domFx_common_color_or_textureRef diffuse = daeSafeCast(phong->createAndPlace(COLLADA_ELEMENT_DIFFUSE)); + domFx_common_color_or_textureRef diffuse = daeSafeCast(phong->add(COLLADA_ELEMENT_DIFFUSE)); { // r g b a - domFx_common_color_or_texture::domColorRef diffuse_color = daeSafeCast(diffuse->createAndPlace(COLLADA_ELEMENT_COLOR)); + domFx_common_color_or_texture::domColorRef diffuse_color = daeSafeCast(diffuse->add(COLLADA_ELEMENT_COLOR)); diffuse_color->getValue().setCount(4); diffuse_color->getValue()[0] = color_diffuse.r; diffuse_color->getValue()[1] = color_diffuse.g; @@ -756,7 +754,7 @@ domEffectRef ColladaWriter::addEffect(string const& geometry_id, urdf::Color con void ColladaWriter::addVisualLink(shared_ptr urdf_link, daeElementRef parent, int& link_num) { // - domNodeRef node = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_NODE)); + domNodeRef node = daeSafeCast(parent->add(COLLADA_ELEMENT_NODE)); string node_sid = string("node") + boost::lexical_cast(link_num); string node_id = string("v1.") + node_sid; node->setName(urdf_link->name.c_str()); @@ -769,13 +767,13 @@ void ColladaWriter::addVisualLink(shared_ptr urdf_link, daeEle { if (urdf_link->parent_joint != NULL) { // x y z w - addRotate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.rotation); + addRotate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.rotation, NULL, true); // x y z - addTranslate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.position); + addTranslate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.position, NULL, true); if (urdf_link->visual != NULL) { // - domNodeRef visual_node = daeSafeCast(node->createAndPlace(COLLADA_ELEMENT_NODE)); + domNodeRef visual_node = daeSafeCast(node->add(COLLADA_ELEMENT_NODE)); string visual_sid("visual"); string visual_id = node_id + "." + visual_sid; visual_node->setName("visual"); @@ -785,9 +783,9 @@ void ColladaWriter::addVisualLink(shared_ptr urdf_link, daeEle parent_node = visual_node; // x y z w - addRotate(parent_node, urdf_link->visual->origin.rotation); + addRotate(parent_node, urdf_link->visual->origin.rotation, NULL, true); // x y z - addTranslate(parent_node, urdf_link->visual->origin.position); + addTranslate(parent_node, urdf_link->visual->origin.position, NULL, true); } // x y z angle @@ -802,19 +800,19 @@ void ColladaWriter::addVisualLink(shared_ptr urdf_link, daeEle // map::const_iterator i = geometry_ids_.find(urdf_link->name); if (i != geometry_ids_.end()) { - domInstance_geometryRef instance_geometry = daeSafeCast(parent_node->createAndPlace(COLLADA_ELEMENT_INSTANCE_GEOMETRY)); + domInstance_geometryRef instance_geometry = daeSafeCast(parent_node->add(COLLADA_ELEMENT_INSTANCE_GEOMETRY)); string geometry_id = i->second; string instance_geometry_url = string("#") + geometry_id; instance_geometry->setUrl(instance_geometry_url.c_str()); { // - domBind_materialRef bind_material = daeSafeCast(instance_geometry->createAndPlace(COLLADA_ELEMENT_BIND_MATERIAL)); + domBind_materialRef bind_material = daeSafeCast(instance_geometry->add(COLLADA_ELEMENT_BIND_MATERIAL)); { // - domBind_material::domTechnique_commonRef technique_common = daeSafeCast(bind_material->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); + domBind_material::domTechnique_commonRef technique_common = daeSafeCast(bind_material->add(COLLADA_ELEMENT_TECHNIQUE_COMMON)); { // - domInstance_materialRef instance_material = daeSafeCast(technique_common->createAndPlace(COLLADA_ELEMENT_INSTANCE_MATERIAL)); + domInstance_materialRef instance_material = daeSafeCast(technique_common->add(COLLADA_ELEMENT_INSTANCE_MATERIAL)); instance_material->setTarget((instance_geometry_url + string(".mat")).c_str()); instance_material->setSymbol("mat0"); // @@ -834,9 +832,18 @@ void ColladaWriter::addVisualLink(shared_ptr urdf_link, daeEle // } -domTranslateRef ColladaWriter::addTranslate(daeElementRef parent, urdf::Vector3 const& position) { +domTranslateRef ColladaWriter::addTranslate(daeElementRef parent, urdf::Vector3 const& position, daeElementRef before, bool ignore_zero_translations) { + if (ignore_zero_translations && position.x == 0.0 && position.y == 0.0 && position.z == 0.0) + return NULL; + // x y z - domTranslateRef trans = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_TRANSLATE)); + domTranslateRef trans; + if (before) { + trans = daeSafeCast(parent->createElement(COLLADA_ELEMENT_TRANSLATE)); + parent->addBefore(trans, before); + } + else + trans = daeSafeCast(parent->add(COLLADA_ELEMENT_TRANSLATE)); trans->getValue().setCount(3); trans->getValue()[0] = position.x; trans->getValue()[1] = position.y; @@ -844,7 +851,7 @@ domTranslateRef ColladaWriter::addTranslate(daeElementRef parent, urdf::Vector3 return trans; } -domRotateRef ColladaWriter::addRotate(daeElementRef parent, urdf::Rotation const& r) { +domRotateRef ColladaWriter::addRotate(daeElementRef parent, urdf::Rotation const& r, daeElementRef before, bool ignore_zero_rotations) { double ax, ay, az, aa; // Convert from quaternion to axis-angle @@ -858,7 +865,10 @@ domRotateRef ColladaWriter::addRotate(daeElementRef parent, urdf::Rotation const az = r.z * inv_len; } else { - // Angle is 0 (mod 2*pi), so any axis will do + if (ignore_zero_rotations) + return NULL; + + // Angle is 0 (mod 2*pi), so no need to add rotate node aa = 0.0; ax = 1.0; ay = 0.0; @@ -866,7 +876,13 @@ domRotateRef ColladaWriter::addRotate(daeElementRef parent, urdf::Rotation const } // x y z w - domRotateRef rot = daeSafeCast(parent->createAndPlace(COLLADA_ELEMENT_ROTATE)); + domRotateRef rot; + if (before) { + rot = daeSafeCast(parent->createElement(COLLADA_ELEMENT_ROTATE)); + parent->addBefore(rot, before); + } + else + rot = daeSafeCast(parent->add(COLLADA_ELEMENT_ROTATE)); rot->getValue().setCount(4); rot->getValue()[0] = ax; rot->getValue()[1] = ay; From 2ac03e3094b3cc7e0578edcd21c89b9e3107a855 Mon Sep 17 00:00:00 2001 From: gerkey Date: Wed, 19 May 2010 20:26:42 +0000 Subject: [PATCH 178/245] Added Ubuntu platform tags to manifest --- assimp/manifest.xml | 3 +++ collada_urdf/manifest.xml | 3 +++ colladadom/manifest.xml | 3 +++ convex_decomposition/manifest.xml | 3 +++ ivcon/manifest.xml | 3 +++ kdl_parser/manifest.xml | 3 +++ resource_retriever/manifest.xml | 3 +++ robot_state_publisher/manifest.xml | 3 +++ urdf/manifest.xml | 3 +++ 9 files changed, 27 insertions(+) diff --git a/assimp/manifest.xml b/assimp/manifest.xml index 31154bf..368c952 100644 --- a/assimp/manifest.xml +++ b/assimp/manifest.xml @@ -19,4 +19,7 @@ + + + diff --git a/collada_urdf/manifest.xml b/collada_urdf/manifest.xml index 8594903..1507da3 100644 --- a/collada_urdf/manifest.xml +++ b/collada_urdf/manifest.xml @@ -13,4 +13,7 @@ + + + diff --git a/colladadom/manifest.xml b/colladadom/manifest.xml index 24c3de7..c730aba 100644 --- a/colladadom/manifest.xml +++ b/colladadom/manifest.xml @@ -14,4 +14,7 @@ + + + diff --git a/convex_decomposition/manifest.xml b/convex_decomposition/manifest.xml index 97580c9..075eca9 100644 --- a/convex_decomposition/manifest.xml +++ b/convex_decomposition/manifest.xml @@ -23,4 +23,7 @@ appears to be no available revision control. http://www.amillionpixels.us/ConvexDecomposition.zip + + + diff --git a/ivcon/manifest.xml b/ivcon/manifest.xml index c9cf53c..172cf82 100644 --- a/ivcon/manifest.xml +++ b/ivcon/manifest.xml @@ -17,4 +17,7 @@ are no local modifications to this package. + + + diff --git a/kdl_parser/manifest.xml b/kdl_parser/manifest.xml index 6c6c552..afa6bc9 100644 --- a/kdl_parser/manifest.xml +++ b/kdl_parser/manifest.xml @@ -18,6 +18,9 @@ + + + diff --git a/resource_retriever/manifest.xml b/resource_retriever/manifest.xml index da64e13..5ab0755 100644 --- a/resource_retriever/manifest.xml +++ b/resource_retriever/manifest.xml @@ -21,6 +21,9 @@ + + + diff --git a/robot_state_publisher/manifest.xml b/robot_state_publisher/manifest.xml index 83f1e2d..69aed7e 100644 --- a/robot_state_publisher/manifest.xml +++ b/robot_state_publisher/manifest.xml @@ -26,6 +26,9 @@ + + + diff --git a/urdf/manifest.xml b/urdf/manifest.xml index 87ecdd8..f0ad062 100644 --- a/urdf/manifest.xml +++ b/urdf/manifest.xml @@ -17,6 +17,9 @@ + + + From 1afc96d0c596a5e9bd6cbb74048c499d785eea69 Mon Sep 17 00:00:00 2001 From: rdiankov Date: Thu, 20 May 2010 04:08:54 +0000 Subject: [PATCH 179/245] collada writer now exports mimic joints through formulas --- .../include/collada_urdf/collada_writer.h | 2 +- collada_urdf/src/collada_writer.cpp | 41 +++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/collada_urdf/include/collada_urdf/collada_writer.h b/collada_urdf/include/collada_urdf/collada_writer.h index 0c137df..c9c8297 100644 --- a/collada_urdf/include/collada_urdf/collada_writer.h +++ b/collada_urdf/include/collada_urdf/collada_writer.h @@ -112,7 +112,7 @@ private: domTranslateRef addTranslate(daeElementRef parent, urdf::Vector3 const& position, daeElementRef before = NULL, bool ignore_zero_translations = false); domRotateRef addRotate(daeElementRef parent, urdf::Rotation const& r, daeElementRef before = NULL, bool ignore_zero_rotations = false); - + void addMimicJoint(domFormulaRef formula, const std::string& joint_sid,const std::string& joint_mimic_sid, double multiplier, double offset); std::string getTimeStampString() const; private: diff --git a/collada_urdf/src/collada_writer.cpp b/collada_urdf/src/collada_writer.cpp index 9b8aa1f..b734a24 100644 --- a/collada_urdf/src/collada_writer.cpp +++ b/collada_urdf/src/collada_writer.cpp @@ -574,6 +574,18 @@ void ColladaWriter::addKinematics(SCENE const& scene) { int link_num = 0; addKinematicLink(robot_.getRoot(), technique, link_num); // + + // add a formula for each mimic joint + for (map >::const_iterator i = robot_.joints_.begin(); i != robot_.joints_.end(); i++) { + shared_ptr urdf_joint = i->second; + if( !!urdf_joint->mimic ) { + string joint_sid = string("k1/")+joint_sids_[urdf_joint->name]; + string joint_mimic_sid = string("k1/")+joint_sids_[urdf_joint->mimic->joint_name]; + // + addMimicJoint(daeSafeCast(technique->add(COLLADA_ELEMENT_FORMULA)), joint_sid,joint_mimic_sid,urdf_joint->mimic->multiplier,urdf_joint->mimic->offset); + // + } + } } kmodel_ = kmodel; // @@ -892,6 +904,35 @@ domRotateRef ColladaWriter::addRotate(daeElementRef parent, urdf::Rotation const return rot; } + void ColladaWriter::addMimicJoint(domFormulaRef formula, const std::string& joint_sid,const std::string& joint_mimic_sid, double multiplier, double offset) +{ + string sid = joint_sid+string(".formula"); + formula->setSid(sid.c_str()); + + domCommon_float_or_paramRef ptarget = daeSafeCast(formula->createAndPlace(COLLADA_ELEMENT_TARGET)); + daeSafeCast(ptarget->createAndPlace(COLLADA_TYPE_PARAM))->setValue(joint_sid.c_str()); + + domFormula_techniqueRef pftec = daeSafeCast(formula->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); + + // a x b + daeElementRef pmath_math = pftec->createAndPlace("math"); + daeElementRef pmath_apply = pmath_math->createAndPlace("apply"); + { + daeElementRef pmath_plus = pmath_apply->createAndPlace("plus"); + daeElementRef pmath_apply1 = pmath_apply->createAndPlace("apply"); + { + daeElementRef pmath_times = pmath_apply1->createAndPlace("times"); + daeElementRef pmath_const0 = pmath_apply1->createAndPlace("cn"); + pmath_const0->setCharData(boost::lexical_cast(multiplier)); + daeElementRef pmath_symb = pmath_apply1->createAndPlace("csymbol"); + pmath_symb->setAttribute("encoding","COLLADA"); + pmath_symb->setCharData(joint_mimic_sid); + } + daeElementRef pmath_const1 = pmath_apply->createAndPlace("cn"); + pmath_const1->setCharData(boost::lexical_cast(offset)); + } +} + string ColladaWriter::getTimeStampString() const { // facet becomes owned by locale, so no need to explicitly delete boost::posix_time::time_facet* facet = new boost::posix_time::time_facet("%Y-%m-%dT%H:%M:%s"); From 9223320aa47b0055bd5f21f7952e8c1a10251142 Mon Sep 17 00:00:00 2001 From: jfaust Date: Fri, 21 May 2010 18:37:26 +0000 Subject: [PATCH 180/245] Upgrade version to 1.1.700 --- assimp/Makefile | 22 ++------- assimp/assimp.patch | 106 ++++++++++++++++++++++---------------------- 2 files changed, 57 insertions(+), 71 deletions(-) diff --git a/assimp/Makefile b/assimp/Makefile index c635316..4702f19 100644 --- a/assimp/Makefile +++ b/assimp/Makefile @@ -1,44 +1,30 @@ all: installed -REVISION=258 PACKAGE_NAME=`rospack find assimp` # Regular download -TARBALL_NAME = assimp-r$(REVISION) +TARBALL_NAME = assimp-1.1.700 TARBALL = build/$(TARBALL_NAME).tar.gz TARBALL_URL = http://pr.willowgarage.com/downloads/$(TARBALL_NAME).tar.gz TARBALL_PATCH = assimp.patch UNPACK_CMD = tar xzf -SOURCE_DIR = build/assimp_svn +SOURCE_DIR = build/$(TARBALL_NAME) include $(shell rospack find mk)/download_unpack_build.mk -# SVN checkout (only for package maintainers) -SVN_DIR = $(SOURCE_DIR) -#build/assimp_svn -SVN_REVISION = -r $(REVISION) -SVN_URL = https://assimp.svn.sourceforge.net/svnroot/assimp/trunk -include $(shell rospack find mk)/svn_checkout.mk - ASSIMP_DIR = $(shell rospack find assimp) BOOST_INCLUDE_DIRS = $(shell rosboost-cfg --include_dirs) BOOST_LIBRARY_DIRS = $(shell rosboost-cfg --lib_dirs signals,thread) BOOST_LIBRARIES = $(shell rosboost-cfg --lflags signals,thread) -CMAKE_ARGS = -D CMAKE_INSTALL_PREFIX=$(PACKAGE_NAME) \ +CMAKE_ARGS = -DCMAKE_INSTALL_PREFIX=$(PACKAGE_NAME) \ -D CMAKE_BUILD_TYPE=RelWithDebInfo \ -D boost_include_dirs=$(BOOST_INCLUDE_DIRS) \ -D boost_library_dirs=$(BOOST_LIBRARY_DIRS) \ -D boost_libraries="$(BOOST_LIBRARIES)" -# Build tarball (only for package maintainers) -build_tarball: $(SVN_DIR) - -cd $(SVN_DIR)/build && make clean - -cd $(SVN_DIR) && rm -rf build - cd build && tar --exclude="test" --exclude="workspaces" --exclude="tools" --exclude="scripts" --exclude="samples" --exclude="port" --exclude="obj" --exclude="bin" --exclude=".svn" -czf ../$(TARBALL) assimp_svn - installed: $(SOURCE_DIR)/unpacked cd $(SOURCE_DIR) && mkdir -p build && cd build && cmake $(CMAKE_ARGS) .. && export PARALLEL_JOBS=ROS_PARALLEL_JOBS && make $(ROS_PARALLEL_JOBS) && make install mkdir -p $(PACKAGE_NAME)/include/assimp cp -r $(SOURCE_DIR)/include/* $(PACKAGE_NAME)/include/assimp/ - #touch installed + touch installed clean: -cd $(SVN_DIR)/build && make clean diff --git a/assimp/assimp.patch b/assimp/assimp.patch index 346edd7..48fd01b 100644 --- a/assimp/assimp.patch +++ b/assimp/assimp.patch @@ -1,61 +1,61 @@ -Index: code/CMakeLists.txt -=================================================================== ---- code/CMakeLists.txt (revision 526) -+++ code/CMakeLists.txt (working copy) -@@ -1,6 +1,16 @@ - - SET( HEADER_PATH ../include/ ) - -+message(status " debug: ${boost_include_dirs}" ) -+INCLUDE_DIRECTORIES( -+ include -+ ${boost_include_dirs} -+) -+ -+LINK_DIRECTORIES( -+ ${boost_library_dirs} -+) -+ - SOURCE_GROUP( Logging FILES - ${HEADER_PATH}/DefaultLogger.h - ${HEADER_PATH}/IOStream.h -@@ -583,6 +593,10 @@ - ) - ADD_DEFINITIONS(-DASSIMP_BUILD_DLL_EXPORT) - -+TARGET_LINK_LIBRARIES( assimp ${boost_libraries}) -+ -+INSTALL (TARGETS assimp DESTINATION ${CMAKE_INSTALL_PREFIX}/lib) -+ - if (WIN32) - if ( MSVC80 ) - ADD_DEFINITIONS( -D_SCL_SECURE_NO_WARNINGS ) -Index: CMakeLists.txt -=================================================================== ---- CMakeLists.txt (revision 526) -+++ CMakeLists.txt (working copy) -@@ -1,13 +1,24 @@ - cmake_minimum_required( VERSION 2.6 ) - PROJECT( AssetImporter ) +--- CMakeLists.txt.old 2010-05-21 11:08:29.598051070 -0700 ++++ CMakeLists.txt 2010-05-21 11:19:28.595500290 -0700 +@@ -20,6 +20,21 @@ SET( INCLUDE_INSTALL_DIR "${CMAKE_INSTAL + SET( BIN_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH + "Path the tool executables are installed to." ) +SET (boost_include_dirs "" CACHE STRING "Boost include paths. Use this to override automatic detection.") +SET (boost_library_dirs "" CACHE STRING "Boost library paths. Use this to override automatic detection.") +SET (boost_libraries "" CACHE STRING "Boost libraries. Use this to override automatic detection.") + -+message(status " debug: ${boost_include_dirs}" ) + - SET( CMAKE_CURRENT_SOURCE_DIR ${CMAKE_HOME_DIRECTORY}/code ) - SET( CMAKE_CURRENT_BINARY_DIR ${CMAKE_HOME_DIRECTORY}/bin ) - - INCLUDE_DIRECTORIES( - include -+ ${boost_include_dirs} - ) - -+LINK_DIRECTORIES( -+ ${boost_library_dirs} ++message(status " debug: ${boost_include_dirs} ${boost_libraries}" ) ++INCLUDE_DIRECTORIES( ++ include ++ ${boost_include_dirs} +) + - SET( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_HOME_DIRECTORY}/lib ) - SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_HOME_DIRECTORY}/bin ) - ++LINK_DIRECTORIES( ++ ${boost_library_dirs} ++) ++ + # Libs + ADD_SUBDIRECTORY( code/ ) + IF ( WIN32 ) +--- code/CMakeLists.txt.old 2010-05-21 11:25:22.057223769 -0700 ++++ code/CMakeLists.txt 2010-05-21 11:25:47.295533481 -0700 +@@ -1,25 +1,6 @@ + SET( LIBRARY_VERSION "1.0.0" ) + SET( LIBRARY_SOVERSION "1" ) + +-IF ( ENABLE_BOOST_WORKAROUND ) +- INCLUDE_DIRECTORIES( BoostWorkaround ) +- ADD_DEFINITIONS( -DASSIMP_BUILD_BOOST_WORKAROUND ) +- MESSAGE( STATUS "Building a non-boost version of Assimp." ) +-ELSE ( ENABLE_BOOST_WORKAROUND ) +- FIND_PACKAGE( Boost 1.35 ) +- +- IF ( NOT Boost_FOUND ) +- MESSAGE( FATAL_ERROR +- "Boost libraries (http://www.boost.org/) not found. " +- "You can build a non-boost version of Assimp with slightly reduced " +- "functionality by specifying -DENABLE_BOOST_WORKAROUND=ON." +- ) +- ENDIF ( NOT Boost_FOUND ) +- +- INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIRS} ) +-ENDIF ( ENABLE_BOOST_WORKAROUND ) +- +- + # + # Listing and grouping of all the source files for use with IDE project + # generators. +@@ -691,6 +672,8 @@ ADD_LIBRARY( assimp SHARED + ${COMPILER_HEADERS} + ) + ++TARGET_LINK_LIBRARIES( assimp ${boost_libraries}) ++ + ADD_DEFINITIONS( -DASSIMP_BUILD_DLL_EXPORT ) + + if ( WIN32 ) From 3f5af78096fa2fb51caa5b855dd4110f3a4129e7 Mon Sep 17 00:00:00 2001 From: hsu Date: Mon, 24 May 2010 23:46:35 +0000 Subject: [PATCH 181/245] #4116, switch so translate first then rotate --- collada_urdf/src/collada_writer.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/collada_urdf/src/collada_writer.cpp b/collada_urdf/src/collada_writer.cpp index b734a24..f34b9ea 100644 --- a/collada_urdf/src/collada_writer.cpp +++ b/collada_urdf/src/collada_writer.cpp @@ -656,10 +656,10 @@ void ColladaWriter::addKinematicLink(shared_ptr urdf_link, dae string attachment_joint = string("k1/") + joint_sids_[urdf_joint->name]; attachment_full->setJoint(attachment_joint.c_str()); { - // x y z w - addRotate(attachment_full, urdf_joint->parent_to_joint_origin_transform.rotation, NULL, true); // x y z addTranslate(attachment_full, urdf_joint->parent_to_joint_origin_transform.position, NULL, true); + // x y z w + addRotate(attachment_full, urdf_joint->parent_to_joint_origin_transform.rotation, NULL, true); addKinematicLink(robot_.getLink(urdf_joint->child_link_name), attachment_full, link_num); } @@ -778,10 +778,10 @@ void ColladaWriter::addVisualLink(shared_ptr urdf_link, daeEle { if (urdf_link->parent_joint != NULL) { - // x y z w - addRotate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.rotation, NULL, true); // x y z addTranslate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.position, NULL, true); + // x y z w + addRotate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.rotation, NULL, true); if (urdf_link->visual != NULL) { // @@ -794,10 +794,10 @@ void ColladaWriter::addVisualLink(shared_ptr urdf_link, daeEle parent_node = visual_node; - // x y z w - addRotate(parent_node, urdf_link->visual->origin.rotation, NULL, true); // x y z addTranslate(parent_node, urdf_link->visual->origin.position, NULL, true); + // x y z w + addRotate(parent_node, urdf_link->visual->origin.rotation, NULL, true); } // x y z angle From 2602c7fc70d3e5b4b6ff08d299799d2b078b9de7 Mon Sep 17 00:00:00 2001 From: wim Date: Fri, 4 Jun 2010 00:40:33 +0000 Subject: [PATCH 182/245] getting ready for 1.1.4 release --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6484240..6a755b5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,4 +16,4 @@ set(ROSPACK_MAKEDIST true) # variables. #list(APPEND CPACK_SOURCE_IGNORE_FILES /core/experimental) -rosbuild_make_distribution(1.1.3) +rosbuild_make_distribution(1.1.4) From 95eba4fbf4913a7f4fbcff676cc5a8e04d40835c Mon Sep 17 00:00:00 2001 From: wim Date: Tue, 22 Jun 2010 17:27:04 +0000 Subject: [PATCH 183/245] also print tree status when only one link in tree --- urdf/src/check_urdf.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/urdf/src/check_urdf.cpp b/urdf/src/check_urdf.cpp index 7712060..6f37716 100644 --- a/urdf/src/check_urdf.cpp +++ b/urdf/src/check_urdf.cpp @@ -90,8 +90,7 @@ int main(int argc, char** argv) boost::shared_ptr root_link=robot.getRoot(); if (!root_link) return -1; - if (!root_link->child_links.empty()) - std::cout << "root Link: " << root_link->name << " has " << root_link->child_links.size() << " child(ren)" << std::endl; + std::cout << "root Link: " << root_link->name << " has " << root_link->child_links.size() << " child(ren)" << std::endl; // print entire tree From d99805a47c33afce54ebb7c5a2df1e622758d092 Mon Sep 17 00:00:00 2001 From: wim Date: Tue, 22 Jun 2010 19:18:08 +0000 Subject: [PATCH 184/245] Deprecate parsing of joints that are not attached to any links. This is not supported by the URDF spec, but the parser used to allow this. #4448 --- urdf/src/model.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/urdf/src/model.cpp b/urdf/src/model.cpp index dd5a56d..03fefcd 100644 --- a/urdf/src/model.cpp +++ b/urdf/src/model.cpp @@ -263,7 +263,6 @@ bool Model::initTree(std::map &parent_link_tree) std::string child_link_name = joint->second->child_link_name; ROS_DEBUG("build tree: joint: '%s' has parent link '%s' and child link '%s'", joint->first.c_str(), parent_link_name.c_str(),child_link_name.c_str()); - if (parent_link_name.empty() && !child_link_name.empty()) { ROS_ERROR(" Joint %s specifies child link but not parent link.",(joint->second)->name.c_str()); @@ -276,7 +275,7 @@ bool Model::initTree(std::map &parent_link_tree) } else if (parent_link_name.empty() && child_link_name.empty()) { - ROS_DEBUG(" Joint %s specifies no parent link and no child link. This is an abstract joint.",(joint->second)->name.c_str()); + ROS_WARN(" Joint %s specifies no parent link and no child link. The Boxturtle urdf parser had a bug that allowed this type of joints, but this is not a valid joint according to the URDF spec.",(joint->second)->name.c_str()); } else { @@ -329,7 +328,6 @@ bool Model::initRoot(std::map &parent_link_tree) this->root_link_.reset(); - // for (std::map::iterator p=parent_link_tree.begin(); p!=parent_link_tree.end(); p++) // find the links that have no parent in the tree for (std::map >::iterator l=this->links_.begin(); l!=this->links_.end(); l++) { From 6c67fc7b04216636545710985bd18034e93b3412 Mon Sep 17 00:00:00 2001 From: wim Date: Tue, 22 Jun 2010 19:37:26 +0000 Subject: [PATCH 185/245] Fix bug that allowed parent links of a joint to be automatically added, #4198 --- urdf/src/model.cpp | 9 +- urdf/test/pr2_desc.urdf | 6504 +++++++++++++++++++-------------------- 2 files changed, 3218 insertions(+), 3295 deletions(-) diff --git a/urdf/src/model.cpp b/urdf/src/model.cpp index 03fefcd..7ad9b45 100644 --- a/urdf/src/model.cpp +++ b/urdf/src/model.cpp @@ -290,13 +290,8 @@ bool Model::initTree(std::map &parent_link_tree) this->getLink(parent_link_name, parent_link); if (!parent_link) { - ROS_DEBUG(" parent link '%s' of joint '%s' not found. Automatically adding it. This must be the root link", - parent_link_name.c_str(), joint->first.c_str() ); - - parent_link.reset(new Link); - parent_link->name = parent_link_name; - this->links_.insert(make_pair(parent_link->name, parent_link)); - ROS_DEBUG(" successfully added new link '%s'", parent_link->name.c_str()); + ROS_ERROR(" parent link '%s' of joint '%s' not found. The Boxturtle urdf parser used to automatically add this link for you, but this is not valid according to the URDF spec. Every link you refer to from a joint needs to be explicitly defined in the robot description. To fix this problem you can either remove this joint from your urdf file, or add \"\" to your urdf file.", parent_link_name.c_str(), joint->first.c_str(), parent_link_name.c_str() ); + return false; } //set parent link for child link diff --git a/urdf/test/pr2_desc.urdf b/urdf/test/pr2_desc.urdf index a1e15b8..07308a0 100644 --- a/urdf/test/pr2_desc.urdf +++ b/urdf/test/pr2_desc.urdf @@ -1,26 +1,19 @@ - - + + + + + + - - - - - - - - - - - @@ -28,46 +21,52 @@ 1000.0 - - + true 1.0 5 - + power_state 10.0 - 87.78 + 87.78 -474 525 15.52 16.41 - + - + + - + + - + + - + + - + + - + + - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 - 640 - 1 - - 0.0 0.0 0.0 - false - - -80 - 80 - - 0.05 - 10.0 - 0.01 - 20.0 - - 0.005 - true - 20.0 - base_scan - base_laser_link - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -79.2380952381 - - - - true - - base_link_geom - 100.0 - - true - 100.0 - base_bumper - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 + 640 + 1 + 0.0 0.0 0.0 + false + -129.998394137 + 129.998394137 + 0.05 + 10.0 + 0.01 + 20 + + 0.005 + true + 20 + base_scan + base_laser_link + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + true + + base_link_geom + 100.0 + true 100.0 - base_link - base_pose_ground_truth - 0.01 - map - 25.7 25.7 0 - 0 0 0 - - - - + base_bumper + + + + + + + + true + 100.0 + base_link + base_pose_ground_truth + 0.01 + map + 25.7 25.7 0 + + 0 0 0 + + + base_footprint + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - torso_lift_link_geom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + torso_lift_link_geom + 100.0 + + true 100.0 - - true - 100.0 - torso_lift_bumper - - - - - - - - -52143.33 - - + torso_lift_bumper + + + + + + + + + -52143.33 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + 100.0 + imu_link + torso_lift_imu/data + 2.89e-08 + 0 0 0 + 0 0 0 + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + R8G8B8 2448 2050 @@ -898,2551 +993,2384 @@ true 20.0 - /prosilica/cam_info - /prosilica/image - /prosilica/image_rect - /prosilica/cam_info_service - /prosilica/poll - hight_def_optical_frame + /prosilica/image_raw + /prosilica/camera_info + /prosilica/request_image + high_def_frame 1224.5 1224.5 1025.5 - 2955 - 0 - 0 - 0 - 0 - 0 + 2955 + + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 480 - B8G8R8 - 90.0 - 0.1 - 100 - 25.0 - - true - 25.0 - wide_stereo/left/image_raw - wide_stereo/left/camera_info - wide_stereo_optical_frame - 0.0 - 320.5 - 320.5 - 240.5 - - - 320.0 - 0 - 0 - 0 - 0 - 0 - - - - true - PR2/Blue - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 480 - B8G8R8 - 90.0 - 0.1 - 100 - 25.0 - - true - 25.0 - wide_stereo/right/image_raw - wide_stereo/right/camera_info - wide_stereo_optical_frame - 0.09 - 320.5 - 320.5 - 240.5 - - - 320.0 - 0 - 0 - 0 - 0 - 0 - - - - true - PR2/Blue - - true - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + BAYER_BGGR8 + 90 + 0.1 + 100 + 25.0 + true - 20.0 - wide_stereo_l_stereo_camera_sensor - wide_stereo_r_stereo_camera_sensor - wide_stereo/raw_stereo + 25.0 + wide_stereo/left/image_raw + wide_stereo/left/camera_info wide_stereo_optical_frame + 0 320.5 320.5 240.5 - 320.0 - 0 - 0 - 0 - 0 - 0 - -0.09 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 480 - L8 - 45.0 - 0.1 - 100 - 25.0 - - true - 25.0 - narrow_stereo/left/image_raw - narrow_stereo/left/camera_info - narrow_stereo_optical_frame - 0.0 - 320.5 - 320.5 - 240.5 - - - 772.55 - 0 - 0 - 0 - 0 - 0 - - - - true - PR2/Blue - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 480 - L8 - 45.0 - 0.1 - 100 - 25.0 - - true - 25.0 - narrow_stereo/right/image_raw - narrow_stereo/right/camera_info - narrow_stereo_optical_frame - 0.09 - 320.5 - 320.5 - 240.5 - - - 772.55 - 0 - 0 - 0 - 0 - 0 - - - - true - PR2/Blue - - true - - - - - - + 320 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + + + + true + PR2/Blue + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + BAYER_BGGR8 + 90 + 0.1 + 100 + 25.0 + true - 20.0 - narrow_stereo_l_stereo_camera_sensor - narrow_stereo_r_stereo_camera_sensor - narrow_stereo/raw_stereo + 25.0 + wide_stereo/right/image_raw + wide_stereo/right/camera_info + wide_stereo_optical_frame + 0.09 + 320.5 + 320.5 + 240.5 + + + 320 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + + + + true + PR2/Blue + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 45 + 0.1 + 100 + 25.0 + + true + 25.0 + narrow_stereo/left/image_raw + narrow_stereo/left/camera_info narrow_stereo_optical_frame + 0 320.5 320.5 240.5 772.55 - 0 - 0 - 0 - 0 - 0 - -0.09 - - - - - - - - + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + + + + true + PR2/Blue + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 45 + 0.1 + 100 + 25.0 + + true + 25.0 + narrow_stereo/right/image_raw + narrow_stereo/right/camera_info + narrow_stereo_optical_frame + 0.09 + 320.5 + 320.5 + 240.5 + + + 772.55 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + + + + true + PR2/Blue + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 - 640 - 1 - - 0.0 0.0 0.0 - false - - -80 - 80 - - 0.05 - 10.0 - 0.01 - 40.0 - - 0.005 - true - 40.0 - tilt_scan - laser_tilt_link - - - - - - - - - -6.05 - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 + 640 + 1 + 0.0 0.0 0.0 + false + -79.9999999086 + 79.9999999086 + 0.05 + 10.0 + 0.01 + 40 + + 0.005 + true + 40 + tilt_scan + laser_tilt_link + + + + + + + + + + + -6.05 + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - r_shoulder_pan_link_geom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + 32.6525111499 + + + + r_shoulder_pan_link_geom + 100.0 + + true 100.0 - - true - 100.0 - r_shoulder_pan_bumper - - - - - true - - - - - - r_shoulder_lift_link_geom + r_shoulder_pan_bumper + + + + + true + + + + + + + + r_shoulder_lift_link_geom + 100.0 + + true 100.0 - - true - 100.0 - r_r_shoulder_lift_bumper - - - - true - - - - - - true - - - - - - - - 63.16 - - - - 61.89 - - - - 32.65 - + r_r_shoulder_lift_bumper + + + + true + + + + + + + + + 63.1552452977 + + + + + 61.8948225713 + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - r_upper_arm_link_geom + + + + + + + + r_upper_arm_link_geom + + 100.0 + + true 100.0 - - true - 100.0 - r_upper_arm_bumper - - - - true - - - -1.0 - - - r_elbow_flex_link_geom + r_upper_arm_bumper + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + -90.5142857143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -1.0 + + + + r_elbow_flex_link_geom + 100.0 + + true 100.0 - - true - 100.0 - r_elbow_flex_bumper - - - - - true - - - - - - true - - - - - - -36.17 - - - - 90.5142857143 - + r_elbow_flex_bumper + + + + + true + + + + + + + + + -36.167452007 + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - true - - r_forearm_link_geom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + r_forearm_link_geom + 100.0 + + true 100.0 - - true - 100.0 - r_forearm_bumper - - - - - - true - - r_wrist_flex_link_geom + r_forearm_bumper + + + + + + true + + r_wrist_flex_link_geom + 100.0 + + true 100.0 - - true - 100.0 - r_wrist_flex_bumper - - - - - - - - - true - - r_wrist_roll_link_geom + r_wrist_flex_bumper + + + + + + + + + + + true + + r_wrist_roll_link_geom + 100.0 + + true 100.0 - - true - 100.0 - r_wrist_roll_bumper - - - - - - - - - - - - - + r_wrist_roll_bumper + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - +--> + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - r_gripper_l_finger_link_geom - 100.0 - - true - 100.0 - r_gripper_l_finger_bumper - - - - - - - - - - - - - - - - true - - r_gripper_r_finger_link_geom - 100.0 - - true - 100.0 - r_gripper_r_finger_bumper - - - - - - - - - - - - - - - true - false - - r_gripper_l_finger_tip_link_geom - 100.0 - - true - 100.0 - r_gripper_l_finger_tip_bumper - - - - - - - - - - - - - - - true - false - - r_gripper_r_finger_tip_link_geom - 100.0 - - true - 100.0 - r_gripper_r_finger_tip_bumper - - - - - - - - - - +--> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + r_gripper_l_finger_link_geom + 100.0 + true 100.0 - r_gripper_l_finger_link - r_gripper_l_finger_pose_ground_truth - 0.0 - map - - - + r_gripper_l_finger_bumper + + + + + + + + + + + + + + + + + + true + + r_gripper_r_finger_link_geom + 100.0 + true 100.0 - r_gripper_l_finger_link - r_gripper_l_finger_force_ground_truth - r_gripper_l_finger_link - - - - - - - - - - - - - true - - r_gripper_palm_link_geom - 100.0 - - true - 100.0 - r_gripper_palm_bumper - - - - - - true - - - - - true - 0.01 - 0.0001 - 0 - 0 - 0.0001 - 0 - 0.0001 - 0 - 0 - 0 - 0.82025 0.188 0.790675 - 0 -0 0 - - 0 0 0 - 0 -0 0 - 0.0 0.0 0.0 - - 0 0 0 - 0 -0 0 - 0.0 0.0 0.0 - unit_box - PR2/White - - - true - false - - - r_gripper_float_link - r_gripper_palm_link - r_gripper_float_link - 1 0 0 - -0.05 - 0.001 - - - r_gripper_l_finger_tip_link - r_gripper_float_link - r_gripper_l_finger_tip_link - 0 1 0 - 0 0 0 - - - r_gripper_r_finger_tip_link - r_gripper_float_link - r_gripper_r_finger_tip_link - 0 1 0 - 0 0 0 - - - - + r_gripper_r_finger_bumper + + + + + + + + + + + + + + + + + true + false + + r_gripper_l_finger_tip_link_geom + 100.0 + true 100.0 - r_gripper_palm_link - r_gripper_palm_pose_ground_truth - 0 0 0 - 0 0 0 - 0.0 - map - - - + r_gripper_l_finger_tip_bumper + + + + + + + + + + + + + + + + + true + false + + r_gripper_r_finger_tip_link_geom + 100.0 + true 100.0 - r_gripper_tool_frame - r_gripper_tool_frame_pose_ground_truth - 0 0 0 - 0 0 0 - 0.0 - /map - - - - true - - - - - - - - - - + r_gripper_r_finger_tip_bumper + + + + + + + + + + + + true + 100.0 + r_gripper_l_finger_link + r_gripper_l_finger_pose_ground_truth + 0.0 + base_link + + + + true + 100.0 + r_gripper_l_finger_link + r_gripper_l_finger_force_ground_truth + r_gripper_l_finger_link + + + + + + + + + + + + r_gripper_r_parallel_link + r_gripper_r_finger_tip_link + r_gripper_r_finger_tip_link + 0 0 1 + -0.018 -0.021 0 + + + r_gripper_l_parallel_link + r_gripper_l_finger_tip_link + r_gripper_l_finger_tip_link + 0 0 1 + -0.018 0.021 0 + + + r_gripper_l_finger_tip_link + r_gripper_r_finger_tip_link + r_gripper_r_finger_tip_link + 0 1 0 + + + + true + + + + true + + + + + + + + + + true + + r_gripper_palm_link_geom + 100.0 + + true + 100.0 + r_gripper_palm_bumper + + + + + + + + true + 100.0 + r_gripper_palm_link + r_gripper_palm_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + map + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - l_shoulder_pan_link_geom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + 32.6525111499 + + + + l_shoulder_pan_link_geom + 100.0 + + true 100.0 - - true - 100.0 - l_shoulder_pan_bumper - - - - - true - - - - - - l_shoulder_lift_link_geom + l_shoulder_pan_bumper + + + + + true + + + + + + + + l_shoulder_lift_link_geom + 100.0 + + true 100.0 - - true - 100.0 - l_r_shoulder_lift_bumper - - - - true - - - - - - true - - - - - - - - 63.16 - - - - 61.89 - - - - 32.65 - + l_r_shoulder_lift_bumper + + + + true + + + + + + + + + 63.1552452977 + + + + + 61.8948225713 + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - l_upper_arm_link_geom + + + + + + + + l_upper_arm_link_geom + + 100.0 + + true 100.0 - - true - 100.0 - l_upper_arm_bumper - - - - true - - - -1.0 - - - l_elbow_flex_link_geom + l_upper_arm_bumper + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + -90.5142857143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -1.0 + + + + l_elbow_flex_link_geom + 100.0 + + true 100.0 - - true - 100.0 - l_elbow_flex_bumper - - - - - true - - - - - - true - - - - - - -36.17 - - - - 90.5142857143 - + l_elbow_flex_bumper + + + + + true + + + + + + + + + -36.167452007 + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - true - - l_forearm_link_geom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + l_forearm_link_geom + 100.0 + + true 100.0 - - true - 100.0 - l_forearm_bumper - - - - - - true - - l_wrist_flex_link_geom + l_forearm_bumper + + + + + + true + + l_wrist_flex_link_geom + 100.0 + + true 100.0 - - true - 100.0 - l_wrist_flex_bumper - - - - - - - - - true - - l_wrist_roll_link_geom + l_wrist_flex_bumper + + + + + + + + + + + true + + l_wrist_roll_link_geom + 100.0 + + true 100.0 - - true - 100.0 - l_wrist_roll_bumper - - - - - - - - - - - - - + l_wrist_roll_bumper + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - +--> + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - l_gripper_l_finger_link_geom - 100.0 - - true - 100.0 - l_gripper_l_finger_bumper - - - - - - - - - - - - - - - - true - - l_gripper_r_finger_link_geom - 100.0 - - true - 100.0 - l_gripper_r_finger_bumper - - - - - - - - - - - - - - - true - false - - l_gripper_l_finger_tip_link_geom - 100.0 - - true - 100.0 - l_gripper_l_finger_tip_bumper - - - - - - - - - - - - - - - true - false - - l_gripper_r_finger_tip_link_geom - 100.0 - - true - 100.0 - l_gripper_r_finger_tip_bumper - - - - - - - - - - +--> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + l_gripper_l_finger_link_geom + 100.0 + true 100.0 - l_gripper_l_finger_link - l_gripper_l_finger_pose_ground_truth - 0.0 - map - - - + l_gripper_l_finger_bumper + + + + + + + + + + + + + + + + + + true + + l_gripper_r_finger_link_geom + 100.0 + true 100.0 - l_gripper_l_finger_link - l_gripper_l_finger_force_ground_truth - l_gripper_l_finger_link - - - - - - - - - - - - - true - - l_gripper_palm_link_geom - 100.0 - - true - 100.0 - l_gripper_palm_bumper - - - - - - true - - - - - true - 0.01 - 0.0001 - 0 - 0 - 0.0001 - 0 - 0.0001 - 0 - 0 - 0 - 0.82025 0.188 0.790675 - 0 -0 0 - - 0 0 0 - 0 -0 0 - 0.0 0.0 0.0 - - 0 0 0 - 0 -0 0 - 0.0 0.0 0.0 - unit_box - PR2/White - - - true - false - - - l_gripper_float_link - l_gripper_palm_link - l_gripper_float_link - 1 0 0 - -0.05 - 0.001 - - - l_gripper_l_finger_tip_link - l_gripper_float_link - l_gripper_l_finger_tip_link - 0 1 0 - 0 0 0 - - - l_gripper_r_finger_tip_link - l_gripper_float_link - l_gripper_r_finger_tip_link - 0 1 0 - 0 0 0 - - - - + l_gripper_r_finger_bumper + + + + + + + + + + + + + + + + + true + false + + l_gripper_l_finger_tip_link_geom + 100.0 + true 100.0 - l_gripper_palm_link - l_gripper_palm_pose_ground_truth - 0 0 0 - 0 0 0 - 0.0 - map - - - + l_gripper_l_finger_tip_bumper + + + + + + + + + + + + + + + + + true + false + + l_gripper_r_finger_tip_link_geom + 100.0 + true 100.0 - l_gripper_tool_frame - l_gripper_tool_frame_pose_ground_truth - 0 0 0 - 0 0 0 - 0.0 - /map - - - - true - - - - - - - - - - - + l_gripper_r_finger_tip_bumper + + + + + + + + + + + + true + 100.0 + l_gripper_l_finger_link + l_gripper_l_finger_pose_ground_truth + 0.0 + base_link + + + + true + 100.0 + l_gripper_l_finger_link + l_gripper_l_finger_force_ground_truth + l_gripper_l_finger_link + + + + + + + + + + + + l_gripper_r_parallel_link + l_gripper_r_finger_tip_link + l_gripper_r_finger_tip_link + 0 0 1 + -0.018 -0.021 0 + + + l_gripper_l_parallel_link + l_gripper_l_finger_tip_link + l_gripper_l_finger_tip_link + 0 0 1 + -0.018 0.021 0 + + + l_gripper_l_finger_tip_link + l_gripper_r_finger_tip_link + l_gripper_r_finger_tip_link + 0 1 0 + + + + true + + + + true + + + + + + + + + + true + + l_gripper_palm_link_geom + 100.0 + + true + 100.0 + l_gripper_palm_bumper + + + + + + + + true + 100.0 + l_gripper_palm_link + l_gripper_palm_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + map + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 480 - L8 - 90.0 - 0.1 - 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 90 + 0.1 + 100 + 25.0 + + true 25.0 - - true - 25.0 - l_forearm_cam/image_raw - l_forearm_cam/camera_info - l_forearm_cam_frame - 0.0 - 320.5 - 320.5 - 240.5 - - - 320.0 - 0 - 0 - 0 - 0 - 0 - - - - true - PR2/Blue - - true - + l_forearm_cam/image_raw + l_forearm_cam/camera_info + l_forearm_cam_optical_frame + 0 + 320.5 + 320.5 + 240.5 + + + 320 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + + + + true + PR2/Blue + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 480 - L8 - 90.0 - 0.1 - 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 90 + 0.1 + 100 + 25.0 + + true 25.0 - - true - 25.0 - r_forearm_cam/image_raw - r_forearm_cam/camera_info - r_forearm_cam_frame - 0.0 - 320.5 - 320.5 - 240.5 - - - 320.0 - 0 - 0 - 0 - 0 - 0 - - - - true - PR2/Blue - - true - - + r_forearm_cam/image_raw + r_forearm_cam/camera_info + r_forearm_cam_optical_frame + 0 + 320.5 + 320.5 + 240.5 + + + 320 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + + + + true + PR2/Blue + From 2ee00304a3d677aca659408af51d4c180806e537 Mon Sep 17 00:00:00 2001 From: wim Date: Tue, 22 Jun 2010 21:42:35 +0000 Subject: [PATCH 186/245] Default axis field is (1,0,0) and not (0,0,0) --- urdf/src/joint.cpp | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/urdf/src/joint.cpp b/urdf/src/joint.cpp index 637da37..87ad46e 100644 --- a/urdf/src/joint.cpp +++ b/urdf/src/joint.cpp @@ -471,26 +471,24 @@ bool Joint::initXml(TiXmlElement* config) } // Get Joint Axis - if (this->type != FLOATING) + if (this->type != FLOATING && this->type != FIXED) { // axis TiXmlElement *axis_xml = config->FirstChildElement("axis"); - if (axis_xml) - { - if (!axis_xml->Attribute("xyz")) - ROS_INFO("no xyz attribute for axis element for Joint link '%s', using default values", this->name.c_str()); - else - { + if (!axis_xml){ + ROS_DEBUG("no axis elemement for Joint link '%s', defaulting to (1,0,0) axis", this->name.c_str()); + this->axis = Vector3(1.0, 0.0, 0.0); + } + else{ + if (!axis_xml->Attribute("xyz")){ + ROS_ERROR("no xyz attribute for axis element for Joint link '%s'", this->name.c_str()); + } + else { if (!this->axis.init(axis_xml->Attribute("xyz"))) { - if (this->type == PLANAR) - ROS_DEBUG("PLANAR Joint '%s' will require an axis tag in the future which indicates the surface normal of the plane.", this->name.c_str()); - else - { - ROS_ERROR("Malformed axis element for joint '%s'", this->name.c_str()); - this->axis.clear(); - return false; - } + ROS_ERROR("Malformed axis element for joint '%s'", this->name.c_str()); + this->axis.clear(); + return false; } } } From e63fd96b55b45404ef54280afefda750068f0ed1 Mon Sep 17 00:00:00 2001 From: wim Date: Tue, 22 Jun 2010 21:48:07 +0000 Subject: [PATCH 187/245] Add regression tests for cases with 1, 2 links in urdf, with and without fixed joints. Fix bug where 2-link urdf is not accepted #4042 #4185 --- robot_state_publisher/CMakeLists.txt | 13 +- .../src/joint_state_listener.cpp | 2 +- .../src/robot_state_publisher.cpp | 2 +- .../src/treefksolverposfull_recursive.cpp | 6 +- robot_state_publisher/test/one_link.urdf | 3 + robot_state_publisher/test/pr2.urdf | 6519 ++++++++--------- robot_state_publisher/test/test_publisher.cpp | 24 +- .../test/test_two_links_fixed_joint.cpp | 120 + .../test/test_two_links_fixed_joint.launch | 6 + .../test/test_two_links_moving_joint.cpp | 122 + .../test/test_two_links_moving_joint.launch | 6 + .../test/two_links_fixed_joint.urdf | 10 + .../test/two_links_moving_joint.urdf | 10 + 13 files changed, 3556 insertions(+), 3287 deletions(-) create mode 100644 robot_state_publisher/test/one_link.urdf create mode 100644 robot_state_publisher/test/test_two_links_fixed_joint.cpp create mode 100644 robot_state_publisher/test/test_two_links_fixed_joint.launch create mode 100644 robot_state_publisher/test/test_two_links_moving_joint.cpp create mode 100644 robot_state_publisher/test/test_two_links_moving_joint.launch create mode 100644 robot_state_publisher/test/two_links_fixed_joint.urdf create mode 100644 robot_state_publisher/test/two_links_moving_joint.urdf diff --git a/robot_state_publisher/CMakeLists.txt b/robot_state_publisher/CMakeLists.txt index b3220fe..0dc2111 100644 --- a/robot_state_publisher/CMakeLists.txt +++ b/robot_state_publisher/CMakeLists.txt @@ -31,8 +31,19 @@ rosbuild_add_executable(test_publisher test/test_publisher.cpp ) target_link_libraries(test_publisher ${PROJECT_NAME}) rosbuild_add_gtest_build_flags(test_publisher) rosbuild_declare_test(test_publisher) - rosbuild_add_rostest(${CMAKE_CURRENT_SOURCE_DIR}/test/test_publisher.launch) +rosbuild_add_executable(test_two_links_fixed_joint test/test_two_links_fixed_joint.cpp ) +target_link_libraries(test_two_links_fixed_joint ${PROJECT_NAME}) +rosbuild_add_gtest_build_flags(test_two_links_fixed_joint) +rosbuild_declare_test(test_two_links_fixed_joint) +rosbuild_add_rostest(${CMAKE_CURRENT_SOURCE_DIR}/test/test_two_links_fixed_joint.launch) + +rosbuild_add_executable(test_two_links_moving_joint test/test_two_links_moving_joint.cpp ) +target_link_libraries(test_two_links_moving_joint ${PROJECT_NAME}) +rosbuild_add_gtest_build_flags(test_two_links_moving_joint) +rosbuild_declare_test(test_two_links_moving_joint) +rosbuild_add_rostest(${CMAKE_CURRENT_SOURCE_DIR}/test/test_two_links_moving_joint.launch) + # Download needed data file rosbuild_download_test_data(http://pr.willowgarage.com/data/robot_state_publisher/joint_states_indexed.bag test/joint_states_indexed.bag 793e0b566ebe4698265a936b92fa2bba) diff --git a/robot_state_publisher/src/joint_state_listener.cpp b/robot_state_publisher/src/joint_state_listener.cpp index 268117b..69df07a 100644 --- a/robot_state_publisher/src/joint_state_listener.cpp +++ b/robot_state_publisher/src/joint_state_listener.cpp @@ -64,7 +64,7 @@ JointStateListener::~JointStateListener() void JointStateListener::callbackJointState(const JointStateConstPtr& state) { - if (state->get_name_size() != state->get_position_size()){ + if (state->name.size() != state->position.size()){ ROS_ERROR("Robot state publisher received an invalid joint state vector"); return; } diff --git a/robot_state_publisher/src/robot_state_publisher.cpp b/robot_state_publisher/src/robot_state_publisher.cpp index 221fe2e..ffb0405 100644 --- a/robot_state_publisher/src/robot_state_publisher.cpp +++ b/robot_state_publisher/src/robot_state_publisher.cpp @@ -68,7 +68,7 @@ bool RobotStatePublisher::publishTransforms(const map& joint_pos // calculate transforms form root to every segment in tree map link_poses; solver_->JntToCart(joint_positions, link_poses); - if (link_poses.size() < 2){ + if (link_poses.empty()){ ROS_ERROR("Could not compute link poses. The tree or the state is invalid."); return false; } diff --git a/robot_state_publisher/src/treefksolverposfull_recursive.cpp b/robot_state_publisher/src/treefksolverposfull_recursive.cpp index 7fdf560..fd6fcd3 100644 --- a/robot_state_publisher/src/treefksolverposfull_recursive.cpp +++ b/robot_state_publisher/src/treefksolverposfull_recursive.cpp @@ -54,7 +54,7 @@ void TreeFkSolverPosFull_recursive::addFrameToMap(const map& q_i const Frame& previous_frame, const SegmentMap::const_iterator this_segment) { // get pose of this segment - Frame this_frame = previous_frame; + Frame this_frame; double jnt_p = 0; if (this_segment->second.segment.getJoint().getType() != Joint::None){ map::const_iterator jnt_pos = q_in.find(this_segment->second.segment.getJoint().getName()); @@ -64,7 +64,9 @@ void TreeFkSolverPosFull_recursive::addFrameToMap(const map& q_i } jnt_p = jnt_pos->second; } - this_frame = this_frame * this_segment->second.segment.pose(jnt_p); + this_frame = previous_frame * this_segment->second.segment.pose(jnt_p); + double r, p, y; + this_frame.M.GetRPY(r, p, y); if (this_segment->first != tree.getRootSegment()->first) p_out.insert(make_pair(this_segment->first, this_frame)); diff --git a/robot_state_publisher/test/one_link.urdf b/robot_state_publisher/test/one_link.urdf new file mode 100644 index 0000000..be21ee1 --- /dev/null +++ b/robot_state_publisher/test/one_link.urdf @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/robot_state_publisher/test/pr2.urdf b/robot_state_publisher/test/pr2.urdf index 81f8d79..07308a0 100644 --- a/robot_state_publisher/test/pr2.urdf +++ b/robot_state_publisher/test/pr2.urdf @@ -1,1032 +1,988 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - + true 1000.0 - - - - - - true - 1000.0 - - - - - + + + true 1.0 5 - -10.0 - 1.0 - 10.0 - 1200000.0 - diagnostic - battery_state - self_test - - - - - true - 1000.0 - - + + power_state + 10.0 + 87.78 + -474 + 525 + 15.52 + 16.41 + - + - + + - + + - + + - + + - + + - - - - - + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -75.0676691729 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - fl_caster_l_wheel_link_geom - 100.0 - - true - 100.0 - fl_caster_l_wheel_bumper - - - - - - - - - - - - 75.0676691729 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - fl_caster_r_wheel_link_geom - 100.0 - - true - 100.0 - fl_caster_r_wheel_bumper - - - - - - - - - - - - -75.0676691729 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -75.0676691729 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - fr_caster_l_wheel_link_geom - 100.0 - - true - 100.0 - fr_caster_l_wheel_bumper - - - - - - - - - - - - 75.0676691729 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - fr_caster_r_wheel_link_geom - 100.0 - - true - 100.0 - fr_caster_r_wheel_bumper - - - - - - - - - - - - -75.0676691729 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -75.0676691729 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bl_caster_l_wheel_link_geom - 100.0 - - true - 100.0 - bl_caster_l_wheel_bumper - - - - - - - - - - - - 75.0676691729 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bl_caster_r_wheel_link_geom - 100.0 - - true - 100.0 - bl_caster_r_wheel_bumper - - - - - - - - - - - - -75.0676691729 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -75.0676691729 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - br_caster_l_wheel_link_geom - 100.0 - - true - 100.0 - br_caster_l_wheel_bumper - - - - - - - - - - - - 75.0676691729 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - br_caster_r_wheel_link_geom - 100.0 - - true - 100.0 - br_caster_r_wheel_bumper - - - - - - - - - - - - -75.0676691729 - - - - base_link_geom - 100.0 - - true - 100.0 - base_bumper - - - - - - - - - - base_link - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 + 640 + 1 + 0.0 0.0 0.0 + false + -129.998394137 + 129.998394137 + 0.05 + 10.0 + 0.01 + 20 + + 0.005 + true + 20 + base_scan + base_laser_link + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + true + + base_link_geom + 100.0 + true 100.0 - base_link - base_pose_ground_truth - 0.01 - map - 25.7 25.7 0 - 0 0 0 - - - - true - 100.0 - plug_holder - plug_holder_pose_ground_truth - 0.01 - map - 0 0 0 - 0 0 0 - - - - - 640 - 640 - 1 - 0.0 0.0 0.0 - false - - -135 - 135 - - 0.05 - 10.0 - 0.01 - 20.0 - - 0.005 - true - 20.0 - base_scan - base_laser_link - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + base_bumper + + + + + + + + true + 100.0 + base_link + base_pose_ground_truth + 0.01 + map + 25.7 25.7 0 + + 0 0 0 + + + base_footprint + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - torso_lift_link_geom - 100.0 - - true - 100.0 - torso_lift_bumper - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + torso_lift_link_geom + 100.0 + true 100.0 - torso_lift_link - imu_data - 0.01 - map - 0 0 0 - 0 0 0 - - - - - - -52143.33 - - + torso_lift_bumper + + + + + + + + + -52143.33 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + 100.0 + imu_link + torso_lift_imu/data + 2.89e-08 + 0 0 0 + 0 0 0 + + + + numerical values that were specified in common.xacro which was included above --> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + R8G8B8 2448 2050 @@ -1034,2344 +990,2387 @@ 0.1 100 20.0 - + true 20.0 - prosilica/cam_info - prosilica/image - prosilica/image_rect - prosilica/cam_info_service - prosilica/poll - hight_def_optical_frame + /prosilica/image_raw + /prosilica/camera_info + /prosilica/request_image + high_def_frame 1224.5 1224.5 1025.5 - 2955 - 0 - 0 - 0 - 0 - 0 + 2955 + + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 480 - L8 - 90 - 0.1 - 100 - 20.0 - - true - 20.0 - wide_stereo/left_image - wide_stereo_l_stereo_camera_frame - - - - - - - 640 480 - L8 - 90 - 0.1 - 100 - 20.0 - - true - 20.0 - wide_stereo/right_image - wide_stereo_r_stereo_camera_frame - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + BAYER_BGGR8 + 90 + 0.1 + 100 + 25.0 + true - 20.0 - wide_stereo_l_sensor - wide_stereo_r_sensor - wide_stereo/raw_stereo + 25.0 + wide_stereo/left/image_raw + wide_stereo/left/camera_info wide_stereo_optical_frame - 320 - 320 - 240 - 320 - 0 - 0 - 0 - 0 - 0 - -0.09 - - - - - - - - - 640 480 - L8 - 45 - 0.1 - 100 - 20.0 - - true - 20.0 - narrow_stereo/left_image - narrow_stereo_l_stereo_camera_frame - - - - - - - 640 480 - L8 - 45 - 0.1 - 100 - 20.0 - - true - 20.0 - narrow_stereo/right_image - narrow_stereo_r_stereo_camera_frame - - - - - - + 0 + 320.5 + 320.5 + 240.5 + + + 320 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + + + + true + PR2/Blue + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + BAYER_BGGR8 + 90 + 0.1 + 100 + 25.0 + true - 20.0 - narrow_stereo_l_sensor - narrow_stereo_r_sensor - narrow_stereo/raw_stereo + 25.0 + wide_stereo/right/image_raw + wide_stereo/right/camera_info + wide_stereo_optical_frame + 0.09 + 320.5 + 320.5 + 240.5 + + + 320 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + + + + true + PR2/Blue + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 45 + 0.1 + 100 + 25.0 + + true + 25.0 + narrow_stereo/left/image_raw + narrow_stereo/left/camera_info narrow_stereo_optical_frame - 320 - 320 - 240 - 772.55 - 0 - 0 - 0 - 0 - 0 - -0.09 - - - - - - + 0 + 320.5 + 320.5 + 240.5 + + + 772.55 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + + + + true + PR2/Blue + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 45 + 0.1 + 100 + 25.0 + + true + 25.0 + narrow_stereo/right/image_raw + narrow_stereo/right/camera_info + narrow_stereo_optical_frame + 0.09 + 320.5 + 320.5 + 240.5 + + + 772.55 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + + + + true + PR2/Blue + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 - 640 - 1 - - 0.0 0.0 0.0 - false - - -80 - 80 - - 0.05 - 10.0 - 0.01 - 40.0 - - 0.005 - true - 40.0 - tilt_scan - laser_tilt_link - - - - - - - 6.0 - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 + 640 + 1 + 0.0 0.0 0.0 + false + -79.9999999086 + 79.9999999086 + 0.05 + 10.0 + 0.01 + 40 + + 0.005 + true + 40 + tilt_scan + laser_tilt_link + + + + + + + + + + + -6.05 + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - r_shoulder_pan_link_geom + + + + + + + + true + + + + + + + + + + 32.6525111499 + + + + r_shoulder_pan_link_geom + 100.0 + + true 100.0 - - true - 100.0 - r_shoulder_pan_bumper - - - - - true - - - - - - r_shoulder_lift_link_geom + r_shoulder_pan_bumper + + + + + true + + + + + + + + r_shoulder_lift_link_geom + 100.0 + + true 100.0 - - true - 100.0 - r_r_shoulder_lift_bumper - - - - true - - - - - - true - - - - - - - r_upper_arm_link_geom + r_r_shoulder_lift_bumper + + + + true + + + + + + + + + 63.1552452977 + + + + + 61.8948225713 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + r_upper_arm_link_geom + + 100.0 + + true 100.0 - - true - 100.0 - r_upper_arm_bumper - - - - true - - - - r_elbow_flex_link_geom + r_upper_arm_bumper + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + -90.5142857143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -1.0 + + + + r_elbow_flex_link_geom + 100.0 + + true 100.0 - - true - 100.0 - r_elbow_flex_bumper - - - - - true - - - - - - true - - - - true - - r_forearm_link_geom + r_elbow_flex_bumper + + + + + true + + + + + + + + + -36.167452007 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + r_forearm_link_geom + 100.0 + + true 100.0 - - true - 100.0 - r_forearm_bumper - - - - - - true - - r_wrist_flex_link_geom + r_forearm_bumper + + + + + + true + + r_wrist_flex_link_geom + 100.0 + + true 100.0 - - true - 100.0 - r_wrist_flex_bumper - - - - - - - - - true - - r_wrist_roll_link_geom + r_wrist_flex_bumper + + + + + + + + + + + true + + r_wrist_roll_link_geom + 100.0 + + true 100.0 - - true - 100.0 - r_wrist_roll_bumper - - - - - - - - - - 63.16 - - - - 61.89 - - - - 32.65 - - - - -36.17 - - - - 90.5142857143 - - - - - - + r_wrist_roll_bumper + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - +--> + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - r_gripper_l_finger_link_geom - 100.0 - - true - 100.0 - r_gripper_l_finger_bumper - - - - - - - - - - - - - - - - true - - r_gripper_r_finger_link_geom - 100.0 - - true - 100.0 - r_gripper_r_finger_bumper - - - - - - - - - - - - - - - true - - - r_gripper_l_finger_tip_link_geom - 100.0 - - true - 100.0 - r_gripper_l_finger_tip_bumper - - - - - - - - - - - - - - - true - - - r_gripper_r_finger_tip_link_geom - 100.0 - - true - 100.0 - r_gripper_r_finger_tip_bumper - - - - - - - - - - +--> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + r_gripper_l_finger_link_geom + 100.0 + true 100.0 - r_gripper_l_finger_link - r_gripper_l_finger_pose_ground_truth - 0.0 - map - - - + r_gripper_l_finger_bumper + + + + + + + + + + + + + + + + + + true + + r_gripper_r_finger_link_geom + 100.0 + true 100.0 - r_gripper_l_finger_link - r_gripper_l_finger_force_ground_truth - r_gripper_l_finger_link - - - - - - - - - - - - - true - - r_gripper_palm_link_geom - 100.0 - - true - 100.0 - r_gripper_palm_bumper - - - - - - true - - - - r_gripper_l_finger_tip_link - r_gripper_float_link - r_gripper_l_finger_tip_link - 0 1 0 - 0 0 0 - - - r_gripper_r_finger_tip_link - r_gripper_float_link - r_gripper_r_finger_tip_link - 0 1 0 - 0 0 0 - - - - + r_gripper_r_finger_bumper + + + + + + + + + + + + + + + + + true + false + + r_gripper_l_finger_tip_link_geom + 100.0 + true 100.0 - r_gripper_palm_link - r_gripper_palm_pose_ground_truth - 0 0 0 - 0 0 0 - 0.0 - map - - - + r_gripper_l_finger_tip_bumper + + + + + + + + + + + + + + + + + true + false + + r_gripper_r_finger_tip_link_geom + 100.0 + true 100.0 - r_gripper_tool_frame - r_gripper_tool_frame_pose_ground_truth - 0 0 0 - 0 0 0 - 0.0 - /map - - - - true - - - - - - - - - - + r_gripper_r_finger_tip_bumper + + + + + + + + + + + + true + 100.0 + r_gripper_l_finger_link + r_gripper_l_finger_pose_ground_truth + 0.0 + base_link + + + + true + 100.0 + r_gripper_l_finger_link + r_gripper_l_finger_force_ground_truth + r_gripper_l_finger_link + + + + + + + + + + + + r_gripper_r_parallel_link + r_gripper_r_finger_tip_link + r_gripper_r_finger_tip_link + 0 0 1 + -0.018 -0.021 0 + + + r_gripper_l_parallel_link + r_gripper_l_finger_tip_link + r_gripper_l_finger_tip_link + 0 0 1 + -0.018 0.021 0 + + + r_gripper_l_finger_tip_link + r_gripper_r_finger_tip_link + r_gripper_r_finger_tip_link + 0 1 0 + + + + true + + + + true + + + + + + + + + + true + + r_gripper_palm_link_geom + 100.0 + + true + 100.0 + r_gripper_palm_bumper + + + + + + + + true + 100.0 + r_gripper_palm_link + r_gripper_palm_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + map + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - l_shoulder_pan_link_geom + + + + + + + + true + + + + + + + + + + 32.6525111499 + + + + l_shoulder_pan_link_geom + 100.0 + + true 100.0 - - true - 100.0 - l_shoulder_pan_bumper - - - - - true - - - - - - l_shoulder_lift_link_geom + l_shoulder_pan_bumper + + + + + true + + + + + + + + l_shoulder_lift_link_geom + 100.0 + + true 100.0 - - true - 100.0 - l_r_shoulder_lift_bumper - - - - true - - - - - - true - - - - - - - l_upper_arm_link_geom + l_r_shoulder_lift_bumper + + + + true + + + + + + + + + 63.1552452977 + + + + + 61.8948225713 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + l_upper_arm_link_geom + + 100.0 + + true 100.0 - - true - 100.0 - l_upper_arm_bumper - - - - true - - - - l_elbow_flex_link_geom + l_upper_arm_bumper + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + -90.5142857143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -1.0 + + + + l_elbow_flex_link_geom + 100.0 + + true 100.0 - - true - 100.0 - l_elbow_flex_bumper - - - - - true - - - - - - true - - - - true - - l_forearm_link_geom + l_elbow_flex_bumper + + + + + true + + + + + + + + + -36.167452007 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + l_forearm_link_geom + 100.0 + + true 100.0 - - true - 100.0 - l_forearm_bumper - - - - - - true - - l_wrist_flex_link_geom + l_forearm_bumper + + + + + + true + + l_wrist_flex_link_geom + 100.0 + + true 100.0 - - true - 100.0 - l_wrist_flex_bumper - - - - - - - - - true - - l_wrist_roll_link_geom + l_wrist_flex_bumper + + + + + + + + + + + true + + l_wrist_roll_link_geom + 100.0 + + true 100.0 - - true - 100.0 - l_wrist_roll_bumper - - - - - - - - - - 63.16 - - - - 61.89 - - - - 32.65 - - - - -36.17 - - - - 90.5142857143 - - - - - - + l_wrist_roll_bumper + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - +--> + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - l_gripper_l_finger_link_geom - 100.0 - - true - 100.0 - l_gripper_l_finger_bumper - - - - - - - - - - - - - - - - true - - l_gripper_r_finger_link_geom - 100.0 - - true - 100.0 - l_gripper_r_finger_bumper - - - - - - - - - - - - - - - true - - - l_gripper_l_finger_tip_link_geom - 100.0 - - true - 100.0 - l_gripper_l_finger_tip_bumper - - - - - - - - - - - - - - - true - - - l_gripper_r_finger_tip_link_geom - 100.0 - - true - 100.0 - l_gripper_r_finger_tip_bumper - - - - - - - - - - +--> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + l_gripper_l_finger_link_geom + 100.0 + true 100.0 - l_gripper_l_finger_link - l_gripper_l_finger_pose_ground_truth - 0.0 - map - - - + l_gripper_l_finger_bumper + + + + + + + + + + + + + + + + + + true + + l_gripper_r_finger_link_geom + 100.0 + true 100.0 - l_gripper_l_finger_link - l_gripper_l_finger_force_ground_truth - l_gripper_l_finger_link - - - - - - - - - - - - - true - - l_gripper_palm_link_geom - 100.0 - - true - 100.0 - l_gripper_palm_bumper - - - - - - true - - - - l_gripper_l_finger_tip_link - l_gripper_float_link - l_gripper_l_finger_tip_link - 0 1 0 - 0 0 0 - - - l_gripper_r_finger_tip_link - l_gripper_float_link - l_gripper_r_finger_tip_link - 0 1 0 - 0 0 0 - - - - + l_gripper_r_finger_bumper + + + + + + + + + + + + + + + + + true + false + + l_gripper_l_finger_tip_link_geom + 100.0 + true 100.0 - l_gripper_palm_link - l_gripper_palm_pose_ground_truth - 0 0 0 - 0 0 0 - 0.0 - map - - - + l_gripper_l_finger_tip_bumper + + + + + + + + + + + + + + + + + true + false + + l_gripper_r_finger_tip_link_geom + 100.0 + true 100.0 - l_gripper_tool_frame - l_gripper_tool_frame_pose_ground_truth - 0 0 0 - 0 0 0 - 0.0 - /map - - - - true - - - - - - - - - - - + l_gripper_r_finger_tip_bumper + + + + + + + + + + + + true + 100.0 + l_gripper_l_finger_link + l_gripper_l_finger_pose_ground_truth + 0.0 + base_link + + + + true + 100.0 + l_gripper_l_finger_link + l_gripper_l_finger_force_ground_truth + l_gripper_l_finger_link + + + + + + + + + + + + l_gripper_r_parallel_link + l_gripper_r_finger_tip_link + l_gripper_r_finger_tip_link + 0 0 1 + -0.018 -0.021 0 + + + l_gripper_l_parallel_link + l_gripper_l_finger_tip_link + l_gripper_l_finger_tip_link + 0 0 1 + -0.018 0.021 0 + + + l_gripper_l_finger_tip_link + l_gripper_r_finger_tip_link + l_gripper_r_finger_tip_link + 0 1 0 + + + + true + + + + true + + + + + + + + + + true + + l_gripper_palm_link_geom + 100.0 + + true + 100.0 + l_gripper_palm_bumper + + + + + + + + true + 100.0 + l_gripper_palm_link + l_gripper_palm_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + map + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 480 - L8 - 90 - 0.1 - 100 - 20.0 - - true - 20.0 - l_forearm_cam/image - l_forearm_cam_frame - - - - true - PR2/Blue - - true - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 90 + 0.1 + 100 + 25.0 + + true + 25.0 + l_forearm_cam/image_raw + l_forearm_cam/camera_info + l_forearm_cam_optical_frame + 0 + 320.5 + 320.5 + 240.5 + + + 320 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + + + + true + PR2/Blue + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 480 - L8 - 90 - 0.1 - 100 - 20.0 - - true - 20.0 - r_forearm_cam/image - r_forearm_cam_frame - - - - true - PR2/Blue - - true - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 90 + 0.1 + 100 + 25.0 + + true + 25.0 + r_forearm_cam/image_raw + r_forearm_cam/camera_info + r_forearm_cam_optical_frame + 0 + 320.5 + 320.5 + 240.5 + + + 320 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + + + + true + PR2/Blue + diff --git a/robot_state_publisher/test/test_publisher.cpp b/robot_state_publisher/test/test_publisher.cpp index 41c96a7..530170e 100644 --- a/robot_state_publisher/test/test_publisher.cpp +++ b/robot_state_publisher/test/test_publisher.cpp @@ -62,31 +62,11 @@ public: protected: /// constructor TestPublisher() - { - /* - // constructs a robot model from the xml file - urdf::Model robot_model; - if (g_argc == 2){ - if (!robot_model.initFile(g_argv[1])) - ROS_ERROR("Failed to construct robot model from xml string"); - } - else - ROS_ERROR("No robot model as argument given"); - - // constructs a kdl tree from the robot model - Tree tree; - if (!kdl_parser::treeFromUrdfModel(robot_model, tree)) - ROS_ERROR("Failed to extract kdl tree from robot model"); - - publisher = new JointStateListener(tree); - */ - } + {} /// Destructor ~TestPublisher() - { - // delete publisher; - } + {} }; diff --git a/robot_state_publisher/test/test_two_links_fixed_joint.cpp b/robot_state_publisher/test/test_two_links_fixed_joint.cpp new file mode 100644 index 0000000..f0355c0 --- /dev/null +++ b/robot_state_publisher/test/test_two_links_fixed_joint.cpp @@ -0,0 +1,120 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Wim Meeussen */ + +#include +#include +#include +#include +#include +#include +#include +#include "robot_state_publisher/joint_state_listener.h" + + +using namespace ros; +using namespace tf; +using namespace robot_state_publisher; + + +int g_argc; +char** g_argv; + +#define EPS 0.01 + +class TestPublisher : public testing::Test +{ +public: + JointStateListener* publisher; + +protected: + /// constructor + TestPublisher() + {} + + /// Destructor + ~TestPublisher() + {} +}; + + + + + +TEST_F(TestPublisher, test) +{ + ROS_INFO("Creating tf listener"); + TransformListener tf; + + ROS_INFO("Publishing joint state to robot state publisher"); + ros::NodeHandle n; + ros::Publisher js_pub = n.advertise("joint_states", 100); + sensor_msgs::JointState js_msg; + for (unsigned int i=0; i<100; i++){ + js_msg.header.stamp = ros::Time::now(); + js_pub.publish(js_msg); + ros::Duration(0.1).sleep(); + } + + ASSERT_TRUE(tf.canTransform("link1", "link2", Time())); + ASSERT_FALSE(tf.canTransform("base_link", "wim_link", Time())); + + tf::StampedTransform t; + tf.lookupTransform("link1", "link2",Time(), t ); + EXPECT_NEAR(t.getOrigin().x(), 5.0, EPS); + EXPECT_NEAR(t.getOrigin().y(), 0.0, EPS); + EXPECT_NEAR(t.getOrigin().z(), 0.0, EPS); + + SUCCEED(); +} + + + + +int main(int argc, char** argv) +{ + testing::InitGoogleTest(&argc, argv); + ros::init(argc, argv, "test_robot_state_publisher"); + ros::NodeHandle node; + boost::thread ros_thread(boost::bind(&ros::spin)); + + g_argc = argc; + g_argv = argv; + int res = RUN_ALL_TESTS(); + ros_thread.interrupt(); + ros_thread.join(); + + return res; +} diff --git a/robot_state_publisher/test/test_two_links_fixed_joint.launch b/robot_state_publisher/test/test_two_links_fixed_joint.launch new file mode 100644 index 0000000..9ad67b0 --- /dev/null +++ b/robot_state_publisher/test/test_two_links_fixed_joint.launch @@ -0,0 +1,6 @@ + + + + + + diff --git a/robot_state_publisher/test/test_two_links_moving_joint.cpp b/robot_state_publisher/test/test_two_links_moving_joint.cpp new file mode 100644 index 0000000..2f05f79 --- /dev/null +++ b/robot_state_publisher/test/test_two_links_moving_joint.cpp @@ -0,0 +1,122 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Wim Meeussen */ + +#include +#include +#include +#include +#include +#include +#include +#include "robot_state_publisher/joint_state_listener.h" + + +using namespace ros; +using namespace tf; +using namespace robot_state_publisher; + + +int g_argc; +char** g_argv; + +#define EPS 0.01 + +class TestPublisher : public testing::Test +{ +public: + JointStateListener* publisher; + +protected: + /// constructor + TestPublisher() + {} + + /// Destructor + ~TestPublisher() + {} +}; + + + + + +TEST_F(TestPublisher, test) +{ + ROS_INFO("Creating tf listener"); + TransformListener tf; + + ROS_INFO("Publishing joint state to robot state publisher"); + ros::NodeHandle n; + ros::Publisher js_pub = n.advertise("joint_states", 100); + sensor_msgs::JointState js_msg; + js_msg.name.push_back("joint1"); + js_msg.position.push_back(M_PI); + for (unsigned int i=0; i<100; i++){ + js_msg.header.stamp = ros::Time::now(); + js_pub.publish(js_msg); + ros::Duration(0.1).sleep(); + } + + ASSERT_TRUE(tf.canTransform("link1", "link2", Time())); + ASSERT_FALSE(tf.canTransform("base_link", "wim_link", Time())); + + tf::StampedTransform t; + tf.lookupTransform("link1", "link2",Time(), t ); + EXPECT_NEAR(t.getOrigin().x(), 5.0, EPS); + EXPECT_NEAR(t.getOrigin().y(), 0.0, EPS); + EXPECT_NEAR(t.getOrigin().z(), 0.0, EPS); + + SUCCEED(); +} + + + + +int main(int argc, char** argv) +{ + testing::InitGoogleTest(&argc, argv); + ros::init(argc, argv, "test_robot_state_publisher"); + ros::NodeHandle node; + boost::thread ros_thread(boost::bind(&ros::spin)); + + g_argc = argc; + g_argv = argv; + int res = RUN_ALL_TESTS(); + ros_thread.interrupt(); + ros_thread.join(); + + return res; +} diff --git a/robot_state_publisher/test/test_two_links_moving_joint.launch b/robot_state_publisher/test/test_two_links_moving_joint.launch new file mode 100644 index 0000000..51a4b55 --- /dev/null +++ b/robot_state_publisher/test/test_two_links_moving_joint.launch @@ -0,0 +1,6 @@ + + + + + + diff --git a/robot_state_publisher/test/two_links_fixed_joint.urdf b/robot_state_publisher/test/two_links_fixed_joint.urdf new file mode 100644 index 0000000..8bd84ef --- /dev/null +++ b/robot_state_publisher/test/two_links_fixed_joint.urdf @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/robot_state_publisher/test/two_links_moving_joint.urdf b/robot_state_publisher/test/two_links_moving_joint.urdf new file mode 100644 index 0000000..eb50dd6 --- /dev/null +++ b/robot_state_publisher/test/two_links_moving_joint.urdf @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file From 3a32abefd9b584b49aeb4aed100382659014a2ea Mon Sep 17 00:00:00 2001 From: wim Date: Tue, 22 Jun 2010 22:01:00 +0000 Subject: [PATCH 188/245] add test for urdf without any joints --- robot_state_publisher/CMakeLists.txt | 6 + robot_state_publisher/test/test_one_link.cpp | 111 ++++++++++++++++++ .../test/test_one_link.launch | 6 + 3 files changed, 123 insertions(+) create mode 100644 robot_state_publisher/test/test_one_link.cpp create mode 100644 robot_state_publisher/test/test_one_link.launch diff --git a/robot_state_publisher/CMakeLists.txt b/robot_state_publisher/CMakeLists.txt index 0dc2111..8b840f8 100644 --- a/robot_state_publisher/CMakeLists.txt +++ b/robot_state_publisher/CMakeLists.txt @@ -33,6 +33,12 @@ rosbuild_add_gtest_build_flags(test_publisher) rosbuild_declare_test(test_publisher) rosbuild_add_rostest(${CMAKE_CURRENT_SOURCE_DIR}/test/test_publisher.launch) +rosbuild_add_executable(test_one_link test/test_one_link.cpp ) +target_link_libraries(test_one_link ${PROJECT_NAME}) +rosbuild_add_gtest_build_flags(test_one_link) +rosbuild_declare_test(test_one_link) +rosbuild_add_rostest(${CMAKE_CURRENT_SOURCE_DIR}/test/test_one_link.launch) + rosbuild_add_executable(test_two_links_fixed_joint test/test_two_links_fixed_joint.cpp ) target_link_libraries(test_two_links_fixed_joint ${PROJECT_NAME}) rosbuild_add_gtest_build_flags(test_two_links_fixed_joint) diff --git a/robot_state_publisher/test/test_one_link.cpp b/robot_state_publisher/test/test_one_link.cpp new file mode 100644 index 0000000..3115042 --- /dev/null +++ b/robot_state_publisher/test/test_one_link.cpp @@ -0,0 +1,111 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2008, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Wim Meeussen */ + +#include +#include +#include +#include +#include +#include +#include +#include "robot_state_publisher/joint_state_listener.h" + + +using namespace ros; +using namespace tf; +using namespace robot_state_publisher; + + +int g_argc; +char** g_argv; + +#define EPS 0.01 + +class TestPublisher : public testing::Test +{ +public: + JointStateListener* publisher; + +protected: + /// constructor + TestPublisher() + {} + + /// Destructor + ~TestPublisher() + {} +}; + + + + + +TEST_F(TestPublisher, test) +{ + ROS_INFO("Creating tf listener"); + TransformListener tf; + + ROS_INFO("Publishing joint state to robot state publisher"); + ros::NodeHandle n; + ros::Publisher js_pub = n.advertise("joint_states", 100); + sensor_msgs::JointState js_msg; + for (unsigned int i=0; i<100; i++){ + js_msg.header.stamp = ros::Time::now(); + js_pub.publish(js_msg); + ros::Duration(0.1).sleep(); + } + + SUCCEED(); +} + + + + +int main(int argc, char** argv) +{ + testing::InitGoogleTest(&argc, argv); + ros::init(argc, argv, "test_robot_state_publisher"); + ros::NodeHandle node; + boost::thread ros_thread(boost::bind(&ros::spin)); + + g_argc = argc; + g_argv = argv; + int res = RUN_ALL_TESTS(); + ros_thread.interrupt(); + ros_thread.join(); + + return res; +} diff --git a/robot_state_publisher/test/test_one_link.launch b/robot_state_publisher/test/test_one_link.launch new file mode 100644 index 0000000..f46d8ee --- /dev/null +++ b/robot_state_publisher/test/test_one_link.launch @@ -0,0 +1,6 @@ + + + + + + From fdd1094772ef51a95bf558ca3e8a2b1a7931e88a Mon Sep 17 00:00:00 2001 From: wim Date: Tue, 22 Jun 2010 22:07:27 +0000 Subject: [PATCH 189/245] update kdl parser to comply with latest urdf bugfixes --- kdl_parser/test/pr2_desc.xml | 6504 +++++++++++++-------------- kdl_parser/test/test_kdl_parser.cpp | 6 +- 2 files changed, 3219 insertions(+), 3291 deletions(-) diff --git a/kdl_parser/test/pr2_desc.xml b/kdl_parser/test/pr2_desc.xml index df794c6..07308a0 100644 --- a/kdl_parser/test/pr2_desc.xml +++ b/kdl_parser/test/pr2_desc.xml @@ -1,26 +1,19 @@ - - + + + + + + - - - - - - - - - - - @@ -28,46 +21,52 @@ 1000.0 - - + true 1.0 5 - + power_state 10.0 - 87.78 + 87.78 -474 525 15.52 16.41 - + - + + - + + - + + - + + - + + - + + - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 - 640 - 1 - - 0.0 0.0 0.0 - false - - -80 - 80 - - 0.05 - 10.0 - 0.01 - 20.0 - - 0.005 - true - 20.0 - base_scan - base_laser_link - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -79.2380952381 - - - - true - - base_link_geom - 100.0 - - true - 100.0 - base_bumper - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 + 640 + 1 + 0.0 0.0 0.0 + false + -129.998394137 + 129.998394137 + 0.05 + 10.0 + 0.01 + 20 + + 0.005 + true + 20 + base_scan + base_laser_link + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 79.2380952381 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -79.2380952381 + + + + + + true + + base_link_geom + 100.0 + true 100.0 - base_link - base_pose_ground_truth - 0.01 - map - 25.7 25.7 0 - 0 0 0 - - - - + base_bumper + + + + + + + + true + 100.0 + base_link + base_pose_ground_truth + 0.01 + map + 25.7 25.7 0 + + 0 0 0 + + + base_footprint + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - torso_lift_link_geom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + torso_lift_link_geom + 100.0 + + true 100.0 - - true - 100.0 - torso_lift_bumper - - - - - - - - -52143.33 - - + torso_lift_bumper + + + + + + + + + -52143.33 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + 100.0 + imu_link + torso_lift_imu/data + 2.89e-08 + 0 0 0 + 0 0 0 + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + R8G8B8 2448 2050 @@ -898,2551 +993,2384 @@ true 20.0 - /prosilica/cam_info - /prosilica/image - /prosilica/image_rect - /prosilica/cam_info_service - /prosilica/poll - hight_def_optical_frame + /prosilica/image_raw + /prosilica/camera_info + /prosilica/request_image + high_def_frame 1224.5 1224.5 1025.5 - 2955 - 0 - 0 - 0 - 0 - 0 + 2955 + + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 480 - B8G8R8 - 90.0 - 0.1 - 100 - 25.0 - - true - 25.0 - wide_stereo/left/image_raw - wide_stereo/left/camera_info - wide_stereo_optical_frame - 0.0 - 320.5 - 320.5 - 240.5 - - - 320.0 - 0 - 0 - 0 - 0 - 0 - - - - true - PR2/Blue - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 480 - B8G8R8 - 90.0 - 0.1 - 100 - 25.0 - - true - 25.0 - wide_stereo/right/image_raw - wide_stereo/right/camera_info - wide_stereo_optical_frame - 0.09 - 320.5 - 320.5 - 240.5 - - - 320.0 - 0 - 0 - 0 - 0 - 0 - - - - true - PR2/Blue - - true - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + BAYER_BGGR8 + 90 + 0.1 + 100 + 25.0 + true - 20.0 - wide_stereo_l_stereo_camera_sensor - wide_stereo_r_stereo_camera_sensor - wide_stereo/raw_stereo + 25.0 + wide_stereo/left/image_raw + wide_stereo/left/camera_info wide_stereo_optical_frame + 0 320.5 320.5 240.5 - 320.0 - 0 - 0 - 0 - 0 - 0 - -0.09 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 480 - L8 - 45.0 - 0.1 - 100 - 25.0 - - true - 25.0 - narrow_stereo/left/image_raw - narrow_stereo/left/camera_info - narrow_stereo_optical_frame - 0.0 - 320.5 - 320.5 - 240.5 - - - 772.55 - 0 - 0 - 0 - 0 - 0 - - - - true - PR2/Blue - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 480 - L8 - 45.0 - 0.1 - 100 - 25.0 - - true - 25.0 - narrow_stereo/right/image_raw - narrow_stereo/right/camera_info - narrow_stereo_optical_frame - 0.09 - 320.5 - 320.5 - 240.5 - - - 772.55 - 0 - 0 - 0 - 0 - 0 - - - - true - PR2/Blue - - true - - - - - - + 320 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + + + + true + PR2/Blue + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + BAYER_BGGR8 + 90 + 0.1 + 100 + 25.0 + true - 20.0 - narrow_stereo_l_stereo_camera_sensor - narrow_stereo_r_stereo_camera_sensor - narrow_stereo/raw_stereo + 25.0 + wide_stereo/right/image_raw + wide_stereo/right/camera_info + wide_stereo_optical_frame + 0.09 + 320.5 + 320.5 + 240.5 + + + 320 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + + + + true + PR2/Blue + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 45 + 0.1 + 100 + 25.0 + + true + 25.0 + narrow_stereo/left/image_raw + narrow_stereo/left/camera_info narrow_stereo_optical_frame + 0 320.5 320.5 240.5 772.55 - 0 - 0 - 0 - 0 - 0 - -0.09 - - - - - - - - + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + + + + true + PR2/Blue + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 45 + 0.1 + 100 + 25.0 + + true + 25.0 + narrow_stereo/right/image_raw + narrow_stereo/right/camera_info + narrow_stereo_optical_frame + 0.09 + 320.5 + 320.5 + 240.5 + + + 772.55 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + + + + true + PR2/Blue + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 - 640 - 1 - - 0.0 0.0 0.0 - false - - -80 - 80 - - 0.05 - 10.0 - 0.01 - 40.0 - - 0.005 - true - 40.0 - tilt_scan - laser_tilt_link - - - - - - - - - -6.05 - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 + 640 + 1 + 0.0 0.0 0.0 + false + -79.9999999086 + 79.9999999086 + 0.05 + 10.0 + 0.01 + 40 + + 0.005 + true + 40 + tilt_scan + laser_tilt_link + + + + + + + + + + + -6.05 + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - r_shoulder_pan_link_geom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + 32.6525111499 + + + + r_shoulder_pan_link_geom + 100.0 + + true 100.0 - - true - 100.0 - r_shoulder_pan_bumper - - - - - true - - - - - - r_shoulder_lift_link_geom + r_shoulder_pan_bumper + + + + + true + + + + + + + + r_shoulder_lift_link_geom + 100.0 + + true 100.0 - - true - 100.0 - r_r_shoulder_lift_bumper - - - - true - - - - - - true - - - - - - - - 63.16 - - - - 61.89 - - - - 32.65 - + r_r_shoulder_lift_bumper + + + + true + + + + + + + + + 63.1552452977 + + + + + 61.8948225713 + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - r_upper_arm_link_geom + + + + + + + + r_upper_arm_link_geom + + 100.0 + + true 100.0 - - true - 100.0 - r_upper_arm_bumper - - - - true - - - -1.0 - - - r_elbow_flex_link_geom + r_upper_arm_bumper + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + -90.5142857143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -1.0 + + + + r_elbow_flex_link_geom + 100.0 + + true 100.0 - - true - 100.0 - r_elbow_flex_bumper - - - - - true - - - - - - true - - - - - - -36.17 - - - - 90.5142857143 - + r_elbow_flex_bumper + + + + + true + + + + + + + + + -36.167452007 + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - true - - r_forearm_link_geom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + r_forearm_link_geom + 100.0 + + true 100.0 - - true - 100.0 - r_forearm_bumper - - - - - - true - - r_wrist_flex_link_geom + r_forearm_bumper + + + + + + true + + r_wrist_flex_link_geom + 100.0 + + true 100.0 - - true - 100.0 - r_wrist_flex_bumper - - - - - - - - - true - - r_wrist_roll_link_geom + r_wrist_flex_bumper + + + + + + + + + + + true + + r_wrist_roll_link_geom + 100.0 + + true 100.0 - - true - 100.0 - r_wrist_roll_bumper - - - - - - - - - - - - - + r_wrist_roll_bumper + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - +--> + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - r_gripper_l_finger_link_geom - 100.0 - - true - 100.0 - r_gripper_l_finger_bumper - - - - - - - - - - - - - - - - true - - r_gripper_r_finger_link_geom - 100.0 - - true - 100.0 - r_gripper_r_finger_bumper - - - - - - - - - - - - - - - true - false - - r_gripper_l_finger_tip_link_geom - 100.0 - - true - 100.0 - r_gripper_l_finger_tip_bumper - - - - - - - - - - - - - - - true - false - - r_gripper_r_finger_tip_link_geom - 100.0 - - true - 100.0 - r_gripper_r_finger_tip_bumper - - - - - - - - - - +--> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + r_gripper_l_finger_link_geom + 100.0 + true 100.0 - r_gripper_l_finger_link - r_gripper_l_finger_pose_ground_truth - 0.0 - map - - - + r_gripper_l_finger_bumper + + + + + + + + + + + + + + + + + + true + + r_gripper_r_finger_link_geom + 100.0 + true 100.0 - r_gripper_l_finger_link - r_gripper_l_finger_force_ground_truth - r_gripper_l_finger_link - - - - - - - - - - - - - true - - r_gripper_palm_link_geom - 100.0 - - true - 100.0 - r_gripper_palm_bumper - - - - - - true - - - - - true - 0.01 - 0.0001 - 0 - 0 - 0.0001 - 0 - 0.0001 - 0 - 0 - 0 - 0.82025 0.188 0.790675 - 0 -0 0 - - 0 0 0 - 0 -0 0 - 0.0 0.0 0.0 - - 0 0 0 - 0 -0 0 - 0.0 0.0 0.0 - unit_box - PR2/White - - - true - false - - - r_gripper_float_link - r_gripper_palm_link - r_gripper_float_link - 1 0 0 - -0.05 - 0.001 - - - r_gripper_l_finger_tip_link - r_gripper_float_link - r_gripper_l_finger_tip_link - 0 1 0 - 0 0 0 - - - r_gripper_r_finger_tip_link - r_gripper_float_link - r_gripper_r_finger_tip_link - 0 1 0 - 0 0 0 - - - - + r_gripper_r_finger_bumper + + + + + + + + + + + + + + + + + true + false + + r_gripper_l_finger_tip_link_geom + 100.0 + true 100.0 - r_gripper_palm_link - r_gripper_palm_pose_ground_truth - 0 0 0 - 0 0 0 - 0.0 - map - - - + r_gripper_l_finger_tip_bumper + + + + + + + + + + + + + + + + + true + false + + r_gripper_r_finger_tip_link_geom + 100.0 + true 100.0 - r_gripper_tool_frame - r_gripper_tool_frame_pose_ground_truth - 0 0 0 - 0 0 0 - 0.0 - /map - - - - true - - - - - - - - - - + r_gripper_r_finger_tip_bumper + + + + + + + + + + + + true + 100.0 + r_gripper_l_finger_link + r_gripper_l_finger_pose_ground_truth + 0.0 + base_link + + + + true + 100.0 + r_gripper_l_finger_link + r_gripper_l_finger_force_ground_truth + r_gripper_l_finger_link + + + + + + + + + + + + r_gripper_r_parallel_link + r_gripper_r_finger_tip_link + r_gripper_r_finger_tip_link + 0 0 1 + -0.018 -0.021 0 + + + r_gripper_l_parallel_link + r_gripper_l_finger_tip_link + r_gripper_l_finger_tip_link + 0 0 1 + -0.018 0.021 0 + + + r_gripper_l_finger_tip_link + r_gripper_r_finger_tip_link + r_gripper_r_finger_tip_link + 0 1 0 + + + + true + + + + true + + + + + + + + + + true + + r_gripper_palm_link_geom + 100.0 + + true + 100.0 + r_gripper_palm_bumper + + + + + + + + true + 100.0 + r_gripper_palm_link + r_gripper_palm_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + map + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - l_shoulder_pan_link_geom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + 32.6525111499 + + + + l_shoulder_pan_link_geom + 100.0 + + true 100.0 - - true - 100.0 - l_shoulder_pan_bumper - - - - - true - - - - - - l_shoulder_lift_link_geom + l_shoulder_pan_bumper + + + + + true + + + + + + + + l_shoulder_lift_link_geom + 100.0 + + true 100.0 - - true - 100.0 - l_r_shoulder_lift_bumper - - - - true - - - - - - true - - - - - - - - 63.16 - - - - 61.89 - - - - 32.65 - + l_r_shoulder_lift_bumper + + + + true + + + + + + + + + 63.1552452977 + + + + + 61.8948225713 + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - l_upper_arm_link_geom + + + + + + + + l_upper_arm_link_geom + + 100.0 + + true 100.0 - - true - 100.0 - l_upper_arm_bumper - - - - true - - - -1.0 - - - l_elbow_flex_link_geom + l_upper_arm_bumper + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + -90.5142857143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -1.0 + + + + l_elbow_flex_link_geom + 100.0 + + true 100.0 - - true - 100.0 - l_elbow_flex_bumper - - - - - true - - - - - - true - - - - - - -36.17 - - - - 90.5142857143 - + l_elbow_flex_bumper + + + + + true + + + + + + + + + -36.167452007 + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - true - - l_forearm_link_geom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + l_forearm_link_geom + 100.0 + + true 100.0 - - true - 100.0 - l_forearm_bumper - - - - - - true - - l_wrist_flex_link_geom + l_forearm_bumper + + + + + + true + + l_wrist_flex_link_geom + 100.0 + + true 100.0 - - true - 100.0 - l_wrist_flex_bumper - - - - - - - - - true - - l_wrist_roll_link_geom + l_wrist_flex_bumper + + + + + + + + + + + true + + l_wrist_roll_link_geom + 100.0 + + true 100.0 - - true - 100.0 - l_wrist_roll_bumper - - - - - - - - - - - - - + l_wrist_roll_bumper + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - +--> + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - l_gripper_l_finger_link_geom - 100.0 - - true - 100.0 - l_gripper_l_finger_bumper - - - - - - - - - - - - - - - - true - - l_gripper_r_finger_link_geom - 100.0 - - true - 100.0 - l_gripper_r_finger_bumper - - - - - - - - - - - - - - - true - false - - l_gripper_l_finger_tip_link_geom - 100.0 - - true - 100.0 - l_gripper_l_finger_tip_bumper - - - - - - - - - - - - - - - true - false - - l_gripper_r_finger_tip_link_geom - 100.0 - - true - 100.0 - l_gripper_r_finger_tip_bumper - - - - - - - - - - +--> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + l_gripper_l_finger_link_geom + 100.0 + true 100.0 - l_gripper_l_finger_link - l_gripper_l_finger_pose_ground_truth - 0.0 - map - - - + l_gripper_l_finger_bumper + + + + + + + + + + + + + + + + + + true + + l_gripper_r_finger_link_geom + 100.0 + true 100.0 - l_gripper_l_finger_link - l_gripper_l_finger_force_ground_truth - l_gripper_l_finger_link - - - - - - - - - - - - - true - - l_gripper_palm_link_geom - 100.0 - - true - 100.0 - l_gripper_palm_bumper - - - - - - true - - - - - true - 0.01 - 0.0001 - 0 - 0 - 0.0001 - 0 - 0.0001 - 0 - 0 - 0 - 0.82025 0.188 0.790675 - 0 -0 0 - - 0 0 0 - 0 -0 0 - 0.0 0.0 0.0 - - 0 0 0 - 0 -0 0 - 0.0 0.0 0.0 - unit_box - PR2/White - - - true - false - - - l_gripper_float_link - l_gripper_palm_link - l_gripper_float_link - 1 0 0 - -0.05 - 0.001 - - - l_gripper_l_finger_tip_link - l_gripper_float_link - l_gripper_l_finger_tip_link - 0 1 0 - 0 0 0 - - - l_gripper_r_finger_tip_link - l_gripper_float_link - l_gripper_r_finger_tip_link - 0 1 0 - 0 0 0 - - - - + l_gripper_r_finger_bumper + + + + + + + + + + + + + + + + + true + false + + l_gripper_l_finger_tip_link_geom + 100.0 + true 100.0 - l_gripper_palm_link - l_gripper_palm_pose_ground_truth - 0 0 0 - 0 0 0 - 0.0 - map - - - + l_gripper_l_finger_tip_bumper + + + + + + + + + + + + + + + + + true + false + + l_gripper_r_finger_tip_link_geom + 100.0 + true 100.0 - l_gripper_tool_frame - l_gripper_tool_frame_pose_ground_truth - 0 0 0 - 0 0 0 - 0.0 - /map - - - - true - - - - - - - - - - - + l_gripper_r_finger_tip_bumper + + + + + + + + + + + + true + 100.0 + l_gripper_l_finger_link + l_gripper_l_finger_pose_ground_truth + 0.0 + base_link + + + + true + 100.0 + l_gripper_l_finger_link + l_gripper_l_finger_force_ground_truth + l_gripper_l_finger_link + + + + + + + + + + + + l_gripper_r_parallel_link + l_gripper_r_finger_tip_link + l_gripper_r_finger_tip_link + 0 0 1 + -0.018 -0.021 0 + + + l_gripper_l_parallel_link + l_gripper_l_finger_tip_link + l_gripper_l_finger_tip_link + 0 0 1 + -0.018 0.021 0 + + + l_gripper_l_finger_tip_link + l_gripper_r_finger_tip_link + l_gripper_r_finger_tip_link + 0 1 0 + + + + true + + + + true + + + + + + + + + + true + + l_gripper_palm_link_geom + 100.0 + + true + 100.0 + l_gripper_palm_bumper + + + + + + + + true + 100.0 + l_gripper_palm_link + l_gripper_palm_pose_ground_truth + 0 0 0 + 0 0 0 + 0.0 + map + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 480 - L8 - 90.0 - 0.1 - 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 90 + 0.1 + 100 + 25.0 + + true 25.0 - - true - 25.0 - l_forearm_cam/image_raw - l_forearm_cam/camera_info - l_forearm_cam_frame - 0.0 - 320.5 - 320.5 - 240.5 - - - 320.0 - 0 - 0 - 0 - 0 - 0 - - - - true - PR2/Blue - - true - + l_forearm_cam/image_raw + l_forearm_cam/camera_info + l_forearm_cam_optical_frame + 0 + 320.5 + 320.5 + 240.5 + + + 320 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + + + + true + PR2/Blue + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 480 - L8 - 90.0 - 0.1 - 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 640 480 + L8 + 90 + 0.1 + 100 + 25.0 + + true 25.0 - - true - 25.0 - r_forearm_cam/image_raw - r_forearm_cam/camera_info - r_forearm_cam_frame - 0.0 - 320.5 - 320.5 - 240.5 - - - 320.0 - 0 - 0 - 0 - 0 - 0 - - - - true - PR2/Blue - - true - - + r_forearm_cam/image_raw + r_forearm_cam/camera_info + r_forearm_cam_optical_frame + 0 + 320.5 + 320.5 + 240.5 + + + 320 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + 0.00000001 + + + + true + PR2/Blue + diff --git a/kdl_parser/test/test_kdl_parser.cpp b/kdl_parser/test/test_kdl_parser.cpp index c229cd2..9f28362 100644 --- a/kdl_parser/test/test_kdl_parser.cpp +++ b/kdl_parser/test/test_kdl_parser.cpp @@ -73,9 +73,9 @@ TEST_F(TestParser, test) } ASSERT_TRUE(treeFromFile(g_argv[g_argc-1], my_tree)); - ASSERT_EQ(my_tree.getNrOfJoints(), (unsigned int)38); - ASSERT_EQ(my_tree.getNrOfSegments(), (unsigned int)72); - ASSERT_TRUE(my_tree.getSegment("world") == my_tree.getRootSegment()); + ASSERT_EQ(my_tree.getNrOfJoints(), (unsigned int)42); + ASSERT_EQ(my_tree.getNrOfSegments(), (unsigned int)79); + ASSERT_TRUE(my_tree.getSegment("base_footprint") == my_tree.getRootSegment()); ASSERT_EQ(my_tree.getRootSegment()->second.children.size(), (unsigned int)1); ASSERT_TRUE(my_tree.getSegment("base_link")->second.parent == my_tree.getRootSegment()); ASSERT_EQ(my_tree.getSegment("base_link")->second.segment.getInertia().getMass(), 116.0); From 217a5ba7575c9bd4db0459ad782d8c253c449487 Mon Sep 17 00:00:00 2001 From: wim Date: Tue, 22 Jun 2010 22:11:53 +0000 Subject: [PATCH 190/245] use pr2 dscription with fixed gripper joint --- kdl_parser/test/pr2_desc.xml | 6 ++++++ kdl_parser/test/test_kdl_parser.cpp | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/kdl_parser/test/pr2_desc.xml b/kdl_parser/test/pr2_desc.xml index 07308a0..ebef6c6 100644 --- a/kdl_parser/test/pr2_desc.xml +++ b/kdl_parser/test/pr2_desc.xml @@ -2311,11 +2311,14 @@ + + + true @@ -3202,11 +3205,14 @@ + + + true diff --git a/kdl_parser/test/test_kdl_parser.cpp b/kdl_parser/test/test_kdl_parser.cpp index 9f28362..c43d75f 100644 --- a/kdl_parser/test/test_kdl_parser.cpp +++ b/kdl_parser/test/test_kdl_parser.cpp @@ -73,8 +73,8 @@ TEST_F(TestParser, test) } ASSERT_TRUE(treeFromFile(g_argv[g_argc-1], my_tree)); - ASSERT_EQ(my_tree.getNrOfJoints(), (unsigned int)42); - ASSERT_EQ(my_tree.getNrOfSegments(), (unsigned int)79); + ASSERT_EQ(my_tree.getNrOfJoints(), (unsigned int)44); + ASSERT_EQ(my_tree.getNrOfSegments(), (unsigned int)81); ASSERT_TRUE(my_tree.getSegment("base_footprint") == my_tree.getRootSegment()); ASSERT_EQ(my_tree.getRootSegment()->second.children.size(), (unsigned int)1); ASSERT_TRUE(my_tree.getSegment("base_link")->second.parent == my_tree.getRootSegment()); From 4232496f32398aa006f545c67731f4fbd7405f80 Mon Sep 17 00:00:00 2001 From: wim Date: Tue, 22 Jun 2010 22:12:29 +0000 Subject: [PATCH 191/245] use pr2 dscription with fixed gripper joint --- urdf/test/pr2_desc.urdf | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/urdf/test/pr2_desc.urdf b/urdf/test/pr2_desc.urdf index 07308a0..ebef6c6 100644 --- a/urdf/test/pr2_desc.urdf +++ b/urdf/test/pr2_desc.urdf @@ -2311,11 +2311,14 @@ + + + true @@ -3202,11 +3205,14 @@ + + + true From 598019400c1f22c86f07486aecf06afe3e123aaf Mon Sep 17 00:00:00 2001 From: wim Date: Thu, 24 Jun 2010 19:17:27 +0000 Subject: [PATCH 192/245] search for parameter in initParam --- urdf/src/model.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/urdf/src/model.cpp b/urdf/src/model.cpp index 7ad9b45..6a670a6 100644 --- a/urdf/src/model.cpp +++ b/urdf/src/model.cpp @@ -70,10 +70,19 @@ bool Model::initParam(const std::string& param) { ros::NodeHandle nh; std::string xml_string; - if (!nh.getParam(param, xml_string)){ - ROS_ERROR("Could not find parameter %s on parameter server", param.c_str()); - return false; - } + + // gets the location of the robot description on the parameter server + std::string full_param; + if (!nh.searchParam(param, full_param)){ + ROS_ERROR("Could not find parameter %s on parameter server", param.c_str()); + return false; + } + + // read the robot description from the parameter server + if (!nh.getParam(full_param, xml_string)){ + ROS_ERROR("Could read parameter %s on parameter server", full_param.c_str()); + return false; + } return initString(xml_string); } From 2b84aed3e5d6848dae1548ce9070a3f72631dc67 Mon Sep 17 00:00:00 2001 From: wim Date: Thu, 24 Jun 2010 19:20:16 +0000 Subject: [PATCH 193/245] initParam() calls through to urdf::initParam() --- kdl_parser/include/kdl_parser/kdl_parser.hpp | 7 +++++++ kdl_parser/src/kdl_parser.cpp | 9 +++++++++ 2 files changed, 16 insertions(+) diff --git a/kdl_parser/include/kdl_parser/kdl_parser.hpp b/kdl_parser/include/kdl_parser/kdl_parser.hpp index 65720e3..ba7e2c8 100644 --- a/kdl_parser/include/kdl_parser/kdl_parser.hpp +++ b/kdl_parser/include/kdl_parser/kdl_parser.hpp @@ -51,6 +51,13 @@ namespace kdl_parser{ */ bool treeFromFile(const std::string& file, KDL::Tree& tree); +/** Constructs a KDL tree from the parameter server, given the parameter name + * \param param the name of the parameter on the parameter server + * \param tree The resulting KDL Tree + * returns true on success, false on failure + */ +bool treeFromParam(const std::string& param, KDL::Tree& tree); + /** Constructs a KDL tree from a string containing xml * \param xml A string containting the xml description of the robot * \param tree The resulting KDL Tree diff --git a/kdl_parser/src/kdl_parser.cpp b/kdl_parser/src/kdl_parser.cpp index 358e2c5..f5abc69 100644 --- a/kdl_parser/src/kdl_parser.cpp +++ b/kdl_parser/src/kdl_parser.cpp @@ -138,6 +138,15 @@ bool treeFromFile(const string& file, Tree& tree) return treeFromXml(&urdf_xml, tree); } +bool treeFromParam(const string& param, Tree& tree) +{ + urdf::Model robot_model; + if (!robot_model.initParam(param)){ + ROS_ERROR("Could not generate robot model"); + return false; + } + return treeFromUrdfModel(robot_model, tree); +} bool treeFromString(const string& xml, Tree& tree) { From 71ba181883e5b26f563b36bc4f42e621f7a19814 Mon Sep 17 00:00:00 2001 From: wim Date: Thu, 24 Jun 2010 19:52:13 +0000 Subject: [PATCH 194/245] When tree has only fixed joints, publish state to tf without expecting empy joint state messages --- robot_state_publisher/CMakeLists.txt | 4 +- .../src/joint_state_listener.cpp | 47 ++++++++++- .../src/robot_state_publisher_node.cpp | 82 ------------------- .../test/test_two_links_fixed_joint.cpp | 12 +-- 4 files changed, 50 insertions(+), 95 deletions(-) delete mode 100644 robot_state_publisher/src/robot_state_publisher_node.cpp diff --git a/robot_state_publisher/CMakeLists.txt b/robot_state_publisher/CMakeLists.txt index 8b840f8..5c68421 100644 --- a/robot_state_publisher/CMakeLists.txt +++ b/robot_state_publisher/CMakeLists.txt @@ -22,9 +22,9 @@ set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) #uncomment if you have defined services #rosbuild_gensrv() -rosbuild_add_library(${PROJECT_NAME} src/joint_state_listener.cpp src/robot_state_publisher.cpp src/treefksolverposfull_recursive.cpp) +rosbuild_add_library(${PROJECT_NAME} src/robot_state_publisher.cpp src/treefksolverposfull_recursive.cpp) -rosbuild_add_executable(state_publisher src/robot_state_publisher_node.cpp ) +rosbuild_add_executable(state_publisher src/joint_state_listener.cpp ) target_link_libraries(state_publisher ${PROJECT_NAME}) rosbuild_add_executable(test_publisher test/test_publisher.cpp ) diff --git a/robot_state_publisher/src/joint_state_listener.cpp b/robot_state_publisher/src/joint_state_listener.cpp index 69df07a..e7b2eee 100644 --- a/robot_state_publisher/src/joint_state_listener.cpp +++ b/robot_state_publisher/src/joint_state_listener.cpp @@ -38,6 +38,8 @@ #include #include "robot_state_publisher/robot_state_publisher.h" #include "robot_state_publisher/joint_state_listener.h" +#include + using namespace std; using namespace ros; @@ -53,8 +55,18 @@ JointStateListener::JointStateListener(const KDL::Tree& tree) n_tilde_.param("publish_frequency", publish_freq, 50.0); publish_rate_ = Rate(publish_freq); - // subscribe to mechanism state - joint_state_sub_ = n_.subscribe("joint_states", 1, &JointStateListener::callbackJointState, this);; + if (tree.getNrOfJoints() == 0){ + boost::shared_ptr empty_state(new sensor_msgs::JointState); + empty_state->header.stamp = ros::Time::now(); + while (ros::ok()){ + this->callbackJointState(empty_state); + publish_rate_.sleep(); + } + } + else{ + // subscribe to mechanism state + joint_state_sub_ = n_.subscribe("joint_states", 1, &JointStateListener::callbackJointState, this); + } }; @@ -77,3 +89,34 @@ void JointStateListener::callbackJointState(const JointStateConstPtr& state) publish_rate_.sleep(); } + + + + +// ---------------------------------- +// ----- MAIN ----------------------- +// ---------------------------------- +int main(int argc, char** argv) +{ + // Initialize ros + ros::init(argc, argv, "robot_state_publisher"); + NodeHandle node; + + // gets the location of the robot description on the parameter server + KDL::Tree tree; + if (!kdl_parser::treeFromParam("robot_description", tree)){ + ROS_ERROR("Failed to extract kdl tree from xml robot description"); + return -1; + } + + if (tree.getNrOfSegments() == 0){ + ROS_WARN("Robot state publisher got an empty tree and cannot publish any state to tf"); + ros::spin(); + } + else{ + JointStateListener state_publisher(tree); + ros::spin(); + } + + return 0; +} diff --git a/robot_state_publisher/src/robot_state_publisher_node.cpp b/robot_state_publisher/src/robot_state_publisher_node.cpp deleted file mode 100644 index ae54ba9..0000000 --- a/robot_state_publisher/src/robot_state_publisher_node.cpp +++ /dev/null @@ -1,82 +0,0 @@ -/********************************************************************* -* Software License Agreement (BSD License) -* -* Copyright (c) 2008, Willow Garage, Inc. -* All rights reserved. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions -* are met: -* -* * Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* * Redistributions in binary form must reproduce the above -* copyright notice, this list of conditions and the following -* disclaimer in the documentation and/or other materials provided -* with the distribution. -* * Neither the name of the Willow Garage nor the names of its -* contributors may be used to endorse or promote products derived -* from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -* POSSIBILITY OF SUCH DAMAGE. -*********************************************************************/ - -/* Author: Wim Meeussen */ - -#include -#include -#include -#include -#include "robot_state_publisher/joint_state_listener.h" - -using namespace std; -using namespace ros; -using namespace KDL; -using namespace robot_state_publisher; - - - -// ---------------------------------- -// ----- MAIN ----------------------- -// ---------------------------------- -int main(int argc, char** argv) -{ - // Initialize ros - ros::init(argc, argv, "robot_state_publisher"); - NodeHandle node; - - // gets the location of the robot description on the parameter server - string full_param_name; - node.searchParam("robot_description",full_param_name); - string robot_desc; - - // constructs a kdl tree from the robot model - node.param(full_param_name, robot_desc, string()); - Tree tree; - if (!kdl_parser::treeFromString(robot_desc, tree)){ - ROS_ERROR("Failed to extract kdl tree from xml robot description"); - return -1; - } - - if (tree.getNrOfSegments() == 0){ - ROS_WARN("Robot state publisher got an empty tree and cannot publish any state to tf"); - ros::spin(); - } - else{ - JointStateListener state_publisher(tree); - ros::spin(); - } - - return 0; -} diff --git a/robot_state_publisher/test/test_two_links_fixed_joint.cpp b/robot_state_publisher/test/test_two_links_fixed_joint.cpp index f0355c0..530ffd1 100644 --- a/robot_state_publisher/test/test_two_links_fixed_joint.cpp +++ b/robot_state_publisher/test/test_two_links_fixed_joint.cpp @@ -78,15 +78,9 @@ TEST_F(TestPublisher, test) ROS_INFO("Creating tf listener"); TransformListener tf; - ROS_INFO("Publishing joint state to robot state publisher"); - ros::NodeHandle n; - ros::Publisher js_pub = n.advertise("joint_states", 100); - sensor_msgs::JointState js_msg; - for (unsigned int i=0; i<100; i++){ - js_msg.header.stamp = ros::Time::now(); - js_pub.publish(js_msg); - ros::Duration(0.1).sleep(); - } + // don't need to publish joint state for tree with only fixed joints + // wait for tf data to come in + ros::Duration(10.0).sleep(); ASSERT_TRUE(tf.canTransform("link1", "link2", Time())); ASSERT_FALSE(tf.canTransform("base_link", "wim_link", Time())); From cd2a20999424ae948b5232a170ed8ee8beab6739 Mon Sep 17 00:00:00 2001 From: wim Date: Fri, 25 Jun 2010 17:49:50 +0000 Subject: [PATCH 195/245] getting ready for 1.1.5 release --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6a755b5..522e855 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,4 +16,4 @@ set(ROSPACK_MAKEDIST true) # variables. #list(APPEND CPACK_SOURCE_IGNORE_FILES /core/experimental) -rosbuild_make_distribution(1.1.4) +rosbuild_make_distribution(1.1.5) From 12a8e7ead37ca3a02f91fc0bb3d88eae265ca8dc Mon Sep 17 00:00:00 2001 From: wim Date: Fri, 25 Jun 2010 22:50:35 +0000 Subject: [PATCH 196/245] getting ready for 1.2.0 release --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 522e855..800105b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,4 +16,4 @@ set(ROSPACK_MAKEDIST true) # variables. #list(APPEND CPACK_SOURCE_IGNORE_FILES /core/experimental) -rosbuild_make_distribution(1.1.5) +rosbuild_make_distribution(1.2.0) From b78a3ba597873448718070c21af696d89889c7d6 Mon Sep 17 00:00:00 2001 From: wim Date: Mon, 28 Jun 2010 21:07:36 +0000 Subject: [PATCH 197/245] deprecate field 'reference_position --- urdf/src/joint.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/urdf/src/joint.cpp b/urdf/src/joint.cpp index 87ad46e..c696d95 100644 --- a/urdf/src/joint.cpp +++ b/urdf/src/joint.cpp @@ -275,6 +275,7 @@ bool JointCalibration::initXml(TiXmlElement* config) } else { + ROS_WARN("The field 'reference_position' of a joint calibraiton is deprecated. Use the 'rising' and 'falling' fields instead."); try { this->reference_position = boost::lexical_cast(reference_position_str); From dc22f6379153bda35190afce95e4d674ef373b06 Mon Sep 17 00:00:00 2001 From: wim Date: Wed, 7 Jul 2010 23:56:06 +0000 Subject: [PATCH 198/245] preparing for 1.2.1 release --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 800105b..049c5e3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,4 +16,4 @@ set(ROSPACK_MAKEDIST true) # variables. #list(APPEND CPACK_SOURCE_IGNORE_FILES /core/experimental) -rosbuild_make_distribution(1.2.0) +rosbuild_make_distribution(1.2.1) From 1b30be26e61197d3806c238eb2fc01907f35bb27 Mon Sep 17 00:00:00 2001 From: wim Date: Mon, 12 Jul 2010 16:34:22 +0000 Subject: [PATCH 199/245] better error message when no links are found in urdf file --- urdf/src/model.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/urdf/src/model.cpp b/urdf/src/model.cpp index 6a670a6..dfade4c 100644 --- a/urdf/src/model.cpp +++ b/urdf/src/model.cpp @@ -212,6 +212,11 @@ bool Model::initXml(TiXmlElement *robot_xml) return false; } } + if (this->links_.empty()){ + ROS_ERROR("No link elements found in urdf file"); + return false; + } + // Get all Joint elements for (TiXmlElement* joint_xml = robot_xml->FirstChildElement("joint"); joint_xml; joint_xml = joint_xml->NextSiblingElement("joint")) { From 89be14e58b8925d19affbe534317ea7c508e5ccb Mon Sep 17 00:00:00 2001 From: hsu Date: Mon, 12 Jul 2010 22:04:37 +0000 Subject: [PATCH 200/245] fix NaN on normalize for ticket #4247 --- urdf/include/urdf/pose.h | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/urdf/include/urdf/pose.h b/urdf/include/urdf/pose.h index 48e57ab..89e0ec9 100644 --- a/urdf/include/urdf/pose.h +++ b/urdf/include/urdf/pose.h @@ -168,10 +168,20 @@ public: this->y * this->y + this->z * this->z + this->w * this->w); - this->x /= s; - this->y /= s; - this->z /= s; - this->w /= s; + if (s == 0.0) + { + this->x = 0.0; + this->y = 0.0; + this->z = 0.0; + this->w = 1.0; + } + else + { + this->x /= s; + this->y /= s; + this->z /= s; + this->w /= s; + } }; }; From 3438a44a14429fb8d600fc8fd050cbcec4133e52 Mon Sep 17 00:00:00 2001 From: wim Date: Tue, 13 Jul 2010 00:23:37 +0000 Subject: [PATCH 201/245] construct kdl object directly from quaternion --- kdl_parser/src/kdl_parser.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/kdl_parser/src/kdl_parser.cpp b/kdl_parser/src/kdl_parser.cpp index f5abc69..114aa40 100644 --- a/kdl_parser/src/kdl_parser.cpp +++ b/kdl_parser/src/kdl_parser.cpp @@ -53,9 +53,7 @@ Vector toKdl(urdf::Vector3 v) // construct rotation Rotation toKdl(urdf::Rotation r) { - double roll, pitch, yaw; - r.getRPY(roll, pitch, yaw); - return Rotation::RPY(roll, pitch, yaw); + return Rotation::Quaternion(r.x, r.y, r.z, r.w); } // construct pose From cc896f2f2f8f28333f7c3893e3d45038a0a0e794 Mon Sep 17 00:00:00 2001 From: hsu Date: Tue, 13 Jul 2010 00:38:52 +0000 Subject: [PATCH 202/245] fix singularity for getRPY. need to add unit test for this particular problem. --- urdf/include/urdf/pose.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/urdf/include/urdf/pose.h b/urdf/include/urdf/pose.h index 89e0ec9..74eaef5 100644 --- a/urdf/include/urdf/pose.h +++ b/urdf/include/urdf/pose.h @@ -114,7 +114,8 @@ public: sqw = this->w * this->w; roll = atan2(2 * (this->y*this->z + this->w*this->x), sqw - sqx - sqy + sqz); - pitch = asin(-2 * (this->x*this->z - this->w*this->y)); + double sarg = -2 * (this->x*this->z - this->w*this->y); + pitch = sarg <= 1.0 ? -0.5*M_PI : (sarg >= 1.0 ? 0.5*M_PI : asin(sarg)); yaw = atan2(2 * (this->x*this->y + this->w*this->z), sqw + sqx - sqy - sqz); }; From 489af450677671a677b293ce1b91f6a8b21b6adb Mon Sep 17 00:00:00 2001 From: hsu Date: Tue, 13 Jul 2010 01:30:08 +0000 Subject: [PATCH 203/245] update test to check for nan getRPY per #4247 --- urdf/test/singularity.urdf | 31 ++++++++++++++ urdf/test/test_robot_model_parser.cpp | 52 +++++++++++++++++++++++- urdf/test/test_robot_model_parser.launch | 2 +- 3 files changed, 82 insertions(+), 3 deletions(-) create mode 100644 urdf/test/singularity.urdf diff --git a/urdf/test/singularity.urdf b/urdf/test/singularity.urdf new file mode 100644 index 0000000..f86fa92 --- /dev/null +++ b/urdf/test/singularity.urdf @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/urdf/test/test_robot_model_parser.cpp b/urdf/test/test_robot_model_parser.cpp index 0be1a77..f238762 100644 --- a/urdf/test/test_robot_model_parser.cpp +++ b/urdf/test/test_robot_model_parser.cpp @@ -52,6 +52,21 @@ class TestParser : public testing::Test public: Model robot; + bool checkModel() + { + // get root link + boost::shared_ptr root_link=this->robot.getRoot(); + if (!root_link) + { + ROS_ERROR("no root link %s",this->robot.getName().c_str()); + return false; + } + + // go through entire tree + return this->traverse_tree(root_link); + + }; + protected: /// constructor TestParser() @@ -63,6 +78,36 @@ protected: ~TestParser() { } + + bool traverse_tree(boost::shared_ptr link,int level = 0) + { + level+=2; + int count = 0; + for (std::vector >::const_iterator child = link->child_links.begin(); child != link->child_links.end(); child++) + { + if (*child) + { + // check rpy + double roll,pitch,yaw; + (*child)->parent_joint->parent_to_joint_origin_transform.rotation.getRPY(roll,pitch,yaw); + + if (isnan(roll) || isnan(pitch) || isnan(yaw)) + { + ROS_ERROR("getRPY() returned nan!"); + return false; + } + // recurse down the tree + return this->traverse_tree(*child,level); + } + else + { + ROS_ERROR("root link: %s has a null child!",link->name.c_str()); + return false; + } + } + // no children + return true; + }; }; @@ -71,15 +116,18 @@ protected: TEST_F(TestParser, test) { std::string folder = std::string(g_argv[1]) + "/test/"; - printf("Folder %s",folder.c_str()); + ROS_INFO("Folder %s",folder.c_str()); for (int i=2; i - + From a6203bdf1127af9446eab639a4f907c2d739b93c Mon Sep 17 00:00:00 2001 From: hsu Date: Tue, 13 Jul 2010 05:16:21 +0000 Subject: [PATCH 204/245] #4247 fix wrong coefficient in previous correction --- urdf/include/urdf/pose.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/urdf/include/urdf/pose.h b/urdf/include/urdf/pose.h index 74eaef5..dbf81ee 100644 --- a/urdf/include/urdf/pose.h +++ b/urdf/include/urdf/pose.h @@ -115,7 +115,7 @@ public: roll = atan2(2 * (this->y*this->z + this->w*this->x), sqw - sqx - sqy + sqz); double sarg = -2 * (this->x*this->z - this->w*this->y); - pitch = sarg <= 1.0 ? -0.5*M_PI : (sarg >= 1.0 ? 0.5*M_PI : asin(sarg)); + pitch = sarg <= 1.0 ? -2.0*M_PI : (sarg >= 1.0 ? 2.0*M_PI : asin(sarg)); yaw = atan2(2 * (this->x*this->y + this->w*this->z), sqw + sqx - sqy - sqz); }; From 4338f41fa6525e94ce420aefa985e8e8fd09fe29 Mon Sep 17 00:00:00 2001 From: hsu Date: Tue, 13 Jul 2010 05:19:46 +0000 Subject: [PATCH 205/245] #4247 fix wrong coefficient in previous correction --- urdf/include/urdf/pose.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/urdf/include/urdf/pose.h b/urdf/include/urdf/pose.h index dbf81ee..9013806 100644 --- a/urdf/include/urdf/pose.h +++ b/urdf/include/urdf/pose.h @@ -115,7 +115,7 @@ public: roll = atan2(2 * (this->y*this->z + this->w*this->x), sqw - sqx - sqy + sqz); double sarg = -2 * (this->x*this->z - this->w*this->y); - pitch = sarg <= 1.0 ? -2.0*M_PI : (sarg >= 1.0 ? 2.0*M_PI : asin(sarg)); + pitch = sarg <= -1.0 ? -0.5*M_PI : (sarg >= 1.0 ? 0.5*M_PI : asin(sarg)); yaw = atan2(2 * (this->x*this->y + this->w*this->z), sqw + sqx - sqy - sqz); }; From 2f7c19c8a2569b9a6827bf79dd996ddc45c9b49d Mon Sep 17 00:00:00 2001 From: wim Date: Tue, 13 Jul 2010 16:28:18 +0000 Subject: [PATCH 206/245] preparing for 1.2.2 release --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 049c5e3..8d019f5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,4 +16,4 @@ set(ROSPACK_MAKEDIST true) # variables. #list(APPEND CPACK_SOURCE_IGNORE_FILES /core/experimental) -rosbuild_make_distribution(1.2.1) +rosbuild_make_distribution(1.2.2) From 2cac8c6027c4291517967a12a71bd1ee26b9049b Mon Sep 17 00:00:00 2001 From: rdiankov Date: Fri, 23 Jul 2010 04:35:48 +0000 Subject: [PATCH 207/245] fixed visual model transforms in urdf_to_collada exporter --- collada_urdf/src/collada_writer.cpp | 64 ++++++++++++++++++----------- 1 file changed, 39 insertions(+), 25 deletions(-) diff --git a/collada_urdf/src/collada_writer.cpp b/collada_urdf/src/collada_writer.cpp index f34b9ea..a9a703f 100644 --- a/collada_urdf/src/collada_writer.cpp +++ b/collada_urdf/src/collada_writer.cpp @@ -198,13 +198,19 @@ void ColladaWriter::addGeometries() { for (map >::const_iterator i = robot_.links_.begin(); i != robot_.links_.end(); i++) { shared_ptr urdf_link = i->second; - - if (urdf_link->visual == NULL || urdf_link->visual->geometry == NULL) + boost::shared_ptr< urdf::Geometry > geometry; + if( !!urdf_link->visual ) { + geometry = urdf_link->visual->geometry; + } + else if (!!urdf_link->collision ) { + geometry = urdf_link->collision->geometry; + } + if( !geometry ) { continue; - - switch (urdf_link->visual->geometry->type) { + } + switch (geometry->type) { case urdf::Geometry::MESH: { - urdf::Mesh* urdf_mesh = (urdf::Mesh*) urdf_link->visual->geometry.get(); + urdf::Mesh* urdf_mesh = (urdf::Mesh*) geometry.get(); string filename = urdf_mesh->filename; urdf::Vector3 scale = urdf_mesh->scale; // @todo use scale @@ -235,7 +241,7 @@ void ColladaWriter::addGeometries() { break; } default: { - std::cerr << "Warning: geometry type " << urdf_link->visual->geometry->type << " of link " << urdf_link->name << " not exported" << std::endl; + std::cerr << "Warning: geometry type " << geometry->type << " of link " << urdf_link->name << " not exported" << std::endl; break; } } @@ -777,31 +783,23 @@ void ColladaWriter::addVisualLink(shared_ptr urdf_link, daeEle domNodeRef parent_node = node; { - if (urdf_link->parent_joint != NULL) { + if (!!urdf_link->parent_joint) { // x y z addTranslate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.position, NULL, true); // x y z w addRotate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.rotation, NULL, true); - if (urdf_link->visual != NULL) { - // - domNodeRef visual_node = daeSafeCast(node->add(COLLADA_ELEMENT_NODE)); - string visual_sid("visual"); - string visual_id = node_id + "." + visual_sid; - visual_node->setName("visual"); - visual_node->setSid(visual_sid.c_str()); - visual_node->setId(visual_id.c_str()); - - parent_node = visual_node; - - // x y z - addTranslate(parent_node, urdf_link->visual->origin.position, NULL, true); - // x y z w - addRotate(parent_node, urdf_link->visual->origin.rotation, NULL, true); - } - + domRotateRef joint_rotate; // x y z angle - domRotateRef joint_rotate = addRotate(parent_node, urdf_link->parent_joint->parent_to_joint_origin_transform.rotation); + //joint_rotate = addRotate(parent_node, urdf_link->parent_joint->parent_to_joint_origin_transform.rotation); + + joint_rotate = daeSafeCast(parent_node->add(COLLADA_ELEMENT_ROTATE)); + joint_rotate->getValue().setCount(4); + joint_rotate->getValue()[0] = urdf_link->parent_joint->axis.x; + joint_rotate->getValue()[1] = urdf_link->parent_joint->axis.y; + joint_rotate->getValue()[2] = urdf_link->parent_joint->axis.z; + joint_rotate->getValue()[3] = 0; + string joint_sid = joint_sids_[urdf_link->parent_joint->name]; string joint_rotate_sid = string("node_") + joint_sid + string("_axis0"); joint_rotate->setSid(joint_rotate_sid.c_str()); @@ -809,6 +807,22 @@ void ColladaWriter::addVisualLink(shared_ptr urdf_link, daeEle node_ids_[urdf_link->parent_joint->name] = node_id; } + if (!!urdf_link->visual) { + // + domNodeRef visual_node = daeSafeCast(node->add(COLLADA_ELEMENT_NODE)); + string visual_sid("visual"); + string visual_id = node_id + "." + visual_sid; + visual_node->setName("visual"); + visual_node->setSid(visual_sid.c_str()); + visual_node->setId(visual_id.c_str()); + parent_node = visual_node; + + // x y z + addTranslate(parent_node, urdf_link->visual->origin.position, NULL, true); + // x y z w + addRotate(parent_node, urdf_link->visual->origin.rotation, NULL, true); + } + // map::const_iterator i = geometry_ids_.find(urdf_link->name); if (i != geometry_ids_.end()) { From 84dee0978652aa8a079c3dc75a80564a0f769872 Mon Sep 17 00:00:00 2001 From: jfaust Date: Tue, 31 Aug 2010 18:51:05 +0000 Subject: [PATCH 208/245] Upgrade assimp to svn rev 811 -- this includes some fixes for collada loading as well as uri syntax --- assimp/Makefile | 2 +- assimp/assimp.patch | 87 +++++++++++++++++++++------------------------ 2 files changed, 42 insertions(+), 47 deletions(-) diff --git a/assimp/Makefile b/assimp/Makefile index 4702f19..02abba6 100644 --- a/assimp/Makefile +++ b/assimp/Makefile @@ -2,7 +2,7 @@ all: installed PACKAGE_NAME=`rospack find assimp` # Regular download -TARBALL_NAME = assimp-1.1.700 +TARBALL_NAME = assimp-svn-811 TARBALL = build/$(TARBALL_NAME).tar.gz TARBALL_URL = http://pr.willowgarage.com/downloads/$(TARBALL_NAME).tar.gz TARBALL_PATCH = assimp.patch diff --git a/assimp/assimp.patch b/assimp/assimp.patch index 48fd01b..2e2866d 100644 --- a/assimp/assimp.patch +++ b/assimp/assimp.patch @@ -1,61 +1,56 @@ ---- CMakeLists.txt.old 2010-05-21 11:08:29.598051070 -0700 -+++ CMakeLists.txt 2010-05-21 11:19:28.595500290 -0700 -@@ -20,6 +20,21 @@ SET( INCLUDE_INSTALL_DIR "${CMAKE_INSTAL - SET( BIN_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH - "Path the tool executables are installed to." ) +Index: code/CMakeLists.txt +=================================================================== +--- code/CMakeLists.txt (revision 811) ++++ code/CMakeLists.txt (working copy) +@@ -742,6 +742,8 @@ + SOVERSION ${LIBRARY_SOVERSION} + ) + ++target_link_libraries(assimp ${boost_libraries}) ++ + INSTALL( TARGETS assimp DESTINATION ${LIB_INSTALL_DIR} ) + INSTALL( FILES ${PUBLIC_HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR}/assimp ) + INSTALL( FILES ${COMPILER_HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR}/assimp/Compiler ) +Index: CMakeLists.txt +=================================================================== +--- CMakeLists.txt (revision 811) ++++ CMakeLists.txt (working copy) +@@ -25,26 +25,21 @@ + CONFIGURE_FILE( "${CMAKE_SOURCE_DIR}/assimp.pc.in" "${CMAKE_BINARY_DIR}/assimp.pc" @ONLY ) + INSTALL( FILES "${CMAKE_BINARY_DIR}/assimp.pc" DESTINATION ${LIB_INSTALL_DIR}/pkgconfig/ ) +-# Globally enbale Boost resp. the Boost workaround – it is also needed by the +-# tools which include the Assimp headers. +-IF ( ENABLE_BOOST_WORKAROUND ) +- INCLUDE_DIRECTORIES( BoostWorkaround ) +- ADD_DEFINITIONS( -DASSIMP_BUILD_BOOST_WORKAROUND ) +- MESSAGE( STATUS "Building a non-boost version of Assimp." ) +-ELSE ( ENABLE_BOOST_WORKAROUND ) +- FIND_PACKAGE( Boost 1.35 ) +SET (boost_include_dirs "" CACHE STRING "Boost include paths. Use this to override automatic detection.") +SET (boost_library_dirs "" CACHE STRING "Boost library paths. Use this to override automatic detection.") +SET (boost_libraries "" CACHE STRING "Boost libraries. Use this to override automatic detection.") -+ -+ + +- IF ( NOT Boost_FOUND ) +- MESSAGE( FATAL_ERROR +- "Boost libraries (http://www.boost.org/) not found. " +- "You can build a non-boost version of Assimp with slightly reduced " +- "functionality by specifying -DENABLE_BOOST_WORKAROUND=ON." +- ) +- ENDIF ( NOT Boost_FOUND ) + +- INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIRS} ) +-ENDIF ( ENABLE_BOOST_WORKAROUND ) +message(status " debug: ${boost_include_dirs} ${boost_libraries}" ) +INCLUDE_DIRECTORIES( + include + ${boost_include_dirs} +) -+ + +LINK_DIRECTORIES( + ${boost_library_dirs} +) + - # Libs ADD_SUBDIRECTORY( code/ ) IF ( WIN32 ) ---- code/CMakeLists.txt.old 2010-05-21 11:25:22.057223769 -0700 -+++ code/CMakeLists.txt 2010-05-21 11:25:47.295533481 -0700 -@@ -1,25 +1,6 @@ - SET( LIBRARY_VERSION "1.0.0" ) - SET( LIBRARY_SOVERSION "1" ) - --IF ( ENABLE_BOOST_WORKAROUND ) -- INCLUDE_DIRECTORIES( BoostWorkaround ) -- ADD_DEFINITIONS( -DASSIMP_BUILD_BOOST_WORKAROUND ) -- MESSAGE( STATUS "Building a non-boost version of Assimp." ) --ELSE ( ENABLE_BOOST_WORKAROUND ) -- FIND_PACKAGE( Boost 1.35 ) -- -- IF ( NOT Boost_FOUND ) -- MESSAGE( FATAL_ERROR -- "Boost libraries (http://www.boost.org/) not found. " -- "You can build a non-boost version of Assimp with slightly reduced " -- "functionality by specifying -DENABLE_BOOST_WORKAROUND=ON." -- ) -- ENDIF ( NOT Boost_FOUND ) -- -- INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIRS} ) --ENDIF ( ENABLE_BOOST_WORKAROUND ) -- -- - # - # Listing and grouping of all the source files for use with IDE project - # generators. -@@ -691,6 +672,8 @@ ADD_LIBRARY( assimp SHARED - ${COMPILER_HEADERS} - ) - -+TARGET_LINK_LIBRARIES( assimp ${boost_libraries}) -+ - ADD_DEFINITIONS( -DASSIMP_BUILD_DLL_EXPORT ) - - if ( WIN32 ) + ADD_SUBDIRECTORY( test/ ) From 5e0e8f7f9d442e5f5b467c28c2bf5f5b432c8b3f Mon Sep 17 00:00:00 2001 From: wim Date: Wed, 29 Sep 2010 17:58:03 +0000 Subject: [PATCH 209/245] Robot state publisher supports full trees and flattened trees --- .../robot_state_publisher.h | 1 + .../treefksolverposfull_recursive.hpp | 11 +++++-- .../src/robot_state_publisher.cpp | 22 +++++++++---- .../src/treefksolverposfull_recursive.cpp | 33 +++++++++++-------- 4 files changed, 43 insertions(+), 24 deletions(-) diff --git a/robot_state_publisher/include/robot_state_publisher/robot_state_publisher.h b/robot_state_publisher/include/robot_state_publisher/robot_state_publisher.h index 67c68be..5d0b7ac 100644 --- a/robot_state_publisher/include/robot_state_publisher/robot_state_publisher.h +++ b/robot_state_publisher/include/robot_state_publisher/robot_state_publisher.h @@ -65,6 +65,7 @@ public: private: ros::Publisher tf_publisher_; + bool flatten_tree_; KDL::Tree tree_; boost::scoped_ptr solver_; std::string root_; diff --git a/robot_state_publisher/include/robot_state_publisher/treefksolverposfull_recursive.hpp b/robot_state_publisher/include/robot_state_publisher/treefksolverposfull_recursive.hpp index 4c3e9ea..1d11b52 100644 --- a/robot_state_publisher/include/robot_state_publisher/treefksolverposfull_recursive.hpp +++ b/robot_state_publisher/include/robot_state_publisher/treefksolverposfull_recursive.hpp @@ -24,6 +24,8 @@ #define KDLTREEFKSOLVERPOSFULL_RECURSIVE_HPP #include +#include + namespace KDL { @@ -34,11 +36,14 @@ public: TreeFkSolverPosFull_recursive(const Tree& _tree); ~TreeFkSolverPosFull_recursive(); - int JntToCart(const std::map& q_in, std::map& p_out); + int JntToCart(const std::map& q_in, std::map >& p_out, bool flatten_tree=true); private: - void addFrameToMap(const std::map& q_in, std::map& p_out, - const Frame& previous_frame, const SegmentMap::const_iterator this_segment); + void addFrameToMap(const std::map& q_in, + std::map >& p_out, + const tf::Stamped& previous_frame, + const SegmentMap::const_iterator this_segment, + bool flatten_tree); Tree tree; diff --git a/robot_state_publisher/src/robot_state_publisher.cpp b/robot_state_publisher/src/robot_state_publisher.cpp index ffb0405..8faadd2 100644 --- a/robot_state_publisher/src/robot_state_publisher.cpp +++ b/robot_state_publisher/src/robot_state_publisher.cpp @@ -52,6 +52,10 @@ RobotStatePublisher::RobotStatePublisher(const Tree& tree) // build tree solver solver_.reset(new TreeFkSolverPosFull_recursive(tree_)); + // get parameter to flatter tree or not + ros::NodeHandle n_private("~"); + n_private.param("flatten_tree", flatten_tree_, false); + // advertise tf message NodeHandle n; tf_publisher_ = n.advertise("/tf", 5); @@ -65,27 +69,31 @@ RobotStatePublisher::RobotStatePublisher(const Tree& tree) bool RobotStatePublisher::publishTransforms(const map& joint_positions, const Time& time) { - // calculate transforms form root to every segment in tree - map link_poses; - solver_->JntToCart(joint_positions, link_poses); + // calculate transforms + map > link_poses; + solver_->JntToCart(joint_positions, link_poses, flatten_tree_); + if (link_poses.empty()){ ROS_ERROR("Could not compute link poses. The tree or the state is invalid."); return false; } transforms_.resize(link_poses.size()); - // send transforms to tf - tf::Transform tf_frame; unsigned int i = 0; - for (map::const_iterator f=link_poses.begin(); f!=link_poses.end(); f++){ + tf::Transform tf_frame; + for (map >::const_iterator f=link_poses.begin(); f!=link_poses.end(); f++){ tf::TransformKDLToTF(f->second, transforms_[i]); transforms_[i].stamp_ = time; - transforms_[i].frame_id_ = root_; + transforms_[i].frame_id_ = f->second.frame_id_; transforms_[i].child_frame_id_ = f->first; i++; } + tf_broadcaster_.sendTransform(transforms_); return true; } } + + + diff --git a/robot_state_publisher/src/treefksolverposfull_recursive.cpp b/robot_state_publisher/src/treefksolverposfull_recursive.cpp index fd6fcd3..c4700cd 100644 --- a/robot_state_publisher/src/treefksolverposfull_recursive.cpp +++ b/robot_state_publisher/src/treefksolverposfull_recursive.cpp @@ -38,23 +38,27 @@ TreeFkSolverPosFull_recursive::~TreeFkSolverPosFull_recursive() { } -int TreeFkSolverPosFull_recursive::JntToCart(const map& q_in, map& p_out) + +int TreeFkSolverPosFull_recursive::JntToCart(const map& q_in, map >& p_out, bool flatten_tree) { // clear output p_out.clear(); - addFrameToMap(q_in, p_out, Frame::Identity(), tree.getRootSegment()); + addFrameToMap(q_in, p_out, tf::Stamped(KDL::Frame::Identity(), ros::Time(), tree.getRootSegment()->second.segment.getName()), tree.getRootSegment(), flatten_tree); return 0; } - -void TreeFkSolverPosFull_recursive::addFrameToMap(const map& q_in, map& p_out, - const Frame& previous_frame, const SegmentMap::const_iterator this_segment) + +void TreeFkSolverPosFull_recursive::addFrameToMap(const map& q_in, + map >& p_out, + const tf::Stamped& previous_frame, + const SegmentMap::const_iterator this_segment, + bool flatten_tree) { // get pose of this segment - Frame this_frame; + tf::Stamped this_frame; double jnt_p = 0; if (this_segment->second.segment.getJoint().getType() != Joint::None){ map::const_iterator jnt_pos = q_in.find(this_segment->second.segment.getJoint().getName()); @@ -64,17 +68,18 @@ void TreeFkSolverPosFull_recursive::addFrameToMap(const map& q_i } jnt_p = jnt_pos->second; } - this_frame = previous_frame * this_segment->second.segment.pose(jnt_p); - double r, p, y; - this_frame.M.GetRPY(r, p, y); + this_frame = tf::Stamped(previous_frame * this_segment->second.segment.pose(jnt_p), ros::Time(), previous_frame.frame_id_); + if (this_segment->first != tree.getRootSegment()->first) - p_out.insert(make_pair(this_segment->first, this_frame)); + p_out.insert(make_pair(this_segment->first, tf::Stamped(this_frame, ros::Time(), previous_frame.frame_id_))); // get poses of child segments - for (vector::const_iterator child=this_segment->second.children.begin(); child !=this_segment->second.children.end(); child++) - addFrameToMap(q_in, p_out, this_frame, *child); - + for (vector::const_iterator child=this_segment->second.children.begin(); child !=this_segment->second.children.end(); child++){ + if (flatten_tree) + addFrameToMap(q_in, p_out, this_frame, *child, flatten_tree); + else + addFrameToMap(q_in, p_out, tf::Stamped(KDL::Frame::Identity(), ros::Time(), this_segment->first), *child, flatten_tree); + } } - } From 78ee3ed5e5c0126148772f4cd020a48c1376fff2 Mon Sep 17 00:00:00 2001 From: wim Date: Wed, 29 Sep 2010 18:06:37 +0000 Subject: [PATCH 210/245] remove deprecated reference position. #4216 --- urdf/src/joint.cpp | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/urdf/src/joint.cpp b/urdf/src/joint.cpp index c696d95..89b59b9 100644 --- a/urdf/src/joint.cpp +++ b/urdf/src/joint.cpp @@ -266,27 +266,6 @@ bool JointCalibration::initXml(TiXmlElement* config) { this->clear(); - // Get reference_position - const char* reference_position_str = config->Attribute("reference_position"); - if (reference_position_str == NULL) - { - ROS_DEBUG("joint calibration: no reference_position, using default value"); - this->reference_position = 0; - } - else - { - ROS_WARN("The field 'reference_position' of a joint calibraiton is deprecated. Use the 'rising' and 'falling' fields instead."); - try - { - this->reference_position = boost::lexical_cast(reference_position_str); - } - catch (boost::bad_lexical_cast &e) - { - ROS_ERROR("reference_position value (%s) is not a float",reference_position_str); - return false; - } - } - // Get rising edge position const char* rising_position_str = config->Attribute("rising"); if (rising_position_str == NULL) From 4de63d55a87bf4678b6a3ab647b975e244f8d6b2 Mon Sep 17 00:00:00 2001 From: wim Date: Wed, 29 Sep 2010 18:46:10 +0000 Subject: [PATCH 211/245] remove deprecated support for loating joint --- urdf/src/model.cpp | 13 +- urdf/test/pr2_desc.urdf | 698 ++--- urdf/test/pr2_desc_explicit_world.urdf | 3448 ---------------------- urdf/test/pr2_desc_no_joint.urdf | 1 - urdf/test/test_robot_model_parser.launch | 2 +- 5 files changed, 280 insertions(+), 3882 deletions(-) delete mode 100644 urdf/test/pr2_desc_explicit_world.urdf diff --git a/urdf/src/model.cpp b/urdf/src/model.cpp index dfade4c..12ef8bc 100644 --- a/urdf/src/model.cpp +++ b/urdf/src/model.cpp @@ -277,20 +277,11 @@ bool Model::initTree(std::map &parent_link_tree) std::string child_link_name = joint->second->child_link_name; ROS_DEBUG("build tree: joint: '%s' has parent link '%s' and child link '%s'", joint->first.c_str(), parent_link_name.c_str(),child_link_name.c_str()); - if (parent_link_name.empty() && !child_link_name.empty()) + if (parent_link_name.empty() || child_link_name.empty()) { - ROS_ERROR(" Joint %s specifies child link but not parent link.",(joint->second)->name.c_str()); + ROS_ERROR(" Joint %s is missing a parent and/or child link specification.",(joint->second)->name.c_str()); return false; } - else if (!parent_link_name.empty() && child_link_name.empty()) - { - ROS_ERROR(" Joint %s specifies parent link but not child link.",(joint->second)->name.c_str()); - return false; - } - else if (parent_link_name.empty() && child_link_name.empty()) - { - ROS_WARN(" Joint %s specifies no parent link and no child link. The Boxturtle urdf parser had a bug that allowed this type of joints, but this is not a valid joint according to the URDF spec.",(joint->second)->name.c_str()); - } else { // find child and parent links diff --git a/urdf/test/pr2_desc.urdf b/urdf/test/pr2_desc.urdf index ebef6c6..cbc5c77 100644 --- a/urdf/test/pr2_desc.urdf +++ b/urdf/test/pr2_desc.urdf @@ -1,6 +1,6 @@ - + @@ -14,6 +14,7 @@ + @@ -54,6 +55,9 @@ + + + @@ -83,7 +87,7 @@ - + @@ -156,7 +160,7 @@ false -129.998394137 129.998394137 - 0.05 + 0.08 10.0 0.01 20 @@ -175,8 +179,7 @@ - - + @@ -202,7 +205,7 @@ - + -79.2380952381 @@ -226,7 +229,7 @@ - + @@ -243,9 +246,8 @@ - - + 79.2380952381 @@ -269,7 +271,7 @@ - + @@ -286,9 +288,8 @@ - - + -79.2380952381 @@ -301,8 +302,7 @@ - - + @@ -328,7 +328,7 @@ - + -79.2380952381 @@ -352,7 +352,7 @@ - + @@ -369,9 +369,8 @@ - - + 79.2380952381 @@ -395,7 +394,7 @@ - + @@ -412,9 +411,8 @@ - - + -79.2380952381 @@ -427,8 +425,7 @@ - - + @@ -454,7 +451,7 @@ - + -79.2380952381 @@ -478,7 +475,7 @@ - + @@ -495,9 +492,8 @@ - - + 79.2380952381 @@ -521,7 +517,7 @@ - + @@ -538,9 +534,8 @@ - - + -79.2380952381 @@ -553,8 +548,7 @@ - - + @@ -580,7 +574,7 @@ - + -79.2380952381 @@ -604,7 +598,7 @@ - + @@ -621,9 +615,8 @@ - - + 79.2380952381 @@ -647,7 +640,7 @@ - + @@ -664,9 +657,8 @@ - - + -79.2380952381 @@ -686,7 +678,6 @@ - @@ -708,8 +699,7 @@ - - + @@ -725,7 +715,7 @@ - + @@ -747,9 +737,8 @@ - - + -52143.33 @@ -799,8 +788,7 @@ - - + @@ -815,21 +803,18 @@ - + - - - - - + + 6.0 @@ -839,8 +824,7 @@ - - + @@ -855,7 +839,7 @@ - + @@ -866,10 +850,8 @@ - - - - + + 6.0 @@ -1375,13 +1357,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + 15.0 + stereo_projection_pattern_high_res_red.png + projector_wg6802418_child_frame + stereo_projection_pattern_filter.png + projector_wg6802418_controller/image + projector_wg6802418_controller/projector + 0.785398163397 + 0.4 + 10 + + - - + @@ -1396,7 +1443,7 @@ - + @@ -1442,7 +1489,7 @@ false -79.9999999086 79.9999999086 - 0.05 + 0.08 10.0 0.01 40 @@ -1457,9 +1504,8 @@ - - - + + -6.05 @@ -1476,8 +1522,7 @@ - - + @@ -1488,7 +1533,7 @@ - + @@ -1505,8 +1550,7 @@ - - + @@ -1521,7 +1565,7 @@ - + @@ -1540,8 +1584,7 @@ - - + @@ -1575,23 +1618,12 @@ - + 32.6525111499 - - r_shoulder_pan_link_geom - 100.0 - - true - 100.0 - r_shoulder_pan_bumper - - - - true @@ -1599,28 +1631,18 @@ - - r_shoulder_lift_link_geom - 100.0 - - true - 100.0 - r_r_shoulder_lift_bumper - - - true - + 63.1552452977 - + 61.8948225713 @@ -1640,7 +1662,7 @@ - + @@ -1652,17 +1674,6 @@ - - r_upper_arm_link_geom - - 100.0 - - true - 100.0 - r_upper_arm_bumper - - - true @@ -1670,8 +1681,7 @@ - - + @@ -1706,7 +1716,7 @@ - + -90.5142857143 @@ -1717,8 +1727,7 @@ - - + @@ -1733,7 +1742,7 @@ - + @@ -1748,24 +1757,13 @@ -1.0 - - r_elbow_flex_link_geom - 100.0 - - true - 100.0 - r_elbow_flex_bumper - - - - true - + -36.167452007 @@ -1785,7 +1783,7 @@ - + @@ -1802,8 +1800,7 @@ - - + @@ -1817,7 +1814,7 @@ - + @@ -1834,8 +1831,7 @@ - - + @@ -1864,30 +1860,9 @@ true - - r_forearm_link_geom - 100.0 - - true - 100.0 - r_forearm_bumper - - - true - - r_wrist_flex_link_geom - 100.0 - - true - 100.0 - r_wrist_flex_bumper - - - - @@ -1895,22 +1870,12 @@ true - - r_wrist_roll_link_geom - 100.0 - - true - 100.0 - r_wrist_roll_bumper - - - - + @@ -1930,7 +1895,7 @@ - + @@ -1996,7 +1961,7 @@ - + @@ -2026,7 +1991,7 @@ - + @@ -2038,70 +2003,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -2120,7 +2021,7 @@ - + @@ -2150,7 +2051,7 @@ - + @@ -2170,6 +2071,7 @@ true 100.0 + r_gripper_l_finger_link r_gripper_l_finger_bumper @@ -2178,7 +2080,6 @@ - @@ -2194,6 +2095,7 @@ 100.0 true + r_gripper_r_finger_link 100.0 r_gripper_r_finger_bumper @@ -2203,7 +2105,6 @@ - @@ -2219,6 +2120,7 @@ 100.0 true + r_gripper_l_finger_tip_link 100.0 r_gripper_l_finger_tip_bumper @@ -2228,7 +2130,6 @@ - @@ -2244,6 +2145,7 @@ 100.0 true + r_gripper_r_finger_tip_link 100.0 r_gripper_r_finger_tip_bumper @@ -2253,7 +2155,6 @@ - @@ -2281,6 +2182,58 @@ + + true + 0.17126 + 7.7562e-05 + 1.49095e-06 + -9.83385e-06 + 0.000197083 + -3.06125e-06 + 0.000181054 + 0.03598 + 0.0173 + -0.00164 + 0.82991 -0.157 0.790675 + 0 -0 0 + true + false + + + true + 0.17389 + 7.73841e-05 + -2.09309e-06 + -8.36228e-06 + 0.000198474 + 2.4611e-06 + 0.00018107 + 0.03576 + -0.01736 + -0.00095 + 0.82991 -0.219 0.790675 + 0 -0 0 + true + false + + + + + r_gripper_r_parallel_link + r_gripper_palm_link + r_gripper_palm_link + 0 0 -1 + 0.2 + 0.05891 -0.031 0 + + + r_gripper_l_parallel_link + r_gripper_palm_link + r_gripper_palm_link + 0 0 1 + 0.2 + 0.05891 0.031 0 + r_gripper_r_parallel_link r_gripper_r_finger_tip_link @@ -2327,11 +2280,11 @@ true 100.0 + r_gripper_palm_link r_gripper_palm_bumper - @@ -2346,7 +2299,7 @@ - + - - + @@ -2382,7 +2332,7 @@ - + @@ -2399,8 +2349,7 @@ - - + @@ -2415,7 +2364,7 @@ - + @@ -2434,8 +2383,7 @@ - - + @@ -2469,23 +2417,12 @@ - + 32.6525111499 - - l_shoulder_pan_link_geom - 100.0 - - true - 100.0 - l_shoulder_pan_bumper - - - - true @@ -2493,28 +2430,18 @@ - - l_shoulder_lift_link_geom - 100.0 - - true - 100.0 - l_r_shoulder_lift_bumper - - - true - + 63.1552452977 - + 61.8948225713 @@ -2534,7 +2461,7 @@ - + @@ -2546,17 +2473,6 @@ - - l_upper_arm_link_geom - - 100.0 - - true - 100.0 - l_upper_arm_bumper - - - true @@ -2564,8 +2480,7 @@ - - + @@ -2600,7 +2515,7 @@ - + -90.5142857143 @@ -2611,8 +2526,7 @@ - - + @@ -2627,7 +2541,7 @@ - + @@ -2642,24 +2556,13 @@ -1.0 - - l_elbow_flex_link_geom - 100.0 - - true - 100.0 - l_elbow_flex_bumper - - - - true - + -36.167452007 @@ -2679,7 +2582,7 @@ - + @@ -2696,8 +2599,7 @@ - - + @@ -2711,7 +2613,7 @@ - + @@ -2728,8 +2630,7 @@ - - + @@ -2758,30 +2659,9 @@ true - - l_forearm_link_geom - 100.0 - - true - 100.0 - l_forearm_bumper - - - true - - l_wrist_flex_link_geom - 100.0 - - true - 100.0 - l_wrist_flex_bumper - - - - @@ -2789,22 +2669,12 @@ true - - l_wrist_roll_link_geom - 100.0 - - true - 100.0 - l_wrist_roll_bumper - - - - + @@ -2824,7 +2694,7 @@ - + @@ -2890,7 +2760,7 @@ - + @@ -2920,7 +2790,7 @@ - + @@ -2932,70 +2802,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -3014,7 +2820,7 @@ - + @@ -3044,7 +2850,7 @@ - + @@ -3064,6 +2870,7 @@ true 100.0 + l_gripper_l_finger_link l_gripper_l_finger_bumper @@ -3072,7 +2879,6 @@ - @@ -3088,6 +2894,7 @@ 100.0 true + l_gripper_r_finger_link 100.0 l_gripper_r_finger_bumper @@ -3097,7 +2904,6 @@ - @@ -3113,6 +2919,7 @@ 100.0 true + l_gripper_l_finger_tip_link 100.0 l_gripper_l_finger_tip_bumper @@ -3122,7 +2929,6 @@ - @@ -3138,6 +2944,7 @@ 100.0 true + l_gripper_r_finger_tip_link 100.0 l_gripper_r_finger_tip_bumper @@ -3147,7 +2954,6 @@ - @@ -3175,6 +2981,58 @@ + + true + 0.17126 + 7.7562e-05 + 1.49095e-06 + -9.83385e-06 + 0.000197083 + -3.06125e-06 + 0.000181054 + 0.03598 + 0.0173 + -0.00164 + 0.82991 0.219 0.790675 + 0 -0 0 + true + false + + + true + 0.17389 + 7.73841e-05 + -2.09309e-06 + -8.36228e-06 + 0.000198474 + 2.4611e-06 + 0.00018107 + 0.03576 + -0.01736 + -0.00095 + 0.82991 0.157 0.790675 + 0 -0 0 + true + false + + + + + l_gripper_r_parallel_link + l_gripper_palm_link + l_gripper_palm_link + 0 0 -1 + 0.2 + 0.05891 -0.031 0 + + + l_gripper_l_parallel_link + l_gripper_palm_link + l_gripper_palm_link + 0 0 1 + 0.2 + 0.05891 0.031 0 + l_gripper_r_parallel_link l_gripper_r_finger_tip_link @@ -3221,11 +3079,11 @@ true 100.0 + l_gripper_palm_link l_gripper_palm_bumper - @@ -3240,7 +3098,7 @@ - + diff --git a/urdf/test/pr2_desc_explicit_world.urdf b/urdf/test/pr2_desc_explicit_world.urdf deleted file mode 100644 index ff3db28..0000000 --- a/urdf/test/pr2_desc_explicit_world.urdf +++ /dev/null @@ -1,3448 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - true - 1000.0 - - - - - true - 1.0 - 5 - - power_state - 10.0 - 87.78 - -474 - 525 - 15.52 - 16.41 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 - 640 - 1 - - 0.0 0.0 0.0 - false - - -80 - 80 - - 0.05 - 10.0 - 0.01 - 20.0 - - 0.005 - true - 20.0 - base_scan - base_laser_link - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 79.2380952381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -79.2380952381 - - - - true - - base_link_geom - 100.0 - - true - 100.0 - base_bumper - - - - - - - true - 100.0 - base_link - base_pose_ground_truth - 0.01 - map - 25.7 25.7 0 - 0 0 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - torso_lift_link_geom - 100.0 - - true - 100.0 - torso_lift_bumper - - - - - - - - -52143.33 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - R8G8B8 - 2448 2050 - 45 - 0.1 - 100 - 20.0 - - true - 20.0 - /prosilica/cam_info - /prosilica/image - /prosilica/image_rect - /prosilica/cam_info_service - /prosilica/poll - hight_def_optical_frame - 1224.5 - 1224.5 - 1025.5 - 2955 - 0 - 0 - 0 - 0 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 480 - B8G8R8 - 90.0 - 0.1 - 100 - 25.0 - - true - 25.0 - wide_stereo/left/image_raw - wide_stereo/left/camera_info - wide_stereo_optical_frame - 0.0 - 320.5 - 320.5 - 240.5 - - - 320.0 - 0 - 0 - 0 - 0 - 0 - - - - true - PR2/Blue - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 480 - B8G8R8 - 90.0 - 0.1 - 100 - 25.0 - - true - 25.0 - wide_stereo/right/image_raw - wide_stereo/right/camera_info - wide_stereo_optical_frame - 0.09 - 320.5 - 320.5 - 240.5 - - - 320.0 - 0 - 0 - 0 - 0 - 0 - - - - true - PR2/Blue - - true - - - - - - - true - 20.0 - wide_stereo_l_stereo_camera_sensor - wide_stereo_r_stereo_camera_sensor - wide_stereo/raw_stereo - wide_stereo_optical_frame - 320.5 - 320.5 - 240.5 - - - 320.0 - 0 - 0 - 0 - 0 - 0 - -0.09 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 480 - L8 - 45.0 - 0.1 - 100 - 25.0 - - true - 25.0 - narrow_stereo/left/image_raw - narrow_stereo/left/camera_info - narrow_stereo_optical_frame - 0.0 - 320.5 - 320.5 - 240.5 - - - 772.55 - 0 - 0 - 0 - 0 - 0 - - - - true - PR2/Blue - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 480 - L8 - 45.0 - 0.1 - 100 - 25.0 - - true - 25.0 - narrow_stereo/right/image_raw - narrow_stereo/right/camera_info - narrow_stereo_optical_frame - 0.09 - 320.5 - 320.5 - 240.5 - - - 772.55 - 0 - 0 - 0 - 0 - 0 - - - - true - PR2/Blue - - true - - - - - - - true - 20.0 - narrow_stereo_l_stereo_camera_sensor - narrow_stereo_r_stereo_camera_sensor - narrow_stereo/raw_stereo - narrow_stereo_optical_frame - 320.5 - 320.5 - 240.5 - - - 772.55 - 0 - 0 - 0 - 0 - 0 - -0.09 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 - 640 - 1 - - 0.0 0.0 0.0 - false - - -80 - 80 - - 0.05 - 10.0 - 0.01 - 40.0 - - 0.005 - true - 40.0 - tilt_scan - laser_tilt_link - - - - - - - - - -6.05 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - r_shoulder_pan_link_geom - 100.0 - - true - 100.0 - r_shoulder_pan_bumper - - - - - true - - - - - - r_shoulder_lift_link_geom - 100.0 - - true - 100.0 - r_r_shoulder_lift_bumper - - - - true - - - - - - true - - - - - - - - 63.16 - - - - 61.89 - - - - 32.65 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - r_upper_arm_link_geom - 100.0 - - true - 100.0 - r_upper_arm_bumper - - - - true - - - -1.0 - - - r_elbow_flex_link_geom - 100.0 - - true - 100.0 - r_elbow_flex_bumper - - - - - true - - - - - - true - - - - - - -36.17 - - - - 90.5142857143 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - r_forearm_link_geom - 100.0 - - true - 100.0 - r_forearm_bumper - - - - - - true - - r_wrist_flex_link_geom - 100.0 - - true - 100.0 - r_wrist_flex_bumper - - - - - - - - - true - - r_wrist_roll_link_geom - 100.0 - - true - 100.0 - r_wrist_roll_bumper - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - r_gripper_l_finger_link_geom - 100.0 - - true - 100.0 - r_gripper_l_finger_bumper - - - - - - - - - - - - - - - - true - - r_gripper_r_finger_link_geom - 100.0 - - true - 100.0 - r_gripper_r_finger_bumper - - - - - - - - - - - - - - - true - false - - r_gripper_l_finger_tip_link_geom - 100.0 - - true - 100.0 - r_gripper_l_finger_tip_bumper - - - - - - - - - - - - - - - true - false - - r_gripper_r_finger_tip_link_geom - 100.0 - - true - 100.0 - r_gripper_r_finger_tip_bumper - - - - - - - - - - - true - 100.0 - r_gripper_l_finger_link - r_gripper_l_finger_pose_ground_truth - 0.0 - map - - - - true - 100.0 - r_gripper_l_finger_link - r_gripper_l_finger_force_ground_truth - r_gripper_l_finger_link - - - - - - - - - - - - - true - - r_gripper_palm_link_geom - 100.0 - - true - 100.0 - r_gripper_palm_bumper - - - - - - true - - - - - true - 0.01 - 0.0001 - 0 - 0 - 0.0001 - 0 - 0.0001 - 0 - 0 - 0 - 0.82025 0.188 0.790675 - 0 -0 0 - - 0 0 0 - 0 -0 0 - 0.0 0.0 0.0 - - 0 0 0 - 0 -0 0 - 0.0 0.0 0.0 - unit_box - PR2/White - - - true - false - - - r_gripper_float_link - r_gripper_palm_link - r_gripper_float_link - 1 0 0 - -0.05 - 0.001 - - - r_gripper_l_finger_tip_link - r_gripper_float_link - r_gripper_l_finger_tip_link - 0 1 0 - 0 0 0 - - - r_gripper_r_finger_tip_link - r_gripper_float_link - r_gripper_r_finger_tip_link - 0 1 0 - 0 0 0 - - - - - true - 100.0 - r_gripper_palm_link - r_gripper_palm_pose_ground_truth - 0 0 0 - 0 0 0 - 0.0 - map - - - - true - 100.0 - r_gripper_tool_frame - r_gripper_tool_frame_pose_ground_truth - 0 0 0 - 0 0 0 - 0.0 - /map - - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - l_shoulder_pan_link_geom - 100.0 - - true - 100.0 - l_shoulder_pan_bumper - - - - - true - - - - - - l_shoulder_lift_link_geom - 100.0 - - true - 100.0 - l_r_shoulder_lift_bumper - - - - true - - - - - - true - - - - - - - - 63.16 - - - - 61.89 - - - - 32.65 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - l_upper_arm_link_geom - 100.0 - - true - 100.0 - l_upper_arm_bumper - - - - true - - - -1.0 - - - l_elbow_flex_link_geom - 100.0 - - true - 100.0 - l_elbow_flex_bumper - - - - - true - - - - - - true - - - - - - -36.17 - - - - 90.5142857143 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - l_forearm_link_geom - 100.0 - - true - 100.0 - l_forearm_bumper - - - - - - true - - l_wrist_flex_link_geom - 100.0 - - true - 100.0 - l_wrist_flex_bumper - - - - - - - - - true - - l_wrist_roll_link_geom - 100.0 - - true - 100.0 - l_wrist_roll_bumper - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - - l_gripper_l_finger_link_geom - 100.0 - - true - 100.0 - l_gripper_l_finger_bumper - - - - - - - - - - - - - - - - true - - l_gripper_r_finger_link_geom - 100.0 - - true - 100.0 - l_gripper_r_finger_bumper - - - - - - - - - - - - - - - true - false - - l_gripper_l_finger_tip_link_geom - 100.0 - - true - 100.0 - l_gripper_l_finger_tip_bumper - - - - - - - - - - - - - - - true - false - - l_gripper_r_finger_tip_link_geom - 100.0 - - true - 100.0 - l_gripper_r_finger_tip_bumper - - - - - - - - - - - true - 100.0 - l_gripper_l_finger_link - l_gripper_l_finger_pose_ground_truth - 0.0 - map - - - - true - 100.0 - l_gripper_l_finger_link - l_gripper_l_finger_force_ground_truth - l_gripper_l_finger_link - - - - - - - - - - - - - true - - l_gripper_palm_link_geom - 100.0 - - true - 100.0 - l_gripper_palm_bumper - - - - - - true - - - - - true - 0.01 - 0.0001 - 0 - 0 - 0.0001 - 0 - 0.0001 - 0 - 0 - 0 - 0.82025 0.188 0.790675 - 0 -0 0 - - 0 0 0 - 0 -0 0 - 0.0 0.0 0.0 - - 0 0 0 - 0 -0 0 - 0.0 0.0 0.0 - unit_box - PR2/White - - - true - false - - - l_gripper_float_link - l_gripper_palm_link - l_gripper_float_link - 1 0 0 - -0.05 - 0.001 - - - l_gripper_l_finger_tip_link - l_gripper_float_link - l_gripper_l_finger_tip_link - 0 1 0 - 0 0 0 - - - l_gripper_r_finger_tip_link - l_gripper_float_link - l_gripper_r_finger_tip_link - 0 1 0 - 0 0 0 - - - - - true - 100.0 - l_gripper_palm_link - l_gripper_palm_pose_ground_truth - 0 0 0 - 0 0 0 - 0.0 - map - - - - true - 100.0 - l_gripper_tool_frame - l_gripper_tool_frame_pose_ground_truth - 0 0 0 - 0 0 0 - 0.0 - /map - - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 480 - L8 - 90.0 - 0.1 - 100 - 25.0 - - true - 25.0 - l_forearm_cam/image_raw - l_forearm_cam/camera_info - l_forearm_cam_frame - 0.0 - 320.5 - 320.5 - 240.5 - - - 320.0 - 0 - 0 - 0 - 0 - 0 - - - - true - PR2/Blue - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 640 480 - L8 - 90.0 - 0.1 - 100 - 25.0 - - true - 25.0 - r_forearm_cam/image_raw - r_forearm_cam/camera_info - r_forearm_cam_frame - 0.0 - 320.5 - 320.5 - 240.5 - - - 320.0 - 0 - 0 - 0 - 0 - 0 - - - - true - PR2/Blue - - true - - - diff --git a/urdf/test/pr2_desc_no_joint.urdf b/urdf/test/pr2_desc_no_joint.urdf index 04839d2..11fc4fd 100644 --- a/urdf/test/pr2_desc_no_joint.urdf +++ b/urdf/test/pr2_desc_no_joint.urdf @@ -1,7 +1,6 @@ - diff --git a/urdf/test/test_robot_model_parser.launch b/urdf/test/test_robot_model_parser.launch index 3ee95ab..8e262c2 100644 --- a/urdf/test/test_robot_model_parser.launch +++ b/urdf/test/test_robot_model_parser.launch @@ -1,5 +1,5 @@ - + From 90922b4cfca3db282b5f0df467e4205662ed7e5d Mon Sep 17 00:00:00 2001 From: tfield Date: Thu, 21 Oct 2010 04:48:46 +0000 Subject: [PATCH 212/245] colladadom: adding missing rosdeps on libxml2 and unzip --- colladadom/manifest.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/colladadom/manifest.xml b/colladadom/manifest.xml index c730aba..001a1ef 100644 --- a/colladadom/manifest.xml +++ b/colladadom/manifest.xml @@ -10,6 +10,8 @@ BSD http://ros.org/wiki/colladadom + + From 6c8748c0e703967e0396b00c7ed2361c758bdfb8 Mon Sep 17 00:00:00 2001 From: wim Date: Thu, 21 Oct 2010 22:27:13 +0000 Subject: [PATCH 213/245] getting ready for 1.3.0 release --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8d019f5..e84f1ee 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,4 +16,4 @@ set(ROSPACK_MAKEDIST true) # variables. #list(APPEND CPACK_SOURCE_IGNORE_FILES /core/experimental) -rosbuild_make_distribution(1.2.2) +rosbuild_make_distribution(1.3.0) From 3fd805d1eaf9b75638c404b77d39be6f37e8eb00 Mon Sep 17 00:00:00 2001 From: tfield Date: Thu, 11 Nov 2010 05:07:10 +0000 Subject: [PATCH 214/245] collada_urdf: fixing invalid urdf in test --- collada_urdf/test/pr2.urdf | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/collada_urdf/test/pr2.urdf b/collada_urdf/test/pr2.urdf index ae16a78..17d8633 100644 --- a/collada_urdf/test/pr2.urdf +++ b/collada_urdf/test/pr2.urdf @@ -2245,11 +2245,6 @@ - - - - - true @@ -3145,11 +3140,6 @@ - - - - - true From 89cefec28e31918cb680d68edbc26a2a18e9579d Mon Sep 17 00:00:00 2001 From: wim Date: Thu, 11 Nov 2010 21:00:44 +0000 Subject: [PATCH 215/245] getting ready for 1.3.1 release --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e84f1ee..8a16e22 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,4 +16,4 @@ set(ROSPACK_MAKEDIST true) # variables. #list(APPEND CPACK_SOURCE_IGNORE_FILES /core/experimental) -rosbuild_make_distribution(1.3.0) +rosbuild_make_distribution(1.3.1) From 2940fdf3d6b66a40298d91a960e4ac2a0182ce2c Mon Sep 17 00:00:00 2001 From: kwc Date: Sat, 20 Nov 2010 04:12:35 +0000 Subject: [PATCH 216/245] 1.3.2. Added ros_comm dependency --- CMakeLists.txt | 2 +- stack.xml | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8a16e22..5ae2089 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,4 +16,4 @@ set(ROSPACK_MAKEDIST true) # variables. #list(APPEND CPACK_SOURCE_IGNORE_FILES /core/experimental) -rosbuild_make_distribution(1.3.1) +rosbuild_make_distribution(1.3.2) diff --git a/stack.xml b/stack.xml index ea2973b..6d3c88c 100644 --- a/stack.xml +++ b/stack.xml @@ -7,12 +7,13 @@ object model (C++) of the robot. John Hsu johnhsu@willowgarage.com, Wim Meeussen - BSD,GPL,MIT + GPL,BSD,MIT http://ros.org/wiki/robot_model - - + + + From bc143cd55cb1b29b1d3c56e6041741a7620f03f6 Mon Sep 17 00:00:00 2001 From: tfield Date: Mon, 29 Nov 2010 19:48:58 +0000 Subject: [PATCH 217/245] collada_urdf: adding support for URDF material colors (thanks to Kei Okada) #4276 --- collada_urdf/src/collada_writer.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/collada_urdf/src/collada_writer.cpp b/collada_urdf/src/collada_writer.cpp index a9a703f..7453fd1 100644 --- a/collada_urdf/src/collada_writer.cpp +++ b/collada_urdf/src/collada_writer.cpp @@ -697,6 +697,17 @@ void ColladaWriter::addMaterials() { if (j == geometry_ids_.end()) continue; + if (!urdf_link->visual->material->texture_filename.empty()) { + ambient.r = ambient.g = ambient.b = 1; ambient.a = 0; + diffuse.r = diffuse.g = diffuse.b = 1; diffuse.a = 0; + } + else { + ambient.r = diffuse.r = urdf_link->visual->material->color.r; + ambient.g = diffuse.g = urdf_link->visual->material->color.g; + ambient.b = diffuse.b = urdf_link->visual->material->color.b; + ambient.a = diffuse.a = urdf_link->visual->material->color.a; + } + string geometry_id = j->second; domEffectRef effect = addEffect(geometry_id, ambient, diffuse); From 750f7a5b9467f7a59cca2caaae34825925d69eb4 Mon Sep 17 00:00:00 2001 From: tfield Date: Mon, 29 Nov 2010 22:20:15 +0000 Subject: [PATCH 218/245] robot_model: adding rosdep.yaml for pcre; adding dependency of colladadom on pcre #4594 --- colladadom/manifest.xml | 1 + rosdep.yaml | 3 +++ 2 files changed, 4 insertions(+) create mode 100644 rosdep.yaml diff --git a/colladadom/manifest.xml b/colladadom/manifest.xml index 001a1ef..194318d 100644 --- a/colladadom/manifest.xml +++ b/colladadom/manifest.xml @@ -12,6 +12,7 @@ http://ros.org/wiki/colladadom + diff --git a/rosdep.yaml b/rosdep.yaml new file mode 100644 index 0000000..3238800 --- /dev/null +++ b/rosdep.yaml @@ -0,0 +1,3 @@ +pcre: + ubuntu: libpcre3-dev + fedora: pcre-devel From dacb572019e010bc1bb16bd9e4b31848efdb4eca Mon Sep 17 00:00:00 2001 From: eitan Date: Wed, 1 Dec 2010 19:02:17 +0000 Subject: [PATCH 219/245] Fixing bug with timestamps when there are only fixed joints --- robot_state_publisher/src/joint_state_listener.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robot_state_publisher/src/joint_state_listener.cpp b/robot_state_publisher/src/joint_state_listener.cpp index e7b2eee..84f4875 100644 --- a/robot_state_publisher/src/joint_state_listener.cpp +++ b/robot_state_publisher/src/joint_state_listener.cpp @@ -57,8 +57,8 @@ JointStateListener::JointStateListener(const KDL::Tree& tree) if (tree.getNrOfJoints() == 0){ boost::shared_ptr empty_state(new sensor_msgs::JointState); - empty_state->header.stamp = ros::Time::now(); while (ros::ok()){ + empty_state->header.stamp = ros::Time::now(); this->callbackJointState(empty_state); publish_rate_.sleep(); } From 6ee8c4c17e8824a3105c8bec8b7891fbfacf6dc0 Mon Sep 17 00:00:00 2001 From: rdiankov Date: Wed, 1 Dec 2010 19:05:25 +0000 Subject: [PATCH 220/245] added collada support into the urdf library --- colladadom/collada-dom.patch | 22 + urdf/CMakeLists.txt | 2 +- urdf/include/urdf/model.h | 8 +- urdf/manifest.xml | 2 +- urdf/src/collada_model_reader.cpp | 2685 +++++++++++++++++++++++++++++ urdf/src/model.cpp | 28 +- 6 files changed, 2740 insertions(+), 7 deletions(-) create mode 100644 urdf/src/collada_model_reader.cpp diff --git a/colladadom/collada-dom.patch b/colladadom/collada-dom.patch index eb05cec..e28599d 100644 --- a/colladadom/collada-dom.patch +++ b/colladadom/collada-dom.patch @@ -52,3 +52,25 @@ Index: dom/make/domTest.mk ifeq ($(os),ps3) # PS3 doesn't support C++ locales, so tell boost not to use them ccFlags += -DBOOST_NO_STD_LOCALE + +--- dom/src/dae/daeSIDResolver.cpp ++++ dom/src/dae/daeSIDResolver.cpp +@@ -152,6 +152,18 @@ + list& remainingPart) { + remainingPart.clear(); + ++ // custom change for following instance urls (Rosen Diankov) ++ if ( strncmp( container->getElementName(), "instance_", 9 ) == 0 ) { ++ daeURI *uri = (daeURI*)container->getAttributeValue("url"); ++ if ( uri != NULL && uri->getElement() != NULL ) { ++ daeElement *e = findWithDots( uri->getElement(), s, profile, finder, remainingPart ); ++ if ( e != NULL ) { ++ //found it ++ return e; ++ } ++ } ++ } ++ + // First see if the whole thing resolves correctly + if (daeElement* result = finder(container, s, profile)) + return result; diff --git a/urdf/CMakeLists.txt b/urdf/CMakeLists.txt index 4dceb93..64d4b42 100644 --- a/urdf/CMakeLists.txt +++ b/urdf/CMakeLists.txt @@ -22,7 +22,7 @@ set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) rosbuild_gensrv() #common commands for building c++ executables and libraries -rosbuild_add_library(${PROJECT_NAME} src/link.cpp src/joint.cpp src/model.cpp) +rosbuild_add_library(${PROJECT_NAME} src/link.cpp src/joint.cpp src/model.cpp src/collada_model_reader.cpp) #target_link_libraries(${PROJECT_NAME} another_library) rosbuild_add_boost_directories() #rosbuild_link_boost(${PROJECT_NAME} thread) diff --git a/urdf/include/urdf/model.h b/urdf/include/urdf/model.h index 264520f..0d52895 100644 --- a/urdf/include/urdf/model.h +++ b/urdf/include/urdf/model.h @@ -46,7 +46,6 @@ namespace urdf{ - class Model { public: @@ -86,7 +85,7 @@ public: /// \brief complete list of Materials std::map > materials_; -private: +protected: void clear(); std::string name_; @@ -105,13 +104,14 @@ private: /// it's time to find the root Link bool initRoot(std::map &parent_link_tree); - +private: /// Model is restricted to a tree for now, which means there exists one root link /// typically, root link is the world(inertial). Where world is a special link /// or is the root_link_ the link attached to the world by PLANAR/FLOATING joint? /// hmm... boost::shared_ptr root_link_; - + + friend class ColladaModelReader; }; } diff --git a/urdf/manifest.xml b/urdf/manifest.xml index f0ad062..d03ca3f 100644 --- a/urdf/manifest.xml +++ b/urdf/manifest.xml @@ -12,7 +12,7 @@ - + diff --git a/urdf/src/collada_model_reader.cpp b/urdf/src/collada_model_reader.cpp new file mode 100644 index 0000000..6f03f61 --- /dev/null +++ b/urdf/src/collada_model_reader.cpp @@ -0,0 +1,2685 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2010, Rosen Diankov, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redstributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Rosen Diankov, used OpenRAVE files for reference */ +#include "urdf/model.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#define FOREACH(it, v) for(typeof((v).begin()) it = (v).begin(); it != (v).end(); (it)++) +#define FOREACHC FOREACH + +namespace urdf{ + +class UnlinkFilename +{ +public: + UnlinkFilename(const std::string& filename) : _filename(filename) {} + virtual ~UnlinkFilename() { unlink(_filename.c_str()); } + std::string _filename; +}; +static std::list > _listTempFilenames; + +class ColladaModelReader : public daeErrorHandler +{ + + class JointAxisBinding + { + public: + JointAxisBinding(daeElementRef pvisualtrans, domAxis_constraintRef pkinematicaxis, domCommon_float_or_paramRef jointvalue, domKinematics_axis_infoRef kinematics_axis_info, domMotion_axis_infoRef motion_axis_info) : pvisualtrans(pvisualtrans), pkinematicaxis(pkinematicaxis), jointvalue(jointvalue), kinematics_axis_info(kinematics_axis_info), motion_axis_info(motion_axis_info) { + BOOST_ASSERT( !!pkinematicaxis ); + daeElement* pae = pvisualtrans->getParentElement(); + while (!!pae) { + visualnode = daeSafeCast (pae); + if (!!visualnode) { + break; + } + pae = pae->getParentElement(); + } + + if (!visualnode) { + ROS_WARN_STREAM(str(boost::format("couldn't find parent node of element id %s, sid %s\n")%pkinematicaxis->getID()%pkinematicaxis->getSid())); + } + } + + daeElementRef pvisualtrans; + domAxis_constraintRef pkinematicaxis; + domCommon_float_or_paramRef jointvalue; + domNodeRef visualnode; + domKinematics_axis_infoRef kinematics_axis_info; + domMotion_axis_infoRef motion_axis_info; + }; + + /// \brief inter-collada bindings for a kinematics scene + class KinematicsSceneBindings + { + public: + std::list< std::pair > listKinematicsVisualBindings; + std::list listAxisBindings; + + bool AddAxisInfo(const domInstance_kinematics_model_Array& arr, domKinematics_axis_infoRef kinematics_axis_info, domMotion_axis_infoRef motion_axis_info) + { + if( !kinematics_axis_info ) { + return false; + } + for(size_t ik = 0; ik < arr.getCount(); ++ik) { + daeElement* pelt = daeSidRef(kinematics_axis_info->getAxis(), arr[ik]->getUrl().getElement()).resolve().elt; + if( !!pelt ) { + // look for the correct placement + bool bfound = false; + FOREACH(itbinding,listAxisBindings) { + if( itbinding->pkinematicaxis.cast() == pelt ) { + itbinding->kinematics_axis_info = kinematics_axis_info; + if( !!motion_axis_info ) { + itbinding->motion_axis_info = motion_axis_info; + } + bfound = true; + break; + } + } + if( !bfound ) { + ROS_WARN_STREAM(str(boost::format("could not find binding for axis: %s, %s\n")%kinematics_axis_info->getAxis()%pelt->getAttribute("sid"))); + return false; + } + return true; + } + } + ROS_WARN_STREAM(str(boost::format("could not find kinematics axis target: %s\n")%kinematics_axis_info->getAxis())); + return false; + } + }; + + struct USERDATA + { + USERDATA() {} + USERDATA(double scale) : scale(scale) {} + double scale; + boost::shared_ptr p; ///< custom managed data + }; + + enum GeomType { + GeomNone = 0, + GeomBox = 1, + GeomSphere = 2, + GeomCylinder = 3, + GeomTrimesh = 4, + }; + + struct GEOMPROPERTIES + { + Pose _t; ///< local transformation of the geom primitive with respect to the link's coordinate system + Vector3 vGeomData; ///< for boxes, first 3 values are extents + ///< for sphere it is radius + ///< for cylinder, first 2 values are radius and height + ///< for trimesh, none + Color diffuseColor, ambientColor; ///< hints for how to color the meshes + std::vector vertices; + std::vector indices; + + ///< discretization value is chosen. Should be transformed by _t before rendering + GeomType type; ///< the type of geometry primitive + + + // generate a sphere triangulation starting with an icosahedron + // all triangles are oriented counter clockwise + static void GenerateSphereTriangulation(std::vector realvertices, std::vector realindices, int levels) + { + const double GTS_M_ICOSAHEDRON_X = 0.850650808352039932181540497063011072240401406; + const double GTS_M_ICOSAHEDRON_Y = 0.525731112119133606025669084847876607285497935; + const double GTS_M_ICOSAHEDRON_Z = 0; + std::vector tempvertices[2]; + std::vector tempindices[2]; + + tempvertices[0].push_back(Vector3(+GTS_M_ICOSAHEDRON_Z, +GTS_M_ICOSAHEDRON_X, -GTS_M_ICOSAHEDRON_Y)); + tempvertices[0].push_back(Vector3(+GTS_M_ICOSAHEDRON_X, +GTS_M_ICOSAHEDRON_Y, +GTS_M_ICOSAHEDRON_Z)); + tempvertices[0].push_back(Vector3(+GTS_M_ICOSAHEDRON_Y, +GTS_M_ICOSAHEDRON_Z, -GTS_M_ICOSAHEDRON_X)); + tempvertices[0].push_back(Vector3(+GTS_M_ICOSAHEDRON_Y, +GTS_M_ICOSAHEDRON_Z, +GTS_M_ICOSAHEDRON_X)); + tempvertices[0].push_back(Vector3(+GTS_M_ICOSAHEDRON_X, -GTS_M_ICOSAHEDRON_Y, +GTS_M_ICOSAHEDRON_Z)); + tempvertices[0].push_back(Vector3(+GTS_M_ICOSAHEDRON_Z, +GTS_M_ICOSAHEDRON_X, +GTS_M_ICOSAHEDRON_Y)); + tempvertices[0].push_back(Vector3(-GTS_M_ICOSAHEDRON_Y, +GTS_M_ICOSAHEDRON_Z, +GTS_M_ICOSAHEDRON_X)); + tempvertices[0].push_back(Vector3(+GTS_M_ICOSAHEDRON_Z, -GTS_M_ICOSAHEDRON_X, -GTS_M_ICOSAHEDRON_Y)); + tempvertices[0].push_back(Vector3(-GTS_M_ICOSAHEDRON_X, +GTS_M_ICOSAHEDRON_Y, +GTS_M_ICOSAHEDRON_Z)); + tempvertices[0].push_back(Vector3(-GTS_M_ICOSAHEDRON_Y, +GTS_M_ICOSAHEDRON_Z, -GTS_M_ICOSAHEDRON_X)); + tempvertices[0].push_back(Vector3(-GTS_M_ICOSAHEDRON_X, -GTS_M_ICOSAHEDRON_Y, +GTS_M_ICOSAHEDRON_Z)); + tempvertices[0].push_back(Vector3(+GTS_M_ICOSAHEDRON_Z, -GTS_M_ICOSAHEDRON_X, +GTS_M_ICOSAHEDRON_Y)); + + const int nindices=60; + int indices[nindices] = { + 0, 1, 2, + 1, 3, 4, + 3, 5, 6, + 2, 4, 7, + 5, 6, 8, + 2, 7, 9, + 0, 5, 8, + 7, 9, 10, + 0, 1, 5, + 7, 10, 11, + 1, 3, 5, + 6, 10, 11, + 3, 6, 11, + 9, 10, 8, + 3, 4, 11, + 6, 8, 10, + 4, 7, 11, + 1, 2, 4, + 0, 8, 9, + 0, 2, 9 + }; + + Vector3 v[3]; + // make sure oriented CCW + for(int i = 0; i < nindices; i += 3 ) { + v[0] = tempvertices[0][indices[i]]; + v[1] = tempvertices[0][indices[i+1]]; + v[2] = tempvertices[0][indices[i+2]]; + if( _dot3(v[0], _cross3(_sub3(v[1],v[0]),_sub3(v[2],v[0]))) < 0 ) { + std::swap(indices[i], indices[i+1]); + } + } + + tempindices[0].resize(nindices); + std::copy(&indices[0],&indices[nindices],tempindices[0].begin()); + std::vector* curvertices = &tempvertices[0], *newvertices = &tempvertices[1]; + std::vector *curindices = &tempindices[0], *newindices = &tempindices[1]; + while(levels-- > 0) { + + newvertices->resize(0); + newvertices->reserve(2*curvertices->size()); + newvertices->insert(newvertices->end(), curvertices->begin(), curvertices->end()); + newindices->resize(0); + newindices->reserve(4*curindices->size()); + + std::map< uint64_t, int > mapnewinds; + std::map< uint64_t, int >::iterator it; + + for(size_t i = 0; i < curindices->size(); i += 3) { + // for ever tri, create 3 new vertices and 4 new triangles. + v[0] = curvertices->at(curindices->at(i)); + v[1] = curvertices->at(curindices->at(i+1)); + v[2] = curvertices->at(curindices->at(i+2)); + + int inds[3]; + for(int j = 0; j < 3; ++j) { + uint64_t key = ((uint64_t)curindices->at(i+j)<<32)|(uint64_t)curindices->at(i + ((j+1)%3)); + it = mapnewinds.find(key); + + if( it == mapnewinds.end() ) { + inds[j] = mapnewinds[key] = mapnewinds[(key<<32)|(key>>32)] = (int)newvertices->size(); + newvertices->push_back(_normalize3(_add3(v[j],v[(j+1)%3 ]))); + } + else { + inds[j] = it->second; + } + } + + newindices->push_back(curindices->at(i)); newindices->push_back(inds[0]); newindices->push_back(inds[2]); + newindices->push_back(inds[0]); newindices->push_back(curindices->at(i+1)); newindices->push_back(inds[1]); + newindices->push_back(inds[2]); newindices->push_back(inds[0]); newindices->push_back(inds[1]); + newindices->push_back(inds[2]); newindices->push_back(inds[1]); newindices->push_back(curindices->at(i+2)); + } + + std::swap(newvertices,curvertices); + std::swap(newindices,curindices); + } + + realvertices = *curvertices; + realindices = *curindices; + } + + bool InitCollisionMesh(double fTessellation=1.0) + { + if( type == GeomTrimesh ) { + return true; + } + indices.clear(); + vertices.clear(); + + if( fTessellation < 0.01f ) { + fTessellation = 0.01f; + } + // start tesselating + switch(type) { + case GeomSphere: { + // log_2 (1+ tess) + GenerateSphereTriangulation(vertices,indices, 3 + (int)(logf(fTessellation) / logf(2.0f)) ); + double fRadius = vGeomData.x; + FOREACH(it, vertices) { + it->x *= fRadius; + it->y *= fRadius; + it->z *= fRadius; + } + break; + } + case GeomBox: { + // trivial + Vector3 ex = vGeomData; + Vector3 v[8] = { Vector3(ex.x, ex.y, ex.z), + Vector3(ex.x, ex.y, -ex.z), + Vector3(ex.x, -ex.y, ex.z), + Vector3(ex.x, -ex.y, -ex.z), + Vector3(-ex.x, ex.y, ex.z), + Vector3(-ex.x, ex.y, -ex.z), + Vector3(-ex.x, -ex.y, ex.z), + Vector3(-ex.x, -ex.y, -ex.z) }; + const int nindices = 36; + int startindices[] = { + 0, 1, 2, + 1, 2, 3, + 4, 5, 6, + 5, 6, 7, + 0, 1, 4, + 1, 4, 5, + 2, 3, 6, + 3, 6, 7, + 0, 2, 4, + 2, 4, 6, + 1, 3, 5, + 3, 5, 7 + }; + + for(int i = 0; i < nindices; i += 3 ) { + Vector3 v1 = v[startindices[i]]; + Vector3 v2 = v[startindices[i+1]]; + Vector3 v3 = v[startindices[i+2]]; + if( _dot3(v1, _sub3(v2,_cross3(v1, _sub3(v3,v1)))) < 0 ) { + std::swap(indices[i], indices[i+1]); + } + } + + vertices.resize(8); + std::copy(&v[0],&v[8],vertices.begin()); + indices.resize(nindices); + std::copy(&startindices[0],&startindices[nindices],indices.begin()); + break; + } + case GeomCylinder: { + // cylinder is on y axis + double rad = vGeomData.x, len = vGeomData.y*0.5f; + + int numverts = (int)(fTessellation*24.0f) + 3; + double dtheta = 2 * M_PI / (double)numverts; + vertices.push_back(Vector3(0,0,len)); + vertices.push_back(Vector3(0,0,-len)); + vertices.push_back(Vector3(rad,0,len)); + vertices.push_back(Vector3(rad,0,-len)); + + for(int i = 0; i < numverts+1; ++i) { + double s = rad * std::sin(dtheta * (double)i); + double c = rad * std::cos(dtheta * (double)i); + + int off = (int)vertices.size(); + vertices.push_back(Vector3(c, s, len)); + vertices.push_back(Vector3(c, s, -len)); + + indices.push_back(0); indices.push_back(off); indices.push_back(off-2); + indices.push_back(1); indices.push_back(off-1); indices.push_back(off+1); + indices.push_back(off-2); indices.push_back(off); indices.push_back(off-1); + indices.push_back(off); indices.push_back(off-1); indices.push_back(off+1); + } + break; + } + default: + BOOST_ASSERT(0); + } + return true; + } + }; + + public: + ColladaModelReader(Model& model) : _dom(NULL), _nGlobalSensorId(0), _nGlobalManipulatorId(0), _model(model) { + daeErrorHandler::setErrorHandler(this); + _resourcedir = "."; + } + virtual ~ColladaModelReader() { + _vuserdata.clear(); + _collada.reset(); + DAE::cleanup(); + } + + bool InitFromFile(const std::string& filename) { + ROS_DEBUG_STREAM(str(boost::format("init COLLADA reader version: %s, namespace: %s, filename: %s\n")%COLLADA_VERSION%COLLADA_NAMESPACE%filename)); + _collada.reset(new DAE); + _dom = _collada->open(filename); + if (!_dom) { + return false; + } + _filename=filename; + + size_t maxchildren = _countChildren(_dom); + _vuserdata.resize(0); + _vuserdata.reserve(maxchildren); + + double dScale = 1.0; + _processUserData(_dom, dScale); + ROS_DEBUG_STREAM(str(boost::format("processed children: %d/%d\n")%_vuserdata.size()%maxchildren)); + return _Extract(); + } + + bool InitFromData(const std::string& pdata) { + ROS_DEBUG_STREAM(str(boost::format("init COLLADA reader version: %s, namespace: %s\n")%COLLADA_VERSION%COLLADA_NAMESPACE)); + _collada.reset(new DAE); + _dom = _collada->openFromMemory(".",pdata.c_str()); + if (!_dom) { + return false; + } + + size_t maxchildren = _countChildren(_dom); + _vuserdata.resize(0); + _vuserdata.reserve(maxchildren); + + double dScale = 1.0; + _processUserData(_dom, dScale); + ROS_DEBUG_STREAM(str(boost::format("processed children: %d/%d\n")%_vuserdata.size()%maxchildren)); + return _Extract(); + } + +protected: + + /// \extract the first possible robot in the scene + bool _Extract() + { + _model.clear(); + std::list< std::pair > > listPossibleBodies; + domCOLLADA::domSceneRef allscene = _dom->getScene(); + if( !allscene ) { + return false; + } + + // parse each instance kinematics scene, prioritize real robots + for (size_t iscene = 0; iscene < allscene->getInstance_kinematics_scene_array().getCount(); iscene++) { + domInstance_kinematics_sceneRef kiscene = allscene->getInstance_kinematics_scene_array()[iscene]; + domKinematics_sceneRef kscene = daeSafeCast (kiscene->getUrl().getElement().cast()); + if (!kscene) { + continue; + } + boost::shared_ptr bindings(new KinematicsSceneBindings()); + _ExtractKinematicsVisualBindings(allscene->getInstance_visual_scene(),kiscene,*bindings); + for(size_t ias = 0; ias < kscene->getInstance_articulated_system_array().getCount(); ++ias) { + if( _ExtractArticulatedSystem(kscene->getInstance_articulated_system_array()[ias], *bindings) ) { + _PostProcess(); + return true; + } + } + for(size_t ikmodel = 0; ikmodel < kscene->getInstance_kinematics_model_array().getCount(); ++ikmodel) { + listPossibleBodies.push_back(std::make_pair(kscene->getInstance_kinematics_model_array()[ikmodel], bindings)); + } + } + + FOREACH(it, listPossibleBodies) { + if( _ExtractKinematicsModel(it->first, *it->second) ) { + _PostProcess(); + return true; + } + } + + return false; + } + + void _PostProcess() + { + std::map parent_link_tree; + // building tree: name mapping + if (!_model.initTree(parent_link_tree)) { + ROS_ERROR("failed to build tree"); + } + + // find the root link + if (!_model.initRoot(parent_link_tree)) { + ROS_ERROR("failed to find root link"); + } + } + + /// \brief extracts an articulated system. Note that an articulated system can include other articulated systems + bool _ExtractArticulatedSystem(domInstance_articulated_systemRef ias, KinematicsSceneBindings& bindings) + { + if( !ias ) { + return false; + } + ROS_DEBUG_STREAM(str(boost::format("instance articulated system sid %s\n")%ias->getSid())); + domArticulated_systemRef articulated_system = daeSafeCast (ias->getUrl().getElement().cast()); + if( !articulated_system ) { + return false; + } + + boost::shared_ptr pinterface_type = _ExtractInterfaceType(ias->getExtra_array()); + if( !pinterface_type ) { + pinterface_type = _ExtractInterfaceType(articulated_system->getExtra_array()); + } + if( !!pinterface_type ) { + ROS_DEBUG_STREAM(str(boost::format("robot type: %s")%(*pinterface_type))); + } + + // set the name + if( _model.name_.size() == 0 && !!ias->getName() ) { + _model.name_ = ias->getName(); + } + if( _model.name_.size() == 0 && !!ias->getSid()) { + _model.name_ = ias->getSid(); + } + if( _model.name_.size() == 0 && !!articulated_system->getName() ) { + _model.name_ = articulated_system->getName(); + } + if( _model.name_.size() == 0 && !!articulated_system->getId()) { + _model.name_ = articulated_system->getId(); + } + + if( !!articulated_system->getMotion() ) { + domInstance_articulated_systemRef ias_new = articulated_system->getMotion()->getInstance_articulated_system(); + if( !!articulated_system->getMotion()->getTechnique_common() ) { + for(size_t i = 0; i < articulated_system->getMotion()->getTechnique_common()->getAxis_info_array().getCount(); ++i) { + domMotion_axis_infoRef motion_axis_info = articulated_system->getMotion()->getTechnique_common()->getAxis_info_array()[i]; + // this should point to a kinematics axis_info + domKinematics_axis_infoRef kinematics_axis_info = daeSafeCast(daeSidRef(motion_axis_info->getAxis(), ias_new->getUrl().getElement()).resolve().elt); + if( !!kinematics_axis_info ) { + // find the parent kinematics and go through all its instance kinematics models + daeElement* pparent = kinematics_axis_info->getParent(); + while(!!pparent && pparent->typeID() != domKinematics::ID()) { + pparent = pparent->getParent(); + } + BOOST_ASSERT(!!pparent); + bindings.AddAxisInfo(daeSafeCast(pparent)->getInstance_kinematics_model_array(), kinematics_axis_info, motion_axis_info); + } + else { + ROS_WARN_STREAM(str(boost::format("failed to find kinematics axis %s\n")%motion_axis_info->getAxis())); + } + } + } + if( !_ExtractArticulatedSystem(ias_new,bindings) ) { + return false; + } + } + else { + if( !articulated_system->getKinematics() ) { + ROS_WARN_STREAM(str(boost::format("collada tag empty? instance_articulated_system=%s\n")%ias->getID())); + return true; + } + + if( !!articulated_system->getKinematics()->getTechnique_common() ) { + for(size_t i = 0; i < articulated_system->getKinematics()->getTechnique_common()->getAxis_info_array().getCount(); ++i) { + bindings.AddAxisInfo(articulated_system->getKinematics()->getInstance_kinematics_model_array(), articulated_system->getKinematics()->getTechnique_common()->getAxis_info_array()[i], NULL); + } + } + + for(size_t ik = 0; ik < articulated_system->getKinematics()->getInstance_kinematics_model_array().getCount(); ++ik) { + _ExtractKinematicsModel(articulated_system->getKinematics()->getInstance_kinematics_model_array()[ik],bindings); + } + } + + _ExtractRobotManipulators(articulated_system); + _ExtractRobotAttachedSensors(articulated_system); + return true; + } + + bool _ExtractKinematicsModel(domInstance_kinematics_modelRef ikm, KinematicsSceneBindings& bindings) + { + if( !ikm ) { + return false; + } + ROS_DEBUG_STREAM(str(boost::format("instance kinematics model sid %s\n")%ikm->getSid())); + domKinematics_modelRef kmodel = daeSafeCast (ikm->getUrl().getElement().cast()); + if (!kmodel) { + ROS_WARN_STREAM(str(boost::format("%s does not reference valid kinematics\n")%ikm->getSid())); + return false; + } + domPhysics_modelRef pmodel; + boost::shared_ptr pinterface_type = _ExtractInterfaceType(ikm->getExtra_array()); + if( !pinterface_type ) { + pinterface_type = _ExtractInterfaceType(kmodel->getExtra_array()); + } + if( !!pinterface_type ) { + ROS_DEBUG_STREAM(str(boost::format("kinbody interface type: %s")%(*pinterface_type))); + } + + // find matching visual node + domNodeRef pvisualnode; + FOREACH(it, bindings.listKinematicsVisualBindings) { + if( it->second == ikm ) { + pvisualnode = it->first; + break; + } + } + if( !pvisualnode ) { + ROS_WARN_STREAM(str(boost::format("failed to find visual node for instance kinematics model %s\n")%ikm->getSid())); + return false; + } + + if( _model.name_.size() == 0 && !!ikm->getName() ) { + _model.name_ = ikm->getName(); + } + if( _model.name_.size() == 0 && !!ikm->getID() ) { + _model.name_ = ikm->getID(); + } + + if (!_ExtractKinematicsModel(kmodel, pvisualnode, pmodel, bindings.listAxisBindings)) { + ROS_WARN_STREAM(str(boost::format("failed to load kinbody from kinematics model %s\n")%kmodel->getID())); + return false; + } + return true; + } + + /// \brief append the kinematics model to the openrave kinbody + bool _ExtractKinematicsModel(domKinematics_modelRef kmodel, domNodeRef pnode, domPhysics_modelRef pmodel, const std::list& listAxisBindings) + { + std::vector vdomjoints; + ROS_DEBUG_STREAM(str(boost::format("kinematics model: %s\n")%_model.name_)); + if( !!pnode ) { + ROS_DEBUG_STREAM(str(boost::format("node name: %s\n")%pnode->getId())); + } + + // Process joint of the kinbody + domKinematics_model_techniqueRef ktec = kmodel->getTechnique_common(); + + // Store joints + for (size_t ijoint = 0; ijoint < ktec->getJoint_array().getCount(); ++ijoint) { + vdomjoints.push_back(ktec->getJoint_array()[ijoint]); + } + + // Store instances of joints + for (size_t ijoint = 0; ijoint < ktec->getInstance_joint_array().getCount(); ++ijoint) { + domJointRef pelt = daeSafeCast (ktec->getInstance_joint_array()[ijoint]->getUrl().getElement()); + if (!pelt) { + ROS_WARN_STREAM("failed to get joint from instance\n"); + } + else { + vdomjoints.push_back(pelt); + } + } + + ROS_DEBUG_STREAM(str(boost::format("Number of root links in the kmodel %d\n")%ktec->getLink_array().getCount())); + for (size_t ilink = 0; ilink < ktec->getLink_array().getCount(); ++ilink) { + _ExtractLink(ktec->getLink_array()[ilink], ilink == 0 ? pnode : domNodeRef(), Pose(), Pose(), vdomjoints, listAxisBindings); + } + + // TODO: implement mathml + for (size_t iform = 0; iform < ktec->getFormula_array().getCount(); ++iform) { + domFormulaRef pf = ktec->getFormula_array()[iform]; + if (!pf->getTarget()) { + ROS_WARN_STREAM("formula target not valid\n"); + continue; + } + + // find the target joint + boost::shared_ptr pjoint = _getJointFromRef(pf->getTarget()->getParam()->getValue(),pf); + if (!pjoint) { + continue; + } + + if (!!pf->getTechnique_common()) { + daeElementRef peltmath; + daeTArray children; + pf->getTechnique_common()->getChildren(children); + for (size_t ichild = 0; ichild < children.getCount(); ++ichild) { + daeElementRef pelt = children[ichild]; + if (_checkMathML(pelt,std::string("math")) ) { + peltmath = pelt; + } + else { + ROS_WARN_STREAM(str(boost::format("unsupported formula element: %s\n")%pelt->getElementName())); + } + } + if (!!peltmath) { + // full math xml spec not supported, only looking for ax+b pattern: + // a x b + double a = 1, b = 0; + daeElementRef psymboljoint; + BOOST_ASSERT(peltmath->getChildren().getCount()>0); + daeElementRef papplyelt = peltmath->getChildren()[0]; + BOOST_ASSERT(_checkMathML(papplyelt,"apply")); + BOOST_ASSERT(papplyelt->getChildren().getCount()>0); + if( _checkMathML(papplyelt->getChildren()[0],"plus") ) { + BOOST_ASSERT(papplyelt->getChildren().getCount()==3); + daeElementRef pa = papplyelt->getChildren()[1]; + daeElementRef pb = papplyelt->getChildren()[2]; + if( !_checkMathML(papplyelt->getChildren()[1],"apply") ) { + std::swap(pa,pb); + } + if( !_checkMathML(pa,"csymbol") ) { + BOOST_ASSERT(_checkMathML(pa,"apply")); + BOOST_ASSERT(_checkMathML(pa->getChildren()[0],"times")); + if( _checkMathML(pa->getChildren()[1],"csymbol") ) { + psymboljoint = pa->getChildren()[1]; + BOOST_ASSERT(_checkMathML(pa->getChildren()[2],"cn")); + std::stringstream ss(pa->getChildren()[2]->getCharData()); + ss >> a; + } + else { + psymboljoint = pa->getChildren()[2]; + BOOST_ASSERT(_checkMathML(pa->getChildren()[1],"cn")); + std::stringstream ss(pa->getChildren()[1]->getCharData()); + ss >> a; + } + } + else { + psymboljoint = pa; + } + BOOST_ASSERT(_checkMathML(pb,"cn")); + { + std::stringstream ss(pb->getCharData()); + ss >> b; + } + } + else if( _checkMathML(papplyelt->getChildren()[0],"minus") ) { + BOOST_ASSERT(_checkMathML(papplyelt->getChildren()[1],"csymbol")); + a = -1; + psymboljoint = papplyelt->getChildren()[1]; + } + else { + BOOST_ASSERT(_checkMathML(papplyelt->getChildren()[0],"csymbol")); + psymboljoint = papplyelt->getChildren()[0]; + } + BOOST_ASSERT(psymboljoint->hasAttribute("encoding")); + BOOST_ASSERT(psymboljoint->getAttribute("encoding")==std::string("COLLADA")); + boost::shared_ptr pbasejoint = _getJointFromRef(psymboljoint->getCharData().c_str(),pf); + if( !!pbasejoint ) { + // set the mimic properties + pjoint->mimic.reset(new JointMimic()); + pjoint->mimic->joint_name = pbasejoint->name; + pjoint->mimic->multiplier = a; + pjoint->mimic->offset = b; + ROS_DEBUG_STREAM(str(boost::format("assigning joint %s to mimic %s %f %f\n")%pjoint->name%pbasejoint->name%a%b)); + } + } + } + } + return true; + } + + /// \brief Extract Link info and add it to an existing body + boost::shared_ptr _ExtractLink(const domLinkRef pdomlink,const domNodeRef pdomnode, const Pose& tParentWorldLink, const Pose& tParentLink, const std::vector& vdomjoints, const std::list& listAxisBindings) { + // Set link name with the name of the COLLADA's Link + std::string linkname = _ExtractLinkName(pdomlink); + if( linkname.size() == 0 ) { + ROS_WARN_STREAM(" has no name or id, falling back to !\n"); + if( !!pdomnode ) { + if (!!pdomnode->getName()) { + linkname = pdomnode->getName(); + } + if( linkname.size() == 0 && !!pdomnode->getID()) { + linkname = pdomnode->getID(); + } + } + } + + boost::shared_ptr plink; + _model.getLink(linkname,plink); + if( !plink ) { + plink.reset(new Link()); + plink->name = linkname; + plink->visual.reset(new Visual()); + _model.links_.insert(std::make_pair(linkname,plink)); + } + + _getUserData(pdomlink)->p = plink; + if( !!pdomnode ) { + ROS_DEBUG_STREAM(str(boost::format("Node Id %s and Name %s\n")%pdomnode->getId()%pdomnode->getName())); + } + + std::list listGeomProperties; + if (!pdomlink) { + ROS_WARN_STREAM("Extract object NOT kinematics !!!\n"); + _ExtractGeometry(pdomnode,listGeomProperties,listAxisBindings,Pose()); + } + else { + ROS_DEBUG_STREAM(str(boost::format("Attachment link elements: %d\n")%pdomlink->getAttachment_full_array().getCount())); + Pose tlink = _poseFromMatrix(_ExtractFullTransform(pdomlink)); + plink->visual->origin = _poseMult(tParentLink, tlink); // use the kinematics coordinate system for each link +// ROS_INFO("link %s rot: %f %f %f %f",linkname.c_str(),plink->visual->origin.rotation.w, plink->visual->origin.rotation.x,plink->visual->origin.rotation.y,plink->visual->origin.rotation.z); +// ROS_INFO("link %s trans: %f %f %f",linkname.c_str(),plink->visual->origin.position.x,plink->visual->origin.position.y,plink->visual->origin.position.z); + + // Get the geometry + _ExtractGeometry(pdomnode,listGeomProperties,listAxisBindings,_poseMult(_poseMult(tParentWorldLink,tlink),plink->visual->origin)); + + ROS_DEBUG_STREAM(str(boost::format("After ExtractGeometry Attachment link elements: %d\n")%pdomlink->getAttachment_full_array().getCount())); + + // Process all atached links + for (size_t iatt = 0; iatt < pdomlink->getAttachment_full_array().getCount(); ++iatt) { + domLink::domAttachment_fullRef pattfull = pdomlink->getAttachment_full_array()[iatt]; + + // get link kinematics transformation + Pose tatt = _poseFromMatrix(_ExtractFullTransform(pattfull)); + + // process attached links + daeElement* peltjoint = daeSidRef(pattfull->getJoint(), pattfull).resolve().elt; + domJointRef pdomjoint = daeSafeCast (peltjoint); + + if (!pdomjoint) { + domInstance_jointRef pdomijoint = daeSafeCast (peltjoint); + if (!!pdomijoint) { + pdomjoint = daeSafeCast (pdomijoint->getUrl().getElement().cast()); + } + } + + if (!pdomjoint || pdomjoint->typeID() != domJoint::ID()) { + ROS_WARN_STREAM(str(boost::format("could not find attached joint %s!\n")%pattfull->getJoint())); + return boost::shared_ptr(); + } + + // get direct child link + if (!pattfull->getLink()) { + ROS_WARN_STREAM(str(boost::format("joint %s needs to be attached to a valid link\n")%pdomjoint->getID())); + continue; + } + + // find the correct joint in the bindings + daeTArray vdomaxes = pdomjoint->getChildrenByType(); + domNodeRef pchildnode; + + // see if joint has a binding to a visual node + FOREACHC(itaxisbinding,listAxisBindings) { + for (size_t ic = 0; ic < vdomaxes.getCount(); ++ic) { + // If the binding for the joint axis is found, retrieve the info + if (vdomaxes[ic] == itaxisbinding->pkinematicaxis) { + pchildnode = itaxisbinding->visualnode; + break; + } + } + if( !!pchildnode ) { + break; + } + } + if (!pchildnode) { + ROS_DEBUG_STREAM(str(boost::format("joint %s has no visual binding\n")%pdomjoint->getID())); + } + + // create the joints before creating the child links + std::vector > vjoints(vdomaxes.getCount()); + for (size_t ic = 0; ic < vdomaxes.getCount(); ++ic) { + bool joint_active = true; // if not active, put into the passive list + FOREACHC(itaxisbinding,listAxisBindings) { + if (vdomaxes[ic] == itaxisbinding->pkinematicaxis) { + if( !!itaxisbinding->kinematics_axis_info ) { + if( !!itaxisbinding->kinematics_axis_info->getActive() ) { + joint_active = resolveBool(itaxisbinding->kinematics_axis_info->getActive(),itaxisbinding->kinematics_axis_info); + } + } + break; + } + } + + boost::shared_ptr pjoint(new Joint()); + pjoint->limits.reset(new JointLimits()); + pjoint->parent_link_name = plink->name; + + if( !!pdomjoint->getName() ) { + pjoint->name = pdomjoint->getName(); + } + else { + pjoint->name = str(boost::format("dummy%d")%_model.joints_.size()); + } + + if( !joint_active ) { + ROS_INFO_STREAM(str(boost::format("joint %s is passive, but adding to hierarchy\n")%pjoint->name)); + } + + domAxis_constraintRef pdomaxis = vdomaxes[ic]; + if( strcmp(pdomaxis->getElementName(), "revolute") == 0 ) { + pjoint->type = Joint::REVOLUTE; + } + else if( strcmp(pdomaxis->getElementName(), "prismatic") == 0 ) { + pjoint->type = Joint::PRISMATIC; + } + else { + ROS_WARN_STREAM(str(boost::format("unsupported joint type: %s\n")%pdomaxis->getElementName())); + } + + _getUserData(pdomjoint)->p = pjoint; + _getUserData(pdomaxis)->p = boost::shared_ptr(new int(_model.joints_.size())); + _model.joints_[pjoint->name] = pjoint; + vjoints[ic] = pjoint; + } + + boost::shared_ptr pchildlink = _ExtractLink(pattfull->getLink(), pchildnode, _poseMult(_poseMult(tParentWorldLink,tlink), tatt), tatt, vdomjoints, listAxisBindings); + + if (!pchildlink) { + ROS_WARN_STREAM(str(boost::format("Link has no child: %s\n")%plink->name)); + continue; + } + + int numjoints = 0; + for (size_t ic = 0; ic < vdomaxes.getCount(); ++ic) { + domKinematics_axis_infoRef kinematics_axis_info; + domMotion_axis_infoRef motion_axis_info; + FOREACHC(itaxisbinding,listAxisBindings) { + bool bfound = false; + if (vdomaxes[ic] == itaxisbinding->pkinematicaxis) { + kinematics_axis_info = itaxisbinding->kinematics_axis_info; + motion_axis_info = itaxisbinding->motion_axis_info; + bfound = true; + break; + } + } + domAxis_constraintRef pdomaxis = vdomaxes[ic]; + if (!pchildlink) { + // create dummy child link + // multiple axes can be easily done with "empty links" + ROS_WARN_STREAM(str(boost::format("creating dummy link %s, num joints %d\n")%plink->name%numjoints)); + + std::stringstream ss; + ss << plink->name; + ss <<"_dummy" << numjoints; + pchildlink.reset(new Link()); + pchildlink->name = ss.str(); + _model.links_.insert(std::make_pair(pchildlink->name,pchildlink)); + } + + ROS_DEBUG_STREAM(str(boost::format("Joint %s assigned %d \n")%vjoints[ic]->name%ic)); + boost::shared_ptr pjoint = vjoints[ic]; + pjoint->child_link_name = pchildlink->name; + + // Axes and Anchor assignment. + pjoint->axis.x = pdomaxis->getAxis()->getValue()[0]; + pjoint->axis.y = pdomaxis->getAxis()->getValue()[1]; + pjoint->axis.z = pdomaxis->getAxis()->getValue()[2]; + + if (!motion_axis_info) { + ROS_WARN_STREAM(str(boost::format("No motion axis info for joint %s\n")%pjoint->name)); + } + + // Sets the Speed and the Acceleration of the joint + if (!!motion_axis_info) { + if (!!motion_axis_info->getSpeed()) { + pjoint->limits->velocity = resolveFloat(motion_axis_info->getSpeed(),motion_axis_info); + ROS_DEBUG("... Joint Speed: %f...\n",pjoint->limits->velocity); + } + if (!!motion_axis_info->getAcceleration()) { + pjoint->limits->effort = resolveFloat(motion_axis_info->getAcceleration(),motion_axis_info); + ROS_DEBUG("... Joint effort: %f...\n",pjoint->limits->effort); + } + } + + bool joint_locked = false; // if locked, joint angle is static + bool kinematics_limits = false; + + if (!!kinematics_axis_info) { + if (!!kinematics_axis_info->getLocked()) { + joint_locked = resolveBool(kinematics_axis_info->getLocked(),kinematics_axis_info); + } + + if (joint_locked) { // If joint is locked set limits to the static value. + if( pjoint->type == Joint::REVOLUTE || pjoint->type ==Joint::PRISMATIC) { + ROS_WARN_STREAM("lock joint!!\n"); + pjoint->limits->lower = 0; + pjoint->limits->upper = 0; + } + } + else if (kinematics_axis_info->getLimits()) { // If there are articulated system kinematics limits + kinematics_limits = true; + double fscale = (pjoint->type == Joint::REVOLUTE)?(M_PI/180.0f):_GetUnitScale(kinematics_axis_info); + if( pjoint->type == Joint::REVOLUTE || pjoint->type ==Joint::PRISMATIC) { + pjoint->limits->lower = fscale*(double)(resolveFloat(kinematics_axis_info->getLimits()->getMin(),kinematics_axis_info)); + pjoint->limits->upper = fscale*(double)(resolveFloat(kinematics_axis_info->getLimits()->getMax(),kinematics_axis_info)); + } + } + } + + // Search limits in the joints section + if (!kinematics_axis_info || (!joint_locked && !kinematics_limits)) { + // If there are NO LIMITS + if( !pdomaxis->getLimits() ) { + ROS_DEBUG_STREAM(str(boost::format("There are NO LIMITS in joint %s:%d ...\n")%pjoint->name%kinematics_limits)); + if( pjoint->type == Joint::REVOLUTE ) { + pjoint->type = Joint::CONTINUOUS; // continuous means revolute? + pjoint->limits->lower = -M_PI; + pjoint->limits->upper = M_PI; + } + else { + pjoint->limits->lower = -100000; + pjoint->limits->upper = 100000; + } + } + else { + ROS_DEBUG_STREAM(str(boost::format("There are LIMITS in joint %s ...\n")%pjoint->name)); + double fscale = (pjoint->type == Joint::REVOLUTE)?(M_PI/180.0f):_GetUnitScale(pdomaxis); + pjoint->limits->lower = (double)pdomaxis->getLimits()->getMin()->getValue()*fscale; + pjoint->limits->upper = (double)pdomaxis->getLimits()->getMax()->getValue()*fscale; + } + } + + //ROS_INFO("joint %s axis: %f %f %f",pjoint->name.c_str(),pjoint->axis.x,pjoint->axis.y,pjoint->axis.z); + pjoint->parent_to_joint_origin_transform = tatt; + pjoint->limits->velocity = pjoint->type == Joint::PRISMATIC ? 0.01 : 0.5f; + pchildlink.reset(); + ++numjoints; + } + } + } + + //pdomlink->getAttachment_start_array(); + //pdomlink->getAttachment_end_array(); + + plink->visual->geometry = _CreateGeometry(plink->name, listGeomProperties); + return plink; + } + + boost::shared_ptr _CreateGeometry(const std::string& name, const std::list& listGeomProperties) + { + boost::shared_ptr geometry(new Mesh()); + geometry->type = Geometry::MESH; + geometry->scale.x = 1; + geometry->scale.y = 1; + geometry->scale.z = 1; + + std::vector vertices; + std::vector indices; + FOREACHC(it, listGeomProperties) { + int voffset = vertices.size(), ioffset = indices.size(); + vertices.resize(vertices.size()+it->vertices.size()); + for(size_t i = 0; i < it->vertices.size(); ++i) { + vertices[voffset+i] = _poseMult(it->_t, it->vertices[i]); + } + indices.resize(indices.size()+it->indices.size()); + for(size_t i = 0; i < it->indices.size(); ++i) { + indices[ioffset+i] = voffset+it->indices[i]; + } + } + + // have to save the geometry into individual collada 1.4 files since URDF does not allow triangle meshes to be specified + std::stringstream daedata; + daedata << str(boost::format("\n\ +\n\ + \n\ + \n\ + Rosen Diankov\n\ + \n\ + robot_model/urdf temporary collada geometry\n\ + \n\ + \n\ + \n\ + Z_UP\n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + 0.0 0.0 0.1 1\n\ + \n\ + \n\ + 0.8 0.8 0.8 1\n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + ")%(vertices.size()*3)); + // fill with vertices + FOREACH(it,vertices) { + daedata << it->x << " " << it->y << " " << it->z << " "; + } + daedata << str(boost::format("\n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ +

")%vertices.size()%(indices.size()/3)); + // fill with indices + FOREACH(it,indices) { + daedata << *it << " "; + } + daedata << str(boost::format("

\n\ +
\n\ +
\n\ +
\n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ +
")%name%name); + + //= str(boost::format("%s/models/%s.dae")%_resourcedir%name); + geometry->filename = str(boost::format("/tmp/collada_model_reader_%s_XXXXXX.dae")%name); + int fd = mkstemps(&geometry->filename[0],4); + //ROS_INFO("temp file: %s",geometry->filename.c_str()); + std::string daedatastr = daedata.str(); + if( (size_t)write(fd,daedatastr.c_str(),daedatastr.size()) != daedatastr.size() ) { + ROS_ERROR("failed to write to geometry dae file %s",geometry->filename.c_str()); + } + close(fd); + _listTempFilenames.push_back(boost::shared_ptr(new UnlinkFilename(geometry->filename))); + geometry->filename = std::string("file://") + geometry->filename; + return geometry; + } + + /// Extract Geometry and apply the transformations of the node + /// \param pdomnode Node to extract the goemetry + /// \param plink Link of the kinematics model + void _ExtractGeometry(const domNodeRef pdomnode,std::list& listGeomProperties, const std::list& listAxisBindings, const Pose& tlink) + { + if( !pdomnode ) { + return; + } + + ROS_DEBUG_STREAM(str(boost::format("ExtractGeometry(node,link) of %s\n")%pdomnode->getName())); + + // For all child nodes of pdomnode + for (size_t i = 0; i < pdomnode->getNode_array().getCount(); i++) { + // check if contains a joint + bool contains=false; + FOREACHC(it,listAxisBindings) { + // don't check ID's check if the reference is the same! + if ( (pdomnode->getNode_array()[i]) == (it->visualnode)){ + contains=true; + break; + } + } + if (contains) { + continue; + } + + _ExtractGeometry(pdomnode->getNode_array()[i],listGeomProperties, listAxisBindings,tlink); + // Plink stayes the same for all children + // replace pdomnode by child = pdomnode->getNode_array()[i] + // hope for the best! + // put everything in a subroutine in order to process pdomnode too! + } + + unsigned int nGeomBefore = listGeomProperties.size(); // #of Meshes already associated to this link + + // get the geometry + for (size_t igeom = 0; igeom < pdomnode->getInstance_geometry_array().getCount(); ++igeom) { + domInstance_geometryRef domigeom = pdomnode->getInstance_geometry_array()[igeom]; + domGeometryRef domgeom = daeSafeCast (domigeom->getUrl().getElement()); + if (!domgeom) { + continue; + } + + // Gets materials + std::map mapmaterials; + if (!!domigeom->getBind_material() && !!domigeom->getBind_material()->getTechnique_common()) { + const domInstance_material_Array& matarray = domigeom->getBind_material()->getTechnique_common()->getInstance_material_array(); + for (size_t imat = 0; imat < matarray.getCount(); ++imat) { + domMaterialRef pmat = daeSafeCast(matarray[imat]->getTarget().getElement()); + if (!!pmat) { + mapmaterials[matarray[imat]->getSymbol()] = pmat; + } + } + } + + // Gets the geometry + _ExtractGeometry(domgeom, mapmaterials, listGeomProperties); + } + + std::list::iterator itgeom= listGeomProperties.begin(); + for (unsigned int i=0; i< nGeomBefore; i++) { + itgeom++; // change only the transformations of the newly found geometries. + } + + boost::array tmnodegeom = _poseMult(_matrixFromPose(_poseInverse(tlink)), _poseMult(_getNodeParentTransform(pdomnode), _ExtractFullTransform(pdomnode))); + Pose tnodegeom; + Vector3 vscale(1,1,1); + _decompose(tmnodegeom, tnodegeom, vscale); + +// std::stringstream ss; ss << "geom: "; +// for(int i = 0; i < 4; ++i) { +// ss << tmnodegeom[4*0+i] << " " << tmnodegeom[4*1+i] << " " << tmnodegeom[4*2+i] << " "; +// } +// ROS_INFO(ss.str().c_str()); + + // Switch between different type of geometry PRIMITIVES + for (; itgeom != listGeomProperties.end(); itgeom++) { + itgeom->_t = tnodegeom; + switch (itgeom->type) { + case GeomBox: + itgeom->vGeomData.x *= vscale.x; + itgeom->vGeomData.y *= vscale.y; + itgeom->vGeomData.z *= vscale.z; + break; + case GeomSphere: { + itgeom->vGeomData.x *= std::max(vscale.z, std::max(vscale.x, vscale.y)); + break; + } + case GeomCylinder: + itgeom->vGeomData.x *= std::max(vscale.x, vscale.y); + itgeom->vGeomData.y *= vscale.z; + break; + case GeomTrimesh: + for(size_t i = 0; i < itgeom->vertices.size(); ++i ) { + itgeom->vertices[i] = _poseMult(tmnodegeom,itgeom->vertices[i]); + } + itgeom->_t = Pose(); // reset back to identity + break; + default: + ROS_WARN_STREAM(str(boost::format("unknown geometry type: %d\n")%itgeom->type)); + } + } + } + + /// Paint the Geometry with the color material + /// \param pmat Material info of the COLLADA's model + /// \param geom Geometry properties in OpenRAVE + void _FillGeometryColor(const domMaterialRef pmat, GEOMPROPERTIES& geom) + { + if( !!pmat && !!pmat->getInstance_effect() ) { + domEffectRef peffect = daeSafeCast(pmat->getInstance_effect()->getUrl().getElement().cast()); + if( !!peffect ) { + domProfile_common::domTechnique::domPhongRef pphong = daeSafeCast(peffect->getDescendant(daeElement::matchType(domProfile_common::domTechnique::domPhong::ID()))); + if( !!pphong ) { + if( !!pphong->getAmbient() && !!pphong->getAmbient()->getColor() ) { + domFx_color c = pphong->getAmbient()->getColor()->getValue(); + geom.ambientColor.r = c[0]; + geom.ambientColor.g = c[1]; + geom.ambientColor.b = c[2]; + geom.ambientColor.a = c[3]; + } + if( !!pphong->getDiffuse() && !!pphong->getDiffuse()->getColor() ) { + domFx_color c = pphong->getDiffuse()->getColor()->getValue(); + geom.diffuseColor.r = c[0]; + geom.diffuseColor.g = c[1]; + geom.diffuseColor.b = c[2]; + geom.diffuseColor.a = c[3]; + } + } + } + } + } + + /// Extract the Geometry in TRIANGLES and adds it to OpenRave + /// \param triRef Array of triangles of the COLLADA's model + /// \param vertsRef Array of vertices of the COLLADA's model + /// \param mapmaterials Materials applied to the geometry + /// \param plink Link of the kinematics model + bool _ExtractGeometry(const domTrianglesRef triRef, const domVerticesRef vertsRef, const std::map& mapmaterials, std::list& listGeomProperties) + { + if( !triRef ) { + return false; + } + listGeomProperties.push_back(GEOMPROPERTIES()); + GEOMPROPERTIES& geom = listGeomProperties.back(); + geom.type = GeomTrimesh; + + // resolve the material and assign correct colors to the geometry + if( !!triRef->getMaterial() ) { + std::map::const_iterator itmat = mapmaterials.find(triRef->getMaterial()); + if( itmat != mapmaterials.end() ) { + _FillGeometryColor(itmat->second,geom); + } + } + + size_t triangleIndexStride = 0, vertexoffset = -1; + domInput_local_offsetRef indexOffsetRef; + + for (unsigned int w=0;wgetInput_array().getCount();w++) { + size_t offset = triRef->getInput_array()[w]->getOffset(); + daeString str = triRef->getInput_array()[w]->getSemantic(); + if (!strcmp(str,"VERTEX")) { + indexOffsetRef = triRef->getInput_array()[w]; + vertexoffset = offset; + } + if (offset> triangleIndexStride) { + triangleIndexStride = offset; + } + } + triangleIndexStride++; + + const domList_of_uints& indexArray =triRef->getP()->getValue(); + geom.indices.reserve(triRef->getCount()*3); + geom.vertices.reserve(triRef->getCount()*3); + for (size_t i=0;igetInput_array().getCount();++i) { + domInput_localRef localRef = vertsRef->getInput_array()[i]; + daeString str = localRef->getSemantic(); + if ( strcmp(str,"POSITION") == 0 ) { + const domSourceRef node = daeSafeCast(localRef->getSource().getElement()); + if( !node ) { + continue; + } + double fUnitScale = _GetUnitScale(node); + const domFloat_arrayRef flArray = node->getFloat_array(); + if (!!flArray) { + const domList_of_floats& listFloats = flArray->getValue(); + int k=vertexoffset; + int vertexStride = 3;//instead of hardcoded stride, should use the 'accessor' + for(size_t itri = 0; itri < triRef->getCount(); ++itri) { + if(k+2*triangleIndexStride < indexArray.getCount() ) { + for (int j=0;j<3;j++) { + int index0 = indexArray.get(k)*vertexStride; + domFloat fl0 = listFloats.get(index0); + domFloat fl1 = listFloats.get(index0+1); + domFloat fl2 = listFloats.get(index0+2); + k+=triangleIndexStride; + geom.indices.push_back(geom.vertices.size()); + geom.vertices.push_back(Vector3(fl0*fUnitScale,fl1*fUnitScale,fl2*fUnitScale)); + } + } + } + } + else { + ROS_WARN_STREAM("float array not defined!\n"); + } + break; + } + } + if( geom.indices.size() != 3*triRef->getCount() ) { + ROS_WARN_STREAM("triangles declares wrong count!\n"); + } + geom.InitCollisionMesh(); + return true; + } + + /// Extract the Geometry in TRIGLE FANS and adds it to OpenRave + /// \param triRef Array of triangle fans of the COLLADA's model + /// \param vertsRef Array of vertices of the COLLADA's model + /// \param mapmaterials Materials applied to the geometry + bool _ExtractGeometry(const domTrifansRef triRef, const domVerticesRef vertsRef, const std::map& mapmaterials, std::list& listGeomProperties) + { + if( !triRef ) { + return false; + } + listGeomProperties.push_back(GEOMPROPERTIES()); + GEOMPROPERTIES& geom = listGeomProperties.back(); + geom.type = GeomTrimesh; + + // resolve the material and assign correct colors to the geometry + if( !!triRef->getMaterial() ) { + std::map::const_iterator itmat = mapmaterials.find(triRef->getMaterial()); + if( itmat != mapmaterials.end() ) { + _FillGeometryColor(itmat->second,geom); + } + } + + size_t triangleIndexStride = 0, vertexoffset = -1; + domInput_local_offsetRef indexOffsetRef; + + for (unsigned int w=0;wgetInput_array().getCount();w++) { + size_t offset = triRef->getInput_array()[w]->getOffset(); + daeString str = triRef->getInput_array()[w]->getSemantic(); + if (!strcmp(str,"VERTEX")) { + indexOffsetRef = triRef->getInput_array()[w]; + vertexoffset = offset; + } + if (offset> triangleIndexStride) { + triangleIndexStride = offset; + } + } + triangleIndexStride++; + size_t primitivecount = triRef->getCount(); + if( primitivecount > triRef->getP_array().getCount() ) { + ROS_WARN_STREAM("trifans has incorrect count\n"); + primitivecount = triRef->getP_array().getCount(); + } + for(size_t ip = 0; ip < primitivecount; ++ip) { + domList_of_uints indexArray =triRef->getP_array()[ip]->getValue(); + for (size_t i=0;igetInput_array().getCount();++i) { + domInput_localRef localRef = vertsRef->getInput_array()[i]; + daeString str = localRef->getSemantic(); + if ( strcmp(str,"POSITION") == 0 ) { + const domSourceRef node = daeSafeCast(localRef->getSource().getElement()); + if( !node ) { + continue; + } + double fUnitScale = _GetUnitScale(node); + const domFloat_arrayRef flArray = node->getFloat_array(); + if (!!flArray) { + const domList_of_floats& listFloats = flArray->getValue(); + int k=vertexoffset; + int vertexStride = 3;//instead of hardcoded stride, should use the 'accessor' + size_t usedindices = 3*(indexArray.getCount()-2); + if( geom.indices.capacity() < geom.indices.size()+usedindices ) { + geom.indices.reserve(geom.indices.size()+usedindices); + } + if( geom.vertices.capacity() < geom.vertices.size()+indexArray.getCount() ) { + geom.vertices.reserve(geom.vertices.size()+indexArray.getCount()); + } + size_t startoffset = (int)geom.vertices.size(); + while(k < (int)indexArray.getCount() ) { + int index0 = indexArray.get(k)*vertexStride; + domFloat fl0 = listFloats.get(index0); + domFloat fl1 = listFloats.get(index0+1); + domFloat fl2 = listFloats.get(index0+2); + k+=triangleIndexStride; + geom.vertices.push_back(Vector3(fl0*fUnitScale,fl1*fUnitScale,fl2*fUnitScale)); + } + for(size_t ivert = startoffset+2; ivert < geom.vertices.size(); ++ivert) { + geom.indices.push_back(startoffset); + geom.indices.push_back(ivert-1); + geom.indices.push_back(ivert); + } + } + else { + ROS_WARN_STREAM("float array not defined!\n"); + } + break; + } + } + } + + geom.InitCollisionMesh(); + return false; + } + + /// Extract the Geometry in TRIANGLE STRIPS and adds it to OpenRave + /// \param triRef Array of Triangle Strips of the COLLADA's model + /// \param vertsRef Array of vertices of the COLLADA's model + /// \param mapmaterials Materials applied to the geometry + bool _ExtractGeometry(const domTristripsRef triRef, const domVerticesRef vertsRef, const std::map& mapmaterials, std::list& listGeomProperties) + { + if( !triRef ) { + return false; + } + listGeomProperties.push_back(GEOMPROPERTIES()); + GEOMPROPERTIES& geom = listGeomProperties.back(); + geom.type = GeomTrimesh; + + // resolve the material and assign correct colors to the geometry + if( !!triRef->getMaterial() ) { + std::map::const_iterator itmat = mapmaterials.find(triRef->getMaterial()); + if( itmat != mapmaterials.end() ) { + _FillGeometryColor(itmat->second,geom); + } + } + size_t triangleIndexStride = 0, vertexoffset = -1; + domInput_local_offsetRef indexOffsetRef; + + for (unsigned int w=0;wgetInput_array().getCount();w++) { + size_t offset = triRef->getInput_array()[w]->getOffset(); + daeString str = triRef->getInput_array()[w]->getSemantic(); + if (!strcmp(str,"VERTEX")) { + indexOffsetRef = triRef->getInput_array()[w]; + vertexoffset = offset; + } + if (offset> triangleIndexStride) { + triangleIndexStride = offset; + } + } + triangleIndexStride++; + size_t primitivecount = triRef->getCount(); + if( primitivecount > triRef->getP_array().getCount() ) { + ROS_WARN_STREAM("tristrips has incorrect count\n"); + primitivecount = triRef->getP_array().getCount(); + } + for(size_t ip = 0; ip < primitivecount; ++ip) { + domList_of_uints indexArray = triRef->getP_array()[ip]->getValue(); + for (size_t i=0;igetInput_array().getCount();++i) { + domInput_localRef localRef = vertsRef->getInput_array()[i]; + daeString str = localRef->getSemantic(); + if ( strcmp(str,"POSITION") == 0 ) { + const domSourceRef node = daeSafeCast(localRef->getSource().getElement()); + if( !node ) { + continue; + } + double fUnitScale = _GetUnitScale(node); + const domFloat_arrayRef flArray = node->getFloat_array(); + if (!!flArray) { + const domList_of_floats& listFloats = flArray->getValue(); + int k=vertexoffset; + int vertexStride = 3;//instead of hardcoded stride, should use the 'accessor' + size_t usedindices = indexArray.getCount()-2; + if( geom.indices.capacity() < geom.indices.size()+usedindices ) { + geom.indices.reserve(geom.indices.size()+usedindices); + } + if( geom.vertices.capacity() < geom.vertices.size()+indexArray.getCount() ) { + geom.vertices.reserve(geom.vertices.size()+indexArray.getCount()); + } + + size_t startoffset = (int)geom.vertices.size(); + while(k < (int)indexArray.getCount() ) { + int index0 = indexArray.get(k)*vertexStride; + domFloat fl0 = listFloats.get(index0); + domFloat fl1 = listFloats.get(index0+1); + domFloat fl2 = listFloats.get(index0+2); + k+=triangleIndexStride; + geom.vertices.push_back(Vector3(fl0*fUnitScale,fl1*fUnitScale,fl2*fUnitScale)); + } + + bool bFlip = false; + for(size_t ivert = startoffset+2; ivert < geom.vertices.size(); ++ivert) { + geom.indices.push_back(ivert-2); + geom.indices.push_back(bFlip ? ivert : ivert-1); + geom.indices.push_back(bFlip ? ivert-1 : ivert); + bFlip = !bFlip; + } + } + else { + ROS_WARN_STREAM("float array not defined!\n"); + } + break; + } + } + } + + geom.InitCollisionMesh(); + return false; + } + + /// Extract the Geometry in TRIANGLE STRIPS and adds it to OpenRave + /// \param triRef Array of Triangle Strips of the COLLADA's model + /// \param vertsRef Array of vertices of the COLLADA's model + /// \param mapmaterials Materials applied to the geometry + bool _ExtractGeometry(const domPolylistRef triRef, const domVerticesRef vertsRef, const std::map& mapmaterials, std::list& listGeomProperties) + { + if( !triRef ) { + return false; + } + listGeomProperties.push_back(GEOMPROPERTIES()); + GEOMPROPERTIES& geom = listGeomProperties.back(); + geom.type = GeomTrimesh; + + // resolve the material and assign correct colors to the geometry + if( !!triRef->getMaterial() ) { + std::map::const_iterator itmat = mapmaterials.find(triRef->getMaterial()); + if( itmat != mapmaterials.end() ) { + _FillGeometryColor(itmat->second,geom); + } + } + + size_t triangleIndexStride = 0,vertexoffset = -1; + domInput_local_offsetRef indexOffsetRef; + for (unsigned int w=0;wgetInput_array().getCount();w++) { + size_t offset = triRef->getInput_array()[w]->getOffset(); + daeString str = triRef->getInput_array()[w]->getSemantic(); + if (!strcmp(str,"VERTEX")) { + indexOffsetRef = triRef->getInput_array()[w]; + vertexoffset = offset; + } + if (offset> triangleIndexStride) { + triangleIndexStride = offset; + } + } + triangleIndexStride++; + const domList_of_uints& indexArray =triRef->getP()->getValue(); + for (size_t i=0;igetInput_array().getCount();++i) { + domInput_localRef localRef = vertsRef->getInput_array()[i]; + daeString str = localRef->getSemantic(); + if ( strcmp(str,"POSITION") == 0 ) { + const domSourceRef node = daeSafeCast(localRef->getSource().getElement()); + if( !node ) { + continue; + } + double fUnitScale = _GetUnitScale(node); + const domFloat_arrayRef flArray = node->getFloat_array(); + if (!!flArray) { + const domList_of_floats& listFloats = flArray->getValue(); + size_t k=vertexoffset; + int vertexStride = 3;//instead of hardcoded stride, should use the 'accessor' + for(size_t ipoly = 0; ipoly < triRef->getVcount()->getValue().getCount(); ++ipoly) { + size_t numverts = triRef->getVcount()->getValue()[ipoly]; + if(numverts > 0 && k+(numverts-1)*triangleIndexStride < indexArray.getCount() ) { + size_t startoffset = geom.vertices.size(); + for (size_t j=0;j& mapmaterials, std::list& listGeomProperties) + { + if( !geom ) { + return false; + } + std::vector vconvexhull; + if (geom->getMesh()) { + const domMeshRef meshRef = geom->getMesh(); + for (size_t tg = 0;tggetTriangles_array().getCount();tg++) { + _ExtractGeometry(meshRef->getTriangles_array()[tg], meshRef->getVertices(), mapmaterials, listGeomProperties); + } + for (size_t tg = 0;tggetTrifans_array().getCount();tg++) { + _ExtractGeometry(meshRef->getTrifans_array()[tg], meshRef->getVertices(), mapmaterials, listGeomProperties); + } + for (size_t tg = 0;tggetTristrips_array().getCount();tg++) { + _ExtractGeometry(meshRef->getTristrips_array()[tg], meshRef->getVertices(), mapmaterials, listGeomProperties); + } + for (size_t tg = 0;tggetPolylist_array().getCount();tg++) { + _ExtractGeometry(meshRef->getPolylist_array()[tg], meshRef->getVertices(), mapmaterials, listGeomProperties); + } + if( meshRef->getPolygons_array().getCount()> 0 ) { + ROS_WARN_STREAM("openrave does not support collada polygons\n"); + } + + // if( alltrimesh.vertices.size() == 0 ) { + // const domVerticesRef vertsRef = meshRef->getVertices(); + // for (size_t i=0;igetInput_array().getCount();i++) { + // domInput_localRef localRef = vertsRef->getInput_array()[i]; + // daeString str = localRef->getSemantic(); + // if ( strcmp(str,"POSITION") == 0 ) { + // const domSourceRef node = daeSafeCast(localRef->getSource().getElement()); + // if( !node ) + // continue; + // double fUnitScale = _GetUnitScale(node); + // const domFloat_arrayRef flArray = node->getFloat_array(); + // if (!!flArray) { + // const domList_of_floats& listFloats = flArray->getValue(); + // int vertexStride = 3;//instead of hardcoded stride, should use the 'accessor' + // vconvexhull.reserve(vconvexhull.size()+listFloats.getCount()); + // for (size_t vertIndex = 0;vertIndex < listFloats.getCount();vertIndex+=vertexStride) { + // //btVector3 verts[3]; + // domFloat fl0 = listFloats.get(vertIndex); + // domFloat fl1 = listFloats.get(vertIndex+1); + // domFloat fl2 = listFloats.get(vertIndex+2); + // vconvexhull.push_back(Vector3(fl0*fUnitScale,fl1*fUnitScale,fl2*fUnitScale)); + // } + // } + // } + // } + // + // _computeConvexHull(vconvexhull,alltrimesh); + // } + + return true; + } + else if (geom->getConvex_mesh()) { + { + const domConvex_meshRef convexRef = geom->getConvex_mesh(); + daeElementRef otherElemRef = convexRef->getConvex_hull_of().getElement(); + if ( !!otherElemRef ) { + domGeometryRef linkedGeom = *(domGeometryRef*)&otherElemRef; + ROS_WARN_STREAM( "otherLinked\n"); + } + else { + ROS_WARN("convexMesh polyCount = %d\n",(int)convexRef->getPolygons_array().getCount()); + ROS_WARN("convexMesh triCount = %d\n",(int)convexRef->getTriangles_array().getCount()); + } + } + + const domConvex_meshRef convexRef = geom->getConvex_mesh(); + //daeString urlref = convexRef->getConvex_hull_of().getURI(); + daeString urlref2 = convexRef->getConvex_hull_of().getOriginalURI(); + if (urlref2) { + daeElementRef otherElemRef = convexRef->getConvex_hull_of().getElement(); + + // Load all the geometry libraries + for ( size_t i = 0; i < _dom->getLibrary_geometries_array().getCount(); i++) { + domLibrary_geometriesRef libgeom = _dom->getLibrary_geometries_array()[i]; + for (size_t i = 0; i < libgeom->getGeometry_array().getCount(); i++) { + domGeometryRef lib = libgeom->getGeometry_array()[i]; + if (!strcmp(lib->getId(),urlref2+1)) { // skip the # at the front of urlref2 + //found convex_hull geometry + domMesh *meshElement = lib->getMesh();//linkedGeom->getMesh(); + if (meshElement) { + const domVerticesRef vertsRef = meshElement->getVertices(); + for (size_t i=0;igetInput_array().getCount();i++) { + domInput_localRef localRef = vertsRef->getInput_array()[i]; + daeString str = localRef->getSemantic(); + if ( strcmp(str,"POSITION") == 0) { + const domSourceRef node = daeSafeCast(localRef->getSource().getElement()); + if( !node ) { + continue; + } + double fUnitScale = _GetUnitScale(node); + const domFloat_arrayRef flArray = node->getFloat_array(); + if (!!flArray) { + vconvexhull.reserve(vconvexhull.size()+flArray->getCount()); + const domList_of_floats& listFloats = flArray->getValue(); + for (size_t k=0;k+2getCount();k+=3) { + domFloat fl0 = listFloats.get(k); + domFloat fl1 = listFloats.get(k+1); + domFloat fl2 = listFloats.get(k+2); + vconvexhull.push_back(Vector3(fl0*fUnitScale,fl1*fUnitScale,fl2*fUnitScale)); + } + } + } + } + } + } + } + } + } + else { + //no getConvex_hull_of but direct vertices + const domVerticesRef vertsRef = convexRef->getVertices(); + for (size_t i=0;igetInput_array().getCount();i++) { + domInput_localRef localRef = vertsRef->getInput_array()[i]; + daeString str = localRef->getSemantic(); + if ( strcmp(str,"POSITION") == 0 ) { + const domSourceRef node = daeSafeCast(localRef->getSource().getElement()); + if( !node ) { + continue; + } + double fUnitScale = _GetUnitScale(node); + const domFloat_arrayRef flArray = node->getFloat_array(); + if (!!flArray) { + const domList_of_floats& listFloats = flArray->getValue(); + vconvexhull.reserve(vconvexhull.size()+flArray->getCount()); + for (size_t k=0;k+2getCount();k+=3) { + domFloat fl0 = listFloats.get(k); + domFloat fl1 = listFloats.get(k+1); + domFloat fl2 = listFloats.get(k+2); + vconvexhull.push_back(Vector3(fl0*fUnitScale,fl1*fUnitScale,fl2*fUnitScale)); + } + } + } + } + } + + if( vconvexhull.size()> 0 ) { + listGeomProperties.push_back(GEOMPROPERTIES()); + GEOMPROPERTIES& geom = listGeomProperties.back(); + geom.type = GeomTrimesh; + + //_computeConvexHull(vconvexhull,trimesh); + geom.InitCollisionMesh(); + } + return true; + } + + return false; + } + + /// \brief extract the robot manipulators + void _ExtractRobotManipulators(const domArticulated_systemRef as) + { + for(size_t ie = 0; ie < as->getExtra_array().getCount(); ++ie) { + domExtraRef pextra = as->getExtra_array()[ie]; + if( strcmp(pextra->getType(), "manipulator") == 0 ) { + std::string name = pextra->getAttribute("name"); + if( name.size() == 0 ) { + name = str(boost::format("manipulator%d")%_nGlobalManipulatorId++); + } + domTechniqueRef tec = _ExtractOpenRAVEProfile(pextra->getTechnique_array()); + if( !!tec ) { +// RobotBase::ManipulatorPtr pmanip(new RobotBase::Manipulator(probot)); +// pmanip->_name = name; +// daeElement* pframe_origin = tec->getChild("frame_origin"); +// daeElement* pframe_tip = tec->getChild("frame_tip"); +// if( !!pframe_origin ) { +// domLinkRef plink = daeSafeCast(daeSidRef(pframe_origin->getAttribute("link"), as).resolve().elt); +// if( !!plink ) { +// pmanip->_pBase = boost::static_pointer_cast(_getUserData(plink)->p); +// } +// if( !pmanip->_pBase ) { +// ROS_WARN_STREAM(str(boost::format("failed to find manipulator %s frame origin %s\n")%name%pframe_origin->getAttribute("link"))); +// continue; +// } +// } +// if( !!pframe_tip ) { +// daeElementRef plink = daeSafeCast(daeSidRef(pframe_tip->getAttribute("link"), as).resolve().elt); +// if( !!plink ) { +// pmanip->_pEndEffector = boost::static_pointer_cast(_getUserData(plink)->p); +// } +// if( !pmanip->_pEndEffector ) { +// ROS_WARN_STREAM(str(boost::format("failed to find manipulator %s frame tip %s\n")%name%pframe_tip->getAttribute("link"))); +// continue; +// } +// pmanip->_tGrasp = _ExtractFullTransformFromChildren(pframe_tip); +// } +// +// for(size_t ic = 0; ic < tec->getContents().getCount(); ++ic) { +// daeElementRef pgripper_axis = tec->getContents()[ic]; +// if( pgripper_axis->getElementName() == std::string("gripper_axis") ) { +// domAxis_constraintRef paxis = daeSafeCast(daeSidRef(pgripper_axis->getAttribute("axis"), as).resolve().elt); +// if( !!paxis ) { +// boost::shared_ptr pdofindex = boost::static_pointer_cast(_getUserData(paxis)->p); +// if( !!pdofindex ) { +// if( *pdofindex < 0 ) { +// ROS_WARN_STREAM(str(boost::format("manipulator %s gripper axis %s references passive joint\n")%name%pgripper_axis->getAttribute("axis"))); +// } +// else { +// float closingdirection = 0; +// daeElementRef pclosingdirection = daeElementRef(pgripper_axis->getChild("closingdirection")); +// if( !pclosingdirection || !resolveCommon_float_or_param(pclosingdirection,as,closingdirection) ) { +// ROS_WARN_STREAM(str(boost::format("manipulator %s gripper axis %s failed to process closing direction\n")%name%pgripper_axis->getAttribute("axis"))); +// } +// pmanip->_vgripperdofindices.push_back(*pdofindex); +// pmanip->_vClosingDirection.push_back((double)closingdirection); +// } +// continue; +// } +// } +// ROS_WARN_STREAM(str(boost::format("could not find manipulator gripper axis %s\n")%pgripper_axis->getAttribute("axis"))); +// } +// } +// probot->GetManipulators().push_back(pmanip); + } + else { + ROS_WARN_STREAM(str(boost::format("cannot create robot %s manipulator %s\n")%_model.name_%name)); + } + } + } + } + + /// \brief Extract Sensors attached to a Robot + void _ExtractRobotAttachedSensors(const domArticulated_systemRef as) + { + for (size_t ie = 0; ie < as->getExtra_array().getCount(); ie++) { + domExtraRef pextra = as->getExtra_array()[ie]; + if( strcmp(pextra->getType(), "sensor") == 0 ) { + std::string name = pextra->getAttribute("name"); + if( name.size() == 0 ) { + name = str(boost::format("sensor%d")%_nGlobalSensorId++); + } + domTechniqueRef tec = _ExtractOpenRAVEProfile(pextra->getTechnique_array()); + if( !!tec ) { +// RobotBase::AttachedSensorPtr pattachedsensor(new RobotBase::AttachedSensor(probot)); +// pattachedsensor->_name = name; +// daeElement* pframe_origin = tec->getChild("frame_origin"); +// if( !!pframe_origin ) { +// domLinkRef plink = daeSafeCast(daeSidRef(pframe_origin->getAttribute("link"), as).resolve().elt); +// if( !!plink ) { +// pattachedsensor->pattachedlink = boost::static_pointer_cast(_getUserData(plink)->p); +// } +// if( !pattachedsensor->pattachedlink.lock() ) { +// ROS_WARN_STREAM(str(boost::format("failed to find manipulator %s frame origin %s\n")%name%pframe_origin->getAttribute("link"))); +// continue; +// } +// pattachedsensor->trelative = _ExtractFullTransformFromChildren(pframe_origin); +// } +// if( !_ExtractSensor(pattachedsensor->psensor,tec->getChild("instance_sensor")) ) { +// ROS_WARN_STREAM(str(boost::format("cannot find instance_sensor for attached sensor %s:%s\n")%_model.name_%name)); +// } +// else { +// pattachedsensor->pdata = pattachedsensor->GetSensor()->CreateSensorData(); +// } +// probot->GetAttachedSensors().push_back(pattachedsensor); + } + else { + ROS_WARN_STREAM(str(boost::format("cannot create robot %s attached sensor %s\n")%_model.name_%name)); + } + } + } + } + + /// \brief Extract an instance of a sensor +// bool _ExtractSensor(SensorBasePtr& psensor, daeElementRef instance_sensor) +// { +// if( !instance_sensor ) { +// return false; +// } +// if( instance_sensor->hasAttribute("url") ) { +// ROS_WARN_STREAM("instance_sensor has no url\n"); +// return false; +// } +// +// std::string instance_id = instance_sensor->getAttribute("id"); +// std::string instance_url = instance_sensor->getAttribute("url"); +// daeElementRef domsensor = _getElementFromUrl(daeURI(*instance_sensor,instance_url)); +// if( !domsensor ) { +// ROS_WARN_STREAM(str(boost::format("failed to find senor id %s url=%s\n")%instance_id%instance_url)); +// return false; +// } +// if( !domsensor->hasAttribute("type") ) { +// ROS_WARN_STREAM("collada needs type attribute\n"); +// return false; +// } +// psensor = RaveCreateSensor(_penv, domsensor->getAttribute("type")); +// if( !psensor ) { +// return false; +// } +// +// // Create the custom XML reader to read in the data (determined by users) +// BaseXMLReaderPtr pcurreader = RaveCallXMLReader(PT_Sensor,psensor->GetXMLId(),psensor, std::list >()); +// if( !pcurreader ) { +// pcurreader.reset(); +// return false; +// } +// _ProcessXMLReader(pcurreader,domsensor); +// psensor->__mapReadableInterfaces[psensor->GetXMLId()] = pcurreader->GetReadable(); +// if( !psensor->Init(instance_sensor->getAttribute("args")) ) { +// ROS_WARN_STREAM(str(boost::format("failed to initialize sensor %s\n"))); +// psensor.reset(); +// } +// return true; +// } + + /// \brief feed the collada data into the base readers xml class +// static void _ProcessXMLReader(BaseXMLReaderPtr preader, daeElementRef elt) +// { +// daeTArray children; +// elt->getChildren(children); +// std::list > atts; +// for (size_t i = 0; i < children.getCount(); i++) { +// std::string xmltag = tolowerstring(children[i]->getElementName()); +// daeTArray domatts; +// children[i]->getAttributes(domatts); +// atts.clear(); +// for(size_t j = 0; j < domatts.getCount(); ++j) { +// atts.push_back(std::make_pair(domatts[j].name,domatts[j].value)); +// } +// preader->startElement(xmltag,atts); +// _ProcessXMLReader(preader,children[i]); +// preader->characters(children[i]->getCharData()); +// preader->endElement(xmltag); +// } +// } + + inline daeElementRef _getElementFromUrl(const daeURI &uri) + { + return daeStandardURIResolver(*_collada).resolveElement(uri); + } + + static daeElement* searchBinding(domCommon_sidref_or_paramRef paddr, daeElementRef parent) + { + if( !!paddr->getSIDREF() ) { + return daeSidRef(paddr->getSIDREF()->getValue(),parent).resolve().elt; + } + if (!!paddr->getParam()) { + return searchBinding(paddr->getParam()->getValue(),parent); + } + return NULL; + } + + /// Search a given parameter reference and stores the new reference to search. + /// \param ref the reference name to search + /// \param parent The array of parameter where the method searchs. + static daeElement* searchBinding(daeString ref, daeElementRef parent) + { + if( !parent ) { + return NULL; + } + daeElement* pelt = NULL; + domKinematics_sceneRef kscene = daeSafeCast(parent.cast()); + if( !!kscene ) { + pelt = searchBindingArray(ref,kscene->getInstance_articulated_system_array()); + if( !!pelt ) { + return pelt; + } + return searchBindingArray(ref,kscene->getInstance_kinematics_model_array()); + } + domArticulated_systemRef articulated_system = daeSafeCast(parent.cast()); + if( !!articulated_system ) { + if( !!articulated_system->getKinematics() ) { + pelt = searchBindingArray(ref,articulated_system->getKinematics()->getInstance_kinematics_model_array()); + if( !!pelt ) { + return pelt; + } + } + if( !!articulated_system->getMotion() ) { + return searchBinding(ref,articulated_system->getMotion()->getInstance_articulated_system()); + } + return NULL; + } + // try to get a bind array + daeElementRef pbindelt; + const domKinematics_bind_Array* pbindarray = NULL; + const domKinematics_newparam_Array* pnewparamarray = NULL; + domInstance_articulated_systemRef ias = daeSafeCast(parent.cast()); + if( !!ias ) { + pbindarray = &ias->getBind_array(); + pbindelt = ias->getUrl().getElement(); + pnewparamarray = &ias->getNewparam_array(); + } + if( !pbindarray || !pbindelt ) { + domInstance_kinematics_modelRef ikm = daeSafeCast(parent.cast()); + if( !!ikm ) { + pbindarray = &ikm->getBind_array(); + pbindelt = ikm->getUrl().getElement(); + pnewparamarray = &ikm->getNewparam_array(); + } + } + if( !!pbindarray && !!pbindelt ) { + for (size_t ibind = 0; ibind < pbindarray->getCount(); ++ibind) { + domKinematics_bindRef pbind = (*pbindarray)[ibind]; + if( !!pbind->getSymbol() && strcmp(pbind->getSymbol(), ref) == 0 ) { + // found a match + if( !!pbind->getParam() ) { + return searchBinding(pbind->getParam()->getRef(), pbindelt); + } + else if( !!pbind->getSIDREF() ) { + return daeSidRef(pbind->getSIDREF()->getValue(), pbindelt).resolve().elt; + } + } + } + for(size_t inewparam = 0; inewparam < pnewparamarray->getCount(); ++inewparam) { + domKinematics_newparamRef newparam = (*pnewparamarray)[inewparam]; + if( !!newparam->getSid() && strcmp(newparam->getSid(), ref) == 0 ) { + if( !!newparam->getSIDREF() ) { // can only bind with SIDREF + return daeSidRef(newparam->getSIDREF()->getValue(),pbindelt).resolve().elt; + } + ROS_WARN_STREAM(str(boost::format("newparam sid=%s does not have SIDREF\n")%newparam->getSid())); + } + } + } + ROS_WARN_STREAM(str(boost::format("failed to get binding '%s' for element: %s\n")%ref%parent->getElementName())); + return NULL; + } + + static daeElement* searchBindingArray(daeString ref, const domInstance_articulated_system_Array& paramArray) + { + for(size_t iikm = 0; iikm < paramArray.getCount(); ++iikm) { + daeElement* pelt = searchBinding(ref,paramArray[iikm].cast()); + if( !!pelt ) { + return pelt; + } + } + return NULL; + } + + static daeElement* searchBindingArray(daeString ref, const domInstance_kinematics_model_Array& paramArray) + { + for(size_t iikm = 0; iikm < paramArray.getCount(); ++iikm) { + daeElement* pelt = searchBinding(ref,paramArray[iikm].cast()); + if( !!pelt ) { + return pelt; + } + } + return NULL; + } + + template static xsBoolean resolveBool(domCommon_bool_or_paramRef paddr, const U& parent) { + if( !!paddr->getBool() ) { + return paddr->getBool()->getValue(); + } + if( !paddr->getParam() ) { + ROS_WARN_STREAM("param not specified, setting to 0\n"); + return false; + } + for(size_t iparam = 0; iparam < parent->getNewparam_array().getCount(); ++iparam) { + domKinematics_newparamRef pnewparam = parent->getNewparam_array()[iparam]; + if( !!pnewparam->getSid() && strcmp(pnewparam->getSid(), paddr->getParam()->getValue()) == 0 ) { + if( !!pnewparam->getBool() ) { + return pnewparam->getBool()->getValue(); + } + else if( !!pnewparam->getSIDREF() ) { + domKinematics_newparam::domBoolRef ptarget = daeSafeCast(daeSidRef(pnewparam->getSIDREF()->getValue(), pnewparam).resolve().elt); + if( !ptarget ) { + ROS_WARN("failed to resolve %s from %s\n", pnewparam->getSIDREF()->getValue(), paddr->getID()); + continue; + } + return ptarget->getValue(); + } + } + } + ROS_WARN_STREAM(str(boost::format("failed to resolve %s\n")%paddr->getParam()->getValue())); + return false; + } + template static domFloat resolveFloat(domCommon_float_or_paramRef paddr, const U& parent) { + if( !!paddr->getFloat() ) { + return paddr->getFloat()->getValue(); + } + if( !paddr->getParam() ) { + ROS_WARN_STREAM("param not specified, setting to 0\n"); + return 0; + } + for(size_t iparam = 0; iparam < parent->getNewparam_array().getCount(); ++iparam) { + domKinematics_newparamRef pnewparam = parent->getNewparam_array()[iparam]; + if( !!pnewparam->getSid() && strcmp(pnewparam->getSid(), paddr->getParam()->getValue()) == 0 ) { + if( !!pnewparam->getFloat() ) { + return pnewparam->getFloat()->getValue(); + } + else if( !!pnewparam->getSIDREF() ) { + domKinematics_newparam::domFloatRef ptarget = daeSafeCast(daeSidRef(pnewparam->getSIDREF()->getValue(), pnewparam).resolve().elt); + if( !ptarget ) { + ROS_WARN("failed to resolve %s from %s\n", pnewparam->getSIDREF()->getValue(), paddr->getID()); + continue; + } + return ptarget->getValue(); + } + } + } + ROS_WARN_STREAM(str(boost::format("failed to resolve %s\n")%paddr->getParam()->getValue())); + return 0; + } + + static bool resolveCommon_float_or_param(daeElementRef pcommon, daeElementRef parent, float& f) + { + daeElement* pfloat = pcommon->getChild("float"); + if( !!pfloat ) { + std::stringstream sfloat(pfloat->getCharData()); + sfloat >> f; + return !!sfloat; + } + daeElement* pparam = pcommon->getChild("param"); + if( !!pparam ) { + if( pparam->hasAttribute("ref") ) { + ROS_WARN_STREAM("cannot process param ref\n"); + } + else { + daeElement* pelt = daeSidRef(pparam->getCharData(),parent).resolve().elt; + if( !!pelt ) { + ROS_WARN_STREAM(str(boost::format("found param ref: %s from %s\n")%pelt->getCharData()%pparam->getCharData())); + } + } + } + return false; + } + + static boost::array _matrixIdentity() + { + boost::array m = {{1,0,0,0,0,1,0,0,0,0,1,0}}; + return m; + }; + + /// Gets all transformations applied to the node + static boost::array _getTransform(daeElementRef pelt) + { + boost::array m = _matrixIdentity(); + domRotateRef protate = daeSafeCast(pelt); + if( !!protate ) { + m = _matrixFromAxisAngle(Vector3(protate->getValue()[0],protate->getValue()[1],protate->getValue()[2]), (double)(protate->getValue()[3]*(M_PI/180.0))); + return m; + } + + domTranslateRef ptrans = daeSafeCast(pelt); + if( !!ptrans ) { + double scale = _GetUnitScale(pelt); + m[3] = ptrans->getValue()[0]*scale; + m[7] = ptrans->getValue()[1]*scale; + m[11] = ptrans->getValue()[2]*scale; + return m; + } + + domMatrixRef pmat = daeSafeCast(pelt); + if( !!pmat ) { + double scale = _GetUnitScale(pelt); + for(int i = 0; i < 3; ++i) { + m[4*i+0] = pmat->getValue()[4*i+0]; + m[4*i+1] = pmat->getValue()[4*i+1]; + m[4*i+2] = pmat->getValue()[4*i+2]; + m[4*i+3] = pmat->getValue()[4*i+3]*scale; + } + return m; + } + + domScaleRef pscale = daeSafeCast(pelt); + if( !!pscale ) { + m[0] = pscale->getValue()[0]; + m[4*1+1] = pscale->getValue()[1]; + m[4*2+2] = pscale->getValue()[2]; + return m; + } + + domLookatRef pcamera = daeSafeCast(pelt); + if( pelt->typeID() == domLookat::ID() ) { + ROS_ERROR_STREAM("look at transform not implemented\n"); + return m; + } + + domSkewRef pskew = daeSafeCast(pelt); + if( !!pskew ) { + ROS_ERROR_STREAM("skew transform not implemented\n"); + } + + return m; + } + + /// Travels recursively the node parents of the given one + /// to extract the Transform arrays that affects the node given + template static boost::array _getNodeParentTransform(const T pelt) { + domNodeRef pnode = daeSafeCast(pelt->getParent()); + if( !pnode ) { + return _matrixIdentity(); + } + return _poseMult(_getNodeParentTransform(pnode), _ExtractFullTransform(pnode)); + } + + /// \brief Travel by the transformation array and calls the _getTransform method + template static boost::array _ExtractFullTransform(const T pelt) { + boost::array t = _matrixIdentity(); + for(size_t i = 0; i < pelt->getContents().getCount(); ++i) { + t = _poseMult(t, _getTransform(pelt->getContents()[i])); + } + return t; + } + + /// \brief Travel by the transformation array and calls the _getTransform method + template static boost::array _ExtractFullTransformFromChildren(const T pelt) { + boost::array t = _matrixIdentity(); + daeTArray children; pelt->getChildren(children); + for(size_t i = 0; i < children.getCount(); ++i) { + t = _poseMult(t, _getTransform(children[i])); + } + return t; + } + + // decompose a matrix into a scale and rigid transform (necessary for model scales) + void _decompose(const boost::array& tm, Pose& tout, Vector3& vscale) + { + vscale.x = 1; vscale.y = 1; vscale.z = 1; + tout = _poseFromMatrix(tm); + } + + virtual void handleError( daeString msg ) + { + ROS_ERROR("COLLADA error: %s\n", msg); + } + + virtual void handleWarning( daeString msg ) + { + ROS_WARN("COLLADA warning: %s\n", msg); + } + + inline static double _GetUnitScale(daeElement* pelt) + { + return ((USERDATA*)pelt->getUserData())->scale; + } + + domTechniqueRef _ExtractOpenRAVEProfile(const domTechnique_Array& arr) + { + for(size_t i = 0; i < arr.getCount(); ++i) { + if( strcmp(arr[i]->getProfile(), "OpenRAVE") == 0 ) { + return arr[i]; + } + } + return domTechniqueRef(); + } + + /// \brief returns an openrave interface type from the extra array + boost::shared_ptr _ExtractInterfaceType(const domExtra_Array& arr) { + for(size_t i = 0; i < arr.getCount(); ++i) { + if( strcmp(arr[i]->getType(),"interface_type") == 0 ) { + domTechniqueRef tec = _ExtractOpenRAVEProfile(arr[i]->getTechnique_array()); + if( !!tec ) { + daeElement* ptype = tec->getChild("interface"); + if( !!ptype ) { + return boost::shared_ptr(new std::string(ptype->getCharData())); + } + } + } + } + return boost::shared_ptr(); + } + + std::string _ExtractLinkName(domLinkRef pdomlink) { + std::string linkname; + if( !!pdomlink ) { + if( !!pdomlink->getName() ) { + linkname = pdomlink->getName(); + } + if( linkname.size() == 0 && !!pdomlink->getID() ) { + linkname = pdomlink->getID(); + } + } + return linkname; + } + + bool _checkMathML(daeElementRef pelt,const std::string& type) + { + if( pelt->getElementName()==type ) { + return true; + } + // check the substring after ':' + std::string name = pelt->getElementName(); + std::size_t pos = name.find_last_of(':'); + if( pos == std::string::npos ) { + return false; + } + return name.substr(pos+1)==type; + } + + boost::shared_ptr _getJointFromRef(xsToken targetref, daeElementRef peltref) { + daeElement* peltjoint = daeSidRef(targetref, peltref).resolve().elt; + domJointRef pdomjoint = daeSafeCast (peltjoint); + + if (!pdomjoint) { + domInstance_jointRef pdomijoint = daeSafeCast (peltjoint); + if (!!pdomijoint) { + pdomjoint = daeSafeCast (pdomijoint->getUrl().getElement().cast()); + } + } + + if (!pdomjoint || pdomjoint->typeID() != domJoint::ID() || !pdomjoint->getName()) { + ROS_WARN_STREAM(str(boost::format("could not find collada joint %s!\n")%targetref)); + return boost::shared_ptr(); + } + + boost::shared_ptr pjoint = _model.joints_[std::string(pdomjoint->getName())]; + if(!pjoint) { + ROS_WARN_STREAM(str(boost::format("could not find openrave joint %s!\n")%pdomjoint->getName())); + } + return pjoint; + } + + /// \brief go through all kinematics binds to get a kinematics/visual pair + /// \param kiscene instance of one kinematics scene, binds the kinematic and visual models + /// \param bindings the extracted bindings + static void _ExtractKinematicsVisualBindings(domInstance_with_extraRef viscene, domInstance_kinematics_sceneRef kiscene, KinematicsSceneBindings& bindings) + { + domKinematics_sceneRef kscene = daeSafeCast (kiscene->getUrl().getElement().cast()); + if (!kscene) { + return; + } + for (size_t imodel = 0; imodel < kiscene->getBind_kinematics_model_array().getCount(); imodel++) { + domArticulated_systemRef articulated_system; // if filled, contains robot-specific information, so create a robot + domBind_kinematics_modelRef kbindmodel = kiscene->getBind_kinematics_model_array()[imodel]; + if (!kbindmodel->getNode()) { + ROS_WARN_STREAM("do not support kinematics models without references to nodes\n"); + continue; + } + + // visual information + domNodeRef node = daeSafeCast(daeSidRef(kbindmodel->getNode(), viscene->getUrl().getElement()).resolve().elt); + if (!node) { + ROS_WARN_STREAM(str(boost::format("bind_kinematics_model does not reference valid node %s\n")%kbindmodel->getNode())); + continue; + } + + // kinematics information + daeElement* pelt = searchBinding(kbindmodel,kscene); + domInstance_kinematics_modelRef kimodel = daeSafeCast(pelt); + if (!kimodel) { + if( !pelt ) { + ROS_WARN_STREAM("bind_kinematics_model does not reference element\n"); + } + else { + ROS_WARN_STREAM(str(boost::format("bind_kinematics_model cannot find reference to %s%s:\n")%pelt->getElementName())); + } + continue; + } + bindings.listKinematicsVisualBindings.push_back(std::make_pair(node,kimodel)); + } + // axis info + for (size_t ijoint = 0; ijoint < kiscene->getBind_joint_axis_array().getCount(); ++ijoint) { + domBind_joint_axisRef bindjoint = kiscene->getBind_joint_axis_array()[ijoint]; + daeElementRef pjtarget = daeSidRef(bindjoint->getTarget(), viscene->getUrl().getElement()).resolve().elt; + if (!pjtarget) { + ROS_ERROR_STREAM(str(boost::format("Target Node %s NOT found!!!\n")%bindjoint->getTarget())); + continue; + } + daeElement* pelt = searchBinding(bindjoint->getAxis(),kscene); + domAxis_constraintRef pjointaxis = daeSafeCast(pelt); + if (!pjointaxis) { + continue; + } + bindings.listAxisBindings.push_back(JointAxisBinding(pjtarget, pjointaxis, bindjoint->getValue(), NULL, NULL)); + } + } + + size_t _countChildren(daeElement* pelt) { + size_t c = 1; + daeTArray children; + pelt->getChildren(children); + for (size_t i = 0; i < children.getCount(); ++i) { + c += _countChildren(children[i]); + } + return c; + } + + void _processUserData(daeElement* pelt, double scale) + { + // getChild could be optimized since asset tag is supposed to appear as the first element + domAssetRef passet = daeSafeCast (pelt->getChild("asset")); + if (!!passet && !!passet->getUnit()) { + scale = passet->getUnit()->getMeter(); + } + + _vuserdata.push_back(USERDATA(scale)); + pelt->setUserData(&_vuserdata.back()); + daeTArray children; + pelt->getChildren(children); + for (size_t i = 0; i < children.getCount(); ++i) { + if (children[i] != passet) { + _processUserData(children[i], scale); + } + } + } + + USERDATA* _getUserData(daeElement* pelt) + { + BOOST_ASSERT(!!pelt); + void* p = pelt->getUserData(); + BOOST_ASSERT(!!p); + return (USERDATA*)p; + } + + // + // openrave math functions (from geometry.h) + // + + static Vector3 _poseMult(const Pose& p, const Vector3& v) + { + double ww = 2 * p.rotation.x * p.rotation.x; + double wx = 2 * p.rotation.x * p.rotation.y; + double wy = 2 * p.rotation.x * p.rotation.z; + double wz = 2 * p.rotation.x * p.rotation.w; + double xx = 2 * p.rotation.y * p.rotation.y; + double xy = 2 * p.rotation.y * p.rotation.z; + double xz = 2 * p.rotation.y * p.rotation.w; + double yy = 2 * p.rotation.z * p.rotation.z; + double yz = 2 * p.rotation.z * p.rotation.w; + Vector3 vnew; + vnew.x = (1-xx-yy) * v.x + (wx-yz) * v.y + (wy+xz)*v.z + p.position.x; + vnew.y = (wx+yz) * v.x + (1-ww-yy) * v.y + (xy-wz)*v.z + p.position.y; + vnew.z = (wy-xz) * v.x + (xy+wz) * v.y + (1-ww-xx)*v.z + p.position.z; + return vnew; + } + + static Vector3 _poseMult(const boost::array& m, const Vector3& v) + { + Vector3 vnew; + vnew.x = m[4*0+0] * v.x + m[4*0+1] * v.y + m[4*0+2] * v.z + m[4*0+3]; + vnew.y = m[4*1+0] * v.x + m[4*1+1] * v.y + m[4*1+2] * v.z + m[4*1+3]; + vnew.z = m[4*2+0] * v.x + m[4*2+1] * v.y + m[4*2+2] * v.z + m[4*2+3]; + return vnew; + } + + static boost::array _poseMult(const boost::array& m0, const boost::array& m1) + { + boost::array mres; + mres[0*4+0] = m0[0*4+0]*m1[0*4+0]+m0[0*4+1]*m1[1*4+0]+m0[0*4+2]*m1[2*4+0]; + mres[0*4+1] = m0[0*4+0]*m1[0*4+1]+m0[0*4+1]*m1[1*4+1]+m0[0*4+2]*m1[2*4+1]; + mres[0*4+2] = m0[0*4+0]*m1[0*4+2]+m0[0*4+1]*m1[1*4+2]+m0[0*4+2]*m1[2*4+2]; + mres[1*4+0] = m0[1*4+0]*m1[0*4+0]+m0[1*4+1]*m1[1*4+0]+m0[1*4+2]*m1[2*4+0]; + mres[1*4+1] = m0[1*4+0]*m1[0*4+1]+m0[1*4+1]*m1[1*4+1]+m0[1*4+2]*m1[2*4+1]; + mres[1*4+2] = m0[1*4+0]*m1[0*4+2]+m0[1*4+1]*m1[1*4+2]+m0[1*4+2]*m1[2*4+2]; + mres[2*4+0] = m0[2*4+0]*m1[0*4+0]+m0[2*4+1]*m1[1*4+0]+m0[2*4+2]*m1[2*4+0]; + mres[2*4+1] = m0[2*4+0]*m1[0*4+1]+m0[2*4+1]*m1[1*4+1]+m0[2*4+2]*m1[2*4+1]; + mres[2*4+2] = m0[2*4+0]*m1[0*4+2]+m0[2*4+1]*m1[1*4+2]+m0[2*4+2]*m1[2*4+2]; + mres[3] = m1[3] * m0[0] + m1[7] * m0[1] + m1[11] * m0[2] + m0[3]; + mres[7] = m1[3] * m0[4] + m1[7] * m0[5] + m1[11] * m0[6] + m0[7]; + mres[11] = m1[3] * m0[8] + m1[7] * m0[9] + m1[11] * m0[10] + m0[11]; + return mres; + } + + static Pose _poseMult(const Pose& p0, const Pose& p1) + { + Pose p; + p.position = _poseMult(p0,p1.position); + p.rotation = _quatMult(p0.rotation,p1.rotation); + return p; + } + + static Pose _poseInverse(const Pose& p) + { + Pose pinv; + pinv.rotation.x = -p.rotation.x; + pinv.rotation.y = -p.rotation.y; + pinv.rotation.z = -p.rotation.z; + pinv.rotation.w = p.rotation.w; + Vector3 t = _poseMult(pinv,p.position); + pinv.position.x = -t.x; + pinv.position.y = -t.y; + pinv.position.z = -t.z; + return pinv; + } + + static Rotation _quatMult(const Rotation& quat0, const Rotation& quat1) + { + Rotation q; + q.x = quat0.w*quat1.x + quat0.x*quat1.w + quat0.y*quat1.z - quat0.z*quat1.y; + q.y = quat0.w*quat1.y + quat0.y*quat1.w + quat0.z*quat1.x - quat0.x*quat1.z; + q.z = quat0.w*quat1.z + quat0.z*quat1.w + quat0.x*quat1.y - quat0.y*quat1.x; + q.w = quat0.w*quat1.w - quat0.x*quat1.x - quat0.y*quat1.y - quat0.z*quat1.z; + double fnorm = std::sqrt(q.x*q.x+q.y*q.y+q.z*q.z+q.w*q.w); + // don't touch the divides + q.x /= fnorm; + q.y /= fnorm; + q.z /= fnorm; + q.w /= fnorm; + return q; + } + + static boost::array _matrixFromAxisAngle(const Vector3& axis, double angle) + { + return _matrixFromQuat(_quatFromAxisAngle(axis.x,axis.y,axis.z,angle)); + } + + static boost::array _matrixFromQuat(const Rotation& quat) + { + boost::array m; + double qq1 = 2*quat.x*quat.x; + double qq2 = 2*quat.y*quat.y; + double qq3 = 2*quat.z*quat.z; + m[4*0+0] = 1 - qq2 - qq3; + m[4*0+1] = 2*(quat.x*quat.y - quat.w*quat.z); + m[4*0+2] = 2*(quat.x*quat.z + quat.w*quat.y); + m[4*0+3] = 0; + m[4*1+0] = 2*(quat.x*quat.y + quat.w*quat.z); + m[4*1+1] = 1 - qq1 - qq3; + m[4*1+2] = 2*(quat.y*quat.z - quat.w*quat.x); + m[4*1+3] = 0; + m[4*2+0] = 2*(quat.x*quat.z - quat.w*quat.y); + m[4*2+1] = 2*(quat.y*quat.z + quat.w*quat.x); + m[4*2+2] = 1 - qq1 - qq2; + m[4*2+3] = 0; + return m; + } + + static Pose _poseFromMatrix(const boost::array& m) + { + Pose t; + t.rotation = _quatFromMatrix(m); + t.position.x = m[3]; + t.position.y = m[7]; + t.position.z = m[11]; + return t; + } + + static boost::array _matrixFromPose(const Pose& t) + { + boost::array m = _matrixFromQuat(t.rotation); + m[3] = t.position.x; + m[7] = t.position.y; + m[11] = t.position.z; + return m; + } + + static Rotation _quatFromAxisAngle(double x, double y, double z, double angle) + { + Rotation q; + double axislen = std::sqrt(x*x+y*y+z*z); + if( axislen == 0 ) { + return q; + } + angle *= 0.5; + double sang = std::sin(angle)/axislen; + q.w = std::cos(angle); + q.x = x*sang; + q.y = y*sang; + q.z = z*sang; + return q; + } + + static Rotation _quatFromMatrix(const boost::array& mat) + { + Rotation rot; + double tr = mat[4*0+0] + mat[4*1+1] + mat[4*2+2]; + if (tr >= 0) { + rot.w = tr + 1; + rot.x = (mat[4*2+1] - mat[4*1+2]); + rot.y = (mat[4*0+2] - mat[4*2+0]); + rot.z = (mat[4*1+0] - mat[4*0+1]); + } + else { + // find the largest diagonal element and jump to the appropriate case + if (mat[4*1+1] > mat[4*0+0]) { + if (mat[4*2+2] > mat[4*1+1]) { + rot.z = (mat[4*2+2] - (mat[4*0+0] + mat[4*1+1])) + 1; + rot.x = (mat[4*2+0] + mat[4*0+2]); + rot.y = (mat[4*1+2] + mat[4*2+1]); + rot.w = (mat[4*1+0] - mat[4*0+1]); + } + else { + rot.y = (mat[4*1+1] - (mat[4*2+2] + mat[4*0+0])) + 1; + rot.z = (mat[4*1+2] + mat[4*2+1]); + rot.x = (mat[4*0+1] + mat[4*1+0]); + rot.w = (mat[4*0+2] - mat[4*2+0]); + } + } + else if (mat[4*2+2] > mat[4*0+0]) { + rot.z = (mat[4*2+2] - (mat[4*0+0] + mat[4*1+1])) + 1; + rot.x = (mat[4*2+0] + mat[4*0+2]); + rot.y = (mat[4*1+2] + mat[4*2+1]); + rot.w = (mat[4*1+0] - mat[4*0+1]); + } + else { + rot.x = (mat[4*0+0] - (mat[4*1+1] + mat[4*2+2])) + 1; + rot.y = (mat[4*0+1] + mat[4*1+0]); + rot.z = (mat[4*2+0] + mat[4*0+2]); + rot.w = (mat[4*2+1] - mat[4*1+2]); + } + } + double fnorm = std::sqrt(rot.x*rot.x+rot.y*rot.y+rot.z*rot.z+rot.w*rot.w); + // don't touch the divides + rot.x /= fnorm; + rot.y /= fnorm; + rot.z /= fnorm; + rot.w /= fnorm; + return rot; + } + + static double _dot3(const Vector3& v0, const Vector3& v1) + { + return v0.x*v1.x + v0.y*v1.y + v0.z*v1.z; + } + static Vector3 _cross3(const Vector3& v0, const Vector3& v1) + { + Vector3 v; + v.x = v0.y * v1.z - v0.z * v1.y; + v.y = v0.z * v1.x - v0.x * v1.z; + v.z = v0.x * v1.y - v0.y * v1.x; + return v; + } + static Vector3 _sub3(const Vector3& v0, const Vector3& v1) + { + Vector3 v; + v.x = v0.x-v1.x; + v.y = v0.y-v1.y; + v.z = v0.z-v1.z; + return v; + } + static Vector3 _add3(const Vector3& v0, const Vector3& v1) + { + Vector3 v; + v.x = v0.x+v1.x; + v.y = v0.y+v1.y; + v.z = v0.z+v1.z; + return v; + } + static Vector3 _normalize3(const Vector3& v0) + { + Vector3 v; + double norm = std::sqrt(v0.x*v0.x+v0.y*v0.y+v0.z*v0.z); + v.x = v0.x/norm; + v.y = v0.y/norm; + v.z = v0.z/norm; + return v; + } + + boost::shared_ptr _collada; + domCOLLADA* _dom; + std::vector _vuserdata; // all userdata + int _nGlobalSensorId, _nGlobalManipulatorId; + std::string _filename; + std::string _resourcedir; + Model& _model; +}; + +bool urdfFromColladaFile(std::string const& daefilename, Model& model) +{ + ColladaModelReader reader(model); + return reader.InitFromFile(daefilename); +} + +bool urdfFromColladaData(std::string const& data, Model& model) +{ + ColladaModelReader reader(model); + return reader.InitFromData(data); +} + +bool urdfFromTiXML(TiXmlElement *robot_xml, Model& model) +{ + ColladaModelReader reader(model); + // have to convert all xml back to string (sigh..) + std::stringstream ss; + ss << *robot_xml; + return reader.InitFromData(ss.str()); +} + +bool IsColladaFile(const std::string& filename) +{ + size_t len = filename.size(); + if( len < 4 ) + return false; + return filename[len-4] == '.' && ::tolower(filename[len-3]) == 'd' && ::tolower(filename[len-2]) == 'a' && ::tolower(filename[len-1]) == 'e'; +} + +bool IsColladaData(const std::string& data) +{ + return data.find("RootElement() ) { + if( std::string("COLLADA") == xml_doc->RootElement()->ValueStr() ) { + return urdfFromTiXML(xml_doc->RootElement(),*this); + } + } + TiXmlElement *robot_xml = xml_doc->FirstChildElement("robot"); if (!robot_xml) { @@ -120,6 +141,11 @@ bool Model::initXml(TiXmlElement *robot_xml) ROS_DEBUG("Parsing robot xml"); if (!robot_xml) return false; + // necessary for COLLADA compatibility + if( std::string("COLLADA") == robot_xml->ValueStr() ) { + return urdfFromTiXML(robot_xml,*this); + } + // Get robot name const char *name = robot_xml->Attribute("name"); if (!name) @@ -298,7 +324,7 @@ bool Model::initTree(std::map &parent_link_tree) ROS_ERROR(" parent link '%s' of joint '%s' not found. The Boxturtle urdf parser used to automatically add this link for you, but this is not valid according to the URDF spec. Every link you refer to from a joint needs to be explicitly defined in the robot description. To fix this problem you can either remove this joint from your urdf file, or add \"\" to your urdf file.", parent_link_name.c_str(), joint->first.c_str(), parent_link_name.c_str() ); return false; } - + //set parent link for child link child_link->setParent(parent_link); From ae9109c75bf4acc1d5c3e76a36adacd2ac094cb1 Mon Sep 17 00:00:00 2001 From: rdiankov Date: Wed, 1 Dec 2010 20:58:22 +0000 Subject: [PATCH 221/245] moved recent to collada changes robot_model_collada2010 branch --- colladadom/collada-dom.patch | 22 - urdf/CMakeLists.txt | 2 +- urdf/include/urdf/model.h | 8 +- urdf/manifest.xml | 2 +- urdf/src/collada_model_reader.cpp | 2685 ----------------------------- urdf/src/model.cpp | 28 +- 6 files changed, 7 insertions(+), 2740 deletions(-) delete mode 100644 urdf/src/collada_model_reader.cpp diff --git a/colladadom/collada-dom.patch b/colladadom/collada-dom.patch index e28599d..eb05cec 100644 --- a/colladadom/collada-dom.patch +++ b/colladadom/collada-dom.patch @@ -52,25 +52,3 @@ Index: dom/make/domTest.mk ifeq ($(os),ps3) # PS3 doesn't support C++ locales, so tell boost not to use them ccFlags += -DBOOST_NO_STD_LOCALE - ---- dom/src/dae/daeSIDResolver.cpp -+++ dom/src/dae/daeSIDResolver.cpp -@@ -152,6 +152,18 @@ - list& remainingPart) { - remainingPart.clear(); - -+ // custom change for following instance urls (Rosen Diankov) -+ if ( strncmp( container->getElementName(), "instance_", 9 ) == 0 ) { -+ daeURI *uri = (daeURI*)container->getAttributeValue("url"); -+ if ( uri != NULL && uri->getElement() != NULL ) { -+ daeElement *e = findWithDots( uri->getElement(), s, profile, finder, remainingPart ); -+ if ( e != NULL ) { -+ //found it -+ return e; -+ } -+ } -+ } -+ - // First see if the whole thing resolves correctly - if (daeElement* result = finder(container, s, profile)) - return result; diff --git a/urdf/CMakeLists.txt b/urdf/CMakeLists.txt index 64d4b42..4dceb93 100644 --- a/urdf/CMakeLists.txt +++ b/urdf/CMakeLists.txt @@ -22,7 +22,7 @@ set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) rosbuild_gensrv() #common commands for building c++ executables and libraries -rosbuild_add_library(${PROJECT_NAME} src/link.cpp src/joint.cpp src/model.cpp src/collada_model_reader.cpp) +rosbuild_add_library(${PROJECT_NAME} src/link.cpp src/joint.cpp src/model.cpp) #target_link_libraries(${PROJECT_NAME} another_library) rosbuild_add_boost_directories() #rosbuild_link_boost(${PROJECT_NAME} thread) diff --git a/urdf/include/urdf/model.h b/urdf/include/urdf/model.h index 0d52895..264520f 100644 --- a/urdf/include/urdf/model.h +++ b/urdf/include/urdf/model.h @@ -46,6 +46,7 @@ namespace urdf{ + class Model { public: @@ -85,7 +86,7 @@ public: /// \brief complete list of Materials std::map > materials_; -protected: +private: void clear(); std::string name_; @@ -104,14 +105,13 @@ protected: /// it's time to find the root Link bool initRoot(std::map &parent_link_tree); -private: + /// Model is restricted to a tree for now, which means there exists one root link /// typically, root link is the world(inertial). Where world is a special link /// or is the root_link_ the link attached to the world by PLANAR/FLOATING joint? /// hmm... boost::shared_ptr root_link_; - - friend class ColladaModelReader; + }; } diff --git a/urdf/manifest.xml b/urdf/manifest.xml index d03ca3f..f0ad062 100644 --- a/urdf/manifest.xml +++ b/urdf/manifest.xml @@ -12,7 +12,7 @@ - + diff --git a/urdf/src/collada_model_reader.cpp b/urdf/src/collada_model_reader.cpp deleted file mode 100644 index 6f03f61..0000000 --- a/urdf/src/collada_model_reader.cpp +++ /dev/null @@ -1,2685 +0,0 @@ -/********************************************************************* -* Software License Agreement (BSD License) -* -* Copyright (c) 2010, Rosen Diankov, Willow Garage, Inc. -* All rights reserved. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions -* are met: -* -* * Redstributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* * Redistributions in binary form must reproduce the above -* copyright notice, this list of conditions and the following -* disclaimer in the documentation and/or other materials provided -* with the distribution. -* * Neither the name of the Willow Garage nor the names of its -* contributors may be used to endorse or promote products derived -* from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -* POSSIBILITY OF SUCH DAMAGE. -*********************************************************************/ - -/* Author: Rosen Diankov, used OpenRAVE files for reference */ -#include "urdf/model.h" - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#define FOREACH(it, v) for(typeof((v).begin()) it = (v).begin(); it != (v).end(); (it)++) -#define FOREACHC FOREACH - -namespace urdf{ - -class UnlinkFilename -{ -public: - UnlinkFilename(const std::string& filename) : _filename(filename) {} - virtual ~UnlinkFilename() { unlink(_filename.c_str()); } - std::string _filename; -}; -static std::list > _listTempFilenames; - -class ColladaModelReader : public daeErrorHandler -{ - - class JointAxisBinding - { - public: - JointAxisBinding(daeElementRef pvisualtrans, domAxis_constraintRef pkinematicaxis, domCommon_float_or_paramRef jointvalue, domKinematics_axis_infoRef kinematics_axis_info, domMotion_axis_infoRef motion_axis_info) : pvisualtrans(pvisualtrans), pkinematicaxis(pkinematicaxis), jointvalue(jointvalue), kinematics_axis_info(kinematics_axis_info), motion_axis_info(motion_axis_info) { - BOOST_ASSERT( !!pkinematicaxis ); - daeElement* pae = pvisualtrans->getParentElement(); - while (!!pae) { - visualnode = daeSafeCast (pae); - if (!!visualnode) { - break; - } - pae = pae->getParentElement(); - } - - if (!visualnode) { - ROS_WARN_STREAM(str(boost::format("couldn't find parent node of element id %s, sid %s\n")%pkinematicaxis->getID()%pkinematicaxis->getSid())); - } - } - - daeElementRef pvisualtrans; - domAxis_constraintRef pkinematicaxis; - domCommon_float_or_paramRef jointvalue; - domNodeRef visualnode; - domKinematics_axis_infoRef kinematics_axis_info; - domMotion_axis_infoRef motion_axis_info; - }; - - /// \brief inter-collada bindings for a kinematics scene - class KinematicsSceneBindings - { - public: - std::list< std::pair > listKinematicsVisualBindings; - std::list listAxisBindings; - - bool AddAxisInfo(const domInstance_kinematics_model_Array& arr, domKinematics_axis_infoRef kinematics_axis_info, domMotion_axis_infoRef motion_axis_info) - { - if( !kinematics_axis_info ) { - return false; - } - for(size_t ik = 0; ik < arr.getCount(); ++ik) { - daeElement* pelt = daeSidRef(kinematics_axis_info->getAxis(), arr[ik]->getUrl().getElement()).resolve().elt; - if( !!pelt ) { - // look for the correct placement - bool bfound = false; - FOREACH(itbinding,listAxisBindings) { - if( itbinding->pkinematicaxis.cast() == pelt ) { - itbinding->kinematics_axis_info = kinematics_axis_info; - if( !!motion_axis_info ) { - itbinding->motion_axis_info = motion_axis_info; - } - bfound = true; - break; - } - } - if( !bfound ) { - ROS_WARN_STREAM(str(boost::format("could not find binding for axis: %s, %s\n")%kinematics_axis_info->getAxis()%pelt->getAttribute("sid"))); - return false; - } - return true; - } - } - ROS_WARN_STREAM(str(boost::format("could not find kinematics axis target: %s\n")%kinematics_axis_info->getAxis())); - return false; - } - }; - - struct USERDATA - { - USERDATA() {} - USERDATA(double scale) : scale(scale) {} - double scale; - boost::shared_ptr p; ///< custom managed data - }; - - enum GeomType { - GeomNone = 0, - GeomBox = 1, - GeomSphere = 2, - GeomCylinder = 3, - GeomTrimesh = 4, - }; - - struct GEOMPROPERTIES - { - Pose _t; ///< local transformation of the geom primitive with respect to the link's coordinate system - Vector3 vGeomData; ///< for boxes, first 3 values are extents - ///< for sphere it is radius - ///< for cylinder, first 2 values are radius and height - ///< for trimesh, none - Color diffuseColor, ambientColor; ///< hints for how to color the meshes - std::vector vertices; - std::vector indices; - - ///< discretization value is chosen. Should be transformed by _t before rendering - GeomType type; ///< the type of geometry primitive - - - // generate a sphere triangulation starting with an icosahedron - // all triangles are oriented counter clockwise - static void GenerateSphereTriangulation(std::vector realvertices, std::vector realindices, int levels) - { - const double GTS_M_ICOSAHEDRON_X = 0.850650808352039932181540497063011072240401406; - const double GTS_M_ICOSAHEDRON_Y = 0.525731112119133606025669084847876607285497935; - const double GTS_M_ICOSAHEDRON_Z = 0; - std::vector tempvertices[2]; - std::vector tempindices[2]; - - tempvertices[0].push_back(Vector3(+GTS_M_ICOSAHEDRON_Z, +GTS_M_ICOSAHEDRON_X, -GTS_M_ICOSAHEDRON_Y)); - tempvertices[0].push_back(Vector3(+GTS_M_ICOSAHEDRON_X, +GTS_M_ICOSAHEDRON_Y, +GTS_M_ICOSAHEDRON_Z)); - tempvertices[0].push_back(Vector3(+GTS_M_ICOSAHEDRON_Y, +GTS_M_ICOSAHEDRON_Z, -GTS_M_ICOSAHEDRON_X)); - tempvertices[0].push_back(Vector3(+GTS_M_ICOSAHEDRON_Y, +GTS_M_ICOSAHEDRON_Z, +GTS_M_ICOSAHEDRON_X)); - tempvertices[0].push_back(Vector3(+GTS_M_ICOSAHEDRON_X, -GTS_M_ICOSAHEDRON_Y, +GTS_M_ICOSAHEDRON_Z)); - tempvertices[0].push_back(Vector3(+GTS_M_ICOSAHEDRON_Z, +GTS_M_ICOSAHEDRON_X, +GTS_M_ICOSAHEDRON_Y)); - tempvertices[0].push_back(Vector3(-GTS_M_ICOSAHEDRON_Y, +GTS_M_ICOSAHEDRON_Z, +GTS_M_ICOSAHEDRON_X)); - tempvertices[0].push_back(Vector3(+GTS_M_ICOSAHEDRON_Z, -GTS_M_ICOSAHEDRON_X, -GTS_M_ICOSAHEDRON_Y)); - tempvertices[0].push_back(Vector3(-GTS_M_ICOSAHEDRON_X, +GTS_M_ICOSAHEDRON_Y, +GTS_M_ICOSAHEDRON_Z)); - tempvertices[0].push_back(Vector3(-GTS_M_ICOSAHEDRON_Y, +GTS_M_ICOSAHEDRON_Z, -GTS_M_ICOSAHEDRON_X)); - tempvertices[0].push_back(Vector3(-GTS_M_ICOSAHEDRON_X, -GTS_M_ICOSAHEDRON_Y, +GTS_M_ICOSAHEDRON_Z)); - tempvertices[0].push_back(Vector3(+GTS_M_ICOSAHEDRON_Z, -GTS_M_ICOSAHEDRON_X, +GTS_M_ICOSAHEDRON_Y)); - - const int nindices=60; - int indices[nindices] = { - 0, 1, 2, - 1, 3, 4, - 3, 5, 6, - 2, 4, 7, - 5, 6, 8, - 2, 7, 9, - 0, 5, 8, - 7, 9, 10, - 0, 1, 5, - 7, 10, 11, - 1, 3, 5, - 6, 10, 11, - 3, 6, 11, - 9, 10, 8, - 3, 4, 11, - 6, 8, 10, - 4, 7, 11, - 1, 2, 4, - 0, 8, 9, - 0, 2, 9 - }; - - Vector3 v[3]; - // make sure oriented CCW - for(int i = 0; i < nindices; i += 3 ) { - v[0] = tempvertices[0][indices[i]]; - v[1] = tempvertices[0][indices[i+1]]; - v[2] = tempvertices[0][indices[i+2]]; - if( _dot3(v[0], _cross3(_sub3(v[1],v[0]),_sub3(v[2],v[0]))) < 0 ) { - std::swap(indices[i], indices[i+1]); - } - } - - tempindices[0].resize(nindices); - std::copy(&indices[0],&indices[nindices],tempindices[0].begin()); - std::vector* curvertices = &tempvertices[0], *newvertices = &tempvertices[1]; - std::vector *curindices = &tempindices[0], *newindices = &tempindices[1]; - while(levels-- > 0) { - - newvertices->resize(0); - newvertices->reserve(2*curvertices->size()); - newvertices->insert(newvertices->end(), curvertices->begin(), curvertices->end()); - newindices->resize(0); - newindices->reserve(4*curindices->size()); - - std::map< uint64_t, int > mapnewinds; - std::map< uint64_t, int >::iterator it; - - for(size_t i = 0; i < curindices->size(); i += 3) { - // for ever tri, create 3 new vertices and 4 new triangles. - v[0] = curvertices->at(curindices->at(i)); - v[1] = curvertices->at(curindices->at(i+1)); - v[2] = curvertices->at(curindices->at(i+2)); - - int inds[3]; - for(int j = 0; j < 3; ++j) { - uint64_t key = ((uint64_t)curindices->at(i+j)<<32)|(uint64_t)curindices->at(i + ((j+1)%3)); - it = mapnewinds.find(key); - - if( it == mapnewinds.end() ) { - inds[j] = mapnewinds[key] = mapnewinds[(key<<32)|(key>>32)] = (int)newvertices->size(); - newvertices->push_back(_normalize3(_add3(v[j],v[(j+1)%3 ]))); - } - else { - inds[j] = it->second; - } - } - - newindices->push_back(curindices->at(i)); newindices->push_back(inds[0]); newindices->push_back(inds[2]); - newindices->push_back(inds[0]); newindices->push_back(curindices->at(i+1)); newindices->push_back(inds[1]); - newindices->push_back(inds[2]); newindices->push_back(inds[0]); newindices->push_back(inds[1]); - newindices->push_back(inds[2]); newindices->push_back(inds[1]); newindices->push_back(curindices->at(i+2)); - } - - std::swap(newvertices,curvertices); - std::swap(newindices,curindices); - } - - realvertices = *curvertices; - realindices = *curindices; - } - - bool InitCollisionMesh(double fTessellation=1.0) - { - if( type == GeomTrimesh ) { - return true; - } - indices.clear(); - vertices.clear(); - - if( fTessellation < 0.01f ) { - fTessellation = 0.01f; - } - // start tesselating - switch(type) { - case GeomSphere: { - // log_2 (1+ tess) - GenerateSphereTriangulation(vertices,indices, 3 + (int)(logf(fTessellation) / logf(2.0f)) ); - double fRadius = vGeomData.x; - FOREACH(it, vertices) { - it->x *= fRadius; - it->y *= fRadius; - it->z *= fRadius; - } - break; - } - case GeomBox: { - // trivial - Vector3 ex = vGeomData; - Vector3 v[8] = { Vector3(ex.x, ex.y, ex.z), - Vector3(ex.x, ex.y, -ex.z), - Vector3(ex.x, -ex.y, ex.z), - Vector3(ex.x, -ex.y, -ex.z), - Vector3(-ex.x, ex.y, ex.z), - Vector3(-ex.x, ex.y, -ex.z), - Vector3(-ex.x, -ex.y, ex.z), - Vector3(-ex.x, -ex.y, -ex.z) }; - const int nindices = 36; - int startindices[] = { - 0, 1, 2, - 1, 2, 3, - 4, 5, 6, - 5, 6, 7, - 0, 1, 4, - 1, 4, 5, - 2, 3, 6, - 3, 6, 7, - 0, 2, 4, - 2, 4, 6, - 1, 3, 5, - 3, 5, 7 - }; - - for(int i = 0; i < nindices; i += 3 ) { - Vector3 v1 = v[startindices[i]]; - Vector3 v2 = v[startindices[i+1]]; - Vector3 v3 = v[startindices[i+2]]; - if( _dot3(v1, _sub3(v2,_cross3(v1, _sub3(v3,v1)))) < 0 ) { - std::swap(indices[i], indices[i+1]); - } - } - - vertices.resize(8); - std::copy(&v[0],&v[8],vertices.begin()); - indices.resize(nindices); - std::copy(&startindices[0],&startindices[nindices],indices.begin()); - break; - } - case GeomCylinder: { - // cylinder is on y axis - double rad = vGeomData.x, len = vGeomData.y*0.5f; - - int numverts = (int)(fTessellation*24.0f) + 3; - double dtheta = 2 * M_PI / (double)numverts; - vertices.push_back(Vector3(0,0,len)); - vertices.push_back(Vector3(0,0,-len)); - vertices.push_back(Vector3(rad,0,len)); - vertices.push_back(Vector3(rad,0,-len)); - - for(int i = 0; i < numverts+1; ++i) { - double s = rad * std::sin(dtheta * (double)i); - double c = rad * std::cos(dtheta * (double)i); - - int off = (int)vertices.size(); - vertices.push_back(Vector3(c, s, len)); - vertices.push_back(Vector3(c, s, -len)); - - indices.push_back(0); indices.push_back(off); indices.push_back(off-2); - indices.push_back(1); indices.push_back(off-1); indices.push_back(off+1); - indices.push_back(off-2); indices.push_back(off); indices.push_back(off-1); - indices.push_back(off); indices.push_back(off-1); indices.push_back(off+1); - } - break; - } - default: - BOOST_ASSERT(0); - } - return true; - } - }; - - public: - ColladaModelReader(Model& model) : _dom(NULL), _nGlobalSensorId(0), _nGlobalManipulatorId(0), _model(model) { - daeErrorHandler::setErrorHandler(this); - _resourcedir = "."; - } - virtual ~ColladaModelReader() { - _vuserdata.clear(); - _collada.reset(); - DAE::cleanup(); - } - - bool InitFromFile(const std::string& filename) { - ROS_DEBUG_STREAM(str(boost::format("init COLLADA reader version: %s, namespace: %s, filename: %s\n")%COLLADA_VERSION%COLLADA_NAMESPACE%filename)); - _collada.reset(new DAE); - _dom = _collada->open(filename); - if (!_dom) { - return false; - } - _filename=filename; - - size_t maxchildren = _countChildren(_dom); - _vuserdata.resize(0); - _vuserdata.reserve(maxchildren); - - double dScale = 1.0; - _processUserData(_dom, dScale); - ROS_DEBUG_STREAM(str(boost::format("processed children: %d/%d\n")%_vuserdata.size()%maxchildren)); - return _Extract(); - } - - bool InitFromData(const std::string& pdata) { - ROS_DEBUG_STREAM(str(boost::format("init COLLADA reader version: %s, namespace: %s\n")%COLLADA_VERSION%COLLADA_NAMESPACE)); - _collada.reset(new DAE); - _dom = _collada->openFromMemory(".",pdata.c_str()); - if (!_dom) { - return false; - } - - size_t maxchildren = _countChildren(_dom); - _vuserdata.resize(0); - _vuserdata.reserve(maxchildren); - - double dScale = 1.0; - _processUserData(_dom, dScale); - ROS_DEBUG_STREAM(str(boost::format("processed children: %d/%d\n")%_vuserdata.size()%maxchildren)); - return _Extract(); - } - -protected: - - /// \extract the first possible robot in the scene - bool _Extract() - { - _model.clear(); - std::list< std::pair > > listPossibleBodies; - domCOLLADA::domSceneRef allscene = _dom->getScene(); - if( !allscene ) { - return false; - } - - // parse each instance kinematics scene, prioritize real robots - for (size_t iscene = 0; iscene < allscene->getInstance_kinematics_scene_array().getCount(); iscene++) { - domInstance_kinematics_sceneRef kiscene = allscene->getInstance_kinematics_scene_array()[iscene]; - domKinematics_sceneRef kscene = daeSafeCast (kiscene->getUrl().getElement().cast()); - if (!kscene) { - continue; - } - boost::shared_ptr bindings(new KinematicsSceneBindings()); - _ExtractKinematicsVisualBindings(allscene->getInstance_visual_scene(),kiscene,*bindings); - for(size_t ias = 0; ias < kscene->getInstance_articulated_system_array().getCount(); ++ias) { - if( _ExtractArticulatedSystem(kscene->getInstance_articulated_system_array()[ias], *bindings) ) { - _PostProcess(); - return true; - } - } - for(size_t ikmodel = 0; ikmodel < kscene->getInstance_kinematics_model_array().getCount(); ++ikmodel) { - listPossibleBodies.push_back(std::make_pair(kscene->getInstance_kinematics_model_array()[ikmodel], bindings)); - } - } - - FOREACH(it, listPossibleBodies) { - if( _ExtractKinematicsModel(it->first, *it->second) ) { - _PostProcess(); - return true; - } - } - - return false; - } - - void _PostProcess() - { - std::map parent_link_tree; - // building tree: name mapping - if (!_model.initTree(parent_link_tree)) { - ROS_ERROR("failed to build tree"); - } - - // find the root link - if (!_model.initRoot(parent_link_tree)) { - ROS_ERROR("failed to find root link"); - } - } - - /// \brief extracts an articulated system. Note that an articulated system can include other articulated systems - bool _ExtractArticulatedSystem(domInstance_articulated_systemRef ias, KinematicsSceneBindings& bindings) - { - if( !ias ) { - return false; - } - ROS_DEBUG_STREAM(str(boost::format("instance articulated system sid %s\n")%ias->getSid())); - domArticulated_systemRef articulated_system = daeSafeCast (ias->getUrl().getElement().cast()); - if( !articulated_system ) { - return false; - } - - boost::shared_ptr pinterface_type = _ExtractInterfaceType(ias->getExtra_array()); - if( !pinterface_type ) { - pinterface_type = _ExtractInterfaceType(articulated_system->getExtra_array()); - } - if( !!pinterface_type ) { - ROS_DEBUG_STREAM(str(boost::format("robot type: %s")%(*pinterface_type))); - } - - // set the name - if( _model.name_.size() == 0 && !!ias->getName() ) { - _model.name_ = ias->getName(); - } - if( _model.name_.size() == 0 && !!ias->getSid()) { - _model.name_ = ias->getSid(); - } - if( _model.name_.size() == 0 && !!articulated_system->getName() ) { - _model.name_ = articulated_system->getName(); - } - if( _model.name_.size() == 0 && !!articulated_system->getId()) { - _model.name_ = articulated_system->getId(); - } - - if( !!articulated_system->getMotion() ) { - domInstance_articulated_systemRef ias_new = articulated_system->getMotion()->getInstance_articulated_system(); - if( !!articulated_system->getMotion()->getTechnique_common() ) { - for(size_t i = 0; i < articulated_system->getMotion()->getTechnique_common()->getAxis_info_array().getCount(); ++i) { - domMotion_axis_infoRef motion_axis_info = articulated_system->getMotion()->getTechnique_common()->getAxis_info_array()[i]; - // this should point to a kinematics axis_info - domKinematics_axis_infoRef kinematics_axis_info = daeSafeCast(daeSidRef(motion_axis_info->getAxis(), ias_new->getUrl().getElement()).resolve().elt); - if( !!kinematics_axis_info ) { - // find the parent kinematics and go through all its instance kinematics models - daeElement* pparent = kinematics_axis_info->getParent(); - while(!!pparent && pparent->typeID() != domKinematics::ID()) { - pparent = pparent->getParent(); - } - BOOST_ASSERT(!!pparent); - bindings.AddAxisInfo(daeSafeCast(pparent)->getInstance_kinematics_model_array(), kinematics_axis_info, motion_axis_info); - } - else { - ROS_WARN_STREAM(str(boost::format("failed to find kinematics axis %s\n")%motion_axis_info->getAxis())); - } - } - } - if( !_ExtractArticulatedSystem(ias_new,bindings) ) { - return false; - } - } - else { - if( !articulated_system->getKinematics() ) { - ROS_WARN_STREAM(str(boost::format("collada tag empty? instance_articulated_system=%s\n")%ias->getID())); - return true; - } - - if( !!articulated_system->getKinematics()->getTechnique_common() ) { - for(size_t i = 0; i < articulated_system->getKinematics()->getTechnique_common()->getAxis_info_array().getCount(); ++i) { - bindings.AddAxisInfo(articulated_system->getKinematics()->getInstance_kinematics_model_array(), articulated_system->getKinematics()->getTechnique_common()->getAxis_info_array()[i], NULL); - } - } - - for(size_t ik = 0; ik < articulated_system->getKinematics()->getInstance_kinematics_model_array().getCount(); ++ik) { - _ExtractKinematicsModel(articulated_system->getKinematics()->getInstance_kinematics_model_array()[ik],bindings); - } - } - - _ExtractRobotManipulators(articulated_system); - _ExtractRobotAttachedSensors(articulated_system); - return true; - } - - bool _ExtractKinematicsModel(domInstance_kinematics_modelRef ikm, KinematicsSceneBindings& bindings) - { - if( !ikm ) { - return false; - } - ROS_DEBUG_STREAM(str(boost::format("instance kinematics model sid %s\n")%ikm->getSid())); - domKinematics_modelRef kmodel = daeSafeCast (ikm->getUrl().getElement().cast()); - if (!kmodel) { - ROS_WARN_STREAM(str(boost::format("%s does not reference valid kinematics\n")%ikm->getSid())); - return false; - } - domPhysics_modelRef pmodel; - boost::shared_ptr pinterface_type = _ExtractInterfaceType(ikm->getExtra_array()); - if( !pinterface_type ) { - pinterface_type = _ExtractInterfaceType(kmodel->getExtra_array()); - } - if( !!pinterface_type ) { - ROS_DEBUG_STREAM(str(boost::format("kinbody interface type: %s")%(*pinterface_type))); - } - - // find matching visual node - domNodeRef pvisualnode; - FOREACH(it, bindings.listKinematicsVisualBindings) { - if( it->second == ikm ) { - pvisualnode = it->first; - break; - } - } - if( !pvisualnode ) { - ROS_WARN_STREAM(str(boost::format("failed to find visual node for instance kinematics model %s\n")%ikm->getSid())); - return false; - } - - if( _model.name_.size() == 0 && !!ikm->getName() ) { - _model.name_ = ikm->getName(); - } - if( _model.name_.size() == 0 && !!ikm->getID() ) { - _model.name_ = ikm->getID(); - } - - if (!_ExtractKinematicsModel(kmodel, pvisualnode, pmodel, bindings.listAxisBindings)) { - ROS_WARN_STREAM(str(boost::format("failed to load kinbody from kinematics model %s\n")%kmodel->getID())); - return false; - } - return true; - } - - /// \brief append the kinematics model to the openrave kinbody - bool _ExtractKinematicsModel(domKinematics_modelRef kmodel, domNodeRef pnode, domPhysics_modelRef pmodel, const std::list& listAxisBindings) - { - std::vector vdomjoints; - ROS_DEBUG_STREAM(str(boost::format("kinematics model: %s\n")%_model.name_)); - if( !!pnode ) { - ROS_DEBUG_STREAM(str(boost::format("node name: %s\n")%pnode->getId())); - } - - // Process joint of the kinbody - domKinematics_model_techniqueRef ktec = kmodel->getTechnique_common(); - - // Store joints - for (size_t ijoint = 0; ijoint < ktec->getJoint_array().getCount(); ++ijoint) { - vdomjoints.push_back(ktec->getJoint_array()[ijoint]); - } - - // Store instances of joints - for (size_t ijoint = 0; ijoint < ktec->getInstance_joint_array().getCount(); ++ijoint) { - domJointRef pelt = daeSafeCast (ktec->getInstance_joint_array()[ijoint]->getUrl().getElement()); - if (!pelt) { - ROS_WARN_STREAM("failed to get joint from instance\n"); - } - else { - vdomjoints.push_back(pelt); - } - } - - ROS_DEBUG_STREAM(str(boost::format("Number of root links in the kmodel %d\n")%ktec->getLink_array().getCount())); - for (size_t ilink = 0; ilink < ktec->getLink_array().getCount(); ++ilink) { - _ExtractLink(ktec->getLink_array()[ilink], ilink == 0 ? pnode : domNodeRef(), Pose(), Pose(), vdomjoints, listAxisBindings); - } - - // TODO: implement mathml - for (size_t iform = 0; iform < ktec->getFormula_array().getCount(); ++iform) { - domFormulaRef pf = ktec->getFormula_array()[iform]; - if (!pf->getTarget()) { - ROS_WARN_STREAM("formula target not valid\n"); - continue; - } - - // find the target joint - boost::shared_ptr pjoint = _getJointFromRef(pf->getTarget()->getParam()->getValue(),pf); - if (!pjoint) { - continue; - } - - if (!!pf->getTechnique_common()) { - daeElementRef peltmath; - daeTArray children; - pf->getTechnique_common()->getChildren(children); - for (size_t ichild = 0; ichild < children.getCount(); ++ichild) { - daeElementRef pelt = children[ichild]; - if (_checkMathML(pelt,std::string("math")) ) { - peltmath = pelt; - } - else { - ROS_WARN_STREAM(str(boost::format("unsupported formula element: %s\n")%pelt->getElementName())); - } - } - if (!!peltmath) { - // full math xml spec not supported, only looking for ax+b pattern: - // a x b - double a = 1, b = 0; - daeElementRef psymboljoint; - BOOST_ASSERT(peltmath->getChildren().getCount()>0); - daeElementRef papplyelt = peltmath->getChildren()[0]; - BOOST_ASSERT(_checkMathML(papplyelt,"apply")); - BOOST_ASSERT(papplyelt->getChildren().getCount()>0); - if( _checkMathML(papplyelt->getChildren()[0],"plus") ) { - BOOST_ASSERT(papplyelt->getChildren().getCount()==3); - daeElementRef pa = papplyelt->getChildren()[1]; - daeElementRef pb = papplyelt->getChildren()[2]; - if( !_checkMathML(papplyelt->getChildren()[1],"apply") ) { - std::swap(pa,pb); - } - if( !_checkMathML(pa,"csymbol") ) { - BOOST_ASSERT(_checkMathML(pa,"apply")); - BOOST_ASSERT(_checkMathML(pa->getChildren()[0],"times")); - if( _checkMathML(pa->getChildren()[1],"csymbol") ) { - psymboljoint = pa->getChildren()[1]; - BOOST_ASSERT(_checkMathML(pa->getChildren()[2],"cn")); - std::stringstream ss(pa->getChildren()[2]->getCharData()); - ss >> a; - } - else { - psymboljoint = pa->getChildren()[2]; - BOOST_ASSERT(_checkMathML(pa->getChildren()[1],"cn")); - std::stringstream ss(pa->getChildren()[1]->getCharData()); - ss >> a; - } - } - else { - psymboljoint = pa; - } - BOOST_ASSERT(_checkMathML(pb,"cn")); - { - std::stringstream ss(pb->getCharData()); - ss >> b; - } - } - else if( _checkMathML(papplyelt->getChildren()[0],"minus") ) { - BOOST_ASSERT(_checkMathML(papplyelt->getChildren()[1],"csymbol")); - a = -1; - psymboljoint = papplyelt->getChildren()[1]; - } - else { - BOOST_ASSERT(_checkMathML(papplyelt->getChildren()[0],"csymbol")); - psymboljoint = papplyelt->getChildren()[0]; - } - BOOST_ASSERT(psymboljoint->hasAttribute("encoding")); - BOOST_ASSERT(psymboljoint->getAttribute("encoding")==std::string("COLLADA")); - boost::shared_ptr pbasejoint = _getJointFromRef(psymboljoint->getCharData().c_str(),pf); - if( !!pbasejoint ) { - // set the mimic properties - pjoint->mimic.reset(new JointMimic()); - pjoint->mimic->joint_name = pbasejoint->name; - pjoint->mimic->multiplier = a; - pjoint->mimic->offset = b; - ROS_DEBUG_STREAM(str(boost::format("assigning joint %s to mimic %s %f %f\n")%pjoint->name%pbasejoint->name%a%b)); - } - } - } - } - return true; - } - - /// \brief Extract Link info and add it to an existing body - boost::shared_ptr _ExtractLink(const domLinkRef pdomlink,const domNodeRef pdomnode, const Pose& tParentWorldLink, const Pose& tParentLink, const std::vector& vdomjoints, const std::list& listAxisBindings) { - // Set link name with the name of the COLLADA's Link - std::string linkname = _ExtractLinkName(pdomlink); - if( linkname.size() == 0 ) { - ROS_WARN_STREAM(" has no name or id, falling back to !\n"); - if( !!pdomnode ) { - if (!!pdomnode->getName()) { - linkname = pdomnode->getName(); - } - if( linkname.size() == 0 && !!pdomnode->getID()) { - linkname = pdomnode->getID(); - } - } - } - - boost::shared_ptr plink; - _model.getLink(linkname,plink); - if( !plink ) { - plink.reset(new Link()); - plink->name = linkname; - plink->visual.reset(new Visual()); - _model.links_.insert(std::make_pair(linkname,plink)); - } - - _getUserData(pdomlink)->p = plink; - if( !!pdomnode ) { - ROS_DEBUG_STREAM(str(boost::format("Node Id %s and Name %s\n")%pdomnode->getId()%pdomnode->getName())); - } - - std::list listGeomProperties; - if (!pdomlink) { - ROS_WARN_STREAM("Extract object NOT kinematics !!!\n"); - _ExtractGeometry(pdomnode,listGeomProperties,listAxisBindings,Pose()); - } - else { - ROS_DEBUG_STREAM(str(boost::format("Attachment link elements: %d\n")%pdomlink->getAttachment_full_array().getCount())); - Pose tlink = _poseFromMatrix(_ExtractFullTransform(pdomlink)); - plink->visual->origin = _poseMult(tParentLink, tlink); // use the kinematics coordinate system for each link -// ROS_INFO("link %s rot: %f %f %f %f",linkname.c_str(),plink->visual->origin.rotation.w, plink->visual->origin.rotation.x,plink->visual->origin.rotation.y,plink->visual->origin.rotation.z); -// ROS_INFO("link %s trans: %f %f %f",linkname.c_str(),plink->visual->origin.position.x,plink->visual->origin.position.y,plink->visual->origin.position.z); - - // Get the geometry - _ExtractGeometry(pdomnode,listGeomProperties,listAxisBindings,_poseMult(_poseMult(tParentWorldLink,tlink),plink->visual->origin)); - - ROS_DEBUG_STREAM(str(boost::format("After ExtractGeometry Attachment link elements: %d\n")%pdomlink->getAttachment_full_array().getCount())); - - // Process all atached links - for (size_t iatt = 0; iatt < pdomlink->getAttachment_full_array().getCount(); ++iatt) { - domLink::domAttachment_fullRef pattfull = pdomlink->getAttachment_full_array()[iatt]; - - // get link kinematics transformation - Pose tatt = _poseFromMatrix(_ExtractFullTransform(pattfull)); - - // process attached links - daeElement* peltjoint = daeSidRef(pattfull->getJoint(), pattfull).resolve().elt; - domJointRef pdomjoint = daeSafeCast (peltjoint); - - if (!pdomjoint) { - domInstance_jointRef pdomijoint = daeSafeCast (peltjoint); - if (!!pdomijoint) { - pdomjoint = daeSafeCast (pdomijoint->getUrl().getElement().cast()); - } - } - - if (!pdomjoint || pdomjoint->typeID() != domJoint::ID()) { - ROS_WARN_STREAM(str(boost::format("could not find attached joint %s!\n")%pattfull->getJoint())); - return boost::shared_ptr(); - } - - // get direct child link - if (!pattfull->getLink()) { - ROS_WARN_STREAM(str(boost::format("joint %s needs to be attached to a valid link\n")%pdomjoint->getID())); - continue; - } - - // find the correct joint in the bindings - daeTArray vdomaxes = pdomjoint->getChildrenByType(); - domNodeRef pchildnode; - - // see if joint has a binding to a visual node - FOREACHC(itaxisbinding,listAxisBindings) { - for (size_t ic = 0; ic < vdomaxes.getCount(); ++ic) { - // If the binding for the joint axis is found, retrieve the info - if (vdomaxes[ic] == itaxisbinding->pkinematicaxis) { - pchildnode = itaxisbinding->visualnode; - break; - } - } - if( !!pchildnode ) { - break; - } - } - if (!pchildnode) { - ROS_DEBUG_STREAM(str(boost::format("joint %s has no visual binding\n")%pdomjoint->getID())); - } - - // create the joints before creating the child links - std::vector > vjoints(vdomaxes.getCount()); - for (size_t ic = 0; ic < vdomaxes.getCount(); ++ic) { - bool joint_active = true; // if not active, put into the passive list - FOREACHC(itaxisbinding,listAxisBindings) { - if (vdomaxes[ic] == itaxisbinding->pkinematicaxis) { - if( !!itaxisbinding->kinematics_axis_info ) { - if( !!itaxisbinding->kinematics_axis_info->getActive() ) { - joint_active = resolveBool(itaxisbinding->kinematics_axis_info->getActive(),itaxisbinding->kinematics_axis_info); - } - } - break; - } - } - - boost::shared_ptr pjoint(new Joint()); - pjoint->limits.reset(new JointLimits()); - pjoint->parent_link_name = plink->name; - - if( !!pdomjoint->getName() ) { - pjoint->name = pdomjoint->getName(); - } - else { - pjoint->name = str(boost::format("dummy%d")%_model.joints_.size()); - } - - if( !joint_active ) { - ROS_INFO_STREAM(str(boost::format("joint %s is passive, but adding to hierarchy\n")%pjoint->name)); - } - - domAxis_constraintRef pdomaxis = vdomaxes[ic]; - if( strcmp(pdomaxis->getElementName(), "revolute") == 0 ) { - pjoint->type = Joint::REVOLUTE; - } - else if( strcmp(pdomaxis->getElementName(), "prismatic") == 0 ) { - pjoint->type = Joint::PRISMATIC; - } - else { - ROS_WARN_STREAM(str(boost::format("unsupported joint type: %s\n")%pdomaxis->getElementName())); - } - - _getUserData(pdomjoint)->p = pjoint; - _getUserData(pdomaxis)->p = boost::shared_ptr(new int(_model.joints_.size())); - _model.joints_[pjoint->name] = pjoint; - vjoints[ic] = pjoint; - } - - boost::shared_ptr pchildlink = _ExtractLink(pattfull->getLink(), pchildnode, _poseMult(_poseMult(tParentWorldLink,tlink), tatt), tatt, vdomjoints, listAxisBindings); - - if (!pchildlink) { - ROS_WARN_STREAM(str(boost::format("Link has no child: %s\n")%plink->name)); - continue; - } - - int numjoints = 0; - for (size_t ic = 0; ic < vdomaxes.getCount(); ++ic) { - domKinematics_axis_infoRef kinematics_axis_info; - domMotion_axis_infoRef motion_axis_info; - FOREACHC(itaxisbinding,listAxisBindings) { - bool bfound = false; - if (vdomaxes[ic] == itaxisbinding->pkinematicaxis) { - kinematics_axis_info = itaxisbinding->kinematics_axis_info; - motion_axis_info = itaxisbinding->motion_axis_info; - bfound = true; - break; - } - } - domAxis_constraintRef pdomaxis = vdomaxes[ic]; - if (!pchildlink) { - // create dummy child link - // multiple axes can be easily done with "empty links" - ROS_WARN_STREAM(str(boost::format("creating dummy link %s, num joints %d\n")%plink->name%numjoints)); - - std::stringstream ss; - ss << plink->name; - ss <<"_dummy" << numjoints; - pchildlink.reset(new Link()); - pchildlink->name = ss.str(); - _model.links_.insert(std::make_pair(pchildlink->name,pchildlink)); - } - - ROS_DEBUG_STREAM(str(boost::format("Joint %s assigned %d \n")%vjoints[ic]->name%ic)); - boost::shared_ptr pjoint = vjoints[ic]; - pjoint->child_link_name = pchildlink->name; - - // Axes and Anchor assignment. - pjoint->axis.x = pdomaxis->getAxis()->getValue()[0]; - pjoint->axis.y = pdomaxis->getAxis()->getValue()[1]; - pjoint->axis.z = pdomaxis->getAxis()->getValue()[2]; - - if (!motion_axis_info) { - ROS_WARN_STREAM(str(boost::format("No motion axis info for joint %s\n")%pjoint->name)); - } - - // Sets the Speed and the Acceleration of the joint - if (!!motion_axis_info) { - if (!!motion_axis_info->getSpeed()) { - pjoint->limits->velocity = resolveFloat(motion_axis_info->getSpeed(),motion_axis_info); - ROS_DEBUG("... Joint Speed: %f...\n",pjoint->limits->velocity); - } - if (!!motion_axis_info->getAcceleration()) { - pjoint->limits->effort = resolveFloat(motion_axis_info->getAcceleration(),motion_axis_info); - ROS_DEBUG("... Joint effort: %f...\n",pjoint->limits->effort); - } - } - - bool joint_locked = false; // if locked, joint angle is static - bool kinematics_limits = false; - - if (!!kinematics_axis_info) { - if (!!kinematics_axis_info->getLocked()) { - joint_locked = resolveBool(kinematics_axis_info->getLocked(),kinematics_axis_info); - } - - if (joint_locked) { // If joint is locked set limits to the static value. - if( pjoint->type == Joint::REVOLUTE || pjoint->type ==Joint::PRISMATIC) { - ROS_WARN_STREAM("lock joint!!\n"); - pjoint->limits->lower = 0; - pjoint->limits->upper = 0; - } - } - else if (kinematics_axis_info->getLimits()) { // If there are articulated system kinematics limits - kinematics_limits = true; - double fscale = (pjoint->type == Joint::REVOLUTE)?(M_PI/180.0f):_GetUnitScale(kinematics_axis_info); - if( pjoint->type == Joint::REVOLUTE || pjoint->type ==Joint::PRISMATIC) { - pjoint->limits->lower = fscale*(double)(resolveFloat(kinematics_axis_info->getLimits()->getMin(),kinematics_axis_info)); - pjoint->limits->upper = fscale*(double)(resolveFloat(kinematics_axis_info->getLimits()->getMax(),kinematics_axis_info)); - } - } - } - - // Search limits in the joints section - if (!kinematics_axis_info || (!joint_locked && !kinematics_limits)) { - // If there are NO LIMITS - if( !pdomaxis->getLimits() ) { - ROS_DEBUG_STREAM(str(boost::format("There are NO LIMITS in joint %s:%d ...\n")%pjoint->name%kinematics_limits)); - if( pjoint->type == Joint::REVOLUTE ) { - pjoint->type = Joint::CONTINUOUS; // continuous means revolute? - pjoint->limits->lower = -M_PI; - pjoint->limits->upper = M_PI; - } - else { - pjoint->limits->lower = -100000; - pjoint->limits->upper = 100000; - } - } - else { - ROS_DEBUG_STREAM(str(boost::format("There are LIMITS in joint %s ...\n")%pjoint->name)); - double fscale = (pjoint->type == Joint::REVOLUTE)?(M_PI/180.0f):_GetUnitScale(pdomaxis); - pjoint->limits->lower = (double)pdomaxis->getLimits()->getMin()->getValue()*fscale; - pjoint->limits->upper = (double)pdomaxis->getLimits()->getMax()->getValue()*fscale; - } - } - - //ROS_INFO("joint %s axis: %f %f %f",pjoint->name.c_str(),pjoint->axis.x,pjoint->axis.y,pjoint->axis.z); - pjoint->parent_to_joint_origin_transform = tatt; - pjoint->limits->velocity = pjoint->type == Joint::PRISMATIC ? 0.01 : 0.5f; - pchildlink.reset(); - ++numjoints; - } - } - } - - //pdomlink->getAttachment_start_array(); - //pdomlink->getAttachment_end_array(); - - plink->visual->geometry = _CreateGeometry(plink->name, listGeomProperties); - return plink; - } - - boost::shared_ptr _CreateGeometry(const std::string& name, const std::list& listGeomProperties) - { - boost::shared_ptr geometry(new Mesh()); - geometry->type = Geometry::MESH; - geometry->scale.x = 1; - geometry->scale.y = 1; - geometry->scale.z = 1; - - std::vector vertices; - std::vector indices; - FOREACHC(it, listGeomProperties) { - int voffset = vertices.size(), ioffset = indices.size(); - vertices.resize(vertices.size()+it->vertices.size()); - for(size_t i = 0; i < it->vertices.size(); ++i) { - vertices[voffset+i] = _poseMult(it->_t, it->vertices[i]); - } - indices.resize(indices.size()+it->indices.size()); - for(size_t i = 0; i < it->indices.size(); ++i) { - indices[ioffset+i] = voffset+it->indices[i]; - } - } - - // have to save the geometry into individual collada 1.4 files since URDF does not allow triangle meshes to be specified - std::stringstream daedata; - daedata << str(boost::format("\n\ -\n\ - \n\ - \n\ - Rosen Diankov\n\ - \n\ - robot_model/urdf temporary collada geometry\n\ - \n\ - \n\ - \n\ - Z_UP\n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - 0.0 0.0 0.1 1\n\ - \n\ - \n\ - 0.8 0.8 0.8 1\n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - ")%(vertices.size()*3)); - // fill with vertices - FOREACH(it,vertices) { - daedata << it->x << " " << it->y << " " << it->z << " "; - } - daedata << str(boost::format("\n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ -

")%vertices.size()%(indices.size()/3)); - // fill with indices - FOREACH(it,indices) { - daedata << *it << " "; - } - daedata << str(boost::format("

\n\ -
\n\ -
\n\ -
\n\ -
\n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ -
")%name%name); - - //= str(boost::format("%s/models/%s.dae")%_resourcedir%name); - geometry->filename = str(boost::format("/tmp/collada_model_reader_%s_XXXXXX.dae")%name); - int fd = mkstemps(&geometry->filename[0],4); - //ROS_INFO("temp file: %s",geometry->filename.c_str()); - std::string daedatastr = daedata.str(); - if( (size_t)write(fd,daedatastr.c_str(),daedatastr.size()) != daedatastr.size() ) { - ROS_ERROR("failed to write to geometry dae file %s",geometry->filename.c_str()); - } - close(fd); - _listTempFilenames.push_back(boost::shared_ptr(new UnlinkFilename(geometry->filename))); - geometry->filename = std::string("file://") + geometry->filename; - return geometry; - } - - /// Extract Geometry and apply the transformations of the node - /// \param pdomnode Node to extract the goemetry - /// \param plink Link of the kinematics model - void _ExtractGeometry(const domNodeRef pdomnode,std::list& listGeomProperties, const std::list& listAxisBindings, const Pose& tlink) - { - if( !pdomnode ) { - return; - } - - ROS_DEBUG_STREAM(str(boost::format("ExtractGeometry(node,link) of %s\n")%pdomnode->getName())); - - // For all child nodes of pdomnode - for (size_t i = 0; i < pdomnode->getNode_array().getCount(); i++) { - // check if contains a joint - bool contains=false; - FOREACHC(it,listAxisBindings) { - // don't check ID's check if the reference is the same! - if ( (pdomnode->getNode_array()[i]) == (it->visualnode)){ - contains=true; - break; - } - } - if (contains) { - continue; - } - - _ExtractGeometry(pdomnode->getNode_array()[i],listGeomProperties, listAxisBindings,tlink); - // Plink stayes the same for all children - // replace pdomnode by child = pdomnode->getNode_array()[i] - // hope for the best! - // put everything in a subroutine in order to process pdomnode too! - } - - unsigned int nGeomBefore = listGeomProperties.size(); // #of Meshes already associated to this link - - // get the geometry - for (size_t igeom = 0; igeom < pdomnode->getInstance_geometry_array().getCount(); ++igeom) { - domInstance_geometryRef domigeom = pdomnode->getInstance_geometry_array()[igeom]; - domGeometryRef domgeom = daeSafeCast (domigeom->getUrl().getElement()); - if (!domgeom) { - continue; - } - - // Gets materials - std::map mapmaterials; - if (!!domigeom->getBind_material() && !!domigeom->getBind_material()->getTechnique_common()) { - const domInstance_material_Array& matarray = domigeom->getBind_material()->getTechnique_common()->getInstance_material_array(); - for (size_t imat = 0; imat < matarray.getCount(); ++imat) { - domMaterialRef pmat = daeSafeCast(matarray[imat]->getTarget().getElement()); - if (!!pmat) { - mapmaterials[matarray[imat]->getSymbol()] = pmat; - } - } - } - - // Gets the geometry - _ExtractGeometry(domgeom, mapmaterials, listGeomProperties); - } - - std::list::iterator itgeom= listGeomProperties.begin(); - for (unsigned int i=0; i< nGeomBefore; i++) { - itgeom++; // change only the transformations of the newly found geometries. - } - - boost::array tmnodegeom = _poseMult(_matrixFromPose(_poseInverse(tlink)), _poseMult(_getNodeParentTransform(pdomnode), _ExtractFullTransform(pdomnode))); - Pose tnodegeom; - Vector3 vscale(1,1,1); - _decompose(tmnodegeom, tnodegeom, vscale); - -// std::stringstream ss; ss << "geom: "; -// for(int i = 0; i < 4; ++i) { -// ss << tmnodegeom[4*0+i] << " " << tmnodegeom[4*1+i] << " " << tmnodegeom[4*2+i] << " "; -// } -// ROS_INFO(ss.str().c_str()); - - // Switch between different type of geometry PRIMITIVES - for (; itgeom != listGeomProperties.end(); itgeom++) { - itgeom->_t = tnodegeom; - switch (itgeom->type) { - case GeomBox: - itgeom->vGeomData.x *= vscale.x; - itgeom->vGeomData.y *= vscale.y; - itgeom->vGeomData.z *= vscale.z; - break; - case GeomSphere: { - itgeom->vGeomData.x *= std::max(vscale.z, std::max(vscale.x, vscale.y)); - break; - } - case GeomCylinder: - itgeom->vGeomData.x *= std::max(vscale.x, vscale.y); - itgeom->vGeomData.y *= vscale.z; - break; - case GeomTrimesh: - for(size_t i = 0; i < itgeom->vertices.size(); ++i ) { - itgeom->vertices[i] = _poseMult(tmnodegeom,itgeom->vertices[i]); - } - itgeom->_t = Pose(); // reset back to identity - break; - default: - ROS_WARN_STREAM(str(boost::format("unknown geometry type: %d\n")%itgeom->type)); - } - } - } - - /// Paint the Geometry with the color material - /// \param pmat Material info of the COLLADA's model - /// \param geom Geometry properties in OpenRAVE - void _FillGeometryColor(const domMaterialRef pmat, GEOMPROPERTIES& geom) - { - if( !!pmat && !!pmat->getInstance_effect() ) { - domEffectRef peffect = daeSafeCast(pmat->getInstance_effect()->getUrl().getElement().cast()); - if( !!peffect ) { - domProfile_common::domTechnique::domPhongRef pphong = daeSafeCast(peffect->getDescendant(daeElement::matchType(domProfile_common::domTechnique::domPhong::ID()))); - if( !!pphong ) { - if( !!pphong->getAmbient() && !!pphong->getAmbient()->getColor() ) { - domFx_color c = pphong->getAmbient()->getColor()->getValue(); - geom.ambientColor.r = c[0]; - geom.ambientColor.g = c[1]; - geom.ambientColor.b = c[2]; - geom.ambientColor.a = c[3]; - } - if( !!pphong->getDiffuse() && !!pphong->getDiffuse()->getColor() ) { - domFx_color c = pphong->getDiffuse()->getColor()->getValue(); - geom.diffuseColor.r = c[0]; - geom.diffuseColor.g = c[1]; - geom.diffuseColor.b = c[2]; - geom.diffuseColor.a = c[3]; - } - } - } - } - } - - /// Extract the Geometry in TRIANGLES and adds it to OpenRave - /// \param triRef Array of triangles of the COLLADA's model - /// \param vertsRef Array of vertices of the COLLADA's model - /// \param mapmaterials Materials applied to the geometry - /// \param plink Link of the kinematics model - bool _ExtractGeometry(const domTrianglesRef triRef, const domVerticesRef vertsRef, const std::map& mapmaterials, std::list& listGeomProperties) - { - if( !triRef ) { - return false; - } - listGeomProperties.push_back(GEOMPROPERTIES()); - GEOMPROPERTIES& geom = listGeomProperties.back(); - geom.type = GeomTrimesh; - - // resolve the material and assign correct colors to the geometry - if( !!triRef->getMaterial() ) { - std::map::const_iterator itmat = mapmaterials.find(triRef->getMaterial()); - if( itmat != mapmaterials.end() ) { - _FillGeometryColor(itmat->second,geom); - } - } - - size_t triangleIndexStride = 0, vertexoffset = -1; - domInput_local_offsetRef indexOffsetRef; - - for (unsigned int w=0;wgetInput_array().getCount();w++) { - size_t offset = triRef->getInput_array()[w]->getOffset(); - daeString str = triRef->getInput_array()[w]->getSemantic(); - if (!strcmp(str,"VERTEX")) { - indexOffsetRef = triRef->getInput_array()[w]; - vertexoffset = offset; - } - if (offset> triangleIndexStride) { - triangleIndexStride = offset; - } - } - triangleIndexStride++; - - const domList_of_uints& indexArray =triRef->getP()->getValue(); - geom.indices.reserve(triRef->getCount()*3); - geom.vertices.reserve(triRef->getCount()*3); - for (size_t i=0;igetInput_array().getCount();++i) { - domInput_localRef localRef = vertsRef->getInput_array()[i]; - daeString str = localRef->getSemantic(); - if ( strcmp(str,"POSITION") == 0 ) { - const domSourceRef node = daeSafeCast(localRef->getSource().getElement()); - if( !node ) { - continue; - } - double fUnitScale = _GetUnitScale(node); - const domFloat_arrayRef flArray = node->getFloat_array(); - if (!!flArray) { - const domList_of_floats& listFloats = flArray->getValue(); - int k=vertexoffset; - int vertexStride = 3;//instead of hardcoded stride, should use the 'accessor' - for(size_t itri = 0; itri < triRef->getCount(); ++itri) { - if(k+2*triangleIndexStride < indexArray.getCount() ) { - for (int j=0;j<3;j++) { - int index0 = indexArray.get(k)*vertexStride; - domFloat fl0 = listFloats.get(index0); - domFloat fl1 = listFloats.get(index0+1); - domFloat fl2 = listFloats.get(index0+2); - k+=triangleIndexStride; - geom.indices.push_back(geom.vertices.size()); - geom.vertices.push_back(Vector3(fl0*fUnitScale,fl1*fUnitScale,fl2*fUnitScale)); - } - } - } - } - else { - ROS_WARN_STREAM("float array not defined!\n"); - } - break; - } - } - if( geom.indices.size() != 3*triRef->getCount() ) { - ROS_WARN_STREAM("triangles declares wrong count!\n"); - } - geom.InitCollisionMesh(); - return true; - } - - /// Extract the Geometry in TRIGLE FANS and adds it to OpenRave - /// \param triRef Array of triangle fans of the COLLADA's model - /// \param vertsRef Array of vertices of the COLLADA's model - /// \param mapmaterials Materials applied to the geometry - bool _ExtractGeometry(const domTrifansRef triRef, const domVerticesRef vertsRef, const std::map& mapmaterials, std::list& listGeomProperties) - { - if( !triRef ) { - return false; - } - listGeomProperties.push_back(GEOMPROPERTIES()); - GEOMPROPERTIES& geom = listGeomProperties.back(); - geom.type = GeomTrimesh; - - // resolve the material and assign correct colors to the geometry - if( !!triRef->getMaterial() ) { - std::map::const_iterator itmat = mapmaterials.find(triRef->getMaterial()); - if( itmat != mapmaterials.end() ) { - _FillGeometryColor(itmat->second,geom); - } - } - - size_t triangleIndexStride = 0, vertexoffset = -1; - domInput_local_offsetRef indexOffsetRef; - - for (unsigned int w=0;wgetInput_array().getCount();w++) { - size_t offset = triRef->getInput_array()[w]->getOffset(); - daeString str = triRef->getInput_array()[w]->getSemantic(); - if (!strcmp(str,"VERTEX")) { - indexOffsetRef = triRef->getInput_array()[w]; - vertexoffset = offset; - } - if (offset> triangleIndexStride) { - triangleIndexStride = offset; - } - } - triangleIndexStride++; - size_t primitivecount = triRef->getCount(); - if( primitivecount > triRef->getP_array().getCount() ) { - ROS_WARN_STREAM("trifans has incorrect count\n"); - primitivecount = triRef->getP_array().getCount(); - } - for(size_t ip = 0; ip < primitivecount; ++ip) { - domList_of_uints indexArray =triRef->getP_array()[ip]->getValue(); - for (size_t i=0;igetInput_array().getCount();++i) { - domInput_localRef localRef = vertsRef->getInput_array()[i]; - daeString str = localRef->getSemantic(); - if ( strcmp(str,"POSITION") == 0 ) { - const domSourceRef node = daeSafeCast(localRef->getSource().getElement()); - if( !node ) { - continue; - } - double fUnitScale = _GetUnitScale(node); - const domFloat_arrayRef flArray = node->getFloat_array(); - if (!!flArray) { - const domList_of_floats& listFloats = flArray->getValue(); - int k=vertexoffset; - int vertexStride = 3;//instead of hardcoded stride, should use the 'accessor' - size_t usedindices = 3*(indexArray.getCount()-2); - if( geom.indices.capacity() < geom.indices.size()+usedindices ) { - geom.indices.reserve(geom.indices.size()+usedindices); - } - if( geom.vertices.capacity() < geom.vertices.size()+indexArray.getCount() ) { - geom.vertices.reserve(geom.vertices.size()+indexArray.getCount()); - } - size_t startoffset = (int)geom.vertices.size(); - while(k < (int)indexArray.getCount() ) { - int index0 = indexArray.get(k)*vertexStride; - domFloat fl0 = listFloats.get(index0); - domFloat fl1 = listFloats.get(index0+1); - domFloat fl2 = listFloats.get(index0+2); - k+=triangleIndexStride; - geom.vertices.push_back(Vector3(fl0*fUnitScale,fl1*fUnitScale,fl2*fUnitScale)); - } - for(size_t ivert = startoffset+2; ivert < geom.vertices.size(); ++ivert) { - geom.indices.push_back(startoffset); - geom.indices.push_back(ivert-1); - geom.indices.push_back(ivert); - } - } - else { - ROS_WARN_STREAM("float array not defined!\n"); - } - break; - } - } - } - - geom.InitCollisionMesh(); - return false; - } - - /// Extract the Geometry in TRIANGLE STRIPS and adds it to OpenRave - /// \param triRef Array of Triangle Strips of the COLLADA's model - /// \param vertsRef Array of vertices of the COLLADA's model - /// \param mapmaterials Materials applied to the geometry - bool _ExtractGeometry(const domTristripsRef triRef, const domVerticesRef vertsRef, const std::map& mapmaterials, std::list& listGeomProperties) - { - if( !triRef ) { - return false; - } - listGeomProperties.push_back(GEOMPROPERTIES()); - GEOMPROPERTIES& geom = listGeomProperties.back(); - geom.type = GeomTrimesh; - - // resolve the material and assign correct colors to the geometry - if( !!triRef->getMaterial() ) { - std::map::const_iterator itmat = mapmaterials.find(triRef->getMaterial()); - if( itmat != mapmaterials.end() ) { - _FillGeometryColor(itmat->second,geom); - } - } - size_t triangleIndexStride = 0, vertexoffset = -1; - domInput_local_offsetRef indexOffsetRef; - - for (unsigned int w=0;wgetInput_array().getCount();w++) { - size_t offset = triRef->getInput_array()[w]->getOffset(); - daeString str = triRef->getInput_array()[w]->getSemantic(); - if (!strcmp(str,"VERTEX")) { - indexOffsetRef = triRef->getInput_array()[w]; - vertexoffset = offset; - } - if (offset> triangleIndexStride) { - triangleIndexStride = offset; - } - } - triangleIndexStride++; - size_t primitivecount = triRef->getCount(); - if( primitivecount > triRef->getP_array().getCount() ) { - ROS_WARN_STREAM("tristrips has incorrect count\n"); - primitivecount = triRef->getP_array().getCount(); - } - for(size_t ip = 0; ip < primitivecount; ++ip) { - domList_of_uints indexArray = triRef->getP_array()[ip]->getValue(); - for (size_t i=0;igetInput_array().getCount();++i) { - domInput_localRef localRef = vertsRef->getInput_array()[i]; - daeString str = localRef->getSemantic(); - if ( strcmp(str,"POSITION") == 0 ) { - const domSourceRef node = daeSafeCast(localRef->getSource().getElement()); - if( !node ) { - continue; - } - double fUnitScale = _GetUnitScale(node); - const domFloat_arrayRef flArray = node->getFloat_array(); - if (!!flArray) { - const domList_of_floats& listFloats = flArray->getValue(); - int k=vertexoffset; - int vertexStride = 3;//instead of hardcoded stride, should use the 'accessor' - size_t usedindices = indexArray.getCount()-2; - if( geom.indices.capacity() < geom.indices.size()+usedindices ) { - geom.indices.reserve(geom.indices.size()+usedindices); - } - if( geom.vertices.capacity() < geom.vertices.size()+indexArray.getCount() ) { - geom.vertices.reserve(geom.vertices.size()+indexArray.getCount()); - } - - size_t startoffset = (int)geom.vertices.size(); - while(k < (int)indexArray.getCount() ) { - int index0 = indexArray.get(k)*vertexStride; - domFloat fl0 = listFloats.get(index0); - domFloat fl1 = listFloats.get(index0+1); - domFloat fl2 = listFloats.get(index0+2); - k+=triangleIndexStride; - geom.vertices.push_back(Vector3(fl0*fUnitScale,fl1*fUnitScale,fl2*fUnitScale)); - } - - bool bFlip = false; - for(size_t ivert = startoffset+2; ivert < geom.vertices.size(); ++ivert) { - geom.indices.push_back(ivert-2); - geom.indices.push_back(bFlip ? ivert : ivert-1); - geom.indices.push_back(bFlip ? ivert-1 : ivert); - bFlip = !bFlip; - } - } - else { - ROS_WARN_STREAM("float array not defined!\n"); - } - break; - } - } - } - - geom.InitCollisionMesh(); - return false; - } - - /// Extract the Geometry in TRIANGLE STRIPS and adds it to OpenRave - /// \param triRef Array of Triangle Strips of the COLLADA's model - /// \param vertsRef Array of vertices of the COLLADA's model - /// \param mapmaterials Materials applied to the geometry - bool _ExtractGeometry(const domPolylistRef triRef, const domVerticesRef vertsRef, const std::map& mapmaterials, std::list& listGeomProperties) - { - if( !triRef ) { - return false; - } - listGeomProperties.push_back(GEOMPROPERTIES()); - GEOMPROPERTIES& geom = listGeomProperties.back(); - geom.type = GeomTrimesh; - - // resolve the material and assign correct colors to the geometry - if( !!triRef->getMaterial() ) { - std::map::const_iterator itmat = mapmaterials.find(triRef->getMaterial()); - if( itmat != mapmaterials.end() ) { - _FillGeometryColor(itmat->second,geom); - } - } - - size_t triangleIndexStride = 0,vertexoffset = -1; - domInput_local_offsetRef indexOffsetRef; - for (unsigned int w=0;wgetInput_array().getCount();w++) { - size_t offset = triRef->getInput_array()[w]->getOffset(); - daeString str = triRef->getInput_array()[w]->getSemantic(); - if (!strcmp(str,"VERTEX")) { - indexOffsetRef = triRef->getInput_array()[w]; - vertexoffset = offset; - } - if (offset> triangleIndexStride) { - triangleIndexStride = offset; - } - } - triangleIndexStride++; - const domList_of_uints& indexArray =triRef->getP()->getValue(); - for (size_t i=0;igetInput_array().getCount();++i) { - domInput_localRef localRef = vertsRef->getInput_array()[i]; - daeString str = localRef->getSemantic(); - if ( strcmp(str,"POSITION") == 0 ) { - const domSourceRef node = daeSafeCast(localRef->getSource().getElement()); - if( !node ) { - continue; - } - double fUnitScale = _GetUnitScale(node); - const domFloat_arrayRef flArray = node->getFloat_array(); - if (!!flArray) { - const domList_of_floats& listFloats = flArray->getValue(); - size_t k=vertexoffset; - int vertexStride = 3;//instead of hardcoded stride, should use the 'accessor' - for(size_t ipoly = 0; ipoly < triRef->getVcount()->getValue().getCount(); ++ipoly) { - size_t numverts = triRef->getVcount()->getValue()[ipoly]; - if(numverts > 0 && k+(numverts-1)*triangleIndexStride < indexArray.getCount() ) { - size_t startoffset = geom.vertices.size(); - for (size_t j=0;j& mapmaterials, std::list& listGeomProperties) - { - if( !geom ) { - return false; - } - std::vector vconvexhull; - if (geom->getMesh()) { - const domMeshRef meshRef = geom->getMesh(); - for (size_t tg = 0;tggetTriangles_array().getCount();tg++) { - _ExtractGeometry(meshRef->getTriangles_array()[tg], meshRef->getVertices(), mapmaterials, listGeomProperties); - } - for (size_t tg = 0;tggetTrifans_array().getCount();tg++) { - _ExtractGeometry(meshRef->getTrifans_array()[tg], meshRef->getVertices(), mapmaterials, listGeomProperties); - } - for (size_t tg = 0;tggetTristrips_array().getCount();tg++) { - _ExtractGeometry(meshRef->getTristrips_array()[tg], meshRef->getVertices(), mapmaterials, listGeomProperties); - } - for (size_t tg = 0;tggetPolylist_array().getCount();tg++) { - _ExtractGeometry(meshRef->getPolylist_array()[tg], meshRef->getVertices(), mapmaterials, listGeomProperties); - } - if( meshRef->getPolygons_array().getCount()> 0 ) { - ROS_WARN_STREAM("openrave does not support collada polygons\n"); - } - - // if( alltrimesh.vertices.size() == 0 ) { - // const domVerticesRef vertsRef = meshRef->getVertices(); - // for (size_t i=0;igetInput_array().getCount();i++) { - // domInput_localRef localRef = vertsRef->getInput_array()[i]; - // daeString str = localRef->getSemantic(); - // if ( strcmp(str,"POSITION") == 0 ) { - // const domSourceRef node = daeSafeCast(localRef->getSource().getElement()); - // if( !node ) - // continue; - // double fUnitScale = _GetUnitScale(node); - // const domFloat_arrayRef flArray = node->getFloat_array(); - // if (!!flArray) { - // const domList_of_floats& listFloats = flArray->getValue(); - // int vertexStride = 3;//instead of hardcoded stride, should use the 'accessor' - // vconvexhull.reserve(vconvexhull.size()+listFloats.getCount()); - // for (size_t vertIndex = 0;vertIndex < listFloats.getCount();vertIndex+=vertexStride) { - // //btVector3 verts[3]; - // domFloat fl0 = listFloats.get(vertIndex); - // domFloat fl1 = listFloats.get(vertIndex+1); - // domFloat fl2 = listFloats.get(vertIndex+2); - // vconvexhull.push_back(Vector3(fl0*fUnitScale,fl1*fUnitScale,fl2*fUnitScale)); - // } - // } - // } - // } - // - // _computeConvexHull(vconvexhull,alltrimesh); - // } - - return true; - } - else if (geom->getConvex_mesh()) { - { - const domConvex_meshRef convexRef = geom->getConvex_mesh(); - daeElementRef otherElemRef = convexRef->getConvex_hull_of().getElement(); - if ( !!otherElemRef ) { - domGeometryRef linkedGeom = *(domGeometryRef*)&otherElemRef; - ROS_WARN_STREAM( "otherLinked\n"); - } - else { - ROS_WARN("convexMesh polyCount = %d\n",(int)convexRef->getPolygons_array().getCount()); - ROS_WARN("convexMesh triCount = %d\n",(int)convexRef->getTriangles_array().getCount()); - } - } - - const domConvex_meshRef convexRef = geom->getConvex_mesh(); - //daeString urlref = convexRef->getConvex_hull_of().getURI(); - daeString urlref2 = convexRef->getConvex_hull_of().getOriginalURI(); - if (urlref2) { - daeElementRef otherElemRef = convexRef->getConvex_hull_of().getElement(); - - // Load all the geometry libraries - for ( size_t i = 0; i < _dom->getLibrary_geometries_array().getCount(); i++) { - domLibrary_geometriesRef libgeom = _dom->getLibrary_geometries_array()[i]; - for (size_t i = 0; i < libgeom->getGeometry_array().getCount(); i++) { - domGeometryRef lib = libgeom->getGeometry_array()[i]; - if (!strcmp(lib->getId(),urlref2+1)) { // skip the # at the front of urlref2 - //found convex_hull geometry - domMesh *meshElement = lib->getMesh();//linkedGeom->getMesh(); - if (meshElement) { - const domVerticesRef vertsRef = meshElement->getVertices(); - for (size_t i=0;igetInput_array().getCount();i++) { - domInput_localRef localRef = vertsRef->getInput_array()[i]; - daeString str = localRef->getSemantic(); - if ( strcmp(str,"POSITION") == 0) { - const domSourceRef node = daeSafeCast(localRef->getSource().getElement()); - if( !node ) { - continue; - } - double fUnitScale = _GetUnitScale(node); - const domFloat_arrayRef flArray = node->getFloat_array(); - if (!!flArray) { - vconvexhull.reserve(vconvexhull.size()+flArray->getCount()); - const domList_of_floats& listFloats = flArray->getValue(); - for (size_t k=0;k+2getCount();k+=3) { - domFloat fl0 = listFloats.get(k); - domFloat fl1 = listFloats.get(k+1); - domFloat fl2 = listFloats.get(k+2); - vconvexhull.push_back(Vector3(fl0*fUnitScale,fl1*fUnitScale,fl2*fUnitScale)); - } - } - } - } - } - } - } - } - } - else { - //no getConvex_hull_of but direct vertices - const domVerticesRef vertsRef = convexRef->getVertices(); - for (size_t i=0;igetInput_array().getCount();i++) { - domInput_localRef localRef = vertsRef->getInput_array()[i]; - daeString str = localRef->getSemantic(); - if ( strcmp(str,"POSITION") == 0 ) { - const domSourceRef node = daeSafeCast(localRef->getSource().getElement()); - if( !node ) { - continue; - } - double fUnitScale = _GetUnitScale(node); - const domFloat_arrayRef flArray = node->getFloat_array(); - if (!!flArray) { - const domList_of_floats& listFloats = flArray->getValue(); - vconvexhull.reserve(vconvexhull.size()+flArray->getCount()); - for (size_t k=0;k+2getCount();k+=3) { - domFloat fl0 = listFloats.get(k); - domFloat fl1 = listFloats.get(k+1); - domFloat fl2 = listFloats.get(k+2); - vconvexhull.push_back(Vector3(fl0*fUnitScale,fl1*fUnitScale,fl2*fUnitScale)); - } - } - } - } - } - - if( vconvexhull.size()> 0 ) { - listGeomProperties.push_back(GEOMPROPERTIES()); - GEOMPROPERTIES& geom = listGeomProperties.back(); - geom.type = GeomTrimesh; - - //_computeConvexHull(vconvexhull,trimesh); - geom.InitCollisionMesh(); - } - return true; - } - - return false; - } - - /// \brief extract the robot manipulators - void _ExtractRobotManipulators(const domArticulated_systemRef as) - { - for(size_t ie = 0; ie < as->getExtra_array().getCount(); ++ie) { - domExtraRef pextra = as->getExtra_array()[ie]; - if( strcmp(pextra->getType(), "manipulator") == 0 ) { - std::string name = pextra->getAttribute("name"); - if( name.size() == 0 ) { - name = str(boost::format("manipulator%d")%_nGlobalManipulatorId++); - } - domTechniqueRef tec = _ExtractOpenRAVEProfile(pextra->getTechnique_array()); - if( !!tec ) { -// RobotBase::ManipulatorPtr pmanip(new RobotBase::Manipulator(probot)); -// pmanip->_name = name; -// daeElement* pframe_origin = tec->getChild("frame_origin"); -// daeElement* pframe_tip = tec->getChild("frame_tip"); -// if( !!pframe_origin ) { -// domLinkRef plink = daeSafeCast(daeSidRef(pframe_origin->getAttribute("link"), as).resolve().elt); -// if( !!plink ) { -// pmanip->_pBase = boost::static_pointer_cast(_getUserData(plink)->p); -// } -// if( !pmanip->_pBase ) { -// ROS_WARN_STREAM(str(boost::format("failed to find manipulator %s frame origin %s\n")%name%pframe_origin->getAttribute("link"))); -// continue; -// } -// } -// if( !!pframe_tip ) { -// daeElementRef plink = daeSafeCast(daeSidRef(pframe_tip->getAttribute("link"), as).resolve().elt); -// if( !!plink ) { -// pmanip->_pEndEffector = boost::static_pointer_cast(_getUserData(plink)->p); -// } -// if( !pmanip->_pEndEffector ) { -// ROS_WARN_STREAM(str(boost::format("failed to find manipulator %s frame tip %s\n")%name%pframe_tip->getAttribute("link"))); -// continue; -// } -// pmanip->_tGrasp = _ExtractFullTransformFromChildren(pframe_tip); -// } -// -// for(size_t ic = 0; ic < tec->getContents().getCount(); ++ic) { -// daeElementRef pgripper_axis = tec->getContents()[ic]; -// if( pgripper_axis->getElementName() == std::string("gripper_axis") ) { -// domAxis_constraintRef paxis = daeSafeCast(daeSidRef(pgripper_axis->getAttribute("axis"), as).resolve().elt); -// if( !!paxis ) { -// boost::shared_ptr pdofindex = boost::static_pointer_cast(_getUserData(paxis)->p); -// if( !!pdofindex ) { -// if( *pdofindex < 0 ) { -// ROS_WARN_STREAM(str(boost::format("manipulator %s gripper axis %s references passive joint\n")%name%pgripper_axis->getAttribute("axis"))); -// } -// else { -// float closingdirection = 0; -// daeElementRef pclosingdirection = daeElementRef(pgripper_axis->getChild("closingdirection")); -// if( !pclosingdirection || !resolveCommon_float_or_param(pclosingdirection,as,closingdirection) ) { -// ROS_WARN_STREAM(str(boost::format("manipulator %s gripper axis %s failed to process closing direction\n")%name%pgripper_axis->getAttribute("axis"))); -// } -// pmanip->_vgripperdofindices.push_back(*pdofindex); -// pmanip->_vClosingDirection.push_back((double)closingdirection); -// } -// continue; -// } -// } -// ROS_WARN_STREAM(str(boost::format("could not find manipulator gripper axis %s\n")%pgripper_axis->getAttribute("axis"))); -// } -// } -// probot->GetManipulators().push_back(pmanip); - } - else { - ROS_WARN_STREAM(str(boost::format("cannot create robot %s manipulator %s\n")%_model.name_%name)); - } - } - } - } - - /// \brief Extract Sensors attached to a Robot - void _ExtractRobotAttachedSensors(const domArticulated_systemRef as) - { - for (size_t ie = 0; ie < as->getExtra_array().getCount(); ie++) { - domExtraRef pextra = as->getExtra_array()[ie]; - if( strcmp(pextra->getType(), "sensor") == 0 ) { - std::string name = pextra->getAttribute("name"); - if( name.size() == 0 ) { - name = str(boost::format("sensor%d")%_nGlobalSensorId++); - } - domTechniqueRef tec = _ExtractOpenRAVEProfile(pextra->getTechnique_array()); - if( !!tec ) { -// RobotBase::AttachedSensorPtr pattachedsensor(new RobotBase::AttachedSensor(probot)); -// pattachedsensor->_name = name; -// daeElement* pframe_origin = tec->getChild("frame_origin"); -// if( !!pframe_origin ) { -// domLinkRef plink = daeSafeCast(daeSidRef(pframe_origin->getAttribute("link"), as).resolve().elt); -// if( !!plink ) { -// pattachedsensor->pattachedlink = boost::static_pointer_cast(_getUserData(plink)->p); -// } -// if( !pattachedsensor->pattachedlink.lock() ) { -// ROS_WARN_STREAM(str(boost::format("failed to find manipulator %s frame origin %s\n")%name%pframe_origin->getAttribute("link"))); -// continue; -// } -// pattachedsensor->trelative = _ExtractFullTransformFromChildren(pframe_origin); -// } -// if( !_ExtractSensor(pattachedsensor->psensor,tec->getChild("instance_sensor")) ) { -// ROS_WARN_STREAM(str(boost::format("cannot find instance_sensor for attached sensor %s:%s\n")%_model.name_%name)); -// } -// else { -// pattachedsensor->pdata = pattachedsensor->GetSensor()->CreateSensorData(); -// } -// probot->GetAttachedSensors().push_back(pattachedsensor); - } - else { - ROS_WARN_STREAM(str(boost::format("cannot create robot %s attached sensor %s\n")%_model.name_%name)); - } - } - } - } - - /// \brief Extract an instance of a sensor -// bool _ExtractSensor(SensorBasePtr& psensor, daeElementRef instance_sensor) -// { -// if( !instance_sensor ) { -// return false; -// } -// if( instance_sensor->hasAttribute("url") ) { -// ROS_WARN_STREAM("instance_sensor has no url\n"); -// return false; -// } -// -// std::string instance_id = instance_sensor->getAttribute("id"); -// std::string instance_url = instance_sensor->getAttribute("url"); -// daeElementRef domsensor = _getElementFromUrl(daeURI(*instance_sensor,instance_url)); -// if( !domsensor ) { -// ROS_WARN_STREAM(str(boost::format("failed to find senor id %s url=%s\n")%instance_id%instance_url)); -// return false; -// } -// if( !domsensor->hasAttribute("type") ) { -// ROS_WARN_STREAM("collada needs type attribute\n"); -// return false; -// } -// psensor = RaveCreateSensor(_penv, domsensor->getAttribute("type")); -// if( !psensor ) { -// return false; -// } -// -// // Create the custom XML reader to read in the data (determined by users) -// BaseXMLReaderPtr pcurreader = RaveCallXMLReader(PT_Sensor,psensor->GetXMLId(),psensor, std::list >()); -// if( !pcurreader ) { -// pcurreader.reset(); -// return false; -// } -// _ProcessXMLReader(pcurreader,domsensor); -// psensor->__mapReadableInterfaces[psensor->GetXMLId()] = pcurreader->GetReadable(); -// if( !psensor->Init(instance_sensor->getAttribute("args")) ) { -// ROS_WARN_STREAM(str(boost::format("failed to initialize sensor %s\n"))); -// psensor.reset(); -// } -// return true; -// } - - /// \brief feed the collada data into the base readers xml class -// static void _ProcessXMLReader(BaseXMLReaderPtr preader, daeElementRef elt) -// { -// daeTArray children; -// elt->getChildren(children); -// std::list > atts; -// for (size_t i = 0; i < children.getCount(); i++) { -// std::string xmltag = tolowerstring(children[i]->getElementName()); -// daeTArray domatts; -// children[i]->getAttributes(domatts); -// atts.clear(); -// for(size_t j = 0; j < domatts.getCount(); ++j) { -// atts.push_back(std::make_pair(domatts[j].name,domatts[j].value)); -// } -// preader->startElement(xmltag,atts); -// _ProcessXMLReader(preader,children[i]); -// preader->characters(children[i]->getCharData()); -// preader->endElement(xmltag); -// } -// } - - inline daeElementRef _getElementFromUrl(const daeURI &uri) - { - return daeStandardURIResolver(*_collada).resolveElement(uri); - } - - static daeElement* searchBinding(domCommon_sidref_or_paramRef paddr, daeElementRef parent) - { - if( !!paddr->getSIDREF() ) { - return daeSidRef(paddr->getSIDREF()->getValue(),parent).resolve().elt; - } - if (!!paddr->getParam()) { - return searchBinding(paddr->getParam()->getValue(),parent); - } - return NULL; - } - - /// Search a given parameter reference and stores the new reference to search. - /// \param ref the reference name to search - /// \param parent The array of parameter where the method searchs. - static daeElement* searchBinding(daeString ref, daeElementRef parent) - { - if( !parent ) { - return NULL; - } - daeElement* pelt = NULL; - domKinematics_sceneRef kscene = daeSafeCast(parent.cast()); - if( !!kscene ) { - pelt = searchBindingArray(ref,kscene->getInstance_articulated_system_array()); - if( !!pelt ) { - return pelt; - } - return searchBindingArray(ref,kscene->getInstance_kinematics_model_array()); - } - domArticulated_systemRef articulated_system = daeSafeCast(parent.cast()); - if( !!articulated_system ) { - if( !!articulated_system->getKinematics() ) { - pelt = searchBindingArray(ref,articulated_system->getKinematics()->getInstance_kinematics_model_array()); - if( !!pelt ) { - return pelt; - } - } - if( !!articulated_system->getMotion() ) { - return searchBinding(ref,articulated_system->getMotion()->getInstance_articulated_system()); - } - return NULL; - } - // try to get a bind array - daeElementRef pbindelt; - const domKinematics_bind_Array* pbindarray = NULL; - const domKinematics_newparam_Array* pnewparamarray = NULL; - domInstance_articulated_systemRef ias = daeSafeCast(parent.cast()); - if( !!ias ) { - pbindarray = &ias->getBind_array(); - pbindelt = ias->getUrl().getElement(); - pnewparamarray = &ias->getNewparam_array(); - } - if( !pbindarray || !pbindelt ) { - domInstance_kinematics_modelRef ikm = daeSafeCast(parent.cast()); - if( !!ikm ) { - pbindarray = &ikm->getBind_array(); - pbindelt = ikm->getUrl().getElement(); - pnewparamarray = &ikm->getNewparam_array(); - } - } - if( !!pbindarray && !!pbindelt ) { - for (size_t ibind = 0; ibind < pbindarray->getCount(); ++ibind) { - domKinematics_bindRef pbind = (*pbindarray)[ibind]; - if( !!pbind->getSymbol() && strcmp(pbind->getSymbol(), ref) == 0 ) { - // found a match - if( !!pbind->getParam() ) { - return searchBinding(pbind->getParam()->getRef(), pbindelt); - } - else if( !!pbind->getSIDREF() ) { - return daeSidRef(pbind->getSIDREF()->getValue(), pbindelt).resolve().elt; - } - } - } - for(size_t inewparam = 0; inewparam < pnewparamarray->getCount(); ++inewparam) { - domKinematics_newparamRef newparam = (*pnewparamarray)[inewparam]; - if( !!newparam->getSid() && strcmp(newparam->getSid(), ref) == 0 ) { - if( !!newparam->getSIDREF() ) { // can only bind with SIDREF - return daeSidRef(newparam->getSIDREF()->getValue(),pbindelt).resolve().elt; - } - ROS_WARN_STREAM(str(boost::format("newparam sid=%s does not have SIDREF\n")%newparam->getSid())); - } - } - } - ROS_WARN_STREAM(str(boost::format("failed to get binding '%s' for element: %s\n")%ref%parent->getElementName())); - return NULL; - } - - static daeElement* searchBindingArray(daeString ref, const domInstance_articulated_system_Array& paramArray) - { - for(size_t iikm = 0; iikm < paramArray.getCount(); ++iikm) { - daeElement* pelt = searchBinding(ref,paramArray[iikm].cast()); - if( !!pelt ) { - return pelt; - } - } - return NULL; - } - - static daeElement* searchBindingArray(daeString ref, const domInstance_kinematics_model_Array& paramArray) - { - for(size_t iikm = 0; iikm < paramArray.getCount(); ++iikm) { - daeElement* pelt = searchBinding(ref,paramArray[iikm].cast()); - if( !!pelt ) { - return pelt; - } - } - return NULL; - } - - template static xsBoolean resolveBool(domCommon_bool_or_paramRef paddr, const U& parent) { - if( !!paddr->getBool() ) { - return paddr->getBool()->getValue(); - } - if( !paddr->getParam() ) { - ROS_WARN_STREAM("param not specified, setting to 0\n"); - return false; - } - for(size_t iparam = 0; iparam < parent->getNewparam_array().getCount(); ++iparam) { - domKinematics_newparamRef pnewparam = parent->getNewparam_array()[iparam]; - if( !!pnewparam->getSid() && strcmp(pnewparam->getSid(), paddr->getParam()->getValue()) == 0 ) { - if( !!pnewparam->getBool() ) { - return pnewparam->getBool()->getValue(); - } - else if( !!pnewparam->getSIDREF() ) { - domKinematics_newparam::domBoolRef ptarget = daeSafeCast(daeSidRef(pnewparam->getSIDREF()->getValue(), pnewparam).resolve().elt); - if( !ptarget ) { - ROS_WARN("failed to resolve %s from %s\n", pnewparam->getSIDREF()->getValue(), paddr->getID()); - continue; - } - return ptarget->getValue(); - } - } - } - ROS_WARN_STREAM(str(boost::format("failed to resolve %s\n")%paddr->getParam()->getValue())); - return false; - } - template static domFloat resolveFloat(domCommon_float_or_paramRef paddr, const U& parent) { - if( !!paddr->getFloat() ) { - return paddr->getFloat()->getValue(); - } - if( !paddr->getParam() ) { - ROS_WARN_STREAM("param not specified, setting to 0\n"); - return 0; - } - for(size_t iparam = 0; iparam < parent->getNewparam_array().getCount(); ++iparam) { - domKinematics_newparamRef pnewparam = parent->getNewparam_array()[iparam]; - if( !!pnewparam->getSid() && strcmp(pnewparam->getSid(), paddr->getParam()->getValue()) == 0 ) { - if( !!pnewparam->getFloat() ) { - return pnewparam->getFloat()->getValue(); - } - else if( !!pnewparam->getSIDREF() ) { - domKinematics_newparam::domFloatRef ptarget = daeSafeCast(daeSidRef(pnewparam->getSIDREF()->getValue(), pnewparam).resolve().elt); - if( !ptarget ) { - ROS_WARN("failed to resolve %s from %s\n", pnewparam->getSIDREF()->getValue(), paddr->getID()); - continue; - } - return ptarget->getValue(); - } - } - } - ROS_WARN_STREAM(str(boost::format("failed to resolve %s\n")%paddr->getParam()->getValue())); - return 0; - } - - static bool resolveCommon_float_or_param(daeElementRef pcommon, daeElementRef parent, float& f) - { - daeElement* pfloat = pcommon->getChild("float"); - if( !!pfloat ) { - std::stringstream sfloat(pfloat->getCharData()); - sfloat >> f; - return !!sfloat; - } - daeElement* pparam = pcommon->getChild("param"); - if( !!pparam ) { - if( pparam->hasAttribute("ref") ) { - ROS_WARN_STREAM("cannot process param ref\n"); - } - else { - daeElement* pelt = daeSidRef(pparam->getCharData(),parent).resolve().elt; - if( !!pelt ) { - ROS_WARN_STREAM(str(boost::format("found param ref: %s from %s\n")%pelt->getCharData()%pparam->getCharData())); - } - } - } - return false; - } - - static boost::array _matrixIdentity() - { - boost::array m = {{1,0,0,0,0,1,0,0,0,0,1,0}}; - return m; - }; - - /// Gets all transformations applied to the node - static boost::array _getTransform(daeElementRef pelt) - { - boost::array m = _matrixIdentity(); - domRotateRef protate = daeSafeCast(pelt); - if( !!protate ) { - m = _matrixFromAxisAngle(Vector3(protate->getValue()[0],protate->getValue()[1],protate->getValue()[2]), (double)(protate->getValue()[3]*(M_PI/180.0))); - return m; - } - - domTranslateRef ptrans = daeSafeCast(pelt); - if( !!ptrans ) { - double scale = _GetUnitScale(pelt); - m[3] = ptrans->getValue()[0]*scale; - m[7] = ptrans->getValue()[1]*scale; - m[11] = ptrans->getValue()[2]*scale; - return m; - } - - domMatrixRef pmat = daeSafeCast(pelt); - if( !!pmat ) { - double scale = _GetUnitScale(pelt); - for(int i = 0; i < 3; ++i) { - m[4*i+0] = pmat->getValue()[4*i+0]; - m[4*i+1] = pmat->getValue()[4*i+1]; - m[4*i+2] = pmat->getValue()[4*i+2]; - m[4*i+3] = pmat->getValue()[4*i+3]*scale; - } - return m; - } - - domScaleRef pscale = daeSafeCast(pelt); - if( !!pscale ) { - m[0] = pscale->getValue()[0]; - m[4*1+1] = pscale->getValue()[1]; - m[4*2+2] = pscale->getValue()[2]; - return m; - } - - domLookatRef pcamera = daeSafeCast(pelt); - if( pelt->typeID() == domLookat::ID() ) { - ROS_ERROR_STREAM("look at transform not implemented\n"); - return m; - } - - domSkewRef pskew = daeSafeCast(pelt); - if( !!pskew ) { - ROS_ERROR_STREAM("skew transform not implemented\n"); - } - - return m; - } - - /// Travels recursively the node parents of the given one - /// to extract the Transform arrays that affects the node given - template static boost::array _getNodeParentTransform(const T pelt) { - domNodeRef pnode = daeSafeCast(pelt->getParent()); - if( !pnode ) { - return _matrixIdentity(); - } - return _poseMult(_getNodeParentTransform(pnode), _ExtractFullTransform(pnode)); - } - - /// \brief Travel by the transformation array and calls the _getTransform method - template static boost::array _ExtractFullTransform(const T pelt) { - boost::array t = _matrixIdentity(); - for(size_t i = 0; i < pelt->getContents().getCount(); ++i) { - t = _poseMult(t, _getTransform(pelt->getContents()[i])); - } - return t; - } - - /// \brief Travel by the transformation array and calls the _getTransform method - template static boost::array _ExtractFullTransformFromChildren(const T pelt) { - boost::array t = _matrixIdentity(); - daeTArray children; pelt->getChildren(children); - for(size_t i = 0; i < children.getCount(); ++i) { - t = _poseMult(t, _getTransform(children[i])); - } - return t; - } - - // decompose a matrix into a scale and rigid transform (necessary for model scales) - void _decompose(const boost::array& tm, Pose& tout, Vector3& vscale) - { - vscale.x = 1; vscale.y = 1; vscale.z = 1; - tout = _poseFromMatrix(tm); - } - - virtual void handleError( daeString msg ) - { - ROS_ERROR("COLLADA error: %s\n", msg); - } - - virtual void handleWarning( daeString msg ) - { - ROS_WARN("COLLADA warning: %s\n", msg); - } - - inline static double _GetUnitScale(daeElement* pelt) - { - return ((USERDATA*)pelt->getUserData())->scale; - } - - domTechniqueRef _ExtractOpenRAVEProfile(const domTechnique_Array& arr) - { - for(size_t i = 0; i < arr.getCount(); ++i) { - if( strcmp(arr[i]->getProfile(), "OpenRAVE") == 0 ) { - return arr[i]; - } - } - return domTechniqueRef(); - } - - /// \brief returns an openrave interface type from the extra array - boost::shared_ptr _ExtractInterfaceType(const domExtra_Array& arr) { - for(size_t i = 0; i < arr.getCount(); ++i) { - if( strcmp(arr[i]->getType(),"interface_type") == 0 ) { - domTechniqueRef tec = _ExtractOpenRAVEProfile(arr[i]->getTechnique_array()); - if( !!tec ) { - daeElement* ptype = tec->getChild("interface"); - if( !!ptype ) { - return boost::shared_ptr(new std::string(ptype->getCharData())); - } - } - } - } - return boost::shared_ptr(); - } - - std::string _ExtractLinkName(domLinkRef pdomlink) { - std::string linkname; - if( !!pdomlink ) { - if( !!pdomlink->getName() ) { - linkname = pdomlink->getName(); - } - if( linkname.size() == 0 && !!pdomlink->getID() ) { - linkname = pdomlink->getID(); - } - } - return linkname; - } - - bool _checkMathML(daeElementRef pelt,const std::string& type) - { - if( pelt->getElementName()==type ) { - return true; - } - // check the substring after ':' - std::string name = pelt->getElementName(); - std::size_t pos = name.find_last_of(':'); - if( pos == std::string::npos ) { - return false; - } - return name.substr(pos+1)==type; - } - - boost::shared_ptr _getJointFromRef(xsToken targetref, daeElementRef peltref) { - daeElement* peltjoint = daeSidRef(targetref, peltref).resolve().elt; - domJointRef pdomjoint = daeSafeCast (peltjoint); - - if (!pdomjoint) { - domInstance_jointRef pdomijoint = daeSafeCast (peltjoint); - if (!!pdomijoint) { - pdomjoint = daeSafeCast (pdomijoint->getUrl().getElement().cast()); - } - } - - if (!pdomjoint || pdomjoint->typeID() != domJoint::ID() || !pdomjoint->getName()) { - ROS_WARN_STREAM(str(boost::format("could not find collada joint %s!\n")%targetref)); - return boost::shared_ptr(); - } - - boost::shared_ptr pjoint = _model.joints_[std::string(pdomjoint->getName())]; - if(!pjoint) { - ROS_WARN_STREAM(str(boost::format("could not find openrave joint %s!\n")%pdomjoint->getName())); - } - return pjoint; - } - - /// \brief go through all kinematics binds to get a kinematics/visual pair - /// \param kiscene instance of one kinematics scene, binds the kinematic and visual models - /// \param bindings the extracted bindings - static void _ExtractKinematicsVisualBindings(domInstance_with_extraRef viscene, domInstance_kinematics_sceneRef kiscene, KinematicsSceneBindings& bindings) - { - domKinematics_sceneRef kscene = daeSafeCast (kiscene->getUrl().getElement().cast()); - if (!kscene) { - return; - } - for (size_t imodel = 0; imodel < kiscene->getBind_kinematics_model_array().getCount(); imodel++) { - domArticulated_systemRef articulated_system; // if filled, contains robot-specific information, so create a robot - domBind_kinematics_modelRef kbindmodel = kiscene->getBind_kinematics_model_array()[imodel]; - if (!kbindmodel->getNode()) { - ROS_WARN_STREAM("do not support kinematics models without references to nodes\n"); - continue; - } - - // visual information - domNodeRef node = daeSafeCast(daeSidRef(kbindmodel->getNode(), viscene->getUrl().getElement()).resolve().elt); - if (!node) { - ROS_WARN_STREAM(str(boost::format("bind_kinematics_model does not reference valid node %s\n")%kbindmodel->getNode())); - continue; - } - - // kinematics information - daeElement* pelt = searchBinding(kbindmodel,kscene); - domInstance_kinematics_modelRef kimodel = daeSafeCast(pelt); - if (!kimodel) { - if( !pelt ) { - ROS_WARN_STREAM("bind_kinematics_model does not reference element\n"); - } - else { - ROS_WARN_STREAM(str(boost::format("bind_kinematics_model cannot find reference to %s%s:\n")%pelt->getElementName())); - } - continue; - } - bindings.listKinematicsVisualBindings.push_back(std::make_pair(node,kimodel)); - } - // axis info - for (size_t ijoint = 0; ijoint < kiscene->getBind_joint_axis_array().getCount(); ++ijoint) { - domBind_joint_axisRef bindjoint = kiscene->getBind_joint_axis_array()[ijoint]; - daeElementRef pjtarget = daeSidRef(bindjoint->getTarget(), viscene->getUrl().getElement()).resolve().elt; - if (!pjtarget) { - ROS_ERROR_STREAM(str(boost::format("Target Node %s NOT found!!!\n")%bindjoint->getTarget())); - continue; - } - daeElement* pelt = searchBinding(bindjoint->getAxis(),kscene); - domAxis_constraintRef pjointaxis = daeSafeCast(pelt); - if (!pjointaxis) { - continue; - } - bindings.listAxisBindings.push_back(JointAxisBinding(pjtarget, pjointaxis, bindjoint->getValue(), NULL, NULL)); - } - } - - size_t _countChildren(daeElement* pelt) { - size_t c = 1; - daeTArray children; - pelt->getChildren(children); - for (size_t i = 0; i < children.getCount(); ++i) { - c += _countChildren(children[i]); - } - return c; - } - - void _processUserData(daeElement* pelt, double scale) - { - // getChild could be optimized since asset tag is supposed to appear as the first element - domAssetRef passet = daeSafeCast (pelt->getChild("asset")); - if (!!passet && !!passet->getUnit()) { - scale = passet->getUnit()->getMeter(); - } - - _vuserdata.push_back(USERDATA(scale)); - pelt->setUserData(&_vuserdata.back()); - daeTArray children; - pelt->getChildren(children); - for (size_t i = 0; i < children.getCount(); ++i) { - if (children[i] != passet) { - _processUserData(children[i], scale); - } - } - } - - USERDATA* _getUserData(daeElement* pelt) - { - BOOST_ASSERT(!!pelt); - void* p = pelt->getUserData(); - BOOST_ASSERT(!!p); - return (USERDATA*)p; - } - - // - // openrave math functions (from geometry.h) - // - - static Vector3 _poseMult(const Pose& p, const Vector3& v) - { - double ww = 2 * p.rotation.x * p.rotation.x; - double wx = 2 * p.rotation.x * p.rotation.y; - double wy = 2 * p.rotation.x * p.rotation.z; - double wz = 2 * p.rotation.x * p.rotation.w; - double xx = 2 * p.rotation.y * p.rotation.y; - double xy = 2 * p.rotation.y * p.rotation.z; - double xz = 2 * p.rotation.y * p.rotation.w; - double yy = 2 * p.rotation.z * p.rotation.z; - double yz = 2 * p.rotation.z * p.rotation.w; - Vector3 vnew; - vnew.x = (1-xx-yy) * v.x + (wx-yz) * v.y + (wy+xz)*v.z + p.position.x; - vnew.y = (wx+yz) * v.x + (1-ww-yy) * v.y + (xy-wz)*v.z + p.position.y; - vnew.z = (wy-xz) * v.x + (xy+wz) * v.y + (1-ww-xx)*v.z + p.position.z; - return vnew; - } - - static Vector3 _poseMult(const boost::array& m, const Vector3& v) - { - Vector3 vnew; - vnew.x = m[4*0+0] * v.x + m[4*0+1] * v.y + m[4*0+2] * v.z + m[4*0+3]; - vnew.y = m[4*1+0] * v.x + m[4*1+1] * v.y + m[4*1+2] * v.z + m[4*1+3]; - vnew.z = m[4*2+0] * v.x + m[4*2+1] * v.y + m[4*2+2] * v.z + m[4*2+3]; - return vnew; - } - - static boost::array _poseMult(const boost::array& m0, const boost::array& m1) - { - boost::array mres; - mres[0*4+0] = m0[0*4+0]*m1[0*4+0]+m0[0*4+1]*m1[1*4+0]+m0[0*4+2]*m1[2*4+0]; - mres[0*4+1] = m0[0*4+0]*m1[0*4+1]+m0[0*4+1]*m1[1*4+1]+m0[0*4+2]*m1[2*4+1]; - mres[0*4+2] = m0[0*4+0]*m1[0*4+2]+m0[0*4+1]*m1[1*4+2]+m0[0*4+2]*m1[2*4+2]; - mres[1*4+0] = m0[1*4+0]*m1[0*4+0]+m0[1*4+1]*m1[1*4+0]+m0[1*4+2]*m1[2*4+0]; - mres[1*4+1] = m0[1*4+0]*m1[0*4+1]+m0[1*4+1]*m1[1*4+1]+m0[1*4+2]*m1[2*4+1]; - mres[1*4+2] = m0[1*4+0]*m1[0*4+2]+m0[1*4+1]*m1[1*4+2]+m0[1*4+2]*m1[2*4+2]; - mres[2*4+0] = m0[2*4+0]*m1[0*4+0]+m0[2*4+1]*m1[1*4+0]+m0[2*4+2]*m1[2*4+0]; - mres[2*4+1] = m0[2*4+0]*m1[0*4+1]+m0[2*4+1]*m1[1*4+1]+m0[2*4+2]*m1[2*4+1]; - mres[2*4+2] = m0[2*4+0]*m1[0*4+2]+m0[2*4+1]*m1[1*4+2]+m0[2*4+2]*m1[2*4+2]; - mres[3] = m1[3] * m0[0] + m1[7] * m0[1] + m1[11] * m0[2] + m0[3]; - mres[7] = m1[3] * m0[4] + m1[7] * m0[5] + m1[11] * m0[6] + m0[7]; - mres[11] = m1[3] * m0[8] + m1[7] * m0[9] + m1[11] * m0[10] + m0[11]; - return mres; - } - - static Pose _poseMult(const Pose& p0, const Pose& p1) - { - Pose p; - p.position = _poseMult(p0,p1.position); - p.rotation = _quatMult(p0.rotation,p1.rotation); - return p; - } - - static Pose _poseInverse(const Pose& p) - { - Pose pinv; - pinv.rotation.x = -p.rotation.x; - pinv.rotation.y = -p.rotation.y; - pinv.rotation.z = -p.rotation.z; - pinv.rotation.w = p.rotation.w; - Vector3 t = _poseMult(pinv,p.position); - pinv.position.x = -t.x; - pinv.position.y = -t.y; - pinv.position.z = -t.z; - return pinv; - } - - static Rotation _quatMult(const Rotation& quat0, const Rotation& quat1) - { - Rotation q; - q.x = quat0.w*quat1.x + quat0.x*quat1.w + quat0.y*quat1.z - quat0.z*quat1.y; - q.y = quat0.w*quat1.y + quat0.y*quat1.w + quat0.z*quat1.x - quat0.x*quat1.z; - q.z = quat0.w*quat1.z + quat0.z*quat1.w + quat0.x*quat1.y - quat0.y*quat1.x; - q.w = quat0.w*quat1.w - quat0.x*quat1.x - quat0.y*quat1.y - quat0.z*quat1.z; - double fnorm = std::sqrt(q.x*q.x+q.y*q.y+q.z*q.z+q.w*q.w); - // don't touch the divides - q.x /= fnorm; - q.y /= fnorm; - q.z /= fnorm; - q.w /= fnorm; - return q; - } - - static boost::array _matrixFromAxisAngle(const Vector3& axis, double angle) - { - return _matrixFromQuat(_quatFromAxisAngle(axis.x,axis.y,axis.z,angle)); - } - - static boost::array _matrixFromQuat(const Rotation& quat) - { - boost::array m; - double qq1 = 2*quat.x*quat.x; - double qq2 = 2*quat.y*quat.y; - double qq3 = 2*quat.z*quat.z; - m[4*0+0] = 1 - qq2 - qq3; - m[4*0+1] = 2*(quat.x*quat.y - quat.w*quat.z); - m[4*0+2] = 2*(quat.x*quat.z + quat.w*quat.y); - m[4*0+3] = 0; - m[4*1+0] = 2*(quat.x*quat.y + quat.w*quat.z); - m[4*1+1] = 1 - qq1 - qq3; - m[4*1+2] = 2*(quat.y*quat.z - quat.w*quat.x); - m[4*1+3] = 0; - m[4*2+0] = 2*(quat.x*quat.z - quat.w*quat.y); - m[4*2+1] = 2*(quat.y*quat.z + quat.w*quat.x); - m[4*2+2] = 1 - qq1 - qq2; - m[4*2+3] = 0; - return m; - } - - static Pose _poseFromMatrix(const boost::array& m) - { - Pose t; - t.rotation = _quatFromMatrix(m); - t.position.x = m[3]; - t.position.y = m[7]; - t.position.z = m[11]; - return t; - } - - static boost::array _matrixFromPose(const Pose& t) - { - boost::array m = _matrixFromQuat(t.rotation); - m[3] = t.position.x; - m[7] = t.position.y; - m[11] = t.position.z; - return m; - } - - static Rotation _quatFromAxisAngle(double x, double y, double z, double angle) - { - Rotation q; - double axislen = std::sqrt(x*x+y*y+z*z); - if( axislen == 0 ) { - return q; - } - angle *= 0.5; - double sang = std::sin(angle)/axislen; - q.w = std::cos(angle); - q.x = x*sang; - q.y = y*sang; - q.z = z*sang; - return q; - } - - static Rotation _quatFromMatrix(const boost::array& mat) - { - Rotation rot; - double tr = mat[4*0+0] + mat[4*1+1] + mat[4*2+2]; - if (tr >= 0) { - rot.w = tr + 1; - rot.x = (mat[4*2+1] - mat[4*1+2]); - rot.y = (mat[4*0+2] - mat[4*2+0]); - rot.z = (mat[4*1+0] - mat[4*0+1]); - } - else { - // find the largest diagonal element and jump to the appropriate case - if (mat[4*1+1] > mat[4*0+0]) { - if (mat[4*2+2] > mat[4*1+1]) { - rot.z = (mat[4*2+2] - (mat[4*0+0] + mat[4*1+1])) + 1; - rot.x = (mat[4*2+0] + mat[4*0+2]); - rot.y = (mat[4*1+2] + mat[4*2+1]); - rot.w = (mat[4*1+0] - mat[4*0+1]); - } - else { - rot.y = (mat[4*1+1] - (mat[4*2+2] + mat[4*0+0])) + 1; - rot.z = (mat[4*1+2] + mat[4*2+1]); - rot.x = (mat[4*0+1] + mat[4*1+0]); - rot.w = (mat[4*0+2] - mat[4*2+0]); - } - } - else if (mat[4*2+2] > mat[4*0+0]) { - rot.z = (mat[4*2+2] - (mat[4*0+0] + mat[4*1+1])) + 1; - rot.x = (mat[4*2+0] + mat[4*0+2]); - rot.y = (mat[4*1+2] + mat[4*2+1]); - rot.w = (mat[4*1+0] - mat[4*0+1]); - } - else { - rot.x = (mat[4*0+0] - (mat[4*1+1] + mat[4*2+2])) + 1; - rot.y = (mat[4*0+1] + mat[4*1+0]); - rot.z = (mat[4*2+0] + mat[4*0+2]); - rot.w = (mat[4*2+1] - mat[4*1+2]); - } - } - double fnorm = std::sqrt(rot.x*rot.x+rot.y*rot.y+rot.z*rot.z+rot.w*rot.w); - // don't touch the divides - rot.x /= fnorm; - rot.y /= fnorm; - rot.z /= fnorm; - rot.w /= fnorm; - return rot; - } - - static double _dot3(const Vector3& v0, const Vector3& v1) - { - return v0.x*v1.x + v0.y*v1.y + v0.z*v1.z; - } - static Vector3 _cross3(const Vector3& v0, const Vector3& v1) - { - Vector3 v; - v.x = v0.y * v1.z - v0.z * v1.y; - v.y = v0.z * v1.x - v0.x * v1.z; - v.z = v0.x * v1.y - v0.y * v1.x; - return v; - } - static Vector3 _sub3(const Vector3& v0, const Vector3& v1) - { - Vector3 v; - v.x = v0.x-v1.x; - v.y = v0.y-v1.y; - v.z = v0.z-v1.z; - return v; - } - static Vector3 _add3(const Vector3& v0, const Vector3& v1) - { - Vector3 v; - v.x = v0.x+v1.x; - v.y = v0.y+v1.y; - v.z = v0.z+v1.z; - return v; - } - static Vector3 _normalize3(const Vector3& v0) - { - Vector3 v; - double norm = std::sqrt(v0.x*v0.x+v0.y*v0.y+v0.z*v0.z); - v.x = v0.x/norm; - v.y = v0.y/norm; - v.z = v0.z/norm; - return v; - } - - boost::shared_ptr _collada; - domCOLLADA* _dom; - std::vector _vuserdata; // all userdata - int _nGlobalSensorId, _nGlobalManipulatorId; - std::string _filename; - std::string _resourcedir; - Model& _model; -}; - -bool urdfFromColladaFile(std::string const& daefilename, Model& model) -{ - ColladaModelReader reader(model); - return reader.InitFromFile(daefilename); -} - -bool urdfFromColladaData(std::string const& data, Model& model) -{ - ColladaModelReader reader(model); - return reader.InitFromData(data); -} - -bool urdfFromTiXML(TiXmlElement *robot_xml, Model& model) -{ - ColladaModelReader reader(model); - // have to convert all xml back to string (sigh..) - std::stringstream ss; - ss << *robot_xml; - return reader.InitFromData(ss.str()); -} - -bool IsColladaFile(const std::string& filename) -{ - size_t len = filename.size(); - if( len < 4 ) - return false; - return filename[len-4] == '.' && ::tolower(filename[len-3]) == 'd' && ::tolower(filename[len-2]) == 'a' && ::tolower(filename[len-1]) == 'e'; -} - -bool IsColladaData(const std::string& data) -{ - return data.find("RootElement() ) { - if( std::string("COLLADA") == xml_doc->RootElement()->ValueStr() ) { - return urdfFromTiXML(xml_doc->RootElement(),*this); - } - } - TiXmlElement *robot_xml = xml_doc->FirstChildElement("robot"); if (!robot_xml) { @@ -141,11 +120,6 @@ bool Model::initXml(TiXmlElement *robot_xml) ROS_DEBUG("Parsing robot xml"); if (!robot_xml) return false; - // necessary for COLLADA compatibility - if( std::string("COLLADA") == robot_xml->ValueStr() ) { - return urdfFromTiXML(robot_xml,*this); - } - // Get robot name const char *name = robot_xml->Attribute("name"); if (!name) @@ -324,7 +298,7 @@ bool Model::initTree(std::map &parent_link_tree) ROS_ERROR(" parent link '%s' of joint '%s' not found. The Boxturtle urdf parser used to automatically add this link for you, but this is not valid according to the URDF spec. Every link you refer to from a joint needs to be explicitly defined in the robot description. To fix this problem you can either remove this joint from your urdf file, or add \"\" to your urdf file.", parent_link_name.c_str(), joint->first.c_str(), parent_link_name.c_str() ); return false; } - + //set parent link for child link child_link->setParent(parent_link); From fa86ca0801bdd9569c7fe287654d8382c7f9f2c1 Mon Sep 17 00:00:00 2001 From: hsu Date: Wed, 1 Dec 2010 21:20:01 +0000 Subject: [PATCH 222/245] initial draft of collada to urdf parser (taken from OpenRave implementation) per ticket #4330 --- colladadom/collada-dom.patch | 22 + urdf/CMakeLists.txt | 2 +- urdf/include/urdf/model.h | 8 +- urdf/manifest.xml | 2 +- urdf/src/collada_model_reader.cpp | 2685 +++++++++++++++++++++++++++++ urdf/src/model.cpp | 28 +- 6 files changed, 2740 insertions(+), 7 deletions(-) create mode 100644 urdf/src/collada_model_reader.cpp diff --git a/colladadom/collada-dom.patch b/colladadom/collada-dom.patch index eb05cec..e28599d 100644 --- a/colladadom/collada-dom.patch +++ b/colladadom/collada-dom.patch @@ -52,3 +52,25 @@ Index: dom/make/domTest.mk ifeq ($(os),ps3) # PS3 doesn't support C++ locales, so tell boost not to use them ccFlags += -DBOOST_NO_STD_LOCALE + +--- dom/src/dae/daeSIDResolver.cpp ++++ dom/src/dae/daeSIDResolver.cpp +@@ -152,6 +152,18 @@ + list& remainingPart) { + remainingPart.clear(); + ++ // custom change for following instance urls (Rosen Diankov) ++ if ( strncmp( container->getElementName(), "instance_", 9 ) == 0 ) { ++ daeURI *uri = (daeURI*)container->getAttributeValue("url"); ++ if ( uri != NULL && uri->getElement() != NULL ) { ++ daeElement *e = findWithDots( uri->getElement(), s, profile, finder, remainingPart ); ++ if ( e != NULL ) { ++ //found it ++ return e; ++ } ++ } ++ } ++ + // First see if the whole thing resolves correctly + if (daeElement* result = finder(container, s, profile)) + return result; diff --git a/urdf/CMakeLists.txt b/urdf/CMakeLists.txt index 4dceb93..64d4b42 100644 --- a/urdf/CMakeLists.txt +++ b/urdf/CMakeLists.txt @@ -22,7 +22,7 @@ set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) rosbuild_gensrv() #common commands for building c++ executables and libraries -rosbuild_add_library(${PROJECT_NAME} src/link.cpp src/joint.cpp src/model.cpp) +rosbuild_add_library(${PROJECT_NAME} src/link.cpp src/joint.cpp src/model.cpp src/collada_model_reader.cpp) #target_link_libraries(${PROJECT_NAME} another_library) rosbuild_add_boost_directories() #rosbuild_link_boost(${PROJECT_NAME} thread) diff --git a/urdf/include/urdf/model.h b/urdf/include/urdf/model.h index 264520f..0d52895 100644 --- a/urdf/include/urdf/model.h +++ b/urdf/include/urdf/model.h @@ -46,7 +46,6 @@ namespace urdf{ - class Model { public: @@ -86,7 +85,7 @@ public: /// \brief complete list of Materials std::map > materials_; -private: +protected: void clear(); std::string name_; @@ -105,13 +104,14 @@ private: /// it's time to find the root Link bool initRoot(std::map &parent_link_tree); - +private: /// Model is restricted to a tree for now, which means there exists one root link /// typically, root link is the world(inertial). Where world is a special link /// or is the root_link_ the link attached to the world by PLANAR/FLOATING joint? /// hmm... boost::shared_ptr root_link_; - + + friend class ColladaModelReader; }; } diff --git a/urdf/manifest.xml b/urdf/manifest.xml index f0ad062..d03ca3f 100644 --- a/urdf/manifest.xml +++ b/urdf/manifest.xml @@ -12,7 +12,7 @@ - + diff --git a/urdf/src/collada_model_reader.cpp b/urdf/src/collada_model_reader.cpp new file mode 100644 index 0000000..6f03f61 --- /dev/null +++ b/urdf/src/collada_model_reader.cpp @@ -0,0 +1,2685 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2010, Rosen Diankov, Willow Garage, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redstributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the Willow Garage nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/* Author: Rosen Diankov, used OpenRAVE files for reference */ +#include "urdf/model.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#define FOREACH(it, v) for(typeof((v).begin()) it = (v).begin(); it != (v).end(); (it)++) +#define FOREACHC FOREACH + +namespace urdf{ + +class UnlinkFilename +{ +public: + UnlinkFilename(const std::string& filename) : _filename(filename) {} + virtual ~UnlinkFilename() { unlink(_filename.c_str()); } + std::string _filename; +}; +static std::list > _listTempFilenames; + +class ColladaModelReader : public daeErrorHandler +{ + + class JointAxisBinding + { + public: + JointAxisBinding(daeElementRef pvisualtrans, domAxis_constraintRef pkinematicaxis, domCommon_float_or_paramRef jointvalue, domKinematics_axis_infoRef kinematics_axis_info, domMotion_axis_infoRef motion_axis_info) : pvisualtrans(pvisualtrans), pkinematicaxis(pkinematicaxis), jointvalue(jointvalue), kinematics_axis_info(kinematics_axis_info), motion_axis_info(motion_axis_info) { + BOOST_ASSERT( !!pkinematicaxis ); + daeElement* pae = pvisualtrans->getParentElement(); + while (!!pae) { + visualnode = daeSafeCast (pae); + if (!!visualnode) { + break; + } + pae = pae->getParentElement(); + } + + if (!visualnode) { + ROS_WARN_STREAM(str(boost::format("couldn't find parent node of element id %s, sid %s\n")%pkinematicaxis->getID()%pkinematicaxis->getSid())); + } + } + + daeElementRef pvisualtrans; + domAxis_constraintRef pkinematicaxis; + domCommon_float_or_paramRef jointvalue; + domNodeRef visualnode; + domKinematics_axis_infoRef kinematics_axis_info; + domMotion_axis_infoRef motion_axis_info; + }; + + /// \brief inter-collada bindings for a kinematics scene + class KinematicsSceneBindings + { + public: + std::list< std::pair > listKinematicsVisualBindings; + std::list listAxisBindings; + + bool AddAxisInfo(const domInstance_kinematics_model_Array& arr, domKinematics_axis_infoRef kinematics_axis_info, domMotion_axis_infoRef motion_axis_info) + { + if( !kinematics_axis_info ) { + return false; + } + for(size_t ik = 0; ik < arr.getCount(); ++ik) { + daeElement* pelt = daeSidRef(kinematics_axis_info->getAxis(), arr[ik]->getUrl().getElement()).resolve().elt; + if( !!pelt ) { + // look for the correct placement + bool bfound = false; + FOREACH(itbinding,listAxisBindings) { + if( itbinding->pkinematicaxis.cast() == pelt ) { + itbinding->kinematics_axis_info = kinematics_axis_info; + if( !!motion_axis_info ) { + itbinding->motion_axis_info = motion_axis_info; + } + bfound = true; + break; + } + } + if( !bfound ) { + ROS_WARN_STREAM(str(boost::format("could not find binding for axis: %s, %s\n")%kinematics_axis_info->getAxis()%pelt->getAttribute("sid"))); + return false; + } + return true; + } + } + ROS_WARN_STREAM(str(boost::format("could not find kinematics axis target: %s\n")%kinematics_axis_info->getAxis())); + return false; + } + }; + + struct USERDATA + { + USERDATA() {} + USERDATA(double scale) : scale(scale) {} + double scale; + boost::shared_ptr p; ///< custom managed data + }; + + enum GeomType { + GeomNone = 0, + GeomBox = 1, + GeomSphere = 2, + GeomCylinder = 3, + GeomTrimesh = 4, + }; + + struct GEOMPROPERTIES + { + Pose _t; ///< local transformation of the geom primitive with respect to the link's coordinate system + Vector3 vGeomData; ///< for boxes, first 3 values are extents + ///< for sphere it is radius + ///< for cylinder, first 2 values are radius and height + ///< for trimesh, none + Color diffuseColor, ambientColor; ///< hints for how to color the meshes + std::vector vertices; + std::vector indices; + + ///< discretization value is chosen. Should be transformed by _t before rendering + GeomType type; ///< the type of geometry primitive + + + // generate a sphere triangulation starting with an icosahedron + // all triangles are oriented counter clockwise + static void GenerateSphereTriangulation(std::vector realvertices, std::vector realindices, int levels) + { + const double GTS_M_ICOSAHEDRON_X = 0.850650808352039932181540497063011072240401406; + const double GTS_M_ICOSAHEDRON_Y = 0.525731112119133606025669084847876607285497935; + const double GTS_M_ICOSAHEDRON_Z = 0; + std::vector tempvertices[2]; + std::vector tempindices[2]; + + tempvertices[0].push_back(Vector3(+GTS_M_ICOSAHEDRON_Z, +GTS_M_ICOSAHEDRON_X, -GTS_M_ICOSAHEDRON_Y)); + tempvertices[0].push_back(Vector3(+GTS_M_ICOSAHEDRON_X, +GTS_M_ICOSAHEDRON_Y, +GTS_M_ICOSAHEDRON_Z)); + tempvertices[0].push_back(Vector3(+GTS_M_ICOSAHEDRON_Y, +GTS_M_ICOSAHEDRON_Z, -GTS_M_ICOSAHEDRON_X)); + tempvertices[0].push_back(Vector3(+GTS_M_ICOSAHEDRON_Y, +GTS_M_ICOSAHEDRON_Z, +GTS_M_ICOSAHEDRON_X)); + tempvertices[0].push_back(Vector3(+GTS_M_ICOSAHEDRON_X, -GTS_M_ICOSAHEDRON_Y, +GTS_M_ICOSAHEDRON_Z)); + tempvertices[0].push_back(Vector3(+GTS_M_ICOSAHEDRON_Z, +GTS_M_ICOSAHEDRON_X, +GTS_M_ICOSAHEDRON_Y)); + tempvertices[0].push_back(Vector3(-GTS_M_ICOSAHEDRON_Y, +GTS_M_ICOSAHEDRON_Z, +GTS_M_ICOSAHEDRON_X)); + tempvertices[0].push_back(Vector3(+GTS_M_ICOSAHEDRON_Z, -GTS_M_ICOSAHEDRON_X, -GTS_M_ICOSAHEDRON_Y)); + tempvertices[0].push_back(Vector3(-GTS_M_ICOSAHEDRON_X, +GTS_M_ICOSAHEDRON_Y, +GTS_M_ICOSAHEDRON_Z)); + tempvertices[0].push_back(Vector3(-GTS_M_ICOSAHEDRON_Y, +GTS_M_ICOSAHEDRON_Z, -GTS_M_ICOSAHEDRON_X)); + tempvertices[0].push_back(Vector3(-GTS_M_ICOSAHEDRON_X, -GTS_M_ICOSAHEDRON_Y, +GTS_M_ICOSAHEDRON_Z)); + tempvertices[0].push_back(Vector3(+GTS_M_ICOSAHEDRON_Z, -GTS_M_ICOSAHEDRON_X, +GTS_M_ICOSAHEDRON_Y)); + + const int nindices=60; + int indices[nindices] = { + 0, 1, 2, + 1, 3, 4, + 3, 5, 6, + 2, 4, 7, + 5, 6, 8, + 2, 7, 9, + 0, 5, 8, + 7, 9, 10, + 0, 1, 5, + 7, 10, 11, + 1, 3, 5, + 6, 10, 11, + 3, 6, 11, + 9, 10, 8, + 3, 4, 11, + 6, 8, 10, + 4, 7, 11, + 1, 2, 4, + 0, 8, 9, + 0, 2, 9 + }; + + Vector3 v[3]; + // make sure oriented CCW + for(int i = 0; i < nindices; i += 3 ) { + v[0] = tempvertices[0][indices[i]]; + v[1] = tempvertices[0][indices[i+1]]; + v[2] = tempvertices[0][indices[i+2]]; + if( _dot3(v[0], _cross3(_sub3(v[1],v[0]),_sub3(v[2],v[0]))) < 0 ) { + std::swap(indices[i], indices[i+1]); + } + } + + tempindices[0].resize(nindices); + std::copy(&indices[0],&indices[nindices],tempindices[0].begin()); + std::vector* curvertices = &tempvertices[0], *newvertices = &tempvertices[1]; + std::vector *curindices = &tempindices[0], *newindices = &tempindices[1]; + while(levels-- > 0) { + + newvertices->resize(0); + newvertices->reserve(2*curvertices->size()); + newvertices->insert(newvertices->end(), curvertices->begin(), curvertices->end()); + newindices->resize(0); + newindices->reserve(4*curindices->size()); + + std::map< uint64_t, int > mapnewinds; + std::map< uint64_t, int >::iterator it; + + for(size_t i = 0; i < curindices->size(); i += 3) { + // for ever tri, create 3 new vertices and 4 new triangles. + v[0] = curvertices->at(curindices->at(i)); + v[1] = curvertices->at(curindices->at(i+1)); + v[2] = curvertices->at(curindices->at(i+2)); + + int inds[3]; + for(int j = 0; j < 3; ++j) { + uint64_t key = ((uint64_t)curindices->at(i+j)<<32)|(uint64_t)curindices->at(i + ((j+1)%3)); + it = mapnewinds.find(key); + + if( it == mapnewinds.end() ) { + inds[j] = mapnewinds[key] = mapnewinds[(key<<32)|(key>>32)] = (int)newvertices->size(); + newvertices->push_back(_normalize3(_add3(v[j],v[(j+1)%3 ]))); + } + else { + inds[j] = it->second; + } + } + + newindices->push_back(curindices->at(i)); newindices->push_back(inds[0]); newindices->push_back(inds[2]); + newindices->push_back(inds[0]); newindices->push_back(curindices->at(i+1)); newindices->push_back(inds[1]); + newindices->push_back(inds[2]); newindices->push_back(inds[0]); newindices->push_back(inds[1]); + newindices->push_back(inds[2]); newindices->push_back(inds[1]); newindices->push_back(curindices->at(i+2)); + } + + std::swap(newvertices,curvertices); + std::swap(newindices,curindices); + } + + realvertices = *curvertices; + realindices = *curindices; + } + + bool InitCollisionMesh(double fTessellation=1.0) + { + if( type == GeomTrimesh ) { + return true; + } + indices.clear(); + vertices.clear(); + + if( fTessellation < 0.01f ) { + fTessellation = 0.01f; + } + // start tesselating + switch(type) { + case GeomSphere: { + // log_2 (1+ tess) + GenerateSphereTriangulation(vertices,indices, 3 + (int)(logf(fTessellation) / logf(2.0f)) ); + double fRadius = vGeomData.x; + FOREACH(it, vertices) { + it->x *= fRadius; + it->y *= fRadius; + it->z *= fRadius; + } + break; + } + case GeomBox: { + // trivial + Vector3 ex = vGeomData; + Vector3 v[8] = { Vector3(ex.x, ex.y, ex.z), + Vector3(ex.x, ex.y, -ex.z), + Vector3(ex.x, -ex.y, ex.z), + Vector3(ex.x, -ex.y, -ex.z), + Vector3(-ex.x, ex.y, ex.z), + Vector3(-ex.x, ex.y, -ex.z), + Vector3(-ex.x, -ex.y, ex.z), + Vector3(-ex.x, -ex.y, -ex.z) }; + const int nindices = 36; + int startindices[] = { + 0, 1, 2, + 1, 2, 3, + 4, 5, 6, + 5, 6, 7, + 0, 1, 4, + 1, 4, 5, + 2, 3, 6, + 3, 6, 7, + 0, 2, 4, + 2, 4, 6, + 1, 3, 5, + 3, 5, 7 + }; + + for(int i = 0; i < nindices; i += 3 ) { + Vector3 v1 = v[startindices[i]]; + Vector3 v2 = v[startindices[i+1]]; + Vector3 v3 = v[startindices[i+2]]; + if( _dot3(v1, _sub3(v2,_cross3(v1, _sub3(v3,v1)))) < 0 ) { + std::swap(indices[i], indices[i+1]); + } + } + + vertices.resize(8); + std::copy(&v[0],&v[8],vertices.begin()); + indices.resize(nindices); + std::copy(&startindices[0],&startindices[nindices],indices.begin()); + break; + } + case GeomCylinder: { + // cylinder is on y axis + double rad = vGeomData.x, len = vGeomData.y*0.5f; + + int numverts = (int)(fTessellation*24.0f) + 3; + double dtheta = 2 * M_PI / (double)numverts; + vertices.push_back(Vector3(0,0,len)); + vertices.push_back(Vector3(0,0,-len)); + vertices.push_back(Vector3(rad,0,len)); + vertices.push_back(Vector3(rad,0,-len)); + + for(int i = 0; i < numverts+1; ++i) { + double s = rad * std::sin(dtheta * (double)i); + double c = rad * std::cos(dtheta * (double)i); + + int off = (int)vertices.size(); + vertices.push_back(Vector3(c, s, len)); + vertices.push_back(Vector3(c, s, -len)); + + indices.push_back(0); indices.push_back(off); indices.push_back(off-2); + indices.push_back(1); indices.push_back(off-1); indices.push_back(off+1); + indices.push_back(off-2); indices.push_back(off); indices.push_back(off-1); + indices.push_back(off); indices.push_back(off-1); indices.push_back(off+1); + } + break; + } + default: + BOOST_ASSERT(0); + } + return true; + } + }; + + public: + ColladaModelReader(Model& model) : _dom(NULL), _nGlobalSensorId(0), _nGlobalManipulatorId(0), _model(model) { + daeErrorHandler::setErrorHandler(this); + _resourcedir = "."; + } + virtual ~ColladaModelReader() { + _vuserdata.clear(); + _collada.reset(); + DAE::cleanup(); + } + + bool InitFromFile(const std::string& filename) { + ROS_DEBUG_STREAM(str(boost::format("init COLLADA reader version: %s, namespace: %s, filename: %s\n")%COLLADA_VERSION%COLLADA_NAMESPACE%filename)); + _collada.reset(new DAE); + _dom = _collada->open(filename); + if (!_dom) { + return false; + } + _filename=filename; + + size_t maxchildren = _countChildren(_dom); + _vuserdata.resize(0); + _vuserdata.reserve(maxchildren); + + double dScale = 1.0; + _processUserData(_dom, dScale); + ROS_DEBUG_STREAM(str(boost::format("processed children: %d/%d\n")%_vuserdata.size()%maxchildren)); + return _Extract(); + } + + bool InitFromData(const std::string& pdata) { + ROS_DEBUG_STREAM(str(boost::format("init COLLADA reader version: %s, namespace: %s\n")%COLLADA_VERSION%COLLADA_NAMESPACE)); + _collada.reset(new DAE); + _dom = _collada->openFromMemory(".",pdata.c_str()); + if (!_dom) { + return false; + } + + size_t maxchildren = _countChildren(_dom); + _vuserdata.resize(0); + _vuserdata.reserve(maxchildren); + + double dScale = 1.0; + _processUserData(_dom, dScale); + ROS_DEBUG_STREAM(str(boost::format("processed children: %d/%d\n")%_vuserdata.size()%maxchildren)); + return _Extract(); + } + +protected: + + /// \extract the first possible robot in the scene + bool _Extract() + { + _model.clear(); + std::list< std::pair > > listPossibleBodies; + domCOLLADA::domSceneRef allscene = _dom->getScene(); + if( !allscene ) { + return false; + } + + // parse each instance kinematics scene, prioritize real robots + for (size_t iscene = 0; iscene < allscene->getInstance_kinematics_scene_array().getCount(); iscene++) { + domInstance_kinematics_sceneRef kiscene = allscene->getInstance_kinematics_scene_array()[iscene]; + domKinematics_sceneRef kscene = daeSafeCast (kiscene->getUrl().getElement().cast()); + if (!kscene) { + continue; + } + boost::shared_ptr bindings(new KinematicsSceneBindings()); + _ExtractKinematicsVisualBindings(allscene->getInstance_visual_scene(),kiscene,*bindings); + for(size_t ias = 0; ias < kscene->getInstance_articulated_system_array().getCount(); ++ias) { + if( _ExtractArticulatedSystem(kscene->getInstance_articulated_system_array()[ias], *bindings) ) { + _PostProcess(); + return true; + } + } + for(size_t ikmodel = 0; ikmodel < kscene->getInstance_kinematics_model_array().getCount(); ++ikmodel) { + listPossibleBodies.push_back(std::make_pair(kscene->getInstance_kinematics_model_array()[ikmodel], bindings)); + } + } + + FOREACH(it, listPossibleBodies) { + if( _ExtractKinematicsModel(it->first, *it->second) ) { + _PostProcess(); + return true; + } + } + + return false; + } + + void _PostProcess() + { + std::map parent_link_tree; + // building tree: name mapping + if (!_model.initTree(parent_link_tree)) { + ROS_ERROR("failed to build tree"); + } + + // find the root link + if (!_model.initRoot(parent_link_tree)) { + ROS_ERROR("failed to find root link"); + } + } + + /// \brief extracts an articulated system. Note that an articulated system can include other articulated systems + bool _ExtractArticulatedSystem(domInstance_articulated_systemRef ias, KinematicsSceneBindings& bindings) + { + if( !ias ) { + return false; + } + ROS_DEBUG_STREAM(str(boost::format("instance articulated system sid %s\n")%ias->getSid())); + domArticulated_systemRef articulated_system = daeSafeCast (ias->getUrl().getElement().cast()); + if( !articulated_system ) { + return false; + } + + boost::shared_ptr pinterface_type = _ExtractInterfaceType(ias->getExtra_array()); + if( !pinterface_type ) { + pinterface_type = _ExtractInterfaceType(articulated_system->getExtra_array()); + } + if( !!pinterface_type ) { + ROS_DEBUG_STREAM(str(boost::format("robot type: %s")%(*pinterface_type))); + } + + // set the name + if( _model.name_.size() == 0 && !!ias->getName() ) { + _model.name_ = ias->getName(); + } + if( _model.name_.size() == 0 && !!ias->getSid()) { + _model.name_ = ias->getSid(); + } + if( _model.name_.size() == 0 && !!articulated_system->getName() ) { + _model.name_ = articulated_system->getName(); + } + if( _model.name_.size() == 0 && !!articulated_system->getId()) { + _model.name_ = articulated_system->getId(); + } + + if( !!articulated_system->getMotion() ) { + domInstance_articulated_systemRef ias_new = articulated_system->getMotion()->getInstance_articulated_system(); + if( !!articulated_system->getMotion()->getTechnique_common() ) { + for(size_t i = 0; i < articulated_system->getMotion()->getTechnique_common()->getAxis_info_array().getCount(); ++i) { + domMotion_axis_infoRef motion_axis_info = articulated_system->getMotion()->getTechnique_common()->getAxis_info_array()[i]; + // this should point to a kinematics axis_info + domKinematics_axis_infoRef kinematics_axis_info = daeSafeCast(daeSidRef(motion_axis_info->getAxis(), ias_new->getUrl().getElement()).resolve().elt); + if( !!kinematics_axis_info ) { + // find the parent kinematics and go through all its instance kinematics models + daeElement* pparent = kinematics_axis_info->getParent(); + while(!!pparent && pparent->typeID() != domKinematics::ID()) { + pparent = pparent->getParent(); + } + BOOST_ASSERT(!!pparent); + bindings.AddAxisInfo(daeSafeCast(pparent)->getInstance_kinematics_model_array(), kinematics_axis_info, motion_axis_info); + } + else { + ROS_WARN_STREAM(str(boost::format("failed to find kinematics axis %s\n")%motion_axis_info->getAxis())); + } + } + } + if( !_ExtractArticulatedSystem(ias_new,bindings) ) { + return false; + } + } + else { + if( !articulated_system->getKinematics() ) { + ROS_WARN_STREAM(str(boost::format("collada tag empty? instance_articulated_system=%s\n")%ias->getID())); + return true; + } + + if( !!articulated_system->getKinematics()->getTechnique_common() ) { + for(size_t i = 0; i < articulated_system->getKinematics()->getTechnique_common()->getAxis_info_array().getCount(); ++i) { + bindings.AddAxisInfo(articulated_system->getKinematics()->getInstance_kinematics_model_array(), articulated_system->getKinematics()->getTechnique_common()->getAxis_info_array()[i], NULL); + } + } + + for(size_t ik = 0; ik < articulated_system->getKinematics()->getInstance_kinematics_model_array().getCount(); ++ik) { + _ExtractKinematicsModel(articulated_system->getKinematics()->getInstance_kinematics_model_array()[ik],bindings); + } + } + + _ExtractRobotManipulators(articulated_system); + _ExtractRobotAttachedSensors(articulated_system); + return true; + } + + bool _ExtractKinematicsModel(domInstance_kinematics_modelRef ikm, KinematicsSceneBindings& bindings) + { + if( !ikm ) { + return false; + } + ROS_DEBUG_STREAM(str(boost::format("instance kinematics model sid %s\n")%ikm->getSid())); + domKinematics_modelRef kmodel = daeSafeCast (ikm->getUrl().getElement().cast()); + if (!kmodel) { + ROS_WARN_STREAM(str(boost::format("%s does not reference valid kinematics\n")%ikm->getSid())); + return false; + } + domPhysics_modelRef pmodel; + boost::shared_ptr pinterface_type = _ExtractInterfaceType(ikm->getExtra_array()); + if( !pinterface_type ) { + pinterface_type = _ExtractInterfaceType(kmodel->getExtra_array()); + } + if( !!pinterface_type ) { + ROS_DEBUG_STREAM(str(boost::format("kinbody interface type: %s")%(*pinterface_type))); + } + + // find matching visual node + domNodeRef pvisualnode; + FOREACH(it, bindings.listKinematicsVisualBindings) { + if( it->second == ikm ) { + pvisualnode = it->first; + break; + } + } + if( !pvisualnode ) { + ROS_WARN_STREAM(str(boost::format("failed to find visual node for instance kinematics model %s\n")%ikm->getSid())); + return false; + } + + if( _model.name_.size() == 0 && !!ikm->getName() ) { + _model.name_ = ikm->getName(); + } + if( _model.name_.size() == 0 && !!ikm->getID() ) { + _model.name_ = ikm->getID(); + } + + if (!_ExtractKinematicsModel(kmodel, pvisualnode, pmodel, bindings.listAxisBindings)) { + ROS_WARN_STREAM(str(boost::format("failed to load kinbody from kinematics model %s\n")%kmodel->getID())); + return false; + } + return true; + } + + /// \brief append the kinematics model to the openrave kinbody + bool _ExtractKinematicsModel(domKinematics_modelRef kmodel, domNodeRef pnode, domPhysics_modelRef pmodel, const std::list& listAxisBindings) + { + std::vector vdomjoints; + ROS_DEBUG_STREAM(str(boost::format("kinematics model: %s\n")%_model.name_)); + if( !!pnode ) { + ROS_DEBUG_STREAM(str(boost::format("node name: %s\n")%pnode->getId())); + } + + // Process joint of the kinbody + domKinematics_model_techniqueRef ktec = kmodel->getTechnique_common(); + + // Store joints + for (size_t ijoint = 0; ijoint < ktec->getJoint_array().getCount(); ++ijoint) { + vdomjoints.push_back(ktec->getJoint_array()[ijoint]); + } + + // Store instances of joints + for (size_t ijoint = 0; ijoint < ktec->getInstance_joint_array().getCount(); ++ijoint) { + domJointRef pelt = daeSafeCast (ktec->getInstance_joint_array()[ijoint]->getUrl().getElement()); + if (!pelt) { + ROS_WARN_STREAM("failed to get joint from instance\n"); + } + else { + vdomjoints.push_back(pelt); + } + } + + ROS_DEBUG_STREAM(str(boost::format("Number of root links in the kmodel %d\n")%ktec->getLink_array().getCount())); + for (size_t ilink = 0; ilink < ktec->getLink_array().getCount(); ++ilink) { + _ExtractLink(ktec->getLink_array()[ilink], ilink == 0 ? pnode : domNodeRef(), Pose(), Pose(), vdomjoints, listAxisBindings); + } + + // TODO: implement mathml + for (size_t iform = 0; iform < ktec->getFormula_array().getCount(); ++iform) { + domFormulaRef pf = ktec->getFormula_array()[iform]; + if (!pf->getTarget()) { + ROS_WARN_STREAM("formula target not valid\n"); + continue; + } + + // find the target joint + boost::shared_ptr pjoint = _getJointFromRef(pf->getTarget()->getParam()->getValue(),pf); + if (!pjoint) { + continue; + } + + if (!!pf->getTechnique_common()) { + daeElementRef peltmath; + daeTArray children; + pf->getTechnique_common()->getChildren(children); + for (size_t ichild = 0; ichild < children.getCount(); ++ichild) { + daeElementRef pelt = children[ichild]; + if (_checkMathML(pelt,std::string("math")) ) { + peltmath = pelt; + } + else { + ROS_WARN_STREAM(str(boost::format("unsupported formula element: %s\n")%pelt->getElementName())); + } + } + if (!!peltmath) { + // full math xml spec not supported, only looking for ax+b pattern: + // a x b + double a = 1, b = 0; + daeElementRef psymboljoint; + BOOST_ASSERT(peltmath->getChildren().getCount()>0); + daeElementRef papplyelt = peltmath->getChildren()[0]; + BOOST_ASSERT(_checkMathML(papplyelt,"apply")); + BOOST_ASSERT(papplyelt->getChildren().getCount()>0); + if( _checkMathML(papplyelt->getChildren()[0],"plus") ) { + BOOST_ASSERT(papplyelt->getChildren().getCount()==3); + daeElementRef pa = papplyelt->getChildren()[1]; + daeElementRef pb = papplyelt->getChildren()[2]; + if( !_checkMathML(papplyelt->getChildren()[1],"apply") ) { + std::swap(pa,pb); + } + if( !_checkMathML(pa,"csymbol") ) { + BOOST_ASSERT(_checkMathML(pa,"apply")); + BOOST_ASSERT(_checkMathML(pa->getChildren()[0],"times")); + if( _checkMathML(pa->getChildren()[1],"csymbol") ) { + psymboljoint = pa->getChildren()[1]; + BOOST_ASSERT(_checkMathML(pa->getChildren()[2],"cn")); + std::stringstream ss(pa->getChildren()[2]->getCharData()); + ss >> a; + } + else { + psymboljoint = pa->getChildren()[2]; + BOOST_ASSERT(_checkMathML(pa->getChildren()[1],"cn")); + std::stringstream ss(pa->getChildren()[1]->getCharData()); + ss >> a; + } + } + else { + psymboljoint = pa; + } + BOOST_ASSERT(_checkMathML(pb,"cn")); + { + std::stringstream ss(pb->getCharData()); + ss >> b; + } + } + else if( _checkMathML(papplyelt->getChildren()[0],"minus") ) { + BOOST_ASSERT(_checkMathML(papplyelt->getChildren()[1],"csymbol")); + a = -1; + psymboljoint = papplyelt->getChildren()[1]; + } + else { + BOOST_ASSERT(_checkMathML(papplyelt->getChildren()[0],"csymbol")); + psymboljoint = papplyelt->getChildren()[0]; + } + BOOST_ASSERT(psymboljoint->hasAttribute("encoding")); + BOOST_ASSERT(psymboljoint->getAttribute("encoding")==std::string("COLLADA")); + boost::shared_ptr pbasejoint = _getJointFromRef(psymboljoint->getCharData().c_str(),pf); + if( !!pbasejoint ) { + // set the mimic properties + pjoint->mimic.reset(new JointMimic()); + pjoint->mimic->joint_name = pbasejoint->name; + pjoint->mimic->multiplier = a; + pjoint->mimic->offset = b; + ROS_DEBUG_STREAM(str(boost::format("assigning joint %s to mimic %s %f %f\n")%pjoint->name%pbasejoint->name%a%b)); + } + } + } + } + return true; + } + + /// \brief Extract Link info and add it to an existing body + boost::shared_ptr _ExtractLink(const domLinkRef pdomlink,const domNodeRef pdomnode, const Pose& tParentWorldLink, const Pose& tParentLink, const std::vector& vdomjoints, const std::list& listAxisBindings) { + // Set link name with the name of the COLLADA's Link + std::string linkname = _ExtractLinkName(pdomlink); + if( linkname.size() == 0 ) { + ROS_WARN_STREAM(" has no name or id, falling back to !\n"); + if( !!pdomnode ) { + if (!!pdomnode->getName()) { + linkname = pdomnode->getName(); + } + if( linkname.size() == 0 && !!pdomnode->getID()) { + linkname = pdomnode->getID(); + } + } + } + + boost::shared_ptr plink; + _model.getLink(linkname,plink); + if( !plink ) { + plink.reset(new Link()); + plink->name = linkname; + plink->visual.reset(new Visual()); + _model.links_.insert(std::make_pair(linkname,plink)); + } + + _getUserData(pdomlink)->p = plink; + if( !!pdomnode ) { + ROS_DEBUG_STREAM(str(boost::format("Node Id %s and Name %s\n")%pdomnode->getId()%pdomnode->getName())); + } + + std::list listGeomProperties; + if (!pdomlink) { + ROS_WARN_STREAM("Extract object NOT kinematics !!!\n"); + _ExtractGeometry(pdomnode,listGeomProperties,listAxisBindings,Pose()); + } + else { + ROS_DEBUG_STREAM(str(boost::format("Attachment link elements: %d\n")%pdomlink->getAttachment_full_array().getCount())); + Pose tlink = _poseFromMatrix(_ExtractFullTransform(pdomlink)); + plink->visual->origin = _poseMult(tParentLink, tlink); // use the kinematics coordinate system for each link +// ROS_INFO("link %s rot: %f %f %f %f",linkname.c_str(),plink->visual->origin.rotation.w, plink->visual->origin.rotation.x,plink->visual->origin.rotation.y,plink->visual->origin.rotation.z); +// ROS_INFO("link %s trans: %f %f %f",linkname.c_str(),plink->visual->origin.position.x,plink->visual->origin.position.y,plink->visual->origin.position.z); + + // Get the geometry + _ExtractGeometry(pdomnode,listGeomProperties,listAxisBindings,_poseMult(_poseMult(tParentWorldLink,tlink),plink->visual->origin)); + + ROS_DEBUG_STREAM(str(boost::format("After ExtractGeometry Attachment link elements: %d\n")%pdomlink->getAttachment_full_array().getCount())); + + // Process all atached links + for (size_t iatt = 0; iatt < pdomlink->getAttachment_full_array().getCount(); ++iatt) { + domLink::domAttachment_fullRef pattfull = pdomlink->getAttachment_full_array()[iatt]; + + // get link kinematics transformation + Pose tatt = _poseFromMatrix(_ExtractFullTransform(pattfull)); + + // process attached links + daeElement* peltjoint = daeSidRef(pattfull->getJoint(), pattfull).resolve().elt; + domJointRef pdomjoint = daeSafeCast (peltjoint); + + if (!pdomjoint) { + domInstance_jointRef pdomijoint = daeSafeCast (peltjoint); + if (!!pdomijoint) { + pdomjoint = daeSafeCast (pdomijoint->getUrl().getElement().cast()); + } + } + + if (!pdomjoint || pdomjoint->typeID() != domJoint::ID()) { + ROS_WARN_STREAM(str(boost::format("could not find attached joint %s!\n")%pattfull->getJoint())); + return boost::shared_ptr(); + } + + // get direct child link + if (!pattfull->getLink()) { + ROS_WARN_STREAM(str(boost::format("joint %s needs to be attached to a valid link\n")%pdomjoint->getID())); + continue; + } + + // find the correct joint in the bindings + daeTArray vdomaxes = pdomjoint->getChildrenByType(); + domNodeRef pchildnode; + + // see if joint has a binding to a visual node + FOREACHC(itaxisbinding,listAxisBindings) { + for (size_t ic = 0; ic < vdomaxes.getCount(); ++ic) { + // If the binding for the joint axis is found, retrieve the info + if (vdomaxes[ic] == itaxisbinding->pkinematicaxis) { + pchildnode = itaxisbinding->visualnode; + break; + } + } + if( !!pchildnode ) { + break; + } + } + if (!pchildnode) { + ROS_DEBUG_STREAM(str(boost::format("joint %s has no visual binding\n")%pdomjoint->getID())); + } + + // create the joints before creating the child links + std::vector > vjoints(vdomaxes.getCount()); + for (size_t ic = 0; ic < vdomaxes.getCount(); ++ic) { + bool joint_active = true; // if not active, put into the passive list + FOREACHC(itaxisbinding,listAxisBindings) { + if (vdomaxes[ic] == itaxisbinding->pkinematicaxis) { + if( !!itaxisbinding->kinematics_axis_info ) { + if( !!itaxisbinding->kinematics_axis_info->getActive() ) { + joint_active = resolveBool(itaxisbinding->kinematics_axis_info->getActive(),itaxisbinding->kinematics_axis_info); + } + } + break; + } + } + + boost::shared_ptr pjoint(new Joint()); + pjoint->limits.reset(new JointLimits()); + pjoint->parent_link_name = plink->name; + + if( !!pdomjoint->getName() ) { + pjoint->name = pdomjoint->getName(); + } + else { + pjoint->name = str(boost::format("dummy%d")%_model.joints_.size()); + } + + if( !joint_active ) { + ROS_INFO_STREAM(str(boost::format("joint %s is passive, but adding to hierarchy\n")%pjoint->name)); + } + + domAxis_constraintRef pdomaxis = vdomaxes[ic]; + if( strcmp(pdomaxis->getElementName(), "revolute") == 0 ) { + pjoint->type = Joint::REVOLUTE; + } + else if( strcmp(pdomaxis->getElementName(), "prismatic") == 0 ) { + pjoint->type = Joint::PRISMATIC; + } + else { + ROS_WARN_STREAM(str(boost::format("unsupported joint type: %s\n")%pdomaxis->getElementName())); + } + + _getUserData(pdomjoint)->p = pjoint; + _getUserData(pdomaxis)->p = boost::shared_ptr(new int(_model.joints_.size())); + _model.joints_[pjoint->name] = pjoint; + vjoints[ic] = pjoint; + } + + boost::shared_ptr pchildlink = _ExtractLink(pattfull->getLink(), pchildnode, _poseMult(_poseMult(tParentWorldLink,tlink), tatt), tatt, vdomjoints, listAxisBindings); + + if (!pchildlink) { + ROS_WARN_STREAM(str(boost::format("Link has no child: %s\n")%plink->name)); + continue; + } + + int numjoints = 0; + for (size_t ic = 0; ic < vdomaxes.getCount(); ++ic) { + domKinematics_axis_infoRef kinematics_axis_info; + domMotion_axis_infoRef motion_axis_info; + FOREACHC(itaxisbinding,listAxisBindings) { + bool bfound = false; + if (vdomaxes[ic] == itaxisbinding->pkinematicaxis) { + kinematics_axis_info = itaxisbinding->kinematics_axis_info; + motion_axis_info = itaxisbinding->motion_axis_info; + bfound = true; + break; + } + } + domAxis_constraintRef pdomaxis = vdomaxes[ic]; + if (!pchildlink) { + // create dummy child link + // multiple axes can be easily done with "empty links" + ROS_WARN_STREAM(str(boost::format("creating dummy link %s, num joints %d\n")%plink->name%numjoints)); + + std::stringstream ss; + ss << plink->name; + ss <<"_dummy" << numjoints; + pchildlink.reset(new Link()); + pchildlink->name = ss.str(); + _model.links_.insert(std::make_pair(pchildlink->name,pchildlink)); + } + + ROS_DEBUG_STREAM(str(boost::format("Joint %s assigned %d \n")%vjoints[ic]->name%ic)); + boost::shared_ptr pjoint = vjoints[ic]; + pjoint->child_link_name = pchildlink->name; + + // Axes and Anchor assignment. + pjoint->axis.x = pdomaxis->getAxis()->getValue()[0]; + pjoint->axis.y = pdomaxis->getAxis()->getValue()[1]; + pjoint->axis.z = pdomaxis->getAxis()->getValue()[2]; + + if (!motion_axis_info) { + ROS_WARN_STREAM(str(boost::format("No motion axis info for joint %s\n")%pjoint->name)); + } + + // Sets the Speed and the Acceleration of the joint + if (!!motion_axis_info) { + if (!!motion_axis_info->getSpeed()) { + pjoint->limits->velocity = resolveFloat(motion_axis_info->getSpeed(),motion_axis_info); + ROS_DEBUG("... Joint Speed: %f...\n",pjoint->limits->velocity); + } + if (!!motion_axis_info->getAcceleration()) { + pjoint->limits->effort = resolveFloat(motion_axis_info->getAcceleration(),motion_axis_info); + ROS_DEBUG("... Joint effort: %f...\n",pjoint->limits->effort); + } + } + + bool joint_locked = false; // if locked, joint angle is static + bool kinematics_limits = false; + + if (!!kinematics_axis_info) { + if (!!kinematics_axis_info->getLocked()) { + joint_locked = resolveBool(kinematics_axis_info->getLocked(),kinematics_axis_info); + } + + if (joint_locked) { // If joint is locked set limits to the static value. + if( pjoint->type == Joint::REVOLUTE || pjoint->type ==Joint::PRISMATIC) { + ROS_WARN_STREAM("lock joint!!\n"); + pjoint->limits->lower = 0; + pjoint->limits->upper = 0; + } + } + else if (kinematics_axis_info->getLimits()) { // If there are articulated system kinematics limits + kinematics_limits = true; + double fscale = (pjoint->type == Joint::REVOLUTE)?(M_PI/180.0f):_GetUnitScale(kinematics_axis_info); + if( pjoint->type == Joint::REVOLUTE || pjoint->type ==Joint::PRISMATIC) { + pjoint->limits->lower = fscale*(double)(resolveFloat(kinematics_axis_info->getLimits()->getMin(),kinematics_axis_info)); + pjoint->limits->upper = fscale*(double)(resolveFloat(kinematics_axis_info->getLimits()->getMax(),kinematics_axis_info)); + } + } + } + + // Search limits in the joints section + if (!kinematics_axis_info || (!joint_locked && !kinematics_limits)) { + // If there are NO LIMITS + if( !pdomaxis->getLimits() ) { + ROS_DEBUG_STREAM(str(boost::format("There are NO LIMITS in joint %s:%d ...\n")%pjoint->name%kinematics_limits)); + if( pjoint->type == Joint::REVOLUTE ) { + pjoint->type = Joint::CONTINUOUS; // continuous means revolute? + pjoint->limits->lower = -M_PI; + pjoint->limits->upper = M_PI; + } + else { + pjoint->limits->lower = -100000; + pjoint->limits->upper = 100000; + } + } + else { + ROS_DEBUG_STREAM(str(boost::format("There are LIMITS in joint %s ...\n")%pjoint->name)); + double fscale = (pjoint->type == Joint::REVOLUTE)?(M_PI/180.0f):_GetUnitScale(pdomaxis); + pjoint->limits->lower = (double)pdomaxis->getLimits()->getMin()->getValue()*fscale; + pjoint->limits->upper = (double)pdomaxis->getLimits()->getMax()->getValue()*fscale; + } + } + + //ROS_INFO("joint %s axis: %f %f %f",pjoint->name.c_str(),pjoint->axis.x,pjoint->axis.y,pjoint->axis.z); + pjoint->parent_to_joint_origin_transform = tatt; + pjoint->limits->velocity = pjoint->type == Joint::PRISMATIC ? 0.01 : 0.5f; + pchildlink.reset(); + ++numjoints; + } + } + } + + //pdomlink->getAttachment_start_array(); + //pdomlink->getAttachment_end_array(); + + plink->visual->geometry = _CreateGeometry(plink->name, listGeomProperties); + return plink; + } + + boost::shared_ptr _CreateGeometry(const std::string& name, const std::list& listGeomProperties) + { + boost::shared_ptr geometry(new Mesh()); + geometry->type = Geometry::MESH; + geometry->scale.x = 1; + geometry->scale.y = 1; + geometry->scale.z = 1; + + std::vector vertices; + std::vector indices; + FOREACHC(it, listGeomProperties) { + int voffset = vertices.size(), ioffset = indices.size(); + vertices.resize(vertices.size()+it->vertices.size()); + for(size_t i = 0; i < it->vertices.size(); ++i) { + vertices[voffset+i] = _poseMult(it->_t, it->vertices[i]); + } + indices.resize(indices.size()+it->indices.size()); + for(size_t i = 0; i < it->indices.size(); ++i) { + indices[ioffset+i] = voffset+it->indices[i]; + } + } + + // have to save the geometry into individual collada 1.4 files since URDF does not allow triangle meshes to be specified + std::stringstream daedata; + daedata << str(boost::format("\n\ +\n\ + \n\ + \n\ + Rosen Diankov\n\ + \n\ + robot_model/urdf temporary collada geometry\n\ + \n\ + \n\ + \n\ + Z_UP\n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + 0.0 0.0 0.1 1\n\ + \n\ + \n\ + 0.8 0.8 0.8 1\n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + ")%(vertices.size()*3)); + // fill with vertices + FOREACH(it,vertices) { + daedata << it->x << " " << it->y << " " << it->z << " "; + } + daedata << str(boost::format("\n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ +

")%vertices.size()%(indices.size()/3)); + // fill with indices + FOREACH(it,indices) { + daedata << *it << " "; + } + daedata << str(boost::format("

\n\ +
\n\ +
\n\ +
\n\ +
\n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ +
")%name%name); + + //= str(boost::format("%s/models/%s.dae")%_resourcedir%name); + geometry->filename = str(boost::format("/tmp/collada_model_reader_%s_XXXXXX.dae")%name); + int fd = mkstemps(&geometry->filename[0],4); + //ROS_INFO("temp file: %s",geometry->filename.c_str()); + std::string daedatastr = daedata.str(); + if( (size_t)write(fd,daedatastr.c_str(),daedatastr.size()) != daedatastr.size() ) { + ROS_ERROR("failed to write to geometry dae file %s",geometry->filename.c_str()); + } + close(fd); + _listTempFilenames.push_back(boost::shared_ptr(new UnlinkFilename(geometry->filename))); + geometry->filename = std::string("file://") + geometry->filename; + return geometry; + } + + /// Extract Geometry and apply the transformations of the node + /// \param pdomnode Node to extract the goemetry + /// \param plink Link of the kinematics model + void _ExtractGeometry(const domNodeRef pdomnode,std::list& listGeomProperties, const std::list& listAxisBindings, const Pose& tlink) + { + if( !pdomnode ) { + return; + } + + ROS_DEBUG_STREAM(str(boost::format("ExtractGeometry(node,link) of %s\n")%pdomnode->getName())); + + // For all child nodes of pdomnode + for (size_t i = 0; i < pdomnode->getNode_array().getCount(); i++) { + // check if contains a joint + bool contains=false; + FOREACHC(it,listAxisBindings) { + // don't check ID's check if the reference is the same! + if ( (pdomnode->getNode_array()[i]) == (it->visualnode)){ + contains=true; + break; + } + } + if (contains) { + continue; + } + + _ExtractGeometry(pdomnode->getNode_array()[i],listGeomProperties, listAxisBindings,tlink); + // Plink stayes the same for all children + // replace pdomnode by child = pdomnode->getNode_array()[i] + // hope for the best! + // put everything in a subroutine in order to process pdomnode too! + } + + unsigned int nGeomBefore = listGeomProperties.size(); // #of Meshes already associated to this link + + // get the geometry + for (size_t igeom = 0; igeom < pdomnode->getInstance_geometry_array().getCount(); ++igeom) { + domInstance_geometryRef domigeom = pdomnode->getInstance_geometry_array()[igeom]; + domGeometryRef domgeom = daeSafeCast (domigeom->getUrl().getElement()); + if (!domgeom) { + continue; + } + + // Gets materials + std::map mapmaterials; + if (!!domigeom->getBind_material() && !!domigeom->getBind_material()->getTechnique_common()) { + const domInstance_material_Array& matarray = domigeom->getBind_material()->getTechnique_common()->getInstance_material_array(); + for (size_t imat = 0; imat < matarray.getCount(); ++imat) { + domMaterialRef pmat = daeSafeCast(matarray[imat]->getTarget().getElement()); + if (!!pmat) { + mapmaterials[matarray[imat]->getSymbol()] = pmat; + } + } + } + + // Gets the geometry + _ExtractGeometry(domgeom, mapmaterials, listGeomProperties); + } + + std::list::iterator itgeom= listGeomProperties.begin(); + for (unsigned int i=0; i< nGeomBefore; i++) { + itgeom++; // change only the transformations of the newly found geometries. + } + + boost::array tmnodegeom = _poseMult(_matrixFromPose(_poseInverse(tlink)), _poseMult(_getNodeParentTransform(pdomnode), _ExtractFullTransform(pdomnode))); + Pose tnodegeom; + Vector3 vscale(1,1,1); + _decompose(tmnodegeom, tnodegeom, vscale); + +// std::stringstream ss; ss << "geom: "; +// for(int i = 0; i < 4; ++i) { +// ss << tmnodegeom[4*0+i] << " " << tmnodegeom[4*1+i] << " " << tmnodegeom[4*2+i] << " "; +// } +// ROS_INFO(ss.str().c_str()); + + // Switch between different type of geometry PRIMITIVES + for (; itgeom != listGeomProperties.end(); itgeom++) { + itgeom->_t = tnodegeom; + switch (itgeom->type) { + case GeomBox: + itgeom->vGeomData.x *= vscale.x; + itgeom->vGeomData.y *= vscale.y; + itgeom->vGeomData.z *= vscale.z; + break; + case GeomSphere: { + itgeom->vGeomData.x *= std::max(vscale.z, std::max(vscale.x, vscale.y)); + break; + } + case GeomCylinder: + itgeom->vGeomData.x *= std::max(vscale.x, vscale.y); + itgeom->vGeomData.y *= vscale.z; + break; + case GeomTrimesh: + for(size_t i = 0; i < itgeom->vertices.size(); ++i ) { + itgeom->vertices[i] = _poseMult(tmnodegeom,itgeom->vertices[i]); + } + itgeom->_t = Pose(); // reset back to identity + break; + default: + ROS_WARN_STREAM(str(boost::format("unknown geometry type: %d\n")%itgeom->type)); + } + } + } + + /// Paint the Geometry with the color material + /// \param pmat Material info of the COLLADA's model + /// \param geom Geometry properties in OpenRAVE + void _FillGeometryColor(const domMaterialRef pmat, GEOMPROPERTIES& geom) + { + if( !!pmat && !!pmat->getInstance_effect() ) { + domEffectRef peffect = daeSafeCast(pmat->getInstance_effect()->getUrl().getElement().cast()); + if( !!peffect ) { + domProfile_common::domTechnique::domPhongRef pphong = daeSafeCast(peffect->getDescendant(daeElement::matchType(domProfile_common::domTechnique::domPhong::ID()))); + if( !!pphong ) { + if( !!pphong->getAmbient() && !!pphong->getAmbient()->getColor() ) { + domFx_color c = pphong->getAmbient()->getColor()->getValue(); + geom.ambientColor.r = c[0]; + geom.ambientColor.g = c[1]; + geom.ambientColor.b = c[2]; + geom.ambientColor.a = c[3]; + } + if( !!pphong->getDiffuse() && !!pphong->getDiffuse()->getColor() ) { + domFx_color c = pphong->getDiffuse()->getColor()->getValue(); + geom.diffuseColor.r = c[0]; + geom.diffuseColor.g = c[1]; + geom.diffuseColor.b = c[2]; + geom.diffuseColor.a = c[3]; + } + } + } + } + } + + /// Extract the Geometry in TRIANGLES and adds it to OpenRave + /// \param triRef Array of triangles of the COLLADA's model + /// \param vertsRef Array of vertices of the COLLADA's model + /// \param mapmaterials Materials applied to the geometry + /// \param plink Link of the kinematics model + bool _ExtractGeometry(const domTrianglesRef triRef, const domVerticesRef vertsRef, const std::map& mapmaterials, std::list& listGeomProperties) + { + if( !triRef ) { + return false; + } + listGeomProperties.push_back(GEOMPROPERTIES()); + GEOMPROPERTIES& geom = listGeomProperties.back(); + geom.type = GeomTrimesh; + + // resolve the material and assign correct colors to the geometry + if( !!triRef->getMaterial() ) { + std::map::const_iterator itmat = mapmaterials.find(triRef->getMaterial()); + if( itmat != mapmaterials.end() ) { + _FillGeometryColor(itmat->second,geom); + } + } + + size_t triangleIndexStride = 0, vertexoffset = -1; + domInput_local_offsetRef indexOffsetRef; + + for (unsigned int w=0;wgetInput_array().getCount();w++) { + size_t offset = triRef->getInput_array()[w]->getOffset(); + daeString str = triRef->getInput_array()[w]->getSemantic(); + if (!strcmp(str,"VERTEX")) { + indexOffsetRef = triRef->getInput_array()[w]; + vertexoffset = offset; + } + if (offset> triangleIndexStride) { + triangleIndexStride = offset; + } + } + triangleIndexStride++; + + const domList_of_uints& indexArray =triRef->getP()->getValue(); + geom.indices.reserve(triRef->getCount()*3); + geom.vertices.reserve(triRef->getCount()*3); + for (size_t i=0;igetInput_array().getCount();++i) { + domInput_localRef localRef = vertsRef->getInput_array()[i]; + daeString str = localRef->getSemantic(); + if ( strcmp(str,"POSITION") == 0 ) { + const domSourceRef node = daeSafeCast(localRef->getSource().getElement()); + if( !node ) { + continue; + } + double fUnitScale = _GetUnitScale(node); + const domFloat_arrayRef flArray = node->getFloat_array(); + if (!!flArray) { + const domList_of_floats& listFloats = flArray->getValue(); + int k=vertexoffset; + int vertexStride = 3;//instead of hardcoded stride, should use the 'accessor' + for(size_t itri = 0; itri < triRef->getCount(); ++itri) { + if(k+2*triangleIndexStride < indexArray.getCount() ) { + for (int j=0;j<3;j++) { + int index0 = indexArray.get(k)*vertexStride; + domFloat fl0 = listFloats.get(index0); + domFloat fl1 = listFloats.get(index0+1); + domFloat fl2 = listFloats.get(index0+2); + k+=triangleIndexStride; + geom.indices.push_back(geom.vertices.size()); + geom.vertices.push_back(Vector3(fl0*fUnitScale,fl1*fUnitScale,fl2*fUnitScale)); + } + } + } + } + else { + ROS_WARN_STREAM("float array not defined!\n"); + } + break; + } + } + if( geom.indices.size() != 3*triRef->getCount() ) { + ROS_WARN_STREAM("triangles declares wrong count!\n"); + } + geom.InitCollisionMesh(); + return true; + } + + /// Extract the Geometry in TRIGLE FANS and adds it to OpenRave + /// \param triRef Array of triangle fans of the COLLADA's model + /// \param vertsRef Array of vertices of the COLLADA's model + /// \param mapmaterials Materials applied to the geometry + bool _ExtractGeometry(const domTrifansRef triRef, const domVerticesRef vertsRef, const std::map& mapmaterials, std::list& listGeomProperties) + { + if( !triRef ) { + return false; + } + listGeomProperties.push_back(GEOMPROPERTIES()); + GEOMPROPERTIES& geom = listGeomProperties.back(); + geom.type = GeomTrimesh; + + // resolve the material and assign correct colors to the geometry + if( !!triRef->getMaterial() ) { + std::map::const_iterator itmat = mapmaterials.find(triRef->getMaterial()); + if( itmat != mapmaterials.end() ) { + _FillGeometryColor(itmat->second,geom); + } + } + + size_t triangleIndexStride = 0, vertexoffset = -1; + domInput_local_offsetRef indexOffsetRef; + + for (unsigned int w=0;wgetInput_array().getCount();w++) { + size_t offset = triRef->getInput_array()[w]->getOffset(); + daeString str = triRef->getInput_array()[w]->getSemantic(); + if (!strcmp(str,"VERTEX")) { + indexOffsetRef = triRef->getInput_array()[w]; + vertexoffset = offset; + } + if (offset> triangleIndexStride) { + triangleIndexStride = offset; + } + } + triangleIndexStride++; + size_t primitivecount = triRef->getCount(); + if( primitivecount > triRef->getP_array().getCount() ) { + ROS_WARN_STREAM("trifans has incorrect count\n"); + primitivecount = triRef->getP_array().getCount(); + } + for(size_t ip = 0; ip < primitivecount; ++ip) { + domList_of_uints indexArray =triRef->getP_array()[ip]->getValue(); + for (size_t i=0;igetInput_array().getCount();++i) { + domInput_localRef localRef = vertsRef->getInput_array()[i]; + daeString str = localRef->getSemantic(); + if ( strcmp(str,"POSITION") == 0 ) { + const domSourceRef node = daeSafeCast(localRef->getSource().getElement()); + if( !node ) { + continue; + } + double fUnitScale = _GetUnitScale(node); + const domFloat_arrayRef flArray = node->getFloat_array(); + if (!!flArray) { + const domList_of_floats& listFloats = flArray->getValue(); + int k=vertexoffset; + int vertexStride = 3;//instead of hardcoded stride, should use the 'accessor' + size_t usedindices = 3*(indexArray.getCount()-2); + if( geom.indices.capacity() < geom.indices.size()+usedindices ) { + geom.indices.reserve(geom.indices.size()+usedindices); + } + if( geom.vertices.capacity() < geom.vertices.size()+indexArray.getCount() ) { + geom.vertices.reserve(geom.vertices.size()+indexArray.getCount()); + } + size_t startoffset = (int)geom.vertices.size(); + while(k < (int)indexArray.getCount() ) { + int index0 = indexArray.get(k)*vertexStride; + domFloat fl0 = listFloats.get(index0); + domFloat fl1 = listFloats.get(index0+1); + domFloat fl2 = listFloats.get(index0+2); + k+=triangleIndexStride; + geom.vertices.push_back(Vector3(fl0*fUnitScale,fl1*fUnitScale,fl2*fUnitScale)); + } + for(size_t ivert = startoffset+2; ivert < geom.vertices.size(); ++ivert) { + geom.indices.push_back(startoffset); + geom.indices.push_back(ivert-1); + geom.indices.push_back(ivert); + } + } + else { + ROS_WARN_STREAM("float array not defined!\n"); + } + break; + } + } + } + + geom.InitCollisionMesh(); + return false; + } + + /// Extract the Geometry in TRIANGLE STRIPS and adds it to OpenRave + /// \param triRef Array of Triangle Strips of the COLLADA's model + /// \param vertsRef Array of vertices of the COLLADA's model + /// \param mapmaterials Materials applied to the geometry + bool _ExtractGeometry(const domTristripsRef triRef, const domVerticesRef vertsRef, const std::map& mapmaterials, std::list& listGeomProperties) + { + if( !triRef ) { + return false; + } + listGeomProperties.push_back(GEOMPROPERTIES()); + GEOMPROPERTIES& geom = listGeomProperties.back(); + geom.type = GeomTrimesh; + + // resolve the material and assign correct colors to the geometry + if( !!triRef->getMaterial() ) { + std::map::const_iterator itmat = mapmaterials.find(triRef->getMaterial()); + if( itmat != mapmaterials.end() ) { + _FillGeometryColor(itmat->second,geom); + } + } + size_t triangleIndexStride = 0, vertexoffset = -1; + domInput_local_offsetRef indexOffsetRef; + + for (unsigned int w=0;wgetInput_array().getCount();w++) { + size_t offset = triRef->getInput_array()[w]->getOffset(); + daeString str = triRef->getInput_array()[w]->getSemantic(); + if (!strcmp(str,"VERTEX")) { + indexOffsetRef = triRef->getInput_array()[w]; + vertexoffset = offset; + } + if (offset> triangleIndexStride) { + triangleIndexStride = offset; + } + } + triangleIndexStride++; + size_t primitivecount = triRef->getCount(); + if( primitivecount > triRef->getP_array().getCount() ) { + ROS_WARN_STREAM("tristrips has incorrect count\n"); + primitivecount = triRef->getP_array().getCount(); + } + for(size_t ip = 0; ip < primitivecount; ++ip) { + domList_of_uints indexArray = triRef->getP_array()[ip]->getValue(); + for (size_t i=0;igetInput_array().getCount();++i) { + domInput_localRef localRef = vertsRef->getInput_array()[i]; + daeString str = localRef->getSemantic(); + if ( strcmp(str,"POSITION") == 0 ) { + const domSourceRef node = daeSafeCast(localRef->getSource().getElement()); + if( !node ) { + continue; + } + double fUnitScale = _GetUnitScale(node); + const domFloat_arrayRef flArray = node->getFloat_array(); + if (!!flArray) { + const domList_of_floats& listFloats = flArray->getValue(); + int k=vertexoffset; + int vertexStride = 3;//instead of hardcoded stride, should use the 'accessor' + size_t usedindices = indexArray.getCount()-2; + if( geom.indices.capacity() < geom.indices.size()+usedindices ) { + geom.indices.reserve(geom.indices.size()+usedindices); + } + if( geom.vertices.capacity() < geom.vertices.size()+indexArray.getCount() ) { + geom.vertices.reserve(geom.vertices.size()+indexArray.getCount()); + } + + size_t startoffset = (int)geom.vertices.size(); + while(k < (int)indexArray.getCount() ) { + int index0 = indexArray.get(k)*vertexStride; + domFloat fl0 = listFloats.get(index0); + domFloat fl1 = listFloats.get(index0+1); + domFloat fl2 = listFloats.get(index0+2); + k+=triangleIndexStride; + geom.vertices.push_back(Vector3(fl0*fUnitScale,fl1*fUnitScale,fl2*fUnitScale)); + } + + bool bFlip = false; + for(size_t ivert = startoffset+2; ivert < geom.vertices.size(); ++ivert) { + geom.indices.push_back(ivert-2); + geom.indices.push_back(bFlip ? ivert : ivert-1); + geom.indices.push_back(bFlip ? ivert-1 : ivert); + bFlip = !bFlip; + } + } + else { + ROS_WARN_STREAM("float array not defined!\n"); + } + break; + } + } + } + + geom.InitCollisionMesh(); + return false; + } + + /// Extract the Geometry in TRIANGLE STRIPS and adds it to OpenRave + /// \param triRef Array of Triangle Strips of the COLLADA's model + /// \param vertsRef Array of vertices of the COLLADA's model + /// \param mapmaterials Materials applied to the geometry + bool _ExtractGeometry(const domPolylistRef triRef, const domVerticesRef vertsRef, const std::map& mapmaterials, std::list& listGeomProperties) + { + if( !triRef ) { + return false; + } + listGeomProperties.push_back(GEOMPROPERTIES()); + GEOMPROPERTIES& geom = listGeomProperties.back(); + geom.type = GeomTrimesh; + + // resolve the material and assign correct colors to the geometry + if( !!triRef->getMaterial() ) { + std::map::const_iterator itmat = mapmaterials.find(triRef->getMaterial()); + if( itmat != mapmaterials.end() ) { + _FillGeometryColor(itmat->second,geom); + } + } + + size_t triangleIndexStride = 0,vertexoffset = -1; + domInput_local_offsetRef indexOffsetRef; + for (unsigned int w=0;wgetInput_array().getCount();w++) { + size_t offset = triRef->getInput_array()[w]->getOffset(); + daeString str = triRef->getInput_array()[w]->getSemantic(); + if (!strcmp(str,"VERTEX")) { + indexOffsetRef = triRef->getInput_array()[w]; + vertexoffset = offset; + } + if (offset> triangleIndexStride) { + triangleIndexStride = offset; + } + } + triangleIndexStride++; + const domList_of_uints& indexArray =triRef->getP()->getValue(); + for (size_t i=0;igetInput_array().getCount();++i) { + domInput_localRef localRef = vertsRef->getInput_array()[i]; + daeString str = localRef->getSemantic(); + if ( strcmp(str,"POSITION") == 0 ) { + const domSourceRef node = daeSafeCast(localRef->getSource().getElement()); + if( !node ) { + continue; + } + double fUnitScale = _GetUnitScale(node); + const domFloat_arrayRef flArray = node->getFloat_array(); + if (!!flArray) { + const domList_of_floats& listFloats = flArray->getValue(); + size_t k=vertexoffset; + int vertexStride = 3;//instead of hardcoded stride, should use the 'accessor' + for(size_t ipoly = 0; ipoly < triRef->getVcount()->getValue().getCount(); ++ipoly) { + size_t numverts = triRef->getVcount()->getValue()[ipoly]; + if(numverts > 0 && k+(numverts-1)*triangleIndexStride < indexArray.getCount() ) { + size_t startoffset = geom.vertices.size(); + for (size_t j=0;j& mapmaterials, std::list& listGeomProperties) + { + if( !geom ) { + return false; + } + std::vector vconvexhull; + if (geom->getMesh()) { + const domMeshRef meshRef = geom->getMesh(); + for (size_t tg = 0;tggetTriangles_array().getCount();tg++) { + _ExtractGeometry(meshRef->getTriangles_array()[tg], meshRef->getVertices(), mapmaterials, listGeomProperties); + } + for (size_t tg = 0;tggetTrifans_array().getCount();tg++) { + _ExtractGeometry(meshRef->getTrifans_array()[tg], meshRef->getVertices(), mapmaterials, listGeomProperties); + } + for (size_t tg = 0;tggetTristrips_array().getCount();tg++) { + _ExtractGeometry(meshRef->getTristrips_array()[tg], meshRef->getVertices(), mapmaterials, listGeomProperties); + } + for (size_t tg = 0;tggetPolylist_array().getCount();tg++) { + _ExtractGeometry(meshRef->getPolylist_array()[tg], meshRef->getVertices(), mapmaterials, listGeomProperties); + } + if( meshRef->getPolygons_array().getCount()> 0 ) { + ROS_WARN_STREAM("openrave does not support collada polygons\n"); + } + + // if( alltrimesh.vertices.size() == 0 ) { + // const domVerticesRef vertsRef = meshRef->getVertices(); + // for (size_t i=0;igetInput_array().getCount();i++) { + // domInput_localRef localRef = vertsRef->getInput_array()[i]; + // daeString str = localRef->getSemantic(); + // if ( strcmp(str,"POSITION") == 0 ) { + // const domSourceRef node = daeSafeCast(localRef->getSource().getElement()); + // if( !node ) + // continue; + // double fUnitScale = _GetUnitScale(node); + // const domFloat_arrayRef flArray = node->getFloat_array(); + // if (!!flArray) { + // const domList_of_floats& listFloats = flArray->getValue(); + // int vertexStride = 3;//instead of hardcoded stride, should use the 'accessor' + // vconvexhull.reserve(vconvexhull.size()+listFloats.getCount()); + // for (size_t vertIndex = 0;vertIndex < listFloats.getCount();vertIndex+=vertexStride) { + // //btVector3 verts[3]; + // domFloat fl0 = listFloats.get(vertIndex); + // domFloat fl1 = listFloats.get(vertIndex+1); + // domFloat fl2 = listFloats.get(vertIndex+2); + // vconvexhull.push_back(Vector3(fl0*fUnitScale,fl1*fUnitScale,fl2*fUnitScale)); + // } + // } + // } + // } + // + // _computeConvexHull(vconvexhull,alltrimesh); + // } + + return true; + } + else if (geom->getConvex_mesh()) { + { + const domConvex_meshRef convexRef = geom->getConvex_mesh(); + daeElementRef otherElemRef = convexRef->getConvex_hull_of().getElement(); + if ( !!otherElemRef ) { + domGeometryRef linkedGeom = *(domGeometryRef*)&otherElemRef; + ROS_WARN_STREAM( "otherLinked\n"); + } + else { + ROS_WARN("convexMesh polyCount = %d\n",(int)convexRef->getPolygons_array().getCount()); + ROS_WARN("convexMesh triCount = %d\n",(int)convexRef->getTriangles_array().getCount()); + } + } + + const domConvex_meshRef convexRef = geom->getConvex_mesh(); + //daeString urlref = convexRef->getConvex_hull_of().getURI(); + daeString urlref2 = convexRef->getConvex_hull_of().getOriginalURI(); + if (urlref2) { + daeElementRef otherElemRef = convexRef->getConvex_hull_of().getElement(); + + // Load all the geometry libraries + for ( size_t i = 0; i < _dom->getLibrary_geometries_array().getCount(); i++) { + domLibrary_geometriesRef libgeom = _dom->getLibrary_geometries_array()[i]; + for (size_t i = 0; i < libgeom->getGeometry_array().getCount(); i++) { + domGeometryRef lib = libgeom->getGeometry_array()[i]; + if (!strcmp(lib->getId(),urlref2+1)) { // skip the # at the front of urlref2 + //found convex_hull geometry + domMesh *meshElement = lib->getMesh();//linkedGeom->getMesh(); + if (meshElement) { + const domVerticesRef vertsRef = meshElement->getVertices(); + for (size_t i=0;igetInput_array().getCount();i++) { + domInput_localRef localRef = vertsRef->getInput_array()[i]; + daeString str = localRef->getSemantic(); + if ( strcmp(str,"POSITION") == 0) { + const domSourceRef node = daeSafeCast(localRef->getSource().getElement()); + if( !node ) { + continue; + } + double fUnitScale = _GetUnitScale(node); + const domFloat_arrayRef flArray = node->getFloat_array(); + if (!!flArray) { + vconvexhull.reserve(vconvexhull.size()+flArray->getCount()); + const domList_of_floats& listFloats = flArray->getValue(); + for (size_t k=0;k+2getCount();k+=3) { + domFloat fl0 = listFloats.get(k); + domFloat fl1 = listFloats.get(k+1); + domFloat fl2 = listFloats.get(k+2); + vconvexhull.push_back(Vector3(fl0*fUnitScale,fl1*fUnitScale,fl2*fUnitScale)); + } + } + } + } + } + } + } + } + } + else { + //no getConvex_hull_of but direct vertices + const domVerticesRef vertsRef = convexRef->getVertices(); + for (size_t i=0;igetInput_array().getCount();i++) { + domInput_localRef localRef = vertsRef->getInput_array()[i]; + daeString str = localRef->getSemantic(); + if ( strcmp(str,"POSITION") == 0 ) { + const domSourceRef node = daeSafeCast(localRef->getSource().getElement()); + if( !node ) { + continue; + } + double fUnitScale = _GetUnitScale(node); + const domFloat_arrayRef flArray = node->getFloat_array(); + if (!!flArray) { + const domList_of_floats& listFloats = flArray->getValue(); + vconvexhull.reserve(vconvexhull.size()+flArray->getCount()); + for (size_t k=0;k+2getCount();k+=3) { + domFloat fl0 = listFloats.get(k); + domFloat fl1 = listFloats.get(k+1); + domFloat fl2 = listFloats.get(k+2); + vconvexhull.push_back(Vector3(fl0*fUnitScale,fl1*fUnitScale,fl2*fUnitScale)); + } + } + } + } + } + + if( vconvexhull.size()> 0 ) { + listGeomProperties.push_back(GEOMPROPERTIES()); + GEOMPROPERTIES& geom = listGeomProperties.back(); + geom.type = GeomTrimesh; + + //_computeConvexHull(vconvexhull,trimesh); + geom.InitCollisionMesh(); + } + return true; + } + + return false; + } + + /// \brief extract the robot manipulators + void _ExtractRobotManipulators(const domArticulated_systemRef as) + { + for(size_t ie = 0; ie < as->getExtra_array().getCount(); ++ie) { + domExtraRef pextra = as->getExtra_array()[ie]; + if( strcmp(pextra->getType(), "manipulator") == 0 ) { + std::string name = pextra->getAttribute("name"); + if( name.size() == 0 ) { + name = str(boost::format("manipulator%d")%_nGlobalManipulatorId++); + } + domTechniqueRef tec = _ExtractOpenRAVEProfile(pextra->getTechnique_array()); + if( !!tec ) { +// RobotBase::ManipulatorPtr pmanip(new RobotBase::Manipulator(probot)); +// pmanip->_name = name; +// daeElement* pframe_origin = tec->getChild("frame_origin"); +// daeElement* pframe_tip = tec->getChild("frame_tip"); +// if( !!pframe_origin ) { +// domLinkRef plink = daeSafeCast(daeSidRef(pframe_origin->getAttribute("link"), as).resolve().elt); +// if( !!plink ) { +// pmanip->_pBase = boost::static_pointer_cast(_getUserData(plink)->p); +// } +// if( !pmanip->_pBase ) { +// ROS_WARN_STREAM(str(boost::format("failed to find manipulator %s frame origin %s\n")%name%pframe_origin->getAttribute("link"))); +// continue; +// } +// } +// if( !!pframe_tip ) { +// daeElementRef plink = daeSafeCast(daeSidRef(pframe_tip->getAttribute("link"), as).resolve().elt); +// if( !!plink ) { +// pmanip->_pEndEffector = boost::static_pointer_cast(_getUserData(plink)->p); +// } +// if( !pmanip->_pEndEffector ) { +// ROS_WARN_STREAM(str(boost::format("failed to find manipulator %s frame tip %s\n")%name%pframe_tip->getAttribute("link"))); +// continue; +// } +// pmanip->_tGrasp = _ExtractFullTransformFromChildren(pframe_tip); +// } +// +// for(size_t ic = 0; ic < tec->getContents().getCount(); ++ic) { +// daeElementRef pgripper_axis = tec->getContents()[ic]; +// if( pgripper_axis->getElementName() == std::string("gripper_axis") ) { +// domAxis_constraintRef paxis = daeSafeCast(daeSidRef(pgripper_axis->getAttribute("axis"), as).resolve().elt); +// if( !!paxis ) { +// boost::shared_ptr pdofindex = boost::static_pointer_cast(_getUserData(paxis)->p); +// if( !!pdofindex ) { +// if( *pdofindex < 0 ) { +// ROS_WARN_STREAM(str(boost::format("manipulator %s gripper axis %s references passive joint\n")%name%pgripper_axis->getAttribute("axis"))); +// } +// else { +// float closingdirection = 0; +// daeElementRef pclosingdirection = daeElementRef(pgripper_axis->getChild("closingdirection")); +// if( !pclosingdirection || !resolveCommon_float_or_param(pclosingdirection,as,closingdirection) ) { +// ROS_WARN_STREAM(str(boost::format("manipulator %s gripper axis %s failed to process closing direction\n")%name%pgripper_axis->getAttribute("axis"))); +// } +// pmanip->_vgripperdofindices.push_back(*pdofindex); +// pmanip->_vClosingDirection.push_back((double)closingdirection); +// } +// continue; +// } +// } +// ROS_WARN_STREAM(str(boost::format("could not find manipulator gripper axis %s\n")%pgripper_axis->getAttribute("axis"))); +// } +// } +// probot->GetManipulators().push_back(pmanip); + } + else { + ROS_WARN_STREAM(str(boost::format("cannot create robot %s manipulator %s\n")%_model.name_%name)); + } + } + } + } + + /// \brief Extract Sensors attached to a Robot + void _ExtractRobotAttachedSensors(const domArticulated_systemRef as) + { + for (size_t ie = 0; ie < as->getExtra_array().getCount(); ie++) { + domExtraRef pextra = as->getExtra_array()[ie]; + if( strcmp(pextra->getType(), "sensor") == 0 ) { + std::string name = pextra->getAttribute("name"); + if( name.size() == 0 ) { + name = str(boost::format("sensor%d")%_nGlobalSensorId++); + } + domTechniqueRef tec = _ExtractOpenRAVEProfile(pextra->getTechnique_array()); + if( !!tec ) { +// RobotBase::AttachedSensorPtr pattachedsensor(new RobotBase::AttachedSensor(probot)); +// pattachedsensor->_name = name; +// daeElement* pframe_origin = tec->getChild("frame_origin"); +// if( !!pframe_origin ) { +// domLinkRef plink = daeSafeCast(daeSidRef(pframe_origin->getAttribute("link"), as).resolve().elt); +// if( !!plink ) { +// pattachedsensor->pattachedlink = boost::static_pointer_cast(_getUserData(plink)->p); +// } +// if( !pattachedsensor->pattachedlink.lock() ) { +// ROS_WARN_STREAM(str(boost::format("failed to find manipulator %s frame origin %s\n")%name%pframe_origin->getAttribute("link"))); +// continue; +// } +// pattachedsensor->trelative = _ExtractFullTransformFromChildren(pframe_origin); +// } +// if( !_ExtractSensor(pattachedsensor->psensor,tec->getChild("instance_sensor")) ) { +// ROS_WARN_STREAM(str(boost::format("cannot find instance_sensor for attached sensor %s:%s\n")%_model.name_%name)); +// } +// else { +// pattachedsensor->pdata = pattachedsensor->GetSensor()->CreateSensorData(); +// } +// probot->GetAttachedSensors().push_back(pattachedsensor); + } + else { + ROS_WARN_STREAM(str(boost::format("cannot create robot %s attached sensor %s\n")%_model.name_%name)); + } + } + } + } + + /// \brief Extract an instance of a sensor +// bool _ExtractSensor(SensorBasePtr& psensor, daeElementRef instance_sensor) +// { +// if( !instance_sensor ) { +// return false; +// } +// if( instance_sensor->hasAttribute("url") ) { +// ROS_WARN_STREAM("instance_sensor has no url\n"); +// return false; +// } +// +// std::string instance_id = instance_sensor->getAttribute("id"); +// std::string instance_url = instance_sensor->getAttribute("url"); +// daeElementRef domsensor = _getElementFromUrl(daeURI(*instance_sensor,instance_url)); +// if( !domsensor ) { +// ROS_WARN_STREAM(str(boost::format("failed to find senor id %s url=%s\n")%instance_id%instance_url)); +// return false; +// } +// if( !domsensor->hasAttribute("type") ) { +// ROS_WARN_STREAM("collada needs type attribute\n"); +// return false; +// } +// psensor = RaveCreateSensor(_penv, domsensor->getAttribute("type")); +// if( !psensor ) { +// return false; +// } +// +// // Create the custom XML reader to read in the data (determined by users) +// BaseXMLReaderPtr pcurreader = RaveCallXMLReader(PT_Sensor,psensor->GetXMLId(),psensor, std::list >()); +// if( !pcurreader ) { +// pcurreader.reset(); +// return false; +// } +// _ProcessXMLReader(pcurreader,domsensor); +// psensor->__mapReadableInterfaces[psensor->GetXMLId()] = pcurreader->GetReadable(); +// if( !psensor->Init(instance_sensor->getAttribute("args")) ) { +// ROS_WARN_STREAM(str(boost::format("failed to initialize sensor %s\n"))); +// psensor.reset(); +// } +// return true; +// } + + /// \brief feed the collada data into the base readers xml class +// static void _ProcessXMLReader(BaseXMLReaderPtr preader, daeElementRef elt) +// { +// daeTArray children; +// elt->getChildren(children); +// std::list > atts; +// for (size_t i = 0; i < children.getCount(); i++) { +// std::string xmltag = tolowerstring(children[i]->getElementName()); +// daeTArray domatts; +// children[i]->getAttributes(domatts); +// atts.clear(); +// for(size_t j = 0; j < domatts.getCount(); ++j) { +// atts.push_back(std::make_pair(domatts[j].name,domatts[j].value)); +// } +// preader->startElement(xmltag,atts); +// _ProcessXMLReader(preader,children[i]); +// preader->characters(children[i]->getCharData()); +// preader->endElement(xmltag); +// } +// } + + inline daeElementRef _getElementFromUrl(const daeURI &uri) + { + return daeStandardURIResolver(*_collada).resolveElement(uri); + } + + static daeElement* searchBinding(domCommon_sidref_or_paramRef paddr, daeElementRef parent) + { + if( !!paddr->getSIDREF() ) { + return daeSidRef(paddr->getSIDREF()->getValue(),parent).resolve().elt; + } + if (!!paddr->getParam()) { + return searchBinding(paddr->getParam()->getValue(),parent); + } + return NULL; + } + + /// Search a given parameter reference and stores the new reference to search. + /// \param ref the reference name to search + /// \param parent The array of parameter where the method searchs. + static daeElement* searchBinding(daeString ref, daeElementRef parent) + { + if( !parent ) { + return NULL; + } + daeElement* pelt = NULL; + domKinematics_sceneRef kscene = daeSafeCast(parent.cast()); + if( !!kscene ) { + pelt = searchBindingArray(ref,kscene->getInstance_articulated_system_array()); + if( !!pelt ) { + return pelt; + } + return searchBindingArray(ref,kscene->getInstance_kinematics_model_array()); + } + domArticulated_systemRef articulated_system = daeSafeCast(parent.cast()); + if( !!articulated_system ) { + if( !!articulated_system->getKinematics() ) { + pelt = searchBindingArray(ref,articulated_system->getKinematics()->getInstance_kinematics_model_array()); + if( !!pelt ) { + return pelt; + } + } + if( !!articulated_system->getMotion() ) { + return searchBinding(ref,articulated_system->getMotion()->getInstance_articulated_system()); + } + return NULL; + } + // try to get a bind array + daeElementRef pbindelt; + const domKinematics_bind_Array* pbindarray = NULL; + const domKinematics_newparam_Array* pnewparamarray = NULL; + domInstance_articulated_systemRef ias = daeSafeCast(parent.cast()); + if( !!ias ) { + pbindarray = &ias->getBind_array(); + pbindelt = ias->getUrl().getElement(); + pnewparamarray = &ias->getNewparam_array(); + } + if( !pbindarray || !pbindelt ) { + domInstance_kinematics_modelRef ikm = daeSafeCast(parent.cast()); + if( !!ikm ) { + pbindarray = &ikm->getBind_array(); + pbindelt = ikm->getUrl().getElement(); + pnewparamarray = &ikm->getNewparam_array(); + } + } + if( !!pbindarray && !!pbindelt ) { + for (size_t ibind = 0; ibind < pbindarray->getCount(); ++ibind) { + domKinematics_bindRef pbind = (*pbindarray)[ibind]; + if( !!pbind->getSymbol() && strcmp(pbind->getSymbol(), ref) == 0 ) { + // found a match + if( !!pbind->getParam() ) { + return searchBinding(pbind->getParam()->getRef(), pbindelt); + } + else if( !!pbind->getSIDREF() ) { + return daeSidRef(pbind->getSIDREF()->getValue(), pbindelt).resolve().elt; + } + } + } + for(size_t inewparam = 0; inewparam < pnewparamarray->getCount(); ++inewparam) { + domKinematics_newparamRef newparam = (*pnewparamarray)[inewparam]; + if( !!newparam->getSid() && strcmp(newparam->getSid(), ref) == 0 ) { + if( !!newparam->getSIDREF() ) { // can only bind with SIDREF + return daeSidRef(newparam->getSIDREF()->getValue(),pbindelt).resolve().elt; + } + ROS_WARN_STREAM(str(boost::format("newparam sid=%s does not have SIDREF\n")%newparam->getSid())); + } + } + } + ROS_WARN_STREAM(str(boost::format("failed to get binding '%s' for element: %s\n")%ref%parent->getElementName())); + return NULL; + } + + static daeElement* searchBindingArray(daeString ref, const domInstance_articulated_system_Array& paramArray) + { + for(size_t iikm = 0; iikm < paramArray.getCount(); ++iikm) { + daeElement* pelt = searchBinding(ref,paramArray[iikm].cast()); + if( !!pelt ) { + return pelt; + } + } + return NULL; + } + + static daeElement* searchBindingArray(daeString ref, const domInstance_kinematics_model_Array& paramArray) + { + for(size_t iikm = 0; iikm < paramArray.getCount(); ++iikm) { + daeElement* pelt = searchBinding(ref,paramArray[iikm].cast()); + if( !!pelt ) { + return pelt; + } + } + return NULL; + } + + template static xsBoolean resolveBool(domCommon_bool_or_paramRef paddr, const U& parent) { + if( !!paddr->getBool() ) { + return paddr->getBool()->getValue(); + } + if( !paddr->getParam() ) { + ROS_WARN_STREAM("param not specified, setting to 0\n"); + return false; + } + for(size_t iparam = 0; iparam < parent->getNewparam_array().getCount(); ++iparam) { + domKinematics_newparamRef pnewparam = parent->getNewparam_array()[iparam]; + if( !!pnewparam->getSid() && strcmp(pnewparam->getSid(), paddr->getParam()->getValue()) == 0 ) { + if( !!pnewparam->getBool() ) { + return pnewparam->getBool()->getValue(); + } + else if( !!pnewparam->getSIDREF() ) { + domKinematics_newparam::domBoolRef ptarget = daeSafeCast(daeSidRef(pnewparam->getSIDREF()->getValue(), pnewparam).resolve().elt); + if( !ptarget ) { + ROS_WARN("failed to resolve %s from %s\n", pnewparam->getSIDREF()->getValue(), paddr->getID()); + continue; + } + return ptarget->getValue(); + } + } + } + ROS_WARN_STREAM(str(boost::format("failed to resolve %s\n")%paddr->getParam()->getValue())); + return false; + } + template static domFloat resolveFloat(domCommon_float_or_paramRef paddr, const U& parent) { + if( !!paddr->getFloat() ) { + return paddr->getFloat()->getValue(); + } + if( !paddr->getParam() ) { + ROS_WARN_STREAM("param not specified, setting to 0\n"); + return 0; + } + for(size_t iparam = 0; iparam < parent->getNewparam_array().getCount(); ++iparam) { + domKinematics_newparamRef pnewparam = parent->getNewparam_array()[iparam]; + if( !!pnewparam->getSid() && strcmp(pnewparam->getSid(), paddr->getParam()->getValue()) == 0 ) { + if( !!pnewparam->getFloat() ) { + return pnewparam->getFloat()->getValue(); + } + else if( !!pnewparam->getSIDREF() ) { + domKinematics_newparam::domFloatRef ptarget = daeSafeCast(daeSidRef(pnewparam->getSIDREF()->getValue(), pnewparam).resolve().elt); + if( !ptarget ) { + ROS_WARN("failed to resolve %s from %s\n", pnewparam->getSIDREF()->getValue(), paddr->getID()); + continue; + } + return ptarget->getValue(); + } + } + } + ROS_WARN_STREAM(str(boost::format("failed to resolve %s\n")%paddr->getParam()->getValue())); + return 0; + } + + static bool resolveCommon_float_or_param(daeElementRef pcommon, daeElementRef parent, float& f) + { + daeElement* pfloat = pcommon->getChild("float"); + if( !!pfloat ) { + std::stringstream sfloat(pfloat->getCharData()); + sfloat >> f; + return !!sfloat; + } + daeElement* pparam = pcommon->getChild("param"); + if( !!pparam ) { + if( pparam->hasAttribute("ref") ) { + ROS_WARN_STREAM("cannot process param ref\n"); + } + else { + daeElement* pelt = daeSidRef(pparam->getCharData(),parent).resolve().elt; + if( !!pelt ) { + ROS_WARN_STREAM(str(boost::format("found param ref: %s from %s\n")%pelt->getCharData()%pparam->getCharData())); + } + } + } + return false; + } + + static boost::array _matrixIdentity() + { + boost::array m = {{1,0,0,0,0,1,0,0,0,0,1,0}}; + return m; + }; + + /// Gets all transformations applied to the node + static boost::array _getTransform(daeElementRef pelt) + { + boost::array m = _matrixIdentity(); + domRotateRef protate = daeSafeCast(pelt); + if( !!protate ) { + m = _matrixFromAxisAngle(Vector3(protate->getValue()[0],protate->getValue()[1],protate->getValue()[2]), (double)(protate->getValue()[3]*(M_PI/180.0))); + return m; + } + + domTranslateRef ptrans = daeSafeCast(pelt); + if( !!ptrans ) { + double scale = _GetUnitScale(pelt); + m[3] = ptrans->getValue()[0]*scale; + m[7] = ptrans->getValue()[1]*scale; + m[11] = ptrans->getValue()[2]*scale; + return m; + } + + domMatrixRef pmat = daeSafeCast(pelt); + if( !!pmat ) { + double scale = _GetUnitScale(pelt); + for(int i = 0; i < 3; ++i) { + m[4*i+0] = pmat->getValue()[4*i+0]; + m[4*i+1] = pmat->getValue()[4*i+1]; + m[4*i+2] = pmat->getValue()[4*i+2]; + m[4*i+3] = pmat->getValue()[4*i+3]*scale; + } + return m; + } + + domScaleRef pscale = daeSafeCast(pelt); + if( !!pscale ) { + m[0] = pscale->getValue()[0]; + m[4*1+1] = pscale->getValue()[1]; + m[4*2+2] = pscale->getValue()[2]; + return m; + } + + domLookatRef pcamera = daeSafeCast(pelt); + if( pelt->typeID() == domLookat::ID() ) { + ROS_ERROR_STREAM("look at transform not implemented\n"); + return m; + } + + domSkewRef pskew = daeSafeCast(pelt); + if( !!pskew ) { + ROS_ERROR_STREAM("skew transform not implemented\n"); + } + + return m; + } + + /// Travels recursively the node parents of the given one + /// to extract the Transform arrays that affects the node given + template static boost::array _getNodeParentTransform(const T pelt) { + domNodeRef pnode = daeSafeCast(pelt->getParent()); + if( !pnode ) { + return _matrixIdentity(); + } + return _poseMult(_getNodeParentTransform(pnode), _ExtractFullTransform(pnode)); + } + + /// \brief Travel by the transformation array and calls the _getTransform method + template static boost::array _ExtractFullTransform(const T pelt) { + boost::array t = _matrixIdentity(); + for(size_t i = 0; i < pelt->getContents().getCount(); ++i) { + t = _poseMult(t, _getTransform(pelt->getContents()[i])); + } + return t; + } + + /// \brief Travel by the transformation array and calls the _getTransform method + template static boost::array _ExtractFullTransformFromChildren(const T pelt) { + boost::array t = _matrixIdentity(); + daeTArray children; pelt->getChildren(children); + for(size_t i = 0; i < children.getCount(); ++i) { + t = _poseMult(t, _getTransform(children[i])); + } + return t; + } + + // decompose a matrix into a scale and rigid transform (necessary for model scales) + void _decompose(const boost::array& tm, Pose& tout, Vector3& vscale) + { + vscale.x = 1; vscale.y = 1; vscale.z = 1; + tout = _poseFromMatrix(tm); + } + + virtual void handleError( daeString msg ) + { + ROS_ERROR("COLLADA error: %s\n", msg); + } + + virtual void handleWarning( daeString msg ) + { + ROS_WARN("COLLADA warning: %s\n", msg); + } + + inline static double _GetUnitScale(daeElement* pelt) + { + return ((USERDATA*)pelt->getUserData())->scale; + } + + domTechniqueRef _ExtractOpenRAVEProfile(const domTechnique_Array& arr) + { + for(size_t i = 0; i < arr.getCount(); ++i) { + if( strcmp(arr[i]->getProfile(), "OpenRAVE") == 0 ) { + return arr[i]; + } + } + return domTechniqueRef(); + } + + /// \brief returns an openrave interface type from the extra array + boost::shared_ptr _ExtractInterfaceType(const domExtra_Array& arr) { + for(size_t i = 0; i < arr.getCount(); ++i) { + if( strcmp(arr[i]->getType(),"interface_type") == 0 ) { + domTechniqueRef tec = _ExtractOpenRAVEProfile(arr[i]->getTechnique_array()); + if( !!tec ) { + daeElement* ptype = tec->getChild("interface"); + if( !!ptype ) { + return boost::shared_ptr(new std::string(ptype->getCharData())); + } + } + } + } + return boost::shared_ptr(); + } + + std::string _ExtractLinkName(domLinkRef pdomlink) { + std::string linkname; + if( !!pdomlink ) { + if( !!pdomlink->getName() ) { + linkname = pdomlink->getName(); + } + if( linkname.size() == 0 && !!pdomlink->getID() ) { + linkname = pdomlink->getID(); + } + } + return linkname; + } + + bool _checkMathML(daeElementRef pelt,const std::string& type) + { + if( pelt->getElementName()==type ) { + return true; + } + // check the substring after ':' + std::string name = pelt->getElementName(); + std::size_t pos = name.find_last_of(':'); + if( pos == std::string::npos ) { + return false; + } + return name.substr(pos+1)==type; + } + + boost::shared_ptr _getJointFromRef(xsToken targetref, daeElementRef peltref) { + daeElement* peltjoint = daeSidRef(targetref, peltref).resolve().elt; + domJointRef pdomjoint = daeSafeCast (peltjoint); + + if (!pdomjoint) { + domInstance_jointRef pdomijoint = daeSafeCast (peltjoint); + if (!!pdomijoint) { + pdomjoint = daeSafeCast (pdomijoint->getUrl().getElement().cast()); + } + } + + if (!pdomjoint || pdomjoint->typeID() != domJoint::ID() || !pdomjoint->getName()) { + ROS_WARN_STREAM(str(boost::format("could not find collada joint %s!\n")%targetref)); + return boost::shared_ptr(); + } + + boost::shared_ptr pjoint = _model.joints_[std::string(pdomjoint->getName())]; + if(!pjoint) { + ROS_WARN_STREAM(str(boost::format("could not find openrave joint %s!\n")%pdomjoint->getName())); + } + return pjoint; + } + + /// \brief go through all kinematics binds to get a kinematics/visual pair + /// \param kiscene instance of one kinematics scene, binds the kinematic and visual models + /// \param bindings the extracted bindings + static void _ExtractKinematicsVisualBindings(domInstance_with_extraRef viscene, domInstance_kinematics_sceneRef kiscene, KinematicsSceneBindings& bindings) + { + domKinematics_sceneRef kscene = daeSafeCast (kiscene->getUrl().getElement().cast()); + if (!kscene) { + return; + } + for (size_t imodel = 0; imodel < kiscene->getBind_kinematics_model_array().getCount(); imodel++) { + domArticulated_systemRef articulated_system; // if filled, contains robot-specific information, so create a robot + domBind_kinematics_modelRef kbindmodel = kiscene->getBind_kinematics_model_array()[imodel]; + if (!kbindmodel->getNode()) { + ROS_WARN_STREAM("do not support kinematics models without references to nodes\n"); + continue; + } + + // visual information + domNodeRef node = daeSafeCast(daeSidRef(kbindmodel->getNode(), viscene->getUrl().getElement()).resolve().elt); + if (!node) { + ROS_WARN_STREAM(str(boost::format("bind_kinematics_model does not reference valid node %s\n")%kbindmodel->getNode())); + continue; + } + + // kinematics information + daeElement* pelt = searchBinding(kbindmodel,kscene); + domInstance_kinematics_modelRef kimodel = daeSafeCast(pelt); + if (!kimodel) { + if( !pelt ) { + ROS_WARN_STREAM("bind_kinematics_model does not reference element\n"); + } + else { + ROS_WARN_STREAM(str(boost::format("bind_kinematics_model cannot find reference to %s%s:\n")%pelt->getElementName())); + } + continue; + } + bindings.listKinematicsVisualBindings.push_back(std::make_pair(node,kimodel)); + } + // axis info + for (size_t ijoint = 0; ijoint < kiscene->getBind_joint_axis_array().getCount(); ++ijoint) { + domBind_joint_axisRef bindjoint = kiscene->getBind_joint_axis_array()[ijoint]; + daeElementRef pjtarget = daeSidRef(bindjoint->getTarget(), viscene->getUrl().getElement()).resolve().elt; + if (!pjtarget) { + ROS_ERROR_STREAM(str(boost::format("Target Node %s NOT found!!!\n")%bindjoint->getTarget())); + continue; + } + daeElement* pelt = searchBinding(bindjoint->getAxis(),kscene); + domAxis_constraintRef pjointaxis = daeSafeCast(pelt); + if (!pjointaxis) { + continue; + } + bindings.listAxisBindings.push_back(JointAxisBinding(pjtarget, pjointaxis, bindjoint->getValue(), NULL, NULL)); + } + } + + size_t _countChildren(daeElement* pelt) { + size_t c = 1; + daeTArray children; + pelt->getChildren(children); + for (size_t i = 0; i < children.getCount(); ++i) { + c += _countChildren(children[i]); + } + return c; + } + + void _processUserData(daeElement* pelt, double scale) + { + // getChild could be optimized since asset tag is supposed to appear as the first element + domAssetRef passet = daeSafeCast (pelt->getChild("asset")); + if (!!passet && !!passet->getUnit()) { + scale = passet->getUnit()->getMeter(); + } + + _vuserdata.push_back(USERDATA(scale)); + pelt->setUserData(&_vuserdata.back()); + daeTArray children; + pelt->getChildren(children); + for (size_t i = 0; i < children.getCount(); ++i) { + if (children[i] != passet) { + _processUserData(children[i], scale); + } + } + } + + USERDATA* _getUserData(daeElement* pelt) + { + BOOST_ASSERT(!!pelt); + void* p = pelt->getUserData(); + BOOST_ASSERT(!!p); + return (USERDATA*)p; + } + + // + // openrave math functions (from geometry.h) + // + + static Vector3 _poseMult(const Pose& p, const Vector3& v) + { + double ww = 2 * p.rotation.x * p.rotation.x; + double wx = 2 * p.rotation.x * p.rotation.y; + double wy = 2 * p.rotation.x * p.rotation.z; + double wz = 2 * p.rotation.x * p.rotation.w; + double xx = 2 * p.rotation.y * p.rotation.y; + double xy = 2 * p.rotation.y * p.rotation.z; + double xz = 2 * p.rotation.y * p.rotation.w; + double yy = 2 * p.rotation.z * p.rotation.z; + double yz = 2 * p.rotation.z * p.rotation.w; + Vector3 vnew; + vnew.x = (1-xx-yy) * v.x + (wx-yz) * v.y + (wy+xz)*v.z + p.position.x; + vnew.y = (wx+yz) * v.x + (1-ww-yy) * v.y + (xy-wz)*v.z + p.position.y; + vnew.z = (wy-xz) * v.x + (xy+wz) * v.y + (1-ww-xx)*v.z + p.position.z; + return vnew; + } + + static Vector3 _poseMult(const boost::array& m, const Vector3& v) + { + Vector3 vnew; + vnew.x = m[4*0+0] * v.x + m[4*0+1] * v.y + m[4*0+2] * v.z + m[4*0+3]; + vnew.y = m[4*1+0] * v.x + m[4*1+1] * v.y + m[4*1+2] * v.z + m[4*1+3]; + vnew.z = m[4*2+0] * v.x + m[4*2+1] * v.y + m[4*2+2] * v.z + m[4*2+3]; + return vnew; + } + + static boost::array _poseMult(const boost::array& m0, const boost::array& m1) + { + boost::array mres; + mres[0*4+0] = m0[0*4+0]*m1[0*4+0]+m0[0*4+1]*m1[1*4+0]+m0[0*4+2]*m1[2*4+0]; + mres[0*4+1] = m0[0*4+0]*m1[0*4+1]+m0[0*4+1]*m1[1*4+1]+m0[0*4+2]*m1[2*4+1]; + mres[0*4+2] = m0[0*4+0]*m1[0*4+2]+m0[0*4+1]*m1[1*4+2]+m0[0*4+2]*m1[2*4+2]; + mres[1*4+0] = m0[1*4+0]*m1[0*4+0]+m0[1*4+1]*m1[1*4+0]+m0[1*4+2]*m1[2*4+0]; + mres[1*4+1] = m0[1*4+0]*m1[0*4+1]+m0[1*4+1]*m1[1*4+1]+m0[1*4+2]*m1[2*4+1]; + mres[1*4+2] = m0[1*4+0]*m1[0*4+2]+m0[1*4+1]*m1[1*4+2]+m0[1*4+2]*m1[2*4+2]; + mres[2*4+0] = m0[2*4+0]*m1[0*4+0]+m0[2*4+1]*m1[1*4+0]+m0[2*4+2]*m1[2*4+0]; + mres[2*4+1] = m0[2*4+0]*m1[0*4+1]+m0[2*4+1]*m1[1*4+1]+m0[2*4+2]*m1[2*4+1]; + mres[2*4+2] = m0[2*4+0]*m1[0*4+2]+m0[2*4+1]*m1[1*4+2]+m0[2*4+2]*m1[2*4+2]; + mres[3] = m1[3] * m0[0] + m1[7] * m0[1] + m1[11] * m0[2] + m0[3]; + mres[7] = m1[3] * m0[4] + m1[7] * m0[5] + m1[11] * m0[6] + m0[7]; + mres[11] = m1[3] * m0[8] + m1[7] * m0[9] + m1[11] * m0[10] + m0[11]; + return mres; + } + + static Pose _poseMult(const Pose& p0, const Pose& p1) + { + Pose p; + p.position = _poseMult(p0,p1.position); + p.rotation = _quatMult(p0.rotation,p1.rotation); + return p; + } + + static Pose _poseInverse(const Pose& p) + { + Pose pinv; + pinv.rotation.x = -p.rotation.x; + pinv.rotation.y = -p.rotation.y; + pinv.rotation.z = -p.rotation.z; + pinv.rotation.w = p.rotation.w; + Vector3 t = _poseMult(pinv,p.position); + pinv.position.x = -t.x; + pinv.position.y = -t.y; + pinv.position.z = -t.z; + return pinv; + } + + static Rotation _quatMult(const Rotation& quat0, const Rotation& quat1) + { + Rotation q; + q.x = quat0.w*quat1.x + quat0.x*quat1.w + quat0.y*quat1.z - quat0.z*quat1.y; + q.y = quat0.w*quat1.y + quat0.y*quat1.w + quat0.z*quat1.x - quat0.x*quat1.z; + q.z = quat0.w*quat1.z + quat0.z*quat1.w + quat0.x*quat1.y - quat0.y*quat1.x; + q.w = quat0.w*quat1.w - quat0.x*quat1.x - quat0.y*quat1.y - quat0.z*quat1.z; + double fnorm = std::sqrt(q.x*q.x+q.y*q.y+q.z*q.z+q.w*q.w); + // don't touch the divides + q.x /= fnorm; + q.y /= fnorm; + q.z /= fnorm; + q.w /= fnorm; + return q; + } + + static boost::array _matrixFromAxisAngle(const Vector3& axis, double angle) + { + return _matrixFromQuat(_quatFromAxisAngle(axis.x,axis.y,axis.z,angle)); + } + + static boost::array _matrixFromQuat(const Rotation& quat) + { + boost::array m; + double qq1 = 2*quat.x*quat.x; + double qq2 = 2*quat.y*quat.y; + double qq3 = 2*quat.z*quat.z; + m[4*0+0] = 1 - qq2 - qq3; + m[4*0+1] = 2*(quat.x*quat.y - quat.w*quat.z); + m[4*0+2] = 2*(quat.x*quat.z + quat.w*quat.y); + m[4*0+3] = 0; + m[4*1+0] = 2*(quat.x*quat.y + quat.w*quat.z); + m[4*1+1] = 1 - qq1 - qq3; + m[4*1+2] = 2*(quat.y*quat.z - quat.w*quat.x); + m[4*1+3] = 0; + m[4*2+0] = 2*(quat.x*quat.z - quat.w*quat.y); + m[4*2+1] = 2*(quat.y*quat.z + quat.w*quat.x); + m[4*2+2] = 1 - qq1 - qq2; + m[4*2+3] = 0; + return m; + } + + static Pose _poseFromMatrix(const boost::array& m) + { + Pose t; + t.rotation = _quatFromMatrix(m); + t.position.x = m[3]; + t.position.y = m[7]; + t.position.z = m[11]; + return t; + } + + static boost::array _matrixFromPose(const Pose& t) + { + boost::array m = _matrixFromQuat(t.rotation); + m[3] = t.position.x; + m[7] = t.position.y; + m[11] = t.position.z; + return m; + } + + static Rotation _quatFromAxisAngle(double x, double y, double z, double angle) + { + Rotation q; + double axislen = std::sqrt(x*x+y*y+z*z); + if( axislen == 0 ) { + return q; + } + angle *= 0.5; + double sang = std::sin(angle)/axislen; + q.w = std::cos(angle); + q.x = x*sang; + q.y = y*sang; + q.z = z*sang; + return q; + } + + static Rotation _quatFromMatrix(const boost::array& mat) + { + Rotation rot; + double tr = mat[4*0+0] + mat[4*1+1] + mat[4*2+2]; + if (tr >= 0) { + rot.w = tr + 1; + rot.x = (mat[4*2+1] - mat[4*1+2]); + rot.y = (mat[4*0+2] - mat[4*2+0]); + rot.z = (mat[4*1+0] - mat[4*0+1]); + } + else { + // find the largest diagonal element and jump to the appropriate case + if (mat[4*1+1] > mat[4*0+0]) { + if (mat[4*2+2] > mat[4*1+1]) { + rot.z = (mat[4*2+2] - (mat[4*0+0] + mat[4*1+1])) + 1; + rot.x = (mat[4*2+0] + mat[4*0+2]); + rot.y = (mat[4*1+2] + mat[4*2+1]); + rot.w = (mat[4*1+0] - mat[4*0+1]); + } + else { + rot.y = (mat[4*1+1] - (mat[4*2+2] + mat[4*0+0])) + 1; + rot.z = (mat[4*1+2] + mat[4*2+1]); + rot.x = (mat[4*0+1] + mat[4*1+0]); + rot.w = (mat[4*0+2] - mat[4*2+0]); + } + } + else if (mat[4*2+2] > mat[4*0+0]) { + rot.z = (mat[4*2+2] - (mat[4*0+0] + mat[4*1+1])) + 1; + rot.x = (mat[4*2+0] + mat[4*0+2]); + rot.y = (mat[4*1+2] + mat[4*2+1]); + rot.w = (mat[4*1+0] - mat[4*0+1]); + } + else { + rot.x = (mat[4*0+0] - (mat[4*1+1] + mat[4*2+2])) + 1; + rot.y = (mat[4*0+1] + mat[4*1+0]); + rot.z = (mat[4*2+0] + mat[4*0+2]); + rot.w = (mat[4*2+1] - mat[4*1+2]); + } + } + double fnorm = std::sqrt(rot.x*rot.x+rot.y*rot.y+rot.z*rot.z+rot.w*rot.w); + // don't touch the divides + rot.x /= fnorm; + rot.y /= fnorm; + rot.z /= fnorm; + rot.w /= fnorm; + return rot; + } + + static double _dot3(const Vector3& v0, const Vector3& v1) + { + return v0.x*v1.x + v0.y*v1.y + v0.z*v1.z; + } + static Vector3 _cross3(const Vector3& v0, const Vector3& v1) + { + Vector3 v; + v.x = v0.y * v1.z - v0.z * v1.y; + v.y = v0.z * v1.x - v0.x * v1.z; + v.z = v0.x * v1.y - v0.y * v1.x; + return v; + } + static Vector3 _sub3(const Vector3& v0, const Vector3& v1) + { + Vector3 v; + v.x = v0.x-v1.x; + v.y = v0.y-v1.y; + v.z = v0.z-v1.z; + return v; + } + static Vector3 _add3(const Vector3& v0, const Vector3& v1) + { + Vector3 v; + v.x = v0.x+v1.x; + v.y = v0.y+v1.y; + v.z = v0.z+v1.z; + return v; + } + static Vector3 _normalize3(const Vector3& v0) + { + Vector3 v; + double norm = std::sqrt(v0.x*v0.x+v0.y*v0.y+v0.z*v0.z); + v.x = v0.x/norm; + v.y = v0.y/norm; + v.z = v0.z/norm; + return v; + } + + boost::shared_ptr _collada; + domCOLLADA* _dom; + std::vector _vuserdata; // all userdata + int _nGlobalSensorId, _nGlobalManipulatorId; + std::string _filename; + std::string _resourcedir; + Model& _model; +}; + +bool urdfFromColladaFile(std::string const& daefilename, Model& model) +{ + ColladaModelReader reader(model); + return reader.InitFromFile(daefilename); +} + +bool urdfFromColladaData(std::string const& data, Model& model) +{ + ColladaModelReader reader(model); + return reader.InitFromData(data); +} + +bool urdfFromTiXML(TiXmlElement *robot_xml, Model& model) +{ + ColladaModelReader reader(model); + // have to convert all xml back to string (sigh..) + std::stringstream ss; + ss << *robot_xml; + return reader.InitFromData(ss.str()); +} + +bool IsColladaFile(const std::string& filename) +{ + size_t len = filename.size(); + if( len < 4 ) + return false; + return filename[len-4] == '.' && ::tolower(filename[len-3]) == 'd' && ::tolower(filename[len-2]) == 'a' && ::tolower(filename[len-1]) == 'e'; +} + +bool IsColladaData(const std::string& data) +{ + return data.find("RootElement() ) { + if( std::string("COLLADA") == xml_doc->RootElement()->ValueStr() ) { + return urdfFromTiXML(xml_doc->RootElement(),*this); + } + } + TiXmlElement *robot_xml = xml_doc->FirstChildElement("robot"); if (!robot_xml) { @@ -120,6 +141,11 @@ bool Model::initXml(TiXmlElement *robot_xml) ROS_DEBUG("Parsing robot xml"); if (!robot_xml) return false; + // necessary for COLLADA compatibility + if( std::string("COLLADA") == robot_xml->ValueStr() ) { + return urdfFromTiXML(robot_xml,*this); + } + // Get robot name const char *name = robot_xml->Attribute("name"); if (!name) @@ -298,7 +324,7 @@ bool Model::initTree(std::map &parent_link_tree) ROS_ERROR(" parent link '%s' of joint '%s' not found. The Boxturtle urdf parser used to automatically add this link for you, but this is not valid according to the URDF spec. Every link you refer to from a joint needs to be explicitly defined in the robot description. To fix this problem you can either remove this joint from your urdf file, or add \"\" to your urdf file.", parent_link_name.c_str(), joint->first.c_str(), parent_link_name.c_str() ); return false; } - + //set parent link for child link child_link->setParent(parent_link); From f53e2c0e6bd559bbb196e10775f26d4bb3d8a01f Mon Sep 17 00:00:00 2001 From: rdiankov Date: Wed, 1 Dec 2010 21:31:35 +0000 Subject: [PATCH 223/245] fixed typo for detecting collada file, removed commented out manipulator and sensor collada parsing funtions until urdf api can support them --- collada_urdf/manifest.xml | 2 + urdf/manifest.xml | 2 +- urdf/src/collada_model_reader.cpp | 170 +----------------------------- urdf/src/model.cpp | 2 +- 4 files changed, 7 insertions(+), 169 deletions(-) diff --git a/collada_urdf/manifest.xml b/collada_urdf/manifest.xml index 1507da3..7addbdb 100644 --- a/collada_urdf/manifest.xml +++ b/collada_urdf/manifest.xml @@ -3,6 +3,8 @@ This package contains a tool to convert Unified Robot Description Format (URDF) documents into COLLAborative Design Activity (COLLADA) documents. + Implements robot-specific COLLADA extensions as defined by + http://openrave.programmingvision.com/index.php/Started:COLLADA Tim Field BSD diff --git a/urdf/manifest.xml b/urdf/manifest.xml index d03ca3f..f857168 100644 --- a/urdf/manifest.xml +++ b/urdf/manifest.xml @@ -5,7 +5,7 @@ The code API of the parser has been through our review process and will remain backwards compatible in future releases. - Wim Meeussen, John Hsu + Wim Meeussen, John Hsu, Rosen Diankov BSD http://ros.org/wiki/urdf diff --git a/urdf/src/collada_model_reader.cpp b/urdf/src/collada_model_reader.cpp index 6f03f61..c5cc462 100644 --- a/urdf/src/collada_model_reader.cpp +++ b/urdf/src/collada_model_reader.cpp @@ -1,7 +1,7 @@ /********************************************************************* * Software License Agreement (BSD License) * -* Copyright (c) 2010, Rosen Diankov, Willow Garage, Inc. +* Copyright (c) 2010, University of Tokyo * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -1763,179 +1763,15 @@ protected: /// \brief extract the robot manipulators void _ExtractRobotManipulators(const domArticulated_systemRef as) { - for(size_t ie = 0; ie < as->getExtra_array().getCount(); ++ie) { - domExtraRef pextra = as->getExtra_array()[ie]; - if( strcmp(pextra->getType(), "manipulator") == 0 ) { - std::string name = pextra->getAttribute("name"); - if( name.size() == 0 ) { - name = str(boost::format("manipulator%d")%_nGlobalManipulatorId++); - } - domTechniqueRef tec = _ExtractOpenRAVEProfile(pextra->getTechnique_array()); - if( !!tec ) { -// RobotBase::ManipulatorPtr pmanip(new RobotBase::Manipulator(probot)); -// pmanip->_name = name; -// daeElement* pframe_origin = tec->getChild("frame_origin"); -// daeElement* pframe_tip = tec->getChild("frame_tip"); -// if( !!pframe_origin ) { -// domLinkRef plink = daeSafeCast(daeSidRef(pframe_origin->getAttribute("link"), as).resolve().elt); -// if( !!plink ) { -// pmanip->_pBase = boost::static_pointer_cast(_getUserData(plink)->p); -// } -// if( !pmanip->_pBase ) { -// ROS_WARN_STREAM(str(boost::format("failed to find manipulator %s frame origin %s\n")%name%pframe_origin->getAttribute("link"))); -// continue; -// } -// } -// if( !!pframe_tip ) { -// daeElementRef plink = daeSafeCast(daeSidRef(pframe_tip->getAttribute("link"), as).resolve().elt); -// if( !!plink ) { -// pmanip->_pEndEffector = boost::static_pointer_cast(_getUserData(plink)->p); -// } -// if( !pmanip->_pEndEffector ) { -// ROS_WARN_STREAM(str(boost::format("failed to find manipulator %s frame tip %s\n")%name%pframe_tip->getAttribute("link"))); -// continue; -// } -// pmanip->_tGrasp = _ExtractFullTransformFromChildren(pframe_tip); -// } -// -// for(size_t ic = 0; ic < tec->getContents().getCount(); ++ic) { -// daeElementRef pgripper_axis = tec->getContents()[ic]; -// if( pgripper_axis->getElementName() == std::string("gripper_axis") ) { -// domAxis_constraintRef paxis = daeSafeCast(daeSidRef(pgripper_axis->getAttribute("axis"), as).resolve().elt); -// if( !!paxis ) { -// boost::shared_ptr pdofindex = boost::static_pointer_cast(_getUserData(paxis)->p); -// if( !!pdofindex ) { -// if( *pdofindex < 0 ) { -// ROS_WARN_STREAM(str(boost::format("manipulator %s gripper axis %s references passive joint\n")%name%pgripper_axis->getAttribute("axis"))); -// } -// else { -// float closingdirection = 0; -// daeElementRef pclosingdirection = daeElementRef(pgripper_axis->getChild("closingdirection")); -// if( !pclosingdirection || !resolveCommon_float_or_param(pclosingdirection,as,closingdirection) ) { -// ROS_WARN_STREAM(str(boost::format("manipulator %s gripper axis %s failed to process closing direction\n")%name%pgripper_axis->getAttribute("axis"))); -// } -// pmanip->_vgripperdofindices.push_back(*pdofindex); -// pmanip->_vClosingDirection.push_back((double)closingdirection); -// } -// continue; -// } -// } -// ROS_WARN_STREAM(str(boost::format("could not find manipulator gripper axis %s\n")%pgripper_axis->getAttribute("axis"))); -// } -// } -// probot->GetManipulators().push_back(pmanip); - } - else { - ROS_WARN_STREAM(str(boost::format("cannot create robot %s manipulator %s\n")%_model.name_%name)); - } - } - } + ROS_DEBUG("collada manipulators not supported yet"); } /// \brief Extract Sensors attached to a Robot void _ExtractRobotAttachedSensors(const domArticulated_systemRef as) { - for (size_t ie = 0; ie < as->getExtra_array().getCount(); ie++) { - domExtraRef pextra = as->getExtra_array()[ie]; - if( strcmp(pextra->getType(), "sensor") == 0 ) { - std::string name = pextra->getAttribute("name"); - if( name.size() == 0 ) { - name = str(boost::format("sensor%d")%_nGlobalSensorId++); - } - domTechniqueRef tec = _ExtractOpenRAVEProfile(pextra->getTechnique_array()); - if( !!tec ) { -// RobotBase::AttachedSensorPtr pattachedsensor(new RobotBase::AttachedSensor(probot)); -// pattachedsensor->_name = name; -// daeElement* pframe_origin = tec->getChild("frame_origin"); -// if( !!pframe_origin ) { -// domLinkRef plink = daeSafeCast(daeSidRef(pframe_origin->getAttribute("link"), as).resolve().elt); -// if( !!plink ) { -// pattachedsensor->pattachedlink = boost::static_pointer_cast(_getUserData(plink)->p); -// } -// if( !pattachedsensor->pattachedlink.lock() ) { -// ROS_WARN_STREAM(str(boost::format("failed to find manipulator %s frame origin %s\n")%name%pframe_origin->getAttribute("link"))); -// continue; -// } -// pattachedsensor->trelative = _ExtractFullTransformFromChildren(pframe_origin); -// } -// if( !_ExtractSensor(pattachedsensor->psensor,tec->getChild("instance_sensor")) ) { -// ROS_WARN_STREAM(str(boost::format("cannot find instance_sensor for attached sensor %s:%s\n")%_model.name_%name)); -// } -// else { -// pattachedsensor->pdata = pattachedsensor->GetSensor()->CreateSensorData(); -// } -// probot->GetAttachedSensors().push_back(pattachedsensor); - } - else { - ROS_WARN_STREAM(str(boost::format("cannot create robot %s attached sensor %s\n")%_model.name_%name)); - } - } - } + ROS_DEBUG("collada sensors not supported yet"); } - /// \brief Extract an instance of a sensor -// bool _ExtractSensor(SensorBasePtr& psensor, daeElementRef instance_sensor) -// { -// if( !instance_sensor ) { -// return false; -// } -// if( instance_sensor->hasAttribute("url") ) { -// ROS_WARN_STREAM("instance_sensor has no url\n"); -// return false; -// } -// -// std::string instance_id = instance_sensor->getAttribute("id"); -// std::string instance_url = instance_sensor->getAttribute("url"); -// daeElementRef domsensor = _getElementFromUrl(daeURI(*instance_sensor,instance_url)); -// if( !domsensor ) { -// ROS_WARN_STREAM(str(boost::format("failed to find senor id %s url=%s\n")%instance_id%instance_url)); -// return false; -// } -// if( !domsensor->hasAttribute("type") ) { -// ROS_WARN_STREAM("collada needs type attribute\n"); -// return false; -// } -// psensor = RaveCreateSensor(_penv, domsensor->getAttribute("type")); -// if( !psensor ) { -// return false; -// } -// -// // Create the custom XML reader to read in the data (determined by users) -// BaseXMLReaderPtr pcurreader = RaveCallXMLReader(PT_Sensor,psensor->GetXMLId(),psensor, std::list >()); -// if( !pcurreader ) { -// pcurreader.reset(); -// return false; -// } -// _ProcessXMLReader(pcurreader,domsensor); -// psensor->__mapReadableInterfaces[psensor->GetXMLId()] = pcurreader->GetReadable(); -// if( !psensor->Init(instance_sensor->getAttribute("args")) ) { -// ROS_WARN_STREAM(str(boost::format("failed to initialize sensor %s\n"))); -// psensor.reset(); -// } -// return true; -// } - - /// \brief feed the collada data into the base readers xml class -// static void _ProcessXMLReader(BaseXMLReaderPtr preader, daeElementRef elt) -// { -// daeTArray children; -// elt->getChildren(children); -// std::list > atts; -// for (size_t i = 0; i < children.getCount(); i++) { -// std::string xmltag = tolowerstring(children[i]->getElementName()); -// daeTArray domatts; -// children[i]->getAttributes(domatts); -// atts.clear(); -// for(size_t j = 0; j < domatts.getCount(); ++j) { -// atts.push_back(std::make_pair(domatts[j].name,domatts[j].value)); -// } -// preader->startElement(xmltag,atts); -// _ProcessXMLReader(preader,children[i]); -// preader->characters(children[i]->getCharData()); -// preader->endElement(xmltag); -// } -// } - inline daeElementRef _getElementFromUrl(const daeURI &uri) { return daeStandardURIResolver(*_collada).resolveElement(uri); diff --git a/urdf/src/model.cpp b/urdf/src/model.cpp index f898828..c4106d7 100644 --- a/urdf/src/model.cpp +++ b/urdf/src/model.cpp @@ -65,7 +65,7 @@ void Model::clear() bool Model::initFile(const std::string& filename) { // necessary for COLLADA compatibility - if( 0&&IsColladaFile(filename) ) { + if( IsColladaFile(filename) ) { return urdfFromColladaFile(filename,*this); } TiXmlDocument xml_doc; From 7d260dc855eee755568ce3b02f5ef8e0476c6c6a Mon Sep 17 00:00:00 2001 From: rdiankov Date: Fri, 3 Dec 2010 12:32:02 +0000 Subject: [PATCH 224/245] updated colladadom include directories in makefile --- colladadom/Makefile | 1 - colladadom/manifest.xml | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/colladadom/Makefile b/colladadom/Makefile index efb8121..44e95ec 100644 --- a/colladadom/Makefile +++ b/colladadom/Makefile @@ -29,7 +29,6 @@ installed: wiped $(SOURCE_DIR)/unpacked @echo "making it" cd $(SOURCE_DIR)/dom && make $(ROS_PARALLEL_JOBS) cp -rf $(SOURCE_DIR)/dom/include/* $(ROOT)/include/ - mv $(ROOT)/include/1.5/dom $(ROOT)/include/dom cp -rf $(SOURCE_DIR)/dom/build/$(OS)-1.5/*.* $(ROOT)/lib/ touch installed diff --git a/colladadom/manifest.xml b/colladadom/manifest.xml index 194318d..c244c89 100644 --- a/colladadom/manifest.xml +++ b/colladadom/manifest.xml @@ -14,8 +14,8 @@ - - + + From 2758eff268a6dbf0b7f2a1fce5b79f237c23a807 Mon Sep 17 00:00:00 2001 From: rdiankov Date: Mon, 6 Dec 2010 14:19:24 +0000 Subject: [PATCH 225/245] fixed urdf compilation for older linux distros that do not have msktemps --- urdf/CMakeLists.txt | 6 ++++++ urdf/src/collada_model_reader.cpp | 18 +++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/urdf/CMakeLists.txt b/urdf/CMakeLists.txt index 64d4b42..96355f2 100644 --- a/urdf/CMakeLists.txt +++ b/urdf/CMakeLists.txt @@ -21,6 +21,12 @@ set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) rosbuild_gensrv() +# necessary for collada reader to create the temporary dae files due to limitations in the URDF geometry +check_function_exists(mkstemps HAVE_MKSTEMPS) +if( HAVE_MKSTEMPS ) + add_definitions("-DHAVE_MKSTEMPS") +endif() + #common commands for building c++ executables and libraries rosbuild_add_library(${PROJECT_NAME} src/link.cpp src/joint.cpp src/model.cpp src/collada_model_reader.cpp) #target_link_libraries(${PROJECT_NAME} another_library) diff --git a/urdf/src/collada_model_reader.cpp b/urdf/src/collada_model_reader.cpp index c5cc462..8778559 100644 --- a/urdf/src/collada_model_reader.cpp +++ b/urdf/src/collada_model_reader.cpp @@ -39,6 +39,7 @@ #include #include #include +#include #include #include #include @@ -55,6 +56,11 @@ #include #include +#ifndef HAVE_MKSTEMPS +#include +#include +#endif + #define FOREACH(it, v) for(typeof((v).begin()) it = (v).begin(); it != (v).end(); (it)++) #define FOREACHC FOREACH @@ -1110,9 +1116,19 @@ protected: \n\ ")%name%name); - //= str(boost::format("%s/models/%s.dae")%_resourcedir%name); +#ifdef HAVE_MKSTEMPS geometry->filename = str(boost::format("/tmp/collada_model_reader_%s_XXXXXX.dae")%name); int fd = mkstemps(&geometry->filename[0],4); +#else + do { + geometry->filename = str(boost::format("/tmp/collada_model_reader_%s_%d.dae")%name%rand()); + } while(!!std::ifstream(geometry->filename.c_str())); + int fd = open(geometry->filename.c_str(),O_WRONLY|O_CREAT|O_EXCL); + if( fd == -1 ) { + ROS_ERROR("failed to open geometry dae file %s",geometry->filename.c_str()); + return geometry; + } +#endif //ROS_INFO("temp file: %s",geometry->filename.c_str()); std::string daedatastr = daedata.str(); if( (size_t)write(fd,daedatastr.c_str(),daedatastr.size()) != daedatastr.size() ) { From 0c6cec8356d8d640b4b190228ace890490615139 Mon Sep 17 00:00:00 2001 From: rdiankov Date: Tue, 7 Dec 2010 12:47:01 +0000 Subject: [PATCH 226/245] major update on collada exporter, now supports writing articulated systems along with parsing the dae meshes --- collada_urdf/CMakeLists.txt | 2 +- .../include/collada_urdf/collada_urdf.h | 44 +- .../include/collada_urdf/collada_writer.h | 144 -- .../include/collada_urdf/stl_loader.h | 95 -- collada_urdf/manifest.xml | 3 +- collada_urdf/src/collada_urdf.cpp | 1233 ++++++++++++++++- collada_urdf/src/collada_writer.cpp | 975 ------------- collada_urdf/src/stl_loader.cpp | 153 -- collada_urdf/src/urdf_to_collada.cpp | 7 +- urdf/manifest.xml | 1 + 10 files changed, 1217 insertions(+), 1440 deletions(-) delete mode 100644 collada_urdf/include/collada_urdf/collada_writer.h delete mode 100644 collada_urdf/include/collada_urdf/stl_loader.h delete mode 100644 collada_urdf/src/collada_writer.cpp delete mode 100644 collada_urdf/src/stl_loader.cpp diff --git a/collada_urdf/CMakeLists.txt b/collada_urdf/CMakeLists.txt index ee272a6..c7daaff 100644 --- a/collada_urdf/CMakeLists.txt +++ b/collada_urdf/CMakeLists.txt @@ -4,7 +4,7 @@ set(ROS_BUILD_TYPE Debug) rosbuild_init() set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) -rosbuild_add_library(collada_urdf src/collada_urdf.cpp src/collada_writer.cpp src/stl_loader.cpp) +rosbuild_add_library(collada_urdf src/collada_urdf.cpp) rosbuild_link_boost(collada_urdf system) rosbuild_add_executable(urdf_to_collada src/urdf_to_collada.cpp) diff --git a/collada_urdf/include/collada_urdf/collada_urdf.h b/collada_urdf/include/collada_urdf/collada_urdf.h index 44f5837..558e51f 100644 --- a/collada_urdf/include/collada_urdf/collada_urdf.h +++ b/collada_urdf/include/collada_urdf/collada_urdf.h @@ -1,7 +1,7 @@ /********************************************************************* * Software License Agreement (BSD License) * -* Copyright (c) 2010, Willow Garage, Inc. +* Copyright (c) 2010, Willow Garage, Inc., University of Tokyo * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -32,17 +32,14 @@ * POSSIBILITY OF SUCH DAMAGE. *********************************************************************/ -/* Author: Tim Field */ +/* Authors: Tim Field, Rosen Diankov */ #ifndef COLLADA_URDF_COLLADA_URDF_H #define COLLADA_URDF_COLLADA_URDF_H #include - #include - #include - #include "urdf/model.h" namespace collada_urdf { @@ -53,33 +50,20 @@ public: ColladaUrdfException(std::string const& what); }; -/** Construct a COLLADA DOM from an URDF file - * \param file The filename from where to read the URDF - * \param dom The resulting COLLADA DOM - * \return true on success, false on failure - */ -bool colladaFromUrdfFile(std::string const& file, boost::shared_ptr& dom); +enum WriteOptions +{ + WO_IgnoreCollisionGeometry = 1, ///< if set, will use only the visual geometry +}; -/** Construct a COLLADA DOM from a string containing URDF - * \param xml A string containing the XML description of the robot - * \param dom The resulting COLLADA DOM - * \return true on success, false on failure +/** Construct a COLLADA DOM from an URDF model + + \param robot_model The initialized robot model + \param dom The resulting COLLADA DOM + \param writeoptions A combination of \ref WriteOptions + + \return true on success, false on failure */ -bool colladaFromUrdfString(std::string const& xml, boost::shared_ptr& dom); - -/** Construct a COLLADA DOM from a TiXmlDocument containing URDF - * \param xml_doc The TiXmlDocument containing URDF - * \param dom The resulting COLLADA DOM - * \return true on success, false on failure - */ -bool colladaFromUrdfXml(TiXmlDocument* xml_doc, boost::shared_ptr& dom); - -/** Construct a COLLADA DOM from a URDF robot model - * \param robot_model The URDF robot model - * \param dom The resulting COLLADA DOM - * \return true on success, false on failure - */ -bool colladaFromUrdfModel(urdf::Model const& robot_model, boost::shared_ptr& dom); +bool colladaFromUrdfModel(const urdf::Model& robot_model, boost::shared_ptr& dom, int writeoptions=0); /** Write a COLLADA DOM to a file * \param dom COLLADA DOM to write diff --git a/collada_urdf/include/collada_urdf/collada_writer.h b/collada_urdf/include/collada_urdf/collada_writer.h deleted file mode 100644 index c9c8297..0000000 --- a/collada_urdf/include/collada_urdf/collada_writer.h +++ /dev/null @@ -1,144 +0,0 @@ -/********************************************************************* -* Software License Agreement (BSD License) -* -* Copyright (c) 2010, Willow Garage, Inc. -* All rights reserved. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions -* are met: -* -* * Redstributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* * Redistributions in binary form must reproduce the above -* copyright notice, this list of conditions and the following -* disclaimer in the documentation and/or other materials provided -* with the distribution. -* * Neither the name of the Willow Garage nor the names of its -* contributors may be used to endorse or promote products derived -* from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -* POSSIBILITY OF SUCH DAMAGE. -*********************************************************************/ - -/* Author: Tim Field */ - -#ifndef COLLADA_URDF_COLLADA_WRITER_H -#define COLLADA_URDF_COLLADA_WRITER_H - -#include "collada_urdf/collada_urdf.h" - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace collada_urdf { - -class Mesh; - -/** - * Implements writing urdf::Model objects to a COLLADA DOM. - * - * The API for this class is unstable. The public API for collada_urdf is declared in collada_urdf.h. - */ -class ColladaWriter : public daeErrorHandler -{ -private: - struct SCENE - { - domVisual_sceneRef vscene; - domKinematics_sceneRef kscene; - domPhysics_sceneRef pscene; - domInstance_with_extraRef viscene; - domInstance_kinematics_sceneRef kiscene; - domInstance_with_extraRef piscene; - }; - -public: - ColladaWriter(urdf::Model const& robot); - virtual ~ColladaWriter(); - - boost::shared_ptr convert(); - -protected: - virtual void handleError(daeString msg); - virtual void handleWarning(daeString msg); - -private: - void initDocument(std::string const& documentName); - SCENE createScene(); - - void setupPhysics(SCENE const& scene); - - void addGeometries(); - void loadMesh(std::string const& filename, domGeometryRef geometry, std::string const& geometry_id); - bool loadMeshWithSTLLoader(resource_retriever::MemoryResource const& resource, domGeometryRef geometry, std::string const& geometry_id); - void buildMeshFromSTLLoader(boost::shared_ptr stl_mesh, daeElementRef parent, std::string const& geometry_id); - - void addKinematics(SCENE const& scene); - void addJoints(daeElementRef parent); - void addKinematicLink(boost::shared_ptr urdf_link, daeElementRef parent, int& link_num); - - void addVisuals(SCENE const& scene); - void addVisualLink(boost::shared_ptr urdf_link, daeElementRef parent, int& link_num); - - void addMaterials(); - domEffectRef addEffect(std::string const& geometry_id, urdf::Color const& color_ambient, urdf::Color const& color_diffuse); - - void addBindings(SCENE const& scene); - - domTranslateRef addTranslate(daeElementRef parent, urdf::Vector3 const& position, daeElementRef before = NULL, bool ignore_zero_translations = false); - domRotateRef addRotate(daeElementRef parent, urdf::Rotation const& r, daeElementRef before = NULL, bool ignore_zero_rotations = false); - void addMimicJoint(domFormulaRef formula, const std::string& joint_sid,const std::string& joint_mimic_sid, double multiplier, double offset); - std::string getTimeStampString() const; - -private: - static int s_doc_count_; - - urdf::Model robot_; - boost::shared_ptr collada_; - domCOLLADA* dom_; - domCOLLADA::domSceneRef scene_; - - domLibrary_geometriesRef geometriesLib_; - domLibrary_visual_scenesRef visualScenesLib_; - domLibrary_kinematics_scenesRef kinematicsScenesLib_; - domLibrary_kinematics_modelsRef kinematicsModelsLib_; - domLibrary_jointsRef jointsLib_; - domLibrary_physics_scenesRef physicsScenesLib_; - domLibrary_materialsRef materialsLib_; - domLibrary_effectsRef effectsLib_; - - domKinematics_modelRef kmodel_; - - std::map geometry_ids_; //!< link.name -> geometry.id - std::map joint_sids_; //!< joint.name -> joint.sid - std::map node_ids_; //!< joint.name -> node.id -}; - -} - -#endif diff --git a/collada_urdf/include/collada_urdf/stl_loader.h b/collada_urdf/include/collada_urdf/stl_loader.h deleted file mode 100644 index 4241c54..0000000 --- a/collada_urdf/include/collada_urdf/stl_loader.h +++ /dev/null @@ -1,95 +0,0 @@ -/********************************************************************* -* Software License Agreement (BSD License) -* -* Copyright (c) 2010, Willow Garage, Inc. -* All rights reserved. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions -* are met: -* -* * Redstributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* * Redistributions in binary form must reproduce the above -* copyright notice, this list of conditions and the following -* disclaimer in the documentation and/or other materials provided -* with the distribution. -* * Neither the name of the Willow Garage nor the names of its -* contributors may be used to endorse or promote products derived -* from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -* POSSIBILITY OF SUCH DAMAGE. -*********************************************************************/ - -/* Author: Tim Field */ - -#ifndef COLLADA_URDF_STL_LOADER_H -#define COLLADA_URDF_STL_LOADER_H - -#include - -#include -#include - -#include - -namespace collada_urdf { - -class Vector3 -{ -public: - Vector3(float x, float y, float z); - - bool operator==(Vector3 const& v) const; - - float x; - float y; - float z; -}; - -class Mesh -{ -public: - Mesh(); - - int getVertexIndex(Vector3 const& v) const; - - void addVertex(Vector3 const& v); - void addNormal(Vector3 const& n); - void addIndex(unsigned int i); - -public: - std::vector vertices; - std::vector normals; - std::vector indices; -}; - -class STLLoader -{ -public: - boost::shared_ptr load(std::string const& filename); - -private: - FILE* file_; - boost::shared_ptr mesh_; - - void readBinary(); - uint32_t readLongInt(); - uint16_t readShortInt(); - float readFloat(); -}; - -} - -#endif diff --git a/collada_urdf/manifest.xml b/collada_urdf/manifest.xml index 7addbdb..502f9d7 100644 --- a/collada_urdf/manifest.xml +++ b/collada_urdf/manifest.xml @@ -6,7 +6,7 @@ Implements robot-specific COLLADA extensions as defined by http://openrave.programmingvision.com/index.php/Started:COLLADA - Tim Field + Tim Field and Rosen Diankov BSD http://ros.org/wiki/collada_urdf @@ -15,6 +15,7 @@ + diff --git a/collada_urdf/src/collada_urdf.cpp b/collada_urdf/src/collada_urdf.cpp index 63ea86e..394d648 100644 --- a/collada_urdf/src/collada_urdf.cpp +++ b/collada_urdf/src/collada_urdf.cpp @@ -1,7 +1,7 @@ /********************************************************************* * Software License Agreement (BSD License) * -* Copyright (c) 2010, Willow Garage, Inc. +* Copyright (c) 2010, Willow Garage, Inc., University of Tokyo * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -32,59 +32,1212 @@ * POSSIBILITY OF SUCH DAMAGE. *********************************************************************/ -/* Author: Tim Field */ +/* Authors: Rosen Diankov, Tim Field */ #include "collada_urdf/collada_urdf.h" -#include "collada_urdf/collada_writer.h" +#include +#include +#include -using std::string; -using boost::shared_ptr; +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include + +#define FOREACH(it, v) for(typeof((v).begin()) it = (v).begin(); it != (v).end(); (it)++) +#define FOREACHC FOREACH + +using namespace std; namespace collada_urdf { +/// ResourceIOStream is copied from rviz (BSD, Willow Garage) +class ResourceIOStream : public Assimp::IOStream +{ +public: + ResourceIOStream(const resource_retriever::MemoryResource& res) + : res_(res) + , pos_(res.data.get()) + {} + + ~ResourceIOStream() + {} + + size_t Read(void* buffer, size_t size, size_t count) + { + size_t to_read = size * count; + if (pos_ + to_read > res_.data.get() + res_.size) + { + to_read = res_.size - (pos_ - res_.data.get()); + } + + memcpy(buffer, pos_, to_read); + pos_ += to_read; + + return to_read; + } + + size_t Write( const void* buffer, size_t size, size_t count) { ROS_BREAK(); return 0; } + + aiReturn Seek( size_t offset, aiOrigin origin) + { + uint8_t* new_pos = 0; + switch (origin) + { + case aiOrigin_SET: + new_pos = res_.data.get() + offset; + break; + case aiOrigin_CUR: + new_pos = pos_ + offset; // TODO is this right? can offset really not be negative + break; + case aiOrigin_END: + new_pos = res_.data.get() + res_.size - offset; // TODO is this right? + break; + default: + ROS_BREAK(); + } + + if (new_pos < res_.data.get() || new_pos > res_.data.get() + res_.size) + { + return aiReturn_FAILURE; + } + + pos_ = new_pos; + return aiReturn_SUCCESS; + } + + size_t Tell() const + { + return pos_ - res_.data.get(); + } + + size_t FileSize() const + { + return res_.size; + } + + void Flush() {} + +private: + resource_retriever::MemoryResource res_; + uint8_t* pos_; +}; + +/// ResourceIOSystem is copied from rviz (BSD, Willow Garage) +class ResourceIOSystem : public Assimp::IOSystem +{ +public: + ResourceIOSystem() + { + } + + ~ResourceIOSystem() + { + } + + // Check whether a specific file exists + bool Exists(const char* file) const + { + // Ugly -- two retrievals where there should be one (Exists + Open) + // resource_retriever needs a way of checking for existence + // TODO: cache this + resource_retriever::MemoryResource res; + try { + res = retriever_.get(file); + } + catch (resource_retriever::Exception& e) { + return false; + } + + return true; + } + + // Get the path delimiter character we'd like to see + char getOsSeparator() const + { + return '/'; + } + + // ... and finally a method to open a custom stream + Assimp::IOStream* Open(const char* file, const char* mode) + { + ROS_ASSERT(mode == std::string("r") || mode == std::string("rb")); + + // Ugly -- two retrievals where there should be one (Exists + Open) + // resource_retriever needs a way of checking for existence + resource_retriever::MemoryResource res; + try { + res = retriever_.get(file); + } + catch (resource_retriever::Exception& e) { + return 0; + } + + return new ResourceIOStream(res); + } + + void Close(Assimp::IOStream* stream) { delete stream; } + +private: + mutable resource_retriever::Retriever retriever_; +}; + +/** \brief Implements writing urdf::Model objects to a COLLADA DOM. +*/ +class ColladaWriter : public daeErrorHandler +{ +private: + struct SCENE + { + domVisual_sceneRef vscene; + domKinematics_sceneRef kscene; + domPhysics_sceneRef pscene; + domInstance_with_extraRef viscene; + domInstance_kinematics_sceneRef kiscene; + domInstance_with_extraRef piscene; + }; + + struct LINKOUTPUT + { + list > listusedlinks; + list > listprocesseddofs; + daeElementRef plink; + domNodeRef pnode; + }; + + struct kinematics_model_output + { + struct axis_output + { + //axis_output(const string& sid, KinBody::JointConstPtr pjoint, int iaxis) : sid(sid), pjoint(pjoint), iaxis(iaxis) {} + axis_output() : iaxis(0) {} + string sid, nodesid; + boost::shared_ptr pjoint; + int iaxis; + string jointnodesid; + }; + domKinematics_modelRef kmodel; + std::vector vaxissids; + std::vector vlinksids; + }; + + struct axis_sids + { + axis_sids(const string& axissid, const string& valuesid, const string& jointnodesid) : axissid(axissid), valuesid(valuesid), jointnodesid(jointnodesid) {} + string axissid, valuesid, jointnodesid; + }; + + struct instance_kinematics_model_output + { + domInstance_kinematics_modelRef ikm; + std::vector vaxissids; + boost::shared_ptr kmout; + std::vector > vkinematicsbindings; + }; + + struct instance_articulated_system_output + { + domInstance_articulated_systemRef ias; + std::vector vaxissids; + std::vector vlinksids; + std::vector > vkinematicsbindings; + }; + +public: + ColladaWriter(const urdf::Model& robot, int writeoptions) : _writeoptions(writeoptions), _robot(robot), _dom(NULL) { + daeErrorHandler::setErrorHandler(this); + _collada.reset(new DAE); + _collada->setIOPlugin(NULL); + _collada->setDatabase(NULL); + _importer.SetIOHandler(new ResourceIOSystem()); + } + virtual ~ColladaWriter() {} + + boost::shared_ptr convert() + { + try { + const char* documentName = "urdf_snapshot"; + daeDocument *doc = NULL; + daeInt error = _collada->getDatabase()->insertDocument(documentName, &doc ); // also creates a collada root + if (error != DAE_OK || doc == NULL) { + throw ColladaUrdfException("Failed to create document"); + } + _dom = daeSafeCast(doc->getDomRoot()); + _dom->setAttribute("xmlns:math","http://www.w3.org/1998/Math/MathML"); + + //create the required asset tag + domAssetRef asset = daeSafeCast( _dom->add( COLLADA_ELEMENT_ASSET ) ); + { + // facet becomes owned by locale, so no need to explicitly delete + boost::posix_time::time_facet* facet = new boost::posix_time::time_facet("%Y-%m-%dT%H:%M:%s"); + std::stringstream ss; + ss.imbue(std::locale(ss.getloc(), facet)); + ss << boost::posix_time::second_clock::local_time(); + + domAsset::domCreatedRef created = daeSafeCast( asset->add( COLLADA_ELEMENT_CREATED ) ); + created->setValue(ss.str().c_str()); + domAsset::domModifiedRef modified = daeSafeCast( asset->add( COLLADA_ELEMENT_MODIFIED ) ); + modified->setValue(ss.str().c_str()); + + domAsset::domContributorRef contrib = daeSafeCast( asset->add( COLLADA_TYPE_CONTRIBUTOR ) ); + domAsset::domContributor::domAuthoring_toolRef authoringtool = daeSafeCast( contrib->add( COLLADA_ELEMENT_AUTHORING_TOOL ) ); + authoringtool->setValue("URDF Collada Writer"); + + domAsset::domUnitRef units = daeSafeCast( asset->add( COLLADA_ELEMENT_UNIT ) ); + units->setMeter(1); + units->setName("meter"); + + domAsset::domUp_axisRef zup = daeSafeCast( asset->add( COLLADA_ELEMENT_UP_AXIS ) ); + zup->setValue(UP_AXIS_Z_UP); + } + + _globalscene = _dom->getScene(); + if( !_globalscene ) { + _globalscene = daeSafeCast( _dom->add( COLLADA_ELEMENT_SCENE ) ); + } + + _visualScenesLib = daeSafeCast(_dom->add(COLLADA_ELEMENT_LIBRARY_VISUAL_SCENES)); + _visualScenesLib->setId("vscenes"); + _geometriesLib = daeSafeCast(_dom->add(COLLADA_ELEMENT_LIBRARY_GEOMETRIES)); + _geometriesLib->setId("geometries"); + _effectsLib = daeSafeCast(_dom->add(COLLADA_ELEMENT_LIBRARY_EFFECTS)); + _effectsLib->setId("effects"); + _materialsLib = daeSafeCast(_dom->add(COLLADA_ELEMENT_LIBRARY_MATERIALS)); + _materialsLib->setId("materials"); + _kinematicsModelsLib = daeSafeCast(_dom->add(COLLADA_ELEMENT_LIBRARY_KINEMATICS_MODELS)); + _kinematicsModelsLib->setId("kmodels"); + _articulatedSystemsLib = daeSafeCast(_dom->add(COLLADA_ELEMENT_LIBRARY_ARTICULATED_SYSTEMS)); + _articulatedSystemsLib->setId("asystems"); + _kinematicsScenesLib = daeSafeCast(_dom->add(COLLADA_ELEMENT_LIBRARY_KINEMATICS_SCENES)); + _kinematicsScenesLib->setId("kscenes"); + _physicsScenesLib = daeSafeCast(_dom->add(COLLADA_ELEMENT_LIBRARY_PHYSICS_SCENES)); + _physicsScenesLib->setId("pscenes"); + domExtraRef pextra_library_sensors = daeSafeCast(_dom->add(COLLADA_ELEMENT_EXTRA)); + pextra_library_sensors->setId("sensors"); + pextra_library_sensors->setType("library_sensors"); + _sensorsLib = daeSafeCast(pextra_library_sensors->add(COLLADA_ELEMENT_TECHNIQUE)); + _sensorsLib->setProfile("OpenRAVE"); ///< documented profile on robot extensions + + _CreateScene(); + _WritePhysics(); + _WriteRobot(); + _WriteBindingsInstance_kinematics_scene(); + return _collada; + } + catch (ColladaUrdfException ex) { + ROS_ERROR("Error converting: %s", ex.what()); + return boost::shared_ptr(); + } + } + +protected: + virtual void handleError(daeString msg) { throw ColladaUrdfException(msg); } + virtual void handleWarning(daeString msg) { std::cerr << "COLLADA DOM warning: " << msg << std::endl; } + + void _CreateScene() + { + // Create visual scene + _scene.vscene = daeSafeCast(_visualScenesLib->add(COLLADA_ELEMENT_VISUAL_SCENE)); + _scene.vscene->setId("vscene"); + _scene.vscene->setName("URDF Visual Scene"); + + // Create kinematics scene + _scene.kscene = daeSafeCast(_kinematicsScenesLib->add(COLLADA_ELEMENT_KINEMATICS_SCENE)); + _scene.kscene->setId("kscene"); + _scene.kscene->setName("URDF Kinematics Scene"); + + // Create physic scene + _scene.pscene = daeSafeCast(_physicsScenesLib->add(COLLADA_ELEMENT_PHYSICS_SCENE)); + _scene.pscene->setId("pscene"); + _scene.pscene->setName("URDF Physics Scene"); + + // Create instance visual scene + _scene.viscene = daeSafeCast(_globalscene->add( COLLADA_ELEMENT_INSTANCE_VISUAL_SCENE )); + _scene.viscene->setUrl( (string("#") + string(_scene.vscene->getID())).c_str() ); + + // Create instance kinematics scene + _scene.kiscene = daeSafeCast(_globalscene->add( COLLADA_ELEMENT_INSTANCE_KINEMATICS_SCENE )); + _scene.kiscene->setUrl( (string("#") + string(_scene.kscene->getID())).c_str() ); + + // Create instance physics scene + _scene.piscene = daeSafeCast(_globalscene->add( COLLADA_ELEMENT_INSTANCE_PHYSICS_SCENE )); + _scene.piscene->setUrl( (string("#") + string(_scene.pscene->getID())).c_str() ); + } + + void _WritePhysics() { + domPhysics_scene::domTechnique_commonRef common = daeSafeCast(_scene.pscene->add(COLLADA_ELEMENT_TECHNIQUE_COMMON)); + // Create gravity + domTargetable_float3Ref g = daeSafeCast(common->add(COLLADA_ELEMENT_GRAVITY)); + g->getValue().set3 (0,0,0); + } + + /// \brief Write kinematic body in a given scene + void _WriteRobot(int id = 0) + { + ROS_DEBUG_STREAM(str(boost::format("writing robot as instance_articulated_system (%d) %s\n")%id%_robot.getName())); + string asid = str(boost::format("robot%d")%id); + string askid = str(boost::format("%s_kinematics")%asid); + string asmid = str(boost::format("%s_motion")%asid); + string iassid = str(boost::format("%s_inst")%asmid); + + domInstance_articulated_systemRef ias = daeSafeCast(_scene.kscene->add(COLLADA_ELEMENT_INSTANCE_ARTICULATED_SYSTEM)); + ias->setSid(iassid.c_str()); + ias->setUrl((string("#")+asmid).c_str()); + ias->setName(_robot.getName().c_str()); + + _iasout.reset(new instance_articulated_system_output()); + _iasout->ias = ias; + + // motion info + domArticulated_systemRef articulated_system_motion = daeSafeCast(_articulatedSystemsLib->add(COLLADA_ELEMENT_ARTICULATED_SYSTEM)); + articulated_system_motion->setId(asmid.c_str()); + domMotionRef motion = daeSafeCast(articulated_system_motion->add(COLLADA_ELEMENT_MOTION)); + domMotion_techniqueRef mt = daeSafeCast(motion->add(COLLADA_ELEMENT_TECHNIQUE_COMMON)); + domInstance_articulated_systemRef ias_motion = daeSafeCast(motion->add(COLLADA_ELEMENT_INSTANCE_ARTICULATED_SYSTEM)); + ias_motion->setUrl(str(boost::format("#%s")%askid).c_str()); + + // kinematics info + domArticulated_systemRef articulated_system_kinematics = daeSafeCast(_articulatedSystemsLib->add(COLLADA_ELEMENT_ARTICULATED_SYSTEM)); + articulated_system_kinematics->setId(askid.c_str()); + domKinematicsRef kinematics = daeSafeCast(articulated_system_kinematics->add(COLLADA_ELEMENT_KINEMATICS)); + domKinematics_techniqueRef kt = daeSafeCast(kinematics->add(COLLADA_ELEMENT_TECHNIQUE_COMMON)); + + _WriteInstance_kinematics_model(kinematics,askid,id); + + for(size_t idof = 0; idof < _ikmout->vaxissids.size(); ++idof) { + string axis_infosid = str(boost::format("axis_info_inst%d")%idof); + boost::shared_ptr pjoint = _ikmout->kmout->vaxissids.at(idof).pjoint; + BOOST_ASSERT(_mapjointindices[pjoint] == idof); + //int iaxis = _ikmout->kmout->vaxissids.at(idof).iaxis; + + // Kinematics axis info + domKinematics_axis_infoRef kai = daeSafeCast(kt->add(COLLADA_ELEMENT_AXIS_INFO)); + kai->setAxis(str(boost::format("%s/%s")%_ikmout->kmout->kmodel->getID()%_ikmout->kmout->vaxissids.at(idof).sid).c_str()); + kai->setSid(axis_infosid.c_str()); + bool bactive = !pjoint->mimic; + double flower=0, fupper=0; + if( pjoint->type != urdf::Joint::CONTINUOUS ) { + if( !!pjoint->limits ) { + flower = pjoint->limits->lower; + fupper = pjoint->limits->upper; + } + if( flower == fupper ) { + bactive = false; + } + double fmult = 1.0; + if( pjoint->type != urdf::Joint::PRISMATIC ) { + fmult = 180.0/M_PI; + } + domKinematics_limitsRef plimits = daeSafeCast(kai->add(COLLADA_ELEMENT_LIMITS)); + daeSafeCast(plimits->add(COLLADA_ELEMENT_MIN)->add(COLLADA_ELEMENT_FLOAT))->setValue(flower*fmult); + daeSafeCast(plimits->add(COLLADA_ELEMENT_MAX)->add(COLLADA_ELEMENT_FLOAT))->setValue(fupper*fmult); + } + + domCommon_bool_or_paramRef active = daeSafeCast(kai->add(COLLADA_ELEMENT_ACTIVE)); + daeSafeCast(active->add(COLLADA_ELEMENT_BOOL))->setValue(bactive); + domCommon_bool_or_paramRef locked = daeSafeCast(kai->add(COLLADA_ELEMENT_LOCKED)); + daeSafeCast(locked->add(COLLADA_ELEMENT_BOOL))->setValue(false); + + // Motion axis info + domMotion_axis_infoRef mai = daeSafeCast(mt->add(COLLADA_ELEMENT_AXIS_INFO)); + mai->setAxis(str(boost::format("%s/%s")%askid%axis_infosid).c_str()); + if( !!pjoint->limits ) { + domCommon_float_or_paramRef speed = daeSafeCast(mai->add(COLLADA_ELEMENT_SPEED)); + daeSafeCast(speed->add(COLLADA_ELEMENT_FLOAT))->setValue(pjoint->limits->velocity); + domCommon_float_or_paramRef accel = daeSafeCast(mai->add(COLLADA_ELEMENT_ACCELERATION)); + daeSafeCast(accel->add(COLLADA_ELEMENT_FLOAT))->setValue(pjoint->limits->effort); + } + } + + // write the bindings + string asmsym = str(boost::format("%s.%s")%asmid%_ikmout->ikm->getSid()); + string assym = str(boost::format("%s.%s")%_scene.kscene->getID()%_ikmout->ikm->getSid()); + FOREACH(it, _ikmout->vkinematicsbindings) { + domKinematics_bindRef abm = daeSafeCast(ias_motion->add(COLLADA_ELEMENT_BIND)); + abm->setSymbol(asmsym.c_str()); + daeSafeCast(abm->add(COLLADA_ELEMENT_PARAM))->setRef(it->first.c_str()); + domKinematics_bindRef ab = daeSafeCast(ias->add(COLLADA_ELEMENT_BIND)); + ab->setSymbol(assym.c_str()); + daeSafeCast(ab->add(COLLADA_ELEMENT_PARAM))->setRef(asmsym.c_str()); + _iasout->vkinematicsbindings.push_back(make_pair(string(ab->getSymbol()), it->second)); + } + for(size_t idof = 0; idof < _ikmout->vaxissids.size(); ++idof) { + const axis_sids& kas = _ikmout->vaxissids.at(idof); + domKinematics_bindRef abm = daeSafeCast(ias_motion->add(COLLADA_ELEMENT_BIND)); + abm->setSymbol(str(boost::format("%s.%s")%asmid%kas.axissid).c_str()); + daeSafeCast(abm->add(COLLADA_ELEMENT_PARAM))->setRef(kas.axissid.c_str()); + domKinematics_bindRef ab = daeSafeCast(ias->add(COLLADA_ELEMENT_BIND)); + ab->setSymbol(str(boost::format("%s.%s")%assym%kas.axissid).c_str()); + daeSafeCast(ab->add(COLLADA_ELEMENT_PARAM))->setRef(str(boost::format("%s.%s")%asmid%kas.axissid).c_str()); + string valuesid; + if( kas.valuesid.size() > 0 ) { + domKinematics_bindRef abmvalue = daeSafeCast(ias_motion->add(COLLADA_ELEMENT_BIND)); + abmvalue->setSymbol(str(boost::format("%s.%s")%asmid%kas.valuesid).c_str()); + daeSafeCast(abmvalue->add(COLLADA_ELEMENT_PARAM))->setRef(kas.valuesid.c_str()); + domKinematics_bindRef abvalue = daeSafeCast(ias->add(COLLADA_ELEMENT_BIND)); + valuesid = str(boost::format("%s.%s")%assym%kas.valuesid); + abvalue->setSymbol(valuesid.c_str()); + daeSafeCast(abvalue->add(COLLADA_ELEMENT_PARAM))->setRef(str(boost::format("%s.%s")%asmid%kas.valuesid).c_str()); + } + _iasout->vaxissids.push_back(axis_sids(ab->getSymbol(),valuesid,kas.jointnodesid)); + } + } + + /// \brief Write kinematic body in a given scene + virtual void _WriteInstance_kinematics_model(daeElementRef parent, const string& sidscope, int id) + { + ROS_DEBUG_STREAM(str(boost::format("writing instance_kinematics_model %s\n")%_robot.getName())); + boost::shared_ptr kmout = WriteKinematics_model(id); + + _ikmout.reset(new instance_kinematics_model_output()); + _ikmout->kmout = kmout; + _ikmout->ikm = daeSafeCast(parent->add(COLLADA_ELEMENT_INSTANCE_KINEMATICS_MODEL)); + + string symscope, refscope; + if( sidscope.size() > 0 ) { + symscope = sidscope+string("."); + refscope = sidscope+string("/"); + } + string ikmsid = str(boost::format("%s_inst")%kmout->kmodel->getID()); + _ikmout->ikm->setUrl(str(boost::format("#%s")%kmout->kmodel->getID()).c_str()); + _ikmout->ikm->setSid(ikmsid.c_str()); + + domKinematics_bindRef kbind = daeSafeCast(_ikmout->ikm->add(COLLADA_ELEMENT_BIND)); + kbind->setSymbol((symscope+ikmsid).c_str()); + daeSafeCast(kbind->add(COLLADA_ELEMENT_SIDREF))->setValue((refscope+ikmsid).c_str()); + _ikmout->vkinematicsbindings.push_back(make_pair(string(kbind->getSymbol()), str(boost::format("visual%d/node0")%id))); + + _ikmout->vaxissids.reserve(kmout->vaxissids.size()); + int i = 0; + FOREACH(it,kmout->vaxissids) { + domKinematics_bindRef kbind = daeSafeCast(_ikmout->ikm->add(COLLADA_ELEMENT_BIND)); + string ref = it->sid; + size_t index = ref.find("/"); + while(index != string::npos) { + ref[index] = '.'; + index = ref.find("/",index+1); + } + string sid = symscope+ikmsid+"."+ref; + kbind->setSymbol(sid.c_str()); + daeSafeCast(kbind->add(COLLADA_ELEMENT_SIDREF))->setValue((refscope+ikmsid+"/"+it->sid).c_str()); + double value=0; + double flower=0, fupper=0; + if( !!it->pjoint->limits ) { + flower = it->pjoint->limits->lower; + fupper = it->pjoint->limits->upper; + if( flower > 0 || fupper < 0 ) { + value = 0.5*(flower+fupper); + } + } + + domKinematics_newparamRef pvalueparam = daeSafeCast(_ikmout->ikm->add(COLLADA_ELEMENT_NEWPARAM)); + pvalueparam->setSid((sid+string("_value")).c_str()); + daeSafeCast(pvalueparam->add(COLLADA_ELEMENT_FLOAT))->setValue(value); + _ikmout->vaxissids.push_back(axis_sids(sid,pvalueparam->getSid(),kmout->vaxissids.at(i).jointnodesid)); + ++i; + } + } + + virtual boost::shared_ptr WriteKinematics_model(int id) + { + domKinematics_modelRef kmodel = daeSafeCast(_kinematicsModelsLib->add(COLLADA_ELEMENT_KINEMATICS_MODEL)); + string kmodelid = str(boost::format("kmodel%d")%id); + kmodel->setId(kmodelid.c_str()); + kmodel->setName(_robot.getName().c_str()); + + domKinematics_model_techniqueRef ktec = daeSafeCast(kmodel->add(COLLADA_ELEMENT_TECHNIQUE_COMMON)); + + // Create root node for the visual scene + domNodeRef pnoderoot = daeSafeCast(_scene.vscene->add(COLLADA_ELEMENT_NODE)); + string bodyid = str(boost::format("visual%d")%id); + pnoderoot->setId(bodyid.c_str()); + pnoderoot->setSid(bodyid.c_str()); + pnoderoot->setName(_robot.getName().c_str()); + + // Declare all the joints + _mapjointindices.clear(); + int index=0; + FOREACHC(itj, _robot.joints_) { + _mapjointindices[itj->second] = index++; + } + _maplinkindices.clear(); + index=0; + FOREACHC(itj, _robot.links_) { + _maplinkindices[itj->second] = index++; + } + _mapmaterialindices.clear(); + index=0; + FOREACHC(itj, _robot.materials_) { + _mapmaterialindices[itj->second] = index++; + } + + double lmin, lmax; + vector vdomjoints(_robot.joints_.size()); + boost::shared_ptr kmout(new kinematics_model_output()); + kmout->kmodel = kmodel; + kmout->vaxissids.resize(_robot.joints_.size()); + kmout->vlinksids.resize(_robot.links_.size()); + + FOREACHC(itjoint, _robot.joints_) { + boost::shared_ptr pjoint = itjoint->second; + int index = _mapjointindices[itjoint->second]; + domJointRef pdomjoint = daeSafeCast(ktec->add(COLLADA_ELEMENT_JOINT)); + string jointid = str(boost::format("joint%d")%index); + pdomjoint->setSid( jointid.c_str() ); + pdomjoint->setName(pjoint->name.c_str()); + domAxis_constraintRef axis; + if( !!pjoint->limits ) { + lmin=pjoint->limits->lower; + lmax=pjoint->limits->upper; + } + else { + lmin = lmax = 0; + } + + double fmult = 1.0; + switch(pjoint->type) { + case urdf::Joint::REVOLUTE: + case urdf::Joint::CONTINUOUS: + axis = daeSafeCast(pdomjoint->add(COLLADA_ELEMENT_REVOLUTE)); + fmult = 180.0f/M_PI; + lmin*=fmult; + lmax*=fmult; + break; + case urdf::Joint::PRISMATIC: + axis = daeSafeCast(pdomjoint->add(COLLADA_ELEMENT_PRISMATIC)); + break; + case urdf::Joint::FIXED: + axis = daeSafeCast(pdomjoint->add(COLLADA_ELEMENT_REVOLUTE)); + lmin = 0; + lmax = 0; + fmult = 0; + break; + default: + ROS_WARN_STREAM(str(boost::format("unsupported joint type specified %d")%(int)pjoint->type)); + break; + } + + if( !axis ) { + continue; + } + + int ia = 0; + string axisid = str(boost::format("axis%d")%ia); + axis->setSid(axisid.c_str()); + kmout->vaxissids.at(index).pjoint = pjoint; + kmout->vaxissids.at(index).sid = jointid+string("/")+axisid; + kmout->vaxissids.at(index).iaxis = ia; + domAxisRef paxis = daeSafeCast(axis->add(COLLADA_ELEMENT_AXIS)); + paxis->getValue().setCount(3); + paxis->getValue()[0] = pjoint->axis.x; + paxis->getValue()[1] = pjoint->axis.y; + paxis->getValue()[2] = pjoint->axis.z; + if( pjoint->type != urdf::Joint::CONTINUOUS ) { + domJoint_limitsRef plimits = daeSafeCast(axis->add(COLLADA_TYPE_LIMITS)); + daeSafeCast(plimits->add(COLLADA_ELEMENT_MIN))->getValue() = lmin; + daeSafeCast(plimits->add(COLLADA_ELEMENT_MAX))->getValue() = lmax; + } + vdomjoints.at(index) = pdomjoint; + } + + LINKOUTPUT childinfo = _WriteLink(_robot.getRoot(), ktec, pnoderoot, kmodel->getID()); + FOREACHC(itused, childinfo.listusedlinks) { + kmout->vlinksids.at(itused->first) = itused->second; + } + FOREACH(itprocessed,childinfo.listprocesseddofs) { + kmout->vaxissids.at(itprocessed->first).jointnodesid = itprocessed->second; + } + + // create the formulas for all mimic joints + FOREACHC(itjoint, _robot.joints_) { + int index = _mapjointindices[itjoint->second]; + boost::shared_ptr pjoint = itjoint->second; + if( !pjoint->mimic ) { + continue; + } + + domFormulaRef pf = daeSafeCast(ktec->add(COLLADA_ELEMENT_FORMULA)); + string formulaid = str(boost::format("joint%d.formula")%index); + pf->setSid(formulaid.c_str()); + domCommon_float_or_paramRef ptarget = daeSafeCast(pf->add(COLLADA_ELEMENT_TARGET)); + string targetjointid = str(boost::format("%s/joint%d")%kmodel->getID()%index); + daeSafeCast(ptarget->add(COLLADA_TYPE_PARAM))->setValue(targetjointid.c_str()); + + domFormula_techniqueRef pftec = daeSafeCast(pf->add(COLLADA_ELEMENT_TECHNIQUE_COMMON)); + // create a const0*joint+const1 formula + // a x b + daeElementRef pmath_math = pftec->add("math"); + daeElementRef pmath_apply = pmath_math->add("apply"); + { + daeElementRef pmath_plus = pmath_apply->add("plus"); + daeElementRef pmath_apply1 = pmath_apply->add("apply"); + { + daeElementRef pmath_times = pmath_apply1->add("times"); + daeElementRef pmath_const0 = pmath_apply1->add("cn"); + pmath_const0->setCharData(str(boost::format("%f")%pjoint->mimic->multiplier)); + daeElementRef pmath_symb = pmath_apply1->add("csymbol"); + pmath_symb->setAttribute("encoding","COLLADA"); + pmath_symb->setCharData(str(boost::format("%s/joint%d")%kmodel->getID()%_mapjointindices[_robot.getJoint(pjoint->mimic->joint_name)])); + } + daeElementRef pmath_const1 = pmath_apply->add("cn"); + pmath_const1->setCharData(str(boost::format("%f")%pjoint->mimic->offset)); + } + } + + return kmout; + } + + /// \brief Write link of a kinematic body + /// \param link Link to write + /// \param pkinparent Kinbody parent + /// \param pnodeparent Node parent + /// \param strModelUri + virtual LINKOUTPUT _WriteLink(boost::shared_ptr plink, daeElementRef pkinparent, domNodeRef pnodeparent, const string& strModelUri) + { + LINKOUTPUT out; + int linkindex = _maplinkindices[plink]; + string linksid = str(boost::format("link%d")%linkindex); + domLinkRef pdomlink = daeSafeCast(pkinparent->add(COLLADA_ELEMENT_LINK)); + pdomlink->setName(plink->name.c_str()); + pdomlink->setSid(linksid.c_str()); + + domNodeRef pnode = daeSafeCast(pnodeparent->add(COLLADA_ELEMENT_NODE)); + string nodeid = str(boost::format("v%s.node%d")%strModelUri%linkindex); + pnode->setId( nodeid.c_str() ); + string nodesid = str(boost::format("node%d")%linkindex); + pnode->setSid(nodesid.c_str()); + pnode->setName(plink->name.c_str()); + + boost::shared_ptr geometry; + boost::shared_ptr material; + urdf::Pose geometry_origin; + if( !!plink->visual ) { + geometry = plink->visual->geometry; + material = plink->visual->material; + geometry_origin = plink->visual->origin; + } + else if( !!plink->collision ) { + geometry = plink->collision->geometry; + geometry_origin = plink->collision->origin; + } + + if( !!geometry ) { + int igeom = 0; + string geomid = str(boost::format("g%s.%s.geom%d")%strModelUri%linksid%igeom); + domGeometryRef pdomgeom = _WriteGeometry(geometry, geomid); + domInstance_geometryRef pinstgeom = daeSafeCast(pnode->add(COLLADA_ELEMENT_INSTANCE_GEOMETRY)); + pinstgeom->setUrl((string("#")+geomid).c_str()); + + // material + _WriteMaterial(pdomgeom->getID(), material); + domBind_materialRef pmat = daeSafeCast(pinstgeom->add(COLLADA_ELEMENT_BIND_MATERIAL)); + domBind_material::domTechnique_commonRef pmattec = daeSafeCast(pmat->add(COLLADA_ELEMENT_TECHNIQUE_COMMON)); + domInstance_materialRef pinstmat = daeSafeCast(pmattec->add(COLLADA_ELEMENT_INSTANCE_MATERIAL)); + pinstmat->setTarget(xsAnyURI(*pdomgeom, string("#")+geomid+string(".mat"))); + pinstmat->setSymbol("mat0"); + } + + _WriteTransformation(pnode, geometry_origin); + urdf::Pose geometry_origin_inv = _poseInverse(geometry_origin); + + // process all children + FOREACHC(itjoint, plink->child_joints) { + boost::shared_ptr pjoint = *itjoint; + int index = _mapjointindices[pjoint]; + + // + domLink::domAttachment_fullRef attachment_full = daeSafeCast(pdomlink->add(COLLADA_ELEMENT_ATTACHMENT_FULL)); + string jointid = str(boost::format("%s/joint%d")%strModelUri%index); + attachment_full->setJoint(jointid.c_str()); + + LINKOUTPUT childinfo = _WriteLink(_robot.getLink(pjoint->child_link_name), attachment_full, pnode, strModelUri); + FOREACH(itused,childinfo.listusedlinks) { + out.listusedlinks.push_back(make_pair(itused->first,linksid+string("/")+itused->second)); + } + FOREACH(itprocessed,childinfo.listprocesseddofs) { + out.listprocesseddofs.push_back(make_pair(itprocessed->first,nodesid+string("/")+itprocessed->second)); + } + + // rotate/translate elements + string jointnodesid = str(boost::format("node_joint%d_axis0")%index); + switch(pjoint->type) { + case urdf::Joint::REVOLUTE: + case urdf::Joint::CONTINUOUS: + case urdf::Joint::FIXED: { + domRotateRef protate = daeSafeCast(childinfo.pnode->add(COLLADA_ELEMENT_ROTATE,0)); + protate->setSid(jointnodesid.c_str()); + protate->getValue().setCount(4); + protate->getValue()[0] = pjoint->axis.x; + protate->getValue()[1] = pjoint->axis.y; + protate->getValue()[2] = pjoint->axis.z; + protate->getValue()[3] = 0; + break; + } + case urdf::Joint::PRISMATIC: { + domTranslateRef ptrans = daeSafeCast(childinfo.pnode->add(COLLADA_ELEMENT_TRANSLATE,0)); + ptrans->setSid(jointnodesid.c_str()); + ptrans->getValue().setCount(3); + ptrans->getValue()[0] = 0; + ptrans->getValue()[1] = 0; + ptrans->getValue()[2] = 0; + break; + } + default: + ROS_WARN_STREAM(str(boost::format("unsupported joint type specified %d")%(int)pjoint->type)); + break; + } + + _WriteTransformation(attachment_full, pjoint->parent_to_joint_origin_transform); + _WriteTransformation(childinfo.pnode, pjoint->parent_to_joint_origin_transform); + _WriteTransformation(childinfo.pnode, geometry_origin_inv); // have to do multiply by inverse since geometry transformation is not part of hierarchy + out.listprocesseddofs.push_back(make_pair(index,string(childinfo.pnode->getSid())+string("/")+jointnodesid)); + // + } + + out.listusedlinks.push_back(make_pair(linkindex,linksid)); + out.plink = pdomlink; + out.pnode = pnode; + return out; + } + + domGeometryRef _WriteGeometry(boost::shared_ptr geometry, const std::string& geometry_id) + { + domGeometryRef cgeometry = daeSafeCast(_geometriesLib->add(COLLADA_ELEMENT_GEOMETRY)); + cgeometry->setId(geometry_id.c_str()); + switch (geometry->type) { + case urdf::Geometry::MESH: { + urdf::Mesh* urdf_mesh = (urdf::Mesh*) geometry.get(); + _loadMesh(urdf_mesh->filename, cgeometry, urdf_mesh->scale); + break; + } + case urdf::Geometry::SPHERE: { + ROS_WARN_STREAM(str(boost::format("cannot export sphere geometries yet! %s")%geometry_id)); + break; + } + case urdf::Geometry::BOX: { + ROS_WARN_STREAM(str(boost::format("cannot export box geometries yet! %s")%geometry_id)); + break; + } + case urdf::Geometry::CYLINDER: { + ROS_WARN_STREAM(str(boost::format("cannot export cylinder geometries yet! %s")%geometry_id)); + break; + } + default: { + throw ColladaUrdfException(str(boost::format("undefined geometry type %d, name %s")%(int)geometry->type%geometry_id)); + } + } + return cgeometry; + } + + void _WriteMaterial(const string& geometry_id, boost::shared_ptr material) + { + string effid = geometry_id+string(".eff"); + string matid = geometry_id+string(".mat"); + domMaterialRef pdommat = daeSafeCast(_materialsLib->add(COLLADA_ELEMENT_MATERIAL)); + pdommat->setId(matid.c_str()); + domInstance_effectRef pdominsteff = daeSafeCast(pdommat->add(COLLADA_ELEMENT_INSTANCE_EFFECT)); + pdominsteff->setUrl((string("#")+effid).c_str()); + + urdf::Color ambient, diffuse; + ambient.init("0.1 0.1 0.1 0"); + diffuse.init("1 1 1 0"); + + if( !!material ) { + ambient.r = diffuse.r = material->color.r; + ambient.g = diffuse.g = material->color.g; + ambient.b = diffuse.b = material->color.b; + ambient.a = diffuse.a = material->color.a; + } + + domEffectRef effect = _WriteEffect(geometry_id, ambient, diffuse); + + // + domMaterialRef dommaterial = daeSafeCast(_materialsLib->add(COLLADA_ELEMENT_MATERIAL)); + string material_id = geometry_id + string(".mat"); + dommaterial->setId(material_id.c_str()); + { + // + domInstance_effectRef instance_effect = daeSafeCast(dommaterial->add(COLLADA_ELEMENT_INSTANCE_EFFECT)); + string effect_id(effect->getId()); + instance_effect->setUrl((string("#") + effect_id).c_str()); + } + // + + domEffectRef pdomeff = _WriteEffect(effid, ambient, diffuse); + } + + void _loadMesh(std::string const& filename, domGeometryRef pdomgeom, const urdf::Vector3& scale) + { + const aiScene* scene = _importer.ReadFile(filename, aiProcess_SortByPType|aiProcess_Triangulate);//|aiProcess_GenNormals|aiProcess_GenUVCoords|aiProcess_FlipUVs); + if( !scene ) { + ROS_WARN("failed to load resource %s",filename.c_str()); + return; + } + if( !scene->mRootNode ) { + ROS_WARN("resource %s has no data",filename.c_str()); + return; + } + if (!scene->HasMeshes()) { + ROS_WARN_STREAM(str(boost::format("No meshes found in file %s")%filename)); + return; + } + domMeshRef pdommesh = daeSafeCast(pdomgeom->add(COLLADA_ELEMENT_MESH)); + domSourceRef pvertsource = daeSafeCast(pdommesh->add(COLLADA_ELEMENT_SOURCE)); + domAccessorRef pacc; + domFloat_arrayRef parray; + { + pvertsource->setId(str(boost::format("%s.positions")%pdomgeom->getID()).c_str()); + + parray = daeSafeCast(pvertsource->add(COLLADA_ELEMENT_FLOAT_ARRAY)); + parray->setId(str(boost::format("%s.positions-array")%pdomgeom->getID()).c_str()); + parray->setDigits(6); // 6 decimal places + + domSource::domTechnique_commonRef psourcetec = daeSafeCast(pvertsource->add(COLLADA_ELEMENT_TECHNIQUE_COMMON)); + pacc = daeSafeCast(psourcetec->add(COLLADA_ELEMENT_ACCESSOR)); + pacc->setSource(xsAnyURI(*parray, string("#")+string(parray->getID()))); + pacc->setStride(3); + + domParamRef px = daeSafeCast(pacc->add(COLLADA_ELEMENT_PARAM)); + px->setName("X"); px->setType("float"); + domParamRef py = daeSafeCast(pacc->add(COLLADA_ELEMENT_PARAM)); + py->setName("Y"); py->setType("float"); + domParamRef pz = daeSafeCast(pacc->add(COLLADA_ELEMENT_PARAM)); + pz->setName("Z"); pz->setType("float"); + } + domVerticesRef pverts = daeSafeCast(pdommesh->add(COLLADA_ELEMENT_VERTICES)); + { + pverts->setId("vertices"); + domInput_localRef pvertinput = daeSafeCast(pverts->add(COLLADA_ELEMENT_INPUT)); + pvertinput->setSemantic("POSITION"); + pvertinput->setSource(domUrifragment(*pvertsource, string("#")+string(pvertsource->getID()))); + } + _buildAiMesh(scene,scene->mRootNode,pdommesh,parray, pdomgeom->getID(),scale); + pacc->setCount(parray->getCount()); + } + + void _buildAiMesh(const aiScene* scene, aiNode* node, domMeshRef pdommesh, domFloat_arrayRef parray, const string& geomid, const urdf::Vector3& scale) + { + if( !node ) { + return; + } + aiMatrix4x4 transform = node->mTransformation; + aiNode *pnode = node->mParent; + while (pnode) { + // Don't convert to y-up orientation, which is what the root node in + // Assimp does + if (pnode->mParent != NULL) { + transform = pnode->mTransformation * transform; + } + pnode = pnode->mParent; + } + + { + uint32_t vertexOffset = parray->getCount(); + uint32_t nTotalVertices=0; + for (uint32_t i = 0; i < node->mNumMeshes; i++) { + aiMesh* input_mesh = scene->mMeshes[node->mMeshes[i]]; + nTotalVertices += input_mesh->mNumVertices; + } + + parray->getValue().grow(parray->getCount()+nTotalVertices*3); + parray->setCount(parray->getCount()+nTotalVertices); + + for (uint32_t i = 0; i < node->mNumMeshes; i++) { + aiMesh* input_mesh = scene->mMeshes[node->mMeshes[i]]; + for (uint32_t j = 0; j < input_mesh->mNumVertices; j++) { + aiVector3D p = input_mesh->mVertices[j]; + p *= transform; + parray->getValue().append(p.x*scale.x); + parray->getValue().append(p.y*scale.y); + parray->getValue().append(p.z*scale.z); + } + } + + // in order to save space, separate triangles from poly lists + + vector triangleindices, otherindices; + int nNumOtherPrimitives = 0; + for (uint32_t i = 0; i < node->mNumMeshes; i++) { + aiMesh* input_mesh = scene->mMeshes[node->mMeshes[i]]; + uint32_t indexCount = 0, otherIndexCount = 0; + for (uint32_t j = 0; j < input_mesh->mNumFaces; j++) { + aiFace& face = input_mesh->mFaces[j]; + if( face.mNumIndices == 3 ) { + indexCount += face.mNumIndices; + } + else { + otherIndexCount += face.mNumIndices; + } + } + triangleindices.reserve(triangleindices.size()+indexCount); + otherindices.reserve(otherindices.size()+otherIndexCount); + for (uint32_t j = 0; j < input_mesh->mNumFaces; j++) { + aiFace& face = input_mesh->mFaces[j]; + if( face.mNumIndices == 3 ) { + triangleindices.push_back(vertexOffset+face.mIndices[0]); + triangleindices.push_back(vertexOffset+face.mIndices[1]); + triangleindices.push_back(vertexOffset+face.mIndices[2]); + } + else { + for (uint32_t k = 0; k < face.mNumIndices; ++k) { + otherindices.push_back(face.mIndices[k]+vertexOffset); + } + nNumOtherPrimitives++; + } + } + vertexOffset += input_mesh->mNumVertices; + } + + if( triangleindices.size() > 0 ) { + domTrianglesRef ptris = daeSafeCast(pdommesh->add(COLLADA_ELEMENT_TRIANGLES)); + ptris->setCount(triangleindices.size()/3); + ptris->setMaterial("mat0"); + domInput_local_offsetRef pvertoffset = daeSafeCast(ptris->add(COLLADA_ELEMENT_INPUT)); + pvertoffset->setSemantic("VERTEX"); + pvertoffset->setOffset(0); + pvertoffset->setSource(domUrifragment(*pdommesh->getVertices(), str(boost::format("#%s/vertices")%geomid))); + domPRef pindices = daeSafeCast(ptris->add(COLLADA_ELEMENT_P)); + pindices->getValue().setCount(triangleindices.size()); + for(size_t ind = 0; ind < triangleindices.size(); ++ind) { + pindices->getValue()[ind] = triangleindices[ind]; + } + } + + if( nNumOtherPrimitives > 0 ) { + domPolylistRef ptris = daeSafeCast(pdommesh->add(COLLADA_ELEMENT_POLYLIST)); + ptris->setCount(nNumOtherPrimitives); + ptris->setMaterial("mat0"); + domInput_local_offsetRef pvertoffset = daeSafeCast(ptris->add(COLLADA_ELEMENT_INPUT)); + pvertoffset->setSemantic("VERTEX"); + pvertoffset->setSource(domUrifragment(*pdommesh->getVertices(), str(boost::format("#%s/vertices")%geomid))); + domPRef pindices = daeSafeCast(ptris->add(COLLADA_ELEMENT_P)); + pindices->getValue().setCount(otherindices.size()); + for(size_t ind = 0; ind < otherindices.size(); ++ind) { + pindices->getValue()[ind] = otherindices[ind]; + } + + domPolylist::domVcountRef pcount = daeSafeCast(ptris->add(COLLADA_ELEMENT_VCOUNT)); + pcount->getValue().setCount(nNumOtherPrimitives); + uint32_t offset = 0; + for (uint32_t i = 0; i < node->mNumMeshes; i++) { + aiMesh* input_mesh = scene->mMeshes[node->mMeshes[i]]; + for (uint32_t j = 0; j < input_mesh->mNumFaces; j++) { + aiFace& face = input_mesh->mFaces[j]; + if( face.mNumIndices > 3 ) { + pcount->getValue()[offset++] = face.mNumIndices; + } + } + } + } + } + + for (uint32_t i=0; i < node->mNumChildren; ++i) { + _buildAiMesh(scene, node->mChildren[i], pdommesh,parray,geomid,scale); + } + } + + + domEffectRef _WriteEffect(std::string const& effect_id, urdf::Color const& color_ambient, urdf::Color const& color_diffuse) + { + // + domEffectRef effect = daeSafeCast(_effectsLib->add(COLLADA_ELEMENT_EFFECT)); + effect->setId(effect_id.c_str()); + { + // + domProfile_commonRef profile = daeSafeCast(effect->add(COLLADA_ELEMENT_PROFILE_COMMON)); + { + // + domProfile_common::domTechniqueRef technique = daeSafeCast(profile->add(COLLADA_ELEMENT_TECHNIQUE)); + { + // + domProfile_common::domTechnique::domPhongRef phong = daeSafeCast(technique->add(COLLADA_ELEMENT_PHONG)); + { + // + domFx_common_color_or_textureRef ambient = daeSafeCast(phong->add(COLLADA_ELEMENT_AMBIENT)); + { + // r g b a + domFx_common_color_or_texture::domColorRef ambient_color = daeSafeCast(ambient->add(COLLADA_ELEMENT_COLOR)); + ambient_color->getValue().setCount(4); + ambient_color->getValue()[0] = color_ambient.r; + ambient_color->getValue()[1] = color_ambient.g; + ambient_color->getValue()[2] = color_ambient.b; + ambient_color->getValue()[3] = color_ambient.a; + // + } + // + + // + domFx_common_color_or_textureRef diffuse = daeSafeCast(phong->add(COLLADA_ELEMENT_DIFFUSE)); + { + // r g b a + domFx_common_color_or_texture::domColorRef diffuse_color = daeSafeCast(diffuse->add(COLLADA_ELEMENT_COLOR)); + diffuse_color->getValue().setCount(4); + diffuse_color->getValue()[0] = color_diffuse.r; + diffuse_color->getValue()[1] = color_diffuse.g; + diffuse_color->getValue()[2] = color_diffuse.b; + diffuse_color->getValue()[3] = color_diffuse.a; + // + } + // + } + // + } + // + } + // + } + // + + return effect; + } + + /// \brief Write transformation + /// \param pelt Element to transform + /// \param t Transform to write + void _WriteTransformation(daeElementRef pelt, const urdf::Pose& t) + { + domRotateRef prot = daeSafeCast(pelt->add(COLLADA_ELEMENT_ROTATE,0)); + domTranslateRef ptrans = daeSafeCast(pelt->add(COLLADA_ELEMENT_TRANSLATE,0)); + ptrans->getValue().setCount(3); + ptrans->getValue()[0] = t.position.x; + ptrans->getValue()[1] = t.position.y; + ptrans->getValue()[2] = t.position.z; + + prot->getValue().setCount(4); + // extract axis from quaternion + double sinang = t.rotation.x*t.rotation.x+t.rotation.y*t.rotation.y+t.rotation.z*t.rotation.z; + if( std::fabs(sinang) < 1e-10 ) { + prot->getValue()[0] = 1; + prot->getValue()[1] = 0; + prot->getValue()[2] = 0; + prot->getValue()[3] = 0; + } + else { + urdf::Rotation quat; + if( t.rotation.w < 0 ) { + quat.x = -t.rotation.x; + quat.y = -t.rotation.y; + quat.z = -t.rotation.z; + quat.w = -t.rotation.w; + } + else { + quat = t.rotation; + } + sinang = std::sqrt(sinang); + prot->getValue()[0] = quat.x/sinang; + prot->getValue()[1] = quat.y/sinang; + prot->getValue()[2] = quat.z/sinang; + prot->getValue()[3] = angles::to_degrees(2.0*std::atan2(sinang,quat.w)); + } + } + + // binding in instance_kinematics_scene + void _WriteBindingsInstance_kinematics_scene() + { + FOREACHC(it, _iasout->vkinematicsbindings) { + domBind_kinematics_modelRef pmodelbind = daeSafeCast(_scene.kiscene->add(COLLADA_ELEMENT_BIND_KINEMATICS_MODEL)); + pmodelbind->setNode(it->second.c_str()); + daeSafeCast(pmodelbind->add(COLLADA_ELEMENT_PARAM))->setValue(it->first.c_str()); + } + FOREACHC(it, _iasout->vaxissids) { + domBind_joint_axisRef pjointbind = daeSafeCast(_scene.kiscene->add(COLLADA_ELEMENT_BIND_JOINT_AXIS)); + pjointbind->setTarget(it->jointnodesid.c_str()); + daeSafeCast(pjointbind->add(COLLADA_ELEMENT_AXIS)->add(COLLADA_TYPE_PARAM))->setValue(it->axissid.c_str()); + daeSafeCast(pjointbind->add(COLLADA_ELEMENT_VALUE)->add(COLLADA_TYPE_PARAM))->setValue(it->valuesid.c_str()); + } + } + +private: + static urdf::Vector3 _poseMult(const urdf::Pose& p, const urdf::Vector3& v) + { + double ww = 2 * p.rotation.x * p.rotation.x; + double wx = 2 * p.rotation.x * p.rotation.y; + double wy = 2 * p.rotation.x * p.rotation.z; + double wz = 2 * p.rotation.x * p.rotation.w; + double xx = 2 * p.rotation.y * p.rotation.y; + double xy = 2 * p.rotation.y * p.rotation.z; + double xz = 2 * p.rotation.y * p.rotation.w; + double yy = 2 * p.rotation.z * p.rotation.z; + double yz = 2 * p.rotation.z * p.rotation.w; + urdf::Vector3 vnew; + vnew.x = (1-xx-yy) * v.x + (wx-yz) * v.y + (wy+xz)*v.z + p.position.x; + vnew.y = (wx+yz) * v.x + (1-ww-yy) * v.y + (xy-wz)*v.z + p.position.y; + vnew.z = (wy-xz) * v.x + (xy+wz) * v.y + (1-ww-xx)*v.z + p.position.z; + return vnew; + } + + static urdf::Pose _poseInverse(const urdf::Pose& p) + { + urdf::Pose pinv; + pinv.rotation.x = -p.rotation.x; + pinv.rotation.y = -p.rotation.y; + pinv.rotation.z = -p.rotation.z; + pinv.rotation.w = p.rotation.w; + urdf::Vector3 t = _poseMult(pinv,p.position); + pinv.position.x = -t.x; + pinv.position.y = -t.y; + pinv.position.z = -t.z; + return pinv; + } + + int _writeoptions; + + const urdf::Model& _robot; + boost::shared_ptr _collada; + domCOLLADA* _dom; + domCOLLADA::domSceneRef _globalscene; + + domLibrary_visual_scenesRef _visualScenesLib; + domLibrary_kinematics_scenesRef _kinematicsScenesLib; + domLibrary_kinematics_modelsRef _kinematicsModelsLib; + domLibrary_articulated_systemsRef _articulatedSystemsLib; + domLibrary_physics_scenesRef _physicsScenesLib; + domLibrary_materialsRef _materialsLib; + domLibrary_effectsRef _effectsLib; + domLibrary_geometriesRef _geometriesLib; + domTechniqueRef _sensorsLib;///< custom sensors library + SCENE _scene; + + boost::shared_ptr _ikmout; + boost::shared_ptr _iasout; + std::map< boost::shared_ptr, int > _mapjointindices; + std::map< boost::shared_ptr, int > _maplinkindices; + std::map< boost::shared_ptr, int > _mapmaterialindices; + Assimp::Importer _importer; +}; + ColladaUrdfException::ColladaUrdfException(std::string const& what) : std::runtime_error(what) { } -bool colladaFromUrdfFile(string const& file, shared_ptr& dom) { - TiXmlDocument urdf_xml; - if (!urdf_xml.LoadFile(file)) { - ROS_ERROR("Could not load XML file"); - return false; - } - - return colladaFromUrdfXml(&urdf_xml, dom); -} - -bool colladaFromUrdfString(string const& xml, shared_ptr& dom) { - TiXmlDocument urdf_xml; - if (urdf_xml.Parse(xml.c_str()) == 0) { - ROS_ERROR("Could not parse XML document"); - return false; - } - - return colladaFromUrdfXml(&urdf_xml, dom); -} - -bool colladaFromUrdfXml(TiXmlDocument* xml_doc, shared_ptr& dom) { - urdf::Model robot_model; - if (!robot_model.initXml(xml_doc)) { - ROS_ERROR("Could not generate robot model"); - return false; - } - - return colladaFromUrdfModel(robot_model, dom); -} - -bool colladaFromUrdfModel(urdf::Model const& robot_model, shared_ptr& dom) { - ColladaWriter writer(robot_model); +bool colladaFromUrdfModel(const urdf::Model& robot_model, boost::shared_ptr& dom, int writeoptions) +{ + ColladaWriter writer(robot_model,writeoptions); dom = writer.convert(); - - return dom != shared_ptr(); + return dom != boost::shared_ptr(); } -bool colladaToFile(shared_ptr dom, string const& file) { +bool colladaToFile(boost::shared_ptr dom, string const& file) { daeString uri = dom->getDoc(0)->getDocumentURI()->getURI(); return dom->writeTo(uri, file); } diff --git a/collada_urdf/src/collada_writer.cpp b/collada_urdf/src/collada_writer.cpp deleted file mode 100644 index 7453fd1..0000000 --- a/collada_urdf/src/collada_writer.cpp +++ /dev/null @@ -1,975 +0,0 @@ -/********************************************************************* -* Software License Agreement (BSD License) -* -* Copyright (c) 2010, Willow Garage, Inc. -* All rights reserved. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions -* are met: -* -* * Redstributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* * Redistributions in binary form must reproduce the above -* copyright notice, this list of conditions and the following -* disclaimer in the documentation and/or other materials provided -* with the distribution. -* * Neither the name of the Willow Garage nor the names of its -* contributors may be used to endorse or promote products derived -* from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -* POSSIBILITY OF SUCH DAMAGE. -*********************************************************************/ - -/* Author: Tim Field */ - -#include "collada_urdf/collada_writer.h" - -#include "collada_urdf/stl_loader.h" - -#include -#include -#include - -#define foreach BOOST_FOREACH - -using std::string; -using std::map; -using std::vector; -using boost::shared_ptr; - -namespace collada_urdf { - -int ColladaWriter::s_doc_count_ = 0; - -ColladaWriter::ColladaWriter(urdf::Model const& robot) : robot_(robot), dom_(NULL) { - daeErrorHandler::setErrorHandler(this); - - collada_.reset(new DAE); - collada_->setIOPlugin(NULL); - collada_->setDatabase(NULL); -} - -ColladaWriter::~ColladaWriter() { } - -shared_ptr ColladaWriter::convert() { - try { - string doc_count_str = boost::lexical_cast(s_doc_count_++); - initDocument(string("collada_urdf_") + doc_count_str + string(".dae")); - - SCENE scene = createScene(); - - setupPhysics(scene); - addGeometries(); - addKinematics(scene); - addVisuals(scene); - addMaterials(); - addBindings(scene); - - return collada_; - } - catch (ColladaUrdfException ex) { - ROS_ERROR("Error converting: %s", ex.what()); - return shared_ptr(); - } -} - -// Implementation - -void ColladaWriter::handleError(daeString msg) { - throw ColladaUrdfException(msg); -} - -void ColladaWriter::handleWarning(daeString msg) { - std::cerr << "COLLADA DOM warning: " << msg << std::endl; -} - -void ColladaWriter::initDocument(string const& documentName) { - // Create the document - daeDocument* doc = NULL; - daeInt error = collada_->getDatabase()->insertDocument(documentName.c_str(), &doc); // also creates a collada root - if (error != DAE_OK || doc == NULL) - throw ColladaUrdfException("Failed to create document"); - - dom_ = daeSafeCast(doc->getDomRoot()); - dom_->setAttribute("xmlns:math", "http://www.w3.org/1998/Math/MathML"); - - // Create asset elements - domAssetRef asset = daeSafeCast(dom_->add(COLLADA_ELEMENT_ASSET)); - { - string date = getTimeStampString(); - - domAsset::domCreatedRef created = daeSafeCast(asset->add(COLLADA_ELEMENT_CREATED)); - created->setValue(date.c_str()); - domAsset::domModifiedRef modified = daeSafeCast(asset->add(COLLADA_ELEMENT_MODIFIED)); - modified->setValue(date.c_str()); - - domAsset::domContributorRef contrib = daeSafeCast(asset->add(COLLADA_ELEMENT_CONTRIBUTOR)); - - domAsset::domContributor::domAuthoring_toolRef authoringtool = daeSafeCast(contrib->add(COLLADA_ELEMENT_AUTHORING_TOOL)); - authoringtool->setValue("URDF Collada Writer"); - - domAsset::domUnitRef units = daeSafeCast(asset->add(COLLADA_ELEMENT_UNIT)); - units->setMeter(1); - units->setName("meter"); - - domAsset::domUp_axisRef zup = daeSafeCast(asset->add(COLLADA_ELEMENT_UP_AXIS)); - zup->setValue(UP_AXIS_Z_UP); - } - - // Create top-level elements - scene_ = daeSafeCast(dom_->add(COLLADA_ELEMENT_SCENE)); - visualScenesLib_ = daeSafeCast(dom_->add(COLLADA_ELEMENT_LIBRARY_VISUAL_SCENES)); - visualScenesLib_->setId("vscenes"); - geometriesLib_ = daeSafeCast(dom_->add(COLLADA_ELEMENT_LIBRARY_GEOMETRIES)); - geometriesLib_->setId("geometries"); - kinematicsScenesLib_ = daeSafeCast(dom_->add(COLLADA_ELEMENT_LIBRARY_KINEMATICS_SCENES)); - kinematicsScenesLib_->setId("kscenes"); - kinematicsModelsLib_ = daeSafeCast(dom_->add(COLLADA_ELEMENT_LIBRARY_KINEMATICS_MODELS)); - kinematicsModelsLib_->setId("kmodels"); - jointsLib_ = daeSafeCast(dom_->add(COLLADA_ELEMENT_LIBRARY_JOINTS)); - jointsLib_->setId("joints"); - physicsScenesLib_ = daeSafeCast(dom_->add(COLLADA_ELEMENT_LIBRARY_PHYSICS_SCENES)); - physicsScenesLib_->setId("physics_scenes"); - effectsLib_ = daeSafeCast(dom_->add(COLLADA_ELEMENT_LIBRARY_EFFECTS)); - effectsLib_->setId("effects"); - materialsLib_ = daeSafeCast(dom_->add(COLLADA_ELEMENT_LIBRARY_MATERIALS)); - materialsLib_->setId("materials"); -} - -ColladaWriter::SCENE ColladaWriter::createScene() { - SCENE s; - - // Create visual scene - s.vscene = daeSafeCast(visualScenesLib_->add(COLLADA_ELEMENT_VISUAL_SCENE)); - s.vscene->setId("vscene"); - s.vscene->setName("URDF Visual Scene"); - - // Create instance visual scene - s.viscene = daeSafeCast(scene_->add(COLLADA_ELEMENT_INSTANCE_VISUAL_SCENE)); - s.viscene->setUrl((string("#") + string(s.vscene->getID())).c_str()); - - // Create kinematics scene - s.kscene = daeSafeCast(kinematicsScenesLib_->add(COLLADA_ELEMENT_KINEMATICS_SCENE)); - s.kscene->setId("kscene"); - s.kscene->setName("URDF Kinematics Scene"); - - // Create instance kinematics scene - s.kiscene = daeSafeCast(scene_->add(COLLADA_ELEMENT_INSTANCE_KINEMATICS_SCENE)); - s.kiscene->setUrl((string("#") + string(s.kscene->getID())).c_str()); - - // Create physics scene - s.pscene = daeSafeCast(physicsScenesLib_->add(COLLADA_ELEMENT_PHYSICS_SCENE)); - s.pscene->setId("pscene"); - s.pscene->setName("URDF Physics Scene"); - - // Create instance physics scene - s.piscene = daeSafeCast(scene_->add(COLLADA_ELEMENT_INSTANCE_PHYSICS_SCENE)); - s.piscene->setUrl((string("#") + string(s.pscene->getID())).c_str()); - - return s; -} - -void ColladaWriter::setupPhysics(SCENE const& scene) { - // - domPhysics_scene::domTechnique_commonRef common = daeSafeCast(scene.pscene->add(COLLADA_ELEMENT_TECHNIQUE_COMMON)); - { - // 0 0 0 - domTargetable_float3Ref g = daeSafeCast(common->add(COLLADA_ELEMENT_GRAVITY)); - g->getValue().set3(0.0, 0.0, 0.0); - // - } - // -} - -void ColladaWriter::addGeometries() { - int link_num = 0; - - for (map >::const_iterator i = robot_.links_.begin(); i != robot_.links_.end(); i++) { - shared_ptr urdf_link = i->second; - boost::shared_ptr< urdf::Geometry > geometry; - if( !!urdf_link->visual ) { - geometry = urdf_link->visual->geometry; - } - else if (!!urdf_link->collision ) { - geometry = urdf_link->collision->geometry; - } - if( !geometry ) { - continue; - } - switch (geometry->type) { - case urdf::Geometry::MESH: { - urdf::Mesh* urdf_mesh = (urdf::Mesh*) geometry.get(); - - string filename = urdf_mesh->filename; - urdf::Vector3 scale = urdf_mesh->scale; // @todo use scale - - // - domGeometryRef geometry = daeSafeCast(geometriesLib_->add(COLLADA_ELEMENT_GEOMETRY)); - string geometry_id = string("g1.link") + boost::lexical_cast(link_num) + string(".geom0"); - geometry->setId(geometry_id.c_str()); - { - loadMesh(filename, geometry, geometry_id); - } - geometry_ids_[urdf_link->name] = geometry_id; - // - - link_num++; - break; - } - case urdf::Geometry::SPHERE: { - std::cerr << "Warning: geometry type SPHERE of link " << urdf_link->name << " not exported" << std::endl; - break; - } - case urdf::Geometry::BOX: { - std::cerr << "Warning: geometry type BOX of link " << urdf_link->name << " not exported" << std::endl; - break; - } - case urdf::Geometry::CYLINDER: { - std::cerr << "Warning: geometry type CYLINDER of link " << urdf_link->name << " not exported" << std::endl; - break; - } - default: { - std::cerr << "Warning: geometry type " << geometry->type << " of link " << urdf_link->name << " not exported" << std::endl; - break; - } - } - } -} - -void ColladaWriter::loadMesh(string const& filename, domGeometryRef geometry, string const& geometry_id) { - // Load the mesh - resource_retriever::MemoryResource resource; - resource_retriever::Retriever retriever; - try { - resource = retriever.get(filename.c_str()); - } - catch (resource_retriever::Exception& e) { - std::cerr << "Unable to load mesh file " << filename << ": " << e.what() << std::endl; - return; - } - - // Try assimp first, then STLLoader - try { - loadMeshWithSTLLoader(resource, geometry, geometry_id); - } - catch (ColladaUrdfException e) { - std::cerr << "Unable to load mesh file " << filename << ": " << e.what() << std::endl; - } -} - -bool ColladaWriter::loadMeshWithSTLLoader(resource_retriever::MemoryResource const& resource, domGeometryRef geometry, string const& geometry_id) { - // Write the resource to a temporary file - char tmp_filename[] = "/tmp/collada_urdf_XXXXXX"; - int fd = mkstemp(tmp_filename); - if (fd == -1) - throw ColladaUrdfException("Couldn't create temporary file"); - - if ((uint32_t) write(fd, resource.data.get(), resource.size) != resource.size) { - close(fd); - unlink(tmp_filename); - throw ColladaUrdfException("Couldn't write resource to file"); - } - close(fd); - - // Import the mesh using STLLoader - STLLoader loader; - shared_ptr stl_mesh = loader.load(string(tmp_filename)); - if (stl_mesh == shared_ptr()) { - unlink(tmp_filename); - throw ColladaUrdfException("Couldn't import STL mesh"); - } - - // Build the COLLADA mesh - buildMeshFromSTLLoader(stl_mesh, geometry, geometry_id); - - // Delete the temporary file - unlink(tmp_filename); - - return true; -} - -void ColladaWriter::buildMeshFromSTLLoader(shared_ptr stl_mesh, daeElementRef parent, string const& geometry_id) { - // - domMeshRef mesh = daeSafeCast(parent->add(COLLADA_ELEMENT_MESH)); - { - unsigned int num_vertices = stl_mesh->vertices.size(); - unsigned int num_indices = stl_mesh->indices.size(); - unsigned int num_faces = num_indices / 3; - - // - domSourceRef positions_source = daeSafeCast(mesh->add(COLLADA_ELEMENT_SOURCE)); - positions_source->setId((geometry_id + string(".positions")).c_str()); - { - // - domFloat_arrayRef positions_array = daeSafeCast(positions_source->add(COLLADA_ELEMENT_FLOAT_ARRAY)); - positions_array->setId((geometry_id + string(".positions-array")).c_str()); - positions_array->setCount(num_vertices * 3); - positions_array->setDigits(6); // 6 decimal places - positions_array->getValue().setCount(num_vertices * 3); - for (unsigned int j = 0; j < num_vertices; j++) { - positions_array->getValue()[j * 3 ] = stl_mesh->vertices[j].x; - positions_array->getValue()[j * 3 + 1] = stl_mesh->vertices[j].y; - positions_array->getValue()[j * 3 + 2] = stl_mesh->vertices[j].z; - } - // - - // - domSource::domTechnique_commonRef source_tech = daeSafeCast(positions_source->add(COLLADA_ELEMENT_TECHNIQUE_COMMON)); - { - // - domAccessorRef accessor = daeSafeCast(source_tech->add(COLLADA_ELEMENT_ACCESSOR)); - accessor->setCount(num_vertices / 3); - accessor->setSource(xsAnyURI(*positions_array, string("#") + geometry_id + string(".positions-array"))); - accessor->setStride(3); - { - // - // - // - domParamRef px = daeSafeCast(accessor->add(COLLADA_ELEMENT_PARAM)); px->setName("X"); px->setType("float"); - domParamRef py = daeSafeCast(accessor->add(COLLADA_ELEMENT_PARAM)); py->setName("Y"); py->setType("float"); - domParamRef pz = daeSafeCast(accessor->add(COLLADA_ELEMENT_PARAM)); pz->setName("Z"); pz->setType("float"); - } - // - } - // - } - - // - domVerticesRef vertices = daeSafeCast(mesh->add(COLLADA_ELEMENT_VERTICES)); - string vertices_id = geometry_id + string(".vertices"); - vertices->setId(vertices_id.c_str()); - { - // - domInput_localRef vertices_input = daeSafeCast(vertices->add(COLLADA_ELEMENT_INPUT)); - vertices_input->setSemantic("POSITION"); - vertices_input->setSource(domUrifragment(*positions_source, string("#") + string(positions_source->getId()))); - } - // - - // - domTrianglesRef triangles = daeSafeCast(mesh->add(COLLADA_ELEMENT_TRIANGLES)); - triangles->setCount(num_faces); - triangles->setMaterial("mat0"); - { - // - domInput_local_offsetRef vertex_offset = daeSafeCast(triangles->add(COLLADA_ELEMENT_INPUT)); - vertex_offset->setSemantic("VERTEX"); - vertex_offset->setOffset(0); - vertex_offset->setSource(domUrifragment(*positions_source, string("#") + vertices_id)); - { - //

0 1 2 3 ... - domPRef indices = daeSafeCast(triangles->add(COLLADA_ELEMENT_P)); - indices->getValue().setCount(num_indices); - for (unsigned int i = 0; i < num_indices; i++) - indices->getValue()[i] = stl_mesh->indices[i]; - //

- } - } - //
- } - //
-} - -void ColladaWriter::addJoints(daeElementRef parent) { - int joint_num = 0; - for (map >::const_iterator i = robot_.joints_.begin(); i != robot_.joints_.end(); i++) { - shared_ptr urdf_joint = i->second; - - // - domJointRef joint = daeSafeCast(parent->add(COLLADA_ELEMENT_JOINT)); - string joint_sid = string("joint") + boost::lexical_cast(joint_num); - joint_num++; - joint->setName(urdf_joint->name.c_str()); - joint->setSid(joint_sid.c_str()); - joint_sids_[urdf_joint->name] = joint_sid; - - double axis_x = urdf_joint->axis.x; - double axis_y = urdf_joint->axis.y; - double axis_z = urdf_joint->axis.z; - if (axis_x == 0.0 && axis_y == 0.0 && axis_z == 0.0) { - axis_x = 1.0; - axis_y = 0.0; - axis_z = 0.0; - } - - switch (urdf_joint->type) - { - case urdf::Joint::REVOLUTE: { - // - domAxis_constraintRef revolute = daeSafeCast(joint->add(COLLADA_ELEMENT_REVOLUTE)); - revolute->setSid("axis0"); - { - // - domAxisRef axis = daeSafeCast(revolute->add(COLLADA_ELEMENT_AXIS)); - { - axis->getValue().setCount(3); - axis->getValue()[0] = axis_x; - axis->getValue()[1] = axis_y; - axis->getValue()[2] = axis_z; - } - // - - // - domJoint_limitsRef limits = daeSafeCast(revolute->add(COLLADA_ELEMENT_LIMITS)); - { - daeSafeCast(limits->add(COLLADA_ELEMENT_MIN))->getValue() = angles::to_degrees(urdf_joint->limits->lower); - daeSafeCast(limits->add(COLLADA_ELEMENT_MAX))->getValue() = angles::to_degrees(urdf_joint->limits->upper); - } - // - } - // - break; - } - case urdf::Joint::CONTINUOUS: { - // Model as a REVOLUTE joint without limits - - // - domAxis_constraintRef revolute = daeSafeCast(joint->add(COLLADA_ELEMENT_REVOLUTE)); - revolute->setSid("axis0"); - { - // - domAxisRef axis = daeSafeCast(revolute->add(COLLADA_ELEMENT_AXIS)); - { - axis->getValue().setCount(3); - axis->getValue()[0] = axis_x; - axis->getValue()[1] = axis_y; - axis->getValue()[2] = axis_z; - } - // - } - // - break; - } - case urdf::Joint::PRISMATIC: { - // - domAxis_constraintRef prismatic = daeSafeCast(joint->add(COLLADA_ELEMENT_PRISMATIC)); - prismatic->setSid("axis0"); - { - // - domAxisRef axis = daeSafeCast(prismatic->add(COLLADA_ELEMENT_AXIS)); - { - axis->getValue().setCount(3); - axis->getValue()[0] = axis_x; - axis->getValue()[1] = axis_y; - axis->getValue()[2] = axis_z; - } - // - - // - domJoint_limitsRef limits = daeSafeCast(prismatic->add(COLLADA_ELEMENT_LIMITS)); - { - daeSafeCast(limits->add(COLLADA_ELEMENT_MIN))->getValue() = urdf_joint->limits->lower; - daeSafeCast(limits->add(COLLADA_ELEMENT_MAX))->getValue() = urdf_joint->limits->upper; - } - // - } - // - break; - } - case urdf::Joint::FIXED: { - // Model as a REVOLUTE joint with no leeway - - domAxis_constraintRef revolute = daeSafeCast(joint->add(COLLADA_ELEMENT_REVOLUTE)); - revolute->setSid("axis0"); - { - // - domAxisRef axis = daeSafeCast(revolute->add(COLLADA_ELEMENT_AXIS)); - { - axis->getValue().setCount(3); - axis->getValue()[0] = axis_x; - axis->getValue()[1] = axis_y; - axis->getValue()[2] = axis_z; - } - // - - // - domJoint_limitsRef limits = daeSafeCast(revolute->add(COLLADA_ELEMENT_LIMITS)); - { - daeSafeCast(limits->add(COLLADA_ELEMENT_MIN))->getValue() = 0.0; - daeSafeCast(limits->add(COLLADA_ELEMENT_MAX))->getValue() = 0.0; - } - // - } - // - break; - } - case urdf::Joint::UNKNOWN: { - std::cerr << "Joint type UNKNOWN of joint " << urdf_joint->name << " is unsupported" << std::endl; - break; - } - case urdf::Joint::FLOATING: { - std::cerr << "Joint type FLOATING of joint " << urdf_joint->name << " is unsupported" << std::endl; - break; - } - case urdf::Joint::PLANAR: { - std::cerr << "Joint type PLANAR of joint " << urdf_joint->name << " is unsupported" << std::endl; - break; - } - default: { - std::cerr << "Joint type " << urdf_joint->type << " of joint " << urdf_joint->name << " is unsupported" << std::endl; - break; - } - } - } -} - -void ColladaWriter::addBindings(SCENE const& scene) { - string model_id = kmodel_->getID(); - string inst_model_sid = string("inst_") + model_id; - - // - // - domBind_kinematics_modelRef kmodel_bind = daeSafeCast(scene.kiscene->add(COLLADA_ELEMENT_BIND_KINEMATICS_MODEL)); - kmodel_bind->setNode("v1.node0"); // @todo - daeSafeCast(kmodel_bind->add(COLLADA_ELEMENT_PARAM))->setValue(string(string(scene.kscene->getID()) + string(".") + inst_model_sid).c_str()); - - for (map >::const_iterator i = robot_.joints_.begin(); i != robot_.joints_.end(); i++) { - shared_ptr urdf_joint = i->second; - - int idof = 0; // @todo assuming 1 dof joints - string joint_sid = joint_sids_[urdf_joint->name]; - string axis_name = string("axis") + boost::lexical_cast(idof); - string joint_axis_sid = string("kscene.inst_") + model_id + string(".") + joint_sid + string(".") + axis_name; - string joint_axis_value_sid = joint_axis_sid + string("_value"); - - // - domBind_joint_axisRef joint_bind = daeSafeCast(scene.kiscene->add(COLLADA_ELEMENT_BIND_JOINT_AXIS)); - string node_name = node_ids_[urdf_joint->name]; - joint_bind->setTarget((node_name + string("/node_") + joint_sid + string("_") + axis_name).c_str()); - { - // - domCommon_sidref_or_paramRef axis_bind = daeSafeCast(joint_bind->add(COLLADA_ELEMENT_AXIS)); - { - daeSafeCast(axis_bind->add(COLLADA_ELEMENT_PARAM))->setValue(joint_axis_sid.c_str()); - } - // - // - domCommon_float_or_paramRef value_bind = daeSafeCast(joint_bind->add(COLLADA_ELEMENT_VALUE)); - { - daeSafeCast(value_bind->add(COLLADA_ELEMENT_PARAM))->setValue(joint_axis_value_sid.c_str()); - } - } - // - } -} - -void ColladaWriter::addKinematics(SCENE const& scene) { - // - domKinematics_modelRef kmodel = daeSafeCast(kinematicsModelsLib_->add(COLLADA_ELEMENT_KINEMATICS_MODEL)); - kmodel->setId("k1"); - kmodel->setName(robot_.getName().c_str()); - { - // - domKinematics_model_techniqueRef technique = daeSafeCast(kmodel->add(COLLADA_ELEMENT_TECHNIQUE_COMMON)); - addJoints(technique); - // - - // - int link_num = 0; - addKinematicLink(robot_.getRoot(), technique, link_num); - // - - // add a formula for each mimic joint - for (map >::const_iterator i = robot_.joints_.begin(); i != robot_.joints_.end(); i++) { - shared_ptr urdf_joint = i->second; - if( !!urdf_joint->mimic ) { - string joint_sid = string("k1/")+joint_sids_[urdf_joint->name]; - string joint_mimic_sid = string("k1/")+joint_sids_[urdf_joint->mimic->joint_name]; - // - addMimicJoint(daeSafeCast(technique->add(COLLADA_ELEMENT_FORMULA)), joint_sid,joint_mimic_sid,urdf_joint->mimic->multiplier,urdf_joint->mimic->offset); - // - } - } - } - kmodel_ = kmodel; - // - - string model_id = kmodel->getID(); - string inst_model_sid = string("inst_") + model_id; - - // - domInstance_kinematics_modelRef ikm = daeSafeCast(scene.kscene->add(COLLADA_ELEMENT_INSTANCE_KINEMATICS_MODEL)); - ikm->setUrl((string("#") + model_id).c_str()); - ikm->setSid(inst_model_sid.c_str()); - { - // - domKinematics_newparamRef newparam_model = daeSafeCast(ikm->add(COLLADA_ELEMENT_NEWPARAM)); - string newparam_model_sid = string("kscene.inst_") + model_id; - newparam_model->setSid(newparam_model_sid.c_str()); - { - // kscene/inst_k1 - string model_sidref = string("kscene/inst_") + model_id; - daeSafeCast(newparam_model->add(COLLADA_ELEMENT_SIDREF))->setValue(model_sidref.c_str()); - } - // - - for (map >::const_iterator i = robot_.joints_.begin(); i != robot_.joints_.end(); i++) { - shared_ptr urdf_joint = i->second; - - int idof = 0; // @todo assuming 1 dof joints - - string joint_sid = joint_sids_[urdf_joint->name]; - - string axis_name = string("axis") + boost::lexical_cast(idof); - - // - domKinematics_newparamRef newparam = daeSafeCast(ikm->add(COLLADA_ELEMENT_NEWPARAM)); - string newparam_sid = string("kscene.inst_") + model_id + string(".") + joint_sid + string(".") + axis_name; - newparam->setSid(newparam_sid.c_str()); - { - // kscene/inst_k1/joint0/axis0 - string sidref = string("kscene/inst_") + model_id + string("/") + joint_sid + string("/") + axis_name; - daeSafeCast(newparam->add(COLLADA_ELEMENT_SIDREF))->setValue(sidref.c_str()); - } - // - - // - domKinematics_newparamRef newparam_value = daeSafeCast(ikm->add(COLLADA_ELEMENT_NEWPARAM)); - string newparam_value_sid = string("kscene.inst_") + model_id + string(".") + joint_sid + string(".") + axis_name + string("_value"); - newparam_value->setSid(newparam_value_sid.c_str()); - { - // 0 - daeSafeCast(newparam_value->add(COLLADA_ELEMENT_FLOAT))->setValue(0.0f); - } - // - } - } - // -} - -void ColladaWriter::addKinematicLink(shared_ptr urdf_link, daeElementRef parent, int& link_num) { - // - domLinkRef link = daeSafeCast(parent->add(COLLADA_ELEMENT_LINK)); - string link_sid = string("link") + boost::lexical_cast(link_num); - link->setName(urdf_link->name.c_str()); - link->setSid(link_sid.c_str()); - link_num++; - foreach(shared_ptr urdf_joint, urdf_link->child_joints) { - // - domLink::domAttachment_fullRef attachment_full = daeSafeCast(link->add(COLLADA_ELEMENT_ATTACHMENT_FULL)); - string attachment_joint = string("k1/") + joint_sids_[urdf_joint->name]; - attachment_full->setJoint(attachment_joint.c_str()); - { - // x y z - addTranslate(attachment_full, urdf_joint->parent_to_joint_origin_transform.position, NULL, true); - // x y z w - addRotate(attachment_full, urdf_joint->parent_to_joint_origin_transform.rotation, NULL, true); - - addKinematicLink(robot_.getLink(urdf_joint->child_link_name), attachment_full, link_num); - } - // - } - // -} - -void ColladaWriter::addVisuals(SCENE const& scene) { - // - domNodeRef root_node = daeSafeCast(scene.vscene->add(COLLADA_ELEMENT_NODE)); - root_node->setId("v1"); - root_node->setName(robot_.getName().c_str()); - { - int link_num = 0; - addVisualLink(robot_.getRoot(), root_node, link_num); - } -} - -void ColladaWriter::addMaterials() { - urdf::Color ambient, diffuse; - ambient.init("1 1 1 0"); - diffuse.init("1 1 1 0"); - - for (map >::const_iterator i = robot_.links_.begin(); i != robot_.links_.end(); i++) { - shared_ptr urdf_link = i->second; - - map::const_iterator j = geometry_ids_.find(urdf_link->name); - if (j == geometry_ids_.end()) - continue; - - if (!urdf_link->visual->material->texture_filename.empty()) { - ambient.r = ambient.g = ambient.b = 1; ambient.a = 0; - diffuse.r = diffuse.g = diffuse.b = 1; diffuse.a = 0; - } - else { - ambient.r = diffuse.r = urdf_link->visual->material->color.r; - ambient.g = diffuse.g = urdf_link->visual->material->color.g; - ambient.b = diffuse.b = urdf_link->visual->material->color.b; - ambient.a = diffuse.a = urdf_link->visual->material->color.a; - } - - string geometry_id = j->second; - - domEffectRef effect = addEffect(geometry_id, ambient, diffuse); - - // - domMaterialRef material = daeSafeCast(materialsLib_->add(COLLADA_ELEMENT_MATERIAL)); - string material_id = geometry_id + string(".mat"); - material->setId(material_id.c_str()); - { - // - domInstance_effectRef instance_effect = daeSafeCast(material->add(COLLADA_ELEMENT_INSTANCE_EFFECT)); - string effect_id(effect->getId()); - instance_effect->setUrl((string("#") + effect_id).c_str()); - } - // - } -} - -domEffectRef ColladaWriter::addEffect(string const& geometry_id, urdf::Color const& color_ambient, urdf::Color const& color_diffuse) -{ - // - domEffectRef effect = daeSafeCast(effectsLib_->add(COLLADA_ELEMENT_EFFECT)); - string effect_id = geometry_id + string(".eff"); - effect->setId(effect_id.c_str()); - { - // - domProfile_commonRef profile = daeSafeCast(effect->add(COLLADA_ELEMENT_PROFILE_COMMON)); - { - // - domProfile_common::domTechniqueRef technique = daeSafeCast(profile->add(COLLADA_ELEMENT_TECHNIQUE)); - { - // - domProfile_common::domTechnique::domPhongRef phong = daeSafeCast(technique->add(COLLADA_ELEMENT_PHONG)); - { - // - domFx_common_color_or_textureRef ambient = daeSafeCast(phong->add(COLLADA_ELEMENT_AMBIENT)); - { - // r g b a - domFx_common_color_or_texture::domColorRef ambient_color = daeSafeCast(ambient->add(COLLADA_ELEMENT_COLOR)); - ambient_color->getValue().setCount(4); - ambient_color->getValue()[0] = color_ambient.r; - ambient_color->getValue()[1] = color_ambient.g; - ambient_color->getValue()[2] = color_ambient.b; - ambient_color->getValue()[3] = color_ambient.a; - // - } - // - - // - domFx_common_color_or_textureRef diffuse = daeSafeCast(phong->add(COLLADA_ELEMENT_DIFFUSE)); - { - // r g b a - domFx_common_color_or_texture::domColorRef diffuse_color = daeSafeCast(diffuse->add(COLLADA_ELEMENT_COLOR)); - diffuse_color->getValue().setCount(4); - diffuse_color->getValue()[0] = color_diffuse.r; - diffuse_color->getValue()[1] = color_diffuse.g; - diffuse_color->getValue()[2] = color_diffuse.b; - diffuse_color->getValue()[3] = color_diffuse.a; - // - } - // - } - // - } - // - } - // - } - // - - return effect; -} - -void ColladaWriter::addVisualLink(shared_ptr urdf_link, daeElementRef parent, int& link_num) { - // - domNodeRef node = daeSafeCast(parent->add(COLLADA_ELEMENT_NODE)); - string node_sid = string("node") + boost::lexical_cast(link_num); - string node_id = string("v1.") + node_sid; - node->setName(urdf_link->name.c_str()); - node->setSid(node_sid.c_str()); - node->setId(node_id.c_str()); - link_num++; - - domNodeRef parent_node = node; - - { - if (!!urdf_link->parent_joint) { - // x y z - addTranslate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.position, NULL, true); - // x y z w - addRotate(node, urdf_link->parent_joint->parent_to_joint_origin_transform.rotation, NULL, true); - - domRotateRef joint_rotate; - // x y z angle - //joint_rotate = addRotate(parent_node, urdf_link->parent_joint->parent_to_joint_origin_transform.rotation); - - joint_rotate = daeSafeCast(parent_node->add(COLLADA_ELEMENT_ROTATE)); - joint_rotate->getValue().setCount(4); - joint_rotate->getValue()[0] = urdf_link->parent_joint->axis.x; - joint_rotate->getValue()[1] = urdf_link->parent_joint->axis.y; - joint_rotate->getValue()[2] = urdf_link->parent_joint->axis.z; - joint_rotate->getValue()[3] = 0; - - string joint_sid = joint_sids_[urdf_link->parent_joint->name]; - string joint_rotate_sid = string("node_") + joint_sid + string("_axis0"); - joint_rotate->setSid(joint_rotate_sid.c_str()); - - node_ids_[urdf_link->parent_joint->name] = node_id; - } - - if (!!urdf_link->visual) { - // - domNodeRef visual_node = daeSafeCast(node->add(COLLADA_ELEMENT_NODE)); - string visual_sid("visual"); - string visual_id = node_id + "." + visual_sid; - visual_node->setName("visual"); - visual_node->setSid(visual_sid.c_str()); - visual_node->setId(visual_id.c_str()); - parent_node = visual_node; - - // x y z - addTranslate(parent_node, urdf_link->visual->origin.position, NULL, true); - // x y z w - addRotate(parent_node, urdf_link->visual->origin.rotation, NULL, true); - } - - // - map::const_iterator i = geometry_ids_.find(urdf_link->name); - if (i != geometry_ids_.end()) { - domInstance_geometryRef instance_geometry = daeSafeCast(parent_node->add(COLLADA_ELEMENT_INSTANCE_GEOMETRY)); - string geometry_id = i->second; - string instance_geometry_url = string("#") + geometry_id; - instance_geometry->setUrl(instance_geometry_url.c_str()); - { - // - domBind_materialRef bind_material = daeSafeCast(instance_geometry->add(COLLADA_ELEMENT_BIND_MATERIAL)); - { - // - domBind_material::domTechnique_commonRef technique_common = daeSafeCast(bind_material->add(COLLADA_ELEMENT_TECHNIQUE_COMMON)); - { - // - domInstance_materialRef instance_material = daeSafeCast(technique_common->add(COLLADA_ELEMENT_INSTANCE_MATERIAL)); - instance_material->setTarget((instance_geometry_url + string(".mat")).c_str()); - instance_material->setSymbol("mat0"); - // - } - // - } - // - } - } - // - - // - foreach(shared_ptr link2, urdf_link->child_links) - addVisualLink(link2, node, link_num); - // - } - // -} - -domTranslateRef ColladaWriter::addTranslate(daeElementRef parent, urdf::Vector3 const& position, daeElementRef before, bool ignore_zero_translations) { - if (ignore_zero_translations && position.x == 0.0 && position.y == 0.0 && position.z == 0.0) - return NULL; - - // x y z - domTranslateRef trans; - if (before) { - trans = daeSafeCast(parent->createElement(COLLADA_ELEMENT_TRANSLATE)); - parent->addBefore(trans, before); - } - else - trans = daeSafeCast(parent->add(COLLADA_ELEMENT_TRANSLATE)); - trans->getValue().setCount(3); - trans->getValue()[0] = position.x; - trans->getValue()[1] = position.y; - trans->getValue()[2] = position.z; - return trans; -} - -domRotateRef ColladaWriter::addRotate(daeElementRef parent, urdf::Rotation const& r, daeElementRef before, bool ignore_zero_rotations) { - double ax, ay, az, aa; - - // Convert from quaternion to axis-angle - double sqr_len = r.x * r.x + r.y * r.y + r.z * r.z; - if (sqr_len > 0) { - aa = 2 * acos(r.w); - - double inv_len = 1.0 / sqrt(sqr_len); - ax = r.x * inv_len; - ay = r.y * inv_len; - az = r.z * inv_len; - } - else { - if (ignore_zero_rotations) - return NULL; - - // Angle is 0 (mod 2*pi), so no need to add rotate node - aa = 0.0; - ax = 1.0; - ay = 0.0; - az = 0.0; - } - - // x y z w - domRotateRef rot; - if (before) { - rot = daeSafeCast(parent->createElement(COLLADA_ELEMENT_ROTATE)); - parent->addBefore(rot, before); - } - else - rot = daeSafeCast(parent->add(COLLADA_ELEMENT_ROTATE)); - rot->getValue().setCount(4); - rot->getValue()[0] = ax; - rot->getValue()[1] = ay; - rot->getValue()[2] = az; - rot->getValue()[3] = angles::to_degrees(aa); - - return rot; -} - - void ColladaWriter::addMimicJoint(domFormulaRef formula, const std::string& joint_sid,const std::string& joint_mimic_sid, double multiplier, double offset) -{ - string sid = joint_sid+string(".formula"); - formula->setSid(sid.c_str()); - - domCommon_float_or_paramRef ptarget = daeSafeCast(formula->createAndPlace(COLLADA_ELEMENT_TARGET)); - daeSafeCast(ptarget->createAndPlace(COLLADA_TYPE_PARAM))->setValue(joint_sid.c_str()); - - domFormula_techniqueRef pftec = daeSafeCast(formula->createAndPlace(COLLADA_ELEMENT_TECHNIQUE_COMMON)); - - // a x b - daeElementRef pmath_math = pftec->createAndPlace("math"); - daeElementRef pmath_apply = pmath_math->createAndPlace("apply"); - { - daeElementRef pmath_plus = pmath_apply->createAndPlace("plus"); - daeElementRef pmath_apply1 = pmath_apply->createAndPlace("apply"); - { - daeElementRef pmath_times = pmath_apply1->createAndPlace("times"); - daeElementRef pmath_const0 = pmath_apply1->createAndPlace("cn"); - pmath_const0->setCharData(boost::lexical_cast(multiplier)); - daeElementRef pmath_symb = pmath_apply1->createAndPlace("csymbol"); - pmath_symb->setAttribute("encoding","COLLADA"); - pmath_symb->setCharData(joint_mimic_sid); - } - daeElementRef pmath_const1 = pmath_apply->createAndPlace("cn"); - pmath_const1->setCharData(boost::lexical_cast(offset)); - } -} - -string ColladaWriter::getTimeStampString() const { - // facet becomes owned by locale, so no need to explicitly delete - boost::posix_time::time_facet* facet = new boost::posix_time::time_facet("%Y-%m-%dT%H:%M:%s"); - - std::stringstream ss(std::stringstream::in | std::stringstream::out); - ss.imbue(std::locale(ss.getloc(), facet)); - ss << boost::posix_time::second_clock::local_time(); - - string date; - ss >> date; - - return date; -} - -} diff --git a/collada_urdf/src/stl_loader.cpp b/collada_urdf/src/stl_loader.cpp deleted file mode 100644 index 4194f99..0000000 --- a/collada_urdf/src/stl_loader.cpp +++ /dev/null @@ -1,153 +0,0 @@ -/********************************************************************* -* Software License Agreement (BSD License) -* -* Copyright (c) 2010, Willow Garage, Inc. -* All rights reserved. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions -* are met: -* -* * Redstributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* * Redistributions in binary form must reproduce the above -* copyright notice, this list of conditions and the following -* disclaimer in the documentation and/or other materials provided -* with the distribution. -* * Neither the name of the Willow Garage nor the names of its -* contributors may be used to endorse or promote products derived -* from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -* POSSIBILITY OF SUCH DAMAGE. -*********************************************************************/ - -/* Author: Tim Field */ - -#include "collada_urdf/stl_loader.h" - -#include -#include -#include - -#include - -using std::string; -using boost::shared_ptr; - -namespace collada_urdf { - -// Vector3 - -Vector3::Vector3(float _x, float _y, float _z) : x(_x), y(_y), z(_z) { } - -bool Vector3::operator==(Vector3 const& v) const { - return x == v.x && y == v.y && z == v.z; -} - -// Mesh - -Mesh::Mesh() { -} - -int Mesh::getVertexIndex(const Vector3& v) const { - for (unsigned int i = 0; i < vertices.size(); i++) - if (vertices[i] == v) - return i; - - return -1; -} - -void Mesh::addVertex(Vector3 const& v) { vertices.push_back(v); } -void Mesh::addNormal(Vector3 const& n) { normals.push_back(n); } -void Mesh::addIndex(unsigned int i) { indices.push_back(i); } - -// STLLoader - -shared_ptr STLLoader::load(std::string const& filename) { - file_ = fopen(filename.c_str(), "r"); - if (file_ == NULL) - return shared_ptr(); - - mesh_ = shared_ptr(new Mesh); - readBinary(); - fclose(file_); - file_ = NULL; - - return mesh_; -} - -void STLLoader::readBinary() { - // 80 byte Header - for (int i = 0; i < 80; i++) - fgetc(file_); - - int face_num = readLongInt(); - - for (int iface = 0; iface < face_num; iface++) { - float nx = readFloat(); - float ny = readFloat(); - float nz = readFloat(); - Vector3 normal(nx, ny, nz); - - for (int i = 0; i < 3; i++) { - float vx = readFloat(); - float vy = readFloat(); - float vz = readFloat(); - Vector3 vertex(vx, vy, vz); - - int index = mesh_->getVertexIndex(vertex); - if (index == -1) { - mesh_->addVertex(vertex); - mesh_->addNormal(normal); - index = mesh_->vertices.size() - 1; - } - mesh_->addIndex(index); - } - - readShortInt(); // 2 byte attribute - } -} - -float STLLoader::readFloat() { - float rval; - if (fread(&rval, sizeof(float), 1, file_) == 0) - std::cerr << "Error in STLLoader::readFloat" << std::endl; - - return rval; -} - -uint32_t STLLoader::readLongInt() { - union - { - uint32_t yint; - char ychar[4]; - } y; - y.ychar[0] = fgetc(file_); - y.ychar[1] = fgetc(file_); - y.ychar[2] = fgetc(file_); - y.ychar[3] = fgetc(file_); - - return y.yint; -} - -uint16_t STLLoader::readShortInt() { - uint8_t c1 = fgetc(file_); - uint8_t c2 = fgetc(file_); - - uint16_t ival = c1 | (c2 << 8); - - return ival; -} - -} diff --git a/collada_urdf/src/urdf_to_collada.cpp b/collada_urdf/src/urdf_to_collada.cpp index 6785ebe..163ec9d 100644 --- a/collada_urdf/src/urdf_to_collada.cpp +++ b/collada_urdf/src/urdf_to_collada.cpp @@ -48,8 +48,13 @@ int main(int argc, char** argv) std::string input_filename(argv[1]); std::string output_filename(argv[2]); + urdf::Model robot_model; + if( !robot_model.initFile(input_filename) ) { + ROS_ERROR("failed to open urdf file %s",input_filename.c_str()); + } + boost::shared_ptr dom; - if (!collada_urdf::colladaFromUrdfFile(input_filename, dom)) { + if (!collada_urdf::colladaFromUrdfModel(robot_model, dom)) { std::cerr << std::endl << "Error converting document" << std::endl; return -1; } diff --git a/urdf/manifest.xml b/urdf/manifest.xml index f857168..9e5ed9a 100644 --- a/urdf/manifest.xml +++ b/urdf/manifest.xml @@ -13,6 +13,7 @@ + From 2a6e9665bb01a2e34ab20acc3c40d17bd905a6bd Mon Sep 17 00:00:00 2001 From: rdiankov Date: Wed, 8 Dec 2010 02:56:20 +0000 Subject: [PATCH 227/245] collada urdf uses link/joint names for sids (easier referencing) --- collada_urdf/src/collada_urdf.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/collada_urdf/src/collada_urdf.cpp b/collada_urdf/src/collada_urdf.cpp index 394d648..c9d1e6e 100644 --- a/collada_urdf/src/collada_urdf.cpp +++ b/collada_urdf/src/collada_urdf.cpp @@ -426,7 +426,7 @@ protected: for(size_t idof = 0; idof < _ikmout->vaxissids.size(); ++idof) { string axis_infosid = str(boost::format("axis_info_inst%d")%idof); boost::shared_ptr pjoint = _ikmout->kmout->vaxissids.at(idof).pjoint; - BOOST_ASSERT(_mapjointindices[pjoint] == idof); + BOOST_ASSERT(_mapjointindices[pjoint] == (int)idof); //int iaxis = _ikmout->kmout->vaxissids.at(idof).iaxis; // Kinematics axis info @@ -601,7 +601,7 @@ protected: boost::shared_ptr pjoint = itjoint->second; int index = _mapjointindices[itjoint->second]; domJointRef pdomjoint = daeSafeCast(ktec->add(COLLADA_ELEMENT_JOINT)); - string jointid = str(boost::format("joint%d")%index); + string jointid = pjoint->name;//str(boost::format("joint%d")%index); pdomjoint->setSid( jointid.c_str() ); pdomjoint->setName(pjoint->name.c_str()); domAxis_constraintRef axis; @@ -669,17 +669,17 @@ protected: // create the formulas for all mimic joints FOREACHC(itjoint, _robot.joints_) { - int index = _mapjointindices[itjoint->second]; + string jointsid = itjoint->second->name; boost::shared_ptr pjoint = itjoint->second; if( !pjoint->mimic ) { continue; } domFormulaRef pf = daeSafeCast(ktec->add(COLLADA_ELEMENT_FORMULA)); - string formulaid = str(boost::format("joint%d.formula")%index); + string formulaid = str(boost::format("%s_formula")%jointsid); pf->setSid(formulaid.c_str()); domCommon_float_or_paramRef ptarget = daeSafeCast(pf->add(COLLADA_ELEMENT_TARGET)); - string targetjointid = str(boost::format("%s/joint%d")%kmodel->getID()%index); + string targetjointid = str(boost::format("%s/%s")%kmodel->getID()%jointsid); daeSafeCast(ptarget->add(COLLADA_TYPE_PARAM))->setValue(targetjointid.c_str()); domFormula_techniqueRef pftec = daeSafeCast(pf->add(COLLADA_ELEMENT_TECHNIQUE_COMMON)); @@ -696,7 +696,7 @@ protected: pmath_const0->setCharData(str(boost::format("%f")%pjoint->mimic->multiplier)); daeElementRef pmath_symb = pmath_apply1->add("csymbol"); pmath_symb->setAttribute("encoding","COLLADA"); - pmath_symb->setCharData(str(boost::format("%s/joint%d")%kmodel->getID()%_mapjointindices[_robot.getJoint(pjoint->mimic->joint_name)])); + pmath_symb->setCharData(str(boost::format("%s/%s")%kmodel->getID()%pjoint->mimic->joint_name)); } daeElementRef pmath_const1 = pmath_apply->add("cn"); pmath_const1->setCharData(str(boost::format("%f")%pjoint->mimic->offset)); @@ -715,7 +715,7 @@ protected: { LINKOUTPUT out; int linkindex = _maplinkindices[plink]; - string linksid = str(boost::format("link%d")%linkindex); + string linksid = plink->name; domLinkRef pdomlink = daeSafeCast(pkinparent->add(COLLADA_ELEMENT_LINK)); pdomlink->setName(plink->name.c_str()); pdomlink->setSid(linksid.c_str()); @@ -766,7 +766,7 @@ protected: // domLink::domAttachment_fullRef attachment_full = daeSafeCast(pdomlink->add(COLLADA_ELEMENT_ATTACHMENT_FULL)); - string jointid = str(boost::format("%s/joint%d")%strModelUri%index); + string jointid = str(boost::format("%s/%s")%strModelUri%pjoint->name); attachment_full->setJoint(jointid.c_str()); LINKOUTPUT childinfo = _WriteLink(_robot.getLink(pjoint->child_link_name), attachment_full, pnode, strModelUri); @@ -778,7 +778,7 @@ protected: } // rotate/translate elements - string jointnodesid = str(boost::format("node_joint%d_axis0")%index); + string jointnodesid = str(boost::format("node_%s_axis0")%pjoint->name); switch(pjoint->type) { case urdf::Joint::REVOLUTE: case urdf::Joint::CONTINUOUS: From 37e10c333cc4ff915c6dda5dbca1d79011a9b3fc Mon Sep 17 00:00:00 2001 From: rdiankov Date: Fri, 17 Dec 2010 03:02:51 +0000 Subject: [PATCH 228/245] fixed bind/newparam problem in collada writer --- collada_urdf/src/collada_urdf.cpp | 32 +++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/collada_urdf/src/collada_urdf.cpp b/collada_urdf/src/collada_urdf.cpp index c9d1e6e..1fd163b 100644 --- a/collada_urdf/src/collada_urdf.cpp +++ b/collada_urdf/src/collada_urdf.cpp @@ -472,9 +472,9 @@ protected: string asmsym = str(boost::format("%s.%s")%asmid%_ikmout->ikm->getSid()); string assym = str(boost::format("%s.%s")%_scene.kscene->getID()%_ikmout->ikm->getSid()); FOREACH(it, _ikmout->vkinematicsbindings) { - domKinematics_bindRef abm = daeSafeCast(ias_motion->add(COLLADA_ELEMENT_BIND)); - abm->setSymbol(asmsym.c_str()); - daeSafeCast(abm->add(COLLADA_ELEMENT_PARAM))->setRef(it->first.c_str()); + domKinematics_newparamRef abm = daeSafeCast(ias_motion->add(COLLADA_ELEMENT_NEWPARAM)); + abm->setSid(asmsym.c_str()); + daeSafeCast(abm->add(COLLADA_ELEMENT_SIDREF))->setValue(it->first.c_str()); domKinematics_bindRef ab = daeSafeCast(ias->add(COLLADA_ELEMENT_BIND)); ab->setSymbol(assym.c_str()); daeSafeCast(ab->add(COLLADA_ELEMENT_PARAM))->setRef(asmsym.c_str()); @@ -482,17 +482,17 @@ protected: } for(size_t idof = 0; idof < _ikmout->vaxissids.size(); ++idof) { const axis_sids& kas = _ikmout->vaxissids.at(idof); - domKinematics_bindRef abm = daeSafeCast(ias_motion->add(COLLADA_ELEMENT_BIND)); - abm->setSymbol(str(boost::format("%s.%s")%asmid%kas.axissid).c_str()); - daeSafeCast(abm->add(COLLADA_ELEMENT_PARAM))->setRef(kas.axissid.c_str()); + domKinematics_newparamRef abm = daeSafeCast(ias_motion->add(COLLADA_ELEMENT_NEWPARAM)); + abm->setSid(str(boost::format("%s.%s")%asmid%kas.axissid).c_str()); + daeSafeCast(abm->add(COLLADA_ELEMENT_SIDREF))->setValue(kas.axissid.c_str()); domKinematics_bindRef ab = daeSafeCast(ias->add(COLLADA_ELEMENT_BIND)); ab->setSymbol(str(boost::format("%s.%s")%assym%kas.axissid).c_str()); daeSafeCast(ab->add(COLLADA_ELEMENT_PARAM))->setRef(str(boost::format("%s.%s")%asmid%kas.axissid).c_str()); string valuesid; if( kas.valuesid.size() > 0 ) { - domKinematics_bindRef abmvalue = daeSafeCast(ias_motion->add(COLLADA_ELEMENT_BIND)); - abmvalue->setSymbol(str(boost::format("%s.%s")%asmid%kas.valuesid).c_str()); - daeSafeCast(abmvalue->add(COLLADA_ELEMENT_PARAM))->setRef(kas.valuesid.c_str()); + domKinematics_newparamRef abmvalue = daeSafeCast(ias_motion->add(COLLADA_ELEMENT_NEWPARAM)); + abmvalue->setSid(str(boost::format("%s.%s")%asmid%kas.valuesid).c_str()); + daeSafeCast(abmvalue->add(COLLADA_ELEMENT_SIDREF))->setValue(kas.valuesid.c_str()); domKinematics_bindRef abvalue = daeSafeCast(ias->add(COLLADA_ELEMENT_BIND)); valuesid = str(boost::format("%s.%s")%assym%kas.valuesid); abvalue->setSymbol(valuesid.c_str()); @@ -521,15 +521,15 @@ protected: _ikmout->ikm->setUrl(str(boost::format("#%s")%kmout->kmodel->getID()).c_str()); _ikmout->ikm->setSid(ikmsid.c_str()); - domKinematics_bindRef kbind = daeSafeCast(_ikmout->ikm->add(COLLADA_ELEMENT_BIND)); - kbind->setSymbol((symscope+ikmsid).c_str()); - daeSafeCast(kbind->add(COLLADA_ELEMENT_SIDREF))->setValue((refscope+ikmsid).c_str()); - _ikmout->vkinematicsbindings.push_back(make_pair(string(kbind->getSymbol()), str(boost::format("visual%d/node0")%id))); + domKinematics_newparamRef kbind = daeSafeCast(_ikmout->ikm->add(COLLADA_ELEMENT_NEWPARAM)); + kbind->setSid((symscope+ikmsid).c_str()); + daeSafeCast(kbind->add(COLLADA_ELEMENT_SIDREF))->setValue((refscope+ikmsid).c_str()); + _ikmout->vkinematicsbindings.push_back(make_pair(string(kbind->getSid()), str(boost::format("visual%d/node0")%id))); _ikmout->vaxissids.reserve(kmout->vaxissids.size()); int i = 0; FOREACH(it,kmout->vaxissids) { - domKinematics_bindRef kbind = daeSafeCast(_ikmout->ikm->add(COLLADA_ELEMENT_BIND)); + domKinematics_newparamRef kbind = daeSafeCast(_ikmout->ikm->add(COLLADA_ELEMENT_NEWPARAM)); string ref = it->sid; size_t index = ref.find("/"); while(index != string::npos) { @@ -537,8 +537,8 @@ protected: index = ref.find("/",index+1); } string sid = symscope+ikmsid+"."+ref; - kbind->setSymbol(sid.c_str()); - daeSafeCast(kbind->add(COLLADA_ELEMENT_SIDREF))->setValue((refscope+ikmsid+"/"+it->sid).c_str()); + kbind->setSid(sid.c_str()); + daeSafeCast(kbind->add(COLLADA_ELEMENT_SIDREF))->setValue((refscope+ikmsid+"/"+it->sid).c_str()); double value=0; double flower=0, fupper=0; if( !!it->pjoint->limits ) { From d138bd73e04b7a7e3e707e3508e17b7059996da1 Mon Sep 17 00:00:00 2001 From: hsu Date: Fri, 17 Dec 2010 23:39:50 +0000 Subject: [PATCH 229/245] new multiple collision support with group tags per ticket #4932 --- urdf/include/urdf/link.h | 7 +++++ urdf/src/link.cpp | 61 ++++++++++++++++++++++++++++++++++++---- 2 files changed, 63 insertions(+), 5 deletions(-) diff --git a/urdf/include/urdf/link.h b/urdf/include/urdf/link.h index 0990407..af973e2 100644 --- a/urdf/include/urdf/link.h +++ b/urdf/include/urdf/link.h @@ -180,8 +180,10 @@ public: { origin.clear(); geometry.reset(); + this->group_name.clear(); }; bool initXml(TiXmlElement* config); + std::string group_name; }; @@ -201,6 +203,9 @@ public: /// collision element boost::shared_ptr collision; + /// a collection of collision elements, keyed by a string tag called "group" + std::map > > > collision_groups; + /// Parent Joint element /// explicitly stating "parent" because we want directional-ness for tree structure /// every link can have one parent @@ -225,11 +230,13 @@ public: this->parent_joint.reset(); this->child_joints.clear(); this->child_links.clear(); + this->collision_groups.clear(); }; void setParentJoint(boost::shared_ptr child); void addChild(boost::shared_ptr child); void addChildJoint(boost::shared_ptr child); + boost::shared_ptr > > getCollision(const std::string& grouip_name) const; private: boost::weak_ptr parent_link_; diff --git a/urdf/src/link.cpp b/urdf/src/link.cpp index ec44af3..367fe1b 100644 --- a/urdf/src/link.cpp +++ b/urdf/src/link.cpp @@ -297,6 +297,14 @@ bool Collision::initXml(TiXmlElement* config) return false; } + // Group Tag (optional) + // collision blocks without a group tag are designated to the "default" group + const char *group_name_char = config->Attribute("group"); + if (!group_name_char) + group_name = std::string("default"); + else + group_name = std::string(group_name_char); + return true; } @@ -443,21 +451,64 @@ bool Link::initXml(TiXmlElement* config) } } - // Collision (optional) - TiXmlElement *col = config->FirstChildElement("collision"); - if (col) + // Multiple Collisions (optional) + for (TiXmlElement* col_xml = config->FirstChildElement("collision"); col_xml; col_xml = col_xml->NextSiblingElement("collision")) { - collision.reset(new Collision); - if (!collision->initXml(col)) + boost::shared_ptr col; + col.reset(new Collision); + + if (col->initXml(col_xml)) + { + boost::shared_ptr > > cols = this->getCollision(col->group_name); + if (!cols) + { + // group does not exist, create one and add to map + cols.reset(new std::vector >); + // new group name, create vector, add vector to map and add Collision to the vector + this->collision_groups.insert(make_pair(col->group_name,cols)); + ROS_DEBUG("successfully added a new collision group name '%s'",col->group_name.c_str()); + } + + // group exists, add Collision to the vector in the map + cols->push_back(col); + ROS_DEBUG("successfully added a new collision under group name '%s'",col->group_name.c_str()); + } + else { ROS_ERROR("Could not parse collision element for Link '%s'", this->name.c_str()); + col.reset(); return false; } } + // Collision (optional) + // Assign one single default collision pointer from the collision_groups map + boost::shared_ptr > > default_collision = this->getCollision("default"); + if (!default_collision) + { + ROS_DEBUG("No 'default' collision group for Link '%s'", this->name.c_str()); + } + else if (default_collision->empty()) + { + ROS_DEBUG("'default' collision group is empty for Link '%s'", this->name.c_str()); + } + else + this->collision = (*default_collision->begin()); + return true; } +boost::shared_ptr > > Link::getCollision(const std::string& group_name) const +{ + boost::shared_ptr > > ptr; + if (this->collision_groups.find(group_name) == this->collision_groups.end()) + ptr.reset(); + else + ptr = this->collision_groups.find(group_name)->second; + return ptr; +} + + void Link::setParent(boost::shared_ptr parent) { this->parent_link_ = parent; From 0e6ee0cf9d09e456d586e9aa8cfb6d46914b044d Mon Sep 17 00:00:00 2001 From: hsu Date: Fri, 17 Dec 2010 23:54:15 +0000 Subject: [PATCH 230/245] forgot to reset collision --- urdf/src/link.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/urdf/src/link.cpp b/urdf/src/link.cpp index 367fe1b..e5b86f8 100644 --- a/urdf/src/link.cpp +++ b/urdf/src/link.cpp @@ -483,6 +483,7 @@ bool Link::initXml(TiXmlElement* config) // Collision (optional) // Assign one single default collision pointer from the collision_groups map + this->collision.reset(); boost::shared_ptr > > default_collision = this->getCollision("default"); if (!default_collision) { From 697db704d302b8d6d716093908e92b3b990a725f Mon Sep 17 00:00:00 2001 From: rdiankov Date: Mon, 20 Dec 2010 10:03:36 +0000 Subject: [PATCH 231/245] added more patches to collada, fixed several problems in collada export/import that led to invalid files, added a program to annotate the pr2 file with extra robot information --- collada_urdf/annotate_pr2dae.py | 368 ++++++++++++++++++++++++++++++ collada_urdf/src/collada_urdf.cpp | 44 ++-- colladadom/collada-dom.patch | 24 ++ urdf/src/collada_model_reader.cpp | 4 +- 4 files changed, 416 insertions(+), 24 deletions(-) create mode 100755 collada_urdf/annotate_pr2dae.py diff --git a/collada_urdf/annotate_pr2dae.py b/collada_urdf/annotate_pr2dae.py new file mode 100755 index 0000000..1d62095 --- /dev/null +++ b/collada_urdf/annotate_pr2dae.py @@ -0,0 +1,368 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import sys + +if __name__=="__main__": + if len(sys.argv) < 2: + print "Usage:\n\tannotate_pr2dae.py [collada file]\n\nAnnoates the PR2 with the OpenRAVE profile tags.\nThis file will be in existence until URDF can support the extra information providedhere" + sys.exit(0) + + dae = open(sys.argv[1],'r').read() + if dae.find('') < 0: + index = dae.find('') + dae = dae[:index] + """ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +""" + dae[index:] + + if dae.find('') + dae = dae[:index] + """ + + + + -130 129.75 + 0.023 60.0 + 0.25 + 1.73611115315e-05 + 0.05 + + + BaseLaser2D + + + + + -90 89.75 + 0.023 10.0 + 0.25 + 1.73611115315e-05 + 0.025 + + + BaseLaser2D + + + + + 2448 2050 3 + uint8 + 0.05 + 2955 0 1224.5 0 2955 1025.5 + 0 0 0 0 0 + + + BaseCamera + + + + + 640 480 1 + uint8 + 0.04 + 395.71449999999999 0.0 335.86279000000002 0.0 395.71449999999999 245.62557000000001 + 0 0 0 0 0 + + + BaseCamera + + + + + 640 480 1 + uint8 + 0.04 + 395.71449999999999 0.0 335.86279000000002 0.0 395.71449999999999 245.62557000000001 + 0 0 0 0 0 + + + BaseCamera + + + + + + 0.99956000000000012 0.0027200000000000002 -0.029390000000000003 -0.0027700000000000003 0.99999000000000005 -0.0016800000000000001 0.029390000000000003 0.0017600000000000001 0.99957000000000007 + + + 0.99941000000000013 0.0035200000000000001 -0.034260000000000006 -0.0034600000000000004 0.99999000000000005 0.0017800000000000001 0.034270000000000002 -0.0016600000000000002 0.99941000000000013 + + + + 640 480 1 + uint8 + 0.04 + 426.35142000000002 0.0 313.91464000000002 0.0 426.51092999999997 238.27394000000001 + 0 0 0 0 0 + + + BaseCamera + + + + + 640 480 1 + uint8 + 0.04 + 430.5514 0.0 320.85068000000001 0.0 429.22170999999997 240.4314 + 0 0 0 0 0 + + + BaseCamera + + + + + +""" + dae[index:] + + manipulators = [('leftarm',""" + + + + + 0.18 0 0 + 0 1 0 90 + + + + -1 + + + + + + + ikfast_pr2_leftarm + + + + + +"""), + ('leftarm_torso',""" + + + + + 0.18 0 0 + 0 1 0 90 + + + + -1 + + + + + + + + ikfast_pr2_leftarm_torso + + + + + +"""), + ('rightarm',""" + + + + + 0.18 0 0 + 0 1 0 90 + + + + -1 + + + + + + + ikfast_pr2_rightarm + + + + + +"""), + ('rightarm_torso',""" + + + + + 0.18 0 0 + 0 1 0 90 + + + + -1 + + + + + + + + ikfast_pr2_rightarm_torso + + + + + +"""), + ('head',""" + + + + + + + + ikfast_pr2_head + + + + + +"""), + ('head_torso',""" + + + + + + + + + ikfast_pr2_head_torso + + + + + +"""), + ('rightarm_camera',""" + + + + + + + + + +"""), + ('leftarm_camera',""" + + + + + + + + + +""")] + sensors = [('base_laser',""" + + + + + + +"""), + ('tilt_laser',""" + + + + + + +"""), + ('l_forearm_cam_optical_sensor',""" + + + + + + +"""), + ('r_forearm_cam_optical_sensor',""" + + + + + + +"""), + ('narrow_stereo_optical_sensor',""" + + + + + + +"""), + ('wide_stereo_optical_sensor',""" + + + + + + +""")] + for name,xml in manipulators: + if dae.find(''%name) < 0: + index = dae.find('')+9 + dae = dae[:index] + xml + dae[index:] + for name,xml in sensors: + if dae.find(''%name) < 0: + index = dae.find('')+9 + dae = dae[:index] + xml + dae[index:] + open(sys.argv[1],'w').write(dae) diff --git a/collada_urdf/src/collada_urdf.cpp b/collada_urdf/src/collada_urdf.cpp index 1fd163b..2671187 100644 --- a/collada_urdf/src/collada_urdf.cpp +++ b/collada_urdf/src/collada_urdf.cpp @@ -469,34 +469,34 @@ protected: } // write the bindings - string asmsym = str(boost::format("%s.%s")%asmid%_ikmout->ikm->getSid()); - string assym = str(boost::format("%s.%s")%_scene.kscene->getID()%_ikmout->ikm->getSid()); + string asmsym = str(boost::format("%s_%s")%asmid%_ikmout->ikm->getSid()); + string assym = str(boost::format("%s_%s")%_scene.kscene->getID()%_ikmout->ikm->getSid()); FOREACH(it, _ikmout->vkinematicsbindings) { domKinematics_newparamRef abm = daeSafeCast(ias_motion->add(COLLADA_ELEMENT_NEWPARAM)); abm->setSid(asmsym.c_str()); - daeSafeCast(abm->add(COLLADA_ELEMENT_SIDREF))->setValue(it->first.c_str()); + daeSafeCast(abm->add(COLLADA_ELEMENT_SIDREF))->setValue(str(boost::format("%s/%s")%askid%it->first).c_str()); domKinematics_bindRef ab = daeSafeCast(ias->add(COLLADA_ELEMENT_BIND)); ab->setSymbol(assym.c_str()); - daeSafeCast(ab->add(COLLADA_ELEMENT_PARAM))->setRef(asmsym.c_str()); + daeSafeCast(ab->add(COLLADA_ELEMENT_PARAM))->setRef(str(boost::format("%s/%s")%asmid%asmsym).c_str()); _iasout->vkinematicsbindings.push_back(make_pair(string(ab->getSymbol()), it->second)); } for(size_t idof = 0; idof < _ikmout->vaxissids.size(); ++idof) { const axis_sids& kas = _ikmout->vaxissids.at(idof); domKinematics_newparamRef abm = daeSafeCast(ias_motion->add(COLLADA_ELEMENT_NEWPARAM)); - abm->setSid(str(boost::format("%s.%s")%asmid%kas.axissid).c_str()); - daeSafeCast(abm->add(COLLADA_ELEMENT_SIDREF))->setValue(kas.axissid.c_str()); + abm->setSid(str(boost::format("%s_%s")%asmid%kas.axissid).c_str()); + daeSafeCast(abm->add(COLLADA_ELEMENT_SIDREF))->setValue(str(boost::format("%s/%s")%askid%kas.axissid).c_str()); domKinematics_bindRef ab = daeSafeCast(ias->add(COLLADA_ELEMENT_BIND)); - ab->setSymbol(str(boost::format("%s.%s")%assym%kas.axissid).c_str()); - daeSafeCast(ab->add(COLLADA_ELEMENT_PARAM))->setRef(str(boost::format("%s.%s")%asmid%kas.axissid).c_str()); + ab->setSymbol(str(boost::format("%s_%s")%assym%kas.axissid).c_str()); + daeSafeCast(ab->add(COLLADA_ELEMENT_PARAM))->setRef(str(boost::format("%s/%s_%s")%asmid%asmid%kas.axissid).c_str()); string valuesid; if( kas.valuesid.size() > 0 ) { domKinematics_newparamRef abmvalue = daeSafeCast(ias_motion->add(COLLADA_ELEMENT_NEWPARAM)); - abmvalue->setSid(str(boost::format("%s.%s")%asmid%kas.valuesid).c_str()); - daeSafeCast(abmvalue->add(COLLADA_ELEMENT_SIDREF))->setValue(kas.valuesid.c_str()); + abmvalue->setSid(str(boost::format("%s_%s")%asmid%kas.valuesid).c_str()); + daeSafeCast(abmvalue->add(COLLADA_ELEMENT_SIDREF))->setValue(str(boost::format("%s/%s")%askid%kas.valuesid).c_str()); domKinematics_bindRef abvalue = daeSafeCast(ias->add(COLLADA_ELEMENT_BIND)); - valuesid = str(boost::format("%s.%s")%assym%kas.valuesid); + valuesid = str(boost::format("%s_%s")%assym%kas.valuesid); abvalue->setSymbol(valuesid.c_str()); - daeSafeCast(abvalue->add(COLLADA_ELEMENT_PARAM))->setRef(str(boost::format("%s.%s")%asmid%kas.valuesid).c_str()); + daeSafeCast(abvalue->add(COLLADA_ELEMENT_PARAM))->setRef(str(boost::format("%s/%s_%s")%asmid%asmid%kas.valuesid).c_str()); } _iasout->vaxissids.push_back(axis_sids(ab->getSymbol(),valuesid,kas.jointnodesid)); } @@ -514,7 +514,7 @@ protected: string symscope, refscope; if( sidscope.size() > 0 ) { - symscope = sidscope+string("."); + symscope = sidscope+string("_"); refscope = sidscope+string("/"); } string ikmsid = str(boost::format("%s_inst")%kmout->kmodel->getID()); @@ -536,7 +536,7 @@ protected: ref[index] = '.'; index = ref.find("/",index+1); } - string sid = symscope+ikmsid+"."+ref; + string sid = symscope+ikmsid+"_"+ref; kbind->setSid(sid.c_str()); daeSafeCast(kbind->add(COLLADA_ELEMENT_SIDREF))->setValue((refscope+ikmsid+"/"+it->sid).c_str()); double value=0; @@ -721,7 +721,7 @@ protected: pdomlink->setSid(linksid.c_str()); domNodeRef pnode = daeSafeCast(pnodeparent->add(COLLADA_ELEMENT_NODE)); - string nodeid = str(boost::format("v%s.node%d")%strModelUri%linkindex); + string nodeid = str(boost::format("v%s_node%d")%strModelUri%linkindex); pnode->setId( nodeid.c_str() ); string nodesid = str(boost::format("node%d")%linkindex); pnode->setSid(nodesid.c_str()); @@ -742,7 +742,7 @@ protected: if( !!geometry ) { int igeom = 0; - string geomid = str(boost::format("g%s.%s.geom%d")%strModelUri%linksid%igeom); + string geomid = str(boost::format("g%s_%s_geom%d")%strModelUri%linksid%igeom); domGeometryRef pdomgeom = _WriteGeometry(geometry, geomid); domInstance_geometryRef pinstgeom = daeSafeCast(pnode->add(COLLADA_ELEMENT_INSTANCE_GEOMETRY)); pinstgeom->setUrl((string("#")+geomid).c_str()); @@ -752,7 +752,7 @@ protected: domBind_materialRef pmat = daeSafeCast(pinstgeom->add(COLLADA_ELEMENT_BIND_MATERIAL)); domBind_material::domTechnique_commonRef pmattec = daeSafeCast(pmat->add(COLLADA_ELEMENT_TECHNIQUE_COMMON)); domInstance_materialRef pinstmat = daeSafeCast(pmattec->add(COLLADA_ELEMENT_INSTANCE_MATERIAL)); - pinstmat->setTarget(xsAnyURI(*pdomgeom, string("#")+geomid+string(".mat"))); + pinstmat->setTarget(xsAnyURI(*pdomgeom, string("#")+geomid+string("_mat"))); pinstmat->setSymbol("mat0"); } @@ -850,8 +850,8 @@ protected: void _WriteMaterial(const string& geometry_id, boost::shared_ptr material) { - string effid = geometry_id+string(".eff"); - string matid = geometry_id+string(".mat"); + string effid = geometry_id+string("_eff"); + string matid = geometry_id+string("_mat"); domMaterialRef pdommat = daeSafeCast(_materialsLib->add(COLLADA_ELEMENT_MATERIAL)); pdommat->setId(matid.c_str()); domInstance_effectRef pdominsteff = daeSafeCast(pdommat->add(COLLADA_ELEMENT_INSTANCE_EFFECT)); @@ -872,7 +872,7 @@ protected: // domMaterialRef dommaterial = daeSafeCast(_materialsLib->add(COLLADA_ELEMENT_MATERIAL)); - string material_id = geometry_id + string(".mat"); + string material_id = geometry_id + string("_mat"); dommaterial->setId(material_id.c_str()); { // @@ -905,10 +905,10 @@ protected: domAccessorRef pacc; domFloat_arrayRef parray; { - pvertsource->setId(str(boost::format("%s.positions")%pdomgeom->getID()).c_str()); + pvertsource->setId(str(boost::format("%s_positions")%pdomgeom->getID()).c_str()); parray = daeSafeCast(pvertsource->add(COLLADA_ELEMENT_FLOAT_ARRAY)); - parray->setId(str(boost::format("%s.positions-array")%pdomgeom->getID()).c_str()); + parray->setId(str(boost::format("%s_positions-array")%pdomgeom->getID()).c_str()); parray->setDigits(6); // 6 decimal places domSource::domTechnique_commonRef psourcetec = daeSafeCast(pvertsource->add(COLLADA_ELEMENT_TECHNIQUE_COMMON)); diff --git a/colladadom/collada-dom.patch b/colladadom/collada-dom.patch index e28599d..468977a 100644 --- a/colladadom/collada-dom.patch +++ b/colladadom/collada-dom.patch @@ -74,3 +74,27 @@ Index: dom/make/domTest.mk // First see if the whole thing resolves correctly if (daeElement* result = finder(container, s, profile)) return result; +@@ -355,6 +367,23 @@ + if ((!member.empty() || haveArrayIndex1) && result.scalar == NULL) + return daeSidRef::resolveData(); + ++ if( !!result.elt && !result.array && !result.scalar ) { ++ // if newparam, follow its SIDREF (Rosen Diankov) ++ if( strcmp(result.elt->getElementName(),"newparam") == 0) { ++ daeElement* psidref = result.elt->getChild("SIDREF"); ++ if( !!psidref ) { ++ daeSidRef::resolveData newresult; ++ newresult = resolveImpl(daeSidRef(string("./") + psidref->getCharData(),result.elt->getParent(),sidRef.profile)); ++ if( !newresult.elt ) { ++ newresult = resolveImpl(daeSidRef(psidref->getCharData(),result.elt->getParent(),sidRef.profile)); ++ } ++ if( !!newresult.elt ) { ++ return newresult; ++ } ++ } ++ } ++ } ++ + // SID resolution was successful. + return result; + } diff --git a/urdf/src/collada_model_reader.cpp b/urdf/src/collada_model_reader.cpp index 8778559..72f427d 100644 --- a/urdf/src/collada_model_reader.cpp +++ b/urdf/src/collada_model_reader.cpp @@ -1858,7 +1858,7 @@ protected: if( !!pbind->getSymbol() && strcmp(pbind->getSymbol(), ref) == 0 ) { // found a match if( !!pbind->getParam() ) { - return searchBinding(pbind->getParam()->getRef(), pbindelt); + return daeSidRef(pbind->getParam()->getRef(), pbindelt).resolve().elt; } else if( !!pbind->getSIDREF() ) { return daeSidRef(pbind->getSIDREF()->getValue(), pbindelt).resolve().elt; @@ -2197,7 +2197,7 @@ protected: ROS_WARN_STREAM("bind_kinematics_model does not reference element\n"); } else { - ROS_WARN_STREAM(str(boost::format("bind_kinematics_model cannot find reference to %s%s:\n")%pelt->getElementName())); + ROS_WARN_STREAM(str(boost::format("bind_kinematics_model cannot find reference to %s:\n")%pelt->getElementName())); } continue; } From 9de088ff755cc60295a2c146860a7e808b233e0e Mon Sep 17 00:00:00 2001 From: rdiankov Date: Tue, 21 Dec 2010 05:21:02 +0000 Subject: [PATCH 232/245] moved pr2 specific annotations to openrave_planning stack --- collada_urdf/annotate_pr2dae.py | 368 -------------------------------- 1 file changed, 368 deletions(-) delete mode 100755 collada_urdf/annotate_pr2dae.py diff --git a/collada_urdf/annotate_pr2dae.py b/collada_urdf/annotate_pr2dae.py deleted file mode 100755 index 1d62095..0000000 --- a/collada_urdf/annotate_pr2dae.py +++ /dev/null @@ -1,368 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -import sys - -if __name__=="__main__": - if len(sys.argv) < 2: - print "Usage:\n\tannotate_pr2dae.py [collada file]\n\nAnnoates the PR2 with the OpenRAVE profile tags.\nThis file will be in existence until URDF can support the extra information providedhere" - sys.exit(0) - - dae = open(sys.argv[1],'r').read() - if dae.find('') < 0: - index = dae.find('') - dae = dae[:index] + """ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -""" + dae[index:] - - if dae.find('') - dae = dae[:index] + """ - - - - -130 129.75 - 0.023 60.0 - 0.25 - 1.73611115315e-05 - 0.05 - - - BaseLaser2D - - - - - -90 89.75 - 0.023 10.0 - 0.25 - 1.73611115315e-05 - 0.025 - - - BaseLaser2D - - - - - 2448 2050 3 - uint8 - 0.05 - 2955 0 1224.5 0 2955 1025.5 - 0 0 0 0 0 - - - BaseCamera - - - - - 640 480 1 - uint8 - 0.04 - 395.71449999999999 0.0 335.86279000000002 0.0 395.71449999999999 245.62557000000001 - 0 0 0 0 0 - - - BaseCamera - - - - - 640 480 1 - uint8 - 0.04 - 395.71449999999999 0.0 335.86279000000002 0.0 395.71449999999999 245.62557000000001 - 0 0 0 0 0 - - - BaseCamera - - - - - - 0.99956000000000012 0.0027200000000000002 -0.029390000000000003 -0.0027700000000000003 0.99999000000000005 -0.0016800000000000001 0.029390000000000003 0.0017600000000000001 0.99957000000000007 - - - 0.99941000000000013 0.0035200000000000001 -0.034260000000000006 -0.0034600000000000004 0.99999000000000005 0.0017800000000000001 0.034270000000000002 -0.0016600000000000002 0.99941000000000013 - - - - 640 480 1 - uint8 - 0.04 - 426.35142000000002 0.0 313.91464000000002 0.0 426.51092999999997 238.27394000000001 - 0 0 0 0 0 - - - BaseCamera - - - - - 640 480 1 - uint8 - 0.04 - 430.5514 0.0 320.85068000000001 0.0 429.22170999999997 240.4314 - 0 0 0 0 0 - - - BaseCamera - - - - - -""" + dae[index:] - - manipulators = [('leftarm',""" - - - - - 0.18 0 0 - 0 1 0 90 - - - - -1 - - - - - - - ikfast_pr2_leftarm - - - - - -"""), - ('leftarm_torso',""" - - - - - 0.18 0 0 - 0 1 0 90 - - - - -1 - - - - - - - - ikfast_pr2_leftarm_torso - - - - - -"""), - ('rightarm',""" - - - - - 0.18 0 0 - 0 1 0 90 - - - - -1 - - - - - - - ikfast_pr2_rightarm - - - - - -"""), - ('rightarm_torso',""" - - - - - 0.18 0 0 - 0 1 0 90 - - - - -1 - - - - - - - - ikfast_pr2_rightarm_torso - - - - - -"""), - ('head',""" - - - - - - - - ikfast_pr2_head - - - - - -"""), - ('head_torso',""" - - - - - - - - - ikfast_pr2_head_torso - - - - - -"""), - ('rightarm_camera',""" - - - - - - - - - -"""), - ('leftarm_camera',""" - - - - - - - - - -""")] - sensors = [('base_laser',""" - - - - - - -"""), - ('tilt_laser',""" - - - - - - -"""), - ('l_forearm_cam_optical_sensor',""" - - - - - - -"""), - ('r_forearm_cam_optical_sensor',""" - - - - - - -"""), - ('narrow_stereo_optical_sensor',""" - - - - - - -"""), - ('wide_stereo_optical_sensor',""" - - - - - - -""")] - for name,xml in manipulators: - if dae.find(''%name) < 0: - index = dae.find('')+9 - dae = dae[:index] + xml + dae[index:] - for name,xml in sensors: - if dae.find(''%name) < 0: - index = dae.find('')+9 - dae = dae[:index] + xml + dae[index:] - open(sys.argv[1],'w').write(dae) From e92227f894e6dfc849329af17633ca1726f5f73a Mon Sep 17 00:00:00 2001 From: rdiankov Date: Tue, 21 Dec 2010 22:47:56 +0000 Subject: [PATCH 233/245] put back old collada_urdf (thanks to Tim Field for noticing this) --- .../include/collada_urdf/collada_urdf.h | 43 ++++++++++++------- collada_urdf/src/collada_urdf.cpp | 36 ++++++++++++++-- 2 files changed, 61 insertions(+), 18 deletions(-) diff --git a/collada_urdf/include/collada_urdf/collada_urdf.h b/collada_urdf/include/collada_urdf/collada_urdf.h index 558e51f..ae7ed8f 100644 --- a/collada_urdf/include/collada_urdf/collada_urdf.h +++ b/collada_urdf/include/collada_urdf/collada_urdf.h @@ -1,7 +1,7 @@ /********************************************************************* * Software License Agreement (BSD License) * -* Copyright (c) 2010, Willow Garage, Inc., University of Tokyo +* Copyright (c) 2010, Willow Garage, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -32,7 +32,7 @@ * POSSIBILITY OF SUCH DAMAGE. *********************************************************************/ -/* Authors: Tim Field, Rosen Diankov */ +/* Authors: Tim Field */ #ifndef COLLADA_URDF_COLLADA_URDF_H #define COLLADA_URDF_COLLADA_URDF_H @@ -50,20 +50,33 @@ public: ColladaUrdfException(std::string const& what); }; -enum WriteOptions -{ - WO_IgnoreCollisionGeometry = 1, ///< if set, will use only the visual geometry -}; - -/** Construct a COLLADA DOM from an URDF model - - \param robot_model The initialized robot model - \param dom The resulting COLLADA DOM - \param writeoptions A combination of \ref WriteOptions - - \return true on success, false on failure +/** Construct a COLLADA DOM from an URDF file + * \param file The filename from where to read the URDF + * \param dom The resulting COLLADA DOM + * \return true on success, false on failure */ -bool colladaFromUrdfModel(const urdf::Model& robot_model, boost::shared_ptr& dom, int writeoptions=0); +bool colladaFromUrdfFile(std::string const& file, boost::shared_ptr& dom); + +/** Construct a COLLADA DOM from a string containing URDF + * \param xml A string containing the XML description of the robot + * \param dom The resulting COLLADA DOM + * \return true on success, false on failure + */ +bool colladaFromUrdfString(std::string const& xml, boost::shared_ptr& dom); + +/** Construct a COLLADA DOM from a TiXmlDocument containing URDF + * \param xml_doc The TiXmlDocument containing URDF + * \param dom The resulting COLLADA DOM + * \return true on success, false on failure + */ +bool colladaFromUrdfXml(TiXmlDocument* xml_doc, boost::shared_ptr& dom); + +/** Construct a COLLADA DOM from a URDF robot model + * \param robot_model The URDF robot model + * \param dom The resulting COLLADA DOM + * \return true on success, false on failure + */ +bool colladaFromUrdfModel(urdf::Model const& robot_model, boost::shared_ptr& dom); /** Write a COLLADA DOM to a file * \param dom COLLADA DOM to write diff --git a/collada_urdf/src/collada_urdf.cpp b/collada_urdf/src/collada_urdf.cpp index 2671187..6e85bc6 100644 --- a/collada_urdf/src/collada_urdf.cpp +++ b/collada_urdf/src/collada_urdf.cpp @@ -1225,14 +1225,44 @@ private: Assimp::Importer _importer; }; + ColladaUrdfException::ColladaUrdfException(std::string const& what) : std::runtime_error(what) { } -bool colladaFromUrdfModel(const urdf::Model& robot_model, boost::shared_ptr& dom, int writeoptions) -{ - ColladaWriter writer(robot_model,writeoptions); +bool colladaFromUrdfFile(string const& file, boost::shared_ptr& dom) { + TiXmlDocument urdf_xml; + if (!urdf_xml.LoadFile(file)) { + ROS_ERROR("Could not load XML file"); + return false; + } + + return colladaFromUrdfXml(&urdf_xml, dom); +} + +bool colladaFromUrdfString(string const& xml, boost::shared_ptr& dom) { + TiXmlDocument urdf_xml; + if (urdf_xml.Parse(xml.c_str()) == 0) { + ROS_ERROR("Could not parse XML document"); + return false; + } + + return colladaFromUrdfXml(&urdf_xml, dom); +} + +bool colladaFromUrdfXml(TiXmlDocument* xml_doc, boost::shared_ptr& dom) { + urdf::Model robot_model; + if (!robot_model.initXml(xml_doc)) { + ROS_ERROR("Could not generate robot model"); + return false; + } + + return colladaFromUrdfModel(robot_model, dom); +} + +bool colladaFromUrdfModel(urdf::Model const& robot_model, boost::shared_ptr& dom) { + ColladaWriter writer(robot_model,0); dom = writer.convert(); return dom != boost::shared_ptr(); } From e2cb0826dacb3293be447751c9e5dbaf1d3a5d61 Mon Sep 17 00:00:00 2001 From: rdiankov Date: Mon, 3 Jan 2011 04:28:56 +0000 Subject: [PATCH 234/245] updated collada_urdf with openrave profile formulas (partial derivative info) --- collada_urdf/src/collada_urdf.cpp | 75 ++++++++++++++++++++++++------- 1 file changed, 60 insertions(+), 15 deletions(-) diff --git a/collada_urdf/src/collada_urdf.cpp b/collada_urdf/src/collada_urdf.cpp index 6e85bc6..de766d1 100644 --- a/collada_urdf/src/collada_urdf.cpp +++ b/collada_urdf/src/collada_urdf.cpp @@ -682,24 +682,68 @@ protected: string targetjointid = str(boost::format("%s/%s")%kmodel->getID()%jointsid); daeSafeCast(ptarget->add(COLLADA_TYPE_PARAM))->setValue(targetjointid.c_str()); - domFormula_techniqueRef pftec = daeSafeCast(pf->add(COLLADA_ELEMENT_TECHNIQUE_COMMON)); - // create a const0*joint+const1 formula - // a x b - daeElementRef pmath_math = pftec->add("math"); - daeElementRef pmath_apply = pmath_math->add("apply"); + domTechniqueRef pftec = daeSafeCast(pf->add(COLLADA_ELEMENT_TECHNIQUE)); + pftec->setProfile("OpenRAVE"); + // save position equation { - daeElementRef pmath_plus = pmath_apply->add("plus"); - daeElementRef pmath_apply1 = pmath_apply->add("apply"); + daeElementRef poselt = pftec->add("equation"); + poselt->setAttribute("type","position"); + // create a const0*joint+const1 formula + // a x b + daeElementRef pmath_math = poselt->add("math"); + daeElementRef pmath_apply = pmath_math->add("apply"); { - daeElementRef pmath_times = pmath_apply1->add("times"); - daeElementRef pmath_const0 = pmath_apply1->add("cn"); - pmath_const0->setCharData(str(boost::format("%f")%pjoint->mimic->multiplier)); - daeElementRef pmath_symb = pmath_apply1->add("csymbol"); - pmath_symb->setAttribute("encoding","COLLADA"); - pmath_symb->setCharData(str(boost::format("%s/%s")%kmodel->getID()%pjoint->mimic->joint_name)); + daeElementRef pmath_plus = pmath_apply->add("plus"); + daeElementRef pmath_apply1 = pmath_apply->add("apply"); + { + daeElementRef pmath_times = pmath_apply1->add("times"); + daeElementRef pmath_const0 = pmath_apply1->add("cn"); + pmath_const0->setCharData(str(boost::format("%f")%pjoint->mimic->multiplier)); + daeElementRef pmath_symb = pmath_apply1->add("csymbol"); + pmath_symb->setAttribute("encoding","COLLADA"); + pmath_symb->setCharData(str(boost::format("%s/%s")%kmodel->getID()%pjoint->mimic->joint_name)); + } + daeElementRef pmath_const1 = pmath_apply->add("cn"); + pmath_const1->setCharData(str(boost::format("%f")%pjoint->mimic->offset)); + } + } + // save first partial derivative + { + daeElementRef derivelt = pftec->add("equation"); + derivelt->setAttribute("type","first_partial"); + derivelt->setAttribute("target",str(boost::format("%s/%s")%kmodel->getID()%pjoint->mimic->joint_name).c_str()); + daeElementRef pmath_const0 = derivelt->add("cn"); + pmath_const0->setCharData(str(boost::format("%f")%pjoint->mimic->multiplier)); + } + // save second partial derivative + { + daeElementRef derivelt = pftec->add("equation"); + derivelt->setAttribute("type","second_partial"); + derivelt->setAttribute("target",str(boost::format("%s/%s")%kmodel->getID()%pjoint->mimic->joint_name).c_str()); + daeElementRef pmath_const0 = derivelt->add("cn"); + pmath_const0->setCharData("0"); + } + + { + domFormula_techniqueRef pfcommontec = daeSafeCast(pf->add(COLLADA_ELEMENT_TECHNIQUE_COMMON)); + // create a const0*joint+const1 formula + // a x b + daeElementRef pmath_math = pfcommontec->add("math"); + daeElementRef pmath_apply = pmath_math->add("apply"); + { + daeElementRef pmath_plus = pmath_apply->add("plus"); + daeElementRef pmath_apply1 = pmath_apply->add("apply"); + { + daeElementRef pmath_times = pmath_apply1->add("times"); + daeElementRef pmath_const0 = pmath_apply1->add("cn"); + pmath_const0->setCharData(str(boost::format("%f")%pjoint->mimic->multiplier)); + daeElementRef pmath_symb = pmath_apply1->add("csymbol"); + pmath_symb->setAttribute("encoding","COLLADA"); + pmath_symb->setCharData(str(boost::format("%s/%s")%kmodel->getID()%pjoint->mimic->joint_name)); + } + daeElementRef pmath_const1 = pmath_apply->add("cn"); + pmath_const1->setCharData(str(boost::format("%f")%pjoint->mimic->offset)); } - daeElementRef pmath_const1 = pmath_apply->add("cn"); - pmath_const1->setCharData(str(boost::format("%f")%pjoint->mimic->offset)); } } @@ -707,6 +751,7 @@ protected: } /// \brief Write link of a kinematic body + /// /// \param link Link to write /// \param pkinparent Kinbody parent /// \param pnodeparent Node parent From 3676dd78eb584b96f0de3c32b5c5a5b07afb42dc Mon Sep 17 00:00:00 2001 From: wim Date: Mon, 3 Jan 2011 18:37:01 +0000 Subject: [PATCH 235/245] fix include flags for messages --- kdl_parser/manifest.xml | 2 +- urdf/manifest.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/kdl_parser/manifest.xml b/kdl_parser/manifest.xml index afa6bc9..603b8c9 100644 --- a/kdl_parser/manifest.xml +++ b/kdl_parser/manifest.xml @@ -15,7 +15,7 @@ - + diff --git a/urdf/manifest.xml b/urdf/manifest.xml index 9e5ed9a..c3987b1 100644 --- a/urdf/manifest.xml +++ b/urdf/manifest.xml @@ -15,7 +15,7 @@ - + From 0dcc5b0f8b083a4d5aad3edcc93061210dd5c6e4 Mon Sep 17 00:00:00 2001 From: rdiankov Date: Thu, 6 Jan 2011 02:03:40 +0000 Subject: [PATCH 236/245] collada urdf exporter: remove / and . from ids --- collada_urdf/src/collada_urdf.cpp | 60 ++++++++++++++++++------------- 1 file changed, 36 insertions(+), 24 deletions(-) diff --git a/collada_urdf/src/collada_urdf.cpp b/collada_urdf/src/collada_urdf.cpp index de766d1..6bda536 100644 --- a/collada_urdf/src/collada_urdf.cpp +++ b/collada_urdf/src/collada_urdf.cpp @@ -394,10 +394,10 @@ protected: void _WriteRobot(int id = 0) { ROS_DEBUG_STREAM(str(boost::format("writing robot as instance_articulated_system (%d) %s\n")%id%_robot.getName())); - string asid = str(boost::format("robot%d")%id); - string askid = str(boost::format("%s_kinematics")%asid); - string asmid = str(boost::format("%s_motion")%asid); - string iassid = str(boost::format("%s_inst")%asmid); + string asid = _ComputeId(str(boost::format("robot%d")%id)); + string askid = _ComputeId(str(boost::format("%s_kinematics")%asid)); + string asmid = _ComputeId(str(boost::format("%s_motion")%asid)); + string iassid = _ComputeId(str(boost::format("%s_inst")%asmid)); domInstance_articulated_systemRef ias = daeSafeCast(_scene.kscene->add(COLLADA_ELEMENT_INSTANCE_ARTICULATED_SYSTEM)); ias->setSid(iassid.c_str()); @@ -424,7 +424,7 @@ protected: _WriteInstance_kinematics_model(kinematics,askid,id); for(size_t idof = 0; idof < _ikmout->vaxissids.size(); ++idof) { - string axis_infosid = str(boost::format("axis_info_inst%d")%idof); + string axis_infosid = _ComputeId(str(boost::format("axis_info_inst%d")%idof)); boost::shared_ptr pjoint = _ikmout->kmout->vaxissids.at(idof).pjoint; BOOST_ASSERT(_mapjointindices[pjoint] == (int)idof); //int iaxis = _ikmout->kmout->vaxissids.at(idof).iaxis; @@ -469,8 +469,8 @@ protected: } // write the bindings - string asmsym = str(boost::format("%s_%s")%asmid%_ikmout->ikm->getSid()); - string assym = str(boost::format("%s_%s")%_scene.kscene->getID()%_ikmout->ikm->getSid()); + string asmsym = _ComputeId(str(boost::format("%s_%s")%asmid%_ikmout->ikm->getSid())); + string assym = _ComputeId(str(boost::format("%s_%s")%_scene.kscene->getID()%_ikmout->ikm->getSid())); FOREACH(it, _ikmout->vkinematicsbindings) { domKinematics_newparamRef abm = daeSafeCast(ias_motion->add(COLLADA_ELEMENT_NEWPARAM)); abm->setSid(asmsym.c_str()); @@ -483,7 +483,7 @@ protected: for(size_t idof = 0; idof < _ikmout->vaxissids.size(); ++idof) { const axis_sids& kas = _ikmout->vaxissids.at(idof); domKinematics_newparamRef abm = daeSafeCast(ias_motion->add(COLLADA_ELEMENT_NEWPARAM)); - abm->setSid(str(boost::format("%s_%s")%asmid%kas.axissid).c_str()); + abm->setSid(_ComputeId(str(boost::format("%s_%s")%asmid%kas.axissid)).c_str()); daeSafeCast(abm->add(COLLADA_ELEMENT_SIDREF))->setValue(str(boost::format("%s/%s")%askid%kas.axissid).c_str()); domKinematics_bindRef ab = daeSafeCast(ias->add(COLLADA_ELEMENT_BIND)); ab->setSymbol(str(boost::format("%s_%s")%assym%kas.axissid).c_str()); @@ -491,7 +491,7 @@ protected: string valuesid; if( kas.valuesid.size() > 0 ) { domKinematics_newparamRef abmvalue = daeSafeCast(ias_motion->add(COLLADA_ELEMENT_NEWPARAM)); - abmvalue->setSid(str(boost::format("%s_%s")%asmid%kas.valuesid).c_str()); + abmvalue->setSid(_ComputeId(str(boost::format("%s_%s")%asmid%kas.valuesid)).c_str()); daeSafeCast(abmvalue->add(COLLADA_ELEMENT_SIDREF))->setValue(str(boost::format("%s/%s")%askid%kas.valuesid).c_str()); domKinematics_bindRef abvalue = daeSafeCast(ias->add(COLLADA_ELEMENT_BIND)); valuesid = str(boost::format("%s_%s")%assym%kas.valuesid); @@ -517,12 +517,12 @@ protected: symscope = sidscope+string("_"); refscope = sidscope+string("/"); } - string ikmsid = str(boost::format("%s_inst")%kmout->kmodel->getID()); + string ikmsid = _ComputeId(str(boost::format("%s_inst")%kmout->kmodel->getID())); _ikmout->ikm->setUrl(str(boost::format("#%s")%kmout->kmodel->getID()).c_str()); _ikmout->ikm->setSid(ikmsid.c_str()); domKinematics_newparamRef kbind = daeSafeCast(_ikmout->ikm->add(COLLADA_ELEMENT_NEWPARAM)); - kbind->setSid((symscope+ikmsid).c_str()); + kbind->setSid(_ComputeId(symscope+ikmsid).c_str()); daeSafeCast(kbind->add(COLLADA_ELEMENT_SIDREF))->setValue((refscope+ikmsid).c_str()); _ikmout->vkinematicsbindings.push_back(make_pair(string(kbind->getSid()), str(boost::format("visual%d/node0")%id))); @@ -536,7 +536,7 @@ protected: ref[index] = '.'; index = ref.find("/",index+1); } - string sid = symscope+ikmsid+"_"+ref; + string sid = _ComputeId(symscope+ikmsid+"_"+ref); kbind->setSid(sid.c_str()); daeSafeCast(kbind->add(COLLADA_ELEMENT_SIDREF))->setValue((refscope+ikmsid+"/"+it->sid).c_str()); double value=0; @@ -560,7 +560,7 @@ protected: virtual boost::shared_ptr WriteKinematics_model(int id) { domKinematics_modelRef kmodel = daeSafeCast(_kinematicsModelsLib->add(COLLADA_ELEMENT_KINEMATICS_MODEL)); - string kmodelid = str(boost::format("kmodel%d")%id); + string kmodelid = _ComputeId(str(boost::format("kmodel%d")%id)); kmodel->setId(kmodelid.c_str()); kmodel->setName(_robot.getName().c_str()); @@ -568,7 +568,7 @@ protected: // Create root node for the visual scene domNodeRef pnoderoot = daeSafeCast(_scene.vscene->add(COLLADA_ELEMENT_NODE)); - string bodyid = str(boost::format("visual%d")%id); + string bodyid = _ComputeId(str(boost::format("visual%d")%id)); pnoderoot->setId(bodyid.c_str()); pnoderoot->setSid(bodyid.c_str()); pnoderoot->setName(_robot.getName().c_str()); @@ -601,8 +601,8 @@ protected: boost::shared_ptr pjoint = itjoint->second; int index = _mapjointindices[itjoint->second]; domJointRef pdomjoint = daeSafeCast(ktec->add(COLLADA_ELEMENT_JOINT)); - string jointid = pjoint->name;//str(boost::format("joint%d")%index); - pdomjoint->setSid( jointid.c_str() ); + string jointid = _ComputeId(pjoint->name);//str(boost::format("joint%d")%index); + pdomjoint->setSid(jointid.c_str() ); pdomjoint->setName(pjoint->name.c_str()); domAxis_constraintRef axis; if( !!pjoint->limits ) { @@ -641,7 +641,7 @@ protected: } int ia = 0; - string axisid = str(boost::format("axis%d")%ia); + string axisid = _ComputeId(str(boost::format("axis%d")%ia)); axis->setSid(axisid.c_str()); kmout->vaxissids.at(index).pjoint = pjoint; kmout->vaxissids.at(index).sid = jointid+string("/")+axisid; @@ -676,7 +676,7 @@ protected: } domFormulaRef pf = daeSafeCast(ktec->add(COLLADA_ELEMENT_FORMULA)); - string formulaid = str(boost::format("%s_formula")%jointsid); + string formulaid = _ComputeId(str(boost::format("%s_formula")%jointsid)); pf->setSid(formulaid.c_str()); domCommon_float_or_paramRef ptarget = daeSafeCast(pf->add(COLLADA_ELEMENT_TARGET)); string targetjointid = str(boost::format("%s/%s")%kmodel->getID()%jointsid); @@ -760,15 +760,15 @@ protected: { LINKOUTPUT out; int linkindex = _maplinkindices[plink]; - string linksid = plink->name; + string linksid = _ComputeId(plink->name); domLinkRef pdomlink = daeSafeCast(pkinparent->add(COLLADA_ELEMENT_LINK)); pdomlink->setName(plink->name.c_str()); pdomlink->setSid(linksid.c_str()); domNodeRef pnode = daeSafeCast(pnodeparent->add(COLLADA_ELEMENT_NODE)); - string nodeid = str(boost::format("v%s_node%d")%strModelUri%linkindex); + string nodeid = _ComputeId(str(boost::format("v%s_node%d")%strModelUri%linkindex)); pnode->setId( nodeid.c_str() ); - string nodesid = str(boost::format("node%d")%linkindex); + string nodesid = _ComputeId(str(boost::format("node%d")%linkindex)); pnode->setSid(nodesid.c_str()); pnode->setName(plink->name.c_str()); @@ -787,7 +787,7 @@ protected: if( !!geometry ) { int igeom = 0; - string geomid = str(boost::format("g%s_%s_geom%d")%strModelUri%linksid%igeom); + string geomid = _ComputeId(str(boost::format("g%s_%s_geom%d")%strModelUri%linksid%igeom)); domGeometryRef pdomgeom = _WriteGeometry(geometry, geomid); domInstance_geometryRef pinstgeom = daeSafeCast(pnode->add(COLLADA_ELEMENT_INSTANCE_GEOMETRY)); pinstgeom->setUrl((string("#")+geomid).c_str()); @@ -811,7 +811,7 @@ protected: // domLink::domAttachment_fullRef attachment_full = daeSafeCast(pdomlink->add(COLLADA_ELEMENT_ATTACHMENT_FULL)); - string jointid = str(boost::format("%s/%s")%strModelUri%pjoint->name); + string jointid = str(boost::format("%s/%s")%strModelUri%_ComputeId(pjoint->name)); attachment_full->setJoint(jointid.c_str()); LINKOUTPUT childinfo = _WriteLink(_robot.getLink(pjoint->child_link_name), attachment_full, pnode, strModelUri); @@ -823,7 +823,7 @@ protected: } // rotate/translate elements - string jointnodesid = str(boost::format("node_%s_axis0")%pjoint->name); + string jointnodesid = _ComputeId(str(boost::format("node_%s_axis0")%pjoint->name)); switch(pjoint->type) { case urdf::Joint::REVOLUTE: case urdf::Joint::CONTINUOUS: @@ -1244,6 +1244,18 @@ private: return pinv; } + /// \brief computes a collada-compliant sid from the urdf name + static std::string _ComputeId(const std::string& name) + { + std::string newname = name; + for(size_t i = 0; i < newname.size(); ++i) { + if( newname[i] == '/' || newname[i] == ' ' || newname[i] == '.' ) { + newname[i] = '_'; + } + } + return newname; + } + int _writeoptions; const urdf::Model& _robot; From 7512d26196dad4eaf94f3802ce07fc5bf2ac1712 Mon Sep 17 00:00:00 2001 From: rdiankov Date: Thu, 6 Jan 2011 04:22:15 +0000 Subject: [PATCH 237/245] collada exporter: forgot one place to update the id --- collada_urdf/src/collada_urdf.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/collada_urdf/src/collada_urdf.cpp b/collada_urdf/src/collada_urdf.cpp index 6bda536..c502e5c 100644 --- a/collada_urdf/src/collada_urdf.cpp +++ b/collada_urdf/src/collada_urdf.cpp @@ -494,7 +494,7 @@ protected: abmvalue->setSid(_ComputeId(str(boost::format("%s_%s")%asmid%kas.valuesid)).c_str()); daeSafeCast(abmvalue->add(COLLADA_ELEMENT_SIDREF))->setValue(str(boost::format("%s/%s")%askid%kas.valuesid).c_str()); domKinematics_bindRef abvalue = daeSafeCast(ias->add(COLLADA_ELEMENT_BIND)); - valuesid = str(boost::format("%s_%s")%assym%kas.valuesid); + valuesid = _ComputeId(str(boost::format("%s_%s")%assym%kas.valuesid)); abvalue->setSymbol(valuesid.c_str()); daeSafeCast(abvalue->add(COLLADA_ELEMENT_PARAM))->setRef(str(boost::format("%s/%s_%s")%asmid%asmid%kas.valuesid).c_str()); } @@ -669,7 +669,7 @@ protected: // create the formulas for all mimic joints FOREACHC(itjoint, _robot.joints_) { - string jointsid = itjoint->second->name; + string jointsid = _ComputeId(itjoint->second->name); boost::shared_ptr pjoint = itjoint->second; if( !pjoint->mimic ) { continue; From 701b17c423ec7da0cc90d4c767441863a271712e Mon Sep 17 00:00:00 2001 From: rdiankov Date: Thu, 6 Jan 2011 04:25:05 +0000 Subject: [PATCH 238/245] collada exporter: forgot one place to update the id --- collada_urdf/src/collada_urdf.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/collada_urdf/src/collada_urdf.cpp b/collada_urdf/src/collada_urdf.cpp index c502e5c..208ab9c 100644 --- a/collada_urdf/src/collada_urdf.cpp +++ b/collada_urdf/src/collada_urdf.cpp @@ -701,7 +701,7 @@ protected: pmath_const0->setCharData(str(boost::format("%f")%pjoint->mimic->multiplier)); daeElementRef pmath_symb = pmath_apply1->add("csymbol"); pmath_symb->setAttribute("encoding","COLLADA"); - pmath_symb->setCharData(str(boost::format("%s/%s")%kmodel->getID()%pjoint->mimic->joint_name)); + pmath_symb->setCharData(str(boost::format("%s/%s")%kmodel->getID()%_ComputeId(pjoint->mimic->joint_name))); } daeElementRef pmath_const1 = pmath_apply->add("cn"); pmath_const1->setCharData(str(boost::format("%f")%pjoint->mimic->offset)); @@ -711,7 +711,7 @@ protected: { daeElementRef derivelt = pftec->add("equation"); derivelt->setAttribute("type","first_partial"); - derivelt->setAttribute("target",str(boost::format("%s/%s")%kmodel->getID()%pjoint->mimic->joint_name).c_str()); + derivelt->setAttribute("target",str(boost::format("%s/%s")%kmodel->getID()%_ComputeId(pjoint->mimic->joint_name)).c_str()); daeElementRef pmath_const0 = derivelt->add("cn"); pmath_const0->setCharData(str(boost::format("%f")%pjoint->mimic->multiplier)); } @@ -719,7 +719,7 @@ protected: { daeElementRef derivelt = pftec->add("equation"); derivelt->setAttribute("type","second_partial"); - derivelt->setAttribute("target",str(boost::format("%s/%s")%kmodel->getID()%pjoint->mimic->joint_name).c_str()); + derivelt->setAttribute("target",str(boost::format("%s/%s")%kmodel->getID()%_ComputeId(pjoint->mimic->joint_name)).c_str()); daeElementRef pmath_const0 = derivelt->add("cn"); pmath_const0->setCharData("0"); } @@ -739,7 +739,7 @@ protected: pmath_const0->setCharData(str(boost::format("%f")%pjoint->mimic->multiplier)); daeElementRef pmath_symb = pmath_apply1->add("csymbol"); pmath_symb->setAttribute("encoding","COLLADA"); - pmath_symb->setCharData(str(boost::format("%s/%s")%kmodel->getID()%pjoint->mimic->joint_name)); + pmath_symb->setCharData(str(boost::format("%s/%s")%kmodel->getID()%_ComputeId(pjoint->mimic->joint_name))); } daeElementRef pmath_const1 = pmath_apply->add("cn"); pmath_const1->setCharData(str(boost::format("%f")%pjoint->mimic->offset)); From d3e0a45e7eba02871dae8eb428c064234c8ad928 Mon Sep 17 00:00:00 2001 From: hsu Date: Tue, 18 Jan 2011 23:01:17 +0000 Subject: [PATCH 239/245] minor fix ros error message type --- urdf/src/model.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/urdf/src/model.cpp b/urdf/src/model.cpp index c4106d7..e244af3 100644 --- a/urdf/src/model.cpp +++ b/urdf/src/model.cpp @@ -89,7 +89,7 @@ bool Model::initParam(const std::string& param) // read the robot description from the parameter server if (!nh.getParam(full_param, xml_string)){ - ROS_ERROR("Could read parameter %s on parameter server", full_param.c_str()); + ROS_ERROR("Could not read parameter %s on parameter server", full_param.c_str()); return false; } return initString(xml_string); From d3883c158c2a45c09559b8144f2a8eaf79ce6e51 Mon Sep 17 00:00:00 2001 From: hsu Date: Tue, 18 Jan 2011 23:52:20 +0000 Subject: [PATCH 240/245] update manifest.xml for colladadom per doc review #4686 --- colladadom/manifest.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/colladadom/manifest.xml b/colladadom/manifest.xml index c244c89..94cf747 100644 --- a/colladadom/manifest.xml +++ b/colladadom/manifest.xml @@ -2,6 +2,11 @@ This package contains the COLLADA Document Object Model (DOM) which is an API that provides a C++ object representation of a COLLADA XML instance document. + Currently, this package pulls collada-dom-2.2 tar ball, and applies a local patch + containing + some custom changes, + various bug fixes as well as + forcing configure to use rosboost-cfg for boost compile/link flags. See http://sourceforge.net/projects/collada-dom. From 990a25929fbccd45e9cabcc619a954c6bde218c6 Mon Sep 17 00:00:00 2001 From: wim Date: Wed, 19 Jan 2011 18:42:39 +0000 Subject: [PATCH 241/245] use correct string for review --- assimp/manifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assimp/manifest.xml b/assimp/manifest.xml index 368c952..5e88929 100644 --- a/assimp/manifest.xml +++ b/assimp/manifest.xml @@ -13,7 +13,7 @@ ASSIMP Development Team BSD - + http://assimp.sourceforge.net/ From 1c07fc2999c8752d4ff53d9c6edd1dfe2786389a Mon Sep 17 00:00:00 2001 From: rdiankov Date: Sun, 23 Jan 2011 23:09:17 +0000 Subject: [PATCH 242/245] colladadom now exporting the zlib dependency --- colladadom/manifest.xml | 2 +- urdf/src/collada_model_reader.cpp | 20 +++++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/colladadom/manifest.xml b/colladadom/manifest.xml index 94cf747..abc565c 100644 --- a/colladadom/manifest.xml +++ b/colladadom/manifest.xml @@ -19,7 +19,7 @@ - + diff --git a/urdf/src/collada_model_reader.cpp b/urdf/src/collada_model_reader.cpp index 72f427d..678aee8 100644 --- a/urdf/src/collada_model_reader.cpp +++ b/urdf/src/collada_model_reader.cpp @@ -1000,8 +1000,12 @@ protected: } } - //pdomlink->getAttachment_start_array(); - //pdomlink->getAttachment_end_array(); + if( pdomlink->getAttachment_start_array().getCount() > 0 ) { + ROS_WARN("urdf collada reader does not support attachment_start\n"); + } + if( pdomlink->getAttachment_end_array().getCount() > 0 ) { + ROS_WARN("urdf collada reader does not support attachment_end\n"); + } plink->visual->geometry = _CreateGeometry(plink->name, listGeomProperties); return plink; @@ -1120,10 +1124,16 @@ protected: geometry->filename = str(boost::format("/tmp/collada_model_reader_%s_XXXXXX.dae")%name); int fd = mkstemps(&geometry->filename[0],4); #else - do { + int fd = -1; + for(int iter = 0; iter < 1000; ++iter) { geometry->filename = str(boost::format("/tmp/collada_model_reader_%s_%d.dae")%name%rand()); - } while(!!std::ifstream(geometry->filename.c_str())); - int fd = open(geometry->filename.c_str(),O_WRONLY|O_CREAT|O_EXCL); + if( !!std::ifstream(geometry->filename.c_str())) { + fd = open(geometry->filename.c_str(),O_WRONLY|O_CREAT|O_EXCL); + if( fd != -1 ) { + break; + } + } + } if( fd == -1 ) { ROS_ERROR("failed to open geometry dae file %s",geometry->filename.c_str()); return geometry; From fc8adeecd2b6059d845f47a35946e96aa42b87bb Mon Sep 17 00:00:00 2001 From: wim Date: Mon, 24 Jan 2011 20:20:46 +0000 Subject: [PATCH 243/245] mark as doc reviewed --- colladadom/manifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/colladadom/manifest.xml b/colladadom/manifest.xml index abc565c..c8aef49 100644 --- a/colladadom/manifest.xml +++ b/colladadom/manifest.xml @@ -13,7 +13,7 @@ Du Hung Hou, Khronos.org, Marcus Barnes, Greg Corson, Herbert Law, Sebastian Schwarz, Steven Thomas, John Hsu (ros package), Tim Field (ros package) BSD - + http://ros.org/wiki/colladadom From 541dab340e94db4e048fd69d3344c3706d4475a7 Mon Sep 17 00:00:00 2001 From: wim Date: Wed, 9 Feb 2011 18:20:25 +0000 Subject: [PATCH 244/245] add debian rosdep. ticket #4775 --- rosdep.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/rosdep.yaml b/rosdep.yaml index 3238800..2d78050 100644 --- a/rosdep.yaml +++ b/rosdep.yaml @@ -1,3 +1,4 @@ pcre: ubuntu: libpcre3-dev fedora: pcre-devel + debian: libpcre3-dev