diff --git a/applications/test/vectorTools/Make/files b/applications/test/vectorTools/Make/files
new file mode 100644
index 0000000000000000000000000000000000000000..0b30b98f8f3b0c0c1048846c8e90a62733a12dda
--- /dev/null
+++ b/applications/test/vectorTools/Make/files
@@ -0,0 +1,3 @@
+Test-vectorTools.C
+
+EXE = $(FOAM_USER_APPBIN)/Test-vectorTools
diff --git a/applications/test/vectorTools/Make/options b/applications/test/vectorTools/Make/options
new file mode 100644
index 0000000000000000000000000000000000000000..9e015e6078873ee32ae6d53ac1590010819dcb69
--- /dev/null
+++ b/applications/test/vectorTools/Make/options
@@ -0,0 +1 @@
+EXE_INC = -I$(FOAM_APP)/utilities/mesh/generation/cvMesh/vectorTools
diff --git a/applications/test/vectorTools/Test-vectorTools.C b/applications/test/vectorTools/Test-vectorTools.C
new file mode 100644
index 0000000000000000000000000000000000000000..85d18ed98957073b2ab7130534cc21f0828740cf
--- /dev/null
+++ b/applications/test/vectorTools/Test-vectorTools.C
@@ -0,0 +1,71 @@
+#include "vector.H"
+#include "IOstreams.H"
+#include "vectorTools.H"
+#include "unitConversion.H"
+
+using namespace Foam;
+
+
+void test(const vector& a, const vector& b, const scalar tolerance)
+{
+    Info<< "Vectors " << a << " and " << b
+        << " are (to tolerance of " << tolerance << "): ";
+
+    if (vectorTools::areParallel(a, b, tolerance))
+        Info<< " parallel ";
+
+    if (vectorTools::areOrthogonal(a, b, tolerance))
+        Info<< " orthogonal ";
+
+    if (vectorTools::areAcute(a, b))
+        Info<< " acute ";
+
+    if (vectorTools::areObtuse(a, b))
+        Info<< " obtuse ";
+
+    Info<< ", angle = " << vectorTools::degAngleBetween(a, b);
+
+    Info<< endl;
+}
+
+
+int main()
+{
+    vector a(1.0, 1.0, 1.0);
+    vector b(2.0, 2.0, 2.0);
+
+    test(a, b, 0.0);
+    test(a, b, VSMALL);
+    test(a, b, SMALL);
+    test(a, b, 1e-3);
+    test(a, b, 1e-1);
+
+    a = vector(1,0,0);
+    b = vector(0,2,0);
+
+    test(a, b, 0.0);
+    test(a, b, VSMALL);
+    test(a, b, SMALL);
+    test(a, b, 1e-3);
+    test(a, b, 1e-1);
+
+    a = vector(1,0,0);
+    b = vector(-1,0,0);
+
+    test(a, b, 0.0);
+    test(a, b, VSMALL);
+    test(a, b, SMALL);
+    test(a, b, 1e-3);
+    test(a, b, 1e-1);
+
+    a = vector(1,0,0);
+    b = vector(-1,2,0);
+
+    test(a, b, 0.0);
+    test(a, b, VSMALL);
+    test(a, b, SMALL);
+    test(a, b, 1e-3);
+    test(a, b, 1e-1);
+
+    return 0;
+}
diff --git a/applications/utilities/mesh/advanced/collapseEdges/collapseDict b/applications/utilities/mesh/advanced/collapseEdges/collapseDict
index 60f4cb2f43809aff6b09b4ab0057aec3b226ab9b..78905475e33add919a8cc0ece968b737c26fea15 100644
--- a/applications/utilities/mesh/advanced/collapseEdges/collapseDict
+++ b/applications/utilities/mesh/advanced/collapseEdges/collapseDict
@@ -2,16 +2,24 @@
 | =========                 |                                                 |
 | \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
 |  \\    /   O peration     | Version:  dev                                   |
-|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|   \\  /    A nd           | Web:      http://www.openfoam.org               |
 |    \\/     M anipulation  |                                                 |
 \*---------------------------------------------------------------------------*/
+
 FoamFile
 {
-    version     2.0;
-    format      ascii;
-    class       dictionary;
-    object      collapseDict;
+    version         2.0;
+    format          ascii;
+
+    root            "";
+    case            "";
+    instance        "";
+    local           "";
+
+    class           dictionary;
+    object          collapseDict;
 }
+
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 collapseEdgesCoeffs
@@ -70,11 +78,7 @@ meshQualityCoeffs
     meshQualityCoeffDict    meshQualityDict;
 
     // Maximum number of outer iterations is mesh quality checking is enabled
-    maximumIterations       10;
-
-    // Maximum number of iterations deletion of a point can cause a bad face
-    // to be constructed before it is forced to not be deleted
-    maxPointErrorCount      5;
+    maximumIterations       30;
 }
 
 
diff --git a/applications/utilities/mesh/generation/Allwmake b/applications/utilities/mesh/generation/Allwmake
index d557fa34f89e754385551f8d8bba0ef418d049e5..48ca530c96933f6c31bf4f126658efc9f607fd51 100755
--- a/applications/utilities/mesh/generation/Allwmake
+++ b/applications/utilities/mesh/generation/Allwmake
@@ -9,5 +9,10 @@ extrude2DMesh/Allwmake
 
 wmake snappyHexMesh
 
+if [ -d "$CGAL_ARCH_PATH" ]
+then
+    cvMesh/Allwmake
+    cv2DMesh/Allwmake
+fi
 
 # ----------------------------------------------------------------- end-of-file
diff --git a/applications/utilities/mesh/generation/cv2DMesh/Allwclean b/applications/utilities/mesh/generation/cv2DMesh/Allwclean
new file mode 100755
index 0000000000000000000000000000000000000000..d0ae53e41503d0ccd189b47c40f83dc193030e03
--- /dev/null
+++ b/applications/utilities/mesh/generation/cv2DMesh/Allwclean
@@ -0,0 +1,8 @@
+#!/bin/sh
+cd ${0%/*} || exit 1    # run from this directory
+set -x
+
+wclean libso conformalVoronoi2DMesh
+wclean
+
+# ----------------------------------------------------------------- end-of-file
diff --git a/applications/utilities/mesh/generation/cv2DMesh/Allwmake b/applications/utilities/mesh/generation/cv2DMesh/Allwmake
new file mode 100755
index 0000000000000000000000000000000000000000..54868499573cf6b3ce989a211b0fd1be7944c490
--- /dev/null
+++ b/applications/utilities/mesh/generation/cv2DMesh/Allwmake
@@ -0,0 +1,8 @@
+#!/bin/sh
+cd ${0%/*} || exit 1    # run from this directory
+set -x
+
+wmake libso conformalVoronoi2DMesh
+wmake
+
+# ----------------------------------------------------------------- end-of-file
diff --git a/applications/utilities/mesh/generation/cv2DMesh/CGALTriangulation2DKernel.H b/applications/utilities/mesh/generation/cv2DMesh/CGALTriangulation2DKernel.H
new file mode 100644
index 0000000000000000000000000000000000000000..28002f962fd3935e9de325d4bba28da3746fdd96
--- /dev/null
+++ b/applications/utilities/mesh/generation/cv2DMesh/CGALTriangulation2DKernel.H
@@ -0,0 +1,60 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Typedefs
+    CGALTriangulation2DKernel
+
+Description
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef CGALTriangulation2DKernel_H
+#define CGALTriangulation2DKernel_H
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#include "CGAL/Delaunay_triangulation_2.h"
+
+#ifdef CGAL_INEXACT
+
+    // Fast kernel using a double as the storage type but the triangulation
+    // may fail
+    #include "CGAL/Exact_predicates_inexact_constructions_kernel.h"
+
+    typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
+
+#else
+
+    // Very robust but expensive kernel
+    #include "CGAL/Exact_predicates_exact_constructions_kernel.h"
+
+    typedef CGAL::Exact_predicates_exact_constructions_kernel K;
+
+#endif
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cv2DMesh/CGALTriangulation2Ddefs.H b/applications/utilities/mesh/generation/cv2DMesh/CGALTriangulation2Ddefs.H
new file mode 100644
index 0000000000000000000000000000000000000000..87319265483b63d1468fecf57a1be3edfde2fec0
--- /dev/null
+++ b/applications/utilities/mesh/generation/cv2DMesh/CGALTriangulation2Ddefs.H
@@ -0,0 +1,76 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Typedefs
+    CGALTriangulation2Ddefs
+
+Description
+    CGAL data structures used for 2D Delaunay meshing.
+
+    Define CGAL_INEXACT to use Exact_predicates_inexact_constructions kernel
+    otherwise the more robust but much less efficient
+    Exact_predicates_exact_constructions will be used.
+
+    Define CGAL_HIERARCHY to use hierarchical Delaunay triangulation which is
+    faster but uses more memory than the standard Delaunay triangulation.
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef CGALTriangulation2Ddefs_H
+#define CGALTriangulation2Ddefs_H
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#include "CGALTriangulation2DKernel.H"
+
+#include "indexedVertex.H"
+#include "indexedFace.H"
+
+typedef CGAL::indexedVertex<K>                           Vb;
+typedef CGAL::indexedFace<K>                             Fb;
+
+#ifdef CGAL_HIERARCHY
+
+    // Data structures for hierarchical Delaunay triangulation which is more
+    // efficient but also uses more storage
+    #include "CGAL/Triangulation_hierarchy_2.h"
+
+    typedef CGAL::Triangulation_hierarchy_vertex_base_2<Vb>  Vbh;
+    typedef CGAL::Triangulation_data_structure_2<Vbh, Fb>    Tds;
+    typedef CGAL::Delaunay_triangulation_2<K, Tds>           DT;
+    typedef CGAL::Triangulation_hierarchy_2<DT>              Delaunay;
+
+#else
+
+    // Data structures for standard Delaunay triangulation
+    typedef CGAL::Triangulation_data_structure_2<Vb, Fb>     Tds;
+    typedef CGAL::Delaunay_triangulation_2<K, Tds>           Delaunay;
+
+#endif
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cv2DMesh/CV2D.C b/applications/utilities/mesh/generation/cv2DMesh/CV2D.C
new file mode 100644
index 0000000000000000000000000000000000000000..8a5931df61229dfb523c3a584377d0652ae15e73
--- /dev/null
+++ b/applications/utilities/mesh/generation/cv2DMesh/CV2D.C
@@ -0,0 +1,997 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*----------------------------------------------------------------------------*/
+
+#include "CV2D.H"
+#include "Random.H"
+#include "transform.H"
+#include "IFstream.H"
+#include "uint.H"
+#include "ulong.H"
+
+namespace Foam
+{
+    defineTypeNameAndDebug(CV2D, 0);
+}
+
+// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
+
+void Foam::CV2D::insertBoundingBox()
+{
+    Info<< "insertBoundingBox: creating bounding mesh" << endl;
+    scalar bigSpan = 10*meshControls().span();
+    insertPoint(point2D(-bigSpan, -bigSpan), Vb::FAR_POINT);
+    insertPoint(point2D(-bigSpan, bigSpan), Vb::FAR_POINT);
+    insertPoint(point2D(bigSpan, -bigSpan), Vb::FAR_POINT);
+    insertPoint(point2D(bigSpan, bigSpan), Vb::FAR_POINT);
+}
+
+
+void Foam::CV2D::fast_restore_Delaunay(Vertex_handle vh)
+{
+    int i;
+    Face_handle f = vh->face(), next, start(f);
+
+    do
+    {
+        i=f->index(vh);
+        if (!is_infinite(f))
+        {
+            if (!internal_flip(f, cw(i))) external_flip(f, i);
+            if (f->neighbor(i) == start) start = f;
+        }
+        f = f->neighbor(cw(i));
+    } while (f != start);
+}
+
+
+void Foam::CV2D::external_flip(Face_handle& f, int i)
+{
+    Face_handle n = f->neighbor(i);
+
+    if
+    (
+        CGAL::ON_POSITIVE_SIDE
+     != side_of_oriented_circle(n, f->vertex(i)->point())
+    ) return;
+
+    flip(f, i);
+    i = n->index(f->vertex(i));
+    external_flip(n, i);
+}
+
+
+bool Foam::CV2D::internal_flip(Face_handle& f, int i)
+{
+    Face_handle n = f->neighbor(i);
+
+    if
+    (
+        CGAL::ON_POSITIVE_SIDE
+     != side_of_oriented_circle(n, f->vertex(i)->point())
+    )
+    {
+        return false;
+    }
+
+    flip(f, i);
+
+    return true;
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::CV2D::CV2D
+(
+    const Time& runTime,
+    const dictionary& cvMeshDict
+)
+:
+    Delaunay(),
+    runTime_(runTime),
+    rndGen_(64293*Pstream::myProcNo()),
+    allGeometry_
+    (
+        IOobject
+        (
+            "cvSearchableSurfaces",
+            runTime_.constant(),
+            "triSurface",
+            runTime_,
+            IOobject::MUST_READ,
+            IOobject::NO_WRITE
+        ),
+        cvMeshDict.subDict("geometry")
+    ),
+    qSurf_
+    (
+        runTime_,
+        rndGen_,
+        allGeometry_,
+        cvMeshDict.subDict("surfaceConformation")
+    ),
+    controls_(cvMeshDict, qSurf_.globalBounds()),
+    cellSizeControl_
+    (
+        runTime,
+        cvMeshDict.subDict("motionControl").subDict("shapeControlFunctions"),
+        qSurf_,
+        controls_.minCellSize()
+    ),
+    relaxationModel_
+    (
+        relaxationModel::New
+        (
+            cvMeshDict.subDict("motionControl"),
+            runTime
+        )
+    ),
+    z_
+    (
+        point
+        (
+            cvMeshDict.subDict("surfaceConformation").lookup("locationInMesh")
+        ).z()
+    ),
+    startOfInternalPoints_(0),
+    startOfSurfacePointPairs_(0),
+    startOfBoundaryConformPointPairs_(0),
+    featurePoints_()
+{
+    Info<< meshControls() << endl;
+
+    insertBoundingBox();
+    insertFeaturePoints();
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::CV2D::~CV2D()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+void Foam::CV2D::insertPoints
+(
+    const point2DField& points,
+    const scalar nearness
+)
+{
+    Info<< "insertInitialPoints(const point2DField& points): ";
+
+    startOfInternalPoints_ = number_of_vertices();
+    label nVert = startOfInternalPoints_;
+
+    // Add the points and index them
+    forAll(points, i)
+    {
+        const point2D& p = points[i];
+
+        if (qSurf_.wellInside(toPoint3D(p), nearness))
+        {
+            insert(toPoint(p))->index() = nVert++;
+        }
+        else
+        {
+            Warning
+                << "Rejecting point " << p << " outside surface" << endl;
+        }
+    }
+
+    Info<< nVert << " vertices inserted" << endl;
+
+    if (meshControls().objOutput())
+    {
+        // Checking validity of triangulation
+        assert(is_valid());
+
+        writeTriangles("initial_triangles.obj", true);
+        writeFaces("initial_faces.obj", true);
+    }
+}
+
+
+void Foam::CV2D::insertPoints(const fileName& pointFileName)
+{
+    IFstream pointsFile(pointFileName);
+
+    if (pointsFile.good())
+    {
+        insertPoints
+        (
+            point2DField(pointsFile),
+            0.5*meshControls().minCellSize2()
+        );
+    }
+    else
+    {
+        FatalErrorIn("insertInitialPoints")
+            << "Could not open pointsFile " << pointFileName
+            << exit(FatalError);
+    }
+}
+
+
+void Foam::CV2D::insertGrid()
+{
+    Info<< "insertInitialGrid: ";
+
+    startOfInternalPoints_ = number_of_vertices();
+    label nVert = startOfInternalPoints_;
+
+    scalar x0 = qSurf_.globalBounds().min().x();
+    scalar xR = qSurf_.globalBounds().max().x() - x0;
+    int ni = int(xR/meshControls().minCellSize()) + 1;
+    scalar deltax = xR/ni;
+
+    scalar y0 = qSurf_.globalBounds().min().y();
+    scalar yR = qSurf_.globalBounds().max().y() - y0;
+    int nj = int(yR/meshControls().minCellSize()) + 1;
+    scalar deltay = yR/nj;
+
+    Random rndGen(1321);
+    scalar pert = meshControls().randomPerturbation()*min(deltax, deltay);
+
+    for (int i=0; i<ni; i++)
+    {
+        for (int j=0; j<nj; j++)
+        {
+            point p(x0 + i*deltax, y0 + j*deltay, 0);
+
+            if (meshControls().randomiseInitialGrid())
+            {
+                p.x() += pert*(rndGen.scalar01() - 0.5);
+                p.y() += pert*(rndGen.scalar01() - 0.5);
+            }
+
+            if (qSurf_.wellInside(p, 0.5*meshControls().minCellSize2()))
+            {
+                insert(Point(p.x(), p.y()))->index() = nVert++;
+            }
+        }
+    }
+
+    Info<< nVert << " vertices inserted" << endl;
+
+    if (meshControls().objOutput())
+    {
+        // Checking validity of triangulation
+        assert(is_valid());
+
+        writeTriangles("initial_triangles.obj", true);
+        writeFaces("initial_faces.obj", true);
+    }
+}
+
+
+void Foam::CV2D::insertSurfacePointPairs()
+{
+    startOfSurfacePointPairs_ = number_of_vertices();
+
+    if (meshControls().insertSurfaceNearestPointPairs())
+    {
+        insertSurfaceNearestPointPairs();
+    }
+
+    write("nearest");
+
+    // Insertion of point-pairs for near-points may cause protrusions
+    // so insertBoundaryConformPointPairs must be executed last
+    if (meshControls().insertSurfaceNearPointPairs())
+    {
+        insertSurfaceNearPointPairs();
+    }
+
+    startOfBoundaryConformPointPairs_ = number_of_vertices();
+}
+
+
+void Foam::CV2D::boundaryConform()
+{
+    if (!meshControls().insertSurfaceNearestPointPairs())
+    {
+        markNearBoundaryPoints();
+    }
+
+    // Mark all the faces as SAVE_CHANGED
+    for
+    (
+        Triangulation::Finite_faces_iterator fit = finite_faces_begin();
+        fit != finite_faces_end();
+        fit++
+    )
+    {
+        fit->faceIndex() = Fb::SAVE_CHANGED;
+    }
+
+    for (label iter=1; iter<=meshControls().maxBoundaryConformingIter(); iter++)
+    {
+        label nIntersections = insertBoundaryConformPointPairs
+        (
+            "surfaceIntersections_" + Foam::name(iter) + ".obj"
+        );
+
+        if (nIntersections == 0)
+        {
+            break;
+        }
+        else
+        {
+            Info<< "BC iteration " << iter << ": "
+                << nIntersections << " point-pairs inserted" << endl;
+        }
+
+        // Any faces changed by insertBoundaryConformPointPairs will now
+        // be marked CHANGED, mark those as SAVE_CHANGED and those that
+        // remained SAVE_CHANGED as UNCHANGED
+        for
+        (
+            Triangulation::Finite_faces_iterator fit = finite_faces_begin();
+            fit != finite_faces_end();
+            fit++
+        )
+        {
+            if (fit->faceIndex() == Fb::SAVE_CHANGED)
+            {
+                fit->faceIndex() = Fb::UNCHANGED;
+            }
+            else if (fit->faceIndex() == Fb::CHANGED)
+            {
+                fit->faceIndex() = Fb::SAVE_CHANGED;
+            }
+        }
+    }
+
+    Info<< nl;
+
+    write("boundary");
+}
+
+
+void Foam::CV2D::removeSurfacePointPairs()
+{
+    for
+    (
+        Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        ++vit
+    )
+    {
+        if (vit->index() >= startOfSurfacePointPairs_)
+        {
+            remove(vit);
+        }
+    }
+}
+
+
+void Foam::CV2D::newPoints()
+{
+    const scalar relaxation = relaxationModel_->relaxation();
+
+    Info<< "Relaxation = " << relaxation << endl;
+
+    Field<point2D> dualVertices(number_of_faces());
+
+    label dualVerti = 0;
+
+    // Find the dual point of each tetrahedron and assign it an index.
+    for
+    (
+        Triangulation::Finite_faces_iterator fit = finite_faces_begin();
+        fit != finite_faces_end();
+        ++fit
+    )
+    {
+        fit->faceIndex() = -1;
+
+        if
+        (
+            fit->vertex(0)->internalOrBoundaryPoint()
+         || fit->vertex(1)->internalOrBoundaryPoint()
+         || fit->vertex(2)->internalOrBoundaryPoint()
+        )
+        {
+            fit->faceIndex() = dualVerti;
+
+            dualVertices[dualVerti] = toPoint2D(circumcenter(fit));
+
+            dualVerti++;
+        }
+    }
+
+    dualVertices.setSize(dualVerti);
+
+    Field<vector2D> displacementAccumulator
+    (
+        startOfSurfacePointPairs_,
+        vector2D::zero
+    );
+
+    // Calculate target size and alignment for vertices
+    scalarField sizes
+    (
+        number_of_vertices(),
+        meshControls().minCellSize()
+    );
+
+    Field<vector2D> alignments
+    (
+        number_of_vertices(),
+        vector2D(1, 0)
+    );
+
+    for
+    (
+        Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        ++vit
+    )
+    {
+        if (vit->internalOrBoundaryPoint())
+        {
+            point2D vert = toPoint2D(vit->point());
+
+            // alignment and size determination
+            pointIndexHit pHit;
+            label hitSurface = -1;
+
+            qSurf_.findSurfaceNearest
+            (
+                toPoint3D(vert),
+                meshControls().span2(),
+                pHit,
+                hitSurface
+            );
+
+            if (pHit.hit())
+            {
+                vectorField norm(1);
+                allGeometry_[hitSurface].getNormal
+                (
+                    List<pointIndexHit>(1, pHit),
+                    norm
+                );
+
+                alignments[vit->index()] = toPoint2D(norm[0]);
+
+                sizes[vit->index()] =
+                    cellSizeControl_.cellSize(toPoint3D(vit->point()));
+            }
+        }
+    }
+
+    // Info<< "Calculated alignments" << endl;
+
+    scalar cosAlignmentAcceptanceAngle = 0.68;
+
+    // Upper and lower edge length ratios for weight
+    scalar u = 1.0;
+    scalar l = 0.7;
+
+    PackedBoolList pointToBeRetained(startOfSurfacePointPairs_, true);
+
+    std::list<Point> pointsToInsert;
+
+    for
+    (
+        Triangulation::Finite_edges_iterator eit = finite_edges_begin();
+        eit != finite_edges_end();
+        eit++
+    )
+    {
+        Vertex_handle vA = eit->first->vertex(cw(eit->second));
+        Vertex_handle vB = eit->first->vertex(ccw(eit->second));
+
+        if (!vA->internalOrBoundaryPoint() || !vB->internalOrBoundaryPoint())
+        {
+            continue;
+        }
+
+        const point2D& dualV1 = dualVertices[eit->first->faceIndex()];
+        const point2D& dualV2 =
+            dualVertices[eit->first->neighbor(eit->second)->faceIndex()];
+
+        scalar dualEdgeLength = mag(dualV1 - dualV2);
+
+        point2D dVA = toPoint2D(vA->point());
+        point2D dVB = toPoint2D(vB->point());
+
+        Field<vector2D> alignmentDirsA(2);
+
+        alignmentDirsA[0] = alignments[vA->index()];
+        alignmentDirsA[1] = vector2D
+        (
+           -alignmentDirsA[0].y(),
+            alignmentDirsA[0].x()
+        );
+
+        Field<vector2D> alignmentDirsB(2);
+
+        alignmentDirsB[0] = alignments[vB->index()];
+        alignmentDirsB[1] = vector2D
+        (
+           -alignmentDirsB[0].y(),
+            alignmentDirsB[0].x()
+        );
+
+        Field<vector2D> alignmentDirs(2);
+
+        forAll(alignmentDirsA, aA)
+        {
+            const vector2D& a(alignmentDirsA[aA]);
+
+            scalar maxDotProduct = 0.0;
+
+            forAll(alignmentDirsB, aB)
+            {
+                const vector2D& b(alignmentDirsB[aB]);
+
+                scalar dotProduct = a & b;
+
+                if (mag(dotProduct) > maxDotProduct)
+                {
+                    maxDotProduct = mag(dotProduct);
+
+                    alignmentDirs[aA] = a + sign(dotProduct)*b;
+
+                    alignmentDirs[aA] /= mag(alignmentDirs[aA]);
+                }
+            }
+        }
+
+        vector2D rAB = dVA - dVB;
+
+        scalar rABMag = mag(rAB);
+
+        forAll(alignmentDirs, aD)
+        {
+            vector2D& alignmentDir = alignmentDirs[aD];
+
+            if ((rAB & alignmentDir) < 0)
+            {
+                // swap the direction of the alignment so that has the
+                // same sense as rAB
+                alignmentDir *= -1;
+            }
+
+            scalar alignmentDotProd = ((rAB/rABMag) & alignmentDir);
+
+            if (alignmentDotProd > cosAlignmentAcceptanceAngle)
+            {
+                scalar targetFaceSize =
+                    0.5*(sizes[vA->index()] + sizes[vB->index()]);
+
+                // Test for changing aspect ratio on second alignment (first
+                // alignment is neartest surface normal)
+                // if (aD == 1)
+                // {
+                //     targetFaceSize *= 2.0;
+                // }
+
+                alignmentDir *= 0.5*targetFaceSize;
+
+                vector2D delta = alignmentDir - 0.5*rAB;
+
+                if (dualEdgeLength < 0.7*targetFaceSize)
+                {
+                    delta *= 0;
+                }
+                else if (dualEdgeLength < targetFaceSize)
+                {
+                    delta *=
+                        (
+                            dualEdgeLength
+                           /(targetFaceSize*(u - l))
+                          - 1/((u/l) - 1)
+                        );
+                }
+
+                if
+                (
+                    vA->internalPoint()
+                 && vB->internalPoint()
+                 && rABMag > 1.75*targetFaceSize
+                 && dualEdgeLength > 0.05*targetFaceSize
+                 && alignmentDotProd > 0.93
+                )
+                {
+                    // Point insertion
+                    pointsToInsert.push_back(toPoint(0.5*(dVA + dVB)));
+                }
+                else if
+                (
+                    (vA->internalPoint() || vB->internalPoint())
+                 && rABMag < 0.65*targetFaceSize
+                )
+                {
+                    // Point removal
+
+                    // Only insert a point at the midpoint of the short edge
+                    // if neither attached point has already been identified
+                    // to be removed.
+                    if
+                    (
+                        pointToBeRetained[vA->index()] == true
+                     && pointToBeRetained[vB->index()] == true
+                    )
+                    {
+                        pointsToInsert.push_back(toPoint(0.5*(dVA + dVB)));
+                    }
+
+                    if (vA->internalPoint())
+                    {
+                        pointToBeRetained[vA->index()] = false;
+                    }
+
+                    if (vB->internalPoint())
+                    {
+                        pointToBeRetained[vB->index()] = false;
+                    }
+                }
+                else
+                {
+                    if (vA->internalPoint())
+                    {
+                        displacementAccumulator[vA->index()] += delta;
+                    }
+
+                    if (vB->internalPoint())
+                    {
+                        displacementAccumulator[vB->index()] += -delta;
+                    }
+                }
+            }
+        }
+    }
+
+    vector2D totalDisp = sum(displacementAccumulator);
+    scalar totalDist = sum(mag(displacementAccumulator));
+
+    // Relax the calculated displacement
+    displacementAccumulator *= relaxation;
+
+    label numberOfNewPoints = pointsToInsert.size();
+
+    for
+    (
+        Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        ++vit
+    )
+    {
+        if (vit->internalPoint())
+        {
+            if (pointToBeRetained[vit->index()])
+            {
+                pointsToInsert.push_front
+                (
+                    toPoint
+                    (
+                        toPoint2D(vit->point())
+                      + displacementAccumulator[vit->index()]
+                    )
+                );
+            }
+        }
+    }
+
+    // Clear the triangulation and reinsert the bounding box and feature points.
+    // This is faster than removing and moving points.
+    this->clear();
+
+    insertBoundingBox();
+
+    reinsertFeaturePoints();
+
+    startOfInternalPoints_ = number_of_vertices();
+
+    label nVert = startOfInternalPoints_;
+
+    Info<< "Inserting " << numberOfNewPoints << " new points" << endl;
+
+    // Use the range insert as it is faster than individually inserting points.
+    insert(pointsToInsert.begin(), pointsToInsert.end());
+
+    for
+    (
+        Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        ++vit
+    )
+    {
+        if
+        (
+            vit->type() == Vb::INTERNAL_POINT
+         && vit->index() == Vb::INTERNAL_POINT
+        )
+        {
+            vit->index() = nVert++;
+        }
+    }
+
+    Info<< "    Total displacement = " << totalDisp << nl
+        << "    Total distance = " << totalDist << nl
+        << "    Points added = " << pointsToInsert.size()
+        << endl;
+
+    write("internal");
+
+    insertSurfacePointPairs();
+
+    boundaryConform();
+
+
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Old Method
+// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+// for
+// (
+//     Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
+//     vit != finite_vertices_end();
+//     ++vit
+// )
+// {
+//     if (vit->internalPoint())
+//     {
+//         // Current dual-cell defining vertex ("centre")
+//         point2DFromPoint defVert0 = toPoint2D(vit->point());
+
+//         Triangulation::Edge_circulator ec = incident_edges(vit);
+//         Triangulation::Edge_circulator ecStart = ec;
+
+//         // Circulate around the edges to find the first which is not
+//         // infinite
+//         do
+//         {
+//             if (!is_infinite(ec)) break;
+//         } while (++ec != ecStart);
+
+//         // Store the start-end of the first non-infinte edge
+//         point2D de0 = toPoint2D(circumcenter(ec->first));
+
+//         // Keep track of the maximum edge length^2
+//         scalar maxEdgeLen2 = 0.0;
+
+//         // Keep track of the index of the longest edge
+//         label edgecd0i = -1;
+
+//         // Edge counter
+//         label edgei = 0;
+
+//         do
+//         {
+//             if (!is_infinite(ec))
+//             {
+//                 // Get the end of the current edge
+//                 point2D de1 = toPoint2D
+//                 (
+//                     circumcenter(ec->first->neighbor(ec->second))
+//                 );
+
+//                 // Store the current edge vector
+//                 edges[edgei] = de1 - de0;
+
+//                 // Store the edge mid-point in the vertices array
+//                 vertices[edgei] = 0.5*(de1 + de0);
+
+//                 // Move the current edge end into the edge start for the
+//                 // next iteration
+//                 de0 = de1;
+
+//                 // Keep track of the longest edge
+
+//                 scalar edgeLen2 = magSqr(edges[edgei]);
+
+//                 if (edgeLen2 > maxEdgeLen2)
+//                 {
+//                     maxEdgeLen2 = edgeLen2;
+//                     edgecd0i = edgei;
+//                 }
+
+//                 edgei++;
+//             }
+//         } while (++ec != ecStart);
+
+//         // Initialise cd0 such that the mesh will align
+//         // in in the x-y directions
+//         vector2D cd0(1, 0);
+
+//         if (meshControls().relaxOrientation())
+//         {
+//             // Get the longest edge from the array and use as the primary
+//             // direction of the coordinate system of the "square" cell
+//             cd0 = edges[edgecd0i];
+//         }
+
+//         if (meshControls().nearWallAlignedDist() > 0)
+//         {
+//             pointIndexHit pHit = qSurf_.tree().findNearest
+//             (
+//                 toPoint3D(defVert0),
+//                 meshControls().nearWallAlignedDist2()
+//             );
+
+//             if (pHit.hit())
+//             {
+//                 cd0 = toPoint2D(faceNormals[pHit.index()]);
+//             }
+//         }
+
+//         // Rotate by 45deg needed to create an averaging procedure which
+//         // encourages the cells to be square
+//         cd0 = vector2D(cd0.x() + cd0.y(), cd0.y() - cd0.x());
+
+//         // Normalise the primary coordinate direction
+//         cd0 /= mag(cd0);
+
+//         // Calculate the orthogonal coordinate direction
+//         vector2D cd1(-cd0.y(), cd0.x());
+
+
+//         // Restart the circulator
+//         ec = ecStart;
+
+//         // ... and the counter
+//         edgei = 0;
+
+//         // Initialise the displacement for the centre and sum-weights
+//         vector2D disp = vector2D::zero;
+//         scalar sumw = 0;
+
+//         do
+//         {
+//             if (!is_infinite(ec))
+//             {
+//                 // Pick up the current edge
+//                 const vector2D& ei = edges[edgei];
+
+//                 // Calculate the centre to edge-centre vector
+//                 vector2D deltai = vertices[edgei] - defVert0;
+
+//                 // Set the weight for this edge contribution
+//                 scalar w = 1;
+
+//                 if (meshControls().squares())
+//                 {
+//                     w = magSqr(deltai.x()*ei.y() - deltai.y()*ei.x());
+//                     // alternative weights
+//                     //w = mag(deltai.x()*ei.y() - deltai.y()*ei.x());
+//                     //w = magSqr(ei)*mag(deltai);
+
+//                     // Use the following for an ~square mesh
+//                     // Find the coordinate contributions for this edge delta
+//                     scalar cd0deltai = cd0 & deltai;
+//                     scalar cd1deltai = cd1 & deltai;
+
+//                     // Create a "square" displacement
+//                     if (mag(cd0deltai) > mag(cd1deltai))
+//                     {
+//                         disp += (w*cd0deltai)*cd0;
+//                     }
+//                     else
+//                     {
+//                         disp += (w*cd1deltai)*cd1;
+//                     }
+//                 }
+//                 else
+//                 {
+//                     // Use this for a hexagon/pentagon mesh
+//                     disp += w*deltai;
+//                 }
+
+//                 // Sum the weights
+//                 sumw += w;
+//             }
+//             else
+//             {
+//                 FatalErrorIn("CV2D::newPoints() const")
+//                     << "Infinite triangle found in internal mesh"
+//                     << exit(FatalError);
+//             }
+
+//             edgei++;
+
+//         } while (++ec != ecStart);
+
+//         // Calculate the average displacement
+//         disp /= sumw;
+//         totalDisp += disp;
+//         totalDist += mag(disp);
+
+//         // Move the point by a fraction of the average displacement
+//         movePoint(vit, defVert0 + relaxation*disp);
+//     }
+// }
+
+// Info << "\nTotal displacement = " << totalDisp
+//      << " total distance = " << totalDist << endl;
+}
+
+
+//void Foam::CV2D::moveInternalPoints(const point2DField& newPoints)
+//{
+//    label pointI = 0;
+
+//    for
+//    (
+//        Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
+//        vit != finite_vertices_end();
+//        ++vit
+//    )
+//    {
+//        if (vit->internalPoint())
+//        {
+//            movePoint(vit, newPoints[pointI++]);
+//        }
+//    }
+//}
+
+
+void Foam::CV2D::write() const
+{
+    if (meshControls().objOutput())
+    {
+        writeFaces("allFaces.obj", false);
+        writeFaces("faces.obj", true);
+        writeTriangles("allTriangles.obj", false);
+        writeTriangles("triangles.obj", true);
+        writePatch("patch.pch");
+    }
+}
+
+
+void Foam::CV2D::write(const word& stage) const
+{
+    if (meshControls().objOutput())
+    {
+        Foam::mkDir(stage + "Faces");
+        Foam::mkDir(stage + "Triangles");
+
+        writeFaces
+        (
+            stage
+          + "Faces/allFaces_"
+          + runTime_.timeName()
+          + ".obj",
+            false
+        );
+
+        writeTriangles
+        (
+            stage
+          + "Triangles/allTriangles_"
+          + runTime_.timeName()
+          + ".obj",
+            false
+        );
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cv2DMesh/CV2D.H b/applications/utilities/mesh/generation/cv2DMesh/CV2D.H
new file mode 100644
index 0000000000000000000000000000000000000000..4948196fc2c685a7ece2aea29b8df50e4b5f20e7
--- /dev/null
+++ b/applications/utilities/mesh/generation/cv2DMesh/CV2D.H
@@ -0,0 +1,474 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    CV2D
+
+Description
+    Conformal-Voronoi 2D automatic mesher with grid or read initial points
+    and point position relaxation with optional "squarification".
+
+    There are a substantial number of options to this mesher read from
+    CV2DMesherDict file e.g.:
+
+    // Min cell size used in tolerances when inserting points for
+    // boundary conforming.
+    // Also used to as the grid spacing usind in insertGrid.
+    minCellSize  0.05;
+
+    // Feature angle used to inser feature points
+    // 0 = all features, 180 = no features
+    featureAngle 45;
+
+    // Maximum quadrant angle allowed at a concave corner before
+    // additional "mitering" lines are added
+    maxQuadAngle 110;
+
+    // Should the mesh be square-dominated or of unbiased hexagons
+    squares      yes;
+
+    // Near-wall region where cells are aligned with the wall specified as a
+    // number of cell layers
+    nearWallAlignedDist 3;
+
+    // Chose if the cell orientation should relax during the iterations
+    //  or remain fixed to the x-y directions
+    relaxOrientation    no;
+
+    // Insert near-boundary point mirror or point-pairs
+    insertSurfaceNearestPointPairs yes;
+
+    // Mirror near-boundary points rather than insert point-pairs
+    mirrorPoints   no;
+
+    // Insert point-pairs vor dual-cell vertices very near the surface
+    insertSurfaceNearPointPairs yes;
+
+    // Choose if to randomise the initial grid created by insertGrid.
+    randomiseInitialGrid yes;
+
+    // Perturbation fraction, 1 = cell-size.
+    randomPurturbation   0.1;
+
+    // Number of relaxation iterations.
+    nIterations      5;
+
+    // Relaxation factor at the start of the iteration sequence.
+    // 0.5 is a sensible maximum and < 0.2 converges better.
+    relaxationFactorStart 0.8;
+
+    // Relaxation factor at the end of the iteration sequence.
+    // Should be <= relaxationFactorStart
+    relaxationFactorEnd   0;
+
+    writeInitialTriangulation no;
+    writeFeatureTriangulation no;
+    writeNearestTriangulation no;
+    writeInsertedPointPairs   no;
+    writeFinalTriangulation   yes;
+
+    // Maximum number of iterations used in boundaryConform.
+    maxBoundaryConformingIter 5;
+
+    minEdgeLenCoeff           0.5;
+    maxNotchLenCoeff          0.3;
+    minNearPointDistCoeff     0.25;
+    ppDistCoeff               0.05;
+
+SourceFiles
+    CGALTriangulation2Ddefs.H
+    indexedVertex.H
+    indexedFace.H
+    CV2DI.H
+    CV2D.C
+    CV2DIO.C
+    tolerances.C
+    controls.C
+    insertFeaturePoints.C
+    insertSurfaceNearestPointPairs.C
+    insertSurfaceNearPointPairs.C
+    insertBoundaryConformPointPairs.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef CV2D_H
+#define CV2D_H
+
+#define CGAL_INEXACT
+#define CGAL_HIERARCHY
+
+#include "CGALTriangulation2Ddefs.H"
+
+#include "Time.H"
+#include "point2DFieldFwd.H"
+#include "dictionary.H"
+#include "Switch.H"
+#include "PackedBoolList.H"
+#include "EdgeMap.H"
+#include "cv2DControls.H"
+#include "tolerances.H"
+#include "meshTools.H"
+#include "triSurface.H"
+#include "searchableSurfaces.H"
+#include "conformationSurfaces.H"
+#include "relaxationModel.H"
+#include "cellSizeAndAlignmentControls.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                           Class CV2D Declaration
+\*---------------------------------------------------------------------------*/
+
+class CV2D
+:
+    public Delaunay
+{
+
+private:
+
+    // Private data
+
+        //- The time registry of the application
+        const Time& runTime_;
+
+        mutable Random rndGen_;
+
+        //- The surface to mesh
+        //const querySurface& qSurf_;
+        //- All geometry of the meshing process, including surfaces to be
+        //  conformed to and those to be used for refinement
+        searchableSurfaces allGeometry_;
+
+        conformationSurfaces qSurf_;
+
+        //- Meshing controls
+        cv2DControls controls_;
+
+        //- The cell size control object
+        cellSizeAndAlignmentControls cellSizeControl_;
+
+        //- Relaxation coefficient model.  Runtime selectable.
+        autoPtr<relaxationModel> relaxationModel_;
+
+        //- z-level
+        scalar z_;
+
+        //- Keep track of the start of the internal points
+        label startOfInternalPoints_;
+
+        //- Keep track of the start of the surface point-pairs
+        label startOfSurfacePointPairs_;
+
+        //- Keep track of the boundary conform point-pairs
+        //  stored after the insertion of the surface point-pairs in case
+        //  the boundary conform function is called more than once without
+        //  removing and insertin the surface point-pairs
+        label startOfBoundaryConformPointPairs_;
+
+        //- Store the feature points
+        std::list<Vb> featurePoints_;
+
+        //- Temporary storage for a dual-cell
+        static const label maxNvert = 20;
+        mutable point2D vertices[maxNvert+1];
+        mutable vector2D edges[maxNvert+1];
+
+
+    // Private Member Functions
+
+        //- Disallow default bitwise copy construct
+        CV2D(const CV2D&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const CV2D&);
+
+
+        //- Insert point and return it's index
+        inline label insertPoint
+        (
+            const point2D& pt,
+            const label type
+        );
+
+        //- Insert point and return it's index
+        inline label insertPoint
+        (
+            const point2D& pt,
+            const label index,
+            const label type
+        );
+
+        inline label insertPoint
+        (
+            const Point& p,
+            const label index,
+            const label type
+        );
+
+        inline bool insertMirrorPoint
+        (
+            const point2D& nearSurfPt,
+            const point2D& surfPt
+        );
+
+        //- Insert a point-pair at a distance ppDist either side of
+        //  surface point point surfPt in the direction n
+        inline void insertPointPair
+        (
+            const scalar mirrorDist,
+            const point2D& surfPt,
+            const vector2D& n
+        );
+
+        //- Create the initial mesh from the bounding-box
+        void insertBoundingBox();
+
+        //- Check if a point is within a line.
+        bool on2DLine(const point2D& p, const linePointRef& line);
+
+        //- Insert point groups at the feature points.
+        void insertFeaturePoints();
+
+        //- Re-insert point groups at the feature points.
+        void reinsertFeaturePoints();
+
+        //- Insert point-pairs at the given set of points using the surface
+        //  normals corresponding to the given set of surface triangles
+        //  and write the inserted point locations to the given file.
+        void insertPointPairs
+        (
+            const DynamicList<point2D>& nearSurfacePoints,
+            const DynamicList<point2D>& surfacePoints,
+            const DynamicList<label>& surfaceTris,
+            const DynamicList<label>& surfaceHits,
+            const fileName fName
+        );
+
+        //- Check to see if dual cell specified by given vertex iterator
+        //  intersects the boundary and hence reqires a point-pair.
+        bool dualCellSurfaceIntersection
+        (
+            const Triangulation::Finite_vertices_iterator& vit
+        ) const;
+
+        //- Insert point-pairs at the nearest points on the surface to the
+        //  control vertex of dual-cells which intersect the boundary in order
+        //  to provide a boundary-layer mesh.
+        //  NB: This is not guaranteed to close the boundary
+        void insertSurfaceNearestPointPairs();
+
+        //- Insert point-pairs at small dual-cell edges on the surface in order
+        //  to improve the boundary-layer mesh generated by
+        //  insertSurfaceNearestPointPairs.
+        void insertSurfaceNearPointPairs();
+
+        //- Insert point-pair and correcting the Finite_vertices_iterator
+        //  to account for the additional vertices
+        void insertPointPair
+        (
+            Triangulation::Finite_vertices_iterator& vit,
+            const point2D& p,
+            const label trii,
+            const label hitSurface
+        );
+
+        //- Insert point-pair at the best intersection point between the lines
+        //  from the dual-cell real centroid and it's vertices and the surface.
+        bool insertPointPairAtIntersection
+        (
+            Triangulation::Finite_vertices_iterator& vit,
+            const point2D& defVert,
+            const point2D vertices[],
+            const scalar maxProtSize
+        );
+
+        //- Insert point-pairs corresponding to dual-cells which intersect
+        //  the boundary surface
+        label insertBoundaryConformPointPairs(const fileName& fName);
+
+        void markNearBoundaryPoints();
+
+        //- Restore the Delaunay contraint
+        void fast_restore_Delaunay(Vertex_handle vh);
+
+        // Flip operations used by fast_restore_Delaunay
+        void external_flip(Face_handle& f, int i);
+        bool internal_flip(Face_handle& f, int i);
+
+        //- Write all the faces and all the triangles at a particular stage.
+        void write(const word& stage) const;
+
+
+public:
+
+    //- Runtime type information
+    ClassName("CV2D");
+
+
+    // Constructors
+
+        //- Construct for given surface
+        CV2D(const Time& runTime, const dictionary& controlDict);
+
+
+    //- Destructor
+    ~CV2D();
+
+
+    // Member Functions
+
+        // Access
+
+            inline const cv2DControls& meshControls() const;
+
+
+        // Conversion functions between point2D, point and Point
+
+            inline const point2D& toPoint2D(const point&) const;
+            inline const point2DField toPoint2D(const pointField&) const;
+            inline point toPoint3D(const point2D&) const;
+
+            #ifdef CGAL_INEXACT
+                typedef const point2D& point2DFromPoint;
+                typedef const Point& PointFromPoint2D;
+            #else
+                typedef point2D point2DFromPoint;
+                typedef Point PointFromPoint2D;
+            #endif
+
+            inline point2DFromPoint toPoint2D(const Point&) const;
+            inline PointFromPoint2D toPoint(const point2D&) const;
+            inline point toPoint3D(const Point&) const;
+
+
+        // Point insertion
+
+            //- Create the initial mesh from the given internal points.
+            //  Points must be inside the boundary by at least nearness
+            //  otherwise they are ignored.
+            void insertPoints
+            (
+                const point2DField& points,
+                const scalar nearness
+            );
+
+            //- Create the initial mesh from the internal points in the given
+            //  file.  Points outside the geometry are ignored.
+            void insertPoints(const fileName& pointFileName);
+
+            //- Create the initial mesh as a regular grid of points.
+            //  Points outside the geometry are ignored.
+            void insertGrid();
+
+            //- Insert all surface point-pairs from
+            //  insertSurfaceNearestPointPairs and
+            //  findIntersectionForOutsideCentroid
+            void insertSurfacePointPairs();
+
+            //- Insert point-pairs where there are protrusions into
+            //  or out of the surface
+            void boundaryConform();
+
+
+        // Point removal
+
+            //- Remove the point-pairs introduced by insertSurfacePointPairs
+            //  and boundaryConform
+            void removeSurfacePointPairs();
+
+
+        // Point motion
+
+            inline void movePoint(const Vertex_handle& vh, const Point& P);
+
+            //- Move the internal points to the given new locations and update
+            //  the triangulation to ensure it is Delaunay
+            // void moveInternalPoints(const point2DField& newPoints);
+
+            //- Calculate the displacements to create the new points
+            void newPoints();
+
+            //- Extract patch names and sizes.
+            void extractPatches
+            (
+                wordList& patchNames,
+                labelList& patchSizes,
+                EdgeMap<label>& mapEdgesRegion,
+                EdgeMap<label>& indirectPatchEdge
+            ) const;
+
+
+        // Write
+
+            //- Write internal points to .obj file
+            void writePoints(const fileName& fName, bool internalOnly) const;
+
+            //- Write triangles as .obj file
+            void writeTriangles(const fileName& fName, bool internalOnly) const;
+
+            //- Write dual faces as .obj file
+            void writeFaces(const fileName& fName, bool internalOnly) const;
+
+            //- Calculates dual points (circumcentres of tets) and faces
+            //  (point-cell walk of tets).
+            //  Returns:
+            //  - dualPoints (in triangle ordering)
+            //  - dualFaces (compacted)
+            void calcDual
+            (
+                point2DField& dualPoints,
+                faceList& dualFaces,
+                wordList& patchNames,
+                labelList& patchSizes,
+                EdgeMap<label>& mapEdgesRegion,
+                EdgeMap<label>& indirectPatchEdge
+            ) const;
+
+            //- Write patch
+            void writePatch(const fileName& fName) const;
+
+            void write() const;
+};
+
+
+inline bool boundaryTriangle(const CV2D::Face_handle fc);
+inline bool outsideTriangle(const CV2D::Face_handle fc);
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#include "CV2DI.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cv2DMesh/CV2DI.H b/applications/utilities/mesh/generation/cv2DMesh/CV2DI.H
new file mode 100644
index 0000000000000000000000000000000000000000..42f4757df12822197abe8ebcd2c5c8bc3f247208
--- /dev/null
+++ b/applications/utilities/mesh/generation/cv2DMesh/CV2DI.H
@@ -0,0 +1,227 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
+
+inline Foam::label Foam::CV2D::insertPoint
+(
+    const point2D& p,
+    const label type
+)
+{
+    uint nVert = number_of_vertices();
+
+    return insertPoint(toPoint(p), nVert, type);
+}
+
+
+inline Foam::label Foam::CV2D::insertPoint
+(
+    const point2D& p,
+    const label index,
+    const label type
+)
+{
+    return insertPoint(toPoint(p), index, type);
+}
+
+
+inline Foam::label Foam::CV2D::insertPoint
+(
+    const Point& p,
+    const label index,
+    const label type
+)
+{
+    uint nVert = number_of_vertices();
+
+    Vertex_handle vh = insert(p);
+
+    if (nVert == number_of_vertices())
+    {
+        WarningIn("Foam::CV2D::insertPoint")
+            << "Failed to insert point " << toPoint2D(p) << endl;
+    }
+    else
+    {
+        vh->index() = index;
+        vh->type() = type;
+    }
+
+    return vh->index();
+}
+
+
+inline bool Foam::CV2D::insertMirrorPoint
+(
+    const point2D& nearSurfPt,
+    const point2D& surfPt
+)
+{
+    point2D mirrorPoint(2*surfPt - nearSurfPt);
+
+    if (qSurf_.outside(toPoint3D(mirrorPoint)))
+    {
+        insertPoint(mirrorPoint, Vb::MIRROR_POINT);
+        return true;
+    }
+    else
+    {
+        return false;
+    }
+}
+
+
+inline void Foam::CV2D::insertPointPair
+(
+    const scalar ppDist,
+    const point2D& surfPt,
+    const vector2D& n
+)
+{
+    vector2D ppDistn = ppDist*n;
+
+    label master = insertPoint
+    (
+        surfPt - ppDistn,
+        number_of_vertices() + 1
+    );
+
+    insertPoint(surfPt + ppDistn, master);
+}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+inline const Foam::cv2DControls& Foam::CV2D::meshControls() const
+{
+    return controls_;
+}
+
+
+inline const Foam::point2D& Foam::CV2D::toPoint2D(const point& p) const
+{
+    return reinterpret_cast<const point2D&>(p);
+}
+
+
+inline const Foam::point2DField Foam::CV2D::toPoint2D(const pointField& p) const
+{
+    point2DField temp(p.size());
+    forAll(temp, pointI)
+    {
+        temp[pointI] = point2D(p[pointI].x(), p[pointI].y());
+    }
+    return temp;
+}
+
+
+inline Foam::point Foam::CV2D::toPoint3D(const point2D& p) const
+{
+    return point(p.x(), p.y(), z_);
+}
+
+
+#ifdef CGAL_INEXACT
+
+inline Foam::CV2D::point2DFromPoint Foam::CV2D::toPoint2D(const Point& P) const
+{
+    return reinterpret_cast<point2DFromPoint>(P);
+}
+
+
+inline Foam::CV2D::PointFromPoint2D Foam::CV2D::toPoint(const point2D& p) const
+{
+    return reinterpret_cast<PointFromPoint2D>(p);
+}
+
+#else
+
+inline Foam::CV2D::point2DFromPoint Foam::CV2D::toPoint2D(const Point& P) const
+{
+    return point2D(CGAL::to_double(P.x()), CGAL::to_double(P.y()));
+}
+
+
+inline Foam::CV2D::PointFromPoint2D Foam::CV2D::toPoint(const point2D& p) const
+{
+    return Point(p.x(), p.y());
+}
+
+#endif
+
+
+inline Foam::point Foam::CV2D::toPoint3D(const Point& P) const
+{
+    return point(CGAL::to_double(P.x()), CGAL::to_double(P.y()), z_);
+}
+
+
+inline void Foam::CV2D::movePoint(const Vertex_handle& vh, const Point& P)
+{
+    int i = vh->index();
+    int t = vh->type();
+
+    remove(vh);
+
+    Vertex_handle newVh = insert(P);
+
+    newVh->index() = i;
+    newVh->type() = t;
+
+    // label i = vh->index();
+    // move(vh, P);
+    // vh->index() = i;
+
+     //vh->set_point(P);
+     //fast_restore_Delaunay(vh);
+}
+
+
+// * * * * * * * * * * * * * * * Friend Functions  * * * * * * * * * * * * * //
+
+inline bool Foam::boundaryTriangle(const CV2D::Face_handle fc)
+{
+    return boundaryTriangle
+    (
+        *fc->vertex(0),
+        *fc->vertex(1),
+        *fc->vertex(2)
+    );
+}
+
+
+inline bool Foam::outsideTriangle(const CV2D::Face_handle fc)
+{
+    return outsideTriangle
+    (
+        *fc->vertex(0),
+        *fc->vertex(1),
+        *fc->vertex(2)
+    );
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cv2DMesh/CV2DIO.C b/applications/utilities/mesh/generation/cv2DMesh/CV2DIO.C
new file mode 100644
index 0000000000000000000000000000000000000000..0223c28ebec89849b1e74133e6ddda48ffab4a08
--- /dev/null
+++ b/applications/utilities/mesh/generation/cv2DMesh/CV2DIO.C
@@ -0,0 +1,386 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "CV2D.H"
+#include "OFstream.H"
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+void Foam::CV2D::writePoints(const fileName& fName, bool internalOnly) const
+{
+    Info<< "Writing points to " << fName << nl << endl;
+    OFstream str(fName);
+
+    for
+    (
+        Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        ++vit
+    )
+    {
+        if (!internalOnly || vit->internalOrBoundaryPoint())
+        {
+            meshTools::writeOBJ(str, toPoint3D(vit->point()));
+        }
+    }
+}
+
+
+void Foam::CV2D::writeTriangles(const fileName& fName, bool internalOnly) const
+{
+    Info<< "Writing triangles to " << fName << nl << endl;
+    OFstream str(fName);
+
+    labelList vertexMap(number_of_vertices(), -2);
+    label verti = 0;
+
+    for
+    (
+        Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        ++vit
+    )
+    {
+        if (!internalOnly || !vit->farPoint())
+        {
+            vertexMap[vit->index()] = verti++;
+            meshTools::writeOBJ(str, toPoint3D(vit->point()));
+        }
+    }
+
+    for
+    (
+        Triangulation::Finite_faces_iterator fit = finite_faces_begin();
+        fit != finite_faces_end();
+        ++fit
+    )
+    {
+        if
+        (
+            !internalOnly
+         || (
+                fit->vertex(0)->internalOrBoundaryPoint()
+             || fit->vertex(1)->internalOrBoundaryPoint()
+             || fit->vertex(2)->internalOrBoundaryPoint()
+            )
+        )
+        {
+            str << "f";
+            for (label i = 0; i < 3; ++i)
+            {
+                str << " " << vertexMap[fit->vertex(i)->index()] + 1;
+            }
+            str << nl;
+        }
+    }
+}
+
+
+void Foam::CV2D::writeFaces(const fileName& fName, bool internalOnly) const
+{
+    Info<< "Writing dual faces to " << fName << nl << endl;
+    OFstream str(fName);
+
+    label dualVerti = 0;
+
+    for
+    (
+        Triangulation::Finite_faces_iterator fit = finite_faces_begin();
+        fit != finite_faces_end();
+        ++fit
+    )
+    {
+        if
+        (
+            !internalOnly
+         || (
+                fit->vertex(0)->internalOrBoundaryPoint()
+             || fit->vertex(1)->internalOrBoundaryPoint()
+             || fit->vertex(2)->internalOrBoundaryPoint()
+            )
+        )
+        {
+            fit->faceIndex() = dualVerti++;
+            meshTools::writeOBJ(str, toPoint3D(circumcenter(fit)));
+        }
+        else
+        {
+            fit->faceIndex() = -1;
+        }
+    }
+
+    for
+    (
+        Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        ++vit
+    )
+    {
+        if (!internalOnly || vit->internalOrBoundaryPoint())
+        {
+            Face_circulator fcStart = incident_faces(vit);
+            Face_circulator fc = fcStart;
+
+            str<< 'f';
+
+            do
+            {
+                if (!is_infinite(fc))
+                {
+                    if (fc->faceIndex() < 0)
+                    {
+                        FatalErrorIn
+                        (
+                            "Foam::CV2D::writeFaces"
+                            "(const fileName& fName, bool internalOnly)"
+                        )<< "Dual face uses vertex defined by a triangle"
+                            " defined by an external point"
+                            << exit(FatalError);
+                    }
+
+                    str<< ' ' << fc->faceIndex() + 1;
+                }
+            } while (++fc != fcStart);
+
+            str<< nl;
+        }
+    }
+}
+
+
+void Foam::CV2D::extractPatches
+(
+    wordList& patchNames,
+    labelList& patchSizes,
+    EdgeMap<label>& mapEdgesRegion,
+    EdgeMap<label>& indirectPatchEdge
+) const
+{
+    label nPatches = qSurf_.patchNames().size() + 1;
+    label defaultPatchIndex = qSurf_.patchNames().size();
+
+    patchNames.setSize(nPatches);
+    patchSizes.setSize(nPatches, 0);
+    mapEdgesRegion.clear();
+
+    const wordList& existingPatches = qSurf_.patchNames();
+
+    forAll(existingPatches, sP)
+    {
+        patchNames[sP] = existingPatches[sP];
+    }
+
+    patchNames[defaultPatchIndex] = "CV2D_default_patch";
+
+    for
+    (
+        Triangulation::Finite_edges_iterator eit = finite_edges_begin();
+        eit != finite_edges_end();
+        ++eit
+    )
+    {
+        Face_handle fOwner = eit->first;
+        Face_handle fNeighbor = fOwner->neighbor(eit->second);
+
+        Vertex_handle vA = fOwner->vertex(cw(eit->second));
+        Vertex_handle vB = fOwner->vertex(ccw(eit->second));
+
+        if
+        (
+            (vA->internalOrBoundaryPoint() && !vB->internalOrBoundaryPoint())
+         || (vB->internalOrBoundaryPoint() && !vA->internalOrBoundaryPoint())
+        )
+        {
+            point ptA = toPoint3D(vA->point());
+            point ptB = toPoint3D(vB->point());
+
+            label patchIndex = qSurf_.findPatch(ptA, ptB);
+
+            if (patchIndex == -1)
+            {
+                patchIndex = defaultPatchIndex;
+
+                WarningIn("Foam::CV2D::extractPatches")
+                    << "Dual face found that is not on a surface "
+                    << "patch. Adding to CV2D_default_patch."
+                    << endl;
+            }
+
+            edge e(fOwner->faceIndex(), fNeighbor->faceIndex());
+            patchSizes[patchIndex]++;
+            mapEdgesRegion.insert(e, patchIndex);
+
+            if (!pointPair(*vA, *vB))
+            {
+                indirectPatchEdge.insert(e, 1);
+            }
+        }
+    }
+}
+
+
+void Foam::CV2D::calcDual
+(
+    point2DField& dualPoints,
+    faceList& dualFaces,
+    wordList& patchNames,
+    labelList& patchSizes,
+    EdgeMap<label>& mapEdgesRegion,
+    EdgeMap<label>& indirectPatchEdge
+) const
+{
+    // Dual points stored in triangle order.
+    dualPoints.setSize(number_of_faces());
+    label dualVerti = 0;
+
+    for
+    (
+        Triangulation::Finite_faces_iterator fit = finite_faces_begin();
+        fit != finite_faces_end();
+        ++fit
+    )
+    {
+        if
+        (
+            fit->vertex(0)->internalOrBoundaryPoint()
+         || fit->vertex(1)->internalOrBoundaryPoint()
+         || fit->vertex(2)->internalOrBoundaryPoint()
+        )
+        {
+            fit->faceIndex() = dualVerti;
+
+            dualPoints[dualVerti++] = toPoint2D(circumcenter(fit));
+        }
+        else
+        {
+            fit->faceIndex() = -1;
+        }
+    }
+
+    dualPoints.setSize(dualVerti);
+
+    extractPatches(patchNames, patchSizes, mapEdgesRegion, indirectPatchEdge);
+
+    forAll(patchNames, patchI)
+    {
+        Info<< "Patch " << patchNames[patchI]
+            << " has size " << patchSizes[patchI] << endl;
+    }
+
+    // Create dual faces
+    // ~~~~~~~~~~~~~~~~~
+
+    dualFaces.setSize(number_of_vertices());
+    label dualFacei = 0;
+    labelList faceVerts(maxNvert);
+
+    for
+    (
+        Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        ++vit
+    )
+    {
+        if (vit->internalOrBoundaryPoint())
+        {
+            Face_circulator fcStart = incident_faces(vit);
+            Face_circulator fc = fcStart;
+            label verti = 0;
+
+            do
+            {
+                if (!is_infinite(fc))
+                {
+                    if (fc->faceIndex() < 0)
+                    {
+                        FatalErrorIn
+                        (
+                            "Foam::CV2D::calcDual"
+                            "(point2DField& dualPoints, faceList& dualFaces)"
+                        )<< "Dual face uses vertex defined by a triangle"
+                            " defined by an external point"
+                            << exit(FatalError);
+                    }
+
+                    // Look up the index of the triangle
+                    faceVerts[verti++] = fc->faceIndex();
+                }
+            } while (++fc != fcStart);
+
+            if (faceVerts.size() > 2)
+            {
+                dualFaces[dualFacei++] =
+                    face(labelList::subList(faceVerts, verti));
+            }
+            else
+            {
+                Info<< "From triangle point:" << vit->index()
+                    << " coord:" << toPoint2D(vit->point())
+                    << " generated illegal dualFace:" << faceVerts
+                    << endl;
+            }
+        }
+    }
+
+    dualFaces.setSize(dualFacei);
+}
+
+
+void Foam::CV2D::writePatch(const fileName& fName) const
+{
+    point2DField dual2DPoints;
+    faceList dualFaces;
+    wordList patchNames;
+    labelList patchSizes;
+    EdgeMap<label> mapEdgesRegion;
+    EdgeMap<label> indirectPatchEdge;
+
+    calcDual
+    (
+        dual2DPoints,
+        dualFaces,
+        patchNames,
+        patchSizes,
+        mapEdgesRegion,
+        indirectPatchEdge
+    );
+
+    pointField dualPoints(dual2DPoints.size());
+    forAll(dualPoints, ip)
+    {
+        dualPoints[ip] = toPoint3D(dual2DPoints[ip]);
+    }
+
+    // Dump as primitive patch to be read by extrudeMesh.
+    OFstream str(fName);
+
+    Info<< "Writing patch to be used with extrudeMesh to file " << fName
+        << endl;
+
+    str << dualPoints << nl << dualFaces << nl;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cv2DMesh/Make/files b/applications/utilities/mesh/generation/cv2DMesh/Make/files
new file mode 100755
index 0000000000000000000000000000000000000000..f7f70afa2af7b1fbc34d268dc45efb10c36fb1f7
--- /dev/null
+++ b/applications/utilities/mesh/generation/cv2DMesh/Make/files
@@ -0,0 +1,12 @@
+#include CGAL_FILES
+
+CV2D.C
+insertFeaturePoints.C
+insertSurfaceNearestPointPairs.C
+insertSurfaceNearPointPairs.C
+insertBoundaryConformPointPairs.C
+CV2DIO.C
+shortEdgeFilter2D.C
+cv2DMesh.C
+
+EXE = $(FOAM_APPBIN)/cv2DMesh
diff --git a/applications/utilities/mesh/generation/cv2DMesh/Make/options b/applications/utilities/mesh/generation/cv2DMesh/Make/options
new file mode 100755
index 0000000000000000000000000000000000000000..37c8ed4aeaebf4a61bb22f5c42f13d90f5f87629
--- /dev/null
+++ b/applications/utilities/mesh/generation/cv2DMesh/Make/options
@@ -0,0 +1,43 @@
+EXE_DEBUG = -DFULLDEBUG -g -O0
+EXE_FROUNDING_MATH = -frounding-math
+EXE_NDEBUG = -DNDEBUG
+
+include $(GENERAL_RULES)/CGAL
+FFLAGS = -DCGAL_FILES='"${CGAL_ARCH_PATH}/share/files"'
+
+EXE_INC = \
+    ${EXE_FROUNDING_MATH} \
+    ${EXE_NDEBUG} \
+    ${CGAL_INC} \
+    -I$(FOAM_APP)/utilities/mesh/generation/extrude2DMesh/extrude2DMesh/lnInclude \
+    -I../cvMesh/vectorTools \
+    -IconformalVoronoi2DMesh/lnInclude \
+    -I$(FOAM_APP)/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/lnInclude \
+    -I$(LIB_SRC)/parallel/decompose/decompositionMethods/lnInclude \
+    -I$(LIB_SRC)/finiteVolume/lnInclude \
+    -I$(LIB_SRC)/meshTools/lnInclude \
+    -I$(LIB_SRC)/surfMesh/lnInclude \
+    -I$(LIB_SRC)/edgeMesh/lnInclude \
+    -I$(LIB_SRC)/dynamicMesh/lnInclude \
+    -I$(LIB_SRC)/mesh/extrudeModel/lnInclude \
+    -I$(LIB_SRC)/sampling/lnInclude \
+    -I$(LIB_SRC)/triSurface/lnInclude \
+    -I$(LIB_SRC)/fileFormats/lnInclude \
+
+EXE_LIBS = \
+    $(CGAL_LIBS) \
+    -lboost_thread \
+    -lmpfr \
+    -lextrude2DMesh \
+    -lextrudeModel \
+    -lcv2DMesh \
+    -lconformalVoronoiMesh \
+    -lmeshTools \
+    -lsurfMesh \
+    -ledgeMesh \
+    -ltriSurface \
+    -ldynamicMesh \
+    -ldecompositionMethods \
+    -L$(FOAM_LIBBIN)/dummy -lptscotchDecomp \
+    -lsampling \
+    -lfileFormats
diff --git a/applications/utilities/mesh/generation/cv2DMesh/conformalVoronoi2DMesh/Make/files b/applications/utilities/mesh/generation/cv2DMesh/conformalVoronoi2DMesh/Make/files
new file mode 100755
index 0000000000000000000000000000000000000000..e35fec7b7139b6fe33ab9dfbbd570dc566db3150
--- /dev/null
+++ b/applications/utilities/mesh/generation/cv2DMesh/conformalVoronoi2DMesh/Make/files
@@ -0,0 +1,3 @@
+cv2DControls/cv2DControls.C
+
+LIB = $(FOAM_LIBBIN)/libcv2DMesh
\ No newline at end of file
diff --git a/applications/utilities/mesh/generation/cv2DMesh/conformalVoronoi2DMesh/Make/options b/applications/utilities/mesh/generation/cv2DMesh/conformalVoronoi2DMesh/Make/options
new file mode 100755
index 0000000000000000000000000000000000000000..79be6f3a7dd8fa81ba203d5ab8572c446c43a6c7
--- /dev/null
+++ b/applications/utilities/mesh/generation/cv2DMesh/conformalVoronoi2DMesh/Make/options
@@ -0,0 +1,3 @@
+EXE_INC =
+
+LIB_LIBS =
diff --git a/applications/utilities/mesh/generation/cv2DMesh/conformalVoronoi2DMesh/cv2DControls/cv2DControls.C b/applications/utilities/mesh/generation/cv2DMesh/conformalVoronoi2DMesh/cv2DControls/cv2DControls.C
new file mode 100644
index 0000000000000000000000000000000000000000..1ec4442e10f7ecf8bc1a704f880824ad459df496
--- /dev/null
+++ b/applications/utilities/mesh/generation/cv2DMesh/conformalVoronoi2DMesh/cv2DControls/cv2DControls.C
@@ -0,0 +1,154 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*----------------------------------------------------------------------------*/
+
+#include "cv2DControls.H"
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+
+Foam::cv2DControls::cv2DControls
+(
+    const dictionary& controlDict,
+    const boundBox& bb
+)
+:
+    dict_(controlDict),
+
+    motionControl_(controlDict.subDict("motionControl")),
+    conformationControl_(controlDict.subDict("surfaceConformation")),
+
+    minCellSize_(readScalar(motionControl_.lookup("minCellSize"))),
+    minCellSize2_(Foam::sqr(minCellSize_)),
+
+    maxQuadAngle_(readScalar(conformationControl_.lookup("maxQuadAngle"))),
+
+    nearWallAlignedDist_
+    (
+        readScalar(motionControl_.lookup("nearWallAlignedDist"))*minCellSize_
+    ),
+    nearWallAlignedDist2_(Foam::sqr(nearWallAlignedDist_)),
+
+    insertSurfaceNearestPointPairs_
+    (
+            conformationControl_.lookup("insertSurfaceNearestPointPairs")
+    ),
+    mirrorPoints_(conformationControl_.lookup("mirrorPoints")),
+    insertSurfaceNearPointPairs_
+    (
+        conformationControl_.lookup("insertSurfaceNearPointPairs")
+    ),
+
+    objOutput_(motionControl_.lookupOrDefault<Switch>("objOutput", false)),
+
+    meshedSurfaceOutput_
+    (
+        motionControl_.lookupOrDefault<Switch>("meshedSurfaceOutput", false)
+    ),
+
+    randomiseInitialGrid_(conformationControl_.lookup("randomiseInitialGrid")),
+    randomPerturbation_
+    (
+        readScalar(conformationControl_.lookup("randomPerturbation"))
+    ),
+
+    maxBoundaryConformingIter_
+    (
+        readLabel(conformationControl_.lookup("maxBoundaryConformingIter"))
+    ),
+
+    span_
+    (
+        max(mag(bb.max().x()), mag(bb.min().x()))
+      + max(mag(bb.max().y()), mag(bb.min().y()))
+    ),
+    span2_(Foam::sqr(span_)),
+
+    minEdgeLen_
+    (
+        readScalar(conformationControl_.lookup("minEdgeLenCoeff"))
+       *minCellSize_
+    ),
+    minEdgeLen2_(Foam::sqr(minEdgeLen_)),
+
+    maxNotchLen_
+    (
+        readScalar(conformationControl_.lookup("maxNotchLenCoeff"))
+       *minCellSize_
+    ),
+    maxNotchLen2_(Foam::sqr(maxNotchLen_)),
+
+    minNearPointDist_
+    (
+        readScalar(conformationControl_.lookup("minNearPointDistCoeff"))
+       *minCellSize_
+    ),
+    minNearPointDist2_(Foam::sqr(minNearPointDist_)),
+
+    ppDist_
+    (
+        readScalar(conformationControl_.lookup("pointPairDistanceCoeff"))
+       *minCellSize_
+    )
+{}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::cv2DControls::~cv2DControls()
+{}
+
+
+// * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * * //
+
+void Foam::cv2DControls::write(Ostream& os) const
+{
+    os.indentLevel() = 1;
+    os.precision(2);
+    os.flags(ios_base::scientific);
+
+    os << nl << "Outputting CV2D Mesher controls:" << nl
+       << token::BEGIN_BLOCK << nl
+       << indent << "minCellSize2_         : " << minCellSize2_ << nl
+       << indent << "span_ / span2_        : " << span_ << " / " << span2_ << nl
+       << indent << "maxNotchLen2_         : " << maxNotchLen2_ << nl
+       << indent << "minNearPointDist2_    : " << minNearPointDist2_ << nl
+       << indent << "nearWallAlignedDist2_ : " << nearWallAlignedDist2_ << nl
+       << indent << "ppDist_               : " << ppDist_ << nl
+       << indent << "minEdgeLen2_          : " << minEdgeLen2_ << nl
+       << token::END_BLOCK << endl;
+}
+
+
+// * * * * * * * * * * * * * * IOStream operators  * * * * * * * * * * * * * //
+
+Foam::Ostream& Foam::operator<<(Ostream& os, const cv2DControls& s)
+{
+    s.write(os);
+    return os;
+}
+
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cv2DMesh/conformalVoronoi2DMesh/cv2DControls/cv2DControls.H b/applications/utilities/mesh/generation/cv2DMesh/conformalVoronoi2DMesh/cv2DControls/cv2DControls.H
new file mode 100644
index 0000000000000000000000000000000000000000..fb357dd62dc28a30a5c98a0d82b93ed00d74c30e
--- /dev/null
+++ b/applications/utilities/mesh/generation/cv2DMesh/conformalVoronoi2DMesh/cv2DControls/cv2DControls.H
@@ -0,0 +1,260 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::cv2DControls
+
+Description
+    Controls for the 2D CV mesh generator.
+
+SourceFiles
+    cv2DControls.C
+    cv2DControlsI.H
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef cv2DControls_H
+#define cv2DControls_H
+
+#include "Switch.H"
+#include "dictionary.H"
+#include "boundBox.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                        Class cv2DControls Declaration
+\*---------------------------------------------------------------------------*/
+
+class cv2DControls
+{
+    // Private data
+
+        //- Description of data_
+        const dictionary& dict_;
+
+        const dictionary& motionControl_;
+
+        const dictionary& conformationControl_;
+
+
+    // Private Member Functions
+
+        //- Disallow default bitwise copy construct
+        cv2DControls(const cv2DControls&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const cv2DControls&);
+
+
+public:
+
+        // Controls
+
+            //- Minimum cell size below which protusions through the surface are
+            //  not split
+            scalar minCellSize_;
+
+            //- Square of minCellSize
+            scalar minCellSize2_;
+
+            //- Maximum quadrant angle allowed at a concave corner before
+            //  additional "mitering" lines are added
+            scalar maxQuadAngle_;
+
+            //- Near-wall region where cells are aligned with the wall
+            scalar nearWallAlignedDist_;
+
+            //- Square of nearWallAlignedDist
+            scalar nearWallAlignedDist2_;
+
+            //- Insert near-boundary point mirror or point-pairs
+            Switch insertSurfaceNearestPointPairs_;
+
+            //- Mirror near-boundary points rather than insert point-pairs
+            Switch mirrorPoints_;
+
+            //- Insert point-pairs vor dual-cell vertices very near the surface
+            Switch insertSurfaceNearPointPairs_;
+
+            Switch objOutput_;
+
+            Switch meshedSurfaceOutput_;
+
+            Switch randomiseInitialGrid_;
+
+            scalar randomPerturbation_;
+
+            label maxBoundaryConformingIter_;
+
+
+        // Tolerances
+
+            //- Maximum cartesian span of the geometry
+            scalar span_;
+
+            //- Square of span
+            scalar span2_;
+
+            //- Minumum edge-length of the cell size below which protusions
+            //  through the surface are not split
+            scalar minEdgeLen_;
+
+            //- Square of minEdgeLen
+            scalar minEdgeLen2_;
+
+            //- Maximum notch size below which protusions into the surface are
+            //  not filled
+            scalar maxNotchLen_;
+
+            //- Square of maxNotchLen
+            scalar maxNotchLen2_;
+
+            //- The minimum distance alowed between a dual-cell vertex
+            // and the surface before a point-pair is introduced
+            scalar minNearPointDist_;
+
+            //- Square of minNearPoint
+            scalar minNearPointDist2_;
+
+            //- Distance between boundary conforming point-pairs
+            scalar ppDist_;
+
+            //- Square of ppDist
+            scalar ppDist2_;
+
+
+    // Constructors
+
+        cv2DControls
+        (
+            const dictionary& controlDict,
+            const boundBox& bb
+        );
+
+
+    //- Destructor
+    ~cv2DControls();
+
+
+    // Member Functions
+
+        // Access
+
+            //- Return the minimum cell size
+            inline scalar minCellSize() const;
+
+            //- Return the square of the minimum cell size
+            inline scalar minCellSize2() const;
+
+            //- Return the maximum quadrant angle
+            inline scalar maxQuadAngle() const;
+
+            //- Return number of layers to align with the nearest wall
+            inline scalar nearWallAlignedDist() const;
+
+            //- Return square of nearWallAlignedDist
+            inline scalar nearWallAlignedDist2() const;
+
+            //- Return insertSurfaceNearestPointPairs Switch
+            inline Switch insertSurfaceNearestPointPairs() const;
+
+            //- Return mirrorPoints Switch
+            inline Switch mirrorPoints() const;
+
+            //- Return insertSurfaceNearPointPairs Switch
+            inline Switch insertSurfaceNearPointPairs() const;
+
+            //- Return the objOutput Switch
+            inline Switch objOutput() const;
+
+            //- Return the meshedSurfaceOutput Switch
+            inline Switch meshedSurfaceOutput() const;
+
+            //- Return the randomise initial point layout Switch
+            inline Switch randomiseInitialGrid() const;
+
+            //- Return the random perturbation factor
+            inline scalar randomPerturbation() const;
+
+            //- Return the maximum number of boundary conformation iterations
+            inline label maxBoundaryConformingIter() const;
+
+            //- Return the span
+            inline scalar span() const;
+
+            //- Return the span squared
+            inline scalar span2() const;
+
+            //- Return the minEdgeLen
+            inline scalar minEdgeLen() const;
+
+            //- Return the minEdgeLen squared
+            inline scalar minEdgeLen2() const;
+
+            //- Return the maxNotchLen
+            inline scalar maxNotchLen() const;
+
+            //- Return the maxNotchLen squared
+            inline scalar maxNotchLen2() const;
+
+            //- Return the minNearPointDist
+            inline scalar minNearPointDist() const;
+
+            //- Return the minNearPointDist squared
+            inline scalar minNearPointDist2() const;
+
+            //- Return the ppDist
+            inline scalar ppDist() const;
+
+
+        // Write
+
+            //- Write controls to output stream.
+            void write(Ostream& os) const;
+
+            //- Ostream Operator
+            friend Ostream& operator<<
+            (
+                Ostream& os,
+                const cv2DControls& s
+            );
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#include "cv2DControlsI.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cv2DMesh/conformalVoronoi2DMesh/cv2DControls/cv2DControlsI.H b/applications/utilities/mesh/generation/cv2DMesh/conformalVoronoi2DMesh/cv2DControls/cv2DControlsI.H
new file mode 100644
index 0000000000000000000000000000000000000000..dd745a7875f14903ccfb4a685517eb565b979191
--- /dev/null
+++ b/applications/utilities/mesh/generation/cv2DMesh/conformalVoronoi2DMesh/cv2DControls/cv2DControlsI.H
@@ -0,0 +1,158 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+inline Foam::scalar Foam::cv2DControls::minCellSize() const
+{
+    return minCellSize_;
+}
+
+
+inline Foam::scalar Foam::cv2DControls::minCellSize2() const
+{
+    return minCellSize2_;
+}
+
+
+inline Foam::scalar Foam::cv2DControls::maxQuadAngle() const
+{
+    return maxQuadAngle_;
+}
+
+
+inline Foam::scalar Foam::cv2DControls::nearWallAlignedDist() const
+{
+    return nearWallAlignedDist_;
+}
+
+
+inline Foam::scalar Foam::cv2DControls::nearWallAlignedDist2() const
+{
+    return nearWallAlignedDist2_;
+}
+
+
+inline Foam::Switch Foam::cv2DControls::insertSurfaceNearestPointPairs() const
+{
+    return insertSurfaceNearestPointPairs_;
+}
+
+
+inline Foam::Switch Foam::cv2DControls::mirrorPoints() const
+{
+    return mirrorPoints_;
+}
+
+
+inline Foam::Switch Foam::cv2DControls::insertSurfaceNearPointPairs() const
+{
+    return insertSurfaceNearPointPairs_;
+}
+
+
+inline Foam::Switch Foam::cv2DControls::objOutput() const
+{
+    return objOutput_;
+}
+
+
+inline Foam::Switch Foam::cv2DControls::meshedSurfaceOutput() const
+{
+    return meshedSurfaceOutput_;
+}
+
+
+inline Foam::Switch Foam::cv2DControls::randomiseInitialGrid() const
+{
+    return randomiseInitialGrid_;
+}
+
+
+inline Foam::scalar Foam::cv2DControls::randomPerturbation() const
+{
+    return randomPerturbation_;
+}
+
+
+inline Foam::label Foam::cv2DControls::maxBoundaryConformingIter() const
+{
+    return maxBoundaryConformingIter_;
+}
+
+
+inline Foam::scalar Foam::cv2DControls::span() const
+{
+    return span_;
+}
+
+
+inline Foam::scalar Foam::cv2DControls::span2() const
+{
+    return span2_;
+}
+
+
+inline Foam::scalar Foam::cv2DControls::minEdgeLen() const
+{
+    return minEdgeLen_;
+}
+
+
+inline Foam::scalar Foam::cv2DControls::minEdgeLen2() const
+{
+    return minEdgeLen2_;
+}
+
+
+inline Foam::scalar Foam::cv2DControls::maxNotchLen() const
+{
+    return maxNotchLen_;
+}
+
+
+inline Foam::scalar Foam::cv2DControls::maxNotchLen2() const
+{
+    return maxNotchLen2_;
+}
+
+
+inline Foam::scalar Foam::cv2DControls::minNearPointDist() const
+{
+    return minNearPointDist_;
+}
+
+
+inline Foam::scalar Foam::cv2DControls::minNearPointDist2() const
+{
+    return minNearPointDist2_;
+}
+
+
+inline Foam::scalar Foam::cv2DControls::ppDist() const
+{
+    return ppDist_;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cv2DMesh/cv2DMesh.C b/applications/utilities/mesh/generation/cv2DMesh/cv2DMesh.C
new file mode 100644
index 0000000000000000000000000000000000000000..e44a249f2825043587f387d8410171c9720a065d
--- /dev/null
+++ b/applications/utilities/mesh/generation/cv2DMesh/cv2DMesh.C
@@ -0,0 +1,230 @@
+/*---------------------------------------------------------------------------*\
+ =========                   |
+ \\      /   F ield          | OpenFOAM: The Open Source CFD Toolbox
+  \\    /    O peration      |
+   \\  /     A nd            | Copyright (C) 2013 OpenFOAM Foundation
+    \\/      M anipulation   |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Application
+    cv2DMesh
+
+Description
+    Conformal-Voronoi 2D extruding automatic mesher with grid or read
+    initial points and point position relaxation with optional
+    "squarification".
+
+\*---------------------------------------------------------------------------*/
+
+#include "CV2D.H"
+#include "argList.H"
+
+#include "MeshedSurfaces.H"
+#include "shortEdgeFilter2D.H"
+#include "extrude2DMesh.H"
+#include "polyMesh.H"
+#include "patchToPoly2DMesh.H"
+#include "extrudeModel.H"
+#include "polyTopoChange.H"
+#include "edgeCollapser.H"
+#include "globalIndex.H"
+
+using namespace Foam;
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+int main(int argc, char *argv[])
+{
+    argList::noParallel();
+    argList::validArgs.clear();
+    argList::validOptions.insert
+    (
+        "pointsFile",
+        "filename"
+    );
+
+    #include "addOverwriteOption.H"
+
+    #include "setRootCase.H"
+    #include "createTime.H"
+
+    // Read control dictionary
+    // ~~~~~~~~~~~~~~~~~~~~~~~
+    IOdictionary controlDict
+    (
+        IOobject
+        (
+            args.executable() + "Dict",
+            runTime.system(),
+            runTime,
+            IOobject::MUST_READ_IF_MODIFIED,
+            IOobject::NO_WRITE
+        )
+    );
+
+    const dictionary& shortEdgeFilterDict
+    (
+        controlDict.subDict("shortEdgeFilter")
+    );
+    const dictionary& extrusionDict(controlDict.subDict("extrusion"));
+
+    Switch extrude(extrusionDict.lookup("extrude"));
+    const bool overwrite = args.optionFound("overwrite");
+
+    // Read and triangulation
+    // ~~~~~~~~~~~~~~~~~~~~~~
+    CV2D mesh(runTime, controlDict);
+
+    if (args.options().found("pointsFile"))
+    {
+        fileName pointFileName(IStringStream(args.options()["pointsFile"])());
+        mesh.insertPoints(pointFileName);
+    }
+    else
+    {
+        mesh.insertGrid();
+    }
+
+    mesh.insertSurfacePointPairs();
+    mesh.boundaryConform();
+
+    while (runTime.loop())
+    {
+        Info<< nl << "Time = " << runTime.timeName() << endl;
+
+        mesh.newPoints();
+    }
+
+    mesh.write();
+
+    Info<< "Finished Delaunay in = " << runTime.cpuTimeIncrement() << " s."
+        << endl;
+
+    Info<< "Begin filtering short edges:" << endl;
+    shortEdgeFilter2D sef(mesh, shortEdgeFilterDict);
+
+    sef.filter();
+
+    Info<< "Meshed surface after edge filtering :" << endl;
+    sef.fMesh().writeStats(Info);
+
+    if (mesh.meshControls().meshedSurfaceOutput())
+    {
+        Info<< "Write .obj file of the 2D mesh: MeshedSurface.obj" << endl;
+        sef.fMesh().write("MeshedSurface.obj");
+    }
+
+    Info<< "Finished filtering in = " << runTime.cpuTimeIncrement() << " s."
+        << endl;
+
+    Info<< "Begin constructing a polyMesh:" << endl;
+
+    patchToPoly2DMesh poly2DMesh
+    (
+        sef.fMesh(),
+        sef.patchNames(),
+        sef.patchSizes(),
+        sef.mapEdgesRegion()
+    );
+
+    poly2DMesh.createMesh();
+
+    polyMesh pMesh
+    (
+        IOobject
+        (
+            polyMesh::defaultRegion,
+            runTime.constant(),
+            runTime,
+            IOobject::NO_READ,
+            IOobject::NO_WRITE,
+            false
+        ),
+        xferMove(poly2DMesh.points()),
+        xferMove(poly2DMesh.faces()),
+        xferMove(poly2DMesh.owner()),
+        xferMove(poly2DMesh.neighbour())
+    );
+
+    Info<< "Constructing patches." << endl;
+    List<polyPatch*> patches(poly2DMesh.patchNames().size());
+    label countPatches = 0;
+
+    forAll(patches, patchI)
+    {
+        if (poly2DMesh.patchSizes()[patchI] != 0)
+        {
+            patches[countPatches] = new polyPatch
+            (
+                poly2DMesh.patchNames()[patchI],
+                poly2DMesh.patchSizes()[patchI],
+                poly2DMesh.patchStarts()[patchI],
+                countPatches,
+                pMesh.boundaryMesh(),
+                word::null
+            );
+
+            countPatches++;
+        }
+    }
+    patches.setSize(countPatches);
+    pMesh.addPatches(patches);
+
+    if (extrude)
+    {
+        Info<< "Begin extruding the polyMesh:" << endl;
+
+        {
+            // Point generator
+            autoPtr<extrudeModel> model(extrudeModel::New(extrusionDict));
+
+            extrude2DMesh extruder(pMesh, extrusionDict, model());
+
+            extruder.addFrontBackPatches();
+
+            polyTopoChange meshMod(pMesh.boundaryMesh().size());
+
+            extruder.setRefinement(meshMod);
+
+            autoPtr<mapPolyMesh> morphMap = meshMod.changeMesh(pMesh, false);
+
+            pMesh.updateMesh(morphMap);
+        }
+    }
+
+    if (!overwrite)
+    {
+        runTime++;
+    }
+    else
+    {
+        pMesh.setInstance("constant");
+    }
+
+    pMesh.write();
+
+    Info<< "Finished extruding in = "
+        << runTime.cpuTimeIncrement() << " s." << endl;
+
+    Info<< nl << "End\n" << endl;
+
+    return 0;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cv2DMesh/cv2DMeshDict b/applications/utilities/mesh/generation/cv2DMesh/cv2DMeshDict
new file mode 100644
index 0000000000000000000000000000000000000000..0ef6d2a0c4794677e257056a9a23d3b1e59975d2
--- /dev/null
+++ b/applications/utilities/mesh/generation/cv2DMesh/cv2DMeshDict
@@ -0,0 +1,208 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+
+FoamFile
+{
+    version         2.0;
+    format          ascii;
+
+    root            "";
+    case            "";
+    instance        "";
+    local           "";
+
+    class           dictionary;
+    object          cv2DMeshDict;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+
+geometry
+{
+    laurence_clean_preciser.stl
+    {
+        name laurence_clean_preciser;
+        type closedTriSurfaceMesh;
+        //type triSurfaceMesh;
+    }
+//    refinementBox
+//    {
+//        type searchableBox;
+//        min (-0.5 0.35 -1000);
+//        max (-0.5 0.35 1000);
+//    }
+//    refinementSphere
+//    {
+//        type searchableSphere;
+//        centre (0.85 0.4 0.0);
+//        radius 0.01;
+//    }
+}
+
+surfaceConformation
+{
+    locationInMesh (-2.8 0.7 0.5);
+
+    pointPairDistanceCoeff    0.005;
+
+    minEdgeLenCoeff           0.005;
+
+    maxNotchLenCoeff          0.003;
+
+    minNearPointDistCoeff     0.0025;
+
+    maxQuadAngle 125;
+
+    // Insert near-boundary point mirror or point-pairs
+    insertSurfaceNearestPointPairs yes;
+
+    // Mirror near-boundary points rather than insert point-pairs
+    mirrorPoints   no;
+
+    // Insert point-pairs vor dual-cell vertices very near the surface
+    insertSurfaceNearPointPairs yes;
+
+    // Maximum number of iterations used in boundaryConform.
+    maxBoundaryConformingIter 5;
+
+    geometryToConformTo
+    {
+        laurence_clean_preciser
+        {
+            featureMethod extendedFeatureEdgeMesh;
+            extendedFeatureEdgeMesh "laurence_clean_preciser.extendedFeatureEdgeMesh";
+        }
+    }
+
+    additionalFeatures
+    {
+    }
+
+    // Choose if to randomise the initial grid created by insertGrid.
+    randomiseInitialGrid yes;
+
+    // Perturbation fraction, 1 = cell-size.
+    randomPerturbation   0.1;
+
+}
+
+
+motionControl
+{
+    defaultCellSize     0.05;
+
+    // Assign a priority to all requests for cell sizes, the highest overrules.
+    defaultPriority     0;
+
+    cellSizeControlGeometry
+    {
+        laurence_clean_preciser
+        {
+            priority              1;
+            mode                  bothSides;
+            cellSizeFunction      linearDistance;
+            linearDistanceCoeffs
+            {
+                distanceCellSize  0.05;
+                surfaceCellSize   0.01;
+                distance          0.5;
+            }
+            uniformCoeffs
+            {
+                cellSize          0.01;
+            }
+        }
+//        refinementBox
+//        {
+//            priority            1;
+//            mode                outside;
+//            cellSizeFunction    linearDistance;
+//            linearDistanceCoeffs
+//            {
+//                distanceCellSize 0.04;
+//                surfaceCellSize 0.005;
+//                distance        0.2;
+//            }
+//        }
+//        refinementSphere
+//        {
+//            priority            1;
+//            mode                outside;
+//            cellSizeFunction    linearDistance;
+//            linearDistanceCoeffs
+//            {
+//                distanceCellSize 0.04;
+//                surfaceCellSize 0.005;
+//                distance        0.2;
+//            }
+//        }
+    }
+
+    relaxationModel     adaptiveLinear;
+
+    adaptiveLinearCoeffs
+    {
+        relaxationStart 0.5;
+        relaxationEnd   0.0;
+    }
+
+    objOutput                   no;
+
+    // Near-wall region where cells are aligned with the wall specified as a number
+    // of cell layers
+    nearWallAlignedDist 3;
+
+}
+
+shortEdgeFilter
+{
+    // Factor to multiply the average of a face's edge lengths by.
+    // If an edge of that face is smaller than that value then delete it.
+    shortEdgeFilterFactor     0.2;
+
+    // Weighting for the lengths of edges that are attached to the boundaries.
+    // Used when calculating the length of an edge. Default 2.0.
+    edgeAttachedToBoundaryFactor 2.0;
+}
+
+extrusion
+{
+    extrude         on;
+
+    extrudeModel        linearDirection;
+    //extrudeModel        wedge;
+
+    patchInfo
+    {
+        //type empty;
+        //startFace
+    }
+
+    patchType           empty;
+    //patchType           wedge;
+
+    nLayers             1;
+
+    expansionRatio      1.0;    //0.9;
+
+    linearDirectionCoeffs
+    {
+        direction       (0 0 1);
+        thickness       0.1;
+    }
+
+    wedgeCoeffs
+    {
+        axisPt      (0 0 0);
+        axis        (1 0 0);
+        angle       10;
+    }
+
+    thickness       0.1;
+}
diff --git a/applications/utilities/mesh/generation/cv2DMesh/indexedFace.H b/applications/utilities/mesh/generation/cv2DMesh/indexedFace.H
new file mode 100644
index 0000000000000000000000000000000000000000..0c30fcc952cc84f0894e7eb1476f0be0cf113ed3
--- /dev/null
+++ b/applications/utilities/mesh/generation/cv2DMesh/indexedFace.H
@@ -0,0 +1,135 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    indexedFace
+
+Description
+    An indexed form of CGAL::Triangulation_face_base_2<K> used to keep
+    track of the vertices in the triangulation.
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef indexedFace_H
+#define indexedFace_H
+
+#include <CGAL/Triangulation_2.h>
+#include "indexedVertex.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace CGAL
+{
+
+/*---------------------------------------------------------------------------*\
+                       Class indexedFace Declaration
+\*---------------------------------------------------------------------------*/
+
+template<class Gt, class Fb=CGAL::Triangulation_face_base_2<Gt> >
+class indexedFace
+:
+    public Fb
+{
+    // Private data
+
+        //- The index for this triangle face
+        //  -1: triangle and changed and associated data needs updating
+        // >=0: index of triangles, set by external update algorithm
+        int index_;
+
+
+public:
+
+    enum faceTypes
+    {
+        UNCHANGED           = 0,
+        CHANGED             = -1,
+        SAVE_CHANGED        = -2
+    };
+
+    typedef typename Fb::Vertex_handle                   Vertex_handle;
+    typedef typename Fb::Face_handle                     Face_handle;
+
+    template < typename TDS2 >
+    struct Rebind_TDS
+    {
+        typedef typename Fb::template Rebind_TDS<TDS2>::Other Fb2;
+        typedef indexedFace<Gt, Fb2>  Other;
+    };
+
+
+    // Constructors
+
+        inline indexedFace();
+
+        inline indexedFace
+        (
+            Vertex_handle v0,
+            Vertex_handle v1,
+            Vertex_handle v2
+        );
+
+        inline indexedFace
+        (
+            Vertex_handle v0,
+            Vertex_handle v1,
+            Vertex_handle v2,
+            Face_handle n0,
+            Face_handle n1,
+            Face_handle n2
+        );
+
+
+    // Member Functions
+
+        inline void set_vertex(int i, Vertex_handle v);
+
+        inline void set_vertices();
+
+        inline void set_vertices
+        (
+            Vertex_handle v0,
+            Vertex_handle v1,
+            Vertex_handle v2
+        );
+
+        inline int& faceIndex();
+
+        inline int faceIndex() const;
+
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace CGAL
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#include "indexedFaceI.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cv2DMesh/indexedFaceI.H b/applications/utilities/mesh/generation/cv2DMesh/indexedFaceI.H
new file mode 100644
index 0000000000000000000000000000000000000000..367cf944333a301593995a00dceb77ac61cac60a
--- /dev/null
+++ b/applications/utilities/mesh/generation/cv2DMesh/indexedFaceI.H
@@ -0,0 +1,110 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+template<class Gt, class Fb>
+inline CGAL::indexedFace<Gt, Fb>::indexedFace()
+:
+    Fb(),
+    index_(CHANGED)
+{}
+
+
+template<class Gt, class Fb>
+inline CGAL::indexedFace<Gt, Fb>::indexedFace
+(
+    Vertex_handle v0,
+    Vertex_handle v1,
+    Vertex_handle v2
+)
+:
+    Fb(v0, v1, v2),
+    index_(CHANGED)
+{}
+
+
+template<class Gt, class Fb>
+inline CGAL::indexedFace<Gt, Fb>::indexedFace
+(
+    Vertex_handle v0,
+    Vertex_handle v1,
+    Vertex_handle v2,
+    Face_handle n0,
+    Face_handle n1,
+    Face_handle n2
+)
+:
+    Fb(v0, v1, v2, n0, n1, n2),
+    index_(CHANGED)
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+template<class Gt, class Fb>
+inline void CGAL::indexedFace<Gt, Fb>::set_vertex(int i, Vertex_handle v)
+{
+    index_ = CHANGED;
+    Fb::set_vertex(i, v);
+}
+
+
+template<class Gt, class Fb>
+inline void CGAL::indexedFace<Gt, Fb>::set_vertices()
+{
+    index_ = CHANGED;
+    Fb::set_vertices();
+}
+
+
+template<class Gt, class Fb>
+inline void CGAL::indexedFace<Gt, Fb>::set_vertices
+(
+    Vertex_handle v0,
+    Vertex_handle v1,
+    Vertex_handle v2
+)
+{
+    index_ = CHANGED;
+    Fb::set_vertices(v0, v1, v2);
+}
+
+
+template<class Gt, class Fb>
+inline int& CGAL::indexedFace<Gt, Fb>::faceIndex()
+{
+    return index_;
+}
+
+
+template<class Gt, class Fb>
+inline int CGAL::indexedFace<Gt, Fb>::faceIndex() const
+{
+    return index_;
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/applications/utilities/mesh/generation/cv2DMesh/indexedVertex.H b/applications/utilities/mesh/generation/cv2DMesh/indexedVertex.H
new file mode 100644
index 0000000000000000000000000000000000000000..ae58a0bfe5c2610f4a2651442df081e09a53fcab
--- /dev/null
+++ b/applications/utilities/mesh/generation/cv2DMesh/indexedVertex.H
@@ -0,0 +1,210 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    indexedVertex
+
+Description
+    An indexed form of CGAL::Triangulation_vertex_base_2<K> used to keep
+    track of the vertices in the triangulation.
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef indexedVertex_H
+#define indexedVertex_H
+
+#include <CGAL/Triangulation_2.h>
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace CGAL
+{
+
+// Forward declaration of friend functions and operators
+
+template<class Gt, class Vb>
+class indexedVertex;
+
+template<class Gt, class Vb>
+bool pointPair
+(
+    const indexedVertex<Gt, Vb>& v0,
+    const indexedVertex<Gt, Vb>& v1
+);
+
+template<class Gt, class Vb>
+bool boundaryTriangle
+(
+    const indexedVertex<Gt, Vb>& v0,
+    const indexedVertex<Gt, Vb>& v1,
+    const indexedVertex<Gt, Vb>& v2
+);
+
+template<class Gt, class Vb>
+bool outsideTriangle
+(
+    const indexedVertex<Gt, Vb>& v0,
+    const indexedVertex<Gt, Vb>& v1,
+    const indexedVertex<Gt, Vb>& v2
+);
+
+/*---------------------------------------------------------------------------*\
+                       Class indexedVertex Declaration
+\*---------------------------------------------------------------------------*/
+
+template<class Gt, class Vb=CGAL::Triangulation_vertex_base_2<Gt> >
+class indexedVertex
+:
+    public Vb
+{
+    // Private data
+
+        //- The index for this triangle vertex
+        int index_;
+
+        //- Index of pair-point :
+        //  NEAR_BOUNDARY_POINT : internal near boundary point.
+        //  INTERNAL_POINT      : internal point.
+        //  FAR_POINT           : far-point.
+        //  >= 0                : part of point-pair. Index of other point.
+        //                        Lowest numbered is inside one (master).
+        int type_;
+
+
+public:
+
+    enum pointTypes
+    {
+        NEAR_BOUNDARY_POINT = -4,
+        INTERNAL_POINT      = -3,
+        MIRROR_POINT        = -2,
+        FAR_POINT           = -1
+    };
+
+    typedef typename Vb::Vertex_handle      Vertex_handle;
+    typedef typename Vb::Face_handle        Face_handle;
+    typedef typename Vb::Point              Point;
+
+    template<typename TDS2>
+    struct Rebind_TDS
+    {
+        typedef typename Vb::template Rebind_TDS<TDS2>::Other    Vb2;
+        typedef indexedVertex<Gt,Vb2>                           Other;
+    };
+
+
+    // Constructors
+
+        inline indexedVertex();
+
+        inline indexedVertex(const Point& p);
+
+        inline indexedVertex(const Point& p, const int index, const int& type);
+
+        inline indexedVertex(const Point& p, Face_handle f);
+
+        inline indexedVertex(Face_handle f);
+
+
+    // Member Functions
+
+        inline int& index();
+
+        inline int index() const;
+
+        inline int& type();
+
+        inline int type() const;
+
+        //- Is point a far-point
+        inline bool farPoint() const;
+
+        //- Is point internal, i.e. not on boundary
+        inline bool internalPoint() const;
+
+        //- Is point internal and near the boundary
+        inline bool nearBoundary() const;
+
+        //- Set the point to be near the boundary
+        inline void setNearBoundary();
+
+        //- Is point a mirror point
+        inline bool mirrorPoint() const;
+
+        //- Either master or slave of pointPair.
+        inline bool pairPoint() const;
+
+        //- Master of a pointPair is the lowest numbered one.
+        inline bool ppMaster() const;
+
+        //- Slave of a pointPair is the highest numbered one.
+        inline bool ppSlave() const;
+
+        //- Either original internal point or master of pointPair.
+        inline bool internalOrBoundaryPoint() const;
+
+        //- Is point near the boundary or part of the boundary definition
+        inline bool nearOrOnBoundary() const;
+
+
+    // Friend Functions
+
+        //- Do the two given vertices consitute a boundary point-pair
+        friend bool pointPair <Gt, Vb>
+        (
+            const indexedVertex<Gt, Vb>& v0,
+            const indexedVertex<Gt, Vb>& v1
+        );
+
+        //- Do the three given vertices consitute a boundary triangle
+        friend bool boundaryTriangle <Gt, Vb>
+        (
+            const indexedVertex<Gt, Vb>& v0,
+            const indexedVertex<Gt, Vb>& v1,
+            const indexedVertex<Gt, Vb>& v2
+        );
+
+        //- Do the three given vertices consitute an outside triangle
+        friend bool outsideTriangle <Gt, Vb>
+        (
+            const indexedVertex<Gt, Vb>& v0,
+            const indexedVertex<Gt, Vb>& v1,
+            const indexedVertex<Gt, Vb>& v2
+        );
+
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace CGAL
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#include "indexedVertexI.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cv2DMesh/indexedVertexI.H b/applications/utilities/mesh/generation/cv2DMesh/indexedVertexI.H
new file mode 100644
index 0000000000000000000000000000000000000000..2d6280274f573b519ee51e034f3b7f7e767321c1
--- /dev/null
+++ b/applications/utilities/mesh/generation/cv2DMesh/indexedVertexI.H
@@ -0,0 +1,233 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+template<class Gt, class Vb>
+inline CGAL::indexedVertex<Gt, Vb>::indexedVertex()
+:
+    Vb(),
+    index_(INTERNAL_POINT),
+    type_(INTERNAL_POINT)
+{}
+
+
+template<class Gt, class Vb>
+inline CGAL::indexedVertex<Gt, Vb>::indexedVertex(const Point& p)
+:
+    Vb(p),
+    index_(INTERNAL_POINT),
+    type_(INTERNAL_POINT)
+{}
+
+
+template<class Gt, class Vb>
+inline CGAL::indexedVertex<Gt, Vb>::indexedVertex
+(
+    const Point& p,
+    const int index,
+    const int& type
+)
+:
+    Vb(p),
+    index_(index),
+    type_(type)
+{}
+
+
+template<class Gt, class Vb>
+inline CGAL::indexedVertex<Gt, Vb>::indexedVertex(const Point& p, Face_handle f)
+:
+    Vb(f, p),
+    index_(INTERNAL_POINT),
+    type_(INTERNAL_POINT)
+{}
+
+
+template<class Gt, class Vb>
+inline CGAL::indexedVertex<Gt, Vb>::indexedVertex(Face_handle f)
+:
+    Vb(f),
+    index_(INTERNAL_POINT),
+    type_(INTERNAL_POINT)
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+template<class Gt, class Vb>
+inline int& CGAL::indexedVertex<Gt, Vb>::index()
+{
+    return index_;
+}
+
+
+template<class Gt, class Vb>
+inline int CGAL::indexedVertex<Gt, Vb>::index() const
+{
+    return index_;
+}
+
+
+template<class Gt, class Vb>
+inline int& CGAL::indexedVertex<Gt, Vb>::type()
+{
+    return type_;
+}
+
+
+template<class Gt, class Vb>
+inline int CGAL::indexedVertex<Gt, Vb>::type() const
+{
+    return type_;
+}
+
+
+template<class Gt, class Vb>
+inline bool CGAL::indexedVertex<Gt, Vb>::farPoint() const
+{
+    return type_ == FAR_POINT;
+}
+
+
+template<class Gt, class Vb>
+inline bool CGAL::indexedVertex<Gt, Vb>::internalPoint() const
+{
+    return type_ <= INTERNAL_POINT;
+}
+
+
+template<class Gt, class Vb>
+inline bool CGAL::indexedVertex<Gt, Vb>::nearBoundary() const
+{
+    return type_ == NEAR_BOUNDARY_POINT;
+}
+
+
+template<class Gt, class Vb>
+inline void CGAL::indexedVertex<Gt, Vb>::setNearBoundary()
+{
+    type_ = NEAR_BOUNDARY_POINT;
+}
+
+
+template<class Gt, class Vb>
+inline bool CGAL::indexedVertex<Gt, Vb>::mirrorPoint() const
+{
+    return type_ == MIRROR_POINT;
+}
+
+
+template<class Gt, class Vb>
+inline bool CGAL::indexedVertex<Gt, Vb>::pairPoint() const
+{
+    return type_ >= 0;
+}
+
+
+template<class Gt, class Vb>
+inline bool CGAL::indexedVertex<Gt, Vb>::ppMaster() const
+{
+    if (type_ > index_)
+    {
+        return true;
+    }
+    else
+    {
+        return false;
+    }
+}
+
+
+template<class Gt, class Vb>
+inline bool CGAL::indexedVertex<Gt, Vb>::ppSlave() const
+{
+    if (type_ >= 0 && type_ < index_)
+    {
+        return true;
+    }
+    else
+    {
+        return false;
+    }
+}
+
+
+template<class Gt, class Vb>
+inline bool CGAL::indexedVertex<Gt, Vb>::internalOrBoundaryPoint() const
+{
+    return internalPoint() || ppMaster();
+}
+
+
+template<class Gt, class Vb>
+inline bool CGAL::indexedVertex<Gt, Vb>::nearOrOnBoundary() const
+{
+    return pairPoint() || mirrorPoint() || nearBoundary();
+}
+
+
+// * * * * * * * * * * * * * * * Friend Functions  * * * * * * * * * * * * * //
+
+template<class Gt, class Vb>
+bool CGAL::pointPair
+(
+    const indexedVertex<Gt, Vb>& v0,
+    const indexedVertex<Gt, Vb>& v1
+)
+{
+    return v0.index_ == v1.type_ || v1.index_ == v0.type_;
+}
+
+
+template<class Gt, class Vb>
+bool CGAL::boundaryTriangle
+(
+    const indexedVertex<Gt, Vb>& v0,
+    const indexedVertex<Gt, Vb>& v1,
+    const indexedVertex<Gt, Vb>& v2
+)
+{
+    return (v0.pairPoint() && pointPair(v1, v2))
+        || (v1.pairPoint() && pointPair(v2, v0))
+        || (v2.pairPoint() && pointPair(v0, v1));
+}
+
+
+template<class Gt, class Vb>
+bool CGAL::outsideTriangle
+(
+    const indexedVertex<Gt, Vb>& v0,
+    const indexedVertex<Gt, Vb>& v1,
+    const indexedVertex<Gt, Vb>& v2
+)
+{
+    return (v0.farPoint() || v0.ppSlave())
+        || (v1.farPoint() || v1.ppSlave())
+        || (v2.farPoint() || v2.ppSlave());
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/applications/utilities/mesh/generation/cv2DMesh/insertBoundaryConformPointPairs.C b/applications/utilities/mesh/generation/cv2DMesh/insertBoundaryConformPointPairs.C
new file mode 100644
index 0000000000000000000000000000000000000000..7db9f2dae4661c09895c0960613c56d92d6560f1
--- /dev/null
+++ b/applications/utilities/mesh/generation/cv2DMesh/insertBoundaryConformPointPairs.C
@@ -0,0 +1,323 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*----------------------------------------------------------------------------*/
+
+#include "CV2D.H"
+
+// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
+
+void Foam::CV2D::insertPointPair
+(
+    Triangulation::Finite_vertices_iterator& vit,
+    const point2D& p,
+    const label trii,
+    const label hitSurface
+)
+{
+    if
+    (
+        !meshControls().mirrorPoints()
+     || !insertMirrorPoint(toPoint2D(vit->point()), p)
+    )
+    {
+        pointIndexHit pHit
+        (
+            true,
+            toPoint3D(p),
+            trii
+        );
+
+        vectorField norm(1);
+        qSurf_.geometry()[hitSurface].getNormal
+        (
+            List<pointIndexHit>(1, pHit),
+            norm
+        );
+
+        insertPointPair
+        (
+            meshControls().ppDist(),
+            p,
+            toPoint2D(norm[0])
+        );
+    }
+
+    vit = Triangulation::Finite_vertices_iterator
+    (
+        CGAL::Filter_iterator
+        <
+            Triangulation::All_vertices_iterator,
+            Triangulation::Infinite_tester
+        >(finite_vertices_end(), vit.predicate(), vit.base())
+    );
+}
+
+
+bool Foam::CV2D::insertPointPairAtIntersection
+(
+    Triangulation::Finite_vertices_iterator& vit,
+    const point2D& defVert,
+    const point2D vertices[],
+    const scalar maxProtSize2
+)
+{
+    bool found = false;
+    point2D interPoint;
+    label interTri = -1;
+    label interHitSurface = -1;
+    scalar interDist2 = 0;
+
+    Face_circulator fcStart = incident_faces(vit);
+    Face_circulator fc = fcStart;
+    label vi = 0;
+
+    do
+    {
+        if (!is_infinite(fc))
+        {
+            pointIndexHit pHit;
+            label hitSurface = -1;
+
+            qSurf_.findSurfaceNearestIntersection
+            (
+                toPoint3D(defVert),
+                toPoint3D(vertices[vi]),
+                pHit,
+                hitSurface
+            );
+
+            if (pHit.hit())
+            {
+                scalar dist2 =
+                    magSqr(toPoint2D(pHit.hitPoint()) - vertices[vi]);
+
+                // Check the point is further away than the furthest so far
+                if (dist2 > interDist2)
+                {
+                    scalar mps2 = maxProtSize2;
+
+                    // If this is a boundary triangle reset the tolerance
+                    // to avoid finding a hit point very close to a boundary
+                    // vertex
+                    if (boundaryTriangle(fc))
+                    {
+                        mps2 = meshControls().maxNotchLen2();
+                    }
+
+                    if (dist2 > mps2)
+                    {
+                        found = true;
+                        interPoint = toPoint2D(pHit.hitPoint());
+                        interTri = pHit.index();
+                        interDist2 = dist2;
+                        interHitSurface = hitSurface;
+                    }
+                }
+            }
+
+            vi++;
+        }
+    } while (++fc != fcStart);
+
+    if (found)
+    {
+        insertPointPair(vit, interPoint, interTri, interHitSurface);
+        return true;
+    }
+    else
+    {
+        return false;
+    }
+}
+
+
+Foam::label Foam::CV2D::insertBoundaryConformPointPairs
+(
+    const fileName& fName
+)
+{
+    label nIntersections = 0;
+
+    for
+    (
+        Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        vit++
+    )
+    {
+        // Consider only those points part of point-pairs or near boundary
+        if (!vit->nearOrOnBoundary())
+        {
+            continue;
+        }
+
+        // Counter-clockwise circulator
+        Face_circulator fcStart = incident_faces(vit);
+        Face_circulator fc = fcStart;
+
+        bool infinite = false;
+        bool changed = false;
+
+        do
+        {
+            if (is_infinite(fc))
+            {
+                infinite = true;
+                break;
+            }
+            else if (fc->faceIndex() < Fb::UNCHANGED)
+            {
+                changed = true;
+                break;
+            }
+        } while (++fc != fcStart);
+
+        // If the dual-cell is connected to the infinite point or none of the
+        // faces whose circumcentres it uses have changed ignore
+        if (infinite || !changed) continue;
+
+        fc = fcStart;
+        label nVerts = 0;
+
+        do
+        {
+            vertices[nVerts++] = toPoint2D(circumcenter(fc));
+
+            if (nVerts == maxNvert)
+            {
+                break;
+            }
+        } while (++fc != fcStart);
+
+        // Check if dual-cell has a large number of faces in which case
+        // assumed to be in the far-field and reject
+        if (nVerts == maxNvert) continue;
+
+        // Set n+1 vertex to the first vertex for easy circulating
+        vertices[nVerts] = vertices[0];
+
+        // Convert triangle vertex to OpenFOAM point
+        point2DFromPoint defVert = toPoint2D(vit->point());
+
+        scalar maxProtSize2 = meshControls().maxNotchLen2();
+
+        if (vit->internalOrBoundaryPoint())
+        {
+            // Calculate metrics of the dual-cell
+            // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+            // The perimeter of the dual-cell
+            scalar perimeter = 0;
+
+            // Twice the area of the dual-cell
+            scalar areaT2 = 0;
+
+            for (int vi=0; vi<nVerts; vi++)
+            {
+                vector2D edge(vertices[vi+1] - vertices[vi]);
+                perimeter += mag(edge);
+                vector2D otherEdge = defVert - vertices[vi];
+                areaT2 += mag(edge.x()*otherEdge.y() - edge.y()*otherEdge.x());
+            }
+
+            // If the dual-cell is very small reject refinement
+            if (areaT2 < meshControls().minEdgeLen2()) continue;
+
+            // Estimate the cell width
+            scalar cellWidth = areaT2/perimeter;
+
+
+            // Check dimensions of dual-cell
+            /*
+            // Quick rejection of dual-cell refinement based on it's perimeter
+            if (perimeter < 2*meshControls().minCellSize()) continue;
+
+            // Also check the area of the cell and reject refinement
+            // if it is less than that allowed
+            if (areaT2 < meshControls().minCellSize2()) continue;
+
+            // Estimate the cell width and reject refinement if it is less than
+            // that allowed
+            if (cellWidth < 0.5*meshControls().minEdgeLen()) continue;
+            */
+
+            if
+            (
+                perimeter > 2*meshControls().minCellSize()
+             && areaT2 > meshControls().minCellSize2()
+             && cellWidth > 0.5*meshControls().minEdgeLen()
+            )
+            {
+                maxProtSize2 = 0.25*meshControls().maxNotchLen2();
+            }
+        }
+
+        if (insertPointPairAtIntersection(vit, defVert, vertices, maxProtSize2))
+        {
+            nIntersections++;
+        }
+    }
+
+    return nIntersections;
+}
+
+
+void Foam::CV2D::markNearBoundaryPoints()
+{
+    label count = 0;
+    for
+    (
+        Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        vit++
+    )
+    {
+        if (vit->internalPoint())
+        {
+            point vert(toPoint3D(vit->point()));
+
+            pointIndexHit pHit;
+            label hitSurface = -1;
+
+            qSurf_.findSurfaceNearest
+            (
+                vert,
+                4*meshControls().minCellSize2(),
+                pHit,
+                hitSurface
+            );
+
+            if (pHit.hit())
+            {
+                vit->setNearBoundary();
+                ++count;
+            }
+        }
+    }
+
+    Info<< count << " points marked as being near a boundary" << endl;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cv2DMesh/insertFeaturePoints.C b/applications/utilities/mesh/generation/cv2DMesh/insertFeaturePoints.C
new file mode 100644
index 0000000000000000000000000000000000000000..464557078fe09981e912b7ad3b029e41920d7a36
--- /dev/null
+++ b/applications/utilities/mesh/generation/cv2DMesh/insertFeaturePoints.C
@@ -0,0 +1,394 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*----------------------------------------------------------------------------*/
+
+#include "CV2D.H"
+#include "plane.H"
+#include "unitConversion.H"
+
+// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
+
+bool Foam::CV2D::on2DLine(const point2D& p, const linePointRef& line)
+{
+    const point2D& a = toPoint2D(line.start());
+    const point2D& b = toPoint2D(line.end());
+
+    if
+    (
+        p.x() < min(a.x(), b.x())
+     || p.x() > max(a.x(), b.x())
+     || p.y() < min(a.y(), b.y())
+     || p.y() > max(a.y(), b.y())
+    )
+    {
+        return false;
+    }
+
+    return true;
+}
+
+
+void Foam::CV2D::insertFeaturePoints()
+{
+    featurePoints_.clear();
+    label nVert = number_of_vertices();
+
+    const PtrList<extendedFeatureEdgeMesh>& feMeshes
+    (
+        qSurf_.features()
+    );
+
+    if (feMeshes.empty())
+    {
+        WarningIn("CV2D::insertFeaturePoints")
+            << "Extended Feature Edge Mesh is empty so no feature points will "
+            << "be found." << nl
+            << "    Use: featureMethod extendedFeatureEdgeMesh;" << nl
+            << endl;
+    }
+
+    forAll(feMeshes, i)
+    {
+        const extendedFeatureEdgeMesh& feMesh(feMeshes[i]);
+        const edgeList& edges = feMesh.edges();
+        const pointField& points = feMesh.points();
+
+        if (debug)
+        {
+            label nConvex = feMesh.concaveStart() - feMesh.convexStart();
+            label nConcave = feMesh.mixedStart() - feMesh.concaveStart();
+            label nMixed = feMesh.nonFeatureStart() - feMesh.mixedStart();
+            label nExternal = feMesh.internalStart() - feMesh.externalStart();
+            label nInternal = feMesh.flatStart() - feMesh.internalStart();
+            label nFlat = feMesh.openStart() - feMesh.flatStart();
+            label nOpen = feMesh.multipleStart() - feMesh.openStart();
+            label nMultiple = edges.size() - feMesh.multipleStart();
+
+            Info<< "Inserting Feature Points:" << nl
+                << "    Convex points: " << nConvex << nl
+                << "   Concave points: " << nConcave << nl
+                << "     Mixed points: " << nMixed << nl
+                << "   External edges: " << nExternal << nl
+                << "   Internal edges: " << nInternal << nl
+                << "       Flat edges: " << nFlat << nl
+                << "       Open edges: " << nOpen << nl
+                << "   Multiple edges: " << nMultiple << endl;
+        }
+
+        // Args: (base point, normal)
+        // @todo allow user to input this
+        plane zPlane(vector(0, 0, z_), vector(0, 0, 1));
+
+        if (debug)
+        {
+            Info<< "    plane: " << zPlane << " " << z_ << endl;
+        }
+
+        forAll(edges, edgeI)
+        {
+            const edge& e = feMesh.edges()[edgeI];
+
+            const point& ep0 = points[e.start()];
+            const point& ep1 = points[e.end()];
+
+            const linePointRef line(ep0, ep1);
+
+            scalar intersect = zPlane.lineIntersect(line);
+
+            point2D featPoint = toPoint2D(intersect * (ep1 - ep0) + ep0);
+
+            if (on2DLine(featPoint, line))
+            {
+                vector2DField fpn = toPoint2D(feMesh.edgeNormals(edgeI));
+
+                vector2D cornerNormal = sum(fpn);
+                cornerNormal /= mag(cornerNormal);
+
+                if (debug)
+                {
+                    Info<< nl << "    line: " << line << nl
+                        << "        vec: " << line.vec() << nl
+                        << "    featurePoint: " << featPoint << nl
+                        << "    line length: " << line.mag() << nl
+                        << "    intersect: " << intersect << endl;
+                }
+
+                if
+                (
+                    feMesh.getEdgeStatus(edgeI)
+                 == extendedFeatureEdgeMesh::EXTERNAL
+                )
+                {
+                    // Convex Point
+                    Foam::point2D internalPt =
+                        featPoint - meshControls().ppDist()*cornerNormal;
+
+                    if (debug)
+                    {
+                        Info<< "PREC: " << internalPt << nl
+                            << "    : " << featPoint << nl
+                            << "    : " << meshControls().ppDist() << nl
+                            << "    : " << cornerNormal << endl;
+                    }
+
+                    featurePoints_.push_back
+                    (
+                        Vb
+                        (
+                            toPoint(internalPt),
+                            nVert,
+                            nVert + 1
+                        )
+                    );
+                    label masterPtIndex = nVert++;
+
+                    forAll(fpn, nI)
+                    {
+                        const vector n3D(fpn[nI][0], fpn[nI][1], 0.0);
+
+                        plane planeN = plane(toPoint3D(featPoint), n3D);
+
+                        Foam::point2D externalPt =
+                            internalPt
+                          + (
+                                2.0
+                              * planeN.distance(toPoint3D(internalPt))
+                              * fpn[nI]
+                            );
+
+                        featurePoints_.push_back
+                        (
+                            Vb
+                            (
+                                toPoint(externalPt),
+                                nVert++,
+                                masterPtIndex
+                            )
+                        );
+
+                        if (debug)
+                        {
+                            Info<< "  side point: " << externalPt << endl;
+                        }
+                    }
+
+                    if (debug)
+                    {
+                        Info<< "Convex Point: " << featPoint << nl
+                            << "  corner norm: " << cornerNormal << nl
+                            << "    reference: " << internalPt << endl;
+                    }
+                }
+                else if
+                (
+                    feMesh.getEdgeStatus(edgeI)
+                 == extendedFeatureEdgeMesh::INTERNAL
+                )
+                {
+                    // Concave Point
+                    Foam::point2D externalPt =
+                        featPoint + meshControls().ppDist()*cornerNormal;
+
+                    Foam::point2D refPt =
+                        featPoint - meshControls().ppDist()*cornerNormal;
+
+                    label slavePointIndex = 0;
+
+                    scalar totalAngle =
+                        radToDeg
+                        (
+                            constant::mathematical::pi
+                          + acos(mag(fpn[0] & fpn[1]))
+                        );
+
+                    // Number of quadrants the angle should be split into
+                    int nQuads =
+                        int(totalAngle/meshControls().maxQuadAngle()) + 1;
+
+                    // The number of additional master points needed to
+                    //obtain the required number of quadrants.
+                    int nAddPoints = min(max(nQuads - 2, 0), 2);
+
+                    // index of reflMaster
+                    label reflectedMaster = nVert + 2 + nAddPoints;
+
+                    if (debug)
+                    {
+                        Info<< "Concave Point: " <<  featPoint << nl
+                            << "  corner norm: " << cornerNormal << nl
+                            << "     external: " << externalPt << nl
+                            << "    reference: " << refPt << nl
+                            << "        angle: " << totalAngle << nl
+                            << "       nQuads: " << nQuads << nl
+                            << "   nAddPoints: " << nAddPoints << endl;
+                    }
+
+                    forAll(fpn, nI)
+                    {
+                        const vector n3D(fpn[nI][0], fpn[nI][1], 0.0);
+
+                        plane planeN = plane(toPoint3D(featPoint), n3D);
+
+                        Foam::point2D internalPt =
+                            externalPt
+                          - (
+                                2.0
+                              * planeN.distance(toPoint3D(externalPt))
+                              * fpn[nI]
+                            );
+
+                        featurePoints_.push_back
+                        (
+                            Vb
+                            (
+                                toPoint(internalPt),
+                                nVert,
+                                reflectedMaster
+                            )
+                        );
+                        slavePointIndex = nVert++;
+
+                        if (debug)
+                        {
+                            Info<< "Internal Point: " <<  internalPt << endl;
+                        }
+                    }
+
+                    if (nAddPoints == 1)
+                    {
+                        // One additional point is the reflection of the slave
+                        // point, i.e., the original reference point
+                        featurePoints_.push_back
+                        (
+                            Vb
+                            (
+                                toPoint(refPt),
+                                nVert++,
+                                reflectedMaster
+                            )
+                        );
+
+                        if (debug)
+                        {
+                           Info<< "ref Point: " <<  refPt << endl;
+                        }
+                    }
+                    else if (nAddPoints == 2)
+                    {
+                       point2D reflectedAa =
+                           refPt - ((featPoint - externalPt) & fpn[1])*fpn[1];
+
+                       featurePoints_.push_back
+                       (
+                           Vb
+                           (
+                               toPoint(reflectedAa),
+                               nVert++,
+                               reflectedMaster
+                           )
+                       );
+
+                       point2D reflectedBb =
+                           refPt - ((featPoint - externalPt) & fpn[0])*fpn[0];
+
+                       featurePoints_.push_back
+                       (
+                           Vb
+                           (
+                               toPoint(reflectedBb),
+                               nVert++,
+                               reflectedMaster
+                           )
+                       );
+
+                       if (debug)
+                       {
+                           Info<< "refA Point: " <<  reflectedAa << nl
+                               << "refb Point: " <<  reflectedBb << endl;
+                       }
+                    }
+
+                    featurePoints_.push_back
+                    (
+                        Vb
+                        (
+                            toPoint(externalPt),
+                            nVert++,
+                            slavePointIndex
+                        )
+                    );
+                }
+                else
+                {
+                    WarningIn("void Foam::CV2D::insertFeaturePoints()")
+                        << "Feature Edge " << edges[edgeI] << nl
+                        << "    points(" << points[edges[edgeI].start()]
+                        << ", " << points[edges[edgeI].end()] << ")" << nl
+                        << "    is not labelled as either concave or convex, it"
+                        << " is labelled as (#2 = flat): "
+                        << feMesh.getEdgeStatus(edgeI) << endl;
+                }
+            }
+            else
+            {
+                WarningIn("void Foam::CV2D::insertFeaturePoints()")
+                      << "Point " << featPoint << " is not on the line "
+                      << line << endl;
+            }
+        }
+    }
+
+    // Insert the feature points.
+    reinsertFeaturePoints();
+
+    if (meshControls().objOutput())
+    {
+        writePoints("feat_allPoints.obj", false);
+        writeFaces("feat_allFaces.obj", false);
+        writeFaces("feat_faces.obj", true);
+        writeTriangles("feat_triangles.obj", true);
+    }
+}
+
+
+void Foam::CV2D::reinsertFeaturePoints()
+{
+    for
+    (
+        std::list<Vb>::iterator vit=featurePoints_.begin();
+        vit != featurePoints_.end();
+        ++vit
+    )
+    {
+        insertPoint
+        (
+            toPoint2D(vit->point()),
+            vit->index(),
+            vit->type()
+        );
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cv2DMesh/insertSurfaceNearPointPairs.C b/applications/utilities/mesh/generation/cv2DMesh/insertSurfaceNearPointPairs.C
new file mode 100644
index 0000000000000000000000000000000000000000..700041f814189bae85c38bc9496b9139bdb4a71c
--- /dev/null
+++ b/applications/utilities/mesh/generation/cv2DMesh/insertSurfaceNearPointPairs.C
@@ -0,0 +1,114 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*----------------------------------------------------------------------------*/
+
+#include "CV2D.H"
+
+// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
+
+void Foam::CV2D::insertSurfaceNearPointPairs()
+{
+    Info<< "insertSurfaceNearPointPairs: ";
+
+    label nNearPoints = 0;
+
+    for
+    (
+        Triangulation::Finite_edges_iterator eit = finite_edges_begin();
+        eit != finite_edges_end();
+        eit++
+    )
+    {
+        Vertex_handle v0h = eit->first->vertex(cw(eit->second));
+        Vertex_handle v1h = eit->first->vertex(ccw(eit->second));
+
+        if (v0h->ppMaster() && v1h->ppMaster())
+        {
+            point2DFromPoint v0(toPoint2D(v0h->point()));
+            point2DFromPoint v1(toPoint2D(v1h->point()));
+
+            // Check that the two triangle vertices are further apart than the
+            // minimum cell size
+            if (magSqr(v1 - v0) > meshControls().minCellSize2())
+            {
+                point2D e0(toPoint2D(circumcenter(eit->first)));
+
+                point2D e1
+                (
+                    toPoint2D(circumcenter(eit->first->neighbor(eit->second)))
+                );
+
+                // Calculate the length^2 of the edge normal to the surface
+                scalar edgeLen2 = magSqr(e0 - e1);
+
+                if (edgeLen2 < meshControls().minNearPointDist2())
+                {
+                    pointIndexHit pHit;
+                    label hitSurface = -1;
+
+                    qSurf_.findSurfaceNearest
+                    (
+                        toPoint3D(e0),
+                        meshControls().minEdgeLen2(),
+                        pHit,
+                        hitSurface
+                    );
+
+                    if (pHit.hit())
+                    {
+                        vectorField norm(1);
+                        qSurf_.geometry()[hitSurface].getNormal
+                        (
+                            List<pointIndexHit>(1, pHit),
+                            norm
+                        );
+
+                        insertPointPair
+                        (
+                            meshControls().ppDist(),
+                            toPoint2D(pHit.hitPoint()),
+                            toPoint2D(norm[0])
+                        );
+
+                        nNearPoints++;
+
+                        // Correct the edge iterator for the change in the
+                        // number of edges following the point-pair insertion
+                        eit = Finite_edges_iterator
+                        (
+                            finite_edges_end().base(),
+                            eit.predicate(),
+                            eit.base()
+                        );
+                    }
+                }
+            }
+        }
+    }
+
+    Info<< nNearPoints << " point-pairs inserted" << endl;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cv2DMesh/insertSurfaceNearestPointPairs.C b/applications/utilities/mesh/generation/cv2DMesh/insertSurfaceNearestPointPairs.C
new file mode 100644
index 0000000000000000000000000000000000000000..49249241e77adac8ccce8b8853f1a40b8f92719c
--- /dev/null
+++ b/applications/utilities/mesh/generation/cv2DMesh/insertSurfaceNearestPointPairs.C
@@ -0,0 +1,244 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*----------------------------------------------------------------------------*/
+
+#include "CV2D.H"
+
+// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
+
+bool Foam::CV2D::dualCellSurfaceIntersection
+(
+    const Triangulation::Finite_vertices_iterator& vit
+) const
+{
+    Triangulation::Edge_circulator ecStart = incident_edges(vit);
+    Triangulation::Edge_circulator ec = ecStart;
+
+    do
+    {
+        if (!is_infinite(ec))
+        {
+            point e0 = toPoint3D(circumcenter(ec->first));
+
+            // If edge end is outside bounding box then edge cuts boundary
+            if (!qSurf_.globalBounds().contains(e0))
+            {
+                return true;
+            }
+
+            point e1 = toPoint3D(circumcenter(ec->first->neighbor(ec->second)));
+
+            // If other edge end is ouside bounding box then edge cuts boundary
+            if (!qSurf_.globalBounds().contains(e1))
+            {
+                return true;
+            }
+
+            if (magSqr(e1 - e0) > meshControls().minEdgeLen2())
+            {
+                if (qSurf_.findSurfaceAnyIntersection(e0, e1))
+                {
+                    return true;
+                }
+            }
+        }
+
+    } while (++ec != ecStart);
+
+    return false;
+}
+
+
+void Foam::CV2D::insertPointPairs
+(
+    const DynamicList<point2D>& nearSurfacePoints,
+    const DynamicList<point2D>& surfacePoints,
+    const DynamicList<label>& surfaceTris,
+    const DynamicList<label>& surfaceHits,
+    const fileName fName
+)
+{
+    if (meshControls().mirrorPoints())
+    {
+        forAll(surfacePoints, ppi)
+        {
+            insertMirrorPoint
+            (
+                nearSurfacePoints[ppi],
+                surfacePoints[ppi]
+            );
+        }
+    }
+    else
+    {
+        forAll(surfacePoints, ppi)
+        {
+            pointIndexHit pHit
+            (
+                true,
+                toPoint3D(surfacePoints[ppi]),
+                surfaceTris[ppi]
+            );
+
+            vectorField norm(1);
+            qSurf_.geometry()[surfaceHits[ppi]].getNormal
+            (
+                List<pointIndexHit>(1, pHit),
+                norm
+            );
+
+            insertPointPair
+            (
+                meshControls().ppDist(),
+                surfacePoints[ppi],
+                toPoint2D(norm[0])
+            );
+        }
+    }
+
+    Info<< surfacePoints.size() << " point-pairs inserted" << endl;
+
+    if (meshControls().objOutput())
+    {
+        OFstream str(fName);
+        label vertI = 0;
+
+        forAll(surfacePoints, ppi)
+        {
+            meshTools::writeOBJ(str, toPoint3D(surfacePoints[ppi]));
+            vertI++;
+        }
+
+        Info<< "insertPointPairs: Written " << surfacePoints.size()
+            << " inserted point-pair locations to file "
+            << str.name() << endl;
+    }
+}
+
+
+void Foam::CV2D::insertSurfaceNearestPointPairs()
+{
+    Info<< "insertSurfaceNearestPointPairs: ";
+
+    label nSurfacePointsEst =
+        min
+        (
+            number_of_vertices(),
+            size_t(10*sqrt(scalar(number_of_vertices())))
+        );
+
+    DynamicList<point2D> nearSurfacePoints(nSurfacePointsEst);
+    DynamicList<point2D> surfacePoints(nSurfacePointsEst);
+    DynamicList<label> surfaceTris(nSurfacePointsEst);
+    DynamicList<label> surfaceHits(nSurfacePointsEst);
+
+    // Local references to surface mesh addressing
+//    const pointField& localPoints = qSurf_.localPoints();
+//    const labelListList& edgeFaces = qSurf_.edgeFaces();
+//    const vectorField& faceNormals = qSurf_.faceNormals();
+//    const labelListList& faceEdges = qSurf_.faceEdges();
+
+    for
+    (
+        Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        vit++
+    )
+    {
+        if (vit->internalPoint())
+        {
+            point2DFromPoint vert(toPoint2D(vit->point()));
+
+            pointIndexHit pHit;
+            label hitSurface = -1;
+
+            qSurf_.findSurfaceNearest
+            (
+                toPoint3D(vert),
+                4*meshControls().minCellSize2(),
+                pHit,
+                hitSurface
+            );
+
+            if (pHit.hit())
+            {
+                vit->setNearBoundary();
+
+                // Reference to the nearest triangle
+//                const labelledTri& f = qSurf_[hitSurface];
+
+//                // Find where point is on triangle.
+//                // Note tolerance needed is relative one
+//                // (used in comparing normalized [0..1] triangle coordinates).
+//                label nearType, nearLabel;
+//                triPointRef
+//                (
+//                    localPoints[f[0]],
+//                    localPoints[f[1]],
+//                    localPoints[f[2]]
+//                ).classify(pHit.hitPoint(), nearType, nearLabel);
+
+//                // If point is on a edge check if it is an internal feature
+
+//                bool internalFeatureEdge = false;
+
+//                if (nearType == triPointRef::EDGE)
+//                {
+//                    label edgeI = faceEdges[hitSurface][nearLabel];
+//                    const labelList& eFaces = edgeFaces[edgeI];
+
+//                    if
+//                    (
+//                        eFaces.size() == 2
+//                     && (faceNormals[eFaces[0]] & faceNormals[eFaces[1]])
+//                       < -0.2
+//                    )
+//                    {
+//                        internalFeatureEdge = true;
+//                    }
+//                }
+
+                if (dualCellSurfaceIntersection(vit)) //&& !internalFeatureEdge)
+                {
+                    nearSurfacePoints.append(vert);
+                    surfacePoints.append(toPoint2D(pHit.hitPoint()));
+                    surfaceTris.append(pHit.index());
+                    surfaceHits.append(hitSurface);
+                }
+            }
+        }
+    }
+
+    insertPointPairs
+    (
+        nearSurfacePoints,
+        surfacePoints,
+        surfaceTris,
+        surfaceHits,
+        "surfaceNearestIntersections.obj"
+    );
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cv2DMesh/shortEdgeFilter2D.C b/applications/utilities/mesh/generation/cv2DMesh/shortEdgeFilter2D.C
new file mode 100644
index 0000000000000000000000000000000000000000..b125351314b205acd0ee6e1406954230af58d917
--- /dev/null
+++ b/applications/utilities/mesh/generation/cv2DMesh/shortEdgeFilter2D.C
@@ -0,0 +1,533 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms_ of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "shortEdgeFilter2D.H"
+
+namespace Foam
+{
+    defineTypeNameAndDebug(shortEdgeFilter2D, 0);
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::shortEdgeFilter2D::shortEdgeFilter2D
+(
+    const Foam::CV2D& cv2Dmesh,
+    const dictionary& dict
+)
+:
+    cv2Dmesh_(cv2Dmesh),
+    shortEdgeFilterFactor_(readScalar(dict.lookup("shortEdgeFilterFactor"))),
+    edgeAttachedToBoundaryFactor_
+    (
+        dict.lookupOrDefault<scalar>("edgeAttachedToBoundaryFactor", 2.0)
+    ),
+    patchNames_(wordList()),
+    patchSizes_(labelList()),
+    mapEdgesRegion_(),
+    indirectPatchEdge_()
+{
+    point2DField points2D;
+    faceList faces;
+
+    cv2Dmesh.calcDual
+    (
+        points2D,
+        faces,
+        patchNames_,
+        patchSizes_,
+        mapEdgesRegion_,
+        indirectPatchEdge_
+    );
+
+    pointField points(points2D.size());
+    forAll(points, ip)
+    {
+        points[ip] = cv2Dmesh.toPoint3D(points2D[ip]);
+    }
+
+    if (debug)
+    {
+        OFstream str("indirectPatchEdges.obj");
+        label count = 0;
+
+        Info<< "Writing indirectPatchEdges to " << str.name() << endl;
+
+        forAllConstIter(EdgeMap<label>, indirectPatchEdge_, iter)
+        {
+            const edge& e = iter.key();
+
+            meshTools::writeOBJ
+            (
+                str,
+                points[e.start()],
+                points[e.end()],
+                count
+            );
+        }
+    }
+
+    points2D.clear();
+
+    ms_ = MeshedSurface<face>(xferMove(points), xferMove(faces));
+
+    Info<< "Meshed surface stats before edge filtering :" << endl;
+    ms_.writeStats(Info);
+
+    if (debug)
+    {
+        writeInfo(Info);
+
+        ms_.write("MeshedSurface_preFilter.obj");
+    }
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::shortEdgeFilter2D::~shortEdgeFilter2D()
+{}
+
+
+// * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * * //
+
+void
+Foam::shortEdgeFilter2D::filter()
+{
+    // These are global indices.
+    const pointField& points = ms_.points();
+    const edgeList& edges = ms_.edges();
+    const faceList& faces = ms_.faces();
+    const labelList& meshPoints = ms_.meshPoints();
+    const labelList& boundaryPoints = ms_.boundaryPoints();
+
+    label maxChain = 0;
+    label nPointsToRemove = 0;
+
+    labelList pointsToRemove(ms_.points().size(), -1);
+
+    // List of number of vertices in a face.
+    labelList newFaceVertexCount(faces.size(), -1);
+    forAll(faces, faceI)
+    {
+        newFaceVertexCount[faceI] = faces[faceI].size();
+    }
+
+    // Check if the point is a boundary point. Flag if it is so that
+    // it will not be deleted.
+    boolList boundaryPointFlags(points.size(), false);
+    // This has been removed, otherwise small edges on the boundary are not
+    // removed.
+    /*  forAll(boundaryPointFlags, pointI)
+    {
+        forAll(boundaryPoints, bPoint)
+        {
+            if (meshPoints[boundaryPoints[bPoint]] == pointI)
+            {
+                boundaryPointFlags[pointI] = true;
+            }
+        }
+    }*/
+
+    // Check if an edge has a boundary point. It it does the edge length
+    // will be doubled when working out its length.
+    Info<< "    Marking edges attached to boundaries." << endl;
+    boolList edgeAttachedToBoundary(edges.size(), false);
+    forAll(edges, edgeI)
+    {
+        const edge& e = edges[edgeI];
+        const label startVertex = e.start();
+        const label endVertex = e.end();
+
+        forAll(boundaryPoints, bPoint)
+        {
+            if
+            (
+                boundaryPoints[bPoint] == startVertex
+             || boundaryPoints[bPoint] == endVertex
+            )
+            {
+                edgeAttachedToBoundary[edgeI] = true;
+            }
+        }
+    }
+
+    forAll(edges, edgeI)
+    {
+        const edge& e = edges[edgeI];
+
+        // get the vertices of that edge.
+        const label startVertex = e.start();
+        const label endVertex = e.end();
+
+        scalar edgeLength =
+            mag
+            (
+                points[meshPoints[startVertex]]
+              - points[meshPoints[endVertex]]
+            );
+
+        if (edgeAttachedToBoundary[edgeI])
+        {
+            edgeLength *= edgeAttachedToBoundaryFactor_;
+        }
+
+        scalar shortEdgeFilterValue = 0.0;
+
+        const labelList& psEdges = ms_.pointEdges()[startVertex];
+        const labelList& peEdges = ms_.pointEdges()[endVertex];
+
+        forAll(psEdges, psEdgeI)
+        {
+            const edge& psE = edges[psEdges[psEdgeI]];
+            if (edgeI != psEdges[psEdgeI])
+            {
+                shortEdgeFilterValue +=
+                    mag
+                    (
+                        points[meshPoints[psE.start()]]
+                      - points[meshPoints[psE.end()]]
+                    );
+            }
+        }
+
+        forAll(peEdges, peEdgeI)
+        {
+            const edge& peE = edges[peEdges[peEdgeI]];
+            if (edgeI != peEdges[peEdgeI])
+            {
+                shortEdgeFilterValue +=
+                    mag
+                    (
+                        points[meshPoints[peE.start()]]
+                      - points[meshPoints[peE.end()]]
+                    );
+            }
+        }
+
+        shortEdgeFilterValue *=
+            shortEdgeFilterFactor_
+           /(psEdges.size() + peEdges.size() - 2);
+
+
+        edge lookupInPatchEdge
+        (
+            meshPoints[startVertex],
+            meshPoints[endVertex]
+        );
+
+        if
+        (
+            edgeLength < shortEdgeFilterValue
+         || indirectPatchEdge_.found(lookupInPatchEdge)
+        )
+        {
+            bool flagDegenerateFace = false;
+            const labelList& pFaces = ms_.pointFaces()[startVertex];
+
+            forAll(pFaces, pFaceI)
+            {
+                const face& f = ms_.localFaces()[pFaces[pFaceI]];
+                forAll(f, fp)
+                {
+                    // If the edge is part of this face...
+                    if (f[fp] == endVertex)
+                    {
+                        // If deleting vertex would create a triangle, don't!
+                        if (newFaceVertexCount[pFaces[pFaceI]] < 4)
+                        {
+                            flagDegenerateFace = true;
+                        }
+                        else
+                        {
+                            newFaceVertexCount[pFaces[pFaceI]]--;
+                        }
+                    }
+                    // If the edge is not part of this face...
+                    else
+                    {
+                        // Deleting vertex of a triangle...
+                        if (newFaceVertexCount[pFaces[pFaceI]] < 3)
+                        {
+                            flagDegenerateFace = true;
+                        }
+                    }
+                }
+            }
+
+            // This if statement determines whether a point should be deleted.
+            if
+            (
+                pointsToRemove[meshPoints[startVertex]] == -1
+             && pointsToRemove[meshPoints[endVertex]] == -1
+             && !boundaryPointFlags[meshPoints[startVertex]]
+             && !flagDegenerateFace
+            )
+            {
+                pointsToRemove[meshPoints[startVertex]] = meshPoints[endVertex];
+                ++nPointsToRemove;
+            }
+        }
+    }
+
+    label totalNewPoints = points.size() - nPointsToRemove;
+
+    pointField newPoints(totalNewPoints, vector::zero);
+    labelList newPointNumbers(points.size(), -1);
+    label numberRemoved = 0;
+
+    forAll(points, pointI)
+    {
+        // If the point is NOT going to be removed.
+        if (pointsToRemove[pointI] == -1)
+        {
+            newPoints[pointI - numberRemoved] = points[pointI];
+            newPointNumbers[pointI] =  pointI - numberRemoved;
+        }
+        else
+        {
+            numberRemoved++;
+        }
+    }
+
+    // Need a new faceList
+    faceList newFaces(faces.size());
+    label newFaceI = 0;
+
+    labelList newFace;
+    label newFaceSize = 0;
+
+    // Now need to iterate over the faces and remove points. Global index.
+    forAll(faces, faceI)
+    {
+        const face& f = faces[faceI];
+
+        newFace.clear();
+        newFace.setSize(f.size());
+        newFaceSize = 0;
+
+        forAll(f, fp)
+        {
+            label pointI = f[fp];
+            // If not removing the point, then add it to the new face.
+            if (pointsToRemove[pointI] == -1)
+            {
+                newFace[newFaceSize++] = newPointNumbers[pointI];
+            }
+            else
+            {
+                label newPointI = pointsToRemove[pointI];
+                // Replace deleted point with point that it is being
+                // collapsed to.
+                if
+                (
+                    f.nextLabel(fp) != newPointI
+                 && f.prevLabel(fp) != newPointI
+                )
+                {
+                    label pChain = newPointI;
+                    label totalChain = 0;
+                    for (label nChain = 0; nChain <= totalChain; ++nChain)
+                    {
+                        if (newPointNumbers[pChain] != -1)
+                        {
+                            newFace[newFaceSize++] = newPointNumbers[pChain];
+                            newPointNumbers[pointI] = newPointNumbers[pChain];
+                            maxChain = max(totalChain, maxChain);
+                        }
+                        else
+                        {
+                            WarningIn("shortEdgeFilter")
+                                << "Point " << pChain
+                                << " marked for deletion as well as point "
+                                << pointI << nl
+                                << "    Incrementing maxChain by 1 from "
+                                << totalChain << " to " << totalChain + 1
+                                << endl;
+                            totalChain++;
+                        }
+                        pChain = pointsToRemove[pChain];
+                    }
+                }
+                else
+                {
+                    if (newPointNumbers[newPointI] != -1)
+                    {
+                        newPointNumbers[pointI] = newPointNumbers[newPointI];
+                    }
+                }
+            }
+        }
+
+        newFace.setSize(newFaceSize);
+
+        if (newFace.size() > 2)
+        {
+            newFaces[newFaceI++] = face(newFace);
+        }
+        else
+        {
+            FatalErrorIn("shortEdgeFilter")
+                << "Only " << newFace.size() << " in face " << faceI
+                << exit(FatalError);
+        }
+    }
+
+    newFaces.setSize(newFaceI);
+
+    MeshedSurface<face> fMesh
+    (
+        xferMove(newPoints),
+        xferMove(newFaces),
+        xferCopy(List<surfZone>())
+    );
+
+    const Map<int>& fMeshPointMap = fMesh.meshPointMap();
+
+    // Reset patchSizes_
+    patchSizes_.clear();
+    patchSizes_.setSize(patchNames_.size(), 0);
+
+    label equalEdges = 0;
+    label notFound = 0;
+    label matches = 0;
+    label negativeLabels = 0;
+
+    forAll(newPointNumbers, pointI)
+    {
+        if (newPointNumbers[pointI] == -1)
+        {
+            WarningIn("shortEdgeFilter")
+                << pointI << " will be deleted and " << newPointNumbers[pointI]
+                << ", so it will not be replaced. "
+                << "This will cause edges to be deleted." << endl;
+        }
+    }
+
+    // Create new EdgeMap.
+    Info<< "Creating new EdgeMap." << endl;
+    EdgeMap<label> newMapEdgesRegion(mapEdgesRegion_.size());
+
+    for
+    (
+        label bEdgeI = ms_.nInternalEdges();
+        bEdgeI < edges.size();
+        ++bEdgeI
+    )
+    {
+        label p1 = meshPoints[edges[bEdgeI][0]];
+        label p2 = meshPoints[edges[bEdgeI][1]];
+
+        edge e(p1, p2);
+
+        if (mapEdgesRegion_.found(e))
+        {
+            if
+            (
+                newPointNumbers[p1] != -1
+             && newPointNumbers[p2] != -1
+            )
+            {
+                if (newPointNumbers[p1] != newPointNumbers[p2])
+                {
+                    label region = mapEdgesRegion_.find(e)();
+                    newMapEdgesRegion.insert
+                    (
+                        edge
+                        (
+                            fMeshPointMap[newPointNumbers[p1]],
+                            fMeshPointMap[newPointNumbers[p2]]
+                        ),
+                        region
+                    );
+                    patchSizes_[region]++;
+                    matches++;
+                }
+                else
+                {
+                    equalEdges++;
+                }
+            }
+            else
+            {
+                negativeLabels++;
+            }
+        }
+        else
+        {
+            notFound++;
+        }
+    }
+
+    if (debug)
+    {
+        Info<< "EdgeMapping  :" << nl
+            << "    Matches  : " << matches << nl
+            << "    Equal    : " << equalEdges << nl
+            << "    Negative : " << negativeLabels << nl
+            << "    Not Found: " << notFound << endl;
+    }
+
+    mapEdgesRegion_.transfer(newMapEdgesRegion);
+
+    ms_.transfer(fMesh);
+
+    Info<< "    Maximum number of chained collapses = " << maxChain << endl;
+
+    if (debug)
+    {
+        writeInfo(Info);
+    }
+}
+
+
+void Foam::shortEdgeFilter2D::writeInfo(Ostream& os)
+{
+    os  << "Short Edge Filtering Information:" << nl
+        << "           shortEdgeFilterFactor: " << shortEdgeFilterFactor_ << nl
+        << "    edgeAttachedToBoundaryFactor: " << edgeAttachedToBoundaryFactor_
+        << endl;
+
+    forAll(patchNames_, patchI)
+    {
+        os  << "    Patch " << patchNames_[patchI]
+            << ", size " << patchSizes_[patchI] << endl;
+    }
+
+    os  << "    There are " << mapEdgesRegion_.size()
+        << " boundary edges." << endl;
+
+    os  << "    Mesh Info:" << nl
+        << "        Points:       " << ms_.nPoints() << nl
+        << "        Faces:        " << ms_.size() << nl
+        << "        Edges:        " << ms_.nEdges() << nl
+        << "            Internal: " << ms_.nInternalEdges() << nl
+        << "            External: " << ms_.nEdges() - ms_.nInternalEdges()
+        << endl;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cv2DMesh/shortEdgeFilter2D.H b/applications/utilities/mesh/generation/cv2DMesh/shortEdgeFilter2D.H
new file mode 100644
index 0000000000000000000000000000000000000000..53b248fc3d4bf542676f3a1f64d9cc5db9f3664a
--- /dev/null
+++ b/applications/utilities/mesh/generation/cv2DMesh/shortEdgeFilter2D.H
@@ -0,0 +1,133 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::shortEdgeFilter2D
+
+Description
+    This class filters short edges generated by the CV2D mesher.
+
+SourceFiles
+    shortEdgeFilter2D.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef shortEdgeFilter2D_H
+#define shortEdgeFilter2D_H
+
+#include "MeshedSurfaces.H"
+#include "CV2D.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                     Class shortEdgeFilter2D Declaration
+\*---------------------------------------------------------------------------*/
+
+class shortEdgeFilter2D
+{
+    // Private data
+
+        const CV2D& cv2Dmesh_;
+
+        MeshedSurface<face> ms_;
+
+        const scalar shortEdgeFilterFactor_;
+
+        const scalar edgeAttachedToBoundaryFactor_;
+
+        wordList patchNames_;
+
+        labelList patchSizes_;
+
+        EdgeMap<label> mapEdgesRegion_;
+
+        EdgeMap<label> indirectPatchEdge_;
+
+
+    // Private Member Functions
+
+        //- Disallow default bitwise copy construct
+        shortEdgeFilter2D(const shortEdgeFilter2D&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const shortEdgeFilter2D&);
+
+
+public:
+
+    //- Runtime type information
+    ClassName("shortEdgeFilter2D");
+
+    // Constructors
+
+        shortEdgeFilter2D(const CV2D& cv2Dmesh, const dictionary& dict);
+
+
+    //- Destructor
+    ~shortEdgeFilter2D();
+
+
+    // Access Functions
+
+        const wordList& patchNames() const
+        {
+            return patchNames_;
+        }
+
+        const labelList& patchSizes() const
+        {
+            return patchSizes_;
+        }
+
+        const EdgeMap<label>& mapEdgesRegion() const
+        {
+            return mapEdgesRegion_;
+        }
+
+        const MeshedSurface<face>& fMesh() const
+        {
+            return ms_;
+        }
+
+
+    // Member Functions
+
+        void filter();
+
+        void writeInfo(Ostream& os);
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/Allwclean b/applications/utilities/mesh/generation/cvMesh/Allwclean
new file mode 100755
index 0000000000000000000000000000000000000000..3eff84006aa70bbe0d2c8b60b9408274c47bad7d
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/Allwclean
@@ -0,0 +1,10 @@
+#!/bin/sh
+cd ${0%/*} || exit 1    # run from this directory
+set -x
+
+wclean libso conformalVoronoiMesh
+wclean
+wclean cvMeshSurfaceSimplify
+wclean cvMeshBackgroundMesh
+
+# ----------------------------------------------------------------- end-of-file
diff --git a/applications/utilities/mesh/generation/cvMesh/Allwmake b/applications/utilities/mesh/generation/cvMesh/Allwmake
new file mode 100755
index 0000000000000000000000000000000000000000..d88e8cee4afe888e82031a710e39bd9db82a578d
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/Allwmake
@@ -0,0 +1,11 @@
+#!/bin/sh
+cd ${0%/*} || exit 1    # run from this directory
+set -x
+
+wmake libso conformalVoronoiMesh
+wmake
+#wmake cvMeshBackgroundMesh
+(cd cvMeshSurfaceSimplify && ./Allwmake)
+wmake cellSizeAndAlignmentGrid
+
+# ----------------------------------------------------------------- end-of-file
diff --git a/applications/utilities/mesh/generation/cvMesh/Make/files b/applications/utilities/mesh/generation/cvMesh/Make/files
new file mode 100644
index 0000000000000000000000000000000000000000..425e0f5b83e2d83a58cef72bfc78a1503f18ad69
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/Make/files
@@ -0,0 +1,3 @@
+cvMesh.C
+
+EXE = $(FOAM_APPBIN)/cvMesh
diff --git a/applications/utilities/mesh/generation/cvMesh/Make/options b/applications/utilities/mesh/generation/cvMesh/Make/options
new file mode 100644
index 0000000000000000000000000000000000000000..9461fa3725d8b76cc7cdce5cc102b5aa1933bdbf
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/Make/options
@@ -0,0 +1,38 @@
+EXE_DEBUG = -DFULLDEBUG -g -O0
+EXE_FROUNDING_MATH = -frounding-math
+EXE_NDEBUG = -DNDEBUG
+
+CGAL_EXACT = /*-DCGAL_DONT_USE_LAZY_KERNEL*/
+CGAL_INEXACT = -DCGAL_INEXACT
+
+include $(GENERAL_RULES)/CGAL
+
+EXE_INC = \
+    ${EXE_FROUNDING_MATH} \
+    ${EXE_NDEBUG} \
+    ${CGAL_INEXACT} \
+    ${CGAL_INC} \
+    -IconformalVoronoiMesh/lnInclude \
+    -I$(LIB_SRC)/finiteVolume/lnInclude \
+    -I$(LIB_SRC)/meshTools/lnInclude \
+    -I$(LIB_SRC)/parallel/decompose/decompositionMethods/lnInclude \
+    -I$(LIB_SRC)/edgeMesh/lnInclude \
+    -I$(LIB_SRC)/fileFormats/lnInclude \
+    -I$(LIB_SRC)/dynamicMesh/lnInclude \
+    -I$(LIB_SRC)/triSurface/lnInclude \
+    -I$(LIB_SRC)/sampling/lnInclude \
+    -IvectorTools
+
+EXE_LIBS = \
+    $(CGAL_LIBS) \
+    -lboost_thread \
+    -lmpfr \
+    -lconformalVoronoiMesh \
+    -lmeshTools \
+    -ldecompositionMethods \
+    -L$(FOAM_LIBBIN)/dummy -lptscotchDecomp \
+    -ledgeMesh \
+    -lfileFormats \
+    -ltriSurface \
+    -ldynamicMesh \
+    -lsampling
diff --git a/applications/utilities/mesh/generation/cvMesh/cellSizeAndAlignmentGrid/Make/files b/applications/utilities/mesh/generation/cvMesh/cellSizeAndAlignmentGrid/Make/files
new file mode 100644
index 0000000000000000000000000000000000000000..83b77fdc77ee07fc46cfc37752b42d613bce8154
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/cellSizeAndAlignmentGrid/Make/files
@@ -0,0 +1,2 @@
+cellSizeAndAlignmentGrid.C
+EXE = $(FOAM_USER_APPBIN)/cellSizeAndAlignmentGrid
diff --git a/applications/utilities/mesh/generation/cvMesh/cellSizeAndAlignmentGrid/Make/options b/applications/utilities/mesh/generation/cvMesh/cellSizeAndAlignmentGrid/Make/options
new file mode 100644
index 0000000000000000000000000000000000000000..31d0d80858fad570a1809d938b72a86a074ab71b
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/cellSizeAndAlignmentGrid/Make/options
@@ -0,0 +1,40 @@
+EXE_DEBUG = -DFULLDEBUG -g -O0
+EXE_FROUNDING_MATH = -frounding-math
+EXE_NDEBUG = -DNDEBUG
+
+CGAL_EXACT = /*-DCGAL_DONT_USE_LAZY_KERNEL*/
+CGAL_INEXACT = -DCGAL_INEXACT
+
+include $(GENERAL_RULES)/CGAL
+
+
+EXE_INC =  \
+    ${EXE_FROUNDING_MATH} \
+    ${EXE_NDEBUG} \
+    ${CGAL_INEXACT} \
+    ${CGAL_INC} \
+    -I$(LIB_SRC)/finiteVolume/lnInclude \
+    -I$(LIB_SRC)/dynamicMesh/lnInclude \
+    -I$(LIB_SRC)/triSurface/lnInclude \
+    -I$(LIB_SRC)/fileFormats/lnInclude \
+    -I$(LIB_SRC)/sampling/lnInclude \
+    -I$(LIB_SRC)/meshTools/lnInclude \
+    -I$(LIB_SRC)/parallel/decompose/decompositionMethods/lnInclude \
+    -I$(LIB_SRC)/edgeMesh/lnInclude \
+    -I$(HOME)/OpenFOAM/OpenFOAM-dev/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/lnInclude \
+    -I$(HOME)/OpenFOAM/OpenFOAM-dev/applications/utilities/mesh/generation/cvMesh/vectorTools
+
+EXE_LIBS =  \
+    $(CGAL_LIBS) \
+    -lmpfr \
+    -lboost_thread \
+    -lconformalVoronoiMesh \
+    -lfiniteVolume    \
+    -lmeshTools \
+    -ldecompositionMethods \
+    -L$(FOAM_LIBBIN)/dummy -lptscotchDecomp \
+    -ledgeMesh \
+    -ltriSurface \
+    -ldynamicMesh \
+    -lsampling \
+    -lfileFormats
diff --git a/applications/utilities/mesh/generation/cvMesh/cellSizeAndAlignmentGrid/cellSizeAndAlignmentGrid.C b/applications/utilities/mesh/generation/cvMesh/cellSizeAndAlignmentGrid/cellSizeAndAlignmentGrid.C
new file mode 100644
index 0000000000000000000000000000000000000000..454416299d2d2539171dbd73023db41d4cf00cc2
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/cellSizeAndAlignmentGrid/cellSizeAndAlignmentGrid.C
@@ -0,0 +1,716 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012-2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Application
+    Test-distributedDelaunayMesh
+
+Description
+
+\*---------------------------------------------------------------------------*/
+
+#include "CGALTriangulation3DKernel.H"
+
+#include "indexedVertex.H"
+#include "indexedCell.H"
+
+#include "argList.H"
+#include "Time.H"
+#include "DistributedDelaunayMesh.H"
+#include "backgroundMeshDecomposition.H"
+#include "searchableSurfaces.H"
+#include "conformationSurfaces.H"
+#include "PrintTable.H"
+#include "Random.H"
+#include "boundBox.H"
+#include "point.H"
+#include "cellShapeControlMesh.H"
+#include "triadField.H"
+#include "scalarIOField.H"
+#include "pointIOField.H"
+#include "triadIOField.H"
+
+using namespace Foam;
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+// Main program:
+
+template <class Triangulation, class Type>
+Foam::tmp<Foam::Field<Type> > filterFarPoints
+(
+    const Triangulation& mesh,
+    const Field<Type>& field
+)
+{
+    tmp<Field<Type> > tNewField(new Field<Type>(field.size()));
+    Field<Type>& newField = tNewField();
+
+    label added = 0;
+    label count = 0;
+
+    for
+    (
+        typename Triangulation::Finite_vertices_iterator vit =
+            mesh.finite_vertices_begin();
+        vit != mesh.finite_vertices_end();
+        ++vit
+    )
+    {
+        if (vit->real())
+        {
+            newField[added++] = field[count];
+        }
+
+        count++;
+    }
+
+    newField.resize(added);
+
+    return tNewField;
+}
+
+
+template <class T>
+autoPtr<mapDistribute> buildMap
+(
+    const T& mesh,
+    labelListList& pointPoints
+)
+{
+    pointPoints.setSize(mesh.vertexCount());
+
+    globalIndex globalIndexing(mesh.vertexCount());
+
+    for
+    (
+        typename T::Finite_vertices_iterator vit = mesh.finite_vertices_begin();
+        vit != mesh.finite_vertices_end();
+        ++vit
+    )
+    {
+        if (!vit->real())
+        {
+            continue;
+        }
+
+        std::list<typename T::Vertex_handle> adjVerts;
+        mesh.finite_adjacent_vertices(vit, std::back_inserter(adjVerts));
+
+        DynamicList<label> indices(adjVerts.size());
+
+        for
+        (
+            typename std::list<typename T::Vertex_handle>::const_iterator
+                adjVertI = adjVerts.begin();
+            adjVertI != adjVerts.end();
+            ++adjVertI
+        )
+        {
+            typename T::Vertex_handle vh = *adjVertI;
+
+            if (!vh->farPoint())
+            {
+                indices.append
+                (
+                    globalIndexing.toGlobal(vh->procIndex(), vh->index())
+                );
+            }
+        }
+
+        pointPoints[vit->index()].transfer(indices);
+    }
+
+    List<Map<label> > compactMap;
+
+    return autoPtr<mapDistribute>
+    (
+        new mapDistribute
+        (
+            globalIndexing,
+            pointPoints,
+            compactMap
+        )
+    );
+}
+
+
+template <class T>
+Foam::tmp<Foam::triadField> buildAlignmentField(const T& mesh)
+{
+    tmp<triadField> tAlignments
+    (
+        new triadField(mesh.vertexCount(), triad::unset)
+    );
+    triadField& alignments = tAlignments();
+
+    for
+    (
+        typename T::Finite_vertices_iterator vit = mesh.finite_vertices_begin();
+        vit != mesh.finite_vertices_end();
+        ++vit
+    )
+    {
+        if (!vit->real())
+        {
+            continue;
+        }
+
+        alignments[vit->index()] = vit->alignment();
+    }
+
+    return tAlignments;
+}
+
+
+template <class T>
+Foam::tmp<Foam::pointField> buildPointField(const T& mesh)
+{
+    tmp<pointField> tPoints
+    (
+        new pointField(mesh.vertexCount(), point(GREAT, GREAT, GREAT))
+    );
+    pointField& points = tPoints();
+
+    for
+    (
+        typename T::Finite_vertices_iterator vit = mesh.finite_vertices_begin();
+        vit != mesh.finite_vertices_end();
+        ++vit
+    )
+    {
+        if (!vit->real())
+        {
+            continue;
+        }
+
+        points[vit->index()] = topoint(vit->point());
+    }
+
+    return tPoints;
+}
+
+
+void refine
+(
+    cellShapeControlMesh& mesh,
+    const conformationSurfaces& geometryToConformTo,
+    const label maxRefinementIterations,
+    const scalar defaultCellSize
+)
+{
+    for (label iter = 0; iter < maxRefinementIterations; ++iter)
+    {
+        DynamicList<point> ptsToInsert;
+
+        for
+        (
+            CellSizeDelaunay::Finite_cells_iterator cit =
+                mesh.finite_cells_begin();
+            cit != mesh.finite_cells_end();
+            ++cit
+        )
+        {
+            const point newPoint =
+                topoint
+                (
+                    CGAL::centroid
+                    (
+                        cit->vertex(0)->point(),
+                        cit->vertex(1)->point(),
+                        cit->vertex(2)->point(),
+                        cit->vertex(3)->point()
+                    )
+                );
+
+            if (geometryToConformTo.inside(newPoint))
+            {
+                ptsToInsert.append(newPoint);
+            }
+        }
+
+        Info<< "    Adding " << returnReduce(ptsToInsert.size(), sumOp<label>())
+            << endl;
+
+        forAll(ptsToInsert, ptI)
+        {
+            mesh.insert
+            (
+                ptsToInsert[ptI],
+                defaultCellSize,
+                triad::unset,
+                Vb::vtInternal
+            );
+        }
+    }
+}
+
+
+int main(int argc, char *argv[])
+{
+    #include "setRootCase.H"
+    #include "createTime.H"
+
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+    label maxRefinementIterations = 2;
+    label maxSmoothingIterations = 200;
+    scalar minResidual = 0;
+    scalar defaultCellSize = 0.001;
+    scalar nearFeatDistSqrCoeff = 1e-8;
+
+
+    // Need to decouple vertex and cell type from this class?
+    // Vertex must have:
+    // + index
+    // + procIndex
+    // - type should be optional
+    cellShapeControlMesh mesh(runTime);
+
+    IOdictionary cvMeshDict
+    (
+        IOobject
+        (
+            "cvMeshDict",
+            runTime.system(),
+            runTime,
+            IOobject::MUST_READ,
+            IOobject::NO_WRITE
+        )
+    );
+
+    Random rndGen(64293*Pstream::myProcNo());
+
+    searchableSurfaces allGeometry
+    (
+        IOobject
+        (
+            "cvSearchableSurfaces",
+            runTime.constant(),
+            "triSurface",
+            runTime,
+            IOobject::MUST_READ,
+            IOobject::NO_WRITE
+        ),
+        cvMeshDict.subDict("geometry")
+    );
+
+    conformationSurfaces geometryToConformTo
+    (
+        runTime,
+        rndGen,
+        allGeometry,
+        cvMeshDict.subDict("surfaceConformation")
+    );
+
+    autoPtr<backgroundMeshDecomposition> bMesh;
+    if (Pstream::parRun())
+    {
+        bMesh.set
+        (
+            new backgroundMeshDecomposition
+            (
+                runTime,
+                rndGen,
+                geometryToConformTo,
+                cvMeshDict.subDict("backgroundMeshDecomposition")
+            )
+        );
+    }
+
+    // Nice to have IO for the delaunay mesh
+    // IO depend on vertex type.
+    //
+    // Define a delaunay mesh as:
+    // + list of points of the triangulation
+    // + optionally a list of cells
+
+    Info<< nl << "Loop over surfaces" << endl;
+
+    forAll(geometryToConformTo.surfaces(), sI)
+    {
+        const label surfI = geometryToConformTo.surfaces()[sI];
+
+        const searchableSurface& surface =
+            geometryToConformTo.geometry()[surfI];
+
+        Info<< nl << "Inserting points from surface " << surface.name()
+            << " (" << surface.type() << ")" << endl;
+
+        const tmp<pointField> tpoints(surface.points());
+        const pointField& points = tpoints();
+
+        Info<< "    Number of points = " << points.size() << endl;
+
+        forAll(points, pI)
+        {
+            // Is the point in the extendedFeatureEdgeMesh? If so get the
+            // point normal, otherwise get the surface normal from
+            // searchableSurface
+
+            pointIndexHit info;
+            label infoFeature;
+            geometryToConformTo.findFeaturePointNearest
+            (
+                points[pI],
+                nearFeatDistSqrCoeff,
+                info,
+                infoFeature
+            );
+
+
+            autoPtr<triad> pointAlignment;
+
+            if (info.hit())
+            {
+                const extendedFeatureEdgeMesh& features =
+                    geometryToConformTo.features()[infoFeature];
+
+                vectorField norms = features.featurePointNormals(info.index());
+
+                // Create a triad from these norms.
+                pointAlignment.set(new triad());
+                forAll(norms, nI)
+                {
+                    pointAlignment() += norms[nI];
+                }
+
+                pointAlignment().normalize();
+                pointAlignment().orthogonalize();
+            }
+            else
+            {
+                geometryToConformTo.findEdgeNearest
+                (
+                    points[pI],
+                    nearFeatDistSqrCoeff,
+                    info,
+                    infoFeature
+                );
+
+                if (info.hit())
+                {
+                    const extendedFeatureEdgeMesh& features =
+                        geometryToConformTo.features()[infoFeature];
+
+                    vectorField norms = features.edgeNormals(info.index());
+
+                    // Create a triad from these norms.
+                    pointAlignment.set(new triad());
+                    forAll(norms, nI)
+                    {
+                        pointAlignment() += norms[nI];
+                    }
+
+                    pointAlignment().normalize();
+                    pointAlignment().orthogonalize();
+                }
+                else
+                {
+                    pointField ptField(1, points[pI]);
+                    scalarField distField(1, nearFeatDistSqrCoeff);
+                    List<pointIndexHit> infoList(1, pointIndexHit());
+
+                    surface.findNearest(ptField, distField, infoList);
+
+                    vectorField normals(1);
+                    surface.getNormal(infoList, normals);
+
+                    pointAlignment.set(new triad(normals[0]));
+                }
+            }
+
+            if (Pstream::parRun())
+            {
+                if (bMesh().positionOnThisProcessor(points[pI]))
+                {
+                    CellSizeDelaunay::Vertex_handle vh = mesh.insert
+                    (
+                        points[pI],
+                        defaultCellSize,
+                        pointAlignment(),
+                        Vb::vtInternalNearBoundary
+                    );
+                }
+            }
+            else
+            {
+                CellSizeDelaunay::Vertex_handle vh = mesh.insert
+                (
+                    points[pI],
+                    defaultCellSize,
+                    pointAlignment(),
+                    Vb::vtInternalNearBoundary
+                );
+            }
+        }
+    }
+
+
+    // Refine the mesh
+    refine
+    (
+        mesh,
+        geometryToConformTo,
+        maxRefinementIterations,
+        defaultCellSize
+    );
+
+
+    if (Pstream::parRun())
+    {
+        mesh.distribute(bMesh);
+    }
+
+
+    labelListList pointPoints;
+    autoPtr<mapDistribute> meshDistributor = buildMap(mesh, pointPoints);
+
+
+    triadField alignments(buildAlignmentField(mesh));
+    pointField points(buildPointField(mesh));
+
+    mesh.printInfo(Info);
+
+
+    // Setup the sizes and alignments on each point
+    triadField fixedAlignments(mesh.vertexCount(), triad::unset);
+
+    for
+    (
+        CellSizeDelaunay::Finite_vertices_iterator vit =
+            mesh.finite_vertices_begin();
+        vit != mesh.finite_vertices_end();
+        ++vit
+    )
+    {
+        if (vit->nearBoundary())
+        {
+            fixedAlignments[vit->index()] = vit->alignment();
+        }
+    }
+
+    Info<< nl << "Smoothing alignments" << endl;
+
+    for (label iter = 0; iter < maxSmoothingIterations; iter++)
+    {
+        Info<< "Iteration " << iter;
+
+        meshDistributor().distribute(points);
+        meshDistributor().distribute(alignments);
+
+        scalar residual = 0;
+
+        triadField triadAv(alignments.size(), triad::unset);
+
+        forAll(pointPoints, pI)
+        {
+            const labelList& pPoints = pointPoints[pI];
+
+            if (pPoints.empty())
+            {
+                continue;
+            }
+
+            const triad& oldTriad = alignments[pI];
+            triad& newTriad = triadAv[pI];
+
+            // Enforce the boundary conditions
+            const triad& fixedAlignment = fixedAlignments[pI];
+
+            forAll(pPoints, adjPointI)
+            {
+                const label adjPointIndex = pPoints[adjPointI];
+
+                scalar dist = mag(points[pI] - points[adjPointIndex]);
+
+//                dist = max(dist, SMALL);
+
+                triad tmpTriad = alignments[adjPointIndex];
+
+                for (direction dir = 0; dir < 3; dir++)
+                {
+                    if (tmpTriad.set(dir))
+                    {
+                        tmpTriad[dir] *= (1.0/dist);
+                    }
+                }
+
+                newTriad += tmpTriad;
+            }
+
+            newTriad.normalize();
+            newTriad.orthogonalize();
+//            newTriad = newTriad.sortxyz();
+
+            label nFixed = 0;
+
+            forAll(fixedAlignment, dirI)
+            {
+                if (fixedAlignment.set(dirI))
+                {
+                    nFixed++;
+                }
+            }
+
+            if (nFixed == 1)
+            {
+                forAll(fixedAlignment, dirI)
+                {
+                    if (fixedAlignment.set(dirI))
+                    {
+                        newTriad.align(fixedAlignment[dirI]);
+                    }
+                }
+            }
+            else if (nFixed == 2)
+            {
+                forAll(fixedAlignment, dirI)
+                {
+                    if (fixedAlignment.set(dirI))
+                    {
+                        newTriad[dirI] = fixedAlignment[dirI];
+                    }
+                    else
+                    {
+                        newTriad[dirI] = triad::unset[dirI];
+                    }
+                }
+
+                newTriad.orthogonalize();
+            }
+            else if (nFixed == 3)
+            {
+                forAll(fixedAlignment, dirI)
+                {
+                    if (fixedAlignment.set(dirI))
+                    {
+                        newTriad[dirI] = fixedAlignment[dirI];
+                    }
+                }
+            }
+
+            for (direction dir = 0; dir < 3; ++dir)
+            {
+                if
+                (
+                    newTriad.set(dir)
+                 && oldTriad.set(dir)
+                 //&& !fixedAlignment.set(dir)
+                )
+                {
+                    scalar dotProd = (oldTriad[dir] & newTriad[dir]);
+                    scalar diff = mag(dotProd) - 1.0;
+
+                    residual += mag(diff);
+                }
+            }
+        }
+
+        forAll(alignments, pI)
+        {
+            alignments[pI] = triadAv[pI].sortxyz();
+        }
+
+        reduce(residual, sumOp<scalar>());
+
+        Info<< ", Residual = " << residual << endl;
+
+        if (residual <= minResidual)
+        {
+            break;
+        }
+    }
+
+
+    // Write alignments to a .obj file
+    OFstream str(runTime.path()/"alignments.obj");
+
+    forAll(alignments, pI)
+    {
+        const triad& tri = alignments[pI];
+
+        if (tri.set())
+        {
+            forAll(tri, dirI)
+            {
+                meshTools::writeOBJ(str, points[pI], tri[dirI] + points[pI]);
+            }
+        }
+    }
+
+
+    // Remove the far points
+    pointIOField pointsIO
+    (
+        IOobject
+        (
+            "points",
+            runTime.constant(),
+            runTime,
+            IOobject::NO_READ,
+            IOobject::AUTO_WRITE
+        ),
+        filterFarPoints(mesh, points)
+    );
+
+    scalarField sizes(points.size(), defaultCellSize);
+    scalarIOField sizesIO
+    (
+        IOobject
+        (
+            "sizes",
+            runTime.constant(),
+            runTime,
+            IOobject::NO_READ,
+            IOobject::AUTO_WRITE
+        ),
+        filterFarPoints(mesh, sizes)
+    );
+
+    triadIOField alignmentsIO
+    (
+        IOobject
+        (
+            "alignments",
+            runTime.constant(),
+            runTime,
+            IOobject::NO_READ,
+            IOobject::AUTO_WRITE
+        ),
+        filterFarPoints(mesh, alignments)
+    );
+
+    pointsIO.write();
+    sizesIO.write();
+    alignmentsIO.write();
+
+    Info<< nl << "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
+        << "  ClockTime = " << runTime.elapsedClockTime() << " s"
+        << nl << endl;
+
+    Info<< "\nEnd\n" << endl;
+
+    return 0;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/checkCvMesh/meshQualityDict b/applications/utilities/mesh/generation/cvMesh/checkCvMesh/meshQualityDict
new file mode 100644
index 0000000000000000000000000000000000000000..fa5319e087c5e36fe7c3cd93d3a69d5ebc75463e
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/checkCvMesh/meshQualityDict
@@ -0,0 +1,73 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+
+FoamFile
+{
+    version         2.0;
+    format          ascii;
+
+    root            "";
+    case            "";
+    instance        "";
+    local           "";
+
+    class           dictionary;
+    object          meshQualityDict;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+//- Maximum non-orthogonality allowed. Set to 180 to disable.
+maxNonOrtho         65;
+
+//- Max skewness allowed. Set to <0 to disable.
+maxBoundarySkewness 50;
+maxInternalSkewness 10;
+
+//- Max concaveness allowed. Is angle (in degrees) below which concavity
+//  is allowed. 0 is straight face, <0 would be convex face.
+//  Set to 180 to disable.
+maxConcave          80;
+
+//- Minimum quality of the tet formed by the face-centre
+//  and variable base point minimum decomposition triangles and
+//  the cell centre. This has to be a positive number for tracking
+//  to work. Set to very negative number (e.g. -1E30) to
+//  disable.
+//     <0 = inside out tet,
+//      0 = flat tet
+//      1 = regular tet
+minTetQuality       1e-30;
+
+//- Minimum pyramid volume. Is absolute volume of cell pyramid.
+//  Set to a sensible fraction of the smallest cell volume expected.
+//  Set to very negative number (e.g. -1E30) to disable.
+minVol              1e-20;
+
+//- Minimum face area. Set to <0 to disable.
+minArea             -1;
+
+//- Minimum face twist. Set to <-1 to disable. dot product of face normal
+//- and face centre triangles normal
+minTwist            0.001;
+
+//- minimum normalised cell determinant
+//- 1 = hex, <= 0 = folded or flattened illegal cell
+minDeterminant      0.001;
+
+//- minFaceWeight (0 -> 0.5)
+minFaceWeight       0.02;
+
+//- minVolRatio (0 -> 1)
+minVolRatio         0.01;
+
+//must be >0 for Fluent compatibility
+minTriangleTwist    -1;
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/DelaunayMesh/DelaunayMesh.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/DelaunayMesh/DelaunayMesh.C
new file mode 100644
index 0000000000000000000000000000000000000000..a0327ce04f9b5e7b7cc622a0190115b6d21f7be7
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/DelaunayMesh/DelaunayMesh.C
@@ -0,0 +1,233 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "DelaunayMesh.H"
+#include "labelPair.H"
+#include "PrintTable.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+
+// * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * * //
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+template<class Triangulation>
+Foam::DelaunayMesh<Triangulation>::DelaunayMesh()
+:
+    Triangulation(),
+    vertexCount_(0),
+    cellCount_(0)
+{}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+template<class Triangulation>
+Foam::DelaunayMesh<Triangulation>::~DelaunayMesh()
+{}
+
+
+// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
+
+
+// * * * * * * * * * * * * Protected Member Functions  * * * * * * * * * * * //
+
+
+// * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * * //
+
+template<class Triangulation>
+void Foam::DelaunayMesh<Triangulation>::reset()
+{
+    Info<< "Clearing triangulation" << endl;
+
+    this->clear();
+
+    resetVertexCount();
+    resetCellCount();
+}
+
+
+template<class Triangulation>
+void Foam::DelaunayMesh<Triangulation>::insertPoints(const List<Vb>& vertices)
+{
+    rangeInsertWithInfo
+    (
+        vertices.begin(),
+        vertices.end(),
+        true
+    );
+}
+
+
+template<class Triangulation>
+bool Foam::DelaunayMesh<Triangulation>::Traits_for_spatial_sort::Less_x_3::
+operator()
+(
+    const Point_3& p,
+    const Point_3& q
+) const
+{
+    return typename Gt::Less_x_3()(*(p.first), *(q.first));
+}
+
+template<class Triangulation>
+bool Foam::DelaunayMesh<Triangulation>::Traits_for_spatial_sort::Less_y_3::
+operator()
+(
+    const Point_3& p,
+    const Point_3& q
+) const
+{
+    return typename Gt::Less_y_3()(*(p.first), *(q.first));
+}
+
+template<class Triangulation>
+bool Foam::DelaunayMesh<Triangulation>::Traits_for_spatial_sort::Less_z_3::
+operator()
+(
+    const Point_3& p,
+    const Point_3& q
+) const
+{
+    return typename Gt::Less_z_3()(*(p.first), *(q.first));
+}
+
+template<class Triangulation>
+typename Foam::DelaunayMesh<Triangulation>::Traits_for_spatial_sort::Less_x_3
+Foam::DelaunayMesh<Triangulation>::Traits_for_spatial_sort::less_x_3_object()
+const
+{
+    return Less_x_3();
+}
+
+template<class Triangulation>
+typename Foam::DelaunayMesh<Triangulation>::Traits_for_spatial_sort::Less_y_3
+Foam::DelaunayMesh<Triangulation>::Traits_for_spatial_sort::less_y_3_object()
+const
+{
+    return Less_y_3();
+}
+
+template<class Triangulation>
+typename Foam::DelaunayMesh<Triangulation>::Traits_for_spatial_sort::Less_z_3
+Foam::DelaunayMesh<Triangulation>::Traits_for_spatial_sort::less_z_3_object()
+const
+{
+    return Less_z_3();
+}
+
+
+template<class Triangulation>
+template<class PointIterator>
+void Foam::DelaunayMesh<Triangulation>::rangeInsertWithInfo
+(
+    PointIterator begin,
+    PointIterator end,
+    bool printErrors
+)
+{
+    typedef DynamicList
+    <
+        std::pair
+        <
+            const typename Triangulation::Point*,
+            label
+        >
+    > vectorPairPointIndex;
+
+    vectorPairPointIndex points;
+
+    label count = 0;
+    for (PointIterator it = begin; it != end; ++it)
+    {
+        points.append
+        (
+            std::make_pair(&(it->point()), count++)
+        );
+    }
+
+    std::random_shuffle(points.begin(), points.end());
+
+    spatial_sort
+    (
+        points.begin(),
+        points.end(),
+        Traits_for_spatial_sort()
+    );
+
+    Vertex_handle hint;
+
+    for
+    (
+        typename vectorPairPointIndex::const_iterator p = points.begin();
+        p != points.end();
+        ++p
+    )
+    {
+        const size_t checkInsertion = Triangulation::number_of_vertices();
+
+        hint = this->insert(*(p->first), hint);
+
+        const Vb& vert = *(begin + p->second);
+
+        if (checkInsertion != Triangulation::number_of_vertices() - 1)
+        {
+            if (printErrors)
+            {
+                Vertex_handle nearV =
+                    Triangulation::nearest_vertex(*(p->first));
+
+                Pout<< "Failed insertion : " << vert.info()
+                    << "         nearest : " << nearV->info();
+            }
+        }
+        else
+        {
+            hint->index() = getNewVertexIndex();
+            hint->type() = vert.type();
+            hint->procIndex() = vert.procIndex();
+            hint->targetCellSize() = vert.targetCellSize();
+            hint->alignment() = vert.alignment();
+        }
+    }
+}
+
+
+// * * * * * * * * * * * * * * Member Operators  * * * * * * * * * * * * * * //
+
+
+// * * * * * * * * * * * * * * Friend Functions  * * * * * * * * * * * * * * //
+
+
+// * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * * //
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#include "DelaunayMeshIO.C"
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/DelaunayMesh/DelaunayMesh.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/DelaunayMesh/DelaunayMesh.H
new file mode 100644
index 0000000000000000000000000000000000000000..bdeee880e78e1b5bfc9fdf6b0ae7050c915453eb
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/DelaunayMesh/DelaunayMesh.H
@@ -0,0 +1,238 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::DelaunayMesh
+
+Description
+    The vertex and cell classes must have an index defined
+
+SourceFiles
+    DelaunayMeshI.H
+    DelaunayMesh.C
+    DelaunayMeshIO.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef DelaunayMesh_H
+#define DelaunayMesh_H
+
+#include "Pair.H"
+#include "HashSet.H"
+#include "FixedList.H"
+#include "boundBox.H"
+#include "indexedVertex.H"
+#include "CGALTriangulation3Ddefs.H"
+#include "autoPtr.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+class fvMesh;
+
+/*---------------------------------------------------------------------------*\
+                        Class DelaunayMesh Declaration
+\*---------------------------------------------------------------------------*/
+
+template<class Triangulation>
+class DelaunayMesh
+:
+    public Triangulation
+{
+public:
+
+        typedef typename Triangulation::Cell_handle Cell_handle;
+        typedef typename Triangulation::Vertex_handle Vertex_handle;
+        typedef typename Triangulation::Point Point;
+        typedef typename Triangulation::Facet Facet;
+
+        typedef typename Triangulation::Finite_vertices_iterator
+            Finite_vertices_iterator;
+        typedef typename Triangulation::Finite_cells_iterator
+            Finite_cells_iterator;
+        typedef typename Triangulation::Finite_facets_iterator
+            Finite_facets_iterator;
+
+        typedef HashSet
+        <
+           Pair<label>,
+           FixedList<label, 2>::Hash<>
+        > labelPairHashSet;
+
+
+private:
+
+    // Private data
+
+        //- Keep track of the number of vertices that have been added.
+        //  This allows a unique index to be assigned to each vertex.
+        mutable label vertexCount_;
+
+        //- Keep track of the number of cells that have been added.
+        //  This allows a unique index to be assigned to each cell.
+        mutable label cellCount_;
+
+        //- Spatial sort traits to use with a pair of point pointers and an int.
+        //  Taken from a post on the CGAL lists: 2010-01/msg00004.html by
+        //  Sebastien Loriot (Geometry Factory).
+        struct Traits_for_spatial_sort
+        :
+            public Triangulation::Geom_traits
+        {
+            typedef typename Triangulation::Geom_traits Gt;
+
+            typedef std::pair<const typename Triangulation::Point*, int>
+                Point_3;
+
+            struct Less_x_3
+            {
+                bool operator()(const Point_3& p, const Point_3& q) const;
+            };
+
+            struct Less_y_3
+            {
+                bool operator()(const Point_3& p, const Point_3& q) const;
+            };
+
+            struct Less_z_3
+            {
+                bool operator()(const Point_3& p, const Point_3& q) const;
+            };
+
+            Less_x_3 less_x_3_object() const;
+            Less_y_3 less_y_3_object() const;
+            Less_z_3 less_z_3_object() const;
+        };
+
+
+    // Private Member Functions
+
+        void sortFaces
+        (
+            faceList& faces,
+            labelList& owner,
+            labelList& neighbour
+        ) const;
+
+        void addPatches
+        (
+            const label nInternalFaces,
+            faceList& faces,
+            labelList& owner,
+            labelList& patchSizes,
+            labelList& patchStarts,
+            const List<DynamicList<face> >& patchFaces,
+            const List<DynamicList<label> >& patchOwners
+        ) const;
+
+        //- Disallow default bitwise copy construct
+        DelaunayMesh(const DelaunayMesh<Triangulation>&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const DelaunayMesh<Triangulation>&);
+
+
+public:
+
+    // Constructors
+
+        //- Construct from components
+        DelaunayMesh();
+
+
+    //- Destructor
+    ~DelaunayMesh();
+
+
+    // Member Functions
+
+        inline label getNewVertexIndex() const;
+
+        inline label getNewCellIndex() const;
+
+        inline label cellCount() const;
+
+        inline void resetCellCount();
+
+        inline label vertexCount() const;
+
+        inline void resetVertexCount();
+
+
+        //- Remove the entire triangulation
+        void reset();
+
+        void insertPoints(const List<Vb>& vertices);
+
+        //- Function inserting points into a triangulation and setting the
+        //  index and type data of the point in the correct order. This is
+        //  faster than inserting points individually.
+        //
+        //  Adapted from a post on the CGAL lists: 2010-01/msg00004.html by
+        //  Sebastien Loriot (Geometry Factory).
+        template<class PointIterator>
+        void rangeInsertWithInfo
+        (
+            PointIterator begin,
+            PointIterator end,
+            bool printErrors = true
+        );
+
+
+    // Queries
+
+        void printInfo(Ostream& os) const;
+
+        //- Create an fvMesh from the triangulation.
+        //  The mesh is not parallel consistent - only used for viewing
+        autoPtr<fvMesh> createMesh
+        (
+            const fileName& name,
+            const Time& runTime,
+            labelList& vertexMap,
+            labelList& cellMap
+        ) const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#include "DelaunayMeshI.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+#   include "DelaunayMesh.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/DelaunayMesh/DelaunayMeshI.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/DelaunayMesh/DelaunayMeshI.H
new file mode 100644
index 0000000000000000000000000000000000000000..841e5c9024b5954e80a897148c00e4c3bfea3e4e
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/DelaunayMesh/DelaunayMeshI.H
@@ -0,0 +1,119 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+
+// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * //
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+template<class Triangulation>
+inline Foam::label Foam::DelaunayMesh<Triangulation>::getNewVertexIndex() const
+{
+    label id = vertexCount_++;
+
+    if (id == labelMax)
+    {
+        WarningIn
+        (
+            "Foam::DelaunayMesh<Triangulation>::getNewVertexIndex() const"
+        )   << "Vertex counter has overflowed." << endl;
+    }
+
+    return id;
+}
+
+
+template<class Triangulation>
+inline Foam::label Foam::DelaunayMesh<Triangulation>::getNewCellIndex() const
+{
+    label id = cellCount_++;
+
+    if (id == labelMax)
+    {
+        WarningIn
+        (
+            "Foam::DelaunayMesh<Triangulation>::getNewCellIndex() const"
+        )   << "Cell counter has overflowed." << endl;
+    }
+
+    return id;
+}
+
+
+template<class Triangulation>
+Foam::label Foam::DelaunayMesh<Triangulation>::cellCount() const
+{
+    return cellCount_;
+}
+
+
+template<class Triangulation>
+void Foam::DelaunayMesh<Triangulation>::resetCellCount()
+{
+    cellCount_ = 0;
+}
+
+
+template<class Triangulation>
+Foam::label Foam::DelaunayMesh<Triangulation>::vertexCount() const
+{
+    return vertexCount_;
+}
+
+
+template<class Triangulation>
+void Foam::DelaunayMesh<Triangulation>::resetVertexCount()
+{
+    vertexCount_ = 0;
+}
+
+
+// * * * * * * * * * * * * * * * Member Operators  * * * * * * * * * * * * * //
+
+
+// * * * * * * * * * * * * * * * Friend Functions  * * * * * * * * * * * * * //
+
+
+// * * * * * * * * * * * * * * * Friend Operators  * * * * * * * * * * * * * //
+
+
+// * * * * * * * * * * * * * * IOstream Operators  * * * * * * * * * * * * * //
+
+
+// * * * * * * * * * * * * * * * Ostream Operator  * * * * * * * * * * * * * //
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/DelaunayMesh/DelaunayMeshIO.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/DelaunayMesh/DelaunayMeshIO.C
new file mode 100644
index 0000000000000000000000000000000000000000..63a9889308ee3273e0b372f886edd6efd3e10d51
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/DelaunayMesh/DelaunayMeshIO.C
@@ -0,0 +1,391 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "DelaunayMesh.H"
+#include "fvMesh.H"
+#include "pointConversion.H"
+#include "wallPolyPatch.H"
+#include "processorPolyPatch.H"
+
+// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
+
+template<class Triangulation>
+void Foam::DelaunayMesh<Triangulation>::sortFaces
+(
+    faceList& faces,
+    labelList& owner,
+    labelList& neighbour
+) const
+{
+    // Upper triangular order:
+    // + owner is sorted in ascending cell order
+    // + within each block of equal value for owner, neighbour is sorted in
+    //   ascending cell order.
+    // + faces sorted to correspond
+    // e.g.
+    // owner | neighbour
+    // 0     | 2
+    // 0     | 23
+    // 0     | 71
+    // 1     | 23
+    // 1     | 24
+    // 1     | 91
+
+    List<labelPair> ownerNeighbourPair(owner.size());
+
+    forAll(ownerNeighbourPair, oNI)
+    {
+        ownerNeighbourPair[oNI] = labelPair(owner[oNI], neighbour[oNI]);
+    }
+
+    Info<< nl
+        << "Sorting faces, owner and neighbour into upper triangular order"
+        << endl;
+
+    labelList oldToNew;
+
+    sortedOrder(ownerNeighbourPair, oldToNew);
+
+    oldToNew = invert(oldToNew.size(), oldToNew);
+
+    inplaceReorder(oldToNew, faces);
+    inplaceReorder(oldToNew, owner);
+    inplaceReorder(oldToNew, neighbour);
+}
+
+
+template<class Triangulation>
+void Foam::DelaunayMesh<Triangulation>::addPatches
+(
+    const label nInternalFaces,
+    faceList& faces,
+    labelList& owner,
+    labelList& patchSizes,
+    labelList& patchStarts,
+    const List<DynamicList<face> >& patchFaces,
+    const List<DynamicList<label> >& patchOwners
+) const
+{
+    label nPatches = patchFaces.size();
+
+    patchSizes.setSize(nPatches, -1);
+    patchStarts.setSize(nPatches, -1);
+
+    label nBoundaryFaces = 0;
+
+    forAll(patchFaces, p)
+    {
+        patchSizes[p] = patchFaces[p].size();
+        patchStarts[p] = nInternalFaces + nBoundaryFaces;
+
+        nBoundaryFaces += patchSizes[p];
+    }
+
+    faces.setSize(nInternalFaces + nBoundaryFaces);
+    owner.setSize(nInternalFaces + nBoundaryFaces);
+
+    label faceI = nInternalFaces;
+
+    forAll(patchFaces, p)
+    {
+        forAll(patchFaces[p], f)
+        {
+            faces[faceI] = patchFaces[p][f];
+            owner[faceI] = patchOwners[p][f];
+
+            faceI++;
+        }
+    }
+}
+
+
+// * * * * * * * * * * * * * * Member Operators  * * * * * * * * * * * * * * //
+
+template<class Triangulation>
+void Foam::DelaunayMesh<Triangulation>::printInfo(Ostream& os) const
+{
+    PrintTable<word, label> triInfoTable("Mesh Statistics");
+
+    triInfoTable.add("Points", Triangulation::number_of_vertices());
+    triInfoTable.add("Edges", Triangulation::number_of_finite_edges());
+    triInfoTable.add("Faces", Triangulation::number_of_finite_facets());
+    triInfoTable.add("Cells", Triangulation::number_of_finite_cells());
+
+    scalar minSize = GREAT;
+    scalar maxSize = 0;
+
+    for
+    (
+        Finite_vertices_iterator vit = Triangulation::finite_vertices_begin();
+        vit != Triangulation::finite_vertices_end();
+        ++vit
+    )
+    {
+        if (!vit->farPoint())
+        {
+            minSize = min(vit->targetCellSize(), minSize);
+            maxSize = max(vit->targetCellSize(), maxSize);
+        }
+    }
+
+    Info<< incrIndent;
+    triInfoTable.print(Info, true, true);
+
+    Info<< "Size (Min/Max) = "
+        << returnReduce(minSize, minOp<scalar>()) << " "
+        << returnReduce(maxSize, maxOp<scalar>()) << endl;
+
+    Info<< decrIndent;
+}
+
+
+template<class Triangulation>
+Foam::autoPtr<Foam::fvMesh>
+Foam::DelaunayMesh<Triangulation>::createMesh
+(
+    const fileName& name,
+    const Time& runTime,
+    labelList& vertexMap,
+    labelList& cellMap
+) const
+{
+    pointField points(Triangulation::number_of_vertices());
+    faceList faces(Triangulation::number_of_finite_facets());
+    labelList owner(Triangulation::number_of_finite_facets());
+    labelList neighbour(Triangulation::number_of_finite_facets());
+
+    wordList patchNames(1, "cvMesh_defaultPatch");
+    wordList patchTypes(1, wallPolyPatch::typeName);
+
+    labelList patchSizes(1, 0);
+    labelList patchStarts(1, 0);
+
+    List<DynamicList<face> > patchFaces(1, DynamicList<face>());
+    List<DynamicList<label> > patchOwners(1, DynamicList<label>());
+
+    vertexMap.setSize(Triangulation::number_of_vertices());
+    cellMap.setSize(Triangulation::number_of_finite_cells());
+
+    // Calculate pts and a map of point index to location in pts.
+    label vertI = 0;
+
+    for
+    (
+        Finite_vertices_iterator vit = Triangulation::finite_vertices_begin();
+        vit != Triangulation::finite_vertices_end();
+        ++vit
+    )
+    {
+        if (!vit->farPoint())
+        {
+            vertexMap[vit->index()] = vertI;
+            points[vertI] = topoint(vit->point());
+            vertI++;
+        }
+    }
+
+    points.setSize(vertI);
+
+    // Index the cells
+    label cellI = 0;
+
+    for
+    (
+        Finite_cells_iterator cit = Triangulation::finite_cells_begin();
+        cit != Triangulation::finite_cells_end();
+        ++cit
+    )
+    {
+        if
+        (
+            !cit->hasFarPoint()
+         && !Triangulation::is_infinite(cit)
+        )
+        {
+            cellMap[cit->cellIndex()] = cellI++;
+        }
+    }
+
+    label faceI = 0;
+    labelList verticesOnTriFace(3, -1);
+    face newFace(verticesOnTriFace);
+
+    for
+    (
+        Finite_facets_iterator fit = Triangulation::finite_facets_begin();
+        fit != Triangulation::finite_facets_end();
+        ++fit
+    )
+    {
+        const Cell_handle c1(fit->first);
+        const int oppositeVertex = fit->second;
+        const Cell_handle c2(c1->neighbor(oppositeVertex));
+
+        label c1I = Cb::ctFar;
+        bool c1Real = false;
+        if (!c1->hasFarPoint() && !Triangulation::is_infinite(c1))
+        {
+            c1I = cellMap[c1->cellIndex()];
+            c1Real = true;
+        }
+
+        label c2I = Cb::ctFar;
+        bool c2Real = false;
+        if (!c2->hasFarPoint() && !Triangulation::is_infinite(c2))
+        {
+            c2I = cellMap[c2->cellIndex()];
+            c2Real = true;
+        }
+
+        if (!c1Real && !c2Real)
+        {
+            // Both tets are outside, skip
+            continue;
+        }
+
+        label ownerCell = -1;
+        label neighbourCell = -1;
+
+        for (label i = 0; i < 3; i++)
+        {
+            verticesOnTriFace[i] = vertexMap
+            [
+                c1->vertex
+                (
+                    Triangulation::vertex_triple_index(oppositeVertex, i)
+                )->index()
+            ];
+        }
+
+        newFace = face(verticesOnTriFace);
+
+        if (!c1Real || !c2Real)
+        {
+            // Boundary face...
+            if (!c1Real)
+            {
+                //... with c1 outside
+                ownerCell = c2I;
+            }
+            else
+            {
+                // ... with c2 outside
+                ownerCell = c1I;
+
+                reverse(newFace);
+            }
+
+            patchFaces[0].append(newFace);
+            patchOwners[0].append(ownerCell);
+        }
+        else
+        {
+            // Internal face...
+            if (c1I < c2I)
+            {
+                // ...with c1 as the ownerCell
+                ownerCell = c1I;
+                neighbourCell = c2I;
+
+                reverse(newFace);
+            }
+            else
+            {
+                // ...with c2 as the ownerCell
+                ownerCell = c2I;
+                neighbourCell = c1I;
+            }
+
+            faces[faceI] = newFace;
+            owner[faceI] = ownerCell;
+            neighbour[faceI] = neighbourCell;
+            faceI++;
+        }
+    }
+
+    faces.setSize(faceI);
+    owner.setSize(faceI);
+    neighbour.setSize(faceI);
+
+    sortFaces(faces, owner, neighbour);
+
+    addPatches
+    (
+        faceI,
+        faces,
+        owner,
+        patchSizes,
+        patchStarts,
+        patchFaces,
+        patchOwners
+    );
+
+    autoPtr<fvMesh> meshPtr
+    (
+        new fvMesh
+        (
+            IOobject
+            (
+                name,
+                runTime.timeName(),
+                runTime,
+                IOobject::NO_READ,
+                IOobject::NO_WRITE
+            ),
+            xferMove(points),
+            xferMove(faces),
+            xferMove(owner),
+            xferMove(neighbour)
+        )
+    );
+
+    List<polyPatch*> patches(patchStarts.size());
+
+    label nValidPatches = 0;
+
+    forAll(patches, p)
+    {
+        patches[nValidPatches] = polyPatch::New
+        (
+            patchTypes[p],
+            patchNames[p],
+            patchSizes[p],
+            patchStarts[p],
+            nValidPatches,
+            meshPtr().boundaryMesh()
+        ).ptr();
+
+        nValidPatches++;
+    }
+
+    patches.setSize(nValidPatches);
+
+    meshPtr().addFvPatches(patches);
+
+    return meshPtr;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/DelaunayMesh/DistributedDelaunayMesh.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/DelaunayMesh/DistributedDelaunayMesh.C
new file mode 100644
index 0000000000000000000000000000000000000000..b2ed781b8b389e32c165a9fc6cddfcb3d930dc1b
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/DelaunayMesh/DistributedDelaunayMesh.C
@@ -0,0 +1,938 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "DistributedDelaunayMesh.H"
+#include "meshSearch.H"
+#include "mapDistribute.H"
+#include "zeroGradientFvPatchFields.H"
+#include "pointConversion.H"
+#include "indexedVertexEnum.H"
+#include "IOmanip.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+
+// * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * * //
+
+template<class Triangulation>
+Foam::autoPtr<Foam::mapDistribute>
+Foam::DistributedDelaunayMesh<Triangulation>::buildMap
+(
+    const List<label>& toProc
+)
+{
+    // Determine send map
+    // ~~~~~~~~~~~~~~~~~~
+
+    // 1. Count
+    labelList nSend(Pstream::nProcs(), 0);
+
+    forAll(toProc, i)
+    {
+        label procI = toProc[i];
+
+        nSend[procI]++;
+    }
+
+    // Send over how many I need to receive
+    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    labelListList sendSizes(Pstream::nProcs());
+
+    sendSizes[Pstream::myProcNo()] = nSend;
+
+    combineReduce(sendSizes, UPstream::listEq());
+
+    // 2. Size sendMap
+    labelListList sendMap(Pstream::nProcs());
+
+    forAll(nSend, procI)
+    {
+        sendMap[procI].setSize(nSend[procI]);
+
+        nSend[procI] = 0;
+    }
+
+    // 3. Fill sendMap
+    forAll(toProc, i)
+    {
+        label procI = toProc[i];
+
+        sendMap[procI][nSend[procI]++] = i;
+    }
+
+    // Determine receive map
+    // ~~~~~~~~~~~~~~~~~~~~~
+
+    labelListList constructMap(Pstream::nProcs());
+
+    // Local transfers first
+    constructMap[Pstream::myProcNo()] = identity
+    (
+        sendMap[Pstream::myProcNo()].size()
+    );
+
+    label constructSize = constructMap[Pstream::myProcNo()].size();
+
+    forAll(constructMap, procI)
+    {
+        if (procI != Pstream::myProcNo())
+        {
+            label nRecv = sendSizes[procI][Pstream::myProcNo()];
+
+            constructMap[procI].setSize(nRecv);
+
+            for (label i = 0; i < nRecv; i++)
+            {
+                constructMap[procI][i] = constructSize++;
+            }
+        }
+    }
+
+    return autoPtr<mapDistribute>
+    (
+        new mapDistribute
+        (
+            constructSize,
+            sendMap.xfer(),
+            constructMap.xfer()
+        )
+    );
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+template<class Triangulation>
+Foam::DistributedDelaunayMesh<Triangulation>::DistributedDelaunayMesh()
+:
+    DelaunayMesh<Triangulation>(),
+    allBackgroundMeshBounds_()
+{}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+template<class Triangulation>
+Foam::DistributedDelaunayMesh<Triangulation>::~DistributedDelaunayMesh()
+{}
+
+
+// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
+
+template<class Triangulation>
+bool Foam::DistributedDelaunayMesh<Triangulation>::distributeBoundBoxes
+(
+    const boundBox& bb
+)
+{
+    allBackgroundMeshBounds_.reset(new List<boundBox>(Pstream::nProcs()));
+
+    // Give the bounds of every processor to every other processor
+    allBackgroundMeshBounds_()[Pstream::myProcNo()] = bb;
+
+    Pstream::gatherList(allBackgroundMeshBounds_());
+    Pstream::scatterList(allBackgroundMeshBounds_());
+
+    return true;
+}
+
+
+template<class Triangulation>
+bool Foam::DistributedDelaunayMesh<Triangulation>::isLocal
+(
+    const Vertex_handle& v
+) const
+{
+    return isLocal(v->procIndex());
+}
+
+
+template<class Triangulation>
+bool Foam::DistributedDelaunayMesh<Triangulation>::isLocal
+(
+    const label localProcIndex
+) const
+{
+    return localProcIndex == Pstream::myProcNo();
+}
+
+
+template<class Triangulation>
+Foam::labelList Foam::DistributedDelaunayMesh<Triangulation>::overlapProcessors
+(
+    const point& centre,
+    const scalar radiusSqr
+) const
+{
+    DynamicList<label> toProc(Pstream::nProcs());
+
+    forAll(allBackgroundMeshBounds_(), procI)
+    {
+        // Test against the bounding box of the processor
+        if
+        (
+            !isLocal(procI)
+         && allBackgroundMeshBounds_()[procI].overlaps(centre, radiusSqr)
+        )
+        {
+            toProc.append(procI);
+        }
+    }
+
+    return toProc;
+}
+
+
+template<class Triangulation>
+bool Foam::DistributedDelaunayMesh<Triangulation>::checkProcBoundaryCell
+(
+    const Cell_handle& cit,
+    Map<labelList>& circumsphereOverlaps
+) const
+{
+    const Foam::point& cc = cit->dual();
+
+    const scalar crSqr = magSqr
+    (
+        cc - topoint(cit->vertex(0)->point())
+    );
+
+    labelList circumsphereOverlap = overlapProcessors
+    (
+        cc,
+        sqr(1.01)*crSqr
+    );
+
+    cit->cellIndex() = this->getNewCellIndex();
+
+    if (!circumsphereOverlap.empty())
+    {
+        circumsphereOverlaps.insert(cit->cellIndex(), circumsphereOverlap);
+
+        return true;
+    }
+
+    return false;
+}
+
+
+template<class Triangulation>
+void Foam::DistributedDelaunayMesh<Triangulation>::findProcessorBoundaryCells
+(
+    Map<labelList>& circumsphereOverlaps
+) const
+{
+    // Start by assuming that all the cells have no index
+    // If they do, they have already been visited so ignore them
+
+    labelHashSet cellToCheck
+    (
+        Triangulation::number_of_finite_cells()
+       /Pstream::nProcs()
+    );
+
+    for
+    (
+        All_cells_iterator cit = Triangulation::all_cells_begin();
+        cit != Triangulation::all_cells_end();
+        ++cit
+    )
+    {
+        if (Triangulation::is_infinite(cit))
+        {
+            // Index of infinite vertex in this cell.
+            int i = cit->index(Triangulation::infinite_vertex());
+
+            Cell_handle c = cit->neighbor(i);
+
+            if (c->unassigned())
+            {
+                c->cellIndex() = this->getNewCellIndex();
+
+                if (checkProcBoundaryCell(c, circumsphereOverlaps))
+                {
+                    cellToCheck.insert(c->cellIndex());
+                }
+            }
+        }
+        else if (cit->parallelDualVertex())
+        {
+            if (cit->unassigned())
+            {
+                if (checkProcBoundaryCell(cit, circumsphereOverlaps))
+                {
+                    cellToCheck.insert(cit->cellIndex());
+                }
+            }
+        }
+    }
+
+    for
+    (
+        Finite_cells_iterator cit = Triangulation::finite_cells_begin();
+        cit != Triangulation::finite_cells_end();
+        ++cit
+    )
+    {
+        if (cellToCheck.found(cit->cellIndex()))
+        {
+            // Get the neighbours and check them
+            for (label adjCellI = 0; adjCellI < 4; ++adjCellI)
+            {
+                Cell_handle citNeighbor = cit->neighbor(adjCellI);
+
+                // Ignore if has far point or previously visited
+                if
+                (
+                    !citNeighbor->unassigned()
+                 || !citNeighbor->internalOrBoundaryDualVertex()
+                 || Triangulation::is_infinite(citNeighbor)
+                )
+                {
+                    continue;
+                }
+
+                checkProcBoundaryCell
+                (
+                    citNeighbor,
+                    circumsphereOverlaps
+                );
+            }
+        }
+    }
+}
+
+
+template<class Triangulation>
+void Foam::DistributedDelaunayMesh<Triangulation>::markVerticesToRefer
+(
+    const Map<labelList>& circumsphereOverlaps,
+    PtrList<labelPairHashSet>& referralVertices,
+    DynamicList<label>& targetProcessor,
+    DynamicList<Vb>& parallelInfluenceVertices
+)
+{
+    // Relying on the order of iteration of cells being the same as before
+    for
+    (
+        Finite_cells_iterator cit = Triangulation::finite_cells_begin();
+        cit != Triangulation::finite_cells_end();
+        ++cit
+    )
+    {
+        if (Triangulation::is_infinite(cit))
+        {
+             continue;
+        }
+
+        Map<labelList>::const_iterator iter =
+            circumsphereOverlaps.find(cit->cellIndex());
+
+        // Pre-tested circumsphere potential influence
+        if (iter != circumsphereOverlaps.cend())
+        {
+            const labelList& citOverlaps = iter();
+
+            forAll(citOverlaps, cOI)
+            {
+                label procI = citOverlaps[cOI];
+
+                for (int i = 0; i < 4; i++)
+                {
+                    Vertex_handle v = cit->vertex(i);
+
+                    if (v->farPoint())
+                    {
+                        continue;
+                    }
+
+                    label vProcIndex = v->procIndex();
+                    label vIndex = v->index();
+
+                    const labelPair procIndexPair(vProcIndex, vIndex);
+
+                    // Using the hashSet to ensure that each vertex is only
+                    // referred once to each processor.
+                    // Do not refer a vertex to its own processor.
+                    if (vProcIndex != procI)
+                    {
+                        if (referralVertices[procI].insert(procIndexPair))
+                        {
+                            targetProcessor.append(procI);
+
+                            parallelInfluenceVertices.append
+                            (
+                                Vb
+                                (
+                                    v->point(),
+                                    v->index(),
+                                    v->type(),
+                                    v->procIndex()
+                                )
+                            );
+
+                            parallelInfluenceVertices.last().targetCellSize() =
+                                v->targetCellSize();
+                            parallelInfluenceVertices.last().alignment() =
+                                v->alignment();
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+
+template<class Triangulation>
+Foam::label Foam::DistributedDelaunayMesh<Triangulation>::referVertices
+(
+    const DynamicList<label>& targetProcessor,
+    DynamicList<Vb>& parallelVertices,
+    PtrList<labelPairHashSet>& referralVertices,
+    labelPairHashSet& receivedVertices
+)
+{
+    DynamicList<Vb> referredVertices(targetProcessor.size());
+
+    const label preDistributionSize = parallelVertices.size();
+
+    mapDistribute pointMap = buildMap(targetProcessor);
+
+    // Make a copy of the original list.
+    DynamicList<Vb> originalParallelVertices(parallelVertices);
+
+    pointMap.distribute(parallelVertices);
+
+    for (label procI = 0; procI < Pstream::nProcs(); procI++)
+    {
+        const labelList& constructMap = pointMap.constructMap()[procI];
+
+        if (constructMap.size())
+        {
+            forAll(constructMap, i)
+            {
+                const Vb& v = parallelVertices[constructMap[i]];
+
+                if
+                (
+                    v.procIndex() != Pstream::myProcNo()
+                 && !receivedVertices.found(labelPair(v.procIndex(), v.index()))
+                )
+                {
+                    referredVertices.append(v);
+
+                    receivedVertices.insert
+                    (
+                        labelPair(v.procIndex(), v.index())
+                    );
+                }
+            }
+        }
+    }
+
+    label preInsertionSize = Triangulation::number_of_vertices();
+
+    labelPairHashSet pointsNotInserted = rangeInsertReferredWithInfo
+    (
+        referredVertices.begin(),
+        referredVertices.end()
+    );
+
+    if (!pointsNotInserted.empty())
+    {
+        for
+        (
+            typename labelPairHashSet::const_iterator iter
+                = pointsNotInserted.begin();
+            iter != pointsNotInserted.end();
+            ++iter
+        )
+        {
+            if (receivedVertices.found(iter.key()))
+            {
+                receivedVertices.erase(iter.key());
+            }
+        }
+    }
+
+    boolList pointInserted(parallelVertices.size(), true);
+
+    forAll(parallelVertices, vI)
+    {
+        const labelPair procIndexI
+        (
+            parallelVertices[vI].procIndex(),
+            parallelVertices[vI].index()
+        );
+
+        if (pointsNotInserted.found(procIndexI))
+        {
+            pointInserted[vI] = false;
+        }
+    }
+
+    pointMap.reverseDistribute(preDistributionSize, pointInserted);
+
+    forAll(originalParallelVertices, vI)
+    {
+        const label procIndex = targetProcessor[vI];
+
+        if (!pointInserted[vI])
+        {
+            if (referralVertices[procIndex].size())
+            {
+                if
+                (
+                    !referralVertices[procIndex].unset
+                    (
+                        labelPair
+                        (
+                            originalParallelVertices[vI].procIndex(),
+                            originalParallelVertices[vI].index()
+                        )
+                    )
+                )
+                {
+                    Pout<< "*** not found "
+                        << originalParallelVertices[vI].procIndex()
+                        << " " << originalParallelVertices[vI].index() << endl;
+                }
+
+            }
+        }
+    }
+
+    label postInsertionSize = Triangulation::number_of_vertices();
+
+    reduce(preInsertionSize, sumOp<label>());
+    reduce(postInsertionSize, sumOp<label>());
+
+    label nTotalToInsert = referredVertices.size();
+
+    reduce(nTotalToInsert, sumOp<label>());
+
+    if (preInsertionSize + nTotalToInsert != postInsertionSize)
+    {
+        label nNotInserted =
+            returnReduce(pointsNotInserted.size(), sumOp<label>());
+
+        Info<< " Inserted = "
+            << setw(name(label(Triangulation::number_of_finite_cells())).size())
+            << nTotalToInsert - nNotInserted
+            << " / " << nTotalToInsert << endl;
+
+        nTotalToInsert -= nNotInserted;
+    }
+    else
+    {
+        Info<< " Inserted = " << nTotalToInsert << endl;
+    }
+
+    return nTotalToInsert;
+}
+
+
+template<class Triangulation>
+void Foam::DistributedDelaunayMesh<Triangulation>::sync
+(
+    const boundBox& bb,
+    PtrList<labelPairHashSet>& referralVertices,
+    labelPairHashSet& receivedVertices,
+    bool iterateReferral
+)
+{
+    if (!Pstream::parRun())
+    {
+        return;
+    }
+
+    if (allBackgroundMeshBounds_.empty())
+    {
+        distributeBoundBoxes(bb);
+    }
+
+    label nVerts = Triangulation::number_of_vertices();
+    label nCells = Triangulation::number_of_finite_cells();
+
+    DynamicList<Vb> parallelInfluenceVertices(0.1*nVerts);
+    DynamicList<label> targetProcessor(0.1*nVerts);
+
+    // Some of these values will not be used, i.e. for non-real cells
+    DynamicList<Foam::point> circumcentre(0.1*nVerts);
+    DynamicList<scalar> circumradiusSqr(0.1*nVerts);
+
+    Map<labelList> circumsphereOverlaps(nCells);
+
+    findProcessorBoundaryCells(circumsphereOverlaps);
+
+    Info<< "    Influences = "
+        << setw(name(nCells).size())
+        << returnReduce(circumsphereOverlaps.size(), sumOp<label>()) << " / "
+        << returnReduce(nCells, sumOp<label>());
+
+    markVerticesToRefer
+    (
+        circumsphereOverlaps,
+        referralVertices,
+        targetProcessor,
+        parallelInfluenceVertices
+    );
+
+    referVertices
+    (
+        targetProcessor,
+        parallelInfluenceVertices,
+        referralVertices,
+        receivedVertices
+    );
+
+    if (iterateReferral)
+    {
+        label oldNReferred = 0;
+        label nIterations = 1;
+
+        Info<< incrIndent << indent
+            << "Iteratively referring referred vertices..."
+            << endl;
+        do
+        {
+            Info<< indent << "Iteration " << nIterations++ << ":";
+
+            circumsphereOverlaps.clear();
+            targetProcessor.clear();
+            parallelInfluenceVertices.clear();
+
+            findProcessorBoundaryCells(circumsphereOverlaps);
+
+            nCells = Triangulation::number_of_finite_cells();
+
+            Info<< " Influences = "
+                << setw(name(nCells).size())
+                << returnReduce(circumsphereOverlaps.size(), sumOp<label>())
+                << " / "
+                << returnReduce(nCells, sumOp<label>());
+
+            markVerticesToRefer
+            (
+                circumsphereOverlaps,
+                referralVertices,
+                targetProcessor,
+                parallelInfluenceVertices
+            );
+
+            label nReferred = referVertices
+            (
+                targetProcessor,
+                parallelInfluenceVertices,
+                referralVertices,
+                receivedVertices
+            );
+
+            if (nReferred == 0 || nReferred == oldNReferred)
+            {
+                break;
+            }
+
+            oldNReferred = nReferred;
+
+        } while (true);
+
+        Info<< decrIndent;
+    }
+}
+
+
+// * * * * * * * * * * * * Protected Member Functions  * * * * * * * * * * * //
+
+
+// * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * * //
+
+template<class Triangulation>
+bool Foam::DistributedDelaunayMesh<Triangulation>::distribute
+(
+    const boundBox& bb
+)
+{
+    notImplemented
+    (
+        "Foam::DistributedDelaunayMesh<Triangulation>::distribute"
+        "("
+        "    const boundBox& bb"
+        ")"
+    );
+
+    if (!Pstream::parRun())
+    {
+        return false;
+    }
+
+    distributeBoundBoxes(bb);
+
+    return true;
+}
+
+
+template<class Triangulation>
+Foam::autoPtr<Foam::mapDistribute>
+Foam::DistributedDelaunayMesh<Triangulation>::distribute
+(
+    const backgroundMeshDecomposition& decomposition
+)
+{
+    if (!Pstream::parRun())
+    {
+        return autoPtr<mapDistribute>();
+    }
+
+    distributeBoundBoxes(decomposition.procBounds());
+
+    DynamicList<point> points(Triangulation::number_of_vertices());
+
+    for
+    (
+        Finite_vertices_iterator vit = Triangulation::finite_vertices_begin();
+        vit != Triangulation::finite_vertices_end();
+        ++vit
+    )
+    {
+        if (vit->real())
+        {
+            points.append(topoint(vit->point()));
+        }
+    }
+
+    autoPtr<mapDistribute> mapDist = decomposition.distributePoints(points);
+
+    return mapDist;
+}
+
+
+template<class Triangulation>
+void Foam::DistributedDelaunayMesh<Triangulation>::sync(const boundBox& bb)
+{
+    if (!Pstream::parRun())
+    {
+        return;
+    }
+
+    if (allBackgroundMeshBounds_.empty())
+    {
+        distributeBoundBoxes(bb);
+    }
+
+    const label nApproxReferred =
+        Triangulation::number_of_vertices()
+       /Pstream::nProcs();
+
+    PtrList<labelPairHashSet> referralVertices(Pstream::nProcs());
+    forAll(referralVertices, procI)
+    {
+        if (!isLocal(procI))
+        {
+            referralVertices.set(procI, new labelPairHashSet(nApproxReferred));
+        }
+    }
+
+    labelPairHashSet receivedVertices(nApproxReferred);
+
+    sync
+    (
+        bb,
+        referralVertices,
+        receivedVertices,
+        true
+    );
+}
+
+
+template<class Triangulation>
+template<class PointIterator>
+typename Foam::DistributedDelaunayMesh<Triangulation>::labelPairHashSet
+Foam::DistributedDelaunayMesh<Triangulation>::rangeInsertReferredWithInfo
+(
+    PointIterator begin,
+    PointIterator end,
+    bool printErrors
+)
+{
+    const boundBox& bb = allBackgroundMeshBounds_()[Pstream::myProcNo()];
+
+    typedef DynamicList
+    <
+        std::pair<scalar, label>
+    > vectorPairPointIndex;
+
+    vectorPairPointIndex pointsBbDistSqr;
+
+    label count = 0;
+    for (PointIterator it = begin; it != end; ++it)
+    {
+        const Foam::point samplePoint(topoint(it->point()));
+
+        scalar distFromBbSqr = 0;
+
+        if (!bb.contains(samplePoint))
+        {
+            const Foam::point nearestPoint = bb.nearest(samplePoint);
+
+            distFromBbSqr = magSqr(nearestPoint - samplePoint);
+        }
+
+        pointsBbDistSqr.append
+        (
+            std::make_pair(distFromBbSqr, count++)
+        );
+    }
+
+    std::random_shuffle(pointsBbDistSqr.begin(), pointsBbDistSqr.end());
+
+    // Sort in ascending order by the distance of the point from the centre
+    // of the processor bounding box
+    sort(pointsBbDistSqr.begin(), pointsBbDistSqr.end());
+
+    typename Triangulation::Vertex_handle hint;
+
+    typename Triangulation::Locate_type lt;
+    int li, lj;
+
+    label nNotInserted = 0;
+
+    labelPairHashSet uninserted
+    (
+        Triangulation::number_of_vertices()
+       /Pstream::nProcs()
+    );
+
+    for
+    (
+        typename vectorPairPointIndex::const_iterator p =
+            pointsBbDistSqr.begin();
+        p != pointsBbDistSqr.end();
+        ++p
+    )
+    {
+        const size_t checkInsertion = Triangulation::number_of_vertices();
+
+        const Vb& vert = *(begin + p->second);
+        const Point& pointToInsert = vert.point();
+
+        // Locate the point
+        Cell_handle c = Triangulation::locate(pointToInsert, lt, li, lj, hint);
+
+        if (lt == Triangulation::VERTEX)
+        {
+            if (printErrors)
+            {
+                Vertex_handle nearV =
+                    Triangulation::nearest_vertex(pointToInsert);
+
+                Pout<< "Failed insertion, point already exists" << nl
+                    << "Failed insertion : " << vert.info()
+                    << "         nearest : " << nearV->info();
+            }
+
+            uninserted.insert(labelPair(vert.procIndex(), vert.index()));
+            nNotInserted++;
+
+            continue;
+        }
+
+        // Get the cells that conflict with p in a vector V,
+        // and a facet on the boundary of this hole in f.
+        std::vector<Cell_handle> V;
+        typename Triangulation::Facet f;
+
+        Triangulation::find_conflicts
+        (
+            pointToInsert,
+            c,
+            CGAL::Oneset_iterator<typename Triangulation::Facet>(f),
+            std::back_inserter(V)
+        );
+
+        bool insert = false;
+        for (size_t i = 0; i < V.size(); ++i)
+        {
+            if (V[i]->real() || V[i]->hasFarPoint())
+            {
+                insert = true;
+                break;
+            }
+        }
+
+        if (insert)
+        {
+            hint = Triangulation::insert_in_hole
+            (
+                pointToInsert,
+                V.begin(),
+                V.end(),
+                f.first,
+                f.second
+            );
+
+            if (checkInsertion != Triangulation::number_of_vertices() - 1)
+            {
+                if (printErrors)
+                {
+                    Vertex_handle nearV =
+                        Triangulation::nearest_vertex(pointToInsert);
+
+                    Pout<< "Failed insertion : " << vert.info()
+                        << "         nearest : " << nearV->info();
+                }
+            }
+            else
+            {
+                hint->index() = vert.index();
+                hint->type() = vert.type();
+                hint->procIndex() = vert.procIndex();
+                hint->targetCellSize() = vert.targetCellSize();
+                hint->alignment() = vert.alignment();
+            }
+        }
+        else
+        {
+            uninserted.insert(labelPair(vert.procIndex(), vert.index()));
+            nNotInserted++;
+        }
+    }
+
+    return uninserted;
+}
+
+
+// * * * * * * * * * * * * * * Member Operators  * * * * * * * * * * * * * * //
+
+
+// * * * * * * * * * * * * * * Friend Functions  * * * * * * * * * * * * * * //
+
+
+// * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * * //
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/DelaunayMesh/DistributedDelaunayMesh.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/DelaunayMesh/DistributedDelaunayMesh.H
new file mode 100644
index 0000000000000000000000000000000000000000..fcc5d8c2ba8926842f6d5a5d205334cab3e7f992
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/DelaunayMesh/DistributedDelaunayMesh.H
@@ -0,0 +1,208 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::DistributedDelaunayMesh
+
+Description
+
+SourceFiles
+    DistributedDelaunayMeshI.H
+    DistributedDelaunayMesh.C
+    DistributedDelaunayMeshIO.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef DistributedDelaunayMesh_H
+#define DistributedDelaunayMesh_H
+
+#include "DelaunayMesh.H"
+#include "backgroundMeshDecomposition.H"
+#include "autoPtr.H"
+#include "boundBox.H"
+#include "indexedVertex.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+class mapDistribute;
+
+/*---------------------------------------------------------------------------*\
+                  Class DistributedDelaunayMesh Declaration
+\*---------------------------------------------------------------------------*/
+
+template<class Triangulation>
+class DistributedDelaunayMesh
+:
+    public DelaunayMesh<Triangulation>
+{
+public:
+
+        typedef typename Triangulation::Vertex_handle Vertex_handle;
+        typedef typename Triangulation::Cell_handle   Cell_handle;
+        typedef typename Triangulation::Point         Point;
+
+        typedef typename Triangulation::Finite_vertices_iterator
+            Finite_vertices_iterator;
+        typedef typename Triangulation::Finite_cells_iterator
+            Finite_cells_iterator;
+        typedef typename Triangulation::All_cells_iterator
+            All_cells_iterator;
+
+        typedef typename DelaunayMesh<Triangulation>::labelPairHashSet
+            labelPairHashSet;
+
+
+private:
+
+        autoPtr<List<boundBox> > allBackgroundMeshBounds_;
+
+
+    // Private Member Functions
+
+        //-
+        bool distributeBoundBoxes(const boundBox& bb);
+
+        //-
+        bool isLocal(const Vertex_handle& v) const;
+
+        bool isLocal(const label localProcIndex) const;
+
+        labelList overlapProcessors
+        (
+            const point& centre,
+            const scalar radiusSqr
+        ) const;
+
+        bool checkProcBoundaryCell
+        (
+            const Cell_handle& cit,
+            Map<labelList>& circumsphereOverlaps
+        ) const;
+
+        void findProcessorBoundaryCells
+        (
+            Map<labelList>& circumsphereOverlaps
+        ) const;
+
+        void markVerticesToRefer
+        (
+            const Map<labelList>& circumsphereOverlaps,
+            PtrList<labelPairHashSet>& referralVertices,
+            DynamicList<label>& targetProcessor,
+            DynamicList<Vb>& parallelInfluenceVertices
+        );
+
+        label referVertices
+        (
+            const DynamicList<label>& targetProcessor,
+            DynamicList<Vb>& parallelVertices,
+            PtrList<labelPairHashSet>& referralVertices,
+            labelPairHashSet& receivedVertices
+        );
+
+        //- Disallow default bitwise copy construct
+        DistributedDelaunayMesh(const DistributedDelaunayMesh<Triangulation>&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const DistributedDelaunayMesh<Triangulation>&);
+
+
+public:
+
+    // Constructors
+
+        //- Construct from components
+        DistributedDelaunayMesh();
+
+
+    //- Destructor
+    ~DistributedDelaunayMesh();
+
+
+    // Member Functions
+
+        //- Build a mapDistribute for the supplied destination processor data
+        static autoPtr<mapDistribute> buildMap(const List<label>& toProc);
+
+        //-
+        bool distribute(const boundBox& bb);
+
+        autoPtr<mapDistribute> distribute
+        (
+            const backgroundMeshDecomposition& decomposition
+        );
+
+        //- Refer vertices so that the processor interfaces are consistent
+        void sync(const boundBox& bb);
+
+        //- Refer vertices so that the processor interfaces are consistent
+        void sync
+        (
+            const boundBox& bb,
+            PtrList<labelPairHashSet>& referralVertices,
+            labelPairHashSet& receivedVertices,
+            bool iterateReferral = true
+        );
+
+        //- Inserts points into the triangulation if the point is within
+        //  the circumsphere of another cell. Returns HashSet of failed
+        //  point insertions
+        template<class PointIterator>
+        labelPairHashSet rangeInsertReferredWithInfo
+        (
+            PointIterator begin,
+            PointIterator end,
+            bool printErrors = true
+        );
+
+//        distributeField();
+
+
+    // Queries
+
+
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+//#include "DistributedDelaunayMeshI.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+#   include "DistributedDelaunayMesh.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/Make/files b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/Make/files
new file mode 100644
index 0000000000000000000000000000000000000000..c6e553f64c32b3e7a61d3b26908ecfa3a9e35172
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/Make/files
@@ -0,0 +1,66 @@
+#include CGAL_FILES
+
+conformalVoronoiMesh/indexedVertex/indexedVertexEnum.C
+conformalVoronoiMesh/indexedCell/indexedCellEnum.C
+
+conformalVoronoiMesh/conformalVoronoiMesh.C
+conformalVoronoiMesh/conformalVoronoiMeshCalcDualMesh.C
+conformalVoronoiMesh/conformalVoronoiMeshConformToSurface.C
+conformalVoronoiMesh/conformalVoronoiMeshIO.C
+conformalVoronoiMesh/conformalVoronoiMeshFeaturePoints.C
+conformalVoronoiMesh/conformalVoronoiMeshFeaturePointSpecialisations.C
+
+cvControls/cvControls.C
+
+conformationSurfaces/conformationSurfaces.C
+
+backgroundMeshDecomposition/backgroundMeshDecomposition.C
+
+cellShapeControl/cellShapeControl/cellShapeControl.C
+
+cellShapeControl/cellShapeControlMesh/cellShapeControlMesh.C
+
+cellSizeAndAlignmentControl = cellShapeControl/cellSizeAndAlignmentControl
+$(cellSizeAndAlignmentControl)/cellSizeAndAlignmentControls.C
+$(cellSizeAndAlignmentControl)/cellSizeAndAlignmentControl/cellSizeAndAlignmentControl.C
+$(cellSizeAndAlignmentControl)/fileControl/fileControl.C
+$(cellSizeAndAlignmentControl)/searchableSurfaceControl/searchableSurfaceControl.C
+/*cellShapeControl/pQuadCoorControl/pQuadCoorControl.C*/
+
+cellShapeControl/cellAspectRatioControl/cellAspectRatioControl.C
+
+/*cellSizeControlSurfaces/cellSizeControlSurfaces.C*/
+
+cellSizeFunctions = cellSizeControlSurfaces/cellSizeFunction
+$(cellSizeFunctions)/cellSizeFunction/cellSizeFunction.C
+$(cellSizeFunctions)/uniform/uniform.C
+$(cellSizeFunctions)/uniformDistance/uniformDistance.C
+$(cellSizeFunctions)/linearDistance/linearDistance.C
+$(cellSizeFunctions)/surfaceOffsetLinearDistance/surfaceOffsetLinearDistance.C
+$(cellSizeFunctions)/linearSpatial/linearSpatial.C
+
+surfaceCellSizeFunctions = cellSizeControlSurfaces/surfaceCellSizeFunction
+$(surfaceCellSizeFunctions)/surfaceCellSizeFunction/surfaceCellSizeFunction.C
+$(surfaceCellSizeFunctions)/uniformValue/uniformValue.C
+$(surfaceCellSizeFunctions)/nonUniformField/nonUniformField.C
+
+cellSizeCalculationType = $(surfaceCellSizeFunctions)/cellSizeCalculationType
+$(cellSizeCalculationType)/cellSizeCalculationType/cellSizeCalculationType.C
+$(cellSizeCalculationType)/fieldFromFile/fieldFromFile.C
+$(cellSizeCalculationType)/automatic/automatic.C
+
+initialPointsMethod/initialPointsMethod/initialPointsMethod.C
+initialPointsMethod/uniformGrid/uniformGrid.C
+initialPointsMethod/bodyCentredCubic/bodyCentredCubic.C
+initialPointsMethod/faceCentredCubic/faceCentredCubic.C
+initialPointsMethod/pointFile/pointFile.C
+initialPointsMethod/autoDensity/autoDensity.C
+
+relaxationModel/relaxationModel/relaxationModel.C
+relaxationModel/adaptiveLinear/adaptiveLinear.C
+relaxationModel/rampHoldFall/rampHoldFall.C
+
+faceAreaWeightModel/faceAreaWeightModel/faceAreaWeightModel.C
+faceAreaWeightModel/piecewiseLinearRamp/piecewiseLinearRamp.C
+
+LIB = $(FOAM_LIBBIN)/libconformalVoronoiMesh
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/Make/options b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/Make/options
new file mode 100644
index 0000000000000000000000000000000000000000..03ee51a4f6366bfdaee9196edb37451f69cfd8b4
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/Make/options
@@ -0,0 +1,33 @@
+EXE_DEBUG = -DFULLDEBUG -g -O0
+EXE_FROUNDING_MATH = -frounding-math
+EXE_NDEBUG = -DNDEBUG
+
+CGAL_EXACT = /*-DCGAL_DONT_USE_LAZY_KERNEL*/
+CGAL_INEXACT = -DCGAL_INEXACT
+
+include $(GENERAL_RULES)/CGAL
+FFLAGS = -DCGAL_FILES='"${CGAL_ARCH_PATH}/share/files"'
+
+EXE_INC = \
+    ${EXE_FROUNDING_MATH} \
+    ${EXE_NDEBUG} \
+    ${CGAL_INEXACT} \
+    ${CGAL_INC} \
+    -I$(LIB_SRC)/finiteVolume/lnInclude \
+    -I$(LIB_SRC)/meshTools/lnInclude \
+    -I$(LIB_SRC)/parallel/decompose/decompositionMethods/lnInclude \
+    -I$(LIB_SRC)/edgeMesh/lnInclude \
+    -I$(LIB_SRC)/fileFormats/lnInclude \
+    -I$(LIB_SRC)/dynamicMesh/lnInclude \
+    -I$(LIB_SRC)/triSurface/lnInclude \
+    -I$(LIB_SRC)/sampling/lnInclude \
+    -IPrintTable \
+    -I../vectorTools
+
+LIB_LIBS = \
+    -lmeshTools \
+    -ledgeMesh \
+    -lfileFormats \
+    -ltriSurface \
+    -ldynamicMesh \
+    -lsampling
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/PrintTable/PrintTable.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/PrintTable/PrintTable.C
new file mode 100644
index 0000000000000000000000000000000000000000..4b0c747f0fa66361f4d588a2e56dc1d7e22d0b90
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/PrintTable/PrintTable.C
@@ -0,0 +1,234 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012-2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "PrintTable.H"
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+template<class KeyType, class DataType>
+Foam::PrintTable<KeyType, DataType>::PrintTable()
+:
+    table_(),
+    title_(string::null)
+{}
+
+
+template<class KeyType, class DataType>
+Foam::PrintTable<KeyType, DataType>::PrintTable(const string& title)
+:
+    table_(),
+    title_(title)
+{}
+
+
+template<class KeyType, class DataType>
+Foam::PrintTable<KeyType, DataType>::PrintTable
+(
+    const PrintTable<KeyType, DataType>& table
+)
+:
+    table_(table.table_),
+    title_(table.title_)
+{}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+template<class KeyType, class DataType>
+Foam::PrintTable<KeyType, DataType>::~PrintTable()
+{}
+
+
+// * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * * //
+
+template<class KeyType, class DataType>
+void Foam::PrintTable<KeyType, DataType>::print
+(
+    Ostream& os,
+    const bool printSum,
+    const bool printAverage
+) const
+{
+    HashTable<HashTable<DataType, label>, KeyType> combinedTable;
+
+    List<HashTableData> procData(Pstream::nProcs(), HashTableData());
+
+    procData[Pstream::myProcNo()] = table_;
+
+    Pstream::gatherList(procData);
+
+    if (Pstream::master())
+    {
+        label largestKeyLength = 6;
+        label largestDataLength = 0;
+
+        List<label> largestProcSize(Pstream::nProcs(), 0);
+
+        forAll(procData, procI)
+        {
+            const HashTableData& procIData = procData[procI];
+
+            for
+            (
+                typename HashTableData::const_iterator iter = procIData.begin();
+                iter != procIData.end();
+                ++iter
+            )
+            {
+                if (!combinedTable.found(iter.key()))
+                {
+                    combinedTable.insert
+                    (
+                        iter.key(),
+                        HashTable<DataType, label>()
+                    );
+                }
+
+                HashTable<DataType, label>& key = combinedTable[iter.key()];
+
+                key.insert(procI, iter());
+
+                for
+                (
+                    typename HashTable<DataType, label>
+                        ::const_iterator dataIter = key.begin();
+                    dataIter != key.end();
+                    ++dataIter
+                )
+                {
+                    std::ostringstream buf;
+                    buf << dataIter();
+
+                    largestDataLength = max
+                    (
+                        largestDataLength,
+                        label(buf.str().length())
+                    );
+                }
+
+                std::ostringstream buf;
+                buf << iter.key();
+
+                largestKeyLength = max
+                (
+                    largestKeyLength,
+                    label(buf.str().length())
+                );
+            }
+        }
+
+        os.width(largestKeyLength);
+        os  << nl << indent << tab << title_.c_str() << endl;
+
+        os.width(largestKeyLength);
+        os  << indent << "Proc #";
+        forAll(procData, procI)
+        {
+            os  << tab;
+            os.width(largestDataLength);
+            os  << procI;
+        }
+
+        if (printSum)
+        {
+            os  << tab;
+            os.width(largestDataLength);
+            os  << "Sum";
+        }
+
+        if (printAverage)
+        {
+            os  << tab;
+            os.width(largestDataLength);
+            os  << "Average";
+        }
+
+        os  << endl;
+
+        const List<KeyType>& sortedTable = combinedTable.sortedToc();
+
+        forAll(sortedTable, keyI)
+        {
+            const HashTable<DataType, label>& procDataList
+                = combinedTable[sortedTable[keyI]];
+
+            os.width(largestKeyLength);
+            os  << indent << sortedTable[keyI];
+
+            forAll(procDataList, elemI)
+            {
+                os  << tab;
+                os.width(largestDataLength);
+                os  << procDataList[elemI];
+            }
+
+            if (printSum)
+            {
+                DataType sum = 0;
+                forAll(procDataList, elemI)
+                {
+                    sum += procDataList[elemI];
+                }
+
+                os  << tab;
+                os.width(largestDataLength);
+                os  << sum;
+
+                if (printAverage)
+                {
+                    os  << tab;
+                    os.width(largestDataLength);
+                    os  << sum/Pstream::nProcs();
+                }
+            }
+
+            os  << endl;
+        }
+    }
+}
+
+
+// * * * * * * * * * * * * * * Member Operators  * * * * * * * * * * * * * * //
+
+template<class KeyType, class DataType>
+void Foam::PrintTable<KeyType, DataType>::operator=
+(
+    const PrintTable<KeyType, DataType>& rhs
+)
+{
+    // Check for assignment to self
+    if (this == &rhs)
+    {
+        FatalErrorIn
+        (
+            "Foam::PrintTable<KeyType, DataType>::operator="
+            "(const Foam::PrintTable<KeyType, DataType>&)"
+        )   << "Attempted assignment to self"
+            << abort(FatalError);
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/PrintTable/PrintTable.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/PrintTable/PrintTable.H
new file mode 100644
index 0000000000000000000000000000000000000000..9f9e8b9594bbfa702fb83ce2ccdd9b0671cfd79a
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/PrintTable/PrintTable.H
@@ -0,0 +1,140 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012-2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::PrintTable
+
+Description
+    Print a table in parallel, e.g.;
+
+    \verbatim
+                            Vertex Type Information
+                   Proc #        0       1       2       3
+                    Total   145680  145278  145751  145359
+               Unassigned        0       0       0       0
+     nExternalFeatureEdge      883     829     828     960
+    nExternalFeaturePoint        8      10      10      12
+         nExternalSurface     9533    9488    9502    9482
+                     nFar        0       0       0       0
+                nInternal   125494  125198  125642  125174
+     nInternalFeatureEdge      238     241     241     240
+    nInternalFeaturePoint        2       2       2       2
+    nInternalNearBoundary        0       0       0       0
+         nInternalSurface     9522    9510    9526    9489
+                nReferred     7545    7497    7500    7587
+    \endverbatim
+
+SourceFiles
+    PrintTableI.H
+    PrintTable.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef PrintTable_H
+#define PrintTable_H
+
+#include "HashTable.H"
+#include "Ostream.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                         Class PrintTable Declaration
+\*---------------------------------------------------------------------------*/
+
+template<class KeyType, class DataType>
+class PrintTable
+{
+    typedef HashTable<DataType, KeyType> HashTableData;
+
+
+    // Private data
+
+        //- Hash table holding the data
+        HashTableData table_;
+
+        //- Title of the table
+        string title_;
+
+
+    // Private Member Functions
+
+        //- Disallow default bitwise assignment
+        void operator=(const PrintTable<KeyType, DataType>&);
+
+
+public:
+
+    // Constructors
+
+        //- Null constructor
+        PrintTable();
+
+        //- Construct with a title
+        explicit PrintTable(const string& title);
+
+        //- Copy constructor
+        PrintTable(const PrintTable<KeyType, DataType>& table);
+
+
+    //- Destructor
+    ~PrintTable();
+
+
+    // Member Functions
+
+        //- Add an entry (D) to the given key(K)
+        void add(const KeyType& K, const DataType& D);
+
+        //- Print the table
+        void print
+        (
+            Ostream& os,
+            const bool printSum = false,
+            const bool printAverage = false
+        ) const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#include "PrintTableI.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+#   include "PrintTable.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/PrintTable/PrintTableI.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/PrintTable/PrintTableI.H
new file mode 100644
index 0000000000000000000000000000000000000000..6c093bc13a2d8ea6e05fa53cc452403950a65743
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/PrintTable/PrintTableI.H
@@ -0,0 +1,42 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+template<class KeyType, class DataType>
+void Foam::PrintTable<KeyType, DataType>::add
+(
+    const KeyType& K,
+    const DataType& D
+)
+{
+    table_.set(K, D);
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/backgroundMeshDecomposition/backgroundMeshDecomposition.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/backgroundMeshDecomposition/backgroundMeshDecomposition.C
new file mode 100644
index 0000000000000000000000000000000000000000..7f60b96200013c5a9e228c3f5672ead92ebb9ca0
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/backgroundMeshDecomposition/backgroundMeshDecomposition.C
@@ -0,0 +1,1804 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "backgroundMeshDecomposition.H"
+#include "meshSearch.H"
+#include "conformationSurfaces.H"
+#include "zeroGradientFvPatchFields.H"
+#include "Time.H"
+#include "Random.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+defineTypeNameAndDebug(backgroundMeshDecomposition, 0);
+
+}
+
+
+// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
+
+Foam::autoPtr<Foam::mapDistribute> Foam::backgroundMeshDecomposition::buildMap
+(
+    const List<label>& toProc
+)
+{
+    // Determine send map
+    // ~~~~~~~~~~~~~~~~~~
+
+    // 1. Count
+    labelList nSend(Pstream::nProcs(), 0);
+
+    forAll(toProc, i)
+    {
+        label procI = toProc[i];
+
+        nSend[procI]++;
+    }
+
+    // Send over how many I need to receive
+    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    labelListList sendSizes(Pstream::nProcs());
+
+    sendSizes[Pstream::myProcNo()] = nSend;
+
+    combineReduce(sendSizes, UPstream::listEq());
+
+    // 2. Size sendMap
+    labelListList sendMap(Pstream::nProcs());
+
+    forAll(nSend, procI)
+    {
+        sendMap[procI].setSize(nSend[procI]);
+
+        nSend[procI] = 0;
+    }
+
+    // 3. Fill sendMap
+    forAll(toProc, i)
+    {
+        label procI = toProc[i];
+
+        sendMap[procI][nSend[procI]++] = i;
+    }
+
+    // Determine receive map
+    // ~~~~~~~~~~~~~~~~~~~~~
+
+    labelListList constructMap(Pstream::nProcs());
+
+    // Local transfers first
+    constructMap[Pstream::myProcNo()] = identity
+    (
+        sendMap[Pstream::myProcNo()].size()
+    );
+
+    label constructSize = constructMap[Pstream::myProcNo()].size();
+
+    forAll(constructMap, procI)
+    {
+        if (procI != Pstream::myProcNo())
+        {
+            label nRecv = sendSizes[procI][Pstream::myProcNo()];
+
+            constructMap[procI].setSize(nRecv);
+
+            for (label i = 0; i < nRecv; i++)
+            {
+                constructMap[procI][i] = constructSize++;
+            }
+        }
+    }
+
+    return autoPtr<mapDistribute>
+    (
+        new mapDistribute
+        (
+            constructSize,
+            sendMap.xfer(),
+            constructMap.xfer()
+        )
+    );
+}
+
+
+// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
+
+void Foam::backgroundMeshDecomposition::initialRefinement()
+{
+    volScalarField cellWeights
+    (
+        IOobject
+        (
+            "cellWeights",
+            mesh_.time().timeName(),
+            mesh_,
+            IOobject::NO_READ,
+            IOobject::NO_WRITE
+        ),
+        mesh_,
+        dimensionedScalar("one", dimless, 1.0),
+        zeroGradientFvPatchScalarField::typeName
+    );
+
+    const conformationSurfaces& geometry = geometryToConformTo_;
+
+    decompositionMethod& decomposer = decomposerPtr_();
+
+    volScalarField::InternalField& icellWeights = cellWeights.internalField();
+
+
+    // For each cell in the mesh has it been determined if it is fully
+    // inside, outside, or overlaps the surface
+    labelList volumeStatus
+    (
+        mesh_.nCells(),
+        searchableSurface::UNKNOWN
+    );
+
+    // Surface refinement
+    {
+        while (true)
+        {
+            // Determine/update the status of each cell
+            forAll(volumeStatus, cellI)
+            {
+                if (volumeStatus[cellI] == searchableSurface::UNKNOWN)
+                {
+                    treeBoundBox cellBb
+                    (
+                        mesh_.cells()[cellI].points
+                        (
+                            mesh_.faces(),
+                            mesh_.points()
+                        )
+                    );
+
+                    if (geometry.overlaps(cellBb))
+                    {
+                        volumeStatus[cellI] = searchableSurface::MIXED;
+                    }
+                    else if (geometry.inside(cellBb.midpoint()))
+                    {
+                        volumeStatus[cellI] = searchableSurface::INSIDE;
+                    }
+                    else
+                    {
+                        volumeStatus[cellI] =
+                            searchableSurface::OUTSIDE;
+                    }
+                }
+            }
+
+            {
+                labelList refCells = selectRefinementCells
+                (
+                    volumeStatus,
+                    cellWeights
+                );
+
+                // Maintain 2:1 ratio
+                labelList newCellsToRefine
+                (
+                    meshCutter_.consistentRefinement
+                    (
+                        refCells,
+                        true                  // extend set
+                    )
+                );
+
+                forAll(newCellsToRefine, nCTRI)
+                {
+                    label cellI = newCellsToRefine[nCTRI];
+
+                    if (volumeStatus[cellI] == searchableSurface::MIXED)
+                    {
+                        volumeStatus[cellI] = searchableSurface::UNKNOWN;
+                    }
+
+                    icellWeights[cellI] = max
+                    (
+                        1.0,
+                        icellWeights[cellI]/8.0
+                    );
+                }
+
+                if (returnReduce(newCellsToRefine.size(), sumOp<label>()) == 0)
+                {
+                    break;
+                }
+
+                // Mesh changing engine.
+                polyTopoChange meshMod(mesh_);
+
+                // Play refinement commands into mesh changer.
+                meshCutter_.setRefinement(newCellsToRefine, meshMod);
+
+                // Create mesh, return map from old to new mesh.
+                autoPtr<mapPolyMesh> map = meshMod.changeMesh
+                (
+                    mesh_,
+                    false,  // inflate
+                    true,   // syncParallel
+                    true,   // orderCells (to reduce cell transfers)
+                    false   // orderPoints
+                );
+
+                // Update fields
+                mesh_.updateMesh(map);
+
+                // Update numbering of cells/vertices.
+                meshCutter_.updateMesh(map);
+
+                {
+                    // Map volumeStatus
+
+                    const labelList& cellMap = map().cellMap();
+
+                    labelList newVolumeStatus(cellMap.size());
+
+                    forAll(cellMap, newCellI)
+                    {
+                        label oldCellI = cellMap[newCellI];
+
+                        if (oldCellI == -1)
+                        {
+                            newVolumeStatus[newCellI] =
+                                searchableSurface::UNKNOWN;
+                        }
+                        else
+                        {
+                            newVolumeStatus[newCellI] = volumeStatus[oldCellI];
+                        }
+                    }
+
+                    volumeStatus.transfer(newVolumeStatus);
+                }
+
+                Info<< "    Background mesh refined from "
+                    << returnReduce(map().nOldCells(), sumOp<label>())
+                    << " to " << mesh_.globalData().nTotalCells()
+                    << " cells." << endl;
+            }
+
+            // Determine/update the status of each cell
+            forAll(volumeStatus, cellI)
+            {
+                if (volumeStatus[cellI] == searchableSurface::UNKNOWN)
+                {
+                    treeBoundBox cellBb
+                    (
+                        mesh_.cells()[cellI].points
+                        (
+                            mesh_.faces(),
+                            mesh_.points()
+                        )
+                    );
+
+                    if (geometry.overlaps(cellBb))
+                    {
+                        volumeStatus[cellI] = searchableSurface::MIXED;
+                    }
+                    else if (geometry.inside(cellBb.midpoint()))
+                    {
+                        volumeStatus[cellI] = searchableSurface::INSIDE;
+                    }
+                    else
+                    {
+                        volumeStatus[cellI] =
+                            searchableSurface::OUTSIDE;
+                    }
+                }
+            }
+
+            // Hard code switch for this stage for testing
+            bool removeOutsideCells = false;
+
+            if (removeOutsideCells)
+            {
+                DynamicList<label> cellsToRemove;
+
+                forAll(volumeStatus, cellI)
+                {
+                    if (volumeStatus[cellI] == searchableSurface::OUTSIDE)
+                    {
+                        cellsToRemove.append(cellI);
+                    }
+                }
+
+                removeCells cellRemover(mesh_);
+
+                // Mesh changing engine.
+                polyTopoChange meshMod(mesh_);
+
+                labelList exposedFaces = cellRemover.getExposedFaces
+                (
+                    cellsToRemove
+                );
+
+                // Play refinement commands into mesh changer.
+                cellRemover.setRefinement
+                (
+                    cellsToRemove,
+                    exposedFaces,
+                    labelList(exposedFaces.size(), 0),  // patchID dummy
+                    meshMod
+                );
+
+                // Create mesh, return map from old to new mesh.
+                autoPtr<mapPolyMesh> map = meshMod.changeMesh
+                (
+                    mesh_,
+                    false,  // inflate
+                    true,   // syncParallel
+                    true,   // orderCells (to reduce cell transfers)
+                    false   // orderPoints
+                );
+
+                // Update fields
+                mesh_.updateMesh(map);
+
+                // Update numbering of cells/vertices.
+                meshCutter_.updateMesh(map);
+                cellRemover.updateMesh(map);
+
+                {
+                    // Map volumeStatus
+
+                    const labelList& cellMap = map().cellMap();
+
+                    labelList newVolumeStatus(cellMap.size());
+
+                    forAll(cellMap, newCellI)
+                    {
+                        label oldCellI = cellMap[newCellI];
+
+                        if (oldCellI == -1)
+                        {
+                            newVolumeStatus[newCellI] =
+                                searchableSurface::UNKNOWN;
+                        }
+                        else
+                        {
+                            newVolumeStatus[newCellI] =
+                                volumeStatus[oldCellI];
+                        }
+                    }
+
+                    volumeStatus.transfer(newVolumeStatus);
+                }
+
+                Info<< "Removed "
+                    << returnReduce(map().nOldCells(), sumOp<label>())
+                     - mesh_.globalData().nTotalCells()
+                    << " cells." << endl;
+            }
+
+            if (debug)
+            {
+                // const_cast<Time&>(mesh_.time())++;
+                // Info<< "Time " << mesh_.time().timeName() << endl;
+                meshCutter_.write();
+                mesh_.write();
+                cellWeights.write();
+            }
+
+            labelList newDecomp = decomposer.decompose
+            (
+                mesh_,
+                mesh_.cellCentres(),
+                icellWeights
+            );
+
+            fvMeshDistribute distributor(mesh_, mergeDist_);
+
+            autoPtr<mapDistributePolyMesh> mapDist = distributor.distribute
+            (
+                newDecomp
+            );
+
+            meshCutter_.distribute(mapDist);
+
+            mapDist().distributeCellData(volumeStatus);
+
+            if (debug)
+            {
+                printMeshData(mesh_);
+
+                // const_cast<Time&>(mesh_.time())++;
+                // Info<< "Time " << mesh_.time().timeName() << endl;
+                meshCutter_.write();
+                mesh_.write();
+                cellWeights.write();
+            }
+        }
+    }
+
+    if (debug)
+    {
+        // const_cast<Time&>(mesh_.time())++;
+        // Info<< "Time " << mesh_.time().timeName() << endl;
+        cellWeights.write();
+        mesh_.write();
+    }
+
+    buildPatchAndTree();
+}
+
+
+void Foam::backgroundMeshDecomposition::printMeshData
+(
+    const polyMesh& mesh
+) const
+{
+    // Collect all data on master
+
+    globalIndex globalCells(mesh.nCells());
+    // labelListList patchNeiProcNo(Pstream::nProcs());
+    // labelListList patchSize(Pstream::nProcs());
+    // const labelList& pPatches = mesh.globalData().processorPatches();
+    // patchNeiProcNo[Pstream::myProcNo()].setSize(pPatches.size());
+    // patchSize[Pstream::myProcNo()].setSize(pPatches.size());
+    // forAll(pPatches, i)
+    // {
+    //     const processorPolyPatch& ppp = refCast<const processorPolyPatch>
+    //     (
+    //         mesh.boundaryMesh()[pPatches[i]]
+    //     );
+    //     patchNeiProcNo[Pstream::myProcNo()][i] = ppp.neighbProcNo();
+    //     patchSize[Pstream::myProcNo()][i] = ppp.size();
+    // }
+    // Pstream::gatherList(patchNeiProcNo);
+    // Pstream::gatherList(patchSize);
+
+
+    // // Print stats
+
+    // globalIndex globalBoundaryFaces(mesh.nFaces()-mesh.nInternalFaces());
+
+    for (label procI = 0; procI < Pstream::nProcs(); procI++)
+    {
+        Info<< "Processor " << procI << " "
+            << "Number of cells = " << globalCells.localSize(procI)
+            << endl;
+
+        // label nProcFaces = 0;
+
+        // const labelList& nei = patchNeiProcNo[procI];
+
+        // forAll(patchNeiProcNo[procI], i)
+        // {
+        //     Info<< "    Number of faces shared with processor "
+        //         << patchNeiProcNo[procI][i] << " = " << patchSize[procI][i]
+        //         << endl;
+
+        //     nProcFaces += patchSize[procI][i];
+        // }
+
+        // Info<< "    Number of processor patches = " << nei.size() << nl
+        //     << "    Number of processor faces = " << nProcFaces << nl
+        //     << "    Number of boundary faces = "
+        //     << globalBoundaryFaces.localSize(procI) << endl;
+    }
+}
+
+
+bool Foam::backgroundMeshDecomposition::refineCell
+(
+    label cellI,
+    label volType,
+    scalar& weightEstimate
+) const
+{
+    // Sample the box to find an estimate of the min size, and a volume
+    // estimate when overlapping == true.
+
+    const conformationSurfaces& geometry = geometryToConformTo_;
+
+    treeBoundBox cellBb
+    (
+        mesh_.cells()[cellI].points
+        (
+            mesh_.faces(),
+            mesh_.points()
+        )
+    );
+
+    weightEstimate = 1.0;
+
+    if (volType == searchableSurface::MIXED)
+    {
+//        // Assess the cell size at the nearest point on the surface for the
+//        // MIXED cells, if the cell is large with respect to the cell size,
+//        // then refine it.
+//
+//        pointField samplePoints
+//        (
+//            volRes_*volRes_*volRes_,
+//            vector::zero
+//        );
+//
+//        // scalar sampleVol = cellBb.volume()/samplePoints.size();
+//
+//        vector delta = cellBb.span()/volRes_;
+//
+//        label pI = 0;
+//
+//        for (label i = 0; i < volRes_; i++)
+//        {
+//            for (label j = 0; j < volRes_; j++)
+//            {
+//                for (label k = 0; k < volRes_; k++)
+//                {
+//                    samplePoints[pI++] =
+//                        cellBb.min()
+//                      + vector
+//                        (
+//                            delta.x()*(i + 0.5),
+//                            delta.y()*(j + 0.5),
+//                            delta.z()*(k + 0.5)
+//                        );
+//                }
+//            }
+//        }
+//
+//        List<pointIndexHit> hitInfo;
+//        labelList hitSurfaces;
+//
+//        geometry.findSurfaceNearest
+//        (
+//            samplePoints,
+//            scalarField(samplePoints.size(), sqr(GREAT)),
+//            hitInfo,
+//            hitSurfaces
+//        );
+//
+//        // weightEstimate = 0.0;
+//
+//        scalar minCellSize = GREAT;
+//
+//        forAll(samplePoints, i)
+//        {
+//            scalar s = cellShapeControl_.cellSize
+//            (
+//                hitInfo[i].hitPoint()
+//            );
+//
+//            // Info<< "cellBb.midpoint() " << cellBb.midpoint() << nl
+//            //     << samplePoints[i] << nl
+//            //     << hitInfo[i] << nl
+//            //     << "cellBb.span() " << cellBb.span() << nl
+//            //     << "cellBb.mag() " << cellBb.mag() << nl
+//            //     << s << endl;
+//
+//            if (s < minCellSize)
+//            {
+//                minCellSize = max(s, minCellSizeLimit_);
+//            }
+//
+//            // Estimate the number of points in the cell by the surface size,
+//            // this is likely to be too small, so reduce.
+//            // weightEstimate += sampleVol/pow3(s);
+//        }
+//
+//        if (sqr(spanScale_)*sqr(minCellSize) < magSqr(cellBb.span()))
+//        {
+//            return true;
+//        }
+    }
+    else if (volType == searchableSurface::INSIDE)
+    {
+        // scalar s = cvMesh_.cellShapeControl_.cellSize(cellBb.midpoint());
+
+        // Estimate the number of points in the cell by the size at the cell
+        // midpoint
+        // weightEstimate = cellBb.volume()/pow3(s);
+
+        return false;
+    }
+    // else
+    // {
+    //     weightEstimate = 1.0;
+
+    //     return false;
+    // }
+
+    return false;
+}
+
+
+Foam::labelList Foam::backgroundMeshDecomposition::selectRefinementCells
+(
+    labelList& volumeStatus,
+    volScalarField& cellWeights
+) const
+{
+    volScalarField::InternalField& icellWeights = cellWeights.internalField();
+
+    labelHashSet cellsToRefine;
+
+    // Determine/update the status of each cell
+    forAll(volumeStatus, cellI)
+    {
+        if (volumeStatus[cellI] == searchableSurface::MIXED)
+        {
+            if (meshCutter_.cellLevel()[cellI] < minLevels_)
+            {
+                cellsToRefine.insert(cellI);
+            }
+        }
+
+        if (volumeStatus[cellI] != searchableSurface::OUTSIDE)
+        {
+            if
+            (
+                refineCell
+                (
+                    cellI,
+                    volumeStatus[cellI],
+                    icellWeights[cellI]
+                )
+            )
+            {
+                cellsToRefine.insert(cellI);
+            }
+        }
+    }
+
+    return cellsToRefine.toc();
+}
+
+
+void Foam::backgroundMeshDecomposition::buildPatchAndTree()
+{
+    primitivePatch tmpBoundaryFaces
+    (
+        SubList<face>
+        (
+            mesh_.faces(),
+            mesh_.nFaces() - mesh_.nInternalFaces(),
+            mesh_.nInternalFaces()
+        ),
+        mesh_.points()
+    );
+
+    boundaryFacesPtr_.reset
+    (
+        new bPatch
+        (
+            tmpBoundaryFaces.localFaces(),
+            tmpBoundaryFaces.localPoints()
+        )
+    );
+
+    // Overall bb
+    treeBoundBox overallBb(boundaryFacesPtr_().localPoints());
+
+    Random& rnd = rndGen_;
+
+    bFTreePtr_.reset
+    (
+        new indexedOctree<treeDataBPatch>
+        (
+            treeDataBPatch(false, boundaryFacesPtr_()),
+            overallBb.extend(rnd, 1e-4),
+            10, // maxLevel
+            10, // leafSize
+            3.0 // duplicity
+        )
+    );
+
+    // Give the bounds of every processor to every other processor
+    allBackgroundMeshBounds_[Pstream::myProcNo()] = overallBb;
+
+    Pstream::gatherList(allBackgroundMeshBounds_);
+    Pstream::scatterList(allBackgroundMeshBounds_);
+
+    point bbMin(GREAT, GREAT, GREAT);
+    point bbMax(-GREAT, -GREAT, -GREAT);
+
+    forAll(allBackgroundMeshBounds_, procI)
+    {
+        bbMin = min(bbMin, allBackgroundMeshBounds_[procI].min());
+        bbMax = max(bbMax, allBackgroundMeshBounds_[procI].max());
+    }
+
+    globalBackgroundBounds_ = treeBoundBox(bbMin, bbMax);
+
+    if (false)
+    {
+        OFstream fStr
+        (
+            mesh_.time().path()
+           /"backgroundMeshDecomposition_proc_"
+          + name(Pstream::myProcNo())
+          + "_boundaryFaces.obj"
+        );
+
+        const faceList& faces = boundaryFacesPtr_().localFaces();
+        const List<point>& points = boundaryFacesPtr_().localPoints();
+
+        Map<label> foamToObj(points.size());
+
+        label vertI = 0;
+
+        forAll(faces, i)
+        {
+            const face& f = faces[i];
+
+            forAll(f, fPI)
+            {
+                if (foamToObj.insert(f[fPI], vertI))
+                {
+                    meshTools::writeOBJ(fStr, points[f[fPI]]);
+                    vertI++;
+                }
+            }
+
+            fStr<< 'f';
+
+            forAll(f, fPI)
+            {
+                fStr<< ' ' << foamToObj[f[fPI]] + 1;
+            }
+
+            fStr<< nl;
+        }
+    }
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::backgroundMeshDecomposition::backgroundMeshDecomposition
+(
+    const Time& runTime,
+    Random& rndGen,
+    const conformationSurfaces& geometryToConformTo,
+    const dictionary& coeffsDict
+)
+:
+    runTime_(runTime),
+    geometryToConformTo_(geometryToConformTo),
+    rndGen_(rndGen),
+    mesh_
+    (
+        IOobject
+        (
+            fvMesh::defaultRegion,
+            runTime_.timeName(),
+            runTime_,
+            IOobject::MUST_READ
+        )
+    ),
+    meshCutter_
+    (
+        mesh_,
+        labelList(mesh_.nCells(), 0),
+        labelList(mesh_.nPoints(), 0)
+    ),
+    boundaryFacesPtr_(),
+    bFTreePtr_(),
+    allBackgroundMeshBounds_(Pstream::nProcs()),
+    globalBackgroundBounds_(),
+    decomposeDict_
+    (
+        IOobject
+        (
+            "decomposeParDict",
+            runTime_.system(),
+            runTime_,
+            IOobject::MUST_READ_IF_MODIFIED,
+            IOobject::NO_WRITE
+        )
+    ),
+    decomposerPtr_(decompositionMethod::New(decomposeDict_)),
+    mergeDist_(1e-6*mesh_.bounds().mag()),
+    spanScale_(readScalar(coeffsDict.lookup("spanScale"))),
+    minCellSizeLimit_
+    (
+        coeffsDict.lookupOrDefault<scalar>("minCellSizeLimit", 0.0)
+    ),
+    minLevels_(readLabel(coeffsDict.lookup("minLevels"))),
+    volRes_(readLabel(coeffsDict.lookup("sampleResolution"))),
+    maxCellWeightCoeff_(readScalar(coeffsDict.lookup("maxCellWeightCoeff")))
+{
+    if (!Pstream::parRun())
+    {
+        FatalErrorIn
+        (
+            "Foam::backgroundMeshDecomposition::backgroundMeshDecomposition"
+            "("
+                "const dictionary& coeffsDict, "
+                "const conformalVoronoiMesh& cvMesh"
+            ")"
+        )
+            << "This cannot be used when not running in parallel."
+            << exit(FatalError);
+    }
+
+    if (!decomposerPtr_().parallelAware())
+    {
+        FatalErrorIn
+        (
+            "void Foam::backgroundMeshDecomposition::initialRefinement() const"
+        )
+            << "You have selected decomposition method "
+            << decomposerPtr_().typeName
+            << " which is not parallel aware." << endl
+            << exit(FatalError);
+    }
+
+    Info<< nl << "Building initial background mesh decomposition" << endl;
+
+    initialRefinement();
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::backgroundMeshDecomposition::~backgroundMeshDecomposition()
+{}
+
+
+// * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * * //
+
+Foam::autoPtr<Foam::mapDistributePolyMesh>
+Foam::backgroundMeshDecomposition::distribute
+(
+    volScalarField& cellWeights
+)
+{
+    if (debug)
+    {
+        // const_cast<Time&>(mesh_.time())++;
+        // Info<< "Time " << mesh_.time().timeName() << endl;
+        cellWeights.write();
+        mesh_.write();
+    }
+
+    volScalarField::InternalField& icellWeights = cellWeights.internalField();
+
+    while (true)
+    {
+        // Refine large cells if necessary
+
+        label nOccupiedCells = 0;
+
+        forAll(icellWeights, cI)
+        {
+            if (icellWeights[cI] > 1 - SMALL)
+            {
+                nOccupiedCells++;
+            }
+        }
+
+        // Only look at occupied cells, as there is a possibility of runaway
+        // refinement if the number of cells grows too fast.  Also, clip the
+        // minimum cellWeightLimit at maxCellWeightCoeff_
+
+        scalar cellWeightLimit = max
+        (
+            maxCellWeightCoeff_
+           *sum(cellWeights).value()
+           /returnReduce(nOccupiedCells, sumOp<label>()),
+            maxCellWeightCoeff_
+        );
+
+        if (debug)
+        {
+            Info<< "    cellWeightLimit " << cellWeightLimit << endl;
+
+            Pout<< "    sum(cellWeights) " << sum(cellWeights.internalField())
+                << " max(cellWeights) " << max(cellWeights.internalField())
+                << endl;
+        }
+
+        labelHashSet cellsToRefine;
+
+        forAll(icellWeights, cWI)
+        {
+            if (icellWeights[cWI] > cellWeightLimit)
+            {
+                cellsToRefine.insert(cWI);
+            }
+        }
+
+        if (returnReduce(cellsToRefine.size(), sumOp<label>()) == 0)
+        {
+            break;
+        }
+
+        // Maintain 2:1 ratio
+        labelList newCellsToRefine
+        (
+            meshCutter_.consistentRefinement
+            (
+                cellsToRefine.toc(),
+                true                  // extend set
+            )
+        );
+
+        if (debug && !cellsToRefine.empty())
+        {
+            Pout<< "    cellWeights too large in " << cellsToRefine.size()
+                << " cells" << endl;
+        }
+
+        forAll(newCellsToRefine, nCTRI)
+        {
+            label cellI = newCellsToRefine[nCTRI];
+
+            icellWeights[cellI] /= 8.0;
+        }
+
+        // Mesh changing engine.
+        polyTopoChange meshMod(mesh_);
+
+        // Play refinement commands into mesh changer.
+        meshCutter_.setRefinement(newCellsToRefine, meshMod);
+
+        // Create mesh, return map from old to new mesh.
+        autoPtr<mapPolyMesh> map = meshMod.changeMesh
+        (
+            mesh_,
+            false,  // inflate
+            true,   // syncParallel
+            true,   // orderCells (to reduce cell motion)
+            false   // orderPoints
+        );
+
+        // Update fields
+        mesh_.updateMesh(map);
+
+        // Update numbering of cells/vertices.
+        meshCutter_.updateMesh(map);
+
+        Info<< "    Background mesh refined from "
+            << returnReduce(map().nOldCells(), sumOp<label>())
+            << " to " << mesh_.globalData().nTotalCells()
+            << " cells." << endl;
+
+        if (debug)
+        {
+            // const_cast<Time&>(mesh_.time())++;
+            // Info<< "Time " << mesh_.time().timeName() << endl;
+            cellWeights.write();
+            mesh_.write();
+        }
+    }
+
+    if (debug)
+    {
+        printMeshData(mesh_);
+
+        Pout<< "    Pre distribute sum(cellWeights) "
+            << sum(icellWeights)
+            << " max(cellWeights) "
+            << max(icellWeights)
+            << endl;
+    }
+
+    labelList newDecomp = decomposerPtr_().decompose
+    (
+        mesh_,
+        mesh_.cellCentres(),
+        icellWeights
+    );
+
+    Info<< "    Redistributing background mesh cells" << endl;
+
+    fvMeshDistribute distributor(mesh_, mergeDist_);
+
+    autoPtr<mapDistributePolyMesh> mapDist = distributor.distribute(newDecomp);
+
+    meshCutter_.distribute(mapDist);
+
+    if (debug)
+    {
+        printMeshData(mesh_);
+
+        Pout<< "    Post distribute sum(cellWeights) "
+            << sum(icellWeights)
+            << " max(cellWeights) "
+            << max(icellWeights)
+            << endl;
+
+        // const_cast<Time&>(mesh_.time())++;
+        // Info<< "Time " << mesh_.time().timeName() << endl;
+        mesh_.write();
+        cellWeights.write();
+    }
+
+    buildPatchAndTree();
+
+    return mapDist;
+}
+
+
+Foam::autoPtr<Foam::mapDistribute>
+Foam::backgroundMeshDecomposition::distributePoints
+(
+    List<point>& points
+) const
+{
+    labelList toProc(processorPosition(points));
+
+    autoPtr<mapDistribute> map(buildMap(toProc));
+
+    map().distribute(points);
+
+    return map;
+}
+
+
+bool Foam::backgroundMeshDecomposition::positionOnThisProcessor
+(
+    const point& pt
+) const
+{
+//    return bFTreePtr_().findAnyOverlap(pt, 0.0);
+
+    return
+    (
+        bFTreePtr_().getVolumeType(pt)
+     == indexedOctree<treeDataBPatch>::INSIDE
+    );
+}
+
+
+Foam::boolList Foam::backgroundMeshDecomposition::positionOnThisProcessor
+(
+    const List<point>& pts
+) const
+{
+    boolList posProc(pts.size(), true);
+
+    forAll(pts, pI)
+    {
+        posProc[pI] = positionOnThisProcessor(pts[pI]);
+    }
+
+    return posProc;
+}
+
+
+bool Foam::backgroundMeshDecomposition::overlapsThisProcessor
+(
+    const treeBoundBox& box
+) const
+{
+//    return !procBounds().contains(box);
+    return !bFTreePtr_().findBox(box).empty();
+}
+
+
+bool Foam::backgroundMeshDecomposition::overlapsThisProcessor
+(
+    const point& centre,
+    const scalar radiusSqr
+) const
+{
+    //return bFTreePtr_().findAnyOverlap(centre, radiusSqr);
+
+    return bFTreePtr_().findNearest(centre, radiusSqr).hit();
+}
+
+
+Foam::pointIndexHit Foam::backgroundMeshDecomposition::findLine
+(
+    const point& start,
+    const point& end
+) const
+{
+    return bFTreePtr_().findLine(start, end);
+}
+
+
+Foam::pointIndexHit Foam::backgroundMeshDecomposition::findLineAny
+(
+    const point& start,
+    const point& end
+) const
+{
+    return bFTreePtr_().findLineAny(start, end);
+}
+
+
+Foam::labelList Foam::backgroundMeshDecomposition::processorPosition
+(
+    const List<point>& pts
+) const
+{
+    DynamicList<label> toCandidateProc;
+    DynamicList<point> testPoints;
+    labelList ptBlockStart(pts.size(), -1);
+    labelList ptBlockSize(pts.size(), -1);
+
+    label nTotalCandidates = 0;
+
+    forAll(pts, pI)
+    {
+        const point& pt = pts[pI];
+
+        label nCandidates = 0;
+
+        forAll(allBackgroundMeshBounds_, procI)
+        {
+            if (allBackgroundMeshBounds_[procI].contains(pt))
+            {
+                toCandidateProc.append(procI);
+                testPoints.append(pt);
+
+                nCandidates++;
+            }
+        }
+
+        ptBlockStart[pI] = nTotalCandidates;
+        ptBlockSize[pI] = nCandidates;
+
+        nTotalCandidates += nCandidates;
+    }
+
+    // Needed for reverseDistribute
+    label preDistributionToCandidateProcSize = toCandidateProc.size();
+
+    autoPtr<mapDistribute> map(buildMap(toCandidateProc));
+
+    map().distribute(testPoints);
+
+    List<bool> pointOnCandidate(testPoints.size(), false);
+
+    // Test candidate points on candidate processors
+    forAll(testPoints, tPI)
+    {
+        pointOnCandidate[tPI] = positionOnThisProcessor(testPoints[tPI]);
+    }
+
+    map().reverseDistribute
+    (
+        preDistributionToCandidateProcSize,
+        pointOnCandidate
+    );
+
+    labelList ptProc(pts.size(), -1);
+
+    DynamicList<label> failedPointIndices;
+    DynamicList<point> failedPoints;
+
+    forAll(pts, pI)
+    {
+        // Extract the sub list of results for this point
+
+        SubList<bool> ptProcResults
+        (
+            pointOnCandidate,
+            ptBlockSize[pI],
+            ptBlockStart[pI]
+        );
+
+        forAll(ptProcResults, pPRI)
+        {
+            if (ptProcResults[pPRI])
+            {
+                ptProc[pI] = toCandidateProc[ptBlockStart[pI] + pPRI];
+
+                break;
+            }
+        }
+
+        if (ptProc[pI] < 0)
+        {
+            if (!globalBackgroundBounds_.contains(pts[pI]))
+            {
+                FatalErrorIn
+                (
+                    "Foam::labelList"
+                    "Foam::backgroundMeshDecomposition::processorPosition"
+                    "("
+                        "const List<point>&"
+                    ") const"
+                )
+                    << "The position " << pts[pI]
+                    << " is not in any part of the background mesh "
+                    << globalBackgroundBounds_ << endl
+                    << "A background mesh with a wider margin around "
+                    << "the geometry may help."
+                    << exit(FatalError);
+            }
+
+            if (debug)
+            {
+                WarningIn
+                (
+                    "Foam::labelList"
+                    "Foam::backgroundMeshDecomposition::processorPosition"
+                    "("
+                        "const List<point>&"
+                    ") const"
+                )   << "The position " << pts[pI]
+                    << " was not found in the background mesh "
+                    << globalBackgroundBounds_ << ", finding nearest."
+                    << endl;
+            }
+
+            failedPointIndices.append(pI);
+            failedPoints.append(pts[pI]);
+        }
+    }
+
+    labelList ptNearestProc(processorNearestPosition(failedPoints));
+
+    forAll(failedPoints, fPI)
+    {
+        label pI = failedPointIndices[fPI];
+
+        ptProc[pI] = ptNearestProc[fPI];
+    }
+
+    return ptProc;
+}
+
+
+Foam::labelList Foam::backgroundMeshDecomposition::processorNearestPosition
+(
+    const List<point>& pts
+) const
+{
+    DynamicList<label> toCandidateProc;
+    DynamicList<point> testPoints;
+    labelList ptBlockStart(pts.size(), -1);
+    labelList ptBlockSize(pts.size(), -1);
+
+    label nTotalCandidates = 0;
+
+    forAll(pts, pI)
+    {
+        const point& pt = pts[pI];
+
+        label nCandidates = 0;
+
+        forAll(allBackgroundMeshBounds_, procI)
+        {
+            // Candidate points may lie just outside a processor box, increase
+            // test range by using overlaps rather than contains
+            if (allBackgroundMeshBounds_[procI].overlaps(pt, sqr(SMALL*100)))
+            {
+                toCandidateProc.append(procI);
+                testPoints.append(pt);
+
+                nCandidates++;
+            }
+        }
+
+        ptBlockStart[pI] = nTotalCandidates;
+        ptBlockSize[pI] = nCandidates;
+
+        nTotalCandidates += nCandidates;
+    }
+
+    // Needed for reverseDistribute
+    label preDistributionToCandidateProcSize = toCandidateProc.size();
+
+    autoPtr<mapDistribute> map(buildMap(toCandidateProc));
+
+    map().distribute(testPoints);
+
+    List<scalar> distanceSqrToCandidate(testPoints.size(), sqr(GREAT));
+
+    // Test candidate points on candidate processors
+    forAll(testPoints, tPI)
+    {
+        pointIndexHit info = bFTreePtr_().findNearest
+        (
+            testPoints[tPI],
+            sqr(GREAT)
+        );
+
+        if (info.hit())
+        {
+            distanceSqrToCandidate[tPI] = magSqr
+            (
+                testPoints[tPI] - info.hitPoint()
+            );
+        }
+    }
+
+    map().reverseDistribute
+    (
+        preDistributionToCandidateProcSize,
+        distanceSqrToCandidate
+    );
+
+    labelList ptNearestProc(pts.size(), -1);
+
+    forAll(pts, pI)
+    {
+        // Extract the sub list of results for this point
+
+        SubList<scalar> ptNearestProcResults
+        (
+            distanceSqrToCandidate,
+            ptBlockSize[pI],
+            ptBlockStart[pI]
+        );
+
+        scalar nearestProcDistSqr = GREAT;
+
+        forAll(ptNearestProcResults, pPRI)
+        {
+            if (ptNearestProcResults[pPRI] < nearestProcDistSqr)
+            {
+                nearestProcDistSqr = ptNearestProcResults[pPRI];
+
+                ptNearestProc[pI] = toCandidateProc[ptBlockStart[pI] + pPRI];
+            }
+        }
+
+        if (debug)
+        {
+            Pout<< pts[pI] << " nearestProcDistSqr " << nearestProcDistSqr
+                << " ptNearestProc[pI] " << ptNearestProc[pI] << endl;
+        }
+
+        if (ptNearestProc[pI] < 0)
+        {
+            FatalErrorIn
+            (
+                "Foam::labelList"
+                "Foam::backgroundMeshDecomposition::processorNearestPosition"
+                "("
+                    "const List<point>& pts"
+                ") const"
+            )
+                << "The position " << pts[pI]
+                << " did not find a nearest point on the background mesh."
+                << exit(FatalError);
+        }
+    }
+
+    return ptNearestProc;
+}
+
+
+
+Foam::List<Foam::List<Foam::pointIndexHit> >
+Foam::backgroundMeshDecomposition::intersectsProcessors
+(
+    const List<point>& starts,
+    const List<point>& ends,
+    bool includeOwnProcessor
+) const
+{
+    DynamicList<label> toCandidateProc;
+    DynamicList<point> testStarts;
+    DynamicList<point> testEnds;
+    labelList segmentBlockStart(starts.size(), -1);
+    labelList segmentBlockSize(starts.size(), -1);
+
+    label nTotalCandidates = 0;
+
+    forAll(starts, sI)
+    {
+        const point& s = starts[sI];
+        const point& e = ends[sI];
+
+        // Dummy point for treeBoundBox::intersects
+        point p(vector::zero);
+
+        label nCandidates = 0;
+
+        forAll(allBackgroundMeshBounds_, procI)
+        {
+            // It is assumed that the sphere in question overlaps the source
+            // processor, so don't test it, unless includeOwnProcessor is true
+            if
+            (
+                (includeOwnProcessor || procI != Pstream::myProcNo())
+              && allBackgroundMeshBounds_[procI].intersects(s, e, p)
+            )
+            {
+                toCandidateProc.append(procI);
+                testStarts.append(s);
+                testEnds.append(e);
+
+                nCandidates++;
+            }
+        }
+
+        segmentBlockStart[sI] = nTotalCandidates;
+        segmentBlockSize[sI] = nCandidates;
+
+        nTotalCandidates += nCandidates;
+    }
+
+    // Needed for reverseDistribute
+    label preDistributionToCandidateProcSize = toCandidateProc.size();
+
+    autoPtr<mapDistribute> map(buildMap(toCandidateProc));
+
+    map().distribute(testStarts);
+    map().distribute(testEnds);
+
+    List<pointIndexHit> segmentIntersectsCandidate(testStarts.size());
+
+    // Test candidate segments on candidate processors
+    forAll(testStarts, sI)
+    {
+        const point& s = testStarts[sI];
+        const point& e = testEnds[sI];
+
+        // If the sphere finds some elements of the patch, then it overlaps
+        segmentIntersectsCandidate[sI] = bFTreePtr_().findLine(s, e);
+    }
+
+    map().reverseDistribute
+    (
+        preDistributionToCandidateProcSize,
+        segmentIntersectsCandidate
+    );
+
+    List<List<pointIndexHit> > segmentHitProcs(starts.size());
+
+    // Working storage for assessing processors
+    DynamicList<pointIndexHit> tmpProcHits;
+
+    forAll(starts, sI)
+    {
+        tmpProcHits.clear();
+
+        // Extract the sub list of results for this point
+
+        SubList<pointIndexHit> segmentProcResults
+        (
+            segmentIntersectsCandidate,
+            segmentBlockSize[sI],
+            segmentBlockStart[sI]
+        );
+
+        forAll(segmentProcResults, sPRI)
+        {
+            if (segmentProcResults[sPRI].hit())
+            {
+                tmpProcHits.append(segmentProcResults[sPRI]);
+
+                tmpProcHits.last().setIndex
+                (
+                    toCandidateProc[segmentBlockStart[sI] + sPRI]
+                );
+            }
+        }
+
+        segmentHitProcs[sI] = tmpProcHits;
+    }
+
+    return segmentHitProcs;
+}
+
+
+bool Foam::backgroundMeshDecomposition::overlapsOtherProcessors
+(
+    const point& centre,
+    const scalar& radiusSqr
+) const
+{
+    forAll(allBackgroundMeshBounds_, procI)
+    {
+        if (bFTreePtr_().findNearest(centre, radiusSqr).hit())
+        {
+            return true;
+        }
+    }
+
+    return false;
+}
+
+
+Foam::labelList Foam::backgroundMeshDecomposition::overlapProcessors
+(
+    const point& centre,
+    const scalar radiusSqr
+) const
+{
+    DynamicList<label> toProc(Pstream::nProcs());
+
+    forAll(allBackgroundMeshBounds_, procI)
+    {
+        // Test against the bounding box of the processor
+        if
+        (
+            procI != Pstream::myProcNo()
+         && allBackgroundMeshBounds_[procI].overlaps(centre, radiusSqr)
+        )
+        {
+            // Expensive test
+//            if (bFTreePtr_().findNearest(centre, radiusSqr).hit())
+            {
+                toProc.append(procI);
+            }
+        }
+    }
+
+    return toProc;
+}
+
+
+//Foam::labelListList Foam::backgroundMeshDecomposition::overlapsProcessors
+//(
+//    const List<point>& centres,
+//    const List<scalar>& radiusSqrs,
+//    const Delaunay& T,
+//    bool includeOwnProcessor
+//) const
+//{
+//    DynamicList<label> toCandidateProc;
+//    DynamicList<point> testCentres;
+//    DynamicList<scalar> testRadiusSqrs;
+//    labelList sphereBlockStart(centres.size(), -1);
+//    labelList sphereBlockSize(centres.size(), -1);
+//
+//    label nTotalCandidates = 0;
+//
+//    forAll(centres, sI)
+//    {
+//        const point& c = centres[sI];
+//        scalar rSqr = radiusSqrs[sI];
+//
+//        label nCandidates = 0;
+//
+//        forAll(allBackgroundMeshBounds_, procI)
+//        {
+//            // It is assumed that the sphere in question overlaps the source
+//            // processor, so don't test it, unless includeOwnProcessor is true
+//            if
+//            (
+//                (includeOwnProcessor || procI != Pstream::myProcNo())
+//             && allBackgroundMeshBounds_[procI].overlaps(c, rSqr)
+//            )
+//            {
+//                if (bFTreePtr_().findNearest(c, rSqr).hit())
+//                {
+//                    toCandidateProc.append(procI);
+//                    testCentres.append(c);
+//                    testRadiusSqrs.append(rSqr);
+//
+//                    nCandidates++;
+//                }
+//            }
+//        }
+//
+//        sphereBlockStart[sI] = nTotalCandidates;
+//        sphereBlockSize[sI] = nCandidates;
+//
+//        nTotalCandidates += nCandidates;
+//    }
+//
+//    // Needed for reverseDistribute
+////    label preDistributionToCandidateProcSize = toCandidateProc.size();
+////
+////    autoPtr<mapDistribute> map(buildMap(toCandidateProc));
+////
+////    map().distribute(testCentres);
+////    map().distribute(testRadiusSqrs);
+//
+//    // @todo This is faster, but results in more vertices being referred
+//    boolList sphereOverlapsCandidate(testCentres.size(), true);
+////    boolList sphereOverlapsCandidate(testCentres.size(), false);
+////
+////    // Test candidate spheres on candidate processors
+////    forAll(testCentres, sI)
+////    {
+////        const point& c = testCentres[sI];
+////        const scalar rSqr = testRadiusSqrs[sI];
+////
+////        const bool flagOverlap = bFTreePtr_().findNearest(c, rSqr).hit();
+////
+////        if (flagOverlap)
+////        {
+////            //if (vertexOctree.findAnyOverlap(c, rSqr))
+//////            if (vertexOctree.findNearest(c, rSqr*1.001).hit())
+//////            {
+//////                sphereOverlapsCandidate[sI] = true;
+//////            }
+////
+//////            Vertex_handle nearestVertex = T.nearest_vertex
+//////            (
+//////                toPoint<Point>(c)
+//////            );
+//////
+//////            const scalar distSqr = magSqr
+//////            (
+//////                topoint(nearestVertex->point()) - c
+//////            );
+//////
+//////            if (distSqr <= rSqr)
+//////            {
+//////                // If the sphere finds a nearest element of the patch,
+//////                // then it overlaps
+////                sphereOverlapsCandidate[sI] = true;
+//////            }
+////        }
+////    }
+//
+////    map().reverseDistribute
+////    (
+////        preDistributionToCandidateProcSize,
+////        sphereOverlapsCandidate
+////    );
+//
+//    labelListList sphereProcs(centres.size());
+//
+//    // Working storage for assessing processors
+//    DynamicList<label> tmpProcs;
+//
+//    forAll(centres, sI)
+//    {
+//        tmpProcs.clear();
+//
+//        // Extract the sub list of results for this point
+//
+//        SubList<bool> sphereProcResults
+//        (
+//            sphereOverlapsCandidate,
+//            sphereBlockSize[sI],
+//            sphereBlockStart[sI]
+//        );
+//
+//        forAll(sphereProcResults, sPRI)
+//        {
+//            if (sphereProcResults[sPRI])
+//            {
+//                tmpProcs.append(toCandidateProc[sphereBlockStart[sI] + sPRI]);
+//            }
+//        }
+//
+//        sphereProcs[sI] = tmpProcs;
+//    }
+//
+//    return sphereProcs;
+//}
+
+
+//Foam::labelListList Foam::backgroundMeshDecomposition::overlapProcessors
+//(
+//    const point& cc,
+//    const scalar rSqr
+//) const
+//{
+//    DynamicList<label> toCandidateProc;
+//    label sphereBlockStart(-1);
+//    label sphereBlockSize(-1);
+//
+//    label nCandidates = 0;
+//
+//    forAll(allBackgroundMeshBounds_, procI)
+//    {
+//        // It is assumed that the sphere in question overlaps the source
+//        // processor, so don't test it, unless includeOwnProcessor is true
+//        if
+//        (
+//            (includeOwnProcessor || procI != Pstream::myProcNo())
+//         && allBackgroundMeshBounds_[procI].overlaps(cc, rSqr)
+//        )
+//        {
+//            toCandidateProc.append(procI);
+//
+//            nCandidates++;
+//        }
+//    }
+//
+//    sphereBlockSize = nCandidates;
+//    nTotalCandidates += nCandidates;
+//
+//    // Needed for reverseDistribute
+//    label preDistributionToCandidateProcSize = toCandidateProc.size();
+//
+//    autoPtr<mapDistribute> map(buildMap(toCandidateProc));
+//
+//    map().distribute(testCentres);
+//    map().distribute(testRadiusSqrs);
+//
+//    // @todo This is faster, but results in more vertices being referred
+////    boolList sphereOverlapsCandidate(testCentres.size(), true);
+//    boolList sphereOverlapsCandidate(testCentres.size(), false);
+//
+//    // Test candidate spheres on candidate processors
+//    forAll(testCentres, sI)
+//    {
+//        const point& c = testCentres[sI];
+//        const scalar rSqr = testRadiusSqrs[sI];
+//
+//        const bool flagOverlap = bFTreePtr_().findNearest(c, rSqr).hit();
+//
+//        if (flagOverlap)
+//        {
+//            //if (vertexOctree.findAnyOverlap(c, rSqr))
+////            if (vertexOctree.findNearest(c, rSqr*1.001).hit())
+////            {
+////                sphereOverlapsCandidate[sI] = true;
+////            }
+//
+////            Vertex_handle nearestVertex = T.nearest_vertex
+////            (
+////                toPoint<Point>(c)
+////            );
+////
+////            const scalar distSqr = magSqr
+////            (
+////                topoint(nearestVertex->point()) - c
+////            );
+////
+////            if (distSqr <= rSqr)
+////            {
+////                // If the sphere finds a nearest element of the patch, then
+////                // it overlaps
+//                sphereOverlapsCandidate[sI] = true;
+////            }
+//        }
+//    }
+//
+//    map().reverseDistribute
+//    (
+//        preDistributionToCandidateProcSize,
+//        sphereOverlapsCandidate
+//    );
+//
+//    labelListList sphereProcs(centres.size());
+//
+//    // Working storage for assessing processors
+//    DynamicList<label> tmpProcs;
+//
+//    forAll(centres, sI)
+//    {
+//        tmpProcs.clear();
+//
+//        // Extract the sub list of results for this point
+//
+//        SubList<bool> sphereProcResults
+//        (
+//            sphereOverlapsCandidate,
+//            sphereBlockSize[sI],
+//            sphereBlockStart[sI]
+//        );
+//
+//        forAll(sphereProcResults, sPRI)
+//        {
+//            if (sphereProcResults[sPRI])
+//            {
+//                tmpProcs.append(toCandidateProc[sphereBlockStart[sI] + sPRI]);
+//            }
+//        }
+//
+//        sphereProcs[sI] = tmpProcs;
+//    }
+//
+//    return sphereProcs;
+//}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/backgroundMeshDecomposition/backgroundMeshDecomposition.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/backgroundMeshDecomposition/backgroundMeshDecomposition.H
new file mode 100644
index 0000000000000000000000000000000000000000..73aa2fee74a86d32fb81360eec0b602b2aa7ed58
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/backgroundMeshDecomposition/backgroundMeshDecomposition.H
@@ -0,0 +1,340 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::backgroundMeshDecomposition
+
+Description
+    Store a background polyMesh to use for the decomposition of space and
+    queries for parallel conformalVoronoiMesh.
+
+    The requirements are:
+
+    + To have a decomposition of space which can quickly interrogate an
+      arbitrary location from any processor to reliably and unambiguously
+      determine which processor owns the space that the point is in, i.e. as
+      the vertices move, or need inserted as part of the surface conformation,
+      send them to the correct proc.
+
+    + To be able to be dynamically built, refined and redistributed to other
+      procs the partitioning as the meshing progresses to balance the load.
+
+    + To be able to query whether a sphere (the circumsphere of a Delaunay tet)
+      overlaps any part of the space defined by the structure, and whether a
+      ray (Voronoi edge) penetrates any part of the space defined by the
+      structure, this is what determines if points get referred to a processor.
+
+SourceFiles
+    backgroundMeshDecompositionI.H
+    backgroundMeshDecomposition.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef backgroundMeshDecomposition_H
+#define backgroundMeshDecomposition_H
+
+#include "fvMesh.H"
+#include "hexRef8.H"
+#include "cellSet.H"
+#include "meshTools.H"
+#include "polyTopoChange.H"
+#include "mapPolyMesh.H"
+#include "decompositionMethod.H"
+#include "fvMeshDistribute.H"
+#include "removeCells.H"
+#include "mapDistributePolyMesh.H"
+#include "globalIndex.H"
+#include "treeBoundBox.H"
+#include "primitivePatch.H"
+#include "face.H"
+#include "labelList.H"
+#include "pointField.H"
+#include "indexedOctree.H"
+#include "treeDataPrimitivePatch.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+typedef PrimitivePatch<face, List, const pointField, point> bPatch;
+typedef treeDataPrimitivePatch<bPatch> treeDataBPatch;
+
+class Time;
+class Random;
+class conformationSurfaces;
+
+/*---------------------------------------------------------------------------*\
+                  Class backgroundMeshDecomposition Declaration
+\*---------------------------------------------------------------------------*/
+
+class backgroundMeshDecomposition
+{
+    // Private data
+
+        //- Method details dictionary
+        //dictionary coeffsDict_;
+
+        //- Reference to runtime
+        const Time& runTime_;
+
+        //- Reference to surface
+        const conformationSurfaces& geometryToConformTo_;
+
+        //- Random number generator
+        Random& rndGen_;
+
+        //- Mesh stored on for this processor, specifiying the domain that it
+        //  is responsible for.
+        fvMesh mesh_;
+
+        //- Refinement object
+        hexRef8 meshCutter_;
+
+        //- Patch containing an independent representation of the surface of the
+        //  mesh of this processor
+        autoPtr<bPatch> boundaryFacesPtr_;
+
+        //- Search tree for the boundaryFaces_ patch
+        autoPtr<indexedOctree<treeDataBPatch> > bFTreePtr_;
+
+        //- The bounds of all background meshes on all processors
+        treeBoundBoxList allBackgroundMeshBounds_;
+
+        //- The overall bounds of all of the background meshes, used to test if
+        //  a point that is not found on any processor is in the domain at all
+        treeBoundBox globalBackgroundBounds_;
+
+        //- Decomposition dictionary
+        IOdictionary decomposeDict_;
+
+        //- Decomposition method
+        autoPtr<decompositionMethod> decomposerPtr_;
+
+        //- merge distance required by fvMeshDistribute
+        scalar mergeDist_;
+
+        //- Scale of a cell span vs cell size used to decide to refine a cell
+        scalar spanScale_;
+
+        //- Smallest minimum cell size allowed, i.e. to avoid high initial
+        //  refinement of areas of small size
+        scalar minCellSizeLimit_;
+
+        //- Minimum normal level of refinement
+        label minLevels_;
+
+        //- How fine should the initial sample of the volume a box be to
+        //  investigate the local cell size
+        label volRes_;
+
+        //- Allowed factor above the average cell weight before a background
+        //  cell needs to be split
+        scalar maxCellWeightCoeff_;
+
+
+    // Private Member Functions
+
+        void initialRefinement();
+
+        //- Print details of the decomposed mesh
+        void printMeshData(const polyMesh& mesh) const;
+
+        //- Estimate the number of vertices that will be in this cell, returns
+        //  true if the cell is to be split because of the density ratio inside
+        //  it
+        bool refineCell
+        (
+            label cellI,
+            label volType,
+            scalar& weightEstimate
+        ) const;
+
+        //- Select cells for refinement at the surface of the geometry to be
+        //  meshed
+        labelList selectRefinementCells
+        (
+            labelList& volumeStatus,
+            volScalarField& cellWeights
+        ) const;
+
+        //- Build the surface patch and search tree
+        void buildPatchAndTree();
+
+        //- Disallow default bitwise copy construct
+        backgroundMeshDecomposition(const backgroundMeshDecomposition&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const backgroundMeshDecomposition&);
+
+
+public:
+
+    //- Runtime type information
+    ClassName("backgroundMeshDecomposition");
+
+
+    // Constructors
+
+        //- Construct from components in cvMesh operation
+        backgroundMeshDecomposition
+        (
+            const Time& runTime,
+            Random& rndGen,
+            const conformationSurfaces& geometryToConformTo,
+            const dictionary& coeffsDict
+        );
+
+
+    //- Destructor
+    ~backgroundMeshDecomposition();
+
+
+    // Member Functions
+
+        //- Build a mapDistribute for the supplied destination processor data
+        static autoPtr<mapDistribute> buildMap(const List<label>& toProc);
+
+        //- Redistribute the background mesh based on a supplied weight field,
+        //  returning a map to use to redistribute vertices.
+        autoPtr<mapDistributePolyMesh> distribute
+        (
+            volScalarField& cellWeights
+        );
+
+        //- Distribute supplied the points to the appropriate processor
+        autoPtr<mapDistribute> distributePoints(List<point>& points) const;
+
+        //- Is the given position inside the domain of this decomposition
+        bool positionOnThisProcessor(const point& pt) const;
+
+        //- Are the given positions inside the domain of this decomposition
+        boolList positionOnThisProcessor(const List<point>& pts) const;
+
+        //- Does the given box overlap the faces of the boundary of this
+        //  processor
+        bool overlapsThisProcessor(const treeBoundBox& box) const;
+
+        //- Does the given sphere overlap the faces of the boundary of this
+        //  processor
+        bool overlapsThisProcessor
+        (
+            const point& centre,
+            const scalar radiusSqr
+        ) const;
+
+        //- Find nearest intersection of line between start and end, (exposing
+        //  underlying indexedOctree)
+        pointIndexHit findLine
+        (
+            const point& start,
+            const point& end
+        ) const;
+
+        //- Find any intersection of line between start and end, (exposing
+        //  underlying indexedOctree)
+        pointIndexHit findLineAny
+        (
+            const point& start,
+            const point& end
+        ) const;
+
+        //- What processor is the given position on?
+        labelList processorPosition(const List<point>& pts) const;
+
+        //- What is the nearest processor to the given position?
+        labelList processorNearestPosition(const List<point>& pts) const;
+
+        //- Which processors are intersected by the line segment, returns all
+        //  processors whose boundary patch is intersected by the sphere.  By
+        //  default this does not return the processor that the query is
+        //  launched from, it is assumed that the point is on that processor.
+        //  The index data member of the pointIndexHit is replaced with the
+        //  processor index.
+        List<List<pointIndexHit> > intersectsProcessors
+        (
+            const List<point>& starts,
+            const List<point>& ends,
+            bool includeOwnProcessor = false
+        ) const;
+
+        bool overlapsOtherProcessors
+        (
+            const point& centre,
+            const scalar& radiusSqr
+        ) const;
+
+        labelList overlapProcessors
+        (
+            const point& centre,
+            const scalar radiusSqr
+        ) const;
+
+//        //- Which processors overlap the given sphere, returns all processors
+//        //  whose boundary patch is touched by the sphere or whom the sphere
+//        //  is inside.  By default this does not return the processor that the
+//        //  query is launched from, it is assumed that the point is on that
+//        //  processor.
+//        labelListList overlapsProcessors
+//        (
+//            const List<point>& centres,
+//            const List<scalar>& radiusSqrs,
+//            const Delaunay& T,
+//            bool includeOwnProcessor
+//        ) const;
+
+        // Access
+
+            //- Return access to the underlying mesh
+            inline const fvMesh& mesh() const;
+
+            //- Return access to the underlying tree
+            inline const indexedOctree<treeDataBPatch>& tree() const;
+
+            //- Return the boundBox of this processor
+            inline const treeBoundBox& procBounds() const;
+
+            //- Return the cell level of the underlying mesh
+            inline const labelList& cellLevel() const;
+
+            //- Return the point level of the underlying mesh
+            inline const labelList& pointLevel() const;
+
+            //- Return the current decomposition method
+            inline const decompositionMethod& decomposer() const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#include "backgroundMeshDecompositionI.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/backgroundMeshDecomposition/backgroundMeshDecompositionI.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/backgroundMeshDecomposition/backgroundMeshDecompositionI.H
new file mode 100644
index 0000000000000000000000000000000000000000..1f8b7b0a327a1bd7d74fbf5c1ce49719cd4e9734
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/backgroundMeshDecomposition/backgroundMeshDecompositionI.H
@@ -0,0 +1,67 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2011-2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+const Foam::fvMesh& Foam::backgroundMeshDecomposition::mesh() const
+{
+    return mesh_;
+}
+
+
+const Foam::indexedOctree<Foam::treeDataBPatch>&
+Foam::backgroundMeshDecomposition::tree() const
+{
+    return bFTreePtr_();
+}
+
+
+const Foam::treeBoundBox&
+Foam::backgroundMeshDecomposition::procBounds() const
+{
+    return allBackgroundMeshBounds_[Pstream::myProcNo()];
+}
+
+
+const Foam::labelList& Foam::backgroundMeshDecomposition::cellLevel() const
+{
+    return meshCutter_.cellLevel();
+}
+
+
+const Foam::labelList& Foam::backgroundMeshDecomposition::pointLevel() const
+{
+    return meshCutter_.pointLevel();
+}
+
+
+const Foam::decompositionMethod&
+Foam::backgroundMeshDecomposition::decomposer() const
+{
+    return decomposerPtr_();
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellAspectRatioControl/cellAspectRatioControl.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellAspectRatioControl/cellAspectRatioControl.C
new file mode 100644
index 0000000000000000000000000000000000000000..dfba259e674b5dbd6b5cca8bb4e32ab0ff59a3b7
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellAspectRatioControl/cellAspectRatioControl.C
@@ -0,0 +1,110 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "cellAspectRatioControl.H"
+#include "vectorTools.H"
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::cellAspectRatioControl::cellAspectRatioControl
+(
+    const dictionary& motionDict
+)
+:
+    aspectRatioDict_(motionDict.subOrEmptyDict("cellAspectRatioControl")),
+    aspectRatio_(aspectRatioDict_.lookupOrDefault<scalar>("aspectRatio", 1.0)),
+    aspectRatioDirection_
+    (
+        aspectRatioDict_.lookupOrDefault<vector>
+        (
+            "aspectRatioDirection",
+            vector(0, 0, 0)
+        )
+    )
+{
+    Info<< nl << "    Cell Aspect Ratio Control" << nl
+        << "        Ratio     : " << aspectRatio_ << nl
+        << "        Direction : " << aspectRatioDirection_ << nl << endl;
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::cellAspectRatioControl::~cellAspectRatioControl()
+{}
+
+
+// * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * * //
+
+void Foam::cellAspectRatioControl::updateCellSizeAndFaceArea
+(
+    vector& alignmentDir,
+    scalar& targetFaceArea,
+    scalar& targetCellSize
+) const
+{
+    const scalar cosAngle = mag
+    (
+        vectorTools::cosPhi(alignmentDir, aspectRatioDirection_)
+    );
+
+    // Change target face area based on aspect ratio
+    targetFaceArea
+        += targetFaceArea
+          *(aspectRatio_ - 1.0)
+          *(1.0 - cosAngle);
+
+    // Change target cell size based on aspect ratio
+    targetCellSize
+        += targetCellSize
+          *(aspectRatio_ - 1.0)
+          *cosAngle;
+
+    alignmentDir *= 0.5*targetCellSize;
+}
+
+
+void Foam::cellAspectRatioControl::updateDeltaVector
+(
+    const vector& alignmentDir,
+    const scalar targetCellSize,
+    const scalar rABMag,
+    vector& delta
+) const
+{
+    const scalar cosAngle = mag
+    (
+        vectorTools::cosPhi(alignmentDir, aspectRatioDirection_)
+    );
+
+    delta += 0.5
+            *delta
+            *cosAngle
+            *(targetCellSize/rABMag)
+            *(aspectRatio_ - 1.0);
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellAspectRatioControl/cellAspectRatioControl.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellAspectRatioControl/cellAspectRatioControl.H
new file mode 100644
index 0000000000000000000000000000000000000000..ac47311940a7c3672b9c2e378946d1c5b8b658e1
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellAspectRatioControl/cellAspectRatioControl.H
@@ -0,0 +1,115 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::cellAspectRatioControl
+
+Description
+
+SourceFiles
+    cellAspectRatioControl.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef cellAspectRatioControl_H
+#define cellAspectRatioControl_H
+
+#include "dictionary.H"
+#include "vector.H"
+#include "scalar.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+
+/*---------------------------------------------------------------------------*\
+                     Class cellAspectRatioControl Declaration
+\*---------------------------------------------------------------------------*/
+
+class cellAspectRatioControl
+{
+    // Private data
+
+        const dictionary aspectRatioDict_;
+
+        const scalar aspectRatio_;
+
+        const vector aspectRatioDirection_;
+
+
+    // Private Member Functions
+
+        //- Disallow default bitwise copy construct
+        cellAspectRatioControl(const cellAspectRatioControl&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const cellAspectRatioControl&);
+
+
+public:
+
+    // Constructors
+
+        //- Construct from dictionary
+        cellAspectRatioControl
+        (
+            const dictionary& motionDict
+        );
+
+
+    //- Destructor
+    virtual ~cellAspectRatioControl();
+
+
+    // Member Functions
+
+        // Query
+
+            void updateCellSizeAndFaceArea
+            (
+                vector& alignmentDir,
+                scalar& targetFaceArea,
+                scalar& targetCellSize
+            ) const;
+
+            void updateDeltaVector
+            (
+                const vector& alignmentDir,
+                const scalar targetCellSize,
+                const scalar rABMag,
+                vector& delta
+            ) const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellShapeControl/cellShapeControl.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellShapeControl/cellShapeControl.C
new file mode 100644
index 0000000000000000000000000000000000000000..932b264f94345aa6aef7b9afb3f705e6060e9994
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellShapeControl/cellShapeControl.C
@@ -0,0 +1,930 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012-2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "cellShapeControl.H"
+#include "pointField.H"
+#include "scalarField.H"
+#include "triadField.H"
+#include "cellSizeAndAlignmentControl.H"
+#include "searchableSurfaceControl.H"
+#include "cellSizeFunction.H"
+
+// * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * * //
+
+template <class Triangulation, class Type>
+Foam::tmp<Foam::Field<Type> > Foam::cellShapeControl::filterFarPoints
+(
+    const Triangulation& mesh,
+    const Field<Type>& field
+)
+{
+    tmp<Field<Type> > tNewField(new Field<Type>(field.size()));
+    Field<Type>& newField = tNewField();
+
+    label added = 0;
+    label count = 0;
+
+    for
+    (
+        typename Triangulation::Finite_vertices_iterator vit =
+            mesh.finite_vertices_begin();
+        vit != mesh.finite_vertices_end();
+        ++vit
+    )
+    {
+        if (vit->real())
+        {
+            newField[added++] = field[count];
+        }
+
+        count++;
+    }
+
+    newField.resize(added);
+
+    return tNewField;
+}
+
+
+template <class Triangulation>
+Foam::autoPtr<Foam::mapDistribute> Foam::cellShapeControl::buildReferredMap
+(
+    const Triangulation& mesh,
+    labelList& indices
+)
+{
+    globalIndex globalIndexing(mesh.vertexCount());
+
+    DynamicList<label> dynIndices(mesh.vertexCount()/10);
+
+    for
+    (
+        typename Triangulation::Finite_vertices_iterator vit =
+            mesh.finite_vertices_begin();
+        vit != mesh.finite_vertices_end();
+        ++vit
+    )
+    {
+        if (vit->referred())
+        {
+            dynIndices.append
+            (
+                globalIndexing.toGlobal(vit->procIndex(), vit->index())
+            );
+        }
+    }
+
+    indices.transfer(dynIndices);
+
+    List<Map<label> > compactMap;
+    return autoPtr<mapDistribute>
+    (
+        new mapDistribute
+        (
+            globalIndexing,
+            indices,
+            compactMap
+        )
+    );
+}
+
+
+template <class Triangulation>
+Foam::autoPtr<Foam::mapDistribute> Foam::cellShapeControl::buildMap
+(
+    const Triangulation& mesh,
+    labelListList& pointPoints
+)
+{
+    pointPoints.setSize(mesh.vertexCount());
+
+    globalIndex globalIndexing(mesh.vertexCount());
+
+    for
+    (
+        typename Triangulation::Finite_vertices_iterator vit =
+            mesh.finite_vertices_begin();
+        vit != mesh.finite_vertices_end();
+        ++vit
+    )
+    {
+        if (!vit->real())
+        {
+            continue;
+        }
+
+        std::list<typename Triangulation::Vertex_handle> adjVerts;
+        mesh.finite_adjacent_vertices(vit, std::back_inserter(adjVerts));
+
+        DynamicList<label> indices(adjVerts.size());
+
+        for
+        (
+            typename std::list<typename Triangulation::Vertex_handle>::
+                const_iterator adjVertI = adjVerts.begin();
+            adjVertI != adjVerts.end();
+            ++adjVertI
+        )
+        {
+            typename Triangulation::Vertex_handle vh = *adjVertI;
+
+            if (!vh->farPoint())
+            {
+                indices.append
+                (
+                    globalIndexing.toGlobal(vh->procIndex(), vh->index())
+                );
+            }
+        }
+
+        pointPoints[vit->index()].transfer(indices);
+    }
+
+    List<Map<label> > compactMap;
+    return autoPtr<mapDistribute>
+    (
+        new mapDistribute
+        (
+            globalIndexing,
+            pointPoints,
+            compactMap
+        )
+    );
+}
+
+
+template <class Triangulation>
+Foam::tmp<Foam::triadField> Foam::cellShapeControl::buildAlignmentField
+(
+    const Triangulation& mesh
+)
+{
+    tmp<triadField> tAlignments
+    (
+        new triadField(mesh.vertexCount(), triad::unset)
+    );
+    triadField& alignments = tAlignments();
+
+    for
+    (
+        typename Triangulation::Finite_vertices_iterator vit =
+            mesh.finite_vertices_begin();
+        vit != mesh.finite_vertices_end();
+        ++vit
+    )
+    {
+        if (!vit->real())
+        {
+            continue;
+        }
+
+        alignments[vit->index()] = vit->alignment();
+    }
+
+    return tAlignments;
+}
+
+
+template <class Triangulation>
+Foam::tmp<Foam::pointField> Foam::cellShapeControl::buildPointField
+(
+    const Triangulation& mesh
+)
+{
+    tmp<pointField> tPoints
+    (
+        new pointField(mesh.vertexCount(), point(GREAT, GREAT, GREAT))
+    );
+    pointField& points = tPoints();
+
+    for
+    (
+        typename Triangulation::Finite_vertices_iterator vit =
+            mesh.finite_vertices_begin();
+        vit != mesh.finite_vertices_end();
+        ++vit
+    )
+    {
+        if (!vit->real())
+        {
+            continue;
+        }
+
+        points[vit->index()] = topoint(vit->point());
+    }
+
+    return tPoints;
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::cellShapeControl::cellShapeControl
+(
+    const Time& runTime,
+    const dictionary& motionDict,
+    const searchableSurfaces& allGeometry,
+    const conformationSurfaces& geometryToConformTo
+)
+:
+    dictionary(motionDict),
+    runTime_(runTime),
+    allGeometry_(allGeometry),
+    geometryToConformTo_(geometryToConformTo),
+    defaultCellSize_(readScalar(lookup("defaultCellSize"))),
+    minimumCellSize_(readScalar(lookup("minimumCellSize"))),
+    shapeControlMesh_(runTime),
+    aspectRatio_(motionDict),
+    sizeAndAlignment_
+    (
+        runTime,
+        motionDict.subDict("shapeControlFunctions"),
+        geometryToConformTo,
+        defaultCellSize_
+    )
+{}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::cellShapeControl::~cellShapeControl()
+{}
+
+
+// * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * * //
+
+Foam::scalarField Foam::cellShapeControl::cellSize
+(
+    const pointField& pts
+) const
+{
+    scalarField cellSizes(pts.size());
+
+    forAll(pts, i)
+    {
+        cellSizes[i] = cellSize(pts[i]);
+    }
+
+    return cellSizes;
+}
+
+
+Foam::scalar Foam::cellShapeControl::cellSize(const point& pt) const
+{
+    scalarList bary;
+    cellShapeControlMesh::Cell_handle ch;
+
+    shapeControlMesh_.barycentricCoords(pt, bary, ch);
+
+    scalar size = 0;
+
+    label nFarPoints = 0;
+    for (label pI = 0; pI < 4; ++pI)
+    {
+        if (ch->vertex(pI)->farPoint())
+        {
+            nFarPoints++;
+        }
+    }
+
+    if (shapeControlMesh_.is_infinite(ch))
+    {
+//        if (nFarPoints != 0)
+//        {
+//            for (label pI = 0; pI < 4; ++pI)
+//            {
+//                if (!ch->vertex(pI)->farPoint())
+//                {
+//                    size = ch->vertex(pI)->targetCellSize();
+//                    return size;
+//                }
+//            }
+//        }
+
+        // Look up nearest point
+        cellShapeControlMesh::Vertex_handle nearV =
+            shapeControlMesh_.nearest_vertex
+            (
+                toPoint<cellShapeControlMesh::Point>(pt)
+            );
+
+        size = nearV->targetCellSize();
+    }
+    else
+    {
+        if (nFarPoints != 0)
+        {
+            for (label pI = 0; pI < 4; ++pI)
+            {
+                if (!ch->vertex(pI)->farPoint())
+                {
+                    size = ch->vertex(pI)->targetCellSize();
+                    return size;
+                }
+            }
+        }
+        else
+        {
+            forAll(bary, pI)
+            {
+                size += bary[pI]*ch->vertex(pI)->targetCellSize();
+            }
+        }
+    }
+
+    return size;
+}
+
+
+//- Return the cell alignment at the given location
+Foam::tensor Foam::cellShapeControl::cellAlignment(const point& pt) const
+{
+    scalarList bary;
+    cellShapeControlMesh::Cell_handle ch;
+
+    shapeControlMesh_.barycentricCoords(pt, bary, ch);
+
+    tensor alignment = tensor::zero;
+
+    label nFarPoints = 0;
+    for (label pI = 0; pI < 4; ++pI)
+    {
+        if (ch->vertex(pI)->farPoint())
+        {
+            nFarPoints++;
+        }
+    }
+
+    if (shapeControlMesh_.is_infinite(ch) || nFarPoints == 4)
+    {
+        Pout<< "At Infinite vertex" << endl;
+
+        if (nFarPoints != 0)
+        {
+            for (label pI = 0; pI < 4; ++pI)
+            {
+                if (!ch->vertex(pI)->farPoint())
+                {
+                    alignment = ch->vertex(pI)->alignment();
+                    return alignment;
+                }
+            }
+        }
+
+//        cellShapeControlMesh::Vertex_handle nearV =
+//            shapeControlMesh_.nearest_vertex
+//            (
+//                toPoint<cellShapeControlMesh::Point>(pt)
+//            );
+//
+//        alignment = nearV->alignment();
+    }
+    else
+    {
+//        forAll(bary, pI)
+//        {
+//            alignment += bary[pI]*ch->vertex(pI)->alignment();
+//        }
+
+        cellShapeControlMesh::Vertex_handle nearV =
+            shapeControlMesh_.nearest_vertex_in_cell
+            (
+                toPoint<cellShapeControlMesh::Point>(pt),
+                ch
+            );
+
+        alignment = nearV->alignment();
+    }
+
+    return alignment;
+}
+
+
+void Foam::cellShapeControl::cellSizeAndAlignment
+(
+    const point& pt,
+    scalar& size,
+    tensor& alignment
+) const
+{
+    scalarList bary;
+    cellShapeControlMesh::Cell_handle ch;
+
+    shapeControlMesh_.barycentricCoords(pt, bary, ch);
+
+    alignment = tensor::zero;
+    size = 0;
+
+    label nFarPoints = 0;
+    for (label pI = 0; pI < 4; ++pI)
+    {
+        if (ch->vertex(pI)->farPoint())
+        {
+            nFarPoints++;
+        }
+    }
+
+    if (shapeControlMesh_.is_infinite(ch))
+    {
+        if (nFarPoints != 0)
+        {
+            for (label pI = 0; pI < 4; ++pI)
+            {
+                if (!ch->vertex(pI)->farPoint())
+                {
+                    size = ch->vertex(pI)->targetCellSize();
+                    alignment = ch->vertex(pI)->alignment();
+                    return;
+                }
+            }
+        }
+
+//        cellShapeControlMesh::Vertex_handle nearV =
+//            shapeControlMesh_.nearest_vertex
+//            (
+//                toPoint<cellShapeControlMesh::Point>(pt)
+//            );
+//
+//        size = nearV->targetCellSize();
+//        alignment = nearV->alignment();
+    }
+    else
+    {
+        if (nFarPoints != 0)
+        {
+            for (label pI = 0; pI < 4; ++pI)
+            {
+                if (!ch->vertex(pI)->farPoint())
+                {
+                    size = ch->vertex(pI)->targetCellSize();
+                    alignment = ch->vertex(pI)->alignment();
+                    return;
+                }
+            }
+        }
+        else
+        {
+//            triad tri;
+
+            forAll(bary, pI)
+            {
+                size += bary[pI]*ch->vertex(pI)->targetCellSize();
+
+//                triad triTmp2 = ch->vertex(pI)->alignment();
+//                tri += triTmp2*bary[pI];
+            }
+
+//            tri.normalize();
+//            tri.orthogonalize();
+//            tri = tri.sortxyz();
+//
+//            alignment = tri;
+
+            cellShapeControlMesh::Vertex_handle nearV =
+                shapeControlMesh_.nearest_vertex
+                (
+                    toPoint<cellShapeControlMesh::Point>(pt)
+                );
+
+            alignment = nearV->alignment();
+        }
+    }
+}
+
+
+void Foam::cellShapeControl::initialMeshPopulation
+(
+    const autoPtr<backgroundMeshDecomposition>& decomposition
+)
+{
+    // Need to pass in the background mesh decomposition so that can test if
+    // a point to insert is on the processor.
+    if (Pstream::parRun())
+    {
+        shapeControlMesh_.insertBoundingPoints(decomposition().procBounds());
+    }
+    else
+    {
+        shapeControlMesh_.insertBoundingPoints(allGeometry_.bounds());
+    }
+
+    const PtrList<cellSizeAndAlignmentControl>& controlFunctions =
+        sizeAndAlignment_.controlFunctions();
+
+    forAll(controlFunctions, fI)
+    {
+        const cellSizeAndAlignmentControl& controlFunction =
+            controlFunctions[fI];
+
+        Info<< "Inserting points from " << controlFunction.name()
+            << " (" << controlFunction.type() << ")" << endl;
+
+        pointField pts;
+        scalarField sizes;
+        triadField alignments;
+
+        controlFunction.initialVertices(pts, sizes, alignments);
+
+        List<Vb> vertices(pts.size());
+
+        // Clip the minimum size
+        forAll(vertices, vI)
+        {
+            vertices[vI] = Vb(pts[vI], Vb::vtInternal);
+            vertices[vI].targetCellSize() = max(sizes[vI], minimumCellSize_);
+            vertices[vI].alignment() = alignments[vI];
+        }
+
+        pts.clear();
+        sizes.clear();
+        alignments.clear();
+
+        label nRejected = 0;
+
+        PackedBoolList keepVertex(vertices.size(), true);
+
+        if (Pstream::parRun())
+        {
+            forAll(vertices, vI)
+            {
+                const bool onProc = decomposition().positionOnThisProcessor
+                (
+                    topoint(vertices[vI].point())
+                );
+
+                if (!onProc)
+                {
+                    keepVertex[vI] = false;
+                }
+            }
+        }
+
+        inplaceSubset(keepVertex, vertices);
+
+        const label preInsertedSize = shapeControlMesh_.number_of_vertices();
+
+        shapeControlMesh_.rangeInsertWithInfo(vertices.begin(), vertices.end());
+
+        Info<< "    Inserted "
+            << returnReduce
+               (
+                   shapeControlMesh_.number_of_vertices()
+                 - preInsertedSize, sumOp<label>()
+               )
+            << "/" << vertices.size()
+            << endl;
+    }
+}
+
+
+Foam::label Foam::cellShapeControl::refineMesh
+(
+    const autoPtr<backgroundMeshDecomposition>& decomposition
+)
+{
+    const pointField cellCentres(shapeControlMesh_.cellCentres());
+
+    Info<< "    Created cell centres" << endl;
+
+    const PtrList<cellSizeAndAlignmentControl>& controlFunctions =
+        sizeAndAlignment_.controlFunctions();
+
+    DynamicList<Vb> verts(shapeControlMesh_.number_of_vertices());
+
+    forAll(cellCentres, cellI)
+    {
+        const Foam::point& pt = cellCentres[cellI];
+
+        if (!geometryToConformTo_.inside(pt))
+        {
+            continue;
+        }
+
+        scalarList bary;
+        cellShapeControlMesh::Cell_handle ch;
+
+        shapeControlMesh_.barycentricCoords(pt, bary, ch);
+
+        if (shapeControlMesh_.is_infinite(ch))
+        {
+            continue;
+        }
+
+        scalar interpolatedSize = 0;
+        forAll(bary, pI)
+        {
+            interpolatedSize += bary[pI]*ch->vertex(pI)->targetCellSize();
+        }
+
+        label lastPriority = labelMax;
+        scalar lastCellSize = GREAT;
+        forAll(controlFunctions, fI)
+        {
+            const cellSizeAndAlignmentControl& controlFunction =
+                controlFunctions[fI];
+
+            if (controlFunction.priority() > lastPriority)
+            {
+                continue;
+            }
+
+            if (isA<searchableSurfaceControl>(controlFunction))
+            {
+                const cellSizeFunction& sizeFunction =
+                    dynamicCast<const searchableSurfaceControl>
+                    (
+                        controlFunction
+                    ).sizeFunction();
+
+                scalar cellSize = 0;
+                if (sizeFunction.cellSize(pt, cellSize))
+                {
+                    if (controlFunction.priority() == lastPriority)
+                    {
+                        if (cellSize < lastCellSize)
+                        {
+                            lastCellSize = cellSize;
+                        }
+                    }
+                    else
+                    {
+                        lastCellSize = cellSize;
+                    }
+
+                    lastPriority = controlFunction.priority();
+                }
+            }
+        }
+
+        if
+        (
+            lastCellSize < GREAT
+         //&& mag(interpolatedSize - lastCellSize)/lastCellSize > 0.2
+        )
+        {
+            if (Pstream::parRun())
+            {
+                if (!decomposition().positionOnThisProcessor(pt))
+                {
+                    continue;
+                }
+            }
+
+            verts.append
+            (
+                Vb
+                (
+                    toPoint<cellShapeControlMesh::Point>(pt),
+                    Vb::vtInternal
+                )
+            );
+            verts.last().targetCellSize() = lastCellSize;
+            verts.last().alignment() = triad::unset;
+        }
+    }
+
+    shapeControlMesh_.insertPoints(verts);
+
+    return verts.size();
+}
+
+
+void Foam::cellShapeControl::smoothMesh()
+{
+    label maxSmoothingIterations = readLabel(lookup("maxSmoothingIterations"));
+    scalar minResidual = 0;
+
+    labelListList pointPoints;
+    autoPtr<mapDistribute> meshDistributor = buildMap
+    (
+        shapeControlMesh_,
+        pointPoints
+    );
+
+    triadField alignments(buildAlignmentField(shapeControlMesh_));
+    pointField points(buildPointField(shapeControlMesh_));
+    // Setup the sizes and alignments on each point
+    triadField fixedAlignments(shapeControlMesh_.vertexCount(), triad::unset);
+
+    for
+    (
+        CellSizeDelaunay::Finite_vertices_iterator vit =
+            shapeControlMesh_.finite_vertices_begin();
+        vit != shapeControlMesh_.finite_vertices_end();
+        ++vit
+    )
+    {
+        if (vit->real())
+        {
+            fixedAlignments[vit->index()] = vit->alignment();
+        }
+    }
+
+    Info<< nl << "Smoothing alignments" << endl;
+
+    for (label iter = 0; iter < maxSmoothingIterations; iter++)
+    {
+        Info<< "Iteration " << iter;
+
+        meshDistributor().distribute(points);
+        meshDistributor().distribute(alignments);
+
+        scalar residual = 0;
+
+        triadField triadAv(alignments.size(), triad::unset);
+
+        forAll(pointPoints, pI)
+        {
+            const labelList& pPoints = pointPoints[pI];
+
+            if (pPoints.empty())
+            {
+                continue;
+            }
+
+            triad& newTriad = triadAv[pI];
+
+            forAll(pPoints, adjPointI)
+            {
+                const label adjPointIndex = pPoints[adjPointI];
+
+                scalar dist = mag(points[pI] - points[adjPointIndex]);
+
+                triad tmpTriad = alignments[adjPointIndex];
+
+                for (direction dir = 0; dir < 3; dir++)
+                {
+                    if (tmpTriad.set(dir))
+                    {
+                        tmpTriad[dir] *= (1.0/dist);
+                    }
+                }
+
+                newTriad += tmpTriad;
+            }
+
+            newTriad.normalize();
+            newTriad.orthogonalize();
+            newTriad = newTriad.sortxyz();
+
+            // Enforce the boundary conditions
+            const triad& fixedAlignment = fixedAlignments[pI];
+
+            label nFixed = 0;
+
+            forAll(fixedAlignment, dirI)
+            {
+                if (fixedAlignment.set(dirI))
+                {
+                    nFixed++;
+                }
+            }
+
+            if (nFixed == 1)
+            {
+                forAll(fixedAlignment, dirI)
+                {
+                    if (fixedAlignment.set(dirI))
+                    {
+                        newTriad.align(fixedAlignment[dirI]);
+                    }
+                }
+            }
+            else if (nFixed == 2)
+            {
+                forAll(fixedAlignment, dirI)
+                {
+                    if (fixedAlignment.set(dirI))
+                    {
+                        newTriad[dirI] = fixedAlignment[dirI];
+                    }
+                    else
+                    {
+                        newTriad[dirI] = triad::unset[dirI];
+                    }
+                }
+
+                newTriad.orthogonalize();
+            }
+            else if (nFixed == 3)
+            {
+                forAll(fixedAlignment, dirI)
+                {
+                    if (fixedAlignment.set(dirI))
+                    {
+                        newTriad[dirI] = fixedAlignment[dirI];
+                    }
+                }
+            }
+
+            const triad& oldTriad = alignments[pI];
+
+            for (direction dir = 0; dir < 3; ++dir)
+            {
+                if
+                (
+                    newTriad.set(dir)
+                 && oldTriad.set(dir)
+                 //&& !fixedAlignment.set(dir)
+                )
+                {
+                    scalar dotProd = (oldTriad[dir] & newTriad[dir]);
+                    scalar diff = mag(dotProd) - 1.0;
+
+                    residual += mag(diff);
+                }
+            }
+
+//            if (iter == 198 || iter == 199)
+//            {
+//                Info<< "Triad" << nl
+//                    << "    Fixed (" << nFixed << ") = " << fixedAlignment
+//                    << nl
+//                    << "    Old      = " << oldTriad << nl
+//                    << "    Pre-Align= " << triadAv[pI] << nl
+//                    << "    New      = " << newTriad << nl
+//                    << "    Residual = " << residual << endl;
+//            }
+        }
+
+        forAll(alignments, pI)
+        {
+            alignments[pI] = triadAv[pI].sortxyz();
+        }
+
+        reduce(residual, sumOp<scalar>());
+
+        Info<< ", Residual = " << residual << endl;
+
+        if (iter > 0 && residual <= minResidual)
+        {
+            break;
+        }
+    }
+
+    meshDistributor().distribute(alignments);
+
+    for
+    (
+        CellSizeDelaunay::Finite_vertices_iterator vit =
+            shapeControlMesh_.finite_vertices_begin();
+        vit != shapeControlMesh_.finite_vertices_end();
+        ++vit
+    )
+    {
+        if (vit->real())
+        {
+            vit->alignment() = alignments[vit->index()];
+        }
+    }
+
+    labelList referredPoints;
+    autoPtr<mapDistribute> referredDistributor = buildReferredMap
+    (
+        shapeControlMesh_,
+        referredPoints
+    );
+
+    alignments.setSize(shapeControlMesh_.vertexCount());
+    referredDistributor().distribute(alignments);
+
+    label referredI = 0;
+    for
+    (
+        CellSizeDelaunay::Finite_vertices_iterator vit =
+            shapeControlMesh_.finite_vertices_begin();
+        vit != shapeControlMesh_.finite_vertices_end();
+        ++vit
+    )
+    {
+        if (vit->referred())
+        {
+            vit->alignment() = alignments[referredPoints[referredI++]];
+        }
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellShapeControl/cellShapeControl.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellShapeControl/cellShapeControl.H
new file mode 100644
index 0000000000000000000000000000000000000000..040ff6f2e09ee51571a0f525ec6507816a9bf1d7
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellShapeControl/cellShapeControl.H
@@ -0,0 +1,213 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012-2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::cellShapeControl
+
+Description
+
+SourceFiles
+    cellShapeControlI.H
+    cellShapeControl.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef cellShapeControl_H
+#define cellShapeControl_H
+
+#include "dictionary.H"
+#include "autoPtr.H"
+#include "tensor.H"
+#include "point.H"
+#include "primitiveFieldsFwd.H"
+#include "pointFieldFwd.H"
+#include "Time.H"
+#include "searchableSurfaces.H"
+#include "conformationSurfaces.H"
+#include "cellAspectRatioControl.H"
+#include "cellSizeAndAlignmentControls.H"
+#include "cellShapeControlMesh.H"
+#include "backgroundMeshDecomposition.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+
+/*---------------------------------------------------------------------------*\
+                     Class cellShapeControl Declaration
+\*---------------------------------------------------------------------------*/
+
+class cellShapeControl
+:
+    public dictionary
+{
+    // Private data
+
+        const Time& runTime_;
+
+        const searchableSurfaces& allGeometry_;
+
+        const conformationSurfaces& geometryToConformTo_;
+
+        const scalar defaultCellSize_;
+
+        const scalar minimumCellSize_;
+
+        cellShapeControlMesh shapeControlMesh_;
+
+        cellAspectRatioControl aspectRatio_;
+
+        cellSizeAndAlignmentControls sizeAndAlignment_;
+
+
+    // Private Member Functions
+
+        template <class Triangulation, class Type>
+        tmp<Field<Type> > filterFarPoints
+        (
+            const Triangulation& mesh,
+            const Field<Type>& field
+        );
+
+        template <class Triangulation>
+        autoPtr<mapDistribute> buildMap
+        (
+            const Triangulation& mesh,
+            labelListList& pointPoints
+        );
+
+        template <class Triangulation>
+        autoPtr<mapDistribute> buildReferredMap
+        (
+            const Triangulation& mesh,
+            labelList& indices
+        );
+
+        template <class Triangulation>
+        tmp<triadField> buildAlignmentField(const Triangulation& mesh);
+
+        template <class Triangulation>
+        tmp<pointField> buildPointField(const Triangulation& mesh);
+
+        //- Disallow default bitwise copy construct
+        cellShapeControl(const cellShapeControl&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const cellShapeControl&);
+
+
+public:
+
+    //- Runtime type information
+    ClassName("cellShapeControl");
+
+
+    // Constructors
+
+        //- Construct from dictionary and references to conformalVoronoiMesh and
+        //  searchableSurfaces
+        cellShapeControl
+        (
+            const Time& runTime,
+            const dictionary& cellShapeControlDict,
+            const searchableSurfaces& allGeometry,
+            const conformationSurfaces& geometryToConformTo
+        );
+
+
+    //- Destructor
+    ~cellShapeControl();
+
+
+    // Member Functions
+
+        // Access
+
+            inline const scalar& defaultCellSize() const;
+
+            inline cellShapeControlMesh& shapeControlMesh();
+
+            inline const cellShapeControlMesh& shapeControlMesh() const;
+
+            inline const cellAspectRatioControl& aspectRatio() const;
+
+            inline const cellSizeAndAlignmentControls& sizeAndAlignment() const;
+
+
+        // Query
+
+            //- Return the cell size at the given location
+            scalar cellSize(const point& pt) const;
+
+            scalarField cellSize(const pointField& pts) const;
+
+            //- Return the cell alignment at the given location
+            tensor cellAlignment(const point& pt) const;
+
+            void cellSizeAndAlignment
+            (
+                const point& pt,
+                scalar& size,
+                tensor& alignment
+            ) const;
+
+
+        // Edit
+
+            void initialMeshPopulation
+            (
+                const autoPtr<backgroundMeshDecomposition>& decomposition
+            );
+
+            label refineMesh
+            (
+                const autoPtr<backgroundMeshDecomposition>& decomposition
+            );
+
+            void smoothMesh();
+
+            //- Add a control point with a specified size and alignment
+//            virtual void addControlPoint
+//            (
+//                const point& pt,
+//                const scalar& size,
+//                const tensor& alignment
+//            );
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#include "cellShapeControlI.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellShapeControl/cellShapeControlI.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellShapeControl/cellShapeControlI.H
new file mode 100644
index 0000000000000000000000000000000000000000..f7fdebc93192998027adbdfc2ba6527221a0b248
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellShapeControl/cellShapeControlI.H
@@ -0,0 +1,55 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+inline Foam::cellShapeControlMesh&
+Foam::cellShapeControl::shapeControlMesh()
+{
+    return shapeControlMesh_;
+}
+
+
+inline const Foam::cellShapeControlMesh&
+Foam::cellShapeControl::shapeControlMesh() const
+{
+    return shapeControlMesh_;
+}
+
+
+inline const Foam::scalar& Foam::cellShapeControl::defaultCellSize() const
+{
+    return defaultCellSize_;
+}
+
+
+inline const Foam::cellAspectRatioControl&
+Foam::cellShapeControl::aspectRatio() const
+{
+    return aspectRatio_;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellShapeControlMesh/cellShapeControlMesh.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellShapeControlMesh/cellShapeControlMesh.C
new file mode 100644
index 0000000000000000000000000000000000000000..ae57bbb087bb74a2f37f0efb6a4d52b6f4daaeec
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellShapeControlMesh/cellShapeControlMesh.C
@@ -0,0 +1,760 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "cellShapeControlMesh.H"
+#include "pointIOField.H"
+#include "scalarIOField.H"
+#include "tensorIOField.H"
+#include "tetrahedron.H"
+#include "plane.H"
+#include "transform.H"
+#include "meshTools.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+defineTypeNameAndDebug(cellShapeControlMesh, 0);
+
+}
+
+
+// * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * * //
+
+//Foam::tensor Foam::cellShapeControlMesh::requiredAlignment
+//(
+//    const Foam::point& pt,
+//    const searchableSurfaces& allGeometry,
+//    const conformationSurfaces& geometryToConformTo
+//) const
+//{
+//    pointIndexHit surfHit;
+//    label hitSurface;
+//
+//    geometryToConformTo.findSurfaceNearest
+//    (
+//        pt,
+//        sqr(GREAT),
+//        surfHit,
+//        hitSurface
+//    );
+//
+//    if (!surfHit.hit())
+//    {
+//        FatalErrorIn
+//        (
+//            "Foam::tensor Foam::conformalVoronoiMesh::requiredAlignment"
+//        )   << "findSurfaceNearest did not find a hit across the surfaces."
+//            << exit(FatalError) << endl;
+//    }
+//
+//    // Primary alignment
+//
+//    vectorField norm(1);
+//
+//    allGeometry[hitSurface].getNormal
+//    (
+//        List<pointIndexHit>(1, surfHit),
+//        norm
+//    );
+//
+//    const vector np = norm[0];
+//
+//    // Generate equally spaced 'spokes' in a circle normal to the
+//    // direction from the vertex to the closest point on the surface
+//    // and look for a secondary intersection.
+//
+//    const vector d = surfHit.hitPoint() - pt;
+//
+//    const tensor Rp = rotationTensor(vector(0,0,1), np);
+//
+//    const label s = 36;//cvMeshControls().alignmentSearchSpokes();
+//
+//    scalar closestSpokeHitDistance = GREAT;
+//
+//    pointIndexHit closestSpokeHit;
+//
+//    label closestSpokeSurface = -1;
+//
+//    const scalar spanMag = geometryToConformTo.globalBounds().mag();
+//
+//    for (label i = 0; i < s; i++)
+//    {
+//        vector spoke
+//        (
+//            Foam::cos(i*constant::mathematical::twoPi/s),
+//            Foam::sin(i*constant::mathematical::twoPi/s),
+//            0
+//        );
+//
+//        spoke *= spanMag;
+//
+//        spoke = Rp & spoke;
+//
+//        pointIndexHit spokeHit;
+//
+//        label spokeSurface = -1;
+//
+//        // internal spoke
+//
+//        geometryToConformTo.findSurfaceNearestIntersection
+//        (
+//            pt,
+//            pt + spoke,
+//            spokeHit,
+//            spokeSurface
+//        );
+//
+//        if (spokeHit.hit())
+//        {
+//            scalar spokeHitDistance = mag
+//            (
+//                spokeHit.hitPoint() - pt
+//            );
+//
+//            if (spokeHitDistance < closestSpokeHitDistance)
+//            {
+//                closestSpokeHit = spokeHit;
+//                closestSpokeSurface = spokeSurface;
+//                closestSpokeHitDistance = spokeHitDistance;
+//            }
+//        }
+//
+//        //external spoke
+//
+//        Foam::point mirrorPt = pt + 2*d;
+//
+//        geometryToConformTo.findSurfaceNearestIntersection
+//        (
+//            mirrorPt,
+//            mirrorPt + spoke,
+//            spokeHit,
+//            spokeSurface
+//        );
+//
+//        if (spokeHit.hit())
+//        {
+//            scalar spokeHitDistance = mag
+//            (
+//                spokeHit.hitPoint() - mirrorPt
+//            );
+//
+//            if (spokeHitDistance < closestSpokeHitDistance)
+//            {
+//                closestSpokeHit = spokeHit;
+//                closestSpokeSurface = spokeSurface;
+//                closestSpokeHitDistance = spokeHitDistance;
+//            }
+//        }
+//    }
+//
+//    if (closestSpokeSurface == -1)
+//    {
+////        WarningIn
+////        (
+////            "conformalVoronoiMesh::requiredAlignment"
+////            "("
+////                "const Foam::point& pt"
+////            ") const"
+////        )   << "No secondary surface hit found in spoke search "
+////            << "using " << s
+////            << " spokes, try increasing alignmentSearchSpokes."
+////            << endl;
+//
+//        return I;
+//    }
+//
+//    // Auxiliary alignment generated by spoke intersection normal.
+//
+//    allGeometry[closestSpokeSurface].getNormal
+//    (
+//        List<pointIndexHit>(1, closestSpokeHit),
+//        norm
+//    );
+//
+//    const vector& na = norm[0];
+//
+//    // Secondary alignment
+//    vector ns = np ^ na;
+//
+//    if (mag(ns) < SMALL)
+//    {
+//        FatalErrorIn("conformalVoronoiMesh::requiredAlignment")
+//            << "Parallel normals detected in spoke search." << nl
+//            << "point: " << pt << nl
+//            << "closest surface point: " << surfHit.hitPoint() << nl
+//            << "closest spoke hit: " << closestSpokeHit.hitPoint() << nl
+//            << "np: " << surfHit.hitPoint() + np << nl
+//            << "ns: " << closestSpokeHit.hitPoint() + na << nl
+//            << exit(FatalError);
+//    }
+//
+//    ns /= mag(ns);
+//
+//    tensor Rs = rotationTensor((Rp & vector(0,1,0)), ns);
+//
+//    return (Rs & Rp);
+//}
+
+
+Foam::label Foam::cellShapeControlMesh::removePoints()
+{
+    label nRemoved = 0;
+    for
+    (
+        CellSizeDelaunay::Finite_vertices_iterator vit =
+            finite_vertices_begin();
+        vit != finite_vertices_end();
+        ++vit
+    )
+    {
+        std::list<Vertex_handle> verts;
+        adjacent_vertices(vit, std::back_inserter(verts));
+
+        bool removePt = true;
+        for
+        (
+            std::list<Vertex_handle>::iterator aVit = verts.begin();
+            aVit != verts.end();
+            ++aVit
+        )
+        {
+            Vertex_handle avh = *aVit;
+
+            scalar diff =
+                mag(avh->targetCellSize() - vit->targetCellSize())
+               /max(vit->targetCellSize(), 1e-6);
+
+            if (diff > 0.05)
+            {
+                removePt = false;
+            }
+        }
+
+        if (removePt)
+        {
+            remove(vit);
+            nRemoved++;
+        }
+    }
+
+    return nRemoved;
+}
+
+
+Foam::tmp<Foam::pointField> Foam::cellShapeControlMesh::cellCentres() const
+{
+    tmp<pointField> tcellCentres(new pointField(number_of_finite_cells()));
+    pointField& cellCentres = tcellCentres();
+
+    label count = 0;
+    for
+    (
+        CellSizeDelaunay::Finite_cells_iterator c = finite_cells_begin();
+        c != finite_cells_end();
+        ++c
+    )
+    {
+        if (c->hasFarPoint())
+        {
+            continue;
+        }
+
+        scalarList bary;
+        cellShapeControlMesh::Cell_handle ch;
+
+        const Foam::point centre = topoint
+        (
+            CGAL::centroid<baseK>
+            (
+                c->vertex(0)->point(),
+                c->vertex(1)->point(),
+                c->vertex(2)->point(),
+                c->vertex(3)->point()
+            )
+        );
+
+        cellCentres[count++] = centre;
+    }
+
+    cellCentres.resize(count);
+
+    return tcellCentres;
+}
+
+
+void Foam::cellShapeControlMesh::writeTriangulation()
+{
+    OFstream str
+    (
+        "refinementTriangulation_"
+      + name(Pstream::myProcNo())
+      + ".obj"
+    );
+
+    label count = 0;
+
+    Info<< "Write refinementTriangulation" << endl;
+
+    for
+    (
+        CellSizeDelaunay::Finite_edges_iterator e = finite_edges_begin();
+        e != finite_edges_end();
+        ++e
+    )
+    {
+        Cell_handle c = e->first;
+        Vertex_handle vA = c->vertex(e->second);
+        Vertex_handle vB = c->vertex(e->third);
+
+        // Don't write far edges
+        if (vA->farPoint() || vB->farPoint())
+        {
+            continue;
+        }
+
+        // Don't write unowned edges
+        if (vA->referred() && vB->referred())
+        {
+            continue;
+        }
+
+        pointFromPoint p1 = topoint(vA->point());
+        pointFromPoint p2 = topoint(vB->point());
+
+        meshTools::writeOBJ(str, p1, p2, count);
+    }
+
+    if (is_valid())
+    {
+        Info<< "    Triangulation is valid" << endl;
+    }
+    else
+    {
+        FatalErrorIn
+        (
+            "Foam::triangulatedMesh::writeRefinementTriangulation()"
+        )   << "Triangulation is not valid"
+            << abort(FatalError);
+    }
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::cellShapeControlMesh::cellShapeControlMesh(const Time& runTime)
+:
+    runTime_(runTime),
+    defaultCellSize_(0.0)
+{}
+
+
+//Foam::triangulatedMesh::triangulatedMesh
+//(
+//    const Time& runTime,
+//    const fileName& pointsFile,
+//    const fileName& sizesFile,
+//    const fileName& alignmentsFile,
+//    const scalar& defaultCellSize
+//)
+//:
+//    defaultCellSize_(defaultCellSize)
+//{
+//    Info<< "    Reading points from file     : " << pointsFile << endl;
+//
+//    pointIOField points
+//    (
+//        IOobject
+//        (
+//            pointsFile,
+//            runTime.constant(),
+//            runTime,
+//            IOobject::MUST_READ,
+//            IOobject::NO_WRITE
+//        )
+//    );
+//
+//    Info<< "    Reading sizes from file      : " << sizesFile << endl;
+//
+//    scalarIOField sizes
+//    (
+//        IOobject
+//        (
+//            sizesFile,
+//            runTime.constant(),
+//            runTime,
+//            IOobject::MUST_READ,
+//            IOobject::NO_WRITE
+//        )
+//    );
+//
+//    Info<< "    Reading alignments from file : " << alignmentsFile << endl;
+//
+//    tensorIOField alignments
+//    (
+//        IOobject
+//        (
+//            alignmentsFile,
+//            runTime.constant(),
+//            runTime,
+//            IOobject::MUST_READ,
+//            IOobject::NO_WRITE
+//        )
+//    );
+//
+//    Info<< "    Number of points : " << points.size() << endl;
+//    Info<< "    Minimum size     : " << min(sizes) << endl;
+//    Info<< "    Average size     : " << average(sizes) << endl;
+//    Info<< "    Maximum size     : " << max(sizes) << endl;
+//
+//    forAll(points, pI)
+//    {
+//        size_t nVert = number_of_vertices();
+//
+//        Vertex_handle v = insert
+//        (
+//            Point(points[pI].x(), points[pI].y(), points[pI].z())
+//        );
+//
+//        if (number_of_vertices() == nVert)
+//        {
+//            Info<< "    Failed to insert point : " << points[pI] << endl;
+//        }
+//
+//        v->targetCellSize() = sizes[pI];
+//
+//        const tensor& alignment = alignments[pI];
+//
+//
+//
+//        v->alignment() = alignment;
+//    }
+//
+////    scalar factor = 1.0;
+////    label maxIteration = 1;
+////
+////    for (label iteration = 0; iteration < maxIteration; ++iteration)
+////    {
+////        Info<< "Iteration : " << iteration << endl;
+////
+////        label nRefined = refineTriangulation(factor);
+////
+////        Info<< "    Number of cells refined in refinement iteration : "
+////            << nRefined << nl << endl;
+////
+////        if (nRefined <= 0 && iteration != 0)
+////        {
+////            break;
+////        }
+////
+////        factor *= 1.5;
+////    }
+//
+//    //writeRefinementTriangulation();
+//}
+
+
+//Foam::triangulatedMesh::triangulatedMesh
+//(
+//    const Time& runTime,
+//    const DynamicList<Foam::point>& points,
+//    const DynamicList<scalar>& sizes,
+//    const DynamicList<tensor>& alignments,
+//    const scalar& defaultCellSize
+//)
+//:
+//    defaultCellSize_(defaultCellSize)
+//{
+//    forAll(points, pI)
+//    {
+//        size_t nVert = number_of_vertices();
+//
+//        Vertex_handle v = insert
+//        (
+//            Point(points[pI].x(), points[pI].y(), points[pI].z())
+//        );
+//
+//        if (number_of_vertices() == nVert)
+//        {
+//            Info<< "Failed to insert point : " << points[pI] << endl;
+//        }
+//
+//        v->targetCellSize() = sizes[pI];
+//
+//        v->alignment() = alignments[pI];
+//    }
+//
+//    //writeRefinementTriangulation();
+//
+//    Info<< nl << "Refinement triangulation information: " << endl;
+//    Info<< "    Number of vertices: " << label(number_of_vertices()) << endl;
+//    Info<< "    Number of cells   : "
+//        << label(number_of_finite_cells()) << endl;
+//    Info<< "    Number of faces   : "
+//        << label(number_of_finite_facets()) << endl;
+//    Info<< "    Number of edges   : "
+//        << label(number_of_finite_edges()) << endl;
+//    Info<< "    Dimensionality    : " << label(dimension()) << nl << endl;
+//}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::cellShapeControlMesh::~cellShapeControlMesh()
+{}
+
+
+// * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * * //
+
+void Foam::cellShapeControlMesh::barycentricCoords
+(
+    const Foam::point& pt,
+    scalarList& bary,
+    Cell_handle& ch
+) const
+{
+    // Use the previous cell handle as a hint on where to start searching
+    ch = locate
+    (
+        Point(pt.x(), pt.y(), pt.z())
+    );
+
+    if (!is_infinite(ch))
+    {
+        oldCellHandle_ = ch;
+
+        tetPointRef tet
+        (
+            topoint(ch->vertex(0)->point()),
+            topoint(ch->vertex(1)->point()),
+            topoint(ch->vertex(2)->point()),
+            topoint(ch->vertex(3)->point())
+        );
+
+        tet.barycentric(pt, bary);
+    }
+}
+
+
+Foam::boundBox Foam::cellShapeControlMesh::bounds() const
+{
+    DynamicList<Foam::point> pts(number_of_vertices());
+
+    for
+    (
+        Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        ++vit
+    )
+    {
+        if (vit->real())
+        {
+            pts.append(topoint(vit->point()));
+        }
+    }
+
+    boundBox bb(pts);
+
+    return bb;
+}
+
+
+void Foam::cellShapeControlMesh::distribute
+(
+    const backgroundMeshDecomposition& decomposition
+)
+{
+    if (!Pstream::parRun())
+    {
+        return;
+    }
+
+    autoPtr<mapDistribute> mapDist =
+        DistributedDelaunayMesh<CellSizeDelaunay>::distribute(decomposition);
+
+    DynamicList<Foam::point> points(number_of_vertices());
+    DynamicList<scalar> sizes(number_of_vertices());
+    DynamicList<tensor> alignments(number_of_vertices());
+
+    for
+    (
+        Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        ++vit
+    )
+    {
+        if (vit->real())
+        {
+            points.append(topoint(vit->point()));
+            sizes.append(vit->targetCellSize());
+            alignments.append(vit->alignment());
+        }
+    }
+
+    mapDist().distribute(points);
+    mapDist().distribute(sizes);
+    mapDist().distribute(alignments);
+
+    // Reset the entire tessellation
+    DelaunayMesh<CellSizeDelaunay>::reset();
+
+    Info<< nl << "    Inserting distributed tessellation" << endl;
+
+    insertBoundingPoints(decomposition.procBounds());
+
+    // Internal points have to be inserted first
+
+    DynamicList<Vb> verticesToInsert(points.size());
+
+    forAll(points, pI)
+    {
+        verticesToInsert.append
+        (
+            Vb
+            (
+                toPoint<Point>(points[pI]),
+                -1,
+                Vb::vtInternal,
+                Pstream::myProcNo()
+            )
+        );
+
+        verticesToInsert.last().targetCellSize() = sizes[pI];
+        verticesToInsert.last().alignment() = alignments[pI];
+    }
+
+    this->rangeInsertWithInfo
+    (
+        verticesToInsert.begin(),
+        verticesToInsert.end(),
+        true
+    );
+
+    sync(decomposition.procBounds());
+
+    Info<< "    Total number of vertices after redistribution "
+        << returnReduce(label(number_of_vertices()), sumOp<label>()) << endl;
+}
+
+
+Foam::tensorField Foam::cellShapeControlMesh::dumpAlignments() const
+{
+    tensorField alignmentsTmp(number_of_vertices(), tensor::zero);
+
+    label count = 0;
+    for
+    (
+        Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        ++vit
+    )
+    {
+        alignmentsTmp[count++] = vit->alignment();
+    }
+
+    return alignmentsTmp;
+}
+
+
+void Foam::cellShapeControlMesh::insertBoundingPoints(const boundBox& bb)
+{
+    boundBox bbInflate = bb;
+    bbInflate.inflate(10);
+
+    pointField pts(bbInflate.points());
+
+    forAll(pts, pI)
+    {
+        insertFar(pts[pI]);
+    }
+}
+
+
+void Foam::cellShapeControlMesh::write() const
+{
+    Info<< "Writing cell size and alignment mesh" << endl;
+
+    const fileName name("cellSizeAndAlignmentMesh");
+
+    // Reindex the cells
+    label cellCount = 0;
+    for
+    (
+        Finite_cells_iterator cit = finite_cells_begin();
+        cit != finite_cells_end();
+        ++cit
+    )
+    {
+        if (!cit->hasFarPoint() && !is_infinite(cit))
+        {
+            cit->cellIndex() = cellCount++;
+        }
+    }
+
+    labelList vertexMap;
+    labelList cellMap;
+
+    autoPtr<fvMesh> meshPtr = DelaunayMesh<CellSizeDelaunay>::createMesh
+    (
+        name,
+        runTime_,
+        vertexMap,
+        cellMap
+    );
+    const fvMesh& mesh = meshPtr();
+
+    pointScalarField sizes
+    (
+        IOobject
+        (
+            "sizes",
+            mesh.time().timeName(),
+            mesh,
+            IOobject::NO_READ,
+            IOobject::AUTO_WRITE
+        ),
+        pointMesh::New(mesh),
+        scalar(0)
+    );
+
+    for
+    (
+        Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        ++vit
+    )
+    {
+        if (!vit->farPoint())
+        {
+            sizes[vertexMap[vit->index()]] = vit->targetCellSize();
+        }
+    }
+
+    mesh.write();
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellShapeControlMesh/cellShapeControlMesh.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellShapeControlMesh/cellShapeControlMesh.H
new file mode 100644
index 0000000000000000000000000000000000000000..e6cb37a2c3b097b82af919982f1a512331a6bf03
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellShapeControlMesh/cellShapeControlMesh.H
@@ -0,0 +1,168 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::cellShapeControlMesh
+
+Description
+
+SourceFiles
+    cellShapeControlMeshI.H
+    cellShapeControlMesh.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef cellShapeControlMesh_H
+#define cellShapeControlMesh_H
+
+#include "Time.H"
+#include "scalar.H"
+#include "point.H"
+#include "tensor.H"
+#include "triad.H"
+#include "fileName.H"
+#include "searchableSurfaces.H"
+#include "conformationSurfaces.H"
+#include "DistributedDelaunayMesh.H"
+#include "CGALTriangulation3Ddefs.H"
+#include "backgroundMeshDecomposition.H"
+#include "boundBox.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                      Class cellShapeControlMesh Declaration
+\*---------------------------------------------------------------------------*/
+
+class cellShapeControlMesh
+:
+    public DistributedDelaunayMesh<CellSizeDelaunay>
+{
+public:
+
+        typedef CellSizeDelaunay::Cell_handle      Cell_handle;
+        typedef CellSizeDelaunay::Vertex_handle    Vertex_handle;
+        typedef CellSizeDelaunay::Point            Point;
+
+
+private:
+
+        // Private data
+
+        const Time& runTime_;
+
+        mutable Cell_handle oldCellHandle_;
+
+        const scalar defaultCellSize_;
+
+
+    // Private Member Functions
+
+        //- Disallow default bitwise copy construct
+        cellShapeControlMesh(const cellShapeControlMesh&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const cellShapeControlMesh&);
+
+
+public:
+
+    //- Runtime type information
+    ClassName("cellShapeControlMesh");
+
+
+    // Constructors
+
+        explicit cellShapeControlMesh(const Time& runTime);
+
+
+    //- Destructor
+    ~cellShapeControlMesh();
+
+
+    // Member Functions
+
+        // Query
+
+            //- Calculate and return the barycentric coordinates for
+            //  interpolating quantities on the background mesh
+            void barycentricCoords
+            (
+                const Foam::point& pt,
+                scalarList& bary,
+                Cell_handle& ch
+            ) const;
+
+            boundBox bounds() const;
+
+
+        // Edit
+
+            label removePoints();
+
+            //- Get the centres of all the tets
+            tmp<pointField> cellCentres() const;
+
+            inline Vertex_handle insert
+            (
+                const Foam::point& pt,
+                const scalar& size,
+                const triad& alignment,
+                const Foam::indexedVertexEnum::vertexType type = Vb::vtInternal
+            );
+
+            inline Vertex_handle insertFar
+            (
+                const Foam::point& pt
+            );
+
+            void distribute
+            (
+                const backgroundMeshDecomposition& decomposition
+            );
+
+            tensorField dumpAlignments() const;
+
+            void insertBoundingPoints(const boundBox& bb);
+
+            void writeTriangulation();
+
+            void write() const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#include "cellShapeControlMeshI.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellShapeControlMesh/cellShapeControlMeshI.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellShapeControlMesh/cellShapeControlMeshI.H
new file mode 100644
index 0000000000000000000000000000000000000000..305256d4ccaf924d7c5dc19c867b6812ffa724f0
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellShapeControlMesh/cellShapeControlMeshI.H
@@ -0,0 +1,68 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+Foam::cellShapeControlMesh::Vertex_handle Foam::cellShapeControlMesh::insert
+(
+    const Foam::point& pt,
+    const scalar& size,
+    const triad& alignment,
+    const Foam::indexedVertexEnum::vertexType type
+)
+{
+    Vertex_handle v = CellSizeDelaunay::insert
+    (
+        Point(pt.x(), pt.y(), pt.z())
+    );
+    v->type() = type;
+    v->index() = getNewVertexIndex();
+    v->procIndex() = Pstream::myProcNo();
+    v->targetCellSize() = size;
+    v->alignment() = tensor(alignment.x(), alignment.y(), alignment.z());
+
+    return v;
+}
+
+
+Foam::cellShapeControlMesh::Vertex_handle Foam::cellShapeControlMesh::insertFar
+(
+    const Foam::point& pt
+)
+{
+    Vertex_handle v = CellSizeDelaunay::insert
+    (
+        Point(pt.x(), pt.y(), pt.z())
+    );
+    v->type() = Vb::vtFar;
+//    v->type() = Vb::vtExternalFeaturePoint;
+    v->index() = getNewVertexIndex();
+    v->procIndex() = Pstream::myProcNo();
+
+    return v;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellSizeAndAlignmentControl/cellSizeAndAlignmentControl/cellSizeAndAlignmentControl.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellSizeAndAlignmentControl/cellSizeAndAlignmentControl/cellSizeAndAlignmentControl.C
new file mode 100644
index 0000000000000000000000000000000000000000..31d5d614062d17e601f92fbaff116cd05019ac98
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellSizeAndAlignmentControl/cellSizeAndAlignmentControl/cellSizeAndAlignmentControl.C
@@ -0,0 +1,120 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012-2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "cellSizeAndAlignmentControl.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+defineTypeNameAndDebug(cellSizeAndAlignmentControl, 0);
+defineRunTimeSelectionTable(cellSizeAndAlignmentControl, dictionary);
+
+}
+
+
+// * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * * //
+
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::cellSizeAndAlignmentControl::cellSizeAndAlignmentControl
+(
+    const Time& runTime,
+    const word& name,
+    const dictionary& controlFunctionDict,
+    const conformationSurfaces& allGeometry
+)
+:
+    runTime_(runTime),
+    name_(name)
+{}
+
+
+// * * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * //
+
+Foam::autoPtr<Foam::cellSizeAndAlignmentControl>
+Foam::cellSizeAndAlignmentControl::New
+(
+    const Time& runTime,
+    const word& name,
+    const dictionary& controlFunctionDict,
+    const conformationSurfaces& allGeometry
+)
+{
+    word cellSizeAndAlignmentControlTypeName
+    (
+        controlFunctionDict.lookup("type")
+    );
+
+    Info<< nl << "Selecting cellSizeAndAlignmentControl "
+        << cellSizeAndAlignmentControlTypeName << endl;
+
+    dictionaryConstructorTable::iterator cstrIter =
+        dictionaryConstructorTablePtr_->find
+        (
+            cellSizeAndAlignmentControlTypeName
+        );
+
+    if (cstrIter == dictionaryConstructorTablePtr_->end())
+    {
+        FatalErrorIn
+        (
+            "cellSizeAndAlignmentControl::New()"
+        )   << "Unknown cellSizeAndAlignmentControl type "
+            << cellSizeAndAlignmentControlTypeName
+            << endl << endl
+            << "Valid cellSizeAndAlignmentControl types are :" << endl
+            << dictionaryConstructorTablePtr_->toc()
+            << exit(FatalError);
+    }
+
+    return autoPtr<cellSizeAndAlignmentControl>
+    (
+        cstrIter()
+        (
+            runTime,
+            name,
+            controlFunctionDict,
+            allGeometry
+        )
+    );
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::cellSizeAndAlignmentControl::~cellSizeAndAlignmentControl()
+{}
+
+
+// * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * * //
+
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellSizeAndAlignmentControl/cellSizeAndAlignmentControl/cellSizeAndAlignmentControl.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellSizeAndAlignmentControl/cellSizeAndAlignmentControl/cellSizeAndAlignmentControl.H
new file mode 100644
index 0000000000000000000000000000000000000000..243211929edc2e19a22651d0f2b381184de84107
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellSizeAndAlignmentControl/cellSizeAndAlignmentControl/cellSizeAndAlignmentControl.H
@@ -0,0 +1,160 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012-2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::cellSizeAndAlignmentControl
+
+Description
+
+SourceFiles
+    cellSizeAndAlignmentControlI.H
+    cellSizeAndAlignmentControl.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef cellSizeAndAlignmentControl_H
+#define cellSizeAndAlignmentControl_H
+
+#include "dictionary.H"
+#include "conformationSurfaces.H"
+#include "Time.H"
+#include "quaternion.H"
+#include "triadField.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+
+/*---------------------------------------------------------------------------*\
+                Class cellSizeAndAlignmentControl Declaration
+\*---------------------------------------------------------------------------*/
+
+class cellSizeAndAlignmentControl
+{
+protected:
+
+        const Time& runTime_;
+
+
+private:
+
+    // Private data
+
+        const word name_;
+
+
+    // Private Member Functions
+
+        //- Disallow default bitwise copy construct
+        cellSizeAndAlignmentControl(const cellSizeAndAlignmentControl&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const cellSizeAndAlignmentControl&);
+
+
+public:
+
+    //- Runtime type information
+    TypeName("cellSizeAndAlignmentControl");
+
+
+    // Declare run-time constructor selection table
+
+        declareRunTimeSelectionTable
+        (
+            autoPtr,
+            cellSizeAndAlignmentControl,
+            dictionary,
+            (
+                const Time& runTime,
+                const word& name,
+                const dictionary& controlFunctionDict,
+                const conformationSurfaces& allGeometry
+            ),
+            (runTime, name, controlFunctionDict, allGeometry)
+        );
+
+
+    // Constructors
+
+        //- Construct from dictionary and references to conformalVoronoiMesh and
+        //  searchableSurfaces
+        cellSizeAndAlignmentControl
+        (
+            const Time& runTime,
+            const word& name,
+            const dictionary& controlFunctionDict,
+            const conformationSurfaces& allGeometry
+        );
+
+
+    // Selectors
+
+        //- Return a reference to the selected cellShapeControl
+        static autoPtr<cellSizeAndAlignmentControl> New
+        (
+            const Time& runTime,
+            const word& name,
+            const dictionary& controlFunctionDict,
+            const conformationSurfaces& allGeometry
+        );
+
+
+    //- Destructor
+    virtual ~cellSizeAndAlignmentControl();
+
+
+    // Member Functions
+
+        // Access
+
+            const word& name() const
+            {
+                return name_;
+            }
+
+            virtual label priority() const = 0;
+
+
+        // Query
+
+            virtual void initialVertices
+            (
+                pointField& pts,
+                scalarField& sizes,
+                triadField& alignments
+            ) const = 0;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellSizeAndAlignmentControl/cellSizeAndAlignmentControls.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellSizeAndAlignmentControl/cellSizeAndAlignmentControls.C
new file mode 100644
index 0000000000000000000000000000000000000000..515482689dcd9a1b5a5f89118b9222d74762f488
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellSizeAndAlignmentControl/cellSizeAndAlignmentControls.C
@@ -0,0 +1,177 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012-2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "cellSizeAndAlignmentControls.H"
+#include "searchableSurfaceControl.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+defineTypeNameAndDebug(cellSizeAndAlignmentControls, 0);
+
+}
+
+
+// * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * * //
+
+bool Foam::cellSizeAndAlignmentControls::evalCellSizeFunctions
+(
+    const point& pt,
+    scalar& minSize
+) const
+{
+    bool anyFunctionFound = false;
+
+    // Regions requesting with the same priority take the smallest
+
+    if (controlFunctions_.size())
+    {
+        // Maintain priority of current hit. Initialise so it always goes
+        // through at least once.
+        label previousPriority = -1;
+
+        forAll(controlFunctions_, i)
+        {
+            const cellSizeAndAlignmentControl& cSF = controlFunctions_[i];
+
+            if (isA<searchableSurfaceControl>(cSF))
+            {
+                const searchableSurfaceControl& sSC =
+                    refCast<const searchableSurfaceControl>(cSF);
+
+                if (debug)
+                {
+                    Info<< "size function "
+                        << sSC.name()
+                        << " priority " << sSC.priority()
+                        << endl;
+                }
+
+                if (sSC.priority() < previousPriority)
+                {
+                    return minSize;
+                }
+
+                scalar sizeI;
+
+                if (sSC.sizeFunction().cellSize(pt, sizeI))
+                {
+                    anyFunctionFound = true;
+
+                    if (sSC.priority() == previousPriority)
+                    {
+                        if (sizeI < minSize)
+                        {
+                            minSize = sizeI;
+                        }
+                    }
+                    else
+                    {
+                        minSize = sizeI;
+                    }
+
+                    if (debug)
+                    {
+                        Info<< "sizeI " << sizeI
+                            <<" minSize " << minSize << endl;
+                    }
+
+                    previousPriority = sSC.priority();
+                }
+            }
+        }
+    }
+
+    return anyFunctionFound;
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::cellSizeAndAlignmentControls::cellSizeAndAlignmentControls
+(
+    const Time& runTime,
+    const dictionary& shapeControlDict,
+    const conformationSurfaces& allGeometry,
+    const scalar defaultCellSize
+)
+:
+    shapeControlDict_(shapeControlDict),
+    allGeometry_(allGeometry),
+    controlFunctions_(shapeControlDict_.size()),
+    defaultCellSize_(defaultCellSize)
+{
+    label functionI = 0;
+
+    forAllConstIter(dictionary, shapeControlDict_, iter)
+    {
+        word shapeControlEntryName = iter().keyword();
+
+        const dictionary& controlFunctionDict
+        (
+            shapeControlDict_.subDict(shapeControlEntryName)
+        );
+
+        controlFunctions_.set
+        (
+            functionI,
+            cellSizeAndAlignmentControl::New
+            (
+                runTime,
+                shapeControlEntryName,
+                controlFunctionDict,
+                allGeometry
+            )
+        );
+
+        functionI++;
+    }
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::cellSizeAndAlignmentControls::~cellSizeAndAlignmentControls()
+{}
+
+
+// * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * * //
+
+Foam::scalar Foam::cellSizeAndAlignmentControls::cellSize
+(
+    const point& pt
+) const
+{
+    scalar size = defaultCellSize_;
+
+    evalCellSizeFunctions(pt, size);
+
+    return size;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellSizeAndAlignmentControl/cellSizeAndAlignmentControls.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellSizeAndAlignmentControl/cellSizeAndAlignmentControls.H
new file mode 100644
index 0000000000000000000000000000000000000000..76e6c801dd845c0b20375a1761282452bb3ec74b
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellSizeAndAlignmentControl/cellSizeAndAlignmentControls.H
@@ -0,0 +1,119 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012-2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::cellSizeAndAlignmentControls
+
+Description
+
+SourceFiles
+    cellSizeAndAlignmentControls.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef cellSizeAndAlignmentControls_H
+#define cellSizeAndAlignmentControls_H
+
+#include "dictionary.H"
+#include "cellSizeAndAlignmentControl.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                     Class cellSizeAndAlignmentControls Declaration
+\*---------------------------------------------------------------------------*/
+
+class cellSizeAndAlignmentControls
+{
+    // Private data
+
+        const dictionary& shapeControlDict_;
+
+        const conformationSurfaces& allGeometry_;
+
+        PtrList<cellSizeAndAlignmentControl> controlFunctions_;
+
+        const scalar defaultCellSize_;
+
+
+    // Private Member Functions
+
+        bool evalCellSizeFunctions(const point& pt, scalar& minSize) const;
+
+        //- Disallow default bitwise copy construct
+        cellSizeAndAlignmentControls(const cellSizeAndAlignmentControls&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const cellSizeAndAlignmentControls&);
+
+
+public:
+
+        //- Runtime type information
+        ClassName("cellSizeAndAlignmentControls");
+
+
+    // Constructors
+
+        //- Construct from dictionary
+        cellSizeAndAlignmentControls
+        (
+            const Time& runTime,
+            const dictionary& shapeControlDict,
+            const conformationSurfaces& allGeometry,
+            const scalar defaultCellSize
+        );
+
+
+    //- Destructor
+    virtual ~cellSizeAndAlignmentControls();
+
+
+    // Member Functions
+
+        // Access
+
+            const PtrList<cellSizeAndAlignmentControl>& controlFunctions() const
+            {
+                return controlFunctions_;
+            }
+
+
+        // Query
+
+            scalar cellSize(const point& pt) const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellSizeAndAlignmentControl/fileControl/fileControl.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellSizeAndAlignmentControl/fileControl/fileControl.C
new file mode 100644
index 0000000000000000000000000000000000000000..9b86dbf2ba643fb6c563cd2774eaf6c39e42129b
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellSizeAndAlignmentControl/fileControl/fileControl.C
@@ -0,0 +1,242 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012-2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "fileControl.H"
+#include "addToRunTimeSelectionTable.H"
+#include "tetrahedron.H"
+#include "scalarList.H"
+#include "vectorTools.H"
+#include "pointIOField.H"
+#include "scalarIOField.H"
+#include "triadIOField.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+defineTypeNameAndDebug(fileControl, 0);
+addToRunTimeSelectionTable
+(
+    cellSizeAndAlignmentControl,
+    fileControl,
+    dictionary
+);
+
+}
+
+
+// * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * * //
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::fileControl::fileControl
+(
+    const Time& runTime,
+    const word& name,
+    const dictionary& controlFunctionDict,
+    const conformationSurfaces& allGeometry
+)
+:
+    cellSizeAndAlignmentControl
+    (
+        runTime,
+        name,
+        controlFunctionDict,
+        allGeometry
+    ),
+    pointsFile_(controlFunctionDict.lookup("pointsFile")),
+    sizesFile_(controlFunctionDict.lookup("sizesFile")),
+    alignmentsFile_(controlFunctionDict.lookup("alignmentsFile")),
+    priority_(readLabel(controlFunctionDict.lookup("priority")))
+{
+    Info<< indent << "Loading from file... " << nl
+        << indent << "    points     : " << pointsFile_ << nl
+        << indent << "    sizes      : " << sizesFile_ << nl
+        << indent << "    alignments : " << alignmentsFile_
+        << endl;
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::fileControl::~fileControl()
+{}
+
+
+// * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * * //
+//
+//Foam::scalar Foam::fileControl::cellSize(const point& pt) const
+//{
+//    scalarList bary;
+//    Cell_handle ch;
+//
+//    triangulatedMesh_.barycentricCoords(pt, bary, ch);
+//
+//    scalar size = 0;
+//    forAll(bary, pI)
+//    {
+//        size += bary[pI]*ch->vertex(pI)->size();
+//    }
+//
+//    return size;
+//}
+//
+//
+////- Return the cell alignment at the given location
+//Foam::tensor Foam::fileControl::cellAlignment(const point& pt) const
+//{
+//    scalarList bary;
+//    Cell_handle ch;
+//
+//    triangulatedMesh_.barycentricCoords(pt, bary, ch);
+//
+//    label nearest = 0;
+//
+//    tensor alignment = Foam::tensor::zero;
+//    forAll(bary, pI)
+//    {
+//        //alignment += bary[pI]*ch->vertex(pI)->alignment();
+//
+//        // Find nearest point
+//        if (bary[pI] > nearest)
+//        {
+//            alignment = ch->vertex(pI)->alignment();
+//            nearest = bary[pI];
+//        }
+//    }
+//
+//    return alignment;
+//}
+//
+//
+////- Return the cell alignment at the given location
+//void Foam::fileControl::cellSizeAndAlignment
+//(
+//    const point& pt,
+//    scalar& size,
+//    tensor& alignment
+//) const
+//{
+//    scalarList bary;
+//    Cell_handle ch;
+//
+//    triangulatedMesh_.barycentricCoords(pt, bary, ch);
+//
+//    size = 0;
+//    forAll(bary, pI)
+//    {
+//        size += bary[pI]*ch->vertex(pI)->size();
+//    }
+//
+////    alignment = Foam::tensor::zero;
+////    forAll(bary, pI)
+////    {
+////        alignment += bary[pI]*ch->vertex(pI)->alignment();
+////    }
+//
+//    alignment = cellAlignment(pt);
+//}
+
+void Foam::fileControl::initialVertices
+(
+    pointField& pts,
+    scalarField& sizes,
+    triadField& alignments
+) const
+{
+    Info<< "    Reading points from file     : " << pointsFile_ << endl;
+
+    pointIOField pointsTmp
+    (
+        IOobject
+        (
+            pointsFile_,
+            runTime_.constant(),
+            runTime_,
+            IOobject::MUST_READ,
+            IOobject::NO_WRITE,
+            false
+        )
+    );
+
+    pts.transfer(pointsTmp);
+
+    Info<< "    Reading sizes from file      : " << sizesFile_ << endl;
+
+    scalarIOField sizesTmp
+    (
+        IOobject
+        (
+            sizesFile_,
+            runTime_.constant(),
+            runTime_,
+            IOobject::MUST_READ,
+            IOobject::NO_WRITE,
+            false
+        )
+    );
+
+    sizes.transfer(sizesTmp);
+
+    Info<< "    Reading alignments from file : " << alignmentsFile_ << endl;
+
+    triadIOField alignmentsTmp
+    (
+        IOobject
+        (
+            alignmentsFile_,
+            runTime_.constant(),
+            runTime_,
+            IOobject::MUST_READ,
+            IOobject::NO_WRITE,
+            false
+        )
+    );
+
+    alignments.transfer(alignmentsTmp);
+
+    if ((pts.size() != sizes.size()) || (pts.size() != alignments.size()))
+    {
+        FatalErrorIn
+        (
+            "Foam::fileControl::initialVertices"
+            "("
+            "   pointField&,"
+            "   scalarField&,"
+            "   Field<triad>&"
+            ")"
+        )   << "Size of list of points, sizes and alignments do not match:"
+            << nl
+            << "Points size     = " << pts.size() << nl
+            << "Sizes size      = " << sizes.size() << nl
+            << "Alignments size = " << alignments.size()
+            << abort(FatalError);
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellSizeAndAlignmentControl/fileControl/fileControl.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellSizeAndAlignmentControl/fileControl/fileControl.H
new file mode 100644
index 0000000000000000000000000000000000000000..f06892680d69ef3c70ea77976854b2125b0b00c7
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellSizeAndAlignmentControl/fileControl/fileControl.H
@@ -0,0 +1,140 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012-2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::fileControl
+
+Description
+
+SourceFiles
+    fileControl.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef fileControl_H
+#define fileControl_H
+
+#include "cellSizeAndAlignmentControl.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+
+/*---------------------------------------------------------------------------*\
+                      Class fileControl Declaration
+\*---------------------------------------------------------------------------*/
+
+class fileControl
+:
+    public cellSizeAndAlignmentControl
+{
+    // Private data
+
+        const fileName pointsFile_;
+
+        const fileName sizesFile_;
+
+        const fileName alignmentsFile_;
+
+        label priority_;
+
+
+    // Private Member Functions
+
+        //- Disallow default bitwise copy construct
+        fileControl(const fileControl&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const fileControl&);
+
+
+public:
+
+    //- Runtime type information
+    TypeName("fileControl");
+
+
+    // Constructors
+
+        //- Construct from dictionary and references to conformalVoronoiMesh and
+        //  searchableSurfaces
+        fileControl
+        (
+            const Time& runTime,
+            const word& name,
+            const dictionary& controlFunctionDict,
+            const conformationSurfaces& allGeometry
+        );
+
+    //- Destructor
+    ~fileControl();
+
+
+    // Member Functions
+
+        // Access
+
+
+        // Query
+
+//            //- Return the cell size at the given location
+//            virtual scalar cellSize(const point& pt) const;
+//
+//            //- Return the cell alignment at the given location
+//            virtual tensor cellAlignment(const point& pt) const;
+//
+//            virtual void cellSizeAndAlignment
+//            (
+//                const point& pt,
+//                scalar& size,
+//                tensor& alignment
+//            ) const;
+
+
+        // Edit
+
+        virtual void initialVertices
+        (
+            pointField& pts,
+            scalarField& sizes,
+            triadField& alignments
+        ) const;
+
+        virtual label priority() const
+        {
+            return priority_;
+        }
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellSizeAndAlignmentControl/searchableSurfaceControl/searchableSurfaceControl.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellSizeAndAlignmentControl/searchableSurfaceControl/searchableSurfaceControl.C
new file mode 100644
index 0000000000000000000000000000000000000000..0f2a4f6d8c76cf39d69e4890af63af4f9590e321
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellSizeAndAlignmentControl/searchableSurfaceControl/searchableSurfaceControl.C
@@ -0,0 +1,666 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012-2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "searchableSurfaceControl.H"
+#include "addToRunTimeSelectionTable.H"
+#include "cellSizeFunction.H"
+#include "triSurfaceMesh.H"
+#include "searchableBox.H"
+#include "tetrahedron.H"
+#include "vectorTools.H"
+#include "quaternion.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+defineTypeNameAndDebug(searchableSurfaceControl, 0);
+addToRunTimeSelectionTable
+(
+    cellSizeAndAlignmentControl,
+    searchableSurfaceControl,
+    dictionary
+);
+
+}
+
+
+// * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * * //
+
+//Foam::tensor Foam::surfaceControl::requiredAlignment
+//(
+//    const Foam::point& pt,
+//    const vectorField& ptNormals
+//) const
+//{
+////    pointIndexHit surfHit;
+////    label hitSurface;
+////
+////    geometryToConformTo_.findSurfaceNearest
+////    (
+////        pt,
+////        sqr(GREAT),
+////        surfHit,
+////        hitSurface
+////    );
+////
+////    if (!surfHit.hit())
+////    {
+////        FatalErrorIn
+////        (
+////            "Foam::tensor Foam::conformalVoronoiMesh::requiredAlignment"
+////        )
+////            << "findSurfaceNearest did not find a hit across the surfaces."
+////            << exit(FatalError) << endl;
+////    }
+////
+//////     Primary alignment
+////
+////    vectorField norm(1);
+////
+////    allGeometry_[hitSurface].getNormal
+////    (
+////        List<pointIndexHit>(1, surfHit),
+////        norm
+////    );
+////
+////    const vector np = norm[0];
+////
+////    const tensor Rp = rotationTensor(vector(0,0,1), np);
+////
+////    return (Rp);
+//
+////    Info<< "Point : " << pt << endl;
+////    forAll(ptNormals, pnI)
+////    {
+////        Info<< "    normal " << pnI << " : " << ptNormals[pnI] << endl;
+////    }
+//
+//    vector np = ptNormals[0];
+//
+//    const tensor Rp = rotationTensor(vector(0,0,1), np);
+//
+//    vector na = vector::zero;
+//
+//    scalar smallestAngle = GREAT;
+//
+//    for (label pnI = 1; pnI < ptNormals.size(); ++pnI)
+//    {
+//        const vector& nextNormal = ptNormals[pnI];
+//
+//        const scalar cosPhi = vectorTools::cosPhi(np, nextNormal);
+//
+//        if (mag(cosPhi) < smallestAngle)
+//        {
+//            na = nextNormal;
+//            smallestAngle = cosPhi;
+//        }
+//    }
+//
+//    // Secondary alignment
+//    vector ns = np ^ na;
+//
+//    if (mag(ns) < SMALL)
+//    {
+//        WarningIn("conformalVoronoiMesh::requiredAlignment")
+//            << "Parallel normals detected in spoke search." << nl
+//            << "point: " << pt << nl
+//            << "np   : " << np << nl
+//            << "na   : " << na << nl
+//            << "ns   : " << ns << nl
+//            << endl;
+//
+//        ns = np;
+//    }
+//
+//    ns /= mag(ns);
+//
+//    tensor Rs = rotationTensor((Rp & vector(0,1,0)), ns);
+//
+////    Info<< "Point " << pt << nl
+////        << "      np : " << np << nl
+////        << "      ns : " << ns << nl
+////        << "      Rp : " << Rp << nl
+////        << "      Rs : " << Rs << nl
+////        << "    Rs&Rp: " << (Rs & Rp) << endl;
+//
+//    return (Rs & Rp);
+//}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::searchableSurfaceControl::searchableSurfaceControl
+(
+    const Time& runTime,
+    const word& name,
+    const dictionary& controlFunctionDict,
+    const conformationSurfaces& allGeometry
+)
+:
+    cellSizeAndAlignmentControl
+    (
+        runTime,
+        name,
+        controlFunctionDict,
+        allGeometry
+    ),
+    surfaceName_(controlFunctionDict.lookupOrDefault<word>("surface", name)),
+    searchableSurface_(allGeometry.geometry()[surfaceName_]),
+    allGeometry_(allGeometry),
+    cellSizeFunction_
+    (
+        cellSizeFunction::New(controlFunctionDict, searchableSurface_)
+    )
+//    geometryToConformTo_(geometryToConformTo),
+//    surfaces_(),
+//    cellSizeFunctions_(),
+//    triangulatedMesh_()
+{
+//    const dictionary& surfacesDict = coeffDict();
+//
+//    Info<< nl << "Reading cellSizeControlGeometry" << endl;
+//
+//    surfaces_.setSize(surfacesDict.size());
+//
+//    cellSizeFunctions_.setSize(surfacesDict.size());
+//
+//    label surfI = 0;
+//
+//    DynamicList<point> pointsToInsert;
+//    DynamicList<scalar> sizesToInsert;
+//    DynamicList<tensor> alignmentsToInsert;
+//
+//    forAllConstIter(dictionary, surfacesDict, iter)
+//    {
+//        const dictionary& surfaceSubDict
+//        (
+//            surfacesDict.subDict(iter().keyword())
+//        );
+//
+//        // If the "surface" keyword is not found in the dictionary, assume
+//        // the name of the dictionary is the surface. Distinction required to
+//        // allow the same surface to be used multiple times to supply multiple
+//        // cellSizeFunctions
+//
+//        word surfaceName = surfaceSubDict.lookupOrDefault<word>
+//        (
+//            "surface",
+//            iter().keyword()
+//        );
+//
+//        surfaces_[surfI] = allGeometry_.findSurfaceID(surfaceName);
+//
+//        if (surfaces_[surfI] < 0)
+//        {
+//            FatalErrorIn
+//            (
+//                "Foam::surfaceControl::surfaceControl"
+//            )   << "No surface " << surfaceName << " found. "
+//                << "Valid geometry is " << nl << allGeometry_.names()
+//                << exit(FatalError);
+//        }
+//
+//        const searchableSurface& surface = allGeometry_[surfaces_[surfI]];
+//
+//        Info<< nl << "    " << iter().keyword() << nl
+//            << "    surface: " << surfaceName << nl
+//            << "    size   : " << surface.size() << endl;
+//
+//        cellSizeFunctions_.set
+//        (
+//            surfI,
+//            cellSizeFunction::New
+//            (
+//                surfaceSubDict,
+//                surface
+//            )
+//        );
+//
+//        surfI++;
+//
+//        if (isA<triSurfaceMesh>(surface))
+//        {
+//            const triSurfaceMesh& tsm
+//                = refCast<const triSurfaceMesh>(surface);
+//
+//            const pointField& points = tsm.points();
+//            const vectorField& faceNormals = tsm.faceNormals();
+//            const labelListList& pointFaces = tsm.pointFaces();
+//
+//            Info<< "    Number of points: " << tsm.nPoints() << endl;
+//
+//            forAll(points, pI)
+//            {
+//                const Foam::point& pt = points[pI];
+//                const labelList& ptFaces = pointFaces[pI];
+//
+//                vectorField pointNormals(ptFaces.size());
+//
+//                forAll(pointNormals, pnI)
+//                {
+//                    pointNormals[pnI] = faceNormals[ptFaces[pnI]];
+//                }
+//
+//                pointsToInsert.append(pt);
+//
+//                // Get the value of the point from surfaceCellSizeFunction. If
+//                // adding points internally then will need to interpolate.
+//                scalar newSize = 0;
+//
+//                cellSizeFunctions_[surfI - 1].cellSize(pt, newSize);
+//                sizesToInsert.append(newSize);
+//
+//                tensor newAlignment = requiredAlignment(pt, pointNormals);
+//
+//                alignmentsToInsert.append(newAlignment);
+//            }
+//        }
+//    }
+//
+//    // Add the global bound box to ensure that all internal point queries
+//    // will return sizes and alignments
+////    boundBox bb = allGeometry_.bounds();
+////
+////    pointField bbPoints = bb.points();
+////
+////    forAll(bbPoints, pI)
+////    {
+////        pointsToInsert.append(bbPoints[pI]);
+////        sizesToInsert.append(defaultCellSize());
+////        alignmentsToInsert.append(tensor(1,0,0,0,1,0,0,0,1));
+////    }
+//
+//    triangulatedMesh_.set
+//    (
+//        new triangulatedMesh
+//        (
+//            runTime,
+//            pointsToInsert,
+//            sizesToInsert,
+//            alignmentsToInsert,
+//            defaultCellSize()
+//        )
+//    );
+//
+//    scalar factor = 1.0;
+//    label maxIteration = cellShapeControlDict.lookupOrDefault<label>
+//    (
+//        "maxRefinementIterations", 1
+//    );
+//
+//
+//    for (label iteration = 0; iteration < maxIteration; ++iteration)
+//    {
+//        Info<< "Iteration : " << iteration << endl;
+//
+//        label nRefined = triangulatedMesh_().refineTriangulation
+//        (
+//            factor,
+//            allGeometry_,
+//            geometryToConformTo_
+//        );
+//
+//        Info<< "    Number of cells refined in refinement iteration : "
+//            << nRefined << nl << endl;
+//
+//        if (nRefined <= 0 && iteration != 0)
+//        {
+//            break;
+//        }
+//
+//        factor *= 1.5;
+//    }
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::searchableSurfaceControl::~searchableSurfaceControl()
+{}
+
+
+// * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * * //
+
+//Foam::scalar Foam::surfaceControl::cellSize(const point& pt) const
+//{
+//    scalarList bary;
+//    Cell_handle ch;
+//
+//    triangulatedMesh_().barycentricCoords(pt, bary, ch);
+//
+//    scalar size = 0;
+//    forAll(bary, pI)
+//    {
+//        size += bary[pI]*ch->vertex(pI)->size();
+//    }
+//
+//    return size;
+//}
+//
+//
+////- Return the cell alignment at the given location
+//Foam::tensor Foam::surfaceControl::cellAlignment(const point& pt) const
+//{
+//    scalarList bary;
+//    Cell_handle ch;
+//
+//    triangulatedMesh_().barycentricCoords(pt, bary, ch);
+//
+////    vectorField cartesianDirections(3);
+////
+////    cartesianDirections[0] = vector(0,0,1);
+////    cartesianDirections[1] = vector(0,1,0);
+////    cartesianDirections[2] = vector(1,0,0);
+////
+////    // Rearrange each alignment tensor so that the x/y/z components are
+////    // in order of whichever makes the smallest angle with the global
+////    // coordinate system
+////    FixedList<tensor, 4> alignments;
+////
+////    forAll(alignments, aI)
+////    {
+////        tensor a = ch->vertex(aI)->alignment();
+////
+////        tensor tmpA = a;
+////
+//////        Info<< nl << indent<< a << endl;
+////
+////        scalar minAngle = 0;
+////
+////        scalar axx = vectorTools::cosPhi(a.x(), cartesianDirections[0]);
+////        scalar axy = vectorTools::cosPhi(a.y(), cartesianDirections[0]);
+////        scalar axz = vectorTools::cosPhi(a.z(), cartesianDirections[0]);
+////
+////        scalar ayx = vectorTools::cosPhi(a.x(), cartesianDirections[1]);
+////        scalar ayy = vectorTools::cosPhi(a.y(), cartesianDirections[1]);
+////        scalar ayz = vectorTools::cosPhi(a.z(), cartesianDirections[1]);
+////
+////        scalar azx = vectorTools::cosPhi(a.x(), cartesianDirections[2]);
+////        scalar azy = vectorTools::cosPhi(a.y(), cartesianDirections[2]);
+////        scalar azz = vectorTools::cosPhi(a.z(), cartesianDirections[2]);
+////
+//////        Info<< indent << axx << " " << axy << " " << axz << nl
+//////            << indent << ayx << " " << ayy << " " << ayz << nl
+//////            << indent << azx << " " << azy << " " << azz << endl;
+////
+////        if (mag(axx) >= minAngle)
+////        {
+////            tmpA.xx() = mag(a.xx());
+////            tmpA.xy() = mag(a.xy());
+////            tmpA.xz() = mag(a.xz());
+////            minAngle = mag(axx);
+////        }
+////        if (mag(axy) >= minAngle)
+////        {
+////            tmpA.xx() = mag(a.yx());
+////            tmpA.xy() = mag(a.yy());
+////            tmpA.xz() = mag(a.yz());
+////            minAngle = mag(axy);
+////        }
+////        if (mag(axz) >= minAngle)
+////        {
+////            tmpA.xx() = mag(a.zx());
+////            tmpA.xy() = mag(a.zy());
+////            tmpA.xz() = mag(a.zz());
+////        }
+////
+////        minAngle = 0;
+////
+////        if (mag(ayx) >= minAngle)
+////        {
+////            tmpA.yx() = mag(a.xx());
+////            tmpA.yy() = mag(a.xy());
+////            tmpA.yz() = mag(a.xz());
+////            minAngle = mag(ayx);
+////        }
+////        if (mag(ayy) >= minAngle)
+////        {
+////            tmpA.yx() = mag(a.yx());
+////            tmpA.yy() = mag(a.yy());
+////            tmpA.yz() = mag(a.yz());
+////            minAngle = mag(ayy);
+////        }
+////        if (mag(ayz) >= minAngle)
+////        {
+////            tmpA.yx() = mag(a.zx());
+////            tmpA.yy() = mag(a.zy());
+////            tmpA.yz() = mag(a.zz());
+////        }
+////
+////        minAngle = 0;
+////
+////        if (mag(azx) >= minAngle)
+////        {
+////            tmpA.zx() = mag(a.xx());
+////            tmpA.zy() = mag(a.xy());
+////            tmpA.zz() = mag(a.xz());
+////            minAngle = mag(azx);
+////        }
+////        if (mag(azy) >= minAngle)
+////        {
+////            tmpA.zx() = mag(a.yx());
+////            tmpA.zy() = mag(a.yy());
+////            tmpA.zz() = mag(a.yz());
+////            minAngle = mag(azy);
+////        }
+////        if (mag(azz) >= minAngle)
+////        {
+////            tmpA.zx() = mag(a.zx());
+////            tmpA.zy() = mag(a.zy());
+////            tmpA.zz() = mag(a.zz());
+////        }
+////
+////        alignments[aI] = tmpA;
+////    }
+//
+//    scalar nearest = 0;
+//
+////    Info<< nl << "Point " << pt << endl;
+////
+////    FixedList<quaternion, 4> qAlignments;
+////    forAll(qAlignments, aI)
+////    {
+//////        Info<< "    Direction " << aI << endl;
+//////        Info<< "        Rot tensor" << alignments[aI] << endl;
+////        qAlignments[aI] = quaternion(alignments[aI]);
+////        qAlignments[aI].normalize();
+//////        Info<< "        Quaternion: " << qAlignments[aI] << endl;
+//////        Info<< "        Rot tensor from quat: " << qAlignments[aI].R()
+//////            << endl;
+////    }
+//
+//    tensor alignment = Foam::tensor::zero;
+//    forAll(bary, pI)
+//    {
+////        alignment += bary[pI]*ch->vertex(pI)->alignment();
+//
+////        alignment += bary[pI]*alignments[pI];
+//
+//        // Try slerp with quaternions
+//
+//        // Find nearest point
+//        if (bary[pI] > nearest)
+//        {
+//            alignment = ch->vertex(pI)->alignment();
+//            nearest = bary[pI];
+//        }
+//    }
+//
+////    quaternion alignment;
+//
+////    alignment = qAlignments[0]*bary[0]
+////              + qAlignments[1]*bary[1]
+////              + qAlignments[2]*bary[2]
+////              + qAlignments[3]*bary[3];
+//
+////    alignment =
+////        slerp(qAlignments[0], qAlignments[1], bary[0]+bary[1]+bary[2]);
+////    alignment = slerp(alignment, qAlignments[2], bary[0]+bary[1]+bary[2]);
+////    alignment = slerp(alignment, qAlignments[3], bary[0]+bary[1]+bary[2]);
+////    alignment =
+////        slerp(alignment, qAlignments[0], bary[0]/(bary[0]+bary[1]+bary[2]));
+//
+////    Info<< "    Interp alignment : " << alignment << endl;
+////    Info<< "    Interp rot tensor: " << alignment.R() << endl;
+//
+//    return alignment;
+//}
+//
+//
+//void Foam::surfaceControl::cellSizeAndAlignment
+//(
+//    const point& pt,
+//    scalar& size,
+//    tensor& alignment
+//) const
+//{
+//    scalarList bary;
+//    Cell_handle ch;
+//
+//    triangulatedMesh_().barycentricCoords(pt, bary, ch);
+//
+//    size = 0;
+//    forAll(bary, pI)
+//    {
+//        size += bary[pI]*ch->vertex(pI)->size();
+//    }
+//
+////    alignment = Foam::tensor::zero;
+////    forAll(bary, pI)
+////    {
+////        alignment += bary[pI]*ch->vertex(pI)->alignment();
+////    }
+//
+//    alignment = cellAlignment(pt);
+//}
+
+void Foam::searchableSurfaceControl::initialVertices
+(
+    pointField& pts,
+    scalarField& sizes,
+    triadField& alignments
+) const
+{
+    pts = searchableSurface_.points();
+    sizes.setSize(pts.size());
+    alignments.setSize(pts.size());
+
+    const scalar nearFeatDistSqrCoeff = 1e-8;
+
+    forAll(pts, pI)
+    {
+        // Is the point in the extendedFeatureEdgeMesh? If so get the
+        // point normal, otherwise get the surface normal from
+        // searchableSurface
+
+        pointIndexHit info;
+        label infoFeature;
+        allGeometry_.findFeaturePointNearest
+        (
+            pts[pI],
+            nearFeatDistSqrCoeff,
+            info,
+            infoFeature
+        );
+
+        autoPtr<triad> pointAlignment;
+
+        if (info.hit())
+        {
+            const extendedFeatureEdgeMesh& features =
+                allGeometry_.features()[infoFeature];
+
+            vectorField norms = features.featurePointNormals(info.index());
+
+            // Create a triad from these norms.
+            pointAlignment.set(new triad());
+            forAll(norms, nI)
+            {
+                pointAlignment() += norms[nI];
+            }
+
+            pointAlignment().normalize();
+            pointAlignment().orthogonalize();
+        }
+        else
+        {
+            allGeometry_.findEdgeNearest
+            (
+                pts[pI],
+                nearFeatDistSqrCoeff,
+                info,
+                infoFeature
+            );
+
+            if (info.hit())
+            {
+                const extendedFeatureEdgeMesh& features =
+                    allGeometry_.features()[infoFeature];
+
+                vectorField norms = features.edgeNormals(info.index());
+
+                // Create a triad from these norms.
+                pointAlignment.set(new triad());
+                forAll(norms, nI)
+                {
+                    pointAlignment() += norms[nI];
+                }
+
+                pointAlignment().normalize();
+                pointAlignment().orthogonalize();
+            }
+            else
+            {
+                pointField ptField(1, pts[pI]);
+                scalarField distField(1, nearFeatDistSqrCoeff);
+                List<pointIndexHit> infoList(1, pointIndexHit());
+
+                searchableSurface_.findNearest(ptField, distField, infoList);
+
+                vectorField normals(1);
+                searchableSurface_.getNormal(infoList, normals);
+
+                pointAlignment.set(new triad(normals[0]));
+            }
+        }
+
+        if (!cellSizeFunction_().cellSize(pts[pI], sizes[pI]))
+        {
+            FatalErrorIn
+            (
+                "Foam::searchableSurfaceControl::initialVertices"
+                "(pointField&, scalarField&, tensorField&)"
+            )   << "Could not calculate cell size"
+                << abort(FatalError);
+        }
+
+        alignments[pI] = pointAlignment();
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellSizeAndAlignmentControl/searchableSurfaceControl/searchableSurfaceControl.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellSizeAndAlignmentControl/searchableSurfaceControl/searchableSurfaceControl.H
new file mode 100644
index 0000000000000000000000000000000000000000..7edc26cdc4cbdff5187f0c528c1000e59c6562f7
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellShapeControl/cellSizeAndAlignmentControl/searchableSurfaceControl/searchableSurfaceControl.H
@@ -0,0 +1,173 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012-2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::searchableSurfaceControl
+
+Description
+
+SourceFiles
+    searchableSurfaceControl.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef searchableSurfaceControl_H
+#define searchableSurfaceControl_H
+
+#include "cellSizeFunction.H"
+#include "triad.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+
+/*---------------------------------------------------------------------------*\
+                      Class surfaceControl Declaration
+\*---------------------------------------------------------------------------*/
+
+class searchableSurfaceControl
+:
+    public cellSizeAndAlignmentControl
+{
+    // Private data
+
+        //- Name of the surface
+        const word surfaceName_;
+
+        //- Reference to the searchableSurface object holding the geometry data
+        const searchableSurface& searchableSurface_;
+
+        const conformationSurfaces& allGeometry_;
+
+        autoPtr<cellSizeFunction> cellSizeFunction_;
+
+
+//        const conformationSurfaces& geometryToConformTo_;
+//
+//        //- Indices of surfaces in allGeometry that are to be conformed to
+//        labelList surfaces_;
+//
+//        //- A list of all of the cellSizeFunction objects
+//        PtrList<cellSizeFunction> cellSizeFunctions_;
+//
+//        autoPtr<triangulatedMesh> triangulatedMesh_;
+//
+//
+//    // Private Member Functions
+//
+//        //-
+//        tensor requiredAlignment
+//        (
+//            const point& pt,
+//            const vectorField& ptNormals
+//        ) const;
+
+        //- Disallow default bitwise copy construct
+        searchableSurfaceControl(const searchableSurfaceControl&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const searchableSurfaceControl&);
+
+
+public:
+
+    //- Runtime type information
+    TypeName("searchableSurfaceControl");
+
+
+    // Constructors
+
+        //- Construct from dictionary and references to conformalVoronoiMesh and
+        //  searchableSurfaces
+        searchableSurfaceControl
+        (
+            const Time& runTime,
+            const word& name,
+            const dictionary& controlFunctionDict,
+            const conformationSurfaces& allGeometry
+        );
+
+    //- Destructor
+    ~searchableSurfaceControl();
+
+
+    // Member Functions
+
+        // Access
+
+//            //- Return reference to the searchableSurfaces object containing
+//            //  all of the geometry
+//            inline const searchableSurfaces& geometry() const;
+//
+//            //- Return the surface indices
+//            inline const labelList& surfaces() const;
+//
+//
+//        // Query
+//
+//            //- Return the cell size at the given location
+//            virtual scalar cellSize(const point& pt) const;
+//
+//            //- Return the cell alignment at the given location
+//            virtual tensor cellAlignment(const point& pt) const;
+//
+//            virtual void cellSizeAndAlignment
+//            (
+//                const point& pt,
+//                scalar& size,
+//                tensor& alignment
+//            ) const;
+
+        virtual void initialVertices
+        (
+            pointField& pts,
+            scalarField& sizes,
+            triadField& alignments
+        ) const;
+
+        const cellSizeFunction& sizeFunction() const
+        {
+            return cellSizeFunction_();
+        }
+
+        virtual label priority() const
+        {
+            return cellSizeFunction_().priority();
+        }
+
+        // Edit
+
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/cellSizeFunction/cellSizeFunction.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/cellSizeFunction/cellSizeFunction.C
new file mode 100644
index 0000000000000000000000000000000000000000..5b35e7b301bb4d659be1bb46a4b5ce1021750ad0
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/cellSizeFunction/cellSizeFunction.C
@@ -0,0 +1,146 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012-2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "cellSizeFunction.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+    defineTypeNameAndDebug(cellSizeFunction, 0);
+    defineRunTimeSelectionTable(cellSizeFunction, dictionary);
+
+    scalar cellSizeFunction::snapToSurfaceTol_ = 1e-10;
+}
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::cellSizeFunction::cellSizeFunction
+(
+    const word& type,
+    const dictionary& cellSizeFunctionDict,
+    const searchableSurface& surface
+)
+:
+    dictionary(cellSizeFunctionDict),
+    surface_(surface),
+    surfaceCellSizeFunction_
+    (
+        surfaceCellSizeFunction::New
+        (
+            cellSizeFunctionDict,
+            surface
+        )
+    ),
+    coeffsDict_(subDict(type + "Coeffs")),
+    sideMode_(),
+    priority_(readLabel(cellSizeFunctionDict.lookup("priority")))
+{
+    word mode = cellSizeFunctionDict.lookup("mode");
+
+    if (surface_.hasVolumeType())
+    {
+        if (mode == "inside")
+        {
+            sideMode_ = smInside;
+        }
+        else if (mode == "outside")
+        {
+            sideMode_ = smOutside;
+        }
+        else if (mode == "bothSides")
+        {
+            sideMode_ = rmBothsides;
+        }
+        else
+        {
+            FatalErrorIn("searchableSurfaceControl::searchableSurfaceControl")
+                << "Unknown mode, expected: inside, outside or bothSides" << nl
+                << exit(FatalError);
+        }
+    }
+    else
+    {
+        if (mode != "bothSides")
+        {
+            WarningIn("searchableSurfaceControl::searchableSurfaceControl")
+                << "surface does not support volumeType, defaulting mode to "
+                << "bothSides."
+                << endl;
+        }
+
+        sideMode_ = rmBothsides;
+    }
+}
+
+
+// * * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * //
+
+Foam::autoPtr<Foam::cellSizeFunction> Foam::cellSizeFunction::New
+(
+    const dictionary& cellSizeFunctionDict,
+    const searchableSurface& surface
+)
+{
+    word cellSizeFunctionTypeName
+    (
+        cellSizeFunctionDict.lookup("cellSizeFunction")
+    );
+
+    Info<< "    Selecting cellSizeFunction " << cellSizeFunctionTypeName
+        << endl;
+
+    dictionaryConstructorTable::iterator cstrIter =
+        dictionaryConstructorTablePtr_->find(cellSizeFunctionTypeName);
+
+    if (cstrIter == dictionaryConstructorTablePtr_->end())
+    {
+        FatalErrorIn
+        (
+            "cellSizeFunction::New(dictionary&, "
+            "const conformalVoronoiMesh&, const searchableSurface&)"
+        )   << "Unknown cellSizeFunction type "
+            << cellSizeFunctionTypeName
+            << endl << endl
+            << "Valid cellSizeFunction types are :" << endl
+            << dictionaryConstructorTablePtr_->toc()
+            << exit(FatalError);
+    }
+
+    return autoPtr<cellSizeFunction>
+    (
+        cstrIter()(cellSizeFunctionDict, surface)
+    );
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::cellSizeFunction::~cellSizeFunction()
+{}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/cellSizeFunction/cellSizeFunction.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/cellSizeFunction/cellSizeFunction.H
new file mode 100644
index 0000000000000000000000000000000000000000..6c93f8e260238d88ae6b8e8344a9d657d4c35f56
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/cellSizeFunction/cellSizeFunction.H
@@ -0,0 +1,201 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012-2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::cellSizeFunction
+
+Description
+    Abstract base class for specifying target cell sizes
+
+SourceFiles
+    cellSizeFunction.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef cellSizeFunction_H
+#define cellSizeFunction_H
+
+#include "point.H"
+#include "conformalVoronoiMesh.H"
+#include "searchableSurface.H"
+#include "dictionary.H"
+#include "autoPtr.H"
+#include "runTimeSelectionTables.H"
+#include "surfaceCellSizeFunction.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                     Class cellSizeFunction Declaration
+\*---------------------------------------------------------------------------*/
+
+class cellSizeFunction
+:
+    public dictionary
+{
+
+public:
+
+    //- Surface side mode
+    enum sideMode
+    {
+        smInside,         // Control inside the surface
+        smOutside,        // Control outside the surface
+        rmBothsides       // Control on both sides of a surface
+    };
+
+    //- Runtime type information
+    TypeName("cellSizeFunction");
+
+
+protected:
+
+    // Static data
+
+        //- Point closeness tolerance to a surface where the function "snaps" to
+        //  including the surface
+        static scalar snapToSurfaceTol_;
+
+
+    // Protected data
+
+        //- Reference to the searchableSurface that cellSizeFunction
+        //  relates to
+        const searchableSurface& surface_;
+
+        //- Cell size at the surface
+        scalarField surfaceCellSize_;
+
+        autoPtr<surfaceCellSizeFunction> surfaceCellSizeFunction_;
+
+        //- Method details dictionary
+        dictionary coeffsDict_;
+
+        //- Mode of size specification, i.e. inside, outside or bothSides
+        sideMode sideMode_;
+
+        label priority_;
+
+
+private:
+
+    // Private Member Functions
+
+        //- Disallow default bitwise copy construct
+        cellSizeFunction(const cellSizeFunction&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const cellSizeFunction&);
+
+
+public:
+
+    // Declare run-time constructor selection table
+
+        declareRunTimeSelectionTable
+        (
+            autoPtr,
+            cellSizeFunction,
+            dictionary,
+            (
+                const dictionary& cellSizeFunctionDict,
+                const searchableSurface& surface
+            ),
+            (cellSizeFunctionDict, surface)
+        );
+
+
+    // Constructors
+
+        //- Construct from components
+        cellSizeFunction
+        (
+            const word& type,
+            const dictionary& cellSizeFunctionDict,
+            const searchableSurface& surface
+        );
+
+
+    // Selectors
+
+        //- Return a reference to the selected cellSizeFunction
+        static autoPtr<cellSizeFunction> New
+        (
+            const dictionary& cellSizeFunctionDict,
+            const searchableSurface& surface
+        );
+
+
+    //- Destructor
+    virtual ~cellSizeFunction();
+
+
+    // Member Functions
+
+        //- Const access to the details dictionary
+        inline const dictionary& coeffsDict() const
+        {
+            return coeffsDict_;
+        }
+
+        //- Modify scalar argument to the cell size specified by function.
+        //  Return a boolean specifying if the function was used, i.e. false if
+        //  the point was not in range of the surface for a spatially varying
+        //  size.
+        virtual bool cellSize
+        (
+            const point& pt,
+            scalar& size
+        ) const = 0;
+
+
+        virtual bool setCellSize
+        (
+            const pointField& pts
+        )
+        {
+            WarningIn("cellSizeFunction::setCellSize(const pointField&)")
+                << "Not overloaded."
+                << endl;
+            return false;
+        }
+
+        label priority() const
+        {
+            return priority_;
+        }
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/linearDistance/linearDistance.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/linearDistance/linearDistance.C
new file mode 100644
index 0000000000000000000000000000000000000000..fc4c4223ef754f7c4fdec46b1256b9e2ac25b294
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/linearDistance/linearDistance.C
@@ -0,0 +1,200 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "linearDistance.H"
+#include "addToRunTimeSelectionTable.H"
+#include "triSurfaceMesh.H"
+#include "triSurfaceFields.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+defineTypeNameAndDebug(linearDistance, 0);
+addToRunTimeSelectionTable(cellSizeFunction, linearDistance, dictionary);
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+linearDistance::linearDistance
+(
+    const dictionary& initialPointsDict,
+    const searchableSurface& surface
+)
+:
+    cellSizeFunction(typeName, initialPointsDict, surface),
+    distanceCellSize_(readScalar(coeffsDict().lookup("distanceCellSize"))),
+    distance_(readScalar(coeffsDict().lookup("distance"))),
+    distanceSqr_(sqr(distance_))
+{}
+
+
+// * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * * //
+
+scalar linearDistance::sizeFunction
+(
+    const point& pt,
+    scalar d,
+    label index
+) const
+{
+    const scalar interpolatedSize
+        = surfaceCellSizeFunction_().interpolate(pt, index);
+
+    scalar gradient
+        = (distanceCellSize_ - interpolatedSize)
+          /distance_;
+
+    scalar size = gradient*d + interpolatedSize;
+
+    return size;
+}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+bool linearDistance::cellSize(const point& pt, scalar& size) const
+{
+    size = 0;
+
+    List<pointIndexHit> hits;
+
+    surface_.findNearest
+    (
+        pointField(1, pt),
+        scalarField(1, distanceSqr_),
+        hits
+    );
+
+    const pointIndexHit& hitInfo = hits[0];
+
+    if (hitInfo.hit())
+    {
+        const point& hitPt = hitInfo.hitPoint();
+        const label hitIndex = hitInfo.index();
+
+        const scalar dist = mag(pt - hitPt);
+
+        if (sideMode_ == rmBothsides)
+        {
+            size = sizeFunction(hitPt, dist, hitIndex);
+
+            return true;
+        }
+
+        // If the nearest point is essentially on the surface, do not do a
+        // getVolumeType calculation, as it will be prone to error.
+        if (dist < snapToSurfaceTol_)
+        {
+            size = sizeFunction(hitPt, 0, hitIndex);
+
+            return true;
+        }
+
+        pointField ptF(1, pt);
+        List<searchableSurface::volumeType> vTL;
+
+        surface_.getVolumeType(ptF, vTL);
+
+        bool functionApplied = false;
+
+        if
+        (
+            sideMode_ == smInside
+         && vTL[0] == searchableSurface::INSIDE
+        )
+        {
+            size = sizeFunction(hitPt, dist, hitIndex);
+
+            functionApplied = true;
+        }
+        else if
+        (
+            sideMode_ == smOutside
+         && vTL[0] == searchableSurface::OUTSIDE
+        )
+        {
+            size = sizeFunction(hitPt, dist, hitIndex);
+
+            functionApplied = true;
+        }
+
+        return functionApplied;
+    }
+
+    return false;
+}
+
+
+bool linearDistance::setCellSize(const pointField& pts)
+{
+    labelHashSet surfaceAlreadyHit(surfaceCellSize_.size());
+
+    forAll(pts, ptI)
+    {
+        const Foam::point& pt = pts[ptI];
+
+        List<pointIndexHit> hits;
+
+        surface_.findNearest
+        (
+            pointField(1, pt),
+            scalarField(1, distanceSqr_),
+            hits
+        );
+
+        const label surfHitI = hits[0].index();
+
+        if
+        (
+            hits[0].hit()
+         && !surfaceAlreadyHit.found(surfHitI)
+        )
+        {
+            // Halving cell size is arbitrary
+            surfaceCellSizeFunction_().refineSurfaceSize(surfHitI);
+
+            surfaceAlreadyHit.insert(surfHitI);
+        }
+    }
+
+    // Force recalculation of the interpolation
+    if (!pts.empty())
+    {
+        surfaceCellSizeFunction_().recalculateInterpolation();
+    }
+
+    return true;
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/linearDistance/linearDistance.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/linearDistance/linearDistance.H
new file mode 100644
index 0000000000000000000000000000000000000000..d30a6a8045991d02255f782b954e4f7af9ae1386
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/linearDistance/linearDistance.H
@@ -0,0 +1,121 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::linearDistance
+
+Description
+
+SourceFiles
+    linearDistance.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef linearDistance_H
+#define linearDistance_H
+
+#include "cellSizeFunction.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                         Class linearDistance Declaration
+\*---------------------------------------------------------------------------*/
+
+class linearDistance
+:
+    public cellSizeFunction
+{
+
+private:
+
+    // Private data
+
+        //- cell size at distance_ from the surface
+        scalar distanceCellSize_;
+
+        //- distance from the surface to control over
+        scalar distance_;
+
+        //- distance squared
+        scalar distanceSqr_;
+
+
+    // Private Member Functions
+
+        //- Calculate the cell size as a function of the given distance
+        scalar sizeFunction(const point& pt, scalar d, label index) const;
+
+
+public:
+
+    //- Runtime type information
+    TypeName("linearDistance");
+
+    // Constructors
+
+        //- Construct from components
+        linearDistance
+        (
+            const dictionary& initialPointsDict,
+            const searchableSurface& surface
+        );
+
+
+    //- Destructor
+    virtual ~linearDistance()
+    {}
+
+
+    // Member Functions
+
+        //- Modify scalar argument to the cell size specified by function.
+        //  Return a boolean specifying if the function was used, i.e. false if
+        //  the point was not in range of the surface for a spatially varying
+        //  size.
+        virtual bool cellSize
+        (
+            const point& pt,
+            scalar& size
+        ) const;
+
+        //- Adapt local cell size. Return true if anything changed.
+        virtual bool setCellSize
+        (
+            const pointField& pts
+        );
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/linearSpatial/linearSpatial.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/linearSpatial/linearSpatial.C
new file mode 100644
index 0000000000000000000000000000000000000000..5f41979bc764d14260e803b74f646219630a9529
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/linearSpatial/linearSpatial.C
@@ -0,0 +1,142 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "linearSpatial.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+defineTypeNameAndDebug(linearSpatial, 0);
+addToRunTimeSelectionTable(cellSizeFunction, linearSpatial, dictionary);
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+linearSpatial::linearSpatial
+(
+    const dictionary& initialPointsDict,
+    const searchableSurface& surface
+)
+:
+    cellSizeFunction(typeName, initialPointsDict, surface),
+    referencePoint_(coeffsDict().lookup("referencePoint")),
+    referenceCellSize_(readScalar(coeffsDict().lookup("referenceCellSize"))),
+    direction_(coeffsDict().lookup("direction")),
+    cellSizeGradient_(readScalar(coeffsDict().lookup("cellSizeGradient")))
+{
+    direction_ /= mag(direction_);
+}
+
+
+// * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * * //
+
+scalar linearSpatial::sizeFunction(const point& pt) const
+{
+    return
+        referenceCellSize_
+      + ((pt - referencePoint_) & direction_)*cellSizeGradient_;
+}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+bool linearSpatial::cellSize
+(
+    const point& pt,
+    scalar& size
+) const
+{
+    if (sideMode_ == rmBothsides)
+    {
+        size = sizeFunction(pt);
+
+        return true;
+    }
+
+    size = 0;
+
+    List<pointIndexHit> hits;
+
+    surface_.findNearest
+    (
+        pointField(1, pt),
+        scalarField(1, sqr(snapToSurfaceTol_)),
+        hits
+    );
+
+    const pointIndexHit& hitInfo = hits[0];
+
+    // If the nearest point is essentially on the surface, do not do a
+    // getVolumeType calculation, as it will be prone to error.
+    if (hitInfo.hit())
+    {
+        size = sizeFunction(pt);
+
+        return true;
+    }
+
+    pointField ptF(1, pt);
+    List<searchableSurface::volumeType> vTL;
+
+    surface_.getVolumeType(ptF, vTL);
+
+    bool functionApplied = false;
+
+    if
+    (
+        sideMode_ == smInside
+     && vTL[0] == searchableSurface::INSIDE
+    )
+    {
+        size = sizeFunction(pt);
+
+        functionApplied = true;
+    }
+    else if
+    (
+        sideMode_ == smOutside
+     && vTL[0] == searchableSurface::OUTSIDE
+    )
+    {
+        size = sizeFunction(pt);
+
+        functionApplied = true;
+    }
+
+    return functionApplied;
+
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/linearSpatial/linearSpatial.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/linearSpatial/linearSpatial.H
new file mode 100644
index 0000000000000000000000000000000000000000..0f413b289a950c40ba3bb2b068c9bea97b92c272
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/linearSpatial/linearSpatial.H
@@ -0,0 +1,119 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::linearSpatial
+
+Description
+
+SourceFiles
+    linearSpatial.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef linearSpatial_H
+#define linearSpatial_H
+
+#include "cellSizeFunction.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                         Class linearSpatial Declaration
+\*---------------------------------------------------------------------------*/
+
+class linearSpatial
+:
+    public cellSizeFunction
+{
+
+private:
+
+    // Private data
+
+        //- Reference point for spatial size grading
+        point referencePoint_;
+
+        //- Cell size at reference point
+        scalar referenceCellSize_;
+
+        //- Direction of cell size grading, stored as unit vector, may be
+        //  supplied with any magnitude
+        vector direction_;
+
+        //- Gradient of cell size change in direction of direction_
+        scalar cellSizeGradient_;
+
+
+    // Private Member Functions
+
+        //- Calculate the cell size as a function of the given position
+        scalar sizeFunction(const point& pt) const;
+
+
+public:
+
+    //- Runtime type information
+    TypeName("linearSpatial");
+
+    // Constructors
+
+        //- Construct from components
+        linearSpatial
+        (
+            const dictionary& initialPointsDict,
+            const searchableSurface& surface
+        );
+
+
+    //- Destructor
+    virtual ~linearSpatial()
+    {}
+
+
+    // Member Functions
+
+        //- Modify scalar argument to the cell size specified by function.
+        //  Return a boolean specifying if the function was used, i.e. false if
+        //  the point was not in range of the surface for a spatially varying
+        //  size.
+        virtual bool cellSize
+        (
+            const point& pt,
+            scalar& size
+        ) const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/surfaceOffsetLinearDistance/surfaceOffsetLinearDistance.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/surfaceOffsetLinearDistance/surfaceOffsetLinearDistance.C
new file mode 100644
index 0000000000000000000000000000000000000000..2a711f3e0b6f66958c9cfae41b8e9b0cd343d659
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/surfaceOffsetLinearDistance/surfaceOffsetLinearDistance.C
@@ -0,0 +1,224 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "surfaceOffsetLinearDistance.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+defineTypeNameAndDebug(surfaceOffsetLinearDistance, 0);
+addToRunTimeSelectionTable
+(
+    cellSizeFunction,
+    surfaceOffsetLinearDistance,
+    dictionary
+);
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+surfaceOffsetLinearDistance::surfaceOffsetLinearDistance
+(
+    const dictionary& initialPointsDict,
+    const searchableSurface& surface
+)
+:
+    cellSizeFunction(typeName, initialPointsDict, surface),
+    distanceCellSize_(readScalar(coeffsDict().lookup("distanceCellSize"))),
+    surfaceOffset_(readScalar(coeffsDict().lookup("surfaceOffset"))),
+    totalDistance_(),
+    totalDistanceSqr_()
+{
+    if
+    (
+        coeffsDict().found("totalDistance")
+     || coeffsDict().found("linearDistance")
+    )
+    {
+        if
+        (
+            coeffsDict().found("totalDistance")
+         && coeffsDict().found("linearDistance")
+        )
+        {
+            FatalErrorIn
+            (
+                "surfaceOffsetLinearDistance::surfaceOffsetLinearDistance"
+                "("
+                    "const dictionary& initialPointsDict, "
+                    "const conformalVoronoiMesh& cvMesh, "
+                    "const searchableSurface& surface"
+                ")"
+            )
+                << "totalDistance and linearDistance found, "
+                << "specify one or other, not both."
+                << nl << exit(FatalError) << endl;
+        }
+
+        if (coeffsDict().found("totalDistance"))
+        {
+            totalDistance_ = readScalar(coeffsDict().lookup("totalDistance"));
+        }
+        else
+        {
+            totalDistance_ =
+                readScalar(coeffsDict().lookup("linearDistance"))
+              + surfaceOffset_;
+        }
+    }
+    else
+    {
+        FatalErrorIn
+        (
+            "surfaceOffsetLinearDistance::surfaceOffsetLinearDistance"
+            "("
+                "const dictionary& initialPointsDict, "
+                "const conformalVoronoiMesh& cvMesh, "
+                "const searchableSurface& surface"
+            ")"
+        )
+            << "totalDistance or linearDistance not found."
+            << nl << exit(FatalError) << endl;
+    }
+
+    totalDistanceSqr_ = sqr(totalDistance_);
+}
+
+
+// * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * * //
+
+scalar surfaceOffsetLinearDistance::sizeFunction
+(
+    const point& pt,
+    scalar d,
+    label index
+) const
+{
+    const scalar interpolatedSize
+        = surfaceCellSizeFunction_().interpolate(pt, index);
+
+    if (d <= surfaceOffset_)
+    {
+        return interpolatedSize;
+    }
+
+    scalar gradient =
+        (distanceCellSize_ - interpolatedSize)
+       /(totalDistance_ - surfaceOffset_);
+
+    scalar intercept = interpolatedSize - gradient*surfaceOffset_;
+
+    return gradient*d + intercept;
+}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+bool surfaceOffsetLinearDistance::cellSize
+(
+    const point& pt,
+    scalar& size
+) const
+{
+    size = 0;
+
+    List<pointIndexHit> hits;
+
+    surface_.findNearest
+    (
+        pointField(1, pt),
+        scalarField(1, totalDistanceSqr_),
+        hits
+    );
+
+    const pointIndexHit& hitInfo = hits[0];
+
+    if (hitInfo.hit())
+    {
+        const point& hitPt = hitInfo.hitPoint();
+        const label hitIndex = hitInfo.index();
+
+        const scalar dist = mag(pt - hitPt);
+
+        if (sideMode_ == rmBothsides)
+        {
+            size = sizeFunction(hitPt, dist, hitIndex);
+
+            return true;
+        }
+
+        // If the nearest point is essentially on the surface, do not do a
+        // getVolumeType calculation, as it will be prone to error.
+        if (mag(pt  - hitInfo.hitPoint()) < snapToSurfaceTol_)
+        {
+            size = sizeFunction(hitPt, 0, hitIndex);
+
+            return true;
+        }
+
+        pointField ptF(1, pt);
+        List<searchableSurface::volumeType> vTL;
+
+        surface_.getVolumeType(ptF, vTL);
+
+        bool functionApplied = false;
+
+        if
+        (
+            sideMode_ == smInside
+         && vTL[0] == searchableSurface::INSIDE
+        )
+        {
+            size = sizeFunction(hitPt, dist, hitIndex);
+
+            functionApplied = true;
+        }
+        else if
+        (
+            sideMode_ == smOutside
+         && vTL[0] == searchableSurface::OUTSIDE
+        )
+        {
+            size = sizeFunction(hitPt, dist, hitIndex);
+
+            functionApplied = true;
+        }
+
+        return functionApplied;
+    }
+
+    return false;
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/surfaceOffsetLinearDistance/surfaceOffsetLinearDistance.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/surfaceOffsetLinearDistance/surfaceOffsetLinearDistance.H
new file mode 100644
index 0000000000000000000000000000000000000000..520435237fbbf9d0fc700c6d9f22c2bdee0168d0
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/surfaceOffsetLinearDistance/surfaceOffsetLinearDistance.H
@@ -0,0 +1,119 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::surfaceOffsetLinearDistance
+
+Description
+
+SourceFiles
+    surfaceOffsetLinearDistance.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef surfaceOffsetLinearDistance_H
+#define surfaceOffsetLinearDistance_H
+
+#include "cellSizeFunction.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                 Class surfaceOffsetLinearDistance Declaration
+\*---------------------------------------------------------------------------*/
+
+class surfaceOffsetLinearDistance
+:
+    public cellSizeFunction
+{
+
+private:
+
+    // Private data
+
+        //- cell size at distance_ from the surface
+        scalar distanceCellSize_;
+
+        //- Offset distance from surface for constant size portion
+        scalar surfaceOffset_;
+
+        //- Total distance from the surface to control over (distance +
+        //  surfaceOffset)
+        scalar totalDistance_;
+
+        //- totalDistance squared
+        scalar totalDistanceSqr_;
+
+
+    // Private Member Functions
+
+        //- Calculate the cell size as a function of the given distance
+        scalar sizeFunction(const point& pt, scalar d, label index) const;
+
+
+public:
+
+    //- Runtime type information
+    TypeName("surfaceOffsetLinearDistance");
+
+    // Constructors
+
+        //- Construct from components
+        surfaceOffsetLinearDistance
+        (
+            const dictionary& initialPointsDict,
+            const searchableSurface& surface
+        );
+
+
+    //- Destructor
+    virtual ~surfaceOffsetLinearDistance()
+    {}
+
+
+    // Member Functions
+
+        //- Modify scalar argument to the cell size specified by function.
+        //  Return a boolean specifying if the function was used, i.e. false if
+        //  the point was not in range of the surface for a spatially varying
+        //  size.
+        virtual bool cellSize
+        (
+            const point& pt,
+            scalar& size
+        ) const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/uniform/uniform.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/uniform/uniform.C
new file mode 100644
index 0000000000000000000000000000000000000000..e2744eeb2fe544aad3e715bf774d619402a5ee0d
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/uniform/uniform.C
@@ -0,0 +1,175 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "uniform.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+defineTypeNameAndDebug(uniform, 0);
+addToRunTimeSelectionTable(cellSizeFunction, uniform, dictionary);
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+uniform::uniform
+(
+    const dictionary& initialPointsDict,
+    const searchableSurface& surface
+)
+:
+    cellSizeFunction(typeName, initialPointsDict, surface)
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+bool uniform::cellSize
+(
+    const point& pt,
+    scalar& size
+) const
+{
+    List<pointIndexHit> hits;
+
+    surface_.findNearest
+    (
+        pointField(1, pt),
+        scalarField(1, sqr(GREAT)),
+        hits
+    );
+
+    const pointIndexHit& hitInfo = hits[0];
+
+    if (hitInfo.hit())
+    {
+        const point& hitPt = hitInfo.hitPoint();
+        const label index = hitInfo.index();
+
+        if (sideMode_ == rmBothsides)
+        {
+            size = surfaceCellSizeFunction_().interpolate(hitPt, index);
+
+            return true;
+        }
+
+        size = 0;
+
+        List<pointIndexHit> closeToSurfaceHits;
+
+        surface_.findNearest
+        (
+            pointField(1, pt),
+            scalarField(1, sqr(snapToSurfaceTol_)),
+            closeToSurfaceHits
+        );
+
+        const pointIndexHit& closeToSurface = closeToSurfaceHits[0];
+
+        // If the nearest point is essentially on the surface, do not do a
+        // getVolumeType calculation, as it will be prone to error.
+        if (closeToSurface.hit())
+        {
+            size = surfaceCellSizeFunction_().interpolate(hitPt, index);
+
+            return true;
+        }
+
+        pointField ptF(1, pt);
+        List<searchableSurface::volumeType> vTL(1);
+
+        surface_.getVolumeType(ptF, vTL);
+
+        bool functionApplied = false;
+
+        if
+        (
+            sideMode_ == smInside
+         && vTL[0] == searchableSurface::INSIDE
+        )
+        {
+            size = surfaceCellSizeFunction_().interpolate(hitPt, index);
+
+            functionApplied = true;
+        }
+        else if
+        (
+            sideMode_ == smOutside
+         && vTL[0] == searchableSurface::OUTSIDE
+        )
+        {
+            size = surfaceCellSizeFunction_().interpolate(hitPt, index);
+
+            functionApplied = true;
+        }
+
+        return functionApplied;
+    }
+
+    return false;
+}
+
+
+bool uniform::setCellSize
+(
+    const pointField& pts
+)
+{
+//    labelHashSet surfaceAlreadyHit(cellSize_.size());
+//
+//    forAll(pts, ptI)
+//    {
+//        const Foam::point& pt = pts[ptI];
+//
+//        List<pointIndexHit> hits;
+//
+//        surface_.findNearest
+//        (
+//            pointField(1, pt),
+//            scalarField(1, sqr(GREAT)),
+//            hits
+//        );
+//
+//        if (hits[0].hit() && !surfaceAlreadyHit.found(hits[0].index()))
+//        {
+//            surfaceCellSizeFunction_().refineCellSize(hits[0].index());
+//
+//            surfaceAlreadyHit.insert(hits[0].index());
+//        }
+//    }
+
+    return true;
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/uniform/uniform.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/uniform/uniform.H
new file mode 100644
index 0000000000000000000000000000000000000000..726d506992e3dfe3436da05c2bf730d7b73a19b5
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/uniform/uniform.H
@@ -0,0 +1,106 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::uniform
+
+Description
+
+SourceFiles
+    uniform.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef uniform_H
+#define uniform_H
+
+#include "cellSizeFunction.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                           Class uniform Declaration
+\*---------------------------------------------------------------------------*/
+
+class uniform
+:
+    public cellSizeFunction
+{
+
+private:
+
+    // Private data
+
+
+public:
+
+    //- Runtime type information
+    TypeName("uniform");
+
+    // Constructors
+
+        //- Construct from components
+        uniform
+        (
+            const dictionary& initialPointsDict,
+            const searchableSurface& surface
+        );
+
+
+    //- Destructor
+    virtual ~uniform()
+    {}
+
+
+    // Member Functions
+
+        //- Modify scalar argument to the cell size specified by function.
+        //  Return a boolean specifying if the function was used, i.e. false if
+        //  the point was not in range of the surface for a spatially varying
+        //  size.
+        virtual bool cellSize
+        (
+            const point& pt,
+            scalar& size
+        ) const;
+
+        //- Adapt local cell size. Return true if anything changed.
+        virtual bool setCellSize
+        (
+            const pointField& pts
+        );
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/uniformDistance/uniformDistance.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/uniformDistance/uniformDistance.C
new file mode 100644
index 0000000000000000000000000000000000000000..47e8ecfe43db2a6fbf62c68431066c11e6538e03
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/uniformDistance/uniformDistance.C
@@ -0,0 +1,164 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "uniformDistance.H"
+#include "addToRunTimeSelectionTable.H"
+#include "dimensionSet.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+defineTypeNameAndDebug(uniformDistance, 0);
+addToRunTimeSelectionTable(cellSizeFunction, uniformDistance, dictionary);
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+uniformDistance::uniformDistance
+(
+    const dictionary& initialPointsDict,
+    const searchableSurface& surface
+)
+:
+    cellSizeFunction(typeName, initialPointsDict, surface),
+    distance_(readScalar(coeffsDict().lookup("distance"))),
+    distanceSqr_(sqr(distance_))
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+bool uniformDistance::cellSize
+(
+    const point& pt,
+    scalar& size
+) const
+{
+    size = 0;
+
+    List<pointIndexHit> hits;
+
+    surface_.findNearest
+    (
+        pointField(1, pt),
+        scalarField(1, distanceSqr_),
+        hits
+    );
+
+    const pointIndexHit& hitInfo = hits[0];
+
+    if (hitInfo.hit())
+    {
+        if (sideMode_ == rmBothsides)
+        {
+            size = surfaceCellSizeFunction_().surfaceSize(hitInfo.index());
+
+            return true;
+        }
+
+        // If the nearest point is essentially on the surface, do not do a
+        // getVolumeType calculation, as it will be prone to error.
+        if (mag(pt  - hitInfo.hitPoint()) < snapToSurfaceTol_)
+        {
+            size = surfaceCellSizeFunction_().surfaceSize(hitInfo.index());
+
+            return true;
+        }
+
+        pointField ptF(1, pt);
+        List<searchableSurface::volumeType> vTL;
+
+        surface_.getVolumeType(ptF, vTL);
+
+        bool functionApplied = false;
+
+        if
+        (
+            sideMode_ == smInside
+         && vTL[0] == searchableSurface::INSIDE
+        )
+        {
+            size = surfaceCellSizeFunction_().surfaceSize(hitInfo.index());
+
+            functionApplied = true;
+        }
+        else if
+        (
+            sideMode_ == smOutside
+         && vTL[0] == searchableSurface::OUTSIDE
+        )
+        {
+            size = surfaceCellSizeFunction_().surfaceSize(hitInfo.index());
+
+            functionApplied = true;
+        }
+
+        return functionApplied;
+    }
+
+    return false;
+}
+
+
+bool uniformDistance::setCellSize
+(
+    const pointField& pts
+)
+{
+    labelHashSet surfaceAlreadyHit(surface_.size());
+
+    forAll(pts, ptI)
+    {
+        const Foam::point& pt = pts[ptI];
+
+        List<pointIndexHit> hits;
+
+        surface_.findNearest
+        (
+            pointField(1, pt),
+            scalarField(1, distanceSqr_),
+            hits
+        );
+
+        if (hits[0].hit() && !surfaceAlreadyHit.found(hits[0].index()))
+        {
+            surfaceCellSizeFunction_().refineSurfaceSize(hits[0].index());
+
+            surfaceAlreadyHit.insert(hits[0].index());
+        }
+    }
+
+    return true;
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/uniformDistance/uniformDistance.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/uniformDistance/uniformDistance.H
new file mode 100644
index 0000000000000000000000000000000000000000..0ffe679e1b310b55b03b39b3132482a2191b0442
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/cellSizeFunction/uniformDistance/uniformDistance.H
@@ -0,0 +1,112 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::uniformDistance
+
+Description
+
+SourceFiles
+    uniformDistance.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef uniformDistance_H
+#define uniformDistance_H
+
+#include "cellSizeFunction.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                        Class uniformDistance Declaration
+\*---------------------------------------------------------------------------*/
+
+class uniformDistance
+:
+    public cellSizeFunction
+{
+
+private:
+
+    // Private data
+
+        //- Distance
+        scalar distance_;
+
+        //- Distance squared
+        scalar distanceSqr_;
+
+
+public:
+
+    //- Runtime type information
+    TypeName("uniformDistance");
+
+    // Constructors
+
+        //- Construct from components
+        uniformDistance
+        (
+            const dictionary& initialPointsDict,
+            const searchableSurface& surface
+        );
+
+
+    //- Destructor
+    virtual ~uniformDistance()
+    {}
+
+
+    // Member Functions
+
+        //- Modify scalar argument to the cell size specified by function.
+        //  Return a boolean specifying if the function was used, i.e. false if
+        //  the point was not in range of the surface for a spatially varying
+        //  size.
+        virtual bool cellSize
+        (
+            const point& pt,
+            scalar& size
+        ) const;
+
+        //- Adapt local cell size. Return true if anything changed.
+        virtual bool setCellSize
+        (
+            const pointField& pts
+        );
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/cellSizeCalculationType/automatic/automatic.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/cellSizeCalculationType/automatic/automatic.C
new file mode 100644
index 0000000000000000000000000000000000000000..4a73b4a7c51cc78e1607d3ffd42a2058f2710729
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/cellSizeCalculationType/automatic/automatic.C
@@ -0,0 +1,292 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "automatic.H"
+#include "addToRunTimeSelectionTable.H"
+#include "triSurfaceMesh.H"
+#include "vtkSurfaceWriter.H"
+#include "Time.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+    defineTypeNameAndDebug(automatic, 0);
+    addToRunTimeSelectionTable(cellSizeCalculationType, automatic, dictionary);
+}
+
+
+// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
+
+void Foam::automatic::smoothField(triSurfaceScalarField& surf)
+{
+    label nSmoothingIterations = 10;
+
+    for (label iter = 0; iter < nSmoothingIterations; ++iter)
+    {
+        const pointField& faceCentres = surface_.faceCentres();
+
+        forAll(surf, sI)
+        {
+            const labelList& faceFaces = surface_.faceFaces()[sI];
+
+            const point& fC = faceCentres[sI];
+            const scalar value = surf[sI];
+
+            scalar newValue = 0;
+            scalar totalDist = 0;
+
+            label nFaces = 0;
+
+            forAll(faceFaces, fI)
+            {
+                const label faceLabel = faceFaces[fI];
+                const point& faceCentre = faceCentres[faceLabel];
+
+                const scalar faceValue = surf[faceLabel];
+                const scalar distance = mag(faceCentre - fC);
+
+                newValue += faceValue/distance;
+
+                totalDist += 1.0/distance;
+
+                if (value < faceValue)
+                {
+                    nFaces++;
+                }
+            }
+
+            // Do not smooth out the peak values
+            if (nFaces == faceFaces.size())
+            {
+                //continue;
+            }
+
+            surf[sI] = newValue/totalDist;
+        }
+    }
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::automatic::automatic
+(
+    const dictionary& cellSizeCalcTypeDict,
+    const triSurfaceMesh& surface
+)
+:
+    cellSizeCalculationType(typeName, cellSizeCalcTypeDict, surface),
+    coeffsDict_(cellSizeCalcTypeDict.subDict(typeName + "Coeffs")),
+    surface_(surface),
+    surfaceName_(surface.searchableSurface::name()),
+    readCurvature_(Switch(coeffsDict_.lookup("curvature"))),
+    curvatureFile_(coeffsDict_.lookup("curvatureFile")),
+    readFeatureProximity_(Switch(coeffsDict_.lookup("featureProximity"))),
+    featureProximityFile_(coeffsDict_.lookup("featureProximityFile")),
+    readInternalCloseness_(Switch(coeffsDict_.lookup("internalCloseness"))),
+    internalClosenessFile_(coeffsDict_.lookup("internalClosenessFile")),
+    curvatureCellSizeFactor_
+    (
+        readScalar(coeffsDict_.lookup("curvatureCellSizeFactor"))
+    ),
+    maximumCellSize_
+    (
+        readScalar(coeffsDict_.lookup("maximumCellSize"))
+    )
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+Foam::triSurfaceScalarField Foam::automatic::load()
+{
+    Info<< indent << "Calculating cell size on surface: "
+        << surfaceName_ << endl;
+
+    triSurfaceScalarField surfaceCellSize
+    (
+        IOobject
+        (
+            surfaceName_ + ".cellSize",
+            surface_.searchableSurface::time().constant(),
+            "triSurface",
+            surface_.searchableSurface::time(),
+            IOobject::NO_READ,
+            IOobject::NO_WRITE
+        ),
+        surface_,
+        dimLength,
+        scalarField(surface_.size(), maximumCellSize_)
+    );
+
+    if (readCurvature_)
+    {
+        Info<< indent << "Reading curvature         : "
+            << curvatureFile_ << endl;
+
+        triSurfacePointScalarField curvature
+        (
+            IOobject
+            (
+                curvatureFile_,
+                surface_.searchableSurface::time().constant(),
+                "triSurface",
+                surface_.searchableSurface::time(),
+                IOobject::MUST_READ,
+                IOobject::NO_WRITE
+            ),
+            surface_,
+            dimLength,
+            true
+        );
+
+        const List<labelledTri>& localFaces = surface_.localFaces();
+        const labelList& meshPoints = surface_.meshPoints();
+
+        forAll(surfaceCellSize, fI)
+        {
+            const labelList& facePoints = localFaces[fI].triFaceFace();
+
+            scalar interpolatedCurvatureToFace = 0.0;
+
+            forAll(facePoints, fpI)
+            {
+                interpolatedCurvatureToFace
+                    += curvature[meshPoints[facePoints[fpI]]];
+            }
+
+            interpolatedCurvatureToFace /= facePoints.size();
+
+            surfaceCellSize[fI] =
+                min
+                (
+                    1.0
+                   /max
+                    (
+                        (1.0/curvatureCellSizeFactor_)
+                       *interpolatedCurvatureToFace,
+                        1.0/maximumCellSize_
+                    ),
+                    surfaceCellSize[fI]
+                );
+        }
+    }
+
+    if (readInternalCloseness_)
+    {
+        Info<< indent << "Reading internal closeness: "
+            << internalClosenessFile_ << endl;
+
+        triSurfaceScalarField internalCloseness
+        (
+            IOobject
+            (
+                internalClosenessFile_,
+                surface_.searchableSurface::time().constant(),
+                "triSurface",
+                surface_.searchableSurface::time(),
+                IOobject::MUST_READ,
+                IOobject::NO_WRITE
+            ),
+            surface_,
+            dimLength,
+            true
+        );
+
+        forAll(surfaceCellSize, fI)
+        {
+            surfaceCellSize[fI] =
+                min
+                (
+                    internalCloseness[fI],
+                    surfaceCellSize[fI]
+                );
+        }
+    }
+
+    if (readFeatureProximity_)
+    {
+        Info<< indent << "Reading feature proximity : "
+            << featureProximityFile_ << endl;
+
+        triSurfaceScalarField featureProximity
+        (
+            IOobject
+            (
+                featureProximityFile_,
+                surface_.searchableSurface::time().constant(),
+                "triSurface",
+                surface_.searchableSurface::time(),
+                IOobject::MUST_READ,
+                IOobject::NO_WRITE
+            ),
+            surface_,
+            dimLength,
+            true
+        );
+
+        forAll(surfaceCellSize, fI)
+        {
+            surfaceCellSize[fI] =
+                min
+                (
+                    featureProximity[fI],
+                    surfaceCellSize[fI]
+                );
+        }
+    }
+
+    smoothField(surfaceCellSize);
+
+    surfaceCellSize.write();
+
+    if (debug)
+    {
+        faceList faces(surface_.size());
+
+        forAll(surface_, fI)
+        {
+            faces[fI] = surface_.triSurface::operator[](fI).triFaceFace();
+        }
+
+        vtkSurfaceWriter().write
+        (
+            surface_.searchableSurface::time().constant()/"triSurface",
+            surfaceName_,
+            surface_.points(),
+            faces,
+            "cellSize",
+            surfaceCellSize,
+            false,
+            true
+        );
+    }
+
+    return surfaceCellSize;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/cellSizeCalculationType/automatic/automatic.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/cellSizeCalculationType/automatic/automatic.H
new file mode 100644
index 0000000000000000000000000000000000000000..4288176e8f3ddccd42dcf074cb5bd2f21d260756
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/cellSizeCalculationType/automatic/automatic.H
@@ -0,0 +1,129 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::automatic
+
+Description
+
+SourceFiles
+    automatic.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef automatic_H
+#define automatic_H
+
+#include "cellSizeCalculationType.H"
+#include "triSurfaceFields.H"
+#include "PrimitivePatchInterpolation.H"
+#include "Switch.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+class triSurfaceMesh;
+
+/*---------------------------------------------------------------------------*\
+                         Class automatic Declaration
+\*---------------------------------------------------------------------------*/
+
+class automatic
+:
+    public cellSizeCalculationType
+{
+
+private:
+
+    // Private data
+
+        //- Dictionary of coefficients for automatic cell sizing
+        const dictionary& coeffsDict_;
+
+        //- Reference to the triSurfaceMesh
+        const triSurfaceMesh& surface_;
+
+        //- Name of the surface. Used to write the cell size field
+        const word surfaceName_;
+
+        const Switch readCurvature_;
+        const word curvatureFile_;
+
+        const Switch readFeatureProximity_;
+        const word featureProximityFile_;
+
+        const Switch readInternalCloseness_;
+        const word internalClosenessFile_;
+
+        //- The curvature values are multiplied by the inverse of this value to
+        //  get the cell size
+        const scalar curvatureCellSizeFactor_;
+
+        //- The maximum allowable sell size
+        const scalar maximumCellSize_;
+
+
+    // Private Member Functions
+
+        void smoothField(triSurfaceScalarField& surf);
+
+
+public:
+
+    //- Runtime type information
+    TypeName("automatic");
+
+
+    // Constructors
+
+        //- Construct from components
+        automatic
+        (
+            const dictionary& cellSizeCalcTypeDict,
+            const triSurfaceMesh& surface
+        );
+
+
+    //- Destructor
+    virtual ~automatic()
+    {}
+
+
+    // Member Functions
+
+        //- Load the cell size field
+        virtual triSurfaceScalarField load();
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/cellSizeCalculationType/cellSizeCalculationType/cellSizeCalculationType.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/cellSizeCalculationType/cellSizeCalculationType/cellSizeCalculationType.C
new file mode 100644
index 0000000000000000000000000000000000000000..b449d46fc66b71d794d69ffa5aeae526f47ea9d8
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/cellSizeCalculationType/cellSizeCalculationType/cellSizeCalculationType.C
@@ -0,0 +1,97 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "cellSizeCalculationType.H"
+#include "addToRunTimeSelectionTable.H"
+#include "triSurfaceMesh.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+    defineTypeNameAndDebug(cellSizeCalculationType, 0);
+    defineRunTimeSelectionTable(cellSizeCalculationType, dictionary);
+}
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::cellSizeCalculationType::cellSizeCalculationType
+(
+    const word& type,
+    const dictionary& cellSizeCalculationTypeDict,
+    const triSurfaceMesh& surface
+)
+:
+    cellSizeCalculationTypeDict_(cellSizeCalculationTypeDict)
+{}
+
+
+// * * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * //
+
+Foam::autoPtr<Foam::cellSizeCalculationType> Foam::cellSizeCalculationType::New
+(
+    const dictionary& cellSizeCalculationTypeDict,
+    const triSurfaceMesh& surface
+)
+{
+    word cellSizeCalculationTypeTypeName
+    (
+        cellSizeCalculationTypeDict.lookup("cellSizeCalculationType")
+    );
+
+    Info<< "    Selecting cellSizeCalculationType "
+        << cellSizeCalculationTypeTypeName << endl;
+
+    dictionaryConstructorTable::iterator cstrIter =
+        dictionaryConstructorTablePtr_->find(cellSizeCalculationTypeTypeName);
+
+    if (cstrIter == dictionaryConstructorTablePtr_->end())
+    {
+        FatalErrorIn
+        (
+            "cellSizeCalculationType::New(dictionary&, "
+            "const conformalVoronoiMesh&, const searchableSurface&)"
+        )   << "Unknown cellSizeCalculationType type "
+            << cellSizeCalculationTypeTypeName
+            << endl << endl
+            << "Valid cellSizeCalculationType types are :" << endl
+            << dictionaryConstructorTablePtr_->toc()
+            << exit(FatalError);
+    }
+
+    return autoPtr<cellSizeCalculationType>
+    (
+        cstrIter()(cellSizeCalculationTypeDict, surface)
+    );
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::cellSizeCalculationType::~cellSizeCalculationType()
+{}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/cellSizeCalculationType/cellSizeCalculationType/cellSizeCalculationType.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/cellSizeCalculationType/cellSizeCalculationType/cellSizeCalculationType.H
new file mode 100644
index 0000000000000000000000000000000000000000..4d59f5c7189906a57d1a3d0fd429b86645647917
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/cellSizeCalculationType/cellSizeCalculationType/cellSizeCalculationType.H
@@ -0,0 +1,134 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::cellSizeCalculationType
+
+Description
+    Abstract base class for specifying target cell sizes
+
+SourceFiles
+    cellSizeCalculationType.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef cellSizeCalculationType_H
+#define cellSizeCalculationType_H
+
+#include "searchableSurface.H"
+#include "autoPtr.H"
+#include "runTimeSelectionTables.H"
+#include "triSurfaceFields.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+class triSurfaceMesh;
+
+/*---------------------------------------------------------------------------*\
+                     Class cellSizeCalculationType Declaration
+\*---------------------------------------------------------------------------*/
+
+class cellSizeCalculationType
+{
+
+protected:
+
+        const dictionary& cellSizeCalculationTypeDict_;
+
+
+private:
+
+    // Private Member Functions
+
+        //- Disallow default bitwise copy construct
+        cellSizeCalculationType(const cellSizeCalculationType&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const cellSizeCalculationType&);
+
+
+public:
+
+    //- Runtime type information
+    TypeName("cellSizeCalculationType");
+
+
+    // Declare run-time constructor selection table
+
+        declareRunTimeSelectionTable
+        (
+            autoPtr,
+            cellSizeCalculationType,
+            dictionary,
+            (
+                const dictionary& cellSizeCalculationTypeDict,
+                const triSurfaceMesh& surface
+            ),
+            (cellSizeCalculationTypeDict, surface)
+        );
+
+
+    // Constructors
+
+        //- Construct from components
+        cellSizeCalculationType
+        (
+            const word& type,
+            const dictionary& cellSizeCalculationTypeDict,
+            const triSurfaceMesh& surface
+        );
+
+
+    // Selectors
+
+        //- Return a reference to the selected cellSizeCalculationType
+        static autoPtr<cellSizeCalculationType> New
+        (
+            const dictionary& cellSizeCalculationTypeDict,
+            const triSurfaceMesh& surface
+        );
+
+
+    //- Destructor
+    virtual ~cellSizeCalculationType();
+
+
+    // Member Functions
+
+        //- Load the cell size
+        virtual triSurfaceScalarField load() = 0;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/cellSizeCalculationType/fieldFromFile/fieldFromFile.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/cellSizeCalculationType/fieldFromFile/fieldFromFile.C
new file mode 100644
index 0000000000000000000000000000000000000000..788c1d69c6852f1c51e71143c59f5cb1b07f7303
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/cellSizeCalculationType/fieldFromFile/fieldFromFile.C
@@ -0,0 +1,88 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "fieldFromFile.H"
+#include "addToRunTimeSelectionTable.H"
+#include "triSurfaceMesh.H"
+#include "triSurfaceFields.H"
+#include "Time.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+    defineTypeNameAndDebug(fieldFromFile, 0);
+    addToRunTimeSelectionTable
+    (
+        cellSizeCalculationType,
+        fieldFromFile,
+        dictionary
+    );
+}
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::fieldFromFile::fieldFromFile
+(
+    const dictionary& cellSizeCalcTypeDict,
+    const triSurfaceMesh& surface
+)
+:
+    cellSizeCalculationType(typeName, cellSizeCalcTypeDict, surface),
+    surface_(surface),
+    fileName_
+    (
+        cellSizeCalcTypeDict.subDict(typeName + "Coeffs").lookup("fieldFile")
+    )
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+Foam::triSurfaceScalarField Foam::fieldFromFile::load()
+{
+    Info<< indent << "Loading: " << fileName_ << endl;
+
+    triSurfaceScalarField surfaceCellSize
+    (
+        IOobject
+        (
+            fileName_,
+            surface_.searchableSurface::time().constant(),
+            "triSurface",
+            surface_.searchableSurface::time(),
+            IOobject::MUST_READ,
+            IOobject::NO_WRITE
+        ),
+        surface_,
+        dimLength,
+        true
+    );
+
+    return surfaceCellSize;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/cellSizeCalculationType/fieldFromFile/fieldFromFile.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/cellSizeCalculationType/fieldFromFile/fieldFromFile.H
new file mode 100644
index 0000000000000000000000000000000000000000..ed99b5edd0f583d4aaa872b582ad1c1fc7ce5967
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/cellSizeCalculationType/fieldFromFile/fieldFromFile.H
@@ -0,0 +1,105 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::fieldFromFile
+
+Description
+
+SourceFiles
+    fieldFromFile.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef fieldFromFile_H
+#define fieldFromFile_H
+
+#include "cellSizeCalculationType.H"
+#include "triSurfaceFields.H"
+#include "PrimitivePatchInterpolation.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+class triSurfaceMesh;
+
+/*---------------------------------------------------------------------------*\
+                       Class fieldFromFile Declaration
+\*---------------------------------------------------------------------------*/
+
+class fieldFromFile
+:
+    public cellSizeCalculationType
+{
+
+private:
+
+    // Private data
+
+        //- Reference to the triSurfaceMesh
+        const triSurfaceMesh& surface_;
+
+        //- Name of the triSurfaceScalarField file to load in. Must be in
+        //  constant/triSurface
+        const word fileName_;
+
+
+public:
+
+    //- Runtime type information
+    TypeName("fieldFromFile");
+
+
+    // Constructors
+
+        //- Construct from components
+        fieldFromFile
+        (
+            const dictionary& cellSizeCalcTypeDict,
+            const triSurfaceMesh& surface
+        );
+
+
+    //- Destructor
+    virtual ~fieldFromFile()
+    {}
+
+
+    // Member Functions
+
+        //- Load the cell size field
+        virtual triSurfaceScalarField load();
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/nonUniformField/nonUniformField.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/nonUniformField/nonUniformField.C
new file mode 100644
index 0000000000000000000000000000000000000000..fc91ed279b04a7979eface6cf063fec1ab5b36c4
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/nonUniformField/nonUniformField.C
@@ -0,0 +1,167 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "nonUniformField.H"
+#include "triSurfaceMesh.H"
+#include "searchableSurface.H"
+#include "addToRunTimeSelectionTable.H"
+#include "Time.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+    defineTypeNameAndDebug(nonUniformField, 0);
+    addToRunTimeSelectionTable
+    (
+        surfaceCellSizeFunction,
+        nonUniformField,
+        dictionary
+    );
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::nonUniformField::nonUniformField
+(
+    const dictionary& cellSizeFunctionDict,
+    const searchableSurface& surface
+)
+:
+    surfaceCellSizeFunction(typeName, cellSizeFunctionDict, surface),
+    surfaceTriMesh_(refCast<const triSurfaceMesh>(surface)),
+    surfaceCellSize_
+    (
+        IOobject
+        (
+            "surfaceCellSize.cellSize",
+            surface.time().constant(),
+            "triSurface",
+            surface.time(),
+            IOobject::NO_READ,
+            IOobject::NO_WRITE
+        ),
+        surfaceTriMesh_,
+        dimLength,
+        false
+    ),
+    cellSizeCalculationType_
+    (
+        cellSizeCalculationType::New(coeffsDict(), surfaceTriMesh_)
+    ),
+    pointCellSize_(),
+    patch_()
+{
+    Info<< incrIndent << incrIndent;
+
+    surfaceCellSize_ = cellSizeCalculationType_().load();
+
+    Info<< decrIndent;
+
+    Info<< indent << "Cell size field statistics:" << nl
+        << indent << "    Minimum: " << min(surfaceCellSize_).value() << nl
+        << indent << "    Average: " << average(surfaceCellSize_).value() << nl
+        << indent << "    Maximum: " << max(surfaceCellSize_).value() << endl;
+
+    Info<< decrIndent;
+}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+const Foam::scalar& Foam::nonUniformField::surfaceSize(const label index) const
+{
+    return surfaceCellSize_[index];
+}
+
+
+const Foam::scalar& Foam::nonUniformField::refineSurfaceSize(const label index)
+{
+    surfaceCellSize_[index] *= refinementFactor_;
+
+    return surfaceCellSize_[index];
+}
+
+
+Foam::scalar Foam::nonUniformField::interpolate
+(
+    const point& pt,
+    const label index
+) const
+{
+    if (patch_.empty())
+    {
+        recalculateInterpolation();
+    }
+
+    const face& faceHitByPt = surfaceTriMesh_.triSurface::operator[](index);
+
+    const pointField& pts = surfaceTriMesh_.points();
+    const Map<label>& pMap = surfaceTriMesh_.meshPointMap();
+
+    triPointRef tri
+    (
+        pts[faceHitByPt[0]],
+        pts[faceHitByPt[1]],
+        pts[faceHitByPt[2]]
+    );
+
+    scalarList bary(3, 0.0);
+
+    tri.barycentric(pt, bary);
+
+    return pointCellSize_()[pMap[faceHitByPt[0]]]*bary[0]
+         + pointCellSize_()[pMap[faceHitByPt[1]]]*bary[1]
+         + pointCellSize_()[pMap[faceHitByPt[2]]]*bary[2];
+}
+
+
+void Foam::nonUniformField::recalculateInterpolation() const
+{
+    patch_.reset(new primitivePatchInterpolation(surfaceTriMesh_));
+
+    pointCellSize_.reset
+    (
+        new triSurfacePointScalarField
+        (
+            IOobject
+            (
+                "pointCellSize.cellSize",
+                surfaceTriMesh_.searchableSurface::time().constant(),
+                "triSurface",
+                surfaceTriMesh_.searchableSurface::time(),
+                IOobject::NO_READ,
+                IOobject::NO_WRITE
+            ),
+            surfaceTriMesh_,
+            dimLength,
+            patch_().faceToPointInterpolate(surfaceCellSize_)
+        )
+    );
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/nonUniformField/nonUniformField.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/nonUniformField/nonUniformField.H
new file mode 100644
index 0000000000000000000000000000000000000000..039fd0fedbd8130d5ccbf6d1526419eebc3fed73
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/nonUniformField/nonUniformField.H
@@ -0,0 +1,123 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::nonUniformField
+
+Description
+
+SourceFiles
+    nonUniformField.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef nonUniformField_H
+#define nonUniformField_H
+
+#include "triSurfaceFields.H"
+#include "PrimitivePatchInterpolation.H"
+#include "surfaceCellSizeFunction.H"
+#include "cellSizeCalculationType.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+class triSurfaceMesh;
+class searchableSurface;
+
+/*---------------------------------------------------------------------------*\
+                           Class nonUniformField Declaration
+\*---------------------------------------------------------------------------*/
+
+class nonUniformField
+:
+    public surfaceCellSizeFunction
+{
+
+protected:
+
+    // Private typedef
+
+        typedef PrimitivePatchInterpolation
+        <
+            PrimitivePatch<labelledTri, List, pointField, point>
+        >   primitivePatchInterpolation;
+
+
+    // Private data
+
+        const triSurfaceMesh& surfaceTriMesh_;
+
+        triSurfaceScalarField surfaceCellSize_;
+
+        autoPtr<cellSizeCalculationType> cellSizeCalculationType_;
+
+        mutable autoPtr<triSurfacePointScalarField> pointCellSize_;
+
+        mutable autoPtr<primitivePatchInterpolation> patch_;
+
+
+public:
+
+    //- Runtime type information
+    TypeName("nonUniformField");
+
+
+    // Constructors
+
+        //- Construct from components
+        nonUniformField
+        (
+            const dictionary& cellSizeFunctionDict,
+            const searchableSurface& surface
+        );
+
+
+    //- Destructor
+    virtual ~nonUniformField()
+    {}
+
+
+    // Member Functions
+
+        virtual const scalar& surfaceSize(const label index) const;
+
+        virtual const scalar& refineSurfaceSize(const label index);
+
+        virtual scalar interpolate(const point& pt, const label index) const;
+
+        virtual void recalculateInterpolation() const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/surfaceCellSizeFunction/surfaceCellSizeFunction.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/surfaceCellSizeFunction/surfaceCellSizeFunction.C
new file mode 100644
index 0000000000000000000000000000000000000000..04d9af824f0980840a2e1846f9144efb404b891f
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/surfaceCellSizeFunction/surfaceCellSizeFunction.C
@@ -0,0 +1,102 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "surfaceCellSizeFunction.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+    defineTypeNameAndDebug(surfaceCellSizeFunction, 0);
+    defineRunTimeSelectionTable(surfaceCellSizeFunction, dictionary);
+}
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::surfaceCellSizeFunction::surfaceCellSizeFunction
+(
+    const word& type,
+    const dictionary& surfaceCellSizeFunctionDict,
+    const searchableSurface& surface
+)
+:
+    dictionary(surfaceCellSizeFunctionDict),
+    surface_(surface),
+    coeffsDict_(subDict(type + "Coeffs")),
+    refinementFactor_
+    (
+        lookupOrDefault<scalar>("refinementFactor", 1.0)
+    )
+{}
+
+
+// * * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * //
+
+Foam::autoPtr<Foam::surfaceCellSizeFunction> Foam::surfaceCellSizeFunction::New
+(
+    const dictionary& surfaceCellSizeFunctionDict,
+    const searchableSurface& surface
+)
+{
+    word surfaceCellSizeFunctionTypeName
+    (
+        surfaceCellSizeFunctionDict.lookup("surfaceCellSizeFunction")
+    );
+
+    Info<< "    Selecting surfaceCellSizeFunction "
+        << surfaceCellSizeFunctionTypeName << endl;
+
+    dictionaryConstructorTable::iterator cstrIter =
+        dictionaryConstructorTablePtr_->find(surfaceCellSizeFunctionTypeName);
+
+    if (cstrIter == dictionaryConstructorTablePtr_->end())
+    {
+        FatalErrorIn
+        (
+            "surfaceCellSizeFunction::New(dictionary&, "
+            "const conformalVoronoiMesh&, const searchableSurface&)"
+        )   << "Unknown surfaceCellSizeFunction type "
+            << surfaceCellSizeFunctionTypeName
+            << endl << endl
+            << "Valid surfaceCellSizeFunction types are :" << endl
+            << dictionaryConstructorTablePtr_->toc()
+            << exit(FatalError);
+    }
+
+    return autoPtr<surfaceCellSizeFunction>
+    (
+        cstrIter()(surfaceCellSizeFunctionDict, surface)
+    );
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::surfaceCellSizeFunction::~surfaceCellSizeFunction()
+{}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/surfaceCellSizeFunction/surfaceCellSizeFunction.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/surfaceCellSizeFunction/surfaceCellSizeFunction.H
new file mode 100644
index 0000000000000000000000000000000000000000..5c798c3be1176c6d2044d85b4299975eed0f0ecb
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/surfaceCellSizeFunction/surfaceCellSizeFunction.H
@@ -0,0 +1,159 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::surfaceCellSizeFunction
+
+Description
+    Abstract base class for specifying target cell sizes
+
+SourceFiles
+    surfaceCellSizeFunction.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef surfaceCellSizeFunction_H
+#define surfaceCellSizeFunction_H
+
+#include "searchableSurface.H"
+#include "dictionary.H"
+#include "autoPtr.H"
+#include "runTimeSelectionTables.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                     Class surfaceCellSizeFunction Declaration
+\*---------------------------------------------------------------------------*/
+
+class surfaceCellSizeFunction
+:
+    public dictionary
+{
+
+protected:
+
+    // Protected data
+
+        //- Reference to the searchableSurface that surfaceCellSizeFunction
+        //  relates to
+        const searchableSurface& surface_;
+
+        const dictionary coeffsDict_;
+
+        //- If cell resizing is allowed, this is the factor of the old cell size
+        //  to get the new cell size
+        scalar refinementFactor_;
+
+
+private:
+
+    // Private Member Functions
+
+        //- Disallow default bitwise copy construct
+        surfaceCellSizeFunction(const surfaceCellSizeFunction&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const surfaceCellSizeFunction&);
+
+
+public:
+
+    //- Runtime type information
+    TypeName("surfaceCellSizeFunction");
+
+
+    // Declare run-time constructor selection table
+
+        declareRunTimeSelectionTable
+        (
+            autoPtr,
+            surfaceCellSizeFunction,
+            dictionary,
+            (
+                const dictionary& surfaceCellSizeFunctionDict,
+                const searchableSurface& surface
+            ),
+            (surfaceCellSizeFunctionDict, surface)
+        );
+
+
+    // Constructors
+
+        //- Construct from components
+        surfaceCellSizeFunction
+        (
+            const word& type,
+            const dictionary& surfaceCellSizeFunctionDict,
+            const searchableSurface& surface
+        );
+
+
+    // Selectors
+
+        //- Return a reference to the selected surfaceCellSizeFunction
+        static autoPtr<surfaceCellSizeFunction> New
+        (
+            const dictionary& surfaceCellSizeFunctionDict,
+            const searchableSurface& surface
+        );
+
+
+    //- Destructor
+    virtual ~surfaceCellSizeFunction();
+
+
+    // Member Functions
+
+        //- Const access to the details dictionary
+        inline const dictionary& coeffsDict() const
+        {
+            return coeffsDict_;
+        }
+
+        virtual const scalar& surfaceSize(const label index) const = 0;
+
+        virtual const scalar& refineSurfaceSize(const label index) = 0;
+
+        virtual scalar interpolate
+        (
+            const point& pt,
+            const label index
+        ) const = 0;
+
+        virtual void recalculateInterpolation() const = 0;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/uniformValue/uniformValue.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/uniformValue/uniformValue.C
new file mode 100644
index 0000000000000000000000000000000000000000..e68a5ab3cac8a03f5d4b64663437d6c0875d035a
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/uniformValue/uniformValue.C
@@ -0,0 +1,86 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "uniformValue.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+    defineTypeNameAndDebug(uniformValue, 0);
+    addToRunTimeSelectionTable
+    (
+        surfaceCellSizeFunction,
+        uniformValue,
+        dictionary
+    );
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::uniformValue::uniformValue
+(
+    const dictionary& cellSizeFunctionDict,
+    const searchableSurface& surface
+)
+:
+    surfaceCellSizeFunction(typeName, cellSizeFunctionDict, surface),
+    surfaceCellSize_(readScalar(coeffsDict().lookup("surfaceCellSize")))
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+const Foam::scalar& Foam::uniformValue::surfaceSize(const label index) const
+{
+    return surfaceCellSize_;
+}
+
+
+const Foam::scalar& Foam::uniformValue::refineSurfaceSize(const label index)
+{
+    surfaceCellSize_ *= refinementFactor_;
+
+    return surfaceCellSize_;
+}
+
+
+Foam::scalar Foam::uniformValue::interpolate
+(
+    const point& pt,
+    const label index
+) const
+{
+    return surfaceCellSize_;
+}
+
+
+void Foam::uniformValue::recalculateInterpolation() const
+{}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/uniformValue/uniformValue.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/uniformValue/uniformValue.H
new file mode 100644
index 0000000000000000000000000000000000000000..36778379332e25a5efa8d78adaee94409824442f
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/uniformValue/uniformValue.H
@@ -0,0 +1,105 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::uniformValue
+
+Description
+
+SourceFiles
+    uniformValue.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef uniformValue_H
+#define uniformValue_H
+
+#include "surfaceCellSizeFunction.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                           Class uniformValue Declaration
+\*---------------------------------------------------------------------------*/
+
+class uniformValue
+:
+    public surfaceCellSizeFunction
+{
+
+private:
+
+    // Private data
+
+        scalar surfaceCellSize_;
+
+
+public:
+
+    //- Runtime type information
+    TypeName("uniformValue");
+
+
+    // Constructors
+
+        //- Construct from components
+        uniformValue
+        (
+            const dictionary& cellSizeFunctionDict,
+            const searchableSurface& surface
+        );
+
+
+    //- Destructor
+    virtual ~uniformValue()
+    {}
+
+
+    // Member Functions
+
+        virtual const scalar& surfaceSize(const label index) const;
+
+        virtual const scalar& refineSurfaceSize(const label index);
+
+        virtual scalar interpolate
+        (
+            const point& pt,
+            const label index
+        ) const;
+
+        virtual void recalculateInterpolation() const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/CGALTriangulation3DKernel.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/CGALTriangulation3DKernel.H
new file mode 100644
index 0000000000000000000000000000000000000000..e80b3fb8f4b428ee42d4f739c582e4d429aafe35
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/CGALTriangulation3DKernel.H
@@ -0,0 +1,62 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Typedefs
+    CGALTriangulation3DKernel
+
+Description
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef CGALTriangulation3DKernel_H
+#define CGALTriangulation3DKernel_H
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#include "CGAL/Delaunay_triangulation_3.h"
+
+#ifdef CGAL_INEXACT
+
+    // Fast kernel using a double as the storage type but the triangulation may
+    // fail. Adding robust circumcentre traits
+    #include "CGAL/Exact_predicates_inexact_constructions_kernel.h"
+    typedef CGAL::Exact_predicates_inexact_constructions_kernel baseK;
+//    #include <CGAL/Robust_circumcenter_traits_3.h>
+    #include <CGAL/Robust_circumcenter_filtered_traits_3.h>
+//    typedef CGAL::Robust_circumcenter_traits_3<baseK>           K;
+    typedef CGAL::Robust_circumcenter_filtered_traits_3<baseK>  K;
+
+#else
+
+    // Very robust but expensive kernel
+    #include "CGAL/Exact_predicates_exact_constructions_kernel.h"
+    typedef CGAL::Exact_predicates_exact_constructions_kernel baseK;
+    typedef CGAL::Exact_predicates_exact_constructions_kernel K;
+
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/CGALTriangulation3Ddefs.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/CGALTriangulation3Ddefs.H
new file mode 100644
index 0000000000000000000000000000000000000000..4e7dd48c38c76ffe152bf7d194881540ca0c2381
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/CGALTriangulation3Ddefs.H
@@ -0,0 +1,60 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Typedefs
+    CGALTriangulation3Ddefs
+
+Description
+    CGAL data structures used for 3D Delaunay meshing.
+
+    Define CGAL_INEXACT to use Exact_predicates_inexact_constructions kernel
+    otherwise the more robust but much less efficient
+    Exact_predicates_exact_constructions will be used.
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef CGALTriangulation3Ddefs_H
+#define CGALTriangulation3Ddefs_H
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#include "CGALTriangulation3DKernel.H"
+
+#include "indexedVertex.H"
+#include "indexedCell.H"
+
+typedef CGAL::indexedVertex<K>     Vb;
+typedef CGAL::indexedCell<K>       Cb;
+
+typedef CGAL::Compact_location     CompactLocator;
+typedef CGAL::Fast_location        FastLocator;
+
+typedef CGAL::Triangulation_data_structure_3<Vb, Cb>           Tds;
+typedef CGAL::Delaunay_triangulation_3<K, Tds, CompactLocator> Delaunay;
+typedef CGAL::Delaunay_triangulation_3<K, Tds, FastLocator>    CellSizeDelaunay;
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.C
new file mode 100644
index 0000000000000000000000000000000000000000..ec6ca47901b5f55ced91f7a976b2e94360c2bd32
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.C
@@ -0,0 +1,2224 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012-2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "conformalVoronoiMesh.H"
+#include "initialPointsMethod.H"
+#include "relaxationModel.H"
+#include "faceAreaWeightModel.H"
+#include "meshSearch.H"
+#include "vectorTools.H"
+#include "IOmanip.H"
+#include "indexedCellChecks.H"
+
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+defineTypeNameAndDebug(conformalVoronoiMesh, 0);
+
+}
+
+const Foam::scalar Foam::conformalVoronoiMesh::tolParallel = 1e-3;
+
+
+// * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * * //
+
+void Foam::conformalVoronoiMesh::cellSizeMeshOverlapsBackground() const
+{
+    const cellShapeControlMesh& cellSizeMesh =
+        cellShapeControl_.shapeControlMesh();
+
+    DynamicList<Foam::point> pts(number_of_vertices());
+
+    for
+    (
+        Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        ++vit
+    )
+    {
+        if (vit->internalOrBoundaryPoint())
+        {
+            pts.append(topoint(vit->point()));
+        }
+    }
+
+    boundBox bb(pts);
+
+    boundBox cellSizeMeshBb = cellSizeMesh.bounds();
+
+    bool fullyContained = true;
+
+    if (!cellSizeMeshBb.contains(bb))
+    {
+        Pout<< "Triangulation not fully contained in cell size mesh."
+            << endl;
+
+        Pout<< "Cell Size Mesh Bounds = " << cellSizeMesh.bounds() << endl;
+        Pout<< "cvMesh Bounds         = " << bb << endl;
+
+        fullyContained = false;
+    }
+
+    reduce(fullyContained, andOp<unsigned int>());
+
+    Info<< "Triangulation is "
+        << (fullyContained ? "fully" : "not fully")
+        << " contained in the cell size mesh"
+        << endl;
+}
+
+
+Foam::scalar Foam::conformalVoronoiMesh::requiredSize
+(
+    const Foam::point& pt
+) const
+{
+    pointIndexHit surfHit;
+    label hitSurface;
+
+    DynamicList<scalar> cellSizeHits;
+
+    geometryToConformTo_.findSurfaceNearest
+    (
+        pt,
+        sqr(GREAT),
+        surfHit,
+        hitSurface
+    );
+
+    if (!surfHit.hit())
+    {
+        FatalErrorIn
+        (
+            "Foam::tensor Foam::conformalVoronoiMesh::requiredAlignment"
+        )
+            << "findSurfaceNearest did not find a hit across the surfaces."
+            << exit(FatalError) << endl;
+    }
+
+    cellSizeHits.append(cellShapeControls().cellSize(pt));
+
+    // Primary alignment
+
+    vectorField norm(1);
+
+    allGeometry_[hitSurface].getNormal
+    (
+        List<pointIndexHit>(1, surfHit),
+        norm
+    );
+
+    const vector np = norm[0];
+
+    // Generate equally spaced 'spokes' in a circle normal to the
+    // direction from the vertex to the closest point on the surface
+    // and look for a secondary intersection.
+
+    const vector d = surfHit.hitPoint() - pt;
+
+    const tensor Rp = rotationTensor(vector(0,0,1), np);
+
+    const label s = cvMeshControls().alignmentSearchSpokes();
+
+    const scalar spanMag = geometryToConformTo_.globalBounds().mag();
+
+    scalar totalDist = 0;
+
+    for (label i = 0; i < s; i++)
+    {
+        vector spoke
+        (
+            Foam::cos(i*constant::mathematical::twoPi/s),
+            Foam::sin(i*constant::mathematical::twoPi/s),
+            0
+        );
+
+        spoke *= spanMag;
+
+        spoke = Rp & spoke;
+
+        pointIndexHit spokeHit;
+
+        label spokeSurface = -1;
+
+        // internal spoke
+
+        geometryToConformTo_.findSurfaceNearestIntersection
+        (
+            pt,
+            pt + spoke,
+            spokeHit,
+            spokeSurface
+        );
+
+        if (spokeHit.hit())
+        {
+            const Foam::point& hitPt = spokeHit.hitPoint();
+
+            scalar spokeHitDistance = mag(hitPt - pt);
+
+            cellSizeHits.append
+            (
+                cellShapeControls().cellSize(hitPt)
+            );
+
+            totalDist += spokeHitDistance;
+        }
+
+        //external spoke
+
+        Foam::point mirrorPt = pt + 2*d;
+
+        geometryToConformTo_.findSurfaceNearestIntersection
+        (
+            mirrorPt,
+            mirrorPt + spoke,
+            spokeHit,
+            spokeSurface
+        );
+
+        if (spokeHit.hit())
+        {
+            const Foam::point& hitPt = spokeHit.hitPoint();
+
+            scalar spokeHitDistance = mag(hitPt - mirrorPt);
+
+            cellSizeHits.append
+            (
+                cellShapeControls().cellSize(hitPt)
+            );
+
+            totalDist += spokeHitDistance;
+        }
+    }
+
+    scalar cellSize = 0;
+
+    forAll(cellSizeHits, hitI)
+    {
+        cellSize += cellSizeHits[hitI];
+    }
+
+    return cellSize/cellSizeHits.size();
+    //return cellShapeControls().cellSize(pt);
+}
+
+
+Foam::tensor Foam::conformalVoronoiMesh::requiredAlignment
+(
+    const Foam::point& pt
+) const
+{
+    pointIndexHit surfHit;
+    label hitSurface;
+
+    geometryToConformTo_.findSurfaceNearest
+    (
+        pt,
+        sqr(GREAT),
+        surfHit,
+        hitSurface
+    );
+
+    if (!surfHit.hit())
+    {
+        FatalErrorIn
+        (
+            "Foam::tensor Foam::conformalVoronoiMesh::requiredAlignment"
+        )
+            << "findSurfaceNearest did not find a hit across the surfaces."
+            << exit(FatalError) << endl;
+    }
+
+    // Primary alignment
+
+    vectorField norm(1);
+
+    allGeometry_[hitSurface].getNormal
+    (
+        List<pointIndexHit>(1, surfHit),
+        norm
+    );
+
+    const vector np = norm[0];
+
+    // Generate equally spaced 'spokes' in a circle normal to the
+    // direction from the vertex to the closest point on the surface
+    // and look for a secondary intersection.
+
+    const vector d = surfHit.hitPoint() - pt;
+
+    const tensor Rp = rotationTensor(vector(0,0,1), np);
+
+    const label s = cvMeshControls().alignmentSearchSpokes();
+
+    scalar closestSpokeHitDistance = GREAT;
+
+    pointIndexHit closestSpokeHit;
+
+    label closestSpokeSurface = -1;
+
+    const scalar spanMag = geometryToConformTo_.globalBounds().mag();
+
+    for (label i = 0; i < s; i++)
+    {
+        vector spoke
+        (
+            Foam::cos(i*constant::mathematical::twoPi/s),
+            Foam::sin(i*constant::mathematical::twoPi/s),
+            0
+        );
+
+        spoke *= spanMag;
+
+        spoke = Rp & spoke;
+
+        pointIndexHit spokeHit;
+
+        label spokeSurface = -1;
+
+        // internal spoke
+
+        geometryToConformTo_.findSurfaceNearestIntersection
+        (
+            pt,
+            pt + spoke,
+            spokeHit,
+            spokeSurface
+        );
+
+        if (spokeHit.hit())
+        {
+            scalar spokeHitDistance = mag
+            (
+                spokeHit.hitPoint() - pt
+            );
+
+            if (spokeHitDistance < closestSpokeHitDistance)
+            {
+                closestSpokeHit = spokeHit;
+                closestSpokeSurface = spokeSurface;
+                closestSpokeHitDistance = spokeHitDistance;
+            }
+        }
+
+        //external spoke
+
+        Foam::point mirrorPt = pt + 2*d;
+
+        geometryToConformTo_.findSurfaceNearestIntersection
+        (
+            mirrorPt,
+            mirrorPt + spoke,
+            spokeHit,
+            spokeSurface
+        );
+
+        if (spokeHit.hit())
+        {
+            scalar spokeHitDistance = mag
+            (
+                spokeHit.hitPoint() - mirrorPt
+            );
+
+            if (spokeHitDistance < closestSpokeHitDistance)
+            {
+                closestSpokeHit = spokeHit;
+                closestSpokeSurface = spokeSurface;
+                closestSpokeHitDistance = spokeHitDistance;
+            }
+        }
+    }
+
+    if (closestSpokeSurface == -1)
+    {
+        WarningIn
+        (
+            "conformalVoronoiMesh::requiredAlignment"
+            "("
+                "const Foam::point& pt"
+            ") const"
+        )   << "No secondary surface hit found in spoke search "
+            << "using " << s
+            << " spokes, try increasing alignmentSearchSpokes."
+            << endl;
+
+        return I;
+    }
+
+    // Auxiliary alignment generated by spoke intersection normal.
+
+    allGeometry_[closestSpokeSurface].getNormal
+    (
+        List<pointIndexHit>(1, closestSpokeHit),
+        norm
+    );
+
+    const vector& na = norm[0];
+
+    // Secondary alignment
+    vector ns = np ^ na;
+
+    if (mag(ns) < SMALL)
+    {
+        FatalErrorIn("conformalVoronoiMesh::requiredAlignment")
+            << "Parallel normals detected in spoke search." << nl
+            << "point: " << pt << nl
+            << "closest surface point: " << surfHit.hitPoint() << nl
+            << "closest spoke hit: " << closestSpokeHit.hitPoint() << nl
+            << "np: " << surfHit.hitPoint() + np << nl
+            << "ns: " << closestSpokeHit.hitPoint() + na << nl
+            << exit(FatalError);
+    }
+
+    ns /= mag(ns);
+
+    tensor Rs = rotationTensor((Rp & vector(0,1,0)), ns);
+
+    return (Rs & Rp);
+}
+
+
+void Foam::conformalVoronoiMesh::insertInternalPoints
+(
+    List<Point>& points,
+    bool distribute
+)
+{
+    label nPoints = points.size();
+
+    if (Pstream::parRun())
+    {
+        reduce(nPoints, sumOp<label>());
+    }
+
+    Info<< "    " << nPoints << " points to insert..." << endl;
+
+    if (Pstream::parRun() && distribute)
+    {
+        List<Foam::point> transferPoints(points.size());
+
+        forAll(points, pI)
+        {
+            transferPoints[pI] = topoint(points[pI]);
+        }
+
+        // Send the points that are not on this processor to the appropriate
+        // place
+        Foam::autoPtr<Foam::mapDistribute> map
+        (
+            decomposition_().distributePoints(transferPoints)
+        );
+
+        map().distribute(points);
+    }
+
+    label nVert = number_of_vertices();
+
+    // using the range insert (faster than inserting points one by one)
+    insert(points.begin(), points.end());
+
+    label nInserted(number_of_vertices() - nVert);
+
+    if (Pstream::parRun())
+    {
+        reduce(nInserted, sumOp<label>());
+    }
+
+    Info<< "    " << nInserted << " points inserted"
+        << ", failed to insert " << nPoints - nInserted
+        << " ("
+        << 100.0*(nPoints - nInserted)/nInserted
+        << " %)"<< endl;
+
+    for
+    (
+        Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        ++vit
+    )
+    {
+        if (vit->uninitialised())
+        {
+            vit->index() = getNewVertexIndex();
+            vit->type() = Vb::vtInternal;
+        }
+    }
+}
+
+
+void Foam::conformalVoronoiMesh::insertPoints
+(
+    List<Vb>& vertices,
+    bool distribute
+)
+{
+    if (Pstream::parRun() && distribute)
+    {
+        const label preDistributionSize = vertices.size();
+
+        List<Foam::point> pts(preDistributionSize);
+
+        forAll(vertices, vI)
+        {
+            const Foam::point& pt = topoint(vertices[vI].point());
+
+            pts[vI] = pt;
+        }
+
+        // Distribute points to their appropriate processor
+        autoPtr<mapDistribute> map
+        (
+            decomposition_().distributePoints(pts)
+        );
+
+        map().distribute(vertices);
+
+        forAll(vertices, vI)
+        {
+            vertices[vI].procIndex() = Pstream::myProcNo();
+        }
+    }
+
+    rangeInsertWithInfo
+    (
+        vertices.begin(),
+        vertices.end(),
+        true
+    );
+}
+
+
+void Foam::conformalVoronoiMesh::insertSurfacePointPairs
+(
+    const pointIndexHitAndFeatureList& surfaceHits,
+    const fileName fName
+)
+{
+    DynamicList<Vb> pts(2.0*surfaceHits.size());
+
+    forAll(surfaceHits, i)
+    {
+        vectorField norm(1);
+
+        const pointIndexHit surfaceHit = surfaceHits[i].first();
+        const label featureIndex = surfaceHits[i].second();
+
+        allGeometry_[featureIndex].getNormal
+        (
+            List<pointIndexHit>(1, surfaceHit),
+            norm
+        );
+
+        const vector& normal = norm[0];
+
+        const Foam::point& surfacePt(surfaceHit.hitPoint());
+
+        if (geometryToConformTo_.isBaffle(featureIndex))
+        {
+            createBafflePointPair
+            (
+                pointPairDistance(surfacePt),
+                surfacePt,
+                normal,
+                pts
+            );
+        }
+        else
+        {
+            createPointPair
+            (
+                pointPairDistance(surfacePt),
+                surfacePt,
+                normal,
+                pts
+            );
+        }
+    }
+
+    insertPoints(pts, true);
+
+    if (cvMeshControls().objOutput() && fName != fileName::null)
+    {
+        writePoints(fName, pts);
+    }
+}
+
+
+void Foam::conformalVoronoiMesh::insertEdgePointGroups
+(
+    const pointIndexHitAndFeatureList& edgeHits,
+    const fileName fName
+)
+{
+    DynamicList<Vb> pts(3.0*edgeHits.size());
+
+    forAll(edgeHits, i)
+    {
+        const extendedFeatureEdgeMesh& feMesh
+        (
+            geometryToConformTo_.features()[edgeHits[i].second()]
+        );
+
+        createEdgePointGroup(feMesh, edgeHits[i].first(), pts);
+    }
+
+    pts.shrink();
+
+    insertPoints(pts, true);
+
+    if (cvMeshControls().objOutput() && fName != fileName::null)
+    {
+        writePoints(fName, pts);
+    }
+}
+
+
+bool Foam::conformalVoronoiMesh::nearFeaturePt(const Foam::point& pt) const
+{
+    scalar exclusionRangeSqr = featurePointExclusionDistanceSqr(pt);
+
+    pointIndexHit info;
+    label featureHit;
+
+    geometryToConformTo_.findFeaturePointNearest
+    (
+        pt,
+        exclusionRangeSqr,
+        info,
+        featureHit
+    );
+
+    return info.hit();
+}
+
+
+void Foam::conformalVoronoiMesh::insertInitialPoints()
+{
+    Info<< nl << "Inserting initial points" << endl;
+
+    timeCheck("Before initial points call");
+
+    List<Point> initPts = initialPointsMethod_->initialPoints();
+
+    timeCheck("After initial points call");
+
+    // Assume that the initial points method made the correct decision for
+    // which processor each point should be on, so give distribute = false
+    insertInternalPoints(initPts);
+}
+
+
+Foam::scalar Foam::conformalVoronoiMesh::calculateLoadUnbalance() const
+{
+    label nRealVertices = 0;
+
+    for
+    (
+        Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        ++vit
+    )
+    {
+        // Only store real vertices that are not feature vertices
+        if (vit->real() && !vit->featurePoint())
+        {
+            nRealVertices++;
+        }
+    }
+
+    scalar globalNRealVertices = returnReduce
+    (
+        nRealVertices,
+        sumOp<label>()
+    );
+
+    scalar unbalance = returnReduce
+    (
+        mag(1.0 - nRealVertices/(globalNRealVertices/Pstream::nProcs())),
+        maxOp<scalar>()
+    );
+
+    Info<< "    Processor unbalance " << unbalance << endl;
+
+    return unbalance;
+}
+
+
+bool Foam::conformalVoronoiMesh::distributeBackground()
+{
+    if (!Pstream::parRun())
+    {
+        return false;
+    }
+
+    Info<< nl << "Redistributing points" << endl;
+
+    timeCheck("Before distribute");
+
+    label iteration = 0;
+
+    scalar previousLoadUnbalance = 0;
+
+    while (true)
+    {
+        scalar maxLoadUnbalance = calculateLoadUnbalance();
+
+        if
+        (
+            maxLoadUnbalance <= cvMeshControls().maxLoadUnbalance()
+         || maxLoadUnbalance <= previousLoadUnbalance
+        )
+        {
+            // If this is the first iteration, return false, if it was a
+            // subsequent one, return true;
+            return iteration != 0;
+        }
+
+        previousLoadUnbalance = maxLoadUnbalance;
+
+        Info<< "    Total number of vertices before redistribution "
+            << returnReduce(label(number_of_vertices()), sumOp<label>())
+            << endl;
+
+        const fvMesh& bMesh = decomposition_().mesh();
+
+        volScalarField cellWeights
+        (
+            IOobject
+            (
+                "cellWeights",
+                bMesh.time().timeName(),
+                bMesh,
+                IOobject::NO_READ,
+                IOobject::NO_WRITE
+            ),
+            bMesh,
+            dimensionedScalar("weight", dimless, 1e-2),
+            zeroGradientFvPatchScalarField::typeName
+        );
+
+        meshSearch cellSearch(bMesh, polyMesh::FACEPLANES);
+
+        labelList cellVertices(bMesh.nCells(), 0);
+
+        for
+        (
+            Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
+            vit != finite_vertices_end();
+            ++vit
+        )
+        {
+            // Only store real vertices that are not feature vertices
+            if (vit->real() && !vit->featurePoint())
+            {
+                pointFromPoint v = topoint(vit->point());
+
+                label cellI = cellSearch.findCell(v);
+
+                if (cellI == -1)
+                {
+//                     Pout<< "findCell conformalVoronoiMesh::distribute "
+//                         << "findCell "
+//                         << vit->type() << " "
+//                         << vit->index() << " "
+//                         << v << " "
+//                         << cellI
+//                         << " find nearest cellI ";
+
+                    cellI = cellSearch.findNearestCell(v);
+                }
+
+                cellVertices[cellI]++;
+            }
+        }
+
+        forAll(cellVertices, cI)
+        {
+            // Give a small but finite weight for empty cells.  Some
+            // decomposition methods have difficulty with integer overflows in
+            // the sum of the normalised weight field.
+            cellWeights.internalField()[cI] = max
+            (
+                cellVertices[cI],
+                1e-2
+            );
+        }
+
+        autoPtr<mapDistributePolyMesh> mapDist = decomposition_().distribute
+        (
+            cellWeights
+        );
+
+        cellShapeControl_.shapeControlMesh().distribute(decomposition_);
+
+        distribute();
+
+        timeCheck("After distribute");
+
+        iteration++;
+    }
+
+    return true;
+}
+
+
+void Foam::conformalVoronoiMesh::distribute()
+{
+    if (!Pstream::parRun())
+    {
+        return ;
+    }
+
+    autoPtr<mapDistribute> mapDist =
+        DistributedDelaunayMesh<Delaunay>::distribute(decomposition_());
+
+    DynamicList<Foam::point> points(number_of_vertices());
+    DynamicList<Foam::indexedVertexEnum::vertexType> types
+    (
+        number_of_vertices()
+    );
+    DynamicList<scalar> sizes(number_of_vertices());
+    DynamicList<tensor> alignments(number_of_vertices());
+
+    for
+    (
+        Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        ++vit
+    )
+    {
+        if (vit->real())
+        {
+            points.append(topoint(vit->point()));
+            types.append(vit->type());
+            sizes.append(vit->targetCellSize());
+            alignments.append(vit->alignment());
+        }
+    }
+
+    mapDist().distribute(points);
+    mapDist().distribute(types);
+    mapDist().distribute(sizes);
+    mapDist().distribute(alignments);
+
+    // Reset the entire tessellation
+    DelaunayMesh<Delaunay>::reset();
+
+    Info<< nl << "    Inserting distributed tessellation" << endl;
+
+    // Internal points have to be inserted first
+
+    DynamicList<Vb> verticesToInsert(points.size());
+
+    forAll(points, pI)
+    {
+        verticesToInsert.append
+        (
+            Vb
+            (
+                toPoint<Point>(points[pI]),
+                -1,
+                types[pI],
+                Pstream::myProcNo()
+            )
+        );
+
+        verticesToInsert.last().targetCellSize() = sizes[pI];
+        verticesToInsert.last().alignment() = alignments[pI];
+    }
+
+    this->rangeInsertWithInfo
+    (
+        verticesToInsert.begin(),
+        verticesToInsert.end(),
+        true
+    );
+
+    Info<< "    Total number of vertices after redistribution "
+        << returnReduce
+           (
+               label(number_of_vertices()), sumOp<label>()
+           )
+        << endl;
+}
+
+
+void Foam::conformalVoronoiMesh::buildCellSizeAndAlignmentMesh()
+{
+    cellShapeControl_.initialMeshPopulation(decomposition_);
+
+    cellShapeControlMesh& cellSizeMesh = cellShapeControl_.shapeControlMesh();
+
+    if (Pstream::parRun())
+    {
+        cellSizeMesh.distribute(decomposition_);
+    }
+
+    label nMaxIter = readLabel
+    (
+        cvMeshControls().cvMeshDict().subDict("motionControl").lookup
+        (
+            "maxRefinementIterations"
+        )
+    );
+
+    Info<< "Maximum number of refinement iterations : " << nMaxIter << endl;
+
+    for (label i = 0; i < nMaxIter; ++i)
+    {
+//        label nRemoved = cellSizeMesh.removePoints();
+        label nRemoved = 0;
+        reduce(nRemoved, sumOp<label>());
+
+        label nAdded = cellShapeControl_.refineMesh(decomposition_);
+//        label nAdded = 0;
+        reduce(nAdded, sumOp<label>());
+
+        if (Pstream::parRun())
+        {
+            cellSizeMesh.distribute(decomposition_);
+        }
+
+        if (nRemoved + nAdded == 0)
+        {
+            break;
+        }
+
+        Info<< "    Iteration " << i
+            << " Added = " << nAdded << " points"
+            << ", Removed = " << nRemoved << " points"
+            << endl;
+    }
+
+    cellShapeControl_.smoothMesh();
+
+    Info<< "Background cell size and alignment mesh:" << endl;
+    cellSizeMesh.printInfo(Info);
+
+    if (cvMeshControls().objOutput())
+    {
+        cellSizeMesh.writeTriangulation();
+        cellSizeMesh.write();
+    }
+}
+
+
+void Foam::conformalVoronoiMesh::storeSizesAndAlignments()
+{
+    DynamicList<Point> storePts(number_of_vertices());
+
+    for
+    (
+        Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        vit++
+    )
+    {
+        if (vit->internalPoint())
+        {
+            storePts.append(vit->point());
+        }
+    }
+
+    storePts.shrink();
+
+    storeSizesAndAlignments(storePts);
+}
+
+
+void Foam::conformalVoronoiMesh::storeSizesAndAlignments
+(
+    const List<Point>& storePts
+)
+{
+//    timeCheck("Start of storeSizesAndAlignments");
+//
+//    Info << nl << "Store size and alignment" << endl;
+//
+//    sizeAndAlignmentLocations_.setSize(storePts.size());
+//
+//    storedSizes_.setSize(sizeAndAlignmentLocations_.size());
+//
+//    storedAlignments_.setSize(sizeAndAlignmentLocations_.size());
+//
+//    label i = 0;
+//
+//    //checkCellSizing();
+//
+//    for
+//    (
+//        List<Point>::const_iterator pit = storePts.begin();
+//        pit != storePts.end();
+//        ++pit
+//    )
+//    {
+//        pointFromPoint pt = topoint(*pit);
+//
+////        storedAlignments_[i] = requiredAlignment(pt);
+////
+////        storedSizes_[i] = cellShapeControls().cellSize(pt);
+//
+//        cellShapeControls().cellSizeAndAlignment
+//        (
+//            pt,
+//            storedSizes_[i],
+//            storedAlignments_[i]
+//        );
+//
+//        i++;
+//    }
+//
+//    timeCheck("Sizes and alignments calculated, build tree");
+//
+//    buildSizeAndAlignmentTree();
+//
+//    timeCheck("Size and alignment tree built");
+}
+
+
+void Foam::conformalVoronoiMesh::updateSizesAndAlignments
+(
+    const List<Point>& storePts
+)
+{
+    // This function is only used in serial, the background redistribution
+    // triggers this when unbalance is detected in parallel.
+
+    if
+    (
+        !Pstream::parRun()
+     && runTime_.run()
+     && runTime_.timeIndex()
+      % cvMeshControls().sizeAndAlignmentRebuildFrequency() == 0
+    )
+    {
+        storeSizesAndAlignments(storePts);
+
+        timeCheck("Updated sizes and alignments");
+    }
+}
+
+
+const Foam::indexedOctree<Foam::treeDataPoint>&
+Foam::conformalVoronoiMesh::sizeAndAlignmentTree() const
+{
+    if (sizeAndAlignmentTreePtr_.empty())
+    {
+        buildSizeAndAlignmentTree();
+    }
+
+    return sizeAndAlignmentTreePtr_();
+}
+
+
+void Foam::conformalVoronoiMesh::setVertexSizeAndAlignment()
+{
+//    Info<< nl << "Looking up target cell alignment and size" << endl;
+//
+//    const indexedOctree<treeDataPoint>& tree = sizeAndAlignmentTree();
+//
+//    for
+//    (
+//        Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
+//        vit != finite_vertices_end();
+//        vit++
+//    )
+//    {
+//        if
+//        (
+//            vit->internalOrBoundaryPoint()
+//         || vit->referredInternalOrBoundaryPoint()
+//        )
+//        {
+//            pointFromPoint pt = topoint(vit->point());
+//
+//            pointIndexHit info = tree.findNearest(pt, sqr(GREAT));
+//
+//            if (info.hit())
+//            {
+//                vit->alignment() = storedAlignments_[info.index()];
+//
+//                vit->targetCellSize() = storedSizes_[info.index()];
+//            }
+//            else
+//            {
+//                WarningIn
+//                (
+//                    "void "
+//                    "Foam::conformalVoronoiMesh::setVertexSizeAndAlignment()"
+//                )
+//                    << "Point " << pt << " did not find a nearest point "
+//                    << " for alignment and size lookup." << endl;
+//
+//                vit->alignment() = cellShapeControls().cellAlignment(pt);
+//
+//                vit->targetCellSize() = cellShapeControls().cellSize(pt);
+//            }
+//        }
+//    }
+
+    Info<< nl << "Calculating target cell alignment and size" << endl;
+
+    for
+    (
+        Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        vit++
+    )
+    {
+        if (vit->internalOrBoundaryPoint())
+        {
+            pointFromPoint pt = topoint(vit->point());
+
+            cellShapeControls().cellSizeAndAlignment
+            (
+                pt,
+                vit->targetCellSize(),
+                vit->alignment()
+            );
+
+            //vit->alignment() = tensor(1,0,0,0,1,0,0,0,1);
+            //vit->alignment() = requiredAlignment(pt);
+
+            //vit->targetCellSize() = cellShapeControls().cellSize(pt);
+        }
+    }
+}
+
+
+Foam::face Foam::conformalVoronoiMesh::buildDualFace
+(
+    const Delaunay::Finite_edges_iterator& eit
+) const
+{
+    Cell_circulator ccStart = incident_cells(*eit);
+    Cell_circulator cc1 = ccStart;
+    Cell_circulator cc2 = cc1;
+
+    // Advance the second circulator so that it always stays on the next
+    // cell around the edge;
+    cc2++;
+
+    DynamicList<label> verticesOnFace;
+
+    label nUniqueVertices = 0;
+
+    do
+    {
+        if
+        (
+            cc1->hasFarPoint() || cc2->hasFarPoint()
+         || is_infinite(cc1) || is_infinite(cc2)
+        )
+        {
+            Cell_handle c = eit->first;
+            Vertex_handle vA = c->vertex(eit->second);
+            Vertex_handle vB = c->vertex(eit->third);
+
+            drawDelaunayCell(Pout, cc1);
+            drawDelaunayCell(Pout, cc2);
+
+            FatalErrorIn("Foam::conformalVoronoiMesh::buildDualFace")
+                << "Dual face uses circumcenter defined by a "
+                << "Delaunay tetrahedron with no internal "
+                << "or boundary points.  Defining Delaunay edge ends: "
+                << topoint(vA->point()) << " "
+                << topoint(vB->point()) << nl
+                << exit(FatalError);
+        }
+
+        label cc1I = cc1->cellIndex();
+
+        label cc2I = cc2->cellIndex();
+
+        if (cc1I != cc2I)
+        {
+            if (findIndex(verticesOnFace, cc1I) == -1)
+            {
+                nUniqueVertices++;
+            }
+
+            verticesOnFace.append(cc1I);
+        }
+
+        cc1++;
+
+        cc2++;
+
+    } while (cc1 != ccStart);
+
+    verticesOnFace.shrink();
+
+    if (verticesOnFace.size() >= 3 && nUniqueVertices < 3)
+    {
+        // There are not enough unique vertices on this face to
+        // justify its size, it may have a form like:
+
+        // Vertices:
+        // A                                  B
+        // A                                  B
+
+        // Face:
+        // ABAB
+
+        // Setting the size to be below 3, so that it will not be
+        // created
+
+        verticesOnFace.setSize(nUniqueVertices);
+    }
+
+    return face(verticesOnFace);
+}
+
+
+Foam::label Foam::conformalVoronoiMesh::maxFilterCount
+(
+    const Delaunay::Finite_edges_iterator& eit
+) const
+{
+    Cell_circulator ccStart = incident_cells(*eit);
+    Cell_circulator cc = ccStart;
+
+    label maxFC = 0;
+
+    do
+    {
+        if (cc->hasFarPoint())
+        {
+            Cell_handle c = eit->first;
+            Vertex_handle vA = c->vertex(eit->second);
+            Vertex_handle vB = c->vertex(eit->third);
+
+            FatalErrorIn("Foam::conformalVoronoiMesh::buildDualFace")
+                << "Dual face uses circumcenter defined by a "
+                << "Delaunay tetrahedron with no internal "
+                << "or boundary points.  Defining Delaunay edge ends: "
+                << topoint(vA->point()) << " "
+                << topoint(vB->point()) << nl
+                << exit(FatalError);
+        }
+
+        if (cc->filterCount() > maxFC)
+        {
+            maxFC = cc->filterCount();
+        }
+
+        cc++;
+
+    } while (cc != ccStart);
+
+    return maxFC;
+}
+
+
+bool Foam::conformalVoronoiMesh::ownerAndNeighbour
+(
+    Vertex_handle vA,
+    Vertex_handle vB,
+    label& owner,
+    label& neighbour
+) const
+{
+    bool reverse = false;
+
+    owner = -1;
+    neighbour = -1;
+
+    label dualCellIndexA = vA->index();
+
+    if (!vA->internalOrBoundaryPoint() || vA->referred())
+    {
+        dualCellIndexA = -1;
+    }
+
+    label dualCellIndexB = vB->index();
+
+    if (!vB->internalOrBoundaryPoint() || vB->referred())
+    {
+        dualCellIndexB = -1;
+    }
+
+    if (dualCellIndexA == -1 && dualCellIndexB == -1)
+    {
+        FatalErrorIn
+        (
+            "bool Foam::conformalVoronoiMesh::ownerAndNeighbour"
+            "("
+                "Vertex_handle vA,"
+                "Vertex_handle vB,"
+                "label& owner,"
+                "label& neighbour"
+            ") const"
+        )
+            << "Attempting to create a face joining "
+            << "two unindexed dual cells "
+            << exit(FatalError);
+    }
+    else if (dualCellIndexA == -1 || dualCellIndexB == -1)
+    {
+        // boundary face, find which is the owner
+
+        if (dualCellIndexA == -1)
+        {
+            owner = dualCellIndexB;
+
+            reverse = true;
+        }
+        else
+        {
+            owner = dualCellIndexA;
+        }
+    }
+    else
+    {
+        // internal face, find the lower cell to be the owner
+
+        if (dualCellIndexB > dualCellIndexA)
+        {
+            owner = dualCellIndexA;
+            neighbour = dualCellIndexB;
+        }
+        else
+        {
+            owner = dualCellIndexB;
+            neighbour = dualCellIndexA;
+
+            // reverse face order to correctly orientate normal
+            reverse = true;
+        }
+    }
+
+    return reverse;
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::conformalVoronoiMesh::conformalVoronoiMesh
+(
+    const Time& runTime,
+    const dictionary& cvMeshDict
+)
+:
+    DistributedDelaunayMesh<Delaunay>(),
+    runTime_(runTime),
+    rndGen_(64293*Pstream::myProcNo()),
+    cvMeshControls_(cvMeshDict),
+    allGeometry_
+    (
+        IOobject
+        (
+            "cvSearchableSurfaces",
+            runTime_.constant(),
+            "triSurface",
+            runTime_,
+            IOobject::MUST_READ,
+            IOobject::NO_WRITE
+        ),
+        cvMeshDict.subDict("geometry")
+    ),
+    geometryToConformTo_
+    (
+        runTime_,
+        rndGen_,
+        allGeometry_,
+        cvMeshDict.subDict("surfaceConformation")
+    ),
+    cellShapeControl_
+    (
+        runTime_,
+        cvMeshDict.subDict("motionControl"),
+        allGeometry_,
+        geometryToConformTo_
+    ),
+    limitBounds_(),
+    featureVertices_(),
+    featurePointLocations_(),
+    edgeLocationTreePtr_(),
+    surfacePtLocationTreePtr_(),
+    sizeAndAlignmentLocations_(),
+    storedSizes_(),
+    storedAlignments_(),
+    sizeAndAlignmentTreePtr_(),
+    surfaceConformationVertices_(),
+    initialPointsMethod_
+    (
+        initialPointsMethod::New
+        (
+            cvMeshDict.subDict("initialPoints"),
+            *this
+        )
+    ),
+    relaxationModel_
+    (
+        relaxationModel::New
+        (
+            cvMeshDict.subDict("motionControl"),
+            runTime_
+        )
+    ),
+    faceAreaWeightModel_
+    (
+        faceAreaWeightModel::New
+        (
+            cvMeshDict.subDict("motionControl")
+        )
+    ),
+    decomposition_()
+{
+    if (cvMeshControls().objOutput())
+    {
+        geometryToConformTo_.writeFeatureObj("cvMesh");
+    }
+
+    if (Pstream::parRun())
+    {
+        decomposition_.reset
+        (
+            new backgroundMeshDecomposition
+            (
+                runTime_,
+                rndGen_,
+                geometryToConformTo_,
+                cvMeshDict.subDict("backgroundMeshDecomposition")
+            )
+        );
+    }
+
+    buildCellSizeAndAlignmentMesh();
+
+    insertInitialPoints();
+
+    insertFeaturePoints();
+
+    setVertexSizeAndAlignment();
+
+    cellSizeMeshOverlapsBackground();
+
+    // Improve the guess that the backgroundMeshDecomposition makes with the
+    // initial positions.  Use before building the surface conformation to
+    // better balance the surface conformation load.
+    distributeBackground();
+
+    buildSurfaceConformation();
+
+    // The introduction of the surface conformation may have distorted the
+    // balance of vertices, distribute if necessary.
+    distributeBackground();
+
+    if (Pstream::parRun())
+    {
+        sync(decomposition_().procBounds());
+    }
+
+    // Do not store the surface conformation until after it has been
+    // (potentially) redistributed.
+    storeSurfaceConformation();
+
+    // Use storeSizesAndAlignments with no feed points because all background
+    // points may have been distributed.
+    storeSizesAndAlignments();
+
+    // Report any Delaunay vertices that do not think that they are in the
+    // domain the processor they are on.
+    // reportProcessorOccupancy();
+
+    cellSizeMeshOverlapsBackground();
+
+    printVertexInfo();
+
+    if (cvMeshControls().objOutput())
+    {
+        writePoints
+        (
+            "internalPoints_" + runTime_.timeName() + ".obj",
+            Foam::indexedVertexEnum::vtUnassigned,
+            Foam::indexedVertexEnum::vtExternalFeaturePoint
+        );
+    }
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::conformalVoronoiMesh::~conformalVoronoiMesh()
+{}
+
+
+// * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * * //
+
+void Foam::conformalVoronoiMesh::move()
+{
+    timeCheck("Start of move");
+
+    scalar relaxation = relaxationModel_->relaxation();
+
+    Info<< nl << "Relaxation = " << relaxation << endl;
+
+    pointField dualVertices(number_of_finite_cells());
+
+    this->resetCellCount();
+
+    // Find the dual point of each tetrahedron and assign it an index.
+    for
+    (
+        Delaunay::Finite_cells_iterator cit = finite_cells_begin();
+        cit != finite_cells_end();
+        ++cit
+    )
+    {
+        cit->cellIndex() = Cb::ctUnassigned;
+
+        if (cit->anyInternalOrBoundaryDualVertex())
+        {
+            cit->cellIndex() = getNewCellIndex();
+
+            dualVertices[cit->cellIndex()] = cit->dual();
+        }
+
+        if (cit->hasFarPoint())
+        {
+            cit->cellIndex() = Cb::ctFar;
+        }
+    }
+
+    dualVertices.setSize(cellCount());
+
+    setVertexSizeAndAlignment();
+
+    timeCheck("Determined sizes and alignments");
+
+    Info<< nl << "Determining vertex displacements" << endl;
+
+    vectorField cartesianDirections(3);
+
+    cartesianDirections[0] = vector(1, 0, 0);
+    cartesianDirections[1] = vector(0, 1, 0);
+    cartesianDirections[2] = vector(0, 0, 1);
+
+    vectorField displacementAccumulator
+    (
+        number_of_vertices(),
+        vector::zero
+    );
+
+    PackedBoolList pointToBeRetained
+    (
+        number_of_vertices(),
+        true
+    );
+
+    DynamicList<Point> pointsToInsert(number_of_vertices());
+
+    for
+    (
+        Delaunay::Finite_edges_iterator eit = finite_edges_begin();
+        eit != finite_edges_end();
+        ++eit
+    )
+    {
+        Cell_handle c = eit->first;
+        Vertex_handle vA = c->vertex(eit->second);
+        Vertex_handle vB = c->vertex(eit->third);
+
+        if
+        (
+            (
+                vA->internalPoint() && !vA->referred()
+             && vB->internalOrBoundaryPoint()
+            )
+         || (
+                vB->internalPoint() && !vB->referred()
+             && vA->internalOrBoundaryPoint()
+            )
+        )
+        {
+            pointFromPoint dVA = topoint(vA->point());
+            pointFromPoint dVB = topoint(vB->point());
+
+            Field<vector> alignmentDirsA
+            (
+                vA->alignment().T() & cartesianDirections
+            );
+            Field<vector> alignmentDirsB
+            (
+                vB->alignment().T() & cartesianDirections
+            );
+
+            Field<vector> alignmentDirs(3);
+
+            forAll(alignmentDirsA, aA)
+            {
+                const vector& a = alignmentDirsA[aA];
+
+                scalar maxDotProduct = 0.0;
+
+                forAll(alignmentDirsB, aB)
+                {
+                    const vector& b = alignmentDirsB[aB];
+
+                    const scalar dotProduct = a & b;
+
+                    if (mag(dotProduct) > maxDotProduct)
+                    {
+                        maxDotProduct = mag(dotProduct);
+
+                        alignmentDirs[aA] = a + sign(dotProduct)*b;
+
+                        alignmentDirs[aA] /= mag(alignmentDirs[aA]);
+                    }
+                }
+            }
+
+            vector rAB = dVA - dVB;
+
+            scalar rABMag = mag(rAB);
+
+            if (rABMag < SMALL)
+            {
+                // Removal of close points
+
+                if
+                (
+                    vA->internalPoint() && !vA->referred()
+                 && vB->internalPoint() && !vB->referred()
+                )
+                {
+                    // Only insert a point at the midpoint of
+                    // the short edge if neither attached
+                    // point has already been identified to be
+                    // removed.
+
+                    if
+                    (
+                        pointToBeRetained[vA->index()] == true
+                     && pointToBeRetained[vB->index()] == true
+                    )
+                    {
+                        pointsToInsert.append
+                        (
+                            toPoint<Point>(0.5*(dVA + dVB))
+                        );
+                    }
+                }
+
+                if (vA->internalPoint() && !vA->referred())
+                {
+                    pointToBeRetained[vA->index()] = false;
+                }
+
+                if (vB->internalPoint() && !vB->referred())
+                {
+                    pointToBeRetained[vB->index()] = false;
+                }
+
+                // Do not consider this Delaunay edge any further
+
+                continue;
+            }
+
+            forAll(alignmentDirs, aD)
+            {
+                vector& alignmentDir = alignmentDirs[aD];
+
+                scalar dotProd = rAB & alignmentDir;
+
+                if (dotProd < 0)
+                {
+                    // swap the direction of the alignment so that has the
+                    // same sense as rAB
+                    alignmentDir *= -1;
+                    dotProd *= -1;
+                }
+
+                const scalar alignmentDotProd = dotProd/rABMag;
+
+                if
+                (
+                    alignmentDotProd
+                  > cvMeshControls().cosAlignmentAcceptanceAngle()
+                )
+                {
+                    scalar targetCellSize = averageCellSize(vA, vB);
+
+                    scalar targetFaceArea = sqr(targetCellSize);
+
+                    const vector originalAlignmentDir = alignmentDir;
+
+                    // Update cell size and face area
+                    cellShapeControls().aspectRatio().updateCellSizeAndFaceArea
+                    (
+                        alignmentDir,
+                        targetFaceArea,
+                        targetCellSize
+                    );
+
+                    // Vector to move end points around middle of vector
+                    // to align edge (i.e. dual face normal) with alignment
+                    // directions.
+                    vector delta = alignmentDir - 0.5*rAB;
+
+                    face dualFace = buildDualFace(eit);
+
+//                    Pout<< dualFace << endl;
+//                    Pout<< "    " << vA->info() << endl;
+//                    Pout<< "    " << vB->info() << endl;
+
+                    const scalar faceArea = dualFace.mag(dualVertices);
+
+                    // Update delta vector
+                    cellShapeControls().aspectRatio().updateDeltaVector
+                    (
+                        originalAlignmentDir,
+                        targetCellSize,
+                        rABMag,
+                        delta
+                    );
+
+                    if (targetFaceArea == 0)
+                    {
+                        Pout<< vA->info() << vB->info();
+
+                        Cell_handle ch = locate(vA->point());
+                        if (is_infinite(ch))
+                        {
+                            Pout<< "vA " << vA->targetCellSize() << endl;
+                        }
+
+                        ch = locate(vB->point());
+                        if (is_infinite(ch))
+                        {
+                            Pout<< "vB " << vB->targetCellSize() << endl;
+                        }
+                    }
+
+                    delta *= faceAreaWeightModel_->faceAreaWeight
+                    (
+                        faceArea/targetFaceArea
+                    );
+
+                    if
+                    (
+                        (
+                            (vA->internalPoint() && vB->internalPoint())
+                         && (!vA->referred() || !vB->referred())
+//                         ||
+//                            (
+//                                vA->referredInternalPoint()
+//                             && vB->referredInternalPoint()
+//                            )
+                        )
+                     && rABMag
+                      > cvMeshControls().insertionDistCoeff()*targetCellSize
+                     && faceArea
+                      > cvMeshControls().faceAreaRatioCoeff()*targetFaceArea
+                     && alignmentDotProd
+                      > cvMeshControls().cosInsertionAcceptanceAngle()
+                    )
+                    {
+                        // Point insertion
+                        if
+                        (
+                            !geometryToConformTo_.findSurfaceAnyIntersection
+                            (
+                                dVA,
+                                dVB
+                            )
+                        )
+                        {
+                            const Foam::point& newPt = 0.5*(dVA + dVB);
+
+                            if (positionOnThisProc(newPt))
+                            {
+                                // Prevent insertions spanning surfaces
+                                pointsToInsert.append(toPoint<Point>(newPt));
+                            }
+                        }
+                    }
+                    else if
+                    (
+                        (
+                            (vA->internalPoint() && !vA->referred())
+                         || (vB->internalPoint() && !vB->referred())
+                        )
+                     && rABMag
+                      < cvMeshControls().removalDistCoeff()
+                       *targetCellSize
+                    )
+                    {
+                        // Point removal
+                        if
+                        (
+                            vA->internalPoint() && !vA->referred()
+                         && vB->internalPoint() && !vB->referred()
+                        )
+                        {
+                            // Only insert a point at the midpoint of
+                            // the short edge if neither attached
+                            // point has already been identified to be
+                            // removed.
+                            if
+                            (
+                                pointToBeRetained[vA->index()] == true
+                             && pointToBeRetained[vB->index()] == true
+                            )
+                            {
+                                pointsToInsert.append
+                                (
+                                    toPoint<Point>(0.5*(dVA + dVB))
+                                );
+                            }
+                        }
+
+                        if (vA->internalPoint() && !vA->referred())
+                        {
+                            pointToBeRetained[vA->index()] = false;
+                        }
+
+                        if (vB->internalPoint() && !vB->referred())
+                        {
+                            pointToBeRetained[vB->index()] = false;
+                        }
+                    }
+                    else
+                    {
+                        if (vA->internalPoint() && !vA->referred())
+                        {
+                            displacementAccumulator[vA->index()] += delta;
+                        }
+
+                        if (vB->internalPoint() && !vB->referred())
+                        {
+                            displacementAccumulator[vB->index()] -= delta;
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    Info<< "Limit displacements" << endl;
+
+    // Limit displacements that pierce, or get too close to the surface
+    for
+    (
+        Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        ++vit
+    )
+    {
+        if (vit->internalPoint() && !vit->referred())
+        {
+            if (pointToBeRetained[vit->index()] == true)
+            {
+                limitDisplacement
+                (
+                    vit,
+                    displacementAccumulator[vit->index()]
+                );
+            }
+        }
+    }
+
+    vector totalDisp = gSum(displacementAccumulator);
+    scalar totalDist = gSum(mag(displacementAccumulator));
+
+    displacementAccumulator *= relaxation;
+
+    Info<< "Sum displacements" << endl;
+
+    for
+    (
+        Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        ++vit
+    )
+    {
+        if (vit->internalPoint() && !vit->referred())
+        {
+            if (pointToBeRetained[vit->index()] == true)
+            {
+                // Convert vit->point() to FOAM vector (double) to do addition,
+                // avoids memory increase because a record of the constructions
+                // would be kept otherwise.
+                // See cgal-discuss@lists-sop.inria.fr:
+                // "Memory issue with openSUSE 11.3, exact kernel, adding
+                //  points/vectors"
+                // 14/1/2011.
+                // Only necessary if using an exact constructions kernel
+                // (extended precision)
+
+                pointsToInsert.append
+                (
+                    toPoint<Point>
+                    (
+                        topoint(vit->point())
+                      + displacementAccumulator[vit->index()]
+                    )
+                );
+            }
+        }
+    }
+
+    pointsToInsert.shrink();
+
+    // Save displacements to file.
+    if (cvMeshControls().objOutput() && runTime_.outputTime())
+    {
+        Pout<< "Writing point displacement vectors to file." << endl;
+        OFstream str("displacements_" + runTime_.timeName() + ".obj");
+
+        for
+        (
+            Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
+            vit != finite_vertices_end();
+            ++vit
+        )
+        {
+            if (vit->internalPoint() && !vit->referred())
+            {
+                if (pointToBeRetained[vit->index()] == true)
+                {
+                    meshTools::writeOBJ(str, topoint(vit->point()));
+
+                    str << "vn "
+                        << displacementAccumulator[vit->index()][0] << " "
+                        << displacementAccumulator[vit->index()][1] << " "
+                        << displacementAccumulator[vit->index()][2] << " "
+                        << endl;
+                }
+            }
+        }
+    }
+
+    // Remove the entire tessellation
+    DelaunayMesh<Delaunay>::reset();
+
+    timeCheck("Displacement calculated");
+
+    Info<< nl << "Inserting displaced tessellation" << endl;
+
+    insertInternalPoints(pointsToInsert, true);
+
+    reinsertFeaturePoints(true);
+
+    // Remove internal points that have been inserted outside the surface.
+//    label internalPtIsOutside = 0;
+//
+//    for
+//    (
+//        Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
+//        vit != finite_vertices_end();
+//        ++vit
+//    )
+//    {
+//        if (vit->internalPoint() && !vit->referred())
+//        {
+//            bool inside = geometryToConformTo_.inside
+//            (
+//                topoint(vit->point())
+//            );
+//
+//            if (!inside)
+//            {
+//                remove(vit);
+//                internalPtIsOutside++;
+//            }
+//        }
+//    }
+//
+//    Info<< "    " << internalPtIsOutside
+//        << " internal points were inserted outside the domain. "
+//        << "They have been removed." << endl;
+
+    // Fix points that have not been significantly displaced
+//    for
+//    (
+//        Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
+//        vit != finite_vertices_end();
+//        ++vit
+//    )
+//    {
+//        if (vit->internalPoint())
+//        {
+//            if
+//            (
+//                mag(displacementAccumulator[vit->index()])
+//              < 0.1*targetCellSize(topoint(vit->point()))
+//            )
+//            {
+//                vit->setVertexFixed();
+//            }
+//        }
+//    }
+
+    timeCheck("Internal points inserted");
+
+    {
+        // Check that no index is shared between any of the local points
+        labelHashSet usedIndices;
+        for
+        (
+            Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
+            vit != finite_vertices_end();
+            ++vit
+        )
+        {
+            if (!vit->referred() && !usedIndices.insert(vit->index()))
+            {
+                FatalErrorIn("Foam::conformalVoronoiMesh::move()")
+                    << "Index already used! Could not insert: " << nl
+                    << vit->info()
+                    << abort(FatalError);
+            }
+        }
+    }
+
+    conformToSurface();
+
+    if (cvMeshControls().objOutput())
+    {
+        writePoints
+        (
+            "internalPoints_" + runTime_.timeName() + ".obj",
+            Foam::indexedVertexEnum::vtInternal
+        );
+    }
+
+    if (cvMeshControls().objOutput() && runTime_.outputTime())
+    {
+        writeBoundaryPoints("boundaryPoints_" + runTime_.timeName() + ".obj");
+    }
+
+    timeCheck("After conformToSurface");
+
+    printVertexInfo();
+
+    // Write the intermediate mesh, do not filter the dual faces.
+    if (runTime_.outputTime())
+    {
+        writeMesh(runTime_.timeName());
+    }
+
+    updateSizesAndAlignments(pointsToInsert);
+
+    Info<< nl
+        << "Total displacement = " << totalDisp << nl
+        << "Total distance = " << totalDist << nl
+        << endl;
+}
+
+
+bool Foam::conformalVoronoiMesh::positionOnThisProc
+(
+    const Foam::point& pt
+) const
+{
+    if (Pstream::parRun())
+    {
+        return decomposition_().positionOnThisProcessor(pt);
+    }
+
+    return true;
+}
+
+
+Foam::boolList Foam::conformalVoronoiMesh::positionOnThisProc
+(
+    const Foam::List<Foam::point>& pts
+) const
+{
+    if (Pstream::parRun())
+    {
+        return decomposition_().positionOnThisProcessor(pts);
+    }
+
+    return boolList(pts.size(), true);
+}
+
+
+Foam::labelList Foam::conformalVoronoiMesh::positionProc
+(
+    const Foam::List<Foam::point>& pts
+) const
+{
+    if (!Pstream::parRun())
+    {
+        return labelList(pts.size(), -1);
+    }
+
+    return decomposition_().processorPosition(pts);
+}
+
+
+Foam::List<Foam::List<Foam::pointIndexHit> >
+Foam::conformalVoronoiMesh::intersectsProc
+(
+    const List<Foam::point>& starts,
+    const List<Foam::point>& ends
+) const
+{
+    if (!Pstream::parRun())
+    {
+        return List<List<pointIndexHit> >(starts.size());
+    }
+
+    return decomposition_().intersectsProcessors(starts, ends, false);
+}
+
+
+//Foam::labelListList Foam::conformalVoronoiMesh::overlapsProc
+//(
+//    const List<Foam::point>& centres,
+//    const List<scalar>& radiusSqrs
+//) const
+//{
+//    if (!Pstream::parRun())
+//    {
+//        return labelListList(centres.size(), labelList(0));
+//    }
+//
+////    DynamicList<Foam::point> pts(number_of_vertices());
+//
+////    for
+////    (
+////        Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
+////        vit != finite_vertices_end();
+////        vit++
+////    )
+////    {
+////        pts.append(topoint(vit->point()));
+////    }
+////
+////    dynamicIndexedOctree<dynamicTreeDataPoint> vertexOctree
+////    (
+////        dynamicTreeDataPoint(pts),
+////        treeBoundBox(min(pts), max(pts)),
+////        10, // maxLevel
+////        10, // leafSize
+////        3.0 // duplicity
+////    );
+//
+//    return decomposition_().overlapsProcessors
+//    (
+//        centres,
+//        radiusSqrs,
+//        *this,
+//        false//,
+////        vertexOctree
+//    );
+//}
+
+
+void Foam::conformalVoronoiMesh::checkCoPlanarCells() const
+{
+    typedef CGAL::Exact_predicates_exact_constructions_kernel   Kexact;
+    typedef CGAL::Point_3<Kexact>                               PointExact;
+
+    if (!is_valid())
+    {
+        Pout<< "Triangulation is invalid!" << endl;
+    }
+
+    OFstream str("badCells.obj");
+
+    label badCells = 0;
+
+    for
+    (
+        Delaunay::Finite_cells_iterator cit = finite_cells_begin();
+        cit != finite_cells_end();
+        ++cit
+    )
+    {
+        const scalar quality = cvMeshChecks::coplanarTet(cit, 1e-16);
+
+        if (quality == 0)
+        {
+            Pout<< "COPLANAR: " << cit->info() << nl
+                << "    quality = " << quality << nl
+                << "    dual    = " << topoint(cit->dual()) << endl;
+
+            drawDelaunayCell(str, cit, badCells++);
+
+            FixedList<PointExact, 4> cellVerticesExact(PointExact(0,0,0));
+            forAll(cellVerticesExact, vI)
+            {
+                cellVerticesExact[vI] = PointExact
+                (
+                    cit->vertex(vI)->point().x(),
+                    cit->vertex(vI)->point().y(),
+                    cit->vertex(vI)->point().z()
+                );
+            }
+
+            PointExact synchronisedDual = CGAL::circumcenter<Kexact>
+            (
+                cellVerticesExact[0],
+                cellVerticesExact[1],
+                cellVerticesExact[2],
+                cellVerticesExact[3]
+            );
+
+            Foam::point exactPt
+            (
+                CGAL::to_double(synchronisedDual.x()),
+                CGAL::to_double(synchronisedDual.y()),
+                CGAL::to_double(synchronisedDual.z())
+            );
+
+            Info<< "inexact = " << cit->dual() << nl
+                << "exact   = " << exactPt << endl;
+        }
+    }
+
+    Pout<< "There are " << badCells << " bad cells out of "
+        << number_of_finite_cells() << endl;
+
+
+    label nNonGabriel = 0;
+    for
+    (
+        Delaunay::Finite_facets_iterator fit = finite_facets_begin();
+        fit != finite_facets_end();
+        ++fit
+    )
+    {
+        if (!is_Gabriel(*fit))
+        {
+            nNonGabriel++;//Pout<< "Non-gabriel face" << endl;
+        }
+    }
+
+    Pout<< "There are " << nNonGabriel << " non-Gabriel faces out of "
+        << number_of_finite_facets() << endl;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.H
new file mode 100644
index 0000000000000000000000000000000000000000..912a426dd1e5a55b6f367062233e48709f31ee23
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.H
@@ -0,0 +1,1197 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012-2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::conformalVoronoiMesh
+
+Description
+
+SourceFiles
+    conformalVoronoiMeshI.H
+    conformalVoronoiMesh.C
+    conformalVoronoiMeshIO.C
+    conformalVoronoiMeshConformToSurface.C
+    conformalVoronoiMeshFeaturePoints.C
+    conformalVoronoiMeshFeaturePointSpecialisations.C
+    conformalVoronoiMeshCalcDualMesh.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef conformalVoronoiMesh_H
+#define conformalVoronoiMesh_H
+
+#include "CGALTriangulation3Ddefs.H"
+#include "uint.H"
+#include "ulong.H"
+#include "searchableSurfaces.H"
+#include "conformationSurfaces.H"
+#include "cellShapeControl.H"
+#include "cvControls.H"
+#include "DynamicList.H"
+#include "PackedBoolList.H"
+#include "Time.H"
+#include "polyMesh.H"
+#include "plane.H"
+#include "SortableList.H"
+#include "meshTools.H"
+#include "dynamicIndexedOctree.H"
+#include "dynamicTreeDataPoint.H"
+#include "indexedOctree.H"
+#include "treeDataPoint.H"
+#include "unitConversion.H"
+#include "transform.H"
+#include "volFields.H"
+#include "fvMesh.H"
+#include "labelPair.H"
+#include "HashSet.H"
+#include "memInfo.H"
+#include "point.H"
+#include "cellSet.H"
+#include "wallPolyPatch.H"
+#include "processorPolyPatch.H"
+#include "zeroGradientFvPatchFields.H"
+#include "globalIndex.H"
+#include "pointFeatureEdgesTypes.H"
+#include "pointConversion.H"
+#include "Tuple2.H"
+#include "DistributedDelaunayMesh.H"
+#include "tensorIOField.H"
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// Forward declaration of classes
+class initialPointsMethod;
+
+class relaxationModel;
+
+class faceAreaWeightModel;
+
+class backgroundMeshDecomposition;
+
+/*---------------------------------------------------------------------------*\
+                    Class conformalVoronoiMesh Declaration
+\*---------------------------------------------------------------------------*/
+
+class conformalVoronoiMesh
+:
+    public DistributedDelaunayMesh<Delaunay>
+{
+public:
+
+    enum reconformationMode
+    {
+        rmOff,   // Do not rebuild the surface conformation
+        rmOn
+    };
+
+    typedef Delaunay::Vertex_handle    Vertex_handle;
+    typedef Delaunay::Cell_handle      Cell_handle;
+    typedef Delaunay::Point            Point;
+
+    typedef List<DynamicList<Pair<labelPair> > > labelPairPairDynListList;
+
+    typedef Tuple2<pointIndexHit, label>         pointIndexHitAndFeature;
+    typedef List<pointIndexHitAndFeature>        pointIndexHitAndFeatureList;
+    typedef DynamicList<pointIndexHitAndFeature> pointIndexHitAndFeatureDynList;
+
+
+private:
+
+    // Static data
+
+        static const scalar tolParallel;
+
+        static const scalar searchConeAngle;
+
+        static const scalar searchAngleOppositeSurface;
+
+
+    // Private data
+
+        //- The time registry of the application
+        const Time& runTime_;
+
+        //- Random number generator
+        mutable Random rndGen_;
+
+        //- Controls for the conformal Voronoi meshing process
+        cvControls cvMeshControls_;
+
+        //- All geometry of the meshing process, including surfaces to be
+        //  conformed to and those to be used for refinement
+        searchableSurfaces allGeometry_;
+
+        //- The surfaces to conform to
+        conformationSurfaces geometryToConformTo_;
+
+        //- The cell shape control object
+        cellShapeControl cellShapeControl_;
+
+        //- Limiting bound box before infinity begins
+        treeBoundBox limitBounds_;
+
+        //- Store the feature constraining points to be reinserted after a
+        //  triangulation clear. Maintained with relative types and indices.
+        List<Vb> featureVertices_;
+
+        //- Storing the locations of all of the features to be conformed to.
+        //  Single pointField required by the featurePointTree.
+        pointField featurePointLocations_;
+
+        //- Search tree for edge point locations
+        mutable autoPtr<dynamicIndexedOctree<dynamicTreeDataPoint> >
+            edgeLocationTreePtr_;
+
+        mutable DynamicList<Foam::point> existingEdgeLocations_;
+
+        //- Search tree for surface point locations
+        mutable autoPtr<dynamicIndexedOctree<dynamicTreeDataPoint> >
+            surfacePtLocationTreePtr_;
+
+        mutable DynamicList<Foam::point> existingSurfacePtLocations_;
+
+        //- Store locations where the cell size and alignments will be
+        //  pre-calculated and looked up
+        pointField sizeAndAlignmentLocations_;
+
+        //- Stored cell size at sizeAndAlignmentLocations_
+        scalarField storedSizes_;
+
+        //- Stored alignments at sizeAndAlignmentLocations_
+        tensorField storedAlignments_;
+
+        //- Search tree for size and alignment lookup points
+        mutable autoPtr<indexedOctree<treeDataPoint> > sizeAndAlignmentTreePtr_;
+
+        //- Store the surface and feature edge conformation locations to be
+        //  reinserted
+        List<Vb> surfaceConformationVertices_;
+
+        //- Method for inserting initial points.  Runtime selectable.
+        autoPtr<initialPointsMethod> initialPointsMethod_;
+
+        //- Relaxation coefficient model.  Runtime selectable.
+        autoPtr<relaxationModel> relaxationModel_;
+
+        //-  Face area weight function.  Runtime selectable.
+        autoPtr<faceAreaWeightModel> faceAreaWeightModel_;
+
+        //- Background mesh decomposition, only available in parallel.
+        autoPtr<backgroundMeshDecomposition> decomposition_;
+
+
+    // Private Member Functions
+
+        inline scalar defaultCellSize() const;
+
+        //- Return the local target cell size at the given location.  Takes
+        //  boolean argument to allow speed-up of queries if the point is going
+        //  to be on a surface.
+        inline scalar targetCellSize(const Foam::point& pt) const;
+
+        //- Return the target cell size from that stored on a pair of
+        //  Delaunay vertices, using a mean function.
+        inline scalar averageCellSize
+        (
+            const Vertex_handle& vA,
+            const Vertex_handle& vB
+        ) const;
+
+        //- Return the target cell size from that stored on a pair of
+        //  Delaunay vertices, including the possibility that one of
+        //  them is not an internalOrBoundaryPoint, and so will not
+        //  have valid data.
+        inline scalar averageAnyCellSize
+        (
+            const Vertex_handle& vA,
+            const Vertex_handle& vB
+        ) const;
+
+        //- The average target cell size of a Delaunay facet, i.e., of
+        //  a dual edge
+        inline scalar averageAnyCellSize
+        (
+            const Delaunay::Finite_facets_iterator& fit
+        ) const;
+
+        //- Return the local point pair separation at the given location
+        inline scalar pointPairDistance(const Foam::point& pt) const;
+
+        //- Return the local mixed feature point placement distance
+        inline scalar mixedFeaturePointDistance(const Foam::point& pt) const;
+
+        //- Return the square of the local feature point exclusion distance
+        inline scalar featurePointExclusionDistanceSqr
+        (
+            const Foam::point& pt
+        ) const;
+
+        //- Return the square of the local feature edge exclusion distance
+        inline scalar featureEdgeExclusionDistanceSqr
+        (
+            const Foam::point& pt
+        ) const;
+
+        //- Return the square of the local surface point exclusion distance
+        inline scalar surfacePtExclusionDistanceSqr
+        (
+            const Foam::point& pt
+        ) const;
+
+        //- Return the square of the local surface search distance
+        inline scalar surfaceSearchDistanceSqr(const Foam::point& pt) const;
+
+        //- Return the local maximum surface protrusion distance
+        inline scalar maxSurfaceProtrusion(const Foam::point& pt) const;
+
+        //- Return the required cell size at the given location
+        scalar requiredSize(const Foam::point& pt) const;
+
+        //- Return the required alignment directions at the given location
+        tensor requiredAlignment(const Foam::point& pt) const;
+
+        //- Insert Point and return its auto-generated index
+        inline bool insertPoint
+        (
+            const Point& P,
+            const indexedVertexEnum::vertexType type
+        );
+
+        //- Insert Foam::point with specified index and type
+        inline bool insertPoint
+        (
+            const Foam::point& p,
+            const indexedVertexEnum::vertexType type
+        );
+
+        //- Insert Point with specified index, type and original processor
+        inline bool insertReferredPoint
+        (
+            const Point& P,
+            const label index,
+            const indexedVertexEnum::vertexType type,
+            const label processor
+        );
+
+        inline bool insertReferredPoint(const Vb& P);
+
+        //- Insert Foam::point with specified index, type and original processor
+        inline bool insertReferredPoint
+        (
+            const Foam::point& p,
+            const label index,
+            const indexedVertexEnum::vertexType type,
+            const label processor
+        );
+
+        //- Insert Delaunay vertices using the CGAL range insertion method,
+        //  optionally check processor occupancy and distribute to other
+        //  processors
+        void insertInternalPoints
+        (
+            List<Point>& points,
+            const bool distribute = false
+        );
+
+        void insertPoints
+        (
+            List<Vb>& vertices,
+            bool distribute = true
+        );
+
+        //- Create a point-pair at a ppDist distance either side of
+        //  surface point surfPt, in the direction n
+        inline void createPointPair
+        (
+            const scalar ppDist,
+            const Foam::point& surfPt,
+            const vector& n,
+            DynamicList<Vb>& pts
+        );
+
+        inline Foam::point perturbPoint(const Foam::point& pt) const;
+
+        //- Create a point-pair at a ppDist distance either side of
+        //  surface point surfPt, in the direction n
+        inline void createBafflePointPair
+        (
+            const scalar ppDist,
+            const Foam::point& surfPt,
+            const vector& n,
+            DynamicList<Vb>& pts
+        );
+
+        inline bool isPointPair
+        (
+            const Vertex_handle& vA,
+            const Vertex_handle& vB
+        ) const;
+
+        //- Insert pairs of points on the surface with the given normals, at the
+        //  specified spacing
+        void insertSurfacePointPairs
+        (
+            const pointIndexHitAndFeatureList& surfaceHits,
+            const fileName fName = fileName::null
+        );
+
+        //- Insert groups of points to conform to an edge given a list of
+        //  pointIndexHits specifying the location and edge index of the point
+        //  to be conformed to on the corresponding entry in featureHit
+        void insertEdgePointGroups
+        (
+            const pointIndexHitAndFeatureList& edgeHits,
+            const fileName fName = fileName::null
+        );
+
+        //- Call the appropriate function to conform to an edge
+        void createEdgePointGroup
+        (
+            const extendedFeatureEdgeMesh& feMesh,
+            const pointIndexHit& edHit,
+            DynamicList<Vb>& pts
+        );
+
+        //- Create points to conform to an external edge
+        void createExternalEdgePointGroup
+        (
+            const extendedFeatureEdgeMesh& feMesh,
+            const pointIndexHit& edHit,
+            DynamicList<Vb>& pts
+        );
+
+        //- Create points to conform to an internal edge
+        void createInternalEdgePointGroup
+        (
+            const extendedFeatureEdgeMesh& feMesh,
+            const pointIndexHit& edHit,
+            DynamicList<Vb>& pts
+        );
+
+        //- Create points to conform to a flat edge
+        void createFlatEdgePointGroup
+        (
+            const extendedFeatureEdgeMesh& feMesh,
+            const pointIndexHit& edHit,
+            DynamicList<Vb>& pts
+        );
+
+        //- Create points to conform to an open edge
+        void createOpenEdgePointGroup
+        (
+            const extendedFeatureEdgeMesh& feMesh,
+            const pointIndexHit& edHit,
+            DynamicList<Vb>& pts
+        );
+
+        //- Create points to conform to multiply connected edge
+        void createMultipleEdgePointGroup
+        (
+            const extendedFeatureEdgeMesh& feMesh,
+            const pointIndexHit& edHit,
+            DynamicList<Vb>& pts
+        );
+
+        //- Determine and insert point groups at the feature points
+        void insertFeaturePoints();
+
+        //- Create point groups at mixed feature points
+        void createMixedFeaturePoints(DynamicList<Vb>& pts);
+
+        void addMasterAndSlavePoints
+        (
+            const DynamicList<Foam::point>& masterPoints,
+            const DynamicList<indexedVertexEnum::vertexType>&masterPointsTypes,
+            const Map<DynamicList<autoPtr<plane> > >& masterPointReflections,
+            DynamicList<Vb>& pts,
+            const label ptI
+        ) const;
+
+        label getSign(const extendedFeatureEdgeMesh::edgeStatus eStatus) const;
+
+        void createMasterAndSlavePoints
+        (
+            const extendedFeatureEdgeMesh& feMesh,
+            const label ptI,
+            DynamicList<Vb>& pts
+        ) const;
+
+        void createFeaturePoints(DynamicList<Vb>& pts);
+
+        vector sharedFaceNormal
+        (
+            const extendedFeatureEdgeMesh& feMesh,
+            const label edgeI,
+            const label nextEdgeI
+        ) const;
+
+        List<Foam::point> reflectPointInPlanes
+        (
+            const Foam::point p,
+            const DynamicList<autoPtr<plane> >& planes
+        ) const;
+
+        Foam::point reflectPointInPlane
+        (
+            const Foam::point p,
+            const plane& planeN
+        ) const;
+
+
+        //- Fill the pointFeatureEdgesType struct with the types of feature
+        //  edges that are attached to the point.
+        List<extendedFeatureEdgeMesh::edgeStatus> calcPointFeatureEdgesTypes
+        (
+            const extendedFeatureEdgeMesh& feMesh,
+            const labelList& pEds,
+            pointFeatureEdgesTypes& pFEdgeTypes
+        );
+
+        //- Create feature point groups if a specialisation exists for the
+        //  structure
+        bool createSpecialisedFeaturePoint
+        (
+            const extendedFeatureEdgeMesh& feMesh,
+            const labelList& pEds,
+            const pointFeatureEdgesTypes& pFEdgeTypes,
+            const List<extendedFeatureEdgeMesh::edgeStatus>& allEdStat,
+            const label ptI,
+            DynamicList<Vb>& pts
+        );
+
+        //- Store the locations of all of the features to be conformed to
+        void constructFeaturePointLocations();
+
+        List<pointIndexHit> findSurfacePtLocationsNearFeaturePoint
+        (
+            const Foam::point& featurePoint
+        ) const;
+
+        //- Reinsert stored feature point defining points
+        void reinsertFeaturePoints(bool distribute = false);
+
+        //- Check if a location is in exclusion range around a feature point
+        bool nearFeaturePt(const Foam::point& pt) const;
+
+        //- Insert the initial points into the triangulation, based on the
+        //  initialPointsMethod
+        void insertInitialPoints();
+
+        //- Calculate the worst load balance
+        scalar calculateLoadUnbalance() const;
+
+        //- In parallel redistribute the backgroundMeshDecomposition and
+        //  vertices to balance the number of vertices on each processor.
+        //  Returns true if the background mesh changes as this removes all
+        //  referred vertices, so the parallel interface may need rebuilt.
+        bool distributeBackground();
+
+        // Test for full containment
+        void cellSizeMeshOverlapsBackground() const;
+
+        //-
+        void distribute();
+
+        void buildCellSizeAndAlignmentMesh();
+
+        //- Store data for sizeAndAlignmentLocations_, storedSizes_ and
+        //  storedAlignments_ and initialise the sizeAndAlignmentTreePtr_,
+        //  determining the appropriate sizeAndAlignmentLocations_
+        //  automatically
+        void storeSizesAndAlignments();
+
+        //- Store data for sizeAndAlignmentLocations_, storedSizes_ and
+        //  storedAlignments_ and initialise the sizeAndAlignmentTreePtr_
+        void storeSizesAndAlignments(const List<Point>& storePts);
+
+        //- Restore the sizes and alignments if required
+        void updateSizesAndAlignments(const List<Point>& storePts);
+
+        //- Demand driven construction of octree for and alignment points
+        const indexedOctree<treeDataPoint>& sizeAndAlignmentTree() const;
+
+        //- Set the size and alignment data for each vertex
+        void setVertexSizeAndAlignment();
+
+        //- Builds a dual face by circulating around the supplied edge.
+        face buildDualFace
+        (
+            const Delaunay::Finite_edges_iterator& eit
+        ) const;
+
+        boolList dualFaceBoundaryPoints
+        (
+            const Delaunay::Finite_edges_iterator& eit
+        ) const;
+
+        //- Finds the maximum filterCount of the dual vertices
+        //  (Delaunay cells) that form the dual face produced by the
+        //  supplied edge
+        label maxFilterCount
+        (
+            const Delaunay::Finite_edges_iterator& eit
+        ) const;
+
+        //- Determines the owner and neighbour labels for dual cells
+        //  corresponding to the dual face formed by the supplied
+        //  Delaunay vertices.  If the dual face is a boundary face
+        //  then neighbour = -1.  Returns true if the dual face
+        //  created by vA -> vB needs to be reversed to be correctly
+        //  orientated.
+        bool ownerAndNeighbour
+        (
+            Vertex_handle vA,
+            Vertex_handle vB,
+            label& owner,
+            label& neighbour
+        ) const;
+
+        //- Insert the necessary point pairs to conform to the surface, either
+        //  from stored results, or trigger a re-conformation
+        void conformToSurface();
+
+        //- Decision making function for when to rebuild the surface
+        //  conformation
+        reconformationMode reconformationControl() const;
+
+        //- Determines geometrically whether a vertex is close to a surface
+        //  This is an optimisation
+        label findVerticesNearBoundaries();
+
+        //- Create and insert the necessary point pairs to conform to the
+        //  surface, then store the result
+        void buildSurfaceConformation();
+
+        label synchroniseEdgeTrees
+        (
+            pointIndexHitAndFeatureList& featureEdgeHits
+        );
+
+        label synchroniseSurfaceTrees
+        (
+            pointIndexHitAndFeatureList& surfaceHits
+        );
+
+        bool locationConformsToInside
+        (
+            const pointIndexHitAndFeature& info
+        ) const;
+
+        //- Check to see if dual cell specified by given vertex iterator
+        //  intersects the boundary and hence reqires a point-pair
+        bool dualCellSurfaceAnyIntersection
+        (
+            const Delaunay::Finite_vertices_iterator& vit
+        ) const;
+
+        //- Return all intersections
+        bool dualCellSurfaceAllIntersections
+        (
+            const Delaunay::Finite_vertices_iterator& vit,
+            pointIndexHitAndFeatureDynList& info
+        ) const;
+
+        //- Return false if the line is entirely outside the current processor
+        //  domain, true is either point is inside, or the processor domain
+        //  bounadry is intersected (i.e. the points are box outside but the
+        //  line cuts.  The points will be moved onto the box where they
+        //  intersect.
+        bool clipLineToProc
+        (
+            const Foam::point& pt,
+            Foam::point& a,
+            Foam::point& b
+        ) const;
+
+        //- Find the "worst" protrusion of a dual cell through the surface,
+        //  subject to the maxSurfaceProtrusion tolerance
+        void dualCellLargestSurfaceProtrusion
+        (
+            const Delaunay::Finite_vertices_iterator& vit,
+            pointIndexHit& surfHit,
+            label& hitSurface
+        ) const;
+
+        //- Find the "worst" incursion of the dual cell of a non-internal or
+        //  boundary point through the surface, subject to the
+        //  maxSurfaceProtrusion tolerance
+        void dualCellLargestSurfaceIncursion
+        (
+            const Delaunay::Finite_vertices_iterator& vit,
+            pointIndexHit& surfHitLargest,
+            label& hitSurfaceLargest
+        ) const;
+
+        //- Write out vertex-processor occupancy information for debugging
+        void reportProcessorOccupancy();
+
+        //- Write out debugging information about the surface conformation
+        //  quality
+//        void reportSurfaceConformationQuality();
+
+        //- Limit the displacement of a point so that it doesn't penetrate the
+        //  surface to be meshed or come too close to it
+        void limitDisplacement
+        (
+            const Delaunay::Finite_vertices_iterator& vit,
+            vector& displacement,
+            label callCount = 0
+        ) const;
+
+        //- Find angle between the normals of two close surface points.
+        scalar angleBetweenSurfacePoints(Foam::point pA, Foam::point pB) const;
+
+        //- Check if a surface point is near another.
+        bool nearSurfacePoint
+        (
+            pointIndexHitAndFeature& pHit
+        ) const;
+
+        //- Append a point to the surface point tree and the existing list
+        bool appendToSurfacePtTree
+        (
+            const Foam::point& pt
+        ) const;
+
+        //- Append a point to the edge location tree and the existing list
+        bool appendToEdgeLocationTree
+        (
+            const Foam::point& pt
+        ) const;
+
+        //- Return a list of the nearest feature edge locations
+        List<pointIndexHit> nearestFeatureEdgeLocations
+        (
+            const Foam::point& pt
+        ) const;
+
+        //- Check if a point is near any feature edge points.
+        bool pointIsNearFeatureEdgeLocation(const Foam::point& pt) const;
+
+        bool pointIsNearFeatureEdgeLocation
+        (
+            const Foam::point& pt,
+            pointIndexHit& info
+        ) const;
+
+        //- Check if a point is near any surface conformation points.
+        bool pointIsNearSurfaceLocation(const Foam::point& pt) const;
+
+        bool pointIsNearSurfaceLocation
+        (
+            const Foam::point& pt,
+            pointIndexHit& info
+        ) const;
+
+        //- Check if a location is in the exclusion range of an existing feature
+        //- edge conformation location
+        bool nearFeatureEdgeLocation
+        (
+            pointIndexHit& pHit
+        ) const;
+
+        //- Build or rebuild the edge location tree
+        void buildEdgeLocationTree
+        (
+            const DynamicList<Foam::point>& existingEdgeLocations
+        ) const;
+
+        //- Build or rebuild the surface point location tree
+        void buildSurfacePtLocationTree
+        (
+            const DynamicList<Foam::point>& existingSurfacePtLocations
+        ) const;
+
+        //- Build or rebuild the sizeAndAlignmentTree
+        void buildSizeAndAlignmentTree() const;
+
+        //- Process the surface conformation locations to decide which surface
+        //  and edge conformation locations to add
+        void addSurfaceAndEdgeHits
+        (
+            const Delaunay::Finite_vertices_iterator& vit,
+            const pointIndexHitAndFeatureDynList& surfaceIntersections,
+            scalar surfacePtReplaceDistCoeffSqr,
+            scalar edgeSearchDistCoeffSqr,
+            pointIndexHitAndFeatureDynList& surfaceHits,
+            pointIndexHitAndFeatureDynList& featureEdgeHits
+        ) const;
+
+        //- Store the surface conformation with the indices offset to be
+        //  relative to zero
+        void storeSurfaceConformation();
+
+        //- Reinsert the surface conformation re-offsetting indices to be
+        //  relative to new number of internal vertices
+        void reinsertSurfaceConformation();
+
+        void checkCells();
+
+        void checkDuals();
+
+        void checkVertices();
+
+        void checkCoPlanarCells() const;
+
+        //- Dual calculation
+        void calcDualMesh
+        (
+            pointField& points,
+            labelList& boundaryPts,
+            faceList& faces,
+            labelList& owner,
+            labelList& neighbour,
+            wordList& patchTypes,
+            wordList& patchNames,
+            labelList& patchSizes,
+            labelList& patchStarts,
+            labelList& procNeighbours,
+            pointField& cellCentres,
+            labelList& cellToDelaunayVertex,
+            labelListList& patchToDelaunayVertex,
+            PackedBoolList& boundaryFacesToRemove
+        );
+
+        //- Tet mesh calculation
+        void calcTetMesh
+        (
+            pointField& points,
+            labelList& pointToDelaunayVertex,
+            faceList& faces,
+            labelList& owner,
+            labelList& neighbour,
+            wordList& patchTypes,
+            wordList& patchNames,
+            labelList& patchSizes,
+            labelList& patchStarts
+        );
+
+        //- Determines if the dual face constructed by the Delaunay
+        //  edge is a boundary face
+        inline bool isBoundaryDualFace
+        (
+            const Delaunay::Finite_edges_iterator& eit
+        ) const;
+
+        //- Which processors are attached to the dual edge represented by this
+        //  Delaunay facet
+        inline List<label> processorsAttached
+        (
+            const Delaunay::Finite_facets_iterator& fit
+        ) const;
+
+        //- Determines if the edge constructed from the face is on
+        //  a processor patch
+        inline bool isParallelDualEdge
+        (
+            const Delaunay::Finite_facets_iterator& fit
+        ) const;
+
+        //- Determines if the dual face constructed by the Delaunay
+        //  edge is a processor boundary face
+        inline bool isProcBoundaryEdge
+        (
+            const Delaunay::Finite_edges_iterator& eit
+        ) const;
+
+        //- Merge vertices that are identical
+        void mergeIdenticalDualVertices
+        (
+            const pointField& pts,
+            const labelList& boundaryPts
+        );
+
+        label mergeIdenticalDualVertices
+        (
+            const pointField& pts,
+            const labelList& boundaryPts,
+            Map<label>& dualPtIndexMap
+        ) const;
+
+        //- Identify the face labels of the deferred collapse faces
+        void deferredCollapseFaceSet
+        (
+            labelList& owner,
+            labelList& neighbour,
+            const HashSet<labelPair, labelPair::Hash<> >& deferredCollapseFaces
+        ) const;
+
+        //- Check whether the cell sizes are fine enough. Creates a polyMesh.
+        void checkCellSizing();
+
+        //- Find all cells with a patch face that is not near the surface. The
+        //  allowed offset is the fraction of the target cell size.
+        labelHashSet findOffsetPatchFaces
+        (
+            const polyMesh& mesh,
+            const scalar allowedOffset
+        ) const;
+
+        //- Create a polyMesh and check its quality, reports which
+        //  elements damage the mesh quality, allowing backtracking.
+        labelHashSet checkPolyMeshQuality(const pointField& pts) const;
+
+        //- Index all of the the Delaunay cells and calculate their
+        //- dual points
+        void indexDualVertices
+        (
+            pointField& pts,
+            labelList& boundaryPts
+        );
+
+        //- Re-index all of the Delaunay cells
+        void reindexDualVertices(const Map<label>& dualPtIndexMap);
+
+        label createPatchInfo
+        (
+            wordList& patchNames,
+            wordList& patchTypes,
+            labelList& procNeighbours
+        ) const;
+
+        //- Create all of the internal and boundary faces
+        void createFacesOwnerNeighbourAndPatches
+        (
+            faceList& faces,
+            labelList& owner,
+            labelList& neighbour,
+            wordList& patchTypes,
+            wordList& patchNames,
+            labelList& patchSizes,
+            labelList& patchStarts,
+            labelList& procNeighbours,
+            labelListList& patchPointPairSlaves,
+            PackedBoolList& boundaryFacesToRemove,
+            bool includeEmptyPatches = false
+        ) const;
+
+        //- Create the cell centres to use for the mesh
+        void createCellCentres(pointField& cellCentres) const;
+
+        //- Extract all points in vertex-index order
+        tmp<pointField> allPoints() const;
+
+        //- Sort the faces, owner and neighbour lists into
+        //  upper-triangular order.  For internal faces only, use
+        //  before adding patch faces
+        void sortFaces
+        (
+            faceList& faces,
+            labelList& owner,
+            labelList& neighbour
+        ) const;
+
+        //- Sort the processor patches so that the faces are in the same order
+        //  on both processors
+        void sortProcPatches
+        (
+            List<DynamicList<face> >& patchFaces,
+            List<DynamicList<label> >& patchOwners,
+            List<DynamicList<label> >& patchPointPairSlaves,
+            labelPairPairDynListList& patchSortingIndices
+        ) const;
+
+        //- Add the faces and owner information for the patches
+        void addPatches
+        (
+            const label nInternalFaces,
+            faceList& faces,
+            labelList& owner,
+            labelList& patchSizes,
+            labelList& patchStarts,
+            PackedBoolList& boundaryFacesToRemove,
+            const List<DynamicList<face> >& patchFaces,
+            const List<DynamicList<label> >& patchOwners,
+            const List<DynamicList<bool> >& indirectPatchFace
+        ) const;
+
+        //- Remove points that are no longer used by any faces
+        void removeUnusedPoints
+        (
+            faceList& faces,
+            pointField& pts,
+            labelList& boundaryPts
+        ) const;
+
+        //- Remove dual cells that are not used by any faces. Return compaction
+        //  map.
+        labelList removeUnusedCells
+        (
+            labelList& owner,
+            labelList& neighbour
+        ) const;
+
+        //- Create an empty fvMesh
+        autoPtr<fvMesh> createDummyMesh
+        (
+            const IOobject& io,
+            const wordList& patchTypes,
+            const wordList& patchNames,
+            const labelList& patchSizes,
+            const labelList& patchStarts,
+            const labelList& procNeighbours
+        ) const;
+
+        //- Create a polyMesh from points.
+        autoPtr<polyMesh> createPolyMeshFromPoints(const pointField& pts) const;
+
+        void checkProcessorPatchesMatch
+        (
+            const wordList& patchTypes,
+            const labelList& patchSizes,
+            const labelList& procNeighbours
+        ) const;
+
+        void reorderPoints
+        (
+            pointField& points,
+            labelList& boundaryPts,
+            faceList& faces,
+            const label nInternalFaces
+        ) const;
+
+        //- Rotate the faces on processor patches if necessary
+        void reorderProcessorPatches
+        (
+            const word& meshName,
+            const fileName& instance,
+            const pointField& points,
+            faceList& faces,
+            const wordList& patchTypes,
+            const wordList& patchNames,
+            const labelList& patchSizes,
+            const labelList& patchStarts,
+            const labelList& procNeighbours
+        ) const;
+
+        //- Disallow default bitwise copy construct
+        conformalVoronoiMesh(const conformalVoronoiMesh&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const conformalVoronoiMesh&);
+
+
+public:
+
+    //- Runtime type information
+    ClassName("conformalVoronoiMesh");
+
+
+    // Constructors
+
+        //- Construct from Time and cvMeshDict
+        conformalVoronoiMesh
+        (
+            const Time& runTime,
+            const dictionary& cvMeshDict
+        );
+
+
+    //- Destructor
+    ~conformalVoronoiMesh();
+
+
+    // Member Functions
+
+        //- Move the vertices according to the controller, re-conforming to the
+        //  surface as required
+        void move();
+
+        void printVertexInfo() const;
+
+        //- Check if the point is in the domain handled by this processor
+        bool positionOnThisProc(const Foam::point& pt) const;
+
+        //- Check if the point is in the domain handled by this processor
+        boolList positionOnThisProc(const Foam::List<Foam::point>& pts) const;
+
+        //- Which processor's domain handles this point
+        labelList positionProc(const Foam::List<Foam::point>& pts) const;
+
+        //- Which other processors does each line segment intersect
+        List<List<pointIndexHit> > intersectsProc
+        (
+            const List<Foam::point>& starts,
+            const List<Foam::point>& ends
+        ) const;
+
+//        //- Which other processors does each sphere overlap
+//        labelListList overlapsProc
+//        (
+//            const List<Foam::point>& centres,
+//            const List<scalar>& radiusSqrs
+//        ) const;
+
+        typedef K::Vector_3 CGALVector;
+
+        inline CGALVector toCGALVector(const Foam::vector& v) const;
+
+
+        // Access
+
+            //- Return the Time object
+            inline const Time& time() const;
+
+            //- Return the random number generator
+            inline Random& rndGen() const;
+
+            //- Return the allGeometry object
+            inline const searchableSurfaces& allGeometry() const;
+
+            //- Return the conformationSurfaces object
+            inline const conformationSurfaces& geometryToConformTo() const;
+
+            //- Return the backgroundMeshDecomposition
+            inline const backgroundMeshDecomposition& decomposition() const;
+
+            //- Return the cellShapeControl object
+            inline const cellShapeControl& cellShapeControls() const;
+
+            //- Return the cvMeshControls object
+            inline const cvControls& cvMeshControls() const;
+
+
+        // Write
+
+            //- Write the elapsedCpuTime and memory usage, with an optional
+            //  description
+            void timeCheck
+            (
+                const string& description = string::null
+            ) const;
+
+            //- Write the Delaunay cell
+            void drawDelaunayCell
+            (
+                Ostream& os,
+                const Cell_handle& c,
+                label offset = 0
+            ) const;
+
+            //- Write Delaunay points in the range between (and including)
+            //  type startPointType and endPointType to .obj file
+            void writePoints
+            (
+                const fileName& fName,
+                const Foam::indexedVertexEnum::vertexType startPointType,
+                const Foam::indexedVertexEnum::vertexType endPointType
+            ) const;
+
+            //- Write Delaunay points of type pointType to .obj file
+            void writePoints
+            (
+                const fileName& fName,
+                const Foam::indexedVertexEnum::vertexType pointType
+            ) const;
+
+            //- Write the boundary Delaunay points to .obj file
+            void writeBoundaryPoints(const fileName& fName) const;
+
+            //- Write list of points to file
+            void writePoints
+            (
+                const fileName& fName,
+                const List<Foam::point>& points
+            ) const;
+
+            //- Write list of points to file
+            void writePoints
+            (
+                const fileName& fName,
+                const List<Vb>& points
+            ) const;
+
+            //- Write the internal Delaunay vertices of the tessellation as a
+            //  pointField that may be used to restart the meshing process
+            void writeInternalDelaunayVertices(const fileName& instance) const;
+
+            //- Prepare data and call writeMesh for polyMesh and
+            //  tetDualMesh
+            void writeMesh(const fileName& instance);
+
+            //- Write mesh to disk
+            void writeMesh
+            (
+                const word& meshName,
+                const fileName& instance,
+                pointField& points,
+                labelList& boundaryPts,
+                faceList& faces,
+                labelList& owner,
+                labelList& neighbour,
+                const wordList& patchTypes,
+                const wordList& patchNames,
+                const labelList& patchSizes,
+                const labelList& patchStarts,
+                const labelList& procNeighbours,
+                const pointField& cellCentres,
+                const PackedBoolList& boundaryFacesToRemove
+            ) const;
+
+            //- Write points and faces as .obj file
+            void writeObjMesh
+            (
+                const pointField& points,
+                const faceList& faces,
+                const fileName& fName
+            ) const;
+
+            //- Calculate and write a field of the target cell size,
+            //  target cell volume, actual cell volume and equivalent
+            //  actual cell size (cbrt(actual cell volume)).
+            void writeCellSizes(const fvMesh& mesh) const;
+
+            void writeCellAlignments(const fvMesh& mesh) const;
+
+            //- Calculate and write the cell centres.
+            void writeCellCentres(const fvMesh& mesh) const;
+
+            //- Find the cellSet of the boundary cells which have points that
+            //  protrude out of the surface beyond a tolerance.
+            labelHashSet findRemainingProtrusionSet(const polyMesh& mesh) const;
+
+            void writeProcessorInterface
+            (
+                const fileName& fName,
+                const faceList& faces
+            ) const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#include "conformalVoronoiMeshI.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshCalcDualMesh.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshCalcDualMesh.C
new file mode 100644
index 0000000000000000000000000000000000000000..66a26f666f1bbc0c3380b41775fdf0f9a314446f
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshCalcDualMesh.C
@@ -0,0 +1,2571 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012-2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "conformalVoronoiMesh.H"
+#include "motionSmoother.H"
+#include "backgroundMeshDecomposition.H"
+#include "polyMeshGeometry.H"
+#include "indexedCellChecks.H"
+
+#include "CGAL/Exact_predicates_exact_constructions_kernel.h"
+#include "CGAL/Gmpq.h"
+
+// * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * * //
+
+void Foam::conformalVoronoiMesh::checkCells()
+{
+    List<List<FixedList<Foam::point, 4> > > cellListList(Pstream::nProcs());
+
+    List<FixedList<Foam::point, 4> > cells(number_of_finite_cells());
+
+    globalIndex gIndex(number_of_vertices());
+
+    label count = 0;
+    for
+    (
+        Delaunay::Finite_cells_iterator cit = finite_cells_begin();
+        cit != finite_cells_end();
+        ++cit
+    )
+    {
+        if (tetrahedron(cit).volume() == 0)
+        {
+            Pout<< "ZERO VOLUME TET" << endl;
+            Pout<< cit->info();
+            Pout<< cit->dual();
+        }
+
+        if (cit->hasFarPoint())
+        {
+            continue;
+        }
+
+        List<labelPair> cellVerticesPair(4);
+        List<Foam::point> cellVertices(4);
+
+        for (label vI = 0; vI < 4; ++vI)
+        {
+            cellVerticesPair[vI] = labelPair
+            (
+                cit->vertex(vI)->procIndex(),
+                cit->vertex(vI)->index()
+            );
+            cellVertices[vI] = topoint(cit->vertex(vI)->point());
+        }
+
+        List<Foam::point> cellVerticesOld(cellVertices);
+        labelList oldToNew;
+        sortedOrder(cellVerticesPair, oldToNew);
+        oldToNew = invert(oldToNew.size(), oldToNew);
+        inplaceReorder(oldToNew, cellVerticesPair);
+        inplaceReorder(oldToNew, cellVertices);
+
+//        FixedList<label, 4> globalTetCell
+//        (
+//            cit->globallyOrderedCellVertices(gIndex)
+//        );
+//
+//        FixedList<Point, 4> cellVertices(Point(0,0,0));
+//
+//        forAll(globalTetCell, gvI)
+//        {
+//            label gI = globalTetCell[gvI];
+//
+//            cellVertices[gvI] = cit->vertex(gI)->point();
+//        }
+
+//        if (cit->hasFarPoint())
+//        {
+//            continue;
+//        }
+
+        for (label i = 0; i < 4; ++i)
+        {
+            //cells[count][i] = topoint(cit->vertex(i)->point());
+            cells[count][i] = cellVertices[i];
+        }
+
+        count++;
+    }
+
+    cells.setSize(count);
+
+    cellListList[Pstream::myProcNo()] = cells;
+
+    Pstream::gatherList(cellListList);
+
+    if (Pstream::master())
+    {
+        Info<< "Checking on master processor the cells of each " << nl
+            << "processor point list against the master cell list." << nl
+            << "There are " << cellListList.size() << " processors" << nl
+            << "The size of each processor's cell list is:" << endl;
+
+        forAll(cellListList, cfI)
+        {
+            Info<< "    Proc " << cfI << " has " << cellListList[cfI].size()
+                << " cells" << endl;
+        }
+
+        label nMatches = 0, nMatchFoundDiffOrder = 0;
+
+        forAll(cellListList[0], cmI)
+        {
+            const FixedList<Foam::point, 4>& masterCell = cellListList[0][cmI];
+
+            bool matchFound = false;
+            bool matchFoundDiffOrder = false;
+
+            forAll(cellListList, cpI)
+            {
+                if (cpI == 0)
+                {
+                    continue;
+                }
+
+                forAll(cellListList[cpI], csI)
+                {
+                    const FixedList<Foam::point, 4>& slaveCell
+                        = cellListList[cpI][csI];
+
+                    if (masterCell == slaveCell)
+                    {
+                        matchFound = true;
+                        break;
+                    }
+                    else
+                    {
+                        label samePt = 0;
+
+                        forAll(masterCell, mI)
+                        {
+                            const Foam::point& mPt = masterCell[mI];
+
+                            forAll(slaveCell, sI)
+                            {
+                                const Foam::point& sPt = slaveCell[sI];
+
+                                if (mPt == sPt)
+                                {
+                                    samePt++;
+                                }
+                            }
+                        }
+
+                        if (samePt == 4)
+                        {
+                            matchFoundDiffOrder = true;
+
+                            Pout<< masterCell << nl << slaveCell << endl;
+
+                            break;
+                        }
+                    }
+                }
+            }
+
+            if (matchFound)
+            {
+                nMatches++;
+            }
+
+            if (matchFoundDiffOrder)
+            {
+                nMatchFoundDiffOrder++;
+            }
+        }
+
+        Info<< "Found " << nMatches << " matching cells and "
+            << nMatchFoundDiffOrder << " matching cells with different "
+            << "vertex ordering"<< endl;
+    }
+}
+
+
+void Foam::conformalVoronoiMesh::checkDuals()
+{
+    List<List<Point> > pointFieldList(Pstream::nProcs());
+
+    List<Point> duals(number_of_finite_cells());
+
+    typedef CGAL::Exact_predicates_exact_constructions_kernel       EK2;
+    typedef CGAL::Regular_triangulation_euclidean_traits_3<EK2>     EK;
+    typedef CGAL::Cartesian_converter<baseK::Kernel, EK2>  To_exact;
+    typedef CGAL::Cartesian_converter<EK2, baseK::Kernel>  Back_from_exact;
+
+//    PackedBoolList bPoints(number_of_finite_cells());
+
+//    indexDualVertices(duals, bPoints);
+
+    label count = 0;//duals.size();
+
+    duals.setSize(number_of_finite_cells());
+
+    globalIndex gIndex(number_of_vertices());
+
+    for
+    (
+        Delaunay::Finite_cells_iterator cit = finite_cells_begin();
+        cit != finite_cells_end();
+        ++cit
+    )
+    {
+        if (cit->hasFarPoint())
+        {
+            continue;
+        }
+
+        duals[count++] = cit->circumcenter();
+
+//        List<labelPair> cellVerticesPair(4);
+//        List<Point> cellVertices(4);
+//
+//        for (label vI = 0; vI < 4; ++vI)
+//        {
+//            cellVerticesPair[vI] = labelPair
+//            (
+//                cit->vertex(vI)->procIndex(),
+//                cit->vertex(vI)->index()
+//            );
+//            cellVertices[vI] = cit->vertex(vI)->point();
+//        }
+//
+//        labelList oldToNew;
+//        sortedOrder(cellVerticesPair, oldToNew);
+//        oldToNew = invert(oldToNew.size(), oldToNew);
+//        inplaceReorder(oldToNew, cellVerticesPair);
+//        inplaceReorder(oldToNew, cellVertices);
+//
+//        duals[count++] = CGAL::circumcenter
+//        (
+//            cellVertices[0],
+//            cellVertices[1],
+//            cellVertices[2],
+//            cellVertices[3]
+//        );
+
+//        To_exact to_exact;
+//        Back_from_exact back_from_exact;
+//        EK::Construct_circumcenter_3 exact_circumcenter =
+//            EK().construct_circumcenter_3_object();
+//
+//        duals[count++] = topoint
+//        (
+//            back_from_exact
+//            (
+//                exact_circumcenter
+//                (
+//                    to_exact(cit->vertex(0)->point()),
+//                    to_exact(cit->vertex(1)->point()),
+//                    to_exact(cit->vertex(2)->point()),
+//                    to_exact(cit->vertex(3)->point())
+//                )
+//            )
+//        );
+    }
+
+    Pout<< "Duals Calculated " << count << endl;
+
+    duals.setSize(count);
+
+    pointFieldList[Pstream::myProcNo()] = duals;
+
+    Pstream::gatherList(pointFieldList);
+
+    if (Pstream::master())
+    {
+        Info<< "Checking on master processor the dual locations of each " << nl
+            << "processor point list against the master dual list." << nl
+            << "There are " << pointFieldList.size() << " processors" << nl
+            << "The size of each processor's dual list is:" << endl;
+
+        forAll(pointFieldList, pfI)
+        {
+            Info<< "    Proc " << pfI << " has " << pointFieldList[pfI].size()
+                << " duals" << endl;
+        }
+
+        label nNonMatches = 0;
+        label nNearMatches = 0;
+        label nExactMatches = 0;
+
+        forAll(pointFieldList[0], pI)
+        {
+            const Point& masterPoint = pointFieldList[0][pI];
+
+            bool foundMatch = false;
+            bool foundNearMatch = false;
+
+            scalar minCloseness = GREAT;
+            Point closestPoint(0, 0, 0);
+
+            forAll(pointFieldList, pfI)
+            {
+                if (pfI == 0)
+                {
+                    continue;
+                }
+
+//                label pfI = 1;
+
+                forAll(pointFieldList[pfI], pISlave)
+                {
+                    const Point& slavePoint
+                        = pointFieldList[pfI][pISlave];
+
+                    if (masterPoint == slavePoint)
+                    {
+                        foundMatch = true;
+                        break;
+                    }
+
+                    const scalar closeness = mag
+                    (
+                        topoint(masterPoint) - topoint(slavePoint)
+                    );
+
+                    if (closeness < 1e-12)
+                    {
+                        foundNearMatch = true;
+                    }
+                    else
+                    {
+                        if (closeness < minCloseness)
+                        {
+                            minCloseness = closeness;
+                            closestPoint = slavePoint;
+                        }
+                    }
+                }
+
+                if (!foundMatch)
+                {
+                    if (foundNearMatch)
+                    {
+                        CGAL::Gmpq x(CGAL::to_double(masterPoint.x()));
+                        CGAL::Gmpq y(CGAL::to_double(masterPoint.y()));
+                        CGAL::Gmpq z(CGAL::to_double(masterPoint.z()));
+
+                        std::cout<< "master = " << x << " " << y << " " << z
+                            << std::endl;
+
+                        CGAL::Gmpq xs(CGAL::to_double(closestPoint.x()));
+                        CGAL::Gmpq ys(CGAL::to_double(closestPoint.y()));
+                        CGAL::Gmpq zs(CGAL::to_double(closestPoint.z()));
+                        std::cout<< "slave  = " << xs << " " << ys << " " << zs
+                            << std::endl;
+
+                        nNearMatches++;
+                    }
+                    else
+                    {
+                        nNonMatches++;
+                        Info<< "    Closest point to " << masterPoint << " is "
+                            << closestPoint << nl
+                            << "    Separation is " << minCloseness << endl;
+
+                        CGAL::Gmpq x(CGAL::to_double(masterPoint.x()));
+                        CGAL::Gmpq y(CGAL::to_double(masterPoint.y()));
+                        CGAL::Gmpq z(CGAL::to_double(masterPoint.z()));
+
+                        std::cout<< "master = " << x << " " << y << " " << z
+                                 << std::endl;
+
+                        CGAL::Gmpq xs(CGAL::to_double(closestPoint.x()));
+                        CGAL::Gmpq ys(CGAL::to_double(closestPoint.y()));
+                        CGAL::Gmpq zs(CGAL::to_double(closestPoint.z()));
+                        std::cout<< "slave  = " << xs << " " << ys << " " << zs
+                                 << std::endl;
+                    }
+                }
+                else
+                {
+                    nExactMatches++;
+                }
+            }
+        }
+
+        Info<< "Found " << nNonMatches << " non-matching duals" << nl
+            << " and " << nNearMatches << " near matches"
+            << " and " << nExactMatches << " exact matches" << endl;
+    }
+}
+
+
+void Foam::conformalVoronoiMesh::checkVertices()
+{
+    List<pointField> pointFieldList(Pstream::nProcs());
+
+    pointField points(number_of_vertices());
+
+    labelPairHashSet duplicateVertices;
+
+    label count = 0;
+    for
+    (
+        Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        ++vit
+    )
+    {
+        if (duplicateVertices.found(labelPair(vit->procIndex(), vit->index())))
+        {
+            Pout<< "DUPLICATE " << vit->procIndex() << vit->index() << endl;
+        }
+        else
+        {
+            duplicateVertices.insert(labelPair(vit->procIndex(), vit->index()));
+        }
+
+        points[count++] = topoint(vit->point());
+    }
+
+    pointFieldList[Pstream::myProcNo()] = points;
+
+    Pstream::gatherList(pointFieldList);
+
+    OFstream str("missingPoints.obj");
+
+    if (Pstream::master())
+    {
+        Info<< "Checking on master processor the point locations of each " << nl
+            << "processor point list against the master point list." << nl
+            << "There are " << pointFieldList.size() << " processors" << nl
+            << "The size of each processor's point list is:" << endl;
+
+        forAll(pointFieldList, pfI)
+        {
+            Info<< "    Proc " << pfI << " has " << pointFieldList[pfI].size()
+                << " points" << endl;
+        }
+
+        label nNonMatches = 0;
+
+        forAll(pointFieldList[0], pI)
+        {
+            const Foam::point& masterPoint = pointFieldList[0][pI];
+
+            forAll(pointFieldList, pfI)
+            {
+                if (pI == 0)
+                {
+                    continue;
+                }
+
+                bool foundMatch = false;
+
+                forAll(pointFieldList[pfI], pISlave)
+                {
+                    const Foam::point& slavePoint
+                        = pointFieldList[pfI][pISlave];
+
+                    if (masterPoint == slavePoint)
+                    {
+                        foundMatch = true;
+                        break;
+                    }
+                }
+
+                if (!foundMatch)
+                {
+                    Info<< "    Proc " << pfI << " Master != Slave -> "
+                        << masterPoint << endl;
+
+                    meshTools::writeOBJ(str, masterPoint);
+
+                    nNonMatches++;
+                }
+            }
+        }
+
+        Info<< "Found a total of " << nNonMatches << " non-matching points"
+            << endl;
+    }
+}
+
+
+void Foam::conformalVoronoiMesh::calcDualMesh
+(
+    pointField& points,
+    labelList& boundaryPts,
+    faceList& faces,
+    labelList& owner,
+    labelList& neighbour,
+    wordList& patchTypes,
+    wordList& patchNames,
+    labelList& patchSizes,
+    labelList& patchStarts,
+    labelList& procNeighbours,
+    pointField& cellCentres,
+    labelList& cellToDelaunayVertex,
+    labelListList& patchToDelaunayVertex,
+    PackedBoolList& boundaryFacesToRemove
+)
+{
+    timeCheck("Start calcDualMesh");
+
+//    if (debug)
+//    {
+//        Pout<< nl << "Perfoming some checks . . ." << nl << nl
+//            << "Total number of vertices = " << number_of_vertices() << nl
+//            << "Total number of cells    = " << number_of_finite_cells()
+//            << endl;
+//
+//        checkVertices();
+//        checkCells();
+//        checkDuals();
+//
+//        Info<< nl << "Finished checks" << nl << endl;
+//    }
+
+    setVertexSizeAndAlignment();
+
+    timeCheck("After setVertexSizeAndAlignment");
+
+    indexDualVertices(points, boundaryPts);
+
+    {
+        Info<< nl << "Merging identical points" << endl;
+
+        // There is no guarantee that a merge of close points is no-risk
+        mergeIdenticalDualVertices(points, boundaryPts);
+    }
+
+    // Final dual face and owner neighbour construction
+
+    timeCheck("Before createFacesOwnerNeighbourAndPatches");
+
+    createFacesOwnerNeighbourAndPatches
+    (
+        faces,
+        owner,
+        neighbour,
+        patchTypes,
+        patchNames,
+        patchSizes,
+        patchStarts,
+        procNeighbours,
+        patchToDelaunayVertex,  // from patch face to Delaunay vertex (slavePp)
+        boundaryFacesToRemove,
+        false
+    );
+
+    // deferredCollapseFaceSet(owner, neighbour, deferredCollapseFaces);
+
+    cellCentres = allPoints();
+
+    cellToDelaunayVertex = removeUnusedCells(owner, neighbour);
+
+    cellCentres = pointField(cellCentres, cellToDelaunayVertex);
+
+    removeUnusedPoints(faces, points, boundaryPts);
+
+    timeCheck("End of calcDualMesh");
+}
+
+
+void Foam::conformalVoronoiMesh::calcTetMesh
+(
+    pointField& points,
+    labelList& pointToDelaunayVertex,
+    faceList& faces,
+    labelList& owner,
+    labelList& neighbour,
+    wordList& patchTypes,
+    wordList& patchNames,
+    labelList& patchSizes,
+    labelList& patchStarts
+)
+{
+    labelList vertexMap(number_of_vertices());
+
+    label vertI = 0;
+
+    points.setSize(number_of_vertices());
+    pointToDelaunayVertex.setSize(number_of_vertices());
+
+    for
+    (
+        Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        ++vit
+    )
+    {
+        if (vit->internalPoint() || vit->boundaryPoint())
+        {
+            vertexMap[vit->index()] = vertI;
+            points[vertI] = topoint(vit->point());
+            pointToDelaunayVertex[vertI] = vit->index();
+            vertI++;
+        }
+    }
+
+    points.setSize(vertI);
+    pointToDelaunayVertex.setSize(vertI);
+
+    label cellI = 0;
+
+    for
+    (
+        Delaunay::Finite_cells_iterator cit = finite_cells_begin();
+        cit != finite_cells_end();
+        ++cit
+    )
+    {
+        if (cit->internalOrBoundaryDualVertex())
+        {
+             cit->cellIndex() = cellI++;
+        }
+        else
+        {
+            cit->cellIndex() = Cb::ctFar;
+        }
+    }
+
+    patchNames = geometryToConformTo_.patchNames();
+
+    patchNames.setSize(patchNames.size() + 1);
+
+    patchNames[patchNames.size() - 1] = "cvMesh_defaultPatch";
+    patchTypes.setSize(patchNames.size(), wallPolyPatch::typeName);
+
+    label nPatches = patchNames.size();
+
+    List<DynamicList<face> > patchFaces(nPatches, DynamicList<face>(0));
+
+    List<DynamicList<label> > patchOwners(nPatches, DynamicList<label>(0));
+
+    faces.setSize(number_of_finite_facets());
+
+    owner.setSize(number_of_finite_facets());
+
+    neighbour.setSize(number_of_finite_facets());
+
+    label faceI = 0;
+
+    labelList verticesOnTriFace(3, -1);
+
+    face newFace(verticesOnTriFace);
+
+    for
+    (
+        Delaunay::Finite_facets_iterator fit = finite_facets_begin();
+        fit != finite_facets_end();
+        ++fit
+    )
+    {
+        const Cell_handle c1(fit->first);
+        const int oppositeVertex = fit->second;
+        const Cell_handle c2(c1->neighbor(oppositeVertex));
+
+        if (c1->hasFarPoint() && c2->hasFarPoint())
+        {
+            // Both tets are outside, skip
+            continue;
+        }
+
+        label c1I = c1->cellIndex();
+        label c2I = c2->cellIndex();
+
+        label ownerCell = -1;
+        label neighbourCell = -1;
+
+        for (label i = 0; i < 3; i++)
+        {
+            verticesOnTriFace[i] = vertexMap
+            [
+                c1->vertex(vertex_triple_index(oppositeVertex, i))->index()
+            ];
+        }
+
+        newFace = face(verticesOnTriFace);
+
+        if (c1->hasFarPoint() || c2->hasFarPoint())
+        {
+            // Boundary face...
+            if (c1->hasFarPoint())
+            {
+                //... with c1 outside
+                ownerCell = c2I;
+            }
+            else
+            {
+                // ... with c2 outside
+                ownerCell = c1I;
+
+                reverse(newFace);
+            }
+
+            label patchIndex = geometryToConformTo_.findPatch
+            (
+                newFace.centre(points)
+            );
+
+            if (patchIndex == -1)
+            {
+                patchIndex = patchNames.size() - 1;
+
+                WarningIn("Foam::conformalVoronoiMesh::calcTetMesh")
+                    << "Tet face centre at  " << nl
+                    << newFace.centre(points) << nl
+                    << "did not find a surface patch. Adding to "
+                    << patchNames[patchIndex]
+                    << endl;
+            }
+
+            patchFaces[patchIndex].append(newFace);
+            patchOwners[patchIndex].append(ownerCell);
+        }
+        else
+        {
+            // Internal face...
+            if (c1I < c2I)
+            {
+                // ...with c1 as the ownerCell
+                ownerCell = c1I;
+                neighbourCell = c2I;
+
+                reverse(newFace);
+            }
+            else
+            {
+                // ...with c2 as the ownerCell
+                ownerCell = c2I;
+                neighbourCell = c1I;
+            }
+
+            faces[faceI] = newFace;
+            owner[faceI] = ownerCell;
+            neighbour[faceI] = neighbourCell;
+            faceI++;
+        }
+    }
+
+    label nInternalFaces = faceI;
+
+    faces.setSize(nInternalFaces);
+    owner.setSize(nInternalFaces);
+    neighbour.setSize(nInternalFaces);
+
+    sortFaces(faces, owner, neighbour);
+
+//    addPatches
+//    (
+//        nInternalFaces,
+//        faces,
+//        owner,
+//        patchSizes,
+//        patchStarts,
+//        patchFaces,
+//        patchOwners
+//    );
+}
+
+
+void Foam::conformalVoronoiMesh::mergeIdenticalDualVertices
+(
+    const pointField& pts,
+    const labelList& boundaryPts
+)
+{
+    // Assess close points to be merged
+
+    label nPtsMerged = 0;
+    label nPtsMergedSum = 0;
+
+    do
+    {
+        Map<label> dualPtIndexMap;
+
+        nPtsMerged = mergeIdenticalDualVertices
+        (
+            pts,
+            boundaryPts,
+            dualPtIndexMap
+        );
+
+        reindexDualVertices(dualPtIndexMap);
+
+        reduce(nPtsMerged, sumOp<label>());
+
+        nPtsMergedSum += nPtsMerged;
+
+    } while (nPtsMerged > 0);
+
+    if (nPtsMergedSum > 0)
+    {
+        Info<< "    Merged " << nPtsMergedSum << " points " << endl;
+    }
+}
+
+
+Foam::label Foam::conformalVoronoiMesh::mergeIdenticalDualVertices
+(
+    const pointField& pts,
+    const labelList& boundaryPts,
+    Map<label>& dualPtIndexMap
+) const
+{
+    label nPtsMerged = 0;
+
+    for
+    (
+        Delaunay::Finite_facets_iterator fit = finite_facets_begin();
+        fit != finite_facets_end();
+        ++fit
+    )
+    {
+        const Cell_handle c1(fit->first);
+        const int oppositeVertex = fit->second;
+        const Cell_handle c2(c1->neighbor(oppositeVertex));
+
+        if (is_infinite(c1) || is_infinite(c2))
+        {
+            continue;
+        }
+
+        label& c1I = c1->cellIndex();
+        label& c2I = c2->cellIndex();
+
+        if ((c1I != c2I) && !c1->hasFarPoint() && !c2->hasFarPoint())
+        {
+            const Foam::point& p1 = pts[c1I];
+            const Foam::point& p2 = pts[c2I];
+
+            if (p1 == p2)
+            {
+                if (c1I < c2I)
+                {
+                    dualPtIndexMap.insert(c1I, c1I);
+                    dualPtIndexMap.insert(c2I, c1I);
+                }
+                else
+                {
+                    dualPtIndexMap.insert(c1I, c2I);
+                    dualPtIndexMap.insert(c2I, c2I);
+                }
+
+                nPtsMerged++;
+            }
+        }
+    }
+
+    if (debug)
+    {
+        Info<< "mergeIdenticalDualVertices:" << endl
+            << "    zero-length edges     : "
+            << returnReduce(nPtsMerged, sumOp<label>()) << endl
+            << endl;
+    }
+
+    return nPtsMerged;
+}
+
+
+//void Foam::conformalVoronoiMesh::smoothSurface
+//(
+//    pointField& pts,
+//    const labelList& boundaryPts
+//)
+//{
+//    label nCollapsedFaces = 0;
+//
+//    label iterI = 0;
+//
+//    do
+//    {
+//        Map<label> dualPtIndexMap;
+//
+//        nCollapsedFaces = smoothSurfaceDualFaces
+//        (
+//            pts,
+//            boundaryPts,
+//            dualPtIndexMap
+//        );
+//
+//        reduce(nCollapsedFaces, sumOp<label>());
+//
+//        reindexDualVertices(dualPtIndexMap);
+//
+//        mergeIdenticalDualVertices(pts, boundaryPts);
+//
+//        if (nCollapsedFaces > 0)
+//        {
+//            Info<< "    Collapsed " << nCollapsedFaces << " boundary faces"
+//                << endl;
+//        }
+//
+//        if (++iterI > cvMeshControls().maxCollapseIterations())
+//        {
+//            Info<< "    maxCollapseIterations reached, stopping collapse"
+//                << endl;
+//
+//            break;
+//        }
+//
+//    } while (nCollapsedFaces > 0);
+//
+//    // Force all points of boundary faces to be on the surface
+////    for
+////    (
+////        Delaunay::Finite_cells_iterator cit = finite_cells_begin();
+////        cit != finite_cells_end();
+////        ++cit
+////    )
+////    {
+////        label ptI = cit->cellIndex();
+////
+////        label fC = cit->filterCount();
+////
+////        if (fC > cvMeshControls().filterCountSkipThreshold())
+////        {
+////            // This vertex has been limited too many times, skip
+////            continue;
+////        }
+////
+////        // Only cells with indices > -1 are valid
+////        if (ptI > -1)
+////        {
+////            if (boundaryPts[ptI] != -1)
+////            {
+////                Foam::point& pt = pts[ptI];
+////
+////                pointIndexHit surfHit;
+////                label hitSurface;
+////
+////                geometryToConformTo_.findSurfaceNearest
+////                (
+////                    pt,
+////                    sqr(GREAT),
+////                    surfHit,
+////                    hitSurface
+////                );
+////
+////                if (surfHit.hit())
+////                {
+////                    pt += (surfHit.hitPoint() - pt)
+////                         *pow
+////                          (
+////                              cvMeshControls().filterErrorReductionCoeff(),
+////                              fC
+////                          );
+////                }
+////            }
+////        }
+////    }
+////
+////    mergeCloseDualVertices(pts, boundaryPts);
+//}
+//
+//
+//Foam::label Foam::conformalVoronoiMesh::smoothSurfaceDualFaces
+//(
+//    pointField& pts,
+//    const labelList& boundaryPts,
+//    Map<label>& dualPtIndexMap
+//) const
+//{
+//    label nCollapsedFaces = 0;
+//
+//    const scalar cosPerpendicularToleranceAngle = cos
+//    (
+//        degToRad(cvMeshControls().surfaceStepFaceAngle())
+//    );
+//
+//    for
+//    (
+//        Delaunay::Finite_edges_iterator eit = finite_edges_begin();
+//        eit != finite_edges_end();
+//        ++eit
+//    )
+//    {
+//        Cell_circulator ccStart = incident_cells(*eit);
+//        Cell_circulator cc = ccStart;
+//
+//        bool skipFace = false;
+//
+//        do
+//        {
+//            if (dualPtIndexMap.found(cc->cellIndex()))
+//            {
+//                // One of the points of this face has already been
+//                // collapsed this sweep, leave for next sweep
+//
+//                skipFace = true;
+//
+//                break;
+//            }
+//
+//        } while (++cc != ccStart);
+//
+//        if (skipFace)
+//        {
+//            continue;
+//        }
+//
+//        if (isBoundaryDualFace(eit))
+//        {
+//            face dualFace = buildDualFace(eit);
+//
+//            if (dualFace.size() < 3)
+//            {
+//                // This face has been collapsed already
+//                continue;
+//            }
+//
+//            label maxFC = maxFilterCount(eit);
+//
+//            if (maxFC > cvMeshControls().filterCountSkipThreshold())
+//            {
+//                // A vertex on this face has been limited too many
+//                // times, skip
+//                continue;
+//            }
+//
+//            Cell_handle c = eit->first;
+//            Vertex_handle vA = c->vertex(eit->second);
+//            Vertex_handle vB = c->vertex(eit->third);
+//
+//            if
+//            (
+//                vA->internalBoundaryPoint() && vA->surfacePoint()
+//             && vB->externalBoundaryPoint() && vB->surfacePoint()
+//            )
+//            {
+//                if (vA->index() == vB->index() - 1)
+//                {
+//                    continue;
+//                }
+//            }
+//            else if
+//            (
+//                vA->externalBoundaryPoint() && vA->surfacePoint()
+//             && vB->internalBoundaryPoint() && vB->surfacePoint()
+//            )
+//            {
+//                if (vA->index() == vB->index() + 1)
+//                {
+//                    continue;
+//                }
+//            }
+////            else if
+////            (
+////                vA->internalBoundaryPoint() && vA->featureEdgePoint()
+////             && vB->externalBoundaryPoint() && vB->featureEdgePoint()
+////            )
+////            {
+////                if (vA->index() == vB->index() - 1)
+////                {
+////                    continue;
+////                }
+////            }
+////            else if
+////            (
+////                vA->externalBoundaryPoint() && vA->featureEdgePoint()
+////             && vB->internalBoundaryPoint() && vB->featureEdgePoint()
+////            )
+////            {
+////                if (vA->index() == vB->index() + 1)
+////                {
+////                    continue;
+////                }
+////            }
+////            else if
+////            (
+////                vA->internalBoundaryPoint() && vA->featurePoint()
+////             && vB->externalBoundaryPoint() && vB->featurePoint()
+////            )
+////            {
+////                if (vA->index() == vB->index() - 1)
+////                {
+////                    continue;
+////                }
+////            }
+////            else if
+////            (
+////                vA->externalBoundaryPoint() && vA->featurePoint()
+////             && vB->internalBoundaryPoint() && vB->featurePoint()
+////            )
+////            {
+////                if (vA->index() == vB->index() + 1)
+////                {
+////                    continue;
+////                }
+////            }
+//
+//
+//            if ((faceNormal & surfaceNormal) < cosPerpendicularToleranceAngle)
+//            {
+//                scalar targetFaceSize = averageAnyCellSize(vA, vB);
+//
+//                // Selecting faces to collapse based on angle to
+//                // surface, so set collapseSizeLimitCoeff to GREAT to
+//                // allow collapse of all faces
+//
+//                faceCollapseMode mode = collapseFace
+//                (
+//                    dualFace,
+//                    pts,
+//                    boundaryPts,
+//                    dualPtIndexMap,
+//                    targetFaceSize,
+//                    GREAT,
+//                    maxFC
+//                );
+//
+//                if (mode == fcmPoint || mode == fcmEdge)
+//                {
+//                    nCollapsedFaces++;
+//                }
+//            }
+//        }
+//    }
+//
+//    return nCollapsedFaces;
+//}
+
+
+void Foam::conformalVoronoiMesh::deferredCollapseFaceSet
+(
+    labelList& owner,
+    labelList& neighbour,
+    const HashSet<labelPair, labelPair::Hash<> >& deferredCollapseFaces
+) const
+{
+    DynamicList<label> faceLabels;
+
+    forAll(neighbour, nI)
+    {
+        if (deferredCollapseFaces.found(Pair<label>(owner[nI], neighbour[nI])))
+        {
+            faceLabels.append(nI);
+        }
+    }
+
+    Pout<< "facesToCollapse" << nl << faceLabels << endl;
+}
+
+
+Foam::autoPtr<Foam::polyMesh>
+Foam::conformalVoronoiMesh::createPolyMeshFromPoints
+(
+    const pointField& pts
+) const
+{
+    faceList faces;
+    labelList owner;
+    labelList neighbour;
+    wordList patchTypes;
+    wordList patchNames;
+    labelList patchSizes;
+    labelList patchStarts;
+    labelList procNeighbours;
+    pointField cellCentres;
+    labelListList patchToDelaunayVertex;
+    PackedBoolList boundaryFacesToRemove;
+
+    timeCheck("Start of checkPolyMeshQuality");
+
+    Info<< nl << "Creating polyMesh to assess quality" << endl;
+
+    createFacesOwnerNeighbourAndPatches
+    (
+        faces,
+        owner,
+        neighbour,
+        patchTypes,
+        patchNames,
+        patchSizes,
+        patchStarts,
+        procNeighbours,
+        patchToDelaunayVertex,
+        boundaryFacesToRemove,
+        false
+    );
+
+    //createCellCentres(cellCentres);
+    cellCentres = allPoints();
+
+    labelList cellToDelaunayVertex(removeUnusedCells(owner, neighbour));
+    cellCentres = pointField(cellCentres, cellToDelaunayVertex);
+
+    autoPtr<polyMesh> meshPtr
+    (
+        new polyMesh
+        (
+            IOobject
+            (
+                "cvMesh_temporary",
+                runTime_.timeName(),
+                runTime_,
+                IOobject::NO_READ,
+                IOobject::NO_WRITE
+            ),
+            xferCopy(pts),
+            xferMove(faces),
+            xferMove(owner),
+            xferMove(neighbour)
+        )
+    );
+
+    polyMesh& pMesh = meshPtr();
+
+    List<polyPatch*> patches(patchStarts.size());
+
+    label nValidPatches = 0;
+
+    forAll(patches, p)
+    {
+       if (patchTypes[p] == processorPolyPatch::typeName)
+       {
+           // Do not create empty processor patches
+           if (patchSizes[p] > 0)
+           {
+               patches[nValidPatches] = new processorPolyPatch
+               (
+                   patchNames[p],
+                   patchSizes[p],
+                   patchStarts[p],
+                   nValidPatches,
+                   pMesh.boundaryMesh(),
+                   Pstream::myProcNo(),
+                   procNeighbours[p],
+                   coupledPolyPatch::COINCIDENTFULLMATCH
+               );
+
+               nValidPatches++;
+           }
+       }
+       else
+       {
+           patches[nValidPatches] = polyPatch::New
+           (
+               patchTypes[p],
+               patchNames[p],
+               patchSizes[p],
+               patchStarts[p],
+               nValidPatches,
+               pMesh.boundaryMesh()
+           ).ptr();
+
+           nValidPatches++;
+       }
+    }
+
+    patches.setSize(nValidPatches);
+
+    pMesh.addPatches(patches);
+
+    // Info<< "ADDPATCHES NOT IN PARALLEL" << endl;
+
+    // forAll(patches, p)
+    // {
+    //     patches[p] = new polyPatch
+    //     (
+    //         patchNames[p],
+    //         patchSizes[p],
+    //         patchStarts[p],
+    //         p,
+    //         pMesh.boundaryMesh()
+    //     );
+    // }
+
+    // pMesh.addPatches(patches, false);
+
+    // pMesh.overrideCellCentres(cellCentres);
+
+    return meshPtr;
+}
+
+
+void Foam::conformalVoronoiMesh::checkCellSizing()
+{
+    Info<< "Checking cell sizes..."<< endl;
+
+    timeCheck("Start of Cell Sizing");
+
+    labelList boundaryPts(number_of_finite_cells(), -1);
+    pointField ptsField;
+
+    indexDualVertices(ptsField, boundaryPts);
+
+    // Merge close dual vertices.
+    mergeIdenticalDualVertices(ptsField, boundaryPts);
+
+    autoPtr<polyMesh> meshPtr = createPolyMeshFromPoints(ptsField);
+    const polyMesh& pMesh = meshPtr();
+
+    //pMesh.write();
+
+    // Find cells with poor quality
+    DynamicList<label> checkFaces(identity(pMesh.nFaces()));
+    labelHashSet wrongFaces(pMesh.nFaces()/100);
+
+    Info<< "Running checkMesh on mesh with " << pMesh.nCells()
+        << " cells "<< endl;
+
+    const dictionary& dict
+        = cvMeshControls().cvMeshDict().subDict("meshQualityControls");
+
+    const scalar maxNonOrtho = readScalar(dict.lookup("maxNonOrtho", true));
+
+    label nWrongFaces = 0;
+
+    if (maxNonOrtho < 180.0 - SMALL)
+    {
+        polyMeshGeometry::checkFaceDotProduct
+        (
+            false,
+            maxNonOrtho,
+            pMesh,
+            pMesh.cellCentres(),
+            pMesh.faceAreas(),
+            checkFaces,
+            List<labelPair>(),
+            &wrongFaces
+        );
+
+        label nNonOrthogonal = returnReduce(wrongFaces.size(), sumOp<label>());
+
+        Info<< "    non-orthogonality > " << maxNonOrtho
+            << " degrees : " << nNonOrthogonal << endl;
+
+        nWrongFaces += nNonOrthogonal;
+    }
+
+    labelHashSet protrudingCells = findOffsetPatchFaces(pMesh, 0.25);
+
+    label nProtrudingCells = protrudingCells.size();
+
+    Info<< "    protruding/intruding cells : " << nProtrudingCells << endl;
+
+    nWrongFaces += nProtrudingCells;
+
+//    motionSmoother::checkMesh
+//    (
+//        false,
+//        pMesh,
+//        cvMeshControls().cvMeshDict().subDict("meshQualityControls"),
+//        checkFaces,
+//        wrongFaces
+//    );
+
+    Info<< "    Found total of " << nWrongFaces << " bad faces" << endl;
+
+    {
+        labelHashSet cellsToResizeMap(pMesh.nFaces()/100);
+
+        // Find cells that are attached to the faces in wrongFaces.
+        forAllConstIter(labelHashSet, wrongFaces, iter)
+        {
+            const label faceOwner = pMesh.faceOwner()[iter.key()];
+            const label faceNeighbour = pMesh.faceNeighbour()[iter.key()];
+
+            if (!cellsToResizeMap.found(faceOwner))
+            {
+                cellsToResizeMap.insert(faceOwner);
+            }
+
+            if (!cellsToResizeMap.found(faceNeighbour))
+            {
+                cellsToResizeMap.insert(faceNeighbour);
+            }
+        }
+
+        cellsToResizeMap += protrudingCells;
+
+        pointField cellsToResize(cellsToResizeMap.size());
+
+        label count = 0;
+        for (label cellI = 0; cellI < pMesh.nCells(); ++cellI)
+        {
+            if (cellsToResizeMap.found(cellI))
+            {
+                cellsToResize[count++] = pMesh.cellCentres()[cellI];
+            }
+        }
+
+        Info<< "    DISABLED: Automatically re-sizing " << cellsToResize.size()
+            << " cells that are attached to the bad faces: " << endl;
+
+        //cellSizeControl_.setCellSizes(cellsToResize);
+    }
+
+    timeCheck("End of Cell Sizing");
+
+    Info<< "Finished checking cell sizes"<< endl;
+}
+
+
+Foam::labelHashSet Foam::conformalVoronoiMesh::findOffsetPatchFaces
+(
+    const polyMesh& mesh,
+    const scalar allowedOffset
+) const
+{
+    timeCheck("Start findRemainingProtrusionSet");
+
+    const polyBoundaryMesh& patches = mesh.boundaryMesh();
+
+    cellSet offsetBoundaryCells
+    (
+        mesh,
+        "cvMesh_protrudingCells",
+        mesh.nCells()/1000
+    );
+
+    forAll(patches, patchI)
+    {
+        const polyPatch& patch = patches[patchI];
+
+        const faceList& localFaces = patch.localFaces();
+        const pointField& localPoints = patch.localPoints();
+
+        const labelList& fCell = patch.faceCells();
+
+        forAll(localFaces, pLFI)
+        {
+            const face& f = localFaces[pLFI];
+
+            const Foam::point& faceCentre = f.centre(localPoints);
+
+            const scalar targetSize = targetCellSize(faceCentre);
+
+            pointIndexHit pHit;
+            label surfHit = -1;
+
+            geometryToConformTo_.findSurfaceNearest
+            (
+                faceCentre,
+                sqr(targetSize),
+                pHit,
+                surfHit
+            );
+
+            if
+            (
+                pHit.hit()
+             && (mag(pHit.hitPoint() - faceCentre) > allowedOffset*targetSize)
+            )
+            {
+                offsetBoundaryCells.insert(fCell[pLFI]);
+            }
+        }
+    }
+
+    if (cvMeshControls().objOutput())
+    {
+        offsetBoundaryCells.write();
+    }
+
+    return offsetBoundaryCells;
+}
+
+
+Foam::labelHashSet Foam::conformalVoronoiMesh::checkPolyMeshQuality
+(
+    const pointField& pts
+) const
+{
+    autoPtr<polyMesh> meshPtr = createPolyMeshFromPoints(pts);
+    polyMesh& pMesh = meshPtr();
+
+    timeCheck("polyMesh created, checking quality");
+
+    labelHashSet wrongFaces(pMesh.nFaces()/100);
+
+    DynamicList<label> checkFaces(pMesh.nFaces());
+
+    const vectorField& fAreas = pMesh.faceAreas();
+
+    scalar faceAreaLimit = SMALL;
+
+    forAll(fAreas, fI)
+    {
+        if (mag(fAreas[fI]) > faceAreaLimit)
+        {
+            checkFaces.append(fI);
+        }
+    }
+
+    Info<< nl << "Excluding "
+        << returnReduce(fAreas.size() - checkFaces.size(), sumOp<label>())
+        << " faces from check, < " << faceAreaLimit << " area" << endl;
+
+    motionSmoother::checkMesh
+    (
+        false,
+        pMesh,
+        cvMeshControls().cvMeshDict().subDict("meshQualityControls"),
+        checkFaces,
+        wrongFaces
+    );
+
+    {
+        // Check for cells with more than 1 but fewer than 4 faces
+        label nInvalidPolyhedra = 0;
+
+        const cellList& cells = pMesh.cells();
+
+        forAll(cells, cI)
+        {
+            if (cells[cI].size() < 4 && cells[cI].size() > 0)
+            {
+                // Pout<< "cell " << cI << " " << cells[cI]
+                //     << " has " << cells[cI].size() << " faces."
+                //     << endl;
+
+                nInvalidPolyhedra++;
+
+                forAll(cells[cI], cFI)
+                {
+                    wrongFaces.insert(cells[cI][cFI]);
+                }
+            }
+        }
+
+        Info<< "    cells with more than 1 but fewer than 4 faces          : "
+            << returnReduce(nInvalidPolyhedra, sumOp<label>())
+            << endl;
+
+        // Check for cells with one internal face only
+
+        labelList nInternalFaces(pMesh.nCells(), 0);
+
+        for (label fI = 0; fI < pMesh.nInternalFaces(); fI++)
+        {
+            nInternalFaces[pMesh.faceOwner()[fI]]++;
+            nInternalFaces[pMesh.faceNeighbour()[fI]]++;
+        }
+
+        const polyBoundaryMesh& patches = pMesh.boundaryMesh();
+
+        forAll(patches, patchI)
+        {
+            if (patches[patchI].coupled())
+            {
+                const labelUList& owners = patches[patchI].faceCells();
+
+                forAll(owners, i)
+                {
+                    nInternalFaces[owners[i]]++;
+                }
+            }
+        }
+
+        label oneInternalFaceCells = 0;
+
+        forAll(nInternalFaces, cI)
+        {
+            if (nInternalFaces[cI] <= 1)
+            {
+                oneInternalFaceCells++;
+
+                forAll(cells[cI], cFI)
+                {
+                    wrongFaces.insert(cells[cI][cFI]);
+                }
+            }
+        }
+
+        Info<< "    cells with with zero or one non-boundary face          : "
+            << returnReduce(oneInternalFaceCells, sumOp<label>())
+            << endl;
+    }
+
+
+    PackedBoolList ptToBeLimited(pts.size(), false);
+
+    forAllConstIter(labelHashSet, wrongFaces, iter)
+    {
+        const face f = pMesh.faces()[iter.key()];
+
+        forAll(f, fPtI)
+        {
+            ptToBeLimited[f[fPtI]] = true;
+        }
+    }
+
+    // // Limit connected cells
+
+    // labelHashSet limitCells(pMesh.nCells()/100);
+
+    // const labelListList& ptCells = pMesh.pointCells();
+
+    // forAllConstIter(labelHashSet, wrongFaces, iter)
+    // {
+    //     const face f = pMesh.faces()[iter.key()];
+
+    //     forAll(f, fPtI)
+    //     {
+    //         label ptI = f[fPtI];
+
+    //         const labelList& pC = ptCells[ptI];
+
+    //         forAll(pC, pCI)
+    //         {
+    //             limitCells.insert(pC[pCI]);
+    //         }
+    //     }
+    // }
+
+    // const labelListList& cellPts = pMesh.cellPoints();
+
+    // forAllConstIter(labelHashSet, limitCells, iter)
+    // {
+    //     label cellI = iter.key();
+
+    //     const labelList& cP = cellPts[cellI];
+
+    //     forAll(cP, cPI)
+    //     {
+    //         ptToBeLimited[cP[cPI]] = true;
+    //     }
+    // }
+
+
+    // Apply Delaunay cell filterCounts and determine the maximum
+    // overall filterCount
+
+    label maxFilterCount = 0;
+
+    for
+    (
+        Delaunay::Finite_cells_iterator cit = finite_cells_begin();
+        cit != finite_cells_end();
+        ++cit
+    )
+    {
+        label cI = cit->cellIndex();
+
+        if (cI >= 0)
+        {
+            if (ptToBeLimited[cI] == true)
+            {
+                cit->filterCount()++;
+            }
+
+            if (cit->filterCount() > maxFilterCount)
+            {
+                maxFilterCount = cit->filterCount();
+            }
+        }
+    }
+
+    Info<< nl << "Maximum number of filter limits applied: "
+        << returnReduce(maxFilterCount, maxOp<label>()) << endl;
+
+    return wrongFaces;
+}
+
+
+void Foam::conformalVoronoiMesh::indexDualVertices
+(
+    pointField& pts,
+    labelList& boundaryPts
+)
+{
+    // Indexing Delaunay cells, which are the dual vertices
+
+    this->resetCellCount();
+
+    pts.setSize(number_of_finite_cells());
+
+    boundaryPts.setSize(number_of_finite_cells(), -1);
+
+    for
+    (
+        Delaunay::Finite_cells_iterator cit = finite_cells_begin();
+        cit != finite_cells_end();
+        ++cit
+    )
+    {
+//        if (tetrahedron(cit).volume() == 0)
+//        {
+//            Pout<< "ZERO VOLUME TET" << endl;
+//            Pout<< cit->info();
+//            Pout<< "Dual = " << cit->dual();
+//        }
+
+        if (!cit->hasFarPoint())
+        {
+            cit->cellIndex() = getNewCellIndex();
+
+            // For nearly coplanar Delaunay cells that are present on different
+            // processors the result of the circumcentre calculation depends on
+            // the ordering of the vertices, so synchronise it across processors
+
+            if (Pstream::parRun() && cit->parallelDualVertex())
+            {
+                typedef CGAL::Exact_predicates_exact_constructions_kernel Exact;
+                typedef CGAL::Point_3<Exact> ExactPoint;
+
+                List<labelPair> cellVerticesPair(4);
+                List<ExactPoint> cellVertices(4);
+
+                for (label vI = 0; vI < 4; ++vI)
+                {
+                    cellVerticesPair[vI] = labelPair
+                    (
+                        cit->vertex(vI)->procIndex(),
+                        cit->vertex(vI)->index()
+                    );
+
+                    cellVertices[vI] = ExactPoint
+                    (
+                        cit->vertex(vI)->point().x(),
+                        cit->vertex(vI)->point().y(),
+                        cit->vertex(vI)->point().z()
+                    );
+                }
+
+                // Sort the vertices so that they will be in the same order on
+                // each processor
+                labelList oldToNew;
+                sortedOrder(cellVerticesPair, oldToNew);
+                oldToNew = invert(oldToNew.size(), oldToNew);
+                inplaceReorder(oldToNew, cellVertices);
+
+                ExactPoint synchronisedDual = CGAL::circumcenter
+                (
+                    cellVertices[0],
+                    cellVertices[1],
+                    cellVertices[2],
+                    cellVertices[3]
+                );
+
+                pts[cit->cellIndex()] = Foam::point
+                (
+                    CGAL::to_double(synchronisedDual.x()),
+                    CGAL::to_double(synchronisedDual.y()),
+                    CGAL::to_double(synchronisedDual.z())
+                );
+            }
+            else
+            {
+                pts[cit->cellIndex()] = cit->dual();
+            }
+
+            if (cit->boundaryDualVertex())
+            {
+                if (cit->featureEdgeDualVertex())
+                {
+                    boundaryPts[cit->cellIndex()] = 1;
+                }
+                else
+                {
+                    boundaryPts[cit->cellIndex()] = 0;
+                }
+            }
+        }
+        else
+        {
+            cit->cellIndex() = Cb::ctFar;
+        }
+    }
+
+    pts.setSize(this->cellCount());
+
+    boundaryPts.setSize(this->cellCount());
+}
+
+
+void Foam::conformalVoronoiMesh::reindexDualVertices
+(
+    const Map<label>& dualPtIndexMap
+)
+{
+    for
+    (
+        Delaunay::Finite_cells_iterator cit = finite_cells_begin();
+        cit != finite_cells_end();
+        ++cit
+    )
+    {
+        if (dualPtIndexMap.found(cit->cellIndex()))
+        {
+            cit->cellIndex() = dualPtIndexMap[cit->cellIndex()];
+        }
+    }
+}
+
+
+Foam::label Foam::conformalVoronoiMesh::createPatchInfo
+(
+    wordList& patchNames,
+    wordList& patchTypes,
+    labelList& procNeighbours
+) const
+{
+    patchNames = geometryToConformTo_.patchNames();
+    patchTypes.setSize(patchNames.size() + 1, wallPolyPatch::typeName);
+    procNeighbours.setSize(patchNames.size() + 1, -1);
+
+    patchNames.setSize(patchNames.size() + 1);
+
+    label defaultPatchIndex = patchNames.size() - 1;
+
+    patchTypes[defaultPatchIndex] = wallPolyPatch::typeName;
+    procNeighbours[defaultPatchIndex] = -1;
+    patchNames[defaultPatchIndex] = "cvMesh_defaultPatch";
+
+    label nProcPatches = 0;
+
+    if (Pstream::parRun())
+    {
+        List<boolList> procUsedList
+        (
+            Pstream::nProcs(),
+            boolList(Pstream::nProcs(), false)
+        );
+
+        boolList& procUsed = procUsedList[Pstream::myProcNo()];
+
+        // Determine which processor patches are required
+        for
+        (
+            Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
+            vit != finite_vertices_end();
+            vit++
+        )
+        {
+            // This test is not sufficient if one of the processors does
+            // not receive a referred vertex from another processor, but does
+            // send one to the other processor.
+            if (vit->referred())
+            {
+                procUsed[vit->procIndex()] = true;
+            }
+        }
+
+        // Because the previous test was insufficient, combine the lists.
+        Pstream::gatherList(procUsedList);
+        Pstream::scatterList(procUsedList);
+
+        forAll(procUsedList, procI)
+        {
+            if (procI != Pstream::myProcNo())
+            {
+                if (procUsedList[procI][Pstream::myProcNo()])
+                {
+                    procUsed[procI] = true;
+                }
+            }
+        }
+
+        forAll(procUsed, pUI)
+        {
+            if (procUsed[pUI])
+            {
+                nProcPatches++;
+            }
+        }
+
+        label nNonProcPatches = patchNames.size();
+
+        patchNames.setSize(nNonProcPatches + nProcPatches);
+        patchTypes.setSize(nNonProcPatches + nProcPatches);
+        procNeighbours.setSize(nNonProcPatches + nProcPatches, -1);
+
+        label procAddI = 0;
+
+        forAll(procUsed, pUI)
+        {
+            if (procUsed[pUI])
+            {
+                patchTypes[nNonProcPatches + procAddI] =
+                    processorPolyPatch::typeName;
+
+                patchNames[nNonProcPatches + procAddI] =
+                    "procBoundary"
+                   + name(Pstream::myProcNo())
+                   + "to"
+                   + name(pUI);
+
+                procNeighbours[nNonProcPatches + procAddI] = pUI;
+
+                procAddI++;
+            }
+        }
+    }
+
+    return defaultPatchIndex;
+}
+
+
+void Foam::conformalVoronoiMesh::createFacesOwnerNeighbourAndPatches
+(
+    faceList& faces,
+    labelList& owner,
+    labelList& neighbour,
+    wordList& patchTypes,
+    wordList& patchNames,
+    labelList& patchSizes,
+    labelList& patchStarts,
+    labelList& procNeighbours,
+    labelListList& patchPointPairSlaves,
+    PackedBoolList& boundaryFacesToRemove,
+    bool includeEmptyPatches
+) const
+{
+    const label defaultPatchIndex = createPatchInfo
+    (
+        patchNames,
+        patchTypes,
+        procNeighbours
+    );
+
+    const label nPatches = patchNames.size();
+
+    List<DynamicList<face> > patchFaces(nPatches, DynamicList<face>(0));
+    List<DynamicList<label> > patchOwners(nPatches, DynamicList<label>(0));
+    // Per patch face the index of the slave node of the point pair
+    List<DynamicList<label> > patchPPSlaves(nPatches, DynamicList<label>(0));
+
+    List<DynamicList<bool> > indirectPatchFace(nPatches, DynamicList<bool>(0));
+
+    faces.setSize(number_of_finite_edges());
+    owner.setSize(number_of_finite_edges());
+    neighbour.setSize(number_of_finite_edges());
+
+    labelPairPairDynListList procPatchSortingIndex(nPatches);
+
+    label dualFaceI = 0;
+
+    for
+    (
+        Delaunay::Finite_edges_iterator eit = finite_edges_begin();
+        eit != finite_edges_end();
+        ++eit
+    )
+    {
+        Cell_handle c = eit->first;
+        Vertex_handle vA = c->vertex(eit->second);
+        Vertex_handle vB = c->vertex(eit->third);
+
+        if
+        (
+            (vA->internalOrBoundaryPoint() && !vA->referred())
+         || (vB->internalOrBoundaryPoint() && !vB->referred())
+        )
+        {
+            face newDualFace = buildDualFace(eit);
+
+            if (newDualFace.size() >= 3)
+            {
+                label own = -1;
+                label nei = -1;
+
+                if (ownerAndNeighbour(vA, vB, own, nei))
+                {
+                    reverse(newDualFace);
+                }
+
+                if (nei == -1)
+                {
+                    // boundary face
+
+                    pointFromPoint ptA = topoint(vA->point());
+                    pointFromPoint ptB = topoint(vB->point());
+
+                    label patchIndex = -1;
+
+                    if (isProcBoundaryEdge(eit))
+                    {
+                        // One (and only one) of the points is an internal
+                        // point from another processor
+
+                        label procIndex = max(vA->procIndex(), vB->procIndex());
+
+                        patchIndex = max
+                        (
+                            findIndex(procNeighbours, vA->procIndex()),
+                            findIndex(procNeighbours, vB->procIndex())
+                        );
+
+                        // The lower processor index is the owner of the
+                        // two for the purpose of sorting the patch faces.
+
+                        if (Pstream::myProcNo() < procIndex)
+                        {
+                            // Use this processor's vertex index as the master
+                            // for sorting
+
+                            DynamicList<Pair<labelPair> >& sortingIndex =
+                                procPatchSortingIndex[patchIndex];
+
+                            if (vB->internalOrBoundaryPoint() && vB->referred())
+                            {
+                                sortingIndex.append
+                                (
+                                    Pair<labelPair>
+                                    (
+                                        labelPair(vA->index(), vA->procIndex()),
+                                        labelPair(vB->index(), vB->procIndex())
+                                    )
+                                );
+                            }
+                            else
+                            {
+                                sortingIndex.append
+                                (
+                                    Pair<labelPair>
+                                    (
+                                        labelPair(vB->index(), vB->procIndex()),
+                                        labelPair(vA->index(), vA->procIndex())
+                                    )
+                                );
+                            }
+                        }
+                        else
+                        {
+                            // Use the other processor's vertex index as the
+                            // master for sorting
+
+                            DynamicList<Pair<labelPair> >& sortingIndex =
+                                procPatchSortingIndex[patchIndex];
+
+                            if (vA->internalOrBoundaryPoint() && vA->referred())
+                            {
+                                sortingIndex.append
+                                (
+                                    Pair<labelPair>
+                                    (
+                                        labelPair(vA->index(), vA->procIndex()),
+                                        labelPair(vB->index(), vB->procIndex())
+                                    )
+                                );
+                            }
+                            else
+                            {
+                                sortingIndex.append
+                                (
+                                    Pair<labelPair>
+                                    (
+                                        labelPair(vB->index(), vB->procIndex()),
+                                        labelPair(vA->index(), vA->procIndex())
+                                    )
+                                );
+                            }
+                        }
+
+//                        Pout<< ptA << " " << ptB
+//                            << " proc indices "
+//                            << vA->procIndex() << " " << vB->procIndex()
+//                            << " indices " << vA->index()
+//                            << " " << vB->index()
+//                            << " my proc " << Pstream::myProcNo()
+//                            << " addedIndex "
+//                            << procPatchSortingIndex[patchIndex].last()
+//                            << endl;
+                    }
+                    else
+                    {
+                        patchIndex = geometryToConformTo_.findPatch(ptA, ptB);
+                    }
+
+                    if (patchIndex == -1)
+                    {
+                        // Did not find a surface patch between
+                        // between Dv pair, finding nearest patch
+
+//                         Pout<< "Did not find a surface patch between "
+//                             << "for face, finding nearest patch to"
+//                             << 0.5*(ptA + ptB) << endl;
+
+                        patchIndex = geometryToConformTo_.findPatch
+                        (
+                            0.5*(ptA + ptB)
+                        );
+                    }
+
+                    patchFaces[patchIndex].append(newDualFace);
+                    patchOwners[patchIndex].append(own);
+
+                    // If the two vertices are a pair, then the patch face is
+                    // a desired one.
+                    if (!isPointPair(vA, vB))
+                    {
+                        indirectPatchFace[patchIndex].append(true);
+                    }
+                    else
+                    {
+                        indirectPatchFace[patchIndex].append(false);
+                    }
+
+                    // Store the non-internal or boundary point
+                    if (vA->internalOrBoundaryPoint())
+                    {
+                        patchPPSlaves[patchIndex].append(vB->index());
+                    }
+                    else
+                    {
+                        patchPPSlaves[patchIndex].append(vA->index());
+                    }
+                }
+                else
+                {
+                    // internal face
+                    faces[dualFaceI] = newDualFace;
+                    owner[dualFaceI] = own;
+                    neighbour[dualFaceI] = nei;
+
+                    dualFaceI++;
+                }
+            }
+        }
+    }
+
+    if (!patchFaces[defaultPatchIndex].empty())
+    {
+        Pout<< nl << patchFaces[defaultPatchIndex].size()
+            << " faces were not able to have their patch determined from "
+            << "the surface. "
+            << nl <<  "Adding to patch " << patchNames[defaultPatchIndex]
+            << endl;
+    }
+
+    label nInternalFaces = dualFaceI;
+
+    faces.setSize(nInternalFaces);
+    owner.setSize(nInternalFaces);
+    neighbour.setSize(nInternalFaces);
+
+    timeCheck("polyMesh quality checked");
+
+    sortFaces(faces, owner, neighbour);
+
+    sortProcPatches
+    (
+        patchFaces,
+        patchOwners,
+        patchPPSlaves,
+        procPatchSortingIndex
+    );
+
+    timeCheck("faces, owner, neighbour sorted");
+
+    addPatches
+    (
+        nInternalFaces,
+        faces,
+        owner,
+        patchSizes,
+        patchStarts,
+        boundaryFacesToRemove,
+        patchFaces,
+        patchOwners,
+        indirectPatchFace
+    );
+
+    // Return     patchPointPairSlaves.setSize(nPatches);
+    patchPointPairSlaves.setSize(nPatches);
+    forAll(patchPPSlaves, patchI)
+    {
+        patchPointPairSlaves[patchI].transfer(patchPPSlaves[patchI]);
+    }
+
+//    if (cvMeshControls().objOutput())
+    {
+        Info<< "Writing processor interfaces" << endl;
+
+        forAll(procNeighbours, nbI)
+        {
+            if (patchFaces[nbI].size() > 0)
+            {
+                const label neighbour = procNeighbours[nbI];
+
+                faceList procPatchFaces = patchFaces[nbI];
+
+                // Reverse faces as it makes it easier to analyse the output
+                // using a diff
+                if (neighbour < Pstream::myProcNo())
+                {
+                    forAll(procPatchFaces, fI)
+                    {
+                        procPatchFaces[fI] = procPatchFaces[fI].reverseFace();
+                    }
+                }
+
+                if (neighbour != -1)
+                {
+                    word fName =
+                        "processor_"
+                      + name(Pstream::myProcNo())
+                      + "_to_"
+                      + name(neighbour)
+                      + "_interface.obj";
+
+                    writeProcessorInterface(fName, procPatchFaces);
+                }
+            }
+        }
+    }
+}
+
+
+void Foam::conformalVoronoiMesh::createCellCentres
+(
+    pointField& cellCentres
+) const
+{
+    cellCentres.setSize(number_of_vertices(), point::max);
+
+    label vertI = 0;
+
+    for
+    (
+        Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        ++vit
+    )
+    {
+        if (vit->internalOrBoundaryPoint())
+        {
+            cellCentres[vertI++] = topoint(vit->point());
+        }
+    }
+
+    cellCentres.setSize(vertI);
+}
+
+
+Foam::tmp<Foam::pointField> Foam::conformalVoronoiMesh::allPoints() const
+{
+    tmp<pointField> tpts(new pointField(number_of_vertices(), point::max));
+    pointField& pts = tpts();
+
+    label nVert = 0;
+
+    for
+    (
+        Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        ++vit
+    )
+    {
+        if (vit->internalOrBoundaryPoint())
+        {
+            pts[nVert++] = topoint(vit->point());
+        }
+    }
+
+    return tpts;
+}
+
+
+void Foam::conformalVoronoiMesh::sortFaces
+(
+    faceList& faces,
+    labelList& owner,
+    labelList& neighbour
+) const
+{
+    // Upper triangular order:
+    // + owner is sorted in ascending cell order
+    // + within each block of equal value for owner, neighbour is sorted in
+    //   ascending cell order.
+    // + faces sorted to correspond
+    // e.g.
+    // owner | neighbour
+    // 0     | 2
+    // 0     | 23
+    // 0     | 71
+    // 1     | 23
+    // 1     | 24
+    // 1     | 91
+
+    List<labelPair> ownerNeighbourPair(owner.size());
+
+    forAll(ownerNeighbourPair, oNI)
+    {
+        ownerNeighbourPair[oNI] = labelPair(owner[oNI], neighbour[oNI]);
+    }
+
+    Info<< nl
+        << "Sorting faces, owner and neighbour into upper triangular order"
+        << endl;
+
+    labelList oldToNew;
+
+    sortedOrder(ownerNeighbourPair, oldToNew);
+
+    oldToNew = invert(oldToNew.size(), oldToNew);
+
+    inplaceReorder(oldToNew, faces);
+    inplaceReorder(oldToNew, owner);
+    inplaceReorder(oldToNew, neighbour);
+}
+
+
+void Foam::conformalVoronoiMesh::sortProcPatches
+(
+    List<DynamicList<face> >& patchFaces,
+    List<DynamicList<label> >& patchOwners,
+    List<DynamicList<label> >& patchPointPairSlaves,
+    labelPairPairDynListList& patchSortingIndices
+) const
+{
+    if (!Pstream::parRun())
+    {
+        return;
+    }
+
+    forAll(patchSortingIndices, patchI)
+    {
+        faceList& faces = patchFaces[patchI];
+        labelList& owner = patchOwners[patchI];
+        DynamicList<label>& slaves = patchPointPairSlaves[patchI];
+
+        DynamicList<Pair<labelPair> >& sortingIndices
+            = patchSortingIndices[patchI];
+
+        if (!sortingIndices.empty())
+        {
+            if
+            (
+                faces.size() != sortingIndices.size()
+             || owner.size() != sortingIndices.size()
+             || slaves.size() != sortingIndices.size()
+            )
+            {
+                FatalErrorIn
+                (
+                    "void Foam::conformalVoronoiMesh::sortProcPatches"
+                    "("
+                        "List<DynamicList<face> >& patchFaces, "
+                        "List<DynamicList<label> >& patchOwners, "
+                        "const List<DynamicList<label> >& patchSortingIndices"
+                    ") const"
+                )
+                    << "patch size and size of sorting indices is inconsistent "
+                    << " for patch " << patchI << nl
+                    << " faces.size() " << faces.size() << nl
+                    << " owner.size() " << owner.size() << nl
+                    << " slaves.size() " << slaves.size() << nl
+                    << " sortingIndices.size() "
+                    << sortingIndices.size()
+                    << exit(FatalError) << endl;
+            }
+
+            labelList oldToNew;
+
+            sortedOrder(sortingIndices, oldToNew);
+
+            oldToNew = invert(oldToNew.size(), oldToNew);
+
+            inplaceReorder(oldToNew, sortingIndices);
+            inplaceReorder(oldToNew, faces);
+            inplaceReorder(oldToNew, owner);
+            inplaceReorder(oldToNew, slaves);
+        }
+    }
+}
+
+
+void Foam::conformalVoronoiMesh::addPatches
+(
+    const label nInternalFaces,
+    faceList& faces,
+    labelList& owner,
+    labelList& patchSizes,
+    labelList& patchStarts,
+    PackedBoolList& boundaryFacesToRemove,
+    const List<DynamicList<face> >& patchFaces,
+    const List<DynamicList<label> >& patchOwners,
+    const List<DynamicList<bool> >& indirectPatchFace
+) const
+{
+    label nPatches = patchFaces.size();
+
+    patchSizes.setSize(nPatches, -1);
+    patchStarts.setSize(nPatches, -1);
+
+    label nBoundaryFaces = 0;
+
+    forAll(patchFaces, p)
+    {
+        patchSizes[p] = patchFaces[p].size();
+        patchStarts[p] = nInternalFaces + nBoundaryFaces;
+
+        nBoundaryFaces += patchSizes[p];
+    }
+
+    faces.setSize(nInternalFaces + nBoundaryFaces);
+    owner.setSize(nInternalFaces + nBoundaryFaces);
+
+    label faceI = nInternalFaces;
+
+    forAll(patchFaces, p)
+    {
+        forAll(patchFaces[p], f)
+        {
+            faces[faceI] = patchFaces[p][f];
+            owner[faceI] = patchOwners[p][f];
+            boundaryFacesToRemove[faceI] = indirectPatchFace[p][f];
+
+            faceI++;
+        }
+    }
+}
+
+
+void Foam::conformalVoronoiMesh::removeUnusedPoints
+(
+    faceList& faces,
+    pointField& pts,
+    labelList& boundaryPts
+) const
+{
+    Info<< nl << "Removing unused points" << endl;
+
+    PackedBoolList ptUsed(pts.size(), false);
+
+    // Scan all faces to find all of the points that are used
+
+    forAll(faces, fI)
+    {
+        const face& f = faces[fI];
+
+        forAll(f, fPtI)
+        {
+            ptUsed[f[fPtI]] = true;
+        }
+    }
+
+    label pointI = 0;
+
+    labelList oldToNew(pts.size(), -1);
+
+    // Move all of the used points to the start of the pointField and
+    // truncate it
+
+    forAll(ptUsed, ptUI)
+    {
+        if (ptUsed[ptUI] == true)
+        {
+            oldToNew[ptUI] = pointI++;
+        }
+    }
+
+    inplaceReorder(oldToNew, pts);
+    inplaceReorder(oldToNew, boundaryPts);
+
+    Info<< "    Removing "
+        << returnReduce(pts.size() - pointI, sumOp<label>())
+        << " unused points"
+        << endl;
+
+    pts.setSize(pointI);
+    boundaryPts.setSize(pointI);
+
+    // Renumber the faces to use the new point numbers
+
+    forAll(faces, fI)
+    {
+        inplaceRenumber(oldToNew, faces[fI]);
+    }
+}
+
+
+Foam::labelList Foam::conformalVoronoiMesh::removeUnusedCells
+(
+    labelList& owner,
+    labelList& neighbour
+) const
+{
+    Info<< nl << "Removing unused cells" << endl;
+
+    PackedBoolList cellUsed(number_of_vertices(), false);
+
+    // Scan all faces to find all of the cells that are used
+
+    forAll(owner, oI)
+    {
+        cellUsed[owner[oI]] = true;
+    }
+
+    forAll(neighbour, nI)
+    {
+        cellUsed[neighbour[nI]] = true;
+    }
+
+    label cellI = 0;
+
+    labelList oldToNew(cellUsed.size(), -1);
+
+    // Move all of the used cellCentres to the start of the pointField and
+    // truncate it
+
+    forAll(cellUsed, cellUI)
+    {
+        if (cellUsed[cellUI] == true)
+        {
+            oldToNew[cellUI] = cellI++;
+        }
+    }
+
+    labelList newToOld(invert(cellI, oldToNew));
+
+    // Find all of the unused cells, create a list of them, then
+    // subtract one from each owner and neighbour entry for each of
+    // the unused cell indices that it is above.
+
+    DynamicList<label> unusedCells;
+
+    forAll(cellUsed, cUI)
+    {
+        if (cellUsed[cUI] == false)
+        {
+            unusedCells.append(cUI);
+        }
+    }
+
+    if (unusedCells.size() > 0)
+    {
+        Info<< "    Removing "
+            << returnReduce(unusedCells.size(), sumOp<label>())
+            <<  " unused cell labels" << endl;
+
+        forAll(owner, oI)
+        {
+            label& o = owner[oI];
+
+            o -= findLower(unusedCells, o) + 1;
+        }
+
+        forAll(neighbour, nI)
+        {
+            label& n = neighbour[nI];
+
+            n -= findLower(unusedCells, n) + 1;
+        }
+    }
+
+    return newToOld;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshConformToSurface.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshConformToSurface.C
new file mode 100644
index 0000000000000000000000000000000000000000..14c5428c816f2941e2889eb16fe92f8b128a1978
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshConformToSurface.C
@@ -0,0 +1,2106 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "conformalVoronoiMesh.H"
+#include "backgroundMeshDecomposition.H"
+#include "vectorTools.H"
+#include "indexedCellChecks.H"
+#include "IOmanip.H"
+
+using namespace Foam::vectorTools;
+
+const Foam::scalar Foam::conformalVoronoiMesh::searchConeAngle
+    = Foam::cos(degToRad(30));
+
+const Foam::scalar Foam::conformalVoronoiMesh::searchAngleOppositeSurface
+    = Foam::cos(degToRad(150));
+
+
+// * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * * //
+
+void Foam::conformalVoronoiMesh::conformToSurface()
+{
+    this->resetCellCount();
+    // Index the cells
+    for
+    (
+        Delaunay::Finite_cells_iterator cit = finite_cells_begin();
+        cit != finite_cells_end();
+        ++cit
+    )
+    {
+        cit->cellIndex() = Cb::ctUnassigned;
+    }
+
+    if (reconformationControl() == rmOff)
+    {
+        // Reinsert stored surface conformation
+        reinsertSurfaceConformation();
+
+        if (Pstream::parRun())
+        {
+            sync(decomposition_().procBounds());
+        }
+    }
+    else
+    {
+        // Rebuild, insert and store new surface conformation
+        buildSurfaceConformation();
+
+        if (distributeBackground())
+        {
+            if (Pstream::parRun())
+            {
+                sync(decomposition_().procBounds());
+            }
+
+            // Use storeSizesAndAlignments with no feed points because all
+            // background points may have been distributed.
+            storeSizesAndAlignments();
+        }
+
+        // Do not store the surface conformation until after it has been
+        // (potentially) redistributed.
+        storeSurfaceConformation();
+    }
+
+    // reportSurfaceConformationQuality();
+}
+
+
+Foam::conformalVoronoiMesh::reconformationMode
+Foam::conformalVoronoiMesh::reconformationControl() const
+{
+    if
+    (
+        runTime_.timeIndex()
+      % cvMeshControls().surfaceConformationRebuildFrequency() == 0
+    )
+    {
+        return rmOn;
+    }
+
+    return rmOff;
+}
+
+
+// @todo Investigate topological tests
+Foam::label Foam::conformalVoronoiMesh::findVerticesNearBoundaries()
+{
+    label countNearBoundaryVertices = 0;
+
+    for
+    (
+        Delaunay::Finite_facets_iterator fit = finite_facets_begin();
+        fit != finite_facets_end();
+        ++fit
+    )
+    {
+        if
+        (
+            is_infinite(fit->first)
+         || is_infinite(fit->first->neighbor(fit->second))
+        )
+        {
+            continue;
+        }
+
+        Cell_handle c1 = fit->first;
+        Cell_handle c2 = fit->first->neighbor(fit->second);
+
+        pointFromPoint dE0 = c1->dual();
+        pointFromPoint dE1 = c2->dual();
+
+        if (!geometryToConformTo_.findSurfaceAnyIntersection(dE0, dE1))
+        {
+            continue;
+        }
+
+        for (label cellI = 0; cellI < 4; ++cellI)
+        {
+            Vertex_handle v = c1->vertex(cellI);
+
+            if
+            (
+                !is_infinite(v)
+             && v->internalPoint()
+             && fit->second != cellI
+            )
+            {
+                v->setNearBoundary();
+            }
+        }
+
+        for (label cellI = 0; cellI < 4; ++cellI)
+        {
+            Vertex_handle v = c2->vertex(cellI);
+
+            if
+            (
+                !is_infinite(v)
+             && v->internalPoint()
+             && fit->second != cellI
+            )
+            {
+                v->setNearBoundary();
+            }
+        }
+    }
+
+    for
+    (
+        Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        ++vit
+    )
+    {
+        if (vit->nearBoundary())
+        {
+            countNearBoundaryVertices++;
+        }
+    }
+
+    // Geometric test.
+//    for
+//    (
+//        Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
+//        vit != finite_vertices_end();
+//        ++vit
+//    )
+//    {
+//        if (vit->internalPoint() && !vit->nearBoundary())
+//        {
+//            pointFromPoint pt = topoint(vit->point());
+//
+//            const scalar range = sqr
+//            (
+//                cvMeshControls().nearBoundaryDistanceCoeff()
+//               *targetCellSize(pt)
+//            );
+//
+//            pointIndexHit pHit;
+//            label hitSurface;
+//
+//            geometryToConformTo_.findSurfaceNearest
+//            (
+//                pt,
+//                range,
+//                pHit,
+//                hitSurface
+//            );
+//
+//            if (pHit.hit())
+//            {
+//                vit->setNearBoundary();
+//                countNearBoundaryVertices++;
+//            }
+//        }
+//    }
+
+    return countNearBoundaryVertices;
+}
+
+
+void Foam::conformalVoronoiMesh::buildSurfaceConformation()
+{
+    timeCheck("Start buildSurfaceConformation");
+
+    if (reconformationControl() == rmOff)
+    {
+        WarningIn("buildSurfaceConformation()")
+            << "reconformationMode rmNone specified, not building conformation"
+            << endl;
+
+        return;
+    }
+    else
+    {
+        Info<< nl << "Rebuilding surface conformation for more iterations"
+            << endl;
+    }
+
+    existingEdgeLocations_.clearStorage();
+    existingSurfacePtLocations_.clearStorage();
+
+    buildEdgeLocationTree(existingEdgeLocations_);
+    buildSurfacePtLocationTree(existingSurfacePtLocations_);
+
+    label initialTotalHits = 0;
+
+    // Surface protrusion conformation is done in two steps.
+    // 1. the dual edges (of all internal vertices) can stretch to
+    //    'infinity' so any intersection would be badly behaved. So
+    //    just find the nearest point on the geometry and insert point
+    //    pairs.
+    // Now most of the surface conformation will be done with some
+    // residual protrusions / incursions.
+    // 2. find any segments of dual edges outside the geometry. Shoot
+    //    ray from Delaunay vertex to middle of this segment and introduce
+    //    point pairs. This will handle e.g.
+
+    // protruding section of face:
+    //
+    //     internal
+    // \             /
+    // -+-----------+-- boundary
+    //   \         /
+    //     --------
+    //
+    // Shoot ray and find intersection with outside segment (x) and
+    // introduce point pair (..)
+    //
+    //        |
+    // \      .      /
+    // -+-----|-----+-- boundary
+    //   \    .    /
+    //     ---x----
+
+    // Find vertices near boundaries to speed up subsequent checks.
+    label countNearBoundaryVertices = findVerticesNearBoundaries();
+
+    Info<< "    Vertices marked as being near a boundary: "
+        << returnReduce(countNearBoundaryVertices, sumOp<label>())
+        << " (estimated)" << endl;
+
+    timeCheck("After set near boundary");
+
+    const scalar edgeSearchDistCoeffSqr =
+        cvMeshControls().edgeSearchDistCoeffSqr();
+
+    const scalar surfacePtReplaceDistCoeffSqr =
+        cvMeshControls().surfacePtReplaceDistCoeffSqr();
+
+    const label AtoV = label(6/Foam::pow(scalar(number_of_vertices()), 3));
+
+    // Initial surface protrusion conformation - nearest surface point
+    {
+        pointIndexHitAndFeatureDynList featureEdgeHits(AtoV/4);
+        pointIndexHitAndFeatureDynList surfaceHits(AtoV);
+
+        for
+        (
+            Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
+            vit != finite_vertices_end();
+            vit++
+        )
+        {
+            if (vit->nearBoundary())
+            {
+                pointIndexHitAndFeatureDynList surfaceIntersections(AtoV);
+
+                if
+                (
+                    dualCellSurfaceAllIntersections
+                    (
+                        vit,
+                        surfaceIntersections
+                    )
+                )
+                {
+                    // meshTools::writeOBJ(Pout, vert);
+                    // meshTools::writeOBJ(Pout, surfHit.hitPoint());
+                    // Pout<< "l cr0 cr1" << endl;
+
+                    addSurfaceAndEdgeHits
+                    (
+                        vit,
+                        surfaceIntersections,
+                        surfacePtReplaceDistCoeffSqr,
+                        edgeSearchDistCoeffSqr,
+                        surfaceHits,
+                        featureEdgeHits
+                    );
+                }
+                else
+                {
+                    vit->setInternal();
+                    countNearBoundaryVertices--;
+                }
+            }
+        }
+
+        Info<< "    Vertices marked as being near a boundary: "
+            << returnReduce(countNearBoundaryVertices, sumOp<label>())
+            << " (after dual surface intersection)" << endl;
+
+        label nVerts = number_of_vertices();
+        label nSurfHits = surfaceHits.size();
+        label nFeatEdHits = featureEdgeHits.size();
+
+        if (Pstream::parRun())
+        {
+            reduce(nVerts, sumOp<label>());
+            reduce(nSurfHits, sumOp<label>());
+            reduce(nFeatEdHits, sumOp<label>());
+        }
+
+        Info<< nl << "Initial conformation" << nl
+            << "    Number of vertices " << nVerts << nl
+            << "    Number of surface hits " << nSurfHits << nl
+            << "    Number of edge hits " << nFeatEdHits
+            << endl;
+
+        // In parallel, synchronise the surface trees
+        if (Pstream::parRun())
+        {
+            synchroniseSurfaceTrees(surfaceHits);
+        }
+
+        insertSurfacePointPairs
+        (
+            surfaceHits,
+            "surfaceConformationLocations_initial.obj"
+        );
+
+        // In parallel, synchronise the edge trees
+        if (Pstream::parRun())
+        {
+            synchroniseEdgeTrees(featureEdgeHits);
+        }
+
+        insertEdgePointGroups
+        (
+            featureEdgeHits,
+            "edgeConformationLocations_initial.obj"
+        );
+
+        timeCheck("After initial conformation");
+
+        initialTotalHits = nSurfHits + nFeatEdHits;
+    }
+
+    // Remember which vertices were referred to each processor so only updates
+    // are sent.
+    PtrList<labelPairHashSet> referralVertices(Pstream::nProcs());
+
+    // Store the vertices that have been received and added from each processor
+    // already so that there is no attempt to add them more than once.
+    autoPtr<labelPairHashSet> receivedVertices;
+
+    if (Pstream::parRun())
+    {
+        forAll(referralVertices, procI)
+        {
+            if (procI != Pstream::myProcNo())
+            {
+                referralVertices.set
+                (
+                    procI,
+                    new labelPairHashSet(number_of_vertices()/Pstream::nProcs())
+                );
+            }
+        }
+
+        receivedVertices.set
+        (
+            new labelPairHashSet(number_of_vertices()/Pstream::nProcs())
+        );
+
+        // Build the parallel interface the initial surface conformation
+        sync
+        (
+            decomposition_().procBounds(),
+            referralVertices,
+            receivedVertices()
+        );
+    }
+
+    label iterationNo = 0;
+
+    label maxIterations = cvMeshControls().maxConformationIterations();
+
+    scalar iterationToInitialHitRatioLimit =
+        cvMeshControls().iterationToInitialHitRatioLimit();
+
+    label hitLimit = label(iterationToInitialHitRatioLimit*initialTotalHits);
+
+    Info<< nl << "Stopping iterations when: " << nl
+        << "    total number of hits drops below "
+        << iterationToInitialHitRatioLimit
+        << " of initial hits (" << hitLimit << ")" << nl
+        << " or " << nl
+        << "    maximum number of iterations (" << maxIterations
+        << ") is reached"
+        << endl;
+
+    // Set totalHits to a large enough positive value to enter the while loop on
+    // the first iteration
+    label totalHits = initialTotalHits;
+
+    while
+    (
+        totalHits > 0
+     && totalHits >= hitLimit
+     && iterationNo < maxIterations
+    )
+    {
+        pointIndexHitAndFeatureDynList surfaceHits(0.5*AtoV);
+        pointIndexHitAndFeatureDynList featureEdgeHits(0.25*AtoV);
+
+        for
+        (
+            Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
+            vit != finite_vertices_end();
+            ++vit
+        )
+        {
+            // The initial surface conformation has already identified the
+            // nearBoundary set of vertices.  Previously inserted boundary
+            // points and referred internal vertices from other processors can
+            // also generate protrusions and must be assessed too.
+            if
+            (
+                vit->nearBoundary()
+             || vit->internalBoundaryPoint()
+             || (vit->internalOrBoundaryPoint() && vit->referred())
+            )
+            {
+                pointIndexHitAndFeatureDynList surfaceIntersections(0.5*AtoV);
+
+                pointIndexHit surfHit;
+                label hitSurface;
+
+                // Find segments of dual face outside the geometry and find the
+                // the middle of this
+                dualCellLargestSurfaceProtrusion(vit, surfHit, hitSurface);
+
+                if (surfHit.hit())
+                {
+                    surfaceIntersections.append
+                    (
+                        pointIndexHitAndFeature(surfHit, hitSurface)
+                    );
+
+                    addSurfaceAndEdgeHits
+                    (
+                        vit,
+                        surfaceIntersections,
+                        surfacePtReplaceDistCoeffSqr,
+                        edgeSearchDistCoeffSqr,
+                        surfaceHits,
+                        featureEdgeHits
+                    );
+                }
+                else
+                {
+                    // No surface hit detected so if internal then don't check
+                    // again
+                    if (vit->nearBoundary())
+                    {
+                        vit->setInternal();
+                    }
+                }
+            }
+            else if (vit->externalBoundaryPoint())
+            {
+                pointIndexHitAndFeatureDynList surfaceIntersections(0.5*AtoV);
+
+                pointIndexHit surfHit;
+                label hitSurface;
+
+                // Detect slave (external vertices) whose dual face incurs
+                // into nearby (other than originating) geometry
+                dualCellLargestSurfaceIncursion(vit, surfHit, hitSurface);
+
+                if (surfHit.hit())
+                {
+                    surfaceIntersections.append
+                    (
+                        pointIndexHitAndFeature(surfHit, hitSurface)
+                    );
+
+                    addSurfaceAndEdgeHits
+                    (
+                        vit,
+                        surfaceIntersections,
+                        surfacePtReplaceDistCoeffSqr,
+                        edgeSearchDistCoeffSqr,
+                        surfaceHits,
+                        featureEdgeHits
+                    );
+                }
+            }
+        }
+
+        label nVerts = number_of_vertices();
+        label nSurfHits = surfaceHits.size();
+        label nFeatEdHits = featureEdgeHits.size();
+
+        if (Pstream::parRun())
+        {
+            reduce(nVerts, sumOp<label>());
+            reduce(nSurfHits, sumOp<label>());
+            reduce(nFeatEdHits, sumOp<label>());
+        }
+
+        Info<< nl << "Conformation iteration " << iterationNo << nl
+            << "    Number of vertices " << nVerts << nl
+            << "    Number of surface hits " << nSurfHits << nl
+            << "    Number of edge hits " << nFeatEdHits
+            << endl;
+
+        totalHits = nSurfHits + nFeatEdHits;
+
+        label nNotInserted = 0;
+
+        if (totalHits > 0)
+        {
+            // In parallel, synchronise the surface trees
+            if (Pstream::parRun())
+            {
+                nNotInserted += synchroniseSurfaceTrees(surfaceHits);
+            }
+
+            insertSurfacePointPairs
+            (
+                surfaceHits,
+                "surfaceConformationLocations_" + name(iterationNo) + ".obj"
+            );
+
+            // In parallel, synchronise the edge trees
+            if (Pstream::parRun())
+            {
+                nNotInserted += synchroniseEdgeTrees(featureEdgeHits);
+            }
+
+            insertEdgePointGroups
+            (
+                featureEdgeHits,
+                "edgeConformationLocations_" + name(iterationNo) + ".obj"
+            );
+
+            if (Pstream::parRun())
+            {
+                sync
+                (
+                    decomposition_().procBounds(),
+                    referralVertices,
+                    receivedVertices()
+                );
+            }
+        }
+
+        timeCheck("Conformation iteration " + name(iterationNo));
+
+        iterationNo++;
+
+        if (iterationNo == maxIterations)
+        {
+            WarningIn("conformalVoronoiMesh::conformToSurface()")
+                << "Maximum surface conformation iterations ("
+                << maxIterations <<  ") reached." << endl;
+        }
+
+        if (totalHits <= nNotInserted)
+        {
+            Info<< nl << "Total hits (" << totalHits
+                << ") less than number of failed insertions (" << nNotInserted
+                << "), stopping iterations" << endl;
+            break;
+        }
+
+        if (totalHits < hitLimit)
+        {
+            Info<< nl << "Total hits (" << totalHits
+                << ") less than limit (" << hitLimit
+                << "), stopping iterations" << endl;
+        }
+    }
+
+    edgeLocationTreePtr_.clear();
+    surfacePtLocationTreePtr_.clear();
+}
+
+
+Foam::label Foam::conformalVoronoiMesh::synchroniseSurfaceTrees
+(
+    pointIndexHitAndFeatureList& surfaceHits
+)
+{
+    Info<< "    Surface tree synchronisation" << endl;
+
+    pointIndexHitAndFeatureDynList synchronisedSurfLocations
+    (
+        surfaceHits.size()
+    );
+
+    List<pointIndexHitAndFeatureDynList> procSurfLocations(Pstream::nProcs());
+
+    procSurfLocations[Pstream::myProcNo()] = surfaceHits;
+
+    Pstream::gatherList(procSurfLocations);
+    Pstream::scatterList(procSurfLocations);
+
+    List<labelHashSet> hits(Pstream::nProcs());
+
+    label nStoppedInsertion = 0;
+
+    // Do the nearness tests here
+    for (label procI = 0; procI < Pstream::nProcs(); ++procI)
+    {
+        // Skip own points
+        if (procI >= Pstream::myProcNo())
+        {
+            continue;
+        }
+
+        const pointIndexHitAndFeatureList& otherSurfEdges =
+            procSurfLocations[procI];
+
+        forAll(otherSurfEdges, peI)
+        {
+            const Foam::point& pt = otherSurfEdges[peI].first().hitPoint();
+
+            pointIndexHit nearest;
+            pointIsNearSurfaceLocation(pt, nearest);
+
+            pointIndexHit nearestEdge;
+            pointIsNearFeatureEdgeLocation(pt, nearestEdge);
+
+            bool isNearFeaturePt = nearFeaturePt(pt);
+
+            if (nearest.hit() || nearestEdge.hit() || isNearFeaturePt)
+            {
+                nStoppedInsertion++;
+
+                if (!hits[procI].found(peI))
+                {
+                    hits[procI].insert(peI);
+                }
+            }
+        }
+    }
+
+    Pstream::listCombineGather(hits, plusEqOp<labelHashSet>());
+    Pstream::listCombineScatter(hits);
+
+    forAll(surfaceHits, eI)
+    {
+        if (!hits[Pstream::myProcNo()].found(eI))
+        {
+            synchronisedSurfLocations.append(surfaceHits[eI]);
+        }
+    }
+
+    forAll(synchronisedSurfLocations, pI)
+    {
+        appendToSurfacePtTree
+        (
+            synchronisedSurfLocations[pI].first().hitPoint()
+        );
+    }
+
+    const label nNotInserted = returnReduce(nStoppedInsertion, sumOp<label>());
+
+    Info<< "        Not inserting total of " << nNotInserted << " locations"
+        << endl;
+
+    surfaceHits = synchronisedSurfLocations;
+
+    return nNotInserted;
+}
+
+
+Foam::label Foam::conformalVoronoiMesh::synchroniseEdgeTrees
+(
+    pointIndexHitAndFeatureList& featureEdgeHits
+)
+{
+    Info<< "    Edge tree synchronisation" << endl;
+
+    pointIndexHitAndFeatureDynList synchronisedEdgeLocations
+    (
+        featureEdgeHits.size()
+    );
+
+    List<pointIndexHitAndFeatureDynList> procEdgeLocations(Pstream::nProcs());
+
+    procEdgeLocations[Pstream::myProcNo()] = featureEdgeHits;
+
+    Pstream::gatherList(procEdgeLocations);
+    Pstream::scatterList(procEdgeLocations);
+
+    List<labelHashSet> hits(Pstream::nProcs());
+
+    label nStoppedInsertion = 0;
+
+    // Do the nearness tests here
+    for (label procI = 0; procI < Pstream::nProcs(); ++procI)
+    {
+        // Skip own points
+        if (procI >= Pstream::myProcNo())
+        {
+            continue;
+        }
+
+        pointIndexHitAndFeatureList& otherProcEdges = procEdgeLocations[procI];
+
+        forAll(otherProcEdges, peI)
+        {
+            const Foam::point& pt = otherProcEdges[peI].first().hitPoint();
+
+            pointIndexHit nearest;
+            pointIsNearFeatureEdgeLocation(pt, nearest);
+
+            bool isNearFeaturePt = nearFeaturePt(pt);
+
+            if (nearest.hit() || isNearFeaturePt)
+            {
+                nStoppedInsertion++;
+
+                if (!hits[procI].found(peI))
+                {
+                    hits[procI].insert(peI);
+                }
+            }
+        }
+    }
+
+    Pstream::listCombineGather(hits, plusEqOp<labelHashSet>());
+    Pstream::listCombineScatter(hits);
+
+    forAll(featureEdgeHits, eI)
+    {
+        if (!hits[Pstream::myProcNo()].found(eI))
+        {
+            synchronisedEdgeLocations.append(featureEdgeHits[eI]);
+        }
+    }
+
+    forAll(synchronisedEdgeLocations, pI)
+    {
+        appendToEdgeLocationTree
+        (
+            synchronisedEdgeLocations[pI].first().hitPoint()
+        );
+    }
+
+    const label nNotInserted = returnReduce(nStoppedInsertion, sumOp<label>());
+
+    Info<< "        Not inserting total of " << nNotInserted << " locations"
+        << endl;
+
+    featureEdgeHits = synchronisedEdgeLocations;
+
+    return nNotInserted;
+}
+
+
+bool Foam::conformalVoronoiMesh::locationConformsToInside
+(
+    const pointIndexHitAndFeature& info
+) const
+{
+    bool keepLocation = true;
+
+    if (info.first().hit())
+    {
+        vectorField norm(1);
+
+        allGeometry_[info.second()].getNormal
+        (
+            List<pointIndexHit>(1, info.first()),
+            norm
+        );
+
+        const vector& n = norm[0];
+
+        const scalar ppDist = pointPairDistance(info.first().hitPoint());
+
+        const Foam::point innerPoint = info.first().hitPoint() - ppDist*n;
+
+        if (!geometryToConformTo_.inside(innerPoint))
+        {
+            keepLocation = false;
+        }
+    }
+    else
+    {
+        keepLocation = false;
+    }
+
+    return keepLocation;
+}
+
+
+bool Foam::conformalVoronoiMesh::dualCellSurfaceAnyIntersection
+(
+    const Delaunay::Finite_vertices_iterator& vit
+) const
+{
+    std::list<Facet> facets;
+    incident_facets(vit, std::back_inserter(facets));
+
+    for
+    (
+        std::list<Facet>::iterator fit=facets.begin();
+        fit != facets.end();
+        ++fit
+    )
+    {
+        if
+        (
+            is_infinite(fit->first)
+         || is_infinite(fit->first->neighbor(fit->second))
+         || !fit->first->hasInternalPoint()
+         || !fit->first->neighbor(fit->second)->hasInternalPoint()
+        )
+        {
+            continue;
+        }
+
+        Foam::point dE0 = fit->first->dual();
+        Foam::point dE1 = fit->first->neighbor(fit->second)->dual();
+
+        if (Pstream::parRun())
+        {
+            Foam::point& a = dE0;
+            Foam::point& b = dE1;
+
+            bool inProc = clipLineToProc(topoint(vit->point()), a, b);
+
+            // Check for the edge passing through a surface
+            if
+            (
+                inProc
+             && geometryToConformTo_.findSurfaceAnyIntersection(a, b)
+            )
+            {
+                return true;
+            }
+        }
+        else
+        {
+            if (geometryToConformTo_.findSurfaceAnyIntersection(dE0, dE1))
+            {
+                return true;
+            }
+        }
+    }
+
+    return false;
+}
+
+
+bool Foam::conformalVoronoiMesh::dualCellSurfaceAllIntersections
+(
+    const Delaunay::Finite_vertices_iterator& vit,
+    pointIndexHitAndFeatureDynList& infoList
+) const
+{
+    bool flagIntersection = false;
+
+    std::list<Facet> facets;
+    incident_facets(vit, std::back_inserter(facets));
+
+    for
+    (
+        std::list<Facet>::iterator fit = facets.begin();
+        fit != facets.end();
+        ++fit
+    )
+    {
+        if
+        (
+            is_infinite(fit->first)
+         || is_infinite(fit->first->neighbor(fit->second))
+         || !fit->first->hasInternalPoint()
+         || !fit->first->neighbor(fit->second)->hasInternalPoint()
+//         || fit->first->hasFarPoint()
+//         || fit->first->neighbor(fit->second)->hasFarPoint()
+        )
+        {
+            continue;
+        }
+
+        // Construct the dual edge and search for intersections of the edge
+        // with the surface
+        Foam::point dE0 = fit->first->dual();
+        Foam::point dE1 = fit->first->neighbor(fit->second)->dual();
+
+        pointIndexHit infoIntersection;
+        label hitSurfaceIntersection = -1;
+
+        if (Pstream::parRun())
+        {
+            bool inProc = clipLineToProc(topoint(vit->point()), dE0, dE1);
+
+            if (!inProc)
+            {
+                continue;
+            }
+        }
+
+        geometryToConformTo_.findSurfaceNearestIntersection
+        (
+            dE0,
+            dE1,
+            infoIntersection,
+            hitSurfaceIntersection
+        );
+
+        if (infoIntersection.hit())
+        {
+            vectorField norm(1);
+
+            allGeometry_[hitSurfaceIntersection].getNormal
+            (
+                List<pointIndexHit>(1, infoIntersection),
+                norm
+            );
+
+            const vector& n = norm[0];
+
+            pointFromPoint vertex = topoint(vit->point());
+
+            const plane p(infoIntersection.hitPoint(), n);
+
+            const plane::ray r(vertex, n);
+
+            const scalar d = p.normalIntersect(r);
+
+            const Foam::point newPoint = vertex + d*n;
+
+            pointIndexHitAndFeature info;
+
+            geometryToConformTo_.findSurfaceNearest
+            (
+                newPoint,
+                surfaceSearchDistanceSqr(newPoint),
+                info.first(),
+                info.second()
+            );
+
+            bool rejectPoint = false;
+
+            if (!locationConformsToInside(info))
+            {
+                rejectPoint = true;
+            }
+
+            if (!rejectPoint && info.first().hit())
+            {
+                if (!infoList.empty())
+                {
+                    forAll(infoList, hitI)
+                    {
+                        // Reject point if the point is already added
+                        if
+                        (
+                            infoList[hitI].first().index()
+                         == info.first().index()
+                        )
+                        {
+                            rejectPoint = true;
+                            break;
+                        }
+
+                        const Foam::point& p
+                            = infoList[hitI].first().hitPoint();
+
+                        const scalar separationDistance =
+                            mag(p - info.first().hitPoint());
+
+                        const scalar minSepDist =
+                            sqr
+                            (
+                                cvMeshControls().removalDistCoeff()
+                               *targetCellSize(p)
+                            );
+
+                        // Reject the point if it is too close to another
+                        // surface point.
+                        // Could merge the points?
+                        if (separationDistance < minSepDist)
+                        {
+                            rejectPoint = true;
+                            break;
+                        }
+                    }
+                }
+            }
+
+            // The normal ray from the vertex will not always result in a hit
+            // because another surface may be in the way.
+            if (!rejectPoint && info.first().hit())
+            {
+                flagIntersection = true;
+                infoList.append(info);
+            }
+        }
+    }
+
+    return flagIntersection;
+}
+
+
+bool Foam::conformalVoronoiMesh::clipLineToProc
+(
+    const Foam::point& pt,
+    Foam::point& a,
+    Foam::point& b
+) const
+{
+    bool inProc = false;
+
+    pointIndexHit findAnyIntersection = decomposition_().findLine(a, b);
+
+    if (!findAnyIntersection.hit())
+    {
+        pointIndexHit info = decomposition_().findLine(a, pt);
+
+        if (!info.hit())
+        {
+            inProc = true;
+        }
+        else
+        {
+            inProc = false;
+        }
+    }
+    else
+    {
+        pointIndexHit info = decomposition_().findLine(a, pt);
+
+        if (!info.hit())
+        {
+            inProc = true;
+            b = findAnyIntersection.hitPoint();
+        }
+        else
+        {
+            inProc = true;
+            a = findAnyIntersection.hitPoint();
+        }
+    }
+
+    return inProc;
+}
+
+
+void Foam::conformalVoronoiMesh::dualCellLargestSurfaceProtrusion
+(
+    const Delaunay::Finite_vertices_iterator& vit,
+    pointIndexHit& surfHitLargest,
+    label& hitSurfaceLargest
+) const
+{
+    // Set no-hit data
+    surfHitLargest = pointIndexHit();
+    hitSurfaceLargest = -1;
+
+    std::list<Facet> facets;
+    finite_incident_facets(vit, std::back_inserter(facets));
+
+    pointFromPoint vert = topoint(vit->point());
+
+    scalar maxProtrusionDistance = maxSurfaceProtrusion(vert);
+
+    for
+    (
+        std::list<Facet>::iterator fit = facets.begin();
+        fit != facets.end();
+        ++fit
+    )
+    {
+        Cell_handle c1 = fit->first;
+        Cell_handle c2 = fit->first->neighbor(fit->second);
+
+        if
+        (
+            is_infinite(c1) || is_infinite(c2)
+         || !c1->hasInternalPoint() || !c2->hasInternalPoint()
+         || !c1->real() || !c2->real()
+        )
+        {
+            continue;
+        }
+
+        Foam::point edgeMid = 0.5*(c1->dual() + c2->dual());
+
+        pointIndexHit surfHit;
+        label hitSurface;
+
+        geometryToConformTo_.findSurfaceAnyIntersection
+        (
+            vert,
+            edgeMid,
+            surfHit,
+            hitSurface
+        );
+
+        if (surfHit.hit())
+        {
+            vectorField norm(1);
+
+            allGeometry_[hitSurface].getNormal
+            (
+                List<pointIndexHit>(1, surfHit),
+                norm
+            );
+
+            const vector& n = norm[0];
+
+            const scalar normalProtrusionDistance =
+                (edgeMid - surfHit.hitPoint()) & n;
+
+            if (normalProtrusionDistance > maxProtrusionDistance)
+            {
+                surfHitLargest = surfHit;
+                hitSurfaceLargest = hitSurface;
+
+                maxProtrusionDistance = normalProtrusionDistance;
+            }
+        }
+    }
+
+    // Relying on short-circuit evaluation to not call for hitPoint when this
+    // is a miss
+    if
+    (
+        surfHitLargest.hit()
+     && !positionOnThisProc(surfHitLargest.hitPoint())
+    )
+    {
+        // A protrusion was identified, but not penetrating on this processor,
+        // so set no-hit data and allow the other that should have this point
+        // referred to generate it.
+        surfHitLargest = pointIndexHit();
+        hitSurfaceLargest = -1;
+    }
+}
+
+
+void Foam::conformalVoronoiMesh::dualCellLargestSurfaceIncursion
+(
+    const Delaunay::Finite_vertices_iterator& vit,
+    pointIndexHit& surfHitLargest,
+    label& hitSurfaceLargest
+) const
+{
+    // Set no-hit data
+    surfHitLargest = pointIndexHit();
+    hitSurfaceLargest = -1;
+
+    std::list<Facet> facets;
+    finite_incident_facets(vit, std::back_inserter(facets));
+
+    pointFromPoint vert = topoint(vit->point());
+
+    scalar minIncursionDistance = -maxSurfaceProtrusion(vert);
+
+    for
+    (
+        std::list<Facet>::iterator fit = facets.begin();
+        fit != facets.end();
+        ++fit
+    )
+    {
+        Cell_handle c1 = fit->first;
+        Cell_handle c2 = fit->first->neighbor(fit->second);
+
+        if
+        (
+            is_infinite(c1) || is_infinite(c2)
+         || !c1->hasInternalPoint() || !c2->hasInternalPoint()
+         || !c1->real() || !c2->real()
+        )
+        {
+            continue;
+        }
+
+        Foam::point edgeMid = 0.5*(c1->dual() + c2->dual());
+
+        pointIndexHit surfHit;
+        label hitSurface;
+
+        geometryToConformTo_.findSurfaceAnyIntersection
+        (
+            vert,
+            edgeMid,
+            surfHit,
+            hitSurface
+        );
+
+        if (surfHit.hit())
+        {
+            vectorField norm(1);
+
+            allGeometry_[hitSurface].getNormal
+            (
+                List<pointIndexHit>(1, surfHit),
+                norm
+            );
+
+            const vector& n = norm[0];
+
+            scalar normalIncursionDistance =
+                (edgeMid - surfHit.hitPoint()) & n;
+
+            if (normalIncursionDistance < minIncursionDistance)
+            {
+                surfHitLargest = surfHit;
+                hitSurfaceLargest = hitSurface;
+
+                minIncursionDistance = normalIncursionDistance;
+
+                // Info<< nl << "# Incursion: " << endl;
+                // meshTools::writeOBJ(Info, vert);
+                // meshTools::writeOBJ(Info, edgeMid);
+                // Info<< "l Na Nb" << endl;
+            }
+        }
+    }
+
+    // Relying on short-circuit evaluation to not call for hitPoint when this
+    // is a miss
+    if
+    (
+        surfHitLargest.hit()
+     && !positionOnThisProc(surfHitLargest.hitPoint())
+    )
+    {
+        // A protrusion was identified, but not penetrating on this processor,
+        // so set no-hit data and allow the other that should have this point
+        // referred to generate it.
+        surfHitLargest = pointIndexHit();
+        hitSurfaceLargest = -1;
+    }
+}
+
+
+void Foam::conformalVoronoiMesh::reportProcessorOccupancy()
+{
+    for
+    (
+        Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        vit++
+    )
+    {
+        if (vit->real())
+        {
+            if (!positionOnThisProc(topoint(vit->point())))
+            {
+                Pout<< topoint(vit->point()) << " is not on this processor "
+                    << endl;
+            }
+        }
+    }
+}
+
+
+//void Foam::conformalVoronoiMesh::reportSurfaceConformationQuality()
+//{
+//    Info<< nl << "Check surface conformation quality" << endl;
+//
+//    for
+//    (
+//        Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
+//        vit != finite_vertices_end();
+//        vit++
+//    )
+//    {
+//        if (vit->internalOrBoundaryPoint())
+//        {
+//            Foam::point vert(topoint(vit->point()));
+//            pointIndexHit surfHit;
+//            label hitSurface;
+//
+//            dualCellLargestSurfaceProtrusion(vit, surfHit, hitSurface);
+//
+//            if (surfHit.hit())
+//            {
+//                Pout<< nl << "Residual penetration: " << nl
+//                    << vit->index() << nl
+//                    << vit->type() << nl
+//                    << vit->ppMaster() << nl
+//                    << "nearFeaturePt "
+//                    << nearFeaturePt(surfHit.hitPoint()) << nl
+//                    << vert << nl
+//                    << surfHit.hitPoint()
+//                    << endl;
+//            }
+//        }
+//    }
+//
+//    {
+//        // Assess close surface points
+//
+//        setVertexSizeAndAlignment();
+//
+//        for
+//        (
+//            Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
+//            vit != finite_vertices_end();
+//            vit++
+//        )
+//        {
+//            if (vit->ppMaster())
+//            {
+//                std::list<Vertex_handle> adjacentVertices;
+//
+//                adjacent_vertices(vit, std::back_inserter(adjacentVertices));
+//
+//                Foam::point pt = topoint(vit->point());
+//
+//                // Pout<< nl << "vit: " << vit->index() << " "
+//                //     << topoint(vit->point())
+//                //     << endl;
+//
+//                // Pout<< adjacentVertices.size() << endl;
+//
+//                for
+//                (
+//                    std::list<Vertex_handle>::iterator
+//                    avit = adjacentVertices.begin();
+//                    avit != adjacentVertices.end();
+//                    ++avit
+//                )
+//                {
+//                    Vertex_handle avh = *avit;
+//
+//                    // The lower indexed vertex will perform the assessment
+//                    if
+//                    (
+//                        avh->ppMaster()
+//                     && vit->index() < avh->index()
+//                     && vit->type() != avh->type()
+//                    )
+//                    {
+//                        scalar targetSize = 0.2*averageAnyCellSize(vit, avh);
+//
+//                        // Pout<< "diff " << mag(pt - topoint(avh->point()))
+//                        //     << " " << targetSize << endl;
+//
+//                        if
+//                        (
+//                            magSqr(pt - topoint(avh->point()))
+//                          < sqr(targetSize)
+//                        )
+//                        {
+//                            Pout<< nl << "vit: " << vit->index() << " "
+//                                << topoint(vit->point())
+//                                << endl;
+//
+//                            Pout<< "    adjacent too close: "
+//                                << avh->index() << " "
+//                                << topoint(avh->point())
+//                                << endl;
+//                        }
+//                    }
+//                }
+//            }
+//        }
+//    }
+//}
+
+void Foam::conformalVoronoiMesh::limitDisplacement
+(
+    const Delaunay::Finite_vertices_iterator& vit,
+    vector& displacement,
+    label callCount
+) const
+{
+    callCount++;
+
+    // Do not allow infinite recursion
+    if (callCount > 7)
+    {
+        return;
+    }
+
+    pointFromPoint pt = topoint(vit->point());
+    Foam::point dispPt = pt + displacement;
+
+    bool limit = false;
+
+    pointIndexHit surfHit;
+    label hitSurface;
+
+    if (!geometryToConformTo_.globalBounds().contains(dispPt))
+    {
+        // If dispPt is outside bounding box then displacement cuts boundary
+        limit = true;
+    }
+    else if (geometryToConformTo_.findSurfaceAnyIntersection(pt, dispPt))
+    {
+        // Full surface penetration test
+        limit = true;
+    }
+    else
+    {
+        // Testing if the displaced position is too close to the surface.
+        // Within twice the local surface point pair insertion distance is
+        // considered "too close"
+
+        scalar searchDistanceSqr = sqr
+        (
+            2*vit->targetCellSize()
+           *cvMeshControls().pointPairDistanceCoeff()
+        );
+
+        geometryToConformTo_.findSurfaceNearest
+        (
+            dispPt,
+            searchDistanceSqr,
+            surfHit,
+            hitSurface
+        );
+
+        if (surfHit.hit())
+        {
+            limit = true;
+
+            if (magSqr(pt - surfHit.hitPoint()) <= searchDistanceSqr)
+            {
+                // Cannot limit displacement, point closer than tolerance
+                return;
+            }
+        }
+    }
+
+    if (limit)
+    {
+        // Halve the displacement and call this function again.  Will continue
+        // recursively until the displacement is small enough.
+
+        displacement *= 0.5;
+
+        limitDisplacement(vit, displacement, callCount);
+    }
+}
+
+
+Foam::scalar Foam::conformalVoronoiMesh::angleBetweenSurfacePoints
+(
+    Foam::point pA,
+    Foam::point pB
+) const
+{
+    pointIndexHit pAhit;
+    label pAsurfaceHit = -1;
+
+    const scalar searchDist = 5.0*targetCellSize(pA);
+
+    geometryToConformTo_.findSurfaceNearest
+    (
+        pA,
+        searchDist,
+        pAhit,
+        pAsurfaceHit
+    );
+
+    if (!pAhit.hit())
+    {
+        return constant::mathematical::pi;
+    }
+
+    vectorField norm(1);
+
+    allGeometry_[pAsurfaceHit].getNormal
+    (
+        List<pointIndexHit>(1, pAhit),
+        norm
+    );
+
+    const vector nA = norm[0];
+
+    pointIndexHit pBhit;
+    label pBsurfaceHit = -1;
+
+    geometryToConformTo_.findSurfaceNearest
+    (
+        pB,
+        searchDist,
+        pBhit,
+        pBsurfaceHit
+    );
+
+    if (!pBhit.hit())
+    {
+        return constant::mathematical::pi;
+    }
+
+    allGeometry_[pBsurfaceHit].getNormal
+    (
+        List<pointIndexHit>(1, pBhit),
+        norm
+    );
+
+    const vector nB = norm[0];
+
+    return vectorTools::cosPhi(nA, nB);
+}
+
+
+bool Foam::conformalVoronoiMesh::nearSurfacePoint
+(
+    pointIndexHitAndFeature& pHit
+) const
+{
+    const Foam::point& pt = pHit.first().hitPoint();
+
+    pointIndexHit closePoint;
+
+    const bool closeToSurfacePt = pointIsNearSurfaceLocation(pt, closePoint);
+
+//    if
+//    (
+//        closeToSurfacePt
+//     && mag(pt - closePoint.hitPoint()) > pointPairDistance(pt)
+//    )
+//    {
+//        const scalar cosAngle
+//            = angleBetweenSurfacePoints(pt, closePoint.hitPoint());
+//
+//        // @todo make this tolerance run-time selectable?
+//        if (cosAngle < searchAngleOppositeSurface)
+//        {
+//            pointIndexHit pCloseHit;
+//            label pCloseSurfaceHit = -1;
+//
+//            const scalar searchDist = targetCellSize(closePoint.hitPoint());
+//
+//            if (searchDist < SMALL)
+//            {
+//                Pout<< "WARNING: SMALL CELL SIZE" << endl;
+//            }
+//
+//            geometryToConformTo_.findSurfaceNearest
+//            (
+//                closePoint.hitPoint(),
+//                searchDist,
+//                pCloseHit,
+//                pCloseSurfaceHit
+//            );
+//
+//            vectorField norm(1);
+//
+//            allGeometry_[pCloseSurfaceHit].getNormal
+//            (
+//                List<pointIndexHit>(1, pCloseHit),
+//                norm
+//            );
+//
+//            const vector nA = norm[0];
+//
+//            pointIndexHit oppositeHit;
+//            label oppositeSurfaceHit = -1;
+//
+//            geometryToConformTo_.findSurfaceNearestIntersection
+//            (
+//                closePoint.hitPoint() + SMALL*nA,
+//                closePoint.hitPoint() + mag(pt - closePoint.hitPoint())*nA,
+//                oppositeHit,
+//                oppositeSurfaceHit
+//            );
+//
+//            if (oppositeHit.hit())
+//            {
+//                // Replace point
+//                pHit.first() = oppositeHit;
+//                pHit.second() = oppositeSurfaceHit;
+//
+//                appendToSurfacePtTree(pHit.first().hitPoint());
+//
+//                return !closeToSurfacePt;
+//            }
+//        }
+//    }
+//    else
+    {
+        appendToSurfacePtTree(pt);
+    }
+
+    return closeToSurfacePt;
+}
+
+
+bool Foam::conformalVoronoiMesh::appendToSurfacePtTree
+(
+    const Foam::point& pt
+) const
+{
+   label startIndex = existingSurfacePtLocations_.size();
+
+   existingSurfacePtLocations_.append(pt);
+
+   label endIndex = existingSurfacePtLocations_.size();
+
+   return surfacePtLocationTreePtr_().insert(startIndex, endIndex);
+}
+
+
+bool Foam::conformalVoronoiMesh::appendToEdgeLocationTree
+(
+    const Foam::point& pt
+) const
+{
+   label startIndex = existingEdgeLocations_.size();
+
+   existingEdgeLocations_.append(pt);
+
+   label endIndex = existingEdgeLocations_.size();
+
+   return edgeLocationTreePtr_().insert(startIndex, endIndex);
+}
+
+
+Foam::List<Foam::pointIndexHit>
+Foam::conformalVoronoiMesh::nearestFeatureEdgeLocations
+(
+    const Foam::point& pt
+) const
+{
+    const scalar exclusionRangeSqr = featureEdgeExclusionDistanceSqr(pt);
+
+    labelList elems
+        = edgeLocationTreePtr_().findSphere(pt, exclusionRangeSqr);
+
+    DynamicList<pointIndexHit> dynPointHit;
+
+    forAll(elems, elemI)
+    {
+        label index = elems[elemI];
+
+        const Foam::point& pointI
+            = edgeLocationTreePtr_().shapes().shapePoints()[index];
+
+        pointIndexHit nearHit(true, pointI, index);
+
+        dynPointHit.append(nearHit);
+    }
+
+    return dynPointHit;
+}
+
+
+bool Foam::conformalVoronoiMesh::pointIsNearFeatureEdgeLocation
+(
+    const Foam::point& pt
+) const
+{
+    const scalar exclusionRangeSqr = featureEdgeExclusionDistanceSqr(pt);
+
+    pointIndexHit info
+        = edgeLocationTreePtr_().findNearest(pt, exclusionRangeSqr);
+
+    return info.hit();
+}
+
+
+bool Foam::conformalVoronoiMesh::pointIsNearFeatureEdgeLocation
+(
+    const Foam::point& pt,
+    pointIndexHit& info
+) const
+{
+    const scalar exclusionRangeSqr = featureEdgeExclusionDistanceSqr(pt);
+
+    info = edgeLocationTreePtr_().findNearest(pt, exclusionRangeSqr);
+
+    return info.hit();
+}
+
+
+bool Foam::conformalVoronoiMesh::pointIsNearSurfaceLocation
+(
+    const Foam::point& pt
+) const
+{
+    pointIndexHit info;
+
+    pointIsNearSurfaceLocation(pt, info);
+
+    return info.hit();
+}
+
+
+bool Foam::conformalVoronoiMesh::pointIsNearSurfaceLocation
+(
+    const Foam::point& pt,
+    pointIndexHit& info
+) const
+{
+    const scalar exclusionRangeSqr = surfacePtExclusionDistanceSqr(pt);
+
+    info = surfacePtLocationTreePtr_().findNearest(pt, exclusionRangeSqr);
+
+    return info.hit();
+}
+
+
+bool Foam::conformalVoronoiMesh::nearFeatureEdgeLocation
+(
+    pointIndexHit& pHit
+) const
+{
+    Foam::point pt = pHit.hitPoint();
+
+    const scalar exclusionRangeSqr = featureEdgeExclusionDistanceSqr(pt);
+
+    bool closeToFeatureEdge = pointIsNearFeatureEdgeLocation(pt);
+
+    if (closeToFeatureEdge)
+    {
+        List<pointIndexHit> nearHits = nearestFeatureEdgeLocations(pt);
+
+        forAll(nearHits, elemI)
+        {
+            pointIndexHit& info = nearHits[elemI];
+
+            // Check if the edge location that the new edge location is near to
+            // "might" be on a different edge. If so, add it anyway.
+            pointIndexHit edgeHit;
+            label featureHit = -1;
+
+            geometryToConformTo_.findEdgeNearest
+            (
+                pt,
+                exclusionRangeSqr,
+                edgeHit,
+                featureHit
+            );
+
+            const extendedFeatureEdgeMesh& eMesh
+                = geometryToConformTo_.features()[featureHit];
+
+            const vector& edgeDir = eMesh.edgeDirections()[edgeHit.index()];
+
+            const vector lineBetweenPoints = pt - info.hitPoint();
+
+            const scalar cosAngle
+                = vectorTools::cosPhi(edgeDir, lineBetweenPoints);
+
+            // Allow the point to be added if it is almost at right angles to
+            // the other point. Also check it is not the same point.
+    //        Info<< cosAngle<< " "
+    //            << radToDeg(acos(cosAngle)) << " "
+    //            << searchConeAngle << " "
+    //            << radToDeg(acos(searchConeAngle)) << endl;
+
+            if
+            (
+                mag(cosAngle) < searchConeAngle
+             && (
+                    mag(lineBetweenPoints)
+                  > cvMeshControls().pointPairDistanceCoeff()*targetCellSize(pt)
+                )
+            )
+            {
+                pt = edgeHit.hitPoint();
+                pHit.setPoint(pt);
+                closeToFeatureEdge = false;
+            }
+            else
+            {
+                closeToFeatureEdge = true;
+                break;
+            }
+        }
+    }
+
+    if (!closeToFeatureEdge)
+    {
+        appendToEdgeLocationTree(pt);
+    }
+
+    return closeToFeatureEdge;
+}
+
+
+void Foam::conformalVoronoiMesh::buildEdgeLocationTree
+(
+    const DynamicList<Foam::point>& existingEdgeLocations
+) const
+{
+    treeBoundBox overallBb
+    (
+        geometryToConformTo_.globalBounds().extend(rndGen_, 1e-4)
+    );
+
+    overallBb.min() -= Foam::point(ROOTVSMALL, ROOTVSMALL, ROOTVSMALL);
+    overallBb.max() += Foam::point(ROOTVSMALL, ROOTVSMALL, ROOTVSMALL);
+
+    edgeLocationTreePtr_.reset
+    (
+        new dynamicIndexedOctree<dynamicTreeDataPoint>
+        (
+            dynamicTreeDataPoint(existingEdgeLocations),
+            overallBb,  // overall search domain
+            10,         // max levels, n/a
+            20.0,       // maximum ratio of cubes v.s. cells
+            100.0       // max. duplicity; n/a since no bounding boxes.
+        )
+    );
+}
+
+
+void Foam::conformalVoronoiMesh::buildSurfacePtLocationTree
+(
+    const DynamicList<Foam::point>& existingSurfacePtLocations
+) const
+{
+    treeBoundBox overallBb
+    (
+        geometryToConformTo_.globalBounds().extend(rndGen_, 1e-4)
+    );
+
+    overallBb.min() -= Foam::point(ROOTVSMALL, ROOTVSMALL, ROOTVSMALL);
+    overallBb.max() += Foam::point(ROOTVSMALL, ROOTVSMALL, ROOTVSMALL);
+
+    surfacePtLocationTreePtr_.reset
+    (
+        new dynamicIndexedOctree<dynamicTreeDataPoint>
+        (
+            dynamicTreeDataPoint(existingSurfacePtLocations),
+            overallBb,  // overall search domain
+            10,         // max levels, n/a
+            20.0,       // maximum ratio of cubes v.s. cells
+            100.0       // max. duplicity; n/a since no bounding boxes.
+        )
+    );
+}
+
+
+void Foam::conformalVoronoiMesh::buildSizeAndAlignmentTree() const
+{
+    if (sizeAndAlignmentLocations_.empty())
+    {
+        FatalErrorIn("buildSizeAndAlignmentTree()")
+            << "sizeAndAlignmentLocations empty, must be populated before "
+            << "sizeAndAlignmentTree can be built."
+            << exit(FatalError);
+    }
+
+    treeBoundBox overallBb
+    (
+        geometryToConformTo_.globalBounds().extend(rndGen_, 1e-4)
+    );
+
+    overallBb.min() -= Foam::point(ROOTVSMALL, ROOTVSMALL, ROOTVSMALL);
+    overallBb.max() += Foam::point(ROOTVSMALL, ROOTVSMALL, ROOTVSMALL);
+
+    sizeAndAlignmentTreePtr_.reset
+    (
+        new indexedOctree<treeDataPoint>
+        (
+            treeDataPoint(sizeAndAlignmentLocations_),
+            overallBb,  // overall search domain
+            10,         // max levels
+            20.0,       // maximum ratio of cubes v.s. cells
+            100.0       // max. duplicity; n/a since no bounding boxes.
+        )
+    );
+}
+
+
+void Foam::conformalVoronoiMesh::addSurfaceAndEdgeHits
+(
+    const Delaunay::Finite_vertices_iterator& vit,
+    const pointIndexHitAndFeatureDynList& surfaceIntersections,
+    scalar surfacePtReplaceDistCoeffSqr,
+    scalar edgeSearchDistCoeffSqr,
+    pointIndexHitAndFeatureDynList& surfaceHits,
+    pointIndexHitAndFeatureDynList& featureEdgeHits
+) const
+{
+    const scalar cellSize = targetCellSize(topoint(vit->point()));
+    const scalar cellSizeSqr = sqr(cellSize);
+
+    forAll(surfaceIntersections, sI)
+    {
+        pointIndexHitAndFeature surfHitI = surfaceIntersections[sI];
+
+        bool keepSurfacePoint = true;
+
+        if (!surfHitI.first().hit())
+        {
+            continue;
+        }
+
+        bool isNearFeaturePt = nearFeaturePt(surfHitI.first().hitPoint());
+
+        bool isNearSurfacePt = nearSurfacePoint(surfHitI);
+
+        if (isNearFeaturePt || isNearSurfacePt)
+        {
+            keepSurfacePoint = false;
+        }
+
+        List<List<pointIndexHit> > edHitsByFeature;
+
+        labelList featuresHit;
+
+        const scalar searchRadiusSqr = edgeSearchDistCoeffSqr*cellSizeSqr;
+
+        geometryToConformTo_.findAllNearestEdges
+        (
+            surfHitI.first().hitPoint(),
+            searchRadiusSqr,
+            edHitsByFeature,
+            featuresHit
+        );
+
+        forAll(edHitsByFeature, i)
+        {
+            const label featureHit = featuresHit[i];
+
+            List<pointIndexHit>& edHits = edHitsByFeature[i];
+
+            forAll(edHits, eHitI)
+            {
+                pointIndexHit& edHit = edHits[eHitI];
+
+                if (edHit.hit())
+                {
+                    const Foam::point& edPt = edHit.hitPoint();
+
+                    if (!nearFeaturePt(edPt))
+                    {
+                        if
+                        (
+                            magSqr(edPt - surfHitI.first().hitPoint())
+                          < surfacePtReplaceDistCoeffSqr*cellSizeSqr
+                        )
+                        {
+                            // If the point is within a given distance of a
+                            // feature edge, give control to edge control points
+                            // instead, this will prevent "pits" forming.
+
+                            keepSurfacePoint = false;
+
+                            // NEED TO REMOVE FROM THE SURFACE TREE...
+//                            surfacePtLocationTreePtr_().remove
+//                            (
+//                                existingSurfacePtLocations_.size() - 1
+//                            );
+                        }
+
+                        if
+                        (
+                            !nearFeatureEdgeLocation
+                            (
+                                edHit
+                            )
+                        )
+                        {
+                            // Do not place edge control points too close to a
+                            // feature point or existing edge control points
+                            featureEdgeHits.append
+                            (
+                                pointIndexHitAndFeature(edHit, featureHit)
+                            );
+                        }
+                    }
+                }
+            }
+        }
+
+        if (keepSurfacePoint)
+        {
+            surfaceHits.append(surfHitI);
+        }
+    }
+}
+
+
+void Foam::conformalVoronoiMesh::storeSurfaceConformation()
+{
+    Info<< nl << "Storing surface conformation" << endl;
+
+    surfaceConformationVertices_.clear();
+
+    // Use a temporary dynamic list to speed up insertion.
+    DynamicList<Vb> tempSurfaceVertices(number_of_vertices()/10);
+
+    for
+    (
+        Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        vit++
+    )
+    {
+        // Store points that are not referred, part of a pair, but not feature
+        // points
+        if
+        (
+            !vit->referred()
+         && vit->boundaryPoint()
+         && !vit->featurePoint()
+        )
+        {
+            tempSurfaceVertices.append
+            (
+                Vb
+                (
+                    vit->point(),
+                    vit->type()
+                )
+            );
+        }
+    }
+
+    tempSurfaceVertices.shrink();
+
+    surfaceConformationVertices_.transfer(tempSurfaceVertices);
+
+    Info<< "    Stored "
+        << returnReduce
+        (
+            label(surfaceConformationVertices_.size()),
+            sumOp<label>()
+        )
+        << " vertices" << nl << endl;
+}
+
+
+void Foam::conformalVoronoiMesh::reinsertSurfaceConformation()
+{
+    Info<< nl << "Reinserting stored surface conformation" << endl;
+
+    const label preReinsertionSize(number_of_vertices());
+
+    // It is assumed that the stored surface conformation is on the correct
+    // processor and does not need distributed
+    rangeInsertWithInfo
+    (
+        surfaceConformationVertices_.begin(),
+        surfaceConformationVertices_.end(),
+        true
+    );
+
+    const label nInserted = label(number_of_vertices()) - preReinsertionSize;
+    const label nFailed = surfaceConformationVertices_.size() - nInserted;
+
+    Info<< "    " << returnReduce(nInserted, sumOp<label>())
+        << " points reinserted, failed to insert "
+        << returnReduce(nFailed, sumOp<label>())
+        << endl;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshFeaturePointSpecialisations.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshFeaturePointSpecialisations.C
new file mode 100644
index 0000000000000000000000000000000000000000..2f7579cbbff95339c341b32c9857ec82dcc100b0
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshFeaturePointSpecialisations.C
@@ -0,0 +1,436 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "conformalVoronoiMesh.H"
+#include "vectorTools.H"
+
+using namespace Foam::vectorTools;
+
+// * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * * //
+
+Foam::List<Foam::extendedFeatureEdgeMesh::edgeStatus>
+Foam::conformalVoronoiMesh::calcPointFeatureEdgesTypes
+(
+    const extendedFeatureEdgeMesh& feMesh,
+    const labelList& pEds,
+    pointFeatureEdgesTypes& pFEdgeTypes
+)
+{
+    List<extendedFeatureEdgeMesh::edgeStatus> allEdStat(pEds.size());
+
+    forAll(pEds, i)
+    {
+        label edgeI = pEds[i];
+
+        extendedFeatureEdgeMesh::edgeStatus& eS = allEdStat[i];
+
+        eS = feMesh.getEdgeStatus(edgeI);
+
+        pFEdgeTypes(eS)++;
+    }
+
+    if (debug)
+    {
+        Info<< pFEdgeTypes << endl;
+    }
+
+    return allEdStat;
+}
+
+
+bool Foam::conformalVoronoiMesh::createSpecialisedFeaturePoint
+(
+    const extendedFeatureEdgeMesh& feMesh,
+    const labelList& pEds,
+    const pointFeatureEdgesTypes& pFEdgesTypes,
+    const List<extendedFeatureEdgeMesh::edgeStatus>& allEdStat,
+    const label ptI,
+    DynamicList<Vb>& pts
+)
+{
+    if
+    (
+        !pFEdgesTypes.found(extendedFeatureEdgeMesh::EXTERNAL)
+     || !pFEdgesTypes.found(extendedFeatureEdgeMesh::INTERNAL)
+    )
+    {
+        return false;
+    }
+
+    if
+    (
+        pFEdgesTypes[extendedFeatureEdgeMesh::EXTERNAL] == 2
+     && pFEdgesTypes[extendedFeatureEdgeMesh::INTERNAL] == 1
+     && pEds.size() == 3
+    )
+    {
+        Info<< "nExternal == 2 && nInternal == 1" << endl;
+
+        const Foam::point& featPt = feMesh.points()[ptI];
+
+        if (!positionOnThisProc(featPt))
+        {
+            return false;
+        }
+
+        label nVert = number_of_vertices();
+
+        const label initialNumOfPoints = pts.size();
+
+        const scalar ppDist = pointPairDistance(featPt);
+
+        const vectorField& normals = feMesh.normals();
+
+        const labelListList& edgeNormals = feMesh.edgeNormals();
+
+        label concaveEdgeI = -1;
+        labelList convexEdgesI(2, -1);
+        label nConvex = 0;
+
+        forAll(pEds, i)
+        {
+            const extendedFeatureEdgeMesh::edgeStatus& eS = allEdStat[i];
+
+            if (eS == extendedFeatureEdgeMesh::INTERNAL)
+            {
+                concaveEdgeI = pEds[i];
+            }
+            else if (eS == extendedFeatureEdgeMesh::EXTERNAL)
+            {
+                convexEdgesI[nConvex++] = pEds[i];
+            }
+            else if (eS == extendedFeatureEdgeMesh::FLAT)
+            {
+                WarningIn("Foam::conformalVoronoiMesh::"
+                    "createSpecialisedFeaturePoint")
+                    << "Edge " << eS << " is flat"
+                    << endl;
+            }
+            else
+            {
+                FatalErrorIn("Foam::conformalVoronoiMesh::"
+                    "createSpecialisedFeaturePoint")
+                    << "Edge " << eS << " not concave/convex"
+                    << exit(FatalError);
+            }
+        }
+
+        const vector& concaveEdgePlaneANormal =
+            normals[edgeNormals[concaveEdgeI][0]];
+
+        const vector& concaveEdgePlaneBNormal =
+            normals[edgeNormals[concaveEdgeI][1]];
+
+        // Intersect planes parallel to the concave edge planes offset
+        // by ppDist and the plane defined by featPt and the edge vector.
+        plane planeA
+        (
+            featPt + ppDist*concaveEdgePlaneANormal,
+            concaveEdgePlaneANormal
+        );
+
+        plane planeB
+        (
+            featPt + ppDist*concaveEdgePlaneBNormal,
+            concaveEdgePlaneBNormal
+        );
+
+        const vector& concaveEdgeDir = feMesh.edgeDirection
+        (
+            concaveEdgeI,
+            ptI
+        );
+
+        // Todo,needed later but want to get rid of this.
+        const Foam::point concaveEdgeLocalFeatPt =
+            featPt + ppDist*concaveEdgeDir;
+
+        // Finding the nearest point on the intersecting line to the edge
+        // point. Floating point errors often occur using planePlaneIntersect
+
+        plane planeF(concaveEdgeLocalFeatPt, concaveEdgeDir);
+
+        const Foam::point concaveEdgeExternalPt = planeF.planePlaneIntersect
+        (
+            planeA,
+            planeB
+        );
+
+        // Redefine planes to be on the feature surfaces to project through
+
+        planeA = plane(featPt, concaveEdgePlaneANormal);
+
+        planeB = plane(featPt, concaveEdgePlaneBNormal);
+
+        const Foam::point internalPtA =
+            concaveEdgeExternalPt
+          - 2.0*planeA.distance(concaveEdgeExternalPt)
+            *concaveEdgePlaneANormal;
+
+        pts.append
+        (
+            Vb(internalPtA, Vb::vtInternalFeaturePoint)
+        );
+
+        const Foam::point internalPtB =
+            concaveEdgeExternalPt
+          - 2.0*planeB.distance(concaveEdgeExternalPt)
+            *concaveEdgePlaneBNormal;
+
+        pts.append
+        (
+            Vb(internalPtB, Vb::vtInternalFeaturePoint)
+        );
+
+        // Add the external points
+
+        Foam::point externalPtD;
+        Foam::point externalPtE;
+
+        vector convexEdgePlaneCNormal(0,0,0);
+        vector convexEdgePlaneDNormal(0,0,0);
+
+        const labelList& concaveEdgeNormals = edgeNormals[concaveEdgeI];
+        const labelList& convexEdgeANormals = edgeNormals[convexEdgesI[0]];
+        const labelList& convexEdgeBNormals = edgeNormals[convexEdgesI[1]];
+
+        forAll(concaveEdgeNormals, edgeNormalI)
+        {
+            bool convexEdgeA = false;
+            bool convexEdgeB = false;
+
+            forAll(convexEdgeANormals, edgeAnormalI)
+            {
+                const vector& concaveNormal
+                    = normals[concaveEdgeNormals[edgeNormalI]];
+                const vector& convexNormal
+                    = normals[convexEdgeANormals[edgeAnormalI]];
+
+                Info<< "Angle between vectors = "
+                    << degAngleBetween(concaveNormal, convexNormal) << endl;
+
+                // Need a looser tolerance, because sometimes adjacent triangles
+                // on the same surface will be slightly out of alignment.
+                if (areParallel(concaveNormal, convexNormal, tolParallel))
+                {
+                    convexEdgeA = true;
+                }
+            }
+
+            forAll(convexEdgeBNormals, edgeBnormalI)
+            {
+                const vector& concaveNormal
+                    = normals[concaveEdgeNormals[edgeNormalI]];
+                const vector& convexNormal
+                    = normals[convexEdgeBNormals[edgeBnormalI]];
+
+                Info<< "Angle between vectors = "
+                    << degAngleBetween(concaveNormal, convexNormal) << endl;
+
+                // Need a looser tolerance, because sometimes adjacent triangles
+                // on the same surface will be slightly out of alignment.
+                if (areParallel(concaveNormal, convexNormal, tolParallel))
+                {
+                    convexEdgeB = true;
+                }
+            }
+
+            if ((convexEdgeA && convexEdgeB) || (!convexEdgeA && !convexEdgeB))
+            {
+                WarningIn
+                    (
+                     "Foam::conformalVoronoiMesh"
+                     "::createSpecialisedFeaturePoint"
+                    )
+                    << "Both or neither of the convex edges share the concave "
+                    << "edge's normal."
+                    << " convexEdgeA = " << convexEdgeA
+                    << " convexEdgeB = " << convexEdgeB
+                    << endl;
+
+                // Remove points that have just been added before returning
+                for (label i = 0; i < 2; ++i)
+                {
+                    pts.remove();
+                    nVert--;
+                }
+
+                return false;
+            }
+
+            if (convexEdgeA)
+            {
+                forAll(convexEdgeANormals, edgeAnormalI)
+                {
+                    const vector& concaveNormal
+                        = normals[concaveEdgeNormals[edgeNormalI]];
+                    const vector& convexNormal
+                        = normals[convexEdgeANormals[edgeAnormalI]];
+
+                    if
+                    (
+                        !areParallel(concaveNormal, convexNormal, tolParallel)
+                    )
+                    {
+                        convexEdgePlaneCNormal = convexNormal;
+
+                        plane planeC(featPt, convexEdgePlaneCNormal);
+
+                        externalPtD =
+                            internalPtA
+                          + 2.0*planeC.distance(internalPtA)
+                           *convexEdgePlaneCNormal;
+
+                        pts.append
+                        (
+                            Vb(externalPtD, Vb::vtExternalFeaturePoint)
+                        );
+                    }
+                }
+            }
+
+            if (convexEdgeB)
+            {
+                forAll(convexEdgeBNormals, edgeBnormalI)
+                {
+                    const vector& concaveNormal
+                        = normals[concaveEdgeNormals[edgeNormalI]];
+                    const vector& convexNormal
+                        = normals[convexEdgeBNormals[edgeBnormalI]];
+
+                    if
+                    (
+                        !areParallel(concaveNormal, convexNormal, tolParallel)
+                    )
+                    {
+                        convexEdgePlaneDNormal = convexNormal;
+
+                        plane planeD(featPt, convexEdgePlaneDNormal);
+
+                        externalPtE =
+                            internalPtB
+                          + 2.0*planeD.distance(internalPtB)
+                           *convexEdgePlaneDNormal;
+
+                        pts.append
+                        (
+                            Vb(externalPtE, Vb::vtExternalFeaturePoint)
+                        );
+                    }
+                }
+            }
+        }
+
+        pts.append
+        (
+            Vb(concaveEdgeExternalPt, Vb::vtExternalFeaturePoint)
+        );
+
+        const scalar totalAngle = radToDeg
+        (
+            constant::mathematical::pi
+          + radAngleBetween(concaveEdgePlaneANormal, concaveEdgePlaneBNormal)
+        );
+
+        if (totalAngle > cvMeshControls().maxQuadAngle())
+        {
+            // Add additional mitreing points
+            //scalar angleSign = 1.0;
+
+
+            vector convexEdgesPlaneNormal =
+                0.5*(convexEdgePlaneCNormal + convexEdgePlaneDNormal);
+
+            plane planeM(featPt, convexEdgesPlaneNormal);
+
+//            if
+//            (
+//                geometryToConformTo_.outside
+//                (
+//                    featPt - convexEdgesPlaneNormal*ppDist
+//                )
+//            )
+//            {
+//                angleSign = -1.0;
+//            }
+
+//            scalar phi =
+//                angleSign*acos(concaveEdgeDir & -convexEdgesPlaneNormal);
+//
+//            scalar guard =
+//            (
+//                1.0 + sin(phi)*ppDist/mag
+//                (
+//                    concaveEdgeLocalFeatPt - concaveEdgeExternalPt
+//                )
+//            )/cos(phi) - 1.0;
+
+            const Foam::point internalPtF =
+                concaveEdgeExternalPt
+            //+ (2.0 + guard)*(concaveEdgeLocalFeatPt - concaveEdgeExternalPt);
+              + 2.0*(concaveEdgeLocalFeatPt - concaveEdgeExternalPt);
+
+            pts.append
+            (
+                Vb(internalPtF, Vb::vtInternalFeaturePoint)
+            );
+
+            const Foam::point externalPtG =
+                internalPtF
+              + 2.0*planeM.distance(internalPtF)*convexEdgesPlaneNormal;
+
+            pts.append
+            (
+                Vb(externalPtG, Vb::vtExternalFeaturePoint)
+            );
+        }
+
+        if (debug)
+        {
+            for (label ptI = initialNumOfPoints; ptI < pts.size(); ++ptI)
+            {
+                Info<< "Point " << ptI << " : ";
+                meshTools::writeOBJ(Info, topoint(pts[ptI].point()));
+            }
+        }
+
+        return true;
+    }
+    else if
+    (
+        pFEdgesTypes[extendedFeatureEdgeMesh::EXTERNAL] == 1
+     && pFEdgesTypes[extendedFeatureEdgeMesh::INTERNAL] == 2
+    )
+    {
+        // Info<< "nExternal == 1 && nInternal == 2" << endl;
+
+        return false;
+    }
+
+    return false;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshFeaturePoints.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshFeaturePoints.C
new file mode 100644
index 0000000000000000000000000000000000000000..028dd5a0df09cf18f6e1a55b3fd3e6be08fbc1ad
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshFeaturePoints.C
@@ -0,0 +1,1235 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "conformalVoronoiMesh.H"
+#include "vectorTools.H"
+#include "triangle.H"
+#include "tetrahedron.H"
+#include "const_circulator.H"
+
+using namespace Foam::vectorTools;
+
+// * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * * //
+
+void Foam::conformalVoronoiMesh::createEdgePointGroup
+(
+    const extendedFeatureEdgeMesh& feMesh,
+    const pointIndexHit& edHit,
+    DynamicList<Vb>& pts
+)
+{
+    label edgeI = edHit.index();
+
+    extendedFeatureEdgeMesh::edgeStatus edStatus = feMesh.getEdgeStatus(edgeI);
+
+    switch (edStatus)
+    {
+        case extendedFeatureEdgeMesh::EXTERNAL:
+        {
+            createExternalEdgePointGroup(feMesh, edHit, pts);
+            break;
+        }
+        case extendedFeatureEdgeMesh::INTERNAL:
+        {
+            createInternalEdgePointGroup(feMesh, edHit, pts);
+            break;
+        }
+        case extendedFeatureEdgeMesh::FLAT:
+        {
+            createFlatEdgePointGroup(feMesh, edHit, pts);
+            break;
+        }
+        case extendedFeatureEdgeMesh::OPEN:
+        {
+            createOpenEdgePointGroup(feMesh, edHit, pts);
+            break;
+        }
+        case extendedFeatureEdgeMesh::MULTIPLE:
+        {
+            createMultipleEdgePointGroup(feMesh, edHit, pts);
+            break;
+        }
+        case extendedFeatureEdgeMesh::NONE:
+        {
+            break;
+        }
+    }
+}
+
+
+void Foam::conformalVoronoiMesh::createExternalEdgePointGroup
+(
+    const extendedFeatureEdgeMesh& feMesh,
+    const pointIndexHit& edHit,
+    DynamicList<Vb>& pts
+)
+{
+    const Foam::point& edgePt = edHit.hitPoint();
+
+    scalar ppDist = pointPairDistance(edgePt);
+
+    const vectorField& feNormals = feMesh.normals();
+    const labelList& edNormalIs = feMesh.edgeNormals()[edHit.index()];
+
+    // As this is an external edge, there are two normals by definition
+    const vector& nA = feNormals[edNormalIs[0]];
+    const vector& nB = feNormals[edNormalIs[1]];
+
+    if (areParallel(nA, nB))
+    {
+        // The normals are nearly parallel, so this is too sharp a feature to
+        // conform to.
+        return;
+    }
+
+    // Normalised distance of reference point from edge point
+    vector refVec((nA + nB)/(1 + (nA & nB)));
+
+    if (magSqr(refVec) > sqr(5.0))
+    {
+        // Limit the size of the conformation
+        ppDist *= 5.0/mag(refVec);
+
+        // Pout<< nl << "createExternalEdgePointGroup limit "
+        //     << "edgePt " << edgePt << nl
+        //     << "refVec " << refVec << nl
+        //     << "mag(refVec) " << mag(refVec) << nl
+        //     << "ppDist " << ppDist << nl
+        //     << "nA " << nA << nl
+        //     << "nB " << nB << nl
+        //     << "(nA & nB) " << (nA & nB) << nl
+        //     << endl;
+    }
+
+    // Convex. So refPt will be inside domain and hence a master point
+    Foam::point refPt = edgePt - ppDist*refVec;
+
+    // Result when the points are eventually inserted.
+    // Add number_of_vertices() at insertion of first vertex to all numbers:
+    // pt           index type
+    // refPt        0     1
+    // reflectedA   1     0
+    // reflectedB   2     0
+
+    // Insert the master point pairing the the first slave
+
+    if (!geometryToConformTo_.inside(refPt))
+    {
+        return;
+    }
+
+    pts.append
+    (
+        Vb(refPt, Vb::vtInternalFeatureEdge)
+    );
+
+    // Insert the slave points by reflecting refPt in both faces.
+    // with each slave refering to the master
+
+    Foam::point reflectedA = refPt + 2*ppDist*nA;
+    pts.append
+    (
+        Vb(reflectedA, Vb::vtExternalFeatureEdge)
+    );
+
+    Foam::point reflectedB = refPt + 2*ppDist*nB;
+    pts.append
+    (
+        Vb(reflectedB, Vb::vtExternalFeatureEdge)
+    );
+}
+
+
+void Foam::conformalVoronoiMesh::createInternalEdgePointGroup
+(
+    const extendedFeatureEdgeMesh& feMesh,
+    const pointIndexHit& edHit,
+    DynamicList<Vb>& pts
+)
+{
+    const Foam::point& edgePt = edHit.hitPoint();
+
+    scalar ppDist = pointPairDistance(edgePt);
+
+    const vectorField& feNormals = feMesh.normals();
+    const labelList& edNormalIs = feMesh.edgeNormals()[edHit.index()];
+
+    // As this is an external edge, there are two normals by definition
+    const vector& nA = feNormals[edNormalIs[0]];
+    const vector& nB = feNormals[edNormalIs[1]];
+
+    if (areParallel(nA, nB))
+    {
+        // The normals are nearly parallel, so this is too sharp a feature to
+        // conform to.
+
+        return;
+    }
+
+    // Normalised distance of reference point from edge point
+    vector refVec((nA + nB)/(1 + (nA & nB)));
+
+    if (magSqr(refVec) > sqr(5.0))
+    {
+        // Limit the size of the conformation
+        ppDist *= 5.0/mag(refVec);
+
+        // Pout<< nl << "createInternalEdgePointGroup limit "
+        //     << "edgePt " << edgePt << nl
+        //     << "refVec " << refVec << nl
+        //     << "mag(refVec) " << mag(refVec) << nl
+        //     << "ppDist " << ppDist << nl
+        //     << "nA " << nA << nl
+        //     << "nB " << nB << nl
+        //     << "(nA & nB) " << (nA & nB) << nl
+        //     << endl;
+    }
+
+    // Concave. master and reflected points inside the domain.
+    Foam::point refPt = edgePt - ppDist*refVec;
+
+    // Generate reflected master to be outside.
+    Foam::point reflMasterPt = refPt + 2*(edgePt - refPt);
+
+    // Reflect reflMasterPt in both faces.
+    Foam::point reflectedA = reflMasterPt - 2*ppDist*nA;
+
+    Foam::point reflectedB = reflMasterPt - 2*ppDist*nB;
+
+    scalar totalAngle =
+        radToDeg(constant::mathematical::pi + radAngleBetween(nA, nB));
+
+    // Number of quadrants the angle should be split into
+    int nQuads = int(totalAngle/cvMeshControls().maxQuadAngle()) + 1;
+
+    // The number of additional master points needed to obtain the
+    // required number of quadrants.
+    int nAddPoints = min(max(nQuads - 2, 0), 2);
+
+    // Add number_of_vertices() at insertion of first vertex to all numbers:
+    // Result for nAddPoints 1 when the points are eventually inserted
+    // pt           index type
+    // reflectedA   0     2
+    // reflectedB   1     2
+    // reflMasterPt 2     0
+
+    // Result for nAddPoints 1 when the points are eventually inserted
+    // pt           index type
+    // reflectedA   0     3
+    // reflectedB   1     3
+    // refPt        2     3
+    // reflMasterPt 3     0
+
+    // Result for nAddPoints 2 when the points are eventually inserted
+    // pt           index type
+    // reflectedA   0     4
+    // reflectedB   1     4
+    // reflectedAa  2     4
+    // reflectedBb  3     4
+    // reflMasterPt 4     0
+
+    if
+    (
+        !geometryToConformTo_.inside(reflectedA)
+     || !geometryToConformTo_.inside(reflectedB)
+    )
+    {
+        return;
+    }
+
+    // Master A is inside.
+    pts.append
+    (
+        Vb(reflectedA, Vb::vtInternalFeatureEdge)
+    );
+
+    // Master B is inside.
+    pts.append
+    (
+        Vb(reflectedB, Vb::vtInternalFeatureEdge)
+    );
+
+    if (nAddPoints == 1)
+    {
+        // One additinal point is the reflection of the slave point,
+        // i.e. the original reference point
+        pts.append
+        (
+            Vb(refPt, Vb::vtInternalFeatureEdge)
+        );
+    }
+    else if (nAddPoints == 2)
+    {
+        Foam::point reflectedAa = refPt + ppDist*nB;
+        pts.append
+        (
+            Vb(reflectedAa, Vb::vtInternalFeatureEdge)
+        );
+
+        Foam::point reflectedBb = refPt + ppDist*nA;
+        pts.append
+        (
+            Vb(reflectedBb, Vb::vtInternalFeatureEdge)
+        );
+    }
+
+    // Slave is outside.
+    pts.append
+    (
+        Vb(reflMasterPt, Vb::vtExternalFeatureEdge)
+    );
+}
+
+
+void Foam::conformalVoronoiMesh::createFlatEdgePointGroup
+(
+    const extendedFeatureEdgeMesh& feMesh,
+    const pointIndexHit& edHit,
+    DynamicList<Vb>& pts
+)
+{
+    const Foam::point& edgePt = edHit.hitPoint();
+
+    const scalar ppDist = pointPairDistance(edgePt);
+
+    const vectorField& feNormals = feMesh.normals();
+    const labelList& edNormalIs = feMesh.edgeNormals()[edHit.index()];
+
+    // As this is a flat edge, there are two normals by definition
+    const vector& nA = feNormals[edNormalIs[0]];
+    const vector& nB = feNormals[edNormalIs[1]];
+
+    // Average normal to remove any bias to one side, although as this
+    // is a flat edge, the normals should be essentially the same
+    const vector n = 0.5*(nA + nB);
+
+    // Direction along the surface to the control point, sense of edge
+    // direction not important, as +s and -s can be used because this
+    // is a flat edge
+    vector s = ppDist*(feMesh.edgeDirections()[edHit.index()] ^ n);
+
+    createPointPair(ppDist, edgePt + s, n, pts);
+    createPointPair(ppDist, edgePt - s, n, pts);
+}
+
+
+void Foam::conformalVoronoiMesh::createOpenEdgePointGroup
+(
+    const extendedFeatureEdgeMesh& feMesh,
+    const pointIndexHit& edHit,
+    DynamicList<Vb>& pts
+)
+{
+//    // Assume it is a baffle and insert flat edge point pairs
+//    const Foam::point& edgePt = edHit.hitPoint();
+//
+//    const scalar ppDist = pointPairDistance(edgePt);
+//
+//    const vectorField& feNormals = feMesh.normals();
+//    const labelList& edNormalIs = feMesh.edgeNormals()[edHit.index()];
+//
+//    // As this is a flat edge, there are two normals by definition
+//    const vector& nA = feNormals[edNormalIs[0]];
+//    const vector& nB = feNormals[edNormalIs[1]];
+//
+//    // Average normal to remove any bias to one side, although as this
+//    // is a flat edge, the normals should be essentially the same
+//    const vector n = 0.5*(nA + nB);
+//
+//    // Direction along the surface to the control point, sense of edge
+//    // direction not important, as +s and -s can be used because this
+//    // is a flat edge
+//    vector s = ppDist*(feMesh.edgeDirections()[edHit.index()] ^ n);
+//
+//    createBafflePointPair(ppDist, edgePt + s, n, pts);
+//    createBafflePointPair(ppDist, edgePt - s, n, pts);
+
+    Info<< "NOT INSERTING OPEN EDGE POINT GROUP, NOT IMPLEMENTED" << endl;
+}
+
+
+void Foam::conformalVoronoiMesh::createMultipleEdgePointGroup
+(
+    const extendedFeatureEdgeMesh& feMesh,
+    const pointIndexHit& edHit,
+    DynamicList<Vb>& pts
+)
+{
+    Info<< "NOT INSERTING MULTIPLE EDGE POINT GROUP, NOT IMPLEMENTED" << endl;
+}
+
+
+void Foam::conformalVoronoiMesh::reinsertFeaturePoints(bool distribute)
+{
+    Info<< nl << "Reinserting stored feature points" << endl;
+
+    label preReinsertionSize(number_of_vertices());
+
+    insertPoints(featureVertices_, distribute);
+
+    const label nReinserted = returnReduce
+    (
+        label(number_of_vertices()) - preReinsertionSize,
+        sumOp<label>()
+    );
+
+    Info<< "    Reinserted " << nReinserted << " vertices" << endl;
+}
+
+
+void Foam::conformalVoronoiMesh::createMixedFeaturePoints
+(
+    DynamicList<Vb>& pts
+)
+{
+    if (cvMeshControls().mixedFeaturePointPPDistanceCoeff() < 0)
+    {
+        Info<< nl << "Skipping specialised handling for mixed feature points"
+            << endl;
+        return;
+    }
+
+    const PtrList<extendedFeatureEdgeMesh>& feMeshes
+    (
+        geometryToConformTo_.features()
+    );
+
+    forAll(feMeshes, i)
+    {
+        const extendedFeatureEdgeMesh& feMesh = feMeshes[i];
+        const labelListList& pointsEdges = feMesh.pointEdges();
+        const pointField& points = feMesh.points();
+
+        for
+        (
+            label ptI = feMesh.mixedStart();
+            ptI < feMesh.nonFeatureStart();
+            ptI++
+        )
+        {
+            const Foam::point& featPt = points[ptI];
+
+            if (!positionOnThisProc(featPt))
+            {
+                continue;
+            }
+
+            const labelList& pEds = pointsEdges[ptI];
+
+            pointFeatureEdgesTypes pFEdgeTypes(ptI);
+
+            const List<extendedFeatureEdgeMesh::edgeStatus> allEdStat
+                = calcPointFeatureEdgesTypes(feMesh, pEds, pFEdgeTypes);
+
+            bool specialisedSuccess = false;
+
+            if (cvMeshControls().specialiseFeaturePoints())
+            {
+                specialisedSuccess = createSpecialisedFeaturePoint
+                (
+                    feMesh, pEds, pFEdgeTypes, allEdStat, ptI, pts
+                );
+            }
+
+            if (!specialisedSuccess)
+            {
+                // Specialisations available for some mixed feature points.  For
+                // non-specialised feature points, inserting mixed internal and
+                // external edge groups at feature point.
+
+                // Skipping unsupported mixed feature point types
+                bool skipEdge = false;
+
+                forAll(pEds, e)
+                {
+                    const label edgeI = pEds[e];
+
+                    const extendedFeatureEdgeMesh::edgeStatus edStatus
+                        = feMesh.getEdgeStatus(edgeI);
+
+                    if
+                    (
+                        edStatus == extendedFeatureEdgeMesh::OPEN
+                     || edStatus == extendedFeatureEdgeMesh::MULTIPLE
+                    )
+                    {
+                        Info<< "Edge type " << edStatus
+                            << " found for mixed feature point " << ptI
+                            << ". Not supported."
+                            << endl;
+
+                        skipEdge = true;
+                    }
+                }
+
+                if (skipEdge)
+                {
+                    Info<< "Skipping point " << ptI << nl << endl;
+
+                    continue;
+                }
+
+//                createFeaturePoints(feMesh, ptI, pts, types);
+
+                const Foam::point pt = points[ptI];
+
+                const scalar edgeGroupDistance = mixedFeaturePointDistance(pt);
+
+                forAll(pEds, e)
+                {
+                    const label edgeI = pEds[e];
+
+                    const Foam::point edgePt =
+                        pt + edgeGroupDistance*feMesh.edgeDirection(edgeI, ptI);
+
+                    const pointIndexHit edgeHit(true, edgePt, edgeI);
+
+                    createEdgePointGroup(feMesh, edgeHit, pts);
+                }
+            }
+        }
+    }
+}
+//
+//
+//void Foam::conformalVoronoiMesh::createFeaturePoints
+//(
+//    DynamicList<Foam::point>& pts,
+//    DynamicList<label>& indices,
+//    DynamicList<label>& types
+//)
+//{
+//    const PtrList<extendedFeatureEdgeMesh>& feMeshes
+//    (
+//        geometryToConformTo_.features()
+//    );
+//
+//    forAll(feMeshes, i)
+//    {
+//        const extendedFeatureEdgeMesh& feMesh(feMeshes[i]);
+//
+//        for
+//        (
+//            label ptI = feMesh.convexStart();
+//            ptI < feMesh.mixedStart();
+//            ++ptI
+//        )
+//        {
+//            const Foam::point& featPt = feMesh.points()[ptI];
+//
+//            if (!positionOnThisProc(featPt))
+//            {
+//                continue;
+//            }
+//
+//            const scalar searchRadiusSqr = 5.0*targetCellSize(featPt);
+//
+//            labelList indices = surfacePtLocationTreePtr_().findSphere
+//            (
+//                featPt,
+//                searchRadiusSqr
+//            );
+//
+//            pointField nearestSurfacePoints(indices.size());
+//
+//            forAll(indices, pI)
+//            {
+//                nearestSurfacePoints[pI] =
+//                    surfaceConformationVertices_[indices[pI]];
+//            }
+//
+//            forAll(feMesh.)
+//
+//            // Now find the nearest points within the edge cones.
+//
+//            // Calculate preliminary surface point locations
+//
+//
+//        }
+//    }
+//}
+
+
+void Foam::conformalVoronoiMesh::insertFeaturePoints()
+{
+    Info<< nl << "Conforming to feature points" << endl;
+
+    DynamicList<Vb> pts;
+
+    const label preFeaturePointSize = number_of_vertices();
+
+    createFeaturePoints(pts);
+
+    createMixedFeaturePoints(pts);
+
+    // Points added using the createEdgePointGroup function will be labelled as
+    // internal/external feature edges. Relabel them as feature points,
+    // otherwise they are inserted as both feature points and surface points.
+    forAll(pts, pI)
+    {
+        Vb& pt = pts[pI];
+
+        if (pt.featureEdgePoint())
+        {
+            if (pt.internalBoundaryPoint())
+            {
+                pt.type() = Vb::vtInternalFeaturePoint;
+            }
+            else if (pt.externalBoundaryPoint())
+            {
+                pt.type() = Vb::vtExternalFeaturePoint;
+            }
+        }
+    }
+
+    // Insert the created points, distributing to the appropriate processor
+    insertPoints(pts, true);
+
+    if (cvMeshControls().objOutput())
+    {
+        writePoints("featureVertices.obj", pts);
+    }
+
+    label nFeatureVertices = number_of_vertices() - preFeaturePointSize;
+
+    if (Pstream::parRun())
+    {
+        reduce(nFeatureVertices, sumOp<label>());
+    }
+
+    if (nFeatureVertices > 0)
+    {
+        Info<< "    Inserted " << nFeatureVertices
+            << " feature vertices" << endl;
+    }
+
+    featureVertices_.clear();
+    featureVertices_.setSize(pts.size());
+
+    forAll(pts, pI)
+    {
+        featureVertices_[pI] = pts[pI];
+    }
+
+    constructFeaturePointLocations();
+}
+
+
+void Foam::conformalVoronoiMesh::constructFeaturePointLocations()
+{
+    DynamicList<Foam::point> ftPtLocs;
+
+    const PtrList<extendedFeatureEdgeMesh>& feMeshes
+    (
+        geometryToConformTo_.features()
+    );
+
+    forAll(feMeshes, i)
+    {
+        const extendedFeatureEdgeMesh& feMesh(feMeshes[i]);
+
+        if (cvMeshControls().mixedFeaturePointPPDistanceCoeff() < 0)
+        {
+            // Ignoring mixed feature points
+            for
+            (
+                label ptI = feMesh.convexStart();
+                ptI < feMesh.mixedStart();
+                ptI++
+            )
+            {
+                ftPtLocs.append(feMesh.points()[ptI]);
+            }
+        }
+        else
+        {
+            for
+            (
+                label ptI = feMesh.convexStart();
+                ptI < feMesh.nonFeatureStart();
+                ptI++
+            )
+            {
+                ftPtLocs.append(feMesh.points()[ptI]);
+            }
+        }
+    }
+
+    featurePointLocations_.transfer(ftPtLocs);
+}
+
+
+Foam::List<Foam::pointIndexHit>
+Foam::conformalVoronoiMesh::findSurfacePtLocationsNearFeaturePoint
+(
+    const Foam::point& featurePoint
+) const
+{
+    DynamicList<pointIndexHit> dynPointList;
+
+    const scalar searchRadiusSqr = 3*targetCellSize(featurePoint);
+
+    labelList surfacePtList = surfacePtLocationTreePtr_().findSphere
+    (
+       featurePoint,
+       searchRadiusSqr
+    );
+
+    forAll(surfacePtList, elemI)
+    {
+       label index = surfacePtList[elemI];
+
+       const Foam::point& p
+           = surfacePtLocationTreePtr_().shapes().shapePoints()[index];
+
+       pointIndexHit nearHit(true, p, index);
+
+       dynPointList.append(nearHit);
+    }
+
+    return dynPointList.shrink();
+}
+
+
+void Foam::conformalVoronoiMesh::addMasterAndSlavePoints
+(
+    const DynamicList<Foam::point>& masterPoints,
+    const DynamicList<Foam::indexedVertexEnum::vertexType>& masterPointsTypes,
+    const Map<DynamicList<autoPtr<plane> > >& masterPointReflections,
+    DynamicList<Vb>& pts,
+    const label ptI
+) const
+{
+    typedef DynamicList<autoPtr<plane> >        planeDynList;
+    typedef Foam::indexedVertexEnum::vertexType vertexType;
+
+    forAll(masterPoints, pI)
+    {
+        // Append master to the list of points
+
+//        OFstream strMasters("fpm_" + name(ptI) + ".obj");
+//        OFstream strSlaves("fps_" + name(ptI) + ".obj");
+
+        const Foam::point& masterPt = masterPoints[pI];
+        const vertexType masterType = masterPointsTypes[pI];
+
+        pts.append
+        (
+            Vb
+            (
+                masterPt,
+                masterType
+            )
+        );
+
+//        meshTools::writeOBJ(strMasters, masterPt);
+
+        const planeDynList& masterPointPlanes = masterPointReflections[pI];
+
+        forAll(masterPointPlanes, planeI)
+        {
+            // Reflect master points in the planes and insert the slave points
+
+            const plane& reflPlane = masterPointPlanes[planeI]();
+
+            const Foam::point slavePt =
+                reflectPointInPlane(masterPt, reflPlane);
+
+            const vertexType slaveType =
+            (
+                masterType == Vb::vtInternalFeaturePoint
+              ? Vb::vtExternalFeaturePoint // true
+              : Vb::vtInternalFeaturePoint // false
+            );
+
+            pts.append
+            (
+                Vb
+                (
+                    slavePt,
+                    slaveType
+                )
+            );
+
+//            meshTools::writeOBJ(strSlaves, slavePt);
+        }
+    }
+}
+
+
+Foam::label Foam::conformalVoronoiMesh::getSign
+(
+    const extendedFeatureEdgeMesh::edgeStatus eStatus
+) const
+{
+    if (eStatus == extendedFeatureEdgeMesh::EXTERNAL)
+    {
+        return -1;
+    }
+    else if (eStatus == extendedFeatureEdgeMesh::INTERNAL)
+    {
+        return 1;
+    }
+
+    return 0;
+}
+
+
+void Foam::conformalVoronoiMesh::createMasterAndSlavePoints
+(
+    const extendedFeatureEdgeMesh& feMesh,
+    const label ptI,
+    DynamicList<Vb>& pts
+) const
+{
+    typedef DynamicList<autoPtr<plane> >                planeDynList;
+    typedef Foam::indexedVertexEnum::vertexType         vertexType;
+    typedef Foam::extendedFeatureEdgeMesh::edgeStatus   edgeStatus;
+
+    const Foam::point& featPt = feMesh.points()[ptI];
+
+    if (!positionOnThisProc(featPt))
+    {
+        return;
+    }
+
+    const scalar ppDist = pointPairDistance(featPt);
+
+    // Maintain a list of master points and the planes to relect them in
+    DynamicList<Foam::point> masterPoints;
+    DynamicList<vertexType> masterPointsTypes;
+    Map<planeDynList> masterPointReflections;
+
+    const labelList& featPtEdges = feMesh.featurePointEdges()[ptI];
+
+    const_circulator<labelList> circ(featPtEdges);
+
+//    Info<< "Point = " << ptI << endl;
+
+    // Loop around the edges of the feature point
+    if (circ.size()) do
+    {
+//        const edgeStatus eStatusPrev = feMesh.getEdgeStatus(circ.prev());
+        const edgeStatus eStatusCurr = feMesh.getEdgeStatus(circ());
+//        const edgeStatus eStatusNext = feMesh.getEdgeStatus(circ.next());
+
+//        Info<< "Prev = "
+//            << extendedFeatureEdgeMesh::edgeStatusNames_[eStatusPrev]
+//            << " Curr = "
+//            << extendedFeatureEdgeMesh::edgeStatusNames_[eStatusCurr]
+////            << " Next = "
+////            << extendedFeatureEdgeMesh::edgeStatusNames_[eStatusNext]
+//            << endl;
+
+        // Get the direction in which to move the point in relation to the
+        // feature point
+        label sign = getSign(eStatusCurr);
+
+        const vector n = sharedFaceNormal(feMesh, circ(), circ.next());
+
+        const vector pointMotionDirection = sign*0.5*ppDist*n;
+
+        if (masterPoints.empty())
+        {
+            // Initialise with the first master point
+
+            Foam::point pt = featPt + pointMotionDirection;
+
+            planeDynList firstPlane;
+            firstPlane.append(autoPtr<plane>(new plane(featPt, n)));
+
+            masterPoints.append(pt);
+
+            masterPointsTypes.append
+            (
+                sign == 1
+              ? Vb::vtExternalFeaturePoint // true
+              : Vb::vtInternalFeaturePoint // false
+            );
+
+            if
+            (
+                masterPointsTypes.last() == Vb::vtInternalFeaturePoint
+             && !geometryToConformTo_.inside(masterPoints.last())
+            )
+            {
+                return;
+            }
+
+            const Foam::point reflectedPoint = reflectPointInPlane
+            (
+                masterPoints.last(),
+                firstPlane.last()()
+            );
+
+            if
+            (
+                masterPointsTypes.last() == Vb::vtExternalFeaturePoint
+             && !geometryToConformTo_.inside(reflectedPoint)
+            )
+            {
+                return;
+            }
+
+            masterPointReflections.insert
+            (
+                masterPoints.size() - 1,
+                firstPlane
+            );
+        }
+//        else if
+//        (
+//            eStatusPrev == extendedFeatureEdgeMesh::INTERNAL
+//         && eStatusCurr == extendedFeatureEdgeMesh::EXTERNAL
+//        )
+//        {
+//            // Insert a new master point.
+//            Foam::point pt = featPt + pointMotionDirection;
+//
+//            planeDynList firstPlane;
+//            firstPlane.append(autoPtr<plane>(new plane(featPt, n)));
+//
+//            masterPoints.append(pt);
+//
+//            masterPointsTypes.append
+//            (
+//                sign == 1
+//              ? Vb::vtExternalFeaturePoint // true
+//              : Vb::vtInternalFeaturePoint // false
+//            );
+//
+//            masterPointReflections.insert
+//            (
+//                masterPoints.size() - 1,
+//                firstPlane
+//            );
+//        }
+//        else if
+//        (
+//            eStatusPrev == extendedFeatureEdgeMesh::EXTERNAL
+//         && eStatusCurr == extendedFeatureEdgeMesh::INTERNAL
+//        )
+//        {
+//
+//        }
+        else
+        {
+            // Just add this face contribution to the latest master point
+
+            masterPoints.last() += pointMotionDirection;
+
+            masterPointReflections[masterPoints.size() - 1].append
+            (
+                autoPtr<plane>(new plane(featPt, n))
+            );
+        }
+
+    } while (circ.circulate(CirculatorBase::CLOCKWISE));
+
+    addMasterAndSlavePoints
+    (
+        masterPoints,
+        masterPointsTypes,
+        masterPointReflections,
+        pts,
+        ptI
+    );
+}
+
+
+void Foam::conformalVoronoiMesh::createFeaturePoints(DynamicList<Vb>& pts)
+{
+    const PtrList<extendedFeatureEdgeMesh>& feMeshes
+    (
+        geometryToConformTo_.features()
+    );
+
+    forAll(feMeshes, i)
+    {
+        Info<< indent << "Edge mesh = " << feMeshes[i].name() << nl << endl;
+
+        const extendedFeatureEdgeMesh& feMesh(feMeshes[i]);
+
+        for
+        (
+            label ptI = feMesh.convexStart();
+            ptI < feMesh.mixedStart();
+            ptI++
+        )
+        {
+            createMasterAndSlavePoints(feMesh, ptI, pts);
+        }
+    }
+}
+
+
+//Foam::scalar Foam::conformalVoronoiMesh::pyramidVolume
+//(
+//    const Foam::point& apex,
+//    const Foam::point& a,
+//    const Foam::point& b,
+//    const Foam::point& c,
+//    const bool printInfo
+//) const
+//{
+//    triPointRef tri(a, b, c);
+//
+//    tetPointRef tet(tri.a(), tri.b(), tri.c(), apex);
+//
+//    scalar volume = tet.mag();
+//
+////    scalar volume = (1.0/3.0)*constant::mathematical::pi;
+////
+////    K::Circle_3 circle(toPoint(a), toPoint(b), toPoint(c));
+////
+////    scalar height = mag(topoint(circle.center()) - apex);
+////
+////    volume *= circle.squared_radius()*height;
+//
+//    if (printInfo)
+//    {
+//        Info<< "Calculating volume of pyramid..." << nl
+//            << "    Apex      : " << apex << nl
+//            << "    Point a   : " << a << nl
+//            << "    Point b   : " << b << nl
+//            << "    Point c   : " << c << nl
+//            << "        Center  : " << tri.centre() << nl
+//            << "        Volume  : " << volume << endl;
+//    }
+//
+//    return volume;
+//}
+
+
+//void Foam::conformalVoronoiMesh::createPyramidMasterPoint
+//(
+//    const Foam::point& apex,
+//    const vectorField& edgeDirections,
+//    Foam::point& masterPoint,
+//    vectorField& norms
+//) const
+//{
+//    pointField basePoints(edgeDirections.size() + 1);
+//
+//    forAll(edgeDirections, eI)
+//    {
+//        basePoints[eI] = edgeDirections[eI] + apex;
+//    }
+//
+//    basePoints[edgeDirections.size() + 1] = apex;
+//
+//    face f(identity(edgeDirections.size()));
+//
+//    pyramidPointFaceRef p(f, apex);
+//
+//    const scalar ppDist = pointPairDistance(apex);
+//
+//
+//    vector unitDir = f.centre();
+//    unitDir /= mag(unitDir);
+//
+//    masterPoint = apex + ppDist*unitDir;
+//
+//    norms.setSize(edgeDirections.size());
+//
+//    forAll(norms, nI)
+//    {
+//        norms[nI] =
+//    }
+//}
+
+
+//void Foam::conformalVoronoiMesh::createConvexConcaveFeaturePoints
+//(
+//    DynamicList<Foam::point>& pts,
+//    DynamicList<label>& indices,
+//    DynamicList<label>& types
+//)
+//{
+//    const PtrList<extendedFeatureEdgeMesh>& feMeshes
+//    (
+//        geometryToConformTo_.features()
+//    );
+//
+//    forAll(feMeshes, i)
+//    {
+//        const extendedFeatureEdgeMesh& feMesh(feMeshes[i]);
+//
+//        for
+//        (
+//            label ptI = feMesh.convexStart();
+//            ptI < feMesh.mixedStart();
+//            ptI++
+//        )
+//        {
+//            const Foam::point& apex = feMesh.points()[ptI];
+//
+//            if (!positionOnThisProc(apex))
+//            {
+//                continue;
+//            }
+//
+//            const vectorField& featPtEdgeDirections
+//                = feMesh.featurePointEdgeDirections(ptI);
+//
+//            Foam::point masterPoint;
+//            vectorField tetNorms;
+//
+//            createPyramidMasterPoint
+//            (
+//                apex,
+//                featPtEdgeDirections,
+//                masterPoint,
+//                tetNorms
+//            );
+//
+//
+//
+//            // Result when the points are eventually inserted (example n = 4)
+//            // Add number_of_vertices() at insertion of first vertex to all
+//            // numbers:
+//            // pt           index type
+//            // internalPt   0     1
+//            // externalPt0  1     0
+//            // externalPt1  2     0
+//            // externalPt2  3     0
+//            // externalPt3  4     0
+//
+//            // Result when the points are eventually inserted (example n = 5)
+//            // Add number_of_vertices() at insertion of first vertex to all
+//            // numbers:
+//            // pt           index type
+//            // internalPt0  0     5
+//            // internalPt1  1     5
+//            // internalPt2  2     5
+//            // internalPt3  3     5
+//            // internalPt4  4     5
+//            // externalPt   5     4
+//
+//            if (geometryToConformTo_.inside(masterPoint))
+//            {
+//
+//            }
+//            else
+//            {
+//
+//            }
+//
+//            pts.append(masterPoint);
+//            indices.append(0);
+//            types.append(1);
+//
+//            label internalPtIndex = -1;
+//
+//            forAll(tetNorms, nI)
+//            {
+//                const vector& n = tetNorms[nI];
+//
+//                Foam::point reflectedPoint
+//                    = reflectPoint(featPt, masterPoint, n);
+//
+//                pts.append(reflectedPoint);
+//                indices.append(0);
+//                types.append(internalPtIndex--);
+//            }
+//        }
+//    }
+//}
+
+
+Foam::vector Foam::conformalVoronoiMesh::sharedFaceNormal
+(
+    const extendedFeatureEdgeMesh& feMesh,
+    const label edgeI,
+    const label nextEdgeI
+) const
+{
+    const labelList& edgeInormals = feMesh.edgeNormals()[edgeI];
+    const labelList& nextEdgeInormals = feMesh.edgeNormals()[nextEdgeI];
+
+    const vector& A1 = feMesh.normals()[edgeInormals[0]];
+    const vector& A2 = feMesh.normals()[edgeInormals[1]];
+
+    const vector& B1 = feMesh.normals()[nextEdgeInormals[0]];
+    const vector& B2 = feMesh.normals()[nextEdgeInormals[1]];
+
+    const scalar A1B1 = mag(A1 ^ B1);
+    const scalar A1B2 = mag(A1 ^ B2);
+    const scalar A2B1 = mag(A2 ^ B1);
+    const scalar A2B2 = mag(A2 ^ B2);
+
+    if (A1B1 < A1B2 && A1B1 < A2B1 && A1B1 < A2B2)
+    {
+        return 0.5*(A1 + B1);
+    }
+    else if (A1B2 < A1B1 && A1B2 < A2B1 && A1B2 < A2B2)
+    {
+        return 0.5*(A1 + B2);
+    }
+    else if (A2B1 < A1B1 && A2B1 < A1B2 && A2B1 < A2B2)
+    {
+        return 0.5*(A2 + B1);
+    }
+    else
+    {
+        return 0.5*(A2 + B2);
+    }
+}
+
+
+Foam::List<Foam::point> Foam::conformalVoronoiMesh::reflectPointInPlanes
+(
+    const Foam::point p,
+    const DynamicList<autoPtr<plane> >& planes
+) const
+{
+    List<Foam::point> reflectedPoints(planes.size());
+
+    forAll(planes, planeI)
+    {
+        reflectedPoints[planeI] = reflectPointInPlane(p, planes[planeI]());
+    }
+
+    return reflectedPoints;
+}
+
+
+Foam::point Foam::conformalVoronoiMesh::reflectPointInPlane
+(
+    const Foam::point p,
+    const plane& planeN
+) const
+{
+    const vector reflectedPtDir = p - planeN.nearestPoint(p);
+
+    if ((planeN.normal() & reflectedPtDir) > 0)
+    {
+        return p - 2.0*planeN.distance(p)*planeN.normal();
+    }
+    else
+    {
+        return p + 2.0*planeN.distance(p)*planeN.normal();
+    }
+}
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshI.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshI.H
new file mode 100644
index 0000000000000000000000000000000000000000..ca09259e0df443d538db00703e41926a703cee3f
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshI.H
@@ -0,0 +1,692 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012-2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
+
+inline Foam::scalar Foam::conformalVoronoiMesh::defaultCellSize() const
+{
+    return cvMeshControls().defaultCellSize();
+}
+
+
+inline Foam::scalar Foam::conformalVoronoiMesh::targetCellSize
+(
+    const Foam::point& pt
+) const
+{
+    return cellShapeControls().cellSize(pt);
+}
+
+
+inline Foam::scalar Foam::conformalVoronoiMesh::averageCellSize
+(
+    const Vertex_handle& vA,
+    const Vertex_handle& vB
+) const
+{
+    // Arithmetic mean
+    // return 0.5*(vA->targetCellSize() + vB->targetCellSize());
+
+    // Geometric mean
+    return sqrt(vA->targetCellSize()*vB->targetCellSize());
+
+    // Harmonic mean
+    // return
+    //     2.0*(vA->targetCellSize()*vB->targetCellSize())
+    //    /(vA->targetCellSize() + vB->targetCellSize());
+}
+
+
+inline Foam::scalar Foam::conformalVoronoiMesh::averageAnyCellSize
+(
+    const Vertex_handle& vA,
+    const Vertex_handle& vB
+) const
+{
+    if
+    (
+        (!vA->internalOrBoundaryPoint() || vA->referred())
+     && (!vB->internalOrBoundaryPoint() || vB->referred())
+    )
+    {
+        // There are no internalOrBoundaryPoints available, determine
+        // size from scratch
+
+        // Geometric mean
+        return sqrt
+        (
+            targetCellSize(topoint(vA->point()))
+           *targetCellSize(topoint(vB->point()))
+        );
+    }
+    else if (!vB->internalOrBoundaryPoint() || vB->referred())
+    {
+        return vA->targetCellSize();
+    }
+    else if (!vA->internalOrBoundaryPoint() || vA->referred())
+    {
+        return vB->targetCellSize();
+    }
+
+    return averageCellSize(vA, vB);
+}
+
+
+inline Foam::scalar Foam::conformalVoronoiMesh::averageAnyCellSize
+(
+    const Delaunay::Finite_facets_iterator& fit
+) const
+{
+    // Arithmetic mean
+
+    scalar sizeSum = 0;
+
+    label nProducts = 0;
+
+    const Cell_handle c(fit->first);
+    const int oppositeVertex = fit->second;
+
+    for (label i = 0; i < 3; i++)
+    {
+        Vertex_handle v = c->vertex(vertex_triple_index(oppositeVertex, i));
+
+        if (v->internalOrBoundaryPoint() && !v->referred())
+        {
+
+            sizeSum += v->targetCellSize();
+
+            nProducts++;
+        }
+    }
+
+    if (nProducts < 1)
+    {
+        // There are no internalOrBoundaryPoints available, determine
+        // size from scratch
+
+        for (label i = 0; i < 3; i++)
+        {
+            Vertex_handle v = c->vertex(vertex_triple_index(oppositeVertex, i));
+
+            sizeSum += targetCellSize(topoint(v->point()));
+        }
+
+        nProducts = 3;
+    }
+
+    if (sizeSum < 0)
+    {
+        WarningIn("averageAnyCellSize(const Delaunay::Finite_facets_iterator&)")
+            << "sizeSum = " << sizeSum
+            << endl;
+
+        return 0;
+    }
+
+    return pow(sizeSum, (1.0/nProducts));
+}
+
+
+inline Foam::scalar Foam::conformalVoronoiMesh::pointPairDistance
+(
+    const Foam::point& pt
+) const
+{
+    return targetCellSize(pt)*cvMeshControls().pointPairDistanceCoeff();
+}
+
+
+inline Foam::scalar Foam::conformalVoronoiMesh::mixedFeaturePointDistance
+(
+    const Foam::point& pt
+) const
+{
+    return
+        pointPairDistance(pt)
+       *cvMeshControls().mixedFeaturePointPPDistanceCoeff();
+}
+
+
+inline Foam::scalar Foam::conformalVoronoiMesh::featurePointExclusionDistanceSqr
+(
+    const Foam::point& pt
+) const
+{
+    return
+        sqr
+        (
+            targetCellSize(pt)
+           *cvMeshControls().featurePointExclusionDistanceCoeff()
+        );
+}
+
+
+inline Foam::scalar Foam::conformalVoronoiMesh::featureEdgeExclusionDistanceSqr
+(
+    const Foam::point& pt
+) const
+{
+    return
+        sqr
+        (
+            targetCellSize(pt)
+           *cvMeshControls().featureEdgeExclusionDistanceCoeff()
+        );
+}
+
+
+inline Foam::scalar Foam::conformalVoronoiMesh::surfacePtExclusionDistanceSqr
+(
+    const Foam::point& pt
+) const
+{
+    return
+        sqr
+        (
+            targetCellSize(pt)
+           *cvMeshControls().surfacePtExclusionDistanceCoeff()
+        );
+}
+
+
+inline Foam::scalar Foam::conformalVoronoiMesh::surfaceSearchDistanceSqr
+(
+    const Foam::point& pt
+) const
+{
+    return
+        sqr(targetCellSize(pt)*cvMeshControls().surfaceSearchDistanceCoeff());
+}
+
+
+inline Foam::scalar Foam::conformalVoronoiMesh::maxSurfaceProtrusion
+(
+    const Foam::point& pt
+) const
+{
+    return targetCellSize(pt)*cvMeshControls().maxSurfaceProtrusionCoeff();
+}
+
+
+inline bool Foam::conformalVoronoiMesh::insertPoint
+(
+    const Foam::point& p,
+    const indexedVertexEnum::vertexType type
+)
+{
+    return insertPoint(toPoint<Point>(p), type);
+}
+
+
+inline bool Foam::conformalVoronoiMesh::insertPoint
+(
+    const Point& P,
+    const indexedVertexEnum::vertexType type
+)
+{
+    uint nVert = number_of_vertices();
+
+    Vertex_handle vh = insert(P);
+
+    bool pointInserted = true;
+
+    if (nVert == number_of_vertices())
+    {
+        Pout<< "Failed to insert point : " << topoint(P)
+            << " of type " << type << endl;
+        pointInserted = false;
+    }
+    else
+    {
+        vh->index() = getNewVertexIndex();
+        vh->type() = type;
+    }
+
+    return pointInserted;
+}
+
+
+inline bool Foam::conformalVoronoiMesh::insertReferredPoint(const Vb& P)
+{
+    return insertReferredPoint(P.point(), P.index(), P.type(), P.procIndex());
+}
+
+
+inline bool Foam::conformalVoronoiMesh::insertReferredPoint
+(
+    const Foam::point& p,
+    const label index,
+    const indexedVertexEnum::vertexType type,
+    const label processor
+)
+{
+    return insertReferredPoint(toPoint<Point>(p), index, type, processor);
+}
+
+
+inline bool Foam::conformalVoronoiMesh::insertReferredPoint
+(
+    const Point& P,
+    const label index,
+    const indexedVertexEnum::vertexType type,
+    const label processor
+)
+{
+    uint nVert = number_of_vertices();
+
+    Vertex_handle vh = insert(P);
+
+    bool pointInserted = true;
+
+    if (nVert == number_of_vertices())
+    {
+        Pout<< "Failed to insert point " << topoint(P)
+            << " type: " << type << " index: " << index
+            << " proc: " << processor << endl;
+        pointInserted = false;
+    }
+    else
+    {
+        vh->index() = index;
+        vh->type() = type;
+        vh->procIndex() = processor;
+    }
+
+    return pointInserted;
+}
+
+
+inline void Foam::conformalVoronoiMesh::createPointPair
+(
+    const scalar ppDist,
+    const Foam::point& surfPt,
+    const vector& n,
+    DynamicList<Vb>& pts
+)
+{
+    vector ppDistn = ppDist*n;
+
+    pts.append
+    (
+        Vb
+        (
+            surfPt - ppDistn,
+            Vb::vtInternalSurface
+        )
+    );
+
+    pts.append
+    (
+        Vb
+        (
+            surfPt + ppDistn,
+            Vb::vtExternalSurface
+        )
+    );
+}
+
+
+inline Foam::point Foam::conformalVoronoiMesh::perturbPoint
+(
+    const Foam::point& pt
+) const
+{
+    Foam::point perturbedPt(pt);
+
+//    vector delta(xR/ni, yR/nj, zR/nk);
+//    scalar pert = randomPerturbationCoeff*cmptMin(delta);
+
+    scalar pert = 1e-12*defaultCellSize();
+
+    perturbedPt.x() += pert*(rndGen_.scalar01() - 0.5);
+    perturbedPt.y() += pert*(rndGen_.scalar01() - 0.5);
+    perturbedPt.z() += pert*(rndGen_.scalar01() - 0.5);
+
+    return perturbedPt;
+}
+
+
+inline void Foam::conformalVoronoiMesh::createBafflePointPair
+(
+    const scalar ppDist,
+    const Foam::point& surfPt,
+    const vector& n,
+    DynamicList<Vb>& pts
+)
+{
+    vector ppDistn = ppDist*n;
+
+    pts.append
+    (
+        Vb(surfPt - ppDistn, Vb::vtInternalSurface)
+    );
+
+    pts.append
+    (
+        Vb(surfPt + ppDistn, Vb::vtInternalSurface)
+    );
+}
+
+
+inline bool Foam::conformalVoronoiMesh::isPointPair
+(
+    const Vertex_handle& vA,
+    const Vertex_handle& vB
+) const
+{
+    // Want to do this topologically, but problem if vertices are redistributed
+    // so that one of the point pair is one processor and the other is on
+    // another.
+
+    const Foam::point& ptA = topoint(vA->point());
+    const Foam::point& ptB = topoint(vB->point());
+
+    if
+    (
+        (
+            vA->type() == Vb::vtInternalSurface
+         && vB->type() == Vb::vtExternalSurface
+        )
+     ||
+        (
+            vB->type() == Vb::vtInternalSurface
+         && vA->type() == Vb::vtExternalSurface
+        )
+     ||
+        (
+            vA->type() == Vb::vtInternalFeatureEdge
+         && vB->type() == Vb::vtExternalFeatureEdge
+        )
+     ||
+        (
+            vB->type() == Vb::vtInternalFeatureEdge
+         && vA->type() == Vb::vtExternalFeatureEdge
+        )
+     ||
+        (
+            vA->type() == Vb::vtInternalSurface
+         && vB->type() == Vb::vtExternalFeatureEdge
+        )
+     ||
+        (
+            vB->type() == Vb::vtInternalSurface
+         && vA->type() == Vb::vtExternalFeatureEdge
+        )
+     ||
+        (
+            vA->type() == Vb::vtExternalSurface
+         && vB->type() == Vb::vtInternalFeatureEdge
+        )
+     ||
+        (
+            vB->type() == Vb::vtExternalSurface
+         && vA->type() == Vb::vtInternalFeatureEdge
+        )
+    )
+    {
+        const scalar distSqr = magSqr(ptA - ptB);
+
+        const scalar ppDistSqr = sqr(2*pointPairDistance(0.5*(ptA + ptB)));
+
+        if (distSqr > 1.001*ppDistSqr)
+        {
+            return false;
+        }
+    }
+
+    return true;
+}
+
+
+inline bool Foam::conformalVoronoiMesh::isBoundaryDualFace
+(
+    const Delaunay::Finite_edges_iterator& eit
+) const
+{
+    Cell_handle c = eit->first;
+    Vertex_handle vA = c->vertex(eit->second);
+    Vertex_handle vB = c->vertex(eit->third);
+
+//    if (vA->internalBoundaryPoint() && vB->externalBoundaryPoint())
+//    {
+//        if (vA->index() == vB->index() - 1)
+//        {
+//            return true;
+//        }
+//    }
+//    else if (vA->externalBoundaryPoint() && vB->internalBoundaryPoint())
+//    {
+//        if (vA->index() == vB->index() + 1)
+//        {
+//            return true;
+//        }
+//    }
+//
+//    return false;
+
+    // A dual face on the boundary will result from one Dv inside and
+    // one outside
+    return
+    (
+        (
+            (vA->internalOrBoundaryPoint() && !vA->referred())
+         || (vB->internalOrBoundaryPoint() && !vB->referred())
+        )
+     && (
+            !vA->internalOrBoundaryPoint()
+         || !vB->internalOrBoundaryPoint()
+        )
+    );
+}
+
+
+inline Foam::List<bool> Foam::conformalVoronoiMesh::dualFaceBoundaryPoints
+(
+    const Delaunay::Finite_edges_iterator& eit
+) const
+{
+    Cell_circulator ccStart = incident_cells(*eit);
+    Cell_circulator cc1 = ccStart;
+    Cell_circulator cc2 = cc1;
+
+    // Advance the second circulator so that it always stays on the next
+    // cell around the edge;
+    cc2++;
+
+    DynamicList<bool> tmpFaceBoundaryPoints;
+
+    do
+    {
+        label cc1I = cc1->cellIndex();
+
+        label cc2I = cc2->cellIndex();
+
+        if (cc1I != cc2I)
+        {
+            if (cc1->boundaryDualVertex())
+            {
+                tmpFaceBoundaryPoints.append(true);
+            }
+            else
+            {
+                tmpFaceBoundaryPoints.append(false);
+            }
+        }
+
+        cc1++;
+
+        cc2++;
+
+    } while (cc1 != ccStart);
+
+    return tmpFaceBoundaryPoints;
+}
+
+
+inline Foam::List<Foam::label> Foam::conformalVoronoiMesh::processorsAttached
+(
+    const Delaunay::Finite_facets_iterator& fit
+) const
+{
+    DynamicList<label> procsAttached(8);
+
+    const Cell_handle c1(fit->first);
+    const int oppositeVertex = fit->second;
+    const Cell_handle c2(c1->neighbor(oppositeVertex));
+
+    FixedList<label, 4> c1Procs(c1->processorsAttached());
+
+    FixedList<label, 4> c2Procs(c2->processorsAttached());
+
+    forAll(c1Procs, aPI)
+    {
+        if (findIndex(procsAttached, c1Procs[aPI] == -1))
+        {
+            procsAttached.append(c1Procs[aPI]);
+        }
+
+        if (findIndex(procsAttached, c2Procs[aPI] == -1))
+        {
+            procsAttached.append(c2Procs[aPI]);
+        }
+    }
+
+    return List<label>(procsAttached);
+}
+
+
+inline bool Foam::conformalVoronoiMesh::isParallelDualEdge
+(
+    const Delaunay::Finite_facets_iterator& fit
+) const
+{
+    const Cell_handle c1(fit->first);
+    const int oppositeVertex = fit->second;
+
+    return
+    (
+            c1->vertex(vertex_triple_index(oppositeVertex, 0))->referred()
+         || c1->vertex(vertex_triple_index(oppositeVertex, 1))->referred()
+         || c1->vertex(vertex_triple_index(oppositeVertex, 2))->referred()
+    );
+}
+
+
+inline bool Foam::conformalVoronoiMesh::isProcBoundaryEdge
+(
+    const Delaunay::Finite_edges_iterator& eit
+) const
+{
+    bool isProcBoundaryEdge = false;
+
+    Cell_handle c = eit->first;
+    Vertex_handle vA = c->vertex(eit->second);
+    Vertex_handle vB = c->vertex(eit->third);
+
+    if
+    (
+        (
+            (vA->referred() && !vB->referred())
+         || (vB->referred() && !vA->referred())
+        )
+     && vA->internalOrBoundaryPoint()
+     && vB->internalOrBoundaryPoint()
+    )
+    {
+        isProcBoundaryEdge = true;
+    }
+
+    return isProcBoundaryEdge;
+}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+inline Foam::conformalVoronoiMesh::CGALVector
+Foam::conformalVoronoiMesh::toCGALVector(const Foam::vector& v) const
+{
+    return CGALVector(v.x(), v.y(), v.z());
+}
+
+
+inline const Foam::Time& Foam::conformalVoronoiMesh::time() const
+{
+    return runTime_;
+}
+
+
+inline Foam::Random& Foam::conformalVoronoiMesh::rndGen() const
+{
+    return rndGen_;
+}
+
+
+inline const Foam::searchableSurfaces&
+Foam::conformalVoronoiMesh::allGeometry() const
+{
+    return allGeometry_;
+}
+
+
+inline const Foam::conformationSurfaces&
+Foam::conformalVoronoiMesh::geometryToConformTo() const
+{
+    return geometryToConformTo_;
+}
+
+
+inline const Foam::backgroundMeshDecomposition&
+Foam::conformalVoronoiMesh::decomposition() const
+{
+    if (!Pstream::parRun())
+    {
+        FatalErrorIn
+        (
+            "inline const Foam::backgroundMeshDecomposition& "
+            "Foam::conformalVoronoiMesh::decomposition() const"
+        )
+            << "The backgroundMeshDecomposition cannot be asked for in serial."
+            << exit(FatalError) << endl;
+    }
+
+    return decomposition_();
+}
+
+
+inline const Foam::cellShapeControl&
+Foam::conformalVoronoiMesh::cellShapeControls() const
+{
+    return cellShapeControl_;
+}
+
+
+inline const Foam::cvControls&
+Foam::conformalVoronoiMesh::cvMeshControls() const
+{
+    return cvMeshControls_;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshIO.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshIO.C
new file mode 100644
index 0000000000000000000000000000000000000000..d5e09a88c31bd0d49f064551f5f0f5f1c33ed794
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshIO.C
@@ -0,0 +1,1784 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012-2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "conformalVoronoiMesh.H"
+#include "IOstreams.H"
+#include "OFstream.H"
+#include "pointMesh.H"
+#include "pointFields.H"
+#include "ListOps.H"
+#include "polyMeshFilter.H"
+#include "polyTopoChange.H"
+#include "PrintTable.H"
+#include "pointMesh.H"
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+void Foam::conformalVoronoiMesh::timeCheck
+(
+    const string& description
+) const
+{
+    if (cvMeshControls().timeChecks())
+    {
+        Info<< nl << "--- [ cpuTime "
+            << runTime_.elapsedCpuTime() << " s, "
+            << "delta " << runTime_.cpuTimeIncrement()<< " s";
+
+        if (description != word::null)
+        {
+            Info<< ", " << description << " ";
+        }
+        else
+        {
+            Info<< " ";
+        }
+
+        Info<< "] --- " << endl;
+
+        memInfo m;
+
+        if (m.valid())
+        {
+            PrintTable<word, label> memoryTable("Memory Usage (kB)");
+
+            memoryTable.add("mSize", m.size());
+            memoryTable.add("mPeak", m.peak());
+            memoryTable.add("mRss", m.rss());
+
+            Info<< incrIndent;
+            memoryTable.print(Info);
+            Info<< decrIndent;
+        }
+    }
+}
+
+
+void Foam::conformalVoronoiMesh::printVertexInfo() const
+{
+    label nInternal = 0;
+    label nInternalRef = 0;
+    label nUnassigned = 0;
+    label nUnassignedRef = 0;
+    label nInternalNearBoundary = 0;
+    label nInternalNearBoundaryRef = 0;
+    label nInternalSurface = 0;
+    label nInternalSurfaceRef = 0;
+    label nInternalFeatureEdge = 0;
+    label nInternalFeatureEdgeRef = 0;
+    label nInternalFeaturePoint = 0;
+    label nInternalFeaturePointRef = 0;
+    label nExternalSurface = 0;
+    label nExternalSurfaceRef = 0;
+    label nExternalFeatureEdge = 0;
+    label nExternalFeatureEdgeRef = 0;
+    label nExternalFeaturePoint = 0;
+    label nExternalFeaturePointRef = 0;
+    label nFar = 0;
+    label nReferred = 0;
+
+    for
+    (
+        Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        ++vit
+    )
+    {
+        if (vit->type() == Vb::vtInternal)
+        {
+            if (vit->referred())
+            {
+                nReferred++;
+                nInternalRef++;
+            }
+
+            nInternal++;
+        }
+        else if (vit->type() == Vb::vtUnassigned)
+        {
+            if (vit->referred())
+            {
+                nReferred++;
+                nUnassignedRef++;
+            }
+
+            nUnassigned++;
+        }
+        else if (vit->type() == Vb::vtInternalNearBoundary)
+        {
+            if (vit->referred())
+            {
+                nReferred++;
+                nInternalNearBoundaryRef++;
+            }
+
+            nInternalNearBoundary++;
+        }
+        else if (vit->type() == Vb::vtInternalSurface)
+        {
+            if (vit->referred())
+            {
+                nReferred++;
+                nInternalSurfaceRef++;
+            }
+
+            nInternalSurface++;
+        }
+        else if (vit->type() == Vb::vtInternalFeatureEdge)
+        {
+            if (vit->referred())
+            {
+                nReferred++;
+                nInternalFeatureEdgeRef++;
+            }
+
+            nInternalFeatureEdge++;
+        }
+        else if (vit->type() == Vb::vtInternalFeaturePoint)
+        {
+            if (vit->referred())
+            {
+                nReferred++;
+                nInternalFeaturePointRef++;
+            }
+
+            nInternalFeaturePoint++;
+        }
+        else if (vit->type() == Vb::vtExternalSurface)
+        {
+            if (vit->referred())
+            {
+                nReferred++;
+                nExternalSurfaceRef++;
+            }
+
+            nExternalSurface++;
+        }
+        else if (vit->type() == Vb::vtExternalFeatureEdge)
+        {
+            if (vit->referred())
+            {
+                nReferred++;
+                nExternalFeatureEdgeRef++;
+            }
+
+            nExternalFeatureEdge++;
+        }
+        else if (vit->type() == Vb::vtExternalFeaturePoint)
+        {
+            if (vit->referred())
+            {
+                nReferred++;
+                nExternalFeaturePointRef++;
+            }
+
+            nExternalFeaturePoint++;
+        }
+        else if (vit->type() == Vb::vtFar)
+        {
+            nFar++;
+        }
+    }
+
+    label nTotalVertices
+        = nUnassigned
+        + nInternal
+        + nInternalNearBoundary
+        + nInternalSurface
+        + nInternalFeatureEdge
+        + nInternalFeaturePoint
+        + nExternalSurface
+        + nExternalFeatureEdge
+        + nExternalFeaturePoint
+        + nFar;
+
+    if (nTotalVertices != label(number_of_vertices()))
+    {
+        WarningIn("Foam::conformalVoronoiMesh::printVertexInfo()")
+            << nTotalVertices << " does not equal " << number_of_vertices()
+            << endl;
+    }
+
+    PrintTable<word, label> vertexTable("Vertex Type Information");
+
+    vertexTable.add("Total", nTotalVertices);
+    vertexTable.add("Unassigned", nUnassigned);
+    vertexTable.add("nInternal", nInternal);
+    vertexTable.add("nInternalNearBoundary", nInternalNearBoundary);
+    vertexTable.add("nInternalSurface", nInternalSurface);
+    vertexTable.add("nInternalFeatureEdge", nInternalFeatureEdge);
+    vertexTable.add("nInternalFeaturePoint", nInternalFeaturePoint);
+    vertexTable.add("nExternalSurface", nExternalSurface);
+    vertexTable.add("nExternalFeatureEdge", nExternalFeatureEdge);
+    vertexTable.add("nExternalFeaturePoint", nExternalFeaturePoint);
+    vertexTable.add("nFar", nFar);
+    vertexTable.add("nReferred", nReferred);
+
+    Info<< endl;
+    vertexTable.print(Info);
+}
+
+
+void Foam::conformalVoronoiMesh::drawDelaunayCell
+(
+    Ostream& os,
+    const Cell_handle& c,
+    label offset
+) const
+{
+    // Supply offset as tet number
+    offset *= 4;
+
+    os  << "# cell index: " << label(c->cellIndex()) << endl;
+
+    os  << "# circumradius "
+        << mag(c->dual() - topoint(c->vertex(0)->point()))
+        << endl;
+
+    for (int i = 0; i < 4; i++)
+    {
+        os  << "# index / type / procIndex: "
+            << label(c->vertex(i)->index()) << " "
+            << label(c->vertex(i)->type()) << " "
+            << label(c->vertex(i)->procIndex()) << endl;
+
+        meshTools::writeOBJ(os, topoint(c->vertex(i)->point()));
+    }
+
+    os  << "f " << 1 + offset << " " << 3 + offset << " " << 2 + offset << nl
+        << "f " << 2 + offset << " " << 3 + offset << " " << 4 + offset << nl
+        << "f " << 1 + offset << " " << 4 + offset << " " << 3 + offset << nl
+        << "f " << 1 + offset << " " << 2 + offset << " " << 4 + offset << endl;
+
+//    os  << "# cicumcentre " << endl;
+
+//    meshTools::writeOBJ(os, c->dual());
+
+//    os  << "l " << 1 + offset << " " << 5 + offset << endl;
+}
+
+
+void Foam::conformalVoronoiMesh::writePoints
+(
+    const fileName& fName,
+    const Foam::indexedVertexEnum::vertexType startPointType,
+    const Foam::indexedVertexEnum::vertexType endPointType
+) const
+{
+    OFstream str(runTime_.path()/fName);
+
+    Pout<< nl << "Writing points of types:" << nl;
+
+    forAllConstIter
+    (
+        HashTable<int>,
+        Foam::indexedVertexEnum::vertexTypeNames_,
+        iter
+    )
+    {
+        if (iter() >= startPointType && iter() <= endPointType)
+        {
+            Pout<< "    " << iter.key() << nl;
+        }
+    }
+
+    Pout<< "to " << str.name() << endl;
+
+    for
+    (
+        Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        ++vit
+    )
+    {
+        if (vit->type() >= startPointType && vit->type() <= endPointType)
+        {
+            meshTools::writeOBJ(str, topoint(vit->point()));
+        }
+    }
+}
+
+
+void Foam::conformalVoronoiMesh::writePoints
+(
+    const fileName& fName,
+    const Foam::indexedVertexEnum::vertexType pointType
+) const
+{
+    writePoints(fName, pointType, pointType);
+}
+
+
+void Foam::conformalVoronoiMesh::writeBoundaryPoints
+(
+    const fileName& fName
+) const
+{
+    OFstream str(runTime_.path()/fName);
+
+    Pout<< nl << "Writing boundary points to " << str.name() << endl;
+
+    for
+    (
+        Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        ++vit
+    )
+    {
+        if (!vit->internalPoint())
+        {
+            meshTools::writeOBJ(str, topoint(vit->point()));
+        }
+    }
+}
+
+
+void Foam::conformalVoronoiMesh::writePoints
+(
+    const fileName& fName,
+    const List<Foam::point>& points
+) const
+{
+    if (points.size())
+    {
+        OFstream str(runTime_.path()/fName);
+
+        Pout<< nl << "Writing " << points.size() << " points from pointList to "
+            << str.name() << endl;
+
+        forAll(points, p)
+        {
+            meshTools::writeOBJ(str, points[p]);
+        }
+    }
+}
+
+
+void Foam::conformalVoronoiMesh::writePoints
+(
+    const fileName& fName,
+    const List<Vb>& points
+) const
+{
+    if (points.size())
+    {
+        OFstream str(runTime_.path()/fName);
+
+        Pout<< nl << "Writing " << points.size() << " points from pointList to "
+            << str.name() << endl;
+
+        forAll(points, p)
+        {
+            meshTools::writeOBJ(str, topoint(points[p].point()));
+        }
+    }
+}
+
+
+void Foam::conformalVoronoiMesh::writeProcessorInterface
+(
+    const fileName& fName,
+    const faceList& faces
+) const
+{
+    OFstream str(runTime_.path()/fName);
+
+    pointField points(number_of_finite_cells(), point::max);
+
+    for
+    (
+        Delaunay::Finite_cells_iterator cit = finite_cells_begin();
+        cit != finite_cells_end();
+        ++cit
+    )
+    {
+        if (!cit->hasFarPoint() && !is_infinite(cit))
+        {
+            points[cit->cellIndex()] = cit->dual();
+        }
+    }
+
+    meshTools::writeOBJ(str, faces, points);
+}
+
+
+void Foam::conformalVoronoiMesh::writeInternalDelaunayVertices
+(
+    const fileName& instance
+) const
+{
+    pointField internalDelaunayVertices(number_of_vertices());
+
+    label vertI = 0;
+
+    for
+    (
+        Delaunay::Finite_vertices_iterator vit = finite_vertices_begin();
+        vit != finite_vertices_end();
+        ++vit
+    )
+    {
+        if (vit->internalPoint())
+        {
+            internalDelaunayVertices[vertI++] = topoint(vit->point());
+        }
+    }
+
+    internalDelaunayVertices.setSize(vertI);
+
+    pointIOField internalDVs
+    (
+        IOobject
+        (
+            "internalDelaunayVertices",
+            instance,
+            runTime_,
+            IOobject::NO_READ,
+            IOobject::AUTO_WRITE
+        ),
+        internalDelaunayVertices
+    );
+
+    Info<< nl
+        << "Writing " << internalDVs.name()
+        << " to " << internalDVs.instance()
+        << endl;
+
+    internalDVs.write();
+}
+
+
+void Foam::conformalVoronoiMesh::writeMesh(const fileName& instance)
+{
+    writeInternalDelaunayVertices(instance);
+
+    // Per cell the Delaunay vertex
+    labelList cellToDelaunayVertex;
+    // Per patch, per face the Delaunay vertex
+    labelListList patchToDelaunayVertex;
+    // Per patch the start of the dual faces
+    labelList dualPatchStarts;
+
+    {
+        pointField points;
+        labelList boundaryPts(number_of_finite_cells(), -1);
+        faceList faces;
+        labelList owner;
+        labelList neighbour;
+        wordList patchTypes;
+        wordList patchNames;
+        labelList patchSizes;
+        labelList procNeighbours;
+        pointField cellCentres;
+
+        PackedBoolList boundaryFacesToRemove;
+
+        calcDualMesh
+        (
+            points,
+            boundaryPts,
+            faces,
+            owner,
+            neighbour,
+            patchTypes,
+            patchNames,
+            patchSizes,
+            dualPatchStarts,
+            procNeighbours,
+            cellCentres,
+            cellToDelaunayVertex,
+            patchToDelaunayVertex,
+            boundaryFacesToRemove
+        );
+
+        Info<< nl << "Writing polyMesh to " << instance << endl;
+
+        writeMesh
+        (
+            Foam::polyMesh::defaultRegion,
+            instance,
+            points,
+            boundaryPts,
+            faces,
+            owner,
+            neighbour,
+            patchTypes,
+            patchNames,
+            patchSizes,
+            dualPatchStarts,
+            procNeighbours,
+            cellCentres,
+            boundaryFacesToRemove
+        );
+    }
+
+    if (cvMeshControls().writeTetDualMesh())
+    {
+        // Determine map from Delaunay vertex to Dual mesh
+        // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+        // From all Delaunay vertices to cell (positive index)
+        // or patch face (negative index)
+        labelList vertexToDualAddressing(number_of_vertices(), 0);
+
+        forAll(cellToDelaunayVertex, cellI)
+        {
+            label vertI = cellToDelaunayVertex[cellI];
+
+            if (vertexToDualAddressing[vertI] != 0)
+            {
+                FatalErrorIn("conformalVoronoiMesh::writeMesh(..)")
+                    << "Delaunay vertex " << vertI
+                    << " from cell " << cellI
+                    << " is already mapped to "
+                    << vertexToDualAddressing[vertI]
+                    << exit(FatalError);
+            }
+            vertexToDualAddressing[vertI] = cellI+1;
+        }
+
+        forAll(patchToDelaunayVertex, patchI)
+        {
+            const labelList& patchVertices = patchToDelaunayVertex[patchI];
+
+            forAll(patchVertices, i)
+            {
+                label vertI = patchVertices[i];
+
+                if (vertexToDualAddressing[vertI] > 0)
+                {
+                    FatalErrorIn("conformalVoronoiMesh::writeMesh(..)")
+                        << "Delaunay vertex " << vertI
+                        << " from patch " << patchI
+                        << " local index " << i
+                        << " is already mapped to cell "
+                        << vertexToDualAddressing[vertI]-1
+                        << exit(FatalError);
+                }
+
+                // Vertex might be used by multiple faces. Which one to
+                // use? For now last one wins.
+                label dualFaceI = dualPatchStarts[patchI]+i;
+                vertexToDualAddressing[vertI] = -dualFaceI-1;
+            }
+        }
+
+
+        // Calculate tet mesh addressing
+        // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+        pointField points;
+        labelList boundaryPts(number_of_finite_cells(), -1);
+        // From tet point back to Delaunay vertex index
+        labelList pointToDelaunayVertex;
+        faceList faces;
+        labelList owner;
+        labelList neighbour;
+        wordList patchTypes;
+        wordList patchNames;
+        labelList patchSizes;
+        labelList patchStarts;
+        pointField cellCentres;
+
+        calcTetMesh
+        (
+            points,
+            pointToDelaunayVertex,
+            faces,
+            owner,
+            neighbour,
+            patchTypes,
+            patchNames,
+            patchSizes,
+            patchStarts
+        );
+
+
+
+        // Calculate map from tet points to dual mesh cells/patch faces
+        // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+        labelIOList pointDualAddressing
+        (
+            IOobject
+            (
+                "pointDualAddressing",
+                instance,
+                "tetDualMesh"/polyMesh::meshSubDir,
+                runTime_,
+                IOobject::NO_READ,
+                IOobject::AUTO_WRITE,
+                false
+            ),
+            UIndirectList<label>
+            (
+                vertexToDualAddressing,
+                pointToDelaunayVertex
+            )()
+        );
+
+        label pointI = findIndex(pointDualAddressing, -1);
+        if (pointI != -1)
+        {
+            WarningIn
+            (
+                "conformalVoronoiMesh::writeMesh\n"
+                "(\n"
+                "    const fileName& instance,\n"
+                "    bool filterFaces\n"
+                ")\n"
+            )   << "Delaunay vertex " << pointI
+                << " does not have a corresponding dual cell." << endl;
+        }
+
+        Info<< "Writing map from tetDualMesh points to Voronoi mesh to "
+            << pointDualAddressing.objectPath() << endl;
+        pointDualAddressing.write();
+
+
+
+        // Write tet points corresponding to the Voronoi cell/face centre
+        // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+        {
+            // Read Voronoi mesh
+            fvMesh mesh
+            (
+                IOobject
+                (
+                    Foam::polyMesh::defaultRegion,
+                    instance,
+                    runTime_,
+                    IOobject::MUST_READ
+                )
+            );
+            pointIOField dualPoints
+            (
+                IOobject
+                (
+                    "dualPoints",
+                    instance,
+                    "tetDualMesh"/polyMesh::meshSubDir,
+                    runTime_,
+                    IOobject::NO_READ,
+                    IOobject::AUTO_WRITE,
+                    false
+                ),
+                points
+            );
+
+            forAll(pointDualAddressing, pointI)
+            {
+                label index = pointDualAddressing[pointI];
+
+                if (index > 0)
+                {
+                    label cellI = index-1;
+                    dualPoints[pointI] = mesh.cellCentres()[cellI];
+                }
+                else if (index < 0)
+                {
+                    label faceI = -index-1;
+                    if (faceI >= mesh.nInternalFaces())
+                    {
+                        dualPoints[pointI] = mesh.faceCentres()[faceI];
+                    }
+                }
+            }
+
+            Info<< "Writing new tetDualMesh points mapped onto Voronoi mesh to "
+                << dualPoints.objectPath() << endl
+                << "Replace the polyMesh/points with these." << endl;
+            dualPoints.write();
+        }
+
+
+        labelList procNeighbours(patchNames.size(), -1);
+
+//        Info<< nl << "Writing tetDualMesh to " << instance << endl;
+
+//        writeMesh
+//        (
+//            "tetDualMesh",
+//            instance,
+//            points,
+//            boundaryPts,
+//            faces,
+//            owner,
+//            neighbour,
+//            patchTypes,
+//            patchNames,
+//            patchSizes,
+//            patchStarts,
+//            procNeighbours,
+//            cellCentres
+//        );
+    }
+}
+
+
+Foam::autoPtr<Foam::fvMesh> Foam::conformalVoronoiMesh::createDummyMesh
+(
+    const IOobject& io,
+    const wordList& patchTypes,
+    const wordList& patchNames,
+    const labelList& patchSizes,
+    const labelList& patchStarts,
+    const labelList& procNeighbours
+) const
+{
+    autoPtr<fvMesh> meshPtr
+    (
+        new fvMesh
+        (
+            io,
+            xferCopy(pointField()),
+            xferCopy(faceList()),
+            xferCopy(cellList())
+        )
+    );
+    fvMesh& mesh = meshPtr();
+
+    List<polyPatch*> patches(patchStarts.size());
+
+    forAll(patches, patchI)
+    {
+        if (patchTypes[patchI] == processorPolyPatch::typeName)
+        {
+            patches[patchI] = new processorPolyPatch
+            (
+                patchNames[patchI],
+                0,          //patchSizes[p],
+                0,          //patchStarts[p],
+                patchI,
+                mesh.boundaryMesh(),
+                Pstream::myProcNo(),
+                procNeighbours[patchI],
+                coupledPolyPatch::COINCIDENTFULLMATCH
+            );
+        }
+        else
+        {
+            patches[patchI] = polyPatch::New
+            (
+                patchTypes[patchI],
+                patchNames[patchI],
+                0,          //patchSizes[p],
+                0,          //patchStarts[p],
+                patchI,
+                mesh.boundaryMesh()
+            ).ptr();
+        }
+    }
+    mesh.addFvPatches(patches);
+
+    return meshPtr;
+}
+
+
+void Foam::conformalVoronoiMesh::checkProcessorPatchesMatch
+(
+    const wordList& patchTypes,
+    const labelList& patchSizes,
+    const labelList& procNeighbours
+) const
+{
+    // Check patch sizes
+    labelListList procPatchSizes
+    (
+        Pstream::nProcs(),
+        labelList(Pstream::nProcs(), -1)
+    );
+
+    forAll(patchTypes, patchI)
+    {
+        if (patchTypes[patchI] == processorPolyPatch::typeName)
+        {
+            procPatchSizes[Pstream::myProcNo()][procNeighbours[patchI]]
+                = patchSizes[patchI];
+        }
+    }
+
+    Pstream::gatherList(procPatchSizes);
+
+    if (Pstream::master())
+    {
+        bool allMatch = true;
+
+        forAll(procPatchSizes, procI)
+        {
+            const labelList& patchSizes = procPatchSizes[procI];
+
+            forAll(patchSizes, patchI)
+            {
+                if (patchSizes[patchI] != procPatchSizes[patchI][procI])
+                {
+                    allMatch = false;
+
+                    Info<< indent << "Patches " << procI << " and " << patchI
+                        << " have different sizes: " << patchSizes[patchI]
+                        << " and " << procPatchSizes[patchI][procI] << endl;
+                }
+            }
+        }
+
+        if (allMatch)
+        {
+            Info<< indent << "All processor patches have matching numbers of "
+                << "faces" << endl;
+        }
+    }
+}
+
+
+void Foam::conformalVoronoiMesh::reorderPoints
+(
+    pointField& points,
+    labelList& boundaryPts,
+    faceList& faces,
+    const label nInternalFaces
+) const
+{
+    Info<< incrIndent << indent << "Reordering points into internal/external"
+        << endl;
+
+    labelList oldToNew(points.size(), 0);
+
+    // Find points that are internal
+    for (label fI = nInternalFaces; fI < faces.size(); ++fI)
+    {
+        const face& f = faces[fI];
+
+        forAll(f, fpI)
+        {
+            oldToNew[f[fpI]] = 1;
+        }
+    }
+
+    const label nInternalPoints = points.size() - sum(oldToNew);
+
+    label countInternal = 0;
+    label countExternal = nInternalPoints;
+
+    forAll(points, pI)
+    {
+        if (oldToNew[pI] == 0)
+        {
+            oldToNew[pI] = countInternal++;
+        }
+        else
+        {
+            oldToNew[pI] = countExternal++;
+        }
+    }
+
+    Info<< indent
+        << "Number of internal points: " << countInternal << nl
+        << indent << "Number of external points: " << countExternal
+        << decrIndent << endl;
+
+    inplaceReorder(oldToNew, points);
+    inplaceReorder(oldToNew, boundaryPts);
+
+    forAll(faces, fI)
+    {
+        face& f = faces[fI];
+
+        forAll(f, fpI)
+        {
+            f[fpI] = oldToNew[f[fpI]];
+        }
+    }
+}
+
+
+void Foam::conformalVoronoiMesh::reorderProcessorPatches
+(
+    const word& meshName,
+    const fileName& instance,
+    const pointField& points,
+    faceList& faces,
+    const wordList& patchTypes,
+    const wordList& patchNames,
+    const labelList& patchSizes,
+    const labelList& patchStarts,
+    const labelList& procNeighbours
+) const
+{
+    Info<< incrIndent << indent << "Reordering processor patches" << endl;
+
+    Info<< incrIndent;
+    checkProcessorPatchesMatch(patchTypes, patchSizes, procNeighbours);
+
+    // Create dummy mesh with correct proc boundaries to do sorting
+    autoPtr<fvMesh> sortMeshPtr
+    (
+        createDummyMesh
+        (
+            IOobject
+            (
+                meshName,
+                instance,
+                runTime_,
+                IOobject::NO_READ,
+                IOobject::NO_WRITE,
+                false
+            ),
+            patchTypes,
+            patchNames,
+            patchSizes,
+            patchStarts,
+            procNeighbours
+        )
+    );
+    const fvMesh& sortMesh = sortMeshPtr();
+
+    // Change the transform type on processors to coincident full match.
+//    forAll(sortMesh.boundaryMesh(), patchI)
+//    {
+//        const polyPatch& patch = sortMesh.boundaryMesh()[patchI];
+//
+//        if (isA<processorPolyPatch>(patch))
+//        {
+//            const processorPolyPatch& cpPatch
+//                = refCast<const processorPolyPatch>(patch);
+//
+//            processorPolyPatch& pPatch
+//                = const_cast<processorPolyPatch&>(cpPatch);
+//
+//            pPatch.transform() = coupledPolyPatch::COINCIDENTFULLMATCH;
+//        }
+//    }
+
+    // Rotation on new faces.
+    labelList rotation(faces.size(), -1);
+    labelList faceMap(faces.size(), -1);
+
+    PstreamBuffers pBufs(Pstream::nonBlocking);
+
+    // Send ordering
+    forAll(sortMesh.boundaryMesh(), patchI)
+    {
+        const polyPatch& pp = sortMesh.boundaryMesh()[patchI];
+
+        if (isA<processorPolyPatch>(pp))
+        {
+            refCast<const processorPolyPatch>(pp).initOrder
+            (
+                pBufs,
+                primitivePatch
+                (
+                    SubList<face>
+                    (
+                        faces,
+                        patchSizes[patchI],
+                        patchStarts[patchI]
+                    ),
+                    points
+                )
+            );
+        }
+    }
+
+    pBufs.finishedSends();
+
+    // Receive and calculate ordering
+    bool anyChanged = false;
+
+    forAll(sortMesh.boundaryMesh(), patchI)
+    {
+        const polyPatch& pp = sortMesh.boundaryMesh()[patchI];
+
+        if (isA<processorPolyPatch>(pp))
+        {
+            labelList patchFaceMap(patchSizes[patchI], -1);
+            labelList patchFaceRotation(patchSizes[patchI], 0);
+
+            bool changed = refCast<const processorPolyPatch>(pp).order
+            (
+                pBufs,
+                primitivePatch
+                (
+                    SubList<face>
+                    (
+                        faces,
+                        patchSizes[patchI],
+                        patchStarts[patchI]
+                    ),
+                    points
+                ),
+                patchFaceMap,
+                patchFaceRotation
+            );
+
+            if (changed)
+            {
+                // Merge patch face reordering into mesh face reordering table
+                label start = patchStarts[patchI];
+
+                forAll(patchFaceRotation, patchFaceI)
+                {
+                    rotation[patchFaceI + start]
+                        = patchFaceRotation[patchFaceI];
+                }
+
+                forAll(patchFaceMap, patchFaceI)
+                {
+                    if (patchFaceMap[patchFaceI] != patchFaceI)
+                    {
+                        faceMap[patchFaceI + start]
+                            = patchFaceMap[patchFaceI] + start;
+                    }
+                }
+
+                anyChanged = true;
+            }
+        }
+    }
+
+    reduce(anyChanged, orOp<bool>());
+
+    if (anyChanged)
+    {
+        // Rotate faces (rotation is already in new face indices).
+        label nRotated = 0;
+
+        forAll(rotation, faceI)
+        {
+            if (rotation[faceI] == -1)
+            {
+                continue;
+            }
+
+            if (rotation[faceI] != 0)
+            {
+                inplaceRotateList<List, label>(faces[faceI], rotation[faceI]);
+                nRotated++;
+            }
+        }
+
+        inplaceReorder(faceMap, faces);
+
+        Info<< indent << returnReduce(nRotated, sumOp<label>())
+            << " faces have been rotated" << decrIndent << decrIndent << endl;
+    }
+}
+
+
+void Foam::conformalVoronoiMesh::writeMesh
+(
+    const word& meshName,
+    const fileName& instance,
+    pointField& points,
+    labelList& boundaryPts,
+    faceList& faces,
+    labelList& owner,
+    labelList& neighbour,
+    const wordList& patchTypes,
+    const wordList& patchNames,
+    const labelList& patchSizes,
+    const labelList& patchStarts,
+    const labelList& procNeighbours,
+    const pointField& cellCentres,
+    const PackedBoolList& boundaryFacesToRemove
+) const
+{
+    if (cvMeshControls().objOutput())
+    {
+        writeObjMesh(points, faces, word(meshName + ".obj"));
+    }
+
+    reorderPoints(points, boundaryPts, faces, patchStarts[0]);
+
+    if (Pstream::parRun())
+    {
+        reorderProcessorPatches
+        (
+            meshName,
+            instance,
+            points,
+            faces,
+            patchTypes,
+            patchNames,
+            patchSizes,
+            patchStarts,
+            procNeighbours
+        );
+    }
+
+    Info<< "    Constructing mesh" << endl;
+
+    timeCheck("Before fvMesh construction");
+
+    fvMesh mesh
+    (
+        IOobject
+        (
+            meshName,
+            instance,
+            runTime_,
+            IOobject::NO_READ,
+            IOobject::AUTO_WRITE
+        ),
+        xferMove(points),
+        xferMove(faces),
+        xferMove(owner),
+        xferMove(neighbour)
+    );
+
+    Info<< "    Adding patches to mesh" << endl;
+
+    List<polyPatch*> patches(patchStarts.size());
+
+    label nValidPatches = 0;
+
+    forAll(patches, p)
+    {
+        if (patchTypes[p] == processorPolyPatch::typeName)
+        {
+            // Do not create empty processor patches
+            if (patchSizes[p] > 0)
+            {
+                patches[nValidPatches] = new processorPolyPatch
+                (
+                    patchNames[p],
+                    patchSizes[p],
+                    patchStarts[p],
+                    nValidPatches,
+                    mesh.boundaryMesh(),
+                    Pstream::myProcNo(),
+                    procNeighbours[p],
+                    coupledPolyPatch::NOORDERING
+                );
+
+                nValidPatches++;
+            }
+        }
+        else
+        {
+            patches[nValidPatches] = polyPatch::New
+            (
+                patchTypes[p],
+                patchNames[p],
+                patchSizes[p],
+                patchStarts[p],
+                nValidPatches,
+                mesh.boundaryMesh()
+            ).ptr();
+
+            nValidPatches++;
+        }
+    }
+
+    // Add indirectPatchFaces to a face zone
+    {
+        labelList addr(boundaryFacesToRemove.count());
+        label count = 0;
+
+        forAll(boundaryFacesToRemove, faceI)
+        {
+            if (boundaryFacesToRemove[faceI])
+            {
+                addr[count++] = faceI;
+            }
+        }
+
+        label sz = mesh.faceZones().size();
+        boolList flip(addr.size(), false);
+        mesh.faceZones().setSize(sz + 1);
+        mesh.faceZones().set
+        (
+            sz,
+            new faceZone
+            (
+                "indirectPatchFaces",
+                addr,
+                flip,
+                sz,
+                mesh.faceZones()
+            )
+        );
+    }
+
+    patches.setSize(nValidPatches);
+
+    mesh.addFvPatches(patches);
+
+    timeCheck("Before fvMesh filtering");
+
+    autoPtr<polyMeshFilter> meshFilter;
+
+    label nInitialBadFaces = 0;
+
+    if (cvMeshControls().filterEdges())
+    {
+        Info<< nl << "Filtering edges on polyMesh" << nl << endl;
+
+        meshFilter.reset(new polyMeshFilter(mesh));
+
+        // Filter small edges only. This reduces the number of faces so that
+        // the face filtering is sped up.
+        nInitialBadFaces = meshFilter().filterEdges(0);
+        {
+            const autoPtr<fvMesh>& newMesh = meshFilter().filteredMesh();
+
+            polyTopoChange meshMod(newMesh);
+
+            meshMod.changeMesh(mesh, false);
+        }
+    }
+
+    if (cvMeshControls().filterFaces())
+    {
+        Info<< nl << "Filtering faces on polyMesh" << nl << endl;
+
+        meshFilter.reset(new polyMeshFilter(mesh));
+
+        meshFilter().filter(nInitialBadFaces);
+        {
+            const autoPtr<fvMesh>& newMesh = meshFilter().filteredMesh();
+
+            polyTopoChange meshMod(newMesh);
+
+            meshMod.changeMesh(mesh, false);
+        }
+    }
+
+    timeCheck("After fvMesh filtering");
+
+    mesh.setInstance(instance);
+
+    if (!mesh.write())
+    {
+        FatalErrorIn("Foam::conformalVoronoiMesh::writeMesh(..)")
+            << "Failed writing polyMesh."
+            << exit(FatalError);
+    }
+    else
+    {
+        Info<< nl << "Written filtered mesh to "
+            << mesh.polyMesh::instance() << nl
+            << endl;
+    }
+
+
+    volTensorField alignments
+    (
+        IOobject
+        (
+            "alignmentsField",
+            runTime_.timeName(),
+            runTime_,
+            IOobject::NO_READ,
+            IOobject::AUTO_WRITE
+        ),
+        mesh,
+        tensor::zero
+    );
+
+    forAll(mesh.cellCentres(), pI)
+    {
+        Vertex_handle nearV =
+            nearest_vertex
+            (
+                toPoint<Point>(mesh.cellCentres()[pI])
+            );
+        alignments[pI] = nearV->alignment();
+    }
+    alignments.write();
+
+    {
+        volVectorField alignmentx
+        (
+            IOobject
+            (
+                "alignmentsx",
+                runTime_.timeName(),
+                runTime_,
+                IOobject::NO_READ,
+                IOobject::AUTO_WRITE
+            ),
+            mesh,
+            vector::zero
+        );
+        forAll(alignmentx, aI)
+        {
+            alignmentx[aI] = alignments[aI].x();
+        }
+        alignmentx.write();
+    }
+    {
+        volVectorField alignmenty
+        (
+            IOobject
+            (
+                "alignmentsy",
+                runTime_.timeName(),
+                runTime_,
+                IOobject::NO_READ,
+                IOobject::AUTO_WRITE
+            ),
+            mesh,
+            vector::zero
+        );
+        forAll(alignmenty, aI)
+        {
+            alignmenty[aI] = alignments[aI].y();
+        }
+        alignmenty.write();
+    }
+    {
+        volVectorField alignmentz
+        (
+            IOobject
+            (
+                "alignmentsz",
+                runTime_.timeName(),
+                runTime_,
+                IOobject::NO_READ,
+                IOobject::AUTO_WRITE
+            ),
+            mesh,
+            vector::zero
+        );
+        forAll(alignmentz, aI)
+        {
+            alignmentz[aI] = alignments[aI].z();
+        }
+        alignmentz.write();
+    }
+    labelIOList boundaryIOPts
+    (
+        IOobject
+        (
+            "boundaryPoints",
+            instance,
+            runTime_,
+            IOobject::NO_READ,
+            IOobject::AUTO_WRITE
+        ),
+        boundaryPts
+    );
+
+
+
+
+    // Dump list of boundary points
+    forAll(mesh.boundaryMesh(), patchI)
+    {
+        const polyPatch& pp = mesh.boundaryMesh()[patchI];
+
+        if (!isA<coupledPolyPatch>(pp))
+        {
+            forAll(pp, fI)
+            {
+                const face& boundaryFace = pp[fI];
+
+                forAll(boundaryFace, pI)
+                {
+                    const label boundaryPointI = boundaryFace[pI];
+
+                    boundaryIOPts[boundaryPointI] = boundaryPts[boundaryPointI];
+                }
+            }
+        }
+    }
+
+    boundaryIOPts.write();
+
+//    forAllConstIter(labelHashSet, pointsInPatch, pI)
+//    {
+//        const Foam::point& ptMaster = mesh.points()[pI.key()];
+//
+//        forAllConstIter(labelHashSet, pointsInPatch, ptI)
+//        {
+//            if (ptI.key() != pI.key())
+//            {
+//                const Foam::point& ptSlave = mesh.points()[ptI.key()];
+//
+//                const scalar dist = mag(ptMaster - ptSlave);
+//                if (ptMaster == ptSlave)
+//                {
+//                    Pout<< "Point(" << pI.key() << ") " << ptMaster
+//                        << " == "
+//                        << "(" << ptI.key() << ") " << ptSlave
+//                        << endl;
+//                }
+//                else if (dist == 0)
+//                {
+//                    Pout<< "Point(" << pI.key() << ") " << ptMaster
+//                        << " ~= "
+//                        << "(" << ptI.key() << ") " << ptSlave
+//                        << endl;
+//                }
+//            }
+//        }
+//    }
+
+//    writeCellSizes(mesh);
+
+//    writeCellAlignments(mesh);
+
+//    writeCellCentres(mesh);
+
+//    findRemainingProtrusionSet(mesh);
+}
+
+
+void Foam::conformalVoronoiMesh::writeObjMesh
+(
+    const pointField& points,
+    const faceList& faces,
+    const fileName& fName
+) const
+{
+    OFstream str(runTime_.path()/fName);
+
+    Pout<< nl << "Writing points and faces to " << str.name() << endl;
+
+    forAll(points, p)
+    {
+        meshTools::writeOBJ(str, points[p]);
+    }
+
+    forAll(faces, f)
+    {
+        str<< 'f';
+
+        const face& fP = faces[f];
+
+        forAll(fP, p)
+        {
+            str<< ' ' << fP[p] + 1;
+        }
+
+        str<< nl;
+    }
+}
+
+
+void Foam::conformalVoronoiMesh::writeCellSizes
+(
+    const fvMesh& mesh
+) const
+{
+    {
+        timeCheck("Start writeCellSizes");
+
+        Info<< nl << "Create targetCellSize volScalarField" << endl;
+
+        volScalarField targetCellSize
+        (
+            IOobject
+            (
+                "targetCellSize",
+                mesh.polyMesh::instance(),
+                mesh,
+                IOobject::NO_READ,
+                IOobject::AUTO_WRITE
+            ),
+            mesh,
+            dimensionedScalar("cellSize", dimLength, 0),
+            zeroGradientFvPatchScalarField::typeName
+        );
+
+        scalarField& cellSize = targetCellSize.internalField();
+
+        const vectorField& C = mesh.cellCentres();
+
+        forAll(cellSize, i)
+        {
+            cellSize[i] = cellShapeControls().cellSize(C[i]);
+        }
+
+        // Info<< nl << "Create targetCellVolume volScalarField" << endl;
+
+        // volScalarField targetCellVolume
+        // (
+        //     IOobject
+        //     (
+        //         "targetCellVolume",
+        //         mesh.polyMesh::instance(),
+        //         mesh,
+        //         IOobject::NO_READ,
+        //         IOobject::AUTO_WRITE
+        //     ),
+        //     mesh,
+        //     dimensionedScalar("cellVolume", dimLength, 0),
+        //     zeroGradientFvPatchScalarField::typeName
+        // );
+
+        // targetCellVolume.internalField() = pow3(cellSize);
+
+        // Info<< nl << "Create actualCellVolume volScalarField" << endl;
+
+        // volScalarField actualCellVolume
+        // (
+        //     IOobject
+        //     (
+        //         "actualCellVolume",
+        //         mesh.polyMesh::instance(),
+        //         mesh,
+        //         IOobject::NO_READ,
+        //         IOobject::AUTO_WRITE
+        //     ),
+        //     mesh,
+        //     dimensionedScalar("cellVolume", dimVolume, 0),
+        //     zeroGradientFvPatchScalarField::typeName
+        // );
+
+        // actualCellVolume.internalField() = mesh.cellVolumes();
+
+        // Info<< nl << "Create equivalentCellSize volScalarField" << endl;
+
+        // volScalarField equivalentCellSize
+        // (
+        //     IOobject
+        //     (
+        //         "equivalentCellSize",
+        //         mesh.polyMesh::instance(),
+        //         mesh,
+        //         IOobject::NO_READ,
+        //         IOobject::AUTO_WRITE
+        //     ),
+        //     mesh,
+        //     dimensionedScalar("cellSize", dimLength, 0),
+        //     zeroGradientFvPatchScalarField::typeName
+        // );
+
+        // equivalentCellSize.internalField() = pow
+        // (
+        //     actualCellVolume.internalField(),
+        //     1.0/3.0
+        // );
+
+        targetCellSize.correctBoundaryConditions();
+        // targetCellVolume.correctBoundaryConditions();
+        // actualCellVolume.correctBoundaryConditions();
+        // equivalentCellSize.correctBoundaryConditions();
+
+        targetCellSize.write();
+        // targetCellVolume.write();
+        // actualCellVolume.write();
+        // equivalentCellSize.write();
+    }
+
+    // {
+    //     polyMesh tetMesh
+    //     (
+    //         IOobject
+    //         (
+    //             "tetDualMesh",
+    //             runTime_.constant(),
+    //             runTime_,
+    //             IOobject::MUST_READ
+    //         )
+    //     );
+
+    //     pointMesh ptMesh(tetMesh);
+
+    //     pointScalarField ptTargetCellSize
+    //     (
+    //         IOobject
+    //         (
+    //             "ptTargetCellSize",
+    //             runTime_.timeName(),
+    //             tetMesh,
+    //             IOobject::NO_READ,
+    //             IOobject::AUTO_WRITE
+    //         ),
+    //         ptMesh,
+    //         dimensionedScalar("ptTargetCellSize", dimLength, 0),
+    //         pointPatchVectorField::calculatedType()
+    //     );
+
+    //     scalarField& cellSize = ptTargetCellSize.internalField();
+
+    //     const vectorField& P = tetMesh.points();
+
+    //     forAll(cellSize, i)
+    //     {
+    //         cellSize[i] = cellShapeControls().cellSize(P[i]);
+    //     }
+
+    //     ptTargetCellSize.write();
+    // }
+}
+
+
+void Foam::conformalVoronoiMesh::writeCellAlignments
+(
+    const fvMesh& mesh
+) const
+{
+//    Info<< nl << "Create cellAlignments volTensorField" << endl;
+//
+//    volTensorField cellAlignments
+//    (
+//        IOobject
+//        (
+//            "cellAlignments",
+//            mesh.polyMesh::instance(),
+//            mesh,
+//            IOobject::NO_READ,
+//            IOobject::AUTO_WRITE
+//        ),
+//        mesh,
+//        tensor::I,
+//        zeroGradientFvPatchTensorField::typeName
+//    );
+//
+//    tensorField& cellAlignment = cellAlignments.internalField();
+//
+//    const vectorField& C = mesh.cellCentres();
+//
+//    vectorField xDir(cellAlignment.size());
+//    vectorField yDir(cellAlignment.size());
+//    vectorField zDir(cellAlignment.size());
+//
+//    forAll(cellAlignment, i)
+//    {
+//        cellAlignment[i] = cellShapeControls().cellAlignment(C[i]);
+//        xDir[i] = cellAlignment[i] & vector(1, 0, 0);
+//        yDir[i] = cellAlignment[i] & vector(0, 1, 0);
+//        zDir[i] = cellAlignment[i] & vector(0, 0, 1);
+//    }
+//
+//    OFstream xStr("xDir.obj");
+//    OFstream yStr("yDir.obj");
+//    OFstream zStr("zDir.obj");
+//
+//    forAll(xDir, i)
+//    {
+//        meshTools::writeOBJ(xStr, C[i], C[i] + xDir[i]);
+//        meshTools::writeOBJ(yStr, C[i], C[i] + yDir[i]);
+//        meshTools::writeOBJ(zStr, C[i], C[i] + zDir[i]);
+//    }
+//
+//    cellAlignments.correctBoundaryConditions();
+//
+//    cellAlignments.write();
+}
+
+
+void Foam::conformalVoronoiMesh::writeCellCentres
+(
+    const fvMesh& mesh
+) const
+{
+    Info<< "Writing components of cellCentre positions to volScalarFields"
+        << " ccx, ccy, ccz in " <<  runTime_.timeName() << endl;
+
+    for (direction i=0; i<vector::nComponents; i++)
+    {
+        volScalarField cci
+        (
+            IOobject
+            (
+                "cc" + word(vector::componentNames[i]),
+                runTime_.timeName(),
+                mesh,
+                IOobject::NO_READ,
+                IOobject::AUTO_WRITE
+            ),
+            mesh.C().component(i)
+        );
+
+        cci.write();
+    }
+}
+
+
+Foam::labelHashSet Foam::conformalVoronoiMesh::findRemainingProtrusionSet
+(
+    const polyMesh& mesh
+) const
+{
+    timeCheck("Start findRemainingProtrusionSet");
+
+    const polyBoundaryMesh& patches = mesh.boundaryMesh();
+
+    labelHashSet protrudingBoundaryPoints;
+
+    forAll(patches, patchI)
+    {
+        const polyPatch& patch = patches[patchI];
+
+        forAll(patch.localPoints(), pLPI)
+        {
+            label meshPtI = patch.meshPoints()[pLPI];
+
+            const Foam::point& pt = patch.localPoints()[pLPI];
+
+            if
+            (
+                geometryToConformTo_.wellOutside
+                (
+                    pt,
+                    sqr(targetCellSize(pt))
+                )
+            )
+            {
+                protrudingBoundaryPoints.insert(meshPtI);
+            }
+        }
+    }
+
+    cellSet protrudingCells
+    (
+        mesh,
+        "cvMesh_remainingProtrusions",
+        mesh.nCells()/1000
+    );
+
+    forAllConstIter(labelHashSet, protrudingBoundaryPoints, iter)
+    {
+        const label pointI = iter.key();
+        const labelList& pCells = mesh.pointCells()[pointI];
+
+        forAll(pCells, pCI)
+        {
+            protrudingCells.insert(pCells[pCI]);
+        }
+    }
+
+    label protrudingCellsSize = protrudingCells.size();
+
+    reduce(protrudingCellsSize, sumOp<label>());
+
+    if (cvMeshControls().objOutput() && protrudingCellsSize > 0)
+    {
+        Info<< nl << "Found " << protrudingCellsSize
+            << " cells protruding from the surface, writing cellSet "
+            << protrudingCells.name()
+            << endl;
+
+        protrudingCells.write();
+    }
+
+    return protrudingCells;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedCell/indexedCell.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedCell/indexedCell.C
new file mode 100644
index 0000000000000000000000000000000000000000..bd4973b32b91f5e81e317fbf6b5d88376a246315
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedCell/indexedCell.C
@@ -0,0 +1,89 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "indexedCell.H"
+
+// * * * * * * * * * * * * * * * *  IOStream operators * * * * * * * * * * * //
+
+template<class Gt, class Cb>
+Foam::Ostream& Foam::operator<<
+(
+    Ostream& os,
+    const InfoProxy<CGAL::indexedCell<Gt, Cb> >& p
+)
+{
+    const CGAL::indexedCell<Gt, Cb>& iv = p.t_;
+
+    os  << "Cell: ";
+
+    if (iv.index_ == CGAL::indexedCell<Gt, Cb>::ctFar)
+    {
+        os  << "far";
+    }
+    else if (iv.index_ >= 0)
+    {
+        os  << iv.index_;
+    }
+    else if (iv.index_ == CGAL::indexedCell<Gt, Cb>::ctInternal)
+    {
+        os  << "internal";
+    }
+    else if (iv.index_ == CGAL::indexedCell<Gt, Cb>::ctSurface)
+    {
+        os  << "surface";
+    }
+    else if (iv.index_ == CGAL::indexedCell<Gt, Cb>::ctFeatureEdge)
+    {
+        os  << "featureEdge";
+    }
+    else if (iv.index_ == CGAL::indexedCell<Gt, Cb>::ctFeaturePoint)
+    {
+        os  << "featurePoint";
+    }
+    else
+    {
+        os  << "unassigned";
+    }
+
+    if (iv.parallelDualVertex())
+    {
+        os  << " (processor)";
+    }
+    else
+    {
+        os  << " (local)";
+    }
+
+    os  << " filterCount: " << iv.filterCount_ << nl;
+    os  << "    " << iv.vertex(0)->info();
+    os  << "    " << iv.vertex(1)->info();
+    os  << "    " << iv.vertex(2)->info();
+    os  << "    " << iv.vertex(3)->info();
+
+    return os;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedCell/indexedCell.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedCell/indexedCell.H
new file mode 100644
index 0000000000000000000000000000000000000000..4669110b6e9edbb95dd1e0a9ea240576f95a49fd
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedCell/indexedCell.H
@@ -0,0 +1,262 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    indexedCell
+
+Description
+    An indexed form of CGAL::Triangulation_cell_base_3<K> used to keep
+    track of the Delaunay cells (tets) in the tessellation.
+
+SourceFiles
+    indexedCellI.H
+    indexedCell.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef indexedCell_H
+#define indexedCell_H
+
+#include <CGAL/Triangulation_3.h>
+#include <CGAL/Triangulation_cell_base_with_circumcenter_3.h>
+#include "indexedVertex.H"
+#include "List.H"
+#include "globalIndex.H"
+#include "Pstream.H"
+#include "Swap.H"
+#include "InfoProxy.H"
+#include "tetCell.H"
+#include "typeInfo.H"
+#include "vectorTools.H"
+#include "indexedCellEnum.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace CGAL
+{
+template<class Gt, class Cb> class indexedCell;
+}
+
+namespace Foam
+{
+class Ostream;
+template<class Gt, class Cb> Ostream& operator<<
+(
+    Ostream&,
+    const Foam::InfoProxy<CGAL::indexedCell<Gt, Cb> >&
+);
+}
+
+
+namespace CGAL
+{
+
+/*---------------------------------------------------------------------------*\
+                          Class indexedCell Declaration
+\*---------------------------------------------------------------------------*/
+
+template
+<
+    class Gt,
+    class Cb=CGAL::Triangulation_cell_base_with_circumcenter_3<Gt>
+>
+class indexedCell
+:
+    public Foam::indexedCellEnum,
+    public Cb
+{
+    // Private data
+
+        //- The index for this Delaunay tetrahedral cell.  Type information is
+        //- also carried:
+
+        //  ctFar : the dual point of this cell does not form part of the
+        //          internal or boundary of the dual mesh
+        //  >=0   : the (local) index of an internal or boundary dual point,
+        //           not on a processor face
+        //  < 0 && > ctFar : the (global) index of a dual point on a processor
+        //                   face
+
+        int index_;
+
+        //- The number of times that this Delaunay cell has been limited
+        //  during filtering
+        int filterCount_;
+
+
+    // Private member functions
+
+        //- Same as globallyOrderedCellVertices but without sorting
+        Foam::tetCell unsortedVertexGlobalIndices
+        (
+            const Foam::globalIndex& globalDelaunayVertexIndices
+        ) const;
+
+
+public:
+
+    typedef typename Cb::Vertex_handle                   Vertex_handle;
+    typedef typename Cb::Cell_handle                     Cell_handle;
+
+    template < typename TDS2 >
+    struct Rebind_TDS
+    {
+        typedef typename Cb::template Rebind_TDS<TDS2>::Other Cb2;
+        typedef indexedCell<Gt, Cb2>  Other;
+    };
+
+
+    // Constructors
+
+        inline indexedCell();
+
+        inline indexedCell
+        (
+            Vertex_handle v0,
+            Vertex_handle v1,
+            Vertex_handle v2,
+            Vertex_handle v3
+        );
+
+        inline indexedCell
+        (
+            Vertex_handle v0,
+            Vertex_handle v1,
+            Vertex_handle v2,
+            Vertex_handle v3,
+            Cell_handle n0,
+            Cell_handle n1,
+            Cell_handle n2,
+            Cell_handle n3
+        );
+
+
+    // Member Functions
+
+        inline int& cellIndex();
+
+        inline int cellIndex() const;
+
+#ifdef CGAL_INEXACT
+        inline const Foam::point& dual();
+#else
+        inline const Foam::point dual();
+#endif
+
+        inline bool unassigned() const;
+
+        inline int& filterCount();
+
+        inline int filterCount() const;
+
+        //- Is the Delaunay cell real, i.e. any real vertex
+        inline bool real() const;
+
+        //- Does the Delaunay cell have a far point
+        inline bool hasFarPoint() const;
+
+        //- Does the Delaunay cell have a feature point
+        inline bool hasFeaturePoint() const;
+
+        //- Does the Delaunay cell have a seed point
+        inline bool hasSeedPoint() const;
+
+        inline bool hasInternalPoint() const;
+
+        //- Does the Dual vertex form part of a processor patch
+        inline bool parallelDualVertex() const;
+
+        //- Does the Dual vertex form part of a processor patch
+        inline Foam::label dualVertexMasterProc() const;
+
+        inline Foam::FixedList<Foam::label, 4> processorsAttached() const;
+
+        //- Using the globalIndex object, return a list of four (sorted) global
+        //  Delaunay vertex indices that uniquely identify this tet in parallel
+        inline Foam::tetCell vertexGlobalIndices
+        (
+            const Foam::globalIndex& globalDelaunayVertexIndices
+        ) const;
+
+        //- Using the globalIndex object, return a list of four vertices with
+        //  so that the cell has a consistent orientation in parallel.
+        inline Foam::FixedList<Foam::label, 4> globallyOrderedCellVertices
+        (
+            const Foam::globalIndex& globalDelaunayVertexIndices
+        ) const;
+
+        //- Is the Delaunay cell part of the final dual mesh, i.e. any vertex
+        //  form part of the internal or boundary definition
+        inline bool internalOrBoundaryDualVertex() const;
+
+        //- Is the Delaunay cell real or referred (or mixed), i.e. all vertices
+        //  form part of the real or referred internal or boundary definition
+        inline bool anyInternalOrBoundaryDualVertex() const;
+
+        //- A dual vertex on the boundary will result from a Delaunay cell with
+        //  least one Delaunay vertex outside and at least one inside
+        inline bool boundaryDualVertex() const;
+
+        //- A dual vertex on a feature edge will result from this Delaunay cell
+        inline bool featureEdgeDualVertex() const;
+
+        inline bool nearProcBoundary() const;
+
+        inline bool potentialCoplanarCell() const;
+
+
+    // Info
+
+        //- Return info proxy.
+        //  Used to print indexedCell information to a stream
+        Foam::InfoProxy<indexedCell<Gt, Cb> > info() const
+        {
+            return *this;
+        }
+
+        friend Foam::Ostream& Foam::operator<< <Gt, Cb>
+        (
+            Foam::Ostream&,
+            const Foam::InfoProxy<indexedCell<Gt, Cb> >&
+        );
+
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace CGAL
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#include "indexedCellI.H"
+
+#ifdef NoRepository
+#   include "indexedCell.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedCell/indexedCellChecks.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedCell/indexedCellChecks.C
new file mode 100644
index 0000000000000000000000000000000000000000..7213739844d2035931f2177751a37ac76311ea1a
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedCell/indexedCellChecks.C
@@ -0,0 +1,128 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "plane.H"
+#include "tetrahedron.H"
+#include "pointConversion.H"
+#include "CGALTriangulation3DKernel.H"
+
+
+template <typename Cell>
+Foam::scalar Foam::cvMeshChecks::coplanarTet
+(
+    Cell& c,
+    const scalar tol
+)
+{
+    tetPointRef tet
+    (
+        topoint(c->vertex(0)->point()),
+        topoint(c->vertex(1)->point()),
+        topoint(c->vertex(2)->point()),
+        topoint(c->vertex(3)->point())
+    );
+
+    const scalar quality = tet.quality();
+
+    if (quality < tol)
+    {
+        return quality;
+    }
+
+    return 0;
+
+//    plane triPlane
+//    (
+//        topoint(c->vertex(0)->point()),
+//        topoint(c->vertex(1)->point()),
+//        topoint(c->vertex(2)->point())
+//    );
+//
+//    const scalar distance = triPlane.distance(topoint(c->vertex(3)->point()));
+//
+//    // Check if the four points are roughly coplanar. If they are then we
+//    // cannot calculate the circumcentre. Better test might be the volume
+//    // of the tet.
+//    if (distance < tol)
+//    {
+//        return 0;
+//    }
+//
+//    return distance;
+}
+
+
+template <typename Cell>
+bool Foam::cvMeshChecks::closePoints
+(
+    Cell& c,
+    const scalar tol
+)
+{
+    for (label v = 0; v < 4; ++v)
+    {
+        for (label vA = v + 1; vA < 4; ++vA)
+        {
+            if
+            (
+                mag
+                (
+                    topoint(c->vertex(v)->point())
+                  - topoint(c->vertex(vA)->point())
+                )
+              < tol
+            )
+            {
+                return true;
+            }
+        }
+    }
+
+    return false;
+}
+
+
+template <typename Cell>
+bool Foam::cvMeshChecks::smallVolume
+(
+    Cell& c,
+    const scalar tol
+)
+{
+    CGAL::Tetrahedron_3<baseK> tet
+    (
+        c->vertex(0)->point(),
+        c->vertex(1)->point(),
+        c->vertex(2)->point(),
+        c->vertex(3)->point()
+    );
+
+    if (tet.volume() < tol)
+    {
+        return true;
+    }
+
+    return false;
+}
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedCell/indexedCellChecks.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedCell/indexedCellChecks.H
new file mode 100644
index 0000000000000000000000000000000000000000..c040eafab67c1b07447377de165db13fb32b7dce
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedCell/indexedCellChecks.H
@@ -0,0 +1,77 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef indexedCellChecks_H
+#define indexedCellChecks_H
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+namespace cvMeshChecks
+{
+
+    template <typename Cell>
+    scalar coplanarTet
+    (
+        Cell& c,
+        const scalar tol = 1e-12
+    );
+
+    template <typename Cell>
+    bool closePoints
+    (
+        Cell& c,
+        const scalar tol = 1e-12
+    );
+
+    template <typename Cell>
+    bool smallVolume
+    (
+        Cell& c,
+        const scalar tol = 0.0
+    );
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace cvMeshChecks
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+#   include "indexedCellChecks.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedCell/indexedCellEnum.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedCell/indexedCellEnum.C
new file mode 100644
index 0000000000000000000000000000000000000000..5d7d953948bb73934c550843bb1371d068a3b249
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedCell/indexedCellEnum.C
@@ -0,0 +1,46 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "indexedCellEnum.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+template<>
+const char*
+Foam::NamedEnum<Foam::indexedCellEnum::cellTypes, 6>::names[] =
+{
+    "Unassigned",
+    "Internal",
+    "Surface",
+    "FeatureEdge",
+    "FeaturePoint",
+    "Far"
+};
+
+const Foam::NamedEnum<Foam::indexedCellEnum::cellTypes, 6>
+cellTypesNames_;
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedCell/indexedCellEnum.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedCell/indexedCellEnum.H
new file mode 100644
index 0000000000000000000000000000000000000000..5ccef621e74d1bf80816da1fd6380a77779fac15
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedCell/indexedCellEnum.H
@@ -0,0 +1,80 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    indexedCellEnum
+
+Description
+
+SourceFiles
+    indexedCellEnum.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef indexedCellEnum_H
+#define indexedCellEnum_H
+
+#include "NamedEnum.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+class indexedCellEnum
+{
+public:
+
+
+    enum cellTypes
+    {
+        ctUnassigned    = INT_MIN,
+        ctFar           = INT_MIN + 1,
+        ctInternal      = INT_MIN + 2,
+        ctSurface       = INT_MIN + 3,
+        ctFeatureEdge   = INT_MIN + 4,
+        ctFeaturePoint  = INT_MIN + 5
+    };
+
+    static const Foam::NamedEnum<cellTypes, 6> cellTypesNames_;
+};
+
+
+template<>
+inline bool contiguous<indexedCellEnum>()
+{
+    return true;
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedCell/indexedCellI.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedCell/indexedCellI.H
new file mode 100644
index 0000000000000000000000000000000000000000..83434ba2f12712085d2ca796067708d195eddc8a
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedCell/indexedCellI.H
@@ -0,0 +1,538 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+//#include "indexedCellChecks.H"
+
+template<class Gt, class Cb>
+Foam::tetCell CGAL::indexedCell<Gt, Cb>::unsortedVertexGlobalIndices
+(
+    const Foam::globalIndex& globalDelaunayVertexIndices
+) const
+{
+    Foam::tetCell tVGI;
+
+    for (int i = 0; i < 4; i++)
+    {
+        Vertex_handle v = this->vertex(i);
+
+        // Finding the global index of each Delaunay vertex
+        tVGI[i] = globalDelaunayVertexIndices.toGlobal
+        (
+            Foam::Pstream::myProcNo(),
+            v->index()
+        );
+    }
+
+    return tVGI;
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+template<class Gt, class Cb>
+CGAL::indexedCell<Gt, Cb>::indexedCell()
+:
+    Cb(),
+    index_(ctUnassigned),
+    filterCount_(0)
+{}
+
+
+template<class Gt, class Cb>
+CGAL::indexedCell<Gt, Cb>::indexedCell
+(
+    Vertex_handle v0, Vertex_handle v1, Vertex_handle v2, Vertex_handle v3
+)
+:
+    Cb(v0, v1, v2, v3),
+    index_(ctUnassigned),
+    filterCount_(0)
+{}
+
+
+template<class Gt, class Cb>
+CGAL::indexedCell<Gt, Cb>::indexedCell
+(
+    Vertex_handle v0,
+    Vertex_handle v1,
+    Vertex_handle v2,
+    Vertex_handle v3,
+    Cell_handle n0,
+    Cell_handle n1,
+    Cell_handle n2,
+    Cell_handle n3
+)
+:
+    Cb(v0, v1, v2, v3, n0, n1, n2, n3),
+    index_(ctUnassigned),
+    filterCount_(0)
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+template<class Gt, class Cb>
+int& CGAL::indexedCell<Gt, Cb>::cellIndex()
+{
+    return index_;
+}
+
+
+template<class Gt, class Cb>
+int CGAL::indexedCell<Gt, Cb>::cellIndex() const
+{
+    return index_;
+}
+
+
+#ifdef CGAL_INEXACT
+    template<class Gt, class Cb>
+    const Foam::point& CGAL::indexedCell<Gt, Cb>::dual()
+    {
+    //    if (Foam::cvMeshChecks::coplanarTet(*this, 1e-20) == 0)
+    //    {
+            // Do exact calc
+    //    }
+
+        return reinterpret_cast<const Foam::point&>(this->circumcenter());
+    }
+#else
+    template<class Gt, class Cb>
+    const Foam::point CGAL::indexedCell<Gt, Cb>::dual()
+    {
+        const typename Gt::Point_3& P = this->circumcenter();
+
+        return Foam::point
+        (
+            CGAL::to_double(P.x()),
+            CGAL::to_double(P.y()),
+            CGAL::to_double(P.z())
+        );
+    }
+#endif
+
+
+template<class Gt, class Cb>
+inline bool CGAL::indexedCell<Gt, Cb>::unassigned() const
+{
+    return index_ == ctUnassigned;
+}
+
+
+template<class Gt, class Cb>
+inline int& CGAL::indexedCell<Gt, Cb>::filterCount()
+{
+    return filterCount_;
+}
+
+
+template<class Gt, class Cb>
+inline int CGAL::indexedCell<Gt, Cb>::filterCount() const
+{
+    return filterCount_;
+}
+
+
+template<class Gt, class Cb>
+inline bool CGAL::indexedCell<Gt, Cb>::real() const
+{
+    return
+    (
+        (
+            this->vertex(0)->real()
+         || this->vertex(1)->real()
+         || this->vertex(2)->real()
+         || this->vertex(3)->real()
+        )
+        &&
+        !(
+            this->vertex(0)->farPoint()
+         || this->vertex(1)->farPoint()
+         || this->vertex(2)->farPoint()
+         || this->vertex(3)->farPoint()
+        )
+    );
+}
+
+
+template<class Gt, class Cb>
+inline bool CGAL::indexedCell<Gt, Cb>::hasFarPoint() const
+{
+    return
+    (
+        this->vertex(0)->farPoint()
+     || this->vertex(1)->farPoint()
+     || this->vertex(2)->farPoint()
+     || this->vertex(3)->farPoint()
+    );
+}
+
+
+template<class Gt, class Cb>
+inline bool CGAL::indexedCell<Gt, Cb>::hasFeaturePoint() const
+{
+    return
+    (
+        this->vertex(0)->featurePoint()
+     || this->vertex(1)->featurePoint()
+     || this->vertex(2)->featurePoint()
+     || this->vertex(3)->featurePoint()
+    );
+}
+
+
+template<class Gt, class Cb>
+inline bool CGAL::indexedCell<Gt, Cb>::hasSeedPoint() const
+{
+    return
+    (
+        this->vertex(0)->seedPoint()
+     || this->vertex(1)->seedPoint()
+     || this->vertex(2)->seedPoint()
+     || this->vertex(3)->seedPoint()
+    );
+}
+
+
+template<class Gt, class Cb>
+inline bool CGAL::indexedCell<Gt, Cb>::hasInternalPoint() const
+{
+    return
+    (
+        this->vertex(0)->internalPoint()
+     || this->vertex(1)->internalPoint()
+     || this->vertex(2)->internalPoint()
+     || this->vertex(3)->internalPoint()
+    );
+}
+
+
+template<class Gt, class Cb>
+inline bool CGAL::indexedCell<Gt, Cb>::parallelDualVertex() const
+{
+    return
+    (
+        !this->hasFarPoint()
+    &&
+        (
+            this->vertex(0)->referred()
+         || this->vertex(1)->referred()
+         || this->vertex(2)->referred()
+         || this->vertex(3)->referred()
+        )
+    &&
+        (
+            this->vertex(0)->real()
+         || this->vertex(1)->real()
+         || this->vertex(2)->real()
+         || this->vertex(3)->real()
+        )
+    );
+}
+
+
+template<class Gt, class Cb>
+inline Foam::label CGAL::indexedCell<Gt, Cb>::dualVertexMasterProc() const
+{
+    if (!parallelDualVertex())
+    {
+        return -1;
+    }
+
+    // The master processor is the lowest numbered of the four on this tet.
+
+    int masterProc = Foam::Pstream::nProcs() + 1;
+
+    for (int i = 0; i < 4; i++)
+    {
+        if (this->vertex(i)->referred())
+        {
+            masterProc = min(masterProc, this->vertex(i)->procIndex());
+        }
+        else
+        {
+            masterProc = min(masterProc, Foam::Pstream::myProcNo());
+        }
+    }
+
+    return masterProc;
+}
+
+
+template<class Gt, class Cb>
+inline Foam::FixedList<Foam::label, 4>
+CGAL::indexedCell<Gt, Cb>::processorsAttached() const
+{
+    if (!parallelDualVertex())
+    {
+        return Foam::FixedList<Foam::label, 4>(Foam::Pstream::myProcNo());
+    }
+
+    Foam::FixedList<Foam::label, 4> procsAttached
+    (
+        Foam::Pstream::myProcNo()
+    );
+
+    for (int i = 0; i < 4; i++)
+    {
+        if (this->vertex(i)->referred())
+        {
+            procsAttached[i] = this->vertex(i)->procIndex();
+        }
+    }
+
+    return procsAttached;
+}
+
+
+template<class Gt, class Cb>
+inline Foam::tetCell CGAL::indexedCell<Gt, Cb>::vertexGlobalIndices
+(
+    const Foam::globalIndex& globalDelaunayVertexIndices
+) const
+{
+    // tetVertexGlobalIndices
+    Foam::tetCell tVGI
+        = unsortedVertexGlobalIndices(globalDelaunayVertexIndices);
+
+    // bubble sort
+    for (int i = 0; i < tVGI.size(); i++)
+    {
+        for (int j = tVGI.size() - 1 ; j > i; j--)
+        {
+            if (tVGI[j - 1] > tVGI[j])
+            {
+                Foam::Swap(tVGI[j - 1], tVGI[j]);
+            }
+        }
+    }
+
+    return tVGI;
+}
+
+
+template<class Gt, class Cb>
+inline Foam::FixedList<Foam::label, 4>
+CGAL::indexedCell<Gt, Cb>::globallyOrderedCellVertices
+(
+    const Foam::globalIndex& globalDelaunayVertexIndices
+) const
+{
+    // tetVertexGlobalIndices
+    Foam::tetCell tVGI
+        = unsortedVertexGlobalIndices(globalDelaunayVertexIndices);
+
+    Foam::FixedList<Foam::label, 4> vertexMap(Foam::identity(4));
+
+    // bubble sort
+    for (int i = 0; i < tVGI.size(); i++)
+    {
+        for (int j = tVGI.size() - 1 ; j > i; j--)
+        {
+            if (tVGI[j - 1] > tVGI[j])
+            {
+                Foam::Swap(tVGI[j - 1], tVGI[j]);
+                Foam::Swap(vertexMap[j - 1], vertexMap[j]);
+            }
+        }
+    }
+
+    for (int i = 0; i < 4; i++)
+    {
+        tVGI[i] = vertexMap[i];
+    }
+
+    return tVGI;
+}
+
+
+template<class Gt, class Cb>
+inline bool CGAL::indexedCell<Gt, Cb>::internalOrBoundaryDualVertex() const
+{
+    return
+    (
+        this->vertex(0)->internalOrBoundaryPoint()
+     || this->vertex(1)->internalOrBoundaryPoint()
+     || this->vertex(2)->internalOrBoundaryPoint()
+     || this->vertex(3)->internalOrBoundaryPoint()
+    );
+}
+
+
+template<class Gt, class Cb>
+inline bool CGAL::indexedCell<Gt, Cb>::anyInternalOrBoundaryDualVertex() const
+{
+    return
+    (
+        this->vertex(0)->internalOrBoundaryPoint()
+     || this->vertex(0)->externalBoundaryPoint()
+     || this->vertex(1)->internalOrBoundaryPoint()
+     || this->vertex(1)->externalBoundaryPoint()
+     || this->vertex(2)->internalOrBoundaryPoint()
+     || this->vertex(2)->externalBoundaryPoint()
+     || this->vertex(3)->internalOrBoundaryPoint()
+     || this->vertex(3)->externalBoundaryPoint()
+    );
+}
+
+
+template<class Gt, class Cb>
+inline bool CGAL::indexedCell<Gt, Cb>::boundaryDualVertex() const
+{
+    return
+    (
+        (
+           this->vertex(0)->internalBoundaryPoint()
+        || this->vertex(1)->internalBoundaryPoint()
+        || this->vertex(2)->internalBoundaryPoint()
+        || this->vertex(3)->internalBoundaryPoint()
+        )
+     && (
+           this->vertex(0)->externalBoundaryPoint()
+        || this->vertex(1)->externalBoundaryPoint()
+        || this->vertex(2)->externalBoundaryPoint()
+        || this->vertex(3)->externalBoundaryPoint()
+        )
+    );
+}
+
+
+template<class Gt, class Cb>
+inline bool CGAL::indexedCell<Gt, Cb>::featureEdgeDualVertex() const
+{
+    return
+    (
+        this->vertex(0)->featureEdgePoint()
+     && this->vertex(1)->featureEdgePoint()
+     && this->vertex(2)->featureEdgePoint()
+     && this->vertex(3)->featureEdgePoint()
+    );
+}
+
+
+template<class Gt, class Cb>
+inline bool CGAL::indexedCell<Gt, Cb>::nearProcBoundary() const
+{
+    return
+    (
+        this->vertex(0)->nearProcBoundary()
+     || this->vertex(1)->nearProcBoundary()
+     || this->vertex(2)->nearProcBoundary()
+     || this->vertex(3)->nearProcBoundary()
+    );
+}
+
+
+template<class Gt, class Cb>
+inline bool CGAL::indexedCell<Gt, Cb>::potentialCoplanarCell() const
+{
+    Foam::label nMasters = 0;
+    Foam::label nSlaves = 0;
+
+    Vertex_handle vM[2];
+    Vertex_handle vS[2];
+
+    for (Foam::label i = 0; i < 4; ++i)
+    {
+        Vertex_handle v = this->vertex(i);
+
+        if (v->internalBoundaryPoint())
+        {
+            vM[nMasters] = v;
+            nMasters++;
+        }
+
+        if (v->externalBoundaryPoint())
+        {
+            vS[nSlaves] = v;
+            nSlaves++;
+        }
+    }
+
+    Foam::label nPairs = 0;
+
+    if (nMasters == 2 && nSlaves == 2)
+    {
+        Foam::vector vp0(Foam::vector::zero);
+        Foam::vector vp1(Foam::vector::zero);
+
+        if
+        (
+            vM[0]->type() == vS[0]->index()
+         && vM[0]->index() == vS[0]->type()
+        )
+        {
+            vp0 = reinterpret_cast<const Foam::point&>(vM[0]->point())
+                - reinterpret_cast<const Foam::point&>(vS[0]->point());
+            nPairs++;
+        }
+        else if
+        (
+            vM[0]->type() == vS[1]->index()
+         && vM[0]->index() == vS[1]->type()
+        )
+        {
+            vp0 = reinterpret_cast<const Foam::point&>(vM[0]->point())
+                - reinterpret_cast<const Foam::point&>(vS[1]->point());
+            nPairs++;
+        }
+
+        if
+        (
+            vM[1]->type() == vS[0]->index()
+         && vM[1]->index() == vS[0]->type()
+        )
+        {
+            vp1 = reinterpret_cast<const Foam::point&>(vM[1]->point())
+                - reinterpret_cast<const Foam::point&>(vS[0]->point());
+            nPairs++;
+        }
+        else if
+        (
+            vM[1]->type() == vS[1]->index()
+         && vM[1]->index() == vS[1]->type()
+        )
+        {
+            vp1 = reinterpret_cast<const Foam::point&>(vM[1]->point())
+                - reinterpret_cast<const Foam::point&>(vS[1]->point());
+            nPairs++;
+        }
+
+        if (nPairs == 2)
+        {
+            if (Foam::vectorTools::areParallel(vp0, vp1))
+            {
+                Foam::Pout<< "PARALLEL" << Foam::endl;
+
+                return true;
+            }
+        }
+    }
+
+    return false;
+}
+
+
+// * * * * * * * * * * * * * * * Friend Functions  * * * * * * * * * * * * * //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedVertex/indexedVertex.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedVertex/indexedVertex.C
new file mode 100644
index 0000000000000000000000000000000000000000..5aa39368740d93ff1203ba896c98a6364755e512
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedVertex/indexedVertex.C
@@ -0,0 +1,185 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "indexedVertex.H"
+#include "point.H"
+#include "Istream.H"
+#include "Ostream.H"
+#include "OStringStream.H"
+#include "IStringStream.H"
+
+// * * * * * * * * * * * * * * * *  IOStream operators * * * * * * * * * * * //
+
+Foam::Istream& Foam::operator>>
+(
+    Istream& is,
+    CGAL::Point_3<baseK>& p
+)
+{
+//    string data(is);
+//
+//    std::istringstream stdIs;
+//
+//    CGAL::set_ascii_mode(stdIs);
+//
+//    stdIs.str(data);
+//
+//    CGAL::Gmpz xNumer, xDenom;
+//    CGAL::Gmpz yNumer, yDenom;
+//    CGAL::Gmpz zNumer, zDenom;
+//
+//    stdIs >> xNumer >> xDenom >> yNumer >> yDenom >> zNumer >> zDenom;
+//
+//    CGAL::Gmpq x(xNumer, xDenom);
+//    CGAL::Gmpq y(yNumer, yDenom);
+//    CGAL::Gmpq z(zNumer, zDenom);
+//
+//    p = CGAL::Point_3<baseK>
+//    (
+//        CGAL::to_double(x),
+//        CGAL::to_double(y),
+//        CGAL::to_double(z)
+//    );
+
+    Foam::point pt;
+
+    is >> pt.x() >> pt.y() >> pt.z();
+
+    p = CGAL::Point_3<baseK>
+    (
+        pt.x(),
+        pt.y(),
+        pt.z()
+    );
+
+    return is;
+}
+
+
+Foam::Ostream& Foam::operator<<
+(
+    Ostream& os,
+    const CGAL::Point_3<baseK>& p
+)
+{
+//    CGAL::Gmpq x(CGAL::to_double(p.x()));
+//    CGAL::Gmpq y(CGAL::to_double(p.y()));
+//    CGAL::Gmpq z(CGAL::to_double(p.z()));
+//
+//    std::ostringstream stdOs;
+//
+//    CGAL::set_ascii_mode(stdOs);
+//
+//    stdOs<< x.numerator() << ' ' << x.denominator() << ' '
+//         << y.numerator() << ' ' << y.denominator() << ' '
+//         << z.numerator() << ' ' << z.denominator();
+//
+//    os << stdOs.str();
+
+    os  << CGAL::to_double(p.x()) << ' '
+        << CGAL::to_double(p.y()) << ' '
+        << CGAL::to_double(p.z());
+
+    return os;
+}
+
+
+template<class Gt, class Vb>
+Foam::Ostream& Foam::operator<<
+(
+    Ostream& os,
+    const CGAL::indexedVertex<Gt, Vb>& p
+)
+{
+    os  << p.point()
+        << p.index()
+        << static_cast<int>(p.type())
+        << p.procIndex()
+        << p.alignment()
+        << p.targetCellSize();
+
+    return os;
+}
+
+
+template<class Gt, class Vb>
+Foam::Istream& Foam::operator>>
+(
+    Istream& is,
+    CGAL::indexedVertex<Gt, Vb>& p
+)
+{
+    is  >> p.point()
+        >> p.index();
+
+    int type;
+    is  >> type;
+
+    p.type() = static_cast<Foam::indexedVertexEnum::vertexType>(type);
+
+    is  >> p.procIndex()
+        >> p.alignment()
+        >> p.targetCellSize();
+
+    return is;
+}
+
+
+template<class Gt, class Vb>
+Foam::Ostream& Foam::operator<<
+(
+    Ostream& os,
+    const InfoProxy<CGAL::indexedVertex<Gt, Vb> >& p
+)
+{
+    const CGAL::indexedVertex<Gt, Vb>& iv = p.t_;
+
+    const Foam::point pt
+    (
+        CGAL::to_double(iv.point().x()),
+        CGAL::to_double(iv.point().y()),
+        CGAL::to_double(iv.point().z())
+    );
+
+    string referred
+    (
+        Pstream::myProcNo() == iv.processor_
+      ? string(" (local)")
+      : string(" (from " + name(iv.processor_) + ")")
+    );
+
+    os  << iv.index_ << " "
+        << CGAL::indexedVertex<Gt, Vb>::vertexTypeNames_[iv.type_]
+        << " at:" << pt
+        << " size:" << iv.targetCellSize_
+        << " alignment:" << iv.alignment_
+        << referred.c_str()
+        << endl;
+
+    return os;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedVertex/indexedVertex.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedVertex/indexedVertex.H
new file mode 100644
index 0000000000000000000000000000000000000000..f39e90761d0666415b2ab03878a65addf72d2744
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedVertex/indexedVertex.H
@@ -0,0 +1,354 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    indexedVertex
+
+Description
+    An indexed form of CGAL::Triangulation_vertex_base_3<K> used to keep
+    track of the Delaunay vertices in the tessellation.
+
+SourceFiles
+    indexedVertexI.H
+    indexedVertex.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef indexedVertex_H
+#define indexedVertex_H
+
+#include <CGAL/Triangulation_3.h>
+#include "CGALTriangulation3DKernel.H"
+#include "tensor.H"
+#include "InfoProxy.H"
+#include "point.H"
+#include "indexedVertexEnum.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace CGAL
+{
+template<class Gt, class Vb> class indexedVertex;
+}
+
+namespace Foam
+{
+
+class Ostream;
+class Istream;
+
+template<class Gt, class Vb> Ostream& operator<<
+(
+    Ostream&,
+    const Foam::InfoProxy<CGAL::indexedVertex<Gt, Vb> >&
+);
+
+template<class Gt, class Vb> Ostream& operator<<
+(
+    Ostream&,
+    const CGAL::indexedVertex<Gt, Vb>&
+);
+
+template<class Gt, class Vb> Istream& operator>>
+(
+    Istream&,
+    CGAL::indexedVertex<Gt, Vb>&
+);
+
+inline Istream& operator>>
+(
+    Istream& is,
+    CGAL::Point_3<baseK>& p
+);
+
+inline Ostream& operator<<
+(
+    Ostream& os,
+    const CGAL::Point_3<baseK>& p
+);
+
+} // End namespace Foam
+
+
+namespace CGAL
+{
+
+/*---------------------------------------------------------------------------*\
+                         Class indexedVertex Declaration
+\*---------------------------------------------------------------------------*/
+
+template<class Gt, class Vb = CGAL::Triangulation_vertex_base_3<Gt> >
+class indexedVertex
+:
+    public Foam::indexedVertexEnum,
+    public Vb
+{
+    // Private data
+
+        //- Type of pair-point
+        vertexType type_;
+
+        //- The index for this Delaunay vertex.  For referred vertices, the
+        //  index is negative for vertices that are the outer (slave) of point
+        //  pairs
+        int index_;
+
+        //- Number of the processor that owns this vertex
+        int processor_;
+
+        //- Required alignment of the dual cell of this vertex
+        Foam::tensor alignment_;
+
+        //- Target size of the dual cell of this vertex
+        Foam::scalar targetCellSize_;
+
+        //- Specify whether the vertex is fixed or movable.
+//        bool vertexFixed_;
+
+
+public:
+
+    typedef typename Vb::Triangulation_data_structure   Tds;
+    typedef typename Vb::Point                          Point;
+    typedef typename Tds::Vertex_handle                 Vertex_handle;
+    typedef typename Tds::Cell_handle                   Cell_handle;
+
+    template<typename TDS2>
+    struct Rebind_TDS
+    {
+        typedef typename Vb::template Rebind_TDS<TDS2>::Other   Vb2;
+        typedef indexedVertex<Gt,Vb2>                           Other;
+    };
+
+    // Constructors
+
+        inline indexedVertex();
+
+        inline indexedVertex(const Point& p);
+
+        inline indexedVertex(const Point& p, vertexType type);
+
+        inline indexedVertex(const Foam::point& p, vertexType type);
+
+        inline indexedVertex
+        (
+            const Point& p,
+            int index,
+            vertexType type,
+            int processor
+        );
+
+        inline indexedVertex(const Point& p, Cell_handle f);
+
+        inline indexedVertex(Cell_handle f);
+
+
+    // Member Functions
+
+        inline int& index();
+
+        inline int index() const;
+
+        inline vertexType& type();
+
+        inline vertexType type() const;
+
+        inline Foam::tensor& alignment();
+
+        inline const Foam::tensor& alignment() const;
+
+        inline Foam::scalar& targetCellSize();
+
+        inline Foam::scalar targetCellSize() const;
+
+        inline bool uninitialised() const;
+
+        //- Is point a far-point
+        inline bool farPoint() const;
+
+        //- Is point internal, i.e. not on boundary
+        inline bool internalPoint() const;
+
+        //- Is this a referred vertex
+        inline bool referred() const;
+
+        //- Is this a "real" point on this processor, i.e. is internal or part
+        //  of the boundary description, and not a "far" or "referred" point
+        inline bool real() const;
+
+        // For referred vertices, what is the original processor index
+        inline int procIndex() const;
+
+        // For referred vertices, set the original processor index
+        inline int& procIndex();
+
+        //- Set the point to be internal
+        inline void setInternal();
+
+        //- Is point internal and near the boundary
+        inline bool nearBoundary() const;
+
+        //- Set the point to be near the boundary
+        inline void setNearBoundary();
+
+        //- Is point internal and near a proc boundary
+        inline bool nearProcBoundary() const;
+
+        //- Set the point to be near a proc boundary
+        inline void setNearProcBoundary();
+
+        //- Either master or slave of pointPair.
+        inline bool boundaryPoint() const;
+
+        //- Either original internal point or master of pointPair.
+        inline bool internalOrBoundaryPoint() const;
+
+        //- Is point near the boundary or part of the boundary definition
+        inline bool nearOrOnBoundary() const;
+
+        //- Part of a feature point
+        inline bool featurePoint() const;
+
+        //- Part of a feature edge
+        inline bool featureEdgePoint() const;
+
+        //- Part of a surface point pair
+        inline bool surfacePoint() const;
+
+        inline bool internalBoundaryPoint() const;
+
+        inline bool externalBoundaryPoint() const;
+
+//        //- Is the vertex fixed or movable
+//        inline bool isVertexFixed() const;
+//
+//        //- Fix the vertex so that it can't be moved
+//        inline void setVertexFixed();
+
+        inline indexedVertex& operator=(const indexedVertex& rhs)
+        {
+            Vb::operator=(rhs);
+
+            this->type_ = rhs.type();
+            this->index_ = rhs.index();
+            this->processor_ = rhs.procIndex();
+            this->alignment_ = rhs.alignment();
+            this->targetCellSize_ = rhs.targetCellSize();
+
+            return *this;
+        }
+
+        inline bool operator==(const indexedVertex& rhs) const
+        {
+            return
+            (
+                //this->point() == rhs.point()
+                this->type_ == rhs.type()
+             && this->index_ == rhs.index()
+             && this->processor_ == rhs.procIndex()
+            );
+        }
+
+        inline bool operator!=(const indexedVertex& rhs) const
+        {
+            return !(*this == rhs);
+        }
+
+
+    // Info
+
+        //- Return info proxy.
+        //  Used to print indexedVertex information to a stream
+        Foam::InfoProxy<indexedVertex<Gt, Vb> > info() const
+        {
+            return *this;
+        }
+
+        friend Foam::Ostream& Foam::operator<< <Gt, Vb>
+        (
+            Foam::Ostream&,
+            const Foam::InfoProxy<indexedVertex<Gt, Vb> >&
+        );
+
+        friend Foam::Ostream& Foam::operator<< <Gt, Vb>
+        (
+            Foam::Ostream&,
+            const indexedVertex<Gt, Vb>&
+        );
+
+        friend Foam::Istream& Foam::operator>> <Gt, Vb>
+        (
+            Foam::Istream&,
+            indexedVertex<Gt, Vb>&
+        );
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace CGAL
+
+// * * * * * * * * * * * * * * * Global Functions  * * * * * * * * * * * * * //
+
+#ifdef CGAL_INEXACT
+namespace Foam
+{
+    // For inexact representations where the storage type is a double, the data
+    // is contiguous. This may not be true for exact number types.
+    template<>
+    inline bool contiguous
+    <
+        CGAL::indexedVertex
+        <
+            K,
+            CGAL::Triangulation_vertex_base_3<K>
+        >
+    >()
+    {
+        return true;
+    }
+
+
+    template<>
+    inline bool contiguous<CGAL::Triangulation_vertex_base_3<K>::Point>()
+    {
+        return true;
+    }
+
+} // End namespace Foam
+#endif
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#include "indexedVertexI.H"
+
+#ifdef NoRepository
+#   include "indexedVertex.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedVertex/indexedVertexEnum.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedVertex/indexedVertexEnum.C
new file mode 100644
index 0000000000000000000000000000000000000000..ee394b16fa62de04af248b5609c81baa1a2e9295
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedVertex/indexedVertexEnum.C
@@ -0,0 +1,88 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "indexedVertexEnum.H"
+#include "Pstream.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+template<>
+const char*
+Foam::NamedEnum<Foam::indexedVertexEnum::vertexType, 10>::names[] =
+{
+    "Unassigned",
+    "Internal",
+    "InternalNearBoundary",
+    "InternalSurface",
+    "InternalFeatureEdge",
+    "InternalFeaturePoint",
+    "ExternalSurface",
+    "ExternalFeatureEdge",
+    "ExternalFeaturePoint",
+    "Far"
+};
+
+const Foam::NamedEnum<Foam::indexedVertexEnum::vertexType, 10>
+Foam::indexedVertexEnum::vertexTypeNames_;
+
+
+template<>
+const char*
+Foam::NamedEnum<Foam::indexedVertexEnum::vertexMotion, 2>::names[] =
+{
+    "fixed",
+    "movable"
+};
+
+const Foam::NamedEnum<Foam::indexedVertexEnum::vertexMotion, 2>
+vertexMotionNames_;
+
+
+Foam::Ostream& Foam::operator<<
+(
+    Ostream& os,
+    const Foam::indexedVertexEnum::vertexType& v
+)
+{
+    os  << static_cast<int>(v);
+
+    return os;
+}
+
+Foam::Istream& Foam::operator>>
+(
+    Istream& is,
+    Foam::indexedVertexEnum::vertexType& v
+)
+{
+    int type;
+    is  >> type;
+
+    v = static_cast<Foam::indexedVertexEnum::vertexType>(type);
+
+    return is;
+}
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedVertex/indexedVertexEnum.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedVertex/indexedVertexEnum.H
new file mode 100644
index 0000000000000000000000000000000000000000..c597d8a17307cf790fee28c068f857c7c5f68691
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedVertex/indexedVertexEnum.H
@@ -0,0 +1,95 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    indexedVertexEnum
+
+Description
+
+SourceFiles
+    indexedVertexEnum.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef indexedVertexEnum_H
+#define indexedVertexEnum_H
+
+#include "NamedEnum.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+class indexedVertexEnum
+{
+public:
+
+    enum vertexType
+    {
+        vtUnassigned            = 0,
+        vtInternal              = 1,
+        vtInternalNearBoundary  = 2,
+        vtInternalSurface       = 3,
+        vtInternalFeatureEdge   = 4,
+        vtInternalFeaturePoint  = 5,
+        vtExternalSurface       = 6,
+        vtExternalFeatureEdge   = 7,
+        vtExternalFeaturePoint  = 8,
+        vtFar                   = 9
+    };
+
+    enum vertexMotion
+    {
+        fixed   = 0,
+        movable = 1
+    };
+
+    static const Foam::NamedEnum<vertexType, 10> vertexTypeNames_;
+
+    static const Foam::NamedEnum<vertexMotion, 2> vertexMotionNames_;
+
+    friend Ostream& operator<<(Foam::Ostream&, const vertexType&);
+
+    friend Istream& operator>>(Foam::Istream&, vertexType&);
+};
+
+
+template<>
+inline bool contiguous<indexedVertexEnum>()
+{
+    return true;
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedVertex/indexedVertexI.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedVertex/indexedVertexI.H
new file mode 100644
index 0000000000000000000000000000000000000000..ea9e4db6d4630a70e75bc173a1a4daf5674eb6d7
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/indexedVertex/indexedVertexI.H
@@ -0,0 +1,334 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "Pstream.H"
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+template<class Gt, class Vb>
+inline CGAL::indexedVertex<Gt, Vb>::indexedVertex()
+:
+    Vb(),
+    type_(vtUnassigned),
+    index_(vtUnassigned),
+    processor_(Foam::Pstream::myProcNo()),
+    alignment_(Foam::tensor::zero),
+    targetCellSize_(0.0)
+{}
+
+
+template<class Gt, class Vb>
+inline CGAL::indexedVertex<Gt, Vb>::indexedVertex(const Point& p)
+:
+    Vb(p),
+    type_(vtUnassigned),
+    index_(vtUnassigned),
+    processor_(Foam::Pstream::myProcNo()),
+    alignment_(Foam::tensor::zero),
+    targetCellSize_(0.0)
+{}
+
+
+template<class Gt, class Vb>
+inline CGAL::indexedVertex<Gt, Vb>::indexedVertex
+(
+    const Point& p,
+    vertexType type
+)
+:
+    Vb(p),
+    type_(type),
+    index_(-1),
+    processor_(Foam::Pstream::myProcNo()),
+    alignment_(Foam::tensor::zero),
+    targetCellSize_(0.0)
+{}
+
+
+template<class Gt, class Vb>
+inline CGAL::indexedVertex<Gt, Vb>::indexedVertex
+(
+    const Foam::point& p,
+    vertexType type
+)
+:
+    Vb(Point(p.x(), p.y(), p.z())),
+    type_(type),
+    index_(-1),
+    processor_(Foam::Pstream::myProcNo()),
+    alignment_(Foam::tensor::zero),
+    targetCellSize_(0.0)
+{}
+
+
+template<class Gt, class Vb>
+inline CGAL::indexedVertex<Gt, Vb>::indexedVertex
+(
+    const Point& p,
+    int index,
+    vertexType type,
+    int processor
+)
+:
+    Vb(p),
+    type_(type),
+    index_(index),
+    processor_(processor),
+    alignment_(Foam::tensor::zero),
+    targetCellSize_(0.0)
+{}
+
+
+template<class Gt, class Vb>
+inline CGAL::indexedVertex<Gt, Vb>::indexedVertex(const Point& p, Cell_handle f)
+:
+    Vb(f, p),
+    type_(vtUnassigned),
+    index_(vtUnassigned),
+    processor_(Foam::Pstream::myProcNo()),
+    alignment_(Foam::tensor::zero),
+    targetCellSize_(0.0)
+{}
+
+
+template<class Gt, class Vb>
+inline CGAL::indexedVertex<Gt, Vb>::indexedVertex(Cell_handle f)
+:
+    Vb(f),
+    type_(vtUnassigned),
+    index_(vtUnassigned),
+    processor_(Foam::Pstream::myProcNo()),
+    alignment_(Foam::tensor::zero),
+    targetCellSize_(0.0)
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+template<class Gt, class Vb>
+inline int& CGAL::indexedVertex<Gt, Vb>::index()
+{
+    return index_;
+}
+
+
+template<class Gt, class Vb>
+inline int CGAL::indexedVertex<Gt, Vb>::index() const
+{
+    return index_;
+}
+
+
+template<class Gt, class Vb>
+inline Foam::indexedVertexEnum::vertexType&
+CGAL::indexedVertex<Gt, Vb>::type()
+{
+    return type_;
+}
+
+
+template<class Gt, class Vb>
+inline Foam::indexedVertexEnum::vertexType
+CGAL::indexedVertex<Gt, Vb>::type() const
+{
+    return type_;
+}
+
+
+template<class Gt, class Vb>
+inline Foam::tensor& CGAL::indexedVertex<Gt, Vb>::alignment()
+{
+    return alignment_;
+}
+
+
+template<class Gt, class Vb>
+inline const Foam::tensor& CGAL::indexedVertex<Gt, Vb>::alignment() const
+{
+    return alignment_;
+}
+
+
+template<class Gt, class Vb>
+inline Foam::scalar& CGAL::indexedVertex<Gt, Vb>::targetCellSize()
+{
+    return targetCellSize_;
+}
+
+
+template<class Gt, class Vb>
+inline Foam::scalar CGAL::indexedVertex<Gt, Vb>::targetCellSize() const
+{
+    return targetCellSize_;
+}
+
+
+template<class Gt, class Vb>
+inline bool CGAL::indexedVertex<Gt, Vb>::uninitialised() const
+{
+    return type_ == vtUnassigned;
+}
+
+
+template<class Gt, class Vb>
+inline bool CGAL::indexedVertex<Gt, Vb>::farPoint() const
+{
+    return type_ == vtFar;
+}
+
+
+template<class Gt, class Vb>
+inline bool CGAL::indexedVertex<Gt, Vb>::internalPoint() const
+{
+    return type_ == vtInternal || type_ == vtInternalNearBoundary;
+}
+
+
+template<class Gt, class Vb>
+inline bool CGAL::indexedVertex<Gt, Vb>::referred() const
+{
+    // Can't be zero as the first few points are far points which won't be
+    // referred
+    //return index_ < 0;
+
+    // processor_ will be take the value of the processor that this vertex is
+    // from, so it cannot be on this processor.
+    return processor_ != Foam::Pstream::myProcNo();
+}
+
+
+template<class Gt, class Vb>
+inline bool CGAL::indexedVertex<Gt, Vb>::real() const
+{
+    return (internalPoint() || boundaryPoint()) && !referred();
+}
+
+
+template<class Gt, class Vb>
+inline int CGAL::indexedVertex<Gt, Vb>::procIndex() const
+{
+    return processor_;
+}
+
+
+template<class Gt, class Vb>
+inline int& CGAL::indexedVertex<Gt, Vb>::procIndex()
+{
+    return processor_;
+}
+
+
+template<class Gt, class Vb>
+inline void CGAL::indexedVertex<Gt, Vb>::setInternal()
+{
+    type_ = vtInternal;
+}
+
+
+template<class Gt, class Vb>
+inline bool CGAL::indexedVertex<Gt, Vb>::nearBoundary() const
+{
+    return type_ == vtInternalNearBoundary;
+}
+
+
+template<class Gt, class Vb>
+inline void CGAL::indexedVertex<Gt, Vb>::setNearBoundary()
+{
+    type_ = vtInternalNearBoundary;
+}
+
+
+template<class Gt, class Vb>
+inline bool CGAL::indexedVertex<Gt, Vb>::boundaryPoint() const
+{
+    return type_ >= vtInternalSurface && !farPoint();
+}
+
+
+template<class Gt, class Vb>
+inline bool CGAL::indexedVertex<Gt, Vb>::internalOrBoundaryPoint() const
+{
+    return internalPoint() || internalBoundaryPoint();
+}
+
+
+template<class Gt, class Vb>
+inline bool CGAL::indexedVertex<Gt, Vb>::nearOrOnBoundary() const
+{
+    return boundaryPoint() || nearBoundary();
+}
+
+
+template<class Gt, class Vb>
+inline bool CGAL::indexedVertex<Gt, Vb>::internalBoundaryPoint() const
+{
+    return type_ >= vtInternalSurface && type_ <= vtInternalFeaturePoint;
+}
+
+
+template<class Gt, class Vb>
+inline bool CGAL::indexedVertex<Gt, Vb>::externalBoundaryPoint() const
+{
+    return type_ >= vtExternalSurface && type_ <= vtExternalFeaturePoint;
+}
+
+
+template<class Gt, class Vb>
+inline bool CGAL::indexedVertex<Gt, Vb>::featurePoint() const
+{
+    return type_ == vtInternalFeaturePoint || type_ == vtExternalFeaturePoint;
+}
+
+
+template<class Gt, class Vb>
+inline bool CGAL::indexedVertex<Gt, Vb>::featureEdgePoint() const
+{
+    return type_ == vtInternalFeatureEdge || type_ == vtExternalFeatureEdge;
+}
+
+
+template<class Gt, class Vb>
+inline bool CGAL::indexedVertex<Gt, Vb>::surfacePoint() const
+{
+    return type_ == vtInternalSurface || type_ == vtExternalSurface;
+}
+
+
+//template<class Gt, class Vb>
+//inline bool CGAL::indexedVertex<Gt, Vb>::isVertexFixed() const
+//{
+//    return vertexFixed_;
+//}
+//
+//
+//template<class Gt, class Vb>
+//inline void CGAL::indexedVertex<Gt, Vb>::setVertexFixed()
+//{
+//    vertexFixed_ = true;
+//}
+
+
+// * * * * * * * * * * * * * * * Friend Functions  * * * * * * * * * * * * * //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/pointConversion.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/pointConversion.H
new file mode 100644
index 0000000000000000000000000000000000000000..6242a3a6feab4f4ccd89542efe3bca4c29a07a55
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/pointConversion.H
@@ -0,0 +1,99 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    pointConversion
+
+Description
+
+    Conversion functions between point (FOAM::) and Point (CGAL)
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef pointConversion_H
+#define pointConversion_H
+
+#include "point.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef CGAL_INEXACT
+
+    // Define Point to be contiguous for inexact (double storage) kernel
+    typedef const Foam::point& pointFromPoint;
+    typedef const CGAL::Triangulation_vertex_base_3<K>::Point& PointFrompoint;
+
+#else
+
+    typedef Foam::point pointFromPoint;
+    typedef CGAL::Triangulation_vertex_base_3<K>::Point PointFrompoint;
+
+#endif
+
+namespace Foam
+{
+
+#ifdef CGAL_INEXACT
+
+    template<typename Point>
+    inline pointFromPoint topoint(const Point& P)
+    {
+        return reinterpret_cast<pointFromPoint>(P);
+    }
+
+    template<typename Point>
+    inline PointFrompoint toPoint(const Foam::point& p)
+    {
+        return reinterpret_cast<PointFrompoint>(p);
+    }
+
+#else
+
+    template<typename Point>
+    inline pointFromPoint topoint(const Point& P)
+    {
+        return Foam::point
+        (
+            CGAL::to_double(P.x()),
+            CGAL::to_double(P.y()),
+            CGAL::to_double(P.z())
+        );
+    }
+
+    template<typename Point>
+    inline Point toPoint(const Foam::point& p)
+    {
+        return Point(p.x(), p.y(), p.z());
+    }
+
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/pointFeatureEdgesTypes.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/pointFeatureEdgesTypes.H
new file mode 100644
index 0000000000000000000000000000000000000000..5bae06d86f198c3e8bd8ec49cea7bed9c3168cf7
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/pointFeatureEdgesTypes.H
@@ -0,0 +1,93 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    pointFeatureEdgesTypes
+
+Description
+    struct for holding information on the types of feature edges attached to
+    feature points
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef pointFeatureEdgesTypes_H
+#define pointFeatureEdgesTypes_H
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                   Class pointFeatureEdgesTypes Declaration
+\*---------------------------------------------------------------------------*/
+
+//- Hold the types of feature edges attached to the point.
+class pointFeatureEdgesTypes
+:
+    public HashTable<label, extendedFeatureEdgeMesh::edgeStatus>
+{
+    label pointLabel_;
+
+public:
+
+    pointFeatureEdgesTypes(const label pointLabel)
+    :
+        HashTable<label, extendedFeatureEdgeMesh::edgeStatus>(),
+        pointLabel_(pointLabel)
+    {}
+
+
+    friend Ostream& operator<<(Ostream& os, const pointFeatureEdgesTypes& p)
+    {
+        os  << "Point = " << p.pointLabel_ << endl;
+
+        for
+        (
+            HashTable<label, extendedFeatureEdgeMesh::edgeStatus>
+                ::const_iterator iter = p.cbegin();
+            iter != p.cend();
+            ++iter
+        )
+        {
+            os  << "    "
+                << extendedFeatureEdgeMesh::edgeStatusNames_[iter.key()]
+                << " = "
+                << iter()
+                << endl;
+        }
+
+        return os;
+    }
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformationSurfaces/conformationSurfaces.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformationSurfaces/conformationSurfaces.C
new file mode 100644
index 0000000000000000000000000000000000000000..64f753fb99d102e5309f06c345f36c4bd996c590
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformationSurfaces/conformationSurfaces.C
@@ -0,0 +1,895 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "conformationSurfaces.H"
+#include "conformalVoronoiMesh.H"
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::conformationSurfaces::conformationSurfaces
+(
+    const Time& runTime,
+    Random& rndGen,
+    const searchableSurfaces& allGeometry,
+    const dictionary& surfaceConformationDict
+)
+:
+    runTime_(runTime),
+    rndGen_(rndGen),
+    allGeometry_(allGeometry),
+    features_(),
+    locationInMesh_(surfaceConformationDict.lookup("locationInMesh")),
+    surfaces_(),
+    allGeometryToSurfaces_(),
+    baffleSurfaces_(),
+    patchNames_(0),
+    patchOffsets_(),
+    globalBounds_(),
+    referenceVolumeTypes_(0)
+{
+    const dictionary& surfacesDict
+    (
+        surfaceConformationDict.subDict("geometryToConformTo")
+    );
+
+    const dictionary& additionalFeaturesDict
+    (
+        surfaceConformationDict.subDict("additionalFeatures")
+    );
+
+    Info<< nl << "Reading geometryToConformTo" << endl;
+
+    surfaces_.setSize(surfacesDict.size(), -1);
+
+    allGeometryToSurfaces_.setSize(allGeometry_.size(), -1);
+
+    baffleSurfaces_.setSize(surfacesDict.size(), false);
+
+    // Features may be attached to host surfaces or independent
+    features_.setSize(surfacesDict.size() + additionalFeaturesDict.size());
+
+    label featureI = 0;
+
+    patchOffsets_.setSize(surfacesDict.size(), -1);
+
+    label surfI = 0;
+
+    forAllConstIter(dictionary, surfacesDict, iter)
+    {
+        word surfaceName = iter().keyword();
+
+        surfaces_[surfI] = allGeometry_.findSurfaceID(surfaceName);
+
+        allGeometryToSurfaces_[surfaces_[surfI]] = surfI;
+
+        if (surfaces_[surfI] < 0)
+        {
+            FatalErrorIn("Foam::conformationSurfaces::conformationSurfaces")
+                << "No surface " << iter().keyword() << " found. "
+                << "Valid geometry is " << nl << allGeometry_.names()
+                << exit(FatalError);
+        }
+
+        Info<< nl << "    " << iter().keyword() << endl;
+
+        patchOffsets_[surfI] = patchNames_.size();
+
+        patchNames_.append(allGeometry.regionNames()[surfaces_[surfI]]);
+
+        const dictionary& surfaceSubDict(surfacesDict.subDict(surfaceName));
+
+        baffleSurfaces_[surfI] = Switch
+        (
+            surfaceSubDict.lookupOrDefault("baffleSurface", false)
+        );
+
+        if (!baffleSurfaces_[surfI])
+        {
+            if (!allGeometry_[surfaces_[surfI]].hasVolumeType())
+            {
+                WarningIn("conformationSurfaces::conformationSurfaces(..)")
+                    << "Non-baffle surface "
+                    << allGeometry_[surfaces_[surfI]].name()
+                    << " does not allow inside/outside queries."
+                    << " This usually is an error." << endl;
+            }
+        }
+
+        word featureMethod = surfaceSubDict.lookup("featureMethod");
+
+        if (featureMethod == "extendedFeatureEdgeMesh")
+        {
+            fileName feMeshName
+            (
+                surfaceSubDict.lookup("extendedFeatureEdgeMesh")
+            );
+
+            Info<< "    features: " << feMeshName<< endl;
+
+            features_.set
+            (
+                featureI++,
+                new extendedFeatureEdgeMesh
+                (
+                    IOobject
+                    (
+                        feMeshName,
+                        runTime_.time().constant(),
+                        "extendedFeatureEdgeMesh",
+                        runTime_.time(),
+                        IOobject::MUST_READ,
+                        IOobject::NO_WRITE
+                    )
+                )
+            );
+        }
+        else if (featureMethod == "extractFeatures")
+        {
+            notImplemented
+            (
+                "conformationSurfaces::conformationSurfaces, "
+                "else if (featureMethod == \"extractFeatures\")"
+            );
+        }
+        else if (featureMethod == "none")
+        {
+            // Currently nothing to do
+        }
+        else
+        {
+            FatalErrorIn("Foam::conformationSurfaces::conformationSurfaces")
+                << "No valid featureMethod found for surface " << surfaceName
+                << nl << "Use \"extendedFeatureEdgeMesh\" "
+                << "or \"extractFeatures\"."
+                << exit(FatalError);
+        }
+
+        surfI++;
+    }
+
+    if (!additionalFeaturesDict.empty())
+    {
+        Info<< nl << "Reading additionalFeatures" << endl;
+    }
+
+    forAllConstIter(dictionary, additionalFeaturesDict, iter)
+    {
+        word featureName = iter().keyword();
+
+        Info<< nl << "    " << iter().keyword() << endl;
+
+        const dictionary& featureSubDict
+        (
+            additionalFeaturesDict.subDict(featureName)
+        );
+
+        word featureMethod = featureSubDict.lookupOrDefault
+        (
+            "featureMethod",
+            word("none")
+        );
+
+        if (featureMethod == "extendedFeatureEdgeMesh")
+        {
+            fileName feMeshName
+            (
+                featureSubDict.lookup("extendedFeatureEdgeMesh")
+            );
+
+            Info<< "    features: " << feMeshName << endl;
+
+            features_.set
+            (
+                featureI++,
+                new extendedFeatureEdgeMesh
+                (
+                    IOobject
+                    (
+                        feMeshName,
+                        runTime_.time().constant(),
+                        "extendedFeatureEdgeMesh",
+                        runTime_.time(),
+                        IOobject::MUST_READ,
+                        IOobject::NO_WRITE
+                    )
+                )
+            );
+        }
+    }
+
+    // Remove unnecessary space from the features list
+    features_.setSize(featureI);
+
+    globalBounds_ = treeBoundBox
+    (
+        searchableSurfacesQueries::bounds(allGeometry_, surfaces_)
+    );
+
+    // Extend the global bounds to stop the bound box sitting on the surfaces
+    // to be conformed to
+    //globalBounds_ = globalBounds_.extend(rndGen_, 1e-4);
+
+    vector newSpan = 1e-4*globalBounds_.span();
+
+    globalBounds_.min() -= newSpan;
+    globalBounds_.max() += newSpan;
+
+    // Look at all surfaces at determine whether the locationInMesh point is
+    // inside or outside each, to establish a signature for the domain to be
+    // meshed.
+
+    referenceVolumeTypes_.setSize
+    (
+        surfaces_.size(),
+        searchableSurface::UNKNOWN
+    );
+
+
+    Info<< endl
+        << "Testing for locationInMesh " << locationInMesh_ << endl;
+
+    forAll(surfaces_, s)
+    {
+        const searchableSurface& surface(allGeometry_[surfaces_[s]]);
+
+        if (surface.hasVolumeType())
+        {
+            pointField pts(1, locationInMesh_);
+
+            List<searchableSurface::volumeType> vTypes
+            (
+                pts.size(),
+                searchableSurface::UNKNOWN
+            );
+
+            surface.getVolumeType(pts, vTypes);
+
+            referenceVolumeTypes_[s] = vTypes[0];
+
+            Info<< "    is "
+                << searchableSurface::volumeTypeNames[referenceVolumeTypes_[s]]
+                << " surface " << surface.name()
+                << endl;
+        }
+    }
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::conformationSurfaces::~conformationSurfaces()
+{}
+
+
+// * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * * //
+
+bool Foam::conformationSurfaces::overlaps(const treeBoundBox& bb) const
+{
+    forAll(surfaces_, s)
+    {
+        if (allGeometry_[surfaces_[s]].overlaps(bb))
+        {
+            return true;
+        }
+    }
+
+    return false;
+}
+
+
+Foam::Field<bool> Foam::conformationSurfaces::inside
+(
+    const pointField& samplePts
+) const
+{
+    return wellInside(samplePts, scalarField(samplePts.size(), 0.0));
+}
+
+
+bool Foam::conformationSurfaces::inside
+(
+    const point& samplePt
+) const
+{
+    return wellInside(pointField(1, samplePt), scalarField(1, 0))[0];
+}
+
+
+Foam::Field<bool> Foam::conformationSurfaces::outside
+(
+    const pointField& samplePts
+) const
+{
+    return wellOutside(samplePts, scalarField(samplePts.size(), 0.0));
+}
+
+
+bool Foam::conformationSurfaces::outside
+(
+    const point& samplePt
+) const
+{
+    return !inside(samplePt);
+}
+
+
+Foam::Field<bool> Foam::conformationSurfaces::wellInOutSide
+(
+    const pointField& samplePts,
+    const scalarField& testDistSqr,
+    bool testForInside
+) const
+{
+    List<List<searchableSurface::volumeType> > surfaceVolumeTests
+    (
+        surfaces_.size(),
+        List<searchableSurface::volumeType>
+        (
+            samplePts.size(),
+            searchableSurface::UNKNOWN
+        )
+    );
+
+    // Get lists for the volumeTypes for each sample wrt each surface
+    forAll(surfaces_, s)
+    {
+        const searchableSurface& surface(allGeometry_[surfaces_[s]]);
+
+        if (surface.hasVolumeType())
+        {
+            surface.getVolumeType(samplePts, surfaceVolumeTests[s]);
+        }
+    }
+
+    // Compare the volumeType result for each point wrt to each surface with the
+    // reference value and if the points are inside the surface by a given
+    // distanceSquared
+
+    // Assume that the point is wellInside until demonstrated otherwise.
+    Field<bool> inOutSidePoint(samplePts.size(), testForInside);
+
+    //Check if the points are inside the surface by the given distance squared
+
+    labelList hitSurfaces;
+
+    List<pointIndexHit> hitInfo;
+
+    searchableSurfacesQueries::findNearest
+    (
+        allGeometry_,
+        surfaces_,
+        samplePts,
+        testDistSqr,
+        hitSurfaces,
+        hitInfo
+    );
+
+    forAll(samplePts, i)
+    {
+        const pointIndexHit& pHit = hitInfo[i];
+
+        if (pHit.hit())
+        {
+            // If the point is within range of the surface, then it can't be
+            // well (in|out)side
+            inOutSidePoint[i] = false;
+
+            continue;
+        }
+
+        forAll(surfaces_, s)
+        {
+            // If one of the pattern tests is failed, then the point cannot be
+            // inside, therefore, if this is a testForInside = true call, the
+            // result is false.  If this is a testForInside = false call, then
+            // the result is true.
+            if (surfaceVolumeTests[s][i] != referenceVolumeTypes_[s])
+            {
+                inOutSidePoint[i] = !testForInside;
+
+                break;
+            }
+        }
+    }
+
+    return inOutSidePoint;
+}
+
+
+Foam::Field<bool> Foam::conformationSurfaces::wellInside
+(
+    const pointField& samplePts,
+    const scalarField& testDistSqr
+) const
+{
+    return wellInOutSide(samplePts, testDistSqr, true);
+}
+
+
+bool Foam::conformationSurfaces::wellInside
+(
+    const point& samplePt,
+    scalar testDistSqr
+) const
+{
+    return wellInside(pointField(1, samplePt), scalarField(1, testDistSqr))[0];
+}
+
+
+Foam::Field<bool> Foam::conformationSurfaces::wellOutside
+(
+    const pointField& samplePts,
+    const scalarField& testDistSqr
+) const
+{
+    return wellInOutSide(samplePts, testDistSqr, false);
+}
+
+
+bool Foam::conformationSurfaces::wellOutside
+(
+    const point& samplePt,
+    scalar testDistSqr
+) const
+{
+    return wellOutside(pointField(1, samplePt), scalarField(1, testDistSqr))[0];
+}
+
+
+bool Foam::conformationSurfaces::findSurfaceAnyIntersection
+(
+    const point& start,
+    const point& end
+) const
+{
+    labelList hitSurfaces;
+    List<pointIndexHit> hitInfo;
+
+    searchableSurfacesQueries::findAnyIntersection
+    (
+        allGeometry_,
+        surfaces_,
+        pointField(1, start),
+        pointField(1, end),
+        hitSurfaces,
+        hitInfo
+    );
+
+    return hitInfo[0].hit();
+}
+
+
+void Foam::conformationSurfaces::findSurfaceAnyIntersection
+(
+    const point& start,
+    const point& end,
+    pointIndexHit& surfHit,
+    label& hitSurface
+) const
+{
+    labelList hitSurfaces;
+    List<pointIndexHit> hitInfo;
+
+    searchableSurfacesQueries::findAnyIntersection
+    (
+        allGeometry_,
+        surfaces_,
+        pointField(1, start),
+        pointField(1, end),
+        hitSurfaces,
+        hitInfo
+    );
+
+    surfHit = hitInfo[0];
+
+    if (surfHit.hit())
+    {
+        // hitSurfaces has returned the index of the entry in surfaces_ that was
+        // found, not the index of the surface in allGeometry_, translating this
+        // to allGeometry_
+
+        hitSurface = surfaces_[hitSurfaces[0]];
+    }
+}
+
+
+void Foam::conformationSurfaces::findSurfaceNearestIntersection
+(
+    const point& start,
+    const point& end,
+    pointIndexHit& surfHit,
+    label& hitSurface
+) const
+{
+    labelList hitSurfacesStart;
+    List<pointIndexHit> hitInfoStart;
+    labelList hitSurfacesEnd;
+    List<pointIndexHit> hitInfoEnd;
+
+    searchableSurfacesQueries::findNearestIntersection
+    (
+        allGeometry_,
+        surfaces_,
+        pointField(1, start),
+        pointField(1, end),
+        hitSurfacesStart,
+        hitInfoStart,
+        hitSurfacesEnd,
+        hitInfoEnd
+    );
+
+    surfHit = hitInfoStart[0];
+
+    if (surfHit.hit())
+    {
+        // hitSurfaces has returned the index of the entry in surfaces_ that was
+        // found, not the index of the surface in allGeometry_, translating this
+        // to allGeometry_
+
+        hitSurface = surfaces_[hitSurfacesStart[0]];
+    }
+}
+
+
+void Foam::conformationSurfaces::findSurfaceNearest
+(
+    const point& sample,
+    scalar nearestDistSqr,
+    pointIndexHit& surfHit,
+    label& hitSurface
+) const
+{
+    labelList hitSurfaces;
+    List<pointIndexHit> surfaceHits;
+
+    searchableSurfacesQueries::findNearest
+    (
+        allGeometry_,
+        surfaces_,
+        pointField(1, sample),
+        scalarField(1, nearestDistSqr),
+        hitSurfaces,
+        surfaceHits
+    );
+
+    surfHit = surfaceHits[0];
+
+    if (surfHit.hit())
+    {
+        // hitSurfaces has returned the index of the entry in surfaces_ that was
+        // found, not the index of the surface in allGeometry_, translating this
+        // to allGeometry_
+
+        hitSurface = surfaces_[hitSurfaces[0]];
+    }
+}
+
+
+void Foam::conformationSurfaces::findSurfaceNearest
+(
+    const pointField& samples,
+    const scalarField& nearestDistSqr,
+    List<pointIndexHit>& surfaceHits,
+    labelList& hitSurfaces
+) const
+{
+    searchableSurfacesQueries::findNearest
+    (
+        allGeometry_,
+        surfaces_,
+        samples,
+        nearestDistSqr,
+        hitSurfaces,
+        surfaceHits
+    );
+
+    forAll(surfaceHits, i)
+    {
+        if (surfaceHits[i].hit())
+        {
+            // hitSurfaces has returned the index of the entry in surfaces_ that
+            // was found, not the index of the surface in allGeometry_,
+            // translating this to the surface in allGeometry_.
+
+            hitSurfaces[i] = surfaces_[hitSurfaces[i]];
+        }
+    }
+}
+
+
+void Foam::conformationSurfaces::findFeaturePointNearest
+(
+    const point& sample,
+    scalar nearestDistSqr,
+    pointIndexHit& fpHit,
+    label& featureHit
+) const
+{
+    // Work arrays
+    scalar minDistSqr = nearestDistSqr;
+    pointIndexHit hitInfo;
+
+    forAll(features_, testI)
+    {
+        features_[testI].nearestFeaturePoint
+        (
+            sample,
+            minDistSqr,
+            hitInfo
+        );
+
+        if (hitInfo.hit())
+        {
+            minDistSqr = magSqr(hitInfo.hitPoint()- sample);
+            fpHit = hitInfo;
+            featureHit = testI;
+        }
+    }
+}
+
+
+void Foam::conformationSurfaces::findEdgeNearest
+(
+    const point& sample,
+    scalar nearestDistSqr,
+    pointIndexHit& edgeHit,
+    label& featureHit
+) const
+{
+    pointField samples(1, sample);
+    scalarField nearestDistsSqr(1, nearestDistSqr);
+
+    List<pointIndexHit> edgeHits;
+    labelList featuresHit;
+
+    findEdgeNearest
+    (
+        samples,
+        nearestDistsSqr,
+        edgeHits,
+        featuresHit
+    );
+
+    edgeHit = edgeHits[0];
+    featureHit = featuresHit[0];
+}
+
+
+void Foam::conformationSurfaces::findEdgeNearest
+(
+    const pointField& samples,
+    const scalarField& nearestDistsSqr,
+    List<pointIndexHit>& edgeHits,
+    labelList& featuresHit
+) const
+{
+    // Initialise
+    featuresHit.setSize(samples.size());
+    featuresHit = -1;
+    edgeHits.setSize(samples.size());
+
+    // Work arrays
+    scalarField minDistSqr(nearestDistsSqr);
+    List<pointIndexHit> hitInfo(samples.size());
+
+    forAll(features_, testI)
+    {
+        features_[testI].nearestFeatureEdge
+        (
+            samples,
+            minDistSqr,
+            hitInfo
+        );
+
+        // Update minDistSqr and arguments
+        forAll(hitInfo, pointI)
+        {
+            if (hitInfo[pointI].hit())
+            {
+                minDistSqr[pointI] = magSqr
+                (
+                    hitInfo[pointI].hitPoint()
+                  - samples[pointI]
+                );
+                edgeHits[pointI] = hitInfo[pointI];
+                featuresHit[pointI] = testI;
+            }
+        }
+    }
+}
+
+
+void Foam::conformationSurfaces::findEdgeNearestByType
+(
+    const point& sample,
+    scalar nearestDistSqr,
+    List<pointIndexHit>& edgeHits,
+    List<label>& featuresHit
+) const
+{
+    // Initialise
+    featuresHit.setSize(extendedFeatureEdgeMesh::nEdgeTypes);
+    featuresHit = -1;
+    edgeHits.setSize(extendedFeatureEdgeMesh::nEdgeTypes);
+
+    // Work arrays
+    scalarField minDistSqr(extendedFeatureEdgeMesh::nEdgeTypes, nearestDistSqr);
+    List<pointIndexHit> hitInfo(extendedFeatureEdgeMesh::nEdgeTypes);
+
+    forAll(features_, testI)
+    {
+        features_[testI].nearestFeatureEdgeByType
+        (
+            sample,
+            minDistSqr,
+            hitInfo
+        );
+
+        // Update minDistSqr and arguments
+        forAll(hitInfo, typeI)
+        {
+            if (hitInfo[typeI].hit())
+            {
+                minDistSqr[typeI] = magSqr(hitInfo[typeI].hitPoint() - sample);
+                edgeHits[typeI] = hitInfo[typeI];
+                featuresHit[typeI] = testI;
+            }
+        }
+    }
+}
+
+
+void Foam::conformationSurfaces::findAllNearestEdges
+(
+    const point& sample,
+    const scalar searchRadiusSqr,
+    List<List<pointIndexHit> >& edgeHitsByFeature,
+    List<label>& featuresHit
+) const
+{
+    // Initialise
+    //featuresHit.setSize(features_.size());
+    //featuresHit = -1;
+    //edgeHitsByFeature.setSize(features_.size());
+
+    // Work arrays
+    List<pointIndexHit> hitInfo(extendedFeatureEdgeMesh::nEdgeTypes);
+
+    forAll(features_, testI)
+    {
+        features_[testI].allNearestFeatureEdges
+        (
+            sample,
+            searchRadiusSqr,
+            hitInfo
+        );
+
+        bool anyHit = false;
+        forAll(hitInfo, hitI)
+        {
+            if (hitInfo[hitI].hit())
+            {
+                anyHit = true;
+            }
+        }
+
+        if (anyHit)
+        {
+            edgeHitsByFeature.append(hitInfo);
+            featuresHit.append(testI);
+        }
+    }
+}
+
+
+void Foam::conformationSurfaces::writeFeatureObj(const fileName& prefix) const
+{
+    OFstream ftStr(runTime_.time().path()/prefix + "_allFeatures.obj");
+
+    Pout<< nl << "Writing all features to " << ftStr.name() << endl;
+
+    label verti = 0;
+
+    forAll(features_, i)
+    {
+        const extendedFeatureEdgeMesh& fEM(features_[i]);
+        const pointField pts(fEM.points());
+        const edgeList eds(fEM.edges());
+
+        ftStr << "g " << fEM.name() << endl;
+
+        forAll(eds, j)
+        {
+            const edge& e = eds[j];
+
+            meshTools::writeOBJ(ftStr, pts[e[0]]); verti++;
+            meshTools::writeOBJ(ftStr, pts[e[1]]); verti++;
+            ftStr << "l " << verti-1 << ' ' << verti << endl;
+        }
+    }
+}
+
+
+Foam::label Foam::conformationSurfaces::findPatch
+(
+    const point& ptA,
+    const point& ptB
+) const
+{
+    pointIndexHit surfHit;
+    label hitSurface;
+
+    findSurfaceAnyIntersection(ptA, ptB, surfHit, hitSurface);
+
+    if (!surfHit.hit())
+    {
+        return -1;
+    }
+
+    labelList surfLocalRegion;
+
+    allGeometry_[hitSurface].getRegion
+    (
+        List<pointIndexHit>(1, surfHit),
+        surfLocalRegion
+    );
+
+    return
+        surfLocalRegion[0] + patchOffsets_[allGeometryToSurfaces_[hitSurface]];
+}
+
+
+Foam::label Foam::conformationSurfaces::findPatch(const point& pt) const
+{
+    pointIndexHit surfHit;
+    label hitSurface;
+
+    findSurfaceNearest
+    (
+        pt,
+        sqr(GREAT),
+        surfHit,
+        hitSurface
+    );
+
+    if (!surfHit.hit())
+    {
+        return -1;
+    }
+
+    labelList surfLocalRegion;
+
+    allGeometry_[hitSurface].getRegion
+    (
+        List<pointIndexHit>(1, surfHit),
+        surfLocalRegion
+    );
+
+    return
+        surfLocalRegion[0] + patchOffsets_[allGeometryToSurfaces_[hitSurface]];
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformationSurfaces/conformationSurfaces.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformationSurfaces/conformationSurfaces.H
new file mode 100644
index 0000000000000000000000000000000000000000..3acb10d53a86eefb61b311a240cd89244c82c815
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformationSurfaces/conformationSurfaces.H
@@ -0,0 +1,328 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::conformationSurfaces
+
+Description
+
+SourceFiles
+    conformationSurfacesI.H
+    conformationSurfaces.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef conformationSurfaces_H
+#define conformationSurfaces_H
+
+#include "searchableSurfaces.H"
+#include "searchableSurfacesQueries.H"
+#include "extendedFeatureEdgeMesh.H"
+#include "boolList.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                     Class conformationSurfaces Declaration
+\*---------------------------------------------------------------------------*/
+
+class conformationSurfaces
+{
+    // Private data
+
+        const Time& runTime_;
+
+        Random& rndGen_;
+
+        //- Reference to the searchableSurfaces object holding all geometry data
+        const searchableSurfaces& allGeometry_;
+
+        //- A list of extendedFeatureEdgeMesh
+        PtrList<extendedFeatureEdgeMesh> features_;
+
+        //- The location in the mesh that specifies which portion of surfaces is
+        //  to be meshed.
+        point locationInMesh_;
+
+        //- Indices of surfaces in allGeometry that are to be conformed to
+        labelList surfaces_;
+
+        //- Reverse mapping, which entry in surfaces corresponds to the surface
+        //  in allGeometry specified by the list index.  -1 for a surface that
+        //  isn't used.
+        labelList allGeometryToSurfaces_;
+
+        //- A boolean value for each surface to be conformed to specifying if it
+        //  is to be treated as a baffle
+        boolList baffleSurfaces_;
+
+        //- A flat list of all of the names of the patches from all of the
+        //  surfaces to be reproduced in the meshed geometry
+        List<word> patchNames_;
+
+        //- The offset between the patch indices of the individual surface and
+        //  the entry in the overall patch list
+        labelList patchOffsets_;
+
+        //- The overall boundBox of all of the surfaces to be conformed to
+        treeBoundBox globalBounds_;
+
+        //- The pattern/signature of volumeTypes representing a point in the
+        // domain to be meshed
+        List<searchableSurface::volumeType> referenceVolumeTypes_;
+
+
+    // Private Member Functions
+
+        //- Disallow default bitwise copy construct
+        conformationSurfaces(const conformationSurfaces&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const conformationSurfaces&);
+
+
+public:
+
+    // Constructors
+
+        //- Construct from dictionary and references to conformalVoronoiMesh and
+        //  searchableSurfaces
+        conformationSurfaces
+        (
+            const Time& runTime,
+            Random& rndGen,
+            const searchableSurfaces& allGeometry,
+            const dictionary& surfaceConformationDict
+        );
+
+    //- Destructor
+    ~conformationSurfaces();
+
+
+    // Member Functions
+
+        // Access
+
+            //- Return reference to the searchableSurfaces object containing all
+            //  of the geometry
+            inline const searchableSurfaces& geometry() const;
+
+            //- Return the object holding the feature points and edges
+            inline const PtrList<extendedFeatureEdgeMesh>& features() const;
+
+            //- Return the location to mesh
+            inline const point& locationInMesh() const;
+
+            //- Return the surface indices
+            inline const labelList& surfaces() const;
+
+            //- Return the patch names
+            inline const List<word>& patchNames() const;
+
+            //- Return the global bounds
+            inline const treeBoundBox& globalBounds() const;
+
+
+        // Query
+
+            //- Check if the supplied bound box overlaps any part of any of
+            //  the surfaces
+            bool overlaps(const treeBoundBox& bb) const;
+
+            //- Check if points are inside surfaces to conform to
+            Field<bool> inside(const pointField& samplePts) const;
+
+            //- Check if point is inside surfaces to conform to
+            bool inside(const point& samplePt) const;
+
+            //- Check if points are outside surfaces to conform to
+            Field<bool> outside(const pointField& samplePts) const;
+
+            //- Check if point is outside surfaces to conform to
+            bool outside(const point& samplePt) const;
+
+            //- Check if point is closer to the surfaces to conform to than
+            //  testDistSqr, in which case return false, otherwise assess in or
+            //  outside and return a result depending on the testForInside flag
+            Field<bool> wellInOutSide
+            (
+                const pointField& samplePts,
+                const scalarField& testDistSqr,
+                bool testForInside
+            ) const;
+
+            //- Check if point is inside surfaces to conform to by at least
+            //  testDistSqr
+            Field<bool> wellInside
+            (
+                const pointField& samplePts,
+                const scalarField& testDistSqr
+            ) const;
+
+            bool wellInside
+            (
+                const point& samplePt,
+                scalar testDistSqr
+            ) const;
+
+            //- Check if point is outside surfaces to conform to by at least
+            //  testDistSqr
+            Field<bool> wellOutside
+            (
+                const pointField& samplePts,
+                const scalarField& testDistSqr
+            ) const;
+
+            bool wellOutside
+            (
+                const point& samplePt,
+                scalar testDistSqr
+            ) const;
+
+            // Finding if the line joining start and end intersects the surface
+            bool findSurfaceAnyIntersection
+            (
+                const point& start,
+                const point& end
+            ) const;
+
+            //- Finding if the line joining start and end intersects the surface
+            //  and returning the hit and surface information
+            void findSurfaceAnyIntersection
+            (
+                const point& start,
+                const point& end,
+                pointIndexHit& surfHit,
+                label& hitSurface
+            ) const;
+
+            //- Finding the nearestIntersection of the surface to start
+            void findSurfaceNearestIntersection
+            (
+                const point& start,
+                const point& end,
+                pointIndexHit& surfHit,
+                label& hitSurface
+            ) const;
+
+            //- Find the nearest point to the sample and return it to the
+            //  pointIndexHit
+            void findSurfaceNearest
+            (
+                const point& sample,
+                scalar nearestDistSqr,
+                pointIndexHit& surfHit,
+                label& hitSurface
+            ) const;
+
+            void findSurfaceNearest
+            (
+                const pointField& samples,
+                const scalarField& nearestDistSqr,
+                List<pointIndexHit>& hitInfo,
+                labelList& hitSurfaces
+            ) const;
+
+            //- Find the nearest point on any feature edge
+            void findFeaturePointNearest
+            (
+                const point& sample,
+                scalar nearestDistSqr,
+                pointIndexHit& fpHit,
+                label& featureHit
+            ) const;
+
+            //- Find the nearest point on any feature edge
+            void findEdgeNearest
+            (
+                const point& sample,
+                scalar nearestDistSqr,
+                pointIndexHit& edgeHit,
+                label& featureHit
+            ) const;
+
+            void findEdgeNearest
+            (
+                const pointField& samples,
+                const scalarField& nearestDistsSqr,
+                List<pointIndexHit>& edgeHits,
+                labelList& featuresHit
+            ) const;
+
+            //- Find the nearest point on each type of feature edge
+            void findEdgeNearestByType
+            (
+                const point& sample,
+                scalar nearestDistSqr,
+                List<pointIndexHit>& edgeHit,
+                List<label>& featuresHit
+            ) const;
+
+            //- Find the nearest points on each feature edge that is within
+            //  a given distance from the sample point. Will need to check for
+            //  a hit or a miss because near edges may not have a nearest point
+            //  on them which is perpendicular to the sample point.
+            void findAllNearestEdges
+            (
+                const point& sample,
+                const scalar searchRadiusSqr,
+                List<List<pointIndexHit> >& edgeHitsByFeature,
+                List<label>& featuresHit
+            ) const;
+
+            //- Find which patch is intersected by the line from one point to
+            //  another
+            label findPatch(const point& ptA, const point& ptB) const;
+
+            //- Find which patch is closest to the point
+            label findPatch(const point& pt) const;
+
+            //- Is the surface a baffle
+            inline bool isBaffle(const label index) const;
+
+
+        // Write
+
+            //- Write all components of all the extendedFeatureEdgeMeshes as
+            //  an obj file
+            void writeFeatureObj(const fileName& prefix) const;
+
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#include "conformationSurfacesI.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformationSurfaces/conformationSurfacesI.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformationSurfaces/conformationSurfacesI.H
new file mode 100644
index 0000000000000000000000000000000000000000..a4a6595d315f0ea4fbe2dcd1f1d739f50dd6b943
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformationSurfaces/conformationSurfacesI.H
@@ -0,0 +1,71 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+const Foam::searchableSurfaces& Foam::conformationSurfaces::geometry() const
+{
+    return allGeometry_;
+}
+
+
+const Foam::PtrList<Foam::extendedFeatureEdgeMesh>&
+Foam::conformationSurfaces::features() const
+{
+    return features_;
+}
+
+
+const Foam::point& Foam::conformationSurfaces::locationInMesh() const
+{
+    return locationInMesh_;
+}
+
+
+const Foam::labelList& Foam::conformationSurfaces::surfaces() const
+{
+    return surfaces_;
+}
+
+
+const Foam::List<Foam::word>& Foam::conformationSurfaces::patchNames() const
+{
+    return patchNames_;
+}
+
+
+const Foam::treeBoundBox& Foam::conformationSurfaces::globalBounds() const
+{
+    return globalBounds_;
+}
+
+
+bool Foam::conformationSurfaces::isBaffle(const label index) const
+{
+    return baffleSurfaces_[index];
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cvControls/cvControls.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cvControls/cvControls.C
new file mode 100644
index 0000000000000000000000000000000000000000..04ff4833146627f83cdeec7f448144726e89beae
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cvControls/cvControls.C
@@ -0,0 +1,227 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012-2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "cvControls.H"
+#include "conformalVoronoiMesh.H"
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::cvControls::cvControls
+(
+    const dictionary& cvMeshDict
+)
+:
+    cvMeshDict_(cvMeshDict)
+{
+    // Surface conformation controls
+
+    const dictionary& surfDict(cvMeshDict_.subDict("surfaceConformation"));
+
+    pointPairDistanceCoeff_ = readScalar
+    (
+        surfDict.lookup("pointPairDistanceCoeff")
+    );
+
+    mixedFeaturePointPPDistanceCoeff_ = readScalar
+    (
+        surfDict.lookup("mixedFeaturePointPPDistanceCoeff")
+    );
+
+    featurePointExclusionDistanceCoeff_ = readScalar
+    (
+        surfDict.lookup("featurePointExclusionDistanceCoeff")
+    );
+
+    featureEdgeExclusionDistanceCoeff_ = readScalar
+    (
+        surfDict.lookup("featureEdgeExclusionDistanceCoeff")
+    );
+
+    specialiseFeaturePoints_ = Switch
+    (
+        surfDict.lookup("specialiseFeaturePoints")
+    );
+
+    surfaceSearchDistanceCoeff_ = readScalar
+    (
+        surfDict.lookup("surfaceSearchDistanceCoeff")
+    );
+
+    maxSurfaceProtrusionCoeff_ = readScalar
+    (
+        surfDict.lookup("maxSurfaceProtrusionCoeff")
+    );
+
+    maxQuadAngle_ = readScalar(surfDict.lookup("maxQuadAngle"));
+
+    surfaceConformationRebuildFrequency_ = max
+    (
+        1,
+        readLabel(surfDict.lookup("surfaceConformationRebuildFrequency"))
+    );
+
+    // Controls for coarse surface conformation
+
+    const dictionary& conformationControlsDict
+    (
+        surfDict.subDict("conformationControls")
+    );
+
+    surfacePtExclusionDistanceCoeff_ = readScalar
+    (
+        conformationControlsDict.lookup("surfacePtExclusionDistanceCoeff")
+    );
+
+    edgeSearchDistCoeffSqr_ = sqr
+    (
+        readScalar
+        (
+            conformationControlsDict.lookup("edgeSearchDistCoeff")
+        )
+    );
+
+    surfacePtReplaceDistCoeffSqr_ = sqr
+    (
+        readScalar
+        (
+            conformationControlsDict.lookup("surfacePtReplaceDistCoeff")
+        )
+    );
+
+    maxConformationIterations_ = readLabel
+    (
+        conformationControlsDict.lookup("maxIterations")
+    );
+
+    iterationToInitialHitRatioLimit_ = readScalar
+    (
+        conformationControlsDict.lookup("iterationToInitialHitRatioLimit")
+    );
+
+
+    // Motion control controls
+
+    const dictionary& motionDict(cvMeshDict_.subDict("motionControl"));
+
+    defaultCellSize_ = readScalar(motionDict.lookup("defaultCellSize"));
+
+    minimumCellSize_ = readScalar(motionDict.lookup("minimumCellSize"));
+
+    objOutput_ = Switch(motionDict.lookupOrDefault<Switch>("objOutput", false));
+
+    timeChecks_ = Switch
+    (
+        motionDict.lookupOrDefault<Switch>("timeChecks", false)
+    );
+
+    if (Pstream::parRun())
+    {
+        maxLoadUnbalance_ = readScalar(motionDict.lookup("maxLoadUnbalance"));
+    }
+    else
+    {
+        maxLoadUnbalance_ = -1;
+    }
+
+    alignmentSearchSpokes_ = readLabel
+    (
+        motionDict.lookup("alignmentSearchSpokes")
+    );
+
+    cosAlignmentAcceptanceAngle_ = cos
+    (
+        degToRad(readScalar(motionDict.lookup("alignmentAcceptanceAngle")))
+    );
+
+    sizeAndAlignmentRebuildFrequency_ = max
+    (
+        1,
+        readLabel(motionDict.lookup("sizeAndAlignmentRebuildFrequency"))
+    );
+
+    // Point removal criteria
+
+    const dictionary& insertionDict
+    (
+        motionDict.subDict("pointInsertionCriteria")
+    );
+
+    insertionDistCoeff_ = readScalar
+    (
+        insertionDict.lookup("cellCentreDistCoeff")
+    );
+
+    faceAreaRatioCoeff_ = readScalar
+    (
+        insertionDict.lookup("faceAreaRatioCoeff")
+    );
+
+    cosInsertionAcceptanceAngle_ = cos
+    (
+        degToRad(readScalar(insertionDict.lookup("acceptanceAngle")))
+    );
+
+    // Point removal criteria
+
+    const dictionary& removalDict
+    (
+        motionDict.subDict("pointRemovalCriteria")
+    );
+
+    removalDistCoeff_ = readScalar
+    (
+        removalDict.lookup("cellCentreDistCoeff")
+    );
+
+    // polyMesh filtering controls
+
+    const dictionary& filteringDict(cvMeshDict_.subDict("polyMeshFiltering"));
+
+    filterEdges_ = Switch
+    (
+        filteringDict.lookupOrDefault<Switch>("filterEdges", true)
+    );
+
+    filterFaces_ = Switch
+    (
+        filteringDict.lookupOrDefault<Switch>("filterFaces", false)
+    );
+
+    if (filterFaces_)
+    {
+        filterEdges_ = Switch::ON;
+    }
+
+    writeTetDualMesh_ = Switch(filteringDict.lookup("writeTetDualMesh"));
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::cvControls::~cvControls()
+{}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cvControls/cvControls.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cvControls/cvControls.H
new file mode 100644
index 0000000000000000000000000000000000000000..884845e307c3c7416e3f6fd5d37a55e61e806f09
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cvControls/cvControls.H
@@ -0,0 +1,333 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012-2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::cvControls
+
+Description
+    Controls for the conformalVoronoiMesh mesh generator
+
+SourceFiles
+    cvControls.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef cvControls_H
+#define cvControls_H
+
+#include "dictionary.H"
+#include "Switch.H"
+#include "vector.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// Forward declaration of classes
+class conformalVoronoiMesh;
+
+/*---------------------------------------------------------------------------*\
+                          Class cvControls Declaration
+\*---------------------------------------------------------------------------*/
+
+class cvControls
+{
+    // Private data
+
+        //- Reference to the cvMeshDict
+        const dictionary& cvMeshDict_;
+
+        // Surface conformation controls
+
+            //- Point pair spacing coefficient - fraction of the local target
+            //  cell size
+            scalar pointPairDistanceCoeff_;
+
+            //- Distance along feature edge to place mixed feature point
+            //  conformation groups - to be multiple of pointPairDistanceCoeff_.
+            scalar mixedFeaturePointPPDistanceCoeff_;
+
+            //- Distance to a feature point within which surface and edge
+            //  conformation points are excluded - fraction of the local target
+            //  cell size
+            scalar featurePointExclusionDistanceCoeff_;
+
+            //- Distance to an existing feature edge conformation location
+            //  within which other edge conformation location are excluded -
+            //  fraction of the local target cell size
+            scalar featureEdgeExclusionDistanceCoeff_;
+
+            //- Switch for using specialised feature points
+            Switch specialiseFeaturePoints_;
+
+            //- Surface search distance coefficient - fraction of the local
+            //  target cell size
+            scalar surfaceSearchDistanceCoeff_;
+
+            //- Maximum allowable protrusion through the surface before
+            //  conformation points are added - fraction of the local target
+            //  cell size
+            scalar maxSurfaceProtrusionCoeff_;
+
+            //- Maximum quadrant angle allowed at a concave edge before
+            //  additional "mitering" lines are added
+            scalar maxQuadAngle_;
+
+            //- Now often to rebuild the surface conformation
+            label surfaceConformationRebuildFrequency_;
+
+
+            // Controls for coarse surface conformation
+
+                //- Distance to an existing surface conformation point location
+                //  within which other surface point locations are excluded
+                //  - fraction of the local target cell size
+                scalar surfacePtExclusionDistanceCoeff_;
+
+                //- Distance to search for feature edges near to
+                //  surface protrusions - fraction of the local target
+                //  cell size.
+                scalar edgeSearchDistCoeffSqr_;
+
+                //- Proximity to a feature edge where a surface hit is
+                //  not created, only the edge conformation is created
+                //  - fraction of the local target cell size.
+                scalar surfacePtReplaceDistCoeffSqr_;
+
+                //- Maximum allowed number surface conformation iterations.
+                label maxConformationIterations_;
+
+                //- Termination criterion for conformation iterations.
+                //  When the number of surface protrusions drops below this
+                //  ratio of the initial number of protrusions.
+                scalar iterationToInitialHitRatioLimit_;
+
+
+    // Motion control controls
+
+
+        // Cell size criteria
+
+            //- Default cell size
+            scalar defaultCellSize_;
+
+            //- Minimum cell size
+            scalar minimumCellSize_;
+
+
+        //- Switch to control the output of obj files for debug
+        Switch objOutput_;
+
+        //- Switch to control the reporting of detailed timeChecks
+        Switch timeChecks_;
+
+        //- Allowed relative load unbalance
+        scalar maxLoadUnbalance_;
+
+        //- Number of "spokes" to use to search for secondary alignment
+        //  direction
+        label alignmentSearchSpokes_;
+
+        //- cosine of angle of alignment with required direction within which a
+        //  face will be accepted for rotation
+        scalar cosAlignmentAcceptanceAngle_;
+
+        //- Now often to re-store the size and alignment data
+        label sizeAndAlignmentRebuildFrequency_;
+
+
+        // Point insertion criteria
+
+            //- Length between Delaunay vertices above which a new Dv should be
+            //  inserted - fraction of the local target cell size
+            scalar insertionDistCoeff_;
+
+            //- Minimum dual face area corresponding to long Delaunay edge where
+            //  a new Dv is to be inserted - fraction of the local target cell
+            //  size
+            scalar faceAreaRatioCoeff_;
+
+            //- cosine of the angle of alignment with the required direction
+            //  within which a long De will be accepted for a new Dv insertion
+            scalar cosInsertionAcceptanceAngle_;
+
+
+        // Point removal criteria
+
+            //- Length between Delaunay vertices below which a Dv should be
+            //  removed - fraction of the local target cell size
+            scalar removalDistCoeff_;
+
+
+    // polyMesh filtering controls
+
+        //- Activates the mesh edge filtering. On by default.
+        Switch filterEdges_;
+
+        //- Activates the mesh face filtering. Off by default.
+        Switch filterFaces_;
+
+        //- Write tet mesh at output time (it always writes the Voronoi)
+        Switch writeTetDualMesh_;
+
+
+    // Private Member Functions
+
+        //- Disallow default bitwise copy construct
+        cvControls(const cvControls&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const cvControls&);
+
+
+public:
+
+   // Constructors
+
+        //- Construct from references to conformalVoronoiMesh and dictionary
+        cvControls
+        (
+            const dictionary& cvMeshDict
+        );
+
+
+    //- Destructor
+    ~cvControls();
+
+
+    // Member Functions
+
+        // Access
+
+            //- Return the cvMeshDict
+            inline const dictionary& cvMeshDict() const;
+
+            //- Return the pointPairDistanceCoeff
+            inline scalar pointPairDistanceCoeff() const;
+
+            //- Return the mixedFeaturePointPPDistanceCoeff
+            inline scalar mixedFeaturePointPPDistanceCoeff() const;
+
+            //- Return the featurePointExclusionDistanceCoeff
+            inline scalar featurePointExclusionDistanceCoeff() const;
+
+            //- Return the featureEdgeExclusionDistanceCoeff
+            inline scalar featureEdgeExclusionDistanceCoeff() const;
+
+            //- Return the surfacePtExclusionDistanceCoeff
+            inline scalar surfacePtExclusionDistanceCoeff() const;
+
+            //- Return whether to use specialised feature points
+            inline Switch specialiseFeaturePoints() const;
+
+            //- Return the surfaceSearchDistanceCoeff
+            inline scalar surfaceSearchDistanceCoeff() const;
+
+            //- Return the maxSurfaceProtrusionCoeff
+            inline scalar maxSurfaceProtrusionCoeff() const;
+
+            //- Return the maxQuadAngle
+            inline scalar maxQuadAngle() const;
+
+            //- Return the surfaceConformationRebuildFrequency
+            inline label surfaceConformationRebuildFrequency() const;
+
+            //- Return the edgeSearchDistCoeffSqr for conformation.
+            scalar edgeSearchDistCoeffSqr() const;
+
+            //- Return the surfacePtReplaceDistCoeffSqr for conformation.
+            scalar surfacePtReplaceDistCoeffSqr() const;
+
+            //- Return the maxConformationIterations
+            label maxConformationIterations() const;
+
+            //- Return the iterationToInitialHitRatioLimit
+            scalar iterationToInitialHitRatioLimit() const;
+
+            //- Return the defaultCellSize
+            inline scalar defaultCellSize() const;
+
+            //- Return the minimumCellSize
+            inline scalar minimumCellSize() const;
+
+            //- Return the objOutput Switch
+            inline Switch objOutput() const;
+
+            //- Return the timeChecks Switch
+            inline Switch timeChecks() const;
+
+            //- Return the maxLoadUnbalance
+            inline scalar maxLoadUnbalance() const;
+
+            //- Return the number of alignmentSearchSpokes to use
+            inline label alignmentSearchSpokes() const;
+
+            //- Return the cosAlignmentAcceptanceAngle
+            inline scalar cosAlignmentAcceptanceAngle() const;
+
+            //- Return the sizeAndAlignmentRebuildFrequency
+            inline label sizeAndAlignmentRebuildFrequency() const;
+
+            //- Return the aspectRatio
+            inline scalar aspectRatio() const;
+
+            //- Return the aspectRatioDirection
+            inline const vector& aspectRatioDirection() const;
+
+            //- Return the insertionDistCoeff
+            inline scalar insertionDistCoeff() const;
+
+            //- Return the faceAreaRatioCoeff
+            inline scalar faceAreaRatioCoeff() const;
+
+            //- Return the cosInsertionAcceptanceAngle
+            inline scalar cosInsertionAcceptanceAngle() const;
+
+            //- Return removalDistCoeff
+            inline scalar removalDistCoeff() const;
+
+            //- Filter edges at output time
+            inline Switch filterEdges() const;
+
+            //- Filter faces at output time
+            inline Switch filterFaces() const;
+
+            //- Write tetMesh at output time
+            inline Switch writeTetDualMesh() const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#include "cvControlsI.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cvControls/cvControlsI.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cvControls/cvControlsI.H
new file mode 100644
index 0000000000000000000000000000000000000000..6cccc292edf9bba6147c94d02674e590ff2b67c0
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cvControls/cvControlsI.H
@@ -0,0 +1,203 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012-2013 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+inline const Foam::dictionary& Foam::cvControls::cvMeshDict() const
+{
+    return cvMeshDict_;
+}
+
+
+inline Foam::scalar Foam::cvControls::pointPairDistanceCoeff() const
+{
+    return pointPairDistanceCoeff_;
+}
+
+
+inline Foam::scalar Foam::cvControls::mixedFeaturePointPPDistanceCoeff() const
+{
+    return mixedFeaturePointPPDistanceCoeff_;
+}
+
+
+inline Foam::scalar Foam::cvControls::featurePointExclusionDistanceCoeff() const
+{
+    return featurePointExclusionDistanceCoeff_;
+}
+
+
+inline Foam::scalar Foam::cvControls::featureEdgeExclusionDistanceCoeff() const
+{
+    return featureEdgeExclusionDistanceCoeff_;
+}
+
+inline Foam::scalar Foam::cvControls::surfacePtExclusionDistanceCoeff() const
+{
+    return surfacePtExclusionDistanceCoeff_;
+}
+
+inline Foam::Switch Foam::cvControls::specialiseFeaturePoints() const
+{
+    return specialiseFeaturePoints_;
+}
+
+inline Foam::scalar Foam::cvControls::surfaceSearchDistanceCoeff() const
+{
+    return surfaceSearchDistanceCoeff_;
+}
+
+
+inline Foam::scalar Foam::cvControls::maxSurfaceProtrusionCoeff() const
+{
+    return maxSurfaceProtrusionCoeff_;
+}
+
+
+inline Foam::scalar Foam::cvControls::maxQuadAngle() const
+{
+    return maxQuadAngle_;
+}
+
+
+inline Foam::label Foam::cvControls::surfaceConformationRebuildFrequency() const
+{
+    return surfaceConformationRebuildFrequency_;
+}
+
+
+inline Foam::scalar Foam::cvControls::edgeSearchDistCoeffSqr() const
+{
+    return edgeSearchDistCoeffSqr_;
+}
+
+
+inline Foam::scalar Foam::cvControls::surfacePtReplaceDistCoeffSqr() const
+{
+    return surfacePtReplaceDistCoeffSqr_;
+}
+
+
+inline Foam::label Foam::cvControls::maxConformationIterations() const
+{
+    return maxConformationIterations_;
+}
+
+
+inline Foam::scalar Foam::cvControls::iterationToInitialHitRatioLimit() const
+{
+    return iterationToInitialHitRatioLimit_;
+}
+
+
+inline Foam::scalar Foam::cvControls::defaultCellSize() const
+{
+    return defaultCellSize_;
+}
+
+
+inline Foam::scalar Foam::cvControls::minimumCellSize() const
+{
+    return minimumCellSize_;
+}
+
+
+inline Foam::Switch Foam::cvControls::objOutput() const
+{
+    return objOutput_;
+}
+
+
+inline Foam::Switch Foam::cvControls::timeChecks() const
+{
+    return timeChecks_;
+}
+
+
+inline Foam::scalar Foam::cvControls::maxLoadUnbalance() const
+{
+    return maxLoadUnbalance_;
+}
+
+
+inline Foam::label Foam::cvControls::alignmentSearchSpokes() const
+{
+    return alignmentSearchSpokes_;
+}
+
+
+inline Foam::scalar Foam::cvControls::cosAlignmentAcceptanceAngle() const
+{
+    return cosAlignmentAcceptanceAngle_;
+}
+
+
+inline Foam::label Foam::cvControls::sizeAndAlignmentRebuildFrequency() const
+{
+    return sizeAndAlignmentRebuildFrequency_;
+}
+
+
+inline Foam::scalar Foam::cvControls::insertionDistCoeff() const
+{
+    return insertionDistCoeff_;
+}
+
+
+inline Foam::scalar Foam::cvControls::faceAreaRatioCoeff() const
+{
+    return faceAreaRatioCoeff_;
+}
+
+
+inline Foam::scalar Foam::cvControls::cosInsertionAcceptanceAngle() const
+{
+    return cosInsertionAcceptanceAngle_;
+}
+
+
+inline Foam::scalar Foam::cvControls::removalDistCoeff() const
+{
+    return removalDistCoeff_;
+}
+
+
+inline Foam::Switch Foam::cvControls::filterEdges() const
+{
+    return filterEdges_;
+}
+
+inline Foam::Switch Foam::cvControls::filterFaces() const
+{
+    return filterFaces_;
+}
+
+inline Foam::Switch Foam::cvControls::writeTetDualMesh() const
+{
+    return writeTetDualMesh_;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/faceAreaWeightModel/faceAreaWeightModel/faceAreaWeightModel.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/faceAreaWeightModel/faceAreaWeightModel/faceAreaWeightModel.C
new file mode 100644
index 0000000000000000000000000000000000000000..88c1e0bef4b6b80a9f5500c5a18df0d42ac79a0b
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/faceAreaWeightModel/faceAreaWeightModel/faceAreaWeightModel.C
@@ -0,0 +1,99 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "faceAreaWeightModel.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+defineTypeNameAndDebug(faceAreaWeightModel, 0);
+defineRunTimeSelectionTable(faceAreaWeightModel, dictionary);
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+faceAreaWeightModel::faceAreaWeightModel
+(
+    const word& type,
+    const dictionary& relaxationDict
+)
+:
+    dictionary(relaxationDict),
+    coeffDict_(subDict(type + "Coeffs"))
+{}
+
+
+// * * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * //
+
+autoPtr<faceAreaWeightModel> faceAreaWeightModel::New
+(
+    const dictionary& relaxationDict
+)
+{
+    word faceAreaWeightModelTypeName
+    (
+        relaxationDict.lookup("faceAreaWeightModel")
+    );
+
+    Info<< nl << "Selecting faceAreaWeightModel "
+        << faceAreaWeightModelTypeName << endl;
+
+    dictionaryConstructorTable::iterator cstrIter =
+        dictionaryConstructorTablePtr_->find(faceAreaWeightModelTypeName);
+
+    if (cstrIter == dictionaryConstructorTablePtr_->end())
+    {
+        FatalErrorIn
+        (
+            "faceAreaWeightModel::New(const dictionary&, "
+            "const conformalVoronoiMesh&)"
+        )   << "Unknown faceAreaWeightModel type "
+            << faceAreaWeightModelTypeName
+            << endl << endl
+            << "Valid faceAreaWeightModel types are :" << endl
+            << dictionaryConstructorTablePtr_->toc()
+            << exit(FatalError);
+    }
+
+    return autoPtr<faceAreaWeightModel>(cstrIter()(relaxationDict));
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+faceAreaWeightModel::~faceAreaWeightModel()
+{}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/faceAreaWeightModel/faceAreaWeightModel/faceAreaWeightModel.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/faceAreaWeightModel/faceAreaWeightModel/faceAreaWeightModel.H
new file mode 100644
index 0000000000000000000000000000000000000000..d7afd964a6d7b0debcdd68d92172a66680681bd9
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/faceAreaWeightModel/faceAreaWeightModel/faceAreaWeightModel.H
@@ -0,0 +1,142 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::faceAreaWeightModel
+
+Description
+    Abstract base class for providing faceAreaWeight values to the cell motion
+    controller based on an argument faceAreaFraction value, typically the ratio
+    of the area of the face in question to the area of a square face with a side
+    length of the local target cell size.
+
+SourceFiles
+    faceAreaWeightModel.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef faceAreaWeightModel_H
+#define faceAreaWeightModel_H
+
+#include "point.H"
+#include "dictionary.H"
+#include "autoPtr.H"
+#include "runTimeSelectionTables.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                       Class faceAreaWeightModel Declaration
+\*---------------------------------------------------------------------------*/
+
+class faceAreaWeightModel
+:
+    public dictionary
+{
+
+protected:
+
+    // Protected data
+
+        //- Method coeffs dictionary
+        dictionary coeffDict_;
+
+private:
+
+    // Private Member Functions
+
+        //- Disallow default bitwise copy construct
+        faceAreaWeightModel(const faceAreaWeightModel&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const faceAreaWeightModel&);
+
+
+public:
+
+    //- Runtime type information
+    TypeName("faceAreaWeightModel");
+
+
+    // Declare run-time constructor selection table
+
+        declareRunTimeSelectionTable
+        (
+            autoPtr,
+            faceAreaWeightModel,
+            dictionary,
+            (
+                const dictionary& faceAreaWeightDict
+            ),
+            (faceAreaWeightDict)
+        );
+
+
+    // Constructors
+
+        //- Construct from components
+        faceAreaWeightModel
+        (
+            const word& type,
+            const dictionary& faceAreaWeightDict
+        );
+
+
+    // Selectors
+
+        //- Return a reference to the selected faceAreaWeightModel
+        static autoPtr<faceAreaWeightModel> New
+        (
+            const dictionary& faceAreaWeightDict
+        );
+
+
+    //- Destructor
+    virtual ~faceAreaWeightModel();
+
+
+    // Member Functions
+
+        //- Const access to the coeffs dictionary
+        const dictionary& coeffDict() const
+        {
+            return coeffDict_;
+        }
+
+        //- Return the current faceAreaWeight coefficient
+        virtual scalar faceAreaWeight(scalar faceAreaFraction) const = 0;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/faceAreaWeightModel/piecewiseLinearRamp/piecewiseLinearRamp.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/faceAreaWeightModel/piecewiseLinearRamp/piecewiseLinearRamp.C
new file mode 100644
index 0000000000000000000000000000000000000000..07496e351777324c62ce6df3f625604b27f1dd6b
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/faceAreaWeightModel/piecewiseLinearRamp/piecewiseLinearRamp.C
@@ -0,0 +1,80 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "piecewiseLinearRamp.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+defineTypeNameAndDebug(piecewiseLinearRamp, 0);
+addToRunTimeSelectionTable
+(
+    faceAreaWeightModel,
+    piecewiseLinearRamp,
+    dictionary
+);
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+piecewiseLinearRamp::piecewiseLinearRamp
+(
+    const dictionary& faceAreaWeightDict
+)
+:
+    faceAreaWeightModel(typeName, faceAreaWeightDict),
+    lAF_(readScalar(coeffDict().lookup("lowerAreaFraction"))),
+    uAF_(readScalar(coeffDict().lookup("upperAreaFraction")))
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+scalar piecewiseLinearRamp::faceAreaWeight(scalar faceAreaFraction) const
+{
+    if (faceAreaFraction < lAF_)
+    {
+        return 0;
+    }
+    else if (faceAreaFraction < uAF_)
+    {
+        return faceAreaFraction/((uAF_ - lAF_)) - lAF_/(uAF_ - lAF_);
+    }
+    else
+    {
+        return 1;
+    }
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/faceAreaWeightModel/piecewiseLinearRamp/piecewiseLinearRamp.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/faceAreaWeightModel/piecewiseLinearRamp/piecewiseLinearRamp.H
new file mode 100644
index 0000000000000000000000000000000000000000..58fd55da039529a8e7501ef39b8ff662d0e55b6c
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/faceAreaWeightModel/piecewiseLinearRamp/piecewiseLinearRamp.H
@@ -0,0 +1,98 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::piecewiseLinearRamp
+
+Description
+    A linear ramp between 0 and 1 with definable start and end points.
+
+SourceFiles
+    piecewiseLinearRamp.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef piecewiseLinearRamp_H
+#define piecewiseLinearRamp_H
+
+#include "faceAreaWeightModel.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                           Class piecewiseLinearRamp Declaration
+\*---------------------------------------------------------------------------*/
+
+class piecewiseLinearRamp
+:
+    public faceAreaWeightModel
+{
+
+private:
+
+    // Private data
+
+        //- Face area fraction below which a weight of 0 is returned
+        scalar lAF_;
+
+        //- Face area fraction above which a which of 1 is returned
+        scalar uAF_;
+
+public:
+
+    //- Runtime type information
+    TypeName("piecewiseLinearRamp");
+
+    // Constructors
+
+        //- Construct from components
+        piecewiseLinearRamp
+        (
+            const dictionary& faceAreaWeightDict
+        );
+
+
+    //- Destructor
+    virtual ~piecewiseLinearRamp()
+    {}
+
+
+    // Member Functions
+
+        //- Return the faceAreaWeight
+        virtual scalar faceAreaWeight(scalar faceAreaFraction) const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/autoDensity/autoDensity.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/autoDensity/autoDensity.C
new file mode 100644
index 0000000000000000000000000000000000000000..0aace4f77fca09c19a7c72a0d1873672bdd62762
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/autoDensity/autoDensity.C
@@ -0,0 +1,947 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "autoDensity.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+defineTypeNameAndDebug(autoDensity, 0);
+addToRunTimeSelectionTable
+(
+    initialPointsMethod,
+    autoDensity,
+    dictionary
+);
+
+// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
+
+void Foam::autoDensity::writeOBJ
+(
+    const treeBoundBox& bb,
+    fileName name
+) const
+{
+    OFstream str(cvMesh_.time().path()/name + ".obj");
+
+    Pout<< "Writing " << str.name() << endl;
+
+    pointField bbPoints(bb.points());
+
+    forAll(bbPoints, i)
+    {
+        meshTools::writeOBJ(str, bbPoints[i]);
+    }
+
+    forAll(treeBoundBox::edges, i)
+    {
+        const edge& e = treeBoundBox::edges[i];
+
+        str << "l " << e[0] + 1 << ' ' << e[1] + 1 << nl;
+    }
+}
+
+bool Foam::autoDensity::combinedOverlaps(const treeBoundBox& box) const
+{
+    if (Pstream::parRun())
+    {
+        return
+            cvMesh_.decomposition().overlapsThisProcessor(box)
+         || cvMesh_.geometryToConformTo().overlaps(box);
+    }
+
+    return cvMesh_.geometryToConformTo().overlaps(box);
+}
+
+
+bool Foam::autoDensity::combinedInside(const point& p) const
+{
+    if (Pstream::parRun())
+    {
+        return
+            cvMesh_.decomposition().positionOnThisProcessor(p)
+         && cvMesh_.geometryToConformTo().inside(p);
+    }
+
+    return cvMesh_.geometryToConformTo().inside(p);
+}
+
+
+Foam::Field<bool> Foam::autoDensity::combinedWellInside
+(
+    const pointField& pts,
+    const scalarField& sizes
+) const
+{
+    if (!Pstream::parRun())
+    {
+        return cvMesh_.geometryToConformTo().wellInside
+        (
+            pts,
+            minimumSurfaceDistanceCoeffSqr_*sqr(sizes)
+        );
+    }
+
+    Field<bool> inside(pts.size(), true);
+
+    // Perform AND operation between testing the surfaces and the previous
+    // field, i.e the parallel result, or in serial, with true.
+
+    Field<bool> insideA
+    (
+        cvMesh_.geometryToConformTo().wellInside
+        (
+            pts,
+            minimumSurfaceDistanceCoeffSqr_*sqr(sizes)
+        )
+    );
+
+    Field<bool> insideB(cvMesh_.decomposition().positionOnThisProcessor(pts));
+
+    // inside = insideA && insideB;
+
+    // Pout<< insideA << nl << insideB << endl;
+
+    forAll(inside, i)
+    {
+        // if (inside[i] != (insideA[i] && insideB[i]))
+        // {
+        //     Pout<< i << " not equal " << " "
+        //         << pts[i] << " " << sizes[i] << " "
+        //         << insideA[i] << " "
+        //         << insideB[i] << " "
+        //         << inside[i]
+        //         << endl;
+        // }
+
+        inside[i] = (insideA[i] && insideB[i]);
+    }
+
+    return inside;
+}
+
+
+bool Foam::autoDensity::combinedWellInside
+(
+    const point& p,
+    scalar size
+) const
+{
+    bool inside = true;
+
+    if (Pstream::parRun())
+    {
+        inside = cvMesh_.decomposition().positionOnThisProcessor(p);
+    }
+
+    // Perform AND operation between testing the surfaces and the previous
+    // result, i.e the parallel result, or in serial, with true.
+    inside =
+        inside
+     && cvMesh_.geometryToConformTo().wellInside
+        (
+            p,
+            minimumSurfaceDistanceCoeffSqr_*sqr(size)
+        );
+
+    return inside;
+}
+
+
+void Foam::autoDensity::recurseAndFill
+(
+    DynamicList<Vb::Point>& initialPoints,
+    const treeBoundBox& bb,
+    label levelLimit,
+    word recursionName
+) const
+{
+    for (direction i = 0; i < 8; i++)
+    {
+        treeBoundBox subBB = bb.subBbox(i);
+
+        word newName = recursionName + "_" + Foam::name(i);
+
+        if (debug)
+        {
+            cvMesh_.timeCheck(newName);
+        }
+
+        if (combinedOverlaps(subBB))
+        {
+            if (levelLimit > 0)
+            {
+                recurseAndFill
+                (
+                    initialPoints,
+                    subBB,
+                    levelLimit - 1,
+                    newName
+                );
+            }
+            else
+            {
+                if (debug)
+                {
+                    writeOBJ
+                    (
+                        subBB,
+                        word(newName + "_overlap")
+                    );
+
+                    Pout<< newName + "_overlap " << subBB << endl;
+                }
+
+                if (!fillBox(initialPoints, subBB, true))
+                {
+                    recurseAndFill
+                    (
+                        initialPoints,
+                        subBB,
+                        levelLimit - 1,
+                        newName
+                    );
+                }
+            }
+        }
+        else if (combinedInside(subBB.midpoint()))
+        {
+            if (debug)
+            {
+                writeOBJ
+                (
+                    subBB,
+                    newName + "_inside"
+                );
+
+                Pout<< newName + "_inside " << subBB << endl;
+            }
+
+            if (!fillBox(initialPoints, subBB, false))
+            {
+                recurseAndFill
+                (
+                    initialPoints,
+                    subBB,
+                    levelLimit - 1,
+                    newName
+                );
+            }
+        }
+        else
+        {
+            if (debug)
+            {
+                writeOBJ
+                (
+                    subBB,
+                    newName + "_outside"
+                );
+            }
+        }
+    }
+}
+
+
+bool Foam::autoDensity::fillBox
+(
+    DynamicList<Vb::Point>& initialPoints,
+    const treeBoundBox& bb,
+    bool overlapping
+) const
+{
+    const conformationSurfaces& geometry(cvMesh_.geometryToConformTo());
+
+    Random& rnd = cvMesh_.rndGen();
+
+    unsigned int initialSize = initialPoints.size();
+
+    scalar maxCellSize = -GREAT;
+
+    scalar minCellSize = GREAT;
+
+    scalar maxDensity = 1/pow3(minCellSize);
+
+    scalar volumeAdded = 0.0;
+
+    const point& min = bb.min();
+
+    vector span = bb.span();
+
+    scalar totalVolume = bb.volume();
+
+    label trialPoints = 0;
+
+    bool wellInside = false;
+
+    if (!overlapping)
+    {
+        // Check the nearest point on the surface to the box, if it is far
+        // enough away, then the surface sampling of the box can be skipped.
+        // Checking if the nearest piece of surface is at least 1.5*bb.span away
+        // from the bb.midpoint.
+
+        pointIndexHit surfHit;
+        label hitSurface;
+
+        geometry.findSurfaceNearest
+        (
+            bb.midpoint(),
+            2.25*magSqr(span),
+            surfHit,
+            hitSurface
+        );
+
+        if (!surfHit.hit())
+        {
+            if (debug)
+            {
+                Pout<< "box wellInside, no need to sample surface." << endl;
+            }
+
+            wellInside = true;
+        }
+    }
+
+    if (!overlapping && !wellInside)
+    {
+        // If this is an inside box then then it is possible to fill points very
+        // close to the boundary, to prevent this, check the corners and sides
+        // of the box so ensure that they are "wellInside".  If not, set as an
+        // overlapping box.
+
+        pointField corners(bb.points());
+
+        scalarField cornerSizes = cvMesh_.cellShapeControls().cellSize(corners);
+
+        Field<bool> insideCorners = combinedWellInside(corners, cornerSizes);
+
+        // Pout<< corners << nl << cornerSizes << nl << insideCorners << endl;
+
+        forAll(insideCorners, i)
+        {
+            // Use the sizes to improve the min/max cell size estimate
+            scalar s = cornerSizes[i];
+
+            if (s > maxCellSize)
+            {
+                maxCellSize = s;
+            }
+
+            if (s < minCellSize)
+            {
+                minCellSize = max(s, minCellSizeLimit_);
+            }
+
+            if (maxCellSize/minCellSize > maxSizeRatio_)
+            {
+                if (debug)
+                {
+                    Pout<< "Abort fill at corner sample stage,"
+                        << " minCellSize " << minCellSize
+                        << " maxCellSize " << maxCellSize
+                        << " maxSizeRatio " << maxCellSize/minCellSize
+                        << endl;
+                }
+
+                return false;
+            }
+
+            if (!insideCorners[i])
+            {
+                // If one or more corners is not "wellInside", then treat this
+                // as an overlapping box.
+
+                if (debug)
+                {
+                    Pout<< "Inside box found to have some non-wellInside "
+                        << "corners, using overlapping fill."
+                        << endl;
+                }
+
+                overlapping = true;
+
+                break;
+            }
+        }
+
+        if (!overlapping)
+        {
+            vector delta = span/(surfRes_ - 1);
+
+            label nLine = 6*(surfRes_ - 2);
+
+            pointField linePoints(nLine, vector::zero);
+
+            scalarField lineSizes(nLine, 0.0);
+
+            for (label i = 0; i < surfRes_; i++)
+            {
+                label lPI = 0;
+
+                for (label j = 1; j < surfRes_ - 1 ; j++)
+                {
+                    linePoints[lPI++] =
+                        min
+                      + vector(0, delta.y()*i, delta.z()*j);
+
+                    linePoints[lPI++] =
+                        min
+                      + vector
+                        (
+                            delta.x()*(surfRes_ - 1),
+                            delta.y()*i,
+                            delta.z()*j
+                        );
+
+                    linePoints[lPI++] =
+                        min
+                      + vector(delta.x()*j, 0, delta.z()*i);
+
+                    linePoints[lPI++] =
+                        min
+                      + vector
+                        (
+                            delta.x()*j,
+                            delta.y()*(surfRes_ - 1),
+                            delta.z()*i
+                        );
+
+                    linePoints[lPI++] =
+                        min
+                      + vector(delta.x()*i, delta.y()*j, 0);
+
+                    linePoints[lPI++] =
+                        min
+                      + vector
+                        (
+                            delta.x()*i,
+                            delta.y()*j,
+                            delta.z()*(surfRes_ - 1)
+                        );
+                }
+
+                lineSizes = cvMesh_.cellShapeControls().cellSize(linePoints);
+
+                Field<bool> insideLines = combinedWellInside
+                (
+                    linePoints,
+                    lineSizes
+                );
+
+                forAll(insideLines, i)
+                {
+                    // Use the sizes to improve the min/max cell size estimate
+                    scalar s = lineSizes[i];
+
+                    if (s > maxCellSize)
+                    {
+                        maxCellSize = s;
+                    }
+
+                    if (s < minCellSize)
+                    {
+                        minCellSize = max(s, minCellSizeLimit_);
+                    }
+
+                    if (maxCellSize/minCellSize > maxSizeRatio_)
+                    {
+                        if (debug)
+                        {
+                            Pout<< "Abort fill at surface sample stage, "
+                                << " minCellSize " << minCellSize
+                                << " maxCellSize " << maxCellSize
+                                << " maxSizeRatio " << maxCellSize/minCellSize
+                                << endl;
+                        }
+
+                        return false;
+                    }
+
+                    if (!insideLines[i])
+                    {
+                        // If one or more surface points is not "wellInside",
+                        // then treat this as an overlapping box.
+                        overlapping = true;
+
+                        if (debug)
+                        {
+                            Pout<< "Inside box found to have some non-"
+                                << "wellInside surface points, using "
+                                << "overlapping fill."
+                                << endl;
+                        }
+
+                        break;
+                    }
+                }
+            }
+        }
+    }
+
+    if (overlapping)
+    {
+        // Sample the box to find an estimate of the min size, and a volume
+        // estimate when overlapping == true.
+
+        pointField samplePoints
+        (
+            volRes_*volRes_*volRes_,
+            vector::zero
+        );
+
+        vector delta = span/volRes_;
+
+        label pI = 0;
+
+        for (label i = 0; i < volRes_; i++)
+        {
+            for (label j = 0; j < volRes_; j++)
+            {
+                for (label k = 0; k < volRes_; k++)
+                {
+                    // Perturb the points to avoid creating degenerate positions
+                    // in the Delaunay tessellation.
+
+                    samplePoints[pI++] =
+                        min
+                      + vector
+                        (
+                            delta.x()*(i + 0.5 + 0.1*(rnd.scalar01() - 0.5)),
+                            delta.y()*(j + 0.5 + 0.1*(rnd.scalar01() - 0.5)),
+                            delta.z()*(k + 0.5 + 0.1*(rnd.scalar01() - 0.5))
+                        );
+                }
+            }
+        }
+
+        // Randomise the order of the points to (potentially) improve the speed
+        // of assessing the density ratio, and prevent a box being filled from a
+        // corner when only some these points are required.
+        shuffle(samplePoints);
+
+        scalarField sampleSizes = cvMesh_.cellShapeControls().cellSize
+        (
+            samplePoints
+        );
+
+        Field<bool> insidePoints = combinedWellInside
+        (
+            samplePoints,
+            sampleSizes
+        );
+
+        label nInside = 0;
+
+        forAll(insidePoints, i)
+        {
+            if (insidePoints[i])
+            {
+                nInside++;
+
+                scalar s = sampleSizes[i];
+
+                if (s > maxCellSize)
+                {
+                    maxCellSize = s;
+                }
+
+                if (s < minCellSize)
+                {
+                    minCellSize = max(s, minCellSizeLimit_);
+                }
+
+                if (maxCellSize/minCellSize > maxSizeRatio_)
+                {
+                    if (debug)
+                    {
+                        Pout<< "Abort fill at sample stage,"
+                            << " minCellSize " << minCellSize
+                            << " maxCellSize " << maxCellSize
+                            << " maxSizeRatio " << maxCellSize/minCellSize
+                            << endl;
+                    }
+
+                    return false;
+                }
+            }
+        }
+
+        if (nInside == 0)
+        {
+            if (debug)
+            {
+                Pout<< "No sample points found inside box" << endl;
+            }
+
+            return true;
+        }
+
+        if (debug)
+        {
+            Pout<< scalar(nInside)/scalar(samplePoints.size())
+                << " full overlapping box" << endl;
+        }
+
+        totalVolume *= scalar(nInside)/scalar(samplePoints.size());
+
+        if (debug)
+        {
+            Pout<< "Total volume to fill = " << totalVolume << endl;
+        }
+
+        // Using the sampledPoints as the first test locations as they are
+        // randomly shuffled, but unfiormly sampling space and have wellInside
+        // and size data already
+
+        maxDensity = 1/pow3(max(minCellSize, SMALL));
+
+        forAll(insidePoints, i)
+        {
+            if (insidePoints[i])
+            {
+                trialPoints++;
+
+                point p = samplePoints[i];
+
+                scalar localSize = sampleSizes[i];
+
+                scalar localDensity = 1/pow3(localSize);
+
+                // No need to look at max/min cell size here, already handled
+                // by sampling
+
+                // Accept possible placements proportional to the relative
+                // local density
+
+                // TODO - is there a lot of cost in the 1/density calc?  Could
+                // assess on
+                //    (1/maxDensity)/(1/localDensity) = minVolume/localVolume
+                if (localDensity/maxDensity > rnd.scalar01())
+                {
+                    scalar localVolume = 1/localDensity;
+
+                    if (volumeAdded + localVolume > totalVolume)
+                    {
+                        // Add the final box with a probability of to the ratio
+                        // of the remaining volume to the volume to be added,
+                        // i.e. insert a box of volume 0.5 into a remaining
+                        // volume of 0.1 20% of the time.
+                        scalar addProbability =
+                           (totalVolume - volumeAdded)/localVolume;
+
+                        scalar r = rnd.scalar01();
+
+                        if (debug)
+                        {
+                            Pout<< "totalVolume " << totalVolume << nl
+                                << "volumeAdded " << volumeAdded << nl
+                                << "localVolume " << localVolume << nl
+                                << "addProbability " << addProbability << nl
+                                << "random " << r
+                                << endl;
+                        }
+
+                        if (addProbability > r)
+                        {
+                            // Place this volume before finishing filling this
+                            // box
+
+                            // Pout<< "Final volume probability break accept"
+                            //     << endl;
+
+                            initialPoints.append
+                            (
+                                Vb::Point(p.x(), p.y(), p.z())
+                            );
+
+                            volumeAdded += localVolume;
+                        }
+
+                        break;
+                    }
+
+                    initialPoints.append(Vb::Point(p.x(), p.y(), p.z()));
+
+                    volumeAdded += localVolume;
+                }
+            }
+        }
+    }
+
+    if (volumeAdded < totalVolume)
+    {
+        if (debug)
+        {
+            Pout<< "Adding random points, remaining volume "
+                << totalVolume - volumeAdded
+                << endl;
+        }
+
+        maxDensity = 1/pow3(max(minCellSize, SMALL));
+
+        while (true)
+        {
+            trialPoints++;
+
+            point p = min + cmptMultiply(span, rnd.vector01());
+
+            scalar localSize = cvMesh_.cellShapeControls().cellSize(p);
+
+            bool insidePoint = false;
+
+            if (!overlapping)
+            {
+                insidePoint = true;
+            }
+            else
+            {
+                // Determine if the point is "wellInside" the domain
+                insidePoint = combinedWellInside(p, localSize);
+            }
+
+            if (insidePoint)
+            {
+                if (localSize > maxCellSize)
+                {
+                    maxCellSize = localSize;
+                }
+
+                if (localSize < minCellSize)
+                {
+                    minCellSize = max(localSize, minCellSizeLimit_);
+
+                    localSize = minCellSize;
+
+                    // 1/(minimum cell size)^3, gives the maximum permissible
+                    // point density
+                    maxDensity = 1/pow3(max(minCellSize, SMALL));
+                }
+
+                if (maxCellSize/minCellSize > maxSizeRatio_)
+                {
+                    if (debug)
+                    {
+                        Pout<< "Abort fill at random fill stage,"
+                            << " minCellSize " << minCellSize
+                            << " maxCellSize " << maxCellSize
+                            << " maxSizeRatio " << maxCellSize/minCellSize
+                            << endl;
+                    }
+
+                    // Discard any points already filled into this box by
+                    // setting size of initialPoints back to its starting value
+                    initialPoints.resize(initialSize);
+
+                    return false;
+                }
+
+                scalar localDensity = 1/pow3(max(localSize, SMALL));
+
+                // Accept possible placements proportional to the relative local
+                // density
+                if (localDensity/maxDensity > rnd.scalar01())
+                {
+                    scalar localVolume = 1/localDensity;
+
+                    if (volumeAdded + localVolume > totalVolume)
+                    {
+                        // Add the final box with a probability of to the ratio
+                        // of the remaining volume to the volume to be added,
+                        // i.e. insert a box of volume 0.5 into a remaining
+                        // volume of 0.1 20% of the time.
+                        scalar addProbability =
+                            (totalVolume - volumeAdded)/localVolume;
+
+                        scalar r = rnd.scalar01();
+
+                        if (debug)
+                        {
+                            Pout<< "totalVolume " << totalVolume << nl
+                                << "volumeAdded " << volumeAdded << nl
+                                << "localVolume " << localVolume << nl
+                                << "addProbability " << addProbability << nl
+                                << "random " << r
+                                << endl;
+                        }
+
+                        if (addProbability > r)
+                        {
+                            // Place this volume before finishing filling this
+                            // box
+
+                            // Pout<< "Final volume probability break accept"
+                            //     << endl;
+
+                            initialPoints.append
+                            (
+                                Vb::Point(p.x(), p.y(), p.z())
+                            );
+
+                            volumeAdded += localVolume;
+                        }
+
+                        break;
+                    }
+
+                    initialPoints.append(Vb::Point(p.x(), p.y(), p.z()));
+
+                    volumeAdded += localVolume;
+                }
+            }
+        }
+    }
+
+    globalTrialPoints_ += trialPoints;
+
+    if (debug)
+    {
+        Pout<< trialPoints
+            << " locations queried, " << initialPoints.size() - initialSize
+            << " points placed, ("
+            << scalar(initialPoints.size() - initialSize)
+              /scalar(max(trialPoints, 1))
+            << " success rate)." << nl
+            << "minCellSize " << minCellSize
+            << ", maxCellSize " << maxCellSize
+            << ", ratio " << maxCellSize/minCellSize
+            << nl << endl;
+    }
+
+    return true;
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+autoDensity::autoDensity
+(
+    const dictionary& initialPointsDict,
+    const conformalVoronoiMesh& cvMesh
+)
+:
+    initialPointsMethod(typeName, initialPointsDict, cvMesh),
+    globalTrialPoints_(0),
+    minCellSizeLimit_
+    (
+        detailsDict().lookupOrDefault<scalar>("minCellSizeLimit", 0.0)
+    ),
+    minLevels_(readLabel(detailsDict().lookup("minLevels"))),
+    maxSizeRatio_(readScalar(detailsDict().lookup("maxSizeRatio"))),
+    volRes_(readLabel(detailsDict().lookup("sampleResolution"))),
+    surfRes_
+    (
+        detailsDict().lookupOrDefault<label>("surfaceSampleResolution", volRes_)
+    )
+{
+    if (maxSizeRatio_ <= 1.0)
+    {
+        maxSizeRatio_ = 2.0;
+
+        WarningIn
+        (
+            "autoDensity::autoDensity"
+            "("
+                "const dictionary& initialPointsDict,"
+                "const conformalVoronoiMesh& cvMesh"
+            ")"
+        )
+            << "The maxSizeRatio must be greater than one to be sensible, "
+            << "setting to " << maxSizeRatio_
+            << endl;
+    }
+}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+List<Vb::Point> autoDensity::initialPoints() const
+{
+    treeBoundBox hierBB;
+
+    // Pick up the bounds of this processor, or the whole geometry, depending
+    // on whether this is a parallel run.
+    if (Pstream::parRun())
+    {
+        hierBB = cvMesh_.decomposition().procBounds();
+    }
+    else
+    {
+        // Extend the global box to move it off large plane surfaces
+        hierBB = cvMesh_.geometryToConformTo().globalBounds().extend
+        (
+            cvMesh_.rndGen(),
+            1e-6
+        );
+    }
+
+    DynamicList<Vb::Point> initialPoints;
+
+    Info<< nl << "    " << typeName << endl;
+
+    if (debug)
+    {
+        Pout<< "    Filling box " << hierBB << endl;
+    }
+
+    recurseAndFill
+    (
+        initialPoints,
+        hierBB,
+        minLevels_ - 1,
+        "recursionBox"
+    );
+
+    initialPoints.shrink();
+
+    label nInitialPoints = initialPoints.size();
+
+    if (Pstream::parRun())
+    {
+        reduce(nInitialPoints, sumOp<label>());
+        reduce(globalTrialPoints_, sumOp<label>());
+    }
+
+    Info<< "        " << nInitialPoints << " points placed" << nl
+        << "        " << globalTrialPoints_ << " locations queried" << nl
+        << "        "
+        << scalar(nInitialPoints)/scalar(max(globalTrialPoints_, 1))
+        << " success rate"
+        << endl;
+
+    return initialPoints;
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/autoDensity/autoDensity.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/autoDensity/autoDensity.H
new file mode 100644
index 0000000000000000000000000000000000000000..2ef7cb00b0e3fa6b737526dff9918acd94bdeac7
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/autoDensity/autoDensity.H
@@ -0,0 +1,171 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::autoDensity
+
+Description
+    Choose random points inside the domain and place them with a probability
+    proportional to the target density of points.
+
+SourceFiles
+    autoDensity.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef autoDensity_H
+#define autoDensity_H
+
+#include "initialPointsMethod.H"
+#include "treeBoundBox.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+            Class autoDensity Declaration
+\*---------------------------------------------------------------------------*/
+
+class autoDensity
+:
+    public initialPointsMethod
+{
+
+private:
+
+    // Private data
+
+        //- Trial points attempted to be placed in all boxes
+        mutable label globalTrialPoints_;
+
+        //- Smallest minimum cell size allowed, i.e. to avoid high initial
+        //  population of areas of small size
+        scalar minCellSizeLimit_;
+
+        //- Minimum normal level of recursion, can be more if a high density
+        //  ratio is detected
+        label minLevels_;
+
+        //- Maximum allowed ratio of cell size in a box
+        scalar maxSizeRatio_;
+
+        //- How fine should the initial sample of the volume a box be to
+        //  investigate its cell sizes and volume fraction
+        label volRes_;
+
+        //- How fine should the initial sample of the surface of a box be to
+        //  investigate if it is near to a the geometry.
+        label surfRes_;
+
+
+    // Private Member Functions
+
+        //- Check if the given box overlaps the geometry or, in parallel, the
+        //  backgroundMeshDecomposition
+        bool combinedOverlaps(const treeBoundBox& box) const;
+
+        //- Check if the given point is inside the geometry and, in parallel,
+        //  the backgroundMeshDecomposition
+        bool combinedInside(const point& p) const;
+
+        //- Check if the given points are wellInside the geometry and, in
+        //  parallel, inside the backgroundMeshDecomposition
+        Field<bool> combinedWellInside
+        (
+            const pointField& pts,
+            const scalarField& sizes
+        ) const;
+
+        //- Check if the given points are wellInside the geometry and, in
+        //  parallel, inside the backgroundMeshDecomposition
+        bool combinedWellInside
+        (
+            const point& p,
+            scalar size
+        ) const;
+
+        //- Write boundBox as obj
+        void writeOBJ
+        (
+            const treeBoundBox& bb,
+            fileName name
+        ) const;
+
+        //- Descend into octants of the supplied bound box
+        void recurseAndFill
+        (
+            DynamicList<Vb::Point>& initialPoints,
+            const treeBoundBox& bb,
+            label levelLimit,
+            word recursionName
+        ) const;
+
+        //- Fill the given box, optionally filling surface overlapping boxes.
+        //  Returns true if the fill is successful, false if it is to be aborted
+        //  in favour of further recursion.
+        bool fillBox
+        (
+            DynamicList<Vb::Point>& initialPoints,
+            const treeBoundBox& bb,
+            bool overlapping
+        ) const;
+
+
+public:
+
+    //- Runtime type information
+    TypeName("autoDensity");
+
+    // Constructors
+
+        //- Construct from components
+        autoDensity
+        (
+            const dictionary& initialPointsDict,
+            const conformalVoronoiMesh& cvMesh
+        );
+
+
+    //- Destructor
+    virtual ~autoDensity()
+    {}
+
+
+    // Member Functions
+
+        //- Return the initial points for the conformalVoronoiMesh
+        virtual List<Vb::Point> initialPoints() const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/bodyCentredCubic/bodyCentredCubic.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/bodyCentredCubic/bodyCentredCubic.C
new file mode 100644
index 0000000000000000000000000000000000000000..c69e7ac8fb314d334c595d103e9dd70ffe7fd9fc
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/bodyCentredCubic/bodyCentredCubic.C
@@ -0,0 +1,194 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "bodyCentredCubic.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+defineTypeNameAndDebug(bodyCentredCubic, 0);
+addToRunTimeSelectionTable(initialPointsMethod, bodyCentredCubic, dictionary);
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+bodyCentredCubic::bodyCentredCubic
+(
+    const dictionary& initialPointsDict,
+    const conformalVoronoiMesh& cvMesh
+)
+:
+    initialPointsMethod(typeName, initialPointsDict, cvMesh),
+    initialCellSize_(readScalar(detailsDict().lookup("initialCellSize"))),
+    randomiseInitialGrid_(detailsDict().lookup("randomiseInitialGrid")),
+    randomPerturbationCoeff_
+    (
+        readScalar(detailsDict().lookup("randomPerturbationCoeff"))
+    )
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+List<Vb::Point> bodyCentredCubic::initialPoints() const
+{
+    boundBox bb;
+
+    // Pick up the bounds of this processor, or the whole geometry, depending
+    // on whether this is a parallel run.
+    if (Pstream::parRun())
+    {
+        bb = cvMesh_.decomposition().procBounds();
+    }
+    else
+    {
+        bb = cvMesh_.geometryToConformTo().globalBounds();
+    }
+
+    scalar x0 = bb.min().x();
+    scalar xR = bb.max().x() - x0;
+    label ni = label(xR/initialCellSize_);
+
+    scalar y0 = bb.min().y();
+    scalar yR = bb.max().y() - y0;
+    label nj = label(yR/initialCellSize_);
+
+    scalar z0 = bb.min().z();
+    scalar zR = bb.max().z() - z0;
+    label nk = label(zR/initialCellSize_);
+
+    vector delta(xR/ni, yR/nj, zR/nk);
+
+    delta *= pow((1.0/2.0),-(1.0/3.0));
+
+    Random& rndGen = cvMesh_.rndGen();
+
+    scalar pert = randomPerturbationCoeff_*cmptMin(delta);
+
+    DynamicList<Vb::Point> initialPoints(ni*nj*nk/10);
+
+    for (label i = 0; i < ni; i++)
+    {
+        for (label j = 0; j < nj; j++)
+        {
+            // Generating, testing and adding points one line at a time to
+            // reduce the memory requirement for cases with bounding boxes that
+            // are very large in comparison to the volume to be filled
+
+            label pI = 0;
+
+            pointField points(2*nk);
+
+            for (label k = 0; k < nk; k++)
+            {
+                point pA
+                (
+                    x0 + i*delta.x(),
+                    y0 + j*delta.y(),
+                    z0 + k*delta.z()
+                );
+
+                point pB = pA + 0.5*delta;
+
+                if (randomiseInitialGrid_)
+                {
+                    pA.x() += pert*(rndGen.scalar01() - 0.5);
+                    pA.y() += pert*(rndGen.scalar01() - 0.5);
+                    pA.z() += pert*(rndGen.scalar01() - 0.5);
+                }
+
+                if (Pstream::parRun())
+                {
+                    if (cvMesh_.decomposition().positionOnThisProcessor(pA))
+                    {
+                        // Add this point in parallel only if this position is
+                        // on this processor.
+                        points[pI++] = pA;
+                    }
+                }
+                else
+                {
+                    points[pI++] = pA;
+                }
+
+                if (randomiseInitialGrid_)
+                {
+                    pB.x() += pert*(rndGen.scalar01() - 0.5);
+                    pB.y() += pert*(rndGen.scalar01() - 0.5);
+                    pB.z() += pert*(rndGen.scalar01() - 0.5);
+                }
+
+                if (Pstream::parRun())
+                {
+                    if (cvMesh_.decomposition().positionOnThisProcessor(pB))
+                    {
+                        // Add this point in parallel only if this position is
+                        // on this processor.
+                        points[pI++] = pB;
+                    }
+                }
+                else
+                {
+                    points[pI++] = pB;
+                }
+            }
+
+            points.setSize(pI);
+
+            Field<bool> insidePoints = cvMesh_.geometryToConformTo().wellInside
+            (
+                points,
+                minimumSurfaceDistanceCoeffSqr_
+               *sqr
+                (
+                    cvMesh_.cellShapeControls().cellSize(points)
+                )
+            );
+
+            forAll(insidePoints, i)
+            {
+                if (insidePoints[i])
+                {
+                    const point& p(points[i]);
+
+                    initialPoints.append(Vb::Point(p.x(), p.y(), p.z()));
+                }
+            }
+        }
+    }
+
+    return initialPoints.shrink();
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/bodyCentredCubic/bodyCentredCubic.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/bodyCentredCubic/bodyCentredCubic.H
new file mode 100644
index 0000000000000000000000000000000000000000..f75fa599d39e64a6a76f725e8378036f2bf17608
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/bodyCentredCubic/bodyCentredCubic.H
@@ -0,0 +1,104 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::bodyCentredCubic
+
+Description
+    Generate a BCC lattice of points inside the surfaces to be
+    conformed to of the conformalVoronoiMesh
+
+SourceFiles
+    bodyCentredCubic.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef bodyCentredCubic_H
+#define bodyCentredCubic_H
+
+#include "initialPointsMethod.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                       Class bodyCentredCubic Declaration
+\*---------------------------------------------------------------------------*/
+
+class bodyCentredCubic
+:
+    public initialPointsMethod
+{
+
+private:
+
+    // Private data
+
+    //- The initial cell spacing
+    scalar initialCellSize_;
+
+    //- Should the initial positions be randomised
+    Switch randomiseInitialGrid_;
+
+    //- Randomise the initial positions by fraction of the initialCellSize_
+    scalar randomPerturbationCoeff_;
+
+
+public:
+
+    //- Runtime type information
+    TypeName("bodyCentredCubic");
+
+    // Constructors
+
+        //- Construct from components
+        bodyCentredCubic
+        (
+            const dictionary& initialPointsDict,
+            const conformalVoronoiMesh& cvMesh
+        );
+
+
+    //- Destructor
+    virtual ~bodyCentredCubic()
+    {}
+
+
+    // Member Functions
+
+        //- Return the initial points for the conformalVoronoiMesh
+        virtual List<Vb::Point> initialPoints() const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/faceCentredCubic/faceCentredCubic.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/faceCentredCubic/faceCentredCubic.C
new file mode 100644
index 0000000000000000000000000000000000000000..af2e7dfbf4d833d0e76585bc8c322bad152aa3a9
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/faceCentredCubic/faceCentredCubic.C
@@ -0,0 +1,255 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "faceCentredCubic.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+defineTypeNameAndDebug(faceCentredCubic, 0);
+addToRunTimeSelectionTable(initialPointsMethod, faceCentredCubic, dictionary);
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+faceCentredCubic::faceCentredCubic
+(
+    const dictionary& initialPointsDict,
+    const conformalVoronoiMesh& cvMesh
+)
+:
+    initialPointsMethod(typeName, initialPointsDict, cvMesh),
+    initialCellSize_(readScalar(detailsDict().lookup("initialCellSize"))),
+    randomiseInitialGrid_(detailsDict().lookup("randomiseInitialGrid")),
+    randomPerturbationCoeff_
+    (
+        readScalar(detailsDict().lookup("randomPerturbationCoeff"))
+    )
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+List<Vb::Point> faceCentredCubic::initialPoints() const
+{
+    boundBox bb;
+
+    // Pick up the bounds of this processor, or the whole geometry, depending
+    // on whether this is a parallel run.
+    if (Pstream::parRun())
+    {
+        bb = cvMesh_.decomposition().procBounds();
+    }
+    else
+    {
+        bb = cvMesh_.geometryToConformTo().globalBounds();
+    }
+
+    scalar x0 = bb.min().x();
+    scalar xR = bb.max().x() - x0;
+    label ni = label(xR/initialCellSize_);
+
+    scalar y0 = bb.min().y();
+    scalar yR = bb.max().y() - y0;
+    label nj = label(yR/initialCellSize_);
+
+    scalar z0 = bb.min().z();
+    scalar zR = bb.max().z() - z0;
+    label nk = label(zR/initialCellSize_);
+
+    vector delta(xR/ni, yR/nj, zR/nk);
+
+    delta *= pow((1.0/4.0),-(1.0/3.0));
+
+    Random& rndGen = cvMesh_.rndGen();
+
+    scalar pert = randomPerturbationCoeff_*cmptMin(delta);
+
+    DynamicList<Vb::Point> initialPoints(ni*nj*nk/10);
+
+    for (label i = 0; i < ni; i++)
+    {
+        for (label j = 0; j < nj; j++)
+        {
+            // Generating, testing and adding points one line at a time to
+            // reduce the memory requirement for cases with bounding boxes that
+            // are very large in comparison to the volume to be filled
+
+            label pI = 0;
+
+            pointField points(4*nk);
+
+            for (label k = 0; k < nk; k++)
+            {
+                point p
+                (
+                    x0 + i*delta.x(),
+                    y0 + j*delta.y(),
+                    z0 + k*delta.z()
+                );
+
+                if (randomiseInitialGrid_)
+                {
+                    p.x() += pert*(rndGen.scalar01() - 0.5);
+                    p.y() += pert*(rndGen.scalar01() - 0.5);
+                    p.z() += pert*(rndGen.scalar01() - 0.5);
+                }
+
+                if (Pstream::parRun())
+                {
+                    if (cvMesh_.decomposition().positionOnThisProcessor(p))
+                    {
+                        // Add this point in parallel only if this position is
+                        // on this processor.
+                        points[pI++] = p;
+                    }
+                }
+                else
+                {
+                    points[pI++] = p;
+                }
+
+                p = point
+                (
+                    x0 + i*delta.x(),
+                    y0 + (j + 0.5)*delta.y(),
+                    z0 + (k + 0.5)*delta.z()
+                );
+
+                if (randomiseInitialGrid_)
+                {
+                    p.x() += pert*(rndGen.scalar01() - 0.5);
+                    p.y() += pert*(rndGen.scalar01() - 0.5);
+                    p.z() += pert*(rndGen.scalar01() - 0.5);
+                }
+
+                if (Pstream::parRun())
+                {
+                    if (cvMesh_.decomposition().positionOnThisProcessor(p))
+                    {
+                        // Add this point in parallel only if this position is
+                        // on this processor.
+                        points[pI++] = p;
+                    }
+                }
+                else
+                {
+                    points[pI++] = p;
+                }
+
+                p = point
+                (
+                    x0 + (i + 0.5)*delta.x(),
+                    y0 + j*delta.y(),
+                    z0 + (k + 0.5)*delta.z()
+                );
+
+                if (randomiseInitialGrid_)
+                {
+                    p.x() += pert*(rndGen.scalar01() - 0.5);
+                    p.y() += pert*(rndGen.scalar01() - 0.5);
+                    p.z() += pert*(rndGen.scalar01() - 0.5);
+                }
+
+                if (Pstream::parRun())
+                {
+                    if (cvMesh_.decomposition().positionOnThisProcessor(p))
+                    {
+                        // Add this point in parallel only if this position is
+                        // on this processor.
+                        points[pI++] = p;
+                    }
+                }
+                else
+                {
+                    points[pI++] = p;
+                }
+
+                p = point
+                (
+                    x0 + (i + 0.5)*delta.x(),
+                    y0 + (j + 0.5)*delta.y(),
+                    z0 + k*delta.z()
+                );
+
+                if (randomiseInitialGrid_)
+                {
+                    p.x() += pert*(rndGen.scalar01() - 0.5);
+                    p.y() += pert*(rndGen.scalar01() - 0.5);
+                    p.z() += pert*(rndGen.scalar01() - 0.5);
+                }
+
+                if (Pstream::parRun())
+                {
+                    if (cvMesh_.decomposition().positionOnThisProcessor(p))
+                    {
+                        // Add this point in parallel only if this position is
+                        // on this processor.
+                        points[pI++] = p;
+                    }
+                }
+                else
+                {
+                    points[pI++] = p;
+                }
+            }
+
+            points.setSize(pI);
+
+            Field<bool> insidePoints = cvMesh_.geometryToConformTo().wellInside
+            (
+                points,
+                minimumSurfaceDistanceCoeffSqr_
+               *sqr
+                (
+                    cvMesh_.cellShapeControls().cellSize(points)
+                )
+            );
+
+            forAll(insidePoints, i)
+            {
+                if (insidePoints[i])
+                {
+                    const point& p(points[i]);
+
+                    initialPoints.append(Vb::Point(p.x(), p.y(), p.z()));
+                }
+            }
+        }
+    }
+
+    return initialPoints.shrink();
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/faceCentredCubic/faceCentredCubic.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/faceCentredCubic/faceCentredCubic.H
new file mode 100644
index 0000000000000000000000000000000000000000..3444b386c37fd6540a2083c93d25b7af26a3432f
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/faceCentredCubic/faceCentredCubic.H
@@ -0,0 +1,104 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::faceCentredCubic
+
+Description
+    Generate an FCC lattice of points inside the surfaces to be
+    conformed to of the conformalVoronoiMesh
+
+SourceFiles
+    faceCentredCubic.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef faceCentredCubic_H
+#define faceCentredCubic_H
+
+#include "initialPointsMethod.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                        Class faceCentredCubic Declaration
+\*---------------------------------------------------------------------------*/
+
+class faceCentredCubic
+:
+    public initialPointsMethod
+{
+
+private:
+
+    // Private data
+
+    //- The initial cell spacing
+    scalar initialCellSize_;
+
+    //- Should the initial positions be randomised
+    Switch randomiseInitialGrid_;
+
+    //- Randomise the initial positions by fraction of the initialCellSize_
+    scalar randomPerturbationCoeff_;
+
+
+public:
+
+    //- Runtime type information
+    TypeName("faceCentredCubic");
+
+    // Constructors
+
+        //- Construct from components
+        faceCentredCubic
+        (
+            const dictionary& initialPointsDict,
+            const conformalVoronoiMesh& cvMesh
+        );
+
+
+    //- Destructor
+    virtual ~faceCentredCubic()
+    {}
+
+
+    // Member Functions
+
+        //- Return the initial points for the conformalVoronoiMesh
+        virtual List<Vb::Point> initialPoints() const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/initialPointsMethod/initialPointsMethod.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/initialPointsMethod/initialPointsMethod.C
new file mode 100644
index 0000000000000000000000000000000000000000..bd0e6d732f535e76d8596ab4fd100cbac673a742
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/initialPointsMethod/initialPointsMethod.C
@@ -0,0 +1,112 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "initialPointsMethod.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+defineTypeNameAndDebug(initialPointsMethod, 0);
+defineRunTimeSelectionTable(initialPointsMethod, dictionary);
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+initialPointsMethod::initialPointsMethod
+(
+    const word& type,
+    const dictionary& initialPointsDict,
+    const conformalVoronoiMesh& cvMesh
+)
+:
+    dictionary(initialPointsDict),
+    cvMesh_(cvMesh),
+    detailsDict_(subDict(type + "Coeffs")),
+    minimumSurfaceDistanceCoeffSqr_
+    (
+        sqr
+        (
+            readScalar
+            (
+                initialPointsDict.lookup("minimumSurfaceDistanceCoeff")
+            )
+        )
+    )
+{}
+
+
+// * * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * //
+
+autoPtr<initialPointsMethod> initialPointsMethod::New
+(
+    const dictionary& initialPointsDict,
+    const conformalVoronoiMesh& cvMesh
+)
+{
+    word initialPointsMethodTypeName
+    (
+        initialPointsDict.lookup("initialPointsMethod")
+    );
+
+    Info<< nl << "Selecting initialPointsMethod "
+        << initialPointsMethodTypeName << endl;
+
+    dictionaryConstructorTable::iterator cstrIter =
+        dictionaryConstructorTablePtr_->find(initialPointsMethodTypeName);
+
+    if (cstrIter == dictionaryConstructorTablePtr_->end())
+    {
+        FatalErrorIn
+        (
+            "initialPointsMethod::New(dictionary&, "
+            "const conformalVoronoiMesh&)"
+        )   << "Unknown initialPointsMethod type "
+            << initialPointsMethodTypeName
+            << endl << endl
+            << "Valid initialPointsMethod types are :" << endl
+            << dictionaryConstructorTablePtr_->toc()
+            << exit(FatalError);
+    }
+
+    return autoPtr<initialPointsMethod>(cstrIter()(initialPointsDict, cvMesh));
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+initialPointsMethod::~initialPointsMethod()
+{}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/initialPointsMethod/initialPointsMethod.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/initialPointsMethod/initialPointsMethod.H
new file mode 100644
index 0000000000000000000000000000000000000000..8c8df91c92ebef5fadb10560459974d30de07ddf
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/initialPointsMethod/initialPointsMethod.H
@@ -0,0 +1,154 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::initialPointsMethod
+
+Description
+    Abstract base class for generating initial points for a conformalVoronoiMesh
+
+SourceFiles
+    initialPointsMethod.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef initialPointsMethod_H
+#define initialPointsMethod_H
+
+#include "point.H"
+#include "conformalVoronoiMesh.H"
+#include "backgroundMeshDecomposition.H"
+#include "dictionary.H"
+#include "Random.H"
+#include "Switch.H"
+#include "autoPtr.H"
+#include "runTimeSelectionTables.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                       Class initialPointsMethod Declaration
+\*---------------------------------------------------------------------------*/
+
+class initialPointsMethod
+:
+    public dictionary
+{
+
+protected:
+
+    // Protected data
+
+        //- Reference to the conformalVoronoiMesh holding this object
+        const conformalVoronoiMesh& cvMesh_;
+
+        //- Method details dictionary
+        dictionary detailsDict_;
+
+        //- Only allow the placement of initial points that are within the
+        //  surfaces to be meshed by minimumSurfaceDistanceCoeff multiplied by
+        //  the local target cell size.  Store square of value.
+        scalar minimumSurfaceDistanceCoeffSqr_;
+
+private:
+
+    // Private Member Functions
+
+        //- Disallow default bitwise copy construct
+        initialPointsMethod(const initialPointsMethod&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const initialPointsMethod&);
+
+
+public:
+
+    //- Runtime type information
+    TypeName("initialPointsMethod");
+
+
+    // Declare run-time constructor selection table
+
+        declareRunTimeSelectionTable
+        (
+            autoPtr,
+            initialPointsMethod,
+            dictionary,
+            (
+                const dictionary& initialPointsDict,
+                const conformalVoronoiMesh& cvMesh
+            ),
+            (initialPointsDict, cvMesh)
+        );
+
+
+    // Constructors
+
+        //- Construct from components
+        initialPointsMethod
+        (
+            const word& type,
+            const dictionary& initialPointsDict,
+            const conformalVoronoiMesh& cvMesh
+        );
+
+
+    // Selectors
+
+        //- Return a reference to the selected initialPointsMethod
+        static autoPtr<initialPointsMethod> New
+        (
+            const dictionary& initialPointsDict,
+            const conformalVoronoiMesh& cvMesh
+        );
+
+
+    //- Destructor
+    virtual ~initialPointsMethod();
+
+
+    // Member Functions
+
+        //- Const access to the details dictionary
+        const dictionary& detailsDict() const
+        {
+            return detailsDict_;
+        }
+
+        //- Return the initial points for the conformalVoronoiMesh
+        virtual List<Vb::Point> initialPoints() const = 0;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/pointFile/pointFile.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/pointFile/pointFile.C
new file mode 100644
index 0000000000000000000000000000000000000000..19861f3e817b26968eca7e463f5ab5e01dddfdda
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/pointFile/pointFile.C
@@ -0,0 +1,174 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "pointFile.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+defineTypeNameAndDebug(pointFile, 0);
+addToRunTimeSelectionTable(initialPointsMethod, pointFile, dictionary);
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+pointFile::pointFile
+(
+    const dictionary& initialPointsDict,
+    const conformalVoronoiMesh& cvMesh
+)
+:
+    initialPointsMethod(typeName, initialPointsDict, cvMesh),
+    pointFileName_(detailsDict().lookup("pointFile"))
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+List<Vb::Point> pointFile::initialPoints() const
+{
+    pointIOField points
+    (
+        IOobject
+        (
+            pointFileName_.name(),
+            cvMesh_.time().constant(),
+            cvMesh_.time(),
+            IOobject::MUST_READ,
+            IOobject::NO_WRITE
+        )
+    );
+
+    Info<< "    Inserting points from file " << pointFileName_ << endl;
+
+    if (points.empty())
+    {
+        FatalErrorIn("List<Vb::Point> pointFile::initialPoints() const")
+            << "Point file contain no points"
+            << exit(FatalError) << endl;
+    }
+
+    if (Pstream::parRun())
+    {
+        // Testing filePath to see if the file originated in a processor
+        // directory, if so, assume that the points in each processor file
+        // are unique.  They are unlikely to belong on the current
+        // processor as the background mesh is unlikely to be the same.
+
+        const bool isParentFile = (points.objectPath() != points.filePath());
+
+        if (!isParentFile)
+        {
+            cvMesh_.decomposition().distributePoints(points);
+        }
+        else
+        {
+            // Otherwise, this is assumed to be points covering the whole
+            // domain, so filter the points to be only those on this processor
+            boolList procPt(cvMesh_.positionOnThisProc(points));
+
+            List<boolList> allProcPt(Pstream::nProcs());
+
+            allProcPt[Pstream::myProcNo()] = procPt;
+
+            Pstream::gatherList(allProcPt);
+
+            Pstream::scatterList(allProcPt);
+
+            forAll(procPt, ptI)
+            {
+                bool foundAlready = false;
+
+                forAll(allProcPt, procI)
+                {
+                    // If a processor with a lower index has found this point
+                    // to insert already, defer to it and don't insert.
+                    if (foundAlready)
+                    {
+                        allProcPt[procI][ptI] = false;
+                    }
+                    else if (allProcPt[procI][ptI])
+                    {
+                        foundAlready = true;
+                    }
+                }
+            }
+
+            procPt = allProcPt[Pstream::myProcNo()];
+
+            inplaceSubset(procPt, points);
+        }
+    }
+
+    Field<bool> insidePoints = cvMesh_.geometryToConformTo().wellInside
+    (
+        points,
+        minimumSurfaceDistanceCoeffSqr_
+       *sqr
+        (
+            cvMesh_.cellShapeControls().cellSize(points)
+        )
+    );
+
+    DynamicList<Vb::Point> initialPoints(insidePoints.size()/10);
+
+    forAll(insidePoints, i)
+    {
+        if (insidePoints[i])
+        {
+            const point& p(points[i]);
+
+            initialPoints.append(Vb::Point(p.x(), p.y(), p.z()));
+        }
+    }
+
+    initialPoints.shrink();
+
+    label nPointsRejected = points.size() - initialPoints.size();
+
+    if (Pstream::parRun())
+    {
+        reduce(nPointsRejected, sumOp<label>());
+    }
+
+    if (nPointsRejected)
+    {
+        Info<< "    " << nPointsRejected << " points rejected from "
+            << pointFileName_.name() << endl;
+    }
+
+    return initialPoints;
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/pointFile/pointFile.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/pointFile/pointFile.H
new file mode 100644
index 0000000000000000000000000000000000000000..bcb898bac67e7ce41449791694f34b77b9206ae3
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/pointFile/pointFile.H
@@ -0,0 +1,100 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::pointFile
+
+Description
+    Inserts points at locations specified in a pointFile into the surfaces to
+    be conformed to of the conformalVoronoiMesh
+
+SourceFiles
+    pointFile.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef pointFile_H
+#define pointFile_H
+
+#include "fileName.H"
+#include "pointIOField.H"
+#include "initialPointsMethod.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                           Class pointFile Declaration
+\*---------------------------------------------------------------------------*/
+
+class pointFile
+:
+    public initialPointsMethod
+{
+
+private:
+
+    // Private data
+
+        //- The initial cell spacing
+        fileName pointFileName_;
+
+
+public:
+
+    //- Runtime type information
+    TypeName("pointFile");
+
+    // Constructors
+
+        //- Construct from components
+        pointFile
+        (
+            const dictionary& initialPointsDict,
+            const conformalVoronoiMesh& cvMesh
+        );
+
+
+    //- Destructor
+    virtual ~pointFile()
+    {}
+
+
+    // Member Functions
+
+        //- Return the initial points for the conformalVoronoiMesh
+        virtual List<Vb::Point> initialPoints() const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/uniformGrid/uniformGrid.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/uniformGrid/uniformGrid.C
new file mode 100644
index 0000000000000000000000000000000000000000..2538c90702d18efb3548ead731d88ab57bacf1ae
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/uniformGrid/uniformGrid.C
@@ -0,0 +1,171 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "uniformGrid.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+defineTypeNameAndDebug(uniformGrid, 0);
+addToRunTimeSelectionTable(initialPointsMethod, uniformGrid, dictionary);
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+uniformGrid::uniformGrid
+(
+    const dictionary& initialPointsDict,
+    const conformalVoronoiMesh& cvMesh
+)
+:
+    initialPointsMethod(typeName, initialPointsDict, cvMesh),
+    initialCellSize_(readScalar(detailsDict().lookup("initialCellSize"))),
+    randomiseInitialGrid_(detailsDict().lookup("randomiseInitialGrid")),
+    randomPerturbationCoeff_
+    (
+        readScalar(detailsDict().lookup("randomPerturbationCoeff"))
+    )
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+List<Vb::Point> uniformGrid::initialPoints() const
+{
+    boundBox bb;
+
+    // Pick up the bounds of this processor, or the whole geometry, depending
+    // on whether this is a parallel run.
+    if (Pstream::parRun())
+    {
+        bb = cvMesh_.decomposition().procBounds();
+    }
+    else
+    {
+        bb = cvMesh_.geometryToConformTo().globalBounds();
+    }
+
+    scalar x0 = bb.min().x();
+    scalar xR = bb.max().x() - x0;
+    label ni = label(xR/initialCellSize_);
+
+    scalar y0 = bb.min().y();
+    scalar yR = bb.max().y() - y0;
+    label nj = label(yR/initialCellSize_);
+
+    scalar z0 = bb.min().z();
+    scalar zR = bb.max().z() - z0;
+    label nk = label(zR/initialCellSize_);
+
+    vector delta(xR/ni, yR/nj, zR/nk);
+
+    delta *= pow((1.0),-(1.0/3.0));
+
+    Random& rndGen = cvMesh_.rndGen();
+
+    scalar pert = randomPerturbationCoeff_*cmptMin(delta);
+
+    // Initialise points list
+    DynamicList<Vb::Point> initialPoints(ni*nj*nk/10);
+
+    for (label i = 0; i < ni; i++)
+    {
+        for (label j = 0; j < nj; j++)
+        {
+            // Generating, testing and adding points one line at a time to
+            // reduce the memory requirement for cases with bounding boxes that
+            // are very large in comparison to the volume to be filled
+
+            label pI = 0;
+
+            pointField points(nk);
+
+            for (label k = 0; k < nk; k++)
+            {
+                point p
+                (
+                    x0 + (i + 0.5)*delta.x(),
+                    y0 + (j + 0.5)*delta.y(),
+                    z0 + (k + 0.5)*delta.z()
+                );
+
+                if (randomiseInitialGrid_)
+                {
+                    p.x() += pert*(rndGen.scalar01() - 0.5);
+                    p.y() += pert*(rndGen.scalar01() - 0.5);
+                    p.z() += pert*(rndGen.scalar01() - 0.5);
+                }
+
+                if
+                (
+                    Pstream::parRun()
+                 && !cvMesh_.decomposition().positionOnThisProcessor(p)
+                )
+                {
+                    // Skip this point if, in parallel, this position is not on
+                    // this processor.
+                    continue;
+                }
+
+                points[pI++] = p;
+            }
+
+            points.setSize(pI);
+
+            Field<bool> insidePoints = cvMesh_.geometryToConformTo().wellInside
+            (
+                points,
+                minimumSurfaceDistanceCoeffSqr_
+               *sqr
+                (
+                    cvMesh_.cellShapeControls().cellSize(points)
+                )
+            );
+
+            forAll(insidePoints, i)
+            {
+                if (insidePoints[i])
+                {
+                    const point& p(points[i]);
+
+                    initialPoints.append(Vb::Point(p.x(), p.y(), p.z()));
+                }
+            }
+        }
+    }
+
+    return initialPoints.shrink();
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/uniformGrid/uniformGrid.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/uniformGrid/uniformGrid.H
new file mode 100644
index 0000000000000000000000000000000000000000..913d2a5a986043f09ba71b99a527114d6fe89681
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/initialPointsMethod/uniformGrid/uniformGrid.H
@@ -0,0 +1,104 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::uniformGrid
+
+Description
+    Generate a uniform grid of points inside the surfaces to be
+    conformed to of the conformalVoronoiMesh
+
+SourceFiles
+    uniformGrid.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef uniformGrid_H
+#define uniformGrid_H
+
+#include "initialPointsMethod.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                           Class uniformGrid Declaration
+\*---------------------------------------------------------------------------*/
+
+class uniformGrid
+:
+    public initialPointsMethod
+{
+
+private:
+
+    // Private data
+
+    //- The initial cell spacing
+    scalar initialCellSize_;
+
+    //- Should the initial positions be randomised
+    Switch randomiseInitialGrid_;
+
+    //- Randomise the initial positions by fraction of the initialCellSize_
+    scalar randomPerturbationCoeff_;
+
+
+public:
+
+    //- Runtime type information
+    TypeName("uniformGrid");
+
+    // Constructors
+
+        //- Construct from components
+        uniformGrid
+        (
+            const dictionary& initialPointsDict,
+            const conformalVoronoiMesh& cvMesh
+        );
+
+
+    //- Destructor
+    virtual ~uniformGrid()
+    {}
+
+
+    // Member Functions
+
+        //- Return the initial points for the conformalVoronoiMesh
+        virtual List<Vb::Point> initialPoints() const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/relaxationModel/adaptiveLinear/adaptiveLinear.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/relaxationModel/adaptiveLinear/adaptiveLinear.C
new file mode 100644
index 0000000000000000000000000000000000000000..3e33715cb5af7b71c12c4de7931df3691f722595
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/relaxationModel/adaptiveLinear/adaptiveLinear.C
@@ -0,0 +1,87 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "adaptiveLinear.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+defineTypeNameAndDebug(adaptiveLinear, 0);
+addToRunTimeSelectionTable(relaxationModel, adaptiveLinear, dictionary);
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+adaptiveLinear::adaptiveLinear
+(
+    const dictionary& relaxationDict,
+    const Time& runTime
+)
+:
+    relaxationModel(typeName, relaxationDict, runTime),
+    relaxationStart_(readScalar(coeffDict().lookup("relaxationStart"))),
+    relaxationEnd_(readScalar(coeffDict().lookup("relaxationEnd"))),
+    lastTimeValue_(runTime_.time().timeOutputValue()),
+    relaxation_(relaxationStart_)
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+scalar adaptiveLinear::relaxation()
+{
+    if (runTime_.time().timeOutputValue() > lastTimeValue_)
+    {
+        scalar currentRelaxation = relaxation_;
+
+        relaxation_ -=
+            (relaxation_ - relaxationEnd_)
+           /(
+                (
+                    runTime_.time().endTime().value()
+                  - runTime_.time().timeOutputValue()
+                )
+               /(runTime_.time().timeOutputValue() - lastTimeValue_)
+              + 1
+            );
+
+        lastTimeValue_ = runTime_.time().timeOutputValue();
+
+        return currentRelaxation;
+    }
+
+    return relaxation_;
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/relaxationModel/adaptiveLinear/adaptiveLinear.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/relaxationModel/adaptiveLinear/adaptiveLinear.H
new file mode 100644
index 0000000000000000000000000000000000000000..02aa61256a5823f13e12c03f474102d60d41cf0c
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/relaxationModel/adaptiveLinear/adaptiveLinear.H
@@ -0,0 +1,110 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::adaptiveLinear
+
+Description
+    Produces a linear ramp which adapts its gradient to changes in
+    endTime and deltaT to always arrive at the relaxationEnd value at the end of
+    the run
+
+SourceFiles
+    adaptiveLinear.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef adaptiveLinear_H
+#define adaptiveLinear_H
+
+#include "relaxationModel.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                           Class adaptiveLinear Declaration
+\*---------------------------------------------------------------------------*/
+
+class adaptiveLinear
+:
+    public relaxationModel
+{
+
+private:
+
+    // Private data
+
+        //- Relaxation coefficient at the start of the iteration sequence.
+        scalar relaxationStart_;
+
+        //- Relaxation coefficient at the end of the iteration sequence.
+        scalar relaxationEnd_;
+
+        //- Store the time when the last request was made for relaxation,
+        //  prevents multiple calls to relaxation in a timestep from
+        //  incrementing the value
+        scalar lastTimeValue_;
+
+        //- Current relaxation value
+        scalar relaxation_;
+
+
+public:
+
+    //- Runtime type information
+    TypeName("adaptiveLinear");
+
+    // Constructors
+
+        //- Construct from components
+        adaptiveLinear
+        (
+            const dictionary& relaxationDict,
+            const Time& runTime
+        );
+
+
+    //- Destructor
+    virtual ~adaptiveLinear()
+    {}
+
+
+    // Member Functions
+
+        //- Return the current relaxation coefficient
+        virtual scalar relaxation();
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/relaxationModel/rampHoldFall/rampHoldFall.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/relaxationModel/rampHoldFall/rampHoldFall.C
new file mode 100644
index 0000000000000000000000000000000000000000..be9b2537b3931f92eb039d34bf86218396f24bc3
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/relaxationModel/rampHoldFall/rampHoldFall.C
@@ -0,0 +1,103 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "rampHoldFall.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+defineTypeNameAndDebug(rampHoldFall, 0);
+addToRunTimeSelectionTable(relaxationModel, rampHoldFall, dictionary);
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+rampHoldFall::rampHoldFall
+(
+    const dictionary& relaxationDict,
+    const Time& runTime
+)
+:
+    relaxationModel(typeName, relaxationDict, runTime),
+    rampStartRelaxation_(readScalar(coeffDict().lookup("rampStartRelaxation"))),
+    holdRelaxation_(readScalar(coeffDict().lookup("holdRelaxation"))),
+    fallEndRelaxation_(readScalar(coeffDict().lookup("fallEndRelaxation"))),
+    rampEndFraction_(readScalar(coeffDict().lookup("rampEndFraction"))),
+    fallStartFraction_(readScalar(coeffDict().lookup("fallStartFraction"))),
+    rampGradient_((holdRelaxation_ - rampStartRelaxation_)/(rampEndFraction_)),
+    fallGradient_
+    (
+        (fallEndRelaxation_ - holdRelaxation_)/(1 - fallStartFraction_)
+    )
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+scalar rampHoldFall::relaxation()
+{
+    scalar t = runTime_.time().timeOutputValue();
+
+    scalar tStart = runTime_.time().startTime().value();
+    scalar tEnd = runTime_.time().endTime().value();
+    scalar tSpan = tEnd - tStart;
+
+    if (tSpan < VSMALL)
+    {
+        return rampStartRelaxation_;
+    }
+
+    if (t - tStart < rampEndFraction_*tSpan)
+    {
+        // Ramp
+
+        return rampGradient_*((t - tStart)/tSpan) + rampStartRelaxation_;
+    }
+    else if (t - tStart > fallStartFraction_*tSpan)
+    {
+        // Fall
+
+        return
+            fallGradient_*((t - tStart)/tSpan)
+          + fallEndRelaxation_ - fallGradient_;
+    }
+    else
+    {
+        //Hold
+
+        return holdRelaxation_;
+    }
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/relaxationModel/rampHoldFall/rampHoldFall.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/relaxationModel/rampHoldFall/rampHoldFall.H
new file mode 100644
index 0000000000000000000000000000000000000000..3c156c197119228cd2b028372fb3efe51ea69998
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/relaxationModel/rampHoldFall/rampHoldFall.H
@@ -0,0 +1,115 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::rampHoldFall
+
+Description
+    Piecewise linear function with a ramp from a start value to a plateaux
+    value, holding at this, then a linear fall to an end value.
+
+SourceFiles
+    rampHoldFall.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef rampHoldFall_H
+#define rampHoldFall_H
+
+#include "relaxationModel.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                           Class rampHoldFall Declaration
+\*---------------------------------------------------------------------------*/
+
+class rampHoldFall
+:
+    public relaxationModel
+{
+
+private:
+
+    // Private data
+
+        //- Relaxation coefficient at the start of the ramp
+        scalar rampStartRelaxation_;
+
+        //- Relaxation coefficient for the hold portion
+        scalar holdRelaxation_;
+
+        //- Relaxation coefficient at the end of the fall
+        scalar fallEndRelaxation_;
+
+        //- Fraction through the run where the ramp ends and the hold starts
+        scalar rampEndFraction_;
+
+        //- Fraction through the run where the hold ends and the fall starts
+        scalar fallStartFraction_;
+
+        //- Gradient in ramp portion, normalised against time
+        scalar rampGradient_;
+
+        //- Gradient in fall portion, normalised against time
+        scalar fallGradient_;
+
+public:
+
+    //- Runtime type information
+    TypeName("rampHoldFall");
+
+    // Constructors
+
+        //- Construct from components
+        rampHoldFall
+        (
+            const dictionary& relaxationDict,
+            const Time& runTime
+        );
+
+
+    //- Destructor
+    virtual ~rampHoldFall()
+    {}
+
+
+    // Member Functions
+
+        //- Return the current relaxation coefficient
+        virtual scalar relaxation();
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/relaxationModel/relaxationModel/relaxationModel.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/relaxationModel/relaxationModel/relaxationModel.C
new file mode 100644
index 0000000000000000000000000000000000000000..76493390554c71640e85b5e4b4f8701a759bae49
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/relaxationModel/relaxationModel/relaxationModel.C
@@ -0,0 +1,102 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "relaxationModel.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+defineTypeNameAndDebug(relaxationModel, 0);
+defineRunTimeSelectionTable(relaxationModel, dictionary);
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+relaxationModel::relaxationModel
+(
+    const word& type,
+    const dictionary& relaxationDict,
+    const Time& runTime
+)
+:
+    dictionary(relaxationDict),
+    runTime_(runTime),
+    coeffDict_(subDict(type + "Coeffs"))
+{}
+
+
+// * * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * //
+
+autoPtr<relaxationModel> relaxationModel::New
+(
+    const dictionary& relaxationDict,
+    const Time& runTime
+)
+{
+    word relaxationModelTypeName
+    (
+        relaxationDict.lookup("relaxationModel")
+    );
+
+    Info<< nl << "Selecting relaxationModel "
+        << relaxationModelTypeName << endl;
+
+    dictionaryConstructorTable::iterator cstrIter =
+        dictionaryConstructorTablePtr_->find(relaxationModelTypeName);
+
+    if (cstrIter == dictionaryConstructorTablePtr_->end())
+    {
+        FatalErrorIn
+        (
+            "relaxationModel::New(const dictionary&, "
+            "const conformalVoronoiMesh&)"
+        )   << "Unknown relaxationModel type "
+            << relaxationModelTypeName
+            << endl << endl
+            << "Valid relaxationModel types are :" << endl
+            << dictionaryConstructorTablePtr_->toc()
+            << exit(FatalError);
+    }
+
+    return autoPtr<relaxationModel>(cstrIter()(relaxationDict, runTime));
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+relaxationModel::~relaxationModel()
+{}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/relaxationModel/relaxationModel/relaxationModel.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/relaxationModel/relaxationModel/relaxationModel.H
new file mode 100644
index 0000000000000000000000000000000000000000..433a5d38e1f6fb1070159631a1719b0210f33046
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/relaxationModel/relaxationModel/relaxationModel.H
@@ -0,0 +1,147 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::relaxationModel
+
+Description
+    Abstract base class for providing relaxation values to the cell motion
+    controller
+
+SourceFiles
+    relaxationModel.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef relaxationModel_H
+#define relaxationModel_H
+
+#include "point.H"
+#include "Time.H"
+#include "dictionary.H"
+#include "autoPtr.H"
+#include "runTimeSelectionTables.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                       Class relaxationModel Declaration
+\*---------------------------------------------------------------------------*/
+
+class relaxationModel
+:
+    public dictionary
+{
+
+protected:
+
+    // Protected data
+
+        //- Reference to the conformalVoronoiMesh holding this cvControls object
+        const Time& runTime_;
+
+        //- Method coeffs dictionary
+        dictionary coeffDict_;
+
+private:
+
+    // Private Member Functions
+
+        //- Disallow default bitwise copy construct
+        relaxationModel(const relaxationModel&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const relaxationModel&);
+
+
+public:
+
+    //- Runtime type information
+    TypeName("relaxationModel");
+
+
+    // Declare run-time constructor selection table
+
+        declareRunTimeSelectionTable
+        (
+            autoPtr,
+            relaxationModel,
+            dictionary,
+            (
+                const dictionary& relaxationDict,
+                const Time& runTime
+            ),
+            (relaxationDict, runTime)
+        );
+
+
+    // Constructors
+
+        //- Construct from components
+        relaxationModel
+        (
+            const word& type,
+            const dictionary& relaxationDict,
+            const Time& runTime
+        );
+
+
+    // Selectors
+
+        //- Return a reference to the selected relaxationModel
+        static autoPtr<relaxationModel> New
+        (
+            const dictionary& relaxationDict,
+            const Time& runTime
+        );
+
+
+    //- Destructor
+    virtual ~relaxationModel();
+
+
+    // Member Functions
+
+        //- Const access to the coeffs dictionary
+        const dictionary& coeffDict() const
+        {
+            return coeffDict_;
+        }
+
+        //- Return the current relaxation coefficient
+        virtual scalar relaxation() = 0;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/cvMesh.C b/applications/utilities/mesh/generation/cvMesh/cvMesh.C
new file mode 100644
index 0000000000000000000000000000000000000000..e9487b909b8bafca164f8aa01d8ee6f299bd26dd
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/cvMesh.C
@@ -0,0 +1,124 @@
+/*---------------------------------------------------------------------------*\
+ =========                   |
+ \\      /   F ield          | OpenFOAM: The Open Source CFD Toolbox
+  \\    /    O peration      |
+   \\  /     A nd            | Copyright (C) 2011-2012 OpenFOAM Foundation
+    \\/      M anipulation   |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Application
+    cvMesh
+
+Description
+    Conformal Voronoi automatic mesh generator
+
+\*---------------------------------------------------------------------------*/
+
+#include "argList.H"
+#include "conformalVoronoiMesh.H"
+#include "vtkSetWriter.H"
+
+using namespace Foam;
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+int main(int argc, char *argv[])
+{
+    Foam::argList::addBoolOption
+    (
+        "checkGeometry",
+        "check all surface geometry for quality"
+    );
+
+    #include "setRootCase.H"
+    #include "createTime.H"
+
+    runTime.functionObjects().off();
+
+    const bool checkGeometry = args.optionFound("checkGeometry");
+
+    IOdictionary cvMeshDict
+    (
+        IOobject
+        (
+            "cvMeshDict",
+            runTime.system(),
+            runTime,
+            IOobject::MUST_READ_IF_MODIFIED,
+            IOobject::NO_WRITE
+        )
+    );
+
+
+    if (checkGeometry)
+    {
+        const searchableSurfaces allGeometry
+        (
+            IOobject
+            (
+                "cvSearchableSurfaces",
+                runTime.constant(),
+                "triSurface",
+                runTime,
+                IOobject::MUST_READ,
+                IOobject::NO_WRITE
+            ),
+            cvMeshDict.subDict("geometry")
+        );
+
+        // Write some stats
+        allGeometry.writeStats(List<wordList>(0), Info);
+        // Check topology
+        allGeometry.checkTopology(true);
+        // Check geometry
+        allGeometry.checkGeometry
+        (
+            100.0,      // max size ratio
+            1e-9,       // intersection tolerance
+            autoPtr<writer<scalar> >(new vtkSetWriter<scalar>()),
+            0.01,       // min triangle quality
+            true
+        );
+
+        return 0;
+    }
+
+
+    conformalVoronoiMesh::debug = true;
+
+    conformalVoronoiMesh mesh(runTime, cvMeshDict);
+
+
+    while (runTime.loop())
+    {
+        Info<< nl << "Time = " << runTime.timeName() << endl;
+
+        mesh.move();
+
+        Info<< nl << "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
+            << "  ClockTime = " << runTime.elapsedClockTime() << " s"
+            << endl;
+    }
+
+    Info<< nl << "End" << nl << endl;
+
+    return 0;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/cvMeshBackgroundMesh/Make/files b/applications/utilities/mesh/generation/cvMesh/cvMeshBackgroundMesh/Make/files
new file mode 100644
index 0000000000000000000000000000000000000000..58406b931afc7b1b1b72a8c3eb68587d2c2d210d
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/cvMeshBackgroundMesh/Make/files
@@ -0,0 +1,3 @@
+cvMeshBackgroundMesh.C
+
+EXE = $(FOAM_APPBIN)/cvMeshBackgroundMesh
diff --git a/applications/utilities/mesh/generation/cvMesh/cvMeshBackgroundMesh/Make/options b/applications/utilities/mesh/generation/cvMesh/cvMeshBackgroundMesh/Make/options
new file mode 100644
index 0000000000000000000000000000000000000000..0322435c8c9c6d6512c5e3ec2e0a91e08199d84f
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/cvMeshBackgroundMesh/Make/options
@@ -0,0 +1,33 @@
+EXE_DEBUG = -DFULLDEBUG -g -O0
+EXE_FROUNDING_MATH = -frounding-math
+EXE_NDEBUG = -DNDEBUG
+
+include $(GENERAL_RULES)/CGAL
+
+EXE_INC = \
+    ${EXE_FROUNDING_MATH} \
+    ${EXE_NDEBUG} \
+    ${CGAL_INC} \
+    -I../conformalVoronoiMesh/lnInclude \
+    -I$(LIB_SRC)/parallel/decompose/decompositionMethods/lnInclude \
+    -I$(LIB_SRC)/edgeMesh/lnInclude \
+    -I$(LIB_SRC)/triSurface/lnInclude \
+    -I$(LIB_SRC)/finiteVolume/lnInclude \
+    -I$(LIB_SRC)/meshTools/lnInclude \
+    -I$(LIB_SRC)/dynamicMesh/lnInclude \
+    -I../vectorTools
+
+EXE_LIBS = \
+    $(CGAL_LIBS) \
+    -lboost_thread \
+    -lmpfr \
+    -lgmp \
+    -lconformalVoronoiMesh \
+    -ldecompositionMethods /* -L$(FOAM_LIBBIN)/dummy -lscotchDecomp */ \
+    -ledgeMesh \
+    -ltriSurface \
+    -lmeshTools \
+    -lfileFormats \
+    -lsampling \
+    -ldynamicMesh \
+    -lfiniteVolume
diff --git a/applications/utilities/mesh/generation/cvMesh/cvMeshBackgroundMesh/cvMeshBackgroundMesh.C b/applications/utilities/mesh/generation/cvMesh/cvMeshBackgroundMesh/cvMeshBackgroundMesh.C
new file mode 100644
index 0000000000000000000000000000000000000000..53766c59a02c2209f86ae725362b7a24eb8edeb5
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/cvMeshBackgroundMesh/cvMeshBackgroundMesh.C
@@ -0,0 +1,775 @@
+/*---------------------------------------------------------------------------*\
+ =========                   |
+ \\      /   F ield          | OpenFOAM: The Open Source CFD Toolbox
+  \\    /    O peration      |
+   \\  /     A nd            | Copyright (C) 2012 OpenFOAM Foundation
+    \\/      M anipulation   |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Application
+    cvMeshBackGroundMesh
+
+Description
+    Writes out background mesh as constructed by cvMesh and constructs
+    distanceSurface.
+
+\*---------------------------------------------------------------------------*/
+
+#include "PatchTools.H"
+#include "argList.H"
+#include "Time.H"
+#include "triSurface.H"
+#include "searchableSurfaces.H"
+#include "conformationSurfaces.H"
+#include "cellShapeControl.H"
+#include "backgroundMeshDecomposition.H"
+#include "cellShape.H"
+#include "cellModeller.H"
+#include "DynamicField.H"
+#include "isoSurfaceCell.H"
+#include "vtkSurfaceWriter.H"
+#include "syncTools.H"
+
+using namespace Foam;
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+// Tolerance (as fraction of the bounding box). Needs to be fairly lax since
+// usually meshes get written with limited precision (6 digits)
+static const scalar defaultMergeTol = 1e-6;
+
+// Get merging distance when matching face centres
+scalar getMergeDistance
+(
+    const argList& args,
+    const Time& runTime,
+    const boundBox& bb
+)
+{
+    scalar mergeTol = defaultMergeTol;
+    args.optionReadIfPresent("mergeTol", mergeTol);
+
+    scalar writeTol =
+        Foam::pow(scalar(10.0), -scalar(IOstream::defaultPrecision()));
+
+    Info<< "Merge tolerance : " << mergeTol << nl
+        << "Write tolerance : " << writeTol << endl;
+
+    if (runTime.writeFormat() == IOstream::ASCII && mergeTol < writeTol)
+    {
+        FatalErrorIn("getMergeDistance")
+            << "Your current settings specify ASCII writing with "
+            << IOstream::defaultPrecision() << " digits precision." << endl
+            << "Your merging tolerance (" << mergeTol << ") is finer than this."
+            << endl
+            << "Please change your writeFormat to binary"
+            << " or increase the writePrecision" << endl
+            << "or adjust the merge tolerance (-mergeTol)."
+            << exit(FatalError);
+    }
+
+    scalar mergeDist = mergeTol * bb.mag();
+
+    Info<< "Overall meshes bounding box : " << bb << nl
+        << "Relative tolerance          : " << mergeTol << nl
+        << "Absolute matching distance  : " << mergeDist << nl
+        << endl;
+
+    return mergeDist;
+}
+
+
+void printMeshData(const polyMesh& mesh)
+{
+    // Collect all data on master
+
+    globalIndex globalCells(mesh.nCells());
+    labelListList patchNeiProcNo(Pstream::nProcs());
+    labelListList patchSize(Pstream::nProcs());
+    const labelList& pPatches = mesh.globalData().processorPatches();
+    patchNeiProcNo[Pstream::myProcNo()].setSize(pPatches.size());
+    patchSize[Pstream::myProcNo()].setSize(pPatches.size());
+    forAll(pPatches, i)
+    {
+        const processorPolyPatch& ppp = refCast<const processorPolyPatch>
+        (
+            mesh.boundaryMesh()[pPatches[i]]
+        );
+        patchNeiProcNo[Pstream::myProcNo()][i] = ppp.neighbProcNo();
+        patchSize[Pstream::myProcNo()][i] = ppp.size();
+    }
+    Pstream::gatherList(patchNeiProcNo);
+    Pstream::gatherList(patchSize);
+
+
+    // Print stats
+
+    globalIndex globalBoundaryFaces(mesh.nFaces()-mesh.nInternalFaces());
+
+    label maxProcCells = 0;
+    label totProcFaces = 0;
+    label maxProcPatches = 0;
+    label totProcPatches = 0;
+    label maxProcFaces = 0;
+
+    for (label procI = 0; procI < Pstream::nProcs(); procI++)
+    {
+        Info<< endl
+            << "Processor " << procI << nl
+            << "    Number of cells = " << globalCells.localSize(procI)
+            << endl;
+
+        label nProcFaces = 0;
+
+        const labelList& nei = patchNeiProcNo[procI];
+
+        forAll(patchNeiProcNo[procI], i)
+        {
+            Info<< "    Number of faces shared with processor "
+                << patchNeiProcNo[procI][i] << " = " << patchSize[procI][i]
+                << endl;
+
+            nProcFaces += patchSize[procI][i];
+        }
+
+        Info<< "    Number of processor patches = " << nei.size() << nl
+            << "    Number of processor faces = " << nProcFaces << nl
+            << "    Number of boundary faces = "
+            << globalBoundaryFaces.localSize(procI) << endl;
+
+        maxProcCells = max(maxProcCells, globalCells.localSize(procI));
+        totProcFaces += nProcFaces;
+        totProcPatches += nei.size();
+        maxProcPatches = max(maxProcPatches, nei.size());
+        maxProcFaces = max(maxProcFaces, nProcFaces);
+    }
+
+    // Stats
+
+    scalar avgProcCells = scalar(globalCells.size())/Pstream::nProcs();
+    scalar avgProcPatches = scalar(totProcPatches)/Pstream::nProcs();
+    scalar avgProcFaces = scalar(totProcFaces)/Pstream::nProcs();
+
+    // In case of all faces on one processor. Just to avoid division by 0.
+    if (totProcPatches == 0)
+    {
+        avgProcPatches = 1;
+    }
+    if (totProcFaces == 0)
+    {
+        avgProcFaces = 1;
+    }
+
+    Info<< nl
+        << "Number of processor faces = " << totProcFaces/2 << nl
+        << "Max number of cells = " << maxProcCells
+        << " (" << 100.0*(maxProcCells-avgProcCells)/avgProcCells
+        << "% above average " << avgProcCells << ")" << nl
+        << "Max number of processor patches = " << maxProcPatches
+        << " (" << 100.0*(maxProcPatches-avgProcPatches)/avgProcPatches
+        << "% above average " << avgProcPatches << ")" << nl
+        << "Max number of faces between processors = " << maxProcFaces
+        << " (" << 100.0*(maxProcFaces-avgProcFaces)/avgProcFaces
+        << "% above average " << avgProcFaces << ")" << nl
+        << endl;
+}
+
+
+// Return cellID
+label cellLabel
+(
+    const Vector<label>& nCells,
+    const label i,
+    const label j,
+    const label k
+)
+{
+    return i*nCells[1]*nCells[2]+j*nCells[2]+k;
+}
+
+label vtxLabel
+(
+    const Vector<label>& nCells,
+    const label i,
+    const label j,
+    const label k
+)
+{
+    Vector<label> nPoints
+    (
+        nCells[0]+1,
+        nCells[1]+1,
+        nCells[2]+1
+    );
+    return i*nPoints[1]*nPoints[2]+j*nPoints[2]+k;
+}
+
+
+autoPtr<polyMesh> generateHexMesh
+(
+    const IOobject& io,
+    const point& origin,
+    const vector& cellSize,
+    const Vector<label>& nCells
+)
+{
+    pointField points;
+    if (nCells[0]+nCells[1]+nCells[2] > 0)
+    {
+        points.setSize((nCells[0]+1)*(nCells[1]+1)*(nCells[2]+1));
+
+        // Generate points
+        for (label i = 0; i <= nCells[0]; i++)
+        {
+            for (label j = 0; j <= nCells[1]; j++)
+            {
+                for (label k = 0; k <= nCells[2]; k++)
+                {
+                    point pt = origin;
+                    pt.x() += i*cellSize[0];
+                    pt.y() += j*cellSize[1];
+                    pt.z() += k*cellSize[2];
+                    points[vtxLabel(nCells, i, j, k)] = pt;
+                }
+            }
+        }
+    }
+
+
+    const cellModel& hex = *(cellModeller::lookup("hex"));
+    cellShapeList cellShapes(nCells[0]*nCells[1]*nCells[2]);
+
+    labelList hexPoints(8);
+    label cellI = 0;
+    for (label i = 0; i < nCells[0]; i++)
+    {
+        for (label j = 0; j < nCells[1]; j++)
+        {
+            for (label k = 0; k < nCells[2]; k++)
+            {
+                hexPoints[0] = vtxLabel(nCells, i,   j,   k);
+                hexPoints[1] = vtxLabel(nCells, i+1, j,   k);
+                hexPoints[2] = vtxLabel(nCells, i+1, j+1, k);
+                hexPoints[3] = vtxLabel(nCells, i,   j+1, k);
+                hexPoints[4] = vtxLabel(nCells, i,   j,   k+1);
+                hexPoints[5] = vtxLabel(nCells, i+1, j,   k+1);
+                hexPoints[6] = vtxLabel(nCells, i+1, j+1, k+1);
+                hexPoints[7] = vtxLabel(nCells, i,   j+1, k+1);
+                cellShapes[cellI++] = cellShape(hex, hexPoints);
+            }
+        }
+    }
+
+    faceListList boundary(0);
+    wordList patchNames(0);
+    wordList patchTypes(0);
+    word defaultFacesName = "defaultFaces";
+    word defaultFacesType = polyPatch::typeName;
+    wordList patchPhysicalTypes(0);
+
+    return autoPtr<polyMesh>
+    (
+        new polyMesh
+        (
+            io,
+            xferMoveTo<pointField>(points),
+            cellShapes,
+            boundary,
+            patchNames,
+            patchTypes,
+            defaultFacesName,
+            defaultFacesType,
+            patchPhysicalTypes
+        )
+    );
+}
+
+
+// Determine for every point a signed distance to the nearest surface
+// (outside is positive)
+tmp<scalarField> signedDistance
+(
+    const scalarField& distSqr,
+    const pointField& points,
+    const searchableSurfaces& geometry,
+    const labelList& surfaces
+)
+{
+    tmp<scalarField> tfld(new scalarField(points.size(), Foam::sqr(GREAT)));
+    scalarField& fld = tfld();
+
+    // Find nearest
+    List<pointIndexHit> nearest;
+    labelList nearestSurfaces;
+    searchableSurfacesQueries::findNearest
+    (
+        geometry,
+        surfaces,
+        points,
+        scalarField(points.size(), Foam::sqr(GREAT)),//distSqr
+        nearestSurfaces,
+        nearest
+    );
+
+    // Determine sign of nearest. Sort by surface to do this.
+    DynamicField<point> surfPoints(points.size());
+    DynamicList<label> surfIndices(points.size());
+
+    forAll(surfaces, surfI)
+    {
+        // Extract points on this surface
+        surfPoints.clear();
+        surfIndices.clear();
+        forAll(nearestSurfaces, i)
+        {
+            if (nearestSurfaces[i] == surfI)
+            {
+                surfPoints.append(points[i]);
+                surfIndices.append(i);
+            }
+        }
+
+        // Calculate sideness of these surface points
+        label geomI = surfaces[surfI];
+        List<searchableSurface::volumeType> volType;
+        geometry[geomI].getVolumeType(surfPoints, volType);
+
+        // Push back to original
+        forAll(volType, i)
+        {
+            label pointI = surfIndices[i];
+            scalar dist = mag(points[pointI] - nearest[pointI].hitPoint());
+
+            searchableSurface::volumeType vT = volType[i];
+
+            if (vT == searchableSurface::OUTSIDE)
+            {
+                fld[pointI] = dist;
+            }
+            else if (vT == searchableSurface::INSIDE)
+            {
+                fld[i] = -dist;
+            }
+            else
+            {
+                FatalErrorIn("signedDistance()")
+                    << "getVolumeType failure, neither INSIDE or OUTSIDE"
+                    << exit(FatalError);
+            }
+        }
+    }
+
+    return tfld;
+}
+
+
+
+// Main program:
+
+int main(int argc, char *argv[])
+{
+    argList::addNote
+    (
+        "Generate cvMesh-consistent representation of surfaces"
+    );
+    argList::addBoolOption
+    (
+        "writeMesh",
+        "write the resulting mesh and distance fields"
+    );
+    argList::addOption
+    (
+        "mergeTol",
+        "scalar",
+        "specify the merge distance relative to the bounding box size "
+        "(default 1e-6)"
+    );
+
+    #include "setRootCase.H"
+    #include "createTime.H"
+    runTime.functionObjects().off();
+
+    const bool writeMesh = args.optionFound("writeMesh");
+
+    if (writeMesh)
+    {
+        Info<< "Writing resulting mesh and cellDistance, pointDistance fields."
+            << nl << endl;
+    }
+
+
+    IOdictionary cvMeshDict
+    (
+        IOobject
+        (
+            "cvMeshDict",
+            runTime.system(),
+            runTime,
+            IOobject::MUST_READ_IF_MODIFIED,
+            IOobject::NO_WRITE
+        )
+    );
+
+    // Define/load all geometry
+    searchableSurfaces allGeometry
+    (
+        IOobject
+        (
+            "cvSearchableSurfaces",
+            runTime.constant(),
+            "triSurface",
+            runTime,
+            IOobject::MUST_READ,
+            IOobject::NO_WRITE
+        ),
+        cvMeshDict.subDict("geometry")
+    );
+
+    Random rndGen(64293*Pstream::myProcNo());
+
+    conformationSurfaces geometryToConformTo
+    (
+        runTime,
+        rndGen,
+        allGeometry,
+        cvMeshDict.subDict("surfaceConformation")
+    );
+
+    autoPtr<cellShapeControl> cellShapeControls
+    (
+        cellShapeControl::New
+        (
+            runTime,
+            cvMeshDict.subDict("motionControl"),
+            allGeometry,
+            geometryToConformTo
+        )
+    );
+
+
+    // Generate starting block mesh
+    vector cellSize;
+    {
+        const treeBoundBox& bb = geometryToConformTo.globalBounds();
+
+        // Determine the number of cells in each direction.
+        const vector span = bb.span();
+        vector nScalarCells = span/cellShapeControls().defaultCellSize();
+
+        // Calculate initial cell size to be a little bit smaller than the
+        // defaultCellSize to avoid initial refinement triggering.
+        Vector<label> nCells = Vector<label>
+        (
+            label(nScalarCells.x())+2,
+            label(nScalarCells.y())+2,
+            label(nScalarCells.z())+2
+        );
+        cellSize = vector
+        (
+            span[0]/nCells[0],
+            span[1]/nCells[1],
+            span[2]/nCells[2]
+        );
+
+        Info<< "Generating initial hex mesh with" << nl
+            << "    bounding box : " << bb << nl
+            << "    nCells       : " << nCells << nl
+            << "    cellSize     : " << cellSize << nl
+            << endl;
+
+        autoPtr<polyMesh> meshPtr
+        (
+            generateHexMesh
+            (
+                IOobject
+                (
+                    polyMesh::defaultRegion,
+                    runTime.constant(),
+                    runTime
+                ),
+                bb.min(),
+                cellSize,
+                (
+                    Pstream::master()
+                  ? nCells
+                  : Vector<label>(0, 0, 0)
+                )
+            )
+        );
+        Info<< "Writing initial hex mesh to " << meshPtr().instance() << nl
+            << endl;
+        meshPtr().write();
+    }
+
+    // Distribute the initial mesh
+    if (Pstream::parRun())
+    {
+#       include "createMesh.H"
+        Info<< "Loaded mesh:" << endl;
+        printMeshData(mesh);
+
+        // Allocate a decomposer
+        IOdictionary decompositionDict
+        (
+            IOobject
+            (
+                "decomposeParDict",
+                runTime.system(),
+                mesh,
+                IOobject::MUST_READ_IF_MODIFIED,
+                IOobject::NO_WRITE
+            )
+        );
+
+        autoPtr<decompositionMethod> decomposer
+        (
+            decompositionMethod::New
+            (
+                decompositionDict
+            )
+        );
+
+        labelList decomp = decomposer().decompose(mesh, mesh.cellCentres());
+
+        // Global matching tolerance
+        const scalar tolDim = getMergeDistance
+        (
+            args,
+            runTime,
+            mesh.bounds()
+        );
+
+        // Mesh distribution engine
+        fvMeshDistribute distributor(mesh, tolDim);
+
+        Info<< "Wanted distribution:"
+            << distributor.countCells(decomp) << nl << endl;
+
+        // Do actual sending/receiving of mesh
+        autoPtr<mapDistributePolyMesh> map = distributor.distribute(decomp);
+
+        // Print some statistics
+        //Info<< "After distribution:" << endl;
+        //printMeshData(mesh);
+
+        mesh.setInstance(runTime.constant());
+        Info<< "Writing redistributed mesh" << nl << endl;
+        mesh.write();
+    }
+
+
+    Info<< "Refining backgroud mesh according to cell size specification" << nl
+        << endl;
+
+    backgroundMeshDecomposition backgroundMesh
+    (
+        1.0,    //spanScale,ratio of poly cell size v.s. hex cell size
+        0.0,    //minCellSizeLimit
+        0,      //minLevels
+        4,      //volRes, check multiple points per cell
+        20.0,   //maxCellWeightCoeff
+        runTime,
+        geometryToConformTo,
+        cellShapeControls(),
+        rndGen,
+        cvMeshDict
+    );
+
+    if (writeMesh)
+    {
+        runTime++;
+        Info<< "Writing mesh to " << runTime.timeName() << endl;
+        backgroundMesh.mesh().write();
+    }
+
+    const scalar tolDim = getMergeDistance
+    (
+        args,
+        runTime,
+        backgroundMesh.mesh().bounds()
+    );
+
+
+    faceList isoFaces;
+    pointField isoPoints;
+
+    {
+        // Apply a distanceSurface to it.
+        const fvMesh& fvm = backgroundMesh.mesh();
+
+        volScalarField cellDistance
+        (
+            IOobject
+            (
+                "cellDistance",
+                fvm.time().timeName(),
+                fvm.time(),
+                IOobject::NO_READ,
+                IOobject::NO_WRITE,
+                false
+            ),
+            fvm,
+            dimensionedScalar("zero", dimLength, 0)
+        );
+
+        const searchableSurfaces& geometry = geometryToConformTo.geometry();
+        const labelList& surfaces = geometryToConformTo.surfaces();
+
+
+        // Get maximum search size per cell
+        scalarField distSqr(cellDistance.size());
+
+        const labelList& cellLevel = backgroundMesh.cellLevel();
+        forAll(cellLevel, cellI)
+        {
+            // The largest edge of the cell will always be less than the
+            // span of the bounding box of the cell.
+            distSqr[cellI] = magSqr(cellSize)/pow(2, cellLevel[cellI]);
+        }
+
+        {
+            // Internal field
+            cellDistance.internalField() = signedDistance
+            (
+                distSqr,
+                fvm.C(),
+                geometry,
+                surfaces
+            );
+            // Patch fields
+            forAll(fvm.C().boundaryField(), patchI)
+            {
+                const pointField& cc = fvm.C().boundaryField()[patchI];
+                fvPatchScalarField& fld = cellDistance.boundaryField()[patchI];
+                scalarField patchDistSqr
+                (
+                    fld.patch().patchInternalField(distSqr)
+                );
+                fld = signedDistance(patchDistSqr, cc, geometry, surfaces);
+            }
+
+            // On processor patches the fvm.C() will already be the cell centre
+            // on the opposite side so no need to swap cellDistance.
+
+            if (writeMesh)
+            {
+                cellDistance.write();
+            }
+        }
+
+
+        // Distance to points
+        pointScalarField pointDistance
+        (
+            IOobject
+            (
+                "pointDistance",
+                fvm.time().timeName(),
+                fvm.time(),
+                IOobject::NO_READ,
+                IOobject::NO_WRITE,
+                false
+            ),
+            pointMesh::New(fvm),
+            dimensionedScalar("zero", dimLength, 0)
+        );
+        {
+            scalarField pointDistSqr(fvm.nPoints(), -sqr(GREAT));
+            for (label faceI = 0; faceI < fvm.nInternalFaces(); faceI++)
+            {
+                label own = fvm.faceOwner()[faceI];
+                label ownDistSqr = distSqr[own];
+
+                const face& f = fvm.faces()[faceI];
+                forAll(f, fp)
+                {
+                    pointDistSqr[f[fp]] = max(pointDistSqr[f[fp]], ownDistSqr);
+                }
+            }
+            syncTools::syncPointList
+            (
+                fvm,
+                pointDistSqr,
+                maxEqOp<scalar>(),
+                -sqr(GREAT)             // null value
+            );
+
+            pointDistance.internalField() = signedDistance
+            (
+                pointDistSqr,
+                fvm.points(),
+                geometry,
+                surfaces
+            );
+
+            if (writeMesh)
+            {
+                pointDistance.write();
+            }
+        }
+
+        isoSurfaceCell iso
+        (
+            fvm,
+            cellDistance,
+            pointDistance,
+            0,      //distance,
+            false   //regularise
+        );
+
+        isoFaces.setSize(iso.size());
+        forAll(isoFaces, i)
+        {
+            isoFaces[i] = iso[i].triFaceFace();
+        }
+        isoPoints = iso.points();
+    }
+
+
+    pointField mergedPoints;
+    faceList mergedFaces;
+    labelList pointMergeMap;
+    PatchTools::gatherAndMerge
+    (
+        tolDim,
+        primitivePatch
+        (
+            SubList<face>(isoFaces, isoFaces.size()),
+            isoPoints
+        ),
+        mergedPoints,
+        mergedFaces,
+        pointMergeMap
+    );
+
+    vtkSurfaceWriter writer;
+    writer.write
+    (
+        runTime.path(),
+        "iso",
+        mergedPoints,
+        mergedFaces
+    );
+
+    Info<< "End\n" << endl;
+
+    return 0;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/cvMeshDict b/applications/utilities/mesh/generation/cvMesh/cvMeshDict
new file mode 100644
index 0000000000000000000000000000000000000000..2c71c50e56e9acdc75727b7e98c3ffd13b823613
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/cvMeshDict
@@ -0,0 +1,533 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+
+FoamFile
+{
+    version         2.0;
+    format          ascii;
+    class           dictionary;
+    object          cvMeshDict;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+
+/*
+
+Control dictionary for cvMesh - polyhedral mesh generator.
+
+cvMesh phases:
+1. fill volume with initial points (initialPoints subdictionary). An option
+   is to reread from previous set of points.
+
+2. internal point motion (motionControl subdictionary)
+
+3. every once in a while add point duplets/triplets to conform to
+   surfaces and features (surfaceConformation subdictionary)
+
+4. back to 2
+
+5. construct polyMesh.
+    - filter (polyMeshFiltering subdictionary)
+    - check (meshQualityControls subdictionary) and undo filtering
+
+
+See also cvControls.H in the conformalVoronoiMesh library
+
+*/
+
+
+// Important:
+// ----------
+// Any scalar with a name <name>Coeff specifies a value that will be implemented
+// as a faction of the local target cell size
+// Any scalar with a name <name>Size specifies an absolute size.
+
+
+// Geometry. Definition of all surfaces. All surfaces are of class
+// searchableSurface.
+// Surfaces need to be (almost) closed - use closedTriSurfaceMesh
+// if they are not topologically closed. Surfaces need to be oriented so
+// the space to be meshed is always on the inside of all surfaces. Use e.g.
+// surfaceOrient.
+geometry
+{
+    // Surface to conform to
+    flange.obj
+    {
+        type triSurfaceMesh;
+    }
+
+    // Surface used for cell size control
+    ref7.stl
+    {
+        name ref7;
+        type triSurfaceMesh;
+    }
+
+    // Surface used for cell size control
+    tunnel_APPROACH_INLET.obj
+    {
+        type triSurfaceMesh;
+    }
+}
+
+
+// Controls for conforming to the surfaces.
+surfaceConformation
+{
+    // A point inside surfaces that is inside mesh.
+    locationInMesh (0 0 0);
+
+    // How far apart are point-duplets generated. Balance this between
+    // - very low distance: little chance of interference from other
+    //   surfaces
+    // - largish distance: less non-orthogonality in final cell
+    //   (circumcentre far away from centroid)
+    pointPairDistanceCoeff      0.1;
+
+    // Mixed feature points - connected to both inside and outside edges.
+    // Recreated by inserting triplets of points to recreate a single edge.
+    // Done for all edges emanating from point. triplets of points get inserted
+    // mixedFeaturePointPPDistanceCoeff distance away from feature point.
+    // Set to a negative number to disable.
+    mixedFeaturePointPPDistanceCoeff    5.0; //-1;
+
+    // Distance to a feature point within which surface and edge
+    // conformation points are excluded - fraction of the local target
+    // cell size
+    featurePointExclusionDistanceCoeff  0.4;
+
+    // Distance to an existing feature edge conformation location
+    // within which other edge conformation location are excluded -
+    // fraction of the local target cell size
+    featureEdgeExclusionDistanceCoeff   0.2;
+
+    // Optimisation: do not check for surface intersection (of dual edges)
+    // for points near to surface.
+    surfaceSearchDistanceCoeff  2.5;
+
+    // Maximum allowable protrusion through the surface before
+    // conformation points are added - fraction of the local target
+    // cell size. These small protusions are (hopefully) done by mesh filtering
+    // instead.
+    maxSurfaceProtrusionCoeff   0.1;
+
+    // If feature edge with large angle (so more than 125 degrees) introduce
+    // additional points to create two half angled cells (= mitering).
+    maxQuadAngle 125;
+
+    // Frequency to redo surface conformation (expensive).
+    surfaceConformationRebuildFrequency 10;
+
+    // Initial and intermediate controls
+    coarseConformationControls
+    {
+        // Initial conformation
+        initial
+        {
+            // We've got a point poking through the surface. Don't do any
+            // surface conformation if near feature edge (since feature edge
+            // conformation should have priority)
+
+            // distance to search for near feature edges
+            edgeSearchDistCoeff         1.1;
+
+            // Proximity to a feature edge where a surface hit is
+            //  not created, only the edge conformation is created
+            // - fraction of the local target cell size. Coarse
+            // conformation, initial protrusion tests.
+            surfacePtReplaceDistCoeff   0.5;
+        }
+
+        // Same for iterations
+        iteration
+        {
+            edgeSearchDistCoeff         1.25;
+            surfacePtReplaceDistCoeff   0.7;
+        }
+
+        // Stop either at maxIterations or if the number of surface pokes
+        // is very small (iterationToInitialHitRatioLimit * initial number)
+        // Note: perhaps iterationToInitialHitRatioLimit should be absolute
+        // count?
+        maxIterations 15;
+
+        iterationToInitialHitRatioLimit 0.001;
+    }
+
+    // Final (at endTime) controls
+    fineConformationControls
+    {
+        initial
+        {
+            edgeSearchDistCoeff         1.1;
+            surfacePtReplaceDistCoeff   0.5;
+        }
+
+        iteration
+        {
+            edgeSearchDistCoeff         1.25;
+            surfacePtReplaceDistCoeff   0.7;
+        }
+
+        maxIterations 15;
+
+        iterationToInitialHitRatioLimit 0.001;
+    }
+
+    // Geometry to mesh to
+    geometryToConformTo
+    {
+        flange.obj
+        {
+            featureMethod extendedFeatureEdgeMesh; // or none;
+            extendedFeatureEdgeMesh "flange.extendedFeatureEdgeMesh";
+        }
+    }
+
+    // Additional features.
+    additionalFeatures
+    {
+        //line
+        //{
+        //    featureMethod extendedFeatureEdgeMesh; // or none;
+        //    extendedFeatureEdgeMesh "line.extendedFeatureEdgeMesh";
+        //}
+    }
+}
+
+
+// Controls for seeding initial points and general control of the target
+// cell size (used everywhere)
+initialPoints
+{
+    // Do not place point closer than minimumSurfaceDistanceCoeff
+    // to the surface. Is fraction of local target cell size (see below)
+    minimumSurfaceDistanceCoeff 0.55;
+
+    initialPointsMethod             autoDensity;
+    // initialPointsMethod          uniformGrid;
+    // initialPointsMethod          bodyCentredCubic;
+    // initialPointsMethod          pointFile;
+
+
+    // Take boundbox of all geometry. Sample with this box. If too much
+    // samples in box (due to target cell size) split box.
+    autoDensityDetails
+    {
+        // Initial number of refinement levels. Needs to be enough to pick
+        // up features due to size ratio. If not enough it will take longer
+        // to determine point seeding.
+        minLevels 4;
+        // Split box if ratio of min to max cell size larger than maxSizeRatio
+        maxSizeRatio 5.0;
+        // Per box sample 5x5x5 internally
+        sampleResolution 5;
+        // Additionally per face of the box sample 5x5
+        surfaceSampleResolution 5;
+    }
+
+    uniformGridDetails
+    {
+        // Absolute cell size.
+        initialCellSize         0.0015;
+        randomiseInitialGrid    yes;
+        randomPerturbationCoeff 0.02;
+    }
+
+    bodyCentredCubicDetails
+    {
+        initialCellSize         0.0015;
+        randomiseInitialGrid    no;
+        randomPerturbationCoeff 0.1;
+    }
+
+    pointFileDetails
+    {
+        // Reads points from file. Still rejects points that are too
+        // close to the surface (minimumSurfaceDistanceCoeff) or on the
+        // wrong side of the surfaces.
+        pointFile              "constant/internalDelaunayVertices";
+    }
+}
+
+
+// Control size of voronoi cells i.e. distance between points. This
+// determines the target cell size which is used everywhere.
+// It determines the cell size given a location. It then uses all
+// the rules
+// - defaultCellSize
+// - cellShapeControl
+// to determine target cell size. Rule with highest priority wins. If same
+// priority smallest cell size wins.
+motionControl
+{
+    // Absolute cell size of back ground mesh. This is the maximum cell size.
+    defaultCellSize     0.00075;
+
+    // Absolute cell size of back ground mesh. This is the minimum cell size.
+    minimumCellSize     0;
+
+    //cellShapeControl    constantControl;
+    //cellShapeControl    fileControl;
+    cellShapeControl    surfaceControl;
+
+    // Provide constant values for cell size and alignment
+    constantControlCoeffs
+    {
+        cellSize      0.00075;
+        cellAlignment (1 0 0 0 1 0 0 0 1);
+    }
+
+    // Read in the points of the background grid used for cell shape control
+    // from a file, with corresponding files for alignment and size
+    fileControlCoeffs
+    {
+        pointFile       "";
+        sizesFile       "";
+        alignmentsFile  "";
+    }
+
+    // Calculate the sizes and alignments from surfaces
+    surfaceControlCoeffs
+    {
+        ref7_outside
+        {
+            // optional name of geometry
+            surface             ref7;
+            priority            1;
+            mode                outside;//inside/bothSides
+            cellSizeFunction    linearDistance;
+
+            // cellSizeFunctions:
+            //  uniform : uniform size
+            //  uniformDistance : fixed size for all within distance
+            //  linearSpatial : grading in specified direction only
+            //  linearDistance : vary linearly as distance to surface
+            //  surfaceOffsetLinearDistance : constant close to surface then
+            //  fade like linearDistance
+
+            // Vary from surfaceCellSize (close to the surface) to
+            // distanceCellSize (further than 'distance')
+            linearDistanceCoeffs
+            {
+                surfaceCellSize     1e-5;    // absolute size
+                distanceCellSize    $defaultCellSize;
+                distance            1.0;
+            }
+        }
+
+        tunnel_APPROACH_INLET.obj
+        {
+            priority            1;
+            mode                bothSides;
+            cellSizeFunction    surfaceOffsetLinearDistance;
+            // Constant within a certain distance then linear fade away.
+            // Good for layers.
+            surfaceOffsetLinearDistanceCoeffs
+            {
+                surfaceCellSize     1e-5;
+                distanceCellSize    $defaultCellSize;
+                surfaceOffset       0.1;
+                totalDistance       1.0;
+            }
+        }
+    }
+
+    // Provide an aspect ratio and the direction in which it acts on the mesh.
+    // Default is 1.0 if this section is not present in the dictionary
+    cellAspectRatioControl
+    {
+        // Aspect ratio.
+        aspectRatio                 2.0;
+        // Direction of action of the aspect ratio
+        aspectRatioDirection        (1 0 0);
+    }
+
+    // Underrelaxation for point motion. Simulated annealing: starts off at 1
+    // and lowers to 0 (at simulation endTime) to converge points.
+    // adaptiveLinear is preferred choice.
+    // Points move by e.g. 10% of tet size.
+    relaxationModel     adaptiveLinear; //rampHoldFall
+
+    adaptiveLinearCoeffs
+    {
+        relaxationStart 1.0;
+        relaxationEnd   0.0;
+    }
+
+    // Output lots and lots of .obj files
+    objOutput                   no;
+
+    // Timing and memory usage.
+    timeChecks                  yes;
+
+    // Number of rays in plane parallel to nearest surface. Used to detect
+    // next closest surfaces. Used to work out alignment (three vectors)
+    // to surface.
+    // Note that only the initial points (from the seeding) calculate this
+    // information so if these are not fine enough the alignment will
+    // not be correct. (any points added during the running will lookup
+    // this information from the nearest initial point since it is
+    // expensive)
+    alignmentSearchSpokes       36;
+
+    // For each delaunay edge (between two vertices, becomes
+    // the Voronoi face normal) snap to the alignment direction if within
+    // alignmentAcceptanceAngle. Slightly > 45 is a good choice - prevents
+    // flipping.
+    alignmentAcceptanceAngle    48;
+
+    // How often to rebuild the alignment info (expensive)
+    sizeAndAlignmentRebuildFrequency 20;
+
+    // When to insert points. Not advisable change to
+    // these settings.
+    pointInsertionCriteria
+    {
+        // If edge larger than 1.75 target cell size
+        // (so tets too large/stretched) insert point
+        cellCentreDistCoeff     1.75;
+        // Do not insert point if voronoi face (on edge) very small.
+        faceAreaRatioCoeff      0.0025;
+        // Insert point only if edge closely aligned to local alignment
+        // direction.
+        acceptanceAngle         21.5;
+    }
+
+    // Opposite: remove point if mesh too compressed. Do not change these
+    // settings.
+    pointRemovalCriteria
+    {
+        cellCentreDistCoeff  0.65;
+    }
+
+    // How to determine the point motion. All edges got some direction.
+    // Sum all edge contributions to determine point motion. Weigh by
+    // face area so motion is preferentially determined by large faces
+    // (or more importantly ignore contribution from small faces).
+    // Do not change these settings.
+    faceAreaWeightModel piecewiseLinearRamp;
+
+    piecewiseLinearRampCoeffs
+    {
+        lowerAreaFraction       0.5;
+        upperAreaFraction       1.0;
+    }
+}
+
+
+// After simulation, when converting to polyMesh, filter out small faces/edges.
+// Do not change. See cvControls.H
+polyMeshFiltering
+{
+    // Filter small edges
+    filterEdges                             on;
+
+    // Filter small and sliver faces
+    filterFaces                             off;
+
+    // Write the underlying Delaunay tet mesh at output time
+    writeTetDualMesh                        false;  //true;
+
+    // Upper limit on the size of faces to be filtered.
+    // fraction of the local target cell size
+    filterSizeCoeff                         0.2;
+
+    // Upper limit on how close two dual vertices can be before
+    // being merged, fraction of the local target cell size
+    mergeClosenessCoeff                     1e-9;
+
+    // To not filter: set maxNonOrtho to 1 (so check fails) and then
+    // set continueFilteringOnBadInitialPolyMesh to false.
+    continueFilteringOnBadInitialPolyMesh   true;
+
+    // When a face is "bad", what fraction should the filterSizeCoeff be
+    // reduced by.  Recursive, so for a filterCount value of fC, the
+    // filterSizeCoeff is reduced by pow(filterErrorReductionCoeff, fC)
+    filterErrorReductionCoeff               0.5;
+
+    // Maximum number of filterCount applications before a face
+    // is not attempted to be filtered
+    filterCountSkipThreshold                4;
+
+    // Maximum number of permissible iterations of the face collapse
+    // algorithm.  The value to choose will be related the maximum number
+    // of points on a face that is to be collapsed and how many faces
+    // around it need to be collapsed.
+    maxCollapseIterations                   25;
+
+    // Maximum number of times an to allow an equal faceSet to be
+    // returned from the face quality assessment before stopping iterations
+    // to break an infinitie loop.
+    maxConsecutiveEqualFaceSets             5;
+    // Remove little steps (almost perp to surface) by collapsing face.
+    surfaceStepFaceAngle                    80;
+    // Do not collapse face to edge if should become edges
+    edgeCollapseGuardFraction               0.3;
+    // Only collapse face to point if high aspect ratio
+    maxCollapseFaceToPointSideLengthCoeff   0.35;
+}
+
+
+// Generic mesh quality settings. At any undoable phase these determine
+// where to undo. Same as in snappyHexMeshDict
+meshQualityControls
+{
+    //- Maximum non-orthogonality allowed. Set to 180 to disable.
+    maxNonOrtho 65;
+
+    //- Max skewness allowed. Set to <0 to disable.
+    maxBoundarySkewness 50;
+    maxInternalSkewness 10;
+
+    //- Max concaveness allowed. Is angle (in degrees) below which concavity
+    //  is allowed. 0 is straight face, <0 would be convex face.
+    //  Set to 180 to disable.
+    maxConcave 80;
+
+    //- Minimum pyramid volume. Is absolute volume of cell pyramid.
+    //  Set to a sensible fraction of the smallest cell volume expected.
+    //  Set to very negative number (e.g. -1E30) to disable.
+    minVol -1E30;
+
+    //- Minimum quality of the tet formed by the
+    //  variable base point minimum decomposition triangles and
+    //  the cell centre (so not face-centre decomposition).
+    //  This has to be a positive number for tracking
+    //  to work. Set to very negative number (e.g. -1E30) to
+    //  disable.
+    //     <0 = inside out tet,
+    //      0 = flat tet
+    //      1 = regular tet
+    minTetQuality 1e-30;
+
+    //- Minimum absolute face area. Set to <0 to disable.
+    minArea -1;
+
+    //- Minimum face twist. Set to <-1 to disable. dot product of face normal
+    //- and face centre triangles normal
+    minTwist 0.02;
+
+    //- minimum normalised cell determinant
+    //- 1 = hex, <= 0 = folded or flattened illegal cell
+    minDeterminant 0.001;
+
+    //- minFaceWeight (0 -> 0.5)
+    minFaceWeight 0.02;
+
+    //- minVolRatio (0 -> 1)
+    minVolRatio 0.01;
+
+    //must be >0 for Fluent compatibility
+    minTriangleTwist -1;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/cvMeshSurfaceSimplify/Allwmake b/applications/utilities/mesh/generation/cvMesh/cvMeshSurfaceSimplify/Allwmake
new file mode 100755
index 0000000000000000000000000000000000000000..98dec66c76bfc035c39136cff18ad685c707128c
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/cvMeshSurfaceSimplify/Allwmake
@@ -0,0 +1,10 @@
+#!/bin/sh
+cd ${0%/*} || exit 1    # run from this directory
+set -x
+
+if [ -d "${FASTDUALOCTREE_SRC_PATH}" ]
+then
+    wmake
+fi
+
+# ----------------------------------------------------------------- end-of-file
diff --git a/applications/utilities/mesh/generation/cvMesh/cvMeshSurfaceSimplify/Make/files b/applications/utilities/mesh/generation/cvMesh/cvMeshSurfaceSimplify/Make/files
new file mode 100644
index 0000000000000000000000000000000000000000..fbe4cfeda6cc8bd7e41dd0bc3e34eb92108cfce8
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/cvMeshSurfaceSimplify/Make/files
@@ -0,0 +1,22 @@
+/*
+cvMeshSurfaceSimplify_non_octree.C
+MarchingCubes/MarchingCubes.cpp
+MarchingCubes/ply.c
+*/
+
+/*
+MarchingCubes = fastdualoctree_sgp
+
+$(MarchingCubes)/data_access.cpp
+$(MarchingCubes)/fparser.cpp
+$(MarchingCubes)/fpoptimizer.cpp
+$(MarchingCubes)/MarchingCubes.cpp
+$(MarchingCubes)/mc_draw.cpp
+$(MarchingCubes)/morton.cpp
+$(MarchingCubes)/opt_octree.cpp
+$(MarchingCubes)/hash_octree.cpp
+*/
+
+cvMeshSurfaceSimplify.C
+
+EXE = $(FOAM_APPBIN)/cvMeshSurfaceSimplify
diff --git a/applications/utilities/mesh/generation/cvMesh/cvMeshSurfaceSimplify/Make/options b/applications/utilities/mesh/generation/cvMesh/cvMeshSurfaceSimplify/Make/options
new file mode 100644
index 0000000000000000000000000000000000000000..7bd92a24abf566234ee02a26c3615c10151286a1
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/cvMeshSurfaceSimplify/Make/options
@@ -0,0 +1,28 @@
+MarchingCubes = fastdualoctree_sgp
+
+include $(GENERAL_RULES)/CGAL
+
+EXE_INC = \
+    -DUNIX \
+    -Wno-old-style-cast \
+    /* -IMarchingCubes */ \
+    -I$(FASTDUALOCTREE_SRC_PATH) \
+    -I../conformalVoronoiMesh/lnInclude \
+    -I$(LIB_SRC)/edgeMesh/lnInclude \
+    -I$(LIB_SRC)/fileFormats/lnInclude \
+    -I$(LIB_SRC)/triSurface/lnInclude \
+    -I$(LIB_SRC)/meshTools/lnInclude
+
+EXE_LIBS = \
+    $(CGAL_LIBS) \
+    -lboost_thread \
+    -lmpfr \
+    -L$(FASTDUALOCTREE_SRC_PATH) -lperf_main \
+    -lGL \
+    -lconformalVoronoiMesh \
+    -ldecompositionMethods -L$(FOAM_LIBBIN)/dummy -lscotchDecomp \
+    -ledgeMesh \
+    -lfileFormats \
+    -ltriSurface \
+    -lmeshTools \
+    -ldynamicMesh
diff --git a/applications/utilities/mesh/generation/cvMesh/cvMeshSurfaceSimplify/cvMeshSurfaceSimplify.C b/applications/utilities/mesh/generation/cvMesh/cvMeshSurfaceSimplify/cvMeshSurfaceSimplify.C
new file mode 100644
index 0000000000000000000000000000000000000000..ae4f8812f7d7faaeac4abf525aa5262083993d80
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/cvMeshSurfaceSimplify/cvMeshSurfaceSimplify.C
@@ -0,0 +1,639 @@
+/*---------------------------------------------------------------------------*\
+ =========                   |
+ \\      /   F ield          | OpenFOAM: The Open Source CFD Toolbox
+  \\    /    O peration      |
+   \\  /     A nd            | Copyright (C) 2012 OpenFOAM Foundation
+    \\/      M anipulation   |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Application
+    cvMeshSurfaceSimplify
+
+Description
+    Simplifies surfaces by resampling.
+
+    Uses Thomas Lewiner's topology preserving MarchingCubes.
+    (http://zeus.mat.puc-rio.br/tomlew/tomlew_uk.php)
+
+\*---------------------------------------------------------------------------*/
+
+#include "argList.H"
+#include "Time.H"
+#include "searchableSurfaces.H"
+#include "conformationSurfaces.H"
+#include "triSurfaceMesh.H"
+
+#include "opt_octree.h"
+#include "cube.h"
+
+using namespace Foam;
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+class pointConversion
+{
+    const vector scale_;
+
+    const vector offset_;
+
+public:
+
+    //- Construct from components
+    pointConversion
+    (
+        const vector scale,
+        const vector offset
+    )
+    :
+        scale_(scale),
+        offset_(offset)
+    {}
+
+    inline Point toLocal(const Foam::point& pt) const
+    {
+        Foam::point p = cmptMultiply(scale_, (pt + offset_));
+        return Point(p.x(), p.y(), p.z());
+    }
+
+    inline Foam::point toGlobal(const Point& pt) const
+    {
+        point p(pt.x(), pt.y(), pt.z());
+        return cmptDivide(p, scale_) - offset_;
+    }
+};
+
+
+
+
+// For use in Fast-Dual Octree from Thomas Lewiner
+class distanceCalc
+:
+    public ::data_access
+{
+
+    const Level min_level_;
+
+    const conformationSurfaces& geometryToConformTo_;
+
+    const pointConversion& converter_;
+
+
+    // Private Member Functions
+
+    scalar signedDistance(const Foam::point& pt) const
+    {
+        const searchableSurfaces& geometry = geometryToConformTo_.geometry();
+        const labelList& surfaces = geometryToConformTo_.surfaces();
+
+        static labelList nearestSurfaces;
+        static scalarField distance;
+
+        static pointField samples(1);
+        samples[0] = pt;
+
+        searchableSurfacesQueries::signedDistance
+        (
+            geometry,
+            surfaces,
+            samples,
+            scalarField(1, GREAT),
+            searchableSurface::OUTSIDE,
+            nearestSurfaces,
+            distance
+        );
+
+        return distance[0];
+    }
+
+
+public:
+
+    // Constructors
+
+        //- Construct from components
+        distanceCalc
+        (
+            Level max_level_,
+            real iso_val_,
+            Level min_level,
+            const conformationSurfaces& geometryToConformTo,
+            const pointConversion& converter
+        )
+        :
+            data_access(max_level_,iso_val_),
+            min_level_(min_level),
+            geometryToConformTo_(geometryToConformTo),
+            converter_(converter)
+        {}
+
+
+    //- Destructor
+    virtual ~distanceCalc()
+    {}
+
+
+    // Member Functions
+
+        //- test function
+        virtual bool need_refine( const Cube &c )
+        {
+            int l = c.lv() ;
+
+            if( l >= _max_level ) return false;
+            if( l < min_level_ ) return true;
+
+            treeBoundBox bb
+            (
+                converter_.toGlobal
+                (
+                    Point
+                    (
+                        c.xmin(),
+                        c.ymin(),
+                        c.zmin()
+                    )
+                ),
+                converter_.toGlobal
+                (
+                    Point
+                    (
+                        c.xmax(),
+                        c.ymax(),
+                        c.zmax()
+                    )
+                )
+            );
+
+            const searchableSurfaces& geometry =
+                geometryToConformTo_.geometry();
+            const labelList& surfaces =
+                geometryToConformTo_.surfaces();
+
+
+            //- Uniform refinement around surface
+            {
+                forAll(surfaces, i)
+                {
+                    if (geometry[surfaces[i]].overlaps(bb))
+                    {
+                        return true;
+                    }
+                }
+                return false;
+            }
+
+
+            ////- Surface intersects bb (but not using intersection test)
+            //scalar ccDist = signedDistance(bb.midpoint());
+            //scalar ccVal = ccDist - _iso_val;
+            //if (mag(ccVal) < SMALL)
+            //{
+            //    return true;
+            //}
+            //const pointField points(bb.points());
+            //forAll(points, pointI)
+            //{
+            //    scalar pointVal = signedDistance(points[pointI]) - _iso_val;
+            //    if (ccVal*pointVal < 0)
+            //    {
+            //        return true;
+            //    }
+            //}
+            //return false;
+
+
+            ////- Refinement based on intersection with multiple planes.
+            ////  Does not work well - too high a ratio between
+            ////  neighbouring cubes.
+            //const pointField points(bb.points());
+            //const edgeList& edges = treeBoundBox::edges;
+            //pointField start(edges.size());
+            //pointField end(edges.size());
+            //forAll(edges, i)
+            //{
+            //    start[i] = points[edges[i][0]];
+            //    end[i] = points[edges[i][1]];
+            //}
+            //Foam::List<Foam::List<pointIndexHit> > hitInfo;
+            //labelListList hitSurfaces;
+            //searchableSurfacesQueries::findAllIntersections
+            //(
+            //    geometry,
+            //    surfaces,
+            //    start,
+            //    end,
+            //    hitSurfaces,
+            //    hitInfo
+            //);
+            //
+            //// Count number of intersections
+            //label nInt = 0;
+            //forAll(hitSurfaces, edgeI)
+            //{
+            //    nInt += hitSurfaces[edgeI].size();
+            //}
+            //
+            //if (nInt == 0)
+            //{
+            //    // No surface intersected. See if there is one inside
+            //    forAll(surfaces, i)
+            //    {
+            //        if (geometry[surfaces[i]].overlaps(bb))
+            //        {
+            //            return true;
+            //        }
+            //    }
+            //    return false;
+            //}
+            //
+            //// Check multiple surfaces
+            //label baseSurfI = -1;
+            //forAll(hitSurfaces, edgeI)
+            //{
+            //    const labelList& hSurfs = hitSurfaces[edgeI];
+            //    forAll(hSurfs, i)
+            //    {
+            //        if (baseSurfI == -1)
+            //        {
+            //            baseSurfI = hSurfs[i];
+            //        }
+            //        else if (baseSurfI != hSurfs[i])
+            //        {
+            //            // Multiple surfaces
+            //            return true;
+            //        }
+            //    }
+            //}
+            //
+            //// Get normals
+            //DynamicList<pointIndexHit> baseInfo(nInt);
+            //forAll(hitInfo, edgeI)
+            //{
+            //    const Foam::List<pointIndexHit>& hits = hitInfo[edgeI];
+            //    forAll(hits, i)
+            //    {
+            //        (void)hits[i].hitPoint();
+            //        baseInfo.append(hits[i]);
+            //    }
+            //}
+            //vectorField normals;
+            //geometry[surfaces[baseSurfI]].getNormal(baseInfo, normals);
+            //for (label i = 1; i < normals.size(); ++i)
+            //{
+            //    if ((normals[0] & normals[i]) < 0.9)
+            //    {
+            //        return true;
+            //    }
+            //}
+            //labelList regions;
+            //geometry[surfaces[baseSurfI]].getRegion(baseInfo, regions);
+            //for (label i = 1; i < regions.size(); ++i)
+            //{
+            //    if (regions[0] != regions[i])
+            //    {
+            //        return true;
+            //    }
+            //}
+            //return false;
+
+
+
+            //samples[0] = point(c.xmin(), c.ymin(), c.zmin());
+            //samples[1] = point(c.xmax(), c.ymin(), c.zmin());
+            //samples[2] = point(c.xmax(), c.ymax(), c.zmin());
+            //samples[3] = point(c.xmin(), c.ymax(), c.zmin());
+            //
+            //samples[4] = point(c.xmin(), c.ymin(), c.zmax());
+            //samples[5] = point(c.xmax(), c.ymin(), c.zmax());
+            //samples[6] = point(c.xmax(), c.ymax(), c.zmax());
+            //samples[7] = point(c.xmin(), c.ymax(), c.zmax());
+
+            //scalarField nearestDistSqr(8, GREAT);
+            //
+            //Foam::List<pointIndexHit> nearestInfo;
+            //surf_.findNearest(samples, nearestDistSqr, nearestInfo);
+            //vectorField normals;
+            //surf_.getNormal(nearestInfo, normals);
+            //
+            //for (label i = 1; i < normals.size(); ++i)
+            //{
+            //    if ((normals[0] & normals[i]) < 0.5)
+            //    {
+            //        return true;
+            //    }
+            //}
+            //return false;
+
+            //// Check if surface octree same level
+            //const labelList elems(surf_.tree().findBox(bb));
+            //
+            //if (elems.size() > 1)
+            //{
+            //    return true;
+            //}
+            //else
+            //{
+            //  return false;
+            //}
+        }
+
+        //- data function
+        virtual real value_at( const Cube &c )
+        {
+            return signedDistance(converter_.toGlobal(c)) - _iso_val;
+        }
+};
+
+
+// Main program:
+
+int main(int argc, char *argv[])
+{
+    argList::addNote
+    (
+        "Re-sample surfaces used in cvMesh operation"
+    );
+    argList::validArgs.append("outputName");
+
+    #include "setRootCase.H"
+    #include "createTime.H"
+    runTime.functionObjects().off();
+
+    const fileName exportName = args.args()[1];
+
+    Info<< "Reading surfaces as specified in the cvMeshDict and"
+        << " writing a re-sampled surface to " << exportName
+        << nl << endl;
+
+    cpuTime timer;
+
+    IOdictionary cvMeshDict
+    (
+        IOobject
+        (
+            "cvMeshDict",
+            runTime.system(),
+            runTime,
+            IOobject::MUST_READ_IF_MODIFIED,
+            IOobject::NO_WRITE
+        )
+    );
+
+    // Define/load all geometry
+    searchableSurfaces allGeometry
+    (
+        IOobject
+        (
+            "cvSearchableSurfaces",
+            runTime.constant(),
+            "triSurface",
+            runTime,
+            IOobject::MUST_READ,
+            IOobject::NO_WRITE
+        ),
+        cvMeshDict.subDict("geometry")
+    );
+
+    Info<< "Geometry read in = "
+        << timer.cpuTimeIncrement() << " s." << nl << endl;
+
+
+    Random rndGen(64293*Pstream::myProcNo());
+
+    conformationSurfaces geometryToConformTo
+    (
+        runTime,
+        rndGen,
+        allGeometry,
+        cvMeshDict.subDict("surfaceConformation")
+    );
+
+    Info<< "Set up geometry in = "
+        << timer.cpuTimeIncrement() << " s." << nl << endl;
+
+
+    const searchableSurfaces& geometry = geometryToConformTo.geometry();
+    const labelList& surfaces = geometryToConformTo.surfaces();
+
+
+    const label minLevel = 2;
+
+    // The max cube size follows from the minLevel and the default cube size
+    // (1)
+    const scalar maxSize = 1.0 / (1 << minLevel);
+    const scalar halfMaxSize = 0.5*maxSize;
+
+
+    // Scale the geometry to fit within
+    // halfMaxSize .. 1-halfMaxSize
+
+    scalar wantedRange = 1.0-maxSize;
+
+    const treeBoundBox bb = geometryToConformTo.globalBounds();
+
+    const vector scale = cmptDivide
+    (
+        point(wantedRange, wantedRange, wantedRange),
+        bb.span()
+    );
+    const vector offset =
+        cmptDivide
+        (
+            point(halfMaxSize, halfMaxSize, halfMaxSize),
+            scale
+        )
+       -bb.min();
+
+
+    const pointConversion converter(scale, offset);
+
+
+    // Marching cubes
+
+    OptOctree octree;
+
+    distanceCalc ref
+    (
+        8,          //maxLevel
+        0.0,        //distance
+        minLevel,   //minLevel
+        geometryToConformTo,
+        converter
+    );
+
+    octree.refine(&ref);
+    octree.set_impl(&ref);
+
+    Info<< "Calculated octree in = "
+        << timer.cpuTimeIncrement() << " s." << nl << endl;
+
+    MarchingCubes& mc = octree.mc();
+
+    mc.clean_all() ;
+    octree.build_isosurface(&ref) ;
+
+    Info<< "Constructed iso surface of distance in = "
+        << timer.cpuTimeIncrement() << " s." << nl << endl;
+
+    // Write output file
+    if (mc.ntrigs() > 0)
+    {
+        Triangle* triangles = mc.triangles();
+        label nTris = mc.ntrigs();
+        Foam::DynamicList<labelledTri> tris(mc.ntrigs());
+        for (label triI = 0; triI < nTris; ++triI)
+        {
+            const Triangle& t = triangles[triI];
+            if (t.v1 != t.v2 && t.v1 != t.v3 && t.v2 != t.v3)
+            {
+                tris.append
+                (
+                    labelledTri
+                    (
+                        triangles[triI].v1,
+                        triangles[triI].v2,
+                        triangles[triI].v3,
+                        0                       // region
+                    )
+                );
+            }
+        }
+
+
+        Point* vertices = mc.vertices();
+        pointField points(mc.nverts());
+        forAll(points, pointI)
+        {
+            const Point& v = vertices[pointI];
+            points[pointI] = converter.toGlobal(v);
+        }
+
+
+        // Find correspondence to original surfaces
+        labelList regionOffsets(surfaces.size());
+        label nRegions = 0;
+        forAll(surfaces, i)
+        {
+            const wordList& regions = geometry[surfaces[i]].regions();
+            regionOffsets[i] = nRegions;
+            nRegions += regions.size();
+        }
+
+
+        geometricSurfacePatchList patches(nRegions);
+        nRegions = 0;
+        forAll(surfaces, i)
+        {
+            const wordList& regions = geometry[surfaces[i]].regions();
+
+            forAll(regions, regionI)
+            {
+                patches[nRegions] = geometricSurfacePatch
+                (
+                    "patch",
+                    geometry[surfaces[i]].name() + "_" + regions[regionI],
+                    nRegions
+                );
+                nRegions++;
+            }
+        }
+
+        triSurface s(tris, patches, points, true);
+        tris.clearStorage();
+
+        Info<< "Extracted triSurface in = "
+            << timer.cpuTimeIncrement() << " s." << nl << endl;
+
+
+        // Find out region on local surface of nearest point
+        {
+            Foam::List<pointIndexHit> hitInfo;
+            labelList hitSurfaces;
+            geometryToConformTo.findSurfaceNearest
+            (
+                s.faceCentres(),
+                scalarField(s.size(), sqr(GREAT)),
+                hitInfo,
+                hitSurfaces
+            );
+
+            // Get region
+            DynamicList<pointIndexHit> surfInfo(hitSurfaces.size());
+            DynamicList<label> surfIndices(hitSurfaces.size());
+
+            forAll(surfaces, surfI)
+            {
+                // Extract info on this surface
+                surfInfo.clear();
+                surfIndices.clear();
+                forAll(hitSurfaces, triI)
+                {
+                    if (hitSurfaces[triI] == surfI)
+                    {
+                        surfInfo.append(hitInfo[triI]);
+                        surfIndices.append(triI);
+                    }
+                }
+
+                // Calculate sideness of these surface points
+                labelList region;
+                geometry[surfaces[surfI]].getRegion(surfInfo, region);
+
+                forAll(region, i)
+                {
+                    label triI = surfIndices[i];
+                    s[triI].region() = regionOffsets[surfI]+region[i];
+                }
+            }
+        }
+
+        Info<< "Re-patched surface in = "
+            << timer.cpuTimeIncrement() << " s." << nl << endl;
+
+        triSurfaceMesh smesh
+        (
+            IOobject
+            (
+                exportName,
+                runTime.constant(), // instance
+                "triSurface",
+                runTime,            // registry
+                IOobject::NO_READ,
+                IOobject::AUTO_WRITE,
+                false
+            ),
+            s
+        );
+
+        Info<< "writing surfMesh:\n  "
+            << smesh.searchableSurface::objectPath() << nl << endl;
+        smesh.searchableSurface::write();
+
+        Info<< "Written surface in = "
+            << timer.cpuTimeIncrement() << " s." << nl << endl;
+    }
+
+    mc.clean_all() ;
+
+    Info<< "End\n" << endl;
+
+    return 0;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/cvMeshSurfaceSimplify/cvMeshSurfaceSimplify_non_octree.C b/applications/utilities/mesh/generation/cvMesh/cvMeshSurfaceSimplify/cvMeshSurfaceSimplify_non_octree.C
new file mode 100644
index 0000000000000000000000000000000000000000..c3518ef1a0365e5359f9d402068a6914053049b9
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/cvMeshSurfaceSimplify/cvMeshSurfaceSimplify_non_octree.C
@@ -0,0 +1,352 @@
+/*---------------------------------------------------------------------------*\
+ =========                   |
+ \\      /   F ield          | OpenFOAM: The Open Source CFD Toolbox
+  \\    /    O peration      |
+   \\  /     A nd            | Copyright (C) 2012 OpenFOAM Foundation
+    \\/      M anipulation   |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Application
+    cvMeshSurfaceSimplify
+
+Description
+    Simplifies surfaces by resampling.
+
+    Uses Thomas Lewiner's topology preserving MarchingCubes.
+
+\*---------------------------------------------------------------------------*/
+
+#include "argList.H"
+#include "Time.H"
+#include "searchableSurfaces.H"
+#include "conformationSurfaces.H"
+#include "triSurfaceMesh.H"
+
+#include "MarchingCubes.h"
+
+
+using namespace Foam;
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+// Main program:
+
+int main(int argc, char *argv[])
+{
+    argList::addNote
+    (
+        "Re-sample surfaces used in cvMesh operation"
+    );
+    //argList::validArgs.append("inputFile");
+    argList::validArgs.append("(nx ny nz)");
+    argList::validArgs.append("outputName");
+
+    #include "setRootCase.H"
+    #include "createTime.H"
+    runTime.functionObjects().off();
+
+    const Vector<label> n(IStringStream(args.args()[1])());
+    const fileName exportName = args.args()[2];
+
+    Info<< "Reading surfaces as specified in the cvMeshDict and"
+        << " writing re-sampled " << n << " to " << exportName
+        << nl << endl;
+
+    cpuTime timer;
+
+    IOdictionary cvMeshDict
+    (
+        IOobject
+        (
+            "cvMeshDict",
+            runTime.system(),
+            runTime,
+            IOobject::MUST_READ_IF_MODIFIED,
+            IOobject::NO_WRITE
+        )
+    );
+
+    // Define/load all geometry
+    searchableSurfaces allGeometry
+    (
+        IOobject
+        (
+            "cvSearchableSurfaces",
+            runTime.constant(),
+            "triSurface",
+            runTime,
+            IOobject::MUST_READ,
+            IOobject::NO_WRITE
+        ),
+        cvMeshDict.subDict("geometry")
+    );
+
+    Info<< "Geometry read in = "
+        << timer.cpuTimeIncrement() << " s." << nl << endl;
+
+
+    Random rndGen(64293*Pstream::myProcNo());
+
+    conformationSurfaces geometryToConformTo
+    (
+        runTime,
+        rndGen,
+        allGeometry,
+        cvMeshDict.subDict("surfaceConformation")
+    );
+
+    Info<< "Set up geometry in = "
+        << timer.cpuTimeIncrement() << " s." << nl << endl;
+
+
+
+    // Extend
+    treeBoundBox bb = geometryToConformTo.globalBounds();
+    {
+        const vector smallVec = 0.1*bb.span();
+        bb.min() -= smallVec;
+        bb.max() += smallVec;
+    }
+
+    Info<< "Meshing to bounding box " << bb << nl << endl;
+
+    const vector span(bb.span());
+    const vector d
+    (
+        span.x()/(n.x()-1),
+        span.y()/(n.y()-1),
+        span.z()/(n.z()-1)
+    );
+
+    MarchingCubes mc(span.x(), span.y(), span.z() ) ;
+    mc.set_resolution(n.x(), n.y(), n.z());
+    mc.init_all() ;
+
+
+    // Generate points
+    pointField points(mc.size_x()*mc.size_y()*mc.size_z());
+    label pointI = 0;
+
+    point pt;
+    for( int k = 0 ; k < mc.size_z() ; k++ )
+    {
+        pt.z() = bb.min().z() + k*d.z();
+        for( int j = 0 ; j < mc.size_y() ; j++ )
+        {
+            pt.y() = bb.min().y() + j*d.y();
+            for( int i = 0 ; i < mc.size_x() ; i++ )
+            {
+                pt.x() = bb.min().x() + i*d.x();
+                points[pointI++] = pt;
+            }
+        }
+    }
+
+    Info<< "Generated " << points.size() << " sampling points in = "
+        << timer.cpuTimeIncrement() << " s." << nl << endl;
+
+
+    // Compute data
+    const searchableSurfaces& geometry = geometryToConformTo.geometry();
+    const labelList& surfaces = geometryToConformTo.surfaces();
+
+    scalarField signedDist;
+    labelList nearestSurfaces;
+    searchableSurfacesQueries::signedDistance
+    (
+        geometry,
+        surfaces,
+        points,
+        scalarField(points.size(), sqr(GREAT)),
+        searchableSurface::OUTSIDE,     // for non-closed surfaces treat as
+                                        // outside
+        nearestSurfaces,
+        signedDist
+    );
+
+    // Fill elements
+    pointI = 0;
+    for( int k = 0 ; k < mc.size_z() ; k++ )
+    {
+        for( int j = 0 ; j < mc.size_y() ; j++ )
+        {
+            for( int i = 0 ; i < mc.size_x() ; i++ )
+            {
+                mc.set_data(float(signedDist[pointI++]), i, j, k);
+            }
+        }
+    }
+
+    Info<< "Determined signed distance in = "
+        << timer.cpuTimeIncrement() << " s." << nl << endl;
+
+
+    mc.run() ;
+
+    Info<< "Constructed iso surface in = "
+        << timer.cpuTimeIncrement() << " s." << nl << endl;
+
+
+    mc.clean_temps() ;
+
+
+
+    // Write output file
+    if (mc.ntrigs() > 0)
+    {
+        Triangle* triangles = mc.triangles();
+        List<labelledTri> tris(mc.ntrigs());
+        forAll(tris, triI)
+        {
+            tris[triI] = labelledTri
+            (
+                triangles[triI].v1,
+                triangles[triI].v2,
+                triangles[triI].v3,
+                0                       // region
+            );
+        }
+
+
+        Vertex* vertices = mc.vertices();
+        pointField points(mc.nverts());
+        forAll(points, pointI)
+        {
+            Vertex& v = vertices[pointI];
+            points[pointI] = point
+            (
+                bb.min().x() + v.x*span.x()/mc.size_x(),
+                bb.min().y() + v.y*span.y()/mc.size_y(),
+                bb.min().z() + v.z*span.z()/mc.size_z()
+            );
+        }
+
+
+        // Find correspondence to original surfaces
+        labelList regionOffsets(surfaces.size());
+        label nRegions = 0;
+        forAll(surfaces, i)
+        {
+            const wordList& regions = geometry[surfaces[i]].regions();
+            regionOffsets[i] = nRegions;
+            nRegions += regions.size();
+        }
+
+
+        geometricSurfacePatchList patches(nRegions);
+        nRegions = 0;
+        forAll(surfaces, i)
+        {
+            const wordList& regions = geometry[surfaces[i]].regions();
+
+            forAll(regions, regionI)
+            {
+                patches[nRegions] = geometricSurfacePatch
+                (
+                    "patch",
+                    geometry[surfaces[i]].name() + "_" + regions[regionI],
+                    nRegions
+                );
+                nRegions++;
+            }
+        }
+
+        triSurface s(tris, patches, points, true);
+
+        Info<< "Extracted triSurface in = "
+            << timer.cpuTimeIncrement() << " s." << nl << endl;
+
+
+        // Find out region on local surface of nearest point
+        {
+            List<pointIndexHit> hitInfo;
+            labelList hitSurfaces;
+            geometryToConformTo.findSurfaceNearest
+            (
+                s.faceCentres(),
+                scalarField(s.size(), sqr(GREAT)),
+                hitInfo,
+                hitSurfaces
+            );
+
+            // Get region
+            DynamicList<pointIndexHit> surfInfo(hitSurfaces.size());
+            DynamicList<label> surfIndices(hitSurfaces.size());
+
+            forAll(surfaces, surfI)
+            {
+                // Extract info on this surface
+                surfInfo.clear();
+                surfIndices.clear();
+                forAll(hitSurfaces, triI)
+                {
+                    if (hitSurfaces[triI] == surfI)
+                    {
+                        surfInfo.append(hitInfo[triI]);
+                        surfIndices.append(triI);
+                    }
+                }
+
+                // Calculate sideness of these surface points
+                labelList region;
+                geometry[surfaces[surfI]].getRegion(surfInfo, region);
+
+                forAll(region, i)
+                {
+                    label triI = surfIndices[i];
+                    s[triI].region() = regionOffsets[surfI]+region[i];
+                }
+            }
+        }
+
+        Info<< "Re-patched surface in = "
+            << timer.cpuTimeIncrement() << " s." << nl << endl;
+
+        triSurfaceMesh smesh
+        (
+            IOobject
+            (
+                exportName,
+                runTime.constant(), // instance
+                "triSurface",
+                runTime,            // registry
+                IOobject::NO_READ,
+                IOobject::AUTO_WRITE,
+                false
+            ),
+            s
+        );
+
+        Info<< "writing surfMesh:\n  "
+            << smesh.searchableSurface::objectPath() << nl << endl;
+        smesh.searchableSurface::write();
+
+        Info<< "Written surface in = "
+            << timer.cpuTimeIncrement() << " s." << nl << endl;
+    }
+
+    mc.clean_all() ;
+
+
+    Info<< "End\n" << endl;
+
+    return 0;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/cvMesh/vectorTools/vectorTools.H b/applications/utilities/mesh/generation/cvMesh/vectorTools/vectorTools.H
new file mode 100644
index 0000000000000000000000000000000000000000..9fb39a159bafbfb8de882cb4b469fbf6e7d14af8
--- /dev/null
+++ b/applications/utilities/mesh/generation/cvMesh/vectorTools/vectorTools.H
@@ -0,0 +1,157 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software: you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    OpenFOAM 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 General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::vectorTools
+
+Description
+    Functions for analysing the relationships between vectors
+
+SourceFiles
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef vectorTools_H
+#define vectorTools_H
+
+#include "vector.H"
+#include "unitConversion.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                      Namespace vectorTools Declaration
+\*---------------------------------------------------------------------------*/
+
+//- Collection of functions for testing relationships between two vectors.
+namespace vectorTools
+{
+    //- Test if a and b are parallel: a.b = 1
+    //  Uses the cross product, so the tolerance is proportional to
+    //  the sine of the angle between a and b in radians
+    template <typename T>
+    bool areParallel
+    (
+        const Vector<T>& a,
+        const Vector<T>& b,
+        const T& tolerance = SMALL
+    )
+    {
+        return (mag(a ^ b) < tolerance) ? true : false;
+//        return ( mag( mag(a & b)/(mag(a)*mag(b)) - 1.0 ) < tolerance )
+//               ? true
+//               : false;
+    }
+
+    //- Test if a and b are orthogonal: a.b = 0
+    //  Uses the dot product, so the tolerance is proportional to
+    //  the cosine of the angle between a and b in radians
+    template <typename T>
+    bool areOrthogonal
+    (
+        const Vector<T>& a,
+        const Vector<T>& b,
+        const T& tolerance = SMALL
+    )
+    {
+        return (mag(a & b) < tolerance) ? true : false;
+    }
+
+    //- Test if angle between a and b is acute: a.b > 0
+    template <typename T>
+    bool areAcute
+    (
+        const Vector<T>& a,
+        const Vector<T>& b
+    )
+    {
+        return ((a & b) > 0) ? true : false;
+    }
+
+    //- Test if angle between a and b is obtuse: a.b < 0
+    template <typename T>
+    bool areObtuse
+    (
+        const Vector<T>& a,
+        const Vector<T>& b
+    )
+    {
+        return ((a & b) < 0) ? true : false;
+    }
+
+    //- Calculate angle between a and b in radians
+    template <typename T>
+    T cosPhi
+    (
+        const Vector<T>& a,
+        const Vector<T>& b,
+        const T& tolerance = SMALL
+    )
+    {
+        scalar cosPhi = (a & b)/(mag(a)*mag(b) + tolerance);
+
+        // Enforce bounding between -1 and 1
+        return min(max(cosPhi, -1), 1);
+    }
+
+    //- Calculate angle between a and b in radians
+    template <typename T>
+    T radAngleBetween
+    (
+        const Vector<T>& a,
+        const Vector<T>& b,
+        const T& tolerance = SMALL
+    )
+    {
+        scalar cosPhi = (a & b)/(mag(a)*mag(b) + tolerance);
+
+        // Enforce bounding between -1 and 1
+        return acos( min(max(cosPhi, -1), 1) );
+    }
+
+    //- Calculate angle between a and b in degrees
+    template <typename T>
+    T degAngleBetween
+    (
+        const Vector<T>& a,
+        const Vector<T>& b,
+        const T& tolerance = SMALL
+    )
+    {
+        return radToDeg(radAngleBetween(a, b, tolerance));
+    }
+
+} // End namespace vectorTools
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/utilities/mesh/generation/extrude2DMesh/extrude2DMesh/extrude2DMesh/extrude2DMesh.C b/applications/utilities/mesh/generation/extrude2DMesh/extrude2DMesh/extrude2DMesh/extrude2DMesh.C
index 9b70418abc323a59c3c6096f2592c27e38a53230..0bbe7d926a16733c25ff9b63d58ffea347a39642 100644
--- a/applications/utilities/mesh/generation/extrude2DMesh/extrude2DMesh/extrude2DMesh/extrude2DMesh.C
+++ b/applications/utilities/mesh/generation/extrude2DMesh/extrude2DMesh/extrude2DMesh/extrude2DMesh.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -90,6 +90,7 @@ Foam::extrude2DMesh::extrude2DMesh
     dict_(dict),
     //patchDict_(dict.subDict("patchInfo")),
     model_(model),
+    modelType_(dict.lookup("extrudeModel")),
     patchType_(dict.lookup("patchType")),
     frontPatchI_(-1),
     backPatchI_(-1)
diff --git a/applications/utilities/mesh/generation/extrude2DMesh/extrude2DMesh/extrude2DMesh/extrude2DMesh.H b/applications/utilities/mesh/generation/extrude2DMesh/extrude2DMesh/extrude2DMesh/extrude2DMesh.H
index 0c5d143c0aab283dcdd892cee7360c541f1c83f0..3b6efd267efbcc44be597de5edac863b554c616d 100644
--- a/applications/utilities/mesh/generation/extrude2DMesh/extrude2DMesh/extrude2DMesh/extrude2DMesh.H
+++ b/applications/utilities/mesh/generation/extrude2DMesh/extrude2DMesh/extrude2DMesh/extrude2DMesh.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2012-2013 OpenFOAM Foundation
+    \\  /    A nd           | Copyright (C) 2012 OpenFOAM Foundation
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -53,9 +53,10 @@ class polyMesh;
 class polyTopoChange;
 class mapPolyMesh;
 class mapDistributePolyMesh;
+class polyBoundaryMesh;
 
 /*---------------------------------------------------------------------------*\
-                        Class extrude2DMesh Declaration
+                           Class extrude2DMesh Declaration
 \*---------------------------------------------------------------------------*/
 
 class extrude2DMesh
@@ -65,24 +66,19 @@ class extrude2DMesh
         //- Reference to 2D mesh
         polyMesh& mesh_;
 
-        //- Extrusion dictionary
         const dictionary dict_;
 
         //const dictionary patchDict_;
 
-        //- The extrusion model
         const extrudeModel& model_;
 
-        //- Type of the patches that will be created by the extrusion.
+        const word modelType_;
+
         const word patchType_;
 
-        //- Patch ID of the front patch
         label frontPatchI_;
-
-        //- Patch ID of the back patch
         label backPatchI_;
 
-
     // Private Member Functions
 
         //- Check the mesh is 2D
@@ -97,7 +93,6 @@ class extrude2DMesh
         //- Disallow default bitwise assignment
         void operator=(const extrude2DMesh&);
 
-
 public:
 
     //- Runtime type information
@@ -105,8 +100,6 @@ public:
 
 
     // Constructors
-
-        //- Construct from a 2D polyMesh, a dictionary and an extrusion model
         extrude2DMesh
         (
             polyMesh&,
@@ -121,36 +114,30 @@ public:
 
     // Member Functions
 
-        // Access
-
-            //- Return the patch ID of the front patch
-            inline label frontPatchI() const
-            {
-                return frontPatchI_;
-            }
-
-            //- Return the patch ID of the back patch
-            inline label backPatchI() const
-            {
-                return backPatchI_;
-            }
+        //- Add front and back patches
+        void addFrontBackPatches();
 
+        //- Play commands into polyTopoChange to extrude mesh.
+        void setRefinement(polyTopoChange&);
 
-        // Edit
+        //- Force recalculation of locally stored data on topological change
+        void updateMesh(const mapPolyMesh&)
+        {}
 
-            //- Add front and back patches
-            void addFrontBackPatches();
+        //- Force recalculation of locally stored data for mesh distribution
+        void distribute(const mapDistributePolyMesh&)
+        {}
 
-            //- Play commands into polyTopoChange to extrude mesh.
-            void setRefinement(polyTopoChange&);
+        label frontPatchI() const
+        {
+            return frontPatchI_;
+        }
 
-            //- Force recalculation of locally stored data on topological change
-            void updateMesh(const mapPolyMesh&)
-            {}
+        label backPatchI() const
+        {
+            return backPatchI_;
+        }
 
-            //- Force recalculation of locally stored data for mesh distribution
-            void distribute(const mapDistributePolyMesh&)
-            {}
 };
 
 
diff --git a/applications/utilities/mesh/generation/extrude2DMesh/extrude2DMeshDict b/applications/utilities/mesh/generation/extrude2DMesh/extrude2DMeshDict
index fa1b37b304968eb9c86fa12ae33ce6253e638e61..5e53c29c886fa05b2158b0d032d85b5f6ed148b7 100644
--- a/applications/utilities/mesh/generation/extrude2DMesh/extrude2DMeshDict
+++ b/applications/utilities/mesh/generation/extrude2DMesh/extrude2DMeshDict
@@ -5,48 +5,42 @@
 |   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
 |    \\/     M anipulation  |                                                 |
 \*---------------------------------------------------------------------------*/
+
 FoamFile
 {
-    version     2.0;
-    format      ascii;
-    class       dictionary;
-    object      extrude2DMeshDict;
+    version         2.0;
+    format          ascii;
+
+    root            "";
+    case            "";
+    instance        "";
+    local           "";
+
+    class           dictionary;
+    object          extrude2DMeshDict;
 }
+
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-// Type of extrusion
 extrudeModel        linearDirection;
 //extrudeModel        wedge;
 
-// Patch type the extruded patches will take
 patchType           empty;
 //patchType           wedge;
 
-// Number of layers to extrude
 nLayers             1;
 
-// Expansion ratio. If >1 then grows the layers
 expansionRatio      1.0;
 
 linearDirectionCoeffs
 {
-    // Direction of extrusion
     direction       (0 0 1);
-
-    // Width of newly extruded cells
     thickness       0.1;
 }
 
 wedgeCoeffs
 {
-    // Point the extrusion axis goes through
-    axisPt          (0 0 0);
-
-    // Axis to extrude around
-    axis            (1 0 0);
-
-    // Total angle of the wedge in degrees
-    angle           10;
+    axisPt      (0 0 0);
+    axis        (1 0 0);
+    angle       10;
 }
-
-// ************************************************************************* //
\ No newline at end of file
diff --git a/tutorials/mesh/cv2DMesh/OpenCFD/0.org/T b/tutorials/mesh/cv2DMesh/OpenCFD/0.org/T
new file mode 100644
index 0000000000000000000000000000000000000000..9a6eca29ca3969af30086bdf9e4daee75ef1799d
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/OpenCFD/0.org/T
@@ -0,0 +1,50 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    object      T;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 0 0 1 0 0 0];
+
+internalField   uniform 1;
+
+boundaryField
+{
+    box_inlet
+    {
+        type            fixedValue;
+        value           uniform 1;
+    }
+
+    box_outlet
+    {
+        type            zeroGradient;
+    }
+
+    box_bottom
+    {
+        type            zeroGradient;
+    }
+
+    box_top
+    {
+        type            zeroGradient;
+    }
+
+    letters_text
+    {
+        type            zeroGradient;
+    }
+}
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cv2DMesh/OpenCFD/0.org/U b/tutorials/mesh/cv2DMesh/OpenCFD/0.org/U
new file mode 100644
index 0000000000000000000000000000000000000000..8bfcf3d1780f8e110bb39e46e20a9ed4267a9971
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/OpenCFD/0.org/U
@@ -0,0 +1,59 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volVectorField;
+    object      U;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 1 -1 0 0 0 0];
+
+internalField   uniform (0 0 0);
+
+boundaryField
+{
+    box_inlet
+    {
+        type            fixedValue;
+        value           uniform (3 0 0);
+    }
+
+    box_outlet
+    {
+        type            zeroGradient;
+    }
+
+    box_bottom
+    {
+        type            supersonicFreestream;
+        UInf            (3 0 0);
+        pInf            1;
+        TInf            1;
+        gamma           1.4;
+    }
+
+    box_top
+    {
+        type            supersonicFreestream;
+        UInf            (3 0 0);
+        pInf            1;
+        TInf            1;
+        gamma           1.4;
+    }
+
+    letters_text
+    {
+        type            fixedValue;
+        value           uniform (0 0 0);
+    }
+}
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cv2DMesh/OpenCFD/0.org/p b/tutorials/mesh/cv2DMesh/OpenCFD/0.org/p
new file mode 100644
index 0000000000000000000000000000000000000000..634675e05c3a50c8ecf1659596a2c05af308bf98
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/OpenCFD/0.org/p
@@ -0,0 +1,51 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    object      p;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [1 -1 -2 0 0 0 0];
+
+internalField   uniform 1;
+
+boundaryField
+{
+    box_inlet
+    {
+        type            fixedValue;
+        value           uniform 1;
+    }
+
+    box_outlet
+    {
+        type            zeroGradient;
+    }
+
+    box_bottom
+    {
+        type            zeroGradient;
+    }
+
+    box_top
+    {
+        type            zeroGradient;
+    }
+
+    letters_text
+    {
+        type            zeroGradient;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cv2DMesh/OpenCFD/Allclean b/tutorials/mesh/cv2DMesh/OpenCFD/Allclean
new file mode 100755
index 0000000000000000000000000000000000000000..766547e755807945df7c6713bf32c6f18576fe0f
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/OpenCFD/Allclean
@@ -0,0 +1,15 @@
+#!/bin/sh
+cd ${0%/*} || exit 1    # run from this directory
+
+# Source tutorial run functions
+. $WM_PROJECT_DIR/bin/tools/CleanFunctions
+
+rm -rf constant/extendedFeatureEdgeMesh > /dev/null 2>&1
+rm -rf constant/triSurface/*.eMesh > /dev/null 2>&1
+rm -rf 0 > /dev/null 2>&1
+rm -rf MeshedSurface.obj > /dev/null 2>&1
+
+cleanCase
+
+
+# ----------------------------------------------------------------- end-of-file
diff --git a/tutorials/mesh/cv2DMesh/OpenCFD/Allrun b/tutorials/mesh/cv2DMesh/OpenCFD/Allrun
new file mode 100755
index 0000000000000000000000000000000000000000..c86f5608da82f9be64ba958861c15324ed4c9c8c
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/OpenCFD/Allrun
@@ -0,0 +1,15 @@
+#!/bin/sh
+cd ${0%/*} || exit 1    # run from this directory
+
+# Source tutorial run functions
+. $WM_PROJECT_DIR/bin/tools/RunFunctions
+
+cp system/controlDict.mesher system/controlDict
+
+runApplication surfaceFeatureExtract
+runApplication cv2DMesh -overwrite
+runApplication extrude2DMesh -overwrite polyMesh2D
+runApplication checkMesh -allGeometry -allTopology -constant -noZero
+
+
+# ----------------------------------------------------------------- end-of-file
diff --git a/tutorials/mesh/cv2DMesh/OpenCFD/Allrun-rhoCentralFoam b/tutorials/mesh/cv2DMesh/OpenCFD/Allrun-rhoCentralFoam
new file mode 100755
index 0000000000000000000000000000000000000000..a87455256146301b73272509a08181cf6c7b8506
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/OpenCFD/Allrun-rhoCentralFoam
@@ -0,0 +1,18 @@
+#!/bin/sh
+cd ${0%/*} || exit 1    # run from this directory
+
+# Source tutorial run functions
+. $WM_PROJECT_DIR/bin/tools/RunFunctions
+
+# Get the number of processors to run on from system/decomposeParDict
+nProcs=$(getNumberOfProcessors)
+
+cp system/controlDict.rhoCentralFoam system/controlDict
+cp -r 0.org 0
+
+runApplication decomposePar
+runParallel rhoCentralFoam $nProcs
+runApplication reconstructPar
+
+
+# ----------------------------------------------------------------- end-of-file
diff --git a/tutorials/mesh/cv2DMesh/OpenCFD/constant/thermophysicalProperties b/tutorials/mesh/cv2DMesh/OpenCFD/constant/thermophysicalProperties
new file mode 100644
index 0000000000000000000000000000000000000000..4f3963307118eeb9f80178bc25e7706e5661e3ef
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/OpenCFD/constant/thermophysicalProperties
@@ -0,0 +1,43 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "constant";
+    object      thermophysicalProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+thermoType      hePsiThermo<pureMixture<const<hConst<perfectGas<specie>>,sensibleEnthalpy>>>;
+
+// Note: these are the properties for a "normalised" inviscid gas
+//       for which the speed of sound is 1 m/s at a temperature of 1K
+//       and gamma = 7/5
+mixture
+{
+    specie
+    {
+        nMoles          1;
+        molWeight       11640.3;
+    }
+    thermodynamics
+    {
+        Cp              2.5;
+        Hf              0;
+    }
+    transport
+    {
+        mu              0;
+        Pr              1;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cv2DMesh/OpenCFD/constant/triSurface/opencfd_box.stl b/tutorials/mesh/cv2DMesh/OpenCFD/constant/triSurface/opencfd_box.stl
new file mode 100644
index 0000000000000000000000000000000000000000..dd250ea5ae9e21d687a26b84003155908e6f9405
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/OpenCFD/constant/triSurface/opencfd_box.stl
@@ -0,0 +1,96 @@
+solid back
+  facet normal 0 0 -1
+    outer loop
+       vertex -1.618703 -1.830978 -0.557967
+       vertex 4.82342 2.27362 -0.557967
+       vertex 4.82342 -1.830978 -0.557967
+    endloop
+  endfacet
+  facet normal 0 0 -1
+    outer loop
+       vertex -1.618703 -1.830978 -0.557967
+       vertex -1.618703 2.27362 -0.557967
+       vertex 4.82342 2.27362 -0.557967
+    endloop
+  endfacet
+endsolid back
+solid front
+  facet normal 0 0 1
+    outer loop
+       vertex 4.82342 2.27362 0.586404
+       vertex -1.618703 -1.830978 0.586404
+       vertex 4.82342 -1.830978 0.586404
+    endloop
+  endfacet
+  facet normal 0 0 1
+    outer loop
+       vertex 4.82342 2.27362 0.586404
+       vertex -1.618703 2.27362 0.586404
+       vertex -1.618703 -1.830978 0.586404
+    endloop
+  endfacet
+endsolid front
+solid bottom
+  facet normal -2.19049e-08 -1 2.0834e-07
+    outer loop
+       vertex -1.618703 -1.830978 0.586404
+       vertex -1.618703 -1.830978 -0.557967
+       vertex 4.82342 -1.830978 -0.557967
+    endloop
+  endfacet
+  facet normal -1.97144e-07 -1 -6.25021e-07
+    outer loop
+       vertex 4.82342 -1.830978 -0.557967
+       vertex 4.82342 -1.830978 0.586404
+       vertex -1.618703 -1.830978 0.586404
+    endloop
+  endfacet
+endsolid bottom
+solid top
+  facet normal 6.57148e-08 1 4.1668e-07
+    outer loop
+       vertex 4.82342 2.27362 0.586404
+       vertex 4.82342 2.27362 -0.557967
+       vertex -1.618703 2.27362 -0.557967
+    endloop
+  endfacet
+  facet normal 8.76197e-08 1 3.1251e-07
+    outer loop
+       vertex -1.618703 2.27362 -0.557967
+       vertex -1.618703 2.27362 0.586404
+       vertex 4.82342 2.27362 0.586404
+    endloop
+  endfacet
+endsolid top
+solid inlet
+  facet normal -1 2.54891e-07 -2.60425e-07
+    outer loop
+       vertex -1.618703 -1.830978 -0.557967
+       vertex -1.618703 2.27362 0.586404
+       vertex -1.618703 2.27362 -0.557967
+    endloop
+  endfacet
+  facet normal -1 1.69927e-07 -1.0417e-07
+    outer loop
+       vertex -1.618703 -1.830978 -0.557967
+       vertex -1.618703 -1.830978 0.586404
+       vertex -1.618703 2.27362 0.586404
+    endloop
+  endfacet
+endsolid inlet
+solid outlet
+  facet normal 1 0 8.33361e-07
+    outer loop
+       vertex 4.82342 2.27362 -0.557967
+       vertex 4.82342 -1.830978 0.586404
+       vertex 4.82342 -1.830978 -0.557967
+    endloop
+  endfacet
+  facet normal 1 -6.79708e-07 -4.16681e-07
+    outer loop
+       vertex 4.82342 2.27362 -0.557967
+       vertex 4.82342 2.27362 0.586404
+       vertex 4.82342 -1.830978 0.586404
+    endloop
+  endfacet
+endsolid outlet
diff --git a/tutorials/mesh/cv2DMesh/OpenCFD/constant/triSurface/opencfd_text.stl b/tutorials/mesh/cv2DMesh/OpenCFD/constant/triSurface/opencfd_text.stl
new file mode 100644
index 0000000000000000000000000000000000000000..0c289a16cf676609859671dc1a20b82b7f7e3195
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/OpenCFD/constant/triSurface/opencfd_text.stl
@@ -0,0 +1,16466 @@
+solid text
+  facet normal -0.0721417 -0.997394 -0
+    outer loop
+       vertex 0.436903 0.696938 0.489362
+       vertex 0.436903 0.696938 -0.510638
+       vertex 0.458558 0.695372 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0721417 -0.997394 0
+    outer loop
+       vertex 0.436903 0.696938 0.489362
+       vertex 0.458558 0.695372 -0.510638
+       vertex 0.458558 0.695372 0.489362
+    endloop
+  endfacet
+  facet normal -0.121287 -0.992617 -0
+    outer loop
+       vertex 0.458558 0.695372 0.489362
+       vertex 0.458558 0.695372 -0.510638
+       vertex 0.479633 0.692796 -0.510638
+    endloop
+  endfacet
+  facet normal -0.121287 -0.992617 0
+    outer loop
+       vertex 0.458558 0.695372 0.489362
+       vertex 0.479633 0.692796 -0.510638
+       vertex 0.479633 0.692796 0.489362
+    endloop
+  endfacet
+  facet normal -0.171015 -0.985268 -0
+    outer loop
+       vertex 0.479633 0.692796 0.489362
+       vertex 0.479633 0.692796 -0.510638
+       vertex 0.500116 0.689241 -0.510638
+    endloop
+  endfacet
+  facet normal -0.171015 -0.985268 0
+    outer loop
+       vertex 0.479633 0.692796 0.489362
+       vertex 0.500116 0.689241 -0.510638
+       vertex 0.500116 0.689241 0.489362
+    endloop
+  endfacet
+  facet normal -0.221101 -0.975251 -0
+    outer loop
+       vertex 0.500116 0.689241 0.489362
+       vertex 0.500116 0.689241 -0.510638
+       vertex 0.519992 0.684735 -0.510638
+    endloop
+  endfacet
+  facet normal -0.221101 -0.975251 0
+    outer loop
+       vertex 0.500116 0.689241 0.489362
+       vertex 0.519992 0.684735 -0.510638
+       vertex 0.519992 0.684735 0.489362
+    endloop
+  endfacet
+  facet normal -0.271312 -0.962492 -0
+    outer loop
+       vertex 0.519992 0.684735 0.489362
+       vertex 0.519992 0.684735 -0.510638
+       vertex 0.53925 0.679306 -0.510638
+    endloop
+  endfacet
+  facet normal -0.271312 -0.962492 0
+    outer loop
+       vertex 0.519992 0.684735 0.489362
+       vertex 0.53925 0.679306 -0.510638
+       vertex 0.53925 0.679306 0.489362
+    endloop
+  endfacet
+  facet normal -0.321405 -0.946942 -0
+    outer loop
+       vertex 0.53925 0.679306 0.489362
+       vertex 0.53925 0.679306 -0.510638
+       vertex 0.557876 0.672985 -0.510638
+    endloop
+  endfacet
+  facet normal -0.321405 -0.946942 0
+    outer loop
+       vertex 0.53925 0.679306 0.489362
+       vertex 0.557876 0.672985 -0.510638
+       vertex 0.557876 0.672985 0.489362
+    endloop
+  endfacet
+  facet normal -0.371124 -0.928583 -0
+    outer loop
+       vertex 0.557876 0.672985 0.489362
+       vertex 0.557876 0.672985 -0.510638
+       vertex 0.575857 0.665798 -0.510638
+    endloop
+  endfacet
+  facet normal -0.371124 -0.928583 0
+    outer loop
+       vertex 0.557876 0.672985 0.489362
+       vertex 0.575857 0.665798 -0.510638
+       vertex 0.575857 0.665798 0.489362
+    endloop
+  endfacet
+  facet normal -0.420217 -0.907424 -0
+    outer loop
+       vertex 0.575857 0.665798 0.489362
+       vertex 0.575857 0.665798 -0.510638
+       vertex 0.593179 0.657776 -0.510638
+    endloop
+  endfacet
+  facet normal -0.420217 -0.907424 0
+    outer loop
+       vertex 0.575857 0.665798 0.489362
+       vertex 0.593179 0.657776 -0.510638
+       vertex 0.593179 0.657776 0.489362
+    endloop
+  endfacet
+  facet normal -0.468435 -0.883498 -0
+    outer loop
+       vertex 0.593179 0.657776 0.489362
+       vertex 0.593179 0.657776 -0.510638
+       vertex 0.60983 0.648948 -0.510638
+    endloop
+  endfacet
+  facet normal -0.468435 -0.883498 0
+    outer loop
+       vertex 0.593179 0.657776 0.489362
+       vertex 0.60983 0.648948 -0.510638
+       vertex 0.60983 0.648948 0.489362
+    endloop
+  endfacet
+  facet normal -0.515532 -0.85687 -0
+    outer loop
+       vertex 0.60983 0.648948 0.489362
+       vertex 0.60983 0.648948 -0.510638
+       vertex 0.625797 0.639342 -0.510638
+    endloop
+  endfacet
+  facet normal -0.515532 -0.85687 0
+    outer loop
+       vertex 0.60983 0.648948 0.489362
+       vertex 0.625797 0.639342 -0.510638
+       vertex 0.625797 0.639342 0.489362
+    endloop
+  endfacet
+  facet normal -0.561277 -0.827628 -0
+    outer loop
+       vertex 0.625797 0.639342 0.489362
+       vertex 0.625797 0.639342 -0.510638
+       vertex 0.641066 0.628986 -0.510638
+    endloop
+  endfacet
+  facet normal -0.561277 -0.827628 0
+    outer loop
+       vertex 0.625797 0.639342 0.489362
+       vertex 0.641066 0.628986 -0.510638
+       vertex 0.641066 0.628986 0.489362
+    endloop
+  endfacet
+  facet normal -0.605455 -0.795879 -0
+    outer loop
+       vertex 0.641066 0.628986 0.489362
+       vertex 0.641066 0.628986 -0.510638
+       vertex 0.655625 0.617911 -0.510638
+    endloop
+  endfacet
+  facet normal -0.605455 -0.795879 0
+    outer loop
+       vertex 0.641066 0.628986 0.489362
+       vertex 0.655625 0.617911 -0.510638
+       vertex 0.655625 0.617911 0.489362
+    endloop
+  endfacet
+  facet normal -0.647866 -0.761754 -0
+    outer loop
+       vertex 0.655625 0.617911 0.489362
+       vertex 0.655625 0.617911 -0.510638
+       vertex 0.669459 0.606145 -0.510638
+    endloop
+  endfacet
+  facet normal -0.647866 -0.761754 0
+    outer loop
+       vertex 0.655625 0.617911 0.489362
+       vertex 0.669459 0.606145 -0.510638
+       vertex 0.669459 0.606145 0.489362
+    endloop
+  endfacet
+  facet normal -0.68833 -0.725398 -0
+    outer loop
+       vertex 0.669459 0.606145 0.489362
+       vertex 0.669459 0.606145 -0.510638
+       vertex 0.682557 0.593716 -0.510638
+    endloop
+  endfacet
+  facet normal -0.68833 -0.725398 0
+    outer loop
+       vertex 0.669459 0.606145 0.489362
+       vertex 0.682557 0.593716 -0.510638
+       vertex 0.682557 0.593716 0.489362
+    endloop
+  endfacet
+  facet normal -0.726691 -0.686964 -0
+    outer loop
+       vertex 0.682557 0.593716 0.489362
+       vertex 0.682557 0.593716 -0.510638
+       vertex 0.694905 0.580655 -0.510638
+    endloop
+  endfacet
+  facet normal -0.726691 -0.686964 0
+    outer loop
+       vertex 0.682557 0.593716 0.489362
+       vertex 0.694905 0.580655 -0.510638
+       vertex 0.694905 0.580655 0.489362
+    endloop
+  endfacet
+  facet normal -0.76281 -0.646623 -0
+    outer loop
+       vertex 0.694905 0.580655 0.489362
+       vertex 0.694905 0.580655 -0.510638
+       vertex 0.70649 0.566988 -0.510638
+    endloop
+  endfacet
+  facet normal -0.76281 -0.646623 0
+    outer loop
+       vertex 0.694905 0.580655 0.489362
+       vertex 0.70649 0.566988 -0.510638
+       vertex 0.70649 0.566988 0.489362
+    endloop
+  endfacet
+  facet normal -0.796576 -0.604539 -0
+    outer loop
+       vertex 0.70649 0.566988 0.489362
+       vertex 0.70649 0.566988 -0.510638
+       vertex 0.717298 0.552746 -0.510638
+    endloop
+  endfacet
+  facet normal -0.796576 -0.604539 0
+    outer loop
+       vertex 0.70649 0.566988 0.489362
+       vertex 0.717298 0.552746 -0.510638
+       vertex 0.717298 0.552746 0.489362
+    endloop
+  endfacet
+  facet normal -0.82789 -0.56089 -0
+    outer loop
+       vertex 0.717298 0.552746 0.489362
+       vertex 0.717298 0.552746 -0.510638
+       vertex 0.727317 0.537958 -0.510638
+    endloop
+  endfacet
+  facet normal -0.82789 -0.56089 0
+    outer loop
+       vertex 0.717298 0.552746 0.489362
+       vertex 0.727317 0.537958 -0.510638
+       vertex 0.727317 0.537958 0.489362
+    endloop
+  endfacet
+  facet normal -0.856678 -0.515851 -0
+    outer loop
+       vertex 0.727317 0.537958 0.489362
+       vertex 0.727317 0.537958 -0.510638
+       vertex 0.736534 0.522652 -0.510638
+    endloop
+  endfacet
+  facet normal -0.856678 -0.515851 0
+    outer loop
+       vertex 0.727317 0.537958 0.489362
+       vertex 0.736534 0.522652 -0.510638
+       vertex 0.736534 0.522652 0.489362
+    endloop
+  endfacet
+  facet normal -0.882885 -0.46959 -0
+    outer loop
+       vertex 0.736534 0.522652 0.489362
+       vertex 0.736534 0.522652 -0.510638
+       vertex 0.744935 0.506856 -0.510638
+    endloop
+  endfacet
+  facet normal -0.882885 -0.46959 0
+    outer loop
+       vertex 0.736534 0.522652 0.489362
+       vertex 0.744935 0.506856 -0.510638
+       vertex 0.744935 0.506856 0.489362
+    endloop
+  endfacet
+  facet normal -0.906467 -0.422278 -0
+    outer loop
+       vertex 0.744935 0.506856 0.489362
+       vertex 0.744935 0.506856 -0.510638
+       vertex 0.752508 0.490601 -0.510638
+    endloop
+  endfacet
+  facet normal -0.906467 -0.422278 0
+    outer loop
+       vertex 0.744935 0.506856 0.489362
+       vertex 0.752508 0.490601 -0.510638
+       vertex 0.752508 0.490601 0.489362
+    endloop
+  endfacet
+  facet normal -0.927396 -0.37408 -0
+    outer loop
+       vertex 0.752508 0.490601 0.489362
+       vertex 0.752508 0.490601 -0.510638
+       vertex 0.759238 0.473915 -0.510638
+    endloop
+  endfacet
+  facet normal -0.927396 -0.37408 0
+    outer loop
+       vertex 0.752508 0.490601 0.489362
+       vertex 0.759238 0.473915 -0.510638
+       vertex 0.759238 0.473915 0.489362
+    endloop
+  endfacet
+  facet normal -0.945659 -0.325161 -0
+    outer loop
+       vertex 0.759238 0.473915 0.489362
+       vertex 0.759238 0.473915 -0.510638
+       vertex 0.765114 0.456826 -0.510638
+    endloop
+  endfacet
+  facet normal -0.945659 -0.325161 0
+    outer loop
+       vertex 0.759238 0.473915 0.489362
+       vertex 0.765114 0.456826 -0.510638
+       vertex 0.765114 0.456826 0.489362
+    endloop
+  endfacet
+  facet normal -0.961252 -0.275673 -0
+    outer loop
+       vertex 0.765114 0.456826 0.489362
+       vertex 0.765114 0.456826 -0.510638
+       vertex 0.770122 0.439365 -0.510638
+    endloop
+  endfacet
+  facet normal -0.961252 -0.275673 0
+    outer loop
+       vertex 0.765114 0.456826 0.489362
+       vertex 0.770122 0.439365 -0.510638
+       vertex 0.770122 0.439365 0.489362
+    endloop
+  endfacet
+  facet normal -0.97418 -0.225773 -0
+    outer loop
+       vertex 0.770122 0.439365 0.489362
+       vertex 0.770122 0.439365 -0.510638
+       vertex 0.774249 0.421558 -0.510638
+    endloop
+  endfacet
+  facet normal -0.97418 -0.225773 0
+    outer loop
+       vertex 0.770122 0.439365 0.489362
+       vertex 0.774249 0.421558 -0.510638
+       vertex 0.774249 0.421558 0.489362
+    endloop
+  endfacet
+  facet normal -0.984461 -0.175603 -0
+    outer loop
+       vertex 0.774249 0.421558 0.489362
+       vertex 0.774249 0.421558 -0.510638
+       vertex 0.777481 0.403436 -0.510638
+    endloop
+  endfacet
+  facet normal -0.984461 -0.175603 0
+    outer loop
+       vertex 0.774249 0.421558 0.489362
+       vertex 0.777481 0.403436 -0.510638
+       vertex 0.777481 0.403436 0.489362
+    endloop
+  endfacet
+  facet normal -0.992117 -0.125314 -0
+    outer loop
+       vertex 0.777481 0.403436 0.489362
+       vertex 0.777481 0.403436 -0.510638
+       vertex 0.779806 0.385028 -0.510638
+    endloop
+  endfacet
+  facet normal -0.992117 -0.125314 0
+    outer loop
+       vertex 0.777481 0.403436 0.489362
+       vertex 0.779806 0.385028 -0.510638
+       vertex 0.779806 0.385028 0.489362
+    endloop
+  endfacet
+  facet normal -0.99718 -0.0750412 -0
+    outer loop
+       vertex 0.779806 0.385028 0.489362
+       vertex 0.779806 0.385028 -0.510638
+       vertex 0.781211 0.366362 -0.510638
+    endloop
+  endfacet
+  facet normal -0.99718 -0.0750412 0
+    outer loop
+       vertex 0.779806 0.385028 0.489362
+       vertex 0.781211 0.366362 -0.510638
+       vertex 0.781211 0.366362 0.489362
+    endloop
+  endfacet
+  facet normal -0.999689 -0.0249285 -0
+    outer loop
+       vertex 0.781211 0.366362 0.489362
+       vertex 0.781211 0.366362 -0.510638
+       vertex 0.781682 0.347466 -0.510638
+    endloop
+  endfacet
+  facet normal -0.999689 -0.0249285 0
+    outer loop
+       vertex 0.781211 0.366362 0.489362
+       vertex 0.781682 0.347466 -0.510638
+       vertex 0.781682 0.347466 0.489362
+    endloop
+  endfacet
+  facet normal -0.999687 0.0249986 0
+    outer loop
+       vertex 0.781682 0.347466 0.489362
+       vertex 0.781682 0.347466 -0.510638
+       vertex 0.781224 0.329132 -0.510638
+    endloop
+  endfacet
+  facet normal -0.999687 0.0249986 0
+    outer loop
+       vertex 0.781682 0.347466 0.489362
+       vertex 0.781224 0.329132 -0.510638
+       vertex 0.781224 0.329132 0.489362
+    endloop
+  endfacet
+  facet normal -0.99718 0.0750475 0
+    outer loop
+       vertex 0.781224 0.329132 0.489362
+       vertex 0.781224 0.329132 -0.510638
+       vertex 0.779855 0.31095 -0.510638
+    endloop
+  endfacet
+  facet normal -0.99718 0.0750475 0
+    outer loop
+       vertex 0.781224 0.329132 0.489362
+       vertex 0.779855 0.31095 -0.510638
+       vertex 0.779855 0.31095 0.489362
+    endloop
+  endfacet
+  facet normal -0.99215 0.125057 0
+    outer loop
+       vertex 0.779855 0.31095 0.489362
+       vertex 0.779855 0.31095 -0.510638
+       vertex 0.777587 0.292954 -0.510638
+    endloop
+  endfacet
+  facet normal -0.99215 0.125057 0
+    outer loop
+       vertex 0.779855 0.31095 0.489362
+       vertex 0.777587 0.292954 -0.510638
+       vertex 0.777587 0.292954 0.489362
+    endloop
+  endfacet
+  facet normal -0.984582 0.174923 0
+    outer loop
+       vertex 0.777587 0.292954 0.489362
+       vertex 0.777587 0.292954 -0.510638
+       vertex 0.774429 0.275177 -0.510638
+    endloop
+  endfacet
+  facet normal -0.984582 0.174923 0
+    outer loop
+       vertex 0.777587 0.292954 0.489362
+       vertex 0.774429 0.275177 -0.510638
+       vertex 0.774429 0.275177 0.489362
+    endloop
+  endfacet
+  facet normal -0.974465 0.22454 0
+    outer loop
+       vertex 0.774429 0.275177 0.489362
+       vertex 0.774429 0.275177 -0.510638
+       vertex 0.77039 0.257652 -0.510638
+    endloop
+  endfacet
+  facet normal -0.974465 0.22454 0
+    outer loop
+       vertex 0.774429 0.275177 0.489362
+       vertex 0.77039 0.257652 -0.510638
+       vertex 0.77039 0.257652 0.489362
+    endloop
+  endfacet
+  facet normal -0.961785 0.273806 0
+    outer loop
+       vertex 0.77039 0.257652 0.489362
+       vertex 0.77039 0.257652 -0.510638
+       vertex 0.765482 0.24041 -0.510638
+    endloop
+  endfacet
+  facet normal -0.961785 0.273806 0
+    outer loop
+       vertex 0.77039 0.257652 0.489362
+       vertex 0.765482 0.24041 -0.510638
+       vertex 0.765482 0.24041 0.489362
+    endloop
+  endfacet
+  facet normal -0.94653 0.322617 0
+    outer loop
+       vertex 0.765482 0.24041 0.489362
+       vertex 0.765482 0.24041 -0.510638
+       vertex 0.759714 0.223487 -0.510638
+    endloop
+  endfacet
+  facet normal -0.94653 0.322617 0
+    outer loop
+       vertex 0.765482 0.24041 0.489362
+       vertex 0.759714 0.223487 -0.510638
+       vertex 0.759714 0.223487 0.489362
+    endloop
+  endfacet
+  facet normal -0.928692 0.370853 0
+    outer loop
+       vertex 0.759714 0.223487 0.489362
+       vertex 0.759714 0.223487 -0.510638
+       vertex 0.753095 0.206913 -0.510638
+    endloop
+  endfacet
+  facet normal -0.928692 0.370853 0
+    outer loop
+       vertex 0.759714 0.223487 0.489362
+       vertex 0.753095 0.206913 -0.510638
+       vertex 0.753095 0.206913 0.489362
+    endloop
+  endfacet
+  facet normal -0.908263 0.4184 0
+    outer loop
+       vertex 0.753095 0.206913 0.489362
+       vertex 0.753095 0.206913 -0.510638
+       vertex 0.745637 0.190722 -0.510638
+    endloop
+  endfacet
+  facet normal -0.908263 0.4184 0
+    outer loop
+       vertex 0.753095 0.206913 0.489362
+       vertex 0.745637 0.190722 -0.510638
+       vertex 0.745637 0.190722 0.489362
+    endloop
+  endfacet
+  facet normal -0.885243 0.465129 0
+    outer loop
+       vertex 0.745637 0.190722 0.489362
+       vertex 0.745637 0.190722 -0.510638
+       vertex 0.737349 0.174948 -0.510638
+    endloop
+  endfacet
+  facet normal -0.885243 0.465129 0
+    outer loop
+       vertex 0.745637 0.190722 0.489362
+       vertex 0.737349 0.174948 -0.510638
+       vertex 0.737349 0.174948 0.489362
+    endloop
+  endfacet
+  facet normal -0.85964 0.5109 0
+    outer loop
+       vertex 0.737349 0.174948 0.489362
+       vertex 0.737349 0.174948 -0.510638
+       vertex 0.72824 0.159622 -0.510638
+    endloop
+  endfacet
+  facet normal -0.85964 0.5109 0
+    outer loop
+       vertex 0.737349 0.174948 0.489362
+       vertex 0.72824 0.159622 -0.510638
+       vertex 0.72824 0.159622 0.489362
+    endloop
+  endfacet
+  facet normal -0.83147 0.55557 0
+    outer loop
+       vertex 0.72824 0.159622 0.489362
+       vertex 0.72824 0.159622 -0.510638
+       vertex 0.718322 0.144778 -0.510638
+    endloop
+  endfacet
+  facet normal -0.83147 0.55557 0
+    outer loop
+       vertex 0.72824 0.159622 0.489362
+       vertex 0.718322 0.144778 -0.510638
+       vertex 0.718322 0.144778 0.489362
+    endloop
+  endfacet
+  facet normal -0.800765 0.598978 0
+    outer loop
+       vertex 0.718322 0.144778 0.489362
+       vertex 0.718322 0.144778 -0.510638
+       vertex 0.707604 0.130449 -0.510638
+    endloop
+  endfacet
+  facet normal -0.800765 0.598978 0
+    outer loop
+       vertex 0.718322 0.144778 0.489362
+       vertex 0.707604 0.130449 -0.510638
+       vertex 0.707604 0.130449 0.489362
+    endloop
+  endfacet
+  facet normal -0.767573 0.640961 0
+    outer loop
+       vertex 0.707604 0.130449 0.489362
+       vertex 0.707604 0.130449 -0.510638
+       vertex 0.696095 0.116668 -0.510638
+    endloop
+  endfacet
+  facet normal -0.767573 0.640961 0
+    outer loop
+       vertex 0.707604 0.130449 0.489362
+       vertex 0.696095 0.116668 -0.510638
+       vertex 0.696095 0.116668 0.489362
+    endloop
+  endfacet
+  facet normal -0.731961 0.681346 0
+    outer loop
+       vertex 0.696095 0.116668 0.489362
+       vertex 0.696095 0.116668 -0.510638
+       vertex 0.683807 0.103466 -0.510638
+    endloop
+  endfacet
+  facet normal -0.731961 0.681346 0
+    outer loop
+       vertex 0.696095 0.116668 0.489362
+       vertex 0.683807 0.103466 -0.510638
+       vertex 0.683807 0.103466 0.489362
+    endloop
+  endfacet
+  facet normal -0.694019 0.719957 0
+    outer loop
+       vertex 0.683807 0.103466 0.489362
+       vertex 0.683807 0.103466 -0.510638
+       vertex 0.670749 0.0908786 -0.510638
+    endloop
+  endfacet
+  facet normal -0.694019 0.719957 0
+    outer loop
+       vertex 0.683807 0.103466 0.489362
+       vertex 0.670749 0.0908786 -0.510638
+       vertex 0.670749 0.0908786 0.489362
+    endloop
+  endfacet
+  facet normal -0.653859 0.756616 0
+    outer loop
+       vertex 0.670749 0.0908786 0.489362
+       vertex 0.670749 0.0908786 -0.510638
+       vertex 0.65693 0.0789369 -0.510638
+    endloop
+  endfacet
+  facet normal -0.653859 0.756616 0
+    outer loop
+       vertex 0.670749 0.0908786 0.489362
+       vertex 0.65693 0.0789369 -0.510638
+       vertex 0.65693 0.0789369 0.489362
+    endloop
+  endfacet
+  facet normal -0.611623 0.791149 0
+    outer loop
+       vertex 0.65693 0.0789369 0.489362
+       vertex 0.65693 0.0789369 -0.510638
+       vertex 0.642362 0.0676744 -0.510638
+    endloop
+  endfacet
+  facet normal -0.611623 0.791149 0
+    outer loop
+       vertex 0.65693 0.0789369 0.489362
+       vertex 0.642362 0.0676744 -0.510638
+       vertex 0.642362 0.0676744 0.489362
+    endloop
+  endfacet
+  facet normal -0.56748 0.823387 0
+    outer loop
+       vertex 0.642362 0.0676744 0.489362
+       vertex 0.642362 0.0676744 -0.510638
+       vertex 0.627054 0.0571239 -0.510638
+    endloop
+  endfacet
+  facet normal -0.56748 0.823387 0
+    outer loop
+       vertex 0.642362 0.0676744 0.489362
+       vertex 0.627054 0.0571239 -0.510638
+       vertex 0.627054 0.0571239 0.489362
+    endloop
+  endfacet
+  facet normal -0.521621 0.853177 0
+    outer loop
+       vertex 0.627054 0.0571239 0.489362
+       vertex 0.627054 0.0571239 -0.510638
+       vertex 0.611015 0.0473182 -0.510638
+    endloop
+  endfacet
+  facet normal -0.521621 0.853177 0
+    outer loop
+       vertex 0.627054 0.0571239 0.489362
+       vertex 0.611015 0.0473182 -0.510638
+       vertex 0.611015 0.0473182 0.489362
+    endloop
+  endfacet
+  facet normal -0.474268 0.88038 0
+    outer loop
+       vertex 0.611015 0.0473182 0.489362
+       vertex 0.611015 0.0473182 -0.510638
+       vertex 0.594257 0.0382904 -0.510638
+    endloop
+  endfacet
+  facet normal -0.474268 0.88038 0
+    outer loop
+       vertex 0.611015 0.0473182 0.489362
+       vertex 0.594257 0.0382904 -0.510638
+       vertex 0.594257 0.0382904 0.489362
+    endloop
+  endfacet
+  facet normal -0.425661 0.904883 0
+    outer loop
+       vertex 0.594257 0.0382904 0.489362
+       vertex 0.594257 0.0382904 -0.510638
+       vertex 0.576789 0.0300732 -0.510638
+    endloop
+  endfacet
+  facet normal -0.425661 0.904883 0
+    outer loop
+       vertex 0.594257 0.0382904 0.489362
+       vertex 0.576789 0.0300732 -0.510638
+       vertex 0.576789 0.0300732 0.489362
+    endloop
+  endfacet
+  facet normal -0.37606 0.926596 0
+    outer loop
+       vertex 0.576789 0.0300732 0.489362
+       vertex 0.576789 0.0300732 -0.510638
+       vertex 0.55862 0.0226996 -0.510638
+    endloop
+  endfacet
+  facet normal -0.37606 0.926596 0
+    outer loop
+       vertex 0.576789 0.0300732 0.489362
+       vertex 0.55862 0.0226996 -0.510638
+       vertex 0.55862 0.0226996 0.489362
+    endloop
+  endfacet
+  facet normal -0.325736 0.945461 0
+    outer loop
+       vertex 0.55862 0.0226996 0.489362
+       vertex 0.55862 0.0226996 -0.510638
+       vertex 0.539762 0.0162024 -0.510638
+    endloop
+  endfacet
+  facet normal -0.325736 0.945461 0
+    outer loop
+       vertex 0.55862 0.0226996 0.489362
+       vertex 0.539762 0.0162024 -0.510638
+       vertex 0.539762 0.0162024 0.489362
+    endloop
+  endfacet
+  facet normal -0.27497 0.961453 0
+    outer loop
+       vertex 0.539762 0.0162024 0.489362
+       vertex 0.539762 0.0162024 -0.510638
+       vertex 0.520224 0.0106145 -0.510638
+    endloop
+  endfacet
+  facet normal -0.27497 0.961453 0
+    outer loop
+       vertex 0.539762 0.0162024 0.489362
+       vertex 0.520224 0.0106145 -0.510638
+       vertex 0.520224 0.0106145 0.489362
+    endloop
+  endfacet
+  facet normal -0.224043 0.974579 0
+    outer loop
+       vertex 0.520224 0.0106145 0.489362
+       vertex 0.520224 0.0106145 -0.510638
+       vertex 0.500015 0.00596891 -0.510638
+    endloop
+  endfacet
+  facet normal -0.224043 0.974579 0
+    outer loop
+       vertex 0.520224 0.0106145 0.489362
+       vertex 0.500015 0.00596891 -0.510638
+       vertex 0.500015 0.00596891 0.489362
+    endloop
+  endfacet
+  facet normal -0.17323 0.984881 0
+    outer loop
+       vertex 0.500015 0.00596891 0.489362
+       vertex 0.500015 0.00596891 -0.510638
+       vertex 0.479147 0.00229839 -0.510638
+    endloop
+  endfacet
+  facet normal -0.17323 0.984881 0
+    outer loop
+       vertex 0.500015 0.00596891 0.489362
+       vertex 0.479147 0.00229839 -0.510638
+       vertex 0.479147 0.00229839 0.489362
+    endloop
+  endfacet
+  facet normal -0.122796 0.992432 0
+    outer loop
+       vertex 0.479147 0.00229839 0.489362
+       vertex 0.479147 0.00229839 -0.510638
+       vertex 0.457629 -0.00036413 -0.510638
+    endloop
+  endfacet
+  facet normal -0.122796 0.992432 0
+    outer loop
+       vertex 0.479147 0.00229839 0.489362
+       vertex 0.457629 -0.00036413 -0.510638
+       vertex 0.457629 -0.00036413 0.489362
+    endloop
+  endfacet
+  facet normal -0.0729886 0.997333 0
+    outer loop
+       vertex 0.457629 -0.00036413 0.489362
+       vertex 0.457629 -0.00036413 -0.510638
+       vertex 0.43547 -0.00198576 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0729886 0.997333 0
+    outer loop
+       vertex 0.457629 -0.00036413 0.489362
+       vertex 0.43547 -0.00198576 -0.510638
+       vertex 0.43547 -0.00198576 0.489362
+    endloop
+  endfacet
+  facet normal -0.0240339 0.999711 0
+    outer loop
+       vertex 0.43547 -0.00198576 0.489362
+       vertex 0.43547 -0.00198576 -0.510638
+       vertex 0.412682 -0.00253361 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0240339 0.999711 0
+    outer loop
+       vertex 0.43547 -0.00198576 0.489362
+       vertex 0.412682 -0.00253361 -0.510638
+       vertex 0.412682 -0.00253361 0.489362
+    endloop
+  endfacet
+  facet normal 0.024717 0.999694 0
+    outer loop
+       vertex 0.412682 -0.00253361 0.489362
+       vertex 0.412682 -0.00253361 -0.510638
+       vertex 0.390658 -0.00198906 -0.510638
+    endloop
+  endfacet
+  facet normal 0.024717 0.999694 0
+    outer loop
+       vertex 0.412682 -0.00253361 0.489362
+       vertex 0.390658 -0.00198906 -0.510638
+       vertex 0.390658 -0.00198906 0.489362
+    endloop
+  endfacet
+  facet normal 0.0749079 0.99719 0
+    outer loop
+       vertex 0.390658 -0.00198906 0.489362
+       vertex 0.390658 -0.00198906 -0.510638
+       vertex 0.369193 -0.000376658 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0749079 0.99719 0
+    outer loop
+       vertex 0.390658 -0.00198906 0.489362
+       vertex 0.369193 -0.000376658 -0.510638
+       vertex 0.369193 -0.000376658 0.489362
+    endloop
+  endfacet
+  facet normal 0.12574 0.992063 0
+    outer loop
+       vertex 0.369193 -0.000376658 0.489362
+       vertex 0.369193 -0.000376658 -0.510638
+       vertex 0.348301 0.00227131 -0.510638
+    endloop
+  endfacet
+  facet normal 0.12574 0.992063 0
+    outer loop
+       vertex 0.369193 -0.000376658 0.489362
+       vertex 0.348301 0.00227131 -0.510638
+       vertex 0.348301 0.00227131 0.489362
+    endloop
+  endfacet
+  facet normal 0.176977 0.984215 0
+    outer loop
+       vertex 0.348301 0.00227131 0.489362
+       vertex 0.348301 0.00227131 -0.510638
+       vertex 0.327995 0.0059226 -0.510638
+    endloop
+  endfacet
+  facet normal 0.176977 0.984215 0
+    outer loop
+       vertex 0.348301 0.00227131 0.489362
+       vertex 0.327995 0.0059226 -0.510638
+       vertex 0.327995 0.0059226 0.489362
+    endloop
+  endfacet
+  facet normal 0.228362 0.973576 0
+    outer loop
+       vertex 0.327995 0.0059226 0.489362
+       vertex 0.327995 0.0059226 -0.510638
+       vertex 0.308289 0.010545 -0.510638
+    endloop
+  endfacet
+  facet normal 0.228362 0.973576 0
+    outer loop
+       vertex 0.327995 0.0059226 0.489362
+       vertex 0.308289 0.010545 -0.510638
+       vertex 0.308289 0.010545 0.489362
+    endloop
+  endfacet
+  facet normal 0.279633 0.960107 0
+    outer loop
+       vertex 0.308289 0.010545 0.489362
+       vertex 0.308289 0.010545 -0.510638
+       vertex 0.289194 0.0161063 -0.510638
+    endloop
+  endfacet
+  facet normal 0.279633 0.960107 0
+    outer loop
+       vertex 0.308289 0.010545 0.489362
+       vertex 0.289194 0.0161063 -0.510638
+       vertex 0.289194 0.0161063 0.489362
+    endloop
+  endfacet
+  facet normal 0.330522 0.943798 0
+    outer loop
+       vertex 0.289194 0.0161063 0.489362
+       vertex 0.289194 0.0161063 -0.510638
+       vertex 0.270725 0.0225743 -0.510638
+    endloop
+  endfacet
+  facet normal 0.330522 0.943798 0
+    outer loop
+       vertex 0.289194 0.0161063 0.489362
+       vertex 0.270725 0.0225743 -0.510638
+       vertex 0.270725 0.0225743 0.489362
+    endloop
+  endfacet
+  facet normal 0.380766 0.924672 0
+    outer loop
+       vertex 0.270725 0.0225743 0.489362
+       vertex 0.270725 0.0225743 -0.510638
+       vertex 0.252894 0.0299167 -0.510638
+    endloop
+  endfacet
+  facet normal 0.380766 0.924672 0
+    outer loop
+       vertex 0.270725 0.0225743 0.489362
+       vertex 0.252894 0.0299167 -0.510638
+       vertex 0.252894 0.0299167 0.489362
+    endloop
+  endfacet
+  facet normal 0.430109 0.902777 0
+    outer loop
+       vertex 0.252894 0.0299167 0.489362
+       vertex 0.252894 0.0299167 -0.510638
+       vertex 0.235715 0.0381013 -0.510638
+    endloop
+  endfacet
+  facet normal 0.430109 0.902777 0
+    outer loop
+       vertex 0.252894 0.0299167 0.489362
+       vertex 0.235715 0.0381013 -0.510638
+       vertex 0.235715 0.0381013 0.489362
+    endloop
+  endfacet
+  facet normal 0.478308 0.878192 0
+    outer loop
+       vertex 0.235715 0.0381013 0.489362
+       vertex 0.235715 0.0381013 -0.510638
+       vertex 0.219201 0.0470959 -0.510638
+    endloop
+  endfacet
+  facet normal 0.478308 0.878192 0
+    outer loop
+       vertex 0.235715 0.0381013 0.489362
+       vertex 0.219201 0.0470959 -0.510638
+       vertex 0.219201 0.0470959 0.489362
+    endloop
+  endfacet
+  facet normal 0.52514 0.851016 0
+    outer loop
+       vertex 0.219201 0.0470959 0.489362
+       vertex 0.219201 0.0470959 -0.510638
+       vertex 0.203364 0.0568684 -0.510638
+    endloop
+  endfacet
+  facet normal 0.52514 0.851016 0
+    outer loop
+       vertex 0.219201 0.0470959 0.489362
+       vertex 0.203364 0.0568684 -0.510638
+       vertex 0.203364 0.0568684 0.489362
+    endloop
+  endfacet
+  facet normal 0.570398 0.821369 0
+    outer loop
+       vertex 0.203364 0.0568684 0.489362
+       vertex 0.203364 0.0568684 -0.510638
+       vertex 0.188218 0.0673863 -0.510638
+    endloop
+  endfacet
+  facet normal 0.570398 0.821369 0
+    outer loop
+       vertex 0.203364 0.0568684 0.489362
+       vertex 0.188218 0.0673863 -0.510638
+       vertex 0.188218 0.0673863 0.489362
+    endloop
+  endfacet
+  facet normal 0.613899 0.789385 0
+    outer loop
+       vertex 0.188218 0.0673863 0.489362
+       vertex 0.188218 0.0673863 -0.510638
+       vertex 0.173776 0.0786176 -0.510638
+    endloop
+  endfacet
+  facet normal 0.613899 0.789385 0
+    outer loop
+       vertex 0.188218 0.0673863 0.489362
+       vertex 0.173776 0.0786176 -0.510638
+       vertex 0.173776 0.0786176 0.489362
+    endloop
+  endfacet
+  facet normal 0.655486 0.755208 0
+    outer loop
+       vertex 0.173776 0.0786176 0.489362
+       vertex 0.173776 0.0786176 -0.510638
+       vertex 0.160052 0.09053 -0.510638
+    endloop
+  endfacet
+  facet normal 0.655486 0.755208 0
+    outer loop
+       vertex 0.173776 0.0786176 0.489362
+       vertex 0.160052 0.09053 -0.510638
+       vertex 0.160052 0.09053 0.489362
+    endloop
+  endfacet
+  facet normal 0.695021 0.718989 0
+    outer loop
+       vertex 0.160052 0.09053 0.489362
+       vertex 0.160052 0.09053 -0.510638
+       vertex 0.147057 0.103091 -0.510638
+    endloop
+  endfacet
+  facet normal 0.695021 0.718989 0
+    outer loop
+       vertex 0.160052 0.09053 0.489362
+       vertex 0.147057 0.103091 -0.510638
+       vertex 0.147057 0.103091 0.489362
+    endloop
+  endfacet
+  facet normal 0.732392 0.680883 0
+    outer loop
+       vertex 0.147057 0.103091 0.489362
+       vertex 0.147057 0.103091 -0.510638
+       vertex 0.134806 0.116269 -0.510638
+    endloop
+  endfacet
+  facet normal 0.732392 0.680883 0
+    outer loop
+       vertex 0.147057 0.103091 0.489362
+       vertex 0.134806 0.116269 -0.510638
+       vertex 0.134806 0.116269 0.489362
+    endloop
+  endfacet
+  facet normal 0.767507 0.641041 0
+    outer loop
+       vertex 0.134806 0.116269 0.489362
+       vertex 0.134806 0.116269 -0.510638
+       vertex 0.123311 0.130032 -0.510638
+    endloop
+  endfacet
+  facet normal 0.767507 0.641041 0
+    outer loop
+       vertex 0.134806 0.116269 0.489362
+       vertex 0.123311 0.130032 -0.510638
+       vertex 0.123311 0.130032 0.489362
+    endloop
+  endfacet
+  facet normal 0.800291 0.599612 0
+    outer loop
+       vertex 0.123311 0.130032 0.489362
+       vertex 0.123311 0.130032 -0.510638
+       vertex 0.112586 0.144346 -0.510638
+    endloop
+  endfacet
+  facet normal 0.800291 0.599612 0
+    outer loop
+       vertex 0.123311 0.130032 0.489362
+       vertex 0.112586 0.144346 -0.510638
+       vertex 0.112586 0.144346 0.489362
+    endloop
+  endfacet
+  facet normal 0.830685 0.556743 0
+    outer loop
+       vertex 0.112586 0.144346 0.489362
+       vertex 0.112586 0.144346 -0.510638
+       vertex 0.102644 0.159181 -0.510638
+    endloop
+  endfacet
+  facet normal 0.830685 0.556743 0
+    outer loop
+       vertex 0.112586 0.144346 0.489362
+       vertex 0.102644 0.159181 -0.510638
+       vertex 0.102644 0.159181 0.489362
+    endloop
+  endfacet
+  facet normal 0.858646 0.512568 0
+    outer loop
+       vertex 0.102644 0.159181 0.489362
+       vertex 0.102644 0.159181 -0.510638
+       vertex 0.093497 0.174503 -0.510638
+    endloop
+  endfacet
+  facet normal 0.858646 0.512568 0
+    outer loop
+       vertex 0.102644 0.159181 0.489362
+       vertex 0.093497 0.174503 -0.510638
+       vertex 0.093497 0.174503 0.489362
+    endloop
+  endfacet
+  facet normal 0.88414 0.467221 0
+    outer loop
+       vertex 0.093497 0.174503 0.489362
+       vertex 0.093497 0.174503 -0.510638
+       vertex 0.0851591 0.190281 -0.510638
+    endloop
+  endfacet
+  facet normal 0.88414 0.467221 0
+    outer loop
+       vertex 0.093497 0.174503 0.489362
+       vertex 0.0851591 0.190281 -0.510638
+       vertex 0.0851591 0.190281 0.489362
+    endloop
+  endfacet
+  facet normal 0.907142 0.420825 0
+    outer loop
+       vertex 0.0851591 0.190281 0.489362
+       vertex 0.0851591 0.190281 -0.510638
+       vertex 0.0776433 0.206483 -0.510638
+    endloop
+  endfacet
+  facet normal 0.907142 0.420825 0
+    outer loop
+       vertex 0.0851591 0.190281 0.489362
+       vertex 0.0776433 0.206483 -0.510638
+       vertex 0.0776433 0.206483 0.489362
+    endloop
+  endfacet
+  facet normal 0.927631 0.373498 0
+    outer loop
+       vertex 0.0776433 0.206483 0.489362
+       vertex 0.0776433 0.206483 -0.510638
+       vertex 0.0709626 0.223075 -0.510638
+    endloop
+  endfacet
+  facet normal 0.927631 0.373498 0
+    outer loop
+       vertex 0.0776433 0.206483 0.489362
+       vertex 0.0709626 0.223075 -0.510638
+       vertex 0.0709626 0.223075 0.489362
+    endloop
+  endfacet
+  facet normal 0.945593 0.325353 0
+    outer loop
+       vertex 0.0709626 0.223075 0.489362
+       vertex 0.0709626 0.223075 -0.510638
+       vertex 0.0651301 0.240026 -0.510638
+    endloop
+  endfacet
+  facet normal 0.945593 0.325353 0
+    outer loop
+       vertex 0.0709626 0.223075 0.489362
+       vertex 0.0651301 0.240026 -0.510638
+       vertex 0.0651301 0.240026 0.489362
+    endloop
+  endfacet
+  facet normal 0.961014 0.276499 0
+    outer loop
+       vertex 0.0651301 0.240026 0.489362
+       vertex 0.0651301 0.240026 -0.510638
+       vertex 0.060159 0.257304 -0.510638
+    endloop
+  endfacet
+  facet normal 0.961014 0.276499 0
+    outer loop
+       vertex 0.0651301 0.240026 0.489362
+       vertex 0.060159 0.257304 -0.510638
+       vertex 0.060159 0.257304 0.489362
+    endloop
+  endfacet
+  facet normal 0.973884 0.227045 0
+    outer loop
+       vertex 0.060159 0.257304 0.489362
+       vertex 0.060159 0.257304 -0.510638
+       vertex 0.0560623 0.274877 -0.510638
+    endloop
+  endfacet
+  facet normal 0.973884 0.227045 0
+    outer loop
+       vertex 0.060159 0.257304 0.489362
+       vertex 0.0560623 0.274877 -0.510638
+       vertex 0.0560623 0.274877 0.489362
+    endloop
+  endfacet
+  facet normal 0.984194 0.177095 0
+    outer loop
+       vertex 0.0560623 0.274877 0.489362
+       vertex 0.0560623 0.274877 -0.510638
+       vertex 0.0528531 0.292711 -0.510638
+    endloop
+  endfacet
+  facet normal 0.984194 0.177095 0
+    outer loop
+       vertex 0.0560623 0.274877 0.489362
+       vertex 0.0528531 0.292711 -0.510638
+       vertex 0.0528531 0.292711 0.489362
+    endloop
+  endfacet
+  facet normal 0.991934 0.126759 0
+    outer loop
+       vertex 0.0528531 0.292711 0.489362
+       vertex 0.0528531 0.292711 -0.510638
+       vertex 0.0505447 0.310776 -0.510638
+    endloop
+  endfacet
+  facet normal 0.991934 0.126759 0
+    outer loop
+       vertex 0.0528531 0.292711 0.489362
+       vertex 0.0505447 0.310776 -0.510638
+       vertex 0.0505447 0.310776 0.489362
+    endloop
+  endfacet
+  facet normal 0.997096 0.0761484 0
+    outer loop
+       vertex 0.0505447 0.310776 0.489362
+       vertex 0.0505447 0.310776 -0.510638
+       vertex 0.04915 0.329038 -0.510638
+    endloop
+  endfacet
+  facet normal 0.997096 0.0761484 0
+    outer loop
+       vertex 0.0505447 0.310776 0.489362
+       vertex 0.04915 0.329038 -0.510638
+       vertex 0.04915 0.329038 0.489362
+    endloop
+  endfacet
+  facet normal 0.999678 0.0253779 0
+    outer loop
+       vertex 0.04915 0.329038 0.489362
+       vertex 0.04915 0.329038 -0.510638
+       vertex 0.0486821 0.347466 -0.510638
+    endloop
+  endfacet
+  facet normal 0.999678 0.0253779 0
+    outer loop
+       vertex 0.04915 0.329038 0.489362
+       vertex 0.0486821 0.347466 -0.510638
+       vertex 0.0486821 0.347466 0.489362
+    endloop
+  endfacet
+  facet normal 0.999673 -0.0255719 0
+    outer loop
+       vertex 0.0486821 0.347466 0.489362
+       vertex 0.0486821 0.347466 -0.510638
+       vertex 0.0491631 0.366268 -0.510638
+    endloop
+  endfacet
+  facet normal 0.999673 -0.0255719 0
+    outer loop
+       vertex 0.0486821 0.347466 0.489362
+       vertex 0.0491631 0.366268 -0.510638
+       vertex 0.0491631 0.366268 0.489362
+    endloop
+  endfacet
+  facet normal 0.997044 -0.0768271 0
+    outer loop
+       vertex 0.0491631 0.366268 0.489362
+       vertex 0.0491631 0.366268 -0.510638
+       vertex 0.0505952 0.384854 -0.510638
+    endloop
+  endfacet
+  facet normal 0.997044 -0.0768271 0
+    outer loop
+       vertex 0.0491631 0.366268 0.489362
+       vertex 0.0505952 0.384854 -0.510638
+       vertex 0.0505952 0.384854 0.489362
+    endloop
+  endfacet
+  facet normal 0.991766 -0.128061 0
+    outer loop
+       vertex 0.0505952 0.384854 0.489362
+       vertex 0.0505952 0.384854 -0.510638
+       vertex 0.0529633 0.403193 -0.510638
+    endloop
+  endfacet
+  facet normal 0.991766 -0.128061 0
+    outer loop
+       vertex 0.0505952 0.384854 0.489362
+       vertex 0.0529633 0.403193 -0.510638
+       vertex 0.0529633 0.403193 0.489362
+    endloop
+  endfacet
+  facet normal 0.983828 -0.179114 0
+    outer loop
+       vertex 0.0529633 0.403193 0.489362
+       vertex 0.0529633 0.403193 -0.510638
+       vertex 0.0562521 0.421258 -0.510638
+    endloop
+  endfacet
+  facet normal 0.983828 -0.179114 0
+    outer loop
+       vertex 0.0529633 0.403193 0.489362
+       vertex 0.0562521 0.421258 -0.510638
+       vertex 0.0562521 0.421258 0.489362
+    endloop
+  endfacet
+  facet normal 0.973229 -0.229839 0
+    outer loop
+       vertex 0.0562521 0.421258 0.489362
+       vertex 0.0562521 0.421258 -0.510638
+       vertex 0.0604462 0.439017 -0.510638
+    endloop
+  endfacet
+  facet normal 0.973229 -0.229839 0
+    outer loop
+       vertex 0.0562521 0.421258 0.489362
+       vertex 0.0604462 0.439017 -0.510638
+       vertex 0.0604462 0.439017 0.489362
+    endloop
+  endfacet
+  facet normal 0.959973 -0.280091 0
+    outer loop
+       vertex 0.0604462 0.439017 0.489362
+       vertex 0.0604462 0.439017 -0.510638
+       vertex 0.0655303 0.456442 -0.510638
+    endloop
+  endfacet
+  facet normal 0.959973 -0.280091 0
+    outer loop
+       vertex 0.0604462 0.439017 0.489362
+       vertex 0.0655303 0.456442 -0.510638
+       vertex 0.0655303 0.456442 0.489362
+    endloop
+  endfacet
+  facet normal 0.944076 -0.329729 0
+    outer loop
+       vertex 0.0655303 0.456442 0.489362
+       vertex 0.0655303 0.456442 -0.510638
+       vertex 0.071489 0.473503 -0.510638
+    endloop
+  endfacet
+  facet normal 0.944076 -0.329729 0
+    outer loop
+       vertex 0.0655303 0.456442 0.489362
+       vertex 0.071489 0.473503 -0.510638
+       vertex 0.071489 0.473503 0.489362
+    endloop
+  endfacet
+  facet normal 0.925555 -0.378612 0
+    outer loop
+       vertex 0.071489 0.473503 0.489362
+       vertex 0.071489 0.473503 -0.510638
+       vertex 0.0783071 0.490171 -0.510638
+    endloop
+  endfacet
+  facet normal 0.925555 -0.378612 0
+    outer loop
+       vertex 0.071489 0.473503 0.489362
+       vertex 0.0783071 0.490171 -0.510638
+       vertex 0.0783071 0.490171 0.489362
+    endloop
+  endfacet
+  facet normal 0.904439 -0.426603 0
+    outer loop
+       vertex 0.0783071 0.490171 0.489362
+       vertex 0.0783071 0.490171 -0.510638
+       vertex 0.0859692 0.506415 -0.510638
+    endloop
+  endfacet
+  facet normal 0.904439 -0.426603 0
+    outer loop
+       vertex 0.0783071 0.490171 0.489362
+       vertex 0.0859692 0.506415 -0.510638
+       vertex 0.0859692 0.506415 0.489362
+    endloop
+  endfacet
+  facet normal 0.880762 -0.47356 0
+    outer loop
+       vertex 0.0859692 0.506415 0.489362
+       vertex 0.0859692 0.506415 -0.510638
+       vertex 0.09446 0.522207 -0.510638
+    endloop
+  endfacet
+  facet normal 0.880762 -0.47356 0
+    outer loop
+       vertex 0.0859692 0.506415 0.489362
+       vertex 0.09446 0.522207 -0.510638
+       vertex 0.09446 0.522207 0.489362
+    endloop
+  endfacet
+  facet normal 0.854563 -0.519347 0
+    outer loop
+       vertex 0.09446 0.522207 0.489362
+       vertex 0.09446 0.522207 -0.510638
+       vertex 0.103764 0.537517 -0.510638
+    endloop
+  endfacet
+  facet normal 0.854563 -0.519347 0
+    outer loop
+       vertex 0.09446 0.522207 0.489362
+       vertex 0.103764 0.537517 -0.510638
+       vertex 0.103764 0.537517 0.489362
+    endloop
+  endfacet
+  facet normal 0.825896 -0.563822 0
+    outer loop
+       vertex 0.103764 0.537517 0.489362
+       vertex 0.103764 0.537517 -0.510638
+       vertex 0.113866 0.552314 -0.510638
+    endloop
+  endfacet
+  facet normal 0.825896 -0.563822 0
+    outer loop
+       vertex 0.103764 0.537517 0.489362
+       vertex 0.113866 0.552314 -0.510638
+       vertex 0.113866 0.552314 0.489362
+    endloop
+  endfacet
+  facet normal 0.79482 -0.606845 0
+    outer loop
+       vertex 0.113866 0.552314 0.489362
+       vertex 0.113866 0.552314 -0.510638
+       vertex 0.124751 0.566571 -0.510638
+    endloop
+  endfacet
+  facet normal 0.79482 -0.606845 0
+    outer loop
+       vertex 0.113866 0.552314 0.489362
+       vertex 0.124751 0.566571 -0.510638
+       vertex 0.124751 0.566571 0.489362
+    endloop
+  endfacet
+  facet normal 0.761406 -0.648275 0
+    outer loop
+       vertex 0.124751 0.566571 0.489362
+       vertex 0.124751 0.566571 -0.510638
+       vertex 0.136403 0.580256 -0.510638
+    endloop
+  endfacet
+  facet normal 0.761406 -0.648275 0
+    outer loop
+       vertex 0.124751 0.566571 0.489362
+       vertex 0.136403 0.580256 -0.510638
+       vertex 0.136403 0.580256 0.489362
+    endloop
+  endfacet
+  facet normal 0.725739 -0.68797 0
+    outer loop
+       vertex 0.136403 0.580256 0.489362
+       vertex 0.136403 0.580256 -0.510638
+       vertex 0.148807 0.593341 -0.510638
+    endloop
+  endfacet
+  facet normal 0.725739 -0.68797 0
+    outer loop
+       vertex 0.136403 0.580256 0.489362
+       vertex 0.148807 0.593341 -0.510638
+       vertex 0.148807 0.593341 0.489362
+    endloop
+  endfacet
+  facet normal 0.687916 -0.72579 0
+    outer loop
+       vertex 0.148807 0.593341 0.489362
+       vertex 0.148807 0.593341 -0.510638
+       vertex 0.161948 0.605796 -0.510638
+    endloop
+  endfacet
+  facet normal 0.687916 -0.72579 0
+    outer loop
+       vertex 0.148807 0.593341 0.489362
+       vertex 0.161948 0.605796 -0.510638
+       vertex 0.161948 0.605796 0.489362
+    endloop
+  endfacet
+  facet normal 0.648054 -0.761594 0
+    outer loop
+       vertex 0.161948 0.605796 0.489362
+       vertex 0.161948 0.605796 -0.510638
+       vertex 0.17581 0.617592 -0.510638
+    endloop
+  endfacet
+  facet normal 0.648054 -0.761594 0
+    outer loop
+       vertex 0.161948 0.605796 0.489362
+       vertex 0.17581 0.617592 -0.510638
+       vertex 0.17581 0.617592 0.489362
+    endloop
+  endfacet
+  facet normal 0.606282 -0.79525 0
+    outer loop
+       vertex 0.17581 0.617592 0.489362
+       vertex 0.17581 0.617592 -0.510638
+       vertex 0.190378 0.628698 -0.510638
+    endloop
+  endfacet
+  facet normal 0.606282 -0.79525 0
+    outer loop
+       vertex 0.17581 0.617592 0.489362
+       vertex 0.190378 0.628698 -0.510638
+       vertex 0.190378 0.628698 0.489362
+    endloop
+  endfacet
+  facet normal 0.562745 -0.82663 0
+    outer loop
+       vertex 0.190378 0.628698 0.489362
+       vertex 0.190378 0.628698 -0.510638
+       vertex 0.205637 0.639086 -0.510638
+    endloop
+  endfacet
+  facet normal 0.562745 -0.82663 0
+    outer loop
+       vertex 0.190378 0.628698 0.489362
+       vertex 0.205637 0.639086 -0.510638
+       vertex 0.205637 0.639086 0.489362
+    endloop
+  endfacet
+  facet normal 0.517613 -0.855615 0
+    outer loop
+       vertex 0.205637 0.639086 0.489362
+       vertex 0.205637 0.639086 -0.510638
+       vertex 0.221571 0.648726 -0.510638
+    endloop
+  endfacet
+  facet normal 0.517613 -0.855615 0
+    outer loop
+       vertex 0.205637 0.639086 0.489362
+       vertex 0.221571 0.648726 -0.510638
+       vertex 0.221571 0.648726 0.489362
+    endloop
+  endfacet
+  facet normal 0.471065 -0.882098 0
+    outer loop
+       vertex 0.221571 0.648726 0.489362
+       vertex 0.221571 0.648726 -0.510638
+       vertex 0.238165 0.657587 -0.510638
+    endloop
+  endfacet
+  facet normal 0.471065 -0.882098 0
+    outer loop
+       vertex 0.221571 0.648726 0.489362
+       vertex 0.238165 0.657587 -0.510638
+       vertex 0.238165 0.657587 0.489362
+    endloop
+  endfacet
+  facet normal 0.423303 -0.905988 0
+    outer loop
+       vertex 0.238165 0.657587 0.489362
+       vertex 0.238165 0.657587 -0.510638
+       vertex 0.255404 0.665642 -0.510638
+    endloop
+  endfacet
+  facet normal 0.423303 -0.905988 0
+    outer loop
+       vertex 0.238165 0.657587 0.489362
+       vertex 0.255404 0.665642 -0.510638
+       vertex 0.255404 0.665642 0.489362
+    endloop
+  endfacet
+  facet normal 0.374533 -0.927214 0
+    outer loop
+       vertex 0.255404 0.665642 0.489362
+       vertex 0.255404 0.665642 -0.510638
+       vertex 0.273272 0.672859 -0.510638
+    endloop
+  endfacet
+  facet normal 0.374533 -0.927214 0
+    outer loop
+       vertex 0.255404 0.665642 0.489362
+       vertex 0.273272 0.672859 -0.510638
+       vertex 0.273272 0.672859 0.489362
+    endloop
+  endfacet
+  facet normal 0.32498 -0.945721 0
+    outer loop
+       vertex 0.273272 0.672859 0.489362
+       vertex 0.273272 0.672859 -0.510638
+       vertex 0.291754 0.67921 -0.510638
+    endloop
+  endfacet
+  facet normal 0.32498 -0.945721 0
+    outer loop
+       vertex 0.273272 0.672859 0.489362
+       vertex 0.291754 0.67921 -0.510638
+       vertex 0.291754 0.67921 0.489362
+    endloop
+  endfacet
+  facet normal 0.274881 -0.961478 0
+    outer loop
+       vertex 0.291754 0.67921 0.489362
+       vertex 0.291754 0.67921 -0.510638
+       vertex 0.310835 0.684665 -0.510638
+    endloop
+  endfacet
+  facet normal 0.274881 -0.961478 0
+    outer loop
+       vertex 0.291754 0.67921 0.489362
+       vertex 0.310835 0.684665 -0.510638
+       vertex 0.310835 0.684665 0.489362
+    endloop
+  endfacet
+  facet normal 0.224467 -0.974482 0
+    outer loop
+       vertex 0.310835 0.684665 0.489362
+       vertex 0.310835 0.684665 -0.510638
+       vertex 0.330499 0.689195 -0.510638
+    endloop
+  endfacet
+  facet normal 0.224467 -0.974482 0
+    outer loop
+       vertex 0.310835 0.684665 0.489362
+       vertex 0.330499 0.689195 -0.510638
+       vertex 0.330499 0.689195 0.489362
+    endloop
+  endfacet
+  facet normal 0.173977 -0.98475 0
+    outer loop
+       vertex 0.330499 0.689195 0.489362
+       vertex 0.330499 0.689195 -0.510638
+       vertex 0.350731 0.692769 -0.510638
+    endloop
+  endfacet
+  facet normal 0.173977 -0.98475 0
+    outer loop
+       vertex 0.330499 0.689195 0.489362
+       vertex 0.350731 0.692769 -0.510638
+       vertex 0.350731 0.692769 0.489362
+    endloop
+  endfacet
+  facet normal 0.123643 -0.992327 0
+    outer loop
+       vertex 0.350731 0.692769 0.489362
+       vertex 0.350731 0.692769 -0.510638
+       vertex 0.371516 0.695359 -0.510638
+    endloop
+  endfacet
+  facet normal 0.123643 -0.992327 0
+    outer loop
+       vertex 0.350731 0.692769 0.489362
+       vertex 0.371516 0.695359 -0.510638
+       vertex 0.371516 0.695359 0.489362
+    endloop
+  endfacet
+  facet normal 0.073691 -0.997281 0
+    outer loop
+       vertex 0.371516 0.695359 0.489362
+       vertex 0.371516 0.695359 -0.510638
+       vertex 0.392838 0.696935 -0.510638
+    endloop
+  endfacet
+  facet normal 0.073691 -0.997281 0
+    outer loop
+       vertex 0.371516 0.695359 0.489362
+       vertex 0.392838 0.696935 -0.510638
+       vertex 0.392838 0.696935 0.489362
+    endloop
+  endfacet
+  facet normal 0.024335 -0.999704 0
+    outer loop
+       vertex 0.392838 0.696935 0.489362
+       vertex 0.392838 0.696935 -0.510638
+       vertex 0.414682 0.697466 -0.510638
+    endloop
+  endfacet
+  facet normal 0.024335 -0.999704 0
+    outer loop
+       vertex 0.392838 0.696935 0.489362
+       vertex 0.414682 0.697466 -0.510638
+       vertex 0.414682 0.697466 0.489362
+    endloop
+  endfacet
+  facet normal -0.023783 -0.999717 0
+    outer loop
+       vertex 0.436903 0.696938 -0.510638
+       vertex 0.436903 0.696938 0.489362
+       vertex 0.414682 0.697466 0.489362
+    endloop
+  endfacet
+  facet normal -0.023783 -0.999717 0
+    outer loop
+       vertex 0.436903 0.696938 -0.510638
+       vertex 0.414682 0.697466 0.489362
+       vertex 0.414682 0.697466 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0731231 -0.997323 0
+    outer loop
+       vertex 0.429846 0.0878337 0.489362
+       vertex 0.429846 0.0878337 -0.510638
+       vertex 0.444727 0.0889248 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0731231 -0.997323 0
+    outer loop
+       vertex 0.429846 0.0878337 0.489362
+       vertex 0.444727 0.0889248 -0.510638
+       vertex 0.444727 0.0889248 0.489362
+    endloop
+  endfacet
+  facet normal 0.122419 -0.992479 0
+    outer loop
+       vertex 0.444727 0.0889248 0.489362
+       vertex 0.444727 0.0889248 -0.510638
+       vertex 0.459309 0.0907234 -0.510638
+    endloop
+  endfacet
+  facet normal 0.122419 -0.992479 0
+    outer loop
+       vertex 0.444727 0.0889248 0.489362
+       vertex 0.459309 0.0907234 -0.510638
+       vertex 0.459309 0.0907234 0.489362
+    endloop
+  endfacet
+  facet normal 0.171931 -0.985109 0
+    outer loop
+       vertex 0.459309 0.0907234 0.489362
+       vertex 0.459309 0.0907234 -0.510638
+       vertex 0.473576 0.0932133 -0.510638
+    endloop
+  endfacet
+  facet normal 0.171931 -0.985109 0
+    outer loop
+       vertex 0.459309 0.0907234 0.489362
+       vertex 0.473576 0.0932133 -0.510638
+       vertex 0.473576 0.0932133 0.489362
+    endloop
+  endfacet
+  facet normal 0.221489 -0.975163 0
+    outer loop
+       vertex 0.473576 0.0932133 0.489362
+       vertex 0.473576 0.0932133 -0.510638
+       vertex 0.487511 0.0963784 -0.510638
+    endloop
+  endfacet
+  facet normal 0.221489 -0.975163 0
+    outer loop
+       vertex 0.473576 0.0932133 0.489362
+       vertex 0.487511 0.0963784 -0.510638
+       vertex 0.487511 0.0963784 0.489362
+    endloop
+  endfacet
+  facet normal 0.270912 -0.962604 0
+    outer loop
+       vertex 0.487511 0.0963784 0.489362
+       vertex 0.487511 0.0963784 -0.510638
+       vertex 0.501098 0.100202 -0.510638
+    endloop
+  endfacet
+  facet normal 0.270912 -0.962604 0
+    outer loop
+       vertex 0.487511 0.0963784 0.489362
+       vertex 0.501098 0.100202 -0.510638
+       vertex 0.501098 0.100202 0.489362
+    endloop
+  endfacet
+  facet normal 0.320021 -0.94741 0
+    outer loop
+       vertex 0.501098 0.100202 0.489362
+       vertex 0.501098 0.100202 -0.510638
+       vertex 0.514322 0.104669 -0.510638
+    endloop
+  endfacet
+  facet normal 0.320021 -0.94741 0
+    outer loop
+       vertex 0.501098 0.100202 0.489362
+       vertex 0.514322 0.104669 -0.510638
+       vertex 0.514322 0.104669 0.489362
+    endloop
+  endfacet
+  facet normal 0.368634 -0.929575 0
+    outer loop
+       vertex 0.514322 0.104669 0.489362
+       vertex 0.514322 0.104669 -0.510638
+       vertex 0.527165 0.109762 -0.510638
+    endloop
+  endfacet
+  facet normal 0.368634 -0.929575 0
+    outer loop
+       vertex 0.514322 0.104669 0.489362
+       vertex 0.527165 0.109762 -0.510638
+       vertex 0.527165 0.109762 0.489362
+    endloop
+  endfacet
+  facet normal 0.41657 -0.909104 0
+    outer loop
+       vertex 0.527165 0.109762 0.489362
+       vertex 0.527165 0.109762 -0.510638
+       vertex 0.539611 0.115465 -0.510638
+    endloop
+  endfacet
+  facet normal 0.41657 -0.909104 0
+    outer loop
+       vertex 0.527165 0.109762 0.489362
+       vertex 0.539611 0.115465 -0.510638
+       vertex 0.539611 0.115465 0.489362
+    endloop
+  endfacet
+  facet normal 0.463649 -0.886019 0
+    outer loop
+       vertex 0.539611 0.115465 0.489362
+       vertex 0.539611 0.115465 -0.510638
+       vertex 0.551645 0.121763 -0.510638
+    endloop
+  endfacet
+  facet normal 0.463649 -0.886019 0
+    outer loop
+       vertex 0.539611 0.115465 0.489362
+       vertex 0.551645 0.121763 -0.510638
+       vertex 0.551645 0.121763 0.489362
+    endloop
+  endfacet
+  facet normal 0.509692 -0.860357 0
+    outer loop
+       vertex 0.551645 0.121763 0.489362
+       vertex 0.551645 0.121763 -0.510638
+       vertex 0.56325 0.128638 -0.510638
+    endloop
+  endfacet
+  facet normal 0.509692 -0.860357 0
+    outer loop
+       vertex 0.551645 0.121763 0.489362
+       vertex 0.56325 0.128638 -0.510638
+       vertex 0.56325 0.128638 0.489362
+    endloop
+  endfacet
+  facet normal 0.554528 -0.832165 0
+    outer loop
+       vertex 0.56325 0.128638 0.489362
+       vertex 0.56325 0.128638 -0.510638
+       vertex 0.57441 0.136074 -0.510638
+    endloop
+  endfacet
+  facet normal 0.554528 -0.832165 0
+    outer loop
+       vertex 0.56325 0.128638 0.489362
+       vertex 0.57441 0.136074 -0.510638
+       vertex 0.57441 0.136074 0.489362
+    endloop
+  endfacet
+  facet normal 0.597985 -0.801507 0
+    outer loop
+       vertex 0.57441 0.136074 0.489362
+       vertex 0.57441 0.136074 -0.510638
+       vertex 0.585109 0.144056 -0.510638
+    endloop
+  endfacet
+  facet normal 0.597985 -0.801507 0
+    outer loop
+       vertex 0.57441 0.136074 0.489362
+       vertex 0.585109 0.144056 -0.510638
+       vertex 0.585109 0.144056 0.489362
+    endloop
+  endfacet
+  facet normal 0.639897 -0.768461 0
+    outer loop
+       vertex 0.585109 0.144056 0.489362
+       vertex 0.585109 0.144056 -0.510638
+       vertex 0.59533 0.152567 -0.510638
+    endloop
+  endfacet
+  facet normal 0.639897 -0.768461 0
+    outer loop
+       vertex 0.585109 0.144056 0.489362
+       vertex 0.59533 0.152567 -0.510638
+       vertex 0.59533 0.152567 0.489362
+    endloop
+  endfacet
+  facet normal 0.680106 -0.733114 0
+    outer loop
+       vertex 0.59533 0.152567 0.489362
+       vertex 0.59533 0.152567 -0.510638
+       vertex 0.605057 0.161591 -0.510638
+    endloop
+  endfacet
+  facet normal 0.680106 -0.733114 0
+    outer loop
+       vertex 0.59533 0.152567 0.489362
+       vertex 0.605057 0.161591 -0.510638
+       vertex 0.605057 0.161591 0.489362
+    endloop
+  endfacet
+  facet normal 0.718459 -0.69557 0
+    outer loop
+       vertex 0.605057 0.161591 0.489362
+       vertex 0.605057 0.161591 -0.510638
+       vertex 0.614275 0.171112 -0.510638
+    endloop
+  endfacet
+  facet normal 0.718459 -0.69557 0
+    outer loop
+       vertex 0.605057 0.161591 0.489362
+       vertex 0.614275 0.171112 -0.510638
+       vertex 0.614275 0.171112 0.489362
+    endloop
+  endfacet
+  facet normal 0.754812 -0.655942 0
+    outer loop
+       vertex 0.614275 0.171112 0.489362
+       vertex 0.614275 0.171112 -0.510638
+       vertex 0.622966 0.181113 -0.510638
+    endloop
+  endfacet
+  facet normal 0.754812 -0.655942 0
+    outer loop
+       vertex 0.614275 0.171112 0.489362
+       vertex 0.622966 0.181113 -0.510638
+       vertex 0.622966 0.181113 0.489362
+    endloop
+  endfacet
+  facet normal 0.789026 -0.61436 0
+    outer loop
+       vertex 0.622966 0.181113 0.489362
+       vertex 0.622966 0.181113 -0.510638
+       vertex 0.631114 0.191578 -0.510638
+    endloop
+  endfacet
+  facet normal 0.789026 -0.61436 0
+    outer loop
+       vertex 0.622966 0.181113 0.489362
+       vertex 0.631114 0.191578 -0.510638
+       vertex 0.631114 0.191578 0.489362
+    endloop
+  endfacet
+  facet normal 0.820973 -0.570967 0
+    outer loop
+       vertex 0.631114 0.191578 0.489362
+       vertex 0.631114 0.191578 -0.510638
+       vertex 0.638704 0.202492 -0.510638
+    endloop
+  endfacet
+  facet normal 0.820973 -0.570967 0
+    outer loop
+       vertex 0.631114 0.191578 0.489362
+       vertex 0.638704 0.202492 -0.510638
+       vertex 0.638704 0.202492 0.489362
+    endloop
+  endfacet
+  facet normal 0.850537 -0.525916 0
+    outer loop
+       vertex 0.638704 0.202492 0.489362
+       vertex 0.638704 0.202492 -0.510638
+       vertex 0.645719 0.213837 -0.510638
+    endloop
+  endfacet
+  facet normal 0.850537 -0.525916 0
+    outer loop
+       vertex 0.638704 0.202492 0.489362
+       vertex 0.645719 0.213837 -0.510638
+       vertex 0.645719 0.213837 0.489362
+    endloop
+  endfacet
+  facet normal 0.877611 -0.479373 0
+    outer loop
+       vertex 0.645719 0.213837 0.489362
+       vertex 0.645719 0.213837 -0.510638
+       vertex 0.652143 0.225597 -0.510638
+    endloop
+  endfacet
+  facet normal 0.877611 -0.479373 0
+    outer loop
+       vertex 0.645719 0.213837 0.489362
+       vertex 0.652143 0.225597 -0.510638
+       vertex 0.652143 0.225597 0.489362
+    endloop
+  endfacet
+  facet normal 0.902105 -0.431516 0
+    outer loop
+       vertex 0.652143 0.225597 0.489362
+       vertex 0.652143 0.225597 -0.510638
+       vertex 0.65796 0.237757 -0.510638
+    endloop
+  endfacet
+  facet normal 0.902105 -0.431516 0
+    outer loop
+       vertex 0.652143 0.225597 0.489362
+       vertex 0.65796 0.237757 -0.510638
+       vertex 0.65796 0.237757 0.489362
+    endloop
+  endfacet
+  facet normal 0.923944 -0.382529 0
+    outer loop
+       vertex 0.65796 0.237757 0.489362
+       vertex 0.65796 0.237757 -0.510638
+       vertex 0.663153 0.2503 -0.510638
+    endloop
+  endfacet
+  facet normal 0.923944 -0.382529 0
+    outer loop
+       vertex 0.65796 0.237757 0.489362
+       vertex 0.663153 0.2503 -0.510638
+       vertex 0.663153 0.2503 0.489362
+    endloop
+  endfacet
+  facet normal 0.943062 -0.332617 0
+    outer loop
+       vertex 0.663153 0.2503 0.489362
+       vertex 0.663153 0.2503 -0.510638
+       vertex 0.667706 0.26321 -0.510638
+    endloop
+  endfacet
+  facet normal 0.943062 -0.332617 0
+    outer loop
+       vertex 0.663153 0.2503 0.489362
+       vertex 0.667706 0.26321 -0.510638
+       vertex 0.667706 0.26321 0.489362
+    endloop
+  endfacet
+  facet normal 0.959422 -0.281975 0
+    outer loop
+       vertex 0.667706 0.26321 0.489362
+       vertex 0.667706 0.26321 -0.510638
+       vertex 0.671603 0.276471 -0.510638
+    endloop
+  endfacet
+  facet normal 0.959422 -0.281975 0
+    outer loop
+       vertex 0.667706 0.26321 0.489362
+       vertex 0.671603 0.276471 -0.510638
+       vertex 0.671603 0.276471 0.489362
+    endloop
+  endfacet
+  facet normal 0.972997 -0.230819 0
+    outer loop
+       vertex 0.671603 0.276471 0.489362
+       vertex 0.671603 0.276471 -0.510638
+       vertex 0.674829 0.290066 -0.510638
+    endloop
+  endfacet
+  facet normal 0.972997 -0.230819 0
+    outer loop
+       vertex 0.671603 0.276471 0.489362
+       vertex 0.674829 0.290066 -0.510638
+       vertex 0.674829 0.290066 0.489362
+    endloop
+  endfacet
+  facet normal 0.983783 -0.179362 0
+    outer loop
+       vertex 0.674829 0.290066 0.489362
+       vertex 0.674829 0.290066 -0.510638
+       vertex 0.677365 0.303979 -0.510638
+    endloop
+  endfacet
+  facet normal 0.983783 -0.179362 0
+    outer loop
+       vertex 0.674829 0.290066 0.489362
+       vertex 0.677365 0.303979 -0.510638
+       vertex 0.677365 0.303979 0.489362
+    endloop
+  endfacet
+  facet normal 0.991798 -0.127815 0
+    outer loop
+       vertex 0.677365 0.303979 0.489362
+       vertex 0.677365 0.303979 -0.510638
+       vertex 0.679197 0.318195 -0.510638
+    endloop
+  endfacet
+  facet normal 0.991798 -0.127815 0
+    outer loop
+       vertex 0.677365 0.303979 0.489362
+       vertex 0.679197 0.318195 -0.510638
+       vertex 0.679197 0.318195 0.489362
+    endloop
+  endfacet
+  facet normal 0.997077 -0.0763974 0
+    outer loop
+       vertex 0.679197 0.318195 0.489362
+       vertex 0.679197 0.318195 -0.510638
+       vertex 0.680308 0.332696 -0.510638
+    endloop
+  endfacet
+  facet normal 0.997077 -0.0763974 0
+    outer loop
+       vertex 0.679197 0.318195 0.489362
+       vertex 0.680308 0.332696 -0.510638
+       vertex 0.680308 0.332696 0.489362
+    endloop
+  endfacet
+  facet normal 0.99968 -0.0253097 0
+    outer loop
+       vertex 0.680308 0.332696 0.489362
+       vertex 0.680308 0.332696 -0.510638
+       vertex 0.680682 0.347466 -0.510638
+    endloop
+  endfacet
+  facet normal 0.99968 -0.0253097 0
+    outer loop
+       vertex 0.680308 0.332696 0.489362
+       vertex 0.680682 0.347466 -0.510638
+       vertex 0.680682 0.347466 0.489362
+    endloop
+  endfacet
+  facet normal 0.999684 0.0251466 0
+    outer loop
+       vertex 0.680682 0.347466 0.489362
+       vertex 0.680682 0.347466 -0.510638
+       vertex 0.680308 0.36233 -0.510638
+    endloop
+  endfacet
+  facet normal 0.999684 0.0251466 0
+    outer loop
+       vertex 0.680682 0.347466 0.489362
+       vertex 0.680308 0.36233 -0.510638
+       vertex 0.680308 0.36233 0.489362
+    endloop
+  endfacet
+  facet normal 0.99711 0.0759765 0
+    outer loop
+       vertex 0.680308 0.36233 0.489362
+       vertex 0.680308 0.36233 -0.510638
+       vertex 0.679197 0.376912 -0.510638
+    endloop
+  endfacet
+  facet normal 0.99711 0.0759765 0
+    outer loop
+       vertex 0.680308 0.36233 0.489362
+       vertex 0.679197 0.376912 -0.510638
+       vertex 0.679197 0.376912 0.489362
+    endloop
+  endfacet
+  facet normal 0.991876 0.127209 0
+    outer loop
+       vertex 0.679197 0.376912 0.489362
+       vertex 0.679197 0.376912 -0.510638
+       vertex 0.677365 0.391196 -0.510638
+    endloop
+  endfacet
+  facet normal 0.991876 0.127209 0
+    outer loop
+       vertex 0.679197 0.376912 0.489362
+       vertex 0.677365 0.391196 -0.510638
+       vertex 0.677365 0.391196 0.489362
+    endloop
+  endfacet
+  facet normal 0.983913 0.178648 0
+    outer loop
+       vertex 0.677365 0.391196 0.489362
+       vertex 0.677365 0.391196 -0.510638
+       vertex 0.674829 0.405167 -0.510638
+    endloop
+  endfacet
+  facet normal 0.983913 0.178648 0
+    outer loop
+       vertex 0.677365 0.391196 0.489362
+       vertex 0.674829 0.405167 -0.510638
+       vertex 0.674829 0.405167 0.489362
+    endloop
+  endfacet
+  facet normal 0.973174 0.230069 0
+    outer loop
+       vertex 0.674829 0.405167 0.489362
+       vertex 0.674829 0.405167 -0.510638
+       vertex 0.671604 0.418809 -0.510638
+    endloop
+  endfacet
+  facet normal 0.973174 0.230069 0
+    outer loop
+       vertex 0.674829 0.405167 0.489362
+       vertex 0.671604 0.418809 -0.510638
+       vertex 0.671604 0.418809 0.489362
+    endloop
+  endfacet
+  facet normal 0.959633 0.281257 0
+    outer loop
+       vertex 0.671604 0.418809 0.489362
+       vertex 0.671604 0.418809 -0.510638
+       vertex 0.667706 0.432106 -0.510638
+    endloop
+  endfacet
+  facet normal 0.959633 0.281257 0
+    outer loop
+       vertex 0.671604 0.418809 0.489362
+       vertex 0.667706 0.432106 -0.510638
+       vertex 0.667706 0.432106 0.489362
+    endloop
+  endfacet
+  facet normal 0.943283 0.331989 0
+    outer loop
+       vertex 0.667706 0.432106 0.489362
+       vertex 0.667706 0.432106 -0.510638
+       vertex 0.663153 0.445044 -0.510638
+    endloop
+  endfacet
+  facet normal 0.943283 0.331989 0
+    outer loop
+       vertex 0.667706 0.432106 0.489362
+       vertex 0.663153 0.445044 -0.510638
+       vertex 0.663153 0.445044 0.489362
+    endloop
+  endfacet
+  facet normal 0.924146 0.382041 0
+    outer loop
+       vertex 0.663153 0.445044 0.489362
+       vertex 0.663153 0.445044 -0.510638
+       vertex 0.65796 0.457606 -0.510638
+    endloop
+  endfacet
+  facet normal 0.924146 0.382041 0
+    outer loop
+       vertex 0.663153 0.445044 0.489362
+       vertex 0.65796 0.457606 -0.510638
+       vertex 0.65796 0.457606 0.489362
+    endloop
+  endfacet
+  facet normal 0.902254 0.431205 0
+    outer loop
+       vertex 0.65796 0.457606 0.489362
+       vertex 0.65796 0.457606 -0.510638
+       vertex 0.652143 0.469776 -0.510638
+    endloop
+  endfacet
+  facet normal 0.902254 0.431205 0
+    outer loop
+       vertex 0.65796 0.457606 0.489362
+       vertex 0.652143 0.469776 -0.510638
+       vertex 0.652143 0.469776 0.489362
+    endloop
+  endfacet
+  facet normal 0.87767 0.479265 0
+    outer loop
+       vertex 0.652143 0.469776 0.489362
+       vertex 0.652143 0.469776 -0.510638
+       vertex 0.645719 0.481541 -0.510638
+    endloop
+  endfacet
+  facet normal 0.87767 0.479265 0
+    outer loop
+       vertex 0.652143 0.469776 0.489362
+       vertex 0.645719 0.481541 -0.510638
+       vertex 0.645719 0.481541 0.489362
+    endloop
+  endfacet
+  facet normal 0.850469 0.526024 0
+    outer loop
+       vertex 0.645719 0.481541 0.489362
+       vertex 0.645719 0.481541 -0.510638
+       vertex 0.638704 0.492882 -0.510638
+    endloop
+  endfacet
+  facet normal 0.850469 0.526024 0
+    outer loop
+       vertex 0.645719 0.481541 0.489362
+       vertex 0.638704 0.492882 -0.510638
+       vertex 0.638704 0.492882 0.489362
+    endloop
+  endfacet
+  facet normal 0.820745 0.571294 0
+    outer loop
+       vertex 0.638704 0.492882 0.489362
+       vertex 0.638704 0.492882 -0.510638
+       vertex 0.631114 0.503786 -0.510638
+    endloop
+  endfacet
+  facet normal 0.820745 0.571294 0
+    outer loop
+       vertex 0.638704 0.492882 0.489362
+       vertex 0.631114 0.503786 -0.510638
+       vertex 0.631114 0.503786 0.489362
+    endloop
+  endfacet
+  facet normal 0.78861 0.614893 0
+    outer loop
+       vertex 0.631114 0.503786 0.489362
+       vertex 0.631114 0.503786 -0.510638
+       vertex 0.622966 0.514237 -0.510638
+    endloop
+  endfacet
+  facet normal 0.78861 0.614893 0
+    outer loop
+       vertex 0.631114 0.503786 0.489362
+       vertex 0.622966 0.514237 -0.510638
+       vertex 0.622966 0.514237 0.489362
+    endloop
+  endfacet
+  facet normal 0.754187 0.65666 0
+    outer loop
+       vertex 0.622966 0.514237 0.489362
+       vertex 0.622966 0.514237 -0.510638
+       vertex 0.614275 0.524219 -0.510638
+    endloop
+  endfacet
+  facet normal 0.754187 0.65666 0
+    outer loop
+       vertex 0.622966 0.514237 0.489362
+       vertex 0.614275 0.524219 -0.510638
+       vertex 0.614275 0.524219 0.489362
+    endloop
+  endfacet
+  facet normal 0.717609 0.696446 0
+    outer loop
+       vertex 0.614275 0.524219 0.489362
+       vertex 0.614275 0.524219 -0.510638
+       vertex 0.605057 0.533716 -0.510638
+    endloop
+  endfacet
+  facet normal 0.717609 0.696446 0
+    outer loop
+       vertex 0.614275 0.524219 0.489362
+       vertex 0.605057 0.533716 -0.510638
+       vertex 0.605057 0.533716 0.489362
+    endloop
+  endfacet
+  facet normal 0.679027 0.734113 0
+    outer loop
+       vertex 0.605057 0.533716 0.489362
+       vertex 0.605057 0.533716 -0.510638
+       vertex 0.59533 0.542714 -0.510638
+    endloop
+  endfacet
+  facet normal 0.679027 0.734113 0
+    outer loop
+       vertex 0.605057 0.533716 0.489362
+       vertex 0.59533 0.542714 -0.510638
+       vertex 0.59533 0.542714 0.489362
+    endloop
+  endfacet
+  facet normal 0.638597 0.769541 0
+    outer loop
+       vertex 0.59533 0.542714 0.489362
+       vertex 0.59533 0.542714 -0.510638
+       vertex 0.585109 0.551196 -0.510638
+    endloop
+  endfacet
+  facet normal 0.638597 0.769541 0
+    outer loop
+       vertex 0.59533 0.542714 0.489362
+       vertex 0.585109 0.551196 -0.510638
+       vertex 0.585109 0.551196 0.489362
+    endloop
+  endfacet
+  facet normal 0.596478 0.80263 0
+    outer loop
+       vertex 0.585109 0.551196 0.489362
+       vertex 0.585109 0.551196 -0.510638
+       vertex 0.57441 0.559146 -0.510638
+    endloop
+  endfacet
+  facet normal 0.596478 0.80263 0
+    outer loop
+       vertex 0.585109 0.551196 0.489362
+       vertex 0.57441 0.559146 -0.510638
+       vertex 0.57441 0.559146 0.489362
+    endloop
+  endfacet
+  facet normal 0.552844 0.833285 0
+    outer loop
+       vertex 0.57441 0.559146 0.489362
+       vertex 0.57441 0.559146 -0.510638
+       vertex 0.56325 0.56655 -0.510638
+    endloop
+  endfacet
+  facet normal 0.552844 0.833285 0
+    outer loop
+       vertex 0.57441 0.559146 0.489362
+       vertex 0.56325 0.56655 -0.510638
+       vertex 0.56325 0.56655 0.489362
+    endloop
+  endfacet
+  facet normal 0.507865 0.861437 0
+    outer loop
+       vertex 0.56325 0.56655 0.489362
+       vertex 0.56325 0.56655 -0.510638
+       vertex 0.551645 0.573392 -0.510638
+    endloop
+  endfacet
+  facet normal 0.507865 0.861437 0
+    outer loop
+       vertex 0.56325 0.56655 0.489362
+       vertex 0.551645 0.573392 -0.510638
+       vertex 0.551645 0.573392 0.489362
+    endloop
+  endfacet
+  facet normal 0.461726 0.887022 0
+    outer loop
+       vertex 0.551645 0.573392 0.489362
+       vertex 0.551645 0.573392 -0.510638
+       vertex 0.539611 0.579656 -0.510638
+    endloop
+  endfacet
+  facet normal 0.461726 0.887022 0
+    outer loop
+       vertex 0.551645 0.573392 0.489362
+       vertex 0.539611 0.579656 -0.510638
+       vertex 0.539611 0.579656 0.489362
+    endloop
+  endfacet
+  facet normal 0.4146 0.910004 0
+    outer loop
+       vertex 0.539611 0.579656 0.489362
+       vertex 0.539611 0.579656 -0.510638
+       vertex 0.527165 0.585327 -0.510638
+    endloop
+  endfacet
+  facet normal 0.4146 0.910004 0
+    outer loop
+       vertex 0.539611 0.579656 0.489362
+       vertex 0.527165 0.585327 -0.510638
+       vertex 0.527165 0.585327 0.489362
+    endloop
+  endfacet
+  facet normal 0.36668 0.930347 0
+    outer loop
+       vertex 0.527165 0.585327 0.489362
+       vertex 0.527165 0.585327 -0.510638
+       vertex 0.514322 0.590389 -0.510638
+    endloop
+  endfacet
+  facet normal 0.36668 0.930347 0
+    outer loop
+       vertex 0.527165 0.585327 0.489362
+       vertex 0.514322 0.590389 -0.510638
+       vertex 0.514322 0.590389 0.489362
+    endloop
+  endfacet
+  facet normal 0.318137 0.948045 0
+    outer loop
+       vertex 0.514322 0.590389 0.489362
+       vertex 0.514322 0.590389 -0.510638
+       vertex 0.501098 0.594826 -0.510638
+    endloop
+  endfacet
+  facet normal 0.318137 0.948045 0
+    outer loop
+       vertex 0.514322 0.590389 0.489362
+       vertex 0.501098 0.594826 -0.510638
+       vertex 0.501098 0.594826 0.489362
+    endloop
+  endfacet
+  facet normal 0.269168 0.963093 0
+    outer loop
+       vertex 0.501098 0.594826 0.489362
+       vertex 0.501098 0.594826 -0.510638
+       vertex 0.487511 0.598624 -0.510638
+    endloop
+  endfacet
+  facet normal 0.269168 0.963093 0
+    outer loop
+       vertex 0.501098 0.594826 0.489362
+       vertex 0.487511 0.598624 -0.510638
+       vertex 0.487511 0.598624 0.489362
+    endloop
+  endfacet
+  facet normal 0.219944 0.975512 0
+    outer loop
+       vertex 0.487511 0.598624 0.489362
+       vertex 0.487511 0.598624 -0.510638
+       vertex 0.473576 0.601766 -0.510638
+    endloop
+  endfacet
+  facet normal 0.219944 0.975512 0
+    outer loop
+       vertex 0.487511 0.598624 0.489362
+       vertex 0.473576 0.601766 -0.510638
+       vertex 0.473576 0.601766 0.489362
+    endloop
+  endfacet
+  facet normal 0.170642 0.985333 0
+    outer loop
+       vertex 0.473576 0.601766 0.489362
+       vertex 0.473576 0.601766 -0.510638
+       vertex 0.459309 0.604236 -0.510638
+    endloop
+  endfacet
+  facet normal 0.170642 0.985333 0
+    outer loop
+       vertex 0.473576 0.601766 0.489362
+       vertex 0.459309 0.604236 -0.510638
+       vertex 0.459309 0.604236 0.489362
+    endloop
+  endfacet
+  facet normal 0.121443 0.992598 0
+    outer loop
+       vertex 0.459309 0.604236 0.489362
+       vertex 0.459309 0.604236 -0.510638
+       vertex 0.444727 0.606021 -0.510638
+    endloop
+  endfacet
+  facet normal 0.121443 0.992598 0
+    outer loop
+       vertex 0.459309 0.604236 0.489362
+       vertex 0.444727 0.606021 -0.510638
+       vertex 0.444727 0.606021 0.489362
+    endloop
+  endfacet
+  facet normal 0.0725067 0.997368 0
+    outer loop
+       vertex 0.444727 0.606021 0.489362
+       vertex 0.444727 0.606021 -0.510638
+       vertex 0.429846 0.607102 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0725067 0.997368 0
+    outer loop
+       vertex 0.444727 0.606021 0.489362
+       vertex 0.429846 0.607102 -0.510638
+       vertex 0.429846 0.607102 0.489362
+    endloop
+  endfacet
+  facet normal 0.0240017 0.999712 0
+    outer loop
+       vertex 0.429846 0.607102 0.489362
+       vertex 0.429846 0.607102 -0.510638
+       vertex 0.414682 0.607466 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0240017 0.999712 0
+    outer loop
+       vertex 0.429846 0.607102 0.489362
+       vertex 0.414682 0.607466 -0.510638
+       vertex 0.414682 0.607466 0.489362
+    endloop
+  endfacet
+  facet normal -0.0241597 0.999708 0
+    outer loop
+       vertex 0.414682 0.607466 0.489362
+       vertex 0.414682 0.607466 -0.510638
+       vertex 0.399615 0.607102 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0241597 0.999708 0
+    outer loop
+       vertex 0.414682 0.607466 0.489362
+       vertex 0.399615 0.607102 -0.510638
+       vertex 0.399615 0.607102 0.489362
+    endloop
+  endfacet
+  facet normal -0.0729467 0.997336 0
+    outer loop
+       vertex 0.399615 0.607102 0.489362
+       vertex 0.399615 0.607102 -0.510638
+       vertex 0.384824 0.60602 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0729467 0.997336 0
+    outer loop
+       vertex 0.399615 0.607102 0.489362
+       vertex 0.384824 0.60602 -0.510638
+       vertex 0.384824 0.60602 0.489362
+    endloop
+  endfacet
+  facet normal -0.122137 0.992513 0
+    outer loop
+       vertex 0.384824 0.60602 0.489362
+       vertex 0.384824 0.60602 -0.510638
+       vertex 0.370326 0.604236 -0.510638
+    endloop
+  endfacet
+  facet normal -0.122137 0.992513 0
+    outer loop
+       vertex 0.384824 0.60602 0.489362
+       vertex 0.370326 0.604236 -0.510638
+       vertex 0.370326 0.604236 0.489362
+    endloop
+  endfacet
+  facet normal -0.171554 0.985175 0
+    outer loop
+       vertex 0.370326 0.604236 0.489362
+       vertex 0.370326 0.604236 -0.510638
+       vertex 0.356138 0.601766 -0.510638
+    endloop
+  endfacet
+  facet normal -0.171554 0.985175 0
+    outer loop
+       vertex 0.370326 0.604236 0.489362
+       vertex 0.356138 0.601766 -0.510638
+       vertex 0.356138 0.601766 0.489362
+    endloop
+  endfacet
+  facet normal -0.221031 0.975267 0
+    outer loop
+       vertex 0.356138 0.601766 0.489362
+       vertex 0.356138 0.601766 -0.510638
+       vertex 0.342275 0.598624 -0.510638
+    endloop
+  endfacet
+  facet normal -0.221031 0.975267 0
+    outer loop
+       vertex 0.356138 0.601766 0.489362
+       vertex 0.342275 0.598624 -0.510638
+       vertex 0.342275 0.598624 0.489362
+    endloop
+  endfacet
+  facet normal -0.270399 0.962748 0
+    outer loop
+       vertex 0.342275 0.598624 0.489362
+       vertex 0.342275 0.598624 -0.510638
+       vertex 0.328754 0.594826 -0.510638
+    endloop
+  endfacet
+  facet normal -0.270399 0.962748 0
+    outer loop
+       vertex 0.342275 0.598624 0.489362
+       vertex 0.328754 0.594826 -0.510638
+       vertex 0.328754 0.594826 0.489362
+    endloop
+  endfacet
+  facet normal -0.319471 0.947596 0
+    outer loop
+       vertex 0.328754 0.594826 0.489362
+       vertex 0.328754 0.594826 -0.510638
+       vertex 0.315592 0.590389 -0.510638
+    endloop
+  endfacet
+  facet normal -0.319471 0.947596 0
+    outer loop
+       vertex 0.328754 0.594826 0.489362
+       vertex 0.315592 0.590389 -0.510638
+       vertex 0.315592 0.590389 0.489362
+    endloop
+  endfacet
+  facet normal -0.368075 0.929796 0
+    outer loop
+       vertex 0.315592 0.590389 0.489362
+       vertex 0.315592 0.590389 -0.510638
+       vertex 0.302805 0.585327 -0.510638
+    endloop
+  endfacet
+  facet normal -0.368075 0.929796 0
+    outer loop
+       vertex 0.315592 0.590389 0.489362
+       vertex 0.302805 0.585327 -0.510638
+       vertex 0.302805 0.585327 0.489362
+    endloop
+  endfacet
+  facet normal -0.416022 0.909355 0
+    outer loop
+       vertex 0.302805 0.585327 0.489362
+       vertex 0.302805 0.585327 -0.510638
+       vertex 0.29041 0.579656 -0.510638
+    endloop
+  endfacet
+  facet normal -0.416022 0.909355 0
+    outer loop
+       vertex 0.302805 0.585327 0.489362
+       vertex 0.29041 0.579656 -0.510638
+       vertex 0.29041 0.579656 0.489362
+    endloop
+  endfacet
+  facet normal -0.463139 0.886286 0
+    outer loop
+       vertex 0.29041 0.579656 0.489362
+       vertex 0.29041 0.579656 -0.510638
+       vertex 0.278423 0.573392 -0.510638
+    endloop
+  endfacet
+  facet normal -0.463139 0.886286 0
+    outer loop
+       vertex 0.29041 0.579656 0.489362
+       vertex 0.278423 0.573392 -0.510638
+       vertex 0.278423 0.573392 0.489362
+    endloop
+  endfacet
+  facet normal -0.50924 0.860624 0
+    outer loop
+       vertex 0.278423 0.573392 0.489362
+       vertex 0.278423 0.573392 -0.510638
+       vertex 0.26686 0.56655 -0.510638
+    endloop
+  endfacet
+  facet normal -0.50924 0.860624 0
+    outer loop
+       vertex 0.278423 0.573392 0.489362
+       vertex 0.26686 0.56655 -0.510638
+       vertex 0.26686 0.56655 0.489362
+    endloop
+  endfacet
+  facet normal -0.554154 0.832414 0
+    outer loop
+       vertex 0.26686 0.56655 0.489362
+       vertex 0.26686 0.56655 -0.510638
+       vertex 0.255738 0.559146 -0.510638
+    endloop
+  endfacet
+  facet normal -0.554154 0.832414 0
+    outer loop
+       vertex 0.26686 0.56655 0.489362
+       vertex 0.255738 0.559146 -0.510638
+       vertex 0.255738 0.559146 0.489362
+    endloop
+  endfacet
+  facet normal -0.597701 0.801719 0
+    outer loop
+       vertex 0.255738 0.559146 0.489362
+       vertex 0.255738 0.559146 -0.510638
+       vertex 0.245074 0.551196 -0.510638
+    endloop
+  endfacet
+  facet normal -0.597701 0.801719 0
+    outer loop
+       vertex 0.255738 0.559146 0.489362
+       vertex 0.245074 0.551196 -0.510638
+       vertex 0.245074 0.551196 0.489362
+    endloop
+  endfacet
+  facet normal -0.639718 0.76861 0
+    outer loop
+       vertex 0.245074 0.551196 0.489362
+       vertex 0.245074 0.551196 -0.510638
+       vertex 0.234883 0.542714 -0.510638
+    endloop
+  endfacet
+  facet normal -0.639718 0.76861 0
+    outer loop
+       vertex 0.245074 0.551196 0.489362
+       vertex 0.234883 0.542714 -0.510638
+       vertex 0.234883 0.542714 0.489362
+    endloop
+  endfacet
+  facet normal -0.680032 0.733182 0
+    outer loop
+       vertex 0.234883 0.542714 0.489362
+       vertex 0.234883 0.542714 -0.510638
+       vertex 0.225182 0.533716 -0.510638
+    endloop
+  endfacet
+  facet normal -0.680032 0.733182 0
+    outer loop
+       vertex 0.234883 0.542714 0.489362
+       vertex 0.225182 0.533716 -0.510638
+       vertex 0.225182 0.533716 0.489362
+    endloop
+  endfacet
+  facet normal -0.718493 0.695534 0
+    outer loop
+       vertex 0.225182 0.533716 0.489362
+       vertex 0.225182 0.533716 -0.510638
+       vertex 0.215988 0.524219 -0.510638
+    endloop
+  endfacet
+  facet normal -0.718493 0.695534 0
+    outer loop
+       vertex 0.225182 0.533716 0.489362
+       vertex 0.215988 0.524219 -0.510638
+       vertex 0.215988 0.524219 0.489362
+    endloop
+  endfacet
+  facet normal -0.754945 0.655788 0
+    outer loop
+       vertex 0.215988 0.524219 0.489362
+       vertex 0.215988 0.524219 -0.510638
+       vertex 0.207317 0.514237 -0.510638
+    endloop
+  endfacet
+  facet normal -0.754945 0.655788 0
+    outer loop
+       vertex 0.215988 0.524219 0.489362
+       vertex 0.207317 0.514237 -0.510638
+       vertex 0.207317 0.514237 0.489362
+    endloop
+  endfacet
+  facet normal -0.789245 0.614078 0
+    outer loop
+       vertex 0.207317 0.514237 0.489362
+       vertex 0.207317 0.514237 -0.510638
+       vertex 0.199186 0.503786 -0.510638
+    endloop
+  endfacet
+  facet normal -0.789245 0.614078 0
+    outer loop
+       vertex 0.207317 0.514237 0.489362
+       vertex 0.199186 0.503786 -0.510638
+       vertex 0.199186 0.503786 0.489362
+    endloop
+  endfacet
+  facet normal -0.821265 0.570546 0
+    outer loop
+       vertex 0.199186 0.503786 0.489362
+       vertex 0.199186 0.503786 -0.510638
+       vertex 0.191611 0.492882 -0.510638
+    endloop
+  endfacet
+  facet normal -0.821265 0.570546 0
+    outer loop
+       vertex 0.199186 0.503786 0.489362
+       vertex 0.191611 0.492882 -0.510638
+       vertex 0.191611 0.492882 0.489362
+    endloop
+  endfacet
+  facet normal -0.85088 0.52536 0
+    outer loop
+       vertex 0.191611 0.492882 0.489362
+       vertex 0.191611 0.492882 -0.510638
+       vertex 0.184608 0.481541 -0.510638
+    endloop
+  endfacet
+  facet normal -0.85088 0.52536 0
+    outer loop
+       vertex 0.191611 0.492882 0.489362
+       vertex 0.184608 0.481541 -0.510638
+       vertex 0.184608 0.481541 0.489362
+    endloop
+  endfacet
+  facet normal -0.877985 0.478688 0
+    outer loop
+       vertex 0.184608 0.481541 0.489362
+       vertex 0.184608 0.481541 -0.510638
+       vertex 0.178194 0.469776 -0.510638
+    endloop
+  endfacet
+  facet normal -0.877985 0.478688 0
+    outer loop
+       vertex 0.184608 0.481541 0.489362
+       vertex 0.178194 0.469776 -0.510638
+       vertex 0.178194 0.469776 0.489362
+    endloop
+  endfacet
+  facet normal -0.902486 0.43072 0
+    outer loop
+       vertex 0.178194 0.469776 0.489362
+       vertex 0.178194 0.469776 -0.510638
+       vertex 0.172386 0.457606 -0.510638
+    endloop
+  endfacet
+  facet normal -0.902486 0.43072 0
+    outer loop
+       vertex 0.178194 0.469776 0.489362
+       vertex 0.172386 0.457606 -0.510638
+       vertex 0.172386 0.457606 0.489362
+    endloop
+  endfacet
+  facet normal -0.924308 0.381648 0
+    outer loop
+       vertex 0.172386 0.457606 0.489362
+       vertex 0.172386 0.457606 -0.510638
+       vertex 0.167199 0.445044 -0.510638
+    endloop
+  endfacet
+  facet normal -0.924308 0.381648 0
+    outer loop
+       vertex 0.172386 0.457606 0.489362
+       vertex 0.167199 0.445044 -0.510638
+       vertex 0.167199 0.445044 0.489362
+    endloop
+  endfacet
+  facet normal -0.943391 0.331682 0
+    outer loop
+       vertex 0.167199 0.445044 0.489362
+       vertex 0.167199 0.445044 -0.510638
+       vertex 0.16265 0.432106 -0.510638
+    endloop
+  endfacet
+  facet normal -0.943391 0.331682 0
+    outer loop
+       vertex 0.167199 0.445044 0.489362
+       vertex 0.16265 0.432106 -0.510638
+       vertex 0.16265 0.432106 0.489362
+    endloop
+  endfacet
+  facet normal -0.959698 0.281032 0
+    outer loop
+       vertex 0.16265 0.432106 0.489362
+       vertex 0.16265 0.432106 -0.510638
+       vertex 0.158756 0.418809 -0.510638
+    endloop
+  endfacet
+  facet normal -0.959698 0.281032 0
+    outer loop
+       vertex 0.16265 0.432106 0.489362
+       vertex 0.158756 0.418809 -0.510638
+       vertex 0.158756 0.418809 0.489362
+    endloop
+  endfacet
+  facet normal -0.973211 0.229915 0
+    outer loop
+       vertex 0.158756 0.418809 0.489362
+       vertex 0.158756 0.418809 -0.510638
+       vertex 0.155533 0.405167 -0.510638
+    endloop
+  endfacet
+  facet normal -0.973211 0.229915 0
+    outer loop
+       vertex 0.158756 0.418809 0.489362
+       vertex 0.155533 0.405167 -0.510638
+       vertex 0.155533 0.405167 0.489362
+    endloop
+  endfacet
+  facet normal -0.98393 0.178553 0
+    outer loop
+       vertex 0.155533 0.405167 0.489362
+       vertex 0.155533 0.405167 -0.510638
+       vertex 0.152998 0.391196 -0.510638
+    endloop
+  endfacet
+  facet normal -0.98393 0.178553 0
+    outer loop
+       vertex 0.155533 0.405167 0.489362
+       vertex 0.152998 0.391196 -0.510638
+       vertex 0.152998 0.391196 0.489362
+    endloop
+  endfacet
+  facet normal -0.991882 0.127162 0
+    outer loop
+       vertex 0.152998 0.391196 0.489362
+       vertex 0.152998 0.391196 -0.510638
+       vertex 0.151167 0.376912 -0.510638
+    endloop
+  endfacet
+  facet normal -0.991882 0.127162 0
+    outer loop
+       vertex 0.152998 0.391196 0.489362
+       vertex 0.151167 0.376912 -0.510638
+       vertex 0.151167 0.376912 0.489362
+    endloop
+  endfacet
+  facet normal -0.997111 0.0759583 0
+    outer loop
+       vertex 0.151167 0.376912 0.489362
+       vertex 0.151167 0.376912 -0.510638
+       vertex 0.150056 0.36233 -0.510638
+    endloop
+  endfacet
+  facet normal -0.997111 0.0759583 0
+    outer loop
+       vertex 0.151167 0.376912 0.489362
+       vertex 0.150056 0.36233 -0.510638
+       vertex 0.150056 0.36233 0.489362
+    endloop
+  endfacet
+  facet normal -0.999684 0.0251486 0
+    outer loop
+       vertex 0.150056 0.36233 0.489362
+       vertex 0.150056 0.36233 -0.510638
+       vertex 0.149682 0.347466 -0.510638
+    endloop
+  endfacet
+  facet normal -0.999684 0.0251486 0
+    outer loop
+       vertex 0.150056 0.36233 0.489362
+       vertex 0.149682 0.347466 -0.510638
+       vertex 0.149682 0.347466 0.489362
+    endloop
+  endfacet
+  facet normal -0.99968 -0.0253065 -0
+    outer loop
+       vertex 0.149682 0.347466 0.489362
+       vertex 0.149682 0.347466 -0.510638
+       vertex 0.150056 0.332696 -0.510638
+    endloop
+  endfacet
+  facet normal -0.99968 -0.0253065 0
+    outer loop
+       vertex 0.149682 0.347466 0.489362
+       vertex 0.150056 0.332696 -0.510638
+       vertex 0.150056 0.332696 0.489362
+    endloop
+  endfacet
+  facet normal -0.997079 -0.076378 -0
+    outer loop
+       vertex 0.150056 0.332696 0.489362
+       vertex 0.150056 0.332696 -0.510638
+       vertex 0.151167 0.318195 -0.510638
+    endloop
+  endfacet
+  facet normal -0.997079 -0.076378 0
+    outer loop
+       vertex 0.150056 0.332696 0.489362
+       vertex 0.151167 0.318195 -0.510638
+       vertex 0.151167 0.318195 0.489362
+    endloop
+  endfacet
+  facet normal -0.991804 -0.127768 -0
+    outer loop
+       vertex 0.151167 0.318195 0.489362
+       vertex 0.151167 0.318195 -0.510638
+       vertex 0.152998 0.303979 -0.510638
+    endloop
+  endfacet
+  facet normal -0.991804 -0.127768 0
+    outer loop
+       vertex 0.151167 0.318195 0.489362
+       vertex 0.152998 0.303979 -0.510638
+       vertex 0.152998 0.303979 0.489362
+    endloop
+  endfacet
+  facet normal -0.983801 -0.179266 -0
+    outer loop
+       vertex 0.152998 0.303979 0.489362
+       vertex 0.152998 0.303979 -0.510638
+       vertex 0.155533 0.290066 -0.510638
+    endloop
+  endfacet
+  facet normal -0.983801 -0.179266 0
+    outer loop
+       vertex 0.152998 0.303979 0.489362
+       vertex 0.155533 0.290066 -0.510638
+       vertex 0.155533 0.290066 0.489362
+    endloop
+  endfacet
+  facet normal -0.973033 -0.230664 -0
+    outer loop
+       vertex 0.155533 0.290066 0.489362
+       vertex 0.155533 0.290066 -0.510638
+       vertex 0.158756 0.276471 -0.510638
+    endloop
+  endfacet
+  facet normal -0.973033 -0.230664 0
+    outer loop
+       vertex 0.155533 0.290066 0.489362
+       vertex 0.158756 0.276471 -0.510638
+       vertex 0.158756 0.276471 0.489362
+    endloop
+  endfacet
+  facet normal -0.959488 -0.281749 -0
+    outer loop
+       vertex 0.158756 0.276471 0.489362
+       vertex 0.158756 0.276471 -0.510638
+       vertex 0.16265 0.26321 -0.510638
+    endloop
+  endfacet
+  facet normal -0.959488 -0.281749 0
+    outer loop
+       vertex 0.158756 0.276471 0.489362
+       vertex 0.16265 0.26321 -0.510638
+       vertex 0.16265 0.26321 0.489362
+    endloop
+  endfacet
+  facet normal -0.94317 -0.33231 -0
+    outer loop
+       vertex 0.16265 0.26321 0.489362
+       vertex 0.16265 0.26321 -0.510638
+       vertex 0.167199 0.2503 -0.510638
+    endloop
+  endfacet
+  facet normal -0.94317 -0.33231 0
+    outer loop
+       vertex 0.16265 0.26321 0.489362
+       vertex 0.167199 0.2503 -0.510638
+       vertex 0.167199 0.2503 0.489362
+    endloop
+  endfacet
+  facet normal -0.924106 -0.382136 -0
+    outer loop
+       vertex 0.167199 0.2503 0.489362
+       vertex 0.167199 0.2503 -0.510638
+       vertex 0.172386 0.237757 -0.510638
+    endloop
+  endfacet
+  facet normal -0.924106 -0.382136 0
+    outer loop
+       vertex 0.167199 0.2503 0.489362
+       vertex 0.172386 0.237757 -0.510638
+       vertex 0.172386 0.237757 0.489362
+    endloop
+  endfacet
+  facet normal -0.902337 -0.43103 -0
+    outer loop
+       vertex 0.172386 0.237757 0.489362
+       vertex 0.172386 0.237757 -0.510638
+       vertex 0.178194 0.225597 -0.510638
+    endloop
+  endfacet
+  facet normal -0.902337 -0.43103 0
+    outer loop
+       vertex 0.172386 0.237757 0.489362
+       vertex 0.178194 0.225597 -0.510638
+       vertex 0.178194 0.225597 0.489362
+    endloop
+  endfacet
+  facet normal -0.877926 -0.478797 -0
+    outer loop
+       vertex 0.178194 0.225597 0.489362
+       vertex 0.178194 0.225597 -0.510638
+       vertex 0.184608 0.213837 -0.510638
+    endloop
+  endfacet
+  facet normal -0.877926 -0.478797 0
+    outer loop
+       vertex 0.178194 0.225597 0.489362
+       vertex 0.184608 0.213837 -0.510638
+       vertex 0.184608 0.213837 0.489362
+    endloop
+  endfacet
+  facet normal -0.850947 -0.525252 -0
+    outer loop
+       vertex 0.184608 0.213837 0.489362
+       vertex 0.184608 0.213837 -0.510638
+       vertex 0.191611 0.202492 -0.510638
+    endloop
+  endfacet
+  facet normal -0.850947 -0.525252 0
+    outer loop
+       vertex 0.184608 0.213837 0.489362
+       vertex 0.191611 0.202492 -0.510638
+       vertex 0.191611 0.202492 0.489362
+    endloop
+  endfacet
+  facet normal -0.821491 -0.570222 -0
+    outer loop
+       vertex 0.191611 0.202492 0.489362
+       vertex 0.191611 0.202492 -0.510638
+       vertex 0.199186 0.191578 -0.510638
+    endloop
+  endfacet
+  facet normal -0.821491 -0.570222 0
+    outer loop
+       vertex 0.191611 0.202492 0.489362
+       vertex 0.199186 0.191578 -0.510638
+       vertex 0.199186 0.191578 0.489362
+    endloop
+  endfacet
+  facet normal -0.78966 -0.613545 -0
+    outer loop
+       vertex 0.199186 0.191578 0.489362
+       vertex 0.199186 0.191578 -0.510638
+       vertex 0.207317 0.181113 -0.510638
+    endloop
+  endfacet
+  facet normal -0.78966 -0.613545 0
+    outer loop
+       vertex 0.199186 0.191578 0.489362
+       vertex 0.207317 0.181113 -0.510638
+       vertex 0.207317 0.181113 0.489362
+    endloop
+  endfacet
+  facet normal -0.755568 -0.65507 -0
+    outer loop
+       vertex 0.207317 0.181113 0.489362
+       vertex 0.207317 0.181113 -0.510638
+       vertex 0.215988 0.171112 -0.510638
+    endloop
+  endfacet
+  facet normal -0.755568 -0.65507 0
+    outer loop
+       vertex 0.207317 0.181113 0.489362
+       vertex 0.215988 0.171112 -0.510638
+       vertex 0.215988 0.171112 0.489362
+    endloop
+  endfacet
+  facet normal -0.719341 -0.694657 -0
+    outer loop
+       vertex 0.215988 0.171112 0.489362
+       vertex 0.215988 0.171112 -0.510638
+       vertex 0.225182 0.161591 -0.510638
+    endloop
+  endfacet
+  facet normal -0.719341 -0.694657 0
+    outer loop
+       vertex 0.215988 0.171112 0.489362
+       vertex 0.225182 0.161591 -0.510638
+       vertex 0.225182 0.161591 0.489362
+    endloop
+  endfacet
+  facet normal -0.68111 -0.732181 -0
+    outer loop
+       vertex 0.225182 0.161591 0.489362
+       vertex 0.225182 0.161591 -0.510638
+       vertex 0.234883 0.152567 -0.510638
+    endloop
+  endfacet
+  facet normal -0.68111 -0.732181 0
+    outer loop
+       vertex 0.225182 0.161591 0.489362
+       vertex 0.234883 0.152567 -0.510638
+       vertex 0.234883 0.152567 0.489362
+    endloop
+  endfacet
+  facet normal -0.641016 -0.767527 -0
+    outer loop
+       vertex 0.234883 0.152567 0.489362
+       vertex 0.234883 0.152567 -0.510638
+       vertex 0.245074 0.144056 -0.510638
+    endloop
+  endfacet
+  facet normal -0.641016 -0.767527 0
+    outer loop
+       vertex 0.234883 0.152567 0.489362
+       vertex 0.245074 0.144056 -0.510638
+       vertex 0.245074 0.144056 0.489362
+    endloop
+  endfacet
+  facet normal -0.599207 -0.800594 -0
+    outer loop
+       vertex 0.245074 0.144056 0.489362
+       vertex 0.245074 0.144056 -0.510638
+       vertex 0.255738 0.136074 -0.510638
+    endloop
+  endfacet
+  facet normal -0.599207 -0.800594 0
+    outer loop
+       vertex 0.245074 0.144056 0.489362
+       vertex 0.255738 0.136074 -0.510638
+       vertex 0.255738 0.136074 0.489362
+    endloop
+  endfacet
+  facet normal -0.555839 -0.83129 -0
+    outer loop
+       vertex 0.255738 0.136074 0.489362
+       vertex 0.255738 0.136074 -0.510638
+       vertex 0.26686 0.128638 -0.510638
+    endloop
+  endfacet
+  facet normal -0.555839 -0.83129 0
+    outer loop
+       vertex 0.255738 0.136074 0.489362
+       vertex 0.26686 0.128638 -0.510638
+       vertex 0.26686 0.128638 0.489362
+    endloop
+  endfacet
+  facet normal -0.511069 -0.85954 -0
+    outer loop
+       vertex 0.26686 0.128638 0.489362
+       vertex 0.26686 0.128638 -0.510638
+       vertex 0.278423 0.121763 -0.510638
+    endloop
+  endfacet
+  facet normal -0.511069 -0.85954 0
+    outer loop
+       vertex 0.26686 0.128638 0.489362
+       vertex 0.278423 0.121763 -0.510638
+       vertex 0.278423 0.121763 0.489362
+    endloop
+  endfacet
+  facet normal -0.465064 -0.885277 -0
+    outer loop
+       vertex 0.278423 0.121763 0.489362
+       vertex 0.278423 0.121763 -0.510638
+       vertex 0.29041 0.115465 -0.510638
+    endloop
+  endfacet
+  facet normal -0.465064 -0.885277 0
+    outer loop
+       vertex 0.278423 0.121763 0.489362
+       vertex 0.29041 0.115465 -0.510638
+       vertex 0.29041 0.115465 0.489362
+    endloop
+  endfacet
+  facet normal -0.417995 -0.908449 -0
+    outer loop
+       vertex 0.29041 0.115465 0.489362
+       vertex 0.29041 0.115465 -0.510638
+       vertex 0.302805 0.109762 -0.510638
+    endloop
+  endfacet
+  facet normal -0.417995 -0.908449 0
+    outer loop
+       vertex 0.29041 0.115465 0.489362
+       vertex 0.302805 0.109762 -0.510638
+       vertex 0.302805 0.109762 0.489362
+    endloop
+  endfacet
+  facet normal -0.370034 -0.929018 -0
+    outer loop
+       vertex 0.302805 0.109762 0.489362
+       vertex 0.302805 0.109762 -0.510638
+       vertex 0.315592 0.104669 -0.510638
+    endloop
+  endfacet
+  facet normal -0.370034 -0.929018 0
+    outer loop
+       vertex 0.302805 0.109762 0.489362
+       vertex 0.315592 0.104669 -0.510638
+       vertex 0.315592 0.104669 0.489362
+    endloop
+  endfacet
+  facet normal -0.321359 -0.946957 -0
+    outer loop
+       vertex 0.315592 0.104669 0.489362
+       vertex 0.315592 0.104669 -0.510638
+       vertex 0.328754 0.100202 -0.510638
+    endloop
+  endfacet
+  facet normal -0.321359 -0.946957 0
+    outer loop
+       vertex 0.315592 0.104669 0.489362
+       vertex 0.328754 0.100202 -0.510638
+       vertex 0.328754 0.100202 0.489362
+    endloop
+  endfacet
+  facet normal -0.27215 -0.962255 -0
+    outer loop
+       vertex 0.328754 0.100202 0.489362
+       vertex 0.328754 0.100202 -0.510638
+       vertex 0.342275 0.0963784 -0.510638
+    endloop
+  endfacet
+  facet normal -0.27215 -0.962255 0
+    outer loop
+       vertex 0.328754 0.100202 0.489362
+       vertex 0.342275 0.0963784 -0.510638
+       vertex 0.342275 0.0963784 0.489362
+    endloop
+  endfacet
+  facet normal -0.222586 -0.974913 -0
+    outer loop
+       vertex 0.342275 0.0963784 0.489362
+       vertex 0.342275 0.0963784 -0.510638
+       vertex 0.356138 0.0932133 -0.510638
+    endloop
+  endfacet
+  facet normal -0.222586 -0.974913 0
+    outer loop
+       vertex 0.342275 0.0963784 0.489362
+       vertex 0.356138 0.0932133 -0.510638
+       vertex 0.356138 0.0932133 0.489362
+    endloop
+  endfacet
+  facet normal -0.172849 -0.984948 -0
+    outer loop
+       vertex 0.356138 0.0932133 0.489362
+       vertex 0.356138 0.0932133 -0.510638
+       vertex 0.370326 0.0907234 -0.510638
+    endloop
+  endfacet
+  facet normal -0.172849 -0.984948 0
+    outer loop
+       vertex 0.356138 0.0932133 0.489362
+       vertex 0.370326 0.0907234 -0.510638
+       vertex 0.370326 0.0907234 0.489362
+    endloop
+  endfacet
+  facet normal -0.123117 -0.992392 -0
+    outer loop
+       vertex 0.370326 0.0907234 0.489362
+       vertex 0.370326 0.0907234 -0.510638
+       vertex 0.384824 0.0889248 -0.510638
+    endloop
+  endfacet
+  facet normal -0.123117 -0.992392 0
+    outer loop
+       vertex 0.370326 0.0907234 0.489362
+       vertex 0.384824 0.0889248 -0.510638
+       vertex 0.384824 0.0889248 0.489362
+    endloop
+  endfacet
+  facet normal -0.0735669 -0.99729 -0
+    outer loop
+       vertex 0.384824 0.0889248 0.489362
+       vertex 0.384824 0.0889248 -0.510638
+       vertex 0.399615 0.0878337 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0735669 -0.99729 0
+    outer loop
+       vertex 0.384824 0.0889248 0.489362
+       vertex 0.399615 0.0878337 -0.510638
+       vertex 0.399615 0.0878337 0.489362
+    endloop
+  endfacet
+  facet normal -0.0243701 -0.999703 -0
+    outer loop
+       vertex 0.399615 0.0878337 0.489362
+       vertex 0.399615 0.0878337 -0.510638
+       vertex 0.414682 0.0874664 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0243701 -0.999703 0
+    outer loop
+       vertex 0.399615 0.0878337 0.489362
+       vertex 0.414682 0.0874664 -0.510638
+       vertex 0.414682 0.0874664 0.489362
+    endloop
+  endfacet
+  facet normal 0.0242141 -0.999707 0
+    outer loop
+       vertex 0.414682 0.0874664 0.489362
+       vertex 0.414682 0.0874664 -0.510638
+       vertex 0.429846 0.0878337 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0242141 -0.999707 0
+    outer loop
+       vertex 0.414682 0.0874664 0.489362
+       vertex 0.429846 0.0878337 -0.510638
+       vertex 0.429846 0.0878337 0.489362
+    endloop
+  endfacet
+  facet normal 1 0 0
+    outer loop
+       vertex 0.883682 -0.223534 0.489362
+       vertex 0.883682 -0.223534 -0.510638
+       vertex 0.883682 0.455466 -0.510638
+    endloop
+  endfacet
+  facet normal 1 -0 0
+    outer loop
+       vertex 0.883682 -0.223534 0.489362
+       vertex 0.883682 0.455466 -0.510638
+       vertex 0.883682 0.455466 0.489362
+    endloop
+  endfacet
+  facet normal 0 -1 0
+    outer loop
+       vertex 0.883682 0.455466 0.489362
+       vertex 0.883682 0.455466 -0.510638
+       vertex 1.03768 0.455466 -0.510638
+    endloop
+  endfacet
+  facet normal 0 -1 0
+    outer loop
+       vertex 0.883682 0.455466 0.489362
+       vertex 1.03768 0.455466 -0.510638
+       vertex 1.03768 0.455466 0.489362
+    endloop
+  endfacet
+  facet normal -0.0164809 -0.999864 -0
+    outer loop
+       vertex 1.03768 0.455466 0.489362
+       vertex 1.03768 0.455466 -0.510638
+       vertex 1.05383 0.4552 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0164809 -0.999864 0
+    outer loop
+       vertex 1.03768 0.455466 0.489362
+       vertex 1.05383 0.4552 -0.510638
+       vertex 1.05383 0.4552 0.489362
+    endloop
+  endfacet
+  facet normal -0.0508651 -0.998706 -0
+    outer loop
+       vertex 1.05383 0.4552 0.489362
+       vertex 1.05383 0.4552 -0.510638
+       vertex 1.06948 0.454403 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0508651 -0.998706 0
+    outer loop
+       vertex 1.05383 0.4552 0.489362
+       vertex 1.06948 0.454403 -0.510638
+       vertex 1.06948 0.454403 0.489362
+    endloop
+  endfacet
+  facet normal -0.0871752 -0.996193 -0
+    outer loop
+       vertex 1.06948 0.454403 0.489362
+       vertex 1.06948 0.454403 -0.510638
+       vertex 1.08462 0.453078 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0871752 -0.996193 0
+    outer loop
+       vertex 1.06948 0.454403 0.489362
+       vertex 1.08462 0.453078 -0.510638
+       vertex 1.08462 0.453078 0.489362
+    endloop
+  endfacet
+  facet normal -0.125461 -0.992099 -0
+    outer loop
+       vertex 1.08462 0.453078 0.489362
+       vertex 1.08462 0.453078 -0.510638
+       vertex 1.09925 0.451228 -0.510638
+    endloop
+  endfacet
+  facet normal -0.125461 -0.992099 0
+    outer loop
+       vertex 1.08462 0.453078 0.489362
+       vertex 1.09925 0.451228 -0.510638
+       vertex 1.09925 0.451228 0.489362
+    endloop
+  endfacet
+  facet normal -0.165746 -0.986169 -0
+    outer loop
+       vertex 1.09925 0.451228 0.489362
+       vertex 1.09925 0.451228 -0.510638
+       vertex 1.11337 0.448855 -0.510638
+    endloop
+  endfacet
+  facet normal -0.165746 -0.986169 0
+    outer loop
+       vertex 1.09925 0.451228 0.489362
+       vertex 1.11337 0.448855 -0.510638
+       vertex 1.11337 0.448855 0.489362
+    endloop
+  endfacet
+  facet normal -0.208015 -0.978126 -0
+    outer loop
+       vertex 1.11337 0.448855 0.489362
+       vertex 1.11337 0.448855 -0.510638
+       vertex 1.12697 0.445962 -0.510638
+    endloop
+  endfacet
+  facet normal -0.208015 -0.978126 0
+    outer loop
+       vertex 1.11337 0.448855 0.489362
+       vertex 1.12697 0.445962 -0.510638
+       vertex 1.12697 0.445962 0.489362
+    endloop
+  endfacet
+  facet normal -0.252211 -0.967672 -0
+    outer loop
+       vertex 1.12697 0.445962 0.489362
+       vertex 1.12697 0.445962 -0.510638
+       vertex 1.14005 0.442552 -0.510638
+    endloop
+  endfacet
+  facet normal -0.252211 -0.967672 0
+    outer loop
+       vertex 1.12697 0.445962 0.489362
+       vertex 1.14005 0.442552 -0.510638
+       vertex 1.14005 0.442552 0.489362
+    endloop
+  endfacet
+  facet normal -0.298217 -0.954498 -0
+    outer loop
+       vertex 1.14005 0.442552 0.489362
+       vertex 1.14005 0.442552 -0.510638
+       vertex 1.15262 0.438627 -0.510638
+    endloop
+  endfacet
+  facet normal -0.298217 -0.954498 0
+    outer loop
+       vertex 1.14005 0.442552 0.489362
+       vertex 1.15262 0.438627 -0.510638
+       vertex 1.15262 0.438627 0.489362
+    endloop
+  endfacet
+  facet normal -0.345843 -0.938292 -0
+    outer loop
+       vertex 1.15262 0.438627 0.489362
+       vertex 1.15262 0.438627 -0.510638
+       vertex 1.16465 0.43419 -0.510638
+    endloop
+  endfacet
+  facet normal -0.345843 -0.938292 0
+    outer loop
+       vertex 1.15262 0.438627 0.489362
+       vertex 1.16465 0.43419 -0.510638
+       vertex 1.16465 0.43419 0.489362
+    endloop
+  endfacet
+  facet normal -0.394834 -0.918752 -0
+    outer loop
+       vertex 1.16465 0.43419 0.489362
+       vertex 1.16465 0.43419 -0.510638
+       vertex 1.17616 0.429244 -0.510638
+    endloop
+  endfacet
+  facet normal -0.394834 -0.918752 0
+    outer loop
+       vertex 1.16465 0.43419 0.489362
+       vertex 1.17616 0.429244 -0.510638
+       vertex 1.17616 0.429244 0.489362
+    endloop
+  endfacet
+  facet normal -0.444845 -0.895608 -0
+    outer loop
+       vertex 1.17616 0.429244 0.489362
+       vertex 1.17616 0.429244 -0.510638
+       vertex 1.18714 0.423791 -0.510638
+    endloop
+  endfacet
+  facet normal -0.444845 -0.895608 0
+    outer loop
+       vertex 1.17616 0.429244 0.489362
+       vertex 1.18714 0.423791 -0.510638
+       vertex 1.18714 0.423791 0.489362
+    endloop
+  endfacet
+  facet normal -0.495436 -0.868644 -0
+    outer loop
+       vertex 1.18714 0.423791 0.489362
+       vertex 1.18714 0.423791 -0.510638
+       vertex 1.19759 0.417834 -0.510638
+    endloop
+  endfacet
+  facet normal -0.495436 -0.868644 0
+    outer loop
+       vertex 1.18714 0.423791 0.489362
+       vertex 1.19759 0.417834 -0.510638
+       vertex 1.19759 0.417834 0.489362
+    endloop
+  endfacet
+  facet normal -0.546107 -0.837716 -0
+    outer loop
+       vertex 1.19759 0.417834 0.489362
+       vertex 1.19759 0.417834 -0.510638
+       vertex 1.20749 0.411376 -0.510638
+    endloop
+  endfacet
+  facet normal -0.546107 -0.837716 0
+    outer loop
+       vertex 1.19759 0.417834 0.489362
+       vertex 1.20749 0.411376 -0.510638
+       vertex 1.20749 0.411376 0.489362
+    endloop
+  endfacet
+  facet normal -0.596269 -0.802784 -0
+    outer loop
+       vertex 1.20749 0.411376 0.489362
+       vertex 1.20749 0.411376 -0.510638
+       vertex 1.21686 0.404419 -0.510638
+    endloop
+  endfacet
+  facet normal -0.596269 -0.802784 0
+    outer loop
+       vertex 1.20749 0.411376 0.489362
+       vertex 1.21686 0.404419 -0.510638
+       vertex 1.21686 0.404419 0.489362
+    endloop
+  endfacet
+  facet normal -0.645309 -0.763921 -0
+    outer loop
+       vertex 1.21686 0.404419 0.489362
+       vertex 1.21686 0.404419 -0.510638
+       vertex 1.22568 0.396966 -0.510638
+    endloop
+  endfacet
+  facet normal -0.645309 -0.763921 0
+    outer loop
+       vertex 1.21686 0.404419 0.489362
+       vertex 1.22568 0.396966 -0.510638
+       vertex 1.22568 0.396966 0.489362
+    endloop
+  endfacet
+  facet normal -0.692585 -0.721337 -0
+    outer loop
+       vertex 1.22568 0.396966 0.489362
+       vertex 1.22568 0.396966 -0.510638
+       vertex 1.23396 0.38902 -0.510638
+    endloop
+  endfacet
+  facet normal -0.692585 -0.721337 0
+    outer loop
+       vertex 1.22568 0.396966 0.489362
+       vertex 1.23396 0.38902 -0.510638
+       vertex 1.23396 0.38902 0.489362
+    endloop
+  endfacet
+  facet normal -0.737476 -0.675374 -0
+    outer loop
+       vertex 1.23396 0.38902 0.489362
+       vertex 1.23396 0.38902 -0.510638
+       vertex 1.24168 0.380583 -0.510638
+    endloop
+  endfacet
+  facet normal -0.737476 -0.675374 0
+    outer loop
+       vertex 1.23396 0.38902 0.489362
+       vertex 1.24168 0.380583 -0.510638
+       vertex 1.24168 0.380583 0.489362
+    endloop
+  endfacet
+  facet normal -0.779435 -0.626484 -0
+    outer loop
+       vertex 1.24168 0.380583 0.489362
+       vertex 1.24168 0.380583 -0.510638
+       vertex 1.24886 0.371658 -0.510638
+    endloop
+  endfacet
+  facet normal -0.779435 -0.626484 0
+    outer loop
+       vertex 1.24168 0.380583 0.489362
+       vertex 1.24886 0.371658 -0.510638
+       vertex 1.24886 0.371658 0.489362
+    endloop
+  endfacet
+  facet normal -0.817994 -0.575227 -0
+    outer loop
+       vertex 1.24886 0.371658 0.489362
+       vertex 1.24886 0.371658 -0.510638
+       vertex 1.25548 0.362248 -0.510638
+    endloop
+  endfacet
+  facet normal -0.817994 -0.575227 0
+    outer loop
+       vertex 1.24886 0.371658 0.489362
+       vertex 1.25548 0.362248 -0.510638
+       vertex 1.25548 0.362248 0.489362
+    endloop
+  endfacet
+  facet normal -0.852795 -0.522246 -0
+    outer loop
+       vertex 1.25548 0.362248 0.489362
+       vertex 1.25548 0.362248 -0.510638
+       vertex 1.26153 0.352355 -0.510638
+    endloop
+  endfacet
+  facet normal -0.852795 -0.522246 0
+    outer loop
+       vertex 1.25548 0.362248 0.489362
+       vertex 1.26153 0.352355 -0.510638
+       vertex 1.26153 0.352355 0.489362
+    endloop
+  endfacet
+  facet normal -0.883625 -0.468195 -0
+    outer loop
+       vertex 1.26153 0.352355 0.489362
+       vertex 1.26153 0.352355 -0.510638
+       vertex 1.26703 0.341982 -0.510638
+    endloop
+  endfacet
+  facet normal -0.883625 -0.468195 0
+    outer loop
+       vertex 1.26153 0.352355 0.489362
+       vertex 1.26703 0.341982 -0.510638
+       vertex 1.26703 0.341982 0.489362
+    endloop
+  endfacet
+  facet normal -0.9104 -0.413729 -0
+    outer loop
+       vertex 1.26703 0.341982 0.489362
+       vertex 1.26703 0.341982 -0.510638
+       vertex 1.27196 0.331132 -0.510638
+    endloop
+  endfacet
+  facet normal -0.9104 -0.413729 0
+    outer loop
+       vertex 1.26703 0.341982 0.489362
+       vertex 1.27196 0.331132 -0.510638
+       vertex 1.27196 0.331132 0.489362
+    endloop
+  endfacet
+  facet normal -0.933163 -0.359454 -0
+    outer loop
+       vertex 1.27196 0.331132 0.489362
+       vertex 1.27196 0.331132 -0.510638
+       vertex 1.27632 0.319807 -0.510638
+    endloop
+  endfacet
+  facet normal -0.933163 -0.359454 0
+    outer loop
+       vertex 1.27196 0.331132 0.489362
+       vertex 1.27632 0.319807 -0.510638
+       vertex 1.27632 0.319807 0.489362
+    endloop
+  endfacet
+  facet normal -0.952052 -0.305936 -0
+    outer loop
+       vertex 1.27632 0.319807 0.489362
+       vertex 1.27632 0.319807 -0.510638
+       vertex 1.28011 0.30801 -0.510638
+    endloop
+  endfacet
+  facet normal -0.952052 -0.305936 0
+    outer loop
+       vertex 1.27632 0.319807 0.489362
+       vertex 1.28011 0.30801 -0.510638
+       vertex 1.28011 0.30801 0.489362
+    endloop
+  endfacet
+  facet normal -0.967303 -0.253623 -0
+    outer loop
+       vertex 1.28011 0.30801 0.489362
+       vertex 1.28011 0.30801 -0.510638
+       vertex 1.28333 0.295744 -0.510638
+    endloop
+  endfacet
+  facet normal -0.967303 -0.253623 0
+    outer loop
+       vertex 1.28011 0.30801 0.489362
+       vertex 1.28333 0.295744 -0.510638
+       vertex 1.28333 0.295744 0.489362
+    endloop
+  endfacet
+  facet normal -0.9792 -0.202897 -0
+    outer loop
+       vertex 1.28333 0.295744 0.489362
+       vertex 1.28333 0.295744 -0.510638
+       vertex 1.28597 0.283011 -0.510638
+    endloop
+  endfacet
+  facet normal -0.9792 -0.202897 0
+    outer loop
+       vertex 1.28333 0.295744 0.489362
+       vertex 1.28597 0.283011 -0.510638
+       vertex 1.28597 0.283011 0.489362
+    endloop
+  endfacet
+  facet normal -0.988064 -0.154042 -0
+    outer loop
+       vertex 1.28597 0.283011 0.489362
+       vertex 1.28597 0.283011 -0.510638
+       vertex 1.28803 0.269814 -0.510638
+    endloop
+  endfacet
+  facet normal -0.988064 -0.154042 0
+    outer loop
+       vertex 1.28597 0.283011 0.489362
+       vertex 1.28803 0.269814 -0.510638
+       vertex 1.28803 0.269814 0.489362
+    endloop
+  endfacet
+  facet normal -0.994231 -0.107256 -0
+    outer loop
+       vertex 1.28803 0.269814 0.489362
+       vertex 1.28803 0.269814 -0.510638
+       vertex 1.2895 0.256156 -0.510638
+    endloop
+  endfacet
+  facet normal -0.994231 -0.107256 0
+    outer loop
+       vertex 1.28803 0.269814 0.489362
+       vertex 1.2895 0.256156 -0.510638
+       vertex 1.2895 0.256156 0.489362
+    endloop
+  endfacet
+  facet normal -0.998035 -0.0626611 -0
+    outer loop
+       vertex 1.2895 0.256156 0.489362
+       vertex 1.2895 0.256156 -0.510638
+       vertex 1.29039 0.242039 -0.510638
+    endloop
+  endfacet
+  facet normal -0.998035 -0.0626611 0
+    outer loop
+       vertex 1.2895 0.256156 0.489362
+       vertex 1.29039 0.242039 -0.510638
+       vertex 1.29039 0.242039 0.489362
+    endloop
+  endfacet
+  facet normal -0.999794 -0.0203154 -0
+    outer loop
+       vertex 1.29039 0.242039 0.489362
+       vertex 1.29039 0.242039 -0.510638
+       vertex 1.29068 0.227466 -0.510638
+    endloop
+  endfacet
+  facet normal -0.999794 -0.0203154 0
+    outer loop
+       vertex 1.29039 0.242039 0.489362
+       vertex 1.29068 0.227466 -0.510638
+       vertex 1.29068 0.227466 0.489362
+    endloop
+  endfacet
+  facet normal -0.999722 0.0235596 0
+    outer loop
+       vertex 1.29068 0.227466 0.489362
+       vertex 1.29068 0.227466 -0.510638
+       vertex 1.29037 0.214102 -0.510638
+    endloop
+  endfacet
+  facet normal -0.999722 0.0235596 0
+    outer loop
+       vertex 1.29068 0.227466 0.489362
+       vertex 1.29037 0.214102 -0.510638
+       vertex 1.29037 0.214102 0.489362
+    endloop
+  endfacet
+  facet normal -0.997456 0.071285 0
+    outer loop
+       vertex 1.29037 0.214102 0.489362
+       vertex 1.29037 0.214102 -0.510638
+       vertex 1.28943 0.201016 -0.510638
+    endloop
+  endfacet
+  facet normal -0.997456 0.071285 0
+    outer loop
+       vertex 1.29037 0.214102 0.489362
+       vertex 1.28943 0.201016 -0.510638
+       vertex 1.28943 0.201016 0.489362
+    endloop
+  endfacet
+  facet normal -0.992805 0.119742 0
+    outer loop
+       vertex 1.28943 0.201016 0.489362
+       vertex 1.28943 0.201016 -0.510638
+       vertex 1.28789 0.188221 -0.510638
+    endloop
+  endfacet
+  facet normal -0.992805 0.119742 0
+    outer loop
+       vertex 1.28943 0.201016 0.489362
+       vertex 1.28789 0.188221 -0.510638
+       vertex 1.28789 0.188221 0.489362
+    endloop
+  endfacet
+  facet normal -0.98566 0.168744 0
+    outer loop
+       vertex 1.28789 0.188221 0.489362
+       vertex 1.28789 0.188221 -0.510638
+       vertex 1.28575 0.17573 -0.510638
+    endloop
+  endfacet
+  facet normal -0.98566 0.168744 0
+    outer loop
+       vertex 1.28789 0.188221 0.489362
+       vertex 1.28575 0.17573 -0.510638
+       vertex 1.28575 0.17573 0.489362
+    endloop
+  endfacet
+  facet normal -0.975924 0.218112 0
+    outer loop
+       vertex 1.28575 0.17573 0.489362
+       vertex 1.28575 0.17573 -0.510638
+       vertex 1.28303 0.163554 -0.510638
+    endloop
+  endfacet
+  facet normal -0.975924 0.218112 0
+    outer loop
+       vertex 1.28575 0.17573 0.489362
+       vertex 1.28303 0.163554 -0.510638
+       vertex 1.28303 0.163554 0.489362
+    endloop
+  endfacet
+  facet normal -0.963515 0.267655 0
+    outer loop
+       vertex 1.28303 0.163554 0.489362
+       vertex 1.28303 0.163554 -0.510638
+       vertex 1.27974 0.151706 -0.510638
+    endloop
+  endfacet
+  facet normal -0.963515 0.267655 0
+    outer loop
+       vertex 1.28303 0.163554 0.489362
+       vertex 1.27974 0.151706 -0.510638
+       vertex 1.27974 0.151706 0.489362
+    endloop
+  endfacet
+  facet normal -0.948372 0.317159 0
+    outer loop
+       vertex 1.27974 0.151706 0.489362
+       vertex 1.27974 0.151706 -0.510638
+       vertex 1.27589 0.140198 -0.510638
+    endloop
+  endfacet
+  facet normal -0.948372 0.317159 0
+    outer loop
+       vertex 1.27974 0.151706 0.489362
+       vertex 1.27589 0.140198 -0.510638
+       vertex 1.27589 0.140198 0.489362
+    endloop
+  endfacet
+  facet normal -0.93045 0.366419 0
+    outer loop
+       vertex 1.27589 0.140198 0.489362
+       vertex 1.27589 0.140198 -0.510638
+       vertex 1.2715 0.129043 -0.510638
+    endloop
+  endfacet
+  facet normal -0.93045 0.366419 0
+    outer loop
+       vertex 1.27589 0.140198 0.489362
+       vertex 1.2715 0.129043 -0.510638
+       vertex 1.2715 0.129043 0.489362
+    endloop
+  endfacet
+  facet normal -0.909727 0.415208 0
+    outer loop
+       vertex 1.2715 0.129043 0.489362
+       vertex 1.2715 0.129043 -0.510638
+       vertex 1.26657 0.118251 -0.510638
+    endloop
+  endfacet
+  facet normal -0.909727 0.415208 0
+    outer loop
+       vertex 1.2715 0.129043 0.489362
+       vertex 1.26657 0.118251 -0.510638
+       vertex 1.26657 0.118251 0.489362
+    endloop
+  endfacet
+  facet normal -0.886208 0.463288 0
+    outer loop
+       vertex 1.26657 0.118251 0.489362
+       vertex 1.26657 0.118251 -0.510638
+       vertex 1.26113 0.107837 -0.510638
+    endloop
+  endfacet
+  facet normal -0.886208 0.463288 0
+    outer loop
+       vertex 1.26657 0.118251 0.489362
+       vertex 1.26113 0.107837 -0.510638
+       vertex 1.26113 0.107837 0.489362
+    endloop
+  endfacet
+  facet normal -0.859916 0.510436 0
+    outer loop
+       vertex 1.26113 0.107837 0.489362
+       vertex 1.26113 0.107837 -0.510638
+       vertex 1.25518 0.097811 -0.510638
+    endloop
+  endfacet
+  facet normal -0.859916 0.510436 0
+    outer loop
+       vertex 1.26113 0.107837 0.489362
+       vertex 1.25518 0.097811 -0.510638
+       vertex 1.25518 0.097811 0.489362
+    endloop
+  endfacet
+  facet normal -0.830903 0.556417 0
+    outer loop
+       vertex 1.25518 0.097811 0.489362
+       vertex 1.25518 0.097811 -0.510638
+       vertex 1.24873 0.0881864 -0.510638
+    endloop
+  endfacet
+  facet normal -0.830903 0.556417 0
+    outer loop
+       vertex 1.25518 0.097811 0.489362
+       vertex 1.24873 0.0881864 -0.510638
+       vertex 1.24873 0.0881864 0.489362
+    endloop
+  endfacet
+  facet normal -0.799247 0.601002 0
+    outer loop
+       vertex 1.24873 0.0881864 0.489362
+       vertex 1.24873 0.0881864 -0.510638
+       vertex 1.2418 0.0789751 -0.510638
+    endloop
+  endfacet
+  facet normal -0.799247 0.601002 0
+    outer loop
+       vertex 1.24873 0.0881864 0.489362
+       vertex 1.2418 0.0789751 -0.510638
+       vertex 1.2418 0.0789751 0.489362
+    endloop
+  endfacet
+  facet normal -0.765051 0.64397 0
+    outer loop
+       vertex 1.2418 0.0789751 0.489362
+       vertex 1.2418 0.0789751 -0.510638
+       vertex 1.23441 0.0701894 -0.510638
+    endloop
+  endfacet
+  facet normal -0.765051 0.64397 0
+    outer loop
+       vertex 1.2418 0.0789751 0.489362
+       vertex 1.23441 0.0701894 -0.510638
+       vertex 1.23441 0.0701894 0.489362
+    endloop
+  endfacet
+  facet normal -0.728447 0.685102 0
+    outer loop
+       vertex 1.23441 0.0701894 0.489362
+       vertex 1.23441 0.0701894 -0.510638
+       vertex 1.22656 0.0618414 -0.510638
+    endloop
+  endfacet
+  facet normal -0.728447 0.685102 0
+    outer loop
+       vertex 1.23441 0.0701894 0.489362
+       vertex 1.22656 0.0618414 -0.510638
+       vertex 1.22656 0.0618414 0.489362
+    endloop
+  endfacet
+  facet normal -0.68958 0.724209 0
+    outer loop
+       vertex 1.22656 0.0618414 0.489362
+       vertex 1.22656 0.0618414 -0.510638
+       vertex 1.21826 0.0539434 -0.510638
+    endloop
+  endfacet
+  facet normal -0.68958 0.724209 0
+    outer loop
+       vertex 1.22656 0.0618414 0.489362
+       vertex 1.21826 0.0539434 -0.510638
+       vertex 1.21826 0.0539434 0.489362
+    endloop
+  endfacet
+  facet normal -0.648628 0.761106 0
+    outer loop
+       vertex 1.21826 0.0539434 0.489362
+       vertex 1.21826 0.0539434 -0.510638
+       vertex 1.20954 0.0465077 -0.510638
+    endloop
+  endfacet
+  facet normal -0.648628 0.761106 0
+    outer loop
+       vertex 1.21826 0.0539434 0.489362
+       vertex 1.20954 0.0465077 -0.510638
+       vertex 1.20954 0.0465077 0.489362
+    endloop
+  endfacet
+  facet normal -0.605769 0.79564 0
+    outer loop
+       vertex 1.20954 0.0465077 0.489362
+       vertex 1.20954 0.0465077 -0.510638
+       vertex 1.20039 0.0395464 -0.510638
+    endloop
+  endfacet
+  facet normal -0.605769 0.79564 0
+    outer loop
+       vertex 1.20954 0.0465077 0.489362
+       vertex 1.20039 0.0395464 -0.510638
+       vertex 1.20039 0.0395464 0.489362
+    endloop
+  endfacet
+  facet normal -0.56122 0.827667 0
+    outer loop
+       vertex 1.20039 0.0395464 0.489362
+       vertex 1.20039 0.0395464 -0.510638
+       vertex 1.19085 0.0330718 -0.510638
+    endloop
+  endfacet
+  facet normal -0.56122 0.827667 0
+    outer loop
+       vertex 1.20039 0.0395464 0.489362
+       vertex 1.19085 0.0330718 -0.510638
+       vertex 1.19085 0.0330718 0.489362
+    endloop
+  endfacet
+  facet normal -0.515194 0.857074 0
+    outer loop
+       vertex 1.19085 0.0330718 0.489362
+       vertex 1.19085 0.0330718 -0.510638
+       vertex 1.1809 0.027096 -0.510638
+    endloop
+  endfacet
+  facet normal -0.515194 0.857074 0
+    outer loop
+       vertex 1.19085 0.0330718 0.489362
+       vertex 1.1809 0.027096 -0.510638
+       vertex 1.1809 0.027096 0.489362
+    endloop
+  endfacet
+  facet normal -0.467917 0.883773 0
+    outer loop
+       vertex 1.1809 0.027096 0.489362
+       vertex 1.1809 0.027096 -0.510638
+       vertex 1.17058 0.0216314 -0.510638
+    endloop
+  endfacet
+  facet normal -0.467917 0.883773 0
+    outer loop
+       vertex 1.1809 0.027096 0.489362
+       vertex 1.17058 0.0216314 -0.510638
+       vertex 1.17058 0.0216314 0.489362
+    endloop
+  endfacet
+  facet normal -0.419627 0.907697 0
+    outer loop
+       vertex 1.17058 0.0216314 0.489362
+       vertex 1.17058 0.0216314 -0.510638
+       vertex 1.15989 0.0166901 -0.510638
+    endloop
+  endfacet
+  facet normal -0.419627 0.907697 0
+    outer loop
+       vertex 1.17058 0.0216314 0.489362
+       vertex 1.15989 0.0166901 -0.510638
+       vertex 1.15989 0.0166901 0.489362
+    endloop
+  endfacet
+  facet normal -0.370554 0.928811 0
+    outer loop
+       vertex 1.15989 0.0166901 0.489362
+       vertex 1.15989 0.0166901 -0.510638
+       vertex 1.14885 0.0122844 -0.510638
+    endloop
+  endfacet
+  facet normal -0.370554 0.928811 0
+    outer loop
+       vertex 1.15989 0.0166901 0.489362
+       vertex 1.14885 0.0122844 -0.510638
+       vertex 1.14885 0.0122844 0.489362
+    endloop
+  endfacet
+  facet normal -0.320933 0.947102 0
+    outer loop
+       vertex 1.14885 0.0122844 0.489362
+       vertex 1.14885 0.0122844 -0.510638
+       vertex 1.13747 0.00842639 -0.510638
+    endloop
+  endfacet
+  facet normal -0.320933 0.947102 0
+    outer loop
+       vertex 1.14885 0.0122844 0.489362
+       vertex 1.13747 0.00842639 -0.510638
+       vertex 1.13747 0.00842639 0.489362
+    endloop
+  endfacet
+  facet normal -0.270992 0.962582 0
+    outer loop
+       vertex 1.13747 0.00842639 0.489362
+       vertex 1.13747 0.00842639 -0.510638
+       vertex 1.12575 0.00512843 -0.510638
+    endloop
+  endfacet
+  facet normal -0.270992 0.962582 0
+    outer loop
+       vertex 1.13747 0.00842639 0.489362
+       vertex 1.12575 0.00512843 -0.510638
+       vertex 1.12575 0.00512843 0.489362
+    endloop
+  endfacet
+  facet normal -0.220956 0.975284 0
+    outer loop
+       vertex 1.12575 0.00512843 0.489362
+       vertex 1.12575 0.00512843 -0.510638
+       vertex 1.11372 0.00240269 -0.510638
+    endloop
+  endfacet
+  facet normal -0.220956 0.975284 0
+    outer loop
+       vertex 1.12575 0.00512843 0.489362
+       vertex 1.11372 0.00240269 -0.510638
+       vertex 1.11372 0.00240269 0.489362
+    endloop
+  endfacet
+  facet normal -0.171035 0.985265 0
+    outer loop
+       vertex 1.11372 0.00240269 0.489362
+       vertex 1.11372 0.00240269 -0.510638
+       vertex 1.10139 0.000261389 -0.510638
+    endloop
+  endfacet
+  facet normal -0.171035 0.985265 0
+    outer loop
+       vertex 1.11372 0.00240269 0.489362
+       vertex 1.10139 0.000261389 -0.510638
+       vertex 1.10139 0.000261389 0.489362
+    endloop
+  endfacet
+  facet normal -0.121427 0.9926 0
+    outer loop
+       vertex 1.10139 0.000261389 0.489362
+       vertex 1.10139 0.000261389 -0.510638
+       vertex 1.08876 -0.00128324 -0.510638
+    endloop
+  endfacet
+  facet normal -0.121427 0.9926 0
+    outer loop
+       vertex 1.10139 0.000261389 0.489362
+       vertex 1.08876 -0.00128324 -0.510638
+       vertex 1.08876 -0.00128324 0.489362
+    endloop
+  endfacet
+  facet normal -0.0723187 0.997382 0
+    outer loop
+       vertex 1.08876 -0.00128324 0.489362
+       vertex 1.08876 -0.00128324 -0.510638
+       vertex 1.07585 -0.00221898 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0723187 0.997382 0
+    outer loop
+       vertex 1.08876 -0.00128324 0.489362
+       vertex 1.07585 -0.00221898 -0.510638
+       vertex 1.07585 -0.00221898 0.489362
+    endloop
+  endfacet
+  facet normal -0.0238809 0.999715 0
+    outer loop
+       vertex 1.07585 -0.00221898 0.489362
+       vertex 1.07585 -0.00221898 -0.510638
+       vertex 1.06268 -0.00253361 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0238809 0.999715 0
+    outer loop
+       vertex 1.07585 -0.00221898 0.489362
+       vertex 1.06268 -0.00253361 -0.510638
+       vertex 1.06268 -0.00253361 0.489362
+    endloop
+  endfacet
+  facet normal 0.00693788 0.999976 0
+    outer loop
+       vertex 1.06268 -0.00253361 0.489362
+       vertex 1.06268 -0.00253361 -0.510638
+       vertex 1.05979 -0.00251354 -0.510638
+    endloop
+  endfacet
+  facet normal 0.00693788 0.999976 0
+    outer loop
+       vertex 1.06268 -0.00253361 0.489362
+       vertex 1.05979 -0.00251354 -0.510638
+       vertex 1.05979 -0.00251354 0.489362
+    endloop
+  endfacet
+  facet normal 0.0209914 0.99978 0
+    outer loop
+       vertex 1.05979 -0.00251354 0.489362
+       vertex 1.05979 -0.00251354 -0.510638
+       vertex 1.05691 -0.00245302 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0209914 0.99978 0
+    outer loop
+       vertex 1.05979 -0.00251354 0.489362
+       vertex 1.05691 -0.00245302 -0.510638
+       vertex 1.05691 -0.00245302 0.489362
+    endloop
+  endfacet
+  facet normal 0.0352738 0.999378 0
+    outer loop
+       vertex 1.05691 -0.00245302 0.489362
+       vertex 1.05691 -0.00245302 -0.510638
+       vertex 1.05403 -0.00235161 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0352738 0.999378 0
+    outer loop
+       vertex 1.05691 -0.00245302 0.489362
+       vertex 1.05403 -0.00235161 -0.510638
+       vertex 1.05403 -0.00235161 0.489362
+    endloop
+  endfacet
+  facet normal 0.049749 0.998762 0
+    outer loop
+       vertex 1.05403 -0.00235161 0.489362
+       vertex 1.05403 -0.00235161 -0.510638
+       vertex 1.05117 -0.00220887 -0.510638
+    endloop
+  endfacet
+  facet normal 0.049749 0.998762 0
+    outer loop
+       vertex 1.05403 -0.00235161 0.489362
+       vertex 1.05117 -0.00220887 -0.510638
+       vertex 1.05117 -0.00220887 0.489362
+    endloop
+  endfacet
+  facet normal 0.0643761 0.997926 0
+    outer loop
+       vertex 1.05117 -0.00220887 0.489362
+       vertex 1.05117 -0.00220887 -0.510638
+       vertex 1.04831 -0.00202435 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0643761 0.997926 0
+    outer loop
+       vertex 1.05117 -0.00220887 0.489362
+       vertex 1.04831 -0.00202435 -0.510638
+       vertex 1.04831 -0.00202435 0.489362
+    endloop
+  endfacet
+  facet normal 0.0791153 0.996865 0
+    outer loop
+       vertex 1.04831 -0.00202435 0.489362
+       vertex 1.04831 -0.00202435 -0.510638
+       vertex 1.04545 -0.00179761 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0791153 0.996865 0
+    outer loop
+       vertex 1.04831 -0.00202435 0.489362
+       vertex 1.04545 -0.00179761 -0.510638
+       vertex 1.04545 -0.00179761 0.489362
+    endloop
+  endfacet
+  facet normal 0.0939245 0.995579 0
+    outer loop
+       vertex 1.04545 -0.00179761 0.489362
+       vertex 1.04545 -0.00179761 -0.510638
+       vertex 1.04259 -0.0015282 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0939245 0.995579 0
+    outer loop
+       vertex 1.04545 -0.00179761 0.489362
+       vertex 1.04259 -0.0015282 -0.510638
+       vertex 1.04259 -0.0015282 0.489362
+    endloop
+  endfacet
+  facet normal 0.108762 0.994068 0
+    outer loop
+       vertex 1.04259 -0.0015282 0.489362
+       vertex 1.04259 -0.0015282 -0.510638
+       vertex 1.03974 -0.00121568 -0.510638
+    endloop
+  endfacet
+  facet normal 0.108762 0.994068 0
+    outer loop
+       vertex 1.04259 -0.0015282 0.489362
+       vertex 1.03974 -0.00121568 -0.510638
+       vertex 1.03974 -0.00121568 0.489362
+    endloop
+  endfacet
+  facet normal 0.12359 0.992333 0
+    outer loop
+       vertex 1.03974 -0.00121568 0.489362
+       vertex 1.03974 -0.00121568 -0.510638
+       vertex 1.03688 -0.00085961 -0.510638
+    endloop
+  endfacet
+  facet normal 0.12359 0.992333 0
+    outer loop
+       vertex 1.03974 -0.00121568 0.489362
+       vertex 1.03688 -0.00085961 -0.510638
+       vertex 1.03688 -0.00085961 0.489362
+    endloop
+  endfacet
+  facet normal 0.138364 0.990381 0
+    outer loop
+       vertex 1.03688 -0.00085961 0.489362
+       vertex 1.03688 -0.00085961 -0.510638
+       vertex 1.03402 -0.000459536 -0.510638
+    endloop
+  endfacet
+  facet normal 0.138364 0.990381 0
+    outer loop
+       vertex 1.03688 -0.00085961 0.489362
+       vertex 1.03402 -0.000459536 -0.510638
+       vertex 1.03402 -0.000459536 0.489362
+    endloop
+  endfacet
+  facet normal 0.153043 0.98822 0
+    outer loop
+       vertex 1.03402 -0.000459536 0.489362
+       vertex 1.03402 -0.000459536 -0.510638
+       vertex 1.03115 -1.50171e-05 -0.510638
+    endloop
+  endfacet
+  facet normal 0.153043 0.98822 0
+    outer loop
+       vertex 1.03402 -0.000459536 0.489362
+       vertex 1.03115 -1.50171e-05 -0.510638
+       vertex 1.03115 -1.50171e-05 0.489362
+    endloop
+  endfacet
+  facet normal 0.167587 0.985857 0
+    outer loop
+       vertex 1.03115 -1.50171e-05 0.489362
+       vertex 1.03115 -1.50171e-05 -0.510638
+       vertex 1.02827 0.00047439 -0.510638
+    endloop
+  endfacet
+  facet normal 0.167587 0.985857 0
+    outer loop
+       vertex 1.03115 -1.50171e-05 0.489362
+       vertex 1.02827 0.00047439 -0.510638
+       vertex 1.02827 0.00047439 0.489362
+    endloop
+  endfacet
+  facet normal 0.181965 0.983305 0
+    outer loop
+       vertex 1.02827 0.00047439 0.489362
+       vertex 1.02827 0.00047439 -0.510638
+       vertex 1.02538 0.00100913 -0.510638
+    endloop
+  endfacet
+  facet normal 0.181965 0.983305 0
+    outer loop
+       vertex 1.02827 0.00047439 0.489362
+       vertex 1.02538 0.00100913 -0.510638
+       vertex 1.02538 0.00100913 0.489362
+    endloop
+  endfacet
+  facet normal 0.196129 0.980578 0
+    outer loop
+       vertex 1.02538 0.00100913 0.489362
+       vertex 1.02538 0.00100913 -0.510638
+       vertex 1.02247 0.00158965 -0.510638
+    endloop
+  endfacet
+  facet normal 0.196129 0.980578 0
+    outer loop
+       vertex 1.02538 0.00100913 0.489362
+       vertex 1.02247 0.00158965 -0.510638
+       vertex 1.02247 0.00158965 0.489362
+    endloop
+  endfacet
+  facet normal 0.21006 0.977688 0
+    outer loop
+       vertex 1.02247 0.00158965 0.489362
+       vertex 1.02247 0.00158965 -0.510638
+       vertex 1.01956 0.00221639 -0.510638
+    endloop
+  endfacet
+  facet normal 0.21006 0.977688 0
+    outer loop
+       vertex 1.02247 0.00158965 0.489362
+       vertex 1.01956 0.00221639 -0.510638
+       vertex 1.01956 0.00221639 0.489362
+    endloop
+  endfacet
+  facet normal 0.223729 0.974651 0
+    outer loop
+       vertex 1.01956 0.00221639 0.489362
+       vertex 1.01956 0.00221639 -0.510638
+       vertex 1.01662 0.0028898 -0.510638
+    endloop
+  endfacet
+  facet normal 0.223729 0.974651 0
+    outer loop
+       vertex 1.01956 0.00221639 0.489362
+       vertex 1.01662 0.0028898 -0.510638
+       vertex 1.01662 0.0028898 0.489362
+    endloop
+  endfacet
+  facet normal 0.237092 0.971487 0
+    outer loop
+       vertex 1.01662 0.0028898 0.489362
+       vertex 1.01662 0.0028898 -0.510638
+       vertex 1.01367 0.00361032 -0.510638
+    endloop
+  endfacet
+  facet normal 0.237092 0.971487 0
+    outer loop
+       vertex 1.01662 0.0028898 0.489362
+       vertex 1.01367 0.00361032 -0.510638
+       vertex 1.01367 0.00361032 0.489362
+    endloop
+  endfacet
+  facet normal 0.25014 0.96821 0
+    outer loop
+       vertex 1.01367 0.00361032 0.489362
+       vertex 1.01367 0.00361032 -0.510638
+       vertex 1.0107 0.00437839 -0.510638
+    endloop
+  endfacet
+  facet normal 0.25014 0.96821 0
+    outer loop
+       vertex 1.01367 0.00361032 0.489362
+       vertex 1.0107 0.00437839 -0.510638
+       vertex 1.0107 0.00437839 0.489362
+    endloop
+  endfacet
+  facet normal 0.262844 0.964838 0
+    outer loop
+       vertex 1.0107 0.00437839 0.489362
+       vertex 1.0107 0.00437839 -0.510638
+       vertex 1.0077 0.00519446 -0.510638
+    endloop
+  endfacet
+  facet normal 0.262844 0.964838 0
+    outer loop
+       vertex 1.0107 0.00437839 0.489362
+       vertex 1.0077 0.00519446 -0.510638
+       vertex 1.0077 0.00519446 0.489362
+    endloop
+  endfacet
+  facet normal 0.275186 0.961391 0
+    outer loop
+       vertex 1.0077 0.00519446 0.489362
+       vertex 1.0077 0.00519446 -0.510638
+       vertex 1.00468 0.00605898 -0.510638
+    endloop
+  endfacet
+  facet normal 0.275186 0.961391 0
+    outer loop
+       vertex 1.0077 0.00519446 0.489362
+       vertex 1.00468 0.00605898 -0.510638
+       vertex 1.00468 0.00605898 0.489362
+    endloop
+  endfacet
+  facet normal 0.287139 0.957889 0
+    outer loop
+       vertex 1.00468 0.00605898 0.489362
+       vertex 1.00468 0.00605898 -0.510638
+       vertex 1.00164 0.00697239 -0.510638
+    endloop
+  endfacet
+  facet normal 0.287139 0.957889 0
+    outer loop
+       vertex 1.00468 0.00605898 0.489362
+       vertex 1.00164 0.00697239 -0.510638
+       vertex 1.00164 0.00697239 0.489362
+    endloop
+  endfacet
+  facet normal 0.298732 0.954337 0
+    outer loop
+       vertex 1.00164 0.00697239 0.489362
+       vertex 1.00164 0.00697239 -0.510638
+       vertex 0.998559 0.00793513 -0.510638
+    endloop
+  endfacet
+  facet normal 0.298732 0.954337 0
+    outer loop
+       vertex 1.00164 0.00697239 0.489362
+       vertex 0.998559 0.00793513 -0.510638
+       vertex 0.998559 0.00793513 0.489362
+    endloop
+  endfacet
+  facet normal 0.309904 0.950768 0
+    outer loop
+       vertex 0.998559 0.00793513 0.489362
+       vertex 0.998559 0.00793513 -0.510638
+       vertex 0.995453 0.00894765 -0.510638
+    endloop
+  endfacet
+  facet normal 0.309904 0.950768 0
+    outer loop
+       vertex 0.998559 0.00793513 0.489362
+       vertex 0.995453 0.00894765 -0.510638
+       vertex 0.995453 0.00894765 0.489362
+    endloop
+  endfacet
+  facet normal 0.320678 0.947188 0
+    outer loop
+       vertex 0.995453 0.00894765 0.489362
+       vertex 0.995453 0.00894765 -0.510638
+       vertex 0.992314 0.0100104 -0.510638
+    endloop
+  endfacet
+  facet normal 0.320678 0.947188 0
+    outer loop
+       vertex 0.995453 0.00894765 0.489362
+       vertex 0.992314 0.0100104 -0.510638
+       vertex 0.992314 0.0100104 0.489362
+    endloop
+  endfacet
+  facet normal 0.331047 0.943614 0
+    outer loop
+       vertex 0.992314 0.0100104 0.489362
+       vertex 0.992314 0.0100104 -0.510638
+       vertex 0.98914 0.0111238 -0.510638
+    endloop
+  endfacet
+  facet normal 0.331047 0.943614 0
+    outer loop
+       vertex 0.992314 0.0100104 0.489362
+       vertex 0.98914 0.0111238 -0.510638
+       vertex 0.98914 0.0111238 0.489362
+    endloop
+  endfacet
+  facet normal 0.341002 0.940063 0
+    outer loop
+       vertex 0.98914 0.0111238 0.489362
+       vertex 0.98914 0.0111238 -0.510638
+       vertex 0.98593 0.0122883 -0.510638
+    endloop
+  endfacet
+  facet normal 0.341002 0.940063 0
+    outer loop
+       vertex 0.98914 0.0111238 0.489362
+       vertex 0.98593 0.0122883 -0.510638
+       vertex 0.98593 0.0122883 0.489362
+    endloop
+  endfacet
+  facet normal 0.350543 0.936547 0
+    outer loop
+       vertex 0.98593 0.0122883 0.489362
+       vertex 0.98593 0.0122883 -0.510638
+       vertex 0.982681 0.0135044 -0.510638
+    endloop
+  endfacet
+  facet normal 0.350543 0.936547 0
+    outer loop
+       vertex 0.98593 0.0122883 0.489362
+       vertex 0.982681 0.0135044 -0.510638
+       vertex 0.982681 0.0135044 0.489362
+    endloop
+  endfacet
+  facet normal 0.359678 0.933077 0
+    outer loop
+       vertex 0.982681 0.0135044 0.489362
+       vertex 0.982681 0.0135044 -0.510638
+       vertex 0.979392 0.0147725 -0.510638
+    endloop
+  endfacet
+  facet normal 0.359678 0.933077 0
+    outer loop
+       vertex 0.982681 0.0135044 0.489362
+       vertex 0.979392 0.0147725 -0.510638
+       vertex 0.979392 0.0147725 0.489362
+    endloop
+  endfacet
+  facet normal 0.368405 0.929666 0
+    outer loop
+       vertex 0.979392 0.0147725 0.489362
+       vertex 0.979392 0.0147725 -0.510638
+       vertex 0.976059 0.016093 -0.510638
+    endloop
+  endfacet
+  facet normal 0.368405 0.929666 0
+    outer loop
+       vertex 0.979392 0.0147725 0.489362
+       vertex 0.976059 0.016093 -0.510638
+       vertex 0.976059 0.016093 0.489362
+    endloop
+  endfacet
+  facet normal 0.376728 0.926324 0
+    outer loop
+       vertex 0.976059 0.016093 0.489362
+       vertex 0.976059 0.016093 -0.510638
+       vertex 0.972682 0.0174664 -0.510638
+    endloop
+  endfacet
+  facet normal 0.376728 0.926324 0
+    outer loop
+       vertex 0.976059 0.016093 0.489362
+       vertex 0.972682 0.0174664 -0.510638
+       vertex 0.972682 0.0174664 0.489362
+    endloop
+  endfacet
+  facet normal -1 0 -0
+    outer loop
+       vertex 0.972682 0.0174664 0.489362
+       vertex 0.972682 0.0174664 -0.510638
+       vertex 0.972682 -0.223534 -0.510638
+    endloop
+  endfacet
+  facet normal -1 -0 0
+    outer loop
+       vertex 0.972682 0.0174664 0.489362
+       vertex 0.972682 -0.223534 -0.510638
+       vertex 0.972682 -0.223534 0.489362
+    endloop
+  endfacet
+  facet normal 0 1 0
+    outer loop
+       vertex 0.972682 -0.223534 0.489362
+       vertex 0.972682 -0.223534 -0.510638
+       vertex 0.883682 -0.223534 -0.510638
+    endloop
+  endfacet
+  facet normal 0 1 0
+    outer loop
+       vertex 0.972682 -0.223534 0.489362
+       vertex 0.883682 -0.223534 -0.510638
+       vertex 0.883682 -0.223534 0.489362
+    endloop
+  endfacet
+  facet normal -0.414837 -0.909896 -0
+    outer loop
+       vertex 0.975389 0.0961864 0.489362
+       vertex 0.975389 0.0961864 -0.510638
+       vertex 0.978108 0.0949467 -0.510638
+    endloop
+  endfacet
+  facet normal -0.414837 -0.909896 0
+    outer loop
+       vertex 0.975389 0.0961864 0.489362
+       vertex 0.978108 0.0949467 -0.510638
+       vertex 0.978108 0.0949467 0.489362
+    endloop
+  endfacet
+  facet normal -0.402055 -0.915615 -0
+    outer loop
+       vertex 0.978108 0.0949467 0.489362
+       vertex 0.978108 0.0949467 -0.510638
+       vertex 0.980839 0.0937474 -0.510638
+    endloop
+  endfacet
+  facet normal -0.402055 -0.915615 0
+    outer loop
+       vertex 0.978108 0.0949467 0.489362
+       vertex 0.980839 0.0937474 -0.510638
+       vertex 0.980839 0.0937474 0.489362
+    endloop
+  endfacet
+  facet normal -0.389165 -0.921168 -0
+    outer loop
+       vertex 0.980839 0.0937474 0.489362
+       vertex 0.980839 0.0937474 -0.510638
+       vertex 0.983582 0.0925887 -0.510638
+    endloop
+  endfacet
+  facet normal -0.389165 -0.921168 0
+    outer loop
+       vertex 0.980839 0.0937474 0.489362
+       vertex 0.983582 0.0925887 -0.510638
+       vertex 0.983582 0.0925887 0.489362
+    endloop
+  endfacet
+  facet normal -0.376162 -0.926554 -0
+    outer loop
+       vertex 0.983582 0.0925887 0.489362
+       vertex 0.983582 0.0925887 -0.510638
+       vertex 0.986335 0.091471 -0.510638
+    endloop
+  endfacet
+  facet normal -0.376162 -0.926554 0
+    outer loop
+       vertex 0.983582 0.0925887 0.489362
+       vertex 0.986335 0.091471 -0.510638
+       vertex 0.986335 0.091471 0.489362
+    endloop
+  endfacet
+  facet normal -0.363046 -0.931771 -0
+    outer loop
+       vertex 0.986335 0.091471 0.489362
+       vertex 0.986335 0.091471 -0.510638
+       vertex 0.989098 0.0903944 -0.510638
+    endloop
+  endfacet
+  facet normal -0.363046 -0.931771 0
+    outer loop
+       vertex 0.986335 0.091471 0.489362
+       vertex 0.989098 0.0903944 -0.510638
+       vertex 0.989098 0.0903944 0.489362
+    endloop
+  endfacet
+  facet normal -0.349814 -0.936819 -0
+    outer loop
+       vertex 0.989098 0.0903944 0.489362
+       vertex 0.989098 0.0903944 -0.510638
+       vertex 0.991871 0.0893591 -0.510638
+    endloop
+  endfacet
+  facet normal -0.349814 -0.936819 0
+    outer loop
+       vertex 0.989098 0.0903944 0.489362
+       vertex 0.991871 0.0893591 -0.510638
+       vertex 0.991871 0.0893591 0.489362
+    endloop
+  endfacet
+  facet normal -0.336473 -0.941693 -0
+    outer loop
+       vertex 0.991871 0.0893591 0.489362
+       vertex 0.991871 0.0893591 -0.510638
+       vertex 0.994652 0.0883653 -0.510638
+    endloop
+  endfacet
+  facet normal -0.336473 -0.941693 0
+    outer loop
+       vertex 0.991871 0.0893591 0.489362
+       vertex 0.994652 0.0883653 -0.510638
+       vertex 0.994652 0.0883653 0.489362
+    endloop
+  endfacet
+  facet normal -0.323007 -0.946396 -0
+    outer loop
+       vertex 0.994652 0.0883653 0.489362
+       vertex 0.994652 0.0883653 -0.510638
+       vertex 0.997441 0.0874134 -0.510638
+    endloop
+  endfacet
+  facet normal -0.323007 -0.946396 0
+    outer loop
+       vertex 0.994652 0.0883653 0.489362
+       vertex 0.997441 0.0874134 -0.510638
+       vertex 0.997441 0.0874134 0.489362
+    endloop
+  endfacet
+  facet normal -0.309415 -0.950927 -0
+    outer loop
+       vertex 0.997441 0.0874134 0.489362
+       vertex 0.997441 0.0874134 -0.510638
+       vertex 1.00024 0.0865034 -0.510638
+    endloop
+  endfacet
+  facet normal -0.309415 -0.950927 0
+    outer loop
+       vertex 0.997441 0.0874134 0.489362
+       vertex 1.00024 0.0865034 -0.510638
+       vertex 1.00024 0.0865034 0.489362
+    endloop
+  endfacet
+  facet normal -0.29572 -0.955275 -0
+    outer loop
+       vertex 1.00024 0.0865034 0.489362
+       vertex 1.00024 0.0865034 -0.510638
+       vertex 1.00304 0.0856357 -0.510638
+    endloop
+  endfacet
+  facet normal -0.29572 -0.955275 0
+    outer loop
+       vertex 1.00024 0.0865034 0.489362
+       vertex 1.00304 0.0856357 -0.510638
+       vertex 1.00304 0.0856357 0.489362
+    endloop
+  endfacet
+  facet normal -0.281862 -0.959455 -0
+    outer loop
+       vertex 1.00304 0.0856357 0.489362
+       vertex 1.00304 0.0856357 -0.510638
+       vertex 1.00585 0.0848104 -0.510638
+    endloop
+  endfacet
+  facet normal -0.281862 -0.959455 0
+    outer loop
+       vertex 1.00304 0.0856357 0.489362
+       vertex 1.00585 0.0848104 -0.510638
+       vertex 1.00585 0.0848104 0.489362
+    endloop
+  endfacet
+  facet normal -0.267904 -0.963446 -0
+    outer loop
+       vertex 1.00585 0.0848104 0.489362
+       vertex 1.00585 0.0848104 -0.510638
+       vertex 1.00866 0.0840277 -0.510638
+    endloop
+  endfacet
+  facet normal -0.267904 -0.963446 0
+    outer loop
+       vertex 1.00585 0.0848104 0.489362
+       vertex 1.00866 0.0840277 -0.510638
+       vertex 1.00866 0.0840277 0.489362
+    endloop
+  endfacet
+  facet normal -0.253803 -0.967256 -0
+    outer loop
+       vertex 1.00866 0.0840277 0.489362
+       vertex 1.00866 0.0840277 -0.510638
+       vertex 1.01148 0.083288 -0.510638
+    endloop
+  endfacet
+  facet normal -0.253803 -0.967256 0
+    outer loop
+       vertex 1.00866 0.0840277 0.489362
+       vertex 1.01148 0.083288 -0.510638
+       vertex 1.01148 0.083288 0.489362
+    endloop
+  endfacet
+  facet normal -0.239564 -0.970881 -0
+    outer loop
+       vertex 1.01148 0.083288 0.489362
+       vertex 1.01148 0.083288 -0.510638
+       vertex 1.01431 0.0825914 -0.510638
+    endloop
+  endfacet
+  facet normal -0.239564 -0.970881 0
+    outer loop
+       vertex 1.01148 0.083288 0.489362
+       vertex 1.01431 0.0825914 -0.510638
+       vertex 1.01431 0.0825914 0.489362
+    endloop
+  endfacet
+  facet normal -0.22519 -0.974315 -0
+    outer loop
+       vertex 1.01431 0.0825914 0.489362
+       vertex 1.01431 0.0825914 -0.510638
+       vertex 1.01713 0.0819381 -0.510638
+    endloop
+  endfacet
+  facet normal -0.22519 -0.974315 0
+    outer loop
+       vertex 1.01431 0.0825914 0.489362
+       vertex 1.01713 0.0819381 -0.510638
+       vertex 1.01713 0.0819381 0.489362
+    endloop
+  endfacet
+  facet normal -0.21068 -0.977555 -0
+    outer loop
+       vertex 1.01713 0.0819381 0.489362
+       vertex 1.01713 0.0819381 -0.510638
+       vertex 1.01996 0.0813283 -0.510638
+    endloop
+  endfacet
+  facet normal -0.21068 -0.977555 0
+    outer loop
+       vertex 1.01713 0.0819381 0.489362
+       vertex 1.01996 0.0813283 -0.510638
+       vertex 1.01996 0.0813283 0.489362
+    endloop
+  endfacet
+  facet normal -0.196022 -0.9806 -0
+    outer loop
+       vertex 1.01996 0.0813283 0.489362
+       vertex 1.01996 0.0813283 -0.510638
+       vertex 1.02279 0.0807624 -0.510638
+    endloop
+  endfacet
+  facet normal -0.196022 -0.9806 0
+    outer loop
+       vertex 1.01996 0.0813283 0.489362
+       vertex 1.02279 0.0807624 -0.510638
+       vertex 1.02279 0.0807624 0.489362
+    endloop
+  endfacet
+  facet normal -0.181224 -0.983442 -0
+    outer loop
+       vertex 1.02279 0.0807624 0.489362
+       vertex 1.02279 0.0807624 -0.510638
+       vertex 1.02563 0.0802404 -0.510638
+    endloop
+  endfacet
+  facet normal -0.181224 -0.983442 0
+    outer loop
+       vertex 1.02279 0.0807624 0.489362
+       vertex 1.02563 0.0802404 -0.510638
+       vertex 1.02563 0.0802404 0.489362
+    endloop
+  endfacet
+  facet normal -0.166272 -0.98608 -0
+    outer loop
+       vertex 1.02563 0.0802404 0.489362
+       vertex 1.02563 0.0802404 -0.510638
+       vertex 1.02846 0.0797627 -0.510638
+    endloop
+  endfacet
+  facet normal -0.166272 -0.98608 0
+    outer loop
+       vertex 1.02563 0.0802404 0.489362
+       vertex 1.02846 0.0797627 -0.510638
+       vertex 1.02846 0.0797627 0.489362
+    endloop
+  endfacet
+  facet normal -0.151175 -0.988507 -0
+    outer loop
+       vertex 1.02846 0.0797627 0.489362
+       vertex 1.02846 0.0797627 -0.510638
+       vertex 1.03129 0.0793294 -0.510638
+    endloop
+  endfacet
+  facet normal -0.151175 -0.988507 0
+    outer loop
+       vertex 1.02846 0.0797627 0.489362
+       vertex 1.03129 0.0793294 -0.510638
+       vertex 1.03129 0.0793294 0.489362
+    endloop
+  endfacet
+  facet normal -0.135929 -0.990719 -0
+    outer loop
+       vertex 1.03129 0.0793294 0.489362
+       vertex 1.03129 0.0793294 -0.510638
+       vertex 1.03413 0.0789407 -0.510638
+    endloop
+  endfacet
+  facet normal -0.135929 -0.990719 0
+    outer loop
+       vertex 1.03129 0.0793294 0.489362
+       vertex 1.03413 0.0789407 -0.510638
+       vertex 1.03413 0.0789407 0.489362
+    endloop
+  endfacet
+  facet normal -0.120525 -0.99271 -0
+    outer loop
+       vertex 1.03413 0.0789407 0.489362
+       vertex 1.03413 0.0789407 -0.510638
+       vertex 1.03696 0.078597 -0.510638
+    endloop
+  endfacet
+  facet normal -0.120525 -0.99271 0
+    outer loop
+       vertex 1.03413 0.0789407 0.489362
+       vertex 1.03696 0.078597 -0.510638
+       vertex 1.03696 0.078597 0.489362
+    endloop
+  endfacet
+  facet normal -0.104969 -0.994476 -0
+    outer loop
+       vertex 1.03696 0.078597 0.489362
+       vertex 1.03696 0.078597 -0.510638
+       vertex 1.03979 0.0782984 -0.510638
+    endloop
+  endfacet
+  facet normal -0.104969 -0.994476 0
+    outer loop
+       vertex 1.03696 0.078597 0.489362
+       vertex 1.03979 0.0782984 -0.510638
+       vertex 1.03979 0.0782984 0.489362
+    endloop
+  endfacet
+  facet normal -0.0892553 -0.996009 -0
+    outer loop
+       vertex 1.03979 0.0782984 0.489362
+       vertex 1.03979 0.0782984 -0.510638
+       vertex 1.04261 0.0780451 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0892553 -0.996009 0
+    outer loop
+       vertex 1.03979 0.0782984 0.489362
+       vertex 1.04261 0.0780451 -0.510638
+       vertex 1.04261 0.0780451 0.489362
+    endloop
+  endfacet
+  facet normal -0.0733829 -0.997304 -0
+    outer loop
+       vertex 1.04261 0.0780451 0.489362
+       vertex 1.04261 0.0780451 -0.510638
+       vertex 1.04544 0.0778373 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0733829 -0.997304 0
+    outer loop
+       vertex 1.04261 0.0780451 0.489362
+       vertex 1.04544 0.0778373 -0.510638
+       vertex 1.04544 0.0778373 0.489362
+    endloop
+  endfacet
+  facet normal -0.057355 -0.998354 -0
+    outer loop
+       vertex 1.04544 0.0778373 0.489362
+       vertex 1.04544 0.0778373 -0.510638
+       vertex 1.04826 0.0776754 -0.510638
+    endloop
+  endfacet
+  facet normal -0.057355 -0.998354 0
+    outer loop
+       vertex 1.04544 0.0778373 0.489362
+       vertex 1.04826 0.0776754 -0.510638
+       vertex 1.04826 0.0776754 0.489362
+    endloop
+  endfacet
+  facet normal -0.0411658 -0.999152 -0
+    outer loop
+       vertex 1.04826 0.0776754 0.489362
+       vertex 1.04826 0.0776754 -0.510638
+       vertex 1.05107 0.0775594 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0411658 -0.999152 0
+    outer loop
+       vertex 1.04826 0.0776754 0.489362
+       vertex 1.05107 0.0775594 -0.510638
+       vertex 1.05107 0.0775594 0.489362
+    endloop
+  endfacet
+  facet normal -0.0248173 -0.999692 -0
+    outer loop
+       vertex 1.05107 0.0775594 0.489362
+       vertex 1.05107 0.0775594 -0.510638
+       vertex 1.05388 0.0774897 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0248173 -0.999692 0
+    outer loop
+       vertex 1.05107 0.0775594 0.489362
+       vertex 1.05388 0.0774897 -0.510638
+       vertex 1.05388 0.0774897 0.489362
+    endloop
+  endfacet
+  facet normal -0.0083109 -0.999965 -0
+    outer loop
+       vertex 1.05388 0.0774897 0.489362
+       vertex 1.05388 0.0774897 -0.510638
+       vertex 1.05668 0.0774664 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0083109 -0.999965 0
+    outer loop
+       vertex 1.05388 0.0774897 0.489362
+       vertex 1.05668 0.0774664 -0.510638
+       vertex 1.05668 0.0774664 0.489362
+    endloop
+  endfacet
+  facet normal 0.0257429 -0.999669 0
+    outer loop
+       vertex 1.05668 0.0774664 0.489362
+       vertex 1.05668 0.0774664 -0.510638
+       vertex 1.0649 0.0776781 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0257429 -0.999669 0
+    outer loop
+       vertex 1.05668 0.0774664 0.489362
+       vertex 1.0649 0.0776781 -0.510638
+       vertex 1.0649 0.0776781 0.489362
+    endloop
+  endfacet
+  facet normal 0.0778446 -0.996966 0
+    outer loop
+       vertex 1.0649 0.0776781 0.489362
+       vertex 1.0649 0.0776781 -0.510638
+       vertex 1.07296 0.0783075 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0778446 -0.996966 0
+    outer loop
+       vertex 1.0649 0.0776781 0.489362
+       vertex 1.07296 0.0783075 -0.510638
+       vertex 1.07296 0.0783075 0.489362
+    endloop
+  endfacet
+  facet normal 0.130403 -0.991461 0
+    outer loop
+       vertex 1.07296 0.0783075 0.489362
+       vertex 1.07296 0.0783075 -0.510638
+       vertex 1.08086 0.0793453 -0.510638
+    endloop
+  endfacet
+  facet normal 0.130403 -0.991461 0
+    outer loop
+       vertex 1.07296 0.0783075 0.489362
+       vertex 1.08086 0.0793453 -0.510638
+       vertex 1.08086 0.0793453 0.489362
+    endloop
+  endfacet
+  facet normal 0.183185 -0.983079 0
+    outer loop
+       vertex 1.08086 0.0793453 0.489362
+       vertex 1.08086 0.0793453 -0.510638
+       vertex 1.08857 0.0807825 -0.510638
+    endloop
+  endfacet
+  facet normal 0.183185 -0.983079 0
+    outer loop
+       vertex 1.08086 0.0793453 0.489362
+       vertex 1.08857 0.0807825 -0.510638
+       vertex 1.08857 0.0807825 0.489362
+    endloop
+  endfacet
+  facet normal 0.235941 -0.971767 0
+    outer loop
+       vertex 1.08857 0.0807825 0.489362
+       vertex 1.08857 0.0807825 -0.510638
+       vertex 1.09609 0.0826098 -0.510638
+    endloop
+  endfacet
+  facet normal 0.235941 -0.971767 0
+    outer loop
+       vertex 1.08857 0.0807825 0.489362
+       vertex 1.09609 0.0826098 -0.510638
+       vertex 1.09609 0.0826098 0.489362
+    endloop
+  endfacet
+  facet normal 0.288414 -0.957506 0
+    outer loop
+       vertex 1.09609 0.0826098 0.489362
+       vertex 1.09609 0.0826098 -0.510638
+       vertex 1.10343 0.0848183 -0.510638
+    endloop
+  endfacet
+  facet normal 0.288414 -0.957506 0
+    outer loop
+       vertex 1.09609 0.0826098 0.489362
+       vertex 1.10343 0.0848183 -0.510638
+       vertex 1.10343 0.0848183 0.489362
+    endloop
+  endfacet
+  facet normal 0.340346 -0.9403 0
+    outer loop
+       vertex 1.10343 0.0848183 0.489362
+       vertex 1.10343 0.0848183 -0.510638
+       vertex 1.11056 0.0873988 -0.510638
+    endloop
+  endfacet
+  facet normal 0.340346 -0.9403 0
+    outer loop
+       vertex 1.10343 0.0848183 0.489362
+       vertex 1.11056 0.0873988 -0.510638
+       vertex 1.11056 0.0873988 0.489362
+    endloop
+  endfacet
+  facet normal 0.391483 -0.920185 0
+    outer loop
+       vertex 1.11056 0.0873988 0.489362
+       vertex 1.11056 0.0873988 -0.510638
+       vertex 1.11747 0.0903422 -0.510638
+    endloop
+  endfacet
+  facet normal 0.391483 -0.920185 0
+    outer loop
+       vertex 1.11056 0.0873988 0.489362
+       vertex 1.11747 0.0903422 -0.510638
+       vertex 1.11747 0.0903422 0.489362
+    endloop
+  endfacet
+  facet normal 0.441579 -0.897223 0
+    outer loop
+       vertex 1.11747 0.0903422 0.489362
+       vertex 1.11747 0.0903422 -0.510638
+       vertex 1.12417 0.0936393 -0.510638
+    endloop
+  endfacet
+  facet normal 0.441579 -0.897223 0
+    outer loop
+       vertex 1.11747 0.0903422 0.489362
+       vertex 1.12417 0.0936393 -0.510638
+       vertex 1.12417 0.0936393 0.489362
+    endloop
+  endfacet
+  facet normal 0.490397 -0.871499 0
+    outer loop
+       vertex 1.12417 0.0936393 0.489362
+       vertex 1.12417 0.0936393 -0.510638
+       vertex 1.13065 0.0972812 -0.510638
+    endloop
+  endfacet
+  facet normal 0.490397 -0.871499 0
+    outer loop
+       vertex 1.12417 0.0936393 0.489362
+       vertex 1.13065 0.0972812 -0.510638
+       vertex 1.13065 0.0972812 0.489362
+    endloop
+  endfacet
+  facet normal 0.537716 -0.843126 0
+    outer loop
+       vertex 1.13065 0.0972812 0.489362
+       vertex 1.13065 0.0972812 -0.510638
+       vertex 1.13688 0.101259 -0.510638
+    endloop
+  endfacet
+  facet normal 0.537716 -0.843126 0
+    outer loop
+       vertex 1.13065 0.0972812 0.489362
+       vertex 1.13688 0.101259 -0.510638
+       vertex 1.13688 0.101259 0.489362
+    endloop
+  endfacet
+  facet normal 0.583332 -0.812234 0
+    outer loop
+       vertex 1.13688 0.101259 0.489362
+       vertex 1.13688 0.101259 -0.510638
+       vertex 1.14287 0.105562 -0.510638
+    endloop
+  endfacet
+  facet normal 0.583332 -0.812234 0
+    outer loop
+       vertex 1.13688 0.101259 0.489362
+       vertex 1.14287 0.105562 -0.510638
+       vertex 1.14287 0.105562 0.489362
+    endloop
+  endfacet
+  facet normal 0.627062 -0.778969 0
+    outer loop
+       vertex 1.14287 0.105562 0.489362
+       vertex 1.14287 0.105562 -0.510638
+       vertex 1.14862 0.110184 -0.510638
+    endloop
+  endfacet
+  facet normal 0.627062 -0.778969 0
+    outer loop
+       vertex 1.14287 0.105562 0.489362
+       vertex 1.14862 0.110184 -0.510638
+       vertex 1.14862 0.110184 0.489362
+    endloop
+  endfacet
+  facet normal 0.66874 -0.743496 0
+    outer loop
+       vertex 1.14862 0.110184 0.489362
+       vertex 1.14862 0.110184 -0.510638
+       vertex 1.1541 0.115113 -0.510638
+    endloop
+  endfacet
+  facet normal 0.66874 -0.743496 0
+    outer loop
+       vertex 1.14862 0.110184 0.489362
+       vertex 1.1541 0.115113 -0.510638
+       vertex 1.1541 0.115113 0.489362
+    endloop
+  endfacet
+  facet normal 0.708226 -0.705986 0
+    outer loop
+       vertex 1.1541 0.115113 0.489362
+       vertex 1.1541 0.115113 -0.510638
+       vertex 1.15931 0.120341 -0.510638
+    endloop
+  endfacet
+  facet normal 0.708226 -0.705986 0
+    outer loop
+       vertex 1.1541 0.115113 0.489362
+       vertex 1.15931 0.120341 -0.510638
+       vertex 1.15931 0.120341 0.489362
+    endloop
+  endfacet
+  facet normal 0.745398 -0.66662 0
+    outer loop
+       vertex 1.15931 0.120341 0.489362
+       vertex 1.15931 0.120341 -0.510638
+       vertex 1.16424 0.12586 -0.510638
+    endloop
+  endfacet
+  facet normal 0.745398 -0.66662 0
+    outer loop
+       vertex 1.15931 0.120341 0.489362
+       vertex 1.16424 0.12586 -0.510638
+       vertex 1.16424 0.12586 0.489362
+    endloop
+  endfacet
+  facet normal 0.780156 -0.625585 0
+    outer loop
+       vertex 1.16424 0.12586 0.489362
+       vertex 1.16424 0.12586 -0.510638
+       vertex 1.16889 0.131659 -0.510638
+    endloop
+  endfacet
+  facet normal 0.780156 -0.625585 0
+    outer loop
+       vertex 1.16424 0.12586 0.489362
+       vertex 1.16889 0.131659 -0.510638
+       vertex 1.16889 0.131659 0.489362
+    endloop
+  endfacet
+  facet normal 0.812415 -0.58308 0
+    outer loop
+       vertex 1.16889 0.131659 0.489362
+       vertex 1.16889 0.131659 -0.510638
+       vertex 1.17325 0.13773 -0.510638
+    endloop
+  endfacet
+  facet normal 0.812415 -0.58308 0
+    outer loop
+       vertex 1.16889 0.131659 0.489362
+       vertex 1.17325 0.13773 -0.510638
+       vertex 1.17325 0.13773 0.489362
+    endloop
+  endfacet
+  facet normal 0.84213 -0.539274 0
+    outer loop
+       vertex 1.17325 0.13773 0.489362
+       vertex 1.17325 0.13773 -0.510638
+       vertex 1.17731 0.144064 -0.510638
+    endloop
+  endfacet
+  facet normal 0.84213 -0.539274 0
+    outer loop
+       vertex 1.17325 0.13773 0.489362
+       vertex 1.17731 0.144064 -0.510638
+       vertex 1.17731 0.144064 0.489362
+    endloop
+  endfacet
+  facet normal 0.869254 -0.494365 0
+    outer loop
+       vertex 1.17731 0.144064 0.489362
+       vertex 1.17731 0.144064 -0.510638
+       vertex 1.18105 0.150652 -0.510638
+    endloop
+  endfacet
+  facet normal 0.869254 -0.494365 0
+    outer loop
+       vertex 1.17731 0.144064 0.489362
+       vertex 1.18105 0.150652 -0.510638
+       vertex 1.18105 0.150652 0.489362
+    endloop
+  endfacet
+  facet normal 0.893763 -0.448539 0
+    outer loop
+       vertex 1.18105 0.150652 0.489362
+       vertex 1.18105 0.150652 -0.510638
+       vertex 1.18448 0.157483 -0.510638
+    endloop
+  endfacet
+  facet normal 0.893763 -0.448539 0
+    outer loop
+       vertex 1.18105 0.150652 0.489362
+       vertex 1.18448 0.157483 -0.510638
+       vertex 1.18448 0.157483 0.489362
+    endloop
+  endfacet
+  facet normal 0.915643 -0.401991 0
+    outer loop
+       vertex 1.18448 0.157483 0.489362
+       vertex 1.18448 0.157483 -0.510638
+       vertex 1.18758 0.164551 -0.510638
+    endloop
+  endfacet
+  facet normal 0.915643 -0.401991 0
+    outer loop
+       vertex 1.18448 0.157483 0.489362
+       vertex 1.18758 0.164551 -0.510638
+       vertex 1.18758 0.164551 0.489362
+    endloop
+  endfacet
+  facet normal 0.934915 -0.354872 0
+    outer loop
+       vertex 1.18758 0.164551 0.489362
+       vertex 1.18758 0.164551 -0.510638
+       vertex 1.19035 0.171844 -0.510638
+    endloop
+  endfacet
+  facet normal 0.934915 -0.354872 0
+    outer loop
+       vertex 1.18758 0.164551 0.489362
+       vertex 1.19035 0.171844 -0.510638
+       vertex 1.19035 0.171844 0.489362
+    endloop
+  endfacet
+  facet normal 0.951591 -0.307367 0
+    outer loop
+       vertex 1.19035 0.171844 0.489362
+       vertex 1.19035 0.171844 -0.510638
+       vertex 1.19278 0.179354 -0.510638
+    endloop
+  endfacet
+  facet normal 0.951591 -0.307367 0
+    outer loop
+       vertex 1.19035 0.171844 0.489362
+       vertex 1.19278 0.179354 -0.510638
+       vertex 1.19278 0.179354 0.489362
+    endloop
+  endfacet
+  facet normal 0.965702 -0.259654 0
+    outer loop
+       vertex 1.19278 0.179354 0.489362
+       vertex 1.19278 0.179354 -0.510638
+       vertex 1.19485 0.187073 -0.510638
+    endloop
+  endfacet
+  facet normal 0.965702 -0.259654 0
+    outer loop
+       vertex 1.19278 0.179354 0.489362
+       vertex 1.19485 0.187073 -0.510638
+       vertex 1.19485 0.187073 0.489362
+    endloop
+  endfacet
+  facet normal 0.977299 -0.211865 0
+    outer loop
+       vertex 1.19485 0.187073 0.489362
+       vertex 1.19485 0.187073 -0.510638
+       vertex 1.19657 0.19499 -0.510638
+    endloop
+  endfacet
+  facet normal 0.977299 -0.211865 0
+    outer loop
+       vertex 1.19485 0.187073 0.489362
+       vertex 1.19657 0.19499 -0.510638
+       vertex 1.19657 0.19499 0.489362
+    endloop
+  endfacet
+  facet normal 0.986431 -0.164178 0
+    outer loop
+       vertex 1.19657 0.19499 0.489362
+       vertex 1.19657 0.19499 -0.510638
+       vertex 1.19792 0.203097 -0.510638
+    endloop
+  endfacet
+  facet normal 0.986431 -0.164178 0
+    outer loop
+       vertex 1.19657 0.19499 0.489362
+       vertex 1.19792 0.203097 -0.510638
+       vertex 1.19792 0.203097 0.489362
+    endloop
+  endfacet
+  facet normal 0.993166 -0.116712 0
+    outer loop
+       vertex 1.19792 0.203097 0.489362
+       vertex 1.19792 0.203097 -0.510638
+       vertex 1.19889 0.211385 -0.510638
+    endloop
+  endfacet
+  facet normal 0.993166 -0.116712 0
+    outer loop
+       vertex 1.19792 0.203097 0.489362
+       vertex 1.19889 0.211385 -0.510638
+       vertex 1.19889 0.211385 0.489362
+    endloop
+  endfacet
+  facet normal 0.997573 -0.0696282 0
+    outer loop
+       vertex 1.19889 0.211385 0.489362
+       vertex 1.19889 0.211385 -0.510638
+       vertex 1.19948 0.219845 -0.510638
+    endloop
+  endfacet
+  facet normal 0.997573 -0.0696282 0
+    outer loop
+       vertex 1.19889 0.211385 0.489362
+       vertex 1.19948 0.219845 -0.510638
+       vertex 1.19948 0.219845 0.489362
+    endloop
+  endfacet
+  facet normal 0.999735 -0.0230288 0
+    outer loop
+       vertex 1.19948 0.219845 0.489362
+       vertex 1.19948 0.219845 -0.510638
+       vertex 1.19968 0.228466 -0.510638
+    endloop
+  endfacet
+  facet normal 0.999735 -0.0230288 0
+    outer loop
+       vertex 1.19948 0.219845 0.489362
+       vertex 1.19968 0.228466 -0.510638
+       vertex 1.19968 0.228466 0.489362
+    endloop
+  endfacet
+  facet normal 0.999841 0.0178212 0
+    outer loop
+       vertex 1.19968 0.228466 0.489362
+       vertex 1.19968 0.228466 -0.510638
+       vertex 1.19952 0.237636 -0.510638
+    endloop
+  endfacet
+  facet normal 0.999841 0.0178212 0
+    outer loop
+       vertex 1.19968 0.228466 0.489362
+       vertex 1.19952 0.237636 -0.510638
+       vertex 1.19952 0.237636 0.489362
+    endloop
+  endfacet
+  facet normal 0.998492 0.0549031 0
+    outer loop
+       vertex 1.19952 0.237636 0.489362
+       vertex 1.19952 0.237636 -0.510638
+       vertex 1.19903 0.246542 -0.510638
+    endloop
+  endfacet
+  facet normal 0.998492 0.0549031 0
+    outer loop
+       vertex 1.19952 0.237636 0.489362
+       vertex 1.19903 0.246542 -0.510638
+       vertex 1.19903 0.246542 0.489362
+    endloop
+  endfacet
+  facet normal 0.995569 0.0940305 0
+    outer loop
+       vertex 1.19903 0.246542 0.489362
+       vertex 1.19903 0.246542 -0.510638
+       vertex 1.19821 0.255181 -0.510638
+    endloop
+  endfacet
+  facet normal 0.995569 0.0940305 0
+    outer loop
+       vertex 1.19903 0.246542 0.489362
+       vertex 1.19821 0.255181 -0.510638
+       vertex 1.19821 0.255181 0.489362
+    endloop
+  endfacet
+  facet normal 0.99082 0.135185 0
+    outer loop
+       vertex 1.19821 0.255181 0.489362
+       vertex 1.19821 0.255181 -0.510638
+       vertex 1.19707 0.263551 -0.510638
+    endloop
+  endfacet
+  facet normal 0.99082 0.135185 0
+    outer loop
+       vertex 1.19821 0.255181 0.489362
+       vertex 1.19707 0.263551 -0.510638
+       vertex 1.19707 0.263551 0.489362
+    endloop
+  endfacet
+  facet normal 0.983962 0.178377 0
+    outer loop
+       vertex 1.19707 0.263551 0.489362
+       vertex 1.19707 0.263551 -0.510638
+       vertex 1.1956 0.271647 -0.510638
+    endloop
+  endfacet
+  facet normal 0.983962 0.178377 0
+    outer loop
+       vertex 1.19707 0.263551 0.489362
+       vertex 1.1956 0.271647 -0.510638
+       vertex 1.1956 0.271647 0.489362
+    endloop
+  endfacet
+  facet normal 0.974697 0.223531 0
+    outer loop
+       vertex 1.1956 0.271647 0.489362
+       vertex 1.1956 0.271647 -0.510638
+       vertex 1.19381 0.279466 -0.510638
+    endloop
+  endfacet
+  facet normal 0.974697 0.223531 0
+    outer loop
+       vertex 1.1956 0.271647 0.489362
+       vertex 1.19381 0.279466 -0.510638
+       vertex 1.19381 0.279466 0.489362
+    endloop
+  endfacet
+  facet normal 0.962714 0.270523 0
+    outer loop
+       vertex 1.19381 0.279466 0.489362
+       vertex 1.19381 0.279466 -0.510638
+       vertex 1.19169 0.287006 -0.510638
+    endloop
+  endfacet
+  facet normal 0.962714 0.270523 0
+    outer loop
+       vertex 1.19381 0.279466 0.489362
+       vertex 1.19169 0.287006 -0.510638
+       vertex 1.19169 0.287006 0.489362
+    endloop
+  endfacet
+  facet normal 0.947696 0.319175 0
+    outer loop
+       vertex 1.19169 0.287006 0.489362
+       vertex 1.19169 0.287006 -0.510638
+       vertex 1.18925 0.294262 -0.510638
+    endloop
+  endfacet
+  facet normal 0.947696 0.319175 0
+    outer loop
+       vertex 1.19169 0.287006 0.489362
+       vertex 1.18925 0.294262 -0.510638
+       vertex 1.18925 0.294262 0.489362
+    endloop
+  endfacet
+  facet normal 0.929354 0.369189 0
+    outer loop
+       vertex 1.18925 0.294262 0.489362
+       vertex 1.18925 0.294262 -0.510638
+       vertex 1.18648 0.301231 -0.510638
+    endloop
+  endfacet
+  facet normal 0.929354 0.369189 0
+    outer loop
+       vertex 1.18925 0.294262 0.489362
+       vertex 1.18648 0.301231 -0.510638
+       vertex 1.18648 0.301231 0.489362
+    endloop
+  endfacet
+  facet normal 0.90742 0.420225 0
+    outer loop
+       vertex 1.18648 0.301231 0.489362
+       vertex 1.18648 0.301231 -0.510638
+       vertex 1.18339 0.307911 -0.510638
+    endloop
+  endfacet
+  facet normal 0.90742 0.420225 0
+    outer loop
+       vertex 1.18648 0.301231 0.489362
+       vertex 1.18339 0.307911 -0.510638
+       vertex 1.18339 0.307911 0.489362
+    endloop
+  endfacet
+  facet normal 0.881675 0.471857 0
+    outer loop
+       vertex 1.18339 0.307911 0.489362
+       vertex 1.18339 0.307911 -0.510638
+       vertex 1.17997 0.314297 -0.510638
+    endloop
+  endfacet
+  facet normal 0.881675 0.471857 0
+    outer loop
+       vertex 1.18339 0.307911 0.489362
+       vertex 1.17997 0.314297 -0.510638
+       vertex 1.17997 0.314297 0.489362
+    endloop
+  endfacet
+  facet normal 0.851994 0.523552 0
+    outer loop
+       vertex 1.17997 0.314297 0.489362
+       vertex 1.17997 0.314297 -0.510638
+       vertex 1.17623 0.320386 -0.510638
+    endloop
+  endfacet
+  facet normal 0.851994 0.523552 0
+    outer loop
+       vertex 1.17997 0.314297 0.489362
+       vertex 1.17623 0.320386 -0.510638
+       vertex 1.17623 0.320386 0.489362
+    endloop
+  endfacet
+  facet normal 0.818343 0.57473 0
+    outer loop
+       vertex 1.17623 0.320386 0.489362
+       vertex 1.17623 0.320386 -0.510638
+       vertex 1.17216 0.326176 -0.510638
+    endloop
+  endfacet
+  facet normal 0.818343 0.57473 0
+    outer loop
+       vertex 1.17623 0.320386 0.489362
+       vertex 1.17216 0.326176 -0.510638
+       vertex 1.17216 0.326176 0.489362
+    endloop
+  endfacet
+  facet normal 0.780808 0.624772 0
+    outer loop
+       vertex 1.17216 0.326176 0.489362
+       vertex 1.17216 0.326176 -0.510638
+       vertex 1.16777 0.331662 -0.510638
+    endloop
+  endfacet
+  facet normal 0.780808 0.624772 0
+    outer loop
+       vertex 1.17216 0.326176 0.489362
+       vertex 1.16777 0.331662 -0.510638
+       vertex 1.16777 0.331662 0.489362
+    endloop
+  endfacet
+  facet normal 0.739605 0.673042 0
+    outer loop
+       vertex 1.16777 0.331662 0.489362
+       vertex 1.16777 0.331662 -0.510638
+       vertex 1.16306 0.336841 -0.510638
+    endloop
+  endfacet
+  facet normal 0.739605 0.673042 0
+    outer loop
+       vertex 1.16777 0.331662 0.489362
+       vertex 1.16306 0.336841 -0.510638
+       vertex 1.16306 0.336841 0.489362
+    endloop
+  endfacet
+  facet normal 0.695076 0.718937 0
+    outer loop
+       vertex 1.16306 0.336841 0.489362
+       vertex 1.16306 0.336841 -0.510638
+       vertex 1.15802 0.341711 -0.510638
+    endloop
+  endfacet
+  facet normal 0.695076 0.718937 0
+    outer loop
+       vertex 1.16306 0.336841 0.489362
+       vertex 1.15802 0.341711 -0.510638
+       vertex 1.15802 0.341711 0.489362
+    endloop
+  endfacet
+  facet normal 0.647674 0.761917 0
+    outer loop
+       vertex 1.15802 0.341711 0.489362
+       vertex 1.15802 0.341711 -0.510638
+       vertex 1.15266 0.346267 -0.510638
+    endloop
+  endfacet
+  facet normal 0.647674 0.761917 0
+    outer loop
+       vertex 1.15802 0.341711 0.489362
+       vertex 1.15266 0.346267 -0.510638
+       vertex 1.15266 0.346267 0.489362
+    endloop
+  endfacet
+  facet normal 0.597967 0.801521 0
+    outer loop
+       vertex 1.15266 0.346267 0.489362
+       vertex 1.15266 0.346267 -0.510638
+       vertex 1.14698 0.350506 -0.510638
+    endloop
+  endfacet
+  facet normal 0.597967 0.801521 0
+    outer loop
+       vertex 1.15266 0.346267 0.489362
+       vertex 1.14698 0.350506 -0.510638
+       vertex 1.14698 0.350506 0.489362
+    endloop
+  endfacet
+  facet normal 0.546557 0.837422 0
+    outer loop
+       vertex 1.14698 0.350506 0.489362
+       vertex 1.14698 0.350506 -0.510638
+       vertex 1.14097 0.354426 -0.510638
+    endloop
+  endfacet
+  facet normal 0.546557 0.837422 0
+    outer loop
+       vertex 1.14698 0.350506 0.489362
+       vertex 1.14097 0.354426 -0.510638
+       vertex 1.14097 0.354426 0.489362
+    endloop
+  endfacet
+  facet normal 0.494091 0.86941 0
+    outer loop
+       vertex 1.14097 0.354426 0.489362
+       vertex 1.14097 0.354426 -0.510638
+       vertex 1.13465 0.358022 -0.510638
+    endloop
+  endfacet
+  facet normal 0.494091 0.86941 0
+    outer loop
+       vertex 1.14097 0.354426 0.489362
+       vertex 1.13465 0.358022 -0.510638
+       vertex 1.13465 0.358022 0.489362
+    endloop
+  endfacet
+  facet normal 0.441206 0.897406 0
+    outer loop
+       vertex 1.13465 0.358022 0.489362
+       vertex 1.13465 0.358022 -0.510638
+       vertex 1.128 0.361291 -0.510638
+    endloop
+  endfacet
+  facet normal 0.441206 0.897406 0
+    outer loop
+       vertex 1.13465 0.358022 0.489362
+       vertex 1.128 0.361291 -0.510638
+       vertex 1.128 0.361291 0.489362
+    endloop
+  endfacet
+  facet normal 0.388492 0.921452 0
+    outer loop
+       vertex 1.128 0.361291 0.489362
+       vertex 1.128 0.361291 -0.510638
+       vertex 1.12102 0.364231 -0.510638
+    endloop
+  endfacet
+  facet normal 0.388492 0.921452 0
+    outer loop
+       vertex 1.128 0.361291 0.489362
+       vertex 1.12102 0.364231 -0.510638
+       vertex 1.12102 0.364231 0.489362
+    endloop
+  endfacet
+  facet normal 0.336477 0.941692 0
+    outer loop
+       vertex 1.12102 0.364231 0.489362
+       vertex 1.12102 0.364231 -0.510638
+       vertex 1.11373 0.366837 -0.510638
+    endloop
+  endfacet
+  facet normal 0.336477 0.941692 0
+    outer loop
+       vertex 1.12102 0.364231 0.489362
+       vertex 1.11373 0.366837 -0.510638
+       vertex 1.11373 0.366837 0.489362
+    endloop
+  endfacet
+  facet normal 0.285598 0.958349 0
+    outer loop
+       vertex 1.11373 0.366837 0.489362
+       vertex 1.11373 0.366837 -0.510638
+       vertex 1.10611 0.369106 -0.510638
+    endloop
+  endfacet
+  facet normal 0.285598 0.958349 0
+    outer loop
+       vertex 1.11373 0.366837 0.489362
+       vertex 1.10611 0.369106 -0.510638
+       vertex 1.10611 0.369106 0.489362
+    endloop
+  endfacet
+  facet normal 0.236225 0.971698 0
+    outer loop
+       vertex 1.10611 0.369106 0.489362
+       vertex 1.10611 0.369106 -0.510638
+       vertex 1.09818 0.371036 -0.510638
+    endloop
+  endfacet
+  facet normal 0.236225 0.971698 0
+    outer loop
+       vertex 1.10611 0.369106 0.489362
+       vertex 1.09818 0.371036 -0.510638
+       vertex 1.09818 0.371036 0.489362
+    endloop
+  endfacet
+  facet normal 0.188627 0.982049 0
+    outer loop
+       vertex 1.09818 0.371036 0.489362
+       vertex 1.09818 0.371036 -0.510638
+       vertex 1.08992 0.372622 -0.510638
+    endloop
+  endfacet
+  facet normal 0.188627 0.982049 0
+    outer loop
+       vertex 1.09818 0.371036 0.489362
+       vertex 1.08992 0.372622 -0.510638
+       vertex 1.08992 0.372622 0.489362
+    endloop
+  endfacet
+  facet normal 0.142996 0.989723 0
+    outer loop
+       vertex 1.08992 0.372622 0.489362
+       vertex 1.08992 0.372622 -0.510638
+       vertex 1.08134 0.373861 -0.510638
+    endloop
+  endfacet
+  facet normal 0.142996 0.989723 0
+    outer loop
+       vertex 1.08992 0.372622 0.489362
+       vertex 1.08134 0.373861 -0.510638
+       vertex 1.08134 0.373861 0.489362
+    endloop
+  endfacet
+  facet normal 0.0994503 0.995043 0
+    outer loop
+       vertex 1.08134 0.373861 0.489362
+       vertex 1.08134 0.373861 -0.510638
+       vertex 1.07244 0.374751 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0994503 0.995043 0
+    outer loop
+       vertex 1.08134 0.373861 0.489362
+       vertex 1.07244 0.374751 -0.510638
+       vertex 1.07244 0.374751 0.489362
+    endloop
+  endfacet
+  facet normal 0.0580503 0.998314 0
+    outer loop
+       vertex 1.07244 0.374751 0.489362
+       vertex 1.07244 0.374751 -0.510638
+       vertex 1.06322 0.375287 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0580503 0.998314 0
+    outer loop
+       vertex 1.07244 0.374751 0.489362
+       vertex 1.06322 0.375287 -0.510638
+       vertex 1.06322 0.375287 0.489362
+    endloop
+  endfacet
+  facet normal 0.018806 0.999823 0
+    outer loop
+       vertex 1.06322 0.375287 0.489362
+       vertex 1.06322 0.375287 -0.510638
+       vertex 1.05368 0.375466 -0.510638
+    endloop
+  endfacet
+  facet normal 0.018806 0.999823 0
+    outer loop
+       vertex 1.06322 0.375287 0.489362
+       vertex 1.05368 0.375466 -0.510638
+       vertex 1.05368 0.375466 0.489362
+    endloop
+  endfacet
+  facet normal 0 1 0
+    outer loop
+       vertex 1.05368 0.375466 0.489362
+       vertex 1.05368 0.375466 -0.510638
+       vertex 0.972682 0.375466 -0.510638
+    endloop
+  endfacet
+  facet normal 0 1 0
+    outer loop
+       vertex 1.05368 0.375466 0.489362
+       vertex 0.972682 0.375466 -0.510638
+       vertex 0.972682 0.375466 0.489362
+    endloop
+  endfacet
+  facet normal -1 0 -0
+    outer loop
+       vertex 0.972682 0.375466 0.489362
+       vertex 0.972682 0.375466 -0.510638
+       vertex 0.972682 0.0974664 -0.510638
+    endloop
+  endfacet
+  facet normal -1 -0 0
+    outer loop
+       vertex 0.972682 0.375466 0.489362
+       vertex 0.972682 0.0974664 -0.510638
+       vertex 0.972682 0.0974664 0.489362
+    endloop
+  endfacet
+  facet normal -0.427486 -0.904022 -0
+    outer loop
+       vertex 0.972682 0.0974664 0.489362
+       vertex 0.972682 0.0974664 -0.510638
+       vertex 0.975389 0.0961864 -0.510638
+    endloop
+  endfacet
+  facet normal -0.427486 -0.904022 0
+    outer loop
+       vertex 0.972682 0.0974664 0.489362
+       vertex 0.975389 0.0961864 -0.510638
+       vertex 0.975389 0.0961864 0.489362
+    endloop
+  endfacet
+  facet normal -0.53695 0.843614 0
+    outer loop
+       vertex 1.7593 0.0469297 0.489362
+       vertex 1.7593 0.0469297 -0.510638
+       vertex 1.75394 0.0435191 -0.510638
+    endloop
+  endfacet
+  facet normal -0.53695 0.843614 0
+    outer loop
+       vertex 1.7593 0.0469297 0.489362
+       vertex 1.75394 0.0435191 -0.510638
+       vertex 1.75394 0.0435191 0.489362
+    endloop
+  endfacet
+  facet normal -0.523995 0.851721 0
+    outer loop
+       vertex 1.75394 0.0435191 0.489362
+       vertex 1.75394 0.0435191 -0.510638
+       vertex 1.7486 0.0402344 -0.510638
+    endloop
+  endfacet
+  facet normal -0.523995 0.851721 0
+    outer loop
+       vertex 1.75394 0.0435191 0.489362
+       vertex 1.7486 0.0402344 -0.510638
+       vertex 1.7486 0.0402344 0.489362
+    endloop
+  endfacet
+  facet normal -0.510105 0.860112 0
+    outer loop
+       vertex 1.7486 0.0402344 0.489362
+       vertex 1.7486 0.0402344 -0.510638
+       vertex 1.74327 0.037075 -0.510638
+    endloop
+  endfacet
+  facet normal -0.510105 0.860112 0
+    outer loop
+       vertex 1.7486 0.0402344 0.489362
+       vertex 1.74327 0.037075 -0.510638
+       vertex 1.74327 0.037075 0.489362
+    endloop
+  endfacet
+  facet normal -0.4953 0.868722 0
+    outer loop
+       vertex 1.74327 0.037075 0.489362
+       vertex 1.74327 0.037075 -0.510638
+       vertex 1.73795 0.0340405 -0.510638
+    endloop
+  endfacet
+  facet normal -0.4953 0.868722 0
+    outer loop
+       vertex 1.74327 0.037075 0.489362
+       vertex 1.73795 0.0340405 -0.510638
+       vertex 1.73795 0.0340405 0.489362
+    endloop
+  endfacet
+  facet normal -0.47959 0.877493 0
+    outer loop
+       vertex 1.73795 0.0340405 0.489362
+       vertex 1.73795 0.0340405 -0.510638
+       vertex 1.73263 0.0311304 -0.510638
+    endloop
+  endfacet
+  facet normal -0.47959 0.877493 0
+    outer loop
+       vertex 1.73795 0.0340405 0.489362
+       vertex 1.73263 0.0311304 -0.510638
+       vertex 1.73263 0.0311304 0.489362
+    endloop
+  endfacet
+  facet normal -0.46298 0.886369 0
+    outer loop
+       vertex 1.73263 0.0311304 0.489362
+       vertex 1.73263 0.0311304 -0.510638
+       vertex 1.72729 0.0283443 -0.510638
+    endloop
+  endfacet
+  facet normal -0.46298 0.886369 0
+    outer loop
+       vertex 1.73263 0.0311304 0.489362
+       vertex 1.72729 0.0283443 -0.510638
+       vertex 1.72729 0.0283443 0.489362
+    endloop
+  endfacet
+  facet normal -0.445526 0.895269 0
+    outer loop
+       vertex 1.72729 0.0283443 0.489362
+       vertex 1.72729 0.0283443 -0.510638
+       vertex 1.72194 0.0256818 -0.510638
+    endloop
+  endfacet
+  facet normal -0.445526 0.895269 0
+    outer loop
+       vertex 1.72729 0.0283443 0.489362
+       vertex 1.72194 0.0256818 -0.510638
+       vertex 1.72194 0.0256818 0.489362
+    endloop
+  endfacet
+  facet normal -0.427249 0.904134 0
+    outer loop
+       vertex 1.72194 0.0256818 0.489362
+       vertex 1.72194 0.0256818 -0.510638
+       vertex 1.71657 0.0231424 -0.510638
+    endloop
+  endfacet
+  facet normal -0.427249 0.904134 0
+    outer loop
+       vertex 1.72194 0.0256818 0.489362
+       vertex 1.71657 0.0231424 -0.510638
+       vertex 1.71657 0.0231424 0.489362
+    endloop
+  endfacet
+  facet normal -0.408218 0.912884 0
+    outer loop
+       vertex 1.71657 0.0231424 0.489362
+       vertex 1.71657 0.0231424 -0.510638
+       vertex 1.71116 0.0207256 -0.510638
+    endloop
+  endfacet
+  facet normal -0.408218 0.912884 0
+    outer loop
+       vertex 1.71657 0.0231424 0.489362
+       vertex 1.71116 0.0207256 -0.510638
+       vertex 1.71116 0.0207256 0.489362
+    endloop
+  endfacet
+  facet normal -0.388494 0.921451 0
+    outer loop
+       vertex 1.71116 0.0207256 0.489362
+       vertex 1.71116 0.0207256 -0.510638
+       vertex 1.70572 0.0184311 -0.510638
+    endloop
+  endfacet
+  facet normal -0.388494 0.921451 0
+    outer loop
+       vertex 1.71116 0.0207256 0.489362
+       vertex 1.70572 0.0184311 -0.510638
+       vertex 1.70572 0.0184311 0.489362
+    endloop
+  endfacet
+  facet normal -0.368154 0.929765 0
+    outer loop
+       vertex 1.70572 0.0184311 0.489362
+       vertex 1.70572 0.0184311 -0.510638
+       vertex 1.70023 0.0162584 -0.510638
+    endloop
+  endfacet
+  facet normal -0.368154 0.929765 0
+    outer loop
+       vertex 1.70572 0.0184311 0.489362
+       vertex 1.70023 0.0162584 -0.510638
+       vertex 1.70023 0.0162584 0.489362
+    endloop
+  endfacet
+  facet normal -0.347293 0.937757 0
+    outer loop
+       vertex 1.70023 0.0162584 0.489362
+       vertex 1.70023 0.0162584 -0.510638
+       vertex 1.69469 0.014207 -0.510638
+    endloop
+  endfacet
+  facet normal -0.347293 0.937757 0
+    outer loop
+       vertex 1.70023 0.0162584 0.489362
+       vertex 1.69469 0.014207 -0.510638
+       vertex 1.69469 0.014207 0.489362
+    endloop
+  endfacet
+  facet normal -0.326001 0.945369 0
+    outer loop
+       vertex 1.69469 0.014207 0.489362
+       vertex 1.69469 0.014207 -0.510638
+       vertex 1.6891 0.0122765 -0.510638
+    endloop
+  endfacet
+  facet normal -0.326001 0.945369 0
+    outer loop
+       vertex 1.69469 0.014207 0.489362
+       vertex 1.6891 0.0122765 -0.510638
+       vertex 1.6891 0.0122765 0.489362
+    endloop
+  endfacet
+  facet normal -0.304386 0.952549 0
+    outer loop
+       vertex 1.6891 0.0122765 0.489362
+       vertex 1.6891 0.0122765 -0.510638
+       vertex 1.68343 0.0104664 -0.510638
+    endloop
+  endfacet
+  facet normal -0.304386 0.952549 0
+    outer loop
+       vertex 1.6891 0.0122765 0.489362
+       vertex 1.68343 0.0104664 -0.510638
+       vertex 1.68343 0.0104664 0.489362
+    endloop
+  endfacet
+  facet normal -0.282544 0.959254 0
+    outer loop
+       vertex 1.68343 0.0104664 0.489362
+       vertex 1.68343 0.0104664 -0.510638
+       vertex 1.67769 0.00877632 -0.510638
+    endloop
+  endfacet
+  facet normal -0.282544 0.959254 0
+    outer loop
+       vertex 1.68343 0.0104664 0.489362
+       vertex 1.67769 0.00877632 -0.510638
+       vertex 1.67769 0.00877632 0.489362
+    endloop
+  endfacet
+  facet normal -0.260603 0.965446 0
+    outer loop
+       vertex 1.67769 0.00877632 0.489362
+       vertex 1.67769 0.00877632 -0.510638
+       vertex 1.67188 0.0072058 -0.510638
+    endloop
+  endfacet
+  facet normal -0.260603 0.965446 0
+    outer loop
+       vertex 1.67769 0.00877632 0.489362
+       vertex 1.67188 0.0072058 -0.510638
+       vertex 1.67188 0.0072058 0.489362
+    endloop
+  endfacet
+  facet normal -0.238656 0.971104 0
+    outer loop
+       vertex 1.67188 0.0072058 0.489362
+       vertex 1.67188 0.0072058 -0.510638
+       vertex 1.66597 0.00575439 -0.510638
+    endloop
+  endfacet
+  facet normal -0.238656 0.971104 0
+    outer loop
+       vertex 1.67188 0.0072058 0.489362
+       vertex 1.66597 0.00575439 -0.510638
+       vertex 1.66597 0.00575439 0.489362
+    endloop
+  endfacet
+  facet normal -0.216821 0.976211 0
+    outer loop
+       vertex 1.66597 0.00575439 0.489362
+       vertex 1.66597 0.00575439 -0.510638
+       vertex 1.65997 0.00442165 -0.510638
+    endloop
+  endfacet
+  facet normal -0.216821 0.976211 0
+    outer loop
+       vertex 1.66597 0.00575439 0.489362
+       vertex 1.65997 0.00442165 -0.510638
+       vertex 1.65997 0.00442165 0.489362
+    endloop
+  endfacet
+  facet normal -0.195197 0.980764 0
+    outer loop
+       vertex 1.65997 0.00442165 0.489362
+       vertex 1.65997 0.00442165 -0.510638
+       vertex 1.65387 0.00320713 -0.510638
+    endloop
+  endfacet
+  facet normal -0.195197 0.980764 0
+    outer loop
+       vertex 1.65997 0.00442165 0.489362
+       vertex 1.65387 0.00320713 -0.510638
+       vertex 1.65387 0.00320713 0.489362
+    endloop
+  endfacet
+  facet normal -0.173886 0.984766 0
+    outer loop
+       vertex 1.65387 0.00320713 0.489362
+       vertex 1.65387 0.00320713 -0.510638
+       vertex 1.64766 0.00211039 -0.510638
+    endloop
+  endfacet
+  facet normal -0.173886 0.984766 0
+    outer loop
+       vertex 1.65387 0.00320713 0.489362
+       vertex 1.64766 0.00211039 -0.510638
+       vertex 1.64766 0.00211039 0.489362
+    endloop
+  endfacet
+  facet normal -0.152973 0.98823 0
+    outer loop
+       vertex 1.64766 0.00211039 0.489362
+       vertex 1.64766 0.00211039 -0.510638
+       vertex 1.64133 0.00113098 -0.510638
+    endloop
+  endfacet
+  facet normal -0.152973 0.98823 0
+    outer loop
+       vertex 1.64766 0.00211039 0.489362
+       vertex 1.64133 0.00113098 -0.510638
+       vertex 1.64133 0.00113098 0.489362
+    endloop
+  endfacet
+  facet normal -0.132538 0.991178 0
+    outer loop
+       vertex 1.64133 0.00113098 0.489362
+       vertex 1.64133 0.00113098 -0.510638
+       vertex 1.63488 0.000268462 -0.510638
+    endloop
+  endfacet
+  facet normal -0.132538 0.991178 0
+    outer loop
+       vertex 1.64133 0.00113098 0.489362
+       vertex 1.63488 0.000268462 -0.510638
+       vertex 1.63488 0.000268462 0.489362
+    endloop
+  endfacet
+  facet normal -0.112655 0.993634 0
+    outer loop
+       vertex 1.63488 0.000268462 0.489362
+       vertex 1.63488 0.000268462 -0.510638
+       vertex 1.6283 -0.000477612 -0.510638
+    endloop
+  endfacet
+  facet normal -0.112655 0.993634 0
+    outer loop
+       vertex 1.63488 0.000268462 0.489362
+       vertex 1.6283 -0.000477612 -0.510638
+       vertex 1.6283 -0.000477612 0.489362
+    endloop
+  endfacet
+  facet normal -0.0933819 0.99563 0
+    outer loop
+       vertex 1.6283 -0.000477612 0.489362
+       vertex 1.6283 -0.000477612 -0.510638
+       vertex 1.62158 -0.00110769 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0933819 0.99563 0
+    outer loop
+       vertex 1.6283 -0.000477612 0.489362
+       vertex 1.62158 -0.00110769 -0.510638
+       vertex 1.62158 -0.00110769 0.489362
+    endloop
+  endfacet
+  facet normal -0.0747679 0.997201 0
+    outer loop
+       vertex 1.62158 -0.00110769 0.489362
+       vertex 1.62158 -0.00110769 -0.510638
+       vertex 1.61472 -0.0016222 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0747679 0.997201 0
+    outer loop
+       vertex 1.62158 -0.00110769 0.489362
+       vertex 1.61472 -0.0016222 -0.510638
+       vertex 1.61472 -0.0016222 0.489362
+    endloop
+  endfacet
+  facet normal -0.0568538 0.998383 0
+    outer loop
+       vertex 1.61472 -0.0016222 0.489362
+       vertex 1.61472 -0.0016222 -0.510638
+       vertex 1.6077 -0.00202161 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0568538 0.998383 0
+    outer loop
+       vertex 1.61472 -0.0016222 0.489362
+       vertex 1.6077 -0.00202161 -0.510638
+       vertex 1.6077 -0.00202161 0.489362
+    endloop
+  endfacet
+  facet normal -0.0396679 0.999213 0
+    outer loop
+       vertex 1.6077 -0.00202161 0.489362
+       vertex 1.6077 -0.00202161 -0.510638
+       vertex 1.60053 -0.00230635 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0396679 0.999213 0
+    outer loop
+       vertex 1.6077 -0.00202161 0.489362
+       vertex 1.60053 -0.00230635 -0.510638
+       vertex 1.60053 -0.00230635 0.489362
+    endloop
+  endfacet
+  facet normal -0.0232306 0.99973 0
+    outer loop
+       vertex 1.60053 -0.00230635 0.489362
+       vertex 1.60053 -0.00230635 -0.510638
+       vertex 1.59319 -0.00247687 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0232306 0.99973 0
+    outer loop
+       vertex 1.60053 -0.00230635 0.489362
+       vertex 1.59319 -0.00247687 -0.510638
+       vertex 1.59319 -0.00247687 0.489362
+    endloop
+  endfacet
+  facet normal -0.00755401 0.999971 0
+    outer loop
+       vertex 1.59319 -0.00247687 0.489362
+       vertex 1.59319 -0.00247687 -0.510638
+       vertex 1.58568 -0.00253361 -0.510638
+    endloop
+  endfacet
+  facet normal -0.00755401 0.999971 0
+    outer loop
+       vertex 1.59319 -0.00247687 0.489362
+       vertex 1.58568 -0.00253361 -0.510638
+       vertex 1.58568 -0.00253361 0.489362
+    endloop
+  endfacet
+  facet normal 0.0274989 0.999622 0
+    outer loop
+       vertex 1.58568 -0.00253361 0.489362
+       vertex 1.58568 -0.00253361 -0.510638
+       vertex 1.57189 -0.00215418 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0274989 0.999622 0
+    outer loop
+       vertex 1.58568 -0.00253361 0.489362
+       vertex 1.57189 -0.00215418 -0.510638
+       vertex 1.57189 -0.00215418 0.489362
+    endloop
+  endfacet
+  facet normal 0.0836271 0.996497 0
+    outer loop
+       vertex 1.57189 -0.00215418 0.489362
+       vertex 1.57189 -0.00215418 -0.510638
+       vertex 1.55851 -0.00103166 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0836271 0.996497 0
+    outer loop
+       vertex 1.57189 -0.00215418 0.489362
+       vertex 1.55851 -0.00103166 -0.510638
+       vertex 1.55851 -0.00103166 0.489362
+    endloop
+  endfacet
+  facet normal 0.14077 0.990042 0
+    outer loop
+       vertex 1.55851 -0.00103166 0.489362
+       vertex 1.55851 -0.00103166 -0.510638
+       vertex 1.54556 0.00081041 -0.510638
+    endloop
+  endfacet
+  facet normal 0.14077 0.990042 0
+    outer loop
+       vertex 1.55851 -0.00103166 0.489362
+       vertex 1.54556 0.00081041 -0.510638
+       vertex 1.54556 0.00081041 0.489362
+    endloop
+  endfacet
+  facet normal 0.198507 0.9801 0
+    outer loop
+       vertex 1.54556 0.00081041 0.489362
+       vertex 1.54556 0.00081041 -0.510638
+       vertex 1.53303 0.00334848 -0.510638
+    endloop
+  endfacet
+  facet normal 0.198507 0.9801 0
+    outer loop
+       vertex 1.54556 0.00081041 0.489362
+       vertex 1.53303 0.00334848 -0.510638
+       vertex 1.53303 0.00334848 0.489362
+    endloop
+  endfacet
+  facet normal 0.256381 0.966576 0
+    outer loop
+       vertex 1.53303 0.00334848 0.489362
+       vertex 1.53303 0.00334848 -0.510638
+       vertex 1.52092 0.006559 -0.510638
+    endloop
+  endfacet
+  facet normal 0.256381 0.966576 0
+    outer loop
+       vertex 1.53303 0.00334848 0.489362
+       vertex 1.52092 0.006559 -0.510638
+       vertex 1.52092 0.006559 0.489362
+    endloop
+  endfacet
+  facet normal 0.313921 0.949449 0
+    outer loop
+       vertex 1.52092 0.006559 0.489362
+       vertex 1.52092 0.006559 -0.510638
+       vertex 1.50925 0.0104184 -0.510638
+    endloop
+  endfacet
+  facet normal 0.313921 0.949449 0
+    outer loop
+       vertex 1.52092 0.006559 0.489362
+       vertex 1.50925 0.0104184 -0.510638
+       vertex 1.50925 0.0104184 0.489362
+    endloop
+  endfacet
+  facet normal 0.370643 0.928776 0
+    outer loop
+       vertex 1.50925 0.0104184 0.489362
+       vertex 1.50925 0.0104184 -0.510638
+       vertex 1.49801 0.0149032 -0.510638
+    endloop
+  endfacet
+  facet normal 0.370643 0.928776 0
+    outer loop
+       vertex 1.50925 0.0104184 0.489362
+       vertex 1.49801 0.0149032 -0.510638
+       vertex 1.49801 0.0149032 0.489362
+    endloop
+  endfacet
+  facet normal 0.426086 0.904682 0
+    outer loop
+       vertex 1.49801 0.0149032 0.489362
+       vertex 1.49801 0.0149032 -0.510638
+       vertex 1.48721 0.0199897 -0.510638
+    endloop
+  endfacet
+  facet normal 0.426086 0.904682 0
+    outer loop
+       vertex 1.49801 0.0149032 0.489362
+       vertex 1.48721 0.0199897 -0.510638
+       vertex 1.48721 0.0199897 0.489362
+    endloop
+  endfacet
+  facet normal 0.479823 0.877366 0
+    outer loop
+       vertex 1.48721 0.0199897 0.489362
+       vertex 1.48721 0.0199897 -0.510638
+       vertex 1.47685 0.0256544 -0.510638
+    endloop
+  endfacet
+  facet normal 0.479823 0.877366 0
+    outer loop
+       vertex 1.48721 0.0199897 0.489362
+       vertex 1.47685 0.0256544 -0.510638
+       vertex 1.47685 0.0256544 0.489362
+    endloop
+  endfacet
+  facet normal 0.53147 0.847077 0
+    outer loop
+       vertex 1.47685 0.0256544 0.489362
+       vertex 1.47685 0.0256544 -0.510638
+       vertex 1.46694 0.0318738 -0.510638
+    endloop
+  endfacet
+  facet normal 0.53147 0.847077 0
+    outer loop
+       vertex 1.47685 0.0256544 0.489362
+       vertex 1.46694 0.0318738 -0.510638
+       vertex 1.46694 0.0318738 0.489362
+    endloop
+  endfacet
+  facet normal 0.580702 0.814116 0
+    outer loop
+       vertex 1.46694 0.0318738 0.489362
+       vertex 1.46694 0.0318738 -0.510638
+       vertex 1.45748 0.0386243 -0.510638
+    endloop
+  endfacet
+  facet normal 0.580702 0.814116 0
+    outer loop
+       vertex 1.46694 0.0318738 0.489362
+       vertex 1.45748 0.0386243 -0.510638
+       vertex 1.45748 0.0386243 0.489362
+    endloop
+  endfacet
+  facet normal 0.627272 0.7788 0
+    outer loop
+       vertex 1.45748 0.0386243 0.489362
+       vertex 1.45748 0.0386243 -0.510638
+       vertex 1.44847 0.0458824 -0.510638
+    endloop
+  endfacet
+  facet normal 0.627272 0.7788 0
+    outer loop
+       vertex 1.45748 0.0386243 0.489362
+       vertex 1.44847 0.0458824 -0.510638
+       vertex 1.44847 0.0458824 0.489362
+    endloop
+  endfacet
+  facet normal 0.670983 0.741473 0
+    outer loop
+       vertex 1.44847 0.0458824 0.489362
+       vertex 1.44847 0.0458824 -0.510638
+       vertex 1.43991 0.0536245 -0.510638
+    endloop
+  endfacet
+  facet normal 0.670983 0.741473 0
+    outer loop
+       vertex 1.44847 0.0458824 0.489362
+       vertex 1.43991 0.0536245 -0.510638
+       vertex 1.43991 0.0536245 0.489362
+    endloop
+  endfacet
+  facet normal 0.711719 0.702464 0
+    outer loop
+       vertex 1.43991 0.0536245 0.489362
+       vertex 1.43991 0.0536245 -0.510638
+       vertex 1.43181 0.061827 -0.510638
+    endloop
+  endfacet
+  facet normal 0.711719 0.702464 0
+    outer loop
+       vertex 1.43991 0.0536245 0.489362
+       vertex 1.43181 0.061827 -0.510638
+       vertex 1.43181 0.061827 0.489362
+    endloop
+  endfacet
+  facet normal 0.749419 0.662096 0
+    outer loop
+       vertex 1.43181 0.061827 0.489362
+       vertex 1.43181 0.061827 -0.510638
+       vertex 1.42418 0.0704664 -0.510638
+    endloop
+  endfacet
+  facet normal 0.749419 0.662096 0
+    outer loop
+       vertex 1.43181 0.061827 0.489362
+       vertex 1.42418 0.0704664 -0.510638
+       vertex 1.42418 0.0704664 0.489362
+    endloop
+  endfacet
+  facet normal 0.784076 0.620664 0
+    outer loop
+       vertex 1.42418 0.0704664 0.489362
+       vertex 1.42418 0.0704664 -0.510638
+       vertex 1.41702 0.0795191 -0.510638
+    endloop
+  endfacet
+  facet normal 0.784076 0.620664 0
+    outer loop
+       vertex 1.42418 0.0704664 0.489362
+       vertex 1.41702 0.0795191 -0.510638
+       vertex 1.41702 0.0795191 0.489362
+    endloop
+  endfacet
+  facet normal 0.815722 0.578444 0
+    outer loop
+       vertex 1.41702 0.0795191 0.489362
+       vertex 1.41702 0.0795191 -0.510638
+       vertex 1.41032 0.0889617 -0.510638
+    endloop
+  endfacet
+  facet normal 0.815722 0.578444 0
+    outer loop
+       vertex 1.41702 0.0795191 0.489362
+       vertex 1.41032 0.0889617 -0.510638
+       vertex 1.41032 0.0889617 0.489362
+    endloop
+  endfacet
+  facet normal 0.844433 0.535662 0
+    outer loop
+       vertex 1.41032 0.0889617 0.489362
+       vertex 1.41032 0.0889617 -0.510638
+       vertex 1.4041 0.0987704 -0.510638
+    endloop
+  endfacet
+  facet normal 0.844433 0.535662 0
+    outer loop
+       vertex 1.41032 0.0889617 0.489362
+       vertex 1.4041 0.0987704 -0.510638
+       vertex 1.4041 0.0987704 0.489362
+    endloop
+  endfacet
+  facet normal 0.870308 0.492508 0
+    outer loop
+       vertex 1.4041 0.0987704 0.489362
+       vertex 1.4041 0.0987704 -0.510638
+       vertex 1.39835 0.108922 -0.510638
+    endloop
+  endfacet
+  facet normal 0.870308 0.492508 0
+    outer loop
+       vertex 1.4041 0.0987704 0.489362
+       vertex 1.39835 0.108922 -0.510638
+       vertex 1.39835 0.108922 0.489362
+    endloop
+  endfacet
+  facet normal 0.893451 0.449161 0
+    outer loop
+       vertex 1.39835 0.108922 0.489362
+       vertex 1.39835 0.108922 -0.510638
+       vertex 1.39309 0.119392 -0.510638
+    endloop
+  endfacet
+  facet normal 0.893451 0.449161 0
+    outer loop
+       vertex 1.39835 0.108922 0.489362
+       vertex 1.39309 0.119392 -0.510638
+       vertex 1.39309 0.119392 0.489362
+    endloop
+  endfacet
+  facet normal 0.913984 0.405751 0
+    outer loop
+       vertex 1.39309 0.119392 0.489362
+       vertex 1.39309 0.119392 -0.510638
+       vertex 1.38831 0.130158 -0.510638
+    endloop
+  endfacet
+  facet normal 0.913984 0.405751 0
+    outer loop
+       vertex 1.39309 0.119392 0.489362
+       vertex 1.38831 0.130158 -0.510638
+       vertex 1.38831 0.130158 0.489362
+    endloop
+  endfacet
+  facet normal 0.932038 0.36236 0
+    outer loop
+       vertex 1.38831 0.130158 0.489362
+       vertex 1.38831 0.130158 -0.510638
+       vertex 1.38402 0.141196 -0.510638
+    endloop
+  endfacet
+  facet normal 0.932038 0.36236 0
+    outer loop
+       vertex 1.38831 0.130158 0.489362
+       vertex 1.38402 0.141196 -0.510638
+       vertex 1.38402 0.141196 0.489362
+    endloop
+  endfacet
+  facet normal 0.947731 0.31907 0
+    outer loop
+       vertex 1.38402 0.141196 0.489362
+       vertex 1.38402 0.141196 -0.510638
+       vertex 1.38022 0.152483 -0.510638
+    endloop
+  endfacet
+  facet normal 0.947731 0.31907 0
+    outer loop
+       vertex 1.38402 0.141196 0.489362
+       vertex 1.38022 0.152483 -0.510638
+       vertex 1.38022 0.152483 0.489362
+    endloop
+  endfacet
+  facet normal 0.961176 0.275937 0
+    outer loop
+       vertex 1.38022 0.152483 0.489362
+       vertex 1.38022 0.152483 -0.510638
+       vertex 1.37691 0.163994 -0.510638
+    endloop
+  endfacet
+  facet normal 0.961176 0.275937 0
+    outer loop
+       vertex 1.38022 0.152483 0.489362
+       vertex 1.37691 0.163994 -0.510638
+       vertex 1.37691 0.163994 0.489362
+    endloop
+  endfacet
+  facet normal 0.972481 0.232981 0
+    outer loop
+       vertex 1.37691 0.163994 0.489362
+       vertex 1.37691 0.163994 -0.510638
+       vertex 1.37411 0.175707 -0.510638
+    endloop
+  endfacet
+  facet normal 0.972481 0.232981 0
+    outer loop
+       vertex 1.37691 0.163994 0.489362
+       vertex 1.37411 0.175707 -0.510638
+       vertex 1.37411 0.175707 0.489362
+    endloop
+  endfacet
+  facet normal 0.981742 0.190217 0
+    outer loop
+       vertex 1.37411 0.175707 0.489362
+       vertex 1.37411 0.175707 -0.510638
+       vertex 1.3718 0.187598 -0.510638
+    endloop
+  endfacet
+  facet normal 0.981742 0.190217 0
+    outer loop
+       vertex 1.37411 0.175707 0.489362
+       vertex 1.3718 0.187598 -0.510638
+       vertex 1.3718 0.187598 0.489362
+    endloop
+  endfacet
+  facet normal 0.989041 0.147644 0
+    outer loop
+       vertex 1.3718 0.187598 0.489362
+       vertex 1.3718 0.187598 -0.510638
+       vertex 1.37001 0.199642 -0.510638
+    endloop
+  endfacet
+  facet normal 0.989041 0.147644 0
+    outer loop
+       vertex 1.3718 0.187598 0.489362
+       vertex 1.37001 0.199642 -0.510638
+       vertex 1.37001 0.199642 0.489362
+    endloop
+  endfacet
+  facet normal 0.994444 0.105262 0
+    outer loop
+       vertex 1.37001 0.199642 0.489362
+       vertex 1.37001 0.199642 -0.510638
+       vertex 1.36872 0.211818 -0.510638
+    endloop
+  endfacet
+  facet normal 0.994444 0.105262 0
+    outer loop
+       vertex 1.37001 0.199642 0.489362
+       vertex 1.36872 0.211818 -0.510638
+       vertex 1.36872 0.211818 0.489362
+    endloop
+  endfacet
+  facet normal 0.998011 0.0630384 0
+    outer loop
+       vertex 1.36872 0.211818 0.489362
+       vertex 1.36872 0.211818 -0.510638
+       vertex 1.36794 0.2241 -0.510638
+    endloop
+  endfacet
+  facet normal 0.998011 0.0630384 0
+    outer loop
+       vertex 1.36872 0.211818 0.489362
+       vertex 1.36794 0.2241 -0.510638
+       vertex 1.36794 0.2241 0.489362
+    endloop
+  endfacet
+  facet normal 0.99978 0.0209721 0
+    outer loop
+       vertex 1.36794 0.2241 0.489362
+       vertex 1.36794 0.2241 -0.510638
+       vertex 1.36768 0.236466 -0.510638
+    endloop
+  endfacet
+  facet normal 0.99978 0.0209721 0
+    outer loop
+       vertex 1.36794 0.2241 0.489362
+       vertex 1.36768 0.236466 -0.510638
+       vertex 1.36768 0.236466 0.489362
+    endloop
+  endfacet
+  facet normal 0.999776 -0.0211845 0
+    outer loop
+       vertex 1.36768 0.236466 0.489362
+       vertex 1.36768 0.236466 -0.510638
+       vertex 1.36797 0.249918 -0.510638
+    endloop
+  endfacet
+  facet normal 0.999776 -0.0211845 0
+    outer loop
+       vertex 1.36768 0.236466 0.489362
+       vertex 1.36797 0.249918 -0.510638
+       vertex 1.36797 0.249918 0.489362
+    endloop
+  endfacet
+  facet normal 0.997928 -0.0643331 0
+    outer loop
+       vertex 1.36797 0.249918 0.489362
+       vertex 1.36797 0.249918 -0.510638
+       vertex 1.36881 0.263066 -0.510638
+    endloop
+  endfacet
+  facet normal 0.997928 -0.0643331 0
+    outer loop
+       vertex 1.36797 0.249918 0.489362
+       vertex 1.36881 0.263066 -0.510638
+       vertex 1.36881 0.263066 0.489362
+    endloop
+  endfacet
+  facet normal 0.994106 -0.108414 0
+    outer loop
+       vertex 1.36881 0.263066 0.489362
+       vertex 1.36881 0.263066 -0.510638
+       vertex 1.37021 0.275898 -0.510638
+    endloop
+  endfacet
+  facet normal 0.994106 -0.108414 0
+    outer loop
+       vertex 1.36881 0.263066 0.489362
+       vertex 1.37021 0.275898 -0.510638
+       vertex 1.37021 0.275898 0.489362
+    endloop
+  endfacet
+  facet normal 0.988174 -0.153339 0
+    outer loop
+       vertex 1.37021 0.275898 0.489362
+       vertex 1.37021 0.275898 -0.510638
+       vertex 1.37216 0.288406 -0.510638
+    endloop
+  endfacet
+  facet normal 0.988174 -0.153339 0
+    outer loop
+       vertex 1.37021 0.275898 0.489362
+       vertex 1.37216 0.288406 -0.510638
+       vertex 1.37216 0.288406 0.489362
+    endloop
+  endfacet
+  facet normal 0.98 -0.198999 0
+    outer loop
+       vertex 1.37216 0.288406 0.489362
+       vertex 1.37216 0.288406 -0.510638
+       vertex 1.37463 0.300578 -0.510638
+    endloop
+  endfacet
+  facet normal 0.98 -0.198999 0
+    outer loop
+       vertex 1.37216 0.288406 0.489362
+       vertex 1.37463 0.300578 -0.510638
+       vertex 1.37463 0.300578 0.489362
+    endloop
+  endfacet
+  facet normal 0.969457 -0.245261 0
+    outer loop
+       vertex 1.37463 0.300578 0.489362
+       vertex 1.37463 0.300578 -0.510638
+       vertex 1.37762 0.312402 -0.510638
+    endloop
+  endfacet
+  facet normal 0.969457 -0.245261 0
+    outer loop
+       vertex 1.37463 0.300578 0.489362
+       vertex 1.37762 0.312402 -0.510638
+       vertex 1.37762 0.312402 0.489362
+    endloop
+  endfacet
+  facet normal 0.956422 -0.291987 0
+    outer loop
+       vertex 1.37762 0.312402 0.489362
+       vertex 1.37762 0.312402 -0.510638
+       vertex 1.38112 0.32387 -0.510638
+    endloop
+  endfacet
+  facet normal 0.956422 -0.291987 0
+    outer loop
+       vertex 1.37762 0.312402 0.489362
+       vertex 1.38112 0.32387 -0.510638
+       vertex 1.38112 0.32387 0.489362
+    endloop
+  endfacet
+  facet normal 0.940786 -0.339001 0
+    outer loop
+       vertex 1.38112 0.32387 0.489362
+       vertex 1.38112 0.32387 -0.510638
+       vertex 1.38512 0.33497 -0.510638
+    endloop
+  endfacet
+  facet normal 0.940786 -0.339001 0
+    outer loop
+       vertex 1.38112 0.32387 0.489362
+       vertex 1.38512 0.33497 -0.510638
+       vertex 1.38512 0.33497 0.489362
+    endloop
+  endfacet
+  facet normal 0.92245 -0.386116 0
+    outer loop
+       vertex 1.38512 0.33497 0.489362
+       vertex 1.38512 0.33497 -0.510638
+       vertex 1.38961 0.34569 -0.510638
+    endloop
+  endfacet
+  facet normal 0.92245 -0.386116 0
+    outer loop
+       vertex 1.38512 0.33497 0.489362
+       vertex 1.38961 0.34569 -0.510638
+       vertex 1.38961 0.34569 0.489362
+    endloop
+  endfacet
+  facet normal 0.901329 -0.433134 0
+    outer loop
+       vertex 1.38961 0.34569 0.489362
+       vertex 1.38961 0.34569 -0.510638
+       vertex 1.39457 0.356022 -0.510638
+    endloop
+  endfacet
+  facet normal 0.901329 -0.433134 0
+    outer loop
+       vertex 1.38961 0.34569 0.489362
+       vertex 1.39457 0.356022 -0.510638
+       vertex 1.39457 0.356022 0.489362
+    endloop
+  endfacet
+  facet normal 0.877363 -0.479827 0
+    outer loop
+       vertex 1.39457 0.356022 0.489362
+       vertex 1.39457 0.356022 -0.510638
+       vertex 1.4 0.365954 -0.510638
+    endloop
+  endfacet
+  facet normal 0.877363 -0.479827 0
+    outer loop
+       vertex 1.39457 0.356022 0.489362
+       vertex 1.4 0.365954 -0.510638
+       vertex 1.4 0.365954 0.489362
+    endloop
+  endfacet
+  facet normal 0.85052 -0.525943 0
+    outer loop
+       vertex 1.4 0.365954 0.489362
+       vertex 1.4 0.365954 -0.510638
+       vertex 1.40589 0.375474 -0.510638
+    endloop
+  endfacet
+  facet normal 0.85052 -0.525943 0
+    outer loop
+       vertex 1.4 0.365954 0.489362
+       vertex 1.40589 0.375474 -0.510638
+       vertex 1.40589 0.375474 0.489362
+    endloop
+  endfacet
+  facet normal 0.820789 -0.571232 0
+    outer loop
+       vertex 1.40589 0.375474 0.489362
+       vertex 1.40589 0.375474 -0.510638
+       vertex 1.41222 0.384574 -0.510638
+    endloop
+  endfacet
+  facet normal 0.820789 -0.571232 0
+    outer loop
+       vertex 1.40589 0.375474 0.489362
+       vertex 1.41222 0.384574 -0.510638
+       vertex 1.41222 0.384574 0.489362
+    endloop
+  endfacet
+  facet normal 0.788202 -0.615417 0
+    outer loop
+       vertex 1.41222 0.384574 0.489362
+       vertex 1.41222 0.384574 -0.510638
+       vertex 1.41899 0.393241 -0.510638
+    endloop
+  endfacet
+  facet normal 0.788202 -0.615417 0
+    outer loop
+       vertex 1.41222 0.384574 0.489362
+       vertex 1.41899 0.393241 -0.510638
+       vertex 1.41899 0.393241 0.489362
+    endloop
+  endfacet
+  facet normal 0.752814 -0.658234 0
+    outer loop
+       vertex 1.41899 0.393241 0.489362
+       vertex 1.41899 0.393241 -0.510638
+       vertex 1.42618 0.401466 -0.510638
+    endloop
+  endfacet
+  facet normal 0.752814 -0.658234 0
+    outer loop
+       vertex 1.41899 0.393241 0.489362
+       vertex 1.42618 0.401466 -0.510638
+       vertex 1.42618 0.401466 0.489362
+    endloop
+  endfacet
+  facet normal 0.714731 -0.699399 0
+    outer loop
+       vertex 1.42618 0.401466 0.489362
+       vertex 1.42618 0.401466 -0.510638
+       vertex 1.43379 0.409238 -0.510638
+    endloop
+  endfacet
+  facet normal 0.714731 -0.699399 0
+    outer loop
+       vertex 1.42618 0.401466 0.489362
+       vertex 1.43379 0.409238 -0.510638
+       vertex 1.43379 0.409238 0.489362
+    endloop
+  endfacet
+  facet normal 0.674085 -0.738654 0
+    outer loop
+       vertex 1.43379 0.409238 0.489362
+       vertex 1.43379 0.409238 -0.510638
+       vertex 1.44179 0.416545 -0.510638
+    endloop
+  endfacet
+  facet normal 0.674085 -0.738654 0
+    outer loop
+       vertex 1.43379 0.409238 0.489362
+       vertex 1.44179 0.416545 -0.510638
+       vertex 1.44179 0.416545 0.489362
+    endloop
+  endfacet
+  facet normal 0.63105 -0.775742 0
+    outer loop
+       vertex 1.44179 0.416545 0.489362
+       vertex 1.44179 0.416545 -0.510638
+       vertex 1.45019 0.423378 -0.510638
+    endloop
+  endfacet
+  facet normal 0.63105 -0.775742 0
+    outer loop
+       vertex 1.44179 0.416545 0.489362
+       vertex 1.45019 0.423378 -0.510638
+       vertex 1.45019 0.423378 0.489362
+    endloop
+  endfacet
+  facet normal 0.585845 -0.810423 0
+    outer loop
+       vertex 1.45019 0.423378 0.489362
+       vertex 1.45019 0.423378 -0.510638
+       vertex 1.45897 0.429726 -0.510638
+    endloop
+  endfacet
+  facet normal 0.585845 -0.810423 0
+    outer loop
+       vertex 1.45019 0.423378 0.489362
+       vertex 1.45897 0.429726 -0.510638
+       vertex 1.45897 0.429726 0.489362
+    endloop
+  endfacet
+  facet normal 0.538698 -0.842499 0
+    outer loop
+       vertex 1.45897 0.429726 0.489362
+       vertex 1.45897 0.429726 -0.510638
+       vertex 1.46813 0.435578 -0.510638
+    endloop
+  endfacet
+  facet normal 0.538698 -0.842499 0
+    outer loop
+       vertex 1.45897 0.429726 0.489362
+       vertex 1.46813 0.435578 -0.510638
+       vertex 1.46813 0.435578 0.489362
+    endloop
+  endfacet
+  facet normal 0.489887 -0.871786 0
+    outer loop
+       vertex 1.46813 0.435578 0.489362
+       vertex 1.46813 0.435578 -0.510638
+       vertex 1.47764 0.440922 -0.510638
+    endloop
+  endfacet
+  facet normal 0.489887 -0.871786 0
+    outer loop
+       vertex 1.46813 0.435578 0.489362
+       vertex 1.47764 0.440922 -0.510638
+       vertex 1.47764 0.440922 0.489362
+    endloop
+  endfacet
+  facet normal 0.439702 -0.898144 0
+    outer loop
+       vertex 1.47764 0.440922 0.489362
+       vertex 1.47764 0.440922 -0.510638
+       vertex 1.4875 0.44575 -0.510638
+    endloop
+  endfacet
+  facet normal 0.439702 -0.898144 0
+    outer loop
+       vertex 1.47764 0.440922 0.489362
+       vertex 1.4875 0.44575 -0.510638
+       vertex 1.4875 0.44575 0.489362
+    endloop
+  endfacet
+  facet normal 0.388441 -0.921474 0
+    outer loop
+       vertex 1.4875 0.44575 0.489362
+       vertex 1.4875 0.44575 -0.510638
+       vertex 1.4977 0.45005 -0.510638
+    endloop
+  endfacet
+  facet normal 0.388441 -0.921474 0
+    outer loop
+       vertex 1.4875 0.44575 0.489362
+       vertex 1.4977 0.45005 -0.510638
+       vertex 1.4977 0.45005 0.489362
+    endloop
+  endfacet
+  facet normal 0.336419 -0.941712 0
+    outer loop
+       vertex 1.4977 0.45005 0.489362
+       vertex 1.4977 0.45005 -0.510638
+       vertex 1.50823 0.45381 -0.510638
+    endloop
+  endfacet
+  facet normal 0.336419 -0.941712 0
+    outer loop
+       vertex 1.4977 0.45005 0.489362
+       vertex 1.50823 0.45381 -0.510638
+       vertex 1.50823 0.45381 0.489362
+    endloop
+  endfacet
+  facet normal 0.283945 -0.95884 0
+    outer loop
+       vertex 1.50823 0.45381 0.489362
+       vertex 1.50823 0.45381 -0.510638
+       vertex 1.51907 0.457022 -0.510638
+    endloop
+  endfacet
+  facet normal 0.283945 -0.95884 0
+    outer loop
+       vertex 1.50823 0.45381 0.489362
+       vertex 1.51907 0.457022 -0.510638
+       vertex 1.51907 0.457022 0.489362
+    endloop
+  endfacet
+  facet normal 0.231324 -0.972877 0
+    outer loop
+       vertex 1.51907 0.457022 0.489362
+       vertex 1.51907 0.457022 -0.510638
+       vertex 1.53022 0.459674 -0.510638
+    endloop
+  endfacet
+  facet normal 0.231324 -0.972877 0
+    outer loop
+       vertex 1.51907 0.457022 0.489362
+       vertex 1.53022 0.459674 -0.510638
+       vertex 1.53022 0.459674 0.489362
+    endloop
+  endfacet
+  facet normal 0.178845 -0.983877 0
+    outer loop
+       vertex 1.53022 0.459674 0.489362
+       vertex 1.53022 0.459674 -0.510638
+       vertex 1.54167 0.461754 -0.510638
+    endloop
+  endfacet
+  facet normal 0.178845 -0.983877 0
+    outer loop
+       vertex 1.53022 0.459674 0.489362
+       vertex 1.54167 0.461754 -0.510638
+       vertex 1.54167 0.461754 0.489362
+    endloop
+  endfacet
+  facet normal 0.126777 -0.991931 0
+    outer loop
+       vertex 1.54167 0.461754 0.489362
+       vertex 1.54167 0.461754 -0.510638
+       vertex 1.5534 0.463254 -0.510638
+    endloop
+  endfacet
+  facet normal 0.126777 -0.991931 0
+    outer loop
+       vertex 1.54167 0.461754 0.489362
+       vertex 1.5534 0.463254 -0.510638
+       vertex 1.5534 0.463254 0.489362
+    endloop
+  endfacet
+  facet normal 0.075368 -0.997156 0
+    outer loop
+       vertex 1.5534 0.463254 0.489362
+       vertex 1.5534 0.463254 -0.510638
+       vertex 1.56541 0.464162 -0.510638
+    endloop
+  endfacet
+  facet normal 0.075368 -0.997156 0
+    outer loop
+       vertex 1.5534 0.463254 0.489362
+       vertex 1.56541 0.464162 -0.510638
+       vertex 1.56541 0.464162 0.489362
+    endloop
+  endfacet
+  facet normal 0.0248367 -0.999692 0
+    outer loop
+       vertex 1.56541 0.464162 0.489362
+       vertex 1.56541 0.464162 -0.510638
+       vertex 1.57768 0.464466 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0248367 -0.999692 0
+    outer loop
+       vertex 1.56541 0.464162 0.489362
+       vertex 1.57768 0.464466 -0.510638
+       vertex 1.57768 0.464466 0.489362
+    endloop
+  endfacet
+  facet normal -0.022963 -0.999736 -0
+    outer loop
+       vertex 1.57768 0.464466 0.489362
+       vertex 1.57768 0.464466 -0.510638
+       vertex 1.58944 0.464196 -0.510638
+    endloop
+  endfacet
+  facet normal -0.022963 -0.999736 0
+    outer loop
+       vertex 1.57768 0.464466 0.489362
+       vertex 1.58944 0.464196 -0.510638
+       vertex 1.58944 0.464196 0.489362
+    endloop
+  endfacet
+  facet normal -0.0705857 -0.997506 -0
+    outer loop
+       vertex 1.58944 0.464196 0.489362
+       vertex 1.58944 0.464196 -0.510638
+       vertex 1.6009 0.463385 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0705857 -0.997506 0
+    outer loop
+       vertex 1.58944 0.464196 0.489362
+       vertex 1.6009 0.463385 -0.510638
+       vertex 1.6009 0.463385 0.489362
+    endloop
+  endfacet
+  facet normal -0.120338 -0.992733 -0
+    outer loop
+       vertex 1.6009 0.463385 0.489362
+       vertex 1.6009 0.463385 -0.510638
+       vertex 1.61206 0.462033 -0.510638
+    endloop
+  endfacet
+  facet normal -0.120338 -0.992733 0
+    outer loop
+       vertex 1.6009 0.463385 0.489362
+       vertex 1.61206 0.462033 -0.510638
+       vertex 1.61206 0.462033 0.489362
+    endloop
+  endfacet
+  facet normal -0.172072 -0.985084 -0
+    outer loop
+       vertex 1.61206 0.462033 0.489362
+       vertex 1.61206 0.462033 -0.510638
+       vertex 1.62291 0.460137 -0.510638
+    endloop
+  endfacet
+  facet normal -0.172072 -0.985084 0
+    outer loop
+       vertex 1.61206 0.462033 0.489362
+       vertex 1.62291 0.460137 -0.510638
+       vertex 1.62291 0.460137 0.489362
+    endloop
+  endfacet
+  facet normal -0.225543 -0.974233 -0
+    outer loop
+       vertex 1.62291 0.460137 0.489362
+       vertex 1.62291 0.460137 -0.510638
+       vertex 1.63345 0.457698 -0.510638
+    endloop
+  endfacet
+  facet normal -0.225543 -0.974233 0
+    outer loop
+       vertex 1.62291 0.460137 0.489362
+       vertex 1.63345 0.457698 -0.510638
+       vertex 1.63345 0.457698 0.489362
+    endloop
+  endfacet
+  facet normal -0.28043 -0.959875 -0
+    outer loop
+       vertex 1.63345 0.457698 0.489362
+       vertex 1.63345 0.457698 -0.510638
+       vertex 1.64366 0.454715 -0.510638
+    endloop
+  endfacet
+  facet normal -0.28043 -0.959875 0
+    outer loop
+       vertex 1.63345 0.457698 0.489362
+       vertex 1.64366 0.454715 -0.510638
+       vertex 1.64366 0.454715 0.489362
+    endloop
+  endfacet
+  facet normal -0.336313 -0.94175 -0
+    outer loop
+       vertex 1.64366 0.454715 0.489362
+       vertex 1.64366 0.454715 -0.510638
+       vertex 1.65354 0.451186 -0.510638
+    endloop
+  endfacet
+  facet normal -0.336313 -0.94175 0
+    outer loop
+       vertex 1.64366 0.454715 0.489362
+       vertex 1.65354 0.451186 -0.510638
+       vertex 1.65354 0.451186 0.489362
+    endloop
+  endfacet
+  facet normal -0.392699 -0.919667 -0
+    outer loop
+       vertex 1.65354 0.451186 0.489362
+       vertex 1.65354 0.451186 -0.510638
+       vertex 1.66308 0.447111 -0.510638
+    endloop
+  endfacet
+  facet normal -0.392699 -0.919667 0
+    outer loop
+       vertex 1.65354 0.451186 0.489362
+       vertex 1.66308 0.447111 -0.510638
+       vertex 1.66308 0.447111 0.489362
+    endloop
+  endfacet
+  facet normal -0.44901 -0.893527 -0
+    outer loop
+       vertex 1.66308 0.447111 0.489362
+       vertex 1.66308 0.447111 -0.510638
+       vertex 1.67228 0.442488 -0.510638
+    endloop
+  endfacet
+  facet normal -0.44901 -0.893527 0
+    outer loop
+       vertex 1.66308 0.447111 0.489362
+       vertex 1.67228 0.442488 -0.510638
+       vertex 1.67228 0.442488 0.489362
+    endloop
+  endfacet
+  facet normal -0.504622 -0.86334 -0
+    outer loop
+       vertex 1.67228 0.442488 0.489362
+       vertex 1.67228 0.442488 -0.510638
+       vertex 1.68113 0.437318 -0.510638
+    endloop
+  endfacet
+  facet normal -0.504622 -0.86334 0
+    outer loop
+       vertex 1.67228 0.442488 0.489362
+       vertex 1.68113 0.437318 -0.510638
+       vertex 1.68113 0.437318 0.489362
+    endloop
+  endfacet
+  facet normal -0.558893 -0.82924 -0
+    outer loop
+       vertex 1.68113 0.437318 0.489362
+       vertex 1.68113 0.437318 -0.510638
+       vertex 1.68961 0.431599 -0.510638
+    endloop
+  endfacet
+  facet normal -0.558893 -0.82924 0
+    outer loop
+       vertex 1.68113 0.437318 0.489362
+       vertex 1.68961 0.431599 -0.510638
+       vertex 1.68961 0.431599 0.489362
+    endloop
+  endfacet
+  facet normal -0.611186 -0.791487 -0
+    outer loop
+       vertex 1.68961 0.431599 0.489362
+       vertex 1.68961 0.431599 -0.510638
+       vertex 1.69773 0.42533 -0.510638
+    endloop
+  endfacet
+  facet normal -0.611186 -0.791487 0
+    outer loop
+       vertex 1.68961 0.431599 0.489362
+       vertex 1.69773 0.42533 -0.510638
+       vertex 1.69773 0.42533 0.489362
+    endloop
+  endfacet
+  facet normal -0.660913 -0.750462 -0
+    outer loop
+       vertex 1.69773 0.42533 0.489362
+       vertex 1.69773 0.42533 -0.510638
+       vertex 1.70547 0.418511 -0.510638
+    endloop
+  endfacet
+  facet normal -0.660913 -0.750462 0
+    outer loop
+       vertex 1.69773 0.42533 0.489362
+       vertex 1.70547 0.418511 -0.510638
+       vertex 1.70547 0.418511 0.489362
+    endloop
+  endfacet
+  facet normal -0.707569 -0.706645 -0
+    outer loop
+       vertex 1.70547 0.418511 0.489362
+       vertex 1.70547 0.418511 -0.510638
+       vertex 1.71283 0.41114 -0.510638
+    endloop
+  endfacet
+  facet normal -0.707569 -0.706645 0
+    outer loop
+       vertex 1.70547 0.418511 0.489362
+       vertex 1.71283 0.41114 -0.510638
+       vertex 1.71283 0.41114 0.489362
+    endloop
+  endfacet
+  facet normal -0.750741 -0.660596 -0
+    outer loop
+       vertex 1.71283 0.41114 0.489362
+       vertex 1.71283 0.41114 -0.510638
+       vertex 1.71981 0.403216 -0.510638
+    endloop
+  endfacet
+  facet normal -0.750741 -0.660596 0
+    outer loop
+       vertex 1.71283 0.41114 0.489362
+       vertex 1.71981 0.403216 -0.510638
+       vertex 1.71981 0.403216 0.489362
+    endloop
+  endfacet
+  facet normal -0.790147 -0.612917 -0
+    outer loop
+       vertex 1.71981 0.403216 0.489362
+       vertex 1.71981 0.403216 -0.510638
+       vertex 1.72638 0.39474 -0.510638
+    endloop
+  endfacet
+  facet normal -0.790147 -0.612917 0
+    outer loop
+       vertex 1.71981 0.403216 0.489362
+       vertex 1.72638 0.39474 -0.510638
+       vertex 1.72638 0.39474 0.489362
+    endloop
+  endfacet
+  facet normal -0.825634 -0.564206 -0
+    outer loop
+       vertex 1.72638 0.39474 0.489362
+       vertex 1.72638 0.39474 -0.510638
+       vertex 1.73255 0.385709 -0.510638
+    endloop
+  endfacet
+  facet normal -0.825634 -0.564206 0
+    outer loop
+       vertex 1.72638 0.39474 0.489362
+       vertex 1.73255 0.385709 -0.510638
+       vertex 1.73255 0.385709 0.489362
+    endloop
+  endfacet
+  facet normal -0.857162 -0.515047 -0
+    outer loop
+       vertex 1.73255 0.385709 0.489362
+       vertex 1.73255 0.385709 -0.510638
+       vertex 1.73831 0.376122 -0.510638
+    endloop
+  endfacet
+  facet normal -0.857162 -0.515047 0
+    outer loop
+       vertex 1.73255 0.385709 0.489362
+       vertex 1.73831 0.376122 -0.510638
+       vertex 1.73831 0.376122 0.489362
+    endloop
+  endfacet
+  facet normal -0.884795 -0.465981 -0
+    outer loop
+       vertex 1.73831 0.376122 0.489362
+       vertex 1.73831 0.376122 -0.510638
+       vertex 1.74366 0.36598 -0.510638
+    endloop
+  endfacet
+  facet normal -0.884795 -0.465981 0
+    outer loop
+       vertex 1.73831 0.376122 0.489362
+       vertex 1.74366 0.36598 -0.510638
+       vertex 1.74366 0.36598 0.489362
+    endloop
+  endfacet
+  facet normal -0.908686 -0.417479 -0
+    outer loop
+       vertex 1.74366 0.36598 0.489362
+       vertex 1.74366 0.36598 -0.510638
+       vertex 1.74857 0.355281 -0.510638
+    endloop
+  endfacet
+  facet normal -0.908686 -0.417479 0
+    outer loop
+       vertex 1.74366 0.36598 0.489362
+       vertex 1.74857 0.355281 -0.510638
+       vertex 1.74857 0.355281 0.489362
+    endloop
+  endfacet
+  facet normal -0.929061 -0.369926 -0
+    outer loop
+       vertex 1.74857 0.355281 0.489362
+       vertex 1.74857 0.355281 -0.510638
+       vertex 1.75305 0.344024 -0.510638
+    endloop
+  endfacet
+  facet normal -0.929061 -0.369926 0
+    outer loop
+       vertex 1.74857 0.355281 0.489362
+       vertex 1.75305 0.344024 -0.510638
+       vertex 1.75305 0.344024 0.489362
+    endloop
+  endfacet
+  facet normal -0.946181 -0.323637 -0
+    outer loop
+       vertex 1.75305 0.344024 0.489362
+       vertex 1.75305 0.344024 -0.510638
+       vertex 1.75709 0.332209 -0.510638
+    endloop
+  endfacet
+  facet normal -0.946181 -0.323637 0
+    outer loop
+       vertex 1.75305 0.344024 0.489362
+       vertex 1.75709 0.332209 -0.510638
+       vertex 1.75709 0.332209 0.489362
+    endloop
+  endfacet
+  facet normal -0.960332 -0.27886 -0
+    outer loop
+       vertex 1.75709 0.332209 0.489362
+       vertex 1.75709 0.332209 -0.510638
+       vertex 1.76069 0.319834 -0.510638
+    endloop
+  endfacet
+  facet normal -0.960332 -0.27886 0
+    outer loop
+       vertex 1.75709 0.332209 0.489362
+       vertex 1.76069 0.319834 -0.510638
+       vertex 1.76069 0.319834 0.489362
+    endloop
+  endfacet
+  facet normal -0.971812 -0.235755 -0
+    outer loop
+       vertex 1.76069 0.319834 0.489362
+       vertex 1.76069 0.319834 -0.510638
+       vertex 1.76383 0.306898 -0.510638
+    endloop
+  endfacet
+  facet normal -0.971812 -0.235755 0
+    outer loop
+       vertex 1.76069 0.319834 0.489362
+       vertex 1.76383 0.306898 -0.510638
+       vertex 1.76383 0.306898 0.489362
+    endloop
+  endfacet
+  facet normal -0.980914 -0.194442 -0
+    outer loop
+       vertex 1.76383 0.306898 0.489362
+       vertex 1.76383 0.306898 -0.510638
+       vertex 1.7665 0.293402 -0.510638
+    endloop
+  endfacet
+  facet normal -0.980914 -0.194442 0
+    outer loop
+       vertex 1.76383 0.306898 0.489362
+       vertex 1.7665 0.293402 -0.510638
+       vertex 1.7665 0.293402 0.489362
+    endloop
+  endfacet
+  facet normal -0.987918 -0.154978 -0
+    outer loop
+       vertex 1.7665 0.293402 0.489362
+       vertex 1.7665 0.293402 -0.510638
+       vertex 1.76871 0.279343 -0.510638
+    endloop
+  endfacet
+  facet normal -0.987918 -0.154978 0
+    outer loop
+       vertex 1.7665 0.293402 0.489362
+       vertex 1.76871 0.279343 -0.510638
+       vertex 1.76871 0.279343 0.489362
+    endloop
+  endfacet
+  facet normal -0.993089 -0.117364 -0
+    outer loop
+       vertex 1.76871 0.279343 0.489362
+       vertex 1.76871 0.279343 -0.510638
+       vertex 1.77043 0.26472 -0.510638
+    endloop
+  endfacet
+  facet normal -0.993089 -0.117364 0
+    outer loop
+       vertex 1.76871 0.279343 0.489362
+       vertex 1.77043 0.26472 -0.510638
+       vertex 1.77043 0.26472 0.489362
+    endloop
+  endfacet
+  facet normal -0.996664 -0.0816088 -0
+    outer loop
+       vertex 1.77043 0.26472 0.489362
+       vertex 1.77043 0.26472 -0.510638
+       vertex 1.77168 0.249534 -0.510638
+    endloop
+  endfacet
+  facet normal -0.996664 -0.0816088 0
+    outer loop
+       vertex 1.77043 0.26472 0.489362
+       vertex 1.77168 0.249534 -0.510638
+       vertex 1.77168 0.249534 0.489362
+    endloop
+  endfacet
+  facet normal -0.998864 -0.0476566 -0
+    outer loop
+       vertex 1.77168 0.249534 0.489362
+       vertex 1.77168 0.249534 -0.510638
+       vertex 1.77243 0.233783 -0.510638
+    endloop
+  endfacet
+  facet normal -0.998864 -0.0476566 0
+    outer loop
+       vertex 1.77168 0.249534 0.489362
+       vertex 1.77243 0.233783 -0.510638
+       vertex 1.77243 0.233783 0.489362
+    endloop
+  endfacet
+  facet normal -0.999881 -0.0154502 -0
+    outer loop
+       vertex 1.77243 0.233783 0.489362
+       vertex 1.77243 0.233783 -0.510638
+       vertex 1.77268 0.217466 -0.510638
+    endloop
+  endfacet
+  facet normal -0.999881 -0.0154502 0
+    outer loop
+       vertex 1.77243 0.233783 0.489362
+       vertex 1.77268 0.217466 -0.510638
+       vertex 1.77268 0.217466 0.489362
+    endloop
+  endfacet
+  facet normal 0 1 0
+    outer loop
+       vertex 1.77268 0.217466 0.489362
+       vertex 1.77268 0.217466 -0.510638
+       vertex 1.45668 0.217466 -0.510638
+    endloop
+  endfacet
+  facet normal 0 1 0
+    outer loop
+       vertex 1.77268 0.217466 0.489362
+       vertex 1.45668 0.217466 -0.510638
+       vertex 1.45668 0.217466 0.489362
+    endloop
+  endfacet
+  facet normal -0.985203 -0.171394 -0
+    outer loop
+       vertex 1.45668 0.217466 0.489362
+       vertex 1.45668 0.217466 -0.510638
+       vertex 1.45821 0.20871 -0.510638
+    endloop
+  endfacet
+  facet normal -0.985203 -0.171394 0
+    outer loop
+       vertex 1.45668 0.217466 0.489362
+       vertex 1.45821 0.20871 -0.510638
+       vertex 1.45821 0.20871 0.489362
+    endloop
+  endfacet
+  facet normal -0.978862 -0.204522 -0
+    outer loop
+       vertex 1.45821 0.20871 0.489362
+       vertex 1.45821 0.20871 -0.510638
+       vertex 1.45998 0.200241 -0.510638
+    endloop
+  endfacet
+  facet normal -0.978862 -0.204522 0
+    outer loop
+       vertex 1.45821 0.20871 0.489362
+       vertex 1.45998 0.200241 -0.510638
+       vertex 1.45998 0.200241 0.489362
+    endloop
+  endfacet
+  facet normal -0.970976 -0.239175 -0
+    outer loop
+       vertex 1.45998 0.200241 0.489362
+       vertex 1.45998 0.200241 -0.510638
+       vertex 1.46199 0.192059 -0.510638
+    endloop
+  endfacet
+  facet normal -0.970976 -0.239175 0
+    outer loop
+       vertex 1.45998 0.200241 0.489362
+       vertex 1.46199 0.192059 -0.510638
+       vertex 1.46199 0.192059 0.489362
+    endloop
+  endfacet
+  facet normal -0.961345 -0.275346 -0
+    outer loop
+       vertex 1.46199 0.192059 0.489362
+       vertex 1.46199 0.192059 -0.510638
+       vertex 1.46425 0.184167 -0.510638
+    endloop
+  endfacet
+  facet normal -0.961345 -0.275346 0
+    outer loop
+       vertex 1.46199 0.192059 0.489362
+       vertex 1.46425 0.184167 -0.510638
+       vertex 1.46425 0.184167 0.489362
+    endloop
+  endfacet
+  facet normal -0.949759 -0.312981 -0
+    outer loop
+       vertex 1.46425 0.184167 0.489362
+       vertex 1.46425 0.184167 -0.510638
+       vertex 1.46676 0.176564 -0.510638
+    endloop
+  endfacet
+  facet normal -0.949759 -0.312981 0
+    outer loop
+       vertex 1.46425 0.184167 0.489362
+       vertex 1.46676 0.176564 -0.510638
+       vertex 1.46676 0.176564 0.489362
+    endloop
+  endfacet
+  facet normal -0.936015 -0.351961 -0
+    outer loop
+       vertex 1.46676 0.176564 0.489362
+       vertex 1.46676 0.176564 -0.510638
+       vertex 1.46951 0.16925 -0.510638
+    endloop
+  endfacet
+  facet normal -0.936015 -0.351961 0
+    outer loop
+       vertex 1.46676 0.176564 0.489362
+       vertex 1.46951 0.16925 -0.510638
+       vertex 1.46951 0.16925 0.489362
+    endloop
+  endfacet
+  facet normal -0.919889 -0.392178 -0
+    outer loop
+       vertex 1.46951 0.16925 0.489362
+       vertex 1.46951 0.16925 -0.510638
+       vertex 1.4725 0.162228 -0.510638
+    endloop
+  endfacet
+  facet normal -0.919889 -0.392178 0
+    outer loop
+       vertex 1.46951 0.16925 0.489362
+       vertex 1.4725 0.162228 -0.510638
+       vertex 1.4725 0.162228 0.489362
+    endloop
+  endfacet
+  facet normal -0.901183 -0.433439 -0
+    outer loop
+       vertex 1.4725 0.162228 0.489362
+       vertex 1.4725 0.162228 -0.510638
+       vertex 1.47574 0.155497 -0.510638
+    endloop
+  endfacet
+  facet normal -0.901183 -0.433439 0
+    outer loop
+       vertex 1.4725 0.162228 0.489362
+       vertex 1.47574 0.155497 -0.510638
+       vertex 1.47574 0.155497 0.489362
+    endloop
+  endfacet
+  facet normal -0.879713 -0.475506 -0
+    outer loop
+       vertex 1.47574 0.155497 0.489362
+       vertex 1.47574 0.155497 -0.510638
+       vertex 1.47922 0.149057 -0.510638
+    endloop
+  endfacet
+  facet normal -0.879713 -0.475506 0
+    outer loop
+       vertex 1.47574 0.155497 0.489362
+       vertex 1.47922 0.149057 -0.510638
+       vertex 1.47922 0.149057 0.489362
+    endloop
+  endfacet
+  facet normal -0.855316 -0.518106 -0
+    outer loop
+       vertex 1.47922 0.149057 0.489362
+       vertex 1.47922 0.149057 -0.510638
+       vertex 1.48294 0.142911 -0.510638
+    endloop
+  endfacet
+  facet normal -0.855316 -0.518106 0
+    outer loop
+       vertex 1.47922 0.149057 0.489362
+       vertex 1.48294 0.142911 -0.510638
+       vertex 1.48294 0.142911 0.489362
+    endloop
+  endfacet
+  facet normal -0.827892 -0.560888 -0
+    outer loop
+       vertex 1.48294 0.142911 0.489362
+       vertex 1.48294 0.142911 -0.510638
+       vertex 1.48691 0.137058 -0.510638
+    endloop
+  endfacet
+  facet normal -0.827892 -0.560888 0
+    outer loop
+       vertex 1.48294 0.142911 0.489362
+       vertex 1.48691 0.137058 -0.510638
+       vertex 1.48691 0.137058 0.489362
+    endloop
+  endfacet
+  facet normal -0.797387 -0.603468 -0
+    outer loop
+       vertex 1.48691 0.137058 0.489362
+       vertex 1.48691 0.137058 -0.510638
+       vertex 1.49111 0.131498 -0.510638
+    endloop
+  endfacet
+  facet normal -0.797387 -0.603468 0
+    outer loop
+       vertex 1.48691 0.137058 0.489362
+       vertex 1.49111 0.131498 -0.510638
+       vertex 1.49111 0.131498 0.489362
+    endloop
+  endfacet
+  facet normal -0.763822 -0.645427 -0
+    outer loop
+       vertex 1.49111 0.131498 0.489362
+       vertex 1.49111 0.131498 -0.510638
+       vertex 1.49556 0.126234 -0.510638
+    endloop
+  endfacet
+  facet normal -0.763822 -0.645427 0
+    outer loop
+       vertex 1.49111 0.131498 0.489362
+       vertex 1.49556 0.126234 -0.510638
+       vertex 1.49556 0.126234 0.489362
+    endloop
+  endfacet
+  facet normal -0.727283 -0.686338 -0
+    outer loop
+       vertex 1.49556 0.126234 0.489362
+       vertex 1.49556 0.126234 -0.510638
+       vertex 1.50025 0.121265 -0.510638
+    endloop
+  endfacet
+  facet normal -0.727283 -0.686338 0
+    outer loop
+       vertex 1.49556 0.126234 0.489362
+       vertex 1.50025 0.121265 -0.510638
+       vertex 1.50025 0.121265 0.489362
+    endloop
+  endfacet
+  facet normal -0.687961 -0.725748 -0
+    outer loop
+       vertex 1.50025 0.121265 0.489362
+       vertex 1.50025 0.121265 -0.510638
+       vertex 1.50518 0.116591 -0.510638
+    endloop
+  endfacet
+  facet normal -0.687961 -0.725748 0
+    outer loop
+       vertex 1.50025 0.121265 0.489362
+       vertex 1.50518 0.116591 -0.510638
+       vertex 1.50518 0.116591 0.489362
+    endloop
+  endfacet
+  facet normal -0.646118 -0.763237 -0
+    outer loop
+       vertex 1.50518 0.116591 0.489362
+       vertex 1.50518 0.116591 -0.510638
+       vertex 1.51035 0.112215 -0.510638
+    endloop
+  endfacet
+  facet normal -0.646118 -0.763237 0
+    outer loop
+       vertex 1.50518 0.116591 0.489362
+       vertex 1.51035 0.112215 -0.510638
+       vertex 1.51035 0.112215 0.489362
+    endloop
+  endfacet
+  facet normal -0.602087 -0.798431 -0
+    outer loop
+       vertex 1.51035 0.112215 0.489362
+       vertex 1.51035 0.112215 -0.510638
+       vertex 1.51576 0.108136 -0.510638
+    endloop
+  endfacet
+  facet normal -0.602087 -0.798431 0
+    outer loop
+       vertex 1.51035 0.112215 0.489362
+       vertex 1.51576 0.108136 -0.510638
+       vertex 1.51576 0.108136 0.489362
+    endloop
+  endfacet
+  facet normal -0.556276 -0.830998 -0
+    outer loop
+       vertex 1.51576 0.108136 0.489362
+       vertex 1.51576 0.108136 -0.510638
+       vertex 1.52141 0.104354 -0.510638
+    endloop
+  endfacet
+  facet normal -0.556276 -0.830998 0
+    outer loop
+       vertex 1.51576 0.108136 0.489362
+       vertex 1.52141 0.104354 -0.510638
+       vertex 1.52141 0.104354 0.489362
+    endloop
+  endfacet
+  facet normal -0.509132 -0.860688 -0
+    outer loop
+       vertex 1.52141 0.104354 0.489362
+       vertex 1.52141 0.104354 -0.510638
+       vertex 1.5273 0.100872 -0.510638
+    endloop
+  endfacet
+  facet normal -0.509132 -0.860688 0
+    outer loop
+       vertex 1.52141 0.104354 0.489362
+       vertex 1.5273 0.100872 -0.510638
+       vertex 1.5273 0.100872 0.489362
+    endloop
+  endfacet
+  facet normal -0.461123 -0.887336 -0
+    outer loop
+       vertex 1.5273 0.100872 0.489362
+       vertex 1.5273 0.100872 -0.510638
+       vertex 1.53342 0.0976886 -0.510638
+    endloop
+  endfacet
+  facet normal -0.461123 -0.887336 0
+    outer loop
+       vertex 1.5273 0.100872 0.489362
+       vertex 1.53342 0.0976886 -0.510638
+       vertex 1.53342 0.0976886 0.489362
+    endloop
+  endfacet
+  facet normal -0.412714 -0.910861 -0
+    outer loop
+       vertex 1.53342 0.0976886 0.489362
+       vertex 1.53342 0.0976886 -0.510638
+       vertex 1.53979 0.0948054 -0.510638
+    endloop
+  endfacet
+  facet normal -0.412714 -0.910861 0
+    outer loop
+       vertex 1.53342 0.0976886 0.489362
+       vertex 1.53979 0.0948054 -0.510638
+       vertex 1.53979 0.0948054 0.489362
+    endloop
+  endfacet
+  facet normal -0.364363 -0.931257 -0
+    outer loop
+       vertex 1.53979 0.0948054 0.489362
+       vertex 1.53979 0.0948054 -0.510638
+       vertex 1.54639 0.0922228 -0.510638
+    endloop
+  endfacet
+  facet normal -0.364363 -0.931257 0
+    outer loop
+       vertex 1.53979 0.0948054 0.489362
+       vertex 1.54639 0.0922228 -0.510638
+       vertex 1.54639 0.0922228 0.489362
+    endloop
+  endfacet
+  facet normal -0.316485 -0.948598 -0
+    outer loop
+       vertex 1.54639 0.0922228 0.489362
+       vertex 1.54639 0.0922228 -0.510638
+       vertex 1.55322 0.0899416 -0.510638
+    endloop
+  endfacet
+  facet normal -0.316485 -0.948598 0
+    outer loop
+       vertex 1.54639 0.0922228 0.489362
+       vertex 1.55322 0.0899416 -0.510638
+       vertex 1.55322 0.0899416 0.489362
+    endloop
+  endfacet
+  facet normal -0.269445 -0.963016 -0
+    outer loop
+       vertex 1.55322 0.0899416 0.489362
+       vertex 1.55322 0.0899416 -0.510638
+       vertex 1.5603 0.0879624 -0.510638
+    endloop
+  endfacet
+  facet normal -0.269445 -0.963016 0
+    outer loop
+       vertex 1.55322 0.0899416 0.489362
+       vertex 1.5603 0.0879624 -0.510638
+       vertex 1.5603 0.0879624 0.489362
+    endloop
+  endfacet
+  facet normal -0.223549 -0.974693 -0
+    outer loop
+       vertex 1.5603 0.0879624 0.489362
+       vertex 1.5603 0.0879624 -0.510638
+       vertex 1.56761 0.0862858 -0.510638
+    endloop
+  endfacet
+  facet normal -0.223549 -0.974693 0
+    outer loop
+       vertex 1.5603 0.0879624 0.489362
+       vertex 1.56761 0.0862858 -0.510638
+       vertex 1.56761 0.0862858 0.489362
+    endloop
+  endfacet
+  facet normal -0.179052 -0.98384 -0
+    outer loop
+       vertex 1.56761 0.0862858 0.489362
+       vertex 1.56761 0.0862858 -0.510638
+       vertex 1.57515 0.0849126 -0.510638
+    endloop
+  endfacet
+  facet normal -0.179052 -0.98384 0
+    outer loop
+       vertex 1.56761 0.0862858 0.489362
+       vertex 1.57515 0.0849126 -0.510638
+       vertex 1.57515 0.0849126 0.489362
+    endloop
+  endfacet
+  facet normal -0.136143 -0.990689 -0
+    outer loop
+       vertex 1.57515 0.0849126 0.489362
+       vertex 1.57515 0.0849126 -0.510638
+       vertex 1.58293 0.0838434 -0.510638
+    endloop
+  endfacet
+  facet normal -0.136143 -0.990689 0
+    outer loop
+       vertex 1.57515 0.0849126 0.489362
+       vertex 1.58293 0.0838434 -0.510638
+       vertex 1.58293 0.0838434 0.489362
+    endloop
+  endfacet
+  facet normal -0.0949564 -0.995481 -0
+    outer loop
+       vertex 1.58293 0.0838434 0.489362
+       vertex 1.58293 0.0838434 -0.510638
+       vertex 1.59095 0.0830788 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0949564 -0.995481 0
+    outer loop
+       vertex 1.58293 0.0838434 0.489362
+       vertex 1.59095 0.0830788 -0.510638
+       vertex 1.59095 0.0830788 0.489362
+    endloop
+  endfacet
+  facet normal -0.0555807 -0.998454 -0
+    outer loop
+       vertex 1.59095 0.0830788 0.489362
+       vertex 1.59095 0.0830788 -0.510638
+       vertex 1.5992 0.0826196 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0555807 -0.998454 0
+    outer loop
+       vertex 1.59095 0.0830788 0.489362
+       vertex 1.5992 0.0826196 -0.510638
+       vertex 1.5992 0.0826196 0.489362
+    endloop
+  endfacet
+  facet normal -0.0180586 -0.999837 -0
+    outer loop
+       vertex 1.5992 0.0826196 0.489362
+       vertex 1.5992 0.0826196 -0.510638
+       vertex 1.60768 0.0824664 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0180586 -0.999837 0
+    outer loop
+       vertex 1.5992 0.0826196 0.489362
+       vertex 1.60768 0.0824664 -0.510638
+       vertex 1.60768 0.0824664 0.489362
+    endloop
+  endfacet
+  facet normal 0.0123232 -0.999924 0
+    outer loop
+       vertex 1.60768 0.0824664 0.489362
+       vertex 1.60768 0.0824664 -0.510638
+       vertex 1.61307 0.0825328 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0123232 -0.999924 0
+    outer loop
+       vertex 1.60768 0.0824664 0.489362
+       vertex 1.61307 0.0825328 -0.510638
+       vertex 1.61307 0.0825328 0.489362
+    endloop
+  endfacet
+  facet normal 0.0369219 -0.999318 0
+    outer loop
+       vertex 1.61307 0.0825328 0.489362
+       vertex 1.61307 0.0825328 -0.510638
+       vertex 1.61844 0.0827313 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0369219 -0.999318 0
+    outer loop
+       vertex 1.61307 0.0825328 0.489362
+       vertex 1.61844 0.0827313 -0.510638
+       vertex 1.61844 0.0827313 0.489362
+    endloop
+  endfacet
+  facet normal 0.061368 -0.998115 0
+    outer loop
+       vertex 1.61844 0.0827313 0.489362
+       vertex 1.61844 0.0827313 -0.510638
+       vertex 1.6238 0.0830604 -0.510638
+    endloop
+  endfacet
+  facet normal 0.061368 -0.998115 0
+    outer loop
+       vertex 1.61844 0.0827313 0.489362
+       vertex 1.6238 0.0830604 -0.510638
+       vertex 1.6238 0.0830604 0.489362
+    endloop
+  endfacet
+  facet normal 0.0856083 -0.996329 0
+    outer loop
+       vertex 1.6238 0.0830604 0.489362
+       vertex 1.6238 0.0830604 -0.510638
+       vertex 1.62913 0.0835188 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0856083 -0.996329 0
+    outer loop
+       vertex 1.6238 0.0830604 0.489362
+       vertex 1.62913 0.0835188 -0.510638
+       vertex 1.62913 0.0835188 0.489362
+    endloop
+  endfacet
+  facet normal 0.10959 -0.993977 0
+    outer loop
+       vertex 1.62913 0.0835188 0.489362
+       vertex 1.62913 0.0835188 -0.510638
+       vertex 1.63445 0.0841053 -0.510638
+    endloop
+  endfacet
+  facet normal 0.10959 -0.993977 0
+    outer loop
+       vertex 1.62913 0.0835188 0.489362
+       vertex 1.63445 0.0841053 -0.510638
+       vertex 1.63445 0.0841053 0.489362
+    endloop
+  endfacet
+  facet normal 0.133261 -0.991081 0
+    outer loop
+       vertex 1.63445 0.0841053 0.489362
+       vertex 1.63445 0.0841053 -0.510638
+       vertex 1.63975 0.0848184 -0.510638
+    endloop
+  endfacet
+  facet normal 0.133261 -0.991081 0
+    outer loop
+       vertex 1.63445 0.0841053 0.489362
+       vertex 1.63975 0.0848184 -0.510638
+       vertex 1.63975 0.0848184 0.489362
+    endloop
+  endfacet
+  facet normal 0.156575 -0.987666 0
+    outer loop
+       vertex 1.63975 0.0848184 0.489362
+       vertex 1.63975 0.0848184 -0.510638
+       vertex 1.64504 0.0856568 -0.510638
+    endloop
+  endfacet
+  facet normal 0.156575 -0.987666 0
+    outer loop
+       vertex 1.63975 0.0848184 0.489362
+       vertex 1.64504 0.0856568 -0.510638
+       vertex 1.64504 0.0856568 0.489362
+    endloop
+  endfacet
+  facet normal 0.17949 -0.98376 0
+    outer loop
+       vertex 1.64504 0.0856568 0.489362
+       vertex 1.64504 0.0856568 -0.510638
+       vertex 1.65032 0.0866193 -0.510638
+    endloop
+  endfacet
+  facet normal 0.17949 -0.98376 0
+    outer loop
+       vertex 1.64504 0.0856568 0.489362
+       vertex 1.65032 0.0866193 -0.510638
+       vertex 1.65032 0.0866193 0.489362
+    endloop
+  endfacet
+  facet normal 0.201962 -0.979393 0
+    outer loop
+       vertex 1.65032 0.0866193 0.489362
+       vertex 1.65032 0.0866193 -0.510638
+       vertex 1.65558 0.0877044 -0.510638
+    endloop
+  endfacet
+  facet normal 0.201962 -0.979393 0
+    outer loop
+       vertex 1.65032 0.0866193 0.489362
+       vertex 1.65558 0.0877044 -0.510638
+       vertex 1.65558 0.0877044 0.489362
+    endloop
+  endfacet
+  facet normal 0.223957 -0.974599 0
+    outer loop
+       vertex 1.65558 0.0877044 0.489362
+       vertex 1.65558 0.0877044 -0.510638
+       vertex 1.66083 0.0889108 -0.510638
+    endloop
+  endfacet
+  facet normal 0.223957 -0.974599 0
+    outer loop
+       vertex 1.65558 0.0877044 0.489362
+       vertex 1.66083 0.0889108 -0.510638
+       vertex 1.66083 0.0889108 0.489362
+    endloop
+  endfacet
+  facet normal 0.245441 -0.969412 0
+    outer loop
+       vertex 1.66083 0.0889108 0.489362
+       vertex 1.66083 0.0889108 -0.510638
+       vertex 1.66607 0.0902373 -0.510638
+    endloop
+  endfacet
+  facet normal 0.245441 -0.969412 0
+    outer loop
+       vertex 1.66083 0.0889108 0.489362
+       vertex 1.66607 0.0902373 -0.510638
+       vertex 1.66607 0.0902373 0.489362
+    endloop
+  endfacet
+  facet normal 0.266391 -0.963865 0
+    outer loop
+       vertex 1.66607 0.0902373 0.489362
+       vertex 1.66607 0.0902373 -0.510638
+       vertex 1.6713 0.0916824 -0.510638
+    endloop
+  endfacet
+  facet normal 0.266391 -0.963865 0
+    outer loop
+       vertex 1.66607 0.0902373 0.489362
+       vertex 1.6713 0.0916824 -0.510638
+       vertex 1.6713 0.0916824 0.489362
+    endloop
+  endfacet
+  facet normal 0.286777 -0.957997 0
+    outer loop
+       vertex 1.6713 0.0916824 0.489362
+       vertex 1.6713 0.0916824 -0.510638
+       vertex 1.67652 0.0932448 -0.510638
+    endloop
+  endfacet
+  facet normal 0.286777 -0.957997 0
+    outer loop
+       vertex 1.6713 0.0916824 0.489362
+       vertex 1.67652 0.0932448 -0.510638
+       vertex 1.67652 0.0932448 0.489362
+    endloop
+  endfacet
+  facet normal 0.306586 -0.951843 0
+    outer loop
+       vertex 1.67652 0.0932448 0.489362
+       vertex 1.67652 0.0932448 -0.510638
+       vertex 1.68173 0.0949233 -0.510638
+    endloop
+  endfacet
+  facet normal 0.306586 -0.951843 0
+    outer loop
+       vertex 1.67652 0.0932448 0.489362
+       vertex 1.68173 0.0949233 -0.510638
+       vertex 1.68173 0.0949233 0.489362
+    endloop
+  endfacet
+  facet normal 0.325796 -0.94544 0
+    outer loop
+       vertex 1.68173 0.0949233 0.489362
+       vertex 1.68173 0.0949233 -0.510638
+       vertex 1.68693 0.0967164 -0.510638
+    endloop
+  endfacet
+  facet normal 0.325796 -0.94544 0
+    outer loop
+       vertex 1.68173 0.0949233 0.489362
+       vertex 1.68693 0.0967164 -0.510638
+       vertex 1.68693 0.0967164 0.489362
+    endloop
+  endfacet
+  facet normal 0.344406 -0.938821 0
+    outer loop
+       vertex 1.68693 0.0967164 0.489362
+       vertex 1.68693 0.0967164 -0.510638
+       vertex 1.69213 0.0986228 -0.510638
+    endloop
+  endfacet
+  facet normal 0.344406 -0.938821 0
+    outer loop
+       vertex 1.68693 0.0967164 0.489362
+       vertex 1.69213 0.0986228 -0.510638
+       vertex 1.69213 0.0986228 0.489362
+    endloop
+  endfacet
+  facet normal 0.362398 -0.932024 0
+    outer loop
+       vertex 1.69213 0.0986228 0.489362
+       vertex 1.69213 0.0986228 -0.510638
+       vertex 1.69732 0.100641 -0.510638
+    endloop
+  endfacet
+  facet normal 0.362398 -0.932024 0
+    outer loop
+       vertex 1.69213 0.0986228 0.489362
+       vertex 1.69732 0.100641 -0.510638
+       vertex 1.69732 0.100641 0.489362
+    endloop
+  endfacet
+  facet normal 0.379777 -0.925078 0
+    outer loop
+       vertex 1.69732 0.100641 0.489362
+       vertex 1.69732 0.100641 -0.510638
+       vertex 1.70251 0.10277 -0.510638
+    endloop
+  endfacet
+  facet normal 0.379777 -0.925078 0
+    outer loop
+       vertex 1.69732 0.100641 0.489362
+       vertex 1.70251 0.10277 -0.510638
+       vertex 1.70251 0.10277 0.489362
+    endloop
+  endfacet
+  facet normal 0.39654 -0.918017 0
+    outer loop
+       vertex 1.70251 0.10277 0.489362
+       vertex 1.70251 0.10277 -0.510638
+       vertex 1.70769 0.105009 -0.510638
+    endloop
+  endfacet
+  facet normal 0.39654 -0.918017 0
+    outer loop
+       vertex 1.70251 0.10277 0.489362
+       vertex 1.70769 0.105009 -0.510638
+       vertex 1.70769 0.105009 0.489362
+    endloop
+  endfacet
+  facet normal 0.412686 -0.910874 0
+    outer loop
+       vertex 1.70769 0.105009 0.489362
+       vertex 1.70769 0.105009 -0.510638
+       vertex 1.71287 0.107355 -0.510638
+    endloop
+  endfacet
+  facet normal 0.412686 -0.910874 0
+    outer loop
+       vertex 1.70769 0.105009 0.489362
+       vertex 1.71287 0.107355 -0.510638
+       vertex 1.71287 0.107355 0.489362
+    endloop
+  endfacet
+  facet normal 0.428222 -0.903674 0
+    outer loop
+       vertex 1.71287 0.107355 0.489362
+       vertex 1.71287 0.107355 -0.510638
+       vertex 1.71804 0.109808 -0.510638
+    endloop
+  endfacet
+  facet normal 0.428222 -0.903674 0
+    outer loop
+       vertex 1.71287 0.107355 0.489362
+       vertex 1.71804 0.109808 -0.510638
+       vertex 1.71804 0.109808 0.489362
+    endloop
+  endfacet
+  facet normal 0.443151 -0.896447 0
+    outer loop
+       vertex 1.71804 0.109808 0.489362
+       vertex 1.71804 0.109808 -0.510638
+       vertex 1.72322 0.112367 -0.510638
+    endloop
+  endfacet
+  facet normal 0.443151 -0.896447 0
+    outer loop
+       vertex 1.71804 0.109808 0.489362
+       vertex 1.72322 0.112367 -0.510638
+       vertex 1.72322 0.112367 0.489362
+    endloop
+  endfacet
+  facet normal 0.457486 -0.889217 0
+    outer loop
+       vertex 1.72322 0.112367 0.489362
+       vertex 1.72322 0.112367 -0.510638
+       vertex 1.72839 0.115029 -0.510638
+    endloop
+  endfacet
+  facet normal 0.457486 -0.889217 0
+    outer loop
+       vertex 1.72322 0.112367 0.489362
+       vertex 1.72839 0.115029 -0.510638
+       vertex 1.72839 0.115029 0.489362
+    endloop
+  endfacet
+  facet normal 0.471233 -0.882009 0
+    outer loop
+       vertex 1.72839 0.115029 0.489362
+       vertex 1.72839 0.115029 -0.510638
+       vertex 1.73357 0.117794 -0.510638
+    endloop
+  endfacet
+  facet normal 0.471233 -0.882009 0
+    outer loop
+       vertex 1.72839 0.115029 0.489362
+       vertex 1.73357 0.117794 -0.510638
+       vertex 1.73357 0.117794 0.489362
+    endloop
+  endfacet
+  facet normal 0.48441 -0.874841 0
+    outer loop
+       vertex 1.73357 0.117794 0.489362
+       vertex 1.73357 0.117794 -0.510638
+       vertex 1.73875 0.120661 -0.510638
+    endloop
+  endfacet
+  facet normal 0.48441 -0.874841 0
+    outer loop
+       vertex 1.73357 0.117794 0.489362
+       vertex 1.73875 0.120661 -0.510638
+       vertex 1.73875 0.120661 0.489362
+    endloop
+  endfacet
+  facet normal 0.497022 -0.867738 0
+    outer loop
+       vertex 1.73875 0.120661 0.489362
+       vertex 1.73875 0.120661 -0.510638
+       vertex 1.74393 0.123627 -0.510638
+    endloop
+  endfacet
+  facet normal 0.497022 -0.867738 0
+    outer loop
+       vertex 1.73875 0.120661 0.489362
+       vertex 1.74393 0.123627 -0.510638
+       vertex 1.74393 0.123627 0.489362
+    endloop
+  endfacet
+  facet normal 0.509089 -0.860714 0
+    outer loop
+       vertex 1.74393 0.123627 0.489362
+       vertex 1.74393 0.123627 -0.510638
+       vertex 1.74911 0.126692 -0.510638
+    endloop
+  endfacet
+  facet normal 0.509089 -0.860714 0
+    outer loop
+       vertex 1.74393 0.123627 0.489362
+       vertex 1.74911 0.126692 -0.510638
+       vertex 1.74911 0.126692 0.489362
+    endloop
+  endfacet
+  facet normal 0.520623 -0.853787 0
+    outer loop
+       vertex 1.74911 0.126692 0.489362
+       vertex 1.74911 0.126692 -0.510638
+       vertex 1.75429 0.129855 -0.510638
+    endloop
+  endfacet
+  facet normal 0.520623 -0.853787 0
+    outer loop
+       vertex 1.74911 0.126692 0.489362
+       vertex 1.75429 0.129855 -0.510638
+       vertex 1.75429 0.129855 0.489362
+    endloop
+  endfacet
+  facet normal 0.531643 -0.846968 0
+    outer loop
+       vertex 1.75429 0.129855 0.489362
+       vertex 1.75429 0.129855 -0.510638
+       vertex 1.75949 0.133113 -0.510638
+    endloop
+  endfacet
+  facet normal 0.531643 -0.846968 0
+    outer loop
+       vertex 1.75429 0.129855 0.489362
+       vertex 1.75949 0.133113 -0.510638
+       vertex 1.75949 0.133113 0.489362
+    endloop
+  endfacet
+  facet normal 0.542166 -0.840272 0
+    outer loop
+       vertex 1.75949 0.133113 0.489362
+       vertex 1.75949 0.133113 -0.510638
+       vertex 1.76468 0.136466 -0.510638
+    endloop
+  endfacet
+  facet normal 0.542166 -0.840272 0
+    outer loop
+       vertex 1.75949 0.133113 0.489362
+       vertex 1.76468 0.136466 -0.510638
+       vertex 1.76468 0.136466 0.489362
+    endloop
+  endfacet
+  facet normal -1 0 -0
+    outer loop
+       vertex 1.76468 0.136466 0.489362
+       vertex 1.76468 0.136466 -0.510638
+       vertex 1.76468 0.0504664 -0.510638
+    endloop
+  endfacet
+  facet normal -1 -0 0
+    outer loop
+       vertex 1.76468 0.136466 0.489362
+       vertex 1.76468 0.0504664 -0.510638
+       vertex 1.76468 0.0504664 0.489362
+    endloop
+  endfacet
+  facet normal -0.548978 0.835837 0
+    outer loop
+       vertex 1.76468 0.0504664 0.489362
+       vertex 1.76468 0.0504664 -0.510638
+       vertex 1.7593 0.0469297 -0.510638
+    endloop
+  endfacet
+  facet normal -0.548978 0.835837 0
+    outer loop
+       vertex 1.76468 0.0504664 0.489362
+       vertex 1.7593 0.0469297 -0.510638
+       vertex 1.7593 0.0469297 0.489362
+    endloop
+  endfacet
+  facet normal 0.995002 0.0998513 0
+    outer loop
+       vertex 1.68426 0.283182 0.489362
+       vertex 1.68426 0.283182 -0.510638
+       vertex 1.68361 0.289728 -0.510638
+    endloop
+  endfacet
+  facet normal 0.995002 0.0998513 0
+    outer loop
+       vertex 1.68426 0.283182 0.489362
+       vertex 1.68361 0.289728 -0.510638
+       vertex 1.68361 0.289728 0.489362
+    endloop
+  endfacet
+  facet normal 0.990349 0.138598 0
+    outer loop
+       vertex 1.68361 0.289728 0.489362
+       vertex 1.68361 0.289728 -0.510638
+       vertex 1.68271 0.296098 -0.510638
+    endloop
+  endfacet
+  facet normal 0.990349 0.138598 0
+    outer loop
+       vertex 1.68361 0.289728 0.489362
+       vertex 1.68271 0.296098 -0.510638
+       vertex 1.68271 0.296098 0.489362
+    endloop
+  endfacet
+  facet normal 0.983933 0.178536 0
+    outer loop
+       vertex 1.68271 0.296098 0.489362
+       vertex 1.68271 0.296098 -0.510638
+       vertex 1.68159 0.30229 -0.510638
+    endloop
+  endfacet
+  facet normal 0.983933 0.178536 0
+    outer loop
+       vertex 1.68271 0.296098 0.489362
+       vertex 1.68159 0.30229 -0.510638
+       vertex 1.68159 0.30229 0.489362
+    endloop
+  endfacet
+  facet normal 0.975582 0.219637 0
+    outer loop
+       vertex 1.68159 0.30229 0.489362
+       vertex 1.68159 0.30229 -0.510638
+       vertex 1.68024 0.3083 -0.510638
+    endloop
+  endfacet
+  facet normal 0.975582 0.219637 0
+    outer loop
+       vertex 1.68159 0.30229 0.489362
+       vertex 1.68024 0.3083 -0.510638
+       vertex 1.68024 0.3083 0.489362
+    endloop
+  endfacet
+  facet normal 0.96512 0.26181 0
+    outer loop
+       vertex 1.68024 0.3083 0.489362
+       vertex 1.68024 0.3083 -0.510638
+       vertex 1.67866 0.314122 -0.510638
+    endloop
+  endfacet
+  facet normal 0.96512 0.26181 0
+    outer loop
+       vertex 1.68024 0.3083 0.489362
+       vertex 1.67866 0.314122 -0.510638
+       vertex 1.67866 0.314122 0.489362
+    endloop
+  endfacet
+  facet normal 0.952362 0.304971 0
+    outer loop
+       vertex 1.67866 0.314122 0.489362
+       vertex 1.67866 0.314122 -0.510638
+       vertex 1.67685 0.319754 -0.510638
+    endloop
+  endfacet
+  facet normal 0.952362 0.304971 0
+    outer loop
+       vertex 1.67866 0.314122 0.489362
+       vertex 1.67685 0.319754 -0.510638
+       vertex 1.67685 0.319754 0.489362
+    endloop
+  endfacet
+  facet normal 0.937127 0.34899 0
+    outer loop
+       vertex 1.67685 0.319754 0.489362
+       vertex 1.67685 0.319754 -0.510638
+       vertex 1.67483 0.325192 -0.510638
+    endloop
+  endfacet
+  facet normal 0.937127 0.34899 0
+    outer loop
+       vertex 1.67685 0.319754 0.489362
+       vertex 1.67483 0.325192 -0.510638
+       vertex 1.67483 0.325192 0.489362
+    endloop
+  endfacet
+  facet normal 0.919248 0.393679 0
+    outer loop
+       vertex 1.67483 0.325192 0.489362
+       vertex 1.67483 0.325192 -0.510638
+       vertex 1.67259 0.33043 -0.510638
+    endloop
+  endfacet
+  facet normal 0.919248 0.393679 0
+    outer loop
+       vertex 1.67483 0.325192 0.489362
+       vertex 1.67259 0.33043 -0.510638
+       vertex 1.67259 0.33043 0.489362
+    endloop
+  endfacet
+  facet normal 0.898561 0.438848 0
+    outer loop
+       vertex 1.67259 0.33043 0.489362
+       vertex 1.67259 0.33043 -0.510638
+       vertex 1.67013 0.335466 -0.510638
+    endloop
+  endfacet
+  facet normal 0.898561 0.438848 0
+    outer loop
+       vertex 1.67259 0.33043 0.489362
+       vertex 1.67013 0.335466 -0.510638
+       vertex 1.67013 0.335466 0.489362
+    endloop
+  endfacet
+  facet normal 0.874929 0.484252 0
+    outer loop
+       vertex 1.67013 0.335466 0.489362
+       vertex 1.67013 0.335466 -0.510638
+       vertex 1.66745 0.340296 -0.510638
+    endloop
+  endfacet
+  facet normal 0.874929 0.484252 0
+    outer loop
+       vertex 1.67013 0.335466 0.489362
+       vertex 1.66745 0.340296 -0.510638
+       vertex 1.66745 0.340296 0.489362
+    endloop
+  endfacet
+  facet normal 0.848256 0.529587 0
+    outer loop
+       vertex 1.66745 0.340296 0.489362
+       vertex 1.66745 0.340296 -0.510638
+       vertex 1.66457 0.344914 -0.510638
+    endloop
+  endfacet
+  facet normal 0.848256 0.529587 0
+    outer loop
+       vertex 1.66745 0.340296 0.489362
+       vertex 1.66457 0.344914 -0.510638
+       vertex 1.66457 0.344914 0.489362
+    endloop
+  endfacet
+  facet normal 0.818466 0.574555 0
+    outer loop
+       vertex 1.66457 0.344914 0.489362
+       vertex 1.66457 0.344914 -0.510638
+       vertex 1.66148 0.349318 -0.510638
+    endloop
+  endfacet
+  facet normal 0.818466 0.574555 0
+    outer loop
+       vertex 1.66457 0.344914 0.489362
+       vertex 1.66148 0.349318 -0.510638
+       vertex 1.66148 0.349318 0.489362
+    endloop
+  endfacet
+  facet normal 0.785553 0.618794 0
+    outer loop
+       vertex 1.66148 0.349318 0.489362
+       vertex 1.66148 0.349318 -0.510638
+       vertex 1.65818 0.353504 -0.510638
+    endloop
+  endfacet
+  facet normal 0.785553 0.618794 0
+    outer loop
+       vertex 1.66148 0.349318 0.489362
+       vertex 1.65818 0.353504 -0.510638
+       vertex 1.65818 0.353504 0.489362
+    endloop
+  endfacet
+  facet normal 0.749553 0.661945 0
+    outer loop
+       vertex 1.65818 0.353504 0.489362
+       vertex 1.65818 0.353504 -0.510638
+       vertex 1.65468 0.357466 -0.510638
+    endloop
+  endfacet
+  facet normal 0.749553 0.661945 0
+    outer loop
+       vertex 1.65818 0.353504 0.489362
+       vertex 1.65468 0.357466 -0.510638
+       vertex 1.65468 0.357466 0.489362
+    endloop
+  endfacet
+  facet normal 0.710564 0.703632 0
+    outer loop
+       vertex 1.65468 0.357466 0.489362
+       vertex 1.65468 0.357466 -0.510638
+       vertex 1.65098 0.361202 -0.510638
+    endloop
+  endfacet
+  facet normal 0.710564 0.703632 0
+    outer loop
+       vertex 1.65468 0.357466 0.489362
+       vertex 1.65098 0.361202 -0.510638
+       vertex 1.65098 0.361202 0.489362
+    endloop
+  endfacet
+  facet normal 0.668772 0.743468 0
+    outer loop
+       vertex 1.65098 0.361202 0.489362
+       vertex 1.65098 0.361202 -0.510638
+       vertex 1.64709 0.364708 -0.510638
+    endloop
+  endfacet
+  facet normal 0.668772 0.743468 0
+    outer loop
+       vertex 1.65098 0.361202 0.489362
+       vertex 1.64709 0.364708 -0.510638
+       vertex 1.64709 0.364708 0.489362
+    endloop
+  endfacet
+  facet normal 0.624399 0.781106 0
+    outer loop
+       vertex 1.64709 0.364708 0.489362
+       vertex 1.64709 0.364708 -0.510638
+       vertex 1.64299 0.367978 -0.510638
+    endloop
+  endfacet
+  facet normal 0.624399 0.781106 0
+    outer loop
+       vertex 1.64709 0.364708 0.489362
+       vertex 1.64299 0.367978 -0.510638
+       vertex 1.64299 0.367978 0.489362
+    endloop
+  endfacet
+  facet normal 0.577741 0.81622 0
+    outer loop
+       vertex 1.64299 0.367978 0.489362
+       vertex 1.64299 0.367978 -0.510638
+       vertex 1.63871 0.37101 -0.510638
+    endloop
+  endfacet
+  facet normal 0.577741 0.81622 0
+    outer loop
+       vertex 1.64299 0.367978 0.489362
+       vertex 1.63871 0.37101 -0.510638
+       vertex 1.63871 0.37101 0.489362
+    endloop
+  endfacet
+  facet normal 0.529151 0.848528 0
+    outer loop
+       vertex 1.63871 0.37101 0.489362
+       vertex 1.63871 0.37101 -0.510638
+       vertex 1.63424 0.3738 -0.510638
+    endloop
+  endfacet
+  facet normal 0.529151 0.848528 0
+    outer loop
+       vertex 1.63871 0.37101 0.489362
+       vertex 1.63424 0.3738 -0.510638
+       vertex 1.63424 0.3738 0.489362
+    endloop
+  endfacet
+  facet normal 0.479013 0.877808 0
+    outer loop
+       vertex 1.63424 0.3738 0.489362
+       vertex 1.63424 0.3738 -0.510638
+       vertex 1.62958 0.376342 -0.510638
+    endloop
+  endfacet
+  facet normal 0.479013 0.877808 0
+    outer loop
+       vertex 1.63424 0.3738 0.489362
+       vertex 1.62958 0.376342 -0.510638
+       vertex 1.62958 0.376342 0.489362
+    endloop
+  endfacet
+  facet normal 0.427732 0.903906 0
+    outer loop
+       vertex 1.62958 0.376342 0.489362
+       vertex 1.62958 0.376342 -0.510638
+       vertex 1.62473 0.378634 -0.510638
+    endloop
+  endfacet
+  facet normal 0.427732 0.903906 0
+    outer loop
+       vertex 1.62958 0.376342 0.489362
+       vertex 1.62473 0.378634 -0.510638
+       vertex 1.62473 0.378634 0.489362
+    endloop
+  endfacet
+  facet normal 0.37574 0.926725 0
+    outer loop
+       vertex 1.62473 0.378634 0.489362
+       vertex 1.62473 0.378634 -0.510638
+       vertex 1.61971 0.380672 -0.510638
+    endloop
+  endfacet
+  facet normal 0.37574 0.926725 0
+    outer loop
+       vertex 1.62473 0.378634 0.489362
+       vertex 1.61971 0.380672 -0.510638
+       vertex 1.61971 0.380672 0.489362
+    endloop
+  endfacet
+  facet normal 0.32344 0.946249 0
+    outer loop
+       vertex 1.61971 0.380672 0.489362
+       vertex 1.61971 0.380672 -0.510638
+       vertex 1.61451 0.38245 -0.510638
+    endloop
+  endfacet
+  facet normal 0.32344 0.946249 0
+    outer loop
+       vertex 1.61971 0.380672 0.489362
+       vertex 1.61451 0.38245 -0.510638
+       vertex 1.61451 0.38245 0.489362
+    endloop
+  endfacet
+  facet normal 0.27124 0.962512 0
+    outer loop
+       vertex 1.61451 0.38245 0.489362
+       vertex 1.61451 0.38245 -0.510638
+       vertex 1.60913 0.383966 -0.510638
+    endloop
+  endfacet
+  facet normal 0.27124 0.962512 0
+    outer loop
+       vertex 1.61451 0.38245 0.489362
+       vertex 1.60913 0.383966 -0.510638
+       vertex 1.60913 0.383966 0.489362
+    endloop
+  endfacet
+  facet normal 0.219503 0.975612 0
+    outer loop
+       vertex 1.60913 0.383966 0.489362
+       vertex 1.60913 0.383966 -0.510638
+       vertex 1.60357 0.385216 -0.510638
+    endloop
+  endfacet
+  facet normal 0.219503 0.975612 0
+    outer loop
+       vertex 1.60913 0.383966 0.489362
+       vertex 1.60357 0.385216 -0.510638
+       vertex 1.60357 0.385216 0.489362
+    endloop
+  endfacet
+  facet normal 0.168544 0.985694 0
+    outer loop
+       vertex 1.60357 0.385216 0.489362
+       vertex 1.60357 0.385216 -0.510638
+       vertex 1.59785 0.386194 -0.510638
+    endloop
+  endfacet
+  facet normal 0.168544 0.985694 0
+    outer loop
+       vertex 1.60357 0.385216 0.489362
+       vertex 1.59785 0.386194 -0.510638
+       vertex 1.59785 0.386194 0.489362
+    endloop
+  endfacet
+  facet normal 0.118647 0.992936 0
+    outer loop
+       vertex 1.59785 0.386194 0.489362
+       vertex 1.59785 0.386194 -0.510638
+       vertex 1.59196 0.386898 -0.510638
+    endloop
+  endfacet
+  facet normal 0.118647 0.992936 0
+    outer loop
+       vertex 1.59785 0.386194 0.489362
+       vertex 1.59196 0.386898 -0.510638
+       vertex 1.59196 0.386898 0.489362
+    endloop
+  endfacet
+  facet normal 0.0700513 0.997543 0
+    outer loop
+       vertex 1.59196 0.386898 0.489362
+       vertex 1.59196 0.386898 -0.510638
+       vertex 1.5859 0.387324 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0700513 0.997543 0
+    outer loop
+       vertex 1.59196 0.386898 0.489362
+       vertex 1.5859 0.387324 -0.510638
+       vertex 1.5859 0.387324 0.489362
+    endloop
+  endfacet
+  facet normal 0.0229321 0.999737 0
+    outer loop
+       vertex 1.5859 0.387324 0.489362
+       vertex 1.5859 0.387324 -0.510638
+       vertex 1.57968 0.387466 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0229321 0.999737 0
+    outer loop
+       vertex 1.5859 0.387324 0.489362
+       vertex 1.57968 0.387466 -0.510638
+       vertex 1.57968 0.387466 0.489362
+    endloop
+  endfacet
+  facet normal -0.019819 0.999804 0
+    outer loop
+       vertex 1.57968 0.387466 0.489362
+       vertex 1.57968 0.387466 -0.510638
+       vertex 1.57297 0.387333 -0.510638
+    endloop
+  endfacet
+  facet normal -0.019819 0.999804 0
+    outer loop
+       vertex 1.57968 0.387466 0.489362
+       vertex 1.57297 0.387333 -0.510638
+       vertex 1.57297 0.387333 0.489362
+    endloop
+  endfacet
+  facet normal -0.0607887 0.998151 0
+    outer loop
+       vertex 1.57297 0.387333 0.489362
+       vertex 1.57297 0.387333 -0.510638
+       vertex 1.56644 0.386936 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0607887 0.998151 0
+    outer loop
+       vertex 1.57297 0.387333 0.489362
+       vertex 1.56644 0.386936 -0.510638
+       vertex 1.56644 0.386936 0.489362
+    endloop
+  endfacet
+  facet normal -0.103454 0.994634 0
+    outer loop
+       vertex 1.56644 0.386936 0.489362
+       vertex 1.56644 0.386936 -0.510638
+       vertex 1.56009 0.386275 -0.510638
+    endloop
+  endfacet
+  facet normal -0.103454 0.994634 0
+    outer loop
+       vertex 1.56644 0.386936 0.489362
+       vertex 1.56009 0.386275 -0.510638
+       vertex 1.56009 0.386275 0.489362
+    endloop
+  endfacet
+  facet normal -0.1477 0.989032 0
+    outer loop
+       vertex 1.56009 0.386275 0.489362
+       vertex 1.56009 0.386275 -0.510638
+       vertex 1.55393 0.385354 -0.510638
+    endloop
+  endfacet
+  facet normal -0.1477 0.989032 0
+    outer loop
+       vertex 1.56009 0.386275 0.489362
+       vertex 1.55393 0.385354 -0.510638
+       vertex 1.55393 0.385354 0.489362
+    endloop
+  endfacet
+  facet normal -0.193367 0.981126 0
+    outer loop
+       vertex 1.55393 0.385354 0.489362
+       vertex 1.55393 0.385354 -0.510638
+       vertex 1.54794 0.384175 -0.510638
+    endloop
+  endfacet
+  facet normal -0.193367 0.981126 0
+    outer loop
+       vertex 1.55393 0.385354 0.489362
+       vertex 1.54794 0.384175 -0.510638
+       vertex 1.54794 0.384175 0.489362
+    endloop
+  endfacet
+  facet normal -0.240255 0.97071 0
+    outer loop
+       vertex 1.54794 0.384175 0.489362
+       vertex 1.54794 0.384175 -0.510638
+       vertex 1.54214 0.382738 -0.510638
+    endloop
+  endfacet
+  facet normal -0.240255 0.97071 0
+    outer loop
+       vertex 1.54794 0.384175 0.489362
+       vertex 1.54214 0.382738 -0.510638
+       vertex 1.54214 0.382738 0.489362
+    endloop
+  endfacet
+  facet normal -0.288103 0.957599 0
+    outer loop
+       vertex 1.54214 0.382738 0.489362
+       vertex 1.54214 0.382738 -0.510638
+       vertex 1.53652 0.381047 -0.510638
+    endloop
+  endfacet
+  facet normal -0.288103 0.957599 0
+    outer loop
+       vertex 1.54214 0.382738 0.489362
+       vertex 1.53652 0.381047 -0.510638
+       vertex 1.53652 0.381047 0.489362
+    endloop
+  endfacet
+  facet normal -0.3366 0.941648 0
+    outer loop
+       vertex 1.53652 0.381047 0.489362
+       vertex 1.53652 0.381047 -0.510638
+       vertex 1.53108 0.379104 -0.510638
+    endloop
+  endfacet
+  facet normal -0.3366 0.941648 0
+    outer loop
+       vertex 1.53652 0.381047 0.489362
+       vertex 1.53108 0.379104 -0.510638
+       vertex 1.53108 0.379104 0.489362
+    endloop
+  endfacet
+  facet normal -0.385396 0.922751 0
+    outer loop
+       vertex 1.53108 0.379104 0.489362
+       vertex 1.53108 0.379104 -0.510638
+       vertex 1.52583 0.376909 -0.510638
+    endloop
+  endfacet
+  facet normal -0.385396 0.922751 0
+    outer loop
+       vertex 1.53108 0.379104 0.489362
+       vertex 1.52583 0.376909 -0.510638
+       vertex 1.52583 0.376909 0.489362
+    endloop
+  endfacet
+  facet normal -0.434088 0.90087 0
+    outer loop
+       vertex 1.52583 0.376909 0.489362
+       vertex 1.52583 0.376909 -0.510638
+       vertex 1.52076 0.374466 -0.510638
+    endloop
+  endfacet
+  facet normal -0.434088 0.90087 0
+    outer loop
+       vertex 1.52583 0.376909 0.489362
+       vertex 1.52076 0.374466 -0.510638
+       vertex 1.52076 0.374466 0.489362
+    endloop
+  endfacet
+  facet normal -0.482286 0.876014 0
+    outer loop
+       vertex 1.52076 0.374466 0.489362
+       vertex 1.52076 0.374466 -0.510638
+       vertex 1.51587 0.371777 -0.510638
+    endloop
+  endfacet
+  facet normal -0.482286 0.876014 0
+    outer loop
+       vertex 1.52076 0.374466 0.489362
+       vertex 1.51587 0.371777 -0.510638
+       vertex 1.51587 0.371777 0.489362
+    endloop
+  endfacet
+  facet normal -0.529544 0.848282 0
+    outer loop
+       vertex 1.51587 0.371777 0.489362
+       vertex 1.51587 0.371777 -0.510638
+       vertex 1.51117 0.368842 -0.510638
+    endloop
+  endfacet
+  facet normal -0.529544 0.848282 0
+    outer loop
+       vertex 1.51587 0.371777 0.489362
+       vertex 1.51117 0.368842 -0.510638
+       vertex 1.51117 0.368842 0.489362
+    endloop
+  endfacet
+  facet normal -0.57544 0.817844 0
+    outer loop
+       vertex 1.51117 0.368842 0.489362
+       vertex 1.51117 0.368842 -0.510638
+       vertex 1.50665 0.365665 -0.510638
+    endloop
+  endfacet
+  facet normal -0.57544 0.817844 0
+    outer loop
+       vertex 1.51117 0.368842 0.489362
+       vertex 1.50665 0.365665 -0.510638
+       vertex 1.50665 0.365665 0.489362
+    endloop
+  endfacet
+  facet normal -0.61961 0.78491 0
+    outer loop
+       vertex 1.50665 0.365665 0.489362
+       vertex 1.50665 0.365665 -0.510638
+       vertex 1.50233 0.362248 -0.510638
+    endloop
+  endfacet
+  facet normal -0.61961 0.78491 0
+    outer loop
+       vertex 1.50665 0.365665 0.489362
+       vertex 1.50233 0.362248 -0.510638
+       vertex 1.50233 0.362248 0.489362
+    endloop
+  endfacet
+  facet normal -0.661676 0.74979 0
+    outer loop
+       vertex 1.50233 0.362248 0.489362
+       vertex 1.50233 0.362248 -0.510638
+       vertex 1.49818 0.358591 -0.510638
+    endloop
+  endfacet
+  facet normal -0.661676 0.74979 0
+    outer loop
+       vertex 1.50233 0.362248 0.489362
+       vertex 1.49818 0.358591 -0.510638
+       vertex 1.49818 0.358591 0.489362
+    endloop
+  endfacet
+  facet normal -0.701357 0.71281 0
+    outer loop
+       vertex 1.49818 0.358591 0.489362
+       vertex 1.49818 0.358591 -0.510638
+       vertex 1.49423 0.354698 -0.510638
+    endloop
+  endfacet
+  facet normal -0.701357 0.71281 0
+    outer loop
+       vertex 1.49818 0.358591 0.489362
+       vertex 1.49423 0.354698 -0.510638
+       vertex 1.49423 0.354698 0.489362
+    endloop
+  endfacet
+  facet normal -0.738417 0.674344 0
+    outer loop
+       vertex 1.49423 0.354698 0.489362
+       vertex 1.49423 0.354698 -0.510638
+       vertex 1.49046 0.350571 -0.510638
+    endloop
+  endfacet
+  facet normal -0.738417 0.674344 0
+    outer loop
+       vertex 1.49423 0.354698 0.489362
+       vertex 1.49046 0.350571 -0.510638
+       vertex 1.49046 0.350571 0.489362
+    endloop
+  endfacet
+  facet normal -0.772712 0.634757 0
+    outer loop
+       vertex 1.49046 0.350571 0.489362
+       vertex 1.49046 0.350571 -0.510638
+       vertex 1.48687 0.34621 -0.510638
+    endloop
+  endfacet
+  facet normal -0.772712 0.634757 0
+    outer loop
+       vertex 1.49046 0.350571 0.489362
+       vertex 1.48687 0.34621 -0.510638
+       vertex 1.48687 0.34621 0.489362
+    endloop
+  endfacet
+  facet normal -0.80413 0.594453 0
+    outer loop
+       vertex 1.48687 0.34621 0.489362
+       vertex 1.48687 0.34621 -0.510638
+       vertex 1.48348 0.341619 -0.510638
+    endloop
+  endfacet
+  facet normal -0.80413 0.594453 0
+    outer loop
+       vertex 1.48687 0.34621 0.489362
+       vertex 1.48348 0.341619 -0.510638
+       vertex 1.48348 0.341619 0.489362
+    endloop
+  endfacet
+  facet normal -0.832653 0.553794 0
+    outer loop
+       vertex 1.48348 0.341619 0.489362
+       vertex 1.48348 0.341619 -0.510638
+       vertex 1.48027 0.3368 -0.510638
+    endloop
+  endfacet
+  facet normal -0.832653 0.553794 0
+    outer loop
+       vertex 1.48348 0.341619 0.489362
+       vertex 1.48027 0.3368 -0.510638
+       vertex 1.48027 0.3368 0.489362
+    endloop
+  endfacet
+  facet normal -0.858333 0.513093 0
+    outer loop
+       vertex 1.48027 0.3368 0.489362
+       vertex 1.48027 0.3368 -0.510638
+       vertex 1.47726 0.331753 -0.510638
+    endloop
+  endfacet
+  facet normal -0.858333 0.513093 0
+    outer loop
+       vertex 1.48027 0.3368 0.489362
+       vertex 1.47726 0.331753 -0.510638
+       vertex 1.47726 0.331753 0.489362
+    endloop
+  endfacet
+  facet normal -0.881233 0.472682 0
+    outer loop
+       vertex 1.47726 0.331753 0.489362
+       vertex 1.47726 0.331753 -0.510638
+       vertex 1.47443 0.326482 -0.510638
+    endloop
+  endfacet
+  facet normal -0.881233 0.472682 0
+    outer loop
+       vertex 1.47726 0.331753 0.489362
+       vertex 1.47443 0.326482 -0.510638
+       vertex 1.47443 0.326482 0.489362
+    endloop
+  endfacet
+  facet normal -0.901488 0.432804 0
+    outer loop
+       vertex 1.47443 0.326482 0.489362
+       vertex 1.47443 0.326482 -0.510638
+       vertex 1.47179 0.320989 -0.510638
+    endloop
+  endfacet
+  facet normal -0.901488 0.432804 0
+    outer loop
+       vertex 1.47443 0.326482 0.489362
+       vertex 1.47179 0.320989 -0.510638
+       vertex 1.47179 0.320989 0.489362
+    endloop
+  endfacet
+  facet normal -0.919247 0.393681 0
+    outer loop
+       vertex 1.47179 0.320989 0.489362
+       vertex 1.47179 0.320989 -0.510638
+       vertex 1.46935 0.315274 -0.510638
+    endloop
+  endfacet
+  facet normal -0.919247 0.393681 0
+    outer loop
+       vertex 1.47179 0.320989 0.489362
+       vertex 1.46935 0.315274 -0.510638
+       vertex 1.46935 0.315274 0.489362
+    endloop
+  endfacet
+  facet normal -0.934674 0.355506 0
+    outer loop
+       vertex 1.46935 0.315274 0.489362
+       vertex 1.46935 0.315274 -0.510638
+       vertex 1.46709 0.309341 -0.510638
+    endloop
+  endfacet
+  facet normal -0.934674 0.355506 0
+    outer loop
+       vertex 1.46935 0.315274 0.489362
+       vertex 1.46709 0.309341 -0.510638
+       vertex 1.46709 0.309341 0.489362
+    endloop
+  endfacet
+  facet normal -0.947957 0.318398 0
+    outer loop
+       vertex 1.46709 0.309341 0.489362
+       vertex 1.46709 0.309341 -0.510638
+       vertex 1.46502 0.303192 -0.510638
+    endloop
+  endfacet
+  facet normal -0.947957 0.318398 0
+    outer loop
+       vertex 1.46709 0.309341 0.489362
+       vertex 1.46502 0.303192 -0.510638
+       vertex 1.46502 0.303192 0.489362
+    endloop
+  endfacet
+  facet normal -0.95928 0.282458 0
+    outer loop
+       vertex 1.46502 0.303192 0.489362
+       vertex 1.46502 0.303192 -0.510638
+       vertex 1.46315 0.296827 -0.510638
+    endloop
+  endfacet
+  facet normal -0.95928 0.282458 0
+    outer loop
+       vertex 1.46502 0.303192 0.489362
+       vertex 1.46315 0.296827 -0.510638
+       vertex 1.46315 0.296827 0.489362
+    endloop
+  endfacet
+  facet normal -0.968823 0.247755 0
+    outer loop
+       vertex 1.46315 0.296827 0.489362
+       vertex 1.46315 0.296827 -0.510638
+       vertex 1.46147 0.29025 -0.510638
+    endloop
+  endfacet
+  facet normal -0.968823 0.247755 0
+    outer loop
+       vertex 1.46315 0.296827 0.489362
+       vertex 1.46147 0.29025 -0.510638
+       vertex 1.46147 0.29025 0.489362
+    endloop
+  endfacet
+  facet normal -0.976758 0.214345 0
+    outer loop
+       vertex 1.46147 0.29025 0.489362
+       vertex 1.46147 0.29025 -0.510638
+       vertex 1.45998 0.283463 -0.510638
+    endloop
+  endfacet
+  facet normal -0.976758 0.214345 0
+    outer loop
+       vertex 1.46147 0.29025 0.489362
+       vertex 1.45998 0.283463 -0.510638
+       vertex 1.45998 0.283463 0.489362
+    endloop
+  endfacet
+  facet normal -0.983256 0.182228 0
+    outer loop
+       vertex 1.45998 0.283463 0.489362
+       vertex 1.45998 0.283463 -0.510638
+       vertex 1.45868 0.276466 -0.510638
+    endloop
+  endfacet
+  facet normal -0.983256 0.182228 0
+    outer loop
+       vertex 1.45998 0.283463 0.489362
+       vertex 1.45868 0.276466 -0.510638
+       vertex 1.45868 0.276466 0.489362
+    endloop
+  endfacet
+  facet normal 0 -1 0
+    outer loop
+       vertex 1.45868 0.276466 0.489362
+       vertex 1.45868 0.276466 -0.510638
+       vertex 1.68468 0.276466 -0.510638
+    endloop
+  endfacet
+  facet normal 0 -1 0
+    outer loop
+       vertex 1.45868 0.276466 0.489362
+       vertex 1.68468 0.276466 -0.510638
+       vertex 1.68468 0.276466 0.489362
+    endloop
+  endfacet
+  facet normal 0.998052 0.0623935 0
+    outer loop
+       vertex 1.68468 0.276466 0.489362
+       vertex 1.68468 0.276466 -0.510638
+       vertex 1.68426 0.283182 -0.510638
+    endloop
+  endfacet
+  facet normal 0.998052 0.0623935 0
+    outer loop
+       vertex 1.68468 0.276466 0.489362
+       vertex 1.68426 0.283182 -0.510638
+       vertex 1.68426 0.283182 0.489362
+    endloop
+  endfacet
+  facet normal 0.775385 -0.631488 0
+    outer loop
+       vertex 1.95768 0.396466 0.489362
+       vertex 1.95768 0.396466 -0.510638
+       vertex 1.96114 0.400706 -0.510638
+    endloop
+  endfacet
+  facet normal 0.775385 -0.631488 0
+    outer loop
+       vertex 1.95768 0.396466 0.489362
+       vertex 1.96114 0.400706 -0.510638
+       vertex 1.96114 0.400706 0.489362
+    endloop
+  endfacet
+  facet normal 0.756888 -0.653545 0
+    outer loop
+       vertex 1.96114 0.400706 0.489362
+       vertex 1.96114 0.400706 -0.510638
+       vertex 1.96469 0.404824 -0.510638
+    endloop
+  endfacet
+  facet normal 0.756888 -0.653545 0
+    outer loop
+       vertex 1.96114 0.400706 0.489362
+       vertex 1.96469 0.404824 -0.510638
+       vertex 1.96469 0.404824 0.489362
+    endloop
+  endfacet
+  facet normal 0.737771 -0.675051 0
+    outer loop
+       vertex 1.96469 0.404824 0.489362
+       vertex 1.96469 0.404824 -0.510638
+       vertex 1.96835 0.408819 -0.510638
+    endloop
+  endfacet
+  facet normal 0.737771 -0.675051 0
+    outer loop
+       vertex 1.96469 0.404824 0.489362
+       vertex 1.96835 0.408819 -0.510638
+       vertex 1.96835 0.408819 0.489362
+    endloop
+  endfacet
+  facet normal 0.718059 -0.695982 0
+    outer loop
+       vertex 1.96835 0.408819 0.489362
+       vertex 1.96835 0.408819 -0.510638
+       vertex 1.9721 0.41269 -0.510638
+    endloop
+  endfacet
+  facet normal 0.718059 -0.695982 0
+    outer loop
+       vertex 1.96835 0.408819 0.489362
+       vertex 1.9721 0.41269 -0.510638
+       vertex 1.9721 0.41269 0.489362
+    endloop
+  endfacet
+  facet normal 0.697754 -0.716337 0
+    outer loop
+       vertex 1.9721 0.41269 0.489362
+       vertex 1.9721 0.41269 -0.510638
+       vertex 1.97594 0.416434 -0.510638
+    endloop
+  endfacet
+  facet normal 0.697754 -0.716337 0
+    outer loop
+       vertex 1.9721 0.41269 0.489362
+       vertex 1.97594 0.416434 -0.510638
+       vertex 1.97594 0.416434 0.489362
+    endloop
+  endfacet
+  facet normal 0.676887 -0.736087 0
+    outer loop
+       vertex 1.97594 0.416434 0.489362
+       vertex 1.97594 0.416434 -0.510638
+       vertex 1.97987 0.42005 -0.510638
+    endloop
+  endfacet
+  facet normal 0.676887 -0.736087 0
+    outer loop
+       vertex 1.97594 0.416434 0.489362
+       vertex 1.97987 0.42005 -0.510638
+       vertex 1.97987 0.42005 0.489362
+    endloop
+  endfacet
+  facet normal 0.655441 -0.755247 0
+    outer loop
+       vertex 1.97987 0.42005 0.489362
+       vertex 1.97987 0.42005 -0.510638
+       vertex 1.98389 0.423537 -0.510638
+    endloop
+  endfacet
+  facet normal 0.655441 -0.755247 0
+    outer loop
+       vertex 1.97987 0.42005 0.489362
+       vertex 1.98389 0.423537 -0.510638
+       vertex 1.98389 0.423537 0.489362
+    endloop
+  endfacet
+  facet normal 0.633438 -0.773794 0
+    outer loop
+       vertex 1.98389 0.423537 0.489362
+       vertex 1.98389 0.423537 -0.510638
+       vertex 1.98799 0.426894 -0.510638
+    endloop
+  endfacet
+  facet normal 0.633438 -0.773794 0
+    outer loop
+       vertex 1.98389 0.423537 0.489362
+       vertex 1.98799 0.426894 -0.510638
+       vertex 1.98799 0.426894 0.489362
+    endloop
+  endfacet
+  facet normal 0.610884 -0.79172 0
+    outer loop
+       vertex 1.98799 0.426894 0.489362
+       vertex 1.98799 0.426894 -0.510638
+       vertex 1.99217 0.430117 -0.510638
+    endloop
+  endfacet
+  facet normal 0.610884 -0.79172 0
+    outer loop
+       vertex 1.98799 0.426894 0.489362
+       vertex 1.99217 0.430117 -0.510638
+       vertex 1.99217 0.430117 0.489362
+    endloop
+  endfacet
+  facet normal 0.587776 -0.809024 0
+    outer loop
+       vertex 1.99217 0.430117 0.489362
+       vertex 1.99217 0.430117 -0.510638
+       vertex 1.99642 0.433207 -0.510638
+    endloop
+  endfacet
+  facet normal 0.587776 -0.809024 0
+    outer loop
+       vertex 1.99217 0.430117 0.489362
+       vertex 1.99642 0.433207 -0.510638
+       vertex 1.99642 0.433207 0.489362
+    endloop
+  endfacet
+  facet normal 0.564133 -0.825684 0
+    outer loop
+       vertex 1.99642 0.433207 0.489362
+       vertex 1.99642 0.433207 -0.510638
+       vertex 2.00075 0.436161 -0.510638
+    endloop
+  endfacet
+  facet normal 0.564133 -0.825684 0
+    outer loop
+       vertex 1.99642 0.433207 0.489362
+       vertex 2.00075 0.436161 -0.510638
+       vertex 2.00075 0.436161 0.489362
+    endloop
+  endfacet
+  facet normal 0.539944 -0.841701 0
+    outer loop
+       vertex 2.00075 0.436161 0.489362
+       vertex 2.00075 0.436161 -0.510638
+       vertex 2.00514 0.438978 -0.510638
+    endloop
+  endfacet
+  facet normal 0.539944 -0.841701 0
+    outer loop
+       vertex 2.00075 0.436161 0.489362
+       vertex 2.00514 0.438978 -0.510638
+       vertex 2.00514 0.438978 0.489362
+    endloop
+  endfacet
+  facet normal 0.515231 -0.857052 0
+    outer loop
+       vertex 2.00514 0.438978 0.489362
+       vertex 2.00514 0.438978 -0.510638
+       vertex 2.00959 0.441657 -0.510638
+    endloop
+  endfacet
+  facet normal 0.515231 -0.857052 0
+    outer loop
+       vertex 2.00514 0.438978 0.489362
+       vertex 2.00959 0.441657 -0.510638
+       vertex 2.00959 0.441657 0.489362
+    endloop
+  endfacet
+  facet normal 0.489966 -0.871741 0
+    outer loop
+       vertex 2.00959 0.441657 0.489362
+       vertex 2.00959 0.441657 -0.510638
+       vertex 2.01411 0.444195 -0.510638
+    endloop
+  endfacet
+  facet normal 0.489966 -0.871741 0
+    outer loop
+       vertex 2.00959 0.441657 0.489362
+       vertex 2.01411 0.444195 -0.510638
+       vertex 2.01411 0.444195 0.489362
+    endloop
+  endfacet
+  facet normal 0.464192 -0.885735 0
+    outer loop
+       vertex 2.01411 0.444195 0.489362
+       vertex 2.01411 0.444195 -0.510638
+       vertex 2.01868 0.446591 -0.510638
+    endloop
+  endfacet
+  facet normal 0.464192 -0.885735 0
+    outer loop
+       vertex 2.01411 0.444195 0.489362
+       vertex 2.01868 0.446591 -0.510638
+       vertex 2.01868 0.446591 0.489362
+    endloop
+  endfacet
+  facet normal 0.437871 -0.899038 0
+    outer loop
+       vertex 2.01868 0.446591 0.489362
+       vertex 2.01868 0.446591 -0.510638
+       vertex 2.02331 0.448844 -0.510638
+    endloop
+  endfacet
+  facet normal 0.437871 -0.899038 0
+    outer loop
+       vertex 2.01868 0.446591 0.489362
+       vertex 2.02331 0.448844 -0.510638
+       vertex 2.02331 0.448844 0.489362
+    endloop
+  endfacet
+  facet normal 0.411021 -0.911626 0
+    outer loop
+       vertex 2.02331 0.448844 0.489362
+       vertex 2.02331 0.448844 -0.510638
+       vertex 2.02798 0.450953 -0.510638
+    endloop
+  endfacet
+  facet normal 0.411021 -0.911626 0
+    outer loop
+       vertex 2.02331 0.448844 0.489362
+       vertex 2.02798 0.450953 -0.510638
+       vertex 2.02798 0.450953 0.489362
+    endloop
+  endfacet
+  facet normal 0.383647 -0.92348 0
+    outer loop
+       vertex 2.02798 0.450953 0.489362
+       vertex 2.02798 0.450953 -0.510638
+       vertex 2.03271 0.452914 -0.510638
+    endloop
+  endfacet
+  facet normal 0.383647 -0.92348 0
+    outer loop
+       vertex 2.02798 0.450953 0.489362
+       vertex 2.03271 0.452914 -0.510638
+       vertex 2.03271 0.452914 0.489362
+    endloop
+  endfacet
+  facet normal 0.355752 -0.93458 0
+    outer loop
+       vertex 2.03271 0.452914 0.489362
+       vertex 2.03271 0.452914 -0.510638
+       vertex 2.03747 0.454728 -0.510638
+    endloop
+  endfacet
+  facet normal 0.355752 -0.93458 0
+    outer loop
+       vertex 2.03271 0.452914 0.489362
+       vertex 2.03747 0.454728 -0.510638
+       vertex 2.03747 0.454728 0.489362
+    endloop
+  endfacet
+  facet normal 0.32734 -0.944907 0
+    outer loop
+       vertex 2.03747 0.454728 0.489362
+       vertex 2.03747 0.454728 -0.510638
+       vertex 2.04227 0.456392 -0.510638
+    endloop
+  endfacet
+  facet normal 0.32734 -0.944907 0
+    outer loop
+       vertex 2.03747 0.454728 0.489362
+       vertex 2.04227 0.456392 -0.510638
+       vertex 2.04227 0.456392 0.489362
+    endloop
+  endfacet
+  facet normal 0.298409 -0.954438 0
+    outer loop
+       vertex 2.04227 0.456392 0.489362
+       vertex 2.04227 0.456392 -0.510638
+       vertex 2.04711 0.457905 -0.510638
+    endloop
+  endfacet
+  facet normal 0.298409 -0.954438 0
+    outer loop
+       vertex 2.04227 0.456392 0.489362
+       vertex 2.04711 0.457905 -0.510638
+       vertex 2.04711 0.457905 0.489362
+    endloop
+  endfacet
+  facet normal 0.268976 -0.963147 0
+    outer loop
+       vertex 2.04711 0.457905 0.489362
+       vertex 2.04711 0.457905 -0.510638
+       vertex 2.05199 0.459266 -0.510638
+    endloop
+  endfacet
+  facet normal 0.268976 -0.963147 0
+    outer loop
+       vertex 2.04711 0.457905 0.489362
+       vertex 2.05199 0.459266 -0.510638
+       vertex 2.05199 0.459266 0.489362
+    endloop
+  endfacet
+  facet normal 0.239038 -0.97101 0
+    outer loop
+       vertex 2.05199 0.459266 0.489362
+       vertex 2.05199 0.459266 -0.510638
+       vertex 2.05689 0.460472 -0.510638
+    endloop
+  endfacet
+  facet normal 0.239038 -0.97101 0
+    outer loop
+       vertex 2.05199 0.459266 0.489362
+       vertex 2.05689 0.460472 -0.510638
+       vertex 2.05689 0.460472 0.489362
+    endloop
+  endfacet
+  facet normal 0.208599 -0.978001 0
+    outer loop
+       vertex 2.05689 0.460472 0.489362
+       vertex 2.05689 0.460472 -0.510638
+       vertex 2.06181 0.461522 -0.510638
+    endloop
+  endfacet
+  facet normal 0.208599 -0.978001 0
+    outer loop
+       vertex 2.05689 0.460472 0.489362
+       vertex 2.06181 0.461522 -0.510638
+       vertex 2.06181 0.461522 0.489362
+    endloop
+  endfacet
+  facet normal 0.177694 -0.984086 0
+    outer loop
+       vertex 2.06181 0.461522 0.489362
+       vertex 2.06181 0.461522 -0.510638
+       vertex 2.06676 0.462415 -0.510638
+    endloop
+  endfacet
+  facet normal 0.177694 -0.984086 0
+    outer loop
+       vertex 2.06181 0.461522 0.489362
+       vertex 2.06676 0.462415 -0.510638
+       vertex 2.06676 0.462415 0.489362
+    endloop
+  endfacet
+  facet normal 0.146313 -0.989238 0
+    outer loop
+       vertex 2.06676 0.462415 0.489362
+       vertex 2.06676 0.462415 -0.510638
+       vertex 2.07172 0.46315 -0.510638
+    endloop
+  endfacet
+  facet normal 0.146313 -0.989238 0
+    outer loop
+       vertex 2.06676 0.462415 0.489362
+       vertex 2.07172 0.46315 -0.510638
+       vertex 2.07172 0.46315 0.489362
+    endloop
+  endfacet
+  facet normal 0.114496 -0.993424 0
+    outer loop
+       vertex 2.07172 0.46315 0.489362
+       vertex 2.07172 0.46315 -0.510638
+       vertex 2.0767 0.463723 -0.510638
+    endloop
+  endfacet
+  facet normal 0.114496 -0.993424 0
+    outer loop
+       vertex 2.07172 0.46315 0.489362
+       vertex 2.0767 0.463723 -0.510638
+       vertex 2.0767 0.463723 0.489362
+    endloop
+  endfacet
+  facet normal 0.0822571 -0.996611 0
+    outer loop
+       vertex 2.0767 0.463723 0.489362
+       vertex 2.0767 0.463723 -0.510638
+       vertex 2.08169 0.464135 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0822571 -0.996611 0
+    outer loop
+       vertex 2.0767 0.463723 0.489362
+       vertex 2.08169 0.464135 -0.510638
+       vertex 2.08169 0.464135 0.489362
+    endloop
+  endfacet
+  facet normal 0.0496191 -0.998768 0
+    outer loop
+       vertex 2.08169 0.464135 0.489362
+       vertex 2.08169 0.464135 -0.510638
+       vertex 2.08668 0.464383 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0496191 -0.998768 0
+    outer loop
+       vertex 2.08169 0.464135 0.489362
+       vertex 2.08668 0.464383 -0.510638
+       vertex 2.08668 0.464383 0.489362
+    endloop
+  endfacet
+  facet normal 0.0166175 -0.999862 0
+    outer loop
+       vertex 2.08668 0.464383 0.489362
+       vertex 2.08668 0.464383 -0.510638
+       vertex 2.09168 0.464466 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0166175 -0.999862 0
+    outer loop
+       vertex 2.08668 0.464383 0.489362
+       vertex 2.09168 0.464466 -0.510638
+       vertex 2.09168 0.464466 0.489362
+    endloop
+  endfacet
+  facet normal -0.0229369 -0.999737 -0
+    outer loop
+       vertex 2.09168 0.464466 0.489362
+       vertex 2.09168 0.464466 -0.510638
+       vertex 2.10012 0.464273 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0229369 -0.999737 0
+    outer loop
+       vertex 2.09168 0.464466 0.489362
+       vertex 2.10012 0.464273 -0.510638
+       vertex 2.10012 0.464273 0.489362
+    endloop
+  endfacet
+  facet normal -0.0697847 -0.997562 -0
+    outer loop
+       vertex 2.10012 0.464273 0.489362
+       vertex 2.10012 0.464273 -0.510638
+       vertex 2.10844 0.463691 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0697847 -0.997562 0
+    outer loop
+       vertex 2.10012 0.464273 0.489362
+       vertex 2.10844 0.463691 -0.510638
+       vertex 2.10844 0.463691 0.489362
+    endloop
+  endfacet
+  facet normal -0.117934 -0.993021 -0
+    outer loop
+       vertex 2.10844 0.463691 0.489362
+       vertex 2.10844 0.463691 -0.510638
+       vertex 2.11662 0.462719 -0.510638
+    endloop
+  endfacet
+  facet normal -0.117934 -0.993021 0
+    outer loop
+       vertex 2.10844 0.463691 0.489362
+       vertex 2.11662 0.462719 -0.510638
+       vertex 2.11662 0.462719 0.489362
+    endloop
+  endfacet
+  facet normal -0.167264 -0.985912 -0
+    outer loop
+       vertex 2.11662 0.462719 0.489362
+       vertex 2.11662 0.462719 -0.510638
+       vertex 2.12465 0.461356 -0.510638
+    endloop
+  endfacet
+  facet normal -0.167264 -0.985912 0
+    outer loop
+       vertex 2.11662 0.462719 0.489362
+       vertex 2.12465 0.461356 -0.510638
+       vertex 2.12465 0.461356 0.489362
+    endloop
+  endfacet
+  facet normal -0.217623 -0.976033 -0
+    outer loop
+       vertex 2.12465 0.461356 0.489362
+       vertex 2.12465 0.461356 -0.510638
+       vertex 2.13253 0.459601 -0.510638
+    endloop
+  endfacet
+  facet normal -0.217623 -0.976033 0
+    outer loop
+       vertex 2.12465 0.461356 0.489362
+       vertex 2.13253 0.459601 -0.510638
+       vertex 2.13253 0.459601 0.489362
+    endloop
+  endfacet
+  facet normal -0.268812 -0.963193 -0
+    outer loop
+       vertex 2.13253 0.459601 0.489362
+       vertex 2.13253 0.459601 -0.510638
+       vertex 2.14023 0.45745 -0.510638
+    endloop
+  endfacet
+  facet normal -0.268812 -0.963193 0
+    outer loop
+       vertex 2.13253 0.459601 0.489362
+       vertex 2.14023 0.45745 -0.510638
+       vertex 2.14023 0.45745 0.489362
+    endloop
+  endfacet
+  facet normal -0.320576 -0.947223 -0
+    outer loop
+       vertex 2.14023 0.45745 0.489362
+       vertex 2.14023 0.45745 -0.510638
+       vertex 2.14776 0.454904 -0.510638
+    endloop
+  endfacet
+  facet normal -0.320576 -0.947223 0
+    outer loop
+       vertex 2.14023 0.45745 0.489362
+       vertex 2.14776 0.454904 -0.510638
+       vertex 2.14776 0.454904 0.489362
+    endloop
+  endfacet
+  facet normal -0.37264 -0.927976 -0
+    outer loop
+       vertex 2.14776 0.454904 0.489362
+       vertex 2.14776 0.454904 -0.510638
+       vertex 2.15509 0.45196 -0.510638
+    endloop
+  endfacet
+  facet normal -0.37264 -0.927976 0
+    outer loop
+       vertex 2.14776 0.454904 0.489362
+       vertex 2.15509 0.45196 -0.510638
+       vertex 2.15509 0.45196 0.489362
+    endloop
+  endfacet
+  facet normal -0.424667 -0.90535 -0
+    outer loop
+       vertex 2.15509 0.45196 0.489362
+       vertex 2.15509 0.45196 -0.510638
+       vertex 2.16221 0.448617 -0.510638
+    endloop
+  endfacet
+  facet normal -0.424667 -0.90535 0
+    outer loop
+       vertex 2.15509 0.45196 0.489362
+       vertex 2.16221 0.448617 -0.510638
+       vertex 2.16221 0.448617 0.489362
+    endloop
+  endfacet
+  facet normal -0.476268 -0.8793 -0
+    outer loop
+       vertex 2.16221 0.448617 0.489362
+       vertex 2.16221 0.448617 -0.510638
+       vertex 2.16913 0.444874 -0.510638
+    endloop
+  endfacet
+  facet normal -0.476268 -0.8793 0
+    outer loop
+       vertex 2.16221 0.448617 0.489362
+       vertex 2.16913 0.444874 -0.510638
+       vertex 2.16913 0.444874 0.489362
+    endloop
+  endfacet
+  facet normal -0.527053 -0.849832 -0
+    outer loop
+       vertex 2.16913 0.444874 0.489362
+       vertex 2.16913 0.444874 -0.510638
+       vertex 2.17581 0.440728 -0.510638
+    endloop
+  endfacet
+  facet normal -0.527053 -0.849832 0
+    outer loop
+       vertex 2.16913 0.444874 0.489362
+       vertex 2.17581 0.440728 -0.510638
+       vertex 2.17581 0.440728 0.489362
+    endloop
+  endfacet
+  facet normal -0.576589 -0.817035 -0
+    outer loop
+       vertex 2.17581 0.440728 0.489362
+       vertex 2.17581 0.440728 -0.510638
+       vertex 2.18226 0.436178 -0.510638
+    endloop
+  endfacet
+  facet normal -0.576589 -0.817035 0
+    outer loop
+       vertex 2.17581 0.440728 0.489362
+       vertex 2.18226 0.436178 -0.510638
+       vertex 2.18226 0.436178 0.489362
+    endloop
+  endfacet
+  facet normal -0.624462 -0.781055 -0
+    outer loop
+       vertex 2.18226 0.436178 0.489362
+       vertex 2.18226 0.436178 -0.510638
+       vertex 2.18846 0.431223 -0.510638
+    endloop
+  endfacet
+  facet normal -0.624462 -0.781055 0
+    outer loop
+       vertex 2.18226 0.436178 0.489362
+       vertex 2.18846 0.431223 -0.510638
+       vertex 2.18846 0.431223 0.489362
+    endloop
+  endfacet
+  facet normal -0.670252 -0.742134 -0
+    outer loop
+       vertex 2.18846 0.431223 0.489362
+       vertex 2.18846 0.431223 -0.510638
+       vertex 2.19439 0.425862 -0.510638
+    endloop
+  endfacet
+  facet normal -0.670252 -0.742134 0
+    outer loop
+       vertex 2.18846 0.431223 0.489362
+       vertex 2.19439 0.425862 -0.510638
+       vertex 2.19439 0.425862 0.489362
+    endloop
+  endfacet
+  facet normal -0.713597 -0.700557 -0
+    outer loop
+       vertex 2.19439 0.425862 0.489362
+       vertex 2.19439 0.425862 -0.510638
+       vertex 2.20006 0.420091 -0.510638
+    endloop
+  endfacet
+  facet normal -0.713597 -0.700557 0
+    outer loop
+       vertex 2.19439 0.425862 0.489362
+       vertex 2.20006 0.420091 -0.510638
+       vertex 2.20006 0.420091 0.489362
+    endloop
+  endfacet
+  facet normal -0.75417 -0.65668 -0
+    outer loop
+       vertex 2.20006 0.420091 0.489362
+       vertex 2.20006 0.420091 -0.510638
+       vertex 2.20544 0.413911 -0.510638
+    endloop
+  endfacet
+  facet normal -0.75417 -0.65668 0
+    outer loop
+       vertex 2.20006 0.420091 0.489362
+       vertex 2.20544 0.413911 -0.510638
+       vertex 2.20544 0.413911 0.489362
+    endloop
+  endfacet
+  facet normal -0.791679 -0.610937 -0
+    outer loop
+       vertex 2.20544 0.413911 0.489362
+       vertex 2.20544 0.413911 -0.510638
+       vertex 2.21053 0.407319 -0.510638
+    endloop
+  endfacet
+  facet normal -0.791679 -0.610937 0
+    outer loop
+       vertex 2.20544 0.413911 0.489362
+       vertex 2.21053 0.407319 -0.510638
+       vertex 2.21053 0.407319 0.489362
+    endloop
+  endfacet
+  facet normal -0.82597 -0.563714 -0
+    outer loop
+       vertex 2.21053 0.407319 0.489362
+       vertex 2.21053 0.407319 -0.510638
+       vertex 2.21531 0.400314 -0.510638
+    endloop
+  endfacet
+  facet normal -0.82597 -0.563714 0
+    outer loop
+       vertex 2.21053 0.407319 0.489362
+       vertex 2.21531 0.400314 -0.510638
+       vertex 2.21531 0.400314 0.489362
+    endloop
+  endfacet
+  facet normal -0.856897 -0.515487 -0
+    outer loop
+       vertex 2.21531 0.400314 0.489362
+       vertex 2.21531 0.400314 -0.510638
+       vertex 2.21977 0.392895 -0.510638
+    endloop
+  endfacet
+  facet normal -0.856897 -0.515487 0
+    outer loop
+       vertex 2.21531 0.400314 0.489362
+       vertex 2.21977 0.392895 -0.510638
+       vertex 2.21977 0.392895 0.489362
+    endloop
+  endfacet
+  facet normal -0.884416 -0.466699 -0
+    outer loop
+       vertex 2.21977 0.392895 0.489362
+       vertex 2.21977 0.392895 -0.510638
+       vertex 2.2239 0.385059 -0.510638
+    endloop
+  endfacet
+  facet normal -0.884416 -0.466699 0
+    outer loop
+       vertex 2.21977 0.392895 0.489362
+       vertex 2.2239 0.385059 -0.510638
+       vertex 2.2239 0.385059 0.489362
+    endloop
+  endfacet
+  facet normal -0.908574 -0.417725 -0
+    outer loop
+       vertex 2.2239 0.385059 0.489362
+       vertex 2.2239 0.385059 -0.510638
+       vertex 2.2277 0.376805 -0.510638
+    endloop
+  endfacet
+  facet normal -0.908574 -0.417725 0
+    outer loop
+       vertex 2.2239 0.385059 0.489362
+       vertex 2.2277 0.376805 -0.510638
+       vertex 2.2277 0.376805 0.489362
+    endloop
+  endfacet
+  facet normal -0.929423 -0.369016 -0
+    outer loop
+       vertex 2.2277 0.376805 0.489362
+       vertex 2.2277 0.376805 -0.510638
+       vertex 2.23114 0.368132 -0.510638
+    endloop
+  endfacet
+  facet normal -0.929423 -0.369016 0
+    outer loop
+       vertex 2.2277 0.376805 0.489362
+       vertex 2.23114 0.368132 -0.510638
+       vertex 2.23114 0.368132 0.489362
+    endloop
+  endfacet
+  facet normal -0.947123 -0.320871 -0
+    outer loop
+       vertex 2.23114 0.368132 0.489362
+       vertex 2.23114 0.368132 -0.510638
+       vertex 2.23422 0.359039 -0.510638
+    endloop
+  endfacet
+  facet normal -0.947123 -0.320871 0
+    outer loop
+       vertex 2.23114 0.368132 0.489362
+       vertex 2.23422 0.359039 -0.510638
+       vertex 2.23422 0.359039 0.489362
+    endloop
+  endfacet
+  facet normal -0.961848 -0.273584 -0
+    outer loop
+       vertex 2.23422 0.359039 0.489362
+       vertex 2.23422 0.359039 -0.510638
+       vertex 2.23693 0.349522 -0.510638
+    endloop
+  endfacet
+  facet normal -0.961848 -0.273584 0
+    outer loop
+       vertex 2.23422 0.359039 0.489362
+       vertex 2.23693 0.349522 -0.510638
+       vertex 2.23693 0.349522 0.489362
+    endloop
+  endfacet
+  facet normal -0.973796 -0.227423 -0
+    outer loop
+       vertex 2.23693 0.349522 0.489362
+       vertex 2.23693 0.349522 -0.510638
+       vertex 2.23925 0.339582 -0.510638
+    endloop
+  endfacet
+  facet normal -0.973796 -0.227423 0
+    outer loop
+       vertex 2.23693 0.349522 0.489362
+       vertex 2.23925 0.339582 -0.510638
+       vertex 2.23925 0.339582 0.489362
+    endloop
+  endfacet
+  facet normal -0.983194 -0.182562 -0
+    outer loop
+       vertex 2.23925 0.339582 0.489362
+       vertex 2.23925 0.339582 -0.510638
+       vertex 2.24118 0.329216 -0.510638
+    endloop
+  endfacet
+  facet normal -0.983194 -0.182562 0
+    outer loop
+       vertex 2.23925 0.339582 0.489362
+       vertex 2.24118 0.329216 -0.510638
+       vertex 2.24118 0.329216 0.489362
+    endloop
+  endfacet
+  facet normal -0.990268 -0.139171 -0
+    outer loop
+       vertex 2.24118 0.329216 0.489362
+       vertex 2.24118 0.329216 -0.510638
+       vertex 2.24269 0.318423 -0.510638
+    endloop
+  endfacet
+  facet normal -0.990268 -0.139171 0
+    outer loop
+       vertex 2.24118 0.329216 0.489362
+       vertex 2.24269 0.318423 -0.510638
+       vertex 2.24269 0.318423 0.489362
+    endloop
+  endfacet
+  facet normal -0.995252 -0.0973329 -0
+    outer loop
+       vertex 2.24269 0.318423 0.489362
+       vertex 2.24269 0.318423 -0.510638
+       vertex 2.24379 0.307202 -0.510638
+    endloop
+  endfacet
+  facet normal -0.995252 -0.0973329 0
+    outer loop
+       vertex 2.24269 0.318423 0.489362
+       vertex 2.24379 0.307202 -0.510638
+       vertex 2.24379 0.307202 0.489362
+    endloop
+  endfacet
+  facet normal -0.998366 -0.0571385 -0
+    outer loop
+       vertex 2.24379 0.307202 0.489362
+       vertex 2.24379 0.307202 -0.510638
+       vertex 2.24446 0.29555 -0.510638
+    endloop
+  endfacet
+  facet normal -0.998366 -0.0571385 0
+    outer loop
+       vertex 2.24379 0.307202 0.489362
+       vertex 2.24446 0.29555 -0.510638
+       vertex 2.24446 0.29555 0.489362
+    endloop
+  endfacet
+  facet normal -0.999827 -0.0186029 -0
+    outer loop
+       vertex 2.24446 0.29555 0.489362
+       vertex 2.24446 0.29555 -0.510638
+       vertex 2.24468 0.283466 -0.510638
+    endloop
+  endfacet
+  facet normal -0.999827 -0.0186029 0
+    outer loop
+       vertex 2.24446 0.29555 0.489362
+       vertex 2.24468 0.283466 -0.510638
+       vertex 2.24468 0.283466 0.489362
+    endloop
+  endfacet
+  facet normal -1 0 -0
+    outer loop
+       vertex 2.24468 0.283466 0.489362
+       vertex 2.24468 0.283466 -0.510638
+       vertex 2.24468 0.00646639 -0.510638
+    endloop
+  endfacet
+  facet normal -1 -0 0
+    outer loop
+       vertex 2.24468 0.283466 0.489362
+       vertex 2.24468 0.00646639 -0.510638
+       vertex 2.24468 0.00646639 0.489362
+    endloop
+  endfacet
+  facet normal 0 1 0
+    outer loop
+       vertex 2.24468 0.00646639 0.489362
+       vertex 2.24468 0.00646639 -0.510638
+       vertex 2.15568 0.00646639 -0.510638
+    endloop
+  endfacet
+  facet normal 0 1 0
+    outer loop
+       vertex 2.24468 0.00646639 0.489362
+       vertex 2.15568 0.00646639 -0.510638
+       vertex 2.15568 0.00646639 0.489362
+    endloop
+  endfacet
+  facet normal 1 0 0
+    outer loop
+       vertex 2.15568 0.00646639 0.489362
+       vertex 2.15568 0.00646639 -0.510638
+       vertex 2.15568 0.284466 -0.510638
+    endloop
+  endfacet
+  facet normal 1 -0 0
+    outer loop
+       vertex 2.15568 0.00646639 0.489362
+       vertex 2.15568 0.284466 -0.510638
+       vertex 2.15568 0.284466 0.489362
+    endloop
+  endfacet
+  facet normal 0.999851 0.0172871 0
+    outer loop
+       vertex 2.15568 0.284466 0.489362
+       vertex 2.15568 0.284466 -0.510638
+       vertex 2.15557 0.290989 -0.510638
+    endloop
+  endfacet
+  facet normal 0.999851 0.0172871 0
+    outer loop
+       vertex 2.15568 0.284466 0.489362
+       vertex 2.15557 0.290989 -0.510638
+       vertex 2.15557 0.290989 0.489362
+    endloop
+  endfacet
+  facet normal 0.998606 0.0527807 0
+    outer loop
+       vertex 2.15557 0.290989 0.489362
+       vertex 2.15557 0.290989 -0.510638
+       vertex 2.15523 0.297354 -0.510638
+    endloop
+  endfacet
+  facet normal 0.998606 0.0527807 0
+    outer loop
+       vertex 2.15557 0.290989 0.489362
+       vertex 2.15523 0.297354 -0.510638
+       vertex 2.15523 0.297354 0.489362
+    endloop
+  endfacet
+  facet normal 0.995996 0.0893944 0
+    outer loop
+       vertex 2.15523 0.297354 0.489362
+       vertex 2.15523 0.297354 -0.510638
+       vertex 2.15468 0.303556 -0.510638
+    endloop
+  endfacet
+  facet normal 0.995996 0.0893944 0
+    outer loop
+       vertex 2.15523 0.297354 0.489362
+       vertex 2.15468 0.303556 -0.510638
+       vertex 2.15468 0.303556 0.489362
+    endloop
+  endfacet
+  facet normal 0.991875 0.127214 0
+    outer loop
+       vertex 2.15468 0.303556 0.489362
+       vertex 2.15468 0.303556 -0.510638
+       vertex 2.1539 0.309592 -0.510638
+    endloop
+  endfacet
+  facet normal 0.991875 0.127214 0
+    outer loop
+       vertex 2.15468 0.303556 0.489362
+       vertex 2.1539 0.309592 -0.510638
+       vertex 2.1539 0.309592 0.489362
+    endloop
+  endfacet
+  facet normal 0.986092 0.1662 0
+    outer loop
+       vertex 2.1539 0.309592 0.489362
+       vertex 2.1539 0.309592 -0.510638
+       vertex 2.15291 0.315457 -0.510638
+    endloop
+  endfacet
+  facet normal 0.986092 0.1662 0
+    outer loop
+       vertex 2.1539 0.309592 0.489362
+       vertex 2.15291 0.315457 -0.510638
+       vertex 2.15291 0.315457 0.489362
+    endloop
+  endfacet
+  facet normal 0.978489 0.206298 0
+    outer loop
+       vertex 2.15291 0.315457 0.489362
+       vertex 2.15291 0.315457 -0.510638
+       vertex 2.15171 0.321146 -0.510638
+    endloop
+  endfacet
+  facet normal 0.978489 0.206298 0
+    outer loop
+       vertex 2.15291 0.315457 0.489362
+       vertex 2.15171 0.321146 -0.510638
+       vertex 2.15171 0.321146 0.489362
+    endloop
+  endfacet
+  facet normal 0.968885 0.24751 0
+    outer loop
+       vertex 2.15171 0.321146 0.489362
+       vertex 2.15171 0.321146 -0.510638
+       vertex 2.15031 0.326656 -0.510638
+    endloop
+  endfacet
+  facet normal 0.968885 0.24751 0
+    outer loop
+       vertex 2.15171 0.321146 0.489362
+       vertex 2.15031 0.326656 -0.510638
+       vertex 2.15031 0.326656 0.489362
+    endloop
+  endfacet
+  facet normal 0.957082 0.289817 0
+    outer loop
+       vertex 2.15031 0.326656 0.489362
+       vertex 2.15031 0.326656 -0.510638
+       vertex 2.14869 0.33198 -0.510638
+    endloop
+  endfacet
+  facet normal 0.957082 0.289817 0
+    outer loop
+       vertex 2.15031 0.326656 0.489362
+       vertex 2.14869 0.33198 -0.510638
+       vertex 2.14869 0.33198 0.489362
+    endloop
+  endfacet
+  facet normal 0.942907 0.333057 0
+    outer loop
+       vertex 2.14869 0.33198 0.489362
+       vertex 2.14869 0.33198 -0.510638
+       vertex 2.14688 0.337116 -0.510638
+    endloop
+  endfacet
+  facet normal 0.942907 0.333057 0
+    outer loop
+       vertex 2.14869 0.33198 0.489362
+       vertex 2.14688 0.337116 -0.510638
+       vertex 2.14688 0.337116 0.489362
+    endloop
+  endfacet
+  facet normal 0.926153 0.377149 0
+    outer loop
+       vertex 2.14688 0.337116 0.489362
+       vertex 2.14688 0.337116 -0.510638
+       vertex 2.14487 0.342059 -0.510638
+    endloop
+  endfacet
+  facet normal 0.926153 0.377149 0
+    outer loop
+       vertex 2.14688 0.337116 0.489362
+       vertex 2.14487 0.342059 -0.510638
+       vertex 2.14487 0.342059 0.489362
+    endloop
+  endfacet
+  facet normal 0.906606 0.421978 0
+    outer loop
+       vertex 2.14487 0.342059 0.489362
+       vertex 2.14487 0.342059 -0.510638
+       vertex 2.14266 0.346804 -0.510638
+    endloop
+  endfacet
+  facet normal 0.906606 0.421978 0
+    outer loop
+       vertex 2.14487 0.342059 0.489362
+       vertex 2.14266 0.346804 -0.510638
+       vertex 2.14266 0.346804 0.489362
+    endloop
+  endfacet
+  facet normal 0.884112 0.467276 0
+    outer loop
+       vertex 2.14266 0.346804 0.489362
+       vertex 2.14266 0.346804 -0.510638
+       vertex 2.14026 0.351346 -0.510638
+    endloop
+  endfacet
+  facet normal 0.884112 0.467276 0
+    outer loop
+       vertex 2.14266 0.346804 0.489362
+       vertex 2.14026 0.351346 -0.510638
+       vertex 2.14026 0.351346 0.489362
+    endloop
+  endfacet
+  facet normal 0.858486 0.512837 0
+    outer loop
+       vertex 2.14026 0.351346 0.489362
+       vertex 2.14026 0.351346 -0.510638
+       vertex 2.13767 0.355682 -0.510638
+    endloop
+  endfacet
+  facet normal 0.858486 0.512837 0
+    outer loop
+       vertex 2.14026 0.351346 0.489362
+       vertex 2.13767 0.355682 -0.510638
+       vertex 2.13767 0.355682 0.489362
+    endloop
+  endfacet
+  facet normal 0.829582 0.558385 0
+    outer loop
+       vertex 2.13767 0.355682 0.489362
+       vertex 2.13767 0.355682 -0.510638
+       vertex 2.13489 0.359807 -0.510638
+    endloop
+  endfacet
+  facet normal 0.829582 0.558385 0
+    outer loop
+       vertex 2.13767 0.355682 0.489362
+       vertex 2.13489 0.359807 -0.510638
+       vertex 2.13489 0.359807 0.489362
+    endloop
+  endfacet
+  facet normal 0.797295 0.603589 0
+    outer loop
+       vertex 2.13489 0.359807 0.489362
+       vertex 2.13489 0.359807 -0.510638
+       vertex 2.13193 0.363716 -0.510638
+    endloop
+  endfacet
+  facet normal 0.797295 0.603589 0
+    outer loop
+       vertex 2.13489 0.359807 0.489362
+       vertex 2.13193 0.363716 -0.510638
+       vertex 2.13193 0.363716 0.489362
+    endloop
+  endfacet
+  facet normal 0.76157 0.648083 0
+    outer loop
+       vertex 2.13193 0.363716 0.489362
+       vertex 2.13193 0.363716 -0.510638
+       vertex 2.12879 0.367406 -0.510638
+    endloop
+  endfacet
+  facet normal 0.76157 0.648083 0
+    outer loop
+       vertex 2.13193 0.363716 0.489362
+       vertex 2.12879 0.367406 -0.510638
+       vertex 2.12879 0.367406 0.489362
+    endloop
+  endfacet
+  facet normal 0.72241 0.691465 0
+    outer loop
+       vertex 2.12879 0.367406 0.489362
+       vertex 2.12879 0.367406 -0.510638
+       vertex 2.12548 0.37087 -0.510638
+    endloop
+  endfacet
+  facet normal 0.72241 0.691465 0
+    outer loop
+       vertex 2.12879 0.367406 0.489362
+       vertex 2.12548 0.37087 -0.510638
+       vertex 2.12548 0.37087 0.489362
+    endloop
+  endfacet
+  facet normal 0.67989 0.733314 0
+    outer loop
+       vertex 2.12548 0.37087 0.489362
+       vertex 2.12548 0.37087 -0.510638
+       vertex 2.12199 0.374106 -0.510638
+    endloop
+  endfacet
+  facet normal 0.67989 0.733314 0
+    outer loop
+       vertex 2.12548 0.37087 0.489362
+       vertex 2.12199 0.374106 -0.510638
+       vertex 2.12199 0.374106 0.489362
+    endloop
+  endfacet
+  facet normal 0.634159 0.773202 0
+    outer loop
+       vertex 2.12199 0.374106 0.489362
+       vertex 2.12199 0.374106 -0.510638
+       vertex 2.11832 0.377109 -0.510638
+    endloop
+  endfacet
+  facet normal 0.634159 0.773202 0
+    outer loop
+       vertex 2.12199 0.374106 0.489362
+       vertex 2.11832 0.377109 -0.510638
+       vertex 2.11832 0.377109 0.489362
+    endloop
+  endfacet
+  facet normal 0.585483 0.810685 0
+    outer loop
+       vertex 2.11832 0.377109 0.489362
+       vertex 2.11832 0.377109 -0.510638
+       vertex 2.1145 0.379874 -0.510638
+    endloop
+  endfacet
+  facet normal 0.585483 0.810685 0
+    outer loop
+       vertex 2.11832 0.377109 0.489362
+       vertex 2.1145 0.379874 -0.510638
+       vertex 2.1145 0.379874 0.489362
+    endloop
+  endfacet
+  facet normal 0.534117 0.84541 0
+    outer loop
+       vertex 2.1145 0.379874 0.489362
+       vertex 2.1145 0.379874 -0.510638
+       vertex 2.1105 0.382396 -0.510638
+    endloop
+  endfacet
+  facet normal 0.534117 0.84541 0
+    outer loop
+       vertex 2.1145 0.379874 0.489362
+       vertex 2.1105 0.382396 -0.510638
+       vertex 2.1105 0.382396 0.489362
+    endloop
+  endfacet
+  facet normal 0.480476 0.877008 0
+    outer loop
+       vertex 2.1105 0.382396 0.489362
+       vertex 2.1105 0.382396 -0.510638
+       vertex 2.10635 0.384672 -0.510638
+    endloop
+  endfacet
+  facet normal 0.480476 0.877008 0
+    outer loop
+       vertex 2.1105 0.382396 0.489362
+       vertex 2.10635 0.384672 -0.510638
+       vertex 2.10635 0.384672 0.489362
+    endloop
+  endfacet
+  facet normal 0.425027 0.90518 0
+    outer loop
+       vertex 2.10635 0.384672 0.489362
+       vertex 2.10635 0.384672 -0.510638
+       vertex 2.10204 0.386697 -0.510638
+    endloop
+  endfacet
+  facet normal 0.425027 0.90518 0
+    outer loop
+       vertex 2.10635 0.384672 0.489362
+       vertex 2.10204 0.386697 -0.510638
+       vertex 2.10204 0.386697 0.489362
+    endloop
+  endfacet
+  facet normal 0.368209 0.929743 0
+    outer loop
+       vertex 2.10204 0.386697 0.489362
+       vertex 2.10204 0.386697 -0.510638
+       vertex 2.09757 0.388466 -0.510638
+    endloop
+  endfacet
+  facet normal 0.368209 0.929743 0
+    outer loop
+       vertex 2.10204 0.386697 0.489362
+       vertex 2.09757 0.388466 -0.510638
+       vertex 2.09757 0.388466 0.489362
+    endloop
+  endfacet
+  facet normal 0.310567 0.950552 0
+    outer loop
+       vertex 2.09757 0.388466 0.489362
+       vertex 2.09757 0.388466 -0.510638
+       vertex 2.09295 0.389976 -0.510638
+    endloop
+  endfacet
+  facet normal 0.310567 0.950552 0
+    outer loop
+       vertex 2.09757 0.388466 0.489362
+       vertex 2.09295 0.389976 -0.510638
+       vertex 2.09295 0.389976 0.489362
+    endloop
+  endfacet
+  facet normal 0.252591 0.967573 0
+    outer loop
+       vertex 2.09295 0.389976 0.489362
+       vertex 2.09295 0.389976 -0.510638
+       vertex 2.08818 0.39122 -0.510638
+    endloop
+  endfacet
+  facet normal 0.252591 0.967573 0
+    outer loop
+       vertex 2.09295 0.389976 0.489362
+       vertex 2.08818 0.39122 -0.510638
+       vertex 2.08818 0.39122 0.489362
+    endloop
+  endfacet
+  facet normal 0.194797 0.980844 0
+    outer loop
+       vertex 2.08818 0.39122 0.489362
+       vertex 2.08818 0.39122 -0.510638
+       vertex 2.08327 0.392196 -0.510638
+    endloop
+  endfacet
+  facet normal 0.194797 0.980844 0
+    outer loop
+       vertex 2.08818 0.39122 0.489362
+       vertex 2.08327 0.392196 -0.510638
+       vertex 2.08327 0.392196 0.489362
+    endloop
+  endfacet
+  facet normal 0.137616 0.990486 0
+    outer loop
+       vertex 2.08327 0.392196 0.489362
+       vertex 2.08327 0.392196 -0.510638
+       vertex 2.07821 0.392899 -0.510638
+    endloop
+  endfacet
+  facet normal 0.137616 0.990486 0
+    outer loop
+       vertex 2.08327 0.392196 0.489362
+       vertex 2.07821 0.392899 -0.510638
+       vertex 2.07821 0.392899 0.489362
+    endloop
+  endfacet
+  facet normal 0.0814786 0.996675 0
+    outer loop
+       vertex 2.07821 0.392899 0.489362
+       vertex 2.07821 0.392899 -0.510638
+       vertex 2.07301 0.393324 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0814786 0.996675 0
+    outer loop
+       vertex 2.07821 0.392899 0.489362
+       vertex 2.07301 0.393324 -0.510638
+       vertex 2.07301 0.393324 0.489362
+    endloop
+  endfacet
+  facet normal 0.0267318 0.999643 0
+    outer loop
+       vertex 2.07301 0.393324 0.489362
+       vertex 2.07301 0.393324 -0.510638
+       vertex 2.06768 0.393466 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0267318 0.999643 0
+    outer loop
+       vertex 2.07301 0.393324 0.489362
+       vertex 2.06768 0.393466 -0.510638
+       vertex 2.06768 0.393466 0.489362
+    endloop
+  endfacet
+  facet normal -0.0156 0.999878 0
+    outer loop
+       vertex 2.06768 0.393466 0.489362
+       vertex 2.06768 0.393466 -0.510638
+       vertex 2.06381 0.393406 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0156 0.999878 0
+    outer loop
+       vertex 2.06768 0.393466 0.489362
+       vertex 2.06381 0.393406 -0.510638
+       vertex 2.06381 0.393406 0.489362
+    endloop
+  endfacet
+  facet normal -0.0477545 0.998859 0
+    outer loop
+       vertex 2.06381 0.393406 0.489362
+       vertex 2.06381 0.393406 -0.510638
+       vertex 2.05998 0.393223 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0477545 0.998859 0
+    outer loop
+       vertex 2.06381 0.393406 0.489362
+       vertex 2.05998 0.393223 -0.510638
+       vertex 2.05998 0.393223 0.489362
+    endloop
+  endfacet
+  facet normal -0.0811412 0.996703 0
+    outer loop
+       vertex 2.05998 0.393223 0.489362
+       vertex 2.05998 0.393223 -0.510638
+       vertex 2.0562 0.392915 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0811412 0.996703 0
+    outer loop
+       vertex 2.05998 0.393223 0.489362
+       vertex 2.0562 0.392915 -0.510638
+       vertex 2.0562 0.392915 0.489362
+    endloop
+  endfacet
+  facet normal -0.115573 0.993299 0
+    outer loop
+       vertex 2.0562 0.392915 0.489362
+       vertex 2.0562 0.392915 -0.510638
+       vertex 2.05246 0.39248 -0.510638
+    endloop
+  endfacet
+  facet normal -0.115573 0.993299 0
+    outer loop
+       vertex 2.0562 0.392915 0.489362
+       vertex 2.05246 0.39248 -0.510638
+       vertex 2.05246 0.39248 0.489362
+    endloop
+  endfacet
+  facet normal -0.150797 0.988565 0
+    outer loop
+       vertex 2.05246 0.39248 0.489362
+       vertex 2.05246 0.39248 -0.510638
+       vertex 2.04876 0.391915 -0.510638
+    endloop
+  endfacet
+  facet normal -0.150797 0.988565 0
+    outer loop
+       vertex 2.05246 0.39248 0.489362
+       vertex 2.04876 0.391915 -0.510638
+       vertex 2.04876 0.391915 0.489362
+    endloop
+  endfacet
+  facet normal -0.186569 0.982442 0
+    outer loop
+       vertex 2.04876 0.391915 0.489362
+       vertex 2.04876 0.391915 -0.510638
+       vertex 2.04509 0.391218 -0.510638
+    endloop
+  endfacet
+  facet normal -0.186569 0.982442 0
+    outer loop
+       vertex 2.04876 0.391915 0.489362
+       vertex 2.04509 0.391218 -0.510638
+       vertex 2.04509 0.391218 0.489362
+    endloop
+  endfacet
+  facet normal -0.222599 0.97491 0
+    outer loop
+       vertex 2.04509 0.391218 0.489362
+       vertex 2.04509 0.391218 -0.510638
+       vertex 2.04145 0.390387 -0.510638
+    endloop
+  endfacet
+  facet normal -0.222599 0.97491 0
+    outer loop
+       vertex 2.04509 0.391218 0.489362
+       vertex 2.04145 0.390387 -0.510638
+       vertex 2.04145 0.390387 0.489362
+    endloop
+  endfacet
+  facet normal -0.258607 0.965983 0
+    outer loop
+       vertex 2.04145 0.390387 0.489362
+       vertex 2.04145 0.390387 -0.510638
+       vertex 2.03783 0.389418 -0.510638
+    endloop
+  endfacet
+  facet normal -0.258607 0.965983 0
+    outer loop
+       vertex 2.04145 0.390387 0.489362
+       vertex 2.03783 0.389418 -0.510638
+       vertex 2.03783 0.389418 0.489362
+    endloop
+  endfacet
+  facet normal -0.294304 0.955712 0
+    outer loop
+       vertex 2.03783 0.389418 0.489362
+       vertex 2.03783 0.389418 -0.510638
+       vertex 2.03423 0.388309 -0.510638
+    endloop
+  endfacet
+  facet normal -0.294304 0.955712 0
+    outer loop
+       vertex 2.03783 0.389418 0.489362
+       vertex 2.03423 0.388309 -0.510638
+       vertex 2.03423 0.388309 0.489362
+    endloop
+  endfacet
+  facet normal -0.329423 0.944183 0
+    outer loop
+       vertex 2.03423 0.388309 0.489362
+       vertex 2.03423 0.388309 -0.510638
+       vertex 2.03065 0.387059 -0.510638
+    endloop
+  endfacet
+  facet normal -0.329423 0.944183 0
+    outer loop
+       vertex 2.03423 0.388309 0.489362
+       vertex 2.03065 0.387059 -0.510638
+       vertex 2.03065 0.387059 0.489362
+    endloop
+  endfacet
+  facet normal -0.36366 0.931532 0
+    outer loop
+       vertex 2.03065 0.387059 0.489362
+       vertex 2.03065 0.387059 -0.510638
+       vertex 2.02707 0.385664 -0.510638
+    endloop
+  endfacet
+  facet normal -0.36366 0.931532 0
+    outer loop
+       vertex 2.03065 0.387059 0.489362
+       vertex 2.02707 0.385664 -0.510638
+       vertex 2.02707 0.385664 0.489362
+    endloop
+  endfacet
+  facet normal -0.396839 0.917888 0
+    outer loop
+       vertex 2.02707 0.385664 0.489362
+       vertex 2.02707 0.385664 -0.510638
+       vertex 2.02351 0.384122 -0.510638
+    endloop
+  endfacet
+  facet normal -0.396839 0.917888 0
+    outer loop
+       vertex 2.02707 0.385664 0.489362
+       vertex 2.02351 0.384122 -0.510638
+       vertex 2.02351 0.384122 0.489362
+    endloop
+  endfacet
+  facet normal -0.428737 0.903429 0
+    outer loop
+       vertex 2.02351 0.384122 0.489362
+       vertex 2.02351 0.384122 -0.510638
+       vertex 2.01994 0.382431 -0.510638
+    endloop
+  endfacet
+  facet normal -0.428737 0.903429 0
+    outer loop
+       vertex 2.02351 0.384122 0.489362
+       vertex 2.01994 0.382431 -0.510638
+       vertex 2.01994 0.382431 0.489362
+    endloop
+  endfacet
+  facet normal -0.459222 0.888322 0
+    outer loop
+       vertex 2.01994 0.382431 0.489362
+       vertex 2.01994 0.382431 -0.510638
+       vertex 2.01638 0.380588 -0.510638
+    endloop
+  endfacet
+  facet normal -0.459222 0.888322 0
+    outer loop
+       vertex 2.01994 0.382431 0.489362
+       vertex 2.01638 0.380588 -0.510638
+       vertex 2.01638 0.380588 0.489362
+    endloop
+  endfacet
+  facet normal -0.488127 0.872773 0
+    outer loop
+       vertex 2.01638 0.380588 0.489362
+       vertex 2.01638 0.380588 -0.510638
+       vertex 2.01281 0.378591 -0.510638
+    endloop
+  endfacet
+  facet normal -0.488127 0.872773 0
+    outer loop
+       vertex 2.01638 0.380588 0.489362
+       vertex 2.01281 0.378591 -0.510638
+       vertex 2.01281 0.378591 0.489362
+    endloop
+  endfacet
+  facet normal -0.515423 0.856936 0
+    outer loop
+       vertex 2.01281 0.378591 0.489362
+       vertex 2.01281 0.378591 -0.510638
+       vertex 2.00923 0.376438 -0.510638
+    endloop
+  endfacet
+  facet normal -0.515423 0.856936 0
+    outer loop
+       vertex 2.01281 0.378591 0.489362
+       vertex 2.00923 0.376438 -0.510638
+       vertex 2.00923 0.376438 0.489362
+    endloop
+  endfacet
+  facet normal -0.541063 0.840982 0
+    outer loop
+       vertex 2.00923 0.376438 0.489362
+       vertex 2.00923 0.376438 -0.510638
+       vertex 2.00563 0.374125 -0.510638
+    endloop
+  endfacet
+  facet normal -0.541063 0.840982 0
+    outer loop
+       vertex 2.00923 0.376438 0.489362
+       vertex 2.00563 0.374125 -0.510638
+       vertex 2.00563 0.374125 0.489362
+    endloop
+  endfacet
+  facet normal -0.564998 0.825092 0
+    outer loop
+       vertex 2.00563 0.374125 0.489362
+       vertex 2.00563 0.374125 -0.510638
+       vertex 2.00202 0.37165 -0.510638
+    endloop
+  endfacet
+  facet normal -0.564998 0.825092 0
+    outer loop
+       vertex 2.00563 0.374125 0.489362
+       vertex 2.00202 0.37165 -0.510638
+       vertex 2.00202 0.37165 0.489362
+    endloop
+  endfacet
+  facet normal -0.587303 0.809367 0
+    outer loop
+       vertex 2.00202 0.37165 0.489362
+       vertex 2.00202 0.37165 -0.510638
+       vertex 1.99838 0.369012 -0.510638
+    endloop
+  endfacet
+  facet normal -0.587303 0.809367 0
+    outer loop
+       vertex 2.00202 0.37165 0.489362
+       vertex 1.99838 0.369012 -0.510638
+       vertex 1.99838 0.369012 0.489362
+    endloop
+  endfacet
+  facet normal -0.607966 0.793963 0
+    outer loop
+       vertex 1.99838 0.369012 0.489362
+       vertex 1.99838 0.369012 -0.510638
+       vertex 1.99472 0.366207 -0.510638
+    endloop
+  endfacet
+  facet normal -0.607966 0.793963 0
+    outer loop
+       vertex 1.99838 0.369012 0.489362
+       vertex 1.99472 0.366207 -0.510638
+       vertex 1.99472 0.366207 0.489362
+    endloop
+  endfacet
+  facet normal -0.627069 0.778963 0
+    outer loop
+       vertex 1.99472 0.366207 0.489362
+       vertex 1.99472 0.366207 -0.510638
+       vertex 1.99103 0.363233 -0.510638
+    endloop
+  endfacet
+  facet normal -0.627069 0.778963 0
+    outer loop
+       vertex 1.99472 0.366207 0.489362
+       vertex 1.99103 0.363233 -0.510638
+       vertex 1.99103 0.363233 0.489362
+    endloop
+  endfacet
+  facet normal -0.644684 0.76445 0
+    outer loop
+       vertex 1.99103 0.363233 0.489362
+       vertex 1.99103 0.363233 -0.510638
+       vertex 1.9873 0.360088 -0.510638
+    endloop
+  endfacet
+  facet normal -0.644684 0.76445 0
+    outer loop
+       vertex 1.99103 0.363233 0.489362
+       vertex 1.9873 0.360088 -0.510638
+       vertex 1.9873 0.360088 0.489362
+    endloop
+  endfacet
+  facet normal -0.660874 0.750497 0
+    outer loop
+       vertex 1.9873 0.360088 0.489362
+       vertex 1.9873 0.360088 -0.510638
+       vertex 1.98353 0.356769 -0.510638
+    endloop
+  endfacet
+  facet normal -0.660874 0.750497 0
+    outer loop
+       vertex 1.9873 0.360088 0.489362
+       vertex 1.98353 0.356769 -0.510638
+       vertex 1.98353 0.356769 0.489362
+    endloop
+  endfacet
+  facet normal -0.675737 0.737143 0
+    outer loop
+       vertex 1.98353 0.356769 0.489362
+       vertex 1.98353 0.356769 -0.510638
+       vertex 1.97971 0.353274 -0.510638
+    endloop
+  endfacet
+  facet normal -0.675737 0.737143 0
+    outer loop
+       vertex 1.98353 0.356769 0.489362
+       vertex 1.97971 0.353274 -0.510638
+       vertex 1.97971 0.353274 0.489362
+    endloop
+  endfacet
+  facet normal -0.689347 0.724432 0
+    outer loop
+       vertex 1.97971 0.353274 0.489362
+       vertex 1.97971 0.353274 -0.510638
+       vertex 1.97585 0.349601 -0.510638
+    endloop
+  endfacet
+  facet normal -0.689347 0.724432 0
+    outer loop
+       vertex 1.97971 0.353274 0.489362
+       vertex 1.97585 0.349601 -0.510638
+       vertex 1.97585 0.349601 0.489362
+    endloop
+  endfacet
+  facet normal -0.7018 0.712374 0
+    outer loop
+       vertex 1.97585 0.349601 0.489362
+       vertex 1.97585 0.349601 -0.510638
+       vertex 1.97194 0.345746 -0.510638
+    endloop
+  endfacet
+  facet normal -0.7018 0.712374 0
+    outer loop
+       vertex 1.97585 0.349601 0.489362
+       vertex 1.97194 0.345746 -0.510638
+       vertex 1.97194 0.345746 0.489362
+    endloop
+  endfacet
+  facet normal -0.71317 0.700991 0
+    outer loop
+       vertex 1.97194 0.345746 0.489362
+       vertex 1.97194 0.345746 -0.510638
+       vertex 1.96797 0.341707 -0.510638
+    endloop
+  endfacet
+  facet normal -0.71317 0.700991 0
+    outer loop
+       vertex 1.97194 0.345746 0.489362
+       vertex 1.96797 0.341707 -0.510638
+       vertex 1.96797 0.341707 0.489362
+    endloop
+  endfacet
+  facet normal -0.723562 0.69026 0
+    outer loop
+       vertex 1.96797 0.341707 0.489362
+       vertex 1.96797 0.341707 -0.510638
+       vertex 1.96394 0.337483 -0.510638
+    endloop
+  endfacet
+  facet normal -0.723562 0.69026 0
+    outer loop
+       vertex 1.96797 0.341707 0.489362
+       vertex 1.96394 0.337483 -0.510638
+       vertex 1.96394 0.337483 0.489362
+    endloop
+  endfacet
+  facet normal -0.733017 0.68021 0
+    outer loop
+       vertex 1.96394 0.337483 0.489362
+       vertex 1.96394 0.337483 -0.510638
+       vertex 1.95985 0.33307 -0.510638
+    endloop
+  endfacet
+  facet normal -0.733017 0.68021 0
+    outer loop
+       vertex 1.96394 0.337483 0.489362
+       vertex 1.95985 0.33307 -0.510638
+       vertex 1.95985 0.33307 0.489362
+    endloop
+  endfacet
+  facet normal -0.741631 0.670808 0
+    outer loop
+       vertex 1.95985 0.33307 0.489362
+       vertex 1.95985 0.33307 -0.510638
+       vertex 1.95568 0.328466 -0.510638
+    endloop
+  endfacet
+  facet normal -0.741631 0.670808 0
+    outer loop
+       vertex 1.95985 0.33307 0.489362
+       vertex 1.95568 0.328466 -0.510638
+       vertex 1.95568 0.328466 0.489362
+    endloop
+  endfacet
+  facet normal -1 0 -0
+    outer loop
+       vertex 1.95568 0.328466 0.489362
+       vertex 1.95568 0.328466 -0.510638
+       vertex 1.95568 0.00646639 -0.510638
+    endloop
+  endfacet
+  facet normal -1 -0 0
+    outer loop
+       vertex 1.95568 0.328466 0.489362
+       vertex 1.95568 0.00646639 -0.510638
+       vertex 1.95568 0.00646639 0.489362
+    endloop
+  endfacet
+  facet normal 0 1 0
+    outer loop
+       vertex 1.95568 0.00646639 0.489362
+       vertex 1.95568 0.00646639 -0.510638
+       vertex 1.86668 0.00646639 -0.510638
+    endloop
+  endfacet
+  facet normal 0 1 0
+    outer loop
+       vertex 1.95568 0.00646639 0.489362
+       vertex 1.86668 0.00646639 -0.510638
+       vertex 1.86668 0.00646639 0.489362
+    endloop
+  endfacet
+  facet normal 1 0 0
+    outer loop
+       vertex 1.86668 0.00646639 0.489362
+       vertex 1.86668 0.00646639 -0.510638
+       vertex 1.86668 0.455466 -0.510638
+    endloop
+  endfacet
+  facet normal 1 -0 0
+    outer loop
+       vertex 1.86668 0.00646639 0.489362
+       vertex 1.86668 0.455466 -0.510638
+       vertex 1.86668 0.455466 0.489362
+    endloop
+  endfacet
+  facet normal 0 -1 0
+    outer loop
+       vertex 1.86668 0.455466 0.489362
+       vertex 1.86668 0.455466 -0.510638
+       vertex 1.95568 0.455466 -0.510638
+    endloop
+  endfacet
+  facet normal 0 -1 0
+    outer loop
+       vertex 1.86668 0.455466 0.489362
+       vertex 1.95568 0.455466 -0.510638
+       vertex 1.95568 0.455466 0.489362
+    endloop
+  endfacet
+  facet normal -1 0 -0
+    outer loop
+       vertex 1.95568 0.455466 0.489362
+       vertex 1.95568 0.455466 -0.510638
+       vertex 1.95568 0.396466 -0.510638
+    endloop
+  endfacet
+  facet normal -1 -0 0
+    outer loop
+       vertex 1.95568 0.455466 0.489362
+       vertex 1.95568 0.396466 -0.510638
+       vertex 1.95568 0.396466 0.489362
+    endloop
+  endfacet
+  facet normal 0 -1 0
+    outer loop
+       vertex 1.95568 0.396466 0.489362
+       vertex 1.95568 0.396466 -0.510638
+       vertex 1.95768 0.396466 -0.510638
+    endloop
+  endfacet
+  facet normal 0 -1 0
+    outer loop
+       vertex 1.95568 0.396466 0.489362
+       vertex 1.95768 0.396466 -0.510638
+       vertex 1.95768 0.396466 0.489362
+    endloop
+  endfacet
+  facet normal 0.487934 0.872881 0
+    outer loop
+       vertex 2.95332 0.541277 0.489362
+       vertex 2.95332 0.541277 -0.510638
+       vertex 2.94504 0.545908 -0.510638
+    endloop
+  endfacet
+  facet normal 0.487934 0.872881 0
+    outer loop
+       vertex 2.95332 0.541277 0.489362
+       vertex 2.94504 0.545908 -0.510638
+       vertex 2.94504 0.545908 0.489362
+    endloop
+  endfacet
+  facet normal 0.47667 0.879082 0
+    outer loop
+       vertex 2.94504 0.545908 0.489362
+       vertex 2.94504 0.545908 -0.510638
+       vertex 2.93682 0.550362 -0.510638
+    endloop
+  endfacet
+  facet normal 0.47667 0.879082 0
+    outer loop
+       vertex 2.94504 0.545908 0.489362
+       vertex 2.93682 0.550362 -0.510638
+       vertex 2.93682 0.550362 0.489362
+    endloop
+  endfacet
+  facet normal 0.464851 0.885389 0
+    outer loop
+       vertex 2.93682 0.550362 0.489362
+       vertex 2.93682 0.550362 -0.510638
+       vertex 2.92868 0.554638 -0.510638
+    endloop
+  endfacet
+  facet normal 0.464851 0.885389 0
+    outer loop
+       vertex 2.93682 0.550362 0.489362
+       vertex 2.92868 0.554638 -0.510638
+       vertex 2.92868 0.554638 0.489362
+    endloop
+  endfacet
+  facet normal 0.452488 0.891771 0
+    outer loop
+       vertex 2.92868 0.554638 0.489362
+       vertex 2.92868 0.554638 -0.510638
+       vertex 2.92059 0.55874 -0.510638
+    endloop
+  endfacet
+  facet normal 0.452488 0.891771 0
+    outer loop
+       vertex 2.92868 0.554638 0.489362
+       vertex 2.92059 0.55874 -0.510638
+       vertex 2.92059 0.55874 0.489362
+    endloop
+  endfacet
+  facet normal 0.439575 0.898206 0
+    outer loop
+       vertex 2.92059 0.55874 0.489362
+       vertex 2.92059 0.55874 -0.510638
+       vertex 2.91257 0.562667 -0.510638
+    endloop
+  endfacet
+  facet normal 0.439575 0.898206 0
+    outer loop
+       vertex 2.92059 0.55874 0.489362
+       vertex 2.91257 0.562667 -0.510638
+       vertex 2.91257 0.562667 0.489362
+    endloop
+  endfacet
+  facet normal 0.426099 0.904677 0
+    outer loop
+       vertex 2.91257 0.562667 0.489362
+       vertex 2.91257 0.562667 -0.510638
+       vertex 2.9046 0.56642 -0.510638
+    endloop
+  endfacet
+  facet normal 0.426099 0.904677 0
+    outer loop
+       vertex 2.91257 0.562667 0.489362
+       vertex 2.9046 0.56642 -0.510638
+       vertex 2.9046 0.56642 0.489362
+    endloop
+  endfacet
+  facet normal 0.412068 0.911153 0
+    outer loop
+       vertex 2.9046 0.56642 0.489362
+       vertex 2.9046 0.56642 -0.510638
+       vertex 2.89668 0.570001 -0.510638
+    endloop
+  endfacet
+  facet normal 0.412068 0.911153 0
+    outer loop
+       vertex 2.9046 0.56642 0.489362
+       vertex 2.89668 0.570001 -0.510638
+       vertex 2.89668 0.570001 0.489362
+    endloop
+  endfacet
+  facet normal 0.397471 0.917615 0
+    outer loop
+       vertex 2.89668 0.570001 0.489362
+       vertex 2.89668 0.570001 -0.510638
+       vertex 2.88881 0.573412 -0.510638
+    endloop
+  endfacet
+  facet normal 0.397471 0.917615 0
+    outer loop
+       vertex 2.89668 0.570001 0.489362
+       vertex 2.88881 0.573412 -0.510638
+       vertex 2.88881 0.573412 0.489362
+    endloop
+  endfacet
+  facet normal 0.382343 0.924021 0
+    outer loop
+       vertex 2.88881 0.573412 0.489362
+       vertex 2.88881 0.573412 -0.510638
+       vertex 2.88098 0.576652 -0.510638
+    endloop
+  endfacet
+  facet normal 0.382343 0.924021 0
+    outer loop
+       vertex 2.88881 0.573412 0.489362
+       vertex 2.88098 0.576652 -0.510638
+       vertex 2.88098 0.576652 0.489362
+    endloop
+  endfacet
+  facet normal 0.366665 0.930353 0
+    outer loop
+       vertex 2.88098 0.576652 0.489362
+       vertex 2.88098 0.576652 -0.510638
+       vertex 2.87319 0.579723 -0.510638
+    endloop
+  endfacet
+  facet normal 0.366665 0.930353 0
+    outer loop
+       vertex 2.88098 0.576652 0.489362
+       vertex 2.87319 0.579723 -0.510638
+       vertex 2.87319 0.579723 0.489362
+    endloop
+  endfacet
+  facet normal 0.350464 0.936576 0
+    outer loop
+       vertex 2.87319 0.579723 0.489362
+       vertex 2.87319 0.579723 -0.510638
+       vertex 2.86543 0.582627 -0.510638
+    endloop
+  endfacet
+  facet normal 0.350464 0.936576 0
+    outer loop
+       vertex 2.87319 0.579723 0.489362
+       vertex 2.86543 0.582627 -0.510638
+       vertex 2.86543 0.582627 0.489362
+    endloop
+  endfacet
+  facet normal 0.333756 0.94266 0
+    outer loop
+       vertex 2.86543 0.582627 0.489362
+       vertex 2.86543 0.582627 -0.510638
+       vertex 2.8577 0.585363 -0.510638
+    endloop
+  endfacet
+  facet normal 0.333756 0.94266 0
+    outer loop
+       vertex 2.86543 0.582627 0.489362
+       vertex 2.8577 0.585363 -0.510638
+       vertex 2.8577 0.585363 0.489362
+    endloop
+  endfacet
+  facet normal 0.316556 0.948574 0
+    outer loop
+       vertex 2.8577 0.585363 0.489362
+       vertex 2.8577 0.585363 -0.510638
+       vertex 2.84999 0.587935 -0.510638
+    endloop
+  endfacet
+  facet normal 0.316556 0.948574 0
+    outer loop
+       vertex 2.8577 0.585363 0.489362
+       vertex 2.84999 0.587935 -0.510638
+       vertex 2.84999 0.587935 0.489362
+    endloop
+  endfacet
+  facet normal 0.298907 0.954282 0
+    outer loop
+       vertex 2.84999 0.587935 0.489362
+       vertex 2.84999 0.587935 -0.510638
+       vertex 2.84231 0.590342 -0.510638
+    endloop
+  endfacet
+  facet normal 0.298907 0.954282 0
+    outer loop
+       vertex 2.84999 0.587935 0.489362
+       vertex 2.84231 0.590342 -0.510638
+       vertex 2.84231 0.590342 0.489362
+    endloop
+  endfacet
+  facet normal 0.280833 0.959757 0
+    outer loop
+       vertex 2.84231 0.590342 0.489362
+       vertex 2.84231 0.590342 -0.510638
+       vertex 2.83464 0.592585 -0.510638
+    endloop
+  endfacet
+  facet normal 0.280833 0.959757 0
+    outer loop
+       vertex 2.84231 0.590342 0.489362
+       vertex 2.83464 0.592585 -0.510638
+       vertex 2.83464 0.592585 0.489362
+    endloop
+  endfacet
+  facet normal 0.262363 0.964969 0
+    outer loop
+       vertex 2.83464 0.592585 0.489362
+       vertex 2.83464 0.592585 -0.510638
+       vertex 2.82699 0.594666 -0.510638
+    endloop
+  endfacet
+  facet normal 0.262363 0.964969 0
+    outer loop
+       vertex 2.83464 0.592585 0.489362
+       vertex 2.82699 0.594666 -0.510638
+       vertex 2.82699 0.594666 0.489362
+    endloop
+  endfacet
+  facet normal 0.243546 0.969889 0
+    outer loop
+       vertex 2.82699 0.594666 0.489362
+       vertex 2.82699 0.594666 -0.510638
+       vertex 2.81934 0.596586 -0.510638
+    endloop
+  endfacet
+  facet normal 0.243546 0.969889 0
+    outer loop
+       vertex 2.82699 0.594666 0.489362
+       vertex 2.81934 0.596586 -0.510638
+       vertex 2.81934 0.596586 0.489362
+    endloop
+  endfacet
+  facet normal 0.224433 0.97449 0
+    outer loop
+       vertex 2.81934 0.596586 0.489362
+       vertex 2.81934 0.596586 -0.510638
+       vertex 2.8117 0.598347 -0.510638
+    endloop
+  endfacet
+  facet normal 0.224433 0.97449 0
+    outer loop
+       vertex 2.81934 0.596586 0.489362
+       vertex 2.8117 0.598347 -0.510638
+       vertex 2.8117 0.598347 0.489362
+    endloop
+  endfacet
+  facet normal 0.205058 0.97875 0
+    outer loop
+       vertex 2.8117 0.598347 0.489362
+       vertex 2.8117 0.598347 -0.510638
+       vertex 2.80405 0.599948 -0.510638
+    endloop
+  endfacet
+  facet normal 0.205058 0.97875 0
+    outer loop
+       vertex 2.8117 0.598347 0.489362
+       vertex 2.80405 0.599948 -0.510638
+       vertex 2.80405 0.599948 0.489362
+    endloop
+  endfacet
+  facet normal 0.185485 0.982647 0
+    outer loop
+       vertex 2.80405 0.599948 0.489362
+       vertex 2.80405 0.599948 -0.510638
+       vertex 2.79641 0.601391 -0.510638
+    endloop
+  endfacet
+  facet normal 0.185485 0.982647 0
+    outer loop
+       vertex 2.80405 0.599948 0.489362
+       vertex 2.79641 0.601391 -0.510638
+       vertex 2.79641 0.601391 0.489362
+    endloop
+  endfacet
+  facet normal 0.165758 0.986166 0
+    outer loop
+       vertex 2.79641 0.601391 0.489362
+       vertex 2.79641 0.601391 -0.510638
+       vertex 2.78875 0.602678 -0.510638
+    endloop
+  endfacet
+  facet normal 0.165758 0.986166 0
+    outer loop
+       vertex 2.79641 0.601391 0.489362
+       vertex 2.78875 0.602678 -0.510638
+       vertex 2.78875 0.602678 0.489362
+    endloop
+  endfacet
+  facet normal 0.145937 0.989294 0
+    outer loop
+       vertex 2.78875 0.602678 0.489362
+       vertex 2.78875 0.602678 -0.510638
+       vertex 2.78108 0.60381 -0.510638
+    endloop
+  endfacet
+  facet normal 0.145937 0.989294 0
+    outer loop
+       vertex 2.78875 0.602678 0.489362
+       vertex 2.78108 0.60381 -0.510638
+       vertex 2.78108 0.60381 0.489362
+    endloop
+  endfacet
+  facet normal 0.12608 0.99202 0
+    outer loop
+       vertex 2.78108 0.60381 0.489362
+       vertex 2.78108 0.60381 -0.510638
+       vertex 2.77339 0.604786 -0.510638
+    endloop
+  endfacet
+  facet normal 0.12608 0.99202 0
+    outer loop
+       vertex 2.78108 0.60381 0.489362
+       vertex 2.77339 0.604786 -0.510638
+       vertex 2.77339 0.604786 0.489362
+    endloop
+  endfacet
+  facet normal 0.106241 0.99434 0
+    outer loop
+       vertex 2.77339 0.604786 0.489362
+       vertex 2.77339 0.604786 -0.510638
+       vertex 2.76569 0.60561 -0.510638
+    endloop
+  endfacet
+  facet normal 0.106241 0.99434 0
+    outer loop
+       vertex 2.77339 0.604786 0.489362
+       vertex 2.76569 0.60561 -0.510638
+       vertex 2.76569 0.60561 0.489362
+    endloop
+  endfacet
+  facet normal 0.0864818 0.996253 0
+    outer loop
+       vertex 2.76569 0.60561 0.489362
+       vertex 2.76569 0.60561 -0.510638
+       vertex 2.75795 0.606281 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0864818 0.996253 0
+    outer loop
+       vertex 2.76569 0.60561 0.489362
+       vertex 2.75795 0.606281 -0.510638
+       vertex 2.75795 0.606281 0.489362
+    endloop
+  endfacet
+  facet normal 0.0668592 0.997762 0
+    outer loop
+       vertex 2.75795 0.606281 0.489362
+       vertex 2.75795 0.606281 -0.510638
+       vertex 2.75019 0.606801 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0668592 0.997762 0
+    outer loop
+       vertex 2.75795 0.606281 0.489362
+       vertex 2.75019 0.606801 -0.510638
+       vertex 2.75019 0.606801 0.489362
+    endloop
+  endfacet
+  facet normal 0.0474284 0.998875 0
+    outer loop
+       vertex 2.75019 0.606801 0.489362
+       vertex 2.75019 0.606801 -0.510638
+       vertex 2.74239 0.607172 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0474284 0.998875 0
+    outer loop
+       vertex 2.75019 0.606801 0.489362
+       vertex 2.74239 0.607172 -0.510638
+       vertex 2.74239 0.607172 0.489362
+    endloop
+  endfacet
+  facet normal 0.0282356 0.999601 0
+    outer loop
+       vertex 2.74239 0.607172 0.489362
+       vertex 2.74239 0.607172 -0.510638
+       vertex 2.73456 0.607393 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0282356 0.999601 0
+    outer loop
+       vertex 2.74239 0.607172 0.489362
+       vertex 2.73456 0.607393 -0.510638
+       vertex 2.73456 0.607393 0.489362
+    endloop
+  endfacet
+  facet normal 0.00932919 0.999956 0
+    outer loop
+       vertex 2.73456 0.607393 0.489362
+       vertex 2.73456 0.607393 -0.510638
+       vertex 2.72668 0.607466 -0.510638
+    endloop
+  endfacet
+  facet normal 0.00932919 0.999956 0
+    outer loop
+       vertex 2.73456 0.607393 0.489362
+       vertex 2.72668 0.607466 -0.510638
+       vertex 2.72668 0.607466 0.489362
+    endloop
+  endfacet
+  facet normal -0.0237336 0.999718 0
+    outer loop
+       vertex 2.72668 0.607466 0.489362
+       vertex 2.72668 0.607466 -0.510638
+       vertex 2.71122 0.607099 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0237336 0.999718 0
+    outer loop
+       vertex 2.72668 0.607466 0.489362
+       vertex 2.71122 0.607099 -0.510638
+       vertex 2.71122 0.607099 0.489362
+    endloop
+  endfacet
+  facet normal -0.0717079 0.997426 0
+    outer loop
+       vertex 2.71122 0.607099 0.489362
+       vertex 2.71122 0.607099 -0.510638
+       vertex 2.69604 0.606008 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0717079 0.997426 0
+    outer loop
+       vertex 2.71122 0.607099 0.489362
+       vertex 2.69604 0.606008 -0.510638
+       vertex 2.69604 0.606008 0.489362
+    endloop
+  endfacet
+  facet normal -0.12005 0.992768 0
+    outer loop
+       vertex 2.69604 0.606008 0.489362
+       vertex 2.69604 0.606008 -0.510638
+       vertex 2.68116 0.604209 -0.510638
+    endloop
+  endfacet
+  facet normal -0.12005 0.992768 0
+    outer loop
+       vertex 2.69604 0.606008 0.489362
+       vertex 2.68116 0.604209 -0.510638
+       vertex 2.68116 0.604209 0.489362
+    endloop
+  endfacet
+  facet normal -0.168629 0.98568 0
+    outer loop
+       vertex 2.68116 0.604209 0.489362
+       vertex 2.68116 0.604209 -0.510638
+       vertex 2.6666 0.601717 -0.510638
+    endloop
+  endfacet
+  facet normal -0.168629 0.98568 0
+    outer loop
+       vertex 2.68116 0.604209 0.489362
+       vertex 2.6666 0.601717 -0.510638
+       vertex 2.6666 0.601717 0.489362
+    endloop
+  endfacet
+  facet normal -0.217289 0.976107 0
+    outer loop
+       vertex 2.6666 0.601717 0.489362
+       vertex 2.6666 0.601717 -0.510638
+       vertex 2.65237 0.59855 -0.510638
+    endloop
+  endfacet
+  facet normal -0.217289 0.976107 0
+    outer loop
+       vertex 2.6666 0.601717 0.489362
+       vertex 2.65237 0.59855 -0.510638
+       vertex 2.65237 0.59855 0.489362
+    endloop
+  endfacet
+  facet normal -0.265874 0.964008 0
+    outer loop
+       vertex 2.65237 0.59855 0.489362
+       vertex 2.65237 0.59855 -0.510638
+       vertex 2.63849 0.594723 -0.510638
+    endloop
+  endfacet
+  facet normal -0.265874 0.964008 0
+    outer loop
+       vertex 2.65237 0.59855 0.489362
+       vertex 2.63849 0.594723 -0.510638
+       vertex 2.63849 0.594723 0.489362
+    endloop
+  endfacet
+  facet normal -0.31422 0.94935 0
+    outer loop
+       vertex 2.63849 0.594723 0.489362
+       vertex 2.63849 0.594723 -0.510638
+       vertex 2.62498 0.590251 -0.510638
+    endloop
+  endfacet
+  facet normal -0.31422 0.94935 0
+    outer loop
+       vertex 2.63849 0.594723 0.489362
+       vertex 2.62498 0.590251 -0.510638
+       vertex 2.62498 0.590251 0.489362
+    endloop
+  endfacet
+  facet normal -0.362168 0.932113 0
+    outer loop
+       vertex 2.62498 0.590251 0.489362
+       vertex 2.62498 0.590251 -0.510638
+       vertex 2.61186 0.585152 -0.510638
+    endloop
+  endfacet
+  facet normal -0.362168 0.932113 0
+    outer loop
+       vertex 2.62498 0.590251 0.489362
+       vertex 2.61186 0.585152 -0.510638
+       vertex 2.61186 0.585152 0.489362
+    endloop
+  endfacet
+  facet normal -0.409541 0.912292 0
+    outer loop
+       vertex 2.61186 0.585152 0.489362
+       vertex 2.61186 0.585152 -0.510638
+       vertex 2.59913 0.579441 -0.510638
+    endloop
+  endfacet
+  facet normal -0.409541 0.912292 0
+    outer loop
+       vertex 2.61186 0.585152 0.489362
+       vertex 2.59913 0.579441 -0.510638
+       vertex 2.59913 0.579441 0.489362
+    endloop
+  endfacet
+  facet normal -0.456185 0.889885 0
+    outer loop
+       vertex 2.59913 0.579441 0.489362
+       vertex 2.59913 0.579441 -0.510638
+       vertex 2.58683 0.573133 -0.510638
+    endloop
+  endfacet
+  facet normal -0.456185 0.889885 0
+    outer loop
+       vertex 2.59913 0.579441 0.489362
+       vertex 2.58683 0.573133 -0.510638
+       vertex 2.58683 0.573133 0.489362
+    endloop
+  endfacet
+  facet normal -0.501922 0.864913 0
+    outer loop
+       vertex 2.58683 0.573133 0.489362
+       vertex 2.58683 0.573133 -0.510638
+       vertex 2.57496 0.566246 -0.510638
+    endloop
+  endfacet
+  facet normal -0.501922 0.864913 0
+    outer loop
+       vertex 2.58683 0.573133 0.489362
+       vertex 2.57496 0.566246 -0.510638
+       vertex 2.57496 0.566246 0.489362
+    endloop
+  endfacet
+  facet normal -0.546585 0.837404 0
+    outer loop
+       vertex 2.57496 0.566246 0.489362
+       vertex 2.57496 0.566246 -0.510638
+       vertex 2.56355 0.558794 -0.510638
+    endloop
+  endfacet
+  facet normal -0.546585 0.837404 0
+    outer loop
+       vertex 2.57496 0.566246 0.489362
+       vertex 2.56355 0.558794 -0.510638
+       vertex 2.56355 0.558794 0.489362
+    endloop
+  endfacet
+  facet normal -0.590016 0.807392 0
+    outer loop
+       vertex 2.56355 0.558794 0.489362
+       vertex 2.56355 0.558794 -0.510638
+       vertex 2.5526 0.550795 -0.510638
+    endloop
+  endfacet
+  facet normal -0.590016 0.807392 0
+    outer loop
+       vertex 2.56355 0.558794 0.489362
+       vertex 2.5526 0.550795 -0.510638
+       vertex 2.5526 0.550795 0.489362
+    endloop
+  endfacet
+  facet normal -0.632032 0.774942 0
+    outer loop
+       vertex 2.5526 0.550795 0.489362
+       vertex 2.5526 0.550795 -0.510638
+       vertex 2.54214 0.542264 -0.510638
+    endloop
+  endfacet
+  facet normal -0.632032 0.774942 0
+    outer loop
+       vertex 2.5526 0.550795 0.489362
+       vertex 2.54214 0.542264 -0.510638
+       vertex 2.54214 0.542264 0.489362
+    endloop
+  endfacet
+  facet normal -0.672487 0.740109 0
+    outer loop
+       vertex 2.54214 0.542264 0.489362
+       vertex 2.54214 0.542264 -0.510638
+       vertex 2.53218 0.533216 -0.510638
+    endloop
+  endfacet
+  facet normal -0.672487 0.740109 0
+    outer loop
+       vertex 2.54214 0.542264 0.489362
+       vertex 2.53218 0.533216 -0.510638
+       vertex 2.53218 0.533216 0.489362
+    endloop
+  endfacet
+  facet normal -0.711202 0.702988 0
+    outer loop
+       vertex 2.53218 0.533216 0.489362
+       vertex 2.53218 0.533216 -0.510638
+       vertex 2.52275 0.523669 -0.510638
+    endloop
+  endfacet
+  facet normal -0.711202 0.702988 0
+    outer loop
+       vertex 2.53218 0.533216 0.489362
+       vertex 2.52275 0.523669 -0.510638
+       vertex 2.52275 0.523669 0.489362
+    endloop
+  endfacet
+  facet normal -0.748014 0.663683 0
+    outer loop
+       vertex 2.52275 0.523669 0.489362
+       vertex 2.52275 0.523669 -0.510638
+       vertex 2.51384 0.513638 -0.510638
+    endloop
+  endfacet
+  facet normal -0.748014 0.663683 0
+    outer loop
+       vertex 2.52275 0.523669 0.489362
+       vertex 2.51384 0.513638 -0.510638
+       vertex 2.51384 0.513638 0.489362
+    endloop
+  endfacet
+  facet normal -0.78279 0.622286 0
+    outer loop
+       vertex 2.51384 0.513638 0.489362
+       vertex 2.51384 0.513638 -0.510638
+       vertex 2.5055 0.503138 -0.510638
+    endloop
+  endfacet
+  facet normal -0.78279 0.622286 0
+    outer loop
+       vertex 2.51384 0.513638 0.489362
+       vertex 2.5055 0.503138 -0.510638
+       vertex 2.5055 0.503138 0.489362
+    endloop
+  endfacet
+  facet normal -0.815371 0.578938 0
+    outer loop
+       vertex 2.5055 0.503138 0.489362
+       vertex 2.5055 0.503138 -0.510638
+       vertex 2.49772 0.492187 -0.510638
+    endloop
+  endfacet
+  facet normal -0.815371 0.578938 0
+    outer loop
+       vertex 2.5055 0.503138 0.489362
+       vertex 2.49772 0.492187 -0.510638
+       vertex 2.49772 0.492187 0.489362
+    endloop
+  endfacet
+  facet normal -0.845613 0.533797 0
+    outer loop
+       vertex 2.49772 0.492187 0.489362
+       vertex 2.49772 0.492187 -0.510638
+       vertex 2.49053 0.4808 -0.510638
+    endloop
+  endfacet
+  facet normal -0.845613 0.533797 0
+    outer loop
+       vertex 2.49772 0.492187 0.489362
+       vertex 2.49053 0.4808 -0.510638
+       vertex 2.49053 0.4808 0.489362
+    endloop
+  endfacet
+  facet normal -0.873393 0.487016 0
+    outer loop
+       vertex 2.49053 0.4808 0.489362
+       vertex 2.49053 0.4808 -0.510638
+       vertex 2.48395 0.468992 -0.510638
+    endloop
+  endfacet
+  facet normal -0.873393 0.487016 0
+    outer loop
+       vertex 2.49053 0.4808 0.489362
+       vertex 2.48395 0.468992 -0.510638
+       vertex 2.48395 0.468992 0.489362
+    endloop
+  endfacet
+  facet normal -0.898598 0.438772 0
+    outer loop
+       vertex 2.48395 0.468992 0.489362
+       vertex 2.48395 0.468992 -0.510638
+       vertex 2.47799 0.456781 -0.510638
+    endloop
+  endfacet
+  facet normal -0.898598 0.438772 0
+    outer loop
+       vertex 2.48395 0.468992 0.489362
+       vertex 2.47799 0.456781 -0.510638
+       vertex 2.47799 0.456781 0.489362
+    endloop
+  endfacet
+  facet normal -0.921128 0.38926 0
+    outer loop
+       vertex 2.47799 0.456781 0.489362
+       vertex 2.47799 0.456781 -0.510638
+       vertex 2.47266 0.444182 -0.510638
+    endloop
+  endfacet
+  facet normal -0.921128 0.38926 0
+    outer loop
+       vertex 2.47799 0.456781 0.489362
+       vertex 2.47266 0.444182 -0.510638
+       vertex 2.47266 0.444182 0.489362
+    endloop
+  endfacet
+  facet normal -0.940899 0.338688 0
+    outer loop
+       vertex 2.47266 0.444182 0.489362
+       vertex 2.47266 0.444182 -0.510638
+       vertex 2.46799 0.43121 -0.510638
+    endloop
+  endfacet
+  facet normal -0.940899 0.338688 0
+    outer loop
+       vertex 2.47266 0.444182 0.489362
+       vertex 2.46799 0.43121 -0.510638
+       vertex 2.46799 0.43121 0.489362
+    endloop
+  endfacet
+  facet normal -0.957848 0.287275 0
+    outer loop
+       vertex 2.46799 0.43121 0.489362
+       vertex 2.46799 0.43121 -0.510638
+       vertex 2.464 0.417883 -0.510638
+    endloop
+  endfacet
+  facet normal -0.957848 0.287275 0
+    outer loop
+       vertex 2.46799 0.43121 0.489362
+       vertex 2.464 0.417883 -0.510638
+       vertex 2.464 0.417883 0.489362
+    endloop
+  endfacet
+  facet normal -0.971931 0.235264 0
+    outer loop
+       vertex 2.464 0.417883 0.489362
+       vertex 2.464 0.417883 -0.510638
+       vertex 2.46069 0.404216 -0.510638
+    endloop
+  endfacet
+  facet normal -0.971931 0.235264 0
+    outer loop
+       vertex 2.464 0.417883 0.489362
+       vertex 2.46069 0.404216 -0.510638
+       vertex 2.46069 0.404216 0.489362
+    endloop
+  endfacet
+  facet normal -0.983136 0.182877 0
+    outer loop
+       vertex 2.46069 0.404216 0.489362
+       vertex 2.46069 0.404216 -0.510638
+       vertex 2.45809 0.390224 -0.510638
+    endloop
+  endfacet
+  facet normal -0.983136 0.182877 0
+    outer loop
+       vertex 2.46069 0.404216 0.489362
+       vertex 2.45809 0.390224 -0.510638
+       vertex 2.45809 0.390224 0.489362
+    endloop
+  endfacet
+  facet normal -0.991468 0.130348 0
+    outer loop
+       vertex 2.45809 0.390224 0.489362
+       vertex 2.45809 0.390224 -0.510638
+       vertex 2.45621 0.375925 -0.510638
+    endloop
+  endfacet
+  facet normal -0.991468 0.130348 0
+    outer loop
+       vertex 2.45809 0.390224 0.489362
+       vertex 2.45621 0.375925 -0.510638
+       vertex 2.45621 0.375925 0.489362
+    endloop
+  endfacet
+  facet normal -0.99696 0.0779154 0
+    outer loop
+       vertex 2.45621 0.375925 0.489362
+       vertex 2.45621 0.375925 -0.510638
+       vertex 2.45507 0.361334 -0.510638
+    endloop
+  endfacet
+  facet normal -0.99696 0.0779154 0
+    outer loop
+       vertex 2.45621 0.375925 0.489362
+       vertex 2.45507 0.361334 -0.510638
+       vertex 2.45507 0.361334 0.489362
+    endloop
+  endfacet
+  facet normal -0.999667 0.02581 0
+    outer loop
+       vertex 2.45507 0.361334 0.489362
+       vertex 2.45507 0.361334 -0.510638
+       vertex 2.45468 0.346466 -0.510638
+    endloop
+  endfacet
+  facet normal -0.999667 0.02581 0
+    outer loop
+       vertex 2.45507 0.361334 0.489362
+       vertex 2.45468 0.346466 -0.510638
+       vertex 2.45468 0.346466 0.489362
+    endloop
+  endfacet
+  facet normal -0.999699 -0.0245414 -0
+    outer loop
+       vertex 2.45468 0.346466 0.489362
+       vertex 2.45468 0.346466 -0.510638
+       vertex 2.45505 0.331325 -0.510638
+    endloop
+  endfacet
+  facet normal -0.999699 -0.0245414 0
+    outer loop
+       vertex 2.45468 0.346466 0.489362
+       vertex 2.45505 0.331325 -0.510638
+       vertex 2.45505 0.331325 0.489362
+    endloop
+  endfacet
+  facet normal -0.997233 -0.0743382 -0
+    outer loop
+       vertex 2.45505 0.331325 0.489362
+       vertex 2.45505 0.331325 -0.510638
+       vertex 2.45616 0.316511 -0.510638
+    endloop
+  endfacet
+  facet normal -0.997233 -0.0743382 0
+    outer loop
+       vertex 2.45505 0.331325 0.489362
+       vertex 2.45616 0.316511 -0.510638
+       vertex 2.45616 0.316511 0.489362
+    endloop
+  endfacet
+  facet normal -0.992151 -0.125046 -0
+    outer loop
+       vertex 2.45616 0.316511 0.489362
+       vertex 2.45616 0.316511 -0.510638
+       vertex 2.45798 0.302035 -0.510638
+    endloop
+  endfacet
+  facet normal -0.992151 -0.125046 0
+    outer loop
+       vertex 2.45616 0.316511 0.489362
+       vertex 2.45798 0.302035 -0.510638
+       vertex 2.45798 0.302035 0.489362
+    endloop
+  endfacet
+  facet normal -0.984317 -0.176411 -0
+    outer loop
+       vertex 2.45798 0.302035 0.489362
+       vertex 2.45798 0.302035 -0.510638
+       vertex 2.46051 0.287913 -0.510638
+    endloop
+  endfacet
+  facet normal -0.984317 -0.176411 0
+    outer loop
+       vertex 2.45798 0.302035 0.489362
+       vertex 2.46051 0.287913 -0.510638
+       vertex 2.46051 0.287913 0.489362
+    endloop
+  endfacet
+  facet normal -0.973614 -0.228201 -0
+    outer loop
+       vertex 2.46051 0.287913 0.489362
+       vertex 2.46051 0.287913 -0.510638
+       vertex 2.46374 0.274156 -0.510638
+    endloop
+  endfacet
+  facet normal -0.973614 -0.228201 0
+    outer loop
+       vertex 2.46051 0.287913 0.489362
+       vertex 2.46374 0.274156 -0.510638
+       vertex 2.46374 0.274156 0.489362
+    endloop
+  endfacet
+  facet normal -0.959952 -0.280164 -0
+    outer loop
+       vertex 2.46374 0.274156 0.489362
+       vertex 2.46374 0.274156 -0.510638
+       vertex 2.46764 0.260778 -0.510638
+    endloop
+  endfacet
+  facet normal -0.959952 -0.280164 0
+    outer loop
+       vertex 2.46374 0.274156 0.489362
+       vertex 2.46764 0.260778 -0.510638
+       vertex 2.46764 0.260778 0.489362
+    endloop
+  endfacet
+  facet normal -0.943264 -0.332043 -0
+    outer loop
+       vertex 2.46764 0.260778 0.489362
+       vertex 2.46764 0.260778 -0.510638
+       vertex 2.47221 0.247793 -0.510638
+    endloop
+  endfacet
+  facet normal -0.943264 -0.332043 0
+    outer loop
+       vertex 2.46764 0.260778 0.489362
+       vertex 2.47221 0.247793 -0.510638
+       vertex 2.47221 0.247793 0.489362
+    endloop
+  endfacet
+  facet normal -0.923532 -0.383521 -0
+    outer loop
+       vertex 2.47221 0.247793 0.489362
+       vertex 2.47221 0.247793 -0.510638
+       vertex 2.47744 0.235212 -0.510638
+    endloop
+  endfacet
+  facet normal -0.923532 -0.383521 0
+    outer loop
+       vertex 2.47221 0.247793 0.489362
+       vertex 2.47744 0.235212 -0.510638
+       vertex 2.47744 0.235212 0.489362
+    endloop
+  endfacet
+  facet normal -0.900759 -0.434319 -0
+    outer loop
+       vertex 2.47744 0.235212 0.489362
+       vertex 2.47744 0.235212 -0.510638
+       vertex 2.4833 0.223049 -0.510638
+    endloop
+  endfacet
+  facet normal -0.900759 -0.434319 0
+    outer loop
+       vertex 2.47744 0.235212 0.489362
+       vertex 2.4833 0.223049 -0.510638
+       vertex 2.4833 0.223049 0.489362
+    endloop
+  endfacet
+  facet normal -0.874983 -0.484154 -0
+    outer loop
+       vertex 2.4833 0.223049 0.489362
+       vertex 2.4833 0.223049 -0.510638
+       vertex 2.48979 0.211318 -0.510638
+    endloop
+  endfacet
+  facet normal -0.874983 -0.484154 0
+    outer loop
+       vertex 2.4833 0.223049 0.489362
+       vertex 2.48979 0.211318 -0.510638
+       vertex 2.48979 0.211318 0.489362
+    endloop
+  endfacet
+  facet normal -0.846302 -0.532703 -0
+    outer loop
+       vertex 2.48979 0.211318 0.489362
+       vertex 2.48979 0.211318 -0.510638
+       vertex 2.4969 0.200032 -0.510638
+    endloop
+  endfacet
+  facet normal -0.846302 -0.532703 0
+    outer loop
+       vertex 2.48979 0.211318 0.489362
+       vertex 2.4969 0.200032 -0.510638
+       vertex 2.4969 0.200032 0.489362
+    endloop
+  endfacet
+  facet normal -0.814821 -0.579712 -0
+    outer loop
+       vertex 2.4969 0.200032 0.489362
+       vertex 2.4969 0.200032 -0.510638
+       vertex 2.5046 0.189202 -0.510638
+    endloop
+  endfacet
+  facet normal -0.814821 -0.579712 0
+    outer loop
+       vertex 2.4969 0.200032 0.489362
+       vertex 2.5046 0.189202 -0.510638
+       vertex 2.5046 0.189202 0.489362
+    endloop
+  endfacet
+  facet normal -0.780714 -0.624889 -0
+    outer loop
+       vertex 2.5046 0.189202 0.489362
+       vertex 2.5046 0.189202 -0.510638
+       vertex 2.51289 0.178844 -0.510638
+    endloop
+  endfacet
+  facet normal -0.780714 -0.624889 0
+    outer loop
+       vertex 2.5046 0.189202 0.489362
+       vertex 2.51289 0.178844 -0.510638
+       vertex 2.51289 0.178844 0.489362
+    endloop
+  endfacet
+  facet normal -0.744149 -0.668014 -0
+    outer loop
+       vertex 2.51289 0.178844 0.489362
+       vertex 2.51289 0.178844 -0.510638
+       vertex 2.52176 0.168969 -0.510638
+    endloop
+  endfacet
+  facet normal -0.744149 -0.668014 0
+    outer loop
+       vertex 2.51289 0.178844 0.489362
+       vertex 2.52176 0.168969 -0.510638
+       vertex 2.52176 0.168969 0.489362
+    endloop
+  endfacet
+  facet normal -0.705351 -0.708858 -0
+    outer loop
+       vertex 2.52176 0.168969 0.489362
+       vertex 2.52176 0.168969 -0.510638
+       vertex 2.53118 0.159591 -0.510638
+    endloop
+  endfacet
+  facet normal -0.705351 -0.708858 0
+    outer loop
+       vertex 2.52176 0.168969 0.489362
+       vertex 2.53118 0.159591 -0.510638
+       vertex 2.53118 0.159591 0.489362
+    endloop
+  endfacet
+  facet normal -0.664555 -0.747239 -0
+    outer loop
+       vertex 2.53118 0.159591 0.489362
+       vertex 2.53118 0.159591 -0.510638
+       vertex 2.54115 0.150724 -0.510638
+    endloop
+  endfacet
+  facet normal -0.664555 -0.747239 0
+    outer loop
+       vertex 2.53118 0.159591 0.489362
+       vertex 2.54115 0.150724 -0.510638
+       vertex 2.54115 0.150724 0.489362
+    endloop
+  endfacet
+  facet normal -0.622015 -0.783005 -0
+    outer loop
+       vertex 2.54115 0.150724 0.489362
+       vertex 2.54115 0.150724 -0.510638
+       vertex 2.55166 0.142379 -0.510638
+    endloop
+  endfacet
+  facet normal -0.622015 -0.783005 0
+    outer loop
+       vertex 2.54115 0.150724 0.489362
+       vertex 2.55166 0.142379 -0.510638
+       vertex 2.55166 0.142379 0.489362
+    endloop
+  endfacet
+  facet normal -0.577991 -0.816043 -0
+    outer loop
+       vertex 2.55166 0.142379 0.489362
+       vertex 2.55166 0.142379 -0.510638
+       vertex 2.56268 0.13457 -0.510638
+    endloop
+  endfacet
+  facet normal -0.577991 -0.816043 0
+    outer loop
+       vertex 2.55166 0.142379 0.489362
+       vertex 2.56268 0.13457 -0.510638
+       vertex 2.56268 0.13457 0.489362
+    endloop
+  endfacet
+  facet normal -0.532751 -0.846272 -0
+    outer loop
+       vertex 2.56268 0.13457 0.489362
+       vertex 2.56268 0.13457 -0.510638
+       vertex 2.57421 0.127311 -0.510638
+    endloop
+  endfacet
+  facet normal -0.532751 -0.846272 0
+    outer loop
+       vertex 2.56268 0.13457 0.489362
+       vertex 2.57421 0.127311 -0.510638
+       vertex 2.57421 0.127311 0.489362
+    endloop
+  endfacet
+  facet normal -0.486557 -0.873649 -0
+    outer loop
+       vertex 2.57421 0.127311 0.489362
+       vertex 2.57421 0.127311 -0.510638
+       vertex 2.58624 0.120615 -0.510638
+    endloop
+  endfacet
+  facet normal -0.486557 -0.873649 0
+    outer loop
+       vertex 2.57421 0.127311 0.489362
+       vertex 2.58624 0.120615 -0.510638
+       vertex 2.58624 0.120615 0.489362
+    endloop
+  endfacet
+  facet normal -0.439669 -0.89816 -0
+    outer loop
+       vertex 2.58624 0.120615 0.489362
+       vertex 2.58624 0.120615 -0.510638
+       vertex 2.59874 0.114493 -0.510638
+    endloop
+  endfacet
+  facet normal -0.439669 -0.89816 0
+    outer loop
+       vertex 2.58624 0.120615 0.489362
+       vertex 2.59874 0.114493 -0.510638
+       vertex 2.59874 0.114493 0.489362
+    endloop
+  endfacet
+  facet normal -0.392326 -0.919826 -0
+    outer loop
+       vertex 2.59874 0.114493 0.489362
+       vertex 2.59874 0.114493 -0.510638
+       vertex 2.61171 0.108961 -0.510638
+    endloop
+  endfacet
+  facet normal -0.392326 -0.919826 0
+    outer loop
+       vertex 2.59874 0.114493 0.489362
+       vertex 2.61171 0.108961 -0.510638
+       vertex 2.61171 0.108961 0.489362
+    endloop
+  endfacet
+  facet normal -0.344774 -0.938686 -0
+    outer loop
+       vertex 2.61171 0.108961 0.489362
+       vertex 2.61171 0.108961 -0.510638
+       vertex 2.62514 0.10403 -0.510638
+    endloop
+  endfacet
+  facet normal -0.344774 -0.938686 0
+    outer loop
+       vertex 2.61171 0.108961 0.489362
+       vertex 2.62514 0.10403 -0.510638
+       vertex 2.62514 0.10403 0.489362
+    endloop
+  endfacet
+  facet normal -0.297218 -0.95481 -0
+    outer loop
+       vertex 2.62514 0.10403 0.489362
+       vertex 2.62514 0.10403 -0.510638
+       vertex 2.639 0.0997144 -0.510638
+    endloop
+  endfacet
+  facet normal -0.297218 -0.95481 0
+    outer loop
+       vertex 2.62514 0.10403 0.489362
+       vertex 2.639 0.0997144 -0.510638
+       vertex 2.639 0.0997144 0.489362
+    endloop
+  endfacet
+  facet normal -0.249865 -0.968281 -0
+    outer loop
+       vertex 2.639 0.0997144 0.489362
+       vertex 2.639 0.0997144 -0.510638
+       vertex 2.65329 0.0960266 -0.510638
+    endloop
+  endfacet
+  facet normal -0.249865 -0.968281 0
+    outer loop
+       vertex 2.639 0.0997144 0.489362
+       vertex 2.65329 0.0960266 -0.510638
+       vertex 2.65329 0.0960266 0.489362
+    endloop
+  endfacet
+  facet normal -0.202887 -0.979202 -0
+    outer loop
+       vertex 2.65329 0.0960266 0.489362
+       vertex 2.65329 0.0960266 -0.510638
+       vertex 2.668 0.0929799 -0.510638
+    endloop
+  endfacet
+  facet normal -0.202887 -0.979202 0
+    outer loop
+       vertex 2.65329 0.0960266 0.489362
+       vertex 2.668 0.0929799 -0.510638
+       vertex 2.668 0.0929799 0.489362
+    endloop
+  endfacet
+  facet normal -0.156444 -0.987687 -0
+    outer loop
+       vertex 2.668 0.0929799 0.489362
+       vertex 2.668 0.0929799 -0.510638
+       vertex 2.6831 0.0905874 -0.510638
+    endloop
+  endfacet
+  facet normal -0.156444 -0.987687 0
+    outer loop
+       vertex 2.668 0.0929799 0.489362
+       vertex 2.6831 0.0905874 -0.510638
+       vertex 2.6831 0.0905874 0.489362
+    endloop
+  endfacet
+  facet normal -0.110681 -0.993856 -0
+    outer loop
+       vertex 2.6831 0.0905874 0.489362
+       vertex 2.6831 0.0905874 -0.510638
+       vertex 2.69859 0.0888622 -0.510638
+    endloop
+  endfacet
+  facet normal -0.110681 -0.993856 0
+    outer loop
+       vertex 2.6831 0.0905874 0.489362
+       vertex 2.69859 0.0888622 -0.510638
+       vertex 2.69859 0.0888622 0.489362
+    endloop
+  endfacet
+  facet normal -0.06571 -0.997839 -0
+    outer loop
+       vertex 2.69859 0.0888622 0.489362
+       vertex 2.69859 0.0888622 -0.510638
+       vertex 2.71446 0.0878175 -0.510638
+    endloop
+  endfacet
+  facet normal -0.06571 -0.997839 0
+    outer loop
+       vertex 2.69859 0.0888622 0.489362
+       vertex 2.71446 0.0878175 -0.510638
+       vertex 2.71446 0.0878175 0.489362
+    endloop
+  endfacet
+  facet normal -0.021638 -0.999766 -0
+    outer loop
+       vertex 2.71446 0.0878175 0.489362
+       vertex 2.71446 0.0878175 -0.510638
+       vertex 2.73068 0.0874664 -0.510638
+    endloop
+  endfacet
+  facet normal -0.021638 -0.999766 0
+    outer loop
+       vertex 2.71446 0.0878175 0.489362
+       vertex 2.73068 0.0874664 -0.510638
+       vertex 2.73068 0.0874664 0.489362
+    endloop
+  endfacet
+  facet normal 0.0116325 -0.999932 0
+    outer loop
+       vertex 2.73068 0.0874664 0.489362
+       vertex 2.73068 0.0874664 -0.510638
+       vertex 2.7384 0.0875562 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0116325 -0.999932 0
+    outer loop
+       vertex 2.73068 0.0874664 0.489362
+       vertex 2.7384 0.0875562 -0.510638
+       vertex 2.7384 0.0875562 0.489362
+    endloop
+  endfacet
+  facet normal 0.0346109 -0.999401 0
+    outer loop
+       vertex 2.7384 0.0875562 0.489362
+       vertex 2.7384 0.0875562 -0.510638
+       vertex 2.74617 0.0878252 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0346109 -0.999401 0
+    outer loop
+       vertex 2.7384 0.0875562 0.489362
+       vertex 2.74617 0.0878252 -0.510638
+       vertex 2.74617 0.0878252 0.489362
+    endloop
+  endfacet
+  facet normal 0.0571877 -0.998363 0
+    outer loop
+       vertex 2.74617 0.0878252 0.489362
+       vertex 2.74617 0.0878252 -0.510638
+       vertex 2.75398 0.0882724 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0571877 -0.998363 0
+    outer loop
+       vertex 2.74617 0.0878252 0.489362
+       vertex 2.75398 0.0882724 -0.510638
+       vertex 2.75398 0.0882724 0.489362
+    endloop
+  endfacet
+  facet normal 0.0793646 -0.996846 0
+    outer loop
+       vertex 2.75398 0.0882724 0.489362
+       vertex 2.75398 0.0882724 -0.510638
+       vertex 2.76182 0.0888969 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0793646 -0.996846 0
+    outer loop
+       vertex 2.75398 0.0882724 0.489362
+       vertex 2.76182 0.0888969 -0.510638
+       vertex 2.76182 0.0888969 0.489362
+    endloop
+  endfacet
+  facet normal 0.101146 -0.994872 0
+    outer loop
+       vertex 2.76182 0.0888969 0.489362
+       vertex 2.76182 0.0888969 -0.510638
+       vertex 2.7697 0.0896979 -0.510638
+    endloop
+  endfacet
+  facet normal 0.101146 -0.994872 0
+    outer loop
+       vertex 2.76182 0.0888969 0.489362
+       vertex 2.7697 0.0896979 -0.510638
+       vertex 2.7697 0.0896979 0.489362
+    endloop
+  endfacet
+  facet normal 0.122531 -0.992465 0
+    outer loop
+       vertex 2.7697 0.0896979 0.489362
+       vertex 2.7697 0.0896979 -0.510638
+       vertex 2.77761 0.0906744 -0.510638
+    endloop
+  endfacet
+  facet normal 0.122531 -0.992465 0
+    outer loop
+       vertex 2.7697 0.0896979 0.489362
+       vertex 2.77761 0.0906744 -0.510638
+       vertex 2.77761 0.0906744 0.489362
+    endloop
+  endfacet
+  facet normal 0.143531 -0.989646 0
+    outer loop
+       vertex 2.77761 0.0906744 0.489362
+       vertex 2.77761 0.0906744 -0.510638
+       vertex 2.78555 0.0918256 -0.510638
+    endloop
+  endfacet
+  facet normal 0.143531 -0.989646 0
+    outer loop
+       vertex 2.77761 0.0906744 0.489362
+       vertex 2.78555 0.0918256 -0.510638
+       vertex 2.78555 0.0918256 0.489362
+    endloop
+  endfacet
+  facet normal 0.164145 -0.986436 0
+    outer loop
+       vertex 2.78555 0.0918256 0.489362
+       vertex 2.78555 0.0918256 -0.510638
+       vertex 2.79351 0.0931505 -0.510638
+    endloop
+  endfacet
+  facet normal 0.164145 -0.986436 0
+    outer loop
+       vertex 2.78555 0.0918256 0.489362
+       vertex 2.79351 0.0931505 -0.510638
+       vertex 2.79351 0.0931505 0.489362
+    endloop
+  endfacet
+  facet normal 0.184386 -0.982854 0
+    outer loop
+       vertex 2.79351 0.0931505 0.489362
+       vertex 2.79351 0.0931505 -0.510638
+       vertex 2.80149 0.0946484 -0.510638
+    endloop
+  endfacet
+  facet normal 0.184386 -0.982854 0
+    outer loop
+       vertex 2.79351 0.0931505 0.489362
+       vertex 2.80149 0.0946484 -0.510638
+       vertex 2.80149 0.0946484 0.489362
+    endloop
+  endfacet
+  facet normal 0.204261 -0.978917 0
+    outer loop
+       vertex 2.80149 0.0946484 0.489362
+       vertex 2.80149 0.0946484 -0.510638
+       vertex 2.8095 0.0963182 -0.510638
+    endloop
+  endfacet
+  facet normal 0.204261 -0.978917 0
+    outer loop
+       vertex 2.80149 0.0946484 0.489362
+       vertex 2.8095 0.0963182 -0.510638
+       vertex 2.8095 0.0963182 0.489362
+    endloop
+  endfacet
+  facet normal 0.223774 -0.974641 0
+    outer loop
+       vertex 2.8095 0.0963182 0.489362
+       vertex 2.8095 0.0963182 -0.510638
+       vertex 2.81752 0.0981592 -0.510638
+    endloop
+  endfacet
+  facet normal 0.223774 -0.974641 0
+    outer loop
+       vertex 2.8095 0.0963182 0.489362
+       vertex 2.81752 0.0981592 -0.510638
+       vertex 2.81752 0.0981592 0.489362
+    endloop
+  endfacet
+  facet normal 0.242929 -0.970044 0
+    outer loop
+       vertex 2.81752 0.0981592 0.489362
+       vertex 2.81752 0.0981592 -0.510638
+       vertex 2.82555 0.10017 -0.510638
+    endloop
+  endfacet
+  facet normal 0.242929 -0.970044 0
+    outer loop
+       vertex 2.81752 0.0981592 0.489362
+       vertex 2.82555 0.10017 -0.510638
+       vertex 2.82555 0.10017 0.489362
+    endloop
+  endfacet
+  facet normal 0.261747 -0.965136 0
+    outer loop
+       vertex 2.82555 0.10017 0.489362
+       vertex 2.82555 0.10017 -0.510638
+       vertex 2.83359 0.102351 -0.510638
+    endloop
+  endfacet
+  facet normal 0.261747 -0.965136 0
+    outer loop
+       vertex 2.82555 0.10017 0.489362
+       vertex 2.83359 0.102351 -0.510638
+       vertex 2.83359 0.102351 0.489362
+    endloop
+  endfacet
+  facet normal 0.280231 -0.959933 0
+    outer loop
+       vertex 2.83359 0.102351 0.489362
+       vertex 2.83359 0.102351 -0.510638
+       vertex 2.84163 0.1047 -0.510638
+    endloop
+  endfacet
+  facet normal 0.280231 -0.959933 0
+    outer loop
+       vertex 2.83359 0.102351 0.489362
+       vertex 2.84163 0.1047 -0.510638
+       vertex 2.84163 0.1047 0.489362
+    endloop
+  endfacet
+  facet normal 0.298389 -0.954444 0
+    outer loop
+       vertex 2.84163 0.1047 0.489362
+       vertex 2.84163 0.1047 -0.510638
+       vertex 2.84968 0.107216 -0.510638
+    endloop
+  endfacet
+  facet normal 0.298389 -0.954444 0
+    outer loop
+       vertex 2.84163 0.1047 0.489362
+       vertex 2.84968 0.107216 -0.510638
+       vertex 2.84968 0.107216 0.489362
+    endloop
+  endfacet
+  facet normal 0.31623 -0.948683 0
+    outer loop
+       vertex 2.84968 0.107216 0.489362
+       vertex 2.84968 0.107216 -0.510638
+       vertex 2.85773 0.1099 -0.510638
+    endloop
+  endfacet
+  facet normal 0.31623 -0.948683 0
+    outer loop
+       vertex 2.84968 0.107216 0.489362
+       vertex 2.85773 0.1099 -0.510638
+       vertex 2.85773 0.1099 0.489362
+    endloop
+  endfacet
+  facet normal 0.333764 -0.942657 0
+    outer loop
+       vertex 2.85773 0.1099 0.489362
+       vertex 2.85773 0.1099 -0.510638
+       vertex 2.86578 0.112749 -0.510638
+    endloop
+  endfacet
+  facet normal 0.333764 -0.942657 0
+    outer loop
+       vertex 2.85773 0.1099 0.489362
+       vertex 2.86578 0.112749 -0.510638
+       vertex 2.86578 0.112749 0.489362
+    endloop
+  endfacet
+  facet normal 0.350999 -0.936376 0
+    outer loop
+       vertex 2.86578 0.112749 0.489362
+       vertex 2.86578 0.112749 -0.510638
+       vertex 2.87382 0.115762 -0.510638
+    endloop
+  endfacet
+  facet normal 0.350999 -0.936376 0
+    outer loop
+       vertex 2.86578 0.112749 0.489362
+       vertex 2.87382 0.115762 -0.510638
+       vertex 2.87382 0.115762 0.489362
+    endloop
+  endfacet
+  facet normal 0.367944 -0.929848 0
+    outer loop
+       vertex 2.87382 0.115762 0.489362
+       vertex 2.87382 0.115762 -0.510638
+       vertex 2.88185 0.11894 -0.510638
+    endloop
+  endfacet
+  facet normal 0.367944 -0.929848 0
+    outer loop
+       vertex 2.87382 0.115762 0.489362
+       vertex 2.88185 0.11894 -0.510638
+       vertex 2.88185 0.11894 0.489362
+    endloop
+  endfacet
+  facet normal 0.384618 -0.923076 0
+    outer loop
+       vertex 2.88185 0.11894 0.489362
+       vertex 2.88185 0.11894 -0.510638
+       vertex 2.88987 0.122281 -0.510638
+    endloop
+  endfacet
+  facet normal 0.384618 -0.923076 0
+    outer loop
+       vertex 2.88185 0.11894 0.489362
+       vertex 2.88987 0.122281 -0.510638
+       vertex 2.88987 0.122281 0.489362
+    endloop
+  endfacet
+  facet normal 0.401009 -0.916074 0
+    outer loop
+       vertex 2.88987 0.122281 0.489362
+       vertex 2.88987 0.122281 -0.510638
+       vertex 2.89787 0.125784 -0.510638
+    endloop
+  endfacet
+  facet normal 0.401009 -0.916074 0
+    outer loop
+       vertex 2.88987 0.122281 0.489362
+       vertex 2.89787 0.125784 -0.510638
+       vertex 2.89787 0.125784 0.489362
+    endloop
+  endfacet
+  facet normal 0.417136 -0.908844 0
+    outer loop
+       vertex 2.89787 0.125784 0.489362
+       vertex 2.89787 0.125784 -0.510638
+       vertex 2.90585 0.129449 -0.510638
+    endloop
+  endfacet
+  facet normal 0.417136 -0.908844 0
+    outer loop
+       vertex 2.89787 0.125784 0.489362
+       vertex 2.90585 0.129449 -0.510638
+       vertex 2.90585 0.129449 0.489362
+    endloop
+  endfacet
+  facet normal 0.433005 -0.901391 0
+    outer loop
+       vertex 2.90585 0.129449 0.489362
+       vertex 2.90585 0.129449 -0.510638
+       vertex 2.91382 0.133274 -0.510638
+    endloop
+  endfacet
+  facet normal 0.433005 -0.901391 0
+    outer loop
+       vertex 2.90585 0.129449 0.489362
+       vertex 2.91382 0.133274 -0.510638
+       vertex 2.91382 0.133274 0.489362
+    endloop
+  endfacet
+  facet normal 0.448637 -0.893714 0
+    outer loop
+       vertex 2.91382 0.133274 0.489362
+       vertex 2.91382 0.133274 -0.510638
+       vertex 2.92175 0.137258 -0.510638
+    endloop
+  endfacet
+  facet normal 0.448637 -0.893714 0
+    outer loop
+       vertex 2.91382 0.133274 0.489362
+       vertex 2.92175 0.137258 -0.510638
+       vertex 2.92175 0.137258 0.489362
+    endloop
+  endfacet
+  facet normal 0.464015 -0.885827 0
+    outer loop
+       vertex 2.92175 0.137258 0.489362
+       vertex 2.92175 0.137258 -0.510638
+       vertex 2.92966 0.141402 -0.510638
+    endloop
+  endfacet
+  facet normal 0.464015 -0.885827 0
+    outer loop
+       vertex 2.92175 0.137258 0.489362
+       vertex 2.92966 0.141402 -0.510638
+       vertex 2.92966 0.141402 0.489362
+    endloop
+  endfacet
+  facet normal 0.479171 -0.877722 0
+    outer loop
+       vertex 2.92966 0.141402 0.489362
+       vertex 2.92966 0.141402 -0.510638
+       vertex 2.93754 0.145703 -0.510638
+    endloop
+  endfacet
+  facet normal 0.479171 -0.877722 0
+    outer loop
+       vertex 2.92966 0.141402 0.489362
+       vertex 2.93754 0.145703 -0.510638
+       vertex 2.93754 0.145703 0.489362
+    endloop
+  endfacet
+  facet normal 0.494086 -0.869413 0
+    outer loop
+       vertex 2.93754 0.145703 0.489362
+       vertex 2.93754 0.145703 -0.510638
+       vertex 2.94539 0.15016 -0.510638
+    endloop
+  endfacet
+  facet normal 0.494086 -0.869413 0
+    outer loop
+       vertex 2.93754 0.145703 0.489362
+       vertex 2.94539 0.15016 -0.510638
+       vertex 2.94539 0.15016 0.489362
+    endloop
+  endfacet
+  facet normal 0.508791 -0.86089 0
+    outer loop
+       vertex 2.94539 0.15016 0.489362
+       vertex 2.94539 0.15016 -0.510638
+       vertex 2.95319 0.154774 -0.510638
+    endloop
+  endfacet
+  facet normal 0.508791 -0.86089 0
+    outer loop
+       vertex 2.94539 0.15016 0.489362
+       vertex 2.95319 0.154774 -0.510638
+       vertex 2.95319 0.154774 0.489362
+    endloop
+  endfacet
+  facet normal 0.523269 -0.852168 0
+    outer loop
+       vertex 2.95319 0.154774 0.489362
+       vertex 2.95319 0.154774 -0.510638
+       vertex 2.96096 0.159543 -0.510638
+    endloop
+  endfacet
+  facet normal 0.523269 -0.852168 0
+    outer loop
+       vertex 2.95319 0.154774 0.489362
+       vertex 2.96096 0.159543 -0.510638
+       vertex 2.96096 0.159543 0.489362
+    endloop
+  endfacet
+  facet normal 0.537546 -0.843234 0
+    outer loop
+       vertex 2.96096 0.159543 0.489362
+       vertex 2.96096 0.159543 -0.510638
+       vertex 2.96868 0.164466 -0.510638
+    endloop
+  endfacet
+  facet normal 0.537546 -0.843234 0
+    outer loop
+       vertex 2.96096 0.159543 0.489362
+       vertex 2.96868 0.164466 -0.510638
+       vertex 2.96868 0.164466 0.489362
+    endloop
+  endfacet
+  facet normal -1 0 -0
+    outer loop
+       vertex 2.96868 0.164466 0.489362
+       vertex 2.96868 0.164466 -0.510638
+       vertex 2.96868 0.0574664 -0.510638
+    endloop
+  endfacet
+  facet normal -1 -0 0
+    outer loop
+       vertex 2.96868 0.164466 0.489362
+       vertex 2.96868 0.0574664 -0.510638
+       vertex 2.96868 0.0574664 0.489362
+    endloop
+  endfacet
+  facet normal -0.458324 0.888785 0
+    outer loop
+       vertex 2.96868 0.0574664 0.489362
+       vertex 2.96868 0.0574664 -0.510638
+       vertex 2.96196 0.0540003 -0.510638
+    endloop
+  endfacet
+  facet normal -0.458324 0.888785 0
+    outer loop
+       vertex 2.96868 0.0574664 0.489362
+       vertex 2.96196 0.0540003 -0.510638
+       vertex 2.96196 0.0540003 0.489362
+    endloop
+  endfacet
+  facet normal -0.448531 0.893767 0
+    outer loop
+       vertex 2.96196 0.0540003 0.489362
+       vertex 2.96196 0.0540003 -0.510638
+       vertex 2.95519 0.0506042 -0.510638
+    endloop
+  endfacet
+  facet normal -0.448531 0.893767 0
+    outer loop
+       vertex 2.96196 0.0540003 0.489362
+       vertex 2.95519 0.0506042 -0.510638
+       vertex 2.95519 0.0506042 0.489362
+    endloop
+  endfacet
+  facet normal -0.438006 0.898972 0
+    outer loop
+       vertex 2.95519 0.0506042 0.489362
+       vertex 2.95519 0.0506042 -0.510638
+       vertex 2.94837 0.0472814 -0.510638
+    endloop
+  endfacet
+  facet normal -0.438006 0.898972 0
+    outer loop
+       vertex 2.95519 0.0506042 0.489362
+       vertex 2.94837 0.0472814 -0.510638
+       vertex 2.94837 0.0472814 0.489362
+    endloop
+  endfacet
+  facet normal -0.42679 0.904351 0
+    outer loop
+       vertex 2.94837 0.0472814 0.489362
+       vertex 2.94837 0.0472814 -0.510638
+       vertex 2.9415 0.0440353 -0.510638
+    endloop
+  endfacet
+  facet normal -0.42679 0.904351 0
+    outer loop
+       vertex 2.94837 0.0472814 0.489362
+       vertex 2.9415 0.0440353 -0.510638
+       vertex 2.9415 0.0440353 0.489362
+    endloop
+  endfacet
+  facet normal -0.4149 0.909867 0
+    outer loop
+       vertex 2.9415 0.0440353 0.489362
+       vertex 2.9415 0.0440353 -0.510638
+       vertex 2.93455 0.0408692 -0.510638
+    endloop
+  endfacet
+  facet normal -0.4149 0.909867 0
+    outer loop
+       vertex 2.9415 0.0440353 0.489362
+       vertex 2.93455 0.0408692 -0.510638
+       vertex 2.93455 0.0408692 0.489362
+    endloop
+  endfacet
+  facet normal -0.402356 0.915483 0
+    outer loop
+       vertex 2.93455 0.0408692 0.489362
+       vertex 2.93455 0.0408692 -0.510638
+       vertex 2.92754 0.0377864 -0.510638
+    endloop
+  endfacet
+  facet normal -0.402356 0.915483 0
+    outer loop
+       vertex 2.93455 0.0408692 0.489362
+       vertex 2.92754 0.0377864 -0.510638
+       vertex 2.92754 0.0377864 0.489362
+    endloop
+  endfacet
+  facet normal -0.389172 0.921165 0
+    outer loop
+       vertex 2.92754 0.0377864 0.489362
+       vertex 2.92754 0.0377864 -0.510638
+       vertex 2.92045 0.0347903 -0.510638
+    endloop
+  endfacet
+  facet normal -0.389172 0.921165 0
+    outer loop
+       vertex 2.92754 0.0377864 0.489362
+       vertex 2.92045 0.0347903 -0.510638
+       vertex 2.92045 0.0347903 0.489362
+    endloop
+  endfacet
+  facet normal -0.375399 0.926863 0
+    outer loop
+       vertex 2.92045 0.0347903 0.489362
+       vertex 2.92045 0.0347903 -0.510638
+       vertex 2.91327 0.0318842 -0.510638
+    endloop
+  endfacet
+  facet normal -0.375399 0.926863 0
+    outer loop
+       vertex 2.92045 0.0347903 0.489362
+       vertex 2.91327 0.0318842 -0.510638
+       vertex 2.91327 0.0318842 0.489362
+    endloop
+  endfacet
+  facet normal -0.361048 0.932547 0
+    outer loop
+       vertex 2.91327 0.0318842 0.489362
+       vertex 2.91327 0.0318842 -0.510638
+       vertex 2.90601 0.0290714 -0.510638
+    endloop
+  endfacet
+  facet normal -0.361048 0.932547 0
+    outer loop
+       vertex 2.91327 0.0318842 0.489362
+       vertex 2.90601 0.0290714 -0.510638
+       vertex 2.90601 0.0290714 0.489362
+    endloop
+  endfacet
+  facet normal -0.346175 0.93817 0
+    outer loop
+       vertex 2.90601 0.0290714 0.489362
+       vertex 2.90601 0.0290714 -0.510638
+       vertex 2.89864 0.0263553 -0.510638
+    endloop
+  endfacet
+  facet normal -0.346175 0.93817 0
+    outer loop
+       vertex 2.90601 0.0290714 0.489362
+       vertex 2.89864 0.0263553 -0.510638
+       vertex 2.89864 0.0263553 0.489362
+    endloop
+  endfacet
+  facet normal -0.330799 0.943701 0
+    outer loop
+       vertex 2.89864 0.0263553 0.489362
+       vertex 2.89864 0.0263553 -0.510638
+       vertex 2.89118 0.0237392 -0.510638
+    endloop
+  endfacet
+  facet normal -0.330799 0.943701 0
+    outer loop
+       vertex 2.89864 0.0263553 0.489362
+       vertex 2.89118 0.0237392 -0.510638
+       vertex 2.89118 0.0237392 0.489362
+    endloop
+  endfacet
+  facet normal -0.314973 0.949101 0
+    outer loop
+       vertex 2.89118 0.0237392 0.489362
+       vertex 2.89118 0.0237392 -0.510638
+       vertex 2.88361 0.0212264 -0.510638
+    endloop
+  endfacet
+  facet normal -0.314973 0.949101 0
+    outer loop
+       vertex 2.89118 0.0237392 0.489362
+       vertex 2.88361 0.0212264 -0.510638
+       vertex 2.88361 0.0212264 0.489362
+    endloop
+  endfacet
+  facet normal -0.298741 0.954334 0
+    outer loop
+       vertex 2.88361 0.0212264 0.489362
+       vertex 2.88361 0.0212264 -0.510638
+       vertex 2.87592 0.0188203 -0.510638
+    endloop
+  endfacet
+  facet normal -0.298741 0.954334 0
+    outer loop
+       vertex 2.88361 0.0212264 0.489362
+       vertex 2.87592 0.0188203 -0.510638
+       vertex 2.87592 0.0188203 0.489362
+    endloop
+  endfacet
+  facet normal -0.28215 0.95937 0
+    outer loop
+       vertex 2.87592 0.0188203 0.489362
+       vertex 2.87592 0.0188203 -0.510638
+       vertex 2.86812 0.0165242 -0.510638
+    endloop
+  endfacet
+  facet normal -0.28215 0.95937 0
+    outer loop
+       vertex 2.87592 0.0188203 0.489362
+       vertex 2.86812 0.0165242 -0.510638
+       vertex 2.86812 0.0165242 0.489362
+    endloop
+  endfacet
+  facet normal -0.265251 0.964179 0
+    outer loop
+       vertex 2.86812 0.0165242 0.489362
+       vertex 2.86812 0.0165242 -0.510638
+       vertex 2.86018 0.0143414 -0.510638
+    endloop
+  endfacet
+  facet normal -0.265251 0.964179 0
+    outer loop
+       vertex 2.86812 0.0165242 0.489362
+       vertex 2.86018 0.0143414 -0.510638
+       vertex 2.86018 0.0143414 0.489362
+    endloop
+  endfacet
+  facet normal -0.248093 0.968736 0
+    outer loop
+       vertex 2.86018 0.0143414 0.489362
+       vertex 2.86018 0.0143414 -0.510638
+       vertex 2.85211 0.0122753 -0.510638
+    endloop
+  endfacet
+  facet normal -0.248093 0.968736 0
+    outer loop
+       vertex 2.86018 0.0143414 0.489362
+       vertex 2.85211 0.0122753 -0.510638
+       vertex 2.85211 0.0122753 0.489362
+    endloop
+  endfacet
+  facet normal -0.230721 0.97302 0
+    outer loop
+       vertex 2.85211 0.0122753 0.489362
+       vertex 2.85211 0.0122753 -0.510638
+       vertex 2.84391 0.0103292 -0.510638
+    endloop
+  endfacet
+  facet normal -0.230721 0.97302 0
+    outer loop
+       vertex 2.85211 0.0122753 0.489362
+       vertex 2.84391 0.0103292 -0.510638
+       vertex 2.84391 0.0103292 0.489362
+    endloop
+  endfacet
+  facet normal -0.213201 0.977008 0
+    outer loop
+       vertex 2.84391 0.0103292 0.489362
+       vertex 2.84391 0.0103292 -0.510638
+       vertex 2.83555 0.00850639 -0.510638
+    endloop
+  endfacet
+  facet normal -0.213201 0.977008 0
+    outer loop
+       vertex 2.84391 0.0103292 0.489362
+       vertex 2.83555 0.00850639 -0.510638
+       vertex 2.83555 0.00850639 0.489362
+    endloop
+  endfacet
+  facet normal -0.195572 0.980689 0
+    outer loop
+       vertex 2.83555 0.00850639 0.489362
+       vertex 2.83555 0.00850639 -0.510638
+       vertex 2.82705 0.00681028 -0.510638
+    endloop
+  endfacet
+  facet normal -0.195572 0.980689 0
+    outer loop
+       vertex 2.83555 0.00850639 0.489362
+       vertex 2.82705 0.00681028 -0.510638
+       vertex 2.82705 0.00681028 0.489362
+    endloop
+  endfacet
+  facet normal -0.177894 0.98405 0
+    outer loop
+       vertex 2.82705 0.00681028 0.489362
+       vertex 2.82705 0.00681028 -0.510638
+       vertex 2.81839 0.00524417 -0.510638
+    endloop
+  endfacet
+  facet normal -0.177894 0.98405 0
+    outer loop
+       vertex 2.82705 0.00681028 0.489362
+       vertex 2.81839 0.00524417 -0.510638
+       vertex 2.81839 0.00524417 0.489362
+    endloop
+  endfacet
+  facet normal -0.160209 0.987083 0
+    outer loop
+       vertex 2.81839 0.00524417 0.489362
+       vertex 2.81839 0.00524417 -0.510638
+       vertex 2.80956 0.00381139 -0.510638
+    endloop
+  endfacet
+  facet normal -0.160209 0.987083 0
+    outer loop
+       vertex 2.81839 0.00524417 0.489362
+       vertex 2.80956 0.00381139 -0.510638
+       vertex 2.80956 0.00381139 0.489362
+    endloop
+  endfacet
+  facet normal -0.142567 0.989785 0
+    outer loop
+       vertex 2.80956 0.00381139 0.489362
+       vertex 2.80956 0.00381139 -0.510638
+       vertex 2.80056 0.00251528 -0.510638
+    endloop
+  endfacet
+  facet normal -0.142567 0.989785 0
+    outer loop
+       vertex 2.80956 0.00381139 0.489362
+       vertex 2.80056 0.00251528 -0.510638
+       vertex 2.80056 0.00251528 0.489362
+    endloop
+  endfacet
+  facet normal -0.125014 0.992155 0
+    outer loop
+       vertex 2.80056 0.00251528 0.489362
+       vertex 2.80056 0.00251528 -0.510638
+       vertex 2.79138 0.00135917 -0.510638
+    endloop
+  endfacet
+  facet normal -0.125014 0.992155 0
+    outer loop
+       vertex 2.80056 0.00251528 0.489362
+       vertex 2.79138 0.00135917 -0.510638
+       vertex 2.79138 0.00135917 0.489362
+    endloop
+  endfacet
+  facet normal -0.107593 0.994195 0
+    outer loop
+       vertex 2.79138 0.00135917 0.489362
+       vertex 2.79138 0.00135917 -0.510638
+       vertex 2.78203 0.000346389 -0.510638
+    endloop
+  endfacet
+  facet normal -0.107593 0.994195 0
+    outer loop
+       vertex 2.79138 0.00135917 0.489362
+       vertex 2.78203 0.000346389 -0.510638
+       vertex 2.78203 0.000346389 0.489362
+    endloop
+  endfacet
+  facet normal -0.090343 0.995911 0
+    outer loop
+       vertex 2.78203 0.000346389 0.489362
+       vertex 2.78203 0.000346389 -0.510638
+       vertex 2.77248 -0.000519722 -0.510638
+    endloop
+  endfacet
+  facet normal -0.090343 0.995911 0
+    outer loop
+       vertex 2.78203 0.000346389 0.489362
+       vertex 2.77248 -0.000519722 -0.510638
+       vertex 2.77248 -0.000519722 0.489362
+    endloop
+  endfacet
+  facet normal -0.0733007 0.99731 0
+    outer loop
+       vertex 2.77248 -0.000519722 0.489362
+       vertex 2.77248 -0.000519722 -0.510638
+       vertex 2.76274 -0.00123583 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0733007 0.99731 0
+    outer loop
+       vertex 2.77248 -0.000519722 0.489362
+       vertex 2.76274 -0.00123583 -0.510638
+       vertex 2.76274 -0.00123583 0.489362
+    endloop
+  endfacet
+  facet normal -0.0564977 0.998403 0
+    outer loop
+       vertex 2.76274 -0.00123583 0.489362
+       vertex 2.76274 -0.00123583 -0.510638
+       vertex 2.75279 -0.00179861 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0564977 0.998403 0
+    outer loop
+       vertex 2.76274 -0.00123583 0.489362
+       vertex 2.75279 -0.00179861 -0.510638
+       vertex 2.75279 -0.00179861 0.489362
+    endloop
+  endfacet
+  facet normal -0.039967 0.999201 0
+    outer loop
+       vertex 2.75279 -0.00179861 0.489362
+       vertex 2.75279 -0.00179861 -0.510638
+       vertex 2.74264 -0.00220472 -0.510638
+    endloop
+  endfacet
+  facet normal -0.039967 0.999201 0
+    outer loop
+       vertex 2.75279 -0.00179861 0.489362
+       vertex 2.74264 -0.00220472 -0.510638
+       vertex 2.74264 -0.00220472 0.489362
+    endloop
+  endfacet
+  facet normal -0.0237328 0.999718 0
+    outer loop
+       vertex 2.74264 -0.00220472 0.489362
+       vertex 2.74264 -0.00220472 -0.510638
+       vertex 2.73227 -0.00245083 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0237328 0.999718 0
+    outer loop
+       vertex 2.74264 -0.00220472 0.489362
+       vertex 2.73227 -0.00245083 -0.510638
+       vertex 2.73227 -0.00245083 0.489362
+    endloop
+  endfacet
+  facet normal -0.00781807 0.999969 0
+    outer loop
+       vertex 2.73227 -0.00245083 0.489362
+       vertex 2.73227 -0.00245083 -0.510638
+       vertex 2.72168 -0.00253361 -0.510638
+    endloop
+  endfacet
+  facet normal -0.00781807 0.999969 0
+    outer loop
+       vertex 2.73227 -0.00245083 0.489362
+       vertex 2.72168 -0.00253361 -0.510638
+       vertex 2.72168 -0.00253361 0.489362
+    endloop
+  endfacet
+  facet normal 0.0257626 0.999668 0
+    outer loop
+       vertex 2.72168 -0.00253361 0.489362
+       vertex 2.72168 -0.00253361 -0.510638
+       vertex 2.69656 -0.00188622 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0257626 0.999668 0
+    outer loop
+       vertex 2.72168 -0.00253361 0.489362
+       vertex 2.69656 -0.00188622 -0.510638
+       vertex 2.69656 -0.00188622 0.489362
+    endloop
+  endfacet
+  facet normal 0.0785756 0.996908 0
+    outer loop
+       vertex 2.69656 -0.00188622 0.489362
+       vertex 2.69656 -0.00188622 -0.510638
+       vertex 2.67239 1.87089e-05 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0785756 0.996908 0
+    outer loop
+       vertex 2.69656 -0.00188622 0.489362
+       vertex 2.67239 1.87089e-05 -0.510638
+       vertex 2.67239 1.87089e-05 0.489362
+    endloop
+  endfacet
+  facet normal 0.132599 0.99117 0
+    outer loop
+       vertex 2.67239 1.87089e-05 0.489362
+       vertex 2.67239 1.87089e-05 -0.510638
+       vertex 2.64917 0.00312541 -0.510638
+    endloop
+  endfacet
+  facet normal 0.132599 0.99117 0
+    outer loop
+       vertex 2.67239 1.87089e-05 0.489362
+       vertex 2.64917 0.00312541 -0.510638
+       vertex 2.64917 0.00312541 0.489362
+    endloop
+  endfacet
+  facet normal 0.18746 0.982272 0
+    outer loop
+       vertex 2.64917 0.00312541 0.489362
+       vertex 2.64917 0.00312541 -0.510638
+       vertex 2.62689 0.00737811 -0.510638
+    endloop
+  endfacet
+  facet normal 0.18746 0.982272 0
+    outer loop
+       vertex 2.64917 0.00312541 0.489362
+       vertex 2.62689 0.00737811 -0.510638
+       vertex 2.62689 0.00737811 0.489362
+    endloop
+  endfacet
+  facet normal 0.242743 0.970091 0
+    outer loop
+       vertex 2.62689 0.00737811 0.489362
+       vertex 2.62689 0.00737811 -0.510638
+       vertex 2.60553 0.012721 -0.510638
+    endloop
+  endfacet
+  facet normal 0.242743 0.970091 0
+    outer loop
+       vertex 2.62689 0.00737811 0.489362
+       vertex 2.60553 0.012721 -0.510638
+       vertex 2.60553 0.012721 0.489362
+    endloop
+  endfacet
+  facet normal 0.298004 0.954565 0
+    outer loop
+       vertex 2.60553 0.012721 0.489362
+       vertex 2.60553 0.012721 -0.510638
+       vertex 2.58511 0.0190984 -0.510638
+    endloop
+  endfacet
+  facet normal 0.298004 0.954565 0
+    outer loop
+       vertex 2.60553 0.012721 0.489362
+       vertex 2.58511 0.0190984 -0.510638
+       vertex 2.58511 0.0190984 0.489362
+    endloop
+  endfacet
+  facet normal 0.352788 0.935703 0
+    outer loop
+       vertex 2.58511 0.0190984 0.489362
+       vertex 2.58511 0.0190984 -0.510638
+       vertex 2.5656 0.0264544 -0.510638
+    endloop
+  endfacet
+  facet normal 0.352788 0.935703 0
+    outer loop
+       vertex 2.58511 0.0190984 0.489362
+       vertex 2.5656 0.0264544 -0.510638
+       vertex 2.5656 0.0264544 0.489362
+    endloop
+  endfacet
+  facet normal 0.406637 0.91359 0
+    outer loop
+       vertex 2.5656 0.0264544 0.489362
+       vertex 2.5656 0.0264544 -0.510638
+       vertex 2.547 0.0347334 -0.510638
+    endloop
+  endfacet
+  facet normal 0.406637 0.91359 0
+    outer loop
+       vertex 2.5656 0.0264544 0.489362
+       vertex 2.547 0.0347334 -0.510638
+       vertex 2.547 0.0347334 0.489362
+    endloop
+  endfacet
+  facet normal 0.45912 0.888374 0
+    outer loop
+       vertex 2.547 0.0347334 0.489362
+       vertex 2.547 0.0347334 -0.510638
+       vertex 2.5293 0.0438794 -0.510638
+    endloop
+  endfacet
+  facet normal 0.45912 0.888374 0
+    outer loop
+       vertex 2.547 0.0347334 0.489362
+       vertex 2.5293 0.0438794 -0.510638
+       vertex 2.5293 0.0438794 0.489362
+    endloop
+  endfacet
+  facet normal 0.509846 0.860266 0
+    outer loop
+       vertex 2.5293 0.0438794 0.489362
+       vertex 2.5293 0.0438794 -0.510638
+       vertex 2.5125 0.0538368 -0.510638
+    endloop
+  endfacet
+  facet normal 0.509846 0.860266 0
+    outer loop
+       vertex 2.5293 0.0438794 0.489362
+       vertex 2.5125 0.0538368 -0.510638
+       vertex 2.5125 0.0538368 0.489362
+    endloop
+  endfacet
+  facet normal 0.558474 0.829522 0
+    outer loop
+       vertex 2.5125 0.0538368 0.489362
+       vertex 2.5125 0.0538368 -0.510638
+       vertex 2.49659 0.0645497 -0.510638
+    endloop
+  endfacet
+  facet normal 0.558474 0.829522 0
+    outer loop
+       vertex 2.5125 0.0538368 0.489362
+       vertex 2.49659 0.0645497 -0.510638
+       vertex 2.49659 0.0645497 0.489362
+    endloop
+  endfacet
+  facet normal 0.604728 0.796432 0
+    outer loop
+       vertex 2.49659 0.0645497 0.489362
+       vertex 2.49659 0.0645497 -0.510638
+       vertex 2.48155 0.0759624 -0.510638
+    endloop
+  endfacet
+  facet normal 0.604728 0.796432 0
+    outer loop
+       vertex 2.49659 0.0645497 0.489362
+       vertex 2.48155 0.0759624 -0.510638
+       vertex 2.48155 0.0759624 0.489362
+    endloop
+  endfacet
+  facet normal 0.648404 0.761296 0
+    outer loop
+       vertex 2.48155 0.0759624 0.489362
+       vertex 2.48155 0.0759624 -0.510638
+       vertex 2.4674 0.0880191 -0.510638
+    endloop
+  endfacet
+  facet normal 0.648404 0.761296 0
+    outer loop
+       vertex 2.48155 0.0759624 0.489362
+       vertex 2.4674 0.0880191 -0.510638
+       vertex 2.4674 0.0880191 0.489362
+    endloop
+  endfacet
+  facet normal 0.689353 0.724425 0
+    outer loop
+       vertex 2.4674 0.0880191 0.489362
+       vertex 2.4674 0.0880191 -0.510638
+       vertex 2.45411 0.100664 -0.510638
+    endloop
+  endfacet
+  facet normal 0.689353 0.724425 0
+    outer loop
+       vertex 2.4674 0.0880191 0.489362
+       vertex 2.45411 0.100664 -0.510638
+       vertex 2.45411 0.100664 0.489362
+    endloop
+  endfacet
+  facet normal 0.727495 0.686113 0
+    outer loop
+       vertex 2.45411 0.100664 0.489362
+       vertex 2.45411 0.100664 -0.510638
+       vertex 2.44168 0.113841 -0.510638
+    endloop
+  endfacet
+  facet normal 0.727495 0.686113 0
+    outer loop
+       vertex 2.45411 0.100664 0.489362
+       vertex 2.44168 0.113841 -0.510638
+       vertex 2.44168 0.113841 0.489362
+    endloop
+  endfacet
+  facet normal 0.762805 0.646628 0
+    outer loop
+       vertex 2.44168 0.113841 0.489362
+       vertex 2.44168 0.113841 -0.510638
+       vertex 2.43011 0.127495 -0.510638
+    endloop
+  endfacet
+  facet normal 0.762805 0.646628 0
+    outer loop
+       vertex 2.44168 0.113841 0.489362
+       vertex 2.43011 0.127495 -0.510638
+       vertex 2.43011 0.127495 0.489362
+    endloop
+  endfacet
+  facet normal 0.795306 0.606208 0
+    outer loop
+       vertex 2.43011 0.127495 0.489362
+       vertex 2.43011 0.127495 -0.510638
+       vertex 2.41938 0.14157 -0.510638
+    endloop
+  endfacet
+  facet normal 0.795306 0.606208 0
+    outer loop
+       vertex 2.43011 0.127495 0.489362
+       vertex 2.41938 0.14157 -0.510638
+       vertex 2.41938 0.14157 0.489362
+    endloop
+  endfacet
+  facet normal 0.825065 0.565038 0
+    outer loop
+       vertex 2.41938 0.14157 0.489362
+       vertex 2.41938 0.14157 -0.510638
+       vertex 2.40949 0.15601 -0.510638
+    endloop
+  endfacet
+  facet normal 0.825065 0.565038 0
+    outer loop
+       vertex 2.41938 0.14157 0.489362
+       vertex 2.40949 0.15601 -0.510638
+       vertex 2.40949 0.15601 0.489362
+    endloop
+  endfacet
+  facet normal 0.852155 0.52329 0
+    outer loop
+       vertex 2.40949 0.15601 0.489362
+       vertex 2.40949 0.15601 -0.510638
+       vertex 2.40043 0.17076 -0.510638
+    endloop
+  endfacet
+  facet normal 0.852155 0.52329 0
+    outer loop
+       vertex 2.40949 0.15601 0.489362
+       vertex 2.40043 0.17076 -0.510638
+       vertex 2.40043 0.17076 0.489362
+    endloop
+  endfacet
+  facet normal 0.876691 0.481055 0
+    outer loop
+       vertex 2.40043 0.17076 0.489362
+       vertex 2.40043 0.17076 -0.510638
+       vertex 2.3922 0.185763 -0.510638
+    endloop
+  endfacet
+  facet normal 0.876691 0.481055 0
+    outer loop
+       vertex 2.40043 0.17076 0.489362
+       vertex 2.3922 0.185763 -0.510638
+       vertex 2.3922 0.185763 0.489362
+    endloop
+  endfacet
+  facet normal 0.898778 0.438405 0
+    outer loop
+       vertex 2.3922 0.185763 0.489362
+       vertex 2.3922 0.185763 -0.510638
+       vertex 2.38479 0.200963 -0.510638
+    endloop
+  endfacet
+  facet normal 0.898778 0.438405 0
+    outer loop
+       vertex 2.3922 0.185763 0.489362
+       vertex 2.38479 0.200963 -0.510638
+       vertex 2.38479 0.200963 0.489362
+    endloop
+  endfacet
+  facet normal 0.918526 0.395361 0
+    outer loop
+       vertex 2.38479 0.200963 0.489362
+       vertex 2.38479 0.200963 -0.510638
+       vertex 2.37818 0.216306 -0.510638
+    endloop
+  endfacet
+  facet normal 0.918526 0.395361 0
+    outer loop
+       vertex 2.38479 0.200963 0.489362
+       vertex 2.37818 0.216306 -0.510638
+       vertex 2.37818 0.216306 0.489362
+    endloop
+  endfacet
+  facet normal 0.936042 0.351889 0
+    outer loop
+       vertex 2.37818 0.216306 0.489362
+       vertex 2.37818 0.216306 -0.510638
+       vertex 2.37238 0.231735 -0.510638
+    endloop
+  endfacet
+  facet normal 0.936042 0.351889 0
+    outer loop
+       vertex 2.37818 0.216306 0.489362
+       vertex 2.37238 0.231735 -0.510638
+       vertex 2.37238 0.231735 0.489362
+    endloop
+  endfacet
+  facet normal 0.951402 0.307952 0
+    outer loop
+       vertex 2.37238 0.231735 0.489362
+       vertex 2.37238 0.231735 -0.510638
+       vertex 2.36738 0.247194 -0.510638
+    endloop
+  endfacet
+  facet normal 0.951402 0.307952 0
+    outer loop
+       vertex 2.37238 0.231735 0.489362
+       vertex 2.36738 0.247194 -0.510638
+       vertex 2.36738 0.247194 0.489362
+    endloop
+  endfacet
+  facet normal 0.964681 0.263422 0
+    outer loop
+       vertex 2.36738 0.247194 0.489362
+       vertex 2.36738 0.247194 -0.510638
+       vertex 2.36316 0.262628 -0.510638
+    endloop
+  endfacet
+  facet normal 0.964681 0.263422 0
+    outer loop
+       vertex 2.36738 0.247194 0.489362
+       vertex 2.36316 0.262628 -0.510638
+       vertex 2.36316 0.262628 0.489362
+    endloop
+  endfacet
+  facet normal 0.97591 0.218173 0
+    outer loop
+       vertex 2.36316 0.262628 0.489362
+       vertex 2.36316 0.262628 -0.510638
+       vertex 2.35973 0.277981 -0.510638
+    endloop
+  endfacet
+  facet normal 0.97591 0.218173 0
+    outer loop
+       vertex 2.36316 0.262628 0.489362
+       vertex 2.35973 0.277981 -0.510638
+       vertex 2.35973 0.277981 0.489362
+    endloop
+  endfacet
+  facet normal 0.985092 0.172026 0
+    outer loop
+       vertex 2.35973 0.277981 0.489362
+       vertex 2.35973 0.277981 -0.510638
+       vertex 2.35707 0.293197 -0.510638
+    endloop
+  endfacet
+  facet normal 0.985092 0.172026 0
+    outer loop
+       vertex 2.35973 0.277981 0.489362
+       vertex 2.35707 0.293197 -0.510638
+       vertex 2.35707 0.293197 0.489362
+    endloop
+  endfacet
+  facet normal 0.992186 0.12477 0
+    outer loop
+       vertex 2.35707 0.293197 0.489362
+       vertex 2.35707 0.293197 -0.510638
+       vertex 2.35519 0.308221 -0.510638
+    endloop
+  endfacet
+  facet normal 0.992186 0.12477 0
+    outer loop
+       vertex 2.35707 0.293197 0.489362
+       vertex 2.35519 0.308221 -0.510638
+       vertex 2.35519 0.308221 0.489362
+    endloop
+  endfacet
+  facet normal 0.997097 0.0761373 0
+    outer loop
+       vertex 2.35519 0.308221 0.489362
+       vertex 2.35519 0.308221 -0.510638
+       vertex 2.35406 0.322996 -0.510638
+    endloop
+  endfacet
+  facet normal 0.997097 0.0761373 0
+    outer loop
+       vertex 2.35519 0.308221 0.489362
+       vertex 2.35406 0.322996 -0.510638
+       vertex 2.35406 0.322996 0.489362
+    endloop
+  endfacet
+  facet normal 0.999665 0.0258751 0
+    outer loop
+       vertex 2.35406 0.322996 0.489362
+       vertex 2.35406 0.322996 -0.510638
+       vertex 2.35368 0.337466 -0.510638
+    endloop
+  endfacet
+  facet normal 0.999665 0.0258751 0
+    outer loop
+       vertex 2.35406 0.322996 0.489362
+       vertex 2.35368 0.337466 -0.510638
+       vertex 2.35368 0.337466 0.489362
+    endloop
+  endfacet
+  facet normal 0.999682 -0.025211 0
+    outer loop
+       vertex 2.35368 0.337466 0.489362
+       vertex 2.35368 0.337466 -0.510638
+       vertex 2.3542 0.358076 -0.510638
+    endloop
+  endfacet
+  facet normal 0.999682 -0.025211 0
+    outer loop
+       vertex 2.35368 0.337466 0.489362
+       vertex 2.3542 0.358076 -0.510638
+       vertex 2.3542 0.358076 0.489362
+    endloop
+  endfacet
+  facet normal 0.997092 -0.0762033 0
+    outer loop
+       vertex 2.3542 0.358076 0.489362
+       vertex 2.3542 0.358076 -0.510638
+       vertex 2.35575 0.378291 -0.510638
+    endloop
+  endfacet
+  facet normal 0.997092 -0.0762033 0
+    outer loop
+       vertex 2.3542 0.358076 0.489362
+       vertex 2.35575 0.378291 -0.510638
+       vertex 2.35575 0.378291 0.489362
+    endloop
+  endfacet
+  facet normal 0.991818 -0.127662 0
+    outer loop
+       vertex 2.35575 0.378291 0.489362
+       vertex 2.35575 0.378291 -0.510638
+       vertex 2.3583 0.39809 -0.510638
+    endloop
+  endfacet
+  facet normal 0.991818 -0.127662 0
+    outer loop
+       vertex 2.35575 0.378291 0.489362
+       vertex 2.3583 0.39809 -0.510638
+       vertex 2.3583 0.39809 0.489362
+    endloop
+  endfacet
+  facet normal 0.983779 -0.179386 0
+    outer loop
+       vertex 2.3583 0.39809 0.489362
+       vertex 2.3583 0.39809 -0.510638
+       vertex 2.36183 0.417452 -0.510638
+    endloop
+  endfacet
+  facet normal 0.983779 -0.179386 0
+    outer loop
+       vertex 2.3583 0.39809 0.489362
+       vertex 2.36183 0.417452 -0.510638
+       vertex 2.36183 0.417452 0.489362
+    endloop
+  endfacet
+  facet normal 0.972921 -0.231139 0
+    outer loop
+       vertex 2.36183 0.417452 0.489362
+       vertex 2.36183 0.417452 -0.510638
+       vertex 2.36632 0.436355 -0.510638
+    endloop
+  endfacet
+  facet normal 0.972921 -0.231139 0
+    outer loop
+       vertex 2.36183 0.417452 0.489362
+       vertex 2.36632 0.436355 -0.510638
+       vertex 2.36632 0.436355 0.489362
+    endloop
+  endfacet
+  facet normal 0.959208 -0.282702 0
+    outer loop
+       vertex 2.36632 0.436355 0.489362
+       vertex 2.36632 0.436355 -0.510638
+       vertex 2.37175 0.454778 -0.510638
+    endloop
+  endfacet
+  facet normal 0.959208 -0.282702 0
+    outer loop
+       vertex 2.36632 0.436355 0.489362
+       vertex 2.37175 0.454778 -0.510638
+       vertex 2.37175 0.454778 0.489362
+    endloop
+  endfacet
+  facet normal 0.942629 -0.333842 0
+    outer loop
+       vertex 2.37175 0.454778 0.489362
+       vertex 2.37175 0.454778 -0.510638
+       vertex 2.37809 0.4727 -0.510638
+    endloop
+  endfacet
+  facet normal 0.942629 -0.333842 0
+    outer loop
+       vertex 2.37175 0.454778 0.489362
+       vertex 2.37809 0.4727 -0.510638
+       vertex 2.37809 0.4727 0.489362
+    endloop
+  endfacet
+  facet normal 0.923203 -0.384312 0
+    outer loop
+       vertex 2.37809 0.4727 0.489362
+       vertex 2.37809 0.4727 -0.510638
+       vertex 2.38534 0.490099 -0.510638
+    endloop
+  endfacet
+  facet normal 0.923203 -0.384312 0
+    outer loop
+       vertex 2.37809 0.4727 0.489362
+       vertex 2.38534 0.490099 -0.510638
+       vertex 2.38534 0.490099 0.489362
+    endloop
+  endfacet
+  facet normal 0.90097 -0.433882 0
+    outer loop
+       vertex 2.38534 0.490099 0.489362
+       vertex 2.38534 0.490099 -0.510638
+       vertex 2.39345 0.506954 -0.510638
+    endloop
+  endfacet
+  facet normal 0.90097 -0.433882 0
+    outer loop
+       vertex 2.38534 0.490099 0.489362
+       vertex 2.39345 0.506954 -0.510638
+       vertex 2.39345 0.506954 0.489362
+    endloop
+  endfacet
+  facet normal 0.875979 -0.482348 0
+    outer loop
+       vertex 2.39345 0.506954 0.489362
+       vertex 2.39345 0.506954 -0.510638
+       vertex 2.40242 0.523244 -0.510638
+    endloop
+  endfacet
+  facet normal 0.875979 -0.482348 0
+    outer loop
+       vertex 2.39345 0.506954 0.489362
+       vertex 2.40242 0.523244 -0.510638
+       vertex 2.40242 0.523244 0.489362
+    endloop
+  endfacet
+  facet normal 0.848327 -0.529472 0
+    outer loop
+       vertex 2.40242 0.523244 0.489362
+       vertex 2.40242 0.523244 -0.510638
+       vertex 2.41222 0.538947 -0.510638
+    endloop
+  endfacet
+  facet normal 0.848327 -0.529472 0
+    outer loop
+       vertex 2.40242 0.523244 0.489362
+       vertex 2.41222 0.538947 -0.510638
+       vertex 2.41222 0.538947 0.489362
+    endloop
+  endfacet
+  facet normal 0.818116 -0.575053 0
+    outer loop
+       vertex 2.41222 0.538947 0.489362
+       vertex 2.41222 0.538947 -0.510638
+       vertex 2.42283 0.554042 -0.510638
+    endloop
+  endfacet
+  facet normal 0.818116 -0.575053 0
+    outer loop
+       vertex 2.41222 0.538947 0.489362
+       vertex 2.42283 0.554042 -0.510638
+       vertex 2.42283 0.554042 0.489362
+    endloop
+  endfacet
+  facet normal 0.785465 -0.618906 0
+    outer loop
+       vertex 2.42283 0.554042 0.489362
+       vertex 2.42283 0.554042 -0.510638
+       vertex 2.43423 0.568508 -0.510638
+    endloop
+  endfacet
+  facet normal 0.785465 -0.618906 0
+    outer loop
+       vertex 2.42283 0.554042 0.489362
+       vertex 2.43423 0.568508 -0.510638
+       vertex 2.43423 0.568508 0.489362
+    endloop
+  endfacet
+  facet normal 0.75051 -0.660859 0
+    outer loop
+       vertex 2.43423 0.568508 0.489362
+       vertex 2.43423 0.568508 -0.510638
+       vertex 2.4464 0.582323 -0.510638
+    endloop
+  endfacet
+  facet normal 0.75051 -0.660859 0
+    outer loop
+       vertex 2.43423 0.568508 0.489362
+       vertex 2.4464 0.582323 -0.510638
+       vertex 2.4464 0.582323 0.489362
+    endloop
+  endfacet
+  facet normal 0.713415 -0.700742 0
+    outer loop
+       vertex 2.4464 0.582323 0.489362
+       vertex 2.4464 0.582323 -0.510638
+       vertex 2.45931 0.595466 -0.510638
+    endloop
+  endfacet
+  facet normal 0.713415 -0.700742 0
+    outer loop
+       vertex 2.4464 0.582323 0.489362
+       vertex 2.45931 0.595466 -0.510638
+       vertex 2.45931 0.595466 0.489362
+    endloop
+  endfacet
+  facet normal 0.674336 -0.738424 0
+    outer loop
+       vertex 2.45931 0.595466 0.489362
+       vertex 2.45931 0.595466 -0.510638
+       vertex 2.47294 0.607916 -0.510638
+    endloop
+  endfacet
+  facet normal 0.674336 -0.738424 0
+    outer loop
+       vertex 2.45931 0.595466 0.489362
+       vertex 2.47294 0.607916 -0.510638
+       vertex 2.47294 0.607916 0.489362
+    endloop
+  endfacet
+  facet normal 0.63345 -0.773783 0
+    outer loop
+       vertex 2.47294 0.607916 0.489362
+       vertex 2.47294 0.607916 -0.510638
+       vertex 2.48728 0.619651 -0.510638
+    endloop
+  endfacet
+  facet normal 0.63345 -0.773783 0
+    outer loop
+       vertex 2.47294 0.607916 0.489362
+       vertex 2.48728 0.619651 -0.510638
+       vertex 2.48728 0.619651 0.489362
+    endloop
+  endfacet
+  facet normal 0.590946 -0.806711 0
+    outer loop
+       vertex 2.48728 0.619651 0.489362
+       vertex 2.48728 0.619651 -0.510638
+       vertex 2.50229 0.63065 -0.510638
+    endloop
+  endfacet
+  facet normal 0.590946 -0.806711 0
+    outer loop
+       vertex 2.48728 0.619651 0.489362
+       vertex 2.50229 0.63065 -0.510638
+       vertex 2.50229 0.63065 0.489362
+    endloop
+  endfacet
+  facet normal 0.547012 -0.837125 0
+    outer loop
+       vertex 2.50229 0.63065 0.489362
+       vertex 2.50229 0.63065 -0.510638
+       vertex 2.51796 0.640892 -0.510638
+    endloop
+  endfacet
+  facet normal 0.547012 -0.837125 0
+    outer loop
+       vertex 2.50229 0.63065 0.489362
+       vertex 2.51796 0.640892 -0.510638
+       vertex 2.51796 0.640892 0.489362
+    endloop
+  endfacet
+  facet normal 0.501829 -0.864967 0
+    outer loop
+       vertex 2.51796 0.640892 0.489362
+       vertex 2.51796 0.640892 -0.510638
+       vertex 2.53428 0.650355 -0.510638
+    endloop
+  endfacet
+  facet normal 0.501829 -0.864967 0
+    outer loop
+       vertex 2.51796 0.640892 0.489362
+       vertex 2.53428 0.650355 -0.510638
+       vertex 2.53428 0.650355 0.489362
+    endloop
+  endfacet
+  facet normal 0.455607 -0.890181 0
+    outer loop
+       vertex 2.53428 0.650355 0.489362
+       vertex 2.53428 0.650355 -0.510638
+       vertex 2.5512 0.659018 -0.510638
+    endloop
+  endfacet
+  facet normal 0.455607 -0.890181 0
+    outer loop
+       vertex 2.53428 0.650355 0.489362
+       vertex 2.5512 0.659018 -0.510638
+       vertex 2.5512 0.659018 0.489362
+    endloop
+  endfacet
+  facet normal 0.408526 -0.912747 0
+    outer loop
+       vertex 2.5512 0.659018 0.489362
+       vertex 2.5512 0.659018 -0.510638
+       vertex 2.56872 0.66686 -0.510638
+    endloop
+  endfacet
+  facet normal 0.408526 -0.912747 0
+    outer loop
+       vertex 2.5512 0.659018 0.489362
+       vertex 2.56872 0.66686 -0.510638
+       vertex 2.56872 0.66686 0.489362
+    endloop
+  endfacet
+  facet normal 0.36079 -0.932647 0
+    outer loop
+       vertex 2.56872 0.66686 0.489362
+       vertex 2.56872 0.66686 -0.510638
+       vertex 2.58681 0.673859 -0.510638
+    endloop
+  endfacet
+  facet normal 0.36079 -0.932647 0
+    outer loop
+       vertex 2.56872 0.66686 0.489362
+       vertex 2.58681 0.673859 -0.510638
+       vertex 2.58681 0.673859 0.489362
+    endloop
+  endfacet
+  facet normal 0.312583 -0.94989 0
+    outer loop
+       vertex 2.58681 0.673859 0.489362
+       vertex 2.58681 0.673859 -0.510638
+       vertex 2.60546 0.679994 -0.510638
+    endloop
+  endfacet
+  facet normal 0.312583 -0.94989 0
+    outer loop
+       vertex 2.58681 0.673859 0.489362
+       vertex 2.60546 0.679994 -0.510638
+       vertex 2.60546 0.679994 0.489362
+    endloop
+  endfacet
+  facet normal 0.264089 -0.964498 0
+    outer loop
+       vertex 2.60546 0.679994 0.489362
+       vertex 2.60546 0.679994 -0.510638
+       vertex 2.62463 0.685244 -0.510638
+    endloop
+  endfacet
+  facet normal 0.264089 -0.964498 0
+    outer loop
+       vertex 2.60546 0.679994 0.489362
+       vertex 2.62463 0.685244 -0.510638
+       vertex 2.62463 0.685244 0.489362
+    endloop
+  endfacet
+  facet normal 0.215493 -0.976505 0
+    outer loop
+       vertex 2.62463 0.685244 0.489362
+       vertex 2.62463 0.685244 -0.510638
+       vertex 2.64431 0.689587 -0.510638
+    endloop
+  endfacet
+  facet normal 0.215493 -0.976505 0
+    outer loop
+       vertex 2.62463 0.685244 0.489362
+       vertex 2.64431 0.689587 -0.510638
+       vertex 2.64431 0.689587 0.489362
+    endloop
+  endfacet
+  facet normal 0.166963 -0.985963 0
+    outer loop
+       vertex 2.64431 0.689587 0.489362
+       vertex 2.64431 0.689587 -0.510638
+       vertex 2.66448 0.693002 -0.510638
+    endloop
+  endfacet
+  facet normal 0.166963 -0.985963 0
+    outer loop
+       vertex 2.64431 0.689587 0.489362
+       vertex 2.66448 0.693002 -0.510638
+       vertex 2.66448 0.693002 0.489362
+    endloop
+  endfacet
+  facet normal 0.118669 -0.992934 0
+    outer loop
+       vertex 2.66448 0.693002 0.489362
+       vertex 2.66448 0.693002 -0.510638
+       vertex 2.68511 0.695468 -0.510638
+    endloop
+  endfacet
+  facet normal 0.118669 -0.992934 0
+    outer loop
+       vertex 2.66448 0.693002 0.489362
+       vertex 2.68511 0.695468 -0.510638
+       vertex 2.68511 0.695468 0.489362
+    endloop
+  endfacet
+  facet normal 0.0707659 -0.997493 0
+    outer loop
+       vertex 2.68511 0.695468 0.489362
+       vertex 2.68511 0.695468 -0.510638
+       vertex 2.70619 0.696963 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0707659 -0.997493 0
+    outer loop
+       vertex 2.68511 0.695468 0.489362
+       vertex 2.70619 0.696963 -0.510638
+       vertex 2.70619 0.696963 0.489362
+    endloop
+  endfacet
+  facet normal 0.0233987 -0.999726 0
+    outer loop
+       vertex 2.70619 0.696963 0.489362
+       vertex 2.70619 0.696963 -0.510638
+       vertex 2.72768 0.697466 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0233987 -0.999726 0
+    outer loop
+       vertex 2.70619 0.696963 0.489362
+       vertex 2.72768 0.697466 -0.510638
+       vertex 2.72768 0.697466 0.489362
+    endloop
+  endfacet
+  facet normal -0.00810214 -0.999967 -0
+    outer loop
+       vertex 2.72768 0.697466 0.489362
+       vertex 2.72768 0.697466 -0.510638
+       vertex 2.73469 0.69741 -0.510638
+    endloop
+  endfacet
+  facet normal -0.00810214 -0.999967 0
+    outer loop
+       vertex 2.72768 0.697466 0.489362
+       vertex 2.73469 0.69741 -0.510638
+       vertex 2.73469 0.69741 0.489362
+    endloop
+  endfacet
+  facet normal -0.0244107 -0.999702 -0
+    outer loop
+       vertex 2.73469 0.69741 0.489362
+       vertex 2.73469 0.69741 -0.510638
+       vertex 2.7417 0.697238 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0244107 -0.999702 0
+    outer loop
+       vertex 2.73469 0.69741 0.489362
+       vertex 2.7417 0.697238 -0.510638
+       vertex 2.7417 0.697238 0.489362
+    endloop
+  endfacet
+  facet normal -0.0407653 -0.999169 -0
+    outer loop
+       vertex 2.7417 0.697238 0.489362
+       vertex 2.7417 0.697238 -0.510638
+       vertex 2.74873 0.696952 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0407653 -0.999169 0
+    outer loop
+       vertex 2.7417 0.697238 0.489362
+       vertex 2.74873 0.696952 -0.510638
+       vertex 2.74873 0.696952 0.489362
+    endloop
+  endfacet
+  facet normal -0.0571262 -0.998367 -0
+    outer loop
+       vertex 2.74873 0.696952 0.489362
+       vertex 2.74873 0.696952 -0.510638
+       vertex 2.75578 0.696548 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0571262 -0.998367 0
+    outer loop
+       vertex 2.74873 0.696952 0.489362
+       vertex 2.75578 0.696548 -0.510638
+       vertex 2.75578 0.696548 0.489362
+    endloop
+  endfacet
+  facet normal -0.0734577 -0.997298 -0
+    outer loop
+       vertex 2.75578 0.696548 0.489362
+       vertex 2.75578 0.696548 -0.510638
+       vertex 2.76286 0.696027 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0734577 -0.997298 0
+    outer loop
+       vertex 2.75578 0.696548 0.489362
+       vertex 2.76286 0.696027 -0.510638
+       vertex 2.76286 0.696027 0.489362
+    endloop
+  endfacet
+  facet normal -0.0897126 -0.995968 -0
+    outer loop
+       vertex 2.76286 0.696027 0.489362
+       vertex 2.76286 0.696027 -0.510638
+       vertex 2.76997 0.695386 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0897126 -0.995968 0
+    outer loop
+       vertex 2.76286 0.696027 0.489362
+       vertex 2.76997 0.695386 -0.510638
+       vertex 2.76997 0.695386 0.489362
+    endloop
+  endfacet
+  facet normal -0.105842 -0.994383 -0
+    outer loop
+       vertex 2.76997 0.695386 0.489362
+       vertex 2.76997 0.695386 -0.510638
+       vertex 2.77711 0.694626 -0.510638
+    endloop
+  endfacet
+  facet normal -0.105842 -0.994383 0
+    outer loop
+       vertex 2.76997 0.695386 0.489362
+       vertex 2.77711 0.694626 -0.510638
+       vertex 2.77711 0.694626 0.489362
+    endloop
+  endfacet
+  facet normal -0.121808 -0.992554 -0
+    outer loop
+       vertex 2.77711 0.694626 0.489362
+       vertex 2.77711 0.694626 -0.510638
+       vertex 2.78429 0.693745 -0.510638
+    endloop
+  endfacet
+  facet normal -0.121808 -0.992554 0
+    outer loop
+       vertex 2.77711 0.694626 0.489362
+       vertex 2.78429 0.693745 -0.510638
+       vertex 2.78429 0.693745 0.489362
+    endloop
+  endfacet
+  facet normal -0.137563 -0.990493 -0
+    outer loop
+       vertex 2.78429 0.693745 0.489362
+       vertex 2.78429 0.693745 -0.510638
+       vertex 2.79152 0.692741 -0.510638
+    endloop
+  endfacet
+  facet normal -0.137563 -0.990493 0
+    outer loop
+       vertex 2.78429 0.693745 0.489362
+       vertex 2.79152 0.692741 -0.510638
+       vertex 2.79152 0.692741 0.489362
+    endloop
+  endfacet
+  facet normal -0.153082 -0.988213 -0
+    outer loop
+       vertex 2.79152 0.692741 0.489362
+       vertex 2.79152 0.692741 -0.510638
+       vertex 2.79879 0.691615 -0.510638
+    endloop
+  endfacet
+  facet normal -0.153082 -0.988213 0
+    outer loop
+       vertex 2.79152 0.692741 0.489362
+       vertex 2.79879 0.691615 -0.510638
+       vertex 2.79879 0.691615 0.489362
+    endloop
+  endfacet
+  facet normal -0.168327 -0.985731 -0
+    outer loop
+       vertex 2.79879 0.691615 0.489362
+       vertex 2.79879 0.691615 -0.510638
+       vertex 2.80612 0.690363 -0.510638
+    endloop
+  endfacet
+  facet normal -0.168327 -0.985731 0
+    outer loop
+       vertex 2.79879 0.691615 0.489362
+       vertex 2.80612 0.690363 -0.510638
+       vertex 2.80612 0.690363 0.489362
+    endloop
+  endfacet
+  facet normal -0.183271 -0.983062 -0
+    outer loop
+       vertex 2.80612 0.690363 0.489362
+       vertex 2.80612 0.690363 -0.510638
+       vertex 2.81351 0.688986 -0.510638
+    endloop
+  endfacet
+  facet normal -0.183271 -0.983062 0
+    outer loop
+       vertex 2.80612 0.690363 0.489362
+       vertex 2.81351 0.688986 -0.510638
+       vertex 2.81351 0.688986 0.489362
+    endloop
+  endfacet
+  facet normal -0.197873 -0.980228 -0
+    outer loop
+       vertex 2.81351 0.688986 0.489362
+       vertex 2.81351 0.688986 -0.510638
+       vertex 2.82095 0.687483 -0.510638
+    endloop
+  endfacet
+  facet normal -0.197873 -0.980228 0
+    outer loop
+       vertex 2.81351 0.688986 0.489362
+       vertex 2.82095 0.687483 -0.510638
+       vertex 2.82095 0.687483 0.489362
+    endloop
+  endfacet
+  facet normal -0.212123 -0.977243 -0
+    outer loop
+       vertex 2.82095 0.687483 0.489362
+       vertex 2.82095 0.687483 -0.510638
+       vertex 2.82847 0.685852 -0.510638
+    endloop
+  endfacet
+  facet normal -0.212123 -0.977243 0
+    outer loop
+       vertex 2.82095 0.687483 0.489362
+       vertex 2.82847 0.685852 -0.510638
+       vertex 2.82847 0.685852 0.489362
+    endloop
+  endfacet
+  facet normal -0.225986 -0.974131 -0
+    outer loop
+       vertex 2.82847 0.685852 0.489362
+       vertex 2.82847 0.685852 -0.510638
+       vertex 2.83606 0.684091 -0.510638
+    endloop
+  endfacet
+  facet normal -0.225986 -0.974131 0
+    outer loop
+       vertex 2.82847 0.685852 0.489362
+       vertex 2.83606 0.684091 -0.510638
+       vertex 2.83606 0.684091 0.489362
+    endloop
+  endfacet
+  facet normal -0.23945 -0.970909 -0
+    outer loop
+       vertex 2.83606 0.684091 0.489362
+       vertex 2.83606 0.684091 -0.510638
+       vertex 2.84372 0.682201 -0.510638
+    endloop
+  endfacet
+  facet normal -0.23945 -0.970909 0
+    outer loop
+       vertex 2.83606 0.684091 0.489362
+       vertex 2.84372 0.682201 -0.510638
+       vertex 2.84372 0.682201 0.489362
+    endloop
+  endfacet
+  facet normal -0.252509 -0.967594 -0
+    outer loop
+       vertex 2.84372 0.682201 0.489362
+       vertex 2.84372 0.682201 -0.510638
+       vertex 2.85147 0.68018 -0.510638
+    endloop
+  endfacet
+  facet normal -0.252509 -0.967594 0
+    outer loop
+       vertex 2.84372 0.682201 0.489362
+       vertex 2.85147 0.68018 -0.510638
+       vertex 2.85147 0.68018 0.489362
+    endloop
+  endfacet
+  facet normal -0.265145 -0.964209 -0
+    outer loop
+       vertex 2.85147 0.68018 0.489362
+       vertex 2.85147 0.68018 -0.510638
+       vertex 2.8593 0.678026 -0.510638
+    endloop
+  endfacet
+  facet normal -0.265145 -0.964209 0
+    outer loop
+       vertex 2.85147 0.68018 0.489362
+       vertex 2.8593 0.678026 -0.510638
+       vertex 2.8593 0.678026 0.489362
+    endloop
+  endfacet
+  facet normal -0.277341 -0.960772 -0
+    outer loop
+       vertex 2.8593 0.678026 0.489362
+       vertex 2.8593 0.678026 -0.510638
+       vertex 2.86722 0.67574 -0.510638
+    endloop
+  endfacet
+  facet normal -0.277341 -0.960772 0
+    outer loop
+       vertex 2.8593 0.678026 0.489362
+       vertex 2.86722 0.67574 -0.510638
+       vertex 2.86722 0.67574 0.489362
+    endloop
+  endfacet
+  facet normal -0.289106 -0.957297 -0
+    outer loop
+       vertex 2.86722 0.67574 0.489362
+       vertex 2.86722 0.67574 -0.510638
+       vertex 2.87524 0.673318 -0.510638
+    endloop
+  endfacet
+  facet normal -0.289106 -0.957297 0
+    outer loop
+       vertex 2.86722 0.67574 0.489362
+       vertex 2.87524 0.673318 -0.510638
+       vertex 2.87524 0.673318 0.489362
+    endloop
+  endfacet
+  facet normal -0.300432 -0.953803 -0
+    outer loop
+       vertex 2.87524 0.673318 0.489362
+       vertex 2.87524 0.673318 -0.510638
+       vertex 2.88335 0.670761 -0.510638
+    endloop
+  endfacet
+  facet normal -0.300432 -0.953803 0
+    outer loop
+       vertex 2.87524 0.673318 0.489362
+       vertex 2.88335 0.670761 -0.510638
+       vertex 2.88335 0.670761 0.489362
+    endloop
+  endfacet
+  facet normal -0.311317 -0.950306 -0
+    outer loop
+       vertex 2.88335 0.670761 0.489362
+       vertex 2.88335 0.670761 -0.510638
+       vertex 2.89158 0.668068 -0.510638
+    endloop
+  endfacet
+  facet normal -0.311317 -0.950306 0
+    outer loop
+       vertex 2.88335 0.670761 0.489362
+       vertex 2.89158 0.668068 -0.510638
+       vertex 2.89158 0.668068 0.489362
+    endloop
+  endfacet
+  facet normal -0.321756 -0.946823 -0
+    outer loop
+       vertex 2.89158 0.668068 0.489362
+       vertex 2.89158 0.668068 -0.510638
+       vertex 2.89991 0.665237 -0.510638
+    endloop
+  endfacet
+  facet normal -0.321756 -0.946823 0
+    outer loop
+       vertex 2.89158 0.668068 0.489362
+       vertex 2.89991 0.665237 -0.510638
+       vertex 2.89991 0.665237 0.489362
+    endloop
+  endfacet
+  facet normal -0.331766 -0.943362 -0
+    outer loop
+       vertex 2.89991 0.665237 0.489362
+       vertex 2.89991 0.665237 -0.510638
+       vertex 2.90835 0.662266 -0.510638
+    endloop
+  endfacet
+  facet normal -0.331766 -0.943362 0
+    outer loop
+       vertex 2.89991 0.665237 0.489362
+       vertex 2.90835 0.662266 -0.510638
+       vertex 2.90835 0.662266 0.489362
+    endloop
+  endfacet
+  facet normal -0.341346 -0.939938 -0
+    outer loop
+       vertex 2.90835 0.662266 0.489362
+       vertex 2.90835 0.662266 -0.510638
+       vertex 2.91692 0.659156 -0.510638
+    endloop
+  endfacet
+  facet normal -0.341346 -0.939938 0
+    outer loop
+       vertex 2.90835 0.662266 0.489362
+       vertex 2.91692 0.659156 -0.510638
+       vertex 2.91692 0.659156 0.489362
+    endloop
+  endfacet
+  facet normal -0.350509 -0.936559 -0
+    outer loop
+       vertex 2.91692 0.659156 0.489362
+       vertex 2.91692 0.659156 -0.510638
+       vertex 2.92561 0.655905 -0.510638
+    endloop
+  endfacet
+  facet normal -0.350509 -0.936559 0
+    outer loop
+       vertex 2.91692 0.659156 0.489362
+       vertex 2.92561 0.655905 -0.510638
+       vertex 2.92561 0.655905 0.489362
+    endloop
+  endfacet
+  facet normal -0.359251 -0.933241 -0
+    outer loop
+       vertex 2.92561 0.655905 0.489362
+       vertex 2.92561 0.655905 -0.510638
+       vertex 2.93442 0.652511 -0.510638
+    endloop
+  endfacet
+  facet normal -0.359251 -0.933241 0
+    outer loop
+       vertex 2.92561 0.655905 0.489362
+       vertex 2.93442 0.652511 -0.510638
+       vertex 2.93442 0.652511 0.489362
+    endloop
+  endfacet
+  facet normal -0.367587 -0.929989 -0
+    outer loop
+       vertex 2.93442 0.652511 0.489362
+       vertex 2.93442 0.652511 -0.510638
+       vertex 2.94337 0.648975 -0.510638
+    endloop
+  endfacet
+  facet normal -0.367587 -0.929989 0
+    outer loop
+       vertex 2.93442 0.652511 0.489362
+       vertex 2.94337 0.648975 -0.510638
+       vertex 2.94337 0.648975 0.489362
+    endloop
+  endfacet
+  facet normal -0.375532 -0.926809 -0
+    outer loop
+       vertex 2.94337 0.648975 0.489362
+       vertex 2.94337 0.648975 -0.510638
+       vertex 2.95245 0.645293 -0.510638
+    endloop
+  endfacet
+  facet normal -0.375532 -0.926809 0
+    outer loop
+       vertex 2.94337 0.648975 0.489362
+       vertex 2.95245 0.645293 -0.510638
+       vertex 2.95245 0.645293 0.489362
+    endloop
+  endfacet
+  facet normal -0.383085 -0.923713 -0
+    outer loop
+       vertex 2.95245 0.645293 0.489362
+       vertex 2.95245 0.645293 -0.510638
+       vertex 2.96168 0.641466 -0.510638
+    endloop
+  endfacet
+  facet normal -0.383085 -0.923713 0
+    outer loop
+       vertex 2.95245 0.645293 0.489362
+       vertex 2.96168 0.641466 -0.510638
+       vertex 2.96168 0.641466 0.489362
+    endloop
+  endfacet
+  facet normal -1 0 -0
+    outer loop
+       vertex 2.96168 0.641466 0.489362
+       vertex 2.96168 0.641466 -0.510638
+       vertex 2.96168 0.536466 -0.510638
+    endloop
+  endfacet
+  facet normal -1 -0 0
+    outer loop
+       vertex 2.96168 0.641466 0.489362
+       vertex 2.96168 0.536466 -0.510638
+       vertex 2.96168 0.536466 0.489362
+    endloop
+  endfacet
+  facet normal 0.498688 0.866782 0
+    outer loop
+       vertex 2.96168 0.536466 0.489362
+       vertex 2.96168 0.536466 -0.510638
+       vertex 2.95332 0.541277 -0.510638
+    endloop
+  endfacet
+  facet normal 0.498688 0.866782 0
+    outer loop
+       vertex 2.96168 0.536466 0.489362
+       vertex 2.95332 0.541277 -0.510638
+       vertex 2.95332 0.541277 0.489362
+    endloop
+  endfacet
+  facet normal -1 0 -0
+    outer loop
+       vertex 3.18768 0.600466 0.489362
+       vertex 3.18768 0.600466 -0.510638
+       vertex 3.18768 0.411466 -0.510638
+    endloop
+  endfacet
+  facet normal -1 -0 0
+    outer loop
+       vertex 3.18768 0.600466 0.489362
+       vertex 3.18768 0.411466 -0.510638
+       vertex 3.18768 0.411466 0.489362
+    endloop
+  endfacet
+  facet normal 0 -1 0
+    outer loop
+       vertex 3.18768 0.411466 0.489362
+       vertex 3.18768 0.411466 -0.510638
+       vertex 3.45368 0.411466 -0.510638
+    endloop
+  endfacet
+  facet normal 0 -1 0
+    outer loop
+       vertex 3.18768 0.411466 0.489362
+       vertex 3.45368 0.411466 -0.510638
+       vertex 3.45368 0.411466 0.489362
+    endloop
+  endfacet
+  facet normal -1 0 -0
+    outer loop
+       vertex 3.45368 0.411466 0.489362
+       vertex 3.45368 0.411466 -0.510638
+       vertex 3.45368 0.323466 -0.510638
+    endloop
+  endfacet
+  facet normal -1 -0 0
+    outer loop
+       vertex 3.45368 0.411466 0.489362
+       vertex 3.45368 0.323466 -0.510638
+       vertex 3.45368 0.323466 0.489362
+    endloop
+  endfacet
+  facet normal 0 1 0
+    outer loop
+       vertex 3.45368 0.323466 0.489362
+       vertex 3.45368 0.323466 -0.510638
+       vertex 3.18768 0.323466 -0.510638
+    endloop
+  endfacet
+  facet normal 0 1 0
+    outer loop
+       vertex 3.45368 0.323466 0.489362
+       vertex 3.18768 0.323466 -0.510638
+       vertex 3.18768 0.323466 0.489362
+    endloop
+  endfacet
+  facet normal -1 0 -0
+    outer loop
+       vertex 3.18768 0.323466 0.489362
+       vertex 3.18768 0.323466 -0.510638
+       vertex 3.18768 0.00646639 -0.510638
+    endloop
+  endfacet
+  facet normal -1 -0 0
+    outer loop
+       vertex 3.18768 0.323466 0.489362
+       vertex 3.18768 0.00646639 -0.510638
+       vertex 3.18768 0.00646639 0.489362
+    endloop
+  endfacet
+  facet normal 0 1 0
+    outer loop
+       vertex 3.18768 0.00646639 0.489362
+       vertex 3.18768 0.00646639 -0.510638
+       vertex 3.08968 0.00646639 -0.510638
+    endloop
+  endfacet
+  facet normal 0 1 0
+    outer loop
+       vertex 3.18768 0.00646639 0.489362
+       vertex 3.08968 0.00646639 -0.510638
+       vertex 3.08968 0.00646639 0.489362
+    endloop
+  endfacet
+  facet normal 1 0 0
+    outer loop
+       vertex 3.08968 0.00646639 0.489362
+       vertex 3.08968 0.00646639 -0.510638
+       vertex 3.08968 0.688466 -0.510638
+    endloop
+  endfacet
+  facet normal 1 -0 0
+    outer loop
+       vertex 3.08968 0.00646639 0.489362
+       vertex 3.08968 0.688466 -0.510638
+       vertex 3.08968 0.688466 0.489362
+    endloop
+  endfacet
+  facet normal 0 -1 0
+    outer loop
+       vertex 3.08968 0.688466 0.489362
+       vertex 3.08968 0.688466 -0.510638
+       vertex 3.45368 0.688466 -0.510638
+    endloop
+  endfacet
+  facet normal 0 -1 0
+    outer loop
+       vertex 3.08968 0.688466 0.489362
+       vertex 3.45368 0.688466 -0.510638
+       vertex 3.45368 0.688466 0.489362
+    endloop
+  endfacet
+  facet normal -1 0 -0
+    outer loop
+       vertex 3.45368 0.688466 0.489362
+       vertex 3.45368 0.688466 -0.510638
+       vertex 3.45368 0.600466 -0.510638
+    endloop
+  endfacet
+  facet normal -1 -0 0
+    outer loop
+       vertex 3.45368 0.688466 0.489362
+       vertex 3.45368 0.600466 -0.510638
+       vertex 3.45368 0.600466 0.489362
+    endloop
+  endfacet
+  facet normal 0 1 0
+    outer loop
+       vertex 3.45368 0.600466 0.489362
+       vertex 3.45368 0.600466 -0.510638
+       vertex 3.18768 0.600466 -0.510638
+    endloop
+  endfacet
+  facet normal 0 1 0
+    outer loop
+       vertex 3.45368 0.600466 0.489362
+       vertex 3.18768 0.600466 -0.510638
+       vertex 3.18768 0.600466 0.489362
+    endloop
+  endfacet
+  facet normal -0.023964 -0.999713 -0
+    outer loop
+       vertex 3.82368 0.688466 0.489362
+       vertex 3.82368 0.688466 -0.510638
+       vertex 3.84841 0.687874 -0.510638
+    endloop
+  endfacet
+  facet normal -0.023964 -0.999713 0
+    outer loop
+       vertex 3.82368 0.688466 0.489362
+       vertex 3.84841 0.687874 -0.510638
+       vertex 3.84841 0.687874 0.489362
+    endloop
+  endfacet
+  facet normal -0.0732709 -0.997312 -0
+    outer loop
+       vertex 3.84841 0.687874 0.489362
+       vertex 3.84841 0.687874 -0.510638
+       vertex 3.87221 0.686125 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0732709 -0.997312 0
+    outer loop
+       vertex 3.84841 0.687874 0.489362
+       vertex 3.87221 0.686125 -0.510638
+       vertex 3.87221 0.686125 0.489362
+    endloop
+  endfacet
+  facet normal -0.124081 -0.992272 -0
+    outer loop
+       vertex 3.87221 0.686125 0.489362
+       vertex 3.87221 0.686125 -0.510638
+       vertex 3.89508 0.683265 -0.510638
+    endloop
+  endfacet
+  facet normal -0.124081 -0.992272 0
+    outer loop
+       vertex 3.87221 0.686125 0.489362
+       vertex 3.89508 0.683265 -0.510638
+       vertex 3.89508 0.683265 0.489362
+    endloop
+  endfacet
+  facet normal -0.176114 -0.98437 -0
+    outer loop
+       vertex 3.89508 0.683265 0.489362
+       vertex 3.89508 0.683265 -0.510638
+       vertex 3.91703 0.679338 -0.510638
+    endloop
+  endfacet
+  facet normal -0.176114 -0.98437 0
+    outer loop
+       vertex 3.89508 0.683265 0.489362
+       vertex 3.91703 0.679338 -0.510638
+       vertex 3.91703 0.679338 0.489362
+    endloop
+  endfacet
+  facet normal -0.229054 -0.973414 -0
+    outer loop
+       vertex 3.91703 0.679338 0.489362
+       vertex 3.91703 0.679338 -0.510638
+       vertex 3.93807 0.674388 -0.510638
+    endloop
+  endfacet
+  facet normal -0.229054 -0.973414 0
+    outer loop
+       vertex 3.91703 0.679338 0.489362
+       vertex 3.93807 0.674388 -0.510638
+       vertex 3.93807 0.674388 0.489362
+    endloop
+  endfacet
+  facet normal -0.282534 -0.959257 -0
+    outer loop
+       vertex 3.93807 0.674388 0.489362
+       vertex 3.93807 0.674388 -0.510638
+       vertex 3.9582 0.668458 -0.510638
+    endloop
+  endfacet
+  facet normal -0.282534 -0.959257 0
+    outer loop
+       vertex 3.93807 0.674388 0.489362
+       vertex 3.9582 0.668458 -0.510638
+       vertex 3.9582 0.668458 0.489362
+    endloop
+  endfacet
+  facet normal -0.33615 -0.941808 -0
+    outer loop
+       vertex 3.9582 0.668458 0.489362
+       vertex 3.9582 0.668458 -0.510638
+       vertex 3.97743 0.661594 -0.510638
+    endloop
+  endfacet
+  facet normal -0.33615 -0.941808 0
+    outer loop
+       vertex 3.9582 0.668458 0.489362
+       vertex 3.97743 0.661594 -0.510638
+       vertex 3.97743 0.661594 0.489362
+    endloop
+  endfacet
+  facet normal -0.389475 -0.921037 -0
+    outer loop
+       vertex 3.97743 0.661594 0.489362
+       vertex 3.97743 0.661594 -0.510638
+       vertex 3.99577 0.65384 -0.510638
+    endloop
+  endfacet
+  facet normal -0.389475 -0.921037 0
+    outer loop
+       vertex 3.97743 0.661594 0.489362
+       vertex 3.99577 0.65384 -0.510638
+       vertex 3.99577 0.65384 0.489362
+    endloop
+  endfacet
+  facet normal -0.442072 -0.89698 -0
+    outer loop
+       vertex 3.99577 0.65384 0.489362
+       vertex 3.99577 0.65384 -0.510638
+       vertex 4.01322 0.645239 -0.510638
+    endloop
+  endfacet
+  facet normal -0.442072 -0.89698 0
+    outer loop
+       vertex 3.99577 0.65384 0.489362
+       vertex 4.01322 0.645239 -0.510638
+       vertex 4.01322 0.645239 0.489362
+    endloop
+  endfacet
+  facet normal -0.493504 -0.869743 -0
+    outer loop
+       vertex 4.01322 0.645239 0.489362
+       vertex 4.01322 0.645239 -0.510638
+       vertex 4.02979 0.635837 -0.510638
+    endloop
+  endfacet
+  facet normal -0.493504 -0.869743 0
+    outer loop
+       vertex 4.01322 0.645239 0.489362
+       vertex 4.02979 0.635837 -0.510638
+       vertex 4.02979 0.635837 0.489362
+    endloop
+  endfacet
+  facet normal -0.54336 -0.8395 -0
+    outer loop
+       vertex 4.02979 0.635837 0.489362
+       vertex 4.02979 0.635837 -0.510638
+       vertex 4.04549 0.625676 -0.510638
+    endloop
+  endfacet
+  facet normal -0.54336 -0.8395 0
+    outer loop
+       vertex 4.02979 0.635837 0.489362
+       vertex 4.04549 0.625676 -0.510638
+       vertex 4.04549 0.625676 0.489362
+    endloop
+  endfacet
+  facet normal -0.591288 -0.806461 -0
+    outer loop
+       vertex 4.04549 0.625676 0.489362
+       vertex 4.04549 0.625676 -0.510638
+       vertex 4.06032 0.614802 -0.510638
+    endloop
+  endfacet
+  facet normal -0.591288 -0.806461 0
+    outer loop
+       vertex 4.04549 0.625676 0.489362
+       vertex 4.06032 0.614802 -0.510638
+       vertex 4.06032 0.614802 0.489362
+    endloop
+  endfacet
+  facet normal -0.636939 -0.770915 -0
+    outer loop
+       vertex 4.06032 0.614802 0.489362
+       vertex 4.06032 0.614802 -0.510638
+       vertex 4.07429 0.603259 -0.510638
+    endloop
+  endfacet
+  facet normal -0.636939 -0.770915 0
+    outer loop
+       vertex 4.06032 0.614802 0.489362
+       vertex 4.07429 0.603259 -0.510638
+       vertex 4.07429 0.603259 0.489362
+    endloop
+  endfacet
+  facet normal -0.680079 -0.733139 -0
+    outer loop
+       vertex 4.07429 0.603259 0.489362
+       vertex 4.07429 0.603259 -0.510638
+       vertex 4.08741 0.591091 -0.510638
+    endloop
+  endfacet
+  facet normal -0.680079 -0.733139 0
+    outer loop
+       vertex 4.07429 0.603259 0.489362
+       vertex 4.08741 0.591091 -0.510638
+       vertex 4.08741 0.591091 0.489362
+    endloop
+  endfacet
+  facet normal -0.720495 -0.69346 -0
+    outer loop
+       vertex 4.08741 0.591091 0.489362
+       vertex 4.08741 0.591091 -0.510638
+       vertex 4.09968 0.578341 -0.510638
+    endloop
+  endfacet
+  facet normal -0.720495 -0.69346 0
+    outer loop
+       vertex 4.08741 0.591091 0.489362
+       vertex 4.09968 0.578341 -0.510638
+       vertex 4.09968 0.578341 0.489362
+    endloop
+  endfacet
+  facet normal -0.758035 -0.652214 -0
+    outer loop
+       vertex 4.09968 0.578341 0.489362
+       vertex 4.09968 0.578341 -0.510638
+       vertex 4.11111 0.565055 -0.510638
+    endloop
+  endfacet
+  facet normal -0.758035 -0.652214 0
+    outer loop
+       vertex 4.09968 0.578341 0.489362
+       vertex 4.11111 0.565055 -0.510638
+       vertex 4.11111 0.565055 0.489362
+    endloop
+  endfacet
+  facet normal -0.792653 -0.609673 -0
+    outer loop
+       vertex 4.11111 0.565055 0.489362
+       vertex 4.11111 0.565055 -0.510638
+       vertex 4.12171 0.551277 -0.510638
+    endloop
+  endfacet
+  facet normal -0.792653 -0.609673 0
+    outer loop
+       vertex 4.11111 0.565055 0.489362
+       vertex 4.12171 0.551277 -0.510638
+       vertex 4.12171 0.551277 0.489362
+    endloop
+  endfacet
+  facet normal -0.824297 -0.566157 -0
+    outer loop
+       vertex 4.12171 0.551277 0.489362
+       vertex 4.12171 0.551277 -0.510638
+       vertex 4.13148 0.53705 -0.510638
+    endloop
+  endfacet
+  facet normal -0.824297 -0.566157 0
+    outer loop
+       vertex 4.12171 0.551277 0.489362
+       vertex 4.13148 0.53705 -0.510638
+       vertex 4.13148 0.53705 0.489362
+    endloop
+  endfacet
+  facet normal -0.853016 -0.521885 -0
+    outer loop
+       vertex 4.13148 0.53705 0.489362
+       vertex 4.13148 0.53705 -0.510638
+       vertex 4.14043 0.52242 -0.510638
+    endloop
+  endfacet
+  facet normal -0.853016 -0.521885 0
+    outer loop
+       vertex 4.13148 0.53705 0.489362
+       vertex 4.14043 0.52242 -0.510638
+       vertex 4.14043 0.52242 0.489362
+    endloop
+  endfacet
+  facet normal -0.878852 -0.477095 -0
+    outer loop
+       vertex 4.14043 0.52242 0.489362
+       vertex 4.14043 0.52242 -0.510638
+       vertex 4.14857 0.507429 -0.510638
+    endloop
+  endfacet
+  facet normal -0.878852 -0.477095 0
+    outer loop
+       vertex 4.14043 0.52242 0.489362
+       vertex 4.14857 0.507429 -0.510638
+       vertex 4.14857 0.507429 0.489362
+    endloop
+  endfacet
+  facet normal -0.901889 -0.431967 -0
+    outer loop
+       vertex 4.14857 0.507429 0.489362
+       vertex 4.14857 0.507429 -0.510638
+       vertex 4.1559 0.492123 -0.510638
+    endloop
+  endfacet
+  facet normal -0.901889 -0.431967 0
+    outer loop
+       vertex 4.14857 0.507429 0.489362
+       vertex 4.1559 0.492123 -0.510638
+       vertex 4.1559 0.492123 0.489362
+    endloop
+  endfacet
+  facet normal -0.922219 -0.386668 -0
+    outer loop
+       vertex 4.1559 0.492123 0.489362
+       vertex 4.1559 0.492123 -0.510638
+       vertex 4.16243 0.476546 -0.510638
+    endloop
+  endfacet
+  facet normal -0.922219 -0.386668 0
+    outer loop
+       vertex 4.1559 0.492123 0.489362
+       vertex 4.16243 0.476546 -0.510638
+       vertex 4.16243 0.476546 0.489362
+    endloop
+  endfacet
+  facet normal -0.93997 -0.341256 -0
+    outer loop
+       vertex 4.16243 0.476546 0.489362
+       vertex 4.16243 0.476546 -0.510638
+       vertex 4.16817 0.460742 -0.510638
+    endloop
+  endfacet
+  facet normal -0.93997 -0.341256 0
+    outer loop
+       vertex 4.16243 0.476546 0.489362
+       vertex 4.16817 0.460742 -0.510638
+       vertex 4.16817 0.460742 0.489362
+    endloop
+  endfacet
+  facet normal -0.955243 -0.295823 -0
+    outer loop
+       vertex 4.16817 0.460742 0.489362
+       vertex 4.16817 0.460742 -0.510638
+       vertex 4.17312 0.444754 -0.510638
+    endloop
+  endfacet
+  facet normal -0.955243 -0.295823 0
+    outer loop
+       vertex 4.16817 0.460742 0.489362
+       vertex 4.17312 0.444754 -0.510638
+       vertex 4.17312 0.444754 0.489362
+    endloop
+  endfacet
+  facet normal -0.968141 -0.250405 -0
+    outer loop
+       vertex 4.17312 0.444754 0.489362
+       vertex 4.17312 0.444754 -0.510638
+       vertex 4.17729 0.428628 -0.510638
+    endloop
+  endfacet
+  facet normal -0.968141 -0.250405 0
+    outer loop
+       vertex 4.17312 0.444754 0.489362
+       vertex 4.17729 0.428628 -0.510638
+       vertex 4.17729 0.428628 0.489362
+    endloop
+  endfacet
+  facet normal -0.978755 -0.205035 -0
+    outer loop
+       vertex 4.17729 0.428628 0.489362
+       vertex 4.17729 0.428628 -0.510638
+       vertex 4.18069 0.412408 -0.510638
+    endloop
+  endfacet
+  facet normal -0.978755 -0.205035 0
+    outer loop
+       vertex 4.17729 0.428628 0.489362
+       vertex 4.18069 0.412408 -0.510638
+       vertex 4.18069 0.412408 0.489362
+    endloop
+  endfacet
+  facet normal -0.987175 -0.15964 -0
+    outer loop
+       vertex 4.18069 0.412408 0.489362
+       vertex 4.18069 0.412408 -0.510638
+       vertex 4.18332 0.396137 -0.510638
+    endloop
+  endfacet
+  facet normal -0.987175 -0.15964 0
+    outer loop
+       vertex 4.18069 0.412408 0.489362
+       vertex 4.18332 0.396137 -0.510638
+       vertex 4.18332 0.396137 0.489362
+    endloop
+  endfacet
+  facet normal -0.993457 -0.114205 -0
+    outer loop
+       vertex 4.18332 0.396137 0.489362
+       vertex 4.18332 0.396137 -0.510638
+       vertex 4.18519 0.379861 -0.510638
+    endloop
+  endfacet
+  facet normal -0.993457 -0.114205 0
+    outer loop
+       vertex 4.18332 0.396137 0.489362
+       vertex 4.18519 0.379861 -0.510638
+       vertex 4.18519 0.379861 0.489362
+    endloop
+  endfacet
+  facet normal -0.99764 -0.0686685 -0
+    outer loop
+       vertex 4.18519 0.379861 0.489362
+       vertex 4.18519 0.379861 -0.510638
+       vertex 4.18631 0.363622 -0.510638
+    endloop
+  endfacet
+  facet normal -0.99764 -0.0686685 0
+    outer loop
+       vertex 4.18519 0.379861 0.489362
+       vertex 4.18631 0.363622 -0.510638
+       vertex 4.18631 0.363622 0.489362
+    endloop
+  endfacet
+  facet normal -0.999736 -0.0229563 -0
+    outer loop
+       vertex 4.18631 0.363622 0.489362
+       vertex 4.18631 0.363622 -0.510638
+       vertex 4.18668 0.347466 -0.510638
+    endloop
+  endfacet
+  facet normal -0.999736 -0.0229563 0
+    outer loop
+       vertex 4.18631 0.363622 0.489362
+       vertex 4.18668 0.347466 -0.510638
+       vertex 4.18668 0.347466 0.489362
+    endloop
+  endfacet
+  facet normal -0.999661 0.0260389 0
+    outer loop
+       vertex 4.18668 0.347466 0.489362
+       vertex 4.18668 0.347466 -0.510638
+       vertex 4.18623 0.330002 -0.510638
+    endloop
+  endfacet
+  facet normal -0.999661 0.0260389 0
+    outer loop
+       vertex 4.18668 0.347466 0.489362
+       vertex 4.18623 0.330002 -0.510638
+       vertex 4.18623 0.330002 0.489362
+    endloop
+  endfacet
+  facet normal -0.996962 0.0778935 0
+    outer loop
+       vertex 4.18623 0.330002 0.489362
+       vertex 4.18623 0.330002 -0.510638
+       vertex 4.18487 0.312633 -0.510638
+    endloop
+  endfacet
+  facet normal -0.996962 0.0778935 0
+    outer loop
+       vertex 4.18623 0.330002 0.489362
+       vertex 4.18487 0.312633 -0.510638
+       vertex 4.18487 0.312633 0.489362
+    endloop
+  endfacet
+  facet normal -0.991599 0.129347 0
+    outer loop
+       vertex 4.18487 0.312633 0.489362
+       vertex 4.18487 0.312633 -0.510638
+       vertex 4.18262 0.295393 -0.510638
+    endloop
+  endfacet
+  facet normal -0.991599 0.129347 0
+    outer loop
+       vertex 4.18487 0.312633 0.489362
+       vertex 4.18262 0.295393 -0.510638
+       vertex 4.18262 0.295393 0.489362
+    endloop
+  endfacet
+  facet normal -0.983616 0.180277 0
+    outer loop
+       vertex 4.18262 0.295393 0.489362
+       vertex 4.18262 0.295393 -0.510638
+       vertex 4.17949 0.278319 -0.510638
+    endloop
+  endfacet
+  facet normal -0.983616 0.180277 0
+    outer loop
+       vertex 4.18262 0.295393 0.489362
+       vertex 4.17949 0.278319 -0.510638
+       vertex 4.17949 0.278319 0.489362
+    endloop
+  endfacet
+  facet normal -0.973049 0.2306 0
+    outer loop
+       vertex 4.17949 0.278319 0.489362
+       vertex 4.17949 0.278319 -0.510638
+       vertex 4.17549 0.261443 -0.510638
+    endloop
+  endfacet
+  facet normal -0.973049 0.2306 0
+    outer loop
+       vertex 4.17949 0.278319 0.489362
+       vertex 4.17549 0.261443 -0.510638
+       vertex 4.17549 0.261443 0.489362
+    endloop
+  endfacet
+  facet normal -0.959931 0.280236 0
+    outer loop
+       vertex 4.17549 0.261443 0.489362
+       vertex 4.17549 0.261443 -0.510638
+       vertex 4.17063 0.244802 -0.510638
+    endloop
+  endfacet
+  facet normal -0.959931 0.280236 0
+    outer loop
+       vertex 4.17549 0.261443 0.489362
+       vertex 4.17063 0.244802 -0.510638
+       vertex 4.17063 0.244802 0.489362
+    endloop
+  endfacet
+  facet normal -0.944284 0.329131 0
+    outer loop
+       vertex 4.17063 0.244802 0.489362
+       vertex 4.17063 0.244802 -0.510638
+       vertex 4.16493 0.228431 -0.510638
+    endloop
+  endfacet
+  facet normal -0.944284 0.329131 0
+    outer loop
+       vertex 4.17063 0.244802 0.489362
+       vertex 4.16493 0.228431 -0.510638
+       vertex 4.16493 0.228431 0.489362
+    endloop
+  endfacet
+  facet normal -0.926148 0.37716 0
+    outer loop
+       vertex 4.16493 0.228431 0.489362
+       vertex 4.16493 0.228431 -0.510638
+       vertex 4.15839 0.212364 -0.510638
+    endloop
+  endfacet
+  facet normal -0.926148 0.37716 0
+    outer loop
+       vertex 4.16493 0.228431 0.489362
+       vertex 4.15839 0.212364 -0.510638
+       vertex 4.15839 0.212364 0.489362
+    endloop
+  endfacet
+  facet normal -0.905527 0.424289 0
+    outer loop
+       vertex 4.15839 0.212364 0.489362
+       vertex 4.15839 0.212364 -0.510638
+       vertex 4.15102 0.196635 -0.510638
+    endloop
+  endfacet
+  facet normal -0.905527 0.424289 0
+    outer loop
+       vertex 4.15839 0.212364 0.489362
+       vertex 4.15102 0.196635 -0.510638
+       vertex 4.15102 0.196635 0.489362
+    endloop
+  endfacet
+  facet normal -0.882448 0.47041 0
+    outer loop
+       vertex 4.15102 0.196635 0.489362
+       vertex 4.15102 0.196635 -0.510638
+       vertex 4.14283 0.181281 -0.510638
+    endloop
+  endfacet
+  facet normal -0.882448 0.47041 0
+    outer loop
+       vertex 4.15102 0.196635 0.489362
+       vertex 4.14283 0.181281 -0.510638
+       vertex 4.14283 0.181281 0.489362
+    endloop
+  endfacet
+  facet normal -0.856932 0.51543 0
+    outer loop
+       vertex 4.14283 0.181281 0.489362
+       vertex 4.14283 0.181281 -0.510638
+       vertex 4.13384 0.166336 -0.510638
+    endloop
+  endfacet
+  facet normal -0.856932 0.51543 0
+    outer loop
+       vertex 4.14283 0.181281 0.489362
+       vertex 4.13384 0.166336 -0.510638
+       vertex 4.13384 0.166336 0.489362
+    endloop
+  endfacet
+  facet normal -0.829001 0.559248 0
+    outer loop
+       vertex 4.13384 0.166336 0.489362
+       vertex 4.13384 0.166336 -0.510638
+       vertex 4.12406 0.151834 -0.510638
+    endloop
+  endfacet
+  facet normal -0.829001 0.559248 0
+    outer loop
+       vertex 4.13384 0.166336 0.489362
+       vertex 4.12406 0.151834 -0.510638
+       vertex 4.12406 0.151834 0.489362
+    endloop
+  endfacet
+  facet normal -0.798682 0.601753 0
+    outer loop
+       vertex 4.12406 0.151834 0.489362
+       vertex 4.12406 0.151834 -0.510638
+       vertex 4.11349 0.137812 -0.510638
+    endloop
+  endfacet
+  facet normal -0.798682 0.601753 0
+    outer loop
+       vertex 4.12406 0.151834 0.489362
+       vertex 4.11349 0.137812 -0.510638
+       vertex 4.11349 0.137812 0.489362
+    endloop
+  endfacet
+  facet normal -0.765999 0.642842 0
+    outer loop
+       vertex 4.11349 0.137812 0.489362
+       vertex 4.11349 0.137812 -0.510638
+       vertex 4.10216 0.124302 -0.510638
+    endloop
+  endfacet
+  facet normal -0.765999 0.642842 0
+    outer loop
+       vertex 4.11349 0.137812 0.489362
+       vertex 4.10216 0.124302 -0.510638
+       vertex 4.10216 0.124302 0.489362
+    endloop
+  endfacet
+  facet normal -0.731013 0.682364 0
+    outer loop
+       vertex 4.10216 0.124302 0.489362
+       vertex 4.10216 0.124302 -0.510638
+       vertex 4.09006 0.111341 -0.510638
+    endloop
+  endfacet
+  facet normal -0.731013 0.682364 0
+    outer loop
+       vertex 4.10216 0.124302 0.489362
+       vertex 4.09006 0.111341 -0.510638
+       vertex 4.09006 0.111341 0.489362
+    endloop
+  endfacet
+  facet normal -0.693787 0.72018 0
+    outer loop
+       vertex 4.09006 0.111341 0.489362
+       vertex 4.09006 0.111341 -0.510638
+       vertex 4.07721 0.0989639 -0.510638
+    endloop
+  endfacet
+  facet normal -0.693787 0.72018 0
+    outer loop
+       vertex 4.09006 0.111341 0.489362
+       vertex 4.07721 0.0989639 -0.510638
+       vertex 4.07721 0.0989639 0.489362
+    endloop
+  endfacet
+  facet normal -0.654406 0.756144 0
+    outer loop
+       vertex 4.07721 0.0989639 0.489362
+       vertex 4.07721 0.0989639 -0.510638
+       vertex 4.06362 0.0872046 -0.510638
+    endloop
+  endfacet
+  facet normal -0.654406 0.756144 0
+    outer loop
+       vertex 4.07721 0.0989639 0.489362
+       vertex 4.06362 0.0872046 -0.510638
+       vertex 4.06362 0.0872046 0.489362
+    endloop
+  endfacet
+  facet normal -0.612971 0.790105 0
+    outer loop
+       vertex 4.06362 0.0872046 0.489362
+       vertex 4.06362 0.0872046 -0.510638
+       vertex 4.04931 0.0760984 -0.510638
+    endloop
+  endfacet
+  facet normal -0.612971 0.790105 0
+    outer loop
+       vertex 4.06362 0.0872046 0.489362
+       vertex 4.04931 0.0760984 -0.510638
+       vertex 4.04931 0.0760984 0.489362
+    endloop
+  endfacet
+  facet normal -0.569612 0.821914 0
+    outer loop
+       vertex 4.04931 0.0760984 0.489362
+       vertex 4.04931 0.0760984 -0.510638
+       vertex 4.03427 0.0656802 -0.510638
+    endloop
+  endfacet
+  facet normal -0.569612 0.821914 0
+    outer loop
+       vertex 4.04931 0.0760984 0.489362
+       vertex 4.03427 0.0656802 -0.510638
+       vertex 4.03427 0.0656802 0.489362
+    endloop
+  endfacet
+  facet normal -0.52447 0.851429 0
+    outer loop
+       vertex 4.03427 0.0656802 0.489362
+       vertex 4.03427 0.0656802 -0.510638
+       vertex 4.01853 0.0559849 -0.510638
+    endloop
+  endfacet
+  facet normal -0.52447 0.851429 0
+    outer loop
+       vertex 4.03427 0.0656802 0.489362
+       vertex 4.01853 0.0559849 -0.510638
+       vertex 4.01853 0.0559849 0.489362
+    endloop
+  endfacet
+  facet normal -0.477746 0.878498 0
+    outer loop
+       vertex 4.01853 0.0559849 0.489362
+       vertex 4.01853 0.0559849 -0.510638
+       vertex 4.0021 0.0470474 -0.510638
+    endloop
+  endfacet
+  facet normal -0.477746 0.878498 0
+    outer loop
+       vertex 4.01853 0.0559849 0.489362
+       vertex 4.0021 0.0470474 -0.510638
+       vertex 4.0021 0.0470474 0.489362
+    endloop
+  endfacet
+  facet normal -0.429622 0.903009 0
+    outer loop
+       vertex 4.0021 0.0470474 0.489362
+       vertex 4.0021 0.0470474 -0.510638
+       vertex 3.98498 0.0389025 -0.510638
+    endloop
+  endfacet
+  facet normal -0.429622 0.903009 0
+    outer loop
+       vertex 4.0021 0.0470474 0.489362
+       vertex 3.98498 0.0389025 -0.510638
+       vertex 3.98498 0.0389025 0.489362
+    endloop
+  endfacet
+  facet normal -0.380336 0.924848 0
+    outer loop
+       vertex 3.98498 0.0389025 0.489362
+       vertex 3.98498 0.0389025 -0.510638
+       vertex 3.96719 0.0315852 -0.510638
+    endloop
+  endfacet
+  facet normal -0.380336 0.924848 0
+    outer loop
+       vertex 3.98498 0.0389025 0.489362
+       vertex 3.96719 0.0315852 -0.510638
+       vertex 3.96719 0.0315852 0.489362
+    endloop
+  endfacet
+  facet normal -0.330131 0.943935 0
+    outer loop
+       vertex 3.96719 0.0315852 0.489362
+       vertex 3.96719 0.0315852 -0.510638
+       vertex 3.94873 0.0251304 -0.510638
+    endloop
+  endfacet
+  facet normal -0.330131 0.943935 0
+    outer loop
+       vertex 3.96719 0.0315852 0.489362
+       vertex 3.94873 0.0251304 -0.510638
+       vertex 3.94873 0.0251304 0.489362
+    endloop
+  endfacet
+  facet normal -0.279271 0.960212 0
+    outer loop
+       vertex 3.94873 0.0251304 0.489362
+       vertex 3.94873 0.0251304 -0.510638
+       vertex 3.92962 0.0195729 -0.510638
+    endloop
+  endfacet
+  facet normal -0.279271 0.960212 0
+    outer loop
+       vertex 3.94873 0.0251304 0.489362
+       vertex 3.92962 0.0195729 -0.510638
+       vertex 3.92962 0.0195729 0.489362
+    endloop
+  endfacet
+  facet normal -0.228029 0.973654 0
+    outer loop
+       vertex 3.92962 0.0195729 0.489362
+       vertex 3.92962 0.0195729 -0.510638
+       vertex 3.90987 0.0149476 -0.510638
+    endloop
+  endfacet
+  facet normal -0.228029 0.973654 0
+    outer loop
+       vertex 3.92962 0.0195729 0.489362
+       vertex 3.90987 0.0149476 -0.510638
+       vertex 3.90987 0.0149476 0.489362
+    endloop
+  endfacet
+  facet normal -0.176679 0.984269 0
+    outer loop
+       vertex 3.90987 0.0149476 0.489362
+       vertex 3.90987 0.0149476 -0.510638
+       vertex 3.88949 0.0112894 -0.510638
+    endloop
+  endfacet
+  facet normal -0.176679 0.984269 0
+    outer loop
+       vertex 3.90987 0.0149476 0.489362
+       vertex 3.88949 0.0112894 -0.510638
+       vertex 3.88949 0.0112894 0.489362
+    endloop
+  endfacet
+  facet normal -0.125491 0.992095 0
+    outer loop
+       vertex 3.88949 0.0112894 0.489362
+       vertex 3.88949 0.0112894 -0.510638
+       vertex 3.86849 0.0086332 -0.510638
+    endloop
+  endfacet
+  facet normal -0.125491 0.992095 0
+    outer loop
+       vertex 3.88949 0.0112894 0.489362
+       vertex 3.86849 0.0086332 -0.510638
+       vertex 3.86849 0.0086332 0.489362
+    endloop
+  endfacet
+  facet normal -0.0747322 0.997204 0
+    outer loop
+       vertex 3.86849 0.0086332 0.489362
+       vertex 3.86849 0.0086332 -0.510638
+       vertex 3.84689 0.00701391 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0747322 0.997204 0
+    outer loop
+       vertex 3.86849 0.0086332 0.489362
+       vertex 3.84689 0.00701391 -0.510638
+       vertex 3.84689 0.00701391 0.489362
+    endloop
+  endfacet
+  facet normal -0.0246501 0.999696 0
+    outer loop
+       vertex 3.84689 0.00701391 0.489362
+       vertex 3.84689 0.00701391 -0.510638
+       vertex 3.82468 0.00646639 -0.510638
+    endloop
+  endfacet
+  facet normal -0.0246501 0.999696 0
+    outer loop
+       vertex 3.84689 0.00701391 0.489362
+       vertex 3.82468 0.00646639 -0.510638
+       vertex 3.82468 0.00646639 0.489362
+    endloop
+  endfacet
+  facet normal 0 1 0
+    outer loop
+       vertex 3.82468 0.00646639 0.489362
+       vertex 3.82468 0.00646639 -0.510638
+       vertex 3.55868 0.00646639 -0.510638
+    endloop
+  endfacet
+  facet normal 0 1 0
+    outer loop
+       vertex 3.82468 0.00646639 0.489362
+       vertex 3.55868 0.00646639 -0.510638
+       vertex 3.55868 0.00646639 0.489362
+    endloop
+  endfacet
+  facet normal 1 0 0
+    outer loop
+       vertex 3.55868 0.00646639 0.489362
+       vertex 3.55868 0.00646639 -0.510638
+       vertex 3.55868 0.688466 -0.510638
+    endloop
+  endfacet
+  facet normal 1 -0 0
+    outer loop
+       vertex 3.55868 0.00646639 0.489362
+       vertex 3.55868 0.688466 -0.510638
+       vertex 3.55868 0.688466 0.489362
+    endloop
+  endfacet
+  facet normal 0 -1 0
+    outer loop
+       vertex 3.55868 0.688466 0.489362
+       vertex 3.55868 0.688466 -0.510638
+       vertex 3.82368 0.688466 -0.510638
+    endloop
+  endfacet
+  facet normal 0 -1 0
+    outer loop
+       vertex 3.55868 0.688466 0.489362
+       vertex 3.82368 0.688466 -0.510638
+       vertex 3.82368 0.688466 0.489362
+    endloop
+  endfacet
+  facet normal 0.0255959 -0.999672 0
+    outer loop
+       vertex 3.81268 0.0944664 0.489362
+       vertex 3.81268 0.0944664 -0.510638
+       vertex 3.83432 0.0950203 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0255959 -0.999672 0
+    outer loop
+       vertex 3.81268 0.0944664 0.489362
+       vertex 3.83432 0.0950203 -0.510638
+       vertex 3.83432 0.0950203 0.489362
+    endloop
+  endfacet
+  facet normal 0.0788981 -0.996883 0
+    outer loop
+       vertex 3.83432 0.0950203 0.489362
+       vertex 3.83432 0.0950203 -0.510638
+       vertex 3.85484 0.0966445 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0788981 -0.996883 0
+    outer loop
+       vertex 3.83432 0.0950203 0.489362
+       vertex 3.85484 0.0966445 -0.510638
+       vertex 3.85484 0.0966445 0.489362
+    endloop
+  endfacet
+  facet normal 0.134501 -0.990913 0
+    outer loop
+       vertex 3.85484 0.0966445 0.489362
+       vertex 3.85484 0.0966445 -0.510638
+       vertex 3.87427 0.0992824 -0.510638
+    endloop
+  endfacet
+  facet normal 0.134501 -0.990913 0
+    outer loop
+       vertex 3.85484 0.0966445 0.489362
+       vertex 3.87427 0.0992824 -0.510638
+       vertex 3.87427 0.0992824 0.489362
+    endloop
+  endfacet
+  facet normal 0.192025 -0.98139 0
+    outer loop
+       vertex 3.87427 0.0992824 0.489362
+       vertex 3.87427 0.0992824 -0.510638
+       vertex 3.89265 0.102878 -0.510638
+    endloop
+  endfacet
+  facet normal 0.192025 -0.98139 0
+    outer loop
+       vertex 3.87427 0.0992824 0.489362
+       vertex 3.89265 0.102878 -0.510638
+       vertex 3.89265 0.102878 0.489362
+    endloop
+  endfacet
+  facet normal 0.250978 -0.967993 0
+    outer loop
+       vertex 3.89265 0.102878 0.489362
+       vertex 3.89265 0.102878 -0.510638
+       vertex 3.90999 0.107374 -0.510638
+    endloop
+  endfacet
+  facet normal 0.250978 -0.967993 0
+    outer loop
+       vertex 3.89265 0.102878 0.489362
+       vertex 3.90999 0.107374 -0.510638
+       vertex 3.90999 0.107374 0.489362
+    endloop
+  endfacet
+  facet normal 0.310763 -0.950488 0
+    outer loop
+       vertex 3.90999 0.107374 0.489362
+       vertex 3.90999 0.107374 -0.510638
+       vertex 3.92632 0.112714 -0.510638
+    endloop
+  endfacet
+  facet normal 0.310763 -0.950488 0
+    outer loop
+       vertex 3.90999 0.107374 0.489362
+       vertex 3.92632 0.112714 -0.510638
+       vertex 3.92632 0.112714 0.489362
+    endloop
+  endfacet
+  facet normal 0.370704 -0.928751 0
+    outer loop
+       vertex 3.92632 0.112714 0.489362
+       vertex 3.92632 0.112714 -0.510638
+       vertex 3.94168 0.118843 -0.510638
+    endloop
+  endfacet
+  facet normal 0.370704 -0.928751 0
+    outer loop
+       vertex 3.92632 0.112714 0.489362
+       vertex 3.94168 0.118843 -0.510638
+       vertex 3.94168 0.118843 0.489362
+    endloop
+  endfacet
+  facet normal 0.430058 -0.902801 0
+    outer loop
+       vertex 3.94168 0.118843 0.489362
+       vertex 3.94168 0.118843 -0.510638
+       vertex 3.95608 0.125703 -0.510638
+    endloop
+  endfacet
+  facet normal 0.430058 -0.902801 0
+    outer loop
+       vertex 3.94168 0.118843 0.489362
+       vertex 3.95608 0.125703 -0.510638
+       vertex 3.95608 0.125703 0.489362
+    endloop
+  endfacet
+  facet normal 0.488088 -0.872794 0
+    outer loop
+       vertex 3.95608 0.125703 0.489362
+       vertex 3.95608 0.125703 -0.510638
+       vertex 3.96955 0.133238 -0.510638
+    endloop
+  endfacet
+  facet normal 0.488088 -0.872794 0
+    outer loop
+       vertex 3.95608 0.125703 0.489362
+       vertex 3.96955 0.133238 -0.510638
+       vertex 3.96955 0.133238 0.489362
+    endloop
+  endfacet
+  facet normal 0.544076 -0.839036 0
+    outer loop
+       vertex 3.96955 0.133238 0.489362
+       vertex 3.96955 0.133238 -0.510638
+       vertex 3.98213 0.141392 -0.510638
+    endloop
+  endfacet
+  facet normal 0.544076 -0.839036 0
+    outer loop
+       vertex 3.96955 0.133238 0.489362
+       vertex 3.98213 0.141392 -0.510638
+       vertex 3.98213 0.141392 0.489362
+    endloop
+  endfacet
+  facet normal 0.597379 -0.801959 0
+    outer loop
+       vertex 3.98213 0.141392 0.489362
+       vertex 3.98213 0.141392 -0.510638
+       vertex 3.99383 0.150108 -0.510638
+    endloop
+  endfacet
+  facet normal 0.597379 -0.801959 0
+    outer loop
+       vertex 3.98213 0.141392 0.489362
+       vertex 3.99383 0.150108 -0.510638
+       vertex 3.99383 0.150108 0.489362
+    endloop
+  endfacet
+  facet normal 0.64747 -0.762091 0
+    outer loop
+       vertex 3.99383 0.150108 0.489362
+       vertex 3.99383 0.150108 -0.510638
+       vertex 4.00468 0.15933 -0.510638
+    endloop
+  endfacet
+  facet normal 0.64747 -0.762091 0
+    outer loop
+       vertex 3.99383 0.150108 0.489362
+       vertex 4.00468 0.15933 -0.510638
+       vertex 4.00468 0.15933 0.489362
+    endloop
+  endfacet
+  facet normal 0.693952 -0.720021 0
+    outer loop
+       vertex 4.00468 0.15933 0.489362
+       vertex 4.00468 0.15933 -0.510638
+       vertex 4.01472 0.169002 -0.510638
+    endloop
+  endfacet
+  facet normal 0.693952 -0.720021 0
+    outer loop
+       vertex 4.00468 0.15933 0.489362
+       vertex 4.01472 0.169002 -0.510638
+       vertex 4.01472 0.169002 0.489362
+    endloop
+  endfacet
+  facet normal 0.736584 -0.676346 0
+    outer loop
+       vertex 4.01472 0.169002 0.489362
+       vertex 4.01472 0.169002 -0.510638
+       vertex 4.02396 0.179066 -0.510638
+    endloop
+  endfacet
+  facet normal 0.736584 -0.676346 0
+    outer loop
+       vertex 4.01472 0.169002 0.489362
+       vertex 4.02396 0.179066 -0.510638
+       vertex 4.02396 0.179066 0.489362
+    endloop
+  endfacet
+  facet normal 0.775243 -0.631664 0
+    outer loop
+       vertex 4.02396 0.179066 0.489362
+       vertex 4.02396 0.179066 -0.510638
+       vertex 4.03243 0.189466 -0.510638
+    endloop
+  endfacet
+  facet normal 0.775243 -0.631664 0
+    outer loop
+       vertex 4.02396 0.179066 0.489362
+       vertex 4.03243 0.189466 -0.510638
+       vertex 4.03243 0.189466 0.489362
+    endloop
+  endfacet
+  facet normal 0.809939 -0.586514 0
+    outer loop
+       vertex 4.03243 0.189466 0.489362
+       vertex 4.03243 0.189466 -0.510638
+       vertex 4.04017 0.200147 -0.510638
+    endloop
+  endfacet
+  facet normal 0.809939 -0.586514 0
+    outer loop
+       vertex 4.03243 0.189466 0.489362
+       vertex 4.04017 0.200147 -0.510638
+       vertex 4.04017 0.200147 0.489362
+    endloop
+  endfacet
+  facet normal 0.840788 -0.541365 0
+    outer loop
+       vertex 4.04017 0.200147 0.489362
+       vertex 4.04017 0.200147 -0.510638
+       vertex 4.04719 0.211051 -0.510638
+    endloop
+  endfacet
+  facet normal 0.840788 -0.541365 0
+    outer loop
+       vertex 4.04017 0.200147 0.489362
+       vertex 4.04719 0.211051 -0.510638
+       vertex 4.04719 0.211051 0.489362
+    endloop
+  endfacet
+  facet normal 0.867977 -0.496604 0
+    outer loop
+       vertex 4.04719 0.211051 0.489362
+       vertex 4.04719 0.211051 -0.510638
+       vertex 4.05352 0.222122 -0.510638
+    endloop
+  endfacet
+  facet normal 0.867977 -0.496604 0
+    outer loop
+       vertex 4.04719 0.211051 0.489362
+       vertex 4.05352 0.222122 -0.510638
+       vertex 4.05352 0.222122 0.489362
+    endloop
+  endfacet
+  facet normal 0.891751 -0.452527 0
+    outer loop
+       vertex 4.05352 0.222122 0.489362
+       vertex 4.05352 0.222122 -0.510638
+       vertex 4.0592 0.233304 -0.510638
+    endloop
+  endfacet
+  facet normal 0.891751 -0.452527 0
+    outer loop
+       vertex 4.05352 0.222122 0.489362
+       vertex 4.0592 0.233304 -0.510638
+       vertex 4.0592 0.233304 0.489362
+    endloop
+  endfacet
+  facet normal 0.912381 -0.409342 0
+    outer loop
+       vertex 4.0592 0.233304 0.489362
+       vertex 4.0592 0.233304 -0.510638
+       vertex 4.06424 0.24454 -0.510638
+    endloop
+  endfacet
+  facet normal 0.912381 -0.409342 0
+    outer loop
+       vertex 4.0592 0.233304 0.489362
+       vertex 4.06424 0.24454 -0.510638
+       vertex 4.06424 0.24454 0.489362
+    endloop
+  endfacet
+  facet normal 0.930151 -0.367177 0
+    outer loop
+       vertex 4.06424 0.24454 0.489362
+       vertex 4.06424 0.24454 -0.510638
+       vertex 4.06867 0.255774 -0.510638
+    endloop
+  endfacet
+  facet normal 0.930151 -0.367177 0
+    outer loop
+       vertex 4.06424 0.24454 0.489362
+       vertex 4.06867 0.255774 -0.510638
+       vertex 4.06867 0.255774 0.489362
+    endloop
+  endfacet
+  facet normal 0.945354 -0.326046 0
+    outer loop
+       vertex 4.06867 0.255774 0.489362
+       vertex 4.06867 0.255774 -0.510638
+       vertex 4.07253 0.26695 -0.510638
+    endloop
+  endfacet
+  facet normal 0.945354 -0.326046 0
+    outer loop
+       vertex 4.06867 0.255774 0.489362
+       vertex 4.07253 0.26695 -0.510638
+       vertex 4.07253 0.26695 0.489362
+    endloop
+  endfacet
+  facet normal 0.958228 -0.286004 0
+    outer loop
+       vertex 4.07253 0.26695 0.489362
+       vertex 4.07253 0.26695 -0.510638
+       vertex 4.07583 0.27801 -0.510638
+    endloop
+  endfacet
+  facet normal 0.958228 -0.286004 0
+    outer loop
+       vertex 4.07253 0.26695 0.489362
+       vertex 4.07583 0.27801 -0.510638
+       vertex 4.07583 0.27801 0.489362
+    endloop
+  endfacet
+  facet normal 0.969042 -0.246896 0
+    outer loop
+       vertex 4.07583 0.27801 0.489362
+       vertex 4.07583 0.27801 -0.510638
+       vertex 4.0786 0.288898 -0.510638
+    endloop
+  endfacet
+  facet normal 0.969042 -0.246896 0
+    outer loop
+       vertex 4.07583 0.27801 0.489362
+       vertex 4.0786 0.288898 -0.510638
+       vertex 4.0786 0.288898 0.489362
+    endloop
+  endfacet
+  facet normal 0.977988 -0.208661 0
+    outer loop
+       vertex 4.0786 0.288898 0.489362
+       vertex 4.0786 0.288898 -0.510638
+       vertex 4.08088 0.299559 -0.510638
+    endloop
+  endfacet
+  facet normal 0.977988 -0.208661 0
+    outer loop
+       vertex 4.0786 0.288898 0.489362
+       vertex 4.08088 0.299559 -0.510638
+       vertex 4.08088 0.299559 0.489362
+    endloop
+  endfacet
+  facet normal 0.985268 -0.171015 0
+    outer loop
+       vertex 4.08088 0.299559 0.489362
+       vertex 4.08088 0.299559 -0.510638
+       vertex 4.08268 0.309935 -0.510638
+    endloop
+  endfacet
+  facet normal 0.985268 -0.171015 0
+    outer loop
+       vertex 4.08088 0.299559 0.489362
+       vertex 4.08268 0.309935 -0.510638
+       vertex 4.08268 0.309935 0.489362
+    endloop
+  endfacet
+  facet normal 0.991017 -0.133734 0
+    outer loop
+       vertex 4.08268 0.309935 0.489362
+       vertex 4.08268 0.309935 -0.510638
+       vertex 4.08403 0.31997 -0.510638
+    endloop
+  endfacet
+  facet normal 0.991017 -0.133734 0
+    outer loop
+       vertex 4.08268 0.309935 0.489362
+       vertex 4.08403 0.31997 -0.510638
+       vertex 4.08403 0.31997 0.489362
+    endloop
+  endfacet
+  facet normal 0.995331 -0.0965185 0
+    outer loop
+       vertex 4.08403 0.31997 0.489362
+       vertex 4.08403 0.31997 -0.510638
+       vertex 4.08497 0.329608 -0.510638
+    endloop
+  endfacet
+  facet normal 0.995331 -0.0965185 0
+    outer loop
+       vertex 4.08403 0.31997 0.489362
+       vertex 4.08497 0.329608 -0.510638
+       vertex 4.08497 0.329608 0.489362
+    endloop
+  endfacet
+  facet normal 0.998268 -0.0588267 0
+    outer loop
+       vertex 4.08497 0.329608 0.489362
+       vertex 4.08497 0.329608 -0.510638
+       vertex 4.08551 0.338792 -0.510638
+    endloop
+  endfacet
+  facet normal 0.998268 -0.0588267 0
+    outer loop
+       vertex 4.08497 0.329608 0.489362
+       vertex 4.08551 0.338792 -0.510638
+       vertex 4.08551 0.338792 0.489362
+    endloop
+  endfacet
+  facet normal 0.999798 -0.0201163 0
+    outer loop
+       vertex 4.08551 0.338792 0.489362
+       vertex 4.08551 0.338792 -0.510638
+       vertex 4.08568 0.347466 -0.510638
+    endloop
+  endfacet
+  facet normal 0.999798 -0.0201163 0
+    outer loop
+       vertex 4.08551 0.338792 0.489362
+       vertex 4.08568 0.347466 -0.510638
+       vertex 4.08568 0.347466 0.489362
+    endloop
+  endfacet
+  facet normal 0.999773 0.0213063 0
+    outer loop
+       vertex 4.08568 0.347466 0.489362
+       vertex 4.08568 0.347466 -0.510638
+       vertex 4.08539 0.361093 -0.510638
+    endloop
+  endfacet
+  facet normal 0.999773 0.0213063 0
+    outer loop
+       vertex 4.08568 0.347466 0.489362
+       vertex 4.08539 0.361093 -0.510638
+       vertex 4.08539 0.361093 0.489362
+    endloop
+  endfacet
+  facet normal 0.997898 0.0648092 0
+    outer loop
+       vertex 4.08539 0.361093 0.489362
+       vertex 4.08539 0.361093 -0.510638
+       vertex 4.08452 0.374558 -0.510638
+    endloop
+  endfacet
+  facet normal 0.997898 0.0648092 0
+    outer loop
+       vertex 4.08539 0.361093 0.489362
+       vertex 4.08452 0.374558 -0.510638
+       vertex 4.08452 0.374558 0.489362
+    endloop
+  endfacet
+  facet normal 0.993998 0.109402 0
+    outer loop
+       vertex 4.08452 0.374558 0.489362
+       vertex 4.08452 0.374558 -0.510638
+       vertex 4.08306 0.387841 -0.510638
+    endloop
+  endfacet
+  facet normal 0.993998 0.109402 0
+    outer loop
+       vertex 4.08452 0.374558 0.489362
+       vertex 4.08306 0.387841 -0.510638
+       vertex 4.08306 0.387841 0.489362
+    endloop
+  endfacet
+  facet normal 0.987902 0.15508 0
+    outer loop
+       vertex 4.08306 0.387841 0.489362
+       vertex 4.08306 0.387841 -0.510638
+       vertex 4.081 0.400921 -0.510638
+    endloop
+  endfacet
+  facet normal 0.987902 0.15508 0
+    outer loop
+       vertex 4.08306 0.387841 0.489362
+       vertex 4.081 0.400921 -0.510638
+       vertex 4.081 0.400921 0.489362
+    endloop
+  endfacet
+  facet normal 0.979432 0.201774 0
+    outer loop
+       vertex 4.081 0.400921 0.489362
+       vertex 4.081 0.400921 -0.510638
+       vertex 4.07835 0.413777 -0.510638
+    endloop
+  endfacet
+  facet normal 0.979432 0.201774 0
+    outer loop
+       vertex 4.081 0.400921 0.489362
+       vertex 4.07835 0.413777 -0.510638
+       vertex 4.07835 0.413777 0.489362
+    endloop
+  endfacet
+  facet normal 0.968405 0.249382 0
+    outer loop
+       vertex 4.07835 0.413777 0.489362
+       vertex 4.07835 0.413777 -0.510638
+       vertex 4.07511 0.426386 -0.510638
+    endloop
+  endfacet
+  facet normal 0.968405 0.249382 0
+    outer loop
+       vertex 4.07835 0.413777 0.489362
+       vertex 4.07511 0.426386 -0.510638
+       vertex 4.07511 0.426386 0.489362
+    endloop
+  endfacet
+  facet normal 0.95464 0.297764 0
+    outer loop
+       vertex 4.07511 0.426386 0.489362
+       vertex 4.07511 0.426386 -0.510638
+       vertex 4.07126 0.43873 -0.510638
+    endloop
+  endfacet
+  facet normal 0.95464 0.297764 0
+    outer loop
+       vertex 4.07511 0.426386 0.489362
+       vertex 4.07126 0.43873 -0.510638
+       vertex 4.07126 0.43873 0.489362
+    endloop
+  endfacet
+  facet normal 0.937962 0.346737 0
+    outer loop
+       vertex 4.07126 0.43873 0.489362
+       vertex 4.07126 0.43873 -0.510638
+       vertex 4.0668 0.450785 -0.510638
+    endloop
+  endfacet
+  facet normal 0.937962 0.346737 0
+    outer loop
+       vertex 4.07126 0.43873 0.489362
+       vertex 4.0668 0.450785 -0.510638
+       vertex 4.0668 0.450785 0.489362
+    endloop
+  endfacet
+  facet normal 0.918218 0.396075 0
+    outer loop
+       vertex 4.0668 0.450785 0.489362
+       vertex 4.0668 0.450785 -0.510638
+       vertex 4.06173 0.462531 -0.510638
+    endloop
+  endfacet
+  facet normal 0.918218 0.396075 0
+    outer loop
+       vertex 4.0668 0.450785 0.489362
+       vertex 4.06173 0.462531 -0.510638
+       vertex 4.06173 0.462531 0.489362
+    endloop
+  endfacet
+  facet normal 0.895294 0.445476 0
+    outer loop
+       vertex 4.06173 0.462531 0.489362
+       vertex 4.06173 0.462531 -0.510638
+       vertex 4.05605 0.473948 -0.510638
+    endloop
+  endfacet
+  facet normal 0.895294 0.445476 0
+    outer loop
+       vertex 4.06173 0.462531 0.489362
+       vertex 4.05605 0.473948 -0.510638
+       vertex 4.05605 0.473948 0.489362
+    endloop
+  endfacet
+  facet normal 0.869072 0.494686 0
+    outer loop
+       vertex 4.05605 0.473948 0.489362
+       vertex 4.05605 0.473948 -0.510638
+       vertex 4.04975 0.485013 -0.510638
+    endloop
+  endfacet
+  facet normal 0.869072 0.494686 0
+    outer loop
+       vertex 4.05605 0.473948 0.489362
+       vertex 4.04975 0.485013 -0.510638
+       vertex 4.04975 0.485013 0.489362
+    endloop
+  endfacet
+  facet normal 0.839543 0.543293 0
+    outer loop
+       vertex 4.04975 0.485013 0.489362
+       vertex 4.04975 0.485013 -0.510638
+       vertex 4.04283 0.495706 -0.510638
+    endloop
+  endfacet
+  facet normal 0.839543 0.543293 0
+    outer loop
+       vertex 4.04975 0.485013 0.489362
+       vertex 4.04283 0.495706 -0.510638
+       vertex 4.04283 0.495706 0.489362
+    endloop
+  endfacet
+  facet normal 0.806694 0.590969 0
+    outer loop
+       vertex 4.04283 0.495706 0.489362
+       vertex 4.04283 0.495706 -0.510638
+       vertex 4.03529 0.506006 -0.510638
+    endloop
+  endfacet
+  facet normal 0.806694 0.590969 0
+    outer loop
+       vertex 4.04283 0.495706 0.489362
+       vertex 4.03529 0.506006 -0.510638
+       vertex 4.03529 0.506006 0.489362
+    endloop
+  endfacet
+  facet normal 0.770646 0.637263 0
+    outer loop
+       vertex 4.03529 0.506006 0.489362
+       vertex 4.03529 0.506006 -0.510638
+       vertex 4.02711 0.515892 -0.510638
+    endloop
+  endfacet
+  facet normal 0.770646 0.637263 0
+    outer loop
+       vertex 4.03529 0.506006 0.489362
+       vertex 4.02711 0.515892 -0.510638
+       vertex 4.02711 0.515892 0.489362
+    endloop
+  endfacet
+  facet normal 0.731544 0.681794 0
+    outer loop
+       vertex 4.02711 0.515892 0.489362
+       vertex 4.02711 0.515892 -0.510638
+       vertex 4.01831 0.525341 -0.510638
+    endloop
+  endfacet
+  facet normal 0.731544 0.681794 0
+    outer loop
+       vertex 4.02711 0.515892 0.489362
+       vertex 4.01831 0.525341 -0.510638
+       vertex 4.01831 0.525341 0.489362
+    endloop
+  endfacet
+  facet normal 0.689619 0.724173 0
+    outer loop
+       vertex 4.01831 0.525341 0.489362
+       vertex 4.01831 0.525341 -0.510638
+       vertex 4.00886 0.534335 -0.510638
+    endloop
+  endfacet
+  facet normal 0.689619 0.724173 0
+    outer loop
+       vertex 4.01831 0.525341 0.489362
+       vertex 4.00886 0.534335 -0.510638
+       vertex 4.00886 0.534335 0.489362
+    endloop
+  endfacet
+  facet normal 0.645156 0.76405 0
+    outer loop
+       vertex 4.00886 0.534335 0.489362
+       vertex 4.00886 0.534335 -0.510638
+       vertex 3.99878 0.54285 -0.510638
+    endloop
+  endfacet
+  facet normal 0.645156 0.76405 0
+    outer loop
+       vertex 4.00886 0.534335 0.489362
+       vertex 3.99878 0.54285 -0.510638
+       vertex 3.99878 0.54285 0.489362
+    endloop
+  endfacet
+  facet normal 0.598566 0.801073 0
+    outer loop
+       vertex 3.99878 0.54285 0.489362
+       vertex 3.99878 0.54285 -0.510638
+       vertex 3.98805 0.550866 -0.510638
+    endloop
+  endfacet
+  facet normal 0.598566 0.801073 0
+    outer loop
+       vertex 3.99878 0.54285 0.489362
+       vertex 3.98805 0.550866 -0.510638
+       vertex 3.98805 0.550866 0.489362
+    endloop
+  endfacet
+  facet normal 0.550224 0.835017 0
+    outer loop
+       vertex 3.98805 0.550866 0.489362
+       vertex 3.98805 0.550866 -0.510638
+       vertex 3.97667 0.558363 -0.510638
+    endloop
+  endfacet
+  facet normal 0.550224 0.835017 0
+    outer loop
+       vertex 3.98805 0.550866 0.489362
+       vertex 3.97667 0.558363 -0.510638
+       vertex 3.97667 0.558363 0.489362
+    endloop
+  endfacet
+  facet normal 0.50058 0.86569 0
+    outer loop
+       vertex 3.97667 0.558363 0.489362
+       vertex 3.97667 0.558363 -0.510638
+       vertex 3.96465 0.565318 -0.510638
+    endloop
+  endfacet
+  facet normal 0.50058 0.86569 0
+    outer loop
+       vertex 3.97667 0.558363 0.489362
+       vertex 3.96465 0.565318 -0.510638
+       vertex 3.96465 0.565318 0.489362
+    endloop
+  endfacet
+  facet normal 0.450095 0.892981 0
+    outer loop
+       vertex 3.96465 0.565318 0.489362
+       vertex 3.96465 0.565318 -0.510638
+       vertex 3.95196 0.571711 -0.510638
+    endloop
+  endfacet
+  facet normal 0.450095 0.892981 0
+    outer loop
+       vertex 3.96465 0.565318 0.489362
+       vertex 3.95196 0.571711 -0.510638
+       vertex 3.95196 0.571711 0.489362
+    endloop
+  endfacet
+  facet normal 0.399211 0.916859 0
+    outer loop
+       vertex 3.95196 0.571711 0.489362
+       vertex 3.95196 0.571711 -0.510638
+       vertex 3.93862 0.577521 -0.510638
+    endloop
+  endfacet
+  facet normal 0.399211 0.916859 0
+    outer loop
+       vertex 3.95196 0.571711 0.489362
+       vertex 3.93862 0.577521 -0.510638
+       vertex 3.93862 0.577521 0.489362
+    endloop
+  endfacet
+  facet normal 0.348364 0.937359 0
+    outer loop
+       vertex 3.93862 0.577521 0.489362
+       vertex 3.93862 0.577521 -0.510638
+       vertex 3.92461 0.582727 -0.510638
+    endloop
+  endfacet
+  facet normal 0.348364 0.937359 0
+    outer loop
+       vertex 3.93862 0.577521 0.489362
+       vertex 3.92461 0.582727 -0.510638
+       vertex 3.92461 0.582727 0.489362
+    endloop
+  endfacet
+  facet normal 0.297946 0.954583 0
+    outer loop
+       vertex 3.92461 0.582727 0.489362
+       vertex 3.92461 0.582727 -0.510638
+       vertex 3.90994 0.587306 -0.510638
+    endloop
+  endfacet
+  facet normal 0.297946 0.954583 0
+    outer loop
+       vertex 3.92461 0.582727 0.489362
+       vertex 3.90994 0.587306 -0.510638
+       vertex 3.90994 0.587306 0.489362
+    endloop
+  endfacet
+  facet normal 0.248304 0.968682 0
+    outer loop
+       vertex 3.90994 0.587306 0.489362
+       vertex 3.90994 0.587306 -0.510638
+       vertex 3.89459 0.59124 -0.510638
+    endloop
+  endfacet
+  facet normal 0.248304 0.968682 0
+    outer loop
+       vertex 3.90994 0.587306 0.489362
+       vertex 3.89459 0.59124 -0.510638
+       vertex 3.89459 0.59124 0.489362
+    endloop
+  endfacet
+  facet normal 0.199744 0.979848 0
+    outer loop
+       vertex 3.89459 0.59124 0.489362
+       vertex 3.89459 0.59124 -0.510638
+       vertex 3.87858 0.594505 -0.510638
+    endloop
+  endfacet
+  facet normal 0.199744 0.979848 0
+    outer loop
+       vertex 3.89459 0.59124 0.489362
+       vertex 3.87858 0.594505 -0.510638
+       vertex 3.87858 0.594505 0.489362
+    endloop
+  endfacet
+  facet normal 0.152505 0.988303 0
+    outer loop
+       vertex 3.87858 0.594505 0.489362
+       vertex 3.87858 0.594505 -0.510638
+       vertex 3.86188 0.597081 -0.510638
+    endloop
+  endfacet
+  facet normal 0.152505 0.988303 0
+    outer loop
+       vertex 3.87858 0.594505 0.489362
+       vertex 3.86188 0.597081 -0.510638
+       vertex 3.86188 0.597081 0.489362
+    endloop
+  endfacet
+  facet normal 0.106786 0.994282 0
+    outer loop
+       vertex 3.86188 0.597081 0.489362
+       vertex 3.86188 0.597081 -0.510638
+       vertex 3.8445 0.598948 -0.510638
+    endloop
+  endfacet
+  facet normal 0.106786 0.994282 0
+    outer loop
+       vertex 3.86188 0.597081 0.489362
+       vertex 3.8445 0.598948 -0.510638
+       vertex 3.8445 0.598948 0.489362
+    endloop
+  endfacet
+  facet normal 0.062726 0.998031 0
+    outer loop
+       vertex 3.8445 0.598948 0.489362
+       vertex 3.8445 0.598948 -0.510638
+       vertex 3.82644 0.600083 -0.510638
+    endloop
+  endfacet
+  facet normal 0.062726 0.998031 0
+    outer loop
+       vertex 3.8445 0.598948 0.489362
+       vertex 3.82644 0.600083 -0.510638
+       vertex 3.82644 0.600083 0.489362
+    endloop
+  endfacet
+  facet normal 0.0204254 0.999791 0
+    outer loop
+       vertex 3.82644 0.600083 0.489362
+       vertex 3.82644 0.600083 -0.510638
+       vertex 3.80768 0.600466 -0.510638
+    endloop
+  endfacet
+  facet normal 0.0204254 0.999791 0
+    outer loop
+       vertex 3.82644 0.600083 0.489362
+       vertex 3.80768 0.600466 -0.510638
+       vertex 3.80768 0.600466 0.489362
+    endloop
+  endfacet
+  facet normal 0 1 0
+    outer loop
+       vertex 3.80768 0.600466 0.489362
+       vertex 3.80768 0.600466 -0.510638
+       vertex 3.65668 0.600466 -0.510638
+    endloop
+  endfacet
+  facet normal 0 1 0
+    outer loop
+       vertex 3.80768 0.600466 0.489362
+       vertex 3.65668 0.600466 -0.510638
+       vertex 3.65668 0.600466 0.489362
+    endloop
+  endfacet
+  facet normal -1 0 -0
+    outer loop
+       vertex 3.65668 0.600466 0.489362
+       vertex 3.65668 0.600466 -0.510638
+       vertex 3.65668 0.0944664 -0.510638
+    endloop
+  endfacet
+  facet normal -1 -0 0
+    outer loop
+       vertex 3.65668 0.600466 0.489362
+       vertex 3.65668 0.0944664 -0.510638
+       vertex 3.65668 0.0944664 0.489362
+    endloop
+  endfacet
+  facet normal 0 -1 0
+    outer loop
+       vertex 3.65668 0.0944664 0.489362
+       vertex 3.65668 0.0944664 -0.510638
+       vertex 3.81268 0.0944664 -0.510638
+    endloop
+  endfacet
+  facet normal 0 -1 0
+    outer loop
+       vertex 3.65668 0.0944664 0.489362
+       vertex 3.81268 0.0944664 -0.510638
+       vertex 3.81268 0.0944664 0.489362
+    endloop
+  endfacet
+endsolid text
diff --git a/tutorials/mesh/cv2DMesh/OpenCFD/constant/turbulenceProperties b/tutorials/mesh/cv2DMesh/OpenCFD/constant/turbulenceProperties
new file mode 100644
index 0000000000000000000000000000000000000000..c2c3b28a1b4e8f4a2cae55f58bd61f9b1a67b488
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/OpenCFD/constant/turbulenceProperties
@@ -0,0 +1,21 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "constant";
+    object      turbulenceProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+simulationType  laminar;
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cv2DMesh/OpenCFD/system/controlDict b/tutorials/mesh/cv2DMesh/OpenCFD/system/controlDict
new file mode 100644
index 0000000000000000000000000000000000000000..a2364b630302f7a39c53db9122470780fd607654
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/OpenCFD/system/controlDict
@@ -0,0 +1,55 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      controlDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+application     rhoCentralFoam;
+
+startFrom       startTime;
+
+startTime       0;
+
+stopAt          endTime;
+
+endTime         10;
+
+deltaT          0.001;
+
+writeControl    adjustableRunTime;
+
+writeInterval   1;
+
+purgeWrite      0;
+
+writeFormat     ascii;
+
+writePrecision  12;
+
+writeCompression off;
+
+timeFormat      general;
+
+timePrecision   6;
+
+runTimeModifiable true;
+
+adjustTimeStep  yes;
+
+maxCo           0.5;
+
+maxDeltaT       1;
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cv2DMesh/OpenCFD/system/controlDict.mesher b/tutorials/mesh/cv2DMesh/OpenCFD/system/controlDict.mesher
new file mode 100644
index 0000000000000000000000000000000000000000..c38028778507bd88fe2d873829afabf405e0f20e
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/OpenCFD/system/controlDict.mesher
@@ -0,0 +1,55 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      controlDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+application     rhoCentralFoam;
+
+startFrom       startTime;
+
+startTime       0;
+
+stopAt          endTime;
+
+endTime         100;
+
+deltaT          1;
+
+writeControl    adjustableRunTime;
+
+writeInterval   1;
+
+purgeWrite      0;
+
+writeFormat     ascii;
+
+writePrecision  12;
+
+writeCompression off;
+
+timeFormat      general;
+
+timePrecision   6;
+
+runTimeModifiable true;
+
+adjustTimeStep  yes;
+
+maxCo           0.2;
+
+maxDeltaT       1;
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cv2DMesh/OpenCFD/system/controlDict.rhoCentralFoam b/tutorials/mesh/cv2DMesh/OpenCFD/system/controlDict.rhoCentralFoam
new file mode 100644
index 0000000000000000000000000000000000000000..a2364b630302f7a39c53db9122470780fd607654
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/OpenCFD/system/controlDict.rhoCentralFoam
@@ -0,0 +1,55 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      controlDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+application     rhoCentralFoam;
+
+startFrom       startTime;
+
+startTime       0;
+
+stopAt          endTime;
+
+endTime         10;
+
+deltaT          0.001;
+
+writeControl    adjustableRunTime;
+
+writeInterval   1;
+
+purgeWrite      0;
+
+writeFormat     ascii;
+
+writePrecision  12;
+
+writeCompression off;
+
+timeFormat      general;
+
+timePrecision   6;
+
+runTimeModifiable true;
+
+adjustTimeStep  yes;
+
+maxCo           0.5;
+
+maxDeltaT       1;
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cv2DMesh/OpenCFD/system/cv2DMeshDict b/tutorials/mesh/cv2DMesh/OpenCFD/system/cv2DMeshDict
new file mode 100644
index 0000000000000000000000000000000000000000..c90cb88c278c136fff9aa9a3cb063e60a3c26378
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/OpenCFD/system/cv2DMeshDict
@@ -0,0 +1,158 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      cv2DMeshDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+geometry
+{
+    opencfd_text.stl
+    {
+        name letters;
+        type closedTriSurfaceMesh;
+    }
+
+    opencfd_box.stl
+    {
+        name box;
+        type closedTriSurfaceMesh;
+    }
+}
+
+
+surfaceConformation
+{
+    // The z-coordinate of the plane is taken from here.
+    locationInMesh                  (0 0 0);
+
+    pointPairDistanceCoeff          0.1;
+
+    minEdgeLenCoeff                 0.1;
+
+    maxNotchLenCoeff                1.0;
+
+    minNearPointDistCoeff           0.1;
+
+    maxQuadAngle                    120;
+
+    // Insert near-boundary point mirror or point-pairs
+    insertSurfaceNearestPointPairs  yes;
+
+    // Mirror near-boundary points rather than insert point-pairs
+    mirrorPoints                    no;
+
+    // Insert point-pairs vor dual-cell vertices very near the surface
+    insertSurfaceNearPointPairs     yes;
+
+    // Maximum number of iterations used in boundaryConform.
+    maxBoundaryConformingIter       5;
+
+    geometryToConformTo
+    {
+        letters
+        {
+            featureMethod           extendedFeatureEdgeMesh;
+            extendedFeatureEdgeMesh "opencfd_text.extendedFeatureEdgeMesh";
+        }
+
+        box
+        {
+            featureMethod           extendedFeatureEdgeMesh;
+            extendedFeatureEdgeMesh "opencfd_box.extendedFeatureEdgeMesh";
+        }
+    }
+
+    additionalFeatures
+    {}
+
+    // Choose if to randomise the initial grid created by insertGrid.
+    randomiseInitialGrid            yes;
+
+    // Perturbation fraction, 1 = cell-size.
+    randomPerturbation              0.1;
+}
+
+
+motionControl
+{
+    // This is a tolerance for determining whether to deal with surface
+    // protrusions or not.
+    minCellSize         0.02;
+
+    // Assign a priority to all requests for cell sizes, the highest overrules.
+    defaultPriority     0;
+
+    shapeControlFunctions
+    {
+        letters
+        {
+            type                  searchableSurfaceControl;
+            priority              1;
+            mode                  bothSides;
+            cellSizeFunction      uniform;
+
+            linearDistanceCoeffs
+            {
+                distanceCellSize  $minCellSize;
+                distance          1;
+            }
+            uniformCoeffs
+            {}
+
+            surfaceCellSizeFunction uniformValue;
+            uniformValueCoeffs
+            {
+                surfaceCellSize   $minCellSize;
+            }
+        }
+    }
+
+    relaxationModel     adaptiveLinear;
+
+    adaptiveLinearCoeffs
+    {
+        relaxationStart 0.5;
+        relaxationEnd   0.0;
+    }
+
+    objOutput           no;
+
+    meshedSurfaceOutput yes;
+
+    // Near-wall region where cells are aligned with the wall specified as a
+    // number of cell layers
+    nearWallAlignedDist 3;
+}
+
+
+shortEdgeFilter
+{
+    // Factor to multiply the average of a face's edge lengths by.
+    // If an edge of that face is smaller than that value then delete it.
+    shortEdgeFilterFactor           0.2;
+
+    // Weighting for the lengths of edges that are attached to the boundaries.
+    // Used when calculating the length of an edge. Default 2.0.
+    edgeAttachedToBoundaryFactor    2.0;
+}
+
+
+extrusion
+{
+    extrude  off;
+
+    #include "extrude2DMeshDict"
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cv2DMesh/OpenCFD/system/decomposeParDict b/tutorials/mesh/cv2DMesh/OpenCFD/system/decomposeParDict
new file mode 100644
index 0000000000000000000000000000000000000000..791022fa1f6732089cf56731b1771376b52eb5c4
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/OpenCFD/system/decomposeParDict
@@ -0,0 +1,45 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      decomposeParDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+numberOfSubdomains 8;
+
+method          hierarchical;
+
+simpleCoeffs
+{
+    n               ( 2 2 1 );
+    delta           0.001;
+}
+
+hierarchicalCoeffs
+{
+    n               ( 2 2 2 );
+    delta           0.001;
+    order           xyz;
+}
+
+manualCoeffs
+{
+    dataFile        "";
+}
+
+distributed     no;
+
+roots           ( );
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cv2DMesh/OpenCFD/system/extrude2DMeshDict b/tutorials/mesh/cv2DMesh/OpenCFD/system/extrude2DMeshDict
new file mode 100644
index 0000000000000000000000000000000000000000..b825f1608b358adf65d9bcdf3a1ed23ed5cb0b3b
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/OpenCFD/system/extrude2DMeshDict
@@ -0,0 +1,42 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      extrude2DMeshDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+extrudeModel        linearDirection;
+
+patchInfo
+{}
+
+patchType           empty;
+
+nLayers             1;
+
+expansionRatio      1.0;
+
+linearDirectionCoeffs
+{
+    direction       (0 0 1);
+    thickness       0.1;
+}
+
+wedgeCoeffs
+{
+    axisPt          (0 0 0);
+    axis            (1 0 0);
+    angle           10;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cv2DMesh/OpenCFD/system/fvSchemes b/tutorials/mesh/cv2DMesh/OpenCFD/system/fvSchemes
new file mode 100644
index 0000000000000000000000000000000000000000..067f035d2675eb2f4cbb6b15d2e6ad341c0de416
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/OpenCFD/system/fvSchemes
@@ -0,0 +1,61 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      fvSchemes;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+//fluxScheme          Kurganov;
+fluxScheme          Tadmor;
+
+ddtSchemes
+{
+    default         Euler;
+}
+
+gradSchemes
+{
+    default         Gauss linear;
+}
+
+divSchemes
+{
+    default         none;
+    div(tauMC)      Gauss linear;
+}
+
+laplacianSchemes
+{
+    default         Gauss linear corrected;
+}
+
+interpolationSchemes
+{
+    default             linear;
+    reconstruct(rho)    vanLeer;
+    reconstruct(U)      vanLeerV;
+    reconstruct(T)      vanLeer;
+}
+
+snGradSchemes
+{
+    default         corrected;
+}
+
+fluxRequired
+{
+    default         no;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cv2DMesh/OpenCFD/system/fvSolution b/tutorials/mesh/cv2DMesh/OpenCFD/system/fvSolution
new file mode 100644
index 0000000000000000000000000000000000000000..bdde37d65cc33bee0ce9ca353df523a26031616e
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/OpenCFD/system/fvSolution
@@ -0,0 +1,42 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      fvSolution;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+solvers
+{
+    "(rho|rhoU|rhoE)"
+    {
+        solver          diagonal;
+    }
+
+    U
+    {
+        solver          smoothSolver;
+        smoother        GaussSeidel;
+        nSweeps         2;
+        tolerance       1e-09;
+        relTol          0.01;
+    }
+
+    h
+    {
+        $U;
+        tolerance       1e-10;
+        relTol          0;
+    }
+}
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cv2DMesh/OpenCFD/system/surfaceFeatureExtractDict b/tutorials/mesh/cv2DMesh/OpenCFD/system/surfaceFeatureExtractDict
new file mode 100644
index 0000000000000000000000000000000000000000..d82c88dd2bb3dceefc333613badedda45c8dd8fc
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/OpenCFD/system/surfaceFeatureExtractDict
@@ -0,0 +1,87 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      surfaceFeatureExtractDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+opencfd_text.stl
+{
+    extractionMethod        extractFromSurface;
+
+    extractFromSurfaceCoeffs
+    {
+        // Mark edges whose adjacent surface normals are at an angle less
+        // than includedAngle as features
+        // - 0  : selects no edges
+        // - 180: selects all edges
+        includedAngle       120;
+    }
+
+    subsetFeatures
+    {
+        // Use a plane to select feature edges
+        // (normal)(basePoint)
+        // Keep only edges that intersect the plane will be included
+        plane               (0 0 1)(0 0 0);
+
+        // Keep nonManifold edges (edges with >2 connected faces where
+        // the faces form more than two different normal planes)
+        nonManifoldEdges    no;
+
+        // Keep open edges (edges with 1 connected face)
+        openEdges           no;
+    }
+
+    // Write options
+
+        // Write features to obj format for postprocessing
+        writeObj            no;
+}
+
+
+opencfd_box.stl
+{
+    extractionMethod        extractFromSurface;
+
+    extractFromSurfaceCoeffs
+    {
+        // Mark edges whose adjacent surface normals are at an angle less
+        // than includedAngle as features
+        // - 0  : selects no edges
+        // - 180: selects all edges
+        includedAngle       120;
+    }
+
+    subsetFeatures
+    {
+        // Use a plane to select feature edges
+        // (normal)(basePoint)
+        // Keep only edges that intersect the plane will be included
+        plane               (0 0 1)(0 0 0);
+
+        // Keep nonManifold edges (edges with >2 connected faces where
+        // the faces form more than two different normal planes)
+        nonManifoldEdges    no;
+
+        // Keep open edges (edges with 1 connected face)
+        openEdges           no;
+    }
+
+    // Write options
+
+        // Write features to obj format for postprocessing
+        writeObj            no;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cv2DMesh/jaggedBoundary/Allclean b/tutorials/mesh/cv2DMesh/jaggedBoundary/Allclean
new file mode 100755
index 0000000000000000000000000000000000000000..4f25de0e51ddfbf94201cce54bedbab23b2514ec
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/jaggedBoundary/Allclean
@@ -0,0 +1,16 @@
+#!/bin/sh
+cd ${0%/*} || exit 1    # run from this directory
+
+# Source tutorial run functions
+. $WM_PROJECT_DIR/bin/tools/CleanFunctions
+
+rm -rf constant/extendedFeatureEdgeMesh > /dev/null 2>&1
+rm -rf constant/triSurface/jaggedBoundary.eMesh > /dev/null 2>&1
+rm -rf constant/polyMesh > /dev/null 2>&1
+
+rm -rf MeshedSurface.obj > /dev/null 2>&1
+
+cleanCase
+
+
+# ----------------------------------------------------------------- end-of-file
diff --git a/tutorials/mesh/cv2DMesh/jaggedBoundary/Allrun b/tutorials/mesh/cv2DMesh/jaggedBoundary/Allrun
new file mode 100755
index 0000000000000000000000000000000000000000..cda5a63e282cfb2fa94f6fb4d3685be0c06a4db5
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/jaggedBoundary/Allrun
@@ -0,0 +1,13 @@
+#!/bin/sh
+cd ${0%/*} || exit 1    # run from this directory
+
+# Source tutorial run functions
+. $WM_PROJECT_DIR/bin/tools/RunFunctions
+
+runApplication surfaceFeatureExtract
+runApplication cv2DMesh -overwrite
+runApplication extrude2DMesh -overwrite MeshedSurface
+runApplication checkMesh -allGeometry -allTopology -constant -noZero
+
+
+# ----------------------------------------------------------------- end-of-file
diff --git a/tutorials/mesh/cv2DMesh/jaggedBoundary/constant/triSurface/jaggedBoundary.stl b/tutorials/mesh/cv2DMesh/jaggedBoundary/constant/triSurface/jaggedBoundary.stl
new file mode 100644
index 0000000000000000000000000000000000000000..ff4c993d3502f68da01a6c5cbd3713a580acf2b3
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/jaggedBoundary/constant/triSurface/jaggedBoundary.stl
@@ -0,0 +1,954 @@
+solid jagged
+  facet normal 0.468764725245 0.883323062286 -0
+    outer loop
+       vertex 0.0385189987719 -0.0289657991379 -1.5
+       vertex -0.0187957007438 0.00145015004091 1.5
+       vertex 0.0385189987719 -0.0289657991379 1.5
+    endloop
+  endfacet
+  facet normal 0.647754318236 0.761849291662 -0
+    outer loop
+       vertex -0.0682383030653 0.0434882007539 -1.5
+       vertex -0.0682383030653 0.0434882007539 1.5
+       vertex -0.0187957007438 0.00145015004091 -1.5
+    endloop
+  endfacet
+  facet normal 0.647754318236 0.761849291662 -0
+    outer loop
+       vertex -0.0187957007438 0.00145015004091 -1.5
+       vertex -0.0682383030653 0.0434882007539 1.5
+       vertex -0.0187957007438 0.00145015004091 1.5
+    endloop
+  endfacet
+  facet normal 0.796376571447 0.604801088334 -0
+    outer loop
+       vertex -0.107496999204 0.0951823964715 -1.5
+       vertex -0.107496999204 0.0951823964715 1.5
+       vertex -0.0682383030653 0.0434882007539 -1.5
+    endloop
+  endfacet
+  facet normal 0.796376571447 0.604801088334 -0
+    outer loop
+       vertex -0.0682383030653 0.0434882007539 -1.5
+       vertex -0.107496999204 0.0951823964715 1.5
+       vertex -0.0682383030653 0.0434882007539 1.5
+    endloop
+  endfacet
+  facet normal 0.907731420759 0.419551746233 -0
+    outer loop
+       vertex -0.134736001492 0.154116004705 -1.5
+       vertex -0.134736001492 0.154116004705 1.5
+       vertex -0.107496999204 0.0951823964715 -1.5
+    endloop
+  endfacet
+  facet normal 0.907731420759 0.419551746233 -0
+    outer loop
+       vertex -0.107496999204 0.0951823964715 -1.5
+       vertex -0.134736001492 0.154116004705 1.5
+       vertex -0.107496999204 0.0951823964715 1.5
+    endloop
+  endfacet
+  facet normal 0.976665530864 0.214766014121 -0
+    outer loop
+       vertex -0.148680999875 0.217531993985 -1.5
+       vertex -0.148680999875 0.217531993985 1.5
+       vertex -0.134736001492 0.154116004705 -1.5
+    endloop
+  endfacet
+  facet normal 0.976665530864 0.214766014121 -0
+    outer loop
+       vertex -0.134736001492 0.154116004705 -1.5
+       vertex -0.148680999875 0.217531993985 1.5
+       vertex -0.134736001492 0.154116004705 1.5
+    endloop
+  endfacet
+  facet normal 1 0 -0
+    outer loop
+       vertex -0.148680999875 0.282467007637 -1.5
+       vertex -0.148680999875 0.282467007637 1.5
+       vertex -0.148680999875 0.217531993985 -1.5
+    endloop
+  endfacet
+  facet normal 1 0 0
+    outer loop
+       vertex -0.148680999875 0.217531993985 -1.5
+       vertex -0.148680999875 0.282467007637 1.5
+       vertex -0.148680999875 0.217531993985 1.5
+    endloop
+  endfacet
+  facet normal 0.976666240056 -0.214762788992 0
+    outer loop
+       vertex -0.134736001492 0.345883995295 -1.5
+       vertex -0.134736001492 0.345883995295 1.5
+       vertex -0.148680999875 0.282467007637 -1.5
+    endloop
+  endfacet
+  facet normal 0.976666240056 -0.214762788992 0
+    outer loop
+       vertex -0.148680999875 0.282467007637 -1.5
+       vertex -0.134736001492 0.345883995295 1.5
+       vertex -0.148680999875 0.282467007637 1.5
+    endloop
+  endfacet
+  facet normal 0.90773249136 -0.4195494299 0
+    outer loop
+       vertex -0.107496999204 0.404817998409 -1.5
+       vertex -0.107496999204 0.404817998409 1.5
+       vertex -0.134736001492 0.345883995295 -1.5
+    endloop
+  endfacet
+  facet normal 0.90773249136 -0.4195494299 0
+    outer loop
+       vertex -0.134736001492 0.345883995295 -1.5
+       vertex -0.107496999204 0.404817998409 1.5
+       vertex -0.134736001492 0.345883995295 1.5
+    endloop
+  endfacet
+  facet normal 0.796375500831 -0.604802498073 0
+    outer loop
+       vertex -0.0682383030653 0.456512004137 -1.5
+       vertex -0.0682383030653 0.456512004137 1.5
+       vertex -0.107496999204 0.404817998409 -1.5
+    endloop
+  endfacet
+  facet normal -0.99415065992 0.108002154517 0
+    outer loop
+       vertex 0.442546993494 0.185445994139 -1.5
+       vertex 0.442546993494 0.185445994139 1.5
+       vertex 0.449559986591 0.25 -1.5
+    endloop
+  endfacet
+  facet normal -0.99415065992 0.108002154517 0
+    outer loop
+       vertex 0.449559986591 0.25 -1.5
+       vertex 0.442546993494 0.185445994139 1.5
+       vertex 0.449559986591 0.25 1.5
+    endloop
+  endfacet
+  facet normal -0.947745893024 0.319026209355 0
+    outer loop
+       vertex 0.421833008528 0.12391000241 -1.5
+       vertex 0.421833008528 0.12391000241 1.5
+       vertex 0.442546993494 0.185445994139 -1.5
+    endloop
+  endfacet
+  facet normal -0.947745893024 0.319026209355 0
+    outer loop
+       vertex 0.442546993494 0.185445994139 -1.5
+       vertex 0.421833008528 0.12391000241 1.5
+       vertex 0.442546993494 0.185445994139 1.5
+    endloop
+  endfacet
+  facet normal -0.857078113059 0.515186478971 0
+    outer loop
+       vertex 0.388388007879 0.0682699978352 -1.5
+       vertex 0.388388007879 0.0682699978352 1.5
+       vertex 0.421833008528 0.12391000241 -1.5
+    endloop
+  endfacet
+  facet normal -0.857078113059 0.515186478971 0
+    outer loop
+       vertex 0.421833008528 0.12391000241 -1.5
+       vertex 0.388388007879 0.0682699978352 1.5
+       vertex 0.421833008528 0.12391000241 1.5
+    endloop
+  endfacet
+  facet normal -0.726331758 0.687344293146 0
+    outer loop
+       vertex 0.343775987625 0.02112749964 -1.5
+       vertex 0.343775987625 0.02112749964 1.5
+       vertex 0.388388007879 0.0682699978352 -1.5
+    endloop
+  endfacet
+  facet normal -0.726331758 0.687344293146 0
+    outer loop
+       vertex 0.388388007879 0.0682699978352 -1.5
+       vertex 0.343775987625 0.02112749964 1.5
+       vertex 0.388388007879 0.0682699978352 1.5
+    endloop
+  endfacet
+  facet normal -0.561565427605 0.827432335916 0
+    outer loop
+       vertex 0.290082991123 -0.0153131000698 -1.5
+       vertex 0.290082991123 -0.0153131000698 1.5
+       vertex 0.343775987625 0.02112749964 -1.5
+    endloop
+  endfacet
+  facet normal -0.561565427605 0.827432335916 0
+    outer loop
+       vertex 0.343775987625 0.02112749964 -1.5
+       vertex 0.290082991123 -0.0153131000698 1.5
+       vertex 0.343775987625 0.02112749964 1.5
+    endloop
+  endfacet
+  facet normal -0.370449778906 0.928852497068 0
+    outer loop
+       vertex 0.229818999767 -0.0393478982151 -1.5
+       vertex 0.229818999767 -0.0393478982151 1.5
+       vertex 0.290082991123 -0.0153131000698 -1.5
+    endloop
+  endfacet
+  facet normal -0.370449778906 0.928852497068 0
+    outer loop
+       vertex 0.290082991123 -0.0153131000698 -1.5
+       vertex 0.229818999767 -0.0393478982151 1.5
+       vertex 0.290082991123 -0.0153131000698 1.5
+    endloop
+  endfacet
+  facet normal -0.161937308414 0.986801047904 0
+    outer loop
+       vertex 0.165802001953 -0.0498532988131 -1.5
+       vertex 0.165802001953 -0.0498532988131 1.5
+       vertex 0.229818999767 -0.0393478982151 -1.5
+    endloop
+  endfacet
+  facet normal -0.161937308414 0.986801047904 0
+    outer loop
+       vertex 0.229818999767 -0.0393478982151 -1.5
+       vertex 0.165802001953 -0.0498532988131 1.5
+       vertex 0.229818999767 -0.0393478982151 1.5
+    endloop
+  endfacet
+  facet normal 0.0541918998299 0.998530539339 -0
+    outer loop
+       vertex 0.101025998592 -0.0463377982378 -1.5
+       vertex 0.101025998592 -0.0463377982378 1.5
+       vertex 0.165802001953 -0.0498532988131 -1.5
+    endloop
+  endfacet
+  facet normal 0.0541918998299 0.998530539339 -0
+    outer loop
+       vertex 0.165802001953 -0.0498532988131 -1.5
+       vertex 0.101025998592 -0.0463377982378 1.5
+       vertex 0.165802001953 -0.0498532988131 1.5
+    endloop
+  endfacet
+  facet normal 0.267771842801 0.963482350748 -0
+    outer loop
+       vertex 0.0385189987719 -0.0289657991379 -1.5
+       vertex 0.0385189987719 -0.0289657991379 1.5
+       vertex 0.101025998592 -0.0463377982378 -1.5
+    endloop
+  endfacet
+  facet normal 0.267771842801 0.963482350748 -0
+    outer loop
+       vertex 0.101025998592 -0.0463377982378 -1.5
+       vertex 0.0385189987719 -0.0289657991379 1.5
+       vertex 0.101025998592 -0.0463377982378 1.5
+    endloop
+  endfacet
+  facet normal 0.468764725245 0.883323062286 -0
+    outer loop
+       vertex -0.0187957007438 0.00145015004091 -1.5
+       vertex -0.0187957007438 0.00145015004091 1.5
+       vertex 0.0385189987719 -0.0289657991379 -1.5
+    endloop
+  endfacet
+  facet normal -0.947745881345 -0.31902624405 0
+    outer loop
+       vertex 0.442546993494 0.314554005861 -1.5
+       vertex 0.442546993494 0.314554005861 1.5
+       vertex 0.421833008528 0.376089990139 -1.5
+    endloop
+  endfacet
+  facet normal -0.947745881345 -0.31902624405 0
+    outer loop
+       vertex 0.421833008528 0.376089990139 -1.5
+       vertex 0.442546993494 0.314554005861 1.5
+       vertex 0.421833008528 0.376089990139 1.5
+    endloop
+  endfacet
+  facet normal -0.99415065992 -0.108002154517 0
+    outer loop
+       vertex 0.449559986591 0.25 -1.5
+       vertex 0.449559986591 0.25 1.5
+       vertex 0.442546993494 0.314554005861 -1.5
+    endloop
+  endfacet
+  facet normal -0.99415065992 -0.108002154517 0
+    outer loop
+       vertex 0.442546993494 0.314554005861 -1.5
+       vertex 0.449559986591 0.25 1.5
+       vertex 0.442546993494 0.314554005861 1.5
+    endloop
+  endfacet
+  facet normal 0 -1 0
+    outer loop
+       vertex -0.300000011921 0 -1.39999997616
+       vertex -0.300000011921 0 1.5
+       vertex -0.699999988079 0 -1.39999997616
+    endloop
+  endfacet
+  facet normal 0 -1 0
+    outer loop
+       vertex -0.699999988079 0 -1.39999997616
+       vertex -0.300000011921 0 1.5
+       vertex -0.699999988079 0 1.5
+    endloop
+  endfacet
+  facet normal -1 0 0
+    outer loop
+       vertex -0.300000011921 -0.40000000596 -1.39999997616
+       vertex -0.300000011921 -0.40000000596 1.5
+       vertex -0.300000011921 0 -1.39999997616
+    endloop
+  endfacet
+  facet normal -1 0 0
+    outer loop
+       vertex -0.300000011921 0 -1.39999997616
+       vertex -0.300000011921 -0.40000000596 1.5
+       vertex -0.300000011921 0 1.5
+    endloop
+  endfacet
+  facet normal 0 1 0
+    outer loop
+       vertex -0.699999988079 -0.40000000596 -1.39999997616
+       vertex -0.699999988079 -0.40000000596 1.5
+       vertex -0.300000011921 -0.40000000596 -1.39999997616
+    endloop
+  endfacet
+  facet normal 0 1 -0
+    outer loop
+       vertex -0.300000011921 -0.40000000596 -1.39999997616
+       vertex -0.699999988079 -0.40000000596 1.5
+       vertex -0.300000011921 -0.40000000596 1.5
+    endloop
+  endfacet
+  facet normal 1 0 -0
+    outer loop
+       vertex -0.699999988079 0 -1.39999997616
+       vertex -0.699999988079 0 1.5
+       vertex -0.699999988079 -0.40000000596 -1.39999997616
+    endloop
+  endfacet
+  facet normal 1 0 0
+    outer loop
+       vertex -0.699999988079 -0.40000000596 -1.39999997616
+       vertex -0.699999988079 0 1.5
+       vertex -0.699999988079 -0.40000000596 1.5
+    endloop
+  endfacet
+  facet normal 0.796375500831 -0.604802498073 0
+    outer loop
+       vertex -0.107496999204 0.404817998409 -1.5
+       vertex -0.0682383030653 0.456512004137 1.5
+       vertex -0.107496999204 0.404817998409 1.5
+    endloop
+  endfacet
+  facet normal 0.647754558747 -0.761849087171 0
+    outer loop
+       vertex -0.018795799464 0.498549997807 -1.5
+       vertex -0.018795799464 0.498549997807 1.5
+       vertex -0.0682383030653 0.456512004137 -1.5
+    endloop
+  endfacet
+  facet normal 0.647754558747 -0.761849087171 0
+    outer loop
+       vertex -0.0682383030653 0.456512004137 -1.5
+       vertex -0.018795799464 0.498549997807 1.5
+       vertex -0.0682383030653 0.456512004137 1.5
+    endloop
+  endfacet
+  facet normal 0.468765490288 -0.88332265629 0
+    outer loop
+       vertex 0.0385188981891 0.528966009617 -1.5
+       vertex 0.0385188981891 0.528966009617 1.5
+       vertex -0.018795799464 0.498549997807 -1.5
+    endloop
+  endfacet
+  facet normal 0.468765490288 -0.88332265629 0
+    outer loop
+       vertex -0.018795799464 0.498549997807 -1.5
+       vertex 0.0385188981891 0.528966009617 1.5
+       vertex -0.018795799464 0.498549997807 1.5
+    endloop
+  endfacet
+  facet normal 0.267771629378 -0.963482410063 0
+    outer loop
+       vertex 0.101025998592 0.546338021755 -1.5
+       vertex 0.101025998592 0.546338021755 1.5
+       vertex 0.0385188981891 0.528966009617 -1.5
+    endloop
+  endfacet
+  facet normal 0.267771629378 -0.963482410063 0
+    outer loop
+       vertex 0.0385188981891 0.528966009617 -1.5
+       vertex 0.101025998592 0.546338021755 1.5
+       vertex 0.0385188981891 0.528966009617 1.5
+    endloop
+  endfacet
+  facet normal 0.0541842846189 -0.9985309526 0
+    outer loop
+       vertex 0.165802001953 0.549853026867 -1.5
+       vertex 0.165802001953 0.549853026867 1.5
+       vertex 0.101025998592 0.546338021755 -1.5
+    endloop
+  endfacet
+  facet normal 0.0541842846189 -0.9985309526 0
+    outer loop
+       vertex 0.101025998592 0.546338021755 -1.5
+       vertex 0.165802001953 0.549853026867 1.5
+       vertex 0.101025998592 0.546338021755 1.5
+    endloop
+  endfacet
+  facet normal -0.161931604744 -0.986801983878 0
+    outer loop
+       vertex 0.229818999767 0.539348006248 -1.5
+       vertex 0.229818999767 0.539348006248 1.5
+       vertex 0.165802001953 0.549853026867 -1.5
+    endloop
+  endfacet
+  facet normal -0.161931604744 -0.986801983878 0
+    outer loop
+       vertex 0.165802001953 0.549853026867 -1.5
+       vertex 0.229818999767 0.539348006248 1.5
+       vertex 0.165802001953 0.549853026867 1.5
+    endloop
+  endfacet
+  facet normal -0.370452156748 -0.928851548721 0
+    outer loop
+       vertex 0.290082991123 0.515313029289 -1.5
+       vertex 0.290082991123 0.515313029289 1.5
+       vertex 0.229818999767 0.539348006248 -1.5
+    endloop
+  endfacet
+  facet normal -0.370452156748 -0.928851548721 0
+    outer loop
+       vertex 0.229818999767 0.539348006248 -1.5
+       vertex 0.290082991123 0.515313029289 1.5
+       vertex 0.229818999767 0.539348006248 1.5
+    endloop
+  endfacet
+  facet normal -0.561559256785 -0.827436523921 0
+    outer loop
+       vertex 0.343775987625 0.47887301445 -1.5
+       vertex 0.343775987625 0.47887301445 1.5
+       vertex 0.290082991123 0.515313029289 -1.5
+    endloop
+  endfacet
+  facet normal -0.561559256785 -0.827436523921 0
+    outer loop
+       vertex 0.290082991123 0.515313029289 -1.5
+       vertex 0.343775987625 0.47887301445 1.5
+       vertex 0.290082991123 0.515313029289 1.5
+    endloop
+  endfacet
+  facet normal -0.726335500024 -0.687340338846 0
+    outer loop
+       vertex 0.388388007879 0.431730002165 -1.5
+       vertex 0.388388007879 0.431730002165 1.5
+       vertex 0.343775987625 0.47887301445 -1.5
+    endloop
+  endfacet
+  facet normal -0.726335500024 -0.687340338846 0
+    outer loop
+       vertex 0.343775987625 0.47887301445 -1.5
+       vertex 0.388388007879 0.431730002165 1.5
+       vertex 0.343775987625 0.47887301445 1.5
+    endloop
+  endfacet
+  facet normal -0.857078143521 -0.515186428295 0
+    outer loop
+       vertex 0.421833008528 0.376089990139 -1.5
+       vertex 0.421833008528 0.376089990139 1.5
+       vertex 0.388388007879 0.431730002165 -1.5
+    endloop
+  endfacet
+  facet normal -0.857078143521 -0.515186428295 0
+    outer loop
+       vertex 0.388388007879 0.431730002165 -1.5
+       vertex 0.421833008528 0.376089990139 1.5
+       vertex 0.388388007879 0.431730002165 1.5
+    endloop
+  endfacet
+  facet normal 1 -0 0
+    outer loop
+       vertex 1.29999995232 0 1.5
+       vertex 1.29999995232 0.40000000596 -1.5
+       vertex 1.29999995232 0.40000000596 1.5
+    endloop
+  endfacet
+  facet normal 0 -1 0
+    outer loop
+       vertex 0.899999976158 0 1.5
+       vertex 0.899999976158 0 -1.5
+       vertex 1.29999995232 0 -1.5
+    endloop
+  endfacet
+  facet normal 0 -1 0
+    outer loop
+       vertex 0.899999976158 0 1.5
+       vertex 1.29999995232 0 -1.5
+       vertex 1.29999995232 0 1.5
+    endloop
+  endfacet
+  facet normal 0.196116149188 -0.980580672881 0
+    outer loop
+       vertex 0.40000000596 -0.10000000149 1.5
+       vertex 0.40000000596 -0.10000000149 -1.5
+       vertex 0.899999976158 0 -1.5
+    endloop
+  endfacet
+  facet normal 0.196116149188 -0.980580672881 0
+    outer loop
+       vertex 0.40000000596 -0.10000000149 1.5
+       vertex 0.899999976158 0 -1.5
+       vertex 0.899999976158 0 1.5
+    endloop
+  endfacet
+  facet normal 1 0 0
+    outer loop
+       vertex 0.40000000596 -0.300000011921 1.5
+       vertex 0.40000000596 -0.300000011921 -1.5
+       vertex 0.40000000596 -0.10000000149 -1.5
+    endloop
+  endfacet
+  facet normal 1 -0 0
+    outer loop
+       vertex 0.40000000596 -0.300000011921 1.5
+       vertex 0.40000000596 -0.10000000149 -1.5
+       vertex 0.40000000596 -0.10000000149 1.5
+    endloop
+  endfacet
+  facet normal 0.242535608029 0.970142504397 0
+    outer loop
+       vertex 0.800000011921 -0.40000000596 1.5
+       vertex 0.800000011921 -0.40000000596 -1.5
+       vertex 0.40000000596 -0.300000011921 -1.5
+    endloop
+  endfacet
+  facet normal 0.242535608029 0.970142504397 0
+    outer loop
+       vertex 0.800000011921 -0.40000000596 1.5
+       vertex 0.40000000596 -0.300000011921 -1.5
+       vertex 0.40000000596 -0.300000011921 1.5
+    endloop
+  endfacet
+  facet normal 0.242535591022 0.970142508649 0
+    outer loop
+       vertex 1.20000004768 -0.5 1.5
+       vertex 1.20000004768 -0.5 -1.5
+       vertex 0.800000011921 -0.40000000596 -1.5
+    endloop
+  endfacet
+  facet normal 0.242535591022 0.970142508649 0
+    outer loop
+       vertex 1.20000004768 -0.5 1.5
+       vertex 0.800000011921 -0.40000000596 -1.5
+       vertex 0.800000011921 -0.40000000596 1.5
+    endloop
+  endfacet
+  facet normal 0.980580666699 -0.196116180098 0
+    outer loop
+       vertex 1.10000002384 -1 1.5
+       vertex 1.10000002384 -1 -1.5
+       vertex 1.20000004768 -0.5 -1.5
+    endloop
+  endfacet
+  facet normal 0.980580666699 -0.196116180098 0
+    outer loop
+       vertex 1.10000002384 -1 1.5
+       vertex 1.20000004768 -0.5 -1.5
+       vertex 1.20000004768 -0.5 1.5
+    endloop
+  endfacet
+  facet normal 0.124034761887 -0.992277873301 0
+    outer loop
+       vertex 0.300000011921 -1.10000002384 1.5
+       vertex 0.300000011921 -1.10000002384 -1.5
+       vertex 1.10000002384 -1 -1.5
+    endloop
+  endfacet
+  facet normal 0.124034761887 -0.992277873301 0
+    outer loop
+       vertex 0.300000011921 -1.10000002384 1.5
+       vertex 1.10000002384 -1 -1.5
+       vertex 1.10000002384 -1 1.5
+    endloop
+  endfacet
+  facet normal -0.894427244312 0.447213488876 0
+    outer loop
+       vertex 0.40000000596 -0.899999976158 1.5
+       vertex 0.40000000596 -0.899999976158 -1.5
+       vertex 0.300000011921 -1.10000002384 -1.5
+    endloop
+  endfacet
+  facet normal 0.707106781187 0.707106781187 0
+    outer loop
+       vertex -0.600000023842 0.699999988079 1.5
+       vertex -0.600000023842 0.699999988079 -1.5
+       vertex -0.800000011921 0.899999976158 -1.5
+    endloop
+  endfacet
+  facet normal 0.707106781187 0.707106781187 0
+    outer loop
+       vertex -0.600000023842 0.699999988079 1.5
+       vertex -0.800000011921 0.899999976158 -1.5
+       vertex -0.800000011921 0.899999976158 1.5
+    endloop
+  endfacet
+  facet normal 0 1 0
+    outer loop
+       vertex -0.40000000596 0.699999988079 1.5
+       vertex -0.40000000596 0.699999988079 -1.5
+       vertex -0.600000023842 0.699999988079 -1.5
+    endloop
+  endfacet
+  facet normal 0 1 0
+    outer loop
+       vertex -0.40000000596 0.699999988079 1.5
+       vertex -0.600000023842 0.699999988079 -1.5
+       vertex -0.600000023842 0.699999988079 1.5
+    endloop
+  endfacet
+  facet normal -0.948683307475 0.316227737744 0
+    outer loop
+       vertex -0.300000011921 1 1.5
+       vertex -0.300000011921 1 -1.5
+       vertex -0.40000000596 0.699999988079 -1.5
+    endloop
+  endfacet
+  facet normal -0.948683307475 0.316227737744 0
+    outer loop
+       vertex -0.300000011921 1 1.5
+       vertex -0.40000000596 0.699999988079 -1.5
+       vertex -0.40000000596 0.699999988079 1.5
+    endloop
+  endfacet
+  facet normal -0.316227822563 0.948683279202 0
+    outer loop
+       vertex 0 1.10000002384 1.5
+       vertex 0 1.10000002384 -1.5
+       vertex -0.300000011921 1 -1.5
+    endloop
+  endfacet
+  facet normal -0.316227822563 0.948683279202 0
+    outer loop
+       vertex 0 1.10000002384 1.5
+       vertex -0.300000011921 1 -1.5
+       vertex -0.300000011921 1 1.5
+    endloop
+  endfacet
+  facet normal 0.447213675468 0.894427151016 0
+    outer loop
+       vertex 0.20000000298 1 1.5
+       vertex 0.20000000298 1 -1.5
+       vertex 0 1.10000002384 -1.5
+    endloop
+  endfacet
+  facet normal 0.447213675468 0.894427151016 0
+    outer loop
+       vertex 0.20000000298 1 1.5
+       vertex 0 1.10000002384 -1.5
+       vertex 0 1.10000002384 1.5
+    endloop
+  endfacet
+  facet normal 0.554700177151 0.832050307054 0
+    outer loop
+       vertex 0.5 0.800000011921 1.5
+       vertex 0.5 0.800000011921 -1.5
+       vertex 0.20000000298 1 -1.5
+    endloop
+  endfacet
+  facet normal 0.554700177151 0.832050307054 0
+    outer loop
+       vertex 0.5 0.800000011921 1.5
+       vertex 0.20000000298 1 -1.5
+       vertex 0.20000000298 1 1.5
+    endloop
+  endfacet
+  facet normal -0.707106781187 0.707106781187 0
+    outer loop
+       vertex 0.699999988079 1 1.5
+       vertex 0.699999988079 1 -1.5
+       vertex 0.5 0.800000011921 -1.5
+    endloop
+  endfacet
+  facet normal -0.707106781187 0.707106781187 0
+    outer loop
+       vertex 0.699999988079 1 1.5
+       vertex 0.5 0.800000011921 -1.5
+       vertex 0.5 0.800000011921 1.5
+    endloop
+  endfacet
+  facet normal 0.554700158076 0.832050319771 0
+    outer loop
+       vertex 1 0.800000011921 1.5
+       vertex 1 0.800000011921 -1.5
+       vertex 0.699999988079 1 -1.5
+    endloop
+  endfacet
+  facet normal 0.554700158076 0.832050319771 0
+    outer loop
+       vertex 1 0.800000011921 1.5
+       vertex 0.699999988079 1 -1.5
+       vertex 0.699999988079 1 1.5
+    endloop
+  endfacet
+  facet normal 0.800000050068 0.599999933243 0
+    outer loop
+       vertex 1.29999995232 0.40000000596 1.5
+       vertex 1.29999995232 0.40000000596 -1.5
+       vertex 1 0.800000011921 -1.5
+    endloop
+  endfacet
+  facet normal 0.800000050068 0.599999933243 0
+    outer loop
+       vertex 1.29999995232 0.40000000596 1.5
+       vertex 1 0.800000011921 -1.5
+       vertex 1 0.800000011921 1.5
+    endloop
+  endfacet
+  facet normal 1 0 0
+    outer loop
+       vertex 1.29999995232 0 1.5
+       vertex 1.29999995232 0 -1.5
+       vertex 1.29999995232 0.40000000596 -1.5
+    endloop
+  endfacet
+  facet normal -0.707106702161 -0.707106860212 -0
+    outer loop
+       vertex -1.20000004768 0.10000000149 1.5
+       vertex -1.20000004768 0.10000000149 -1.5
+       vertex -1.10000002384 0 -1.5
+    endloop
+  endfacet
+  facet normal -0.707106702161 -0.707106860212 0
+    outer loop
+       vertex -1.20000004768 0.10000000149 1.5
+       vertex -1.10000002384 0 -1.5
+       vertex -1.10000002384 0 1.5
+    endloop
+  endfacet
+  facet normal -0.894427370928 -0.447213235644 -0
+    outer loop
+       vertex -1.29999995232 0.300000011921 1.5
+       vertex -1.29999995232 0.300000011921 -1.5
+       vertex -1.20000004768 0.10000000149 -1.5
+    endloop
+  endfacet
+  facet normal -0.894427370928 -0.447213235644 0
+    outer loop
+       vertex -1.29999995232 0.300000011921 1.5
+       vertex -1.20000004768 0.10000000149 -1.5
+       vertex -1.20000004768 0.10000000149 1.5
+    endloop
+  endfacet
+  facet normal -0.894427350936 0.447213275628 0
+    outer loop
+       vertex -1.20000004768 0.5 1.5
+       vertex -1.20000004768 0.5 -1.5
+       vertex -1.29999995232 0.300000011921 -1.5
+    endloop
+  endfacet
+  facet normal -0.894427350936 0.447213275628 0
+    outer loop
+       vertex -1.20000004768 0.5 1.5
+       vertex -1.29999995232 0.300000011921 -1.5
+       vertex -1.29999995232 0.300000011921 1.5
+    endloop
+  endfacet
+  facet normal -0.894427350936 -0.447213275628 -0
+    outer loop
+       vertex -1.29999995232 0.699999988079 1.5
+       vertex -1.29999995232 0.699999988079 -1.5
+       vertex -1.20000004768 0.5 -1.5
+    endloop
+  endfacet
+  facet normal -0.894427350936 -0.447213275628 0
+    outer loop
+       vertex -1.29999995232 0.699999988079 1.5
+       vertex -1.20000004768 0.5 -1.5
+       vertex -1.20000004768 0.5 1.5
+    endloop
+  endfacet
+  facet normal -1 0 -0
+    outer loop
+       vertex -1.29999995232 0.800000011921 1.5
+       vertex -1.29999995232 0.800000011921 -1.5
+       vertex -1.29999995232 0.699999988079 -1.5
+    endloop
+  endfacet
+  facet normal -1 -0 0
+    outer loop
+       vertex -1.29999995232 0.800000011921 1.5
+       vertex -1.29999995232 0.699999988079 -1.5
+       vertex -1.29999995232 0.699999988079 1.5
+    endloop
+  endfacet
+  facet normal 0.447213808748 0.894427084376 0
+    outer loop
+       vertex -1.10000002384 0.699999988079 1.5
+       vertex -1.10000002384 0.699999988079 -1.5
+       vertex -1.29999995232 0.800000011921 -1.5
+    endloop
+  endfacet
+  facet normal 0.447213808748 0.894427084376 0
+    outer loop
+       vertex -1.10000002384 0.699999988079 1.5
+       vertex -1.29999995232 0.800000011921 -1.5
+       vertex -1.29999995232 0.800000011921 1.5
+    endloop
+  endfacet
+  facet normal -0.4472135955 0.894427191 0
+    outer loop
+       vertex -0.899999976158 0.800000011921 1.5
+       vertex -0.899999976158 0.800000011921 -1.5
+       vertex -1.10000002384 0.699999988079 -1.5
+    endloop
+  endfacet
+  facet normal -0.4472135955 0.894427191 0
+    outer loop
+       vertex -0.899999976158 0.800000011921 1.5
+       vertex -1.10000002384 0.699999988079 -1.5
+       vertex -1.10000002384 0.699999988079 1.5
+    endloop
+  endfacet
+  facet normal -0.707106781187 0.707106781187 0
+    outer loop
+       vertex -0.800000011921 0.899999976158 1.5
+       vertex -0.800000011921 0.899999976158 -1.5
+       vertex -0.899999976158 0.800000011921 -1.5
+    endloop
+  endfacet
+  facet normal -0.707106781187 0.707106781187 0
+    outer loop
+       vertex -0.800000011921 0.899999976158 1.5
+       vertex -0.899999976158 0.800000011921 -1.5
+       vertex -0.899999976158 0.800000011921 1.5
+    endloop
+  endfacet
+  facet normal -0.894427244312 0.447213488876 0
+    outer loop
+       vertex 0.40000000596 -0.899999976158 1.5
+       vertex 0.300000011921 -1.10000002384 -1.5
+       vertex 0.300000011921 -1.10000002384 1.5
+    endloop
+  endfacet
+  facet normal -0.316227744812 -0.948683305119 -0
+    outer loop
+       vertex -0.20000000298 -0.699999988079 1.5
+       vertex -0.20000000298 -0.699999988079 -1.5
+       vertex 0.40000000596 -0.899999976158 -1.5
+    endloop
+  endfacet
+  facet normal -0.316227744812 -0.948683305119 0
+    outer loop
+       vertex -0.20000000298 -0.699999988079 1.5
+       vertex 0.40000000596 -0.899999976158 -1.5
+       vertex 0.40000000596 -0.899999976158 1.5
+    endloop
+  endfacet
+  facet normal 0.707106754845 -0.707106807528 0
+    outer loop
+       vertex -0.40000000596 -0.899999976158 1.5
+       vertex -0.40000000596 -0.899999976158 -1.5
+       vertex -0.20000000298 -0.699999988079 -1.5
+    endloop
+  endfacet
+  facet normal 0.707106754845 -0.707106807528 0
+    outer loop
+       vertex -0.40000000596 -0.899999976158 1.5
+       vertex -0.20000000298 -0.699999988079 -1.5
+       vertex -0.20000000298 -0.699999988079 1.5
+    endloop
+  endfacet
+  facet normal -0.196116078939 -0.980580686931 -0
+    outer loop
+       vertex -0.899999976158 -0.800000011921 1.5
+       vertex -0.899999976158 -0.800000011921 -1.5
+       vertex -0.40000000596 -0.899999976158 -1.5
+    endloop
+  endfacet
+  facet normal -0.196116078939 -0.980580686931 0
+    outer loop
+       vertex -0.899999976158 -0.800000011921 1.5
+       vertex -0.40000000596 -0.899999976158 -1.5
+       vertex -0.40000000596 -0.899999976158 1.5
+    endloop
+  endfacet
+  facet normal -0.316227766017 -0.948683298051 -0
+    outer loop
+       vertex -1.20000004768 -0.699999988079 1.5
+       vertex -1.20000004768 -0.699999988079 -1.5
+       vertex -0.899999976158 -0.800000011921 -1.5
+    endloop
+  endfacet
+  facet normal -0.316227766017 -0.948683298051 0
+    outer loop
+       vertex -1.20000004768 -0.699999988079 1.5
+       vertex -0.899999976158 -0.800000011921 -1.5
+       vertex -0.899999976158 -0.800000011921 1.5
+    endloop
+  endfacet
+  facet normal -0.948683382869 -0.31622751156 -0
+    outer loop
+       vertex -1.29999995232 -0.40000000596 1.5
+       vertex -1.29999995232 -0.40000000596 -1.5
+       vertex -1.20000004768 -0.699999988079 -1.5
+    endloop
+  endfacet
+  facet normal -0.948683382869 -0.31622751156 0
+    outer loop
+       vertex -1.29999995232 -0.40000000596 1.5
+       vertex -1.20000004768 -0.699999988079 -1.5
+       vertex -1.20000004768 -0.699999988079 1.5
+    endloop
+  endfacet
+  facet normal -0.707106912895 0.707106649478 0
+    outer loop
+       vertex -1.10000002384 -0.20000000298 1.5
+       vertex -1.10000002384 -0.20000000298 -1.5
+       vertex -1.29999995232 -0.40000000596 -1.5
+    endloop
+  endfacet
+  facet normal -0.707106912895 0.707106649478 0
+    outer loop
+       vertex -1.10000002384 -0.20000000298 1.5
+       vertex -1.29999995232 -0.40000000596 -1.5
+       vertex -1.29999995232 -0.40000000596 1.5
+    endloop
+  endfacet
+  facet normal -0.447213515532 0.894427230984 0
+    outer loop
+       vertex -0.899999976158 -0.10000000149 1.5
+       vertex -0.899999976158 -0.10000000149 -1.5
+       vertex -1.10000002384 -0.20000000298 -1.5
+    endloop
+  endfacet
+  facet normal -0.447213515532 0.894427230984 0
+    outer loop
+       vertex -0.899999976158 -0.10000000149 1.5
+       vertex -1.10000002384 -0.20000000298 -1.5
+       vertex -1.10000002384 -0.20000000298 1.5
+    endloop
+  endfacet
+  facet normal -1 0 -0
+    outer loop
+       vertex -0.899999976158 0.20000000298 1.5
+       vertex -0.899999976158 0.20000000298 -1.5
+       vertex -0.899999976158 -0.10000000149 -1.5
+    endloop
+  endfacet
+  facet normal -1 -0 0
+    outer loop
+       vertex -0.899999976158 0.20000000298 1.5
+       vertex -0.899999976158 -0.10000000149 -1.5
+       vertex -0.899999976158 -0.10000000149 1.5
+    endloop
+  endfacet
+  facet normal 0.707106702161 -0.707106860212 0
+    outer loop
+       vertex -1.10000002384 0 1.5
+       vertex -1.10000002384 0 -1.5
+       vertex -0.899999976158 0.20000000298 -1.5
+    endloop
+  endfacet
+  facet normal 0.707106702161 -0.707106860212 0
+    outer loop
+       vertex -1.10000002384 0 1.5
+       vertex -0.899999976158 0.20000000298 -1.5
+       vertex -0.899999976158 0.20000000298 1.5
+    endloop
+  endfacet
+endsolid jagged
diff --git a/tutorials/mesh/cv2DMesh/jaggedBoundary/system/controlDict b/tutorials/mesh/cv2DMesh/jaggedBoundary/system/controlDict
new file mode 100644
index 0000000000000000000000000000000000000000..97f40d27531af3a6c5c595a81aa9ef2e096d932b
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/jaggedBoundary/system/controlDict
@@ -0,0 +1,47 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      controlDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+startFrom       startTime;
+
+startTime       0;
+
+stopAt          endTime;
+
+endTime         100;
+
+deltaT          1;
+
+writeControl    timeStep;
+
+writeInterval   1;
+
+purgeWrite      0;
+
+writeFormat     ascii;
+
+writePrecision  12;
+
+writeCompression off;
+
+timeFormat      general;
+
+timePrecision   6;
+
+runTimeModifiable true;
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cv2DMesh/jaggedBoundary/system/cv2DMeshDict b/tutorials/mesh/cv2DMesh/jaggedBoundary/system/cv2DMeshDict
new file mode 100644
index 0000000000000000000000000000000000000000..76d790c4c22db911749d7bcd2441937e2ffde24c
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/jaggedBoundary/system/cv2DMeshDict
@@ -0,0 +1,147 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      cv2DMeshDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+geometry
+{
+    jaggedBoundary.stl
+    {
+        name jaggedBoundary;
+        type closedTriSurfaceMesh;
+    }
+}
+
+surfaceConformation
+{
+    // The z-coordinate of the plane is taken from here.
+    locationInMesh                  (-0.6 0.3 0.0);
+
+    pointPairDistanceCoeff          0.001;
+
+    // If area of a dual cell is less than the square of this, do not refine.
+    minEdgeLenCoeff                 0.001;
+
+    // How much cells are allowed to stick out of the surfaces before
+    // points are inserted onto the boundary
+    maxNotchLenCoeff                1;
+
+    minNearPointDistCoeff           0.001;
+
+    maxQuadAngle                    125;
+
+    // Insert near-boundary point mirror or point-pairs
+    insertSurfaceNearestPointPairs  yes;
+
+    // Mirror near-boundary points rather than insert point-pairs
+    mirrorPoints                    no;
+
+    // Insert point-pairs vor dual-cell vertices very near the surface
+    insertSurfaceNearPointPairs     yes;
+
+    // Maximum number of iterations used in boundaryConform.
+    maxBoundaryConformingIter       5;
+
+    geometryToConformTo
+    {
+        jaggedBoundary
+        {
+            featureMethod           extendedFeatureEdgeMesh;
+            extendedFeatureEdgeMesh "jaggedBoundary.extendedFeatureEdgeMesh";
+        }
+    }
+
+    additionalFeatures
+    {
+    }
+
+    // Choose if to randomise the initial grid created by insertGrid.
+    randomiseInitialGrid yes;
+
+    // Perturbation fraction, 1 = cell-size.
+    randomPerturbation   0.1;
+}
+
+
+motionControl
+{
+    // This is a tolerance for determining whether to deal with surface
+    // protrusions or not.
+    minCellSize         0.04;
+
+    // Assign a priority to all requests for cell sizes, the highest overrules.
+    defaultPriority     0;
+
+    shapeControlFunctions
+    {
+        jaggedBoundary
+        {
+            type                    searchableSurfaceControl;
+            priority                1;
+            mode                    inside;
+
+            cellSizeFunction        surfaceOffsetLinearDistance;
+            surfaceOffsetLinearDistanceCoeffs
+            {
+                distanceCellSize    $minCellSize;
+                totalDistance       0.2;
+                surfaceOffset       0.05;
+            }
+
+            surfaceCellSizeFunction uniformValue;
+            uniformValueCoeffs
+            {
+                surfaceCellSize     0.005;
+            }
+        }
+    }
+
+    relaxationModel     adaptiveLinear;
+
+    adaptiveLinearCoeffs
+    {
+        relaxationStart 0.5;
+        relaxationEnd   0.0;
+    }
+
+    objOutput           no;
+
+    meshedSurfaceOutput yes;
+
+    // Near-wall region where cells are aligned with the wall specified as a
+    // number of cell layers
+    nearWallAlignedDist 3;
+}
+
+
+shortEdgeFilter
+{
+    // Factor to multiply the average of a face's edge lengths by.
+    // If an edge of that face is smaller than that value then delete it.
+    shortEdgeFilterFactor        0.2;
+
+    // Weighting for the lengths of edges that are attached to the boundaries.
+    // Used when calculating the length of an edge. Default 2.0.
+    edgeAttachedToBoundaryFactor 2.0;
+}
+
+
+extrusion
+{
+    extrude     off;
+    #include    "extrude2DMeshDict";
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cv2DMesh/jaggedBoundary/system/extrude2DMeshDict b/tutorials/mesh/cv2DMesh/jaggedBoundary/system/extrude2DMeshDict
new file mode 100644
index 0000000000000000000000000000000000000000..b825f1608b358adf65d9bcdf3a1ed23ed5cb0b3b
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/jaggedBoundary/system/extrude2DMeshDict
@@ -0,0 +1,42 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      extrude2DMeshDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+extrudeModel        linearDirection;
+
+patchInfo
+{}
+
+patchType           empty;
+
+nLayers             1;
+
+expansionRatio      1.0;
+
+linearDirectionCoeffs
+{
+    direction       (0 0 1);
+    thickness       0.1;
+}
+
+wedgeCoeffs
+{
+    axisPt          (0 0 0);
+    axis            (1 0 0);
+    angle           10;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cv2DMesh/jaggedBoundary/system/fvSchemes b/tutorials/mesh/cv2DMesh/jaggedBoundary/system/fvSchemes
new file mode 100644
index 0000000000000000000000000000000000000000..2e5c55b28ba64ca0cfc1a7c714148109cd736563
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/jaggedBoundary/system/fvSchemes
@@ -0,0 +1,54 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      fvSchemes;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+ddtSchemes
+{
+    default         none;
+}
+
+gradSchemes
+{
+    default         none;
+}
+
+divSchemes
+{
+    default         none;
+}
+
+laplacianSchemes
+{
+    default         none;
+}
+
+interpolationSchemes
+{
+    default         none;
+}
+
+snGradSchemes
+{
+    default         none;
+}
+
+fluxRequired
+{
+    default         no;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cv2DMesh/jaggedBoundary/system/fvSolution b/tutorials/mesh/cv2DMesh/jaggedBoundary/system/fvSolution
new file mode 100644
index 0000000000000000000000000000000000000000..8ce8c60878cf19b4d62a2c8cc71c3b465f3829ce
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/jaggedBoundary/system/fvSolution
@@ -0,0 +1,22 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      fvSolution;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+solvers
+{}
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cv2DMesh/jaggedBoundary/system/surfaceFeatureExtractDict b/tutorials/mesh/cv2DMesh/jaggedBoundary/system/surfaceFeatureExtractDict
new file mode 100644
index 0000000000000000000000000000000000000000..7ff6c35a0b093a2cd0a15ddbea69ee27a8f25fd6
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/jaggedBoundary/system/surfaceFeatureExtractDict
@@ -0,0 +1,52 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      surfaceFeatureExtractDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+jaggedBoundary.stl
+{
+    extractionMethod    extractFromSurface;
+
+    extractFromSurfaceCoeffs
+    {
+        // Mark edges whose adjacent surface normals are at an angle less
+        // than includedAngle as features
+        // - 0  : selects no edges
+        // - 180: selects all edges
+        includedAngle   175;
+    }
+
+    subsetFeatures
+    {
+        // Use a plane to select feature edges
+        // (normal)(basePoint)
+        // Keep only edges that intersect the plane will be included
+        plane               (0 0 1)(-0.6 0.3 0.0);
+
+        // Keep nonManifold edges (edges with >2 connected faces where
+        // the faces form more than two different normal planes)
+        nonManifoldEdges    no;
+
+        // Keep open edges (edges with 1 connected face)
+        openEdges           no;
+    }
+
+    // Write options
+
+        // Write features to obj format for postprocessing
+        writeObj                no;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cv2DMesh/square/Allclean b/tutorials/mesh/cv2DMesh/square/Allclean
new file mode 100755
index 0000000000000000000000000000000000000000..f30f73d875c750ccf27f825b52486c7c4ed4ae17
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/square/Allclean
@@ -0,0 +1,16 @@
+#!/bin/sh
+cd ${0%/*} || exit 1    # run from this directory
+
+# Source tutorial run functions
+. $WM_PROJECT_DIR/bin/tools/CleanFunctions
+
+rm -rf constant/extendedFeatureEdgeMesh > /dev/null 2>&1
+rm -rf constant/triSurface/unit_cube.eMesh > /dev/null 2>&1
+rm -rf constant/polyMesh > /dev/null 2>&1
+
+rm -rf MeshedSurface*.obj > /dev/null 2>&1
+
+cleanCase
+
+
+# ----------------------------------------------------------------- end-of-file
diff --git a/tutorials/mesh/cv2DMesh/square/Allrun b/tutorials/mesh/cv2DMesh/square/Allrun
new file mode 100755
index 0000000000000000000000000000000000000000..469561f159d2c1fcda71722e6ddbe3b80e5cf274
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/square/Allrun
@@ -0,0 +1,13 @@
+#!/bin/sh
+cd ${0%/*} || exit 1    # run from this directory
+
+# Source tutorial run functions
+. $WM_PROJECT_DIR/bin/tools/RunFunctions
+
+runApplication surfaceFeatureExtract
+runApplication cv2DMesh -overwrite
+runApplication extrude2DMesh -overwrite polyMesh2D
+runApplication checkMesh -allGeometry -allTopology -constant -noZero
+
+
+# ----------------------------------------------------------------- end-of-file
diff --git a/tutorials/mesh/cv2DMesh/square/constant/triSurface/unit_cube.stl b/tutorials/mesh/cv2DMesh/square/constant/triSurface/unit_cube.stl
new file mode 100644
index 0000000000000000000000000000000000000000..4b213c284df4991591dac5e75a57e081817d7d39
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/square/constant/triSurface/unit_cube.stl
@@ -0,0 +1,88 @@
+solid inlet
+  facet normal 1 0 0
+    outer loop
+       vertex 1 1 0.5
+       vertex 1 0 0.5
+       vertex 1 0 -0.5
+    endloop
+  endfacet
+  facet normal 1 0 -0
+    outer loop
+       vertex 1 1 -0.5
+       vertex 1 1 0.5
+       vertex 1 0 -0.5
+    endloop
+  endfacet
+endsolid inlet
+solid cube.tri
+  facet normal -1 0 0
+    outer loop
+       vertex 0 0 -0.5
+       vertex 0 0 0.5
+       vertex 0 1 0.5
+    endloop
+  endfacet
+  facet normal -1 0 0
+    outer loop
+       vertex 0 1 -0.5
+       vertex 0 0 -0.5
+       vertex 0 1 0.5
+    endloop
+  endfacet
+  facet normal 0 1 0
+    outer loop
+       vertex 1 1 0.5
+       vertex 1 1 -0.5
+       vertex 0 1 -0.5
+    endloop
+  endfacet
+  facet normal -0 1 0
+    outer loop
+       vertex 0 1 0.5
+       vertex 1 1 0.5
+       vertex 0 1 -0.5
+    endloop
+  endfacet
+  facet normal 0 -1 0
+    outer loop
+       vertex 0 0 -0.5
+       vertex 1 0 -0.5
+       vertex 1 0 0.5
+    endloop
+  endfacet
+  facet normal 0 -1 0
+    outer loop
+       vertex 0 0 0.5
+       vertex 0 0 -0.5
+       vertex 1 0 0.5
+    endloop
+  endfacet
+  facet normal 0 0 1
+    outer loop
+       vertex 1 1 0.5
+       vertex 0 1 0.5
+       vertex 0 0 0.5
+    endloop
+  endfacet
+  facet normal 0 -0 1
+    outer loop
+       vertex 1 0 0.5
+       vertex 1 1 0.5
+       vertex 0 0 0.5
+    endloop
+  endfacet
+  facet normal 0 0 -1
+    outer loop
+       vertex 0 0 -0.5
+       vertex 0 1 -0.5
+       vertex 1 1 -0.5
+    endloop
+  endfacet
+  facet normal 0 0 -1
+    outer loop
+       vertex 1 0 -0.5
+       vertex 0 0 -0.5
+       vertex 1 1 -0.5
+    endloop
+  endfacet
+endsolid cube.tri
diff --git a/tutorials/mesh/cv2DMesh/square/system/controlDict b/tutorials/mesh/cv2DMesh/square/system/controlDict
new file mode 100644
index 0000000000000000000000000000000000000000..ccd8cd716ac1fb207115871ecfeeecabb71848fc
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/square/system/controlDict
@@ -0,0 +1,52 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      controlDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+startFrom       startTime;
+
+startTime       0;
+
+stopAt          endTime;
+
+endTime         100;
+
+deltaT          1;
+
+writeControl    timeStep;
+
+writeInterval   1;
+
+purgeWrite      0;
+
+writeFormat     ascii;
+
+writePrecision  12;
+
+writeCompression off;
+
+timeFormat      general;
+
+timePrecision   6;
+
+runTimeModifiable true;
+
+DebugSwitches
+{
+    shortEdgeFilter2D    0;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cv2DMesh/square/system/cv2DMeshDict b/tutorials/mesh/cv2DMesh/square/system/cv2DMeshDict
new file mode 100644
index 0000000000000000000000000000000000000000..160a2e7518662153808e1da1d5417d43fb7f2c92
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/square/system/cv2DMeshDict
@@ -0,0 +1,165 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      DMeshDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+geometry
+{
+    unit_cube.stl
+    {
+        name cube;
+        type triSurfaceMesh;
+    }
+
+    refinementBox
+    {
+        type searchableBox;
+        min (0.25 0.25 -1000);
+        max (0.75 0.75 1000);
+    }
+}
+
+
+surfaceConformation
+{
+    // The z-coordinate of the plane is taken from here.
+    locationInMesh                  (0 0 0);
+
+    pointPairDistanceCoeff          0.005;
+
+    minEdgeLenCoeff                 0.005;
+
+    maxNotchLenCoeff                0.003;
+
+    minNearPointDistCoeff           0.0025;
+
+    maxQuadAngle                    125;
+
+    // Insert near-boundary point mirror or point-pairs
+    insertSurfaceNearestPointPairs  yes;
+
+    // Mirror near-boundary points rather than insert point-pairs
+    mirrorPoints                    no;
+
+    // Insert point-pairs vor dual-cell vertices very near the surface
+    insertSurfaceNearPointPairs     yes;
+
+    // Maximum number of iterations used in boundaryConform.
+    maxBoundaryConformingIter       5;
+
+    geometryToConformTo
+    {
+        cube
+        {
+            featureMethod           extendedFeatureEdgeMesh;
+            extendedFeatureEdgeMesh "unit_cube.extendedFeatureEdgeMesh";
+        }
+    }
+
+    additionalFeatures
+    {}
+
+    // Choose if to randomise the initial grid created by insertGrid.
+    randomiseInitialGrid yes;
+
+    // Perturbation fraction, 1 = cell-size.
+    randomPerturbation   0.1;
+}
+
+
+motionControl
+{
+    minCellSize         0.04;
+
+    // Assign a priority to all requests for cell sizes, the highest overrules.
+    defaultPriority     0;
+
+    shapeControlFunctions
+    {
+        cube
+        {
+            type                    searchableSurfaceControl;
+            priority                1;
+            mode                    bothSides;
+            cellSizeFunction        linearDistance;
+            linearDistanceCoeffs
+            {
+                distanceCellSize    $minCellSize;
+                distance            #calc"5*$minCellSize";
+            }
+            surfaceCellSizeFunction uniformValue;
+            uniformValueCoeffs
+            {
+                surfaceCellSize     #calc"0.05*$minCellSize";
+            }
+        }
+
+        refinementBox
+        {
+            type                    searchableSurfaceControl;
+            priority                1;
+            mode                    bothSides;
+            cellSizeFunction        linearDistance;
+            linearDistanceCoeffs
+            {
+                distanceCellSize    $minCellSize;
+                distance            #calc"5*$minCellSize";
+            }
+            surfaceCellSizeFunction uniformValue;
+            uniformValueCoeffs
+            {
+                surfaceCellSize     #calc"0.05*$minCellSize";
+            }
+        }
+    }
+
+    relaxationModel             adaptiveLinear;
+
+    adaptiveLinearCoeffs
+    {
+        relaxationStart         0.5;
+        relaxationEnd           0.0;
+    }
+
+    objOutput                   no;
+
+    meshedSurfaceOutput         yes;
+
+    // Near-wall region where cells are aligned with the wall specified as a
+    // number of cell layers
+    nearWallAlignedDist         3;
+}
+
+
+shortEdgeFilter
+{
+    // Factor to multiply the average of a face's edge lengths by.
+    // If an edge of that face is smaller than that value then delete it.
+    shortEdgeFilterFactor           0.25;
+
+    // Weighting for the lengths of edges that are attached to the boundaries.
+    // Used when calculating the length of an edge. Default 2.0.
+    edgeAttachedToBoundaryFactor    2.0;
+}
+
+
+extrusion
+{
+    extrude     off;
+
+    #include    "extrude2DMeshDict";
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cv2DMesh/square/system/extrude2DMeshDict b/tutorials/mesh/cv2DMesh/square/system/extrude2DMeshDict
new file mode 100644
index 0000000000000000000000000000000000000000..b7116172e31faf4704909c60b88f4d0cd8217a3f
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/square/system/extrude2DMeshDict
@@ -0,0 +1,42 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      extrude2DMeshDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+extrudeModel        wedge;
+
+patchInfo
+{}
+
+patchType           wedge;
+
+nLayers             1;
+
+expansionRatio      1.0;
+
+linearDirectionCoeffs
+{
+    direction       (0 0 1);
+    thickness       0.1;
+}
+
+wedgeCoeffs
+{
+    axisPt          (0 0 0);
+    axis            (1 0 0);
+    angle           10;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cv2DMesh/square/system/fvSchemes b/tutorials/mesh/cv2DMesh/square/system/fvSchemes
new file mode 100644
index 0000000000000000000000000000000000000000..2e5c55b28ba64ca0cfc1a7c714148109cd736563
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/square/system/fvSchemes
@@ -0,0 +1,54 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      fvSchemes;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+ddtSchemes
+{
+    default         none;
+}
+
+gradSchemes
+{
+    default         none;
+}
+
+divSchemes
+{
+    default         none;
+}
+
+laplacianSchemes
+{
+    default         none;
+}
+
+interpolationSchemes
+{
+    default         none;
+}
+
+snGradSchemes
+{
+    default         none;
+}
+
+fluxRequired
+{
+    default         no;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cv2DMesh/square/system/fvSolution b/tutorials/mesh/cv2DMesh/square/system/fvSolution
new file mode 100644
index 0000000000000000000000000000000000000000..8ce8c60878cf19b4d62a2c8cc71c3b465f3829ce
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/square/system/fvSolution
@@ -0,0 +1,22 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      fvSolution;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+solvers
+{}
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cv2DMesh/square/system/surfaceFeatureExtractDict b/tutorials/mesh/cv2DMesh/square/system/surfaceFeatureExtractDict
new file mode 100644
index 0000000000000000000000000000000000000000..6a2e6d3ffeb6709c39d112c2956869f000c526be
--- /dev/null
+++ b/tutorials/mesh/cv2DMesh/square/system/surfaceFeatureExtractDict
@@ -0,0 +1,52 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      surfaceFeatureExtractDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+unit_cube.stl
+{
+    extractionMethod    extractFromSurface;
+
+    extractFromSurfaceCoeffs
+    {
+        // Mark edges whose adjacent surface normals are at an angle less
+        // than includedAngle as features
+        // - 0  : selects no edges
+        // - 180: selects all edges
+        includedAngle   175;
+    }
+
+    subsetFeatures
+    {
+        // Use a plane to select feature edges
+        // (normal)(basePoint)
+        // Keep only edges that intersect the plane will be included
+        plane               (0 0 1)(0 0 0);
+
+        // Keep nonManifold edges (edges with >2 connected faces where
+        // the faces form more than two different normal planes)
+        nonManifoldEdges    no;
+
+        // Keep open edges (edges with 1 connected face)
+        openEdges           yes;
+    }
+
+    // Write options
+
+        // Write features to obj format for postprocessing
+        writeObj                yes;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/blob/Allclean b/tutorials/mesh/cvMesh/blob/Allclean
new file mode 100755
index 0000000000000000000000000000000000000000..3b8eb25810039817af3290c78cec672d91be429c
--- /dev/null
+++ b/tutorials/mesh/cvMesh/blob/Allclean
@@ -0,0 +1,14 @@
+#!/bin/sh
+cd ${0%/*} || exit 1    # run from this directory
+
+# Source tutorial run functions
+. $WM_PROJECT_DIR/bin/tools/CleanFunctions
+
+cleanCase
+
+rm -rf constant/cellAlignments > /dev/null 2>&1
+rm -rf constant/targetCellSize > /dev/null 2>&1
+rm -rf constant/internalDelaunayVertices > /dev/null 2>&1
+
+
+# ----------------------------------------------------------------- end-of-file
diff --git a/tutorials/mesh/cvMesh/blob/Allrun b/tutorials/mesh/cvMesh/blob/Allrun
new file mode 100755
index 0000000000000000000000000000000000000000..ab12a6cbd5e5cd43785ffae0f8d8e1c4e2019ebf
--- /dev/null
+++ b/tutorials/mesh/cvMesh/blob/Allrun
@@ -0,0 +1,11 @@
+#!/bin/sh
+cd ${0%/*} || exit 1    # run from this directory
+
+# Source tutorial run functions
+. $WM_PROJECT_DIR/bin/tools/RunFunctions
+
+runApplication cvMesh
+runApplication collapseEdges -latestTime -collapseFaces
+runApplication checkMesh -latestTime -allGeometry -allTopology
+
+# ----------------------------------------------------------------- end-of-file
diff --git a/tutorials/mesh/cvMesh/blob/Allrun-parallel b/tutorials/mesh/cvMesh/blob/Allrun-parallel
new file mode 100755
index 0000000000000000000000000000000000000000..253294de1f153f5933dac13f3c4559a366225cf1
--- /dev/null
+++ b/tutorials/mesh/cvMesh/blob/Allrun-parallel
@@ -0,0 +1,19 @@
+#!/bin/sh
+cd ${0%/*} || exit 1    # run from this directory
+
+# Source tutorial run functions
+. $WM_PROJECT_DIR/bin/tools/RunFunctions
+
+# Get the number of processors to run on from system/decomposeParDict
+nProc=$(getNumberOfProcessors)
+
+runApplication blockMesh
+runApplication decomposePar
+
+runParallel cvMesh $nProc
+runParallel collapseEdges $nProc -latestTime -collapseFaces
+runParallel checkMesh $nProc -latestTime -allTopology -allGeometry
+
+runApplication reconstructParMesh -latestTime
+
+# ----------------------------------------------------------------- end-of-file
diff --git a/tutorials/mesh/cvMesh/blob/Alltest b/tutorials/mesh/cvMesh/blob/Alltest
new file mode 100755
index 0000000000000000000000000000000000000000..fc9136aea51b1f0ea208ef462afc59dbbb9b3693
--- /dev/null
+++ b/tutorials/mesh/cvMesh/blob/Alltest
@@ -0,0 +1,18 @@
+#!/bin/sh
+cd ${0%/*} || exit 1    # run from this directory
+
+# Source tutorial run functions
+. $WM_PROJECT_DIR/bin/tools/RunFunctions
+
+runApplication cvMesh
+
+# Change collapseEdges to only do one iteration
+cp system/collapseDict system/collapseDict.org
+
+sed -e s/"\(maximumIterations[ \t]*\)\([0-9]*\);"/"\1 1;"/g \
+system/collapseDict.org > system/collapseDict
+
+runApplication collapseEdges -latestTime -collapseFaces
+
+
+# ----------------------------------------------------------------- end-of-file
diff --git a/tutorials/mesh/cvMesh/blob/constant/polyMesh/blockMeshDict b/tutorials/mesh/cvMesh/blob/constant/polyMesh/blockMeshDict
new file mode 100644
index 0000000000000000000000000000000000000000..a0d9e31895cd3db25759d74fdaefc8c16eb5a4bf
--- /dev/null
+++ b/tutorials/mesh/cvMesh/blob/constant/polyMesh/blockMeshDict
@@ -0,0 +1,69 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      blockMeshDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+convertToMeters 1.0;
+
+xmin -1.3;
+xmax  0.65;
+ymin -1.1;
+ymax  0.8;
+zmin -1.4;
+zmax  0.55;
+
+vertices
+(
+    ($xmin $ymin $zmin)
+    ($xmax $ymin $zmin)
+    ($xmax $ymax $zmin)
+    ($xmin $ymax $zmin)
+    ($xmin $ymin $zmax)
+    ($xmax $ymin $zmax)
+    ($xmax $ymax $zmax)
+    ($xmin $ymax $zmax)
+
+);
+
+blocks
+(
+    hex (0 1 2  3 4 5 6 7) (11 11 9) simpleGrading (1 1 1)
+);
+
+edges
+(
+);
+
+boundary
+(
+    walls
+    {
+        type wall;
+        faces
+        (
+            (3 7 6 2)
+            (0 4 7 3)
+            (2 6 5 1)
+            (1 5 4 0)
+            (0 3 2 1)
+            (4 5 6 7)
+        );
+    }
+);
+
+mergePatchPairs
+(
+);
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/blob/constant/polyMesh/boundary b/tutorials/mesh/cvMesh/blob/constant/polyMesh/boundary
new file mode 100644
index 0000000000000000000000000000000000000000..69a2a888d4cbc8ceaaf582487e5027df213da58a
--- /dev/null
+++ b/tutorials/mesh/cvMesh/blob/constant/polyMesh/boundary
@@ -0,0 +1,28 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       polyBoundaryMesh;
+    location    "constant/polyMesh";
+    object      boundary;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+1
+(
+    walls
+    {
+        type            wall;
+        nFaces          638;
+        startFace       2948;
+    }
+)
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/blob/constant/triSurface/blob.stl b/tutorials/mesh/cvMesh/blob/constant/triSurface/blob.stl
new file mode 100644
index 0000000000000000000000000000000000000000..2aa427a4f186e2b8b45a854f4a4b7776f93083ca
--- /dev/null
+++ b/tutorials/mesh/cvMesh/blob/constant/triSurface/blob.stl
@@ -0,0 +1,21506 @@
+solid patch1
+  facet normal 0.0423597 0.0421465 -0.998213
+    outer loop
+       vertex -0.327179 -0.153076 -1.35078
+       vertex -0.327179 -0.0673011 -1.34716
+       vertex -0.241784 -0.0676809 -1.34355
+    endloop
+  endfacet
+  facet normal 0.0421465 0.0423597 -0.998213
+    outer loop
+       vertex -0.327179 -0.153076 -1.35078
+       vertex -0.241784 -0.0676809 -1.34355
+       vertex -0.241404 -0.153076 -1.34716
+    endloop
+  endfacet
+  facet normal 0.127173 0.042432 -0.990972
+    outer loop
+       vertex -0.241404 -0.153076 -1.34716
+       vertex -0.241784 -0.0676809 -1.34355
+       vertex -0.157272 -0.0686304 -1.33275
+    endloop
+  endfacet
+  facet normal 0.126626 0.0429848 -0.991019
+    outer loop
+       vertex -0.241404 -0.153076 -1.34716
+       vertex -0.157272 -0.0686304 -1.33275
+       vertex -0.156517 -0.153076 -1.33632
+    endloop
+  endfacet
+  facet normal 0.212842 0.0431274 -0.976134
+    outer loop
+       vertex -0.156517 -0.153076 -1.33632
+       vertex -0.157272 -0.0686304 -1.33275
+       vertex -0.0745271 -0.0699596 -1.31477
+    endloop
+  endfacet
+  facet normal 0.212067 0.0439261 -0.976267
+    outer loop
+       vertex -0.156517 -0.153076 -1.33632
+       vertex -0.0745271 -0.0699596 -1.31477
+       vertex -0.0734048 -0.153076 -1.31826
+    endloop
+  endfacet
+  facet normal 0.299975 0.0441314 -0.952926
+    outer loop
+       vertex -0.0734048 -0.153076 -1.31826
+       vertex -0.0745271 -0.0699596 -1.31477
+       vertex 0.00556793 -0.0714787 -1.28962
+    endloop
+  endfacet
+  facet normal 0.299079 0.0450813 -0.953163
+    outer loop
+       vertex -0.0734048 -0.153076 -1.31826
+       vertex 0.00556793 -0.0714787 -1.28962
+       vertex 0.00704463 -0.153076 -1.29302
+    endloop
+  endfacet
+  facet normal 0.388908 0.0453335 -0.920161
+    outer loop
+       vertex 0.00704463 -0.153076 -1.29302
+       vertex 0.00556793 -0.0714787 -1.28962
+       vertex 0.0821297 -0.0729978 -1.25734
+    endloop
+  endfacet
+  facet normal 0.388007 0.0463252 -0.920491
+    outer loop
+       vertex 0.00704463 -0.153076 -1.29302
+       vertex 0.0821297 -0.0729978 -1.25734
+       vertex 0.0839438 -0.153076 -1.2606
+    endloop
+  endfacet
+  facet normal 0.479506 0.046596 -0.8763
+    outer loop
+       vertex 0.0839438 -0.153076 -1.2606
+       vertex 0.0821297 -0.0729978 -1.25734
+       vertex 0.154275 -0.0743271 -1.21793
+    endloop
+  endfacet
+  facet normal 0.478724 0.0475002 -0.87668
+    outer loop
+       vertex 0.0839438 -0.153076 -1.2606
+       vertex 0.154275 -0.0743271 -1.21793
+       vertex 0.156405 -0.153076 -1.22104
+    endloop
+  endfacet
+  facet normal 0.570947 0.0477454 -0.819597
+    outer loop
+       vertex 0.156405 -0.153076 -1.22104
+       vertex 0.154275 -0.0743271 -1.21793
+       vertex 0.22112 -0.0752765 -1.17142
+    endloop
+  endfacet
+  facet normal 0.570404 0.0484131 -0.819936
+    outer loop
+       vertex 0.156405 -0.153076 -1.22104
+       vertex 0.22112 -0.0752765 -1.17142
+       vertex 0.223541 -0.153076 -1.17433
+    endloop
+  endfacet
+  facet normal 0.661499 0.0485717 -0.748372
+    outer loop
+       vertex 0.223541 -0.153076 -1.17433
+       vertex 0.22112 -0.0752765 -1.17142
+       vertex 0.281783 -0.0756563 -1.11783
+    endloop
+  endfacet
+  facet normal 0.661295 0.0488431 -0.748534
+    outer loop
+       vertex 0.223541 -0.153076 -1.17433
+       vertex 0.281783 -0.0756563 -1.11783
+       vertex 0.284465 -0.153076 -1.12051
+    endloop
+  endfacet
+  facet normal 0.0429849 0.126626 -0.991019
+    outer loop
+       vertex -0.327179 -0.0673011 -1.34716
+       vertex -0.327179 0.0175861 -1.33632
+       vertex -0.242733 0.0168307 -1.33275
+    endloop
+  endfacet
+  facet normal 0.042432 0.127173 -0.990972
+    outer loop
+       vertex -0.327179 -0.0673011 -1.34716
+       vertex -0.242733 0.0168307 -1.33275
+       vertex -0.241784 -0.0676809 -1.34355
+    endloop
+  endfacet
+  facet normal 0.128457 0.127188 -0.983525
+    outer loop
+       vertex -0.241784 -0.0676809 -1.34355
+       vertex -0.242733 0.0168307 -1.33275
+       vertex -0.159172 0.0149314 -1.32208
+    endloop
+  endfacet
+  facet normal 0.127188 0.128457 -0.983525
+    outer loop
+       vertex -0.241784 -0.0676809 -1.34355
+       vertex -0.159172 0.0149314 -1.32208
+       vertex -0.157272 -0.0686304 -1.33275
+    endloop
+  endfacet
+  facet normal 0.214212 0.128491 -0.968299
+    outer loop
+       vertex -0.157272 -0.0686304 -1.33275
+       vertex -0.159172 0.0149314 -1.32208
+       vertex -0.0773774 0.0122545 -1.30434
+    endloop
+  endfacet
+  facet normal 0.212567 0.130164 -0.968438
+    outer loop
+       vertex -0.157272 -0.0686304 -1.33275
+       vertex -0.0773774 0.0122545 -1.30434
+       vertex -0.0745271 -0.0699596 -1.31477
+    endloop
+  endfacet
+  facet normal 0.300882 0.13022 -0.944729
+    outer loop
+       vertex -0.0745271 -0.0699596 -1.31477
+       vertex -0.0773774 0.0122545 -1.30434
+       vertex 0.00176526 0.00916668 -1.27956
+    endloop
+  endfacet
+  facet normal 0.299162 0.132011 -0.945027
+    outer loop
+       vertex -0.0745271 -0.0699596 -1.31477
+       vertex 0.00176526 0.00916668 -1.27956
+       vertex 0.00556793 -0.0714787 -1.28962
+    endloop
+  endfacet
+  facet normal 0.388847 0.132093 -0.911784
+    outer loop
+       vertex 0.00556793 -0.0714787 -1.28962
+       vertex 0.00176526 0.00916668 -1.27956
+       vertex 0.0773727 0.00603451 -1.24777
+    endloop
+  endfacet
+  facet normal 0.387305 0.133746 -0.912199
+    outer loop
+       vertex 0.00556793 -0.0714787 -1.28962
+       vertex 0.0773727 0.00603451 -1.24777
+       vertex 0.0821297 -0.0729978 -1.25734
+    endloop
+  endfacet
+  facet normal 0.47815 0.133865 -0.868017
+    outer loop
+       vertex 0.0821297 -0.0729978 -1.25734
+       vertex 0.0773727 0.00603451 -1.24777
+       vertex 0.148579 0.00326891 -1.20897
+    endloop
+  endfacet
+  facet normal 0.476878 0.135278 -0.868497
+    outer loop
+       vertex 0.0821297 -0.0729978 -1.25734
+       vertex 0.148579 0.00326891 -1.20897
+       vertex 0.154275 -0.0743271 -1.21793
+    endloop
+  endfacet
+  facet normal 0.567993 0.135423 -0.811816
+    outer loop
+       vertex 0.154275 -0.0743271 -1.21793
+       vertex 0.148579 0.00326891 -1.20897
+       vertex 0.214517 0.0012808 -1.16317
+    endloop
+  endfacet
+  facet normal 0.567105 0.136455 -0.812264
+    outer loop
+       vertex 0.154275 -0.0743271 -1.21793
+       vertex 0.214517 0.0012808 -1.16317
+       vertex 0.22112 -0.0752765 -1.17142
+    endloop
+  endfacet
+  facet normal 0.6567 0.136575 -0.741682
+    outer loop
+       vertex 0.22112 -0.0752765 -1.17142
+       vertex 0.214517 0.0012808 -1.16317
+       vertex 0.274322 0.000481101 -1.11037
+    endloop
+  endfacet
+  facet normal 0.656347 0.13701 -0.741914
+    outer loop
+       vertex 0.22112 -0.0752765 -1.17142
+       vertex 0.274322 0.000481101 -1.11037
+       vertex 0.281783 -0.0756563 -1.11783
+    endloop
+  endfacet
+  facet normal 0.0439248 0.212067 -0.976268
+    outer loop
+       vertex -0.327179 0.0175861 -1.33632
+       vertex -0.327179 0.100698 -1.31826
+       vertex -0.244062 0.0995758 -1.31477
+    endloop
+  endfacet
+  facet normal 0.0431274 0.21284 -0.976135
+    outer loop
+       vertex -0.327179 0.0175861 -1.33632
+       vertex -0.244062 0.0995758 -1.31477
+       vertex -0.242733 0.0168307 -1.33275
+    endloop
+  endfacet
+  facet normal 0.130166 0.212566 -0.968438
+    outer loop
+       vertex -0.242733 0.0168307 -1.33275
+       vertex -0.244062 0.0995758 -1.31477
+       vertex -0.161848 0.0967255 -1.30434
+    endloop
+  endfacet
+  facet normal 0.128491 0.214212 -0.968299
+    outer loop
+       vertex -0.242733 0.0168307 -1.33275
+       vertex -0.161848 0.0967255 -1.30434
+       vertex -0.159172 0.0149314 -1.32208
+    endloop
+  endfacet
+  facet normal 0.215666 0.213702 -0.952796
+    outer loop
+       vertex -0.159172 0.0149314 -1.32208
+       vertex -0.161848 0.0967255 -1.30434
+       vertex -0.0814388 0.0926641 -1.28705
+    endloop
+  endfacet
+  facet normal 0.213702 0.215666 -0.952796
+    outer loop
+       vertex -0.159172 0.0149314 -1.32208
+       vertex -0.0814388 0.0926641 -1.28705
+       vertex -0.0773774 0.0122545 -1.30434
+    endloop
+  endfacet
+  facet normal 0.301199 0.214972 -0.929014
+    outer loop
+       vertex -0.0773774 0.0122545 -1.30434
+       vertex -0.0814388 0.0926641 -1.28705
+       vertex -0.00373595 0.0879084 -1.26296
+    endloop
+  endfacet
+  facet normal 0.299389 0.216819 -0.929169
+    outer loop
+       vertex -0.0773774 0.0122545 -1.30434
+       vertex -0.00373595 0.0879084 -1.26296
+       vertex 0.00176526 0.00916668 -1.27956
+    endloop
+  endfacet
+  facet normal 0.387327 0.216027 -0.896276
+    outer loop
+       vertex 0.00176526 0.00916668 -1.27956
+       vertex -0.00373595 0.0879084 -1.26296
+       vertex 0.0703579 0.0829753 -1.23213
+    endloop
+  endfacet
+  facet normal 0.385964 0.21745 -0.896519
+    outer loop
+       vertex 0.00176526 0.00916668 -1.27956
+       vertex 0.0703579 0.0829753 -1.23213
+       vertex 0.0773727 0.00603451 -1.24777
+    endloop
+  endfacet
+  facet normal 0.474514 0.216707 -0.853155
+    outer loop
+       vertex 0.0773727 0.00603451 -1.24777
+       vertex 0.0703579 0.0829753 -1.23213
+       vertex 0.140011 0.078559 -1.19451
+    endloop
+  endfacet
+  facet normal 0.473474 0.217822 -0.853449
+    outer loop
+       vertex 0.0773727 0.00603451 -1.24777
+       vertex 0.140011 0.078559 -1.19451
+       vertex 0.148579 0.00326891 -1.20897
+    endloop
+  endfacet
+  facet normal 0.561937 0.217263 -0.798138
+    outer loop
+       vertex 0.148579 0.00326891 -1.20897
+       vertex 0.140011 0.078559 -1.19451
+       vertex 0.204392 0.0753537 -1.15005
+    endloop
+  endfacet
+  facet normal 0.561192 0.218085 -0.798437
+    outer loop
+       vertex 0.148579 0.00326891 -1.20897
+       vertex 0.204392 0.0753537 -1.15005
+       vertex 0.214517 0.0012808 -1.16317
+    endloop
+  endfacet
+  facet normal 0.647908 0.217805 -0.729915
+    outer loop
+       vertex 0.214517 0.0012808 -1.16317
+       vertex 0.204392 0.0753537 -1.15005
+       vertex 0.262669 0.0740539 -1.09871
+    endloop
+  endfacet
+  facet normal 0.647566 0.218198 -0.730102
+    outer loop
+       vertex 0.214517 0.0012808 -1.16317
+       vertex 0.262669 0.0740539 -1.09871
+       vertex 0.274322 0.000481101 -1.11037
+    endloop
+  endfacet
+  facet normal 0.04508 0.299079 -0.953163
+    outer loop
+       vertex -0.327179 0.100698 -1.31826
+       vertex -0.327179 0.181148 -1.29302
+       vertex -0.245582 0.179671 -1.28962
+    endloop
+  endfacet
+  facet normal 0.0441302 0.299974 -0.952926
+    outer loop
+       vertex -0.327179 0.100698 -1.31826
+       vertex -0.245582 0.179671 -1.28962
+       vertex -0.244062 0.0995758 -1.31477
+    endloop
+  endfacet
+  facet normal 0.132014 0.299161 -0.945026
+    outer loop
+       vertex -0.244062 0.0995758 -1.31477
+       vertex -0.245582 0.179671 -1.28962
+       vertex -0.164936 0.175868 -1.27956
+    endloop
+  endfacet
+  facet normal 0.130221 0.300883 -0.944728
+    outer loop
+       vertex -0.244062 0.0995758 -1.31477
+       vertex -0.164936 0.175868 -1.27956
+       vertex -0.161848 0.0967255 -1.30434
+    endloop
+  endfacet
+  facet normal 0.216817 0.29939 -0.929169
+    outer loop
+       vertex -0.161848 0.0967255 -1.30434
+       vertex -0.164936 0.175868 -1.27956
+       vertex -0.0861944 0.170367 -1.26296
+    endloop
+  endfacet
+  facet normal 0.214972 0.301199 -0.929014
+    outer loop
+       vertex -0.161848 0.0967255 -1.30434
+       vertex -0.0861944 0.170367 -1.26296
+       vertex -0.0814388 0.0926641 -1.28705
+    endloop
+  endfacet
+  facet normal 0.300575 0.299184 -0.905618
+    outer loop
+       vertex -0.0814388 0.0926641 -1.28705
+       vertex -0.0861944 0.170367 -1.26296
+       vertex -0.0103082 0.163795 -1.23994
+    endloop
+  endfacet
+  facet normal 0.299184 0.300575 -0.905618
+    outer loop
+       vertex -0.0814388 0.0926641 -1.28705
+       vertex -0.0103082 0.163795 -1.23994
+       vertex -0.00373595 0.0879084 -1.26296
+    endloop
+  endfacet
+  facet normal 0.384239 0.298268 -0.873726
+    outer loop
+       vertex -0.00373595 0.0879084 -1.26296
+       vertex -0.0103082 0.163795 -1.23994
+       vertex 0.0617706 0.156779 -1.21064
+    endloop
+  endfacet
+  facet normal 0.383498 0.299024 -0.873793
+    outer loop
+       vertex -0.00373595 0.0879084 -1.26296
+       vertex 0.0617706 0.156779 -1.21064
+       vertex 0.0703579 0.0829753 -1.23213
+    endloop
+  endfacet
+  facet normal 0.468718 0.296773 -0.832003
+    outer loop
+       vertex 0.0703579 0.0829753 -1.23213
+       vertex 0.0617706 0.156779 -1.21064
+       vertex 0.129267 0.15039 -1.1749
+    endloop
+  endfacet
+  facet normal 0.468247 0.297262 -0.832094
+    outer loop
+       vertex 0.0703579 0.0829753 -1.23213
+       vertex 0.129267 0.15039 -1.1749
+       vertex 0.140011 0.078559 -1.19451
+    endloop
+  endfacet
+  facet normal 0.553116 0.295446 -0.778957
+    outer loop
+       vertex 0.140011 0.078559 -1.19451
+       vertex 0.129267 0.15039 -1.1749
+       vertex 0.191405 0.1457 -1.13255
+    endloop
+  endfacet
+  facet normal 0.552697 0.295887 -0.779087
+    outer loop
+       vertex 0.140011 0.078559 -1.19451
+       vertex 0.191405 0.1457 -1.13255
+       vertex 0.204392 0.0753537 -1.15005
+    endloop
+  endfacet
+  facet normal 0.635595 0.29487 -0.713492
+    outer loop
+       vertex 0.204392 0.0753537 -1.15005
+       vertex 0.191405 0.1457 -1.13255
+       vertex 0.247411 0.14378 -1.08345
+    endloop
+  endfacet
+  facet normal 0.635288 0.295197 -0.71363
+    outer loop
+       vertex 0.204392 0.0753537 -1.15005
+       vertex 0.247411 0.14378 -1.08345
+       vertex 0.262669 0.0740539 -1.09871
+    endloop
+  endfacet
+  facet normal 0.0463252 0.388007 -0.920491
+    outer loop
+       vertex -0.327179 0.181148 -1.29302
+       vertex -0.327179 0.258047 -1.2606
+       vertex -0.247101 0.256233 -1.25734
+    endloop
+  endfacet
+  facet normal 0.0453323 0.388909 -0.92016
+    outer loop
+       vertex -0.327179 0.181148 -1.29302
+       vertex -0.247101 0.256233 -1.25734
+       vertex -0.245582 0.179671 -1.28962
+    endloop
+  endfacet
+  facet normal 0.133746 0.387306 -0.912199
+    outer loop
+       vertex -0.245582 0.179671 -1.28962
+       vertex -0.247101 0.256233 -1.25734
+       vertex -0.168068 0.251476 -1.24777
+    endloop
+  endfacet
+  facet normal 0.132096 0.388845 -0.911784
+    outer loop
+       vertex -0.245582 0.179671 -1.28962
+       vertex -0.168068 0.251476 -1.24777
+       vertex -0.164936 0.175868 -1.27956
+    endloop
+  endfacet
+  facet normal 0.21745 0.385963 -0.89652
+    outer loop
+       vertex -0.164936 0.175868 -1.27956
+       vertex -0.168068 0.251476 -1.24777
+       vertex -0.0911275 0.244461 -1.23213
+    endloop
+  endfacet
+  facet normal 0.216026 0.387327 -0.896276
+    outer loop
+       vertex -0.164936 0.175868 -1.27956
+       vertex -0.0911275 0.244461 -1.23213
+       vertex -0.0861944 0.170367 -1.26296
+    endloop
+  endfacet
+  facet normal 0.299025 0.383497 -0.873793
+    outer loop
+       vertex -0.0861944 0.170367 -1.26296
+       vertex -0.0911275 0.244461 -1.23213
+       vertex -0.0173241 0.235873 -1.21064
+    endloop
+  endfacet
+  facet normal 0.298269 0.384239 -0.873726
+    outer loop
+       vertex -0.0861944 0.170367 -1.26296
+       vertex -0.0173241 0.235873 -1.21064
+       vertex -0.0103082 0.163795 -1.23994
+    endloop
+  endfacet
+  facet normal 0.380045 0.379858 -0.84337
+    outer loop
+       vertex -0.0103082 0.163795 -1.23994
+       vertex -0.0173241 0.235873 -1.21064
+       vertex 0.052296 0.226399 -1.18354
+    endloop
+  endfacet
+  facet normal 0.379858 0.380045 -0.84337
+    outer loop
+       vertex -0.0103082 0.163795 -1.23994
+       vertex 0.052296 0.226399 -1.18354
+       vertex 0.0617706 0.156779 -1.21064
+    endloop
+  endfacet
+  facet normal 0.461367 0.375705 -0.803732
+    outer loop
+       vertex 0.0617706 0.156779 -1.21064
+       vertex 0.052296 0.226399 -1.18354
+       vertex 0.117041 0.217609 -1.15048
+    endloop
+  endfacet
+  facet normal 0.461236 0.375838 -0.803746
+    outer loop
+       vertex 0.0617706 0.156779 -1.21064
+       vertex 0.117041 0.217609 -1.15048
+       vertex 0.129267 0.15039 -1.1749
+    endloop
+  endfacet
+  facet normal 0.541997 0.372253 -0.753437
+    outer loop
+       vertex 0.129267 0.15039 -1.1749
+       vertex 0.117041 0.217609 -1.15048
+       vertex 0.176217 0.211078 -1.11114
+    endloop
+  endfacet
+  facet normal 0.54161 0.372642 -0.753522
+    outer loop
+       vertex 0.129267 0.15039 -1.1749
+       vertex 0.176217 0.211078 -1.11114
+       vertex 0.191405 0.1457 -1.13255
+    endloop
+  endfacet
+  facet normal 0.619783 0.370576 -0.691767
+    outer loop
+       vertex 0.191405 0.1457 -1.13255
+       vertex 0.176217 0.211078 -1.11114
+       vertex 0.229132 0.208376 -1.06518
+    endloop
+  endfacet
+  facet normal 0.619311 0.371044 -0.691939
+    outer loop
+       vertex 0.191405 0.1457 -1.13255
+       vertex 0.229132 0.208376 -1.06518
+       vertex 0.247411 0.14378 -1.08345
+    endloop
+  endfacet
+  facet normal 0.0475003 0.478724 -0.87668
+    outer loop
+       vertex -0.327179 0.258047 -1.2606
+       vertex -0.327179 0.330508 -1.22104
+       vertex -0.24843 0.328378 -1.21793
+    endloop
+  endfacet
+  facet normal 0.0465961 0.479506 -0.8763
+    outer loop
+       vertex -0.327179 0.258047 -1.2606
+       vertex -0.24843 0.328378 -1.21793
+       vertex -0.247101 0.256233 -1.25734
+    endloop
+  endfacet
+  facet normal 0.135278 0.476878 -0.868497
+    outer loop
+       vertex -0.247101 0.256233 -1.25734
+       vertex -0.24843 0.328378 -1.21793
+       vertex -0.170834 0.322682 -1.20897
+    endloop
+  endfacet
+  facet normal 0.133865 0.47815 -0.868017
+    outer loop
+       vertex -0.247101 0.256233 -1.25734
+       vertex -0.170834 0.322682 -1.20897
+       vertex -0.168068 0.251476 -1.24777
+    endloop
+  endfacet
+  facet normal 0.217822 0.473474 -0.85345
+    outer loop
+       vertex -0.168068 0.251476 -1.24777
+       vertex -0.170834 0.322682 -1.20897
+       vertex -0.0955438 0.314114 -1.19451
+    endloop
+  endfacet
+  facet normal 0.216707 0.474514 -0.853155
+    outer loop
+       vertex -0.168068 0.251476 -1.24777
+       vertex -0.0955438 0.314114 -1.19451
+       vertex -0.0911275 0.244461 -1.23213
+    endloop
+  endfacet
+  facet normal 0.297262 0.468247 -0.832094
+    outer loop
+       vertex -0.0911275 0.244461 -1.23213
+       vertex -0.0955438 0.314114 -1.19451
+       vertex -0.0237126 0.30337 -1.1749
+    endloop
+  endfacet
+  facet normal 0.296773 0.468718 -0.832003
+    outer loop
+       vertex -0.0911275 0.244461 -1.23213
+       vertex -0.0237126 0.30337 -1.1749
+       vertex -0.0173241 0.235873 -1.21064
+    endloop
+  endfacet
+  facet normal 0.375838 0.461236 -0.803746
+    outer loop
+       vertex -0.0173241 0.235873 -1.21064
+       vertex -0.0237126 0.30337 -1.1749
+       vertex 0.0435067 0.291143 -1.15048
+    endloop
+  endfacet
+  facet normal 0.375706 0.461367 -0.803732
+    outer loop
+       vertex -0.0173241 0.235873 -1.21064
+       vertex 0.0435067 0.291143 -1.15048
+       vertex 0.052296 0.226399 -1.18354
+    endloop
+  endfacet
+  facet normal 0.452545 0.45347 -0.767834
+    outer loop
+       vertex 0.052296 0.226399 -1.18354
+       vertex 0.0435067 0.291143 -1.15048
+       vertex 0.105262 0.279365 -1.12104
+    endloop
+  endfacet
+  facet normal 0.45347 0.452545 -0.767834
+    outer loop
+       vertex 0.052296 0.226399 -1.18354
+       vertex 0.105262 0.279365 -1.12104
+       vertex 0.117041 0.217609 -1.15048
+    endloop
+  endfacet
+  facet normal 0.527981 0.445418 -0.723076
+    outer loop
+       vertex 0.117041 0.217609 -1.15048
+       vertex 0.105262 0.279365 -1.12104
+       vertex 0.160703 0.269966 -1.08635
+    endloop
+  endfacet
+  facet normal 0.529581 0.44384 -0.722877
+    outer loop
+       vertex 0.117041 0.217609 -1.15048
+       vertex 0.160703 0.269966 -1.08635
+       vertex 0.176217 0.211078 -1.11114
+    endloop
+  endfacet
+  facet normal 0.601507 0.439351 -0.667204
+    outer loop
+       vertex 0.176217 0.211078 -1.11114
+       vertex 0.160703 0.269966 -1.08635
+       vertex 0.209244 0.265861 -1.04529
+    endloop
+  endfacet
+  facet normal 0.601856 0.439021 -0.667105
+    outer loop
+       vertex 0.176217 0.211078 -1.11114
+       vertex 0.209244 0.265861 -1.04529
+       vertex 0.229132 0.208376 -1.06518
+    endloop
+  endfacet
+  facet normal 0.0484131 0.570404 -0.819936
+    outer loop
+       vertex -0.327179 0.330508 -1.22104
+       vertex -0.327179 0.397644 -1.17433
+       vertex -0.249379 0.395223 -1.17142
+    endloop
+  endfacet
+  facet normal 0.0477455 0.570947 -0.819597
+    outer loop
+       vertex -0.327179 0.330508 -1.22104
+       vertex -0.249379 0.395223 -1.17142
+       vertex -0.24843 0.328378 -1.21793
+    endloop
+  endfacet
+  facet normal 0.136455 0.567104 -0.812264
+    outer loop
+       vertex -0.24843 0.328378 -1.21793
+       vertex -0.249379 0.395223 -1.17142
+       vertex -0.172822 0.38862 -1.16317
+    endloop
+  endfacet
+  facet normal 0.135423 0.567993 -0.811816
+    outer loop
+       vertex -0.24843 0.328378 -1.21793
+       vertex -0.172822 0.38862 -1.16317
+       vertex -0.170834 0.322682 -1.20897
+    endloop
+  endfacet
+  facet normal 0.218085 0.561192 -0.798437
+    outer loop
+       vertex -0.170834 0.322682 -1.20897
+       vertex -0.172822 0.38862 -1.16317
+       vertex -0.098749 0.378495 -1.15005
+    endloop
+  endfacet
+  facet normal 0.217264 0.561937 -0.798138
+    outer loop
+       vertex -0.170834 0.322682 -1.20897
+       vertex -0.098749 0.378495 -1.15005
+       vertex -0.0955438 0.314114 -1.19451
+    endloop
+  endfacet
+  facet normal 0.295887 0.552697 -0.779087
+    outer loop
+       vertex -0.0955438 0.314114 -1.19451
+       vertex -0.098749 0.378495 -1.15005
+       vertex -0.0284026 0.365508 -1.13255
+    endloop
+  endfacet
+  facet normal 0.295446 0.553116 -0.778957
+    outer loop
+       vertex -0.0955438 0.314114 -1.19451
+       vertex -0.0284026 0.365508 -1.13255
+       vertex -0.0237126 0.30337 -1.1749
+    endloop
+  endfacet
+  facet normal 0.372644 0.54161 -0.753522
+    outer loop
+       vertex -0.0237126 0.30337 -1.1749
+       vertex -0.0284026 0.365508 -1.13255
+       vertex 0.0369751 0.350319 -1.11114
+    endloop
+  endfacet
+  facet normal 0.372254 0.541997 -0.753436
+    outer loop
+       vertex -0.0237126 0.30337 -1.1749
+       vertex 0.0369751 0.350319 -1.11114
+       vertex 0.0435067 0.291143 -1.15048
+    endloop
+  endfacet
+  facet normal 0.443839 0.529581 -0.722877
+    outer loop
+       vertex 0.0435067 0.291143 -1.15048
+       vertex 0.0369751 0.350319 -1.11114
+       vertex 0.0958631 0.334806 -1.08635
+    endloop
+  endfacet
+  facet normal 0.445418 0.527981 -0.723076
+    outer loop
+       vertex 0.0435067 0.291143 -1.15048
+       vertex 0.0958631 0.334806 -1.08635
+       vertex 0.105262 0.279365 -1.12104
+    endloop
+  endfacet
+  facet normal 0.513857 0.515981 -0.685357
+    outer loop
+       vertex 0.105262 0.279365 -1.12104
+       vertex 0.0958631 0.334806 -1.08635
+       vertex 0.14674 0.320843 -1.05871
+    endloop
+  endfacet
+  facet normal 0.515982 0.513857 -0.685357
+    outer loop
+       vertex 0.105262 0.279365 -1.12104
+       vertex 0.14674 0.320843 -1.05871
+       vertex 0.160703 0.269966 -1.08635
+    endloop
+  endfacet
+  facet normal 0.581828 0.505665 -0.637007
+    outer loop
+       vertex 0.160703 0.269966 -1.08635
+       vertex 0.14674 0.320843 -1.05871
+       vertex 0.189158 0.31425 -1.0252
+    endloop
+  endfacet
+  facet normal 0.581622 0.505853 -0.637047
+    outer loop
+       vertex 0.160703 0.269966 -1.08635
+       vertex 0.189158 0.31425 -1.0252
+       vertex 0.209244 0.265861 -1.04529
+    endloop
+  endfacet
+  facet normal 0.0488431 0.661295 -0.748534
+    outer loop
+       vertex -0.327179 0.397644 -1.17433
+       vertex -0.327179 0.458568 -1.12051
+       vertex -0.249759 0.455885 -1.11783
+    endloop
+  endfacet
+  facet normal 0.0485717 0.661499 -0.748372
+    outer loop
+       vertex -0.327179 0.397644 -1.17433
+       vertex -0.249759 0.455885 -1.11783
+       vertex -0.249379 0.395223 -1.17142
+    endloop
+  endfacet
+  facet normal 0.13701 0.656347 -0.741914
+    outer loop
+       vertex -0.249379 0.395223 -1.17142
+       vertex -0.249759 0.455885 -1.11783
+       vertex -0.173622 0.448425 -1.11037
+    endloop
+  endfacet
+  facet normal 0.136576 0.6567 -0.741682
+    outer loop
+       vertex -0.249379 0.395223 -1.17142
+       vertex -0.173622 0.448425 -1.11037
+       vertex -0.172822 0.38862 -1.16317
+    endloop
+  endfacet
+  facet normal 0.218198 0.647566 -0.730102
+    outer loop
+       vertex -0.172822 0.38862 -1.16317
+       vertex -0.173622 0.448425 -1.11037
+       vertex -0.100049 0.436772 -1.09871
+    endloop
+  endfacet
+  facet normal 0.217806 0.647908 -0.729915
+    outer loop
+       vertex -0.172822 0.38862 -1.16317
+       vertex -0.100049 0.436772 -1.09871
+       vertex -0.098749 0.378495 -1.15005
+    endloop
+  endfacet
+  facet normal 0.295197 0.635288 -0.71363
+    outer loop
+       vertex -0.098749 0.378495 -1.15005
+       vertex -0.100049 0.436772 -1.09871
+       vertex -0.0303229 0.421514 -1.08345
+    endloop
+  endfacet
+  facet normal 0.29487 0.635594 -0.713493
+    outer loop
+       vertex -0.098749 0.378495 -1.15005
+       vertex -0.0303229 0.421514 -1.08345
+       vertex -0.0284026 0.365508 -1.13255
+    endloop
+  endfacet
+  facet normal 0.371045 0.619311 -0.691939
+    outer loop
+       vertex -0.0284026 0.365508 -1.13255
+       vertex -0.0303229 0.421514 -1.08345
+       vertex 0.0342738 0.403235 -1.06518
+    endloop
+  endfacet
+  facet normal 0.370577 0.619782 -0.691768
+    outer loop
+       vertex -0.0284026 0.365508 -1.13255
+       vertex 0.0342738 0.403235 -1.06518
+       vertex 0.0369751 0.350319 -1.11114
+    endloop
+  endfacet
+  facet normal 0.439021 0.601855 -0.667106
+    outer loop
+       vertex 0.0369751 0.350319 -1.11114
+       vertex 0.0342738 0.403235 -1.06518
+       vertex 0.0917581 0.383347 -1.04529
+    endloop
+  endfacet
+  facet normal 0.43935 0.601507 -0.667204
+    outer loop
+       vertex 0.0369751 0.350319 -1.11114
+       vertex 0.0917581 0.383347 -1.04529
+       vertex 0.0958631 0.334806 -1.08635
+    endloop
+  endfacet
+  facet normal 0.505853 0.581622 -0.637047
+    outer loop
+       vertex 0.0958631 0.334806 -1.08635
+       vertex 0.0917581 0.383347 -1.04529
+       vertex 0.140147 0.363261 -1.0252
+    endloop
+  endfacet
+  facet normal 0.505666 0.581828 -0.637007
+    outer loop
+       vertex 0.0958631 0.334806 -1.08635
+       vertex 0.140147 0.363261 -1.0252
+       vertex 0.14674 0.320843 -1.05871
+    endloop
+  endfacet
+  facet normal 0.568022 0.562734 -0.600568
+    outer loop
+       vertex 0.14674 0.320843 -1.05871
+       vertex 0.140147 0.363261 -1.0252
+       vertex 0.173079 0.347181 -1.00912
+    endloop
+  endfacet
+  facet normal 0.562734 0.568022 -0.600568
+    outer loop
+       vertex 0.14674 0.320843 -1.05871
+       vertex 0.173079 0.347181 -1.00912
+       vertex 0.189158 0.31425 -1.0252
+    endloop
+  endfacet
+  facet normal 0.0421465 -0.0423597 -0.998213
+    outer loop
+       vertex -0.327179 -0.153076 -1.35078
+       vertex -0.241404 -0.153076 -1.34716
+       vertex -0.241784 -0.238471 -1.34355
+    endloop
+  endfacet
+  facet normal 0.0423597 -0.0421465 -0.998213
+    outer loop
+       vertex -0.327179 -0.153076 -1.35078
+       vertex -0.241784 -0.238471 -1.34355
+       vertex -0.327179 -0.238851 -1.34716
+    endloop
+  endfacet
+  facet normal 0.042432 -0.127173 -0.990972
+    outer loop
+       vertex -0.327179 -0.238851 -1.34716
+       vertex -0.241784 -0.238471 -1.34355
+       vertex -0.242733 -0.322982 -1.33275
+    endloop
+  endfacet
+  facet normal 0.0429849 -0.126626 -0.991019
+    outer loop
+       vertex -0.327179 -0.238851 -1.34716
+       vertex -0.242733 -0.322982 -1.33275
+       vertex -0.327179 -0.323738 -1.33632
+    endloop
+  endfacet
+  facet normal 0.0431275 -0.212842 -0.976134
+    outer loop
+       vertex -0.327179 -0.323738 -1.33632
+       vertex -0.242733 -0.322982 -1.33275
+       vertex -0.244063 -0.405728 -1.31477
+    endloop
+  endfacet
+  facet normal 0.0439262 -0.212067 -0.976267
+    outer loop
+       vertex -0.327179 -0.323738 -1.33632
+       vertex -0.244063 -0.405728 -1.31477
+       vertex -0.327179 -0.40685 -1.31826
+    endloop
+  endfacet
+  facet normal 0.0441315 -0.299975 -0.952926
+    outer loop
+       vertex -0.327179 -0.40685 -1.31826
+       vertex -0.244063 -0.405728 -1.31477
+       vertex -0.245582 -0.485823 -1.28962
+    endloop
+  endfacet
+  facet normal 0.0450813 -0.299079 -0.953163
+    outer loop
+       vertex -0.327179 -0.40685 -1.31826
+       vertex -0.245582 -0.485823 -1.28962
+       vertex -0.327179 -0.487299 -1.29302
+    endloop
+  endfacet
+  facet normal 0.0453335 -0.388907 -0.920161
+    outer loop
+       vertex -0.327179 -0.487299 -1.29302
+       vertex -0.245582 -0.485823 -1.28962
+       vertex -0.247101 -0.562384 -1.25734
+    endloop
+  endfacet
+  facet normal 0.0463251 -0.388007 -0.920492
+    outer loop
+       vertex -0.327179 -0.487299 -1.29302
+       vertex -0.247101 -0.562384 -1.25734
+       vertex -0.327179 -0.564198 -1.2606
+    endloop
+  endfacet
+  facet normal 0.0465959 -0.479507 -0.8763
+    outer loop
+       vertex -0.327179 -0.564198 -1.2606
+       vertex -0.247101 -0.562384 -1.25734
+       vertex -0.24843 -0.63453 -1.21793
+    endloop
+  endfacet
+  facet normal 0.0475001 -0.478724 -0.876679
+    outer loop
+       vertex -0.327179 -0.564198 -1.2606
+       vertex -0.24843 -0.63453 -1.21793
+       vertex -0.327179 -0.63666 -1.22104
+    endloop
+  endfacet
+  facet normal 0.0477452 -0.570947 -0.819597
+    outer loop
+       vertex -0.327179 -0.63666 -1.22104
+       vertex -0.24843 -0.63453 -1.21793
+       vertex -0.249379 -0.701375 -1.17142
+    endloop
+  endfacet
+  facet normal 0.0484134 -0.570404 -0.819936
+    outer loop
+       vertex -0.327179 -0.63666 -1.22104
+       vertex -0.249379 -0.701375 -1.17142
+       vertex -0.327179 -0.703796 -1.17433
+    endloop
+  endfacet
+  facet normal 0.0485719 -0.661499 -0.748372
+    outer loop
+       vertex -0.327179 -0.703796 -1.17433
+       vertex -0.249379 -0.701375 -1.17142
+       vertex -0.249759 -0.762037 -1.11783
+    endloop
+  endfacet
+  facet normal 0.0488436 -0.661295 -0.748534
+    outer loop
+       vertex -0.327179 -0.703796 -1.17433
+       vertex -0.249759 -0.762037 -1.11783
+       vertex -0.327179 -0.764719 -1.12051
+    endloop
+  endfacet
+  facet normal 0.126626 -0.0429849 -0.991019
+    outer loop
+       vertex -0.241404 -0.153076 -1.34716
+       vertex -0.156517 -0.153076 -1.33632
+       vertex -0.157272 -0.237521 -1.33275
+    endloop
+  endfacet
+  facet normal 0.127173 -0.042432 -0.990972
+    outer loop
+       vertex -0.241404 -0.153076 -1.34716
+       vertex -0.157272 -0.237521 -1.33275
+       vertex -0.241784 -0.238471 -1.34355
+    endloop
+  endfacet
+  facet normal 0.127188 -0.128457 -0.983525
+    outer loop
+       vertex -0.241784 -0.238471 -1.34355
+       vertex -0.157272 -0.237521 -1.33275
+       vertex -0.159172 -0.321083 -1.32208
+    endloop
+  endfacet
+  facet normal 0.128457 -0.127188 -0.983525
+    outer loop
+       vertex -0.241784 -0.238471 -1.34355
+       vertex -0.159172 -0.321083 -1.32208
+       vertex -0.242733 -0.322982 -1.33275
+    endloop
+  endfacet
+  facet normal 0.128491 -0.214212 -0.968299
+    outer loop
+       vertex -0.242733 -0.322982 -1.33275
+       vertex -0.159172 -0.321083 -1.32208
+       vertex -0.161848 -0.402877 -1.30434
+    endloop
+  endfacet
+  facet normal 0.130164 -0.212567 -0.968438
+    outer loop
+       vertex -0.242733 -0.322982 -1.33275
+       vertex -0.161848 -0.402877 -1.30434
+       vertex -0.244063 -0.405728 -1.31477
+    endloop
+  endfacet
+  facet normal 0.13022 -0.300882 -0.944729
+    outer loop
+       vertex -0.244063 -0.405728 -1.31477
+       vertex -0.161848 -0.402877 -1.30434
+       vertex -0.164936 -0.48202 -1.27956
+    endloop
+  endfacet
+  facet normal 0.132011 -0.299162 -0.945027
+    outer loop
+       vertex -0.244063 -0.405728 -1.31477
+       vertex -0.164936 -0.48202 -1.27956
+       vertex -0.245582 -0.485823 -1.28962
+    endloop
+  endfacet
+  facet normal 0.132093 -0.388847 -0.911784
+    outer loop
+       vertex -0.245582 -0.485823 -1.28962
+       vertex -0.164936 -0.48202 -1.27956
+       vertex -0.168068 -0.557627 -1.24777
+    endloop
+  endfacet
+  facet normal 0.133746 -0.387304 -0.912199
+    outer loop
+       vertex -0.245582 -0.485823 -1.28962
+       vertex -0.168068 -0.557627 -1.24777
+       vertex -0.247101 -0.562384 -1.25734
+    endloop
+  endfacet
+  facet normal 0.133865 -0.47815 -0.868017
+    outer loop
+       vertex -0.247101 -0.562384 -1.25734
+       vertex -0.168068 -0.557627 -1.24777
+       vertex -0.170834 -0.628833 -1.20897
+    endloop
+  endfacet
+  facet normal 0.135277 -0.476878 -0.868497
+    outer loop
+       vertex -0.247101 -0.562384 -1.25734
+       vertex -0.170834 -0.628833 -1.20897
+       vertex -0.24843 -0.63453 -1.21793
+    endloop
+  endfacet
+  facet normal 0.135422 -0.567993 -0.811816
+    outer loop
+       vertex -0.24843 -0.63453 -1.21793
+       vertex -0.170834 -0.628833 -1.20897
+       vertex -0.172822 -0.694772 -1.16317
+    endloop
+  endfacet
+  facet normal 0.136454 -0.567105 -0.812264
+    outer loop
+       vertex -0.24843 -0.63453 -1.21793
+       vertex -0.172822 -0.694772 -1.16317
+       vertex -0.249379 -0.701375 -1.17142
+    endloop
+  endfacet
+  facet normal 0.136575 -0.6567 -0.741682
+    outer loop
+       vertex -0.249379 -0.701375 -1.17142
+       vertex -0.172822 -0.694772 -1.16317
+       vertex -0.173622 -0.754577 -1.11037
+    endloop
+  endfacet
+  facet normal 0.137009 -0.656347 -0.741914
+    outer loop
+       vertex -0.249379 -0.701375 -1.17142
+       vertex -0.173622 -0.754577 -1.11037
+       vertex -0.249759 -0.762037 -1.11783
+    endloop
+  endfacet
+  facet normal 0.212067 -0.0439248 -0.976268
+    outer loop
+       vertex -0.156517 -0.153076 -1.33632
+       vertex -0.0734048 -0.153076 -1.31826
+       vertex -0.0745272 -0.236192 -1.31477
+    endloop
+  endfacet
+  facet normal 0.21284 -0.0431274 -0.976135
+    outer loop
+       vertex -0.156517 -0.153076 -1.33632
+       vertex -0.0745272 -0.236192 -1.31477
+       vertex -0.157272 -0.237521 -1.33275
+    endloop
+  endfacet
+  facet normal 0.212566 -0.130166 -0.968438
+    outer loop
+       vertex -0.157272 -0.237521 -1.33275
+       vertex -0.0745272 -0.236192 -1.31477
+       vertex -0.0773775 -0.318406 -1.30434
+    endloop
+  endfacet
+  facet normal 0.214212 -0.128491 -0.968299
+    outer loop
+       vertex -0.157272 -0.237521 -1.33275
+       vertex -0.0773775 -0.318406 -1.30434
+       vertex -0.159172 -0.321083 -1.32208
+    endloop
+  endfacet
+  facet normal 0.213702 -0.215667 -0.952796
+    outer loop
+       vertex -0.159172 -0.321083 -1.32208
+       vertex -0.0773775 -0.318406 -1.30434
+       vertex -0.0814389 -0.398816 -1.28705
+    endloop
+  endfacet
+  facet normal 0.215666 -0.213702 -0.952796
+    outer loop
+       vertex -0.159172 -0.321083 -1.32208
+       vertex -0.0814389 -0.398816 -1.28705
+       vertex -0.161848 -0.402877 -1.30434
+    endloop
+  endfacet
+  facet normal 0.214972 -0.301199 -0.929014
+    outer loop
+       vertex -0.161848 -0.402877 -1.30434
+       vertex -0.0814389 -0.398816 -1.28705
+       vertex -0.0861945 -0.476519 -1.26296
+    endloop
+  endfacet
+  facet normal 0.216819 -0.299389 -0.929169
+    outer loop
+       vertex -0.161848 -0.402877 -1.30434
+       vertex -0.0861945 -0.476519 -1.26296
+       vertex -0.164936 -0.48202 -1.27956
+    endloop
+  endfacet
+  facet normal 0.216027 -0.387327 -0.896276
+    outer loop
+       vertex -0.164936 -0.48202 -1.27956
+       vertex -0.0861945 -0.476519 -1.26296
+       vertex -0.0911277 -0.550613 -1.23213
+    endloop
+  endfacet
+  facet normal 0.21745 -0.385964 -0.896519
+    outer loop
+       vertex -0.164936 -0.48202 -1.27956
+       vertex -0.0911277 -0.550613 -1.23213
+       vertex -0.168068 -0.557627 -1.24777
+    endloop
+  endfacet
+  facet normal 0.216707 -0.474514 -0.853155
+    outer loop
+       vertex -0.168068 -0.557627 -1.24777
+       vertex -0.0911277 -0.550613 -1.23213
+       vertex -0.095544 -0.620266 -1.19451
+    endloop
+  endfacet
+  facet normal 0.217822 -0.473473 -0.85345
+    outer loop
+       vertex -0.168068 -0.557627 -1.24777
+       vertex -0.095544 -0.620266 -1.19451
+       vertex -0.170834 -0.628833 -1.20897
+    endloop
+  endfacet
+  facet normal 0.217264 -0.561937 -0.798138
+    outer loop
+       vertex -0.170834 -0.628833 -1.20897
+       vertex -0.095544 -0.620266 -1.19451
+       vertex -0.0987492 -0.684647 -1.15005
+    endloop
+  endfacet
+  facet normal 0.218085 -0.561192 -0.798437
+    outer loop
+       vertex -0.170834 -0.628833 -1.20897
+       vertex -0.0987492 -0.684647 -1.15005
+       vertex -0.172822 -0.694772 -1.16317
+    endloop
+  endfacet
+  facet normal 0.217805 -0.647908 -0.729915
+    outer loop
+       vertex -0.172822 -0.694772 -1.16317
+       vertex -0.0987492 -0.684647 -1.15005
+       vertex -0.100049 -0.742924 -1.09871
+    endloop
+  endfacet
+  facet normal 0.218197 -0.647566 -0.730101
+    outer loop
+       vertex -0.172822 -0.694772 -1.16317
+       vertex -0.100049 -0.742924 -1.09871
+       vertex -0.173622 -0.754577 -1.11037
+    endloop
+  endfacet
+  facet normal 0.299079 -0.04508 -0.953163
+    outer loop
+       vertex -0.0734048 -0.153076 -1.31826
+       vertex 0.00704463 -0.153076 -1.29302
+       vertex 0.00556791 -0.234673 -1.28962
+    endloop
+  endfacet
+  facet normal 0.299974 -0.0441302 -0.952926
+    outer loop
+       vertex -0.0734048 -0.153076 -1.31826
+       vertex 0.00556791 -0.234673 -1.28962
+       vertex -0.0745272 -0.236192 -1.31477
+    endloop
+  endfacet
+  facet normal 0.299161 -0.132014 -0.945026
+    outer loop
+       vertex -0.0745272 -0.236192 -1.31477
+       vertex 0.00556791 -0.234673 -1.28962
+       vertex 0.0017652 -0.315319 -1.27956
+    endloop
+  endfacet
+  facet normal 0.300883 -0.130221 -0.944728
+    outer loop
+       vertex -0.0745272 -0.236192 -1.31477
+       vertex 0.0017652 -0.315319 -1.27956
+       vertex -0.0773775 -0.318406 -1.30434
+    endloop
+  endfacet
+  facet normal 0.29939 -0.216818 -0.929169
+    outer loop
+       vertex -0.0773775 -0.318406 -1.30434
+       vertex 0.0017652 -0.315319 -1.27956
+       vertex -0.00373603 -0.39406 -1.26296
+    endloop
+  endfacet
+  facet normal 0.301199 -0.214972 -0.929014
+    outer loop
+       vertex -0.0773775 -0.318406 -1.30434
+       vertex -0.00373603 -0.39406 -1.26296
+       vertex -0.0814389 -0.398816 -1.28705
+    endloop
+  endfacet
+  facet normal 0.299184 -0.300575 -0.905618
+    outer loop
+       vertex -0.0814389 -0.398816 -1.28705
+       vertex -0.00373603 -0.39406 -1.26296
+       vertex -0.0103084 -0.469946 -1.23994
+    endloop
+  endfacet
+  facet normal 0.300574 -0.299184 -0.905618
+    outer loop
+       vertex -0.0814389 -0.398816 -1.28705
+       vertex -0.0103084 -0.469946 -1.23994
+       vertex -0.0861945 -0.476519 -1.26296
+    endloop
+  endfacet
+  facet normal 0.298268 -0.384239 -0.873726
+    outer loop
+       vertex -0.0861945 -0.476519 -1.26296
+       vertex -0.0103084 -0.469946 -1.23994
+       vertex -0.0173243 -0.542025 -1.21064
+    endloop
+  endfacet
+  facet normal 0.299024 -0.383498 -0.873793
+    outer loop
+       vertex -0.0861945 -0.476519 -1.26296
+       vertex -0.0173243 -0.542025 -1.21064
+       vertex -0.0911277 -0.550613 -1.23213
+    endloop
+  endfacet
+  facet normal 0.296773 -0.468718 -0.832003
+    outer loop
+       vertex -0.0911277 -0.550613 -1.23213
+       vertex -0.0173243 -0.542025 -1.21064
+       vertex -0.0237128 -0.609522 -1.1749
+    endloop
+  endfacet
+  facet normal 0.297261 -0.468247 -0.832094
+    outer loop
+       vertex -0.0911277 -0.550613 -1.23213
+       vertex -0.0237128 -0.609522 -1.1749
+       vertex -0.095544 -0.620266 -1.19451
+    endloop
+  endfacet
+  facet normal 0.295445 -0.553116 -0.778958
+    outer loop
+       vertex -0.095544 -0.620266 -1.19451
+       vertex -0.0237128 -0.609522 -1.1749
+       vertex -0.0284028 -0.67166 -1.13255
+    endloop
+  endfacet
+  facet normal 0.295886 -0.552697 -0.779088
+    outer loop
+       vertex -0.095544 -0.620266 -1.19451
+       vertex -0.0284028 -0.67166 -1.13255
+       vertex -0.0987492 -0.684647 -1.15005
+    endloop
+  endfacet
+  facet normal 0.294869 -0.635595 -0.713492
+    outer loop
+       vertex -0.0987492 -0.684647 -1.15005
+       vertex -0.0284028 -0.67166 -1.13255
+       vertex -0.0303231 -0.727665 -1.08345
+    endloop
+  endfacet
+  facet normal 0.295197 -0.635288 -0.71363
+    outer loop
+       vertex -0.0987492 -0.684647 -1.15005
+       vertex -0.0303231 -0.727665 -1.08345
+       vertex -0.100049 -0.742924 -1.09871
+    endloop
+  endfacet
+  facet normal 0.388007 -0.0463253 -0.920491
+    outer loop
+       vertex 0.00704463 -0.153076 -1.29302
+       vertex 0.0839438 -0.153076 -1.2606
+       vertex 0.0821297 -0.233154 -1.25734
+    endloop
+  endfacet
+  facet normal 0.388909 -0.0453323 -0.92016
+    outer loop
+       vertex 0.00704463 -0.153076 -1.29302
+       vertex 0.0821297 -0.233154 -1.25734
+       vertex 0.00556791 -0.234673 -1.28962
+    endloop
+  endfacet
+  facet normal 0.387306 -0.133746 -0.912199
+    outer loop
+       vertex 0.00556791 -0.234673 -1.28962
+       vertex 0.0821297 -0.233154 -1.25734
+       vertex 0.0773726 -0.312186 -1.24777
+    endloop
+  endfacet
+  facet normal 0.388845 -0.132096 -0.911784
+    outer loop
+       vertex 0.00556791 -0.234673 -1.28962
+       vertex 0.0773726 -0.312186 -1.24777
+       vertex 0.0017652 -0.315319 -1.27956
+    endloop
+  endfacet
+  facet normal 0.385963 -0.21745 -0.89652
+    outer loop
+       vertex 0.0017652 -0.315319 -1.27956
+       vertex 0.0773726 -0.312186 -1.24777
+       vertex 0.0703578 -0.389127 -1.23213
+    endloop
+  endfacet
+  facet normal 0.387327 -0.216026 -0.896276
+    outer loop
+       vertex 0.0017652 -0.315319 -1.27956
+       vertex 0.0703578 -0.389127 -1.23213
+       vertex -0.00373603 -0.39406 -1.26296
+    endloop
+  endfacet
+  facet normal 0.383497 -0.299025 -0.873793
+    outer loop
+       vertex -0.00373603 -0.39406 -1.26296
+       vertex 0.0703578 -0.389127 -1.23213
+       vertex 0.0617705 -0.462931 -1.21064
+    endloop
+  endfacet
+  facet normal 0.384239 -0.298268 -0.873726
+    outer loop
+       vertex -0.00373603 -0.39406 -1.26296
+       vertex 0.0617705 -0.462931 -1.21064
+       vertex -0.0103084 -0.469946 -1.23994
+    endloop
+  endfacet
+  facet normal 0.379858 -0.380045 -0.84337
+    outer loop
+       vertex -0.0103084 -0.469946 -1.23994
+       vertex 0.0617705 -0.462931 -1.21064
+       vertex 0.0522959 -0.532551 -1.18354
+    endloop
+  endfacet
+  facet normal 0.380045 -0.379858 -0.84337
+    outer loop
+       vertex -0.0103084 -0.469946 -1.23994
+       vertex 0.0522959 -0.532551 -1.18354
+       vertex -0.0173243 -0.542025 -1.21064
+    endloop
+  endfacet
+  facet normal 0.375706 -0.461367 -0.803733
+    outer loop
+       vertex -0.0173243 -0.542025 -1.21064
+       vertex 0.0522959 -0.532551 -1.18354
+       vertex 0.0435065 -0.597295 -1.15048
+    endloop
+  endfacet
+  facet normal 0.375838 -0.461236 -0.803746
+    outer loop
+       vertex -0.0173243 -0.542025 -1.21064
+       vertex 0.0435065 -0.597295 -1.15048
+       vertex -0.0237128 -0.609522 -1.1749
+    endloop
+  endfacet
+  facet normal 0.372253 -0.541996 -0.753437
+    outer loop
+       vertex -0.0237128 -0.609522 -1.1749
+       vertex 0.0435065 -0.597295 -1.15048
+       vertex 0.0369749 -0.656471 -1.11114
+    endloop
+  endfacet
+  facet normal 0.372642 -0.54161 -0.753523
+    outer loop
+       vertex -0.0237128 -0.609522 -1.1749
+       vertex 0.0369749 -0.656471 -1.11114
+       vertex -0.0284028 -0.67166 -1.13255
+    endloop
+  endfacet
+  facet normal 0.370576 -0.619783 -0.691767
+    outer loop
+       vertex -0.0284028 -0.67166 -1.13255
+       vertex 0.0369749 -0.656471 -1.11114
+       vertex 0.0342735 -0.709387 -1.06518
+    endloop
+  endfacet
+  facet normal 0.371044 -0.619312 -0.691939
+    outer loop
+       vertex -0.0284028 -0.67166 -1.13255
+       vertex 0.0342735 -0.709387 -1.06518
+       vertex -0.0303231 -0.727665 -1.08345
+    endloop
+  endfacet
+  facet normal 0.478724 -0.0475003 -0.87668
+    outer loop
+       vertex 0.0839438 -0.153076 -1.2606
+       vertex 0.156405 -0.153076 -1.22104
+       vertex 0.154275 -0.231825 -1.21793
+    endloop
+  endfacet
+  facet normal 0.479506 -0.0465961 -0.8763
+    outer loop
+       vertex 0.0839438 -0.153076 -1.2606
+       vertex 0.154275 -0.231825 -1.21793
+       vertex 0.0821297 -0.233154 -1.25734
+    endloop
+  endfacet
+  facet normal 0.476878 -0.135278 -0.868497
+    outer loop
+       vertex 0.0821297 -0.233154 -1.25734
+       vertex 0.154275 -0.231825 -1.21793
+       vertex 0.148579 -0.309421 -1.20897
+    endloop
+  endfacet
+  facet normal 0.47815 -0.133865 -0.868017
+    outer loop
+       vertex 0.0821297 -0.233154 -1.25734
+       vertex 0.148579 -0.309421 -1.20897
+       vertex 0.0773726 -0.312186 -1.24777
+    endloop
+  endfacet
+  facet normal 0.473474 -0.217822 -0.853449
+    outer loop
+       vertex 0.0773726 -0.312186 -1.24777
+       vertex 0.148579 -0.309421 -1.20897
+       vertex 0.140011 -0.384711 -1.19451
+    endloop
+  endfacet
+  facet normal 0.474514 -0.216707 -0.853155
+    outer loop
+       vertex 0.0773726 -0.312186 -1.24777
+       vertex 0.140011 -0.384711 -1.19451
+       vertex 0.0703578 -0.389127 -1.23213
+    endloop
+  endfacet
+  facet normal 0.468247 -0.297262 -0.832094
+    outer loop
+       vertex 0.0703578 -0.389127 -1.23213
+       vertex 0.140011 -0.384711 -1.19451
+       vertex 0.129267 -0.456542 -1.1749
+    endloop
+  endfacet
+  facet normal 0.468718 -0.296773 -0.832003
+    outer loop
+       vertex 0.0703578 -0.389127 -1.23213
+       vertex 0.129267 -0.456542 -1.1749
+       vertex 0.0617705 -0.462931 -1.21064
+    endloop
+  endfacet
+  facet normal 0.461236 -0.375838 -0.803746
+    outer loop
+       vertex 0.0617705 -0.462931 -1.21064
+       vertex 0.129267 -0.456542 -1.1749
+       vertex 0.11704 -0.523761 -1.15048
+    endloop
+  endfacet
+  facet normal 0.461367 -0.375706 -0.803732
+    outer loop
+       vertex 0.0617705 -0.462931 -1.21064
+       vertex 0.11704 -0.523761 -1.15048
+       vertex 0.0522959 -0.532551 -1.18354
+    endloop
+  endfacet
+  facet normal 0.453469 -0.452544 -0.767834
+    outer loop
+       vertex 0.0522959 -0.532551 -1.18354
+       vertex 0.11704 -0.523761 -1.15048
+       vertex 0.105262 -0.585517 -1.12104
+    endloop
+  endfacet
+  facet normal 0.452545 -0.453469 -0.767834
+    outer loop
+       vertex 0.0522959 -0.532551 -1.18354
+       vertex 0.105262 -0.585517 -1.12104
+       vertex 0.0435065 -0.597295 -1.15048
+    endloop
+  endfacet
+  facet normal 0.445417 -0.527981 -0.723076
+    outer loop
+       vertex 0.0435065 -0.597295 -1.15048
+       vertex 0.105262 -0.585517 -1.12104
+       vertex 0.0958629 -0.640958 -1.08635
+    endloop
+  endfacet
+  facet normal 0.44384 -0.52958 -0.722877
+    outer loop
+       vertex 0.0435065 -0.597295 -1.15048
+       vertex 0.0958629 -0.640958 -1.08635
+       vertex 0.0369749 -0.656471 -1.11114
+    endloop
+  endfacet
+  facet normal 0.439351 -0.601507 -0.667203
+    outer loop
+       vertex 0.0369749 -0.656471 -1.11114
+       vertex 0.0958629 -0.640958 -1.08635
+       vertex 0.0917579 -0.689499 -1.04529
+    endloop
+  endfacet
+  facet normal 0.439022 -0.601856 -0.667105
+    outer loop
+       vertex 0.0369749 -0.656471 -1.11114
+       vertex 0.0917579 -0.689499 -1.04529
+       vertex 0.0342735 -0.709387 -1.06518
+    endloop
+  endfacet
+  facet normal 0.570404 -0.0484132 -0.819936
+    outer loop
+       vertex 0.156405 -0.153076 -1.22104
+       vertex 0.223541 -0.153076 -1.17433
+       vertex 0.22112 -0.230875 -1.17142
+    endloop
+  endfacet
+  facet normal 0.570947 -0.0477455 -0.819597
+    outer loop
+       vertex 0.156405 -0.153076 -1.22104
+       vertex 0.22112 -0.230875 -1.17142
+       vertex 0.154275 -0.231825 -1.21793
+    endloop
+  endfacet
+  facet normal 0.567105 -0.136455 -0.812264
+    outer loop
+       vertex 0.154275 -0.231825 -1.21793
+       vertex 0.22112 -0.230875 -1.17142
+       vertex 0.214517 -0.307433 -1.16317
+    endloop
+  endfacet
+  facet normal 0.567993 -0.135423 -0.811816
+    outer loop
+       vertex 0.154275 -0.231825 -1.21793
+       vertex 0.214517 -0.307433 -1.16317
+       vertex 0.148579 -0.309421 -1.20897
+    endloop
+  endfacet
+  facet normal 0.561192 -0.218085 -0.798437
+    outer loop
+       vertex 0.148579 -0.309421 -1.20897
+       vertex 0.214517 -0.307433 -1.16317
+       vertex 0.204392 -0.381506 -1.15005
+    endloop
+  endfacet
+  facet normal 0.561937 -0.217264 -0.798138
+    outer loop
+       vertex 0.148579 -0.309421 -1.20897
+       vertex 0.204392 -0.381506 -1.15005
+       vertex 0.140011 -0.384711 -1.19451
+    endloop
+  endfacet
+  facet normal 0.552697 -0.295887 -0.779087
+    outer loop
+       vertex 0.140011 -0.384711 -1.19451
+       vertex 0.204392 -0.381506 -1.15005
+       vertex 0.191405 -0.451852 -1.13255
+    endloop
+  endfacet
+  facet normal 0.553116 -0.295446 -0.778957
+    outer loop
+       vertex 0.140011 -0.384711 -1.19451
+       vertex 0.191405 -0.451852 -1.13255
+       vertex 0.129267 -0.456542 -1.1749
+    endloop
+  endfacet
+  facet normal 0.54161 -0.372644 -0.753522
+    outer loop
+       vertex 0.129267 -0.456542 -1.1749
+       vertex 0.191405 -0.451852 -1.13255
+       vertex 0.176216 -0.51723 -1.11114
+    endloop
+  endfacet
+  facet normal 0.541997 -0.372253 -0.753436
+    outer loop
+       vertex 0.129267 -0.456542 -1.1749
+       vertex 0.176216 -0.51723 -1.11114
+       vertex 0.11704 -0.523761 -1.15048
+    endloop
+  endfacet
+  facet normal 0.529582 -0.443839 -0.722877
+    outer loop
+       vertex 0.11704 -0.523761 -1.15048
+       vertex 0.176216 -0.51723 -1.11114
+       vertex 0.160703 -0.576118 -1.08635
+    endloop
+  endfacet
+  facet normal 0.527982 -0.445417 -0.723076
+    outer loop
+       vertex 0.11704 -0.523761 -1.15048
+       vertex 0.160703 -0.576118 -1.08635
+       vertex 0.105262 -0.585517 -1.12104
+    endloop
+  endfacet
+  facet normal 0.515982 -0.513857 -0.685357
+    outer loop
+       vertex 0.105262 -0.585517 -1.12104
+       vertex 0.160703 -0.576118 -1.08635
+       vertex 0.14674 -0.626995 -1.05871
+    endloop
+  endfacet
+  facet normal 0.513857 -0.515982 -0.685357
+    outer loop
+       vertex 0.105262 -0.585517 -1.12104
+       vertex 0.14674 -0.626995 -1.05871
+       vertex 0.0958629 -0.640958 -1.08635
+    endloop
+  endfacet
+  facet normal 0.505666 -0.581828 -0.637007
+    outer loop
+       vertex 0.0958629 -0.640958 -1.08635
+       vertex 0.14674 -0.626995 -1.05871
+       vertex 0.140147 -0.669413 -1.0252
+    endloop
+  endfacet
+  facet normal 0.505852 -0.581623 -0.637047
+    outer loop
+       vertex 0.0958629 -0.640958 -1.08635
+       vertex 0.140147 -0.669413 -1.0252
+       vertex 0.0917579 -0.689499 -1.04529
+    endloop
+  endfacet
+  facet normal 0.661295 -0.0488431 -0.748534
+    outer loop
+       vertex 0.223541 -0.153076 -1.17433
+       vertex 0.284465 -0.153076 -1.12051
+       vertex 0.281783 -0.230496 -1.11783
+    endloop
+  endfacet
+  facet normal 0.661499 -0.0485718 -0.748372
+    outer loop
+       vertex 0.223541 -0.153076 -1.17433
+       vertex 0.281783 -0.230496 -1.11783
+       vertex 0.22112 -0.230875 -1.17142
+    endloop
+  endfacet
+  facet normal 0.656347 -0.13701 -0.741914
+    outer loop
+       vertex 0.22112 -0.230875 -1.17142
+       vertex 0.281783 -0.230496 -1.11783
+       vertex 0.274322 -0.306633 -1.11037
+    endloop
+  endfacet
+  facet normal 0.656699 -0.136576 -0.741683
+    outer loop
+       vertex 0.22112 -0.230875 -1.17142
+       vertex 0.274322 -0.306633 -1.11037
+       vertex 0.214517 -0.307433 -1.16317
+    endloop
+  endfacet
+  facet normal 0.647566 -0.218198 -0.730102
+    outer loop
+       vertex 0.214517 -0.307433 -1.16317
+       vertex 0.274322 -0.306633 -1.11037
+       vertex 0.262669 -0.380206 -1.09871
+    endloop
+  endfacet
+  facet normal 0.647908 -0.217806 -0.729915
+    outer loop
+       vertex 0.214517 -0.307433 -1.16317
+       vertex 0.262669 -0.380206 -1.09871
+       vertex 0.204392 -0.381506 -1.15005
+    endloop
+  endfacet
+  facet normal 0.635288 -0.295197 -0.71363
+    outer loop
+       vertex 0.204392 -0.381506 -1.15005
+       vertex 0.262669 -0.380206 -1.09871
+       vertex 0.247411 -0.449932 -1.08345
+    endloop
+  endfacet
+  facet normal 0.635594 -0.29487 -0.713492
+    outer loop
+       vertex 0.204392 -0.381506 -1.15005
+       vertex 0.247411 -0.449932 -1.08345
+       vertex 0.191405 -0.451852 -1.13255
+    endloop
+  endfacet
+  facet normal 0.619311 -0.371045 -0.691939
+    outer loop
+       vertex 0.191405 -0.451852 -1.13255
+       vertex 0.247411 -0.449932 -1.08345
+       vertex 0.229132 -0.514529 -1.06518
+    endloop
+  endfacet
+  facet normal 0.619782 -0.370577 -0.691768
+    outer loop
+       vertex 0.191405 -0.451852 -1.13255
+       vertex 0.229132 -0.514529 -1.06518
+       vertex 0.176216 -0.51723 -1.11114
+    endloop
+  endfacet
+  facet normal 0.601855 -0.439022 -0.667106
+    outer loop
+       vertex 0.176216 -0.51723 -1.11114
+       vertex 0.229132 -0.514529 -1.06518
+       vertex 0.209244 -0.572013 -1.04529
+    endloop
+  endfacet
+  facet normal 0.601507 -0.43935 -0.667204
+    outer loop
+       vertex 0.176216 -0.51723 -1.11114
+       vertex 0.209244 -0.572013 -1.04529
+       vertex 0.160703 -0.576118 -1.08635
+    endloop
+  endfacet
+  facet normal 0.581622 -0.505853 -0.637047
+    outer loop
+       vertex 0.160703 -0.576118 -1.08635
+       vertex 0.209244 -0.572013 -1.04529
+       vertex 0.189158 -0.620402 -1.0252
+    endloop
+  endfacet
+  facet normal 0.581828 -0.505666 -0.637007
+    outer loop
+       vertex 0.160703 -0.576118 -1.08635
+       vertex 0.189158 -0.620402 -1.0252
+       vertex 0.14674 -0.626995 -1.05871
+    endloop
+  endfacet
+  facet normal 0.562734 -0.568022 -0.600568
+    outer loop
+       vertex 0.14674 -0.626995 -1.05871
+       vertex 0.189158 -0.620402 -1.0252
+       vertex 0.173078 -0.653333 -1.00912
+    endloop
+  endfacet
+  facet normal 0.568022 -0.562733 -0.600568
+    outer loop
+       vertex 0.14674 -0.626995 -1.05871
+       vertex 0.173078 -0.653333 -1.00912
+       vertex 0.140147 -0.669413 -1.0252
+    endloop
+  endfacet
+  facet normal -0.0423597 -0.0421465 -0.998213
+    outer loop
+       vertex -0.327179 -0.153076 -1.35078
+       vertex -0.327179 -0.238851 -1.34716
+       vertex -0.412574 -0.238471 -1.34355
+    endloop
+  endfacet
+  facet normal -0.0421465 -0.0423597 -0.998213
+    outer loop
+       vertex -0.327179 -0.153076 -1.35078
+       vertex -0.412574 -0.238471 -1.34355
+       vertex -0.412953 -0.153076 -1.34716
+    endloop
+  endfacet
+  facet normal -0.127173 -0.0424319 -0.990972
+    outer loop
+       vertex -0.412953 -0.153076 -1.34716
+       vertex -0.412574 -0.238471 -1.34355
+       vertex -0.497085 -0.237521 -1.33275
+    endloop
+  endfacet
+  facet normal -0.126626 -0.0429848 -0.991019
+    outer loop
+       vertex -0.412953 -0.153076 -1.34716
+       vertex -0.497085 -0.237521 -1.33275
+       vertex -0.497841 -0.153076 -1.33632
+    endloop
+  endfacet
+  facet normal -0.212842 -0.0431273 -0.976134
+    outer loop
+       vertex -0.497841 -0.153076 -1.33632
+       vertex -0.497085 -0.237521 -1.33275
+       vertex -0.57983 -0.236192 -1.31477
+    endloop
+  endfacet
+  facet normal -0.212067 -0.0439261 -0.976267
+    outer loop
+       vertex -0.497841 -0.153076 -1.33632
+       vertex -0.57983 -0.236192 -1.31477
+       vertex -0.580953 -0.153076 -1.31826
+    endloop
+  endfacet
+  facet normal -0.299974 -0.0441314 -0.952926
+    outer loop
+       vertex -0.580953 -0.153076 -1.31826
+       vertex -0.57983 -0.236192 -1.31477
+       vertex -0.659926 -0.234673 -1.28962
+    endloop
+  endfacet
+  facet normal -0.299079 -0.0450811 -0.953163
+    outer loop
+       vertex -0.580953 -0.153076 -1.31826
+       vertex -0.659926 -0.234673 -1.28962
+       vertex -0.661402 -0.153076 -1.29302
+    endloop
+  endfacet
+  facet normal -0.388908 -0.0453332 -0.920161
+    outer loop
+       vertex -0.661402 -0.153076 -1.29302
+       vertex -0.659926 -0.234673 -1.28962
+       vertex -0.736487 -0.233154 -1.25734
+    endloop
+  endfacet
+  facet normal -0.388007 -0.0463251 -0.920492
+    outer loop
+       vertex -0.661402 -0.153076 -1.29302
+       vertex -0.736487 -0.233154 -1.25734
+       vertex -0.738301 -0.153076 -1.2606
+    endloop
+  endfacet
+  facet normal -0.479506 -0.0465959 -0.876301
+    outer loop
+       vertex -0.738301 -0.153076 -1.2606
+       vertex -0.736487 -0.233154 -1.25734
+       vertex -0.808633 -0.231825 -1.21793
+    endloop
+  endfacet
+  facet normal -0.478724 -0.0474997 -0.87668
+    outer loop
+       vertex -0.738301 -0.153076 -1.2606
+       vertex -0.808633 -0.231825 -1.21793
+       vertex -0.810763 -0.153076 -1.22104
+    endloop
+  endfacet
+  facet normal -0.570947 -0.0477448 -0.819597
+    outer loop
+       vertex -0.810763 -0.153076 -1.22104
+       vertex -0.808633 -0.231825 -1.21793
+       vertex -0.875478 -0.230875 -1.17142
+    endloop
+  endfacet
+  facet normal -0.570404 -0.0484129 -0.819936
+    outer loop
+       vertex -0.810763 -0.153076 -1.22104
+       vertex -0.875478 -0.230875 -1.17142
+       vertex -0.877899 -0.153076 -1.17433
+    endloop
+  endfacet
+  facet normal -0.661499 -0.0485714 -0.748371
+    outer loop
+       vertex -0.877899 -0.153076 -1.17433
+       vertex -0.875478 -0.230875 -1.17142
+       vertex -0.93614 -0.230495 -1.11783
+    endloop
+  endfacet
+  facet normal -0.661295 -0.0488431 -0.748534
+    outer loop
+       vertex -0.877899 -0.153076 -1.17433
+       vertex -0.93614 -0.230495 -1.11783
+       vertex -0.938822 -0.153076 -1.12051
+    endloop
+  endfacet
+  facet normal -0.0429849 -0.126626 -0.991019
+    outer loop
+       vertex -0.327179 -0.238851 -1.34716
+       vertex -0.327179 -0.323738 -1.33632
+       vertex -0.411624 -0.322982 -1.33275
+    endloop
+  endfacet
+  facet normal -0.042432 -0.127173 -0.990972
+    outer loop
+       vertex -0.327179 -0.238851 -1.34716
+       vertex -0.411624 -0.322982 -1.33275
+       vertex -0.412574 -0.238471 -1.34355
+    endloop
+  endfacet
+  facet normal -0.128457 -0.127188 -0.983525
+    outer loop
+       vertex -0.412574 -0.238471 -1.34355
+       vertex -0.411624 -0.322982 -1.33275
+       vertex -0.495186 -0.321083 -1.32208
+    endloop
+  endfacet
+  facet normal -0.127188 -0.128457 -0.983525
+    outer loop
+       vertex -0.412574 -0.238471 -1.34355
+       vertex -0.495186 -0.321083 -1.32208
+       vertex -0.497085 -0.237521 -1.33275
+    endloop
+  endfacet
+  facet normal -0.214212 -0.128491 -0.968299
+    outer loop
+       vertex -0.497085 -0.237521 -1.33275
+       vertex -0.495186 -0.321083 -1.32208
+       vertex -0.57698 -0.318406 -1.30434
+    endloop
+  endfacet
+  facet normal -0.212567 -0.130165 -0.968438
+    outer loop
+       vertex -0.497085 -0.237521 -1.33275
+       vertex -0.57698 -0.318406 -1.30434
+       vertex -0.57983 -0.236192 -1.31477
+    endloop
+  endfacet
+  facet normal -0.300882 -0.13022 -0.944729
+    outer loop
+       vertex -0.57983 -0.236192 -1.31477
+       vertex -0.57698 -0.318406 -1.30434
+       vertex -0.656123 -0.315318 -1.27956
+    endloop
+  endfacet
+  facet normal -0.299161 -0.132012 -0.945027
+    outer loop
+       vertex -0.57983 -0.236192 -1.31477
+       vertex -0.656123 -0.315318 -1.27956
+       vertex -0.659926 -0.234673 -1.28962
+    endloop
+  endfacet
+  facet normal -0.388846 -0.132093 -0.911784
+    outer loop
+       vertex -0.659926 -0.234673 -1.28962
+       vertex -0.656123 -0.315318 -1.27956
+       vertex -0.73173 -0.312186 -1.24777
+    endloop
+  endfacet
+  facet normal -0.387305 -0.133745 -0.912199
+    outer loop
+       vertex -0.659926 -0.234673 -1.28962
+       vertex -0.73173 -0.312186 -1.24777
+       vertex -0.736487 -0.233154 -1.25734
+    endloop
+  endfacet
+  facet normal -0.47815 -0.133865 -0.868017
+    outer loop
+       vertex -0.736487 -0.233154 -1.25734
+       vertex -0.73173 -0.312186 -1.24777
+       vertex -0.802936 -0.309421 -1.20897
+    endloop
+  endfacet
+  facet normal -0.476878 -0.135278 -0.868497
+    outer loop
+       vertex -0.736487 -0.233154 -1.25734
+       vertex -0.802936 -0.309421 -1.20897
+       vertex -0.808633 -0.231825 -1.21793
+    endloop
+  endfacet
+  facet normal -0.567993 -0.135422 -0.811816
+    outer loop
+       vertex -0.808633 -0.231825 -1.21793
+       vertex -0.802936 -0.309421 -1.20897
+       vertex -0.868875 -0.307433 -1.16317
+    endloop
+  endfacet
+  facet normal -0.567105 -0.136454 -0.812264
+    outer loop
+       vertex -0.808633 -0.231825 -1.21793
+       vertex -0.868875 -0.307433 -1.16317
+       vertex -0.875478 -0.230875 -1.17142
+    endloop
+  endfacet
+  facet normal -0.656699 -0.136575 -0.741683
+    outer loop
+       vertex -0.875478 -0.230875 -1.17142
+       vertex -0.868875 -0.307433 -1.16317
+       vertex -0.92868 -0.306633 -1.11037
+    endloop
+  endfacet
+  facet normal -0.656348 -0.137009 -0.741914
+    outer loop
+       vertex -0.875478 -0.230875 -1.17142
+       vertex -0.92868 -0.306633 -1.11037
+       vertex -0.93614 -0.230495 -1.11783
+    endloop
+  endfacet
+  facet normal -0.0439248 -0.212067 -0.976268
+    outer loop
+       vertex -0.327179 -0.323738 -1.33632
+       vertex -0.327179 -0.40685 -1.31826
+       vertex -0.410295 -0.405728 -1.31477
+    endloop
+  endfacet
+  facet normal -0.0431275 -0.21284 -0.976135
+    outer loop
+       vertex -0.327179 -0.323738 -1.33632
+       vertex -0.410295 -0.405728 -1.31477
+       vertex -0.411624 -0.322982 -1.33275
+    endloop
+  endfacet
+  facet normal -0.130166 -0.212566 -0.968438
+    outer loop
+       vertex -0.411624 -0.322982 -1.33275
+       vertex -0.410295 -0.405728 -1.31477
+       vertex -0.492509 -0.402877 -1.30434
+    endloop
+  endfacet
+  facet normal -0.128491 -0.214212 -0.968299
+    outer loop
+       vertex -0.411624 -0.322982 -1.33275
+       vertex -0.492509 -0.402877 -1.30434
+       vertex -0.495186 -0.321083 -1.32208
+    endloop
+  endfacet
+  facet normal -0.215667 -0.213702 -0.952796
+    outer loop
+       vertex -0.495186 -0.321083 -1.32208
+       vertex -0.492509 -0.402877 -1.30434
+       vertex -0.572919 -0.398816 -1.28705
+    endloop
+  endfacet
+  facet normal -0.213702 -0.215666 -0.952796
+    outer loop
+       vertex -0.495186 -0.321083 -1.32208
+       vertex -0.572919 -0.398816 -1.28705
+       vertex -0.57698 -0.318406 -1.30434
+    endloop
+  endfacet
+  facet normal -0.301198 -0.214972 -0.929014
+    outer loop
+       vertex -0.57698 -0.318406 -1.30434
+       vertex -0.572919 -0.398816 -1.28705
+       vertex -0.650622 -0.39406 -1.26296
+    endloop
+  endfacet
+  facet normal -0.299389 -0.216818 -0.92917
+    outer loop
+       vertex -0.57698 -0.318406 -1.30434
+       vertex -0.650622 -0.39406 -1.26296
+       vertex -0.656123 -0.315318 -1.27956
+    endloop
+  endfacet
+  facet normal -0.387327 -0.216027 -0.896276
+    outer loop
+       vertex -0.656123 -0.315318 -1.27956
+       vertex -0.650622 -0.39406 -1.26296
+       vertex -0.724715 -0.389127 -1.23213
+    endloop
+  endfacet
+  facet normal -0.385964 -0.21745 -0.89652
+    outer loop
+       vertex -0.656123 -0.315318 -1.27956
+       vertex -0.724715 -0.389127 -1.23213
+       vertex -0.73173 -0.312186 -1.24777
+    endloop
+  endfacet
+  facet normal -0.474514 -0.216707 -0.853155
+    outer loop
+       vertex -0.73173 -0.312186 -1.24777
+       vertex -0.724715 -0.389127 -1.23213
+       vertex -0.794369 -0.384711 -1.19451
+    endloop
+  endfacet
+  facet normal -0.473474 -0.217822 -0.85345
+    outer loop
+       vertex -0.73173 -0.312186 -1.24777
+       vertex -0.794369 -0.384711 -1.19451
+       vertex -0.802936 -0.309421 -1.20897
+    endloop
+  endfacet
+  facet normal -0.561937 -0.217264 -0.798138
+    outer loop
+       vertex -0.802936 -0.309421 -1.20897
+       vertex -0.794369 -0.384711 -1.19451
+       vertex -0.85875 -0.381506 -1.15005
+    endloop
+  endfacet
+  facet normal -0.561192 -0.218085 -0.798437
+    outer loop
+       vertex -0.802936 -0.309421 -1.20897
+       vertex -0.85875 -0.381506 -1.15005
+       vertex -0.868875 -0.307433 -1.16317
+    endloop
+  endfacet
+  facet normal -0.647908 -0.217805 -0.729915
+    outer loop
+       vertex -0.868875 -0.307433 -1.16317
+       vertex -0.85875 -0.381506 -1.15005
+       vertex -0.917027 -0.380206 -1.09871
+    endloop
+  endfacet
+  facet normal -0.647566 -0.218198 -0.730102
+    outer loop
+       vertex -0.868875 -0.307433 -1.16317
+       vertex -0.917027 -0.380206 -1.09871
+       vertex -0.92868 -0.306633 -1.11037
+    endloop
+  endfacet
+  facet normal -0.04508 -0.299079 -0.953163
+    outer loop
+       vertex -0.327179 -0.40685 -1.31826
+       vertex -0.327179 -0.487299 -1.29302
+       vertex -0.408776 -0.485823 -1.28962
+    endloop
+  endfacet
+  facet normal -0.0441302 -0.299975 -0.952926
+    outer loop
+       vertex -0.327179 -0.40685 -1.31826
+       vertex -0.408776 -0.485823 -1.28962
+       vertex -0.410295 -0.405728 -1.31477
+    endloop
+  endfacet
+  facet normal -0.132014 -0.299162 -0.945026
+    outer loop
+       vertex -0.410295 -0.405728 -1.31477
+       vertex -0.408776 -0.485823 -1.28962
+       vertex -0.489421 -0.48202 -1.27956
+    endloop
+  endfacet
+  facet normal -0.130222 -0.300883 -0.944728
+    outer loop
+       vertex -0.410295 -0.405728 -1.31477
+       vertex -0.489421 -0.48202 -1.27956
+       vertex -0.492509 -0.402877 -1.30434
+    endloop
+  endfacet
+  facet normal -0.216817 -0.29939 -0.929169
+    outer loop
+       vertex -0.492509 -0.402877 -1.30434
+       vertex -0.489421 -0.48202 -1.27956
+       vertex -0.568163 -0.476519 -1.26296
+    endloop
+  endfacet
+  facet normal -0.214972 -0.301198 -0.929014
+    outer loop
+       vertex -0.492509 -0.402877 -1.30434
+       vertex -0.568163 -0.476519 -1.26296
+       vertex -0.572919 -0.398816 -1.28705
+    endloop
+  endfacet
+  facet normal -0.300575 -0.299184 -0.905618
+    outer loop
+       vertex -0.572919 -0.398816 -1.28705
+       vertex -0.568163 -0.476519 -1.26296
+       vertex -0.644049 -0.469946 -1.23994
+    endloop
+  endfacet
+  facet normal -0.299184 -0.300575 -0.905618
+    outer loop
+       vertex -0.572919 -0.398816 -1.28705
+       vertex -0.644049 -0.469946 -1.23994
+       vertex -0.650622 -0.39406 -1.26296
+    endloop
+  endfacet
+  facet normal -0.384239 -0.298268 -0.873726
+    outer loop
+       vertex -0.650622 -0.39406 -1.26296
+       vertex -0.644049 -0.469946 -1.23994
+       vertex -0.716128 -0.46293 -1.21064
+    endloop
+  endfacet
+  facet normal -0.383498 -0.299025 -0.873793
+    outer loop
+       vertex -0.650622 -0.39406 -1.26296
+       vertex -0.716128 -0.46293 -1.21064
+       vertex -0.724715 -0.389127 -1.23213
+    endloop
+  endfacet
+  facet normal -0.468718 -0.296773 -0.832003
+    outer loop
+       vertex -0.724715 -0.389127 -1.23213
+       vertex -0.716128 -0.46293 -1.21064
+       vertex -0.783624 -0.456542 -1.1749
+    endloop
+  endfacet
+  facet normal -0.468247 -0.297262 -0.832094
+    outer loop
+       vertex -0.724715 -0.389127 -1.23213
+       vertex -0.783624 -0.456542 -1.1749
+       vertex -0.794369 -0.384711 -1.19451
+    endloop
+  endfacet
+  facet normal -0.553116 -0.295446 -0.778957
+    outer loop
+       vertex -0.794369 -0.384711 -1.19451
+       vertex -0.783624 -0.456542 -1.1749
+       vertex -0.845763 -0.451852 -1.13255
+    endloop
+  endfacet
+  facet normal -0.552697 -0.295887 -0.779088
+    outer loop
+       vertex -0.794369 -0.384711 -1.19451
+       vertex -0.845763 -0.451852 -1.13255
+       vertex -0.85875 -0.381506 -1.15005
+    endloop
+  endfacet
+  facet normal -0.635594 -0.29487 -0.713493
+    outer loop
+       vertex -0.85875 -0.381506 -1.15005
+       vertex -0.845763 -0.451852 -1.13255
+       vertex -0.901768 -0.449932 -1.08345
+    endloop
+  endfacet
+  facet normal -0.635288 -0.295196 -0.71363
+    outer loop
+       vertex -0.85875 -0.381506 -1.15005
+       vertex -0.901768 -0.449932 -1.08345
+       vertex -0.917027 -0.380206 -1.09871
+    endloop
+  endfacet
+  facet normal -0.0463254 -0.388007 -0.920492
+    outer loop
+       vertex -0.327179 -0.487299 -1.29302
+       vertex -0.327179 -0.564198 -1.2606
+       vertex -0.407257 -0.562384 -1.25734
+    endloop
+  endfacet
+  facet normal -0.0453322 -0.388909 -0.92016
+    outer loop
+       vertex -0.327179 -0.487299 -1.29302
+       vertex -0.407257 -0.562384 -1.25734
+       vertex -0.408776 -0.485823 -1.28962
+    endloop
+  endfacet
+  facet normal -0.133745 -0.387306 -0.912199
+    outer loop
+       vertex -0.408776 -0.485823 -1.28962
+       vertex -0.407257 -0.562384 -1.25734
+       vertex -0.486289 -0.557627 -1.24777
+    endloop
+  endfacet
+  facet normal -0.132096 -0.388845 -0.911784
+    outer loop
+       vertex -0.408776 -0.485823 -1.28962
+       vertex -0.486289 -0.557627 -1.24777
+       vertex -0.489421 -0.48202 -1.27956
+    endloop
+  endfacet
+  facet normal -0.21745 -0.385963 -0.89652
+    outer loop
+       vertex -0.489421 -0.48202 -1.27956
+       vertex -0.486289 -0.557627 -1.24777
+       vertex -0.56323 -0.550613 -1.23213
+    endloop
+  endfacet
+  facet normal -0.216026 -0.387327 -0.896276
+    outer loop
+       vertex -0.489421 -0.48202 -1.27956
+       vertex -0.56323 -0.550613 -1.23213
+       vertex -0.568163 -0.476519 -1.26296
+    endloop
+  endfacet
+  facet normal -0.299025 -0.383497 -0.873793
+    outer loop
+       vertex -0.568163 -0.476519 -1.26296
+       vertex -0.56323 -0.550613 -1.23213
+       vertex -0.637033 -0.542025 -1.21064
+    endloop
+  endfacet
+  facet normal -0.298268 -0.384239 -0.873726
+    outer loop
+       vertex -0.568163 -0.476519 -1.26296
+       vertex -0.637033 -0.542025 -1.21064
+       vertex -0.644049 -0.469946 -1.23994
+    endloop
+  endfacet
+  facet normal -0.380045 -0.379858 -0.84337
+    outer loop
+       vertex -0.644049 -0.469946 -1.23994
+       vertex -0.637033 -0.542025 -1.21064
+       vertex -0.706654 -0.532551 -1.18354
+    endloop
+  endfacet
+  facet normal -0.379858 -0.380045 -0.84337
+    outer loop
+       vertex -0.644049 -0.469946 -1.23994
+       vertex -0.706654 -0.532551 -1.18354
+       vertex -0.716128 -0.46293 -1.21064
+    endloop
+  endfacet
+  facet normal -0.461367 -0.375705 -0.803733
+    outer loop
+       vertex -0.716128 -0.46293 -1.21064
+       vertex -0.706654 -0.532551 -1.18354
+       vertex -0.771398 -0.523761 -1.15048
+    endloop
+  endfacet
+  facet normal -0.461236 -0.375837 -0.803746
+    outer loop
+       vertex -0.716128 -0.46293 -1.21064
+       vertex -0.771398 -0.523761 -1.15048
+       vertex -0.783624 -0.456542 -1.1749
+    endloop
+  endfacet
+  facet normal -0.541996 -0.372253 -0.753437
+    outer loop
+       vertex -0.783624 -0.456542 -1.1749
+       vertex -0.771398 -0.523761 -1.15048
+       vertex -0.830574 -0.51723 -1.11114
+    endloop
+  endfacet
+  facet normal -0.54161 -0.372642 -0.753523
+    outer loop
+       vertex -0.783624 -0.456542 -1.1749
+       vertex -0.830574 -0.51723 -1.11114
+       vertex -0.845763 -0.451852 -1.13255
+    endloop
+  endfacet
+  facet normal -0.619784 -0.370576 -0.691767
+    outer loop
+       vertex -0.845763 -0.451852 -1.13255
+       vertex -0.830574 -0.51723 -1.11114
+       vertex -0.883489 -0.514528 -1.06518
+    endloop
+  endfacet
+  facet normal -0.619311 -0.371045 -0.691939
+    outer loop
+       vertex -0.845763 -0.451852 -1.13255
+       vertex -0.883489 -0.514528 -1.06518
+       vertex -0.901768 -0.449932 -1.08345
+    endloop
+  endfacet
+  facet normal -0.0475001 -0.478724 -0.876679
+    outer loop
+       vertex -0.327179 -0.564198 -1.2606
+       vertex -0.327179 -0.63666 -1.22104
+       vertex -0.405928 -0.63453 -1.21793
+    endloop
+  endfacet
+  facet normal -0.0465963 -0.479506 -0.876301
+    outer loop
+       vertex -0.327179 -0.564198 -1.2606
+       vertex -0.405928 -0.63453 -1.21793
+       vertex -0.407257 -0.562384 -1.25734
+    endloop
+  endfacet
+  facet normal -0.135278 -0.476878 -0.868497
+    outer loop
+       vertex -0.407257 -0.562384 -1.25734
+       vertex -0.405928 -0.63453 -1.21793
+       vertex -0.483524 -0.628833 -1.20897
+    endloop
+  endfacet
+  facet normal -0.133865 -0.47815 -0.868017
+    outer loop
+       vertex -0.407257 -0.562384 -1.25734
+       vertex -0.483524 -0.628833 -1.20897
+       vertex -0.486289 -0.557627 -1.24777
+    endloop
+  endfacet
+  facet normal -0.217822 -0.473474 -0.85345
+    outer loop
+       vertex -0.486289 -0.557627 -1.24777
+       vertex -0.483524 -0.628833 -1.20897
+       vertex -0.558814 -0.620266 -1.19451
+    endloop
+  endfacet
+  facet normal -0.216707 -0.474514 -0.853155
+    outer loop
+       vertex -0.486289 -0.557627 -1.24777
+       vertex -0.558814 -0.620266 -1.19451
+       vertex -0.56323 -0.550613 -1.23213
+    endloop
+  endfacet
+  facet normal -0.297262 -0.468247 -0.832094
+    outer loop
+       vertex -0.56323 -0.550613 -1.23213
+       vertex -0.558814 -0.620266 -1.19451
+       vertex -0.630645 -0.609522 -1.1749
+    endloop
+  endfacet
+  facet normal -0.296773 -0.468717 -0.832003
+    outer loop
+       vertex -0.56323 -0.550613 -1.23213
+       vertex -0.630645 -0.609522 -1.1749
+       vertex -0.637033 -0.542025 -1.21064
+    endloop
+  endfacet
+  facet normal -0.375838 -0.461236 -0.803746
+    outer loop
+       vertex -0.637033 -0.542025 -1.21064
+       vertex -0.630645 -0.609522 -1.1749
+       vertex -0.697864 -0.597295 -1.15048
+    endloop
+  endfacet
+  facet normal -0.375706 -0.461367 -0.803732
+    outer loop
+       vertex -0.637033 -0.542025 -1.21064
+       vertex -0.697864 -0.597295 -1.15048
+       vertex -0.706654 -0.532551 -1.18354
+    endloop
+  endfacet
+  facet normal -0.452545 -0.453469 -0.767834
+    outer loop
+       vertex -0.706654 -0.532551 -1.18354
+       vertex -0.697864 -0.597295 -1.15048
+       vertex -0.75962 -0.585517 -1.12104
+    endloop
+  endfacet
+  facet normal -0.453469 -0.452545 -0.767834
+    outer loop
+       vertex -0.706654 -0.532551 -1.18354
+       vertex -0.75962 -0.585517 -1.12104
+       vertex -0.771398 -0.523761 -1.15048
+    endloop
+  endfacet
+  facet normal -0.527981 -0.445418 -0.723076
+    outer loop
+       vertex -0.771398 -0.523761 -1.15048
+       vertex -0.75962 -0.585517 -1.12104
+       vertex -0.81506 -0.576118 -1.08635
+    endloop
+  endfacet
+  facet normal -0.52958 -0.443839 -0.722877
+    outer loop
+       vertex -0.771398 -0.523761 -1.15048
+       vertex -0.81506 -0.576118 -1.08635
+       vertex -0.830574 -0.51723 -1.11114
+    endloop
+  endfacet
+  facet normal -0.601507 -0.43935 -0.667203
+    outer loop
+       vertex -0.830574 -0.51723 -1.11114
+       vertex -0.81506 -0.576118 -1.08635
+       vertex -0.863602 -0.572013 -1.04529
+    endloop
+  endfacet
+  facet normal -0.601856 -0.439022 -0.667105
+    outer loop
+       vertex -0.830574 -0.51723 -1.11114
+       vertex -0.863602 -0.572013 -1.04529
+       vertex -0.883489 -0.514528 -1.06518
+    endloop
+  endfacet
+  facet normal -0.0484129 -0.570404 -0.819936
+    outer loop
+       vertex -0.327179 -0.63666 -1.22104
+       vertex -0.327179 -0.703796 -1.17433
+       vertex -0.404978 -0.701375 -1.17142
+    endloop
+  endfacet
+  facet normal -0.0477453 -0.570947 -0.819597
+    outer loop
+       vertex -0.327179 -0.63666 -1.22104
+       vertex -0.404978 -0.701375 -1.17142
+       vertex -0.405928 -0.63453 -1.21793
+    endloop
+  endfacet
+  facet normal -0.136455 -0.567104 -0.812264
+    outer loop
+       vertex -0.405928 -0.63453 -1.21793
+       vertex -0.404978 -0.701375 -1.17142
+       vertex -0.481536 -0.694772 -1.16317
+    endloop
+  endfacet
+  facet normal -0.135422 -0.567993 -0.811816
+    outer loop
+       vertex -0.405928 -0.63453 -1.21793
+       vertex -0.481536 -0.694772 -1.16317
+       vertex -0.483524 -0.628833 -1.20897
+    endloop
+  endfacet
+  facet normal -0.218086 -0.561192 -0.798437
+    outer loop
+       vertex -0.483524 -0.628833 -1.20897
+       vertex -0.481536 -0.694772 -1.16317
+       vertex -0.555609 -0.684647 -1.15005
+    endloop
+  endfacet
+  facet normal -0.217264 -0.561937 -0.798138
+    outer loop
+       vertex -0.483524 -0.628833 -1.20897
+       vertex -0.555609 -0.684647 -1.15005
+       vertex -0.558814 -0.620266 -1.19451
+    endloop
+  endfacet
+  facet normal -0.295887 -0.552697 -0.779087
+    outer loop
+       vertex -0.558814 -0.620266 -1.19451
+       vertex -0.555609 -0.684647 -1.15005
+       vertex -0.625955 -0.67166 -1.13255
+    endloop
+  endfacet
+  facet normal -0.295446 -0.553116 -0.778957
+    outer loop
+       vertex -0.558814 -0.620266 -1.19451
+       vertex -0.625955 -0.67166 -1.13255
+       vertex -0.630645 -0.609522 -1.1749
+    endloop
+  endfacet
+  facet normal -0.372643 -0.54161 -0.753522
+    outer loop
+       vertex -0.630645 -0.609522 -1.1749
+       vertex -0.625955 -0.67166 -1.13255
+       vertex -0.691333 -0.656471 -1.11114
+    endloop
+  endfacet
+  facet normal -0.372254 -0.541997 -0.753436
+    outer loop
+       vertex -0.630645 -0.609522 -1.1749
+       vertex -0.691333 -0.656471 -1.11114
+       vertex -0.697864 -0.597295 -1.15048
+    endloop
+  endfacet
+  facet normal -0.443838 -0.529582 -0.722877
+    outer loop
+       vertex -0.697864 -0.597295 -1.15048
+       vertex -0.691333 -0.656471 -1.11114
+       vertex -0.750221 -0.640957 -1.08635
+    endloop
+  endfacet
+  facet normal -0.445418 -0.527981 -0.723076
+    outer loop
+       vertex -0.697864 -0.597295 -1.15048
+       vertex -0.750221 -0.640957 -1.08635
+       vertex -0.75962 -0.585517 -1.12104
+    endloop
+  endfacet
+  facet normal -0.513856 -0.515982 -0.685358
+    outer loop
+       vertex -0.75962 -0.585517 -1.12104
+       vertex -0.750221 -0.640957 -1.08635
+       vertex -0.801098 -0.626995 -1.05871
+    endloop
+  endfacet
+  facet normal -0.515981 -0.513857 -0.685358
+    outer loop
+       vertex -0.75962 -0.585517 -1.12104
+       vertex -0.801098 -0.626995 -1.05871
+       vertex -0.81506 -0.576118 -1.08635
+    endloop
+  endfacet
+  facet normal -0.581828 -0.505665 -0.637007
+    outer loop
+       vertex -0.81506 -0.576118 -1.08635
+       vertex -0.801098 -0.626995 -1.05871
+       vertex -0.843516 -0.620402 -1.0252
+    endloop
+  endfacet
+  facet normal -0.581623 -0.505852 -0.637047
+    outer loop
+       vertex -0.81506 -0.576118 -1.08635
+       vertex -0.843516 -0.620402 -1.0252
+       vertex -0.863602 -0.572013 -1.04529
+    endloop
+  endfacet
+  facet normal -0.0488431 -0.661295 -0.748534
+    outer loop
+       vertex -0.327179 -0.703796 -1.17433
+       vertex -0.327179 -0.764719 -1.12051
+       vertex -0.404599 -0.762037 -1.11783
+    endloop
+  endfacet
+  facet normal -0.0485714 -0.661499 -0.748372
+    outer loop
+       vertex -0.327179 -0.703796 -1.17433
+       vertex -0.404599 -0.762037 -1.11783
+       vertex -0.404978 -0.701375 -1.17142
+    endloop
+  endfacet
+  facet normal -0.13701 -0.656347 -0.741914
+    outer loop
+       vertex -0.404978 -0.701375 -1.17142
+       vertex -0.404599 -0.762037 -1.11783
+       vertex -0.480736 -0.754577 -1.11037
+    endloop
+  endfacet
+  facet normal -0.136576 -0.656699 -0.741683
+    outer loop
+       vertex -0.404978 -0.701375 -1.17142
+       vertex -0.480736 -0.754577 -1.11037
+       vertex -0.481536 -0.694772 -1.16317
+    endloop
+  endfacet
+  facet normal -0.218198 -0.647565 -0.730102
+    outer loop
+       vertex -0.481536 -0.694772 -1.16317
+       vertex -0.480736 -0.754577 -1.11037
+       vertex -0.554309 -0.742924 -1.09871
+    endloop
+  endfacet
+  facet normal -0.217806 -0.647908 -0.729915
+    outer loop
+       vertex -0.481536 -0.694772 -1.16317
+       vertex -0.554309 -0.742924 -1.09871
+       vertex -0.555609 -0.684647 -1.15005
+    endloop
+  endfacet
+  facet normal -0.295197 -0.635288 -0.71363
+    outer loop
+       vertex -0.555609 -0.684647 -1.15005
+       vertex -0.554309 -0.742924 -1.09871
+       vertex -0.624035 -0.727665 -1.08345
+    endloop
+  endfacet
+  facet normal -0.29487 -0.635595 -0.713492
+    outer loop
+       vertex -0.555609 -0.684647 -1.15005
+       vertex -0.624035 -0.727665 -1.08345
+       vertex -0.625955 -0.67166 -1.13255
+    endloop
+  endfacet
+  facet normal -0.371044 -0.619312 -0.691939
+    outer loop
+       vertex -0.625955 -0.67166 -1.13255
+       vertex -0.624035 -0.727665 -1.08345
+       vertex -0.688631 -0.709386 -1.06518
+    endloop
+  endfacet
+  facet normal -0.370577 -0.619782 -0.691768
+    outer loop
+       vertex -0.625955 -0.67166 -1.13255
+       vertex -0.688631 -0.709386 -1.06518
+       vertex -0.691333 -0.656471 -1.11114
+    endloop
+  endfacet
+  facet normal -0.439021 -0.601855 -0.667106
+    outer loop
+       vertex -0.691333 -0.656471 -1.11114
+       vertex -0.688631 -0.709386 -1.06518
+       vertex -0.746116 -0.689499 -1.04529
+    endloop
+  endfacet
+  facet normal -0.43935 -0.601506 -0.667205
+    outer loop
+       vertex -0.691333 -0.656471 -1.11114
+       vertex -0.746116 -0.689499 -1.04529
+       vertex -0.750221 -0.640957 -1.08635
+    endloop
+  endfacet
+  facet normal -0.505853 -0.581622 -0.637047
+    outer loop
+       vertex -0.750221 -0.640957 -1.08635
+       vertex -0.746116 -0.689499 -1.04529
+       vertex -0.794505 -0.669413 -1.0252
+    endloop
+  endfacet
+  facet normal -0.505665 -0.581829 -0.637007
+    outer loop
+       vertex -0.750221 -0.640957 -1.08635
+       vertex -0.794505 -0.669413 -1.0252
+       vertex -0.801098 -0.626995 -1.05871
+    endloop
+  endfacet
+  facet normal -0.568023 -0.562734 -0.600567
+    outer loop
+       vertex -0.801098 -0.626995 -1.05871
+       vertex -0.794505 -0.669413 -1.0252
+       vertex -0.827436 -0.653333 -1.00912
+    endloop
+  endfacet
+  facet normal -0.562734 -0.568022 -0.600567
+    outer loop
+       vertex -0.801098 -0.626995 -1.05871
+       vertex -0.827436 -0.653333 -1.00912
+       vertex -0.843516 -0.620402 -1.0252
+    endloop
+  endfacet
+  facet normal -0.0421465 0.0423597 -0.998213
+    outer loop
+       vertex -0.327179 -0.153076 -1.35078
+       vertex -0.412953 -0.153076 -1.34716
+       vertex -0.412574 -0.0676809 -1.34355
+    endloop
+  endfacet
+  facet normal -0.0423597 0.0421465 -0.998213
+    outer loop
+       vertex -0.327179 -0.153076 -1.35078
+       vertex -0.412574 -0.0676809 -1.34355
+       vertex -0.327179 -0.0673011 -1.34716
+    endloop
+  endfacet
+  facet normal -0.042432 0.127173 -0.990972
+    outer loop
+       vertex -0.327179 -0.0673011 -1.34716
+       vertex -0.412574 -0.0676809 -1.34355
+       vertex -0.411624 0.0168308 -1.33275
+    endloop
+  endfacet
+  facet normal -0.0429848 0.126626 -0.991019
+    outer loop
+       vertex -0.327179 -0.0673011 -1.34716
+       vertex -0.411624 0.0168308 -1.33275
+       vertex -0.327179 0.0175861 -1.33632
+    endloop
+  endfacet
+  facet normal -0.0431274 0.212842 -0.976134
+    outer loop
+       vertex -0.327179 0.0175861 -1.33632
+       vertex -0.411624 0.0168308 -1.33275
+       vertex -0.410295 0.0995758 -1.31477
+    endloop
+  endfacet
+  facet normal -0.0439261 0.212067 -0.976267
+    outer loop
+       vertex -0.327179 0.0175861 -1.33632
+       vertex -0.410295 0.0995758 -1.31477
+       vertex -0.327179 0.100698 -1.31826
+    endloop
+  endfacet
+  facet normal -0.0441314 0.299974 -0.952926
+    outer loop
+       vertex -0.327179 0.100698 -1.31826
+       vertex -0.410295 0.0995758 -1.31477
+       vertex -0.408776 0.179671 -1.28962
+    endloop
+  endfacet
+  facet normal -0.0450813 0.299079 -0.953163
+    outer loop
+       vertex -0.327179 0.100698 -1.31826
+       vertex -0.408776 0.179671 -1.28962
+       vertex -0.327179 0.181148 -1.29302
+    endloop
+  endfacet
+  facet normal -0.0453334 0.388908 -0.920161
+    outer loop
+       vertex -0.327179 0.181148 -1.29302
+       vertex -0.408776 0.179671 -1.28962
+       vertex -0.407257 0.256233 -1.25734
+    endloop
+  endfacet
+  facet normal -0.0463251 0.388007 -0.920491
+    outer loop
+       vertex -0.327179 0.181148 -1.29302
+       vertex -0.407257 0.256233 -1.25734
+       vertex -0.327179 0.258047 -1.2606
+    endloop
+  endfacet
+  facet normal -0.0465959 0.479506 -0.8763
+    outer loop
+       vertex -0.327179 0.258047 -1.2606
+       vertex -0.407257 0.256233 -1.25734
+       vertex -0.405928 0.328378 -1.21793
+    endloop
+  endfacet
+  facet normal -0.0475001 0.478724 -0.87668
+    outer loop
+       vertex -0.327179 0.258047 -1.2606
+       vertex -0.405928 0.328378 -1.21793
+       vertex -0.327179 0.330508 -1.22104
+    endloop
+  endfacet
+  facet normal -0.0477452 0.570947 -0.819597
+    outer loop
+       vertex -0.327179 0.330508 -1.22104
+       vertex -0.405928 0.328378 -1.21793
+       vertex -0.404978 0.395223 -1.17142
+    endloop
+  endfacet
+  facet normal -0.0484131 0.570404 -0.819936
+    outer loop
+       vertex -0.327179 0.330508 -1.22104
+       vertex -0.404978 0.395223 -1.17142
+       vertex -0.327179 0.397644 -1.17433
+    endloop
+  endfacet
+  facet normal -0.0485717 0.661499 -0.748372
+    outer loop
+       vertex -0.327179 0.397644 -1.17433
+       vertex -0.404978 0.395223 -1.17142
+       vertex -0.404598 0.455885 -1.11783
+    endloop
+  endfacet
+  facet normal -0.0488428 0.661295 -0.748534
+    outer loop
+       vertex -0.327179 0.397644 -1.17433
+       vertex -0.404598 0.455885 -1.11783
+       vertex -0.327179 0.458568 -1.12051
+    endloop
+  endfacet
+  facet normal -0.126626 0.0429848 -0.991019
+    outer loop
+       vertex -0.412953 -0.153076 -1.34716
+       vertex -0.497841 -0.153076 -1.33632
+       vertex -0.497085 -0.0686303 -1.33275
+    endloop
+  endfacet
+  facet normal -0.127173 0.042432 -0.990972
+    outer loop
+       vertex -0.412953 -0.153076 -1.34716
+       vertex -0.497085 -0.0686303 -1.33275
+       vertex -0.412574 -0.0676809 -1.34355
+    endloop
+  endfacet
+  facet normal -0.127188 0.128457 -0.983525
+    outer loop
+       vertex -0.412574 -0.0676809 -1.34355
+       vertex -0.497085 -0.0686303 -1.33275
+       vertex -0.495186 0.0149314 -1.32208
+    endloop
+  endfacet
+  facet normal -0.128457 0.127188 -0.983525
+    outer loop
+       vertex -0.412574 -0.0676809 -1.34355
+       vertex -0.495186 0.0149314 -1.32208
+       vertex -0.411624 0.0168308 -1.33275
+    endloop
+  endfacet
+  facet normal -0.128491 0.214212 -0.968299
+    outer loop
+       vertex -0.411624 0.0168308 -1.33275
+       vertex -0.495186 0.0149314 -1.32208
+       vertex -0.492509 0.0967255 -1.30434
+    endloop
+  endfacet
+  facet normal -0.130164 0.212567 -0.968438
+    outer loop
+       vertex -0.411624 0.0168308 -1.33275
+       vertex -0.492509 0.0967255 -1.30434
+       vertex -0.410295 0.0995758 -1.31477
+    endloop
+  endfacet
+  facet normal -0.13022 0.300882 -0.944729
+    outer loop
+       vertex -0.410295 0.0995758 -1.31477
+       vertex -0.492509 0.0967255 -1.30434
+       vertex -0.489421 0.175868 -1.27956
+    endloop
+  endfacet
+  facet normal -0.132012 0.299162 -0.945027
+    outer loop
+       vertex -0.410295 0.0995758 -1.31477
+       vertex -0.489421 0.175868 -1.27956
+       vertex -0.408776 0.179671 -1.28962
+    endloop
+  endfacet
+  facet normal -0.132093 0.388846 -0.911784
+    outer loop
+       vertex -0.408776 0.179671 -1.28962
+       vertex -0.489421 0.175868 -1.27956
+       vertex -0.486289 0.251476 -1.24777
+    endloop
+  endfacet
+  facet normal -0.133745 0.387305 -0.912199
+    outer loop
+       vertex -0.408776 0.179671 -1.28962
+       vertex -0.486289 0.251476 -1.24777
+       vertex -0.407257 0.256233 -1.25734
+    endloop
+  endfacet
+  facet normal -0.133865 0.47815 -0.868017
+    outer loop
+       vertex -0.407257 0.256233 -1.25734
+       vertex -0.486289 0.251476 -1.24777
+       vertex -0.483524 0.322682 -1.20897
+    endloop
+  endfacet
+  facet normal -0.135278 0.476878 -0.868497
+    outer loop
+       vertex -0.407257 0.256233 -1.25734
+       vertex -0.483524 0.322682 -1.20897
+       vertex -0.405928 0.328378 -1.21793
+    endloop
+  endfacet
+  facet normal -0.135423 0.567993 -0.811816
+    outer loop
+       vertex -0.405928 0.328378 -1.21793
+       vertex -0.483524 0.322682 -1.20897
+       vertex -0.481535 0.38862 -1.16317
+    endloop
+  endfacet
+  facet normal -0.136455 0.567105 -0.812264
+    outer loop
+       vertex -0.405928 0.328378 -1.21793
+       vertex -0.481535 0.38862 -1.16317
+       vertex -0.404978 0.395223 -1.17142
+    endloop
+  endfacet
+  facet normal -0.136576 0.656699 -0.741683
+    outer loop
+       vertex -0.404978 0.395223 -1.17142
+       vertex -0.481535 0.38862 -1.16317
+       vertex -0.480736 0.448425 -1.11037
+    endloop
+  endfacet
+  facet normal -0.13701 0.656347 -0.741914
+    outer loop
+       vertex -0.404978 0.395223 -1.17142
+       vertex -0.480736 0.448425 -1.11037
+       vertex -0.404598 0.455885 -1.11783
+    endloop
+  endfacet
+  facet normal -0.212067 0.0439247 -0.976268
+    outer loop
+       vertex -0.497841 -0.153076 -1.33632
+       vertex -0.580953 -0.153076 -1.31826
+       vertex -0.57983 -0.0699595 -1.31477
+    endloop
+  endfacet
+  facet normal -0.21284 0.0431274 -0.976135
+    outer loop
+       vertex -0.497841 -0.153076 -1.33632
+       vertex -0.57983 -0.0699595 -1.31477
+       vertex -0.497085 -0.0686303 -1.33275
+    endloop
+  endfacet
+  facet normal -0.212566 0.130166 -0.968438
+    outer loop
+       vertex -0.497085 -0.0686303 -1.33275
+       vertex -0.57983 -0.0699595 -1.31477
+       vertex -0.57698 0.0122546 -1.30434
+    endloop
+  endfacet
+  facet normal -0.214211 0.128491 -0.968299
+    outer loop
+       vertex -0.497085 -0.0686303 -1.33275
+       vertex -0.57698 0.0122546 -1.30434
+       vertex -0.495186 0.0149314 -1.32208
+    endloop
+  endfacet
+  facet normal -0.213702 0.215666 -0.952796
+    outer loop
+       vertex -0.495186 0.0149314 -1.32208
+       vertex -0.57698 0.0122546 -1.30434
+       vertex -0.572919 0.0926641 -1.28705
+    endloop
+  endfacet
+  facet normal -0.215666 0.213702 -0.952796
+    outer loop
+       vertex -0.495186 0.0149314 -1.32208
+       vertex -0.572919 0.0926641 -1.28705
+       vertex -0.492509 0.0967255 -1.30434
+    endloop
+  endfacet
+  facet normal -0.214972 0.301199 -0.929014
+    outer loop
+       vertex -0.492509 0.0967255 -1.30434
+       vertex -0.572919 0.0926641 -1.28705
+       vertex -0.568163 0.170367 -1.26296
+    endloop
+  endfacet
+  facet normal -0.216819 0.299389 -0.929169
+    outer loop
+       vertex -0.492509 0.0967255 -1.30434
+       vertex -0.568163 0.170367 -1.26296
+       vertex -0.489421 0.175868 -1.27956
+    endloop
+  endfacet
+  facet normal -0.216027 0.387327 -0.896276
+    outer loop
+       vertex -0.489421 0.175868 -1.27956
+       vertex -0.568163 0.170367 -1.26296
+       vertex -0.56323 0.244461 -1.23213
+    endloop
+  endfacet
+  facet normal -0.21745 0.385964 -0.896519
+    outer loop
+       vertex -0.489421 0.175868 -1.27956
+       vertex -0.56323 0.244461 -1.23213
+       vertex -0.486289 0.251476 -1.24777
+    endloop
+  endfacet
+  facet normal -0.216707 0.474515 -0.853155
+    outer loop
+       vertex -0.486289 0.251476 -1.24777
+       vertex -0.56323 0.244461 -1.23213
+       vertex -0.558814 0.314114 -1.19451
+    endloop
+  endfacet
+  facet normal -0.217822 0.473474 -0.853449
+    outer loop
+       vertex -0.486289 0.251476 -1.24777
+       vertex -0.558814 0.314114 -1.19451
+       vertex -0.483524 0.322682 -1.20897
+    endloop
+  endfacet
+  facet normal -0.217264 0.561937 -0.798137
+    outer loop
+       vertex -0.483524 0.322682 -1.20897
+       vertex -0.558814 0.314114 -1.19451
+       vertex -0.555608 0.378495 -1.15005
+    endloop
+  endfacet
+  facet normal -0.218085 0.561192 -0.798437
+    outer loop
+       vertex -0.483524 0.322682 -1.20897
+       vertex -0.555608 0.378495 -1.15005
+       vertex -0.481535 0.38862 -1.16317
+    endloop
+  endfacet
+  facet normal -0.217805 0.647908 -0.729915
+    outer loop
+       vertex -0.481535 0.38862 -1.16317
+       vertex -0.555608 0.378495 -1.15005
+       vertex -0.554309 0.436772 -1.09871
+    endloop
+  endfacet
+  facet normal -0.218198 0.647565 -0.730102
+    outer loop
+       vertex -0.481535 0.38862 -1.16317
+       vertex -0.554309 0.436772 -1.09871
+       vertex -0.480736 0.448425 -1.11037
+    endloop
+  endfacet
+  facet normal -0.299079 0.0450799 -0.953163
+    outer loop
+       vertex -0.580953 -0.153076 -1.31826
+       vertex -0.661402 -0.153076 -1.29302
+       vertex -0.659925 -0.0714786 -1.28962
+    endloop
+  endfacet
+  facet normal -0.299975 0.0441301 -0.952926
+    outer loop
+       vertex -0.580953 -0.153076 -1.31826
+       vertex -0.659925 -0.0714786 -1.28962
+       vertex -0.57983 -0.0699595 -1.31477
+    endloop
+  endfacet
+  facet normal -0.299162 0.132014 -0.945026
+    outer loop
+       vertex -0.57983 -0.0699595 -1.31477
+       vertex -0.659925 -0.0714786 -1.28962
+       vertex -0.656123 0.00916679 -1.27956
+    endloop
+  endfacet
+  facet normal -0.300883 0.130221 -0.944728
+    outer loop
+       vertex -0.57983 -0.0699595 -1.31477
+       vertex -0.656123 0.00916679 -1.27956
+       vertex -0.57698 0.0122546 -1.30434
+    endloop
+  endfacet
+  facet normal -0.29939 0.216817 -0.929169
+    outer loop
+       vertex -0.57698 0.0122546 -1.30434
+       vertex -0.656123 0.00916679 -1.27956
+       vertex -0.650622 0.0879085 -1.26296
+    endloop
+  endfacet
+  facet normal -0.301199 0.214972 -0.929014
+    outer loop
+       vertex -0.57698 0.0122546 -1.30434
+       vertex -0.650622 0.0879085 -1.26296
+       vertex -0.572919 0.0926641 -1.28705
+    endloop
+  endfacet
+  facet normal -0.299184 0.300574 -0.905618
+    outer loop
+       vertex -0.572919 0.0926641 -1.28705
+       vertex -0.650622 0.0879085 -1.26296
+       vertex -0.644049 0.163795 -1.23994
+    endloop
+  endfacet
+  facet normal -0.300574 0.299184 -0.905618
+    outer loop
+       vertex -0.572919 0.0926641 -1.28705
+       vertex -0.644049 0.163795 -1.23994
+       vertex -0.568163 0.170367 -1.26296
+    endloop
+  endfacet
+  facet normal -0.298268 0.384239 -0.873726
+    outer loop
+       vertex -0.568163 0.170367 -1.26296
+       vertex -0.644049 0.163795 -1.23994
+       vertex -0.637033 0.235874 -1.21064
+    endloop
+  endfacet
+  facet normal -0.299025 0.383497 -0.873793
+    outer loop
+       vertex -0.568163 0.170367 -1.26296
+       vertex -0.637033 0.235874 -1.21064
+       vertex -0.56323 0.244461 -1.23213
+    endloop
+  endfacet
+  facet normal -0.296773 0.468718 -0.832003
+    outer loop
+       vertex -0.56323 0.244461 -1.23213
+       vertex -0.637033 0.235874 -1.21064
+       vertex -0.630645 0.30337 -1.1749
+    endloop
+  endfacet
+  facet normal -0.297262 0.468247 -0.832094
+    outer loop
+       vertex -0.56323 0.244461 -1.23213
+       vertex -0.630645 0.30337 -1.1749
+       vertex -0.558814 0.314114 -1.19451
+    endloop
+  endfacet
+  facet normal -0.295446 0.553116 -0.778957
+    outer loop
+       vertex -0.558814 0.314114 -1.19451
+       vertex -0.630645 0.30337 -1.1749
+       vertex -0.625955 0.365508 -1.13255
+    endloop
+  endfacet
+  facet normal -0.295887 0.552697 -0.779088
+    outer loop
+       vertex -0.558814 0.314114 -1.19451
+       vertex -0.625955 0.365508 -1.13255
+       vertex -0.555608 0.378495 -1.15005
+    endloop
+  endfacet
+  facet normal -0.294869 0.635595 -0.713493
+    outer loop
+       vertex -0.555608 0.378495 -1.15005
+       vertex -0.625955 0.365508 -1.13255
+       vertex -0.624034 0.421514 -1.08345
+    endloop
+  endfacet
+  facet normal -0.295197 0.635288 -0.713631
+    outer loop
+       vertex -0.555608 0.378495 -1.15005
+       vertex -0.624034 0.421514 -1.08345
+       vertex -0.554309 0.436772 -1.09871
+    endloop
+  endfacet
+  facet normal -0.388007 0.0463254 -0.920492
+    outer loop
+       vertex -0.661402 -0.153076 -1.29302
+       vertex -0.738301 -0.153076 -1.2606
+       vertex -0.736487 -0.0729977 -1.25734
+    endloop
+  endfacet
+  facet normal -0.388909 0.0453322 -0.92016
+    outer loop
+       vertex -0.661402 -0.153076 -1.29302
+       vertex -0.736487 -0.0729977 -1.25734
+       vertex -0.659925 -0.0714786 -1.28962
+    endloop
+  endfacet
+  facet normal -0.387306 0.133745 -0.912199
+    outer loop
+       vertex -0.659925 -0.0714786 -1.28962
+       vertex -0.736487 -0.0729977 -1.25734
+       vertex -0.73173 0.00603466 -1.24777
+    endloop
+  endfacet
+  facet normal -0.388845 0.132095 -0.911784
+    outer loop
+       vertex -0.659925 -0.0714786 -1.28962
+       vertex -0.73173 0.00603466 -1.24777
+       vertex -0.656123 0.00916679 -1.27956
+    endloop
+  endfacet
+  facet normal -0.385963 0.21745 -0.89652
+    outer loop
+       vertex -0.656123 0.00916679 -1.27956
+       vertex -0.73173 0.00603466 -1.24777
+       vertex -0.724715 0.0829754 -1.23213
+    endloop
+  endfacet
+  facet normal -0.387327 0.216026 -0.896276
+    outer loop
+       vertex -0.656123 0.00916679 -1.27956
+       vertex -0.724715 0.0829754 -1.23213
+       vertex -0.650622 0.0879085 -1.26296
+    endloop
+  endfacet
+  facet normal -0.383498 0.299024 -0.873793
+    outer loop
+       vertex -0.650622 0.0879085 -1.26296
+       vertex -0.724715 0.0829754 -1.23213
+       vertex -0.716128 0.156779 -1.21064
+    endloop
+  endfacet
+  facet normal -0.384239 0.298268 -0.873726
+    outer loop
+       vertex -0.650622 0.0879085 -1.26296
+       vertex -0.716128 0.156779 -1.21064
+       vertex -0.644049 0.163795 -1.23994
+    endloop
+  endfacet
+  facet normal -0.379858 0.380046 -0.84337
+    outer loop
+       vertex -0.644049 0.163795 -1.23994
+       vertex -0.716128 0.156779 -1.21064
+       vertex -0.706653 0.226399 -1.18354
+    endloop
+  endfacet
+  facet normal -0.380045 0.379858 -0.84337
+    outer loop
+       vertex -0.644049 0.163795 -1.23994
+       vertex -0.706653 0.226399 -1.18354
+       vertex -0.637033 0.235874 -1.21064
+    endloop
+  endfacet
+  facet normal -0.375705 0.461367 -0.803732
+    outer loop
+       vertex -0.637033 0.235874 -1.21064
+       vertex -0.706653 0.226399 -1.18354
+       vertex -0.697864 0.291143 -1.15048
+    endloop
+  endfacet
+  facet normal -0.375838 0.461236 -0.803746
+    outer loop
+       vertex -0.637033 0.235874 -1.21064
+       vertex -0.697864 0.291143 -1.15048
+       vertex -0.630645 0.30337 -1.1749
+    endloop
+  endfacet
+  facet normal -0.372253 0.541996 -0.753437
+    outer loop
+       vertex -0.630645 0.30337 -1.1749
+       vertex -0.697864 0.291143 -1.15048
+       vertex -0.691333 0.35032 -1.11114
+    endloop
+  endfacet
+  facet normal -0.372642 0.54161 -0.753523
+    outer loop
+       vertex -0.630645 0.30337 -1.1749
+       vertex -0.691333 0.35032 -1.11114
+       vertex -0.625955 0.365508 -1.13255
+    endloop
+  endfacet
+  facet normal -0.370576 0.619783 -0.691767
+    outer loop
+       vertex -0.625955 0.365508 -1.13255
+       vertex -0.691333 0.35032 -1.11114
+       vertex -0.688631 0.403235 -1.06518
+    endloop
+  endfacet
+  facet normal -0.371044 0.619312 -0.691939
+    outer loop
+       vertex -0.625955 0.365508 -1.13255
+       vertex -0.688631 0.403235 -1.06518
+       vertex -0.624034 0.421514 -1.08345
+    endloop
+  endfacet
+  facet normal -0.478724 0.0475005 -0.876679
+    outer loop
+       vertex -0.738301 -0.153076 -1.2606
+       vertex -0.810763 -0.153076 -1.22104
+       vertex -0.808632 -0.0743269 -1.21793
+    endloop
+  endfacet
+  facet normal -0.479507 0.0465963 -0.8763
+    outer loop
+       vertex -0.738301 -0.153076 -1.2606
+       vertex -0.808632 -0.0743269 -1.21793
+       vertex -0.736487 -0.0729977 -1.25734
+    endloop
+  endfacet
+  facet normal -0.476878 0.135278 -0.868497
+    outer loop
+       vertex -0.736487 -0.0729977 -1.25734
+       vertex -0.808632 -0.0743269 -1.21793
+       vertex -0.802936 0.00326908 -1.20897
+    endloop
+  endfacet
+  facet normal -0.47815 0.133865 -0.868016
+    outer loop
+       vertex -0.736487 -0.0729977 -1.25734
+       vertex -0.802936 0.00326908 -1.20897
+       vertex -0.73173 0.00603466 -1.24777
+    endloop
+  endfacet
+  facet normal -0.473474 0.217822 -0.853449
+    outer loop
+       vertex -0.73173 0.00603466 -1.24777
+       vertex -0.802936 0.00326908 -1.20897
+       vertex -0.794369 0.0785591 -1.19451
+    endloop
+  endfacet
+  facet normal -0.474514 0.216708 -0.853155
+    outer loop
+       vertex -0.73173 0.00603466 -1.24777
+       vertex -0.794369 0.0785591 -1.19451
+       vertex -0.724715 0.0829754 -1.23213
+    endloop
+  endfacet
+  facet normal -0.468247 0.297262 -0.832094
+    outer loop
+       vertex -0.724715 0.0829754 -1.23213
+       vertex -0.794369 0.0785591 -1.19451
+       vertex -0.783624 0.15039 -1.1749
+    endloop
+  endfacet
+  facet normal -0.468718 0.296773 -0.832003
+    outer loop
+       vertex -0.724715 0.0829754 -1.23213
+       vertex -0.783624 0.15039 -1.1749
+       vertex -0.716128 0.156779 -1.21064
+    endloop
+  endfacet
+  facet normal -0.461237 0.375838 -0.803746
+    outer loop
+       vertex -0.716128 0.156779 -1.21064
+       vertex -0.783624 0.15039 -1.1749
+       vertex -0.771398 0.21761 -1.15048
+    endloop
+  endfacet
+  facet normal -0.461367 0.375706 -0.803732
+    outer loop
+       vertex -0.716128 0.156779 -1.21064
+       vertex -0.771398 0.21761 -1.15048
+       vertex -0.706653 0.226399 -1.18354
+    endloop
+  endfacet
+  facet normal -0.453469 0.452545 -0.767833
+    outer loop
+       vertex -0.706653 0.226399 -1.18354
+       vertex -0.771398 0.21761 -1.15048
+       vertex -0.75962 0.279365 -1.12104
+    endloop
+  endfacet
+  facet normal -0.452545 0.45347 -0.767833
+    outer loop
+       vertex -0.706653 0.226399 -1.18354
+       vertex -0.75962 0.279365 -1.12104
+       vertex -0.697864 0.291143 -1.15048
+    endloop
+  endfacet
+  facet normal -0.445418 0.527981 -0.723076
+    outer loop
+       vertex -0.697864 0.291143 -1.15048
+       vertex -0.75962 0.279365 -1.12104
+       vertex -0.750221 0.334806 -1.08635
+    endloop
+  endfacet
+  facet normal -0.44384 0.52958 -0.722877
+    outer loop
+       vertex -0.697864 0.291143 -1.15048
+       vertex -0.750221 0.334806 -1.08635
+       vertex -0.691333 0.35032 -1.11114
+    endloop
+  endfacet
+  facet normal -0.439351 0.601507 -0.667203
+    outer loop
+       vertex -0.691333 0.35032 -1.11114
+       vertex -0.750221 0.334806 -1.08635
+       vertex -0.746116 0.383347 -1.04529
+    endloop
+  endfacet
+  facet normal -0.439022 0.601856 -0.667105
+    outer loop
+       vertex -0.691333 0.35032 -1.11114
+       vertex -0.746116 0.383347 -1.04529
+       vertex -0.688631 0.403235 -1.06518
+    endloop
+  endfacet
+  facet normal -0.570404 0.0484138 -0.819936
+    outer loop
+       vertex -0.810763 -0.153076 -1.22104
+       vertex -0.877899 -0.153076 -1.17433
+       vertex -0.875478 -0.0752763 -1.17142
+    endloop
+  endfacet
+  facet normal -0.570947 0.0477457 -0.819597
+    outer loop
+       vertex -0.810763 -0.153076 -1.22104
+       vertex -0.875478 -0.0752763 -1.17142
+       vertex -0.808632 -0.0743269 -1.21793
+    endloop
+  endfacet
+  facet normal -0.567105 0.136454 -0.812264
+    outer loop
+       vertex -0.808632 -0.0743269 -1.21793
+       vertex -0.875478 -0.0752763 -1.17142
+       vertex -0.868875 0.001281 -1.16317
+    endloop
+  endfacet
+  facet normal -0.567993 0.135422 -0.811816
+    outer loop
+       vertex -0.808632 -0.0743269 -1.21793
+       vertex -0.868875 0.001281 -1.16317
+       vertex -0.802936 0.00326908 -1.20897
+    endloop
+  endfacet
+  facet normal -0.561192 0.218085 -0.798438
+    outer loop
+       vertex -0.802936 0.00326908 -1.20897
+       vertex -0.868875 0.001281 -1.16317
+       vertex -0.85875 0.0753539 -1.15005
+    endloop
+  endfacet
+  facet normal -0.561936 0.217264 -0.798138
+    outer loop
+       vertex -0.802936 0.00326908 -1.20897
+       vertex -0.85875 0.0753539 -1.15005
+       vertex -0.794369 0.0785591 -1.19451
+    endloop
+  endfacet
+  facet normal -0.552696 0.295887 -0.779088
+    outer loop
+       vertex -0.794369 0.0785591 -1.19451
+       vertex -0.85875 0.0753539 -1.15005
+       vertex -0.845763 0.1457 -1.13255
+    endloop
+  endfacet
+  facet normal -0.553116 0.295446 -0.778957
+    outer loop
+       vertex -0.794369 0.0785591 -1.19451
+       vertex -0.845763 0.1457 -1.13255
+       vertex -0.783624 0.15039 -1.1749
+    endloop
+  endfacet
+  facet normal -0.54161 0.372644 -0.753522
+    outer loop
+       vertex -0.783624 0.15039 -1.1749
+       vertex -0.845763 0.1457 -1.13255
+       vertex -0.830574 0.211078 -1.11114
+    endloop
+  endfacet
+  facet normal -0.541998 0.372253 -0.753436
+    outer loop
+       vertex -0.783624 0.15039 -1.1749
+       vertex -0.830574 0.211078 -1.11114
+       vertex -0.771398 0.21761 -1.15048
+    endloop
+  endfacet
+  facet normal -0.529582 0.443839 -0.722876
+    outer loop
+       vertex -0.771398 0.21761 -1.15048
+       vertex -0.830574 0.211078 -1.11114
+       vertex -0.81506 0.269966 -1.08635
+    endloop
+  endfacet
+  facet normal -0.527981 0.445418 -0.723076
+    outer loop
+       vertex -0.771398 0.21761 -1.15048
+       vertex -0.81506 0.269966 -1.08635
+       vertex -0.75962 0.279365 -1.12104
+    endloop
+  endfacet
+  facet normal -0.515981 0.513857 -0.685357
+    outer loop
+       vertex -0.75962 0.279365 -1.12104
+       vertex -0.81506 0.269966 -1.08635
+       vertex -0.801098 0.320843 -1.05871
+    endloop
+  endfacet
+  facet normal -0.513857 0.515981 -0.685357
+    outer loop
+       vertex -0.75962 0.279365 -1.12104
+       vertex -0.801098 0.320843 -1.05871
+       vertex -0.750221 0.334806 -1.08635
+    endloop
+  endfacet
+  facet normal -0.505666 0.581829 -0.637007
+    outer loop
+       vertex -0.750221 0.334806 -1.08635
+       vertex -0.801098 0.320843 -1.05871
+       vertex -0.794505 0.363261 -1.0252
+    endloop
+  endfacet
+  facet normal -0.505853 0.581623 -0.637047
+    outer loop
+       vertex -0.750221 0.334806 -1.08635
+       vertex -0.794505 0.363261 -1.0252
+       vertex -0.746116 0.383347 -1.04529
+    endloop
+  endfacet
+  facet normal -0.661295 0.0488436 -0.748534
+    outer loop
+       vertex -0.877899 -0.153076 -1.17433
+       vertex -0.938822 -0.153076 -1.12051
+       vertex -0.93614 -0.0756561 -1.11783
+    endloop
+  endfacet
+  facet normal -0.661499 0.0485724 -0.748372
+    outer loop
+       vertex -0.877899 -0.153076 -1.17433
+       vertex -0.93614 -0.0756561 -1.11783
+       vertex -0.875478 -0.0752763 -1.17142
+    endloop
+  endfacet
+  facet normal -0.656347 0.13701 -0.741914
+    outer loop
+       vertex -0.875478 -0.0752763 -1.17142
+       vertex -0.93614 -0.0756561 -1.11783
+       vertex -0.92868 0.00048133 -1.11037
+    endloop
+  endfacet
+  facet normal -0.6567 0.136575 -0.741682
+    outer loop
+       vertex -0.875478 -0.0752763 -1.17142
+       vertex -0.92868 0.00048133 -1.11037
+       vertex -0.868875 0.001281 -1.16317
+    endloop
+  endfacet
+  facet normal -0.647566 0.218198 -0.730101
+    outer loop
+       vertex -0.868875 0.001281 -1.16317
+       vertex -0.92868 0.00048133 -1.11037
+       vertex -0.917027 0.0740541 -1.09871
+    endloop
+  endfacet
+  facet normal -0.647909 0.217805 -0.729914
+    outer loop
+       vertex -0.868875 0.001281 -1.16317
+       vertex -0.917027 0.0740541 -1.09871
+       vertex -0.85875 0.0753539 -1.15005
+    endloop
+  endfacet
+  facet normal -0.635288 0.295196 -0.71363
+    outer loop
+       vertex -0.85875 0.0753539 -1.15005
+       vertex -0.917027 0.0740541 -1.09871
+       vertex -0.901768 0.14378 -1.08345
+    endloop
+  endfacet
+  facet normal -0.635594 0.29487 -0.713493
+    outer loop
+       vertex -0.85875 0.0753539 -1.15005
+       vertex -0.901768 0.14378 -1.08345
+       vertex -0.845763 0.1457 -1.13255
+    endloop
+  endfacet
+  facet normal -0.619311 0.371045 -0.691939
+    outer loop
+       vertex -0.845763 0.1457 -1.13255
+       vertex -0.901768 0.14378 -1.08345
+       vertex -0.883489 0.208377 -1.06518
+    endloop
+  endfacet
+  facet normal -0.619782 0.370578 -0.691768
+    outer loop
+       vertex -0.845763 0.1457 -1.13255
+       vertex -0.883489 0.208377 -1.06518
+       vertex -0.830574 0.211078 -1.11114
+    endloop
+  endfacet
+  facet normal -0.601855 0.439021 -0.667106
+    outer loop
+       vertex -0.830574 0.211078 -1.11114
+       vertex -0.883489 0.208377 -1.06518
+       vertex -0.863601 0.265861 -1.04529
+    endloop
+  endfacet
+  facet normal -0.601507 0.43935 -0.667204
+    outer loop
+       vertex -0.830574 0.211078 -1.11114
+       vertex -0.863601 0.265861 -1.04529
+       vertex -0.81506 0.269966 -1.08635
+    endloop
+  endfacet
+  facet normal -0.581622 0.505853 -0.637047
+    outer loop
+       vertex -0.81506 0.269966 -1.08635
+       vertex -0.863601 0.265861 -1.04529
+       vertex -0.843516 0.31425 -1.0252
+    endloop
+  endfacet
+  facet normal -0.581828 0.505666 -0.637007
+    outer loop
+       vertex -0.81506 0.269966 -1.08635
+       vertex -0.843516 0.31425 -1.0252
+       vertex -0.801098 0.320843 -1.05871
+    endloop
+  endfacet
+  facet normal -0.562734 0.568022 -0.600567
+    outer loop
+       vertex -0.801098 0.320843 -1.05871
+       vertex -0.843516 0.31425 -1.0252
+       vertex -0.827436 0.347181 -1.00912
+    endloop
+  endfacet
+  facet normal -0.568022 0.562734 -0.600567
+    outer loop
+       vertex -0.801098 0.320843 -1.05871
+       vertex -0.827436 0.347181 -1.00912
+       vertex -0.794505 0.363261 -1.0252
+    endloop
+  endfacet
+  facet normal -0 0 1
+    outer loop
+       vertex -0.327179 -0.153076 0.491135
+       vertex -0.212433 -0.153076 0.491135
+       vertex -0.212921 -0.0388184 0.491135
+    endloop
+  endfacet
+  facet normal 0 0 1
+    outer loop
+       vertex -0.327179 -0.153076 0.491135
+       vertex -0.212921 -0.0388184 0.491135
+       vertex -0.327179 -0.03833 0.491135
+    endloop
+  endfacet
+  facet normal 2.47702e-05 0.00579568 0.999983
+    outer loop
+       vertex -0.327179 -0.03833 0.491135
+       vertex -0.212921 -0.0388184 0.491135
+       vertex -0.214243 0.0748374 0.490477
+    endloop
+  endfacet
+  facet normal 4.95093e-05 0.005771 0.999983
+    outer loop
+       vertex -0.327179 -0.03833 0.491135
+       vertex -0.214243 0.0748374 0.490477
+       vertex -0.327179 0.0758114 0.490477
+    endloop
+  endfacet
+  facet normal 0.0001513 0.0175732 0.999846
+    outer loop
+       vertex -0.327179 0.0758114 0.490477
+       vertex -0.214243 0.0748374 0.490477
+       vertex -0.216257 0.187289 0.488501
+    endloop
+  endfacet
+  facet normal 0.000229429 0.0174955 0.999847
+    outer loop
+       vertex -0.327179 0.0758114 0.490477
+       vertex -0.216257 0.187289 0.488501
+       vertex -0.327179 0.188743 0.488501
+    endloop
+  endfacet
+  facet normal 0.000468257 0.0357077 0.999362
+    outer loop
+       vertex -0.327179 0.188743 0.488501
+       vertex -0.216257 0.187289 0.488501
+       vertex -0.218819 0.297934 0.484548
+    endloop
+  endfacet
+  facet normal 0.000632262 0.0355451 0.999368
+    outer loop
+       vertex -0.327179 0.188743 0.488501
+       vertex -0.218819 0.297934 0.484548
+       vertex -0.327179 0.299862 0.484548
+    endloop
+  endfacet
+  facet normal 0.00108103 0.0607746 0.998151
+    outer loop
+       vertex -0.327179 0.299862 0.484548
+       vertex -0.218819 0.297934 0.484548
+       vertex -0.221787 0.406171 0.477961
+    endloop
+  endfacet
+  facet normal 0.00137169 0.0604876 0.998168
+    outer loop
+       vertex -0.327179 0.299862 0.484548
+       vertex -0.221787 0.406171 0.477961
+       vertex -0.327179 0.408561 0.477961
+    endloop
+  endfacet
+  facet normal 0.00336275 0.148288 0.988939
+    outer loop
+       vertex -0.327179 0.408561 0.477961
+       vertex -0.221787 0.406171 0.477961
+       vertex -0.224856 0.506665 0.462903
+    endloop
+  endfacet
+  facet normal 0.00406646 0.14757 0.989043
+    outer loop
+       vertex -0.327179 0.408561 0.477961
+       vertex -0.224856 0.506665 0.462903
+       vertex -0.327179 0.509484 0.462903
+    endloop
+  endfacet
+  facet normal 0.00878155 0.318691 0.947818
+    outer loop
+       vertex -0.327179 0.509484 0.462903
+       vertex -0.224856 0.506665 0.462903
+       vertex -0.227722 0.59408 0.433537
+    endloop
+  endfacet
+  facet normal 0.010184 0.31721 0.948301
+    outer loop
+       vertex -0.327179 0.509484 0.462903
+       vertex -0.227722 0.59408 0.433537
+       vertex -0.327179 0.597273 0.433537
+    endloop
+  endfacet
+  facet normal 0.0187264 0.583289 0.812049
+    outer loop
+       vertex -0.327179 0.597273 0.433537
+       vertex -0.227722 0.59408 0.433537
+       vertex -0.230081 0.663083 0.384027
+    endloop
+  endfacet
+  facet normal 0.0208773 0.581201 0.813492
+    outer loop
+       vertex -0.327179 0.597273 0.433537
+       vertex -0.230081 0.663083 0.384027
+       vertex -0.327179 0.666571 0.384027
+    endloop
+  endfacet
+  facet normal 0.005771 4.95043e-05 0.999983
+    outer loop
+       vertex -0.212433 -0.153076 0.491135
+       vertex -0.0982914 -0.153076 0.490477
+       vertex -0.0992653 -0.0401406 0.490477
+    endloop
+  endfacet
+  facet normal 0.00579568 2.47656e-05 0.999983
+    outer loop
+       vertex -0.212433 -0.153076 0.491135
+       vertex -0.0992653 -0.0401406 0.490477
+       vertex -0.212921 -0.0388184 0.491135
+    endloop
+  endfacet
+  facet normal 0.00586488 0.0059822 0.999965
+    outer loop
+       vertex -0.212921 -0.0388184 0.491135
+       vertex -0.0992653 -0.0401406 0.490477
+       vertex -0.101917 0.0721853 0.48982
+    endloop
+  endfacet
+  facet normal 0.00598221 0.00586488 0.999965
+    outer loop
+       vertex -0.212921 -0.0388184 0.491135
+       vertex -0.101917 0.0721853 0.48982
+       vertex -0.214243 0.0748374 0.490477
+    endloop
+  endfacet
+  facet normal 0.00626669 0.01795 0.999819
+    outer loop
+       vertex -0.214243 0.0748374 0.490477
+       vertex -0.101917 0.0721853 0.48982
+       vertex -0.105977 0.183292 0.487851
+    endloop
+  endfacet
+  facet normal 0.00653025 0.017687 0.999822
+    outer loop
+       vertex -0.214243 0.0748374 0.490477
+       vertex -0.105977 0.183292 0.487851
+       vertex -0.216257 0.187289 0.488501
+    endloop
+  endfacet
+  facet normal 0.00720401 0.0363589 0.999313
+    outer loop
+       vertex -0.216257 0.187289 0.488501
+       vertex -0.105977 0.183292 0.487851
+       vertex -0.111175 0.292569 0.483912
+    endloop
+  endfacet
+  facet normal 0.00769079 0.0358736 0.999327
+    outer loop
+       vertex -0.216257 0.187289 0.488501
+       vertex -0.111175 0.292569 0.483912
+       vertex -0.218819 0.297934 0.484548
+    endloop
+  endfacet
+  facet normal 0.00897686 0.0618294 0.998046
+    outer loop
+       vertex -0.218819 0.297934 0.484548
+       vertex -0.111175 0.292569 0.483912
+       vertex -0.117241 0.399408 0.477348
+    endloop
+  endfacet
+  facet normal 0.00979858 0.0610099 0.998089
+    outer loop
+       vertex -0.218819 0.297934 0.484548
+       vertex -0.117241 0.399408 0.477348
+       vertex -0.221787 0.406171 0.477961
+    endloop
+  endfacet
+  facet normal 0.0155474 0.150748 0.98845
+    outer loop
+       vertex -0.221787 0.406171 0.477961
+       vertex -0.117241 0.399408 0.477348
+       vertex -0.123532 0.49856 0.462326
+    endloop
+  endfacet
+  facet normal 0.0175281 0.148689 0.988729
+    outer loop
+       vertex -0.221787 0.406171 0.477961
+       vertex -0.123532 0.49856 0.462326
+       vertex -0.224856 0.506665 0.462903
+    endloop
+  endfacet
+  facet normal 0.0312768 0.323651 0.945659
+    outer loop
+       vertex -0.224856 0.506665 0.462903
+       vertex -0.123532 0.49856 0.462326
+       vertex -0.129404 0.58478 0.433011
+    endloop
+  endfacet
+  facet normal 0.03527 0.319286 0.947002
+    outer loop
+       vertex -0.224856 0.506665 0.462903
+       vertex -0.129404 0.58478 0.433011
+       vertex -0.227722 0.59408 0.433537
+    endloop
+  endfacet
+  facet normal 0.0600783 0.589543 0.805499
+    outer loop
+       vertex -0.227722 0.59408 0.433537
+       vertex -0.129404 0.58478 0.433011
+       vertex -0.134213 0.652819 0.383572
+    endloop
+  endfacet
+  facet normal 0.0662835 0.583181 0.809633
+    outer loop
+       vertex -0.227722 0.59408 0.433537
+       vertex -0.134213 0.652819 0.383572
+       vertex -0.230081 0.663083 0.384027
+    endloop
+  endfacet
+  facet normal 0.0174955 0.000229415 0.999847
+    outer loop
+       vertex -0.0982914 -0.153076 0.490477
+       vertex 0.0146407 -0.153076 0.488501
+       vertex 0.0131862 -0.0421541 0.488501
+    endloop
+  endfacet
+  facet normal 0.0175732 0.000151285 0.999846
+    outer loop
+       vertex -0.0982914 -0.153076 0.490477
+       vertex 0.0131862 -0.0421541 0.488501
+       vertex -0.0992653 -0.0401406 0.490477
+    endloop
+  endfacet
+  facet normal 0.017687 0.00653024 0.999822
+    outer loop
+       vertex -0.0992653 -0.0401406 0.490477
+       vertex 0.0131862 -0.0421541 0.488501
+       vertex 0.00918925 0.0681253 0.487851
+    endloop
+  endfacet
+  facet normal 0.01795 0.00626667 0.999819
+    outer loop
+       vertex -0.0992653 -0.0401406 0.490477
+       vertex 0.00918925 0.0681253 0.487851
+       vertex -0.101917 0.0721853 0.48982
+    endloop
+  endfacet
+  facet normal 0.0184092 0.0189147 0.999652
+    outer loop
+       vertex -0.101917 0.0721853 0.48982
+       vertex 0.00918925 0.0681253 0.487851
+       vertex 0.00301646 0.177119 0.485902
+    endloop
+  endfacet
+  facet normal 0.0189147 0.0184092 0.999652
+    outer loop
+       vertex -0.101917 0.0721853 0.48982
+       vertex 0.00301646 0.177119 0.485902
+       vertex -0.105977 0.183292 0.487851
+    endloop
+  endfacet
+  facet normal 0.0200061 0.0378594 0.999083
+    outer loop
+       vertex -0.105977 0.183292 0.487851
+       vertex 0.00301646 0.177119 0.485902
+       vertex -0.0049655 0.284184 0.482005
+    endloop
+  endfacet
+  facet normal 0.0208644 0.0370009 0.999097
+    outer loop
+       vertex -0.105977 0.183292 0.487851
+       vertex -0.0049655 0.284184 0.482005
+       vertex -0.111175 0.292569 0.483912
+    endloop
+  endfacet
+  facet normal 0.0229775 0.0640897 0.99768
+    outer loop
+       vertex -0.111175 0.292569 0.483912
+       vertex -0.0049655 0.284184 0.482005
+       vertex -0.01439 0.388678 0.47551
+    endloop
+  endfacet
+  facet normal 0.0243776 0.0626848 0.997736
+    outer loop
+       vertex -0.111175 0.292569 0.483912
+       vertex -0.01439 0.388678 0.47551
+       vertex -0.117241 0.399408 0.477348
+    endloop
+  endfacet
+  facet normal 0.033872 0.155491 0.987256
+    outer loop
+       vertex -0.117241 0.399408 0.477348
+       vertex -0.01439 0.388678 0.47551
+       vertex -0.0242053 0.485525 0.460593
+    endloop
+  endfacet
+  facet normal 0.0371759 0.152004 0.98768
+    outer loop
+       vertex -0.117241 0.399408 0.477348
+       vertex -0.0242053 0.485525 0.460593
+       vertex -0.123532 0.49856 0.462326
+    endloop
+  endfacet
+  facet normal 0.0600837 0.332749 0.941099
+    outer loop
+       vertex -0.123532 0.49856 0.462326
+       vertex -0.0242053 0.485525 0.460593
+       vertex -0.0333596 0.56965 0.431433
+    endloop
+  endfacet
+  facet normal 0.0667363 0.325253 0.943269
+    outer loop
+       vertex -0.123532 0.49856 0.462326
+       vertex -0.0333596 0.56965 0.431433
+       vertex -0.129404 0.58478 0.433011
+    endloop
+  endfacet
+  facet normal 0.107582 0.600266 0.792532
+    outer loop
+       vertex -0.129404 0.58478 0.433011
+       vertex -0.0333596 0.56965 0.431433
+       vertex -0.0408013 0.635977 0.382207
+    endloop
+  endfacet
+  facet normal 0.117909 0.58917 0.79936
+    outer loop
+       vertex -0.129404 0.58478 0.433011
+       vertex -0.0408013 0.635977 0.382207
+       vertex -0.134213 0.652819 0.383572
+    endloop
+  endfacet
+  facet normal 0.0355451 0.00063222 0.999368
+    outer loop
+       vertex 0.0146407 -0.153076 0.488501
+       vertex 0.125759 -0.153076 0.484548
+       vertex 0.123831 -0.0447162 0.484548
+    endloop
+  endfacet
+  facet normal 0.0357077 0.000468228 0.999362
+    outer loop
+       vertex 0.0146407 -0.153076 0.488501
+       vertex 0.123831 -0.0447162 0.484548
+       vertex 0.0131862 -0.0421541 0.488501
+    endloop
+  endfacet
+  facet normal 0.0358736 0.00769077 0.999327
+    outer loop
+       vertex 0.0131862 -0.0421541 0.488501
+       vertex 0.123831 -0.0447162 0.484548
+       vertex 0.118467 0.0629272 0.483912
+    endloop
+  endfacet
+  facet normal 0.0363589 0.00720398 0.999313
+    outer loop
+       vertex 0.0131862 -0.0421541 0.488501
+       vertex 0.118467 0.0629272 0.483912
+       vertex 0.00918925 0.0681253 0.487851
+    endloop
+  endfacet
+  facet normal 0.0370009 0.0208644 0.999097
+    outer loop
+       vertex 0.00918925 0.0681253 0.487851
+       vertex 0.118467 0.0629272 0.483912
+       vertex 0.110082 0.169137 0.482005
+    endloop
+  endfacet
+  facet normal 0.0378594 0.0200061 0.999083
+    outer loop
+       vertex 0.00918925 0.0681253 0.487851
+       vertex 0.110082 0.169137 0.482005
+       vertex 0.00301646 0.177119 0.485902
+    endloop
+  endfacet
+  facet normal 0.0393816 0.0407609 0.998393
+    outer loop
+       vertex 0.00301646 0.177119 0.485902
+       vertex 0.110082 0.169137 0.482005
+       vertex 0.0990938 0.273196 0.47819
+    endloop
+  endfacet
+  facet normal 0.0407609 0.0393816 0.998393
+    outer loop
+       vertex 0.00301646 0.177119 0.485902
+       vertex 0.0990938 0.273196 0.47819
+       vertex -0.0049655 0.284184 0.482005
+    endloop
+  endfacet
+  facet normal 0.043755 0.0683228 0.996703
+    outer loop
+       vertex -0.0049655 0.284184 0.482005
+       vertex 0.0990938 0.273196 0.47819
+       vertex 0.0859205 0.374388 0.471832
+    endloop
+  endfacet
+  facet normal 0.0459616 0.0661052 0.996754
+    outer loop
+       vertex -0.0049655 0.284184 0.482005
+       vertex 0.0859205 0.374388 0.471832
+       vertex -0.01439 0.388678 0.47551
+    endloop
+  endfacet
+  facet normal 0.0594071 0.163581 0.98474
+    outer loop
+       vertex -0.01439 0.388678 0.47551
+       vertex 0.0859205 0.374388 0.471832
+       vertex 0.0721254 0.467913 0.457128
+    endloop
+  endfacet
+  facet normal 0.0643797 0.15828 0.985293
+    outer loop
+       vertex -0.01439 0.388678 0.47551
+       vertex 0.0721254 0.467913 0.457128
+       vertex -0.0242053 0.485525 0.460593
+    endloop
+  endfacet
+  facet normal 0.0970594 0.347372 0.932691
+    outer loop
+       vertex -0.0242053 0.485525 0.460593
+       vertex 0.0721254 0.467913 0.457128
+       vertex 0.0592722 0.548969 0.428277
+    endloop
+  endfacet
+  facet normal 0.106898 0.335998 0.935777
+    outer loop
+       vertex -0.0242053 0.485525 0.460593
+       vertex 0.0592722 0.548969 0.428277
+       vertex -0.0333596 0.56965 0.431433
+    endloop
+  endfacet
+  facet normal 0.163787 0.616038 0.7705
+    outer loop
+       vertex -0.0333596 0.56965 0.431433
+       vertex 0.0592722 0.548969 0.428277
+       vertex 0.0489247 0.612757 0.379476
+    endloop
+  endfacet
+  facet normal 0.17882 0.599222 0.780356
+    outer loop
+       vertex -0.0333596 0.56965 0.431433
+       vertex 0.0489247 0.612757 0.379476
+       vertex -0.0408013 0.635977 0.382207
+    endloop
+  endfacet
+  facet normal 0.0604875 0.00137163 0.998168
+    outer loop
+       vertex 0.125759 -0.153076 0.484548
+       vertex 0.234458 -0.153076 0.477961
+       vertex 0.232068 -0.0476842 0.477961
+    endloop
+  endfacet
+  facet normal 0.0607746 0.00108096 0.998151
+    outer loop
+       vertex 0.125759 -0.153076 0.484548
+       vertex 0.232068 -0.0476842 0.477961
+       vertex 0.123831 -0.0447162 0.484548
+    endloop
+  endfacet
+  facet normal 0.0610099 0.00979855 0.998089
+    outer loop
+       vertex 0.123831 -0.0447162 0.484548
+       vertex 0.232068 -0.0476842 0.477961
+       vertex 0.225305 0.056861 0.477348
+    endloop
+  endfacet
+  facet normal 0.0618295 0.00897682 0.998046
+    outer loop
+       vertex 0.123831 -0.0447162 0.484548
+       vertex 0.225305 0.056861 0.477348
+       vertex 0.118467 0.0629272 0.483912
+    endloop
+  endfacet
+  facet normal 0.0626848 0.0243778 0.997736
+    outer loop
+       vertex 0.118467 0.0629272 0.483912
+       vertex 0.225305 0.056861 0.477348
+       vertex 0.214576 0.159712 0.475509
+    endloop
+  endfacet
+  facet normal 0.06409 0.0229775 0.99768
+    outer loop
+       vertex 0.118467 0.0629272 0.483912
+       vertex 0.214576 0.159712 0.475509
+       vertex 0.110082 0.169137 0.482005
+    endloop
+  endfacet
+  facet normal 0.0661054 0.0459613 0.996754
+    outer loop
+       vertex 0.110082 0.169137 0.482005
+       vertex 0.214576 0.159712 0.475509
+       vertex 0.200286 0.260023 0.471832
+    endloop
+  endfacet
+  facet normal 0.0683229 0.0437549 0.996703
+    outer loop
+       vertex 0.110082 0.169137 0.482005
+       vertex 0.200286 0.260023 0.471832
+       vertex 0.0990938 0.273196 0.47819
+    endloop
+  endfacet
+  facet normal 0.0723704 0.0759175 0.994484
+    outer loop
+       vertex 0.0990938 0.273196 0.47819
+       vertex 0.200286 0.260023 0.471832
+       vertex 0.182843 0.356946 0.465702
+    endloop
+  endfacet
+  facet normal 0.0759175 0.0723704 0.994484
+    outer loop
+       vertex 0.0990938 0.273196 0.47819
+       vertex 0.182843 0.356946 0.465702
+       vertex 0.0859205 0.374388 0.471832
+    endloop
+  endfacet
+  facet normal 0.0938263 0.177072 0.979715
+    outer loop
+       vertex 0.0859205 0.374388 0.471832
+       vertex 0.182843 0.356946 0.465702
+       vertex 0.164461 0.446078 0.451353
+    endloop
+  endfacet
+  facet normal 0.1013 0.169076 0.980383
+    outer loop
+       vertex 0.0859205 0.374388 0.471832
+       vertex 0.164461 0.446078 0.451353
+       vertex 0.0721254 0.467913 0.457128
+    endloop
+  endfacet
+  facet normal 0.144927 0.370172 0.917589
+    outer loop
+       vertex 0.0721254 0.467913 0.457128
+       vertex 0.164461 0.446078 0.451353
+       vertex 0.147354 0.523016 0.423016
+    endloop
+  endfacet
+  facet normal 0.159171 0.353361 0.921846
+    outer loop
+       vertex 0.0721254 0.467913 0.457128
+       vertex 0.147354 0.523016 0.423016
+       vertex 0.0592722 0.548969 0.428277
+    endloop
+  endfacet
+  facet normal 0.231775 0.637734 0.734558
+    outer loop
+       vertex 0.0592722 0.548969 0.428277
+       vertex 0.147354 0.523016 0.423016
+       vertex 0.133737 0.583359 0.374925
+    endloop
+  endfacet
+  facet normal 0.252783 0.613421 0.748208
+    outer loop
+       vertex 0.0592722 0.548969 0.428277
+       vertex 0.133737 0.583359 0.374925
+       vertex 0.0489247 0.612757 0.379476
+    endloop
+  endfacet
+  facet normal 0.14757 0.00406633 0.989043
+    outer loop
+       vertex 0.234458 -0.153076 0.477961
+       vertex 0.335381 -0.153076 0.462903
+       vertex 0.332562 -0.0507537 0.462903
+    endloop
+  endfacet
+  facet normal 0.148288 0.0033626 0.988939
+    outer loop
+       vertex 0.234458 -0.153076 0.477961
+       vertex 0.332562 -0.0507537 0.462903
+       vertex 0.232068 -0.0476842 0.477961
+    endloop
+  endfacet
+  facet normal 0.148689 0.017528 0.988729
+    outer loop
+       vertex 0.232068 -0.0476842 0.477961
+       vertex 0.332562 -0.0507537 0.462903
+       vertex 0.324458 0.0505703 0.462326
+    endloop
+  endfacet
+  facet normal 0.150748 0.0155473 0.98845
+    outer loop
+       vertex 0.232068 -0.0476842 0.477961
+       vertex 0.324458 0.0505703 0.462326
+       vertex 0.225305 0.056861 0.477348
+    endloop
+  endfacet
+  facet normal 0.152004 0.0371758 0.987681
+    outer loop
+       vertex 0.225305 0.056861 0.477348
+       vertex 0.324458 0.0505703 0.462326
+       vertex 0.311423 0.149897 0.460593
+    endloop
+  endfacet
+  facet normal 0.15549 0.0338721 0.987257
+    outer loop
+       vertex 0.225305 0.056861 0.477348
+       vertex 0.311423 0.149897 0.460593
+       vertex 0.214576 0.159712 0.475509
+    endloop
+  endfacet
+  facet normal 0.15828 0.0643795 0.985293
+    outer loop
+       vertex 0.214576 0.159712 0.475509
+       vertex 0.311423 0.149897 0.460593
+       vertex 0.29381 0.246228 0.457128
+    endloop
+  endfacet
+  facet normal 0.163581 0.0594066 0.98474
+    outer loop
+       vertex 0.214576 0.159712 0.475509
+       vertex 0.29381 0.246228 0.457128
+       vertex 0.200286 0.260023 0.471832
+    endloop
+  endfacet
+  facet normal 0.169076 0.1013 0.980383
+    outer loop
+       vertex 0.200286 0.260023 0.471832
+       vertex 0.29381 0.246228 0.457128
+       vertex 0.271975 0.338564 0.451353
+    endloop
+  endfacet
+  facet normal 0.177073 0.0938263 0.979715
+    outer loop
+       vertex 0.200286 0.260023 0.471832
+       vertex 0.271975 0.338564 0.451353
+       vertex 0.182843 0.356946 0.465702
+    endloop
+  endfacet
+  facet normal 0.197294 0.208973 0.957813
+    outer loop
+       vertex 0.182843 0.356946 0.465702
+       vertex 0.271975 0.338564 0.451353
+       vertex 0.248628 0.422731 0.437799
+    endloop
+  endfacet
+  facet normal 0.208973 0.197293 0.957813
+    outer loop
+       vertex 0.182843 0.356946 0.465702
+       vertex 0.248628 0.422731 0.437799
+       vertex 0.164461 0.446078 0.451353
+    endloop
+  endfacet
+  facet normal 0.253977 0.405924 0.877907
+    outer loop
+       vertex 0.164461 0.446078 0.451353
+       vertex 0.248628 0.422731 0.437799
+       vertex 0.226481 0.494555 0.410996
+    endloop
+  endfacet
+  facet normal 0.272522 0.3853 0.881632
+    outer loop
+       vertex 0.164461 0.446078 0.451353
+       vertex 0.226481 0.494555 0.410996
+       vertex 0.147354 0.523016 0.423016
+    endloop
+  endfacet
+  facet normal 0.338867 0.658151 0.672314
+    outer loop
+       vertex 0.147354 0.523016 0.423016
+       vertex 0.226481 0.494555 0.410996
+       vertex 0.209403 0.550084 0.365244
+    endloop
+  endfacet
+  facet normal 0.364544 0.62929 0.686369
+    outer loop
+       vertex 0.147354 0.523016 0.423016
+       vertex 0.209403 0.550084 0.365244
+       vertex 0.133737 0.583359 0.374925
+    endloop
+  endfacet
+  facet normal 0.31721 0.0101837 0.948301
+    outer loop
+       vertex 0.335381 -0.153076 0.462903
+       vertex 0.423171 -0.153076 0.433537
+       vertex 0.419978 -0.0536202 0.433537
+    endloop
+  endfacet
+  facet normal 0.318691 0.00878127 0.947818
+    outer loop
+       vertex 0.335381 -0.153076 0.462903
+       vertex 0.419978 -0.0536202 0.433537
+       vertex 0.332562 -0.0507537 0.462903
+    endloop
+  endfacet
+  facet normal 0.319286 0.0352698 0.947002
+    outer loop
+       vertex 0.332562 -0.0507537 0.462903
+       vertex 0.419978 -0.0536202 0.433537
+       vertex 0.410677 0.0446986 0.433011
+    endloop
+  endfacet
+  facet normal 0.323651 0.0312766 0.945659
+    outer loop
+       vertex 0.332562 -0.0507537 0.462903
+       vertex 0.410677 0.0446986 0.433011
+       vertex 0.324458 0.0505703 0.462326
+    endloop
+  endfacet
+  facet normal 0.325253 0.0667361 0.943269
+    outer loop
+       vertex 0.324458 0.0505703 0.462326
+       vertex 0.410677 0.0446986 0.433011
+       vertex 0.395547 0.140743 0.431433
+    endloop
+  endfacet
+  facet normal 0.332749 0.0600834 0.941099
+    outer loop
+       vertex 0.324458 0.0505703 0.462326
+       vertex 0.395547 0.140743 0.431433
+       vertex 0.311423 0.149897 0.460593
+    endloop
+  endfacet
+  facet normal 0.335998 0.106898 0.935777
+    outer loop
+       vertex 0.311423 0.149897 0.460593
+       vertex 0.395547 0.140743 0.431433
+       vertex 0.374867 0.233374 0.428277
+    endloop
+  endfacet
+  facet normal 0.347372 0.0970592 0.932691
+    outer loop
+       vertex 0.311423 0.149897 0.460593
+       vertex 0.374867 0.233374 0.428277
+       vertex 0.29381 0.246228 0.457128
+    endloop
+  endfacet
+  facet normal 0.353362 0.159171 0.921846
+    outer loop
+       vertex 0.29381 0.246228 0.457128
+       vertex 0.374867 0.233374 0.428277
+       vertex 0.348914 0.321457 0.423016
+    endloop
+  endfacet
+  facet normal 0.370172 0.144927 0.917589
+    outer loop
+       vertex 0.29381 0.246228 0.457128
+       vertex 0.348914 0.321457 0.423016
+       vertex 0.271975 0.338564 0.451353
+    endloop
+  endfacet
+  facet normal 0.3853 0.272522 0.881632
+    outer loop
+       vertex 0.271975 0.338564 0.451353
+       vertex 0.348914 0.321457 0.423016
+       vertex 0.320453 0.400583 0.410996
+    endloop
+  endfacet
+  facet normal 0.405925 0.253977 0.877907
+    outer loop
+       vertex 0.271975 0.338564 0.451353
+       vertex 0.320453 0.400583 0.410996
+       vertex 0.248628 0.422731 0.437799
+    endloop
+  endfacet
+  facet normal 0.431539 0.461335 0.775206
+    outer loop
+       vertex 0.248628 0.422731 0.437799
+       vertex 0.320453 0.400583 0.410996
+       vertex 0.292246 0.466349 0.38756
+    endloop
+  endfacet
+  facet normal 0.461336 0.431539 0.775206
+    outer loop
+       vertex 0.248628 0.422731 0.437799
+       vertex 0.292246 0.466349 0.38756
+       vertex 0.226481 0.494555 0.410996
+    endloop
+  endfacet
+  facet normal 0.487016 0.66907 0.561392
+    outer loop
+       vertex 0.226481 0.494555 0.410996
+       vertex 0.292246 0.466349 0.38756
+       vertex 0.271692 0.515237 0.347126
+    endloop
+  endfacet
+  facet normal 0.520668 0.632558 0.573389
+    outer loop
+       vertex 0.226481 0.494555 0.410996
+       vertex 0.271692 0.515237 0.347126
+       vertex 0.209403 0.550084 0.365244
+    endloop
+  endfacet
+  facet normal 0.581201 0.0208771 0.813492
+    outer loop
+       vertex 0.423171 -0.153076 0.433537
+       vertex 0.492468 -0.153076 0.384027
+       vertex 0.48898 -0.0559793 0.384027
+    endloop
+  endfacet
+  facet normal 0.583289 0.0187259 0.812049
+    outer loop
+       vertex 0.423171 -0.153076 0.433537
+       vertex 0.48898 -0.0559793 0.384027
+       vertex 0.419978 -0.0536202 0.433537
+    endloop
+  endfacet
+  facet normal 0.583182 0.0662831 0.809633
+    outer loop
+       vertex 0.419978 -0.0536202 0.433537
+       vertex 0.48898 -0.0559793 0.384027
+       vertex 0.478716 0.0398893 0.383572
+    endloop
+  endfacet
+  facet normal 0.589544 0.060078 0.805499
+    outer loop
+       vertex 0.419978 -0.0536202 0.433537
+       vertex 0.478716 0.0398893 0.383572
+       vertex 0.410677 0.0446986 0.433011
+    endloop
+  endfacet
+  facet normal 0.58917 0.117908 0.79936
+    outer loop
+       vertex 0.410677 0.0446986 0.433011
+       vertex 0.478716 0.0398893 0.383572
+       vertex 0.461875 0.133301 0.382207
+    endloop
+  endfacet
+  facet normal 0.600266 0.107582 0.792532
+    outer loop
+       vertex 0.410677 0.0446986 0.433011
+       vertex 0.461875 0.133301 0.382207
+       vertex 0.395547 0.140743 0.431433
+    endloop
+  endfacet
+  facet normal 0.599223 0.17882 0.780356
+    outer loop
+       vertex 0.395547 0.140743 0.431433
+       vertex 0.461875 0.133301 0.382207
+       vertex 0.438655 0.223027 0.379476
+    endloop
+  endfacet
+  facet normal 0.616038 0.163787 0.770501
+    outer loop
+       vertex 0.395547 0.140743 0.431433
+       vertex 0.438655 0.223027 0.379476
+       vertex 0.374867 0.233374 0.428277
+    endloop
+  endfacet
+  facet normal 0.61342 0.252783 0.748209
+    outer loop
+       vertex 0.374867 0.233374 0.428277
+       vertex 0.438655 0.223027 0.379476
+       vertex 0.409257 0.307839 0.374925
+    endloop
+  endfacet
+  facet normal 0.637734 0.231774 0.734559
+    outer loop
+       vertex 0.374867 0.233374 0.428277
+       vertex 0.409257 0.307839 0.374925
+       vertex 0.348914 0.321457 0.423016
+    endloop
+  endfacet
+  facet normal 0.62929 0.364543 0.686369
+    outer loop
+       vertex 0.348914 0.321457 0.423016
+       vertex 0.409257 0.307839 0.374925
+       vertex 0.375982 0.383505 0.365244
+    endloop
+  endfacet
+  facet normal 0.658151 0.338867 0.672314
+    outer loop
+       vertex 0.348914 0.321457 0.423016
+       vertex 0.375982 0.383505 0.365244
+       vertex 0.320453 0.400583 0.410996
+    endloop
+  endfacet
+  facet normal 0.632558 0.520668 0.573389
+    outer loop
+       vertex 0.320453 0.400583 0.410996
+       vertex 0.375982 0.383505 0.365244
+       vertex 0.341135 0.445794 0.347126
+    endloop
+  endfacet
+  facet normal 0.66907 0.487016 0.561392
+    outer loop
+       vertex 0.320453 0.400583 0.410996
+       vertex 0.341135 0.445794 0.347126
+       vertex 0.292246 0.466349 0.38756
+    endloop
+  endfacet
+  facet normal 0.623135 0.661619 0.417089
+    outer loop
+       vertex 0.292246 0.466349 0.38756
+       vertex 0.341135 0.445794 0.347126
+       vertex 0.312305 0.486408 0.325773
+    endloop
+  endfacet
+  facet normal 0.661619 0.623134 0.417089
+    outer loop
+       vertex 0.292246 0.466349 0.38756
+       vertex 0.312305 0.486408 0.325773
+       vertex 0.271692 0.515237 0.347126
+    endloop
+  endfacet
+  facet normal 0 -0 1
+    outer loop
+       vertex -0.327179 -0.153076 0.491135
+       vertex -0.327179 -0.03833 0.491135
+       vertex -0.441437 -0.0388183 0.491135
+    endloop
+  endfacet
+  facet normal 0 0 1
+    outer loop
+       vertex -0.327179 -0.153076 0.491135
+       vertex -0.441437 -0.0388183 0.491135
+       vertex -0.441925 -0.153076 0.491135
+    endloop
+  endfacet
+  facet normal -0.00579568 2.47709e-05 0.999983
+    outer loop
+       vertex -0.441925 -0.153076 0.491135
+       vertex -0.441437 -0.0388183 0.491135
+       vertex -0.555092 -0.0401404 0.490477
+    endloop
+  endfacet
+  facet normal -0.005771 4.95104e-05 0.999983
+    outer loop
+       vertex -0.441925 -0.153076 0.491135
+       vertex -0.555092 -0.0401404 0.490477
+       vertex -0.556066 -0.153076 0.490477
+    endloop
+  endfacet
+  facet normal -0.0175732 0.000151303 0.999846
+    outer loop
+       vertex -0.556066 -0.153076 0.490477
+       vertex -0.555092 -0.0401404 0.490477
+       vertex -0.667544 -0.0421538 0.488501
+    endloop
+  endfacet
+  facet normal -0.0174955 0.000229429 0.999847
+    outer loop
+       vertex -0.556066 -0.153076 0.490477
+       vertex -0.667544 -0.0421538 0.488501
+       vertex -0.668998 -0.153076 0.488501
+    endloop
+  endfacet
+  facet normal -0.0357077 0.000468257 0.999362
+    outer loop
+       vertex -0.668998 -0.153076 0.488501
+       vertex -0.667544 -0.0421538 0.488501
+       vertex -0.778189 -0.0447158 0.484548
+    endloop
+  endfacet
+  facet normal -0.0355451 0.000632272 0.999368
+    outer loop
+       vertex -0.668998 -0.153076 0.488501
+       vertex -0.778189 -0.0447158 0.484548
+       vertex -0.780117 -0.153076 0.484548
+    endloop
+  endfacet
+  facet normal -0.0607746 0.00108105 0.998151
+    outer loop
+       vertex -0.780117 -0.153076 0.484548
+       vertex -0.778189 -0.0447158 0.484548
+       vertex -0.886426 -0.0476838 0.477961
+    endloop
+  endfacet
+  facet normal -0.0604876 0.00137167 0.998168
+    outer loop
+       vertex -0.780117 -0.153076 0.484548
+       vertex -0.886426 -0.0476838 0.477961
+       vertex -0.888816 -0.153076 0.477961
+    endloop
+  endfacet
+  facet normal -0.148288 0.00336271 0.988939
+    outer loop
+       vertex -0.888816 -0.153076 0.477961
+       vertex -0.886426 -0.0476838 0.477961
+       vertex -0.98692 -0.0507532 0.462903
+    endloop
+  endfacet
+  facet normal -0.14757 0.00406654 0.989043
+    outer loop
+       vertex -0.888816 -0.153076 0.477961
+       vertex -0.98692 -0.0507532 0.462903
+       vertex -0.989739 -0.153076 0.462903
+    endloop
+  endfacet
+  facet normal -0.318691 0.00878174 0.947818
+    outer loop
+       vertex -0.989739 -0.153076 0.462903
+       vertex -0.98692 -0.0507532 0.462903
+       vertex -1.07434 -0.0536197 0.433537
+    endloop
+  endfacet
+  facet normal -0.31721 0.0101843 0.948301
+    outer loop
+       vertex -0.989739 -0.153076 0.462903
+       vertex -1.07434 -0.0536197 0.433537
+       vertex -1.07753 -0.153076 0.433537
+    endloop
+  endfacet
+  facet normal -0.583289 0.0187271 0.812049
+    outer loop
+       vertex -1.07753 -0.153076 0.433537
+       vertex -1.07434 -0.0536197 0.433537
+       vertex -1.14334 -0.0559787 0.384027
+    endloop
+  endfacet
+  facet normal -0.581201 0.020878 0.813492
+    outer loop
+       vertex -1.07753 -0.153076 0.433537
+       vertex -1.14334 -0.0559787 0.384027
+       vertex -1.14683 -0.153076 0.384027
+    endloop
+  endfacet
+  facet normal -4.95047e-05 0.005771 0.999983
+    outer loop
+       vertex -0.327179 -0.03833 0.491135
+       vertex -0.327179 0.0758114 0.490477
+       vertex -0.440114 0.0748374 0.490477
+    endloop
+  endfacet
+  facet normal -2.47658e-05 0.00579568 0.999983
+    outer loop
+       vertex -0.327179 -0.03833 0.491135
+       vertex -0.440114 0.0748374 0.490477
+       vertex -0.441437 -0.0388183 0.491135
+    endloop
+  endfacet
+  facet normal -0.0059822 0.00586489 0.999965
+    outer loop
+       vertex -0.441437 -0.0388183 0.491135
+       vertex -0.440114 0.0748374 0.490477
+       vertex -0.55244 0.0721855 0.48982
+    endloop
+  endfacet
+  facet normal -0.00586488 0.00598221 0.999965
+    outer loop
+       vertex -0.441437 -0.0388183 0.491135
+       vertex -0.55244 0.0721855 0.48982
+       vertex -0.555092 -0.0401404 0.490477
+    endloop
+  endfacet
+  facet normal -0.01795 0.00626669 0.999819
+    outer loop
+       vertex -0.555092 -0.0401404 0.490477
+       vertex -0.55244 0.0721855 0.48982
+       vertex -0.663547 0.0681255 0.487851
+    endloop
+  endfacet
+  facet normal -0.017687 0.00653025 0.999822
+    outer loop
+       vertex -0.555092 -0.0401404 0.490477
+       vertex -0.663547 0.0681255 0.487851
+       vertex -0.667544 -0.0421538 0.488501
+    endloop
+  endfacet
+  facet normal -0.0363589 0.007204 0.999313
+    outer loop
+       vertex -0.667544 -0.0421538 0.488501
+       vertex -0.663547 0.0681255 0.487851
+       vertex -0.772824 0.0629275 0.483912
+    endloop
+  endfacet
+  facet normal -0.0358736 0.00769078 0.999327
+    outer loop
+       vertex -0.667544 -0.0421538 0.488501
+       vertex -0.772824 0.0629275 0.483912
+       vertex -0.778189 -0.0447158 0.484548
+    endloop
+  endfacet
+  facet normal -0.0618294 0.00897682 0.998046
+    outer loop
+       vertex -0.778189 -0.0447158 0.484548
+       vertex -0.772824 0.0629275 0.483912
+       vertex -0.879663 0.0568614 0.477348
+    endloop
+  endfacet
+  facet normal -0.0610099 0.00979856 0.998089
+    outer loop
+       vertex -0.778189 -0.0447158 0.484548
+       vertex -0.879663 0.0568614 0.477348
+       vertex -0.886426 -0.0476838 0.477961
+    endloop
+  endfacet
+  facet normal -0.150748 0.0155473 0.98845
+    outer loop
+       vertex -0.886426 -0.0476838 0.477961
+       vertex -0.879663 0.0568614 0.477348
+       vertex -0.978815 0.0505708 0.462326
+    endloop
+  endfacet
+  facet normal -0.148689 0.0175281 0.988729
+    outer loop
+       vertex -0.886426 -0.0476838 0.477961
+       vertex -0.978815 0.0505708 0.462326
+       vertex -0.98692 -0.0507532 0.462903
+    endloop
+  endfacet
+  facet normal -0.323651 0.0312767 0.945659
+    outer loop
+       vertex -0.98692 -0.0507532 0.462903
+       vertex -0.978815 0.0505708 0.462326
+       vertex -1.06503 0.0446991 0.433011
+    endloop
+  endfacet
+  facet normal -0.319286 0.03527 0.947002
+    outer loop
+       vertex -0.98692 -0.0507532 0.462903
+       vertex -1.06503 0.0446991 0.433011
+       vertex -1.07434 -0.0536197 0.433537
+    endloop
+  endfacet
+  facet normal -0.589544 0.0600784 0.805499
+    outer loop
+       vertex -1.07434 -0.0536197 0.433537
+       vertex -1.06503 0.0446991 0.433011
+       vertex -1.13307 0.0398899 0.383572
+    endloop
+  endfacet
+  facet normal -0.583182 0.0662835 0.809633
+    outer loop
+       vertex -1.07434 -0.0536197 0.433537
+       vertex -1.13307 0.0398899 0.383572
+       vertex -1.14334 -0.0559787 0.384027
+    endloop
+  endfacet
+  facet normal -0.000229415 0.0174955 0.999847
+    outer loop
+       vertex -0.327179 0.0758114 0.490477
+       vertex -0.327179 0.188743 0.488501
+       vertex -0.438101 0.187289 0.488501
+    endloop
+  endfacet
+  facet normal -0.000151286 0.0175732 0.999846
+    outer loop
+       vertex -0.327179 0.0758114 0.490477
+       vertex -0.438101 0.187289 0.488501
+       vertex -0.440114 0.0748374 0.490477
+    endloop
+  endfacet
+  facet normal -0.00653024 0.017687 0.999822
+    outer loop
+       vertex -0.440114 0.0748374 0.490477
+       vertex -0.438101 0.187289 0.488501
+       vertex -0.54838 0.183292 0.487851
+    endloop
+  endfacet
+  facet normal -0.00626667 0.01795 0.999819
+    outer loop
+       vertex -0.440114 0.0748374 0.490477
+       vertex -0.54838 0.183292 0.487851
+       vertex -0.55244 0.0721855 0.48982
+    endloop
+  endfacet
+  facet normal -0.0189147 0.0184092 0.999652
+    outer loop
+       vertex -0.55244 0.0721855 0.48982
+       vertex -0.54838 0.183292 0.487851
+       vertex -0.657374 0.177119 0.485902
+    endloop
+  endfacet
+  facet normal -0.0184092 0.0189147 0.999652
+    outer loop
+       vertex -0.55244 0.0721855 0.48982
+       vertex -0.657374 0.177119 0.485902
+       vertex -0.663547 0.0681255 0.487851
+    endloop
+  endfacet
+  facet normal -0.0378594 0.0200061 0.999083
+    outer loop
+       vertex -0.663547 0.0681255 0.487851
+       vertex -0.657374 0.177119 0.485902
+       vertex -0.764439 0.169137 0.482005
+    endloop
+  endfacet
+  facet normal -0.0370009 0.0208644 0.999097
+    outer loop
+       vertex -0.663547 0.0681255 0.487851
+       vertex -0.764439 0.169137 0.482005
+       vertex -0.772824 0.0629275 0.483912
+    endloop
+  endfacet
+  facet normal -0.0640897 0.0229775 0.99768
+    outer loop
+       vertex -0.772824 0.0629275 0.483912
+       vertex -0.764439 0.169137 0.482005
+       vertex -0.868933 0.159713 0.47551
+    endloop
+  endfacet
+  facet normal -0.0626848 0.0243776 0.997736
+    outer loop
+       vertex -0.772824 0.0629275 0.483912
+       vertex -0.868933 0.159713 0.47551
+       vertex -0.879663 0.0568614 0.477348
+    endloop
+  endfacet
+  facet normal -0.155491 0.033872 0.987256
+    outer loop
+       vertex -0.879663 0.0568614 0.477348
+       vertex -0.868933 0.159713 0.47551
+       vertex -0.96578 0.149897 0.460593
+    endloop
+  endfacet
+  facet normal -0.152004 0.037176 0.987681
+    outer loop
+       vertex -0.879663 0.0568614 0.477348
+       vertex -0.96578 0.149897 0.460593
+       vertex -0.978815 0.0505708 0.462326
+    endloop
+  endfacet
+  facet normal -0.332749 0.0600839 0.941099
+    outer loop
+       vertex -0.978815 0.0505708 0.462326
+       vertex -0.96578 0.149897 0.460593
+       vertex -1.0499 0.140743 0.431433
+    endloop
+  endfacet
+  facet normal -0.325254 0.0667366 0.943269
+    outer loop
+       vertex -0.978815 0.0505708 0.462326
+       vertex -1.0499 0.140743 0.431433
+       vertex -1.06503 0.0446991 0.433011
+    endloop
+  endfacet
+  facet normal -0.600265 0.107582 0.792532
+    outer loop
+       vertex -1.06503 0.0446991 0.433011
+       vertex -1.0499 0.140743 0.431433
+       vertex -1.11623 0.133301 0.382207
+    endloop
+  endfacet
+  facet normal -0.58917 0.117908 0.79936
+    outer loop
+       vertex -1.06503 0.0446991 0.433011
+       vertex -1.11623 0.133301 0.382207
+       vertex -1.13307 0.0398899 0.383572
+    endloop
+  endfacet
+  facet normal -0.000632223 0.0355451 0.999368
+    outer loop
+       vertex -0.327179 0.188743 0.488501
+       vertex -0.327179 0.299862 0.484548
+       vertex -0.435539 0.297934 0.484548
+    endloop
+  endfacet
+  facet normal -0.000468228 0.0357077 0.999362
+    outer loop
+       vertex -0.327179 0.188743 0.488501
+       vertex -0.435539 0.297934 0.484548
+       vertex -0.438101 0.187289 0.488501
+    endloop
+  endfacet
+  facet normal -0.00769078 0.0358736 0.999327
+    outer loop
+       vertex -0.438101 0.187289 0.488501
+       vertex -0.435539 0.297934 0.484548
+       vertex -0.543182 0.292569 0.483912
+    endloop
+  endfacet
+  facet normal -0.00720399 0.0363589 0.999313
+    outer loop
+       vertex -0.438101 0.187289 0.488501
+       vertex -0.543182 0.292569 0.483912
+       vertex -0.54838 0.183292 0.487851
+    endloop
+  endfacet
+  facet normal -0.0208644 0.0370009 0.999097
+    outer loop
+       vertex -0.54838 0.183292 0.487851
+       vertex -0.543182 0.292569 0.483912
+       vertex -0.649392 0.284184 0.482005
+    endloop
+  endfacet
+  facet normal -0.0200061 0.0378594 0.999083
+    outer loop
+       vertex -0.54838 0.183292 0.487851
+       vertex -0.649392 0.284184 0.482005
+       vertex -0.657374 0.177119 0.485902
+    endloop
+  endfacet
+  facet normal -0.0407609 0.0393816 0.998393
+    outer loop
+       vertex -0.657374 0.177119 0.485902
+       vertex -0.649392 0.284184 0.482005
+       vertex -0.753451 0.273197 0.47819
+    endloop
+  endfacet
+  facet normal -0.0393816 0.040761 0.998393
+    outer loop
+       vertex -0.657374 0.177119 0.485902
+       vertex -0.753451 0.273197 0.47819
+       vertex -0.764439 0.169137 0.482005
+    endloop
+  endfacet
+  facet normal -0.0683228 0.043755 0.996703
+    outer loop
+       vertex -0.764439 0.169137 0.482005
+       vertex -0.753451 0.273197 0.47819
+       vertex -0.854643 0.260023 0.471832
+    endloop
+  endfacet
+  facet normal -0.0661052 0.0459616 0.996754
+    outer loop
+       vertex -0.764439 0.169137 0.482005
+       vertex -0.854643 0.260023 0.471832
+       vertex -0.868933 0.159713 0.47551
+    endloop
+  endfacet
+  facet normal -0.163581 0.059407 0.98474
+    outer loop
+       vertex -0.868933 0.159713 0.47551
+       vertex -0.854643 0.260023 0.471832
+       vertex -0.948168 0.246228 0.457128
+    endloop
+  endfacet
+  facet normal -0.15828 0.0643797 0.985293
+    outer loop
+       vertex -0.868933 0.159713 0.47551
+       vertex -0.948168 0.246228 0.457128
+       vertex -0.96578 0.149897 0.460593
+    endloop
+  endfacet
+  facet normal -0.347372 0.0970594 0.932691
+    outer loop
+       vertex -0.96578 0.149897 0.460593
+       vertex -0.948168 0.246228 0.457128
+       vertex -1.02922 0.233375 0.428277
+    endloop
+  endfacet
+  facet normal -0.335998 0.106898 0.935777
+    outer loop
+       vertex -0.96578 0.149897 0.460593
+       vertex -1.02922 0.233375 0.428277
+       vertex -1.0499 0.140743 0.431433
+    endloop
+  endfacet
+  facet normal -0.616038 0.163786 0.770501
+    outer loop
+       vertex -1.0499 0.140743 0.431433
+       vertex -1.02922 0.233375 0.428277
+       vertex -1.09301 0.223027 0.379476
+    endloop
+  endfacet
+  facet normal -0.599222 0.17882 0.780357
+    outer loop
+       vertex -1.0499 0.140743 0.431433
+       vertex -1.09301 0.223027 0.379476
+       vertex -1.11623 0.133301 0.382207
+    endloop
+  endfacet
+  facet normal -0.00137164 0.0604876 0.998168
+    outer loop
+       vertex -0.327179 0.299862 0.484548
+       vertex -0.327179 0.408561 0.477961
+       vertex -0.432571 0.406171 0.477961
+    endloop
+  endfacet
+  facet normal -0.00108097 0.0607747 0.998151
+    outer loop
+       vertex -0.327179 0.299862 0.484548
+       vertex -0.432571 0.406171 0.477961
+       vertex -0.435539 0.297934 0.484548
+    endloop
+  endfacet
+  facet normal -0.00979853 0.0610099 0.998089
+    outer loop
+       vertex -0.435539 0.297934 0.484548
+       vertex -0.432571 0.406171 0.477961
+       vertex -0.537116 0.399408 0.477348
+    endloop
+  endfacet
+  facet normal -0.00897684 0.0618294 0.998046
+    outer loop
+       vertex -0.435539 0.297934 0.484548
+       vertex -0.537116 0.399408 0.477348
+       vertex -0.543182 0.292569 0.483912
+    endloop
+  endfacet
+  facet normal -0.0243778 0.0626848 0.997736
+    outer loop
+       vertex -0.543182 0.292569 0.483912
+       vertex -0.537116 0.399408 0.477348
+       vertex -0.639967 0.388678 0.475509
+    endloop
+  endfacet
+  facet normal -0.0229775 0.06409 0.99768
+    outer loop
+       vertex -0.543182 0.292569 0.483912
+       vertex -0.639967 0.388678 0.475509
+       vertex -0.649392 0.284184 0.482005
+    endloop
+  endfacet
+  facet normal -0.0459613 0.0661054 0.996754
+    outer loop
+       vertex -0.649392 0.284184 0.482005
+       vertex -0.639967 0.388678 0.475509
+       vertex -0.740278 0.374389 0.471832
+    endloop
+  endfacet
+  facet normal -0.0437549 0.0683228 0.996703
+    outer loop
+       vertex -0.649392 0.284184 0.482005
+       vertex -0.740278 0.374389 0.471832
+       vertex -0.753451 0.273197 0.47819
+    endloop
+  endfacet
+  facet normal -0.0759175 0.0723704 0.994484
+    outer loop
+       vertex -0.753451 0.273197 0.47819
+       vertex -0.740278 0.374389 0.471832
+       vertex -0.837201 0.356946 0.465702
+    endloop
+  endfacet
+  facet normal -0.0723703 0.0759175 0.994484
+    outer loop
+       vertex -0.753451 0.273197 0.47819
+       vertex -0.837201 0.356946 0.465702
+       vertex -0.854643 0.260023 0.471832
+    endloop
+  endfacet
+  facet normal -0.177072 0.0938264 0.979715
+    outer loop
+       vertex -0.854643 0.260023 0.471832
+       vertex -0.837201 0.356946 0.465702
+       vertex -0.926333 0.338564 0.451353
+    endloop
+  endfacet
+  facet normal -0.169076 0.101299 0.980383
+    outer loop
+       vertex -0.854643 0.260023 0.471832
+       vertex -0.926333 0.338564 0.451353
+       vertex -0.948168 0.246228 0.457128
+    endloop
+  endfacet
+  facet normal -0.370172 0.144926 0.917589
+    outer loop
+       vertex -0.948168 0.246228 0.457128
+       vertex -0.926333 0.338564 0.451353
+       vertex -1.00327 0.321457 0.423016
+    endloop
+  endfacet
+  facet normal -0.353361 0.159171 0.921846
+    outer loop
+       vertex -0.948168 0.246228 0.457128
+       vertex -1.00327 0.321457 0.423016
+       vertex -1.02922 0.233375 0.428277
+    endloop
+  endfacet
+  facet normal -0.637735 0.231775 0.734558
+    outer loop
+       vertex -1.02922 0.233375 0.428277
+       vertex -1.00327 0.321457 0.423016
+       vertex -1.06361 0.307839 0.374925
+    endloop
+  endfacet
+  facet normal -0.61342 0.252784 0.748208
+    outer loop
+       vertex -1.02922 0.233375 0.428277
+       vertex -1.06361 0.307839 0.374925
+       vertex -1.09301 0.223027 0.379476
+    endloop
+  endfacet
+  facet normal -0.00406628 0.14757 0.989043
+    outer loop
+       vertex -0.327179 0.408561 0.477961
+       vertex -0.327179 0.509484 0.462903
+       vertex -0.429501 0.506665 0.462903
+    endloop
+  endfacet
+  facet normal -0.00336262 0.148288 0.988939
+    outer loop
+       vertex -0.327179 0.408561 0.477961
+       vertex -0.429501 0.506665 0.462903
+       vertex -0.432571 0.406171 0.477961
+    endloop
+  endfacet
+  facet normal -0.017528 0.148689 0.988729
+    outer loop
+       vertex -0.432571 0.406171 0.477961
+       vertex -0.429501 0.506665 0.462903
+       vertex -0.530825 0.498561 0.462326
+    endloop
+  endfacet
+  facet normal -0.0155472 0.150748 0.98845
+    outer loop
+       vertex -0.432571 0.406171 0.477961
+       vertex -0.530825 0.498561 0.462326
+       vertex -0.537116 0.399408 0.477348
+    endloop
+  endfacet
+  facet normal -0.0371758 0.152004 0.98768
+    outer loop
+       vertex -0.537116 0.399408 0.477348
+       vertex -0.530825 0.498561 0.462326
+       vertex -0.630152 0.485525 0.460593
+    endloop
+  endfacet
+  facet normal -0.0338722 0.15549 0.987256
+    outer loop
+       vertex -0.537116 0.399408 0.477348
+       vertex -0.630152 0.485525 0.460593
+       vertex -0.639967 0.388678 0.475509
+    endloop
+  endfacet
+  facet normal -0.0643795 0.15828 0.985293
+    outer loop
+       vertex -0.639967 0.388678 0.475509
+       vertex -0.630152 0.485525 0.460593
+       vertex -0.726483 0.467913 0.457128
+    endloop
+  endfacet
+  facet normal -0.0594067 0.163581 0.98474
+    outer loop
+       vertex -0.639967 0.388678 0.475509
+       vertex -0.726483 0.467913 0.457128
+       vertex -0.740278 0.374389 0.471832
+    endloop
+  endfacet
+  facet normal -0.1013 0.169076 0.980383
+    outer loop
+       vertex -0.740278 0.374389 0.471832
+       vertex -0.726483 0.467913 0.457128
+       vertex -0.818819 0.446078 0.451353
+    endloop
+  endfacet
+  facet normal -0.0938263 0.177073 0.979715
+    outer loop
+       vertex -0.740278 0.374389 0.471832
+       vertex -0.818819 0.446078 0.451353
+       vertex -0.837201 0.356946 0.465702
+    endloop
+  endfacet
+  facet normal -0.208973 0.197294 0.957813
+    outer loop
+       vertex -0.837201 0.356946 0.465702
+       vertex -0.818819 0.446078 0.451353
+       vertex -0.902986 0.422731 0.437799
+    endloop
+  endfacet
+  facet normal -0.197293 0.208974 0.957813
+    outer loop
+       vertex -0.837201 0.356946 0.465702
+       vertex -0.902986 0.422731 0.437799
+       vertex -0.926333 0.338564 0.451353
+    endloop
+  endfacet
+  facet normal -0.405924 0.253977 0.877907
+    outer loop
+       vertex -0.926333 0.338564 0.451353
+       vertex -0.902986 0.422731 0.437799
+       vertex -0.97481 0.400584 0.410996
+    endloop
+  endfacet
+  facet normal -0.385299 0.272523 0.881632
+    outer loop
+       vertex -0.926333 0.338564 0.451353
+       vertex -0.97481 0.400584 0.410996
+       vertex -1.00327 0.321457 0.423016
+    endloop
+  endfacet
+  facet normal -0.658151 0.338868 0.672314
+    outer loop
+       vertex -1.00327 0.321457 0.423016
+       vertex -0.97481 0.400584 0.410996
+       vertex -1.03034 0.383506 0.365244
+    endloop
+  endfacet
+  facet normal -0.629291 0.364543 0.686368
+    outer loop
+       vertex -1.00327 0.321457 0.423016
+       vertex -1.03034 0.383506 0.365244
+       vertex -1.06361 0.307839 0.374925
+    endloop
+  endfacet
+  facet normal -0.0101838 0.31721 0.948301
+    outer loop
+       vertex -0.327179 0.509484 0.462903
+       vertex -0.327179 0.597273 0.433537
+       vertex -0.426635 0.59408 0.433537
+    endloop
+  endfacet
+  facet normal -0.00878118 0.318691 0.947818
+    outer loop
+       vertex -0.327179 0.509484 0.462903
+       vertex -0.426635 0.59408 0.433537
+       vertex -0.429501 0.506665 0.462903
+    endloop
+  endfacet
+  facet normal -0.0352697 0.319286 0.947002
+    outer loop
+       vertex -0.429501 0.506665 0.462903
+       vertex -0.426635 0.59408 0.433537
+       vertex -0.524954 0.58478 0.433011
+    endloop
+  endfacet
+  facet normal -0.0312766 0.323651 0.945659
+    outer loop
+       vertex -0.429501 0.506665 0.462903
+       vertex -0.524954 0.58478 0.433011
+       vertex -0.530825 0.498561 0.462326
+    endloop
+  endfacet
+  facet normal -0.0667361 0.325253 0.943269
+    outer loop
+       vertex -0.530825 0.498561 0.462326
+       vertex -0.524954 0.58478 0.433011
+       vertex -0.620998 0.56965 0.431433
+    endloop
+  endfacet
+  facet normal -0.0600834 0.332749 0.941099
+    outer loop
+       vertex -0.530825 0.498561 0.462326
+       vertex -0.620998 0.56965 0.431433
+       vertex -0.630152 0.485525 0.460593
+    endloop
+  endfacet
+  facet normal -0.106898 0.335998 0.935777
+    outer loop
+       vertex -0.630152 0.485525 0.460593
+       vertex -0.620998 0.56965 0.431433
+       vertex -0.713629 0.54897 0.428277
+    endloop
+  endfacet
+  facet normal -0.0970592 0.347373 0.932691
+    outer loop
+       vertex -0.630152 0.485525 0.460593
+       vertex -0.713629 0.54897 0.428277
+       vertex -0.726483 0.467913 0.457128
+    endloop
+  endfacet
+  facet normal -0.159171 0.353362 0.921846
+    outer loop
+       vertex -0.726483 0.467913 0.457128
+       vertex -0.713629 0.54897 0.428277
+       vertex -0.801712 0.523017 0.423016
+    endloop
+  endfacet
+  facet normal -0.144927 0.370172 0.917589
+    outer loop
+       vertex -0.726483 0.467913 0.457128
+       vertex -0.801712 0.523017 0.423016
+       vertex -0.818819 0.446078 0.451353
+    endloop
+  endfacet
+  facet normal -0.272522 0.3853 0.881633
+    outer loop
+       vertex -0.818819 0.446078 0.451353
+       vertex -0.801712 0.523017 0.423016
+       vertex -0.880839 0.494555 0.410996
+    endloop
+  endfacet
+  facet normal -0.253977 0.405924 0.877907
+    outer loop
+       vertex -0.818819 0.446078 0.451353
+       vertex -0.880839 0.494555 0.410996
+       vertex -0.902986 0.422731 0.437799
+    endloop
+  endfacet
+  facet normal -0.461335 0.431538 0.775206
+    outer loop
+       vertex -0.902986 0.422731 0.437799
+       vertex -0.880839 0.494555 0.410996
+       vertex -0.946604 0.466349 0.38756
+    endloop
+  endfacet
+  facet normal -0.431539 0.461335 0.775206
+    outer loop
+       vertex -0.902986 0.422731 0.437799
+       vertex -0.946604 0.466349 0.38756
+       vertex -0.97481 0.400584 0.410996
+    endloop
+  endfacet
+  facet normal -0.66907 0.487016 0.561392
+    outer loop
+       vertex -0.97481 0.400584 0.410996
+       vertex -0.946604 0.466349 0.38756
+       vertex -0.995492 0.445794 0.347126
+    endloop
+  endfacet
+  facet normal -0.632558 0.520668 0.573389
+    outer loop
+       vertex -0.97481 0.400584 0.410996
+       vertex -0.995492 0.445794 0.347126
+       vertex -1.03034 0.383506 0.365244
+    endloop
+  endfacet
+  facet normal -0.020877 0.581201 0.813492
+    outer loop
+       vertex -0.327179 0.597273 0.433537
+       vertex -0.327179 0.666571 0.384027
+       vertex -0.424276 0.663083 0.384027
+    endloop
+  endfacet
+  facet normal -0.018726 0.583289 0.812049
+    outer loop
+       vertex -0.327179 0.597273 0.433537
+       vertex -0.424276 0.663083 0.384027
+       vertex -0.426635 0.59408 0.433537
+    endloop
+  endfacet
+  facet normal -0.0662831 0.583182 0.809633
+    outer loop
+       vertex -0.426635 0.59408 0.433537
+       vertex -0.424276 0.663083 0.384027
+       vertex -0.520144 0.652819 0.383572
+    endloop
+  endfacet
+  facet normal -0.0600776 0.589544 0.805499
+    outer loop
+       vertex -0.426635 0.59408 0.433537
+       vertex -0.520144 0.652819 0.383572
+       vertex -0.524954 0.58478 0.433011
+    endloop
+  endfacet
+  facet normal -0.117908 0.589171 0.79936
+    outer loop
+       vertex -0.524954 0.58478 0.433011
+       vertex -0.520144 0.652819 0.383572
+       vertex -0.613556 0.635977 0.382207
+    endloop
+  endfacet
+  facet normal -0.107582 0.600266 0.792532
+    outer loop
+       vertex -0.524954 0.58478 0.433011
+       vertex -0.613556 0.635977 0.382207
+       vertex -0.620998 0.56965 0.431433
+    endloop
+  endfacet
+  facet normal -0.17882 0.599223 0.780356
+    outer loop
+       vertex -0.620998 0.56965 0.431433
+       vertex -0.613556 0.635977 0.382207
+       vertex -0.703282 0.612758 0.379476
+    endloop
+  endfacet
+  facet normal -0.163787 0.616038 0.7705
+    outer loop
+       vertex -0.620998 0.56965 0.431433
+       vertex -0.703282 0.612758 0.379476
+       vertex -0.713629 0.54897 0.428277
+    endloop
+  endfacet
+  facet normal -0.252783 0.61342 0.748209
+    outer loop
+       vertex -0.713629 0.54897 0.428277
+       vertex -0.703282 0.612758 0.379476
+       vertex -0.788094 0.583359 0.374925
+    endloop
+  endfacet
+  facet normal -0.231774 0.637735 0.734558
+    outer loop
+       vertex -0.713629 0.54897 0.428277
+       vertex -0.788094 0.583359 0.374925
+       vertex -0.801712 0.523017 0.423016
+    endloop
+  endfacet
+  facet normal -0.364543 0.629291 0.686368
+    outer loop
+       vertex -0.801712 0.523017 0.423016
+       vertex -0.788094 0.583359 0.374925
+       vertex -0.86376 0.550085 0.365244
+    endloop
+  endfacet
+  facet normal -0.338867 0.658152 0.672314
+    outer loop
+       vertex -0.801712 0.523017 0.423016
+       vertex -0.86376 0.550085 0.365244
+       vertex -0.880839 0.494555 0.410996
+    endloop
+  endfacet
+  facet normal -0.520668 0.632559 0.573389
+    outer loop
+       vertex -0.880839 0.494555 0.410996
+       vertex -0.86376 0.550085 0.365244
+       vertex -0.926049 0.515237 0.347126
+    endloop
+  endfacet
+  facet normal -0.487016 0.669071 0.561391
+    outer loop
+       vertex -0.880839 0.494555 0.410996
+       vertex -0.926049 0.515237 0.347126
+       vertex -0.946604 0.466349 0.38756
+    endloop
+  endfacet
+  facet normal -0.661618 0.623136 0.417089
+    outer loop
+       vertex -0.946604 0.466349 0.38756
+       vertex -0.926049 0.515237 0.347126
+       vertex -0.966663 0.486408 0.325773
+    endloop
+  endfacet
+  facet normal -0.623134 0.661619 0.417089
+    outer loop
+       vertex -0.946604 0.466349 0.38756
+       vertex -0.966663 0.486408 0.325773
+       vertex -0.995492 0.445794 0.347126
+    endloop
+  endfacet
+  facet normal 0 0 1
+    outer loop
+       vertex -0.327179 -0.153076 0.491135
+       vertex -0.441925 -0.153076 0.491135
+       vertex -0.441437 -0.267334 0.491135
+    endloop
+  endfacet
+  facet normal 0 0 1
+    outer loop
+       vertex -0.327179 -0.153076 0.491135
+       vertex -0.441437 -0.267334 0.491135
+       vertex -0.327179 -0.267822 0.491135
+    endloop
+  endfacet
+  facet normal -2.47694e-05 -0.00579569 0.999983
+    outer loop
+       vertex -0.327179 -0.267822 0.491135
+       vertex -0.441437 -0.267334 0.491135
+       vertex -0.440115 -0.38099 0.490477
+    endloop
+  endfacet
+  facet normal -4.95089e-05 -0.005771 0.999983
+    outer loop
+       vertex -0.327179 -0.267822 0.491135
+       vertex -0.440115 -0.38099 0.490477
+       vertex -0.327179 -0.381964 0.490477
+    endloop
+  endfacet
+  facet normal -0.000151299 -0.0175732 0.999846
+    outer loop
+       vertex -0.327179 -0.381964 0.490477
+       vertex -0.440115 -0.38099 0.490477
+       vertex -0.438101 -0.493441 0.488501
+    endloop
+  endfacet
+  facet normal -0.000229438 -0.0174955 0.999847
+    outer loop
+       vertex -0.327179 -0.381964 0.490477
+       vertex -0.438101 -0.493441 0.488501
+       vertex -0.327179 -0.494896 0.488501
+    endloop
+  endfacet
+  facet normal -0.000468276 -0.0357077 0.999362
+    outer loop
+       vertex -0.327179 -0.494896 0.488501
+       vertex -0.438101 -0.493441 0.488501
+       vertex -0.435539 -0.604086 0.484548
+    endloop
+  endfacet
+  facet normal -0.000632252 -0.0355451 0.999368
+    outer loop
+       vertex -0.327179 -0.494896 0.488501
+       vertex -0.435539 -0.604086 0.484548
+       vertex -0.327179 -0.606014 0.484548
+    endloop
+  endfacet
+  facet normal -0.00108102 -0.0607747 0.998151
+    outer loop
+       vertex -0.327179 -0.606014 0.484548
+       vertex -0.435539 -0.604086 0.484548
+       vertex -0.432571 -0.712323 0.477961
+    endloop
+  endfacet
+  facet normal -0.0013717 -0.0604875 0.998168
+    outer loop
+       vertex -0.327179 -0.606014 0.484548
+       vertex -0.432571 -0.712323 0.477961
+       vertex -0.327179 -0.714713 0.477961
+    endloop
+  endfacet
+  facet normal -0.00336279 -0.148288 0.988939
+    outer loop
+       vertex -0.327179 -0.714713 0.477961
+       vertex -0.432571 -0.712323 0.477961
+       vertex -0.429502 -0.812817 0.462903
+    endloop
+  endfacet
+  facet normal -0.00406646 -0.14757 0.989043
+    outer loop
+       vertex -0.327179 -0.714713 0.477961
+       vertex -0.429502 -0.812817 0.462903
+       vertex -0.327179 -0.815636 0.462903
+    endloop
+  endfacet
+  facet normal -0.00878156 -0.318691 0.947818
+    outer loop
+       vertex -0.327179 -0.815636 0.462903
+       vertex -0.429502 -0.812817 0.462903
+       vertex -0.426635 -0.900232 0.433537
+    endloop
+  endfacet
+  facet normal -0.010184 -0.31721 0.948301
+    outer loop
+       vertex -0.327179 -0.815636 0.462903
+       vertex -0.426635 -0.900232 0.433537
+       vertex -0.327179 -0.903425 0.433537
+    endloop
+  endfacet
+  facet normal -0.0187264 -0.583289 0.812049
+    outer loop
+       vertex -0.327179 -0.903425 0.433537
+       vertex -0.426635 -0.900232 0.433537
+       vertex -0.424276 -0.969235 0.384027
+    endloop
+  endfacet
+  facet normal -0.0208777 -0.581201 0.813492
+    outer loop
+       vertex -0.327179 -0.903425 0.433537
+       vertex -0.424276 -0.969235 0.384027
+       vertex -0.327179 -0.972723 0.384027
+    endloop
+  endfacet
+  facet normal -0.005771 -4.95074e-05 0.999983
+    outer loop
+       vertex -0.441925 -0.153076 0.491135
+       vertex -0.556066 -0.153076 0.490477
+       vertex -0.555092 -0.266012 0.490477
+    endloop
+  endfacet
+  facet normal -0.00579569 -2.47664e-05 0.999983
+    outer loop
+       vertex -0.441925 -0.153076 0.491135
+       vertex -0.555092 -0.266012 0.490477
+       vertex -0.441437 -0.267334 0.491135
+    endloop
+  endfacet
+  facet normal -0.00586489 -0.0059822 0.999965
+    outer loop
+       vertex -0.441437 -0.267334 0.491135
+       vertex -0.555092 -0.266012 0.490477
+       vertex -0.552441 -0.378338 0.48982
+    endloop
+  endfacet
+  facet normal -0.00598221 -0.00586488 0.999965
+    outer loop
+       vertex -0.441437 -0.267334 0.491135
+       vertex -0.552441 -0.378338 0.48982
+       vertex -0.440115 -0.38099 0.490477
+    endloop
+  endfacet
+  facet normal -0.00626669 -0.01795 0.999819
+    outer loop
+       vertex -0.440115 -0.38099 0.490477
+       vertex -0.552441 -0.378338 0.48982
+       vertex -0.548381 -0.489444 0.487851
+    endloop
+  endfacet
+  facet normal -0.00653024 -0.017687 0.999822
+    outer loop
+       vertex -0.440115 -0.38099 0.490477
+       vertex -0.548381 -0.489444 0.487851
+       vertex -0.438101 -0.493441 0.488501
+    endloop
+  endfacet
+  facet normal -0.007204 -0.0363589 0.999313
+    outer loop
+       vertex -0.438101 -0.493441 0.488501
+       vertex -0.548381 -0.489444 0.487851
+       vertex -0.543183 -0.598721 0.483912
+    endloop
+  endfacet
+  facet normal -0.00769081 -0.0358736 0.999327
+    outer loop
+       vertex -0.438101 -0.493441 0.488501
+       vertex -0.543183 -0.598721 0.483912
+       vertex -0.435539 -0.604086 0.484548
+    endloop
+  endfacet
+  facet normal -0.00897689 -0.0618295 0.998046
+    outer loop
+       vertex -0.435539 -0.604086 0.484548
+       vertex -0.543183 -0.598721 0.483912
+       vertex -0.537117 -0.70556 0.477348
+    endloop
+  endfacet
+  facet normal -0.0097986 -0.0610099 0.998089
+    outer loop
+       vertex -0.435539 -0.604086 0.484548
+       vertex -0.537117 -0.70556 0.477348
+       vertex -0.432571 -0.712323 0.477961
+    endloop
+  endfacet
+  facet normal -0.0155474 -0.150748 0.98845
+    outer loop
+       vertex -0.432571 -0.712323 0.477961
+       vertex -0.537117 -0.70556 0.477348
+       vertex -0.530826 -0.804713 0.462326
+    endloop
+  endfacet
+  facet normal -0.0175282 -0.148689 0.988729
+    outer loop
+       vertex -0.432571 -0.712323 0.477961
+       vertex -0.530826 -0.804713 0.462326
+       vertex -0.429502 -0.812817 0.462903
+    endloop
+  endfacet
+  facet normal -0.0312769 -0.323651 0.945659
+    outer loop
+       vertex -0.429502 -0.812817 0.462903
+       vertex -0.530826 -0.804713 0.462326
+       vertex -0.524954 -0.890932 0.433011
+    endloop
+  endfacet
+  facet normal -0.03527 -0.319286 0.947002
+    outer loop
+       vertex -0.429502 -0.812817 0.462903
+       vertex -0.524954 -0.890932 0.433011
+       vertex -0.426635 -0.900232 0.433537
+    endloop
+  endfacet
+  facet normal -0.0600783 -0.589544 0.805499
+    outer loop
+       vertex -0.426635 -0.900232 0.433537
+       vertex -0.524954 -0.890932 0.433011
+       vertex -0.520145 -0.958971 0.383572
+    endloop
+  endfacet
+  facet normal -0.0662835 -0.583182 0.809633
+    outer loop
+       vertex -0.426635 -0.900232 0.433537
+       vertex -0.520145 -0.958971 0.383572
+       vertex -0.424276 -0.969235 0.384027
+    endloop
+  endfacet
+  facet normal -0.0174955 -0.00022941 0.999847
+    outer loop
+       vertex -0.556066 -0.153076 0.490477
+       vertex -0.668998 -0.153076 0.488501
+       vertex -0.667544 -0.263998 0.488501
+    endloop
+  endfacet
+  facet normal -0.0175732 -0.000151294 0.999846
+    outer loop
+       vertex -0.556066 -0.153076 0.490477
+       vertex -0.667544 -0.263998 0.488501
+       vertex -0.555092 -0.266012 0.490477
+    endloop
+  endfacet
+  facet normal -0.017687 -0.00653024 0.999822
+    outer loop
+       vertex -0.555092 -0.266012 0.490477
+       vertex -0.667544 -0.263998 0.488501
+       vertex -0.663547 -0.374277 0.487851
+    endloop
+  endfacet
+  facet normal -0.01795 -0.00626667 0.999819
+    outer loop
+       vertex -0.555092 -0.266012 0.490477
+       vertex -0.663547 -0.374277 0.487851
+       vertex -0.552441 -0.378338 0.48982
+    endloop
+  endfacet
+  facet normal -0.0184092 -0.0189147 0.999652
+    outer loop
+       vertex -0.552441 -0.378338 0.48982
+       vertex -0.663547 -0.374277 0.487851
+       vertex -0.657374 -0.483271 0.485902
+    endloop
+  endfacet
+  facet normal -0.0189147 -0.0184092 0.999652
+    outer loop
+       vertex -0.552441 -0.378338 0.48982
+       vertex -0.657374 -0.483271 0.485902
+       vertex -0.548381 -0.489444 0.487851
+    endloop
+  endfacet
+  facet normal -0.0200061 -0.0378594 0.999083
+    outer loop
+       vertex -0.548381 -0.489444 0.487851
+       vertex -0.657374 -0.483271 0.485902
+       vertex -0.649392 -0.590336 0.482005
+    endloop
+  endfacet
+  facet normal -0.0208644 -0.0370009 0.999097
+    outer loop
+       vertex -0.548381 -0.489444 0.487851
+       vertex -0.649392 -0.590336 0.482005
+       vertex -0.543183 -0.598721 0.483912
+    endloop
+  endfacet
+  facet normal -0.0229775 -0.0640898 0.99768
+    outer loop
+       vertex -0.543183 -0.598721 0.483912
+       vertex -0.649392 -0.590336 0.482005
+       vertex -0.639968 -0.69483 0.47551
+    endloop
+  endfacet
+  facet normal -0.0243776 -0.0626848 0.997736
+    outer loop
+       vertex -0.543183 -0.598721 0.483912
+       vertex -0.639968 -0.69483 0.47551
+       vertex -0.537117 -0.70556 0.477348
+    endloop
+  endfacet
+  facet normal -0.033872 -0.155491 0.987256
+    outer loop
+       vertex -0.537117 -0.70556 0.477348
+       vertex -0.639968 -0.69483 0.47551
+       vertex -0.630152 -0.791677 0.460593
+    endloop
+  endfacet
+  facet normal -0.0371759 -0.152004 0.987681
+    outer loop
+       vertex -0.537117 -0.70556 0.477348
+       vertex -0.630152 -0.791677 0.460593
+       vertex -0.530826 -0.804713 0.462326
+    endloop
+  endfacet
+  facet normal -0.0600836 -0.332749 0.941099
+    outer loop
+       vertex -0.530826 -0.804713 0.462326
+       vertex -0.630152 -0.791677 0.460593
+       vertex -0.620998 -0.875802 0.431433
+    endloop
+  endfacet
+  facet normal -0.0667362 -0.325253 0.943269
+    outer loop
+       vertex -0.530826 -0.804713 0.462326
+       vertex -0.620998 -0.875802 0.431433
+       vertex -0.524954 -0.890932 0.433011
+    endloop
+  endfacet
+  facet normal -0.107582 -0.600267 0.792532
+    outer loop
+       vertex -0.524954 -0.890932 0.433011
+       vertex -0.620998 -0.875802 0.431433
+       vertex -0.613557 -0.942129 0.382207
+    endloop
+  endfacet
+  facet normal -0.117909 -0.58917 0.79936
+    outer loop
+       vertex -0.524954 -0.890932 0.433011
+       vertex -0.613557 -0.942129 0.382207
+       vertex -0.520145 -0.958971 0.383572
+    endloop
+  endfacet
+  facet normal -0.0355451 -0.000632252 0.999368
+    outer loop
+       vertex -0.668998 -0.153076 0.488501
+       vertex -0.780117 -0.153076 0.484548
+       vertex -0.778189 -0.261436 0.484548
+    endloop
+  endfacet
+  facet normal -0.0357077 -0.000468219 0.999362
+    outer loop
+       vertex -0.668998 -0.153076 0.488501
+       vertex -0.778189 -0.261436 0.484548
+       vertex -0.667544 -0.263998 0.488501
+    endloop
+  endfacet
+  facet normal -0.0358737 -0.00769073 0.999327
+    outer loop
+       vertex -0.667544 -0.263998 0.488501
+       vertex -0.778189 -0.261436 0.484548
+       vertex -0.772824 -0.369079 0.483912
+    endloop
+  endfacet
+  facet normal -0.0363589 -0.00720398 0.999313
+    outer loop
+       vertex -0.667544 -0.263998 0.488501
+       vertex -0.772824 -0.369079 0.483912
+       vertex -0.663547 -0.374277 0.487851
+    endloop
+  endfacet
+  facet normal -0.0370009 -0.0208644 0.999097
+    outer loop
+       vertex -0.663547 -0.374277 0.487851
+       vertex -0.772824 -0.369079 0.483912
+       vertex -0.764439 -0.475289 0.482005
+    endloop
+  endfacet
+  facet normal -0.0378594 -0.0200061 0.999083
+    outer loop
+       vertex -0.663547 -0.374277 0.487851
+       vertex -0.764439 -0.475289 0.482005
+       vertex -0.657374 -0.483271 0.485902
+    endloop
+  endfacet
+  facet normal -0.0393816 -0.0407609 0.998393
+    outer loop
+       vertex -0.657374 -0.483271 0.485902
+       vertex -0.764439 -0.475289 0.482005
+       vertex -0.753452 -0.579348 0.47819
+    endloop
+  endfacet
+  facet normal -0.0407609 -0.0393816 0.998393
+    outer loop
+       vertex -0.657374 -0.483271 0.485902
+       vertex -0.753452 -0.579348 0.47819
+       vertex -0.649392 -0.590336 0.482005
+    endloop
+  endfacet
+  facet normal -0.0437549 -0.0683228 0.996703
+    outer loop
+       vertex -0.649392 -0.590336 0.482005
+       vertex -0.753452 -0.579348 0.47819
+       vertex -0.740278 -0.680541 0.471832
+    endloop
+  endfacet
+  facet normal -0.0459616 -0.0661052 0.996754
+    outer loop
+       vertex -0.649392 -0.590336 0.482005
+       vertex -0.740278 -0.680541 0.471832
+       vertex -0.639968 -0.69483 0.47551
+    endloop
+  endfacet
+  facet normal -0.059407 -0.163581 0.98474
+    outer loop
+       vertex -0.639968 -0.69483 0.47551
+       vertex -0.740278 -0.680541 0.471832
+       vertex -0.726483 -0.774065 0.457128
+    endloop
+  endfacet
+  facet normal -0.0643796 -0.15828 0.985293
+    outer loop
+       vertex -0.639968 -0.69483 0.47551
+       vertex -0.726483 -0.774065 0.457128
+       vertex -0.630152 -0.791677 0.460593
+    endloop
+  endfacet
+  facet normal -0.0970594 -0.347373 0.932691
+    outer loop
+       vertex -0.630152 -0.791677 0.460593
+       vertex -0.726483 -0.774065 0.457128
+       vertex -0.71363 -0.855122 0.428277
+    endloop
+  endfacet
+  facet normal -0.106899 -0.335998 0.935777
+    outer loop
+       vertex -0.630152 -0.791677 0.460593
+       vertex -0.71363 -0.855122 0.428277
+       vertex -0.620998 -0.875802 0.431433
+    endloop
+  endfacet
+  facet normal -0.163788 -0.616038 0.7705
+    outer loop
+       vertex -0.620998 -0.875802 0.431433
+       vertex -0.71363 -0.855122 0.428277
+       vertex -0.703282 -0.918909 0.379476
+    endloop
+  endfacet
+  facet normal -0.178821 -0.599223 0.780356
+    outer loop
+       vertex -0.620998 -0.875802 0.431433
+       vertex -0.703282 -0.918909 0.379476
+       vertex -0.613557 -0.942129 0.382207
+    endloop
+  endfacet
+  facet normal -0.0604876 -0.00137164 0.998168
+    outer loop
+       vertex -0.780117 -0.153076 0.484548
+       vertex -0.888816 -0.153076 0.477961
+       vertex -0.886426 -0.258468 0.477961
+    endloop
+  endfacet
+  facet normal -0.0607746 -0.00108102 0.998151
+    outer loop
+       vertex -0.780117 -0.153076 0.484548
+       vertex -0.886426 -0.258468 0.477961
+       vertex -0.778189 -0.261436 0.484548
+    endloop
+  endfacet
+  facet normal -0.0610099 -0.00979853 0.998089
+    outer loop
+       vertex -0.778189 -0.261436 0.484548
+       vertex -0.886426 -0.258468 0.477961
+       vertex -0.879663 -0.363013 0.477348
+    endloop
+  endfacet
+  facet normal -0.0618295 -0.00897675 0.998046
+    outer loop
+       vertex -0.778189 -0.261436 0.484548
+       vertex -0.879663 -0.363013 0.477348
+       vertex -0.772824 -0.369079 0.483912
+    endloop
+  endfacet
+  facet normal -0.0626848 -0.0243778 0.997736
+    outer loop
+       vertex -0.772824 -0.369079 0.483912
+       vertex -0.879663 -0.363013 0.477348
+       vertex -0.868933 -0.465865 0.475509
+    endloop
+  endfacet
+  facet normal -0.06409 -0.0229775 0.99768
+    outer loop
+       vertex -0.772824 -0.369079 0.483912
+       vertex -0.868933 -0.465865 0.475509
+       vertex -0.764439 -0.475289 0.482005
+    endloop
+  endfacet
+  facet normal -0.0661054 -0.0459613 0.996754
+    outer loop
+       vertex -0.764439 -0.475289 0.482005
+       vertex -0.868933 -0.465865 0.475509
+       vertex -0.854644 -0.566175 0.471832
+    endloop
+  endfacet
+  facet normal -0.0683229 -0.0437549 0.996703
+    outer loop
+       vertex -0.764439 -0.475289 0.482005
+       vertex -0.854644 -0.566175 0.471832
+       vertex -0.753452 -0.579348 0.47819
+    endloop
+  endfacet
+  facet normal -0.0723704 -0.0759175 0.994484
+    outer loop
+       vertex -0.753452 -0.579348 0.47819
+       vertex -0.854644 -0.566175 0.471832
+       vertex -0.837201 -0.663098 0.465702
+    endloop
+  endfacet
+  facet normal -0.0759175 -0.0723704 0.994484
+    outer loop
+       vertex -0.753452 -0.579348 0.47819
+       vertex -0.837201 -0.663098 0.465702
+       vertex -0.740278 -0.680541 0.471832
+    endloop
+  endfacet
+  facet normal -0.0938263 -0.177072 0.979715
+    outer loop
+       vertex -0.740278 -0.680541 0.471832
+       vertex -0.837201 -0.663098 0.465702
+       vertex -0.818819 -0.75223 0.451353
+    endloop
+  endfacet
+  facet normal -0.1013 -0.169076 0.980383
+    outer loop
+       vertex -0.740278 -0.680541 0.471832
+       vertex -0.818819 -0.75223 0.451353
+       vertex -0.726483 -0.774065 0.457128
+    endloop
+  endfacet
+  facet normal -0.144927 -0.370172 0.917589
+    outer loop
+       vertex -0.726483 -0.774065 0.457128
+       vertex -0.818819 -0.75223 0.451353
+       vertex -0.801712 -0.829169 0.423016
+    endloop
+  endfacet
+  facet normal -0.159171 -0.353362 0.921846
+    outer loop
+       vertex -0.726483 -0.774065 0.457128
+       vertex -0.801712 -0.829169 0.423016
+       vertex -0.71363 -0.855122 0.428277
+    endloop
+  endfacet
+  facet normal -0.231774 -0.637734 0.734558
+    outer loop
+       vertex -0.71363 -0.855122 0.428277
+       vertex -0.801712 -0.829169 0.423016
+       vertex -0.788094 -0.889511 0.374925
+    endloop
+  endfacet
+  facet normal -0.252783 -0.613421 0.748208
+    outer loop
+       vertex -0.71363 -0.855122 0.428277
+       vertex -0.788094 -0.889511 0.374925
+       vertex -0.703282 -0.918909 0.379476
+    endloop
+  endfacet
+  facet normal -0.14757 -0.00406645 0.989043
+    outer loop
+       vertex -0.888816 -0.153076 0.477961
+       vertex -0.989739 -0.153076 0.462903
+       vertex -0.98692 -0.255399 0.462903
+    endloop
+  endfacet
+  facet normal -0.148288 -0.00336262 0.988939
+    outer loop
+       vertex -0.888816 -0.153076 0.477961
+       vertex -0.98692 -0.255399 0.462903
+       vertex -0.886426 -0.258468 0.477961
+    endloop
+  endfacet
+  facet normal -0.148689 -0.017528 0.988729
+    outer loop
+       vertex -0.886426 -0.258468 0.477961
+       vertex -0.98692 -0.255399 0.462903
+       vertex -0.978816 -0.356723 0.462326
+    endloop
+  endfacet
+  facet normal -0.150748 -0.0155472 0.98845
+    outer loop
+       vertex -0.886426 -0.258468 0.477961
+       vertex -0.978816 -0.356723 0.462326
+       vertex -0.879663 -0.363013 0.477348
+    endloop
+  endfacet
+  facet normal -0.152004 -0.0371759 0.987681
+    outer loop
+       vertex -0.879663 -0.363013 0.477348
+       vertex -0.978816 -0.356723 0.462326
+       vertex -0.96578 -0.456049 0.460593
+    endloop
+  endfacet
+  facet normal -0.155491 -0.0338721 0.987256
+    outer loop
+       vertex -0.879663 -0.363013 0.477348
+       vertex -0.96578 -0.456049 0.460593
+       vertex -0.868933 -0.465865 0.475509
+    endloop
+  endfacet
+  facet normal -0.15828 -0.0643794 0.985293
+    outer loop
+       vertex -0.868933 -0.465865 0.475509
+       vertex -0.96578 -0.456049 0.460593
+       vertex -0.948168 -0.55238 0.457128
+    endloop
+  endfacet
+  facet normal -0.163581 -0.0594065 0.98474
+    outer loop
+       vertex -0.868933 -0.465865 0.475509
+       vertex -0.948168 -0.55238 0.457128
+       vertex -0.854644 -0.566175 0.471832
+    endloop
+  endfacet
+  facet normal -0.169076 -0.1013 0.980383
+    outer loop
+       vertex -0.854644 -0.566175 0.471832
+       vertex -0.948168 -0.55238 0.457128
+       vertex -0.926333 -0.644716 0.451353
+    endloop
+  endfacet
+  facet normal -0.177073 -0.0938263 0.979715
+    outer loop
+       vertex -0.854644 -0.566175 0.471832
+       vertex -0.926333 -0.644716 0.451353
+       vertex -0.837201 -0.663098 0.465702
+    endloop
+  endfacet
+  facet normal -0.197294 -0.208973 0.957813
+    outer loop
+       vertex -0.837201 -0.663098 0.465702
+       vertex -0.926333 -0.644716 0.451353
+       vertex -0.902986 -0.728883 0.437799
+    endloop
+  endfacet
+  facet normal -0.208973 -0.197293 0.957813
+    outer loop
+       vertex -0.837201 -0.663098 0.465702
+       vertex -0.902986 -0.728883 0.437799
+       vertex -0.818819 -0.75223 0.451353
+    endloop
+  endfacet
+  facet normal -0.253977 -0.405925 0.877907
+    outer loop
+       vertex -0.818819 -0.75223 0.451353
+       vertex -0.902986 -0.728883 0.437799
+       vertex -0.880839 -0.800707 0.410996
+    endloop
+  endfacet
+  facet normal -0.272523 -0.3853 0.881632
+    outer loop
+       vertex -0.818819 -0.75223 0.451353
+       vertex -0.880839 -0.800707 0.410996
+       vertex -0.801712 -0.829169 0.423016
+    endloop
+  endfacet
+  facet normal -0.338868 -0.658151 0.672314
+    outer loop
+       vertex -0.801712 -0.829169 0.423016
+       vertex -0.880839 -0.800707 0.410996
+       vertex -0.863761 -0.856237 0.365244
+    endloop
+  endfacet
+  facet normal -0.364543 -0.62929 0.686368
+    outer loop
+       vertex -0.801712 -0.829169 0.423016
+       vertex -0.863761 -0.856237 0.365244
+       vertex -0.788094 -0.889511 0.374925
+    endloop
+  endfacet
+  facet normal -0.31721 -0.010184 0.948301
+    outer loop
+       vertex -0.989739 -0.153076 0.462903
+       vertex -1.07753 -0.153076 0.433537
+       vertex -1.07434 -0.252532 0.433537
+    endloop
+  endfacet
+  facet normal -0.318691 -0.00878155 0.947818
+    outer loop
+       vertex -0.989739 -0.153076 0.462903
+       vertex -1.07434 -0.252532 0.433537
+       vertex -0.98692 -0.255399 0.462903
+    endloop
+  endfacet
+  facet normal -0.319285 -0.0352696 0.947002
+    outer loop
+       vertex -0.98692 -0.255399 0.462903
+       vertex -1.07434 -0.252532 0.433537
+       vertex -1.06503 -0.350851 0.433011
+    endloop
+  endfacet
+  facet normal -0.323651 -0.0312765 0.945659
+    outer loop
+       vertex -0.98692 -0.255399 0.462903
+       vertex -1.06503 -0.350851 0.433011
+       vertex -0.978816 -0.356723 0.462326
+    endloop
+  endfacet
+  facet normal -0.325253 -0.0667365 0.943269
+    outer loop
+       vertex -0.978816 -0.356723 0.462326
+       vertex -1.06503 -0.350851 0.433011
+       vertex -1.04991 -0.446895 0.431433
+    endloop
+  endfacet
+  facet normal -0.332749 -0.0600835 0.941099
+    outer loop
+       vertex -0.978816 -0.356723 0.462326
+       vertex -1.04991 -0.446895 0.431433
+       vertex -0.96578 -0.456049 0.460593
+    endloop
+  endfacet
+  facet normal -0.335998 -0.106898 0.935777
+    outer loop
+       vertex -0.96578 -0.456049 0.460593
+       vertex -1.04991 -0.446895 0.431433
+       vertex -1.02922 -0.539527 0.428277
+    endloop
+  endfacet
+  facet normal -0.347373 -0.097059 0.932691
+    outer loop
+       vertex -0.96578 -0.456049 0.460593
+       vertex -1.02922 -0.539527 0.428277
+       vertex -0.948168 -0.55238 0.457128
+    endloop
+  endfacet
+  facet normal -0.353362 -0.15917 0.921846
+    outer loop
+       vertex -0.948168 -0.55238 0.457128
+       vertex -1.02922 -0.539527 0.428277
+       vertex -1.00327 -0.627609 0.423016
+    endloop
+  endfacet
+  facet normal -0.370172 -0.144927 0.917589
+    outer loop
+       vertex -0.948168 -0.55238 0.457128
+       vertex -1.00327 -0.627609 0.423016
+       vertex -0.926333 -0.644716 0.451353
+    endloop
+  endfacet
+  facet normal -0.3853 -0.272522 0.881632
+    outer loop
+       vertex -0.926333 -0.644716 0.451353
+       vertex -1.00327 -0.627609 0.423016
+       vertex -0.97481 -0.706736 0.410996
+    endloop
+  endfacet
+  facet normal -0.405924 -0.253977 0.877907
+    outer loop
+       vertex -0.926333 -0.644716 0.451353
+       vertex -0.97481 -0.706736 0.410996
+       vertex -0.902986 -0.728883 0.437799
+    endloop
+  endfacet
+  facet normal -0.431539 -0.461336 0.775205
+    outer loop
+       vertex -0.902986 -0.728883 0.437799
+       vertex -0.97481 -0.706736 0.410996
+       vertex -0.946604 -0.772501 0.38756
+    endloop
+  endfacet
+  facet normal -0.461336 -0.431539 0.775205
+    outer loop
+       vertex -0.902986 -0.728883 0.437799
+       vertex -0.946604 -0.772501 0.38756
+       vertex -0.880839 -0.800707 0.410996
+    endloop
+  endfacet
+  facet normal -0.487016 -0.66907 0.561392
+    outer loop
+       vertex -0.880839 -0.800707 0.410996
+       vertex -0.946604 -0.772501 0.38756
+       vertex -0.926049 -0.821389 0.347126
+    endloop
+  endfacet
+  facet normal -0.520668 -0.632558 0.573389
+    outer loop
+       vertex -0.880839 -0.800707 0.410996
+       vertex -0.926049 -0.821389 0.347126
+       vertex -0.863761 -0.856237 0.365244
+    endloop
+  endfacet
+  facet normal -0.581201 -0.0208773 0.813492
+    outer loop
+       vertex -1.07753 -0.153076 0.433537
+       vertex -1.14683 -0.153076 0.384027
+       vertex -1.14334 -0.250173 0.384027
+    endloop
+  endfacet
+  facet normal -0.583289 -0.0187264 0.812049
+    outer loop
+       vertex -1.07753 -0.153076 0.433537
+       vertex -1.14334 -0.250173 0.384027
+       vertex -1.07434 -0.252532 0.433537
+    endloop
+  endfacet
+  facet normal -0.583182 -0.0662835 0.809633
+    outer loop
+       vertex -1.07434 -0.252532 0.433537
+       vertex -1.14334 -0.250173 0.384027
+       vertex -1.13307 -0.346042 0.383572
+    endloop
+  endfacet
+  facet normal -0.589545 -0.0600777 0.805499
+    outer loop
+       vertex -1.07434 -0.252532 0.433537
+       vertex -1.13307 -0.346042 0.383572
+       vertex -1.06503 -0.350851 0.433011
+    endloop
+  endfacet
+  facet normal -0.589171 -0.117908 0.799359
+    outer loop
+       vertex -1.06503 -0.350851 0.433011
+       vertex -1.13307 -0.346042 0.383572
+       vertex -1.11623 -0.439453 0.382207
+    endloop
+  endfacet
+  facet normal -0.600266 -0.107582 0.792532
+    outer loop
+       vertex -1.06503 -0.350851 0.433011
+       vertex -1.11623 -0.439453 0.382207
+       vertex -1.04991 -0.446895 0.431433
+    endloop
+  endfacet
+  facet normal -0.599223 -0.17882 0.780356
+    outer loop
+       vertex -1.04991 -0.446895 0.431433
+       vertex -1.11623 -0.439453 0.382207
+       vertex -1.09301 -0.529179 0.379476
+    endloop
+  endfacet
+  facet normal -0.616038 -0.163787 0.7705
+    outer loop
+       vertex -1.04991 -0.446895 0.431433
+       vertex -1.09301 -0.529179 0.379476
+       vertex -1.02922 -0.539527 0.428277
+    endloop
+  endfacet
+  facet normal -0.613421 -0.252782 0.748209
+    outer loop
+       vertex -1.02922 -0.539527 0.428277
+       vertex -1.09301 -0.529179 0.379476
+       vertex -1.06361 -0.613991 0.374925
+    endloop
+  endfacet
+  facet normal -0.637734 -0.231773 0.734559
+    outer loop
+       vertex -1.02922 -0.539527 0.428277
+       vertex -1.06361 -0.613991 0.374925
+       vertex -1.00327 -0.627609 0.423016
+    endloop
+  endfacet
+  facet normal -0.62929 -0.364543 0.686369
+    outer loop
+       vertex -1.00327 -0.627609 0.423016
+       vertex -1.06361 -0.613991 0.374925
+       vertex -1.03034 -0.689657 0.365244
+    endloop
+  endfacet
+  facet normal -0.658151 -0.338867 0.672314
+    outer loop
+       vertex -1.00327 -0.627609 0.423016
+       vertex -1.03034 -0.689657 0.365244
+       vertex -0.97481 -0.706736 0.410996
+    endloop
+  endfacet
+  facet normal -0.632558 -0.520668 0.573389
+    outer loop
+       vertex -0.97481 -0.706736 0.410996
+       vertex -1.03034 -0.689657 0.365244
+       vertex -0.995492 -0.751946 0.347126
+    endloop
+  endfacet
+  facet normal -0.66907 -0.487016 0.561391
+    outer loop
+       vertex -0.97481 -0.706736 0.410996
+       vertex -0.995492 -0.751946 0.347126
+       vertex -0.946604 -0.772501 0.38756
+    endloop
+  endfacet
+  facet normal -0.623135 -0.661619 0.417089
+    outer loop
+       vertex -0.946604 -0.772501 0.38756
+       vertex -0.995492 -0.751946 0.347126
+       vertex -0.966663 -0.79256 0.325773
+    endloop
+  endfacet
+  facet normal -0.66162 -0.623134 0.417089
+    outer loop
+       vertex -0.946604 -0.772501 0.38756
+       vertex -0.966663 -0.79256 0.325773
+       vertex -0.926049 -0.821389 0.347126
+    endloop
+  endfacet
+  facet normal 0 0 1
+    outer loop
+       vertex -0.327179 -0.153076 0.491135
+       vertex -0.327179 -0.267822 0.491135
+       vertex -0.212921 -0.267334 0.491135
+    endloop
+  endfacet
+  facet normal 0 0 1
+    outer loop
+       vertex -0.327179 -0.153076 0.491135
+       vertex -0.212921 -0.267334 0.491135
+       vertex -0.212433 -0.153076 0.491135
+    endloop
+  endfacet
+  facet normal 0.00579568 -2.47709e-05 0.999983
+    outer loop
+       vertex -0.212433 -0.153076 0.491135
+       vertex -0.212921 -0.267334 0.491135
+       vertex -0.0992654 -0.266012 0.490477
+    endloop
+  endfacet
+  facet normal 0.005771 -4.95097e-05 0.999983
+    outer loop
+       vertex -0.212433 -0.153076 0.491135
+       vertex -0.0992654 -0.266012 0.490477
+       vertex -0.0982914 -0.153076 0.490477
+    endloop
+  endfacet
+  facet normal 0.0175732 -0.000151301 0.999846
+    outer loop
+       vertex -0.0982914 -0.153076 0.490477
+       vertex -0.0992654 -0.266012 0.490477
+       vertex 0.0131861 -0.263998 0.488501
+    endloop
+  endfacet
+  facet normal 0.0174955 -0.00022943 0.999847
+    outer loop
+       vertex -0.0982914 -0.153076 0.490477
+       vertex 0.0131861 -0.263998 0.488501
+       vertex 0.0146407 -0.153076 0.488501
+    endloop
+  endfacet
+  facet normal 0.0357077 -0.00046826 0.999362
+    outer loop
+       vertex 0.0146407 -0.153076 0.488501
+       vertex 0.0131861 -0.263998 0.488501
+       vertex 0.123831 -0.261436 0.484548
+    endloop
+  endfacet
+  facet normal 0.0355451 -0.000632257 0.999368
+    outer loop
+       vertex 0.0146407 -0.153076 0.488501
+       vertex 0.123831 -0.261436 0.484548
+       vertex 0.125759 -0.153076 0.484548
+    endloop
+  endfacet
+  facet normal 0.0607746 -0.00108103 0.998151
+    outer loop
+       vertex 0.125759 -0.153076 0.484548
+       vertex 0.123831 -0.261436 0.484548
+       vertex 0.232068 -0.258468 0.477961
+    endloop
+  endfacet
+  facet normal 0.0604875 -0.0013717 0.998168
+    outer loop
+       vertex 0.125759 -0.153076 0.484548
+       vertex 0.232068 -0.258468 0.477961
+       vertex 0.234458 -0.153076 0.477961
+    endloop
+  endfacet
+  facet normal 0.148288 -0.00336277 0.988939
+    outer loop
+       vertex 0.234458 -0.153076 0.477961
+       vertex 0.232068 -0.258468 0.477961
+       vertex 0.332562 -0.255399 0.462903
+    endloop
+  endfacet
+  facet normal 0.14757 -0.0040665 0.989043
+    outer loop
+       vertex 0.234458 -0.153076 0.477961
+       vertex 0.332562 -0.255399 0.462903
+       vertex 0.335381 -0.153076 0.462903
+    endloop
+  endfacet
+  facet normal 0.318691 -0.00878164 0.947818
+    outer loop
+       vertex 0.335381 -0.153076 0.462903
+       vertex 0.332562 -0.255399 0.462903
+       vertex 0.419978 -0.252533 0.433537
+    endloop
+  endfacet
+  facet normal 0.31721 -0.0101841 0.948301
+    outer loop
+       vertex 0.335381 -0.153076 0.462903
+       vertex 0.419978 -0.252533 0.433537
+       vertex 0.423171 -0.153076 0.433537
+    endloop
+  endfacet
+  facet normal 0.583289 -0.0187266 0.812049
+    outer loop
+       vertex 0.423171 -0.153076 0.433537
+       vertex 0.419978 -0.252533 0.433537
+       vertex 0.48898 -0.250174 0.384027
+    endloop
+  endfacet
+  facet normal 0.581201 -0.0208779 0.813492
+    outer loop
+       vertex 0.423171 -0.153076 0.433537
+       vertex 0.48898 -0.250174 0.384027
+       vertex 0.492468 -0.153076 0.384027
+    endloop
+  endfacet
+  facet normal 4.95028e-05 -0.005771 0.999983
+    outer loop
+       vertex -0.327179 -0.267822 0.491135
+       vertex -0.327179 -0.381964 0.490477
+       vertex -0.214243 -0.38099 0.490477
+    endloop
+  endfacet
+  facet normal 2.47649e-05 -0.00579568 0.999983
+    outer loop
+       vertex -0.327179 -0.267822 0.491135
+       vertex -0.214243 -0.38099 0.490477
+       vertex -0.212921 -0.267334 0.491135
+    endloop
+  endfacet
+  facet normal 0.0059822 -0.00586489 0.999965
+    outer loop
+       vertex -0.212921 -0.267334 0.491135
+       vertex -0.214243 -0.38099 0.490477
+       vertex -0.101917 -0.378338 0.48982
+    endloop
+  endfacet
+  facet normal 0.00586488 -0.00598221 0.999965
+    outer loop
+       vertex -0.212921 -0.267334 0.491135
+       vertex -0.101917 -0.378338 0.48982
+       vertex -0.0992654 -0.266012 0.490477
+    endloop
+  endfacet
+  facet normal 0.01795 -0.00626669 0.999819
+    outer loop
+       vertex -0.0992654 -0.266012 0.490477
+       vertex -0.101917 -0.378338 0.48982
+       vertex 0.00918905 -0.374278 0.487851
+    endloop
+  endfacet
+  facet normal 0.017687 -0.00653025 0.999822
+    outer loop
+       vertex -0.0992654 -0.266012 0.490477
+       vertex 0.00918905 -0.374278 0.487851
+       vertex 0.0131861 -0.263998 0.488501
+    endloop
+  endfacet
+  facet normal 0.0363589 -0.00720401 0.999313
+    outer loop
+       vertex 0.0131861 -0.263998 0.488501
+       vertex 0.00918905 -0.374278 0.487851
+       vertex 0.118466 -0.36908 0.483912
+    endloop
+  endfacet
+  facet normal 0.0358736 -0.0076908 0.999327
+    outer loop
+       vertex 0.0131861 -0.263998 0.488501
+       vertex 0.118466 -0.36908 0.483912
+       vertex 0.123831 -0.261436 0.484548
+    endloop
+  endfacet
+  facet normal 0.0618295 -0.00897687 0.998046
+    outer loop
+       vertex 0.123831 -0.261436 0.484548
+       vertex 0.118466 -0.36908 0.483912
+       vertex 0.225305 -0.363014 0.477348
+    endloop
+  endfacet
+  facet normal 0.0610099 -0.0097986 0.998089
+    outer loop
+       vertex 0.123831 -0.261436 0.484548
+       vertex 0.225305 -0.363014 0.477348
+       vertex 0.232068 -0.258468 0.477961
+    endloop
+  endfacet
+  facet normal 0.150748 -0.0155474 0.98845
+    outer loop
+       vertex 0.232068 -0.258468 0.477961
+       vertex 0.225305 -0.363014 0.477348
+       vertex 0.324458 -0.356723 0.462326
+    endloop
+  endfacet
+  facet normal 0.148689 -0.0175282 0.988729
+    outer loop
+       vertex 0.232068 -0.258468 0.477961
+       vertex 0.324458 -0.356723 0.462326
+       vertex 0.332562 -0.255399 0.462903
+    endloop
+  endfacet
+  facet normal 0.323651 -0.0312769 0.945659
+    outer loop
+       vertex 0.332562 -0.255399 0.462903
+       vertex 0.324458 -0.356723 0.462326
+       vertex 0.410677 -0.350851 0.433011
+    endloop
+  endfacet
+  facet normal 0.319286 -0.03527 0.947002
+    outer loop
+       vertex 0.332562 -0.255399 0.462903
+       vertex 0.410677 -0.350851 0.433011
+       vertex 0.419978 -0.252533 0.433537
+    endloop
+  endfacet
+  facet normal 0.589544 -0.0600783 0.805499
+    outer loop
+       vertex 0.419978 -0.252533 0.433537
+       vertex 0.410677 -0.350851 0.433011
+       vertex 0.478716 -0.346042 0.383572
+    endloop
+  endfacet
+  facet normal 0.583182 -0.0662833 0.809633
+    outer loop
+       vertex 0.419978 -0.252533 0.433537
+       vertex 0.478716 -0.346042 0.383572
+       vertex 0.48898 -0.250174 0.384027
+    endloop
+  endfacet
+  facet normal 0.00022942 -0.0174955 0.999847
+    outer loop
+       vertex -0.327179 -0.381964 0.490477
+       vertex -0.327179 -0.494896 0.488501
+       vertex -0.216257 -0.493441 0.488501
+    endloop
+  endfacet
+  facet normal 0.00015128 -0.0175732 0.999846
+    outer loop
+       vertex -0.327179 -0.381964 0.490477
+       vertex -0.216257 -0.493441 0.488501
+       vertex -0.214243 -0.38099 0.490477
+    endloop
+  endfacet
+  facet normal 0.00653023 -0.017687 0.999822
+    outer loop
+       vertex -0.214243 -0.38099 0.490477
+       vertex -0.216257 -0.493441 0.488501
+       vertex -0.105978 -0.489444 0.487851
+    endloop
+  endfacet
+  facet normal 0.00626667 -0.01795 0.999819
+    outer loop
+       vertex -0.214243 -0.38099 0.490477
+       vertex -0.105978 -0.489444 0.487851
+       vertex -0.101917 -0.378338 0.48982
+    endloop
+  endfacet
+  facet normal 0.0189147 -0.0184092 0.999652
+    outer loop
+       vertex -0.101917 -0.378338 0.48982
+       vertex -0.105978 -0.489444 0.487851
+       vertex 0.00301617 -0.483271 0.485902
+    endloop
+  endfacet
+  facet normal 0.0184092 -0.0189147 0.999652
+    outer loop
+       vertex -0.101917 -0.378338 0.48982
+       vertex 0.00301617 -0.483271 0.485902
+       vertex 0.00918905 -0.374278 0.487851
+    endloop
+  endfacet
+  facet normal 0.0378594 -0.0200061 0.999083
+    outer loop
+       vertex 0.00918905 -0.374278 0.487851
+       vertex 0.00301617 -0.483271 0.485902
+       vertex 0.110081 -0.475289 0.482005
+    endloop
+  endfacet
+  facet normal 0.0370009 -0.0208644 0.999097
+    outer loop
+       vertex 0.00918905 -0.374278 0.487851
+       vertex 0.110081 -0.475289 0.482005
+       vertex 0.118466 -0.36908 0.483912
+    endloop
+  endfacet
+  facet normal 0.0640897 -0.0229775 0.99768
+    outer loop
+       vertex 0.118466 -0.36908 0.483912
+       vertex 0.110081 -0.475289 0.482005
+       vertex 0.214575 -0.465865 0.47551
+    endloop
+  endfacet
+  facet normal 0.0626848 -0.0243775 0.997736
+    outer loop
+       vertex 0.118466 -0.36908 0.483912
+       vertex 0.214575 -0.465865 0.47551
+       vertex 0.225305 -0.363014 0.477348
+    endloop
+  endfacet
+  facet normal 0.155491 -0.033872 0.987256
+    outer loop
+       vertex 0.225305 -0.363014 0.477348
+       vertex 0.214575 -0.465865 0.47551
+       vertex 0.311422 -0.45605 0.460593
+    endloop
+  endfacet
+  facet normal 0.152004 -0.0371759 0.987681
+    outer loop
+       vertex 0.225305 -0.363014 0.477348
+       vertex 0.311422 -0.45605 0.460593
+       vertex 0.324458 -0.356723 0.462326
+    endloop
+  endfacet
+  facet normal 0.332749 -0.0600837 0.941099
+    outer loop
+       vertex 0.324458 -0.356723 0.462326
+       vertex 0.311422 -0.45605 0.460593
+       vertex 0.395547 -0.446895 0.431433
+    endloop
+  endfacet
+  facet normal 0.325253 -0.0667365 0.943269
+    outer loop
+       vertex 0.324458 -0.356723 0.462326
+       vertex 0.395547 -0.446895 0.431433
+       vertex 0.410677 -0.350851 0.433011
+    endloop
+  endfacet
+  facet normal 0.600266 -0.107582 0.792532
+    outer loop
+       vertex 0.410677 -0.350851 0.433011
+       vertex 0.395547 -0.446895 0.431433
+       vertex 0.461874 -0.439454 0.382207
+    endloop
+  endfacet
+  facet normal 0.58917 -0.117909 0.79936
+    outer loop
+       vertex 0.410677 -0.350851 0.433011
+       vertex 0.461874 -0.439454 0.382207
+       vertex 0.478716 -0.346042 0.383572
+    endloop
+  endfacet
+  facet normal 0.000632233 -0.0355451 0.999368
+    outer loop
+       vertex -0.327179 -0.494896 0.488501
+       vertex -0.327179 -0.606014 0.484548
+       vertex -0.218819 -0.604086 0.484548
+    endloop
+  endfacet
+  facet normal 0.000468238 -0.0357077 0.999362
+    outer loop
+       vertex -0.327179 -0.494896 0.488501
+       vertex -0.218819 -0.604086 0.484548
+       vertex -0.216257 -0.493441 0.488501
+    endloop
+  endfacet
+  facet normal 0.00769073 -0.0358737 0.999327
+    outer loop
+       vertex -0.216257 -0.493441 0.488501
+       vertex -0.218819 -0.604086 0.484548
+       vertex -0.111176 -0.598722 0.483912
+    endloop
+  endfacet
+  facet normal 0.00720397 -0.0363589 0.999313
+    outer loop
+       vertex -0.216257 -0.493441 0.488501
+       vertex -0.111176 -0.598722 0.483912
+       vertex -0.105978 -0.489444 0.487851
+    endloop
+  endfacet
+  facet normal 0.0208644 -0.0370009 0.999097
+    outer loop
+       vertex -0.105978 -0.489444 0.487851
+       vertex -0.111176 -0.598722 0.483912
+       vertex -0.00496588 -0.590337 0.482005
+    endloop
+  endfacet
+  facet normal 0.0200061 -0.0378594 0.999083
+    outer loop
+       vertex -0.105978 -0.489444 0.487851
+       vertex -0.00496588 -0.590337 0.482005
+       vertex 0.00301617 -0.483271 0.485902
+    endloop
+  endfacet
+  facet normal 0.0407609 -0.0393816 0.998393
+    outer loop
+       vertex 0.00301617 -0.483271 0.485902
+       vertex -0.00496588 -0.590337 0.482005
+       vertex 0.0990935 -0.579349 0.47819
+    endloop
+  endfacet
+  facet normal 0.0393816 -0.0407609 0.998393
+    outer loop
+       vertex 0.00301617 -0.483271 0.485902
+       vertex 0.0990935 -0.579349 0.47819
+       vertex 0.110081 -0.475289 0.482005
+    endloop
+  endfacet
+  facet normal 0.0683229 -0.043755 0.996703
+    outer loop
+       vertex 0.110081 -0.475289 0.482005
+       vertex 0.0990935 -0.579349 0.47819
+       vertex 0.200286 -0.566175 0.471832
+    endloop
+  endfacet
+  facet normal 0.0661051 -0.0459617 0.996754
+    outer loop
+       vertex 0.110081 -0.475289 0.482005
+       vertex 0.200286 -0.566175 0.471832
+       vertex 0.214575 -0.465865 0.47551
+    endloop
+  endfacet
+  facet normal 0.163581 -0.0594071 0.98474
+    outer loop
+       vertex 0.214575 -0.465865 0.47551
+       vertex 0.200286 -0.566175 0.471832
+       vertex 0.29381 -0.55238 0.457128
+    endloop
+  endfacet
+  facet normal 0.15828 -0.0643797 0.985293
+    outer loop
+       vertex 0.214575 -0.465865 0.47551
+       vertex 0.29381 -0.55238 0.457128
+       vertex 0.311422 -0.45605 0.460593
+    endloop
+  endfacet
+  facet normal 0.347372 -0.0970595 0.932691
+    outer loop
+       vertex 0.311422 -0.45605 0.460593
+       vertex 0.29381 -0.55238 0.457128
+       vertex 0.374867 -0.539527 0.428277
+    endloop
+  endfacet
+  facet normal 0.335998 -0.106899 0.935777
+    outer loop
+       vertex 0.311422 -0.45605 0.460593
+       vertex 0.374867 -0.539527 0.428277
+       vertex 0.395547 -0.446895 0.431433
+    endloop
+  endfacet
+  facet normal 0.616038 -0.163787 0.770501
+    outer loop
+       vertex 0.395547 -0.446895 0.431433
+       vertex 0.374867 -0.539527 0.428277
+       vertex 0.438655 -0.52918 0.379476
+    endloop
+  endfacet
+  facet normal 0.599223 -0.17882 0.780356
+    outer loop
+       vertex 0.395547 -0.446895 0.431433
+       vertex 0.438655 -0.52918 0.379476
+       vertex 0.461874 -0.439454 0.382207
+    endloop
+  endfacet
+  facet normal 0.00137164 -0.0604875 0.998168
+    outer loop
+       vertex -0.327179 -0.606014 0.484548
+       vertex -0.327179 -0.714713 0.477961
+       vertex -0.221787 -0.712323 0.477961
+    endloop
+  endfacet
+  facet normal 0.00108098 -0.0607746 0.998151
+    outer loop
+       vertex -0.327179 -0.606014 0.484548
+       vertex -0.221787 -0.712323 0.477961
+       vertex -0.218819 -0.604086 0.484548
+    endloop
+  endfacet
+  facet normal 0.00979853 -0.0610099 0.998089
+    outer loop
+       vertex -0.218819 -0.604086 0.484548
+       vertex -0.221787 -0.712323 0.477961
+       vertex -0.117242 -0.70556 0.477348
+    endloop
+  endfacet
+  facet normal 0.00897675 -0.0618295 0.998046
+    outer loop
+       vertex -0.218819 -0.604086 0.484548
+       vertex -0.117242 -0.70556 0.477348
+       vertex -0.111176 -0.598722 0.483912
+    endloop
+  endfacet
+  facet normal 0.0243778 -0.0626848 0.997736
+    outer loop
+       vertex -0.111176 -0.598722 0.483912
+       vertex -0.117242 -0.70556 0.477348
+       vertex -0.0143905 -0.694831 0.475509
+    endloop
+  endfacet
+  facet normal 0.0229775 -0.06409 0.99768
+    outer loop
+       vertex -0.111176 -0.598722 0.483912
+       vertex -0.0143905 -0.694831 0.475509
+       vertex -0.00496588 -0.590337 0.482005
+    endloop
+  endfacet
+  facet normal 0.0459613 -0.0661055 0.996754
+    outer loop
+       vertex -0.00496588 -0.590337 0.482005
+       vertex -0.0143905 -0.694831 0.475509
+       vertex 0.08592 -0.680541 0.471832
+    endloop
+  endfacet
+  facet normal 0.0437549 -0.0683229 0.996703
+    outer loop
+       vertex -0.00496588 -0.590337 0.482005
+       vertex 0.08592 -0.680541 0.471832
+       vertex 0.0990935 -0.579349 0.47819
+    endloop
+  endfacet
+  facet normal 0.0759175 -0.0723704 0.994484
+    outer loop
+       vertex 0.0990935 -0.579349 0.47819
+       vertex 0.08592 -0.680541 0.471832
+       vertex 0.182843 -0.663098 0.465702
+    endloop
+  endfacet
+  facet normal 0.0723704 -0.0759175 0.994484
+    outer loop
+       vertex 0.0990935 -0.579349 0.47819
+       vertex 0.182843 -0.663098 0.465702
+       vertex 0.200286 -0.566175 0.471832
+    endloop
+  endfacet
+  facet normal 0.177072 -0.0938264 0.979715
+    outer loop
+       vertex 0.200286 -0.566175 0.471832
+       vertex 0.182843 -0.663098 0.465702
+       vertex 0.271975 -0.644716 0.451353
+    endloop
+  endfacet
+  facet normal 0.169076 -0.1013 0.980383
+    outer loop
+       vertex 0.200286 -0.566175 0.471832
+       vertex 0.271975 -0.644716 0.451353
+       vertex 0.29381 -0.55238 0.457128
+    endloop
+  endfacet
+  facet normal 0.370172 -0.144927 0.917589
+    outer loop
+       vertex 0.29381 -0.55238 0.457128
+       vertex 0.271975 -0.644716 0.451353
+       vertex 0.348914 -0.627609 0.423016
+    endloop
+  endfacet
+  facet normal 0.353361 -0.159171 0.921846
+    outer loop
+       vertex 0.29381 -0.55238 0.457128
+       vertex 0.348914 -0.627609 0.423016
+       vertex 0.374867 -0.539527 0.428277
+    endloop
+  endfacet
+  facet normal 0.637734 -0.231775 0.734558
+    outer loop
+       vertex 0.374867 -0.539527 0.428277
+       vertex 0.348914 -0.627609 0.423016
+       vertex 0.409256 -0.613992 0.374925
+    endloop
+  endfacet
+  facet normal 0.61342 -0.252784 0.748209
+    outer loop
+       vertex 0.374867 -0.539527 0.428277
+       vertex 0.409256 -0.613992 0.374925
+       vertex 0.438655 -0.52918 0.379476
+    endloop
+  endfacet
+  facet normal 0.00406637 -0.14757 0.989043
+    outer loop
+       vertex -0.327179 -0.714713 0.477961
+       vertex -0.327179 -0.815636 0.462903
+       vertex -0.224856 -0.812817 0.462903
+    endloop
+  endfacet
+  facet normal 0.00336262 -0.148288 0.988939
+    outer loop
+       vertex -0.327179 -0.714713 0.477961
+       vertex -0.224856 -0.812817 0.462903
+       vertex -0.221787 -0.712323 0.477961
+    endloop
+  endfacet
+  facet normal 0.0175279 -0.148689 0.988729
+    outer loop
+       vertex -0.221787 -0.712323 0.477961
+       vertex -0.224856 -0.812817 0.462903
+       vertex -0.123532 -0.804713 0.462326
+    endloop
+  endfacet
+  facet normal 0.0155472 -0.150748 0.98845
+    outer loop
+       vertex -0.221787 -0.712323 0.477961
+       vertex -0.123532 -0.804713 0.462326
+       vertex -0.117242 -0.70556 0.477348
+    endloop
+  endfacet
+  facet normal 0.0371758 -0.152004 0.987681
+    outer loop
+       vertex -0.117242 -0.70556 0.477348
+       vertex -0.123532 -0.804713 0.462326
+       vertex -0.0242058 -0.791678 0.460593
+    endloop
+  endfacet
+  facet normal 0.0338721 -0.155491 0.987256
+    outer loop
+       vertex -0.117242 -0.70556 0.477348
+       vertex -0.0242058 -0.791678 0.460593
+       vertex -0.0143905 -0.694831 0.475509
+    endloop
+  endfacet
+  facet normal 0.0643794 -0.15828 0.985293
+    outer loop
+       vertex -0.0143905 -0.694831 0.475509
+       vertex -0.0242058 -0.791678 0.460593
+       vertex 0.0721248 -0.774065 0.457128
+    endloop
+  endfacet
+  facet normal 0.0594066 -0.163581 0.98474
+    outer loop
+       vertex -0.0143905 -0.694831 0.475509
+       vertex 0.0721248 -0.774065 0.457128
+       vertex 0.08592 -0.680541 0.471832
+    endloop
+  endfacet
+  facet normal 0.1013 -0.169076 0.980383
+    outer loop
+       vertex 0.08592 -0.680541 0.471832
+       vertex 0.0721248 -0.774065 0.457128
+       vertex 0.164461 -0.75223 0.451353
+    endloop
+  endfacet
+  facet normal 0.0938263 -0.177073 0.979715
+    outer loop
+       vertex 0.08592 -0.680541 0.471832
+       vertex 0.164461 -0.75223 0.451353
+       vertex 0.182843 -0.663098 0.465702
+    endloop
+  endfacet
+  facet normal 0.208973 -0.197294 0.957813
+    outer loop
+       vertex 0.182843 -0.663098 0.465702
+       vertex 0.164461 -0.75223 0.451353
+       vertex 0.248628 -0.728883 0.437799
+    endloop
+  endfacet
+  facet normal 0.197293 -0.208974 0.957813
+    outer loop
+       vertex 0.182843 -0.663098 0.465702
+       vertex 0.248628 -0.728883 0.437799
+       vertex 0.271975 -0.644716 0.451353
+    endloop
+  endfacet
+  facet normal 0.405924 -0.253977 0.877907
+    outer loop
+       vertex 0.271975 -0.644716 0.451353
+       vertex 0.248628 -0.728883 0.437799
+       vertex 0.320452 -0.706736 0.410996
+    endloop
+  endfacet
+  facet normal 0.3853 -0.272523 0.881632
+    outer loop
+       vertex 0.271975 -0.644716 0.451353
+       vertex 0.320452 -0.706736 0.410996
+       vertex 0.348914 -0.627609 0.423016
+    endloop
+  endfacet
+  facet normal 0.658151 -0.338868 0.672314
+    outer loop
+       vertex 0.348914 -0.627609 0.423016
+       vertex 0.320452 -0.706736 0.410996
+       vertex 0.375982 -0.689658 0.365244
+    endloop
+  endfacet
+  facet normal 0.62929 -0.364544 0.686369
+    outer loop
+       vertex 0.348914 -0.627609 0.423016
+       vertex 0.375982 -0.689658 0.365244
+       vertex 0.409256 -0.613992 0.374925
+    endloop
+  endfacet
+  facet normal 0.0101836 -0.31721 0.948301
+    outer loop
+       vertex -0.327179 -0.815636 0.462903
+       vertex -0.327179 -0.903425 0.433537
+       vertex -0.227723 -0.900233 0.433537
+    endloop
+  endfacet
+  facet normal 0.00878137 -0.318691 0.947818
+    outer loop
+       vertex -0.327179 -0.815636 0.462903
+       vertex -0.227723 -0.900233 0.433537
+       vertex -0.224856 -0.812817 0.462903
+    endloop
+  endfacet
+  facet normal 0.0352696 -0.319286 0.947002
+    outer loop
+       vertex -0.224856 -0.812817 0.462903
+       vertex -0.227723 -0.900233 0.433537
+       vertex -0.129404 -0.890932 0.433011
+    endloop
+  endfacet
+  facet normal 0.0312763 -0.323651 0.945659
+    outer loop
+       vertex -0.224856 -0.812817 0.462903
+       vertex -0.129404 -0.890932 0.433011
+       vertex -0.123532 -0.804713 0.462326
+    endloop
+  endfacet
+  facet normal 0.0667361 -0.325254 0.943269
+    outer loop
+       vertex -0.123532 -0.804713 0.462326
+       vertex -0.129404 -0.890932 0.433011
+       vertex -0.0333602 -0.875802 0.431433
+    endloop
+  endfacet
+  facet normal 0.0600835 -0.332749 0.941099
+    outer loop
+       vertex -0.123532 -0.804713 0.462326
+       vertex -0.0333602 -0.875802 0.431433
+       vertex -0.0242058 -0.791678 0.460593
+    endloop
+  endfacet
+  facet normal 0.106898 -0.335998 0.935777
+    outer loop
+       vertex -0.0242058 -0.791678 0.460593
+       vertex -0.0333602 -0.875802 0.431433
+       vertex 0.0592716 -0.855122 0.428277
+    endloop
+  endfacet
+  facet normal 0.0970591 -0.347373 0.932691
+    outer loop
+       vertex -0.0242058 -0.791678 0.460593
+       vertex 0.0592716 -0.855122 0.428277
+       vertex 0.0721248 -0.774065 0.457128
+    endloop
+  endfacet
+  facet normal 0.159171 -0.353362 0.921846
+    outer loop
+       vertex 0.0721248 -0.774065 0.457128
+       vertex 0.0592716 -0.855122 0.428277
+       vertex 0.147354 -0.829169 0.423016
+    endloop
+  endfacet
+  facet normal 0.144927 -0.370173 0.917588
+    outer loop
+       vertex 0.0721248 -0.774065 0.457128
+       vertex 0.147354 -0.829169 0.423016
+       vertex 0.164461 -0.75223 0.451353
+    endloop
+  endfacet
+  facet normal 0.272522 -0.3853 0.881632
+    outer loop
+       vertex 0.164461 -0.75223 0.451353
+       vertex 0.147354 -0.829169 0.423016
+       vertex 0.226481 -0.800707 0.410996
+    endloop
+  endfacet
+  facet normal 0.253977 -0.405925 0.877907
+    outer loop
+       vertex 0.164461 -0.75223 0.451353
+       vertex 0.226481 -0.800707 0.410996
+       vertex 0.248628 -0.728883 0.437799
+    endloop
+  endfacet
+  facet normal 0.461335 -0.431539 0.775206
+    outer loop
+       vertex 0.248628 -0.728883 0.437799
+       vertex 0.226481 -0.800707 0.410996
+       vertex 0.292246 -0.772501 0.38756
+    endloop
+  endfacet
+  facet normal 0.431539 -0.461336 0.775206
+    outer loop
+       vertex 0.248628 -0.728883 0.437799
+       vertex 0.292246 -0.772501 0.38756
+       vertex 0.320452 -0.706736 0.410996
+    endloop
+  endfacet
+  facet normal 0.66907 -0.487016 0.561392
+    outer loop
+       vertex 0.320452 -0.706736 0.410996
+       vertex 0.292246 -0.772501 0.38756
+       vertex 0.341134 -0.751946 0.347126
+    endloop
+  endfacet
+  facet normal 0.632558 -0.520668 0.573389
+    outer loop
+       vertex 0.320452 -0.706736 0.410996
+       vertex 0.341134 -0.751946 0.347126
+       vertex 0.375982 -0.689658 0.365244
+    endloop
+  endfacet
+  facet normal 0.020877 -0.581201 0.813492
+    outer loop
+       vertex -0.327179 -0.903425 0.433537
+       vertex -0.327179 -0.972723 0.384027
+       vertex -0.230082 -0.969235 0.384027
+    endloop
+  endfacet
+  facet normal 0.0187257 -0.583289 0.812049
+    outer loop
+       vertex -0.327179 -0.903425 0.433537
+       vertex -0.230082 -0.969235 0.384027
+       vertex -0.227723 -0.900233 0.433537
+    endloop
+  endfacet
+  facet normal 0.0662835 -0.583182 0.809633
+    outer loop
+       vertex -0.227723 -0.900233 0.433537
+       vertex -0.230082 -0.969235 0.384027
+       vertex -0.134214 -0.958971 0.383572
+    endloop
+  endfacet
+  facet normal 0.0600777 -0.589544 0.805499
+    outer loop
+       vertex -0.227723 -0.900233 0.433537
+       vertex -0.134214 -0.958971 0.383572
+       vertex -0.129404 -0.890932 0.433011
+    endloop
+  endfacet
+  facet normal 0.117908 -0.589171 0.799359
+    outer loop
+       vertex -0.129404 -0.890932 0.433011
+       vertex -0.134214 -0.958971 0.383572
+       vertex -0.0408019 -0.942129 0.382207
+    endloop
+  endfacet
+  facet normal 0.107582 -0.600267 0.792532
+    outer loop
+       vertex -0.129404 -0.890932 0.433011
+       vertex -0.0408019 -0.942129 0.382207
+       vertex -0.0333602 -0.875802 0.431433
+    endloop
+  endfacet
+  facet normal 0.178819 -0.599223 0.780356
+    outer loop
+       vertex -0.0333602 -0.875802 0.431433
+       vertex -0.0408019 -0.942129 0.382207
+       vertex 0.0489241 -0.91891 0.379476
+    endloop
+  endfacet
+  facet normal 0.163787 -0.616038 0.7705
+    outer loop
+       vertex -0.0333602 -0.875802 0.431433
+       vertex 0.0489241 -0.91891 0.379476
+       vertex 0.0592716 -0.855122 0.428277
+    endloop
+  endfacet
+  facet normal 0.252783 -0.61342 0.748209
+    outer loop
+       vertex 0.0592716 -0.855122 0.428277
+       vertex 0.0489241 -0.91891 0.379476
+       vertex 0.133736 -0.889511 0.374925
+    endloop
+  endfacet
+  facet normal 0.231774 -0.637734 0.734558
+    outer loop
+       vertex 0.0592716 -0.855122 0.428277
+       vertex 0.133736 -0.889511 0.374925
+       vertex 0.147354 -0.829169 0.423016
+    endloop
+  endfacet
+  facet normal 0.364543 -0.629291 0.686368
+    outer loop
+       vertex 0.147354 -0.829169 0.423016
+       vertex 0.133736 -0.889511 0.374925
+       vertex 0.209402 -0.856237 0.365244
+    endloop
+  endfacet
+  facet normal 0.338867 -0.658152 0.672314
+    outer loop
+       vertex 0.147354 -0.829169 0.423016
+       vertex 0.209402 -0.856237 0.365244
+       vertex 0.226481 -0.800707 0.410996
+    endloop
+  endfacet
+  facet normal 0.520667 -0.632559 0.573389
+    outer loop
+       vertex 0.226481 -0.800707 0.410996
+       vertex 0.209402 -0.856237 0.365244
+       vertex 0.271691 -0.821389 0.347126
+    endloop
+  endfacet
+  facet normal 0.487015 -0.669071 0.561391
+    outer loop
+       vertex 0.226481 -0.800707 0.410996
+       vertex 0.271691 -0.821389 0.347126
+       vertex 0.292246 -0.772501 0.38756
+    endloop
+  endfacet
+  facet normal 0.661618 -0.623135 0.41709
+    outer loop
+       vertex 0.292246 -0.772501 0.38756
+       vertex 0.271691 -0.821389 0.347126
+       vertex 0.312305 -0.79256 0.325773
+    endloop
+  endfacet
+  facet normal 0.623134 -0.661619 0.41709
+    outer loop
+       vertex 0.292246 -0.772501 0.38756
+       vertex 0.312305 -0.79256 0.325773
+       vertex 0.341134 -0.751946 0.347126
+    endloop
+  endfacet
+  facet normal 0.986795 0.0427593 -0.156226
+    outer loop
+       vertex 0.552765 -0.153076 -0.457381
+       vertex 0.536469 -0.153076 -0.560317
+       vertex 0.532766 -0.0650228 -0.559605
+    endloop
+  endfacet
+  facet normal 0.986749 0.042245 -0.15666
+    outer loop
+       vertex 0.552765 -0.153076 -0.457381
+       vertex 0.532766 -0.0650228 -0.559605
+       vertex 0.549001 -0.0633138 -0.456883
+    endloop
+  endfacet
+  facet normal 0.979297 0.1279 -0.156907
+    outer loop
+       vertex 0.549001 -0.0633138 -0.456883
+       vertex 0.532766 -0.0650228 -0.559605
+       vertex 0.52167 0.0221176 -0.557825
+    endloop
+  endfacet
+  facet normal 0.979289 0.126599 -0.158006
+    outer loop
+       vertex 0.549001 -0.0633138 -0.456883
+       vertex 0.52167 0.0221176 -0.557825
+       vertex 0.537719 0.0255165 -0.455637
+    endloop
+  endfacet
+  facet normal 0.964023 0.213401 -0.158495
+    outer loop
+       vertex 0.537719 0.0255165 -0.455637
+       vertex 0.52167 0.0221176 -0.557825
+       vertex 0.503194 0.107432 -0.555333
+    endloop
+  endfacet
+  facet normal 0.96417 0.211557 -0.160061
+    outer loop
+       vertex 0.537719 0.0255165 -0.455637
+       vertex 0.503194 0.107432 -0.555333
+       vertex 0.518926 0.112483 -0.453892
+    endloop
+  endfacet
+  facet normal 0.940346 0.299841 -0.160762
+    outer loop
+       vertex 0.518926 0.112483 -0.453892
+       vertex 0.503194 0.107432 -0.555333
+       vertex 0.477351 0.190008 -0.552484
+    endloop
+  endfacet
+  facet normal 0.940708 0.297714 -0.162587
+    outer loop
+       vertex 0.518926 0.112483 -0.453892
+       vertex 0.477351 0.190008 -0.552484
+       vertex 0.492633 0.196653 -0.451898
+    endloop
+  endfacet
+  facet normal 0.907257 0.387522 -0.163438
+    outer loop
+       vertex 0.492633 0.196653 -0.451898
+       vertex 0.477351 0.190008 -0.552484
+       vertex 0.444153 0.268931 -0.549636
+    endloop
+  endfacet
+  facet normal 0.907829 0.385384 -0.165303
+    outer loop
+       vertex 0.492633 0.196653 -0.451898
+       vertex 0.444153 0.268931 -0.549636
+       vertex 0.458847 0.277094 -0.449905
+    endloop
+  endfacet
+  facet normal 0.863428 0.476308 -0.166203
+    outer loop
+       vertex 0.458847 0.277094 -0.449905
+       vertex 0.444153 0.268931 -0.549636
+       vertex 0.403613 0.34329 -0.547144
+    endloop
+  endfacet
+  facet normal 0.86413 0.474447 -0.167869
+    outer loop
+       vertex 0.458847 0.277094 -0.449905
+       vertex 0.403613 0.34329 -0.547144
+       vertex 0.417579 0.352876 -0.44816
+    endloop
+  endfacet
+  facet normal 0.807358 0.565441 -0.168671
+    outer loop
+       vertex 0.417579 0.352876 -0.44816
+       vertex 0.403613 0.34329 -0.547144
+       vertex 0.355744 0.41217 -0.545364
+    endloop
+  endfacet
+  facet normal 0.808013 0.564141 -0.169881
+    outer loop
+       vertex 0.417579 0.352876 -0.44816
+       vertex 0.355744 0.41217 -0.545364
+       vertex 0.368836 0.423065 -0.446914
+    endloop
+  endfacet
+  facet normal 0.737627 0.653354 -0.170394
+    outer loop
+       vertex 0.368836 0.423065 -0.446914
+       vertex 0.355744 0.41217 -0.545364
+       vertex 0.300558 0.47466 -0.544652
+    endloop
+  endfacet
+  facet normal 0.737952 0.65286 -0.170881
+    outer loop
+       vertex 0.368836 0.423065 -0.446914
+       vertex 0.300558 0.47466 -0.544652
+       vertex 0.312627 0.48673 -0.446415
+    endloop
+  endfacet
+  facet normal 0.978082 0.0434599 -0.203632
+    outer loop
+       vertex 0.536469 -0.153076 -0.560317
+       vertex 0.516116 -0.153076 -0.658075
+       vertex 0.51249 -0.0669691 -0.657112
+    endloop
+  endfacet
+  facet normal 0.977991 0.0427772 -0.204216
+    outer loop
+       vertex 0.536469 -0.153076 -0.560317
+       vertex 0.51249 -0.0669691 -0.657112
+       vertex 0.532766 -0.0650228 -0.559605
+    endloop
+  endfacet
+  facet normal 0.970313 0.129361 -0.204348
+    outer loop
+       vertex 0.532766 -0.0650228 -0.559605
+       vertex 0.51249 -0.0669691 -0.657112
+       vertex 0.50164 0.0182356 -0.654694
+    endloop
+  endfacet
+  facet normal 0.970234 0.127744 -0.205738
+    outer loop
+       vertex 0.532766 -0.0650228 -0.559605
+       vertex 0.50164 0.0182356 -0.654694
+       vertex 0.52167 0.0221176 -0.557825
+    endloop
+  endfacet
+  facet normal 0.954641 0.214989 -0.206011
+    outer loop
+       vertex 0.52167 0.0221176 -0.557825
+       vertex 0.50164 0.0182356 -0.654694
+       vertex 0.483593 0.101636 -0.65129
+    endloop
+  endfacet
+  facet normal 0.95472 0.212829 -0.20788
+    outer loop
+       vertex 0.52167 0.0221176 -0.557825
+       vertex 0.483593 0.101636 -0.65129
+       vertex 0.503194 0.107432 -0.555333
+    endloop
+  endfacet
+  facet normal 0.930618 0.300948 -0.20828
+    outer loop
+       vertex 0.503194 0.107432 -0.555333
+       vertex 0.483593 0.101636 -0.65129
+       vertex 0.458375 0.182328 -0.647371
+    endloop
+  endfacet
+  facet normal 0.930913 0.298599 -0.210335
+    outer loop
+       vertex 0.503194 0.107432 -0.555333
+       vertex 0.458375 0.182328 -0.647371
+       vertex 0.477351 0.190008 -0.552484
+    endloop
+  endfacet
+  facet normal 0.897399 0.387587 -0.210834
+    outer loop
+       vertex 0.477351 0.190008 -0.552484
+       vertex 0.458375 0.182328 -0.647371
+       vertex 0.426014 0.259412 -0.643408
+    endloop
+  endfacet
+  facet normal 0.89789 0.385364 -0.212808
+    outer loop
+       vertex 0.477351 0.190008 -0.552484
+       vertex 0.426014 0.259412 -0.643408
+       vertex 0.444153 0.268931 -0.549636
+    endloop
+  endfacet
+  facet normal 0.853771 0.474922 -0.213365
+    outer loop
+       vertex 0.444153 0.268931 -0.549636
+       vertex 0.426014 0.259412 -0.643408
+       vertex 0.386508 0.332001 -0.639916
+    endloop
+  endfacet
+  facet normal 0.854393 0.473021 -0.215091
+    outer loop
+       vertex 0.444153 0.268931 -0.549636
+       vertex 0.386508 0.332001 -0.639916
+       vertex 0.403613 0.34329 -0.547144
+    endloop
+  endfacet
+  facet normal 0.798387 0.562217 -0.215617
+    outer loop
+       vertex 0.403613 0.34329 -0.547144
+       vertex 0.386508 0.332001 -0.639916
+       vertex 0.339856 0.399212 -0.637409
+    endloop
+  endfacet
+  facet normal 0.798991 0.560872 -0.216877
+    outer loop
+       vertex 0.403613 0.34329 -0.547144
+       vertex 0.339856 0.399212 -0.637409
+       vertex 0.355744 0.41217 -0.545364
+    endloop
+  endfacet
+  facet normal 0.730016 0.647986 -0.217235
+    outer loop
+       vertex 0.355744 0.41217 -0.545364
+       vertex 0.339856 0.399212 -0.637409
+       vertex 0.286057 0.460159 -0.636401
+    endloop
+  endfacet
+  facet normal 0.730333 0.647452 -0.217759
+    outer loop
+       vertex 0.355744 0.41217 -0.545364
+       vertex 0.286057 0.460159 -0.636401
+       vertex 0.300558 0.47466 -0.544652
+    endloop
+  endfacet
+  facet normal 0.964686 0.0443395 -0.259643
+    outer loop
+       vertex 0.516116 -0.153076 -0.658075
+       vertex 0.491272 -0.153076 -0.750381
+       vertex 0.487742 -0.0690104 -0.74914
+    endloop
+  endfacet
+  facet normal 0.964533 0.0435236 -0.260348
+    outer loop
+       vertex 0.516116 -0.153076 -0.658075
+       vertex 0.487742 -0.0690104 -0.74914
+       vertex 0.51249 -0.0669691 -0.657112
+    endloop
+  endfacet
+  facet normal 0.95664 0.130971 -0.260165
+    outer loop
+       vertex 0.51249 -0.0669691 -0.657112
+       vertex 0.487742 -0.0690104 -0.74914
+       vertex 0.477214 0.0141425 -0.745993
+    endloop
+  endfacet
+  facet normal 0.956462 0.129225 -0.261688
+    outer loop
+       vertex 0.51249 -0.0669691 -0.657112
+       vertex 0.477214 0.0141425 -0.745993
+       vertex 0.50164 0.0182356 -0.654694
+    endloop
+  endfacet
+  facet normal 0.940667 0.216405 -0.261371
+    outer loop
+       vertex 0.50164 0.0182356 -0.654694
+       vertex 0.477214 0.0141425 -0.745993
+       vertex 0.459748 0.0954698 -0.741516
+    endloop
+  endfacet
+  facet normal 0.940631 0.214292 -0.263233
+    outer loop
+       vertex 0.50164 0.0182356 -0.654694
+       vertex 0.459748 0.0954698 -0.741516
+       vertex 0.483593 0.101636 -0.65129
+    endloop
+  endfacet
+  facet normal 0.916564 0.301388 -0.262824
+    outer loop
+       vertex 0.483593 0.101636 -0.65129
+       vertex 0.459748 0.0954698 -0.741516
+       vertex 0.435406 0.174058 -0.736286
+    endloop
+  endfacet
+  facet normal 0.916709 0.299338 -0.264653
+    outer loop
+       vertex 0.483593 0.101636 -0.65129
+       vertex 0.435406 0.174058 -0.736286
+       vertex 0.458375 0.182328 -0.647371
+    endloop
+  endfacet
+  facet normal 0.883649 0.386465 -0.264216
+    outer loop
+       vertex 0.458375 0.182328 -0.647371
+       vertex 0.435406 0.174058 -0.736286
+       vertex 0.404249 0.248996 -0.730878
+    endloop
+  endfacet
+  facet normal 0.88393 0.384757 -0.265762
+    outer loop
+       vertex 0.458375 0.182328 -0.647371
+       vertex 0.404249 0.248996 -0.730878
+       vertex 0.426014 0.259412 -0.643408
+    endloop
+  endfacet
+  facet normal 0.840708 0.471991 -0.265396
+    outer loop
+       vertex 0.426014 0.259412 -0.643408
+       vertex 0.404249 0.248996 -0.730878
+       vertex 0.366226 0.31944 -0.726046
+    endloop
+  endfacet
+  facet normal 0.841086 0.470584 -0.266691
+    outer loop
+       vertex 0.426014 0.259412 -0.643408
+       vertex 0.366226 0.31944 -0.726046
+       vertex 0.386508 0.332001 -0.639916
+    endloop
+  endfacet
+  facet normal 0.786469 0.557194 -0.266462
+    outer loop
+       vertex 0.386508 0.332001 -0.639916
+       vertex 0.366226 0.31944 -0.726046
+       vertex 0.321285 0.384548 -0.722544
+    endloop
+  endfacet
+  facet normal 0.786871 0.556156 -0.267439
+    outer loop
+       vertex 0.386508 0.332001 -0.639916
+       vertex 0.321285 0.384548 -0.722544
+       vertex 0.339856 0.399212 -0.637409
+    endloop
+  endfacet
+  facet normal 0.719871 0.64055 -0.267361
+    outer loop
+       vertex 0.339856 0.399212 -0.637409
+       vertex 0.321285 0.384548 -0.722544
+       vertex 0.269375 0.443478 -0.721126
+    endloop
+  endfacet
+  facet normal 0.720117 0.640084 -0.267814
+    outer loop
+       vertex 0.339856 0.399212 -0.637409
+       vertex 0.269375 0.443478 -0.721126
+       vertex 0.286057 0.460159 -0.636401
+    endloop
+  endfacet
+  facet normal 0.944684 0.0453633 -0.324828
+    outer loop
+       vertex 0.491272 -0.153076 -0.750381
+       vertex 0.461502 -0.153076 -0.836959
+       vertex 0.458089 -0.0710042 -0.835423
+    endloop
+  endfacet
+  facet normal 0.944459 0.044464 -0.325608
+    outer loop
+       vertex 0.491272 -0.153076 -0.750381
+       vertex 0.458089 -0.0710042 -0.835423
+       vertex 0.487742 -0.0690104 -0.74914
+    endloop
+  endfacet
+  facet normal 0.936416 0.13258 -0.32488
+    outer loop
+       vertex 0.487742 -0.0690104 -0.74914
+       vertex 0.458089 -0.0710042 -0.835423
+       vertex 0.447976 0.0101106 -0.831472
+    endloop
+  endfacet
+  facet normal 0.936134 0.130881 -0.326378
+    outer loop
+       vertex 0.487742 -0.0690104 -0.74914
+       vertex 0.447976 0.0101106 -0.831472
+       vertex 0.477214 0.0141425 -0.745993
+    endloop
+  endfacet
+  facet normal 0.92037 0.217376 -0.325065
+    outer loop
+       vertex 0.477214 0.0141425 -0.745993
+       vertex 0.447976 0.0101106 -0.831472
+       vertex 0.431286 0.0893112 -0.825763
+    endloop
+  endfacet
+  facet normal 0.920225 0.215608 -0.326648
+    outer loop
+       vertex 0.477214 0.0141425 -0.745993
+       vertex 0.431286 0.0893112 -0.825763
+       vertex 0.459748 0.0954698 -0.741516
+    endloop
+  endfacet
+  facet normal 0.896631 0.300814 -0.324906
+    outer loop
+       vertex 0.459748 0.0954698 -0.741516
+       vertex 0.431286 0.0893112 -0.825763
+       vertex 0.408146 0.16564 -0.818953
+    endloop
+  endfacet
+  facet normal 0.896637 0.299431 -0.326163
+    outer loop
+       vertex 0.459748 0.0954698 -0.741516
+       vertex 0.408146 0.16564 -0.818953
+       vertex 0.435406 0.174058 -0.736286
+    endloop
+  endfacet
+  facet normal 0.864617 0.383838 -0.3242
+    outer loop
+       vertex 0.435406 0.174058 -0.736286
+       vertex 0.408146 0.16564 -0.818953
+       vertex 0.37868 0.238141 -0.8117
+    endloop
+  endfacet
+  facet normal 0.864701 0.382973 -0.324998
+    outer loop
+       vertex 0.435406 0.174058 -0.736286
+       vertex 0.37868 0.238141 -0.8117
+       vertex 0.404249 0.248996 -0.730878
+    endloop
+  endfacet
+  facet normal 0.823009 0.467174 -0.323116
+    outer loop
+       vertex 0.404249 0.248996 -0.730878
+       vertex 0.37868 0.238141 -0.8117
+       vertex 0.342731 0.306032 -0.805104
+    endloop
+  endfacet
+  facet normal 0.823142 0.466511 -0.323736
+    outer loop
+       vertex 0.404249 0.248996 -0.730878
+       vertex 0.342731 0.306032 -0.805104
+       vertex 0.366226 0.31944 -0.726046
+    endloop
+  endfacet
+  facet normal 0.770523 0.549954 -0.322249
+    outer loop
+       vertex 0.366226 0.31944 -0.726046
+       vertex 0.342731 0.306032 -0.805104
+       vertex 0.300145 0.368534 -0.800266
+    endloop
+  endfacet
+  facet normal 0.770715 0.549351 -0.322819
+    outer loop
+       vertex 0.366226 0.31944 -0.726046
+       vertex 0.300145 0.368534 -0.800266
+       vertex 0.321285 0.384548 -0.722544
+    endloop
+  endfacet
+  facet normal 0.706286 0.630455 -0.322005
+    outer loop
+       vertex 0.321285 0.384548 -0.722544
+       vertex 0.300145 0.368534 -0.800266
+       vertex 0.250764 0.424866 -0.798286
+    endloop
+  endfacet
+  facet normal 0.706464 0.630065 -0.322378
+    outer loop
+       vertex 0.321285 0.384548 -0.722544
+       vertex 0.250764 0.424866 -0.798286
+       vertex 0.269375 0.443478 -0.721126
+    endloop
+  endfacet
+  facet normal 0.915674 0.0464682 -0.399228
+    outer loop
+       vertex 0.461502 -0.153076 -0.836959
+       vertex 0.426371 -0.153076 -0.917536
+       vertex 0.423099 -0.0728081 -0.915698
+    endloop
+  endfacet
+  facet normal 0.915375 0.0455517 -0.400016
+    outer loop
+       vertex 0.461502 -0.153076 -0.836959
+       vertex 0.423099 -0.0728081 -0.915698
+       vertex 0.458089 -0.0710042 -0.835423
+    endloop
+  endfacet
+  facet normal 0.907322 0.134047 -0.398495
+    outer loop
+       vertex 0.458089 -0.0710042 -0.835423
+       vertex 0.423099 -0.0728081 -0.915698
+       vertex 0.413511 0.00641203 -0.910881
+    endloop
+  endfacet
+  facet normal 0.906962 0.132558 -0.39981
+    outer loop
+       vertex 0.458089 -0.0710042 -0.835423
+       vertex 0.413511 0.00641203 -0.910881
+       vertex 0.447976 0.0101106 -0.831472
+    endloop
+  endfacet
+  facet normal 0.891565 0.217775 -0.397097
+    outer loop
+       vertex 0.447976 0.0101106 -0.831472
+       vertex 0.413511 0.00641203 -0.910881
+       vertex 0.397834 0.0835363 -0.903784
+    endloop
+  endfacet
+  facet normal 0.891367 0.216537 -0.398217
+    outer loop
+       vertex 0.447976 0.0101106 -0.831472
+       vertex 0.397834 0.0835363 -0.903784
+       vertex 0.431286 0.0893112 -0.825763
+    endloop
+  endfacet
+  facet normal 0.868747 0.29923 -0.394639
+    outer loop
+       vertex 0.431286 0.0893112 -0.825763
+       vertex 0.397834 0.0835363 -0.903784
+       vertex 0.376296 0.157517 -0.895101
+    endloop
+  endfacet
+  facet normal 0.868701 0.298618 -0.395204
+    outer loop
+       vertex 0.431286 0.0893112 -0.825763
+       vertex 0.376296 0.157517 -0.895101
+       vertex 0.408146 0.16564 -0.818953
+    endloop
+  endfacet
+  facet normal 0.83823 0.379976 -0.391138
+    outer loop
+       vertex 0.408146 0.16564 -0.818953
+       vertex 0.376296 0.157517 -0.895101
+       vertex 0.349125 0.227306 -0.885532
+    endloop
+  endfacet
+  facet normal 0.838232 0.379826 -0.39128
+    outer loop
+       vertex 0.408146 0.16564 -0.818953
+       vertex 0.349125 0.227306 -0.885532
+       vertex 0.37868 0.238141 -0.8117
+    endloop
+  endfacet
+  facet normal 0.798606 0.460693 -0.387286
+    outer loop
+       vertex 0.37868 0.238141 -0.8117
+       vertex 0.349125 0.227306 -0.885532
+       vertex 0.315988 0.292208 -0.876659
+    endloop
+  endfacet
+  facet normal 0.798627 0.460515 -0.387454
+    outer loop
+       vertex 0.37868 0.238141 -0.8117
+       vertex 0.315988 0.292208 -0.876659
+       vertex 0.342731 0.306032 -0.805104
+    endloop
+  endfacet
+  facet normal 0.748594 0.54038 -0.384184
+    outer loop
+       vertex 0.342731 0.306032 -0.805104
+       vertex 0.315988 0.292208 -0.876659
+       vertex 0.276548 0.35153 -0.870068
+    endloop
+  endfacet
+  facet normal 0.748704 0.539916 -0.384621
+    outer loop
+       vertex 0.342731 0.306032 -0.805104
+       vertex 0.276548 0.35153 -0.870068
+       vertex 0.300145 0.368534 -0.800266
+    endloop
+  endfacet
+  facet normal 0.687654 0.616955 -0.382751
+    outer loop
+       vertex 0.300145 0.368534 -0.800266
+       vertex 0.276548 0.35153 -0.870068
+       vertex 0.230473 0.404576 -0.867343
+    endloop
+  endfacet
+  facet normal 0.687848 0.616443 -0.383228
+    outer loop
+       vertex 0.300145 0.368534 -0.800266
+       vertex 0.230473 0.404576 -0.867343
+       vertex 0.250764 0.424866 -0.798286
+    endloop
+  endfacet
+  facet normal 0.874919 0.0475438 -0.48193
+    outer loop
+       vertex 0.426371 -0.153076 -0.917536
+       vertex 0.385445 -0.153076 -0.991836
+       vertex 0.38234 -0.0742797 -0.9897
+    endloop
+  endfacet
+  facet normal 0.874574 0.0467026 -0.482638
+    outer loop
+       vertex 0.426371 -0.153076 -0.917536
+       vertex 0.38234 -0.0742797 -0.9897
+       vertex 0.423099 -0.0728081 -0.915698
+    endloop
+  endfacet
+  facet normal 0.866719 0.135378 -0.480074
+    outer loop
+       vertex 0.423099 -0.0728081 -0.915698
+       vertex 0.38234 -0.0742797 -0.9897
+       vertex 0.373376 0.00336324 -0.983989
+    endloop
+  endfacet
+  facet normal 0.8663 0.134109 -0.481184
+    outer loop
+       vertex 0.423099 -0.0728081 -0.915698
+       vertex 0.373376 0.00336324 -0.983989
+       vertex 0.413511 0.00641203 -0.910881
+    endloop
+  endfacet
+  facet normal 0.851656 0.217935 -0.47664
+    outer loop
+       vertex 0.413511 0.00641203 -0.910881
+       vertex 0.373376 0.00336324 -0.983989
+       vertex 0.358904 0.0786992 -0.9754
+    endloop
+  endfacet
+  facet normal 0.851423 0.217013 -0.477476
+    outer loop
+       vertex 0.413511 0.00641203 -0.910881
+       vertex 0.358904 0.0786992 -0.9754
+       vertex 0.397834 0.0835363 -0.903784
+    endloop
+  endfacet
+  facet normal 0.830275 0.297354 -0.471407
+    outer loop
+       vertex 0.397834 0.0835363 -0.903784
+       vertex 0.358904 0.0786992 -0.9754
+       vertex 0.339276 0.150575 -0.964632
+    endloop
+  endfacet
+  facet normal 0.830223 0.297057 -0.471685
+    outer loop
+       vertex 0.397834 0.0835363 -0.903784
+       vertex 0.339276 0.150575 -0.964632
+       vertex 0.376296 0.157517 -0.895101
+    endloop
+  endfacet
+  facet normal 0.801874 0.375867 -0.46446
+    outer loop
+       vertex 0.376296 0.157517 -0.895101
+       vertex 0.339276 0.150575 -0.964632
+       vertex 0.314844 0.217836 -0.952382
+    endloop
+  endfacet
+  facet normal 0.801874 0.375875 -0.464452
+    outer loop
+       vertex 0.376296 0.157517 -0.895101
+       vertex 0.314844 0.217836 -0.952382
+       vertex 0.349125 0.227306 -0.885532
+    endloop
+  endfacet
+  facet normal 0.765917 0.452391 -0.456851
+    outer loop
+       vertex 0.349125 0.227306 -0.885532
+       vertex 0.314844 0.217836 -0.952382
+       vertex 0.285382 0.279631 -0.940583
+    endloop
+  endfacet
+  facet normal 0.765903 0.453375 -0.455899
+    outer loop
+       vertex 0.349125 0.227306 -0.885532
+       vertex 0.285382 0.279631 -0.940583
+       vertex 0.315988 0.292208 -0.876659
+    endloop
+  endfacet
+  facet normal 0.72117 0.527498 -0.449066
+    outer loop
+       vertex 0.315988 0.292208 -0.876659
+       vertex 0.285382 0.279631 -0.940583
+       vertex 0.250666 0.335108 -0.931169
+    endloop
+  endfacet
+  facet normal 0.720954 0.529048 -0.447586
+    outer loop
+       vertex 0.315988 0.292208 -0.876659
+       vertex 0.250666 0.335108 -0.931169
+       vertex 0.276548 0.35153 -0.870068
+    endloop
+  endfacet
+  facet normal 0.665529 0.600462 -0.443302
+    outer loop
+       vertex 0.276548 0.35153 -0.870068
+       vertex 0.250666 0.335108 -0.931169
+       vertex 0.209579 0.383682 -0.927058
+    endloop
+  endfacet
+  facet normal 0.665441 0.600758 -0.443032
+    outer loop
+       vertex 0.276548 0.35153 -0.870068
+       vertex 0.209579 0.383682 -0.927058
+       vertex 0.230473 0.404576 -0.867343
+    endloop
+  endfacet
+  facet normal 0.819786 0.048414 -0.57062
+    outer loop
+       vertex 0.385445 -0.153076 -0.991836
+       vertex 0.338288 -0.153076 -1.05958
+       vertex 0.335378 -0.0752766 -1.05716
+    endloop
+  endfacet
+  facet normal 0.819466 0.0477769 -0.571133
+    outer loop
+       vertex 0.385445 -0.153076 -0.991836
+       vertex 0.335378 -0.0752766 -1.05716
+       vertex 0.38234 -0.0742797 -0.9897
+    endloop
+  endfacet
+  facet normal 0.812111 0.136457 -0.567323
+    outer loop
+       vertex 0.38234 -0.0742797 -0.9897
+       vertex 0.335378 -0.0752766 -1.05716
+       vertex 0.327127 0.00128075 -1.05056
+    endloop
+  endfacet
+  facet normal 0.811702 0.135503 -0.568137
+    outer loop
+       vertex 0.38234 -0.0742797 -0.9897
+       vertex 0.327127 0.00128075 -1.05056
+       vertex 0.373376 0.00336324 -0.983989
+    endloop
+  endfacet
+  facet normal 0.798289 0.218088 -0.561402
+    outer loop
+       vertex 0.373376 0.00336324 -0.983989
+       vertex 0.327127 0.00128075 -1.05056
+       vertex 0.314011 0.0753537 -1.04044
+    endloop
+  endfacet
+  facet normal 0.798032 0.21737 -0.562046
+    outer loop
+       vertex 0.373376 0.00336324 -0.983989
+       vertex 0.314011 0.0753537 -1.04044
+       vertex 0.358904 0.0786992 -0.9754
+    endloop
+  endfacet
+  facet normal 0.778939 0.295889 -0.552906
+    outer loop
+       vertex 0.358904 0.0786992 -0.9754
+       vertex 0.314011 0.0753537 -1.04044
+       vertex 0.296508 0.1457 -1.02745
+    endloop
+  endfacet
+  facet normal 0.778845 0.295565 -0.55321
+    outer loop
+       vertex 0.358904 0.0786992 -0.9754
+       vertex 0.296508 0.1457 -1.02745
+       vertex 0.339276 0.150575 -0.964632
+    endloop
+  endfacet
+  facet normal 0.753358 0.372643 -0.541838
+    outer loop
+       vertex 0.339276 0.150575 -0.964632
+       vertex 0.296508 0.1457 -1.02745
+       vertex 0.275094 0.211078 -1.01226
+    endloop
+  endfacet
+  facet normal 0.753299 0.372365 -0.542111
+    outer loop
+       vertex 0.339276 0.150575 -0.964632
+       vertex 0.275094 0.211078 -1.01226
+       vertex 0.314844 0.217836 -0.952382
+    endloop
+  endfacet
+  facet normal 0.722684 0.443829 -0.529853
+    outer loop
+       vertex 0.314844 0.217836 -0.952382
+       vertex 0.275094 0.211078 -1.01226
+       vertex 0.250302 0.269966 -0.996746
+    endloop
+  endfacet
+  facet normal 0.722881 0.445493 -0.528185
+    outer loop
+       vertex 0.314844 0.217836 -0.952382
+       vertex 0.250302 0.269966 -0.996746
+       vertex 0.285382 0.279631 -0.940583
+    endloop
+  endfacet
+  facet normal 0.685106 0.513821 -0.51635
+    outer loop
+       vertex 0.285382 0.279631 -0.940583
+       vertex 0.250302 0.269966 -0.996746
+       vertex 0.222668 0.320843 -0.982784
+    endloop
+  endfacet
+  facet normal 0.685089 0.515975 -0.51422
+    outer loop
+       vertex 0.285382 0.279631 -0.940583
+       vertex 0.222668 0.320843 -0.982784
+       vertex 0.250666 0.335108 -0.931169
+    endloop
+  endfacet
+  facet normal 0.63674 0.581694 -0.506157
+    outer loop
+       vertex 0.250666 0.335108 -0.931169
+       vertex 0.222668 0.320843 -0.982784
+       vertex 0.189158 0.363261 -0.976191
+    endloop
+  endfacet
+  facet normal 0.636782 0.581482 -0.506346
+    outer loop
+       vertex 0.250666 0.335108 -0.931169
+       vertex 0.189158 0.363261 -0.976191
+       vertex 0.209579 0.383682 -0.927058
+    endloop
+  endfacet
+  facet normal 0.748534 0.048843 -0.661295
+    outer loop
+       vertex 0.338288 -0.153076 -1.05958
+       vertex 0.284465 -0.153076 -1.12051
+       vertex 0.281783 -0.0756563 -1.11783
+    endloop
+  endfacet
+  facet normal 0.748372 0.0485716 -0.661499
+    outer loop
+       vertex 0.338288 -0.153076 -1.05958
+       vertex 0.281783 -0.0756563 -1.11783
+       vertex 0.335378 -0.0752766 -1.05716
+    endloop
+  endfacet
+  facet normal 0.741914 0.13701 -0.656347
+    outer loop
+       vertex 0.335378 -0.0752766 -1.05716
+       vertex 0.281783 -0.0756563 -1.11783
+       vertex 0.274322 0.000481101 -1.11037
+    endloop
+  endfacet
+  facet normal 0.741682 0.136575 -0.6567
+    outer loop
+       vertex 0.335378 -0.0752766 -1.05716
+       vertex 0.274322 0.000481101 -1.11037
+       vertex 0.327127 0.00128075 -1.05056
+    endloop
+  endfacet
+  facet normal 0.730102 0.218198 -0.647566
+    outer loop
+       vertex 0.327127 0.00128075 -1.05056
+       vertex 0.274322 0.000481101 -1.11037
+       vertex 0.262669 0.0740539 -1.09871
+    endloop
+  endfacet
+  facet normal 0.729915 0.217805 -0.647908
+    outer loop
+       vertex 0.327127 0.00128075 -1.05056
+       vertex 0.262669 0.0740539 -1.09871
+       vertex 0.314011 0.0753537 -1.04044
+    endloop
+  endfacet
+  facet normal 0.71363 0.295197 -0.635288
+    outer loop
+       vertex 0.314011 0.0753537 -1.04044
+       vertex 0.262669 0.0740539 -1.09871
+       vertex 0.247411 0.14378 -1.08345
+    endloop
+  endfacet
+  facet normal 0.713493 0.29487 -0.635594
+    outer loop
+       vertex 0.314011 0.0753537 -1.04044
+       vertex 0.247411 0.14378 -1.08345
+       vertex 0.296508 0.1457 -1.02745
+    endloop
+  endfacet
+  facet normal 0.691939 0.371044 -0.619311
+    outer loop
+       vertex 0.296508 0.1457 -1.02745
+       vertex 0.247411 0.14378 -1.08345
+       vertex 0.229132 0.208376 -1.06518
+    endloop
+  endfacet
+  facet normal 0.691768 0.370577 -0.619782
+    outer loop
+       vertex 0.296508 0.1457 -1.02745
+       vertex 0.229132 0.208376 -1.06518
+       vertex 0.275094 0.211078 -1.01226
+    endloop
+  endfacet
+  facet normal 0.667106 0.439021 -0.601855
+    outer loop
+       vertex 0.275094 0.211078 -1.01226
+       vertex 0.229132 0.208376 -1.06518
+       vertex 0.209244 0.265861 -1.04529
+    endloop
+  endfacet
+  facet normal 0.667205 0.43935 -0.601506
+    outer loop
+       vertex 0.275094 0.211078 -1.01226
+       vertex 0.209244 0.265861 -1.04529
+       vertex 0.250302 0.269966 -0.996746
+    endloop
+  endfacet
+  facet normal 0.637047 0.505853 -0.581622
+    outer loop
+       vertex 0.250302 0.269966 -0.996746
+       vertex 0.209244 0.265861 -1.04529
+       vertex 0.189158 0.31425 -1.0252
+    endloop
+  endfacet
+  facet normal 0.637008 0.505665 -0.581828
+    outer loop
+       vertex 0.250302 0.269966 -0.996746
+       vertex 0.189158 0.31425 -1.0252
+       vertex 0.222668 0.320843 -0.982784
+    endloop
+  endfacet
+  facet normal 0.600568 0.568022 -0.562734
+    outer loop
+       vertex 0.222668 0.320843 -0.982784
+       vertex 0.189158 0.31425 -1.0252
+       vertex 0.173079 0.347181 -1.00912
+    endloop
+  endfacet
+  facet normal 0.600568 0.562734 -0.568021
+    outer loop
+       vertex 0.222668 0.320843 -0.982784
+       vertex 0.173079 0.347181 -1.00912
+       vertex 0.189158 0.363261 -0.976191
+    endloop
+  endfacet
+  facet normal 0.992246 0.0422546 -0.116889
+    outer loop
+       vertex 0.552765 -0.153076 -0.457381
+       vertex 0.549001 -0.0633138 -0.456883
+       vertex 0.561629 -0.0619847 -0.34921
+    endloop
+  endfacet
+  facet normal 0.992289 0.0419425 -0.116629
+    outer loop
+       vertex 0.552765 -0.153076 -0.457381
+       vertex 0.561629 -0.0619847 -0.34921
+       vertex 0.56544 -0.153076 -0.349542
+    endloop
+  endfacet
+  facet normal 0.995935 0.0419603 -0.079708
+    outer loop
+       vertex 0.56544 -0.153076 -0.349542
+       vertex 0.561629 -0.0619847 -0.34921
+       vertex 0.570497 -0.0609672 -0.237864
+    endloop
+  endfacet
+  facet normal 0.995958 0.0417472 -0.0795333
+    outer loop
+       vertex 0.56544 -0.153076 -0.349542
+       vertex 0.570497 -0.0609672 -0.237864
+       vertex 0.574342 -0.153076 -0.238072
+    endloop
+  endfacet
+  facet normal 0.998167 0.0417589 -0.0437983
+    outer loop
+       vertex 0.574342 -0.153076 -0.238072
+       vertex 0.570497 -0.0609672 -0.237864
+       vertex 0.575456 -0.0601934 -0.124123
+    endloop
+  endfacet
+  facet normal 0.998183 0.0415597 -0.043636
+    outer loop
+       vertex 0.574342 -0.153076 -0.238072
+       vertex 0.575456 -0.0601934 -0.124123
+       vertex 0.579318 -0.153076 -0.124242
+    endloop
+  endfacet
+  facet normal 0.999104 0.0415525 -0.00802094
+    outer loop
+       vertex 0.579318 -0.153076 -0.124242
+       vertex 0.575456 -0.0601934 -0.124123
+       vertex 0.576353 -0.0595952 -0.00926336
+    endloop
+  endfacet
+  facet normal 0.999116 0.0412978 -0.00781355
+    outer loop
+       vertex 0.579318 -0.153076 -0.124242
+       vertex 0.576353 -0.0595952 -0.00926336
+       vertex 0.580216 -0.153076 -0.0093227
+    endloop
+  endfacet
+  facet normal 0.998737 0.0412589 0.0286887
+    outer loop
+       vertex 0.580216 -0.153076 -0.0093227
+       vertex 0.576353 -0.0595952 -0.00926336
+       vertex 0.573038 -0.0591045 0.105437
+    endloop
+  endfacet
+  facet normal 0.998743 0.0408892 0.0289919
+    outer loop
+       vertex 0.580216 -0.153076 -0.0093227
+       vertex 0.573038 -0.0591045 0.105437
+       vertex 0.576886 -0.153076 0.105413
+    endloop
+  endfacet
+  facet normal 0.992678 0.0406194 0.113756
+    outer loop
+       vertex 0.576886 -0.153076 0.105413
+       vertex 0.573038 -0.0591045 0.105437
+       vertex 0.560627 -0.0584916 0.213522
+    endloop
+  endfacet
+  facet normal 0.99263 0.039812 0.114456
+    outer loop
+       vertex 0.576886 -0.153076 0.105413
+       vertex 0.560627 -0.0584916 0.213522
+       vertex 0.564421 -0.153076 0.213516
+    endloop
+  endfacet
+  facet normal 0.962906 0.0386101 0.267062
+    outer loop
+       vertex 0.564421 -0.153076 0.213516
+       vertex 0.560627 -0.0584916 0.213522
+       vertex 0.534235 -0.0575264 0.308537
+    endloop
+  endfacet
+  facet normal 0.962569 0.0370842 0.268489
+    outer loop
+       vertex 0.564421 -0.153076 0.213516
+       vertex 0.534235 -0.0575264 0.308537
+       vertex 0.537917 -0.153076 0.308537
+    endloop
+  endfacet
+  facet normal 0.857519 0.033037 0.513391
+    outer loop
+       vertex 0.537917 -0.153076 0.308537
+       vertex 0.534235 -0.0575264 0.308537
+       vertex 0.48898 -0.0559793 0.384027
+    endloop
+  endfacet
+  facet normal 0.856314 0.0307594 0.515539
+    outer loop
+       vertex 0.537917 -0.153076 0.308537
+       vertex 0.48898 -0.0559793 0.384027
+       vertex 0.492468 -0.153076 0.384027
+    endloop
+  endfacet
+  facet normal 0.984922 0.12675 -0.117744
+    outer loop
+       vertex 0.549001 -0.0633138 -0.456883
+       vertex 0.537719 0.0255165 -0.455637
+       vertex 0.550201 0.02816 -0.348379
+    endloop
+  endfacet
+  facet normal 0.985101 0.125964 -0.117084
+    outer loop
+       vertex 0.549001 -0.0633138 -0.456883
+       vertex 0.550201 0.02816 -0.348379
+       vertex 0.561629 -0.0619847 -0.34921
+    endloop
+  endfacet
+  facet normal 0.988756 0.126089 -0.0803902
+    outer loop
+       vertex 0.561629 -0.0619847 -0.34921
+       vertex 0.550201 0.02816 -0.348379
+       vertex 0.55897 0.0301767 -0.237353
+    endloop
+  endfacet
+  facet normal 0.988869 0.125508 -0.0799087
+    outer loop
+       vertex 0.561629 -0.0619847 -0.34921
+       vertex 0.55897 0.0301767 -0.237353
+       vertex 0.570497 -0.0609672 -0.237864
+    endloop
+  endfacet
+  facet normal 0.991081 0.12559 -0.0445669
+    outer loop
+       vertex 0.570497 -0.0609672 -0.237864
+       vertex 0.55897 0.0301767 -0.237353
+       vertex 0.563882 0.031695 -0.123858
+    endloop
+  endfacet
+  facet normal 0.991181 0.124973 -0.0440598
+    outer loop
+       vertex 0.570497 -0.0609672 -0.237864
+       vertex 0.563882 0.031695 -0.123858
+       vertex 0.575456 -0.0601934 -0.124123
+    endloop
+  endfacet
+  facet normal 0.992116 0.12499 -0.00909636
+    outer loop
+       vertex 0.575456 -0.0601934 -0.124123
+       vertex 0.563882 0.031695 -0.123858
+       vertex 0.564788 0.0328432 -0.00919506
+    endloop
+  endfacet
+  facet normal 0.992229 0.12414 -0.00839736
+    outer loop
+       vertex 0.575456 -0.0601934 -0.124123
+       vertex 0.564788 0.0328432 -0.00919506
+       vertex 0.576353 -0.0595952 -0.00926336
+    endloop
+  endfacet
+  facet normal 0.991903 0.124072 0.0271125
+    outer loop
+       vertex 0.576353 -0.0595952 -0.00926336
+       vertex 0.564788 0.0328432 -0.00919506
+       vertex 0.561544 0.0337499 0.105336
+    endloop
+  endfacet
+  facet normal 0.992029 0.122824 0.028146
+    outer loop
+       vertex 0.576353 -0.0595952 -0.00926336
+       vertex 0.561544 0.0337499 0.105336
+       vertex 0.573038 -0.0591045 0.105437
+    endloop
+  endfacet
+  facet normal 0.986356 0.122211 0.110304
+    outer loop
+       vertex 0.573038 -0.0591045 0.105437
+       vertex 0.561544 0.0337499 0.105336
+       vertex 0.54933 0.0349018 0.213278
+    endloop
+  endfacet
+  facet normal 0.986417 0.119604 0.11259
+    outer loop
+       vertex 0.573038 -0.0591045 0.105437
+       vertex 0.54933 0.0349018 0.213278
+       vertex 0.560627 -0.0584916 0.213522
+    endloop
+  endfacet
+  facet normal 0.958457 0.116607 0.260313
+    outer loop
+       vertex 0.560627 -0.0584916 0.213522
+       vertex 0.54933 0.0349018 0.213278
+       vertex 0.523327 0.036786 0.308176
+    endloop
+  endfacet
+  facet normal 0.957776 0.11179 0.264894
+    outer loop
+       vertex 0.560627 -0.0584916 0.213522
+       vertex 0.523327 0.036786 0.308176
+       vertex 0.534235 -0.0575264 0.308537
+    endloop
+  endfacet
+  facet normal 0.858035 0.101168 0.503528
+    outer loop
+       vertex 0.534235 -0.0575264 0.308537
+       vertex 0.523327 0.036786 0.308176
+       vertex 0.478716 0.0398893 0.383572
+    endloop
+  endfacet
+  facet normal 0.854744 0.0939381 0.510479
+    outer loop
+       vertex 0.534235 -0.0575264 0.308537
+       vertex 0.478716 0.0398893 0.383572
+       vertex 0.48898 -0.0559793 0.384027
+    endloop
+  endfacet
+  facet normal 0.969991 0.211993 -0.119066
+    outer loop
+       vertex 0.537719 0.0255165 -0.455637
+       vertex 0.518926 0.112483 -0.453892
+       vertex 0.531162 0.116411 -0.347216
+    endloop
+  endfacet
+  facet normal 0.970346 0.210893 -0.118122
+    outer loop
+       vertex 0.537719 0.0255165 -0.455637
+       vertex 0.531162 0.116411 -0.347216
+       vertex 0.550201 0.02816 -0.348379
+    endloop
+  endfacet
+  facet normal 0.974038 0.211207 -0.0815011
+    outer loop
+       vertex 0.550201 0.02816 -0.348379
+       vertex 0.531162 0.116411 -0.347216
+       vertex 0.539767 0.11939 -0.23665
+    endloop
+  endfacet
+  facet normal 0.974284 0.210349 -0.0807775
+    outer loop
+       vertex 0.550201 0.02816 -0.348379
+       vertex 0.539767 0.11939 -0.23665
+       vertex 0.55897 0.0301767 -0.237353
+    endloop
+  endfacet
+  facet normal 0.976505 0.210552 -0.0458906
+    outer loop
+       vertex 0.55897 0.0301767 -0.237353
+       vertex 0.539767 0.11939 -0.23665
+       vertex 0.544608 0.121594 -0.123539
+    endloop
+  endfacet
+  facet normal 0.976754 0.20957 -0.0450704
+    outer loop
+       vertex 0.55897 0.0301767 -0.237353
+       vertex 0.544608 0.121594 -0.123539
+       vertex 0.563882 0.031695 -0.123858
+    endloop
+  endfacet
+  facet normal 0.977714 0.209655 -0.0109858
+    outer loop
+       vertex 0.563882 0.031695 -0.123858
+       vertex 0.544608 0.121594 -0.123539
+       vertex 0.545549 0.123196 -0.00922753
+    endloop
+  endfacet
+  facet normal 0.978025 0.208255 -0.00981876
+    outer loop
+       vertex 0.563882 0.031695 -0.123858
+       vertex 0.545549 0.123196 -0.00922753
+       vertex 0.564788 0.0328432 -0.00919506
+    endloop
+  endfacet
+  facet normal 0.97778 0.208215 0.0243506
+    outer loop
+       vertex 0.564788 0.0328432 -0.00919506
+       vertex 0.545549 0.123196 -0.00922753
+       vertex 0.542456 0.124369 0.104939
+    endloop
+  endfacet
+  facet normal 0.978171 0.206162 0.0260737
+    outer loop
+       vertex 0.564788 0.0328432 -0.00919506
+       vertex 0.542456 0.124369 0.104939
+       vertex 0.561544 0.0337499 0.105336
+    endloop
+  endfacet
+  facet normal 0.973116 0.205439 0.104119
+    outer loop
+       vertex 0.561544 0.0337499 0.105336
+       vertex 0.542456 0.124369 0.104939
+       vertex 0.530619 0.125913 0.212524
+    endloop
+  endfacet
+  facet normal 0.973604 0.201067 0.108019
+    outer loop
+       vertex 0.561544 0.0337499 0.105336
+       vertex 0.530619 0.125913 0.212524
+       vertex 0.54933 0.0349018 0.213278
+    endloop
+  endfacet
+  facet normal 0.948502 0.197066 0.248009
+    outer loop
+       vertex 0.54933 0.0349018 0.213278
+       vertex 0.530619 0.125913 0.212524
+       vertex 0.505328 0.128624 0.307092
+    endloop
+  endfacet
+  facet normal 0.948048 0.188828 0.256027
+    outer loop
+       vertex 0.54933 0.0349018 0.213278
+       vertex 0.505328 0.128624 0.307092
+       vertex 0.523327 0.036786 0.308176
+    endloop
+  endfacet
+  facet normal 0.857086 0.173704 0.485006
+    outer loop
+       vertex 0.523327 0.036786 0.308176
+       vertex 0.505328 0.128624 0.307092
+       vertex 0.461875 0.133301 0.382207
+    endloop
+  endfacet
+  facet normal 0.852302 0.160939 0.497675
+    outer loop
+       vertex 0.523327 0.036786 0.308176
+       vertex 0.461875 0.133301 0.382207
+       vertex 0.478716 0.0398893 0.383572
+    endloop
+  endfacet
+  facet normal 0.946715 0.298598 -0.120702
+    outer loop
+       vertex 0.518926 0.112483 -0.453892
+       vertex 0.492633 0.196653 -0.451898
+       vertex 0.504519 0.201821 -0.345887
+    endloop
+  endfacet
+  facet normal 0.947247 0.297353 -0.1196
+    outer loop
+       vertex 0.518926 0.112483 -0.453892
+       vertex 0.504519 0.201821 -0.345887
+       vertex 0.531162 0.116411 -0.347216
+    endloop
+  endfacet
+  facet normal 0.950974 0.297945 -0.0829253
+    outer loop
+       vertex 0.531162 0.116411 -0.347216
+       vertex 0.504519 0.201821 -0.345887
+       vertex 0.512894 0.205708 -0.235868
+    endloop
+  endfacet
+  facet normal 0.951368 0.29693 -0.0820466
+    outer loop
+       vertex 0.531162 0.116411 -0.347216
+       vertex 0.512894 0.205708 -0.235868
+       vertex 0.539767 0.11939 -0.23665
+    endloop
+  endfacet
+  facet normal 0.953592 0.29731 -0.0476354
+    outer loop
+       vertex 0.539767 0.11939 -0.23665
+       vertex 0.512894 0.205708 -0.235868
+       vertex 0.517646 0.20851 -0.123256
+    endloop
+  endfacet
+  facet normal 0.954022 0.296093 -0.0465952
+    outer loop
+       vertex 0.539767 0.11939 -0.23665
+       vertex 0.517646 0.20851 -0.123256
+       vertex 0.544608 0.121594 -0.123539
+    endloop
+  endfacet
+  facet normal 0.955003 0.29629 -0.0134867
+    outer loop
+       vertex 0.544608 0.121594 -0.123539
+       vertex 0.517646 0.20851 -0.123256
+       vertex 0.51866 0.210421 -0.00947047
+    endloop
+  endfacet
+  facet normal 0.955565 0.294536 -0.011993
+    outer loop
+       vertex 0.544608 0.121594 -0.123539
+       vertex 0.51866 0.210421 -0.00947047
+       vertex 0.545549 0.123196 -0.00922753
+    endloop
+  endfacet
+  facet normal 0.955403 0.294577 0.0207241
+    outer loop
+       vertex 0.545549 0.123196 -0.00922753
+       vertex 0.51866 0.210421 -0.00947047
+       vertex 0.515822 0.211637 0.104073
+    endloop
+  endfacet
+  facet normal 0.956134 0.292032 0.0229027
+    outer loop
+       vertex 0.545549 0.123196 -0.00922753
+       vertex 0.515822 0.211637 0.104073
+       vertex 0.542456 0.124369 0.104939
+    endloop
+  endfacet
+  facet normal 0.951819 0.291434 0.0954252
+    outer loop
+       vertex 0.542456 0.124369 0.104939
+       vertex 0.515822 0.211637 0.104073
+       vertex 0.504578 0.213349 0.210997
+    endloop
+  endfacet
+  facet normal 0.953039 0.285594 0.10076
+    outer loop
+       vertex 0.542456 0.124369 0.104939
+       vertex 0.504578 0.213349 0.210997
+       vertex 0.530619 0.125913 0.212524
+    endloop
+  endfacet
+  facet normal 0.931625 0.281472 0.229887
+    outer loop
+       vertex 0.530619 0.125913 0.212524
+       vertex 0.504578 0.213349 0.210997
+       vertex 0.480374 0.216749 0.304924
+    endloop
+  endfacet
+  facet normal 0.932106 0.269887 0.241537
+    outer loop
+       vertex 0.530619 0.125913 0.212524
+       vertex 0.480374 0.216749 0.304924
+       vertex 0.505328 0.128624 0.307092
+    endloop
+  endfacet
+  facet normal 0.853222 0.25283 0.456168
+    outer loop
+       vertex 0.505328 0.128624 0.307092
+       vertex 0.480374 0.216749 0.304924
+       vertex 0.438655 0.223027 0.379476
+    endloop
+  endfacet
+  facet normal 0.847828 0.233888 0.475903
+    outer loop
+       vertex 0.505328 0.128624 0.307092
+       vertex 0.438655 0.223027 0.379476
+       vertex 0.461875 0.133301 0.382207
+    endloop
+  endfacet
+  facet normal 0.913954 0.386895 -0.122471
+    outer loop
+       vertex 0.492633 0.196653 -0.451898
+       vertex 0.458847 0.277094 -0.449905
+       vertex 0.470276 0.283444 -0.344558
+    endloop
+  endfacet
+  facet normal 0.914619 0.385678 -0.121348
+    outer loop
+       vertex 0.492633 0.196653 -0.451898
+       vertex 0.470276 0.283444 -0.344558
+       vertex 0.504519 0.201821 -0.345887
+    endloop
+  endfacet
+  facet normal 0.918351 0.386643 -0.0844946
+    outer loop
+       vertex 0.504519 0.201821 -0.345887
+       vertex 0.470276 0.283444 -0.344558
+       vertex 0.478357 0.288166 -0.235117
+    endloop
+  endfacet
+  facet normal 0.918863 0.385623 -0.0835785
+    outer loop
+       vertex 0.504519 0.201821 -0.345887
+       vertex 0.478357 0.288166 -0.235117
+       vertex 0.512894 0.205708 -0.235868
+    endloop
+  endfacet
+  facet normal 0.921067 0.386237 -0.0495639
+    outer loop
+       vertex 0.512894 0.205708 -0.235868
+       vertex 0.478357 0.288166 -0.235117
+       vertex 0.483009 0.291447 -0.123102
+    endloop
+  endfacet
+  facet normal 0.921644 0.384997 -0.0484687
+    outer loop
+       vertex 0.512894 0.205708 -0.235868
+       vertex 0.483009 0.291447 -0.123102
+       vertex 0.517646 0.20851 -0.123256
+    endloop
+  endfacet
+  facet normal 0.922629 0.385348 -0.0162111
+    outer loop
+       vertex 0.517646 0.20851 -0.123256
+       vertex 0.483009 0.291447 -0.123102
+       vertex 0.484149 0.293475 -0.0100336
+    endloop
+  endfacet
+  facet normal 0.923385 0.383594 -0.0146712
+    outer loop
+       vertex 0.517646 0.20851 -0.123256
+       vertex 0.484149 0.293475 -0.0100336
+       vertex 0.51866 0.210421 -0.00947047
+    endloop
+  endfacet
+  facet normal 0.923278 0.383764 0.0168493
+    outer loop
+       vertex 0.51866 0.210421 -0.00947047
+       vertex 0.484149 0.293475 -0.0100336
+       vertex 0.481695 0.294435 0.102567
+    endloop
+  endfacet
+  facet normal 0.924255 0.381303 0.0190167
+    outer loop
+       vertex 0.51866 0.210421 -0.00947047
+       vertex 0.481695 0.294435 0.102567
+       vertex 0.515822 0.211637 0.104073
+    endloop
+  endfacet
+  facet normal 0.920675 0.381023 0.0847284
+    outer loop
+       vertex 0.515822 0.211637 0.104073
+       vertex 0.481695 0.294435 0.102567
+       vertex 0.471296 0.296021 0.208436
+    endloop
+  endfacet
+  facet normal 0.922813 0.374336 0.0910472
+    outer loop
+       vertex 0.515822 0.211637 0.104073
+       vertex 0.471296 0.296021 0.208436
+       vertex 0.504578 0.213349 0.210997
+    endloop
+  endfacet
+  facet normal 0.905583 0.370951 0.205706
+    outer loop
+       vertex 0.504578 0.213349 0.210997
+       vertex 0.471296 0.296021 0.208436
+       vertex 0.4486 0.299924 0.30131
+    endloop
+  endfacet
+  facet normal 0.907812 0.356398 0.221038
+    outer loop
+       vertex 0.504578 0.213349 0.210997
+       vertex 0.4486 0.299924 0.30131
+       vertex 0.480374 0.216749 0.304924
+    endloop
+  endfacet
+  facet normal 0.843993 0.340423 0.414473
+    outer loop
+       vertex 0.480374 0.216749 0.304924
+       vertex 0.4486 0.299924 0.30131
+       vertex 0.409257 0.307839 0.374925
+    endloop
+  endfacet
+  facet normal 0.839358 0.314731 0.443196
+    outer loop
+       vertex 0.480374 0.216749 0.304924
+       vertex 0.409257 0.307839 0.374925
+       vertex 0.438655 0.223027 0.379476
+    endloop
+  endfacet
+  facet normal 0.870222 0.476759 -0.124156
+    outer loop
+       vertex 0.458847 0.277094 -0.449905
+       vertex 0.417579 0.352876 -0.44816
+       vertex 0.428441 0.360332 -0.343395
+    endloop
+  endfacet
+  facet normal 0.870923 0.475737 -0.123158
+    outer loop
+       vertex 0.458847 0.277094 -0.449905
+       vertex 0.428441 0.360332 -0.343395
+       vertex 0.470276 0.283444 -0.344558
+    endloop
+  endfacet
+  facet normal 0.874594 0.477172 -0.0859816
+    outer loop
+       vertex 0.470276 0.283444 -0.344558
+       vertex 0.428441 0.360332 -0.343395
+       vertex 0.436158 0.365813 -0.234478
+    endloop
+  endfacet
+  facet normal 0.875139 0.476317 -0.0851728
+    outer loop
+       vertex 0.470276 0.283444 -0.344558
+       vertex 0.436158 0.365813 -0.234478
+       vertex 0.478357 0.288166 -0.235117
+    endloop
+  endfacet
+  facet normal 0.877289 0.477208 -0.0513492
+    outer loop
+       vertex 0.478357 0.288166 -0.235117
+       vertex 0.436158 0.365813 -0.234478
+       vertex 0.440689 0.369475 -0.123039
+    endloop
+  endfacet
+  facet normal 0.877897 0.476189 -0.0504062
+    outer loop
+       vertex 0.478357 0.288166 -0.235117
+       vertex 0.440689 0.369475 -0.123039
+       vertex 0.483009 0.291447 -0.123102
+    endloop
+  endfacet
+  facet normal 0.878872 0.476692 -0.0186724
+    outer loop
+       vertex 0.483009 0.291447 -0.123102
+       vertex 0.440689 0.369475 -0.123039
+       vertex 0.441992 0.371472 -0.0107065
+    endloop
+  endfacet
+  facet normal 0.879655 0.475294 -0.0173907
+    outer loop
+       vertex 0.483009 0.291447 -0.123102
+       vertex 0.441992 0.371472 -0.0107065
+       vertex 0.484149 0.293475 -0.0100336
+    endloop
+  endfacet
+  facet normal 0.879598 0.475529 0.0134131
+    outer loop
+       vertex 0.484149 0.293475 -0.0100336
+       vertex 0.441992 0.371472 -0.0107065
+       vertex 0.440027 0.37196 0.100889
+    endloop
+  endfacet
+  facet normal 0.880594 0.47363 0.0151526
+    outer loop
+       vertex 0.484149 0.293475 -0.0100336
+       vertex 0.440027 0.37196 0.100889
+       vertex 0.481695 0.294435 0.102567
+    endloop
+  endfacet
+  facet normal 0.877855 0.4734 0.0725466
+    outer loop
+       vertex 0.481695 0.294435 0.102567
+       vertex 0.440027 0.37196 0.100889
+       vertex 0.431036 0.372679 0.204991
+    endloop
+  endfacet
+  facet normal 0.881048 0.466288 0.0795588
+    outer loop
+       vertex 0.481695 0.294435 0.102567
+       vertex 0.431036 0.372679 0.204991
+       vertex 0.471296 0.296021 0.208436
+    endloop
+  endfacet
+  facet normal 0.868032 0.463838 0.177128
+    outer loop
+       vertex 0.471296 0.296021 0.208436
+       vertex 0.431036 0.372679 0.204991
+       vertex 0.411266 0.375365 0.294843
+    endloop
+  endfacet
+  facet normal 0.872439 0.448417 0.194351
+    outer loop
+       vertex 0.471296 0.296021 0.208436
+       vertex 0.411266 0.375365 0.294843
+       vertex 0.4486 0.299924 0.30131
+    endloop
+  endfacet
+  facet normal 0.822864 0.438232 0.36173
+    outer loop
+       vertex 0.4486 0.299924 0.30131
+       vertex 0.411266 0.375365 0.294843
+       vertex 0.375982 0.383505 0.365244
+    endloop
+  endfacet
+  facet normal 0.821391 0.411709 0.39473
+    outer loop
+       vertex 0.4486 0.299924 0.30131
+       vertex 0.375982 0.383505 0.365244
+       vertex 0.409257 0.307839 0.374925
+    endloop
+  endfacet
+  facet normal 0.813829 0.567392 -0.125491
+    outer loop
+       vertex 0.417579 0.352876 -0.44816
+       vertex 0.368836 0.423065 -0.446914
+       vertex 0.379018 0.431539 -0.342564
+    endloop
+  endfacet
+  facet normal 0.814413 0.566713 -0.124771
+    outer loop
+       vertex 0.417579 0.352876 -0.44816
+       vertex 0.379018 0.431539 -0.342564
+       vertex 0.428441 0.360332 -0.343395
+    endloop
+  endfacet
+  facet normal 0.817914 0.568703 -0.0871434
+    outer loop
+       vertex 0.428441 0.360332 -0.343395
+       vertex 0.379018 0.431539 -0.342564
+       vertex 0.386298 0.437701 -0.234031
+    endloop
+  endfacet
+  facet normal 0.818362 0.568145 -0.0865753
+    outer loop
+       vertex 0.428441 0.360332 -0.343395
+       vertex 0.386298 0.437701 -0.234031
+       vertex 0.436158 0.365813 -0.234478
+    endloop
+  endfacet
+  facet normal 0.820405 0.56935 -0.0526919
+    outer loop
+       vertex 0.436158 0.365813 -0.234478
+       vertex 0.386298 0.437701 -0.234031
+       vertex 0.390679 0.441661 -0.12303
+    endloop
+  endfacet
+  facet normal 0.820886 0.568714 -0.0520625
+    outer loop
+       vertex 0.436158 0.365813 -0.234478
+       vertex 0.390679 0.441661 -0.12303
+       vertex 0.440689 0.369475 -0.123039
+    endloop
+  endfacet
+  facet normal 0.82183 0.569365 -0.0204612
+    outer loop
+       vertex 0.440689 0.369475 -0.123039
+       vertex 0.390679 0.441661 -0.12303
+       vertex 0.392168 0.443527 -0.0112786
+    endloop
+  endfacet
+  facet normal 0.822426 0.568532 -0.0196505
+    outer loop
+       vertex 0.440689 0.369475 -0.123039
+       vertex 0.392168 0.443527 -0.0112786
+       vertex 0.441992 0.371472 -0.0107065
+    endloop
+  endfacet
+  facet normal 0.822422 0.568772 0.0109737
+    outer loop
+       vertex 0.441992 0.371472 -0.0107065
+       vertex 0.392168 0.443527 -0.0112786
+       vertex 0.39077 0.44341 0.0995073
+    endloop
+  endfacet
+  facet normal 0.823151 0.567695 0.0120154
+    outer loop
+       vertex 0.441992 0.371472 -0.0107065
+       vertex 0.39077 0.44341 0.0995073
+       vertex 0.440027 0.37196 0.100889
+    endloop
+  endfacet
+  facet normal 0.821185 0.567303 0.0618333
+    outer loop
+       vertex 0.440027 0.37196 0.100889
+       vertex 0.39077 0.44341 0.0995073
+       vertex 0.384065 0.442075 0.20081
+    endloop
+  endfacet
+  facet normal 0.824371 0.562033 0.0673161
+    outer loop
+       vertex 0.440027 0.37196 0.100889
+       vertex 0.384065 0.442075 0.20081
+       vertex 0.431036 0.372679 0.204991
+    endloop
+  endfacet
+  facet normal 0.814069 0.560227 0.153093
+    outer loop
+       vertex 0.431036 0.372679 0.204991
+       vertex 0.384065 0.442075 0.20081
+       vertex 0.36963 0.440286 0.284113
+    endloop
+  endfacet
+  facet normal 0.817941 0.551584 0.163483
+    outer loop
+       vertex 0.431036 0.372679 0.204991
+       vertex 0.36963 0.440286 0.284113
+       vertex 0.411266 0.375365 0.294843
+    endloop
+  endfacet
+  facet normal 0.778321 0.54939 0.303951
+    outer loop
+       vertex 0.411266 0.375365 0.294843
+       vertex 0.36963 0.440286 0.284113
+       vertex 0.341135 0.445794 0.347126
+    endloop
+  endfacet
+  facet normal 0.779957 0.532151 0.329367
+    outer loop
+       vertex 0.411266 0.375365 0.294843
+       vertex 0.341135 0.445794 0.347126
+       vertex 0.375982 0.383505 0.365244
+    endloop
+  endfacet
+  facet normal 0.743161 0.657109 -0.126173
+    outer loop
+       vertex 0.368836 0.423065 -0.446914
+       vertex 0.312627 0.48673 -0.446415
+       vertex 0.322015 0.496117 -0.342232
+    endloop
+  endfacet
+  facet normal 0.743423 0.656867 -0.125886
+    outer loop
+       vertex 0.368836 0.423065 -0.446914
+       vertex 0.322015 0.496117 -0.342232
+       vertex 0.379018 0.431539 -0.342564
+    endloop
+  endfacet
+  facet normal 0.746594 0.65947 -0.0877315
+    outer loop
+       vertex 0.379018 0.431539 -0.342564
+       vertex 0.322015 0.496117 -0.342232
+       vertex 0.328777 0.50288 -0.233855
+    endloop
+  endfacet
+  facet normal 0.746789 0.659278 -0.0875156
+    outer loop
+       vertex 0.379018 0.431539 -0.342564
+       vertex 0.328777 0.50288 -0.233855
+       vertex 0.386298 0.437701 -0.234031
+    endloop
+  endfacet
+  facet normal 0.748644 0.660823 -0.053339
+    outer loop
+       vertex 0.386298 0.437701 -0.234031
+       vertex 0.328777 0.50288 -0.233855
+       vertex 0.332971 0.507073 -0.123039
+    endloop
+  endfacet
+  facet normal 0.748835 0.660624 -0.053123
+    outer loop
+       vertex 0.386298 0.437701 -0.234031
+       vertex 0.332971 0.507073 -0.123039
+       vertex 0.390679 0.441661 -0.12303
+    endloop
+  endfacet
+  facet normal 0.749722 0.661411 -0.0212866
+    outer loop
+       vertex 0.390679 0.441661 -0.12303
+       vertex 0.332971 0.507073 -0.123039
+       vertex 0.334653 0.508755 -0.0115394
+    endloop
+  endfacet
+  facet normal 0.749937 0.661175 -0.0210369
+    outer loop
+       vertex 0.390679 0.441661 -0.12303
+       vertex 0.334653 0.508755 -0.0115394
+       vertex 0.392168 0.443527 -0.0112786
+    endloop
+  endfacet
+  facet normal 0.750005 0.661359 0.00987957
+    outer loop
+       vertex 0.392168 0.443527 -0.0112786
+       vertex 0.334653 0.508755 -0.0115394
+       vertex 0.33388 0.507982 0.0988907
+    endloop
+  endfacet
+  facet normal 0.750238 0.66109 0.0101606
+    outer loop
+       vertex 0.392168 0.443527 -0.0112786
+       vertex 0.33388 0.507982 0.0988907
+       vertex 0.39077 0.44341 0.0995073
+    endloop
+  endfacet
+  facet normal 0.748855 0.660314 0.0565848
+    outer loop
+       vertex 0.39077 0.44341 0.0995073
+       vertex 0.33388 0.507982 0.0988907
+       vertex 0.329879 0.503981 0.198536
+    endloop
+  endfacet
+  facet normal 0.750119 0.658725 0.0583346
+    outer loop
+       vertex 0.39077 0.44341 0.0995073
+       vertex 0.329879 0.503981 0.198536
+       vertex 0.384065 0.442075 0.20081
+    endloop
+  endfacet
+  facet normal 0.742338 0.65496 0.141286
+    outer loop
+       vertex 0.384065 0.442075 0.20081
+       vertex 0.329879 0.503981 0.198536
+       vertex 0.321876 0.495978 0.277683
+    endloop
+  endfacet
+  facet normal 0.743143 0.653715 0.142811
+    outer loop
+       vertex 0.384065 0.442075 0.20081
+       vertex 0.321876 0.495978 0.277683
+       vertex 0.36963 0.440286 0.284113
+    endloop
+  endfacet
+  facet normal 0.715155 0.644468 0.270584
+    outer loop
+       vertex 0.36963 0.440286 0.284113
+       vertex 0.321876 0.495978 0.277683
+       vertex 0.312305 0.486408 0.325773
+    endloop
+  endfacet
+  facet normal 0.714298 0.647132 0.266455
+    outer loop
+       vertex 0.36963 0.440286 0.284113
+       vertex 0.312305 0.486408 0.325773
+       vertex 0.341135 0.445794 0.347126
+    endloop
+  endfacet
+  facet normal 0.992289 -0.0419431 -0.116629
+    outer loop
+       vertex 0.552765 -0.153076 -0.457381
+       vertex 0.56544 -0.153076 -0.349542
+       vertex 0.561629 -0.244168 -0.34921
+    endloop
+  endfacet
+  facet normal 0.992246 -0.0422553 -0.116889
+    outer loop
+       vertex 0.552765 -0.153076 -0.457381
+       vertex 0.561629 -0.244168 -0.34921
+       vertex 0.549001 -0.242839 -0.456883
+    endloop
+  endfacet
+  facet normal 0.985101 -0.125965 -0.117084
+    outer loop
+       vertex 0.549001 -0.242839 -0.456883
+       vertex 0.561629 -0.244168 -0.34921
+       vertex 0.550201 -0.334312 -0.348379
+    endloop
+  endfacet
+  facet normal 0.984922 -0.12675 -0.117745
+    outer loop
+       vertex 0.549001 -0.242839 -0.456883
+       vertex 0.550201 -0.334312 -0.348379
+       vertex 0.537718 -0.331669 -0.455637
+    endloop
+  endfacet
+  facet normal 0.970346 -0.210894 -0.118122
+    outer loop
+       vertex 0.537718 -0.331669 -0.455637
+       vertex 0.550201 -0.334312 -0.348379
+       vertex 0.531162 -0.422563 -0.347216
+    endloop
+  endfacet
+  facet normal 0.969991 -0.211993 -0.119065
+    outer loop
+       vertex 0.537718 -0.331669 -0.455637
+       vertex 0.531162 -0.422563 -0.347216
+       vertex 0.518926 -0.418635 -0.453892
+    endloop
+  endfacet
+  facet normal 0.947247 -0.297353 -0.1196
+    outer loop
+       vertex 0.518926 -0.418635 -0.453892
+       vertex 0.531162 -0.422563 -0.347216
+       vertex 0.504518 -0.507974 -0.345887
+    endloop
+  endfacet
+  facet normal 0.946715 -0.298599 -0.120702
+    outer loop
+       vertex 0.518926 -0.418635 -0.453892
+       vertex 0.504518 -0.507974 -0.345887
+       vertex 0.492633 -0.502805 -0.451898
+    endloop
+  endfacet
+  facet normal 0.914618 -0.385678 -0.121349
+    outer loop
+       vertex 0.492633 -0.502805 -0.451898
+       vertex 0.504518 -0.507974 -0.345887
+       vertex 0.470276 -0.589596 -0.344558
+    endloop
+  endfacet
+  facet normal 0.913954 -0.386896 -0.122471
+    outer loop
+       vertex 0.492633 -0.502805 -0.451898
+       vertex 0.470276 -0.589596 -0.344558
+       vertex 0.458847 -0.583247 -0.449905
+    endloop
+  endfacet
+  facet normal 0.870922 -0.475738 -0.123158
+    outer loop
+       vertex 0.458847 -0.583247 -0.449905
+       vertex 0.470276 -0.589596 -0.344558
+       vertex 0.42844 -0.666484 -0.343395
+    endloop
+  endfacet
+  facet normal 0.870221 -0.47676 -0.124156
+    outer loop
+       vertex 0.458847 -0.583247 -0.449905
+       vertex 0.42844 -0.666484 -0.343395
+       vertex 0.417578 -0.659028 -0.44816
+    endloop
+  endfacet
+  facet normal 0.814412 -0.566714 -0.124772
+    outer loop
+       vertex 0.417578 -0.659028 -0.44816
+       vertex 0.42844 -0.666484 -0.343395
+       vertex 0.379018 -0.737691 -0.342564
+    endloop
+  endfacet
+  facet normal 0.813829 -0.567392 -0.12549
+    outer loop
+       vertex 0.417578 -0.659028 -0.44816
+       vertex 0.379018 -0.737691 -0.342564
+       vertex 0.368835 -0.729217 -0.446914
+    endloop
+  endfacet
+  facet normal 0.743423 -0.656867 -0.125886
+    outer loop
+       vertex 0.368835 -0.729217 -0.446914
+       vertex 0.379018 -0.737691 -0.342564
+       vertex 0.322015 -0.80227 -0.342232
+    endloop
+  endfacet
+  facet normal 0.743161 -0.657109 -0.126172
+    outer loop
+       vertex 0.368835 -0.729217 -0.446914
+       vertex 0.322015 -0.80227 -0.342232
+       vertex 0.312627 -0.792882 -0.446415
+    endloop
+  endfacet
+  facet normal 0.995958 -0.0417479 -0.0795333
+    outer loop
+       vertex 0.56544 -0.153076 -0.349542
+       vertex 0.574342 -0.153076 -0.238072
+       vertex 0.570497 -0.245185 -0.237864
+    endloop
+  endfacet
+  facet normal 0.995935 -0.041961 -0.079708
+    outer loop
+       vertex 0.56544 -0.153076 -0.349542
+       vertex 0.570497 -0.245185 -0.237864
+       vertex 0.561629 -0.244168 -0.34921
+    endloop
+  endfacet
+  facet normal 0.988869 -0.12551 -0.0799087
+    outer loop
+       vertex 0.561629 -0.244168 -0.34921
+       vertex 0.570497 -0.245185 -0.237864
+       vertex 0.55897 -0.336329 -0.237353
+    endloop
+  endfacet
+  facet normal 0.988756 -0.12609 -0.0803897
+    outer loop
+       vertex 0.561629 -0.244168 -0.34921
+       vertex 0.55897 -0.336329 -0.237353
+       vertex 0.550201 -0.334312 -0.348379
+    endloop
+  endfacet
+  facet normal 0.974283 -0.210349 -0.080777
+    outer loop
+       vertex 0.550201 -0.334312 -0.348379
+       vertex 0.55897 -0.336329 -0.237353
+       vertex 0.539767 -0.425543 -0.23665
+    endloop
+  endfacet
+  facet normal 0.974038 -0.211207 -0.0815006
+    outer loop
+       vertex 0.550201 -0.334312 -0.348379
+       vertex 0.539767 -0.425543 -0.23665
+       vertex 0.531162 -0.422563 -0.347216
+    endloop
+  endfacet
+  facet normal 0.951368 -0.29693 -0.0820462
+    outer loop
+       vertex 0.531162 -0.422563 -0.347216
+       vertex 0.539767 -0.425543 -0.23665
+       vertex 0.512894 -0.511861 -0.235868
+    endloop
+  endfacet
+  facet normal 0.950974 -0.297945 -0.0829249
+    outer loop
+       vertex 0.531162 -0.422563 -0.347216
+       vertex 0.512894 -0.511861 -0.235868
+       vertex 0.504518 -0.507974 -0.345887
+    endloop
+  endfacet
+  facet normal 0.918863 -0.385623 -0.0835781
+    outer loop
+       vertex 0.504518 -0.507974 -0.345887
+       vertex 0.512894 -0.511861 -0.235868
+       vertex 0.478357 -0.594318 -0.235117
+    endloop
+  endfacet
+  facet normal 0.91835 -0.386644 -0.0844947
+    outer loop
+       vertex 0.504518 -0.507974 -0.345887
+       vertex 0.478357 -0.594318 -0.235117
+       vertex 0.470276 -0.589596 -0.344558
+    endloop
+  endfacet
+  facet normal 0.875138 -0.476318 -0.0851731
+    outer loop
+       vertex 0.470276 -0.589596 -0.344558
+       vertex 0.478357 -0.594318 -0.235117
+       vertex 0.436158 -0.671965 -0.234478
+    endloop
+  endfacet
+  facet normal 0.874593 -0.477173 -0.0859817
+    outer loop
+       vertex 0.470276 -0.589596 -0.344558
+       vertex 0.436158 -0.671965 -0.234478
+       vertex 0.42844 -0.666484 -0.343395
+    endloop
+  endfacet
+  facet normal 0.818362 -0.568145 -0.0865756
+    outer loop
+       vertex 0.42844 -0.666484 -0.343395
+       vertex 0.436158 -0.671965 -0.234478
+       vertex 0.386297 -0.743853 -0.234031
+    endloop
+  endfacet
+  facet normal 0.817913 -0.568704 -0.0871441
+    outer loop
+       vertex 0.42844 -0.666484 -0.343395
+       vertex 0.386297 -0.743853 -0.234031
+       vertex 0.379018 -0.737691 -0.342564
+    endloop
+  endfacet
+  facet normal 0.746788 -0.659278 -0.0875164
+    outer loop
+       vertex 0.379018 -0.737691 -0.342564
+       vertex 0.386297 -0.743853 -0.234031
+       vertex 0.328777 -0.809032 -0.233855
+    endloop
+  endfacet
+  facet normal 0.746594 -0.65947 -0.0877318
+    outer loop
+       vertex 0.379018 -0.737691 -0.342564
+       vertex 0.328777 -0.809032 -0.233855
+       vertex 0.322015 -0.80227 -0.342232
+    endloop
+  endfacet
+  facet normal 0.998183 -0.041561 -0.043636
+    outer loop
+       vertex 0.574342 -0.153076 -0.238072
+       vertex 0.579318 -0.153076 -0.124242
+       vertex 0.575456 -0.245959 -0.124123
+    endloop
+  endfacet
+  facet normal 0.998167 -0.0417595 -0.0437977
+    outer loop
+       vertex 0.574342 -0.153076 -0.238072
+       vertex 0.575456 -0.245959 -0.124123
+       vertex 0.570497 -0.245185 -0.237864
+    endloop
+  endfacet
+  facet normal 0.991181 -0.124974 -0.0440594
+    outer loop
+       vertex 0.570497 -0.245185 -0.237864
+       vertex 0.575456 -0.245959 -0.124123
+       vertex 0.563882 -0.337847 -0.123858
+    endloop
+  endfacet
+  facet normal 0.991081 -0.125591 -0.0445669
+    outer loop
+       vertex 0.570497 -0.245185 -0.237864
+       vertex 0.563882 -0.337847 -0.123858
+       vertex 0.55897 -0.336329 -0.237353
+    endloop
+  endfacet
+  facet normal 0.976754 -0.209571 -0.0450704
+    outer loop
+       vertex 0.55897 -0.336329 -0.237353
+       vertex 0.563882 -0.337847 -0.123858
+       vertex 0.544608 -0.427747 -0.123539
+    endloop
+  endfacet
+  facet normal 0.976505 -0.210553 -0.0458906
+    outer loop
+       vertex 0.55897 -0.336329 -0.237353
+       vertex 0.544608 -0.427747 -0.123539
+       vertex 0.539767 -0.425543 -0.23665
+    endloop
+  endfacet
+  facet normal 0.954022 -0.296094 -0.0465952
+    outer loop
+       vertex 0.539767 -0.425543 -0.23665
+       vertex 0.544608 -0.427747 -0.123539
+       vertex 0.517646 -0.514662 -0.123256
+    endloop
+  endfacet
+  facet normal 0.953592 -0.29731 -0.0476354
+    outer loop
+       vertex 0.539767 -0.425543 -0.23665
+       vertex 0.517646 -0.514662 -0.123256
+       vertex 0.512894 -0.511861 -0.235868
+    endloop
+  endfacet
+  facet normal 0.921644 -0.384997 -0.0484687
+    outer loop
+       vertex 0.512894 -0.511861 -0.235868
+       vertex 0.517646 -0.514662 -0.123256
+       vertex 0.483009 -0.5976 -0.123102
+    endloop
+  endfacet
+  facet normal 0.921067 -0.386237 -0.0495637
+    outer loop
+       vertex 0.512894 -0.511861 -0.235868
+       vertex 0.483009 -0.5976 -0.123102
+       vertex 0.478357 -0.594318 -0.235117
+    endloop
+  endfacet
+  facet normal 0.877897 -0.47619 -0.050406
+    outer loop
+       vertex 0.478357 -0.594318 -0.235117
+       vertex 0.483009 -0.5976 -0.123102
+       vertex 0.440689 -0.675627 -0.123039
+    endloop
+  endfacet
+  facet normal 0.877289 -0.477208 -0.051349
+    outer loop
+       vertex 0.478357 -0.594318 -0.235117
+       vertex 0.440689 -0.675627 -0.123039
+       vertex 0.436158 -0.671965 -0.234478
+    endloop
+  endfacet
+  facet normal 0.820886 -0.568715 -0.0520624
+    outer loop
+       vertex 0.436158 -0.671965 -0.234478
+       vertex 0.440689 -0.675627 -0.123039
+       vertex 0.390678 -0.747813 -0.12303
+    endloop
+  endfacet
+  facet normal 0.820404 -0.569351 -0.0526919
+    outer loop
+       vertex 0.436158 -0.671965 -0.234478
+       vertex 0.390678 -0.747813 -0.12303
+       vertex 0.386297 -0.743853 -0.234031
+    endloop
+  endfacet
+  facet normal 0.748835 -0.660624 -0.0531231
+    outer loop
+       vertex 0.386297 -0.743853 -0.234031
+       vertex 0.390678 -0.747813 -0.12303
+       vertex 0.33297 -0.813226 -0.123039
+    endloop
+  endfacet
+  facet normal 0.748644 -0.660823 -0.0533397
+    outer loop
+       vertex 0.386297 -0.743853 -0.234031
+       vertex 0.33297 -0.813226 -0.123039
+       vertex 0.328777 -0.809032 -0.233855
+    endloop
+  endfacet
+  facet normal 0.999116 -0.0412984 -0.00781356
+    outer loop
+       vertex 0.579318 -0.153076 -0.124242
+       vertex 0.580216 -0.153076 -0.0093227
+       vertex 0.576353 -0.246557 -0.00926336
+    endloop
+  endfacet
+  facet normal 0.999104 -0.0415538 -0.00802149
+    outer loop
+       vertex 0.579318 -0.153076 -0.124242
+       vertex 0.576353 -0.246557 -0.00926336
+       vertex 0.575456 -0.245959 -0.124123
+    endloop
+  endfacet
+  facet normal 0.992229 -0.124141 -0.00839794
+    outer loop
+       vertex 0.575456 -0.245959 -0.124123
+       vertex 0.576353 -0.246557 -0.00926336
+       vertex 0.564788 -0.338996 -0.00919506
+    endloop
+  endfacet
+  facet normal 0.992116 -0.124991 -0.00909648
+    outer loop
+       vertex 0.575456 -0.245959 -0.124123
+       vertex 0.564788 -0.338996 -0.00919506
+       vertex 0.563882 -0.337847 -0.123858
+    endloop
+  endfacet
+  facet normal 0.978025 -0.208256 -0.00981895
+    outer loop
+       vertex 0.563882 -0.337847 -0.123858
+       vertex 0.564788 -0.338996 -0.00919506
+       vertex 0.545549 -0.429349 -0.00922752
+    endloop
+  endfacet
+  facet normal 0.977714 -0.209655 -0.0109859
+    outer loop
+       vertex 0.563882 -0.337847 -0.123858
+       vertex 0.545549 -0.429349 -0.00922752
+       vertex 0.544608 -0.427747 -0.123539
+    endloop
+  endfacet
+  facet normal 0.955565 -0.294536 -0.0119932
+    outer loop
+       vertex 0.544608 -0.427747 -0.123539
+       vertex 0.545549 -0.429349 -0.00922752
+       vertex 0.51866 -0.516573 -0.00947047
+    endloop
+  endfacet
+  facet normal 0.955003 -0.29629 -0.0134873
+    outer loop
+       vertex 0.544608 -0.427747 -0.123539
+       vertex 0.51866 -0.516573 -0.00947047
+       vertex 0.517646 -0.514662 -0.123256
+    endloop
+  endfacet
+  facet normal 0.923385 -0.383595 -0.0146719
+    outer loop
+       vertex 0.517646 -0.514662 -0.123256
+       vertex 0.51866 -0.516573 -0.00947047
+       vertex 0.484149 -0.599627 -0.0100336
+    endloop
+  endfacet
+  facet normal 0.922629 -0.385349 -0.0162111
+    outer loop
+       vertex 0.517646 -0.514662 -0.123256
+       vertex 0.484149 -0.599627 -0.0100336
+       vertex 0.483009 -0.5976 -0.123102
+    endloop
+  endfacet
+  facet normal 0.879655 -0.475294 -0.0173907
+    outer loop
+       vertex 0.483009 -0.5976 -0.123102
+       vertex 0.484149 -0.599627 -0.0100336
+       vertex 0.441992 -0.677624 -0.0107065
+    endloop
+  endfacet
+  facet normal 0.878871 -0.476693 -0.0186725
+    outer loop
+       vertex 0.483009 -0.5976 -0.123102
+       vertex 0.441992 -0.677624 -0.0107065
+       vertex 0.440689 -0.675627 -0.123039
+    endloop
+  endfacet
+  facet normal 0.822426 -0.568533 -0.0196506
+    outer loop
+       vertex 0.440689 -0.675627 -0.123039
+       vertex 0.441992 -0.677624 -0.0107065
+       vertex 0.392167 -0.74968 -0.0112786
+    endloop
+  endfacet
+  facet normal 0.82183 -0.569365 -0.020461
+    outer loop
+       vertex 0.440689 -0.675627 -0.123039
+       vertex 0.392167 -0.74968 -0.0112786
+       vertex 0.390678 -0.747813 -0.12303
+    endloop
+  endfacet
+  facet normal 0.749937 -0.661175 -0.0210367
+    outer loop
+       vertex 0.390678 -0.747813 -0.12303
+       vertex 0.392167 -0.74968 -0.0112786
+       vertex 0.334652 -0.814908 -0.0115394
+    endloop
+  endfacet
+  facet normal 0.749722 -0.661411 -0.0212866
+    outer loop
+       vertex 0.390678 -0.747813 -0.12303
+       vertex 0.334652 -0.814908 -0.0115394
+       vertex 0.33297 -0.813226 -0.123039
+    endloop
+  endfacet
+  facet normal 0.998743 -0.0408905 0.0289919
+    outer loop
+       vertex 0.580216 -0.153076 -0.0093227
+       vertex 0.576886 -0.153076 0.105413
+       vertex 0.573038 -0.247048 0.105437
+    endloop
+  endfacet
+  facet normal 0.998736 -0.0412596 0.0286892
+    outer loop
+       vertex 0.580216 -0.153076 -0.0093227
+       vertex 0.573038 -0.247048 0.105437
+       vertex 0.576353 -0.246557 -0.00926336
+    endloop
+  endfacet
+  facet normal 0.992029 -0.122824 0.0281464
+    outer loop
+       vertex 0.576353 -0.246557 -0.00926336
+       vertex 0.573038 -0.247048 0.105437
+       vertex 0.561544 -0.339903 0.105336
+    endloop
+  endfacet
+  facet normal 0.991903 -0.124074 0.0271125
+    outer loop
+       vertex 0.576353 -0.246557 -0.00926336
+       vertex 0.561544 -0.339903 0.105336
+       vertex 0.564788 -0.338996 -0.00919506
+    endloop
+  endfacet
+  facet normal 0.97817 -0.206162 0.0260736
+    outer loop
+       vertex 0.564788 -0.338996 -0.00919506
+       vertex 0.561544 -0.339903 0.105336
+       vertex 0.542455 -0.430522 0.104939
+    endloop
+  endfacet
+  facet normal 0.97778 -0.208216 0.0243505
+    outer loop
+       vertex 0.564788 -0.338996 -0.00919506
+       vertex 0.542455 -0.430522 0.104939
+       vertex 0.545549 -0.429349 -0.00922752
+    endloop
+  endfacet
+  facet normal 0.956134 -0.292032 0.0229026
+    outer loop
+       vertex 0.545549 -0.429349 -0.00922752
+       vertex 0.542455 -0.430522 0.104939
+       vertex 0.515822 -0.51779 0.104073
+    endloop
+  endfacet
+  facet normal 0.955403 -0.294577 0.0207239
+    outer loop
+       vertex 0.545549 -0.429349 -0.00922752
+       vertex 0.515822 -0.51779 0.104073
+       vertex 0.51866 -0.516573 -0.00947047
+    endloop
+  endfacet
+  facet normal 0.924254 -0.381304 0.0190163
+    outer loop
+       vertex 0.51866 -0.516573 -0.00947047
+       vertex 0.515822 -0.51779 0.104073
+       vertex 0.481695 -0.600587 0.102567
+    endloop
+  endfacet
+  facet normal 0.923277 -0.383765 0.0168493
+    outer loop
+       vertex 0.51866 -0.516573 -0.00947047
+       vertex 0.481695 -0.600587 0.102567
+       vertex 0.484149 -0.599627 -0.0100336
+    endloop
+  endfacet
+  facet normal 0.880593 -0.473631 0.0151526
+    outer loop
+       vertex 0.484149 -0.599627 -0.0100336
+       vertex 0.481695 -0.600587 0.102567
+       vertex 0.440026 -0.678113 0.100889
+    endloop
+  endfacet
+  facet normal 0.879598 -0.475529 0.0134132
+    outer loop
+       vertex 0.484149 -0.599627 -0.0100336
+       vertex 0.440026 -0.678113 0.100889
+       vertex 0.441992 -0.677624 -0.0107065
+    endloop
+  endfacet
+  facet normal 0.823151 -0.567696 0.0120155
+    outer loop
+       vertex 0.441992 -0.677624 -0.0107065
+       vertex 0.440026 -0.678113 0.100889
+       vertex 0.39077 -0.749563 0.0995073
+    endloop
+  endfacet
+  facet normal 0.822422 -0.568773 0.0109734
+    outer loop
+       vertex 0.441992 -0.677624 -0.0107065
+       vertex 0.39077 -0.749563 0.0995073
+       vertex 0.392167 -0.74968 -0.0112786
+    endloop
+  endfacet
+  facet normal 0.750237 -0.66109 0.0101603
+    outer loop
+       vertex 0.392167 -0.74968 -0.0112786
+       vertex 0.39077 -0.749563 0.0995073
+       vertex 0.333879 -0.814135 0.0988907
+    endloop
+  endfacet
+  facet normal 0.750005 -0.661359 0.00988013
+    outer loop
+       vertex 0.392167 -0.74968 -0.0112786
+       vertex 0.333879 -0.814135 0.0988907
+       vertex 0.334652 -0.814908 -0.0115394
+    endloop
+  endfacet
+  facet normal 0.99263 -0.0398133 0.114456
+    outer loop
+       vertex 0.576886 -0.153076 0.105413
+       vertex 0.564421 -0.153076 0.213516
+       vertex 0.560627 -0.247661 0.213522
+    endloop
+  endfacet
+  facet normal 0.992678 -0.0406207 0.113756
+    outer loop
+       vertex 0.576886 -0.153076 0.105413
+       vertex 0.560627 -0.247661 0.213522
+       vertex 0.573038 -0.247048 0.105437
+    endloop
+  endfacet
+  facet normal 0.986417 -0.119604 0.11259
+    outer loop
+       vertex 0.573038 -0.247048 0.105437
+       vertex 0.560627 -0.247661 0.213522
+       vertex 0.54933 -0.341055 0.213278
+    endloop
+  endfacet
+  facet normal 0.986356 -0.122211 0.110304
+    outer loop
+       vertex 0.573038 -0.247048 0.105437
+       vertex 0.54933 -0.341055 0.213278
+       vertex 0.561544 -0.339903 0.105336
+    endloop
+  endfacet
+  facet normal 0.973604 -0.201067 0.108019
+    outer loop
+       vertex 0.561544 -0.339903 0.105336
+       vertex 0.54933 -0.341055 0.213278
+       vertex 0.530619 -0.432065 0.212524
+    endloop
+  endfacet
+  facet normal 0.973116 -0.20544 0.104119
+    outer loop
+       vertex 0.561544 -0.339903 0.105336
+       vertex 0.530619 -0.432065 0.212524
+       vertex 0.542455 -0.430522 0.104939
+    endloop
+  endfacet
+  facet normal 0.953039 -0.285595 0.10076
+    outer loop
+       vertex 0.542455 -0.430522 0.104939
+       vertex 0.530619 -0.432065 0.212524
+       vertex 0.504578 -0.519502 0.210997
+    endloop
+  endfacet
+  facet normal 0.951819 -0.291434 0.0954256
+    outer loop
+       vertex 0.542455 -0.430522 0.104939
+       vertex 0.504578 -0.519502 0.210997
+       vertex 0.515822 -0.51779 0.104073
+    endloop
+  endfacet
+  facet normal 0.922812 -0.374337 0.0910475
+    outer loop
+       vertex 0.515822 -0.51779 0.104073
+       vertex 0.504578 -0.519502 0.210997
+       vertex 0.471295 -0.602173 0.208436
+    endloop
+  endfacet
+  facet normal 0.920674 -0.381024 0.0847285
+    outer loop
+       vertex 0.515822 -0.51779 0.104073
+       vertex 0.471295 -0.602173 0.208436
+       vertex 0.481695 -0.600587 0.102567
+    endloop
+  endfacet
+  facet normal 0.881047 -0.466289 0.0795589
+    outer loop
+       vertex 0.481695 -0.600587 0.102567
+       vertex 0.471295 -0.602173 0.208436
+       vertex 0.431036 -0.678831 0.204991
+    endloop
+  endfacet
+  facet normal 0.877854 -0.473401 0.072547
+    outer loop
+       vertex 0.481695 -0.600587 0.102567
+       vertex 0.431036 -0.678831 0.204991
+       vertex 0.440026 -0.678113 0.100889
+    endloop
+  endfacet
+  facet normal 0.824371 -0.562032 0.0673166
+    outer loop
+       vertex 0.440026 -0.678113 0.100889
+       vertex 0.431036 -0.678831 0.204991
+       vertex 0.384065 -0.748227 0.20081
+    endloop
+  endfacet
+  facet normal 0.821184 -0.567303 0.0618332
+    outer loop
+       vertex 0.440026 -0.678113 0.100889
+       vertex 0.384065 -0.748227 0.20081
+       vertex 0.39077 -0.749563 0.0995073
+    endloop
+  endfacet
+  facet normal 0.750119 -0.658725 0.0583344
+    outer loop
+       vertex 0.39077 -0.749563 0.0995073
+       vertex 0.384065 -0.748227 0.20081
+       vertex 0.329878 -0.810133 0.198536
+    endloop
+  endfacet
+  facet normal 0.748854 -0.660315 0.0565842
+    outer loop
+       vertex 0.39077 -0.749563 0.0995073
+       vertex 0.329878 -0.810133 0.198536
+       vertex 0.333879 -0.814135 0.0988907
+    endloop
+  endfacet
+  facet normal 0.962569 -0.0370854 0.268489
+    outer loop
+       vertex 0.564421 -0.153076 0.213516
+       vertex 0.537917 -0.153076 0.308537
+       vertex 0.534235 -0.248626 0.308537
+    endloop
+  endfacet
+  facet normal 0.962906 -0.0386113 0.267062
+    outer loop
+       vertex 0.564421 -0.153076 0.213516
+       vertex 0.534235 -0.248626 0.308537
+       vertex 0.560627 -0.247661 0.213522
+    endloop
+  endfacet
+  facet normal 0.957776 -0.11179 0.264894
+    outer loop
+       vertex 0.560627 -0.247661 0.213522
+       vertex 0.534235 -0.248626 0.308537
+       vertex 0.523327 -0.342939 0.308176
+    endloop
+  endfacet
+  facet normal 0.958457 -0.116608 0.260313
+    outer loop
+       vertex 0.560627 -0.247661 0.213522
+       vertex 0.523327 -0.342939 0.308176
+       vertex 0.54933 -0.341055 0.213278
+    endloop
+  endfacet
+  facet normal 0.948048 -0.188829 0.256026
+    outer loop
+       vertex 0.54933 -0.341055 0.213278
+       vertex 0.523327 -0.342939 0.308176
+       vertex 0.505328 -0.434776 0.307092
+    endloop
+  endfacet
+  facet normal 0.948502 -0.197067 0.248009
+    outer loop
+       vertex 0.54933 -0.341055 0.213278
+       vertex 0.505328 -0.434776 0.307092
+       vertex 0.530619 -0.432065 0.212524
+    endloop
+  endfacet
+  facet normal 0.932105 -0.269888 0.241537
+    outer loop
+       vertex 0.530619 -0.432065 0.212524
+       vertex 0.505328 -0.434776 0.307092
+       vertex 0.480374 -0.522902 0.304924
+    endloop
+  endfacet
+  facet normal 0.931625 -0.281472 0.229887
+    outer loop
+       vertex 0.530619 -0.432065 0.212524
+       vertex 0.480374 -0.522902 0.304924
+       vertex 0.504578 -0.519502 0.210997
+    endloop
+  endfacet
+  facet normal 0.907812 -0.356399 0.221038
+    outer loop
+       vertex 0.504578 -0.519502 0.210997
+       vertex 0.480374 -0.522902 0.304924
+       vertex 0.4486 -0.606077 0.30131
+    endloop
+  endfacet
+  facet normal 0.905582 -0.370952 0.205706
+    outer loop
+       vertex 0.504578 -0.519502 0.210997
+       vertex 0.4486 -0.606077 0.30131
+       vertex 0.471295 -0.602173 0.208436
+    endloop
+  endfacet
+  facet normal 0.872439 -0.448417 0.19435
+    outer loop
+       vertex 0.471295 -0.602173 0.208436
+       vertex 0.4486 -0.606077 0.30131
+       vertex 0.411265 -0.681518 0.294843
+    endloop
+  endfacet
+  facet normal 0.868032 -0.463839 0.177127
+    outer loop
+       vertex 0.471295 -0.602173 0.208436
+       vertex 0.411265 -0.681518 0.294843
+       vertex 0.431036 -0.678831 0.204991
+    endloop
+  endfacet
+  facet normal 0.817941 -0.551585 0.163482
+    outer loop
+       vertex 0.431036 -0.678831 0.204991
+       vertex 0.411265 -0.681518 0.294843
+       vertex 0.36963 -0.746439 0.284113
+    endloop
+  endfacet
+  facet normal 0.814069 -0.560227 0.153093
+    outer loop
+       vertex 0.431036 -0.678831 0.204991
+       vertex 0.36963 -0.746439 0.284113
+       vertex 0.384065 -0.748227 0.20081
+    endloop
+  endfacet
+  facet normal 0.743143 -0.653716 0.14281
+    outer loop
+       vertex 0.384065 -0.748227 0.20081
+       vertex 0.36963 -0.746439 0.284113
+       vertex 0.321875 -0.802131 0.277683
+    endloop
+  endfacet
+  facet normal 0.742337 -0.654961 0.141286
+    outer loop
+       vertex 0.384065 -0.748227 0.20081
+       vertex 0.321875 -0.802131 0.277683
+       vertex 0.329878 -0.810133 0.198536
+    endloop
+  endfacet
+  facet normal 0.856314 -0.0307604 0.515539
+    outer loop
+       vertex 0.537917 -0.153076 0.308537
+       vertex 0.492468 -0.153076 0.384027
+       vertex 0.48898 -0.250174 0.384027
+    endloop
+  endfacet
+  facet normal 0.857519 -0.0330381 0.513391
+    outer loop
+       vertex 0.537917 -0.153076 0.308537
+       vertex 0.48898 -0.250174 0.384027
+       vertex 0.534235 -0.248626 0.308537
+    endloop
+  endfacet
+  facet normal 0.854744 -0.0939384 0.510479
+    outer loop
+       vertex 0.534235 -0.248626 0.308537
+       vertex 0.48898 -0.250174 0.384027
+       vertex 0.478716 -0.346042 0.383572
+    endloop
+  endfacet
+  facet normal 0.858035 -0.101169 0.503528
+    outer loop
+       vertex 0.534235 -0.248626 0.308537
+       vertex 0.478716 -0.346042 0.383572
+       vertex 0.523327 -0.342939 0.308176
+    endloop
+  endfacet
+  facet normal 0.852302 -0.160941 0.497675
+    outer loop
+       vertex 0.523327 -0.342939 0.308176
+       vertex 0.478716 -0.346042 0.383572
+       vertex 0.461874 -0.439454 0.382207
+    endloop
+  endfacet
+  facet normal 0.857086 -0.173704 0.485006
+    outer loop
+       vertex 0.523327 -0.342939 0.308176
+       vertex 0.461874 -0.439454 0.382207
+       vertex 0.505328 -0.434776 0.307092
+    endloop
+  endfacet
+  facet normal 0.847828 -0.233889 0.475903
+    outer loop
+       vertex 0.505328 -0.434776 0.307092
+       vertex 0.461874 -0.439454 0.382207
+       vertex 0.438655 -0.52918 0.379476
+    endloop
+  endfacet
+  facet normal 0.853222 -0.252831 0.456167
+    outer loop
+       vertex 0.505328 -0.434776 0.307092
+       vertex 0.438655 -0.52918 0.379476
+       vertex 0.480374 -0.522902 0.304924
+    endloop
+  endfacet
+  facet normal 0.839358 -0.314732 0.443196
+    outer loop
+       vertex 0.480374 -0.522902 0.304924
+       vertex 0.438655 -0.52918 0.379476
+       vertex 0.409256 -0.613992 0.374925
+    endloop
+  endfacet
+  facet normal 0.843993 -0.340424 0.414474
+    outer loop
+       vertex 0.480374 -0.522902 0.304924
+       vertex 0.409256 -0.613992 0.374925
+       vertex 0.4486 -0.606077 0.30131
+    endloop
+  endfacet
+  facet normal 0.821391 -0.411709 0.39473
+    outer loop
+       vertex 0.4486 -0.606077 0.30131
+       vertex 0.409256 -0.613992 0.374925
+       vertex 0.375982 -0.689658 0.365244
+    endloop
+  endfacet
+  facet normal 0.822864 -0.438232 0.36173
+    outer loop
+       vertex 0.4486 -0.606077 0.30131
+       vertex 0.375982 -0.689658 0.365244
+       vertex 0.411265 -0.681518 0.294843
+    endloop
+  endfacet
+  facet normal 0.779957 -0.532151 0.329367
+    outer loop
+       vertex 0.411265 -0.681518 0.294843
+       vertex 0.375982 -0.689658 0.365244
+       vertex 0.341134 -0.751946 0.347126
+    endloop
+  endfacet
+  facet normal 0.778321 -0.54939 0.303951
+    outer loop
+       vertex 0.411265 -0.681518 0.294843
+       vertex 0.341134 -0.751946 0.347126
+       vertex 0.36963 -0.746439 0.284113
+    endloop
+  endfacet
+  facet normal 0.714298 -0.647132 0.266455
+    outer loop
+       vertex 0.36963 -0.746439 0.284113
+       vertex 0.341134 -0.751946 0.347126
+       vertex 0.312305 -0.79256 0.325773
+    endloop
+  endfacet
+  facet normal 0.715154 -0.644469 0.270582
+    outer loop
+       vertex 0.36963 -0.746439 0.284113
+       vertex 0.312305 -0.79256 0.325773
+       vertex 0.321875 -0.802131 0.277683
+    endloop
+  endfacet
+  facet normal 0.986749 -0.0422457 -0.15666
+    outer loop
+       vertex 0.552765 -0.153076 -0.457381
+       vertex 0.549001 -0.242839 -0.456883
+       vertex 0.532766 -0.24113 -0.559605
+    endloop
+  endfacet
+  facet normal 0.986795 -0.0427607 -0.156226
+    outer loop
+       vertex 0.552765 -0.153076 -0.457381
+       vertex 0.532766 -0.24113 -0.559605
+       vertex 0.536469 -0.153076 -0.560317
+    endloop
+  endfacet
+  facet normal 0.977991 -0.0427785 -0.204216
+    outer loop
+       vertex 0.536469 -0.153076 -0.560317
+       vertex 0.532766 -0.24113 -0.559605
+       vertex 0.51249 -0.239183 -0.657112
+    endloop
+  endfacet
+  facet normal 0.978082 -0.0434605 -0.203632
+    outer loop
+       vertex 0.536469 -0.153076 -0.560317
+       vertex 0.51249 -0.239183 -0.657112
+       vertex 0.516116 -0.153076 -0.658075
+    endloop
+  endfacet
+  facet normal 0.964533 -0.0435243 -0.260348
+    outer loop
+       vertex 0.516116 -0.153076 -0.658075
+       vertex 0.51249 -0.239183 -0.657112
+       vertex 0.487742 -0.237142 -0.74914
+    endloop
+  endfacet
+  facet normal 0.964686 -0.0443398 -0.259643
+    outer loop
+       vertex 0.516116 -0.153076 -0.658075
+       vertex 0.487742 -0.237142 -0.74914
+       vertex 0.491272 -0.153076 -0.750381
+    endloop
+  endfacet
+  facet normal 0.944459 -0.0444644 -0.325609
+    outer loop
+       vertex 0.491272 -0.153076 -0.750381
+       vertex 0.487742 -0.237142 -0.74914
+       vertex 0.458089 -0.235148 -0.835423
+    endloop
+  endfacet
+  facet normal 0.944684 -0.045364 -0.324828
+    outer loop
+       vertex 0.491272 -0.153076 -0.750381
+       vertex 0.458089 -0.235148 -0.835423
+       vertex 0.461502 -0.153076 -0.836959
+    endloop
+  endfacet
+  facet normal 0.915375 -0.0455524 -0.400016
+    outer loop
+       vertex 0.461502 -0.153076 -0.836959
+       vertex 0.458089 -0.235148 -0.835423
+       vertex 0.423099 -0.233344 -0.915698
+    endloop
+  endfacet
+  facet normal 0.915674 -0.0464689 -0.399228
+    outer loop
+       vertex 0.461502 -0.153076 -0.836959
+       vertex 0.423099 -0.233344 -0.915698
+       vertex 0.426371 -0.153076 -0.917536
+    endloop
+  endfacet
+  facet normal 0.874574 -0.0467032 -0.482638
+    outer loop
+       vertex 0.426371 -0.153076 -0.917536
+       vertex 0.423099 -0.233344 -0.915698
+       vertex 0.38234 -0.231872 -0.9897
+    endloop
+  endfacet
+  facet normal 0.874919 -0.0475448 -0.48193
+    outer loop
+       vertex 0.426371 -0.153076 -0.917536
+       vertex 0.38234 -0.231872 -0.9897
+       vertex 0.385445 -0.153076 -0.991836
+    endloop
+  endfacet
+  facet normal 0.819466 -0.047778 -0.571132
+    outer loop
+       vertex 0.385445 -0.153076 -0.991836
+       vertex 0.38234 -0.231872 -0.9897
+       vertex 0.335378 -0.230876 -1.05716
+    endloop
+  endfacet
+  facet normal 0.819786 -0.0484143 -0.57062
+    outer loop
+       vertex 0.385445 -0.153076 -0.991836
+       vertex 0.335378 -0.230876 -1.05716
+       vertex 0.338288 -0.153076 -1.05958
+    endloop
+  endfacet
+  facet normal 0.748372 -0.0485719 -0.661498
+    outer loop
+       vertex 0.338288 -0.153076 -1.05958
+       vertex 0.335378 -0.230876 -1.05716
+       vertex 0.281783 -0.230496 -1.11783
+    endloop
+  endfacet
+  facet normal 0.748534 -0.048843 -0.661295
+    outer loop
+       vertex 0.338288 -0.153076 -1.05958
+       vertex 0.281783 -0.230496 -1.11783
+       vertex 0.284465 -0.153076 -1.12051
+    endloop
+  endfacet
+  facet normal 0.979289 -0.1266 -0.158006
+    outer loop
+       vertex 0.549001 -0.242839 -0.456883
+       vertex 0.537718 -0.331669 -0.455637
+       vertex 0.52167 -0.32827 -0.557825
+    endloop
+  endfacet
+  facet normal 0.979297 -0.1279 -0.156907
+    outer loop
+       vertex 0.549001 -0.242839 -0.456883
+       vertex 0.52167 -0.32827 -0.557825
+       vertex 0.532766 -0.24113 -0.559605
+    endloop
+  endfacet
+  facet normal 0.970234 -0.127744 -0.205738
+    outer loop
+       vertex 0.532766 -0.24113 -0.559605
+       vertex 0.52167 -0.32827 -0.557825
+       vertex 0.50164 -0.324388 -0.654694
+    endloop
+  endfacet
+  facet normal 0.970313 -0.129362 -0.204348
+    outer loop
+       vertex 0.532766 -0.24113 -0.559605
+       vertex 0.50164 -0.324388 -0.654694
+       vertex 0.51249 -0.239183 -0.657112
+    endloop
+  endfacet
+  facet normal 0.956462 -0.129225 -0.261688
+    outer loop
+       vertex 0.51249 -0.239183 -0.657112
+       vertex 0.50164 -0.324388 -0.654694
+       vertex 0.477214 -0.320295 -0.745993
+    endloop
+  endfacet
+  facet normal 0.95664 -0.130972 -0.260165
+    outer loop
+       vertex 0.51249 -0.239183 -0.657112
+       vertex 0.477214 -0.320295 -0.745993
+       vertex 0.487742 -0.237142 -0.74914
+    endloop
+  endfacet
+  facet normal 0.936134 -0.130881 -0.326378
+    outer loop
+       vertex 0.487742 -0.237142 -0.74914
+       vertex 0.477214 -0.320295 -0.745993
+       vertex 0.447976 -0.316263 -0.831472
+    endloop
+  endfacet
+  facet normal 0.936416 -0.13258 -0.324881
+    outer loop
+       vertex 0.487742 -0.237142 -0.74914
+       vertex 0.447976 -0.316263 -0.831472
+       vertex 0.458089 -0.235148 -0.835423
+    endloop
+  endfacet
+  facet normal 0.906962 -0.132558 -0.399811
+    outer loop
+       vertex 0.458089 -0.235148 -0.835423
+       vertex 0.447976 -0.316263 -0.831472
+       vertex 0.413511 -0.312564 -0.910881
+    endloop
+  endfacet
+  facet normal 0.907322 -0.134048 -0.398495
+    outer loop
+       vertex 0.458089 -0.235148 -0.835423
+       vertex 0.413511 -0.312564 -0.910881
+       vertex 0.423099 -0.233344 -0.915698
+    endloop
+  endfacet
+  facet normal 0.866301 -0.13411 -0.481183
+    outer loop
+       vertex 0.423099 -0.233344 -0.915698
+       vertex 0.413511 -0.312564 -0.910881
+       vertex 0.373376 -0.309515 -0.983989
+    endloop
+  endfacet
+  facet normal 0.866719 -0.135377 -0.480075
+    outer loop
+       vertex 0.423099 -0.233344 -0.915698
+       vertex 0.373376 -0.309515 -0.983989
+       vertex 0.38234 -0.231872 -0.9897
+    endloop
+  endfacet
+  facet normal 0.811702 -0.135502 -0.568137
+    outer loop
+       vertex 0.38234 -0.231872 -0.9897
+       vertex 0.373376 -0.309515 -0.983989
+       vertex 0.327127 -0.307433 -1.05056
+    endloop
+  endfacet
+  facet normal 0.812111 -0.136457 -0.567323
+    outer loop
+       vertex 0.38234 -0.231872 -0.9897
+       vertex 0.327127 -0.307433 -1.05056
+       vertex 0.335378 -0.230876 -1.05716
+    endloop
+  endfacet
+  facet normal 0.741682 -0.136575 -0.6567
+    outer loop
+       vertex 0.335378 -0.230876 -1.05716
+       vertex 0.327127 -0.307433 -1.05056
+       vertex 0.274322 -0.306633 -1.11037
+    endloop
+  endfacet
+  facet normal 0.741914 -0.13701 -0.656347
+    outer loop
+       vertex 0.335378 -0.230876 -1.05716
+       vertex 0.274322 -0.306633 -1.11037
+       vertex 0.281783 -0.230496 -1.11783
+    endloop
+  endfacet
+  facet normal 0.96417 -0.211557 -0.160061
+    outer loop
+       vertex 0.537718 -0.331669 -0.455637
+       vertex 0.518926 -0.418635 -0.453892
+       vertex 0.503194 -0.413584 -0.555333
+    endloop
+  endfacet
+  facet normal 0.964022 -0.213401 -0.158495
+    outer loop
+       vertex 0.537718 -0.331669 -0.455637
+       vertex 0.503194 -0.413584 -0.555333
+       vertex 0.52167 -0.32827 -0.557825
+    endloop
+  endfacet
+  facet normal 0.95472 -0.212829 -0.20788
+    outer loop
+       vertex 0.52167 -0.32827 -0.557825
+       vertex 0.503194 -0.413584 -0.555333
+       vertex 0.483593 -0.407788 -0.65129
+    endloop
+  endfacet
+  facet normal 0.954641 -0.214989 -0.206011
+    outer loop
+       vertex 0.52167 -0.32827 -0.557825
+       vertex 0.483593 -0.407788 -0.65129
+       vertex 0.50164 -0.324388 -0.654694
+    endloop
+  endfacet
+  facet normal 0.940631 -0.214292 -0.263233
+    outer loop
+       vertex 0.50164 -0.324388 -0.654694
+       vertex 0.483593 -0.407788 -0.65129
+       vertex 0.459748 -0.401622 -0.741516
+    endloop
+  endfacet
+  facet normal 0.940667 -0.216405 -0.261371
+    outer loop
+       vertex 0.50164 -0.324388 -0.654694
+       vertex 0.459748 -0.401622 -0.741516
+       vertex 0.477214 -0.320295 -0.745993
+    endloop
+  endfacet
+  facet normal 0.920225 -0.215608 -0.326648
+    outer loop
+       vertex 0.477214 -0.320295 -0.745993
+       vertex 0.459748 -0.401622 -0.741516
+       vertex 0.431286 -0.395463 -0.825763
+    endloop
+  endfacet
+  facet normal 0.92037 -0.217376 -0.325065
+    outer loop
+       vertex 0.477214 -0.320295 -0.745993
+       vertex 0.431286 -0.395463 -0.825763
+       vertex 0.447976 -0.316263 -0.831472
+    endloop
+  endfacet
+  facet normal 0.891367 -0.216538 -0.398216
+    outer loop
+       vertex 0.447976 -0.316263 -0.831472
+       vertex 0.431286 -0.395463 -0.825763
+       vertex 0.397833 -0.389688 -0.903784
+    endloop
+  endfacet
+  facet normal 0.891565 -0.217775 -0.397098
+    outer loop
+       vertex 0.447976 -0.316263 -0.831472
+       vertex 0.397833 -0.389688 -0.903784
+       vertex 0.413511 -0.312564 -0.910881
+    endloop
+  endfacet
+  facet normal 0.851423 -0.217012 -0.477477
+    outer loop
+       vertex 0.413511 -0.312564 -0.910881
+       vertex 0.397833 -0.389688 -0.903784
+       vertex 0.358904 -0.384851 -0.9754
+    endloop
+  endfacet
+  facet normal 0.851656 -0.217936 -0.47664
+    outer loop
+       vertex 0.413511 -0.312564 -0.910881
+       vertex 0.358904 -0.384851 -0.9754
+       vertex 0.373376 -0.309515 -0.983989
+    endloop
+  endfacet
+  facet normal 0.798032 -0.217372 -0.562045
+    outer loop
+       vertex 0.373376 -0.309515 -0.983989
+       vertex 0.358904 -0.384851 -0.9754
+       vertex 0.314011 -0.381506 -1.04044
+    endloop
+  endfacet
+  facet normal 0.798289 -0.218088 -0.561402
+    outer loop
+       vertex 0.373376 -0.309515 -0.983989
+       vertex 0.314011 -0.381506 -1.04044
+       vertex 0.327127 -0.307433 -1.05056
+    endloop
+  endfacet
+  facet normal 0.729915 -0.217806 -0.647908
+    outer loop
+       vertex 0.327127 -0.307433 -1.05056
+       vertex 0.314011 -0.381506 -1.04044
+       vertex 0.262669 -0.380206 -1.09871
+    endloop
+  endfacet
+  facet normal 0.730102 -0.218198 -0.647566
+    outer loop
+       vertex 0.327127 -0.307433 -1.05056
+       vertex 0.262669 -0.380206 -1.09871
+       vertex 0.274322 -0.306633 -1.11037
+    endloop
+  endfacet
+  facet normal 0.940708 -0.297715 -0.162587
+    outer loop
+       vertex 0.518926 -0.418635 -0.453892
+       vertex 0.492633 -0.502805 -0.451898
+       vertex 0.477351 -0.49616 -0.552484
+    endloop
+  endfacet
+  facet normal 0.940346 -0.299842 -0.160762
+    outer loop
+       vertex 0.518926 -0.418635 -0.453892
+       vertex 0.477351 -0.49616 -0.552484
+       vertex 0.503194 -0.413584 -0.555333
+    endloop
+  endfacet
+  facet normal 0.930912 -0.298599 -0.210335
+    outer loop
+       vertex 0.503194 -0.413584 -0.555333
+       vertex 0.477351 -0.49616 -0.552484
+       vertex 0.458375 -0.488481 -0.647371
+    endloop
+  endfacet
+  facet normal 0.930618 -0.300948 -0.20828
+    outer loop
+       vertex 0.503194 -0.413584 -0.555333
+       vertex 0.458375 -0.488481 -0.647371
+       vertex 0.483593 -0.407788 -0.65129
+    endloop
+  endfacet
+  facet normal 0.916709 -0.299339 -0.264652
+    outer loop
+       vertex 0.483593 -0.407788 -0.65129
+       vertex 0.458375 -0.488481 -0.647371
+       vertex 0.435406 -0.480211 -0.736286
+    endloop
+  endfacet
+  facet normal 0.916564 -0.301388 -0.262824
+    outer loop
+       vertex 0.483593 -0.407788 -0.65129
+       vertex 0.435406 -0.480211 -0.736286
+       vertex 0.459748 -0.401622 -0.741516
+    endloop
+  endfacet
+  facet normal 0.896637 -0.299431 -0.326163
+    outer loop
+       vertex 0.459748 -0.401622 -0.741516
+       vertex 0.435406 -0.480211 -0.736286
+       vertex 0.408146 -0.471793 -0.818954
+    endloop
+  endfacet
+  facet normal 0.896631 -0.300814 -0.324906
+    outer loop
+       vertex 0.459748 -0.401622 -0.741516
+       vertex 0.408146 -0.471793 -0.818954
+       vertex 0.431286 -0.395463 -0.825763
+    endloop
+  endfacet
+  facet normal 0.8687 -0.298618 -0.395205
+    outer loop
+       vertex 0.431286 -0.395463 -0.825763
+       vertex 0.408146 -0.471793 -0.818954
+       vertex 0.376296 -0.463669 -0.895101
+    endloop
+  endfacet
+  facet normal 0.868747 -0.299231 -0.394639
+    outer loop
+       vertex 0.431286 -0.395463 -0.825763
+       vertex 0.376296 -0.463669 -0.895101
+       vertex 0.397833 -0.389688 -0.903784
+    endloop
+  endfacet
+  facet normal 0.830223 -0.297058 -0.471684
+    outer loop
+       vertex 0.397833 -0.389688 -0.903784
+       vertex 0.376296 -0.463669 -0.895101
+       vertex 0.339276 -0.456727 -0.964632
+    endloop
+  endfacet
+  facet normal 0.830274 -0.297353 -0.471408
+    outer loop
+       vertex 0.397833 -0.389688 -0.903784
+       vertex 0.339276 -0.456727 -0.964632
+       vertex 0.358904 -0.384851 -0.9754
+    endloop
+  endfacet
+  facet normal 0.778845 -0.295564 -0.55321
+    outer loop
+       vertex 0.358904 -0.384851 -0.9754
+       vertex 0.339276 -0.456727 -0.964632
+       vertex 0.296508 -0.451852 -1.02745
+    endloop
+  endfacet
+  facet normal 0.778939 -0.295889 -0.552905
+    outer loop
+       vertex 0.358904 -0.384851 -0.9754
+       vertex 0.296508 -0.451852 -1.02745
+       vertex 0.314011 -0.381506 -1.04044
+    endloop
+  endfacet
+  facet normal 0.713493 -0.29487 -0.635594
+    outer loop
+       vertex 0.314011 -0.381506 -1.04044
+       vertex 0.296508 -0.451852 -1.02745
+       vertex 0.247411 -0.449932 -1.08345
+    endloop
+  endfacet
+  facet normal 0.71363 -0.295197 -0.635288
+    outer loop
+       vertex 0.314011 -0.381506 -1.04044
+       vertex 0.247411 -0.449932 -1.08345
+       vertex 0.262669 -0.380206 -1.09871
+    endloop
+  endfacet
+  facet normal 0.907829 -0.385385 -0.165303
+    outer loop
+       vertex 0.492633 -0.502805 -0.451898
+       vertex 0.458847 -0.583247 -0.449905
+       vertex 0.444153 -0.575083 -0.549636
+    endloop
+  endfacet
+  facet normal 0.907256 -0.387523 -0.163438
+    outer loop
+       vertex 0.492633 -0.502805 -0.451898
+       vertex 0.444153 -0.575083 -0.549636
+       vertex 0.477351 -0.49616 -0.552484
+    endloop
+  endfacet
+  facet normal 0.89789 -0.385365 -0.212809
+    outer loop
+       vertex 0.477351 -0.49616 -0.552484
+       vertex 0.444153 -0.575083 -0.549636
+       vertex 0.426013 -0.565564 -0.643408
+    endloop
+  endfacet
+  facet normal 0.897399 -0.387588 -0.210834
+    outer loop
+       vertex 0.477351 -0.49616 -0.552484
+       vertex 0.426013 -0.565564 -0.643408
+       vertex 0.458375 -0.488481 -0.647371
+    endloop
+  endfacet
+  facet normal 0.88393 -0.384757 -0.265762
+    outer loop
+       vertex 0.458375 -0.488481 -0.647371
+       vertex 0.426013 -0.565564 -0.643408
+       vertex 0.404249 -0.555148 -0.730878
+    endloop
+  endfacet
+  facet normal 0.883648 -0.386466 -0.264216
+    outer loop
+       vertex 0.458375 -0.488481 -0.647371
+       vertex 0.404249 -0.555148 -0.730878
+       vertex 0.435406 -0.480211 -0.736286
+    endloop
+  endfacet
+  facet normal 0.864701 -0.382974 -0.324997
+    outer loop
+       vertex 0.435406 -0.480211 -0.736286
+       vertex 0.404249 -0.555148 -0.730878
+       vertex 0.378679 -0.544293 -0.8117
+    endloop
+  endfacet
+  facet normal 0.864617 -0.383839 -0.324199
+    outer loop
+       vertex 0.435406 -0.480211 -0.736286
+       vertex 0.378679 -0.544293 -0.8117
+       vertex 0.408146 -0.471793 -0.818954
+    endloop
+  endfacet
+  facet normal 0.838231 -0.379826 -0.39128
+    outer loop
+       vertex 0.408146 -0.471793 -0.818954
+       vertex 0.378679 -0.544293 -0.8117
+       vertex 0.349125 -0.533458 -0.885532
+    endloop
+  endfacet
+  facet normal 0.838229 -0.379977 -0.391139
+    outer loop
+       vertex 0.408146 -0.471793 -0.818954
+       vertex 0.349125 -0.533458 -0.885532
+       vertex 0.376296 -0.463669 -0.895101
+    endloop
+  endfacet
+  facet normal 0.801874 -0.375876 -0.464452
+    outer loop
+       vertex 0.376296 -0.463669 -0.895101
+       vertex 0.349125 -0.533458 -0.885532
+       vertex 0.314844 -0.523988 -0.952382
+    endloop
+  endfacet
+  facet normal 0.801873 -0.375868 -0.464459
+    outer loop
+       vertex 0.376296 -0.463669 -0.895101
+       vertex 0.314844 -0.523988 -0.952382
+       vertex 0.339276 -0.456727 -0.964632
+    endloop
+  endfacet
+  facet normal 0.753299 -0.372366 -0.54211
+    outer loop
+       vertex 0.339276 -0.456727 -0.964632
+       vertex 0.314844 -0.523988 -0.952382
+       vertex 0.275093 -0.51723 -1.01226
+    endloop
+  endfacet
+  facet normal 0.753358 -0.372642 -0.541839
+    outer loop
+       vertex 0.339276 -0.456727 -0.964632
+       vertex 0.275093 -0.51723 -1.01226
+       vertex 0.296508 -0.451852 -1.02745
+    endloop
+  endfacet
+  facet normal 0.691767 -0.370576 -0.619783
+    outer loop
+       vertex 0.296508 -0.451852 -1.02745
+       vertex 0.275093 -0.51723 -1.01226
+       vertex 0.229132 -0.514529 -1.06518
+    endloop
+  endfacet
+  facet normal 0.691939 -0.371045 -0.619311
+    outer loop
+       vertex 0.296508 -0.451852 -1.02745
+       vertex 0.229132 -0.514529 -1.06518
+       vertex 0.247411 -0.449932 -1.08345
+    endloop
+  endfacet
+  facet normal 0.864129 -0.474448 -0.167868
+    outer loop
+       vertex 0.458847 -0.583247 -0.449905
+       vertex 0.417578 -0.659028 -0.44816
+       vertex 0.403613 -0.649442 -0.547144
+    endloop
+  endfacet
+  facet normal 0.863427 -0.476309 -0.166203
+    outer loop
+       vertex 0.458847 -0.583247 -0.449905
+       vertex 0.403613 -0.649442 -0.547144
+       vertex 0.444153 -0.575083 -0.549636
+    endloop
+  endfacet
+  facet normal 0.854393 -0.473021 -0.215091
+    outer loop
+       vertex 0.444153 -0.575083 -0.549636
+       vertex 0.403613 -0.649442 -0.547144
+       vertex 0.386507 -0.638154 -0.639916
+    endloop
+  endfacet
+  facet normal 0.85377 -0.474922 -0.213365
+    outer loop
+       vertex 0.444153 -0.575083 -0.549636
+       vertex 0.386507 -0.638154 -0.639916
+       vertex 0.426013 -0.565564 -0.643408
+    endloop
+  endfacet
+  facet normal 0.841086 -0.470585 -0.266691
+    outer loop
+       vertex 0.426013 -0.565564 -0.643408
+       vertex 0.386507 -0.638154 -0.639916
+       vertex 0.366225 -0.625592 -0.726046
+    endloop
+  endfacet
+  facet normal 0.840708 -0.471991 -0.265396
+    outer loop
+       vertex 0.426013 -0.565564 -0.643408
+       vertex 0.366225 -0.625592 -0.726046
+       vertex 0.404249 -0.555148 -0.730878
+    endloop
+  endfacet
+  facet normal 0.823142 -0.466511 -0.323736
+    outer loop
+       vertex 0.404249 -0.555148 -0.730878
+       vertex 0.366225 -0.625592 -0.726046
+       vertex 0.342731 -0.612185 -0.805104
+    endloop
+  endfacet
+  facet normal 0.823009 -0.467175 -0.323116
+    outer loop
+       vertex 0.404249 -0.555148 -0.730878
+       vertex 0.342731 -0.612185 -0.805104
+       vertex 0.378679 -0.544293 -0.8117
+    endloop
+  endfacet
+  facet normal 0.798627 -0.460515 -0.387454
+    outer loop
+       vertex 0.378679 -0.544293 -0.8117
+       vertex 0.342731 -0.612185 -0.805104
+       vertex 0.315987 -0.59836 -0.876659
+    endloop
+  endfacet
+  facet normal 0.798606 -0.460693 -0.387286
+    outer loop
+       vertex 0.378679 -0.544293 -0.8117
+       vertex 0.315987 -0.59836 -0.876659
+       vertex 0.349125 -0.533458 -0.885532
+    endloop
+  endfacet
+  facet normal 0.765903 -0.453375 -0.455899
+    outer loop
+       vertex 0.349125 -0.533458 -0.885532
+       vertex 0.315987 -0.59836 -0.876659
+       vertex 0.285382 -0.585784 -0.940583
+    endloop
+  endfacet
+  facet normal 0.765917 -0.452391 -0.456851
+    outer loop
+       vertex 0.349125 -0.533458 -0.885532
+       vertex 0.285382 -0.585784 -0.940583
+       vertex 0.314844 -0.523988 -0.952382
+    endloop
+  endfacet
+  facet normal 0.722881 -0.445493 -0.528185
+    outer loop
+       vertex 0.314844 -0.523988 -0.952382
+       vertex 0.285382 -0.585784 -0.940583
+       vertex 0.250302 -0.576118 -0.996746
+    endloop
+  endfacet
+  facet normal 0.722684 -0.44383 -0.529852
+    outer loop
+       vertex 0.314844 -0.523988 -0.952382
+       vertex 0.250302 -0.576118 -0.996746
+       vertex 0.275093 -0.51723 -1.01226
+    endloop
+  endfacet
+  facet normal 0.667204 -0.439351 -0.601507
+    outer loop
+       vertex 0.275093 -0.51723 -1.01226
+       vertex 0.250302 -0.576118 -0.996746
+       vertex 0.209244 -0.572013 -1.04529
+    endloop
+  endfacet
+  facet normal 0.667105 -0.439022 -0.601856
+    outer loop
+       vertex 0.275093 -0.51723 -1.01226
+       vertex 0.209244 -0.572013 -1.04529
+       vertex 0.229132 -0.514529 -1.06518
+    endloop
+  endfacet
+  facet normal 0.808013 -0.564141 -0.169881
+    outer loop
+       vertex 0.417578 -0.659028 -0.44816
+       vertex 0.368835 -0.729217 -0.446914
+       vertex 0.355743 -0.718323 -0.545364
+    endloop
+  endfacet
+  facet normal 0.807358 -0.565441 -0.168671
+    outer loop
+       vertex 0.417578 -0.659028 -0.44816
+       vertex 0.355743 -0.718323 -0.545364
+       vertex 0.403613 -0.649442 -0.547144
+    endloop
+  endfacet
+  facet normal 0.798991 -0.560873 -0.216876
+    outer loop
+       vertex 0.403613 -0.649442 -0.547144
+       vertex 0.355743 -0.718323 -0.545364
+       vertex 0.339855 -0.705364 -0.637409
+    endloop
+  endfacet
+  facet normal 0.798387 -0.562216 -0.215617
+    outer loop
+       vertex 0.403613 -0.649442 -0.547144
+       vertex 0.339855 -0.705364 -0.637409
+       vertex 0.386507 -0.638154 -0.639916
+    endloop
+  endfacet
+  facet normal 0.786871 -0.556156 -0.26744
+    outer loop
+       vertex 0.386507 -0.638154 -0.639916
+       vertex 0.339855 -0.705364 -0.637409
+       vertex 0.321285 -0.6907 -0.722544
+    endloop
+  endfacet
+  facet normal 0.786468 -0.557194 -0.266462
+    outer loop
+       vertex 0.386507 -0.638154 -0.639916
+       vertex 0.321285 -0.6907 -0.722544
+       vertex 0.366225 -0.625592 -0.726046
+    endloop
+  endfacet
+  facet normal 0.770715 -0.549351 -0.322819
+    outer loop
+       vertex 0.366225 -0.625592 -0.726046
+       vertex 0.321285 -0.6907 -0.722544
+       vertex 0.300144 -0.674686 -0.800266
+    endloop
+  endfacet
+  facet normal 0.770523 -0.549954 -0.32225
+    outer loop
+       vertex 0.366225 -0.625592 -0.726046
+       vertex 0.300144 -0.674686 -0.800266
+       vertex 0.342731 -0.612185 -0.805104
+    endloop
+  endfacet
+  facet normal 0.748704 -0.539916 -0.384621
+    outer loop
+       vertex 0.342731 -0.612185 -0.805104
+       vertex 0.300144 -0.674686 -0.800266
+       vertex 0.276548 -0.657682 -0.870068
+    endloop
+  endfacet
+  facet normal 0.748594 -0.54038 -0.384184
+    outer loop
+       vertex 0.342731 -0.612185 -0.805104
+       vertex 0.276548 -0.657682 -0.870068
+       vertex 0.315987 -0.59836 -0.876659
+    endloop
+  endfacet
+  facet normal 0.720954 -0.529048 -0.447586
+    outer loop
+       vertex 0.315987 -0.59836 -0.876659
+       vertex 0.276548 -0.657682 -0.870068
+       vertex 0.250666 -0.64126 -0.931169
+    endloop
+  endfacet
+  facet normal 0.72117 -0.527498 -0.449066
+    outer loop
+       vertex 0.315987 -0.59836 -0.876659
+       vertex 0.250666 -0.64126 -0.931169
+       vertex 0.285382 -0.585784 -0.940583
+    endloop
+  endfacet
+  facet normal 0.685089 -0.515976 -0.51422
+    outer loop
+       vertex 0.285382 -0.585784 -0.940583
+       vertex 0.250666 -0.64126 -0.931169
+       vertex 0.222668 -0.626995 -0.982784
+    endloop
+  endfacet
+  facet normal 0.685106 -0.513821 -0.51635
+    outer loop
+       vertex 0.285382 -0.585784 -0.940583
+       vertex 0.222668 -0.626995 -0.982784
+       vertex 0.250302 -0.576118 -0.996746
+    endloop
+  endfacet
+  facet normal 0.637007 -0.505666 -0.581828
+    outer loop
+       vertex 0.250302 -0.576118 -0.996746
+       vertex 0.222668 -0.626995 -0.982784
+       vertex 0.189158 -0.620402 -1.0252
+    endloop
+  endfacet
+  facet normal 0.637047 -0.505853 -0.581622
+    outer loop
+       vertex 0.250302 -0.576118 -0.996746
+       vertex 0.189158 -0.620402 -1.0252
+       vertex 0.209244 -0.572013 -1.04529
+    endloop
+  endfacet
+  facet normal 0.737952 -0.652861 -0.170881
+    outer loop
+       vertex 0.368835 -0.729217 -0.446914
+       vertex 0.312627 -0.792882 -0.446415
+       vertex 0.300557 -0.780813 -0.544652
+    endloop
+  endfacet
+  facet normal 0.737627 -0.653354 -0.170394
+    outer loop
+       vertex 0.368835 -0.729217 -0.446914
+       vertex 0.300557 -0.780813 -0.544652
+       vertex 0.355743 -0.718323 -0.545364
+    endloop
+  endfacet
+  facet normal 0.730333 -0.647452 -0.21776
+    outer loop
+       vertex 0.355743 -0.718323 -0.545364
+       vertex 0.300557 -0.780813 -0.544652
+       vertex 0.286056 -0.766311 -0.636401
+    endloop
+  endfacet
+  facet normal 0.730015 -0.647987 -0.217235
+    outer loop
+       vertex 0.355743 -0.718323 -0.545364
+       vertex 0.286056 -0.766311 -0.636401
+       vertex 0.339855 -0.705364 -0.637409
+    endloop
+  endfacet
+  facet normal 0.720116 -0.640085 -0.267814
+    outer loop
+       vertex 0.339855 -0.705364 -0.637409
+       vertex 0.286056 -0.766311 -0.636401
+       vertex 0.269375 -0.74963 -0.721126
+    endloop
+  endfacet
+  facet normal 0.719871 -0.64055 -0.267362
+    outer loop
+       vertex 0.339855 -0.705364 -0.637409
+       vertex 0.269375 -0.74963 -0.721126
+       vertex 0.321285 -0.6907 -0.722544
+    endloop
+  endfacet
+  facet normal 0.706464 -0.630064 -0.322378
+    outer loop
+       vertex 0.321285 -0.6907 -0.722544
+       vertex 0.269375 -0.74963 -0.721126
+       vertex 0.250763 -0.731018 -0.798286
+    endloop
+  endfacet
+  facet normal 0.706286 -0.630455 -0.322004
+    outer loop
+       vertex 0.321285 -0.6907 -0.722544
+       vertex 0.250763 -0.731018 -0.798286
+       vertex 0.300144 -0.674686 -0.800266
+    endloop
+  endfacet
+  facet normal 0.687847 -0.616443 -0.383228
+    outer loop
+       vertex 0.300144 -0.674686 -0.800266
+       vertex 0.250763 -0.731018 -0.798286
+       vertex 0.230473 -0.710728 -0.867343
+    endloop
+  endfacet
+  facet normal 0.687653 -0.616956 -0.382751
+    outer loop
+       vertex 0.300144 -0.674686 -0.800266
+       vertex 0.230473 -0.710728 -0.867343
+       vertex 0.276548 -0.657682 -0.870068
+    endloop
+  endfacet
+  facet normal 0.665441 -0.600759 -0.443032
+    outer loop
+       vertex 0.276548 -0.657682 -0.870068
+       vertex 0.230473 -0.710728 -0.867343
+       vertex 0.209579 -0.689834 -0.927058
+    endloop
+  endfacet
+  facet normal 0.665528 -0.600463 -0.443302
+    outer loop
+       vertex 0.276548 -0.657682 -0.870068
+       vertex 0.209579 -0.689834 -0.927058
+       vertex 0.250666 -0.64126 -0.931169
+    endloop
+  endfacet
+  facet normal 0.636782 -0.581483 -0.506346
+    outer loop
+       vertex 0.250666 -0.64126 -0.931169
+       vertex 0.209579 -0.689834 -0.927058
+       vertex 0.189158 -0.669413 -0.976191
+    endloop
+  endfacet
+  facet normal 0.63674 -0.581694 -0.506157
+    outer loop
+       vertex 0.250666 -0.64126 -0.931169
+       vertex 0.189158 -0.669413 -0.976191
+       vertex 0.222668 -0.626995 -0.982784
+    endloop
+  endfacet
+  facet normal 0.600568 -0.562735 -0.568021
+    outer loop
+       vertex 0.222668 -0.626995 -0.982784
+       vertex 0.189158 -0.669413 -0.976191
+       vertex 0.173078 -0.653333 -1.00912
+    endloop
+  endfacet
+  facet normal 0.600568 -0.568022 -0.562734
+    outer loop
+       vertex 0.222668 -0.626995 -0.982784
+       vertex 0.173078 -0.653333 -1.00912
+       vertex 0.189158 -0.620402 -1.0252
+    endloop
+  endfacet
+  facet normal 0.0427593 -0.986795 -0.156226
+    outer loop
+       vertex -0.327179 -1.03302 -0.457381
+       vertex -0.327179 -1.01672 -0.560317
+       vertex -0.239126 -1.01302 -0.559605
+    endloop
+  endfacet
+  facet normal 0.042245 -0.986749 -0.15666
+    outer loop
+       vertex -0.327179 -1.03302 -0.457381
+       vertex -0.239126 -1.01302 -0.559605
+       vertex -0.237417 -1.02926 -0.456883
+    endloop
+  endfacet
+  facet normal 0.1279 -0.979297 -0.156907
+    outer loop
+       vertex -0.237417 -1.02926 -0.456883
+       vertex -0.239126 -1.01302 -0.559605
+       vertex -0.151985 -1.00192 -0.557825
+    endloop
+  endfacet
+  facet normal 0.126599 -0.979289 -0.158006
+    outer loop
+       vertex -0.237417 -1.02926 -0.456883
+       vertex -0.151985 -1.00192 -0.557825
+       vertex -0.148586 -1.01797 -0.455637
+    endloop
+  endfacet
+  facet normal 0.2134 -0.964023 -0.158496
+    outer loop
+       vertex -0.148586 -1.01797 -0.455637
+       vertex -0.151985 -1.00192 -0.557825
+       vertex -0.0666708 -0.983449 -0.555333
+    endloop
+  endfacet
+  facet normal 0.211557 -0.96417 -0.160061
+    outer loop
+       vertex -0.148586 -1.01797 -0.455637
+       vertex -0.0666708 -0.983449 -0.555333
+       vertex -0.0616202 -0.999181 -0.453892
+    endloop
+  endfacet
+  facet normal 0.299841 -0.940346 -0.160762
+    outer loop
+       vertex -0.0616202 -0.999181 -0.453892
+       vertex -0.0666708 -0.983449 -0.555333
+       vertex 0.0159046 -0.957606 -0.552484
+    endloop
+  endfacet
+  facet normal 0.297714 -0.940708 -0.162587
+    outer loop
+       vertex -0.0616202 -0.999181 -0.453892
+       vertex 0.0159046 -0.957606 -0.552484
+       vertex 0.0225498 -0.972888 -0.451898
+    endloop
+  endfacet
+  facet normal 0.387523 -0.907256 -0.163438
+    outer loop
+       vertex 0.0225498 -0.972888 -0.451898
+       vertex 0.0159046 -0.957606 -0.552484
+       vertex 0.0948282 -0.924408 -0.549636
+    endloop
+  endfacet
+  facet normal 0.385385 -0.907829 -0.165303
+    outer loop
+       vertex 0.0225498 -0.972888 -0.451898
+       vertex 0.0948282 -0.924408 -0.549636
+       vertex 0.102992 -0.939102 -0.449905
+    endloop
+  endfacet
+  facet normal 0.476308 -0.863428 -0.166203
+    outer loop
+       vertex 0.102992 -0.939102 -0.449905
+       vertex 0.0948282 -0.924408 -0.549636
+       vertex 0.169187 -0.883868 -0.547144
+    endloop
+  endfacet
+  facet normal 0.474448 -0.864129 -0.167868
+    outer loop
+       vertex 0.102992 -0.939102 -0.449905
+       vertex 0.169187 -0.883868 -0.547144
+       vertex 0.178773 -0.897833 -0.44816
+    endloop
+  endfacet
+  facet normal 0.565441 -0.807358 -0.168671
+    outer loop
+       vertex 0.178773 -0.897833 -0.44816
+       vertex 0.169187 -0.883868 -0.547144
+       vertex 0.238068 -0.835998 -0.545364
+    endloop
+  endfacet
+  facet normal 0.564141 -0.808013 -0.169881
+    outer loop
+       vertex 0.178773 -0.897833 -0.44816
+       vertex 0.238068 -0.835998 -0.545364
+       vertex 0.248962 -0.849091 -0.446914
+    endloop
+  endfacet
+  facet normal 0.653354 -0.737628 -0.170393
+    outer loop
+       vertex 0.248962 -0.849091 -0.446914
+       vertex 0.238068 -0.835998 -0.545364
+       vertex 0.300557 -0.780813 -0.544652
+    endloop
+  endfacet
+  facet normal 0.65286 -0.737952 -0.170881
+    outer loop
+       vertex 0.248962 -0.849091 -0.446914
+       vertex 0.300557 -0.780813 -0.544652
+       vertex 0.312627 -0.792882 -0.446415
+    endloop
+  endfacet
+  facet normal 0.0434612 -0.978083 -0.203631
+    outer loop
+       vertex -0.327179 -1.01672 -0.560317
+       vertex -0.327179 -0.996371 -0.658075
+       vertex -0.241072 -0.992745 -0.657112
+    endloop
+  endfacet
+  facet normal 0.0427772 -0.977991 -0.204216
+    outer loop
+       vertex -0.327179 -1.01672 -0.560317
+       vertex -0.241072 -0.992745 -0.657112
+       vertex -0.239126 -1.01302 -0.559605
+    endloop
+  endfacet
+  facet normal 0.12936 -0.970313 -0.204348
+    outer loop
+       vertex -0.239126 -1.01302 -0.559605
+       vertex -0.241072 -0.992745 -0.657112
+       vertex -0.155867 -0.981895 -0.654694
+    endloop
+  endfacet
+  facet normal 0.127744 -0.970234 -0.205738
+    outer loop
+       vertex -0.239126 -1.01302 -0.559605
+       vertex -0.155867 -0.981895 -0.654694
+       vertex -0.151985 -1.00192 -0.557825
+    endloop
+  endfacet
+  facet normal 0.214988 -0.954641 -0.20601
+    outer loop
+       vertex -0.151985 -1.00192 -0.557825
+       vertex -0.155867 -0.981895 -0.654694
+       vertex -0.0724673 -0.963848 -0.65129
+    endloop
+  endfacet
+  facet normal 0.212828 -0.95472 -0.20788
+    outer loop
+       vertex -0.151985 -1.00192 -0.557825
+       vertex -0.0724673 -0.963848 -0.65129
+       vertex -0.0666708 -0.983449 -0.555333
+    endloop
+  endfacet
+  facet normal 0.300948 -0.930618 -0.20828
+    outer loop
+       vertex -0.0666708 -0.983449 -0.555333
+       vertex -0.0724673 -0.963848 -0.65129
+       vertex 0.0082256 -0.93863 -0.647371
+    endloop
+  endfacet
+  facet normal 0.298599 -0.930913 -0.210335
+    outer loop
+       vertex -0.0666708 -0.983449 -0.555333
+       vertex 0.0082256 -0.93863 -0.647371
+       vertex 0.0159046 -0.957606 -0.552484
+    endloop
+  endfacet
+  facet normal 0.387589 -0.897398 -0.210834
+    outer loop
+       vertex 0.0159046 -0.957606 -0.552484
+       vertex 0.0082256 -0.93863 -0.647371
+       vertex 0.0853091 -0.906268 -0.643408
+    endloop
+  endfacet
+  facet normal 0.385365 -0.89789 -0.212809
+    outer loop
+       vertex 0.0159046 -0.957606 -0.552484
+       vertex 0.0853091 -0.906268 -0.643408
+       vertex 0.0948282 -0.924408 -0.549636
+    endloop
+  endfacet
+  facet normal 0.474921 -0.853771 -0.213366
+    outer loop
+       vertex 0.0948282 -0.924408 -0.549636
+       vertex 0.0853091 -0.906268 -0.643408
+       vertex 0.157899 -0.866762 -0.639916
+    endloop
+  endfacet
+  facet normal 0.47302 -0.854393 -0.215091
+    outer loop
+       vertex 0.0948282 -0.924408 -0.549636
+       vertex 0.157899 -0.866762 -0.639916
+       vertex 0.169187 -0.883868 -0.547144
+    endloop
+  endfacet
+  facet normal 0.562216 -0.798387 -0.215617
+    outer loop
+       vertex 0.169187 -0.883868 -0.547144
+       vertex 0.157899 -0.866762 -0.639916
+       vertex 0.225109 -0.82011 -0.637409
+    endloop
+  endfacet
+  facet normal 0.560872 -0.798991 -0.216876
+    outer loop
+       vertex 0.169187 -0.883868 -0.547144
+       vertex 0.225109 -0.82011 -0.637409
+       vertex 0.238068 -0.835998 -0.545364
+    endloop
+  endfacet
+  facet normal 0.647987 -0.730015 -0.217235
+    outer loop
+       vertex 0.238068 -0.835998 -0.545364
+       vertex 0.225109 -0.82011 -0.637409
+       vertex 0.286056 -0.766311 -0.636401
+    endloop
+  endfacet
+  facet normal 0.647452 -0.730333 -0.21776
+    outer loop
+       vertex 0.238068 -0.835998 -0.545364
+       vertex 0.286056 -0.766311 -0.636401
+       vertex 0.300557 -0.780813 -0.544652
+    endloop
+  endfacet
+  facet normal 0.0443395 -0.964686 -0.259644
+    outer loop
+       vertex -0.327179 -0.996371 -0.658075
+       vertex -0.327179 -0.971527 -0.750381
+       vertex -0.243113 -0.967997 -0.74914
+    endloop
+  endfacet
+  facet normal 0.043525 -0.964533 -0.260348
+    outer loop
+       vertex -0.327179 -0.996371 -0.658075
+       vertex -0.243113 -0.967997 -0.74914
+       vertex -0.241072 -0.992745 -0.657112
+    endloop
+  endfacet
+  facet normal 0.130971 -0.95664 -0.260166
+    outer loop
+       vertex -0.241072 -0.992745 -0.657112
+       vertex -0.243113 -0.967997 -0.74914
+       vertex -0.15996 -0.957469 -0.745993
+    endloop
+  endfacet
+  facet normal 0.129224 -0.956462 -0.261689
+    outer loop
+       vertex -0.241072 -0.992745 -0.657112
+       vertex -0.15996 -0.957469 -0.745993
+       vertex -0.155867 -0.981895 -0.654694
+    endloop
+  endfacet
+  facet normal 0.216405 -0.940667 -0.261371
+    outer loop
+       vertex -0.155867 -0.981895 -0.654694
+       vertex -0.15996 -0.957469 -0.745993
+       vertex -0.0786331 -0.940003 -0.741516
+    endloop
+  endfacet
+  facet normal 0.214292 -0.940631 -0.263234
+    outer loop
+       vertex -0.155867 -0.981895 -0.654694
+       vertex -0.0786331 -0.940003 -0.741516
+       vertex -0.0724673 -0.963848 -0.65129
+    endloop
+  endfacet
+  facet normal 0.301387 -0.916564 -0.262826
+    outer loop
+       vertex -0.0724673 -0.963848 -0.65129
+       vertex -0.0786331 -0.940003 -0.741516
+       vertex -4.44334e-05 -0.915661 -0.736286
+    endloop
+  endfacet
+  facet normal 0.299338 -0.916709 -0.264653
+    outer loop
+       vertex -0.0724673 -0.963848 -0.65129
+       vertex -4.44334e-05 -0.915661 -0.736286
+       vertex 0.0082256 -0.93863 -0.647371
+    endloop
+  endfacet
+  facet normal 0.386465 -0.883648 -0.264217
+    outer loop
+       vertex 0.0082256 -0.93863 -0.647371
+       vertex -4.44334e-05 -0.915661 -0.736286
+       vertex 0.0748929 -0.884504 -0.730878
+    endloop
+  endfacet
+  facet normal 0.384758 -0.88393 -0.265762
+    outer loop
+       vertex 0.0082256 -0.93863 -0.647371
+       vertex 0.0748929 -0.884504 -0.730878
+       vertex 0.0853091 -0.906268 -0.643408
+    endloop
+  endfacet
+  facet normal 0.471991 -0.840708 -0.265395
+    outer loop
+       vertex 0.0853091 -0.906268 -0.643408
+       vertex 0.0748929 -0.884504 -0.730878
+       vertex 0.145337 -0.846481 -0.726046
+    endloop
+  endfacet
+  facet normal 0.470584 -0.841087 -0.266691
+    outer loop
+       vertex 0.0853091 -0.906268 -0.643408
+       vertex 0.145337 -0.846481 -0.726046
+       vertex 0.157899 -0.866762 -0.639916
+    endloop
+  endfacet
+  facet normal 0.557194 -0.786469 -0.266462
+    outer loop
+       vertex 0.157899 -0.866762 -0.639916
+       vertex 0.145337 -0.846481 -0.726046
+       vertex 0.210445 -0.80154 -0.722544
+    endloop
+  endfacet
+  facet normal 0.556156 -0.786871 -0.26744
+    outer loop
+       vertex 0.157899 -0.866762 -0.639916
+       vertex 0.210445 -0.80154 -0.722544
+       vertex 0.225109 -0.82011 -0.637409
+    endloop
+  endfacet
+  facet normal 0.64055 -0.719871 -0.267361
+    outer loop
+       vertex 0.225109 -0.82011 -0.637409
+       vertex 0.210445 -0.80154 -0.722544
+       vertex 0.269375 -0.74963 -0.721126
+    endloop
+  endfacet
+  facet normal 0.640085 -0.720116 -0.267814
+    outer loop
+       vertex 0.225109 -0.82011 -0.637409
+       vertex 0.269375 -0.74963 -0.721126
+       vertex 0.286056 -0.766311 -0.636401
+    endloop
+  endfacet
+  facet normal 0.0453633 -0.944684 -0.324829
+    outer loop
+       vertex -0.327179 -0.971527 -0.750381
+       vertex -0.327179 -0.941757 -0.836959
+       vertex -0.245107 -0.938344 -0.835423
+    endloop
+  endfacet
+  facet normal 0.044464 -0.944458 -0.325609
+    outer loop
+       vertex -0.327179 -0.971527 -0.750381
+       vertex -0.245107 -0.938344 -0.835423
+       vertex -0.243113 -0.967997 -0.74914
+    endloop
+  endfacet
+  facet normal 0.13258 -0.936416 -0.324881
+    outer loop
+       vertex -0.243113 -0.967997 -0.74914
+       vertex -0.245107 -0.938344 -0.835423
+       vertex -0.163992 -0.92823 -0.831472
+    endloop
+  endfacet
+  facet normal 0.130881 -0.936134 -0.326378
+    outer loop
+       vertex -0.243113 -0.967997 -0.74914
+       vertex -0.163992 -0.92823 -0.831472
+       vertex -0.15996 -0.957469 -0.745993
+    endloop
+  endfacet
+  facet normal 0.217375 -0.92037 -0.325066
+    outer loop
+       vertex -0.15996 -0.957469 -0.745993
+       vertex -0.163992 -0.92823 -0.831472
+       vertex -0.0847917 -0.911541 -0.825763
+    endloop
+  endfacet
+  facet normal 0.215608 -0.920225 -0.326647
+    outer loop
+       vertex -0.15996 -0.957469 -0.745993
+       vertex -0.0847917 -0.911541 -0.825763
+       vertex -0.0786331 -0.940003 -0.741516
+    endloop
+  endfacet
+  facet normal 0.300813 -0.896631 -0.324905
+    outer loop
+       vertex -0.0786331 -0.940003 -0.741516
+       vertex -0.0847917 -0.911541 -0.825763
+       vertex -0.0084626 -0.888401 -0.818953
+    endloop
+  endfacet
+  facet normal 0.29943 -0.896638 -0.326163
+    outer loop
+       vertex -0.0786331 -0.940003 -0.741516
+       vertex -0.0084626 -0.888401 -0.818953
+       vertex -4.44334e-05 -0.915661 -0.736286
+    endloop
+  endfacet
+  facet normal 0.383839 -0.864617 -0.324199
+    outer loop
+       vertex -4.44334e-05 -0.915661 -0.736286
+       vertex -0.0084626 -0.888401 -0.818953
+       vertex 0.064038 -0.858934 -0.8117
+    endloop
+  endfacet
+  facet normal 0.382974 -0.864701 -0.324998
+    outer loop
+       vertex -4.44334e-05 -0.915661 -0.736286
+       vertex 0.064038 -0.858934 -0.8117
+       vertex 0.0748929 -0.884504 -0.730878
+    endloop
+  endfacet
+  facet normal 0.467173 -0.82301 -0.323116
+    outer loop
+       vertex 0.0748929 -0.884504 -0.730878
+       vertex 0.064038 -0.858934 -0.8117
+       vertex 0.13193 -0.822986 -0.805104
+    endloop
+  endfacet
+  facet normal 0.466511 -0.823142 -0.323736
+    outer loop
+       vertex 0.0748929 -0.884504 -0.730878
+       vertex 0.13193 -0.822986 -0.805104
+       vertex 0.145337 -0.846481 -0.726046
+    endloop
+  endfacet
+  facet normal 0.549954 -0.770523 -0.322249
+    outer loop
+       vertex 0.145337 -0.846481 -0.726046
+       vertex 0.13193 -0.822986 -0.805104
+       vertex 0.194431 -0.780399 -0.800266
+    endloop
+  endfacet
+  facet normal 0.549351 -0.770715 -0.322819
+    outer loop
+       vertex 0.145337 -0.846481 -0.726046
+       vertex 0.194431 -0.780399 -0.800266
+       vertex 0.210445 -0.80154 -0.722544
+    endloop
+  endfacet
+  facet normal 0.630455 -0.706286 -0.322005
+    outer loop
+       vertex 0.210445 -0.80154 -0.722544
+       vertex 0.194431 -0.780399 -0.800266
+       vertex 0.250763 -0.731018 -0.798286
+    endloop
+  endfacet
+  facet normal 0.630064 -0.706464 -0.322378
+    outer loop
+       vertex 0.210445 -0.80154 -0.722544
+       vertex 0.250763 -0.731018 -0.798286
+       vertex 0.269375 -0.74963 -0.721126
+    endloop
+  endfacet
+  facet normal 0.0464682 -0.915674 -0.399228
+    outer loop
+       vertex -0.327179 -0.941757 -0.836959
+       vertex -0.327179 -0.906626 -0.917536
+       vertex -0.246911 -0.903354 -0.915698
+    endloop
+  endfacet
+  facet normal 0.0455517 -0.915375 -0.400016
+    outer loop
+       vertex -0.327179 -0.941757 -0.836959
+       vertex -0.246911 -0.903354 -0.915698
+       vertex -0.245107 -0.938344 -0.835423
+    endloop
+  endfacet
+  facet normal 0.134047 -0.907322 -0.398495
+    outer loop
+       vertex -0.245107 -0.938344 -0.835423
+       vertex -0.246911 -0.903354 -0.915698
+       vertex -0.167691 -0.893765 -0.910881
+    endloop
+  endfacet
+  facet normal 0.132557 -0.906962 -0.39981
+    outer loop
+       vertex -0.245107 -0.938344 -0.835423
+       vertex -0.167691 -0.893765 -0.910881
+       vertex -0.163992 -0.92823 -0.831472
+    endloop
+  endfacet
+  facet normal 0.217775 -0.891565 -0.397097
+    outer loop
+       vertex -0.163992 -0.92823 -0.831472
+       vertex -0.167691 -0.893765 -0.910881
+       vertex -0.0905666 -0.878088 -0.903784
+    endloop
+  endfacet
+  facet normal 0.216536 -0.891367 -0.398217
+    outer loop
+       vertex -0.163992 -0.92823 -0.831472
+       vertex -0.0905666 -0.878088 -0.903784
+       vertex -0.0847917 -0.911541 -0.825763
+    endloop
+  endfacet
+  facet normal 0.29923 -0.868747 -0.394639
+    outer loop
+       vertex -0.0847917 -0.911541 -0.825763
+       vertex -0.0905666 -0.878088 -0.903784
+       vertex -0.016586 -0.856551 -0.895101
+    endloop
+  endfacet
+  facet normal 0.298617 -0.868701 -0.395205
+    outer loop
+       vertex -0.0847917 -0.911541 -0.825763
+       vertex -0.016586 -0.856551 -0.895101
+       vertex -0.0084626 -0.888401 -0.818953
+    endloop
+  endfacet
+  facet normal 0.379977 -0.838229 -0.391139
+    outer loop
+       vertex -0.0084626 -0.888401 -0.818953
+       vertex -0.016586 -0.856551 -0.895101
+       vertex 0.0532029 -0.82938 -0.885532
+    endloop
+  endfacet
+  facet normal 0.379827 -0.838231 -0.39128
+    outer loop
+       vertex -0.0084626 -0.888401 -0.818953
+       vertex 0.0532029 -0.82938 -0.885532
+       vertex 0.064038 -0.858934 -0.8117
+    endloop
+  endfacet
+  facet normal 0.460693 -0.798606 -0.387286
+    outer loop
+       vertex 0.064038 -0.858934 -0.8117
+       vertex 0.0532029 -0.82938 -0.885532
+       vertex 0.118105 -0.796242 -0.876659
+    endloop
+  endfacet
+  facet normal 0.460514 -0.798627 -0.387455
+    outer loop
+       vertex 0.064038 -0.858934 -0.8117
+       vertex 0.118105 -0.796242 -0.876659
+       vertex 0.13193 -0.822986 -0.805104
+    endloop
+  endfacet
+  facet normal 0.540379 -0.748594 -0.384184
+    outer loop
+       vertex 0.13193 -0.822986 -0.805104
+       vertex 0.118105 -0.796242 -0.876659
+       vertex 0.177427 -0.756803 -0.870068
+    endloop
+  endfacet
+  facet normal 0.539916 -0.748704 -0.384621
+    outer loop
+       vertex 0.13193 -0.822986 -0.805104
+       vertex 0.177427 -0.756803 -0.870068
+       vertex 0.194431 -0.780399 -0.800266
+    endloop
+  endfacet
+  facet normal 0.616956 -0.687653 -0.382751
+    outer loop
+       vertex 0.194431 -0.780399 -0.800266
+       vertex 0.177427 -0.756803 -0.870068
+       vertex 0.230473 -0.710728 -0.867343
+    endloop
+  endfacet
+  facet normal 0.616443 -0.687847 -0.383229
+    outer loop
+       vertex 0.194431 -0.780399 -0.800266
+       vertex 0.230473 -0.710728 -0.867343
+       vertex 0.250763 -0.731018 -0.798286
+    endloop
+  endfacet
+  facet normal 0.0475431 -0.874919 -0.48193
+    outer loop
+       vertex -0.327179 -0.906626 -0.917536
+       vertex -0.327179 -0.865699 -0.991836
+       vertex -0.248383 -0.862594 -0.9897
+    endloop
+  endfacet
+  facet normal 0.0467026 -0.874574 -0.482638
+    outer loop
+       vertex -0.327179 -0.906626 -0.917536
+       vertex -0.248383 -0.862594 -0.9897
+       vertex -0.246911 -0.903354 -0.915698
+    endloop
+  endfacet
+  facet normal 0.135377 -0.866719 -0.480074
+    outer loop
+       vertex -0.246911 -0.903354 -0.915698
+       vertex -0.248383 -0.862594 -0.9897
+       vertex -0.17074 -0.85363 -0.983989
+    endloop
+  endfacet
+  facet normal 0.134109 -0.8663 -0.481184
+    outer loop
+       vertex -0.246911 -0.903354 -0.915698
+       vertex -0.17074 -0.85363 -0.983989
+       vertex -0.167691 -0.893765 -0.910881
+    endloop
+  endfacet
+  facet normal 0.217935 -0.851656 -0.47664
+    outer loop
+       vertex -0.167691 -0.893765 -0.910881
+       vertex -0.17074 -0.85363 -0.983989
+       vertex -0.0954038 -0.839159 -0.9754
+    endloop
+  endfacet
+  facet normal 0.217012 -0.851423 -0.477477
+    outer loop
+       vertex -0.167691 -0.893765 -0.910881
+       vertex -0.0954038 -0.839159 -0.9754
+       vertex -0.0905666 -0.878088 -0.903784
+    endloop
+  endfacet
+  facet normal 0.297355 -0.830274 -0.471407
+    outer loop
+       vertex -0.0905666 -0.878088 -0.903784
+       vertex -0.0954038 -0.839159 -0.9754
+       vertex -0.0235283 -0.819531 -0.964632
+    endloop
+  endfacet
+  facet normal 0.297057 -0.830223 -0.471685
+    outer loop
+       vertex -0.0905666 -0.878088 -0.903784
+       vertex -0.0235283 -0.819531 -0.964632
+       vertex -0.016586 -0.856551 -0.895101
+    endloop
+  endfacet
+  facet normal 0.375866 -0.801874 -0.46446
+    outer loop
+       vertex -0.016586 -0.856551 -0.895101
+       vertex -0.0235283 -0.819531 -0.964632
+       vertex 0.0437332 -0.795099 -0.952382
+    endloop
+  endfacet
+  facet normal 0.375876 -0.801875 -0.464451
+    outer loop
+       vertex -0.016586 -0.856551 -0.895101
+       vertex 0.0437332 -0.795099 -0.952382
+       vertex 0.0532029 -0.82938 -0.885532
+    endloop
+  endfacet
+  facet normal 0.452391 -0.765918 -0.456851
+    outer loop
+       vertex 0.0532029 -0.82938 -0.885532
+       vertex 0.0437332 -0.795099 -0.952382
+       vertex 0.105528 -0.765637 -0.940583
+    endloop
+  endfacet
+  facet normal 0.453375 -0.765903 -0.455899
+    outer loop
+       vertex 0.0532029 -0.82938 -0.885532
+       vertex 0.105528 -0.765637 -0.940583
+       vertex 0.118105 -0.796242 -0.876659
+    endloop
+  endfacet
+  facet normal 0.527498 -0.72117 -0.449065
+    outer loop
+       vertex 0.118105 -0.796242 -0.876659
+       vertex 0.105528 -0.765637 -0.940583
+       vertex 0.161005 -0.730921 -0.931169
+    endloop
+  endfacet
+  facet normal 0.529048 -0.720954 -0.447586
+    outer loop
+       vertex 0.118105 -0.796242 -0.876659
+       vertex 0.161005 -0.730921 -0.931169
+       vertex 0.177427 -0.756803 -0.870068
+    endloop
+  endfacet
+  facet normal 0.600463 -0.665528 -0.443302
+    outer loop
+       vertex 0.177427 -0.756803 -0.870068
+       vertex 0.161005 -0.730921 -0.931169
+       vertex 0.209579 -0.689834 -0.927058
+    endloop
+  endfacet
+  facet normal 0.600759 -0.665441 -0.443032
+    outer loop
+       vertex 0.177427 -0.756803 -0.870068
+       vertex 0.209579 -0.689834 -0.927058
+       vertex 0.230473 -0.710728 -0.867343
+    endloop
+  endfacet
+  facet normal 0.0484137 -0.819786 -0.570619
+    outer loop
+       vertex -0.327179 -0.865699 -0.991836
+       vertex -0.327179 -0.818542 -1.05958
+       vertex -0.249379 -0.815633 -1.05716
+    endloop
+  endfacet
+  facet normal 0.0477763 -0.819466 -0.571133
+    outer loop
+       vertex -0.327179 -0.865699 -0.991836
+       vertex -0.249379 -0.815633 -1.05716
+       vertex -0.248383 -0.862594 -0.9897
+    endloop
+  endfacet
+  facet normal 0.136457 -0.812111 -0.567323
+    outer loop
+       vertex -0.248383 -0.862594 -0.9897
+       vertex -0.249379 -0.815633 -1.05716
+       vertex -0.172822 -0.807382 -1.05056
+    endloop
+  endfacet
+  facet normal 0.135503 -0.811702 -0.568137
+    outer loop
+       vertex -0.248383 -0.862594 -0.9897
+       vertex -0.172822 -0.807382 -1.05056
+       vertex -0.17074 -0.85363 -0.983989
+    endloop
+  endfacet
+  facet normal 0.218088 -0.798289 -0.561402
+    outer loop
+       vertex -0.17074 -0.85363 -0.983989
+       vertex -0.172822 -0.807382 -1.05056
+       vertex -0.0987492 -0.794266 -1.04044
+    endloop
+  endfacet
+  facet normal 0.21737 -0.798031 -0.562047
+    outer loop
+       vertex -0.17074 -0.85363 -0.983989
+       vertex -0.0987492 -0.794266 -1.04044
+       vertex -0.0954038 -0.839159 -0.9754
+    endloop
+  endfacet
+  facet normal 0.295888 -0.778938 -0.552906
+    outer loop
+       vertex -0.0954038 -0.839159 -0.9754
+       vertex -0.0987492 -0.794266 -1.04044
+       vertex -0.0284028 -0.776763 -1.02745
+    endloop
+  endfacet
+  facet normal 0.295566 -0.778846 -0.553209
+    outer loop
+       vertex -0.0954038 -0.839159 -0.9754
+       vertex -0.0284028 -0.776763 -1.02745
+       vertex -0.0235283 -0.819531 -0.964632
+    endloop
+  endfacet
+  facet normal 0.372643 -0.753359 -0.541838
+    outer loop
+       vertex -0.0235283 -0.819531 -0.964632
+       vertex -0.0284028 -0.776763 -1.02745
+       vertex 0.0369749 -0.755348 -1.01226
+    endloop
+  endfacet
+  facet normal 0.372364 -0.753299 -0.542112
+    outer loop
+       vertex -0.0235283 -0.819531 -0.964632
+       vertex 0.0369749 -0.755348 -1.01226
+       vertex 0.0437332 -0.795099 -0.952382
+    endloop
+  endfacet
+  facet normal 0.443829 -0.722683 -0.529853
+    outer loop
+       vertex 0.0437332 -0.795099 -0.952382
+       vertex 0.0369749 -0.755348 -1.01226
+       vertex 0.0958629 -0.730557 -0.996746
+    endloop
+  endfacet
+  facet normal 0.445493 -0.72288 -0.528186
+    outer loop
+       vertex 0.0437332 -0.795099 -0.952382
+       vertex 0.0958629 -0.730557 -0.996746
+       vertex 0.105528 -0.765637 -0.940583
+    endloop
+  endfacet
+  facet normal 0.51382 -0.685107 -0.516351
+    outer loop
+       vertex 0.105528 -0.765637 -0.940583
+       vertex 0.0958629 -0.730557 -0.996746
+       vertex 0.14674 -0.702923 -0.982784
+    endloop
+  endfacet
+  facet normal 0.515975 -0.685089 -0.51422
+    outer loop
+       vertex 0.105528 -0.765637 -0.940583
+       vertex 0.14674 -0.702923 -0.982784
+       vertex 0.161005 -0.730921 -0.931169
+    endloop
+  endfacet
+  facet normal 0.581695 -0.63674 -0.506156
+    outer loop
+       vertex 0.161005 -0.730921 -0.931169
+       vertex 0.14674 -0.702923 -0.982784
+       vertex 0.189158 -0.669413 -0.976191
+    endloop
+  endfacet
+  facet normal 0.581483 -0.636782 -0.506346
+    outer loop
+       vertex 0.161005 -0.730921 -0.931169
+       vertex 0.189158 -0.669413 -0.976191
+       vertex 0.209579 -0.689834 -0.927058
+    endloop
+  endfacet
+  facet normal 0.0488436 -0.748534 -0.661295
+    outer loop
+       vertex -0.327179 -0.818542 -1.05958
+       vertex -0.327179 -0.764719 -1.12051
+       vertex -0.249759 -0.762037 -1.11783
+    endloop
+  endfacet
+  facet normal 0.0485713 -0.748371 -0.661499
+    outer loop
+       vertex -0.327179 -0.818542 -1.05958
+       vertex -0.249759 -0.762037 -1.11783
+       vertex -0.249379 -0.815633 -1.05716
+    endloop
+  endfacet
+  facet normal 0.137009 -0.741914 -0.656347
+    outer loop
+       vertex -0.249379 -0.815633 -1.05716
+       vertex -0.249759 -0.762037 -1.11783
+       vertex -0.173622 -0.754577 -1.11037
+    endloop
+  endfacet
+  facet normal 0.136575 -0.741682 -0.6567
+    outer loop
+       vertex -0.249379 -0.815633 -1.05716
+       vertex -0.173622 -0.754577 -1.11037
+       vertex -0.172822 -0.807382 -1.05056
+    endloop
+  endfacet
+  facet normal 0.218197 -0.730102 -0.647566
+    outer loop
+       vertex -0.172822 -0.807382 -1.05056
+       vertex -0.173622 -0.754577 -1.11037
+       vertex -0.100049 -0.742924 -1.09871
+    endloop
+  endfacet
+  facet normal 0.217805 -0.729915 -0.647908
+    outer loop
+       vertex -0.172822 -0.807382 -1.05056
+       vertex -0.100049 -0.742924 -1.09871
+       vertex -0.0987492 -0.794266 -1.04044
+    endloop
+  endfacet
+  facet normal 0.295197 -0.71363 -0.635288
+    outer loop
+       vertex -0.0987492 -0.794266 -1.04044
+       vertex -0.100049 -0.742924 -1.09871
+       vertex -0.0303231 -0.727665 -1.08345
+    endloop
+  endfacet
+  facet normal 0.294869 -0.713492 -0.635595
+    outer loop
+       vertex -0.0987492 -0.794266 -1.04044
+       vertex -0.0303231 -0.727665 -1.08345
+       vertex -0.0284028 -0.776763 -1.02745
+    endloop
+  endfacet
+  facet normal 0.371043 -0.691939 -0.619312
+    outer loop
+       vertex -0.0284028 -0.776763 -1.02745
+       vertex -0.0303231 -0.727665 -1.08345
+       vertex 0.0342735 -0.709387 -1.06518
+    endloop
+  endfacet
+  facet normal 0.370577 -0.691768 -0.619782
+    outer loop
+       vertex -0.0284028 -0.776763 -1.02745
+       vertex 0.0342735 -0.709387 -1.06518
+       vertex 0.0369749 -0.755348 -1.01226
+    endloop
+  endfacet
+  facet normal 0.439022 -0.667106 -0.601855
+    outer loop
+       vertex 0.0369749 -0.755348 -1.01226
+       vertex 0.0342735 -0.709387 -1.06518
+       vertex 0.0917579 -0.689499 -1.04529
+    endloop
+  endfacet
+  facet normal 0.43935 -0.667204 -0.601506
+    outer loop
+       vertex 0.0369749 -0.755348 -1.01226
+       vertex 0.0917579 -0.689499 -1.04529
+       vertex 0.0958629 -0.730557 -0.996746
+    endloop
+  endfacet
+  facet normal 0.505852 -0.637047 -0.581622
+    outer loop
+       vertex 0.0958629 -0.730557 -0.996746
+       vertex 0.0917579 -0.689499 -1.04529
+       vertex 0.140147 -0.669413 -1.0252
+    endloop
+  endfacet
+  facet normal 0.505664 -0.637008 -0.581829
+    outer loop
+       vertex 0.0958629 -0.730557 -0.996746
+       vertex 0.140147 -0.669413 -1.0252
+       vertex 0.14674 -0.702923 -0.982784
+    endloop
+  endfacet
+  facet normal 0.568022 -0.600567 -0.562734
+    outer loop
+       vertex 0.14674 -0.702923 -0.982784
+       vertex 0.140147 -0.669413 -1.0252
+       vertex 0.173078 -0.653333 -1.00912
+    endloop
+  endfacet
+  facet normal 0.562735 -0.600567 -0.568021
+    outer loop
+       vertex 0.14674 -0.702923 -0.982784
+       vertex 0.173078 -0.653333 -1.00912
+       vertex 0.189158 -0.669413 -0.976191
+    endloop
+  endfacet
+  facet normal 0.0422546 -0.992246 -0.116889
+    outer loop
+       vertex -0.327179 -1.03302 -0.457381
+       vertex -0.237417 -1.02926 -0.456883
+       vertex -0.236088 -1.04188 -0.34921
+    endloop
+  endfacet
+  facet normal 0.0419438 -0.992289 -0.11663
+    outer loop
+       vertex -0.327179 -1.03302 -0.457381
+       vertex -0.236088 -1.04188 -0.34921
+       vertex -0.327179 -1.04569 -0.349542
+    endloop
+  endfacet
+  facet normal 0.0419616 -0.995935 -0.0797085
+    outer loop
+       vertex -0.327179 -1.04569 -0.349542
+       vertex -0.236088 -1.04188 -0.34921
+       vertex -0.23507 -1.05075 -0.237864
+    endloop
+  endfacet
+  facet normal 0.0417479 -0.995958 -0.0795333
+    outer loop
+       vertex -0.327179 -1.04569 -0.349542
+       vertex -0.23507 -1.05075 -0.237864
+       vertex -0.327179 -1.0546 -0.238072
+    endloop
+  endfacet
+  facet normal 0.0417595 -0.998167 -0.0437988
+    outer loop
+       vertex -0.327179 -1.0546 -0.238072
+       vertex -0.23507 -1.05075 -0.237864
+       vertex -0.234296 -1.05571 -0.124123
+    endloop
+  endfacet
+  facet normal 0.0415584 -0.998183 -0.043635
+    outer loop
+       vertex -0.327179 -1.0546 -0.238072
+       vertex -0.234296 -1.05571 -0.124123
+       vertex -0.327179 -1.05957 -0.124242
+    endloop
+  endfacet
+  facet normal 0.0415512 -0.999104 -0.00802042
+    outer loop
+       vertex -0.327179 -1.05957 -0.124242
+       vertex -0.234296 -1.05571 -0.124123
+       vertex -0.233698 -1.05661 -0.00926336
+    endloop
+  endfacet
+  facet normal 0.0412984 -0.999116 -0.00781459
+    outer loop
+       vertex -0.327179 -1.05957 -0.124242
+       vertex -0.233698 -1.05661 -0.00926336
+       vertex -0.327179 -1.06047 -0.0093227
+    endloop
+  endfacet
+  facet normal 0.0412595 -0.998736 0.0286893
+    outer loop
+       vertex -0.327179 -1.06047 -0.0093227
+       vertex -0.233698 -1.05661 -0.00926336
+       vertex -0.233207 -1.05329 0.105437
+    endloop
+  endfacet
+  facet normal 0.0408904 -0.998743 0.0289919
+    outer loop
+       vertex -0.327179 -1.06047 -0.0093227
+       vertex -0.233207 -1.05329 0.105437
+       vertex -0.327179 -1.05714 0.105413
+    endloop
+  endfacet
+  facet normal 0.0406207 -0.992678 0.113757
+    outer loop
+       vertex -0.327179 -1.05714 0.105413
+       vertex -0.233207 -1.05329 0.105437
+       vertex -0.232594 -1.04088 0.213522
+    endloop
+  endfacet
+  facet normal 0.0398126 -0.99263 0.114457
+    outer loop
+       vertex -0.327179 -1.05714 0.105413
+       vertex -0.232594 -1.04088 0.213522
+       vertex -0.327179 -1.04468 0.213516
+    endloop
+  endfacet
+  facet normal 0.0386106 -0.962906 0.267061
+    outer loop
+       vertex -0.327179 -1.04468 0.213516
+       vertex -0.232594 -1.04088 0.213522
+       vertex -0.231629 -1.01449 0.308537
+    endloop
+  endfacet
+  facet normal 0.0370842 -0.962569 0.268489
+    outer loop
+       vertex -0.327179 -1.04468 0.213516
+       vertex -0.231629 -1.01449 0.308537
+       vertex -0.327179 -1.01817 0.308537
+    endloop
+  endfacet
+  facet normal 0.033037 -0.857519 0.51339
+    outer loop
+       vertex -0.327179 -1.01817 0.308537
+       vertex -0.231629 -1.01449 0.308537
+       vertex -0.230082 -0.969235 0.384027
+    endloop
+  endfacet
+  facet normal 0.0307591 -0.856314 0.515538
+    outer loop
+       vertex -0.327179 -1.01817 0.308537
+       vertex -0.230082 -0.969235 0.384027
+       vertex -0.327179 -0.972723 0.384027
+    endloop
+  endfacet
+  facet normal 0.126749 -0.984922 -0.117745
+    outer loop
+       vertex -0.237417 -1.02926 -0.456883
+       vertex -0.148586 -1.01797 -0.455637
+       vertex -0.145943 -1.03046 -0.348379
+    endloop
+  endfacet
+  facet normal 0.125963 -0.985101 -0.117084
+    outer loop
+       vertex -0.237417 -1.02926 -0.456883
+       vertex -0.145943 -1.03046 -0.348379
+       vertex -0.236088 -1.04188 -0.34921
+    endloop
+  endfacet
+  facet normal 0.126088 -0.988756 -0.0803902
+    outer loop
+       vertex -0.236088 -1.04188 -0.34921
+       vertex -0.145943 -1.03046 -0.348379
+       vertex -0.143926 -1.03923 -0.237353
+    endloop
+  endfacet
+  facet normal 0.125508 -0.988869 -0.0799092
+    outer loop
+       vertex -0.236088 -1.04188 -0.34921
+       vertex -0.143926 -1.03923 -0.237353
+       vertex -0.23507 -1.05075 -0.237864
+    endloop
+  endfacet
+  facet normal 0.125589 -0.991081 -0.0445664
+    outer loop
+       vertex -0.23507 -1.05075 -0.237864
+       vertex -0.143926 -1.03923 -0.237353
+       vertex -0.142408 -1.04414 -0.123858
+    endloop
+  endfacet
+  facet normal 0.124974 -0.991181 -0.0440603
+    outer loop
+       vertex -0.23507 -1.05075 -0.237864
+       vertex -0.142408 -1.04414 -0.123858
+       vertex -0.234296 -1.05571 -0.124123
+    endloop
+  endfacet
+  facet normal 0.124991 -0.992116 -0.00909585
+    outer loop
+       vertex -0.234296 -1.05571 -0.124123
+       vertex -0.142408 -1.04414 -0.123858
+       vertex -0.14126 -1.04504 -0.00919506
+    endloop
+  endfacet
+  facet normal 0.12414 -0.992229 -0.00839684
+    outer loop
+       vertex -0.234296 -1.05571 -0.124123
+       vertex -0.14126 -1.04504 -0.00919506
+       vertex -0.233698 -1.05661 -0.00926336
+    endloop
+  endfacet
+  facet normal 0.124073 -0.991903 0.027113
+    outer loop
+       vertex -0.233698 -1.05661 -0.00926336
+       vertex -0.14126 -1.04504 -0.00919506
+       vertex -0.140353 -1.0418 0.105336
+    endloop
+  endfacet
+  facet normal 0.122824 -0.992029 0.0281465
+    outer loop
+       vertex -0.233698 -1.05661 -0.00926336
+       vertex -0.140353 -1.0418 0.105336
+       vertex -0.233207 -1.05329 0.105437
+    endloop
+  endfacet
+  facet normal 0.122211 -0.986356 0.110303
+    outer loop
+       vertex -0.233207 -1.05329 0.105437
+       vertex -0.140353 -1.0418 0.105336
+       vertex -0.139201 -1.02959 0.213278
+    endloop
+  endfacet
+  facet normal 0.119603 -0.986417 0.11259
+    outer loop
+       vertex -0.233207 -1.05329 0.105437
+       vertex -0.139201 -1.02959 0.213278
+       vertex -0.232594 -1.04088 0.213522
+    endloop
+  endfacet
+  facet normal 0.116607 -0.958457 0.260313
+    outer loop
+       vertex -0.232594 -1.04088 0.213522
+       vertex -0.139201 -1.02959 0.213278
+       vertex -0.137317 -1.00358 0.308176
+    endloop
+  endfacet
+  facet normal 0.11179 -0.957776 0.264893
+    outer loop
+       vertex -0.232594 -1.04088 0.213522
+       vertex -0.137317 -1.00358 0.308176
+       vertex -0.231629 -1.01449 0.308537
+    endloop
+  endfacet
+  facet normal 0.101168 -0.858036 0.503527
+    outer loop
+       vertex -0.231629 -1.01449 0.308537
+       vertex -0.137317 -1.00358 0.308176
+       vertex -0.134214 -0.958971 0.383572
+    endloop
+  endfacet
+  facet normal 0.0939387 -0.854744 0.510478
+    outer loop
+       vertex -0.231629 -1.01449 0.308537
+       vertex -0.134214 -0.958971 0.383572
+       vertex -0.230082 -0.969235 0.384027
+    endloop
+  endfacet
+  facet normal 0.211992 -0.969991 -0.119066
+    outer loop
+       vertex -0.148586 -1.01797 -0.455637
+       vertex -0.0616202 -0.999181 -0.453892
+       vertex -0.0576919 -1.01142 -0.347216
+    endloop
+  endfacet
+  facet normal 0.210893 -0.970346 -0.118123
+    outer loop
+       vertex -0.148586 -1.01797 -0.455637
+       vertex -0.0576919 -1.01142 -0.347216
+       vertex -0.145943 -1.03046 -0.348379
+    endloop
+  endfacet
+  facet normal 0.211207 -0.974038 -0.0815005
+    outer loop
+       vertex -0.145943 -1.03046 -0.348379
+       vertex -0.0576919 -1.01142 -0.347216
+       vertex -0.0547126 -1.02002 -0.23665
+    endloop
+  endfacet
+  facet normal 0.210349 -0.974283 -0.0807775
+    outer loop
+       vertex -0.145943 -1.03046 -0.348379
+       vertex -0.0547126 -1.02002 -0.23665
+       vertex -0.143926 -1.03923 -0.237353
+    endloop
+  endfacet
+  facet normal 0.210553 -0.976505 -0.0458901
+    outer loop
+       vertex -0.143926 -1.03923 -0.237353
+       vertex -0.0547126 -1.02002 -0.23665
+       vertex -0.0525087 -1.02486 -0.123539
+    endloop
+  endfacet
+  facet normal 0.209571 -0.976754 -0.0450699
+    outer loop
+       vertex -0.143926 -1.03923 -0.237353
+       vertex -0.0525087 -1.02486 -0.123539
+       vertex -0.142408 -1.04414 -0.123858
+    endloop
+  endfacet
+  facet normal 0.209655 -0.977714 -0.0109858
+    outer loop
+       vertex -0.142408 -1.04414 -0.123858
+       vertex -0.0525087 -1.02486 -0.123539
+       vertex -0.0509067 -1.0258 -0.00922753
+    endloop
+  endfacet
+  facet normal 0.208255 -0.978025 -0.00981825
+    outer loop
+       vertex -0.142408 -1.04414 -0.123858
+       vertex -0.0509067 -1.0258 -0.00922753
+       vertex -0.14126 -1.04504 -0.00919506
+    endloop
+  endfacet
+  facet normal 0.208215 -0.97778 0.0243501
+    outer loop
+       vertex -0.14126 -1.04504 -0.00919506
+       vertex -0.0509067 -1.0258 -0.00922753
+       vertex -0.0497334 -1.02271 0.104939
+    endloop
+  endfacet
+  facet normal 0.20616 -0.978171 0.0260742
+    outer loop
+       vertex -0.14126 -1.04504 -0.00919506
+       vertex -0.0497334 -1.02271 0.104939
+       vertex -0.140353 -1.0418 0.105336
+    endloop
+  endfacet
+  facet normal 0.205438 -0.973116 0.104119
+    outer loop
+       vertex -0.140353 -1.0418 0.105336
+       vertex -0.0497334 -1.02271 0.104939
+       vertex -0.0481903 -1.01087 0.212524
+    endloop
+  endfacet
+  facet normal 0.201066 -0.973604 0.108019
+    outer loop
+       vertex -0.140353 -1.0418 0.105336
+       vertex -0.0481903 -1.01087 0.212524
+       vertex -0.139201 -1.02959 0.213278
+    endloop
+  endfacet
+  facet normal 0.197066 -0.948502 0.248009
+    outer loop
+       vertex -0.139201 -1.02959 0.213278
+       vertex -0.0481903 -1.01087 0.212524
+       vertex -0.0454792 -0.985583 0.307092
+    endloop
+  endfacet
+  facet normal 0.188827 -0.948048 0.256027
+    outer loop
+       vertex -0.139201 -1.02959 0.213278
+       vertex -0.0454792 -0.985583 0.307092
+       vertex -0.137317 -1.00358 0.308176
+    endloop
+  endfacet
+  facet normal 0.173703 -0.857086 0.485005
+    outer loop
+       vertex -0.137317 -1.00358 0.308176
+       vertex -0.0454792 -0.985583 0.307092
+       vertex -0.0408019 -0.942129 0.382207
+    endloop
+  endfacet
+  facet normal 0.160939 -0.852302 0.497675
+    outer loop
+       vertex -0.137317 -1.00358 0.308176
+       vertex -0.0408019 -0.942129 0.382207
+       vertex -0.134214 -0.958971 0.383572
+    endloop
+  endfacet
+  facet normal 0.298598 -0.946716 -0.120701
+    outer loop
+       vertex -0.0616202 -0.999181 -0.453892
+       vertex 0.0225498 -0.972888 -0.451898
+       vertex 0.0277183 -0.984773 -0.345887
+    endloop
+  endfacet
+  facet normal 0.297354 -0.947247 -0.1196
+    outer loop
+       vertex -0.0616202 -0.999181 -0.453892
+       vertex 0.0277183 -0.984773 -0.345887
+       vertex -0.0576919 -1.01142 -0.347216
+    endloop
+  endfacet
+  facet normal 0.297946 -0.950974 -0.0829249
+    outer loop
+       vertex -0.0576919 -1.01142 -0.347216
+       vertex 0.0277183 -0.984773 -0.345887
+       vertex 0.0316055 -0.993149 -0.235868
+    endloop
+  endfacet
+  facet normal 0.296931 -0.951368 -0.0820461
+    outer loop
+       vertex -0.0576919 -1.01142 -0.347216
+       vertex 0.0316055 -0.993149 -0.235868
+       vertex -0.0547126 -1.02002 -0.23665
+    endloop
+  endfacet
+  facet normal 0.297311 -0.953592 -0.0476359
+    outer loop
+       vertex -0.0547126 -1.02002 -0.23665
+       vertex 0.0316055 -0.993149 -0.235868
+       vertex 0.0344069 -0.997901 -0.123256
+    endloop
+  endfacet
+  facet normal 0.296093 -0.954022 -0.0465947
+    outer loop
+       vertex -0.0547126 -1.02002 -0.23665
+       vertex 0.0344069 -0.997901 -0.123256
+       vertex -0.0525087 -1.02486 -0.123539
+    endloop
+  endfacet
+  facet normal 0.29629 -0.955003 -0.0134867
+    outer loop
+       vertex -0.0525087 -1.02486 -0.123539
+       vertex 0.0344069 -0.997901 -0.123256
+       vertex 0.036318 -0.998915 -0.00947047
+    endloop
+  endfacet
+  facet normal 0.294536 -0.955565 -0.011993
+    outer loop
+       vertex -0.0525087 -1.02486 -0.123539
+       vertex 0.036318 -0.998915 -0.00947047
+       vertex -0.0509067 -1.0258 -0.00922753
+    endloop
+  endfacet
+  facet normal 0.294577 -0.955403 0.0207241
+    outer loop
+       vertex -0.0509067 -1.0258 -0.00922753
+       vertex 0.036318 -0.998915 -0.00947047
+       vertex 0.0375341 -0.996077 0.104073
+    endloop
+  endfacet
+  facet normal 0.292032 -0.956134 0.0229022
+    outer loop
+       vertex -0.0509067 -1.0258 -0.00922753
+       vertex 0.0375341 -0.996077 0.104073
+       vertex -0.0497334 -1.02271 0.104939
+    endloop
+  endfacet
+  facet normal 0.291435 -0.951819 0.0954246
+    outer loop
+       vertex -0.0497334 -1.02271 0.104939
+       vertex 0.0375341 -0.996077 0.104073
+       vertex 0.0392465 -0.984833 0.210997
+    endloop
+  endfacet
+  facet normal 0.285594 -0.953039 0.10076
+    outer loop
+       vertex -0.0497334 -1.02271 0.104939
+       vertex 0.0392465 -0.984833 0.210997
+       vertex -0.0481903 -1.01087 0.212524
+    endloop
+  endfacet
+  facet normal 0.281472 -0.931625 0.229887
+    outer loop
+       vertex -0.0481903 -1.01087 0.212524
+       vertex 0.0392465 -0.984833 0.210997
+       vertex 0.0426461 -0.960629 0.304924
+    endloop
+  endfacet
+  facet normal 0.269887 -0.932106 0.241537
+    outer loop
+       vertex -0.0481903 -1.01087 0.212524
+       vertex 0.0426461 -0.960629 0.304924
+       vertex -0.0454792 -0.985583 0.307092
+    endloop
+  endfacet
+  facet normal 0.25283 -0.853223 0.456167
+    outer loop
+       vertex -0.0454792 -0.985583 0.307092
+       vertex 0.0426461 -0.960629 0.304924
+       vertex 0.0489241 -0.91891 0.379476
+    endloop
+  endfacet
+  facet normal 0.233888 -0.847829 0.475902
+    outer loop
+       vertex -0.0454792 -0.985583 0.307092
+       vertex 0.0489241 -0.91891 0.379476
+       vertex -0.0408019 -0.942129 0.382207
+    endloop
+  endfacet
+  facet normal 0.386896 -0.913954 -0.122471
+    outer loop
+       vertex 0.0225498 -0.972888 -0.451898
+       vertex 0.102992 -0.939102 -0.449905
+       vertex 0.109341 -0.950531 -0.344558
+    endloop
+  endfacet
+  facet normal 0.385678 -0.914619 -0.121347
+    outer loop
+       vertex 0.0225498 -0.972888 -0.451898
+       vertex 0.109341 -0.950531 -0.344558
+       vertex 0.0277183 -0.984773 -0.345887
+    endloop
+  endfacet
+  facet normal 0.386643 -0.918351 -0.0844947
+    outer loop
+       vertex 0.0277183 -0.984773 -0.345887
+       vertex 0.109341 -0.950531 -0.344558
+       vertex 0.114063 -0.958612 -0.235117
+    endloop
+  endfacet
+  facet normal 0.385623 -0.918863 -0.0835781
+    outer loop
+       vertex 0.0277183 -0.984773 -0.345887
+       vertex 0.114063 -0.958612 -0.235117
+       vertex 0.0316055 -0.993149 -0.235868
+    endloop
+  endfacet
+  facet normal 0.386236 -0.921067 -0.0495636
+    outer loop
+       vertex 0.0316055 -0.993149 -0.235868
+       vertex 0.114063 -0.958612 -0.235117
+       vertex 0.117344 -0.963264 -0.123102
+    endloop
+  endfacet
+  facet normal 0.384997 -0.921644 -0.0484691
+    outer loop
+       vertex 0.0316055 -0.993149 -0.235868
+       vertex 0.117344 -0.963264 -0.123102
+       vertex 0.0344069 -0.997901 -0.123256
+    endloop
+  endfacet
+  facet normal 0.385349 -0.922629 -0.0162111
+    outer loop
+       vertex 0.0344069 -0.997901 -0.123256
+       vertex 0.117344 -0.963264 -0.123102
+       vertex 0.119372 -0.964404 -0.0100336
+    endloop
+  endfacet
+  facet normal 0.383595 -0.923385 -0.0146712
+    outer loop
+       vertex 0.0344069 -0.997901 -0.123256
+       vertex 0.119372 -0.964404 -0.0100336
+       vertex 0.036318 -0.998915 -0.00947047
+    endloop
+  endfacet
+  facet normal 0.383764 -0.923278 0.0168492
+    outer loop
+       vertex 0.036318 -0.998915 -0.00947047
+       vertex 0.119372 -0.964404 -0.0100336
+       vertex 0.120332 -0.96195 0.102567
+    endloop
+  endfacet
+  facet normal 0.381303 -0.924254 0.0190166
+    outer loop
+       vertex 0.036318 -0.998915 -0.00947047
+       vertex 0.120332 -0.96195 0.102567
+       vertex 0.0375341 -0.996077 0.104073
+    endloop
+  endfacet
+  facet normal 0.381023 -0.920675 0.0847282
+    outer loop
+       vertex 0.0375341 -0.996077 0.104073
+       vertex 0.120332 -0.96195 0.102567
+       vertex 0.121918 -0.95155 0.208436
+    endloop
+  endfacet
+  facet normal 0.374336 -0.922812 0.0910466
+    outer loop
+       vertex 0.0375341 -0.996077 0.104073
+       vertex 0.121918 -0.95155 0.208436
+       vertex 0.0392465 -0.984833 0.210997
+    endloop
+  endfacet
+  facet normal 0.370952 -0.905583 0.205706
+    outer loop
+       vertex 0.0392465 -0.984833 0.210997
+       vertex 0.121918 -0.95155 0.208436
+       vertex 0.125822 -0.928855 0.30131
+    endloop
+  endfacet
+  facet normal 0.356398 -0.907812 0.221038
+    outer loop
+       vertex 0.0392465 -0.984833 0.210997
+       vertex 0.125822 -0.928855 0.30131
+       vertex 0.0426461 -0.960629 0.304924
+    endloop
+  endfacet
+  facet normal 0.340423 -0.843993 0.414473
+    outer loop
+       vertex 0.0426461 -0.960629 0.304924
+       vertex 0.125822 -0.928855 0.30131
+       vertex 0.133736 -0.889511 0.374925
+    endloop
+  endfacet
+  facet normal 0.314732 -0.839358 0.443195
+    outer loop
+       vertex 0.0426461 -0.960629 0.304924
+       vertex 0.133736 -0.889511 0.374925
+       vertex 0.0489241 -0.91891 0.379476
+    endloop
+  endfacet
+  facet normal 0.476759 -0.870222 -0.124156
+    outer loop
+       vertex 0.102992 -0.939102 -0.449905
+       vertex 0.178773 -0.897833 -0.44816
+       vertex 0.186229 -0.908696 -0.343395
+    endloop
+  endfacet
+  facet normal 0.475738 -0.870923 -0.123158
+    outer loop
+       vertex 0.102992 -0.939102 -0.449905
+       vertex 0.186229 -0.908696 -0.343395
+       vertex 0.109341 -0.950531 -0.344558
+    endloop
+  endfacet
+  facet normal 0.477172 -0.874593 -0.0859823
+    outer loop
+       vertex 0.109341 -0.950531 -0.344558
+       vertex 0.186229 -0.908696 -0.343395
+       vertex 0.19171 -0.916413 -0.234478
+    endloop
+  endfacet
+  facet normal 0.476317 -0.875139 -0.0851729
+    outer loop
+       vertex 0.109341 -0.950531 -0.344558
+       vertex 0.19171 -0.916413 -0.234478
+       vertex 0.114063 -0.958612 -0.235117
+    endloop
+  endfacet
+  facet normal 0.477207 -0.877289 -0.0513491
+    outer loop
+       vertex 0.114063 -0.958612 -0.235117
+       vertex 0.19171 -0.916413 -0.234478
+       vertex 0.195372 -0.920944 -0.123039
+    endloop
+  endfacet
+  facet normal 0.476189 -0.877897 -0.050406
+    outer loop
+       vertex 0.114063 -0.958612 -0.235117
+       vertex 0.195372 -0.920944 -0.123039
+       vertex 0.117344 -0.963264 -0.123102
+    endloop
+  endfacet
+  facet normal 0.476692 -0.878872 -0.0186722
+    outer loop
+       vertex 0.117344 -0.963264 -0.123102
+       vertex 0.195372 -0.920944 -0.123039
+       vertex 0.197369 -0.922247 -0.0107065
+    endloop
+  endfacet
+  facet normal 0.475293 -0.879655 -0.0173907
+    outer loop
+       vertex 0.117344 -0.963264 -0.123102
+       vertex 0.197369 -0.922247 -0.0107065
+       vertex 0.119372 -0.964404 -0.0100336
+    endloop
+  endfacet
+  facet normal 0.475528 -0.879598 0.0134135
+    outer loop
+       vertex 0.119372 -0.964404 -0.0100336
+       vertex 0.197369 -0.922247 -0.0107065
+       vertex 0.197857 -0.920281 0.100889
+    endloop
+  endfacet
+  facet normal 0.47363 -0.880594 0.0151525
+    outer loop
+       vertex 0.119372 -0.964404 -0.0100336
+       vertex 0.197857 -0.920281 0.100889
+       vertex 0.120332 -0.96195 0.102567
+    endloop
+  endfacet
+  facet normal 0.4734 -0.877855 0.0725464
+    outer loop
+       vertex 0.120332 -0.96195 0.102567
+       vertex 0.197857 -0.920281 0.100889
+       vertex 0.198576 -0.911291 0.204991
+    endloop
+  endfacet
+  facet normal 0.466288 -0.881048 0.0795586
+    outer loop
+       vertex 0.120332 -0.96195 0.102567
+       vertex 0.198576 -0.911291 0.204991
+       vertex 0.121918 -0.95155 0.208436
+    endloop
+  endfacet
+  facet normal 0.463838 -0.868032 0.177128
+    outer loop
+       vertex 0.121918 -0.95155 0.208436
+       vertex 0.198576 -0.911291 0.204991
+       vertex 0.201262 -0.891521 0.294843
+    endloop
+  endfacet
+  facet normal 0.448417 -0.872439 0.19435
+    outer loop
+       vertex 0.121918 -0.95155 0.208436
+       vertex 0.201262 -0.891521 0.294843
+       vertex 0.125822 -0.928855 0.30131
+    endloop
+  endfacet
+  facet normal 0.438232 -0.822864 0.36173
+    outer loop
+       vertex 0.125822 -0.928855 0.30131
+       vertex 0.201262 -0.891521 0.294843
+       vertex 0.209402 -0.856237 0.365244
+    endloop
+  endfacet
+  facet normal 0.411709 -0.821391 0.39473
+    outer loop
+       vertex 0.125822 -0.928855 0.30131
+       vertex 0.209402 -0.856237 0.365244
+       vertex 0.133736 -0.889511 0.374925
+    endloop
+  endfacet
+  facet normal 0.567392 -0.81383 -0.12549
+    outer loop
+       vertex 0.178773 -0.897833 -0.44816
+       vertex 0.248962 -0.849091 -0.446914
+       vertex 0.257436 -0.859273 -0.342564
+    endloop
+  endfacet
+  facet normal 0.566713 -0.814413 -0.124772
+    outer loop
+       vertex 0.178773 -0.897833 -0.44816
+       vertex 0.257436 -0.859273 -0.342564
+       vertex 0.186229 -0.908696 -0.343395
+    endloop
+  endfacet
+  facet normal 0.568704 -0.817913 -0.087144
+    outer loop
+       vertex 0.186229 -0.908696 -0.343395
+       vertex 0.257436 -0.859273 -0.342564
+       vertex 0.263598 -0.866552 -0.234031
+    endloop
+  endfacet
+  facet normal 0.568145 -0.818362 -0.0865761
+    outer loop
+       vertex 0.186229 -0.908696 -0.343395
+       vertex 0.263598 -0.866552 -0.234031
+       vertex 0.19171 -0.916413 -0.234478
+    endloop
+  endfacet
+  facet normal 0.569351 -0.820404 -0.0526919
+    outer loop
+       vertex 0.19171 -0.916413 -0.234478
+       vertex 0.263598 -0.866552 -0.234031
+       vertex 0.267558 -0.870934 -0.12303
+    endloop
+  endfacet
+  facet normal 0.568715 -0.820886 -0.0520624
+    outer loop
+       vertex 0.19171 -0.916413 -0.234478
+       vertex 0.267558 -0.870934 -0.12303
+       vertex 0.195372 -0.920944 -0.123039
+    endloop
+  endfacet
+  facet normal 0.569365 -0.82183 -0.0204614
+    outer loop
+       vertex 0.195372 -0.920944 -0.123039
+       vertex 0.267558 -0.870934 -0.12303
+       vertex 0.269424 -0.872423 -0.0112786
+    endloop
+  endfacet
+  facet normal 0.568532 -0.822426 -0.0196503
+    outer loop
+       vertex 0.195372 -0.920944 -0.123039
+       vertex 0.269424 -0.872423 -0.0112786
+       vertex 0.197369 -0.922247 -0.0107065
+    endloop
+  endfacet
+  facet normal 0.568772 -0.822422 0.0109735
+    outer loop
+       vertex 0.197369 -0.922247 -0.0107065
+       vertex 0.269424 -0.872423 -0.0112786
+       vertex 0.269308 -0.871025 0.0995073
+    endloop
+  endfacet
+  facet normal 0.567695 -0.823152 0.0120158
+    outer loop
+       vertex 0.197369 -0.922247 -0.0107065
+       vertex 0.269308 -0.871025 0.0995073
+       vertex 0.197857 -0.920281 0.100889
+    endloop
+  endfacet
+  facet normal 0.567302 -0.821185 0.0618331
+    outer loop
+       vertex 0.197857 -0.920281 0.100889
+       vertex 0.269308 -0.871025 0.0995073
+       vertex 0.267972 -0.86432 0.20081
+    endloop
+  endfacet
+  facet normal 0.562032 -0.824372 0.067316
+    outer loop
+       vertex 0.197857 -0.920281 0.100889
+       vertex 0.267972 -0.86432 0.20081
+       vertex 0.198576 -0.911291 0.204991
+    endloop
+  endfacet
+  facet normal 0.560226 -0.81407 0.153093
+    outer loop
+       vertex 0.198576 -0.911291 0.204991
+       vertex 0.267972 -0.86432 0.20081
+       vertex 0.266183 -0.849885 0.284113
+    endloop
+  endfacet
+  facet normal 0.551584 -0.817942 0.163483
+    outer loop
+       vertex 0.198576 -0.911291 0.204991
+       vertex 0.266183 -0.849885 0.284113
+       vertex 0.201262 -0.891521 0.294843
+    endloop
+  endfacet
+  facet normal 0.549389 -0.778322 0.303951
+    outer loop
+       vertex 0.201262 -0.891521 0.294843
+       vertex 0.266183 -0.849885 0.284113
+       vertex 0.271691 -0.821389 0.347126
+    endloop
+  endfacet
+  facet normal 0.532151 -0.779957 0.329367
+    outer loop
+       vertex 0.201262 -0.891521 0.294843
+       vertex 0.271691 -0.821389 0.347126
+       vertex 0.209402 -0.856237 0.365244
+    endloop
+  endfacet
+  facet normal 0.657109 -0.743161 -0.126172
+    outer loop
+       vertex 0.248962 -0.849091 -0.446914
+       vertex 0.312627 -0.792882 -0.446415
+       vertex 0.322015 -0.80227 -0.342232
+    endloop
+  endfacet
+  facet normal 0.656867 -0.743424 -0.125886
+    outer loop
+       vertex 0.248962 -0.849091 -0.446914
+       vertex 0.322015 -0.80227 -0.342232
+       vertex 0.257436 -0.859273 -0.342564
+    endloop
+  endfacet
+  facet normal 0.659469 -0.746594 -0.0877318
+    outer loop
+       vertex 0.257436 -0.859273 -0.342564
+       vertex 0.322015 -0.80227 -0.342232
+       vertex 0.328777 -0.809032 -0.233855
+    endloop
+  endfacet
+  facet normal 0.659278 -0.746789 -0.0875162
+    outer loop
+       vertex 0.257436 -0.859273 -0.342564
+       vertex 0.328777 -0.809032 -0.233855
+       vertex 0.263598 -0.866552 -0.234031
+    endloop
+  endfacet
+  facet normal 0.660823 -0.748644 -0.0533397
+    outer loop
+       vertex 0.263598 -0.866552 -0.234031
+       vertex 0.328777 -0.809032 -0.233855
+       vertex 0.33297 -0.813226 -0.123039
+    endloop
+  endfacet
+  facet normal 0.660623 -0.748836 -0.053123
+    outer loop
+       vertex 0.263598 -0.866552 -0.234031
+       vertex 0.33297 -0.813226 -0.123039
+       vertex 0.267558 -0.870934 -0.12303
+    endloop
+  endfacet
+  facet normal 0.66141 -0.749722 -0.0212866
+    outer loop
+       vertex 0.267558 -0.870934 -0.12303
+       vertex 0.33297 -0.813226 -0.123039
+       vertex 0.334652 -0.814908 -0.0115394
+    endloop
+  endfacet
+  facet normal 0.661175 -0.749937 -0.0210371
+    outer loop
+       vertex 0.267558 -0.870934 -0.12303
+       vertex 0.334652 -0.814908 -0.0115394
+       vertex 0.269424 -0.872423 -0.0112786
+    endloop
+  endfacet
+  facet normal 0.661358 -0.750005 0.00988015
+    outer loop
+       vertex 0.269424 -0.872423 -0.0112786
+       vertex 0.334652 -0.814908 -0.0115394
+       vertex 0.333879 -0.814135 0.0988907
+    endloop
+  endfacet
+  facet normal 0.66109 -0.750238 0.0101604
+    outer loop
+       vertex 0.269424 -0.872423 -0.0112786
+       vertex 0.333879 -0.814135 0.0988907
+       vertex 0.269308 -0.871025 0.0995073
+    endloop
+  endfacet
+  facet normal 0.660314 -0.748855 0.0565841
+    outer loop
+       vertex 0.269308 -0.871025 0.0995073
+       vertex 0.333879 -0.814135 0.0988907
+       vertex 0.329878 -0.810133 0.198536
+    endloop
+  endfacet
+  facet normal 0.658724 -0.75012 0.0583344
+    outer loop
+       vertex 0.269308 -0.871025 0.0995073
+       vertex 0.329878 -0.810133 0.198536
+       vertex 0.267972 -0.86432 0.20081
+    endloop
+  endfacet
+  facet normal 0.65496 -0.742338 0.141286
+    outer loop
+       vertex 0.267972 -0.86432 0.20081
+       vertex 0.329878 -0.810133 0.198536
+       vertex 0.321875 -0.802131 0.277683
+    endloop
+  endfacet
+  facet normal 0.653715 -0.743143 0.142811
+    outer loop
+       vertex 0.267972 -0.86432 0.20081
+       vertex 0.321875 -0.802131 0.277683
+       vertex 0.266183 -0.849885 0.284113
+    endloop
+  endfacet
+  facet normal 0.644468 -0.715155 0.270582
+    outer loop
+       vertex 0.266183 -0.849885 0.284113
+       vertex 0.321875 -0.802131 0.277683
+       vertex 0.312305 -0.79256 0.325773
+    endloop
+  endfacet
+  facet normal 0.647131 -0.714299 0.266456
+    outer loop
+       vertex 0.266183 -0.849885 0.284113
+       vertex 0.312305 -0.79256 0.325773
+       vertex 0.271691 -0.821389 0.347126
+    endloop
+  endfacet
+  facet normal -0.0419438 -0.992289 -0.11663
+    outer loop
+       vertex -0.327179 -1.03302 -0.457381
+       vertex -0.327179 -1.04569 -0.349542
+       vertex -0.418271 -1.04188 -0.34921
+    endloop
+  endfacet
+  facet normal -0.0422546 -0.992246 -0.116889
+    outer loop
+       vertex -0.327179 -1.03302 -0.457381
+       vertex -0.418271 -1.04188 -0.34921
+       vertex -0.416941 -1.02926 -0.456883
+    endloop
+  endfacet
+  facet normal -0.125965 -0.985101 -0.117084
+    outer loop
+       vertex -0.416941 -1.02926 -0.456883
+       vertex -0.418271 -1.04188 -0.34921
+       vertex -0.508415 -1.03046 -0.348379
+    endloop
+  endfacet
+  facet normal -0.126752 -0.984921 -0.117745
+    outer loop
+       vertex -0.416941 -1.02926 -0.456883
+       vertex -0.508415 -1.03046 -0.348379
+       vertex -0.505772 -1.01797 -0.455637
+    endloop
+  endfacet
+  facet normal -0.210893 -0.970346 -0.118123
+    outer loop
+       vertex -0.505772 -1.01797 -0.455637
+       vertex -0.508415 -1.03046 -0.348379
+       vertex -0.596666 -1.01142 -0.347216
+    endloop
+  endfacet
+  facet normal -0.211992 -0.969991 -0.119066
+    outer loop
+       vertex -0.505772 -1.01797 -0.455637
+       vertex -0.596666 -1.01142 -0.347216
+       vertex -0.592738 -0.999181 -0.453892
+    endloop
+  endfacet
+  facet normal -0.297354 -0.947247 -0.119601
+    outer loop
+       vertex -0.592738 -0.999181 -0.453892
+       vertex -0.596666 -1.01142 -0.347216
+       vertex -0.682077 -0.984773 -0.345887
+    endloop
+  endfacet
+  facet normal -0.298599 -0.946715 -0.120702
+    outer loop
+       vertex -0.592738 -0.999181 -0.453892
+       vertex -0.682077 -0.984773 -0.345887
+       vertex -0.676908 -0.972887 -0.451898
+    endloop
+  endfacet
+  facet normal -0.385678 -0.914619 -0.121348
+    outer loop
+       vertex -0.676908 -0.972887 -0.451898
+       vertex -0.682077 -0.984773 -0.345887
+       vertex -0.763699 -0.950531 -0.344558
+    endloop
+  endfacet
+  facet normal -0.386896 -0.913954 -0.122472
+    outer loop
+       vertex -0.676908 -0.972887 -0.451898
+       vertex -0.763699 -0.950531 -0.344558
+       vertex -0.75735 -0.939102 -0.449905
+    endloop
+  endfacet
+  facet normal -0.475738 -0.870922 -0.123158
+    outer loop
+       vertex -0.75735 -0.939102 -0.449905
+       vertex -0.763699 -0.950531 -0.344558
+       vertex -0.840587 -0.908695 -0.343395
+    endloop
+  endfacet
+  facet normal -0.476759 -0.870222 -0.124156
+    outer loop
+       vertex -0.75735 -0.939102 -0.449905
+       vertex -0.840587 -0.908695 -0.343395
+       vertex -0.833131 -0.897833 -0.44816
+    endloop
+  endfacet
+  facet normal -0.566714 -0.814413 -0.124771
+    outer loop
+       vertex -0.833131 -0.897833 -0.44816
+       vertex -0.840587 -0.908695 -0.343395
+       vertex -0.911794 -0.859273 -0.342564
+    endloop
+  endfacet
+  facet normal -0.567392 -0.813829 -0.12549
+    outer loop
+       vertex -0.833131 -0.897833 -0.44816
+       vertex -0.911794 -0.859273 -0.342564
+       vertex -0.90332 -0.84909 -0.446914
+    endloop
+  endfacet
+  facet normal -0.656867 -0.743424 -0.125886
+    outer loop
+       vertex -0.90332 -0.84909 -0.446914
+       vertex -0.911794 -0.859273 -0.342564
+       vertex -0.976373 -0.802269 -0.342232
+    endloop
+  endfacet
+  facet normal -0.657109 -0.743161 -0.126173
+    outer loop
+       vertex -0.90332 -0.84909 -0.446914
+       vertex -0.976373 -0.802269 -0.342232
+       vertex -0.966985 -0.792882 -0.446415
+    endloop
+  endfacet
+  facet normal -0.0417492 -0.995958 -0.0795333
+    outer loop
+       vertex -0.327179 -1.04569 -0.349542
+       vertex -0.327179 -1.0546 -0.238072
+       vertex -0.419288 -1.05075 -0.237864
+    endloop
+  endfacet
+  facet normal -0.0419616 -0.995935 -0.0797075
+    outer loop
+       vertex -0.327179 -1.04569 -0.349542
+       vertex -0.419288 -1.05075 -0.237864
+       vertex -0.418271 -1.04188 -0.34921
+    endloop
+  endfacet
+  facet normal -0.125509 -0.988869 -0.0799082
+    outer loop
+       vertex -0.418271 -1.04188 -0.34921
+       vertex -0.419288 -1.05075 -0.237864
+       vertex -0.510432 -1.03923 -0.237353
+    endloop
+  endfacet
+  facet normal -0.126091 -0.988756 -0.0803903
+    outer loop
+       vertex -0.418271 -1.04188 -0.34921
+       vertex -0.510432 -1.03923 -0.237353
+       vertex -0.508415 -1.03046 -0.348379
+    endloop
+  endfacet
+  facet normal -0.210349 -0.974283 -0.0807777
+    outer loop
+       vertex -0.508415 -1.03046 -0.348379
+       vertex -0.510432 -1.03923 -0.237353
+       vertex -0.599646 -1.02002 -0.23665
+    endloop
+  endfacet
+  facet normal -0.211207 -0.974038 -0.0815007
+    outer loop
+       vertex -0.508415 -1.03046 -0.348379
+       vertex -0.599646 -1.02002 -0.23665
+       vertex -0.596666 -1.01142 -0.347216
+    endloop
+  endfacet
+  facet normal -0.296931 -0.951368 -0.0820463
+    outer loop
+       vertex -0.596666 -1.01142 -0.347216
+       vertex -0.599646 -1.02002 -0.23665
+       vertex -0.685964 -0.993149 -0.235868
+    endloop
+  endfacet
+  facet normal -0.297946 -0.950974 -0.0829249
+    outer loop
+       vertex -0.596666 -1.01142 -0.347216
+       vertex -0.685964 -0.993149 -0.235868
+       vertex -0.682077 -0.984773 -0.345887
+    endloop
+  endfacet
+  facet normal -0.385623 -0.918863 -0.0835781
+    outer loop
+       vertex -0.682077 -0.984773 -0.345887
+       vertex -0.685964 -0.993149 -0.235868
+       vertex -0.768421 -0.958612 -0.235117
+    endloop
+  endfacet
+  facet normal -0.386643 -0.918351 -0.0844943
+    outer loop
+       vertex -0.682077 -0.984773 -0.345887
+       vertex -0.768421 -0.958612 -0.235117
+       vertex -0.763699 -0.950531 -0.344558
+    endloop
+  endfacet
+  facet normal -0.476318 -0.875138 -0.0851726
+    outer loop
+       vertex -0.763699 -0.950531 -0.344558
+       vertex -0.768421 -0.958612 -0.235117
+       vertex -0.846068 -0.916412 -0.234478
+    endloop
+  endfacet
+  facet normal -0.477173 -0.874593 -0.0859817
+    outer loop
+       vertex -0.763699 -0.950531 -0.344558
+       vertex -0.846068 -0.916412 -0.234478
+       vertex -0.840587 -0.908695 -0.343395
+    endloop
+  endfacet
+  facet normal -0.568145 -0.818362 -0.0865755
+    outer loop
+       vertex -0.840587 -0.908695 -0.343395
+       vertex -0.846068 -0.916412 -0.234478
+       vertex -0.917956 -0.866552 -0.234031
+    endloop
+  endfacet
+  facet normal -0.568704 -0.817913 -0.0871437
+    outer loop
+       vertex -0.840587 -0.908695 -0.343395
+       vertex -0.917956 -0.866552 -0.234031
+       vertex -0.911794 -0.859273 -0.342564
+    endloop
+  endfacet
+  facet normal -0.659278 -0.746789 -0.087516
+    outer loop
+       vertex -0.911794 -0.859273 -0.342564
+       vertex -0.917956 -0.866552 -0.234031
+       vertex -0.983135 -0.809032 -0.233855
+    endloop
+  endfacet
+  facet normal -0.659469 -0.746594 -0.0877318
+    outer loop
+       vertex -0.911794 -0.859273 -0.342564
+       vertex -0.983135 -0.809032 -0.233855
+       vertex -0.976373 -0.802269 -0.342232
+    endloop
+  endfacet
+  facet normal -0.041561 -0.998183 -0.043635
+    outer loop
+       vertex -0.327179 -1.0546 -0.238072
+       vertex -0.327179 -1.05957 -0.124242
+       vertex -0.420062 -1.05571 -0.124123
+    endloop
+  endfacet
+  facet normal -0.0417608 -0.998167 -0.0437977
+    outer loop
+       vertex -0.327179 -1.0546 -0.238072
+       vertex -0.420062 -1.05571 -0.124123
+       vertex -0.419288 -1.05075 -0.237864
+    endloop
+  endfacet
+  facet normal -0.124974 -0.991181 -0.0440594
+    outer loop
+       vertex -0.419288 -1.05075 -0.237864
+       vertex -0.420062 -1.05571 -0.124123
+       vertex -0.51195 -1.04414 -0.123858
+    endloop
+  endfacet
+  facet normal -0.12559 -0.991081 -0.0445664
+    outer loop
+       vertex -0.419288 -1.05075 -0.237864
+       vertex -0.51195 -1.04414 -0.123858
+       vertex -0.510432 -1.03923 -0.237353
+    endloop
+  endfacet
+  facet normal -0.209571 -0.976754 -0.0450699
+    outer loop
+       vertex -0.510432 -1.03923 -0.237353
+       vertex -0.51195 -1.04414 -0.123858
+       vertex -0.60185 -1.02486 -0.123539
+    endloop
+  endfacet
+  facet normal -0.210553 -0.976505 -0.0458901
+    outer loop
+       vertex -0.510432 -1.03923 -0.237353
+       vertex -0.60185 -1.02486 -0.123539
+       vertex -0.599646 -1.02002 -0.23665
+    endloop
+  endfacet
+  facet normal -0.296094 -0.954022 -0.0465947
+    outer loop
+       vertex -0.599646 -1.02002 -0.23665
+       vertex -0.60185 -1.02486 -0.123539
+       vertex -0.688765 -0.997901 -0.123256
+    endloop
+  endfacet
+  facet normal -0.297311 -0.953592 -0.0476349
+    outer loop
+       vertex -0.599646 -1.02002 -0.23665
+       vertex -0.688765 -0.997901 -0.123256
+       vertex -0.685964 -0.993149 -0.235868
+    endloop
+  endfacet
+  facet normal -0.384997 -0.921644 -0.0484682
+    outer loop
+       vertex -0.685964 -0.993149 -0.235868
+       vertex -0.688765 -0.997901 -0.123256
+       vertex -0.771703 -0.963264 -0.123102
+    endloop
+  endfacet
+  facet normal -0.386237 -0.921067 -0.0495639
+    outer loop
+       vertex -0.685964 -0.993149 -0.235868
+       vertex -0.771703 -0.963264 -0.123102
+       vertex -0.768421 -0.958612 -0.235117
+    endloop
+  endfacet
+  facet normal -0.476189 -0.877897 -0.0504062
+    outer loop
+       vertex -0.768421 -0.958612 -0.235117
+       vertex -0.771703 -0.963264 -0.123102
+       vertex -0.84973 -0.920943 -0.123039
+    endloop
+  endfacet
+  facet normal -0.477208 -0.877289 -0.0513495
+    outer loop
+       vertex -0.768421 -0.958612 -0.235117
+       vertex -0.84973 -0.920943 -0.123039
+       vertex -0.846068 -0.916412 -0.234478
+    endloop
+  endfacet
+  facet normal -0.568715 -0.820885 -0.0520628
+    outer loop
+       vertex -0.846068 -0.916412 -0.234478
+       vertex -0.84973 -0.920943 -0.123039
+       vertex -0.921916 -0.870933 -0.12303
+    endloop
+  endfacet
+  facet normal -0.569351 -0.820404 -0.0526922
+    outer loop
+       vertex -0.846068 -0.916412 -0.234478
+       vertex -0.921916 -0.870933 -0.12303
+       vertex -0.917956 -0.866552 -0.234031
+    endloop
+  endfacet
+  facet normal -0.660624 -0.748835 -0.0531232
+    outer loop
+       vertex -0.917956 -0.866552 -0.234031
+       vertex -0.921916 -0.870933 -0.12303
+       vertex -0.987329 -0.813225 -0.123039
+    endloop
+  endfacet
+  facet normal -0.660823 -0.748644 -0.0533389
+    outer loop
+       vertex -0.917956 -0.866552 -0.234031
+       vertex -0.987329 -0.813225 -0.123039
+       vertex -0.983135 -0.809032 -0.233855
+    endloop
+  endfacet
+  facet normal -0.0412997 -0.999116 -0.00781459
+    outer loop
+       vertex -0.327179 -1.05957 -0.124242
+       vertex -0.327179 -1.06047 -0.0093227
+       vertex -0.42066 -1.05661 -0.00926336
+    endloop
+  endfacet
+  facet normal -0.0415538 -0.999104 -0.0080215
+    outer loop
+       vertex -0.327179 -1.05957 -0.124242
+       vertex -0.42066 -1.05661 -0.00926336
+       vertex -0.420062 -1.05571 -0.124123
+    endloop
+  endfacet
+  facet normal -0.12414 -0.992229 -0.00839797
+    outer loop
+       vertex -0.420062 -1.05571 -0.124123
+       vertex -0.42066 -1.05661 -0.00926336
+       vertex -0.513099 -1.04504 -0.00919506
+    endloop
+  endfacet
+  facet normal -0.124991 -0.992116 -0.00909693
+    outer loop
+       vertex -0.420062 -1.05571 -0.124123
+       vertex -0.513099 -1.04504 -0.00919506
+       vertex -0.51195 -1.04414 -0.123858
+    endloop
+  endfacet
+  facet normal -0.208256 -0.978025 -0.00981936
+    outer loop
+       vertex -0.51195 -1.04414 -0.123858
+       vertex -0.513099 -1.04504 -0.00919506
+       vertex -0.603452 -1.0258 -0.00922752
+    endloop
+  endfacet
+  facet normal -0.209655 -0.977714 -0.0109858
+    outer loop
+       vertex -0.51195 -1.04414 -0.123858
+       vertex -0.603452 -1.0258 -0.00922752
+       vertex -0.60185 -1.02486 -0.123539
+    endloop
+  endfacet
+  facet normal -0.294536 -0.955565 -0.011993
+    outer loop
+       vertex -0.60185 -1.02486 -0.123539
+       vertex -0.603452 -1.0258 -0.00922752
+       vertex -0.690676 -0.998915 -0.00947047
+    endloop
+  endfacet
+  facet normal -0.296291 -0.955003 -0.0134877
+    outer loop
+       vertex -0.60185 -1.02486 -0.123539
+       vertex -0.690676 -0.998915 -0.00947047
+       vertex -0.688765 -0.997901 -0.123256
+    endloop
+  endfacet
+  facet normal -0.383595 -0.923385 -0.0146722
+    outer loop
+       vertex -0.688765 -0.997901 -0.123256
+       vertex -0.690676 -0.998915 -0.00947047
+       vertex -0.77373 -0.964404 -0.0100336
+    endloop
+  endfacet
+  facet normal -0.385348 -0.922629 -0.0162116
+    outer loop
+       vertex -0.688765 -0.997901 -0.123256
+       vertex -0.77373 -0.964404 -0.0100336
+       vertex -0.771703 -0.963264 -0.123102
+    endloop
+  endfacet
+  facet normal -0.475295 -0.879655 -0.0173912
+    outer loop
+       vertex -0.771703 -0.963264 -0.123102
+       vertex -0.77373 -0.964404 -0.0100336
+       vertex -0.851727 -0.922247 -0.0107065
+    endloop
+  endfacet
+  facet normal -0.476693 -0.878872 -0.0186722
+    outer loop
+       vertex -0.771703 -0.963264 -0.123102
+       vertex -0.851727 -0.922247 -0.0107065
+       vertex -0.84973 -0.920943 -0.123039
+    endloop
+  endfacet
+  facet normal -0.568532 -0.822426 -0.0196503
+    outer loop
+       vertex -0.84973 -0.920943 -0.123039
+       vertex -0.851727 -0.922247 -0.0107065
+       vertex -0.923783 -0.872422 -0.0112786
+    endloop
+  endfacet
+  facet normal -0.569366 -0.82183 -0.0204614
+    outer loop
+       vertex -0.84973 -0.920943 -0.123039
+       vertex -0.923783 -0.872422 -0.0112786
+       vertex -0.921916 -0.870933 -0.12303
+    endloop
+  endfacet
+  facet normal -0.661176 -0.749936 -0.0210372
+    outer loop
+       vertex -0.921916 -0.870933 -0.12303
+       vertex -0.923783 -0.872422 -0.0112786
+       vertex -0.989011 -0.814907 -0.0115394
+    endloop
+  endfacet
+  facet normal -0.661411 -0.749722 -0.0212866
+    outer loop
+       vertex -0.921916 -0.870933 -0.12303
+       vertex -0.989011 -0.814907 -0.0115394
+       vertex -0.987329 -0.813225 -0.123039
+    endloop
+  endfacet
+  facet normal -0.0408905 -0.998743 0.0289919
+    outer loop
+       vertex -0.327179 -1.06047 -0.0093227
+       vertex -0.327179 -1.05714 0.105413
+       vertex -0.421151 -1.05329 0.105437
+    endloop
+  endfacet
+  facet normal -0.0412608 -0.998736 0.0286882
+    outer loop
+       vertex -0.327179 -1.06047 -0.0093227
+       vertex -0.421151 -1.05329 0.105437
+       vertex -0.42066 -1.05661 -0.00926336
+    endloop
+  endfacet
+  facet normal -0.122824 -0.992029 0.0281454
+    outer loop
+       vertex -0.42066 -1.05661 -0.00926336
+       vertex -0.421151 -1.05329 0.105437
+       vertex -0.514005 -1.0418 0.105336
+    endloop
+  endfacet
+  facet normal -0.124073 -0.991903 0.027112
+    outer loop
+       vertex -0.42066 -1.05661 -0.00926336
+       vertex -0.514005 -1.0418 0.105336
+       vertex -0.513099 -1.04504 -0.00919506
+    endloop
+  endfacet
+  facet normal -0.206163 -0.97817 0.0260731
+    outer loop
+       vertex -0.513099 -1.04504 -0.00919506
+       vertex -0.514005 -1.0418 0.105336
+       vertex -0.604625 -1.02271 0.104939
+    endloop
+  endfacet
+  facet normal -0.208216 -0.97778 0.02435
+    outer loop
+       vertex -0.513099 -1.04504 -0.00919506
+       vertex -0.604625 -1.02271 0.104939
+       vertex -0.603452 -1.0258 -0.00922752
+    endloop
+  endfacet
+  facet normal -0.292032 -0.956134 0.0229021
+    outer loop
+       vertex -0.603452 -1.0258 -0.00922752
+       vertex -0.604625 -1.02271 0.104939
+       vertex -0.691893 -0.996077 0.104073
+    endloop
+  endfacet
+  facet normal -0.294577 -0.955403 0.0207239
+    outer loop
+       vertex -0.603452 -1.0258 -0.00922752
+       vertex -0.691893 -0.996077 0.104073
+       vertex -0.690676 -0.998915 -0.00947047
+    endloop
+  endfacet
+  facet normal -0.381303 -0.924254 0.0190164
+    outer loop
+       vertex -0.690676 -0.998915 -0.00947047
+       vertex -0.691893 -0.996077 0.104073
+       vertex -0.77469 -0.961949 0.102567
+    endloop
+  endfacet
+  facet normal -0.383764 -0.923278 0.0168491
+    outer loop
+       vertex -0.690676 -0.998915 -0.00947047
+       vertex -0.77469 -0.961949 0.102567
+       vertex -0.77373 -0.964404 -0.0100336
+    endloop
+  endfacet
+  facet normal -0.473631 -0.880593 0.0151523
+    outer loop
+       vertex -0.77373 -0.964404 -0.0100336
+       vertex -0.77469 -0.961949 0.102567
+       vertex -0.852216 -0.920281 0.100889
+    endloop
+  endfacet
+  facet normal -0.47553 -0.879598 0.0134128
+    outer loop
+       vertex -0.77373 -0.964404 -0.0100336
+       vertex -0.852216 -0.920281 0.100889
+       vertex -0.851727 -0.922247 -0.0107065
+    endloop
+  endfacet
+  facet normal -0.567695 -0.823151 0.012015
+    outer loop
+       vertex -0.851727 -0.922247 -0.0107065
+       vertex -0.852216 -0.920281 0.100889
+       vertex -0.923666 -0.871025 0.0995073
+    endloop
+  endfacet
+  facet normal -0.568772 -0.822422 0.0109732
+    outer loop
+       vertex -0.851727 -0.922247 -0.0107065
+       vertex -0.923666 -0.871025 0.0995073
+       vertex -0.923783 -0.872422 -0.0112786
+    endloop
+  endfacet
+  facet normal -0.66109 -0.750238 0.0101601
+    outer loop
+       vertex -0.923783 -0.872422 -0.0112786
+       vertex -0.923666 -0.871025 0.0995073
+       vertex -0.988238 -0.814134 0.0988907
+    endloop
+  endfacet
+  facet normal -0.661359 -0.750004 0.00987881
+    outer loop
+       vertex -0.923783 -0.872422 -0.0112786
+       vertex -0.988238 -0.814134 0.0988907
+       vertex -0.989011 -0.814907 -0.0115394
+    endloop
+  endfacet
+  facet normal -0.0398127 -0.99263 0.114457
+    outer loop
+       vertex -0.327179 -1.05714 0.105413
+       vertex -0.327179 -1.04468 0.213516
+       vertex -0.421764 -1.04088 0.213522
+    endloop
+  endfacet
+  facet normal -0.0406207 -0.992678 0.113757
+    outer loop
+       vertex -0.327179 -1.05714 0.105413
+       vertex -0.421764 -1.04088 0.213522
+       vertex -0.421151 -1.05329 0.105437
+    endloop
+  endfacet
+  facet normal -0.119603 -0.986417 0.11259
+    outer loop
+       vertex -0.421151 -1.05329 0.105437
+       vertex -0.421764 -1.04088 0.213522
+       vertex -0.515157 -1.02959 0.213278
+    endloop
+  endfacet
+  facet normal -0.122211 -0.986356 0.110303
+    outer loop
+       vertex -0.421151 -1.05329 0.105437
+       vertex -0.515157 -1.02959 0.213278
+       vertex -0.514005 -1.0418 0.105336
+    endloop
+  endfacet
+  facet normal -0.201067 -0.973604 0.108019
+    outer loop
+       vertex -0.514005 -1.0418 0.105336
+       vertex -0.515157 -1.02959 0.213278
+       vertex -0.606168 -1.01087 0.212524
+    endloop
+  endfacet
+  facet normal -0.20544 -0.973116 0.104118
+    outer loop
+       vertex -0.514005 -1.0418 0.105336
+       vertex -0.606168 -1.01087 0.212524
+       vertex -0.604625 -1.02271 0.104939
+    endloop
+  endfacet
+  facet normal -0.285595 -0.953039 0.100759
+    outer loop
+       vertex -0.604625 -1.02271 0.104939
+       vertex -0.606168 -1.01087 0.212524
+       vertex -0.693605 -0.984833 0.210997
+    endloop
+  endfacet
+  facet normal -0.291435 -0.951819 0.0954245
+    outer loop
+       vertex -0.604625 -1.02271 0.104939
+       vertex -0.693605 -0.984833 0.210997
+       vertex -0.691893 -0.996077 0.104073
+    endloop
+  endfacet
+  facet normal -0.374337 -0.922812 0.0910465
+    outer loop
+       vertex -0.691893 -0.996077 0.104073
+       vertex -0.693605 -0.984833 0.210997
+       vertex -0.776276 -0.95155 0.208436
+    endloop
+  endfacet
+  facet normal -0.381023 -0.920675 0.0847281
+    outer loop
+       vertex -0.691893 -0.996077 0.104073
+       vertex -0.776276 -0.95155 0.208436
+       vertex -0.77469 -0.961949 0.102567
+    endloop
+  endfacet
+  facet normal -0.46629 -0.881047 0.0795584
+    outer loop
+       vertex -0.77469 -0.961949 0.102567
+       vertex -0.776276 -0.95155 0.208436
+       vertex -0.852934 -0.911291 0.204991
+    endloop
+  endfacet
+  facet normal -0.473401 -0.877854 0.0725467
+    outer loop
+       vertex -0.77469 -0.961949 0.102567
+       vertex -0.852934 -0.911291 0.204991
+       vertex -0.852216 -0.920281 0.100889
+    endloop
+  endfacet
+  facet normal -0.562032 -0.824371 0.0673164
+    outer loop
+       vertex -0.852216 -0.920281 0.100889
+       vertex -0.852934 -0.911291 0.204991
+       vertex -0.92233 -0.86432 0.20081
+    endloop
+  endfacet
+  facet normal -0.567303 -0.821185 0.0618331
+    outer loop
+       vertex -0.852216 -0.920281 0.100889
+       vertex -0.92233 -0.86432 0.20081
+       vertex -0.923666 -0.871025 0.0995073
+    endloop
+  endfacet
+  facet normal -0.658726 -0.750118 0.0583344
+    outer loop
+       vertex -0.923666 -0.871025 0.0995073
+       vertex -0.92233 -0.86432 0.20081
+       vertex -0.984236 -0.810133 0.198536
+    endloop
+  endfacet
+  facet normal -0.660314 -0.748855 0.0565854
+    outer loop
+       vertex -0.923666 -0.871025 0.0995073
+       vertex -0.984236 -0.810133 0.198536
+       vertex -0.988238 -0.814134 0.0988907
+    endloop
+  endfacet
+  facet normal -0.0370842 -0.962569 0.268489
+    outer loop
+       vertex -0.327179 -1.04468 0.213516
+       vertex -0.327179 -1.01817 0.308537
+       vertex -0.422729 -1.01449 0.308537
+    endloop
+  endfacet
+  facet normal -0.0386107 -0.962906 0.267061
+    outer loop
+       vertex -0.327179 -1.04468 0.213516
+       vertex -0.422729 -1.01449 0.308537
+       vertex -0.421764 -1.04088 0.213522
+    endloop
+  endfacet
+  facet normal -0.11179 -0.957776 0.264893
+    outer loop
+       vertex -0.421764 -1.04088 0.213522
+       vertex -0.422729 -1.01449 0.308537
+       vertex -0.517042 -1.00358 0.308176
+    endloop
+  endfacet
+  facet normal -0.116607 -0.958457 0.260313
+    outer loop
+       vertex -0.421764 -1.04088 0.213522
+       vertex -0.517042 -1.00358 0.308176
+       vertex -0.515157 -1.02959 0.213278
+    endloop
+  endfacet
+  facet normal -0.188829 -0.948047 0.256026
+    outer loop
+       vertex -0.515157 -1.02959 0.213278
+       vertex -0.517042 -1.00358 0.308176
+       vertex -0.608879 -0.985583 0.307092
+    endloop
+  endfacet
+  facet normal -0.197067 -0.948502 0.24801
+    outer loop
+       vertex -0.515157 -1.02959 0.213278
+       vertex -0.608879 -0.985583 0.307092
+       vertex -0.606168 -1.01087 0.212524
+    endloop
+  endfacet
+  facet normal -0.269888 -0.932105 0.241537
+    outer loop
+       vertex -0.606168 -1.01087 0.212524
+       vertex -0.608879 -0.985583 0.307092
+       vertex -0.697004 -0.960629 0.304924
+    endloop
+  endfacet
+  facet normal -0.281473 -0.931625 0.229887
+    outer loop
+       vertex -0.606168 -1.01087 0.212524
+       vertex -0.697004 -0.960629 0.304924
+       vertex -0.693605 -0.984833 0.210997
+    endloop
+  endfacet
+  facet normal -0.356398 -0.907812 0.221039
+    outer loop
+       vertex -0.693605 -0.984833 0.210997
+       vertex -0.697004 -0.960629 0.304924
+       vertex -0.78018 -0.928855 0.30131
+    endloop
+  endfacet
+  facet normal -0.370952 -0.905583 0.205706
+    outer loop
+       vertex -0.693605 -0.984833 0.210997
+       vertex -0.78018 -0.928855 0.30131
+       vertex -0.776276 -0.95155 0.208436
+    endloop
+  endfacet
+  facet normal -0.448417 -0.872439 0.194351
+    outer loop
+       vertex -0.776276 -0.95155 0.208436
+       vertex -0.78018 -0.928855 0.30131
+       vertex -0.855621 -0.89152 0.294843
+    endloop
+  endfacet
+  facet normal -0.463839 -0.868032 0.177127
+    outer loop
+       vertex -0.776276 -0.95155 0.208436
+       vertex -0.855621 -0.89152 0.294843
+       vertex -0.852934 -0.911291 0.204991
+    endloop
+  endfacet
+  facet normal -0.551584 -0.817942 0.163482
+    outer loop
+       vertex -0.852934 -0.911291 0.204991
+       vertex -0.855621 -0.89152 0.294843
+       vertex -0.920542 -0.849885 0.284113
+    endloop
+  endfacet
+  facet normal -0.560226 -0.814069 0.153093
+    outer loop
+       vertex -0.852934 -0.911291 0.204991
+       vertex -0.920542 -0.849885 0.284113
+       vertex -0.92233 -0.86432 0.20081
+    endloop
+  endfacet
+  facet normal -0.653716 -0.743143 0.14281
+    outer loop
+       vertex -0.92233 -0.86432 0.20081
+       vertex -0.920542 -0.849885 0.284113
+       vertex -0.976234 -0.80213 0.277683
+    endloop
+  endfacet
+  facet normal -0.654961 -0.742337 0.141285
+    outer loop
+       vertex -0.92233 -0.86432 0.20081
+       vertex -0.976234 -0.80213 0.277683
+       vertex -0.984236 -0.810133 0.198536
+    endloop
+  endfacet
+  facet normal -0.0307602 -0.856314 0.515538
+    outer loop
+       vertex -0.327179 -1.01817 0.308537
+       vertex -0.327179 -0.972723 0.384027
+       vertex -0.424276 -0.969235 0.384027
+    endloop
+  endfacet
+  facet normal -0.033037 -0.857519 0.513391
+    outer loop
+       vertex -0.327179 -1.01817 0.308537
+       vertex -0.424276 -0.969235 0.384027
+       vertex -0.422729 -1.01449 0.308537
+    endloop
+  endfacet
+  facet normal -0.0939386 -0.854744 0.510479
+    outer loop
+       vertex -0.422729 -1.01449 0.308537
+       vertex -0.424276 -0.969235 0.384027
+       vertex -0.520145 -0.958971 0.383572
+    endloop
+  endfacet
+  facet normal -0.101168 -0.858035 0.503528
+    outer loop
+       vertex -0.422729 -1.01449 0.308537
+       vertex -0.520145 -0.958971 0.383572
+       vertex -0.517042 -1.00358 0.308176
+    endloop
+  endfacet
+  facet normal -0.16094 -0.852301 0.497676
+    outer loop
+       vertex -0.517042 -1.00358 0.308176
+       vertex -0.520145 -0.958971 0.383572
+       vertex -0.613557 -0.942129 0.382207
+    endloop
+  endfacet
+  facet normal -0.173705 -0.857086 0.485006
+    outer loop
+       vertex -0.517042 -1.00358 0.308176
+       vertex -0.613557 -0.942129 0.382207
+       vertex -0.608879 -0.985583 0.307092
+    endloop
+  endfacet
+  facet normal -0.23389 -0.847828 0.475902
+    outer loop
+       vertex -0.608879 -0.985583 0.307092
+       vertex -0.613557 -0.942129 0.382207
+       vertex -0.703282 -0.918909 0.379476
+    endloop
+  endfacet
+  facet normal -0.252831 -0.853222 0.456167
+    outer loop
+       vertex -0.608879 -0.985583 0.307092
+       vertex -0.703282 -0.918909 0.379476
+       vertex -0.697004 -0.960629 0.304924
+    endloop
+  endfacet
+  facet normal -0.314731 -0.839358 0.443196
+    outer loop
+       vertex -0.697004 -0.960629 0.304924
+       vertex -0.703282 -0.918909 0.379476
+       vertex -0.788094 -0.889511 0.374925
+    endloop
+  endfacet
+  facet normal -0.340423 -0.843993 0.414473
+    outer loop
+       vertex -0.697004 -0.960629 0.304924
+       vertex -0.788094 -0.889511 0.374925
+       vertex -0.78018 -0.928855 0.30131
+    endloop
+  endfacet
+  facet normal -0.411709 -0.821391 0.39473
+    outer loop
+       vertex -0.78018 -0.928855 0.30131
+       vertex -0.788094 -0.889511 0.374925
+       vertex -0.863761 -0.856237 0.365244
+    endloop
+  endfacet
+  facet normal -0.438232 -0.822864 0.361729
+    outer loop
+       vertex -0.78018 -0.928855 0.30131
+       vertex -0.863761 -0.856237 0.365244
+       vertex -0.855621 -0.89152 0.294843
+    endloop
+  endfacet
+  facet normal -0.532152 -0.779957 0.329366
+    outer loop
+       vertex -0.855621 -0.89152 0.294843
+       vertex -0.863761 -0.856237 0.365244
+       vertex -0.926049 -0.821389 0.347126
+    endloop
+  endfacet
+  facet normal -0.54939 -0.778321 0.303952
+    outer loop
+       vertex -0.855621 -0.89152 0.294843
+       vertex -0.926049 -0.821389 0.347126
+       vertex -0.920542 -0.849885 0.284113
+    endloop
+  endfacet
+  facet normal -0.647133 -0.714297 0.266455
+    outer loop
+       vertex -0.920542 -0.849885 0.284113
+       vertex -0.926049 -0.821389 0.347126
+       vertex -0.966663 -0.79256 0.325773
+    endloop
+  endfacet
+  facet normal -0.644469 -0.715154 0.270584
+    outer loop
+       vertex -0.920542 -0.849885 0.284113
+       vertex -0.966663 -0.79256 0.325773
+       vertex -0.976234 -0.80213 0.277683
+    endloop
+  endfacet
+  facet normal -0.042245 -0.986749 -0.15666
+    outer loop
+       vertex -0.327179 -1.03302 -0.457381
+       vertex -0.416941 -1.02926 -0.456883
+       vertex -0.415232 -1.01302 -0.559605
+    endloop
+  endfacet
+  facet normal -0.0427593 -0.986795 -0.156226
+    outer loop
+       vertex -0.327179 -1.03302 -0.457381
+       vertex -0.415232 -1.01302 -0.559605
+       vertex -0.327179 -1.01672 -0.560317
+    endloop
+  endfacet
+  facet normal -0.0427772 -0.977991 -0.204217
+    outer loop
+       vertex -0.327179 -1.01672 -0.560317
+       vertex -0.415232 -1.01302 -0.559605
+       vertex -0.413286 -0.992745 -0.657112
+    endloop
+  endfacet
+  facet normal -0.0434619 -0.978083 -0.203631
+    outer loop
+       vertex -0.327179 -1.01672 -0.560317
+       vertex -0.413286 -0.992745 -0.657112
+       vertex -0.327179 -0.996371 -0.658075
+    endloop
+  endfacet
+  facet normal -0.0435256 -0.964533 -0.260348
+    outer loop
+       vertex -0.327179 -0.996371 -0.658075
+       vertex -0.413286 -0.992745 -0.657112
+       vertex -0.411245 -0.967997 -0.74914
+    endloop
+  endfacet
+  facet normal -0.0443402 -0.964686 -0.259644
+    outer loop
+       vertex -0.327179 -0.996371 -0.658075
+       vertex -0.411245 -0.967997 -0.74914
+       vertex -0.327179 -0.971527 -0.750381
+    endloop
+  endfacet
+  facet normal -0.0444647 -0.944459 -0.325608
+    outer loop
+       vertex -0.327179 -0.971527 -0.750381
+       vertex -0.411245 -0.967997 -0.74914
+       vertex -0.409251 -0.938344 -0.835423
+    endloop
+  endfacet
+  facet normal -0.0453633 -0.944684 -0.324829
+    outer loop
+       vertex -0.327179 -0.971527 -0.750381
+       vertex -0.409251 -0.938344 -0.835423
+       vertex -0.327179 -0.941757 -0.836959
+    endloop
+  endfacet
+  facet normal -0.0455517 -0.915375 -0.400017
+    outer loop
+       vertex -0.327179 -0.941757 -0.836959
+       vertex -0.409251 -0.938344 -0.835423
+       vertex -0.407447 -0.903354 -0.915698
+    endloop
+  endfacet
+  facet normal -0.0464689 -0.915674 -0.399228
+    outer loop
+       vertex -0.327179 -0.941757 -0.836959
+       vertex -0.407447 -0.903354 -0.915698
+       vertex -0.327179 -0.906626 -0.917536
+    endloop
+  endfacet
+  facet normal -0.0467032 -0.874574 -0.482638
+    outer loop
+       vertex -0.327179 -0.906626 -0.917536
+       vertex -0.407447 -0.903354 -0.915698
+       vertex -0.405975 -0.862594 -0.9897
+    endloop
+  endfacet
+  facet normal -0.0475442 -0.874919 -0.48193
+    outer loop
+       vertex -0.327179 -0.906626 -0.917536
+       vertex -0.405975 -0.862594 -0.9897
+       vertex -0.327179 -0.865699 -0.991836
+    endloop
+  endfacet
+  facet normal -0.0477773 -0.819466 -0.571133
+    outer loop
+       vertex -0.327179 -0.865699 -0.991836
+       vertex -0.405975 -0.862594 -0.9897
+       vertex -0.404978 -0.815633 -1.05716
+    endloop
+  endfacet
+  facet normal -0.0484143 -0.819786 -0.570619
+    outer loop
+       vertex -0.327179 -0.865699 -0.991836
+       vertex -0.404978 -0.815633 -1.05716
+       vertex -0.327179 -0.818542 -1.05958
+    endloop
+  endfacet
+  facet normal -0.0485719 -0.748372 -0.661498
+    outer loop
+       vertex -0.327179 -0.818542 -1.05958
+       vertex -0.404978 -0.815633 -1.05716
+       vertex -0.404599 -0.762037 -1.11783
+    endloop
+  endfacet
+  facet normal -0.048843 -0.748534 -0.661295
+    outer loop
+       vertex -0.327179 -0.818542 -1.05958
+       vertex -0.404599 -0.762037 -1.11783
+       vertex -0.327179 -0.764719 -1.12051
+    endloop
+  endfacet
+  facet normal -0.126601 -0.979289 -0.158005
+    outer loop
+       vertex -0.416941 -1.02926 -0.456883
+       vertex -0.505772 -1.01797 -0.455637
+       vertex -0.502373 -1.00192 -0.557825
+    endloop
+  endfacet
+  facet normal -0.127901 -0.979296 -0.156907
+    outer loop
+       vertex -0.416941 -1.02926 -0.456883
+       vertex -0.502373 -1.00192 -0.557825
+       vertex -0.415232 -1.01302 -0.559605
+    endloop
+  endfacet
+  facet normal -0.127745 -0.970234 -0.205738
+    outer loop
+       vertex -0.415232 -1.01302 -0.559605
+       vertex -0.502373 -1.00192 -0.557825
+       vertex -0.498491 -0.981895 -0.654694
+    endloop
+  endfacet
+  facet normal -0.129361 -0.970313 -0.204349
+    outer loop
+       vertex -0.415232 -1.01302 -0.559605
+       vertex -0.498491 -0.981895 -0.654694
+       vertex -0.413286 -0.992745 -0.657112
+    endloop
+  endfacet
+  facet normal -0.129225 -0.956462 -0.261689
+    outer loop
+       vertex -0.413286 -0.992745 -0.657112
+       vertex -0.498491 -0.981895 -0.654694
+       vertex -0.494398 -0.957469 -0.745993
+    endloop
+  endfacet
+  facet normal -0.130972 -0.95664 -0.260166
+    outer loop
+       vertex -0.413286 -0.992745 -0.657112
+       vertex -0.494398 -0.957469 -0.745993
+       vertex -0.411245 -0.967997 -0.74914
+    endloop
+  endfacet
+  facet normal -0.130881 -0.936134 -0.326378
+    outer loop
+       vertex -0.411245 -0.967997 -0.74914
+       vertex -0.494398 -0.957469 -0.745993
+       vertex -0.490366 -0.92823 -0.831472
+    endloop
+  endfacet
+  facet normal -0.132581 -0.936416 -0.324881
+    outer loop
+       vertex -0.411245 -0.967997 -0.74914
+       vertex -0.490366 -0.92823 -0.831472
+       vertex -0.409251 -0.938344 -0.835423
+    endloop
+  endfacet
+  facet normal -0.132558 -0.906962 -0.399811
+    outer loop
+       vertex -0.409251 -0.938344 -0.835423
+       vertex -0.490366 -0.92823 -0.831472
+       vertex -0.486667 -0.893765 -0.910881
+    endloop
+  endfacet
+  facet normal -0.134048 -0.907322 -0.398495
+    outer loop
+       vertex -0.409251 -0.938344 -0.835423
+       vertex -0.486667 -0.893765 -0.910881
+       vertex -0.407447 -0.903354 -0.915698
+    endloop
+  endfacet
+  facet normal -0.13411 -0.866301 -0.481183
+    outer loop
+       vertex -0.407447 -0.903354 -0.915698
+       vertex -0.486667 -0.893765 -0.910881
+       vertex -0.483618 -0.85363 -0.983989
+    endloop
+  endfacet
+  facet normal -0.135376 -0.866719 -0.480075
+    outer loop
+       vertex -0.407447 -0.903354 -0.915698
+       vertex -0.483618 -0.85363 -0.983989
+       vertex -0.405975 -0.862594 -0.9897
+    endloop
+  endfacet
+  facet normal -0.135502 -0.811701 -0.568137
+    outer loop
+       vertex -0.405975 -0.862594 -0.9897
+       vertex -0.483618 -0.85363 -0.983989
+       vertex -0.481536 -0.807382 -1.05056
+    endloop
+  endfacet
+  facet normal -0.136457 -0.812111 -0.567323
+    outer loop
+       vertex -0.405975 -0.862594 -0.9897
+       vertex -0.481536 -0.807382 -1.05056
+       vertex -0.404978 -0.815633 -1.05716
+    endloop
+  endfacet
+  facet normal -0.136575 -0.741683 -0.656699
+    outer loop
+       vertex -0.404978 -0.815633 -1.05716
+       vertex -0.481536 -0.807382 -1.05056
+       vertex -0.480736 -0.754577 -1.11037
+    endloop
+  endfacet
+  facet normal -0.13701 -0.741915 -0.656347
+    outer loop
+       vertex -0.404978 -0.815633 -1.05716
+       vertex -0.480736 -0.754577 -1.11037
+       vertex -0.404599 -0.762037 -1.11783
+    endloop
+  endfacet
+  facet normal -0.211557 -0.96417 -0.16006
+    outer loop
+       vertex -0.505772 -1.01797 -0.455637
+       vertex -0.592738 -0.999181 -0.453892
+       vertex -0.587687 -0.983449 -0.555333
+    endloop
+  endfacet
+  facet normal -0.2134 -0.964023 -0.158495
+    outer loop
+       vertex -0.505772 -1.01797 -0.455637
+       vertex -0.587687 -0.983449 -0.555333
+       vertex -0.502373 -1.00192 -0.557825
+    endloop
+  endfacet
+  facet normal -0.212828 -0.95472 -0.207881
+    outer loop
+       vertex -0.502373 -1.00192 -0.557825
+       vertex -0.587687 -0.983449 -0.555333
+       vertex -0.581891 -0.963848 -0.65129
+    endloop
+  endfacet
+  facet normal -0.214989 -0.954641 -0.20601
+    outer loop
+       vertex -0.502373 -1.00192 -0.557825
+       vertex -0.581891 -0.963848 -0.65129
+       vertex -0.498491 -0.981895 -0.654694
+    endloop
+  endfacet
+  facet normal -0.214293 -0.940631 -0.263233
+    outer loop
+       vertex -0.498491 -0.981895 -0.654694
+       vertex -0.581891 -0.963848 -0.65129
+       vertex -0.575725 -0.940003 -0.741516
+    endloop
+  endfacet
+  facet normal -0.216405 -0.940667 -0.261372
+    outer loop
+       vertex -0.498491 -0.981895 -0.654694
+       vertex -0.575725 -0.940003 -0.741516
+       vertex -0.494398 -0.957469 -0.745993
+    endloop
+  endfacet
+  facet normal -0.215608 -0.920225 -0.326648
+    outer loop
+       vertex -0.494398 -0.957469 -0.745993
+       vertex -0.575725 -0.940003 -0.741516
+       vertex -0.569566 -0.911541 -0.825763
+    endloop
+  endfacet
+  facet normal -0.217376 -0.92037 -0.325065
+    outer loop
+       vertex -0.494398 -0.957469 -0.745993
+       vertex -0.569566 -0.911541 -0.825763
+       vertex -0.490366 -0.92823 -0.831472
+    endloop
+  endfacet
+  facet normal -0.216538 -0.891367 -0.398217
+    outer loop
+       vertex -0.490366 -0.92823 -0.831472
+       vertex -0.569566 -0.911541 -0.825763
+       vertex -0.563791 -0.878088 -0.903784
+    endloop
+  endfacet
+  facet normal -0.217775 -0.891565 -0.397098
+    outer loop
+       vertex -0.490366 -0.92823 -0.831472
+       vertex -0.563791 -0.878088 -0.903784
+       vertex -0.486667 -0.893765 -0.910881
+    endloop
+  endfacet
+  facet normal -0.217013 -0.851423 -0.477477
+    outer loop
+       vertex -0.486667 -0.893765 -0.910881
+       vertex -0.563791 -0.878088 -0.903784
+       vertex -0.558954 -0.839159 -0.9754
+    endloop
+  endfacet
+  facet normal -0.217937 -0.851657 -0.476639
+    outer loop
+       vertex -0.486667 -0.893765 -0.910881
+       vertex -0.558954 -0.839159 -0.9754
+       vertex -0.483618 -0.85363 -0.983989
+    endloop
+  endfacet
+  facet normal -0.217372 -0.798032 -0.562045
+    outer loop
+       vertex -0.483618 -0.85363 -0.983989
+       vertex -0.558954 -0.839159 -0.9754
+       vertex -0.555609 -0.794266 -1.04044
+    endloop
+  endfacet
+  facet normal -0.218088 -0.798288 -0.561403
+    outer loop
+       vertex -0.483618 -0.85363 -0.983989
+       vertex -0.555609 -0.794266 -1.04044
+       vertex -0.481536 -0.807382 -1.05056
+    endloop
+  endfacet
+  facet normal -0.217805 -0.729915 -0.647908
+    outer loop
+       vertex -0.481536 -0.807382 -1.05056
+       vertex -0.555609 -0.794266 -1.04044
+       vertex -0.554309 -0.742924 -1.09871
+    endloop
+  endfacet
+  facet normal -0.218198 -0.730102 -0.647565
+    outer loop
+       vertex -0.481536 -0.807382 -1.05056
+       vertex -0.554309 -0.742924 -1.09871
+       vertex -0.480736 -0.754577 -1.11037
+    endloop
+  endfacet
+  facet normal -0.297715 -0.940708 -0.162586
+    outer loop
+       vertex -0.592738 -0.999181 -0.453892
+       vertex -0.676908 -0.972887 -0.451898
+       vertex -0.670263 -0.957606 -0.552484
+    endloop
+  endfacet
+  facet normal -0.299842 -0.940346 -0.160761
+    outer loop
+       vertex -0.592738 -0.999181 -0.453892
+       vertex -0.670263 -0.957606 -0.552484
+       vertex -0.587687 -0.983449 -0.555333
+    endloop
+  endfacet
+  facet normal -0.298599 -0.930912 -0.210335
+    outer loop
+       vertex -0.587687 -0.983449 -0.555333
+       vertex -0.670263 -0.957606 -0.552484
+       vertex -0.662584 -0.93863 -0.647371
+    endloop
+  endfacet
+  facet normal -0.300948 -0.930618 -0.20828
+    outer loop
+       vertex -0.587687 -0.983449 -0.555333
+       vertex -0.662584 -0.93863 -0.647371
+       vertex -0.581891 -0.963848 -0.65129
+    endloop
+  endfacet
+  facet normal -0.299339 -0.916709 -0.264653
+    outer loop
+       vertex -0.581891 -0.963848 -0.65129
+       vertex -0.662584 -0.93863 -0.647371
+       vertex -0.654314 -0.915661 -0.736286
+    endloop
+  endfacet
+  facet normal -0.301388 -0.916564 -0.262825
+    outer loop
+       vertex -0.581891 -0.963848 -0.65129
+       vertex -0.654314 -0.915661 -0.736286
+       vertex -0.575725 -0.940003 -0.741516
+    endloop
+  endfacet
+  facet normal -0.299431 -0.896637 -0.326163
+    outer loop
+       vertex -0.575725 -0.940003 -0.741516
+       vertex -0.654314 -0.915661 -0.736286
+       vertex -0.645895 -0.8884 -0.818954
+    endloop
+  endfacet
+  facet normal -0.300814 -0.896631 -0.324906
+    outer loop
+       vertex -0.575725 -0.940003 -0.741516
+       vertex -0.645895 -0.8884 -0.818954
+       vertex -0.569566 -0.911541 -0.825763
+    endloop
+  endfacet
+  facet normal -0.298618 -0.868701 -0.395205
+    outer loop
+       vertex -0.569566 -0.911541 -0.825763
+       vertex -0.645895 -0.8884 -0.818954
+       vertex -0.637772 -0.85655 -0.895101
+    endloop
+  endfacet
+  facet normal -0.29923 -0.868747 -0.394639
+    outer loop
+       vertex -0.569566 -0.911541 -0.825763
+       vertex -0.637772 -0.85655 -0.895101
+       vertex -0.563791 -0.878088 -0.903784
+    endloop
+  endfacet
+  facet normal -0.297057 -0.830223 -0.471685
+    outer loop
+       vertex -0.563791 -0.878088 -0.903784
+       vertex -0.637772 -0.85655 -0.895101
+       vertex -0.63083 -0.819531 -0.964632
+    endloop
+  endfacet
+  facet normal -0.297354 -0.830275 -0.471407
+    outer loop
+       vertex -0.563791 -0.878088 -0.903784
+       vertex -0.63083 -0.819531 -0.964632
+       vertex -0.558954 -0.839159 -0.9754
+    endloop
+  endfacet
+  facet normal -0.295565 -0.778845 -0.55321
+    outer loop
+       vertex -0.558954 -0.839159 -0.9754
+       vertex -0.63083 -0.819531 -0.964632
+       vertex -0.625955 -0.776762 -1.02745
+    endloop
+  endfacet
+  facet normal -0.295889 -0.778939 -0.552905
+    outer loop
+       vertex -0.558954 -0.839159 -0.9754
+       vertex -0.625955 -0.776762 -1.02745
+       vertex -0.555609 -0.794266 -1.04044
+    endloop
+  endfacet
+  facet normal -0.29487 -0.713492 -0.635595
+    outer loop
+       vertex -0.555609 -0.794266 -1.04044
+       vertex -0.625955 -0.776762 -1.02745
+       vertex -0.624035 -0.727665 -1.08345
+    endloop
+  endfacet
+  facet normal -0.295197 -0.71363 -0.635288
+    outer loop
+       vertex -0.555609 -0.794266 -1.04044
+       vertex -0.624035 -0.727665 -1.08345
+       vertex -0.554309 -0.742924 -1.09871
+    endloop
+  endfacet
+  facet normal -0.385385 -0.907829 -0.165303
+    outer loop
+       vertex -0.676908 -0.972887 -0.451898
+       vertex -0.75735 -0.939102 -0.449905
+       vertex -0.749186 -0.924408 -0.549636
+    endloop
+  endfacet
+  facet normal -0.387524 -0.907256 -0.163437
+    outer loop
+       vertex -0.676908 -0.972887 -0.451898
+       vertex -0.749186 -0.924408 -0.549636
+       vertex -0.670263 -0.957606 -0.552484
+    endloop
+  endfacet
+  facet normal -0.385365 -0.89789 -0.212808
+    outer loop
+       vertex -0.670263 -0.957606 -0.552484
+       vertex -0.749186 -0.924408 -0.549636
+       vertex -0.739667 -0.906268 -0.643408
+    endloop
+  endfacet
+  facet normal -0.387588 -0.897399 -0.210834
+    outer loop
+       vertex -0.670263 -0.957606 -0.552484
+       vertex -0.739667 -0.906268 -0.643408
+       vertex -0.662584 -0.93863 -0.647371
+    endloop
+  endfacet
+  facet normal -0.384758 -0.88393 -0.265762
+    outer loop
+       vertex -0.662584 -0.93863 -0.647371
+       vertex -0.739667 -0.906268 -0.643408
+       vertex -0.729251 -0.884504 -0.730878
+    endloop
+  endfacet
+  facet normal -0.386466 -0.883648 -0.264216
+    outer loop
+       vertex -0.662584 -0.93863 -0.647371
+       vertex -0.729251 -0.884504 -0.730878
+       vertex -0.654314 -0.915661 -0.736286
+    endloop
+  endfacet
+  facet normal -0.382974 -0.864701 -0.324998
+    outer loop
+       vertex -0.654314 -0.915661 -0.736286
+       vertex -0.729251 -0.884504 -0.730878
+       vertex -0.718396 -0.858934 -0.8117
+    endloop
+  endfacet
+  facet normal -0.38384 -0.864617 -0.324199
+    outer loop
+       vertex -0.654314 -0.915661 -0.736286
+       vertex -0.718396 -0.858934 -0.8117
+       vertex -0.645895 -0.8884 -0.818954
+    endloop
+  endfacet
+  facet normal -0.379827 -0.838231 -0.39128
+    outer loop
+       vertex -0.645895 -0.8884 -0.818954
+       vertex -0.718396 -0.858934 -0.8117
+       vertex -0.707561 -0.82938 -0.885532
+    endloop
+  endfacet
+  facet normal -0.379976 -0.838229 -0.391139
+    outer loop
+       vertex -0.645895 -0.8884 -0.818954
+       vertex -0.707561 -0.82938 -0.885532
+       vertex -0.637772 -0.85655 -0.895101
+    endloop
+  endfacet
+  facet normal -0.375875 -0.801874 -0.464452
+    outer loop
+       vertex -0.637772 -0.85655 -0.895101
+       vertex -0.707561 -0.82938 -0.885532
+       vertex -0.698091 -0.795099 -0.952382
+    endloop
+  endfacet
+  facet normal -0.375867 -0.801874 -0.46446
+    outer loop
+       vertex -0.637772 -0.85655 -0.895101
+       vertex -0.698091 -0.795099 -0.952382
+       vertex -0.63083 -0.819531 -0.964632
+    endloop
+  endfacet
+  facet normal -0.372365 -0.7533 -0.54211
+    outer loop
+       vertex -0.63083 -0.819531 -0.964632
+       vertex -0.698091 -0.795099 -0.952382
+       vertex -0.691333 -0.755348 -1.01226
+    endloop
+  endfacet
+  facet normal -0.372642 -0.753359 -0.541839
+    outer loop
+       vertex -0.63083 -0.819531 -0.964632
+       vertex -0.691333 -0.755348 -1.01226
+       vertex -0.625955 -0.776762 -1.02745
+    endloop
+  endfacet
+  facet normal -0.370576 -0.691767 -0.619783
+    outer loop
+       vertex -0.625955 -0.776762 -1.02745
+       vertex -0.691333 -0.755348 -1.01226
+       vertex -0.688631 -0.709386 -1.06518
+    endloop
+  endfacet
+  facet normal -0.371044 -0.691939 -0.619312
+    outer loop
+       vertex -0.625955 -0.776762 -1.02745
+       vertex -0.688631 -0.709386 -1.06518
+       vertex -0.624035 -0.727665 -1.08345
+    endloop
+  endfacet
+  facet normal -0.474447 -0.864129 -0.167869
+    outer loop
+       vertex -0.75735 -0.939102 -0.449905
+       vertex -0.833131 -0.897833 -0.44816
+       vertex -0.823545 -0.883868 -0.547144
+    endloop
+  endfacet
+  facet normal -0.476308 -0.863427 -0.166203
+    outer loop
+       vertex -0.75735 -0.939102 -0.449905
+       vertex -0.823545 -0.883868 -0.547144
+       vertex -0.749186 -0.924408 -0.549636
+    endloop
+  endfacet
+  facet normal -0.473021 -0.854393 -0.215091
+    outer loop
+       vertex -0.749186 -0.924408 -0.549636
+       vertex -0.823545 -0.883868 -0.547144
+       vertex -0.812257 -0.866762 -0.639916
+    endloop
+  endfacet
+  facet normal -0.474922 -0.853771 -0.213365
+    outer loop
+       vertex -0.749186 -0.924408 -0.549636
+       vertex -0.812257 -0.866762 -0.639916
+       vertex -0.739667 -0.906268 -0.643408
+    endloop
+  endfacet
+  facet normal -0.470585 -0.841086 -0.266692
+    outer loop
+       vertex -0.739667 -0.906268 -0.643408
+       vertex -0.812257 -0.866762 -0.639916
+       vertex -0.799695 -0.84648 -0.726046
+    endloop
+  endfacet
+  facet normal -0.471992 -0.840708 -0.265396
+    outer loop
+       vertex -0.739667 -0.906268 -0.643408
+       vertex -0.799695 -0.84648 -0.726046
+       vertex -0.729251 -0.884504 -0.730878
+    endloop
+  endfacet
+  facet normal -0.466512 -0.823142 -0.323736
+    outer loop
+       vertex -0.729251 -0.884504 -0.730878
+       vertex -0.799695 -0.84648 -0.726046
+       vertex -0.786288 -0.822986 -0.805104
+    endloop
+  endfacet
+  facet normal -0.467174 -0.823009 -0.323117
+    outer loop
+       vertex -0.729251 -0.884504 -0.730878
+       vertex -0.786288 -0.822986 -0.805104
+       vertex -0.718396 -0.858934 -0.8117
+    endloop
+  endfacet
+  facet normal -0.460515 -0.798627 -0.387454
+    outer loop
+       vertex -0.718396 -0.858934 -0.8117
+       vertex -0.786288 -0.822986 -0.805104
+       vertex -0.772463 -0.796242 -0.876659
+    endloop
+  endfacet
+  facet normal -0.460693 -0.798606 -0.387286
+    outer loop
+       vertex -0.718396 -0.858934 -0.8117
+       vertex -0.772463 -0.796242 -0.876659
+       vertex -0.707561 -0.82938 -0.885532
+    endloop
+  endfacet
+  facet normal -0.453375 -0.765903 -0.455899
+    outer loop
+       vertex -0.707561 -0.82938 -0.885532
+       vertex -0.772463 -0.796242 -0.876659
+       vertex -0.759887 -0.765637 -0.940583
+    endloop
+  endfacet
+  facet normal -0.452391 -0.765917 -0.456851
+    outer loop
+       vertex -0.707561 -0.82938 -0.885532
+       vertex -0.759887 -0.765637 -0.940583
+       vertex -0.698091 -0.795099 -0.952382
+    endloop
+  endfacet
+  facet normal -0.445493 -0.722881 -0.528185
+    outer loop
+       vertex -0.698091 -0.795099 -0.952382
+       vertex -0.759887 -0.765637 -0.940583
+       vertex -0.750221 -0.730557 -0.996746
+    endloop
+  endfacet
+  facet normal -0.44383 -0.722684 -0.529852
+    outer loop
+       vertex -0.698091 -0.795099 -0.952382
+       vertex -0.750221 -0.730557 -0.996746
+       vertex -0.691333 -0.755348 -1.01226
+    endloop
+  endfacet
+  facet normal -0.439351 -0.667204 -0.601507
+    outer loop
+       vertex -0.691333 -0.755348 -1.01226
+       vertex -0.750221 -0.730557 -0.996746
+       vertex -0.746116 -0.689499 -1.04529
+    endloop
+  endfacet
+  facet normal -0.439021 -0.667105 -0.601856
+    outer loop
+       vertex -0.691333 -0.755348 -1.01226
+       vertex -0.746116 -0.689499 -1.04529
+       vertex -0.688631 -0.709386 -1.06518
+    endloop
+  endfacet
+  facet normal -0.564141 -0.808013 -0.169881
+    outer loop
+       vertex -0.833131 -0.897833 -0.44816
+       vertex -0.90332 -0.84909 -0.446914
+       vertex -0.892426 -0.835998 -0.545364
+    endloop
+  endfacet
+  facet normal -0.565441 -0.807358 -0.168672
+    outer loop
+       vertex -0.833131 -0.897833 -0.44816
+       vertex -0.892426 -0.835998 -0.545364
+       vertex -0.823545 -0.883868 -0.547144
+    endloop
+  endfacet
+  facet normal -0.560872 -0.798991 -0.216878
+    outer loop
+       vertex -0.823545 -0.883868 -0.547144
+       vertex -0.892426 -0.835998 -0.545364
+       vertex -0.879467 -0.82011 -0.637409
+    endloop
+  endfacet
+  facet normal -0.562217 -0.798387 -0.215617
+    outer loop
+       vertex -0.823545 -0.883868 -0.547144
+       vertex -0.879467 -0.82011 -0.637409
+       vertex -0.812257 -0.866762 -0.639916
+    endloop
+  endfacet
+  facet normal -0.556157 -0.786871 -0.267439
+    outer loop
+       vertex -0.812257 -0.866762 -0.639916
+       vertex -0.879467 -0.82011 -0.637409
+       vertex -0.864803 -0.801539 -0.722544
+    endloop
+  endfacet
+  facet normal -0.557194 -0.786468 -0.266462
+    outer loop
+       vertex -0.812257 -0.866762 -0.639916
+       vertex -0.864803 -0.801539 -0.722544
+       vertex -0.799695 -0.84648 -0.726046
+    endloop
+  endfacet
+  facet normal -0.549352 -0.770715 -0.322818
+    outer loop
+       vertex -0.799695 -0.84648 -0.726046
+       vertex -0.864803 -0.801539 -0.722544
+       vertex -0.848789 -0.780399 -0.800266
+    endloop
+  endfacet
+  facet normal -0.549954 -0.770523 -0.322249
+    outer loop
+       vertex -0.799695 -0.84648 -0.726046
+       vertex -0.848789 -0.780399 -0.800266
+       vertex -0.786288 -0.822986 -0.805104
+    endloop
+  endfacet
+  facet normal -0.539915 -0.748704 -0.384621
+    outer loop
+       vertex -0.786288 -0.822986 -0.805104
+       vertex -0.848789 -0.780399 -0.800266
+       vertex -0.831785 -0.756803 -0.870068
+    endloop
+  endfacet
+  facet normal -0.540379 -0.748594 -0.384184
+    outer loop
+       vertex -0.786288 -0.822986 -0.805104
+       vertex -0.831785 -0.756803 -0.870068
+       vertex -0.772463 -0.796242 -0.876659
+    endloop
+  endfacet
+  facet normal -0.529048 -0.720954 -0.447587
+    outer loop
+       vertex -0.772463 -0.796242 -0.876659
+       vertex -0.831785 -0.756803 -0.870068
+       vertex -0.815363 -0.730921 -0.931169
+    endloop
+  endfacet
+  facet normal -0.527498 -0.72117 -0.449066
+    outer loop
+       vertex -0.772463 -0.796242 -0.876659
+       vertex -0.815363 -0.730921 -0.931169
+       vertex -0.759887 -0.765637 -0.940583
+    endloop
+  endfacet
+  facet normal -0.515976 -0.685089 -0.51422
+    outer loop
+       vertex -0.759887 -0.765637 -0.940583
+       vertex -0.815363 -0.730921 -0.931169
+       vertex -0.801098 -0.702923 -0.982784
+    endloop
+  endfacet
+  facet normal -0.513822 -0.685106 -0.51635
+    outer loop
+       vertex -0.759887 -0.765637 -0.940583
+       vertex -0.801098 -0.702923 -0.982784
+       vertex -0.750221 -0.730557 -0.996746
+    endloop
+  endfacet
+  facet normal -0.505666 -0.637007 -0.581829
+    outer loop
+       vertex -0.750221 -0.730557 -0.996746
+       vertex -0.801098 -0.702923 -0.982784
+       vertex -0.794505 -0.669413 -1.0252
+    endloop
+  endfacet
+  facet normal -0.505853 -0.637047 -0.581622
+    outer loop
+       vertex -0.750221 -0.730557 -0.996746
+       vertex -0.794505 -0.669413 -1.0252
+       vertex -0.746116 -0.689499 -1.04529
+    endloop
+  endfacet
+  facet normal -0.652861 -0.737952 -0.170882
+    outer loop
+       vertex -0.90332 -0.84909 -0.446914
+       vertex -0.966985 -0.792882 -0.446415
+       vertex -0.954915 -0.780812 -0.544652
+    endloop
+  endfacet
+  facet normal -0.653355 -0.737626 -0.170394
+    outer loop
+       vertex -0.90332 -0.84909 -0.446914
+       vertex -0.954915 -0.780812 -0.544652
+       vertex -0.892426 -0.835998 -0.545364
+    endloop
+  endfacet
+  facet normal -0.647453 -0.730332 -0.217759
+    outer loop
+       vertex -0.892426 -0.835998 -0.545364
+       vertex -0.954915 -0.780812 -0.544652
+       vertex -0.940414 -0.766311 -0.636401
+    endloop
+  endfacet
+  facet normal -0.647986 -0.730015 -0.217236
+    outer loop
+       vertex -0.892426 -0.835998 -0.545364
+       vertex -0.940414 -0.766311 -0.636401
+       vertex -0.879467 -0.82011 -0.637409
+    endloop
+  endfacet
+  facet normal -0.640085 -0.720116 -0.267814
+    outer loop
+       vertex -0.879467 -0.82011 -0.637409
+       vertex -0.940414 -0.766311 -0.636401
+       vertex -0.923733 -0.749629 -0.721126
+    endloop
+  endfacet
+  facet normal -0.64055 -0.719871 -0.267361
+    outer loop
+       vertex -0.879467 -0.82011 -0.637409
+       vertex -0.923733 -0.749629 -0.721126
+       vertex -0.864803 -0.801539 -0.722544
+    endloop
+  endfacet
+  facet normal -0.630064 -0.706464 -0.322378
+    outer loop
+       vertex -0.864803 -0.801539 -0.722544
+       vertex -0.923733 -0.749629 -0.721126
+       vertex -0.905121 -0.731018 -0.798286
+    endloop
+  endfacet
+  facet normal -0.630456 -0.706286 -0.322003
+    outer loop
+       vertex -0.864803 -0.801539 -0.722544
+       vertex -0.905121 -0.731018 -0.798286
+       vertex -0.848789 -0.780399 -0.800266
+    endloop
+  endfacet
+  facet normal -0.616444 -0.687847 -0.383229
+    outer loop
+       vertex -0.848789 -0.780399 -0.800266
+       vertex -0.905121 -0.731018 -0.798286
+       vertex -0.884831 -0.710728 -0.867343
+    endloop
+  endfacet
+  facet normal -0.616957 -0.687652 -0.382751
+    outer loop
+       vertex -0.848789 -0.780399 -0.800266
+       vertex -0.884831 -0.710728 -0.867343
+       vertex -0.831785 -0.756803 -0.870068
+    endloop
+  endfacet
+  facet normal -0.60076 -0.66544 -0.443032
+    outer loop
+       vertex -0.831785 -0.756803 -0.870068
+       vertex -0.884831 -0.710728 -0.867343
+       vertex -0.863937 -0.689834 -0.927058
+    endloop
+  endfacet
+  facet normal -0.600463 -0.665528 -0.443303
+    outer loop
+       vertex -0.831785 -0.756803 -0.870068
+       vertex -0.863937 -0.689834 -0.927058
+       vertex -0.815363 -0.730921 -0.931169
+    endloop
+  endfacet
+  facet normal -0.581483 -0.636782 -0.506346
+    outer loop
+       vertex -0.815363 -0.730921 -0.931169
+       vertex -0.863937 -0.689834 -0.927058
+       vertex -0.843516 -0.669413 -0.976191
+    endloop
+  endfacet
+  facet normal -0.581694 -0.636739 -0.506157
+    outer loop
+       vertex -0.815363 -0.730921 -0.931169
+       vertex -0.843516 -0.669413 -0.976191
+       vertex -0.801098 -0.702923 -0.982784
+    endloop
+  endfacet
+  facet normal -0.562735 -0.600567 -0.568022
+    outer loop
+       vertex -0.801098 -0.702923 -0.982784
+       vertex -0.843516 -0.669413 -0.976191
+       vertex -0.827436 -0.653333 -1.00912
+    endloop
+  endfacet
+  facet normal -0.568022 -0.600567 -0.562734
+    outer loop
+       vertex -0.801098 -0.702923 -0.982784
+       vertex -0.827436 -0.653333 -1.00912
+       vertex -0.794505 -0.669413 -1.0252
+    endloop
+  endfacet
+  facet normal -0.986795 -0.0427593 -0.156227
+    outer loop
+       vertex -1.20712 -0.153076 -0.457381
+       vertex -1.19083 -0.153076 -0.560317
+       vertex -1.18712 -0.241129 -0.559605
+    endloop
+  endfacet
+  facet normal -0.986749 -0.042245 -0.156661
+    outer loop
+       vertex -1.20712 -0.153076 -0.457381
+       vertex -1.18712 -0.241129 -0.559605
+       vertex -1.20336 -0.242838 -0.456883
+    endloop
+  endfacet
+  facet normal -0.979296 -0.1279 -0.156908
+    outer loop
+       vertex -1.20336 -0.242838 -0.456883
+       vertex -1.18712 -0.241129 -0.559605
+       vertex -1.17603 -0.32827 -0.557825
+    endloop
+  endfacet
+  facet normal -0.979289 -0.1266 -0.158006
+    outer loop
+       vertex -1.20336 -0.242838 -0.456883
+       vertex -1.17603 -0.32827 -0.557825
+       vertex -1.19208 -0.331668 -0.455637
+    endloop
+  endfacet
+  facet normal -0.964023 -0.2134 -0.158496
+    outer loop
+       vertex -1.19208 -0.331668 -0.455637
+       vertex -1.17603 -0.32827 -0.557825
+       vertex -1.15755 -0.413584 -0.555333
+    endloop
+  endfacet
+  facet normal -0.96417 -0.211557 -0.160061
+    outer loop
+       vertex -1.19208 -0.331668 -0.455637
+       vertex -1.15755 -0.413584 -0.555333
+       vertex -1.17328 -0.418635 -0.453892
+    endloop
+  endfacet
+  facet normal -0.940347 -0.29984 -0.160762
+    outer loop
+       vertex -1.17328 -0.418635 -0.453892
+       vertex -1.15755 -0.413584 -0.555333
+       vertex -1.13171 -0.496159 -0.552484
+    endloop
+  endfacet
+  facet normal -0.940709 -0.297713 -0.162587
+    outer loop
+       vertex -1.17328 -0.418635 -0.453892
+       vertex -1.13171 -0.496159 -0.552484
+       vertex -1.14699 -0.502805 -0.451898
+    endloop
+  endfacet
+  facet normal -0.907256 -0.387523 -0.163438
+    outer loop
+       vertex -1.14699 -0.502805 -0.451898
+       vertex -1.13171 -0.496159 -0.552484
+       vertex -1.09851 -0.575083 -0.549636
+    endloop
+  endfacet
+  facet normal -0.907829 -0.385386 -0.165303
+    outer loop
+       vertex -1.14699 -0.502805 -0.451898
+       vertex -1.09851 -0.575083 -0.549636
+       vertex -1.1132 -0.583246 -0.449905
+    endloop
+  endfacet
+  facet normal -0.863428 -0.476307 -0.166203
+    outer loop
+       vertex -1.1132 -0.583246 -0.449905
+       vertex -1.09851 -0.575083 -0.549636
+       vertex -1.05797 -0.649442 -0.547144
+    endloop
+  endfacet
+  facet normal -0.864129 -0.474448 -0.167868
+    outer loop
+       vertex -1.1132 -0.583246 -0.449905
+       vertex -1.05797 -0.649442 -0.547144
+       vertex -1.07194 -0.659028 -0.44816
+    endloop
+  endfacet
+  facet normal -0.807358 -0.565441 -0.168671
+    outer loop
+       vertex -1.07194 -0.659028 -0.44816
+       vertex -1.05797 -0.649442 -0.547144
+       vertex -1.0101 -0.718322 -0.545364
+    endloop
+  endfacet
+  facet normal -0.808014 -0.56414 -0.169882
+    outer loop
+       vertex -1.07194 -0.659028 -0.44816
+       vertex -1.0101 -0.718322 -0.545364
+       vertex -1.02319 -0.729217 -0.446914
+    endloop
+  endfacet
+  facet normal -0.737627 -0.653355 -0.170394
+    outer loop
+       vertex -1.02319 -0.729217 -0.446914
+       vertex -1.0101 -0.718322 -0.545364
+       vertex -0.954915 -0.780812 -0.544652
+    endloop
+  endfacet
+  facet normal -0.737952 -0.652861 -0.170882
+    outer loop
+       vertex -1.02319 -0.729217 -0.446914
+       vertex -0.954915 -0.780812 -0.544652
+       vertex -0.966985 -0.792882 -0.446415
+    endloop
+  endfacet
+  facet normal -0.978082 -0.0434605 -0.203632
+    outer loop
+       vertex -1.19083 -0.153076 -0.560317
+       vertex -1.17047 -0.153076 -0.658075
+       vertex -1.16685 -0.239183 -0.657112
+    endloop
+  endfacet
+  facet normal -0.977991 -0.0427772 -0.204217
+    outer loop
+       vertex -1.19083 -0.153076 -0.560317
+       vertex -1.16685 -0.239183 -0.657112
+       vertex -1.18712 -0.241129 -0.559605
+    endloop
+  endfacet
+  facet normal -0.970313 -0.12936 -0.204349
+    outer loop
+       vertex -1.18712 -0.241129 -0.559605
+       vertex -1.16685 -0.239183 -0.657112
+       vertex -1.156 -0.324387 -0.654694
+    endloop
+  endfacet
+  facet normal -0.970234 -0.127744 -0.205738
+    outer loop
+       vertex -1.18712 -0.241129 -0.559605
+       vertex -1.156 -0.324387 -0.654694
+       vertex -1.17603 -0.32827 -0.557825
+    endloop
+  endfacet
+  facet normal -0.954641 -0.214987 -0.206011
+    outer loop
+       vertex -1.17603 -0.32827 -0.557825
+       vertex -1.156 -0.324387 -0.654694
+       vertex -1.13795 -0.407788 -0.65129
+    endloop
+  endfacet
+  facet normal -0.95472 -0.212828 -0.20788
+    outer loop
+       vertex -1.17603 -0.32827 -0.557825
+       vertex -1.13795 -0.407788 -0.65129
+       vertex -1.15755 -0.413584 -0.555333
+    endloop
+  endfacet
+  facet normal -0.930618 -0.300947 -0.20828
+    outer loop
+       vertex -1.15755 -0.413584 -0.555333
+       vertex -1.13795 -0.407788 -0.65129
+       vertex -1.11273 -0.48848 -0.647371
+    endloop
+  endfacet
+  facet normal -0.930913 -0.298597 -0.210335
+    outer loop
+       vertex -1.15755 -0.413584 -0.555333
+       vertex -1.11273 -0.48848 -0.647371
+       vertex -1.13171 -0.496159 -0.552484
+    endloop
+  endfacet
+  facet normal -0.897398 -0.387589 -0.210834
+    outer loop
+       vertex -1.13171 -0.496159 -0.552484
+       vertex -1.11273 -0.48848 -0.647371
+       vertex -1.08037 -0.565564 -0.643408
+    endloop
+  endfacet
+  facet normal -0.89789 -0.385365 -0.212809
+    outer loop
+       vertex -1.13171 -0.496159 -0.552484
+       vertex -1.08037 -0.565564 -0.643408
+       vertex -1.09851 -0.575083 -0.549636
+    endloop
+  endfacet
+  facet normal -0.853771 -0.474922 -0.213366
+    outer loop
+       vertex -1.09851 -0.575083 -0.549636
+       vertex -1.08037 -0.565564 -0.643408
+       vertex -1.04087 -0.638153 -0.639916
+    endloop
+  endfacet
+  facet normal -0.854393 -0.47302 -0.215091
+    outer loop
+       vertex -1.09851 -0.575083 -0.549636
+       vertex -1.04087 -0.638153 -0.639916
+       vertex -1.05797 -0.649442 -0.547144
+    endloop
+  endfacet
+  facet normal -0.798387 -0.562217 -0.215618
+    outer loop
+       vertex -1.05797 -0.649442 -0.547144
+       vertex -1.04087 -0.638153 -0.639916
+       vertex -0.994213 -0.705364 -0.637409
+    endloop
+  endfacet
+  facet normal -0.798991 -0.560873 -0.216877
+    outer loop
+       vertex -1.05797 -0.649442 -0.547144
+       vertex -0.994213 -0.705364 -0.637409
+       vertex -1.0101 -0.718322 -0.545364
+    endloop
+  endfacet
+  facet normal -0.730016 -0.647986 -0.217235
+    outer loop
+       vertex -1.0101 -0.718322 -0.545364
+       vertex -0.994213 -0.705364 -0.637409
+       vertex -0.940414 -0.766311 -0.636401
+    endloop
+  endfacet
+  facet normal -0.730333 -0.647453 -0.217759
+    outer loop
+       vertex -1.0101 -0.718322 -0.545364
+       vertex -0.940414 -0.766311 -0.636401
+       vertex -0.954915 -0.780812 -0.544652
+    endloop
+  endfacet
+  facet normal -0.964686 -0.0443388 -0.259643
+    outer loop
+       vertex -1.17047 -0.153076 -0.658075
+       vertex -1.14563 -0.153076 -0.750381
+       vertex -1.1421 -0.237142 -0.74914
+    endloop
+  endfacet
+  facet normal -0.964534 -0.0435243 -0.260347
+    outer loop
+       vertex -1.17047 -0.153076 -0.658075
+       vertex -1.1421 -0.237142 -0.74914
+       vertex -1.16685 -0.239183 -0.657112
+    endloop
+  endfacet
+  facet normal -0.956641 -0.13097 -0.260164
+    outer loop
+       vertex -1.16685 -0.239183 -0.657112
+       vertex -1.1421 -0.237142 -0.74914
+       vertex -1.13157 -0.320294 -0.745993
+    endloop
+  endfacet
+  facet normal -0.956463 -0.129224 -0.261687
+    outer loop
+       vertex -1.16685 -0.239183 -0.657112
+       vertex -1.13157 -0.320294 -0.745993
+       vertex -1.156 -0.324387 -0.654694
+    endloop
+  endfacet
+  facet normal -0.940667 -0.216405 -0.26137
+    outer loop
+       vertex -1.156 -0.324387 -0.654694
+       vertex -1.13157 -0.320294 -0.745993
+       vertex -1.11411 -0.401622 -0.741516
+    endloop
+  endfacet
+  facet normal -0.940632 -0.214291 -0.263233
+    outer loop
+       vertex -1.156 -0.324387 -0.654694
+       vertex -1.11411 -0.401622 -0.741516
+       vertex -1.13795 -0.407788 -0.65129
+    endloop
+  endfacet
+  facet normal -0.916564 -0.301387 -0.262825
+    outer loop
+       vertex -1.13795 -0.407788 -0.65129
+       vertex -1.11411 -0.401622 -0.741516
+       vertex -1.08976 -0.48021 -0.736286
+    endloop
+  endfacet
+  facet normal -0.916709 -0.299337 -0.264654
+    outer loop
+       vertex -1.13795 -0.407788 -0.65129
+       vertex -1.08976 -0.48021 -0.736286
+       vertex -1.11273 -0.48848 -0.647371
+    endloop
+  endfacet
+  facet normal -0.883648 -0.386465 -0.264217
+    outer loop
+       vertex -1.11273 -0.48848 -0.647371
+       vertex -1.08976 -0.48021 -0.736286
+       vertex -1.05861 -0.555148 -0.730878
+    endloop
+  endfacet
+  facet normal -0.88393 -0.384758 -0.265762
+    outer loop
+       vertex -1.11273 -0.48848 -0.647371
+       vertex -1.05861 -0.555148 -0.730878
+       vertex -1.08037 -0.565564 -0.643408
+    endloop
+  endfacet
+  facet normal -0.840708 -0.471991 -0.265395
+    outer loop
+       vertex -1.08037 -0.565564 -0.643408
+       vertex -1.05861 -0.555148 -0.730878
+       vertex -1.02058 -0.625592 -0.726046
+    endloop
+  endfacet
+  facet normal -0.841086 -0.470584 -0.266691
+    outer loop
+       vertex -1.08037 -0.565564 -0.643408
+       vertex -1.02058 -0.625592 -0.726046
+       vertex -1.04087 -0.638153 -0.639916
+    endloop
+  endfacet
+  facet normal -0.786469 -0.557194 -0.266462
+    outer loop
+       vertex -1.04087 -0.638153 -0.639916
+       vertex -1.02058 -0.625592 -0.726046
+       vertex -0.975642 -0.690699 -0.722544
+    endloop
+  endfacet
+  facet normal -0.786871 -0.556157 -0.267439
+    outer loop
+       vertex -1.04087 -0.638153 -0.639916
+       vertex -0.975642 -0.690699 -0.722544
+       vertex -0.994213 -0.705364 -0.637409
+    endloop
+  endfacet
+  facet normal -0.719871 -0.64055 -0.267361
+    outer loop
+       vertex -0.994213 -0.705364 -0.637409
+       vertex -0.975642 -0.690699 -0.722544
+       vertex -0.923733 -0.749629 -0.721126
+    endloop
+  endfacet
+  facet normal -0.720117 -0.640084 -0.267814
+    outer loop
+       vertex -0.994213 -0.705364 -0.637409
+       vertex -0.923733 -0.749629 -0.721126
+       vertex -0.940414 -0.766311 -0.636401
+    endloop
+  endfacet
+  facet normal -0.944684 -0.0453626 -0.324829
+    outer loop
+       vertex -1.14563 -0.153076 -0.750381
+       vertex -1.11586 -0.153076 -0.836959
+       vertex -1.11245 -0.235148 -0.835423
+    endloop
+  endfacet
+  facet normal -0.944459 -0.0444634 -0.325609
+    outer loop
+       vertex -1.14563 -0.153076 -0.750381
+       vertex -1.11245 -0.235148 -0.835423
+       vertex -1.1421 -0.237142 -0.74914
+    endloop
+  endfacet
+  facet normal -0.936416 -0.132579 -0.324881
+    outer loop
+       vertex -1.1421 -0.237142 -0.74914
+       vertex -1.11245 -0.235148 -0.835423
+       vertex -1.10233 -0.316262 -0.831472
+    endloop
+  endfacet
+  facet normal -0.936134 -0.13088 -0.326378
+    outer loop
+       vertex -1.1421 -0.237142 -0.74914
+       vertex -1.10233 -0.316262 -0.831472
+       vertex -1.13157 -0.320294 -0.745993
+    endloop
+  endfacet
+  facet normal -0.92037 -0.217375 -0.325066
+    outer loop
+       vertex -1.13157 -0.320294 -0.745993
+       vertex -1.10233 -0.316262 -0.831472
+       vertex -1.08564 -0.395463 -0.825763
+    endloop
+  endfacet
+  facet normal -0.920225 -0.215608 -0.326648
+    outer loop
+       vertex -1.13157 -0.320294 -0.745993
+       vertex -1.08564 -0.395463 -0.825763
+       vertex -1.11411 -0.401622 -0.741516
+    endloop
+  endfacet
+  facet normal -0.896631 -0.300814 -0.324905
+    outer loop
+       vertex -1.11411 -0.401622 -0.741516
+       vertex -1.08564 -0.395463 -0.825763
+       vertex -1.0625 -0.471792 -0.818953
+    endloop
+  endfacet
+  facet normal -0.896637 -0.29943 -0.326164
+    outer loop
+       vertex -1.11411 -0.401622 -0.741516
+       vertex -1.0625 -0.471792 -0.818953
+       vertex -1.08976 -0.48021 -0.736286
+    endloop
+  endfacet
+  facet normal -0.864617 -0.383839 -0.3242
+    outer loop
+       vertex -1.08976 -0.48021 -0.736286
+       vertex -1.0625 -0.471792 -0.818953
+       vertex -1.03304 -0.544293 -0.8117
+    endloop
+  endfacet
+  facet normal -0.864701 -0.382974 -0.324998
+    outer loop
+       vertex -1.08976 -0.48021 -0.736286
+       vertex -1.03304 -0.544293 -0.8117
+       vertex -1.05861 -0.555148 -0.730878
+    endloop
+  endfacet
+  facet normal -0.82301 -0.467173 -0.323117
+    outer loop
+       vertex -1.05861 -0.555148 -0.730878
+       vertex -1.03304 -0.544293 -0.8117
+       vertex -0.997089 -0.612184 -0.805104
+    endloop
+  endfacet
+  facet normal -0.823142 -0.466511 -0.323736
+    outer loop
+       vertex -1.05861 -0.555148 -0.730878
+       vertex -0.997089 -0.612184 -0.805104
+       vertex -1.02058 -0.625592 -0.726046
+    endloop
+  endfacet
+  facet normal -0.770523 -0.549955 -0.322249
+    outer loop
+       vertex -1.02058 -0.625592 -0.726046
+       vertex -0.997089 -0.612184 -0.805104
+       vertex -0.954502 -0.674686 -0.800266
+    endloop
+  endfacet
+  facet normal -0.770715 -0.549351 -0.322819
+    outer loop
+       vertex -1.02058 -0.625592 -0.726046
+       vertex -0.954502 -0.674686 -0.800266
+       vertex -0.975642 -0.690699 -0.722544
+    endloop
+  endfacet
+  facet normal -0.706286 -0.630455 -0.322004
+    outer loop
+       vertex -0.975642 -0.690699 -0.722544
+       vertex -0.954502 -0.674686 -0.800266
+       vertex -0.905121 -0.731018 -0.798286
+    endloop
+  endfacet
+  facet normal -0.706464 -0.630064 -0.322378
+    outer loop
+       vertex -0.975642 -0.690699 -0.722544
+       vertex -0.905121 -0.731018 -0.798286
+       vertex -0.923733 -0.749629 -0.721126
+    endloop
+  endfacet
+  facet normal -0.915674 -0.0464689 -0.399226
+    outer loop
+       vertex -1.11586 -0.153076 -0.836959
+       vertex -1.08073 -0.153076 -0.917536
+       vertex -1.07746 -0.233344 -0.915698
+    endloop
+  endfacet
+  facet normal -0.915375 -0.045551 -0.400016
+    outer loop
+       vertex -1.11586 -0.153076 -0.836959
+       vertex -1.07746 -0.233344 -0.915698
+       vertex -1.11245 -0.235148 -0.835423
+    endloop
+  endfacet
+  facet normal -0.907322 -0.134046 -0.398495
+    outer loop
+       vertex -1.11245 -0.235148 -0.835423
+       vertex -1.07746 -0.233344 -0.915698
+       vertex -1.06787 -0.312564 -0.910881
+    endloop
+  endfacet
+  facet normal -0.906962 -0.132557 -0.39981
+    outer loop
+       vertex -1.11245 -0.235148 -0.835423
+       vertex -1.06787 -0.312564 -0.910881
+       vertex -1.10233 -0.316262 -0.831472
+    endloop
+  endfacet
+  facet normal -0.891565 -0.217775 -0.397097
+    outer loop
+       vertex -1.10233 -0.316262 -0.831472
+       vertex -1.06787 -0.312564 -0.910881
+       vertex -1.05219 -0.389688 -0.903784
+    endloop
+  endfacet
+  facet normal -0.891367 -0.216536 -0.398217
+    outer loop
+       vertex -1.10233 -0.316262 -0.831472
+       vertex -1.05219 -0.389688 -0.903784
+       vertex -1.08564 -0.395463 -0.825763
+    endloop
+  endfacet
+  facet normal -0.868747 -0.29923 -0.394639
+    outer loop
+       vertex -1.08564 -0.395463 -0.825763
+       vertex -1.05219 -0.389688 -0.903784
+       vertex -1.03065 -0.463669 -0.895101
+    endloop
+  endfacet
+  facet normal -0.868701 -0.298619 -0.395204
+    outer loop
+       vertex -1.08564 -0.395463 -0.825763
+       vertex -1.03065 -0.463669 -0.895101
+       vertex -1.0625 -0.471792 -0.818953
+    endloop
+  endfacet
+  facet normal -0.83823 -0.379977 -0.391138
+    outer loop
+       vertex -1.0625 -0.471792 -0.818953
+       vertex -1.03065 -0.463669 -0.895101
+       vertex -1.00348 -0.533458 -0.885532
+    endloop
+  endfacet
+  facet normal -0.838232 -0.379826 -0.39128
+    outer loop
+       vertex -1.0625 -0.471792 -0.818953
+       vertex -1.00348 -0.533458 -0.885532
+       vertex -1.03304 -0.544293 -0.8117
+    endloop
+  endfacet
+  facet normal -0.798607 -0.460692 -0.387286
+    outer loop
+       vertex -1.03304 -0.544293 -0.8117
+       vertex -1.00348 -0.533458 -0.885532
+       vertex -0.970345 -0.59836 -0.876659
+    endloop
+  endfacet
+  facet normal -0.798628 -0.460514 -0.387455
+    outer loop
+       vertex -1.03304 -0.544293 -0.8117
+       vertex -0.970345 -0.59836 -0.876659
+       vertex -0.997089 -0.612184 -0.805104
+    endloop
+  endfacet
+  facet normal -0.748593 -0.54038 -0.384184
+    outer loop
+       vertex -0.997089 -0.612184 -0.805104
+       vertex -0.970345 -0.59836 -0.876659
+       vertex -0.930906 -0.657682 -0.870068
+    endloop
+  endfacet
+  facet normal -0.748704 -0.539916 -0.384621
+    outer loop
+       vertex -0.997089 -0.612184 -0.805104
+       vertex -0.930906 -0.657682 -0.870068
+       vertex -0.954502 -0.674686 -0.800266
+    endloop
+  endfacet
+  facet normal -0.687653 -0.616956 -0.382751
+    outer loop
+       vertex -0.954502 -0.674686 -0.800266
+       vertex -0.930906 -0.657682 -0.870068
+       vertex -0.884831 -0.710728 -0.867343
+    endloop
+  endfacet
+  facet normal -0.687847 -0.616443 -0.383229
+    outer loop
+       vertex -0.954502 -0.674686 -0.800266
+       vertex -0.884831 -0.710728 -0.867343
+       vertex -0.905121 -0.731018 -0.798286
+    endloop
+  endfacet
+  facet normal -0.874919 -0.0475438 -0.481931
+    outer loop
+       vertex -1.08073 -0.153076 -0.917536
+       vertex -1.0398 -0.153076 -0.991836
+       vertex -1.0367 -0.231872 -0.9897
+    endloop
+  endfacet
+  facet normal -0.874574 -0.0467032 -0.482638
+    outer loop
+       vertex -1.08073 -0.153076 -0.917536
+       vertex -1.0367 -0.231872 -0.9897
+       vertex -1.07746 -0.233344 -0.915698
+    endloop
+  endfacet
+  facet normal -0.866719 -0.135376 -0.480075
+    outer loop
+       vertex -1.07746 -0.233344 -0.915698
+       vertex -1.0367 -0.231872 -0.9897
+       vertex -1.02773 -0.309515 -0.983989
+    endloop
+  endfacet
+  facet normal -0.866301 -0.134108 -0.481184
+    outer loop
+       vertex -1.07746 -0.233344 -0.915698
+       vertex -1.02773 -0.309515 -0.983989
+       vertex -1.06787 -0.312564 -0.910881
+    endloop
+  endfacet
+  facet normal -0.851656 -0.217935 -0.476641
+    outer loop
+       vertex -1.06787 -0.312564 -0.910881
+       vertex -1.02773 -0.309515 -0.983989
+       vertex -1.01326 -0.384851 -0.9754
+    endloop
+  endfacet
+  facet normal -0.851423 -0.217013 -0.477477
+    outer loop
+       vertex -1.06787 -0.312564 -0.910881
+       vertex -1.01326 -0.384851 -0.9754
+       vertex -1.05219 -0.389688 -0.903784
+    endloop
+  endfacet
+  facet normal -0.830274 -0.297355 -0.471407
+    outer loop
+       vertex -1.05219 -0.389688 -0.903784
+       vertex -1.01326 -0.384851 -0.9754
+       vertex -0.993634 -0.456726 -0.964632
+    endloop
+  endfacet
+  facet normal -0.830223 -0.297057 -0.471685
+    outer loop
+       vertex -1.05219 -0.389688 -0.903784
+       vertex -0.993634 -0.456726 -0.964632
+       vertex -1.03065 -0.463669 -0.895101
+    endloop
+  endfacet
+  facet normal -0.801873 -0.375867 -0.46446
+    outer loop
+       vertex -1.03065 -0.463669 -0.895101
+       vertex -0.993634 -0.456726 -0.964632
+       vertex -0.969202 -0.523988 -0.952382
+    endloop
+  endfacet
+  facet normal -0.801874 -0.375875 -0.464452
+    outer loop
+       vertex -1.03065 -0.463669 -0.895101
+       vertex -0.969202 -0.523988 -0.952382
+       vertex -1.00348 -0.533458 -0.885532
+    endloop
+  endfacet
+  facet normal -0.765917 -0.452391 -0.456852
+    outer loop
+       vertex -1.00348 -0.533458 -0.885532
+       vertex -0.969202 -0.523988 -0.952382
+       vertex -0.93974 -0.585783 -0.940583
+    endloop
+  endfacet
+  facet normal -0.765903 -0.453374 -0.4559
+    outer loop
+       vertex -1.00348 -0.533458 -0.885532
+       vertex -0.93974 -0.585783 -0.940583
+       vertex -0.970345 -0.59836 -0.876659
+    endloop
+  endfacet
+  facet normal -0.72117 -0.527497 -0.449066
+    outer loop
+       vertex -0.970345 -0.59836 -0.876659
+       vertex -0.93974 -0.585783 -0.940583
+       vertex -0.905024 -0.64126 -0.931169
+    endloop
+  endfacet
+  facet normal -0.720954 -0.529048 -0.447586
+    outer loop
+       vertex -0.970345 -0.59836 -0.876659
+       vertex -0.905024 -0.64126 -0.931169
+       vertex -0.930906 -0.657682 -0.870068
+    endloop
+  endfacet
+  facet normal -0.665528 -0.600463 -0.443302
+    outer loop
+       vertex -0.930906 -0.657682 -0.870068
+       vertex -0.905024 -0.64126 -0.931169
+       vertex -0.863937 -0.689834 -0.927058
+    endloop
+  endfacet
+  facet normal -0.665441 -0.600759 -0.443032
+    outer loop
+       vertex -0.930906 -0.657682 -0.870068
+       vertex -0.863937 -0.689834 -0.927058
+       vertex -0.884831 -0.710728 -0.867343
+    endloop
+  endfacet
+  facet normal -0.819786 -0.0484137 -0.570619
+    outer loop
+       vertex -1.0398 -0.153076 -0.991836
+       vertex -0.992645 -0.153076 -1.05958
+       vertex -0.989736 -0.230875 -1.05716
+    endloop
+  endfacet
+  facet normal -0.819466 -0.0477769 -0.571132
+    outer loop
+       vertex -1.0398 -0.153076 -0.991836
+       vertex -0.989736 -0.230875 -1.05716
+       vertex -1.0367 -0.231872 -0.9897
+    endloop
+  endfacet
+  facet normal -0.812111 -0.136456 -0.567323
+    outer loop
+       vertex -1.0367 -0.231872 -0.9897
+       vertex -0.989736 -0.230875 -1.05716
+       vertex -0.981485 -0.307433 -1.05056
+    endloop
+  endfacet
+  facet normal -0.811702 -0.135501 -0.568137
+    outer loop
+       vertex -1.0367 -0.231872 -0.9897
+       vertex -0.981485 -0.307433 -1.05056
+       vertex -1.02773 -0.309515 -0.983989
+    endloop
+  endfacet
+  facet normal -0.798289 -0.218088 -0.561402
+    outer loop
+       vertex -1.02773 -0.309515 -0.983989
+       vertex -0.981485 -0.307433 -1.05056
+       vertex -0.968369 -0.381505 -1.04044
+    endloop
+  endfacet
+  facet normal -0.798031 -0.21737 -0.562047
+    outer loop
+       vertex -1.02773 -0.309515 -0.983989
+       vertex -0.968369 -0.381505 -1.04044
+       vertex -1.01326 -0.384851 -0.9754
+    endloop
+  endfacet
+  facet normal -0.778938 -0.295888 -0.552906
+    outer loop
+       vertex -1.01326 -0.384851 -0.9754
+       vertex -0.968369 -0.381505 -1.04044
+       vertex -0.950866 -0.451852 -1.02745
+    endloop
+  endfacet
+  facet normal -0.778845 -0.295566 -0.55321
+    outer loop
+       vertex -1.01326 -0.384851 -0.9754
+       vertex -0.950866 -0.451852 -1.02745
+       vertex -0.993634 -0.456726 -0.964632
+    endloop
+  endfacet
+  facet normal -0.753358 -0.372642 -0.541838
+    outer loop
+       vertex -0.993634 -0.456726 -0.964632
+       vertex -0.950866 -0.451852 -1.02745
+       vertex -0.929451 -0.51723 -1.01226
+    endloop
+  endfacet
+  facet normal -0.753299 -0.372365 -0.542111
+    outer loop
+       vertex -0.993634 -0.456726 -0.964632
+       vertex -0.929451 -0.51723 -1.01226
+       vertex -0.969202 -0.523988 -0.952382
+    endloop
+  endfacet
+  facet normal -0.722684 -0.443829 -0.529853
+    outer loop
+       vertex -0.969202 -0.523988 -0.952382
+       vertex -0.929451 -0.51723 -1.01226
+       vertex -0.90466 -0.576118 -0.996746
+    endloop
+  endfacet
+  facet normal -0.722881 -0.445493 -0.528185
+    outer loop
+       vertex -0.969202 -0.523988 -0.952382
+       vertex -0.90466 -0.576118 -0.996746
+       vertex -0.93974 -0.585783 -0.940583
+    endloop
+  endfacet
+  facet normal -0.685107 -0.513821 -0.51635
+    outer loop
+       vertex -0.93974 -0.585783 -0.940583
+       vertex -0.90466 -0.576118 -0.996746
+       vertex -0.877026 -0.626995 -0.982784
+    endloop
+  endfacet
+  facet normal -0.685089 -0.515975 -0.514221
+    outer loop
+       vertex -0.93974 -0.585783 -0.940583
+       vertex -0.877026 -0.626995 -0.982784
+       vertex -0.905024 -0.64126 -0.931169
+    endloop
+  endfacet
+  facet normal -0.63674 -0.581694 -0.506157
+    outer loop
+       vertex -0.905024 -0.64126 -0.931169
+       vertex -0.877026 -0.626995 -0.982784
+       vertex -0.843516 -0.669413 -0.976191
+    endloop
+  endfacet
+  facet normal -0.636782 -0.581483 -0.506346
+    outer loop
+       vertex -0.905024 -0.64126 -0.931169
+       vertex -0.843516 -0.669413 -0.976191
+       vertex -0.863937 -0.689834 -0.927058
+    endloop
+  endfacet
+  facet normal -0.748534 -0.048843 -0.661295
+    outer loop
+       vertex -0.992645 -0.153076 -1.05958
+       vertex -0.938822 -0.153076 -1.12051
+       vertex -0.93614 -0.230495 -1.11783
+    endloop
+  endfacet
+  facet normal -0.748372 -0.0485713 -0.661499
+    outer loop
+       vertex -0.992645 -0.153076 -1.05958
+       vertex -0.93614 -0.230495 -1.11783
+       vertex -0.989736 -0.230875 -1.05716
+    endloop
+  endfacet
+  facet normal -0.741914 -0.137009 -0.656347
+    outer loop
+       vertex -0.989736 -0.230875 -1.05716
+       vertex -0.93614 -0.230495 -1.11783
+       vertex -0.92868 -0.306633 -1.11037
+    endloop
+  endfacet
+  facet normal -0.741683 -0.136575 -0.656699
+    outer loop
+       vertex -0.989736 -0.230875 -1.05716
+       vertex -0.92868 -0.306633 -1.11037
+       vertex -0.981485 -0.307433 -1.05056
+    endloop
+  endfacet
+  facet normal -0.730102 -0.218198 -0.647565
+    outer loop
+       vertex -0.981485 -0.307433 -1.05056
+       vertex -0.92868 -0.306633 -1.11037
+       vertex -0.917027 -0.380206 -1.09871
+    endloop
+  endfacet
+  facet normal -0.729915 -0.217805 -0.647908
+    outer loop
+       vertex -0.981485 -0.307433 -1.05056
+       vertex -0.917027 -0.380206 -1.09871
+       vertex -0.968369 -0.381505 -1.04044
+    endloop
+  endfacet
+  facet normal -0.71363 -0.295196 -0.635288
+    outer loop
+       vertex -0.968369 -0.381505 -1.04044
+       vertex -0.917027 -0.380206 -1.09871
+       vertex -0.901768 -0.449932 -1.08345
+    endloop
+  endfacet
+  facet normal -0.713493 -0.294869 -0.635594
+    outer loop
+       vertex -0.968369 -0.381505 -1.04044
+       vertex -0.901768 -0.449932 -1.08345
+       vertex -0.950866 -0.451852 -1.02745
+    endloop
+  endfacet
+  facet normal -0.691939 -0.371045 -0.619311
+    outer loop
+       vertex -0.950866 -0.451852 -1.02745
+       vertex -0.901768 -0.449932 -1.08345
+       vertex -0.883489 -0.514528 -1.06518
+    endloop
+  endfacet
+  facet normal -0.691768 -0.370577 -0.619782
+    outer loop
+       vertex -0.950866 -0.451852 -1.02745
+       vertex -0.883489 -0.514528 -1.06518
+       vertex -0.929451 -0.51723 -1.01226
+    endloop
+  endfacet
+  facet normal -0.667106 -0.439022 -0.601855
+    outer loop
+       vertex -0.929451 -0.51723 -1.01226
+       vertex -0.883489 -0.514528 -1.06518
+       vertex -0.863602 -0.572013 -1.04529
+    endloop
+  endfacet
+  facet normal -0.667204 -0.43935 -0.601507
+    outer loop
+       vertex -0.929451 -0.51723 -1.01226
+       vertex -0.863602 -0.572013 -1.04529
+       vertex -0.90466 -0.576118 -0.996746
+    endloop
+  endfacet
+  facet normal -0.637047 -0.505851 -0.581623
+    outer loop
+       vertex -0.90466 -0.576118 -0.996746
+       vertex -0.863602 -0.572013 -1.04529
+       vertex -0.843516 -0.620402 -1.0252
+    endloop
+  endfacet
+  facet normal -0.637008 -0.505665 -0.581828
+    outer loop
+       vertex -0.90466 -0.576118 -0.996746
+       vertex -0.843516 -0.620402 -1.0252
+       vertex -0.877026 -0.626995 -0.982784
+    endloop
+  endfacet
+  facet normal -0.600568 -0.568022 -0.562733
+    outer loop
+       vertex -0.877026 -0.626995 -0.982784
+       vertex -0.843516 -0.620402 -1.0252
+       vertex -0.827436 -0.653333 -1.00912
+    endloop
+  endfacet
+  facet normal -0.600568 -0.562734 -0.568022
+    outer loop
+       vertex -0.877026 -0.626995 -0.982784
+       vertex -0.827436 -0.653333 -1.00912
+       vertex -0.843516 -0.669413 -0.976191
+    endloop
+  endfacet
+  facet normal -0.992246 -0.0422546 -0.11689
+    outer loop
+       vertex -1.20712 -0.153076 -0.457381
+       vertex -1.20336 -0.242838 -0.456883
+       vertex -1.21599 -0.244167 -0.34921
+    endloop
+  endfacet
+  facet normal -0.99229 -0.0419412 -0.116629
+    outer loop
+       vertex -1.20712 -0.153076 -0.457381
+       vertex -1.21599 -0.244167 -0.34921
+       vertex -1.2198 -0.153076 -0.349542
+    endloop
+  endfacet
+  facet normal -0.995935 -0.041959 -0.0797075
+    outer loop
+       vertex -1.2198 -0.153076 -0.349542
+       vertex -1.21599 -0.244167 -0.34921
+       vertex -1.22485 -0.245185 -0.237864
+    endloop
+  endfacet
+  facet normal -0.995958 -0.0417466 -0.0795333
+    outer loop
+       vertex -1.2198 -0.153076 -0.349542
+       vertex -1.22485 -0.245185 -0.237864
+       vertex -1.2287 -0.153076 -0.238072
+    endloop
+  endfacet
+  facet normal -0.998167 -0.0417582 -0.0437977
+    outer loop
+       vertex -1.2287 -0.153076 -0.238072
+       vertex -1.22485 -0.245185 -0.237864
+       vertex -1.22981 -0.245959 -0.124123
+    endloop
+  endfacet
+  facet normal -0.998183 -0.0415597 -0.043636
+    outer loop
+       vertex -1.2287 -0.153076 -0.238072
+       vertex -1.22981 -0.245959 -0.124123
+       vertex -1.23368 -0.153076 -0.124242
+    endloop
+  endfacet
+  facet normal -0.999104 -0.0415525 -0.00802043
+    outer loop
+       vertex -1.23368 -0.153076 -0.124242
+       vertex -1.22981 -0.245959 -0.124123
+       vertex -1.23071 -0.246557 -0.00926336
+    endloop
+  endfacet
+  facet normal -0.999116 -0.0412984 -0.00781355
+    outer loop
+       vertex -1.23368 -0.153076 -0.124242
+       vertex -1.23071 -0.246557 -0.00926336
+       vertex -1.23457 -0.153076 -0.0093227
+    endloop
+  endfacet
+  facet normal -0.998737 -0.0412596 0.0286882
+    outer loop
+       vertex -1.23457 -0.153076 -0.0093227
+       vertex -1.23071 -0.246557 -0.00926336
+       vertex -1.2274 -0.247048 0.105437
+    endloop
+  endfacet
+  facet normal -0.998743 -0.0408892 0.0289919
+    outer loop
+       vertex -1.23457 -0.153076 -0.0093227
+       vertex -1.2274 -0.247048 0.105437
+       vertex -1.23124 -0.153076 0.105413
+    endloop
+  endfacet
+  facet normal -0.992678 -0.0406194 0.113756
+    outer loop
+       vertex -1.23124 -0.153076 0.105413
+       vertex -1.2274 -0.247048 0.105437
+       vertex -1.21498 -0.247661 0.213522
+    endloop
+  endfacet
+  facet normal -0.99263 -0.0398127 0.114455
+    outer loop
+       vertex -1.23124 -0.153076 0.105413
+       vertex -1.21498 -0.247661 0.213522
+       vertex -1.21878 -0.153076 0.213516
+    endloop
+  endfacet
+  facet normal -0.962905 -0.0386107 0.267062
+    outer loop
+       vertex -1.21878 -0.153076 0.213516
+       vertex -1.21498 -0.247661 0.213522
+       vertex -1.18859 -0.248626 0.308537
+    endloop
+  endfacet
+  facet normal -0.962569 -0.0370854 0.268489
+    outer loop
+       vertex -1.21878 -0.153076 0.213516
+       vertex -1.18859 -0.248626 0.308537
+       vertex -1.19227 -0.153076 0.308537
+    endloop
+  endfacet
+  facet normal -0.857519 -0.0330381 0.51339
+    outer loop
+       vertex -1.19227 -0.153076 0.308537
+       vertex -1.18859 -0.248626 0.308537
+       vertex -1.14334 -0.250173 0.384027
+    endloop
+  endfacet
+  facet normal -0.856314 -0.0307597 0.515539
+    outer loop
+       vertex -1.19227 -0.153076 0.308537
+       vertex -1.14334 -0.250173 0.384027
+       vertex -1.14683 -0.153076 0.384027
+    endloop
+  endfacet
+  facet normal -0.984922 -0.12675 -0.117745
+    outer loop
+       vertex -1.20336 -0.242838 -0.456883
+       vertex -1.19208 -0.331668 -0.455637
+       vertex -1.20456 -0.334312 -0.348379
+    endloop
+  endfacet
+  facet normal -0.985101 -0.125966 -0.117085
+    outer loop
+       vertex -1.20336 -0.242838 -0.456883
+       vertex -1.20456 -0.334312 -0.348379
+       vertex -1.21599 -0.244167 -0.34921
+    endloop
+  endfacet
+  facet normal -0.988756 -0.126091 -0.0803903
+    outer loop
+       vertex -1.21599 -0.244167 -0.34921
+       vertex -1.20456 -0.334312 -0.348379
+       vertex -1.21333 -0.336329 -0.237353
+    endloop
+  endfacet
+  facet normal -0.988869 -0.125509 -0.0799082
+    outer loop
+       vertex -1.21599 -0.244167 -0.34921
+       vertex -1.21333 -0.336329 -0.237353
+       vertex -1.22485 -0.245185 -0.237864
+    endloop
+  endfacet
+  facet normal -0.991081 -0.12559 -0.0445664
+    outer loop
+       vertex -1.22485 -0.245185 -0.237864
+       vertex -1.21333 -0.336329 -0.237353
+       vertex -1.21824 -0.337847 -0.123858
+    endloop
+  endfacet
+  facet normal -0.991181 -0.124974 -0.0440594
+    outer loop
+       vertex -1.22485 -0.245185 -0.237864
+       vertex -1.21824 -0.337847 -0.123858
+       vertex -1.22981 -0.245959 -0.124123
+    endloop
+  endfacet
+  facet normal -0.992116 -0.124991 -0.00909693
+    outer loop
+       vertex -1.22981 -0.245959 -0.124123
+       vertex -1.21824 -0.337847 -0.123858
+       vertex -1.21915 -0.338995 -0.00919506
+    endloop
+  endfacet
+  facet normal -0.992229 -0.124139 -0.00839687
+    outer loop
+       vertex -1.22981 -0.245959 -0.124123
+       vertex -1.21915 -0.338995 -0.00919506
+       vertex -1.23071 -0.246557 -0.00926336
+    endloop
+  endfacet
+  facet normal -0.991903 -0.124072 0.027112
+    outer loop
+       vertex -1.23071 -0.246557 -0.00926336
+       vertex -1.21915 -0.338995 -0.00919506
+       vertex -1.2159 -0.339902 0.105336
+    endloop
+  endfacet
+  facet normal -0.992029 -0.122823 0.0281455
+    outer loop
+       vertex -1.23071 -0.246557 -0.00926336
+       vertex -1.2159 -0.339902 0.105336
+       vertex -1.2274 -0.247048 0.105437
+    endloop
+  endfacet
+  facet normal -0.986356 -0.12221 0.110303
+    outer loop
+       vertex -1.2274 -0.247048 0.105437
+       vertex -1.2159 -0.339902 0.105336
+       vertex -1.20369 -0.341054 0.213278
+    endloop
+  endfacet
+  facet normal -0.986417 -0.119603 0.112589
+    outer loop
+       vertex -1.2274 -0.247048 0.105437
+       vertex -1.20369 -0.341054 0.213278
+       vertex -1.21498 -0.247661 0.213522
+    endloop
+  endfacet
+  facet normal -0.958457 -0.116607 0.260313
+    outer loop
+       vertex -1.21498 -0.247661 0.213522
+       vertex -1.20369 -0.341054 0.213278
+       vertex -1.17769 -0.342938 0.308176
+    endloop
+  endfacet
+  facet normal -0.957776 -0.111788 0.264894
+    outer loop
+       vertex -1.21498 -0.247661 0.213522
+       vertex -1.17769 -0.342938 0.308176
+       vertex -1.18859 -0.248626 0.308537
+    endloop
+  endfacet
+  facet normal -0.858035 -0.101167 0.503528
+    outer loop
+       vertex -1.18859 -0.248626 0.308537
+       vertex -1.17769 -0.342938 0.308176
+       vertex -1.13307 -0.346042 0.383572
+    endloop
+  endfacet
+  facet normal -0.854744 -0.0939387 0.510478
+    outer loop
+       vertex -1.18859 -0.248626 0.308537
+       vertex -1.13307 -0.346042 0.383572
+       vertex -1.14334 -0.250173 0.384027
+    endloop
+  endfacet
+  facet normal -0.969991 -0.211992 -0.119066
+    outer loop
+       vertex -1.19208 -0.331668 -0.455637
+       vertex -1.17328 -0.418635 -0.453892
+       vertex -1.18552 -0.422563 -0.347216
+    endloop
+  endfacet
+  facet normal -0.970346 -0.210893 -0.118123
+    outer loop
+       vertex -1.19208 -0.331668 -0.455637
+       vertex -1.18552 -0.422563 -0.347216
+       vertex -1.20456 -0.334312 -0.348379
+    endloop
+  endfacet
+  facet normal -0.974038 -0.211207 -0.0815017
+    outer loop
+       vertex -1.20456 -0.334312 -0.348379
+       vertex -1.18552 -0.422563 -0.347216
+       vertex -1.19413 -0.425542 -0.23665
+    endloop
+  endfacet
+  facet normal -0.974284 -0.210348 -0.0807776
+    outer loop
+       vertex -1.20456 -0.334312 -0.348379
+       vertex -1.19413 -0.425542 -0.23665
+       vertex -1.21333 -0.336329 -0.237353
+    endloop
+  endfacet
+  facet normal -0.976505 -0.210551 -0.04589
+    outer loop
+       vertex -1.21333 -0.336329 -0.237353
+       vertex -1.19413 -0.425542 -0.23665
+       vertex -1.19897 -0.427746 -0.123539
+    endloop
+  endfacet
+  facet normal -0.976755 -0.209569 -0.0450699
+    outer loop
+       vertex -1.21333 -0.336329 -0.237353
+       vertex -1.19897 -0.427746 -0.123539
+       vertex -1.21824 -0.337847 -0.123858
+    endloop
+  endfacet
+  facet normal -0.977714 -0.209654 -0.0109859
+    outer loop
+       vertex -1.21824 -0.337847 -0.123858
+       vertex -1.19897 -0.427746 -0.123539
+       vertex -1.19991 -0.429348 -0.00922753
+    endloop
+  endfacet
+  facet normal -0.978025 -0.208255 -0.00981935
+    outer loop
+       vertex -1.21824 -0.337847 -0.123858
+       vertex -1.19991 -0.429348 -0.00922753
+       vertex -1.21915 -0.338995 -0.00919506
+    endloop
+  endfacet
+  facet normal -0.97778 -0.208215 0.0243501
+    outer loop
+       vertex -1.21915 -0.338995 -0.00919506
+       vertex -1.19991 -0.429348 -0.00922753
+       vertex -1.19681 -0.430522 0.104939
+    endloop
+  endfacet
+  facet normal -0.978171 -0.206162 0.0260732
+    outer loop
+       vertex -1.21915 -0.338995 -0.00919506
+       vertex -1.19681 -0.430522 0.104939
+       vertex -1.2159 -0.339902 0.105336
+    endloop
+  endfacet
+  facet normal -0.973116 -0.205439 0.104119
+    outer loop
+       vertex -1.2159 -0.339902 0.105336
+       vertex -1.19681 -0.430522 0.104939
+       vertex -1.18498 -0.432065 0.212524
+    endloop
+  endfacet
+  facet normal -0.973604 -0.201067 0.108019
+    outer loop
+       vertex -1.2159 -0.339902 0.105336
+       vertex -1.18498 -0.432065 0.212524
+       vertex -1.20369 -0.341054 0.213278
+    endloop
+  endfacet
+  facet normal -0.948502 -0.197067 0.248009
+    outer loop
+       vertex -1.20369 -0.341054 0.213278
+       vertex -1.18498 -0.432065 0.212524
+       vertex -1.15969 -0.434776 0.307092
+    endloop
+  endfacet
+  facet normal -0.948048 -0.188828 0.256026
+    outer loop
+       vertex -1.20369 -0.341054 0.213278
+       vertex -1.15969 -0.434776 0.307092
+       vertex -1.17769 -0.342938 0.308176
+    endloop
+  endfacet
+  facet normal -0.857086 -0.173704 0.485006
+    outer loop
+       vertex -1.17769 -0.342938 0.308176
+       vertex -1.15969 -0.434776 0.307092
+       vertex -1.11623 -0.439453 0.382207
+    endloop
+  endfacet
+  facet normal -0.852301 -0.160939 0.497676
+    outer loop
+       vertex -1.17769 -0.342938 0.308176
+       vertex -1.11623 -0.439453 0.382207
+       vertex -1.13307 -0.346042 0.383572
+    endloop
+  endfacet
+  facet normal -0.946716 -0.298597 -0.120701
+    outer loop
+       vertex -1.17328 -0.418635 -0.453892
+       vertex -1.14699 -0.502805 -0.451898
+       vertex -1.15888 -0.507973 -0.345887
+    endloop
+  endfacet
+  facet normal -0.947247 -0.297353 -0.119601
+    outer loop
+       vertex -1.17328 -0.418635 -0.453892
+       vertex -1.15888 -0.507973 -0.345887
+       vertex -1.18552 -0.422563 -0.347216
+    endloop
+  endfacet
+  facet normal -0.950974 -0.297945 -0.0829254
+    outer loop
+       vertex -1.18552 -0.422563 -0.347216
+       vertex -1.15888 -0.507973 -0.345887
+       vertex -1.16725 -0.51186 -0.235868
+    endloop
+  endfacet
+  facet normal -0.951368 -0.29693 -0.0820472
+    outer loop
+       vertex -1.18552 -0.422563 -0.347216
+       vertex -1.16725 -0.51186 -0.235868
+       vertex -1.19413 -0.425542 -0.23665
+    endloop
+  endfacet
+  facet normal -0.953592 -0.29731 -0.0476353
+    outer loop
+       vertex -1.19413 -0.425542 -0.23665
+       vertex -1.16725 -0.51186 -0.235868
+       vertex -1.172 -0.514662 -0.123256
+    endloop
+  endfacet
+  facet normal -0.954022 -0.296093 -0.0465946
+    outer loop
+       vertex -1.19413 -0.425542 -0.23665
+       vertex -1.172 -0.514662 -0.123256
+       vertex -1.19897 -0.427746 -0.123539
+    endloop
+  endfacet
+  facet normal -0.955003 -0.29629 -0.0134868
+    outer loop
+       vertex -1.19897 -0.427746 -0.123539
+       vertex -1.172 -0.514662 -0.123256
+       vertex -1.17302 -0.516573 -0.00947047
+    endloop
+  endfacet
+  facet normal -0.955565 -0.294536 -0.0119931
+    outer loop
+       vertex -1.19897 -0.427746 -0.123539
+       vertex -1.17302 -0.516573 -0.00947047
+       vertex -1.19991 -0.429348 -0.00922753
+    endloop
+  endfacet
+  facet normal -0.955403 -0.294577 0.0207232
+    outer loop
+       vertex -1.19991 -0.429348 -0.00922753
+       vertex -1.17302 -0.516573 -0.00947047
+       vertex -1.17018 -0.517789 0.104073
+    endloop
+  endfacet
+  facet normal -0.956135 -0.292031 0.0229022
+    outer loop
+       vertex -1.19991 -0.429348 -0.00922753
+       vertex -1.17018 -0.517789 0.104073
+       vertex -1.19681 -0.430522 0.104939
+    endloop
+  endfacet
+  facet normal -0.951819 -0.291434 0.0954258
+    outer loop
+       vertex -1.19681 -0.430522 0.104939
+       vertex -1.17018 -0.517789 0.104073
+       vertex -1.15894 -0.519501 0.210997
+    endloop
+  endfacet
+  facet normal -0.953039 -0.285594 0.10076
+    outer loop
+       vertex -1.19681 -0.430522 0.104939
+       vertex -1.15894 -0.519501 0.210997
+       vertex -1.18498 -0.432065 0.212524
+    endloop
+  endfacet
+  facet normal -0.931625 -0.281472 0.229886
+    outer loop
+       vertex -1.18498 -0.432065 0.212524
+       vertex -1.15894 -0.519501 0.210997
+       vertex -1.13473 -0.522901 0.304924
+    endloop
+  endfacet
+  facet normal -0.932106 -0.269887 0.241536
+    outer loop
+       vertex -1.18498 -0.432065 0.212524
+       vertex -1.13473 -0.522901 0.304924
+       vertex -1.15969 -0.434776 0.307092
+    endloop
+  endfacet
+  facet normal -0.853222 -0.25283 0.456168
+    outer loop
+       vertex -1.15969 -0.434776 0.307092
+       vertex -1.13473 -0.522901 0.304924
+       vertex -1.09301 -0.529179 0.379476
+    endloop
+  endfacet
+  facet normal -0.847828 -0.233889 0.475903
+    outer loop
+       vertex -1.15969 -0.434776 0.307092
+       vertex -1.09301 -0.529179 0.379476
+       vertex -1.11623 -0.439453 0.382207
+    endloop
+  endfacet
+  facet normal -0.913954 -0.386897 -0.122471
+    outer loop
+       vertex -1.14699 -0.502805 -0.451898
+       vertex -1.1132 -0.583246 -0.449905
+       vertex -1.12463 -0.589596 -0.344558
+    endloop
+  endfacet
+  facet normal -0.914619 -0.385678 -0.121348
+    outer loop
+       vertex -1.14699 -0.502805 -0.451898
+       vertex -1.12463 -0.589596 -0.344558
+       vertex -1.15888 -0.507973 -0.345887
+    endloop
+  endfacet
+  facet normal -0.91835 -0.386643 -0.0844948
+    outer loop
+       vertex -1.15888 -0.507973 -0.345887
+       vertex -1.12463 -0.589596 -0.344558
+       vertex -1.13272 -0.594318 -0.235117
+    endloop
+  endfacet
+  facet normal -0.918863 -0.385623 -0.0835786
+    outer loop
+       vertex -1.15888 -0.507973 -0.345887
+       vertex -1.13272 -0.594318 -0.235117
+       vertex -1.16725 -0.51186 -0.235868
+    endloop
+  endfacet
+  facet normal -0.921067 -0.386237 -0.0495646
+    outer loop
+       vertex -1.16725 -0.51186 -0.235868
+       vertex -1.13272 -0.594318 -0.235117
+       vertex -1.13737 -0.597599 -0.123102
+    endloop
+  endfacet
+  facet normal -0.921645 -0.384996 -0.0484685
+    outer loop
+       vertex -1.16725 -0.51186 -0.235868
+       vertex -1.13737 -0.597599 -0.123102
+       vertex -1.172 -0.514662 -0.123256
+    endloop
+  endfacet
+  facet normal -0.922629 -0.385347 -0.0162109
+    outer loop
+       vertex -1.172 -0.514662 -0.123256
+       vertex -1.13737 -0.597599 -0.123102
+       vertex -1.13851 -0.599627 -0.0100336
+    endloop
+  endfacet
+  facet normal -0.923385 -0.383594 -0.0146714
+    outer loop
+       vertex -1.172 -0.514662 -0.123256
+       vertex -1.13851 -0.599627 -0.0100336
+       vertex -1.17302 -0.516573 -0.00947047
+    endloop
+  endfacet
+  facet normal -0.923278 -0.383763 0.0168491
+    outer loop
+       vertex -1.17302 -0.516573 -0.00947047
+       vertex -1.13851 -0.599627 -0.0100336
+       vertex -1.13605 -0.600587 0.102567
+    endloop
+  endfacet
+  facet normal -0.924254 -0.381303 0.0190158
+    outer loop
+       vertex -1.17302 -0.516573 -0.00947047
+       vertex -1.13605 -0.600587 0.102567
+       vertex -1.17018 -0.517789 0.104073
+    endloop
+  endfacet
+  facet normal -0.920675 -0.381023 0.0847291
+    outer loop
+       vertex -1.17018 -0.517789 0.104073
+       vertex -1.13605 -0.600587 0.102567
+       vertex -1.12565 -0.602173 0.208436
+    endloop
+  endfacet
+  facet normal -0.922812 -0.374336 0.0910477
+    outer loop
+       vertex -1.17018 -0.517789 0.104073
+       vertex -1.12565 -0.602173 0.208436
+       vertex -1.15894 -0.519501 0.210997
+    endloop
+  endfacet
+  facet normal -0.905583 -0.370951 0.205705
+    outer loop
+       vertex -1.15894 -0.519501 0.210997
+       vertex -1.12565 -0.602173 0.208436
+       vertex -1.10296 -0.606077 0.30131
+    endloop
+  endfacet
+  facet normal -0.907812 -0.356399 0.221038
+    outer loop
+       vertex -1.15894 -0.519501 0.210997
+       vertex -1.10296 -0.606077 0.30131
+       vertex -1.13473 -0.522901 0.304924
+    endloop
+  endfacet
+  facet normal -0.843993 -0.340423 0.414472
+    outer loop
+       vertex -1.13473 -0.522901 0.304924
+       vertex -1.10296 -0.606077 0.30131
+       vertex -1.06361 -0.613991 0.374925
+    endloop
+  endfacet
+  facet normal -0.839358 -0.314729 0.443197
+    outer loop
+       vertex -1.13473 -0.522901 0.304924
+       vertex -1.06361 -0.613991 0.374925
+       vertex -1.09301 -0.529179 0.379476
+    endloop
+  endfacet
+  facet normal -0.870222 -0.476759 -0.124156
+    outer loop
+       vertex -1.1132 -0.583246 -0.449905
+       vertex -1.07194 -0.659028 -0.44816
+       vertex -1.0828 -0.666484 -0.343395
+    endloop
+  endfacet
+  facet normal -0.870923 -0.475737 -0.123158
+    outer loop
+       vertex -1.1132 -0.583246 -0.449905
+       vertex -1.0828 -0.666484 -0.343395
+       vertex -1.12463 -0.589596 -0.344558
+    endloop
+  endfacet
+  facet normal -0.874594 -0.477172 -0.0859817
+    outer loop
+       vertex -1.12463 -0.589596 -0.344558
+       vertex -1.0828 -0.666484 -0.343395
+       vertex -1.09052 -0.671965 -0.234478
+    endloop
+  endfacet
+  facet normal -0.875139 -0.476317 -0.0851731
+    outer loop
+       vertex -1.12463 -0.589596 -0.344558
+       vertex -1.09052 -0.671965 -0.234478
+       vertex -1.13272 -0.594318 -0.235117
+    endloop
+  endfacet
+  facet normal -0.877289 -0.477207 -0.0513495
+    outer loop
+       vertex -1.13272 -0.594318 -0.235117
+       vertex -1.09052 -0.671965 -0.234478
+       vertex -1.09505 -0.675627 -0.123039
+    endloop
+  endfacet
+  facet normal -0.877897 -0.47619 -0.0504069
+    outer loop
+       vertex -1.13272 -0.594318 -0.235117
+       vertex -1.09505 -0.675627 -0.123039
+       vertex -1.13737 -0.597599 -0.123102
+    endloop
+  endfacet
+  facet normal -0.878872 -0.476693 -0.0186736
+    outer loop
+       vertex -1.13737 -0.597599 -0.123102
+       vertex -1.09505 -0.675627 -0.123039
+       vertex -1.09635 -0.677624 -0.0107065
+    endloop
+  endfacet
+  facet normal -0.879656 -0.475293 -0.0173905
+    outer loop
+       vertex -1.13737 -0.597599 -0.123102
+       vertex -1.09635 -0.677624 -0.0107065
+       vertex -1.13851 -0.599627 -0.0100336
+    endloop
+  endfacet
+  facet normal -0.879599 -0.475527 0.013414
+    outer loop
+       vertex -1.13851 -0.599627 -0.0100336
+       vertex -1.09635 -0.677624 -0.0107065
+       vertex -1.09438 -0.678112 0.100889
+    endloop
+  endfacet
+  facet normal -0.880594 -0.47363 0.0151524
+    outer loop
+       vertex -1.13851 -0.599627 -0.0100336
+       vertex -1.09438 -0.678112 0.100889
+       vertex -1.13605 -0.600587 0.102567
+    endloop
+  endfacet
+  facet normal -0.877855 -0.4734 0.0725468
+    outer loop
+       vertex -1.13605 -0.600587 0.102567
+       vertex -1.09438 -0.678112 0.100889
+       vertex -1.08539 -0.678831 0.204991
+    endloop
+  endfacet
+  facet normal -0.881048 -0.466288 0.0795595
+    outer loop
+       vertex -1.13605 -0.600587 0.102567
+       vertex -1.08539 -0.678831 0.204991
+       vertex -1.12565 -0.602173 0.208436
+    endloop
+  endfacet
+  facet normal -0.868033 -0.463837 0.177128
+    outer loop
+       vertex -1.12565 -0.602173 0.208436
+       vertex -1.08539 -0.678831 0.204991
+       vertex -1.06562 -0.681517 0.294843
+    endloop
+  endfacet
+  facet normal -0.872439 -0.448417 0.19435
+    outer loop
+       vertex -1.12565 -0.602173 0.208436
+       vertex -1.06562 -0.681517 0.294843
+       vertex -1.10296 -0.606077 0.30131
+    endloop
+  endfacet
+  facet normal -0.822864 -0.438232 0.361729
+    outer loop
+       vertex -1.10296 -0.606077 0.30131
+       vertex -1.06562 -0.681517 0.294843
+       vertex -1.03034 -0.689657 0.365244
+    endloop
+  endfacet
+  facet normal -0.821392 -0.411709 0.394729
+    outer loop
+       vertex -1.10296 -0.606077 0.30131
+       vertex -1.03034 -0.689657 0.365244
+       vertex -1.06361 -0.613991 0.374925
+    endloop
+  endfacet
+  facet normal -0.81383 -0.567391 -0.125489
+    outer loop
+       vertex -1.07194 -0.659028 -0.44816
+       vertex -1.02319 -0.729217 -0.446914
+       vertex -1.03338 -0.737691 -0.342564
+    endloop
+  endfacet
+  facet normal -0.814412 -0.566714 -0.124772
+    outer loop
+       vertex -1.07194 -0.659028 -0.44816
+       vertex -1.03338 -0.737691 -0.342564
+       vertex -1.0828 -0.666484 -0.343395
+    endloop
+  endfacet
+  facet normal -0.817913 -0.568704 -0.0871452
+    outer loop
+       vertex -1.0828 -0.666484 -0.343395
+       vertex -1.03338 -0.737691 -0.342564
+       vertex -1.04066 -0.743853 -0.234031
+    endloop
+  endfacet
+  facet normal -0.818363 -0.568144 -0.0865755
+    outer loop
+       vertex -1.0828 -0.666484 -0.343395
+       vertex -1.04066 -0.743853 -0.234031
+       vertex -1.09052 -0.671965 -0.234478
+    endloop
+  endfacet
+  facet normal -0.820405 -0.56935 -0.0526916
+    outer loop
+       vertex -1.09052 -0.671965 -0.234478
+       vertex -1.04066 -0.743853 -0.234031
+       vertex -1.04504 -0.747813 -0.12303
+    endloop
+  endfacet
+  facet normal -0.820886 -0.568714 -0.0520628
+    outer loop
+       vertex -1.09052 -0.671965 -0.234478
+       vertex -1.04504 -0.747813 -0.12303
+       vertex -1.09505 -0.675627 -0.123039
+    endloop
+  endfacet
+  facet normal -0.82183 -0.569365 -0.0204612
+    outer loop
+       vertex -1.09505 -0.675627 -0.123039
+       vertex -1.04504 -0.747813 -0.12303
+       vertex -1.04653 -0.749679 -0.0112786
+    endloop
+  endfacet
+  facet normal -0.822426 -0.568533 -0.0196516
+    outer loop
+       vertex -1.09505 -0.675627 -0.123039
+       vertex -1.04653 -0.749679 -0.0112786
+       vertex -1.09635 -0.677624 -0.0107065
+    endloop
+  endfacet
+  facet normal -0.822421 -0.568773 0.0109732
+    outer loop
+       vertex -1.09635 -0.677624 -0.0107065
+       vertex -1.04653 -0.749679 -0.0112786
+       vertex -1.04513 -0.749562 0.0995073
+    endloop
+  endfacet
+  facet normal -0.823151 -0.567695 0.0120162
+    outer loop
+       vertex -1.09635 -0.677624 -0.0107065
+       vertex -1.04513 -0.749562 0.0995073
+       vertex -1.09438 -0.678112 0.100889
+    endloop
+  endfacet
+  facet normal -0.821185 -0.567302 0.0618327
+    outer loop
+       vertex -1.09438 -0.678112 0.100889
+       vertex -1.04513 -0.749562 0.0995073
+       vertex -1.03842 -0.748227 0.20081
+    endloop
+  endfacet
+  facet normal -0.824372 -0.562031 0.0673164
+    outer loop
+       vertex -1.09438 -0.678112 0.100889
+       vertex -1.03842 -0.748227 0.20081
+       vertex -1.08539 -0.678831 0.204991
+    endloop
+  endfacet
+  facet normal -0.81407 -0.560225 0.153094
+    outer loop
+       vertex -1.08539 -0.678831 0.204991
+       vertex -1.03842 -0.748227 0.20081
+       vertex -1.02399 -0.746438 0.284113
+    endloop
+  endfacet
+  facet normal -0.817942 -0.551584 0.163483
+    outer loop
+       vertex -1.08539 -0.678831 0.204991
+       vertex -1.02399 -0.746438 0.284113
+       vertex -1.06562 -0.681517 0.294843
+    endloop
+  endfacet
+  facet normal -0.778322 -0.54939 0.303951
+    outer loop
+       vertex -1.06562 -0.681517 0.294843
+       vertex -1.02399 -0.746438 0.284113
+       vertex -0.995492 -0.751946 0.347126
+    endloop
+  endfacet
+  facet normal -0.779957 -0.532151 0.329366
+    outer loop
+       vertex -1.06562 -0.681517 0.294843
+       vertex -0.995492 -0.751946 0.347126
+       vertex -1.03034 -0.689657 0.365244
+    endloop
+  endfacet
+  facet normal -0.743161 -0.657109 -0.126173
+    outer loop
+       vertex -1.02319 -0.729217 -0.446914
+       vertex -0.966985 -0.792882 -0.446415
+       vertex -0.976373 -0.802269 -0.342232
+    endloop
+  endfacet
+  facet normal -0.743424 -0.656866 -0.125885
+    outer loop
+       vertex -1.02319 -0.729217 -0.446914
+       vertex -0.976373 -0.802269 -0.342232
+       vertex -1.03338 -0.737691 -0.342564
+    endloop
+  endfacet
+  facet normal -0.746595 -0.659469 -0.0877319
+    outer loop
+       vertex -1.03338 -0.737691 -0.342564
+       vertex -0.976373 -0.802269 -0.342232
+       vertex -0.983135 -0.809032 -0.233855
+    endloop
+  endfacet
+  facet normal -0.746789 -0.659278 -0.0875172
+    outer loop
+       vertex -1.03338 -0.737691 -0.342564
+       vertex -0.983135 -0.809032 -0.233855
+       vertex -1.04066 -0.743853 -0.234031
+    endloop
+  endfacet
+  facet normal -0.748644 -0.660823 -0.053339
+    outer loop
+       vertex -1.04066 -0.743853 -0.234031
+       vertex -0.983135 -0.809032 -0.233855
+       vertex -0.987329 -0.813225 -0.123039
+    endloop
+  endfacet
+  facet normal -0.748835 -0.660624 -0.0531228
+    outer loop
+       vertex -1.04066 -0.743853 -0.234031
+       vertex -0.987329 -0.813225 -0.123039
+       vertex -1.04504 -0.747813 -0.12303
+    endloop
+  endfacet
+  facet normal -0.749722 -0.661411 -0.0212866
+    outer loop
+       vertex -1.04504 -0.747813 -0.12303
+       vertex -0.987329 -0.813225 -0.123039
+       vertex -0.989011 -0.814907 -0.0115394
+    endloop
+  endfacet
+  facet normal -0.749936 -0.661175 -0.0210369
+    outer loop
+       vertex -1.04504 -0.747813 -0.12303
+       vertex -0.989011 -0.814907 -0.0115394
+       vertex -1.04653 -0.749679 -0.0112786
+    endloop
+  endfacet
+  facet normal -0.750005 -0.661359 0.00987881
+    outer loop
+       vertex -1.04653 -0.749679 -0.0112786
+       vertex -0.989011 -0.814907 -0.0115394
+       vertex -0.988238 -0.814134 0.0988907
+    endloop
+  endfacet
+  facet normal -0.750238 -0.661089 0.0101601
+    outer loop
+       vertex -1.04653 -0.749679 -0.0112786
+       vertex -0.988238 -0.814134 0.0988907
+       vertex -1.04513 -0.749562 0.0995073
+    endloop
+  endfacet
+  facet normal -0.748855 -0.660314 0.0565854
+    outer loop
+       vertex -1.04513 -0.749562 0.0995073
+       vertex -0.988238 -0.814134 0.0988907
+       vertex -0.984236 -0.810133 0.198536
+    endloop
+  endfacet
+  facet normal -0.750119 -0.658726 0.058334
+    outer loop
+       vertex -1.04513 -0.749562 0.0995073
+       vertex -0.984236 -0.810133 0.198536
+       vertex -1.03842 -0.748227 0.20081
+    endloop
+  endfacet
+  facet normal -0.742337 -0.654961 0.141285
+    outer loop
+       vertex -1.03842 -0.748227 0.20081
+       vertex -0.984236 -0.810133 0.198536
+       vertex -0.976234 -0.80213 0.277683
+    endloop
+  endfacet
+  facet normal -0.743143 -0.653715 0.142812
+    outer loop
+       vertex -1.03842 -0.748227 0.20081
+       vertex -0.976234 -0.80213 0.277683
+       vertex -1.02399 -0.746438 0.284113
+    endloop
+  endfacet
+  facet normal -0.715155 -0.644467 0.270584
+    outer loop
+       vertex -1.02399 -0.746438 0.284113
+       vertex -0.976234 -0.80213 0.277683
+       vertex -0.966663 -0.79256 0.325773
+    endloop
+  endfacet
+  facet normal -0.714298 -0.647132 0.266455
+    outer loop
+       vertex -1.02399 -0.746438 0.284113
+       vertex -0.966663 -0.79256 0.325773
+       vertex -0.995492 -0.751946 0.347126
+    endloop
+  endfacet
+  facet normal -0.992289 0.0419425 -0.116629
+    outer loop
+       vertex -1.20712 -0.153076 -0.457381
+       vertex -1.2198 -0.153076 -0.349542
+       vertex -1.21599 -0.0619842 -0.34921
+    endloop
+  endfacet
+  facet normal -0.992246 0.0422546 -0.116889
+    outer loop
+       vertex -1.20712 -0.153076 -0.457381
+       vertex -1.21599 -0.0619842 -0.34921
+       vertex -1.20336 -0.0633134 -0.456883
+    endloop
+  endfacet
+  facet normal -0.985101 0.125964 -0.117084
+    outer loop
+       vertex -1.20336 -0.0633134 -0.456883
+       vertex -1.21599 -0.0619842 -0.34921
+       vertex -1.20456 0.0281605 -0.348379
+    endloop
+  endfacet
+  facet normal -0.984922 0.12675 -0.117745
+    outer loop
+       vertex -1.20336 -0.0633134 -0.456883
+       vertex -1.20456 0.0281605 -0.348379
+       vertex -1.19208 0.0255169 -0.455637
+    endloop
+  endfacet
+  facet normal -0.970346 0.210894 -0.118123
+    outer loop
+       vertex -1.19208 0.0255169 -0.455637
+       vertex -1.20456 0.0281605 -0.348379
+       vertex -1.18552 0.116411 -0.347216
+    endloop
+  endfacet
+  facet normal -0.969991 0.211994 -0.119066
+    outer loop
+       vertex -1.19208 0.0255169 -0.455637
+       vertex -1.18552 0.116411 -0.347216
+       vertex -1.17328 0.112483 -0.453892
+    endloop
+  endfacet
+  facet normal -0.947247 0.297354 -0.1196
+    outer loop
+       vertex -1.17328 0.112483 -0.453892
+       vertex -1.18552 0.116411 -0.347216
+       vertex -1.15888 0.201822 -0.345887
+    endloop
+  endfacet
+  facet normal -0.946716 0.298598 -0.120701
+    outer loop
+       vertex -1.17328 0.112483 -0.453892
+       vertex -1.15888 0.201822 -0.345887
+       vertex -1.14699 0.196653 -0.451898
+    endloop
+  endfacet
+  facet normal -0.914619 0.385678 -0.121348
+    outer loop
+       vertex -1.14699 0.196653 -0.451898
+       vertex -1.15888 0.201822 -0.345887
+       vertex -1.12463 0.283444 -0.344558
+    endloop
+  endfacet
+  facet normal -0.913954 0.386896 -0.122471
+    outer loop
+       vertex -1.14699 0.196653 -0.451898
+       vertex -1.12463 0.283444 -0.344558
+       vertex -1.1132 0.277095 -0.449905
+    endloop
+  endfacet
+  facet normal -0.870922 0.475738 -0.123158
+    outer loop
+       vertex -1.1132 0.277095 -0.449905
+       vertex -1.12463 0.283444 -0.344558
+       vertex -1.0828 0.360332 -0.343395
+    endloop
+  endfacet
+  facet normal -0.870222 0.476759 -0.124156
+    outer loop
+       vertex -1.1132 0.277095 -0.449905
+       vertex -1.0828 0.360332 -0.343395
+       vertex -1.07194 0.352876 -0.44816
+    endloop
+  endfacet
+  facet normal -0.814413 0.566714 -0.124771
+    outer loop
+       vertex -1.07194 0.352876 -0.44816
+       vertex -1.0828 0.360332 -0.343395
+       vertex -1.03338 0.431539 -0.342564
+    endloop
+  endfacet
+  facet normal -0.813829 0.567392 -0.12549
+    outer loop
+       vertex -1.07194 0.352876 -0.44816
+       vertex -1.03338 0.431539 -0.342564
+       vertex -1.02319 0.423066 -0.446914
+    endloop
+  endfacet
+  facet normal -0.743424 0.656867 -0.125885
+    outer loop
+       vertex -1.02319 0.423066 -0.446914
+       vertex -1.03338 0.431539 -0.342564
+       vertex -0.976372 0.496118 -0.342232
+    endloop
+  endfacet
+  facet normal -0.743161 0.657109 -0.126172
+    outer loop
+       vertex -1.02319 0.423066 -0.446914
+       vertex -0.976372 0.496118 -0.342232
+       vertex -0.966985 0.48673 -0.446415
+    endloop
+  endfacet
+  facet normal -0.995958 0.0417466 -0.0795333
+    outer loop
+       vertex -1.2198 -0.153076 -0.349542
+       vertex -1.2287 -0.153076 -0.238072
+       vertex -1.22485 -0.0609667 -0.237864
+    endloop
+  endfacet
+  facet normal -0.995935 0.0419603 -0.0797085
+    outer loop
+       vertex -1.2198 -0.153076 -0.349542
+       vertex -1.22485 -0.0609667 -0.237864
+       vertex -1.21599 -0.0619842 -0.34921
+    endloop
+  endfacet
+  facet normal -0.988869 0.125509 -0.0799092
+    outer loop
+       vertex -1.21599 -0.0619842 -0.34921
+       vertex -1.22485 -0.0609667 -0.237864
+       vertex -1.21333 0.0301772 -0.237353
+    endloop
+  endfacet
+  facet normal -0.988756 0.126089 -0.0803902
+    outer loop
+       vertex -1.21599 -0.0619842 -0.34921
+       vertex -1.21333 0.0301772 -0.237353
+       vertex -1.20456 0.0281605 -0.348379
+    endloop
+  endfacet
+  facet normal -0.974283 0.210349 -0.0807775
+    outer loop
+       vertex -1.20456 0.0281605 -0.348379
+       vertex -1.21333 0.0301772 -0.237353
+       vertex -1.19413 0.119391 -0.23665
+    endloop
+  endfacet
+  facet normal -0.974037 0.211208 -0.0815016
+    outer loop
+       vertex -1.20456 0.0281605 -0.348379
+       vertex -1.19413 0.119391 -0.23665
+       vertex -1.18552 0.116411 -0.347216
+    endloop
+  endfacet
+  facet normal -0.951367 0.296931 -0.0820471
+    outer loop
+       vertex -1.18552 0.116411 -0.347216
+       vertex -1.19413 0.119391 -0.23665
+       vertex -1.16725 0.205709 -0.235868
+    endloop
+  endfacet
+  facet normal -0.950974 0.297946 -0.0829254
+    outer loop
+       vertex -1.18552 0.116411 -0.347216
+       vertex -1.16725 0.205709 -0.235868
+       vertex -1.15888 0.201822 -0.345887
+    endloop
+  endfacet
+  facet normal -0.918863 0.385623 -0.0835786
+    outer loop
+       vertex -1.15888 0.201822 -0.345887
+       vertex -1.16725 0.205709 -0.235868
+       vertex -1.13271 0.288166 -0.235117
+    endloop
+  endfacet
+  facet normal -0.918351 0.386643 -0.0844948
+    outer loop
+       vertex -1.15888 0.201822 -0.345887
+       vertex -1.13271 0.288166 -0.235117
+       vertex -1.12463 0.283444 -0.344558
+    endloop
+  endfacet
+  facet normal -0.875138 0.476318 -0.0851731
+    outer loop
+       vertex -1.12463 0.283444 -0.344558
+       vertex -1.13271 0.288166 -0.235117
+       vertex -1.09052 0.365813 -0.234478
+    endloop
+  endfacet
+  facet normal -0.874593 0.477173 -0.0859819
+    outer loop
+       vertex -1.12463 0.283444 -0.344558
+       vertex -1.09052 0.365813 -0.234478
+       vertex -1.0828 0.360332 -0.343395
+    endloop
+  endfacet
+  facet normal -0.818362 0.568145 -0.0865756
+    outer loop
+       vertex -1.0828 0.360332 -0.343395
+       vertex -1.09052 0.365813 -0.234478
+       vertex -1.04065 0.437701 -0.234031
+    endloop
+  endfacet
+  facet normal -0.817913 0.568704 -0.0871444
+    outer loop
+       vertex -1.0828 0.360332 -0.343395
+       vertex -1.04065 0.437701 -0.234031
+       vertex -1.03338 0.431539 -0.342564
+    endloop
+  endfacet
+  facet normal -0.746789 0.659278 -0.0875166
+    outer loop
+       vertex -1.03338 0.431539 -0.342564
+       vertex -1.04065 0.437701 -0.234031
+       vertex -0.983135 0.50288 -0.233855
+    endloop
+  endfacet
+  facet normal -0.746594 0.659469 -0.0877321
+    outer loop
+       vertex -1.03338 0.431539 -0.342564
+       vertex -0.983135 0.50288 -0.233855
+       vertex -0.976372 0.496118 -0.342232
+    endloop
+  endfacet
+  facet normal -0.998183 0.0415597 -0.043636
+    outer loop
+       vertex -1.2287 -0.153076 -0.238072
+       vertex -1.23368 -0.153076 -0.124242
+       vertex -1.22981 -0.0601929 -0.124123
+    endloop
+  endfacet
+  facet normal -0.998167 0.0417582 -0.0437977
+    outer loop
+       vertex -1.2287 -0.153076 -0.238072
+       vertex -1.22981 -0.0601929 -0.124123
+       vertex -1.22485 -0.0609667 -0.237864
+    endloop
+  endfacet
+  facet normal -0.991181 0.124974 -0.0440593
+    outer loop
+       vertex -1.22485 -0.0609667 -0.237864
+       vertex -1.22981 -0.0601929 -0.124123
+       vertex -1.21824 0.0316955 -0.123858
+    endloop
+  endfacet
+  facet normal -0.991081 0.12559 -0.0445664
+    outer loop
+       vertex -1.22485 -0.0609667 -0.237864
+       vertex -1.21824 0.0316955 -0.123858
+       vertex -1.21333 0.0301772 -0.237353
+    endloop
+  endfacet
+  facet normal -0.976754 0.209571 -0.0450699
+    outer loop
+       vertex -1.21333 0.0301772 -0.237353
+       vertex -1.21824 0.0316955 -0.123858
+       vertex -1.19897 0.121595 -0.123539
+    endloop
+  endfacet
+  facet normal -0.976505 0.210553 -0.0458901
+    outer loop
+       vertex -1.21333 0.0301772 -0.237353
+       vertex -1.19897 0.121595 -0.123539
+       vertex -1.19413 0.119391 -0.23665
+    endloop
+  endfacet
+  facet normal -0.954022 0.296094 -0.0465947
+    outer loop
+       vertex -1.19413 0.119391 -0.23665
+       vertex -1.19897 0.121595 -0.123539
+       vertex -1.172 0.20851 -0.123256
+    endloop
+  endfacet
+  facet normal -0.953591 0.297312 -0.0476354
+    outer loop
+       vertex -1.19413 0.119391 -0.23665
+       vertex -1.172 0.20851 -0.123256
+       vertex -1.16725 0.205709 -0.235868
+    endloop
+  endfacet
+  facet normal -0.921644 0.384998 -0.0484687
+    outer loop
+       vertex -1.16725 0.205709 -0.235868
+       vertex -1.172 0.20851 -0.123256
+       vertex -1.13737 0.291448 -0.123102
+    endloop
+  endfacet
+  facet normal -0.921067 0.386237 -0.0495637
+    outer loop
+       vertex -1.16725 0.205709 -0.235868
+       vertex -1.13737 0.291448 -0.123102
+       vertex -1.13271 0.288166 -0.235117
+    endloop
+  endfacet
+  facet normal -0.877897 0.47619 -0.050406
+    outer loop
+       vertex -1.13271 0.288166 -0.235117
+       vertex -1.13737 0.291448 -0.123102
+       vertex -1.09505 0.369475 -0.123039
+    endloop
+  endfacet
+  facet normal -0.877289 0.477209 -0.0513492
+    outer loop
+       vertex -1.13271 0.288166 -0.235117
+       vertex -1.09505 0.369475 -0.123039
+       vertex -1.09052 0.365813 -0.234478
+    endloop
+  endfacet
+  facet normal -0.820886 0.568715 -0.0520625
+    outer loop
+       vertex -1.09052 0.365813 -0.234478
+       vertex -1.09505 0.369475 -0.123039
+       vertex -1.04504 0.441661 -0.12303
+    endloop
+  endfacet
+  facet normal -0.820404 0.569351 -0.0526916
+    outer loop
+       vertex -1.09052 0.365813 -0.234478
+       vertex -1.04504 0.441661 -0.12303
+       vertex -1.04065 0.437701 -0.234031
+    endloop
+  endfacet
+  facet normal -0.748835 0.660624 -0.0531228
+    outer loop
+       vertex -1.04065 0.437701 -0.234031
+       vertex -1.04504 0.441661 -0.12303
+       vertex -0.987328 0.507074 -0.123039
+    endloop
+  endfacet
+  facet normal -0.748644 0.660823 -0.0533393
+    outer loop
+       vertex -1.04065 0.437701 -0.234031
+       vertex -0.987328 0.507074 -0.123039
+       vertex -0.983135 0.50288 -0.233855
+    endloop
+  endfacet
+  facet normal -0.999116 0.0412984 -0.00781355
+    outer loop
+       vertex -1.23368 -0.153076 -0.124242
+       vertex -1.23457 -0.153076 -0.0093227
+       vertex -1.23071 -0.0595947 -0.00926336
+    endloop
+  endfacet
+  facet normal -0.999104 0.0415525 -0.00802043
+    outer loop
+       vertex -1.23368 -0.153076 -0.124242
+       vertex -1.23071 -0.0595947 -0.00926336
+       vertex -1.22981 -0.0601929 -0.124123
+    endloop
+  endfacet
+  facet normal -0.992229 0.12414 -0.00839687
+    outer loop
+       vertex -1.22981 -0.0601929 -0.124123
+       vertex -1.23071 -0.0595947 -0.00926336
+       vertex -1.21915 0.0328437 -0.00919506
+    endloop
+  endfacet
+  facet normal -0.992116 0.124991 -0.00909587
+    outer loop
+       vertex -1.22981 -0.0601929 -0.124123
+       vertex -1.21915 0.0328437 -0.00919506
+       vertex -1.21824 0.0316955 -0.123858
+    endloop
+  endfacet
+  facet normal -0.978025 0.208255 -0.00981828
+    outer loop
+       vertex -1.21824 0.0316955 -0.123858
+       vertex -1.21915 0.0328437 -0.00919506
+       vertex -1.19991 0.123197 -0.00922752
+    endloop
+  endfacet
+  facet normal -0.977714 0.209655 -0.0109858
+    outer loop
+       vertex -1.21824 0.0316955 -0.123858
+       vertex -1.19991 0.123197 -0.00922752
+       vertex -1.19897 0.121595 -0.123539
+    endloop
+  endfacet
+  facet normal -0.955565 0.294537 -0.011993
+    outer loop
+       vertex -1.19897 0.121595 -0.123539
+       vertex -1.19991 0.123197 -0.00922752
+       vertex -1.17302 0.210421 -0.00947047
+    endloop
+  endfacet
+  facet normal -0.955003 0.296291 -0.0134868
+    outer loop
+       vertex -1.19897 0.121595 -0.123539
+       vertex -1.17302 0.210421 -0.00947047
+       vertex -1.172 0.20851 -0.123256
+    endloop
+  endfacet
+  facet normal -0.923385 0.383595 -0.0146713
+    outer loop
+       vertex -1.172 0.20851 -0.123256
+       vertex -1.17302 0.210421 -0.00947047
+       vertex -1.13851 0.293475 -0.0100336
+    endloop
+  endfacet
+  facet normal -0.922629 0.385349 -0.0162111
+    outer loop
+       vertex -1.172 0.20851 -0.123256
+       vertex -1.13851 0.293475 -0.0100336
+       vertex -1.13737 0.291448 -0.123102
+    endloop
+  endfacet
+  facet normal -0.879655 0.475294 -0.0173907
+    outer loop
+       vertex -1.13737 0.291448 -0.123102
+       vertex -1.13851 0.293475 -0.0100336
+       vertex -1.09635 0.371472 -0.0107065
+    endloop
+  endfacet
+  facet normal -0.878871 0.476693 -0.0186728
+    outer loop
+       vertex -1.13737 0.291448 -0.123102
+       vertex -1.09635 0.371472 -0.0107065
+       vertex -1.09505 0.369475 -0.123039
+    endloop
+  endfacet
+  facet normal -0.822426 0.568532 -0.0196509
+    outer loop
+       vertex -1.09505 0.369475 -0.123039
+       vertex -1.09635 0.371472 -0.0107065
+       vertex -1.04653 0.443528 -0.0112786
+    endloop
+  endfacet
+  facet normal -0.82183 0.569365 -0.0204615
+    outer loop
+       vertex -1.09505 0.369475 -0.123039
+       vertex -1.04653 0.443528 -0.0112786
+       vertex -1.04504 0.441661 -0.12303
+    endloop
+  endfacet
+  facet normal -0.749936 0.661176 -0.0210372
+    outer loop
+       vertex -1.04504 0.441661 -0.12303
+       vertex -1.04653 0.443528 -0.0112786
+       vertex -0.98901 0.508756 -0.0115394
+    endloop
+  endfacet
+  facet normal -0.749722 0.66141 -0.0212858
+    outer loop
+       vertex -1.04504 0.441661 -0.12303
+       vertex -0.98901 0.508756 -0.0115394
+       vertex -0.987328 0.507074 -0.123039
+    endloop
+  endfacet
+  facet normal -0.998743 0.0408892 0.0289919
+    outer loop
+       vertex -1.23457 -0.153076 -0.0093227
+       vertex -1.23124 -0.153076 0.105413
+       vertex -1.2274 -0.059104 0.105437
+    endloop
+  endfacet
+  facet normal -0.998737 0.0412595 0.0286882
+    outer loop
+       vertex -1.23457 -0.153076 -0.0093227
+       vertex -1.2274 -0.059104 0.105437
+       vertex -1.23071 -0.0595947 -0.00926336
+    endloop
+  endfacet
+  facet normal -0.992029 0.122824 0.0281454
+    outer loop
+       vertex -1.23071 -0.0595947 -0.00926336
+       vertex -1.2274 -0.059104 0.105437
+       vertex -1.2159 0.0337504 0.105336
+    endloop
+  endfacet
+  facet normal -0.991903 0.124073 0.027112
+    outer loop
+       vertex -1.23071 -0.0595947 -0.00926336
+       vertex -1.2159 0.0337504 0.105336
+       vertex -1.21915 0.0328437 -0.00919506
+    endloop
+  endfacet
+  facet normal -0.97817 0.206163 0.0260732
+    outer loop
+       vertex -1.21915 0.0328437 -0.00919506
+       vertex -1.2159 0.0337504 0.105336
+       vertex -1.19681 0.12437 0.104939
+    endloop
+  endfacet
+  facet normal -0.97778 0.208215 0.0243511
+    outer loop
+       vertex -1.21915 0.0328437 -0.00919506
+       vertex -1.19681 0.12437 0.104939
+       vertex -1.19991 0.123197 -0.00922752
+    endloop
+  endfacet
+  facet normal -0.956134 0.292032 0.0229032
+    outer loop
+       vertex -1.19991 0.123197 -0.00922752
+       vertex -1.19681 0.12437 0.104939
+       vertex -1.17018 0.211637 0.104073
+    endloop
+  endfacet
+  facet normal -0.955403 0.294578 0.0207241
+    outer loop
+       vertex -1.19991 0.123197 -0.00922752
+       vertex -1.17018 0.211637 0.104073
+       vertex -1.17302 0.210421 -0.00947047
+    endloop
+  endfacet
+  facet normal -0.924254 0.381303 0.0190167
+    outer loop
+       vertex -1.17302 0.210421 -0.00947047
+       vertex -1.17018 0.211637 0.104073
+       vertex -1.13605 0.294435 0.102567
+    endloop
+  endfacet
+  facet normal -0.923277 0.383764 0.0168492
+    outer loop
+       vertex -1.17302 0.210421 -0.00947047
+       vertex -1.13605 0.294435 0.102567
+       vertex -1.13851 0.293475 -0.0100336
+    endloop
+  endfacet
+  facet normal -0.880593 0.473631 0.0151525
+    outer loop
+       vertex -1.13851 0.293475 -0.0100336
+       vertex -1.13605 0.294435 0.102567
+       vertex -1.09438 0.371961 0.100889
+    endloop
+  endfacet
+  facet normal -0.879598 0.475529 0.0134138
+    outer loop
+       vertex -1.13851 0.293475 -0.0100336
+       vertex -1.09438 0.371961 0.100889
+       vertex -1.09635 0.371472 -0.0107065
+    endloop
+  endfacet
+  facet normal -0.823151 0.567695 0.0120161
+    outer loop
+       vertex -1.09635 0.371472 -0.0107065
+       vertex -1.09438 0.371961 0.100889
+       vertex -1.04513 0.443411 0.0995073
+    endloop
+  endfacet
+  facet normal -0.822422 0.568772 0.0109735
+    outer loop
+       vertex -1.09635 0.371472 -0.0107065
+       vertex -1.04513 0.443411 0.0995073
+       vertex -1.04653 0.443528 -0.0112786
+    endloop
+  endfacet
+  facet normal -0.750238 0.66109 0.0101604
+    outer loop
+       vertex -1.04653 0.443528 -0.0112786
+       vertex -1.04513 0.443411 0.0995073
+       vertex -0.988237 0.507983 0.0988907
+    endloop
+  endfacet
+  facet normal -0.750004 0.66136 0.00987881
+    outer loop
+       vertex -1.04653 0.443528 -0.0112786
+       vertex -0.988237 0.507983 0.0988907
+       vertex -0.98901 0.508756 -0.0115394
+    endloop
+  endfacet
+  facet normal -0.99263 0.0398127 0.114455
+    outer loop
+       vertex -1.23124 -0.153076 0.105413
+       vertex -1.21878 -0.153076 0.213516
+       vertex -1.21498 -0.058491 0.213522
+    endloop
+  endfacet
+  facet normal -0.992678 0.0406194 0.113756
+    outer loop
+       vertex -1.23124 -0.153076 0.105413
+       vertex -1.21498 -0.058491 0.213522
+       vertex -1.2274 -0.059104 0.105437
+    endloop
+  endfacet
+  facet normal -0.986417 0.119606 0.112589
+    outer loop
+       vertex -1.2274 -0.059104 0.105437
+       vertex -1.21498 -0.058491 0.213522
+       vertex -1.20369 0.0349024 0.213278
+    endloop
+  endfacet
+  facet normal -0.986356 0.122211 0.110304
+    outer loop
+       vertex -1.2274 -0.059104 0.105437
+       vertex -1.20369 0.0349024 0.213278
+       vertex -1.2159 0.0337504 0.105336
+    endloop
+  endfacet
+  facet normal -0.973604 0.201066 0.10802
+    outer loop
+       vertex -1.2159 0.0337504 0.105336
+       vertex -1.20369 0.0349024 0.213278
+       vertex -1.18498 0.125913 0.212524
+    endloop
+  endfacet
+  facet normal -0.973116 0.20544 0.104118
+    outer loop
+       vertex -1.2159 0.0337504 0.105336
+       vertex -1.18498 0.125913 0.212524
+       vertex -1.19681 0.12437 0.104939
+    endloop
+  endfacet
+  facet normal -0.953039 0.285595 0.100759
+    outer loop
+       vertex -1.19681 0.12437 0.104939
+       vertex -1.18498 0.125913 0.212524
+       vertex -1.15894 0.21335 0.210997
+    endloop
+  endfacet
+  facet normal -0.951819 0.291435 0.0954246
+    outer loop
+       vertex -1.19681 0.12437 0.104939
+       vertex -1.15894 0.21335 0.210997
+       vertex -1.17018 0.211637 0.104073
+    endloop
+  endfacet
+  facet normal -0.922812 0.374336 0.0910466
+    outer loop
+       vertex -1.17018 0.211637 0.104073
+       vertex -1.15894 0.21335 0.210997
+       vertex -1.12565 0.296021 0.208436
+    endloop
+  endfacet
+  facet normal -0.920675 0.381023 0.0847281
+    outer loop
+       vertex -1.17018 0.211637 0.104073
+       vertex -1.12565 0.296021 0.208436
+       vertex -1.13605 0.294435 0.102567
+    endloop
+  endfacet
+  facet normal -0.881047 0.46629 0.0795583
+    outer loop
+       vertex -1.13605 0.294435 0.102567
+       vertex -1.12565 0.296021 0.208436
+       vertex -1.08539 0.372679 0.204991
+    endloop
+  endfacet
+  facet normal -0.877854 0.473401 0.0725467
+    outer loop
+       vertex -1.13605 0.294435 0.102567
+       vertex -1.08539 0.372679 0.204991
+       vertex -1.09438 0.371961 0.100889
+    endloop
+  endfacet
+  facet normal -0.824372 0.562032 0.0673164
+    outer loop
+       vertex -1.09438 0.371961 0.100889
+       vertex -1.08539 0.372679 0.204991
+       vertex -1.03842 0.442075 0.20081
+    endloop
+  endfacet
+  facet normal -0.821185 0.567302 0.0618331
+    outer loop
+       vertex -1.09438 0.371961 0.100889
+       vertex -1.03842 0.442075 0.20081
+       vertex -1.04513 0.443411 0.0995073
+    endloop
+  endfacet
+  facet normal -0.750119 0.658725 0.0583344
+    outer loop
+       vertex -1.04513 0.443411 0.0995073
+       vertex -1.03842 0.442075 0.20081
+       vertex -0.984236 0.503981 0.198536
+    endloop
+  endfacet
+  facet normal -0.748855 0.660314 0.0565845
+    outer loop
+       vertex -1.04513 0.443411 0.0995073
+       vertex -0.984236 0.503981 0.198536
+       vertex -0.988237 0.507983 0.0988907
+    endloop
+  endfacet
+  facet normal -0.962569 0.0370854 0.268489
+    outer loop
+       vertex -1.21878 -0.153076 0.213516
+       vertex -1.19227 -0.153076 0.308537
+       vertex -1.18859 -0.0575259 0.308537
+    endloop
+  endfacet
+  facet normal -0.962905 0.0386107 0.267062
+    outer loop
+       vertex -1.21878 -0.153076 0.213516
+       vertex -1.18859 -0.0575259 0.308537
+       vertex -1.21498 -0.058491 0.213522
+    endloop
+  endfacet
+  facet normal -0.957775 0.111791 0.264894
+    outer loop
+       vertex -1.21498 -0.058491 0.213522
+       vertex -1.18859 -0.0575259 0.308537
+       vertex -1.17769 0.0367866 0.308176
+    endloop
+  endfacet
+  facet normal -0.958457 0.116609 0.260313
+    outer loop
+       vertex -1.21498 -0.058491 0.213522
+       vertex -1.17769 0.0367866 0.308176
+       vertex -1.20369 0.0349024 0.213278
+    endloop
+  endfacet
+  facet normal -0.948048 0.188828 0.256027
+    outer loop
+       vertex -1.20369 0.0349024 0.213278
+       vertex -1.17769 0.0367866 0.308176
+       vertex -1.15969 0.128624 0.307092
+    endloop
+  endfacet
+  facet normal -0.948502 0.197066 0.24801
+    outer loop
+       vertex -1.20369 0.0349024 0.213278
+       vertex -1.15969 0.128624 0.307092
+       vertex -1.18498 0.125913 0.212524
+    endloop
+  endfacet
+  facet normal -0.932105 0.269887 0.241537
+    outer loop
+       vertex -1.18498 0.125913 0.212524
+       vertex -1.15969 0.128624 0.307092
+       vertex -1.13473 0.216749 0.304924
+    endloop
+  endfacet
+  facet normal -0.931625 0.281473 0.229886
+    outer loop
+       vertex -1.18498 0.125913 0.212524
+       vertex -1.13473 0.216749 0.304924
+       vertex -1.15894 0.21335 0.210997
+    endloop
+  endfacet
+  facet normal -0.907812 0.356399 0.221038
+    outer loop
+       vertex -1.15894 0.21335 0.210997
+       vertex -1.13473 0.216749 0.304924
+       vertex -1.10296 0.299925 0.30131
+    endloop
+  endfacet
+  facet normal -0.905583 0.370952 0.205706
+    outer loop
+       vertex -1.15894 0.21335 0.210997
+       vertex -1.10296 0.299925 0.30131
+       vertex -1.12565 0.296021 0.208436
+    endloop
+  endfacet
+  facet normal -0.872439 0.448418 0.19435
+    outer loop
+       vertex -1.12565 0.296021 0.208436
+       vertex -1.10296 0.299925 0.30131
+       vertex -1.06562 0.375366 0.294843
+    endloop
+  endfacet
+  facet normal -0.868032 0.46384 0.177127
+    outer loop
+       vertex -1.12565 0.296021 0.208436
+       vertex -1.06562 0.375366 0.294843
+       vertex -1.08539 0.372679 0.204991
+    endloop
+  endfacet
+  facet normal -0.817942 0.551584 0.163482
+    outer loop
+       vertex -1.08539 0.372679 0.204991
+       vertex -1.06562 0.375366 0.294843
+       vertex -1.02399 0.440286 0.284113
+    endloop
+  endfacet
+  facet normal -0.81407 0.560226 0.153093
+    outer loop
+       vertex -1.08539 0.372679 0.204991
+       vertex -1.02399 0.440286 0.284113
+       vertex -1.03842 0.442075 0.20081
+    endloop
+  endfacet
+  facet normal -0.743143 0.653715 0.142811
+    outer loop
+       vertex -1.03842 0.442075 0.20081
+       vertex -1.02399 0.440286 0.284113
+       vertex -0.976233 0.495979 0.277683
+    endloop
+  endfacet
+  facet normal -0.742338 0.654961 0.141286
+    outer loop
+       vertex -1.03842 0.442075 0.20081
+       vertex -0.976233 0.495979 0.277683
+       vertex -0.984236 0.503981 0.198536
+    endloop
+  endfacet
+  facet normal -0.856314 0.0307607 0.515539
+    outer loop
+       vertex -1.19227 -0.153076 0.308537
+       vertex -1.14683 -0.153076 0.384027
+       vertex -1.14334 -0.0559787 0.384027
+    endloop
+  endfacet
+  facet normal -0.857519 0.0330381 0.513391
+    outer loop
+       vertex -1.19227 -0.153076 0.308537
+       vertex -1.14334 -0.0559787 0.384027
+       vertex -1.18859 -0.0575259 0.308537
+    endloop
+  endfacet
+  facet normal -0.854744 0.0939387 0.510479
+    outer loop
+       vertex -1.18859 -0.0575259 0.308537
+       vertex -1.14334 -0.0559787 0.384027
+       vertex -1.13307 0.0398899 0.383572
+    endloop
+  endfacet
+  facet normal -0.858036 0.101169 0.503527
+    outer loop
+       vertex -1.18859 -0.0575259 0.308537
+       vertex -1.13307 0.0398899 0.383572
+       vertex -1.17769 0.0367866 0.308176
+    endloop
+  endfacet
+  facet normal -0.852302 0.160939 0.497675
+    outer loop
+       vertex -1.17769 0.0367866 0.308176
+       vertex -1.13307 0.0398899 0.383572
+       vertex -1.11623 0.133301 0.382207
+    endloop
+  endfacet
+  facet normal -0.857086 0.173704 0.485005
+    outer loop
+       vertex -1.17769 0.0367866 0.308176
+       vertex -1.11623 0.133301 0.382207
+       vertex -1.15969 0.128624 0.307092
+    endloop
+  endfacet
+  facet normal -0.847828 0.233889 0.475902
+    outer loop
+       vertex -1.15969 0.128624 0.307092
+       vertex -1.11623 0.133301 0.382207
+       vertex -1.09301 0.223027 0.379476
+    endloop
+  endfacet
+  facet normal -0.853222 0.252831 0.456167
+    outer loop
+       vertex -1.15969 0.128624 0.307092
+       vertex -1.09301 0.223027 0.379476
+       vertex -1.13473 0.216749 0.304924
+    endloop
+  endfacet
+  facet normal -0.839358 0.314733 0.443196
+    outer loop
+       vertex -1.13473 0.216749 0.304924
+       vertex -1.09301 0.223027 0.379476
+       vertex -1.06361 0.307839 0.374925
+    endloop
+  endfacet
+  facet normal -0.843992 0.340423 0.414474
+    outer loop
+       vertex -1.13473 0.216749 0.304924
+       vertex -1.06361 0.307839 0.374925
+       vertex -1.10296 0.299925 0.30131
+    endloop
+  endfacet
+  facet normal -0.821391 0.411709 0.394731
+    outer loop
+       vertex -1.10296 0.299925 0.30131
+       vertex -1.06361 0.307839 0.374925
+       vertex -1.03034 0.383506 0.365244
+    endloop
+  endfacet
+  facet normal -0.822863 0.438233 0.361729
+    outer loop
+       vertex -1.10296 0.299925 0.30131
+       vertex -1.03034 0.383506 0.365244
+       vertex -1.06562 0.375366 0.294843
+    endloop
+  endfacet
+  facet normal -0.779957 0.532151 0.329367
+    outer loop
+       vertex -1.06562 0.375366 0.294843
+       vertex -1.03034 0.383506 0.365244
+       vertex -0.995492 0.445794 0.347126
+    endloop
+  endfacet
+  facet normal -0.778322 0.54939 0.303951
+    outer loop
+       vertex -1.06562 0.375366 0.294843
+       vertex -0.995492 0.445794 0.347126
+       vertex -1.02399 0.440286 0.284113
+    endloop
+  endfacet
+  facet normal -0.714298 0.647132 0.266455
+    outer loop
+       vertex -1.02399 0.440286 0.284113
+       vertex -0.995492 0.445794 0.347126
+       vertex -0.966663 0.486408 0.325773
+    endloop
+  endfacet
+  facet normal -0.715154 0.644468 0.270584
+    outer loop
+       vertex -1.02399 0.440286 0.284113
+       vertex -0.966663 0.486408 0.325773
+       vertex -0.976233 0.495979 0.277683
+    endloop
+  endfacet
+  facet normal -0.986749 0.042245 -0.15666
+    outer loop
+       vertex -1.20712 -0.153076 -0.457381
+       vertex -1.20336 -0.0633134 -0.456883
+       vertex -1.18712 -0.0650224 -0.559605
+    endloop
+  endfacet
+  facet normal -0.986795 0.042758 -0.156227
+    outer loop
+       vertex -1.20712 -0.153076 -0.457381
+       vertex -1.18712 -0.0650224 -0.559605
+       vertex -1.19083 -0.153076 -0.560317
+    endloop
+  endfacet
+  facet normal -0.97799 0.0427758 -0.204218
+    outer loop
+       vertex -1.19083 -0.153076 -0.560317
+       vertex -1.18712 -0.0650224 -0.559605
+       vertex -1.16685 -0.0669687 -0.657112
+    endloop
+  endfacet
+  facet normal -0.978082 0.0434605 -0.203632
+    outer loop
+       vertex -1.19083 -0.153076 -0.560317
+       vertex -1.16685 -0.0669687 -0.657112
+       vertex -1.17047 -0.153076 -0.658075
+    endloop
+  endfacet
+  facet normal -0.964533 0.0435243 -0.260348
+    outer loop
+       vertex -1.17047 -0.153076 -0.658075
+       vertex -1.16685 -0.0669687 -0.657112
+       vertex -1.1421 -0.06901 -0.74914
+    endloop
+  endfacet
+  facet normal -0.964686 0.0443402 -0.259643
+    outer loop
+       vertex -1.17047 -0.153076 -0.658075
+       vertex -1.1421 -0.06901 -0.74914
+       vertex -1.14563 -0.153076 -0.750381
+    endloop
+  endfacet
+  facet normal -0.944458 0.0444647 -0.325609
+    outer loop
+       vertex -1.14563 -0.153076 -0.750381
+       vertex -1.1421 -0.06901 -0.74914
+       vertex -1.11245 -0.0710038 -0.835423
+    endloop
+  endfacet
+  facet normal -0.944684 0.045364 -0.324829
+    outer loop
+       vertex -1.14563 -0.153076 -0.750381
+       vertex -1.11245 -0.0710038 -0.835423
+       vertex -1.11586 -0.153076 -0.836959
+    endloop
+  endfacet
+  facet normal -0.915375 0.0455524 -0.400016
+    outer loop
+       vertex -1.11586 -0.153076 -0.836959
+       vertex -1.11245 -0.0710038 -0.835423
+       vertex -1.07746 -0.0728077 -0.915698
+    endloop
+  endfacet
+  facet normal -0.915674 0.0464702 -0.399226
+    outer loop
+       vertex -1.11586 -0.153076 -0.836959
+       vertex -1.07746 -0.0728077 -0.915698
+       vertex -1.08073 -0.153076 -0.917536
+    endloop
+  endfacet
+  facet normal -0.874574 0.0467045 -0.482637
+    outer loop
+       vertex -1.08073 -0.153076 -0.917536
+       vertex -1.07746 -0.0728077 -0.915698
+       vertex -1.0367 -0.0742794 -0.9897
+    endloop
+  endfacet
+  facet normal -0.874919 0.0475442 -0.481931
+    outer loop
+       vertex -1.08073 -0.153076 -0.917536
+       vertex -1.0367 -0.0742794 -0.9897
+       vertex -1.0398 -0.153076 -0.991836
+    endloop
+  endfacet
+  facet normal -0.819466 0.0477773 -0.571133
+    outer loop
+       vertex -1.0398 -0.153076 -0.991836
+       vertex -1.0367 -0.0742794 -0.9897
+       vertex -0.989736 -0.0752763 -1.05716
+    endloop
+  endfacet
+  facet normal -0.819786 0.0484149 -0.570619
+    outer loop
+       vertex -1.0398 -0.153076 -0.991836
+       vertex -0.989736 -0.0752763 -1.05716
+       vertex -0.992645 -0.153076 -1.05958
+    endloop
+  endfacet
+  facet normal -0.748372 0.0485724 -0.661498
+    outer loop
+       vertex -0.992645 -0.153076 -1.05958
+       vertex -0.989736 -0.0752763 -1.05716
+       vertex -0.93614 -0.0756561 -1.11783
+    endloop
+  endfacet
+  facet normal -0.748534 0.0488436 -0.661295
+    outer loop
+       vertex -0.992645 -0.153076 -1.05958
+       vertex -0.93614 -0.0756561 -1.11783
+       vertex -0.938822 -0.153076 -1.12051
+    endloop
+  endfacet
+  facet normal -0.979289 0.1266 -0.158006
+    outer loop
+       vertex -1.20336 -0.0633134 -0.456883
+       vertex -1.19208 0.0255169 -0.455637
+       vertex -1.17603 0.022118 -0.557825
+    endloop
+  endfacet
+  facet normal -0.979296 0.127901 -0.156907
+    outer loop
+       vertex -1.20336 -0.0633134 -0.456883
+       vertex -1.17603 0.022118 -0.557825
+       vertex -1.18712 -0.0650224 -0.559605
+    endloop
+  endfacet
+  facet normal -0.970233 0.127745 -0.20574
+    outer loop
+       vertex -1.18712 -0.0650224 -0.559605
+       vertex -1.17603 0.022118 -0.557825
+       vertex -1.156 0.018236 -0.654694
+    endloop
+  endfacet
+  facet normal -0.970313 0.129362 -0.20435
+    outer loop
+       vertex -1.18712 -0.0650224 -0.559605
+       vertex -1.156 0.018236 -0.654694
+       vertex -1.16685 -0.0669687 -0.657112
+    endloop
+  endfacet
+  facet normal -0.956463 0.129225 -0.261687
+    outer loop
+       vertex -1.16685 -0.0669687 -0.657112
+       vertex -1.156 0.018236 -0.654694
+       vertex -1.13157 0.0141429 -0.745993
+    endloop
+  endfacet
+  facet normal -0.95664 0.13097 -0.260166
+    outer loop
+       vertex -1.16685 -0.0669687 -0.657112
+       vertex -1.13157 0.0141429 -0.745993
+       vertex -1.1421 -0.06901 -0.74914
+    endloop
+  endfacet
+  facet normal -0.936134 0.13088 -0.326378
+    outer loop
+       vertex -1.1421 -0.06901 -0.74914
+       vertex -1.13157 0.0141429 -0.745993
+       vertex -1.10233 0.010111 -0.831472
+    endloop
+  endfacet
+  facet normal -0.936416 0.132579 -0.324881
+    outer loop
+       vertex -1.1421 -0.06901 -0.74914
+       vertex -1.10233 0.010111 -0.831472
+       vertex -1.11245 -0.0710038 -0.835423
+    endloop
+  endfacet
+  facet normal -0.906962 0.132557 -0.399812
+    outer loop
+       vertex -1.11245 -0.0710038 -0.835423
+       vertex -1.10233 0.010111 -0.831472
+       vertex -1.06787 0.00641235 -0.910881
+    endloop
+  endfacet
+  facet normal -0.907322 0.134048 -0.398495
+    outer loop
+       vertex -1.11245 -0.0710038 -0.835423
+       vertex -1.06787 0.00641235 -0.910881
+       vertex -1.07746 -0.0728077 -0.915698
+    endloop
+  endfacet
+  facet normal -0.866301 0.13411 -0.481183
+    outer loop
+       vertex -1.07746 -0.0728077 -0.915698
+       vertex -1.06787 0.00641235 -0.910881
+       vertex -1.02773 0.00336352 -0.983989
+    endloop
+  endfacet
+  facet normal -0.866719 0.135377 -0.480074
+    outer loop
+       vertex -1.07746 -0.0728077 -0.915698
+       vertex -1.02773 0.00336352 -0.983989
+       vertex -1.0367 -0.0742794 -0.9897
+    endloop
+  endfacet
+  facet normal -0.811701 0.135502 -0.568137
+    outer loop
+       vertex -1.0367 -0.0742794 -0.9897
+       vertex -1.02773 0.00336352 -0.983989
+       vertex -0.981485 0.00128101 -1.05056
+    endloop
+  endfacet
+  facet normal -0.812111 0.136457 -0.567323
+    outer loop
+       vertex -1.0367 -0.0742794 -0.9897
+       vertex -0.981485 0.00128101 -1.05056
+       vertex -0.989736 -0.0752763 -1.05716
+    endloop
+  endfacet
+  facet normal -0.741683 0.136575 -0.656699
+    outer loop
+       vertex -0.989736 -0.0752763 -1.05716
+       vertex -0.981485 0.00128101 -1.05056
+       vertex -0.92868 0.00048133 -1.11037
+    endloop
+  endfacet
+  facet normal -0.741915 0.13701 -0.656347
+    outer loop
+       vertex -0.989736 -0.0752763 -1.05716
+       vertex -0.92868 0.00048133 -1.11037
+       vertex -0.93614 -0.0756561 -1.11783
+    endloop
+  endfacet
+  facet normal -0.96417 0.211558 -0.160061
+    outer loop
+       vertex -1.19208 0.0255169 -0.455637
+       vertex -1.17328 0.112483 -0.453892
+       vertex -1.15755 0.107432 -0.555333
+    endloop
+  endfacet
+  facet normal -0.964022 0.213401 -0.158496
+    outer loop
+       vertex -1.19208 0.0255169 -0.455637
+       vertex -1.15755 0.107432 -0.555333
+       vertex -1.17603 0.022118 -0.557825
+    endloop
+  endfacet
+  facet normal -0.95472 0.212829 -0.20788
+    outer loop
+       vertex -1.17603 0.022118 -0.557825
+       vertex -1.15755 0.107432 -0.555333
+       vertex -1.13795 0.101636 -0.65129
+    endloop
+  endfacet
+  facet normal -0.954641 0.214987 -0.206012
+    outer loop
+       vertex -1.17603 0.022118 -0.557825
+       vertex -1.13795 0.101636 -0.65129
+       vertex -1.156 0.018236 -0.654694
+    endloop
+  endfacet
+  facet normal -0.940632 0.214291 -0.263233
+    outer loop
+       vertex -1.156 0.018236 -0.654694
+       vertex -1.13795 0.101636 -0.65129
+       vertex -1.11411 0.0954701 -0.741516
+    endloop
+  endfacet
+  facet normal -0.940667 0.216405 -0.26137
+    outer loop
+       vertex -1.156 0.018236 -0.654694
+       vertex -1.11411 0.0954701 -0.741516
+       vertex -1.13157 0.0141429 -0.745993
+    endloop
+  endfacet
+  facet normal -0.920225 0.215608 -0.326648
+    outer loop
+       vertex -1.13157 0.0141429 -0.745993
+       vertex -1.11411 0.0954701 -0.741516
+       vertex -1.08564 0.0893115 -0.825763
+    endloop
+  endfacet
+  facet normal -0.92037 0.217375 -0.325066
+    outer loop
+       vertex -1.13157 0.0141429 -0.745993
+       vertex -1.08564 0.0893115 -0.825763
+       vertex -1.10233 0.010111 -0.831472
+    endloop
+  endfacet
+  facet normal -0.891367 0.216536 -0.398218
+    outer loop
+       vertex -1.10233 0.010111 -0.831472
+       vertex -1.08564 0.0893115 -0.825763
+       vertex -1.05219 0.0835366 -0.903784
+    endloop
+  endfacet
+  facet normal -0.891565 0.217774 -0.397098
+    outer loop
+       vertex -1.10233 0.010111 -0.831472
+       vertex -1.05219 0.0835366 -0.903784
+       vertex -1.06787 0.00641235 -0.910881
+    endloop
+  endfacet
+  facet normal -0.851423 0.217012 -0.477477
+    outer loop
+       vertex -1.06787 0.00641235 -0.910881
+       vertex -1.05219 0.0835366 -0.903784
+       vertex -1.01326 0.0786994 -0.9754
+    endloop
+  endfacet
+  facet normal -0.851657 0.217937 -0.476639
+    outer loop
+       vertex -1.06787 0.00641235 -0.910881
+       vertex -1.01326 0.0786994 -0.9754
+       vertex -1.02773 0.00336352 -0.983989
+    endloop
+  endfacet
+  facet normal -0.798032 0.217372 -0.562045
+    outer loop
+       vertex -1.02773 0.00336352 -0.983989
+       vertex -1.01326 0.0786994 -0.9754
+       vertex -0.968369 0.075354 -1.04044
+    endloop
+  endfacet
+  facet normal -0.798289 0.218088 -0.561403
+    outer loop
+       vertex -1.02773 0.00336352 -0.983989
+       vertex -0.968369 0.075354 -1.04044
+       vertex -0.981485 0.00128101 -1.05056
+    endloop
+  endfacet
+  facet normal -0.729915 0.217805 -0.647908
+    outer loop
+       vertex -0.981485 0.00128101 -1.05056
+       vertex -0.968369 0.075354 -1.04044
+       vertex -0.917027 0.0740541 -1.09871
+    endloop
+  endfacet
+  facet normal -0.730102 0.218198 -0.647565
+    outer loop
+       vertex -0.981485 0.00128101 -1.05056
+       vertex -0.917027 0.0740541 -1.09871
+       vertex -0.92868 0.00048133 -1.11037
+    endloop
+  endfacet
+  facet normal -0.940708 0.297714 -0.162587
+    outer loop
+       vertex -1.17328 0.112483 -0.453892
+       vertex -1.14699 0.196653 -0.451898
+       vertex -1.13171 0.190008 -0.552484
+    endloop
+  endfacet
+  facet normal -0.940346 0.299841 -0.160762
+    outer loop
+       vertex -1.17328 0.112483 -0.453892
+       vertex -1.13171 0.190008 -0.552484
+       vertex -1.15755 0.107432 -0.555333
+    endloop
+  endfacet
+  facet normal -0.930912 0.298599 -0.210336
+    outer loop
+       vertex -1.15755 0.107432 -0.555333
+       vertex -1.13171 0.190008 -0.552484
+       vertex -1.11273 0.182329 -0.647371
+    endloop
+  endfacet
+  facet normal -0.930618 0.300949 -0.20828
+    outer loop
+       vertex -1.15755 0.107432 -0.555333
+       vertex -1.11273 0.182329 -0.647371
+       vertex -1.13795 0.101636 -0.65129
+    endloop
+  endfacet
+  facet normal -0.916709 0.29934 -0.264651
+    outer loop
+       vertex -1.13795 0.101636 -0.65129
+       vertex -1.11273 0.182329 -0.647371
+       vertex -1.08976 0.174059 -0.736286
+    endloop
+  endfacet
+  facet normal -0.916564 0.301387 -0.262824
+    outer loop
+       vertex -1.13795 0.101636 -0.65129
+       vertex -1.08976 0.174059 -0.736286
+       vertex -1.11411 0.0954701 -0.741516
+    endloop
+  endfacet
+  facet normal -0.896637 0.29943 -0.326164
+    outer loop
+       vertex -1.11411 0.0954701 -0.741516
+       vertex -1.08976 0.174059 -0.736286
+       vertex -1.0625 0.165641 -0.818954
+    endloop
+  endfacet
+  facet normal -0.896631 0.300814 -0.324905
+    outer loop
+       vertex -1.11411 0.0954701 -0.741516
+       vertex -1.0625 0.165641 -0.818954
+       vertex -1.08564 0.0893115 -0.825763
+    endloop
+  endfacet
+  facet normal -0.8687 0.298618 -0.395205
+    outer loop
+       vertex -1.08564 0.0893115 -0.825763
+       vertex -1.0625 0.165641 -0.818954
+       vertex -1.03065 0.157517 -0.895101
+    endloop
+  endfacet
+  facet normal -0.868747 0.299231 -0.39464
+    outer loop
+       vertex -1.08564 0.0893115 -0.825763
+       vertex -1.03065 0.157517 -0.895101
+       vertex -1.05219 0.0835366 -0.903784
+    endloop
+  endfacet
+  facet normal -0.830223 0.297057 -0.471685
+    outer loop
+       vertex -1.05219 0.0835366 -0.903784
+       vertex -1.03065 0.157517 -0.895101
+       vertex -0.993634 0.150575 -0.964632
+    endloop
+  endfacet
+  facet normal -0.830274 0.297354 -0.471408
+    outer loop
+       vertex -1.05219 0.0835366 -0.903784
+       vertex -0.993634 0.150575 -0.964632
+       vertex -1.01326 0.0786994 -0.9754
+    endloop
+  endfacet
+  facet normal -0.778845 0.295565 -0.55321
+    outer loop
+       vertex -1.01326 0.0786994 -0.9754
+       vertex -0.993634 0.150575 -0.964632
+       vertex -0.950865 0.1457 -1.02745
+    endloop
+  endfacet
+  facet normal -0.778939 0.295889 -0.552905
+    outer loop
+       vertex -1.01326 0.0786994 -0.9754
+       vertex -0.950865 0.1457 -1.02745
+       vertex -0.968369 0.075354 -1.04044
+    endloop
+  endfacet
+  facet normal -0.713493 0.29487 -0.635594
+    outer loop
+       vertex -0.968369 0.075354 -1.04044
+       vertex -0.950865 0.1457 -1.02745
+       vertex -0.901768 0.14378 -1.08345
+    endloop
+  endfacet
+  facet normal -0.71363 0.295196 -0.635288
+    outer loop
+       vertex -0.968369 0.075354 -1.04044
+       vertex -0.901768 0.14378 -1.08345
+       vertex -0.917027 0.0740541 -1.09871
+    endloop
+  endfacet
+  facet normal -0.907829 0.385385 -0.165303
+    outer loop
+       vertex -1.14699 0.196653 -0.451898
+       vertex -1.1132 0.277095 -0.449905
+       vertex -1.09851 0.268931 -0.549636
+    endloop
+  endfacet
+  facet normal -0.907256 0.387523 -0.163438
+    outer loop
+       vertex -1.14699 0.196653 -0.451898
+       vertex -1.09851 0.268931 -0.549636
+       vertex -1.13171 0.190008 -0.552484
+    endloop
+  endfacet
+  facet normal -0.89789 0.385365 -0.212809
+    outer loop
+       vertex -1.13171 0.190008 -0.552484
+       vertex -1.09851 0.268931 -0.549636
+       vertex -1.08037 0.259412 -0.643408
+    endloop
+  endfacet
+  facet normal -0.897399 0.387587 -0.210836
+    outer loop
+       vertex -1.13171 0.190008 -0.552484
+       vertex -1.08037 0.259412 -0.643408
+       vertex -1.11273 0.182329 -0.647371
+    endloop
+  endfacet
+  facet normal -0.88393 0.384757 -0.265762
+    outer loop
+       vertex -1.11273 0.182329 -0.647371
+       vertex -1.08037 0.259412 -0.643408
+       vertex -1.05861 0.248996 -0.730878
+    endloop
+  endfacet
+  facet normal -0.883648 0.386467 -0.264214
+    outer loop
+       vertex -1.11273 0.182329 -0.647371
+       vertex -1.05861 0.248996 -0.730878
+       vertex -1.08976 0.174059 -0.736286
+    endloop
+  endfacet
+  facet normal -0.8647 0.382975 -0.324998
+    outer loop
+       vertex -1.08976 0.174059 -0.736286
+       vertex -1.05861 0.248996 -0.730878
+       vertex -1.03304 0.238141 -0.8117
+    endloop
+  endfacet
+  facet normal -0.864616 0.38384 -0.3242
+    outer loop
+       vertex -1.08976 0.174059 -0.736286
+       vertex -1.03304 0.238141 -0.8117
+       vertex -1.0625 0.165641 -0.818954
+    endloop
+  endfacet
+  facet normal -0.838231 0.379827 -0.391281
+    outer loop
+       vertex -1.0625 0.165641 -0.818954
+       vertex -1.03304 0.238141 -0.8117
+       vertex -1.00348 0.227306 -0.885532
+    endloop
+  endfacet
+  facet normal -0.838228 0.379978 -0.391139
+    outer loop
+       vertex -1.0625 0.165641 -0.818954
+       vertex -1.00348 0.227306 -0.885532
+       vertex -1.03065 0.157517 -0.895101
+    endloop
+  endfacet
+  facet normal -0.801874 0.375877 -0.464451
+    outer loop
+       vertex -1.03065 0.157517 -0.895101
+       vertex -1.00348 0.227306 -0.885532
+       vertex -0.969201 0.217836 -0.952382
+    endloop
+  endfacet
+  facet normal -0.801873 0.375867 -0.46446
+    outer loop
+       vertex -1.03065 0.157517 -0.895101
+       vertex -0.969201 0.217836 -0.952382
+       vertex -0.993634 0.150575 -0.964632
+    endloop
+  endfacet
+  facet normal -0.7533 0.372365 -0.54211
+    outer loop
+       vertex -0.993634 0.150575 -0.964632
+       vertex -0.969201 0.217836 -0.952382
+       vertex -0.929451 0.211078 -1.01226
+    endloop
+  endfacet
+  facet normal -0.753359 0.372642 -0.541838
+    outer loop
+       vertex -0.993634 0.150575 -0.964632
+       vertex -0.929451 0.211078 -1.01226
+       vertex -0.950865 0.1457 -1.02745
+    endloop
+  endfacet
+  facet normal -0.691767 0.370576 -0.619783
+    outer loop
+       vertex -0.950865 0.1457 -1.02745
+       vertex -0.929451 0.211078 -1.01226
+       vertex -0.883489 0.208377 -1.06518
+    endloop
+  endfacet
+  facet normal -0.691939 0.371045 -0.619311
+    outer loop
+       vertex -0.950865 0.1457 -1.02745
+       vertex -0.883489 0.208377 -1.06518
+       vertex -0.901768 0.14378 -1.08345
+    endloop
+  endfacet
+  facet normal -0.864129 0.474448 -0.167869
+    outer loop
+       vertex -1.1132 0.277095 -0.449905
+       vertex -1.07194 0.352876 -0.44816
+       vertex -1.05797 0.34329 -0.547144
+    endloop
+  endfacet
+  facet normal -0.863427 0.476309 -0.166203
+    outer loop
+       vertex -1.1132 0.277095 -0.449905
+       vertex -1.05797 0.34329 -0.547144
+       vertex -1.09851 0.268931 -0.549636
+    endloop
+  endfacet
+  facet normal -0.854393 0.473021 -0.21509
+    outer loop
+       vertex -1.09851 0.268931 -0.549636
+       vertex -1.05797 0.34329 -0.547144
+       vertex -1.04086 0.332002 -0.639916
+    endloop
+  endfacet
+  facet normal -0.853771 0.474922 -0.213366
+    outer loop
+       vertex -1.09851 0.268931 -0.549636
+       vertex -1.04086 0.332002 -0.639916
+       vertex -1.08037 0.259412 -0.643408
+    endloop
+  endfacet
+  facet normal -0.841086 0.470584 -0.266691
+    outer loop
+       vertex -1.08037 0.259412 -0.643408
+       vertex -1.04086 0.332002 -0.639916
+       vertex -1.02058 0.31944 -0.726046
+    endloop
+  endfacet
+  facet normal -0.840708 0.471991 -0.265395
+    outer loop
+       vertex -1.08037 0.259412 -0.643408
+       vertex -1.02058 0.31944 -0.726046
+       vertex -1.05861 0.248996 -0.730878
+    endloop
+  endfacet
+  facet normal -0.823141 0.466511 -0.323737
+    outer loop
+       vertex -1.05861 0.248996 -0.730878
+       vertex -1.02058 0.31944 -0.726046
+       vertex -0.997089 0.306033 -0.805104
+    endloop
+  endfacet
+  facet normal -0.823009 0.467175 -0.323117
+    outer loop
+       vertex -1.05861 0.248996 -0.730878
+       vertex -0.997089 0.306033 -0.805104
+       vertex -1.03304 0.238141 -0.8117
+    endloop
+  endfacet
+  facet normal -0.798627 0.460515 -0.387454
+    outer loop
+       vertex -1.03304 0.238141 -0.8117
+       vertex -0.997089 0.306033 -0.805104
+       vertex -0.970345 0.292209 -0.876659
+    endloop
+  endfacet
+  facet normal -0.798606 0.460692 -0.387287
+    outer loop
+       vertex -1.03304 0.238141 -0.8117
+       vertex -0.970345 0.292209 -0.876659
+       vertex -1.00348 0.227306 -0.885532
+    endloop
+  endfacet
+  facet normal -0.765903 0.453375 -0.455899
+    outer loop
+       vertex -1.00348 0.227306 -0.885532
+       vertex -0.970345 0.292209 -0.876659
+       vertex -0.93974 0.279632 -0.940583
+    endloop
+  endfacet
+  facet normal -0.765918 0.452391 -0.456851
+    outer loop
+       vertex -1.00348 0.227306 -0.885532
+       vertex -0.93974 0.279632 -0.940583
+       vertex -0.969201 0.217836 -0.952382
+    endloop
+  endfacet
+  facet normal -0.722881 0.445493 -0.528185
+    outer loop
+       vertex -0.969201 0.217836 -0.952382
+       vertex -0.93974 0.279632 -0.940583
+       vertex -0.90466 0.269966 -0.996746
+    endloop
+  endfacet
+  facet normal -0.722684 0.44383 -0.529852
+    outer loop
+       vertex -0.969201 0.217836 -0.952382
+       vertex -0.90466 0.269966 -0.996746
+       vertex -0.929451 0.211078 -1.01226
+    endloop
+  endfacet
+  facet normal -0.667204 0.439351 -0.601506
+    outer loop
+       vertex -0.929451 0.211078 -1.01226
+       vertex -0.90466 0.269966 -0.996746
+       vertex -0.863601 0.265861 -1.04529
+    endloop
+  endfacet
+  facet normal -0.667105 0.439021 -0.601856
+    outer loop
+       vertex -0.929451 0.211078 -1.01226
+       vertex -0.863601 0.265861 -1.04529
+       vertex -0.883489 0.208377 -1.06518
+    endloop
+  endfacet
+  facet normal -0.808013 0.564141 -0.169881
+    outer loop
+       vertex -1.07194 0.352876 -0.44816
+       vertex -1.02319 0.423066 -0.446914
+       vertex -1.0101 0.412171 -0.545364
+    endloop
+  endfacet
+  facet normal -0.807358 0.565441 -0.168671
+    outer loop
+       vertex -1.07194 0.352876 -0.44816
+       vertex -1.0101 0.412171 -0.545364
+       vertex -1.05797 0.34329 -0.547144
+    endloop
+  endfacet
+  facet normal -0.798991 0.560872 -0.216877
+    outer loop
+       vertex -1.05797 0.34329 -0.547144
+       vertex -1.0101 0.412171 -0.545364
+       vertex -0.994213 0.399212 -0.637409
+    endloop
+  endfacet
+  facet normal -0.798387 0.562217 -0.215617
+    outer loop
+       vertex -1.05797 0.34329 -0.547144
+       vertex -0.994213 0.399212 -0.637409
+       vertex -1.04086 0.332002 -0.639916
+    endloop
+  endfacet
+  facet normal -0.786871 0.556157 -0.26744
+    outer loop
+       vertex -1.04086 0.332002 -0.639916
+       vertex -0.994213 0.399212 -0.637409
+       vertex -0.975642 0.384548 -0.722544
+    endloop
+  endfacet
+  facet normal -0.786468 0.557195 -0.266462
+    outer loop
+       vertex -1.04086 0.332002 -0.639916
+       vertex -0.975642 0.384548 -0.722544
+       vertex -1.02058 0.31944 -0.726046
+    endloop
+  endfacet
+  facet normal -0.770714 0.549352 -0.322819
+    outer loop
+       vertex -1.02058 0.31944 -0.726046
+       vertex -0.975642 0.384548 -0.722544
+       vertex -0.954502 0.368535 -0.800266
+    endloop
+  endfacet
+  facet normal -0.770523 0.549954 -0.32225
+    outer loop
+       vertex -1.02058 0.31944 -0.726046
+       vertex -0.954502 0.368535 -0.800266
+       vertex -0.997089 0.306033 -0.805104
+    endloop
+  endfacet
+  facet normal -0.748704 0.539915 -0.384621
+    outer loop
+       vertex -0.997089 0.306033 -0.805104
+       vertex -0.954502 0.368535 -0.800266
+       vertex -0.930906 0.35153 -0.870068
+    endloop
+  endfacet
+  facet normal -0.748594 0.540379 -0.384184
+    outer loop
+       vertex -0.997089 0.306033 -0.805104
+       vertex -0.930906 0.35153 -0.870068
+       vertex -0.970345 0.292209 -0.876659
+    endloop
+  endfacet
+  facet normal -0.720954 0.529048 -0.447587
+    outer loop
+       vertex -0.970345 0.292209 -0.876659
+       vertex -0.930906 0.35153 -0.870068
+       vertex -0.905023 0.335108 -0.931169
+    endloop
+  endfacet
+  facet normal -0.72117 0.527498 -0.449066
+    outer loop
+       vertex -0.970345 0.292209 -0.876659
+       vertex -0.905023 0.335108 -0.931169
+       vertex -0.93974 0.279632 -0.940583
+    endloop
+  endfacet
+  facet normal -0.685089 0.515975 -0.51422
+    outer loop
+       vertex -0.93974 0.279632 -0.940583
+       vertex -0.905023 0.335108 -0.931169
+       vertex -0.877026 0.320843 -0.982784
+    endloop
+  endfacet
+  facet normal -0.685106 0.513821 -0.51635
+    outer loop
+       vertex -0.93974 0.279632 -0.940583
+       vertex -0.877026 0.320843 -0.982784
+       vertex -0.90466 0.269966 -0.996746
+    endloop
+  endfacet
+  facet normal -0.637007 0.505666 -0.581829
+    outer loop
+       vertex -0.90466 0.269966 -0.996746
+       vertex -0.877026 0.320843 -0.982784
+       vertex -0.843516 0.31425 -1.0252
+    endloop
+  endfacet
+  facet normal -0.637047 0.505853 -0.581622
+    outer loop
+       vertex -0.90466 0.269966 -0.996746
+       vertex -0.843516 0.31425 -1.0252
+       vertex -0.863601 0.265861 -1.04529
+    endloop
+  endfacet
+  facet normal -0.737952 0.65286 -0.170881
+    outer loop
+       vertex -1.02319 0.423066 -0.446914
+       vertex -0.966985 0.48673 -0.446415
+       vertex -0.954915 0.474661 -0.544652
+    endloop
+  endfacet
+  facet normal -0.737627 0.653355 -0.170393
+    outer loop
+       vertex -1.02319 0.423066 -0.446914
+       vertex -0.954915 0.474661 -0.544652
+       vertex -1.0101 0.412171 -0.545364
+    endloop
+  endfacet
+  facet normal -0.730333 0.647453 -0.217759
+    outer loop
+       vertex -1.0101 0.412171 -0.545364
+       vertex -0.954915 0.474661 -0.544652
+       vertex -0.940414 0.460159 -0.636401
+    endloop
+  endfacet
+  facet normal -0.730015 0.647986 -0.217235
+    outer loop
+       vertex -1.0101 0.412171 -0.545364
+       vertex -0.940414 0.460159 -0.636401
+       vertex -0.994213 0.399212 -0.637409
+    endloop
+  endfacet
+  facet normal -0.720116 0.640084 -0.267815
+    outer loop
+       vertex -0.994213 0.399212 -0.637409
+       vertex -0.940414 0.460159 -0.636401
+       vertex -0.923732 0.443478 -0.721126
+    endloop
+  endfacet
+  facet normal -0.719871 0.64055 -0.267362
+    outer loop
+       vertex -0.994213 0.399212 -0.637409
+       vertex -0.923732 0.443478 -0.721126
+       vertex -0.975642 0.384548 -0.722544
+    endloop
+  endfacet
+  facet normal -0.706464 0.630064 -0.322379
+    outer loop
+       vertex -0.975642 0.384548 -0.722544
+       vertex -0.923732 0.443478 -0.721126
+       vertex -0.905121 0.424866 -0.798286
+    endloop
+  endfacet
+  facet normal -0.706285 0.630455 -0.322004
+    outer loop
+       vertex -0.975642 0.384548 -0.722544
+       vertex -0.905121 0.424866 -0.798286
+       vertex -0.954502 0.368535 -0.800266
+    endloop
+  endfacet
+  facet normal -0.687847 0.616444 -0.383228
+    outer loop
+       vertex -0.954502 0.368535 -0.800266
+       vertex -0.905121 0.424866 -0.798286
+       vertex -0.88483 0.404576 -0.867343
+    endloop
+  endfacet
+  facet normal -0.687653 0.616956 -0.382751
+    outer loop
+       vertex -0.954502 0.368535 -0.800266
+       vertex -0.88483 0.404576 -0.867343
+       vertex -0.930906 0.35153 -0.870068
+    endloop
+  endfacet
+  facet normal -0.66544 0.600759 -0.443032
+    outer loop
+       vertex -0.930906 0.35153 -0.870068
+       vertex -0.88483 0.404576 -0.867343
+       vertex -0.863937 0.383682 -0.927058
+    endloop
+  endfacet
+  facet normal -0.665528 0.600463 -0.443302
+    outer loop
+       vertex -0.930906 0.35153 -0.870068
+       vertex -0.863937 0.383682 -0.927058
+       vertex -0.905023 0.335108 -0.931169
+    endloop
+  endfacet
+  facet normal -0.636782 0.581483 -0.506347
+    outer loop
+       vertex -0.905023 0.335108 -0.931169
+       vertex -0.863937 0.383682 -0.927058
+       vertex -0.843516 0.363261 -0.976191
+    endloop
+  endfacet
+  facet normal -0.636739 0.581695 -0.506156
+    outer loop
+       vertex -0.905023 0.335108 -0.931169
+       vertex -0.843516 0.363261 -0.976191
+       vertex -0.877026 0.320843 -0.982784
+    endloop
+  endfacet
+  facet normal -0.600567 0.562735 -0.568021
+    outer loop
+       vertex -0.877026 0.320843 -0.982784
+       vertex -0.843516 0.363261 -0.976191
+       vertex -0.827436 0.347181 -1.00912
+    endloop
+  endfacet
+  facet normal -0.600567 0.568022 -0.562734
+    outer loop
+       vertex -0.877026 0.320843 -0.982784
+       vertex -0.827436 0.347181 -1.00912
+       vertex -0.843516 0.31425 -1.0252
+    endloop
+  endfacet
+  facet normal 0.0419438 0.992289 -0.11663
+    outer loop
+       vertex -0.327179 0.726868 -0.457381
+       vertex -0.327179 0.739543 -0.349542
+       vertex -0.236087 0.735731 -0.34921
+    endloop
+  endfacet
+  facet normal 0.0422553 0.992246 -0.116889
+    outer loop
+       vertex -0.327179 0.726868 -0.457381
+       vertex -0.236087 0.735731 -0.34921
+       vertex -0.237416 0.723104 -0.456883
+    endloop
+  endfacet
+  facet normal 0.125964 0.985101 -0.117084
+    outer loop
+       vertex -0.237416 0.723104 -0.456883
+       vertex -0.236087 0.735731 -0.34921
+       vertex -0.145942 0.724303 -0.348379
+    endloop
+  endfacet
+  facet normal 0.126749 0.984922 -0.117744
+    outer loop
+       vertex -0.237416 0.723104 -0.456883
+       vertex -0.145942 0.724303 -0.348379
+       vertex -0.148586 0.711821 -0.455637
+    endloop
+  endfacet
+  facet normal 0.210894 0.970346 -0.118122
+    outer loop
+       vertex -0.148586 0.711821 -0.455637
+       vertex -0.145942 0.724303 -0.348379
+       vertex -0.0576914 0.705265 -0.347216
+    endloop
+  endfacet
+  facet normal 0.211994 0.969991 -0.119065
+    outer loop
+       vertex -0.148586 0.711821 -0.455637
+       vertex -0.0576914 0.705265 -0.347216
+       vertex -0.0616197 0.693029 -0.453892
+    endloop
+  endfacet
+  facet normal 0.297353 0.947247 -0.119599
+    outer loop
+       vertex -0.0616197 0.693029 -0.453892
+       vertex -0.0576914 0.705265 -0.347216
+       vertex 0.0277188 0.678621 -0.345887
+    endloop
+  endfacet
+  facet normal 0.2986 0.946715 -0.120702
+    outer loop
+       vertex -0.0616197 0.693029 -0.453892
+       vertex 0.0277188 0.678621 -0.345887
+       vertex 0.0225503 0.666735 -0.451898
+    endloop
+  endfacet
+  facet normal 0.385679 0.914618 -0.121349
+    outer loop
+       vertex 0.0225503 0.666735 -0.451898
+       vertex 0.0277188 0.678621 -0.345887
+       vertex 0.109341 0.644379 -0.344558
+    endloop
+  endfacet
+  facet normal 0.386896 0.913954 -0.122471
+    outer loop
+       vertex 0.0225503 0.666735 -0.451898
+       vertex 0.109341 0.644379 -0.344558
+       vertex 0.102992 0.63295 -0.449905
+    endloop
+  endfacet
+  facet normal 0.475738 0.870923 -0.123157
+    outer loop
+       vertex 0.102992 0.63295 -0.449905
+       vertex 0.109341 0.644379 -0.344558
+       vertex 0.18623 0.602543 -0.343395
+    endloop
+  endfacet
+  facet normal 0.476759 0.870222 -0.124156
+    outer loop
+       vertex 0.102992 0.63295 -0.449905
+       vertex 0.18623 0.602543 -0.343395
+       vertex 0.178774 0.591681 -0.44816
+    endloop
+  endfacet
+  facet normal 0.566714 0.814413 -0.124771
+    outer loop
+       vertex 0.178774 0.591681 -0.44816
+       vertex 0.18623 0.602543 -0.343395
+       vertex 0.257436 0.553121 -0.342564
+    endloop
+  endfacet
+  facet normal 0.567393 0.813829 -0.12549
+    outer loop
+       vertex 0.178774 0.591681 -0.44816
+       vertex 0.257436 0.553121 -0.342564
+       vertex 0.248963 0.542938 -0.446914
+    endloop
+  endfacet
+  facet normal 0.656867 0.743424 -0.125886
+    outer loop
+       vertex 0.248963 0.542938 -0.446914
+       vertex 0.257436 0.553121 -0.342564
+       vertex 0.322015 0.496117 -0.342232
+    endloop
+  endfacet
+  facet normal 0.657109 0.743161 -0.126173
+    outer loop
+       vertex 0.248963 0.542938 -0.446914
+       vertex 0.322015 0.496117 -0.342232
+       vertex 0.312627 0.48673 -0.446415
+    endloop
+  endfacet
+  facet normal 0.0417479 0.995958 -0.0795322
+    outer loop
+       vertex -0.327179 0.739543 -0.349542
+       vertex -0.327179 0.748444 -0.238072
+       vertex -0.23507 0.7446 -0.237864
+    endloop
+  endfacet
+  facet normal 0.0419616 0.995935 -0.0797075
+    outer loop
+       vertex -0.327179 0.739543 -0.349542
+       vertex -0.23507 0.7446 -0.237864
+       vertex -0.236087 0.735731 -0.34921
+    endloop
+  endfacet
+  facet normal 0.125508 0.988869 -0.0799082
+    outer loop
+       vertex -0.236087 0.735731 -0.34921
+       vertex -0.23507 0.7446 -0.237864
+       vertex -0.143926 0.733073 -0.237353
+    endloop
+  endfacet
+  facet normal 0.126089 0.988756 -0.0803897
+    outer loop
+       vertex -0.236087 0.735731 -0.34921
+       vertex -0.143926 0.733073 -0.237353
+       vertex -0.145942 0.724303 -0.348379
+    endloop
+  endfacet
+  facet normal 0.21035 0.974283 -0.080777
+    outer loop
+       vertex -0.145942 0.724303 -0.348379
+       vertex -0.143926 0.733073 -0.237353
+       vertex -0.054712 0.71387 -0.23665
+    endloop
+  endfacet
+  facet normal 0.211208 0.974037 -0.0815006
+    outer loop
+       vertex -0.145942 0.724303 -0.348379
+       vertex -0.054712 0.71387 -0.23665
+       vertex -0.0576914 0.705265 -0.347216
+    endloop
+  endfacet
+  facet normal 0.29693 0.951368 -0.0820462
+    outer loop
+       vertex -0.0576914 0.705265 -0.347216
+       vertex -0.054712 0.71387 -0.23665
+       vertex 0.031606 0.686997 -0.235868
+    endloop
+  endfacet
+  facet normal 0.297945 0.950974 -0.0829244
+    outer loop
+       vertex -0.0576914 0.705265 -0.347216
+       vertex 0.031606 0.686997 -0.235868
+       vertex 0.0277188 0.678621 -0.345887
+    endloop
+  endfacet
+  facet normal 0.385623 0.918863 -0.0835777
+    outer loop
+       vertex 0.0277188 0.678621 -0.345887
+       vertex 0.031606 0.686997 -0.235868
+       vertex 0.114063 0.65246 -0.235117
+    endloop
+  endfacet
+  facet normal 0.386644 0.91835 -0.0844948
+    outer loop
+       vertex 0.0277188 0.678621 -0.345887
+       vertex 0.114063 0.65246 -0.235117
+       vertex 0.109341 0.644379 -0.344558
+    endloop
+  endfacet
+  facet normal 0.476317 0.875138 -0.0851731
+    outer loop
+       vertex 0.109341 0.644379 -0.344558
+       vertex 0.114063 0.65246 -0.235117
+       vertex 0.191711 0.610261 -0.234478
+    endloop
+  endfacet
+  facet normal 0.477173 0.874593 -0.0859819
+    outer loop
+       vertex 0.109341 0.644379 -0.344558
+       vertex 0.191711 0.610261 -0.234478
+       vertex 0.18623 0.602543 -0.343395
+    endloop
+  endfacet
+  facet normal 0.568146 0.818361 -0.0865757
+    outer loop
+       vertex 0.18623 0.602543 -0.343395
+       vertex 0.191711 0.610261 -0.234478
+       vertex 0.263598 0.5604 -0.234031
+    endloop
+  endfacet
+  facet normal 0.568704 0.817913 -0.0871435
+    outer loop
+       vertex 0.18623 0.602543 -0.343395
+       vertex 0.263598 0.5604 -0.234031
+       vertex 0.257436 0.553121 -0.342564
+    endloop
+  endfacet
+  facet normal 0.659278 0.746789 -0.0875158
+    outer loop
+       vertex 0.257436 0.553121 -0.342564
+       vertex 0.263598 0.5604 -0.234031
+       vertex 0.328777 0.50288 -0.233855
+    endloop
+  endfacet
+  facet normal 0.65947 0.746594 -0.0877314
+    outer loop
+       vertex 0.257436 0.553121 -0.342564
+       vertex 0.328777 0.50288 -0.233855
+       vertex 0.322015 0.496117 -0.342232
+    endloop
+  endfacet
+  facet normal 0.0415603 0.998183 -0.043636
+    outer loop
+       vertex -0.327179 0.748444 -0.238072
+       vertex -0.327179 0.75342 -0.124242
+       vertex -0.234296 0.749558 -0.124123
+    endloop
+  endfacet
+  facet normal 0.0417595 0.998167 -0.0437983
+    outer loop
+       vertex -0.327179 0.748444 -0.238072
+       vertex -0.234296 0.749558 -0.124123
+       vertex -0.23507 0.7446 -0.237864
+    endloop
+  endfacet
+  facet normal 0.124974 0.991181 -0.0440599
+    outer loop
+       vertex -0.23507 0.7446 -0.237864
+       vertex -0.234296 0.749558 -0.124123
+       vertex -0.142407 0.737984 -0.123858
+    endloop
+  endfacet
+  facet normal 0.12559 0.991081 -0.0445664
+    outer loop
+       vertex -0.23507 0.7446 -0.237864
+       vertex -0.142407 0.737984 -0.123858
+       vertex -0.143926 0.733073 -0.237353
+    endloop
+  endfacet
+  facet normal 0.209571 0.976754 -0.0450699
+    outer loop
+       vertex -0.143926 0.733073 -0.237353
+       vertex -0.142407 0.737984 -0.123858
+       vertex -0.0525081 0.71871 -0.123539
+    endloop
+  endfacet
+  facet normal 0.210553 0.976505 -0.0458901
+    outer loop
+       vertex -0.143926 0.733073 -0.237353
+       vertex -0.0525081 0.71871 -0.123539
+       vertex -0.054712 0.71387 -0.23665
+    endloop
+  endfacet
+  facet normal 0.296093 0.954022 -0.0465947
+    outer loop
+       vertex -0.054712 0.71387 -0.23665
+       vertex -0.0525081 0.71871 -0.123539
+       vertex 0.0344075 0.691749 -0.123256
+    endloop
+  endfacet
+  facet normal 0.29731 0.953592 -0.0476355
+    outer loop
+       vertex -0.054712 0.71387 -0.23665
+       vertex 0.0344075 0.691749 -0.123256
+       vertex 0.031606 0.686997 -0.235868
+    endloop
+  endfacet
+  facet normal 0.384998 0.921644 -0.0484687
+    outer loop
+       vertex 0.031606 0.686997 -0.235868
+       vertex 0.0344075 0.691749 -0.123256
+       vertex 0.117345 0.657112 -0.123102
+    endloop
+  endfacet
+  facet normal 0.386237 0.921067 -0.0495637
+    outer loop
+       vertex 0.031606 0.686997 -0.235868
+       vertex 0.117345 0.657112 -0.123102
+       vertex 0.114063 0.65246 -0.235117
+    endloop
+  endfacet
+  facet normal 0.47619 0.877897 -0.050406
+    outer loop
+       vertex 0.114063 0.65246 -0.235117
+       vertex 0.117345 0.657112 -0.123102
+       vertex 0.195372 0.614792 -0.123039
+    endloop
+  endfacet
+  facet normal 0.477208 0.877289 -0.0513487
+    outer loop
+       vertex 0.114063 0.65246 -0.235117
+       vertex 0.195372 0.614792 -0.123039
+       vertex 0.191711 0.610261 -0.234478
+    endloop
+  endfacet
+  facet normal 0.568715 0.820885 -0.0520621
+    outer loop
+       vertex 0.191711 0.610261 -0.234478
+       vertex 0.195372 0.614792 -0.123039
+       vertex 0.267558 0.564781 -0.12303
+    endloop
+  endfacet
+  facet normal 0.569352 0.820404 -0.0526916
+    outer loop
+       vertex 0.191711 0.610261 -0.234478
+       vertex 0.267558 0.564781 -0.12303
+       vertex 0.263598 0.5604 -0.234031
+    endloop
+  endfacet
+  facet normal 0.660624 0.748835 -0.0531228
+    outer loop
+       vertex 0.263598 0.5604 -0.234031
+       vertex 0.267558 0.564781 -0.12303
+       vertex 0.332971 0.507073 -0.123039
+    endloop
+  endfacet
+  facet normal 0.660823 0.748644 -0.0533389
+    outer loop
+       vertex 0.263598 0.5604 -0.234031
+       vertex 0.332971 0.507073 -0.123039
+       vertex 0.328777 0.50288 -0.233855
+    endloop
+  endfacet
+  facet normal 0.0412984 0.999116 -0.00781407
+    outer loop
+       vertex -0.327179 0.75342 -0.124242
+       vertex -0.327179 0.754319 -0.0093227
+       vertex -0.233697 0.750456 -0.00926336
+    endloop
+  endfacet
+  facet normal 0.0415531 0.999104 -0.00802148
+    outer loop
+       vertex -0.327179 0.75342 -0.124242
+       vertex -0.233697 0.750456 -0.00926336
+       vertex -0.234296 0.749558 -0.124123
+    endloop
+  endfacet
+  facet normal 0.124141 0.992229 -0.00839792
+    outer loop
+       vertex -0.234296 0.749558 -0.124123
+       vertex -0.233697 0.750456 -0.00926336
+       vertex -0.141259 0.738891 -0.00919506
+    endloop
+  endfacet
+  facet normal 0.124991 0.992116 -0.00909641
+    outer loop
+       vertex -0.234296 0.749558 -0.124123
+       vertex -0.141259 0.738891 -0.00919506
+       vertex -0.142407 0.737984 -0.123858
+    endloop
+  endfacet
+  facet normal 0.208256 0.978025 -0.00981885
+    outer loop
+       vertex -0.142407 0.737984 -0.123858
+       vertex -0.141259 0.738891 -0.00919506
+       vertex -0.0509061 0.719651 -0.00922752
+    endloop
+  endfacet
+  facet normal 0.209656 0.977714 -0.0109858
+    outer loop
+       vertex -0.142407 0.737984 -0.123858
+       vertex -0.0509061 0.719651 -0.00922752
+       vertex -0.0525081 0.71871 -0.123539
+    endloop
+  endfacet
+  facet normal 0.294536 0.955565 -0.011993
+    outer loop
+       vertex -0.0525081 0.71871 -0.123539
+       vertex -0.0509061 0.719651 -0.00922752
+       vertex 0.0363185 0.692763 -0.00947047
+    endloop
+  endfacet
+  facet normal 0.29629 0.955003 -0.0134868
+    outer loop
+       vertex -0.0525081 0.71871 -0.123539
+       vertex 0.0363185 0.692763 -0.00947047
+       vertex 0.0344075 0.691749 -0.123256
+    endloop
+  endfacet
+  facet normal 0.383595 0.923385 -0.0146713
+    outer loop
+       vertex 0.0344075 0.691749 -0.123256
+       vertex 0.0363185 0.692763 -0.00947047
+       vertex 0.119372 0.658252 -0.0100336
+    endloop
+  endfacet
+  facet normal 0.385349 0.922629 -0.0162112
+    outer loop
+       vertex 0.0344075 0.691749 -0.123256
+       vertex 0.119372 0.658252 -0.0100336
+       vertex 0.117345 0.657112 -0.123102
+    endloop
+  endfacet
+  facet normal 0.475295 0.879655 -0.0173909
+    outer loop
+       vertex 0.117345 0.657112 -0.123102
+       vertex 0.119372 0.658252 -0.0100336
+       vertex 0.19737 0.616095 -0.0107065
+    endloop
+  endfacet
+  facet normal 0.476693 0.878872 -0.0186723
+    outer loop
+       vertex 0.117345 0.657112 -0.123102
+       vertex 0.19737 0.616095 -0.0107065
+       vertex 0.195372 0.614792 -0.123039
+    endloop
+  endfacet
+  facet normal 0.568533 0.822426 -0.0196503
+    outer loop
+       vertex 0.195372 0.614792 -0.123039
+       vertex 0.19737 0.616095 -0.0107065
+       vertex 0.269425 0.56627 -0.0112786
+    endloop
+  endfacet
+  facet normal 0.569366 0.82183 -0.0204614
+    outer loop
+       vertex 0.195372 0.614792 -0.123039
+       vertex 0.269425 0.56627 -0.0112786
+       vertex 0.267558 0.564781 -0.12303
+    endloop
+  endfacet
+  facet normal 0.661175 0.749936 -0.0210371
+    outer loop
+       vertex 0.267558 0.564781 -0.12303
+       vertex 0.269425 0.56627 -0.0112786
+       vertex 0.334653 0.508755 -0.0115394
+    endloop
+  endfacet
+  facet normal 0.661411 0.749722 -0.0212866
+    outer loop
+       vertex 0.267558 0.564781 -0.12303
+       vertex 0.334653 0.508755 -0.0115394
+       vertex 0.332971 0.507073 -0.123039
+    endloop
+  endfacet
+  facet normal 0.0408905 0.998743 0.0289919
+    outer loop
+       vertex -0.327179 0.754319 -0.0093227
+       vertex -0.327179 0.750989 0.105413
+       vertex -0.233207 0.747141 0.105437
+    endloop
+  endfacet
+  facet normal 0.0412595 0.998736 0.0286893
+    outer loop
+       vertex -0.327179 0.754319 -0.0093227
+       vertex -0.233207 0.747141 0.105437
+       vertex -0.233697 0.750456 -0.00926336
+    endloop
+  endfacet
+  facet normal 0.122825 0.992029 0.0281465
+    outer loop
+       vertex -0.233697 0.750456 -0.00926336
+       vertex -0.233207 0.747141 0.105437
+       vertex -0.140352 0.735647 0.105336
+    endloop
+  endfacet
+  facet normal 0.124074 0.991903 0.027113
+    outer loop
+       vertex -0.233697 0.750456 -0.00926336
+       vertex -0.140352 0.735647 0.105336
+       vertex -0.141259 0.738891 -0.00919506
+    endloop
+  endfacet
+  facet normal 0.206162 0.97817 0.0260742
+    outer loop
+       vertex -0.141259 0.738891 -0.00919506
+       vertex -0.140352 0.735647 0.105336
+       vertex -0.0497327 0.716558 0.104939
+    endloop
+  endfacet
+  facet normal 0.208216 0.97778 0.0243505
+    outer loop
+       vertex -0.141259 0.738891 -0.00919506
+       vertex -0.0497327 0.716558 0.104939
+       vertex -0.0509061 0.719651 -0.00922752
+    endloop
+  endfacet
+  facet normal 0.292032 0.956134 0.0229026
+    outer loop
+       vertex -0.0509061 0.719651 -0.00922752
+       vertex -0.0497327 0.716558 0.104939
+       vertex 0.0375347 0.689925 0.104073
+    endloop
+  endfacet
+  facet normal 0.294577 0.955403 0.020724
+    outer loop
+       vertex -0.0509061 0.719651 -0.00922752
+       vertex 0.0375347 0.689925 0.104073
+       vertex 0.0363185 0.692763 -0.00947047
+    endloop
+  endfacet
+  facet normal 0.381304 0.924254 0.0190165
+    outer loop
+       vertex 0.0363185 0.692763 -0.00947047
+       vertex 0.0375347 0.689925 0.104073
+       vertex 0.120333 0.655797 0.102567
+    endloop
+  endfacet
+  facet normal 0.383764 0.923278 0.0168496
+    outer loop
+       vertex 0.0363185 0.692763 -0.00947047
+       vertex 0.120333 0.655797 0.102567
+       vertex 0.119372 0.658252 -0.0100336
+    endloop
+  endfacet
+  facet normal 0.47363 0.880593 0.0151529
+    outer loop
+       vertex 0.119372 0.658252 -0.0100336
+       vertex 0.120333 0.655797 0.102567
+       vertex 0.197858 0.614129 0.100889
+    endloop
+  endfacet
+  facet normal 0.475529 0.879598 0.0134131
+    outer loop
+       vertex 0.119372 0.658252 -0.0100336
+       vertex 0.197858 0.614129 0.100889
+       vertex 0.19737 0.616095 -0.0107065
+    endloop
+  endfacet
+  facet normal 0.567696 0.823151 0.0120153
+    outer loop
+       vertex 0.19737 0.616095 -0.0107065
+       vertex 0.197858 0.614129 0.100889
+       vertex 0.269308 0.564873 0.0995073
+    endloop
+  endfacet
+  facet normal 0.568773 0.822422 0.0109736
+    outer loop
+       vertex 0.19737 0.616095 -0.0107065
+       vertex 0.269308 0.564873 0.0995073
+       vertex 0.269425 0.56627 -0.0112786
+    endloop
+  endfacet
+  facet normal 0.66109 0.750238 0.0101605
+    outer loop
+       vertex 0.269425 0.56627 -0.0112786
+       vertex 0.269308 0.564873 0.0995073
+       vertex 0.33388 0.507982 0.0988907
+    endloop
+  endfacet
+  facet normal 0.661359 0.750004 0.00987957
+    outer loop
+       vertex 0.269425 0.56627 -0.0112786
+       vertex 0.33388 0.507982 0.0988907
+       vertex 0.334653 0.508755 -0.0115394
+    endloop
+  endfacet
+  facet normal 0.0398126 0.99263 0.114456
+    outer loop
+       vertex -0.327179 0.750989 0.105413
+       vertex -0.327179 0.738524 0.213516
+       vertex -0.232594 0.734729 0.213522
+    endloop
+  endfacet
+  facet normal 0.0406207 0.992678 0.113756
+    outer loop
+       vertex -0.327179 0.750989 0.105413
+       vertex -0.232594 0.734729 0.213522
+       vertex -0.233207 0.747141 0.105437
+    endloop
+  endfacet
+  facet normal 0.119605 0.986417 0.11259
+    outer loop
+       vertex -0.233207 0.747141 0.105437
+       vertex -0.232594 0.734729 0.213522
+       vertex -0.1392 0.723433 0.213278
+    endloop
+  endfacet
+  facet normal 0.122212 0.986356 0.110304
+    outer loop
+       vertex -0.233207 0.747141 0.105437
+       vertex -0.1392 0.723433 0.213278
+       vertex -0.140352 0.735647 0.105336
+    endloop
+  endfacet
+  facet normal 0.201067 0.973604 0.108019
+    outer loop
+       vertex -0.140352 0.735647 0.105336
+       vertex -0.1392 0.723433 0.213278
+       vertex -0.0481896 0.704721 0.212524
+    endloop
+  endfacet
+  facet normal 0.20544 0.973116 0.104119
+    outer loop
+       vertex -0.140352 0.735647 0.105336
+       vertex -0.0481896 0.704721 0.212524
+       vertex -0.0497327 0.716558 0.104939
+    endloop
+  endfacet
+  facet normal 0.285595 0.953039 0.10076
+    outer loop
+       vertex -0.0497327 0.716558 0.104939
+       vertex -0.0481896 0.704721 0.212524
+       vertex 0.0392471 0.678681 0.210997
+    endloop
+  endfacet
+  facet normal 0.291434 0.951819 0.0954256
+    outer loop
+       vertex -0.0497327 0.716558 0.104939
+       vertex 0.0392471 0.678681 0.210997
+       vertex 0.0375347 0.689925 0.104073
+    endloop
+  endfacet
+  facet normal 0.374337 0.922812 0.0910476
+    outer loop
+       vertex 0.0375347 0.689925 0.104073
+       vertex 0.0392471 0.678681 0.210997
+       vertex 0.121918 0.645398 0.208436
+    endloop
+  endfacet
+  facet normal 0.381024 0.920675 0.0847285
+    outer loop
+       vertex 0.0375347 0.689925 0.104073
+       vertex 0.121918 0.645398 0.208436
+       vertex 0.120333 0.655797 0.102567
+    endloop
+  endfacet
+  facet normal 0.466289 0.881048 0.0795589
+    outer loop
+       vertex 0.120333 0.655797 0.102567
+       vertex 0.121918 0.645398 0.208436
+       vertex 0.198576 0.605139 0.204991
+    endloop
+  endfacet
+  facet normal 0.473401 0.877855 0.0725468
+    outer loop
+       vertex 0.120333 0.655797 0.102567
+       vertex 0.198576 0.605139 0.204991
+       vertex 0.197858 0.614129 0.100889
+    endloop
+  endfacet
+  facet normal 0.562033 0.824371 0.0673163
+    outer loop
+       vertex 0.197858 0.614129 0.100889
+       vertex 0.198576 0.605139 0.204991
+       vertex 0.267973 0.558167 0.20081
+    endloop
+  endfacet
+  facet normal 0.567303 0.821184 0.0618332
+    outer loop
+       vertex 0.197858 0.614129 0.100889
+       vertex 0.267973 0.558167 0.20081
+       vertex 0.269308 0.564873 0.0995073
+    endloop
+  endfacet
+  facet normal 0.658725 0.750119 0.0583344
+    outer loop
+       vertex 0.269308 0.564873 0.0995073
+       vertex 0.267973 0.558167 0.20081
+       vertex 0.329879 0.503981 0.198536
+    endloop
+  endfacet
+  facet normal 0.660315 0.748854 0.0565848
+    outer loop
+       vertex 0.269308 0.564873 0.0995073
+       vertex 0.329879 0.503981 0.198536
+       vertex 0.33388 0.507982 0.0988907
+    endloop
+  endfacet
+  facet normal 0.0370854 0.962569 0.268489
+    outer loop
+       vertex -0.327179 0.738524 0.213516
+       vertex -0.327179 0.712019 0.308537
+       vertex -0.231629 0.708338 0.308537
+    endloop
+  endfacet
+  facet normal 0.0386106 0.962905 0.267062
+    outer loop
+       vertex -0.327179 0.738524 0.213516
+       vertex -0.231629 0.708338 0.308537
+       vertex -0.232594 0.734729 0.213522
+    endloop
+  endfacet
+  facet normal 0.11179 0.957776 0.264894
+    outer loop
+       vertex -0.232594 0.734729 0.213522
+       vertex -0.231629 0.708338 0.308537
+       vertex -0.137316 0.69743 0.308176
+    endloop
+  endfacet
+  facet normal 0.116608 0.958457 0.260313
+    outer loop
+       vertex -0.232594 0.734729 0.213522
+       vertex -0.137316 0.69743 0.308176
+       vertex -0.1392 0.723433 0.213278
+    endloop
+  endfacet
+  facet normal 0.188829 0.948048 0.256026
+    outer loop
+       vertex -0.1392 0.723433 0.213278
+       vertex -0.137316 0.69743 0.308176
+       vertex -0.0454785 0.679431 0.307092
+    endloop
+  endfacet
+  facet normal 0.197067 0.948502 0.248009
+    outer loop
+       vertex -0.1392 0.723433 0.213278
+       vertex -0.0454785 0.679431 0.307092
+       vertex -0.0481896 0.704721 0.212524
+    endloop
+  endfacet
+  facet normal 0.269888 0.932105 0.241537
+    outer loop
+       vertex -0.0481896 0.704721 0.212524
+       vertex -0.0454785 0.679431 0.307092
+       vertex 0.0426467 0.654476 0.304924
+    endloop
+  endfacet
+  facet normal 0.281472 0.931625 0.229887
+    outer loop
+       vertex -0.0481896 0.704721 0.212524
+       vertex 0.0426467 0.654476 0.304924
+       vertex 0.0392471 0.678681 0.210997
+    endloop
+  endfacet
+  facet normal 0.356399 0.907812 0.221038
+    outer loop
+       vertex 0.0392471 0.678681 0.210997
+       vertex 0.0426467 0.654476 0.304924
+       vertex 0.125822 0.622702 0.30131
+    endloop
+  endfacet
+  facet normal 0.370952 0.905583 0.205707
+    outer loop
+       vertex 0.0392471 0.678681 0.210997
+       vertex 0.125822 0.622702 0.30131
+       vertex 0.121918 0.645398 0.208436
+    endloop
+  endfacet
+  facet normal 0.448417 0.872439 0.194351
+    outer loop
+       vertex 0.121918 0.645398 0.208436
+       vertex 0.125822 0.622702 0.30131
+       vertex 0.201263 0.585368 0.294843
+    endloop
+  endfacet
+  facet normal 0.463838 0.868032 0.177129
+    outer loop
+       vertex 0.121918 0.645398 0.208436
+       vertex 0.201263 0.585368 0.294843
+       vertex 0.198576 0.605139 0.204991
+    endloop
+  endfacet
+  facet normal 0.551585 0.817941 0.163483
+    outer loop
+       vertex 0.198576 0.605139 0.204991
+       vertex 0.201263 0.585368 0.294843
+       vertex 0.266184 0.543733 0.284113
+    endloop
+  endfacet
+  facet normal 0.560227 0.814069 0.153093
+    outer loop
+       vertex 0.198576 0.605139 0.204991
+       vertex 0.266184 0.543733 0.284113
+       vertex 0.267973 0.558167 0.20081
+    endloop
+  endfacet
+  facet normal 0.653715 0.743143 0.142811
+    outer loop
+       vertex 0.267973 0.558167 0.20081
+       vertex 0.266184 0.543733 0.284113
+       vertex 0.321876 0.495978 0.277683
+    endloop
+  endfacet
+  facet normal 0.654961 0.742337 0.141286
+    outer loop
+       vertex 0.267973 0.558167 0.20081
+       vertex 0.321876 0.495978 0.277683
+       vertex 0.329879 0.503981 0.198536
+    endloop
+  endfacet
+  facet normal 0.0307596 0.856313 0.51554
+    outer loop
+       vertex -0.327179 0.712019 0.308537
+       vertex -0.327179 0.666571 0.384027
+       vertex -0.230081 0.663083 0.384027
+    endloop
+  endfacet
+  facet normal 0.0330381 0.857519 0.513391
+    outer loop
+       vertex -0.327179 0.712019 0.308537
+       vertex -0.230081 0.663083 0.384027
+       vertex -0.231629 0.708338 0.308537
+    endloop
+  endfacet
+  facet normal 0.0939386 0.854744 0.510479
+    outer loop
+       vertex -0.231629 0.708338 0.308537
+       vertex -0.230081 0.663083 0.384027
+       vertex -0.134213 0.652819 0.383572
+    endloop
+  endfacet
+  facet normal 0.101169 0.858035 0.503528
+    outer loop
+       vertex -0.231629 0.708338 0.308537
+       vertex -0.134213 0.652819 0.383572
+       vertex -0.137316 0.69743 0.308176
+    endloop
+  endfacet
+  facet normal 0.16094 0.852301 0.497675
+    outer loop
+       vertex -0.137316 0.69743 0.308176
+       vertex -0.134213 0.652819 0.383572
+       vertex -0.0408013 0.635977 0.382207
+    endloop
+  endfacet
+  facet normal 0.173704 0.857086 0.485006
+    outer loop
+       vertex -0.137316 0.69743 0.308176
+       vertex -0.0408013 0.635977 0.382207
+       vertex -0.0454785 0.679431 0.307092
+    endloop
+  endfacet
+  facet normal 0.233889 0.847828 0.475903
+    outer loop
+       vertex -0.0454785 0.679431 0.307092
+       vertex -0.0408013 0.635977 0.382207
+       vertex 0.0489247 0.612757 0.379476
+    endloop
+  endfacet
+  facet normal 0.252831 0.853222 0.456168
+    outer loop
+       vertex -0.0454785 0.679431 0.307092
+       vertex 0.0489247 0.612757 0.379476
+       vertex 0.0426467 0.654476 0.304924
+    endloop
+  endfacet
+  facet normal 0.314731 0.839357 0.443197
+    outer loop
+       vertex 0.0426467 0.654476 0.304924
+       vertex 0.0489247 0.612757 0.379476
+       vertex 0.133737 0.583359 0.374925
+    endloop
+  endfacet
+  facet normal 0.340424 0.843993 0.414473
+    outer loop
+       vertex 0.0426467 0.654476 0.304924
+       vertex 0.133737 0.583359 0.374925
+       vertex 0.125822 0.622702 0.30131
+    endloop
+  endfacet
+  facet normal 0.41171 0.821391 0.39473
+    outer loop
+       vertex 0.125822 0.622702 0.30131
+       vertex 0.133737 0.583359 0.374925
+       vertex 0.209403 0.550084 0.365244
+    endloop
+  endfacet
+  facet normal 0.438232 0.822863 0.361729
+    outer loop
+       vertex 0.125822 0.622702 0.30131
+       vertex 0.209403 0.550084 0.365244
+       vertex 0.201263 0.585368 0.294843
+    endloop
+  endfacet
+  facet normal 0.532151 0.779957 0.329367
+    outer loop
+       vertex 0.201263 0.585368 0.294843
+       vertex 0.209403 0.550084 0.365244
+       vertex 0.271692 0.515237 0.347126
+    endloop
+  endfacet
+  facet normal 0.54939 0.778321 0.303951
+    outer loop
+       vertex 0.201263 0.585368 0.294843
+       vertex 0.271692 0.515237 0.347126
+       vertex 0.266184 0.543733 0.284113
+    endloop
+  endfacet
+  facet normal 0.647132 0.714298 0.266455
+    outer loop
+       vertex 0.266184 0.543733 0.284113
+       vertex 0.271692 0.515237 0.347126
+       vertex 0.312305 0.486408 0.325773
+    endloop
+  endfacet
+  facet normal 0.644468 0.715154 0.270584
+    outer loop
+       vertex 0.266184 0.543733 0.284113
+       vertex 0.312305 0.486408 0.325773
+       vertex 0.321876 0.495978 0.277683
+    endloop
+  endfacet
+  facet normal 0.0422456 0.986749 -0.15666
+    outer loop
+       vertex -0.327179 0.726868 -0.457381
+       vertex -0.237416 0.723104 -0.456883
+       vertex -0.239125 0.706869 -0.559605
+    endloop
+  endfacet
+  facet normal 0.04276 0.986795 -0.156226
+    outer loop
+       vertex -0.327179 0.726868 -0.457381
+       vertex -0.239125 0.706869 -0.559605
+       vertex -0.327179 0.710571 -0.560317
+    endloop
+  endfacet
+  facet normal 0.0427778 0.977991 -0.204216
+    outer loop
+       vertex -0.327179 0.710571 -0.560317
+       vertex -0.239125 0.706869 -0.559605
+       vertex -0.241072 0.686593 -0.657112
+    endloop
+  endfacet
+  facet normal 0.0434605 0.978083 -0.203631
+    outer loop
+       vertex -0.327179 0.710571 -0.560317
+       vertex -0.241072 0.686593 -0.657112
+       vertex -0.327179 0.690219 -0.658075
+    endloop
+  endfacet
+  facet normal 0.0435243 0.964533 -0.260348
+    outer loop
+       vertex -0.327179 0.690219 -0.658075
+       vertex -0.241072 0.686593 -0.657112
+       vertex -0.243113 0.661845 -0.74914
+    endloop
+  endfacet
+  facet normal 0.0443402 0.964686 -0.259643
+    outer loop
+       vertex -0.327179 0.690219 -0.658075
+       vertex -0.243113 0.661845 -0.74914
+       vertex -0.327179 0.665375 -0.750381
+    endloop
+  endfacet
+  facet normal 0.0444647 0.944459 -0.325608
+    outer loop
+       vertex -0.327179 0.665375 -0.750381
+       vertex -0.243113 0.661845 -0.74914
+       vertex -0.245107 0.632192 -0.835423
+    endloop
+  endfacet
+  facet normal 0.045364 0.944684 -0.324829
+    outer loop
+       vertex -0.327179 0.665375 -0.750381
+       vertex -0.245107 0.632192 -0.835423
+       vertex -0.327179 0.635605 -0.836959
+    endloop
+  endfacet
+  facet normal 0.0455524 0.915375 -0.400016
+    outer loop
+       vertex -0.327179 0.635605 -0.836959
+       vertex -0.245107 0.632192 -0.835423
+       vertex -0.246911 0.597202 -0.915698
+    endloop
+  endfacet
+  facet normal 0.0464689 0.915674 -0.399228
+    outer loop
+       vertex -0.327179 0.635605 -0.836959
+       vertex -0.246911 0.597202 -0.915698
+       vertex -0.327179 0.600474 -0.917536
+    endloop
+  endfacet
+  facet normal 0.0467032 0.874574 -0.482638
+    outer loop
+       vertex -0.327179 0.600474 -0.917536
+       vertex -0.246911 0.597202 -0.915698
+       vertex -0.248382 0.556442 -0.9897
+    endloop
+  endfacet
+  facet normal 0.0475442 0.874919 -0.48193
+    outer loop
+       vertex -0.327179 0.600474 -0.917536
+       vertex -0.248382 0.556442 -0.9897
+       vertex -0.327179 0.559548 -0.991836
+    endloop
+  endfacet
+  facet normal 0.0477773 0.819466 -0.571133
+    outer loop
+       vertex -0.327179 0.559548 -0.991836
+       vertex -0.248382 0.556442 -0.9897
+       vertex -0.249379 0.509481 -1.05716
+    endloop
+  endfacet
+  facet normal 0.0484143 0.819786 -0.570619
+    outer loop
+       vertex -0.327179 0.559548 -0.991836
+       vertex -0.249379 0.509481 -1.05716
+       vertex -0.327179 0.51239 -1.05958
+    endloop
+  endfacet
+  facet normal 0.0485719 0.748372 -0.661498
+    outer loop
+       vertex -0.327179 0.51239 -1.05958
+       vertex -0.249379 0.509481 -1.05716
+       vertex -0.249759 0.455885 -1.11783
+    endloop
+  endfacet
+  facet normal 0.048843 0.748534 -0.661295
+    outer loop
+       vertex -0.327179 0.51239 -1.05958
+       vertex -0.249759 0.455885 -1.11783
+       vertex -0.327179 0.458568 -1.12051
+    endloop
+  endfacet
+  facet normal 0.126599 0.979289 -0.158006
+    outer loop
+       vertex -0.237416 0.723104 -0.456883
+       vertex -0.148586 0.711821 -0.455637
+       vertex -0.151985 0.695773 -0.557825
+    endloop
+  endfacet
+  facet normal 0.1279 0.979297 -0.156907
+    outer loop
+       vertex -0.237416 0.723104 -0.456883
+       vertex -0.151985 0.695773 -0.557825
+       vertex -0.239125 0.706869 -0.559605
+    endloop
+  endfacet
+  facet normal 0.127744 0.970234 -0.205738
+    outer loop
+       vertex -0.239125 0.706869 -0.559605
+       vertex -0.151985 0.695773 -0.557825
+       vertex -0.155867 0.675743 -0.654694
+    endloop
+  endfacet
+  facet normal 0.129361 0.970313 -0.204348
+    outer loop
+       vertex -0.239125 0.706869 -0.559605
+       vertex -0.155867 0.675743 -0.654694
+       vertex -0.241072 0.686593 -0.657112
+    endloop
+  endfacet
+  facet normal 0.129225 0.956462 -0.261689
+    outer loop
+       vertex -0.241072 0.686593 -0.657112
+       vertex -0.155867 0.675743 -0.654694
+       vertex -0.15996 0.651317 -0.745993
+    endloop
+  endfacet
+  facet normal 0.130972 0.95664 -0.260166
+    outer loop
+       vertex -0.241072 0.686593 -0.657112
+       vertex -0.15996 0.651317 -0.745993
+       vertex -0.243113 0.661845 -0.74914
+    endloop
+  endfacet
+  facet normal 0.130881 0.936134 -0.326378
+    outer loop
+       vertex -0.243113 0.661845 -0.74914
+       vertex -0.15996 0.651317 -0.745993
+       vertex -0.163992 0.622078 -0.831472
+    endloop
+  endfacet
+  facet normal 0.132581 0.936416 -0.324881
+    outer loop
+       vertex -0.243113 0.661845 -0.74914
+       vertex -0.163992 0.622078 -0.831472
+       vertex -0.245107 0.632192 -0.835423
+    endloop
+  endfacet
+  facet normal 0.132558 0.906962 -0.39981
+    outer loop
+       vertex -0.245107 0.632192 -0.835423
+       vertex -0.163992 0.622078 -0.831472
+       vertex -0.167691 0.587614 -0.910881
+    endloop
+  endfacet
+  facet normal 0.134048 0.907322 -0.398495
+    outer loop
+       vertex -0.245107 0.632192 -0.835423
+       vertex -0.167691 0.587614 -0.910881
+       vertex -0.246911 0.597202 -0.915698
+    endloop
+  endfacet
+  facet normal 0.13411 0.866301 -0.481184
+    outer loop
+       vertex -0.246911 0.597202 -0.915698
+       vertex -0.167691 0.587614 -0.910881
+       vertex -0.170739 0.547478 -0.983989
+    endloop
+  endfacet
+  facet normal 0.135377 0.866719 -0.480075
+    outer loop
+       vertex -0.246911 0.597202 -0.915698
+       vertex -0.170739 0.547478 -0.983989
+       vertex -0.248382 0.556442 -0.9897
+    endloop
+  endfacet
+  facet normal 0.135503 0.811702 -0.568137
+    outer loop
+       vertex -0.248382 0.556442 -0.9897
+       vertex -0.170739 0.547478 -0.983989
+       vertex -0.172822 0.50123 -1.05056
+    endloop
+  endfacet
+  facet normal 0.136458 0.812111 -0.567323
+    outer loop
+       vertex -0.248382 0.556442 -0.9897
+       vertex -0.172822 0.50123 -1.05056
+       vertex -0.249379 0.509481 -1.05716
+    endloop
+  endfacet
+  facet normal 0.136576 0.741683 -0.656699
+    outer loop
+       vertex -0.249379 0.509481 -1.05716
+       vertex -0.172822 0.50123 -1.05056
+       vertex -0.173622 0.448425 -1.11037
+    endloop
+  endfacet
+  facet normal 0.13701 0.741915 -0.656347
+    outer loop
+       vertex -0.249379 0.509481 -1.05716
+       vertex -0.173622 0.448425 -1.11037
+       vertex -0.249759 0.455885 -1.11783
+    endloop
+  endfacet
+  facet normal 0.211558 0.96417 -0.160061
+    outer loop
+       vertex -0.148586 0.711821 -0.455637
+       vertex -0.0616197 0.693029 -0.453892
+       vertex -0.0666704 0.677297 -0.555333
+    endloop
+  endfacet
+  facet normal 0.213401 0.964022 -0.158496
+    outer loop
+       vertex -0.148586 0.711821 -0.455637
+       vertex -0.0666704 0.677297 -0.555333
+       vertex -0.151985 0.695773 -0.557825
+    endloop
+  endfacet
+  facet normal 0.212829 0.95472 -0.20788
+    outer loop
+       vertex -0.151985 0.695773 -0.557825
+       vertex -0.0666704 0.677297 -0.555333
+       vertex -0.0724669 0.657696 -0.65129
+    endloop
+  endfacet
+  facet normal 0.214989 0.954641 -0.20601
+    outer loop
+       vertex -0.151985 0.695773 -0.557825
+       vertex -0.0724669 0.657696 -0.65129
+       vertex -0.155867 0.675743 -0.654694
+    endloop
+  endfacet
+  facet normal 0.214293 0.940631 -0.263233
+    outer loop
+       vertex -0.155867 0.675743 -0.654694
+       vertex -0.0724669 0.657696 -0.65129
+       vertex -0.0786327 0.633851 -0.741516
+    endloop
+  endfacet
+  facet normal 0.216405 0.940667 -0.261371
+    outer loop
+       vertex -0.155867 0.675743 -0.654694
+       vertex -0.0786327 0.633851 -0.741516
+       vertex -0.15996 0.651317 -0.745993
+    endloop
+  endfacet
+  facet normal 0.215608 0.920225 -0.326648
+    outer loop
+       vertex -0.15996 0.651317 -0.745993
+       vertex -0.0786327 0.633851 -0.741516
+       vertex -0.0847914 0.605389 -0.825763
+    endloop
+  endfacet
+  facet normal 0.217376 0.92037 -0.325065
+    outer loop
+       vertex -0.15996 0.651317 -0.745993
+       vertex -0.0847914 0.605389 -0.825763
+       vertex -0.163992 0.622078 -0.831472
+    endloop
+  endfacet
+  facet normal 0.216538 0.891367 -0.398217
+    outer loop
+       vertex -0.163992 0.622078 -0.831472
+       vertex -0.0847914 0.605389 -0.825763
+       vertex -0.0905663 0.571936 -0.903784
+    endloop
+  endfacet
+  facet normal 0.217776 0.891565 -0.397097
+    outer loop
+       vertex -0.163992 0.622078 -0.831472
+       vertex -0.0905663 0.571936 -0.903784
+       vertex -0.167691 0.587614 -0.910881
+    endloop
+  endfacet
+  facet normal 0.217013 0.851423 -0.477477
+    outer loop
+       vertex -0.167691 0.587614 -0.910881
+       vertex -0.0905663 0.571936 -0.903784
+       vertex -0.0954035 0.533007 -0.9754
+    endloop
+  endfacet
+  facet normal 0.217936 0.851656 -0.47664
+    outer loop
+       vertex -0.167691 0.587614 -0.910881
+       vertex -0.0954035 0.533007 -0.9754
+       vertex -0.170739 0.547478 -0.983989
+    endloop
+  endfacet
+  facet normal 0.217371 0.798032 -0.562045
+    outer loop
+       vertex -0.170739 0.547478 -0.983989
+       vertex -0.0954035 0.533007 -0.9754
+       vertex -0.098749 0.488114 -1.04044
+    endloop
+  endfacet
+  facet normal 0.218088 0.798289 -0.561402
+    outer loop
+       vertex -0.170739 0.547478 -0.983989
+       vertex -0.098749 0.488114 -1.04044
+       vertex -0.172822 0.50123 -1.05056
+    endloop
+  endfacet
+  facet normal 0.217805 0.729915 -0.647908
+    outer loop
+       vertex -0.172822 0.50123 -1.05056
+       vertex -0.098749 0.488114 -1.04044
+       vertex -0.100049 0.436772 -1.09871
+    endloop
+  endfacet
+  facet normal 0.218198 0.730102 -0.647565
+    outer loop
+       vertex -0.172822 0.50123 -1.05056
+       vertex -0.100049 0.436772 -1.09871
+       vertex -0.173622 0.448425 -1.11037
+    endloop
+  endfacet
+  facet normal 0.297715 0.940708 -0.162586
+    outer loop
+       vertex -0.0616197 0.693029 -0.453892
+       vertex 0.0225503 0.666735 -0.451898
+       vertex 0.0159051 0.651454 -0.552484
+    endloop
+  endfacet
+  facet normal 0.299842 0.940346 -0.160762
+    outer loop
+       vertex -0.0616197 0.693029 -0.453892
+       vertex 0.0159051 0.651454 -0.552484
+       vertex -0.0666704 0.677297 -0.555333
+    endloop
+  endfacet
+  facet normal 0.298599 0.930912 -0.210334
+    outer loop
+       vertex -0.0666704 0.677297 -0.555333
+       vertex 0.0159051 0.651454 -0.552484
+       vertex 0.00822601 0.632478 -0.647371
+    endloop
+  endfacet
+  facet normal 0.300948 0.930618 -0.20828
+    outer loop
+       vertex -0.0666704 0.677297 -0.555333
+       vertex 0.00822601 0.632478 -0.647371
+       vertex -0.0724669 0.657696 -0.65129
+    endloop
+  endfacet
+  facet normal 0.299339 0.916709 -0.264653
+    outer loop
+       vertex -0.0724669 0.657696 -0.65129
+       vertex 0.00822601 0.632478 -0.647371
+       vertex -4.40478e-05 0.609509 -0.736286
+    endloop
+  endfacet
+  facet normal 0.301388 0.916563 -0.262824
+    outer loop
+       vertex -0.0724669 0.657696 -0.65129
+       vertex -4.40478e-05 0.609509 -0.736286
+       vertex -0.0786327 0.633851 -0.741516
+    endloop
+  endfacet
+  facet normal 0.299432 0.896637 -0.326162
+    outer loop
+       vertex -0.0786327 0.633851 -0.741516
+       vertex -4.40478e-05 0.609509 -0.736286
+       vertex -0.00846225 0.582249 -0.818954
+    endloop
+  endfacet
+  facet normal 0.300814 0.896631 -0.324906
+    outer loop
+       vertex -0.0786327 0.633851 -0.741516
+       vertex -0.00846225 0.582249 -0.818954
+       vertex -0.0847914 0.605389 -0.825763
+    endloop
+  endfacet
+  facet normal 0.298618 0.868701 -0.395205
+    outer loop
+       vertex -0.0847914 0.605389 -0.825763
+       vertex -0.00846225 0.582249 -0.818954
+       vertex -0.0165857 0.550399 -0.895101
+    endloop
+  endfacet
+  facet normal 0.299231 0.868747 -0.394639
+    outer loop
+       vertex -0.0847914 0.605389 -0.825763
+       vertex -0.0165857 0.550399 -0.895101
+       vertex -0.0905663 0.571936 -0.903784
+    endloop
+  endfacet
+  facet normal 0.297057 0.830223 -0.471685
+    outer loop
+       vertex -0.0905663 0.571936 -0.903784
+       vertex -0.0165857 0.550399 -0.895101
+       vertex -0.023528 0.513379 -0.964632
+    endloop
+  endfacet
+  facet normal 0.297354 0.830275 -0.471407
+    outer loop
+       vertex -0.0905663 0.571936 -0.903784
+       vertex -0.023528 0.513379 -0.964632
+       vertex -0.0954035 0.533007 -0.9754
+    endloop
+  endfacet
+  facet normal 0.295565 0.778846 -0.55321
+    outer loop
+       vertex -0.0954035 0.533007 -0.9754
+       vertex -0.023528 0.513379 -0.964632
+       vertex -0.0284025 0.470611 -1.02745
+    endloop
+  endfacet
+  facet normal 0.295889 0.778939 -0.552905
+    outer loop
+       vertex -0.0954035 0.533007 -0.9754
+       vertex -0.0284025 0.470611 -1.02745
+       vertex -0.098749 0.488114 -1.04044
+    endloop
+  endfacet
+  facet normal 0.29487 0.713493 -0.635594
+    outer loop
+       vertex -0.098749 0.488114 -1.04044
+       vertex -0.0284025 0.470611 -1.02745
+       vertex -0.0303229 0.421514 -1.08345
+    endloop
+  endfacet
+  facet normal 0.295197 0.713631 -0.635288
+    outer loop
+       vertex -0.098749 0.488114 -1.04044
+       vertex -0.0303229 0.421514 -1.08345
+       vertex -0.100049 0.436772 -1.09871
+    endloop
+  endfacet
+  facet normal 0.385385 0.907829 -0.165302
+    outer loop
+       vertex 0.0225503 0.666735 -0.451898
+       vertex 0.102992 0.63295 -0.449905
+       vertex 0.0948286 0.618256 -0.549636
+    endloop
+  endfacet
+  facet normal 0.387523 0.907256 -0.163437
+    outer loop
+       vertex 0.0225503 0.666735 -0.451898
+       vertex 0.0948286 0.618256 -0.549636
+       vertex 0.0159051 0.651454 -0.552484
+    endloop
+  endfacet
+  facet normal 0.385365 0.89789 -0.212809
+    outer loop
+       vertex 0.0159051 0.651454 -0.552484
+       vertex 0.0948286 0.618256 -0.549636
+       vertex 0.0853095 0.600116 -0.643408
+    endloop
+  endfacet
+  facet normal 0.387589 0.897399 -0.210834
+    outer loop
+       vertex 0.0159051 0.651454 -0.552484
+       vertex 0.0853095 0.600116 -0.643408
+       vertex 0.00822601 0.632478 -0.647371
+    endloop
+  endfacet
+  facet normal 0.384758 0.88393 -0.265762
+    outer loop
+       vertex 0.00822601 0.632478 -0.647371
+       vertex 0.0853095 0.600116 -0.643408
+       vertex 0.0748933 0.578352 -0.730878
+    endloop
+  endfacet
+  facet normal 0.386465 0.883648 -0.264217
+    outer loop
+       vertex 0.00822601 0.632478 -0.647371
+       vertex 0.0748933 0.578352 -0.730878
+       vertex -4.40478e-05 0.609509 -0.736286
+    endloop
+  endfacet
+  facet normal 0.382974 0.864701 -0.324998
+    outer loop
+       vertex -4.40478e-05 0.609509 -0.736286
+       vertex 0.0748933 0.578352 -0.730878
+       vertex 0.0640383 0.552782 -0.8117
+    endloop
+  endfacet
+  facet normal 0.38384 0.864617 -0.324199
+    outer loop
+       vertex -4.40478e-05 0.609509 -0.736286
+       vertex 0.0640383 0.552782 -0.8117
+       vertex -0.00846225 0.582249 -0.818954
+    endloop
+  endfacet
+  facet normal 0.379827 0.838231 -0.39128
+    outer loop
+       vertex -0.00846225 0.582249 -0.818954
+       vertex 0.0640383 0.552782 -0.8117
+       vertex 0.0532032 0.523228 -0.885532
+    endloop
+  endfacet
+  facet normal 0.379977 0.838229 -0.391139
+    outer loop
+       vertex -0.00846225 0.582249 -0.818954
+       vertex 0.0532032 0.523228 -0.885532
+       vertex -0.0165857 0.550399 -0.895101
+    endloop
+  endfacet
+  facet normal 0.375876 0.801874 -0.464451
+    outer loop
+       vertex -0.0165857 0.550399 -0.895101
+       vertex 0.0532032 0.523228 -0.885532
+       vertex 0.0437335 0.488947 -0.952382
+    endloop
+  endfacet
+  facet normal 0.375867 0.801874 -0.46446
+    outer loop
+       vertex -0.0165857 0.550399 -0.895101
+       vertex 0.0437335 0.488947 -0.952382
+       vertex -0.023528 0.513379 -0.964632
+    endloop
+  endfacet
+  facet normal 0.372365 0.7533 -0.54211
+    outer loop
+       vertex -0.023528 0.513379 -0.964632
+       vertex 0.0437335 0.488947 -0.952382
+       vertex 0.0369751 0.449196 -1.01226
+    endloop
+  endfacet
+  facet normal 0.372642 0.753359 -0.541838
+    outer loop
+       vertex -0.023528 0.513379 -0.964632
+       vertex 0.0369751 0.449196 -1.01226
+       vertex -0.0284025 0.470611 -1.02745
+    endloop
+  endfacet
+  facet normal 0.370576 0.691767 -0.619783
+    outer loop
+       vertex -0.0284025 0.470611 -1.02745
+       vertex 0.0369751 0.449196 -1.01226
+       vertex 0.0342738 0.403235 -1.06518
+    endloop
+  endfacet
+  facet normal 0.371045 0.691939 -0.619311
+    outer loop
+       vertex -0.0284025 0.470611 -1.02745
+       vertex 0.0342738 0.403235 -1.06518
+       vertex -0.0303229 0.421514 -1.08345
+    endloop
+  endfacet
+  facet normal 0.474448 0.864129 -0.167868
+    outer loop
+       vertex 0.102992 0.63295 -0.449905
+       vertex 0.178774 0.591681 -0.44816
+       vertex 0.169187 0.577716 -0.547144
+    endloop
+  endfacet
+  facet normal 0.476309 0.863427 -0.166203
+    outer loop
+       vertex 0.102992 0.63295 -0.449905
+       vertex 0.169187 0.577716 -0.547144
+       vertex 0.0948286 0.618256 -0.549636
+    endloop
+  endfacet
+  facet normal 0.473022 0.854393 -0.21509
+    outer loop
+       vertex 0.0948286 0.618256 -0.549636
+       vertex 0.169187 0.577716 -0.547144
+       vertex 0.157899 0.56061 -0.639916
+    endloop
+  endfacet
+  facet normal 0.474922 0.853771 -0.213366
+    outer loop
+       vertex 0.0948286 0.618256 -0.549636
+       vertex 0.157899 0.56061 -0.639916
+       vertex 0.0853095 0.600116 -0.643408
+    endloop
+  endfacet
+  facet normal 0.470584 0.841086 -0.266691
+    outer loop
+       vertex 0.0853095 0.600116 -0.643408
+       vertex 0.157899 0.56061 -0.639916
+       vertex 0.145337 0.540328 -0.726046
+    endloop
+  endfacet
+  facet normal 0.471991 0.840708 -0.265396
+    outer loop
+       vertex 0.0853095 0.600116 -0.643408
+       vertex 0.145337 0.540328 -0.726046
+       vertex 0.0748933 0.578352 -0.730878
+    endloop
+  endfacet
+  facet normal 0.466511 0.823142 -0.323736
+    outer loop
+       vertex 0.0748933 0.578352 -0.730878
+       vertex 0.145337 0.540328 -0.726046
+       vertex 0.13193 0.516834 -0.805104
+    endloop
+  endfacet
+  facet normal 0.467174 0.823009 -0.323117
+    outer loop
+       vertex 0.0748933 0.578352 -0.730878
+       vertex 0.13193 0.516834 -0.805104
+       vertex 0.0640383 0.552782 -0.8117
+    endloop
+  endfacet
+  facet normal 0.460515 0.798627 -0.387454
+    outer loop
+       vertex 0.0640383 0.552782 -0.8117
+       vertex 0.13193 0.516834 -0.805104
+       vertex 0.118106 0.49009 -0.876659
+    endloop
+  endfacet
+  facet normal 0.460693 0.798606 -0.387285
+    outer loop
+       vertex 0.0640383 0.552782 -0.8117
+       vertex 0.118106 0.49009 -0.876659
+       vertex 0.0532032 0.523228 -0.885532
+    endloop
+  endfacet
+  facet normal 0.453375 0.765903 -0.455899
+    outer loop
+       vertex 0.0532032 0.523228 -0.885532
+       vertex 0.118106 0.49009 -0.876659
+       vertex 0.105529 0.459485 -0.940583
+    endloop
+  endfacet
+  facet normal 0.452391 0.765917 -0.456851
+    outer loop
+       vertex 0.0532032 0.523228 -0.885532
+       vertex 0.105529 0.459485 -0.940583
+       vertex 0.0437335 0.488947 -0.952382
+    endloop
+  endfacet
+  facet normal 0.445493 0.722881 -0.528185
+    outer loop
+       vertex 0.0437335 0.488947 -0.952382
+       vertex 0.105529 0.459485 -0.940583
+       vertex 0.0958631 0.424405 -0.996746
+    endloop
+  endfacet
+  facet normal 0.44383 0.722684 -0.529852
+    outer loop
+       vertex 0.0437335 0.488947 -0.952382
+       vertex 0.0958631 0.424405 -0.996746
+       vertex 0.0369751 0.449196 -1.01226
+    endloop
+  endfacet
+  facet normal 0.439351 0.667204 -0.601506
+    outer loop
+       vertex 0.0369751 0.449196 -1.01226
+       vertex 0.0958631 0.424405 -0.996746
+       vertex 0.0917581 0.383347 -1.04529
+    endloop
+  endfacet
+  facet normal 0.439022 0.667105 -0.601856
+    outer loop
+       vertex 0.0369751 0.449196 -1.01226
+       vertex 0.0917581 0.383347 -1.04529
+       vertex 0.0342738 0.403235 -1.06518
+    endloop
+  endfacet
+  facet normal 0.564142 0.808013 -0.169881
+    outer loop
+       vertex 0.178774 0.591681 -0.44816
+       vertex 0.248963 0.542938 -0.446914
+       vertex 0.238068 0.529846 -0.545364
+    endloop
+  endfacet
+  facet normal 0.565441 0.807357 -0.168671
+    outer loop
+       vertex 0.178774 0.591681 -0.44816
+       vertex 0.238068 0.529846 -0.545364
+       vertex 0.169187 0.577716 -0.547144
+    endloop
+  endfacet
+  facet normal 0.560873 0.798991 -0.216876
+    outer loop
+       vertex 0.169187 0.577716 -0.547144
+       vertex 0.238068 0.529846 -0.545364
+       vertex 0.22511 0.513958 -0.637409
+    endloop
+  endfacet
+  facet normal 0.562217 0.798387 -0.215617
+    outer loop
+       vertex 0.169187 0.577716 -0.547144
+       vertex 0.22511 0.513958 -0.637409
+       vertex 0.157899 0.56061 -0.639916
+    endloop
+  endfacet
+  facet normal 0.556157 0.786871 -0.267439
+    outer loop
+       vertex 0.157899 0.56061 -0.639916
+       vertex 0.22511 0.513958 -0.637409
+       vertex 0.210445 0.495387 -0.722544
+    endloop
+  endfacet
+  facet normal 0.557194 0.786469 -0.266462
+    outer loop
+       vertex 0.157899 0.56061 -0.639916
+       vertex 0.210445 0.495387 -0.722544
+       vertex 0.145337 0.540328 -0.726046
+    endloop
+  endfacet
+  facet normal 0.549351 0.770715 -0.322818
+    outer loop
+       vertex 0.145337 0.540328 -0.726046
+       vertex 0.210445 0.495387 -0.722544
+       vertex 0.194432 0.474247 -0.800266
+    endloop
+  endfacet
+  facet normal 0.549954 0.770523 -0.322249
+    outer loop
+       vertex 0.145337 0.540328 -0.726046
+       vertex 0.194432 0.474247 -0.800266
+       vertex 0.13193 0.516834 -0.805104
+    endloop
+  endfacet
+  facet normal 0.539915 0.748704 -0.384621
+    outer loop
+       vertex 0.13193 0.516834 -0.805104
+       vertex 0.194432 0.474247 -0.800266
+       vertex 0.177427 0.450651 -0.870068
+    endloop
+  endfacet
+  facet normal 0.54038 0.748594 -0.384184
+    outer loop
+       vertex 0.13193 0.516834 -0.805104
+       vertex 0.177427 0.450651 -0.870068
+       vertex 0.118106 0.49009 -0.876659
+    endloop
+  endfacet
+  facet normal 0.529048 0.720954 -0.447587
+    outer loop
+       vertex 0.118106 0.49009 -0.876659
+       vertex 0.177427 0.450651 -0.870068
+       vertex 0.161005 0.424769 -0.931169
+    endloop
+  endfacet
+  facet normal 0.527498 0.72117 -0.449065
+    outer loop
+       vertex 0.118106 0.49009 -0.876659
+       vertex 0.161005 0.424769 -0.931169
+       vertex 0.105529 0.459485 -0.940583
+    endloop
+  endfacet
+  facet normal 0.515976 0.685089 -0.514221
+    outer loop
+       vertex 0.105529 0.459485 -0.940583
+       vertex 0.161005 0.424769 -0.931169
+       vertex 0.14674 0.396771 -0.982784
+    endloop
+  endfacet
+  facet normal 0.513822 0.685106 -0.51635
+    outer loop
+       vertex 0.105529 0.459485 -0.940583
+       vertex 0.14674 0.396771 -0.982784
+       vertex 0.0958631 0.424405 -0.996746
+    endloop
+  endfacet
+  facet normal 0.505666 0.637007 -0.581828
+    outer loop
+       vertex 0.0958631 0.424405 -0.996746
+       vertex 0.14674 0.396771 -0.982784
+       vertex 0.140147 0.363261 -1.0252
+    endloop
+  endfacet
+  facet normal 0.505853 0.637047 -0.581622
+    outer loop
+       vertex 0.0958631 0.424405 -0.996746
+       vertex 0.140147 0.363261 -1.0252
+       vertex 0.0917581 0.383347 -1.04529
+    endloop
+  endfacet
+  facet normal 0.652861 0.737952 -0.170881
+    outer loop
+       vertex 0.248963 0.542938 -0.446914
+       vertex 0.312627 0.48673 -0.446415
+       vertex 0.300558 0.47466 -0.544652
+    endloop
+  endfacet
+  facet normal 0.653354 0.737627 -0.170394
+    outer loop
+       vertex 0.248963 0.542938 -0.446914
+       vertex 0.300558 0.47466 -0.544652
+       vertex 0.238068 0.529846 -0.545364
+    endloop
+  endfacet
+  facet normal 0.647452 0.730333 -0.217759
+    outer loop
+       vertex 0.238068 0.529846 -0.545364
+       vertex 0.300558 0.47466 -0.544652
+       vertex 0.286057 0.460159 -0.636401
+    endloop
+  endfacet
+  facet normal 0.647987 0.730015 -0.217234
+    outer loop
+       vertex 0.238068 0.529846 -0.545364
+       vertex 0.286057 0.460159 -0.636401
+       vertex 0.22511 0.513958 -0.637409
+    endloop
+  endfacet
+  facet normal 0.640085 0.720116 -0.267814
+    outer loop
+       vertex 0.22511 0.513958 -0.637409
+       vertex 0.286057 0.460159 -0.636401
+       vertex 0.269375 0.443478 -0.721126
+    endloop
+  endfacet
+  facet normal 0.64055 0.71987 -0.267361
+    outer loop
+       vertex 0.22511 0.513958 -0.637409
+       vertex 0.269375 0.443478 -0.721126
+       vertex 0.210445 0.495387 -0.722544
+    endloop
+  endfacet
+  facet normal 0.630065 0.706464 -0.322378
+    outer loop
+       vertex 0.210445 0.495387 -0.722544
+       vertex 0.269375 0.443478 -0.721126
+       vertex 0.250764 0.424866 -0.798286
+    endloop
+  endfacet
+  facet normal 0.630456 0.706286 -0.322004
+    outer loop
+       vertex 0.210445 0.495387 -0.722544
+       vertex 0.250764 0.424866 -0.798286
+       vertex 0.194432 0.474247 -0.800266
+    endloop
+  endfacet
+  facet normal 0.616444 0.687847 -0.383228
+    outer loop
+       vertex 0.194432 0.474247 -0.800266
+       vertex 0.250764 0.424866 -0.798286
+       vertex 0.230473 0.404576 -0.867343
+    endloop
+  endfacet
+  facet normal 0.616956 0.687653 -0.382751
+    outer loop
+       vertex 0.194432 0.474247 -0.800266
+       vertex 0.230473 0.404576 -0.867343
+       vertex 0.177427 0.450651 -0.870068
+    endloop
+  endfacet
+  facet normal 0.600759 0.66544 -0.443032
+    outer loop
+       vertex 0.177427 0.450651 -0.870068
+       vertex 0.230473 0.404576 -0.867343
+       vertex 0.209579 0.383682 -0.927058
+    endloop
+  endfacet
+  facet normal 0.600463 0.665528 -0.443302
+    outer loop
+       vertex 0.177427 0.450651 -0.870068
+       vertex 0.209579 0.383682 -0.927058
+       vertex 0.161005 0.424769 -0.931169
+    endloop
+  endfacet
+  facet normal 0.581483 0.636782 -0.506346
+    outer loop
+       vertex 0.161005 0.424769 -0.931169
+       vertex 0.209579 0.383682 -0.927058
+       vertex 0.189158 0.363261 -0.976191
+    endloop
+  endfacet
+  facet normal 0.581694 0.636739 -0.506157
+    outer loop
+       vertex 0.161005 0.424769 -0.931169
+       vertex 0.189158 0.363261 -0.976191
+       vertex 0.14674 0.396771 -0.982784
+    endloop
+  endfacet
+  facet normal 0.562735 0.600568 -0.568021
+    outer loop
+       vertex 0.14674 0.396771 -0.982784
+       vertex 0.189158 0.363261 -0.976191
+       vertex 0.173079 0.347181 -1.00912
+    endloop
+  endfacet
+  facet normal 0.568022 0.600568 -0.562734
+    outer loop
+       vertex 0.14674 0.396771 -0.982784
+       vertex 0.173079 0.347181 -1.00912
+       vertex 0.140147 0.363261 -1.0252
+    endloop
+  endfacet
+  facet normal -0.04276 0.986795 -0.156226
+    outer loop
+       vertex -0.327179 0.726868 -0.457381
+       vertex -0.327179 0.710571 -0.560317
+       vertex -0.415232 0.706869 -0.559605
+    endloop
+  endfacet
+  facet normal -0.0422456 0.986749 -0.15666
+    outer loop
+       vertex -0.327179 0.726868 -0.457381
+       vertex -0.415232 0.706869 -0.559605
+       vertex -0.416941 0.723104 -0.456883
+    endloop
+  endfacet
+  facet normal -0.1279 0.979297 -0.156907
+    outer loop
+       vertex -0.416941 0.723104 -0.456883
+       vertex -0.415232 0.706869 -0.559605
+       vertex -0.502372 0.695773 -0.557825
+    endloop
+  endfacet
+  facet normal -0.126599 0.979289 -0.158006
+    outer loop
+       vertex -0.416941 0.723104 -0.456883
+       vertex -0.502372 0.695773 -0.557825
+       vertex -0.505771 0.711821 -0.455637
+    endloop
+  endfacet
+  facet normal -0.2134 0.964023 -0.158495
+    outer loop
+       vertex -0.505771 0.711821 -0.455637
+       vertex -0.502372 0.695773 -0.557825
+       vertex -0.587687 0.677297 -0.555333
+    endloop
+  endfacet
+  facet normal -0.211558 0.96417 -0.16006
+    outer loop
+       vertex -0.505771 0.711821 -0.455637
+       vertex -0.587687 0.677297 -0.555333
+       vertex -0.592737 0.693029 -0.453892
+    endloop
+  endfacet
+  facet normal -0.299842 0.940346 -0.160761
+    outer loop
+       vertex -0.592737 0.693029 -0.453892
+       vertex -0.587687 0.677297 -0.555333
+       vertex -0.670262 0.651454 -0.552484
+    endloop
+  endfacet
+  facet normal -0.297714 0.940708 -0.162587
+    outer loop
+       vertex -0.592737 0.693029 -0.453892
+       vertex -0.670262 0.651454 -0.552484
+       vertex -0.676908 0.666736 -0.451898
+    endloop
+  endfacet
+  facet normal -0.387523 0.907256 -0.163438
+    outer loop
+       vertex -0.676908 0.666736 -0.451898
+       vertex -0.670262 0.651454 -0.552484
+       vertex -0.749186 0.618256 -0.549636
+    endloop
+  endfacet
+  facet normal -0.385384 0.907829 -0.165303
+    outer loop
+       vertex -0.676908 0.666736 -0.451898
+       vertex -0.749186 0.618256 -0.549636
+       vertex -0.757349 0.63295 -0.449905
+    endloop
+  endfacet
+  facet normal -0.476308 0.863428 -0.166203
+    outer loop
+       vertex -0.757349 0.63295 -0.449905
+       vertex -0.749186 0.618256 -0.549636
+       vertex -0.823545 0.577716 -0.547144
+    endloop
+  endfacet
+  facet normal -0.474447 0.86413 -0.167869
+    outer loop
+       vertex -0.757349 0.63295 -0.449905
+       vertex -0.823545 0.577716 -0.547144
+       vertex -0.833131 0.591681 -0.44816
+    endloop
+  endfacet
+  facet normal -0.56544 0.807358 -0.168672
+    outer loop
+       vertex -0.833131 0.591681 -0.44816
+       vertex -0.823545 0.577716 -0.547144
+       vertex -0.892425 0.529846 -0.545364
+    endloop
+  endfacet
+  facet normal -0.564141 0.808013 -0.169881
+    outer loop
+       vertex -0.833131 0.591681 -0.44816
+       vertex -0.892425 0.529846 -0.545364
+       vertex -0.90332 0.542939 -0.446914
+    endloop
+  endfacet
+  facet normal -0.653354 0.737628 -0.170394
+    outer loop
+       vertex -0.90332 0.542939 -0.446914
+       vertex -0.892425 0.529846 -0.545364
+       vertex -0.954915 0.474661 -0.544652
+    endloop
+  endfacet
+  facet normal -0.65286 0.737952 -0.170881
+    outer loop
+       vertex -0.90332 0.542939 -0.446914
+       vertex -0.954915 0.474661 -0.544652
+       vertex -0.966985 0.48673 -0.446415
+    endloop
+  endfacet
+  facet normal -0.0434605 0.978083 -0.203631
+    outer loop
+       vertex -0.327179 0.710571 -0.560317
+       vertex -0.327179 0.690219 -0.658075
+       vertex -0.413286 0.686593 -0.657112
+    endloop
+  endfacet
+  facet normal -0.0427778 0.977991 -0.204216
+    outer loop
+       vertex -0.327179 0.710571 -0.560317
+       vertex -0.413286 0.686593 -0.657112
+       vertex -0.415232 0.706869 -0.559605
+    endloop
+  endfacet
+  facet normal -0.129362 0.970313 -0.204348
+    outer loop
+       vertex -0.415232 0.706869 -0.559605
+       vertex -0.413286 0.686593 -0.657112
+       vertex -0.49849 0.675743 -0.654694
+    endloop
+  endfacet
+  facet normal -0.127744 0.970234 -0.205738
+    outer loop
+       vertex -0.415232 0.706869 -0.559605
+       vertex -0.49849 0.675743 -0.654694
+       vertex -0.502372 0.695773 -0.557825
+    endloop
+  endfacet
+  facet normal -0.214987 0.954641 -0.206011
+    outer loop
+       vertex -0.502372 0.695773 -0.557825
+       vertex -0.49849 0.675743 -0.654694
+       vertex -0.58189 0.657696 -0.65129
+    endloop
+  endfacet
+  facet normal -0.212828 0.95472 -0.20788
+    outer loop
+       vertex -0.502372 0.695773 -0.557825
+       vertex -0.58189 0.657696 -0.65129
+       vertex -0.587687 0.677297 -0.555333
+    endloop
+  endfacet
+  facet normal -0.300948 0.930618 -0.20828
+    outer loop
+       vertex -0.587687 0.677297 -0.555333
+       vertex -0.58189 0.657696 -0.65129
+       vertex -0.662583 0.632478 -0.647371
+    endloop
+  endfacet
+  facet normal -0.298599 0.930912 -0.210334
+    outer loop
+       vertex -0.587687 0.677297 -0.555333
+       vertex -0.662583 0.632478 -0.647371
+       vertex -0.670262 0.651454 -0.552484
+    endloop
+  endfacet
+  facet normal -0.387587 0.897399 -0.210834
+    outer loop
+       vertex -0.670262 0.651454 -0.552484
+       vertex -0.662583 0.632478 -0.647371
+       vertex -0.739667 0.600116 -0.643408
+    endloop
+  endfacet
+  facet normal -0.385365 0.89789 -0.212808
+    outer loop
+       vertex -0.670262 0.651454 -0.552484
+       vertex -0.739667 0.600116 -0.643408
+       vertex -0.749186 0.618256 -0.549636
+    endloop
+  endfacet
+  facet normal -0.474922 0.853771 -0.213364
+    outer loop
+       vertex -0.749186 0.618256 -0.549636
+       vertex -0.739667 0.600116 -0.643408
+       vertex -0.812256 0.56061 -0.639916
+    endloop
+  endfacet
+  facet normal -0.473021 0.854393 -0.21509
+    outer loop
+       vertex -0.749186 0.618256 -0.549636
+       vertex -0.812256 0.56061 -0.639916
+       vertex -0.823545 0.577716 -0.547144
+    endloop
+  endfacet
+  facet normal -0.562216 0.798387 -0.215616
+    outer loop
+       vertex -0.823545 0.577716 -0.547144
+       vertex -0.812256 0.56061 -0.639916
+       vertex -0.879467 0.513958 -0.637409
+    endloop
+  endfacet
+  facet normal -0.560872 0.798992 -0.216876
+    outer loop
+       vertex -0.823545 0.577716 -0.547144
+       vertex -0.879467 0.513958 -0.637409
+       vertex -0.892425 0.529846 -0.545364
+    endloop
+  endfacet
+  facet normal -0.647986 0.730016 -0.217235
+    outer loop
+       vertex -0.892425 0.529846 -0.545364
+       vertex -0.879467 0.513958 -0.637409
+       vertex -0.940414 0.460159 -0.636401
+    endloop
+  endfacet
+  facet normal -0.647452 0.730333 -0.217759
+    outer loop
+       vertex -0.892425 0.529846 -0.545364
+       vertex -0.940414 0.460159 -0.636401
+       vertex -0.954915 0.474661 -0.544652
+    endloop
+  endfacet
+  facet normal -0.0443402 0.964686 -0.259643
+    outer loop
+       vertex -0.327179 0.690219 -0.658075
+       vertex -0.327179 0.665375 -0.750381
+       vertex -0.411244 0.661845 -0.74914
+    endloop
+  endfacet
+  facet normal -0.0435243 0.964533 -0.260348
+    outer loop
+       vertex -0.327179 0.690219 -0.658075
+       vertex -0.411244 0.661845 -0.74914
+       vertex -0.413286 0.686593 -0.657112
+    endloop
+  endfacet
+  facet normal -0.130971 0.95664 -0.260166
+    outer loop
+       vertex -0.413286 0.686593 -0.657112
+       vertex -0.411244 0.661845 -0.74914
+       vertex -0.494397 0.651317 -0.745993
+    endloop
+  endfacet
+  facet normal -0.129225 0.956462 -0.261688
+    outer loop
+       vertex -0.413286 0.686593 -0.657112
+       vertex -0.494397 0.651317 -0.745993
+       vertex -0.49849 0.675743 -0.654694
+    endloop
+  endfacet
+  facet normal -0.216404 0.940667 -0.26137
+    outer loop
+       vertex -0.49849 0.675743 -0.654694
+       vertex -0.494397 0.651317 -0.745993
+       vertex -0.575724 0.633851 -0.741516
+    endloop
+  endfacet
+  facet normal -0.214291 0.940632 -0.263233
+    outer loop
+       vertex -0.49849 0.675743 -0.654694
+       vertex -0.575724 0.633851 -0.741516
+       vertex -0.58189 0.657696 -0.65129
+    endloop
+  endfacet
+  facet normal -0.301387 0.916564 -0.262825
+    outer loop
+       vertex -0.58189 0.657696 -0.65129
+       vertex -0.575724 0.633851 -0.741516
+       vertex -0.654313 0.609509 -0.736286
+    endloop
+  endfacet
+  facet normal -0.299339 0.916709 -0.264652
+    outer loop
+       vertex -0.58189 0.657696 -0.65129
+       vertex -0.654313 0.609509 -0.736286
+       vertex -0.662583 0.632478 -0.647371
+    endloop
+  endfacet
+  facet normal -0.386465 0.883649 -0.264216
+    outer loop
+       vertex -0.662583 0.632478 -0.647371
+       vertex -0.654313 0.609509 -0.736286
+       vertex -0.729251 0.578352 -0.730878
+    endloop
+  endfacet
+  facet normal -0.384757 0.88393 -0.265762
+    outer loop
+       vertex -0.662583 0.632478 -0.647371
+       vertex -0.729251 0.578352 -0.730878
+       vertex -0.739667 0.600116 -0.643408
+    endloop
+  endfacet
+  facet normal -0.471991 0.840708 -0.265396
+    outer loop
+       vertex -0.739667 0.600116 -0.643408
+       vertex -0.729251 0.578352 -0.730878
+       vertex -0.799694 0.540329 -0.726046
+    endloop
+  endfacet
+  facet normal -0.470584 0.841086 -0.266692
+    outer loop
+       vertex -0.739667 0.600116 -0.643408
+       vertex -0.799694 0.540329 -0.726046
+       vertex -0.812256 0.56061 -0.639916
+    endloop
+  endfacet
+  facet normal -0.557194 0.786469 -0.266462
+    outer loop
+       vertex -0.812256 0.56061 -0.639916
+       vertex -0.799694 0.540329 -0.726046
+       vertex -0.864802 0.495388 -0.722544
+    endloop
+  endfacet
+  facet normal -0.556156 0.786871 -0.26744
+    outer loop
+       vertex -0.812256 0.56061 -0.639916
+       vertex -0.864802 0.495388 -0.722544
+       vertex -0.879467 0.513958 -0.637409
+    endloop
+  endfacet
+  facet normal -0.64055 0.719871 -0.267361
+    outer loop
+       vertex -0.879467 0.513958 -0.637409
+       vertex -0.864802 0.495388 -0.722544
+       vertex -0.923732 0.443478 -0.721126
+    endloop
+  endfacet
+  facet normal -0.640084 0.720116 -0.267815
+    outer loop
+       vertex -0.879467 0.513958 -0.637409
+       vertex -0.923732 0.443478 -0.721126
+       vertex -0.940414 0.460159 -0.636401
+    endloop
+  endfacet
+  facet normal -0.0453633 0.944684 -0.324828
+    outer loop
+       vertex -0.327179 0.665375 -0.750381
+       vertex -0.327179 0.635605 -0.836959
+       vertex -0.409251 0.632192 -0.835423
+    endloop
+  endfacet
+  facet normal -0.0444647 0.944459 -0.325608
+    outer loop
+       vertex -0.327179 0.665375 -0.750381
+       vertex -0.409251 0.632192 -0.835423
+       vertex -0.411244 0.661845 -0.74914
+    endloop
+  endfacet
+  facet normal -0.13258 0.936416 -0.32488
+    outer loop
+       vertex -0.411244 0.661845 -0.74914
+       vertex -0.409251 0.632192 -0.835423
+       vertex -0.490365 0.622079 -0.831472
+    endloop
+  endfacet
+  facet normal -0.130881 0.936135 -0.326377
+    outer loop
+       vertex -0.411244 0.661845 -0.74914
+       vertex -0.490365 0.622079 -0.831472
+       vertex -0.494397 0.651317 -0.745993
+    endloop
+  endfacet
+  facet normal -0.217376 0.92037 -0.325064
+    outer loop
+       vertex -0.494397 0.651317 -0.745993
+       vertex -0.490365 0.622079 -0.831472
+       vertex -0.569566 0.605389 -0.825763
+    endloop
+  endfacet
+  facet normal -0.215608 0.920225 -0.326647
+    outer loop
+       vertex -0.494397 0.651317 -0.745993
+       vertex -0.569566 0.605389 -0.825763
+       vertex -0.575724 0.633851 -0.741516
+    endloop
+  endfacet
+  facet normal -0.300813 0.896631 -0.324905
+    outer loop
+       vertex -0.575724 0.633851 -0.741516
+       vertex -0.569566 0.605389 -0.825763
+       vertex -0.645895 0.582249 -0.818953
+    endloop
+  endfacet
+  facet normal -0.29943 0.896638 -0.326162
+    outer loop
+       vertex -0.575724 0.633851 -0.741516
+       vertex -0.645895 0.582249 -0.818953
+       vertex -0.654313 0.609509 -0.736286
+    endloop
+  endfacet
+  facet normal -0.383839 0.864617 -0.324199
+    outer loop
+       vertex -0.654313 0.609509 -0.736286
+       vertex -0.645895 0.582249 -0.818953
+       vertex -0.718396 0.552782 -0.8117
+    endloop
+  endfacet
+  facet normal -0.382974 0.864701 -0.324998
+    outer loop
+       vertex -0.654313 0.609509 -0.736286
+       vertex -0.718396 0.552782 -0.8117
+       vertex -0.729251 0.578352 -0.730878
+    endloop
+  endfacet
+  facet normal -0.467174 0.823009 -0.323116
+    outer loop
+       vertex -0.729251 0.578352 -0.730878
+       vertex -0.718396 0.552782 -0.8117
+       vertex -0.786287 0.516834 -0.805104
+    endloop
+  endfacet
+  facet normal -0.466511 0.823142 -0.323736
+    outer loop
+       vertex -0.729251 0.578352 -0.730878
+       vertex -0.786287 0.516834 -0.805104
+       vertex -0.799694 0.540329 -0.726046
+    endloop
+  endfacet
+  facet normal -0.549954 0.770523 -0.322249
+    outer loop
+       vertex -0.799694 0.540329 -0.726046
+       vertex -0.786287 0.516834 -0.805104
+       vertex -0.848789 0.474247 -0.800266
+    endloop
+  endfacet
+  facet normal -0.549351 0.770715 -0.322819
+    outer loop
+       vertex -0.799694 0.540329 -0.726046
+       vertex -0.848789 0.474247 -0.800266
+       vertex -0.864802 0.495388 -0.722544
+    endloop
+  endfacet
+  facet normal -0.630455 0.706286 -0.322005
+    outer loop
+       vertex -0.864802 0.495388 -0.722544
+       vertex -0.848789 0.474247 -0.800266
+       vertex -0.905121 0.424866 -0.798286
+    endloop
+  endfacet
+  facet normal -0.630064 0.706464 -0.322378
+    outer loop
+       vertex -0.864802 0.495388 -0.722544
+       vertex -0.905121 0.424866 -0.798286
+       vertex -0.923732 0.443478 -0.721126
+    endloop
+  endfacet
+  facet normal -0.0464682 0.915674 -0.399228
+    outer loop
+       vertex -0.327179 0.635605 -0.836959
+       vertex -0.327179 0.600474 -0.917536
+       vertex -0.407447 0.597202 -0.915698
+    endloop
+  endfacet
+  facet normal -0.0455517 0.915375 -0.400016
+    outer loop
+       vertex -0.327179 0.635605 -0.836959
+       vertex -0.407447 0.597202 -0.915698
+       vertex -0.409251 0.632192 -0.835423
+    endloop
+  endfacet
+  facet normal -0.134047 0.907322 -0.398495
+    outer loop
+       vertex -0.409251 0.632192 -0.835423
+       vertex -0.407447 0.597202 -0.915698
+       vertex -0.486667 0.587614 -0.910881
+    endloop
+  endfacet
+  facet normal -0.132557 0.906962 -0.399811
+    outer loop
+       vertex -0.409251 0.632192 -0.835423
+       vertex -0.486667 0.587614 -0.910881
+       vertex -0.490365 0.622079 -0.831472
+    endloop
+  endfacet
+  facet normal -0.217774 0.891565 -0.397097
+    outer loop
+       vertex -0.490365 0.622079 -0.831472
+       vertex -0.486667 0.587614 -0.910881
+       vertex -0.563791 0.571936 -0.903784
+    endloop
+  endfacet
+  facet normal -0.216537 0.891367 -0.398217
+    outer loop
+       vertex -0.490365 0.622079 -0.831472
+       vertex -0.563791 0.571936 -0.903784
+       vertex -0.569566 0.605389 -0.825763
+    endloop
+  endfacet
+  facet normal -0.299231 0.868747 -0.394639
+    outer loop
+       vertex -0.569566 0.605389 -0.825763
+       vertex -0.563791 0.571936 -0.903784
+       vertex -0.637772 0.550399 -0.895101
+    endloop
+  endfacet
+  facet normal -0.298618 0.868701 -0.395205
+    outer loop
+       vertex -0.569566 0.605389 -0.825763
+       vertex -0.637772 0.550399 -0.895101
+       vertex -0.645895 0.582249 -0.818953
+    endloop
+  endfacet
+  facet normal -0.379977 0.838229 -0.391139
+    outer loop
+       vertex -0.645895 0.582249 -0.818953
+       vertex -0.637772 0.550399 -0.895101
+       vertex -0.70756 0.523228 -0.885532
+    endloop
+  endfacet
+  facet normal -0.379827 0.838231 -0.39128
+    outer loop
+       vertex -0.645895 0.582249 -0.818953
+       vertex -0.70756 0.523228 -0.885532
+       vertex -0.718396 0.552782 -0.8117
+    endloop
+  endfacet
+  facet normal -0.460693 0.798606 -0.387286
+    outer loop
+       vertex -0.718396 0.552782 -0.8117
+       vertex -0.70756 0.523228 -0.885532
+       vertex -0.772463 0.49009 -0.876659
+    endloop
+  endfacet
+  facet normal -0.460515 0.798627 -0.387455
+    outer loop
+       vertex -0.718396 0.552782 -0.8117
+       vertex -0.772463 0.49009 -0.876659
+       vertex -0.786287 0.516834 -0.805104
+    endloop
+  endfacet
+  facet normal -0.54038 0.748593 -0.384184
+    outer loop
+       vertex -0.786287 0.516834 -0.805104
+       vertex -0.772463 0.49009 -0.876659
+       vertex -0.831785 0.450651 -0.870068
+    endloop
+  endfacet
+  facet normal -0.539916 0.748704 -0.384621
+    outer loop
+       vertex -0.786287 0.516834 -0.805104
+       vertex -0.831785 0.450651 -0.870068
+       vertex -0.848789 0.474247 -0.800266
+    endloop
+  endfacet
+  facet normal -0.616956 0.687653 -0.382751
+    outer loop
+       vertex -0.848789 0.474247 -0.800266
+       vertex -0.831785 0.450651 -0.870068
+       vertex -0.88483 0.404576 -0.867343
+    endloop
+  endfacet
+  facet normal -0.616443 0.687847 -0.383228
+    outer loop
+       vertex -0.848789 0.474247 -0.800266
+       vertex -0.88483 0.404576 -0.867343
+       vertex -0.905121 0.424866 -0.798286
+    endloop
+  endfacet
+  facet normal -0.0475431 0.874919 -0.48193
+    outer loop
+       vertex -0.327179 0.600474 -0.917536
+       vertex -0.327179 0.559548 -0.991836
+       vertex -0.405975 0.556443 -0.9897
+    endloop
+  endfacet
+  facet normal -0.0467026 0.874574 -0.482638
+    outer loop
+       vertex -0.327179 0.600474 -0.917536
+       vertex -0.405975 0.556443 -0.9897
+       vertex -0.407447 0.597202 -0.915698
+    endloop
+  endfacet
+  facet normal -0.135378 0.866719 -0.480074
+    outer loop
+       vertex -0.407447 0.597202 -0.915698
+       vertex -0.405975 0.556443 -0.9897
+       vertex -0.483618 0.547478 -0.983989
+    endloop
+  endfacet
+  facet normal -0.134109 0.8663 -0.481184
+    outer loop
+       vertex -0.407447 0.597202 -0.915698
+       vertex -0.483618 0.547478 -0.983989
+       vertex -0.486667 0.587614 -0.910881
+    endloop
+  endfacet
+  facet normal -0.217935 0.851656 -0.476641
+    outer loop
+       vertex -0.486667 0.587614 -0.910881
+       vertex -0.483618 0.547478 -0.983989
+       vertex -0.558954 0.533007 -0.9754
+    endloop
+  endfacet
+  facet normal -0.217012 0.851423 -0.477477
+    outer loop
+       vertex -0.486667 0.587614 -0.910881
+       vertex -0.558954 0.533007 -0.9754
+       vertex -0.563791 0.571936 -0.903784
+    endloop
+  endfacet
+  facet normal -0.297355 0.830274 -0.471407
+    outer loop
+       vertex -0.563791 0.571936 -0.903784
+       vertex -0.558954 0.533007 -0.9754
+       vertex -0.630829 0.513379 -0.964632
+    endloop
+  endfacet
+  facet normal -0.297057 0.830223 -0.471685
+    outer loop
+       vertex -0.563791 0.571936 -0.903784
+       vertex -0.630829 0.513379 -0.964632
+       vertex -0.637772 0.550399 -0.895101
+    endloop
+  endfacet
+  facet normal -0.375866 0.801874 -0.46446
+    outer loop
+       vertex -0.637772 0.550399 -0.895101
+       vertex -0.630829 0.513379 -0.964632
+       vertex -0.698091 0.488947 -0.952382
+    endloop
+  endfacet
+  facet normal -0.375876 0.801874 -0.464451
+    outer loop
+       vertex -0.637772 0.550399 -0.895101
+       vertex -0.698091 0.488947 -0.952382
+       vertex -0.70756 0.523228 -0.885532
+    endloop
+  endfacet
+  facet normal -0.452392 0.765917 -0.456851
+    outer loop
+       vertex -0.70756 0.523228 -0.885532
+       vertex -0.698091 0.488947 -0.952382
+       vertex -0.759886 0.459485 -0.940583
+    endloop
+  endfacet
+  facet normal -0.453375 0.765903 -0.455899
+    outer loop
+       vertex -0.70756 0.523228 -0.885532
+       vertex -0.759886 0.459485 -0.940583
+       vertex -0.772463 0.49009 -0.876659
+    endloop
+  endfacet
+  facet normal -0.527498 0.72117 -0.449066
+    outer loop
+       vertex -0.772463 0.49009 -0.876659
+       vertex -0.759886 0.459485 -0.940583
+       vertex -0.815363 0.424769 -0.931169
+    endloop
+  endfacet
+  facet normal -0.529048 0.720954 -0.447586
+    outer loop
+       vertex -0.772463 0.49009 -0.876659
+       vertex -0.815363 0.424769 -0.931169
+       vertex -0.831785 0.450651 -0.870068
+    endloop
+  endfacet
+  facet normal -0.600463 0.665528 -0.443302
+    outer loop
+       vertex -0.831785 0.450651 -0.870068
+       vertex -0.815363 0.424769 -0.931169
+       vertex -0.863937 0.383682 -0.927058
+    endloop
+  endfacet
+  facet normal -0.600759 0.665441 -0.443032
+    outer loop
+       vertex -0.831785 0.450651 -0.870068
+       vertex -0.863937 0.383682 -0.927058
+       vertex -0.88483 0.404576 -0.867343
+    endloop
+  endfacet
+  facet normal -0.0484136 0.819786 -0.570619
+    outer loop
+       vertex -0.327179 0.559548 -0.991836
+       vertex -0.327179 0.51239 -1.05958
+       vertex -0.404978 0.509481 -1.05716
+    endloop
+  endfacet
+  facet normal -0.0477763 0.819466 -0.571133
+    outer loop
+       vertex -0.327179 0.559548 -0.991836
+       vertex -0.404978 0.509481 -1.05716
+       vertex -0.405975 0.556443 -0.9897
+    endloop
+  endfacet
+  facet normal -0.136457 0.812111 -0.567323
+    outer loop
+       vertex -0.405975 0.556443 -0.9897
+       vertex -0.404978 0.509481 -1.05716
+       vertex -0.481535 0.50123 -1.05056
+    endloop
+  endfacet
+  facet normal -0.135503 0.811702 -0.568136
+    outer loop
+       vertex -0.405975 0.556443 -0.9897
+       vertex -0.481535 0.50123 -1.05056
+       vertex -0.483618 0.547478 -0.983989
+    endloop
+  endfacet
+  facet normal -0.218088 0.798289 -0.561402
+    outer loop
+       vertex -0.483618 0.547478 -0.983989
+       vertex -0.481535 0.50123 -1.05056
+       vertex -0.555608 0.488114 -1.04044
+    endloop
+  endfacet
+  facet normal -0.21737 0.798032 -0.562046
+    outer loop
+       vertex -0.483618 0.547478 -0.983989
+       vertex -0.555608 0.488114 -1.04044
+       vertex -0.558954 0.533007 -0.9754
+    endloop
+  endfacet
+  facet normal -0.295888 0.778939 -0.552906
+    outer loop
+       vertex -0.558954 0.533007 -0.9754
+       vertex -0.555608 0.488114 -1.04044
+       vertex -0.625955 0.470611 -1.02745
+    endloop
+  endfacet
+  facet normal -0.295566 0.778845 -0.553209
+    outer loop
+       vertex -0.558954 0.533007 -0.9754
+       vertex -0.625955 0.470611 -1.02745
+       vertex -0.630829 0.513379 -0.964632
+    endloop
+  endfacet
+  facet normal -0.372642 0.753359 -0.541838
+    outer loop
+       vertex -0.630829 0.513379 -0.964632
+       vertex -0.625955 0.470611 -1.02745
+       vertex -0.691333 0.449197 -1.01226
+    endloop
+  endfacet
+  facet normal -0.372365 0.753299 -0.542111
+    outer loop
+       vertex -0.630829 0.513379 -0.964632
+       vertex -0.691333 0.449197 -1.01226
+       vertex -0.698091 0.488947 -0.952382
+    endloop
+  endfacet
+  facet normal -0.44383 0.722683 -0.529853
+    outer loop
+       vertex -0.698091 0.488947 -0.952382
+       vertex -0.691333 0.449197 -1.01226
+       vertex -0.750221 0.424405 -0.996746
+    endloop
+  endfacet
+  facet normal -0.445493 0.722881 -0.528185
+    outer loop
+       vertex -0.698091 0.488947 -0.952382
+       vertex -0.750221 0.424405 -0.996746
+       vertex -0.759886 0.459485 -0.940583
+    endloop
+  endfacet
+  facet normal -0.513821 0.685106 -0.51635
+    outer loop
+       vertex -0.759886 0.459485 -0.940583
+       vertex -0.750221 0.424405 -0.996746
+       vertex -0.801098 0.396771 -0.982784
+    endloop
+  endfacet
+  facet normal -0.515976 0.685089 -0.51422
+    outer loop
+       vertex -0.759886 0.459485 -0.940583
+       vertex -0.801098 0.396771 -0.982784
+       vertex -0.815363 0.424769 -0.931169
+    endloop
+  endfacet
+  facet normal -0.581695 0.636739 -0.506156
+    outer loop
+       vertex -0.815363 0.424769 -0.931169
+       vertex -0.801098 0.396771 -0.982784
+       vertex -0.843516 0.363261 -0.976191
+    endloop
+  endfacet
+  facet normal -0.581483 0.636782 -0.506347
+    outer loop
+       vertex -0.815363 0.424769 -0.931169
+       vertex -0.843516 0.363261 -0.976191
+       vertex -0.863937 0.383682 -0.927058
+    endloop
+  endfacet
+  facet normal -0.0488427 0.748534 -0.661295
+    outer loop
+       vertex -0.327179 0.51239 -1.05958
+       vertex -0.327179 0.458568 -1.12051
+       vertex -0.404598 0.455885 -1.11783
+    endloop
+  endfacet
+  facet normal -0.0485713 0.748372 -0.661498
+    outer loop
+       vertex -0.327179 0.51239 -1.05958
+       vertex -0.404598 0.455885 -1.11783
+       vertex -0.404978 0.509481 -1.05716
+    endloop
+  endfacet
+  facet normal -0.13701 0.741915 -0.656347
+    outer loop
+       vertex -0.404978 0.509481 -1.05716
+       vertex -0.404598 0.455885 -1.11783
+       vertex -0.480736 0.448425 -1.11037
+    endloop
+  endfacet
+  facet normal -0.136575 0.741682 -0.6567
+    outer loop
+       vertex -0.404978 0.509481 -1.05716
+       vertex -0.480736 0.448425 -1.11037
+       vertex -0.481535 0.50123 -1.05056
+    endloop
+  endfacet
+  facet normal -0.218198 0.730102 -0.647566
+    outer loop
+       vertex -0.481535 0.50123 -1.05056
+       vertex -0.480736 0.448425 -1.11037
+       vertex -0.554309 0.436772 -1.09871
+    endloop
+  endfacet
+  facet normal -0.217805 0.729915 -0.647908
+    outer loop
+       vertex -0.481535 0.50123 -1.05056
+       vertex -0.554309 0.436772 -1.09871
+       vertex -0.555608 0.488114 -1.04044
+    endloop
+  endfacet
+  facet normal -0.295197 0.71363 -0.635288
+    outer loop
+       vertex -0.555608 0.488114 -1.04044
+       vertex -0.554309 0.436772 -1.09871
+       vertex -0.624034 0.421514 -1.08345
+    endloop
+  endfacet
+  facet normal -0.29487 0.713492 -0.635595
+    outer loop
+       vertex -0.555608 0.488114 -1.04044
+       vertex -0.624034 0.421514 -1.08345
+       vertex -0.625955 0.470611 -1.02745
+    endloop
+  endfacet
+  facet normal -0.371044 0.691939 -0.619312
+    outer loop
+       vertex -0.625955 0.470611 -1.02745
+       vertex -0.624034 0.421514 -1.08345
+       vertex -0.688631 0.403235 -1.06518
+    endloop
+  endfacet
+  facet normal -0.370577 0.691768 -0.619782
+    outer loop
+       vertex -0.625955 0.470611 -1.02745
+       vertex -0.688631 0.403235 -1.06518
+       vertex -0.691333 0.449197 -1.01226
+    endloop
+  endfacet
+  facet normal -0.439022 0.667106 -0.601855
+    outer loop
+       vertex -0.691333 0.449197 -1.01226
+       vertex -0.688631 0.403235 -1.06518
+       vertex -0.746116 0.383347 -1.04529
+    endloop
+  endfacet
+  facet normal -0.43935 0.667204 -0.601506
+    outer loop
+       vertex -0.691333 0.449197 -1.01226
+       vertex -0.746116 0.383347 -1.04529
+       vertex -0.750221 0.424405 -0.996746
+    endloop
+  endfacet
+  facet normal -0.505853 0.637047 -0.581622
+    outer loop
+       vertex -0.750221 0.424405 -0.996746
+       vertex -0.746116 0.383347 -1.04529
+       vertex -0.794505 0.363261 -1.0252
+    endloop
+  endfacet
+  facet normal -0.505665 0.637007 -0.581829
+    outer loop
+       vertex -0.750221 0.424405 -0.996746
+       vertex -0.794505 0.363261 -1.0252
+       vertex -0.801098 0.396771 -0.982784
+    endloop
+  endfacet
+  facet normal -0.568022 0.600567 -0.562734
+    outer loop
+       vertex -0.801098 0.396771 -0.982784
+       vertex -0.794505 0.363261 -1.0252
+       vertex -0.827436 0.347181 -1.00912
+    endloop
+  endfacet
+  facet normal -0.562735 0.600567 -0.568021
+    outer loop
+       vertex -0.801098 0.396771 -0.982784
+       vertex -0.827436 0.347181 -1.00912
+       vertex -0.843516 0.363261 -0.976191
+    endloop
+  endfacet
+  facet normal -0.0422553 0.992246 -0.116889
+    outer loop
+       vertex -0.327179 0.726868 -0.457381
+       vertex -0.416941 0.723104 -0.456883
+       vertex -0.41827 0.735731 -0.34921
+    endloop
+  endfacet
+  facet normal -0.0419438 0.992289 -0.11663
+    outer loop
+       vertex -0.327179 0.726868 -0.457381
+       vertex -0.41827 0.735731 -0.34921
+       vertex -0.327179 0.739543 -0.349542
+    endloop
+  endfacet
+  facet normal -0.0419616 0.995935 -0.079708
+    outer loop
+       vertex -0.327179 0.739543 -0.349542
+       vertex -0.41827 0.735731 -0.34921
+       vertex -0.419288 0.7446 -0.237864
+    endloop
+  endfacet
+  facet normal -0.0417472 0.995958 -0.0795322
+    outer loop
+       vertex -0.327179 0.739543 -0.349542
+       vertex -0.419288 0.7446 -0.237864
+       vertex -0.327179 0.748444 -0.238072
+    endloop
+  endfacet
+  facet normal -0.0417589 0.998167 -0.0437983
+    outer loop
+       vertex -0.327179 0.748444 -0.238072
+       vertex -0.419288 0.7446 -0.237864
+       vertex -0.420061 0.749558 -0.124123
+    endloop
+  endfacet
+  facet normal -0.0415597 0.998183 -0.043636
+    outer loop
+       vertex -0.327179 0.748444 -0.238072
+       vertex -0.420061 0.749558 -0.124123
+       vertex -0.327179 0.75342 -0.124242
+    endloop
+  endfacet
+  facet normal -0.0415525 0.999104 -0.00802147
+    outer loop
+       vertex -0.327179 0.75342 -0.124242
+       vertex -0.420061 0.749558 -0.124123
+       vertex -0.42066 0.750456 -0.00926336
+    endloop
+  endfacet
+  facet normal -0.0412978 0.999116 -0.00781407
+    outer loop
+       vertex -0.327179 0.75342 -0.124242
+       vertex -0.42066 0.750456 -0.00926336
+       vertex -0.327179 0.754319 -0.0093227
+    endloop
+  endfacet
+  facet normal -0.0412589 0.998737 0.0286893
+    outer loop
+       vertex -0.327179 0.754319 -0.0093227
+       vertex -0.42066 0.750456 -0.00926336
+       vertex -0.42115 0.747141 0.105437
+    endloop
+  endfacet
+  facet normal -0.0408898 0.998743 0.0289919
+    outer loop
+       vertex -0.327179 0.754319 -0.0093227
+       vertex -0.42115 0.747141 0.105437
+       vertex -0.327179 0.750989 0.105413
+    endloop
+  endfacet
+  facet normal -0.0406201 0.992678 0.113757
+    outer loop
+       vertex -0.327179 0.750989 0.105413
+       vertex -0.42115 0.747141 0.105437
+       vertex -0.421763 0.734729 0.213522
+    endloop
+  endfacet
+  facet normal -0.0398127 0.99263 0.114456
+    outer loop
+       vertex -0.327179 0.750989 0.105413
+       vertex -0.421763 0.734729 0.213522
+       vertex -0.327179 0.738524 0.213516
+    endloop
+  endfacet
+  facet normal -0.0386107 0.962906 0.267061
+    outer loop
+       vertex -0.327179 0.738524 0.213516
+       vertex -0.421763 0.734729 0.213522
+       vertex -0.422729 0.708338 0.308537
+    endloop
+  endfacet
+  facet normal -0.0370842 0.962569 0.268489
+    outer loop
+       vertex -0.327179 0.738524 0.213516
+       vertex -0.422729 0.708338 0.308537
+       vertex -0.327179 0.712019 0.308537
+    endloop
+  endfacet
+  facet normal -0.033037 0.857519 0.513391
+    outer loop
+       vertex -0.327179 0.712019 0.308537
+       vertex -0.422729 0.708338 0.308537
+       vertex -0.424276 0.663083 0.384027
+    endloop
+  endfacet
+  facet normal -0.0307591 0.856313 0.51554
+    outer loop
+       vertex -0.327179 0.712019 0.308537
+       vertex -0.424276 0.663083 0.384027
+       vertex -0.327179 0.666571 0.384027
+    endloop
+  endfacet
+  facet normal -0.12675 0.984922 -0.117745
+    outer loop
+       vertex -0.416941 0.723104 -0.456883
+       vertex -0.505771 0.711821 -0.455637
+       vertex -0.508415 0.724304 -0.348379
+    endloop
+  endfacet
+  facet normal -0.125964 0.985101 -0.117084
+    outer loop
+       vertex -0.416941 0.723104 -0.456883
+       vertex -0.508415 0.724304 -0.348379
+       vertex -0.41827 0.735731 -0.34921
+    endloop
+  endfacet
+  facet normal -0.126089 0.988756 -0.0803896
+    outer loop
+       vertex -0.41827 0.735731 -0.34921
+       vertex -0.508415 0.724304 -0.348379
+       vertex -0.510432 0.733073 -0.237353
+    endloop
+  endfacet
+  facet normal -0.125508 0.988869 -0.0799087
+    outer loop
+       vertex -0.41827 0.735731 -0.34921
+       vertex -0.510432 0.733073 -0.237353
+       vertex -0.419288 0.7446 -0.237864
+    endloop
+  endfacet
+  facet normal -0.12559 0.991081 -0.0445669
+    outer loop
+       vertex -0.419288 0.7446 -0.237864
+       vertex -0.510432 0.733073 -0.237353
+       vertex -0.51195 0.737984 -0.123858
+    endloop
+  endfacet
+  facet normal -0.124973 0.991181 -0.0440598
+    outer loop
+       vertex -0.419288 0.7446 -0.237864
+       vertex -0.51195 0.737984 -0.123858
+       vertex -0.420061 0.749558 -0.124123
+    endloop
+  endfacet
+  facet normal -0.12499 0.992116 -0.00909641
+    outer loop
+       vertex -0.420061 0.749558 -0.124123
+       vertex -0.51195 0.737984 -0.123858
+       vertex -0.513098 0.738891 -0.00919506
+    endloop
+  endfacet
+  facet normal -0.12414 0.992229 -0.0083979
+    outer loop
+       vertex -0.420061 0.749558 -0.124123
+       vertex -0.513098 0.738891 -0.00919506
+       vertex -0.42066 0.750456 -0.00926336
+    endloop
+  endfacet
+  facet normal -0.124073 0.991903 0.027113
+    outer loop
+       vertex -0.42066 0.750456 -0.00926336
+       vertex -0.513098 0.738891 -0.00919506
+       vertex -0.514005 0.735647 0.105336
+    endloop
+  endfacet
+  facet normal -0.122824 0.992029 0.0281465
+    outer loop
+       vertex -0.42066 0.750456 -0.00926336
+       vertex -0.514005 0.735647 0.105336
+       vertex -0.42115 0.747141 0.105437
+    endloop
+  endfacet
+  facet normal -0.122211 0.986356 0.110304
+    outer loop
+       vertex -0.42115 0.747141 0.105437
+       vertex -0.514005 0.735647 0.105336
+       vertex -0.515157 0.723433 0.213278
+    endloop
+  endfacet
+  facet normal -0.119604 0.986417 0.11259
+    outer loop
+       vertex -0.42115 0.747141 0.105437
+       vertex -0.515157 0.723433 0.213278
+       vertex -0.421763 0.734729 0.213522
+    endloop
+  endfacet
+  facet normal -0.116608 0.958457 0.260313
+    outer loop
+       vertex -0.421763 0.734729 0.213522
+       vertex -0.515157 0.723433 0.213278
+       vertex -0.517041 0.69743 0.308176
+    endloop
+  endfacet
+  facet normal -0.111791 0.957776 0.264893
+    outer loop
+       vertex -0.421763 0.734729 0.213522
+       vertex -0.517041 0.69743 0.308176
+       vertex -0.422729 0.708338 0.308537
+    endloop
+  endfacet
+  facet normal -0.101169 0.858036 0.503527
+    outer loop
+       vertex -0.422729 0.708338 0.308537
+       vertex -0.517041 0.69743 0.308176
+       vertex -0.520144 0.652819 0.383572
+    endloop
+  endfacet
+  facet normal -0.0939382 0.854743 0.510479
+    outer loop
+       vertex -0.422729 0.708338 0.308537
+       vertex -0.520144 0.652819 0.383572
+       vertex -0.424276 0.663083 0.384027
+    endloop
+  endfacet
+  facet normal -0.211993 0.969991 -0.119066
+    outer loop
+       vertex -0.505771 0.711821 -0.455637
+       vertex -0.592737 0.693029 -0.453892
+       vertex -0.596666 0.705265 -0.347216
+    endloop
+  endfacet
+  facet normal -0.210893 0.970346 -0.118123
+    outer loop
+       vertex -0.505771 0.711821 -0.455637
+       vertex -0.596666 0.705265 -0.347216
+       vertex -0.508415 0.724304 -0.348379
+    endloop
+  endfacet
+  facet normal -0.211207 0.974037 -0.0815011
+    outer loop
+       vertex -0.508415 0.724304 -0.348379
+       vertex -0.596666 0.705265 -0.347216
+       vertex -0.599645 0.71387 -0.23665
+    endloop
+  endfacet
+  facet normal -0.210349 0.974284 -0.080777
+    outer loop
+       vertex -0.508415 0.724304 -0.348379
+       vertex -0.599645 0.71387 -0.23665
+       vertex -0.510432 0.733073 -0.237353
+    endloop
+  endfacet
+  facet normal -0.210552 0.976505 -0.0458905
+    outer loop
+       vertex -0.510432 0.733073 -0.237353
+       vertex -0.599645 0.71387 -0.23665
+       vertex -0.601849 0.718711 -0.123539
+    endloop
+  endfacet
+  facet normal -0.20957 0.976754 -0.0450704
+    outer loop
+       vertex -0.510432 0.733073 -0.237353
+       vertex -0.601849 0.718711 -0.123539
+       vertex -0.51195 0.737984 -0.123858
+    endloop
+  endfacet
+  facet normal -0.209655 0.977714 -0.0109858
+    outer loop
+       vertex -0.51195 0.737984 -0.123858
+       vertex -0.601849 0.718711 -0.123539
+       vertex -0.603451 0.719652 -0.00922753
+    endloop
+  endfacet
+  facet normal -0.208255 0.978025 -0.00981884
+    outer loop
+       vertex -0.51195 0.737984 -0.123858
+       vertex -0.603451 0.719652 -0.00922753
+       vertex -0.513098 0.738891 -0.00919506
+    endloop
+  endfacet
+  facet normal -0.208215 0.97778 0.0243512
+    outer loop
+       vertex -0.513098 0.738891 -0.00919506
+       vertex -0.603451 0.719652 -0.00922753
+       vertex -0.604624 0.716558 0.104939
+    endloop
+  endfacet
+  facet normal -0.206162 0.97817 0.0260742
+    outer loop
+       vertex -0.513098 0.738891 -0.00919506
+       vertex -0.604624 0.716558 0.104939
+       vertex -0.514005 0.735647 0.105336
+    endloop
+  endfacet
+  facet normal -0.205439 0.973116 0.104119
+    outer loop
+       vertex -0.514005 0.735647 0.105336
+       vertex -0.604624 0.716558 0.104939
+       vertex -0.606168 0.704722 0.212524
+    endloop
+  endfacet
+  facet normal -0.201066 0.973604 0.10802
+    outer loop
+       vertex -0.514005 0.735647 0.105336
+       vertex -0.606168 0.704722 0.212524
+       vertex -0.515157 0.723433 0.213278
+    endloop
+  endfacet
+  facet normal -0.197066 0.948502 0.24801
+    outer loop
+       vertex -0.515157 0.723433 0.213278
+       vertex -0.606168 0.704722 0.212524
+       vertex -0.608879 0.679431 0.307092
+    endloop
+  endfacet
+  facet normal -0.188828 0.948048 0.256027
+    outer loop
+       vertex -0.515157 0.723433 0.213278
+       vertex -0.608879 0.679431 0.307092
+       vertex -0.517041 0.69743 0.308176
+    endloop
+  endfacet
+  facet normal -0.173704 0.857086 0.485005
+    outer loop
+       vertex -0.517041 0.69743 0.308176
+       vertex -0.608879 0.679431 0.307092
+       vertex -0.613556 0.635977 0.382207
+    endloop
+  endfacet
+  facet normal -0.160939 0.852302 0.497675
+    outer loop
+       vertex -0.517041 0.69743 0.308176
+       vertex -0.613556 0.635977 0.382207
+       vertex -0.520144 0.652819 0.383572
+    endloop
+  endfacet
+  facet normal -0.298598 0.946715 -0.120702
+    outer loop
+       vertex -0.592737 0.693029 -0.453892
+       vertex -0.676908 0.666736 -0.451898
+       vertex -0.682076 0.678621 -0.345887
+    endloop
+  endfacet
+  facet normal -0.297352 0.947247 -0.119601
+    outer loop
+       vertex -0.592737 0.693029 -0.453892
+       vertex -0.682076 0.678621 -0.345887
+       vertex -0.596666 0.705265 -0.347216
+    endloop
+  endfacet
+  facet normal -0.297944 0.950975 -0.0829247
+    outer loop
+       vertex -0.596666 0.705265 -0.347216
+       vertex -0.682076 0.678621 -0.345887
+       vertex -0.685963 0.686997 -0.235868
+    endloop
+  endfacet
+  facet normal -0.296929 0.951368 -0.0820467
+    outer loop
+       vertex -0.596666 0.705265 -0.347216
+       vertex -0.685963 0.686997 -0.235868
+       vertex -0.599645 0.71387 -0.23665
+    endloop
+  endfacet
+  facet normal -0.29731 0.953592 -0.0476354
+    outer loop
+       vertex -0.599645 0.71387 -0.23665
+       vertex -0.685963 0.686997 -0.235868
+       vertex -0.688765 0.691749 -0.123256
+    endloop
+  endfacet
+  facet normal -0.296093 0.954022 -0.0465951
+    outer loop
+       vertex -0.599645 0.71387 -0.23665
+       vertex -0.688765 0.691749 -0.123256
+       vertex -0.601849 0.718711 -0.123539
+    endloop
+  endfacet
+  facet normal -0.29629 0.955003 -0.0134867
+    outer loop
+       vertex -0.601849 0.718711 -0.123539
+       vertex -0.688765 0.691749 -0.123256
+       vertex -0.690676 0.692763 -0.00947047
+    endloop
+  endfacet
+  facet normal -0.294536 0.955565 -0.011993
+    outer loop
+       vertex -0.601849 0.718711 -0.123539
+       vertex -0.690676 0.692763 -0.00947047
+       vertex -0.603451 0.719652 -0.00922753
+    endloop
+  endfacet
+  facet normal -0.294577 0.955403 0.0207245
+    outer loop
+       vertex -0.603451 0.719652 -0.00922753
+       vertex -0.690676 0.692763 -0.00947047
+       vertex -0.691892 0.689925 0.104073
+    endloop
+  endfacet
+  facet normal -0.292031 0.956134 0.0229033
+    outer loop
+       vertex -0.603451 0.719652 -0.00922753
+       vertex -0.691892 0.689925 0.104073
+       vertex -0.604624 0.716558 0.104939
+    endloop
+  endfacet
+  facet normal -0.291434 0.951819 0.0954258
+    outer loop
+       vertex -0.604624 0.716558 0.104939
+       vertex -0.691892 0.689925 0.104073
+       vertex -0.693604 0.678681 0.210997
+    endloop
+  endfacet
+  facet normal -0.285595 0.953039 0.10076
+    outer loop
+       vertex -0.604624 0.716558 0.104939
+       vertex -0.693604 0.678681 0.210997
+       vertex -0.606168 0.704722 0.212524
+    endloop
+  endfacet
+  facet normal -0.281472 0.931625 0.229887
+    outer loop
+       vertex -0.606168 0.704722 0.212524
+       vertex -0.693604 0.678681 0.210997
+       vertex -0.697004 0.654477 0.304924
+    endloop
+  endfacet
+  facet normal -0.269887 0.932106 0.241537
+    outer loop
+       vertex -0.606168 0.704722 0.212524
+       vertex -0.697004 0.654477 0.304924
+       vertex -0.608879 0.679431 0.307092
+    endloop
+  endfacet
+  facet normal -0.252831 0.853222 0.456167
+    outer loop
+       vertex -0.608879 0.679431 0.307092
+       vertex -0.697004 0.654477 0.304924
+       vertex -0.703282 0.612758 0.379476
+    endloop
+  endfacet
+  facet normal -0.233889 0.847828 0.475902
+    outer loop
+       vertex -0.608879 0.679431 0.307092
+       vertex -0.703282 0.612758 0.379476
+       vertex -0.613556 0.635977 0.382207
+    endloop
+  endfacet
+  facet normal -0.386895 0.913954 -0.122472
+    outer loop
+       vertex -0.676908 0.666736 -0.451898
+       vertex -0.757349 0.63295 -0.449905
+       vertex -0.763699 0.644379 -0.344558
+    endloop
+  endfacet
+  facet normal -0.385678 0.914618 -0.121349
+    outer loop
+       vertex -0.676908 0.666736 -0.451898
+       vertex -0.763699 0.644379 -0.344558
+       vertex -0.682076 0.678621 -0.345887
+    endloop
+  endfacet
+  facet normal -0.386643 0.91835 -0.0844948
+    outer loop
+       vertex -0.682076 0.678621 -0.345887
+       vertex -0.763699 0.644379 -0.344558
+       vertex -0.768421 0.65246 -0.235117
+    endloop
+  endfacet
+  facet normal -0.385622 0.918863 -0.0835779
+    outer loop
+       vertex -0.682076 0.678621 -0.345887
+       vertex -0.768421 0.65246 -0.235117
+       vertex -0.685963 0.686997 -0.235868
+    endloop
+  endfacet
+  facet normal -0.386236 0.921067 -0.0495632
+    outer loop
+       vertex -0.685963 0.686997 -0.235868
+       vertex -0.768421 0.65246 -0.235117
+       vertex -0.771702 0.657112 -0.123102
+    endloop
+  endfacet
+  facet normal -0.384997 0.921644 -0.0484687
+    outer loop
+       vertex -0.685963 0.686997 -0.235868
+       vertex -0.771702 0.657112 -0.123102
+       vertex -0.688765 0.691749 -0.123256
+    endloop
+  endfacet
+  facet normal -0.385349 0.922629 -0.0162111
+    outer loop
+       vertex -0.688765 0.691749 -0.123256
+       vertex -0.771702 0.657112 -0.123102
+       vertex -0.77373 0.658252 -0.0100336
+    endloop
+  endfacet
+  facet normal -0.383595 0.923385 -0.0146712
+    outer loop
+       vertex -0.688765 0.691749 -0.123256
+       vertex -0.77373 0.658252 -0.0100336
+       vertex -0.690676 0.692763 -0.00947047
+    endloop
+  endfacet
+  facet normal -0.383764 0.923278 0.0168496
+    outer loop
+       vertex -0.690676 0.692763 -0.00947047
+       vertex -0.77373 0.658252 -0.0100336
+       vertex -0.77469 0.655798 0.102567
+    endloop
+  endfacet
+  facet normal -0.381303 0.924254 0.0190171
+    outer loop
+       vertex -0.690676 0.692763 -0.00947047
+       vertex -0.77469 0.655798 0.102567
+       vertex -0.691892 0.689925 0.104073
+    endloop
+  endfacet
+  facet normal -0.381023 0.920675 0.0847286
+    outer loop
+       vertex -0.691892 0.689925 0.104073
+       vertex -0.77469 0.655798 0.102567
+       vertex -0.776276 0.645398 0.208436
+    endloop
+  endfacet
+  facet normal -0.374336 0.922813 0.0910478
+    outer loop
+       vertex -0.691892 0.689925 0.104073
+       vertex -0.776276 0.645398 0.208436
+       vertex -0.693604 0.678681 0.210997
+    endloop
+  endfacet
+  facet normal -0.370951 0.905583 0.205707
+    outer loop
+       vertex -0.693604 0.678681 0.210997
+       vertex -0.776276 0.645398 0.208436
+       vertex -0.78018 0.622703 0.30131
+    endloop
+  endfacet
+  facet normal -0.356398 0.907812 0.221038
+    outer loop
+       vertex -0.693604 0.678681 0.210997
+       vertex -0.78018 0.622703 0.30131
+       vertex -0.697004 0.654477 0.304924
+    endloop
+  endfacet
+  facet normal -0.340423 0.843993 0.414473
+    outer loop
+       vertex -0.697004 0.654477 0.304924
+       vertex -0.78018 0.622703 0.30131
+       vertex -0.788094 0.583359 0.374925
+    endloop
+  endfacet
+  facet normal -0.314732 0.839358 0.443196
+    outer loop
+       vertex -0.697004 0.654477 0.304924
+       vertex -0.788094 0.583359 0.374925
+       vertex -0.703282 0.612758 0.379476
+    endloop
+  endfacet
+  facet normal -0.476759 0.870222 -0.124156
+    outer loop
+       vertex -0.757349 0.63295 -0.449905
+       vertex -0.833131 0.591681 -0.44816
+       vertex -0.840587 0.602544 -0.343395
+    endloop
+  endfacet
+  facet normal -0.475737 0.870922 -0.123158
+    outer loop
+       vertex -0.757349 0.63295 -0.449905
+       vertex -0.840587 0.602544 -0.343395
+       vertex -0.763699 0.644379 -0.344558
+    endloop
+  endfacet
+  facet normal -0.477173 0.874593 -0.0859817
+    outer loop
+       vertex -0.763699 0.644379 -0.344558
+       vertex -0.840587 0.602544 -0.343395
+       vertex -0.846068 0.610261 -0.234478
+    endloop
+  endfacet
+  facet normal -0.476318 0.875138 -0.0851731
+    outer loop
+       vertex -0.763699 0.644379 -0.344558
+       vertex -0.846068 0.610261 -0.234478
+       vertex -0.768421 0.65246 -0.235117
+    endloop
+  endfacet
+  facet normal -0.477208 0.877289 -0.0513495
+    outer loop
+       vertex -0.768421 0.65246 -0.235117
+       vertex -0.846068 0.610261 -0.234478
+       vertex -0.84973 0.614792 -0.123039
+    endloop
+  endfacet
+  facet normal -0.476189 0.877897 -0.0504055
+    outer loop
+       vertex -0.768421 0.65246 -0.235117
+       vertex -0.84973 0.614792 -0.123039
+       vertex -0.771702 0.657112 -0.123102
+    endloop
+  endfacet
+  facet normal -0.476692 0.878872 -0.0186715
+    outer loop
+       vertex -0.771702 0.657112 -0.123102
+       vertex -0.84973 0.614792 -0.123039
+       vertex -0.851727 0.616095 -0.0107065
+    endloop
+  endfacet
+  facet normal -0.475294 0.879655 -0.0173907
+    outer loop
+       vertex -0.771702 0.657112 -0.123102
+       vertex -0.851727 0.616095 -0.0107065
+       vertex -0.77373 0.658252 -0.0100336
+    endloop
+  endfacet
+  facet normal -0.475529 0.879598 0.0134134
+    outer loop
+       vertex -0.77373 0.658252 -0.0100336
+       vertex -0.851727 0.616095 -0.0107065
+       vertex -0.852215 0.614129 0.100889
+    endloop
+  endfacet
+  facet normal -0.47363 0.880593 0.0151528
+    outer loop
+       vertex -0.77373 0.658252 -0.0100336
+       vertex -0.852215 0.614129 0.100889
+       vertex -0.77469 0.655798 0.102567
+    endloop
+  endfacet
+  facet normal -0.473401 0.877855 0.072547
+    outer loop
+       vertex -0.77469 0.655798 0.102567
+       vertex -0.852215 0.614129 0.100889
+       vertex -0.852933 0.605139 0.204991
+    endloop
+  endfacet
+  facet normal -0.466289 0.881048 0.0795589
+    outer loop
+       vertex -0.77469 0.655798 0.102567
+       vertex -0.852933 0.605139 0.204991
+       vertex -0.776276 0.645398 0.208436
+    endloop
+  endfacet
+  facet normal -0.463839 0.868032 0.177127
+    outer loop
+       vertex -0.776276 0.645398 0.208436
+       vertex -0.852933 0.605139 0.204991
+       vertex -0.85562 0.585368 0.294843
+    endloop
+  endfacet
+  facet normal -0.448416 0.872439 0.194351
+    outer loop
+       vertex -0.776276 0.645398 0.208436
+       vertex -0.85562 0.585368 0.294843
+       vertex -0.78018 0.622703 0.30131
+    endloop
+  endfacet
+  facet normal -0.438231 0.822864 0.36173
+    outer loop
+       vertex -0.78018 0.622703 0.30131
+       vertex -0.85562 0.585368 0.294843
+       vertex -0.86376 0.550085 0.365244
+    endloop
+  endfacet
+  facet normal -0.411709 0.821392 0.39473
+    outer loop
+       vertex -0.78018 0.622703 0.30131
+       vertex -0.86376 0.550085 0.365244
+       vertex -0.788094 0.583359 0.374925
+    endloop
+  endfacet
+  facet normal -0.567392 0.81383 -0.12549
+    outer loop
+       vertex -0.833131 0.591681 -0.44816
+       vertex -0.90332 0.542939 -0.446914
+       vertex -0.911794 0.553121 -0.342564
+    endloop
+  endfacet
+  facet normal -0.566714 0.814413 -0.124772
+    outer loop
+       vertex -0.833131 0.591681 -0.44816
+       vertex -0.911794 0.553121 -0.342564
+       vertex -0.840587 0.602544 -0.343395
+    endloop
+  endfacet
+  facet normal -0.568704 0.817913 -0.0871441
+    outer loop
+       vertex -0.840587 0.602544 -0.343395
+       vertex -0.911794 0.553121 -0.342564
+       vertex -0.917956 0.5604 -0.234031
+    endloop
+  endfacet
+  facet normal -0.568145 0.818362 -0.0865755
+    outer loop
+       vertex -0.840587 0.602544 -0.343395
+       vertex -0.917956 0.5604 -0.234031
+       vertex -0.846068 0.610261 -0.234478
+    endloop
+  endfacet
+  facet normal -0.569351 0.820404 -0.0526921
+    outer loop
+       vertex -0.846068 0.610261 -0.234478
+       vertex -0.917956 0.5604 -0.234031
+       vertex -0.921915 0.564782 -0.12303
+    endloop
+  endfacet
+  facet normal -0.568715 0.820886 -0.0520628
+    outer loop
+       vertex -0.846068 0.610261 -0.234478
+       vertex -0.921915 0.564782 -0.12303
+       vertex -0.84973 0.614792 -0.123039
+    endloop
+  endfacet
+  facet normal -0.569365 0.82183 -0.0204611
+    outer loop
+       vertex -0.84973 0.614792 -0.123039
+       vertex -0.921915 0.564782 -0.12303
+       vertex -0.923782 0.566271 -0.0112786
+    endloop
+  endfacet
+  facet normal -0.568531 0.822427 -0.0196495
+    outer loop
+       vertex -0.84973 0.614792 -0.123039
+       vertex -0.923782 0.566271 -0.0112786
+       vertex -0.851727 0.616095 -0.0107065
+    endloop
+  endfacet
+  facet normal -0.568771 0.822422 0.0109736
+    outer loop
+       vertex -0.851727 0.616095 -0.0107065
+       vertex -0.923782 0.566271 -0.0112786
+       vertex -0.923665 0.564873 0.0995073
+    endloop
+  endfacet
+  facet normal -0.567694 0.823152 0.0120156
+    outer loop
+       vertex -0.851727 0.616095 -0.0107065
+       vertex -0.923665 0.564873 0.0995073
+       vertex -0.852215 0.614129 0.100889
+    endloop
+  endfacet
+  facet normal -0.567302 0.821185 0.0618336
+    outer loop
+       vertex -0.852215 0.614129 0.100889
+       vertex -0.923665 0.564873 0.0995073
+       vertex -0.92233 0.558168 0.20081
+    endloop
+  endfacet
+  facet normal -0.562031 0.824372 0.0673168
+    outer loop
+       vertex -0.852215 0.614129 0.100889
+       vertex -0.92233 0.558168 0.20081
+       vertex -0.852933 0.605139 0.204991
+    endloop
+  endfacet
+  facet normal -0.560226 0.81407 0.153093
+    outer loop
+       vertex -0.852933 0.605139 0.204991
+       vertex -0.92233 0.558168 0.20081
+       vertex -0.920541 0.543733 0.284113
+    endloop
+  endfacet
+  facet normal -0.551584 0.817942 0.163482
+    outer loop
+       vertex -0.852933 0.605139 0.204991
+       vertex -0.920541 0.543733 0.284113
+       vertex -0.85562 0.585368 0.294843
+    endloop
+  endfacet
+  facet normal -0.54939 0.778322 0.303951
+    outer loop
+       vertex -0.85562 0.585368 0.294843
+       vertex -0.920541 0.543733 0.284113
+       vertex -0.926049 0.515237 0.347126
+    endloop
+  endfacet
+  facet normal -0.532151 0.779957 0.329367
+    outer loop
+       vertex -0.85562 0.585368 0.294843
+       vertex -0.926049 0.515237 0.347126
+       vertex -0.86376 0.550085 0.365244
+    endloop
+  endfacet
+  facet normal -0.657109 0.743161 -0.126172
+    outer loop
+       vertex -0.90332 0.542939 -0.446914
+       vertex -0.966985 0.48673 -0.446415
+       vertex -0.976372 0.496118 -0.342232
+    endloop
+  endfacet
+  facet normal -0.656867 0.743424 -0.125886
+    outer loop
+       vertex -0.90332 0.542939 -0.446914
+       vertex -0.976372 0.496118 -0.342232
+       vertex -0.911794 0.553121 -0.342564
+    endloop
+  endfacet
+  facet normal -0.659469 0.746595 -0.087732
+    outer loop
+       vertex -0.911794 0.553121 -0.342564
+       vertex -0.976372 0.496118 -0.342232
+       vertex -0.983135 0.50288 -0.233855
+    endloop
+  endfacet
+  facet normal -0.659278 0.746789 -0.0875164
+    outer loop
+       vertex -0.911794 0.553121 -0.342564
+       vertex -0.983135 0.50288 -0.233855
+       vertex -0.917956 0.5604 -0.234031
+    endloop
+  endfacet
+  facet normal -0.660823 0.748644 -0.0533393
+    outer loop
+       vertex -0.917956 0.5604 -0.234031
+       vertex -0.983135 0.50288 -0.233855
+       vertex -0.987328 0.507074 -0.123039
+    endloop
+  endfacet
+  facet normal -0.660624 0.748835 -0.0531232
+    outer loop
+       vertex -0.917956 0.5604 -0.234031
+       vertex -0.987328 0.507074 -0.123039
+       vertex -0.921915 0.564782 -0.12303
+    endloop
+  endfacet
+  facet normal -0.66141 0.749722 -0.0212859
+    outer loop
+       vertex -0.921915 0.564782 -0.12303
+       vertex -0.987328 0.507074 -0.123039
+       vertex -0.98901 0.508756 -0.0115394
+    endloop
+  endfacet
+  facet normal -0.661176 0.749936 -0.0210368
+    outer loop
+       vertex -0.921915 0.564782 -0.12303
+       vertex -0.98901 0.508756 -0.0115394
+       vertex -0.923782 0.566271 -0.0112786
+    endloop
+  endfacet
+  facet normal -0.661359 0.750004 0.00987881
+    outer loop
+       vertex -0.923782 0.566271 -0.0112786
+       vertex -0.98901 0.508756 -0.0115394
+       vertex -0.988237 0.507983 0.0988907
+    endloop
+  endfacet
+  facet normal -0.661089 0.750238 0.0101605
+    outer loop
+       vertex -0.923782 0.566271 -0.0112786
+       vertex -0.988237 0.507983 0.0988907
+       vertex -0.923665 0.564873 0.0995073
+    endloop
+  endfacet
+  facet normal -0.660314 0.748855 0.0565847
+    outer loop
+       vertex -0.923665 0.564873 0.0995073
+       vertex -0.988237 0.507983 0.0988907
+       vertex -0.984236 0.503981 0.198536
+    endloop
+  endfacet
+  facet normal -0.658724 0.75012 0.0583349
+    outer loop
+       vertex -0.923665 0.564873 0.0995073
+       vertex -0.984236 0.503981 0.198536
+       vertex -0.92233 0.558168 0.20081
+    endloop
+  endfacet
+  facet normal -0.65496 0.742338 0.141285
+    outer loop
+       vertex -0.92233 0.558168 0.20081
+       vertex -0.984236 0.503981 0.198536
+       vertex -0.976233 0.495979 0.277683
+    endloop
+  endfacet
+  facet normal -0.653714 0.743144 0.142811
+    outer loop
+       vertex -0.92233 0.558168 0.20081
+       vertex -0.976233 0.495979 0.277683
+       vertex -0.920541 0.543733 0.284113
+    endloop
+  endfacet
+  facet normal -0.644467 0.715155 0.270584
+    outer loop
+       vertex -0.920541 0.543733 0.284113
+       vertex -0.976233 0.495979 0.277683
+       vertex -0.966663 0.486408 0.325773
+    endloop
+  endfacet
+  facet normal -0.647131 0.714299 0.266456
+    outer loop
+       vertex -0.920541 0.543733 0.284113
+       vertex -0.966663 0.486408 0.325773
+       vertex -0.926049 0.515237 0.347126
+    endloop
+  endfacet
+endsolid patch1
diff --git a/tutorials/mesh/cvMesh/blob/system/collapseDict b/tutorials/mesh/cvMesh/blob/system/collapseDict
new file mode 100644
index 0000000000000000000000000000000000000000..4948b7a61dddeec6c67cc7210ed6cbd1007d222c
--- /dev/null
+++ b/tutorials/mesh/cvMesh/blob/system/collapseDict
@@ -0,0 +1,54 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+
+FoamFile
+{
+    version         2.0;
+    format          ascii;
+
+    root            "";
+    case            "";
+    instance        "";
+    local           "";
+
+    class           dictionary;
+    object          collapseDict;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+collapseEdgesCoeffs
+{
+    minimumEdgeLength   1e-4;
+    maximumMergeAngle   180;
+    reductionFactor     0.5;
+}
+
+
+collapseFacesCoeffs
+{
+    initialFaceLengthFactor                 0.5;
+    reductionFactor                         0.5;
+
+    allowEarlyCollapseToPoint               on;
+    allowEarlyCollapseCoeff                 0.2;
+    guardFraction                           0.1;
+    maxCollapseFaceToPointSideLengthCoeff   0.3;
+}
+
+
+meshQualityCoeffs
+{
+    #include                    "meshQualityDict";
+    maximumIterations           10;
+    maximumSmoothingIterations  1;
+    maxPointErrorCount          5;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/blob/system/controlDict b/tutorials/mesh/cvMesh/blob/system/controlDict
new file mode 100644
index 0000000000000000000000000000000000000000..56534bc1d5ad67209fb7d79524d0684cc1d0e4f6
--- /dev/null
+++ b/tutorials/mesh/cvMesh/blob/system/controlDict
@@ -0,0 +1,53 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+
+FoamFile
+{
+    version         2.0;
+    format          ascii;
+
+    root            "";
+    case            "";
+    instance        "";
+    local           "";
+
+    class           dictionary;
+    object          controlDict;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+startFrom       startTime;
+
+startTime       0;
+
+stopAt          endTime;
+
+endTime         80;
+
+deltaT          1;
+
+writeControl    timeStep;
+
+writeInterval   80;
+
+purgeWrite      0;
+
+writeFormat     ascii;
+
+writePrecision  12;
+
+writeCompression uncompressed;
+
+timeFormat      general;
+
+timePrecision   6;
+
+runTimeModifiable yes;
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/blob/system/cvMeshDict b/tutorials/mesh/cvMesh/blob/system/cvMeshDict
new file mode 100644
index 0000000000000000000000000000000000000000..eda52324f55ca0fdb1431ce058ee1304f61ab4de
--- /dev/null
+++ b/tutorials/mesh/cvMesh/blob/system/cvMeshDict
@@ -0,0 +1,212 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+
+FoamFile
+{
+    version         2.0;
+    format          ascii;
+
+    root            "";
+    case            "";
+    instance        "";
+    local           "";
+
+    class           dictionary;
+    object          cvMeshDict;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+// Any scalar with a name <name>Coeff specifies a value that will be implemented
+// as a faction of the local target cell size
+
+geometry
+{
+    blob.stl
+    {
+        type triSurfaceMesh;
+    }
+
+    refinementBox
+    {
+        type searchableBox;
+        min (-0.2  -0.6 -0.2);
+        max ( 0.4   0.2  0.35);
+    }
+}
+
+
+backgroundMeshDecomposition
+{
+    minLevels 0;
+    sampleResolution 4;
+    spanScale 20;
+    maxCellWeightCoeff 20;
+}
+
+
+initialPoints
+{
+    minimumSurfaceDistanceCoeff 0.55;
+
+    initialPointsMethod     autoDensity;
+    // initialPointsMethod     pointFile;
+
+    autoDensityCoeffs
+    {
+        minLevels 0;
+        maxSizeRatio 5.0;
+        sampleResolution 5;
+        surfaceSampleResolution 5;
+    }
+
+    pointFileCoeffs
+    {
+        pointFile              "constant/internalDelaunayVertices";
+    }
+}
+
+
+surfaceConformation
+{
+    locationInMesh (0.1 0.1 0.2);
+
+    pointPairDistanceCoeff      0.1;
+
+    mixedFeaturePointPPDistanceCoeff    5.0;
+
+    featurePointExclusionDistanceCoeff  0.4;
+
+    featureEdgeExclusionDistanceCoeff   0.2;
+
+    surfaceSearchDistanceCoeff  5;
+
+    nearBoundaryDistanceCoeff   5;
+
+    maxSurfaceProtrusionCoeff   0.001;
+
+    maxQuadAngle 125;
+
+    surfaceConformationRebuildFrequency 10;
+
+    specialiseFeaturePoints off;
+
+    conformationControls
+    {
+        edgeSearchDistCoeff             5;
+        surfacePtReplaceDistCoeff       0.5;
+        surfacePtExclusionDistanceCoeff 0.5;
+
+        maxIterations 15;
+
+        iterationToInitialHitRatioLimit 0.0001;
+    }
+
+    geometryToConformTo
+    {
+        blob.stl
+        {
+            featureMethod       none;
+        }
+    }
+
+    additionalFeatures
+    {
+    }
+}
+
+
+motionControl
+{
+    defaultCellSize     0.1;
+
+    shapeControlFunctions
+    {
+        blob.stl
+        {
+            type                    searchableSurfaceControl;
+            priority                1;
+            mode                    bothSides;
+
+            surfaceCellSizeFunction uniformValue;
+            uniformValueCoeffs
+            {
+                surfaceCellSize     $defaultCellSize;
+            }
+
+            cellSizeFunction        uniform;
+            uniformCoeffs
+            {}
+        }
+    }
+
+    maxRefinementIterations 1;
+
+    cellAspectRatioControl
+    {
+        aspectRatio                 1.0;
+        aspectRatioDirection        (1 0 0);
+    }
+
+    relaxationModel     adaptiveLinear;
+
+    adaptiveLinearCoeffs
+    {
+        relaxationStart 1.0;
+        relaxationEnd   0.0;
+    }
+
+    objOutput                   no;
+
+    timeChecks                  no;
+
+    maxLoadUnbalance            0.5;
+
+    alignmentSearchSpokes       24;
+
+    alignmentAcceptanceAngle    48;
+
+    sizeAndAlignmentRebuildFrequency 40;
+
+    pointInsertionCriteria
+    {
+        cellCentreDistCoeff     1.75;
+        faceAreaRatioCoeff      0.0025;
+        acceptanceAngle         21.5;
+    }
+
+    pointRemovalCriteria
+    {
+        cellCentreDistCoeff     0.65;
+    }
+
+    faceAreaWeightModel piecewiseLinearRamp;
+
+    piecewiseLinearRampCoeffs
+    {
+        lowerAreaFraction       0.5;
+        upperAreaFraction       1.0;
+    }
+}
+
+
+polyMeshFiltering
+{
+    filterEdges                 on;
+    filterFaces                 off;
+    writeTetDualMesh            false;
+}
+
+
+meshQualityControls
+{
+    #include "meshQualityDict"
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/blob/system/decomposeParDict b/tutorials/mesh/cvMesh/blob/system/decomposeParDict
new file mode 100644
index 0000000000000000000000000000000000000000..3d3806e87382b1f4fef074e2aad6f535c98881b6
--- /dev/null
+++ b/tutorials/mesh/cvMesh/blob/system/decomposeParDict
@@ -0,0 +1,47 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      decomposeParDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+numberOfSubdomains 2;
+
+method          scotch;
+//method          ptscotch;
+// method          hierarchical;
+
+simpleCoeffs
+{
+    n               ( 2 2 1 );
+    delta           0.001;
+}
+
+hierarchicalCoeffs
+{
+    n               ( 2 1 1 );
+    delta           0.001;
+    order           xyz;
+}
+
+manualCoeffs
+{
+    dataFile        "";
+}
+
+distributed     no;
+
+roots           ( );
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/blob/system/fvSchemes b/tutorials/mesh/cvMesh/blob/system/fvSchemes
new file mode 100644
index 0000000000000000000000000000000000000000..2e5c55b28ba64ca0cfc1a7c714148109cd736563
--- /dev/null
+++ b/tutorials/mesh/cvMesh/blob/system/fvSchemes
@@ -0,0 +1,54 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      fvSchemes;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+ddtSchemes
+{
+    default         none;
+}
+
+gradSchemes
+{
+    default         none;
+}
+
+divSchemes
+{
+    default         none;
+}
+
+laplacianSchemes
+{
+    default         none;
+}
+
+interpolationSchemes
+{
+    default         none;
+}
+
+snGradSchemes
+{
+    default         none;
+}
+
+fluxRequired
+{
+    default         no;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/blob/system/fvSolution b/tutorials/mesh/cvMesh/blob/system/fvSolution
new file mode 100644
index 0000000000000000000000000000000000000000..740eb61a4bcb97e64ae0b33558f5c7057e7a6d20
--- /dev/null
+++ b/tutorials/mesh/cvMesh/blob/system/fvSolution
@@ -0,0 +1,22 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      fvSolution;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+solvers
+{
+}
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/blob/system/meshQualityDict b/tutorials/mesh/cvMesh/blob/system/meshQualityDict
new file mode 100644
index 0000000000000000000000000000000000000000..fa5319e087c5e36fe7c3cd93d3a69d5ebc75463e
--- /dev/null
+++ b/tutorials/mesh/cvMesh/blob/system/meshQualityDict
@@ -0,0 +1,73 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+
+FoamFile
+{
+    version         2.0;
+    format          ascii;
+
+    root            "";
+    case            "";
+    instance        "";
+    local           "";
+
+    class           dictionary;
+    object          meshQualityDict;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+//- Maximum non-orthogonality allowed. Set to 180 to disable.
+maxNonOrtho         65;
+
+//- Max skewness allowed. Set to <0 to disable.
+maxBoundarySkewness 50;
+maxInternalSkewness 10;
+
+//- Max concaveness allowed. Is angle (in degrees) below which concavity
+//  is allowed. 0 is straight face, <0 would be convex face.
+//  Set to 180 to disable.
+maxConcave          80;
+
+//- Minimum quality of the tet formed by the face-centre
+//  and variable base point minimum decomposition triangles and
+//  the cell centre. This has to be a positive number for tracking
+//  to work. Set to very negative number (e.g. -1E30) to
+//  disable.
+//     <0 = inside out tet,
+//      0 = flat tet
+//      1 = regular tet
+minTetQuality       1e-30;
+
+//- Minimum pyramid volume. Is absolute volume of cell pyramid.
+//  Set to a sensible fraction of the smallest cell volume expected.
+//  Set to very negative number (e.g. -1E30) to disable.
+minVol              1e-20;
+
+//- Minimum face area. Set to <0 to disable.
+minArea             -1;
+
+//- Minimum face twist. Set to <-1 to disable. dot product of face normal
+//- and face centre triangles normal
+minTwist            0.001;
+
+//- minimum normalised cell determinant
+//- 1 = hex, <= 0 = folded or flattened illegal cell
+minDeterminant      0.001;
+
+//- minFaceWeight (0 -> 0.5)
+minFaceWeight       0.02;
+
+//- minVolRatio (0 -> 1)
+minVolRatio         0.01;
+
+//must be >0 for Fluent compatibility
+minTriangleTwist    -1;
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/blob/system/snappyHexMeshDict b/tutorials/mesh/cvMesh/blob/system/snappyHexMeshDict
new file mode 100644
index 0000000000000000000000000000000000000000..c5723d829f22cd893114a969605b413cdcb75b84
--- /dev/null
+++ b/tutorials/mesh/cvMesh/blob/system/snappyHexMeshDict
@@ -0,0 +1,310 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      snappyHexMeshDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+// Which of the steps to run
+castellatedMesh false;
+snap            false;
+addLayers       true;
+
+
+// Geometry. Definition of all surfaces. All surfaces are of class
+// searchableSurface.
+// Surfaces are used
+// - to specify refinement for any mesh cell intersecting it
+// - to specify refinement for any mesh cell inside/outside/near
+// - to 'snap' the mesh boundary to the surface
+geometry
+{
+//    motorBike.obj
+//    {
+//        type triSurfaceMesh;
+//        name motorBike;
+//    }
+//
+//    refinementBox
+//    {
+//        type searchableBox;
+//        min (-1.0 -0.7 0.0);
+//        max ( 8.0  0.7 2.5);
+//    }
+};
+
+
+
+// Settings for the castellatedMesh generation.
+castellatedMeshControls
+{
+
+    // Refinement parameters
+    // ~~~~~~~~~~~~~~~~~~~~~
+
+    // If local number of cells is >= maxLocalCells on any processor
+    // switches from from refinement followed by balancing
+    // (current method) to (weighted) balancing before refinement.
+    maxLocalCells 100000;
+
+    // Overall cell limit (approximately). Refinement will stop immediately
+    // upon reaching this number so a refinement level might not complete.
+    // Note that this is the number of cells before removing the part which
+    // is not 'visible' from the keepPoint. The final number of cells might
+    // actually be a lot less.
+    maxGlobalCells 2000000;
+
+    // The surface refinement loop might spend lots of iterations refining just a
+    // few cells. This setting will cause refinement to stop if <= minimumRefine
+    // are selected for refinement. Note: it will at least do one iteration
+    // (unless the number of cells to refine is 0)
+    minRefinementCells 10;
+
+    // Allow a certain level of imbalance during refining
+    // (since balancing is quite expensive)
+    // Expressed as fraction of perfect balance (= overall number of cells /
+    // nProcs). 0=balance always.
+    maxLoadUnbalance 0.10;
+
+
+    // Number of buffer layers between different levels.
+    // 1 means normal 2:1 refinement restriction, larger means slower
+    // refinement.
+    nCellsBetweenLevels 3;
+
+
+
+    // Explicit feature edge refinement
+    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    // Specifies a level for any cell intersected by its edges.
+    // This is a featureEdgeMesh, read from constant/triSurface for now.
+    features
+    (
+        //{
+        //    file "someLine.eMesh";
+        //    level 2;
+        //}
+    );
+
+
+
+    // Surface based refinement
+    // ~~~~~~~~~~~~~~~~~~~~~~~~
+
+    // Specifies two levels for every surface. The first is the minimum level,
+    // every cell intersecting a surface gets refined up to the minimum level.
+    // The second level is the maximum level. Cells that 'see' multiple
+    // intersections where the intersections make an
+    // angle > resolveFeatureAngle get refined up to the maximum level.
+
+    refinementSurfaces
+    {
+//        motorBike
+//        {
+//            // Surface-wise min and max refinement level
+//            level (5 6);
+//
+//            // Optional specification of patch type (default is wall). No
+//            // constraint types (cyclic, symmetry) etc. are allowed.
+//            patchInfo
+//            {
+//                type wall;
+//                inGroups (motorBike);
+//            }
+//        }
+    }
+
+    // Resolve sharp angles
+    resolveFeatureAngle 30;
+
+
+    // Region-wise refinement
+    // ~~~~~~~~~~~~~~~~~~~~~~
+
+    // Specifies refinement level for cells in relation to a surface. One of
+    // three modes
+    // - distance. 'levels' specifies per distance to the surface the
+    //   wanted refinement level. The distances need to be specified in
+    //   descending order.
+    // - inside. 'levels' is only one entry and only the level is used. All
+    //   cells inside the surface get refined up to the level. The surface
+    //   needs to be closed for this to be possible.
+    // - outside. Same but cells outside.
+
+    refinementRegions
+    {
+//        refinementBox
+//        {
+//            mode inside;
+//            levels ((1E15 4));
+//        }
+    }
+
+
+    // Mesh selection
+    // ~~~~~~~~~~~~~~
+
+    // After refinement patches get added for all refinementSurfaces and
+    // all cells intersecting the surfaces get put into these patches. The
+    // section reachable from the locationInMesh is kept.
+    // NOTE: This point should never be on a face, always inside a cell, even
+    // after refinement.
+    locationInMesh (-1 0 0);
+
+
+    // Whether any faceZones (as specified in the refinementSurfaces)
+    // are only on the boundary of corresponding cellZones or also allow
+    // free-standing zone faces. Not used if there are no faceZones.
+    allowFreeStandingZoneFaces true;
+}
+
+
+
+// Settings for the snapping.
+snapControls
+{
+    //- Number of patch smoothing iterations before finding correspondence
+    //  to surface
+    nSmoothPatch 3;
+
+    //- Relative distance for points to be attracted by surface feature point
+    //  or edge. True distance is this factor times local
+    //  maximum edge length.
+    tolerance 4.0;
+
+    //- Number of mesh displacement relaxation iterations.
+    nSolveIter 0;
+
+    //- Maximum number of snapping relaxation iterations. Should stop
+    //  before upon reaching a correct mesh.
+    nRelaxIter 5;
+
+    //- Highly experimental and wip: number of feature edge snapping
+    //  iterations. Leave out altogether to disable.
+    //  Do not use here since mesh resolution too low and baffles present
+    //nFeatureSnapIter 10;
+}
+
+
+
+// Settings for the layer addition.
+addLayersControls
+{
+    // Are the thickness parameters below relative to the undistorted
+    // size of the refined cell outside layer (true) or absolute sizes (false).
+    relativeSizes false;
+
+    // Per final patch (so not geometry!) the layer information
+    layers
+    {
+        blob.stl_patch1
+        {
+            nSurfaceLayers 4;
+        }
+    }
+
+    // Expansion factor for layer mesh
+    expansionRatio 1.5;
+
+    // Wanted thickness of final added cell layer. If multiple layers
+    // is the thickness of the layer furthest away from the wall.
+    // Relative to undistorted size of cell outside layer.
+    // is the thickness of the layer furthest away from the wall.
+    // See relativeSizes parameter.
+    finalLayerThickness 0.02;
+
+    // Minimum thickness of cell layer. If for any reason layer
+    // cannot be above minThickness do not add layer.
+    // Relative to undistorted size of cell outside layer.
+    minThickness 0.005;
+
+    // If points get not extruded do nGrow layers of connected faces that are
+    // also not grown. This helps convergence of the layer addition process
+    // close to features.
+    // Note: changed(corrected) w.r.t 17x! (didn't do anything in 17x)
+    nGrow 0;
+
+    // Advanced settings
+
+    // When not to extrude surface. 0 is flat surface, 90 is when two faces
+    // are perpendicular
+    featureAngle 90;
+
+    // Maximum number of snapping relaxation iterations. Should stop
+    // before upon reaching a correct mesh.
+    nRelaxIter 3;
+
+    // Number of smoothing iterations of surface normals
+    nSmoothSurfaceNormals 1;
+
+    // Number of smoothing iterations of interior mesh movement direction
+    nSmoothNormals 3;
+
+    // Smooth layer thickness over surface patches
+    nSmoothThickness 10;
+
+    // Stop layer growth on highly warped cells
+    maxFaceThicknessRatio 1000;
+
+    // Reduce layer growth where ratio thickness to medial
+    // distance is large
+    maxThicknessToMedialRatio 0.3;
+
+    // Angle used to pick up medial axis points
+    // Note: changed(corrected) w.r.t 17x! 90 degrees corresponds to 130 in 17x.
+    minMedianAxisAngle 90;
+
+
+    // Create buffer region for new layer terminations
+    nBufferCellsNoExtrude 0;
+
+
+    // Overall max number of layer addition iterations. The mesher will exit
+    // if it reaches this number of iterations; possibly with an illegal
+    // mesh.
+    nLayerIter 50;
+}
+
+
+
+// Generic mesh quality settings. At any undoable phase these determine
+// where to undo.
+meshQualityControls
+{
+    #include "meshQualityDict"
+
+    // Advanced
+
+    //- Number of error distribution iterations
+    nSmoothScale 4;
+    //- amount to scale back displacement at error points
+    errorReduction 0.75;
+}
+
+
+// Advanced
+
+// Flags for optional output
+// 0 : only write final meshes
+// 1 : write intermediate meshes
+// 2 : write volScalarField with cellLevel for postprocessing
+// 4 : write current intersections as .obj files
+debug 0;
+
+
+// Merge tolerance. Is fraction of overall bounding box of initial mesh.
+// Note: the write tolerance needs to be higher than this.
+mergeTolerance 1e-6;
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/blob/system/topoSetDict b/tutorials/mesh/cvMesh/blob/system/topoSetDict
new file mode 100644
index 0000000000000000000000000000000000000000..f58b038ef44b5ca08da4e9f125f1ef933fa66ebd
--- /dev/null
+++ b/tutorials/mesh/cvMesh/blob/system/topoSetDict
@@ -0,0 +1,149 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      topoSetDict;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+actions
+(
+    {
+        name    z;
+        type    cellSet;
+        action  new;
+        source  boxToCell;
+        sourceInfo
+        {
+            box (-100 -100 -0.2)(100 100 100);
+        }
+    }
+
+    {
+        name    zf;
+        type    faceSet;
+        action  new;
+        source  cellToFace;
+        sourceInfo
+        {
+            set    z;
+            option all;
+        }
+    }
+
+    {
+        name    z;
+        type    cellSet;
+        action  invert;
+    }
+
+    {
+        name    zf;
+        type    faceSet;
+        action  subset;
+        source  cellToFace;
+        sourceInfo
+        {
+            set    z;
+            option all;
+        }
+    }
+
+    // ~~~~~~~~~~~~~~~~ //
+
+    {
+        name    x;
+        type    cellSet;
+        action  new;
+        source  boxToCell;
+        sourceInfo
+        {
+            box (-0.32 -100 -100)(100 100 100);
+        }
+    }
+
+    {
+        name    xf;
+        type    faceSet;
+        action  new;
+        source  cellToFace;
+        sourceInfo
+        {
+            set    x;
+            option all;
+        }
+    }
+
+    {
+        name    x;
+        type    cellSet;
+        action  invert;
+    }
+
+    {
+        name    xf;
+        type    faceSet;
+        action  subset;
+        source  cellToFace;
+        sourceInfo
+        {
+            set    x;
+            option all;
+        }
+    }
+
+    // ~~~~~~~~~~~~~~~~ //
+
+    {
+        name    sp;
+        type    cellSet;
+        action  new;
+        source  sphereToCell;
+        sourceInfo
+        {
+            centre (-0.3 -0.3 -0.3);
+            radius 0.4;
+        }
+    }
+
+    {
+        name    spf;
+        type    faceSet;
+        action  new;
+        source  cellToFace;
+        sourceInfo
+        {
+            set    sp;
+            option all;
+        }
+    }
+
+    {
+        name    sp;
+        type    cellSet;
+        action  invert;
+    }
+
+    {
+        name    spf;
+        type    faceSet;
+        action  subset;
+        source  cellToFace;
+        sourceInfo
+        {
+            set    sp;
+            option all;
+        }
+    }
+);
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/flange/Allclean b/tutorials/mesh/cvMesh/flange/Allclean
new file mode 100755
index 0000000000000000000000000000000000000000..dc1ee49a8fe81c236846b581745b8bf9c0f9b13a
--- /dev/null
+++ b/tutorials/mesh/cvMesh/flange/Allclean
@@ -0,0 +1,14 @@
+#!/bin/sh
+cd ${0%/*} || exit 1    # run from this directory
+
+# Source tutorial run functions
+. $WM_PROJECT_DIR/bin/tools/CleanFunctions
+
+rm -rf constant/extendedFeatureEdgeMesh > /dev/null 2>&1
+rm -r constant/ccx constant/ccy constant/ccz > /dev/null 2>&1
+rm -r constant/internalDelaunayVertices constant/targetCellSize > /dev/null 2>&1
+rm -r 0/ccx 0/ccy 0/ccz > /dev/null 2>&1
+
+cleanCase
+
+# ----------------------------------------------------------------- end-of-file
diff --git a/tutorials/mesh/cvMesh/flange/Allrun b/tutorials/mesh/cvMesh/flange/Allrun
new file mode 100755
index 0000000000000000000000000000000000000000..f3f891243724f6262cc41d0e6115929907235b4d
--- /dev/null
+++ b/tutorials/mesh/cvMesh/flange/Allrun
@@ -0,0 +1,19 @@
+#!/bin/sh
+cd ${0%/*} || exit 1    # run from this directory
+
+# Source tutorial run functions
+. $WM_PROJECT_DIR/bin/tools/RunFunctions
+
+runApplication surfaceFeatureExtract
+
+# Create tight-fitting background mesh
+runApplication blockMesh
+runApplication topoSet -dict system/topoSetDict-background
+mv log.topoSet log.topoSet.background
+runApplication subsetMesh background -patch walls -overwrite
+
+runApplication cvMesh
+runApplication collapseEdges -latestTime -collapseFaces
+runApplication checkMesh -latestTime -allGeometry -allTopology
+
+# ----------------------------------------------------------------- end-of-file
diff --git a/tutorials/mesh/cvMesh/flange/Allrun-parallel b/tutorials/mesh/cvMesh/flange/Allrun-parallel
new file mode 100755
index 0000000000000000000000000000000000000000..f5bedb8935ec8f063146fa1432b4769182cdc2f9
--- /dev/null
+++ b/tutorials/mesh/cvMesh/flange/Allrun-parallel
@@ -0,0 +1,26 @@
+#!/bin/sh
+cd ${0%/*} || exit 1    # run from this directory
+
+# Source tutorial run functions
+. $WM_PROJECT_DIR/bin/tools/RunFunctions
+
+# Get the number of processors to run on from system/decomposeParDict
+nProc=$(getNumberOfProcessors)
+
+runApplication surfaceFeatureExtract
+
+# Create tight-fitting background mesh
+runApplication blockMesh
+runApplication topoSet -dict system/topoSetDict-background
+mv log.topoSet log.topoSet.background
+runApplication subsetMesh background -patch walls -overwrite
+
+runApplication decomposePar
+
+runParallel cvMesh $nProc
+runParallel collapseEdges $nProc -latestTime -collapseFaces
+runParallel checkMesh $nProc -latestTime -allTopology -allGeometry
+
+runApplication reconstructParMesh -latestTime
+
+# ----------------------------------------------------------------- end-of-file
diff --git a/tutorials/mesh/cvMesh/flange/Alltest b/tutorials/mesh/cvMesh/flange/Alltest
new file mode 100755
index 0000000000000000000000000000000000000000..75b5887193055fc87ce8120145c5e72d0c335399
--- /dev/null
+++ b/tutorials/mesh/cvMesh/flange/Alltest
@@ -0,0 +1,21 @@
+#!/bin/sh
+cd ${0%/*} || exit 1    # run from this directory
+
+# Source tutorial run functions
+. $WM_PROJECT_DIR/bin/tools/RunFunctions
+
+runApplication surfaceFeatureExtract
+
+# Create tight-fitting background mesh
+runApplication blockMesh
+runApplication cvMesh
+
+# Change collapseEdges to only do one iteration
+cp system/collapseDict system/collapseDict.org
+
+sed -e s/"\(maximumIterations[ \t]*\)\([0-9]*\);"/"\1 1;"/g \
+system/collapseDict.org > system/collapseDict
+
+runApplication collapseEdges -latestTime -collapseFaces
+
+# ----------------------------------------------------------------- end-of-file
diff --git a/tutorials/mesh/cvMesh/flange/constant/polyMesh/blockMeshDict b/tutorials/mesh/cvMesh/flange/constant/polyMesh/blockMeshDict
new file mode 100644
index 0000000000000000000000000000000000000000..81d15816e37cbce5427f961bf339915ba1395524
--- /dev/null
+++ b/tutorials/mesh/cvMesh/flange/constant/polyMesh/blockMeshDict
@@ -0,0 +1,69 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      blockMeshDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+convertToMeters 1.0;
+
+xmin -0.0265;
+xmax  0.0265;
+ymin -0.028;
+ymax  0.023;
+zmin -0.024;
+zmax  0.01;
+
+vertices
+(
+    ($xmin $ymin $zmin)
+    ($xmax $ymin $zmin)
+    ($xmax $ymax $zmin)
+    ($xmin $ymax $zmin)
+    ($xmin $ymin $zmax)
+    ($xmax $ymin $zmax)
+    ($xmax $ymax $zmax)
+    ($xmin $ymax $zmax)
+
+);
+
+blocks
+(
+    hex (0 1 2  3 4 5 6 7) (5 6 3) simpleGrading (1 1 1)
+);
+
+edges
+(
+);
+
+boundary
+(
+    walls
+    {
+        type wall;
+        faces
+        (
+            (3 7 6 2)
+            (0 4 7 3)
+            (2 6 5 1)
+            (1 5 4 0)
+            (0 3 2 1)
+            (4 5 6 7)
+        );
+    }
+);
+
+mergePatchPairs
+(
+);
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/flange/constant/polyMesh/boundary b/tutorials/mesh/cvMesh/flange/constant/polyMesh/boundary
new file mode 100644
index 0000000000000000000000000000000000000000..efe6bfe832fedad4de807c79b291f6dcc2b14dde
--- /dev/null
+++ b/tutorials/mesh/cvMesh/flange/constant/polyMesh/boundary
@@ -0,0 +1,28 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       polyBoundaryMesh;
+    location    "constant/polyMesh";
+    object      boundary;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+1
+(
+    walls
+    {
+        type            wall;
+        nFaces          126;
+        startFace       207;
+    }
+)
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/flange/constant/triSurface/flange.obj b/tutorials/mesh/cvMesh/flange/constant/triSurface/flange.obj
new file mode 100644
index 0000000000000000000000000000000000000000..8b3998fe8a8b0b5e4759cef6521038f4e71db02d
--- /dev/null
+++ b/tutorials/mesh/cvMesh/flange/constant/triSurface/flange.obj
@@ -0,0 +1,9710 @@
+# Wavefront OBJ file
+# Regions:
+#     0    patch1
+#     1    patch2
+#     2    patch3
+#     3    patch4
+#
+# points    : 3228
+# triangles : 6468
+#
+v 0.003234 0.00317894 -0.01375
+v 0.00232785 0.00310005 -0.01375
+v 0.002302 0.00389537 -0.01375
+v 0.002302 -0.00389537 -0.01375
+v 0.00232785 -0.00310005 -0.01375
+v 0.003234 -0.00317894 -0.01375
+v 0.0097686 0.002 -0.0152248
+v 0.0111516 0.002 -0.014182
+v 0.0115415 0.002 -0.0156366
+v 0.0131584 0.002 -0.0151265
+v 0.0146963 0.002 -0.016257
+v 0.0131946 0.002 -0.0158693
+v 0.0144921 0.002 -0.01727
+v 0.015699 0.002 -0.0175533
+v 0.0125608 0.002 -0.0164174
+v 0.0134607 0.002 -0.01688
+v 0.0115415 0.002 -0.00286344
+v 0.0111516 0.002 -0.0043179
+v 0.0097686 0.002 -0.00327517
+v 0.0131946 0.002 -0.0026307
+v 0.0146963 0.002 -0.00224303
+v 0.0131584 0.002 -0.0033735
+v 0.015699 0.002 -0.00094673
+v 0.0144921 0.002 -0.00123011
+v 0.0134607 0.002 -0.0016199
+v 0.0125608 0.002 -0.00208264
+v -0.002302 0.00389537 -0.01375
+v -0.00232785 0.00310005 -0.01375
+v -0.003234 0.00317894 -0.01375
+v -0.003234 -0.00317894 -0.01375
+v -0.00232785 -0.00310005 -0.01375
+v -0.002302 -0.00389537 -0.01375
+v -0.0115415 0.002 -0.0156366
+v -0.0111516 0.002 -0.014182
+v -0.0097686 0.002 -0.0152248
+v -0.0131946 0.002 -0.0158693
+v -0.0146963 0.002 -0.016257
+v -0.0131584 0.002 -0.0151265
+v -0.015699 0.002 -0.0175533
+v -0.0144921 0.002 -0.01727
+v -0.0134607 0.002 -0.01688
+v -0.0125608 0.002 -0.0164174
+v -0.0097686 0.002 -0.00327517
+v -0.0111516 0.002 -0.0043179
+v -0.0115415 0.002 -0.00286344
+v -0.0131584 0.002 -0.0033735
+v -0.0146963 0.002 -0.00224303
+v -0.0131946 0.002 -0.0026307
+v -0.0144921 0.002 -0.00123011
+v -0.015699 0.002 -0.00094673
+v -0.0125608 0.002 -0.00208264
+v -0.0134607 0.002 -0.0016199
+v 0.00081649 0.0016143 -0.01375
+v 4.8963e-05 0.00165237 -0.01375
+v 4.8963e-05 0.00230474 -0.01375
+v 0.00120133 0.00230474 -0.01375
+v 0.00155489 0.00150593 -0.01375
+v 0.0023537 0.00230474 -0.01375
+v 0.0023537 0.00115237 -0.01375
+v 0.00166327 0.00076753 -0.01375
+v 0.0023537 -1.74e-18 -0.01375
+v 0.00170133 -3.04e-18 -0.01375
+v 0.00097284 0.00038268 -0.01375
+v 0.00104896 -3.91e-18 -0.01375
+v 0.00075607 0.0007071 -0.01375
+v 0.000431646 0.00092388 -0.01375
+v 4.8963e-05 0.001 -0.01375
+v 0.00249896 -0.00094365 -0.00925
+v 0.00249896 -6.98e-16 -0.00925
+v 0.0022979 -6.98e-16 -0.010222
+v 0.0022932 -0.00097703 -0.0102324
+v 0.00081649 -0.0016143 -0.01375
+v 0.00120133 -0.00230474 -0.01375
+v 4.8963e-05 -0.00230474 -0.01375
+v 4.8963e-05 -0.00165237 -0.01375
+v 0.00155489 -0.00150593 -0.01375
+v 0.0023537 -0.00230474 -0.01375
+v 0.00166327 -0.00076753 -0.01375
+v 0.0023537 -0.00115237 -0.01375
+v 0.00097284 -0.00038268 -0.01375
+v 0.00075607 -0.0007071 -0.01375
+v 0.000431646 -0.00092388 -0.01375
+v 4.8963e-05 -0.001 -0.01375
+v 0.0107846 0.002 -0.0109912
+v 0.0096058 0.002 -0.011181
+v 0.009799 0.002 -0.00925
+v 0.0107791 0.002 -0.00925
+v 0.0117593 0.002 -0.00925
+v 0.0119634 0.002 -0.0108016
+v 0.0162069 0.002 -0.0150457
+v 0.0166766 0.002 -0.0163743
+v 0.0147592 0.002 -0.014446
+v 0.0177593 0.002 -0.01525
+v 0.0177593 0.002 -0.0166736
+v 0.0167117 0.002 -0.0174385
+v 0.0177593 0.002 -0.0183878
+v 0.0159418 0.002 -0.0192534
+v 0.008014 0.002 -0.0171347
+v 0.0065 0.002 -0.0165607
+v 0.0079468 0.002 -0.0149673
+v 0.0090659 0.002 -0.016288
+v 0.008476 0.002 -0.0185554
+v 0.0065 0.002 -0.018933
+v 0.0106532 0.002 -0.017664
+v 0.0087366 0.002 -0.0205014
+v 0.0065 0.002 -0.0213056
+v 0.0092624 0.002 -0.0224344
+v 0.0065 0.002 -0.02375
+v 0.0116557 0.002 -0.019395
+v 0.010708 0.002 -0.0196982
+v 0.0120812 0.002 -0.0185232
+v 0.0117868 0.002 -0.021232
+v 0.0130909 0.002 -0.0192646
+v 0.0121778 0.002 -0.019964
+v 0.0139919 0.002 -0.020182
+v 0.0089605 0.002 -0.0132056
+v 0.0120464 0.002 -0.0172835
+v 0.0129252 0.002 -0.017769
+v 0.013513 0.002 -0.013489
+v 0.0141125 0.002 -0.0183892
+v 0.0107617 0.002 -0.0127276
+v 0.012563 0.002 -0.0122497
+v 0.0022932 -0.00097703 -0.0082676
+v 0.0022979 -6.98e-16 -0.008278
+v 0.0235547 0.002 -0.0108036
+v 0.0237593 0.002 -0.00925
+v 0.0248843 0.002 -0.00925
+v 0.02461 0.002 -0.0112059
+v 0.0260093 0.002 -0.00925
+v 0.025665 0.002 -0.0116081
+v 0.0229553 0.002 -0.0122503
+v 0.0238083 0.002 -0.01301
+v 0.024661 0.002 -0.0137696
+v 0.022002 0.002 -0.0134926
+v 0.0225418 0.002 -0.0145232
+v 0.0230815 0.002 -0.0155537
+v 0.0207594 0.002 -0.014446
+v 0.0209085 0.002 -0.015629
+v 0.0210577 0.002 -0.016812
+v 0.0193148 0.002 -0.0150449
+v 0.0193617 0.002 -0.016288
+v 0.01945 0.002 -0.0175827
+v 0.0235547 0.002 -0.0076964
+v 0.02461 0.002 -0.0072941
+v 0.025665 0.002 -0.0068919
+v 0.0229553 0.002 -0.0062497
+v 0.0238083 0.002 -0.00549006
+v 0.024661 0.002 -0.0047304
+v 0.022002 0.002 -0.00500735
+v 0.0225418 0.002 -0.0039768
+v 0.0230815 0.002 -0.0029463
+v 0.0207594 0.002 -0.00405388
+v 0.0209085 0.002 -0.00287096
+v 0.0210577 0.002 -0.00168803
+v 0.0193148 0.002 -0.00345514
+v 0.0193617 0.002 -0.0022119
+v 0.0194085 0.002 -0.0009687
+v 0.0177593 0.002 -0.00325
+v 0.0177593 0.002 -0.00182637
+v 0.0177593 0.002 -0.000249369
+v 0.0107846 0.002 -0.0075088
+v 0.0096058 0.002 -0.007319
+v 0.0119634 0.002 -0.0076985
+v 0.0162069 0.002 -0.0034543
+v 0.0147592 0.002 -0.0040539
+v 0.0166766 0.002 -0.00212568
+v 0.0167117 0.002 -0.00106153
+v 0.0158684 0.002 0.00057542
+v 0.008014 0.002 -0.00136532
+v 0.0090659 0.002 -0.00221207
+v 0.0079468 0.002 -0.0035327
+v 0.0065 0.002 -0.00193928
+v 0.0065 0.002 0.00043318
+v 0.008476 0.002 5.5378e-05
+v 0.0106532 0.002 -0.00083587
+v 0.0065 0.002 0.00225
+v 0.0088096 0.002 0.00225
+v 0.0116557 0.002 0.00089514
+v 0.0120812 0.002 2.32197e-05
+v 0.010708 0.002 0.0011982
+v 0.0121778 0.002 0.00146398
+v 0.0130909 0.002 0.00076461
+v 0.0120291 0.002 0.00225
+v 0.0139774 0.002 0.00140021
+v 0.0089605 0.002 -0.00529437
+v 0.0120464 0.002 -0.0012165
+v 0.0129252 0.002 -0.000731
+v 0.013513 0.002 -0.00501106
+v 0.0141125 0.002 -0.000110779
+v 0.0107617 0.002 -0.0057724
+v 0.012563 0.002 -0.0062503
+v -0.00081649 0.0016143 -0.01375
+v -0.00120133 0.00230474 -0.01375
+v -0.00155489 0.00150593 -0.01375
+v -0.0023537 0.00230474 -0.01375
+v -0.00166327 0.00076753 -0.01375
+v -0.0023537 0.00115237 -0.01375
+v -0.00170133 -3.04e-18 -0.01375
+v -0.0023537 -1.74e-18 -0.01375
+v -0.00097284 0.00038268 -0.01375
+v -0.00104896 -3.91e-18 -0.01375
+v -0.00075607 0.0007071 -0.01375
+v -0.000431646 0.00092388 -0.01375
+v -0.00249896 -0.00094365 -0.00925
+v -0.0022932 -0.00097703 -0.0102324
+v -0.0022979 -6.98e-16 -0.010222
+v -0.00249896 -6.98e-16 -0.00925
+v -0.00081649 -0.0016143 -0.01375
+v -0.00120133 -0.00230474 -0.01375
+v -0.00155489 -0.00150593 -0.01375
+v -0.0023537 -0.00230474 -0.01375
+v -0.0023537 -0.00115237 -0.01375
+v -0.00166327 -0.00076753 -0.01375
+v -0.00097284 -0.00038268 -0.01375
+v -0.00075607 -0.0007071 -0.01375
+v -0.000431646 -0.00092388 -0.01375
+v -0.0107846 0.002 -0.0109912
+v -0.0107791 0.002 -0.00925
+v -0.009799 0.002 -0.00925
+v -0.0096058 0.002 -0.011181
+v -0.0117593 0.002 -0.00925
+v -0.0119634 0.002 -0.0108016
+v -0.0162069 0.002 -0.0150457
+v -0.0147592 0.002 -0.014446
+v -0.0166766 0.002 -0.0163743
+v -0.0177593 0.002 -0.0166736
+v -0.0177593 0.002 -0.01525
+v -0.0167117 0.002 -0.0174385
+v -0.0159418 0.002 -0.0192534
+v -0.0177593 0.002 -0.0183878
+v -0.008014 0.002 -0.0171347
+v -0.0090659 0.002 -0.016288
+v -0.0079468 0.002 -0.0149673
+v -0.0065 0.002 -0.0165607
+v -0.0065 0.002 -0.018933
+v -0.008476 0.002 -0.0185554
+v -0.0106532 0.002 -0.017664
+v -0.0087366 0.002 -0.0205014
+v -0.0065 0.002 -0.0213056
+v -0.0065 0.002 -0.02375
+v -0.0092624 0.002 -0.0224344
+v -0.0116557 0.002 -0.019395
+v -0.0120812 0.002 -0.0185232
+v -0.010708 0.002 -0.0196982
+v -0.0117868 0.002 -0.021232
+v -0.0121778 0.002 -0.019964
+v -0.0130909 0.002 -0.0192646
+v -0.0139919 0.002 -0.020182
+v -0.0089605 0.002 -0.0132056
+v -0.0120464 0.002 -0.0172835
+v -0.0129252 0.002 -0.017769
+v -0.013513 0.002 -0.013489
+v -0.0141125 0.002 -0.0183892
+v -0.0107617 0.002 -0.0127276
+v -0.012563 0.002 -0.0122497
+v -0.0022979 -6.98e-16 -0.008278
+v -0.0022932 -0.00097703 -0.0082676
+v -0.0235547 0.002 -0.0108036
+v -0.02461 0.002 -0.0112059
+v -0.0248843 0.002 -0.00925
+v -0.0237593 0.002 -0.00925
+v -0.025665 0.002 -0.0116081
+v -0.0260093 0.002 -0.00925
+v -0.0229553 0.002 -0.0122503
+v -0.0238083 0.002 -0.01301
+v -0.024661 0.002 -0.0137696
+v -0.022002 0.002 -0.0134926
+v -0.0225418 0.002 -0.0145232
+v -0.0230815 0.002 -0.0155537
+v -0.0207594 0.002 -0.014446
+v -0.0209085 0.002 -0.015629
+v -0.0210577 0.002 -0.016812
+v -0.0193148 0.002 -0.0150449
+v -0.0193617 0.002 -0.016288
+v -0.01945 0.002 -0.0175827
+v -0.0235547 0.002 -0.0076964
+v -0.02461 0.002 -0.0072941
+v -0.025665 0.002 -0.0068919
+v -0.0229553 0.002 -0.0062497
+v -0.0238083 0.002 -0.00549006
+v -0.024661 0.002 -0.0047304
+v -0.022002 0.002 -0.00500735
+v -0.0225418 0.002 -0.0039768
+v -0.0230815 0.002 -0.0029463
+v -0.0207594 0.002 -0.00405388
+v -0.0209085 0.002 -0.00287096
+v -0.0210577 0.002 -0.00168803
+v -0.0193148 0.002 -0.00345514
+v -0.0193617 0.002 -0.0022119
+v -0.0194085 0.002 -0.0009687
+v -0.0177593 0.002 -0.00182637
+v -0.0177593 0.002 -0.00325
+v -0.0177593 0.002 -0.000249369
+v -0.0107846 0.002 -0.0075088
+v -0.0096058 0.002 -0.007319
+v -0.0119634 0.002 -0.0076985
+v -0.0162069 0.002 -0.0034543
+v -0.0166766 0.002 -0.00212568
+v -0.0147592 0.002 -0.0040539
+v -0.0167117 0.002 -0.00106153
+v -0.0158684 0.002 0.00057542
+v -0.008014 0.002 -0.00136532
+v -0.0065 0.002 -0.00193928
+v -0.0079468 0.002 -0.0035327
+v -0.0090659 0.002 -0.00221207
+v -0.008476 0.002 5.5378e-05
+v -0.0065 0.002 0.00043318
+v -0.0106532 0.002 -0.00083587
+v -0.0088096 0.002 0.00225
+v -0.0065 0.002 0.00225
+v -0.0116557 0.002 0.00089514
+v -0.010708 0.002 0.0011982
+v -0.0120812 0.002 2.32197e-05
+v -0.0130909 0.002 0.00076461
+v -0.0121778 0.002 0.00146398
+v -0.0120291 0.002 0.00225
+v -0.0139774 0.002 0.00140021
+v -0.0089605 0.002 -0.00529437
+v -0.0120464 0.002 -0.0012165
+v -0.0129252 0.002 -0.000731
+v -0.013513 0.002 -0.00501106
+v -0.0141125 0.002 -0.000110779
+v -0.0107617 0.002 -0.0057724
+v -0.012563 0.002 -0.0062503
+v 0.0039486 0.00224557 -0.01375
+v 0.00315117 0.00227516 -0.01375
+v 0.00315117 -0.00227516 -0.01375
+v 0.0039486 -0.00224557 -0.01375
+v 0.00288809 -0.0275 -0.013156
+v 0.00312345 -0.0275 -0.01375
+v 0.00391928 -0.0275 -0.013087
+v 0.0032891 -0.0275 -0.01259
+v 0.00429036 -0.0275 -0.0126724
+v 0.00312345 -0.0275 -0.00475
+v 0.00288809 -0.0275 -0.005344
+v 0.00391928 -0.0275 -0.0054129
+v 0.0032891 -0.0275 -0.0059101
+v 0.00429036 -0.0275 -0.00582756
+v 0.0031568 0.00226529 0.00225
+v 0.0039599 0.00222589 0.00225
+v 0.00323885 0.00317405 0.00225
+v 0.00216496 0.00397147 0.00225
+v 0.00233276 0.00310005 0.00225
+v 0.0039599 -0.00222589 0.00225
+v 0.0031568 -0.00226529 0.00225
+v 0.00323885 -0.00317405 0.00225
+v 0.00233276 -0.00310005 0.00225
+v 0.00216496 -0.00397147 0.00225
+v -0.00315117 0.00227516 -0.01375
+v -0.0039486 0.00224557 -0.01375
+v -0.0039486 -0.00224557 -0.01375
+v -0.00315117 -0.00227516 -0.01375
+v -0.00312345 -0.0275 -0.01375
+v -0.00288809 -0.0275 -0.013156
+v -0.00391928 -0.0275 -0.013087
+v -0.0032891 -0.0275 -0.01259
+v -0.00429036 -0.0275 -0.0126724
+v -0.00288809 -0.0275 -0.005344
+v -0.00312345 -0.0275 -0.00475
+v -0.00391928 -0.0275 -0.0054129
+v -0.0032891 -0.0275 -0.0059101
+v -0.00429036 -0.0275 -0.00582756
+v -0.0039599 0.00222589 0.00225
+v -0.0031568 0.00226529 0.00225
+v -0.00323885 0.00317405 0.00225
+v -0.00233276 0.00310005 0.00225
+v -0.00216496 0.00397147 0.00225
+v -0.0031568 -0.00226529 0.00225
+v -0.0039599 -0.00222589 0.00225
+v -0.00323885 -0.00317405 0.00225
+v -0.00216496 -0.00397147 0.00225
+v -0.00233276 -0.00310005 0.00225
+v 0.0065 0.003375 -0.0165157
+v 0.0079194 0.0033836 -0.0149475
+v 0.0089295 0.00338968 -0.0131919
+v 0.00789208 0.0047672 -0.0149277
+v 0.0088986 0.00477936 -0.013178
+v 0.0065 0.00475 -0.0164708
+v 0.0095725 0.0033932 -0.0111742
+v 0.009765 0.00339429 -0.00925
+v 0.0095392 0.0047864 -0.0111675
+v 0.009731 0.00478857 -0.00925
+v 0.007871 0.00616027 -0.014888
+v 0.0088701 0.0061845 -0.0131506
+v 0.0078374 0.0075345 -0.014888
+v 0.0088366 0.0075587 -0.0131506
+v 0.0065 0.006125 -0.0164258
+v 0.0065 0.0075 -0.0163808
+v 0.0095061 0.0061986 -0.011154
+v 0.0094726 0.0075728 -0.011154
+v 0.0096965 0.006203 -0.00925
+v 0.009663 0.0075771 -0.00925
+v 4.8963e-05 0.0045 -0.02375
+v 4.8963e-05 0.0055 -0.02375
+v 0.0011137 0.0053555 -0.02375
+v 0.00104896 0.00438748 -0.02375
+v 4.8963e-05 0.0075 -0.02375
+v 0.00148663 0.0075 -0.02375
+v 0.00221962 0.0051977 -0.02375
+v 0.00216496 0.00397147 -0.02375
+v 0.0029119 0.0075 -0.02375
+v 0.00367495 0.005513 -0.02375
+v 0.00323885 0.00317405 -0.02375
+v 0.0042271 0.0075 -0.02375
+v 0.0043992 0.00115128 -0.02375
+v 0.0054496 0.00157564 -0.02375
+v 0.00552448 -6.84e-16 -0.02375
+v 0.004549 -6.84e-16 -0.02375
+v 0.0039599 0.00222589 -0.02375
+v 0.00523 0.00280044 -0.02375
+v 0.0048694 0.003962 -0.02375
+v 0.0051534 0.005731 -0.02375
+v 0.0054374 0.0075 -0.02375
+v 0.0065 5.47e-15 -0.02375
+v 0.0065 0.003375 -0.02375
+v 0.0065 0.00475 -0.02375
+v 0.0065 0.006125 -0.02375
+v 0.0065 0.0075 -0.02375
+v 4.8963e-05 -0.0045 -0.02375
+v 0.00104896 -0.00438748 -0.02375
+v 0.0011137 -0.0053555 -0.02375
+v 4.8963e-05 -0.0055 -0.02375
+v 0.00148663 -0.0075 -0.02375
+v 4.8963e-05 -0.0075 -0.02375
+v 0.00216496 -0.00397147 -0.02375
+v 0.00221962 -0.0051977 -0.02375
+v 0.0029119 -0.0075 -0.02375
+v 0.00323885 -0.00317405 -0.02375
+v 0.00367495 -0.005513 -0.02375
+v 0.0042271 -0.0075 -0.02375
+v 0.0043992 -0.00115128 -0.02375
+v 0.0054496 -0.00157564 -0.02375
+v 0.00523 -0.00280044 -0.02375
+v 0.0039599 -0.00222589 -0.02375
+v 0.0048694 -0.003962 -0.02375
+v 0.0051534 -0.005731 -0.02375
+v 0.0054374 -0.0075 -0.02375
+v 0.0065 -0.002 -0.02375
+v 0.0065 -0.003375 -0.02375
+v 0.0065 -0.00475 -0.02375
+v 0.0065 -0.006125 -0.02375
+v 0.0065 -0.0075 -0.02375
+v 4.8963e-05 -0.0175 -0.0147
+v 4.8963e-05 -0.0175 -0.016475
+v 0.00124515 -0.0175 -0.0163737
+v 0.00109717 -0.0175 -0.0145982
+v 4.8963e-05 -0.0175 -0.01825
+v 0.00139314 -0.0175 -0.018149
+v 0.00238149 -0.0175 -0.0160825
+v 0.0020612 -0.0175 -0.014315
+v 0.00270178 -0.0175 -0.01785
+v 0.00354179 -0.0175 -0.0155529
+v 0.00312345 -0.0175 -0.01375
+v 0.0039601 -0.0175 -0.0173557
+v 0.00448925 -0.0175 -0.0149068
+v 0.00391928 -0.0175 -0.013087
+v 0.0050592 -0.0175 -0.0167264
+v 0.00529216 -0.0175 -0.0142016
+v 0.00429036 -0.0175 -0.0126724
+v 0.006294 -0.0175 -0.0157307
+v 0.0047034 -0.0175 -0.0120852
+v 0.006085 -0.0175 -0.0132161
+v 0.0066761 -0.0175 -0.0121268
+v 0.00501887 -0.0175 -0.0114866
+v 0.00746649 -0.0175 -0.014347
+v 0.0083333 -0.0175 -0.012767
+v 0.0053672 -0.0175 -0.010441
+v 0.00712418 -0.0175 -0.0107105
+v 0.0088811 -0.0175 -0.01098
+v 0.005499 -0.0175 -0.00925
+v 0.007274 -0.0175 -0.00925
+v 0.009049 -0.0175 -0.00925
+v 4.8962e-05 -0.0275 -0.01245
+v 4.89625e-05 -0.0275 -0.0132
+v 0.00107307 -0.0275 -0.0130425
+v 0.00106101 -0.0275 -0.0122646
+v 4.8962e-05 -0.0275 -0.0117
+v 0.00104896 -0.0275 -0.0114868
+v 0.002086 -0.0275 -0.0127852
+v 0.0019891 -0.0275 -0.0118203
+v 0.00178137 -0.0275 -0.0109825
+v 0.00251807 -0.0275 -0.0118038
+v 0.00276864 -0.0275 -0.012485
+v 0.00252846 -0.0275 -0.0112413
+v 0.00231247 -0.0275 -0.0101877
+v 0.0032963 -0.0275 -0.0103751
+v 0.00249896 -0.0275 -0.00925
+v 0.0033171 -0.0275 -0.0092501
+v 0.003269 -0.0275 -0.0120778
+v 0.0037536 -0.0275 -0.0113674
+v 0.0047034 -0.0275 -0.0120852
+v 0.00501887 -0.0275 -0.0114866
+v 0.00433179 -0.0275 -0.010408
+v 0.0053672 -0.0275 -0.010441
+v 0.004509 -0.0275 -0.00925
+v 0.005499 -0.0275 -0.00925
+v 4.89628e-05 -0.0275 -0.01395
+v 0.00108512 -0.0275 -0.0138204
+v 4.8963e-05 -0.0275 -0.0147
+v 0.00109717 -0.0275 -0.0145982
+v 0.0020873 -0.0275 -0.0135446
+v 0.0020612 -0.0275 -0.014315
+v 0.00104896 0.0225 -0.0161782
+v 0.00127296 0.0224614 -0.0174672
+v 4.8963e-05 0.0224614 -0.017558
+v 4.8963e-05 0.0225 -0.01625
+v 0.0015038 0.0225 -0.0183849
+v 4.8963e-05 0.0225 -0.0185
+v 0.0021601 0.0225 -0.015924
+v 0.002536 0.0224614 -0.017177
+v 0.00284678 0.0225 -0.0180667
+v 0.0032438 0.0225 -0.0154784
+v 0.00373546 0.0224614 -0.0166946
+v 0.00408266 0.0225 -0.017574
+v 0.0043334 0.0225 -0.0147856
+v 0.0048854 0.0224614 -0.016
+v 0.0052903 0.0225 -0.0168717
+v 0.0054108 0.0225 -0.01375
+v 0.0059554 0.0224614 -0.0150654
+v 0.00635 0.0225 -0.016022
+v 0.0061985 0.0225 -0.0125942
+v 0.006682 0.0225 -0.0114866
+v 0.0077593 0.0224908 -0.0123186
+v 0.007018 0.0224787 -0.0137412
+v 0.008537 0.0225 -0.0129264
+v 0.0075997 0.0225 -0.014593
+v 0.0069557 0.0225 -0.010389
+v 0.0082141 0.0224979 -0.0107716
+v 0.009116 0.0225 -0.011081
+v 0.007049 0.0225 -0.00925
+v 0.008356 0.0225 -0.00925
+v 0.009299 0.0225 -0.00925
+v 0.00249896 -0.0018873 -0.00925
+v 0.0022885 -0.00195405 -0.0102427
+v 0.0017277 5.66e-08 -0.0110345
+v 0.0017277 -0.00115243 -0.0110345
+v 0.0017277 -0.0023048 -0.0110345
+v 0.000781428 -0.00161437 -0.011588
+v 4.8963e-05 -0.00165243 -0.0116999
+v 4.8963e-05 -0.0023048 -0.0116999
+v 0.0010918 -0.0023048 -0.011467
+v 0.00133196 -0.00150598 -0.0113372
+v 0.00139701 -0.00076758 -0.0112958
+v 0.00141894 5.66e-08 -0.0112812
+v 0.00096135 -0.00040932 -0.0115238
+v 0.00104896 -6.98e-16 -0.0114866
+v 0.00074085 -0.0007218 -0.0116002
+v 0.000427704 -0.00092555 -0.0116705
+v 4.8963e-05 -0.00100006 -0.0116999
+v 0.0065 0.003375 -0.00198425
+v 0.0079194 0.0033836 -0.0035525
+v 0.0089295 0.00338968 -0.0053081
+v 0.00789208 0.0047672 -0.00357229
+v 0.0088986 0.00477936 -0.00532189
+v 0.0065 0.00475 -0.00202923
+v 0.0095725 0.0033932 -0.0073258
+v 0.0095392 0.0047864 -0.0073325
+v 0.007871 0.00616027 -0.00361186
+v 0.0088701 0.0061845 -0.0053494
+v 0.0088366 0.0075587 -0.0053494
+v 0.0078374 0.0075345 -0.00361186
+v 0.0065 0.006125 -0.0020742
+v 0.0065 0.0075 -0.00211917
+v 0.0095061 0.0061986 -0.007346
+v 0.0094726 0.0075728 -0.007346
+v 0.000902 0.0044184 0.00225
+v 0.0011137 0.0053555 0.00225
+v 4.8963e-05 0.0055 0.00224996
+v 4.8963e-05 0.0045 0.00225
+v 0.00149694 0.0075 0.00225
+v 4.8963e-05 0.0075 0.00225
+v 0.00221962 0.0051977 0.00225
+v 0.0029119 0.0075 0.00225
+v 0.00352837 0.00529856 0.00225
+v 0.0042271 0.0075 0.00225
+v 0.0043992 0.00115128 0.00225
+v 0.004549 -1.38e-15 0.00225
+v 0.00530456 -1.38e-15 0.00225
+v 0.0052181 0.00148194 0.00225
+v 0.00503615 0.0027323 0.00225
+v 0.0047612 0.00394096 0.00225
+v 0.0049116 0.00555049 0.00225
+v 0.0054374 0.0075 0.00225
+v 0.0065 1.92e-08 0.00225
+v 0.0065 0.003375 0.00225
+v 0.0065 0.00475 0.00225
+v 0.0065 0.006125 0.00225
+v 0.0065 0.0075 0.00225
+v 0.000902 -0.0044184 0.00225
+v 4.8963e-05 -0.0045 0.00225
+v 4.8963e-05 -0.0055 0.00224996
+v 0.0011137 -0.0053555 0.00225
+v 4.8963e-05 -0.0075 0.00225
+v 0.00149694 -0.0075 0.00225
+v 0.00221962 -0.0051977 0.00225
+v 0.0029119 -0.0075 0.00225
+v 0.00352837 -0.00529856 0.00225
+v 0.0042271 -0.0075 0.00225
+v 0.0043992 -0.00115128 0.00225
+v 0.0052181 -0.00148194 0.00225
+v 0.00503615 -0.0027323 0.00225
+v 0.0047612 -0.00394096 0.00225
+v 0.0049116 -0.00555049 0.00225
+v 0.0054374 -0.0075 0.00225
+v 0.0065 -0.002 0.00225
+v 0.0065 -0.003375 0.00225
+v 0.0065 -0.00475 0.00225
+v 0.0065 -0.006125 0.00225
+v 0.0065 -0.0075 0.00225
+v 4.8963e-05 -0.0175 -0.0038
+v 0.00109717 -0.0175 -0.00390175
+v 0.00124515 -0.0175 -0.00212635
+v 4.8963e-05 -0.0175 -0.002025
+v 0.00139314 -0.0175 -0.000350945
+v 4.8963e-05 -0.0175 -0.00025
+v 0.0020612 -0.0175 -0.00418508
+v 0.00238149 -0.0175 -0.00241747
+v 0.00270178 -0.0175 -0.00064985
+v 0.00312345 -0.0175 -0.00475
+v 0.00354179 -0.0175 -0.00294714
+v 0.0039601 -0.0175 -0.00114427
+v 0.00391928 -0.0175 -0.0054129
+v 0.00448925 -0.0175 -0.00359324
+v 0.0050592 -0.0175 -0.00177355
+v 0.00429036 -0.0175 -0.00582756
+v 0.00529216 -0.0175 -0.0042984
+v 0.006294 -0.0175 -0.00276926
+v 0.0047034 -0.0175 -0.0064148
+v 0.00501887 -0.0175 -0.00701337
+v 0.0066761 -0.0175 -0.00637318
+v 0.006085 -0.0175 -0.00528385
+v 0.0083333 -0.0175 -0.005733
+v 0.00746649 -0.0175 -0.0041529
+v 0.0053672 -0.0175 -0.008059
+v 0.00712418 -0.0175 -0.00778949
+v 0.0088811 -0.0175 -0.00752
+v 4.8962e-05 -0.0275 -0.00605
+v 0.00106101 -0.0275 -0.00623537
+v 0.00107307 -0.0275 -0.0054575
+v 4.89625e-05 -0.0275 -0.0053
+v 4.8962e-05 -0.0275 -0.0068
+v 0.00104896 -0.0275 -0.0070132
+v 0.0019891 -0.0275 -0.00667967
+v 0.002086 -0.0275 -0.00571477
+v 0.00178137 -0.0275 -0.0075175
+v 0.00251807 -0.0275 -0.0066962
+v 0.00276864 -0.0275 -0.006015
+v 0.00252846 -0.0275 -0.0072587
+v 0.00231247 -0.0275 -0.00831229
+v 0.0032963 -0.0275 -0.0081249
+v 0.0037536 -0.0275 -0.0071326
+v 0.003269 -0.0275 -0.0064222
+v 0.00501887 -0.0275 -0.00701337
+v 0.0047034 -0.0275 -0.0064148
+v 0.00433179 -0.0275 -0.008092
+v 0.0053672 -0.0275 -0.008059
+v 0.00108512 -0.0275 -0.0046796
+v 4.89628e-05 -0.0275 -0.00455
+v 0.00109717 -0.0275 -0.00390175
+v 4.8963e-05 -0.0275 -0.0038
+v 0.0020873 -0.0275 -0.0049554
+v 0.0020612 -0.0275 -0.00418508
+v 0.00104896 0.0225 -0.00232179
+v 4.8963e-05 0.0225 -0.00225
+v 4.8963e-05 0.0224614 -0.00094208
+v 0.00127296 0.0224614 -0.0010328
+v 4.8963e-05 0.0225 0
+v 0.0015038 0.0225 -0.000115125
+v 0.0021601 0.0225 -0.00257594
+v 0.002536 0.0224614 -0.00132308
+v 0.00284678 0.0225 -0.00043327
+v 0.00373546 0.0224614 -0.00180545
+v 0.0032438 0.0225 -0.0030216
+v 0.00408266 0.0225 -0.00092583
+v 0.0048854 0.0224614 -0.0025
+v 0.0043334 0.0225 -0.00371436
+v 0.0052903 0.0225 -0.0016283
+v 0.0059554 0.0224614 -0.00343458
+v 0.0054108 0.0225 -0.00475
+v 0.00635 0.0225 -0.002478
+v 0.0061985 0.0225 -0.0059058
+v 0.007018 0.0224787 -0.0047588
+v 0.0077593 0.0224908 -0.0061814
+v 0.006682 0.0225 -0.00701337
+v 0.0075997 0.0225 -0.0039069
+v 0.008537 0.0225 -0.0055736
+v 0.0082141 0.0224979 -0.0077284
+v 0.0069557 0.0225 -0.0081109
+v 0.009116 0.0225 -0.007419
+v 0.0022885 -0.00195405 -0.0082573
+v 0.0017277 -0.00115243 -0.0074655
+v 0.0017277 5.66e-08 -0.0074655
+v 0.0017277 -0.0023048 -0.0074655
+v 0.00102184 -0.0011524 -0.0070027
+v 0.0010918 -0.0023048 -0.007033
+v 4.8963e-05 -0.0023048 -0.0068001
+v 4.8963e-05 -0.0011524 -0.00680007
+v 0.0009519 2.24e-11 -0.0069725
+v 4.8963e-05 6.26e-10 -0.0068
+v 0.00120133 0.00115236 0.00225003
+v 0.00120133 0.00230474 0.00225
+v 4.8962e-05 0.00230474 0.00225
+v 4.8962e-05 0.00115234 0.00225007
+v 0.0023537 0.00115237 0.00225
+v 0.0023537 0.00230474 0.00225
+v 0.00120133 2.8e-08 0.00225007
+v 0.0023537 4.2e-16 0.00225
+v 4.8962e-05 -5.6e-08 0.00225014
+v 0.00338055 0.00113612 0.00225
+v 0.0034513 4.2e-16 0.00225
+v 0.00119592 0.00333005 0.00225
+v 4.8963e-05 0.0034442 0.00225
+v 0.00120133 -0.00115236 0.00225003
+v 4.8962e-05 -0.00115234 0.00225007
+v 4.8962e-05 -0.00230474 0.00225
+v 0.00120133 -0.00230474 0.00225
+v 0.0023537 -0.00115237 0.00225
+v 0.0023537 -0.00230474 0.00225
+v 0.00338055 -0.00113612 0.00225
+v 0.00119592 -0.00333005 0.00225
+v 4.8963e-05 -0.0034442 0.00225
+v -0.0065 0.003375 -0.0165157
+v -0.0079194 0.0033836 -0.0149475
+v -0.0089295 0.00338968 -0.0131919
+v -0.00789208 0.0047672 -0.0149277
+v -0.0088986 0.00477936 -0.013178
+v -0.0065 0.00475 -0.0164708
+v -0.0095725 0.0033932 -0.0111742
+v -0.009765 0.00339429 -0.00925
+v -0.0095392 0.0047864 -0.0111675
+v -0.009731 0.00478857 -0.00925
+v -0.007871 0.00616027 -0.014888
+v -0.0088701 0.0061845 -0.0131506
+v -0.0088366 0.0075587 -0.0131506
+v -0.0078374 0.0075345 -0.014888
+v -0.0065 0.006125 -0.0164258
+v -0.0065 0.0075 -0.0163808
+v -0.0095061 0.0061986 -0.011154
+v -0.0094726 0.0075728 -0.011154
+v -0.0096965 0.006203 -0.00925
+v -0.009663 0.0075771 -0.00925
+v -0.00104896 0.00438748 -0.02375
+v -0.0011137 0.0053555 -0.02375
+v -0.00148663 0.0075 -0.02375
+v -0.00216496 0.00397147 -0.02375
+v -0.00221962 0.0051977 -0.02375
+v -0.0029119 0.0075 -0.02375
+v -0.00323885 0.00317405 -0.02375
+v -0.00367495 0.005513 -0.02375
+v -0.0042271 0.0075 -0.02375
+v -0.0043992 0.00115128 -0.02375
+v -0.004549 -6.84e-16 -0.02375
+v -0.00552448 -6.84e-16 -0.02375
+v -0.0054496 0.00157564 -0.02375
+v -0.00523 0.00280044 -0.02375
+v -0.0039599 0.00222589 -0.02375
+v -0.0048694 0.003962 -0.02375
+v -0.0051534 0.005731 -0.02375
+v -0.0054374 0.0075 -0.02375
+v -0.0065 5.47e-15 -0.02375
+v -0.0065 0.003375 -0.02375
+v -0.0065 0.00475 -0.02375
+v -0.0065 0.006125 -0.02375
+v -0.0065 0.0075 -0.02375
+v -0.0011137 -0.0053555 -0.02375
+v -0.00104896 -0.00438748 -0.02375
+v -0.00148663 -0.0075 -0.02375
+v -0.00221962 -0.0051977 -0.02375
+v -0.00216496 -0.00397147 -0.02375
+v -0.0029119 -0.0075 -0.02375
+v -0.00367495 -0.005513 -0.02375
+v -0.00323885 -0.00317405 -0.02375
+v -0.0042271 -0.0075 -0.02375
+v -0.0043992 -0.00115128 -0.02375
+v -0.0054496 -0.00157564 -0.02375
+v -0.0039599 -0.00222589 -0.02375
+v -0.00523 -0.00280044 -0.02375
+v -0.0048694 -0.003962 -0.02375
+v -0.0051534 -0.005731 -0.02375
+v -0.0054374 -0.0075 -0.02375
+v -0.0065 -0.002 -0.02375
+v -0.0065 -0.003375 -0.02375
+v -0.0065 -0.00475 -0.02375
+v -0.0065 -0.006125 -0.02375
+v -0.0065 -0.0075 -0.02375
+v -0.00109717 -0.0175 -0.0145982
+v -0.00124515 -0.0175 -0.0163737
+v -0.00139314 -0.0175 -0.018149
+v -0.0020612 -0.0175 -0.014315
+v -0.00238149 -0.0175 -0.0160825
+v -0.00270178 -0.0175 -0.01785
+v -0.00312345 -0.0175 -0.01375
+v -0.00354179 -0.0175 -0.0155529
+v -0.0039601 -0.0175 -0.0173557
+v -0.00391928 -0.0175 -0.013087
+v -0.00448925 -0.0175 -0.0149068
+v -0.0050592 -0.0175 -0.0167264
+v -0.00429036 -0.0175 -0.0126724
+v -0.00529216 -0.0175 -0.0142016
+v -0.006294 -0.0175 -0.0157307
+v -0.0047034 -0.0175 -0.0120852
+v -0.00501887 -0.0175 -0.0114866
+v -0.0066761 -0.0175 -0.0121268
+v -0.006085 -0.0175 -0.0132161
+v -0.0083333 -0.0175 -0.012767
+v -0.00746649 -0.0175 -0.014347
+v -0.0053672 -0.0175 -0.010441
+v -0.00712418 -0.0175 -0.0107105
+v -0.0088811 -0.0175 -0.01098
+v -0.005499 -0.0175 -0.00925
+v -0.007274 -0.0175 -0.00925
+v -0.009049 -0.0175 -0.00925
+v -0.00106101 -0.0275 -0.0122646
+v -0.00107307 -0.0275 -0.0130425
+v -0.00104896 -0.0275 -0.0114868
+v -0.0019891 -0.0275 -0.0118203
+v -0.002086 -0.0275 -0.0127852
+v -0.00178137 -0.0275 -0.0109825
+v -0.00251807 -0.0275 -0.0118038
+v -0.00276864 -0.0275 -0.012485
+v -0.00252846 -0.0275 -0.0112413
+v -0.00231247 -0.0275 -0.0101877
+v -0.0032963 -0.0275 -0.0103751
+v -0.00249896 -0.0275 -0.00925
+v -0.0033171 -0.0275 -0.0092501
+v -0.0037536 -0.0275 -0.0113674
+v -0.003269 -0.0275 -0.0120778
+v -0.00501887 -0.0275 -0.0114866
+v -0.0047034 -0.0275 -0.0120852
+v -0.00433179 -0.0275 -0.010408
+v -0.0053672 -0.0275 -0.010441
+v -0.004509 -0.0275 -0.00925
+v -0.005499 -0.0275 -0.00925
+v -0.00108512 -0.0275 -0.0138204
+v -0.00109717 -0.0275 -0.0145982
+v -0.0020873 -0.0275 -0.0135446
+v -0.0020612 -0.0275 -0.014315
+v -0.00104896 0.0225 -0.0161782
+v -0.00127296 0.0224614 -0.0174672
+v -0.0015038 0.0225 -0.0183849
+v -0.0021601 0.0225 -0.015924
+v -0.002536 0.0224614 -0.017177
+v -0.00284678 0.0225 -0.0180667
+v -0.00373546 0.0224614 -0.0166946
+v -0.0032438 0.0225 -0.0154784
+v -0.00408266 0.0225 -0.017574
+v -0.0048854 0.0224614 -0.016
+v -0.0043334 0.0225 -0.0147856
+v -0.0052903 0.0225 -0.0168717
+v -0.0059554 0.0224614 -0.0150654
+v -0.0054108 0.0225 -0.01375
+v -0.00635 0.0225 -0.016022
+v -0.0061985 0.0225 -0.0125942
+v -0.007018 0.0224787 -0.0137412
+v -0.0077593 0.0224908 -0.0123186
+v -0.006682 0.0225 -0.0114866
+v -0.0075997 0.0225 -0.014593
+v -0.008537 0.0225 -0.0129264
+v -0.0082141 0.0224979 -0.0107716
+v -0.0069557 0.0225 -0.010389
+v -0.009116 0.0225 -0.011081
+v -0.008356 0.0225 -0.00925
+v -0.007049 0.0225 -0.00925
+v -0.009299 0.0225 -0.00925
+v -0.00249896 -0.0018873 -0.00925
+v -0.0022885 -0.00195405 -0.0102427
+v -0.0017277 -0.00115243 -0.0110345
+v -0.0017277 5.66e-08 -0.0110345
+v -0.0017277 -0.0023048 -0.0110345
+v -0.000781428 -0.00161437 -0.011588
+v -0.0010918 -0.0023048 -0.011467
+v -0.00133196 -0.00150598 -0.0113372
+v -0.00139701 -0.00076758 -0.0112958
+v -0.00141894 5.66e-08 -0.0112812
+v -0.00096135 -0.00040932 -0.0115238
+v -0.00104896 -6.98e-16 -0.0114866
+v -0.00074085 -0.0007218 -0.0116002
+v -0.000427704 -0.00092555 -0.0116705
+v -0.0065 0.003375 -0.00198425
+v -0.0079194 0.0033836 -0.0035525
+v -0.0089295 0.00338968 -0.0053081
+v -0.00789208 0.0047672 -0.00357229
+v -0.0088986 0.00477936 -0.00532189
+v -0.0065 0.00475 -0.00202923
+v -0.0095725 0.0033932 -0.0073258
+v -0.0095392 0.0047864 -0.0073325
+v -0.007871 0.00616027 -0.00361186
+v -0.0088701 0.0061845 -0.0053494
+v -0.0078374 0.0075345 -0.00361186
+v -0.0088366 0.0075587 -0.0053494
+v -0.0065 0.006125 -0.0020742
+v -0.0065 0.0075 -0.00211917
+v -0.0095061 0.0061986 -0.007346
+v -0.0094726 0.0075728 -0.007346
+v -0.000902 0.0044184 0.00225
+v -0.0011137 0.0053555 0.00225
+v -0.00149694 0.0075 0.00225
+v -0.00221962 0.0051977 0.00225
+v -0.0029119 0.0075 0.00225
+v -0.00352837 0.00529856 0.00225
+v -0.0042271 0.0075 0.00225
+v -0.0043992 0.00115128 0.00225
+v -0.0052181 0.00148194 0.00225
+v -0.00530456 -1.38e-15 0.00225
+v -0.004549 -1.38e-15 0.00225
+v -0.00503615 0.0027323 0.00225
+v -0.0047612 0.00394096 0.00225
+v -0.0049116 0.00555049 0.00225
+v -0.0054374 0.0075 0.00225
+v -0.0065 1.92e-08 0.00225
+v -0.0065 0.003375 0.00225
+v -0.0065 0.00475 0.00225
+v -0.0065 0.006125 0.00225
+v -0.0065 0.0075 0.00225
+v -0.000902 -0.0044184 0.00225
+v -0.0011137 -0.0053555 0.00225
+v -0.00149694 -0.0075 0.00225
+v -0.00221962 -0.0051977 0.00225
+v -0.0029119 -0.0075 0.00225
+v -0.00352837 -0.00529856 0.00225
+v -0.0042271 -0.0075 0.00225
+v -0.0043992 -0.00115128 0.00225
+v -0.0052181 -0.00148194 0.00225
+v -0.00503615 -0.0027323 0.00225
+v -0.0047612 -0.00394096 0.00225
+v -0.0049116 -0.00555049 0.00225
+v -0.0054374 -0.0075 0.00225
+v -0.0065 -0.002 0.00225
+v -0.0065 -0.003375 0.00225
+v -0.0065 -0.00475 0.00225
+v -0.0065 -0.006125 0.00225
+v -0.0065 -0.0075 0.00225
+v -0.00124515 -0.0175 -0.00212635
+v -0.00109717 -0.0175 -0.00390175
+v -0.00139314 -0.0175 -0.000350945
+v -0.00238149 -0.0175 -0.00241747
+v -0.0020612 -0.0175 -0.00418508
+v -0.00270178 -0.0175 -0.00064985
+v -0.00354179 -0.0175 -0.00294714
+v -0.00312345 -0.0175 -0.00475
+v -0.0039601 -0.0175 -0.00114427
+v -0.00448925 -0.0175 -0.00359324
+v -0.00391928 -0.0175 -0.0054129
+v -0.0050592 -0.0175 -0.00177355
+v -0.00529216 -0.0175 -0.0042984
+v -0.00429036 -0.0175 -0.00582756
+v -0.006294 -0.0175 -0.00276926
+v -0.0047034 -0.0175 -0.0064148
+v -0.006085 -0.0175 -0.00528385
+v -0.0066761 -0.0175 -0.00637318
+v -0.00501887 -0.0175 -0.00701337
+v -0.00746649 -0.0175 -0.0041529
+v -0.0083333 -0.0175 -0.005733
+v -0.0053672 -0.0175 -0.008059
+v -0.00712418 -0.0175 -0.00778949
+v -0.0088811 -0.0175 -0.00752
+v -0.00107307 -0.0275 -0.0054575
+v -0.00106101 -0.0275 -0.00623537
+v -0.00104896 -0.0275 -0.0070132
+v -0.002086 -0.0275 -0.00571477
+v -0.0019891 -0.0275 -0.00667967
+v -0.00178137 -0.0275 -0.0075175
+v -0.00251807 -0.0275 -0.0066962
+v -0.00276864 -0.0275 -0.006015
+v -0.00252846 -0.0275 -0.0072587
+v -0.00231247 -0.0275 -0.00831229
+v -0.0032963 -0.0275 -0.0081249
+v -0.003269 -0.0275 -0.0064222
+v -0.0037536 -0.0275 -0.0071326
+v -0.0047034 -0.0275 -0.0064148
+v -0.00501887 -0.0275 -0.00701337
+v -0.00433179 -0.0275 -0.008092
+v -0.0053672 -0.0275 -0.008059
+v -0.00108512 -0.0275 -0.0046796
+v -0.00109717 -0.0275 -0.00390175
+v -0.0020873 -0.0275 -0.0049554
+v -0.0020612 -0.0275 -0.00418508
+v -0.00104896 0.0225 -0.00232179
+v -0.00127296 0.0224614 -0.0010328
+v -0.0015038 0.0225 -0.000115125
+v -0.0021601 0.0225 -0.00257594
+v -0.002536 0.0224614 -0.00132308
+v -0.00284678 0.0225 -0.00043327
+v -0.0032438 0.0225 -0.0030216
+v -0.00373546 0.0224614 -0.00180545
+v -0.00408266 0.0225 -0.00092583
+v -0.0043334 0.0225 -0.00371436
+v -0.0048854 0.0224614 -0.0025
+v -0.0052903 0.0225 -0.0016283
+v -0.0054108 0.0225 -0.00475
+v -0.0059554 0.0224614 -0.00343458
+v -0.00635 0.0225 -0.002478
+v -0.0061985 0.0225 -0.0059058
+v -0.006682 0.0225 -0.00701337
+v -0.0077593 0.0224908 -0.0061814
+v -0.007018 0.0224787 -0.0047588
+v -0.008537 0.0225 -0.0055736
+v -0.0075997 0.0225 -0.0039069
+v -0.0069557 0.0225 -0.0081109
+v -0.0082141 0.0224979 -0.0077284
+v -0.009116 0.0225 -0.007419
+v -0.0022885 -0.00195405 -0.0082573
+v -0.0017277 5.66e-08 -0.0074655
+v -0.0017277 -0.00115243 -0.0074655
+v -0.0017277 -0.0023048 -0.0074655
+v -0.00102184 -0.0011524 -0.0070027
+v -0.0010918 -0.0023048 -0.007033
+v -0.0009519 2.24e-11 -0.0069725
+v -0.00120133 0.00115236 0.00225003
+v -0.00120133 0.00230474 0.00225
+v -0.0023537 0.00115237 0.00225
+v -0.0023537 0.00230474 0.00225
+v -0.00120133 2.8e-08 0.00225007
+v -0.0023537 4.2e-16 0.00225
+v -0.00338055 0.00113612 0.00225
+v -0.0034513 4.2e-16 0.00225
+v -0.00119592 0.00333005 0.00225
+v -0.00120133 -0.00115236 0.00225003
+v -0.00120133 -0.00230474 0.00225
+v -0.0023537 -0.00115237 0.00225
+v -0.0023537 -0.00230474 0.00225
+v -0.00338055 -0.00113612 0.00225
+v -0.00119592 -0.00333005 0.00225
+v 0.0039486 0.00224557 -0.01485
+v 0.0039486 0.00224557 -0.0143
+v 0.0032389 0.00317894 -0.0146142
+v 0.0032438 0.00317894 -0.0154784
+v 0.0039486 -0.00224557 -0.01485
+v 0.0032438 -0.00317894 -0.0154784
+v 0.0032389 -0.00317894 -0.0146142
+v 0.0039486 -0.00224557 -0.0143
+v 0.0088096 9.5e-11 0.00225
+v 0.0120291 9.5e-11 0.00225
+v -0.0039486 0.00224557 -0.01485
+v -0.0032438 0.00317894 -0.0154784
+v -0.0032389 0.00317894 -0.0146142
+v -0.0039486 0.00224557 -0.0143
+v -0.0039486 -0.00224557 -0.01485
+v -0.0039486 -0.00224557 -0.0143
+v -0.0032389 -0.00317894 -0.0146142
+v -0.0032438 -0.00317894 -0.0154784
+v -0.0120291 9.5e-11 0.00225
+v -0.0088096 9.5e-11 0.00225
+v 0.00338055 0.00113612 -0.01375
+v 0.0044074 0.00111986 -0.01375
+v 0.00345133 -3.26e-18 -0.01375
+v 0.004549 -3.91e-18 -0.01375
+v 0.001191 0.00333005 -0.01375
+v 4.8963e-05 0.00340234 -0.01375
+v 0.00118068 0.00435537 -0.01375
+v 4.8963e-05 0.0044999 -0.01375
+v 4.8963e-05 0.0044999 -0.015
+v 0.00118068 0.00435537 -0.015
+v 0.0011137 0.00435537 -0.0161782
+v 4.8963e-05 0.0044999 -0.01625
+v 0.002302 0.00389537 -0.015
+v 0.00227915 0.00389537 -0.015924
+v 0.0044074 0.00111986 -0.0143
+v 0.004549 -3.91e-18 -0.014375
+v 0.0011137 0.0043554 -0.017486
+v 4.8963e-05 0.0045 -0.017558
+v 0.000902 0.0044184 -0.0187562
+v 4.8963e-05 0.0045 -0.0188659
+v 0.00227915 0.0038954 -0.017232
+v 0.00216496 0.00397147 -0.0184252
+v 0.0032438 0.00317897 -0.0167863
+v 0.0032438 0.003179 -0.018094
+v 4.8963e-05 0.0045 -0.020494
+v 0.000902 0.0044184 -0.0203843
+v 0.000902 0.0044184 -0.0220123
+v 4.8963e-05 0.0045 -0.022122
+v 0.00216496 0.00397147 -0.0201824
+v 0.00216496 0.00397147 -0.0219396
+v 0.00324218 0.00317736 -0.0199606
+v 0.00324054 0.00317573 -0.021827
+v 0.00338055 -0.00113612 -0.01375
+v 0.0044074 -0.00111986 -0.01375
+v 0.001191 -0.00333005 -0.01375
+v 4.8963e-05 -0.00340234 -0.01375
+v 0.00118068 -0.00435537 -0.01375
+v 4.8963e-05 -0.0044999 -0.01375
+v 0.00118068 -0.00435537 -0.015
+v 4.8963e-05 -0.0044999 -0.015
+v 0.0011137 -0.00435537 -0.0161782
+v 4.8963e-05 -0.0044999 -0.01625
+v 0.002302 -0.00389537 -0.015
+v 0.00227915 -0.00389537 -0.015924
+v 0.0044074 -0.00111986 -0.0143
+v 0.0011137 -0.0043554 -0.017486
+v 4.8963e-05 -0.0045 -0.017558
+v 0.000902 -0.0044184 -0.0187562
+v 4.8963e-05 -0.0045 -0.0188659
+v 0.00227915 -0.0038954 -0.017232
+v 0.00216496 -0.00397147 -0.0184252
+v 0.0032438 -0.00317897 -0.0167863
+v 0.0032438 -0.003179 -0.018094
+v 0.000902 -0.0044184 -0.0203843
+v 4.8963e-05 -0.0045 -0.020494
+v 0.000902 -0.0044184 -0.0220123
+v 4.8963e-05 -0.0045 -0.022122
+v 0.00216496 -0.00397147 -0.0201824
+v 0.00216496 -0.00397147 -0.0219396
+v 0.00324218 -0.00317736 -0.0199606
+v 0.00324054 -0.00317573 -0.021827
+v 4.8963e-05 0.0065 -0.01625
+v 0.00104896 0.0065 -0.0161782
+v 0.00104896 0.0085771 -0.0161782
+v 4.8963e-05 0.0085771 -0.01625
+v 0.0021601 0.0065 -0.015924
+v 0.0021601 0.0085771 -0.015924
+v 0.0032438 0.0065 -0.0154784
+v 0.0032438 0.0085771 -0.0154784
+v 0.0043334 0.0065 -0.0147856
+v 0.0043334 0.0085771 -0.0147856
+v 0.0054108 0.0065 -0.01375
+v 0.0054108 0.0085771 -0.01375
+v 0.0061985 0.0065 -0.0125942
+v 0.006682 0.0065 -0.0114866
+v 0.006682 0.0085771 -0.0114866
+v 0.0061985 0.0085771 -0.0125942
+v 0.0069557 0.0065 -0.010389
+v 0.0069557 0.0085771 -0.010389
+v 0.007049 0.0065 -0.00925
+v 0.007049 0.0085771 -0.00925
+v 0.00104896 0.0065 -0.0023218
+v 4.8963e-05 0.0065 -0.00225
+v 4.8963e-05 0.0085771 -0.00225
+v 0.00104896 0.0085771 -0.0023218
+v 0.0021601 0.0065 -0.00257594
+v 0.0021601 0.0085771 -0.00257594
+v 0.0032438 0.0065 -0.0030216
+v 0.0032438 0.0085771 -0.0030216
+v 0.0043334 0.0065 -0.00371436
+v 0.0043334 0.0085771 -0.00371436
+v 0.0054108 0.0065 -0.00475
+v 0.0054108 0.0085771 -0.00475
+v 0.006682 0.0065 -0.00701337
+v 0.0061985 0.0065 -0.00590579
+v 0.0061985 0.0085771 -0.00590579
+v 0.006682 0.0085771 -0.00701337
+v 0.0069557 0.0065 -0.0081109
+v 0.0069557 0.0085771 -0.0081109
+v -0.00338055 0.00113612 -0.01375
+v -0.0044074 0.00111986 -0.01375
+v -0.00345133 -3.26e-18 -0.01375
+v -0.004549 -3.91e-18 -0.01375
+v -0.001191 0.00333005 -0.01375
+v -0.00118068 0.00435537 -0.01375
+v -0.00118068 0.00435537 -0.015
+v -0.0011137 0.00435537 -0.0161782
+v -0.002302 0.00389537 -0.015
+v -0.00227915 0.00389537 -0.015924
+v -0.0044074 0.00111986 -0.0143
+v -0.004549 -3.91e-18 -0.014375
+v -0.0011137 0.0043554 -0.017486
+v -0.000902 0.0044184 -0.0187562
+v -0.00227915 0.0038954 -0.017232
+v -0.00216496 0.00397147 -0.0184252
+v -0.0032438 0.00317897 -0.0167863
+v -0.0032438 0.003179 -0.018094
+v -0.000902 0.0044184 -0.0203843
+v -0.000902 0.0044184 -0.0220123
+v -0.00216496 0.00397147 -0.0201824
+v -0.00216496 0.00397147 -0.0219396
+v -0.00324218 0.00317736 -0.0199606
+v -0.00324054 0.00317573 -0.021827
+v -0.00338055 -0.00113612 -0.01375
+v -0.0044074 -0.00111986 -0.01375
+v -0.001191 -0.00333005 -0.01375
+v -0.00118068 -0.00435537 -0.01375
+v -0.00118068 -0.00435537 -0.015
+v -0.0011137 -0.00435537 -0.0161782
+v -0.002302 -0.00389537 -0.015
+v -0.00227915 -0.00389537 -0.015924
+v -0.0044074 -0.00111986 -0.0143
+v -0.0011137 -0.0043554 -0.017486
+v -0.000902 -0.0044184 -0.0187562
+v -0.00227915 -0.0038954 -0.017232
+v -0.00216496 -0.00397147 -0.0184252
+v -0.0032438 -0.00317897 -0.0167863
+v -0.0032438 -0.003179 -0.018094
+v -0.000902 -0.0044184 -0.0203843
+v -0.000902 -0.0044184 -0.0220123
+v -0.00216496 -0.00397147 -0.0201824
+v -0.00216496 -0.00397147 -0.0219396
+v -0.00324218 -0.00317736 -0.0199606
+v -0.00324054 -0.00317573 -0.021827
+v -0.00104896 0.0065 -0.0161782
+v -0.00104896 0.0085771 -0.0161782
+v -0.0021601 0.0065 -0.015924
+v -0.0021601 0.0085771 -0.015924
+v -0.0032438 0.0065 -0.0154784
+v -0.0032438 0.0085771 -0.0154784
+v -0.0043334 0.0065 -0.0147856
+v -0.0043334 0.0085771 -0.0147856
+v -0.0054108 0.0065 -0.01375
+v -0.0054108 0.0085771 -0.01375
+v -0.006682 0.0065 -0.0114866
+v -0.0061985 0.0065 -0.0125942
+v -0.0061985 0.0085771 -0.0125942
+v -0.006682 0.0085771 -0.0114866
+v -0.0069557 0.0065 -0.010389
+v -0.0069557 0.0085771 -0.010389
+v -0.007049 0.0065 -0.00925
+v -0.007049 0.0085771 -0.00925
+v -0.00104896 0.0065 -0.0023218
+v -0.00104896 0.0085771 -0.0023218
+v -0.0021601 0.0065 -0.00257594
+v -0.0021601 0.0085771 -0.00257594
+v -0.0032438 0.0065 -0.0030216
+v -0.0032438 0.0085771 -0.0030216
+v -0.0043334 0.0065 -0.00371436
+v -0.0043334 0.0085771 -0.00371436
+v -0.0054108 0.0065 -0.00475
+v -0.0054108 0.0085771 -0.00475
+v -0.0061985 0.0065 -0.00590579
+v -0.006682 0.0065 -0.00701337
+v -0.006682 0.0085771 -0.00701337
+v -0.0061985 0.0085771 -0.00590579
+v -0.0069557 0.0065 -0.0081109
+v -0.0069557 0.0085771 -0.0081109
+v 0.004549 -3.91e-18 -0.01485
+v 0.0044074 -0.00111986 -0.01485
+v 0.00391928 -0.0195 -0.013087
+v 0.00312345 -0.0195 -0.01375
+v 0.00391928 -0.0215 -0.013087
+v 0.00312345 -0.0215 -0.01375
+v 0.00391928 -0.0235 -0.013087
+v 0.00312345 -0.0235 -0.01375
+v 0.00391928 -0.0255 -0.013087
+v 0.00312345 -0.0255 -0.01375
+v 0.00429036 -0.0195 -0.0126724
+v 0.00429036 -0.0215 -0.0126724
+v 0.00429036 -0.0235 -0.0126724
+v 0.00429036 -0.0255 -0.0126724
+v 0.00170827 -0.00324768 -0.0074478
+v 0.0022838 -0.00293108 -0.008247
+v 0.0022791 -0.0039081 -0.0082366
+v 0.00168883 -0.00419057 -0.00743008
+v 0.00249896 -0.00377459 -0.00925
+v 0.00249896 -0.00283094 -0.00925
+v -0.004549 -3.91e-18 -0.01485
+v -0.0044074 0.00111986 -0.01485
+v -0.00170827 -0.00324768 -0.0110522
+v -0.0022838 -0.00293108 -0.010253
+v -0.0022791 -0.0039081 -0.0102634
+v -0.00168883 -0.00419057 -0.01107
+v -0.00249896 -0.00377459 -0.00925
+v -0.00249896 -0.00283094 -0.00925
+v -0.00391928 -0.0195 -0.0054129
+v -0.00312345 -0.0195 -0.00475
+v -0.00391928 -0.0215 -0.0054129
+v -0.00312345 -0.0215 -0.00475
+v -0.00391928 -0.0235 -0.0054129
+v -0.00312345 -0.0235 -0.00475
+v -0.00391928 -0.0255 -0.0054129
+v -0.00312345 -0.0255 -0.00475
+v -0.00429036 -0.0195 -0.00582756
+v -0.00429036 -0.0215 -0.00582756
+v -0.00429036 -0.0235 -0.00582756
+v -0.00429036 -0.0255 -0.00582756
+v -0.0120291 -0.0075 0.00225
+v -0.0088096 -0.0075 0.00225
+v -0.0088096 -0.006 0.00225
+v -0.0120291 -0.006 0.00225
+v -0.0088096 -0.0045 0.00225
+v -0.0120291 -0.0045 0.00225
+v -0.0088096 -0.003 0.00225
+v -0.0120291 -0.003 0.00225
+v -0.0088096 -0.0015 0.00225
+v -0.0120291 -0.0015 0.00225
+v 0.0044074 0.00111986 -0.01485
+v 0.0044074 0.00111989 -0.0161579
+v 0.004549 2.82e-08 -0.0161579
+v 0.004549 5.64e-08 -0.0174658
+v 0.0043992 0.00115128 -0.0176229
+v 0.0039486 0.0022456 -0.0161579
+v 0.0039599 0.00222589 -0.01778
+v 0.0043992 0.00115128 -0.0196448
+v 0.004549 3.78e-08 -0.0195396
+v 0.0043992 0.00115128 -0.0216668
+v 0.004549 1.92e-08 -0.0216134
+v 0.0039599 0.00222589 -0.01975
+v 0.0039599 0.00222589 -0.02172
+v 0.0065 0.003375 0.00040305
+v 0.0065 0.00475 0.00037292
+v 0.0065 0.006125 0.000342788
+v 0.0065 0.0075 0.000312658
+v 0.0022958 -0.005204 -0.0082745
+v 0.0017351 -0.00534529 -0.0074738
+v 0.00231247 -0.0075 -0.00831229
+v 0.00178137 -0.0075 -0.0075175
+v 0.00249896 -0.0051373 -0.00925
+v 0.00249896 -0.0075 -0.00925
+v 0.00231247 -0.01 -0.00831229
+v 0.00178137 -0.01 -0.0075175
+v 0.00231247 -0.0125 -0.00831229
+v 0.00178137 -0.0125 -0.0075175
+v 0.00231247 -0.015 -0.00831229
+v 0.00178137 -0.015 -0.0075175
+v 0.00231247 -0.0175 -0.00831229
+v 0.00178137 -0.0175 -0.0075175
+v 0.00249896 -0.01 -0.00925
+v 0.00249896 -0.0125 -0.00925
+v 0.00249896 -0.015 -0.00925
+v 0.00249896 -0.0175 -0.00925
+v 0.00231247 -0.0195 -0.00831229
+v 0.00178137 -0.0195 -0.0075175
+v 0.00231247 -0.0215 -0.00831229
+v 0.00178137 -0.0215 -0.0075175
+v 0.00231247 -0.0235 -0.00831229
+v 0.00178137 -0.0235 -0.0075175
+v 0.00231247 -0.0255 -0.00831229
+v 0.00178137 -0.0255 -0.0075175
+v 0.00249896 -0.0195 -0.00925
+v 0.00249896 -0.0215 -0.00925
+v 0.00249896 -0.0235 -0.00925
+v 0.00249896 -0.0255 -0.00925
+v 0.025665 9.5e-11 -0.0068919
+v 0.0260093 9.5e-11 -0.00925
+v 0.024661 9.5e-11 -0.0047304
+v 0.0230815 9.5e-11 -0.0029463
+v 0.0210577 9.5e-11 -0.00168803
+v 0.0194085 9.5e-11 -0.0009687
+v 0.0177593 9.5e-11 -0.000249369
+v 0.025665 -0.0015 -0.0068919
+v 0.0260093 -0.0015 -0.00925
+v 0.025665 -0.003 -0.0068919
+v 0.0260093 -0.003 -0.00925
+v 0.025665 -0.0045 -0.0068919
+v 0.0260093 -0.0045 -0.00925
+v 0.025665 -0.006 -0.0068919
+v 0.0260093 -0.006 -0.00925
+v 0.025665 -0.0075 -0.0068919
+v 0.0260093 -0.0075 -0.00925
+v 0.024661 -0.0015 -0.0047304
+v 0.024661 -0.003 -0.0047304
+v 0.024661 -0.0045 -0.0047304
+v 0.024661 -0.006 -0.0047304
+v 0.024661 -0.0075 -0.0047304
+v 0.0230815 -0.0015 -0.0029463
+v 0.0230815 -0.003 -0.0029463
+v 0.0230815 -0.0045 -0.0029463
+v 0.0230815 -0.006 -0.0029463
+v 0.0230815 -0.0075 -0.0029463
+v 0.0210577 -0.0015 -0.00168803
+v 0.0210577 -0.003 -0.00168803
+v 0.0210577 -0.0045 -0.00168803
+v 0.0210577 -0.006 -0.00168803
+v 0.0210577 -0.0075 -0.00168803
+v 0.0194085 -0.0015 -0.0009687
+v 0.0194085 -0.003 -0.0009687
+v 0.0194085 -0.0045 -0.0009687
+v 0.0194085 -0.006 -0.0009687
+v 0.0194085 -0.0075 -0.0009687
+v 0.0177593 -0.0015 -0.000249369
+v 0.0177593 -0.003 -0.000249369
+v 0.0177593 -0.0045 -0.000249369
+v 0.0177593 -0.006 -0.000249369
+v 0.0177593 -0.0075 -0.000249369
+v 0.0139774 9.5e-11 0.00140021
+v 0.0158684 9.5e-11 0.00057542
+v 0.0139774 -0.0015 0.00140021
+v 0.0158684 -0.0015 0.00057542
+v 0.0139774 -0.003 0.00140021
+v 0.0158684 -0.003 0.00057542
+v 0.0139774 -0.0045 0.00140021
+v 0.0158684 -0.0045 0.00057542
+v 0.0139774 -0.006 0.00140021
+v 0.0158684 -0.006 0.00057542
+v 0.0139774 -0.0075 0.00140021
+v 0.0158684 -0.0075 0.00057542
+v -0.0065 0.003375 -0.018903
+v -0.0065 0.003375 -0.0212904
+v -0.0065 0.00475 -0.018873
+v -0.0065 0.00475 -0.021275
+v -0.0065 0.006125 -0.0188428
+v -0.0065 0.006125 -0.0212598
+v -0.0065 0.0075 -0.0188127
+v -0.0065 0.0075 -0.0212445
+v -0.0022958 -0.005204 -0.0102255
+v -0.0017351 -0.00534529 -0.0110262
+v -0.00231247 -0.0075 -0.0101877
+v -0.00178137 -0.0075 -0.0109825
+v -0.00249896 -0.0051373 -0.00925
+v -0.00249896 -0.0075 -0.00925
+v -0.0044074 -0.00111986 -0.01485
+v -0.0044074 -0.00111989 -0.0161579
+v -0.004549 2.82e-08 -0.0161579
+v -0.004549 5.64e-08 -0.0174658
+v -0.0043992 -0.00115128 -0.0176229
+v -0.0039486 -0.0022456 -0.0161579
+v -0.0039599 -0.00222589 -0.01778
+v -0.0043992 -0.00115128 -0.0196448
+v -0.004549 3.78e-08 -0.0195396
+v -0.0043992 -0.00115128 -0.0216668
+v -0.004549 1.92e-08 -0.0216134
+v -0.0039599 -0.00222589 -0.01975
+v -0.0039599 -0.00222589 -0.02172
+v -0.00231247 -0.01 -0.0101877
+v -0.00178137 -0.01 -0.0109825
+v -0.00231247 -0.0125 -0.0101877
+v -0.00178137 -0.0125 -0.0109825
+v -0.00231247 -0.015 -0.0101877
+v -0.00178137 -0.015 -0.0109825
+v -0.00231247 -0.0175 -0.0101877
+v -0.00178137 -0.0175 -0.0109825
+v -0.00249896 -0.01 -0.00925
+v -0.00249896 -0.0125 -0.00925
+v -0.00249896 -0.015 -0.00925
+v -0.00249896 -0.0175 -0.00925
+v -0.00231247 -0.0195 -0.0101877
+v -0.00178137 -0.0195 -0.0109825
+v -0.00231247 -0.0215 -0.0101877
+v -0.00178137 -0.0215 -0.0109825
+v -0.00231247 -0.0235 -0.0101877
+v -0.00178137 -0.0235 -0.0109825
+v -0.00231247 -0.0255 -0.0101877
+v -0.00178137 -0.0255 -0.0109825
+v -0.00249896 -0.0195 -0.00925
+v -0.00249896 -0.0215 -0.00925
+v -0.00249896 -0.0235 -0.00925
+v -0.00249896 -0.0255 -0.00925
+v -0.0139919 9.5e-11 -0.020182
+v -0.0159418 9.5e-11 -0.0192534
+v -0.0139919 -0.0015 -0.020182
+v -0.0159418 -0.0015 -0.0192534
+v -0.0139919 -0.003 -0.020182
+v -0.0159418 -0.003 -0.0192534
+v -0.0139919 -0.0045 -0.020182
+v -0.0159418 -0.0045 -0.0192534
+v -0.0139919 -0.006 -0.020182
+v -0.0159418 -0.006 -0.0192534
+v -0.0139919 -0.0075 -0.020182
+v -0.0159418 -0.0075 -0.0192534
+v -0.025665 9.5e-11 -0.0116081
+v -0.0260093 9.5e-11 -0.00925
+v -0.024661 9.5e-11 -0.0137696
+v -0.0230815 9.5e-11 -0.0155537
+v -0.0210577 9.5e-11 -0.016812
+v -0.01945 9.5e-11 -0.0175827
+v -0.0177593 9.5e-11 -0.0183878
+v -0.025665 -0.0015 -0.0116081
+v -0.0260093 -0.0015 -0.00925
+v -0.025665 -0.003 -0.0116081
+v -0.0260093 -0.003 -0.00925
+v -0.025665 -0.0045 -0.0116081
+v -0.0260093 -0.0045 -0.00925
+v -0.025665 -0.006 -0.0116081
+v -0.0260093 -0.006 -0.00925
+v -0.025665 -0.0075 -0.0116081
+v -0.0260093 -0.0075 -0.00925
+v -0.024661 -0.0015 -0.0137696
+v -0.024661 -0.003 -0.0137696
+v -0.024661 -0.0045 -0.0137696
+v -0.024661 -0.006 -0.0137696
+v -0.024661 -0.0075 -0.0137696
+v -0.0230815 -0.0015 -0.0155537
+v -0.0230815 -0.003 -0.0155537
+v -0.0230815 -0.0045 -0.0155537
+v -0.0230815 -0.006 -0.0155537
+v -0.0230815 -0.0075 -0.0155537
+v -0.0210577 -0.0015 -0.016812
+v -0.0210577 -0.003 -0.016812
+v -0.0210577 -0.0045 -0.016812
+v -0.0210577 -0.006 -0.016812
+v -0.0210577 -0.0075 -0.016812
+v -0.01945 -0.0015 -0.0175827
+v -0.01945 -0.003 -0.0175827
+v -0.01945 -0.0045 -0.0175827
+v -0.01945 -0.006 -0.0175827
+v -0.01945 -0.0075 -0.0175827
+v -0.0177593 -0.0015 -0.0183878
+v -0.0177593 -0.003 -0.0183878
+v -0.0177593 -0.0045 -0.0183878
+v -0.0177593 -0.006 -0.0183878
+v -0.0177593 -0.0075 -0.0183878
+v 0.00170827 -0.00324768 -0.0110522
+v 0.00168883 -0.00419057 -0.01107
+v 0.0022791 -0.0039081 -0.0102634
+v 0.0022838 -0.00293108 -0.010253
+v 0.00312345 -0.0195 -0.00475
+v 0.00391928 -0.0195 -0.0054129
+v 0.00312345 -0.0215 -0.00475
+v 0.00391928 -0.0215 -0.0054129
+v 0.00312345 -0.0235 -0.00475
+v 0.00391928 -0.0235 -0.0054129
+v 0.00312345 -0.0255 -0.00475
+v 0.00391928 -0.0255 -0.0054129
+v 0.00429036 -0.0195 -0.00582756
+v 0.00429036 -0.0215 -0.00582756
+v 0.00429036 -0.0235 -0.00582756
+v 0.00429036 -0.0255 -0.00582756
+v 0.0120291 -0.0075 0.00225
+v 0.0120291 -0.006 0.00225
+v 0.0088096 -0.006 0.00225
+v 0.0088096 -0.0075 0.00225
+v 0.0120291 -0.0045 0.00225
+v 0.0088096 -0.0045 0.00225
+v 0.0120291 -0.003 0.00225
+v 0.0088096 -0.003 0.00225
+v 0.0120291 -0.0015 0.00225
+v 0.0088096 -0.0015 0.00225
+v -0.00312345 -0.0195 -0.01375
+v -0.00391928 -0.0195 -0.013087
+v -0.00312345 -0.0215 -0.01375
+v -0.00391928 -0.0215 -0.013087
+v -0.00312345 -0.0235 -0.01375
+v -0.00391928 -0.0235 -0.013087
+v -0.00312345 -0.0255 -0.01375
+v -0.00391928 -0.0255 -0.013087
+v -0.00429036 -0.0195 -0.0126724
+v -0.00429036 -0.0215 -0.0126724
+v -0.00429036 -0.0235 -0.0126724
+v -0.00429036 -0.0255 -0.0126724
+v -0.00170827 -0.00324768 -0.0074478
+v -0.00168883 -0.00419057 -0.00743008
+v -0.0022791 -0.0039081 -0.0082366
+v -0.0022838 -0.00293108 -0.008247
+v 0.00104896 2.83e-08 -0.012725
+v 0.00097284 0.00038271 -0.012725
+v 0.00096135 0.00040932 -0.0115238
+v 0.00075607 0.00070714 -0.012725
+v 0.00074085 0.0007218 -0.0116002
+v 0.000431646 0.0009239 -0.012725
+v 0.000427704 0.00092555 -0.0116705
+v 4.8963e-05 0.00100003 -0.012725
+v 4.8963e-05 0.00100006 -0.0116999
+v 4.8963e-05 0.0075 -0.0188659
+v 0.00149694 0.0075 -0.0187562
+v 0.00149694 0.0075 -0.0203843
+v 4.8963e-05 0.0075 -0.020494
+v 0.00149694 0.0075 -0.0220123
+v 4.8963e-05 0.0075 -0.022122
+v 0.0029119 0.0075 -0.0184298
+v 0.0029119 0.0075 -0.0201854
+v 0.0029119 0.0075 -0.021941
+v 0.0042271 0.0075 -0.0179107
+v 0.0042271 0.0075 -0.0198377
+v 0.0042271 0.0075 -0.0217646
+v 0.0054374 0.0075 -0.0172143
+v 0.0054374 0.0075 -0.019371
+v 0.0054374 0.0075 -0.0215278
+v 0.0065 0.0075 -0.0188127
+v 0.0065 0.0075 -0.0212445
+v 0.00107038 -0.00334614 -0.0114768
+v 4.8963e-05 -0.0034024 -0.0117
+v 0.00104896 -0.00438748 -0.0114866
+v 4.8963e-05 -0.0045 -0.0117
+v 4.8963e-05 -0.0055 -0.0117
+v 0.00104896 -0.0053875 -0.0114866
+v 4.8962e-05 -0.0075 -0.0117
+v 0.00104896 -0.0075 -0.0114868
+v 0.0017351 -0.00534529 -0.0110262
+v 0.00178137 -0.0075 -0.0109825
+v 4.8962e-05 -0.01 -0.0117
+v 0.00104896 -0.01 -0.0114868
+v 4.8962e-05 -0.0125 -0.0117
+v 0.00104896 -0.0125 -0.0114868
+v 4.8962e-05 -0.015 -0.0117
+v 0.00104896 -0.015 -0.0114868
+v 4.8962e-05 -0.0175 -0.0117
+v 0.00104896 -0.0175 -0.0114868
+v 0.00178137 -0.01 -0.0109825
+v 0.00178137 -0.0125 -0.0109825
+v 0.00178137 -0.015 -0.0109825
+v 0.00178137 -0.0175 -0.0109825
+v 0.00139314 -0.0075 -0.018149
+v 0.00139314 -0.01 -0.018149
+v 4.8963e-05 -0.01 -0.01825
+v 4.8963e-05 -0.0075 -0.01825
+v 0.00139314 -0.0125 -0.018149
+v 4.8963e-05 -0.0125 -0.01825
+v 0.00139314 -0.015 -0.018149
+v 4.8963e-05 -0.015 -0.01825
+v 0.00270178 -0.0075 -0.01785
+v 0.00270178 -0.01 -0.01785
+v 0.00270178 -0.0125 -0.01785
+v 0.00270178 -0.015 -0.01785
+v 0.0039601 -0.0075 -0.0173557
+v 0.0039601 -0.01 -0.0173557
+v 0.0039601 -0.0125 -0.0173557
+v 0.0039601 -0.015 -0.0173557
+v 0.0050592 -0.0075 -0.0167264
+v 0.0050592 -0.01 -0.0167264
+v 0.0050592 -0.0125 -0.0167264
+v 0.0050592 -0.015 -0.0167264
+v 0.006294 -0.0075 -0.0157307
+v 0.006294 -0.01 -0.0157307
+v 0.006294 -0.0125 -0.0157307
+v 0.006294 -0.015 -0.0157307
+v 0.0083333 -0.0075 -0.012767
+v 0.0083333 -0.01 -0.012767
+v 0.00746649 -0.01 -0.014347
+v 0.00746649 -0.0075 -0.014347
+v 0.0083333 -0.0125 -0.012767
+v 0.00746649 -0.0125 -0.014347
+v 0.0083333 -0.015 -0.012767
+v 0.00746649 -0.015 -0.014347
+v 0.0088811 -0.0075 -0.01098
+v 0.0088811 -0.01 -0.01098
+v 0.0088811 -0.0125 -0.01098
+v 0.0088811 -0.015 -0.01098
+v 0.009049 -0.0075 -0.00925
+v 0.009049 -0.01 -0.00925
+v 0.009049 -0.0125 -0.00925
+v 0.009049 -0.015 -0.00925
+v 4.8962e-05 -0.0195 -0.0117
+v 0.00104896 -0.0195 -0.0114868
+v 4.8962e-05 -0.0215 -0.0117
+v 0.00104896 -0.0215 -0.0114868
+v 4.8962e-05 -0.0235 -0.0117
+v 0.00104896 -0.0235 -0.0114868
+v 4.8962e-05 -0.0255 -0.0117
+v 0.00104896 -0.0255 -0.0114868
+v 0.00178137 -0.0195 -0.0109825
+v 0.00178137 -0.0215 -0.0109825
+v 0.00178137 -0.0235 -0.0109825
+v 0.00178137 -0.0255 -0.0109825
+v 0.00501887 -0.0195 -0.0114866
+v 0.0047034 -0.0195 -0.0120852
+v 0.00501887 -0.0215 -0.0114866
+v 0.0047034 -0.0215 -0.0120852
+v 0.00501887 -0.0235 -0.0114866
+v 0.0047034 -0.0235 -0.0120852
+v 0.00501887 -0.0255 -0.0114866
+v 0.0047034 -0.0255 -0.0120852
+v 0.0053672 -0.0195 -0.010441
+v 0.0053672 -0.0215 -0.010441
+v 0.0053672 -0.0235 -0.010441
+v 0.0053672 -0.0255 -0.010441
+v 0.005499 -0.0195 -0.00925
+v 0.005499 -0.0215 -0.00925
+v 0.005499 -0.0235 -0.00925
+v 0.005499 -0.0255 -0.00925
+v 0.00109717 -0.0195 -0.0145982
+v 4.8963e-05 -0.0195 -0.0147
+v 0.00109717 -0.0215 -0.0145982
+v 4.8963e-05 -0.0215 -0.0147
+v 0.00109717 -0.0235 -0.0145982
+v 4.8963e-05 -0.0235 -0.0147
+v 0.00109717 -0.0255 -0.0145982
+v 4.8963e-05 -0.0255 -0.0147
+v 0.0020612 -0.0195 -0.014315
+v 0.0020612 -0.0215 -0.014315
+v 0.0020612 -0.0235 -0.014315
+v 0.0020612 -0.0255 -0.014315
+v 0.00149327 0.0084994 -0.018732
+v 4.8963e-05 0.0085009 -0.0188414
+v 0.00290464 0.0084994 -0.0184065
+v 0.0042165 0.0084994 -0.0178887
+v 0.0054374 0.0085 -0.0172143
+v 0.0064836 0.0084994 -0.0163628
+v 0.0078177 0.0085339 -0.0148738
+v 0.0088143 0.0085581 -0.0131407
+v 0.0094487 0.0085722 -0.0111492
+v 0.0096393 0.0085474 -0.00925
+v 4.8963e-05 0.0112315 -0.0187748
+v 0.00149538 0.0112995 -0.0186627
+v 4.8963e-05 0.014088 -0.018705
+v 0.00149748 0.0140996 -0.0185932
+v 4.8963e-05 0.0168813 -0.018637
+v 0.0014996 0.0168998 -0.0185238
+v 4.8963e-05 0.0195887 -0.018571
+v 0.0015017 0.0197 -0.0184543
+v 0.00289307 0.0112995 -0.0183385
+v 0.0028815 0.0140996 -0.0182706
+v 0.0028699 0.0168997 -0.0182026
+v 0.00285835 0.0197 -0.0181347
+v 0.0041897 0.0112995 -0.0178258
+v 0.004163 0.0140996 -0.017763
+v 0.0041362 0.0168998 -0.0177
+v 0.0041094 0.0197 -0.017637
+v 0.005408 0.0113 -0.0171457
+v 0.0053786 0.0141 -0.0170772
+v 0.00534918 0.0169 -0.0170087
+v 0.00531976 0.0197 -0.0169402
+v 0.0064569 0.0112995 -0.0162946
+v 0.00643017 0.0140996 -0.0162265
+v 0.0064034 0.0168998 -0.0161583
+v 0.00637669 0.0197 -0.01609
+v 0.007774 0.011327 -0.0148177
+v 0.0087588 0.0113465 -0.0130978
+v 0.0077305 0.0141203 -0.0147615
+v 0.0087034 0.0141349 -0.013055
+v 0.0076869 0.0169133 -0.0147054
+v 0.008648 0.0169233 -0.013012
+v 0.0076433 0.0197062 -0.0146492
+v 0.0085925 0.0197116 -0.0129693
+v 0.0093822 0.0113578 -0.0111356
+v 0.0093156 0.0141433 -0.011122
+v 0.009249 0.0169289 -0.0111083
+v 0.0091825 0.0197144 -0.0110947
+v 0.009571 0.0113471 -0.00925
+v 0.0095026 0.0141504 -0.00925
+v 0.0094357 0.0168943 -0.00925
+v 0.0093668 0.0197167 -0.00925
+v 0.00097284 -0.00038271 -0.012725
+v 0.00075607 -0.00070714 -0.012725
+v 0.000431646 -0.0009239 -0.012725
+v 4.8963e-05 -0.00100003 -0.012725
+v 0.0177593 9.5e-11 -0.0183878
+v 0.0159418 9.5e-11 -0.0192534
+v 0.0092624 9.5e-11 -0.0224344
+v 0.0117868 9.5e-11 -0.021232
+v 0.0139919 9.5e-11 -0.020182
+v 0.0177593 -0.0015 -0.0183878
+v 0.0159418 -0.0015 -0.0192534
+v 0.0177593 -0.003 -0.0183878
+v 0.0159418 -0.003 -0.0192534
+v 0.0177593 -0.0045 -0.0183878
+v 0.0159418 -0.0045 -0.0192534
+v 0.0177593 -0.006 -0.0183878
+v 0.0159418 -0.006 -0.0192534
+v 0.0177593 -0.0075 -0.0183878
+v 0.0159418 -0.0075 -0.0192534
+v 0.0092624 -0.0015 -0.0224344
+v 0.0092624 -0.003 -0.0224344
+v 0.0092624 -0.0045 -0.0224344
+v 0.0092624 -0.006 -0.0224344
+v 0.0092624 -0.0075 -0.0224344
+v 0.0117868 -0.0015 -0.021232
+v 0.0117868 -0.003 -0.021232
+v 0.0117868 -0.0045 -0.021232
+v 0.0117868 -0.006 -0.021232
+v 0.0117868 -0.0075 -0.021232
+v 0.0139919 -0.0015 -0.020182
+v 0.0139919 -0.003 -0.020182
+v 0.0139919 -0.0045 -0.020182
+v 0.0139919 -0.006 -0.020182
+v 0.0139919 -0.0075 -0.020182
+v 4.8963e-05 0.0075 0.00036585
+v 4.8963e-05 0.0075 0.00134268
+v 0.00149694 0.0075 0.00123304
+v 0.00149694 0.0075 0.000256209
+v 0.0029119 0.0075 0.00103423
+v 0.0029119 0.0075 -7.0227e-05
+v 0.0042271 0.0075 0.00068645
+v 0.0042271 0.0075 -0.0005893
+v 0.0054374 0.0075 0.00021983
+v 0.0054374 0.0075 -0.00128575
+v 0.00107038 -0.00334614 -0.0070232
+v 4.8963e-05 -0.0034024 -0.0068001
+v 0.00104896 -0.00438748 -0.00701337
+v 4.8963e-05 -0.0045 -0.0068
+v 0.00104896 -0.0053875 -0.0070134
+v 4.8963e-05 -0.0055 -0.0068001
+v 0.00104896 -0.0075 -0.0070132
+v 4.8962e-05 -0.0075 -0.0068
+v 0.00104896 -0.01 -0.0070132
+v 4.8962e-05 -0.01 -0.0068
+v 0.00104896 -0.0125 -0.0070132
+v 4.8962e-05 -0.0125 -0.0068
+v 0.00104896 -0.015 -0.0070132
+v 4.8962e-05 -0.015 -0.0068
+v 0.00104896 -0.0175 -0.0070132
+v 4.8962e-05 -0.0175 -0.0068
+v 4.8963e-05 -0.0075 -0.00025
+v 4.8963e-05 -0.01 -0.00025
+v 0.00139314 -0.01 -0.000350945
+v 0.00139314 -0.0075 -0.000350945
+v 4.8963e-05 -0.0125 -0.00025
+v 0.00139314 -0.0125 -0.000350945
+v 4.8963e-05 -0.015 -0.00025
+v 0.00139314 -0.015 -0.000350945
+v 0.00270178 -0.01 -0.00064985
+v 0.00270178 -0.0075 -0.00064985
+v 0.00270178 -0.0125 -0.00064985
+v 0.00270178 -0.015 -0.00064985
+v 0.0039601 -0.01 -0.00114427
+v 0.0039601 -0.0075 -0.00114427
+v 0.0039601 -0.0125 -0.00114427
+v 0.0039601 -0.015 -0.00114427
+v 0.0050592 -0.01 -0.00177355
+v 0.0050592 -0.0075 -0.00177355
+v 0.0050592 -0.0125 -0.00177355
+v 0.0050592 -0.015 -0.00177355
+v 0.006294 -0.01 -0.00276926
+v 0.006294 -0.0075 -0.00276926
+v 0.006294 -0.0125 -0.00276926
+v 0.006294 -0.015 -0.00276926
+v 0.00746649 -0.0075 -0.0041529
+v 0.00746649 -0.01 -0.0041529
+v 0.0083333 -0.01 -0.005733
+v 0.0083333 -0.0075 -0.005733
+v 0.00746649 -0.0125 -0.0041529
+v 0.0083333 -0.0125 -0.005733
+v 0.00746649 -0.015 -0.0041529
+v 0.0083333 -0.015 -0.005733
+v 0.0088811 -0.01 -0.00752
+v 0.0088811 -0.0075 -0.00752
+v 0.0088811 -0.0125 -0.00752
+v 0.0088811 -0.015 -0.00752
+v 0.00104896 -0.0195 -0.0070132
+v 4.8962e-05 -0.0195 -0.0068
+v 0.00104896 -0.0215 -0.0070132
+v 4.8962e-05 -0.0215 -0.0068
+v 0.00104896 -0.0235 -0.0070132
+v 4.8962e-05 -0.0235 -0.0068
+v 0.00104896 -0.0255 -0.0070132
+v 4.8962e-05 -0.0255 -0.0068
+v 0.0047034 -0.0195 -0.0064148
+v 0.00501887 -0.0195 -0.00701337
+v 0.0047034 -0.0215 -0.0064148
+v 0.00501887 -0.0215 -0.00701337
+v 0.0047034 -0.0235 -0.0064148
+v 0.00501887 -0.0235 -0.00701337
+v 0.0047034 -0.0255 -0.0064148
+v 0.00501887 -0.0255 -0.00701337
+v 0.0053672 -0.0195 -0.008059
+v 0.0053672 -0.0215 -0.008059
+v 0.0053672 -0.0235 -0.008059
+v 0.0053672 -0.0255 -0.008059
+v 4.8963e-05 -0.0195 -0.0038
+v 0.00109717 -0.0195 -0.00390175
+v 4.8963e-05 -0.0215 -0.0038
+v 0.00109717 -0.0215 -0.00390175
+v 4.8963e-05 -0.0235 -0.0038
+v 0.00109717 -0.0235 -0.00390175
+v 4.8963e-05 -0.0255 -0.0038
+v 0.00109717 -0.0255 -0.00390175
+v 0.0020612 -0.0195 -0.00418508
+v 0.0020612 -0.0215 -0.00418508
+v 0.0020612 -0.0235 -0.00418508
+v 0.0020612 -0.0255 -0.00418508
+v 0.00149327 0.0084994 0.00023211
+v 4.8963e-05 0.0085009 0.00034144
+v 0.00290464 0.0084994 -9.3497e-05
+v 0.0042165 0.0084994 -0.00061125
+v 0.0054374 0.0085 -0.00128575
+v 0.0064836 0.0084994 -0.00213725
+v 0.0078177 0.0085339 -0.00362616
+v 0.0088143 0.0085581 -0.0053593
+v 0.0094487 0.0085722 -0.0073508
+v 4.8963e-05 0.0112315 0.00027484
+v 0.00149538 0.0112995 0.000162663
+v 0.00149748 0.0140996 9.3216e-05
+v 4.8963e-05 0.014088 0.00020517
+v 4.8963e-05 0.0168813 0.00013704
+v 0.0014996 0.0168998 2.3769e-05
+v 4.8963e-05 0.0195887 7.10078e-05
+v 0.0015017 0.0197 -4.56776e-05
+v 0.00289307 0.0112995 -0.000161452
+v 0.0028815 0.0140996 -0.000229407
+v 0.0028699 0.0168997 -0.00029736
+v 0.00285835 0.0197 -0.000365315
+v 0.0041897 0.0112995 -0.00067417
+v 0.004163 0.0140996 -0.00073708
+v 0.0041362 0.0168998 -0.0008
+v 0.0041094 0.0197 -0.00086291
+v 0.005408 0.0113 -0.00135426
+v 0.0053786 0.0141 -0.00142277
+v 0.00534918 0.0169 -0.00149127
+v 0.00531976 0.0197 -0.00155978
+v 0.0064569 0.0112995 -0.0022054
+v 0.00643017 0.0140996 -0.00227354
+v 0.0064034 0.0168998 -0.0023417
+v 0.00637669 0.0197 -0.00240984
+v 0.007774 0.011327 -0.0036823
+v 0.0087588 0.0113465 -0.00540216
+v 0.0077305 0.0141203 -0.00373847
+v 0.0087034 0.0141349 -0.005445
+v 0.0076869 0.0169133 -0.0037946
+v 0.008648 0.0169233 -0.00548788
+v 0.0076433 0.0197062 -0.00385076
+v 0.0085925 0.0197116 -0.0055307
+v 0.0093822 0.0113578 -0.0073644
+v 0.0093156 0.0141433 -0.00737808
+v 0.009249 0.0169289 -0.0073917
+v 0.0091825 0.0197144 -0.0074053
+v 0.0208985 0.002 -0.0100915
+v 0.0208985 9.5e-11 -0.0100915
+v 0.0210093 9.5e-11 -0.00925
+v 0.0210093 0.002 -0.00925
+v 0.0205738 0.002 -0.0108751
+v 0.0205738 9.5e-11 -0.0108751
+v 0.0200574 0.002 -0.011548
+v 0.0200574 9.5e-11 -0.011548
+v 0.0193844 0.002 -0.0120646
+v 0.0193844 9.5e-11 -0.0120646
+v 0.0186019 0.002 -0.0123889
+v 0.0186019 9.5e-11 -0.0123889
+v 0.0177593 0.002 -0.0125
+v 0.0177593 9.5e-11 -0.0125
+v 0.0169184 0.002 -0.0123893
+v 0.0169184 9.5e-11 -0.0123893
+v 0.0161343 0.002 -0.0120645
+v 0.0161343 9.5e-11 -0.0120645
+v 0.0154592 0.002 -0.011546
+v 0.0154592 9.5e-11 -0.011546
+v 0.0149446 0.002 -0.0108748
+v 0.0149446 9.5e-11 -0.0108748
+v 0.01462 0.002 -0.0100904
+v 0.01462 9.5e-11 -0.0100904
+v 0.0145093 0.002 -0.00925
+v 0.0145093 9.5e-11 -0.00925
+v 0.0208985 -0.0015 -0.0100915
+v 0.0210093 -0.0015 -0.00925
+v 0.0208985 -0.003 -0.0100915
+v 0.0210093 -0.003 -0.00925
+v 0.0208985 -0.0045 -0.0100915
+v 0.0210093 -0.0045 -0.00925
+v 0.0208985 -0.006 -0.0100915
+v 0.0210093 -0.006 -0.00925
+v 0.0208985 -0.0075 -0.0100915
+v 0.0210093 -0.0075 -0.00925
+v 0.0205738 -0.0015 -0.0108751
+v 0.0205738 -0.003 -0.0108751
+v 0.0205738 -0.0045 -0.0108751
+v 0.0205738 -0.006 -0.0108751
+v 0.0205738 -0.0075 -0.0108751
+v 0.0200574 -0.0015 -0.011548
+v 0.0200574 -0.003 -0.011548
+v 0.0200574 -0.0045 -0.011548
+v 0.0200574 -0.006 -0.011548
+v 0.0200574 -0.0075 -0.011548
+v 0.0193844 -0.0015 -0.0120646
+v 0.0193844 -0.003 -0.0120646
+v 0.0193844 -0.0045 -0.0120646
+v 0.0193844 -0.006 -0.0120646
+v 0.0193844 -0.0075 -0.0120646
+v 0.0186019 -0.0015 -0.0123889
+v 0.0186019 -0.003 -0.0123889
+v 0.0186019 -0.0045 -0.0123889
+v 0.0186019 -0.006 -0.0123889
+v 0.0186019 -0.0075 -0.0123889
+v 0.0177593 -0.0015 -0.0125
+v 0.0177593 -0.003 -0.0125
+v 0.0177593 -0.0045 -0.0125
+v 0.0177593 -0.006 -0.0125
+v 0.0177593 -0.0075 -0.0125
+v 0.0169184 -0.0015 -0.0123893
+v 0.0169184 -0.003 -0.0123893
+v 0.0169184 -0.0045 -0.0123893
+v 0.0169184 -0.006 -0.0123893
+v 0.0169184 -0.0075 -0.0123893
+v 0.0161343 -0.0015 -0.0120645
+v 0.0161343 -0.003 -0.0120645
+v 0.0161343 -0.0045 -0.0120645
+v 0.0161343 -0.006 -0.0120645
+v 0.0161343 -0.0075 -0.0120645
+v 0.0154592 -0.0015 -0.011546
+v 0.0154592 -0.003 -0.011546
+v 0.0154592 -0.0045 -0.011546
+v 0.0154592 -0.006 -0.011546
+v 0.0154592 -0.0075 -0.011546
+v 0.0149446 -0.0015 -0.0108748
+v 0.0149446 -0.003 -0.0108748
+v 0.0149446 -0.0045 -0.0108748
+v 0.0149446 -0.006 -0.0108748
+v 0.0149446 -0.0075 -0.0108748
+v 0.01462 -0.0015 -0.0100904
+v 0.01462 -0.003 -0.0100904
+v 0.01462 -0.0045 -0.0100904
+v 0.01462 -0.006 -0.0100904
+v 0.01462 -0.0075 -0.0100904
+v 0.0145093 -0.0015 -0.00925
+v 0.0145093 -0.003 -0.00925
+v 0.0145093 -0.0045 -0.00925
+v 0.0145093 -0.006 -0.00925
+v 0.0145093 -0.0075 -0.00925
+v 0.0208985 9.5e-11 -0.0084085
+v 0.0208985 0.002 -0.0084085
+v 0.0205738 9.5e-11 -0.0076249
+v 0.0205738 0.002 -0.0076249
+v 0.0200574 9.5e-11 -0.0069519
+v 0.0200574 0.002 -0.0069519
+v 0.0193844 9.5e-11 -0.0064354
+v 0.0193844 0.002 -0.0064354
+v 0.0186019 9.5e-11 -0.0061111
+v 0.0186019 0.002 -0.0061111
+v 0.0177593 9.5e-11 -0.006
+v 0.0177593 0.002 -0.006
+v 0.0169184 9.5e-11 -0.00611067
+v 0.0169184 0.002 -0.00611067
+v 0.0161343 9.5e-11 -0.0064355
+v 0.0161343 0.002 -0.0064355
+v 0.0154592 9.5e-11 -0.0069539
+v 0.0154592 0.002 -0.0069539
+v 0.0149446 9.5e-11 -0.00762518
+v 0.0149446 0.002 -0.00762518
+v 0.01462 9.5e-11 -0.0084096
+v 0.01462 0.002 -0.0084096
+v 0.0208985 -0.0015 -0.0084085
+v 0.0208985 -0.003 -0.0084085
+v 0.0208985 -0.0045 -0.0084085
+v 0.0208985 -0.006 -0.0084085
+v 0.0208985 -0.0075 -0.0084085
+v 0.0205738 -0.0015 -0.0076249
+v 0.0205738 -0.003 -0.0076249
+v 0.0205738 -0.0045 -0.0076249
+v 0.0205738 -0.006 -0.0076249
+v 0.0205738 -0.0075 -0.0076249
+v 0.0200574 -0.0015 -0.0069519
+v 0.0200574 -0.003 -0.0069519
+v 0.0200574 -0.0045 -0.0069519
+v 0.0200574 -0.006 -0.0069519
+v 0.0200574 -0.0075 -0.0069519
+v 0.0193844 -0.0015 -0.0064354
+v 0.0193844 -0.003 -0.0064354
+v 0.0193844 -0.0045 -0.0064354
+v 0.0193844 -0.006 -0.0064354
+v 0.0193844 -0.0075 -0.0064354
+v 0.0186019 -0.0015 -0.0061111
+v 0.0186019 -0.003 -0.0061111
+v 0.0186019 -0.0045 -0.0061111
+v 0.0186019 -0.006 -0.0061111
+v 0.0186019 -0.0075 -0.0061111
+v 0.0177593 -0.0015 -0.006
+v 0.0177593 -0.003 -0.006
+v 0.0177593 -0.0045 -0.006
+v 0.0177593 -0.006 -0.006
+v 0.0177593 -0.0075 -0.006
+v 0.0169184 -0.0015 -0.00611067
+v 0.0169184 -0.003 -0.00611067
+v 0.0169184 -0.0045 -0.00611067
+v 0.0169184 -0.006 -0.00611067
+v 0.0169184 -0.0075 -0.00611067
+v 0.0161343 -0.0015 -0.0064355
+v 0.0161343 -0.003 -0.0064355
+v 0.0161343 -0.0045 -0.0064355
+v 0.0161343 -0.006 -0.0064355
+v 0.0161343 -0.0075 -0.0064355
+v 0.0154592 -0.0015 -0.0069539
+v 0.0154592 -0.003 -0.0069539
+v 0.0154592 -0.0045 -0.0069539
+v 0.0154592 -0.006 -0.0069539
+v 0.0154592 -0.0075 -0.0069539
+v 0.0149446 -0.0015 -0.00762518
+v 0.0149446 -0.003 -0.00762518
+v 0.0149446 -0.0045 -0.00762518
+v 0.0149446 -0.006 -0.00762518
+v 0.0149446 -0.0075 -0.00762518
+v 0.01462 -0.0015 -0.0084096
+v 0.01462 -0.003 -0.0084096
+v 0.01462 -0.0045 -0.0084096
+v 0.01462 -0.006 -0.0084096
+v 0.01462 -0.0075 -0.0084096
+v -0.00097284 0.00038271 -0.012725
+v -0.00104896 2.83e-08 -0.012725
+v -0.00096135 0.00040932 -0.0115238
+v -0.00075607 0.00070714 -0.012725
+v -0.00074085 0.0007218 -0.0116002
+v -0.000431646 0.0009239 -0.012725
+v -0.000427704 0.00092555 -0.0116705
+v -0.00149694 0.0075 -0.0203843
+v -0.00149694 0.0075 -0.0187562
+v -0.00149694 0.0075 -0.0220123
+v -0.0029119 0.0075 -0.0201854
+v -0.0029119 0.0075 -0.0184298
+v -0.0029119 0.0075 -0.021941
+v -0.0042271 0.0075 -0.0198377
+v -0.0042271 0.0075 -0.0179107
+v -0.0042271 0.0075 -0.0217646
+v -0.0054374 0.0075 -0.019371
+v -0.0054374 0.0075 -0.0172143
+v -0.0054374 0.0075 -0.0215278
+v -0.00107038 -0.00334614 -0.0114768
+v -0.00104896 -0.00438748 -0.0114866
+v -0.00104896 -0.0053875 -0.0114866
+v -0.00104896 -0.0075 -0.0114868
+v -0.00104896 -0.01 -0.0114868
+v -0.00104896 -0.0125 -0.0114868
+v -0.00104896 -0.015 -0.0114868
+v -0.00104896 -0.0175 -0.0114868
+v -0.00139314 -0.01 -0.018149
+v -0.00139314 -0.0075 -0.018149
+v -0.00139314 -0.0125 -0.018149
+v -0.00139314 -0.015 -0.018149
+v -0.00270178 -0.01 -0.01785
+v -0.00270178 -0.0075 -0.01785
+v -0.00270178 -0.0125 -0.01785
+v -0.00270178 -0.015 -0.01785
+v -0.0039601 -0.01 -0.0173557
+v -0.0039601 -0.0075 -0.0173557
+v -0.0039601 -0.0125 -0.0173557
+v -0.0039601 -0.015 -0.0173557
+v -0.0050592 -0.01 -0.0167264
+v -0.0050592 -0.0075 -0.0167264
+v -0.0050592 -0.0125 -0.0167264
+v -0.0050592 -0.015 -0.0167264
+v -0.006294 -0.01 -0.0157307
+v -0.006294 -0.0075 -0.0157307
+v -0.006294 -0.0125 -0.0157307
+v -0.006294 -0.015 -0.0157307
+v -0.00746649 -0.0075 -0.014347
+v -0.00746649 -0.01 -0.014347
+v -0.0083333 -0.01 -0.012767
+v -0.0083333 -0.0075 -0.012767
+v -0.00746649 -0.0125 -0.014347
+v -0.0083333 -0.0125 -0.012767
+v -0.00746649 -0.015 -0.014347
+v -0.0083333 -0.015 -0.012767
+v -0.0088811 -0.01 -0.01098
+v -0.0088811 -0.0075 -0.01098
+v -0.0088811 -0.0125 -0.01098
+v -0.0088811 -0.015 -0.01098
+v -0.009049 -0.01 -0.00925
+v -0.009049 -0.0075 -0.00925
+v -0.009049 -0.0125 -0.00925
+v -0.009049 -0.015 -0.00925
+v -0.00104896 -0.0195 -0.0114868
+v -0.00104896 -0.0215 -0.0114868
+v -0.00104896 -0.0235 -0.0114868
+v -0.00104896 -0.0255 -0.0114868
+v -0.0047034 -0.0195 -0.0120852
+v -0.00501887 -0.0195 -0.0114866
+v -0.0047034 -0.0215 -0.0120852
+v -0.00501887 -0.0215 -0.0114866
+v -0.0047034 -0.0235 -0.0120852
+v -0.00501887 -0.0235 -0.0114866
+v -0.0047034 -0.0255 -0.0120852
+v -0.00501887 -0.0255 -0.0114866
+v -0.0053672 -0.0195 -0.010441
+v -0.0053672 -0.0215 -0.010441
+v -0.0053672 -0.0235 -0.010441
+v -0.0053672 -0.0255 -0.010441
+v -0.005499 -0.0195 -0.00925
+v -0.005499 -0.0215 -0.00925
+v -0.005499 -0.0235 -0.00925
+v -0.005499 -0.0255 -0.00925
+v -0.00109717 -0.0195 -0.0145982
+v -0.00109717 -0.0215 -0.0145982
+v -0.00109717 -0.0235 -0.0145982
+v -0.00109717 -0.0255 -0.0145982
+v -0.0020612 -0.0195 -0.014315
+v -0.0020612 -0.0215 -0.014315
+v -0.0020612 -0.0235 -0.014315
+v -0.0020612 -0.0255 -0.014315
+v -0.00149327 0.0084994 -0.018732
+v -0.00290464 0.0084994 -0.0184065
+v -0.0042165 0.0084994 -0.0178887
+v -0.0054374 0.0085 -0.0172143
+v -0.0064836 0.0084994 -0.0163628
+v -0.0078177 0.0085339 -0.0148738
+v -0.0088143 0.0085581 -0.0131407
+v -0.0094487 0.0085722 -0.0111492
+v -0.0096393 0.0085474 -0.00925
+v -0.00149538 0.0112995 -0.0186627
+v -0.00149748 0.0140996 -0.0185932
+v -0.0014996 0.0168998 -0.0185238
+v -0.0015017 0.0197 -0.0184543
+v -0.00289307 0.0112995 -0.0183385
+v -0.0028815 0.0140996 -0.0182706
+v -0.0028699 0.0168997 -0.0182026
+v -0.00285835 0.0197 -0.0181347
+v -0.0041897 0.0112995 -0.0178258
+v -0.004163 0.0140996 -0.017763
+v -0.0041362 0.0168998 -0.0177
+v -0.0041094 0.0197 -0.017637
+v -0.005408 0.0113 -0.0171457
+v -0.0053786 0.0141 -0.0170772
+v -0.00534918 0.0169 -0.0170087
+v -0.00531976 0.0197 -0.0169402
+v -0.0064569 0.0112995 -0.0162946
+v -0.00643017 0.0140996 -0.0162265
+v -0.0064034 0.0168998 -0.0161583
+v -0.00637669 0.0197 -0.01609
+v -0.007774 0.011327 -0.0148177
+v -0.0087588 0.0113465 -0.0130978
+v -0.0077305 0.0141203 -0.0147615
+v -0.0087034 0.0141349 -0.013055
+v -0.0076869 0.0169133 -0.0147054
+v -0.008648 0.0169233 -0.013012
+v -0.0076433 0.0197062 -0.0146492
+v -0.0085925 0.0197116 -0.0129693
+v -0.0093822 0.0113578 -0.0111356
+v -0.0093156 0.0141433 -0.011122
+v -0.009249 0.0169289 -0.0111083
+v -0.0091825 0.0197144 -0.0110947
+v -0.009571 0.0113471 -0.00925
+v -0.0095026 0.0141504 -0.00925
+v -0.0094357 0.0168943 -0.00925
+v -0.0093668 0.0197167 -0.00925
+v -0.00097284 -0.00038271 -0.012725
+v -0.00075607 -0.00070714 -0.012725
+v -0.000431646 -0.0009239 -0.012725
+v -0.0092624 9.5e-11 -0.0224344
+v -0.0117868 9.5e-11 -0.021232
+v -0.0092624 -0.0015 -0.0224344
+v -0.0092624 -0.003 -0.0224344
+v -0.0092624 -0.0045 -0.0224344
+v -0.0092624 -0.006 -0.0224344
+v -0.0092624 -0.0075 -0.0224344
+v -0.0117868 -0.0015 -0.021232
+v -0.0117868 -0.003 -0.021232
+v -0.0117868 -0.0045 -0.021232
+v -0.0117868 -0.006 -0.021232
+v -0.0117868 -0.0075 -0.021232
+v -0.00149694 0.0075 0.000256209
+v -0.00149694 0.0075 0.00123304
+v -0.0029119 0.0075 -7.0227e-05
+v -0.0029119 0.0075 0.00103423
+v -0.0042271 0.0075 -0.0005893
+v -0.0042271 0.0075 0.00068645
+v -0.0054374 0.0075 -0.00128575
+v -0.0054374 0.0075 0.00021983
+v -0.0065 0.0075 0.000312658
+v -0.00107038 -0.00334614 -0.0070232
+v -0.00104896 -0.00438748 -0.00701337
+v -0.00104896 -0.0053875 -0.0070134
+v -0.00104896 -0.0075 -0.0070132
+v -0.0017351 -0.00534529 -0.0074738
+v -0.00178137 -0.0075 -0.0075175
+v -0.00104896 -0.01 -0.0070132
+v -0.00104896 -0.0125 -0.0070132
+v -0.00104896 -0.015 -0.0070132
+v -0.00104896 -0.0175 -0.0070132
+v -0.00178137 -0.01 -0.0075175
+v -0.00178137 -0.0125 -0.0075175
+v -0.00178137 -0.015 -0.0075175
+v -0.00178137 -0.0175 -0.0075175
+v -0.00139314 -0.0075 -0.000350945
+v -0.00139314 -0.01 -0.000350945
+v -0.00139314 -0.0125 -0.000350945
+v -0.00139314 -0.015 -0.000350945
+v -0.00270178 -0.0075 -0.00064985
+v -0.00270178 -0.01 -0.00064985
+v -0.00270178 -0.0125 -0.00064985
+v -0.00270178 -0.015 -0.00064985
+v -0.0039601 -0.0075 -0.00114427
+v -0.0039601 -0.01 -0.00114427
+v -0.0039601 -0.0125 -0.00114427
+v -0.0039601 -0.015 -0.00114427
+v -0.0050592 -0.0075 -0.00177355
+v -0.0050592 -0.01 -0.00177355
+v -0.0050592 -0.0125 -0.00177355
+v -0.0050592 -0.015 -0.00177355
+v -0.006294 -0.0075 -0.00276926
+v -0.006294 -0.01 -0.00276926
+v -0.006294 -0.0125 -0.00276926
+v -0.006294 -0.015 -0.00276926
+v -0.0083333 -0.0075 -0.005733
+v -0.0083333 -0.01 -0.005733
+v -0.00746649 -0.01 -0.0041529
+v -0.00746649 -0.0075 -0.0041529
+v -0.0083333 -0.0125 -0.005733
+v -0.00746649 -0.0125 -0.0041529
+v -0.0083333 -0.015 -0.005733
+v -0.00746649 -0.015 -0.0041529
+v -0.0088811 -0.0075 -0.00752
+v -0.0088811 -0.01 -0.00752
+v -0.0088811 -0.0125 -0.00752
+v -0.0088811 -0.015 -0.00752
+v -0.00104896 -0.0195 -0.0070132
+v -0.00104896 -0.0215 -0.0070132
+v -0.00104896 -0.0235 -0.0070132
+v -0.00104896 -0.0255 -0.0070132
+v -0.00178137 -0.0195 -0.0075175
+v -0.00178137 -0.0215 -0.0075175
+v -0.00178137 -0.0235 -0.0075175
+v -0.00178137 -0.0255 -0.0075175
+v -0.00501887 -0.0195 -0.00701337
+v -0.0047034 -0.0195 -0.0064148
+v -0.00501887 -0.0215 -0.00701337
+v -0.0047034 -0.0215 -0.0064148
+v -0.00501887 -0.0235 -0.00701337
+v -0.0047034 -0.0235 -0.0064148
+v -0.00501887 -0.0255 -0.00701337
+v -0.0047034 -0.0255 -0.0064148
+v -0.0053672 -0.0195 -0.008059
+v -0.0053672 -0.0215 -0.008059
+v -0.0053672 -0.0235 -0.008059
+v -0.0053672 -0.0255 -0.008059
+v -0.00109717 -0.0195 -0.00390175
+v -0.00109717 -0.0215 -0.00390175
+v -0.00109717 -0.0235 -0.00390175
+v -0.00109717 -0.0255 -0.00390175
+v -0.0020612 -0.0195 -0.00418508
+v -0.0020612 -0.0215 -0.00418508
+v -0.0020612 -0.0235 -0.00418508
+v -0.0020612 -0.0255 -0.00418508
+v -0.00149327 0.0084994 0.00023211
+v -0.00290464 0.0084994 -9.3497e-05
+v -0.0042165 0.0084994 -0.00061125
+v -0.0054374 0.0085 -0.00128575
+v -0.0064836 0.0084994 -0.00213725
+v -0.0078177 0.0085339 -0.00362616
+v -0.0088143 0.0085581 -0.0053593
+v -0.0094487 0.0085722 -0.0073508
+v -0.00149538 0.0112995 0.000162663
+v -0.00149748 0.0140996 9.3216e-05
+v -0.0014996 0.0168998 2.3769e-05
+v -0.0015017 0.0197 -4.56776e-05
+v -0.00289307 0.0112995 -0.000161452
+v -0.0028815 0.0140996 -0.000229407
+v -0.0028699 0.0168997 -0.00029736
+v -0.00285835 0.0197 -0.000365315
+v -0.0041897 0.0112995 -0.00067417
+v -0.004163 0.0140996 -0.00073708
+v -0.0041362 0.0168998 -0.0008
+v -0.0041094 0.0197 -0.00086291
+v -0.005408 0.0113 -0.00135426
+v -0.0053786 0.0141 -0.00142277
+v -0.00534918 0.0169 -0.00149127
+v -0.00531976 0.0197 -0.00155978
+v -0.0064569 0.0112995 -0.0022054
+v -0.00643017 0.0140996 -0.00227354
+v -0.0064034 0.0168998 -0.0023417
+v -0.00637669 0.0197 -0.00240984
+v -0.007774 0.011327 -0.0036823
+v -0.0087588 0.0113465 -0.00540216
+v -0.0077305 0.0141203 -0.00373847
+v -0.0087034 0.0141349 -0.005445
+v -0.0076869 0.0169133 -0.0037946
+v -0.008648 0.0169233 -0.00548788
+v -0.0076433 0.0197062 -0.00385076
+v -0.0085925 0.0197116 -0.0055307
+v -0.0093822 0.0113578 -0.0073644
+v -0.0093156 0.0141433 -0.00737808
+v -0.009249 0.0169289 -0.0073917
+v -0.0091825 0.0197144 -0.0074053
+v -0.0210093 0.002 -0.00925
+v -0.0210093 9.5e-11 -0.00925
+v -0.0208985 9.5e-11 -0.0100915
+v -0.0208985 0.002 -0.0100915
+v -0.0205738 9.5e-11 -0.0108751
+v -0.0205738 0.002 -0.0108751
+v -0.0200574 9.5e-11 -0.011548
+v -0.0200574 0.002 -0.011548
+v -0.0193844 9.5e-11 -0.0120646
+v -0.0193844 0.002 -0.0120646
+v -0.0186019 9.5e-11 -0.0123889
+v -0.0186019 0.002 -0.0123889
+v -0.0177593 9.5e-11 -0.0125
+v -0.0177593 0.002 -0.0125
+v -0.0169184 9.5e-11 -0.0123893
+v -0.0169184 0.002 -0.0123893
+v -0.0161343 9.5e-11 -0.0120645
+v -0.0161343 0.002 -0.0120645
+v -0.0154592 9.5e-11 -0.011546
+v -0.0154592 0.002 -0.011546
+v -0.0149446 9.5e-11 -0.0108748
+v -0.0149446 0.002 -0.0108748
+v -0.01462 9.5e-11 -0.0100904
+v -0.01462 0.002 -0.0100904
+v -0.0145093 9.5e-11 -0.00925
+v -0.0145093 0.002 -0.00925
+v -0.0210093 -0.0015 -0.00925
+v -0.0208985 -0.0015 -0.0100915
+v -0.0210093 -0.003 -0.00925
+v -0.0208985 -0.003 -0.0100915
+v -0.0210093 -0.0045 -0.00925
+v -0.0208985 -0.0045 -0.0100915
+v -0.0210093 -0.006 -0.00925
+v -0.0208985 -0.006 -0.0100915
+v -0.0210093 -0.0075 -0.00925
+v -0.0208985 -0.0075 -0.0100915
+v -0.0205738 -0.0015 -0.0108751
+v -0.0205738 -0.003 -0.0108751
+v -0.0205738 -0.0045 -0.0108751
+v -0.0205738 -0.006 -0.0108751
+v -0.0205738 -0.0075 -0.0108751
+v -0.0200574 -0.0015 -0.011548
+v -0.0200574 -0.003 -0.011548
+v -0.0200574 -0.0045 -0.011548
+v -0.0200574 -0.006 -0.011548
+v -0.0200574 -0.0075 -0.011548
+v -0.0193844 -0.0015 -0.0120646
+v -0.0193844 -0.003 -0.0120646
+v -0.0193844 -0.0045 -0.0120646
+v -0.0193844 -0.006 -0.0120646
+v -0.0193844 -0.0075 -0.0120646
+v -0.0186019 -0.0015 -0.0123889
+v -0.0186019 -0.003 -0.0123889
+v -0.0186019 -0.0045 -0.0123889
+v -0.0186019 -0.006 -0.0123889
+v -0.0186019 -0.0075 -0.0123889
+v -0.0177593 -0.0015 -0.0125
+v -0.0177593 -0.003 -0.0125
+v -0.0177593 -0.0045 -0.0125
+v -0.0177593 -0.006 -0.0125
+v -0.0177593 -0.0075 -0.0125
+v -0.0169184 -0.0015 -0.0123893
+v -0.0169184 -0.003 -0.0123893
+v -0.0169184 -0.0045 -0.0123893
+v -0.0169184 -0.006 -0.0123893
+v -0.0169184 -0.0075 -0.0123893
+v -0.0161343 -0.0015 -0.0120645
+v -0.0161343 -0.003 -0.0120645
+v -0.0161343 -0.0045 -0.0120645
+v -0.0161343 -0.006 -0.0120645
+v -0.0161343 -0.0075 -0.0120645
+v -0.0154592 -0.0015 -0.011546
+v -0.0154592 -0.003 -0.011546
+v -0.0154592 -0.0045 -0.011546
+v -0.0154592 -0.006 -0.011546
+v -0.0154592 -0.0075 -0.011546
+v -0.0149446 -0.0015 -0.0108748
+v -0.0149446 -0.003 -0.0108748
+v -0.0149446 -0.0045 -0.0108748
+v -0.0149446 -0.006 -0.0108748
+v -0.0149446 -0.0075 -0.0108748
+v -0.01462 -0.0015 -0.0100904
+v -0.01462 -0.003 -0.0100904
+v -0.01462 -0.0045 -0.0100904
+v -0.01462 -0.006 -0.0100904
+v -0.01462 -0.0075 -0.0100904
+v -0.0145093 -0.0015 -0.00925
+v -0.0145093 -0.003 -0.00925
+v -0.0145093 -0.0045 -0.00925
+v -0.0145093 -0.006 -0.00925
+v -0.0145093 -0.0075 -0.00925
+v -0.0208985 0.002 -0.0084085
+v -0.0208985 9.5e-11 -0.0084085
+v -0.0205738 0.002 -0.0076249
+v -0.0205738 9.5e-11 -0.0076249
+v -0.0200574 0.002 -0.0069519
+v -0.0200574 9.5e-11 -0.0069519
+v -0.0193844 0.002 -0.0064354
+v -0.0193844 9.5e-11 -0.0064354
+v -0.0186019 0.002 -0.0061111
+v -0.0186019 9.5e-11 -0.0061111
+v -0.0177593 0.002 -0.006
+v -0.0177593 9.5e-11 -0.006
+v -0.0169184 0.002 -0.00611067
+v -0.0169184 9.5e-11 -0.00611067
+v -0.0161343 0.002 -0.0064355
+v -0.0161343 9.5e-11 -0.0064355
+v -0.0154592 0.002 -0.0069539
+v -0.0154592 9.5e-11 -0.0069539
+v -0.0149446 0.002 -0.00762518
+v -0.0149446 9.5e-11 -0.00762518
+v -0.01462 0.002 -0.0084096
+v -0.01462 9.5e-11 -0.0084096
+v -0.0208985 -0.0015 -0.0084085
+v -0.0208985 -0.003 -0.0084085
+v -0.0208985 -0.0045 -0.0084085
+v -0.0208985 -0.006 -0.0084085
+v -0.0208985 -0.0075 -0.0084085
+v -0.0205738 -0.0015 -0.0076249
+v -0.0205738 -0.003 -0.0076249
+v -0.0205738 -0.0045 -0.0076249
+v -0.0205738 -0.006 -0.0076249
+v -0.0205738 -0.0075 -0.0076249
+v -0.0200574 -0.0015 -0.0069519
+v -0.0200574 -0.003 -0.0069519
+v -0.0200574 -0.0045 -0.0069519
+v -0.0200574 -0.006 -0.0069519
+v -0.0200574 -0.0075 -0.0069519
+v -0.0193844 -0.0015 -0.0064354
+v -0.0193844 -0.003 -0.0064354
+v -0.0193844 -0.0045 -0.0064354
+v -0.0193844 -0.006 -0.0064354
+v -0.0193844 -0.0075 -0.0064354
+v -0.0186019 -0.0015 -0.0061111
+v -0.0186019 -0.003 -0.0061111
+v -0.0186019 -0.0045 -0.0061111
+v -0.0186019 -0.006 -0.0061111
+v -0.0186019 -0.0075 -0.0061111
+v -0.0177593 -0.0015 -0.006
+v -0.0177593 -0.003 -0.006
+v -0.0177593 -0.0045 -0.006
+v -0.0177593 -0.006 -0.006
+v -0.0177593 -0.0075 -0.006
+v -0.0169184 -0.0015 -0.00611067
+v -0.0169184 -0.003 -0.00611067
+v -0.0169184 -0.0045 -0.00611067
+v -0.0169184 -0.006 -0.00611067
+v -0.0169184 -0.0075 -0.00611067
+v -0.0161343 -0.0015 -0.0064355
+v -0.0161343 -0.003 -0.0064355
+v -0.0161343 -0.0045 -0.0064355
+v -0.0161343 -0.006 -0.0064355
+v -0.0161343 -0.0075 -0.0064355
+v -0.0154592 -0.0015 -0.0069539
+v -0.0154592 -0.003 -0.0069539
+v -0.0154592 -0.0045 -0.0069539
+v -0.0154592 -0.006 -0.0069539
+v -0.0154592 -0.0075 -0.0069539
+v -0.0149446 -0.0015 -0.00762518
+v -0.0149446 -0.003 -0.00762518
+v -0.0149446 -0.0045 -0.00762518
+v -0.0149446 -0.006 -0.00762518
+v -0.0149446 -0.0075 -0.00762518
+v -0.01462 -0.0015 -0.0084096
+v -0.01462 -0.003 -0.0084096
+v -0.01462 -0.0045 -0.0084096
+v -0.01462 -0.006 -0.0084096
+v -0.01462 -0.0075 -0.0084096
+v -0.0177593 9.5e-11 -0.000249369
+v -0.0158684 9.5e-11 0.00057542
+v -0.0139774 9.5e-11 0.00140021
+v -0.0177593 -0.0015 -0.000249369
+v -0.0158684 -0.0015 0.00057542
+v -0.0177593 -0.003 -0.000249369
+v -0.0158684 -0.003 0.00057542
+v -0.0177593 -0.0045 -0.000249369
+v -0.0158684 -0.0045 0.00057542
+v -0.0177593 -0.006 -0.000249369
+v -0.0158684 -0.006 0.00057542
+v -0.0177593 -0.0075 -0.000249369
+v -0.0158684 -0.0075 0.00057542
+v -0.0139774 -0.0015 0.00140021
+v -0.0139774 -0.003 0.00140021
+v -0.0139774 -0.0045 0.00140021
+v -0.0139774 -0.006 0.00140021
+v -0.0139774 -0.0075 0.00140021
+v 0.0065 0.003375 -0.018903
+v 0.0065 0.003375 -0.0212904
+v 0.0065 0.00475 -0.018873
+v 0.0065 0.00475 -0.021275
+v 0.0065 0.006125 -0.0188428
+v 0.0065 0.006125 -0.0212598
+v 0.0022958 -0.005204 -0.0102255
+v 0.00231247 -0.0075 -0.0101877
+v 0.0044074 -0.00111989 -0.0161579
+v 0.0043992 -0.00115128 -0.0176229
+v 0.0039486 -0.0022456 -0.0161579
+v 0.0039599 -0.00222589 -0.01778
+v 0.0043992 -0.00115128 -0.0196448
+v 0.0043992 -0.00115128 -0.0216668
+v 0.0039599 -0.00222589 -0.01975
+v 0.0039599 -0.00222589 -0.02172
+v 0.00231247 -0.01 -0.0101877
+v 0.00231247 -0.0125 -0.0101877
+v 0.00231247 -0.015 -0.0101877
+v 0.00231247 -0.0175 -0.0101877
+v 0.00231247 -0.0195 -0.0101877
+v 0.00231247 -0.0215 -0.0101877
+v 0.00231247 -0.0235 -0.0101877
+v 0.00231247 -0.0255 -0.0101877
+v 0.025665 9.5e-11 -0.0116081
+v 0.024661 9.5e-11 -0.0137696
+v 0.0230815 9.5e-11 -0.0155537
+v 0.0210577 9.5e-11 -0.016812
+v 0.01945 9.5e-11 -0.0175827
+v 0.025665 -0.0015 -0.0116081
+v 0.025665 -0.003 -0.0116081
+v 0.025665 -0.0045 -0.0116081
+v 0.025665 -0.006 -0.0116081
+v 0.025665 -0.0075 -0.0116081
+v 0.024661 -0.0015 -0.0137696
+v 0.024661 -0.003 -0.0137696
+v 0.024661 -0.0045 -0.0137696
+v 0.024661 -0.006 -0.0137696
+v 0.024661 -0.0075 -0.0137696
+v 0.0230815 -0.0015 -0.0155537
+v 0.0230815 -0.003 -0.0155537
+v 0.0230815 -0.0045 -0.0155537
+v 0.0230815 -0.006 -0.0155537
+v 0.0230815 -0.0075 -0.0155537
+v 0.0210577 -0.0015 -0.016812
+v 0.0210577 -0.003 -0.016812
+v 0.0210577 -0.0045 -0.016812
+v 0.0210577 -0.006 -0.016812
+v 0.0210577 -0.0075 -0.016812
+v 0.01945 -0.0015 -0.0175827
+v 0.01945 -0.003 -0.0175827
+v 0.01945 -0.0045 -0.0175827
+v 0.01945 -0.006 -0.0175827
+v 0.01945 -0.0075 -0.0175827
+v -0.0044074 0.00111989 -0.0161579
+v -0.0043992 0.00115128 -0.0176229
+v -0.0039486 0.0022456 -0.0161579
+v -0.0039599 0.00222589 -0.01778
+v -0.0043992 0.00115128 -0.0196448
+v -0.0043992 0.00115128 -0.0216668
+v -0.0039599 0.00222589 -0.01975
+v -0.0039599 0.00222589 -0.02172
+v -0.0065 0.003375 0.00040305
+v -0.0065 0.00475 0.00037292
+v -0.0065 0.006125 0.000342788
+v -0.0022958 -0.005204 -0.0082745
+v -0.00231247 -0.0075 -0.00831229
+v -0.00231247 -0.01 -0.00831229
+v -0.00231247 -0.0125 -0.00831229
+v -0.00231247 -0.015 -0.00831229
+v -0.00231247 -0.0175 -0.00831229
+v -0.00231247 -0.0195 -0.00831229
+v -0.00231247 -0.0215 -0.00831229
+v -0.00231247 -0.0235 -0.00831229
+v -0.00231247 -0.0255 -0.00831229
+v -0.025665 9.5e-11 -0.0068919
+v -0.024661 9.5e-11 -0.0047304
+v -0.0230815 9.5e-11 -0.0029463
+v -0.0210577 9.5e-11 -0.00168803
+v -0.0194085 9.5e-11 -0.0009687
+v -0.025665 -0.0015 -0.0068919
+v -0.025665 -0.003 -0.0068919
+v -0.025665 -0.0045 -0.0068919
+v -0.025665 -0.006 -0.0068919
+v -0.025665 -0.0075 -0.0068919
+v -0.024661 -0.0015 -0.0047304
+v -0.024661 -0.003 -0.0047304
+v -0.024661 -0.0045 -0.0047304
+v -0.024661 -0.006 -0.0047304
+v -0.024661 -0.0075 -0.0047304
+v -0.0230815 -0.0015 -0.0029463
+v -0.0230815 -0.003 -0.0029463
+v -0.0230815 -0.0045 -0.0029463
+v -0.0230815 -0.006 -0.0029463
+v -0.0230815 -0.0075 -0.0029463
+v -0.0210577 -0.0015 -0.00168803
+v -0.0210577 -0.003 -0.00168803
+v -0.0210577 -0.0045 -0.00168803
+v -0.0210577 -0.006 -0.00168803
+v -0.0210577 -0.0075 -0.00168803
+v -0.0194085 -0.0015 -0.0009687
+v -0.0194085 -0.003 -0.0009687
+v -0.0194085 -0.0045 -0.0009687
+v -0.0194085 -0.006 -0.0009687
+v -0.0194085 -0.0075 -0.0009687
+v 0.010708 -0.0075 0.0011982
+v -0.010708 -0.0075 0.0011982
+v 0.0097686 -0.0075 -0.0152248
+v 0.0115415 -0.0075 -0.0156366
+v 0.0111516 -0.0075 -0.014182
+v 0.0131584 -0.0075 -0.0151265
+v 0.0131946 -0.0075 -0.0158693
+v 0.0146963 -0.0075 -0.016257
+v 0.0144921 -0.0075 -0.01727
+v 0.015699 -0.0075 -0.0175533
+v 0.0125608 -0.0075 -0.0164174
+v 0.0134607 -0.0075 -0.01688
+v 0.0115415 -0.0075 -0.00286344
+v 0.0097686 -0.0075 -0.00327517
+v 0.0111516 -0.0075 -0.0043179
+v 0.0131946 -0.0075 -0.0026307
+v 0.0131584 -0.0075 -0.0033735
+v 0.0146963 -0.0075 -0.00224303
+v 0.015699 -0.0075 -0.00094673
+v 0.0144921 -0.0075 -0.00123011
+v 0.0134607 -0.0075 -0.0016199
+v 0.0125608 -0.0075 -0.00208264
+v -0.0115415 -0.0075 -0.0156366
+v -0.0097686 -0.0075 -0.0152248
+v -0.0111516 -0.0075 -0.014182
+v -0.0131946 -0.0075 -0.0158693
+v -0.0131584 -0.0075 -0.0151265
+v -0.0146963 -0.0075 -0.016257
+v -0.015699 -0.0075 -0.0175533
+v -0.0144921 -0.0075 -0.01727
+v -0.0134607 -0.0075 -0.01688
+v -0.0125608 -0.0075 -0.0164174
+v -0.0097686 -0.0075 -0.00327517
+v -0.0115415 -0.0075 -0.00286344
+v -0.0111516 -0.0075 -0.0043179
+v -0.0131584 -0.0075 -0.0033735
+v -0.0131946 -0.0075 -0.0026307
+v -0.0146963 -0.0075 -0.00224303
+v -0.0144921 -0.0075 -0.00123011
+v -0.015699 -0.0075 -0.00094673
+v -0.0125608 -0.0075 -0.00208264
+v -0.0134607 -0.0075 -0.0016199
+v 0.0107846 -0.0075 -0.0109912
+v 0.0107791 -0.0075 -0.00925
+v 0.0117593 -0.0075 -0.00925
+v 0.0119634 -0.0075 -0.0108016
+v 0.0162069 -0.0075 -0.0150457
+v 0.0147592 -0.0075 -0.014446
+v 0.0166766 -0.0075 -0.0163743
+v 0.0177593 -0.0075 -0.0166736
+v 0.0177593 -0.0075 -0.01525
+v 0.0167117 -0.0075 -0.0174385
+v 0.008014 -0.0075 -0.0171347
+v 0.0090659 -0.0075 -0.016288
+v 0.0065 -0.0075 -0.0188127
+v 0.008476 -0.0075 -0.0185554
+v 0.0106532 -0.0075 -0.017664
+v 0.0087366 -0.0075 -0.0205014
+v 0.0065 -0.0075 -0.0212445
+v 0.0116557 -0.0075 -0.019395
+v 0.0120812 -0.0075 -0.0185232
+v 0.010708 -0.0075 -0.0196982
+v 0.0121778 -0.0075 -0.019964
+v 0.0130909 -0.0075 -0.0192646
+v 0.0120464 -0.0075 -0.0172835
+v 0.0129252 -0.0075 -0.017769
+v 0.013513 -0.0075 -0.013489
+v 0.0141125 -0.0075 -0.0183892
+v 0.0107617 -0.0075 -0.0127276
+v 0.012563 -0.0075 -0.0122497
+v 0.0222266 -0.0075 -0.0104476
+v 0.0235547 -0.0075 -0.0108036
+v 0.0237593 -0.0075 -0.00925
+v 0.0223843 -0.0075 -0.00925
+v 0.0217646 -0.0075 -0.0115627
+v 0.0229553 -0.0075 -0.0122503
+v 0.0210297 -0.0075 -0.0125204
+v 0.022002 -0.0075 -0.0134926
+v 0.0200719 -0.0075 -0.0132553
+v 0.0207594 -0.0075 -0.014446
+v 0.0189584 -0.0075 -0.0137169
+v 0.0193148 -0.0075 -0.0150449
+v 0.0177593 -0.0075 -0.013875
+v 0.02461 -0.0075 -0.0112059
+v 0.0248843 -0.0075 -0.00925
+v 0.0238083 -0.0075 -0.01301
+v 0.0225418 -0.0075 -0.0145232
+v 0.0209085 -0.0075 -0.015629
+v 0.0193617 -0.0075 -0.016288
+v 0.0165626 -0.0075 -0.0137175
+v 0.0154467 -0.0075 -0.0132553
+v 0.014486 -0.0075 -0.0125175
+v 0.0137538 -0.0075 -0.0115622
+v 0.0132916 -0.0075 -0.010446
+v 0.0131343 -0.0075 -0.00925
+v 0.0222266 -0.0075 -0.0080524
+v 0.0235547 -0.0075 -0.0076964
+v 0.0217646 -0.0075 -0.0069373
+v 0.0229553 -0.0075 -0.0062497
+v 0.0210297 -0.0075 -0.0059796
+v 0.022002 -0.0075 -0.00500735
+v 0.0207594 -0.0075 -0.00405388
+v 0.0200719 -0.0075 -0.00524466
+v 0.0189584 -0.0075 -0.0047831
+v 0.0193148 -0.0075 -0.00345514
+v 0.0177593 -0.0075 -0.00325
+v 0.0177593 -0.0075 -0.004625
+v 0.02461 -0.0075 -0.0072941
+v 0.0238083 -0.0075 -0.00549006
+v 0.0225418 -0.0075 -0.0039768
+v 0.0209085 -0.0075 -0.00287096
+v 0.0193617 -0.0075 -0.0022119
+v 0.0177593 -0.0075 -0.00182637
+v 0.0162069 -0.0075 -0.0034543
+v 0.0165626 -0.0075 -0.0047825
+v 0.0147592 -0.0075 -0.0040539
+v 0.0154467 -0.0075 -0.00524469
+v 0.013513 -0.0075 -0.00501106
+v 0.014486 -0.0075 -0.00598248
+v 0.012563 -0.0075 -0.0062503
+v 0.0137538 -0.0075 -0.0069378
+v 0.0132916 -0.0075 -0.008054
+v 0.0119634 -0.0075 -0.0076985
+v 0.0107846 -0.0075 -0.0075088
+v 0.0166766 -0.0075 -0.00212568
+v 0.0167117 -0.0075 -0.00106153
+v 0.008014 -0.0075 -0.00136532
+v 0.0090659 -0.0075 -0.00221207
+v 0.008476 -0.0075 5.5378e-05
+v 0.0065 -0.0075 0.000312658
+v 0.0106532 -0.0075 -0.00083587
+v 0.0116557 -0.0075 0.00089514
+v 0.0120812 -0.0075 2.32197e-05
+v 0.0130909 -0.0075 0.00076461
+v 0.0121778 -0.0075 0.00146398
+v 0.0120464 -0.0075 -0.0012165
+v 0.0129252 -0.0075 -0.000731
+v 0.0141125 -0.0075 -0.000110779
+v 0.0107617 -0.0075 -0.0057724
+v -0.0107791 -0.0075 -0.00925
+v -0.0107846 -0.0075 -0.0109912
+v -0.0117593 -0.0075 -0.00925
+v -0.0119634 -0.0075 -0.0108016
+v -0.0162069 -0.0075 -0.0150457
+v -0.0166766 -0.0075 -0.0163743
+v -0.0147592 -0.0075 -0.014446
+v -0.0177593 -0.0075 -0.01525
+v -0.0177593 -0.0075 -0.0166736
+v -0.0167117 -0.0075 -0.0174385
+v -0.008014 -0.0075 -0.0171347
+v -0.0090659 -0.0075 -0.016288
+v -0.008476 -0.0075 -0.0185554
+v -0.0065 -0.0075 -0.0188127
+v -0.0106532 -0.0075 -0.017664
+v -0.0087366 -0.0075 -0.0205014
+v -0.0065 -0.0075 -0.0212445
+v -0.0116557 -0.0075 -0.019395
+v -0.010708 -0.0075 -0.0196982
+v -0.0120812 -0.0075 -0.0185232
+v -0.0130909 -0.0075 -0.0192646
+v -0.0121778 -0.0075 -0.019964
+v -0.0120464 -0.0075 -0.0172835
+v -0.0129252 -0.0075 -0.017769
+v -0.013513 -0.0075 -0.013489
+v -0.0141125 -0.0075 -0.0183892
+v -0.0107617 -0.0075 -0.0127276
+v -0.012563 -0.0075 -0.0122497
+v -0.0222266 -0.0075 -0.0104476
+v -0.0223843 -0.0075 -0.00925
+v -0.0237593 -0.0075 -0.00925
+v -0.0235547 -0.0075 -0.0108036
+v -0.0217646 -0.0075 -0.0115627
+v -0.0229553 -0.0075 -0.0122503
+v -0.0210297 -0.0075 -0.0125204
+v -0.022002 -0.0075 -0.0134926
+v -0.0207594 -0.0075 -0.014446
+v -0.0200719 -0.0075 -0.0132553
+v -0.0189584 -0.0075 -0.0137169
+v -0.0193148 -0.0075 -0.0150449
+v -0.0177593 -0.0075 -0.013875
+v -0.0248843 -0.0075 -0.00925
+v -0.02461 -0.0075 -0.0112059
+v -0.0238083 -0.0075 -0.01301
+v -0.0225418 -0.0075 -0.0145232
+v -0.0209085 -0.0075 -0.015629
+v -0.0193617 -0.0075 -0.016288
+v -0.0165626 -0.0075 -0.0137175
+v -0.0154467 -0.0075 -0.0132553
+v -0.014486 -0.0075 -0.0125175
+v -0.0137538 -0.0075 -0.0115622
+v -0.0132916 -0.0075 -0.010446
+v -0.0131343 -0.0075 -0.00925
+v -0.0222266 -0.0075 -0.0080524
+v -0.0235547 -0.0075 -0.0076964
+v -0.0217646 -0.0075 -0.0069373
+v -0.0229553 -0.0075 -0.0062497
+v -0.0210297 -0.0075 -0.0059796
+v -0.022002 -0.0075 -0.00500735
+v -0.0200719 -0.0075 -0.00524466
+v -0.0207594 -0.0075 -0.00405388
+v -0.0189584 -0.0075 -0.0047831
+v -0.0193148 -0.0075 -0.00345514
+v -0.0177593 -0.0075 -0.004625
+v -0.0177593 -0.0075 -0.00325
+v -0.02461 -0.0075 -0.0072941
+v -0.0238083 -0.0075 -0.00549006
+v -0.0225418 -0.0075 -0.0039768
+v -0.0209085 -0.0075 -0.00287096
+v -0.0193617 -0.0075 -0.0022119
+v -0.0177593 -0.0075 -0.00182637
+v -0.0165626 -0.0075 -0.0047825
+v -0.0162069 -0.0075 -0.0034543
+v -0.0154467 -0.0075 -0.00524469
+v -0.0147592 -0.0075 -0.0040539
+v -0.014486 -0.0075 -0.00598248
+v -0.013513 -0.0075 -0.00501106
+v -0.0137538 -0.0075 -0.0069378
+v -0.012563 -0.0075 -0.0062503
+v -0.0132916 -0.0075 -0.008054
+v -0.0119634 -0.0075 -0.0076985
+v -0.0107846 -0.0075 -0.0075088
+v -0.0166766 -0.0075 -0.00212568
+v -0.0167117 -0.0075 -0.00106153
+v -0.008014 -0.0075 -0.00136532
+v -0.0090659 -0.0075 -0.00221207
+v -0.0065 -0.0075 0.000312658
+v -0.008476 -0.0075 5.5378e-05
+v -0.0106532 -0.0075 -0.00083587
+v -0.0116557 -0.0075 0.00089514
+v -0.0120812 -0.0075 2.32197e-05
+v -0.0121778 -0.0075 0.00146398
+v -0.0130909 -0.0075 0.00076461
+v -0.0120464 -0.0075 -0.0012165
+v -0.0129252 -0.0075 -0.000731
+v -0.0141125 -0.0075 -0.000110779
+v -0.0107617 -0.0075 -0.0057724
+v 4.8963e-05 -0.0075 -0.020494
+v 0.00149694 -0.0075 -0.0203843
+v 0.00149694 -0.0075 -0.0220123
+v 4.8963e-05 -0.0075 -0.022122
+v 0.0029119 -0.0075 -0.0201854
+v 0.0029119 -0.0075 -0.021941
+v 0.0042271 -0.0075 -0.0198377
+v 0.0042271 -0.0075 -0.0217646
+v 0.0054374 -0.0075 -0.019371
+v 0.0054374 -0.0075 -0.0215278
+v 0.00149694 -0.0075 0.00123304
+v 4.8963e-05 -0.0075 0.00134268
+v 0.0029119 -0.0075 0.00103423
+v 0.0042271 -0.0075 0.00068645
+v 0.0054374 -0.0075 0.00021983
+v -0.00149694 -0.0075 -0.0203843
+v -0.00149694 -0.0075 -0.0220123
+v -0.0029119 -0.0075 -0.0201854
+v -0.0029119 -0.0075 -0.021941
+v -0.0042271 -0.0075 -0.0198377
+v -0.0042271 -0.0075 -0.0217646
+v -0.0054374 -0.0075 -0.019371
+v -0.0054374 -0.0075 -0.0215278
+v -0.00149694 -0.0075 0.00123304
+v -0.0029119 -0.0075 0.00103423
+v -0.0042271 -0.0075 0.00068645
+v -0.0054374 -0.0075 0.00021983
+v 0.0222266 0.002 -0.0104476
+v 0.0223843 0.002 -0.00925
+v 0.0217646 0.002 -0.0115627
+v 0.0210297 0.002 -0.0125204
+v 0.0200719 0.002 -0.0132553
+v 0.0189584 0.002 -0.0137169
+v 0.0177593 0.002 -0.013875
+v 0.0165626 0.002 -0.0137175
+v 0.0154467 0.002 -0.0132553
+v 0.014486 0.002 -0.0125175
+v 0.0137538 0.002 -0.0115622
+v 0.0132916 0.002 -0.010446
+v 0.0131343 0.002 -0.00925
+v 0.0222266 0.002 -0.0080524
+v 0.0217646 0.002 -0.0069373
+v 0.0210297 0.002 -0.0059796
+v 0.0200719 0.002 -0.00524466
+v 0.0189584 0.002 -0.0047831
+v 0.0177593 0.002 -0.004625
+v 0.0165626 0.002 -0.0047825
+v 0.0154467 0.002 -0.00524469
+v 0.014486 0.002 -0.00598248
+v 0.0137538 0.002 -0.0069378
+v 0.0132916 0.002 -0.008054
+v -0.0222266 0.002 -0.0104476
+v -0.0223843 0.002 -0.00925
+v -0.0217646 0.002 -0.0115627
+v -0.0210297 0.002 -0.0125204
+v -0.0200719 0.002 -0.0132553
+v -0.0189584 0.002 -0.0137169
+v -0.0177593 0.002 -0.013875
+v -0.0165626 0.002 -0.0137175
+v -0.0154467 0.002 -0.0132553
+v -0.014486 0.002 -0.0125175
+v -0.0137538 0.002 -0.0115622
+v -0.0132916 0.002 -0.010446
+v -0.0131343 0.002 -0.00925
+v -0.0222266 0.002 -0.0080524
+v -0.0217646 0.002 -0.0069373
+v -0.0210297 0.002 -0.0059796
+v -0.0200719 0.002 -0.00524466
+v -0.0189584 0.002 -0.0047831
+v -0.0177593 0.002 -0.004625
+v -0.0165626 0.002 -0.0047825
+v -0.0154467 0.002 -0.00524469
+v -0.014486 0.002 -0.00598248
+v -0.0137538 0.002 -0.0069378
+v -0.0132916 0.002 -0.008054
+v 0.000781428 0.00161437 -0.011588
+v 0.0010918 0.0023048 -0.011467
+v 4.8963e-05 0.0023048 -0.0116999
+v 4.8963e-05 0.00165243 -0.0116999
+v 0.00133196 0.00150598 -0.0113372
+v 0.0017277 0.0023048 -0.0110345
+v 0.00139701 0.00076758 -0.0112958
+v 0.0017277 0.00115243 -0.0110345
+v 0.00102184 0.0011524 -0.0070027
+v 4.8963e-05 0.0011524 -0.00680007
+v 4.8963e-05 0.0023048 -0.0068001
+v 0.0010918 0.0023048 -0.007033
+v 0.0017277 0.0023048 -0.0074655
+v 0.0017277 0.00115243 -0.0074655
+v -0.000781428 0.00161437 -0.011588
+v -0.0010918 0.0023048 -0.011467
+v -0.0017277 0.0023048 -0.0110345
+v -0.00133196 0.00150598 -0.0113372
+v -0.0017277 0.00115243 -0.0110345
+v -0.00139701 0.00076758 -0.0112958
+v -0.00102184 0.0011524 -0.0070027
+v -0.0010918 0.0023048 -0.007033
+v -0.0017277 0.00115243 -0.0074655
+v -0.0017277 0.0023048 -0.0074655
+v 0.0022885 0.00195405 -0.0102427
+v 0.0022932 0.00097703 -0.0102324
+v 0.00249896 0.0018873 -0.00925
+v 0.00249896 0.00094365 -0.00925
+v 0.0022885 0.00195405 -0.0082573
+v 0.0022932 0.00097703 -0.0082676
+v -0.0022885 0.00195405 -0.0102427
+v -0.0022932 0.00097703 -0.0102324
+v -0.00249896 0.0018873 -0.00925
+v -0.00249896 0.00094365 -0.00925
+v -0.0022885 0.00195405 -0.0082573
+v -0.0022932 0.00097703 -0.0082676
+v 0.00170827 0.00324768 -0.0110522
+v 0.0022838 0.00293108 -0.010253
+v 0.0022791 0.0039081 -0.0102634
+v 0.00168883 0.00419057 -0.01107
+v 0.00249896 0.00377459 -0.00925
+v 0.00249896 0.00283094 -0.00925
+v -0.00170827 0.00324768 -0.0074478
+v -0.0022838 0.00293108 -0.008247
+v -0.0022791 0.0039081 -0.0082366
+v -0.00168883 0.00419057 -0.00743008
+v -0.00249896 0.00377459 -0.00925
+v -0.00249896 0.00283094 -0.00925
+v 0.0022958 0.005204 -0.0102255
+v 0.0017351 0.00534529 -0.0110262
+v 0.00231247 0.0065 -0.0101876
+v 0.00178137 0.0065 -0.0109824
+v 0.00249896 0.0051373 -0.00925
+v 0.00249896 0.0065 -0.00925
+v -0.0022958 0.005204 -0.0082745
+v -0.0017351 0.00534529 -0.0074738
+v -0.00231247 0.0065 -0.0083124
+v -0.00178137 0.0065 -0.00751759
+v -0.00249896 0.0051373 -0.00925
+v -0.00249896 0.0065 -0.00925
+v 0.00170827 0.00324768 -0.0074478
+v 0.00168883 0.00419057 -0.00743008
+v 0.0022791 0.0039081 -0.0082366
+v 0.0022838 0.00293108 -0.008247
+v -0.00170827 0.00324768 -0.0110522
+v -0.00168883 0.00419057 -0.01107
+v -0.0022791 0.0039081 -0.0102634
+v -0.0022838 0.00293108 -0.010253
+v 0.00107038 0.00334614 -0.0114768
+v 4.8963e-05 0.0034024 -0.0117
+v 0.00104896 0.00438748 -0.0114866
+v 4.8963e-05 0.0045 -0.0117
+v 0.00104896 0.0053875 -0.0114866
+v 4.8963e-05 0.0055 -0.0117
+v 0.00104896 0.0065 -0.0114866
+v 4.8963e-05 0.0065 -0.0116999
+v 0.00107038 0.00334614 -0.0070232
+v 4.8963e-05 0.0034024 -0.0068001
+v 0.00104896 0.00438748 -0.00701337
+v 4.8963e-05 0.0045 -0.0068
+v 4.8963e-05 0.0055 -0.0068001
+v 0.00104896 0.0053875 -0.0070134
+v 4.8963e-05 0.0065 -0.0068001
+v 0.00104896 0.0065 -0.00701337
+v 0.0017351 0.00534529 -0.0074738
+v 0.00178137 0.0065 -0.00751759
+v -0.00107038 0.00334614 -0.0114768
+v -0.00104896 0.00438748 -0.0114866
+v -0.00104896 0.0053875 -0.0114866
+v -0.00104896 0.0065 -0.0114866
+v -0.0017351 0.00534529 -0.0110262
+v -0.00178137 0.0065 -0.0109824
+v -0.00107038 0.00334614 -0.0070232
+v -0.00104896 0.00438748 -0.00701337
+v -0.00104896 0.0053875 -0.0070134
+v -0.00104896 0.0065 -0.00701337
+v 0.0022958 0.005204 -0.0082745
+v 0.00231247 0.0065 -0.0083124
+v -0.0022958 0.005204 -0.0102255
+v -0.00231247 0.0065 -0.0101876
+v 0.0032389 0.0065 -0.0146142
+v 0.0043224 0.0065 -0.01375
+v 0.0032389 0.0065 -0.0038858
+v 0.0043224 0.0065 -0.00475
+v -0.0032389 0.0065 -0.0146142
+v -0.0043224 0.0065 -0.01375
+v -0.0032389 0.0065 -0.0038858
+v -0.0043224 0.0065 -0.00475
+v 4.8963e-05 0.0065 -0.012725
+v 0.0011229 0.0065 -0.0126915
+v 0.00111594 0.0065 -0.01375
+v 4.8963e-05 0.0065 -0.01375
+v 0.00219685 0.0065 -0.012658
+v 0.00218293 0.0065 -0.01375
+v 0.00325477 0.0065 -0.012625
+v 0.003234 0.0065 -0.01375
+v 0.00327555 0.0065 -0.0115
+v 0.0032963 0.0065 -0.010375
+v 0.0033171 0.0065 -0.00925
+v 0.0047266 0.0065 -0.0126096
+v 0.00497879 0.0065 -0.0114933
+v 0.005126 0.0065 -0.010382
+v 0.005183 0.0065 -0.00925
+v 4.8963e-05 0.0065 -0.00577507
+v 4.8963e-05 0.0065 -0.00475
+v 0.00111594 0.0065 -0.00475
+v 0.0011229 0.0065 -0.0058085
+v 0.00218293 0.0065 -0.00475
+v 0.00219685 0.0065 -0.005842
+v 0.003234 0.0065 -0.00475
+v 0.00325477 0.0065 -0.005875
+v 0.00327555 0.0065 -0.007
+v 0.0032963 0.0065 -0.008125
+v 0.0047266 0.0065 -0.0058904
+v 0.00497879 0.0065 -0.00700669
+v 0.005126 0.0065 -0.008118
+v -0.00111594 0.0065 -0.01375
+v -0.0011229 0.0065 -0.0126915
+v -0.00218293 0.0065 -0.01375
+v -0.00219685 0.0065 -0.012658
+v -0.003234 0.0065 -0.01375
+v -0.00325477 0.0065 -0.012625
+v -0.00327555 0.0065 -0.0115
+v -0.0032963 0.0065 -0.010375
+v -0.0033171 0.0065 -0.00925
+v -0.0047266 0.0065 -0.0126096
+v -0.00497879 0.0065 -0.0114933
+v -0.005126 0.0065 -0.010382
+v -0.005183 0.0065 -0.00925
+v -0.0011229 0.0065 -0.0058085
+v -0.00111594 0.0065 -0.00475
+v -0.00219685 0.0065 -0.005842
+v -0.00218293 0.0065 -0.00475
+v -0.00325477 0.0065 -0.005875
+v -0.003234 0.0065 -0.00475
+v -0.00327555 0.0065 -0.007
+v -0.0032963 0.0065 -0.008125
+v -0.0047266 0.0065 -0.0058904
+v -0.00497879 0.0065 -0.00700669
+v -0.005126 0.0065 -0.008118
+v 0.00111594 0.0065 -0.015
+v 4.8963e-05 0.0065 -0.015
+v 0.00218293 0.0065 -0.015
+v 4.8963e-05 0.0065 -0.0035
+v 0.00111594 0.0065 -0.0035
+v 0.00218293 0.0065 -0.0035
+v -0.00111594 0.0065 -0.015
+v -0.00218293 0.0065 -0.015
+v -0.00111594 0.0065 -0.0035
+v -0.00218293 0.0065 -0.0035
+v 0.00104896 0.0113617 -0.0161782
+v 4.8963e-05 0.0113617 -0.01625
+v 0.0021601 0.0113617 -0.015924
+v 0.0032438 0.0113617 -0.0154784
+v 0.0043334 0.0113617 -0.0147856
+v 0.0054108 0.0113617 -0.01375
+v 0.006682 0.0113617 -0.0114866
+v 0.0061985 0.0113617 -0.0125942
+v 0.0069557 0.0113617 -0.010389
+v 0.007049 0.0113617 -0.00925
+v 0.00104896 0.0113617 -0.00232179
+v 4.8963e-05 0.0113617 -0.00225
+v 0.0021601 0.0113617 -0.00257594
+v 0.0032438 0.0113617 -0.0030216
+v 0.0043334 0.0113617 -0.00371436
+v 0.0054108 0.0113617 -0.00475
+v 0.0061985 0.0113617 -0.0059058
+v 0.006682 0.0113617 -0.00701337
+v 0.0069557 0.0113617 -0.0081109
+v -0.00104896 0.0113617 -0.0161782
+v -0.0021601 0.0113617 -0.015924
+v -0.0032438 0.0113617 -0.0154784
+v -0.0043334 0.0113617 -0.0147856
+v -0.0054108 0.0113617 -0.01375
+v -0.0061985 0.0113617 -0.0125942
+v -0.006682 0.0113617 -0.0114866
+v -0.0069557 0.0113617 -0.010389
+v -0.007049 0.0113617 -0.00925
+v -0.00104896 0.0113617 -0.00232179
+v -0.0021601 0.0113617 -0.00257594
+v -0.0032438 0.0113617 -0.0030216
+v -0.0043334 0.0113617 -0.00371436
+v -0.0054108 0.0113617 -0.00475
+v -0.0061985 0.0113617 -0.0059058
+v -0.006682 0.0113617 -0.00701337
+v -0.0069557 0.0113617 -0.0081109
+v 0.00104896 0.0141463 -0.0161782
+v 4.8963e-05 0.0141463 -0.01625
+v 0.0021601 0.0141463 -0.015924
+v 0.0032438 0.0141463 -0.0154784
+v 0.0043334 0.0141463 -0.0147856
+v 0.0054108 0.0141463 -0.01375
+v 0.006682 0.0141463 -0.0114866
+v 0.0061985 0.0141463 -0.0125942
+v 0.0069557 0.0141463 -0.010389
+v 0.007049 0.0141463 -0.00925
+v 4.8963e-05 0.0141463 -0.00225
+v 0.00104896 0.0141463 -0.00232179
+v 0.0021601 0.0141463 -0.00257594
+v 0.0032438 0.0141463 -0.0030216
+v 0.0043334 0.0141463 -0.00371436
+v 0.0054108 0.0141463 -0.00475
+v 0.0061985 0.0141463 -0.0059058
+v 0.006682 0.0141463 -0.00701337
+v 0.0069557 0.0141463 -0.0081109
+v -0.00104896 0.0141463 -0.0161782
+v -0.0021601 0.0141463 -0.015924
+v -0.0032438 0.0141463 -0.0154784
+v -0.0043334 0.0141463 -0.0147856
+v -0.0054108 0.0141463 -0.01375
+v -0.0061985 0.0141463 -0.0125942
+v -0.006682 0.0141463 -0.0114866
+v -0.0069557 0.0141463 -0.010389
+v -0.007049 0.0141463 -0.00925
+v -0.00104896 0.0141463 -0.00232179
+v -0.0021601 0.0141463 -0.00257594
+v -0.0032438 0.0141463 -0.0030216
+v -0.0043334 0.0141463 -0.00371436
+v -0.0054108 0.0141463 -0.00475
+v -0.006682 0.0141463 -0.00701337
+v -0.0061985 0.0141463 -0.0059058
+v -0.0069557 0.0141463 -0.0081109
+v 0.00104896 0.0169309 -0.0161782
+v 4.8963e-05 0.0169309 -0.01625
+v 0.0021601 0.0169309 -0.015924
+v 0.0032438 0.0169309 -0.0154784
+v 0.0043334 0.0169309 -0.0147856
+v 0.0054108 0.0169309 -0.01375
+v 0.006682 0.0169309 -0.0114866
+v 0.0061985 0.0169309 -0.0125942
+v 0.0069557 0.0169309 -0.010389
+v 0.007049 0.0169309 -0.00925
+v 4.8963e-05 0.0169309 -0.00225
+v 0.00104896 0.0169309 -0.00232179
+v 0.0021601 0.0169309 -0.00257594
+v 0.0032438 0.0169309 -0.0030216
+v 0.0043334 0.0169309 -0.00371436
+v 0.0054108 0.0169309 -0.00475
+v 0.0061985 0.0169309 -0.0059058
+v 0.006682 0.0169309 -0.00701337
+v 0.0069557 0.0169309 -0.0081109
+v -0.00104896 0.0169309 -0.0161782
+v -0.0021601 0.0169309 -0.015924
+v -0.0032438 0.0169309 -0.0154784
+v -0.0043334 0.0169309 -0.0147856
+v -0.0054108 0.0169309 -0.01375
+v -0.0061985 0.0169309 -0.0125942
+v -0.006682 0.0169309 -0.0114866
+v -0.0069557 0.0169309 -0.010389
+v -0.007049 0.0169309 -0.00925
+v -0.00104896 0.0169309 -0.00232179
+v -0.0021601 0.0169309 -0.00257594
+v -0.0032438 0.0169309 -0.0030216
+v -0.0043334 0.0169309 -0.00371436
+v -0.0054108 0.0169309 -0.00475
+v -0.006682 0.0169309 -0.00701337
+v -0.0061985 0.0169309 -0.0059058
+v -0.0069557 0.0169309 -0.0081109
+v 0.00104896 0.0197154 -0.0161782
+v 4.8963e-05 0.0197154 -0.01625
+v 0.0021601 0.0197154 -0.015924
+v 0.0032438 0.0197154 -0.0154784
+v 0.0043334 0.0197154 -0.0147856
+v 0.0054108 0.0197154 -0.01375
+v 0.006682 0.0197154 -0.0114866
+v 0.0061985 0.0197154 -0.0125942
+v 0.0069557 0.0197154 -0.010389
+v 0.007049 0.0197154 -0.00925
+v 4.8963e-05 0.0197154 -0.00225
+v 0.00104896 0.0197154 -0.00232179
+v 0.0021601 0.0197154 -0.00257594
+v 0.0032438 0.0197154 -0.0030216
+v 0.0043334 0.0197154 -0.00371436
+v 0.0054108 0.0197154 -0.00475
+v 0.0061985 0.0197154 -0.0059058
+v 0.006682 0.0197154 -0.00701337
+v 0.0069557 0.0197154 -0.0081109
+v -0.00104896 0.0197154 -0.0161782
+v -0.0021601 0.0197154 -0.015924
+v -0.0032438 0.0197154 -0.0154784
+v -0.0043334 0.0197154 -0.0147856
+v -0.0054108 0.0197154 -0.01375
+v -0.0061985 0.0197154 -0.0125942
+v -0.006682 0.0197154 -0.0114866
+v -0.0069557 0.0197154 -0.010389
+v -0.007049 0.0197154 -0.00925
+v -0.00104896 0.0197154 -0.00232179
+v -0.0021601 0.0197154 -0.00257594
+v -0.0032438 0.0197154 -0.0030216
+v -0.0043334 0.0197154 -0.00371436
+v -0.0054108 0.0197154 -0.00475
+v -0.006682 0.0197154 -0.00701337
+v -0.0061985 0.0197154 -0.0059058
+v -0.0069557 0.0197154 -0.0081109
+g patch1
+f 1 2 3
+f 4 5 6
+f 7 8 9
+f 10 11 12
+f 13 11 14
+f 15 12 16
+f 17 18 19
+f 20 21 22
+f 23 21 24
+f 25 20 26
+f 27 28 29
+f 30 31 32
+f 33 34 35
+f 36 37 38
+f 39 37 40
+f 41 36 42
+f 43 44 45
+f 46 47 48
+f 49 47 50
+f 51 48 52
+f 53 54 55
+f 55 56 53
+f 57 53 56
+f 56 58 57
+f 57 58 59
+f 59 60 57
+f 60 59 61
+f 61 62 60
+f 63 60 62
+f 62 64 63
+f 60 63 65
+f 65 57 60
+f 53 57 65
+f 65 66 53
+f 66 67 54
+f 54 53 66
+f 68 69 70
+f 70 71 68
+f 72 73 74
+f 74 75 72
+f 76 77 73
+f 73 72 76
+f 76 78 79
+f 79 77 76
+f 78 62 61
+f 61 79 78
+f 80 64 62
+f 62 78 80
+f 78 76 81
+f 81 80 78
+f 72 82 81
+f 81 76 72
+f 82 72 75
+f 75 83 82
+f 84 85 86
+f 86 87 84
+f 88 89 84
+f 84 87 88
+f 90 91 11
+f 11 92 90
+f 91 90 93
+f 93 94 91
+f 95 96 97
+f 97 14 95
+f 95 91 94
+f 94 96 95
+f 14 11 91
+f 91 95 14
+f 98 99 100
+f 100 101 98
+f 98 102 103
+f 103 99 98
+f 98 101 104
+f 104 102 98
+f 105 106 103
+f 103 102 105
+f 106 105 107
+f 107 108 106
+f 109 110 104
+f 104 111 109
+f 110 105 102
+f 102 104 110
+f 110 112 107
+f 107 105 110
+f 109 111 113
+f 113 114 109
+f 114 112 110
+f 110 109 114
+f 114 113 115
+f 115 112 114
+f 7 101 100
+f 100 116 7
+f 7 9 104
+f 104 101 7
+f 117 118 111
+f 111 104 117
+f 15 16 118
+f 118 117 15
+f 117 104 9
+f 9 15 117
+f 12 15 9
+f 9 10 12
+f 92 11 10
+f 10 119 92
+f 16 12 11
+f 11 13 16
+f 120 97 115
+f 115 113 120
+f 14 97 120
+f 120 13 14
+f 118 120 113
+f 113 111 118
+f 16 13 120
+f 120 118 16
+f 85 84 121
+f 121 116 85
+f 89 122 121
+f 121 84 89
+f 8 7 116
+f 116 121 8
+f 122 119 8
+f 8 121 122
+f 10 9 8
+f 8 119 10
+f 68 123 124
+f 124 69 68
+f 125 126 127
+f 127 128 125
+f 128 127 129
+f 129 130 128
+f 131 125 128
+f 128 132 131
+f 132 128 130
+f 130 133 132
+f 134 131 132
+f 132 135 134
+f 135 132 133
+f 133 136 135
+f 137 134 135
+f 135 138 137
+f 138 135 136
+f 136 139 138
+f 140 137 138
+f 138 141 140
+f 141 138 139
+f 139 142 141
+f 141 94 93
+f 93 140 141
+f 142 96 94
+f 94 141 142
+f 143 144 127
+f 127 126 143
+f 144 145 129
+f 129 127 144
+f 146 147 144
+f 144 143 146
+f 147 148 145
+f 145 144 147
+f 149 150 147
+f 147 146 149
+f 150 151 148
+f 148 147 150
+f 152 153 150
+f 150 149 152
+f 153 154 151
+f 151 150 153
+f 155 156 153
+f 153 152 155
+f 156 157 154
+f 154 153 156
+f 156 155 158
+f 158 159 156
+f 157 156 159
+f 159 160 157
+f 161 87 86
+f 86 162 161
+f 88 87 161
+f 161 163 88
+f 164 165 21
+f 21 166 164
+f 166 159 158
+f 158 164 166
+f 167 23 168
+f 168 160 167
+f 167 160 159
+f 159 166 167
+f 23 167 166
+f 166 21 23
+f 169 170 171
+f 171 172 169
+f 169 172 173
+f 173 174 169
+f 169 174 175
+f 175 170 169
+f 173 176 177
+f 177 174 173
+f 178 179 175
+f 175 180 178
+f 180 175 174
+f 174 177 180
+f 178 181 182
+f 182 179 178
+f 181 178 180
+f 180 183 181
+f 181 183 184
+f 184 182 181
+f 19 185 171
+f 171 170 19
+f 19 170 175
+f 175 17 19
+f 186 175 179
+f 179 187 186
+f 26 186 187
+f 187 25 26
+f 186 26 17
+f 17 175 186
+f 20 22 17
+f 17 26 20
+f 165 188 22
+f 22 21 165
+f 25 24 21
+f 21 20 25
+f 184 168 189
+f 189 182 184
+f 23 24 189
+f 189 168 23
+f 187 179 182
+f 182 189 187
+f 25 187 189
+f 189 24 25
+f 162 185 190
+f 190 161 162
+f 163 161 190
+f 190 191 163
+f 18 190 185
+f 185 19 18
+f 191 190 18
+f 18 188 191
+f 22 188 18
+f 18 17 22
+f 192 193 55
+f 55 54 192
+f 194 195 193
+f 193 192 194
+f 194 196 197
+f 197 195 194
+f 196 198 199
+f 199 197 196
+f 200 201 198
+f 198 196 200
+f 196 194 202
+f 202 200 196
+f 192 203 202
+f 202 194 192
+f 203 192 54
+f 54 67 203
+f 204 205 206
+f 206 207 204
+f 208 75 74
+f 74 209 208
+f 210 208 209
+f 209 211 210
+f 210 211 212
+f 212 213 210
+f 213 212 199
+f 199 198 213
+f 214 213 198
+f 198 201 214
+f 213 214 215
+f 215 210 213
+f 208 210 215
+f 215 216 208
+f 216 83 75
+f 75 208 216
+f 217 218 219
+f 219 220 217
+f 221 218 217
+f 217 222 221
+f 223 224 37
+f 37 225 223
+f 225 226 227
+f 227 223 225
+f 228 39 229
+f 229 230 228
+f 228 230 226
+f 226 225 228
+f 39 228 225
+f 225 37 39
+f 231 232 233
+f 233 234 231
+f 231 234 235
+f 235 236 231
+f 231 236 237
+f 237 232 231
+f 238 236 235
+f 235 239 238
+f 239 240 241
+f 241 238 239
+f 242 243 237
+f 237 244 242
+f 244 237 236
+f 236 238 244
+f 244 238 241
+f 241 245 244
+f 242 246 247
+f 247 243 242
+f 246 242 244
+f 244 245 246
+f 246 245 248
+f 248 247 246
+f 35 249 233
+f 233 232 35
+f 35 232 237
+f 237 33 35
+f 250 237 243
+f 243 251 250
+f 42 250 251
+f 251 41 42
+f 250 42 33
+f 33 237 250
+f 36 38 33
+f 33 42 36
+f 224 252 38
+f 38 37 224
+f 41 40 37
+f 37 36 41
+f 253 247 248
+f 248 229 253
+f 39 40 253
+f 253 229 39
+f 251 243 247
+f 247 253 251
+f 41 251 253
+f 253 40 41
+f 220 249 254
+f 254 217 220
+f 222 217 254
+f 254 255 222
+f 34 254 249
+f 249 35 34
+f 255 254 34
+f 34 252 255
+f 38 252 34
+f 34 33 38
+f 204 207 256
+f 256 257 204
+f 258 259 260
+f 260 261 258
+f 259 262 263
+f 263 260 259
+f 264 265 259
+f 259 258 264
+f 265 266 262
+f 262 259 265
+f 267 268 265
+f 265 264 267
+f 268 269 266
+f 266 265 268
+f 270 271 268
+f 268 267 270
+f 271 272 269
+f 269 268 271
+f 273 274 271
+f 271 270 273
+f 274 275 272
+f 272 271 274
+f 274 273 227
+f 227 226 274
+f 275 274 226
+f 226 230 275
+f 276 261 260
+f 260 277 276
+f 277 260 263
+f 263 278 277
+f 279 276 277
+f 277 280 279
+f 280 277 278
+f 278 281 280
+f 282 279 280
+f 280 283 282
+f 283 280 281
+f 281 284 283
+f 285 282 283
+f 283 286 285
+f 286 283 284
+f 284 287 286
+f 288 285 286
+f 286 289 288
+f 289 286 287
+f 287 290 289
+f 289 291 292
+f 292 288 289
+f 290 293 291
+f 291 289 290
+f 294 295 219
+f 219 218 294
+f 221 296 294
+f 294 218 221
+f 297 298 47
+f 47 299 297
+f 298 297 292
+f 292 291 298
+f 300 293 301
+f 301 50 300
+f 300 298 291
+f 291 293 300
+f 50 47 298
+f 298 300 50
+f 302 303 304
+f 304 305 302
+f 302 306 307
+f 307 303 302
+f 302 305 308
+f 308 306 302
+f 307 306 309
+f 309 310 307
+f 311 312 308
+f 308 313 311
+f 312 309 306
+f 306 308 312
+f 311 313 314
+f 314 315 311
+f 315 316 312
+f 312 311 315
+f 315 314 317
+f 317 316 315
+f 43 305 304
+f 304 318 43
+f 43 45 308
+f 308 305 43
+f 319 320 313
+f 313 308 319
+f 51 52 320
+f 320 319 51
+f 319 308 45
+f 45 51 319
+f 48 51 45
+f 45 46 48
+f 299 47 46
+f 46 321 299
+f 52 48 47
+f 47 49 52
+f 317 314 322
+f 322 301 317
+f 50 301 322
+f 322 49 50
+f 320 322 314
+f 314 313 320
+f 52 49 322
+f 322 320 52
+f 295 294 323
+f 323 318 295
+f 296 324 323
+f 323 294 296
+f 44 43 318
+f 318 323 44
+f 324 321 44
+f 44 323 324
+f 46 45 44
+f 44 321 46
+f 325 326 1
+f 327 328 6
+f 329 330 331
+f 332 331 333
+f 334 335 336
+f 336 337 338
+f 177 183 180
+f 339 340 341
+f 342 343 341
+f 344 345 346
+f 347 348 346
+f 349 350 29
+f 351 352 30
+f 353 354 355
+f 355 356 357
+f 358 359 360
+f 361 360 362
+f 316 309 312
+f 363 364 365
+f 366 367 365
+f 368 369 370
+f 371 372 370
+f 58 2 1
+f 1 326 58
+f 373 374 100
+f 100 99 373
+f 374 375 116
+f 116 100 374
+f 376 377 375
+f 375 374 376
+f 378 376 374
+f 374 373 378
+f 375 379 85
+f 85 116 375
+f 379 380 86
+f 86 85 379
+f 377 381 379
+f 379 375 377
+f 381 382 380
+f 380 379 381
+f 383 384 377
+f 377 376 383
+f 383 385 386
+f 386 384 383
+f 387 383 376
+f 376 378 387
+f 388 385 383
+f 383 387 388
+f 384 389 381
+f 381 377 384
+f 384 386 390
+f 390 389 384
+f 389 391 382
+f 382 381 389
+f 392 391 389
+f 389 390 392
+f 393 394 395
+f 395 396 393
+f 394 397 398
+f 398 395 394
+f 396 395 399
+f 399 400 396
+f 398 401 399
+f 399 395 398
+f 400 399 402
+f 402 403 400
+f 402 399 401
+f 401 404 402
+f 405 406 407
+f 407 408 405
+f 406 405 409
+f 409 410 406
+f 409 403 411
+f 411 410 409
+f 411 403 402
+f 402 412 411
+f 412 402 404
+f 404 413 412
+f 406 108 414
+f 414 407 406
+f 108 406 410
+f 410 415 108
+f 415 410 411
+f 411 416 415
+f 416 411 412
+f 412 417 416
+f 417 412 413
+f 413 418 417
+f 77 327 6
+f 6 5 77
+f 419 420 421
+f 421 422 419
+f 422 421 423
+f 423 424 422
+f 420 425 426
+f 426 421 420
+f 423 421 426
+f 426 427 423
+f 425 428 429
+f 429 426 425
+f 429 430 427
+f 427 426 429
+f 431 408 407
+f 407 432 431
+f 432 433 434
+f 434 431 432
+f 434 433 435
+f 435 428 434
+f 435 436 429
+f 429 428 435
+f 436 437 430
+f 430 429 436
+f 432 407 414
+f 414 438 432
+f 438 439 433
+f 433 432 438
+f 439 440 435
+f 435 433 439
+f 440 441 436
+f 436 435 440
+f 441 442 437
+f 437 436 441
+f 443 444 445
+f 445 446 443
+f 444 447 448
+f 448 445 444
+f 446 445 449
+f 449 450 446
+f 445 448 451
+f 451 449 445
+f 450 449 452
+f 452 453 450
+f 449 451 454
+f 454 452 449
+f 453 452 455
+f 455 456 453
+f 452 454 457
+f 457 455 452
+f 456 455 458
+f 458 459 456
+f 455 457 460
+f 460 458 455
+f 461 462 463
+f 463 464 461
+f 462 465 466
+f 466 463 462
+f 459 458 462
+f 462 461 459
+f 458 460 465
+f 465 462 458
+f 467 464 463
+f 463 468 467
+f 468 463 466
+f 466 469 468
+f 470 467 468
+f 468 471 470
+f 471 468 469
+f 469 472 471
+f 473 474 475
+f 475 476 473
+f 477 473 476
+f 476 478 477
+f 476 475 479
+f 479 480 476
+f 478 476 480
+f 480 481 478
+f 482 480 479
+f 479 483 482
+f 484 481 480
+f 480 482 484
+f 485 481 484
+f 484 486 485
+f 487 485 486
+f 486 488 487
+f 482 489 490
+f 490 484 482
+f 490 489 491
+f 491 492 490
+f 483 332 489
+f 489 482 483
+f 333 491 489
+f 489 332 333
+f 486 484 490
+f 490 493 486
+f 493 490 492
+f 492 494 493
+f 493 495 488
+f 488 486 493
+f 495 493 494
+f 494 496 495
+f 474 497 498
+f 498 475 474
+f 497 499 500
+f 500 498 497
+f 501 479 475
+f 475 498 501
+f 502 501 498
+f 498 500 502
+f 479 501 329
+f 329 483 479
+f 501 502 330
+f 330 329 501
+f 332 483 329
+f 329 331 332
+f 503 504 505
+f 505 506 503
+f 504 507 508
+f 508 505 504
+f 509 510 504
+f 504 503 509
+f 510 511 507
+f 507 504 510
+f 509 512 513
+f 513 510 509
+f 510 513 514
+f 514 511 510
+f 512 515 516
+f 516 513 512
+f 513 516 517
+f 517 514 513
+f 515 518 519
+f 519 516 515
+f 520 517 516
+f 516 519 520
+f 521 522 523
+f 523 524 521
+f 524 523 525
+f 525 526 524
+f 518 521 524
+f 524 519 518
+f 519 524 526
+f 526 520 519
+f 522 527 528
+f 528 523 522
+f 523 528 529
+f 529 525 523
+f 527 530 531
+f 531 528 527
+f 528 531 532
+f 532 529 528
+f 533 68 71
+f 71 534 533
+f 71 70 535
+f 535 536 71
+f 534 71 536
+f 536 537 534
+f 538 539 540
+f 540 541 538
+f 541 537 542
+f 542 538 541
+f 542 537 536
+f 536 543 542
+f 543 536 535
+f 535 544 543
+f 545 543 544
+f 544 546 545
+f 543 545 547
+f 547 542 543
+f 538 542 547
+f 547 548 538
+f 548 549 539
+f 539 538 548
+f 550 172 171
+f 171 551 550
+f 551 171 185
+f 185 552 551
+f 553 551 552
+f 552 554 553
+f 555 550 551
+f 551 553 555
+f 552 185 162
+f 162 556 552
+f 556 162 86
+f 86 380 556
+f 554 552 556
+f 556 557 554
+f 557 556 380
+f 380 382 557
+f 558 553 554
+f 554 559 558
+f 558 559 560
+f 560 561 558
+f 562 555 553
+f 553 558 562
+f 563 562 558
+f 558 561 563
+f 559 554 557
+f 557 564 559
+f 559 564 565
+f 565 560 559
+f 564 557 382
+f 382 391 564
+f 392 565 564
+f 564 391 392
+f 566 567 568
+f 568 569 566
+f 568 567 570
+f 570 571 568
+f 566 342 572
+f 572 567 566
+f 570 567 572
+f 572 573 570
+f 342 341 574
+f 574 572 342
+f 574 575 573
+f 573 572 574
+f 576 577 578
+f 578 579 576
+f 579 580 340
+f 340 576 579
+f 580 581 341
+f 341 340 580
+f 581 582 574
+f 574 341 581
+f 582 583 575
+f 575 574 582
+f 579 578 584
+f 584 176 579
+f 176 585 580
+f 580 579 176
+f 585 586 581
+f 581 580 585
+f 582 581 586
+f 586 587 582
+f 587 588 583
+f 583 582 587
+f 589 590 591
+f 591 592 589
+f 591 593 594
+f 594 592 591
+f 589 592 595
+f 595 348 589
+f 594 596 595
+f 595 592 594
+f 348 595 597
+f 597 346 348
+f 597 595 596
+f 596 598 597
+f 599 600 578
+f 578 577 599
+f 600 599 344
+f 344 601 600
+f 601 344 346
+f 346 602 601
+f 602 346 597
+f 597 603 602
+f 603 597 598
+f 598 604 603
+f 600 605 584
+f 584 578 600
+f 605 600 601
+f 601 606 605
+f 606 601 602
+f 602 607 606
+f 603 608 607
+f 607 602 603
+f 608 603 604
+f 604 609 608
+f 610 611 612
+f 612 613 610
+f 613 612 614
+f 614 615 613
+f 611 616 617
+f 617 612 611
+f 612 617 618
+f 618 614 612
+f 616 619 620
+f 620 617 616
+f 617 620 621
+f 621 618 617
+f 619 622 623
+f 623 620 619
+f 620 623 624
+f 624 621 620
+f 622 625 626
+f 626 623 622
+f 623 626 627
+f 627 624 623
+f 628 629 630
+f 630 631 628
+f 631 630 632
+f 632 633 631
+f 625 628 631
+f 631 626 625
+f 626 631 633
+f 633 627 626
+f 634 635 630
+f 630 629 634
+f 635 636 632
+f 632 630 635
+f 470 471 635
+f 635 634 470
+f 471 472 636
+f 636 635 471
+f 637 638 639
+f 639 640 637
+f 641 642 638
+f 638 637 641
+f 638 643 644
+f 644 639 638
+f 642 645 643
+f 643 638 642
+f 646 647 644
+f 644 643 646
+f 648 646 643
+f 643 645 648
+f 649 650 648
+f 648 645 649
+f 487 488 650
+f 650 649 487
+f 646 648 651
+f 651 652 646
+f 651 653 654
+f 654 652 651
+f 647 646 652
+f 652 337 647
+f 338 337 652
+f 652 654 338
+f 650 655 651
+f 651 648 650
+f 655 656 653
+f 653 651 655
+f 655 650 488
+f 488 495 655
+f 495 496 656
+f 656 655 495
+f 640 639 657
+f 657 658 640
+f 658 657 659
+f 659 660 658
+f 661 657 639
+f 639 644 661
+f 662 659 657
+f 657 661 662
+f 644 647 335
+f 335 661 644
+f 661 335 334
+f 334 662 661
+f 337 336 335
+f 335 647 337
+f 663 664 665
+f 665 666 663
+f 666 665 667
+f 667 668 666
+f 669 663 666
+f 666 670 669
+f 670 666 668
+f 668 671 670
+f 669 670 672
+f 672 673 669
+f 670 671 674
+f 674 672 670
+f 673 672 675
+f 675 676 673
+f 672 674 677
+f 677 675 672
+f 676 675 678
+f 678 679 676
+f 680 678 675
+f 675 677 680
+f 681 682 683
+f 683 684 681
+f 682 685 686
+f 686 683 682
+f 679 678 682
+f 682 681 679
+f 678 680 685
+f 685 682 678
+f 684 683 687
+f 687 688 684
+f 683 686 689
+f 689 687 683
+f 688 687 531
+f 531 530 688
+f 687 689 532
+f 532 531 687
+f 533 690 123
+f 123 68 533
+f 123 691 692
+f 692 124 123
+f 690 693 691
+f 691 123 690
+f 694 695 696
+f 696 697 694
+f 695 694 691
+f 691 693 695
+f 694 698 692
+f 692 691 694
+f 698 694 697
+f 697 699 698
+f 700 701 702
+f 702 703 700
+f 704 705 701
+f 701 700 704
+f 706 707 704
+f 704 700 706
+f 706 700 703
+f 703 708 706
+f 339 705 704
+f 704 709 339
+f 340 339 709
+f 709 576 340
+f 709 704 707
+f 707 710 709
+f 576 709 710
+f 710 577 576
+f 711 712 702
+f 702 701 711
+f 566 569 712
+f 712 711 566
+f 343 711 701
+f 701 705 343
+f 342 566 711
+f 711 343 342
+f 705 339 341
+f 341 343 705
+f 713 714 715
+f 715 716 713
+f 717 713 716
+f 716 718 717
+f 707 706 713
+f 713 717 707
+f 708 714 713
+f 713 706 708
+f 345 719 717
+f 717 718 345
+f 344 599 719
+f 719 345 344
+f 719 710 707
+f 707 717 719
+f 599 577 710
+f 710 719 599
+f 720 716 715
+f 715 721 720
+f 589 720 721
+f 721 590 589
+f 347 718 716
+f 716 720 347
+f 348 347 720
+f 720 589 348
+f 718 347 346
+f 346 345 718
+f 195 349 29
+f 29 28 195
+f 722 234 233
+f 233 723 722
+f 723 233 249
+f 249 724 723
+f 725 723 724
+f 724 726 725
+f 727 722 723
+f 723 725 727
+f 724 249 220
+f 220 728 724
+f 728 220 219
+f 219 729 728
+f 726 724 728
+f 728 730 726
+f 730 728 729
+f 729 731 730
+f 732 725 726
+f 726 733 732
+f 732 733 734
+f 734 735 732
+f 736 727 725
+f 725 732 736
+f 737 736 732
+f 732 735 737
+f 733 726 730
+f 730 738 733
+f 733 738 739
+f 739 734 733
+f 738 730 731
+f 731 740 738
+f 741 739 738
+f 738 740 741
+f 393 742 743
+f 743 394 393
+f 394 743 744
+f 744 397 394
+f 742 745 746
+f 746 743 742
+f 744 743 746
+f 746 747 744
+f 745 748 749
+f 749 746 745
+f 749 750 747
+f 747 746 749
+f 751 752 753
+f 753 754 751
+f 754 755 756
+f 756 751 754
+f 756 755 757
+f 757 748 756
+f 757 758 749
+f 749 748 757
+f 758 759 750
+f 750 749 758
+f 754 753 760
+f 760 240 754
+f 240 761 755
+f 755 754 240
+f 761 762 757
+f 757 755 761
+f 762 763 758
+f 758 757 762
+f 763 764 759
+f 759 758 763
+f 211 31 30
+f 30 352 211
+f 419 422 765
+f 765 766 419
+f 422 424 767
+f 767 765 422
+f 766 765 768
+f 768 769 766
+f 767 770 768
+f 768 765 767
+f 769 768 771
+f 771 772 769
+f 771 768 770
+f 770 773 771
+f 774 775 753
+f 753 752 774
+f 775 774 776
+f 776 777 775
+f 776 772 778
+f 778 777 776
+f 778 772 771
+f 771 779 778
+f 779 771 773
+f 773 780 779
+f 775 781 760
+f 760 753 775
+f 781 775 777
+f 777 782 781
+f 782 777 778
+f 778 783 782
+f 783 778 779
+f 779 784 783
+f 784 779 780
+f 780 785 784
+f 443 786 787
+f 787 444 443
+f 444 787 788
+f 788 447 444
+f 786 789 790
+f 790 787 786
+f 787 790 791
+f 791 788 787
+f 789 792 793
+f 793 790 789
+f 790 793 794
+f 794 791 790
+f 792 795 796
+f 796 793 792
+f 793 796 797
+f 797 794 793
+f 795 798 799
+f 799 796 795
+f 796 799 800
+f 800 797 796
+f 801 802 803
+f 803 804 801
+f 804 803 805
+f 805 806 804
+f 798 801 804
+f 804 799 798
+f 799 804 806
+f 806 800 799
+f 807 808 803
+f 803 802 807
+f 808 809 805
+f 805 803 808
+f 810 811 808
+f 808 807 810
+f 811 812 809
+f 809 808 811
+f 473 813 814
+f 814 474 473
+f 477 815 813
+f 813 473 477
+f 813 816 817
+f 817 814 813
+f 815 818 816
+f 816 813 815
+f 819 820 817
+f 817 816 819
+f 821 819 816
+f 816 818 821
+f 822 823 821
+f 821 818 822
+f 824 825 823
+f 823 822 824
+f 819 821 826
+f 826 827 819
+f 826 828 829
+f 829 827 826
+f 820 819 827
+f 827 356 820
+f 357 356 827
+f 827 829 357
+f 823 830 826
+f 826 821 823
+f 830 831 828
+f 828 826 830
+f 830 823 825
+f 825 832 830
+f 832 833 831
+f 831 830 832
+f 474 814 834
+f 834 497 474
+f 497 834 835
+f 835 499 497
+f 836 834 814
+f 814 817 836
+f 837 835 834
+f 834 836 837
+f 817 820 354
+f 354 836 817
+f 836 354 353
+f 353 837 836
+f 356 355 354
+f 354 820 356
+f 838 506 505
+f 505 839 838
+f 839 505 508
+f 508 840 839
+f 841 838 839
+f 839 842 841
+f 842 839 840
+f 840 843 842
+f 841 842 844
+f 844 845 841
+f 842 843 846
+f 846 844 842
+f 845 844 847
+f 847 848 845
+f 844 846 849
+f 849 847 844
+f 848 847 850
+f 850 851 848
+f 852 850 847
+f 847 849 852
+f 853 854 855
+f 855 856 853
+f 854 857 858
+f 858 855 854
+f 851 850 854
+f 854 853 851
+f 850 852 857
+f 857 854 850
+f 856 855 859
+f 859 860 856
+f 855 858 861
+f 861 859 855
+f 860 859 862
+f 862 863 860
+f 859 861 864
+f 864 862 859
+f 865 866 205
+f 205 204 865
+f 205 867 868
+f 868 206 205
+f 866 869 867
+f 867 205 866
+f 870 871 540
+f 540 539 870
+f 871 870 872
+f 872 869 871
+f 872 873 867
+f 867 869 872
+f 873 874 868
+f 868 867 873
+f 875 876 874
+f 874 873 875
+f 873 872 877
+f 877 875 873
+f 870 878 877
+f 877 872 870
+f 878 870 539
+f 539 549 878
+f 879 880 304
+f 304 303 879
+f 880 881 318
+f 318 304 880
+f 882 883 881
+f 881 880 882
+f 884 882 880
+f 880 879 884
+f 881 885 295
+f 295 318 881
+f 885 729 219
+f 219 295 885
+f 883 886 885
+f 885 881 883
+f 886 731 729
+f 729 885 886
+f 887 888 883
+f 883 882 887
+f 887 889 890
+f 890 888 887
+f 891 887 882
+f 882 884 891
+f 892 889 887
+f 887 891 892
+f 888 893 886
+f 886 883 888
+f 888 890 894
+f 894 893 888
+f 893 740 731
+f 731 886 893
+f 741 740 893
+f 893 894 741
+f 895 569 568
+f 568 896 895
+f 568 571 897
+f 897 896 568
+f 895 896 898
+f 898 367 895
+f 897 899 898
+f 898 896 897
+f 367 898 900
+f 900 365 367
+f 900 898 899
+f 899 901 900
+f 902 903 904
+f 904 905 902
+f 903 902 363
+f 363 906 903
+f 906 363 365
+f 365 907 906
+f 907 365 900
+f 900 908 907
+f 908 900 901
+f 901 909 908
+f 903 310 910
+f 910 904 903
+f 310 903 906
+f 906 911 310
+f 911 906 907
+f 907 912 911
+f 908 913 912
+f 912 907 908
+f 913 908 909
+f 909 914 913
+f 915 916 591
+f 591 590 915
+f 591 916 917
+f 917 593 591
+f 915 371 918
+f 918 916 915
+f 917 916 918
+f 918 919 917
+f 371 370 920
+f 920 918 371
+f 920 921 919
+f 919 918 920
+f 922 905 904
+f 904 923 922
+f 923 924 369
+f 369 922 923
+f 924 925 370
+f 370 369 924
+f 925 926 920
+f 920 370 925
+f 926 927 921
+f 921 920 926
+f 923 904 910
+f 910 928 923
+f 928 929 924
+f 924 923 928
+f 929 930 925
+f 925 924 929
+f 926 925 930
+f 930 931 926
+f 931 932 927
+f 927 926 931
+f 610 613 933
+f 933 934 610
+f 613 615 935
+f 935 933 613
+f 934 933 936
+f 936 937 934
+f 933 935 938
+f 938 936 933
+f 937 936 939
+f 939 940 937
+f 936 938 941
+f 941 939 936
+f 940 939 942
+f 942 943 940
+f 939 941 944
+f 944 942 939
+f 943 942 945
+f 945 946 943
+f 942 944 947
+f 947 945 942
+f 948 949 950
+f 950 951 948
+f 949 952 953
+f 953 950 949
+f 946 945 949
+f 949 948 946
+f 945 947 952
+f 952 949 945
+f 954 951 950
+f 950 955 954
+f 955 950 953
+f 953 956 955
+f 810 954 955
+f 955 811 810
+f 811 955 956
+f 956 812 811
+f 637 640 957
+f 957 958 637
+f 641 637 958
+f 958 959 641
+f 958 957 960
+f 960 961 958
+f 959 958 961
+f 961 962 959
+f 963 961 960
+f 960 964 963
+f 965 962 961
+f 961 963 965
+f 966 962 965
+f 965 967 966
+f 824 966 967
+f 967 825 824
+f 963 968 969
+f 969 965 963
+f 969 968 970
+f 970 971 969
+f 964 361 968
+f 968 963 964
+f 362 970 968
+f 968 361 362
+f 967 965 969
+f 969 972 967
+f 972 969 971
+f 971 973 972
+f 972 832 825
+f 825 967 972
+f 832 972 973
+f 973 833 832
+f 640 658 974
+f 974 957 640
+f 658 660 975
+f 975 974 658
+f 976 960 957
+f 957 974 976
+f 977 976 974
+f 974 975 977
+f 960 976 358
+f 358 964 960
+f 976 977 359
+f 359 358 976
+f 361 964 358
+f 358 360 361
+f 978 979 665
+f 665 664 978
+f 979 980 667
+f 667 665 979
+f 981 982 979
+f 979 978 981
+f 982 983 980
+f 980 979 982
+f 981 984 985
+f 985 982 981
+f 982 985 986
+f 986 983 982
+f 984 987 988
+f 988 985 984
+f 985 988 989
+f 989 986 985
+f 987 990 991
+f 991 988 987
+f 992 989 988
+f 988 991 992
+f 993 994 995
+f 995 996 993
+f 996 995 997
+f 997 998 996
+f 990 993 996
+f 996 991 990
+f 991 996 998
+f 998 992 991
+f 994 999 1000
+f 1000 995 994
+f 995 1000 1001
+f 1001 997 995
+f 999 863 862
+f 862 1000 999
+f 1000 862 864
+f 864 1001 1000
+f 865 204 257
+f 257 1002 865
+f 257 256 1003
+f 1003 1004 257
+f 1002 257 1004
+f 1004 1005 1002
+f 1006 697 696
+f 696 1007 1006
+f 1007 1005 1004
+f 1004 1006 1007
+f 1006 1004 1003
+f 1003 1008 1006
+f 1008 699 697
+f 697 1006 1008
+f 1009 703 702
+f 702 1010 1009
+f 1011 1009 1010
+f 1010 1012 1011
+f 1013 1009 1011
+f 1011 1014 1013
+f 1013 708 703
+f 703 1009 1013
+f 364 1015 1011
+f 1011 1012 364
+f 363 902 1015
+f 1015 364 363
+f 1015 1016 1014
+f 1014 1011 1015
+f 902 905 1016
+f 1016 1015 902
+f 1017 1010 702
+f 702 712 1017
+f 895 1017 712
+f 712 569 895
+f 366 1012 1010
+f 1010 1017 366
+f 367 366 1017
+f 1017 895 367
+f 1012 366 365
+f 365 364 1012
+f 1018 1019 715
+f 715 714 1018
+f 1020 1021 1019
+f 1019 1018 1020
+f 1014 1020 1018
+f 1018 1013 1014
+f 708 1013 1018
+f 1018 714 708
+f 368 1021 1020
+f 1020 1022 368
+f 369 368 1022
+f 1022 922 369
+f 1022 1020 1014
+f 1014 1016 1022
+f 922 1022 1016
+f 1016 905 922
+f 1023 721 715
+f 715 1019 1023
+f 915 590 721
+f 721 1023 915
+f 372 1023 1019
+f 1019 1021 372
+f 371 915 1023
+f 1023 372 371
+f 1021 368 370
+f 370 372 1021
+f 1024 1025 1026
+f 1026 1027 1024
+f 1028 1029 1030
+f 1030 1031 1028
+f 1032 1033 183
+f 183 177 1032
+f 1034 1035 1036
+f 1036 1037 1034
+f 1038 1039 1040
+f 1040 1041 1038
+f 1042 1043 309
+f 309 316 1042
+f 326 1044 59
+f 59 58 326
+f 325 1045 1044
+f 1044 326 325
+f 1044 1046 61
+f 61 59 1044
+f 1045 1047 1046
+f 1046 1044 1045
+f 1048 56 55
+f 55 1049 1048
+f 1050 1048 1049
+f 1049 1051 1050
+f 2 58 56
+f 56 1048 2
+f 3 2 1048
+f 1048 1050 3
+f 1050 1051 1052
+f 1052 1053 1050
+f 1054 1053 1052
+f 1052 1055 1054
+f 3 1050 1053
+f 1053 1056 3
+f 1057 1056 1053
+f 1053 1054 1057
+f 1026 1 3
+f 3 1056 1026
+f 1027 1026 1056
+f 1056 1057 1027
+f 1045 325 1025
+f 1025 1058 1045
+f 1058 1059 1047
+f 1047 1045 1058
+f 1025 325 1
+f 1 1026 1025
+f 1060 1054 1055
+f 1055 1061 1060
+f 1062 1060 1061
+f 1061 1063 1062
+f 1054 1060 1064
+f 1064 1057 1054
+f 1060 1062 1065
+f 1065 1064 1060
+f 1066 1027 1057
+f 1057 1064 1066
+f 1064 1065 1067
+f 1067 1066 1064
+f 1063 1068 1069
+f 1069 1062 1063
+f 1070 1069 1068
+f 1068 1071 1070
+f 1071 393 396
+f 396 1070 1071
+f 1062 1069 1072
+f 1072 1065 1062
+f 1069 1070 1073
+f 1073 1072 1069
+f 396 400 1073
+f 1073 1070 396
+f 1065 1072 1074
+f 1074 1067 1065
+f 1072 1073 1075
+f 1075 1074 1072
+f 1073 400 403
+f 403 1075 1073
+f 327 77 79
+f 79 1076 327
+f 328 327 1076
+f 1076 1077 328
+f 1076 79 61
+f 61 1046 1076
+f 1077 1076 1046
+f 1046 1047 1077
+f 1078 1079 74
+f 74 73 1078
+f 1080 1081 1079
+f 1079 1078 1080
+f 5 1078 73
+f 73 77 5
+f 4 1080 1078
+f 1078 5 4
+f 1081 1080 1082
+f 1082 1083 1081
+f 1084 1085 1083
+f 1083 1082 1084
+f 1080 4 1086
+f 1086 1082 1080
+f 1087 1084 1082
+f 1082 1086 1087
+f 1030 1086 4
+f 4 6 1030
+f 1029 1087 1086
+f 1086 1030 1029
+f 328 1077 1088
+f 1088 1031 328
+f 1088 1077 1047
+f 1047 1059 1088
+f 1031 1030 6
+f 6 328 1031
+f 1089 1090 1085
+f 1085 1084 1089
+f 1091 1092 1090
+f 1090 1089 1091
+f 1084 1087 1093
+f 1093 1089 1084
+f 1089 1093 1094
+f 1094 1091 1089
+f 1095 1093 1087
+f 1087 1029 1095
+f 1093 1095 1096
+f 1096 1094 1093
+f 1092 1091 1097
+f 1097 1098 1092
+f 1099 1100 1098
+f 1098 1097 1099
+f 1100 1099 420
+f 420 419 1100
+f 1091 1094 1101
+f 1101 1097 1091
+f 1097 1101 1102
+f 1102 1099 1097
+f 420 1099 1102
+f 1102 425 420
+f 1094 1096 1103
+f 1103 1101 1094
+f 1101 1103 1104
+f 1104 1102 1101
+f 1102 1104 428
+f 428 425 1102
+f 1105 1106 1107
+f 1107 1108 1105
+f 1106 1109 1110
+f 1110 1107 1106
+f 1109 1111 1112
+f 1112 1110 1109
+f 1111 1113 1114
+f 1114 1112 1111
+f 1113 1115 1116
+f 1116 1114 1113
+f 1117 1118 1119
+f 1119 1120 1117
+f 1115 1117 1120
+f 1120 1116 1115
+f 1118 1121 1122
+f 1122 1119 1118
+f 1121 1123 1124
+f 1124 1122 1121
+f 1125 1126 1127
+f 1127 1128 1125
+f 1129 1125 1128
+f 1128 1130 1129
+f 1131 1129 1130
+f 1130 1132 1131
+f 1133 1131 1132
+f 1132 1134 1133
+f 1135 1133 1134
+f 1134 1136 1135
+f 1137 1138 1139
+f 1139 1140 1137
+f 1138 1135 1136
+f 1136 1139 1138
+f 1141 1137 1140
+f 1140 1142 1141
+f 1123 1141 1142
+f 1142 1124 1123
+f 349 195 197
+f 197 1143 349
+f 350 349 1143
+f 1143 1144 350
+f 1143 197 199
+f 199 1145 1143
+f 1144 1143 1145
+f 1145 1146 1144
+f 1147 1049 55
+f 55 193 1147
+f 1148 1051 1049
+f 1049 1147 1148
+f 28 1147 193
+f 193 195 28
+f 27 1148 1147
+f 1147 28 27
+f 1051 1148 1149
+f 1149 1052 1051
+f 1150 1055 1052
+f 1052 1149 1150
+f 1148 27 1151
+f 1151 1149 1148
+f 1152 1150 1149
+f 1149 1151 1152
+f 1036 1151 27
+f 27 29 1036
+f 1035 1152 1151
+f 1151 1036 1035
+f 350 1144 1153
+f 1153 1037 350
+f 1153 1144 1146
+f 1146 1154 1153
+f 1037 1036 29
+f 29 350 1037
+f 1155 1061 1055
+f 1055 1150 1155
+f 1156 1063 1061
+f 1061 1155 1156
+f 1150 1152 1157
+f 1157 1155 1150
+f 1155 1157 1158
+f 1158 1156 1155
+f 1159 1157 1152
+f 1152 1035 1159
+f 1157 1159 1160
+f 1160 1158 1157
+f 1063 1156 1161
+f 1161 1068 1063
+f 1162 1071 1068
+f 1068 1161 1162
+f 1071 1162 742
+f 742 393 1071
+f 1156 1158 1163
+f 1163 1161 1156
+f 1161 1163 1164
+f 1164 1162 1161
+f 742 1162 1164
+f 1164 745 742
+f 1158 1160 1165
+f 1165 1163 1158
+f 1163 1165 1166
+f 1166 1164 1163
+f 1164 1166 748
+f 748 745 1164
+f 352 1167 212
+f 212 211 352
+f 351 1168 1167
+f 1167 352 351
+f 1167 1145 199
+f 199 212 1167
+f 1168 1146 1145
+f 1145 1167 1168
+f 1169 209 74
+f 74 1079 1169
+f 1170 1169 1079
+f 1079 1081 1170
+f 31 211 209
+f 209 1169 31
+f 32 31 1169
+f 1169 1170 32
+f 1170 1081 1083
+f 1083 1171 1170
+f 1172 1171 1083
+f 1083 1085 1172
+f 32 1170 1171
+f 1171 1173 32
+f 1174 1173 1171
+f 1171 1172 1174
+f 1040 30 32
+f 32 1173 1040
+f 1041 1040 1173
+f 1173 1174 1041
+f 1168 351 1039
+f 1039 1175 1168
+f 1175 1154 1146
+f 1146 1168 1175
+f 1039 351 30
+f 30 1040 1039
+f 1176 1172 1085
+f 1085 1090 1176
+f 1177 1176 1090
+f 1090 1092 1177
+f 1172 1176 1178
+f 1178 1174 1172
+f 1176 1177 1179
+f 1179 1178 1176
+f 1180 1041 1174
+f 1174 1178 1180
+f 1178 1179 1181
+f 1181 1180 1178
+f 1092 1098 1182
+f 1182 1177 1092
+f 1183 1182 1098
+f 1098 1100 1183
+f 1100 419 766
+f 766 1183 1100
+f 1177 1182 1184
+f 1184 1179 1177
+f 1182 1183 1185
+f 1185 1184 1182
+f 766 769 1185
+f 1185 1183 766
+f 1179 1184 1186
+f 1186 1181 1179
+f 1184 1185 1187
+f 1187 1186 1184
+f 1185 769 772
+f 772 1187 1185
+f 1188 1105 1108
+f 1108 1189 1188
+f 1190 1188 1189
+f 1189 1191 1190
+f 1192 1190 1191
+f 1191 1193 1192
+f 1194 1192 1193
+f 1193 1195 1194
+f 1196 1194 1195
+f 1195 1197 1196
+f 1198 1199 1200
+f 1200 1201 1198
+f 1199 1196 1197
+f 1197 1200 1199
+f 1202 1198 1201
+f 1201 1203 1202
+f 1204 1202 1203
+f 1203 1205 1204
+f 1126 1206 1207
+f 1207 1127 1126
+f 1206 1208 1209
+f 1209 1207 1206
+f 1208 1210 1211
+f 1211 1209 1208
+f 1210 1212 1213
+f 1213 1211 1210
+f 1212 1214 1215
+f 1215 1213 1212
+f 1216 1217 1218
+f 1218 1219 1216
+f 1214 1216 1219
+f 1219 1215 1214
+f 1217 1220 1221
+f 1221 1218 1217
+f 1220 1204 1205
+f 1205 1221 1220
+f 1059 1222 1223
+f 1223 1088 1059
+f 1088 1223 1028
+f 1028 1031 1088
+f 453 456 1224
+f 1224 1225 453
+f 1225 1224 1226
+f 1226 1227 1225
+f 1227 1226 1228
+f 1228 1229 1227
+f 1229 1228 1230
+f 1230 1231 1229
+f 1231 1230 331
+f 331 330 1231
+f 456 459 1232
+f 1232 1224 456
+f 1224 1232 1233
+f 1233 1226 1224
+f 1226 1233 1234
+f 1234 1228 1226
+f 1228 1234 1235
+f 1235 1230 1228
+f 1230 1235 333
+f 333 331 1230
+f 1236 1237 1238
+f 1238 1239 1236
+f 1240 1238 1237
+f 1237 1241 1240
+f 1154 1242 1243
+f 1243 1153 1154
+f 1153 1243 1034
+f 1034 1037 1153
+f 1244 1245 1246
+f 1246 1247 1244
+f 1248 1246 1245
+f 1245 1249 1248
+f 940 943 1250
+f 1250 1251 940
+f 1251 1250 1252
+f 1252 1253 1251
+f 1253 1252 1254
+f 1254 1255 1253
+f 1255 1254 1256
+f 1256 1257 1255
+f 1257 1256 360
+f 360 359 1257
+f 943 946 1258
+f 1258 1250 943
+f 1250 1258 1259
+f 1259 1252 1250
+f 1252 1259 1260
+f 1260 1254 1252
+f 1254 1260 1261
+f 1261 1256 1254
+f 1256 1261 362
+f 362 360 1256
+f 1262 1263 1264
+f 1264 1265 1262
+f 1265 1264 1266
+f 1266 1267 1265
+f 1267 1266 1268
+f 1268 1269 1267
+f 1269 1268 1270
+f 1270 1271 1269
+f 1271 1270 1043
+f 1043 1042 1271
+f 1272 1273 1274
+f 1274 1222 1272
+f 1275 1274 1273
+f 1273 1276 1275
+f 1024 1277 1273
+f 1273 1272 1024
+f 1276 1273 1277
+f 1277 1278 1276
+f 1277 1024 1027
+f 1027 1066 1277
+f 1066 1067 1278
+f 1278 1277 1066
+f 1276 1279 1280
+f 1280 1275 1276
+f 1279 1281 1282
+f 1282 1280 1279
+f 1281 405 408
+f 408 1282 1281
+f 1278 1283 1279
+f 1279 1276 1278
+f 1283 1284 1281
+f 1281 1279 1283
+f 1284 409 405
+f 405 1281 1284
+f 1067 1074 1283
+f 1283 1278 1067
+f 1074 1075 1284
+f 1284 1283 1074
+f 1075 403 409
+f 409 1284 1075
+f 172 550 1285
+f 1285 173 172
+f 173 1285 585
+f 585 176 173
+f 550 555 1286
+f 1286 1285 550
+f 1285 1286 586
+f 586 585 1285
+f 555 562 1287
+f 1287 1286 555
+f 1286 1287 587
+f 587 586 1286
+f 562 563 1288
+f 1288 1287 562
+f 1287 1288 588
+f 588 587 1287
+f 1239 1238 1289
+f 1289 1290 1239
+f 1290 1289 1291
+f 1291 1292 1290
+f 1238 1240 1293
+f 1293 1289 1238
+f 1289 1293 1294
+f 1294 1291 1289
+f 1292 1291 1295
+f 1295 1296 1292
+f 1296 1295 1297
+f 1297 1298 1296
+f 1298 1297 1299
+f 1299 1300 1298
+f 1300 1299 1301
+f 1301 1302 1300
+f 1291 1294 1303
+f 1303 1295 1291
+f 1295 1303 1304
+f 1304 1297 1295
+f 1297 1304 1305
+f 1305 1299 1297
+f 1299 1305 1306
+f 1306 1301 1299
+f 1302 1301 1307
+f 1307 1308 1302
+f 1308 1307 1309
+f 1309 1310 1308
+f 1310 1309 1311
+f 1311 1312 1310
+f 1312 1311 1313
+f 1313 1314 1312
+f 1314 1313 649
+f 649 645 1314
+f 1301 1306 1315
+f 1315 1307 1301
+f 1307 1315 1316
+f 1316 1309 1307
+f 1309 1316 1317
+f 1317 1311 1309
+f 1311 1317 1318
+f 1318 1313 1311
+f 1313 1318 487
+f 487 649 1313
+f 129 145 1319
+f 1319 1320 129
+f 145 148 1321
+f 1321 1319 145
+f 148 151 1322
+f 1322 1321 148
+f 151 154 1323
+f 1323 1322 151
+f 154 157 1324
+f 1324 1323 154
+f 157 160 1325
+f 1325 1324 157
+f 1320 1319 1326
+f 1326 1327 1320
+f 1327 1326 1328
+f 1328 1329 1327
+f 1329 1328 1330
+f 1330 1331 1329
+f 1331 1330 1332
+f 1332 1333 1331
+f 1333 1332 1334
+f 1334 1335 1333
+f 1319 1321 1336
+f 1336 1326 1319
+f 1326 1336 1337
+f 1337 1328 1326
+f 1328 1337 1338
+f 1338 1330 1328
+f 1330 1338 1339
+f 1339 1332 1330
+f 1332 1339 1340
+f 1340 1334 1332
+f 1321 1322 1341
+f 1341 1336 1321
+f 1336 1341 1342
+f 1342 1337 1336
+f 1337 1342 1343
+f 1343 1338 1337
+f 1338 1343 1344
+f 1344 1339 1338
+f 1339 1344 1345
+f 1345 1340 1339
+f 1322 1323 1346
+f 1346 1341 1322
+f 1341 1346 1347
+f 1347 1342 1341
+f 1342 1347 1348
+f 1348 1343 1342
+f 1343 1348 1349
+f 1349 1344 1343
+f 1344 1349 1350
+f 1350 1345 1344
+f 1323 1324 1351
+f 1351 1346 1323
+f 1346 1351 1352
+f 1352 1347 1346
+f 1347 1352 1353
+f 1353 1348 1347
+f 1348 1353 1354
+f 1354 1349 1348
+f 1349 1354 1355
+f 1355 1350 1349
+f 1324 1325 1356
+f 1356 1351 1324
+f 1351 1356 1357
+f 1357 1352 1351
+f 1352 1357 1358
+f 1358 1353 1352
+f 1353 1358 1359
+f 1359 1354 1353
+f 1354 1359 1360
+f 1360 1355 1354
+f 168 184 1361
+f 1361 1362 168
+f 1362 1361 1363
+f 1363 1364 1362
+f 1364 1363 1365
+f 1365 1366 1364
+f 1366 1365 1367
+f 1367 1368 1366
+f 1368 1367 1369
+f 1369 1370 1368
+f 1370 1369 1371
+f 1371 1372 1370
+f 234 722 1373
+f 1373 235 234
+f 235 1373 1374
+f 1374 239 235
+f 239 1374 761
+f 761 240 239
+f 722 727 1375
+f 1375 1373 722
+f 1373 1375 1376
+f 1376 1374 1373
+f 1374 1376 762
+f 762 761 1374
+f 727 736 1377
+f 1377 1375 727
+f 1375 1377 1378
+f 1378 1376 1375
+f 1376 1378 763
+f 763 762 1376
+f 736 737 1379
+f 1379 1377 736
+f 1377 1379 1380
+f 1380 1378 1377
+f 1378 1380 764
+f 764 763 1378
+f 1247 1246 1381
+f 1381 1382 1247
+f 1382 1381 1383
+f 1383 1384 1382
+f 1246 1248 1385
+f 1385 1381 1246
+f 1381 1385 1386
+f 1386 1383 1381
+f 1387 1388 1389
+f 1389 1242 1387
+f 1390 1389 1388
+f 1388 1391 1390
+f 1038 1392 1388
+f 1388 1387 1038
+f 1391 1388 1392
+f 1392 1393 1391
+f 1392 1038 1041
+f 1041 1180 1392
+f 1180 1181 1393
+f 1393 1392 1180
+f 1391 1394 1395
+f 1395 1390 1391
+f 1394 1396 1397
+f 1397 1395 1394
+f 1396 774 752
+f 752 1397 1396
+f 1393 1398 1394
+f 1394 1391 1393
+f 1398 1399 1396
+f 1396 1394 1398
+f 1399 776 774
+f 774 1396 1399
+f 1181 1186 1398
+f 1398 1393 1181
+f 1186 1187 1399
+f 1399 1398 1186
+f 1187 772 776
+f 776 1399 1187
+f 1384 1383 1400
+f 1400 1401 1384
+f 1401 1400 1402
+f 1402 1403 1401
+f 1403 1402 1404
+f 1404 1405 1403
+f 1405 1404 1406
+f 1406 1407 1405
+f 1383 1386 1408
+f 1408 1400 1383
+f 1400 1408 1409
+f 1409 1402 1400
+f 1402 1409 1410
+f 1410 1404 1402
+f 1404 1410 1411
+f 1411 1406 1404
+f 1407 1406 1412
+f 1412 1413 1407
+f 1413 1412 1414
+f 1414 1415 1413
+f 1415 1414 1416
+f 1416 1417 1415
+f 1417 1416 1418
+f 1418 1419 1417
+f 1419 1418 822
+f 822 818 1419
+f 1406 1411 1420
+f 1420 1412 1406
+f 1412 1420 1421
+f 1421 1414 1412
+f 1414 1421 1422
+f 1422 1416 1414
+f 1416 1422 1423
+f 1423 1418 1416
+f 1418 1423 824
+f 824 822 1418
+f 229 248 1424
+f 1424 1425 229
+f 1425 1424 1426
+f 1426 1427 1425
+f 1427 1426 1428
+f 1428 1429 1427
+f 1429 1428 1430
+f 1430 1431 1429
+f 1431 1430 1432
+f 1432 1433 1431
+f 1433 1432 1434
+f 1434 1435 1433
+f 263 262 1436
+f 1436 1437 263
+f 262 266 1438
+f 1438 1436 262
+f 266 269 1439
+f 1439 1438 266
+f 269 272 1440
+f 1440 1439 269
+f 272 275 1441
+f 1441 1440 272
+f 275 230 1442
+f 1442 1441 275
+f 1437 1436 1443
+f 1443 1444 1437
+f 1444 1443 1445
+f 1445 1446 1444
+f 1446 1445 1447
+f 1447 1448 1446
+f 1448 1447 1449
+f 1449 1450 1448
+f 1450 1449 1451
+f 1451 1452 1450
+f 1436 1438 1453
+f 1453 1443 1436
+f 1443 1453 1454
+f 1454 1445 1443
+f 1445 1454 1455
+f 1455 1447 1445
+f 1447 1455 1456
+f 1456 1449 1447
+f 1449 1456 1457
+f 1457 1451 1449
+f 1438 1439 1458
+f 1458 1453 1438
+f 1453 1458 1459
+f 1459 1454 1453
+f 1454 1459 1460
+f 1460 1455 1454
+f 1455 1460 1461
+f 1461 1456 1455
+f 1456 1461 1462
+f 1462 1457 1456
+f 1439 1440 1463
+f 1463 1458 1439
+f 1458 1463 1464
+f 1464 1459 1458
+f 1459 1464 1465
+f 1465 1460 1459
+f 1460 1465 1466
+f 1466 1461 1460
+f 1461 1466 1467
+f 1467 1462 1461
+f 1440 1441 1468
+f 1468 1463 1440
+f 1463 1468 1469
+f 1469 1464 1463
+f 1464 1469 1470
+f 1470 1465 1464
+f 1465 1470 1471
+f 1471 1466 1465
+f 1466 1471 1472
+f 1472 1467 1466
+f 1441 1442 1473
+f 1473 1468 1441
+f 1468 1473 1474
+f 1474 1469 1468
+f 1469 1474 1475
+f 1475 1470 1469
+f 1470 1475 1476
+f 1476 1471 1470
+f 1471 1476 1477
+f 1477 1472 1471
+f 1059 1058 1272
+f 1272 1222 1059
+f 1058 1025 1024
+f 1024 1272 1058
+f 1478 1479 1480
+f 1480 1481 1478
+f 1240 1241 1481
+f 1481 1480 1240
+f 619 1482 1483
+f 1483 622 619
+f 1482 1484 1485
+f 1485 1483 1482
+f 1484 1486 1487
+f 1487 1485 1484
+f 1486 1488 1489
+f 1489 1487 1486
+f 1488 334 336
+f 336 1489 1488
+f 622 1483 1490
+f 1490 625 622
+f 1483 1485 1491
+f 1491 1490 1483
+f 1485 1487 1492
+f 1492 1491 1485
+f 1487 1489 1493
+f 1493 1492 1487
+f 1489 336 338
+f 338 1493 1489
+f 1494 1495 1496
+f 1496 1497 1494
+f 1495 1498 1499
+f 1499 1496 1495
+f 1498 1500 1501
+f 1501 1499 1498
+f 1500 1502 1503
+f 1503 1501 1500
+f 1502 1033 1032
+f 1032 1503 1502
+f 1154 1175 1387
+f 1387 1242 1154
+f 1175 1039 1038
+f 1038 1387 1175
+f 792 1504 1505
+f 1505 795 792
+f 1504 1506 1507
+f 1507 1505 1504
+f 1506 1508 1509
+f 1509 1507 1506
+f 1508 1510 1511
+f 1511 1509 1508
+f 1510 353 355
+f 355 1511 1510
+f 795 1505 1512
+f 1512 798 795
+f 1505 1507 1513
+f 1513 1512 1505
+f 1507 1509 1514
+f 1514 1513 1507
+f 1509 1511 1515
+f 1515 1514 1509
+f 1511 355 357
+f 357 1515 1511
+f 1516 1517 1518
+f 1518 1519 1516
+f 1248 1249 1519
+f 1519 1518 1248
+f 63 64 1520
+f 1520 1521 63
+f 1522 1521 1520
+f 1520 546 1522
+f 65 63 1521
+f 1521 1523 65
+f 1524 1523 1521
+f 1521 1522 1524
+f 1523 1525 66
+f 66 65 1523
+f 1526 1525 1523
+f 1523 1524 1526
+f 67 66 1525
+f 1525 1527 67
+f 1528 1527 1525
+f 1525 1526 1528
+f 1529 1530 1531
+f 1531 1532 1529
+f 1533 1534 1532
+f 1532 1531 1533
+f 1534 1533 398
+f 398 397 1534
+f 1530 1535 1536
+f 1536 1531 1530
+f 1531 1536 1537
+f 1537 1533 1531
+f 1533 1537 401
+f 401 398 1533
+f 1535 1538 1539
+f 1539 1536 1535
+f 1536 1539 1540
+f 1540 1537 1536
+f 1537 1540 404
+f 404 401 1537
+f 1538 1541 1542
+f 1542 1539 1538
+f 1539 1542 1543
+f 1543 1540 1539
+f 1540 1543 413
+f 413 404 1540
+f 1541 388 1544
+f 1544 1542 1541
+f 1542 1544 1545
+f 1545 1543 1542
+f 1543 1545 418
+f 418 413 1543
+f 1546 541 540
+f 540 1547 1546
+f 1548 1546 1547
+f 1547 1549 1548
+f 1478 537 541
+f 541 1546 1478
+f 1479 1478 1546
+f 1546 1548 1479
+f 537 1478 1481
+f 1481 534 537
+f 1241 533 534
+f 534 1481 1241
+f 1549 1550 1551
+f 1551 1548 1549
+f 1550 1552 1553
+f 1553 1551 1550
+f 1548 1551 1554
+f 1554 1479 1548
+f 1551 1553 1555
+f 1555 1554 1551
+f 1552 1556 1557
+f 1557 1553 1552
+f 1556 1558 1559
+f 1559 1557 1556
+f 1558 1560 1561
+f 1561 1559 1558
+f 1560 1562 1563
+f 1563 1561 1560
+f 1553 1557 1564
+f 1564 1555 1553
+f 1557 1559 1565
+f 1565 1564 1557
+f 1559 1561 1566
+f 1566 1565 1559
+f 1561 1563 1567
+f 1567 1566 1561
+f 1568 1569 1570
+f 1570 1571 1568
+f 1569 1572 1573
+f 1573 1570 1569
+f 1572 1574 1575
+f 1575 1573 1572
+f 1574 448 447
+f 447 1575 1574
+f 1576 1577 1569
+f 1569 1568 1576
+f 1577 1578 1572
+f 1572 1569 1577
+f 1578 1579 1574
+f 1574 1572 1578
+f 1579 451 448
+f 448 1574 1579
+f 1580 1581 1577
+f 1577 1576 1580
+f 1581 1582 1578
+f 1578 1577 1581
+f 1582 1583 1579
+f 1579 1578 1582
+f 1583 454 451
+f 451 1579 1583
+f 1584 1585 1581
+f 1581 1580 1584
+f 1585 1586 1582
+f 1582 1581 1585
+f 1586 1587 1583
+f 1583 1582 1586
+f 1587 457 454
+f 454 1583 1587
+f 1588 1589 1585
+f 1585 1584 1588
+f 1589 1590 1586
+f 1586 1585 1589
+f 1590 1591 1587
+f 1587 1586 1590
+f 1591 460 457
+f 457 1587 1591
+f 1592 1593 1594
+f 1594 1595 1592
+f 1593 1596 1597
+f 1597 1594 1593
+f 1596 1598 1599
+f 1599 1597 1596
+f 1598 466 465
+f 465 1599 1598
+f 1595 1594 1589
+f 1589 1588 1595
+f 1594 1597 1590
+f 1590 1589 1594
+f 1597 1599 1591
+f 1591 1590 1597
+f 1599 465 460
+f 460 1591 1599
+f 1600 1601 1593
+f 1593 1592 1600
+f 1601 1602 1596
+f 1596 1593 1601
+f 1602 1603 1598
+f 1598 1596 1602
+f 1603 469 466
+f 466 1598 1603
+f 1604 1605 1601
+f 1601 1600 1604
+f 1605 1606 1602
+f 1602 1601 1605
+f 1606 1607 1603
+f 1603 1602 1606
+f 1607 472 469
+f 469 1603 1607
+f 1562 1608 1609
+f 1609 1563 1562
+f 1608 1610 1611
+f 1611 1609 1608
+f 1610 1612 1613
+f 1613 1611 1610
+f 1612 1614 1615
+f 1615 1613 1612
+f 1614 477 478
+f 478 1615 1614
+f 1563 1609 1616
+f 1616 1567 1563
+f 1609 1611 1617
+f 1617 1616 1609
+f 1611 1613 1618
+f 1618 1617 1611
+f 1613 1615 1619
+f 1619 1618 1613
+f 1615 478 481
+f 481 1619 1615
+f 464 1620 1621
+f 1621 461 464
+f 1620 1622 1623
+f 1623 1621 1620
+f 1622 1624 1625
+f 1625 1623 1622
+f 1624 1626 1627
+f 1627 1625 1624
+f 1626 492 491
+f 491 1627 1626
+f 461 1621 1232
+f 1232 459 461
+f 1621 1623 1233
+f 1233 1232 1621
+f 1623 1625 1234
+f 1234 1233 1623
+f 1625 1627 1235
+f 1235 1234 1625
+f 1627 491 333
+f 333 1235 1627
+f 467 1628 1620
+f 1620 464 467
+f 1628 1629 1622
+f 1622 1620 1628
+f 1629 1630 1624
+f 1624 1622 1629
+f 1630 1631 1626
+f 1626 1624 1630
+f 1631 494 492
+f 492 1626 1631
+f 470 1632 1628
+f 1628 467 470
+f 1632 1633 1629
+f 1629 1628 1632
+f 1633 1634 1630
+f 1630 1629 1633
+f 1634 1635 1631
+f 1631 1630 1634
+f 1635 496 494
+f 494 1631 1635
+f 446 1636 1637
+f 1637 443 446
+f 1636 1638 1639
+f 1639 1637 1636
+f 1638 1640 1641
+f 1641 1639 1638
+f 1640 1642 1643
+f 1643 1641 1640
+f 1642 500 499
+f 499 1643 1642
+f 450 1644 1636
+f 1636 446 450
+f 1644 1645 1638
+f 1638 1636 1644
+f 1645 1646 1640
+f 1640 1638 1645
+f 1646 1647 1642
+f 1642 1640 1646
+f 1647 502 500
+f 500 1642 1647
+f 453 1225 1644
+f 1644 450 453
+f 1225 1227 1645
+f 1645 1644 1225
+f 1227 1229 1646
+f 1646 1645 1227
+f 1229 1231 1647
+f 1647 1646 1229
+f 1231 330 502
+f 502 1647 1231
+f 1648 1530 1529
+f 1529 1649 1648
+f 1648 1650 1535
+f 1535 1530 1648
+f 1650 1651 1538
+f 1538 1535 1650
+f 1651 1652 1541
+f 1541 1538 1651
+f 1653 388 1541
+f 1541 1652 1653
+f 1654 1655 386
+f 386 385 1654
+f 1653 1654 385
+f 385 388 1653
+f 1655 1656 390
+f 390 386 1655
+f 1657 392 390
+f 390 1656 1657
+f 1658 1659 1648
+f 1648 1649 1658
+f 1659 1658 1660
+f 1660 1661 1659
+f 1662 1663 1661
+f 1661 1660 1662
+f 1664 1665 1663
+f 1663 1662 1664
+f 1665 1664 508
+f 508 507 1665
+f 1659 1666 1650
+f 1650 1648 1659
+f 1661 1667 1666
+f 1666 1659 1661
+f 1663 1668 1667
+f 1667 1661 1663
+f 1665 1669 1668
+f 1668 1663 1665
+f 507 511 1669
+f 1669 1665 507
+f 1666 1670 1651
+f 1651 1650 1666
+f 1667 1671 1670
+f 1670 1666 1667
+f 1668 1672 1671
+f 1671 1667 1668
+f 1669 1673 1672
+f 1672 1668 1669
+f 511 514 1673
+f 1673 1669 511
+f 1652 1651 1670
+f 1670 1674 1652
+f 1674 1670 1671
+f 1671 1675 1674
+f 1675 1671 1672
+f 1672 1676 1675
+f 1676 1672 1673
+f 1673 1677 1676
+f 1677 1673 514
+f 514 517 1677
+f 1653 1652 1674
+f 1674 1678 1653
+f 1678 1674 1675
+f 1675 1679 1678
+f 1679 1675 1676
+f 1676 1680 1679
+f 1680 1676 1677
+f 1677 1681 1680
+f 1681 1677 517
+f 517 520 1681
+f 1682 1683 1655
+f 1655 1654 1682
+f 1684 1685 1683
+f 1683 1682 1684
+f 1686 1687 1685
+f 1685 1684 1686
+f 1688 1689 1687
+f 1687 1686 1688
+f 526 525 1689
+f 1689 1688 526
+f 1678 1682 1654
+f 1654 1653 1678
+f 1679 1684 1682
+f 1682 1678 1679
+f 1680 1686 1684
+f 1684 1679 1680
+f 1681 1688 1686
+f 1686 1680 1681
+f 520 526 1688
+f 1688 1681 520
+f 1683 1690 1656
+f 1656 1655 1683
+f 1685 1691 1690
+f 1690 1683 1685
+f 1687 1692 1691
+f 1691 1685 1687
+f 1689 1693 1692
+f 1692 1687 1689
+f 525 529 1693
+f 1693 1689 525
+f 1656 1690 1694
+f 1694 1657 1656
+f 1691 1695 1694
+f 1694 1690 1691
+f 1696 1695 1691
+f 1691 1692 1696
+f 1692 1693 1697
+f 1697 1696 1692
+f 529 532 1697
+f 1697 1693 529
+f 80 1698 1520
+f 1520 64 80
+f 545 546 1520
+f 1520 1698 545
+f 81 1699 1698
+f 1698 80 81
+f 547 545 1698
+f 1698 1699 547
+f 1699 81 82
+f 82 1700 1699
+f 548 547 1699
+f 1699 1700 548
+f 83 1701 1700
+f 1700 82 83
+f 549 548 1700
+f 1700 1701 549
+f 96 1702 1703
+f 1703 97 96
+f 1704 414 108
+f 108 107 1704
+f 112 1705 1704
+f 1704 107 112
+f 115 1706 1705
+f 1705 112 115
+f 1702 1707 1708
+f 1708 1703 1702
+f 1707 1709 1710
+f 1710 1708 1707
+f 1709 1711 1712
+f 1712 1710 1709
+f 1711 1713 1714
+f 1714 1712 1711
+f 1713 1715 1716
+f 1716 1714 1713
+f 1717 438 414
+f 414 1704 1717
+f 438 1717 1718
+f 1718 439 438
+f 439 1718 1719
+f 1719 440 439
+f 440 1719 1720
+f 1720 441 440
+f 441 1720 1721
+f 1721 442 441
+f 1705 1722 1717
+f 1717 1704 1705
+f 1722 1723 1718
+f 1718 1717 1722
+f 1723 1724 1719
+f 1719 1718 1723
+f 1724 1725 1720
+f 1720 1719 1724
+f 1725 1726 1721
+f 1721 1720 1725
+f 1706 1727 1722
+f 1722 1705 1706
+f 1727 1728 1723
+f 1723 1722 1727
+f 1728 1729 1724
+f 1724 1723 1728
+f 1729 1730 1725
+f 1725 1724 1729
+f 1730 1731 1726
+f 1726 1725 1730
+f 1732 1733 1734
+f 1734 1735 1732
+f 1733 571 570
+f 570 1734 1733
+f 1735 1734 1736
+f 1736 1737 1735
+f 1734 570 573
+f 573 1736 1734
+f 1737 1736 1738
+f 1738 1739 1737
+f 1736 573 575
+f 575 1738 1736
+f 1739 1738 1740
+f 1740 1741 1739
+f 1738 575 583
+f 583 1740 1738
+f 1741 1740 1288
+f 1288 563 1741
+f 1288 1740 583
+f 583 588 1288
+f 1742 1743 696
+f 696 695 1742
+f 1744 1745 1743
+f 1743 1742 1744
+f 1236 1742 695
+f 695 693 1236
+f 1239 1744 1742
+f 1742 1236 1239
+f 693 690 1237
+f 1237 1236 693
+f 1241 1237 690
+f 690 533 1241
+f 1745 1744 1746
+f 1746 1747 1745
+f 1747 1746 1748
+f 1748 1749 1747
+f 1744 1239 1290
+f 1290 1746 1744
+f 1746 1290 1292
+f 1292 1748 1746
+f 1748 1750 1751
+f 1751 1749 1748
+f 1750 1752 1753
+f 1753 1751 1750
+f 1752 1754 1755
+f 1755 1753 1752
+f 1754 1756 1757
+f 1757 1755 1754
+f 1292 1296 1750
+f 1750 1748 1292
+f 1296 1298 1752
+f 1752 1750 1296
+f 1298 1300 1754
+f 1754 1752 1298
+f 1300 1302 1756
+f 1756 1754 1300
+f 1758 1759 1760
+f 1760 1761 1758
+f 1759 1762 1763
+f 1763 1760 1759
+f 1762 1764 1765
+f 1765 1763 1762
+f 1764 615 614
+f 614 1765 1764
+f 1761 1760 1766
+f 1766 1767 1761
+f 1760 1763 1768
+f 1768 1766 1760
+f 1763 1765 1769
+f 1769 1768 1763
+f 1765 614 618
+f 618 1769 1765
+f 1767 1766 1770
+f 1770 1771 1767
+f 1766 1768 1772
+f 1772 1770 1766
+f 1768 1769 1773
+f 1773 1772 1768
+f 1769 618 621
+f 621 1773 1769
+f 1771 1770 1774
+f 1774 1775 1771
+f 1770 1772 1776
+f 1776 1774 1770
+f 1772 1773 1777
+f 1777 1776 1772
+f 1773 621 624
+f 624 1777 1773
+f 1775 1774 1778
+f 1778 1779 1775
+f 1774 1776 1780
+f 1780 1778 1774
+f 1776 1777 1781
+f 1781 1780 1776
+f 1777 624 627
+f 627 1781 1777
+f 1782 1783 1784
+f 1784 1785 1782
+f 1783 1786 1787
+f 1787 1784 1783
+f 1786 1788 1789
+f 1789 1787 1786
+f 1788 633 632
+f 632 1789 1788
+f 1779 1778 1783
+f 1783 1782 1779
+f 1778 1780 1786
+f 1786 1783 1778
+f 1780 1781 1788
+f 1788 1786 1780
+f 1781 627 633
+f 633 1788 1781
+f 1785 1784 1790
+f 1790 1791 1785
+f 1784 1787 1792
+f 1792 1790 1784
+f 1787 1789 1793
+f 1793 1792 1787
+f 1789 632 636
+f 636 1793 1789
+f 1791 1790 1605
+f 1605 1604 1791
+f 1790 1792 1606
+f 1606 1605 1790
+f 1792 1793 1607
+f 1607 1606 1792
+f 1793 636 472
+f 472 1607 1793
+f 1756 1794 1795
+f 1795 1757 1756
+f 1794 1796 1797
+f 1797 1795 1794
+f 1796 1798 1799
+f 1799 1797 1796
+f 1798 1800 1801
+f 1801 1799 1798
+f 1800 642 641
+f 641 1801 1800
+f 1302 1308 1794
+f 1794 1756 1302
+f 1308 1310 1796
+f 1796 1794 1308
+f 1310 1312 1798
+f 1798 1796 1310
+f 1312 1314 1800
+f 1800 1798 1312
+f 1314 645 642
+f 642 1800 1314
+f 628 1802 1803
+f 1803 629 628
+f 1802 1804 1805
+f 1805 1803 1802
+f 1804 1806 1807
+f 1807 1805 1804
+f 1806 1808 1809
+f 1809 1807 1806
+f 1808 654 653
+f 653 1809 1808
+f 625 1490 1802
+f 1802 628 625
+f 1490 1491 1804
+f 1804 1802 1490
+f 1491 1492 1806
+f 1806 1804 1491
+f 1492 1493 1808
+f 1808 1806 1492
+f 1493 338 654
+f 654 1808 1493
+f 629 1803 1810
+f 1810 634 629
+f 1803 1805 1811
+f 1811 1810 1803
+f 1805 1807 1812
+f 1812 1811 1805
+f 1807 1809 1813
+f 1813 1812 1807
+f 1809 653 656
+f 656 1813 1809
+f 634 1810 1632
+f 1632 470 634
+f 1810 1811 1633
+f 1633 1632 1810
+f 1811 1812 1634
+f 1634 1633 1811
+f 1812 1813 1635
+f 1635 1634 1812
+f 1813 656 496
+f 496 1635 1813
+f 610 1814 1815
+f 1815 611 610
+f 1814 1816 1817
+f 1817 1815 1814
+f 1816 1818 1819
+f 1819 1817 1816
+f 1818 1820 1821
+f 1821 1819 1818
+f 1820 660 659
+f 659 1821 1820
+f 611 1815 1822
+f 1822 616 611
+f 1815 1817 1823
+f 1823 1822 1815
+f 1817 1819 1824
+f 1824 1823 1817
+f 1819 1821 1825
+f 1825 1824 1819
+f 1821 659 662
+f 662 1825 1821
+f 616 1822 1482
+f 1482 619 616
+f 1822 1823 1484
+f 1484 1482 1822
+f 1823 1824 1486
+f 1486 1484 1823
+f 1824 1825 1488
+f 1488 1486 1824
+f 1825 662 334
+f 334 1488 1825
+f 1826 1827 1732
+f 1732 1735 1826
+f 1828 1826 1735
+f 1735 1737 1828
+f 1829 1828 1737
+f 1737 1739 1829
+f 1829 1739 1741
+f 1741 1830 1829
+f 1831 1830 1741
+f 1741 563 1831
+f 1832 561 560
+f 560 1833 1832
+f 1831 563 561
+f 561 1832 1831
+f 1833 560 565
+f 565 1834 1833
+f 1657 1834 565
+f 565 392 1657
+f 1835 1827 1826
+f 1826 1836 1835
+f 1836 1837 1838
+f 1838 1835 1836
+f 1839 1838 1837
+f 1837 1840 1839
+f 1841 1839 1840
+f 1840 1842 1841
+f 1842 668 667
+f 667 1841 1842
+f 1836 1826 1828
+f 1828 1843 1836
+f 1837 1836 1843
+f 1843 1844 1837
+f 1840 1837 1844
+f 1844 1845 1840
+f 1842 1840 1845
+f 1845 1846 1842
+f 668 1842 1846
+f 1846 671 668
+f 1843 1828 1829
+f 1829 1847 1843
+f 1844 1843 1847
+f 1847 1848 1844
+f 1845 1844 1848
+f 1848 1849 1845
+f 1846 1845 1849
+f 1849 1850 1846
+f 671 1846 1850
+f 1850 674 671
+f 1830 1851 1847
+f 1847 1829 1830
+f 1851 1852 1848
+f 1848 1847 1851
+f 1852 1853 1849
+f 1849 1848 1852
+f 1853 1854 1850
+f 1850 1849 1853
+f 1854 677 674
+f 674 1850 1854
+f 1831 1855 1851
+f 1851 1830 1831
+f 1855 1856 1852
+f 1852 1851 1855
+f 1856 1857 1853
+f 1853 1852 1856
+f 1857 1858 1854
+f 1854 1853 1857
+f 1858 680 677
+f 677 1854 1858
+f 1859 1832 1833
+f 1833 1860 1859
+f 1861 1859 1860
+f 1860 1862 1861
+f 1863 1861 1862
+f 1862 1864 1863
+f 1865 1863 1864
+f 1864 1866 1865
+f 685 1865 1866
+f 1866 686 685
+f 1855 1831 1832
+f 1832 1859 1855
+f 1856 1855 1859
+f 1859 1861 1856
+f 1857 1856 1861
+f 1861 1863 1857
+f 1858 1857 1863
+f 1863 1865 1858
+f 680 1858 1865
+f 1865 685 680
+f 1860 1833 1834
+f 1834 1867 1860
+f 1862 1860 1867
+f 1867 1868 1862
+f 1864 1862 1868
+f 1868 1869 1864
+f 1866 1864 1869
+f 1869 1870 1866
+f 686 1866 1870
+f 1870 689 686
+f 1834 1657 1694
+f 1694 1867 1834
+f 1868 1867 1694
+f 1694 1695 1868
+f 1696 1869 1868
+f 1868 1695 1696
+f 1869 1696 1697
+f 1697 1870 1869
+f 689 1870 1697
+f 1697 532 689
+f 1871 1872 1873
+f 1873 1874 1871
+f 1875 1876 1872
+f 1872 1871 1875
+f 1877 1878 1876
+f 1876 1875 1877
+f 1879 1880 1878
+f 1878 1877 1879
+f 1881 1882 1880
+f 1880 1879 1881
+f 1883 1884 1882
+f 1882 1881 1883
+f 1885 1886 1884
+f 1884 1883 1885
+f 1887 1888 1886
+f 1886 1885 1887
+f 1889 1890 1888
+f 1888 1887 1889
+f 1891 1892 1890
+f 1890 1889 1891
+f 1893 1894 1892
+f 1892 1891 1893
+f 1895 1896 1894
+f 1894 1893 1895
+f 1872 1897 1898
+f 1898 1873 1872
+f 1897 1899 1900
+f 1900 1898 1897
+f 1899 1901 1902
+f 1902 1900 1899
+f 1901 1903 1904
+f 1904 1902 1901
+f 1903 1905 1906
+f 1906 1904 1903
+f 1876 1907 1897
+f 1897 1872 1876
+f 1907 1908 1899
+f 1899 1897 1907
+f 1908 1909 1901
+f 1901 1899 1908
+f 1909 1910 1903
+f 1903 1901 1909
+f 1910 1911 1905
+f 1905 1903 1910
+f 1878 1912 1907
+f 1907 1876 1878
+f 1912 1913 1908
+f 1908 1907 1912
+f 1913 1914 1909
+f 1909 1908 1913
+f 1914 1915 1910
+f 1910 1909 1914
+f 1915 1916 1911
+f 1911 1910 1915
+f 1880 1917 1912
+f 1912 1878 1880
+f 1917 1918 1913
+f 1913 1912 1917
+f 1918 1919 1914
+f 1914 1913 1918
+f 1919 1920 1915
+f 1915 1914 1919
+f 1920 1921 1916
+f 1916 1915 1920
+f 1882 1922 1917
+f 1917 1880 1882
+f 1922 1923 1918
+f 1918 1917 1922
+f 1923 1924 1919
+f 1919 1918 1923
+f 1924 1925 1920
+f 1920 1919 1924
+f 1925 1926 1921
+f 1921 1920 1925
+f 1884 1927 1922
+f 1922 1882 1884
+f 1927 1928 1923
+f 1923 1922 1927
+f 1928 1929 1924
+f 1924 1923 1928
+f 1929 1930 1925
+f 1925 1924 1929
+f 1930 1931 1926
+f 1926 1925 1930
+f 1886 1932 1927
+f 1927 1884 1886
+f 1932 1933 1928
+f 1928 1927 1932
+f 1933 1934 1929
+f 1929 1928 1933
+f 1934 1935 1930
+f 1930 1929 1934
+f 1935 1936 1931
+f 1931 1930 1935
+f 1888 1937 1932
+f 1932 1886 1888
+f 1937 1938 1933
+f 1933 1932 1937
+f 1938 1939 1934
+f 1934 1933 1938
+f 1939 1940 1935
+f 1935 1934 1939
+f 1940 1941 1936
+f 1936 1935 1940
+f 1890 1942 1937
+f 1937 1888 1890
+f 1942 1943 1938
+f 1938 1937 1942
+f 1943 1944 1939
+f 1939 1938 1943
+f 1944 1945 1940
+f 1940 1939 1944
+f 1945 1946 1941
+f 1941 1940 1945
+f 1892 1947 1942
+f 1942 1890 1892
+f 1947 1948 1943
+f 1943 1942 1947
+f 1948 1949 1944
+f 1944 1943 1948
+f 1949 1950 1945
+f 1945 1944 1949
+f 1950 1951 1946
+f 1946 1945 1950
+f 1894 1952 1947
+f 1947 1892 1894
+f 1952 1953 1948
+f 1948 1947 1952
+f 1953 1954 1949
+f 1949 1948 1953
+f 1954 1955 1950
+f 1950 1949 1954
+f 1955 1956 1951
+f 1951 1950 1955
+f 1896 1957 1952
+f 1952 1894 1896
+f 1957 1958 1953
+f 1953 1952 1957
+f 1958 1959 1954
+f 1954 1953 1958
+f 1959 1960 1955
+f 1955 1954 1959
+f 1960 1961 1956
+f 1956 1955 1960
+f 1874 1873 1962
+f 1962 1963 1874
+f 1963 1962 1964
+f 1964 1965 1963
+f 1965 1964 1966
+f 1966 1967 1965
+f 1967 1966 1968
+f 1968 1969 1967
+f 1969 1968 1970
+f 1970 1971 1969
+f 1971 1970 1972
+f 1972 1973 1971
+f 1973 1972 1974
+f 1974 1975 1973
+f 1975 1974 1976
+f 1976 1977 1975
+f 1977 1976 1978
+f 1978 1979 1977
+f 1979 1978 1980
+f 1980 1981 1979
+f 1981 1980 1982
+f 1982 1983 1981
+f 1983 1982 1896
+f 1896 1895 1983
+f 1873 1898 1984
+f 1984 1962 1873
+f 1898 1900 1985
+f 1985 1984 1898
+f 1900 1902 1986
+f 1986 1985 1900
+f 1902 1904 1987
+f 1987 1986 1902
+f 1904 1906 1988
+f 1988 1987 1904
+f 1962 1984 1989
+f 1989 1964 1962
+f 1984 1985 1990
+f 1990 1989 1984
+f 1985 1986 1991
+f 1991 1990 1985
+f 1986 1987 1992
+f 1992 1991 1986
+f 1987 1988 1993
+f 1993 1992 1987
+f 1964 1989 1994
+f 1994 1966 1964
+f 1989 1990 1995
+f 1995 1994 1989
+f 1990 1991 1996
+f 1996 1995 1990
+f 1991 1992 1997
+f 1997 1996 1991
+f 1992 1993 1998
+f 1998 1997 1992
+f 1966 1994 1999
+f 1999 1968 1966
+f 1994 1995 2000
+f 2000 1999 1994
+f 1995 1996 2001
+f 2001 2000 1995
+f 1996 1997 2002
+f 2002 2001 1996
+f 1997 1998 2003
+f 2003 2002 1997
+f 1968 1999 2004
+f 2004 1970 1968
+f 1999 2000 2005
+f 2005 2004 1999
+f 2000 2001 2006
+f 2006 2005 2000
+f 2001 2002 2007
+f 2007 2006 2001
+f 2002 2003 2008
+f 2008 2007 2002
+f 1970 2004 2009
+f 2009 1972 1970
+f 2004 2005 2010
+f 2010 2009 2004
+f 2005 2006 2011
+f 2011 2010 2005
+f 2006 2007 2012
+f 2012 2011 2006
+f 2007 2008 2013
+f 2013 2012 2007
+f 1972 2009 2014
+f 2014 1974 1972
+f 2009 2010 2015
+f 2015 2014 2009
+f 2010 2011 2016
+f 2016 2015 2010
+f 2011 2012 2017
+f 2017 2016 2011
+f 2012 2013 2018
+f 2018 2017 2012
+f 1974 2014 2019
+f 2019 1976 1974
+f 2014 2015 2020
+f 2020 2019 2014
+f 2015 2016 2021
+f 2021 2020 2015
+f 2016 2017 2022
+f 2022 2021 2016
+f 2017 2018 2023
+f 2023 2022 2017
+f 1976 2019 2024
+f 2024 1978 1976
+f 2019 2020 2025
+f 2025 2024 2019
+f 2020 2021 2026
+f 2026 2025 2020
+f 2021 2022 2027
+f 2027 2026 2021
+f 2022 2023 2028
+f 2028 2027 2022
+f 1978 2024 2029
+f 2029 1980 1978
+f 2024 2025 2030
+f 2030 2029 2024
+f 2025 2026 2031
+f 2031 2030 2025
+f 2026 2027 2032
+f 2032 2031 2026
+f 2027 2028 2033
+f 2033 2032 2027
+f 1980 2029 2034
+f 2034 1982 1980
+f 2029 2030 2035
+f 2035 2034 2029
+f 2030 2031 2036
+f 2036 2035 2030
+f 2031 2032 2037
+f 2037 2036 2031
+f 2032 2033 2038
+f 2038 2037 2032
+f 1982 2034 1957
+f 1957 1896 1982
+f 2034 2035 1958
+f 1958 1957 2034
+f 2035 2036 1959
+f 1959 1958 2035
+f 2036 2037 1960
+f 1960 1959 2036
+f 2037 2038 1961
+f 1961 1960 2037
+f 168 1362 1325
+f 1325 160 168
+f 584 1032 177
+f 177 176 584
+f 183 1033 1361
+f 1361 184 183
+f 1362 1364 1356
+f 1356 1325 1362
+f 1364 1366 1357
+f 1357 1356 1364
+f 1366 1368 1358
+f 1358 1357 1366
+f 1368 1370 1359
+f 1359 1358 1368
+f 1370 1372 1360
+f 1360 1359 1370
+f 1503 1032 584
+f 584 605 1503
+f 605 606 1501
+f 1501 1503 605
+f 606 607 1499
+f 1499 1501 606
+f 607 608 1496
+f 1496 1499 607
+f 608 609 1497
+f 1497 1496 608
+f 1033 1502 1363
+f 1363 1361 1033
+f 1502 1500 1365
+f 1365 1363 1502
+f 1500 1498 1367
+f 1367 1365 1500
+f 1498 1495 1369
+f 1369 1367 1498
+f 1495 1494 1371
+f 1371 1369 1495
+f 200 2039 2040
+f 2040 201 200
+f 2041 876 2040
+f 2040 2039 2041
+f 202 2042 2039
+f 2039 200 202
+f 2043 2041 2039
+f 2039 2042 2043
+f 2042 202 203
+f 203 2044 2042
+f 2045 2043 2042
+f 2042 2044 2045
+f 67 1527 2044
+f 2044 203 67
+f 1528 2045 2044
+f 2044 1527 1528
+f 1529 1532 2046
+f 2046 2047 1529
+f 2048 2046 1532
+f 1532 1534 2048
+f 1534 397 744
+f 744 2048 1534
+f 2047 2046 2049
+f 2049 2050 2047
+f 2046 2048 2051
+f 2051 2049 2046
+f 2048 744 747
+f 747 2051 2048
+f 2050 2049 2052
+f 2052 2053 2050
+f 2049 2051 2054
+f 2054 2052 2049
+f 2051 747 750
+f 750 2054 2051
+f 2053 2052 2055
+f 2055 2056 2053
+f 2052 2054 2057
+f 2057 2055 2052
+f 2054 750 759
+f 759 2057 2054
+f 2056 2055 1379
+f 1379 737 2056
+f 2055 2057 1380
+f 1380 1379 2055
+f 2057 759 764
+f 764 1380 2057
+f 2058 1547 540
+f 540 871 2058
+f 2059 1549 1547
+f 1547 2058 2059
+f 1244 2058 871
+f 871 869 1244
+f 1247 2059 2058
+f 2058 1244 1247
+f 869 866 1245
+f 1245 1244 869
+f 1249 1245 866
+f 866 865 1249
+f 1549 2059 2060
+f 2060 1550 1549
+f 1550 2060 2061
+f 2061 1552 1550
+f 2059 1247 1382
+f 1382 2060 2059
+f 2060 1382 1384
+f 1384 2061 2060
+f 2061 2062 1556
+f 1556 1552 2061
+f 2062 2063 1558
+f 1558 1556 2062
+f 2063 2064 1560
+f 1560 1558 2063
+f 2064 2065 1562
+f 1562 1560 2064
+f 1384 1401 2062
+f 2062 2061 1384
+f 1401 1403 2063
+f 2063 2062 1401
+f 1403 1405 2064
+f 2064 2063 1403
+f 1405 1407 2065
+f 2065 2064 1405
+f 1571 1570 2066
+f 2066 2067 1571
+f 1570 1573 2068
+f 2068 2066 1570
+f 1573 1575 2069
+f 2069 2068 1573
+f 1575 447 788
+f 788 2069 1575
+f 2067 2066 2070
+f 2070 2071 2067
+f 2066 2068 2072
+f 2072 2070 2066
+f 2068 2069 2073
+f 2073 2072 2068
+f 2069 788 791
+f 791 2073 2069
+f 2071 2070 2074
+f 2074 2075 2071
+f 2070 2072 2076
+f 2076 2074 2070
+f 2072 2073 2077
+f 2077 2076 2072
+f 2073 791 794
+f 794 2077 2073
+f 2075 2074 2078
+f 2078 2079 2075
+f 2074 2076 2080
+f 2080 2078 2074
+f 2076 2077 2081
+f 2081 2080 2076
+f 2077 794 797
+f 797 2081 2077
+f 2079 2078 2082
+f 2082 2083 2079
+f 2078 2080 2084
+f 2084 2082 2078
+f 2080 2081 2085
+f 2085 2084 2080
+f 2081 797 800
+f 800 2085 2081
+f 2086 2087 2088
+f 2088 2089 2086
+f 2087 2090 2091
+f 2091 2088 2087
+f 2090 2092 2093
+f 2093 2091 2090
+f 2092 806 805
+f 805 2093 2092
+f 2083 2082 2087
+f 2087 2086 2083
+f 2082 2084 2090
+f 2090 2087 2082
+f 2084 2085 2092
+f 2092 2090 2084
+f 2085 800 806
+f 806 2092 2085
+f 2089 2088 2094
+f 2094 2095 2089
+f 2088 2091 2096
+f 2096 2094 2088
+f 2091 2093 2097
+f 2097 2096 2091
+f 2093 805 809
+f 809 2097 2093
+f 2095 2094 2098
+f 2098 2099 2095
+f 2094 2096 2100
+f 2100 2098 2094
+f 2096 2097 2101
+f 2101 2100 2096
+f 2097 809 812
+f 812 2101 2097
+f 2065 2102 1608
+f 1608 1562 2065
+f 2102 2103 1610
+f 1610 1608 2102
+f 2103 2104 1612
+f 1612 1610 2103
+f 2104 2105 1614
+f 1614 1612 2104
+f 2105 815 477
+f 477 1614 2105
+f 1407 1413 2102
+f 2102 2065 1407
+f 1413 1415 2103
+f 2103 2102 1413
+f 1415 1417 2104
+f 2104 2103 1415
+f 1417 1419 2105
+f 2105 2104 1417
+f 1419 818 815
+f 815 2105 1419
+f 801 2106 2107
+f 2107 802 801
+f 2106 2108 2109
+f 2109 2107 2106
+f 2108 2110 2111
+f 2111 2109 2108
+f 2110 2112 2113
+f 2113 2111 2110
+f 2112 829 828
+f 828 2113 2112
+f 798 1512 2106
+f 2106 801 798
+f 1512 1513 2108
+f 2108 2106 1512
+f 1513 1514 2110
+f 2110 2108 1513
+f 1514 1515 2112
+f 2112 2110 1514
+f 1515 357 829
+f 829 2112 1515
+f 802 2107 2114
+f 2114 807 802
+f 2107 2109 2115
+f 2115 2114 2107
+f 2109 2111 2116
+f 2116 2115 2109
+f 2111 2113 2117
+f 2117 2116 2111
+f 2113 828 831
+f 831 2117 2113
+f 807 2114 2118
+f 2118 810 807
+f 2114 2115 2119
+f 2119 2118 2114
+f 2115 2116 2120
+f 2120 2119 2115
+f 2116 2117 2121
+f 2121 2120 2116
+f 2117 831 833
+f 833 2121 2117
+f 443 1637 2122
+f 2122 786 443
+f 1637 1639 2123
+f 2123 2122 1637
+f 1639 1641 2124
+f 2124 2123 1639
+f 1641 1643 2125
+f 2125 2124 1641
+f 1643 499 835
+f 835 2125 1643
+f 786 2122 2126
+f 2126 789 786
+f 2122 2123 2127
+f 2127 2126 2122
+f 2123 2124 2128
+f 2128 2127 2123
+f 2124 2125 2129
+f 2129 2128 2124
+f 2125 835 837
+f 837 2129 2125
+f 789 2126 1504
+f 1504 792 789
+f 2126 2127 1506
+f 1506 1504 2126
+f 2127 2128 1508
+f 1508 1506 2127
+f 2128 2129 1510
+f 1510 1508 2128
+f 2129 837 353
+f 353 1510 2129
+f 2130 1649 1529
+f 1529 2047 2130
+f 2130 2047 2050
+f 2050 2131 2130
+f 2131 2050 2053
+f 2053 2132 2131
+f 2132 2053 2056
+f 2056 2133 2132
+f 2134 2133 2056
+f 2056 737 2134
+f 2135 735 734
+f 734 2136 2135
+f 2134 737 735
+f 735 2135 2134
+f 2136 734 739
+f 739 2137 2136
+f 2138 2137 739
+f 739 741 2138
+f 1658 1649 2130
+f 2130 2139 1658
+f 2139 2140 1660
+f 1660 1658 2139
+f 1662 1660 2140
+f 2140 2141 1662
+f 1664 1662 2141
+f 2141 2142 1664
+f 2142 840 508
+f 508 1664 2142
+f 2139 2130 2131
+f 2131 2143 2139
+f 2140 2139 2143
+f 2143 2144 2140
+f 2141 2140 2144
+f 2144 2145 2141
+f 2142 2141 2145
+f 2145 2146 2142
+f 840 2142 2146
+f 2146 843 840
+f 2143 2131 2132
+f 2132 2147 2143
+f 2144 2143 2147
+f 2147 2148 2144
+f 2145 2144 2148
+f 2148 2149 2145
+f 2146 2145 2149
+f 2149 2150 2146
+f 843 2146 2150
+f 2150 846 843
+f 2133 2151 2147
+f 2147 2132 2133
+f 2151 2152 2148
+f 2148 2147 2151
+f 2152 2153 2149
+f 2149 2148 2152
+f 2153 2154 2150
+f 2150 2149 2153
+f 2154 849 846
+f 846 2150 2154
+f 2134 2155 2151
+f 2151 2133 2134
+f 2155 2156 2152
+f 2152 2151 2155
+f 2156 2157 2153
+f 2153 2152 2156
+f 2157 2158 2154
+f 2154 2153 2157
+f 2158 852 849
+f 849 2154 2158
+f 2159 2135 2136
+f 2136 2160 2159
+f 2161 2159 2160
+f 2160 2162 2161
+f 2163 2161 2162
+f 2162 2164 2163
+f 2165 2163 2164
+f 2164 2166 2165
+f 857 2165 2166
+f 2166 858 857
+f 2155 2134 2135
+f 2135 2159 2155
+f 2156 2155 2159
+f 2159 2161 2156
+f 2157 2156 2161
+f 2161 2163 2157
+f 2158 2157 2163
+f 2163 2165 2158
+f 852 2158 2165
+f 2165 857 852
+f 2160 2136 2137
+f 2137 2167 2160
+f 2162 2160 2167
+f 2167 2168 2162
+f 2164 2162 2168
+f 2168 2169 2164
+f 2166 2164 2169
+f 2169 2170 2166
+f 858 2166 2170
+f 2170 861 858
+f 2137 2138 2171
+f 2171 2167 2137
+f 2168 2167 2171
+f 2171 2172 2168
+f 2173 2169 2168
+f 2168 2172 2173
+f 2169 2173 2174
+f 2174 2170 2169
+f 861 2170 2174
+f 2174 864 861
+f 214 201 2040
+f 2040 2175 214
+f 875 2175 2040
+f 2040 876 875
+f 215 214 2175
+f 2175 2176 215
+f 877 2176 2175
+f 2175 875 877
+f 2176 2177 216
+f 216 215 2176
+f 878 2177 2176
+f 2176 877 878
+f 83 216 2177
+f 2177 1701 83
+f 549 1701 2177
+f 2177 878 549
+f 229 1425 1442
+f 1442 230 229
+f 2178 241 240
+f 240 760 2178
+f 241 2178 2179
+f 2179 245 241
+f 245 2179 1424
+f 1424 248 245
+f 1425 1427 1473
+f 1473 1442 1425
+f 1427 1429 1474
+f 1474 1473 1427
+f 1429 1431 1475
+f 1475 1474 1429
+f 1431 1433 1476
+f 1476 1475 1431
+f 1433 1435 1477
+f 1477 1476 1433
+f 2180 2178 760
+f 760 781 2180
+f 781 782 2181
+f 2181 2180 781
+f 782 783 2182
+f 2182 2181 782
+f 783 784 2183
+f 2183 2182 783
+f 784 785 2184
+f 2184 2183 784
+f 2178 2180 2185
+f 2185 2179 2178
+f 2180 2181 2186
+f 2186 2185 2180
+f 2181 2182 2187
+f 2187 2186 2181
+f 2182 2183 2188
+f 2188 2187 2182
+f 2183 2184 2189
+f 2189 2188 2183
+f 2179 2185 1426
+f 1426 1424 2179
+f 2185 2186 1428
+f 1428 1426 2185
+f 2186 2187 1430
+f 1430 1428 2186
+f 2187 2188 1432
+f 1432 1430 2187
+f 2188 2189 1434
+f 1434 1432 2188
+f 1732 2190 2191
+f 2191 1733 1732
+f 1733 2191 897
+f 897 571 1733
+f 2190 2192 2193
+f 2193 2191 2190
+f 2191 2193 899
+f 899 897 2191
+f 2192 2194 2195
+f 2195 2193 2192
+f 2193 2195 901
+f 901 899 2193
+f 2194 2196 2197
+f 2197 2195 2194
+f 2195 2197 909
+f 909 901 2195
+f 2196 892 2198
+f 2198 2197 2196
+f 2198 914 909
+f 909 2197 2198
+f 2199 1007 696
+f 696 1743 2199
+f 2200 2199 1743
+f 1743 1745 2200
+f 1516 1005 1007
+f 1007 2199 1516
+f 1517 1516 2199
+f 2199 2200 1517
+f 1005 1516 1519
+f 1519 1002 1005
+f 1249 865 1002
+f 1002 1519 1249
+f 1745 1747 2201
+f 2201 2200 1745
+f 1747 1749 2202
+f 2202 2201 1747
+f 2200 2201 2203
+f 2203 1517 2200
+f 2201 2202 2204
+f 2204 2203 2201
+f 1749 1751 2205
+f 2205 2202 1749
+f 1751 1753 2206
+f 2206 2205 1751
+f 1753 1755 2207
+f 2207 2206 1753
+f 1755 1757 2208
+f 2208 2207 1755
+f 2202 2205 2209
+f 2209 2204 2202
+f 2205 2206 2210
+f 2210 2209 2205
+f 2206 2207 2211
+f 2211 2210 2206
+f 2207 2208 2212
+f 2212 2211 2207
+f 2213 2214 1759
+f 1759 1758 2213
+f 2214 2215 1762
+f 1762 1759 2214
+f 2215 2216 1764
+f 1764 1762 2215
+f 2216 935 615
+f 615 1764 2216
+f 2217 2218 2214
+f 2214 2213 2217
+f 2218 2219 2215
+f 2215 2214 2218
+f 2219 2220 2216
+f 2216 2215 2219
+f 2220 938 935
+f 935 2216 2220
+f 2221 2222 2218
+f 2218 2217 2221
+f 2222 2223 2219
+f 2219 2218 2222
+f 2223 2224 2220
+f 2220 2219 2223
+f 2224 941 938
+f 938 2220 2224
+f 2225 2226 2222
+f 2222 2221 2225
+f 2226 2227 2223
+f 2223 2222 2226
+f 2227 2228 2224
+f 2224 2223 2227
+f 2228 944 941
+f 941 2224 2228
+f 2229 2230 2226
+f 2226 2225 2229
+f 2230 2231 2227
+f 2227 2226 2230
+f 2231 2232 2228
+f 2228 2227 2231
+f 2232 947 944
+f 944 2228 2232
+f 2233 2234 2235
+f 2235 2236 2233
+f 2234 2237 2238
+f 2238 2235 2234
+f 2237 2239 2240
+f 2240 2238 2237
+f 2239 953 952
+f 952 2240 2239
+f 2236 2235 2230
+f 2230 2229 2236
+f 2235 2238 2231
+f 2231 2230 2235
+f 2238 2240 2232
+f 2232 2231 2238
+f 2240 952 947
+f 947 2232 2240
+f 2241 2242 2234
+f 2234 2233 2241
+f 2242 2243 2237
+f 2237 2234 2242
+f 2243 2244 2239
+f 2239 2237 2243
+f 2244 956 953
+f 953 2239 2244
+f 2099 2098 2242
+f 2242 2241 2099
+f 2098 2100 2243
+f 2243 2242 2098
+f 2100 2101 2244
+f 2244 2243 2100
+f 2101 812 956
+f 956 2244 2101
+f 1757 1795 2245
+f 2245 2208 1757
+f 1795 1797 2246
+f 2246 2245 1795
+f 1797 1799 2247
+f 2247 2246 1797
+f 1799 1801 2248
+f 2248 2247 1799
+f 1801 641 959
+f 959 2248 1801
+f 2208 2245 2249
+f 2249 2212 2208
+f 2245 2246 2250
+f 2250 2249 2245
+f 2246 2247 2251
+f 2251 2250 2246
+f 2247 2248 2252
+f 2252 2251 2247
+f 2248 959 962
+f 962 2252 2248
+f 951 2253 2254
+f 2254 948 951
+f 2253 2255 2256
+f 2256 2254 2253
+f 2255 2257 2258
+f 2258 2256 2255
+f 2257 2259 2260
+f 2260 2258 2257
+f 2259 971 970
+f 970 2260 2259
+f 948 2254 1258
+f 1258 946 948
+f 2254 2256 1259
+f 1259 1258 2254
+f 2256 2258 1260
+f 1260 1259 2256
+f 2258 2260 1261
+f 1261 1260 2258
+f 2260 970 362
+f 362 1261 2260
+f 954 2261 2253
+f 2253 951 954
+f 2261 2262 2255
+f 2255 2253 2261
+f 2262 2263 2257
+f 2257 2255 2262
+f 2263 2264 2259
+f 2259 2257 2263
+f 2264 973 971
+f 971 2259 2264
+f 810 2118 2261
+f 2261 954 810
+f 2118 2119 2262
+f 2262 2261 2118
+f 2119 2120 2263
+f 2263 2262 2119
+f 2120 2121 2264
+f 2264 2263 2120
+f 2121 833 973
+f 973 2264 2121
+f 934 2265 1814
+f 1814 610 934
+f 2265 2266 1816
+f 1816 1814 2265
+f 2266 2267 1818
+f 1818 1816 2266
+f 2267 2268 1820
+f 1820 1818 2267
+f 2268 975 660
+f 660 1820 2268
+f 937 2269 2265
+f 2265 934 937
+f 2269 2270 2266
+f 2266 2265 2269
+f 2270 2271 2267
+f 2267 2266 2270
+f 2271 2272 2268
+f 2268 2267 2271
+f 2272 977 975
+f 975 2268 2272
+f 940 1251 2269
+f 2269 937 940
+f 1251 1253 2270
+f 2270 2269 1251
+f 1253 1255 2271
+f 2271 2270 1253
+f 1255 1257 2272
+f 2272 2271 1255
+f 1257 359 977
+f 977 2272 1257
+f 2273 2190 1732
+f 1732 1827 2273
+f 2274 2192 2190
+f 2190 2273 2274
+f 2275 2194 2192
+f 2192 2274 2275
+f 2275 2276 2196
+f 2196 2194 2275
+f 2277 892 2196
+f 2196 2276 2277
+f 2278 2279 890
+f 890 889 2278
+f 2277 2278 889
+f 889 892 2277
+f 2279 2280 894
+f 894 890 2279
+f 2138 741 894
+f 894 2280 2138
+f 1835 2281 2273
+f 2273 1827 1835
+f 2281 1835 1838
+f 1838 2282 2281
+f 1839 2283 2282
+f 2282 1838 1839
+f 1841 2284 2283
+f 2283 1839 1841
+f 2284 1841 667
+f 667 980 2284
+f 2281 2285 2274
+f 2274 2273 2281
+f 2282 2286 2285
+f 2285 2281 2282
+f 2283 2287 2286
+f 2286 2282 2283
+f 2284 2288 2287
+f 2287 2283 2284
+f 980 983 2288
+f 2288 2284 980
+f 2285 2289 2275
+f 2275 2274 2285
+f 2286 2290 2289
+f 2289 2285 2286
+f 2287 2291 2290
+f 2290 2286 2287
+f 2288 2292 2291
+f 2291 2287 2288
+f 983 986 2292
+f 2292 2288 983
+f 2276 2275 2289
+f 2289 2293 2276
+f 2293 2289 2290
+f 2290 2294 2293
+f 2294 2290 2291
+f 2291 2295 2294
+f 2295 2291 2292
+f 2292 2296 2295
+f 2296 2292 986
+f 986 989 2296
+f 2277 2276 2293
+f 2293 2297 2277
+f 2297 2293 2294
+f 2294 2298 2297
+f 2298 2294 2295
+f 2295 2299 2298
+f 2299 2295 2296
+f 2296 2300 2299
+f 2300 2296 989
+f 989 992 2300
+f 2301 2302 2279
+f 2279 2278 2301
+f 2303 2304 2302
+f 2302 2301 2303
+f 2305 2306 2304
+f 2304 2303 2305
+f 2307 2308 2306
+f 2306 2305 2307
+f 998 997 2308
+f 2308 2307 998
+f 2297 2301 2278
+f 2278 2277 2297
+f 2298 2303 2301
+f 2301 2297 2298
+f 2299 2305 2303
+f 2303 2298 2299
+f 2300 2307 2305
+f 2305 2299 2300
+f 992 998 2307
+f 2307 2300 992
+f 2302 2309 2280
+f 2280 2279 2302
+f 2304 2310 2309
+f 2309 2302 2304
+f 2306 2311 2310
+f 2310 2304 2306
+f 2308 2312 2311
+f 2311 2306 2308
+f 997 1001 2312
+f 2312 2308 997
+f 2280 2309 2171
+f 2171 2138 2280
+f 2310 2172 2171
+f 2171 2309 2310
+f 2173 2172 2310
+f 2310 2311 2173
+f 2311 2312 2174
+f 2174 2173 2311
+f 1001 864 2174
+f 2174 2312 1001
+f 2313 2314 2315
+f 2315 2316 2313
+f 2316 2315 2317
+f 2317 2318 2316
+f 2318 2317 2319
+f 2319 2320 2318
+f 2320 2319 2321
+f 2321 2322 2320
+f 2322 2321 2323
+f 2323 2324 2322
+f 2324 2323 2325
+f 2325 2326 2324
+f 2326 2325 2327
+f 2327 2328 2326
+f 2328 2327 2329
+f 2329 2330 2328
+f 2330 2329 2331
+f 2331 2332 2330
+f 2332 2331 2333
+f 2333 2334 2332
+f 2334 2333 2335
+f 2335 2336 2334
+f 2336 2335 2337
+f 2337 2338 2336
+f 2314 2339 2340
+f 2340 2315 2314
+f 2339 2341 2342
+f 2342 2340 2339
+f 2341 2343 2344
+f 2344 2342 2341
+f 2343 2345 2346
+f 2346 2344 2343
+f 2345 2347 2348
+f 2348 2346 2345
+f 2315 2340 2349
+f 2349 2317 2315
+f 2340 2342 2350
+f 2350 2349 2340
+f 2342 2344 2351
+f 2351 2350 2342
+f 2344 2346 2352
+f 2352 2351 2344
+f 2346 2348 2353
+f 2353 2352 2346
+f 2317 2349 2354
+f 2354 2319 2317
+f 2349 2350 2355
+f 2355 2354 2349
+f 2350 2351 2356
+f 2356 2355 2350
+f 2351 2352 2357
+f 2357 2356 2351
+f 2352 2353 2358
+f 2358 2357 2352
+f 2319 2354 2359
+f 2359 2321 2319
+f 2354 2355 2360
+f 2360 2359 2354
+f 2355 2356 2361
+f 2361 2360 2355
+f 2356 2357 2362
+f 2362 2361 2356
+f 2357 2358 2363
+f 2363 2362 2357
+f 2321 2359 2364
+f 2364 2323 2321
+f 2359 2360 2365
+f 2365 2364 2359
+f 2360 2361 2366
+f 2366 2365 2360
+f 2361 2362 2367
+f 2367 2366 2361
+f 2362 2363 2368
+f 2368 2367 2362
+f 2323 2364 2369
+f 2369 2325 2323
+f 2364 2365 2370
+f 2370 2369 2364
+f 2365 2366 2371
+f 2371 2370 2365
+f 2366 2367 2372
+f 2372 2371 2366
+f 2367 2368 2373
+f 2373 2372 2367
+f 2325 2369 2374
+f 2374 2327 2325
+f 2369 2370 2375
+f 2375 2374 2369
+f 2370 2371 2376
+f 2376 2375 2370
+f 2371 2372 2377
+f 2377 2376 2371
+f 2372 2373 2378
+f 2378 2377 2372
+f 2327 2374 2379
+f 2379 2329 2327
+f 2374 2375 2380
+f 2380 2379 2374
+f 2375 2376 2381
+f 2381 2380 2375
+f 2376 2377 2382
+f 2382 2381 2376
+f 2377 2378 2383
+f 2383 2382 2377
+f 2329 2379 2384
+f 2384 2331 2329
+f 2379 2380 2385
+f 2385 2384 2379
+f 2380 2381 2386
+f 2386 2385 2380
+f 2381 2382 2387
+f 2387 2386 2381
+f 2382 2383 2388
+f 2388 2387 2382
+f 2331 2384 2389
+f 2389 2333 2331
+f 2384 2385 2390
+f 2390 2389 2384
+f 2385 2386 2391
+f 2391 2390 2385
+f 2386 2387 2392
+f 2392 2391 2386
+f 2387 2388 2393
+f 2393 2392 2387
+f 2333 2389 2394
+f 2394 2335 2333
+f 2389 2390 2395
+f 2395 2394 2389
+f 2390 2391 2396
+f 2396 2395 2390
+f 2391 2392 2397
+f 2397 2396 2391
+f 2392 2393 2398
+f 2398 2397 2392
+f 2335 2394 2399
+f 2399 2337 2335
+f 2394 2395 2400
+f 2400 2399 2394
+f 2395 2396 2401
+f 2401 2400 2395
+f 2396 2397 2402
+f 2402 2401 2396
+f 2397 2398 2403
+f 2403 2402 2397
+f 2404 2405 2314
+f 2314 2313 2404
+f 2406 2407 2405
+f 2405 2404 2406
+f 2408 2409 2407
+f 2407 2406 2408
+f 2410 2411 2409
+f 2409 2408 2410
+f 2412 2413 2411
+f 2411 2410 2412
+f 2414 2415 2413
+f 2413 2412 2414
+f 2416 2417 2415
+f 2415 2414 2416
+f 2418 2419 2417
+f 2417 2416 2418
+f 2420 2421 2419
+f 2419 2418 2420
+f 2422 2423 2421
+f 2421 2420 2422
+f 2424 2425 2423
+f 2423 2422 2424
+f 2338 2337 2425
+f 2425 2424 2338
+f 2405 2426 2339
+f 2339 2314 2405
+f 2426 2427 2341
+f 2341 2339 2426
+f 2427 2428 2343
+f 2343 2341 2427
+f 2428 2429 2345
+f 2345 2343 2428
+f 2429 2430 2347
+f 2347 2345 2429
+f 2407 2431 2426
+f 2426 2405 2407
+f 2431 2432 2427
+f 2427 2426 2431
+f 2432 2433 2428
+f 2428 2427 2432
+f 2433 2434 2429
+f 2429 2428 2433
+f 2434 2435 2430
+f 2430 2429 2434
+f 2409 2436 2431
+f 2431 2407 2409
+f 2436 2437 2432
+f 2432 2431 2436
+f 2437 2438 2433
+f 2433 2432 2437
+f 2438 2439 2434
+f 2434 2433 2438
+f 2439 2440 2435
+f 2435 2434 2439
+f 2411 2441 2436
+f 2436 2409 2411
+f 2441 2442 2437
+f 2437 2436 2441
+f 2442 2443 2438
+f 2438 2437 2442
+f 2443 2444 2439
+f 2439 2438 2443
+f 2444 2445 2440
+f 2440 2439 2444
+f 2413 2446 2441
+f 2441 2411 2413
+f 2446 2447 2442
+f 2442 2441 2446
+f 2447 2448 2443
+f 2443 2442 2447
+f 2448 2449 2444
+f 2444 2443 2448
+f 2449 2450 2445
+f 2445 2444 2449
+f 2415 2451 2446
+f 2446 2413 2415
+f 2451 2452 2447
+f 2447 2446 2451
+f 2452 2453 2448
+f 2448 2447 2452
+f 2453 2454 2449
+f 2449 2448 2453
+f 2454 2455 2450
+f 2450 2449 2454
+f 2417 2456 2451
+f 2451 2415 2417
+f 2456 2457 2452
+f 2452 2451 2456
+f 2457 2458 2453
+f 2453 2452 2457
+f 2458 2459 2454
+f 2454 2453 2458
+f 2459 2460 2455
+f 2455 2454 2459
+f 2419 2461 2456
+f 2456 2417 2419
+f 2461 2462 2457
+f 2457 2456 2461
+f 2462 2463 2458
+f 2458 2457 2462
+f 2463 2464 2459
+f 2459 2458 2463
+f 2464 2465 2460
+f 2460 2459 2464
+f 2421 2466 2461
+f 2461 2419 2421
+f 2466 2467 2462
+f 2462 2461 2466
+f 2467 2468 2463
+f 2463 2462 2467
+f 2468 2469 2464
+f 2464 2463 2468
+f 2469 2470 2465
+f 2465 2464 2469
+f 2423 2471 2466
+f 2466 2421 2423
+f 2471 2472 2467
+f 2467 2466 2471
+f 2472 2473 2468
+f 2468 2467 2472
+f 2473 2474 2469
+f 2469 2468 2473
+f 2474 2475 2470
+f 2470 2469 2474
+f 2425 2476 2471
+f 2471 2423 2425
+f 2476 2477 2472
+f 2472 2471 2476
+f 2477 2478 2473
+f 2473 2472 2477
+f 2478 2479 2474
+f 2474 2473 2478
+f 2479 2480 2475
+f 2475 2474 2479
+f 2337 2399 2476
+f 2476 2425 2337
+f 2399 2400 2477
+f 2477 2476 2399
+f 2400 2401 2478
+f 2478 2477 2400
+f 2401 2402 2479
+f 2479 2478 2401
+f 2402 2403 2480
+f 2480 2479 2402
+f 293 2481 2482
+f 2482 301 293
+f 910 310 309
+f 309 1043 910
+f 317 2483 1042
+f 1042 316 317
+f 2481 2484 2485
+f 2485 2482 2481
+f 2484 2486 2487
+f 2487 2485 2484
+f 2486 2488 2489
+f 2489 2487 2486
+f 2488 2490 2491
+f 2491 2489 2488
+f 2490 2492 2493
+f 2493 2491 2490
+f 1270 928 910
+f 910 1043 1270
+f 928 1270 1268
+f 1268 929 928
+f 929 1268 1266
+f 1266 930 929
+f 930 1266 1264
+f 1264 931 930
+f 931 1264 1263
+f 1263 932 931
+f 2483 2494 1271
+f 1271 1042 2483
+f 2494 2495 1269
+f 1269 1271 2494
+f 2495 2496 1267
+f 1267 1269 2495
+f 2496 2497 1265
+f 1265 1267 2496
+f 2497 2498 1262
+f 1262 1265 2497
+f 99 103 2499
+f 2499 373 99
+f 103 106 2500
+f 2500 2499 103
+f 106 108 415
+f 415 2500 106
+f 373 2499 2501
+f 2501 378 373
+f 2499 2500 2502
+f 2502 2501 2499
+f 2500 415 416
+f 416 2502 2500
+f 378 2501 2503
+f 2503 387 378
+f 2501 2502 2504
+f 2504 2503 2501
+f 2502 416 417
+f 417 2504 2502
+f 387 2503 1544
+f 1544 388 387
+f 2503 2504 1545
+f 1545 1544 2503
+f 2504 417 418
+f 418 1545 2504
+f 1479 1554 2505
+f 2505 1480 1479
+f 1554 1555 2506
+f 2506 2505 1554
+f 1480 2505 1293
+f 1293 1240 1480
+f 2505 2506 1294
+f 1294 1293 2505
+f 1223 1222 1274
+f 1274 2507 1223
+f 1275 2508 2507
+f 2507 1274 1275
+f 2507 2509 1028
+f 1028 1223 2507
+f 2508 2510 2509
+f 2509 2507 2508
+f 2509 1095 1029
+f 1029 1028 2509
+f 1095 2509 2510
+f 2510 1096 1095
+f 2508 1275 1280
+f 1280 2511 2508
+f 2511 1280 1282
+f 1282 2512 2511
+f 2512 1282 408
+f 408 431 2512
+f 2510 2508 2511
+f 2511 2513 2510
+f 2513 2511 2512
+f 2512 2514 2513
+f 2514 2512 431
+f 431 434 2514
+f 1096 2510 2513
+f 2513 1103 1096
+f 1103 2513 2514
+f 2514 1104 1103
+f 1104 2514 434
+f 434 428 1104
+f 1555 1564 2515
+f 2515 2506 1555
+f 1564 1565 2516
+f 2516 2515 1564
+f 1565 1566 2517
+f 2517 2516 1565
+f 1566 1567 2518
+f 2518 2517 1566
+f 2506 2515 1303
+f 1303 1294 2506
+f 2515 2516 1304
+f 1304 1303 2515
+f 2516 2517 1305
+f 1305 1304 2516
+f 2517 2518 1306
+f 1306 1305 2517
+f 1567 1616 2519
+f 2519 2518 1567
+f 1616 1617 2520
+f 2520 2519 1616
+f 1617 1618 2521
+f 2521 2520 1617
+f 1618 1619 2522
+f 2522 2521 1618
+f 1619 481 485
+f 485 2522 1619
+f 2518 2519 1315
+f 1315 1306 2518
+f 2519 2520 1316
+f 1316 1315 2519
+f 2520 2521 1317
+f 1317 1316 2520
+f 2521 2522 1318
+f 1318 1317 2521
+f 2522 485 487
+f 487 1318 2522
+f 97 1703 1706
+f 1706 115 97
+f 1703 1708 1727
+f 1727 1706 1703
+f 1708 1710 1728
+f 1728 1727 1708
+f 1710 1712 1729
+f 1729 1728 1710
+f 1712 1714 1730
+f 1730 1729 1712
+f 1714 1716 1731
+f 1731 1730 1714
+f 129 1320 2523
+f 2523 130 129
+f 130 2523 2524
+f 2524 133 130
+f 133 2524 2525
+f 2525 136 133
+f 136 2525 2526
+f 2526 139 136
+f 139 2526 2527
+f 2527 142 139
+f 142 2527 1702
+f 1702 96 142
+f 1320 1327 2528
+f 2528 2523 1320
+f 1327 1329 2529
+f 2529 2528 1327
+f 1329 1331 2530
+f 2530 2529 1329
+f 1331 1333 2531
+f 2531 2530 1331
+f 1333 1335 2532
+f 2532 2531 1333
+f 2523 2528 2533
+f 2533 2524 2523
+f 2528 2529 2534
+f 2534 2533 2528
+f 2529 2530 2535
+f 2535 2534 2529
+f 2530 2531 2536
+f 2536 2535 2530
+f 2531 2532 2537
+f 2537 2536 2531
+f 2524 2533 2538
+f 2538 2525 2524
+f 2533 2534 2539
+f 2539 2538 2533
+f 2534 2535 2540
+f 2540 2539 2534
+f 2535 2536 2541
+f 2541 2540 2535
+f 2536 2537 2542
+f 2542 2541 2536
+f 2525 2538 2543
+f 2543 2526 2525
+f 2538 2539 2544
+f 2544 2543 2538
+f 2539 2540 2545
+f 2545 2544 2539
+f 2540 2541 2546
+f 2546 2545 2540
+f 2541 2542 2547
+f 2547 2546 2541
+f 2526 2543 2548
+f 2548 2527 2526
+f 2543 2544 2549
+f 2549 2548 2543
+f 2544 2545 2550
+f 2550 2549 2544
+f 2545 2546 2551
+f 2551 2550 2545
+f 2546 2547 2552
+f 2552 2551 2546
+f 2527 2548 1707
+f 1707 1702 2527
+f 2548 2549 1709
+f 1709 1707 2548
+f 2549 2550 1711
+f 1711 1709 2549
+f 2550 2551 1713
+f 1713 1711 2550
+f 2551 2552 1715
+f 1715 1713 2551
+f 1243 1242 1389
+f 1389 2553 1243
+f 1390 2554 2553
+f 2553 1389 1390
+f 2553 2555 1034
+f 1034 1243 2553
+f 2554 2556 2555
+f 2555 2553 2554
+f 2555 1159 1035
+f 1035 1034 2555
+f 1159 2555 2556
+f 2556 1160 1159
+f 2554 1390 1395
+f 1395 2557 2554
+f 2557 1395 1397
+f 1397 2558 2557
+f 2558 1397 752
+f 752 751 2558
+f 2556 2554 2557
+f 2557 2559 2556
+f 2559 2557 2558
+f 2558 2560 2559
+f 2560 2558 751
+f 751 756 2560
+f 1160 2556 2559
+f 2559 1165 1160
+f 1165 2559 2560
+f 2560 1166 1165
+f 1166 2560 756
+f 756 748 1166
+f 303 307 2561
+f 2561 879 303
+f 307 310 911
+f 911 2561 307
+f 879 2561 2562
+f 2562 884 879
+f 2561 911 912
+f 912 2562 2561
+f 884 2562 2563
+f 2563 891 884
+f 2562 912 913
+f 913 2563 2562
+f 891 2563 2198
+f 2198 892 891
+f 2563 913 914
+f 914 2198 2563
+f 1517 2203 2564
+f 2564 1518 1517
+f 2203 2204 2565
+f 2565 2564 2203
+f 1518 2564 1385
+f 1385 1248 1518
+f 2564 2565 1386
+f 1386 1385 2564
+f 2204 2209 2566
+f 2566 2565 2204
+f 2209 2210 2567
+f 2567 2566 2209
+f 2210 2211 2568
+f 2568 2567 2210
+f 2211 2212 2569
+f 2569 2568 2211
+f 2565 2566 1408
+f 1408 1386 2565
+f 2566 2567 1409
+f 1409 1408 2566
+f 2567 2568 1410
+f 1410 1409 2567
+f 2568 2569 1411
+f 1411 1410 2568
+f 2212 2249 2570
+f 2570 2569 2212
+f 2249 2250 2571
+f 2571 2570 2249
+f 2250 2251 2572
+f 2572 2571 2250
+f 2251 2252 2573
+f 2573 2572 2251
+f 2252 962 966
+f 966 2573 2252
+f 2569 2570 1420
+f 1420 1411 2569
+f 2570 2571 1421
+f 1421 1420 2570
+f 2571 2572 1422
+f 1422 1421 2571
+f 2572 2573 1423
+f 1423 1422 2572
+f 2573 966 824
+f 824 1423 2573
+f 263 1437 2574
+f 2574 278 263
+f 278 2574 2575
+f 2575 281 278
+f 281 2575 2576
+f 2576 284 281
+f 284 2576 2577
+f 2577 287 284
+f 287 2577 2578
+f 2578 290 287
+f 290 2578 2481
+f 2481 293 290
+f 1437 1444 2579
+f 2579 2574 1437
+f 1444 1446 2580
+f 2580 2579 1444
+f 1446 1448 2581
+f 2581 2580 1446
+f 1448 1450 2582
+f 2582 2581 1448
+f 1450 1452 2583
+f 2583 2582 1450
+f 2574 2579 2584
+f 2584 2575 2574
+f 2579 2580 2585
+f 2585 2584 2579
+f 2580 2581 2586
+f 2586 2585 2580
+f 2581 2582 2587
+f 2587 2586 2581
+f 2582 2583 2588
+f 2588 2587 2582
+f 2575 2584 2589
+f 2589 2576 2575
+f 2584 2585 2590
+f 2590 2589 2584
+f 2585 2586 2591
+f 2591 2590 2585
+f 2586 2587 2592
+f 2592 2591 2586
+f 2587 2588 2593
+f 2593 2592 2587
+f 2576 2589 2594
+f 2594 2577 2576
+f 2589 2590 2595
+f 2595 2594 2589
+f 2590 2591 2596
+f 2596 2595 2590
+f 2591 2592 2597
+f 2597 2596 2591
+f 2592 2593 2598
+f 2598 2597 2592
+f 2577 2594 2599
+f 2599 2578 2577
+f 2594 2595 2600
+f 2600 2599 2594
+f 2595 2596 2601
+f 2601 2600 2595
+f 2596 2597 2602
+f 2602 2601 2596
+f 2597 2598 2603
+f 2603 2602 2597
+f 2578 2599 2484
+f 2484 2481 2578
+f 2599 2600 2486
+f 2486 2484 2599
+f 2600 2601 2488
+f 2488 2486 2600
+f 2601 2602 2490
+f 2490 2488 2601
+f 2602 2603 2492
+f 2492 2490 2602
+f 301 2482 2483
+f 2483 317 301
+f 2482 2485 2494
+f 2494 2483 2482
+f 2485 2487 2495
+f 2495 2494 2485
+f 2487 2489 2496
+f 2496 2495 2487
+f 2489 2491 2497
+f 2497 2496 2489
+f 2491 2493 2498
+f 2498 2497 2491
+g patch2
+f 1494 1497 2604
+f 2605 1263 1262
+f 2606 2607 2608
+f 2609 2610 2611
+f 2612 2613 2611
+f 2614 2615 2610
+f 2616 2617 2618
+f 2619 2620 2621
+f 2622 2623 2621
+f 2624 2625 2619
+f 2626 2627 2628
+f 2629 2630 2631
+f 2632 2633 2631
+f 2634 2635 2629
+f 2636 2637 2638
+f 2639 2640 2641
+f 2642 2643 2641
+f 2644 2645 2640
+f 1604 1600 2646
+f 2646 2647 1604
+f 2648 2647 2646
+f 2646 2649 2648
+f 2650 2651 2611
+f 2611 2652 2650
+f 2652 2653 2654
+f 2654 2650 2652
+f 2655 2613 1716
+f 1716 1715 2655
+f 2655 1715 2653
+f 2653 2652 2655
+f 2613 2655 2652
+f 2652 2611 2613
+f 2656 2657 1595
+f 1595 1588 2656
+f 2656 1588 2658
+f 2658 2659 2656
+f 2656 2659 2660
+f 2660 2657 2656
+f 2661 2659 2658
+f 2658 2662 2661
+f 2662 442 1721
+f 1721 2661 2662
+f 2663 2664 2660
+f 2660 2665 2663
+f 2665 2660 2659
+f 2659 2661 2665
+f 2665 2661 1721
+f 1721 1726 2665
+f 2663 2666 2667
+f 2667 2664 2663
+f 2666 2663 2665
+f 2665 1726 2666
+f 2666 1726 1731
+f 1731 2667 2666
+f 2606 1592 1595
+f 1595 2657 2606
+f 2606 2657 2660
+f 2660 2607 2606
+f 2668 2660 2664
+f 2664 2669 2668
+f 2614 2668 2669
+f 2669 2615 2614
+f 2668 2614 2607
+f 2607 2660 2668
+f 2610 2609 2607
+f 2607 2614 2610
+f 2651 2670 2609
+f 2609 2611 2651
+f 2615 2612 2611
+f 2611 2610 2615
+f 2671 2667 1731
+f 1731 1716 2671
+f 2613 2612 2671
+f 2671 1716 2613
+f 2669 2664 2667
+f 2667 2671 2669
+f 2615 2669 2671
+f 2671 2612 2615
+f 1600 1592 2672
+f 2672 2646 1600
+f 2649 2646 2672
+f 2672 2673 2649
+f 2608 2672 1592
+f 1592 2606 2608
+f 2673 2672 2608
+f 2608 2670 2673
+f 2609 2670 2608
+f 2608 2607 2609
+f 2674 2675 2676
+f 2676 2677 2674
+f 2678 2679 2675
+f 2675 2674 2678
+f 2680 2681 2679
+f 2679 2678 2680
+f 2680 2682 2683
+f 2683 2681 2680
+f 2684 2685 2683
+f 2683 2682 2684
+f 2684 2686 2654
+f 2654 2685 2684
+f 1905 2674 2677
+f 2677 1906 1905
+f 1905 1911 2678
+f 2678 2674 1905
+f 1911 1916 2680
+f 2680 2678 1911
+f 1921 2682 2680
+f 2680 1916 1921
+f 1921 1926 2684
+f 2684 2682 1921
+f 1926 1931 2686
+f 2686 2684 1926
+f 2675 2687 2688
+f 2688 2676 2675
+f 2687 2532 1335
+f 1335 2688 2687
+f 2679 2689 2687
+f 2687 2675 2679
+f 2689 2537 2532
+f 2532 2687 2689
+f 2681 2690 2689
+f 2689 2679 2681
+f 2690 2542 2537
+f 2537 2689 2690
+f 2683 2691 2690
+f 2690 2681 2683
+f 2691 2547 2542
+f 2542 2690 2691
+f 2685 2692 2691
+f 2691 2683 2685
+f 2692 2552 2547
+f 2547 2691 2692
+f 2692 2685 2654
+f 2654 2653 2692
+f 2552 2692 2653
+f 2653 1715 2552
+f 2686 2693 2650
+f 2650 2654 2686
+f 2693 2694 2651
+f 2651 2650 2693
+f 2694 2695 2670
+f 2670 2651 2694
+f 2695 2696 2673
+f 2673 2670 2695
+f 2696 2697 2649
+f 2649 2673 2696
+f 2697 2698 2648
+f 2648 2649 2697
+f 1931 1936 2693
+f 2693 2686 1931
+f 1936 1941 2694
+f 2694 2693 1936
+f 1946 2695 2694
+f 2694 1941 1946
+f 1951 2696 2695
+f 2695 1946 1951
+f 1951 1956 2697
+f 2697 2696 1951
+f 1961 2698 2697
+f 2697 1956 1961
+f 2699 2677 2676
+f 2676 2700 2699
+f 2701 2699 2700
+f 2700 2702 2701
+f 2703 2701 2702
+f 2702 2704 2703
+f 2703 2704 2705
+f 2705 2706 2703
+f 2707 2706 2705
+f 2705 2708 2707
+f 2707 2708 2709
+f 2709 2710 2707
+f 1988 1906 2677
+f 2677 2699 1988
+f 1988 2699 2701
+f 2701 1993 1988
+f 1998 1993 2701
+f 2701 2703 1998
+f 2003 1998 2703
+f 2703 2706 2003
+f 2003 2706 2707
+f 2707 2008 2003
+f 2008 2707 2710
+f 2710 2013 2008
+f 2700 2676 2688
+f 2688 2711 2700
+f 2711 2688 1335
+f 1335 1334 2711
+f 2702 2700 2711
+f 2711 2712 2702
+f 2712 2711 1334
+f 1334 1340 2712
+f 2704 2702 2712
+f 2712 2713 2704
+f 2713 2712 1340
+f 1340 1345 2713
+f 2705 2704 2713
+f 2713 2714 2705
+f 2714 2713 1345
+f 1345 1350 2714
+f 2708 2705 2714
+f 2714 2715 2708
+f 2715 2714 1350
+f 1350 1355 2715
+f 2715 2716 2709
+f 2709 2708 2715
+f 1355 1360 2716
+f 2716 2715 1355
+f 2710 2709 2717
+f 2717 2718 2710
+f 2718 2717 2719
+f 2719 2720 2718
+f 2720 2719 2721
+f 2721 2722 2720
+f 2722 2721 2723
+f 2723 2724 2722
+f 2725 2724 2723
+f 2723 2726 2725
+f 2698 2725 2726
+f 2726 2648 2698
+f 2018 2013 2710
+f 2710 2718 2018
+f 2018 2718 2720
+f 2720 2023 2018
+f 2028 2023 2720
+f 2720 2722 2028
+f 2033 2028 2722
+f 2722 2724 2033
+f 2033 2724 2725
+f 2725 2038 2033
+f 1961 2038 2725
+f 2725 2698 1961
+f 1604 2647 2727
+f 2727 1791 1604
+f 2648 2726 2727
+f 2727 2647 2648
+f 2717 2728 2621
+f 2621 2719 2717
+f 2728 2717 2709
+f 2709 2716 2728
+f 2729 1360 1372
+f 1372 2622 2729
+f 2729 2728 2716
+f 2716 1360 2729
+f 2622 2621 2728
+f 2728 2729 2622
+f 2730 1779 1782
+f 1782 2731 2730
+f 2730 2732 2733
+f 2733 1779 2730
+f 2730 2731 2734
+f 2734 2732 2730
+f 2733 2732 1497
+f 1497 609 2733
+f 2735 2604 2734
+f 2734 2736 2735
+f 2604 1497 2732
+f 2732 2734 2604
+f 2735 2736 2737
+f 2737 2738 2735
+f 2738 1494 2604
+f 2604 2735 2738
+f 2738 2737 1371
+f 1371 1494 2738
+f 2617 2731 1782
+f 1782 1785 2617
+f 2617 2616 2734
+f 2734 2731 2617
+f 2739 2740 2736
+f 2736 2734 2739
+f 2625 2624 2740
+f 2740 2739 2625
+f 2739 2734 2616
+f 2616 2625 2739
+f 2619 2625 2616
+f 2616 2620 2619
+f 2719 2621 2620
+f 2620 2721 2719
+f 2624 2619 2621
+f 2621 2623 2624
+f 1371 2737 2741
+f 2741 1372 1371
+f 2622 1372 2741
+f 2741 2623 2622
+f 2740 2741 2737
+f 2737 2736 2740
+f 2624 2623 2741
+f 2741 2740 2624
+f 1791 2727 2742
+f 2742 1785 1791
+f 2726 2723 2742
+f 2742 2727 2726
+f 2618 2617 1785
+f 1785 2742 2618
+f 2723 2721 2618
+f 2618 2742 2723
+f 2620 2616 2618
+f 2618 2721 2620
+f 2099 2743 2744
+f 2744 2095 2099
+f 2745 2746 2744
+f 2744 2743 2745
+f 2747 2748 2631
+f 2631 2749 2747
+f 2748 2747 2750
+f 2750 2751 2748
+f 2752 1477 1435
+f 1435 2632 2752
+f 2752 2748 2751
+f 2751 1477 2752
+f 2632 2631 2748
+f 2748 2752 2632
+f 2753 2083 2086
+f 2086 2754 2753
+f 2753 2755 2756
+f 2756 2083 2753
+f 2753 2754 2757
+f 2757 2755 2753
+f 2758 2759 2756
+f 2756 2755 2758
+f 2759 2758 2184
+f 2184 785 2759
+f 2760 2761 2757
+f 2757 2762 2760
+f 2761 2758 2755
+f 2755 2757 2761
+f 2761 2189 2184
+f 2184 2758 2761
+f 2760 2762 2763
+f 2763 2764 2760
+f 2764 2189 2761
+f 2761 2760 2764
+f 2764 2763 1434
+f 1434 2189 2764
+f 2627 2754 2086
+f 2086 2089 2627
+f 2627 2626 2757
+f 2757 2754 2627
+f 2765 2766 2762
+f 2762 2757 2765
+f 2635 2634 2766
+f 2766 2765 2635
+f 2765 2757 2626
+f 2626 2635 2765
+f 2629 2635 2626
+f 2626 2630 2629
+f 2749 2631 2630
+f 2630 2767 2749
+f 2634 2629 2631
+f 2631 2633 2634
+f 2768 1435 1434
+f 1434 2763 2768
+f 2632 1435 2768
+f 2768 2633 2632
+f 2766 2768 2763
+f 2763 2762 2766
+f 2634 2633 2768
+f 2768 2766 2634
+f 2095 2744 2769
+f 2769 2089 2095
+f 2746 2770 2769
+f 2769 2744 2746
+f 2628 2627 2089
+f 2089 2769 2628
+f 2770 2767 2628
+f 2628 2769 2770
+f 2630 2626 2628
+f 2628 2767 2630
+f 2771 2772 2773
+f 2773 2774 2771
+f 2775 2771 2774
+f 2774 2776 2775
+f 2777 2775 2776
+f 2776 2778 2777
+f 2777 2778 2779
+f 2779 2780 2777
+f 2781 2780 2779
+f 2779 2782 2781
+f 2781 2782 2750
+f 2750 2783 2781
+f 2348 2347 2772
+f 2772 2771 2348
+f 2348 2771 2775
+f 2775 2353 2348
+f 2353 2775 2777
+f 2777 2358 2353
+f 2363 2358 2777
+f 2777 2780 2363
+f 2363 2780 2781
+f 2781 2368 2363
+f 2368 2781 2783
+f 2783 2373 2368
+f 2774 2773 2784
+f 2784 2785 2774
+f 2785 2784 1452
+f 1452 1451 2785
+f 2776 2774 2785
+f 2785 2786 2776
+f 2786 2785 1451
+f 1451 1457 2786
+f 2778 2776 2786
+f 2786 2787 2778
+f 2787 2786 1457
+f 1457 1462 2787
+f 2779 2778 2787
+f 2787 2788 2779
+f 2788 2787 1462
+f 1462 1467 2788
+f 2782 2779 2788
+f 2788 2789 2782
+f 2789 2788 1467
+f 1467 1472 2789
+f 2789 2751 2750
+f 2750 2782 2789
+f 1472 1477 2751
+f 2751 2789 1472
+f 2783 2750 2747
+f 2747 2790 2783
+f 2790 2747 2749
+f 2749 2791 2790
+f 2791 2749 2767
+f 2767 2792 2791
+f 2792 2767 2770
+f 2770 2793 2792
+f 2793 2770 2746
+f 2746 2794 2793
+f 2794 2746 2745
+f 2745 2795 2794
+f 2373 2783 2790
+f 2790 2378 2373
+f 2378 2790 2791
+f 2791 2383 2378
+f 2388 2383 2791
+f 2791 2792 2388
+f 2393 2388 2792
+f 2792 2793 2393
+f 2393 2793 2794
+f 2794 2398 2393
+f 2403 2398 2794
+f 2794 2795 2403
+f 2796 2797 2773
+f 2773 2772 2796
+f 2798 2799 2797
+f 2797 2796 2798
+f 2800 2801 2799
+f 2799 2798 2800
+f 2800 2802 2803
+f 2803 2801 2800
+f 2804 2805 2803
+f 2803 2802 2804
+f 2804 2806 2807
+f 2807 2805 2804
+f 2430 2796 2772
+f 2772 2347 2430
+f 2430 2435 2798
+f 2798 2796 2430
+f 2440 2800 2798
+f 2798 2435 2440
+f 2445 2802 2800
+f 2800 2440 2445
+f 2445 2450 2804
+f 2804 2802 2445
+f 2450 2455 2806
+f 2806 2804 2450
+f 2797 2808 2784
+f 2784 2773 2797
+f 2808 2583 1452
+f 1452 2784 2808
+f 2799 2809 2808
+f 2808 2797 2799
+f 2809 2588 2583
+f 2583 2808 2809
+f 2801 2810 2809
+f 2809 2799 2801
+f 2810 2593 2588
+f 2588 2809 2810
+f 2803 2811 2810
+f 2810 2801 2803
+f 2811 2598 2593
+f 2593 2810 2811
+f 2805 2812 2811
+f 2811 2803 2805
+f 2812 2603 2598
+f 2598 2811 2812
+f 2812 2805 2807
+f 2807 2813 2812
+f 2603 2812 2813
+f 2813 2492 2603
+f 2806 2814 2815
+f 2815 2807 2806
+f 2814 2816 2817
+f 2817 2815 2814
+f 2816 2818 2819
+f 2819 2817 2816
+f 2818 2820 2821
+f 2821 2819 2818
+f 2822 2823 2821
+f 2821 2820 2822
+f 2795 2745 2823
+f 2823 2822 2795
+f 2460 2814 2806
+f 2806 2455 2460
+f 2460 2465 2816
+f 2816 2814 2460
+f 2470 2818 2816
+f 2816 2465 2470
+f 2475 2820 2818
+f 2818 2470 2475
+f 2475 2480 2822
+f 2822 2820 2475
+f 2403 2795 2822
+f 2822 2480 2403
+f 2099 2241 2824
+f 2824 2743 2099
+f 2745 2743 2824
+f 2824 2823 2745
+f 2815 2817 2641
+f 2641 2825 2815
+f 2825 2813 2807
+f 2807 2815 2825
+f 2826 2643 2493
+f 2493 2492 2826
+f 2826 2492 2813
+f 2813 2825 2826
+f 2643 2826 2825
+f 2825 2641 2643
+f 2827 2828 2236
+f 2236 2229 2827
+f 2827 2229 2829
+f 2829 2830 2827
+f 2827 2830 2831
+f 2831 2828 2827
+f 2829 932 1263
+f 1263 2830 2829
+f 2832 2833 2831
+f 2831 2605 2832
+f 2605 2831 2830
+f 2830 1263 2605
+f 2832 2834 2835
+f 2835 2833 2832
+f 2834 2832 2605
+f 2605 1262 2834
+f 2834 1262 2498
+f 2498 2835 2834
+f 2636 2233 2236
+f 2236 2828 2636
+f 2636 2828 2831
+f 2831 2637 2636
+f 2836 2831 2833
+f 2833 2837 2836
+f 2644 2836 2837
+f 2837 2645 2644
+f 2836 2644 2637
+f 2637 2831 2836
+f 2640 2639 2637
+f 2637 2644 2640
+f 2817 2819 2639
+f 2639 2641 2817
+f 2645 2642 2641
+f 2641 2640 2645
+f 2498 2493 2838
+f 2838 2835 2498
+f 2643 2642 2838
+f 2838 2493 2643
+f 2837 2833 2835
+f 2835 2838 2837
+f 2645 2837 2838
+f 2838 2642 2645
+f 2241 2233 2839
+f 2839 2824 2241
+f 2823 2824 2839
+f 2839 2821 2823
+f 2638 2839 2233
+f 2233 2636 2638
+f 2821 2839 2638
+f 2638 2819 2821
+f 2639 2819 2638
+f 2638 2637 2639
+f 1571 2840 2841
+f 2841 1568 1571
+f 2842 2841 2840
+f 2840 2843 2842
+f 2843 424 423
+f 423 2842 2843
+f 1568 2841 2844
+f 2844 1576 1568
+f 2841 2842 2845
+f 2845 2844 2841
+f 2842 423 427
+f 427 2845 2842
+f 1576 2844 2846
+f 2846 1580 1576
+f 2844 2845 2847
+f 2847 2846 2844
+f 2845 427 430
+f 430 2847 2845
+f 1580 2846 2848
+f 2848 1584 1580
+f 2846 2847 2849
+f 2849 2848 2846
+f 2847 430 437
+f 437 2849 2847
+f 1584 2848 2658
+f 2658 1588 1584
+f 2848 2849 2662
+f 2662 2658 2848
+f 2849 437 442
+f 442 2662 2849
+f 1758 1761 2850
+f 2850 2851 1758
+f 2851 2850 594
+f 594 593 2851
+f 1761 1767 2852
+f 2852 2850 1761
+f 2850 2852 596
+f 596 594 2850
+f 1767 1771 2853
+f 2853 2852 1767
+f 2852 2853 598
+f 598 596 2852
+f 1771 1775 2854
+f 2854 2853 1771
+f 2853 2854 604
+f 604 598 2853
+f 1775 1779 2733
+f 2733 2854 1775
+f 2733 609 604
+f 604 2854 2733
+f 1571 2067 2855
+f 2855 2840 1571
+f 2856 2843 2840
+f 2840 2855 2856
+f 2843 2856 767
+f 767 424 2843
+f 2067 2071 2857
+f 2857 2855 2067
+f 2855 2857 2858
+f 2858 2856 2855
+f 2856 2858 770
+f 770 767 2856
+f 2071 2075 2859
+f 2859 2857 2071
+f 2857 2859 2860
+f 2860 2858 2857
+f 2858 2860 773
+f 773 770 2858
+f 2075 2079 2861
+f 2861 2859 2075
+f 2859 2861 2862
+f 2862 2860 2859
+f 2860 2862 780
+f 780 773 2860
+f 2079 2083 2756
+f 2756 2861 2079
+f 2861 2756 2759
+f 2759 2862 2861
+f 2862 2759 785
+f 785 780 2862
+f 1758 2851 2863
+f 2863 2213 1758
+f 2851 593 917
+f 917 2863 2851
+f 2213 2863 2864
+f 2864 2217 2213
+f 2863 917 919
+f 919 2864 2863
+f 2217 2864 2865
+f 2865 2221 2217
+f 2864 919 921
+f 921 2865 2864
+f 2221 2865 2866
+f 2866 2225 2221
+f 2865 921 927
+f 927 2866 2865
+f 2225 2866 2829
+f 2829 2229 2225
+f 2829 2866 927
+f 927 932 2829
+g patch3
+f 2867 2868 126
+f 126 125 2867
+f 2869 2867 125
+f 125 131 2869
+f 2870 2869 131
+f 131 134 2870
+f 2870 134 137
+f 137 2871 2870
+f 2872 2871 137
+f 137 140 2872
+f 2872 140 93
+f 93 2873 2872
+f 1871 1874 2868
+f 2868 2867 1871
+f 1871 2867 2869
+f 2869 1875 1871
+f 1875 2869 2870
+f 2870 1877 1875
+f 1879 1877 2870
+f 2870 2871 1879
+f 1879 2871 2872
+f 2872 1881 1879
+f 1881 2872 2873
+f 2873 1883 1881
+f 2873 93 90
+f 90 2874 2873
+f 2874 90 92
+f 92 2875 2874
+f 2875 92 119
+f 119 2876 2875
+f 2876 119 122
+f 122 2877 2876
+f 2877 122 89
+f 89 2878 2877
+f 2878 89 88
+f 88 2879 2878
+f 1883 2873 2874
+f 2874 1885 1883
+f 1885 2874 2875
+f 2875 1887 1885
+f 1889 1887 2875
+f 2875 2876 1889
+f 1891 1889 2876
+f 2876 2877 1891
+f 1891 2877 2878
+f 2878 1893 1891
+f 1895 1893 2878
+f 2878 2879 1895
+f 2880 143 126
+f 126 2868 2880
+f 2881 146 143
+f 143 2880 2881
+f 2882 149 146
+f 146 2881 2882
+f 2882 2883 152
+f 152 149 2882
+f 2884 155 152
+f 152 2883 2884
+f 2884 2885 158
+f 158 155 2884
+f 1963 2880 2868
+f 2868 1874 1963
+f 1963 1965 2881
+f 2881 2880 1963
+f 1967 2882 2881
+f 2881 1965 1967
+f 1969 2883 2882
+f 2882 1967 1969
+f 1969 1971 2884
+f 2884 2883 1969
+f 1971 1973 2885
+f 2885 2884 1971
+f 2885 2886 164
+f 164 158 2885
+f 2886 2887 165
+f 165 164 2886
+f 2887 2888 188
+f 188 165 2887
+f 2888 2889 191
+f 191 188 2888
+f 2890 163 191
+f 191 2889 2890
+f 2879 88 163
+f 163 2890 2879
+f 1975 2886 2885
+f 2885 1973 1975
+f 1975 1977 2887
+f 2887 2886 1975
+f 1979 2888 2887
+f 2887 1977 1979
+f 1981 2889 2888
+f 2888 1979 1981
+f 1981 1983 2890
+f 2890 2889 1981
+f 1895 2879 2890
+f 2890 1983 1895
+f 2891 258 261
+f 261 2892 2891
+f 2893 264 258
+f 258 2891 2893
+f 2894 267 264
+f 264 2893 2894
+f 2894 2895 270
+f 270 267 2894
+f 2896 273 270
+f 270 2895 2896
+f 2896 2897 227
+f 227 273 2896
+f 2316 2891 2892
+f 2892 2313 2316
+f 2316 2318 2893
+f 2893 2891 2316
+f 2318 2320 2894
+f 2894 2893 2318
+f 2322 2895 2894
+f 2894 2320 2322
+f 2322 2324 2896
+f 2896 2895 2322
+f 2324 2326 2897
+f 2897 2896 2324
+f 2897 2898 223
+f 223 227 2897
+f 2898 2899 224
+f 224 223 2898
+f 2899 2900 252
+f 252 224 2899
+f 2900 2901 255
+f 255 252 2900
+f 2901 2902 222
+f 222 255 2901
+f 2902 2903 221
+f 221 222 2902
+f 2326 2328 2898
+f 2898 2897 2326
+f 2328 2330 2899
+f 2899 2898 2328
+f 2332 2900 2899
+f 2899 2330 2332
+f 2334 2901 2900
+f 2900 2332 2334
+f 2334 2336 2902
+f 2902 2901 2334
+f 2338 2903 2902
+f 2902 2336 2338
+f 2904 2892 261
+f 261 276 2904
+f 2905 2904 276
+f 276 279 2905
+f 2906 2905 279
+f 279 282 2906
+f 2906 282 285
+f 285 2907 2906
+f 2908 2907 285
+f 285 288 2908
+f 2908 288 292
+f 292 2909 2908
+f 2404 2313 2892
+f 2892 2904 2404
+f 2404 2904 2905
+f 2905 2406 2404
+f 2408 2406 2905
+f 2905 2906 2408
+f 2410 2408 2906
+f 2906 2907 2410
+f 2410 2907 2908
+f 2908 2412 2410
+f 2412 2908 2909
+f 2909 2414 2412
+f 2909 292 297
+f 297 2910 2909
+f 2910 297 299
+f 299 2911 2910
+f 2911 299 321
+f 321 2912 2911
+f 2912 321 324
+f 324 2913 2912
+f 2914 2913 324
+f 324 296 2914
+f 2903 2914 296
+f 296 221 2903
+f 2416 2414 2909
+f 2909 2910 2416
+f 2416 2910 2911
+f 2911 2418 2416
+f 2420 2418 2911
+f 2911 2912 2420
+f 2422 2420 2912
+f 2912 2913 2422
+f 2422 2913 2914
+f 2914 2424 2422
+f 2338 2424 2914
+f 2914 2903 2338
+g patch4
+f 2915 2916 2917
+f 2917 2918 2915
+f 2916 2915 2919
+f 2919 2920 2916
+f 2919 2921 2922
+f 2922 2920 2919
+f 2921 544 535
+f 535 2922 2921
+f 1522 546 544
+f 544 2921 1522
+f 2921 2919 1524
+f 1524 1522 2921
+f 2915 1526 1524
+f 1524 2919 2915
+f 1526 2915 2918
+f 2918 1528 1526
+f 2923 2924 2925
+f 2925 2926 2923
+f 2926 2927 2928
+f 2928 2923 2926
+f 2923 2928 692
+f 692 698 2923
+f 698 699 2924
+f 2924 2923 698
+f 2929 2918 2917
+f 2917 2930 2929
+f 2930 2931 2932
+f 2932 2929 2930
+f 2932 2931 2933
+f 2933 2934 2932
+f 2934 2933 868
+f 868 874 2934
+f 2041 2934 874
+f 874 876 2041
+f 2934 2041 2043
+f 2043 2932 2934
+f 2929 2932 2043
+f 2043 2045 2929
+f 2045 1528 2918
+f 2918 2929 2045
+f 2935 2936 2925
+f 2925 2924 2935
+f 2936 2935 2937
+f 2937 2938 2936
+f 2935 1008 1003
+f 1003 2937 2935
+f 1008 2935 2924
+f 2924 699 1008
+f 2939 2920 2922
+f 2922 2940 2939
+f 2941 2939 2940
+f 2940 2942 2941
+f 2940 2922 535
+f 535 70 2940
+f 2942 2940 70
+f 70 69 2942
+f 2943 2944 2928
+f 2928 2927 2943
+f 2941 2942 2944
+f 2944 2943 2941
+f 2944 124 692
+f 692 2928 2944
+f 2942 69 124
+f 124 2944 2942
+f 2945 2946 2933
+f 2933 2931 2945
+f 2947 2948 2946
+f 2946 2945 2947
+f 2946 206 868
+f 868 2933 2946
+f 2948 207 206
+f 206 2946 2948
+f 2949 2938 2937
+f 2937 2950 2949
+f 2947 2949 2950
+f 2950 2948 2947
+f 2950 2937 1003
+f 1003 256 2950
+f 2948 2950 256
+f 256 207 2948
+f 2951 2952 2953
+f 2953 2954 2951
+f 2955 2953 2952
+f 2952 2956 2955
+f 2957 2958 2959
+f 2959 2960 2957
+f 2961 2959 2958
+f 2958 2962 2961
+f 2954 2953 2963
+f 2963 2964 2954
+f 2964 2963 2965
+f 2965 2966 2964
+f 2953 2955 2967
+f 2967 2963 2953
+f 2963 2967 2968
+f 2968 2965 2963
+f 2960 2959 2969
+f 2969 2970 2960
+f 2970 2969 2971
+f 2971 2972 2970
+f 2959 2961 2973
+f 2973 2969 2959
+f 2969 2973 2974
+f 2974 2971 2969
+f 2975 2976 2977
+f 2977 2978 2975
+f 2955 2956 2978
+f 2978 2977 2955
+f 2979 2980 2981
+f 2981 2982 2979
+f 2961 2962 2982
+f 2982 2981 2961
+f 2983 2984 2917
+f 2917 2916 2983
+f 2985 2986 2984
+f 2984 2983 2985
+f 2951 2983 2916
+f 2916 2920 2951
+f 2954 2985 2983
+f 2983 2951 2954
+f 2920 2939 2952
+f 2952 2951 2920
+f 2956 2952 2939
+f 2939 2941 2956
+f 2986 2985 2987
+f 2987 2988 2986
+f 2988 2987 2989
+f 2989 2990 2988
+f 2985 2954 2964
+f 2964 2987 2985
+f 2987 2964 2966
+f 2966 2989 2987
+f 2991 2926 2925
+f 2925 2992 2991
+f 2993 2991 2992
+f 2992 2994 2993
+f 2975 2927 2926
+f 2926 2991 2975
+f 2976 2975 2991
+f 2991 2993 2976
+f 2927 2975 2978
+f 2978 2943 2927
+f 2956 2941 2943
+f 2943 2978 2956
+f 2994 2995 2996
+f 2996 2993 2994
+f 2995 2997 2998
+f 2998 2996 2995
+f 2993 2996 2999
+f 2999 2976 2993
+f 2996 2998 3000
+f 3000 2999 2996
+f 3001 2930 2917
+f 2917 2984 3001
+f 3002 3001 2984
+f 2984 2986 3002
+f 2979 2931 2930
+f 2930 3001 2979
+f 2980 2979 3001
+f 3001 3002 2980
+f 2931 2979 2982
+f 2982 2945 2931
+f 2962 2947 2945
+f 2945 2982 2962
+f 2986 2988 3003
+f 3003 3002 2986
+f 2988 2990 3004
+f 3004 3003 2988
+f 3002 3003 3005
+f 3005 2980 3002
+f 3003 3004 3006
+f 3006 3005 3003
+f 3007 2992 2925
+f 2925 2936 3007
+f 3008 2994 2992
+f 2992 3007 3008
+f 2957 3007 2936
+f 2936 2938 2957
+f 2960 3008 3007
+f 3007 2957 2960
+f 2938 2949 2958
+f 2958 2957 2938
+f 2962 2958 2949
+f 2949 2947 2962
+f 2994 3008 3009
+f 3009 2995 2994
+f 2995 3009 3010
+f 3010 2997 2995
+f 3008 2960 2970
+f 2970 3009 3008
+f 3009 2970 2972
+f 2972 3010 3009
+f 2976 2999 3011
+f 3011 2977 2976
+f 2999 3000 3012
+f 3012 3011 2999
+f 2977 3011 2967
+f 2967 2955 2977
+f 3011 3012 2968
+f 2968 2967 3011
+f 2980 3005 3013
+f 3013 2981 2980
+f 3005 3006 3014
+f 3014 3013 3005
+f 2981 3013 2973
+f 2973 2961 2981
+f 3013 3014 2974
+f 2974 2973 3013
+f 1111 3015 1113
+f 1113 3016 1115
+f 3017 1131 1133
+f 3018 1133 1135
+f 3019 1192 1194
+f 3020 1194 1196
+f 1210 3021 1212
+f 1212 3022 1214
+f 3023 3024 3025
+f 3025 3026 3023
+f 2990 2989 3024
+f 3024 3023 2990
+f 3024 3027 3028
+f 3028 3025 3024
+f 2989 2966 3027
+f 3027 3024 2989
+f 3027 3029 3030
+f 3030 3028 3027
+f 3031 3029 3027
+f 3027 2966 3031
+f 2965 3032 3031
+f 3031 2966 2965
+f 2968 3033 3032
+f 3032 2965 2968
+f 3034 3029 3031
+f 3031 3035 3034
+f 1117 3034 3035
+f 3035 1118 1117
+f 3016 3030 3029
+f 3029 3034 3016
+f 1115 3016 3034
+f 3034 1117 1115
+f 3035 3031 3032
+f 3032 3036 3035
+f 1118 3035 3036
+f 3036 1121 1118
+f 3036 3032 3033
+f 3033 3037 3036
+f 1121 3036 3037
+f 3037 1123 1121
+f 3038 3039 3040
+f 3040 3041 3038
+f 2997 3038 3041
+f 3041 2998 2997
+f 3041 3040 3042
+f 3042 3043 3041
+f 2998 3041 3043
+f 3043 3000 2998
+f 3043 3042 3044
+f 3044 3045 3043
+f 3046 3000 3043
+f 3043 3045 3046
+f 3012 3000 3046
+f 3046 3047 3012
+f 2968 3012 3047
+f 3047 3033 2968
+f 3048 3049 3046
+f 3046 3045 3048
+f 1138 1137 3049
+f 3049 3048 1138
+f 3018 3048 3045
+f 3045 3044 3018
+f 1135 1138 3048
+f 3048 3018 1135
+f 3049 3050 3047
+f 3047 3046 3049
+f 1137 1141 3050
+f 3050 3049 1137
+f 3050 3037 3033
+f 3033 3047 3050
+f 1141 1123 3037
+f 3037 3050 1141
+f 3023 3026 3051
+f 3051 3052 3023
+f 2990 3023 3052
+f 3052 3004 2990
+f 3052 3051 3053
+f 3053 3054 3052
+f 3004 3052 3054
+f 3054 3006 3004
+f 3054 3053 3055
+f 3055 3056 3054
+f 3057 3006 3054
+f 3054 3056 3057
+f 3014 3006 3057
+f 3057 3058 3014
+f 2974 3014 3058
+f 3058 3059 2974
+f 3060 3061 3057
+f 3057 3056 3060
+f 1199 1198 3061
+f 3061 3060 1199
+f 3020 3060 3056
+f 3056 3055 3020
+f 1196 1199 3060
+f 3060 3020 1196
+f 3061 3062 3058
+f 3058 3057 3061
+f 1198 1202 3062
+f 3062 3061 1198
+f 3062 3063 3059
+f 3059 3058 3062
+f 1202 1204 3063
+f 3063 3062 1202
+f 3038 3064 3065
+f 3065 3039 3038
+f 2997 3010 3064
+f 3064 3038 2997
+f 3064 3066 3067
+f 3067 3065 3064
+f 3010 2972 3066
+f 3066 3064 3010
+f 3066 3068 3069
+f 3069 3067 3066
+f 3070 3068 3066
+f 3066 2972 3070
+f 2971 3071 3070
+f 3070 2972 2971
+f 2974 3059 3071
+f 3071 2971 2974
+f 3072 3068 3070
+f 3070 3073 3072
+f 1216 3072 3073
+f 3073 1217 1216
+f 3022 3069 3068
+f 3068 3072 3022
+f 1214 3022 3072
+f 3072 1216 1214
+f 3073 3070 3071
+f 3071 3074 3073
+f 1217 3073 3074
+f 3074 1220 1217
+f 3074 3071 3059
+f 3059 3063 3074
+f 1220 3074 3063
+f 3063 1204 1220
+f 3025 3075 3076
+f 3076 3026 3025
+f 1106 1105 3076
+f 3076 3075 1106
+f 3028 3077 3075
+f 3075 3025 3028
+f 1109 1106 3075
+f 3075 3077 1109
+f 3015 3077 3028
+f 3028 3030 3015
+f 1111 1109 3077
+f 3077 3015 1111
+f 3015 3030 3016
+f 3016 1113 3015
+f 3039 3078 3079
+f 3079 3040 3039
+f 1125 3079 3078
+f 3078 1126 1125
+f 3040 3079 3080
+f 3080 3042 3040
+f 1129 3080 3079
+f 3079 1125 1129
+f 3017 3044 3042
+f 3042 3080 3017
+f 1131 3017 3080
+f 3080 1129 1131
+f 3017 1133 3018
+f 3018 3044 3017
+f 3026 3076 3081
+f 3081 3051 3026
+f 1188 3081 3076
+f 3076 1105 1188
+f 3051 3081 3082
+f 3082 3053 3051
+f 1190 3082 3081
+f 3081 1188 1190
+f 3019 3055 3053
+f 3053 3082 3019
+f 1192 3019 3082
+f 3082 1190 1192
+f 3019 1194 3020
+f 3020 3055 3019
+f 3065 3083 3078
+f 3078 3039 3065
+f 1206 1126 3078
+f 3078 3083 1206
+f 3067 3084 3083
+f 3083 3065 3067
+f 1208 1206 3083
+f 3083 3084 1208
+f 3021 3084 3067
+f 3067 3069 3021
+f 1210 1208 3084
+f 3084 3021 1210
+f 3021 3069 3022
+f 3022 1212 3021
+f 1108 1107 3085
+f 3085 3086 1108
+f 1107 1110 3087
+f 3087 3085 1107
+f 1110 1112 3088
+f 3088 3087 1110
+f 1112 1114 3089
+f 3089 3088 1112
+f 1114 1116 3090
+f 3090 3089 1114
+f 1120 1119 3091
+f 3091 3092 1120
+f 1116 1120 3092
+f 3092 3090 1116
+f 1119 1122 3093
+f 3093 3091 1119
+f 1122 1124 3094
+f 3094 3093 1122
+f 3095 1128 1127
+f 1127 3096 3095
+f 1128 3095 3097
+f 3097 1130 1128
+f 1132 1130 3097
+f 3097 3098 1132
+f 1134 1132 3098
+f 3098 3099 1134
+f 1136 1134 3099
+f 3099 3100 1136
+f 3101 3102 1140
+f 1140 1139 3101
+f 1139 1136 3100
+f 3100 3101 1139
+f 1142 1140 3102
+f 3102 3103 1142
+f 1124 1142 3103
+f 3103 3094 1124
+f 1189 1108 3086
+f 3086 3104 1189
+f 1191 1189 3104
+f 3104 3105 1191
+f 1193 1191 3105
+f 3105 3106 1193
+f 1195 1193 3106
+f 3106 3107 1195
+f 1197 1195 3107
+f 3107 3108 1197
+f 1201 1200 3109
+f 3109 3110 1201
+f 1200 1197 3108
+f 3108 3109 1200
+f 1203 1201 3110
+f 3110 3111 1203
+f 1205 1203 3111
+f 3111 3112 1205
+f 3113 3096 1127
+f 1127 1207 3113
+f 1207 1209 3114
+f 3114 3113 1207
+f 1209 1211 3115
+f 3115 3114 1209
+f 1211 1213 3116
+f 3116 3115 1211
+f 1213 1215 3117
+f 3117 3116 1213
+f 3118 1219 1218
+f 1218 3119 3118
+f 1219 3118 3117
+f 3117 1215 1219
+f 1218 1221 3120
+f 3120 3119 1218
+f 1221 1205 3112
+f 3112 3120 1221
+f 3086 3085 3121
+f 3121 3122 3086
+f 3085 3087 3123
+f 3123 3121 3085
+f 3087 3088 3124
+f 3124 3123 3087
+f 3088 3089 3125
+f 3125 3124 3088
+f 3089 3090 3126
+f 3126 3125 3089
+f 3092 3091 3127
+f 3127 3128 3092
+f 3090 3092 3128
+f 3128 3126 3090
+f 3091 3093 3129
+f 3129 3127 3091
+f 3093 3094 3130
+f 3130 3129 3093
+f 3095 3096 3131
+f 3131 3132 3095
+f 3097 3095 3132
+f 3132 3133 3097
+f 3098 3097 3133
+f 3133 3134 3098
+f 3099 3098 3134
+f 3134 3135 3099
+f 3100 3099 3135
+f 3135 3136 3100
+f 3102 3101 3137
+f 3137 3138 3102
+f 3101 3100 3136
+f 3136 3137 3101
+f 3103 3102 3138
+f 3138 3139 3103
+f 3094 3103 3139
+f 3139 3130 3094
+f 3104 3086 3122
+f 3122 3140 3104
+f 3105 3104 3140
+f 3140 3141 3105
+f 3106 3105 3141
+f 3141 3142 3106
+f 3107 3106 3142
+f 3142 3143 3107
+f 3108 3107 3143
+f 3143 3144 3108
+f 3110 3109 3145
+f 3145 3146 3110
+f 3109 3108 3144
+f 3144 3145 3109
+f 3111 3110 3146
+f 3146 3147 3111
+f 3112 3111 3147
+f 3147 3148 3112
+f 3096 3113 3149
+f 3149 3131 3096
+f 3113 3114 3150
+f 3150 3149 3113
+f 3114 3115 3151
+f 3151 3150 3114
+f 3115 3116 3152
+f 3152 3151 3115
+f 3116 3117 3153
+f 3153 3152 3116
+f 3118 3119 3154
+f 3154 3155 3118
+f 3117 3118 3155
+f 3155 3153 3117
+f 3119 3120 3156
+f 3156 3154 3119
+f 3120 3112 3148
+f 3148 3156 3120
+f 3122 3121 3157
+f 3157 3158 3122
+f 3121 3123 3159
+f 3159 3157 3121
+f 3123 3124 3160
+f 3160 3159 3123
+f 3124 3125 3161
+f 3161 3160 3124
+f 3125 3126 3162
+f 3162 3161 3125
+f 3128 3127 3163
+f 3163 3164 3128
+f 3126 3128 3164
+f 3164 3162 3126
+f 3127 3129 3165
+f 3165 3163 3127
+f 3129 3130 3166
+f 3166 3165 3129
+f 3132 3131 3167
+f 3167 3168 3132
+f 3133 3132 3168
+f 3168 3169 3133
+f 3134 3133 3169
+f 3169 3170 3134
+f 3135 3134 3170
+f 3170 3171 3135
+f 3136 3135 3171
+f 3171 3172 3136
+f 3138 3137 3173
+f 3173 3174 3138
+f 3137 3136 3172
+f 3172 3173 3137
+f 3139 3138 3174
+f 3174 3175 3139
+f 3130 3139 3175
+f 3175 3166 3130
+f 3140 3122 3158
+f 3158 3176 3140
+f 3141 3140 3176
+f 3176 3177 3141
+f 3142 3141 3177
+f 3177 3178 3142
+f 3143 3142 3178
+f 3178 3179 3143
+f 3144 3143 3179
+f 3179 3180 3144
+f 3146 3145 3181
+f 3181 3182 3146
+f 3145 3144 3180
+f 3180 3181 3145
+f 3147 3146 3182
+f 3182 3183 3147
+f 3148 3147 3183
+f 3183 3184 3148
+f 3131 3149 3185
+f 3185 3167 3131
+f 3149 3150 3186
+f 3186 3185 3149
+f 3150 3151 3187
+f 3187 3186 3150
+f 3151 3152 3188
+f 3188 3187 3151
+f 3152 3153 3189
+f 3189 3188 3152
+f 3155 3154 3190
+f 3190 3191 3155
+f 3153 3155 3191
+f 3191 3189 3153
+f 3154 3156 3192
+f 3192 3190 3154
+f 3156 3148 3184
+f 3184 3192 3156
+f 3158 3157 3193
+f 3193 3194 3158
+f 3157 3159 3195
+f 3195 3193 3157
+f 3159 3160 3196
+f 3196 3195 3159
+f 3160 3161 3197
+f 3197 3196 3160
+f 3161 3162 3198
+f 3198 3197 3161
+f 3164 3163 3199
+f 3199 3200 3164
+f 3162 3164 3200
+f 3200 3198 3162
+f 3163 3165 3201
+f 3201 3199 3163
+f 3165 3166 3202
+f 3202 3201 3165
+f 3168 3167 3203
+f 3203 3204 3168
+f 3169 3168 3204
+f 3204 3205 3169
+f 3170 3169 3205
+f 3205 3206 3170
+f 3171 3170 3206
+f 3206 3207 3171
+f 3172 3171 3207
+f 3207 3208 3172
+f 3174 3173 3209
+f 3209 3210 3174
+f 3173 3172 3208
+f 3208 3209 3173
+f 3175 3174 3210
+f 3210 3211 3175
+f 3166 3175 3211
+f 3211 3202 3166
+f 3176 3158 3194
+f 3194 3212 3176
+f 3177 3176 3212
+f 3212 3213 3177
+f 3178 3177 3213
+f 3213 3214 3178
+f 3179 3178 3214
+f 3214 3215 3179
+f 3180 3179 3215
+f 3215 3216 3180
+f 3182 3181 3217
+f 3217 3218 3182
+f 3181 3180 3216
+f 3216 3217 3181
+f 3183 3182 3218
+f 3218 3219 3183
+f 3184 3183 3219
+f 3219 3220 3184
+f 3167 3185 3221
+f 3221 3203 3167
+f 3185 3186 3222
+f 3222 3221 3185
+f 3186 3187 3223
+f 3223 3222 3186
+f 3187 3188 3224
+f 3224 3223 3187
+f 3188 3189 3225
+f 3225 3224 3188
+f 3191 3190 3226
+f 3226 3227 3191
+f 3189 3191 3227
+f 3227 3225 3189
+f 3190 3192 3228
+f 3228 3226 3190
+f 3192 3184 3220
+f 3220 3228 3192
+f 3194 3193 503
+f 503 506 3194
+f 3193 3195 509
+f 509 503 3193
+f 3195 3196 512
+f 512 509 3195
+f 3196 3197 515
+f 515 512 3196
+f 3197 3198 518
+f 518 515 3197
+f 3200 3199 522
+f 522 521 3200
+f 3198 3200 521
+f 521 518 3198
+f 3199 3201 527
+f 527 522 3199
+f 3201 3202 530
+f 530 527 3201
+f 3204 3203 664
+f 664 663 3204
+f 3205 3204 663
+f 663 669 3205
+f 3206 3205 669
+f 669 673 3206
+f 3207 3206 673
+f 673 676 3207
+f 3208 3207 676
+f 676 679 3208
+f 3210 3209 681
+f 681 684 3210
+f 3209 3208 679
+f 679 681 3209
+f 3211 3210 684
+f 684 688 3211
+f 3202 3211 688
+f 688 530 3202
+f 3212 3194 506
+f 506 838 3212
+f 3213 3212 838
+f 838 841 3213
+f 3214 3213 841
+f 841 845 3214
+f 3215 3214 845
+f 845 848 3215
+f 3216 3215 848
+f 848 851 3216
+f 3218 3217 853
+f 853 856 3218
+f 3217 3216 851
+f 851 853 3217
+f 3219 3218 856
+f 856 860 3219
+f 3220 3219 860
+f 860 863 3220
+f 3203 3221 978
+f 978 664 3203
+f 3221 3222 981
+f 981 978 3221
+f 3222 3223 984
+f 984 981 3222
+f 3223 3224 987
+f 987 984 3223
+f 3224 3225 990
+f 990 987 3224
+f 3227 3226 994
+f 994 993 3227
+f 3225 3227 993
+f 993 990 3225
+f 3226 3228 999
+f 999 994 3226
+f 3228 3220 863
+f 863 999 3228
diff --git a/tutorials/mesh/cvMesh/flange/system/collapseDict b/tutorials/mesh/cvMesh/flange/system/collapseDict
new file mode 100644
index 0000000000000000000000000000000000000000..729710d9fdd70b60a0f0787fc62d2fe3e0d0b415
--- /dev/null
+++ b/tutorials/mesh/cvMesh/flange/system/collapseDict
@@ -0,0 +1,52 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+
+FoamFile
+{
+    version         2.0;
+    format          ascii;
+
+    root            "";
+    case            "";
+    instance        "";
+    local           "";
+
+    class           dictionary;
+    object          collapseDict;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+collapseEdgesCoeffs
+{
+    minimumEdgeLength   1e-6;
+    maximumMergeAngle   180;
+    reductionFactor     0.5;
+}
+
+collapseFacesCoeffs
+{
+    initialFaceLengthFactor                 0.5;
+    reductionFactor                         0.5;
+
+    allowEarlyCollapseToPoint               on;
+    allowEarlyCollapseCoeff                 0.2;
+    guardFraction                           0.1;
+    maxCollapseFaceToPointSideLengthCoeff   0.3;
+}
+
+meshQualityCoeffs
+{
+    #include                    "meshQualityDict";
+    maximumIterations           10;
+    maximumSmoothingIterations  1;
+    maxPointErrorCount          5;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/flange/system/controlDict b/tutorials/mesh/cvMesh/flange/system/controlDict
new file mode 100644
index 0000000000000000000000000000000000000000..8d7092895478f5bc1dc88904efe55f2249ce6ee6
--- /dev/null
+++ b/tutorials/mesh/cvMesh/flange/system/controlDict
@@ -0,0 +1,58 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+
+FoamFile
+{
+    version         2.0;
+    format          ascii;
+
+    root            "";
+    case            "";
+    instance        "";
+    local           "";
+
+    class           dictionary;
+    object          controlDict;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+application     cvMesh;
+
+startFrom       startTime;
+
+startTime       0;
+
+stopAt          endTime;
+
+endTime         100;
+
+deltaT          1;
+
+writeControl    timeStep;
+
+writeInterval   100;
+
+purgeWrite      0;
+
+writeFormat     ascii;
+
+writePrecision  10;
+
+writeCompression uncompressed;
+
+timeFormat      general;
+
+timePrecision   6;
+
+runTimeModifiable yes;
+
+libs ("libdistributed.so");
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/flange/system/cvMeshDict b/tutorials/mesh/cvMesh/flange/system/cvMeshDict
new file mode 100644
index 0000000000000000000000000000000000000000..fe581a549397396649d5df9696bac8cef3367406
--- /dev/null
+++ b/tutorials/mesh/cvMesh/flange/system/cvMeshDict
@@ -0,0 +1,200 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+
+FoamFile
+{
+    version         2.0;
+    format          ascii;
+
+    root            "";
+    case            "";
+    instance        "";
+    local           "";
+
+    class           dictionary;
+    object          cvMeshDict;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+// Any scalar with a name <name>Coeff specifies a value that will be implemented
+// as a faction of the local target cell size
+
+geometry
+{
+    flange.obj
+    {
+        type triSurfaceMesh;
+    }
+}
+
+
+backgroundMeshDecomposition
+{
+    minLevels 1;
+    sampleResolution 4;
+    spanScale 5;
+    maxCellWeightCoeff 10;
+}
+
+
+surfaceConformation
+{
+    locationInMesh                      (0 0 0);
+
+    pointPairDistanceCoeff              0.1;
+
+    mixedFeaturePointPPDistanceCoeff    5.0;
+
+    featurePointExclusionDistanceCoeff  0.7;
+
+    featureEdgeExclusionDistanceCoeff   0.7;
+
+    surfaceSearchDistanceCoeff          5;
+
+    maxSurfaceProtrusionCoeff           0.1;
+
+    maxQuadAngle                        125;
+
+    surfaceConformationRebuildFrequency 10;
+
+    specialiseFeaturePoints             on;
+
+    conformationControls
+    {
+        edgeSearchDistCoeff             5;
+        surfacePtReplaceDistCoeff       0.5;
+        surfacePtExclusionDistanceCoeff 0.5;
+
+        maxIterations                   15;
+
+        iterationToInitialHitRatioLimit 0.0001;
+    }
+
+    geometryToConformTo
+    {
+        flange.obj
+        {
+            featureMethod           extendedFeatureEdgeMesh;
+            extendedFeatureEdgeMesh "flange.extendedFeatureEdgeMesh";
+        }
+    }
+
+    additionalFeatures
+    {
+    }
+}
+
+
+initialPoints
+{
+    minimumSurfaceDistanceCoeff 0.55;
+
+    initialPointsMethod         autoDensity;
+    //initialPointsMethod         pointFile;
+
+    autoDensityCoeffs
+    {
+        minLevels 1;
+        maxSizeRatio 3.0;
+        sampleResolution 4;
+        surfaceSampleResolution 5;
+    }
+
+    pointFileCoeffs
+    {
+        pointFile              "constant/internalDelaunayVertices";
+    }
+}
+
+
+motionControl
+{
+    defaultCellSize     0.001;
+
+    shapeControlFunctions
+    {
+        flange.obj
+        {
+            type                    searchableSurfaceControl;
+            priority                1;
+            mode                    inside;
+            surfaceCellSizeFunction uniformValue;
+            uniformValueCoeffs
+            {
+                surfaceCellSize     $defaultCellSize;
+            }
+
+            cellSizeFunction        uniform;
+            uniformCoeffs{}
+        }
+    }
+
+    cellAspectRatioControl
+    {
+        aspectRatio                 1.0;
+        aspectRatioDirection        (0 0 0);
+    }
+
+    relaxationModel     adaptiveLinear;
+
+    adaptiveLinearCoeffs
+    {
+        relaxationStart 1.0;
+        relaxationEnd   0.0;
+    }
+
+    objOutput                   no;
+
+    timeChecks                  no;
+
+    maxLoadUnbalance            0.2;
+
+    alignmentSearchSpokes       36;
+
+    alignmentAcceptanceAngle    48;
+
+    sizeAndAlignmentRebuildFrequency 20;
+
+    pointInsertionCriteria
+    {
+        cellCentreDistCoeff     1.75;
+        faceAreaRatioCoeff      0.0025;
+        acceptanceAngle         21.5;
+    }
+
+    pointRemovalCriteria
+    {
+        cellCentreDistCoeff  0.65;
+    }
+
+    faceAreaWeightModel piecewiseLinearRamp;
+
+    piecewiseLinearRampCoeffs
+    {
+        lowerAreaFraction       0.5;
+        upperAreaFraction       1.0;
+    }
+}
+
+
+polyMeshFiltering
+{
+    filterEdges                 on;
+    filterFaces                 off;
+    writeTetDualMesh            false;
+}
+
+
+meshQualityControls
+{
+    #include "meshQualityDict"
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/flange/system/decomposeParDict b/tutorials/mesh/cvMesh/flange/system/decomposeParDict
new file mode 100644
index 0000000000000000000000000000000000000000..afb5d8a226cc699ab6db67b043e65ba01103f2d7
--- /dev/null
+++ b/tutorials/mesh/cvMesh/flange/system/decomposeParDict
@@ -0,0 +1,46 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      decomposeParDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+numberOfSubdomains 8;
+
+//method          scotch;
+method          hierarchical;
+
+simpleCoeffs
+{
+    n               ( 2 2 2 );
+    delta           0.001;
+}
+
+hierarchicalCoeffs
+{
+    n               ( 2 2 2 );
+    delta           0.001;
+    order           xyz;
+}
+
+manualCoeffs
+{
+    dataFile        "";
+}
+
+distributed     no;
+
+roots           ( );
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/flange/system/faceSetDict b/tutorials/mesh/cvMesh/flange/system/faceSetDict
new file mode 100644
index 0000000000000000000000000000000000000000..68666ebc86dbf5e0b216a9c6d6e51a790506f54d
--- /dev/null
+++ b/tutorials/mesh/cvMesh/flange/system/faceSetDict
@@ -0,0 +1,35 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      faceSetDict;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+// Name of set to operate on
+name facesToBeRemoved;
+
+// One of clear/new/invert/add/delete|subset/list
+action new;
+
+// Actions to apply to pointSet. These are all the topoSetSource's ending
+// in ..ToFace (see the meshTools library).
+topoSetSources
+(
+    //  Select by explicitly providing face labels
+    labelToFace
+    {
+        value #include "../facesToBeRemoved";
+    }
+);
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/flange/system/fvSchemes b/tutorials/mesh/cvMesh/flange/system/fvSchemes
new file mode 100644
index 0000000000000000000000000000000000000000..046181f3576de294a25da6429547f491989dd144
--- /dev/null
+++ b/tutorials/mesh/cvMesh/flange/system/fvSchemes
@@ -0,0 +1,55 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      fvSchemes;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+ddtSchemes
+{
+    default         none;
+}
+
+gradSchemes
+{
+    default         Gauss linear;
+}
+
+divSchemes
+{
+    default         none;
+}
+
+laplacianSchemes
+{
+    default         none;
+    laplacian(nn)   Gauss linear corrected;
+}
+
+interpolationSchemes
+{
+    default         none;
+}
+
+snGradSchemes
+{
+    default         corrected;
+}
+
+fluxRequired
+{
+    default         no;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/flange/system/fvSolution b/tutorials/mesh/cvMesh/flange/system/fvSolution
new file mode 100644
index 0000000000000000000000000000000000000000..6368c1229865b54c53db9d5d239567540a12540b
--- /dev/null
+++ b/tutorials/mesh/cvMesh/flange/system/fvSolution
@@ -0,0 +1,29 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      fvSolution;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+solvers
+{
+    nn
+    {
+        solver          PCG;
+        preconditioner  DIC;
+        tolerance       1e-06;
+        relTol          0;
+    }
+}
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/flange/system/meshQualityDict b/tutorials/mesh/cvMesh/flange/system/meshQualityDict
new file mode 100644
index 0000000000000000000000000000000000000000..4a182cc0b58b9795df86df5d6e220f285bd42595
--- /dev/null
+++ b/tutorials/mesh/cvMesh/flange/system/meshQualityDict
@@ -0,0 +1,73 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+
+FoamFile
+{
+    version         2.0;
+    format          ascii;
+
+    root            "";
+    case            "";
+    instance        "";
+    local           "";
+
+    class           dictionary;
+    object          meshQualityDict;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+//- Maximum non-orthogonality allowed. Set to 180 to disable.
+maxNonOrtho         45;
+
+//- Max skewness allowed. Set to <0 to disable.
+maxBoundarySkewness 50;
+maxInternalSkewness 10;
+
+//- Max concaveness allowed. Is angle (in degrees) below which concavity
+//  is allowed. 0 is straight face, <0 would be convex face.
+//  Set to 180 to disable.
+maxConcave          80;
+
+//- Minimum quality of the tet formed by the face-centre
+//  and variable base point minimum decomposition triangles and
+//  the cell centre. This has to be a positive number for tracking
+//  to work. Set to very negative number (e.g. -1E30) to
+//  disable.
+//     <0 = inside out tet,
+//      0 = flat tet
+//      1 = regular tet
+minTetQuality       1e-30;
+
+//- Minimum pyramid volume. Is absolute volume of cell pyramid.
+//  Set to a sensible fraction of the smallest cell volume expected.
+//  Set to very negative number (e.g. -1E30) to disable.
+minVol              0;
+
+//- Minimum face area. Set to <0 to disable.
+minArea             -1;
+
+//- Minimum face twist. Set to <-1 to disable. dot product of face normal
+//- and face centre triangles normal
+minTwist            0.001;
+
+//- minimum normalised cell determinant
+//- 1 = hex, <= 0 = folded or flattened illegal cell
+minDeterminant      0.001;
+
+//- minFaceWeight (0 -> 0.5)
+minFaceWeight       0.02;
+
+//- minVolRatio (0 -> 1)
+minVolRatio         0.01;
+
+//must be >0 for Fluent compatibility
+minTriangleTwist    -1;
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/flange/system/snappyHexMeshDict b/tutorials/mesh/cvMesh/flange/system/snappyHexMeshDict
new file mode 100644
index 0000000000000000000000000000000000000000..12c88b16c4dba21ff638a3d6c8738fb70fa44c40
--- /dev/null
+++ b/tutorials/mesh/cvMesh/flange/system/snappyHexMeshDict
@@ -0,0 +1,308 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      snappyHexMeshDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+// Which of the steps to run
+castellatedMesh false;
+snap            false;
+addLayers       true;
+
+
+// Geometry. Definition of all surfaces. All surfaces are of class
+// searchableSurface.
+// Surfaces are used
+// - to specify refinement for any mesh cell intersecting it
+// - to specify refinement for any mesh cell inside/outside/near
+// - to 'snap' the mesh boundary to the surface
+geometry
+{
+//    motorBike.obj
+//    {
+//        type triSurfaceMesh;
+//        name motorBike;
+//    }
+//
+//    refinementBox
+//    {
+//        type searchableBox;
+//        min (-1.0 -0.7 0.0);
+//        max ( 8.0  0.7 2.5);
+//    }
+};
+
+
+
+// Settings for the castellatedMesh generation.
+castellatedMeshControls
+{
+
+    // Refinement parameters
+    // ~~~~~~~~~~~~~~~~~~~~~
+
+    // If local number of cells is >= maxLocalCells on any processor
+    // switches from from refinement followed by balancing
+    // (current method) to (weighted) balancing before refinement.
+    maxLocalCells 100000;
+
+    // Overall cell limit (approximately). Refinement will stop immediately
+    // upon reaching this number so a refinement level might not complete.
+    // Note that this is the number of cells before removing the part which
+    // is not 'visible' from the keepPoint. The final number of cells might
+    // actually be a lot less.
+    maxGlobalCells 2000000;
+
+    // The surface refinement loop might spend lots of iterations refining just a
+    // few cells. This setting will cause refinement to stop if <= minimumRefine
+    // are selected for refinement. Note: it will at least do one iteration
+    // (unless the number of cells to refine is 0)
+    minRefinementCells 10;
+
+    // Allow a certain level of imbalance during refining
+    // (since balancing is quite expensive)
+    // Expressed as fraction of perfect balance (= overall number of cells /
+    // nProcs). 0=balance always.
+    maxLoadUnbalance 0.10;
+
+
+    // Number of buffer layers between different levels.
+    // 1 means normal 2:1 refinement restriction, larger means slower
+    // refinement.
+    nCellsBetweenLevels 3;
+
+
+
+    // Explicit feature edge refinement
+    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    // Specifies a level for any cell intersected by its edges.
+    // This is a featureEdgeMesh, read from constant/triSurface for now.
+    features
+    (
+        //{
+        //    file "someLine.eMesh";
+        //    level 2;
+        //}
+    );
+
+
+
+    // Surface based refinement
+    // ~~~~~~~~~~~~~~~~~~~~~~~~
+
+    // Specifies two levels for every surface. The first is the minimum level,
+    // every cell intersecting a surface gets refined up to the minimum level.
+    // The second level is the maximum level. Cells that 'see' multiple
+    // intersections where the intersections make an
+    // angle > resolveFeatureAngle get refined up to the maximum level.
+
+    refinementSurfaces
+    {
+//        motorBike
+//        {
+//            // Surface-wise min and max refinement level
+//            level (5 6);
+//
+//            // Optional specification of patch type (default is wall). No
+//            // constraint types (cyclic, symmetry) etc. are allowed.
+//            patchInfo
+//            {
+//                type wall;
+//                inGroups (motorBike);
+//            }
+//        }
+    }
+
+    // Resolve sharp angles
+    resolveFeatureAngle 30;
+
+
+    // Region-wise refinement
+    // ~~~~~~~~~~~~~~~~~~~~~~
+
+    // Specifies refinement level for cells in relation to a surface. One of
+    // three modes
+    // - distance. 'levels' specifies per distance to the surface the
+    //   wanted refinement level. The distances need to be specified in
+    //   descending order.
+    // - inside. 'levels' is only one entry and only the level is used. All
+    //   cells inside the surface get refined up to the level. The surface
+    //   needs to be closed for this to be possible.
+    // - outside. Same but cells outside.
+
+    refinementRegions
+    {
+//        refinementBox
+//        {
+//            mode inside;
+//            levels ((1E15 4));
+//        }
+    }
+
+
+    // Mesh selection
+    // ~~~~~~~~~~~~~~
+
+    // After refinement patches get added for all refinementSurfaces and
+    // all cells intersecting the surfaces get put into these patches. The
+    // section reachable from the locationInMesh is kept.
+    // NOTE: This point should never be on a face, always inside a cell, even
+    // after refinement.
+    locationInMesh (-1 0 0);
+
+
+    // Whether any faceZones (as specified in the refinementSurfaces)
+    // are only on the boundary of corresponding cellZones or also allow
+    // free-standing zone faces. Not used if there are no faceZones.
+    allowFreeStandingZoneFaces true;
+}
+
+
+
+// Settings for the snapping.
+snapControls
+{
+    //- Number of patch smoothing iterations before finding correspondence
+    //  to surface
+    nSmoothPatch 3;
+
+    //- Relative distance for points to be attracted by surface feature point
+    //  or edge. True distance is this factor times local
+    //  maximum edge length.
+    tolerance 4.0;
+
+    //- Number of mesh displacement relaxation iterations.
+    nSolveIter 0;
+
+    //- Maximum number of snapping relaxation iterations. Should stop
+    //  before upon reaching a correct mesh.
+    nRelaxIter 5;
+
+    //- Highly experimental and wip: number of feature edge snapping
+    //  iterations. Leave out altogether to disable.
+    //  Do not use here since mesh resolution too low and baffles present
+    //nFeatureSnapIter 10;
+}
+
+
+
+// Settings for the layer addition.
+addLayersControls
+{
+    // Are the thickness parameters below relative to the undistorted
+    // size of the refined cell outside layer (true) or absolute sizes (false).
+    relativeSizes false;
+
+    // Per final patch (so not geometry!) the layer information
+    layers
+    {
+        "flange.obj.*"
+        {
+            nSurfaceLayers 1;
+        }
+    }
+
+    // Expansion factor for layer mesh
+    expansionRatio 1.5;
+
+    // Wanted thickness of final added cell layer. If multiple layers
+    // is the thickness of the layer furthest away from the wall.
+    // Relative to undistorted size of cell outside layer.
+    // is the thickness of the layer furthest away from the wall.
+    // See relativeSizes parameter.
+    finalLayerThickness 0.0003;
+
+    // Minimum thickness of cell layer. If for any reason layer
+    // cannot be above minThickness do not add layer.
+    // Relative to undistorted size of cell outside layer.
+    minThickness 0.0001;
+
+    // If points get not extruded do nGrow layers of connected faces that are
+    // also not grown. This helps convergence of the layer addition process
+    // close to features.
+    // Note: changed(corrected) w.r.t 17x! (didn't do anything in 17x)
+    nGrow 0;
+
+    // Advanced settings
+
+    // When not to extrude surface. 0 is flat surface, 90 is when two faces
+    // are perpendicular
+    featureAngle 90;
+
+    // Maximum number of snapping relaxation iterations. Should stop
+    // before upon reaching a correct mesh.
+    nRelaxIter 3;
+
+    // Number of smoothing iterations of surface normals
+    nSmoothSurfaceNormals 1;
+
+    // Number of smoothing iterations of interior mesh movement direction
+    nSmoothNormals 3;
+
+    // Smooth layer thickness over surface patches
+    nSmoothThickness 10;
+
+    // Stop layer growth on highly warped cells
+    maxFaceThicknessRatio 1000;
+
+    // Reduce layer growth where ratio thickness to medial
+    // distance is large
+    maxThicknessToMedialRatio 0.3;
+
+    // Angle used to pick up medial axis points
+    // Note: changed(corrected) w.r.t 17x! 90 degrees corresponds to 130 in 17x.
+    minMedianAxisAngle 90;
+
+
+    // Create buffer region for new layer terminations
+    nBufferCellsNoExtrude 0;
+
+
+    // Overall max number of layer addition iterations. The mesher will exit
+    // if it reaches this number of iterations; possibly with an illegal
+    // mesh.
+    nLayerIter 50;
+}
+
+
+
+meshQualityControls
+{
+    // Generic mesh quality settings. At any undoable phase these determine
+    // where to undo.
+    #include "meshQualityDict"
+
+    //- Number of error distribution iterations
+    nSmoothScale 4;
+    //- amount to scale back displacement at error points
+    errorReduction 0.75;
+}
+
+
+// Advanced
+
+// Flags for optional output
+// 0 : only write final meshes
+// 1 : write intermediate meshes
+// 2 : write volScalarField with cellLevel for postprocessing
+// 4 : write current intersections as .obj files
+debug 0;
+
+
+// Merge tolerance. Is fraction of overall bounding box of initial mesh.
+// Note: the write tolerance needs to be higher than this.
+mergeTolerance 1e-6;
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/flange/system/surfaceFeatureExtractDict b/tutorials/mesh/cvMesh/flange/system/surfaceFeatureExtractDict
new file mode 100644
index 0000000000000000000000000000000000000000..520df11958ba69a71cf8b55c16a97653b883cdd3
--- /dev/null
+++ b/tutorials/mesh/cvMesh/flange/system/surfaceFeatureExtractDict
@@ -0,0 +1,38 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      surfaceFeatureExtractDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+flange.obj
+{
+    extractionMethod    extractFromSurface;
+
+    extractFromSurfaceCoeffs
+    {
+        // Mark edges whose adjacent surface normals are at an angle less
+        // than includedAngle as features
+        // - 0  : selects no edges
+        // - 180: selects all edges
+        includedAngle   100;
+    }
+
+
+    // Write options
+
+        // Write features to obj format for postprocessing
+        writeObj                yes;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/flange/system/topoSetDict-background b/tutorials/mesh/cvMesh/flange/system/topoSetDict-background
new file mode 100644
index 0000000000000000000000000000000000000000..03ae10303e7b0724ba72c8fce5db5ae5611aafe3
--- /dev/null
+++ b/tutorials/mesh/cvMesh/flange/system/topoSetDict-background
@@ -0,0 +1,319 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      topoSetDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+// List of actions. Each action is a dictionary with e.g.
+//     // name of set
+//     name    c0;
+//
+//     // type: pointSet/faceSet/cellSet/faceZoneSet/cellZoneSet
+//     type    cellSet;
+//
+//     // action to perform on set. Two types:
+//     // - require no source : clear/invert
+//     // - require source    : new/add/delete/subset
+//     action  new;
+//
+// The source entry varies according to the type of set:
+//
+// cellSet
+// ~~~~~~~
+//
+//    // Select by explicitly providing cell labels
+//    source labelToCell;
+//    {
+//        value (12 13 56);   // labels of cells
+//    }
+//
+//    // Copy elements from cellSet
+//    source cellToCell;
+//    {
+//        set c1;
+//    }
+//
+//    // Cells in cell zone
+//    source zoneToCell;
+//    {
+//        name ".*Zone";      // Name of cellZone, regular expressions allowed
+//    }
+//
+//    // Cells on master or slave side of faceZone
+//    source faceZoneToCell;
+//    {
+//        name ".*Zone";      // Name of faceZone, regular expressions allowed
+//        option master;      // master/slave
+//    }
+//
+//    // Select based on faceSet
+//    source faceToCell;
+//    {
+//        set f0;             // Name of faceSet
+//
+//        //option neighbour; // cell with neighbour in faceSet
+//        //option owner;     //  ,,       owner
+//        option any;         // cell with any face in faceSet
+//        //option all;       // cell with all faces in faceSet
+//    }
+//
+//    // Select based on pointSet
+//    source pointToCell;
+//    {
+//        set p0;
+//        option any;         // cell with any point in pointSet
+//        //option all;       // cell with all points in pointSet
+//    }
+//
+//    // Select based on cellShape
+//    source shapeToCell;
+//    {
+//        type hex;           // hex/wedge/prism/pyr/tet/tetWedge/splitHex
+//    }
+//
+//    // Cells with cell centre within box
+//    source boxToCell;
+//    {
+//       box   (0 0 0) (1 1 1);
+//    }
+//
+//    // Cells with cell centre within box
+//    // Is skewed, rotated box. Given as origin and three spanning vectors.
+//    source rotatedBoxToCell;
+//    {
+//       origin   (0.2 0.2 -10);
+//       i        (0.2 0.2 0);
+//       j        (-0.2 0.2 0);
+//       k        (10 10 10);
+//    }
+//
+//    // Cells with centre within cylinder
+//    source cylinderToCell;
+//    {
+//       p1       (0.2 0.2 -10); // start point on cylinder axis
+//       p2       (0.2 0.2 0);   // end point on cylinder axis
+//       radius   5.0;
+//    }
+//
+//    // Cells with centre within sphere
+//    source sphereToCell;
+//    {
+//       centre   (0.2 0.2 -10);
+//       radius   5.0;
+//    }
+//
+//    // Cells with cellCentre nearest to coordinates
+//    source nearestToCell;
+//    {
+//       points ((0 0 0) (1 1 1)(2 2 2));
+//    }
+//
+//    // Select based on surface
+//    source surfaceToCell;
+//    {
+//        file            "www.avl.com-geometry.stl";
+//        outsidePoints   ((-99 -99 -59));    // definition of outside
+//        includeCut      false;              // cells cut by surface
+//        includeInside   false;              // cells not on outside of surf
+//        includeOutside  false;              // cells on outside of surf
+//        nearDistance    -1;                 // cells with centre near surf
+//                                            // (set to -1 if not used)
+//        curvature       0.9;                // cells within nearDistance
+//                                            // and near surf curvature
+//                                            // (set to -100 if not used)
+//    }
+//
+//    // values of field within certain range
+//    source fieldToCell;
+//    {
+//        fieldName   U;      // Note: uses mag(U) since volVectorField
+//        min         0.1;
+//        max         0.5;
+//    }
+//
+//    // Mesh region (non-face connected part of (subset of)mesh)
+//    source regionToCell;
+//    {
+//        set         c0;         // name of cellSet giving mesh subset
+//        insidePoint (1 2 3);    // point inside region to select
+//    }
+//
+//
+//
+// faceSet
+// ~~~~~~~
+//
+//    // Copy elements from faceSet
+//    source faceToFace;
+//    {
+//        set f1;
+//    }
+//
+//    // Select based on cellSet
+//    source cellToFace;
+//    {
+//        set c0;
+//        option all;         // All faces of cells
+//        //option both;      // Only faces whose owner&neighbour are in cellSet
+//    }
+//
+//    // Select based on pointSet
+//    source pointToFace;
+//    {
+//        set p0;
+//        option any;         // Faces using any point in pointSet
+//        //option all        // Faces with all points in pointSet
+//    }
+//
+//    //  Select by explicitly providing face labels
+//    source labelToFace;
+//    {
+//        value (12 13 56);   // labels of faces
+//    }
+//
+//    // All faces of patch
+//    source patchToFace;
+//    {
+//        name ".*Wall";      // Name of patch, regular expressions allowed
+//    }
+//
+//    // All faces of faceZone
+//    source zoneToFace;
+//    {
+//        name ".*Zone1";     // Name of faceZone, regular expressions allowed
+//    }
+//
+//    // Faces with face centre within box
+//    source boxToFace;
+//    {
+//        box  (0 0 0) (1 1 1);
+//    }
+//
+//    // Faces with normal to within certain angle aligned with vector.
+//    source normalToFace;
+//    {
+//        normal (0 0 1);     // Vector
+//        cos     0.01;       // Tolerance (max cos of angle)
+//    }
+//
+//
+//
+// pointSet
+// ~~~~~~~
+//
+//    // Copy elements from pointSet
+//    source pointToPoint;
+//    {
+//        set p1;
+//    }
+//
+//    // Select based on cellSet
+//    source cellToPoint;
+//    {
+//        set c0;
+//        option all;         // all points of cell
+//    }
+//
+//    // Select based on faceSet
+//    source faceToPoint;
+//    {
+//        set f0;             // name of faceSet
+//        option all;         // all points of face
+//    }
+//
+//    // Select by explicitly providing point labels
+//    source labelToPoint;
+//    {
+//        value (12 13 56);   // labels of points
+//    }
+//
+//    // All points in pointzone
+//    source zoneToPoint;
+//    {
+//        name ".*Zone";      // name of pointZone, regular expressions allowed
+//    }
+//
+//    // Points nearest to coordinates
+//    source nearestToPoint;
+//    {
+//       points ((0 0 0) (1 1 1));
+//    }
+//
+//    // Points with coordinate within box
+//    source boxToPoint;
+//    {
+//       box   (0 0 0) (1 1 1);
+//    }
+//
+//    // Select based on surface
+//    source surfaceToPoint;
+//    {
+//        file            "www.avl.com-geometry.stl";
+//        nearDistance    0.1;    // points near to surface
+//        includeInside   false;  // points on inside of surface
+//                                // (requires closed surface with consistent
+//                                //  normals)
+//        includeOutside  false;  //   ,,    outside  ,,
+//    }
+//
+//
+//
+//
+// cellZoneSet
+// ~~~~~~~~~~~
+// (mirrors operations on a cellSet into a cellZone)
+//
+//    // Select based on cellSet
+//    source setToCellZone;
+//    {
+//        set c0;           // name of cellSet
+//    }
+//
+//
+//
+// faceZoneSet
+// ~~~~~~~~~~~
+//    // Select based on faceSet without orientation
+//    source setToFaceZone;
+//    {
+//        set f0;           // name of faceSet
+//    }
+//
+//    // Select based on faceSet, using cellSet to determine orientation
+//    source setsToFaceZone;
+//    {
+//        faceSet f0;       // name of faceSet
+//        cellSet c0;       // name of cellSet of slave side
+//    }
+
+actions
+(
+    {
+        name    background;
+        type    cellSet;
+        action  new;
+        source surfaceToCell;
+        sourceInfo
+        {
+            file            "constant/triSurface/flange.obj";
+            outsidePoints   ((-0.026 -0.0275 -0.0235));
+            includeCut      true;
+            includeInside   true;
+            includeOutside  false;
+            nearDistance    -1;
+            curvature       -100;
+        }
+    }
+);
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/flange/system/topoSetDict-slices b/tutorials/mesh/cvMesh/flange/system/topoSetDict-slices
new file mode 100644
index 0000000000000000000000000000000000000000..2b158377884d20598c8b95069b483b7a5c9b739b
--- /dev/null
+++ b/tutorials/mesh/cvMesh/flange/system/topoSetDict-slices
@@ -0,0 +1,152 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      topoSetDict;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+zSlice  -0.009;
+ySlice  0.0;
+xSlice  0.0;
+
+actions
+(
+    {
+        name    z;
+        type    cellSet;
+        action  new;
+        source  boxToCell;
+        sourceInfo
+        {
+            box (-100 -100 $zSlice)(100 100 100);
+        }
+    }
+
+    {
+        name    zf;
+        type    faceSet;
+        action  new;
+        source  cellToFace;
+        sourceInfo
+        {
+            set    z;
+            option all;
+        }
+    }
+
+    {
+        name    z;
+        type    cellSet;
+        action  invert;
+    }
+
+    {
+        name    zf;
+        type    faceSet;
+        action  subset;
+        source  cellToFace;
+        sourceInfo
+        {
+            set    z;
+            option all;
+        }
+    }
+
+    // ~~~~~~~~~~~~~~~~ //
+
+    {
+        name    y;
+        type    cellSet;
+        action  new;
+        source  boxToCell;
+        sourceInfo
+        {
+            box (-100 $ySlice -100)(100 100 100);
+        }
+    }
+
+    {
+        name    yf;
+        type    faceSet;
+        action  new;
+        source  cellToFace;
+        sourceInfo
+        {
+            set    y;
+            option all;
+        }
+    }
+
+    {
+        name    y;
+        type    cellSet;
+        action  invert;
+    }
+
+    {
+        name    yf;
+        type    faceSet;
+        action  subset;
+        source  cellToFace;
+        sourceInfo
+        {
+            set    y;
+            option all;
+        }
+    }
+
+    // ~~~~~~~~~~~~~~~~ //
+
+    {
+        name    x;
+        type    cellSet;
+        action  new;
+        source  boxToCell;
+        sourceInfo
+        {
+            box ($xSlice -100 -100)(100 100 100);
+        }
+    }
+
+    {
+        name    xf;
+        type    faceSet;
+        action  new;
+        source  cellToFace;
+        sourceInfo
+        {
+            set    x;
+            option all;
+        }
+    }
+
+    {
+        name    x;
+        type    cellSet;
+        action  invert;
+    }
+
+    {
+        name    xf;
+        type    faceSet;
+        action  subset;
+        source  cellToFace;
+        sourceInfo
+        {
+            set    x;
+            option all;
+        }
+    }
+);
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/simpleShapes/Allclean b/tutorials/mesh/cvMesh/simpleShapes/Allclean
new file mode 100755
index 0000000000000000000000000000000000000000..5361756c0d83d2cb6bf35f75930d4b625fd7d142
--- /dev/null
+++ b/tutorials/mesh/cvMesh/simpleShapes/Allclean
@@ -0,0 +1,18 @@
+#!/bin/sh
+cd ${0%/*} || exit 1    # run from this directory
+
+# Source tutorial run functions
+. $WM_PROJECT_DIR/bin/tools/CleanFunctions
+
+rm -r constant/extendedFeatureEdgeMesh constant/internalDelaunayVertices > /dev/null 2>&1
+rm constant/triSurface/*.eMesh > /dev/null 2>&1
+rm constant/triSurface/*_clean* > /dev/null 2>&1
+rm -r constant/polyMesh > /dev/null 2>&1
+rm constant/targetCellSize > /dev/null 2>&1
+rm -r constant/tetDualMesh > /dev/null 2>&1
+
+rm domain coneAndSphere > /dev/null 2>&1
+
+cleanCase
+
+# ----------------------------------------------------------------- end-of-file
diff --git a/tutorials/mesh/cvMesh/simpleShapes/Allrun b/tutorials/mesh/cvMesh/simpleShapes/Allrun
new file mode 100755
index 0000000000000000000000000000000000000000..c37109987b9f66122fdddb9d394a3ccaea0e059a
--- /dev/null
+++ b/tutorials/mesh/cvMesh/simpleShapes/Allrun
@@ -0,0 +1,43 @@
+#!/bin/sh
+cd ${0%/*} || exit 1    # run from this directory
+
+# Source tutorial run functions
+. $WM_PROJECT_DIR/bin/tools/RunFunctions
+
+# Remove any small triangles (edges < 1e-4, sliver with Q < 1e-6) from surface
+# (cvMesh will try to conform to every feature).
+runApplication surfaceClean \
+    constant/triSurface/coneAndSphere.obj \
+    1e-4 1e-6 \
+    constant/triSurface/coneAndSphere_clean.obj
+mv log.surfaceClean log.surfaceClean.coneAndSphere
+# Orient so point to be meshed is inside surface
+runApplication surfaceOrient \
+    constant/triSurface/coneAndSphere_clean.obj \
+    -inside '(0 -0.5 0)' \
+    constant/triSurface/coneAndSphere_clean_orient.obj
+mv log.surfaceOrient log.surfaceOrient.coneAndSphere
+
+# Same for outside
+runApplication surfaceClean \
+    constant/triSurface/domain.stl \
+    1e-4 1e-6 \
+    constant/triSurface/domain_clean.stl
+mv log.surfaceClean log.surfaceClean.domain
+runApplication surfaceOrient \
+    constant/triSurface/domain_clean.stl \
+    -inside '(0 -0.5 0)' \
+    constant/triSurface/domain_clean_orient.stl
+mv log.surfaceOrient log.surfaceOrient.domain
+
+unset FOAM_SIGFPE
+runApplication surfaceFeatureExtract
+
+# Generate aligned points (in constant/internalDelaunayVertices) and a
+# mesh from that.
+runApplication cvMesh
+
+# Generate some sets for a bit of mesh inspection
+runApplication topoSet -time 0:100
+
+# ----------------------------------------------------------------- end-of-file
diff --git a/tutorials/mesh/cvMesh/simpleShapes/constant/triSurface/cone.stl b/tutorials/mesh/cvMesh/simpleShapes/constant/triSurface/cone.stl
new file mode 100644
index 0000000000000000000000000000000000000000..98e4698edbb223cbe7ea60d269b901911fdcd368
--- /dev/null
+++ b/tutorials/mesh/cvMesh/simpleShapes/constant/triSurface/cone.stl
@@ -0,0 +1,828 @@
+solid ascii
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 0.475528 -0.154509
+   vertex -0.5 0.456773 -0.203368
+   vertex -0.5 0.489074 -0.103956
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 0.489074 -0.103956
+   vertex -0.5 0.456773 -0.203368
+   vertex -0.5 0.497261 -0.0522642
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 0.497261 -0.0522642
+   vertex -0.5 0.456773 -0.203368
+   vertex -0.5 0.5 0
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 0.5 0
+   vertex -0.5 0.456773 -0.203368
+   vertex -0.5 0.497261 0.0522642
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 0.497261 0.0522642
+   vertex -0.5 0.456773 -0.203368
+   vertex -0.5 0.489074 0.103956
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 0.489074 0.103956
+   vertex -0.5 0.456773 -0.203368
+   vertex -0.5 0.475528 0.154509
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 0.475528 0.154509
+   vertex -0.5 0.456773 -0.203368
+   vertex -0.5 0.456773 0.203368
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 0.456773 0.203368
+   vertex -0.5 0.456773 -0.203368
+   vertex -0.5 0.433013 0.25
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 0.456773 -0.203368
+   vertex -0.5 0.433013 -0.25
+   vertex -0.5 0.433013 0.25
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 0.433013 0.25
+   vertex -0.5 0.433013 -0.25
+   vertex -0.5 0.404509 0.293893
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 0.404509 0.293893
+   vertex -0.5 0.433013 -0.25
+   vertex -0.5 0.371572 0.334565
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 0.433013 -0.25
+   vertex -0.5 0.404509 -0.293893
+   vertex -0.5 0.371572 0.334565
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 0.404509 -0.293893
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 0.371572 0.334565
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 0.371572 0.334565
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 0.334565 0.371572
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 0.334565 0.371572
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 0.293893 0.404509
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 0.293893 0.404509
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 0.25 0.433013
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 0.25 0.433013
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 0.203368 0.456773
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 0.203368 0.456773
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 0.154509 0.475528
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 0.154509 0.475528
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 0.103956 0.489074
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 0.103956 0.489074
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 0.0522642 0.497261
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 0.0522642 0.497261
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 -1.02552e-10 0.5
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 -1.02552e-10 0.5
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 -0.0522642 0.497261
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 -0.0522642 0.497261
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 -0.103956 0.489074
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 -0.103956 0.489074
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 -0.154509 0.475528
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 -0.154509 0.475528
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 -0.203368 0.456773
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 -0.203368 0.456773
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 -0.25 0.433013
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 -0.25 0.433013
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 -0.293893 0.404509
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 -0.293893 0.404509
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 -0.334565 0.371572
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 -0.334565 0.371572
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 -0.371572 0.334565
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 -0.371572 0.334565
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 -0.404509 0.293893
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 -0.404509 0.293893
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 -0.433013 0.25
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 -0.433013 0.25
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 -0.456773 0.203368
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 -0.456773 0.203368
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 -0.475528 0.154509
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 -0.475528 0.154509
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 -0.489074 0.103956
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 -0.489074 0.103956
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 -0.497261 0.0522642
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 -0.497261 0.0522642
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 -0.5 -2.05103e-10
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 -0.5 -2.05103e-10
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 -0.497261 -0.0522642
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 -0.497261 -0.0522642
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 -0.489074 -0.103956
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 -0.489074 -0.103956
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 -0.475528 -0.154509
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 -0.475528 -0.154509
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 -0.456773 -0.203368
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 -0.456773 -0.203368
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 -0.433013 -0.25
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 -0.433013 -0.25
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 -0.404509 -0.293893
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 -0.404509 -0.293893
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 -0.371572 -0.334565
+  endloop
+ endfacet
+ facet normal -1 -0 0
+  outer loop
+   vertex -0.5 -0.371572 -0.334565
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 -0.334565 -0.371572
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 -0.334565 -0.371572
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 -0.293893 -0.404509
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 -0.293893 -0.404509
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 -0.25 -0.433013
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 -0.25 -0.433013
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 -0.203368 -0.456773
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 -0.203368 -0.456773
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 -0.154509 -0.475528
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 -0.154509 -0.475528
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 -0.103956 -0.489074
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 -0.103956 -0.489074
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 -0.0522642 -0.497261
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 -0.0522642 -0.497261
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 3.07655e-10 -0.5
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 3.07655e-10 -0.5
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 0.0522642 -0.497261
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 0.0522642 -0.497261
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 0.103956 -0.489074
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 0.103956 -0.489074
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 0.154509 -0.475528
+  endloop
+ endfacet
+ facet normal -1 -0 0
+  outer loop
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 0.334565 -0.371572
+   vertex -0.5 0.154509 -0.475528
+  endloop
+ endfacet
+ facet normal -1 -0 0
+  outer loop
+   vertex -0.5 0.334565 -0.371572
+   vertex -0.5 0.293893 -0.404509
+   vertex -0.5 0.154509 -0.475528
+  endloop
+ endfacet
+ facet normal -1 -0 0
+  outer loop
+   vertex -0.5 0.293893 -0.404509
+   vertex -0.5 0.25 -0.433013
+   vertex -0.5 0.154509 -0.475528
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.5 0.203368 -0.456773
+   vertex -0.5 0.154509 -0.475528
+   vertex -0.5 0.25 -0.433013
+  endloop
+ endfacet
+ facet normal 0.446723 0.893446 0.0468234
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 0.5 0
+   vertex -0.5 0.497261 0.0522642
+  endloop
+ endfacet
+ facet normal 0.446723 0.883657 0.139958
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 0.497261 0.0522642
+   vertex -0.5 0.489074 0.103956
+  endloop
+ endfacet
+ facet normal 0.446723 0.864187 0.231558
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 0.489074 0.103956
+   vertex -0.5 0.475528 0.154509
+  endloop
+ endfacet
+ facet normal 0.446723 0.835248 0.320622
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 0.475528 0.154509
+   vertex -0.5 0.456773 0.203368
+  endloop
+ endfacet
+ facet normal 0.446723 0.797159 0.406173
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 0.456773 0.203368
+   vertex -0.5 0.433013 0.25
+  endloop
+ endfacet
+ facet normal 0.446723 0.750335 0.487273
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 0.433013 0.25
+   vertex -0.5 0.404509 0.293893
+  endloop
+ endfacet
+ facet normal 0.446723 0.695291 0.563036
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 0.404509 0.293893
+   vertex -0.5 0.371572 0.334565
+  endloop
+ endfacet
+ facet normal 0.446723 0.632629 0.632629
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 0.371572 0.334565
+   vertex -0.5 0.334565 0.371572
+  endloop
+ endfacet
+ facet normal 0.446723 0.563036 0.695291
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 0.334565 0.371572
+   vertex -0.5 0.293893 0.404509
+  endloop
+ endfacet
+ facet normal 0.446723 0.487273 0.750335
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 0.293893 0.404509
+   vertex -0.5 0.25 0.433013
+  endloop
+ endfacet
+ facet normal 0.446723 0.406173 0.797159
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 0.25 0.433013
+   vertex -0.5 0.203368 0.456773
+  endloop
+ endfacet
+ facet normal 0.446723 0.320622 0.835248
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 0.203368 0.456773
+   vertex -0.5 0.154509 0.475528
+  endloop
+ endfacet
+ facet normal 0.446723 0.231558 0.864187
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 0.154509 0.475528
+   vertex -0.5 0.103956 0.489074
+  endloop
+ endfacet
+ facet normal 0.446723 0.139958 0.883657
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 0.103956 0.489074
+   vertex -0.5 0.0522642 0.497261
+  endloop
+ endfacet
+ facet normal 0.446723 0.0468234 0.893446
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 0.0522642 0.497261
+   vertex -0.5 -1.02552e-10 0.5
+  endloop
+ endfacet
+ facet normal 0.446723 -0.0468234 0.893446
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 -1.02552e-10 0.5
+   vertex -0.5 -0.0522642 0.497261
+  endloop
+ endfacet
+ facet normal 0.446723 -0.139958 0.883657
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 -0.0522642 0.497261
+   vertex -0.5 -0.103956 0.489074
+  endloop
+ endfacet
+ facet normal 0.446723 -0.231558 0.864187
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 -0.103956 0.489074
+   vertex -0.5 -0.154509 0.475528
+  endloop
+ endfacet
+ facet normal 0.446723 -0.320622 0.835248
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 -0.154509 0.475528
+   vertex -0.5 -0.203368 0.456773
+  endloop
+ endfacet
+ facet normal 0.446723 -0.406173 0.797159
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 -0.203368 0.456773
+   vertex -0.5 -0.25 0.433013
+  endloop
+ endfacet
+ facet normal 0.446723 -0.487273 0.750335
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 -0.25 0.433013
+   vertex -0.5 -0.293893 0.404509
+  endloop
+ endfacet
+ facet normal 0.446723 -0.563036 0.695291
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 -0.293893 0.404509
+   vertex -0.5 -0.334565 0.371572
+  endloop
+ endfacet
+ facet normal 0.446723 -0.632629 0.632629
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 -0.334565 0.371572
+   vertex -0.5 -0.371572 0.334565
+  endloop
+ endfacet
+ facet normal 0.446723 -0.695291 0.563036
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 -0.371572 0.334565
+   vertex -0.5 -0.404509 0.293893
+  endloop
+ endfacet
+ facet normal 0.446723 -0.750335 0.487273
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 -0.404509 0.293893
+   vertex -0.5 -0.433013 0.25
+  endloop
+ endfacet
+ facet normal 0.446723 -0.797159 0.406173
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 -0.433013 0.25
+   vertex -0.5 -0.456773 0.203368
+  endloop
+ endfacet
+ facet normal 0.446723 -0.835248 0.320622
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 -0.456773 0.203368
+   vertex -0.5 -0.475528 0.154509
+  endloop
+ endfacet
+ facet normal 0.446723 -0.864187 0.231558
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 -0.475528 0.154509
+   vertex -0.5 -0.489074 0.103956
+  endloop
+ endfacet
+ facet normal 0.446723 -0.883657 0.139958
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 -0.489074 0.103956
+   vertex -0.5 -0.497261 0.0522642
+  endloop
+ endfacet
+ facet normal 0.446723 -0.893446 0.0468234
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 -0.497261 0.0522642
+   vertex -0.5 -0.5 -2.05103e-10
+  endloop
+ endfacet
+ facet normal 0.446723 -0.893446 -0.0468234
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 -0.5 -2.05103e-10
+   vertex -0.5 -0.497261 -0.0522642
+  endloop
+ endfacet
+ facet normal 0.446723 -0.883657 -0.139958
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 -0.497261 -0.0522642
+   vertex -0.5 -0.489074 -0.103956
+  endloop
+ endfacet
+ facet normal 0.446723 -0.864187 -0.231558
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 -0.489074 -0.103956
+   vertex -0.5 -0.475528 -0.154509
+  endloop
+ endfacet
+ facet normal 0.446723 -0.835248 -0.320622
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 -0.475528 -0.154509
+   vertex -0.5 -0.456773 -0.203368
+  endloop
+ endfacet
+ facet normal 0.446723 -0.797159 -0.406173
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 -0.456773 -0.203368
+   vertex -0.5 -0.433013 -0.25
+  endloop
+ endfacet
+ facet normal 0.446723 -0.750335 -0.487273
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 -0.433013 -0.25
+   vertex -0.5 -0.404509 -0.293893
+  endloop
+ endfacet
+ facet normal 0.446723 -0.695291 -0.563036
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 -0.404509 -0.293893
+   vertex -0.5 -0.371572 -0.334565
+  endloop
+ endfacet
+ facet normal 0.446723 -0.632629 -0.632629
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 -0.371572 -0.334565
+   vertex -0.5 -0.334565 -0.371572
+  endloop
+ endfacet
+ facet normal 0.446723 -0.563036 -0.695291
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 -0.334565 -0.371572
+   vertex -0.5 -0.293893 -0.404509
+  endloop
+ endfacet
+ facet normal 0.446723 -0.487273 -0.750335
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 -0.293893 -0.404509
+   vertex -0.5 -0.25 -0.433013
+  endloop
+ endfacet
+ facet normal 0.446723 -0.406173 -0.797159
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 -0.25 -0.433013
+   vertex -0.5 -0.203368 -0.456773
+  endloop
+ endfacet
+ facet normal 0.446723 -0.320622 -0.835248
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 -0.203368 -0.456773
+   vertex -0.5 -0.154509 -0.475528
+  endloop
+ endfacet
+ facet normal 0.446723 -0.231558 -0.864187
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 -0.154509 -0.475528
+   vertex -0.5 -0.103956 -0.489074
+  endloop
+ endfacet
+ facet normal 0.446723 -0.139958 -0.883657
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 -0.103956 -0.489074
+   vertex -0.5 -0.0522642 -0.497261
+  endloop
+ endfacet
+ facet normal 0.446723 -0.0468234 -0.893446
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 -0.0522642 -0.497261
+   vertex -0.5 3.07655e-10 -0.5
+  endloop
+ endfacet
+ facet normal 0.446723 0.0468234 -0.893446
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 3.07655e-10 -0.5
+   vertex -0.5 0.0522642 -0.497261
+  endloop
+ endfacet
+ facet normal 0.446723 0.139958 -0.883657
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 0.0522642 -0.497261
+   vertex -0.5 0.103956 -0.489074
+  endloop
+ endfacet
+ facet normal 0.446723 0.231558 -0.864187
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 0.103956 -0.489074
+   vertex -0.5 0.154509 -0.475528
+  endloop
+ endfacet
+ facet normal 0.446723 0.320622 -0.835248
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 0.154509 -0.475528
+   vertex -0.5 0.203368 -0.456773
+  endloop
+ endfacet
+ facet normal 0.446723 0.406173 -0.797159
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 0.203368 -0.456773
+   vertex -0.5 0.25 -0.433013
+  endloop
+ endfacet
+ facet normal 0.446723 0.487273 -0.750335
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 0.25 -0.433013
+   vertex -0.5 0.293893 -0.404509
+  endloop
+ endfacet
+ facet normal 0.446723 0.563036 -0.695291
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 0.293893 -0.404509
+   vertex -0.5 0.334565 -0.371572
+  endloop
+ endfacet
+ facet normal 0.446723 0.632629 -0.632629
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 0.334565 -0.371572
+   vertex -0.5 0.371572 -0.334565
+  endloop
+ endfacet
+ facet normal 0.446723 0.695291 -0.563036
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 0.371572 -0.334565
+   vertex -0.5 0.404509 -0.293893
+  endloop
+ endfacet
+ facet normal 0.446723 0.750335 -0.487273
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 0.404509 -0.293893
+   vertex -0.5 0.433013 -0.25
+  endloop
+ endfacet
+ facet normal 0.446723 0.797159 -0.406173
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 0.433013 -0.25
+   vertex -0.5 0.456773 -0.203368
+  endloop
+ endfacet
+ facet normal 0.446723 0.835248 -0.320622
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 0.456773 -0.203368
+   vertex -0.5 0.475528 -0.154509
+  endloop
+ endfacet
+ facet normal 0.446723 0.864187 -0.231558
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 0.475528 -0.154509
+   vertex -0.5 0.489074 -0.103956
+  endloop
+ endfacet
+ facet normal 0.446723 0.883657 -0.139958
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 0.489074 -0.103956
+   vertex -0.5 0.497261 -0.0522642
+  endloop
+ endfacet
+ facet normal 0.446723 0.893446 -0.0468234
+  outer loop
+   vertex 0.5 0 0
+   vertex -0.5 0.497261 -0.0522642
+   vertex -0.5 0.5 0
+  endloop
+ endfacet
+endsolid
diff --git a/tutorials/mesh/cvMesh/simpleShapes/constant/triSurface/coneAndSphere.obj b/tutorials/mesh/cvMesh/simpleShapes/constant/triSurface/coneAndSphere.obj
new file mode 100644
index 0000000000000000000000000000000000000000..d90d10e85faf369f8cb5347a328e1ba3889e63d2
--- /dev/null
+++ b/tutorials/mesh/cvMesh/simpleShapes/constant/triSurface/coneAndSphere.obj
@@ -0,0 +1,1489 @@
+# Wavefront OBJ file
+# Regions:
+#     0    patch0
+#
+# points    : 495
+# triangles : 986
+#
+v -0.5 0.371572 0.334565
+v -0.5 0.371572 -0.334565
+v -0.5 0.334565 0.371572
+v -0.5 -0.334565 0.371572
+v -0.5 -0.371572 0.334565
+v -0.5 -0.371572 -0.334565
+v -0.5 -0.334565 -0.371572
+v -0.5 0.334565 -0.371572
+v -0.5 0.475528 -0.154509
+v -0.5 0.475528 0.154509
+v -0.5 0.154509 0.475528
+v -0.5 -0.154509 0.475528
+v -0.5 -0.475528 0.154509
+v -0.5 -0.475528 -0.154509
+v -0.5 -0.154509 -0.475528
+v -0.5 0.154509 -0.475528
+v -0.5 0.5 0
+v -0.5 -1.02552e-10 0.5
+v -0.5 -0.5 -2.05103e-10
+v -0.5 3.07655e-10 -0.5
+v -0.5 0.497261 -0.0522642
+v -0.5 0.497261 0.0522642
+v -0.5 0.0522642 0.497261
+v -0.5 -0.0522642 0.497261
+v -0.5 -0.497261 0.0522642
+v -0.5 -0.497261 -0.0522642
+v -0.5 -0.0522642 -0.497261
+v -0.5 0.0522642 -0.497261
+v -0.5 0.456773 -0.203368
+v -0.5 0.456773 0.203368
+v -0.5 0.203368 0.456773
+v -0.5 -0.203368 0.456773
+v -0.5 -0.456773 0.203368
+v -0.5 -0.456773 -0.203368
+v -0.5 -0.203368 -0.456773
+v -0.5 0.203368 -0.456773
+v -0.5 0.489074 -0.103956
+v -0.5 0.489074 0.103956
+v -0.5 0.103956 0.489074
+v -0.5 -0.103956 0.489074
+v -0.5 -0.489074 0.103956
+v -0.5 -0.489074 -0.103956
+v -0.5 -0.103956 -0.489074
+v -0.5 0.103956 -0.489074
+v -0.5 0.433013 0.25
+v -0.5 0.433013 -0.25
+v -0.5 0.25 0.433013
+v -0.5 -0.25 0.433013
+v -0.5 -0.433013 0.25
+v -0.5 -0.433013 -0.25
+v -0.5 -0.25 -0.433013
+v -0.5 0.25 -0.433013
+v -0.5 0.404509 0.293893
+v -0.5 0.404509 -0.293893
+v -0.5 0.293893 0.404509
+v -0.5 -0.293893 0.404509
+v -0.5 -0.404509 0.293893
+v -0.5 -0.404509 -0.293893
+v -0.5 -0.293893 -0.404509
+v -0.5 0.293893 -0.404509
+v 0.139023 0.150219 0.122743
+v 0.139023 0.150219 -0.122743
+v 0.164524 0.158505 0.200848
+v 0.164524 0.158505 -0.200848
+v 0.229562 0.0308609 0.200848
+v 0.229562 0.0308609 -0.200848
+v 0.101708 0.3 0.0412897
+v 0.101708 0.3 -0.0412897
+v 0.307111 -0.103127 0.0412897
+v 0.307111 -0.103127 -0.0412897
+v 0.1153 0.3 0.122743
+v 0.1153 0.3 -0.122743
+v 0.3151 -0.0921307 0.122743
+v 0.3151 -0.0921307 -0.122743
+v 0.201904 0.170651 0.273474
+v 0.201904 0.170651 -0.273474
+v 0.261359 0.0539629 0.273474
+v 0.261359 0.0539629 -0.273474
+v 0.142113 0.3 0.200848
+v 0.142113 0.3 -0.200848
+v 0.330861 -0.0704381 0.200848
+v 0.330861 -0.0704381 -0.200848
+v 0.181417 0.3 0.273474
+v 0.181417 0.3 -0.273474
+v 0.353963 -0.038641 0.273474
+v 0.353963 -0.038641 -0.273474
+v 0.250142 0.186324 0.338641
+v 0.250143 0.186324 -0.338641
+v 0.302393 0.0837761 0.338641
+v 0.302393 0.0837761 -0.338641
+v 0.126096 0.453981 0.0412897
+v 0.126096 0.453981 -0.0412897
+v 0.446019 -0.173904 0.0412897
+v 0.446019 -0.173904 -0.0412897
+v 0.139023 0.449781 0.122743
+v 0.139023 0.449781 -0.122743
+v 0.450219 -0.160977 0.122743
+v 0.450219 -0.160977 -0.122743
+v 0.232138 0.3 0.338641
+v 0.232138 0.3 -0.338641
+v 0.383776 0.0023934 0.338641
+v 0.383776 0.00239342 -0.338641
+v 0.164524 0.441495 0.200848
+v 0.164524 0.441495 -0.200848
+v 0.458505 -0.135476 0.200848
+v 0.458505 -0.135476 -0.200848
+v 0.307925 0.205099 0.39457
+v 0.307925 0.205099 -0.39457
+v 0.351546 0.119487 0.39457
+v 0.351546 0.119487 -0.39457
+v 0.201904 0.429349 0.273474
+v 0.201904 0.429349 -0.273474
+v 0.470651 -0.0980963 0.273474
+v 0.470651 -0.0980963 -0.273474
+v 0.292894 0.3 0.39457
+v 0.292894 0.3 -0.39457
+v 0.419487 0.0515457 0.39457
+v 0.419487 0.0515457 -0.39457
+v 0.250142 0.413676 0.338641
+v 0.250143 0.413676 -0.338641
+v 0.486324 -0.0498575 0.338641
+v 0.486324 -0.0498575 -0.338641
+v 0.373674 0.226462 0.439737
+v 0.373674 0.226462 -0.439737
+v 0.407475 0.160123 0.439737
+v 0.407475 0.160123 -0.439737
+v 0.196873 0.592889 0.0412897
+v 0.196873 0.592889 -0.0412897
+v 0.207869 0.5849 0.122743
+v 0.207869 0.5849 -0.122743
+v 0.6 -0.198292 0.0412897
+v 0.6 -0.198292 -0.0412897
+v 0.307924 0.394901 0.39457
+v 0.307925 0.394901 -0.39457
+v 0.6 -0.1847 0.122743
+v 0.6 -0.1847 -0.122743
+v 0.505099 0.00792448 0.39457
+v 0.505099 0.00792451 -0.39457
+v 0.362026 0.3 0.439737
+v 0.362026 0.3 -0.439737
+v 0.460123 0.107475 0.439737
+v 0.460123 0.107475 -0.439737
+v 0.229562 0.569139 0.200848
+v 0.229562 0.569139 -0.200848
+v 0.6 -0.157887 0.200848
+v 0.6 -0.157887 -0.200848
+v 0.261359 0.546037 0.273474
+v 0.261359 0.546037 -0.273474
+v 0.6 -0.118583 0.273474
+v 0.6 -0.118583 -0.273474
+v 0.373674 0.373538 0.439737
+v 0.373674 0.373538 -0.439737
+v 0.302393 0.516224 0.338641
+v 0.302393 0.516224 -0.338641
+v 0.526462 0.0736736 0.439737
+v 0.526462 0.0736736 -0.439737
+v 0.6 -0.0678619 -0.338641
+v 0.6 -0.067862 0.338641
+v 0.445596 0.249831 0.472909
+v 0.445596 0.249831 -0.472909
+v 0.468656 0.204573 0.472909
+v 0.468656 0.204573 -0.472909
+v 0.43765 0.3 0.472909
+v 0.43765 0.3 -0.472909
+v 0.504573 0.168656 0.472909
+v 0.504573 0.168656 -0.472909
+v 0.351546 0.480513 0.39457
+v 0.351546 0.480513 -0.39457
+v 0.6 -0.00710633 -0.39457
+v 0.6 -0.00710636 0.39457
+v 0.445596 0.350169 0.472909
+v 0.445596 0.350169 -0.472909
+v 0.549831 0.145596 0.472909
+v 0.549831 0.145596 -0.472909
+v 0.407475 0.439877 0.439737
+v 0.407475 0.439877 -0.439737
+v 0.6 0.0620263 0.439737
+v 0.6 0.0620263 -0.439737
+v 0.307111 0.703127 0.0412897
+v 0.307111 0.703127 -0.0412897
+v 0.521731 0.274569 0.493181
+v 0.521731 0.274569 -0.493181
+v 0.53342 0.251627 0.493181
+v 0.53342 0.251627 -0.493181
+v 0.3151 0.692131 0.122743
+v 0.3151 0.692131 -0.122743
+v 0.330861 0.670438 0.200848
+v 0.330861 0.670438 -0.200848
+v 0.468656 0.395427 0.472909
+v 0.468656 0.395427 -0.472909
+v 0.753981 -0.173904 0.0412897
+v 0.753981 -0.173904 -0.0412897
+v 0.517703 0.3 0.493181
+v 0.517703 0.3 -0.493181
+v 0.551627 0.23342 0.493181
+v 0.551627 0.23342 -0.493181
+v 0.6 0.13765 0.472909
+v 0.6 0.13765 -0.472909
+v 0.749781 -0.160977 0.122743
+v 0.749781 -0.160977 -0.122743
+v 0.353963 0.638641 0.273474
+v 0.353963 0.638641 -0.273474
+v 0.741495 -0.135476 0.200848
+v 0.741495 -0.135476 -0.200848
+v 0.729349 -0.0980963 0.273474
+v 0.729349 -0.0980963 -0.273474
+v 0.383776 0.597607 0.338641
+v 0.383776 0.597607 -0.338641
+v 0.521731 0.325431 0.493181
+v 0.521731 0.325431 -0.493181
+v 0.574569 0.221731 0.493181
+v 0.574569 0.221731 -0.493181
+v 0.713676 -0.0498575 0.338641
+v 0.713676 -0.0498575 -0.338641
+v 0.419487 0.548454 0.39457
+v 0.419487 0.548454 -0.39457
+v 0.694901 0.0079245 0.39457
+v 0.694901 0.00792454 -0.39457
+v 0.460123 0.492525 0.439737
+v 0.460123 0.492525 -0.439737
+v 0.53342 0.348373 0.493181
+v 0.53342 0.348373 -0.493181
+v 0.6 0.217703 0.493181
+v 0.6 0.217703 -0.493181
+v 0.673538 0.0736736 0.439737
+v 0.673538 0.0736736 -0.439737
+v 0.504573 0.431344 0.472909
+v 0.504573 0.431344 -0.472909
+v 0.650169 0.145596 0.472909
+v 0.650169 0.145596 -0.472909
+v 0.551627 0.36658 0.493181
+v 0.551627 0.36658 -0.493181
+v 0.625431 0.221731 0.493181
+v 0.625431 0.221731 -0.493181
+v 0.6 0.3 0.5
+v 0.6 0.3 -0.5
+v 0.574569 0.378269 0.493181
+v 0.574569 0.378269 -0.493181
+v 0.648373 0.23342 0.493181
+v 0.648373 0.23342 -0.493181
+v 0.549831 0.454404 0.472909
+v 0.549831 0.454404 -0.472909
+v 0.695427 0.168656 0.472909
+v 0.695427 0.168656 -0.472909
+v 0.526462 0.526326 0.439737
+v 0.526462 0.526326 -0.439737
+v 0.6 0.382297 0.493181
+v 0.6 0.382297 -0.493181
+v 0.66658 0.251627 0.493181
+v 0.66658 0.251627 -0.493181
+v 0.739877 0.107475 0.439737
+v 0.739877 0.107475 -0.439737
+v 0.505099 0.592075 -0.39457
+v 0.505099 0.592076 0.39457
+v 0.780513 0.0515458 0.39457
+v 0.780513 0.0515458 -0.39457
+v 0.486324 0.649857 -0.338641
+v 0.486324 0.649858 0.338641
+v 0.625431 0.378269 0.493181
+v 0.625431 0.378269 -0.493181
+v 0.678269 0.274569 0.493181
+v 0.678269 0.274569 -0.493181
+v 0.816224 0.00239345 0.338641
+v 0.816224 0.00239348 -0.338641
+v 0.470651 0.698096 0.273474
+v 0.470651 0.698096 -0.273474
+v 0.458505 0.735476 0.200848
+v 0.458505 0.735476 -0.200848
+v 0.846037 -0.0386409 0.273474
+v 0.846037 -0.0386409 -0.273474
+v 0.450219 0.760977 0.122743
+v 0.450219 0.760977 -0.122743
+v 0.6 0.46235 0.472909
+v 0.6 0.46235 -0.472909
+v 0.648373 0.36658 0.493181
+v 0.648373 0.36658 -0.493181
+v 0.682297 0.3 0.493181
+v 0.682297 0.3 -0.493181
+v 0.446019 0.773904 0.0412897
+v 0.446019 0.773904 -0.0412897
+v 0.731344 0.204573 0.472909
+v 0.731344 0.204573 -0.472909
+v 0.869139 -0.070438 -0.200848
+v 0.869139 -0.0704381 0.200848
+v 0.8849 -0.0921306 0.122743
+v 0.8849 -0.0921306 -0.122743
+v 0.66658 0.348373 0.493181
+v 0.66658 0.348373 -0.493181
+v 0.678269 0.325431 0.493181
+v 0.678269 0.325431 -0.493181
+v 0.892889 -0.103127 0.0412897
+v 0.892889 -0.103127 -0.0412897
+v 0.6 0.537974 0.439737
+v 0.6 0.537974 -0.439737
+v 0.792525 0.160123 0.439737
+v 0.792525 0.160123 -0.439737
+v 0.650169 0.454404 0.472909
+v 0.650169 0.454404 -0.472909
+v 0.754404 0.249831 0.472909
+v 0.754404 0.249831 -0.472909
+v 0.6 0.607106 0.39457
+v 0.6 0.607106 -0.39457
+v 0.848454 0.119487 0.39457
+v 0.848454 0.119487 -0.39457
+v 0.695427 0.431344 0.472909
+v 0.695427 0.431344 -0.472909
+v 0.76235 0.3 0.472909
+v 0.76235 0.3 -0.472909
+v 0.731344 0.395427 0.472909
+v 0.731344 0.395427 -0.472909
+v 0.754404 0.350169 0.472909
+v 0.754404 0.350169 -0.472909
+v 0.6 0.667862 0.338641
+v 0.6 0.667862 -0.338641
+v 0.673538 0.526326 0.439737
+v 0.673538 0.526326 -0.439737
+v 0.897607 0.0837762 0.338641
+v 0.897607 0.0837762 -0.338641
+v 0.826326 0.226462 0.439737
+v 0.826326 0.226462 -0.439737
+v 0.6 0.718583 0.273474
+v 0.6 0.718583 -0.273474
+v 0.938641 0.053963 0.273474
+v 0.938641 0.053963 -0.273474
+v 0.6 0.757887 0.200848
+v 0.6 0.757887 -0.200848
+v 0.970438 0.030861 0.200848
+v 0.970438 0.030861 -0.200848
+v 0.739877 0.492525 0.439737
+v 0.739877 0.492525 -0.439737
+v 0.837974 0.3 0.439737
+v 0.837974 0.3 -0.439737
+v 0.694901 0.592075 -0.39457
+v 0.694901 0.592076 0.39457
+v 0.6 0.7847 0.122743
+v 0.6 0.7847 -0.122743
+v 0.892075 0.205099 -0.39457
+v 0.892076 0.205099 0.39457
+v 0.6 0.798292 0.0412897
+v 0.6 0.798292 -0.0412897
+v 0.992131 0.0151005 0.122743
+v 0.992131 0.0151005 -0.122743
+v 1.00313 0.00711123 0.0412897
+v 1.00313 0.00711123 -0.0412897
+v 0.792525 0.439877 0.439737
+v 0.792525 0.439877 -0.439737
+v 0.826326 0.373538 0.439737
+v 0.826326 0.373538 -0.439737
+v 0.713676 0.649858 0.338641
+v 0.713676 0.649858 -0.338641
+v 0.949858 0.186324 0.338641
+v 0.949858 0.186324 -0.338641
+v 0.780513 0.548454 0.39457
+v 0.780513 0.548454 -0.39457
+v 0.907106 0.3 0.39457
+v 0.907106 0.3 -0.39457
+v 0.729349 0.698096 0.273474
+v 0.729349 0.698096 -0.273474
+v 0.998096 0.170651 0.273474
+v 0.998096 0.170651 -0.273474
+v 0.848454 0.480513 0.39457
+v 0.848454 0.480513 -0.39457
+v 0.892075 0.394901 0.39457
+v 0.892075 0.394901 -0.39457
+v 0.741495 0.735476 0.200848
+v 0.741495 0.735476 -0.200848
+v 1.03548 0.158505 0.200848
+v 1.03548 0.158505 -0.200848
+v 0.816224 0.597607 0.338641
+v 0.816224 0.597607 -0.338641
+v 0.967862 0.3 0.338641
+v 0.967862 0.3 -0.338641
+v 0.749781 0.760977 0.122743
+v 0.749781 0.760977 -0.122743
+v 1.06098 0.15022 0.122743
+v 1.06098 0.15022 -0.122743
+v 0.753981 0.773904 0.0412897
+v 0.753981 0.773904 -0.0412897
+v 1.0739 0.146019 0.0412897
+v 1.0739 0.146019 -0.0412897
+v 0.897607 0.516224 0.338641
+v 0.897607 0.516224 -0.338641
+v 0.949857 0.413676 -0.338641
+v 0.949858 0.413676 0.338641
+v 0.846037 0.638641 0.273474
+v 0.846037 0.638641 -0.273474
+v 1.01858 0.3 0.273474
+v 1.01858 0.3 -0.273474
+v 0.869139 0.670438 0.200848
+v 0.869139 0.670438 -0.200848
+v 1.05789 0.3 0.200848
+v 1.05789 0.3 -0.200848
+v 0.938641 0.546037 0.273474
+v 0.938641 0.546037 -0.273474
+v 0.998096 0.429349 0.273474
+v 0.998096 0.429349 -0.273474
+v 0.8849 0.692131 0.122743
+v 0.8849 0.692131 -0.122743
+v 1.0847 0.3 0.122743
+v 1.0847 0.3 -0.122743
+v 0.892889 0.703127 0.0412897
+v 0.892889 0.703127 -0.0412897
+v 1.09829 0.3 0.0412897
+v 1.09829 0.3 -0.0412897
+v 0.970438 0.569139 0.200848
+v 0.970438 0.569139 -0.200848
+v 1.03548 0.441495 0.200848
+v 1.03548 0.441495 -0.200848
+v 0.992131 0.5849 0.122743
+v 0.992131 0.5849 -0.122743
+v 1.06098 0.449781 0.122743
+v 1.06098 0.449781 -0.122743
+v 1.00313 0.592889 0.0412897
+v 1.00313 0.592889 -0.0412897
+v 1.0739 0.453981 0.0412897
+v 1.0739 0.453981 -0.0412897
+v 0.302656 -0.098672 -4.04758e-11
+v 0.119055 0.190472 0
+v 0.302295 -0.098311 0.0103329
+v 0.301208 -0.097224 0.0206656
+v 0.299383 -0.095399 0.0309971
+v 0.11977 0.185961 0.0395272
+v 0.119235 0.18934 0.0199004
+v 0.15894 0.114107 -0.126728
+v 0.170235 0.0969156 -0.133393
+v 0.180792 0.0798019 -0.138221
+v 0.190576 0.0629269 -0.141336
+v 0.199568 0.0464194 -0.142864
+v 0.207764 0.0303797 -0.142925
+v 0.239765 -0.013601 -0.129405
+v 0.216833 0.0147995 -0.140808
+v 0.22907 8.3353e-11 -0.135465
+v 0.249054 -0.0260873 -0.122731
+v 0.258454 -0.0373211 -0.114862
+v 0.266658 -0.0474544 -0.106585
+v 0.273756 -0.0565611 -0.0979668
+v 0.279826 -0.0647075 -0.0890622
+v 0.284938 -0.0719522 -0.079911
+v 0.289149 -0.0783464 -0.0705434
+v 0.292507 -0.0839329 -0.0609809
+v 0.295049 -0.0887464 -0.0512377
+v 0.296806 -0.0928137 -0.0413232
+v 0.137914 0.146467 -0.106414
+v 0.148 0.130793 -0.117767
+v 0.123693 0.178944 -0.0581427
+v 0.128047 0.169898 -0.0756434
+v 0.132459 0.15915 -0.0918852
+v 0.119235 0.18934 -0.0199004
+v 0.11977 0.185961 -0.0395272
+v 0.299383 -0.095399 -0.0309971
+v 0.301208 -0.097224 -0.0206656
+v 0.302295 -0.098311 -0.0103329
+v 0.284938 -0.0719522 0.079911
+v 0.279826 -0.0647075 0.0890622
+v 0.273756 -0.0565611 0.0979668
+v 0.266657 -0.0474544 0.106585
+v 0.258454 -0.0373211 0.114862
+v 0.249054 -0.0260873 0.122731
+v 0.207764 0.0303797 0.142925
+v 0.199568 0.0464194 0.142864
+v 0.190576 0.0629269 0.141336
+v 0.180792 0.0798019 0.138221
+v 0.170235 0.0969156 0.133393
+v 0.15894 0.114107 0.126728
+v 0.239765 -0.013601 0.129405
+v 0.22907 -2.77844e-11 0.135465
+v 0.216833 0.0147995 0.140808
+v 0.296806 -0.0928137 0.0413232
+v 0.295049 -0.0887464 0.0512377
+v 0.292507 -0.0839329 0.0609809
+v 0.289149 -0.0783464 0.0705434
+v 0.148 0.130793 0.117767
+v 0.137914 0.146467 0.106414
+v 0.132459 0.15915 0.0918852
+v 0.128047 0.169898 0.0756434
+v 0.123693 0.178944 0.0581428
+v 0.275476 -0.0588694 -0.0954436
+v 0.249037 -0.0260675 -0.122743
+v 0.153399 0.122005 -0.122743
+v 0.213211 0.0189815 -0.141977
+v 0.136027 0.149246 -0.103866
+v 0.228378 0.000836743 -0.135767
+v 0.298434 -0.0944504 -0.0347901
+v 0.296809 -0.0928248 -0.0412897
+v 0.119851 0.185446 -0.0412897
+v 0.295059 -0.0887695 0.0511813
+v 0.296809 -0.0928248 0.0412897
+v 0.144975 0.135494 0.114362
+v 0.119851 0.185446 0.0412897
+v 0.123804 0.178715 0.0585855
+v 0.136027 0.149246 0.103866
+v 0.249037 -0.0260675 0.122743
+v 0.153399 0.122005 0.122743
+v 0.19695 0.0512265 0.142419
+v 0.213211 0.0189815 0.141977
+g patch0
+f 19 417 26
+f 417 452 26
+f 25 19 26
+f 25 26 41
+f 41 26 13
+f 13 26 33
+f 33 26 49
+f 49 26 57
+f 57 26 5
+f 5 26 4
+f 4 26 56
+f 56 26 48
+f 48 26 32
+f 32 26 12
+f 12 26 40
+f 40 26 24
+f 24 26 18
+f 18 26 23
+f 23 26 39
+f 39 26 11
+f 11 26 31
+f 31 26 47
+f 47 26 55
+f 55 26 3
+f 3 26 1
+f 1 26 53
+f 53 26 45
+f 45 26 30
+f 30 26 10
+f 10 26 38
+f 38 26 22
+f 22 26 17
+f 17 26 21
+f 21 26 37
+f 37 26 9
+f 9 26 29
+f 29 26 46
+f 46 26 54
+f 54 26 2
+f 2 26 8
+f 8 26 60
+f 60 26 52
+f 52 26 36
+f 36 26 16
+f 16 26 44
+f 44 26 28
+f 28 26 20
+f 20 26 27
+f 27 26 43
+f 43 26 15
+f 15 26 35
+f 35 26 51
+f 51 26 59
+f 59 26 7
+f 7 26 6
+f 6 26 58
+f 58 26 50
+f 50 26 34
+f 34 26 14
+f 14 26 42
+f 19 25 417
+f 25 419 417
+f 421 487 69
+f 421 69 420
+f 419 420 69
+f 417 419 69
+f 452 417 69
+f 70 452 69
+f 70 451 452
+f 483 450 70
+f 70 450 451
+f 26 452 42
+f 452 451 42
+f 42 451 14
+f 451 450 14
+f 14 450 34
+f 450 483 34
+f 484 442 34
+f 483 484 34
+f 34 442 50
+f 442 441 50
+f 50 441 58
+f 441 440 58
+f 58 440 6
+f 440 439 6
+f 6 439 7
+f 439 438 7
+f 59 7 438
+f 59 438 437
+f 51 59 437
+f 51 437 436
+f 436 437 477
+f 35 51 436
+f 35 436 435
+f 15 35 435
+f 15 435 434
+f 43 15 434
+f 43 434 433
+f 27 43 433
+f 27 478 430
+f 27 433 478
+f 20 27 430
+f 20 430 432
+f 28 20 432
+f 28 432 431
+f 431 432 482
+f 44 28 431
+f 44 480 429
+f 44 431 480
+f 16 44 429
+f 16 429 428
+f 36 16 428
+f 36 428 427
+f 52 36 427
+f 52 427 426
+f 60 52 426
+f 60 426 425
+f 8 60 425
+f 8 425 424
+f 2 8 424
+f 2 479 444
+f 2 424 479
+f 54 2 444
+f 54 444 443
+f 46 54 443
+f 46 481 447
+f 46 443 481
+f 29 46 447
+f 29 447 446
+f 9 29 446
+f 9 446 445
+f 37 9 445
+f 37 485 449
+f 37 445 485
+f 21 37 449
+f 21 449 448
+f 17 21 448
+f 17 448 418
+f 423 22 17
+f 423 17 418
+f 422 38 22
+f 422 22 423
+f 476 10 38
+f 476 38 489
+f 489 38 422
+f 475 30 10
+f 475 10 490
+f 490 10 476
+f 474 45 30
+f 474 30 475
+f 473 53 45
+f 473 45 491
+f 491 45 474
+f 472 1 53
+f 472 53 488
+f 488 53 473
+f 464 3 1
+f 464 1 493
+f 493 1 472
+f 55 3 463
+f 3 464 463
+f 47 55 462
+f 55 463 462
+f 31 47 461
+f 47 462 461
+f 11 31 460
+f 31 461 494
+f 31 494 460
+f 39 11 459
+f 11 460 459
+f 23 39 467
+f 39 459 495
+f 39 495 467
+f 18 23 466
+f 23 467 466
+f 24 18 465
+f 18 466 465
+f 40 24 458
+f 24 465 492
+f 24 492 458
+f 12 40 457
+f 40 458 457
+f 32 12 456
+f 12 457 456
+f 48 32 455
+f 32 456 455
+f 56 48 454
+f 48 455 454
+f 4 56 453
+f 56 454 453
+f 5 4 471
+f 4 453 471
+f 57 5 470
+f 5 471 470
+f 49 57 469
+f 57 470 469
+f 33 49 468
+f 49 469 486
+f 49 486 468
+f 13 33 421
+f 33 468 487
+f 33 487 421
+f 41 13 420
+f 13 421 420
+f 25 41 419
+f 41 420 419
+f 70 69 94
+f 69 93 94
+f 468 486 69
+f 468 69 487
+f 458 492 73
+f 458 73 457
+f 456 457 73
+f 455 456 73
+f 454 455 73
+f 453 454 73
+f 471 453 73
+f 470 471 73
+f 469 470 73
+f 486 469 73
+f 486 73 69
+f 69 73 93
+f 70 94 98
+f 70 98 74
+f 74 477 437
+f 74 437 70
+f 484 70 442
+f 442 70 441
+f 441 70 440
+f 440 70 439
+f 70 437 438
+f 70 438 439
+f 484 483 70
+f 74 478 433
+f 74 436 477
+f 74 435 436
+f 74 434 435
+f 74 433 434
+f 82 482 432
+f 82 432 74
+f 74 430 478
+f 74 432 430
+f 480 431 66
+f 431 482 82
+f 431 82 66
+f 66 62 479
+f 66 429 480
+f 66 428 429
+f 66 427 428
+f 66 426 427
+f 66 425 426
+f 66 424 425
+f 66 479 424
+f 62 481 443
+f 62 444 479
+f 62 443 444
+f 62 447 481
+f 62 446 447
+f 62 68 445
+f 445 68 485
+f 62 445 446
+f 485 68 67
+f 485 67 449
+f 449 67 448
+f 418 448 67
+f 423 418 67
+f 422 423 67
+f 489 422 67
+f 489 67 71
+f 489 71 476
+f 476 71 490
+f 490 71 61
+f 490 61 475
+f 475 61 474
+f 491 474 61
+f 473 491 61
+f 473 61 488
+f 472 61 493
+f 488 61 472
+f 493 61 63
+f 493 63 464
+f 464 63 463
+f 462 463 63
+f 461 462 63
+f 494 461 63
+f 494 63 65
+f 494 65 460
+f 460 65 459
+f 495 459 65
+f 467 495 65
+f 467 65 466
+f 465 466 65
+f 492 465 65
+f 492 65 73
+f 94 93 132
+f 93 131 132
+f 73 97 93
+f 93 97 131
+f 94 132 136
+f 94 136 98
+f 65 81 73
+f 73 81 97
+f 98 136 146
+f 98 146 106
+f 74 98 106
+f 74 106 82
+f 82 106 114
+f 82 114 86
+f 66 82 86
+f 66 86 78
+f 64 66 78
+f 62 66 64
+f 72 62 64
+f 68 62 72
+f 68 72 92
+f 67 68 92
+f 67 92 91
+f 67 91 95
+f 67 95 71
+f 71 95 103
+f 71 103 79
+f 71 79 61
+f 61 79 63
+f 79 83 63
+f 63 83 75
+f 63 75 65
+f 75 77 65
+f 65 77 81
+f 132 131 192
+f 131 191 192
+f 97 135 131
+f 131 135 191
+f 132 192 200
+f 132 200 136
+f 81 105 97
+f 97 105 135
+f 136 200 204
+f 136 204 146
+f 77 85 81
+f 81 85 105
+f 146 204 206
+f 146 206 150
+f 106 146 150
+f 106 150 114
+f 114 150 157
+f 114 157 122
+f 86 114 122
+f 86 122 102
+f 78 86 102
+f 78 102 90
+f 76 78 90
+f 64 78 76
+f 80 64 76
+f 72 64 80
+f 72 80 96
+f 72 96 92
+f 92 96 128
+f 91 92 128
+f 91 128 127
+f 91 127 129
+f 91 129 95
+f 95 129 143
+f 95 143 103
+f 103 143 147
+f 103 147 111
+f 79 103 111
+f 79 111 83
+f 83 111 119
+f 83 119 99
+f 83 99 75
+f 75 99 87
+f 75 87 77
+f 87 89 77
+f 77 89 85
+f 192 191 292
+f 191 291 292
+f 135 199 191
+f 199 291 191
+f 192 292 286
+f 200 192 286
+f 105 145 135
+f 135 145 199
+f 200 286 283
+f 204 200 283
+f 85 113 105
+f 105 113 145
+f 204 283 270
+f 206 204 270
+f 89 101 85
+f 85 101 113
+f 206 270 264
+f 214 206 264
+f 150 206 214
+f 150 214 157
+f 157 214 218
+f 157 218 169
+f 122 157 169
+f 122 169 138
+f 102 122 138
+f 102 138 118
+f 90 102 118
+f 90 118 110
+f 88 90 110
+f 76 90 88
+f 84 76 88
+f 80 76 84
+f 80 84 104
+f 96 80 104
+f 96 104 130
+f 96 130 128
+f 128 130 180
+f 127 128 180
+f 127 180 179
+f 127 179 185
+f 127 185 129
+f 129 185 187
+f 129 187 143
+f 147 143 187
+f 147 187 201
+f 147 201 153
+f 201 207 153
+f 111 147 153
+f 111 153 119
+f 119 153 167
+f 119 167 133
+f 99 119 133
+f 99 133 115
+f 99 115 87
+f 87 115 107
+f 87 107 89
+f 89 107 109
+f 89 109 101
+f 292 291 344
+f 291 343 344
+f 199 285 291
+f 285 343 291
+f 292 344 342
+f 286 292 342
+f 145 203 199
+f 203 285 199
+f 286 342 328
+f 283 286 328
+f 113 149 145
+f 145 149 203
+f 283 328 324
+f 270 283 324
+f 101 121 113
+f 113 121 149
+f 270 324 318
+f 264 270 318
+f 109 117 101
+f 101 117 121
+f 264 318 304
+f 256 264 304
+f 214 264 256
+f 218 214 256
+f 218 256 252
+f 226 218 252
+f 169 218 226
+f 169 226 178
+f 138 169 178
+f 138 178 156
+f 118 138 156
+f 118 156 142
+f 110 118 142
+f 110 142 126
+f 108 110 126
+f 88 110 108
+f 100 88 108
+f 84 88 100
+f 84 100 112
+f 104 84 112
+f 104 112 144
+f 104 144 130
+f 130 144 186
+f 130 186 180
+f 180 186 280
+f 179 180 280
+f 179 280 279
+f 179 279 271
+f 179 271 185
+f 185 271 267
+f 185 267 187
+f 187 267 265
+f 187 265 201
+f 201 265 258
+f 201 258 207
+f 207 258 254
+f 207 254 215
+f 153 207 167
+f 207 215 167
+f 167 215 219
+f 167 219 175
+f 133 167 175
+f 133 175 151
+f 115 133 151
+f 115 151 139
+f 115 139 107
+f 107 139 123
+f 107 123 109
+f 109 123 125
+f 109 125 117
+f 344 343 380
+f 343 379 380
+f 285 341 343
+f 341 379 343
+f 344 380 376
+f 342 344 376
+f 203 284 285
+f 284 341 285
+f 342 376 368
+f 328 342 368
+f 149 205 203
+f 205 284 203
+f 328 368 360
+f 324 328 360
+f 121 158 149
+f 149 158 205
+f 324 360 352
+f 318 324 352
+f 117 137 121
+f 121 137 158
+f 337 318 352
+f 304 318 337
+f 125 141 117
+f 117 141 137
+f 320 304 337
+f 296 304 320
+f 256 304 296
+f 252 256 296
+f 282 252 296
+f 244 252 282
+f 226 252 244
+f 230 226 244
+f 178 226 230
+f 178 230 198
+f 156 178 198
+f 156 198 174
+f 142 156 174
+f 142 174 166
+f 126 142 166
+f 126 166 162
+f 124 126 162
+f 108 126 124
+f 116 108 124
+f 100 108 116
+f 100 116 120
+f 112 100 120
+f 112 120 148
+f 112 148 144
+f 188 144 148
+f 188 148 202
+f 144 188 186
+f 186 188 272
+f 186 272 280
+f 280 272 340
+f 279 280 340
+f 279 340 339
+f 279 339 335
+f 279 335 271
+f 271 335 325
+f 271 325 267
+f 267 325 321
+f 267 321 265
+f 265 321 313
+f 265 313 258
+f 258 313 301
+f 258 301 254
+f 254 301 293
+f 254 293 245
+f 215 254 245
+f 215 245 219
+f 219 245 241
+f 219 241 227
+f 175 219 227
+f 175 227 189
+f 151 175 189
+f 151 189 171
+f 139 151 171
+f 139 171 163
+f 139 163 123
+f 123 163 159
+f 123 159 125
+f 125 159 161
+f 125 161 141
+f 380 379 404
+f 379 403 404
+f 341 375 379
+f 375 403 379
+f 380 404 400
+f 376 380 400
+f 284 327 341
+f 327 375 341
+f 392 376 400
+f 368 376 392
+f 205 269 284
+f 269 327 284
+f 388 368 392
+f 360 368 388
+f 158 213 205
+f 213 269 205
+f 372 360 388
+f 352 360 372
+f 137 170 158
+f 158 170 213
+f 356 352 372
+f 337 352 356
+f 141 155 137
+f 137 155 170
+f 332 337 356
+f 320 337 332
+f 141 161 165
+f 141 165 155
+f 308 320 332
+f 300 320 308
+f 300 296 320
+f 282 296 300
+f 262 282 300
+f 250 282 262
+f 250 244 282
+f 240 244 250
+f 240 230 244
+f 234 230 240
+f 198 230 234
+f 198 234 224
+f 174 198 224
+f 174 224 212
+f 166 174 212
+f 166 212 196
+f 162 166 196
+f 162 196 184
+f 160 162 184
+f 124 162 160
+f 140 124 160
+f 116 124 140
+f 116 140 134
+f 120 116 134
+f 120 134 154
+f 120 154 148
+f 202 148 154
+f 202 154 208
+f 202 208 266
+f 202 266 268
+f 188 202 268
+f 188 268 272
+f 272 268 336
+f 272 336 340
+f 336 378 340
+f 339 340 378
+f 339 378 377
+f 339 377 373
+f 335 339 373
+f 335 373 365
+f 325 335 365
+f 325 365 357
+f 321 325 357
+f 321 357 349
+f 313 321 349
+f 313 349 334
+f 301 313 334
+f 301 334 315
+f 293 301 315
+f 293 315 297
+f 273 293 297
+f 245 293 273
+f 245 273 241
+f 241 273 247
+f 241 247 237
+f 227 241 237
+f 227 237 231
+f 189 227 231
+f 189 231 221
+f 171 189 221
+f 171 221 209
+f 163 171 209
+f 163 209 193
+f 163 193 159
+f 159 193 181
+f 159 181 161
+f 161 181 183
+f 161 183 165
+f 375 399 403
+f 415 403 399
+f 416 404 415
+f 404 403 415
+f 412 404 416
+f 412 400 404
+f 327 367 375
+f 367 399 375
+f 408 400 412
+f 408 392 400
+f 269 323 327
+f 323 367 327
+f 396 392 408
+f 396 388 392
+f 213 263 269
+f 263 323 269
+f 383 388 396
+f 383 372 388
+f 170 217 213
+f 217 263 213
+f 364 372 383
+f 364 356 372
+f 155 177 170
+f 170 177 217
+f 348 356 364
+f 348 332 356
+f 165 173 155
+f 155 173 177
+f 312 332 348
+f 312 308 332
+f 165 183 195
+f 165 195 173
+f 278 300 308
+f 290 308 312
+f 290 278 308
+f 262 300 278
+f 236 262 278
+f 236 250 262
+f 236 240 250
+f 236 234 240
+f 224 234 236
+f 212 224 236
+f 196 212 236
+f 184 196 236
+f 182 184 236
+f 160 184 182
+f 164 160 182
+f 140 160 164
+f 140 164 152
+f 134 140 152
+f 134 152 168
+f 154 134 168
+f 208 154 168
+f 208 168 216
+f 208 216 257
+f 208 257 266
+f 266 257 322
+f 266 322 326
+f 268 266 326
+f 268 326 336
+f 326 374 336
+f 336 374 378
+f 374 402 378
+f 377 378 402
+f 377 402 401
+f 377 401 397
+f 373 377 397
+f 373 397 389
+f 365 373 389
+f 365 389 385
+f 357 365 385
+f 357 385 369
+f 349 357 369
+f 349 369 353
+f 334 349 353
+f 334 353 329
+f 315 334 329
+f 315 329 305
+f 297 315 305
+f 275 297 305
+f 259 297 275
+f 273 297 259
+f 247 273 259
+f 235 247 259
+f 237 247 235
+f 231 237 235
+f 221 231 235
+f 209 221 235
+f 193 209 235
+f 193 235 181
+f 181 235 183
+f 183 235 195
+f 367 391 399
+f 391 411 399
+f 411 415 399
+f 414 416 413
+f 416 415 413
+f 413 415 411
+f 410 416 414
+f 410 412 416
+f 406 412 410
+f 406 408 412
+f 323 359 367
+f 359 391 367
+f 394 408 406
+f 394 396 408
+f 263 317 323
+f 317 359 323
+f 382 396 394
+f 382 383 396
+f 217 255 263
+f 255 317 263
+f 362 383 382
+f 362 364 383
+f 177 225 217
+f 225 255 217
+f 346 364 362
+f 346 348 364
+f 173 197 177
+f 177 197 225
+f 310 348 346
+f 310 312 348
+f 173 195 211
+f 173 211 197
+f 288 312 310
+f 288 290 312
+f 195 235 211
+f 236 278 290
+f 236 290 288
+f 236 288 276
+f 236 276 260
+f 236 260 248
+f 238 236 248
+f 232 236 238
+f 222 236 232
+f 210 236 222
+f 194 236 210
+f 194 182 236
+f 164 182 194
+f 164 194 172
+f 152 164 172
+f 152 172 176
+f 168 152 176
+f 168 176 216
+f 176 220 216
+f 216 220 253
+f 216 253 257
+f 257 253 314
+f 257 314 322
+f 314 358 322
+f 322 358 366
+f 322 366 326
+f 326 366 374
+f 366 398 374
+f 374 398 402
+f 398 414 402
+f 401 402 414
+f 401 414 413
+f 401 413 409
+f 397 401 409
+f 397 409 405
+f 389 397 405
+f 389 405 393
+f 385 389 393
+f 385 393 381
+f 369 385 381
+f 369 381 361
+f 353 369 361
+f 353 361 345
+f 329 353 345
+f 309 329 345
+f 305 329 309
+f 287 305 309
+f 275 305 287
+f 235 275 287
+f 235 259 275
+f 235 277 261
+f 235 261 249
+f 235 249 239
+f 235 239 233
+f 223 235 233
+f 211 235 223
+f 235 287 289
+f 235 289 277
+f 359 387 391
+f 387 407 391
+f 407 411 391
+f 409 413 411
+f 409 411 407
+f 398 410 414
+f 390 410 398
+f 390 406 410
+f 386 406 390
+f 386 394 406
+f 317 351 359
+f 351 387 359
+f 370 394 386
+f 370 382 394
+f 255 303 317
+f 303 351 317
+f 354 382 370
+f 354 362 382
+f 225 251 255
+f 251 303 255
+f 330 362 354
+f 330 346 362
+f 197 229 225
+f 229 251 225
+f 306 346 330
+f 306 310 346
+f 211 223 197
+f 197 223 229
+f 276 310 306
+f 276 288 310
+f 260 276 306
+f 248 260 298
+f 260 306 298
+f 238 248 274
+f 248 298 274
+f 242 232 238
+f 242 238 274
+f 228 222 232
+f 228 232 242
+f 190 210 222
+f 190 222 228
+f 172 194 210
+f 172 210 190
+f 176 172 190
+f 176 190 220
+f 220 190 228
+f 220 228 246
+f 220 246 253
+f 253 246 302
+f 253 302 314
+f 302 350 314
+f 314 350 358
+f 350 386 358
+f 358 386 390
+f 358 390 366
+f 366 390 398
+f 405 409 407
+f 405 407 395
+f 393 405 395
+f 393 395 384
+f 381 393 384
+f 363 381 384
+f 361 381 363
+f 347 361 363
+f 345 361 347
+f 311 345 347
+f 309 345 311
+f 289 309 311
+f 287 309 289
+f 261 277 307
+f 289 311 277
+f 277 311 307
+f 261 307 299
+f 249 261 299
+f 249 299 281
+f 239 249 281
+f 239 281 243
+f 233 239 243
+f 233 243 229
+f 223 233 229
+f 351 371 387
+f 371 395 387
+f 395 407 387
+f 350 370 386
+f 303 338 351
+f 338 371 351
+f 333 370 350
+f 333 354 370
+f 251 295 303
+f 295 338 303
+f 316 354 333
+f 316 330 354
+f 229 243 251
+f 243 295 251
+f 298 330 316
+f 298 306 330
+f 274 298 316
+f 274 316 294
+f 242 274 294
+f 246 242 294
+f 228 242 246
+f 246 294 302
+f 294 333 302
+f 302 333 350
+f 384 395 371
+f 355 384 371
+f 363 384 355
+f 331 363 355
+f 347 363 331
+f 307 347 331
+f 311 347 307
+f 299 307 331
+f 299 331 319
+f 281 299 319
+f 281 319 295
+f 243 281 295
+f 338 355 371
+f 295 319 338
+f 319 355 338
+f 294 316 333
+f 319 331 355
diff --git a/tutorials/mesh/cvMesh/simpleShapes/constant/triSurface/domain.stl b/tutorials/mesh/cvMesh/simpleShapes/constant/triSurface/domain.stl
new file mode 100644
index 0000000000000000000000000000000000000000..5650ed200133c64ccaf37ccf55701500b6acfbac
--- /dev/null
+++ b/tutorials/mesh/cvMesh/simpleShapes/constant/triSurface/domain.stl
@@ -0,0 +1,86 @@
+solid ascii
+ facet normal -1 0 0
+  outer loop
+   vertex -0.7 -0.9 -1
+   vertex -0.7 -0.9 1
+   vertex -0.7 1.1 -1
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -0.7 1.1 1
+   vertex -0.7 1.1 -1
+   vertex -0.7 -0.9 1
+  endloop
+ endfacet
+ facet normal 1 0 0
+  outer loop
+   vertex 1.3 -0.9 -1
+   vertex 1.3 1.1 -1
+   vertex 1.3 -0.9 1
+  endloop
+ endfacet
+ facet normal 1 -0 0
+  outer loop
+   vertex 1.3 1.1 1
+   vertex 1.3 -0.9 1
+   vertex 1.3 1.1 -1
+  endloop
+ endfacet
+ facet normal 0 -1 0
+  outer loop
+   vertex -0.7 -0.9 -1
+   vertex 1.3 -0.9 -1
+   vertex -0.7 -0.9 1
+  endloop
+ endfacet
+ facet normal 0 -1 0
+  outer loop
+   vertex 1.3 -0.9 1
+   vertex -0.7 -0.9 1
+   vertex 1.3 -0.9 -1
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex -0.7 1.1 -1
+   vertex -0.7 1.1 1
+   vertex 1.3 1.1 -1
+  endloop
+ endfacet
+ facet normal 0 1 -0
+  outer loop
+   vertex 1.3 1.1 1
+   vertex 1.3 1.1 -1
+   vertex -0.7 1.1 1
+  endloop
+ endfacet
+ facet normal 0 0 -1
+  outer loop
+   vertex -0.7 -0.9 -1
+   vertex -0.7 1.1 -1
+   vertex 1.3 -0.9 -1
+  endloop
+ endfacet
+ facet normal 0 0 -1
+  outer loop
+   vertex 1.3 1.1 -1
+   vertex 1.3 -0.9 -1
+   vertex -0.7 1.1 -1
+  endloop
+ endfacet
+ facet normal 0 0 1
+  outer loop
+   vertex -0.7 -0.9 1
+   vertex 1.3 -0.9 1
+   vertex -0.7 1.1 1
+  endloop
+ endfacet
+ facet normal -0 0 1
+  outer loop
+   vertex 1.3 1.1 1
+   vertex -0.7 1.1 1
+   vertex 1.3 -0.9 1
+  endloop
+ endfacet
+endsolid
diff --git a/tutorials/mesh/cvMesh/simpleShapes/constant/triSurface/sphere.stl b/tutorials/mesh/cvMesh/simpleShapes/constant/triSurface/sphere.stl
new file mode 100644
index 0000000000000000000000000000000000000000..f054ffb23807b393279709c553e34fa393031aa6
--- /dev/null
+++ b/tutorials/mesh/cvMesh/simpleShapes/constant/triSurface/sphere.stl
@@ -0,0 +1,5042 @@
+solid ascii
+ facet normal 0.0825722 0.0130781 0.996499
+  outer loop
+   vertex 0.682297 0.3 0.493181
+   vertex 0.678269 0.325431 0.493181
+   vertex 0.6 0.3 0.5
+  endloop
+ endfacet
+ facet normal 0.0744894 0.0379543 0.996499
+  outer loop
+   vertex 0.678269 0.325431 0.493181
+   vertex 0.66658 0.348373 0.493181
+   vertex 0.6 0.3 0.5
+  endloop
+ endfacet
+ facet normal 0.0591152 0.0591152 0.996499
+  outer loop
+   vertex 0.66658 0.348373 0.493181
+   vertex 0.648373 0.36658 0.493181
+   vertex 0.6 0.3 0.5
+  endloop
+ endfacet
+ facet normal 0.0379542 0.0744895 0.996499
+  outer loop
+   vertex 0.648373 0.36658 0.493181
+   vertex 0.625431 0.378269 0.493181
+   vertex 0.6 0.3 0.5
+  endloop
+ endfacet
+ facet normal 0.0130782 0.0825722 0.996499
+  outer loop
+   vertex 0.625431 0.378269 0.493181
+   vertex 0.6 0.382297 0.493181
+   vertex 0.6 0.3 0.5
+  endloop
+ endfacet
+ facet normal -0.0130782 0.0825722 0.996499
+  outer loop
+   vertex 0.6 0.382297 0.493181
+   vertex 0.574569 0.378269 0.493181
+   vertex 0.6 0.3 0.5
+  endloop
+ endfacet
+ facet normal -0.0379542 0.0744894 0.996499
+  outer loop
+   vertex 0.574569 0.378269 0.493181
+   vertex 0.551627 0.36658 0.493181
+   vertex 0.6 0.3 0.5
+  endloop
+ endfacet
+ facet normal -0.0591151 0.0591151 0.996499
+  outer loop
+   vertex 0.551627 0.36658 0.493181
+   vertex 0.53342 0.348373 0.493181
+   vertex 0.6 0.3 0.5
+  endloop
+ endfacet
+ facet normal -0.0744894 0.0379543 0.996499
+  outer loop
+   vertex 0.53342 0.348373 0.493181
+   vertex 0.521731 0.325431 0.493181
+   vertex 0.6 0.3 0.5
+  endloop
+ endfacet
+ facet normal -0.0825721 0.0130781 0.996499
+  outer loop
+   vertex 0.521731 0.325431 0.493181
+   vertex 0.517703 0.3 0.493181
+   vertex 0.6 0.3 0.5
+  endloop
+ endfacet
+ facet normal -0.0825721 -0.0130781 0.996499
+  outer loop
+   vertex 0.517703 0.3 0.493181
+   vertex 0.521731 0.274569 0.493181
+   vertex 0.6 0.3 0.5
+  endloop
+ endfacet
+ facet normal -0.0744894 -0.0379543 0.996499
+  outer loop
+   vertex 0.521731 0.274569 0.493181
+   vertex 0.53342 0.251627 0.493181
+   vertex 0.6 0.3 0.5
+  endloop
+ endfacet
+ facet normal -0.0591151 -0.0591151 0.996499
+  outer loop
+   vertex 0.53342 0.251627 0.493181
+   vertex 0.551627 0.23342 0.493181
+   vertex 0.6 0.3 0.5
+  endloop
+ endfacet
+ facet normal -0.0379542 -0.0744894 0.996499
+  outer loop
+   vertex 0.551627 0.23342 0.493181
+   vertex 0.574569 0.221731 0.493181
+   vertex 0.6 0.3 0.5
+  endloop
+ endfacet
+ facet normal -0.0130781 -0.0825721 0.996499
+  outer loop
+   vertex 0.574569 0.221731 0.493181
+   vertex 0.6 0.217703 0.493181
+   vertex 0.6 0.3 0.5
+  endloop
+ endfacet
+ facet normal 0.0130781 -0.0825721 0.996499
+  outer loop
+   vertex 0.6 0.217703 0.493181
+   vertex 0.625431 0.221731 0.493181
+   vertex 0.6 0.3 0.5
+  endloop
+ endfacet
+ facet normal 0.0379543 -0.0744894 0.996499
+  outer loop
+   vertex 0.625431 0.221731 0.493181
+   vertex 0.648373 0.23342 0.493181
+   vertex 0.6 0.3 0.5
+  endloop
+ endfacet
+ facet normal 0.0591152 -0.0591151 0.996499
+  outer loop
+   vertex 0.648373 0.23342 0.493181
+   vertex 0.66658 0.251627 0.493181
+   vertex 0.6 0.3 0.5
+  endloop
+ endfacet
+ facet normal 0.0744894 -0.0379543 0.996499
+  outer loop
+   vertex 0.66658 0.251627 0.493181
+   vertex 0.678269 0.274569 0.493181
+   vertex 0.6 0.3 0.5
+  endloop
+ endfacet
+ facet normal 0.0825722 -0.0130781 0.996499
+  outer loop
+   vertex 0.678269 0.274569 0.493181
+   vertex 0.682297 0.3 0.493181
+   vertex 0.6 0.3 0.5
+  endloop
+ endfacet
+ facet normal 0.0825722 0.0130781 -0.996499
+  outer loop
+   vertex 0.682297 0.3 -0.493181
+   vertex 0.6 0.3 -0.5
+   vertex 0.678269 0.325431 -0.493181
+  endloop
+ endfacet
+ facet normal 0.0744895 0.0379542 -0.996499
+  outer loop
+   vertex 0.678269 0.325431 -0.493181
+   vertex 0.6 0.3 -0.5
+   vertex 0.66658 0.348373 -0.493181
+  endloop
+ endfacet
+ facet normal 0.0591152 0.0591152 -0.996499
+  outer loop
+   vertex 0.66658 0.348373 -0.493181
+   vertex 0.6 0.3 -0.5
+   vertex 0.648373 0.36658 -0.493181
+  endloop
+ endfacet
+ facet normal 0.0379542 0.0744895 -0.996499
+  outer loop
+   vertex 0.648373 0.36658 -0.493181
+   vertex 0.6 0.3 -0.5
+   vertex 0.625431 0.378269 -0.493181
+  endloop
+ endfacet
+ facet normal 0.0130781 0.0825722 -0.996499
+  outer loop
+   vertex 0.625431 0.378269 -0.493181
+   vertex 0.6 0.3 -0.5
+   vertex 0.6 0.382297 -0.493181
+  endloop
+ endfacet
+ facet normal -0.0130781 0.0825722 -0.996499
+  outer loop
+   vertex 0.6 0.382297 -0.493181
+   vertex 0.6 0.3 -0.5
+   vertex 0.574569 0.378269 -0.493181
+  endloop
+ endfacet
+ facet normal -0.0379543 0.0744894 -0.996499
+  outer loop
+   vertex 0.574569 0.378269 -0.493181
+   vertex 0.6 0.3 -0.5
+   vertex 0.551627 0.36658 -0.493181
+  endloop
+ endfacet
+ facet normal -0.0591152 0.0591151 -0.996499
+  outer loop
+   vertex 0.551627 0.36658 -0.493181
+   vertex 0.6 0.3 -0.5
+   vertex 0.53342 0.348373 -0.493181
+  endloop
+ endfacet
+ facet normal -0.0744894 0.0379543 -0.996499
+  outer loop
+   vertex 0.53342 0.348373 -0.493181
+   vertex 0.6 0.3 -0.5
+   vertex 0.521731 0.325431 -0.493181
+  endloop
+ endfacet
+ facet normal -0.0825722 0.0130781 -0.996499
+  outer loop
+   vertex 0.521731 0.325431 -0.493181
+   vertex 0.6 0.3 -0.5
+   vertex 0.517703 0.3 -0.493181
+  endloop
+ endfacet
+ facet normal -0.0825722 -0.0130781 -0.996499
+  outer loop
+   vertex 0.517703 0.3 -0.493181
+   vertex 0.6 0.3 -0.5
+   vertex 0.521731 0.274569 -0.493181
+  endloop
+ endfacet
+ facet normal -0.0744894 -0.0379543 -0.996499
+  outer loop
+   vertex 0.521731 0.274569 -0.493181
+   vertex 0.6 0.3 -0.5
+   vertex 0.53342 0.251627 -0.493181
+  endloop
+ endfacet
+ facet normal -0.0591151 -0.0591152 -0.996499
+  outer loop
+   vertex 0.53342 0.251627 -0.493181
+   vertex 0.6 0.3 -0.5
+   vertex 0.551627 0.23342 -0.493181
+  endloop
+ endfacet
+ facet normal -0.0379543 -0.0744894 -0.996499
+  outer loop
+   vertex 0.551627 0.23342 -0.493181
+   vertex 0.6 0.3 -0.5
+   vertex 0.574569 0.221731 -0.493181
+  endloop
+ endfacet
+ facet normal -0.0130781 -0.0825722 -0.996499
+  outer loop
+   vertex 0.574569 0.221731 -0.493181
+   vertex 0.6 0.3 -0.5
+   vertex 0.6 0.217703 -0.493181
+  endloop
+ endfacet
+ facet normal 0.0130782 -0.0825722 -0.996499
+  outer loop
+   vertex 0.6 0.217703 -0.493181
+   vertex 0.6 0.3 -0.5
+   vertex 0.625431 0.221731 -0.493181
+  endloop
+ endfacet
+ facet normal 0.0379543 -0.0744895 -0.996499
+  outer loop
+   vertex 0.625431 0.221731 -0.493181
+   vertex 0.6 0.3 -0.5
+   vertex 0.648373 0.23342 -0.493181
+  endloop
+ endfacet
+ facet normal 0.0591152 -0.0591152 -0.996499
+  outer loop
+   vertex 0.648373 0.23342 -0.493181
+   vertex 0.6 0.3 -0.5
+   vertex 0.66658 0.251627 -0.493181
+  endloop
+ endfacet
+ facet normal 0.0744895 -0.0379542 -0.996499
+  outer loop
+   vertex 0.66658 0.251627 -0.493181
+   vertex 0.6 0.3 -0.5
+   vertex 0.678269 0.274569 -0.493181
+  endloop
+ endfacet
+ facet normal 0.0825722 -0.0130781 -0.996499
+  outer loop
+   vertex 0.678269 0.274569 -0.493181
+   vertex 0.6 0.3 -0.5
+   vertex 0.682297 0.3 -0.493181
+  endloop
+ endfacet
+ facet normal 0.2453 0.0388517 0.968668
+  outer loop
+   vertex 0.682297 0.3 0.493181
+   vertex 0.76235 0.3 0.472909
+   vertex 0.754404 0.350169 0.472909
+  endloop
+ endfacet
+ facet normal 0.2453 0.0388517 0.968668
+  outer loop
+   vertex 0.682297 0.3 0.493181
+   vertex 0.754404 0.350169 0.472909
+   vertex 0.678269 0.325431 0.493181
+  endloop
+ endfacet
+ facet normal 0.400885 0.063494 0.913926
+  outer loop
+   vertex 0.76235 0.3 0.472909
+   vertex 0.837974 0.3 0.439737
+   vertex 0.826326 0.373538 0.439737
+  endloop
+ endfacet
+ facet normal 0.400885 0.0634939 0.913926
+  outer loop
+   vertex 0.76235 0.3 0.472909
+   vertex 0.826326 0.373538 0.439737
+   vertex 0.754404 0.350169 0.472909
+  endloop
+ endfacet
+ facet normal 0.544907 0.0863049 0.834043
+  outer loop
+   vertex 0.837974 0.3 0.439737
+   vertex 0.907106 0.3 0.39457
+   vertex 0.892075 0.394901 0.39457
+  endloop
+ endfacet
+ facet normal 0.544907 0.086305 0.834043
+  outer loop
+   vertex 0.837974 0.3 0.439737
+   vertex 0.892075 0.394901 0.39457
+   vertex 0.826326 0.373538 0.439737
+  endloop
+ endfacet
+ facet normal 0.673418 0.106659 0.731527
+  outer loop
+   vertex 0.907106 0.3 0.39457
+   vertex 0.967862 0.3 0.338641
+   vertex 0.949858 0.413676 0.338641
+  endloop
+ endfacet
+ facet normal 0.673418 0.106659 0.731527
+  outer loop
+   vertex 0.907106 0.3 0.39457
+   vertex 0.949858 0.413676 0.338641
+   vertex 0.892075 0.394901 0.39457
+  endloop
+ endfacet
+ facet normal 0.783048 0.124023 0.609471
+  outer loop
+   vertex 0.967862 0.3 0.338641
+   vertex 1.01858 0.3 0.273474
+   vertex 0.998096 0.429349 0.273474
+  endloop
+ endfacet
+ facet normal 0.783048 0.124022 0.609471
+  outer loop
+   vertex 0.967862 0.3 0.338641
+   vertex 0.998096 0.429349 0.273474
+   vertex 0.949858 0.413676 0.338641
+  endloop
+ endfacet
+ facet normal 0.871064 0.137963 0.471396
+  outer loop
+   vertex 1.01858 0.3 0.273474
+   vertex 1.05789 0.3 0.200848
+   vertex 1.03548 0.441495 0.200848
+  endloop
+ endfacet
+ facet normal 0.871064 0.137963 0.471396
+  outer loop
+   vertex 1.01858 0.3 0.273474
+   vertex 1.03548 0.441495 0.200848
+   vertex 0.998096 0.429349 0.273474
+  endloop
+ endfacet
+ facet normal 0.93538 0.14815 0.321116
+  outer loop
+   vertex 1.05789 0.3 0.200848
+   vertex 1.0847 0.3 0.122743
+   vertex 1.06098 0.449781 0.122743
+  endloop
+ endfacet
+ facet normal 0.93538 0.14815 0.321116
+  outer loop
+   vertex 1.05789 0.3 0.200848
+   vertex 1.06098 0.449781 0.122743
+   vertex 1.03548 0.441495 0.200848
+  endloop
+ endfacet
+ facet normal 0.974541 0.154352 0.162622
+  outer loop
+   vertex 1.0847 0.3 0.122743
+   vertex 1.09829 0.3 0.0412897
+   vertex 1.0739 0.453981 0.0412897
+  endloop
+ endfacet
+ facet normal 0.974541 0.154352 0.162621
+  outer loop
+   vertex 1.0847 0.3 0.122743
+   vertex 1.0739 0.453981 0.0412897
+   vertex 1.06098 0.449781 0.122743
+  endloop
+ endfacet
+ facet normal 0.987688 0.156435 -0
+  outer loop
+   vertex 1.09829 0.3 0.0412897
+   vertex 1.09829 0.3 -0.0412897
+   vertex 1.0739 0.453981 -0.0412897
+  endloop
+ endfacet
+ facet normal 0.987688 0.156435 -0
+  outer loop
+   vertex 1.09829 0.3 0.0412897
+   vertex 1.0739 0.453981 -0.0412897
+   vertex 1.0739 0.453981 0.0412897
+  endloop
+ endfacet
+ facet normal 0.974541 0.154352 -0.162622
+  outer loop
+   vertex 1.09829 0.3 -0.0412897
+   vertex 1.0847 0.3 -0.122743
+   vertex 1.06098 0.449781 -0.122743
+  endloop
+ endfacet
+ facet normal 0.974541 0.154352 -0.162621
+  outer loop
+   vertex 1.09829 0.3 -0.0412897
+   vertex 1.06098 0.449781 -0.122743
+   vertex 1.0739 0.453981 -0.0412897
+  endloop
+ endfacet
+ facet normal 0.93538 0.148149 -0.321117
+  outer loop
+   vertex 1.0847 0.3 -0.122743
+   vertex 1.05789 0.3 -0.200848
+   vertex 1.03548 0.441495 -0.200848
+  endloop
+ endfacet
+ facet normal 0.93538 0.14815 -0.321116
+  outer loop
+   vertex 1.0847 0.3 -0.122743
+   vertex 1.03548 0.441495 -0.200848
+   vertex 1.06098 0.449781 -0.122743
+  endloop
+ endfacet
+ facet normal 0.871064 0.137963 -0.471396
+  outer loop
+   vertex 1.05789 0.3 -0.200848
+   vertex 1.01858 0.3 -0.273474
+   vertex 0.998096 0.429349 -0.273474
+  endloop
+ endfacet
+ facet normal 0.871064 0.137963 -0.471396
+  outer loop
+   vertex 1.05789 0.3 -0.200848
+   vertex 0.998096 0.429349 -0.273474
+   vertex 1.03548 0.441495 -0.200848
+  endloop
+ endfacet
+ facet normal 0.783048 0.124023 -0.60947
+  outer loop
+   vertex 1.01858 0.3 -0.273474
+   vertex 0.967862 0.3 -0.338641
+   vertex 0.949857 0.413676 -0.338641
+  endloop
+ endfacet
+ facet normal 0.783048 0.124022 -0.609471
+  outer loop
+   vertex 1.01858 0.3 -0.273474
+   vertex 0.949857 0.413676 -0.338641
+   vertex 0.998096 0.429349 -0.273474
+  endloop
+ endfacet
+ facet normal 0.673418 0.106659 -0.731527
+  outer loop
+   vertex 0.967862 0.3 -0.338641
+   vertex 0.907106 0.3 -0.39457
+   vertex 0.892075 0.394901 -0.39457
+  endloop
+ endfacet
+ facet normal 0.673418 0.106659 -0.731527
+  outer loop
+   vertex 0.967862 0.3 -0.338641
+   vertex 0.892075 0.394901 -0.39457
+   vertex 0.949857 0.413676 -0.338641
+  endloop
+ endfacet
+ facet normal 0.544907 0.0863046 -0.834043
+  outer loop
+   vertex 0.907106 0.3 -0.39457
+   vertex 0.837974 0.3 -0.439737
+   vertex 0.826326 0.373538 -0.439737
+  endloop
+ endfacet
+ facet normal 0.544908 0.0863049 -0.834043
+  outer loop
+   vertex 0.907106 0.3 -0.39457
+   vertex 0.826326 0.373538 -0.439737
+   vertex 0.892075 0.394901 -0.39457
+  endloop
+ endfacet
+ facet normal 0.400885 0.0634944 -0.913925
+  outer loop
+   vertex 0.837974 0.3 -0.439737
+   vertex 0.76235 0.3 -0.472909
+   vertex 0.754404 0.350169 -0.472909
+  endloop
+ endfacet
+ facet normal 0.400885 0.0634937 -0.913926
+  outer loop
+   vertex 0.837974 0.3 -0.439737
+   vertex 0.754404 0.350169 -0.472909
+   vertex 0.826326 0.373538 -0.439737
+  endloop
+ endfacet
+ facet normal 0.2453 0.0388516 -0.968668
+  outer loop
+   vertex 0.76235 0.3 -0.472909
+   vertex 0.682297 0.3 -0.493181
+   vertex 0.678269 0.325431 -0.493181
+  endloop
+ endfacet
+ facet normal 0.2453 0.038852 -0.968668
+  outer loop
+   vertex 0.76235 0.3 -0.472909
+   vertex 0.678269 0.325431 -0.493181
+   vertex 0.754404 0.350169 -0.472909
+  endloop
+ endfacet
+ facet normal 0.221289 0.112752 0.968668
+  outer loop
+   vertex 0.678269 0.325431 0.493181
+   vertex 0.754404 0.350169 0.472909
+   vertex 0.731344 0.395427 0.472909
+  endloop
+ endfacet
+ facet normal 0.221289 0.112752 0.968668
+  outer loop
+   vertex 0.678269 0.325431 0.493181
+   vertex 0.731344 0.395427 0.472909
+   vertex 0.66658 0.348373 0.493181
+  endloop
+ endfacet
+ facet normal 0.361643 0.184267 0.913926
+  outer loop
+   vertex 0.754404 0.350169 0.472909
+   vertex 0.826326 0.373538 0.439737
+   vertex 0.792525 0.439877 0.439737
+  endloop
+ endfacet
+ facet normal 0.361643 0.184267 0.913926
+  outer loop
+   vertex 0.754404 0.350169 0.472909
+   vertex 0.792525 0.439877 0.439737
+   vertex 0.731344 0.395427 0.472909
+  endloop
+ endfacet
+ facet normal 0.491568 0.250466 0.834043
+  outer loop
+   vertex 0.826326 0.373538 0.439737
+   vertex 0.892075 0.394901 0.39457
+   vertex 0.848454 0.480513 0.39457
+  endloop
+ endfacet
+ facet normal 0.491568 0.250466 0.834043
+  outer loop
+   vertex 0.826326 0.373538 0.439737
+   vertex 0.848454 0.480513 0.39457
+   vertex 0.792525 0.439877 0.439737
+  endloop
+ endfacet
+ facet normal 0.607499 0.309536 0.731527
+  outer loop
+   vertex 0.892075 0.394901 0.39457
+   vertex 0.949858 0.413676 0.338641
+   vertex 0.897607 0.516224 0.338641
+  endloop
+ endfacet
+ facet normal 0.607499 0.309536 0.731527
+  outer loop
+   vertex 0.892075 0.394901 0.39457
+   vertex 0.897607 0.516224 0.338641
+   vertex 0.848454 0.480513 0.39457
+  endloop
+ endfacet
+ facet normal 0.706398 0.359928 0.609471
+  outer loop
+   vertex 0.949858 0.413676 0.338641
+   vertex 0.998096 0.429349 0.273474
+   vertex 0.938641 0.546037 0.273474
+  endloop
+ endfacet
+ facet normal 0.706397 0.359928 0.609471
+  outer loop
+   vertex 0.949858 0.413676 0.338641
+   vertex 0.938641 0.546037 0.273474
+   vertex 0.897607 0.516224 0.338641
+  endloop
+ endfacet
+ facet normal 0.785798 0.400384 0.471396
+  outer loop
+   vertex 0.998096 0.429349 0.273474
+   vertex 1.03548 0.441495 0.200848
+   vertex 0.970438 0.569139 0.200848
+  endloop
+ endfacet
+ facet normal 0.785798 0.400384 0.471396
+  outer loop
+   vertex 0.998096 0.429349 0.273474
+   vertex 0.970438 0.569139 0.200848
+   vertex 0.938641 0.546037 0.273474
+  endloop
+ endfacet
+ facet normal 0.843819 0.429947 0.321116
+  outer loop
+   vertex 1.03548 0.441495 0.200848
+   vertex 1.06098 0.449781 0.122743
+   vertex 0.992131 0.5849 0.122743
+  endloop
+ endfacet
+ facet normal 0.843819 0.429947 0.321116
+  outer loop
+   vertex 1.03548 0.441495 0.200848
+   vertex 0.992131 0.5849 0.122743
+   vertex 0.970438 0.569139 0.200848
+  endloop
+ endfacet
+ facet normal 0.879146 0.447947 0.162622
+  outer loop
+   vertex 1.06098 0.449781 0.122743
+   vertex 1.0739 0.453981 0.0412897
+   vertex 1.00313 0.592889 0.0412897
+  endloop
+ endfacet
+ facet normal 0.879146 0.447947 0.162622
+  outer loop
+   vertex 1.06098 0.449781 0.122743
+   vertex 1.00313 0.592889 0.0412897
+   vertex 0.992131 0.5849 0.122743
+  endloop
+ endfacet
+ facet normal 0.891007 0.45399 -0
+  outer loop
+   vertex 1.0739 0.453981 0.0412897
+   vertex 1.0739 0.453981 -0.0412897
+   vertex 1.00313 0.592889 -0.0412897
+  endloop
+ endfacet
+ facet normal 0.891007 0.45399 -0
+  outer loop
+   vertex 1.0739 0.453981 0.0412897
+   vertex 1.00313 0.592889 -0.0412897
+   vertex 1.00313 0.592889 0.0412897
+  endloop
+ endfacet
+ facet normal 0.879146 0.447947 -0.162622
+  outer loop
+   vertex 1.0739 0.453981 -0.0412897
+   vertex 1.06098 0.449781 -0.122743
+   vertex 0.992131 0.5849 -0.122743
+  endloop
+ endfacet
+ facet normal 0.879146 0.447947 -0.162622
+  outer loop
+   vertex 1.0739 0.453981 -0.0412897
+   vertex 0.992131 0.5849 -0.122743
+   vertex 1.00313 0.592889 -0.0412897
+  endloop
+ endfacet
+ facet normal 0.843818 0.429947 -0.321116
+  outer loop
+   vertex 1.06098 0.449781 -0.122743
+   vertex 1.03548 0.441495 -0.200848
+   vertex 0.970438 0.569139 -0.200848
+  endloop
+ endfacet
+ facet normal 0.843818 0.429947 -0.321117
+  outer loop
+   vertex 1.06098 0.449781 -0.122743
+   vertex 0.970438 0.569139 -0.200848
+   vertex 0.992131 0.5849 -0.122743
+  endloop
+ endfacet
+ facet normal 0.785798 0.400384 -0.471396
+  outer loop
+   vertex 1.03548 0.441495 -0.200848
+   vertex 0.998096 0.429349 -0.273474
+   vertex 0.938641 0.546037 -0.273474
+  endloop
+ endfacet
+ facet normal 0.785798 0.400384 -0.471396
+  outer loop
+   vertex 1.03548 0.441495 -0.200848
+   vertex 0.938641 0.546037 -0.273474
+   vertex 0.970438 0.569139 -0.200848
+  endloop
+ endfacet
+ facet normal 0.706398 0.359928 -0.609471
+  outer loop
+   vertex 0.998096 0.429349 -0.273474
+   vertex 0.949857 0.413676 -0.338641
+   vertex 0.897607 0.516224 -0.338641
+  endloop
+ endfacet
+ facet normal 0.706398 0.359927 -0.609471
+  outer loop
+   vertex 0.998096 0.429349 -0.273474
+   vertex 0.897607 0.516224 -0.338641
+   vertex 0.938641 0.546037 -0.273474
+  endloop
+ endfacet
+ facet normal 0.607499 0.309536 -0.731527
+  outer loop
+   vertex 0.949857 0.413676 -0.338641
+   vertex 0.892075 0.394901 -0.39457
+   vertex 0.848454 0.480513 -0.39457
+  endloop
+ endfacet
+ facet normal 0.607499 0.309536 -0.731527
+  outer loop
+   vertex 0.949857 0.413676 -0.338641
+   vertex 0.848454 0.480513 -0.39457
+   vertex 0.897607 0.516224 -0.338641
+  endloop
+ endfacet
+ facet normal 0.491568 0.250467 -0.834043
+  outer loop
+   vertex 0.892075 0.394901 -0.39457
+   vertex 0.826326 0.373538 -0.439737
+   vertex 0.792525 0.439877 -0.439737
+  endloop
+ endfacet
+ facet normal 0.491568 0.250466 -0.834043
+  outer loop
+   vertex 0.892075 0.394901 -0.39457
+   vertex 0.792525 0.439877 -0.439737
+   vertex 0.848454 0.480513 -0.39457
+  endloop
+ endfacet
+ facet normal 0.361643 0.184266 -0.913926
+  outer loop
+   vertex 0.826326 0.373538 -0.439737
+   vertex 0.754404 0.350169 -0.472909
+   vertex 0.731344 0.395427 -0.472909
+  endloop
+ endfacet
+ facet normal 0.361643 0.184267 -0.913926
+  outer loop
+   vertex 0.826326 0.373538 -0.439737
+   vertex 0.731344 0.395427 -0.472909
+   vertex 0.792525 0.439877 -0.439737
+  endloop
+ endfacet
+ facet normal 0.221288 0.112752 -0.968668
+  outer loop
+   vertex 0.754404 0.350169 -0.472909
+   vertex 0.678269 0.325431 -0.493181
+   vertex 0.66658 0.348373 -0.493181
+  endloop
+ endfacet
+ facet normal 0.221288 0.112752 -0.968668
+  outer loop
+   vertex 0.754404 0.350169 -0.472909
+   vertex 0.66658 0.348373 -0.493181
+   vertex 0.731344 0.395427 -0.472909
+  endloop
+ endfacet
+ facet normal 0.175616 0.175616 0.968668
+  outer loop
+   vertex 0.66658 0.348373 0.493181
+   vertex 0.731344 0.395427 0.472909
+   vertex 0.695427 0.431344 0.472909
+  endloop
+ endfacet
+ facet normal 0.175616 0.175616 0.968668
+  outer loop
+   vertex 0.66658 0.348373 0.493181
+   vertex 0.695427 0.431344 0.472909
+   vertex 0.648373 0.36658 0.493181
+  endloop
+ endfacet
+ facet normal 0.287002 0.287002 0.913926
+  outer loop
+   vertex 0.731344 0.395427 0.472909
+   vertex 0.792525 0.439877 0.439737
+   vertex 0.739877 0.492525 0.439737
+  endloop
+ endfacet
+ facet normal 0.287002 0.287002 0.913925
+  outer loop
+   vertex 0.731344 0.395427 0.472909
+   vertex 0.739877 0.492525 0.439737
+   vertex 0.695427 0.431344 0.472909
+  endloop
+ endfacet
+ facet normal 0.390111 0.390111 0.834043
+  outer loop
+   vertex 0.792525 0.439877 0.439737
+   vertex 0.848454 0.480513 0.39457
+   vertex 0.780513 0.548454 0.39457
+  endloop
+ endfacet
+ facet normal 0.39011 0.390111 0.834043
+  outer loop
+   vertex 0.792525 0.439877 0.439737
+   vertex 0.780513 0.548454 0.39457
+   vertex 0.739877 0.492525 0.439737
+  endloop
+ endfacet
+ facet normal 0.482114 0.482114 0.731527
+  outer loop
+   vertex 0.848454 0.480513 0.39457
+   vertex 0.897607 0.516224 0.338641
+   vertex 0.816224 0.597607 0.338641
+  endloop
+ endfacet
+ facet normal 0.482114 0.482114 0.731527
+  outer loop
+   vertex 0.848454 0.480513 0.39457
+   vertex 0.816224 0.597607 0.338641
+   vertex 0.780513 0.548454 0.39457
+  endloop
+ endfacet
+ facet normal 0.5606 0.560601 0.609471
+  outer loop
+   vertex 0.897607 0.516224 0.338641
+   vertex 0.938641 0.546037 0.273474
+   vertex 0.846037 0.638641 0.273474
+  endloop
+ endfacet
+ facet normal 0.5606 0.5606 0.60947
+  outer loop
+   vertex 0.897607 0.516224 0.338641
+   vertex 0.846037 0.638641 0.273474
+   vertex 0.816224 0.597607 0.338641
+  endloop
+ endfacet
+ facet normal 0.623613 0.623613 0.471396
+  outer loop
+   vertex 0.938641 0.546037 0.273474
+   vertex 0.970438 0.569139 0.200848
+   vertex 0.869139 0.670438 0.200848
+  endloop
+ endfacet
+ facet normal 0.623612 0.623613 0.471396
+  outer loop
+   vertex 0.938641 0.546037 0.273474
+   vertex 0.869139 0.670438 0.200848
+   vertex 0.846037 0.638641 0.273474
+  endloop
+ endfacet
+ facet normal 0.669658 0.669658 0.321116
+  outer loop
+   vertex 0.970438 0.569139 0.200848
+   vertex 0.992131 0.5849 0.122743
+   vertex 0.8849 0.692131 0.122743
+  endloop
+ endfacet
+ facet normal 0.669658 0.669658 0.321116
+  outer loop
+   vertex 0.970438 0.569139 0.200848
+   vertex 0.8849 0.692131 0.122743
+   vertex 0.869139 0.670438 0.200848
+  endloop
+ endfacet
+ facet normal 0.697694 0.697694 0.162622
+  outer loop
+   vertex 0.992131 0.5849 0.122743
+   vertex 1.00313 0.592889 0.0412897
+   vertex 0.892889 0.703127 0.0412897
+  endloop
+ endfacet
+ facet normal 0.697694 0.697694 0.162622
+  outer loop
+   vertex 0.992131 0.5849 0.122743
+   vertex 0.892889 0.703127 0.0412897
+   vertex 0.8849 0.692131 0.122743
+  endloop
+ endfacet
+ facet normal 0.707107 0.707107 -0
+  outer loop
+   vertex 1.00313 0.592889 0.0412897
+   vertex 1.00313 0.592889 -0.0412897
+   vertex 0.892889 0.703127 -0.0412897
+  endloop
+ endfacet
+ facet normal 0.707107 0.707107 -0
+  outer loop
+   vertex 1.00313 0.592889 0.0412897
+   vertex 0.892889 0.703127 -0.0412897
+   vertex 0.892889 0.703127 0.0412897
+  endloop
+ endfacet
+ facet normal 0.697694 0.697694 -0.162622
+  outer loop
+   vertex 1.00313 0.592889 -0.0412897
+   vertex 0.992131 0.5849 -0.122743
+   vertex 0.8849 0.692131 -0.122743
+  endloop
+ endfacet
+ facet normal 0.697694 0.697694 -0.162623
+  outer loop
+   vertex 1.00313 0.592889 -0.0412897
+   vertex 0.8849 0.692131 -0.122743
+   vertex 0.892889 0.703127 -0.0412897
+  endloop
+ endfacet
+ facet normal 0.669658 0.669658 -0.321117
+  outer loop
+   vertex 0.992131 0.5849 -0.122743
+   vertex 0.970438 0.569139 -0.200848
+   vertex 0.869139 0.670438 -0.200848
+  endloop
+ endfacet
+ facet normal 0.669658 0.669659 -0.321116
+  outer loop
+   vertex 0.992131 0.5849 -0.122743
+   vertex 0.869139 0.670438 -0.200848
+   vertex 0.8849 0.692131 -0.122743
+  endloop
+ endfacet
+ facet normal 0.623613 0.623613 -0.471396
+  outer loop
+   vertex 0.970438 0.569139 -0.200848
+   vertex 0.938641 0.546037 -0.273474
+   vertex 0.846037 0.638641 -0.273474
+  endloop
+ endfacet
+ facet normal 0.623613 0.623612 -0.471396
+  outer loop
+   vertex 0.970438 0.569139 -0.200848
+   vertex 0.846037 0.638641 -0.273474
+   vertex 0.869139 0.670438 -0.200848
+  endloop
+ endfacet
+ facet normal 0.5606 0.560601 -0.609471
+  outer loop
+   vertex 0.938641 0.546037 -0.273474
+   vertex 0.897607 0.516224 -0.338641
+   vertex 0.816224 0.597607 -0.338641
+  endloop
+ endfacet
+ facet normal 0.5606 0.5606 -0.609471
+  outer loop
+   vertex 0.938641 0.546037 -0.273474
+   vertex 0.816224 0.597607 -0.338641
+   vertex 0.846037 0.638641 -0.273474
+  endloop
+ endfacet
+ facet normal 0.482114 0.482114 -0.731527
+  outer loop
+   vertex 0.897607 0.516224 -0.338641
+   vertex 0.848454 0.480513 -0.39457
+   vertex 0.780513 0.548454 -0.39457
+  endloop
+ endfacet
+ facet normal 0.482114 0.482114 -0.731527
+  outer loop
+   vertex 0.897607 0.516224 -0.338641
+   vertex 0.780513 0.548454 -0.39457
+   vertex 0.816224 0.597607 -0.338641
+  endloop
+ endfacet
+ facet normal 0.390111 0.390111 -0.834043
+  outer loop
+   vertex 0.848454 0.480513 -0.39457
+   vertex 0.792525 0.439877 -0.439737
+   vertex 0.739877 0.492525 -0.439737
+  endloop
+ endfacet
+ facet normal 0.390111 0.390111 -0.834043
+  outer loop
+   vertex 0.848454 0.480513 -0.39457
+   vertex 0.739877 0.492525 -0.439737
+   vertex 0.780513 0.548454 -0.39457
+  endloop
+ endfacet
+ facet normal 0.287002 0.287002 -0.913926
+  outer loop
+   vertex 0.792525 0.439877 -0.439737
+   vertex 0.731344 0.395427 -0.472909
+   vertex 0.695427 0.431344 -0.472909
+  endloop
+ endfacet
+ facet normal 0.287002 0.287002 -0.913926
+  outer loop
+   vertex 0.792525 0.439877 -0.439737
+   vertex 0.695427 0.431344 -0.472909
+   vertex 0.739877 0.492525 -0.439737
+  endloop
+ endfacet
+ facet normal 0.175615 0.175615 -0.968668
+  outer loop
+   vertex 0.731344 0.395427 -0.472909
+   vertex 0.66658 0.348373 -0.493181
+   vertex 0.648373 0.36658 -0.493181
+  endloop
+ endfacet
+ facet normal 0.175615 0.175615 -0.968668
+  outer loop
+   vertex 0.731344 0.395427 -0.472909
+   vertex 0.648373 0.36658 -0.493181
+   vertex 0.695427 0.431344 -0.472909
+  endloop
+ endfacet
+ facet normal 0.112752 0.221289 0.968668
+  outer loop
+   vertex 0.648373 0.36658 0.493181
+   vertex 0.695427 0.431344 0.472909
+   vertex 0.650169 0.454404 0.472909
+  endloop
+ endfacet
+ facet normal 0.112752 0.221289 0.968668
+  outer loop
+   vertex 0.648373 0.36658 0.493181
+   vertex 0.650169 0.454404 0.472909
+   vertex 0.625431 0.378269 0.493181
+  endloop
+ endfacet
+ facet normal 0.184267 0.361644 0.913925
+  outer loop
+   vertex 0.695427 0.431344 0.472909
+   vertex 0.739877 0.492525 0.439737
+   vertex 0.673538 0.526326 0.439737
+  endloop
+ endfacet
+ facet normal 0.184267 0.361644 0.913925
+  outer loop
+   vertex 0.695427 0.431344 0.472909
+   vertex 0.673538 0.526326 0.439737
+   vertex 0.650169 0.454404 0.472909
+  endloop
+ endfacet
+ facet normal 0.250466 0.491568 0.834043
+  outer loop
+   vertex 0.739877 0.492525 0.439737
+   vertex 0.780513 0.548454 0.39457
+   vertex 0.694901 0.592076 0.39457
+  endloop
+ endfacet
+ facet normal 0.250466 0.491568 0.834043
+  outer loop
+   vertex 0.739877 0.492525 0.439737
+   vertex 0.694901 0.592076 0.39457
+   vertex 0.673538 0.526326 0.439737
+  endloop
+ endfacet
+ facet normal 0.309536 0.607499 0.731527
+  outer loop
+   vertex 0.780513 0.548454 0.39457
+   vertex 0.816224 0.597607 0.338641
+   vertex 0.713676 0.649858 0.338641
+  endloop
+ endfacet
+ facet normal 0.309536 0.607499 0.731527
+  outer loop
+   vertex 0.780513 0.548454 0.39457
+   vertex 0.713676 0.649858 0.338641
+   vertex 0.694901 0.592076 0.39457
+  endloop
+ endfacet
+ facet normal 0.359928 0.706398 0.60947
+  outer loop
+   vertex 0.816224 0.597607 0.338641
+   vertex 0.846037 0.638641 0.273474
+   vertex 0.729349 0.698096 0.273474
+  endloop
+ endfacet
+ facet normal 0.359927 0.706398 0.609471
+  outer loop
+   vertex 0.816224 0.597607 0.338641
+   vertex 0.729349 0.698096 0.273474
+   vertex 0.713676 0.649858 0.338641
+  endloop
+ endfacet
+ facet normal 0.400384 0.785798 0.471396
+  outer loop
+   vertex 0.846037 0.638641 0.273474
+   vertex 0.869139 0.670438 0.200848
+   vertex 0.741495 0.735476 0.200848
+  endloop
+ endfacet
+ facet normal 0.400384 0.785798 0.471396
+  outer loop
+   vertex 0.846037 0.638641 0.273474
+   vertex 0.741495 0.735476 0.200848
+   vertex 0.729349 0.698096 0.273474
+  endloop
+ endfacet
+ facet normal 0.429947 0.843819 0.321116
+  outer loop
+   vertex 0.869139 0.670438 0.200848
+   vertex 0.8849 0.692131 0.122743
+   vertex 0.749781 0.760977 0.122743
+  endloop
+ endfacet
+ facet normal 0.429947 0.843819 0.321116
+  outer loop
+   vertex 0.869139 0.670438 0.200848
+   vertex 0.749781 0.760977 0.122743
+   vertex 0.741495 0.735476 0.200848
+  endloop
+ endfacet
+ facet normal 0.447947 0.879146 0.162622
+  outer loop
+   vertex 0.8849 0.692131 0.122743
+   vertex 0.892889 0.703127 0.0412897
+   vertex 0.753981 0.773904 0.0412897
+  endloop
+ endfacet
+ facet normal 0.447947 0.879146 0.162622
+  outer loop
+   vertex 0.8849 0.692131 0.122743
+   vertex 0.753981 0.773904 0.0412897
+   vertex 0.749781 0.760977 0.122743
+  endloop
+ endfacet
+ facet normal 0.45399 0.891007 -0
+  outer loop
+   vertex 0.892889 0.703127 0.0412897
+   vertex 0.892889 0.703127 -0.0412897
+   vertex 0.753981 0.773904 -0.0412897
+  endloop
+ endfacet
+ facet normal 0.45399 0.891007 -0
+  outer loop
+   vertex 0.892889 0.703127 0.0412897
+   vertex 0.753981 0.773904 -0.0412897
+   vertex 0.753981 0.773904 0.0412897
+  endloop
+ endfacet
+ facet normal 0.447947 0.879146 -0.162623
+  outer loop
+   vertex 0.892889 0.703127 -0.0412897
+   vertex 0.8849 0.692131 -0.122743
+   vertex 0.749781 0.760977 -0.122743
+  endloop
+ endfacet
+ facet normal 0.447947 0.879146 -0.162622
+  outer loop
+   vertex 0.892889 0.703127 -0.0412897
+   vertex 0.749781 0.760977 -0.122743
+   vertex 0.753981 0.773904 -0.0412897
+  endloop
+ endfacet
+ facet normal 0.429947 0.843819 -0.321116
+  outer loop
+   vertex 0.8849 0.692131 -0.122743
+   vertex 0.869139 0.670438 -0.200848
+   vertex 0.741495 0.735476 -0.200848
+  endloop
+ endfacet
+ facet normal 0.429947 0.843819 -0.321116
+  outer loop
+   vertex 0.8849 0.692131 -0.122743
+   vertex 0.741495 0.735476 -0.200848
+   vertex 0.749781 0.760977 -0.122743
+  endloop
+ endfacet
+ facet normal 0.400384 0.785798 -0.471397
+  outer loop
+   vertex 0.869139 0.670438 -0.200848
+   vertex 0.846037 0.638641 -0.273474
+   vertex 0.729349 0.698096 -0.273474
+  endloop
+ endfacet
+ facet normal 0.400384 0.785798 -0.471396
+  outer loop
+   vertex 0.869139 0.670438 -0.200848
+   vertex 0.729349 0.698096 -0.273474
+   vertex 0.741495 0.735476 -0.200848
+  endloop
+ endfacet
+ facet normal 0.359928 0.706397 -0.609471
+  outer loop
+   vertex 0.846037 0.638641 -0.273474
+   vertex 0.816224 0.597607 -0.338641
+   vertex 0.713676 0.649858 -0.338641
+  endloop
+ endfacet
+ facet normal 0.359928 0.706398 -0.609471
+  outer loop
+   vertex 0.846037 0.638641 -0.273474
+   vertex 0.713676 0.649858 -0.338641
+   vertex 0.729349 0.698096 -0.273474
+  endloop
+ endfacet
+ facet normal 0.309536 0.607499 -0.731527
+  outer loop
+   vertex 0.816224 0.597607 -0.338641
+   vertex 0.780513 0.548454 -0.39457
+   vertex 0.694901 0.592075 -0.39457
+  endloop
+ endfacet
+ facet normal 0.309536 0.607499 -0.731527
+  outer loop
+   vertex 0.816224 0.597607 -0.338641
+   vertex 0.694901 0.592075 -0.39457
+   vertex 0.713676 0.649858 -0.338641
+  endloop
+ endfacet
+ facet normal 0.250467 0.491568 -0.834043
+  outer loop
+   vertex 0.780513 0.548454 -0.39457
+   vertex 0.739877 0.492525 -0.439737
+   vertex 0.673538 0.526326 -0.439737
+  endloop
+ endfacet
+ facet normal 0.250467 0.491568 -0.834043
+  outer loop
+   vertex 0.780513 0.548454 -0.39457
+   vertex 0.673538 0.526326 -0.439737
+   vertex 0.694901 0.592075 -0.39457
+  endloop
+ endfacet
+ facet normal 0.184266 0.361644 -0.913925
+  outer loop
+   vertex 0.739877 0.492525 -0.439737
+   vertex 0.695427 0.431344 -0.472909
+   vertex 0.650169 0.454404 -0.472909
+  endloop
+ endfacet
+ facet normal 0.184267 0.361643 -0.913926
+  outer loop
+   vertex 0.739877 0.492525 -0.439737
+   vertex 0.650169 0.454404 -0.472909
+   vertex 0.673538 0.526326 -0.439737
+  endloop
+ endfacet
+ facet normal 0.112752 0.221288 -0.968668
+  outer loop
+   vertex 0.695427 0.431344 -0.472909
+   vertex 0.648373 0.36658 -0.493181
+   vertex 0.625431 0.378269 -0.493181
+  endloop
+ endfacet
+ facet normal 0.112752 0.221288 -0.968668
+  outer loop
+   vertex 0.695427 0.431344 -0.472909
+   vertex 0.625431 0.378269 -0.493181
+   vertex 0.650169 0.454404 -0.472909
+  endloop
+ endfacet
+ facet normal 0.0388517 0.2453 0.968668
+  outer loop
+   vertex 0.625431 0.378269 0.493181
+   vertex 0.650169 0.454404 0.472909
+   vertex 0.6 0.46235 0.472909
+  endloop
+ endfacet
+ facet normal 0.038852 0.2453 0.968668
+  outer loop
+   vertex 0.625431 0.378269 0.493181
+   vertex 0.6 0.46235 0.472909
+   vertex 0.6 0.382297 0.493181
+  endloop
+ endfacet
+ facet normal 0.063494 0.400885 0.913925
+  outer loop
+   vertex 0.650169 0.454404 0.472909
+   vertex 0.673538 0.526326 0.439737
+   vertex 0.6 0.537974 0.439737
+  endloop
+ endfacet
+ facet normal 0.0634938 0.400885 0.913926
+  outer loop
+   vertex 0.650169 0.454404 0.472909
+   vertex 0.6 0.537974 0.439737
+   vertex 0.6 0.46235 0.472909
+  endloop
+ endfacet
+ facet normal 0.0863048 0.544907 0.834043
+  outer loop
+   vertex 0.673538 0.526326 0.439737
+   vertex 0.694901 0.592076 0.39457
+   vertex 0.6 0.607106 0.39457
+  endloop
+ endfacet
+ facet normal 0.0863049 0.544907 0.834043
+  outer loop
+   vertex 0.673538 0.526326 0.439737
+   vertex 0.6 0.607106 0.39457
+   vertex 0.6 0.537974 0.439737
+  endloop
+ endfacet
+ facet normal 0.106659 0.673418 0.731527
+  outer loop
+   vertex 0.694901 0.592076 0.39457
+   vertex 0.713676 0.649858 0.338641
+   vertex 0.6 0.667862 0.338641
+  endloop
+ endfacet
+ facet normal 0.106659 0.673418 0.731527
+  outer loop
+   vertex 0.694901 0.592076 0.39457
+   vertex 0.6 0.667862 0.338641
+   vertex 0.6 0.607106 0.39457
+  endloop
+ endfacet
+ facet normal 0.124022 0.783048 0.609471
+  outer loop
+   vertex 0.713676 0.649858 0.338641
+   vertex 0.729349 0.698096 0.273474
+   vertex 0.6 0.718583 0.273474
+  endloop
+ endfacet
+ facet normal 0.124022 0.783048 0.609471
+  outer loop
+   vertex 0.713676 0.649858 0.338641
+   vertex 0.6 0.718583 0.273474
+   vertex 0.6 0.667862 0.338641
+  endloop
+ endfacet
+ facet normal 0.137963 0.871064 0.471396
+  outer loop
+   vertex 0.729349 0.698096 0.273474
+   vertex 0.741495 0.735476 0.200848
+   vertex 0.6 0.757887 0.200848
+  endloop
+ endfacet
+ facet normal 0.137963 0.871064 0.471396
+  outer loop
+   vertex 0.729349 0.698096 0.273474
+   vertex 0.6 0.757887 0.200848
+   vertex 0.6 0.718583 0.273474
+  endloop
+ endfacet
+ facet normal 0.14815 0.93538 0.321116
+  outer loop
+   vertex 0.741495 0.735476 0.200848
+   vertex 0.749781 0.760977 0.122743
+   vertex 0.6 0.7847 0.122743
+  endloop
+ endfacet
+ facet normal 0.14815 0.93538 0.321117
+  outer loop
+   vertex 0.741495 0.735476 0.200848
+   vertex 0.6 0.7847 0.122743
+   vertex 0.6 0.757887 0.200848
+  endloop
+ endfacet
+ facet normal 0.154352 0.974541 0.162622
+  outer loop
+   vertex 0.749781 0.760977 0.122743
+   vertex 0.753981 0.773904 0.0412897
+   vertex 0.6 0.798292 0.0412897
+  endloop
+ endfacet
+ facet normal 0.154352 0.974541 0.162621
+  outer loop
+   vertex 0.749781 0.760977 0.122743
+   vertex 0.6 0.798292 0.0412897
+   vertex 0.6 0.7847 0.122743
+  endloop
+ endfacet
+ facet normal 0.156434 0.987688 -0
+  outer loop
+   vertex 0.753981 0.773904 0.0412897
+   vertex 0.753981 0.773904 -0.0412897
+   vertex 0.6 0.798292 -0.0412897
+  endloop
+ endfacet
+ facet normal 0.156434 0.987688 -0
+  outer loop
+   vertex 0.753981 0.773904 0.0412897
+   vertex 0.6 0.798292 -0.0412897
+   vertex 0.6 0.798292 0.0412897
+  endloop
+ endfacet
+ facet normal 0.154352 0.974541 -0.162622
+  outer loop
+   vertex 0.753981 0.773904 -0.0412897
+   vertex 0.749781 0.760977 -0.122743
+   vertex 0.6 0.7847 -0.122743
+  endloop
+ endfacet
+ facet normal 0.154352 0.974541 -0.162622
+  outer loop
+   vertex 0.753981 0.773904 -0.0412897
+   vertex 0.6 0.7847 -0.122743
+   vertex 0.6 0.798292 -0.0412897
+  endloop
+ endfacet
+ facet normal 0.14815 0.93538 -0.321116
+  outer loop
+   vertex 0.749781 0.760977 -0.122743
+   vertex 0.741495 0.735476 -0.200848
+   vertex 0.6 0.757887 -0.200848
+  endloop
+ endfacet
+ facet normal 0.14815 0.93538 -0.321117
+  outer loop
+   vertex 0.749781 0.760977 -0.122743
+   vertex 0.6 0.757887 -0.200848
+   vertex 0.6 0.7847 -0.122743
+  endloop
+ endfacet
+ facet normal 0.137963 0.871064 -0.471396
+  outer loop
+   vertex 0.741495 0.735476 -0.200848
+   vertex 0.729349 0.698096 -0.273474
+   vertex 0.6 0.718583 -0.273474
+  endloop
+ endfacet
+ facet normal 0.137963 0.871064 -0.471396
+  outer loop
+   vertex 0.741495 0.735476 -0.200848
+   vertex 0.6 0.718583 -0.273474
+   vertex 0.6 0.757887 -0.200848
+  endloop
+ endfacet
+ facet normal 0.124022 0.783048 -0.609471
+  outer loop
+   vertex 0.729349 0.698096 -0.273474
+   vertex 0.713676 0.649858 -0.338641
+   vertex 0.6 0.667862 -0.338641
+  endloop
+ endfacet
+ facet normal 0.124022 0.783048 -0.609471
+  outer loop
+   vertex 0.729349 0.698096 -0.273474
+   vertex 0.6 0.667862 -0.338641
+   vertex 0.6 0.718583 -0.273474
+  endloop
+ endfacet
+ facet normal 0.106659 0.673418 -0.731527
+  outer loop
+   vertex 0.713676 0.649858 -0.338641
+   vertex 0.694901 0.592075 -0.39457
+   vertex 0.6 0.607106 -0.39457
+  endloop
+ endfacet
+ facet normal 0.106659 0.673418 -0.731527
+  outer loop
+   vertex 0.713676 0.649858 -0.338641
+   vertex 0.6 0.607106 -0.39457
+   vertex 0.6 0.667862 -0.338641
+  endloop
+ endfacet
+ facet normal 0.0863046 0.544908 -0.834043
+  outer loop
+   vertex 0.694901 0.592075 -0.39457
+   vertex 0.673538 0.526326 -0.439737
+   vertex 0.6 0.537974 -0.439737
+  endloop
+ endfacet
+ facet normal 0.0863049 0.544907 -0.834043
+  outer loop
+   vertex 0.694901 0.592075 -0.39457
+   vertex 0.6 0.537974 -0.439737
+   vertex 0.6 0.607106 -0.39457
+  endloop
+ endfacet
+ facet normal 0.0634938 0.400885 -0.913926
+  outer loop
+   vertex 0.673538 0.526326 -0.439737
+   vertex 0.650169 0.454404 -0.472909
+   vertex 0.6 0.46235 -0.472909
+  endloop
+ endfacet
+ facet normal 0.0634937 0.400885 -0.913926
+  outer loop
+   vertex 0.673538 0.526326 -0.439737
+   vertex 0.6 0.46235 -0.472909
+   vertex 0.6 0.537974 -0.439737
+  endloop
+ endfacet
+ facet normal 0.0388516 0.2453 -0.968668
+  outer loop
+   vertex 0.650169 0.454404 -0.472909
+   vertex 0.625431 0.378269 -0.493181
+   vertex 0.6 0.382297 -0.493181
+  endloop
+ endfacet
+ facet normal 0.0388516 0.2453 -0.968668
+  outer loop
+   vertex 0.650169 0.454404 -0.472909
+   vertex 0.6 0.382297 -0.493181
+   vertex 0.6 0.46235 -0.472909
+  endloop
+ endfacet
+ facet normal -0.0388517 0.2453 0.968668
+  outer loop
+   vertex 0.6 0.382297 0.493181
+   vertex 0.6 0.46235 0.472909
+   vertex 0.549831 0.454404 0.472909
+  endloop
+ endfacet
+ facet normal -0.0388519 0.2453 0.968668
+  outer loop
+   vertex 0.6 0.382297 0.493181
+   vertex 0.549831 0.454404 0.472909
+   vertex 0.574569 0.378269 0.493181
+  endloop
+ endfacet
+ facet normal -0.0634941 0.400885 0.913925
+  outer loop
+   vertex 0.6 0.46235 0.472909
+   vertex 0.6 0.537974 0.439737
+   vertex 0.526462 0.526326 0.439737
+  endloop
+ endfacet
+ facet normal -0.0634939 0.400885 0.913925
+  outer loop
+   vertex 0.6 0.46235 0.472909
+   vertex 0.526462 0.526326 0.439737
+   vertex 0.549831 0.454404 0.472909
+  endloop
+ endfacet
+ facet normal -0.0863048 0.544907 0.834043
+  outer loop
+   vertex 0.6 0.537974 0.439737
+   vertex 0.6 0.607106 0.39457
+   vertex 0.505099 0.592076 0.39457
+  endloop
+ endfacet
+ facet normal -0.086305 0.544907 0.834043
+  outer loop
+   vertex 0.6 0.537974 0.439737
+   vertex 0.505099 0.592076 0.39457
+   vertex 0.526462 0.526326 0.439737
+  endloop
+ endfacet
+ facet normal -0.106659 0.673419 0.731527
+  outer loop
+   vertex 0.6 0.607106 0.39457
+   vertex 0.6 0.667862 0.338641
+   vertex 0.486324 0.649858 0.338641
+  endloop
+ endfacet
+ facet normal -0.106659 0.673418 0.731527
+  outer loop
+   vertex 0.6 0.607106 0.39457
+   vertex 0.486324 0.649858 0.338641
+   vertex 0.505099 0.592076 0.39457
+  endloop
+ endfacet
+ facet normal -0.124022 0.783048 0.609471
+  outer loop
+   vertex 0.6 0.667862 0.338641
+   vertex 0.6 0.718583 0.273474
+   vertex 0.470651 0.698096 0.273474
+  endloop
+ endfacet
+ facet normal -0.124022 0.783048 0.609471
+  outer loop
+   vertex 0.6 0.667862 0.338641
+   vertex 0.470651 0.698096 0.273474
+   vertex 0.486324 0.649858 0.338641
+  endloop
+ endfacet
+ facet normal -0.137963 0.871064 0.471396
+  outer loop
+   vertex 0.6 0.718583 0.273474
+   vertex 0.6 0.757887 0.200848
+   vertex 0.458505 0.735476 0.200848
+  endloop
+ endfacet
+ facet normal -0.137963 0.871064 0.471396
+  outer loop
+   vertex 0.6 0.718583 0.273474
+   vertex 0.458505 0.735476 0.200848
+   vertex 0.470651 0.698096 0.273474
+  endloop
+ endfacet
+ facet normal -0.14815 0.93538 0.321117
+  outer loop
+   vertex 0.6 0.757887 0.200848
+   vertex 0.6 0.7847 0.122743
+   vertex 0.450219 0.760977 0.122743
+  endloop
+ endfacet
+ facet normal -0.14815 0.93538 0.321116
+  outer loop
+   vertex 0.6 0.757887 0.200848
+   vertex 0.450219 0.760977 0.122743
+   vertex 0.458505 0.735476 0.200848
+  endloop
+ endfacet
+ facet normal -0.154352 0.974541 0.162621
+  outer loop
+   vertex 0.6 0.7847 0.122743
+   vertex 0.6 0.798292 0.0412897
+   vertex 0.446019 0.773904 0.0412897
+  endloop
+ endfacet
+ facet normal -0.154352 0.974541 0.162622
+  outer loop
+   vertex 0.6 0.7847 0.122743
+   vertex 0.446019 0.773904 0.0412897
+   vertex 0.450219 0.760977 0.122743
+  endloop
+ endfacet
+ facet normal -0.156434 0.987688 0
+  outer loop
+   vertex 0.6 0.798292 0.0412897
+   vertex 0.6 0.798292 -0.0412897
+   vertex 0.446019 0.773904 -0.0412897
+  endloop
+ endfacet
+ facet normal -0.156434 0.987688 0
+  outer loop
+   vertex 0.6 0.798292 0.0412897
+   vertex 0.446019 0.773904 -0.0412897
+   vertex 0.446019 0.773904 0.0412897
+  endloop
+ endfacet
+ facet normal -0.154352 0.974541 -0.162621
+  outer loop
+   vertex 0.6 0.798292 -0.0412897
+   vertex 0.6 0.7847 -0.122743
+   vertex 0.450219 0.760977 -0.122743
+  endloop
+ endfacet
+ facet normal -0.154352 0.974541 -0.162622
+  outer loop
+   vertex 0.6 0.798292 -0.0412897
+   vertex 0.450219 0.760977 -0.122743
+   vertex 0.446019 0.773904 -0.0412897
+  endloop
+ endfacet
+ facet normal -0.14815 0.93538 -0.321117
+  outer loop
+   vertex 0.6 0.7847 -0.122743
+   vertex 0.6 0.757887 -0.200848
+   vertex 0.458505 0.735476 -0.200848
+  endloop
+ endfacet
+ facet normal -0.14815 0.93538 -0.321116
+  outer loop
+   vertex 0.6 0.7847 -0.122743
+   vertex 0.458505 0.735476 -0.200848
+   vertex 0.450219 0.760977 -0.122743
+  endloop
+ endfacet
+ facet normal -0.137963 0.871064 -0.471396
+  outer loop
+   vertex 0.6 0.757887 -0.200848
+   vertex 0.6 0.718583 -0.273474
+   vertex 0.470651 0.698096 -0.273474
+  endloop
+ endfacet
+ facet normal -0.137963 0.871064 -0.471396
+  outer loop
+   vertex 0.6 0.757887 -0.200848
+   vertex 0.470651 0.698096 -0.273474
+   vertex 0.458505 0.735476 -0.200848
+  endloop
+ endfacet
+ facet normal -0.124023 0.783048 -0.609471
+  outer loop
+   vertex 0.6 0.718583 -0.273474
+   vertex 0.6 0.667862 -0.338641
+   vertex 0.486324 0.649857 -0.338641
+  endloop
+ endfacet
+ facet normal -0.124023 0.783048 -0.609471
+  outer loop
+   vertex 0.6 0.718583 -0.273474
+   vertex 0.486324 0.649857 -0.338641
+   vertex 0.470651 0.698096 -0.273474
+  endloop
+ endfacet
+ facet normal -0.106659 0.673418 -0.731527
+  outer loop
+   vertex 0.6 0.667862 -0.338641
+   vertex 0.6 0.607106 -0.39457
+   vertex 0.505099 0.592075 -0.39457
+  endloop
+ endfacet
+ facet normal -0.106659 0.673418 -0.731527
+  outer loop
+   vertex 0.6 0.667862 -0.338641
+   vertex 0.505099 0.592075 -0.39457
+   vertex 0.486324 0.649857 -0.338641
+  endloop
+ endfacet
+ facet normal -0.0863046 0.544907 -0.834043
+  outer loop
+   vertex 0.6 0.607106 -0.39457
+   vertex 0.6 0.537974 -0.439737
+   vertex 0.526462 0.526326 -0.439737
+  endloop
+ endfacet
+ facet normal -0.086305 0.544908 -0.834043
+  outer loop
+   vertex 0.6 0.607106 -0.39457
+   vertex 0.526462 0.526326 -0.439737
+   vertex 0.505099 0.592075 -0.39457
+  endloop
+ endfacet
+ facet normal -0.0634939 0.400885 -0.913926
+  outer loop
+   vertex 0.6 0.537974 -0.439737
+   vertex 0.6 0.46235 -0.472909
+   vertex 0.549831 0.454404 -0.472909
+  endloop
+ endfacet
+ facet normal -0.0634937 0.400885 -0.913926
+  outer loop
+   vertex 0.6 0.537974 -0.439737
+   vertex 0.549831 0.454404 -0.472909
+   vertex 0.526462 0.526326 -0.439737
+  endloop
+ endfacet
+ facet normal -0.0388516 0.2453 -0.968668
+  outer loop
+   vertex 0.6 0.46235 -0.472909
+   vertex 0.6 0.382297 -0.493181
+   vertex 0.574569 0.378269 -0.493181
+  endloop
+ endfacet
+ facet normal -0.0388517 0.2453 -0.968668
+  outer loop
+   vertex 0.6 0.46235 -0.472909
+   vertex 0.574569 0.378269 -0.493181
+   vertex 0.549831 0.454404 -0.472909
+  endloop
+ endfacet
+ facet normal -0.112752 0.221289 0.968668
+  outer loop
+   vertex 0.574569 0.378269 0.493181
+   vertex 0.549831 0.454404 0.472909
+   vertex 0.504573 0.431344 0.472909
+  endloop
+ endfacet
+ facet normal -0.112752 0.221289 0.968668
+  outer loop
+   vertex 0.574569 0.378269 0.493181
+   vertex 0.504573 0.431344 0.472909
+   vertex 0.551627 0.36658 0.493181
+  endloop
+ endfacet
+ facet normal -0.184266 0.361644 0.913925
+  outer loop
+   vertex 0.549831 0.454404 0.472909
+   vertex 0.526462 0.526326 0.439737
+   vertex 0.460123 0.492525 0.439737
+  endloop
+ endfacet
+ facet normal -0.184267 0.361643 0.913926
+  outer loop
+   vertex 0.549831 0.454404 0.472909
+   vertex 0.460123 0.492525 0.439737
+   vertex 0.504573 0.431344 0.472909
+  endloop
+ endfacet
+ facet normal -0.250466 0.491568 0.834043
+  outer loop
+   vertex 0.526462 0.526326 0.439737
+   vertex 0.505099 0.592076 0.39457
+   vertex 0.419487 0.548454 0.39457
+  endloop
+ endfacet
+ facet normal -0.250466 0.491568 0.834043
+  outer loop
+   vertex 0.526462 0.526326 0.439737
+   vertex 0.419487 0.548454 0.39457
+   vertex 0.460123 0.492525 0.439737
+  endloop
+ endfacet
+ facet normal -0.309537 0.607499 0.731527
+  outer loop
+   vertex 0.505099 0.592076 0.39457
+   vertex 0.486324 0.649858 0.338641
+   vertex 0.383776 0.597607 0.338641
+  endloop
+ endfacet
+ facet normal -0.309537 0.6075 0.731527
+  outer loop
+   vertex 0.505099 0.592076 0.39457
+   vertex 0.383776 0.597607 0.338641
+   vertex 0.419487 0.548454 0.39457
+  endloop
+ endfacet
+ facet normal -0.359928 0.706398 0.609471
+  outer loop
+   vertex 0.486324 0.649858 0.338641
+   vertex 0.470651 0.698096 0.273474
+   vertex 0.353963 0.638641 0.273474
+  endloop
+ endfacet
+ facet normal -0.359928 0.706397 0.609471
+  outer loop
+   vertex 0.486324 0.649858 0.338641
+   vertex 0.353963 0.638641 0.273474
+   vertex 0.383776 0.597607 0.338641
+  endloop
+ endfacet
+ facet normal -0.400384 0.785798 0.471396
+  outer loop
+   vertex 0.470651 0.698096 0.273474
+   vertex 0.458505 0.735476 0.200848
+   vertex 0.330861 0.670438 0.200848
+  endloop
+ endfacet
+ facet normal -0.400384 0.785798 0.471396
+  outer loop
+   vertex 0.470651 0.698096 0.273474
+   vertex 0.330861 0.670438 0.200848
+   vertex 0.353963 0.638641 0.273474
+  endloop
+ endfacet
+ facet normal -0.429947 0.843819 0.321116
+  outer loop
+   vertex 0.458505 0.735476 0.200848
+   vertex 0.450219 0.760977 0.122743
+   vertex 0.3151 0.692131 0.122743
+  endloop
+ endfacet
+ facet normal -0.429947 0.843818 0.321117
+  outer loop
+   vertex 0.458505 0.735476 0.200848
+   vertex 0.3151 0.692131 0.122743
+   vertex 0.330861 0.670438 0.200848
+  endloop
+ endfacet
+ facet normal -0.447947 0.879146 0.162622
+  outer loop
+   vertex 0.450219 0.760977 0.122743
+   vertex 0.446019 0.773904 0.0412897
+   vertex 0.307111 0.703127 0.0412897
+  endloop
+ endfacet
+ facet normal -0.447947 0.879146 0.162622
+  outer loop
+   vertex 0.450219 0.760977 0.122743
+   vertex 0.307111 0.703127 0.0412897
+   vertex 0.3151 0.692131 0.122743
+  endloop
+ endfacet
+ facet normal -0.453991 0.891006 0
+  outer loop
+   vertex 0.446019 0.773904 0.0412897
+   vertex 0.446019 0.773904 -0.0412897
+   vertex 0.307111 0.703127 -0.0412897
+  endloop
+ endfacet
+ facet normal -0.45399 0.891007 -6.43116e-07
+  outer loop
+   vertex 0.446019 0.773904 0.0412897
+   vertex 0.307111 0.703127 -0.0412897
+   vertex 0.307111 0.703127 0.0412897
+  endloop
+ endfacet
+ facet normal -0.447947 0.879146 -0.162622
+  outer loop
+   vertex 0.446019 0.773904 -0.0412897
+   vertex 0.450219 0.760977 -0.122743
+   vertex 0.3151 0.692131 -0.122743
+  endloop
+ endfacet
+ facet normal -0.447947 0.879146 -0.162622
+  outer loop
+   vertex 0.446019 0.773904 -0.0412897
+   vertex 0.3151 0.692131 -0.122743
+   vertex 0.307111 0.703127 -0.0412897
+  endloop
+ endfacet
+ facet normal -0.429947 0.843819 -0.321116
+  outer loop
+   vertex 0.450219 0.760977 -0.122743
+   vertex 0.458505 0.735476 -0.200848
+   vertex 0.330861 0.670438 -0.200848
+  endloop
+ endfacet
+ facet normal -0.429947 0.843819 -0.321116
+  outer loop
+   vertex 0.450219 0.760977 -0.122743
+   vertex 0.330861 0.670438 -0.200848
+   vertex 0.3151 0.692131 -0.122743
+  endloop
+ endfacet
+ facet normal -0.400384 0.785798 -0.471396
+  outer loop
+   vertex 0.458505 0.735476 -0.200848
+   vertex 0.470651 0.698096 -0.273474
+   vertex 0.353963 0.638641 -0.273474
+  endloop
+ endfacet
+ facet normal -0.400384 0.785798 -0.471396
+  outer loop
+   vertex 0.458505 0.735476 -0.200848
+   vertex 0.353963 0.638641 -0.273474
+   vertex 0.330861 0.670438 -0.200848
+  endloop
+ endfacet
+ facet normal -0.359927 0.706398 -0.609471
+  outer loop
+   vertex 0.470651 0.698096 -0.273474
+   vertex 0.486324 0.649857 -0.338641
+   vertex 0.383776 0.597607 -0.338641
+  endloop
+ endfacet
+ facet normal -0.359927 0.706398 -0.609471
+  outer loop
+   vertex 0.470651 0.698096 -0.273474
+   vertex 0.383776 0.597607 -0.338641
+   vertex 0.353963 0.638641 -0.273474
+  endloop
+ endfacet
+ facet normal -0.309536 0.607499 -0.731527
+  outer loop
+   vertex 0.486324 0.649857 -0.338641
+   vertex 0.505099 0.592075 -0.39457
+   vertex 0.419487 0.548454 -0.39457
+  endloop
+ endfacet
+ facet normal -0.309536 0.607499 -0.731527
+  outer loop
+   vertex 0.486324 0.649857 -0.338641
+   vertex 0.419487 0.548454 -0.39457
+   vertex 0.383776 0.597607 -0.338641
+  endloop
+ endfacet
+ facet normal -0.250467 0.491568 -0.834043
+  outer loop
+   vertex 0.505099 0.592075 -0.39457
+   vertex 0.526462 0.526326 -0.439737
+   vertex 0.460123 0.492525 -0.439737
+  endloop
+ endfacet
+ facet normal -0.250466 0.491568 -0.834043
+  outer loop
+   vertex 0.505099 0.592075 -0.39457
+   vertex 0.460123 0.492525 -0.439737
+   vertex 0.419487 0.548454 -0.39457
+  endloop
+ endfacet
+ facet normal -0.184267 0.361643 -0.913926
+  outer loop
+   vertex 0.526462 0.526326 -0.439737
+   vertex 0.549831 0.454404 -0.472909
+   vertex 0.504573 0.431344 -0.472909
+  endloop
+ endfacet
+ facet normal -0.184267 0.361643 -0.913926
+  outer loop
+   vertex 0.526462 0.526326 -0.439737
+   vertex 0.504573 0.431344 -0.472909
+   vertex 0.460123 0.492525 -0.439737
+  endloop
+ endfacet
+ facet normal -0.112752 0.221288 -0.968668
+  outer loop
+   vertex 0.549831 0.454404 -0.472909
+   vertex 0.574569 0.378269 -0.493181
+   vertex 0.551627 0.36658 -0.493181
+  endloop
+ endfacet
+ facet normal -0.112752 0.221288 -0.968668
+  outer loop
+   vertex 0.549831 0.454404 -0.472909
+   vertex 0.551627 0.36658 -0.493181
+   vertex 0.504573 0.431344 -0.472909
+  endloop
+ endfacet
+ facet normal -0.175616 0.175616 0.968668
+  outer loop
+   vertex 0.551627 0.36658 0.493181
+   vertex 0.504573 0.431344 0.472909
+   vertex 0.468656 0.395427 0.472909
+  endloop
+ endfacet
+ facet normal -0.175616 0.175616 0.968668
+  outer loop
+   vertex 0.551627 0.36658 0.493181
+   vertex 0.468656 0.395427 0.472909
+   vertex 0.53342 0.348373 0.493181
+  endloop
+ endfacet
+ facet normal -0.287002 0.287002 0.913926
+  outer loop
+   vertex 0.504573 0.431344 0.472909
+   vertex 0.460123 0.492525 0.439737
+   vertex 0.407475 0.439877 0.439737
+  endloop
+ endfacet
+ facet normal -0.287002 0.287002 0.913925
+  outer loop
+   vertex 0.504573 0.431344 0.472909
+   vertex 0.407475 0.439877 0.439737
+   vertex 0.468656 0.395427 0.472909
+  endloop
+ endfacet
+ facet normal -0.390111 0.39011 0.834043
+  outer loop
+   vertex 0.460123 0.492525 0.439737
+   vertex 0.419487 0.548454 0.39457
+   vertex 0.351546 0.480513 0.39457
+  endloop
+ endfacet
+ facet normal -0.390111 0.39011 0.834043
+  outer loop
+   vertex 0.460123 0.492525 0.439737
+   vertex 0.351546 0.480513 0.39457
+   vertex 0.407475 0.439877 0.439737
+  endloop
+ endfacet
+ facet normal -0.482114 0.482114 0.731527
+  outer loop
+   vertex 0.419487 0.548454 0.39457
+   vertex 0.383776 0.597607 0.338641
+   vertex 0.302393 0.516224 0.338641
+  endloop
+ endfacet
+ facet normal -0.482114 0.482114 0.731527
+  outer loop
+   vertex 0.419487 0.548454 0.39457
+   vertex 0.302393 0.516224 0.338641
+   vertex 0.351546 0.480513 0.39457
+  endloop
+ endfacet
+ facet normal -0.5606 0.5606 0.609471
+  outer loop
+   vertex 0.383776 0.597607 0.338641
+   vertex 0.353963 0.638641 0.273474
+   vertex 0.261359 0.546037 0.273474
+  endloop
+ endfacet
+ facet normal -0.5606 0.5606 0.609471
+  outer loop
+   vertex 0.383776 0.597607 0.338641
+   vertex 0.261359 0.546037 0.273474
+   vertex 0.302393 0.516224 0.338641
+  endloop
+ endfacet
+ facet normal -0.623613 0.623613 0.471396
+  outer loop
+   vertex 0.353963 0.638641 0.273474
+   vertex 0.330861 0.670438 0.200848
+   vertex 0.229562 0.569139 0.200848
+  endloop
+ endfacet
+ facet normal -0.623613 0.623613 0.471396
+  outer loop
+   vertex 0.353963 0.638641 0.273474
+   vertex 0.229562 0.569139 0.200848
+   vertex 0.261359 0.546037 0.273474
+  endloop
+ endfacet
+ facet normal -0.669658 0.669658 0.321117
+  outer loop
+   vertex 0.330861 0.670438 0.200848
+   vertex 0.3151 0.692131 0.122743
+   vertex 0.207869 0.5849 0.122743
+  endloop
+ endfacet
+ facet normal -0.669658 0.669658 0.321116
+  outer loop
+   vertex 0.330861 0.670438 0.200848
+   vertex 0.207869 0.5849 0.122743
+   vertex 0.229562 0.569139 0.200848
+  endloop
+ endfacet
+ facet normal -0.697694 0.697694 0.162622
+  outer loop
+   vertex 0.3151 0.692131 0.122743
+   vertex 0.307111 0.703127 0.0412897
+   vertex 0.196873 0.592889 0.0412897
+  endloop
+ endfacet
+ facet normal -0.697694 0.697694 0.162622
+  outer loop
+   vertex 0.3151 0.692131 0.122743
+   vertex 0.196873 0.592889 0.0412897
+   vertex 0.207869 0.5849 0.122743
+  endloop
+ endfacet
+ facet normal -0.707107 0.707107 -5.1038e-07
+  outer loop
+   vertex 0.307111 0.703127 0.0412897
+   vertex 0.307111 0.703127 -0.0412897
+   vertex 0.196873 0.592889 -0.0412897
+  endloop
+ endfacet
+ facet normal -0.707107 0.707107 0
+  outer loop
+   vertex 0.307111 0.703127 0.0412897
+   vertex 0.196873 0.592889 -0.0412897
+   vertex 0.196873 0.592889 0.0412897
+  endloop
+ endfacet
+ facet normal -0.697694 0.697694 -0.162622
+  outer loop
+   vertex 0.307111 0.703127 -0.0412897
+   vertex 0.3151 0.692131 -0.122743
+   vertex 0.207869 0.5849 -0.122743
+  endloop
+ endfacet
+ facet normal -0.697694 0.697694 -0.162622
+  outer loop
+   vertex 0.307111 0.703127 -0.0412897
+   vertex 0.207869 0.5849 -0.122743
+   vertex 0.196873 0.592889 -0.0412897
+  endloop
+ endfacet
+ facet normal -0.669658 0.669658 -0.321116
+  outer loop
+   vertex 0.3151 0.692131 -0.122743
+   vertex 0.330861 0.670438 -0.200848
+   vertex 0.229562 0.569139 -0.200848
+  endloop
+ endfacet
+ facet normal -0.669658 0.669658 -0.321116
+  outer loop
+   vertex 0.3151 0.692131 -0.122743
+   vertex 0.229562 0.569139 -0.200848
+   vertex 0.207869 0.5849 -0.122743
+  endloop
+ endfacet
+ facet normal -0.623613 0.623613 -0.471396
+  outer loop
+   vertex 0.330861 0.670438 -0.200848
+   vertex 0.353963 0.638641 -0.273474
+   vertex 0.261359 0.546037 -0.273474
+  endloop
+ endfacet
+ facet normal -0.623613 0.623613 -0.471396
+  outer loop
+   vertex 0.330861 0.670438 -0.200848
+   vertex 0.261359 0.546037 -0.273474
+   vertex 0.229562 0.569139 -0.200848
+  endloop
+ endfacet
+ facet normal -0.5606 0.5606 -0.609471
+  outer loop
+   vertex 0.353963 0.638641 -0.273474
+   vertex 0.383776 0.597607 -0.338641
+   vertex 0.302393 0.516224 -0.338641
+  endloop
+ endfacet
+ facet normal -0.5606 0.5606 -0.609471
+  outer loop
+   vertex 0.353963 0.638641 -0.273474
+   vertex 0.302393 0.516224 -0.338641
+   vertex 0.261359 0.546037 -0.273474
+  endloop
+ endfacet
+ facet normal -0.482114 0.482114 -0.731527
+  outer loop
+   vertex 0.383776 0.597607 -0.338641
+   vertex 0.419487 0.548454 -0.39457
+   vertex 0.351546 0.480513 -0.39457
+  endloop
+ endfacet
+ facet normal -0.482114 0.482114 -0.731527
+  outer loop
+   vertex 0.383776 0.597607 -0.338641
+   vertex 0.351546 0.480513 -0.39457
+   vertex 0.302393 0.516224 -0.338641
+  endloop
+ endfacet
+ facet normal -0.390111 0.390111 -0.834043
+  outer loop
+   vertex 0.419487 0.548454 -0.39457
+   vertex 0.460123 0.492525 -0.439737
+   vertex 0.407475 0.439877 -0.439737
+  endloop
+ endfacet
+ facet normal -0.390111 0.390111 -0.834043
+  outer loop
+   vertex 0.419487 0.548454 -0.39457
+   vertex 0.407475 0.439877 -0.439737
+   vertex 0.351546 0.480513 -0.39457
+  endloop
+ endfacet
+ facet normal -0.287002 0.287002 -0.913926
+  outer loop
+   vertex 0.460123 0.492525 -0.439737
+   vertex 0.504573 0.431344 -0.472909
+   vertex 0.468656 0.395427 -0.472909
+  endloop
+ endfacet
+ facet normal -0.287002 0.287002 -0.913926
+  outer loop
+   vertex 0.460123 0.492525 -0.439737
+   vertex 0.468656 0.395427 -0.472909
+   vertex 0.407475 0.439877 -0.439737
+  endloop
+ endfacet
+ facet normal -0.175616 0.175615 -0.968668
+  outer loop
+   vertex 0.504573 0.431344 -0.472909
+   vertex 0.551627 0.36658 -0.493181
+   vertex 0.53342 0.348373 -0.493181
+  endloop
+ endfacet
+ facet normal -0.175615 0.175615 -0.968668
+  outer loop
+   vertex 0.504573 0.431344 -0.472909
+   vertex 0.53342 0.348373 -0.493181
+   vertex 0.468656 0.395427 -0.472909
+  endloop
+ endfacet
+ facet normal -0.221289 0.112752 0.968668
+  outer loop
+   vertex 0.53342 0.348373 0.493181
+   vertex 0.468656 0.395427 0.472909
+   vertex 0.445596 0.350169 0.472909
+  endloop
+ endfacet
+ facet normal -0.221289 0.112752 0.968668
+  outer loop
+   vertex 0.53342 0.348373 0.493181
+   vertex 0.445596 0.350169 0.472909
+   vertex 0.521731 0.325431 0.493181
+  endloop
+ endfacet
+ facet normal -0.361643 0.184267 0.913925
+  outer loop
+   vertex 0.468656 0.395427 0.472909
+   vertex 0.407475 0.439877 0.439737
+   vertex 0.373674 0.373538 0.439737
+  endloop
+ endfacet
+ facet normal -0.361643 0.184267 0.913925
+  outer loop
+   vertex 0.468656 0.395427 0.472909
+   vertex 0.373674 0.373538 0.439737
+   vertex 0.445596 0.350169 0.472909
+  endloop
+ endfacet
+ facet normal -0.491568 0.250466 0.834043
+  outer loop
+   vertex 0.407475 0.439877 0.439737
+   vertex 0.351546 0.480513 0.39457
+   vertex 0.307924 0.394901 0.39457
+  endloop
+ endfacet
+ facet normal -0.491568 0.250466 0.834043
+  outer loop
+   vertex 0.407475 0.439877 0.439737
+   vertex 0.307924 0.394901 0.39457
+   vertex 0.373674 0.373538 0.439737
+  endloop
+ endfacet
+ facet normal -0.607499 0.309536 0.731527
+  outer loop
+   vertex 0.351546 0.480513 0.39457
+   vertex 0.302393 0.516224 0.338641
+   vertex 0.250142 0.413676 0.338641
+  endloop
+ endfacet
+ facet normal -0.607499 0.309536 0.731527
+  outer loop
+   vertex 0.351546 0.480513 0.39457
+   vertex 0.250142 0.413676 0.338641
+   vertex 0.307924 0.394901 0.39457
+  endloop
+ endfacet
+ facet normal -0.706398 0.359928 0.609471
+  outer loop
+   vertex 0.302393 0.516224 0.338641
+   vertex 0.261359 0.546037 0.273474
+   vertex 0.201904 0.429349 0.273474
+  endloop
+ endfacet
+ facet normal -0.706398 0.359928 0.609471
+  outer loop
+   vertex 0.302393 0.516224 0.338641
+   vertex 0.201904 0.429349 0.273474
+   vertex 0.250142 0.413676 0.338641
+  endloop
+ endfacet
+ facet normal -0.785798 0.400384 0.471396
+  outer loop
+   vertex 0.261359 0.546037 0.273474
+   vertex 0.229562 0.569139 0.200848
+   vertex 0.164524 0.441495 0.200848
+  endloop
+ endfacet
+ facet normal -0.785798 0.400384 0.471396
+  outer loop
+   vertex 0.261359 0.546037 0.273474
+   vertex 0.164524 0.441495 0.200848
+   vertex 0.201904 0.429349 0.273474
+  endloop
+ endfacet
+ facet normal -0.843819 0.429947 0.321116
+  outer loop
+   vertex 0.229562 0.569139 0.200848
+   vertex 0.207869 0.5849 0.122743
+   vertex 0.139023 0.449781 0.122743
+  endloop
+ endfacet
+ facet normal -0.843819 0.429947 0.321116
+  outer loop
+   vertex 0.229562 0.569139 0.200848
+   vertex 0.139023 0.449781 0.122743
+   vertex 0.164524 0.441495 0.200848
+  endloop
+ endfacet
+ facet normal -0.879146 0.447947 0.162622
+  outer loop
+   vertex 0.207869 0.5849 0.122743
+   vertex 0.196873 0.592889 0.0412897
+   vertex 0.126096 0.453981 0.0412897
+  endloop
+ endfacet
+ facet normal -0.879146 0.447947 0.162622
+  outer loop
+   vertex 0.207869 0.5849 0.122743
+   vertex 0.126096 0.453981 0.0412897
+   vertex 0.139023 0.449781 0.122743
+  endloop
+ endfacet
+ facet normal -0.891007 0.45399 0
+  outer loop
+   vertex 0.196873 0.592889 0.0412897
+   vertex 0.196873 0.592889 -0.0412897
+   vertex 0.126096 0.453981 -0.0412897
+  endloop
+ endfacet
+ facet normal -0.891007 0.45399 -1.60779e-07
+  outer loop
+   vertex 0.196873 0.592889 0.0412897
+   vertex 0.126096 0.453981 -0.0412897
+   vertex 0.126096 0.453981 0.0412897
+  endloop
+ endfacet
+ facet normal -0.879146 0.447947 -0.162622
+  outer loop
+   vertex 0.196873 0.592889 -0.0412897
+   vertex 0.207869 0.5849 -0.122743
+   vertex 0.139023 0.449781 -0.122743
+  endloop
+ endfacet
+ facet normal -0.879146 0.447947 -0.162622
+  outer loop
+   vertex 0.196873 0.592889 -0.0412897
+   vertex 0.139023 0.449781 -0.122743
+   vertex 0.126096 0.453981 -0.0412897
+  endloop
+ endfacet
+ facet normal -0.843819 0.429947 -0.321116
+  outer loop
+   vertex 0.207869 0.5849 -0.122743
+   vertex 0.229562 0.569139 -0.200848
+   vertex 0.164524 0.441495 -0.200848
+  endloop
+ endfacet
+ facet normal -0.843819 0.429947 -0.321116
+  outer loop
+   vertex 0.207869 0.5849 -0.122743
+   vertex 0.164524 0.441495 -0.200848
+   vertex 0.139023 0.449781 -0.122743
+  endloop
+ endfacet
+ facet normal -0.785798 0.400384 -0.471396
+  outer loop
+   vertex 0.229562 0.569139 -0.200848
+   vertex 0.261359 0.546037 -0.273474
+   vertex 0.201904 0.429349 -0.273474
+  endloop
+ endfacet
+ facet normal -0.785798 0.400384 -0.471396
+  outer loop
+   vertex 0.229562 0.569139 -0.200848
+   vertex 0.201904 0.429349 -0.273474
+   vertex 0.164524 0.441495 -0.200848
+  endloop
+ endfacet
+ facet normal -0.706398 0.359927 -0.609471
+  outer loop
+   vertex 0.261359 0.546037 -0.273474
+   vertex 0.302393 0.516224 -0.338641
+   vertex 0.250143 0.413676 -0.338641
+  endloop
+ endfacet
+ facet normal -0.706398 0.359927 -0.609471
+  outer loop
+   vertex 0.261359 0.546037 -0.273474
+   vertex 0.250143 0.413676 -0.338641
+   vertex 0.201904 0.429349 -0.273474
+  endloop
+ endfacet
+ facet normal -0.607499 0.309536 -0.731527
+  outer loop
+   vertex 0.302393 0.516224 -0.338641
+   vertex 0.351546 0.480513 -0.39457
+   vertex 0.307925 0.394901 -0.39457
+  endloop
+ endfacet
+ facet normal -0.607499 0.309536 -0.731527
+  outer loop
+   vertex 0.302393 0.516224 -0.338641
+   vertex 0.307925 0.394901 -0.39457
+   vertex 0.250143 0.413676 -0.338641
+  endloop
+ endfacet
+ facet normal -0.491568 0.250467 -0.834043
+  outer loop
+   vertex 0.351546 0.480513 -0.39457
+   vertex 0.407475 0.439877 -0.439737
+   vertex 0.373674 0.373538 -0.439737
+  endloop
+ endfacet
+ facet normal -0.491568 0.250466 -0.834043
+  outer loop
+   vertex 0.351546 0.480513 -0.39457
+   vertex 0.373674 0.373538 -0.439737
+   vertex 0.307925 0.394901 -0.39457
+  endloop
+ endfacet
+ facet normal -0.361643 0.184267 -0.913926
+  outer loop
+   vertex 0.407475 0.439877 -0.439737
+   vertex 0.468656 0.395427 -0.472909
+   vertex 0.445596 0.350169 -0.472909
+  endloop
+ endfacet
+ facet normal -0.361643 0.184267 -0.913926
+  outer loop
+   vertex 0.407475 0.439877 -0.439737
+   vertex 0.445596 0.350169 -0.472909
+   vertex 0.373674 0.373538 -0.439737
+  endloop
+ endfacet
+ facet normal -0.221288 0.112752 -0.968668
+  outer loop
+   vertex 0.468656 0.395427 -0.472909
+   vertex 0.53342 0.348373 -0.493181
+   vertex 0.521731 0.325431 -0.493181
+  endloop
+ endfacet
+ facet normal -0.221288 0.112752 -0.968668
+  outer loop
+   vertex 0.468656 0.395427 -0.472909
+   vertex 0.521731 0.325431 -0.493181
+   vertex 0.445596 0.350169 -0.472909
+  endloop
+ endfacet
+ facet normal -0.2453 0.0388517 0.968668
+  outer loop
+   vertex 0.521731 0.325431 0.493181
+   vertex 0.445596 0.350169 0.472909
+   vertex 0.43765 0.3 0.472909
+  endloop
+ endfacet
+ facet normal -0.2453 0.0388516 0.968668
+  outer loop
+   vertex 0.521731 0.325431 0.493181
+   vertex 0.43765 0.3 0.472909
+   vertex 0.517703 0.3 0.493181
+  endloop
+ endfacet
+ facet normal -0.400885 0.0634939 0.913926
+  outer loop
+   vertex 0.445596 0.350169 0.472909
+   vertex 0.373674 0.373538 0.439737
+   vertex 0.362026 0.3 0.439737
+  endloop
+ endfacet
+ facet normal -0.400885 0.0634939 0.913926
+  outer loop
+   vertex 0.445596 0.350169 0.472909
+   vertex 0.362026 0.3 0.439737
+   vertex 0.43765 0.3 0.472909
+  endloop
+ endfacet
+ facet normal -0.544907 0.0863047 0.834043
+  outer loop
+   vertex 0.373674 0.373538 0.439737
+   vertex 0.307924 0.394901 0.39457
+   vertex 0.292894 0.3 0.39457
+  endloop
+ endfacet
+ facet normal -0.544907 0.0863048 0.834043
+  outer loop
+   vertex 0.373674 0.373538 0.439737
+   vertex 0.292894 0.3 0.39457
+   vertex 0.362026 0.3 0.439737
+  endloop
+ endfacet
+ facet normal -0.673418 0.106659 0.731527
+  outer loop
+   vertex 0.307924 0.394901 0.39457
+   vertex 0.250142 0.413676 0.338641
+   vertex 0.232138 0.3 0.338641
+  endloop
+ endfacet
+ facet normal -0.673418 0.106659 0.731527
+  outer loop
+   vertex 0.307924 0.394901 0.39457
+   vertex 0.232138 0.3 0.338641
+   vertex 0.292894 0.3 0.39457
+  endloop
+ endfacet
+ facet normal -0.783048 0.124023 0.609471
+  outer loop
+   vertex 0.250142 0.413676 0.338641
+   vertex 0.201904 0.429349 0.273474
+   vertex 0.181417 0.3 0.273474
+  endloop
+ endfacet
+ facet normal -0.783048 0.124023 0.609471
+  outer loop
+   vertex 0.250142 0.413676 0.338641
+   vertex 0.181417 0.3 0.273474
+   vertex 0.232138 0.3 0.338641
+  endloop
+ endfacet
+ facet normal -0.871064 0.137963 0.471396
+  outer loop
+   vertex 0.201904 0.429349 0.273474
+   vertex 0.164524 0.441495 0.200848
+   vertex 0.142113 0.3 0.200848
+  endloop
+ endfacet
+ facet normal -0.871064 0.137963 0.471396
+  outer loop
+   vertex 0.201904 0.429349 0.273474
+   vertex 0.142113 0.3 0.200848
+   vertex 0.181417 0.3 0.273474
+  endloop
+ endfacet
+ facet normal -0.93538 0.14815 0.321116
+  outer loop
+   vertex 0.164524 0.441495 0.200848
+   vertex 0.139023 0.449781 0.122743
+   vertex 0.1153 0.3 0.122743
+  endloop
+ endfacet
+ facet normal -0.93538 0.14815 0.321116
+  outer loop
+   vertex 0.164524 0.441495 0.200848
+   vertex 0.1153 0.3 0.122743
+   vertex 0.142113 0.3 0.200848
+  endloop
+ endfacet
+ facet normal -0.974541 0.154352 0.162622
+  outer loop
+   vertex 0.139023 0.449781 0.122743
+   vertex 0.126096 0.453981 0.0412897
+   vertex 0.101708 0.3 0.0412897
+  endloop
+ endfacet
+ facet normal -0.974541 0.154352 0.162622
+  outer loop
+   vertex 0.139023 0.449781 0.122743
+   vertex 0.101708 0.3 0.0412897
+   vertex 0.1153 0.3 0.122743
+  endloop
+ endfacet
+ facet normal -0.987688 0.156434 -1.78225e-07
+  outer loop
+   vertex 0.126096 0.453981 0.0412897
+   vertex 0.126096 0.453981 -0.0412897
+   vertex 0.101708 0.3 -0.0412897
+  endloop
+ endfacet
+ facet normal -0.987688 0.156434 -8.91125e-08
+  outer loop
+   vertex 0.126096 0.453981 0.0412897
+   vertex 0.101708 0.3 -0.0412897
+   vertex 0.101708 0.3 0.0412897
+  endloop
+ endfacet
+ facet normal -0.974541 0.154352 -0.162622
+  outer loop
+   vertex 0.126096 0.453981 -0.0412897
+   vertex 0.139023 0.449781 -0.122743
+   vertex 0.1153 0.3 -0.122743
+  endloop
+ endfacet
+ facet normal -0.974541 0.154352 -0.162622
+  outer loop
+   vertex 0.126096 0.453981 -0.0412897
+   vertex 0.1153 0.3 -0.122743
+   vertex 0.101708 0.3 -0.0412897
+  endloop
+ endfacet
+ facet normal -0.93538 0.14815 -0.321116
+  outer loop
+   vertex 0.139023 0.449781 -0.122743
+   vertex 0.164524 0.441495 -0.200848
+   vertex 0.142113 0.3 -0.200848
+  endloop
+ endfacet
+ facet normal -0.93538 0.14815 -0.321116
+  outer loop
+   vertex 0.139023 0.449781 -0.122743
+   vertex 0.142113 0.3 -0.200848
+   vertex 0.1153 0.3 -0.122743
+  endloop
+ endfacet
+ facet normal -0.871064 0.137963 -0.471396
+  outer loop
+   vertex 0.164524 0.441495 -0.200848
+   vertex 0.201904 0.429349 -0.273474
+   vertex 0.181417 0.3 -0.273474
+  endloop
+ endfacet
+ facet normal -0.871064 0.137963 -0.471396
+  outer loop
+   vertex 0.164524 0.441495 -0.200848
+   vertex 0.181417 0.3 -0.273474
+   vertex 0.142113 0.3 -0.200848
+  endloop
+ endfacet
+ facet normal -0.783048 0.124023 -0.609471
+  outer loop
+   vertex 0.201904 0.429349 -0.273474
+   vertex 0.250143 0.413676 -0.338641
+   vertex 0.232138 0.3 -0.338641
+  endloop
+ endfacet
+ facet normal -0.783048 0.124022 -0.609471
+  outer loop
+   vertex 0.201904 0.429349 -0.273474
+   vertex 0.232138 0.3 -0.338641
+   vertex 0.181417 0.3 -0.273474
+  endloop
+ endfacet
+ facet normal -0.673418 0.106659 -0.731527
+  outer loop
+   vertex 0.250143 0.413676 -0.338641
+   vertex 0.307925 0.394901 -0.39457
+   vertex 0.292894 0.3 -0.39457
+  endloop
+ endfacet
+ facet normal -0.673418 0.106659 -0.731527
+  outer loop
+   vertex 0.250143 0.413676 -0.338641
+   vertex 0.292894 0.3 -0.39457
+   vertex 0.232138 0.3 -0.338641
+  endloop
+ endfacet
+ facet normal -0.544908 0.0863048 -0.834043
+  outer loop
+   vertex 0.307925 0.394901 -0.39457
+   vertex 0.373674 0.373538 -0.439737
+   vertex 0.362026 0.3 -0.439737
+  endloop
+ endfacet
+ facet normal -0.544908 0.0863048 -0.834043
+  outer loop
+   vertex 0.307925 0.394901 -0.39457
+   vertex 0.362026 0.3 -0.439737
+   vertex 0.292894 0.3 -0.39457
+  endloop
+ endfacet
+ facet normal -0.400885 0.0634939 -0.913926
+  outer loop
+   vertex 0.373674 0.373538 -0.439737
+   vertex 0.445596 0.350169 -0.472909
+   vertex 0.43765 0.3 -0.472909
+  endloop
+ endfacet
+ facet normal -0.400885 0.0634939 -0.913926
+  outer loop
+   vertex 0.373674 0.373538 -0.439737
+   vertex 0.43765 0.3 -0.472909
+   vertex 0.362026 0.3 -0.439737
+  endloop
+ endfacet
+ facet normal -0.2453 0.0388516 -0.968668
+  outer loop
+   vertex 0.445596 0.350169 -0.472909
+   vertex 0.521731 0.325431 -0.493181
+   vertex 0.517703 0.3 -0.493181
+  endloop
+ endfacet
+ facet normal -0.2453 0.0388517 -0.968668
+  outer loop
+   vertex 0.445596 0.350169 -0.472909
+   vertex 0.517703 0.3 -0.493181
+   vertex 0.43765 0.3 -0.472909
+  endloop
+ endfacet
+ facet normal -0.2453 -0.0388517 0.968668
+  outer loop
+   vertex 0.517703 0.3 0.493181
+   vertex 0.43765 0.3 0.472909
+   vertex 0.445596 0.249831 0.472909
+  endloop
+ endfacet
+ facet normal -0.2453 -0.0388517 0.968668
+  outer loop
+   vertex 0.517703 0.3 0.493181
+   vertex 0.445596 0.249831 0.472909
+   vertex 0.521731 0.274569 0.493181
+  endloop
+ endfacet
+ facet normal -0.400885 -0.0634939 0.913926
+  outer loop
+   vertex 0.43765 0.3 0.472909
+   vertex 0.362026 0.3 0.439737
+   vertex 0.373674 0.226462 0.439737
+  endloop
+ endfacet
+ facet normal -0.400885 -0.0634939 0.913926
+  outer loop
+   vertex 0.43765 0.3 0.472909
+   vertex 0.373674 0.226462 0.439737
+   vertex 0.445596 0.249831 0.472909
+  endloop
+ endfacet
+ facet normal -0.544907 -0.0863049 0.834043
+  outer loop
+   vertex 0.362026 0.3 0.439737
+   vertex 0.292894 0.3 0.39457
+   vertex 0.307925 0.205099 0.39457
+  endloop
+ endfacet
+ facet normal -0.544907 -0.0863048 0.834043
+  outer loop
+   vertex 0.362026 0.3 0.439737
+   vertex 0.307925 0.205099 0.39457
+   vertex 0.373674 0.226462 0.439737
+  endloop
+ endfacet
+ facet normal -0.673418 -0.106659 0.731527
+  outer loop
+   vertex 0.292894 0.3 0.39457
+   vertex 0.232138 0.3 0.338641
+   vertex 0.250142 0.186324 0.338641
+  endloop
+ endfacet
+ facet normal -0.673418 -0.106659 0.731527
+  outer loop
+   vertex 0.292894 0.3 0.39457
+   vertex 0.250142 0.186324 0.338641
+   vertex 0.307925 0.205099 0.39457
+  endloop
+ endfacet
+ facet normal -0.783048 -0.124023 0.609471
+  outer loop
+   vertex 0.232138 0.3 0.338641
+   vertex 0.181417 0.3 0.273474
+   vertex 0.201904 0.170651 0.273474
+  endloop
+ endfacet
+ facet normal -0.783048 -0.124023 0.609471
+  outer loop
+   vertex 0.232138 0.3 0.338641
+   vertex 0.201904 0.170651 0.273474
+   vertex 0.250142 0.186324 0.338641
+  endloop
+ endfacet
+ facet normal -0.871064 -0.137963 0.471396
+  outer loop
+   vertex 0.181417 0.3 0.273474
+   vertex 0.142113 0.3 0.200848
+   vertex 0.164524 0.158505 0.200848
+  endloop
+ endfacet
+ facet normal -0.871064 -0.137963 0.471396
+  outer loop
+   vertex 0.181417 0.3 0.273474
+   vertex 0.164524 0.158505 0.200848
+   vertex 0.201904 0.170651 0.273474
+  endloop
+ endfacet
+ facet normal -0.93538 -0.14815 0.321116
+  outer loop
+   vertex 0.142113 0.3 0.200848
+   vertex 0.1153 0.3 0.122743
+   vertex 0.139023 0.150219 0.122743
+  endloop
+ endfacet
+ facet normal -0.93538 -0.14815 0.321116
+  outer loop
+   vertex 0.142113 0.3 0.200848
+   vertex 0.139023 0.150219 0.122743
+   vertex 0.164524 0.158505 0.200848
+  endloop
+ endfacet
+ facet normal -0.974541 -0.154352 0.162622
+  outer loop
+   vertex 0.1153 0.3 0.122743
+   vertex 0.101708 0.3 0.0412897
+   vertex 0.126096 0.146019 0.0412897
+  endloop
+ endfacet
+ facet normal -0.974541 -0.154352 0.162622
+  outer loop
+   vertex 0.1153 0.3 0.122743
+   vertex 0.126096 0.146019 0.0412897
+   vertex 0.139023 0.150219 0.122743
+  endloop
+ endfacet
+ facet normal -0.987688 -0.156435 -8.91125e-08
+  outer loop
+   vertex 0.101708 0.3 0.0412897
+   vertex 0.101708 0.3 -0.0412897
+   vertex 0.126096 0.146019 -0.0412897
+  endloop
+ endfacet
+ facet normal -0.987688 -0.156435 -1.78225e-07
+  outer loop
+   vertex 0.101708 0.3 0.0412897
+   vertex 0.126096 0.146019 -0.0412897
+   vertex 0.126096 0.146019 0.0412897
+  endloop
+ endfacet
+ facet normal -0.974541 -0.154352 -0.162622
+  outer loop
+   vertex 0.101708 0.3 -0.0412897
+   vertex 0.1153 0.3 -0.122743
+   vertex 0.139023 0.150219 -0.122743
+  endloop
+ endfacet
+ facet normal -0.974541 -0.154352 -0.162622
+  outer loop
+   vertex 0.101708 0.3 -0.0412897
+   vertex 0.139023 0.150219 -0.122743
+   vertex 0.126096 0.146019 -0.0412897
+  endloop
+ endfacet
+ facet normal -0.93538 -0.14815 -0.321116
+  outer loop
+   vertex 0.1153 0.3 -0.122743
+   vertex 0.142113 0.3 -0.200848
+   vertex 0.164524 0.158505 -0.200848
+  endloop
+ endfacet
+ facet normal -0.93538 -0.14815 -0.321116
+  outer loop
+   vertex 0.1153 0.3 -0.122743
+   vertex 0.164524 0.158505 -0.200848
+   vertex 0.139023 0.150219 -0.122743
+  endloop
+ endfacet
+ facet normal -0.871064 -0.137963 -0.471396
+  outer loop
+   vertex 0.142113 0.3 -0.200848
+   vertex 0.181417 0.3 -0.273474
+   vertex 0.201904 0.170651 -0.273474
+  endloop
+ endfacet
+ facet normal -0.871064 -0.137963 -0.471396
+  outer loop
+   vertex 0.142113 0.3 -0.200848
+   vertex 0.201904 0.170651 -0.273474
+   vertex 0.164524 0.158505 -0.200848
+  endloop
+ endfacet
+ facet normal -0.783048 -0.124023 -0.609471
+  outer loop
+   vertex 0.181417 0.3 -0.273474
+   vertex 0.232138 0.3 -0.338641
+   vertex 0.250143 0.186324 -0.338641
+  endloop
+ endfacet
+ facet normal -0.783048 -0.124023 -0.609471
+  outer loop
+   vertex 0.181417 0.3 -0.273474
+   vertex 0.250143 0.186324 -0.338641
+   vertex 0.201904 0.170651 -0.273474
+  endloop
+ endfacet
+ facet normal -0.673418 -0.106659 -0.731527
+  outer loop
+   vertex 0.232138 0.3 -0.338641
+   vertex 0.292894 0.3 -0.39457
+   vertex 0.307925 0.205099 -0.39457
+  endloop
+ endfacet
+ facet normal -0.673418 -0.106659 -0.731527
+  outer loop
+   vertex 0.232138 0.3 -0.338641
+   vertex 0.307925 0.205099 -0.39457
+   vertex 0.250143 0.186324 -0.338641
+  endloop
+ endfacet
+ facet normal -0.544908 -0.086305 -0.834043
+  outer loop
+   vertex 0.292894 0.3 -0.39457
+   vertex 0.362026 0.3 -0.439737
+   vertex 0.373674 0.226462 -0.439737
+  endloop
+ endfacet
+ facet normal -0.544907 -0.0863049 -0.834043
+  outer loop
+   vertex 0.292894 0.3 -0.39457
+   vertex 0.373674 0.226462 -0.439737
+   vertex 0.307925 0.205099 -0.39457
+  endloop
+ endfacet
+ facet normal -0.400885 -0.0634941 -0.913925
+  outer loop
+   vertex 0.362026 0.3 -0.439737
+   vertex 0.43765 0.3 -0.472909
+   vertex 0.445596 0.249831 -0.472909
+  endloop
+ endfacet
+ facet normal -0.400885 -0.063494 -0.913926
+  outer loop
+   vertex 0.362026 0.3 -0.439737
+   vertex 0.445596 0.249831 -0.472909
+   vertex 0.373674 0.226462 -0.439737
+  endloop
+ endfacet
+ facet normal -0.2453 -0.0388516 -0.968668
+  outer loop
+   vertex 0.43765 0.3 -0.472909
+   vertex 0.517703 0.3 -0.493181
+   vertex 0.521731 0.274569 -0.493181
+  endloop
+ endfacet
+ facet normal -0.2453 -0.0388518 -0.968668
+  outer loop
+   vertex 0.43765 0.3 -0.472909
+   vertex 0.521731 0.274569 -0.493181
+   vertex 0.445596 0.249831 -0.472909
+  endloop
+ endfacet
+ facet normal -0.221289 -0.112752 0.968668
+  outer loop
+   vertex 0.521731 0.274569 0.493181
+   vertex 0.445596 0.249831 0.472909
+   vertex 0.468656 0.204573 0.472909
+  endloop
+ endfacet
+ facet normal -0.221289 -0.112752 0.968668
+  outer loop
+   vertex 0.521731 0.274569 0.493181
+   vertex 0.468656 0.204573 0.472909
+   vertex 0.53342 0.251627 0.493181
+  endloop
+ endfacet
+ facet normal -0.361643 -0.184267 0.913926
+  outer loop
+   vertex 0.445596 0.249831 0.472909
+   vertex 0.373674 0.226462 0.439737
+   vertex 0.407475 0.160123 0.439737
+  endloop
+ endfacet
+ facet normal -0.361643 -0.184267 0.913926
+  outer loop
+   vertex 0.445596 0.249831 0.472909
+   vertex 0.407475 0.160123 0.439737
+   vertex 0.468656 0.204573 0.472909
+  endloop
+ endfacet
+ facet normal -0.491568 -0.250466 0.834043
+  outer loop
+   vertex 0.373674 0.226462 0.439737
+   vertex 0.307925 0.205099 0.39457
+   vertex 0.351546 0.119487 0.39457
+  endloop
+ endfacet
+ facet normal -0.491568 -0.250466 0.834043
+  outer loop
+   vertex 0.373674 0.226462 0.439737
+   vertex 0.351546 0.119487 0.39457
+   vertex 0.407475 0.160123 0.439737
+  endloop
+ endfacet
+ facet normal -0.607499 -0.309536 0.731527
+  outer loop
+   vertex 0.307925 0.205099 0.39457
+   vertex 0.250142 0.186324 0.338641
+   vertex 0.302393 0.0837761 0.338641
+  endloop
+ endfacet
+ facet normal -0.607499 -0.309536 0.731527
+  outer loop
+   vertex 0.307925 0.205099 0.39457
+   vertex 0.302393 0.0837761 0.338641
+   vertex 0.351546 0.119487 0.39457
+  endloop
+ endfacet
+ facet normal -0.706398 -0.359928 0.609471
+  outer loop
+   vertex 0.250142 0.186324 0.338641
+   vertex 0.201904 0.170651 0.273474
+   vertex 0.261359 0.0539629 0.273474
+  endloop
+ endfacet
+ facet normal -0.706398 -0.359928 0.609471
+  outer loop
+   vertex 0.250142 0.186324 0.338641
+   vertex 0.261359 0.0539629 0.273474
+   vertex 0.302393 0.0837761 0.338641
+  endloop
+ endfacet
+ facet normal -0.785798 -0.400384 0.471396
+  outer loop
+   vertex 0.201904 0.170651 0.273474
+   vertex 0.164524 0.158505 0.200848
+   vertex 0.229562 0.0308609 0.200848
+  endloop
+ endfacet
+ facet normal -0.785798 -0.400384 0.471396
+  outer loop
+   vertex 0.201904 0.170651 0.273474
+   vertex 0.229562 0.0308609 0.200848
+   vertex 0.261359 0.0539629 0.273474
+  endloop
+ endfacet
+ facet normal -0.843819 -0.429947 0.321116
+  outer loop
+   vertex 0.164524 0.158505 0.200848
+   vertex 0.139023 0.150219 0.122743
+   vertex 0.207869 0.0151004 0.122743
+  endloop
+ endfacet
+ facet normal -0.843819 -0.429947 0.321116
+  outer loop
+   vertex 0.164524 0.158505 0.200848
+   vertex 0.207869 0.0151004 0.122743
+   vertex 0.229562 0.0308609 0.200848
+  endloop
+ endfacet
+ facet normal -0.879146 -0.447947 0.162622
+  outer loop
+   vertex 0.139023 0.150219 0.122743
+   vertex 0.126096 0.146019 0.0412897
+   vertex 0.196873 0.00711112 0.0412897
+  endloop
+ endfacet
+ facet normal -0.879146 -0.447947 0.162622
+  outer loop
+   vertex 0.139023 0.150219 0.122743
+   vertex 0.196873 0.00711112 0.0412897
+   vertex 0.207869 0.0151004 0.122743
+  endloop
+ endfacet
+ facet normal -0.891006 -0.453991 -1.60779e-07
+  outer loop
+   vertex 0.126096 0.146019 0.0412897
+   vertex 0.126096 0.146019 -0.0412897
+   vertex 0.196873 0.00711113 -0.0412897
+  endloop
+ endfacet
+ facet normal -0.891006 -0.453991 -1.73579e-07
+  outer loop
+   vertex 0.126096 0.146019 0.0412897
+   vertex 0.196873 0.00711113 -0.0412897
+   vertex 0.196873 0.00711112 0.0412897
+  endloop
+ endfacet
+ facet normal -0.879146 -0.447947 -0.162622
+  outer loop
+   vertex 0.126096 0.146019 -0.0412897
+   vertex 0.139023 0.150219 -0.122743
+   vertex 0.207869 0.0151004 -0.122743
+  endloop
+ endfacet
+ facet normal -0.879146 -0.447947 -0.162622
+  outer loop
+   vertex 0.126096 0.146019 -0.0412897
+   vertex 0.207869 0.0151004 -0.122743
+   vertex 0.196873 0.00711113 -0.0412897
+  endloop
+ endfacet
+ facet normal -0.843819 -0.429947 -0.321116
+  outer loop
+   vertex 0.139023 0.150219 -0.122743
+   vertex 0.164524 0.158505 -0.200848
+   vertex 0.229562 0.0308609 -0.200848
+  endloop
+ endfacet
+ facet normal -0.843819 -0.429947 -0.321116
+  outer loop
+   vertex 0.139023 0.150219 -0.122743
+   vertex 0.229562 0.0308609 -0.200848
+   vertex 0.207869 0.0151004 -0.122743
+  endloop
+ endfacet
+ facet normal -0.785798 -0.400384 -0.471396
+  outer loop
+   vertex 0.164524 0.158505 -0.200848
+   vertex 0.201904 0.170651 -0.273474
+   vertex 0.261359 0.0539629 -0.273474
+  endloop
+ endfacet
+ facet normal -0.785798 -0.400384 -0.471396
+  outer loop
+   vertex 0.164524 0.158505 -0.200848
+   vertex 0.261359 0.0539629 -0.273474
+   vertex 0.229562 0.0308609 -0.200848
+  endloop
+ endfacet
+ facet normal -0.706398 -0.359928 -0.609471
+  outer loop
+   vertex 0.201904 0.170651 -0.273474
+   vertex 0.250143 0.186324 -0.338641
+   vertex 0.302393 0.0837761 -0.338641
+  endloop
+ endfacet
+ facet normal -0.706398 -0.359928 -0.609471
+  outer loop
+   vertex 0.201904 0.170651 -0.273474
+   vertex 0.302393 0.0837761 -0.338641
+   vertex 0.261359 0.0539629 -0.273474
+  endloop
+ endfacet
+ facet normal -0.607499 -0.309536 -0.731527
+  outer loop
+   vertex 0.250143 0.186324 -0.338641
+   vertex 0.307925 0.205099 -0.39457
+   vertex 0.351546 0.119487 -0.39457
+  endloop
+ endfacet
+ facet normal -0.607499 -0.309536 -0.731527
+  outer loop
+   vertex 0.250143 0.186324 -0.338641
+   vertex 0.351546 0.119487 -0.39457
+   vertex 0.302393 0.0837761 -0.338641
+  endloop
+ endfacet
+ facet normal -0.491568 -0.250466 -0.834043
+  outer loop
+   vertex 0.307925 0.205099 -0.39457
+   vertex 0.373674 0.226462 -0.439737
+   vertex 0.407475 0.160123 -0.439737
+  endloop
+ endfacet
+ facet normal -0.491568 -0.250467 -0.834043
+  outer loop
+   vertex 0.307925 0.205099 -0.39457
+   vertex 0.407475 0.160123 -0.439737
+   vertex 0.351546 0.119487 -0.39457
+  endloop
+ endfacet
+ facet normal -0.361643 -0.184266 -0.913926
+  outer loop
+   vertex 0.373674 0.226462 -0.439737
+   vertex 0.445596 0.249831 -0.472909
+   vertex 0.468656 0.204573 -0.472909
+  endloop
+ endfacet
+ facet normal -0.361644 -0.184266 -0.913926
+  outer loop
+   vertex 0.373674 0.226462 -0.439737
+   vertex 0.468656 0.204573 -0.472909
+   vertex 0.407475 0.160123 -0.439737
+  endloop
+ endfacet
+ facet normal -0.221288 -0.112752 -0.968668
+  outer loop
+   vertex 0.445596 0.249831 -0.472909
+   vertex 0.521731 0.274569 -0.493181
+   vertex 0.53342 0.251627 -0.493181
+  endloop
+ endfacet
+ facet normal -0.221288 -0.112752 -0.968668
+  outer loop
+   vertex 0.445596 0.249831 -0.472909
+   vertex 0.53342 0.251627 -0.493181
+   vertex 0.468656 0.204573 -0.472909
+  endloop
+ endfacet
+ facet normal -0.175616 -0.175616 0.968668
+  outer loop
+   vertex 0.53342 0.251627 0.493181
+   vertex 0.468656 0.204573 0.472909
+   vertex 0.504573 0.168656 0.472909
+  endloop
+ endfacet
+ facet normal -0.175616 -0.175616 0.968668
+  outer loop
+   vertex 0.53342 0.251627 0.493181
+   vertex 0.504573 0.168656 0.472909
+   vertex 0.551627 0.23342 0.493181
+  endloop
+ endfacet
+ facet normal -0.287002 -0.287002 0.913926
+  outer loop
+   vertex 0.468656 0.204573 0.472909
+   vertex 0.407475 0.160123 0.439737
+   vertex 0.460123 0.107475 0.439737
+  endloop
+ endfacet
+ facet normal -0.287002 -0.287002 0.913926
+  outer loop
+   vertex 0.468656 0.204573 0.472909
+   vertex 0.460123 0.107475 0.439737
+   vertex 0.504573 0.168656 0.472909
+  endloop
+ endfacet
+ facet normal -0.390111 -0.390111 0.834043
+  outer loop
+   vertex 0.407475 0.160123 0.439737
+   vertex 0.351546 0.119487 0.39457
+   vertex 0.419487 0.0515457 0.39457
+  endloop
+ endfacet
+ facet normal -0.390111 -0.390111 0.834043
+  outer loop
+   vertex 0.407475 0.160123 0.439737
+   vertex 0.419487 0.0515457 0.39457
+   vertex 0.460123 0.107475 0.439737
+  endloop
+ endfacet
+ facet normal -0.482114 -0.482114 0.731527
+  outer loop
+   vertex 0.351546 0.119487 0.39457
+   vertex 0.302393 0.0837761 0.338641
+   vertex 0.383776 0.0023934 0.338641
+  endloop
+ endfacet
+ facet normal -0.482114 -0.482114 0.731527
+  outer loop
+   vertex 0.351546 0.119487 0.39457
+   vertex 0.383776 0.0023934 0.338641
+   vertex 0.419487 0.0515457 0.39457
+  endloop
+ endfacet
+ facet normal -0.5606 -0.560601 0.609471
+  outer loop
+   vertex 0.302393 0.0837761 0.338641
+   vertex 0.261359 0.0539629 0.273474
+   vertex 0.353963 -0.038641 0.273474
+  endloop
+ endfacet
+ facet normal -0.5606 -0.560601 0.60947
+  outer loop
+   vertex 0.302393 0.0837761 0.338641
+   vertex 0.353963 -0.038641 0.273474
+   vertex 0.383776 0.0023934 0.338641
+  endloop
+ endfacet
+ facet normal -0.623613 -0.623613 0.471396
+  outer loop
+   vertex 0.261359 0.0539629 0.273474
+   vertex 0.229562 0.0308609 0.200848
+   vertex 0.330861 -0.0704381 0.200848
+  endloop
+ endfacet
+ facet normal -0.623613 -0.623613 0.471396
+  outer loop
+   vertex 0.261359 0.0539629 0.273474
+   vertex 0.330861 -0.0704381 0.200848
+   vertex 0.353963 -0.038641 0.273474
+  endloop
+ endfacet
+ facet normal -0.669658 -0.669658 0.321116
+  outer loop
+   vertex 0.229562 0.0308609 0.200848
+   vertex 0.207869 0.0151004 0.122743
+   vertex 0.3151 -0.0921307 0.122743
+  endloop
+ endfacet
+ facet normal -0.669658 -0.669658 0.321116
+  outer loop
+   vertex 0.229562 0.0308609 0.200848
+   vertex 0.3151 -0.0921307 0.122743
+   vertex 0.330861 -0.0704381 0.200848
+  endloop
+ endfacet
+ facet normal -0.697694 -0.697694 0.162622
+  outer loop
+   vertex 0.207869 0.0151004 0.122743
+   vertex 0.196873 0.00711112 0.0412897
+   vertex 0.307111 -0.103127 0.0412897
+  endloop
+ endfacet
+ facet normal -0.697694 -0.697694 0.162622
+  outer loop
+   vertex 0.207869 0.0151004 0.122743
+   vertex 0.307111 -0.103127 0.0412897
+   vertex 0.3151 -0.0921307 0.122743
+  endloop
+ endfacet
+ facet normal -0.707107 -0.707107 -1.47532e-07
+  outer loop
+   vertex 0.196873 0.00711112 0.0412897
+   vertex 0.196873 0.00711113 -0.0412897
+   vertex 0.307111 -0.103127 -0.0412897
+  endloop
+ endfacet
+ facet normal -0.707107 -0.707107 0
+  outer loop
+   vertex 0.196873 0.00711112 0.0412897
+   vertex 0.307111 -0.103127 -0.0412897
+   vertex 0.307111 -0.103127 0.0412897
+  endloop
+ endfacet
+ facet normal -0.697694 -0.697694 -0.162622
+  outer loop
+   vertex 0.196873 0.00711113 -0.0412897
+   vertex 0.207869 0.0151004 -0.122743
+   vertex 0.3151 -0.0921307 -0.122743
+  endloop
+ endfacet
+ facet normal -0.697694 -0.697694 -0.162622
+  outer loop
+   vertex 0.196873 0.00711113 -0.0412897
+   vertex 0.3151 -0.0921307 -0.122743
+   vertex 0.307111 -0.103127 -0.0412897
+  endloop
+ endfacet
+ facet normal -0.669658 -0.669658 -0.321116
+  outer loop
+   vertex 0.207869 0.0151004 -0.122743
+   vertex 0.229562 0.0308609 -0.200848
+   vertex 0.330861 -0.0704381 -0.200848
+  endloop
+ endfacet
+ facet normal -0.669658 -0.669658 -0.321116
+  outer loop
+   vertex 0.207869 0.0151004 -0.122743
+   vertex 0.330861 -0.0704381 -0.200848
+   vertex 0.3151 -0.0921307 -0.122743
+  endloop
+ endfacet
+ facet normal -0.623613 -0.623613 -0.471396
+  outer loop
+   vertex 0.229562 0.0308609 -0.200848
+   vertex 0.261359 0.0539629 -0.273474
+   vertex 0.353963 -0.038641 -0.273474
+  endloop
+ endfacet
+ facet normal -0.623613 -0.623613 -0.471396
+  outer loop
+   vertex 0.229562 0.0308609 -0.200848
+   vertex 0.353963 -0.038641 -0.273474
+   vertex 0.330861 -0.0704381 -0.200848
+  endloop
+ endfacet
+ facet normal -0.5606 -0.560601 -0.609471
+  outer loop
+   vertex 0.261359 0.0539629 -0.273474
+   vertex 0.302393 0.0837761 -0.338641
+   vertex 0.383776 0.00239342 -0.338641
+  endloop
+ endfacet
+ facet normal -0.5606 -0.5606 -0.609471
+  outer loop
+   vertex 0.261359 0.0539629 -0.273474
+   vertex 0.383776 0.00239342 -0.338641
+   vertex 0.353963 -0.038641 -0.273474
+  endloop
+ endfacet
+ facet normal -0.482114 -0.482114 -0.731527
+  outer loop
+   vertex 0.302393 0.0837761 -0.338641
+   vertex 0.351546 0.119487 -0.39457
+   vertex 0.419487 0.0515457 -0.39457
+  endloop
+ endfacet
+ facet normal -0.482114 -0.482114 -0.731527
+  outer loop
+   vertex 0.302393 0.0837761 -0.338641
+   vertex 0.419487 0.0515457 -0.39457
+   vertex 0.383776 0.00239342 -0.338641
+  endloop
+ endfacet
+ facet normal -0.390111 -0.390111 -0.834043
+  outer loop
+   vertex 0.351546 0.119487 -0.39457
+   vertex 0.407475 0.160123 -0.439737
+   vertex 0.460123 0.107475 -0.439737
+  endloop
+ endfacet
+ facet normal -0.390111 -0.390111 -0.834043
+  outer loop
+   vertex 0.351546 0.119487 -0.39457
+   vertex 0.460123 0.107475 -0.439737
+   vertex 0.419487 0.0515457 -0.39457
+  endloop
+ endfacet
+ facet normal -0.287002 -0.287002 -0.913926
+  outer loop
+   vertex 0.407475 0.160123 -0.439737
+   vertex 0.468656 0.204573 -0.472909
+   vertex 0.504573 0.168656 -0.472909
+  endloop
+ endfacet
+ facet normal -0.287002 -0.287002 -0.913926
+  outer loop
+   vertex 0.407475 0.160123 -0.439737
+   vertex 0.504573 0.168656 -0.472909
+   vertex 0.460123 0.107475 -0.439737
+  endloop
+ endfacet
+ facet normal -0.175615 -0.175615 -0.968668
+  outer loop
+   vertex 0.468656 0.204573 -0.472909
+   vertex 0.53342 0.251627 -0.493181
+   vertex 0.551627 0.23342 -0.493181
+  endloop
+ endfacet
+ facet normal -0.175615 -0.175615 -0.968668
+  outer loop
+   vertex 0.468656 0.204573 -0.472909
+   vertex 0.551627 0.23342 -0.493181
+   vertex 0.504573 0.168656 -0.472909
+  endloop
+ endfacet
+ facet normal -0.112752 -0.221289 0.968668
+  outer loop
+   vertex 0.551627 0.23342 0.493181
+   vertex 0.504573 0.168656 0.472909
+   vertex 0.549831 0.145596 0.472909
+  endloop
+ endfacet
+ facet normal -0.112752 -0.221289 0.968668
+  outer loop
+   vertex 0.551627 0.23342 0.493181
+   vertex 0.549831 0.145596 0.472909
+   vertex 0.574569 0.221731 0.493181
+  endloop
+ endfacet
+ facet normal -0.184266 -0.361644 0.913926
+  outer loop
+   vertex 0.504573 0.168656 0.472909
+   vertex 0.460123 0.107475 0.439737
+   vertex 0.526462 0.0736736 0.439737
+  endloop
+ endfacet
+ facet normal -0.184266 -0.361644 0.913926
+  outer loop
+   vertex 0.504573 0.168656 0.472909
+   vertex 0.526462 0.0736736 0.439737
+   vertex 0.549831 0.145596 0.472909
+  endloop
+ endfacet
+ facet normal -0.250466 -0.491568 0.834043
+  outer loop
+   vertex 0.460123 0.107475 0.439737
+   vertex 0.419487 0.0515457 0.39457
+   vertex 0.505099 0.00792448 0.39457
+  endloop
+ endfacet
+ facet normal -0.250466 -0.491568 0.834043
+  outer loop
+   vertex 0.460123 0.107475 0.439737
+   vertex 0.505099 0.00792448 0.39457
+   vertex 0.526462 0.0736736 0.439737
+  endloop
+ endfacet
+ facet normal -0.309536 -0.607499 0.731527
+  outer loop
+   vertex 0.419487 0.0515457 0.39457
+   vertex 0.383776 0.0023934 0.338641
+   vertex 0.486324 -0.0498575 0.338641
+  endloop
+ endfacet
+ facet normal -0.309536 -0.607499 0.731527
+  outer loop
+   vertex 0.419487 0.0515457 0.39457
+   vertex 0.486324 -0.0498575 0.338641
+   vertex 0.505099 0.00792448 0.39457
+  endloop
+ endfacet
+ facet normal -0.359928 -0.706398 0.609471
+  outer loop
+   vertex 0.383776 0.0023934 0.338641
+   vertex 0.353963 -0.038641 0.273474
+   vertex 0.470651 -0.0980963 0.273474
+  endloop
+ endfacet
+ facet normal -0.359927 -0.706398 0.609471
+  outer loop
+   vertex 0.383776 0.0023934 0.338641
+   vertex 0.470651 -0.0980963 0.273474
+   vertex 0.486324 -0.0498575 0.338641
+  endloop
+ endfacet
+ facet normal -0.400384 -0.785798 0.471396
+  outer loop
+   vertex 0.353963 -0.038641 0.273474
+   vertex 0.330861 -0.0704381 0.200848
+   vertex 0.458505 -0.135476 0.200848
+  endloop
+ endfacet
+ facet normal -0.400384 -0.785798 0.471396
+  outer loop
+   vertex 0.353963 -0.038641 0.273474
+   vertex 0.458505 -0.135476 0.200848
+   vertex 0.470651 -0.0980963 0.273474
+  endloop
+ endfacet
+ facet normal -0.429947 -0.843819 0.321116
+  outer loop
+   vertex 0.330861 -0.0704381 0.200848
+   vertex 0.3151 -0.0921307 0.122743
+   vertex 0.450219 -0.160977 0.122743
+  endloop
+ endfacet
+ facet normal -0.429947 -0.843819 0.321116
+  outer loop
+   vertex 0.330861 -0.0704381 0.200848
+   vertex 0.450219 -0.160977 0.122743
+   vertex 0.458505 -0.135476 0.200848
+  endloop
+ endfacet
+ facet normal -0.447947 -0.879146 0.162622
+  outer loop
+   vertex 0.3151 -0.0921307 0.122743
+   vertex 0.307111 -0.103127 0.0412897
+   vertex 0.446019 -0.173904 0.0412897
+  endloop
+ endfacet
+ facet normal -0.447947 -0.879146 0.162622
+  outer loop
+   vertex 0.3151 -0.0921307 0.122743
+   vertex 0.446019 -0.173904 0.0412897
+   vertex 0.450219 -0.160977 0.122743
+  endloop
+ endfacet
+ facet normal -0.45399 -0.891007 0
+  outer loop
+   vertex 0.307111 -0.103127 0.0412897
+   vertex 0.307111 -0.103127 -0.0412897
+   vertex 0.446019 -0.173904 -0.0412897
+  endloop
+ endfacet
+ facet normal -0.45399 -0.891007 0
+  outer loop
+   vertex 0.307111 -0.103127 0.0412897
+   vertex 0.446019 -0.173904 -0.0412897
+   vertex 0.446019 -0.173904 0.0412897
+  endloop
+ endfacet
+ facet normal -0.447947 -0.879146 -0.162622
+  outer loop
+   vertex 0.307111 -0.103127 -0.0412897
+   vertex 0.3151 -0.0921307 -0.122743
+   vertex 0.450219 -0.160977 -0.122743
+  endloop
+ endfacet
+ facet normal -0.447947 -0.879146 -0.162622
+  outer loop
+   vertex 0.307111 -0.103127 -0.0412897
+   vertex 0.450219 -0.160977 -0.122743
+   vertex 0.446019 -0.173904 -0.0412897
+  endloop
+ endfacet
+ facet normal -0.429947 -0.843819 -0.321116
+  outer loop
+   vertex 0.3151 -0.0921307 -0.122743
+   vertex 0.330861 -0.0704381 -0.200848
+   vertex 0.458505 -0.135476 -0.200848
+  endloop
+ endfacet
+ facet normal -0.429947 -0.843819 -0.321116
+  outer loop
+   vertex 0.3151 -0.0921307 -0.122743
+   vertex 0.458505 -0.135476 -0.200848
+   vertex 0.450219 -0.160977 -0.122743
+  endloop
+ endfacet
+ facet normal -0.400384 -0.785798 -0.471396
+  outer loop
+   vertex 0.330861 -0.0704381 -0.200848
+   vertex 0.353963 -0.038641 -0.273474
+   vertex 0.470651 -0.0980963 -0.273474
+  endloop
+ endfacet
+ facet normal -0.400384 -0.785798 -0.471396
+  outer loop
+   vertex 0.330861 -0.0704381 -0.200848
+   vertex 0.470651 -0.0980963 -0.273474
+   vertex 0.458505 -0.135476 -0.200848
+  endloop
+ endfacet
+ facet normal -0.359928 -0.706398 -0.609471
+  outer loop
+   vertex 0.353963 -0.038641 -0.273474
+   vertex 0.383776 0.00239342 -0.338641
+   vertex 0.486324 -0.0498575 -0.338641
+  endloop
+ endfacet
+ facet normal -0.359927 -0.706398 -0.609471
+  outer loop
+   vertex 0.353963 -0.038641 -0.273474
+   vertex 0.486324 -0.0498575 -0.338641
+   vertex 0.470651 -0.0980963 -0.273474
+  endloop
+ endfacet
+ facet normal -0.309536 -0.607499 -0.731527
+  outer loop
+   vertex 0.383776 0.00239342 -0.338641
+   vertex 0.419487 0.0515457 -0.39457
+   vertex 0.505099 0.00792451 -0.39457
+  endloop
+ endfacet
+ facet normal -0.309536 -0.607499 -0.731527
+  outer loop
+   vertex 0.383776 0.00239342 -0.338641
+   vertex 0.505099 0.00792451 -0.39457
+   vertex 0.486324 -0.0498575 -0.338641
+  endloop
+ endfacet
+ facet normal -0.250466 -0.491568 -0.834043
+  outer loop
+   vertex 0.419487 0.0515457 -0.39457
+   vertex 0.460123 0.107475 -0.439737
+   vertex 0.526462 0.0736736 -0.439737
+  endloop
+ endfacet
+ facet normal -0.250466 -0.491568 -0.834043
+  outer loop
+   vertex 0.419487 0.0515457 -0.39457
+   vertex 0.526462 0.0736736 -0.439737
+   vertex 0.505099 0.00792451 -0.39457
+  endloop
+ endfacet
+ facet normal -0.184267 -0.361643 -0.913926
+  outer loop
+   vertex 0.460123 0.107475 -0.439737
+   vertex 0.504573 0.168656 -0.472909
+   vertex 0.549831 0.145596 -0.472909
+  endloop
+ endfacet
+ facet normal -0.184266 -0.361644 -0.913926
+  outer loop
+   vertex 0.460123 0.107475 -0.439737
+   vertex 0.549831 0.145596 -0.472909
+   vertex 0.526462 0.0736736 -0.439737
+  endloop
+ endfacet
+ facet normal -0.112752 -0.221288 -0.968668
+  outer loop
+   vertex 0.504573 0.168656 -0.472909
+   vertex 0.551627 0.23342 -0.493181
+   vertex 0.574569 0.221731 -0.493181
+  endloop
+ endfacet
+ facet normal -0.112752 -0.221288 -0.968668
+  outer loop
+   vertex 0.504573 0.168656 -0.472909
+   vertex 0.574569 0.221731 -0.493181
+   vertex 0.549831 0.145596 -0.472909
+  endloop
+ endfacet
+ facet normal -0.0388517 -0.2453 0.968668
+  outer loop
+   vertex 0.574569 0.221731 0.493181
+   vertex 0.549831 0.145596 0.472909
+   vertex 0.6 0.13765 0.472909
+  endloop
+ endfacet
+ facet normal -0.0388518 -0.2453 0.968668
+  outer loop
+   vertex 0.574569 0.221731 0.493181
+   vertex 0.6 0.13765 0.472909
+   vertex 0.6 0.217703 0.493181
+  endloop
+ endfacet
+ facet normal -0.0634939 -0.400885 0.913926
+  outer loop
+   vertex 0.549831 0.145596 0.472909
+   vertex 0.526462 0.0736736 0.439737
+   vertex 0.6 0.0620263 0.439737
+  endloop
+ endfacet
+ facet normal -0.0634939 -0.400885 0.913926
+  outer loop
+   vertex 0.549831 0.145596 0.472909
+   vertex 0.6 0.0620263 0.439737
+   vertex 0.6 0.13765 0.472909
+  endloop
+ endfacet
+ facet normal -0.0863048 -0.544907 0.834043
+  outer loop
+   vertex 0.526462 0.0736736 0.439737
+   vertex 0.505099 0.00792448 0.39457
+   vertex 0.6 -0.00710636 0.39457
+  endloop
+ endfacet
+ facet normal -0.0863048 -0.544907 0.834043
+  outer loop
+   vertex 0.526462 0.0736736 0.439737
+   vertex 0.6 -0.00710636 0.39457
+   vertex 0.6 0.0620263 0.439737
+  endloop
+ endfacet
+ facet normal -0.106659 -0.673418 0.731527
+  outer loop
+   vertex 0.505099 0.00792448 0.39457
+   vertex 0.486324 -0.0498575 0.338641
+   vertex 0.6 -0.067862 0.338641
+  endloop
+ endfacet
+ facet normal -0.106659 -0.673418 0.731527
+  outer loop
+   vertex 0.505099 0.00792448 0.39457
+   vertex 0.6 -0.067862 0.338641
+   vertex 0.6 -0.00710636 0.39457
+  endloop
+ endfacet
+ facet normal -0.124022 -0.783048 0.609471
+  outer loop
+   vertex 0.486324 -0.0498575 0.338641
+   vertex 0.470651 -0.0980963 0.273474
+   vertex 0.6 -0.118583 0.273474
+  endloop
+ endfacet
+ facet normal -0.124023 -0.783048 0.60947
+  outer loop
+   vertex 0.486324 -0.0498575 0.338641
+   vertex 0.6 -0.118583 0.273474
+   vertex 0.6 -0.067862 0.338641
+  endloop
+ endfacet
+ facet normal -0.137963 -0.871064 0.471396
+  outer loop
+   vertex 0.470651 -0.0980963 0.273474
+   vertex 0.458505 -0.135476 0.200848
+   vertex 0.6 -0.157887 0.200848
+  endloop
+ endfacet
+ facet normal -0.137963 -0.871064 0.471396
+  outer loop
+   vertex 0.470651 -0.0980963 0.273474
+   vertex 0.6 -0.157887 0.200848
+   vertex 0.6 -0.118583 0.273474
+  endloop
+ endfacet
+ facet normal -0.148149 -0.93538 0.321116
+  outer loop
+   vertex 0.458505 -0.135476 0.200848
+   vertex 0.450219 -0.160977 0.122743
+   vertex 0.6 -0.1847 0.122743
+  endloop
+ endfacet
+ facet normal -0.14815 -0.93538 0.321116
+  outer loop
+   vertex 0.458505 -0.135476 0.200848
+   vertex 0.6 -0.1847 0.122743
+   vertex 0.6 -0.157887 0.200848
+  endloop
+ endfacet
+ facet normal -0.154352 -0.974541 0.162622
+  outer loop
+   vertex 0.450219 -0.160977 0.122743
+   vertex 0.446019 -0.173904 0.0412897
+   vertex 0.6 -0.198292 0.0412897
+  endloop
+ endfacet
+ facet normal -0.154352 -0.974541 0.162622
+  outer loop
+   vertex 0.450219 -0.160977 0.122743
+   vertex 0.6 -0.198292 0.0412897
+   vertex 0.6 -0.1847 0.122743
+  endloop
+ endfacet
+ facet normal -0.156434 -0.987688 0
+  outer loop
+   vertex 0.446019 -0.173904 0.0412897
+   vertex 0.446019 -0.173904 -0.0412897
+   vertex 0.6 -0.198292 -0.0412897
+  endloop
+ endfacet
+ facet normal -0.156434 -0.987688 -1.78225e-07
+  outer loop
+   vertex 0.446019 -0.173904 0.0412897
+   vertex 0.6 -0.198292 -0.0412897
+   vertex 0.6 -0.198292 0.0412897
+  endloop
+ endfacet
+ facet normal -0.154352 -0.974541 -0.162622
+  outer loop
+   vertex 0.446019 -0.173904 -0.0412897
+   vertex 0.450219 -0.160977 -0.122743
+   vertex 0.6 -0.1847 -0.122743
+  endloop
+ endfacet
+ facet normal -0.154352 -0.974541 -0.162622
+  outer loop
+   vertex 0.446019 -0.173904 -0.0412897
+   vertex 0.6 -0.1847 -0.122743
+   vertex 0.6 -0.198292 -0.0412897
+  endloop
+ endfacet
+ facet normal -0.14815 -0.93538 -0.321116
+  outer loop
+   vertex 0.450219 -0.160977 -0.122743
+   vertex 0.458505 -0.135476 -0.200848
+   vertex 0.6 -0.157887 -0.200848
+  endloop
+ endfacet
+ facet normal -0.14815 -0.93538 -0.321116
+  outer loop
+   vertex 0.450219 -0.160977 -0.122743
+   vertex 0.6 -0.157887 -0.200848
+   vertex 0.6 -0.1847 -0.122743
+  endloop
+ endfacet
+ facet normal -0.137963 -0.871064 -0.471396
+  outer loop
+   vertex 0.458505 -0.135476 -0.200848
+   vertex 0.470651 -0.0980963 -0.273474
+   vertex 0.6 -0.118583 -0.273474
+  endloop
+ endfacet
+ facet normal -0.137963 -0.871064 -0.471396
+  outer loop
+   vertex 0.458505 -0.135476 -0.200848
+   vertex 0.6 -0.118583 -0.273474
+   vertex 0.6 -0.157887 -0.200848
+  endloop
+ endfacet
+ facet normal -0.124023 -0.783048 -0.609471
+  outer loop
+   vertex 0.470651 -0.0980963 -0.273474
+   vertex 0.486324 -0.0498575 -0.338641
+   vertex 0.6 -0.0678619 -0.338641
+  endloop
+ endfacet
+ facet normal -0.124022 -0.783048 -0.609471
+  outer loop
+   vertex 0.470651 -0.0980963 -0.273474
+   vertex 0.6 -0.0678619 -0.338641
+   vertex 0.6 -0.118583 -0.273474
+  endloop
+ endfacet
+ facet normal -0.106659 -0.673418 -0.731527
+  outer loop
+   vertex 0.486324 -0.0498575 -0.338641
+   vertex 0.505099 0.00792451 -0.39457
+   vertex 0.6 -0.00710633 -0.39457
+  endloop
+ endfacet
+ facet normal -0.106659 -0.673418 -0.731527
+  outer loop
+   vertex 0.486324 -0.0498575 -0.338641
+   vertex 0.6 -0.00710633 -0.39457
+   vertex 0.6 -0.0678619 -0.338641
+  endloop
+ endfacet
+ facet normal -0.0863048 -0.544908 -0.834043
+  outer loop
+   vertex 0.505099 0.00792451 -0.39457
+   vertex 0.526462 0.0736736 -0.439737
+   vertex 0.6 0.0620263 -0.439737
+  endloop
+ endfacet
+ facet normal -0.0863048 -0.544908 -0.834043
+  outer loop
+   vertex 0.505099 0.00792451 -0.39457
+   vertex 0.6 0.0620263 -0.439737
+   vertex 0.6 -0.00710633 -0.39457
+  endloop
+ endfacet
+ facet normal -0.0634939 -0.400885 -0.913926
+  outer loop
+   vertex 0.526462 0.0736736 -0.439737
+   vertex 0.549831 0.145596 -0.472909
+   vertex 0.6 0.13765 -0.472909
+  endloop
+ endfacet
+ facet normal -0.0634939 -0.400885 -0.913926
+  outer loop
+   vertex 0.526462 0.0736736 -0.439737
+   vertex 0.6 0.13765 -0.472909
+   vertex 0.6 0.0620263 -0.439737
+  endloop
+ endfacet
+ facet normal -0.0388516 -0.2453 -0.968668
+  outer loop
+   vertex 0.549831 0.145596 -0.472909
+   vertex 0.574569 0.221731 -0.493181
+   vertex 0.6 0.217703 -0.493181
+  endloop
+ endfacet
+ facet normal -0.0388517 -0.2453 -0.968668
+  outer loop
+   vertex 0.549831 0.145596 -0.472909
+   vertex 0.6 0.217703 -0.493181
+   vertex 0.6 0.13765 -0.472909
+  endloop
+ endfacet
+ facet normal 0.0388518 -0.2453 0.968668
+  outer loop
+   vertex 0.6 0.217703 0.493181
+   vertex 0.6 0.13765 0.472909
+   vertex 0.650169 0.145596 0.472909
+  endloop
+ endfacet
+ facet normal 0.0388518 -0.2453 0.968668
+  outer loop
+   vertex 0.6 0.217703 0.493181
+   vertex 0.650169 0.145596 0.472909
+   vertex 0.625431 0.221731 0.493181
+  endloop
+ endfacet
+ facet normal 0.063494 -0.400885 0.913926
+  outer loop
+   vertex 0.6 0.13765 0.472909
+   vertex 0.6 0.0620263 0.439737
+   vertex 0.673538 0.0736736 0.439737
+  endloop
+ endfacet
+ facet normal 0.063494 -0.400885 0.913926
+  outer loop
+   vertex 0.6 0.13765 0.472909
+   vertex 0.673538 0.0736736 0.439737
+   vertex 0.650169 0.145596 0.472909
+  endloop
+ endfacet
+ facet normal 0.0863049 -0.544907 0.834043
+  outer loop
+   vertex 0.6 0.0620263 0.439737
+   vertex 0.6 -0.00710636 0.39457
+   vertex 0.694901 0.0079245 0.39457
+  endloop
+ endfacet
+ facet normal 0.0863049 -0.544907 0.834043
+  outer loop
+   vertex 0.6 0.0620263 0.439737
+   vertex 0.694901 0.0079245 0.39457
+   vertex 0.673538 0.0736736 0.439737
+  endloop
+ endfacet
+ facet normal 0.106659 -0.673418 0.731527
+  outer loop
+   vertex 0.6 -0.00710636 0.39457
+   vertex 0.6 -0.067862 0.338641
+   vertex 0.713676 -0.0498575 0.338641
+  endloop
+ endfacet
+ facet normal 0.106659 -0.673418 0.731527
+  outer loop
+   vertex 0.6 -0.00710636 0.39457
+   vertex 0.713676 -0.0498575 0.338641
+   vertex 0.694901 0.0079245 0.39457
+  endloop
+ endfacet
+ facet normal 0.124023 -0.783048 0.609471
+  outer loop
+   vertex 0.6 -0.067862 0.338641
+   vertex 0.6 -0.118583 0.273474
+   vertex 0.729349 -0.0980963 0.273474
+  endloop
+ endfacet
+ facet normal 0.124023 -0.783048 0.609471
+  outer loop
+   vertex 0.6 -0.067862 0.338641
+   vertex 0.729349 -0.0980963 0.273474
+   vertex 0.713676 -0.0498575 0.338641
+  endloop
+ endfacet
+ facet normal 0.137963 -0.871064 0.471396
+  outer loop
+   vertex 0.6 -0.118583 0.273474
+   vertex 0.6 -0.157887 0.200848
+   vertex 0.741495 -0.135476 0.200848
+  endloop
+ endfacet
+ facet normal 0.137963 -0.871064 0.471396
+  outer loop
+   vertex 0.6 -0.118583 0.273474
+   vertex 0.741495 -0.135476 0.200848
+   vertex 0.729349 -0.0980963 0.273474
+  endloop
+ endfacet
+ facet normal 0.14815 -0.93538 0.321116
+  outer loop
+   vertex 0.6 -0.157887 0.200848
+   vertex 0.6 -0.1847 0.122743
+   vertex 0.749781 -0.160977 0.122743
+  endloop
+ endfacet
+ facet normal 0.14815 -0.93538 0.321116
+  outer loop
+   vertex 0.6 -0.157887 0.200848
+   vertex 0.749781 -0.160977 0.122743
+   vertex 0.741495 -0.135476 0.200848
+  endloop
+ endfacet
+ facet normal 0.154352 -0.974541 0.162622
+  outer loop
+   vertex 0.6 -0.1847 0.122743
+   vertex 0.6 -0.198292 0.0412897
+   vertex 0.753981 -0.173904 0.0412897
+  endloop
+ endfacet
+ facet normal 0.154352 -0.974541 0.162622
+  outer loop
+   vertex 0.6 -0.1847 0.122743
+   vertex 0.753981 -0.173904 0.0412897
+   vertex 0.749781 -0.160977 0.122743
+  endloop
+ endfacet
+ facet normal 0.156435 -0.987688 -1.78225e-07
+  outer loop
+   vertex 0.6 -0.198292 0.0412897
+   vertex 0.6 -0.198292 -0.0412897
+   vertex 0.753981 -0.173904 -0.0412897
+  endloop
+ endfacet
+ facet normal 0.156435 -0.987688 0
+  outer loop
+   vertex 0.6 -0.198292 0.0412897
+   vertex 0.753981 -0.173904 -0.0412897
+   vertex 0.753981 -0.173904 0.0412897
+  endloop
+ endfacet
+ facet normal 0.154352 -0.974541 -0.162622
+  outer loop
+   vertex 0.6 -0.198292 -0.0412897
+   vertex 0.6 -0.1847 -0.122743
+   vertex 0.749781 -0.160977 -0.122743
+  endloop
+ endfacet
+ facet normal 0.154352 -0.974541 -0.162622
+  outer loop
+   vertex 0.6 -0.198292 -0.0412897
+   vertex 0.749781 -0.160977 -0.122743
+   vertex 0.753981 -0.173904 -0.0412897
+  endloop
+ endfacet
+ facet normal 0.14815 -0.93538 -0.321116
+  outer loop
+   vertex 0.6 -0.1847 -0.122743
+   vertex 0.6 -0.157887 -0.200848
+   vertex 0.741495 -0.135476 -0.200848
+  endloop
+ endfacet
+ facet normal 0.14815 -0.93538 -0.321116
+  outer loop
+   vertex 0.6 -0.1847 -0.122743
+   vertex 0.741495 -0.135476 -0.200848
+   vertex 0.749781 -0.160977 -0.122743
+  endloop
+ endfacet
+ facet normal 0.137963 -0.871064 -0.471396
+  outer loop
+   vertex 0.6 -0.157887 -0.200848
+   vertex 0.6 -0.118583 -0.273474
+   vertex 0.729349 -0.0980963 -0.273474
+  endloop
+ endfacet
+ facet normal 0.137963 -0.871064 -0.471396
+  outer loop
+   vertex 0.6 -0.157887 -0.200848
+   vertex 0.729349 -0.0980963 -0.273474
+   vertex 0.741495 -0.135476 -0.200848
+  endloop
+ endfacet
+ facet normal 0.124023 -0.783048 -0.609471
+  outer loop
+   vertex 0.6 -0.118583 -0.273474
+   vertex 0.6 -0.0678619 -0.338641
+   vertex 0.713676 -0.0498575 -0.338641
+  endloop
+ endfacet
+ facet normal 0.124023 -0.783048 -0.609471
+  outer loop
+   vertex 0.6 -0.118583 -0.273474
+   vertex 0.713676 -0.0498575 -0.338641
+   vertex 0.729349 -0.0980963 -0.273474
+  endloop
+ endfacet
+ facet normal 0.106659 -0.673418 -0.731527
+  outer loop
+   vertex 0.6 -0.0678619 -0.338641
+   vertex 0.6 -0.00710633 -0.39457
+   vertex 0.694901 0.00792454 -0.39457
+  endloop
+ endfacet
+ facet normal 0.106659 -0.673418 -0.731527
+  outer loop
+   vertex 0.6 -0.0678619 -0.338641
+   vertex 0.694901 0.00792454 -0.39457
+   vertex 0.713676 -0.0498575 -0.338641
+  endloop
+ endfacet
+ facet normal 0.086305 -0.544908 -0.834043
+  outer loop
+   vertex 0.6 -0.00710633 -0.39457
+   vertex 0.6 0.0620263 -0.439737
+   vertex 0.673538 0.0736736 -0.439737
+  endloop
+ endfacet
+ facet normal 0.0863049 -0.544907 -0.834043
+  outer loop
+   vertex 0.6 -0.00710633 -0.39457
+   vertex 0.673538 0.0736736 -0.439737
+   vertex 0.694901 0.00792454 -0.39457
+  endloop
+ endfacet
+ facet normal 0.063494 -0.400885 -0.913926
+  outer loop
+   vertex 0.6 0.0620263 -0.439737
+   vertex 0.6 0.13765 -0.472909
+   vertex 0.650169 0.145596 -0.472909
+  endloop
+ endfacet
+ facet normal 0.063494 -0.400885 -0.913926
+  outer loop
+   vertex 0.6 0.0620263 -0.439737
+   vertex 0.650169 0.145596 -0.472909
+   vertex 0.673538 0.0736736 -0.439737
+  endloop
+ endfacet
+ facet normal 0.0388518 -0.2453 -0.968668
+  outer loop
+   vertex 0.6 0.13765 -0.472909
+   vertex 0.6 0.217703 -0.493181
+   vertex 0.625431 0.221731 -0.493181
+  endloop
+ endfacet
+ facet normal 0.0388517 -0.2453 -0.968668
+  outer loop
+   vertex 0.6 0.13765 -0.472909
+   vertex 0.625431 0.221731 -0.493181
+   vertex 0.650169 0.145596 -0.472909
+  endloop
+ endfacet
+ facet normal 0.112752 -0.221289 0.968668
+  outer loop
+   vertex 0.625431 0.221731 0.493181
+   vertex 0.650169 0.145596 0.472909
+   vertex 0.695427 0.168656 0.472909
+  endloop
+ endfacet
+ facet normal 0.112752 -0.221288 0.968668
+  outer loop
+   vertex 0.625431 0.221731 0.493181
+   vertex 0.695427 0.168656 0.472909
+   vertex 0.648373 0.23342 0.493181
+  endloop
+ endfacet
+ facet normal 0.184267 -0.361643 0.913926
+  outer loop
+   vertex 0.650169 0.145596 0.472909
+   vertex 0.673538 0.0736736 0.439737
+   vertex 0.739877 0.107475 0.439737
+  endloop
+ endfacet
+ facet normal 0.184266 -0.361644 0.913925
+  outer loop
+   vertex 0.650169 0.145596 0.472909
+   vertex 0.739877 0.107475 0.439737
+   vertex 0.695427 0.168656 0.472909
+  endloop
+ endfacet
+ facet normal 0.250466 -0.491568 0.834043
+  outer loop
+   vertex 0.673538 0.0736736 0.439737
+   vertex 0.694901 0.0079245 0.39457
+   vertex 0.780513 0.0515458 0.39457
+  endloop
+ endfacet
+ facet normal 0.250467 -0.491568 0.834043
+  outer loop
+   vertex 0.673538 0.0736736 0.439737
+   vertex 0.780513 0.0515458 0.39457
+   vertex 0.739877 0.107475 0.439737
+  endloop
+ endfacet
+ facet normal 0.309536 -0.607499 0.731527
+  outer loop
+   vertex 0.694901 0.0079245 0.39457
+   vertex 0.713676 -0.0498575 0.338641
+   vertex 0.816224 0.00239345 0.338641
+  endloop
+ endfacet
+ facet normal 0.309536 -0.607499 0.731527
+  outer loop
+   vertex 0.694901 0.0079245 0.39457
+   vertex 0.816224 0.00239345 0.338641
+   vertex 0.780513 0.0515458 0.39457
+  endloop
+ endfacet
+ facet normal 0.359928 -0.706398 0.609471
+  outer loop
+   vertex 0.713676 -0.0498575 0.338641
+   vertex 0.729349 -0.0980963 0.273474
+   vertex 0.846037 -0.0386409 0.273474
+  endloop
+ endfacet
+ facet normal 0.359928 -0.706398 0.609471
+  outer loop
+   vertex 0.713676 -0.0498575 0.338641
+   vertex 0.846037 -0.0386409 0.273474
+   vertex 0.816224 0.00239345 0.338641
+  endloop
+ endfacet
+ facet normal 0.400384 -0.785798 0.471396
+  outer loop
+   vertex 0.729349 -0.0980963 0.273474
+   vertex 0.741495 -0.135476 0.200848
+   vertex 0.869139 -0.0704381 0.200848
+  endloop
+ endfacet
+ facet normal 0.400384 -0.785798 0.471396
+  outer loop
+   vertex 0.729349 -0.0980963 0.273474
+   vertex 0.869139 -0.0704381 0.200848
+   vertex 0.846037 -0.0386409 0.273474
+  endloop
+ endfacet
+ facet normal 0.429947 -0.843819 0.321116
+  outer loop
+   vertex 0.741495 -0.135476 0.200848
+   vertex 0.749781 -0.160977 0.122743
+   vertex 0.8849 -0.0921306 0.122743
+  endloop
+ endfacet
+ facet normal 0.429947 -0.843818 0.321117
+  outer loop
+   vertex 0.741495 -0.135476 0.200848
+   vertex 0.8849 -0.0921306 0.122743
+   vertex 0.869139 -0.0704381 0.200848
+  endloop
+ endfacet
+ facet normal 0.447947 -0.879146 0.162622
+  outer loop
+   vertex 0.749781 -0.160977 0.122743
+   vertex 0.753981 -0.173904 0.0412897
+   vertex 0.892889 -0.103127 0.0412897
+  endloop
+ endfacet
+ facet normal 0.447947 -0.879146 0.162622
+  outer loop
+   vertex 0.749781 -0.160977 0.122743
+   vertex 0.892889 -0.103127 0.0412897
+   vertex 0.8849 -0.0921306 0.122743
+  endloop
+ endfacet
+ facet normal 0.453991 -0.891007 0
+  outer loop
+   vertex 0.753981 -0.173904 0.0412897
+   vertex 0.753981 -0.173904 -0.0412897
+   vertex 0.892889 -0.103127 -0.0412897
+  endloop
+ endfacet
+ facet normal 0.453991 -0.891007 0
+  outer loop
+   vertex 0.753981 -0.173904 0.0412897
+   vertex 0.892889 -0.103127 -0.0412897
+   vertex 0.892889 -0.103127 0.0412897
+  endloop
+ endfacet
+ facet normal 0.447947 -0.879146 -0.162622
+  outer loop
+   vertex 0.753981 -0.173904 -0.0412897
+   vertex 0.749781 -0.160977 -0.122743
+   vertex 0.8849 -0.0921306 -0.122743
+  endloop
+ endfacet
+ facet normal 0.447947 -0.879146 -0.162622
+  outer loop
+   vertex 0.753981 -0.173904 -0.0412897
+   vertex 0.8849 -0.0921306 -0.122743
+   vertex 0.892889 -0.103127 -0.0412897
+  endloop
+ endfacet
+ facet normal 0.429947 -0.843818 -0.321116
+  outer loop
+   vertex 0.749781 -0.160977 -0.122743
+   vertex 0.741495 -0.135476 -0.200848
+   vertex 0.869139 -0.070438 -0.200848
+  endloop
+ endfacet
+ facet normal 0.429947 -0.843818 -0.321116
+  outer loop
+   vertex 0.749781 -0.160977 -0.122743
+   vertex 0.869139 -0.070438 -0.200848
+   vertex 0.8849 -0.0921306 -0.122743
+  endloop
+ endfacet
+ facet normal 0.400384 -0.785798 -0.471396
+  outer loop
+   vertex 0.741495 -0.135476 -0.200848
+   vertex 0.729349 -0.0980963 -0.273474
+   vertex 0.846037 -0.0386409 -0.273474
+  endloop
+ endfacet
+ facet normal 0.400384 -0.785798 -0.471396
+  outer loop
+   vertex 0.741495 -0.135476 -0.200848
+   vertex 0.846037 -0.0386409 -0.273474
+   vertex 0.869139 -0.070438 -0.200848
+  endloop
+ endfacet
+ facet normal 0.359928 -0.706398 -0.609471
+  outer loop
+   vertex 0.729349 -0.0980963 -0.273474
+   vertex 0.713676 -0.0498575 -0.338641
+   vertex 0.816224 0.00239348 -0.338641
+  endloop
+ endfacet
+ facet normal 0.359928 -0.706398 -0.609471
+  outer loop
+   vertex 0.729349 -0.0980963 -0.273474
+   vertex 0.816224 0.00239348 -0.338641
+   vertex 0.846037 -0.0386409 -0.273474
+  endloop
+ endfacet
+ facet normal 0.309536 -0.607499 -0.731527
+  outer loop
+   vertex 0.713676 -0.0498575 -0.338641
+   vertex 0.694901 0.00792454 -0.39457
+   vertex 0.780513 0.0515458 -0.39457
+  endloop
+ endfacet
+ facet normal 0.309536 -0.607499 -0.731527
+  outer loop
+   vertex 0.713676 -0.0498575 -0.338641
+   vertex 0.780513 0.0515458 -0.39457
+   vertex 0.816224 0.00239348 -0.338641
+  endloop
+ endfacet
+ facet normal 0.250466 -0.491568 -0.834043
+  outer loop
+   vertex 0.694901 0.00792454 -0.39457
+   vertex 0.673538 0.0736736 -0.439737
+   vertex 0.739877 0.107475 -0.439737
+  endloop
+ endfacet
+ facet normal 0.250467 -0.491568 -0.834043
+  outer loop
+   vertex 0.694901 0.00792454 -0.39457
+   vertex 0.739877 0.107475 -0.439737
+   vertex 0.780513 0.0515458 -0.39457
+  endloop
+ endfacet
+ facet normal 0.184267 -0.361643 -0.913925
+  outer loop
+   vertex 0.673538 0.0736736 -0.439737
+   vertex 0.650169 0.145596 -0.472909
+   vertex 0.695427 0.168656 -0.472909
+  endloop
+ endfacet
+ facet normal 0.184266 -0.361643 -0.913926
+  outer loop
+   vertex 0.673538 0.0736736 -0.439737
+   vertex 0.695427 0.168656 -0.472909
+   vertex 0.739877 0.107475 -0.439737
+  endloop
+ endfacet
+ facet normal 0.112752 -0.221288 -0.968668
+  outer loop
+   vertex 0.650169 0.145596 -0.472909
+   vertex 0.625431 0.221731 -0.493181
+   vertex 0.648373 0.23342 -0.493181
+  endloop
+ endfacet
+ facet normal 0.112752 -0.221288 -0.968668
+  outer loop
+   vertex 0.650169 0.145596 -0.472909
+   vertex 0.648373 0.23342 -0.493181
+   vertex 0.695427 0.168656 -0.472909
+  endloop
+ endfacet
+ facet normal 0.175616 -0.175615 0.968668
+  outer loop
+   vertex 0.648373 0.23342 0.493181
+   vertex 0.695427 0.168656 0.472909
+   vertex 0.731344 0.204573 0.472909
+  endloop
+ endfacet
+ facet normal 0.175616 -0.175616 0.968668
+  outer loop
+   vertex 0.648373 0.23342 0.493181
+   vertex 0.731344 0.204573 0.472909
+   vertex 0.66658 0.251627 0.493181
+  endloop
+ endfacet
+ facet normal 0.287002 -0.287002 0.913925
+  outer loop
+   vertex 0.695427 0.168656 0.472909
+   vertex 0.739877 0.107475 0.439737
+   vertex 0.792525 0.160123 0.439737
+  endloop
+ endfacet
+ facet normal 0.287002 -0.287002 0.913926
+  outer loop
+   vertex 0.695427 0.168656 0.472909
+   vertex 0.792525 0.160123 0.439737
+   vertex 0.731344 0.204573 0.472909
+  endloop
+ endfacet
+ facet normal 0.390111 -0.39011 0.834043
+  outer loop
+   vertex 0.739877 0.107475 0.439737
+   vertex 0.780513 0.0515458 0.39457
+   vertex 0.848454 0.119487 0.39457
+  endloop
+ endfacet
+ facet normal 0.390111 -0.390111 0.834043
+  outer loop
+   vertex 0.739877 0.107475 0.439737
+   vertex 0.848454 0.119487 0.39457
+   vertex 0.792525 0.160123 0.439737
+  endloop
+ endfacet
+ facet normal 0.482114 -0.482114 0.731527
+  outer loop
+   vertex 0.780513 0.0515458 0.39457
+   vertex 0.816224 0.00239345 0.338641
+   vertex 0.897607 0.0837762 0.338641
+  endloop
+ endfacet
+ facet normal 0.482114 -0.482114 0.731527
+  outer loop
+   vertex 0.780513 0.0515458 0.39457
+   vertex 0.897607 0.0837762 0.338641
+   vertex 0.848454 0.119487 0.39457
+  endloop
+ endfacet
+ facet normal 0.5606 -0.5606 0.609471
+  outer loop
+   vertex 0.816224 0.00239345 0.338641
+   vertex 0.846037 -0.0386409 0.273474
+   vertex 0.938641 0.053963 0.273474
+  endloop
+ endfacet
+ facet normal 0.5606 -0.5606 0.609471
+  outer loop
+   vertex 0.816224 0.00239345 0.338641
+   vertex 0.938641 0.053963 0.273474
+   vertex 0.897607 0.0837762 0.338641
+  endloop
+ endfacet
+ facet normal 0.623613 -0.623613 0.471396
+  outer loop
+   vertex 0.846037 -0.0386409 0.273474
+   vertex 0.869139 -0.0704381 0.200848
+   vertex 0.970438 0.030861 0.200848
+  endloop
+ endfacet
+ facet normal 0.623613 -0.623613 0.471396
+  outer loop
+   vertex 0.846037 -0.0386409 0.273474
+   vertex 0.970438 0.030861 0.200848
+   vertex 0.938641 0.053963 0.273474
+  endloop
+ endfacet
+ facet normal 0.669658 -0.669658 0.321117
+  outer loop
+   vertex 0.869139 -0.0704381 0.200848
+   vertex 0.8849 -0.0921306 0.122743
+   vertex 0.992131 0.0151005 0.122743
+  endloop
+ endfacet
+ facet normal 0.669658 -0.669658 0.321117
+  outer loop
+   vertex 0.869139 -0.0704381 0.200848
+   vertex 0.992131 0.0151005 0.122743
+   vertex 0.970438 0.030861 0.200848
+  endloop
+ endfacet
+ facet normal 0.697694 -0.697694 0.162622
+  outer loop
+   vertex 0.8849 -0.0921306 0.122743
+   vertex 0.892889 -0.103127 0.0412897
+   vertex 1.00313 0.00711123 0.0412897
+  endloop
+ endfacet
+ facet normal 0.697694 -0.697694 0.162622
+  outer loop
+   vertex 0.8849 -0.0921306 0.122743
+   vertex 1.00313 0.00711123 0.0412897
+   vertex 0.992131 0.0151005 0.122743
+  endloop
+ endfacet
+ facet normal 0.707107 -0.707107 0
+  outer loop
+   vertex 0.892889 -0.103127 0.0412897
+   vertex 0.892889 -0.103127 -0.0412897
+   vertex 1.00313 0.00711123 -0.0412897
+  endloop
+ endfacet
+ facet normal 0.707107 -0.707107 -1.99367e-08
+  outer loop
+   vertex 0.892889 -0.103127 0.0412897
+   vertex 1.00313 0.00711123 -0.0412897
+   vertex 1.00313 0.00711123 0.0412897
+  endloop
+ endfacet
+ facet normal 0.697694 -0.697694 -0.162623
+  outer loop
+   vertex 0.892889 -0.103127 -0.0412897
+   vertex 0.8849 -0.0921306 -0.122743
+   vertex 0.992131 0.0151005 -0.122743
+  endloop
+ endfacet
+ facet normal 0.697694 -0.697694 -0.162622
+  outer loop
+   vertex 0.892889 -0.103127 -0.0412897
+   vertex 0.992131 0.0151005 -0.122743
+   vertex 1.00313 0.00711123 -0.0412897
+  endloop
+ endfacet
+ facet normal 0.669658 -0.669658 -0.321116
+  outer loop
+   vertex 0.8849 -0.0921306 -0.122743
+   vertex 0.869139 -0.070438 -0.200848
+   vertex 0.970438 0.030861 -0.200848
+  endloop
+ endfacet
+ facet normal 0.669658 -0.669658 -0.321117
+  outer loop
+   vertex 0.8849 -0.0921306 -0.122743
+   vertex 0.970438 0.030861 -0.200848
+   vertex 0.992131 0.0151005 -0.122743
+  endloop
+ endfacet
+ facet normal 0.623613 -0.623613 -0.471396
+  outer loop
+   vertex 0.869139 -0.070438 -0.200848
+   vertex 0.846037 -0.0386409 -0.273474
+   vertex 0.938641 0.053963 -0.273474
+  endloop
+ endfacet
+ facet normal 0.623613 -0.623613 -0.471396
+  outer loop
+   vertex 0.869139 -0.070438 -0.200848
+   vertex 0.938641 0.053963 -0.273474
+   vertex 0.970438 0.030861 -0.200848
+  endloop
+ endfacet
+ facet normal 0.5606 -0.5606 -0.609471
+  outer loop
+   vertex 0.846037 -0.0386409 -0.273474
+   vertex 0.816224 0.00239348 -0.338641
+   vertex 0.897607 0.0837762 -0.338641
+  endloop
+ endfacet
+ facet normal 0.560601 -0.5606 -0.60947
+  outer loop
+   vertex 0.846037 -0.0386409 -0.273474
+   vertex 0.897607 0.0837762 -0.338641
+   vertex 0.938641 0.053963 -0.273474
+  endloop
+ endfacet
+ facet normal 0.482114 -0.482114 -0.731527
+  outer loop
+   vertex 0.816224 0.00239348 -0.338641
+   vertex 0.780513 0.0515458 -0.39457
+   vertex 0.848454 0.119487 -0.39457
+  endloop
+ endfacet
+ facet normal 0.482114 -0.482114 -0.731527
+  outer loop
+   vertex 0.816224 0.00239348 -0.338641
+   vertex 0.848454 0.119487 -0.39457
+   vertex 0.897607 0.0837762 -0.338641
+  endloop
+ endfacet
+ facet normal 0.390111 -0.390111 -0.834043
+  outer loop
+   vertex 0.780513 0.0515458 -0.39457
+   vertex 0.739877 0.107475 -0.439737
+   vertex 0.792525 0.160123 -0.439737
+  endloop
+ endfacet
+ facet normal 0.390111 -0.390111 -0.834043
+  outer loop
+   vertex 0.780513 0.0515458 -0.39457
+   vertex 0.792525 0.160123 -0.439737
+   vertex 0.848454 0.119487 -0.39457
+  endloop
+ endfacet
+ facet normal 0.287002 -0.287002 -0.913926
+  outer loop
+   vertex 0.739877 0.107475 -0.439737
+   vertex 0.695427 0.168656 -0.472909
+   vertex 0.731344 0.204573 -0.472909
+  endloop
+ endfacet
+ facet normal 0.287002 -0.287002 -0.913926
+  outer loop
+   vertex 0.739877 0.107475 -0.439737
+   vertex 0.731344 0.204573 -0.472909
+   vertex 0.792525 0.160123 -0.439737
+  endloop
+ endfacet
+ facet normal 0.175615 -0.175615 -0.968668
+  outer loop
+   vertex 0.695427 0.168656 -0.472909
+   vertex 0.648373 0.23342 -0.493181
+   vertex 0.66658 0.251627 -0.493181
+  endloop
+ endfacet
+ facet normal 0.175615 -0.175615 -0.968668
+  outer loop
+   vertex 0.695427 0.168656 -0.472909
+   vertex 0.66658 0.251627 -0.493181
+   vertex 0.731344 0.204573 -0.472909
+  endloop
+ endfacet
+ facet normal 0.221289 -0.112752 0.968668
+  outer loop
+   vertex 0.66658 0.251627 0.493181
+   vertex 0.731344 0.204573 0.472909
+   vertex 0.754404 0.249831 0.472909
+  endloop
+ endfacet
+ facet normal 0.221289 -0.112752 0.968668
+  outer loop
+   vertex 0.66658 0.251627 0.493181
+   vertex 0.754404 0.249831 0.472909
+   vertex 0.678269 0.274569 0.493181
+  endloop
+ endfacet
+ facet normal 0.361643 -0.184266 0.913926
+  outer loop
+   vertex 0.731344 0.204573 0.472909
+   vertex 0.792525 0.160123 0.439737
+   vertex 0.826326 0.226462 0.439737
+  endloop
+ endfacet
+ facet normal 0.361643 -0.184267 0.913925
+  outer loop
+   vertex 0.731344 0.204573 0.472909
+   vertex 0.826326 0.226462 0.439737
+   vertex 0.754404 0.249831 0.472909
+  endloop
+ endfacet
+ facet normal 0.491568 -0.250466 0.834043
+  outer loop
+   vertex 0.792525 0.160123 0.439737
+   vertex 0.848454 0.119487 0.39457
+   vertex 0.892076 0.205099 0.39457
+  endloop
+ endfacet
+ facet normal 0.491568 -0.250466 0.834043
+  outer loop
+   vertex 0.792525 0.160123 0.439737
+   vertex 0.892076 0.205099 0.39457
+   vertex 0.826326 0.226462 0.439737
+  endloop
+ endfacet
+ facet normal 0.607499 -0.309536 0.731527
+  outer loop
+   vertex 0.848454 0.119487 0.39457
+   vertex 0.897607 0.0837762 0.338641
+   vertex 0.949858 0.186324 0.338641
+  endloop
+ endfacet
+ facet normal 0.607499 -0.309536 0.731527
+  outer loop
+   vertex 0.848454 0.119487 0.39457
+   vertex 0.949858 0.186324 0.338641
+   vertex 0.892076 0.205099 0.39457
+  endloop
+ endfacet
+ facet normal 0.706398 -0.359927 0.609471
+  outer loop
+   vertex 0.897607 0.0837762 0.338641
+   vertex 0.938641 0.053963 0.273474
+   vertex 0.998096 0.170651 0.273474
+  endloop
+ endfacet
+ facet normal 0.706398 -0.359927 0.609471
+  outer loop
+   vertex 0.897607 0.0837762 0.338641
+   vertex 0.998096 0.170651 0.273474
+   vertex 0.949858 0.186324 0.338641
+  endloop
+ endfacet
+ facet normal 0.785798 -0.400384 0.471396
+  outer loop
+   vertex 0.938641 0.053963 0.273474
+   vertex 0.970438 0.030861 0.200848
+   vertex 1.03548 0.158505 0.200848
+  endloop
+ endfacet
+ facet normal 0.785798 -0.400384 0.471396
+  outer loop
+   vertex 0.938641 0.053963 0.273474
+   vertex 1.03548 0.158505 0.200848
+   vertex 0.998096 0.170651 0.273474
+  endloop
+ endfacet
+ facet normal 0.843819 -0.429947 0.321117
+  outer loop
+   vertex 0.970438 0.030861 0.200848
+   vertex 0.992131 0.0151005 0.122743
+   vertex 1.06098 0.15022 0.122743
+  endloop
+ endfacet
+ facet normal 0.843819 -0.429947 0.321116
+  outer loop
+   vertex 0.970438 0.030861 0.200848
+   vertex 1.06098 0.15022 0.122743
+   vertex 1.03548 0.158505 0.200848
+  endloop
+ endfacet
+ facet normal 0.879146 -0.447947 0.162622
+  outer loop
+   vertex 0.992131 0.0151005 0.122743
+   vertex 1.00313 0.00711123 0.0412897
+   vertex 1.0739 0.146019 0.0412897
+  endloop
+ endfacet
+ facet normal 0.879146 -0.447947 0.162623
+  outer loop
+   vertex 0.992131 0.0151005 0.122743
+   vertex 1.0739 0.146019 0.0412897
+   vertex 1.06098 0.15022 0.122743
+  endloop
+ endfacet
+ facet normal 0.891007 -0.45399 -1.28002e-08
+  outer loop
+   vertex 1.00313 0.00711123 0.0412897
+   vertex 1.00313 0.00711123 -0.0412897
+   vertex 1.0739 0.146019 -0.0412897
+  endloop
+ endfacet
+ facet normal 0.891007 -0.45399 0
+  outer loop
+   vertex 1.00313 0.00711123 0.0412897
+   vertex 1.0739 0.146019 -0.0412897
+   vertex 1.0739 0.146019 0.0412897
+  endloop
+ endfacet
+ facet normal 0.879146 -0.447947 -0.162622
+  outer loop
+   vertex 1.00313 0.00711123 -0.0412897
+   vertex 0.992131 0.0151005 -0.122743
+   vertex 1.06098 0.15022 -0.122743
+  endloop
+ endfacet
+ facet normal 0.879146 -0.447947 -0.162623
+  outer loop
+   vertex 1.00313 0.00711123 -0.0412897
+   vertex 1.06098 0.15022 -0.122743
+   vertex 1.0739 0.146019 -0.0412897
+  endloop
+ endfacet
+ facet normal 0.843819 -0.429947 -0.321117
+  outer loop
+   vertex 0.992131 0.0151005 -0.122743
+   vertex 0.970438 0.030861 -0.200848
+   vertex 1.03548 0.158505 -0.200848
+  endloop
+ endfacet
+ facet normal 0.843819 -0.429947 -0.321116
+  outer loop
+   vertex 0.992131 0.0151005 -0.122743
+   vertex 1.03548 0.158505 -0.200848
+   vertex 1.06098 0.15022 -0.122743
+  endloop
+ endfacet
+ facet normal 0.785798 -0.400384 -0.471396
+  outer loop
+   vertex 0.970438 0.030861 -0.200848
+   vertex 0.938641 0.053963 -0.273474
+   vertex 0.998096 0.170651 -0.273474
+  endloop
+ endfacet
+ facet normal 0.785798 -0.400384 -0.471396
+  outer loop
+   vertex 0.970438 0.030861 -0.200848
+   vertex 0.998096 0.170651 -0.273474
+   vertex 1.03548 0.158505 -0.200848
+  endloop
+ endfacet
+ facet normal 0.706398 -0.359928 -0.60947
+  outer loop
+   vertex 0.938641 0.053963 -0.273474
+   vertex 0.897607 0.0837762 -0.338641
+   vertex 0.949858 0.186324 -0.338641
+  endloop
+ endfacet
+ facet normal 0.706398 -0.359928 -0.609471
+  outer loop
+   vertex 0.938641 0.053963 -0.273474
+   vertex 0.949858 0.186324 -0.338641
+   vertex 0.998096 0.170651 -0.273474
+  endloop
+ endfacet
+ facet normal 0.607499 -0.309536 -0.731527
+  outer loop
+   vertex 0.897607 0.0837762 -0.338641
+   vertex 0.848454 0.119487 -0.39457
+   vertex 0.892075 0.205099 -0.39457
+  endloop
+ endfacet
+ facet normal 0.607499 -0.309536 -0.731527
+  outer loop
+   vertex 0.897607 0.0837762 -0.338641
+   vertex 0.892075 0.205099 -0.39457
+   vertex 0.949858 0.186324 -0.338641
+  endloop
+ endfacet
+ facet normal 0.491568 -0.250466 -0.834043
+  outer loop
+   vertex 0.848454 0.119487 -0.39457
+   vertex 0.792525 0.160123 -0.439737
+   vertex 0.826326 0.226462 -0.439737
+  endloop
+ endfacet
+ facet normal 0.491568 -0.250466 -0.834043
+  outer loop
+   vertex 0.848454 0.119487 -0.39457
+   vertex 0.826326 0.226462 -0.439737
+   vertex 0.892075 0.205099 -0.39457
+  endloop
+ endfacet
+ facet normal 0.361643 -0.184267 -0.913926
+  outer loop
+   vertex 0.792525 0.160123 -0.439737
+   vertex 0.731344 0.204573 -0.472909
+   vertex 0.754404 0.249831 -0.472909
+  endloop
+ endfacet
+ facet normal 0.361643 -0.184267 -0.913926
+  outer loop
+   vertex 0.792525 0.160123 -0.439737
+   vertex 0.754404 0.249831 -0.472909
+   vertex 0.826326 0.226462 -0.439737
+  endloop
+ endfacet
+ facet normal 0.221288 -0.112752 -0.968668
+  outer loop
+   vertex 0.731344 0.204573 -0.472909
+   vertex 0.66658 0.251627 -0.493181
+   vertex 0.678269 0.274569 -0.493181
+  endloop
+ endfacet
+ facet normal 0.221288 -0.112752 -0.968668
+  outer loop
+   vertex 0.731344 0.204573 -0.472909
+   vertex 0.678269 0.274569 -0.493181
+   vertex 0.754404 0.249831 -0.472909
+  endloop
+ endfacet
+ facet normal 0.2453 -0.0388517 0.968668
+  outer loop
+   vertex 0.678269 0.274569 0.493181
+   vertex 0.754404 0.249831 0.472909
+   vertex 0.76235 0.3 0.472909
+  endloop
+ endfacet
+ facet normal 0.2453 -0.0388516 0.968668
+  outer loop
+   vertex 0.678269 0.274569 0.493181
+   vertex 0.76235 0.3 0.472909
+   vertex 0.682297 0.3 0.493181
+  endloop
+ endfacet
+ facet normal 0.400885 -0.0634941 0.913926
+  outer loop
+   vertex 0.754404 0.249831 0.472909
+   vertex 0.826326 0.226462 0.439737
+   vertex 0.837974 0.3 0.439737
+  endloop
+ endfacet
+ facet normal 0.400885 -0.0634939 0.913926
+  outer loop
+   vertex 0.754404 0.249831 0.472909
+   vertex 0.837974 0.3 0.439737
+   vertex 0.76235 0.3 0.472909
+  endloop
+ endfacet
+ facet normal 0.544907 -0.0863045 0.834043
+  outer loop
+   vertex 0.826326 0.226462 0.439737
+   vertex 0.892076 0.205099 0.39457
+   vertex 0.907106 0.3 0.39457
+  endloop
+ endfacet
+ facet normal 0.544907 -0.0863051 0.834043
+  outer loop
+   vertex 0.826326 0.226462 0.439737
+   vertex 0.907106 0.3 0.39457
+   vertex 0.837974 0.3 0.439737
+  endloop
+ endfacet
+ facet normal 0.673418 -0.106659 0.731527
+  outer loop
+   vertex 0.892076 0.205099 0.39457
+   vertex 0.949858 0.186324 0.338641
+   vertex 0.967862 0.3 0.338641
+  endloop
+ endfacet
+ facet normal 0.673418 -0.106659 0.731527
+  outer loop
+   vertex 0.892076 0.205099 0.39457
+   vertex 0.967862 0.3 0.338641
+   vertex 0.907106 0.3 0.39457
+  endloop
+ endfacet
+ facet normal 0.783048 -0.124023 0.609471
+  outer loop
+   vertex 0.949858 0.186324 0.338641
+   vertex 0.998096 0.170651 0.273474
+   vertex 1.01858 0.3 0.273474
+  endloop
+ endfacet
+ facet normal 0.783048 -0.124022 0.609471
+  outer loop
+   vertex 0.949858 0.186324 0.338641
+   vertex 1.01858 0.3 0.273474
+   vertex 0.967862 0.3 0.338641
+  endloop
+ endfacet
+ facet normal 0.871064 -0.137963 0.471396
+  outer loop
+   vertex 0.998096 0.170651 0.273474
+   vertex 1.03548 0.158505 0.200848
+   vertex 1.05789 0.3 0.200848
+  endloop
+ endfacet
+ facet normal 0.871064 -0.137963 0.471396
+  outer loop
+   vertex 0.998096 0.170651 0.273474
+   vertex 1.05789 0.3 0.200848
+   vertex 1.01858 0.3 0.273474
+  endloop
+ endfacet
+ facet normal 0.93538 -0.14815 0.321116
+  outer loop
+   vertex 1.03548 0.158505 0.200848
+   vertex 1.06098 0.15022 0.122743
+   vertex 1.0847 0.3 0.122743
+  endloop
+ endfacet
+ facet normal 0.93538 -0.14815 0.321115
+  outer loop
+   vertex 1.03548 0.158505 0.200848
+   vertex 1.0847 0.3 0.122743
+   vertex 1.05789 0.3 0.200848
+  endloop
+ endfacet
+ facet normal 0.974541 -0.154352 0.162623
+  outer loop
+   vertex 1.06098 0.15022 0.122743
+   vertex 1.0739 0.146019 0.0412897
+   vertex 1.09829 0.3 0.0412897
+  endloop
+ endfacet
+ facet normal 0.974541 -0.154352 0.162622
+  outer loop
+   vertex 1.06098 0.15022 0.122743
+   vertex 1.09829 0.3 0.0412897
+   vertex 1.0847 0.3 0.122743
+  endloop
+ endfacet
+ facet normal 0.987688 -0.156434 0
+  outer loop
+   vertex 1.0739 0.146019 0.0412897
+   vertex 1.0739 0.146019 -0.0412897
+   vertex 1.09829 0.3 -0.0412897
+  endloop
+ endfacet
+ facet normal 0.987688 -0.156434 0
+  outer loop
+   vertex 1.0739 0.146019 0.0412897
+   vertex 1.09829 0.3 -0.0412897
+   vertex 1.09829 0.3 0.0412897
+  endloop
+ endfacet
+ facet normal 0.974541 -0.154352 -0.162623
+  outer loop
+   vertex 1.0739 0.146019 -0.0412897
+   vertex 1.06098 0.15022 -0.122743
+   vertex 1.0847 0.3 -0.122743
+  endloop
+ endfacet
+ facet normal 0.974541 -0.154352 -0.162622
+  outer loop
+   vertex 1.0739 0.146019 -0.0412897
+   vertex 1.0847 0.3 -0.122743
+   vertex 1.09829 0.3 -0.0412897
+  endloop
+ endfacet
+ facet normal 0.93538 -0.148149 -0.321116
+  outer loop
+   vertex 1.06098 0.15022 -0.122743
+   vertex 1.03548 0.158505 -0.200848
+   vertex 1.05789 0.3 -0.200848
+  endloop
+ endfacet
+ facet normal 0.93538 -0.14815 -0.321117
+  outer loop
+   vertex 1.06098 0.15022 -0.122743
+   vertex 1.05789 0.3 -0.200848
+   vertex 1.0847 0.3 -0.122743
+  endloop
+ endfacet
+ facet normal 0.871064 -0.137962 -0.471396
+  outer loop
+   vertex 1.03548 0.158505 -0.200848
+   vertex 0.998096 0.170651 -0.273474
+   vertex 1.01858 0.3 -0.273474
+  endloop
+ endfacet
+ facet normal 0.871064 -0.137963 -0.471396
+  outer loop
+   vertex 1.03548 0.158505 -0.200848
+   vertex 1.01858 0.3 -0.273474
+   vertex 1.05789 0.3 -0.200848
+  endloop
+ endfacet
+ facet normal 0.783048 -0.124022 -0.609471
+  outer loop
+   vertex 0.998096 0.170651 -0.273474
+   vertex 0.949858 0.186324 -0.338641
+   vertex 0.967862 0.3 -0.338641
+  endloop
+ endfacet
+ facet normal 0.783048 -0.124022 -0.60947
+  outer loop
+   vertex 0.998096 0.170651 -0.273474
+   vertex 0.967862 0.3 -0.338641
+   vertex 1.01858 0.3 -0.273474
+  endloop
+ endfacet
+ facet normal 0.673418 -0.106659 -0.731527
+  outer loop
+   vertex 0.949858 0.186324 -0.338641
+   vertex 0.892075 0.205099 -0.39457
+   vertex 0.907106 0.3 -0.39457
+  endloop
+ endfacet
+ facet normal 0.673418 -0.106659 -0.731527
+  outer loop
+   vertex 0.949858 0.186324 -0.338641
+   vertex 0.907106 0.3 -0.39457
+   vertex 0.967862 0.3 -0.338641
+  endloop
+ endfacet
+ facet normal 0.544908 -0.0863047 -0.834043
+  outer loop
+   vertex 0.892075 0.205099 -0.39457
+   vertex 0.826326 0.226462 -0.439737
+   vertex 0.837974 0.3 -0.439737
+  endloop
+ endfacet
+ facet normal 0.544907 -0.0863049 -0.834043
+  outer loop
+   vertex 0.892075 0.205099 -0.39457
+   vertex 0.837974 0.3 -0.439737
+   vertex 0.907106 0.3 -0.39457
+  endloop
+ endfacet
+ facet normal 0.400885 -0.0634939 -0.913926
+  outer loop
+   vertex 0.826326 0.226462 -0.439737
+   vertex 0.754404 0.249831 -0.472909
+   vertex 0.76235 0.3 -0.472909
+  endloop
+ endfacet
+ facet normal 0.400885 -0.0634938 -0.913925
+  outer loop
+   vertex 0.826326 0.226462 -0.439737
+   vertex 0.76235 0.3 -0.472909
+   vertex 0.837974 0.3 -0.439737
+  endloop
+ endfacet
+ facet normal 0.2453 -0.0388516 -0.968668
+  outer loop
+   vertex 0.754404 0.249831 -0.472909
+   vertex 0.678269 0.274569 -0.493181
+   vertex 0.682297 0.3 -0.493181
+  endloop
+ endfacet
+ facet normal 0.2453 -0.0388517 -0.968668
+  outer loop
+   vertex 0.754404 0.249831 -0.472909
+   vertex 0.682297 0.3 -0.493181
+   vertex 0.76235 0.3 -0.472909
+  endloop
+ endfacet
+endsolid
diff --git a/tutorials/mesh/cvMesh/simpleShapes/system/collapseDict b/tutorials/mesh/cvMesh/simpleShapes/system/collapseDict
new file mode 100644
index 0000000000000000000000000000000000000000..9034677ca9c28252bd5ecf19eb24095c33c763c9
--- /dev/null
+++ b/tutorials/mesh/cvMesh/simpleShapes/system/collapseDict
@@ -0,0 +1,52 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+
+FoamFile
+{
+    version         2.0;
+    format          ascii;
+
+    root            "";
+    case            "";
+    instance        "";
+    local           "";
+
+    class           dictionary;
+    object          collapseDict;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+collapseEdgesCoeffs
+{
+    minimumEdgeLength   1e-6;
+    maximumMergeAngle   180;
+    reductionFactor     0.5;
+}
+
+collapseFacesCoeffs
+{
+    initialFaceLengthFactor                 0.5;
+    reductionFactor                         0.5;
+
+    allowEarlyCollapseToPoint               on;
+    allowEarlyCollapseCoeff                 0.2;
+    guardFraction                           0.1;
+    maxCollapseFaceToPointSideLengthCoeff   0.3;
+}
+
+meshQualityCoeffs
+{
+    #include                    "meshQualityDict";
+    maximumIterations           30;
+    maximumSmoothingIterations  1;
+    maxPointErrorCount          5;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/simpleShapes/system/controlDict b/tutorials/mesh/cvMesh/simpleShapes/system/controlDict
new file mode 100644
index 0000000000000000000000000000000000000000..8bbced6c67a446eef989729934ebaa162998c034
--- /dev/null
+++ b/tutorials/mesh/cvMesh/simpleShapes/system/controlDict
@@ -0,0 +1,54 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+
+FoamFile
+{
+    version         2.0;
+    format          ascii;
+
+    root            "";
+    case            "";
+    instance        "";
+    local           "";
+
+    class           dictionary;
+    object          controlDict;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+startFrom       latestTime;
+
+startTime       0;
+
+stopAt          endTime;
+
+endTime         80;
+
+deltaT          1;
+
+writeControl    timeStep;
+
+writeInterval   80;   // 10 to see the meshing steps
+
+purgeWrite      0;
+
+writeFormat     ascii;
+
+writePrecision  10;
+
+writeCompression uncompressed;
+
+timeFormat      general;
+
+timePrecision   6;
+
+runTimeModifiable yes;
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/simpleShapes/system/cvMeshDict b/tutorials/mesh/cvMesh/simpleShapes/system/cvMeshDict
new file mode 100644
index 0000000000000000000000000000000000000000..99379e62c9399731eb8f9949bfcf84f4daf669cc
--- /dev/null
+++ b/tutorials/mesh/cvMesh/simpleShapes/system/cvMeshDict
@@ -0,0 +1,371 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+
+FoamFile
+{
+    version         2.0;
+    format          ascii;
+    class           dictionary;
+    object          cvMeshDict;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+
+/*
+
+Control dictionary for cvMesh - polyhedral mesh generator.
+
+cvMesh phases:
+1. fill volume with initial points (initialPoints subdictionary). An option
+   is to reread from previous set of points.
+
+2. internal point motion (motionControl subdictionary)
+
+3. every once in a while add point duplets/triplets to conform to
+   surfaces and features (surfaceConformation subdictionary)
+
+4. back to 2
+
+5. construct polyMesh.
+    - filter (polyMeshFiltering subdictionary)
+    - check (meshQualityControls subdictionary) and undo filtering
+
+
+See also cvControls.H in the conformalVoronoiMesh library
+
+*/
+
+
+// Important:
+// ----------
+// Any scalar with a name <name>Coeff specifies a value that will be implemented
+// as a faction of the local target cell size
+// Any scalar with a name <name>Size specifies an absolute size.
+
+
+// Geometry. Definition of all surfaces. All surfaces are of class
+// searchableSurface.
+// Surfaces need to be (almost) closed - use closedTriSurfaceMesh
+// if they are not topologically closed. Surfaces need to be oriented so
+// the space to be meshed is always on the inside of all surfaces. Use e.g.
+// surfaceOrient.
+geometry
+{
+    // Internal shape
+    coneAndSphere_clean_orient.obj
+    {
+        name coneAndSphere;
+        type triSurfaceMesh;
+    }
+
+    // Outside of domain
+    domain_clean_orient.stl
+    {
+        name domain;
+        type triSurfaceMesh;
+    }
+
+}
+
+
+// Controls for conforming to the surfaces.
+surfaceConformation
+{
+    // A point inside surfaces that is inside mesh.
+    locationInMesh (0 -0.5 0);
+
+    // How far apart are point-duplets generated. Balance this between
+    // - very low distance: little chance of interference from other
+    //   surfaces
+    // - largish distance: less non-orthogonality in final cell
+    //   (circumcentre far away from centroid)
+    pointPairDistanceCoeff      0.1;
+
+    // Mixed feature edges - both inside and outside edges. Recreated
+    // by inserting triplets of points to recreate a single edge. Done for
+    // all edges emanating from point. triplets of points get inserted
+    // mixedFeaturePointPPDistanceCoeff distance away from feature point.
+    mixedFeaturePointPPDistanceCoeff    5.0;
+
+    // Distance to a feature point within which surface and edge
+    // conformation points are excluded - fraction of the local target
+    // cell size
+    featurePointExclusionDistanceCoeff  0.6;
+
+    // Distance to an existing feature edge conformation location
+    // within which other edge conformation location are excluded -
+    // fraction of the local target cell size
+    featureEdgeExclusionDistanceCoeff   0.6;
+
+    // Optimisation: do not check for surface intersection (of dual edges)
+    // for points near to surface.
+    surfaceSearchDistanceCoeff  2.5;
+
+    // Maximum allowable protrusion through the surface before
+    // conformation points are added - fraction of the local target
+    // cell size. These small protusions are (hopefully) done by mesh filtering
+    // instead.
+    maxSurfaceProtrusionCoeff   0.1;
+
+    // If feature edge with large angle (so more than 125 degrees) introduce
+    // additional points to create two half angled cells (= mitering).
+    maxQuadAngle 125;
+
+    // Frequency to redo surface conformation (expensive).
+    surfaceConformationRebuildFrequency 10;
+
+    // Specialised feature point handling
+    specialiseFeaturePoints on;
+
+    // Initial and intermediate controls
+    conformationControls
+    {
+        // We've got a point poking through the surface. Don't do any
+        // surface conformation if near feature edge (since feature edge
+        // conformation should have priority)
+
+        // distance to search for near feature edges
+        edgeSearchDistCoeff         2;
+
+        // Proximity to a feature edge where a surface hit is
+        //  not created, only the edge conformation is created
+        // - fraction of the local target cell size. Coarse
+        // conformation, initial protrusion tests.
+        surfacePtReplaceDistCoeff   0.5;
+
+
+        surfacePtExclusionDistanceCoeff 0.5;
+
+        // Stop either at maxIterations or if the number of surface pokes
+        // is very small (iterationToInitialHitRatioLimit * initial number)
+        // Note: perhaps iterationToInitialHitRatioLimit should be absolute
+        // count?
+        maxIterations 15;
+
+        iterationToInitialHitRatioLimit 0.001;
+    }
+
+    // Geometry to mesh to
+    geometryToConformTo
+    {
+        coneAndSphere
+        {
+            featureMethod extendedFeatureEdgeMesh;
+            extendedFeatureEdgeMesh "coneAndSphere_clean_orient.extendedFeatureEdgeMesh";
+        }
+
+        domain
+        {
+            featureMethod extendedFeatureEdgeMesh;
+            extendedFeatureEdgeMesh "domain_clean_orient.extendedFeatureEdgeMesh";
+        }
+    }
+
+    additionalFeatures {}
+}
+
+
+// Controls for seeding initial points and general control of the target
+// cell size (used everywhere)
+initialPoints
+{
+    // Do not place point closer than minimumSurfaceDistanceCoeff
+    // to the surface. Is fraction of local target cell size (see below)
+    minimumSurfaceDistanceCoeff 0.55;
+
+    initialPointsMethod             autoDensity;
+    // initialPointsMethod          uniformGrid;
+    // initialPointsMethod          bodyCentredCubic;
+    // initialPointsMethod          pointFile;
+
+    // Take boundbox of all geometry. Samples with this box. If too much
+    // samples (due to target cell size) in box split box.
+    autoDensityCoeffs
+    {
+        minCellSizeLimit 0.1;
+        // Initial number of refinement levels. Needs to be enough to pick
+        // up features due to size ratio. If not enough it will take longer
+        // to determine point seeding.
+        minLevels 4;
+        // Split box if ratio of min to max cell size larger than maxSizeRatio
+        maxSizeRatio 5.0;
+        // Per box sample 3x3x3 internally
+        sampleResolution 3;
+        // Additionally per face of the box sample 3
+        surfaceSampleResolution 3;
+    }
+
+    uniformGridCoeffs
+    {
+        // Absolute cell size.
+        initialCellSize         0.0015;
+        randomiseInitialGrid    yes;
+        randomPerturbationCoeff 0.02;
+    }
+
+    bodyCentredCubicCoeffs
+    {
+        initialCellSize         0.0015;
+        randomiseInitialGrid    no;
+        randomPerturbationCoeff 0.1;
+    }
+
+    pointFileCoeffs
+    {
+        // Reads points from file. Still rejects points that are too
+        // close to the surface (minimumSurfaceDistanceCoeff) or on the
+        // wrong side of the surfaces.
+        pointFile              "constant/internalDelaunayVertices";
+    }
+}
+
+
+// Control size of voronoi cells i.e. distance between points. This
+// determines the target cell size which is used everywhere.
+// It determines the cell size given a location. It then uses all
+// the rules
+// - defaultCellSize
+// - cellSizeControlGeometry
+// to determine target cell size. Rule with highest priority wins. If same
+// priority smallest cell size wins.
+motionControl
+{
+    // Absolute cell size of back ground mesh. This is the maximum cell size.
+    defaultCellSize     0.1;
+
+    shapeControlFunctions
+    {
+        coneAndSphere
+        {
+            type                searchableSurfaceControl;
+            priority            1;
+            mode                bothSides;
+
+            surfaceCellSizeFunction uniformValue;
+            uniformValueCoeffs
+            {
+                surfaceCellSize 0.075;
+            }
+
+            cellSizeFunction        uniform;
+            uniformCoeffs
+            {}
+        }
+
+        domain
+        {
+            type                searchableSurfaceControl;
+            priority            1;
+            mode                bothSides;
+
+            surfaceCellSizeFunction uniformValue;
+            uniformValueCoeffs
+            {
+                surfaceCellSize $defaultCellSize;
+            }
+
+            cellSizeFunction        uniform;
+            uniformCoeffs
+            {}
+        }
+    }
+
+    cellAspectRatioControl
+    {
+        aspectRatio                 1.0;
+        aspectRatioDirection        (0 0 0);
+    }
+
+    // Underrelaxation for point motion. Simulated annealing: starts off at 1
+    // and lowers to 0 (at simulation endTime) to converge points.
+    // adaptiveLinear is preferred choice.
+    // Points move by e.g. 10% of tet size.
+    relaxationModel     adaptiveLinear; //rampHoldFall
+
+    adaptiveLinearCoeffs
+    {
+        relaxationStart 1.0;
+        relaxationEnd   0.0;
+    }
+
+    // Output lots and lots of .obj files
+    objOutput                   no;
+
+    // Timing and memory usage.
+    timeChecks                  no;
+
+    // Number of rays in plane parallel to nearest surface. Used to detect
+    // next closest surfaces. Used to work out alignment (three vectors)
+    // to surface.
+    // Note that only the initial points (from the seeding) calculate this
+    // information so if these are not fine enough the alignment will
+    // not be correct. (any points added during the running will lookup
+    // this information from the nearest initial point since it is
+    // expensive)
+    alignmentSearchSpokes       36;
+
+    // For each delaunay edge (between two vertices, becomes
+    // the Voronoi face normal) snap to the alignment direction if within
+    // alignmentAcceptanceAngle. Slightly > 45 is a good choice - prevents
+    // flipping.
+    alignmentAcceptanceAngle    48;
+
+    // How often to rebuild the alignment info (expensive)
+    sizeAndAlignmentRebuildFrequency 20;
+
+    // When to insert points. Not advisable change to
+    // these settings.
+    pointInsertionCriteria
+    {
+        // If edge larger than 1.75 target cell size
+        // (so tets too large/stretched) insert point
+        cellCentreDistCoeff     1.75;
+        // Do not insert point if voronoi face (on edge) very small.
+        faceAreaRatioCoeff      0.0025;
+        // Insert point only if edge closely aligned to local alignment
+        // direction.
+        acceptanceAngle         21.5;
+    }
+
+    // Opposite: remove point if mesh too compressed. Do not change these
+    // settings.
+    pointRemovalCriteria
+    {
+        cellCentreDistCoeff  0.65;
+    }
+
+    // How to determine the point motion. All edges got some direction.
+    // Sum all edge contributions to determine point motion. Weigh by
+    // face area so motion is preferentially determined by large faces
+    // (or more importantly ignore contribution from small faces).
+    // Do not change these settings.
+    faceAreaWeightModel piecewiseLinearRamp;
+
+    piecewiseLinearRampCoeffs
+    {
+        lowerAreaFraction       0.5;
+        upperAreaFraction       1.0;
+    }
+}
+
+
+// After simulation, when converting to polyMesh, filter out small faces/edges.
+// Do not change. See cvControls.H
+polyMeshFiltering
+{
+    filterEdges                 on;
+    filterFaces                 on;
+    writeTetDualMesh            false;
+}
+
+
+#include "meshQualityDict";
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/simpleShapes/system/fvSchemes b/tutorials/mesh/cvMesh/simpleShapes/system/fvSchemes
new file mode 100644
index 0000000000000000000000000000000000000000..d8d476c57fee0824977fcf92dc4d484653bd003b
--- /dev/null
+++ b/tutorials/mesh/cvMesh/simpleShapes/system/fvSchemes
@@ -0,0 +1,55 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      fvSchemes;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+d2dt2Schemes
+{
+    default         steadyState;
+}
+
+gradSchemes
+{
+    default         Gauss cubic;
+}
+
+divSchemes
+{
+    default         Gauss cubic;
+}
+
+laplacianSchemes
+{
+    default         Gauss linear uncorrected;
+}
+
+interpolationSchemes
+{
+    default         cubic;
+}
+
+snGradSchemes
+{
+    default         uncorrected;
+}
+
+fluxRequired
+{
+    default         no;
+    D               ;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/simpleShapes/system/fvSolution b/tutorials/mesh/cvMesh/simpleShapes/system/fvSolution
new file mode 100644
index 0000000000000000000000000000000000000000..8dabfdac0a8192e197f0550d41b1691f1c3b68e6
--- /dev/null
+++ b/tutorials/mesh/cvMesh/simpleShapes/system/fvSolution
@@ -0,0 +1,41 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      fvSolution;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+solvers
+{
+    "(D|Dcorr)"
+    {
+        solver          GAMG;
+        tolerance       1e-06;
+        relTol          0.99;
+        smoother        GaussSeidel;
+        cacheAgglomeration  true;
+        nCellsInCoarsestLevel 6;
+        agglomerator    faceAreaPair;
+        mergeLevels     1;
+    }
+}
+
+stressAnalysis
+{
+    nCorrectors     1;
+    D               1e-10;
+    accelerationFactor 2;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/simpleShapes/system/meshQualityDict b/tutorials/mesh/cvMesh/simpleShapes/system/meshQualityDict
new file mode 100644
index 0000000000000000000000000000000000000000..1b83e2bd87b647e97cf8b39d2dccbb30af267c8e
--- /dev/null
+++ b/tutorials/mesh/cvMesh/simpleShapes/system/meshQualityDict
@@ -0,0 +1,73 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+
+FoamFile
+{
+    version         2.0;
+    format          ascii;
+
+    root            "";
+    case            "";
+    instance        "";
+    local           "";
+
+    class           dictionary;
+    object          meshQualityDict;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+//- Maximum non-orthogonality allowed. Set to 180 to disable.
+maxNonOrtho         65;
+
+//- Max skewness allowed. Set to <0 to disable.
+maxBoundarySkewness 50;
+maxInternalSkewness 10;
+
+//- Max concaveness allowed. Is angle (in degrees) below which concavity
+//  is allowed. 0 is straight face, <0 would be convex face.
+//  Set to 180 to disable.
+maxConcave          80;
+
+//- Minimum quality of the tet formed by the face-centre
+//  and variable base point minimum decomposition triangles and
+//  the cell centre. This has to be a positive number for tracking
+//  to work. Set to very negative number (e.g. -1E30) to
+//  disable.
+//     <0 = inside out tet,
+//      0 = flat tet
+//      1 = regular tet
+minTetQuality       1e-30;
+
+//- Minimum pyramid volume. Is absolute volume of cell pyramid.
+//  Set to a sensible fraction of the smallest cell volume expected.
+//  Set to very negative number (e.g. -1E30) to disable.
+minVol              0;
+
+//- Minimum face area. Set to <0 to disable.
+minArea             -1;
+
+//- Minimum face twist. Set to <-1 to disable. dot product of face normal
+//- and face centre triangles normal
+minTwist            0.001;
+
+//- minimum normalised cell determinant
+//- 1 = hex, <= 0 = folded or flattened illegal cell
+minDeterminant      0.001;
+
+//- minFaceWeight (0 -> 0.5)
+minFaceWeight       0.02;
+
+//- minVolRatio (0 -> 1)
+minVolRatio         0.01;
+
+//must be >0 for Fluent compatibility
+minTriangleTwist    -1;
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/simpleShapes/system/surfaceFeatureExtractDict b/tutorials/mesh/cvMesh/simpleShapes/system/surfaceFeatureExtractDict
new file mode 100644
index 0000000000000000000000000000000000000000..850a4ea41f48c278271672540d2f1eff0dd60b03
--- /dev/null
+++ b/tutorials/mesh/cvMesh/simpleShapes/system/surfaceFeatureExtractDict
@@ -0,0 +1,57 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      surfaceFeatureExtractDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+coneAndSphere_clean_orient.obj
+{
+    extractionMethod    extractFromSurface;
+
+    extractFromSurfaceCoeffs
+    {
+        // Mark edges whose adjacent surface normals are at an angle less
+        // than includedAngle as features
+        // - 0  : selects no edges
+        // - 180: selects all edges
+        includedAngle   125;
+    }
+
+    // Write options
+
+        // Write features to obj format for postprocessing
+        writeObj                no;
+}
+
+
+domain_clean_orient.stl
+{
+    extractionMethod    extractFromSurface;
+
+    extractFromSurfaceCoeffs
+    {
+        // Mark edges whose adjacent surface normals are at an angle less
+        // than includedAngle as features
+        // - 0  : selects no edges
+        // - 180: selects all edges
+        includedAngle   125;
+    }
+
+    // Write options
+
+        // Write features to obj format for postprocessing
+        writeObj                no;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/mesh/cvMesh/simpleShapes/system/topoSetDict b/tutorials/mesh/cvMesh/simpleShapes/system/topoSetDict
new file mode 100644
index 0000000000000000000000000000000000000000..363fbd4fc15ac9b64be4c912371670f1c256f1f3
--- /dev/null
+++ b/tutorials/mesh/cvMesh/simpleShapes/system/topoSetDict
@@ -0,0 +1,148 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      topoSetDict;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+actions
+(
+    {
+        name    z;
+        type    cellSet;
+        action  new;
+        source  boxToCell;
+        sourceInfo
+        {
+            box (-100 -100 0)(100 100 100);
+        }
+    }
+
+    {
+        name    zf;
+        type    faceSet;
+        action  new;
+        source  cellToFace;
+        sourceInfo
+        {
+            set    z;
+            option all;
+        }
+    }
+
+    {
+        name    z;
+        type    cellSet;
+        action  invert;
+    }
+
+    {
+        name    zf;
+        type    faceSet;
+        action  subset;
+        source  cellToFace;
+        sourceInfo
+        {
+            set    z;
+            option all;
+        }
+    }
+
+    // ~~~~~~~~~~~~~~~~ //
+
+    {
+        name    y;
+        type    cellSet;
+        action  new;
+        source  boxToCell;
+        sourceInfo
+        {
+            box (-100 0.1 -100)(100 100 100);
+        }
+    }
+
+    {
+        name    yf;
+        type    faceSet;
+        action  new;
+        source  cellToFace;
+        sourceInfo
+        {
+            set    y;
+            option all;
+        }
+    }
+
+    {
+        name    y;
+        type    cellSet;
+        action  invert;
+    }
+
+    {
+        name    yf;
+        type    faceSet;
+        action  subset;
+        source  cellToFace;
+        sourceInfo
+        {
+            set    y;
+            option all;
+        }
+    }
+
+    // ~~~~~~~~~~~~~~~~ //
+
+    {
+        name    x;
+        type    cellSet;
+        action  new;
+        source  boxToCell;
+        sourceInfo
+        {
+            box (0.3 -100 -100)(100 100 100);
+        }
+    }
+
+    {
+        name    xf;
+        type    faceSet;
+        action  new;
+        source  cellToFace;
+        sourceInfo
+        {
+            set    x;
+            option all;
+        }
+    }
+
+    {
+        name    x;
+        type    cellSet;
+        action  invert;
+    }
+
+    {
+        name    xf;
+        type    faceSet;
+        action  subset;
+        source  cellToFace;
+        sourceInfo
+        {
+            set    x;
+            option all;
+        }
+    }
+);
+
+// ************************************************************************* //